typedef void *__builtin_va_list;
typedef long int ptrdiff_t;
typedef long unsigned int size_t;
typedef int wchar_t;
extern char *gettext (const char *__msgid)
     ;
extern char *dgettext (const char *__domainname, const char *__msgid)
     ;
extern char *__dgettext (const char *__domainname, const char *__msgid)
     ;
extern char *dcgettext (const char *__domainname,
   const char *__msgid, int __category)
     ;
extern char *__dcgettext (const char *__domainname,
     const char *__msgid, int __category)
     ;
extern char *ngettext (const char *__msgid1, const char *__msgid2,
         unsigned long int __n)
     ;
extern char *dngettext (const char *__domainname, const char *__msgid1,
   const char *__msgid2, unsigned long int __n)
     ;
extern char *dcngettext (const char *__domainname, const char *__msgid1,
    const char *__msgid2, unsigned long int __n,
    int __category)
     ;
extern char *textdomain (const char *__domainname) ;
extern char *bindtextdomain (const char *__domainname,
        const char *__dirname) ;
extern char *bind_textdomain_codeset (const char *__domainname,
          const char *__codeset) ;
typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;
typedef long int __quad_t;
typedef unsigned long int __u_quad_t;
typedef unsigned long int __dev_t;
typedef unsigned int __uid_t;
typedef unsigned int __gid_t;
typedef unsigned long int __ino_t;
typedef unsigned long int __ino64_t;
typedef unsigned int __mode_t;
typedef unsigned long int __nlink_t;
typedef long int __off_t;
typedef long int __off64_t;
typedef int __pid_t;
typedef struct { int __val[2]; } __fsid_t;
typedef long int __clock_t;
typedef unsigned long int __rlim_t;
typedef unsigned long int __rlim64_t;
typedef unsigned int __id_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;
typedef int __daddr_t;
typedef int __key_t;
typedef int __clockid_t;
typedef void * __timer_t;
typedef long int __blksize_t;
typedef long int __blkcnt_t;
typedef long int __blkcnt64_t;
typedef unsigned long int __fsblkcnt_t;
typedef unsigned long int __fsblkcnt64_t;
typedef unsigned long int __fsfilcnt_t;
typedef unsigned long int __fsfilcnt64_t;
typedef long int __fsword_t;
typedef long int __ssize_t;
typedef long int __syscall_slong_t;
typedef unsigned long int __syscall_ulong_t;
typedef __off64_t __loff_t;
typedef __quad_t *__qaddr_t;
typedef char *__caddr_t;
typedef long int __intptr_t;
typedef unsigned int __socklen_t;
static unsigned short int
__bswap_16 (unsigned short int __bsx)
{
  return ((unsigned short int) ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)));
}
static unsigned int
__bswap_32 (unsigned int __bsx)
{
  return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24));
}
static __uint64_t
__bswap_64 (__uint64_t __bsx)
{
  return ((((__bsx) & 0xff00000000000000ull) >> 56) | (((__bsx) & 0x00ff000000000000ull) >> 40) | (((__bsx) & 0x0000ff0000000000ull) >> 24) | (((__bsx) & 0x000000ff00000000ull) >> 8) | (((__bsx) & 0x00000000ff000000ull) << 8) | (((__bsx) & 0x0000000000ff0000ull) << 24) | (((__bsx) & 0x000000000000ff00ull) << 40) | (((__bsx) & 0x00000000000000ffull) << 56));
}
union wait
  {
    int w_status;
    struct
      {
 unsigned int __w_termsig:7;
 unsigned int __w_coredump:1;
 unsigned int __w_retcode:8;
 unsigned int:16;
      } __wait_terminated;
    struct
      {
 unsigned int __w_stopval:8;
 unsigned int __w_stopsig:8;
 unsigned int:16;
      } __wait_stopped;
  };
typedef struct
  {
    int quot;
    int rem;
  } div_t;
typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;
 typedef struct
  {
    long long int quot;
    long long int rem;
  } lldiv_t;
extern size_t __ctype_get_mb_cur_max (void) ;
extern double atof (const char *__nptr)
     ;
extern int atoi (const char *__nptr)
     ;
extern long int atol (const char *__nptr)
     ;
 extern long long int atoll (const char *__nptr)
     ;
extern double strtod (const char * __nptr,
        char ** __endptr)
     ;
extern float strtof (const char * __nptr,
       char ** __endptr) ;
extern long double strtold (const char * __nptr,
       char ** __endptr)
     ;
extern long int strtol (const char * __nptr,
   char ** __endptr, int __base)
     ;
extern unsigned long int strtoul (const char * __nptr,
      char ** __endptr, int __base)
     ;
extern long long int strtoq (const char * __nptr,
        char ** __endptr, int __base)
     ;
extern unsigned long long int strtouq (const char * __nptr,
           char ** __endptr, int __base)
     ;
extern long long int strtoll (const char * __nptr,
         char ** __endptr, int __base)
     ;
extern unsigned long long int strtoull (const char * __nptr,
     char ** __endptr, int __base)
     ;
typedef struct __locale_struct
{
  struct __locale_data *__locales[13];
  const unsigned short int *__ctype_b;
  const int *__ctype_tolower;
  const int *__ctype_toupper;
  const char *__names[13];
} *__locale_t;
typedef __locale_t locale_t;
extern long int strtol_l (const char * __nptr,
     char ** __endptr, int __base,
     __locale_t __loc) ;
extern unsigned long int strtoul_l (const char * __nptr,
        char ** __endptr,
        int __base, __locale_t __loc)
     ;
extern long long int strtoll_l (const char * __nptr,
    char ** __endptr, int __base,
    __locale_t __loc)
     ;
extern unsigned long long int strtoull_l (const char * __nptr,
       char ** __endptr,
       int __base, __locale_t __loc)
     ;
extern double strtod_l (const char * __nptr,
   char ** __endptr, __locale_t __loc)
     ;
extern float strtof_l (const char * __nptr,
         char ** __endptr, __locale_t __loc)
     ;
extern long double strtold_l (const char * __nptr,
         char ** __endptr,
         __locale_t __loc)
     ;
extern char *l64a (long int __n) ;
extern long int a64l (const char *__s)
     ;
typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;
typedef __loff_t loff_t;
typedef __ino_t ino_t;
typedef __ino64_t ino64_t;
typedef __dev_t dev_t;
typedef __gid_t gid_t;
typedef __mode_t mode_t;
typedef __nlink_t nlink_t;
typedef __uid_t uid_t;
typedef __off_t off_t;
typedef __off64_t off64_t;
typedef __pid_t pid_t;
typedef __id_t id_t;
typedef __ssize_t ssize_t;
typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;
typedef __key_t key_t;
typedef __clock_t clock_t;
typedef __time_t time_t;
typedef __clockid_t clockid_t;
typedef __timer_t timer_t;
typedef __useconds_t useconds_t;
typedef __suseconds_t suseconds_t;
typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
typedef char int8_t;
typedef short int int16_t;
typedef int int32_t;
typedef long int int64_t;
typedef unsigned char u_int8_t;
typedef unsigned short int u_int16_t;
typedef unsigned int u_int32_t;
typedef unsigned long int u_int64_t;
typedef int register_t;
typedef int __sig_atomic_t;
typedef struct
  {
    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
  } __sigset_t;
typedef __sigset_t sigset_t;
struct timespec
  {
    __time_t tv_sec;
    __syscall_slong_t tv_nsec;
  };
struct timeval
  {
    __time_t tv_sec;
    __suseconds_t tv_usec;
  };
typedef long int __fd_mask;
typedef struct
  {
    __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
  } fd_set;
typedef __fd_mask fd_mask;
extern int select (int __nfds, fd_set * __readfds,
     fd_set * __writefds,
     fd_set * __exceptfds,
     struct timeval * __timeout);
extern int pselect (int __nfds, fd_set * __readfds,
      fd_set * __writefds,
      fd_set * __exceptfds,
      const struct timespec * __timeout,
      const __sigset_t * __sigmask);
extern unsigned int gnu_dev_major (unsigned long long int __dev)
     ;
extern unsigned int gnu_dev_minor (unsigned long long int __dev)
     ;
extern unsigned long long int gnu_dev_makedev (unsigned int __major,
            unsigned int __minor)
     ;
typedef __blksize_t blksize_t;
typedef __blkcnt_t blkcnt_t;
typedef __fsblkcnt_t fsblkcnt_t;
typedef __fsfilcnt_t fsfilcnt_t;
typedef __blkcnt64_t blkcnt64_t;
typedef __fsblkcnt64_t fsblkcnt64_t;
typedef __fsfilcnt64_t fsfilcnt64_t;
typedef unsigned long int pthread_t;
union pthread_attr_t
{
  char __size[56];
  long int __align;
};
typedef union pthread_attr_t pthread_attr_t;
typedef struct __pthread_internal_list
{
  struct __pthread_internal_list *__prev;
  struct __pthread_internal_list *__next;
} __pthread_list_t;
typedef union
{
  struct __pthread_mutex_s
  {
    int __lock;
    unsigned int __count;
    int __owner;
    unsigned int __nusers;
    int __kind;
    short __spins;
    short __elision;
    __pthread_list_t __list;
  } __data;
  char __size[40];
  long int __align;
} pthread_mutex_t;
typedef union
{
  char __size[4];
  int __align;
} pthread_mutexattr_t;
typedef union
{
  struct
  {
    int __lock;
    unsigned int __futex;
    unsigned long long int __total_seq;
    unsigned long long int __wakeup_seq;
    unsigned long long int __woken_seq;
    void *__mutex;
    unsigned int __nwaiters;
    unsigned int __broadcast_seq;
  } __data;
  char __size[48];
  long long int __align;
} pthread_cond_t;
typedef union
{
  char __size[4];
  int __align;
} pthread_condattr_t;
typedef unsigned int pthread_key_t;
typedef int pthread_once_t;
typedef union
{
  struct
  {
    int __lock;
    unsigned int __nr_readers;
    unsigned int __readers_wakeup;
    unsigned int __writer_wakeup;
    unsigned int __nr_readers_queued;
    unsigned int __nr_writers_queued;
    int __writer;
    int __shared;
    signed char __rwelision;
    unsigned char __pad1[7];
    unsigned long int __pad2;
    unsigned int __flags;
  } __data;
  char __size[56];
  long int __align;
} pthread_rwlock_t;
typedef union
{
  char __size[8];
  long int __align;
} pthread_rwlockattr_t;
typedef volatile int pthread_spinlock_t;
typedef union
{
  char __size[32];
  long int __align;
} pthread_barrier_t;
typedef union
{
  char __size[4];
  int __align;
} pthread_barrierattr_t;
extern long int random (void) ;
extern void srandom (unsigned int __seed) ;
extern char *initstate (unsigned int __seed, char *__statebuf,
   size_t __statelen) ;
extern char *setstate (char *__statebuf) ;
struct random_data
  {
    int32_t *fptr;
    int32_t *rptr;
    int32_t *state;
    int rand_type;
    int rand_deg;
    int rand_sep;
    int32_t *end_ptr;
  };
extern int random_r (struct random_data * __buf,
       int32_t * __result) ;
extern int srandom_r (unsigned int __seed, struct random_data *__buf)
     ;
extern int initstate_r (unsigned int __seed, char * __statebuf,
   size_t __statelen,
   struct random_data * __buf)
     ;
extern int setstate_r (char * __statebuf,
         struct random_data * __buf)
     ;
extern int rand (void) ;
extern void srand (unsigned int __seed) ;
extern int rand_r (unsigned int *__seed) ;
extern double drand48 (void) ;
extern double erand48 (unsigned short int __xsubi[3]) ;
extern long int lrand48 (void) ;
extern long int nrand48 (unsigned short int __xsubi[3])
     ;
extern long int mrand48 (void) ;
extern long int jrand48 (unsigned short int __xsubi[3])
     ;
extern void srand48 (long int __seedval) ;
extern unsigned short int *seed48 (unsigned short int __seed16v[3])
     ;
extern void lcong48 (unsigned short int __param[7]) ;
struct drand48_data
  {
    unsigned short int __x[3];
    unsigned short int __old_x[3];
    unsigned short int __c;
    unsigned short int __init;
    unsigned long long int __a;
  };
extern int drand48_r (struct drand48_data * __buffer,
        double * __result) ;
extern int erand48_r (unsigned short int __xsubi[3],
        struct drand48_data * __buffer,
        double * __result) ;
extern int lrand48_r (struct drand48_data * __buffer,
        long int * __result)
     ;
extern int nrand48_r (unsigned short int __xsubi[3],
        struct drand48_data * __buffer,
        long int * __result)
     ;
extern int mrand48_r (struct drand48_data * __buffer,
        long int * __result)
     ;
extern int jrand48_r (unsigned short int __xsubi[3],
        struct drand48_data * __buffer,
        long int * __result)
     ;
extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
     ;
extern int seed48_r (unsigned short int __seed16v[3],
       struct drand48_data *__buffer) ;
extern int lcong48_r (unsigned short int __param[7],
        struct drand48_data *__buffer)
     ;
extern void *malloc (size_t __size) ;
extern void *calloc (size_t __nmemb, size_t __size)
     ;
extern void *realloc (void *__ptr, size_t __size)
     ;
extern void free (void *__ptr) ;
extern void cfree (void *__ptr) ;
extern void *alloca (size_t __size) ;
extern void *valloc (size_t __size) ;
extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
     ;
extern void *aligned_alloc (size_t __alignment, size_t __size)
     ;
extern void abort (void) ;
extern int atexit (void (*__func) (void)) ;
extern int at_quick_exit (void (*__func) (void)) ;
extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
     ;
extern void exit (int __status) ;
extern void quick_exit (int __status) ;
extern void _Exit (int __status) ;
extern char *getenv (const char *__name) ;
extern char *secure_getenv (const char *__name)
     ;
extern int putenv (char *__string) ;
extern int setenv (const char *__name, const char *__value, int __replace)
     ;
extern int unsetenv (const char *__name) ;
extern int clearenv (void) ;
extern char *mktemp (char *__template) ;
extern int mkstemp (char *__template) ;
extern int mkstemp64 (char *__template) ;
extern int mkstemps (char *__template, int __suffixlen) ;
extern int mkstemps64 (char *__template, int __suffixlen)
     ;
extern char *mkdtemp (char *__template) ;
extern int mkostemp (char *__template, int __flags) ;
extern int mkostemp64 (char *__template, int __flags) ;
extern int mkostemps (char *__template, int __suffixlen, int __flags)
     ;
extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
     ;
extern int system (const char *__command) ;
extern char *canonicalize_file_name (const char *__name)
     ;
extern char *realpath (const char * __name,
         char * __resolved) ;
typedef int (*__compar_fn_t) (const void *, const void *);
typedef __compar_fn_t comparison_fn_t;
typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
extern void *bsearch (const void *__key, const void *__base,
        size_t __nmemb, size_t __size, __compar_fn_t __compar)
     ;
extern void qsort (void *__base, size_t __nmemb, size_t __size,
     __compar_fn_t __compar) ;
extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
       __compar_d_fn_t __compar, void *__arg)
  ;
extern int abs (int __x) ;
extern long int labs (long int __x) ;
 extern long long int llabs (long long int __x)
     ;
extern div_t div (int __numer, int __denom)
     ;
extern ldiv_t ldiv (long int __numer, long int __denom)
     ;
 extern lldiv_t lldiv (long long int __numer,
        long long int __denom)
     ;
extern char *ecvt (double __value, int __ndigit, int * __decpt,
     int * __sign) ;
extern char *fcvt (double __value, int __ndigit, int * __decpt,
     int * __sign) ;
extern char *gcvt (double __value, int __ndigit, char *__buf)
     ;
extern char *qecvt (long double __value, int __ndigit,
      int * __decpt, int * __sign)
     ;
extern char *qfcvt (long double __value, int __ndigit,
      int * __decpt, int * __sign)
     ;
extern char *qgcvt (long double __value, int __ndigit, char *__buf)
     ;
extern int ecvt_r (double __value, int __ndigit, int * __decpt,
     int * __sign, char * __buf,
     size_t __len) ;
extern int fcvt_r (double __value, int __ndigit, int * __decpt,
     int * __sign, char * __buf,
     size_t __len) ;
extern int qecvt_r (long double __value, int __ndigit,
      int * __decpt, int * __sign,
      char * __buf, size_t __len)
     ;
extern int qfcvt_r (long double __value, int __ndigit,
      int * __decpt, int * __sign,
      char * __buf, size_t __len)
     ;
extern int mblen (const char *__s, size_t __n) ;
extern int mbtowc (wchar_t * __pwc,
     const char * __s, size_t __n) ;
extern int wctomb (char *__s, wchar_t __wchar) ;
extern size_t mbstowcs (wchar_t * __pwcs,
   const char * __s, size_t __n) ;
extern size_t wcstombs (char * __s,
   const wchar_t * __pwcs, size_t __n)
     ;
extern int rpmatch (const char *__response) ;
extern int getsubopt (char ** __optionp,
        char *const * __tokens,
        char ** __valuep)
     ;
extern void setkey (const char *__key) ;
extern int posix_openpt (int __oflag) ;
extern int grantpt (int __fd) ;
extern int unlockpt (int __fd) ;
extern char *ptsname (int __fd) ;
extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
     ;
extern int getpt (void);
extern int getloadavg (double __loadavg[], int __nelem)
     ;
extern void *memcpy (void * __dest, const void * __src,
       size_t __n) ;
extern void *memmove (void *__dest, const void *__src, size_t __n)
     ;
extern void *memccpy (void * __dest, const void * __src,
        int __c, size_t __n)
     ;
extern void *memset (void *__s, int __c, size_t __n) ;
extern int memcmp (const void *__s1, const void *__s2, size_t __n)
     ;
extern void *memchr (const void *__s, int __c, size_t __n)
      ;
extern void *rawmemchr (const void *__s, int __c)
     ;
extern void *memrchr (const void *__s, int __c, size_t __n)
      ;
extern char *strcpy (char * __dest, const char * __src)
     ;
extern char *strncpy (char * __dest,
        const char * __src, size_t __n)
     ;
extern char *strcat (char * __dest, const char * __src)
     ;
extern char *strncat (char * __dest, const char * __src,
        size_t __n) ;
extern int strcmp (const char *__s1, const char *__s2)
     ;
extern int strncmp (const char *__s1, const char *__s2, size_t __n)
     ;
extern int strcoll (const char *__s1, const char *__s2)
     ;
extern size_t strxfrm (char * __dest,
         const char * __src, size_t __n)
     ;
extern int strcoll_l (const char *__s1, const char *__s2, __locale_t __l)
     ;
extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
    __locale_t __l) ;
extern char *strdup (const char *__s)
     ;
extern char *strndup (const char *__string, size_t __n)
     ;
extern char *strchr (const char *__s, int __c)
     ;
extern char *strrchr (const char *__s, int __c)
     ;
extern char *strchrnul (const char *__s, int __c)
     ;
extern size_t strcspn (const char *__s, const char *__reject)
     ;
extern size_t strspn (const char *__s, const char *__accept)
     ;
extern char *strpbrk (const char *__s, const char *__accept)
     ;
extern char *strstr (const char *__haystack, const char *__needle)
     ;
extern char *strtok (char * __s, const char * __delim)
     ;
extern char *__strtok_r (char * __s,
    const char * __delim,
    char ** __save_ptr)
     ;
extern char *strtok_r (char * __s, const char * __delim,
         char ** __save_ptr)
     ;
extern char *strcasestr (const char *__haystack, const char *__needle)
     ;
extern void *memmem (const void *__haystack, size_t __haystacklen,
       const void *__needle, size_t __needlelen)
     ;
extern void *__mempcpy (void * __dest,
   const void * __src, size_t __n)
     ;
extern void *mempcpy (void * __dest,
        const void * __src, size_t __n)
     ;
extern size_t strlen (const char *__s)
     ;
extern size_t strnlen (const char *__string, size_t __maxlen)
     ;
extern char *strerror (int __errnum) ;
extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
     ;
extern char *strerror_l (int __errnum, __locale_t __l) ;
extern void __bzero (void *__s, size_t __n) ;
extern void bcopy (const void *__src, void *__dest, size_t __n)
     ;
extern void bzero (void *__s, size_t __n) ;
extern int bcmp (const void *__s1, const void *__s2, size_t __n)
     ;
extern char *index (const char *__s, int __c)
     ;
extern char *rindex (const char *__s, int __c)
     ;
extern int ffs (int __i) ;
extern int ffsl (long int __l) ;
 extern int ffsll (long long int __ll)
     ;
extern int strcasecmp (const char *__s1, const char *__s2)
     ;
extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
     ;
extern int strcasecmp_l (const char *__s1, const char *__s2,
    __locale_t __loc)
     ;
extern int strncasecmp_l (const char *__s1, const char *__s2,
     size_t __n, __locale_t __loc)
     ;
extern char *strsep (char ** __stringp,
       const char * __delim)
     ;
extern char *strsignal (int __sig) ;
extern char *__stpcpy (char * __dest, const char * __src)
     ;
extern char *stpcpy (char * __dest, const char * __src)
     ;
extern char *__stpncpy (char * __dest,
   const char * __src, size_t __n)
     ;
extern char *stpncpy (char * __dest,
        const char * __src, size_t __n)
     ;
extern int strverscmp (const char *__s1, const char *__s2)
     ;
extern char *strfry (char *__string) ;
extern void *memfrob (void *__s, size_t __n) ;
extern char *basename (const char *__filename) ;
typedef long int s_reg_t;
typedef unsigned long int active_reg_t;
typedef unsigned long int reg_syntax_t;
extern reg_syntax_t xre_syntax_options;
typedef enum
{
  REG_ENOSYS = -1,
  REG_NOERROR = 0,
  REG_NOMATCH,
  REG_BADPAT,
  REG_ECOLLATE,
  REG_ECTYPE,
  REG_EESCAPE,
  REG_ESUBREG,
  REG_EBRACK,
  REG_EPAREN,
  REG_EBRACE,
  REG_BADBR,
  REG_ERANGE,
  REG_ESPACE,
  REG_BADRPT,
  REG_EEND,
  REG_ESIZE,
  REG_ERPAREN
} reg_errcode_t;
struct re_pattern_buffer
{
  unsigned char *buffer;
  unsigned long int allocated;
  unsigned long int used;
  reg_syntax_t syntax;
  char *fastmap;
  char * translate;
  size_t re_nsub;
  unsigned can_be_null : 1;
  unsigned regs_allocated : 2;
  unsigned fastmap_accurate : 1;
  unsigned no_sub : 1;
  unsigned not_bol : 1;
  unsigned not_eol : 1;
  unsigned newline_anchor : 1;
};
typedef struct re_pattern_buffer regex_t;
typedef int regoff_t;
struct re_registers
{
  unsigned num_regs;
  regoff_t *start;
  regoff_t *end;
};
typedef struct
{
  regoff_t rm_so;
  regoff_t rm_eo;
} regmatch_t;
extern reg_syntax_t xre_set_syntax (reg_syntax_t syntax);
extern const char *xre_compile_pattern
  (const char *pattern, size_t length, struct re_pattern_buffer *buffer)
                                               ;
extern int xre_compile_fastmap (struct re_pattern_buffer *buffer);
extern int xre_search
  (struct re_pattern_buffer *buffer, const char *string, int length, int start, int range, struct re_registers *regs)
                                                                         ;
extern int xre_search_2
  (struct re_pattern_buffer *buffer, const char *string1, int length1, const char *string2, int length2, int start, int range, struct re_registers *regs, int stop)
                                                                        ;
extern int xre_match
  (struct re_pattern_buffer *buffer, const char *string, int length, int start, struct re_registers *regs)
                                                               ;
extern int xre_match_2
  (struct re_pattern_buffer *buffer, const char *string1, int length1, const char *string2, int length2, int start, struct re_registers *regs, int stop)
                                                             ;
extern void xre_set_registers
  (struct re_pattern_buffer *buffer, struct re_registers *regs, unsigned num_regs, regoff_t *starts, regoff_t *ends)
                                                                  ;
extern char *xre_comp (const char *);
extern int xre_exec (const char *);
extern int xregcomp (regex_t * __preg, const char * __pattern, int __cflags)
                       ;
extern int xregexec (const regex_t * __preg, const char * __string, size_t __nmatch, regmatch_t __pmatch[], int __eflags)
                       ;
extern size_t xregerror (int __errcode, const regex_t *__preg, char *__errbuf, size_t __errbuf_size)
                                            ;
extern void xregfree (regex_t *__preg);
enum
{
  _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
  _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)),
  _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)),
  _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)),
  _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)),
  _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)),
  _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)),
  _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)),
  _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)),
  _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)),
  _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)),
  _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8))
};
extern const unsigned short int **__ctype_b_loc (void)
     ;
extern const __int32_t **__ctype_tolower_loc (void)
     ;
extern const __int32_t **__ctype_toupper_loc (void)
     ;
extern int isalnum (int) ;
extern int isalpha (int) ;
extern int iscntrl (int) ;
extern int isdigit (int) ;
extern int islower (int) ;
extern int isgraph (int) ;
extern int isprint (int) ;
extern int ispunct (int) ;
extern int isspace (int) ;
extern int isupper (int) ;
extern int isxdigit (int) ;
extern int tolower (int __c) ;
extern int toupper (int __c) ;
extern int isblank (int) ;
extern int isctype (int __c, int __mask) ;
extern int isascii (int __c) ;
extern int toascii (int __c) ;
extern int _toupper (int) ;
extern int _tolower (int) ;
extern int isalnum_l (int, __locale_t) ;
extern int isalpha_l (int, __locale_t) ;
extern int iscntrl_l (int, __locale_t) ;
extern int isdigit_l (int, __locale_t) ;
extern int islower_l (int, __locale_t) ;
extern int isgraph_l (int, __locale_t) ;
extern int isprint_l (int, __locale_t) ;
extern int ispunct_l (int, __locale_t) ;
extern int isspace_l (int, __locale_t) ;
extern int isupper_l (int, __locale_t) ;
extern int isxdigit_l (int, __locale_t) ;
extern int isblank_l (int, __locale_t) ;
extern int __tolower_l (int __c, __locale_t __l) ;
extern int tolower_l (int __c, __locale_t __l) ;
extern int __toupper_l (int __c, __locale_t __l) ;
extern int toupper_l (int __c, __locale_t __l) ;
static char re_syntax_table[256];
static void init_syntax_once (void);
static void
init_syntax_once ()
{
   register int c;
   static int done = 0;
   if (done)
     return;
   (memset (re_syntax_table, '\0', sizeof re_syntax_table), (re_syntax_table));
   for (c = 0; c < 256; ++c)
     if ((1 && ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISalnum)))
 re_syntax_table[c] = 1;
   re_syntax_table['_'] = 1;
   done = 1;
}
typedef char boolean;
static reg_errcode_t byte_regex_compile (const char *pattern, size_t size, reg_syntax_t syntax, struct re_pattern_buffer *bufp)
                                                                                   ;
static int byte_re_match_2_internal (struct re_pattern_buffer *bufp, const char *string1, int size1, const char *string2, int size2, int pos, struct re_registers *regs, int stop)
                    ;
static int byte_re_search_2 (struct re_pattern_buffer *bufp, const char *string1, int size1, const char *string2, int size2, int startpos, int range, struct re_registers *regs, int stop)
                                              ;
static int byte_re_compile_fastmap (struct re_pattern_buffer *bufp);
typedef enum
{
  no_op = 0,
  succeed,
  exactn,
  anychar,
  charset,
  charset_not,
  start_memory,
  stop_memory,
  duplicate,
  begline,
  endline,
  begbuf,
  endbuf,
  jump,
  jump_past_alt,
  on_failure_jump,
  on_failure_keep_string_jump,
  pop_failure_jump,
  maybe_pop_jump,
  dummy_failure_jump,
  push_dummy_failure,
  succeed_n,
  jump_n,
  set_number_at,
  wordchar,
  notwordchar,
  wordbeg,
  wordend,
  wordbound,
  notwordbound
} re_opcode_t;
int xre_max_failures = 4000;
union byte_fail_stack_elt
{
  unsigned char *pointer;
  int integer;
};
typedef union byte_fail_stack_elt byte_fail_stack_elt_t;
typedef struct
{
  byte_fail_stack_elt_t *stack;
  unsigned size;
  unsigned avail;
} byte_fail_stack_type;
typedef union
{
  byte_fail_stack_elt_t word;
  struct
  {
    unsigned match_null_string_p : 2;
    unsigned is_active : 1;
    unsigned matched_something : 1;
    unsigned ever_matched_something : 1;
  } bits;
} byte_register_info_type;
static char byte_reg_unset_dummy;
static void byte_store_op1 (re_opcode_t op, unsigned char *loc, int arg);
static void byte_store_op2 (re_opcode_t op, unsigned char *loc, int arg1, int arg2)
                         ;
static void byte_insert_op1 (re_opcode_t op, unsigned char *loc, int arg, unsigned char *end)
                             ;
static void byte_insert_op2 (re_opcode_t op, unsigned char *loc, int arg1, int arg2, unsigned char *end)
                                        ;
static boolean byte_at_begline_loc_p (const char *pattern, const char *p, reg_syntax_t syntax)
                             ;
static boolean byte_at_endline_loc_p (const char *p, const char *pend, reg_syntax_t syntax)
                             ;
static reg_errcode_t byte_compile_range (unsigned int range_start, const char **p_ptr, const char *pend, char *translate, reg_syntax_t syntax, unsigned char *b)
                           ;
typedef unsigned regnum_t;
typedef long pattern_offset_t;
typedef struct
{
  pattern_offset_t begalt_offset;
  pattern_offset_t fixup_alt_jump;
  pattern_offset_t inner_group_offset;
  pattern_offset_t laststart_offset;
  regnum_t regnum;
} compile_stack_elt_t;
typedef struct
{
  compile_stack_elt_t *stack;
  unsigned size;
  unsigned avail;
} compile_stack_type;
static boolean group_in_compile_stack (compile_stack_type compile_stack, regnum_t regnum)
                        ;
static reg_errcode_t
byte_regex_compile (pattern, size, syntax, bufp)
     const char *pattern;
     size_t size;
     reg_syntax_t syntax;
     struct re_pattern_buffer *bufp;
{
  register unsigned char c, c1;
  const char *p1;
  register unsigned char *b;
  compile_stack_type compile_stack;
  const char *p = pattern;
  const char *pend = pattern + size;
  char * translate = bufp->translate;
  unsigned char *pending_exact = 0;
  unsigned char *laststart = 0;
  unsigned char *begalt;
  unsigned char *fixup_alt_jump = 0;
  regnum_t regnum = 0;
  compile_stack.stack = ((compile_stack_elt_t *) malloc ((32) * sizeof (compile_stack_elt_t)));
  if (compile_stack.stack == ((void *)0))
    {
      return REG_ESPACE;
    }
  compile_stack.size = 32;
  compile_stack.avail = 0;
  bufp->syntax = syntax;
  bufp->fastmap_accurate = 0;
  bufp->not_bol = bufp->not_eol = 0;
  bufp->used = 0;
  bufp->re_nsub = 0;
   init_syntax_once ();
  if (bufp->allocated == 0)
    {
      if (bufp->buffer)
 {
          ((bufp->buffer) = (unsigned char *) realloc (bufp->buffer, ((32 * sizeof(unsigned char))) * sizeof (unsigned char)));
        }
      else
        {
          bufp->buffer = ((unsigned char *) malloc (((32 * sizeof(unsigned char)) / sizeof(unsigned char)) * sizeof (unsigned char)))
             ;
        }
      if (!bufp->buffer) return (free (compile_stack.stack), REG_ESPACE);
      bufp->allocated = (32 * sizeof(unsigned char));
    }
  begalt = b = bufp->buffer;
  while (p != pend)
    {
      do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
      switch (c)
        {
        case '^':
          {
            if (
                   p == pattern + 1
                || syntax & (((((unsigned long int) 1) << 1) << 1) << 1)
                || byte_at_begline_loc_p (pattern, p, syntax))
              do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (begline); } while (0);
            else
              goto normal_char;
          }
          break;
        case '$':
          {
            if (
                   p == pend
                || syntax & (((((unsigned long int) 1) << 1) << 1) << 1)
                || byte_at_endline_loc_p (p, pend, syntax))
               do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (endline); } while (0);
             else
               goto normal_char;
           }
           break;
 case '+':
        case '?':
          if ((syntax & (((unsigned long int) 1) << 1))
              || (syntax & ((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)))
            goto normal_char;
        handle_plus:
        case '*':
          if (!laststart)
            {
              if (syntax & (((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1))
                return (free (compile_stack.stack), REG_BADRPT);
              else if (!(syntax & ((((((unsigned long int) 1) << 1) << 1) << 1) << 1)))
                goto normal_char;
            }
          {
            boolean keep_string_p = 0;
            char zero_times_ok = 0, many_times_ok = 0;
            for (;;)
              {
                zero_times_ok |= c != '+';
                many_times_ok |= c != '?';
                if (p == pend)
                  break;
                do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
                if (c == '*'
                    || (!(syntax & (((unsigned long int) 1) << 1)) && (c == '+' || c == '?')))
                  ;
                else if (syntax & (((unsigned long int) 1) << 1) && c == '\\')
                  {
                    if (p == pend) return (free (compile_stack.stack), REG_EESCAPE);
                    do {if (p == pend) return REG_EEND; c1 = (unsigned char) *p++; if (translate) c1 = (unsigned char) translate[c1]; } while (0);
                    if (!(c1 == '+' || c1 == '?'))
                      {
                        p--;
                        p--;
                        break;
                      }
                    c = c1;
                  }
                else
                  {
                    p--;
                    break;
                  }
               }
            if (!laststart)
              break;
            if (many_times_ok)
              {
                ;
                while ((unsigned long) (b - bufp->buffer + (1 + 2)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0);
                if ((translate ? (char) translate[(unsigned char) (*(p - 2))] : (*(p - 2))) == (translate ? (char) translate[(unsigned char) ('.')] : ('.'))
      && zero_times_ok
                    && p < pend && (translate ? (char) translate[(unsigned char) (*p)] : (*p)) == (translate ? (char) translate[(unsigned char) ('\n')] : ('\n'))
                    && !(syntax & ((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1)))
                  {
                    byte_store_op1 (jump, b, (int) ((laststart) - (b) - (1 + 2)));
                    keep_string_p = 1;
                  }
                else
                  byte_store_op1 (maybe_pop_jump, b, (int) ((laststart - (1 + 2)) - (b) - (1 + 2)))
                                   ;
                b += 1 + 2;
              }
            while ((unsigned long) (b - bufp->buffer + (1 + 2)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0);
            byte_insert_op1 (keep_string_p ? on_failure_keep_string_jump : on_failure_jump, laststart, (int) ((b + 1 + 2) - (laststart) - (1 + 2)), b)
                                                                ;
            pending_exact = 0;
            b += 1 + 2;
            if (!zero_times_ok)
              {
                while ((unsigned long) (b - bufp->buffer + (1 + 2)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0);
                byte_insert_op1 (dummy_failure_jump, laststart, (int) ((laststart + 2 + 2 * 2) - (laststart) - (1 + 2)), b)
                                    ;
                b += 1 + 2;
              }
            }
   break;
 case '.':
          laststart = b;
          do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (anychar); } while (0);
          break;
        case '[':
          {
            boolean had_char_class = 0;
     unsigned int range_start = 0xffffffff;
            if (p == pend) return (free (compile_stack.stack), REG_EBRACK);
     while ((unsigned long) (b - bufp->buffer + (34)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0);
            laststart = b;
            do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (*p == '^' ? charset_not : charset); } while (0);
            if (*p == '^')
              p++;
            p1 = p;
            do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) ((1 << 8) / 8); } while (0);
            (memset (b, '\0', (1 << 8) / 8), (b));
            if ((re_opcode_t) b[-2] == charset_not
                && (syntax & ((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)))
              (b[((unsigned char) ('\n')) / 8] |= 1 << (((unsigned char) '\n') % 8));
            for (;;)
              {
                if (p == pend) return (free (compile_stack.stack), REG_EBRACK);
                do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
                if ((syntax & ((unsigned long int) 1)) && c == '\\')
                  {
                    if (p == pend) return (free (compile_stack.stack), REG_EESCAPE);
                    do {if (p == pend) return REG_EEND; c1 = (unsigned char) *p++; if (translate) c1 = (unsigned char) translate[c1]; } while (0);
                    (b[((unsigned char) (c1)) / 8] |= 1 << (((unsigned char) c1) % 8));
      range_start = c1;
                    continue;
                  }
                if (c == ']' && p != p1 + 1)
                  break;
                if (had_char_class && c == '-' && *p != ']')
                  return (free (compile_stack.stack), REG_ERANGE);
                if (c == '-'
                    && !(p - 2 >= pattern && p[-2] == '[')
                    && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
                    && *p != ']')
                  {
                    reg_errcode_t ret
                      = byte_compile_range (range_start, &p, pend, translate,
         syntax, b);
                    if (ret != REG_NOERROR) return (free (compile_stack.stack), ret);
      range_start = 0xffffffff;
                  }
                else if (p[0] == '-' && p[1] != ']')
                  {
                    reg_errcode_t ret;
                    do {if (p == pend) return REG_EEND; c1 = (unsigned char) *p++; if (translate) c1 = (unsigned char) translate[c1]; } while (0);
                    ret = byte_compile_range (c, &p, pend, translate, syntax, b);
                    if (ret != REG_NOERROR) return (free (compile_stack.stack), ret);
      range_start = 0xffffffff;
                  }
                else if (syntax & ((((unsigned long int) 1) << 1) << 1) && c == '[' && *p == ':')
                  {
                    char str[6 + 1];
                    do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
                    c1 = 0;
                    if (p == pend) return (free (compile_stack.stack), REG_EBRACK);
                    for (;;)
                      {
                        do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
                        if ((c == ':' && *p == ']') || p == pend)
                          break;
   if (c1 < 6)
     str[c1++] = c;
   else
     str[0] = '\0';
                      }
                    str[c1] = '\0';
                    if (c == ':' && *p == ']')
                      {
                        int ch;
                        boolean is_alnum = ((strcmp (str, "alnum") == 0));
                        boolean is_alpha = ((strcmp (str, "alpha") == 0));
                        boolean is_blank = ((strcmp (str, "blank") == 0));
                        boolean is_cntrl = ((strcmp (str, "cntrl") == 0));
                        boolean is_digit = ((strcmp (str, "digit") == 0));
                        boolean is_graph = ((strcmp (str, "graph") == 0));
                        boolean is_lower = ((strcmp (str, "lower") == 0));
                        boolean is_print = ((strcmp (str, "print") == 0));
                        boolean is_punct = ((strcmp (str, "punct") == 0));
                        boolean is_space = ((strcmp (str, "space") == 0));
                        boolean is_upper = ((strcmp (str, "upper") == 0));
                        boolean is_xdigit = ((strcmp (str, "xdigit") == 0));
                        if (!(((strcmp (str, "alpha") == 0)) || ((strcmp (str, "upper") == 0)) || ((strcmp (str, "lower") == 0)) || ((strcmp (str, "digit") == 0)) || ((strcmp (str, "alnum") == 0)) || ((strcmp (str, "xdigit") == 0)) || ((strcmp (str, "space") == 0)) || ((strcmp (str, "print") == 0)) || ((strcmp (str, "punct") == 0)) || ((strcmp (str, "graph") == 0)) || ((strcmp (str, "cntrl") == 0)) || ((strcmp (str, "blank") == 0))))
     return (free (compile_stack.stack), REG_ECTYPE);
                        do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
                        if (p == pend) return (free (compile_stack.stack), REG_EBRACK);
                        for (ch = 0; ch < 1 << 8; ch++)
                          {
                            if ( (is_alnum && (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISalnum)))
                                || (is_alpha && (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISalpha)))
                                || (is_blank && (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISblank)))
                                || (is_cntrl && (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _IScntrl))))
         (b[((unsigned char) (ch)) / 8] |= 1 << (((unsigned char) ch) % 8));
       if ( (is_digit && (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISdigit)))
                                || (is_graph && (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISgraph)))
                                || (is_lower && (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISlower)))
                                || (is_print && (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISprint))))
         (b[((unsigned char) (ch)) / 8] |= 1 << (((unsigned char) ch) % 8));
       if ( (is_punct && (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISpunct)))
                                || (is_space && (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISspace)))
                                || (is_upper && (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISupper)))
                                || (is_xdigit && (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISxdigit))))
         (b[((unsigned char) (ch)) / 8] |= 1 << (((unsigned char) ch) % 8));
       if ( translate && (is_upper || is_lower)
    && ((1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISupper)) || (1 && ((*__ctype_b_loc ())[(int) ((ch))] & (unsigned short int) _ISlower))))
         (b[((unsigned char) (ch)) / 8] |= 1 << (((unsigned char) ch) % 8));
                          }
                        had_char_class = 1;
                      }
                    else
                      {
                        c1++;
                        while (c1--)
                          p--;
                        (b[((unsigned char) ('[')) / 8] |= 1 << (((unsigned char) '[') % 8));
                        (b[((unsigned char) (':')) / 8] |= 1 << (((unsigned char) ':') % 8));
   range_start = ':';
                        had_char_class = 0;
                      }
                  }
                else if (syntax & ((((unsigned long int) 1) << 1) << 1) && c == '[' && *p == '=')
    {
      unsigned char str[16 + 1];
      do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
      c1 = 0;
      if (p == pend) return (free (compile_stack.stack), REG_EBRACK);
      for (;;)
        {
   do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
   if ((c == '=' && *p == ']') || p == pend)
     break;
   if (c1 < 16)
     str[c1++] = c;
   else
     str[0] = '\0';
                      }
      str[c1] = '\0';
      if (c == '=' && *p == ']' && str[0] != '\0')
        {
     {
       if (c1 != 1)
         return (free (compile_stack.stack), REG_ECOLLATE);
       do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
       (b[((unsigned char) (str[0])) / 8] |= 1 << (((unsigned char) str[0]) % 8));
     }
   had_char_class = 1;
        }
                    else
                      {
                        c1++;
                        while (c1--)
                          p--;
                        (b[((unsigned char) ('[')) / 8] |= 1 << (((unsigned char) '[') % 8));
                        (b[((unsigned char) ('=')) / 8] |= 1 << (((unsigned char) '=') % 8));
   range_start = '=';
                        had_char_class = 0;
                      }
    }
                else if (syntax & ((((unsigned long int) 1) << 1) << 1) && c == '[' && *p == '.')
    {
      unsigned char str[128];
      do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
      c1 = 0;
      if (p == pend) return (free (compile_stack.stack), REG_EBRACK);
      for (;;)
        {
   do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
   if ((c == '.' && *p == ']') || p == pend)
     break;
   if (c1 < sizeof (str))
     str[c1++] = c;
   else
     str[0] = '\0';
                      }
      str[c1] = '\0';
      if (c == '.' && *p == ']' && str[0] != '\0')
        {
     {
       if (c1 != 1)
         return (free (compile_stack.stack), REG_ECOLLATE);
       do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
       (b[((unsigned char) (str[0])) / 8] |= 1 << (((unsigned char) str[0]) % 8));
       range_start = ((const unsigned char *) str)[0];
     }
   had_char_class = 0;
        }
                    else
                      {
                        c1++;
                        while (c1--)
                          p--;
                        (b[((unsigned char) ('[')) / 8] |= 1 << (((unsigned char) '[') % 8));
                        (b[((unsigned char) ('.')) / 8] |= 1 << (((unsigned char) '.') % 8));
   range_start = '.';
                        had_char_class = 0;
                      }
    }
                else
                  {
                    had_char_class = 0;
                    (b[((unsigned char) (c)) / 8] |= 1 << (((unsigned char) c) % 8));
      range_start = c;
                  }
              }
            while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
              b[-1]--;
            b += b[-1];
          }
          break;
 case '(':
          if (syntax & (((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
            goto handle_open;
          else
            goto normal_char;
        case ')':
          if (syntax & (((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
            goto handle_close;
          else
            goto normal_char;
        case '\n':
          if (syntax & (((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
            goto handle_alt;
          else
            goto normal_char;
 case '|':
          if (syntax & (((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
            goto handle_alt;
          else
            goto normal_char;
        case '{':
           if (syntax & (((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) && syntax & ((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
             goto handle_interval;
           else
             goto normal_char;
        case '\\':
          if (p == pend) return (free (compile_stack.stack), REG_EESCAPE);
          do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; } while (0);
          switch (c)
            {
            case '(':
              if (syntax & (((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
                goto normal_backslash;
            handle_open:
              bufp->re_nsub++;
              regnum++;
              if ((compile_stack.avail == compile_stack.size))
                {
                  ((compile_stack.stack) = (compile_stack_elt_t *) realloc (compile_stack.stack, (compile_stack.size << 1) * sizeof (compile_stack_elt_t)))
                                                ;
                  if (compile_stack.stack == ((void *)0)) return REG_ESPACE;
                  compile_stack.size <<= 1;
                }
              (compile_stack.stack[compile_stack.avail]).begalt_offset = begalt - bufp->buffer;
              (compile_stack.stack[compile_stack.avail]).fixup_alt_jump
                = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
              (compile_stack.stack[compile_stack.avail]).laststart_offset = b - bufp->buffer;
              (compile_stack.stack[compile_stack.avail]).regnum = regnum;
              if (regnum <= 255)
                {
                  (compile_stack.stack[compile_stack.avail]).inner_group_offset = b
      - bufp->buffer + 2;
                  do { while ((unsigned long) (b - bufp->buffer + (3)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (start_memory); *b++ = (unsigned char) (regnum); *b++ = (unsigned char) (0); } while (0);
                }
              compile_stack.avail++;
              fixup_alt_jump = 0;
              laststart = 0;
              begalt = b;
       pending_exact = 0;
              break;
            case ')':
              if (syntax & (((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)) goto normal_backslash;
              if ((compile_stack.avail == 0))
  {
    if (syntax & (((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
      goto normal_backslash;
    else
      return (free (compile_stack.stack), REG_ERPAREN);
  }
            handle_close:
              if (fixup_alt_jump)
                {
                  do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (push_dummy_failure); } while (0);
                  byte_store_op1 (jump_past_alt, fixup_alt_jump, (int) ((b - 1) - (fixup_alt_jump) - (1 + 2)));
                }
              if ((compile_stack.avail == 0))
  {
    if (syntax & (((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
      goto normal_char;
    else
      return (free (compile_stack.stack), REG_ERPAREN);
  }
              ;
              {
                regnum_t this_group_regnum;
                compile_stack.avail--;
                begalt = bufp->buffer + (compile_stack.stack[compile_stack.avail]).begalt_offset;
                fixup_alt_jump
                  = (compile_stack.stack[compile_stack.avail]).fixup_alt_jump
                    ? bufp->buffer + (compile_stack.stack[compile_stack.avail]).fixup_alt_jump - 1
                    : 0;
                laststart = bufp->buffer + (compile_stack.stack[compile_stack.avail]).laststart_offset;
                this_group_regnum = (compile_stack.stack[compile_stack.avail]).regnum;
  pending_exact = 0;
                if (this_group_regnum <= 255)
                  {
      unsigned char *inner_group_loc
                      = bufp->buffer + (compile_stack.stack[compile_stack.avail]).inner_group_offset;
                    *inner_group_loc = regnum - this_group_regnum;
                    do { while ((unsigned long) (b - bufp->buffer + (3)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (stop_memory); *b++ = (unsigned char) (this_group_regnum); *b++ = (unsigned char) (regnum - this_group_regnum); } while (0)
                                                           ;
                  }
              }
              break;
            case '|':
              if (syntax & ((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) || syntax & (((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
                goto normal_backslash;
            handle_alt:
              if (syntax & ((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
                goto normal_char;
              while ((unsigned long) (b - bufp->buffer + (1 + 2)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0);
              byte_insert_op1 (on_failure_jump, begalt, (int) ((b + 2 + 2 * 2) - (begalt) - (1 + 2)), b)
                                      ;
              pending_exact = 0;
              b += 1 + 2;
              if (fixup_alt_jump)
                byte_store_op1 (jump_past_alt, fixup_alt_jump, (int) ((b) - (fixup_alt_jump) - (1 + 2)));
              fixup_alt_jump = b;
              while ((unsigned long) (b - bufp->buffer + (1 + 2)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0);
              b += 1 + 2;
              laststart = 0;
              begalt = b;
              break;
            case '{':
              if (!(syntax & (((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
    || (syntax & ((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)))
                goto normal_backslash;
            handle_interval:
              {
                int lower_bound = -1, upper_bound = -1;
  const char *beg_interval = p;
                if (p == pend)
    goto invalid_interval;
                { while (p != pend) { do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0); if (c < '0' || c > '9') break; if (lower_bound <= (0x7fff)) { if (lower_bound < 0) lower_bound = 0; lower_bound = lower_bound * 10 + c - '0'; } } };
                if (c == ',')
                  {
                    { while (p != pend) { do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0); if (c < '0' || c > '9') break; if (upper_bound <= (0x7fff)) { if (upper_bound < 0) upper_bound = 0; upper_bound = upper_bound * 10 + c - '0'; } } };
      if (upper_bound < 0)
        upper_bound = (0x7fff);
                  }
                else
                  upper_bound = lower_bound;
                if (! (0 <= lower_bound && lower_bound <= upper_bound))
    goto invalid_interval;
                if (!(syntax & ((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)))
                  {
      if (c != '\\' || p == pend)
        goto invalid_interval;
                    do {if (p == pend) return REG_EEND; c = (unsigned char) *p++; if (translate) c = (unsigned char) translate[c]; } while (0);
                  }
                if (c != '}')
    goto invalid_interval;
                if (!laststart)
                  {
      if (syntax & (((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1)
   && !(syntax & (((((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)))
                      return (free (compile_stack.stack), REG_BADRPT);
                    else if (syntax & ((((((unsigned long int) 1) << 1) << 1) << 1) << 1))
                      laststart = b;
                    else
                      goto unfetch_interval;
                  }
                if ((0x7fff) < upper_bound)
    return (free (compile_stack.stack), REG_BADBR);
                 if (upper_bound == 0)
                   {
                     while ((unsigned long) (b - bufp->buffer + (1 + 2)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0);
                     byte_insert_op1 (jump, laststart, (int) ((b + 1 + 2) - (laststart) - (1 + 2)), b)
                            ;
                     b += 1 + 2;
                   }
                 else
                   {
                     unsigned nbytes = 2 + 4 * 2 +
         (upper_bound > 1) * (2 + 4 * 2);
                     while ((unsigned long) (b - bufp->buffer + (nbytes)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0);
                     byte_insert_op2 (succeed_n, laststart, (int) ((b + 1 + 2 * 2 + (upper_bound > 1) * (1 + 2 * 2)) - (laststart) - (1 + 2)), lower_bound, b)
                     ;
                     b += 1 + 2 * 2;
                     byte_insert_op2 (set_number_at, laststart, 1
     + 2 * 2, lower_bound, b);
                     b += 1 + 2 * 2;
                     if (upper_bound > 1)
                       {
                         byte_store_op2 (jump_n, b, (int) ((laststart + 2 * 2 + 1) - (b) - (1 + 2)), upper_bound - 1)
                                                      ;
                         b += 1 + 2 * 2;
                         byte_insert_op2 (set_number_at, laststart,
          b - laststart,
          upper_bound - 1, b);
                         b += 1 + 2 * 2;
                       }
                   }
                pending_exact = 0;
  break;
       invalid_interval:
  if (!(syntax & (((((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)))
    return (free (compile_stack.stack), p == pend ? REG_EBRACE : REG_BADBR);
       unfetch_interval:
  p = beg_interval;
  c = '{';
  if (syntax & ((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
    goto normal_char;
  else
    goto normal_backslash;
       }
            case 'w':
       if (syntax & (((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
  goto normal_char;
              laststart = b;
              do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (wordchar); } while (0);
              break;
            case 'W':
       if (syntax & (((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
  goto normal_char;
              laststart = b;
              do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (notwordchar); } while (0);
              break;
            case '<':
       if (syntax & (((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
  goto normal_char;
              do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (wordbeg); } while (0);
              break;
            case '>':
       if (syntax & (((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
  goto normal_char;
              do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (wordend); } while (0);
              break;
            case 'b':
       if (syntax & (((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
  goto normal_char;
              do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (wordbound); } while (0);
              break;
            case 'B':
       if (syntax & (((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
  goto normal_char;
              do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (notwordbound); } while (0);
              break;
            case '`':
       if (syntax & (((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
  goto normal_char;
              do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (begbuf); } while (0);
              break;
            case '\'':
       if (syntax & (((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
  goto normal_char;
              do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (endbuf); } while (0);
              break;
            case '1': case '2': case '3': case '4': case '5':
            case '6': case '7': case '8': case '9':
              if (syntax & ((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
                goto normal_char;
              c1 = c - '0';
              if (c1 > regnum)
                return (free (compile_stack.stack), REG_ESUBREG);
              if (group_in_compile_stack (compile_stack, (regnum_t) c1))
                goto normal_char;
              laststart = b;
              do { while ((unsigned long) (b - bufp->buffer + (2)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (duplicate); *b++ = (unsigned char) (c1); } while (0);
              break;
            case '+':
            case '?':
              if (syntax & (((unsigned long int) 1) << 1))
                goto handle_plus;
              else
                goto normal_backslash;
            default:
            normal_backslash:
              c = (translate ? (char) translate[(unsigned char) (c)] : (c));
              goto normal_char;
            }
          break;
 default:
 normal_char:
          if (!pending_exact
              || pending_exact + *pending_exact + 1 != b
       || *pending_exact == (1 << 8) - 1
              || *p == '*' || *p == '^'
       || ((syntax & (((unsigned long int) 1) << 1))
    ? *p == '\\' && (p[1] == '+' || p[1] == '?')
    : (*p == '+' || *p == '?'))
       || ((syntax & (((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
                  && ((syntax & ((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
        ? *p == '{'
                      : (p[0] == '\\' && p[1] == '{'))))
     {
              laststart = b;
       do { while ((unsigned long) (b - bufp->buffer + (2)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (exactn); *b++ = (unsigned char) (0); } while (0);
       pending_exact = b - 1;
            }
   do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (c); } while (0);
          (*pending_exact)++;
   break;
        }
    }
  if (fixup_alt_jump)
    byte_store_op1 (jump_past_alt, fixup_alt_jump, (int) ((b) - (fixup_alt_jump) - (1 + 2)));
  if (!(compile_stack.avail == 0))
    return (free (compile_stack.stack), REG_EPAREN);
  if (syntax & ((((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1))
    do { while ((unsigned long) (b - bufp->buffer + (1)) > bufp->allocated) do { unsigned char *old_buffer = bufp->buffer; if (bufp->allocated == (1L << 16)) return REG_ESIZE; bufp->allocated <<= 1; if (bufp->allocated > (1L << 16)) bufp->allocated = (1L << 16); bufp->buffer = (unsigned char *) realloc ((bufp->buffer), (bufp->allocated)); if (bufp->buffer == ((void *)0)) return REG_ESPACE; if (old_buffer != bufp->buffer) { int incr = bufp->buffer - old_buffer; (b) += incr; (begalt) += incr; if (fixup_alt_jump) (fixup_alt_jump) += incr; if (laststart) (laststart) += incr; if (pending_exact) (pending_exact) += incr; } } while (0); *b++ = (unsigned char) (succeed); } while (0);
  free (compile_stack.stack);
  bufp->used = b - bufp->buffer;
  return REG_NOERROR;
}
static void
byte_store_op1 (op, loc, arg)
    re_opcode_t op;
    unsigned char *loc;
    int arg;
{
  *loc = (unsigned char) op;
  do { (loc + 1)[0] = (arg) & 0377; (loc + 1)[1] = (arg) >> 8; } while (0);
}
static void
byte_store_op2 (op, loc, arg1, arg2)
    re_opcode_t op;
    unsigned char *loc;
    int arg1, arg2;
{
  *loc = (unsigned char) op;
  do { (loc + 1)[0] = (arg1) & 0377; (loc + 1)[1] = (arg1) >> 8; } while (0);
  do { (loc + 1 + 2)[0] = (arg2) & 0377; (loc + 1 + 2)[1] = (arg2) >> 8; } while (0);
}
static void
byte_insert_op1 (op, loc, arg, end)
    re_opcode_t op;
    unsigned char *loc;
    int arg;
    unsigned char *end;
{
  register unsigned char *pfrom = end;
  register unsigned char *pto = end + 1 + 2;
  while (pfrom != loc)
    *--pto = *--pfrom;
  byte_store_op1 (op, loc, arg);
}
static void
byte_insert_op2 (op, loc, arg1, arg2, end)
    re_opcode_t op;
    unsigned char *loc;
    int arg1, arg2;
    unsigned char *end;
{
  register unsigned char *pfrom = end;
  register unsigned char *pto = end + 1 + 2 * 2;
  while (pfrom != loc)
    *--pto = *--pfrom;
  byte_store_op2 (op, loc, arg1, arg2);
}
static boolean
byte_at_begline_loc_p (pattern, p, syntax)
    const char *pattern, *p;
    reg_syntax_t syntax;
{
  const char *prev = p - 2;
  boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
  return
       (*prev == '(' && (syntax & (((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) || prev_prev_backslash))
    || (*prev == '|' && (syntax & (((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) || prev_prev_backslash));
}
static boolean
byte_at_endline_loc_p (p, pend, syntax)
    const char *p, *pend;
    reg_syntax_t syntax;
{
  const char *next = p;
  boolean next_backslash = *next == '\\';
  const char *next_next = p + 1 < pend ? p + 1 : 0;
  return
       (syntax & (((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) ? *next == ')'
        : next_backslash && next_next && *next_next == ')')
    || (syntax & (((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) ? *next == '|'
        : next_backslash && next_next && *next_next == '|');
}
static reg_errcode_t
byte_compile_range (range_start_char, p_ptr, pend, translate, syntax, b)
     unsigned int range_start_char;
     const char **p_ptr, *pend;
     char * translate;
     reg_syntax_t syntax;
     unsigned char *b;
{
  unsigned this_char;
  const char *p = *p_ptr;
  reg_errcode_t ret;
  unsigned end_char;
  if (p == pend)
    return REG_ERANGE;
  (*p_ptr)++;
  ret = syntax & ((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) ? REG_ERANGE : REG_NOERROR;
  range_start_char = (translate ? (char) translate[(unsigned char) (range_start_char)] : (range_start_char));
  end_char = ((unsigned)(translate ? (char) translate[(unsigned char) (p[0])] : (p[0])) & ((1 << 8) - 1));
  for (this_char = range_start_char; this_char <= end_char; ++this_char)
    {
      (b[((unsigned char) ((translate ? (char) translate[(unsigned char) (this_char)] : (this_char)))) / 8] |= 1 << (((unsigned char) (translate ? (char) translate[(unsigned char) (this_char)] : (this_char))) % 8));
      ret = REG_NOERROR;
    }
  return ret;
}
static int
byte_re_compile_fastmap (bufp)
     struct re_pattern_buffer *bufp;
{
  int j, k;
  byte_fail_stack_type fail_stack;
  char *destination;
  register char *fastmap = bufp->fastmap;
  unsigned char *pattern = bufp->buffer;
  register unsigned char *pend = pattern + bufp->used;
  unsigned char *p = pattern;
  boolean path_can_be_null = 1;
  boolean succeed_n_p = 0;
  ;
  do { fail_stack.stack = (byte_fail_stack_elt_t *) alloca (5 * sizeof (byte_fail_stack_elt_t)); if (fail_stack.stack == ((void *)0)) return -2; fail_stack.size = 5; fail_stack.avail = 0; } while (0);
  (memset (fastmap, '\0', 1 << 8), (fastmap));
  bufp->fastmap_accurate = 1;
  bufp->can_be_null = 0;
  while (1)
    {
      if (p == pend || *p == (unsigned char) succeed)
 {
   if (!(fail_stack.avail == 0))
     {
       bufp->can_be_null |= path_can_be_null;
       path_can_be_null = 1;
       p = fail_stack.stack[--fail_stack.avail].pointer;
       continue;
     }
   else
     break;
 }
      ;
      switch (((re_opcode_t) *p++))
 {
 case duplicate:
   bufp->can_be_null = 1;
          goto done;
 case exactn:
          fastmap[p[1]] = 1;
   break;
        case charset:
          for (j = *p++ * 8 - 1; j >= 0; j--)
     if (p[j / 8] & (1 << (j % 8)))
              fastmap[j] = 1;
   break;
 case charset_not:
   for (j = *p * 8; j < (1 << 8); j++)
            fastmap[j] = 1;
   for (j = *p++ * 8 - 1; j >= 0; j--)
     if (!(p[j / 8] & (1 << (j % 8))))
              fastmap[j] = 1;
          break;
 case wordchar:
   for (j = 0; j < (1 << 8); j++)
     if (re_syntax_table[(unsigned char) (j)] == 1)
       fastmap[j] = 1;
   break;
 case notwordchar:
   for (j = 0; j < (1 << 8); j++)
     if (re_syntax_table[(unsigned char) (j)] != 1)
       fastmap[j] = 1;
   break;
        case anychar:
   {
     int fastmap_newline = fastmap['\n'];
     for (j = 0; j < (1 << 8); j++)
       fastmap[j] = 1;
     if (!(bufp->syntax & ((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1)))
       fastmap['\n'] = fastmap_newline;
     else if (bufp->can_be_null)
       goto done;
     break;
   }
        case no_op:
        case begline:
        case endline:
 case begbuf:
 case endbuf:
 case wordbound:
 case notwordbound:
 case wordbeg:
 case wordend:
        case push_dummy_failure:
          continue;
 case jump_n:
        case pop_failure_jump:
 case maybe_pop_jump:
 case jump:
        case jump_past_alt:
 case dummy_failure_jump:
          do { do { (j) = *(p) & 0377; (j) += ((signed char) (*((p) + 1))) << 8; } while (0); (p) += 2; } while (0);
   p += j;
   if (j > 0)
     continue;
          if ((re_opcode_t) *p != on_failure_jump
       && (re_opcode_t) *p != succeed_n)
     continue;
          p++;
          do { do { (j) = *(p) & 0377; (j) += ((signed char) (*((p) + 1))) << 8; } while (0); (p) += 2; } while (0);
          p += j;
          if (!(fail_stack.avail == 0)
       && fail_stack.stack[fail_stack.avail - 1].pointer == p)
            fail_stack.avail--;
          continue;
        case on_failure_jump:
        case on_failure_keep_string_jump:
 handle_on_failure_jump:
          do { do { (j) = *(p) & 0377; (j) += ((signed char) (*((p) + 1))) << 8; } while (0); (p) += 2; } while (0);
          if (p + j < pend)
            {
              if (!(((fail_stack.avail == fail_stack.size) && !((fail_stack).size > (unsigned) (xre_max_failures * (5 * 3 + 4)) ? 0 : ((fail_stack).stack = (byte_fail_stack_elt_t *) (destination = (char *) alloca (((fail_stack).size << 1) * sizeof (byte_fail_stack_elt_t)), memcpy (destination, (fail_stack).stack, (fail_stack).size * sizeof (byte_fail_stack_elt_t))), (fail_stack).stack == ((void *)0) ? 0 : ((fail_stack).size <<= 1, 1)))) ? 0 : ((fail_stack).stack[(fail_stack).avail++].pointer = p + j, 1)))
  {
    ;
    return -2;
  }
            }
          else
            bufp->can_be_null = 1;
          if (succeed_n_p)
            {
              do { do { (k) = *(p) & 0377; (k) += ((signed char) (*((p) + 1))) << 8; } while (0); (p) += 2; } while (0);
              succeed_n_p = 0;
     }
          continue;
 case succeed_n:
          p += 2;
          do { do { (k) = *(p) & 0377; (k) += ((signed char) (*((p) + 1))) << 8; } while (0); (p) += 2; } while (0);
          if (k == 0)
     {
              p -= 2 * 2;
         succeed_n_p = 1;
              goto handle_on_failure_jump;
            }
          continue;
 case set_number_at:
          p += 2 * 2;
          continue;
 case start_memory:
        case stop_memory:
   p += 2;
   continue;
 default:
          abort ();
        }
      path_can_be_null = 0;
      p = pend;
    }
  bufp->can_be_null |= path_can_be_null;
 done:
  ;
  return 0;
}
static int
byte_re_search_2 (bufp, string1, size1, string2, size2, startpos, range,
       regs, stop)
     struct re_pattern_buffer *bufp;
     const char *string1, *string2;
     int size1, size2;
     int startpos;
     int range;
     struct re_registers *regs;
     int stop;
{
  int val;
  register char *fastmap = bufp->fastmap;
  register char * translate = bufp->translate;
  int total_size = size1 + size2;
  int endpos = startpos + range;
  if (startpos < 0 || startpos > total_size)
    return -1;
  if (endpos < 0)
    range = 0 - startpos;
  else if (endpos > total_size)
    range = total_size - startpos;
  if (bufp->used > 0 && range > 0
      && ((re_opcode_t) bufp->buffer[0] == begbuf
   || ((re_opcode_t) bufp->buffer[0] == begline
       && !bufp->newline_anchor)))
    {
      if (startpos > 0)
 return -1;
      else
 range = 1;
    }
  if (fastmap && !bufp->fastmap_accurate)
    if (xre_compile_fastmap (bufp) == -2)
      return -2;
  for (;;)
    {
      if (fastmap && startpos < total_size && !bufp->can_be_null)
 {
   if (range > 0)
     {
       register const char *d;
       register int lim = 0;
       int irange = range;
              if (startpos < size1 && startpos + range >= size1)
                lim = range - (size1 - startpos);
       d = (startpos >= size1 ? string2 - size1 : string1) + startpos;
       if (translate)
                while (range > lim
                       && !fastmap[(unsigned char)
       translate[(unsigned char) *d++]])
                  range--;
       else
                while (range > lim && !fastmap[(unsigned char) *d++])
                  range--;
       startpos += irange - range;
     }
   else
     {
       register char c = (size1 == 0 || startpos >= size1
          ? string2[startpos - size1]
          : string1[startpos]);
       if (!fastmap[(unsigned char) (translate ? (char) translate[(unsigned char) (c)] : (c))])
  goto advance;
     }
 }
      if (range >= 0 && startpos == total_size && fastmap
          && !bufp->can_be_null)
       {
         return -1;
       }
      val = byte_re_match_2_internal (bufp, string1, size1, string2,
          size2, startpos, regs, stop);
      if (val >= 0)
 {
   return startpos;
 }
      if (val == -2)
 {
   return -2;
 }
    advance:
      if (!range)
        break;
      else if (range > 0)
        {
          range--;
          startpos++;
        }
      else
        {
          range++;
          startpos--;
        }
    }
  return -1;
}
static boolean byte_group_match_null_string_p (unsigned char **p, unsigned char *end, byte_register_info_type *reg_info)
                                           ;
static boolean byte_alt_match_null_string_p (unsigned char *p, unsigned char *end, byte_register_info_type *reg_info)
                                           ;
static boolean byte_common_op_match_null_string_p (unsigned char **p, unsigned char *end, byte_register_info_type *reg_info)
                                           ;
static int byte_bcmp_translate (const char *s1, const char *s2, int len, char *translate)
                                   ;
static int
byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos,
     regs, stop)
     struct re_pattern_buffer *bufp;
     const char *string1, *string2;
     int size1, size2;
     int pos;
     struct re_registers *regs;
     int stop;
{
  int mcnt;
  unsigned char *p1;
  const char *end1, *end2;
  const char *end_match_1, *end_match_2;
  const char *d, *dend;
  unsigned char *p = bufp->buffer;
  register unsigned char *pend = p + bufp->used;
  unsigned char *just_past_start_mem = 0;
  char * translate = bufp->translate;
  byte_fail_stack_type fail_stack;
  size_t num_regs = bufp->re_nsub + 1;
  active_reg_t lowest_active_reg = ((1 << 8) + 1);
  active_reg_t highest_active_reg = (1 << 8);
  const char **regstart, **regend;
  const char **old_regstart, **old_regend;
  byte_register_info_type *reg_info;
  unsigned best_regs_set = 0;
  const char **best_regstart, **best_regend;
  const char *match_end = ((void *)0);
  int set_regs_matched_done = 0;
  const char **reg_dummy;
  byte_register_info_type *reg_info_dummy;
  ;
  do { fail_stack.stack = (byte_fail_stack_elt_t *) alloca (5 * sizeof (byte_fail_stack_elt_t)); if (fail_stack.stack == ((void *)0)) return -2; fail_stack.size = 5; fail_stack.avail = 0; } while (0);
  if (bufp->re_nsub)
    {
      regstart = ((const char * *) alloca ((num_regs) * sizeof (const char *)));
      regend = ((const char * *) alloca ((num_regs) * sizeof (const char *)));
      old_regstart = ((const char * *) alloca ((num_regs) * sizeof (const char *)));
      old_regend = ((const char * *) alloca ((num_regs) * sizeof (const char *)));
      best_regstart = ((const char * *) alloca ((num_regs) * sizeof (const char *)));
      best_regend = ((const char * *) alloca ((num_regs) * sizeof (const char *)));
      reg_info = ((byte_register_info_type *) alloca ((num_regs) * sizeof (byte_register_info_type)));
      reg_dummy = ((const char * *) alloca ((num_regs) * sizeof (const char *)));
      reg_info_dummy = ((byte_register_info_type *) alloca ((num_regs) * sizeof (byte_register_info_type)));
      if (!(regstart && regend && old_regstart && old_regend && reg_info
            && best_regstart && best_regend && reg_dummy && reg_info_dummy))
        {
          do { ; if (regstart) ((void)0); regstart = ((void *)0); if (regend) ((void)0); regend = ((void *)0); if (old_regstart) ((void)0); old_regstart = ((void *)0); if (old_regend) ((void)0); old_regend = ((void *)0); if (best_regstart) ((void)0); best_regstart = ((void *)0); if (best_regend) ((void)0); best_regend = ((void *)0); if (reg_info) ((void)0); reg_info = ((void *)0); if (reg_dummy) ((void)0); reg_dummy = ((void *)0); if (reg_info_dummy) ((void)0); reg_info_dummy = ((void *)0); } while (0);
          return -2;
        }
    }
  else
    {
      regstart = regend = old_regstart = old_regend = best_regstart
        = best_regend = reg_dummy = ((void *)0);
      reg_info = reg_info_dummy = (byte_register_info_type *) ((void *)0);
    }
  if (pos < 0 || pos > size1 + size2)
    {
      do { ; if (regstart) ((void)0); regstart = ((void *)0); if (regend) ((void)0); regend = ((void *)0); if (old_regstart) ((void)0); old_regstart = ((void *)0); if (old_regend) ((void)0); old_regend = ((void *)0); if (best_regstart) ((void)0); best_regstart = ((void *)0); if (best_regend) ((void)0); best_regend = ((void *)0); if (reg_info) ((void)0); reg_info = ((void *)0); if (reg_dummy) ((void)0); reg_dummy = ((void *)0); if (reg_info_dummy) ((void)0); reg_info_dummy = ((void *)0); } while (0);
      return -1;
    }
  for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
    {
      regstart[mcnt] = regend[mcnt]
        = old_regstart[mcnt] = old_regend[mcnt] = (&byte_reg_unset_dummy);
      ((reg_info[mcnt]).bits.match_null_string_p) = 3;
      ((reg_info[mcnt]).bits.is_active) = 0;
      ((reg_info[mcnt]).bits.matched_something) = 0;
      ((reg_info[mcnt]).bits.ever_matched_something) = 0;
    }
  if (size2 == 0 && string1 != ((void *)0))
    {
      string2 = string1;
      size2 = size1;
      string1 = 0;
      size1 = 0;
    }
  end1 = string1 + size1;
  end2 = string2 + size2;
  if (stop <= size1)
    {
      end_match_1 = string1 + stop;
      end_match_2 = string2;
    }
  else
    {
      end_match_1 = end1;
      end_match_2 = string2 + stop - size1;
    }
  if (size1 > 0 && pos <= size1)
    {
      d = string1 + pos;
      dend = end_match_1;
    }
  else
    {
      d = string2 + pos - size1;
      dend = end_match_2;
    }
  ;
  ;
  ;
  ;
  ;
  for (;;)
    {
      ;
      if (p == pend)
 {
          ;
          if (d != end_match_2)
     {
       boolean same_str_p = ((size1 && string1 <= (match_end) && (match_end) <= string1 + size1)
        == (dend == end_match_1));
       boolean best_match_p;
       if (same_str_p)
  best_match_p = d > match_end;
       else
  best_match_p = !(dend == end_match_1);
              ;
              if (!(fail_stack.avail == 0))
                {
                  if (!best_regs_set || best_match_p)
                    {
                      best_regs_set = 1;
                      match_end = d;
                      ;
                      for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
                        {
                          best_regstart[mcnt] = regstart[mcnt];
                          best_regend[mcnt] = regend[mcnt];
                        }
                    }
                  goto fail;
                }
              else if (best_regs_set && !best_match_p)
                {
           restore_best_regs:
                  ;
                  d = match_end;
                  dend = ((d >= string1 && d <= end1)
             ? end_match_1 : end_match_2);
    for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
      {
        regstart[mcnt] = best_regstart[mcnt];
        regend[mcnt] = best_regend[mcnt];
      }
                }
            }
 succeed_label:
          ;
          if (regs && !bufp->no_sub)
     {
              if (bufp->regs_allocated == 0)
                {
                  regs->num_regs = ((30) > (num_regs + 1) ? (30) : (num_regs + 1));
                  regs->start = ((regoff_t *) malloc ((regs->num_regs) * sizeof (regoff_t)));
                  regs->end = ((regoff_t *) malloc ((regs->num_regs) * sizeof (regoff_t)));
                  if (regs->start == ((void *)0) || regs->end == ((void *)0))
      {
        do { ; if (regstart) ((void)0); regstart = ((void *)0); if (regend) ((void)0); regend = ((void *)0); if (old_regstart) ((void)0); old_regstart = ((void *)0); if (old_regend) ((void)0); old_regend = ((void *)0); if (best_regstart) ((void)0); best_regstart = ((void *)0); if (best_regend) ((void)0); best_regend = ((void *)0); if (reg_info) ((void)0); reg_info = ((void *)0); if (reg_dummy) ((void)0); reg_dummy = ((void *)0); if (reg_info_dummy) ((void)0); reg_info_dummy = ((void *)0); } while (0);
        return -2;
      }
                  bufp->regs_allocated = 1;
                }
              else if (bufp->regs_allocated == 1)
                {
                  if (regs->num_regs < num_regs + 1)
                    {
                      regs->num_regs = num_regs + 1;
                      ((regs->start) = (regoff_t *) realloc (regs->start, (regs->num_regs) * sizeof (regoff_t)));
                      ((regs->end) = (regoff_t *) realloc (regs->end, (regs->num_regs) * sizeof (regoff_t)));
                      if (regs->start == ((void *)0) || regs->end == ((void *)0))
   {
     do { ; if (regstart) ((void)0); regstart = ((void *)0); if (regend) ((void)0); regend = ((void *)0); if (old_regstart) ((void)0); old_regstart = ((void *)0); if (old_regend) ((void)0); old_regend = ((void *)0); if (best_regstart) ((void)0); best_regstart = ((void *)0); if (best_regend) ((void)0); best_regend = ((void *)0); if (reg_info) ((void)0); reg_info = ((void *)0); if (reg_dummy) ((void)0); reg_dummy = ((void *)0); if (reg_info_dummy) ((void)0); reg_info_dummy = ((void *)0); } while (0);
     return -2;
   }
                    }
                }
              else
  {
    ;
  }
              if (regs->num_regs > 0)
                {
                  regs->start[0] = pos;
                  regs->end[0] = ((dend == end_match_1)
      ? ((regoff_t) (d - string1))
             : ((regoff_t) (d - string2 + size1)));
                }
       for (mcnt = 1; (unsigned) mcnt < ((num_regs) < (regs->num_regs) ? (num_regs) : (regs->num_regs));
     mcnt++)
  {
                  if (((regstart[mcnt]) == (&byte_reg_unset_dummy)) || ((regend[mcnt]) == (&byte_reg_unset_dummy)))
                    regs->start[mcnt] = regs->end[mcnt] = -1;
                  else
                    {
        regs->start[mcnt]
   = (regoff_t) ((size1 && string1 <= (regstart[mcnt]) && (regstart[mcnt]) <= string1 + size1) ? ((regoff_t) ((regstart[mcnt]) - string1)) : ((regoff_t) ((regstart[mcnt]) - string2 + size1)));
                      regs->end[mcnt]
   = (regoff_t) ((size1 && string1 <= (regend[mcnt]) && (regend[mcnt]) <= string1 + size1) ? ((regoff_t) ((regend[mcnt]) - string1)) : ((regoff_t) ((regend[mcnt]) - string2 + size1)));
                    }
  }
              for (mcnt = num_regs; (unsigned) mcnt < regs->num_regs; mcnt++)
                regs->start[mcnt] = regs->end[mcnt] = -1;
     }
         
                                                                        ;
          ;
          mcnt = d - pos - ((dend == end_match_1)
       ? string1
       : string2 - size1);
          ;
          do { ; if (regstart) ((void)0); regstart = ((void *)0); if (regend) ((void)0); regend = ((void *)0); if (old_regstart) ((void)0); old_regstart = ((void *)0); if (old_regend) ((void)0); old_regend = ((void *)0); if (best_regstart) ((void)0); best_regstart = ((void *)0); if (best_regend) ((void)0); best_regend = ((void *)0); if (reg_info) ((void)0); reg_info = ((void *)0); if (reg_dummy) ((void)0); reg_dummy = ((void *)0); if (reg_info_dummy) ((void)0); reg_info_dummy = ((void *)0); } while (0);
          return mcnt;
        }
      switch (((re_opcode_t) *p++))
 {
        case no_op:
          ;
          break;
 case succeed:
          ;
   goto succeed_label;
 case exactn:
   mcnt = *p++;
          ;
          if (translate)
     {
       do
  {
    while (d == dend) { if (dend == end_match_2) goto fail; d = string2; dend = end_match_2; };
    if ((unsigned char) translate[(unsigned char) *d++]
        != (unsigned char) *p++)
                    goto fail;
  }
       while (--mcnt);
     }
   else
     {
       do
  {
    while (d == dend) { if (dend == end_match_2) goto fail; d = string2; dend = end_match_2; };
    if (*d++ != (char) *p++) goto fail;
  }
       while (--mcnt);
     }
   do { if (!set_regs_matched_done) { active_reg_t r; set_regs_matched_done = 1; for (r = lowest_active_reg; r <= highest_active_reg; r++) { ((reg_info[r]).bits.matched_something) = ((reg_info[r]).bits.ever_matched_something) = 1; } } } while (0);
          break;
 case anychar:
          ;
          while (d == dend) { if (dend == end_match_2) goto fail; d = string2; dend = end_match_2; };
          if ((!(bufp->syntax & ((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1)) && (translate ? (char) translate[(unsigned char) (*d)] : (*d)) == '\n')
              || (bufp->syntax & (((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) && (translate ? (char) translate[(unsigned char) (*d)] : (*d)) == '\000'))
     goto fail;
          do { if (!set_regs_matched_done) { active_reg_t r; set_regs_matched_done = 1; for (r = lowest_active_reg; r <= highest_active_reg; r++) { ((reg_info[r]).bits.matched_something) = ((reg_info[r]).bits.ever_matched_something) = 1; } } } while (0);
          ;
          d++;
   break;
 case charset:
 case charset_not:
   {
     register unsigned char c;
     boolean not = (re_opcode_t) *(p - 1) == charset_not;
            ;
     while (d == dend) { if (dend == end_match_2) goto fail; d = string2; dend = end_match_2; };
     c = (translate ? (char) translate[(unsigned char) (*d)] : (*d));
     if (c < (unsigned) (*p * 8)
  && p[1 + c / 8] & (1 << (c % 8)))
       not = !not;
     p += 1 + *p;
     if (!not) goto fail;
     do { if (!set_regs_matched_done) { active_reg_t r; set_regs_matched_done = 1; for (r = lowest_active_reg; r <= highest_active_reg; r++) { ((reg_info[r]).bits.matched_something) = ((reg_info[r]).bits.ever_matched_something) = 1; } } } while (0);
            d++;
     break;
   }
        case start_memory:
  
                                  ;
   p1 = p;
          if (((reg_info[*p]).bits.match_null_string_p) == 3)
            ((reg_info[*p]).bits.match_null_string_p)
              = byte_group_match_null_string_p (&p1, pend, reg_info);
          old_regstart[*p] = ((reg_info[*p]).bits.match_null_string_p)
                             ? ((regstart[*p]) == (&byte_reg_unset_dummy))
                             : regstart[*p];
  
                                         ;
          regstart[*p] = d;
   ;
          ((reg_info[*p]).bits.is_active) = 1;
          ((reg_info[*p]).bits.matched_something) = 0;
   set_regs_matched_done = 0;
          highest_active_reg = *p;
          if (lowest_active_reg == ((1 << 8) + 1))
            lowest_active_reg = *p;
          p += 2;
   just_past_start_mem = p;
          break;
 case stop_memory:
  
                                  ;
          old_regend[*p] = ((reg_info[*p]).bits.match_null_string_p)
                           ? ((regend[*p]) == (&byte_reg_unset_dummy)) : regend[*p];
  
                                       ;
          regend[*p] = d;
   ;
          ((reg_info[*p]).bits.is_active) = 0;
   set_regs_matched_done = 0;
          if (lowest_active_reg == highest_active_reg)
            {
              lowest_active_reg = ((1 << 8) + 1);
              highest_active_reg = (1 << 8);
            }
          else
            {
              unsigned char r = *p - 1;
              while (r > 0 && !((reg_info[r]).bits.is_active))
                r--;
       if (r == 0)
                {
                  lowest_active_reg = ((1 << 8) + 1);
                  highest_active_reg = (1 << 8);
                }
              else
                highest_active_reg = r;
            }
          if ((!((reg_info[*p]).bits.matched_something)
               || just_past_start_mem == p - 1)
       && (p + 2) < pend)
            {
              boolean is_a_jump_n = 0;
              p1 = p + 2;
              mcnt = 0;
              switch ((re_opcode_t) *p1++)
                {
                  case jump_n:
      is_a_jump_n = 1;
                  case pop_failure_jump:
    case maybe_pop_jump:
    case jump:
    case dummy_failure_jump:
                    do { do { (mcnt) = *(p1) & 0377; (mcnt) += ((signed char) (*((p1) + 1))) << 8; } while (0); (p1) += 2; } while (0);
      if (is_a_jump_n)
        p1 += 2;
                    break;
                  default:
                                     ;
                }
       p1 += mcnt;
              if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump
                  && (re_opcode_t) p1[1+2] == start_memory
    && p1[2+2] == *p)
  {
                  if (((reg_info[*p]).bits.ever_matched_something))
      {
        unsigned r;
                      ((reg_info[*p]).bits.ever_matched_something) = 0;
                      for (r = *p; r < (unsigned) *p + (unsigned) *(p + 1);
      r++)
                        {
                          regstart[r] = old_regstart[r];
                          if (old_regend[r] >= regstart[r])
                            regend[r] = old_regend[r];
                        }
                    }
    p1++;
                  do { do { (mcnt) = *(p1) & 0377; (mcnt) += ((signed char) (*((p1) + 1))) << 8; } while (0); (p1) += 2; } while (0);
                  do { char *destination; active_reg_t this_reg; ; ; ; ; ; ; ; while (((fail_stack).size - (fail_stack).avail) < (((0 ? 0 : highest_active_reg - lowest_active_reg + 1) * 3) + 4)) { if (!((fail_stack).size > (unsigned) (xre_max_failures * (5 * 3 + 4)) ? 0 : ((fail_stack).stack = (byte_fail_stack_elt_t *) (destination = (char *) alloca (((fail_stack).size << 1) * sizeof (byte_fail_stack_elt_t)), memcpy (destination, (fail_stack).stack, (fail_stack).size * sizeof (byte_fail_stack_elt_t))), (fail_stack).stack == ((void *)0) ? 0 : ((fail_stack).size <<= 1, 1)))) return -2; ; ; } ; if (1) for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; this_reg++) { ; ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (regstart[this_reg]); ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (regend[this_reg]); ; ; ; ; ; ; fail_stack.stack[fail_stack.avail++] = (reg_info[this_reg].word); } ; fail_stack.stack[fail_stack.avail++].integer = (lowest_active_reg); ; fail_stack.stack[fail_stack.avail++].integer = (highest_active_reg); ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (p1 + mcnt); ; ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (d); ; ; } while (0);
                  goto fail;
                }
            }
          p += 2;
          break;
        case duplicate:
   {
     register const char *d2, *dend2;
     int regno = *p++;
     ;
            if (((regstart[regno]) == (&byte_reg_unset_dummy)) || ((regend[regno]) == (&byte_reg_unset_dummy)))
              goto fail;
            d2 = regstart[regno];
            dend2 = (((size1 && string1 <= (regstart[regno]) && (regstart[regno]) <= string1 + size1)
        == (size1 && string1 <= (regend[regno]) && (regend[regno]) <= string1 + size1))
       ? regend[regno] : end_match_1);
     for (;;)
       {
  while (d2 == dend2)
    {
      if (dend2 == end_match_2) break;
      if (dend2 == regend[regno]) break;
                    d2 = string2;
                    dend2 = regend[regno];
    }
  if (d2 == dend2) break;
  while (d == dend) { if (dend == end_match_2) goto fail; d = string2; dend = end_match_2; };
  mcnt = dend - d;
                if (mcnt > dend2 - d2)
    mcnt = dend2 - d2;
  if (translate
                    ? byte_bcmp_translate (d, d2, mcnt, translate)
                    : memcmp (d, d2, mcnt*sizeof(unsigned char)))
    goto fail;
  d += mcnt, d2 += mcnt;
  do { if (!set_regs_matched_done) { active_reg_t r; set_regs_matched_done = 1; for (r = lowest_active_reg; r <= highest_active_reg; r++) { ((reg_info[r]).bits.matched_something) = ((reg_info[r]).bits.ever_matched_something) = 1; } } } while (0);
       }
   }
   break;
 case begline:
          ;
          if (((d) == (size1 ? string1 : string2) || !size2))
            {
              if (!bufp->not_bol) break;
            }
          else if (d[-1] == '\n' && bufp->newline_anchor)
            {
              break;
            }
          goto fail;
 case endline:
          ;
          if (((d) == end2))
            {
              if (!bufp->not_eol) break;
            }
          else if ((d == end1 ? *string2 : *d) == '\n'
                   && bufp->newline_anchor)
            {
              break;
            }
          goto fail;
        case begbuf:
          ;
          if (((d) == (size1 ? string1 : string2) || !size2))
            break;
          goto fail;
        case endbuf:
          ;
   if (((d) == end2))
     break;
          goto fail;
        case on_failure_keep_string_jump:
          ;
          do { do { (mcnt) = *(p) & 0377; (mcnt) += ((signed char) (*((p) + 1))) << 8; } while (0); (p) += 2; } while (0);
          ;
          do { char *destination; active_reg_t this_reg; ; ; ; ; ; ; ; while (((fail_stack).size - (fail_stack).avail) < (((0 ? 0 : highest_active_reg - lowest_active_reg + 1) * 3) + 4)) { if (!((fail_stack).size > (unsigned) (xre_max_failures * (5 * 3 + 4)) ? 0 : ((fail_stack).stack = (byte_fail_stack_elt_t *) (destination = (char *) alloca (((fail_stack).size << 1) * sizeof (byte_fail_stack_elt_t)), memcpy (destination, (fail_stack).stack, (fail_stack).size * sizeof (byte_fail_stack_elt_t))), (fail_stack).stack == ((void *)0) ? 0 : ((fail_stack).size <<= 1, 1)))) return -2; ; ; } ; if (1) for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; this_reg++) { ; ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (regstart[this_reg]); ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (regend[this_reg]); ; ; ; ; ; ; fail_stack.stack[fail_stack.avail++] = (reg_info[this_reg].word); } ; fail_stack.stack[fail_stack.avail++].integer = (lowest_active_reg); ; fail_stack.stack[fail_stack.avail++].integer = (highest_active_reg); ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (p + mcnt); ; ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (((void *)0)); ; ; } while (0);
          break;
 case on_failure_jump:
        on_failure:
          ;
          do { do { (mcnt) = *(p) & 0377; (mcnt) += ((signed char) (*((p) + 1))) << 8; } while (0); (p) += 2; } while (0);
          ;
          p1 = p;
          while (p1 < pend && (re_opcode_t) *p1 == no_op)
            p1++;
          if (p1 < pend && (re_opcode_t) *p1 == start_memory)
            {
              highest_active_reg = *(p1 + 1) + *(p1 + 2);
              if (lowest_active_reg == ((1 << 8) + 1))
                lowest_active_reg = *(p1 + 1);
            }
          ;
          do { char *destination; active_reg_t this_reg; ; ; ; ; ; ; ; while (((fail_stack).size - (fail_stack).avail) < (((0 ? 0 : highest_active_reg - lowest_active_reg + 1) * 3) + 4)) { if (!((fail_stack).size > (unsigned) (xre_max_failures * (5 * 3 + 4)) ? 0 : ((fail_stack).stack = (byte_fail_stack_elt_t *) (destination = (char *) alloca (((fail_stack).size << 1) * sizeof (byte_fail_stack_elt_t)), memcpy (destination, (fail_stack).stack, (fail_stack).size * sizeof (byte_fail_stack_elt_t))), (fail_stack).stack == ((void *)0) ? 0 : ((fail_stack).size <<= 1, 1)))) return -2; ; ; } ; if (1) for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; this_reg++) { ; ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (regstart[this_reg]); ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (regend[this_reg]); ; ; ; ; ; ; fail_stack.stack[fail_stack.avail++] = (reg_info[this_reg].word); } ; fail_stack.stack[fail_stack.avail++].integer = (lowest_active_reg); ; fail_stack.stack[fail_stack.avail++].integer = (highest_active_reg); ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (p + mcnt); ; ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (d); ; ; } while (0);
          break;
        case maybe_pop_jump:
          do { do { (mcnt) = *(p) & 0377; (mcnt) += ((signed char) (*((p) + 1))) << 8; } while (0); (p) += 2; } while (0);
          ;
          {
     register unsigned char *p2 = p;
     while (1)
       {
  if (p2 + 2 < pend
      && ((re_opcode_t) *p2 == stop_memory
   || (re_opcode_t) *p2 == start_memory))
    p2 += 3;
  else if (p2 + 2 + 2 * 2 < pend
    && (re_opcode_t) *p2 == dummy_failure_jump)
    p2 += 2 + 2 * 2;
  else
    break;
       }
     p1 = p + mcnt;
            if (p2 == pend)
       {
           p[-(1+2)] = (unsigned char)
    pop_failure_jump;
               
                                                                       ;
              }
            else if ((re_opcode_t) *p2 == exactn
       || (bufp->newline_anchor && (re_opcode_t) *p2 == endline))
       {
  register unsigned char c
                  = *p2 == (unsigned char) endline ? '\n' : p2[2];
                if (((re_opcode_t) p1[1+2] == exactn
      ) && p1[3+2] != c)
                  {
        p[-(1+2)] = (unsigned char)
        pop_failure_jump;
       
                                         ;
                  }
  else if ((re_opcode_t) p1[3] == charset
    || (re_opcode_t) p1[3] == charset_not)
    {
      int not = (re_opcode_t) p1[3] == charset_not;
      if (c < (unsigned) (p1[4] * 8)
   && p1[5 + c / 8] & (1 << (c % 8)))
        not = !not;
      if (!not)
                      {
            p[-3] = (unsigned char) pop_failure_jump;
                        ;
                      }
    }
       }
            else if ((re_opcode_t) *p2 == charset)
       {
                if ((re_opcode_t) p1[3] == exactn
       && ! ((int) p2[1] * 8 > (int) p1[5]
      && (p2[2 + p1[5] / 8]
          & (1 << (p1[5] % 8)))))
    {
      p[-3] = (unsigned char) pop_failure_jump;
      ;
                  }
  else if ((re_opcode_t) p1[3] == charset_not)
    {
      int idx;
      for (idx = 0; idx < (int) p2[1]; idx++)
        if (! (p2[2 + idx] == 0
        || (idx < (int) p1[4]
     && ((p2[2 + idx] & ~ p1[5 + idx]) == 0))))
   break;
      if (idx == p2[1])
                      {
            p[-3] = (unsigned char) pop_failure_jump;
                        ;
                      }
    }
  else if ((re_opcode_t) p1[3] == charset)
    {
      int idx;
      for (idx = 0;
    idx < (int) p2[1] && idx < (int) p1[4];
    idx++)
        if ((p2[2 + idx] & p1[5 + idx]) != 0)
   break;
      if (idx == p2[1] || idx == p1[4])
                      {
            p[-3] = (unsigned char) pop_failure_jump;
                        ;
                      }
    }
       }
   }
   p -= 2;
   if ((re_opcode_t) p[-1] != pop_failure_jump)
     {
       p[-1] = (unsigned char) jump;
              ;
       goto unconditional_jump;
     }
        case pop_failure_jump:
          {
            active_reg_t dummy_low_reg, dummy_high_reg;
            unsigned char *pdummy = ((void *)0);
            const char *sdummy = ((void *)0);
            ;
            { active_reg_t this_reg; const unsigned char *string_temp; ; ; ; ; ; ; ; string_temp = fail_stack.stack[--fail_stack.avail].pointer; if (string_temp != ((void *)0)) sdummy = (const char *) string_temp; ; ; ; pdummy = (unsigned char *) fail_stack.stack[--fail_stack.avail].pointer; ; ; dummy_high_reg = (active_reg_t) fail_stack.stack[--fail_stack.avail].integer; ; dummy_low_reg = (active_reg_t) fail_stack.stack[--fail_stack.avail].integer; ; if (1) for (this_reg = dummy_high_reg; this_reg >= dummy_low_reg; this_reg--) { ; reg_info_dummy[this_reg].word = fail_stack.stack[--fail_stack.avail]; ; reg_dummy[this_reg] = (const char *) fail_stack.stack[--fail_stack.avail].pointer; ; reg_dummy[this_reg] = (const char *) fail_stack.stack[--fail_stack.avail].pointer; ; } else { for (this_reg = highest_active_reg; this_reg > dummy_high_reg; this_reg--) { reg_info_dummy[this_reg].word.integer = 0; reg_dummy[this_reg] = 0; reg_dummy[this_reg] = 0; } highest_active_reg = dummy_high_reg; } set_regs_matched_done = 0; ; }
                                                                    ;
          }
 unconditional_jump:
   ;
        case jump:
   do { do { (mcnt) = *(p) & 0377; (mcnt) += ((signed char) (*((p) + 1))) << 8; } while (0); (p) += 2; } while (0);
          ;
   p += mcnt;
          ;
   break;
        case jump_past_alt:
          ;
          goto unconditional_jump;
        case dummy_failure_jump:
          ;
          do { char *destination; active_reg_t this_reg; ; ; ; ; ; ; ; while (((fail_stack).size - (fail_stack).avail) < (((0 ? 0 : highest_active_reg - lowest_active_reg + 1) * 3) + 4)) { if (!((fail_stack).size > (unsigned) (xre_max_failures * (5 * 3 + 4)) ? 0 : ((fail_stack).stack = (byte_fail_stack_elt_t *) (destination = (char *) alloca (((fail_stack).size << 1) * sizeof (byte_fail_stack_elt_t)), memcpy (destination, (fail_stack).stack, (fail_stack).size * sizeof (byte_fail_stack_elt_t))), (fail_stack).stack == ((void *)0) ? 0 : ((fail_stack).size <<= 1, 1)))) return -2; ; ; } ; if (1) for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; this_reg++) { ; ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (regstart[this_reg]); ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (regend[this_reg]); ; ; ; ; ; ; fail_stack.stack[fail_stack.avail++] = (reg_info[this_reg].word); } ; fail_stack.stack[fail_stack.avail++].integer = (lowest_active_reg); ; fail_stack.stack[fail_stack.avail++].integer = (highest_active_reg); ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (((void *)0)); ; ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (((void *)0)); ; ; } while (0);
          goto unconditional_jump;
        case push_dummy_failure:
          ;
          do { char *destination; active_reg_t this_reg; ; ; ; ; ; ; ; while (((fail_stack).size - (fail_stack).avail) < (((0 ? 0 : highest_active_reg - lowest_active_reg + 1) * 3) + 4)) { if (!((fail_stack).size > (unsigned) (xre_max_failures * (5 * 3 + 4)) ? 0 : ((fail_stack).stack = (byte_fail_stack_elt_t *) (destination = (char *) alloca (((fail_stack).size << 1) * sizeof (byte_fail_stack_elt_t)), memcpy (destination, (fail_stack).stack, (fail_stack).size * sizeof (byte_fail_stack_elt_t))), (fail_stack).stack == ((void *)0) ? 0 : ((fail_stack).size <<= 1, 1)))) return -2; ; ; } ; if (1) for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; this_reg++) { ; ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (regstart[this_reg]); ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (regend[this_reg]); ; ; ; ; ; ; fail_stack.stack[fail_stack.avail++] = (reg_info[this_reg].word); } ; fail_stack.stack[fail_stack.avail++].integer = (lowest_active_reg); ; fail_stack.stack[fail_stack.avail++].integer = (highest_active_reg); ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (((void *)0)); ; ; ; fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (((void *)0)); ; ; } while (0);
          break;
        case succeed_n:
          do { (mcnt) = *(p + 2) & 0377; (mcnt) += ((signed char) (*((p + 2) + 1))) << 8; } while (0);
          ;
          ;
          if (mcnt > 0)
            {
               mcnt--;
        p += 2;
               do { do { (p)[0] = (mcnt) & 0377; (p)[1] = (mcnt) >> 8; } while (0); (p) += 2; } while (0);
              
               ;
            }
   else if (mcnt == 0)
            {
             
                               ;
       p[2] = (unsigned char) no_op;
              p[3] = (unsigned char) no_op;
              goto on_failure;
            }
          break;
        case jump_n:
          do { (mcnt) = *(p + 2) & 0377; (mcnt) += ((signed char) (*((p + 2) + 1))) << 8; } while (0);
          ;
          if (mcnt)
            {
               mcnt--;
               do { (p + 2)[0] = (mcnt) & 0377; (p + 2)[1] = (mcnt) >> 8; } while (0);
              
             ;
        goto unconditional_jump;
            }
   else
     p += 2 * 2;
          break;
 case set_number_at:
   {
            ;
            do { do { (mcnt) = *(p) & 0377; (mcnt) += ((signed char) (*((p) + 1))) << 8; } while (0); (p) += 2; } while (0);
            p1 = p + mcnt;
            do { do { (mcnt) = *(p) & 0377; (mcnt) += ((signed char) (*((p) + 1))) << 8; } while (0); (p) += 2; } while (0);
            ;
     do { (p1)[0] = (mcnt) & 0377; (p1)[1] = (mcnt) >> 8; } while (0);
            break;
          }
 case wordbound:
 {
   boolean prevchar, thischar;
   ;
   if (((d) == (size1 ? string1 : string2) || !size2) || ((d) == end2))
     break;
   prevchar = (re_syntax_table[(unsigned char) ((d - 1) == end1 ? *string2 : (d - 1) == string2 - 1 ? *(end1 - 1) : *(d - 1))] == 1);
   thischar = (re_syntax_table[(unsigned char) ((d) == end1 ? *string2 : (d) == string2 - 1 ? *(end1 - 1) : *(d))] == 1);
   if (prevchar != thischar)
     break;
   goto fail;
 }
      case notwordbound:
 {
   boolean prevchar, thischar;
   ;
   if (((d) == (size1 ? string1 : string2) || !size2) || ((d) == end2))
     goto fail;
   prevchar = (re_syntax_table[(unsigned char) ((d - 1) == end1 ? *string2 : (d - 1) == string2 - 1 ? *(end1 - 1) : *(d - 1))] == 1);
   thischar = (re_syntax_table[(unsigned char) ((d) == end1 ? *string2 : (d) == string2 - 1 ? *(end1 - 1) : *(d))] == 1);
   if (prevchar != thischar)
     goto fail;
   break;
 }
 case wordbeg:
          ;
   if (!((d) == end2) && (re_syntax_table[(unsigned char) ((d) == end1 ? *string2 : (d) == string2 - 1 ? *(end1 - 1) : *(d))] == 1)
       && (((d) == (size1 ? string1 : string2) || !size2) || !(re_syntax_table[(unsigned char) ((d - 1) == end1 ? *string2 : (d - 1) == string2 - 1 ? *(end1 - 1) : *(d - 1))] == 1)))
     break;
          goto fail;
 case wordend:
          ;
   if (!((d) == (size1 ? string1 : string2) || !size2) && (re_syntax_table[(unsigned char) ((d - 1) == end1 ? *string2 : (d - 1) == string2 - 1 ? *(end1 - 1) : *(d - 1))] == 1)
              && (((d) == end2) || !(re_syntax_table[(unsigned char) ((d) == end1 ? *string2 : (d) == string2 - 1 ? *(end1 - 1) : *(d))] == 1)))
     break;
          goto fail;
 case wordchar:
          ;
   while (d == dend) { if (dend == end_match_2) goto fail; d = string2; dend = end_match_2; };
          if (!(re_syntax_table[(unsigned char) ((d) == end1 ? *string2 : (d) == string2 - 1 ? *(end1 - 1) : *(d))] == 1))
            goto fail;
   do { if (!set_regs_matched_done) { active_reg_t r; set_regs_matched_done = 1; for (r = lowest_active_reg; r <= highest_active_reg; r++) { ((reg_info[r]).bits.matched_something) = ((reg_info[r]).bits.ever_matched_something) = 1; } } } while (0);
          d++;
   break;
 case notwordchar:
          ;
   while (d == dend) { if (dend == end_match_2) goto fail; d = string2; dend = end_match_2; };
   if ((re_syntax_table[(unsigned char) ((d) == end1 ? *string2 : (d) == string2 - 1 ? *(end1 - 1) : *(d))] == 1))
            goto fail;
          do { if (!set_regs_matched_done) { active_reg_t r; set_regs_matched_done = 1; for (r = lowest_active_reg; r <= highest_active_reg; r++) { ((reg_info[r]).bits.matched_something) = ((reg_info[r]).bits.ever_matched_something) = 1; } } } while (0);
          d++;
   break;
        default:
          abort ();
 }
      continue;
    fail:
      if (!(fail_stack.avail == 0))
 {
          ;
          { active_reg_t this_reg; const unsigned char *string_temp; ; ; ; ; ; ; ; string_temp = fail_stack.stack[--fail_stack.avail].pointer; if (string_temp != ((void *)0)) d = (const char *) string_temp; ; ; ; p = (unsigned char *) fail_stack.stack[--fail_stack.avail].pointer; ; ; highest_active_reg = (active_reg_t) fail_stack.stack[--fail_stack.avail].integer; ; lowest_active_reg = (active_reg_t) fail_stack.stack[--fail_stack.avail].integer; ; if (1) for (this_reg = highest_active_reg; this_reg >= lowest_active_reg; this_reg--) { ; reg_info[this_reg].word = fail_stack.stack[--fail_stack.avail]; ; regend[this_reg] = (const char *) fail_stack.stack[--fail_stack.avail].pointer; ; regstart[this_reg] = (const char *) fail_stack.stack[--fail_stack.avail].pointer; ; } else { for (this_reg = highest_active_reg; this_reg > highest_active_reg; this_reg--) { reg_info[this_reg].word.integer = 0; regend[this_reg] = 0; regstart[this_reg] = 0; } highest_active_reg = highest_active_reg; } set_regs_matched_done = 0; ; }
                                                        ;
          if (!p)
     goto fail;
   ;
          if (p < pend)
            {
              boolean is_a_jump_n = 0;
              switch ((re_opcode_t) *p)
                {
                case jump_n:
                  is_a_jump_n = 1;
                case maybe_pop_jump:
                case pop_failure_jump:
                case jump:
                  p1 = p + 1;
                  do { do { (mcnt) = *(p1) & 0377; (mcnt) += ((signed char) (*((p1) + 1))) << 8; } while (0); (p1) += 2; } while (0);
                  p1 += mcnt;
                  if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n)
                      || (!is_a_jump_n
                          && (re_opcode_t) *p1 == on_failure_jump))
                    goto fail;
                  break;
                default:
                                   ;
                }
            }
          if (d >= string1 && d <= end1)
     dend = end_match_1;
        }
      else
        break;
    }
  if (best_regs_set)
    goto restore_best_regs;
  do { ; if (regstart) ((void)0); regstart = ((void *)0); if (regend) ((void)0); regend = ((void *)0); if (old_regstart) ((void)0); old_regstart = ((void *)0); if (old_regend) ((void)0); old_regend = ((void *)0); if (best_regstart) ((void)0); best_regstart = ((void *)0); if (best_regend) ((void)0); best_regend = ((void *)0); if (reg_info) ((void)0); reg_info = ((void *)0); if (reg_dummy) ((void)0); reg_dummy = ((void *)0); if (reg_info_dummy) ((void)0); reg_info_dummy = ((void *)0); } while (0);
  return -1;
}
static boolean
byte_group_match_null_string_p (p, end, reg_info)
    unsigned char **p, *end;
    byte_register_info_type *reg_info;
{
  int mcnt;
  unsigned char *p1 = *p + 2;
  while (p1 < end)
    {
      switch ((re_opcode_t) *p1)
        {
        case on_failure_jump:
          p1++;
          do { do { (mcnt) = *(p1) & 0377; (mcnt) += ((signed char) (*((p1) + 1))) << 8; } while (0); (p1) += 2; } while (0);
   if (mcnt >= 0)
     {
              while ((re_opcode_t) p1[mcnt-(1+2)] ==
       jump_past_alt)
                {
                  if (!byte_alt_match_null_string_p (p1, p1 + mcnt -
      (1 + 2),
      reg_info))
                    return 0;
                  p1 += mcnt;
                  if ((re_opcode_t) *p1 != on_failure_jump)
                    break;
    p1++;
                  do { do { (mcnt) = *(p1) & 0377; (mcnt) += ((signed char) (*((p1) + 1))) << 8; } while (0); (p1) += 2; } while (0);
                  if ((re_opcode_t) p1[mcnt-(1+2)] !=
        jump_past_alt)
                    {
                      p1 -= 1 + 2;
                      break;
                    }
                }
              do { (mcnt) = *(p1 - 2) & 0377; (mcnt) += ((signed char) (*((p1 - 2) + 1))) << 8; } while (0);
              if (!byte_alt_match_null_string_p (p1, p1 + mcnt, reg_info))
                return 0;
              p1 += mcnt;
            }
          break;
        case stop_memory:
   ;
          *p = p1 + 2;
          return 1;
        default:
          if (!byte_common_op_match_null_string_p (&p1, end, reg_info))
            return 0;
        }
    }
  return 0;
}
static boolean
byte_alt_match_null_string_p (p, end, reg_info)
    unsigned char *p, *end;
    byte_register_info_type *reg_info;
{
  int mcnt;
  unsigned char *p1 = p;
  while (p1 < end)
    {
      switch ((re_opcode_t) *p1)
        {
        case on_failure_jump:
          p1++;
          do { do { (mcnt) = *(p1) & 0377; (mcnt) += ((signed char) (*((p1) + 1))) << 8; } while (0); (p1) += 2; } while (0);
          p1 += mcnt;
          break;
 default:
          if (!byte_common_op_match_null_string_p (&p1, end, reg_info))
            return 0;
        }
    }
  return 1;
}
static boolean
byte_common_op_match_null_string_p (p, end, reg_info)
    unsigned char **p, *end;
    byte_register_info_type *reg_info;
{
  int mcnt;
  boolean ret;
  int reg_no;
  unsigned char *p1 = *p;
  switch ((re_opcode_t) *p1++)
    {
    case no_op:
    case begline:
    case endline:
    case begbuf:
    case endbuf:
    case wordbeg:
    case wordend:
    case wordbound:
    case notwordbound:
      break;
    case start_memory:
      reg_no = *p1;
      ;
      ret = byte_group_match_null_string_p (&p1, end, reg_info);
      if (((reg_info[reg_no]).bits.match_null_string_p) == 3)
        ((reg_info[reg_no]).bits.match_null_string_p) = ret;
      if (!ret)
        return 0;
      break;
    case jump:
      do { do { (mcnt) = *(p1) & 0377; (mcnt) += ((signed char) (*((p1) + 1))) << 8; } while (0); (p1) += 2; } while (0);
      if (mcnt >= 0)
        p1 += mcnt;
      else
        return 0;
      break;
    case succeed_n:
      p1 += 2;
      do { do { (mcnt) = *(p1) & 0377; (mcnt) += ((signed char) (*((p1) + 1))) << 8; } while (0); (p1) += 2; } while (0);
      if (mcnt == 0)
        {
          p1 -= 2 * 2;
          do { do { (mcnt) = *(p1) & 0377; (mcnt) += ((signed char) (*((p1) + 1))) << 8; } while (0); (p1) += 2; } while (0);
          p1 += mcnt;
        }
      else
        return 0;
      break;
    case duplicate:
      if (!((reg_info[*p1]).bits.match_null_string_p))
        return 0;
      break;
    case set_number_at:
      p1 += 2 * 2;
    default:
      return 0;
  }
  *p = p1;
  return 1;
}
static int
byte_bcmp_translate (s1, s2, len, translate)
     const char *s1, *s2;
     register int len;
     char * translate;
{
  register const unsigned char *p1 = (const unsigned char *) s1;
  register const unsigned char *p2 = (const unsigned char *) s2;
  while (len)
    {
      if (translate[*p1++] != translate[*p2++]) return 1;
      len--;
    }
  return 0;
}
reg_syntax_t xre_syntax_options;
reg_syntax_t
xre_set_syntax (syntax)
    reg_syntax_t syntax;
{
  reg_syntax_t ret = xre_syntax_options;
  xre_syntax_options = syntax;
  return ret;
}
static const char *re_error_msgid[] =
  {
    "Success",
    "No match",
    "Invalid regular expression",
    "Invalid collation character",
    "Invalid character class name",
    "Trailing backslash",
    "Invalid back reference",
    "Unmatched [ or [^",
    "Unmatched ( or \\(",
    "Unmatched \\{",
    "Invalid content of \\{\\}",
    "Invalid range end",
    "Memory exhausted",
    "Invalid preceding regular expression",
    "Premature end of regular expression",
    "Regular expression too big",
    "Unmatched ) or \\)"
  };
static boolean
group_in_compile_stack (compile_stack, regnum)
    compile_stack_type compile_stack;
    regnum_t regnum;
{
  int this_element;
  for (this_element = compile_stack.avail - 1;
       this_element >= 0;
       this_element--)
    if (compile_stack.stack[this_element].regnum == regnum)
      return 1;
  return 0;
}
int
xre_compile_fastmap (bufp)
     struct re_pattern_buffer *bufp;
{
    return byte_re_compile_fastmap(bufp);
}
void
xre_set_registers (bufp, regs, num_regs, starts, ends)
    struct re_pattern_buffer *bufp;
    struct re_registers *regs;
    unsigned num_regs;
    regoff_t *starts, *ends;
{
  if (num_regs)
    {
      bufp->regs_allocated = 1;
      regs->num_regs = num_regs;
      regs->start = starts;
      regs->end = ends;
    }
  else
    {
      bufp->regs_allocated = 0;
      regs->num_regs = 0;
      regs->start = regs->end = (regoff_t *) 0;
    }
}
int
xre_search (bufp, string, size, startpos, range, regs)
     struct re_pattern_buffer *bufp;
     const char *string;
     int size, startpos, range;
     struct re_registers *regs;
{
  return xre_search_2 (bufp, ((void *)0), 0, string, size, startpos, range,
        regs, size);
}
int
xre_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop)
     struct re_pattern_buffer *bufp;
     const char *string1, *string2;
     int size1, size2;
     int startpos;
     int range;
     struct re_registers *regs;
     int stop;
{
    return byte_re_search_2 (bufp, string1, size1, string2, size2, startpos,
        range, regs, stop);
}
int
xre_match (bufp, string, size, pos, regs)
     struct re_pattern_buffer *bufp;
     const char *string;
     int size, pos;
     struct re_registers *regs;
{
  int result;
    result = byte_re_match_2_internal (bufp, ((void *)0), 0, string, size,
      pos, regs, size);
  return result;
}
int
xre_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
     struct re_pattern_buffer *bufp;
     const char *string1, *string2;
     int size1, size2;
     int pos;
     struct re_registers *regs;
     int stop;
{
  int result;
    result = byte_re_match_2_internal (bufp, string1, size1, string2, size2,
      pos, regs, stop);
  return result;
}
const char *
xre_compile_pattern (pattern, length, bufp)
     const char *pattern;
     size_t length;
     struct re_pattern_buffer *bufp;
{
  reg_errcode_t ret;
  bufp->regs_allocated = 0;
  bufp->no_sub = 0;
  bufp->newline_anchor = 1;
    ret = byte_regex_compile (pattern, length, xre_syntax_options, bufp);
  if (!ret)
    return ((void *)0);
  return gettext (re_error_msgid[(int) ret]);
}
static struct re_pattern_buffer re_comp_buf;
char *
xre_comp (s)
    const char *s;
{
  reg_errcode_t ret;
  if (!s)
    {
      if (!re_comp_buf.buffer)
 return gettext ("No previous regular expression");
      return 0;
    }
  if (!re_comp_buf.buffer)
    {
      re_comp_buf.buffer = (unsigned char *) malloc (200);
      if (re_comp_buf.buffer == ((void *)0))
        return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
      re_comp_buf.allocated = 200;
      re_comp_buf.fastmap = (char *) malloc (1 << 8);
      if (re_comp_buf.fastmap == ((void *)0))
 return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
    }
  re_comp_buf.newline_anchor = 1;
    ret = byte_regex_compile (s, strlen (s), xre_syntax_options, &re_comp_buf);
  if (!ret)
    return ((void *)0);
  return (char *) gettext (re_error_msgid[(int) ret]);
}
int
xre_exec (s)
    const char *s;
{
  const int len = strlen (s);
  return
    0 <= xre_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
}
int
xregcomp (preg, pattern, cflags)
    regex_t *preg;
    const char *pattern;
    int cflags;
{
  reg_errcode_t ret;
  reg_syntax_t syntax
    = (cflags & 1) ?
      ((((((unsigned long int) 1) << 1) << 1) | ((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) | (((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) | (((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) | ((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)) | (((((unsigned long int) 1) << 1) << 1) << 1) | ((((((unsigned long int) 1) << 1) << 1) << 1) << 1) | ((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) | (((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) | (((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) | (((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) | (((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)) : ((((((unsigned long int) 1) << 1) << 1) | ((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) | (((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) | (((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) | ((((((((((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1)) | (((unsigned long int) 1) << 1));
  preg->buffer = 0;
  preg->allocated = 0;
  preg->used = 0;
  preg->fastmap = (char *) malloc (1 << 8);
  if (cflags & (1 << 1))
    {
      unsigned i;
      preg->translate
 = (char *) malloc (256
          * sizeof (*(char *)0));
      if (preg->translate == ((void *)0))
        return (int) REG_ESPACE;
      for (i = 0; i < 256; i++)
        preg->translate[i] = (1 && ((*__ctype_b_loc ())[(int) ((i))] & (unsigned short int) _ISupper)) ? ((int) (*__ctype_tolower_loc ())[(int) (i)]) : (int) i;
    }
  else
    preg->translate = ((void *)0);
  if (cflags & ((1 << 1) << 1))
    {
      syntax &= ~((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1);
      syntax |= ((((((((((unsigned long int) 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1) << 1);
      preg->newline_anchor = 1;
    }
  else
    preg->newline_anchor = 0;
  preg->no_sub = !!(cflags & (((1 << 1) << 1) << 1));
    ret = byte_regex_compile (pattern, strlen (pattern), syntax, preg);
  if (ret == REG_ERPAREN) ret = REG_EPAREN;
  if (ret == REG_NOERROR && preg->fastmap)
    {
      if (xre_compile_fastmap (preg) == -2)
 {
   free (preg->fastmap);
   preg->fastmap = ((void *)0);
 }
    }
  return (int) ret;
}
int
xregexec (preg, string, nmatch, pmatch, eflags)
    const regex_t *preg;
    const char *string;
    size_t nmatch;
    regmatch_t pmatch[];
    int eflags;
{
  int ret;
  struct re_registers regs;
  regex_t private_preg;
  int len = strlen (string);
  boolean want_reg_info = !preg->no_sub && nmatch > 0;
  private_preg = *preg;
  private_preg.not_bol = !!(eflags & 1);
  private_preg.not_eol = !!(eflags & (1 << 1));
  private_preg.regs_allocated = 2;
  if (want_reg_info)
    {
      regs.num_regs = nmatch;
      regs.start = ((regoff_t *) malloc ((nmatch * 2) * sizeof (regoff_t)));
      if (regs.start == ((void *)0))
        return (int) REG_NOMATCH;
      regs.end = regs.start + nmatch;
    }
  ret = xre_search (&private_preg, string, len,
                                0, len,
                   want_reg_info ? &regs : (struct re_registers *) 0);
  if (want_reg_info)
    {
      if (ret >= 0)
        {
          unsigned r;
          for (r = 0; r < nmatch; r++)
            {
              pmatch[r].rm_so = regs.start[r];
              pmatch[r].rm_eo = regs.end[r];
            }
        }
      free (regs.start);
    }
  return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
}
size_t
xregerror (errcode, preg, errbuf, errbuf_size)
    int errcode;
    const regex_t *preg ;
    char *errbuf;
    size_t errbuf_size;
{
  const char *msg;
  size_t msg_size;
  if (errcode < 0
      || errcode >= (int) (sizeof (re_error_msgid)
      / sizeof (re_error_msgid[0])))
    abort ();
  msg = gettext (re_error_msgid[errcode]);
  msg_size = strlen (msg) + 1;
  if (errbuf_size != 0)
    {
      if (msg_size > errbuf_size)
        {
   *((char *) mempcpy (errbuf, msg, errbuf_size - 1)) = '\0';
        }
      else
        memcpy (errbuf, msg, msg_size);
    }
  return msg_size;
}
void
xregfree (preg)
    regex_t *preg;
{
  if (preg->buffer != ((void *)0))
    free (preg->buffer);
  preg->buffer = ((void *)0);
  preg->allocated = 0;
  preg->used = 0;
  if (preg->fastmap != ((void *)0))
    free (preg->fastmap);
  preg->fastmap = ((void *)0);
  preg->fastmap_accurate = 0;
  if (preg->translate != ((void *)0))
    free (preg->translate);
  preg->translate = ((void *)0);
}
enum {
  _sch_isblank = 0x0001,
  _sch_iscntrl = 0x0002,
  _sch_isdigit = 0x0004,
  _sch_islower = 0x0008,
  _sch_isprint = 0x0010,
  _sch_ispunct = 0x0020,
  _sch_isspace = 0x0040,
  _sch_isupper = 0x0080,
  _sch_isxdigit = 0x0100,
  _sch_isidst = 0x0200,
  _sch_isvsp = 0x0400,
  _sch_isnvsp = 0x0800,
  _sch_isalpha = _sch_isupper|_sch_islower,
  _sch_isalnum = _sch_isalpha|_sch_isdigit,
  _sch_isidnum = _sch_isidst|_sch_isdigit,
  _sch_isgraph = _sch_isalnum|_sch_ispunct,
  _sch_iscppsp = _sch_isvsp|_sch_isnvsp,
  _sch_isbasic = _sch_isprint|_sch_iscppsp
};
extern const unsigned short _sch_istable[256];
extern const unsigned char _sch_toupper[256];
extern const unsigned char _sch_tolower[256];
struct _IO_FILE;
typedef struct _IO_FILE FILE;
typedef struct _IO_FILE __FILE;
typedef struct
{
  int __count;
  union
  {
    unsigned int __wch;
    char __wchb[4];
  } __value;
} __mbstate_t;
typedef struct
{
  __off_t __pos;
  __mbstate_t __state;
} _G_fpos_t;
typedef struct
{
  __off64_t __pos;
  __mbstate_t __state;
} _G_fpos64_t;
typedef __builtin_va_list __gnuc_va_list;
struct _IO_jump_t; struct _IO_FILE;
typedef void _IO_lock_t;
struct _IO_marker {
  struct _IO_marker *_next;
  struct _IO_FILE *_sbuf;
  int _pos;
};
enum __codecvt_result
{
  __codecvt_ok,
  __codecvt_partial,
  __codecvt_error,
  __codecvt_noconv
};
struct _IO_FILE {
  int _flags;
  char* _IO_read_ptr;
  char* _IO_read_end;
  char* _IO_read_base;
  char* _IO_write_base;
  char* _IO_write_ptr;
  char* _IO_write_end;
  char* _IO_buf_base;
  char* _IO_buf_end;
  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;
  struct _IO_marker *_markers;
  struct _IO_FILE *_chain;
  int _fileno;
  int _flags2;
  __off_t _old_offset;
  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];
  _IO_lock_t *_lock;
  __off64_t _offset;
  void *__pad1;
  void *__pad2;
  void *__pad3;
  void *__pad4;
  size_t __pad5;
  int _mode;
  char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
};
typedef struct _IO_FILE _IO_FILE;
struct _IO_FILE_plus;
extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf,
     size_t __n);
typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
typedef int __io_close_fn (void *__cookie);
typedef __io_read_fn cookie_read_function_t;
typedef __io_write_fn cookie_write_function_t;
typedef __io_seek_fn cookie_seek_function_t;
typedef __io_close_fn cookie_close_function_t;
typedef struct
{
  __io_read_fn *read;
  __io_write_fn *write;
  __io_seek_fn *seek;
  __io_close_fn *close;
} _IO_cookie_io_functions_t;
typedef _IO_cookie_io_functions_t cookie_io_functions_t;
struct _IO_cookie_file;
extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
        void *__cookie, _IO_cookie_io_functions_t __fns);
extern int __underflow (_IO_FILE *);
extern int __uflow (_IO_FILE *);
extern int __overflow (_IO_FILE *, int);
extern int _IO_getc (_IO_FILE *__fp);
extern int _IO_putc (int __c, _IO_FILE *__fp);
extern int _IO_feof (_IO_FILE *__fp) ;
extern int _IO_ferror (_IO_FILE *__fp) ;
extern int _IO_peekc_locked (_IO_FILE *__fp);
extern void _IO_flockfile (_IO_FILE *) ;
extern void _IO_funlockfile (_IO_FILE *) ;
extern int _IO_ftrylockfile (_IO_FILE *) ;
extern int _IO_vfscanf (_IO_FILE * , const char * ,
   __gnuc_va_list, int *);
extern int _IO_vfprintf (_IO_FILE *, const char *,
    __gnuc_va_list);
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);
extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);
extern void _IO_free_backup_area (_IO_FILE *) ;
typedef __gnuc_va_list va_list;
typedef _G_fpos_t fpos_t;
typedef _G_fpos64_t fpos64_t;
extern struct _IO_FILE *stdin;
extern struct _IO_FILE *stdout;
extern struct _IO_FILE *stderr;
extern int remove (const char *__filename) ;
extern int rename (const char *__old, const char *__new) ;
extern int renameat (int __oldfd, const char *__old, int __newfd,
       const char *__new) ;
extern FILE *tmpfile (void) ;
extern FILE *tmpfile64 (void) ;
extern char *tmpnam (char *__s) ;
extern char *tmpnam_r (char *__s) ;
extern char *tempnam (const char *__dir, const char *__pfx)
     ;
extern int fclose (FILE *__stream);
extern int fflush (FILE *__stream);
extern int fflush_unlocked (FILE *__stream);
extern int fcloseall (void);
extern FILE *fopen (const char * __filename,
      const char * __modes) ;
extern FILE *freopen (const char * __filename,
        const char * __modes,
        FILE * __stream) ;
extern FILE *fopen64 (const char * __filename,
        const char * __modes) ;
extern FILE *freopen64 (const char * __filename,
   const char * __modes,
   FILE * __stream) ;
extern FILE *fdopen (int __fd, const char *__modes) ;
extern FILE *fopencookie (void * __magic_cookie,
     const char * __modes,
     _IO_cookie_io_functions_t __io_funcs) ;
extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
  ;
extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) ;
extern void setbuf (FILE * __stream, char * __buf) ;
extern int setvbuf (FILE * __stream, char * __buf,
      int __modes, size_t __n) ;
extern void setbuffer (FILE * __stream, char * __buf,
         size_t __size) ;
extern void setlinebuf (FILE *__stream) ;
extern int fprintf (FILE * __stream,
      const char * __format, ...);
extern int printf (const char * __format, ...);
extern int sprintf (char * __s,
      const char * __format, ...) ;
extern int vfprintf (FILE * __s, const char * __format,
       __gnuc_va_list __arg);
extern int vprintf (const char * __format, __gnuc_va_list __arg);
extern int vsprintf (char * __s, const char * __format,
       __gnuc_va_list __arg) ;
extern int snprintf (char * __s, size_t __maxlen,
       const char * __format, ...)
     ;
extern int vsnprintf (char * __s, size_t __maxlen,
        const char * __format, __gnuc_va_list __arg)
     ;
extern int vasprintf (char ** __ptr, const char * __f,
        __gnuc_va_list __arg)
     ;
extern int __asprintf (char ** __ptr,
         const char * __fmt, ...)
     ;
extern int asprintf (char ** __ptr,
       const char * __fmt, ...)
     ;
extern int vdprintf (int __fd, const char * __fmt,
       __gnuc_va_list __arg)
     ;
extern int dprintf (int __fd, const char * __fmt, ...)
     ;
extern int fscanf (FILE * __stream,
     const char * __format, ...) ;
extern int scanf (const char * __format, ...) ;
extern int sscanf (const char * __s,
     const char * __format, ...) ;
extern int vfscanf (FILE * __s, const char * __format,
      __gnuc_va_list __arg)
     ;
extern int vscanf (const char * __format, __gnuc_va_list __arg)
     ;
extern int vsscanf (const char * __s,
      const char * __format, __gnuc_va_list __arg)
     ;
extern int fgetc (FILE *__stream);
extern int getc (FILE *__stream);
extern int getchar (void);
extern int getc_unlocked (FILE *__stream);
extern int getchar_unlocked (void);
extern int fgetc_unlocked (FILE *__stream);
extern int fputc (int __c, FILE *__stream);
extern int putc (int __c, FILE *__stream);
extern int putchar (int __c);
extern int fputc_unlocked (int __c, FILE *__stream);
extern int putc_unlocked (int __c, FILE *__stream);
extern int putchar_unlocked (int __c);
extern int getw (FILE *__stream);
extern int putw (int __w, FILE *__stream);
extern char *fgets (char * __s, int __n, FILE * __stream)
     ;
extern char *fgets_unlocked (char * __s, int __n,
        FILE * __stream) ;
extern __ssize_t __getdelim (char ** __lineptr,
          size_t * __n, int __delimiter,
          FILE * __stream) ;
extern __ssize_t getdelim (char ** __lineptr,
        size_t * __n, int __delimiter,
        FILE * __stream) ;
extern __ssize_t getline (char ** __lineptr,
       size_t * __n,
       FILE * __stream) ;
extern int fputs (const char * __s, FILE * __stream);
extern int puts (const char *__s);
extern int ungetc (int __c, FILE *__stream);
extern size_t fread (void * __ptr, size_t __size,
       size_t __n, FILE * __stream) ;
extern size_t fwrite (const void * __ptr, size_t __size,
        size_t __n, FILE * __s);
extern int fputs_unlocked (const char * __s,
      FILE * __stream);
extern size_t fread_unlocked (void * __ptr, size_t __size,
         size_t __n, FILE * __stream) ;
extern size_t fwrite_unlocked (const void * __ptr, size_t __size,
          size_t __n, FILE * __stream);
extern int fseek (FILE *__stream, long int __off, int __whence);
extern long int ftell (FILE *__stream) ;
extern void rewind (FILE *__stream);
extern int fseeko (FILE *__stream, __off_t __off, int __whence);
extern __off_t ftello (FILE *__stream) ;
extern int fgetpos (FILE * __stream, fpos_t * __pos);
extern int fsetpos (FILE *__stream, const fpos_t *__pos);
extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
extern __off64_t ftello64 (FILE *__stream) ;
extern int fgetpos64 (FILE * __stream, fpos64_t * __pos);
extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
extern void clearerr (FILE *__stream) ;
extern int feof (FILE *__stream) ;
extern int ferror (FILE *__stream) ;
extern void clearerr_unlocked (FILE *__stream) ;
extern int feof_unlocked (FILE *__stream) ;
extern int ferror_unlocked (FILE *__stream) ;
extern void perror (const char *__s);
extern int sys_nerr;
extern const char *const sys_errlist[];
extern int _sys_nerr;
extern const char *const _sys_errlist[];
extern int fileno (FILE *__stream) ;
extern int fileno_unlocked (FILE *__stream) ;
extern FILE *popen (const char *__command, const char *__modes) ;
extern int pclose (FILE *__stream);
extern char *ctermid (char *__s) ;
extern char *cuserid (char *__s);
struct obstack;
extern int obstack_printf (struct obstack * __obstack,
      const char * __format, ...)
     ;
extern int obstack_vprintf (struct obstack * __obstack,
       const char * __format,
       __gnuc_va_list __args)
     ;
extern void flockfile (FILE *__stream) ;
extern int ftrylockfile (FILE *__stream) ;
extern void funlockfile (FILE *__stream) ;
extern char **buildargv (const char *) ;
extern void freeargv (char **);
extern char **dupargv (char **) ;
extern const char *lbasename (const char *);
extern char *lrealpath (const char *);
extern char *concat (const char *, ...) ;
extern char *reconcat (char *, const char *, ...) ;
extern unsigned long concat_length (const char *, ...);
extern char *concat_copy (char *, const char *, ...);
extern char *concat_copy2 (const char *, ...);
extern char *libiberty_concat_ptr;
extern int fdmatch (int fd1, int fd2);
extern char * getpwd (void);
extern long get_run_time (void);
extern char *make_relative_prefix (const char *, const char *, const char *)
                      ;
extern char *choose_temp_base (void) ;
extern char *make_temp_file (const char *) ;
extern const char *spaces (int count);
extern int errno_max (void);
extern const char *strerrno (int);
extern int strtoerrno (const char *);
extern char *xstrerror (int);
extern int signo_max (void);
extern const char *strsigno (int);
extern int strtosigno (const char *);
extern int xatexit (void (*fn) (void));
extern void xexit (int status) ;
extern void xmalloc_set_program_name (const char *);
extern void xmalloc_failed (size_t) ;
extern void * xmalloc (size_t) ;
extern void * xrealloc (void *, size_t);
extern void * xcalloc (size_t, size_t) ;
extern char *xstrdup (const char *) ;
extern void * xmemdup (const void *, size_t, size_t) ;
extern double physmem_total (void);
extern double physmem_available (void);
extern const unsigned char _hex_value[256];
extern void hex_init (void);
extern int pexecute (const char *, char * const *, const char *, const char *, char **, char **, int)
                                            ;
extern int pwait (int, int *, int);
extern int asprintf (char **, const char *, ...) ;
extern void * C_alloca (size_t) ;
extern const char *libiberty_optr;
extern char *libiberty_nptr;
extern unsigned long libiberty_len;
extern enum demangling_styles
{
  no_demangling = -1,
  unknown_demangling = 0,
  auto_demangling = (1 << 8),
  gnu_demangling = (1 << 9),
  lucid_demangling = (1 << 10),
  arm_demangling = (1 << 11),
  hp_demangling = (1 << 12),
  edg_demangling = (1 << 13),
  gnu_v3_demangling = (1 << 14),
  java_demangling = (1 << 2),
  gnat_demangling = (1 << 15)
} current_demangling_style;
extern const struct demangler_engine
{
  const char *const demangling_style_name;
  const enum demangling_styles demangling_style;
  const char *const demangling_style_doc;
} libiberty_demanglers[];
extern char *
cplus_demangle (const char *mangled, int options);
extern int
cplus_demangle_opname (const char *opname, char *result, int options);
extern const char *
cplus_mangle_opname (const char *opname, int options);
extern void
set_cplus_marker_for_demangling (int ch);
extern enum demangling_styles
cplus_demangle_set_style (enum demangling_styles style);
extern enum demangling_styles
cplus_demangle_name_to_style (const char *name);
extern char*
cplus_demangle_v3 (const char* mangled, int options);
extern char*
java_demangle_v3 (const char* mangled);
enum gnu_v3_ctor_kinds {
  gnu_v3_complete_object_ctor = 1,
  gnu_v3_base_object_ctor,
  gnu_v3_complete_object_allocating_ctor
};
extern enum gnu_v3_ctor_kinds
 is_gnu_v3_mangled_ctor (const char *name);
enum gnu_v3_dtor_kinds {
  gnu_v3_deleting_dtor = 1,
  gnu_v3_complete_object_dtor,
  gnu_v3_base_object_dtor
};
extern enum gnu_v3_dtor_kinds
 is_gnu_v3_mangled_dtor (const char *name);
enum demangle_component_type
{
  DEMANGLE_COMPONENT_NAME,
  DEMANGLE_COMPONENT_QUAL_NAME,
  DEMANGLE_COMPONENT_LOCAL_NAME,
  DEMANGLE_COMPONENT_TYPED_NAME,
  DEMANGLE_COMPONENT_TEMPLATE,
  DEMANGLE_COMPONENT_TEMPLATE_PARAM,
  DEMANGLE_COMPONENT_CTOR,
  DEMANGLE_COMPONENT_DTOR,
  DEMANGLE_COMPONENT_VTABLE,
  DEMANGLE_COMPONENT_VTT,
  DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
  DEMANGLE_COMPONENT_TYPEINFO,
  DEMANGLE_COMPONENT_TYPEINFO_NAME,
  DEMANGLE_COMPONENT_TYPEINFO_FN,
  DEMANGLE_COMPONENT_THUNK,
  DEMANGLE_COMPONENT_VIRTUAL_THUNK,
  DEMANGLE_COMPONENT_COVARIANT_THUNK,
  DEMANGLE_COMPONENT_JAVA_CLASS,
  DEMANGLE_COMPONENT_GUARD,
  DEMANGLE_COMPONENT_REFTEMP,
  DEMANGLE_COMPONENT_SUB_STD,
  DEMANGLE_COMPONENT_RESTRICT,
  DEMANGLE_COMPONENT_VOLATILE,
  DEMANGLE_COMPONENT_CONST,
  DEMANGLE_COMPONENT_RESTRICT_THIS,
  DEMANGLE_COMPONENT_VOLATILE_THIS,
  DEMANGLE_COMPONENT_CONST_THIS,
  DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
  DEMANGLE_COMPONENT_POINTER,
  DEMANGLE_COMPONENT_REFERENCE,
  DEMANGLE_COMPONENT_COMPLEX,
  DEMANGLE_COMPONENT_IMAGINARY,
  DEMANGLE_COMPONENT_BUILTIN_TYPE,
  DEMANGLE_COMPONENT_VENDOR_TYPE,
  DEMANGLE_COMPONENT_FUNCTION_TYPE,
  DEMANGLE_COMPONENT_ARRAY_TYPE,
  DEMANGLE_COMPONENT_PTRMEM_TYPE,
  DEMANGLE_COMPONENT_ARGLIST,
  DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,
  DEMANGLE_COMPONENT_OPERATOR,
  DEMANGLE_COMPONENT_EXTENDED_OPERATOR,
  DEMANGLE_COMPONENT_CAST,
  DEMANGLE_COMPONENT_UNARY,
  DEMANGLE_COMPONENT_BINARY,
  DEMANGLE_COMPONENT_BINARY_ARGS,
  DEMANGLE_COMPONENT_TRINARY,
  DEMANGLE_COMPONENT_TRINARY_ARG1,
  DEMANGLE_COMPONENT_TRINARY_ARG2,
  DEMANGLE_COMPONENT_LITERAL,
  DEMANGLE_COMPONENT_LITERAL_NEG
};
struct demangle_operator_info;
struct demangle_builtin_type_info;
struct demangle_component
{
  enum demangle_component_type type;
  union
  {
    struct
    {
      const char *s;
      int len;
    } s_name;
    struct
    {
      const struct demangle_operator_info *op;
    } s_operator;
    struct
    {
      int args;
      struct demangle_component *name;
    } s_extended_operator;
    struct
    {
      enum gnu_v3_ctor_kinds kind;
      struct demangle_component *name;
    } s_ctor;
    struct
    {
      enum gnu_v3_dtor_kinds kind;
      struct demangle_component *name;
    } s_dtor;
    struct
    {
      const struct demangle_builtin_type_info *type;
    } s_builtin;
    struct
    {
      const char* string;
      int len;
    } s_string;
    struct
    {
      long number;
    } s_number;
    struct
    {
      struct demangle_component *left;
      struct demangle_component *right;
    } s_binary;
  } u;
};
extern int
cplus_demangle_fill_component (struct demangle_component *fill, enum demangle_component_type, struct demangle_component *left, struct demangle_component *right)
                                             ;
extern int
cplus_demangle_fill_name (struct demangle_component *fill, const char *, int)
                         ;
extern int
cplus_demangle_fill_builtin_type (struct demangle_component *fill, const char *type_name)
                              ;
extern int
cplus_demangle_fill_operator (struct demangle_component *fill, const char *opname, int args)
                                        ;
extern int
cplus_demangle_fill_extended_operator (struct demangle_component *fill, int numargs, struct demangle_component *nm)
                                           ;
extern int
cplus_demangle_fill_ctor (struct demangle_component *fill, enum gnu_v3_ctor_kinds kind, struct demangle_component *name)
                                       ;
extern int
cplus_demangle_fill_dtor (struct demangle_component *fill, enum gnu_v3_dtor_kinds kind, struct demangle_component *name)
                                       ;
extern struct demangle_component *
cplus_demangle_v3_components (const char *mangled, int options, void **mem)
                      ;
extern char *
cplus_demangle_print (int options, const struct demangle_component *tree, int estimated_length, size_t *p_allocated_size)
                                   ;
static char *ada_demangle (const char *, int);
enum demangling_styles current_demangling_style = auto_demangling;
static char cplus_markers[] = { '$', '.', '$', '\0' };
static char char_str[2] = { '\000', '\000' };
void
set_cplus_marker_for_demangling (ch)
     int ch;
{
  cplus_markers[0] = ch;
}
typedef struct string
{
  char *b;
  char *p;
  char *e;
} string;
struct work_stuff
{
  int options;
  char **typevec;
  char **ktypevec;
  char **btypevec;
  int numk;
  int numb;
  int ksize;
  int bsize;
  int ntypes;
  int typevec_size;
  int constructor;
  int destructor;
  int static_type;
  int temp_start;
  int type_quals;
  int dllimported;
  char **tmpl_argvec;
  int ntmpl_args;
  int forgetting_types;
  string* previous_argument;
  int nrepeats;
};
static const struct optable
{
  const char *const in;
  const char *const out;
  const int flags;
} optable[] = {
  {"nw", " new", (1 << 1)},
  {"dl", " delete", (1 << 1)},
  {"new", " new", 0},
  {"delete", " delete", 0},
  {"vn", " new []", (1 << 1)},
  {"vd", " delete []", (1 << 1)},
  {"as", "=", (1 << 1)},
  {"ne", "!=", (1 << 1)},
  {"eq", "==", (1 << 1)},
  {"ge", ">=", (1 << 1)},
  {"gt", ">", (1 << 1)},
  {"le", "<=", (1 << 1)},
  {"lt", "<", (1 << 1)},
  {"plus", "+", 0},
  {"pl", "+", (1 << 1)},
  {"apl", "+=", (1 << 1)},
  {"minus", "-", 0},
  {"mi", "-", (1 << 1)},
  {"ami", "-=", (1 << 1)},
  {"mult", "*", 0},
  {"ml", "*", (1 << 1)},
  {"amu", "*=", (1 << 1)},
  {"aml", "*=", (1 << 1)},
  {"convert", "+", 0},
  {"negate", "-", 0},
  {"trunc_mod", "%", 0},
  {"md", "%", (1 << 1)},
  {"amd", "%=", (1 << 1)},
  {"trunc_div", "/", 0},
  {"dv", "/", (1 << 1)},
  {"adv", "/=", (1 << 1)},
  {"truth_andif", "&&", 0},
  {"aa", "&&", (1 << 1)},
  {"truth_orif", "||", 0},
  {"oo", "||", (1 << 1)},
  {"truth_not", "!", 0},
  {"nt", "!", (1 << 1)},
  {"postincrement","++", 0},
  {"pp", "++", (1 << 1)},
  {"postdecrement","--", 0},
  {"mm", "--", (1 << 1)},
  {"bit_ior", "|", 0},
  {"or", "|", (1 << 1)},
  {"aor", "|=", (1 << 1)},
  {"bit_xor", "^", 0},
  {"er", "^", (1 << 1)},
  {"aer", "^=", (1 << 1)},
  {"bit_and", "&", 0},
  {"ad", "&", (1 << 1)},
  {"aad", "&=", (1 << 1)},
  {"bit_not", "~", 0},
  {"co", "~", (1 << 1)},
  {"call", "()", 0},
  {"cl", "()", (1 << 1)},
  {"alshift", "<<", 0},
  {"ls", "<<", (1 << 1)},
  {"als", "<<=", (1 << 1)},
  {"arshift", ">>", 0},
  {"rs", ">>", (1 << 1)},
  {"ars", ">>=", (1 << 1)},
  {"component", "->", 0},
  {"pt", "->", (1 << 1)},
  {"rf", "->", (1 << 1)},
  {"indirect", "*", 0},
  {"method_call", "->()", 0},
  {"addr", "&", 0},
  {"array", "[]", 0},
  {"vc", "[]", (1 << 1)},
  {"compound", ", ", 0},
  {"cm", ", ", (1 << 1)},
  {"cond", "?:", 0},
  {"cn", "?:", (1 << 1)},
  {"max", ">?", 0},
  {"mx", ">?", (1 << 1)},
  {"min", "<?", 0},
  {"mn", "<?", (1 << 1)},
  {"nop", "", 0},
  {"rm", "->*", (1 << 1)},
  {"sz", "sizeof ", (1 << 1)}
};
typedef enum type_kind_t
{
  tk_none,
  tk_pointer,
  tk_reference,
  tk_integral,
  tk_bool,
  tk_char,
  tk_real
} type_kind_t;
const struct demangler_engine libiberty_demanglers[] =
{
  {
    "none",
    no_demangling,
    "Demangling disabled"
  }
  ,
  {
    "auto",
      auto_demangling,
      "Automatic selection based on executable"
  }
  ,
  {
    "gnu",
      gnu_demangling,
      "GNU (g++) style demangling"
  }
  ,
  {
    "lucid",
      lucid_demangling,
      "Lucid (lcc) style demangling"
  }
  ,
  {
    "arm",
      arm_demangling,
      "ARM style demangling"
  }
  ,
  {
    "hp",
      hp_demangling,
      "HP (aCC) style demangling"
  }
  ,
  {
    "edg",
      edg_demangling,
      "EDG style demangling"
  }
  ,
  {
    "gnu-v3",
    gnu_v3_demangling,
    "GNU (g++) V3 ABI-style demangling"
  }
  ,
  {
    "java",
    java_demangling,
    "Java style demangling"
  }
  ,
  {
    "gnat",
    gnat_demangling,
    "GNAT style demangling"
  }
  ,
  {
    ((void *)0), unknown_demangling, ((void *)0)
  }
};
static void
delete_work_stuff (struct work_stuff *);
static void
delete_non_B_K_work_stuff (struct work_stuff *);
static char *
mop_up (struct work_stuff *, string *, int);
static void
squangle_mop_up (struct work_stuff *);
static void
work_stuff_copy_to_from (struct work_stuff *, struct work_stuff *);
static char *
internal_cplus_demangle (struct work_stuff *, const char *);
static int
demangle_template_template_parm (struct work_stuff *work, const char **, string *)
                               ;
static int
demangle_template (struct work_stuff *work, const char **, string *, string *, int, int)
                          ;
static int
arm_pt (struct work_stuff *, const char *, int, const char **, const char **)
                 ;
static int
demangle_class_name (struct work_stuff *, const char **, string *);
static int
demangle_qualified (struct work_stuff *, const char **, string *, int, int)
                 ;
static int
demangle_class (struct work_stuff *, const char **, string *);
static int
demangle_fund_type (struct work_stuff *, const char **, string *);
static int
demangle_signature (struct work_stuff *, const char **, string *);
static int
demangle_prefix (struct work_stuff *, const char **, string *);
static int
gnu_special (struct work_stuff *, const char **, string *);
static int
arm_special (const char **, string *);
static void
string_need (string *, int);
static void
string_delete (string *);
static void
string_init (string *);
static void
string_clear (string *);
static void
string_append (string *, const char *);
static void
string_appends (string *, string *);
static void
string_appendn (string *, const char *, int);
static void
string_prepend (string *, const char *);
static void
string_prependn (string *, const char *, int);
static void
string_append_template_idx (string *, int);
static int
get_count (const char **, int *);
static int
consume_count (const char **);
static int
consume_count_with_underscores (const char**);
static int
demangle_args (struct work_stuff *, const char **, string *);
static int
demangle_nested_args (struct work_stuff*, const char**, string*);
static int
do_type (struct work_stuff *, const char **, string *);
static int
do_arg (struct work_stuff *, const char **, string *);
static void
demangle_function_name (struct work_stuff *, const char **, string *, const char *)
                  ;
static int
iterate_demangle_function (struct work_stuff *, const char **, string *, const char *)
                                              ;
static void
remember_type (struct work_stuff *, const char *, int);
static void
remember_Btype (struct work_stuff *, const char *, int, int);
static int
register_Btype (struct work_stuff *);
static void
remember_Ktype (struct work_stuff *, const char *, int);
static void
forget_types (struct work_stuff *);
static void
forget_B_and_K_types (struct work_stuff *);
static void
string_prepends (string *, string *);
static int
demangle_template_value_parm (struct work_stuff*, const char**, string*, type_kind_t)
                                ;
static int
do_hpacc_template_const_value (struct work_stuff *, const char **, string *);
static int
do_hpacc_template_literal (struct work_stuff *, const char **, string *);
static int
snarf_numeric_literal (const char **, string *);
static int
code_for_qualifier (int);
static const char*
qualifier_string (int);
static const char*
demangle_qualifier (int);
static int
demangle_expression (struct work_stuff *, const char **, string *, type_kind_t)
                     ;
static int
demangle_integral_value (struct work_stuff *, const char **, string *)
               ;
static int
demangle_real_value (struct work_stuff *, const char **, string *);
static void
demangle_arm_hp_template (struct work_stuff *, const char **, int, string *)
                ;
static void
recursively_demangle (struct work_stuff *, const char **, string *, int)
              ;
static void
grow_vect (char **, size_t *, size_t, int);
static int
consume_count (type)
     const char **type;
{
  int count = 0;
  if (! (_sch_istable[((unsigned char)**type) & 0xff] & (unsigned short)(_sch_isdigit)))
    return -1;
  while ((_sch_istable[((unsigned char)**type) & 0xff] & (unsigned short)(_sch_isdigit)))
    {
      count *= 10;
      if ((count % 10) != 0)
 {
   while ((_sch_istable[((unsigned char) **type) & 0xff] & (unsigned short)(_sch_isdigit)))
     (*type)++;
   return -1;
 }
      count += **type - '0';
      (*type)++;
    }
  if (count < 0)
    count = -1;
  return (count);
}
static int
consume_count_with_underscores (mangled)
     const char **mangled;
{
  int idx;
  if (**mangled == '_')
    {
      (*mangled)++;
      if (!(_sch_istable[((unsigned char)**mangled) & 0xff] & (unsigned short)(_sch_isdigit)))
 return -1;
      idx = consume_count (mangled);
      if (**mangled != '_')
 return -1;
      (*mangled)++;
    }
  else
    {
      if (**mangled < '0' || **mangled > '9')
 return -1;
      idx = **mangled - '0';
      (*mangled)++;
    }
  return idx;
}
static int
code_for_qualifier (c)
  int c;
{
  switch (c)
    {
    case 'C':
      return 0x1;
    case 'V':
      return 0x2;
    case 'u':
      return 0x4;
    default:
      break;
    }
  abort ();
}
static const char*
qualifier_string (type_quals)
     int type_quals;
{
  switch (type_quals)
    {
    case 0x0:
      return "";
    case 0x1:
      return "const";
    case 0x2:
      return "volatile";
    case 0x4:
      return "";
    case 0x1 | 0x2:
      return "const volatile";
    case 0x1 | 0x4:
      return "const ";
    case 0x2 | 0x4:
      return "volatile ";
    case 0x1 | 0x2 | 0x4:
      return "const volatile ";
    default:
      break;
    }
  abort ();
}
static const char*
demangle_qualifier (c)
  int c;
{
  return qualifier_string (code_for_qualifier (c));
}
int
cplus_demangle_opname (opname, result, options)
     const char *opname;
     char *result;
     int options;
{
  int len, len1, ret;
  string type;
  struct work_stuff work[1];
  const char *tem;
  len = strlen(opname);
  result[0] = '\0';
  ret = 0;
  memset ((char *) work, 0, sizeof (work));
  work->options = options;
  if (opname[0] == '_' && opname[1] == '_'
      && opname[2] == 'o' && opname[3] == 'p')
    {
      tem = opname + 4;
      if (do_type (work, &tem, &type))
 {
   strcat (result, "operator ");
   strncat (result, type.b, type.p - type.b);
   string_delete (&type);
   ret = 1;
 }
    }
  else if (opname[0] == '_' && opname[1] == '_'
    && (_sch_istable[((unsigned char)opname[2]) & 0xff] & (unsigned short)(_sch_islower))
    && (_sch_istable[((unsigned char)opname[3]) & 0xff] & (unsigned short)(_sch_islower)))
    {
      if (opname[4] == '\0')
 {
   size_t i;
   for (i = 0; i < (sizeof (optable) / sizeof ((optable)[0])); i++)
     {
       if (strlen (optable[i].in) == 2
    && memcmp (optable[i].in, opname + 2, 2) == 0)
  {
    strcat (result, "operator");
    strcat (result, optable[i].out);
    ret = 1;
    break;
  }
     }
 }
      else
 {
   if (opname[2] == 'a' && opname[5] == '\0')
     {
       size_t i;
       for (i = 0; i < (sizeof (optable) / sizeof ((optable)[0])); i++)
  {
    if (strlen (optable[i].in) == 3
        && memcmp (optable[i].in, opname + 2, 3) == 0)
      {
        strcat (result, "operator");
        strcat (result, optable[i].out);
        ret = 1;
        break;
      }
  }
     }
 }
    }
  else if (len >= 3
    && opname[0] == 'o'
    && opname[1] == 'p'
    && strchr (cplus_markers, opname[2]) != ((void *)0))
    {
      if (len >= 10
   && memcmp (opname + 3, "assign_", 7) == 0)
 {
   size_t i;
   for (i = 0; i < (sizeof (optable) / sizeof ((optable)[0])); i++)
     {
       len1 = len - 10;
       if ((int) strlen (optable[i].in) == len1
    && memcmp (optable[i].in, opname + 10, len1) == 0)
  {
    strcat (result, "operator");
    strcat (result, optable[i].out);
    strcat (result, "=");
    ret = 1;
    break;
  }
     }
 }
      else
 {
   size_t i;
   for (i = 0; i < (sizeof (optable) / sizeof ((optable)[0])); i++)
     {
       len1 = len - 3;
       if ((int) strlen (optable[i].in) == len1
    && memcmp (optable[i].in, opname + 3, len1) == 0)
  {
    strcat (result, "operator");
    strcat (result, optable[i].out);
    ret = 1;
    break;
  }
     }
 }
    }
  else if (len >= 5 && memcmp (opname, "type", 4) == 0
    && strchr (cplus_markers, opname[4]) != ((void *)0))
    {
      tem = opname + 5;
      if (do_type (work, &tem, &type))
 {
   strcat (result, "operator ");
   strncat (result, type.b, type.p - type.b);
   string_delete (&type);
   ret = 1;
 }
    }
  squangle_mop_up (work);
  return ret;
}
const char *
cplus_mangle_opname (opname, options)
     const char *opname;
     int options;
{
  size_t i;
  int len;
  len = strlen (opname);
  for (i = 0; i < (sizeof (optable) / sizeof ((optable)[0])); i++)
    {
      if ((int) strlen (optable[i].out) == len
   && (options & (1 << 1)) == (optable[i].flags & (1 << 1))
   && memcmp (optable[i].out, opname, len) == 0)
 return optable[i].in;
    }
  return (0);
}
enum demangling_styles
cplus_demangle_set_style (style)
     enum demangling_styles style;
{
  const struct demangler_engine *demangler = libiberty_demanglers;
  for (; demangler->demangling_style != unknown_demangling; ++demangler)
    if (style == demangler->demangling_style)
      {
 current_demangling_style = style;
 return current_demangling_style;
      }
  return unknown_demangling;
}
enum demangling_styles
cplus_demangle_name_to_style (name)
     const char *name;
{
  const struct demangler_engine *demangler = libiberty_demanglers;
  for (; demangler->demangling_style != unknown_demangling; ++demangler)
    if (strcmp (name, demangler->demangling_style_name) == 0)
      return demangler->demangling_style;
  return unknown_demangling;
}
char *
cplus_demangle (mangled, options)
     const char *mangled;
     int options;
{
  char *ret;
  struct work_stuff work[1];
  if (current_demangling_style == no_demangling)
    return xstrdup (mangled);
  memset ((char *) work, 0, sizeof (work));
  work->options = options;
  if ((work->options & ((1 << 8)|(1 << 9)|(1 << 10)|(1 << 11)|(1 << 12)|(1 << 13)|(1 << 14)|(1 << 2)|(1 << 15))) == 0)
    work->options |= (int) current_demangling_style & ((1 << 8)|(1 << 9)|(1 << 10)|(1 << 11)|(1 << 12)|(1 << 13)|(1 << 14)|(1 << 2)|(1 << 15));
  if ((((int) work->options) & (1 << 14)) || (((int) work->options) & (1 << 8)))
    {
      ret = cplus_demangle_v3 (mangled, work->options);
      if (ret || (((int) work->options) & (1 << 14)))
 return ret;
    }
  if ((((int) work->options) & (1 << 2)))
    {
      ret = java_demangle_v3 (mangled);
      if (ret)
        return ret;
    }
  if ((((int) work->options) & (1 << 15)))
    return ada_demangle(mangled,options);
  ret = internal_cplus_demangle (work, mangled);
  squangle_mop_up (work);
  return (ret);
}
static void
grow_vect (old_vect, size, min_size, element_size)
     char **old_vect;
     size_t *size;
     size_t min_size;
     int element_size;
{
  if (*size < min_size)
    {
      *size *= 2;
      if (*size < min_size)
 *size = min_size;
      *old_vect = (void *) xrealloc (*old_vect, *size * element_size);
    }
}
static char *
ada_demangle (mangled, option)
     const char *mangled;
     int option ;
{
  int i, j;
  int len0;
  const char* p;
  char *demangled = ((void *)0);
  int at_start_name;
  int changed;
  size_t demangled_size = 0;
  changed = 0;
  if (strncmp (mangled, "_ada_", 5) == 0)
    {
      mangled += 5;
      changed = 1;
    }
  if (mangled[0] == '_' || mangled[0] == '<')
    goto Suppress;
  p = strstr (mangled, "___");
  if (p == ((void *)0))
    len0 = strlen (mangled);
  else
    {
      if (p[3] == 'X')
 {
   len0 = p - mangled;
   changed = 1;
 }
      else
 goto Suppress;
    }
  grow_vect (&demangled,
      &demangled_size, 2 * len0 + 1,
      sizeof (char));
  if ((_sch_istable[((unsigned char) mangled[len0 - 1]) & 0xff] & (unsigned short)(_sch_isdigit))) {
    for (i = len0 - 2; i >= 0 && (_sch_istable[((unsigned char) mangled[i]) & 0xff] & (unsigned short)(_sch_isdigit)); i -= 1)
      ;
    if (i > 1 && mangled[i] == '_' && mangled[i - 1] == '_')
      {
 len0 = i - 1;
 changed = 1;
      }
    else if (mangled[i] == '$')
      {
 len0 = i;
 changed = 1;
      }
  }
  for (i = 0, j = 0; i < len0 && ! (_sch_istable[((unsigned char)mangled[i]) & 0xff] & (unsigned short)(_sch_isalpha));
       i += 1, j += 1)
    demangled[j] = mangled[i];
  at_start_name = 1;
  while (i < len0)
    {
      at_start_name = 0;
      if (i < len0 - 2 && mangled[i] == '_' && mangled[i + 1] == '_')
 {
   demangled[j] = '.';
   changed = at_start_name = 1;
   i += 2; j += 1;
 }
      else
 {
   demangled[j] = mangled[i];
   i += 1; j += 1;
 }
    }
  demangled[j] = '\000';
  for (i = 0; demangled[i] != '\0'; i += 1)
    if ((_sch_istable[((unsigned char)demangled[i]) & 0xff] & (unsigned short)(_sch_isupper)) || demangled[i] == ' ')
      goto Suppress;
  if (! changed)
    return ((void *)0);
  else
    return demangled;
 Suppress:
  grow_vect (&demangled,
      &demangled_size, strlen (mangled) + 3,
      sizeof (char));
  if (mangled[0] == '<')
     strcpy (demangled, mangled);
  else
    sprintf (demangled, "<%s>", mangled);
  return demangled;
}
static char *
internal_cplus_demangle (work, mangled)
     struct work_stuff *work;
     const char *mangled;
{
  string decl;
  int success = 0;
  char *demangled = ((void *)0);
  int s1, s2, s3, s4;
  s1 = work->constructor;
  s2 = work->destructor;
  s3 = work->static_type;
  s4 = work->type_quals;
  work->constructor = work->destructor = 0;
  work->type_quals = 0x0;
  work->dllimported = 0;
  if ((mangled != ((void *)0)) && (*mangled != '\0'))
    {
      string_init (&decl);
      if (((((int) work->options) & (1 << 8)) || (((int) work->options) & (1 << 9))))
 {
   success = gnu_special (work, &mangled, &decl);
 }
      if (!success)
 {
   success = demangle_prefix (work, &mangled, &decl);
 }
      if (success && (*mangled != '\0'))
 {
   success = demangle_signature (work, &mangled, &decl);
 }
      if (work->constructor == 2)
        {
          string_prepend (&decl, "global constructors keyed to ");
          work->constructor = 0;
        }
      else if (work->destructor == 2)
        {
          string_prepend (&decl, "global destructors keyed to ");
          work->destructor = 0;
        }
      else if (work->dllimported == 1)
        {
          string_prepend (&decl, "import stub for ");
          work->dllimported = 0;
        }
      demangled = mop_up (work, &decl, success);
    }
  work->constructor = s1;
  work->destructor = s2;
  work->static_type = s3;
  work->type_quals = s4;
  return demangled;
}
static void
squangle_mop_up (work)
     struct work_stuff *work;
{
  forget_B_and_K_types (work);
  if (work -> btypevec != ((void *)0))
    {
      free ((char *) work -> btypevec);
    }
  if (work -> ktypevec != ((void *)0))
    {
      free ((char *) work -> ktypevec);
    }
}
static void
work_stuff_copy_to_from (to, from)
     struct work_stuff *to;
     struct work_stuff *from;
{
  int i;
  delete_work_stuff (to);
  memcpy (to, from, sizeof (*to));
  if (from->typevec_size)
    to->typevec
      = (char **) xmalloc (from->typevec_size * sizeof (to->typevec[0]));
  for (i = 0; i < from->ntypes; i++)
    {
      int len = strlen (from->typevec[i]) + 1;
      to->typevec[i] = xmalloc (len);
      memcpy (to->typevec[i], from->typevec[i], len);
    }
  if (from->ksize)
    to->ktypevec
      = (char **) xmalloc (from->ksize * sizeof (to->ktypevec[0]));
  for (i = 0; i < from->numk; i++)
    {
      int len = strlen (from->ktypevec[i]) + 1;
      to->ktypevec[i] = xmalloc (len);
      memcpy (to->ktypevec[i], from->ktypevec[i], len);
    }
  if (from->bsize)
    to->btypevec
      = (char **) xmalloc (from->bsize * sizeof (to->btypevec[0]));
  for (i = 0; i < from->numb; i++)
    {
      int len = strlen (from->btypevec[i]) + 1;
      to->btypevec[i] = xmalloc (len);
      memcpy (to->btypevec[i], from->btypevec[i], len);
    }
  if (from->ntmpl_args)
    to->tmpl_argvec
      = (char **) xmalloc (from->ntmpl_args * sizeof (to->tmpl_argvec[0]));
  for (i = 0; i < from->ntmpl_args; i++)
    {
      int len = strlen (from->tmpl_argvec[i]) + 1;
      to->tmpl_argvec[i] = xmalloc (len);
      memcpy (to->tmpl_argvec[i], from->tmpl_argvec[i], len);
    }
  if (from->previous_argument)
    {
      to->previous_argument = (string*) xmalloc (sizeof (string));
      string_init (to->previous_argument);
      string_appends (to->previous_argument, from->previous_argument);
    }
}
static void
delete_non_B_K_work_stuff (work)
     struct work_stuff *work;
{
  forget_types (work);
  if (work -> typevec != ((void *)0))
    {
      free ((char *) work -> typevec);
      work -> typevec = ((void *)0);
      work -> typevec_size = 0;
    }
  if (work->tmpl_argvec)
    {
      int i;
      for (i = 0; i < work->ntmpl_args; i++)
 if (work->tmpl_argvec[i])
   free ((char*) work->tmpl_argvec[i]);
      free ((char*) work->tmpl_argvec);
      work->tmpl_argvec = ((void *)0);
    }
  if (work->previous_argument)
    {
      string_delete (work->previous_argument);
      free ((char*) work->previous_argument);
      work->previous_argument = ((void *)0);
    }
}
static void
delete_work_stuff (work)
     struct work_stuff *work;
{
  delete_non_B_K_work_stuff (work);
  squangle_mop_up (work);
}
static char *
mop_up (work, declp, success)
     struct work_stuff *work;
     string *declp;
     int success;
{
  char *demangled = ((void *)0);
  delete_non_B_K_work_stuff (work);
  if (!success)
    {
      string_delete (declp);
    }
  else
    {
      string_appendn (declp, "", 1);
      demangled = declp->b;
    }
  return (demangled);
}
static int
demangle_signature (work, mangled, declp)
     struct work_stuff *work;
     const char **mangled;
     string *declp;
{
  int success = 1;
  int func_done = 0;
  int expect_func = 0;
  int expect_return_type = 0;
  const char *oldmangled = ((void *)0);
  string trawname;
  string tname;
  while (success && (**mangled != '\0'))
    {
      switch (**mangled)
 {
 case 'Q':
   oldmangled = *mangled;
   success = demangle_qualified (work, mangled, declp, 1, 0);
   if (success)
     remember_type (work, oldmangled, *mangled - oldmangled);
   if ((((int) work->options) & (1 << 8)) || (((int) work->options) & (1 << 9)))
     expect_func = 1;
   oldmangled = ((void *)0);
   break;
        case 'K':
   oldmangled = *mangled;
   success = demangle_qualified (work, mangled, declp, 1, 0);
   if ((((int) work->options) & (1 << 8)) || (((int) work->options) & (1 << 9)))
     {
       expect_func = 1;
     }
   oldmangled = ((void *)0);
   break;
 case 'S':
   if (oldmangled == ((void *)0))
     {
       oldmangled = *mangled;
     }
   (*mangled)++;
   work -> static_type = 1;
   break;
 case 'C':
 case 'V':
 case 'u':
   work->type_quals |= code_for_qualifier (**mangled);
   if (oldmangled == ((void *)0))
     oldmangled = *mangled;
   (*mangled)++;
   break;
 case 'L':
   if ((((int) work->options) & (1 << 12)))
     {
       while (**mangled && (**mangled != '_'))
  (*mangled)++;
       if (!**mangled)
  success = 0;
       else
  (*mangled)++;
     }
   else
     success = 0;
   break;
 case '0': case '1': case '2': case '3': case '4':
 case '5': case '6': case '7': case '8': case '9':
   if (oldmangled == ((void *)0))
     {
       oldmangled = *mangled;
     }
          work->temp_start = -1;
   success = demangle_class (work, mangled, declp);
   if (success)
     {
       remember_type (work, oldmangled, *mangled - oldmangled);
     }
   if ((((int) work->options) & (1 << 8)) || (((int) work->options) & (1 << 9)) || (((int) work->options) & (1 << 13)))
     {
              if (**mangled != 'F')
                 expect_func = 1;
     }
   oldmangled = ((void *)0);
   break;
 case 'B':
   {
     string s;
     success = do_type (work, mangled, &s);
     if (success)
       {
  string_append (&s, ((work->options & (1 << 2)) ? "." : "::"));
  string_prepends (declp, &s);
  string_delete (&s);
       }
     oldmangled = ((void *)0);
     expect_func = 1;
   }
   break;
 case 'F':
   oldmangled = ((void *)0);
   func_done = 1;
   (*mangled)++;
   if ((((int) work->options) & (1 << 10)) || (((int) work->options) & (1 << 11)) || (((int) work->options) & (1 << 12)) || (((int) work->options) & (1 << 13)))
     {
       forget_types (work);
     }
   success = demangle_args (work, mangled, declp);
   if (success && ((((int) work->options) & (1 << 8)) || (((int) work->options) & (1 << 13))) && **mangled == '_')
     {
       ++(*mangled);
              success = do_type (work, mangled, &tname);
              string_delete (&tname);
            }
   break;
 case 't':
   string_init(&trawname);
   string_init(&tname);
   if (oldmangled == ((void *)0))
     {
       oldmangled = *mangled;
     }
   success = demangle_template (work, mangled, &tname,
           &trawname, 1, 1);
   if (success)
     {
       remember_type (work, oldmangled, *mangled - oldmangled);
     }
   string_append (&tname, ((work->options & (1 << 2)) ? "." : "::"));
   string_prepends(declp, &tname);
   if (work -> destructor & 1)
     {
       string_prepend (&trawname, "~");
       string_appends (declp, &trawname);
       work->destructor -= 1;
     }
   if ((work->constructor & 1) || (work->destructor & 1))
     {
       string_appends (declp, &trawname);
       work->constructor -= 1;
     }
   string_delete(&trawname);
   string_delete(&tname);
   oldmangled = ((void *)0);
   expect_func = 1;
   break;
 case '_':
   if (((((int) work->options) & (1 << 8)) || (((int) work->options) & (1 << 9))) && expect_return_type)
     {
       string return_type;
       (*mangled)++;
       success = do_type (work, mangled, &return_type);
       {if (!((&return_type) -> b == (&return_type) -> p)) string_append(&return_type, " ");};
       string_prepends (declp, &return_type);
       string_delete (&return_type);
       break;
     }
   else
            if ((((int) work->options) & (1 << 12)))
              {
                (*mangled)++;
                while (**mangled && (_sch_istable[((unsigned char)**mangled) & 0xff] & (unsigned short)(_sch_isdigit)))
                  (*mangled)++;
              }
            else
       success = 0;
   break;
 case 'H':
   if ((((int) work->options) & (1 << 8)) || (((int) work->options) & (1 << 9)))
     {
       success = demangle_template (work, mangled, declp, 0, 0,
        0);
       if (!(work->constructor & 1))
  expect_return_type = 1;
       (*mangled)++;
       break;
     }
   else
     {;}
 default:
   if ((((int) work->options) & (1 << 8)) || (((int) work->options) & (1 << 9)))
     {
       func_done = 1;
       success = demangle_args (work, mangled, declp);
     }
   else
     {
       success = 0;
     }
   break;
 }
      {
 if (success && expect_func)
   {
     func_done = 1;
              if ((((int) work->options) & (1 << 10)) || (((int) work->options) & (1 << 11)) || (((int) work->options) & (1 << 13)))
                {
                  forget_types (work);
                }
     success = demangle_args (work, mangled, declp);
     expect_func = 0;
   }
      }
    }
  if (success && !func_done)
    {
      if ((((int) work->options) & (1 << 8)) || (((int) work->options) & (1 << 9)))
 {
   success = demangle_args (work, mangled, declp);
 }
    }
  if (success && (work -> options & (1 << 0)))
    {
      if (work->static_type)
 string_append (declp, " static");
      if (work->type_quals != 0x0)
 {
   {if (!((declp) -> b == (declp) -> p)) string_append(declp, " ");};
   string_append (declp, qualifier_string (work->type_quals));
 }
    }
  return (success);
}
static int
demangle_template_template_parm (work, mangled, tname)
     struct work_stuff *work;
     const char **mangled;
     string *tname;
{
  int i;
  int r;
  int need_comma = 0;
  int success = 1;
  string temp;
  string_append (tname, "template <");
  if (get_count (mangled, &r))
    {
      for (i = 0; i < r; i++)
 {
   if (need_comma)
     {
       string_append (tname, ", ");
     }
     if (**mangled == 'Z')
       {
  (*mangled)++;
  string_append (tname, "class");
       }
     else if (**mangled == 'z')
       {
  (*mangled)++;
  success =
    demangle_template_template_parm (work, mangled, tname);
  if (!success)
    {
      break;
    }
       }
     else
       {
  success = do_type (work, mangled, &temp);
  if (success)
    {
      string_appends (tname, &temp);
    }
  string_delete(&temp);
  if (!success)
    {
      break;
    }
       }
   need_comma = 1;
 }
    }
  if (tname->p[-1] == '>')
    string_append (tname, " ");
  string_append (tname, "> class");
  return (success);
}
static int
demangle_expression (work, mangled, s, tk)
     struct work_stuff *work;
     const char** mangled;
     string* s;
     type_kind_t tk;
{
  int need_operator = 0;
  int success;
  success = 1;
  string_appendn (s, "(", 1);
  (*mangled)++;
  while (success && **mangled != 'W' && **mangled != '\0')
    {
      if (need_operator)
 {
   size_t i;
   size_t len;
   success = 0;
   len = strlen (*mangled);
   for (i = 0; i < (sizeof (optable) / sizeof ((optable)[0])); ++i)
     {
       size_t l = strlen (optable[i].in);
       if (l <= len
    && memcmp (optable[i].in, *mangled, l) == 0)
  {
    string_appendn (s, " ", 1);
    string_append (s, optable[i].out);
    string_appendn (s, " ", 1);
    success = 1;
    (*mangled) += l;
    break;
  }
     }
   if (!success)
     break;
 }
      else
 need_operator = 1;
      success = demangle_template_value_parm (work, mangled, s, tk);
    }
  if (**mangled != 'W')
    success = 0;
  else
    {
      string_appendn (s, ")", 1);
      (*mangled)++;
    }
  return success;
}
static int
demangle_integral_value (work, mangled, s)
     struct work_stuff *work;
     const char** mangled;
     string* s;
{
  int success;
  if (**mangled == 'E')
    success = demangle_expression (work, mangled, s, tk_integral);
  else if (**mangled == 'Q' || **mangled == 'K')
    success = demangle_qualified (work, mangled, s, 0, 1);
  else
    {
      int value1;
      int multidigit_without_leading_underscore = 0;
      int leave_following_underscore = 0;
      success = 0;
      if (**mangled == '_')
        {
   if (mangled[0][1] == 'm')
     {
       multidigit_without_leading_underscore = 1;
       string_appendn (s, "-", 1);
       (*mangled) += 2;
     }
   else
     {
       leave_following_underscore = 1;
     }
 }
      else
 {
   if (**mangled == 'm')
   {
     string_appendn (s, "-", 1);
     (*mangled)++;
   }
   multidigit_without_leading_underscore = 1;
   leave_following_underscore = 1;
 }
      if (multidigit_without_leading_underscore)
 value = consume_count (mangled);
      else
 value = consume_count_with_underscores (mangled);
      if (value != -1)
 {
   char buf[32];
   sprintf (buf, "%d", value);
   string_append (s, buf);
   if ((value > 9 || multidigit_without_leading_underscore)
       && ! leave_following_underscore
       && **mangled == '_')
     (*mangled)++;
   success = 1;
 }
      }
  return success;
}
static int
demangle_real_value (work, mangled, s)
     struct work_stuff *work;
     const char **mangled;
     string* s;
{
  if (**mangled == 'E')
    return demangle_expression (work, mangled, s, tk_real);
  if (**mangled == 'm')
    {
      string_appendn (s, "-", 1);
      (*mangled)++;
    }
  while ((_sch_istable[((unsigned char)**mangled) & 0xff] & (unsigned short)(_sch_isdigit)))
    {
      string_appendn (s, *mangled, 1);
      (*mangled)++;
    }
  if (**mangled == '.')
    {
      string_appendn (s, ".", 1);
      (*mangled)++;
      while ((_sch_istable[((unsigned char)**mangled) & 0xff] & (unsigned short)(_sch_isdigit)))
 {
   string_appendn (s, *mangled, 1);
   (*mangled)++;
 }
    }
  if (**mangled == 'e')
    {
      string_appendn (s, "e", 1);
      (*mangled)++;
      while ((_sch_istable[((unsigned char)**mangled) & 0xff] & (unsigned short)(_sch_isdigit)))
 {
   string_appendn (s, *mangled, 1);
   (*mangled)++;
 }
    }
  return 1;
}
static int
demangle_template_value_parm (work, mangled, s, tk)
     struct work_stuff *work;
     const char **mangled;
     string* s;
     type_kind_t tk;
{
  int success = 1;
  if (**mangled == 'Y')
    {
      int idx;
      (*mangled)++;
      idx = consume_count_with_underscores (mangled);
      if (idx == -1
   || (work->tmpl_argvec && idx >= work->ntmpl_args)
   || consume_count_with_underscores (mangled) == -1)
 return -1;
      if (work->tmpl_argvec)
 string_append (s, work->tmpl_argvec[idx]);
      else
 string_append_template_idx (s, idx);
    }
  else if (tk == tk_integral)
    success = demangle_integral_value (work, mangled, s);
  else if (tk == tk_char)
    {
      char tmp[2];
      int val;
      if (**mangled == 'm')
 {
   string_appendn (s, "-", 1);
   (*mangled)++;
 }
      string_appendn (s, "'", 1);
      val = consume_count(mangled);
      if (val <= 0)
 success = 0;
      else
 {
   tmp[0] = (char)val;
   tmp[1] = '\0';
   string_appendn (s, &tmp[0], 1);
   string_appendn (s, "'", 1);
 }
    }
  else if (tk == tk_bool)
    {
      int val = consume_count (mangled);
      if (val == 0)
 string_appendn (s, "false", 5);
      else if (val == 1)
 string_appendn (s, "true", 4);
      else
 success = 0;
    }
  else if (tk == tk_real)
    success = demangle_real_value (work, mangled, s);
  else if (tk == tk_pointer || tk == tk_reference)
    {
      if (**mangled == 'Q')
 success = demangle_qualified (work, mangled, s,
                         0,
                     1);
      else
 {
   int symbol_len = consume_count (mangled);
   if (symbol_len == -1)
     return -1;
   if (symbol_len == 0)
     string_appendn (s, "0", 1);
   else
     {
       char *p = xmalloc (symbol_len + 1), *q;
       strncpy (p, *mangled, symbol_len);
       p [symbol_len] = '\0';
       q = cplus_demangle (p, work->options);
       if (tk == tk_pointer)
  string_appendn (s, "&", 1);
       if (q)
  {
    string_append (s, q);
    free (q);
  }
       else
  string_append (s, p);
       free (p);
     }
   *mangled += symbol_len;
 }
    }
  return success;
}
static int
demangle_template (work, mangled, tname, trawname, is_type, remember)
     struct work_stuff *work;
     const char **mangled;
     string *tname;
     string *trawname;
     int is_type;
     int remember;
{
  int i;
  int r;
  int need_comma = 0;
  int success = 0;
  const char *start;
  int is_java_array = 0;
  string temp;
  (*mangled)++;
  if (is_type)
    {
      start = *mangled;
      if (**mangled == 'z')
 {
   int idx;
   (*mangled)++;
   (*mangled)++;
   idx = consume_count_with_underscores (mangled);
   if (idx == -1
       || (work->tmpl_argvec && idx >= work->ntmpl_args)
       || consume_count_with_underscores (mangled) == -1)
     return (0);
   if (work->tmpl_argvec)
     {
       string_append (tname, work->tmpl_argvec[idx]);
       if (trawname)
  string_append (trawname, work->tmpl_argvec[idx]);
     }
   else
     {
       string_append_template_idx (tname, idx);
       if (trawname)
  string_append_template_idx (trawname, idx);
     }
 }
      else
 {
   if ((r = consume_count (mangled)) <= 0
       || (int) strlen (*mangled) < r)
     {
       return (0);
     }
   is_java_array = (work -> options & (1 << 2))
     && strncmp (*mangled, "JArray1Z", 8) == 0;
   if (! is_java_array)
     {
       string_appendn (tname, *mangled, r);
     }
   if (trawname)
     string_appendn (trawname, *mangled, r);
   *mangled += r;
 }
    }
  if (!is_java_array)
    string_append (tname, "<");
  if (!get_count (mangled, &r))
    {
      return (0);
    }
  if (!is_type)
    {
      work->tmpl_argvec = (char**) xmalloc (r * sizeof (char *));
      work->ntmpl_args = r;
      for (i = 0; i < r; i++)
 work->tmpl_argvec[i] = 0;
    }
  for (i = 0; i < r; i++)
    {
      if (need_comma)
 {
   string_append (tname, ", ");
 }
      if (**mangled == 'Z')
 {
   (*mangled)++;
   success = do_type (work, mangled, &temp);
   if (success)
     {
       string_appends (tname, &temp);
       if (!is_type)
  {
    int len = temp.p - temp.b;
    work->tmpl_argvec[i] = xmalloc (len + 1);
    memcpy (work->tmpl_argvec[i], temp.b, len);
    work->tmpl_argvec[i][len] = '\0';
  }
     }
   string_delete(&temp);
   if (!success)
     {
       break;
     }
 }
      else if (**mangled == 'z')
 {
   int r2;
   (*mangled)++;
   success = demangle_template_template_parm (work, mangled, tname);
   if (success
       && (r2 = consume_count (mangled)) > 0
       && (int) strlen (*mangled) >= r2)
     {
       string_append (tname, " ");
       string_appendn (tname, *mangled, r2);
       if (!is_type)
  {
    int len = r2;
    work->tmpl_argvec[i] = xmalloc (len + 1);
    memcpy (work->tmpl_argvec[i], *mangled, len);
    work->tmpl_argvec[i][len] = '\0';
  }
       *mangled += r2;
     }
   if (!success)
     {
       break;
     }
 }
      else
 {
   string param;
   string* s;
   success = do_type (work, mangled, &temp);
   string_delete(&temp);
   if (!success)
     break;
   if (!is_type)
     {
       s = &param;
       string_init (s);
     }
   else
     s = tname;
   success = demangle_template_value_parm (work, mangled, s,
        (type_kind_t) success);
   if (!success)
     {
       if (!is_type)
  string_delete (s);
       success = 0;
       break;
     }
   if (!is_type)
     {
       int len = s->p - s->b;
       work->tmpl_argvec[i] = xmalloc (len + 1);
       memcpy (work->tmpl_argvec[i], s->b, len);
       work->tmpl_argvec[i][len] = '\0';
       string_appends (tname, s);
       string_delete (s);
     }
 }
      need_comma = 1;
    }
  if (is_java_array)
    {
      string_append (tname, "[]");
    }
  else
    {
      if (tname->p[-1] == '>')
 string_append (tname, " ");
      string_append (tname, ">");
    }
  if (is_type && remember)
    {
      const int bindex = register_Btype (work);
      remember_Btype (work, tname->b, ( (((tname) -> b == (tname) -> p))?0:((tname)->p - (tname)->b)), bindex);
    }
  return (success);
}
static int
arm_pt (work, mangled, n, anchor, args)
     struct work_stuff *work;
     const char *mangled;
     int n;
     const char **anchor, **args;
{
  if (((((int) work->options) & (1 << 11)) || (((int) work->options) & (1 << 12))) && (*anchor = strstr (mangled, "__pt__")))
    {
      int len;
      *args = *anchor + 6;
      len = consume_count (args);
      if (len == -1)
 return 0;
      if (*args + len == mangled + n && **args == '_')
 {
   ++*args;
   return 1;
 }
    }
  if ((((int) work->options) & (1 << 8)) || (((int) work->options) & (1 << 13)))
    {
      if ((*anchor = strstr (mangled, "__tm__"))
          || (*anchor = strstr (mangled, "__ps__"))
          || (*anchor = strstr (mangled, "__pt__")))
        {
          int len;
          *args = *anchor + 6;
          len = consume_count (args);
   if (len == -1)
     return 0;
          if (*args + len == mangled + n && **args == '_')
            {
              ++*args;
              return 1;
            }
        }
      else if ((*anchor = strstr (mangled, "__S")))
        {
    int len;
    *args = *anchor + 3;
    len = consume_count (args);
   if (len == -1)
     return 0;
    if (*args + len == mangled + n && **args == '_')
            {
              ++*args;
        return 1;
            }
        }
    }
  return 0;
}
static void
demangle_arm_hp_template (work, mangled, n, declp)
     struct work_stuff *work;
     const char **mangled;
     int n;
     string *declp;
{
  const char *p;
  const char *args;
  const char *e = *mangled + n;
  string arg;
  if ((((int) work->options) & (1 << 12)) && ((*mangled)[n] == 'X'))
    {
      char *start_spec_args = ((void *)0);
      int hold_options;
      start_spec_args = strchr (*mangled, '<');
      if (start_spec_args && (start_spec_args - *mangled < n))
        string_appendn (declp, *mangled, start_spec_args - *mangled);
      else
        string_appendn (declp, *mangled, n);
      (*mangled) += n + 1;
      string_init (&arg);
      if (work->temp_start == -1)
        work->temp_start = declp->p - declp->b;
      hold_options = work->options;
      work->options |= (1 << 0);
      string_append (declp, "<");
      while (1)
        {
          string_delete (&arg);
          switch (**mangled)
            {
              case 'T':
                (*mangled)++;
                if (!do_type (work, mangled, &arg))
                  goto hpacc_template_args_done;
                break;
              case 'U':
              case 'S':
                if (!do_hpacc_template_const_value (work, mangled, &arg))
                  goto hpacc_template_args_done;
                break;
              case 'A':
                if (!do_hpacc_template_literal (work, mangled, &arg))
                  goto hpacc_template_args_done;
                break;
              default:
                goto hpacc_template_args_done;
            }
          string_appends (declp, &arg);
          if ((**mangled == '\000') || (**mangled == '_'))
            break;
          else
            string_append (declp, ",");
        }
    hpacc_template_args_done:
      string_append (declp, ">");
      string_delete (&arg);
      if (**mangled == '_')
        (*mangled)++;
      work->options = hold_options;
      return;
    }
  else if (arm_pt (work, *mangled, n, &p, &args))
    {
      int hold_options;
      string type_str;
      string_init (&arg);
      string_appendn (declp, *mangled, p - *mangled);
      if (work->temp_start == -1)
 work->temp_start = declp->p - declp->b;
      hold_options = work->options;
      work->options |= (1 << 0);
      string_append (declp, "<");
      while (args < e) {
 string_delete (&arg);
 switch (*args)
   {
          case 'X':
            args++;
            if (!do_type (work, &args, &type_str))
       goto cfront_template_args_done;
            string_append (&arg, "(");
            string_appends (&arg, &type_str);
            string_delete (&type_str);
            string_append (&arg, ")");
            if (*args != 'L')
              goto cfront_template_args_done;
            args++;
            if (!snarf_numeric_literal (&args, &arg))
       goto cfront_template_args_done;
            break;
          case 'L':
            args++;
            if (!snarf_numeric_literal (&args, &arg))
       goto cfront_template_args_done;
            break;
          default:
            {
              const char* old_args = args;
              if (!do_type (work, &args, &arg))
                goto cfront_template_args_done;
              if (args == old_args)
  {
    work->options = hold_options;
    return;
  }
            }
   }
 string_appends (declp, &arg);
 string_append (declp, ",");
      }
    cfront_template_args_done:
      string_delete (&arg);
      if (args >= e)
 --declp->p;
      string_append (declp, ">");
      work->options = hold_options;
    }
  else if (n>10 && strncmp (*mangled, "_GLOBAL_", 8) == 0
    && (*mangled)[9] == 'N'
    && (*mangled)[8] == (*mangled)[10]
    && strchr (cplus_markers, (*mangled)[8]))
    {
      string_append (declp, "{anonymous}");
    }
  else
    {
      if (work->temp_start == -1)
 work->temp_start = 0;
      string_appendn (declp, *mangled, n);
    }
  *mangled += n;
}
static int
demangle_class_name (work, mangled, declp)
     struct work_stuff *work;
     const char **mangled;
     string *declp;
{
  int n;
  int success = 0;
  n = consume_count (mangled);
  if (n == -1)
    return 0;
  if ((int) strlen (*mangled) >= n)
    {
      demangle_arm_hp_template (work, mangled, n, declp);
      success = 1;
    }
  return (success);
}
static int
demangle_class (work, mangled, declp)
     struct work_stuff *work;
     const char **mangled;
     string *declp;
{
  int success = 0;
  int btype;
  string class_name;
  char *save_class_name_end = 0;
  string_init (&class_name);
  btype = register_Btype (work);
  if (demangle_class_name (work, mangled, &class_name))
    {
      save_class_name_end = class_name.p;
      if ((work->constructor & 1) || (work->destructor & 1))
 {
          if (work->temp_start && (work->temp_start != -1))
            {
              class_name.p = class_name.b + work->temp_start;
            }
   string_prepends (declp, &class_name);
   if (work -> destructor & 1)
     {
       string_prepend (declp, "~");
              work -> destructor -= 1;
     }
   else
     {
       work -> constructor -= 1;
     }
 }
      class_name.p = save_class_name_end;
      remember_Ktype (work, class_name.b, ( (((&class_name) -> b == (&class_name) -> p))?0:((&class_name)->p - (&class_name)->b)));
      remember_Btype (work, class_name.b, ( (((&class_name) -> b == (&class_name) -> p))?0:((&class_name)->p - (&class_name)->b)), btype);
      string_prepend (declp, ((work->options & (1 << 2)) ? "." : "::"));
      string_prepends (declp, &class_name);
      success = 1;
    }
  string_delete (&class_name);
  return (success);
}
static int
iterate_demangle_function (work, mangled, declp, scan)
     struct work_stuff *work;
     const char **mangled;
     string *declp;
     const char *scan;
{
  const char *mangle_init = *mangled;
  int success = 0;
  string decl_init;
  struct work_stuff work_init;
  if (*(scan + 2) == '\0')
    return 0;
  if ((((int) work->options) & (1 << 11)) || (((int) work->options) & (1 << 10)) || (((int) work->options) & (1 << 12)) || (((int) work->options) & (1 << 13))
      || strstr (scan + 2, "__") == ((void *)0))
    {
      demangle_function_name (work, mangled, declp, scan);
      return 1;
    }
  string_init (&decl_init);
  string_appends (&decl_init, declp);
  memset (&work_init, 0, sizeof work_init);
  work_stuff_copy_to_from (&work_init, work);
  while (scan[2])
    {
      demangle_function_name (work, mangled, declp, scan);
      success = demangle_signature (work, mangled, declp);
      if (success)
 break;
      *mangled = mangle_init;
      string_clear (declp);
      string_appends (declp, &decl_init);
      work_stuff_copy_to_from (work, &work_init);
      scan += 2;
      while (*scan && (scan[0] != '_' || scan[1] != '_'))
 scan++;
      while (*scan && *scan == '_')
 scan++;
      scan -= 2;
    }
  delete_work_stuff (&work_init);
  string_delete (&decl_init);
  return success;
}
static int
demangle_prefix (work, mangled, declp)
     struct work_stuff *work;
     const char **mangled;
     string *declp;
{
  int success = 1;
  const char *scan;
  int i;
  if (strlen(*mangled) > 6
      && (strncmp(*mangled, "_imp__", 6) == 0
          || strncmp(*mangled, "__imp_", 6) == 0))
    {
      (*mangled) += 6;
      work->dllimported = 1;
    }
  else if (strlen(*mangled) >= 11 && strncmp(*mangled, "_GLOBAL_", 8) == 0)
    {
      char *marker = strchr (cplus_markers, (*mangled)[8]);
      if (marker != ((void *)0) && *marker == (*mangled)[10])
 {
   if ((*mangled)[9] == 'D')
     {
       (*mangled) += 11;
       work->destructor = 2;
       if (gnu_special (work, mangled, declp))
  return success;
     }
   else if ((*mangled)[9] == 'I')
     {
       (*mangled) += 11;
       work->constructor = 2;
       if (gnu_special (work, mangled, declp))
  return success;
     }
 }
    }
  else if (((((int) work->options) & (1 << 11)) || (((int) work->options) & (1 << 12)) || (((int) work->options) & (1 << 13))) && strncmp(*mangled, "__std__", 7) == 0)
    {
      (*mangled) += 7;
      work->destructor = 2;
    }
  else if (((((int) work->options) & (1 << 11)) || (((int) work->options) & (1 << 12)) || (((int) work->options) & (1 << 13))) && strncmp(*mangled, "__sti__", 7) == 0)
    {
      (*mangled) += 7;
      work->constructor = 2;
    }
  {
    scan = *mangled;
    do {
      scan = strchr (scan, '_');
    } while (scan != ((void *)0) && *++scan != '_');
    if (scan != ((void *)0)) --scan;
  }
  if (scan != ((void *)0))
    {
      i = strspn (scan, "_");
      if (i > 2)
 {
   scan += (i - 2);
 }
    }
  if (scan == ((void *)0))
    {
      success = 0;
    }
  else if (work -> static_type)
    {
      if (!(_sch_istable[((unsigned char)scan[0]) & 0xff] & (unsigned short)(_sch_isdigit)) && (scan[0] != 't'))
 {
   success = 0;
 }
    }
  else if ((scan == *mangled)
    && ((_sch_istable[((unsigned char)scan[2]) & 0xff] & (unsigned short)(_sch_isdigit)) || (scan[2] == 'Q')
        || (scan[2] == 't') || (scan[2] == 'K') || (scan[2] == 'H')))
    {
      if (((((int) work->options) & (1 << 10)) || (((int) work->options) & (1 << 11)) || (((int) work->options) & (1 << 12)))
   && (_sch_istable[((unsigned char)scan[2]) & 0xff] & (unsigned short)(_sch_isdigit)))
 {
   *mangled = scan + 2;
   consume_count (mangled);
   string_append (declp, *mangled);
   *mangled += strlen (*mangled);
   success = 1;
 }
      else
 {
   if (!((((int) work->options) & (1 << 10)) || (((int) work->options) & (1 << 11)) || (((int) work->options) & (1 << 12)) || (((int) work->options) & (1 << 13))))
     work -> constructor += 1;
   *mangled = scan + 2;
 }
    }
  else if ((((int) work->options) & (1 << 11)) && scan[2] == 'p' && scan[3] == 't')
    {
      success = 1;
      demangle_arm_hp_template (work, mangled, strlen (*mangled), declp);
    }
  else if ((((int) work->options) & (1 << 13)) && ((scan[2] == 't' && scan[3] == 'm')
                              || (scan[2] == 'p' && scan[3] == 's')
                              || (scan[2] == 'p' && scan[3] == 't')))
    {
      success = 1;
      demangle_arm_hp_template (work, mangled, strlen (*mangled), declp);
    }
  else if ((scan == *mangled) && !(_sch_istable[((unsigned char)scan[2]) & 0xff] & (unsigned short)(_sch_isdigit))
    && (scan[2] != 't'))
    {
      if (!((((int) work->options) & (1 << 11)) || (((int) work->options) & (1 << 10)) || (((int) work->options) & (1 << 12)) || (((int) work->options) & (1 << 13)))
   || (arm_special (mangled, declp) == 0))
 {
   while (*scan == '_')
     {
       scan++;
     }
   if ((scan = strstr (scan, "__")) == ((void *)0) || (*(scan + 2) == '\0'))
     {
       success = 0;
     }
   else
     return iterate_demangle_function (work, mangled, declp, scan);
 }
    }
  else if (*(scan + 2) != '\0')
    {
      return iterate_demangle_function (work, mangled, declp, scan);
    }
  else
    {
      success = 0;
    }
  if (!success && (work->constructor == 2 || work->destructor == 2))
    {
      string_append (declp, *mangled);
      *mangled += strlen (*mangled);
      success = 1;
    }
  return (success);
}
static int
gnu_special (work, mangled, declp)
     struct work_stuff *work;
     const char **mangled;
     string *declp;
{
  int n;
  int success = 1;
  const char *p;
  if ((*mangled)[0] == '_'
      && strchr (cplus_markers, (*mangled)[1]) != ((void *)0)
      && (*mangled)[2] == '_')
    {
      (*mangled) += 3;
      work -> destructor += 1;
    }
  else if ((*mangled)[0] == '_'
    && (((*mangled)[1] == '_'
  && (*mangled)[2] == 'v'
  && (*mangled)[3] == 't'
  && (*mangled)[4] == '_')
        || ((*mangled)[1] == 'v'
     && (*mangled)[2] == 't'
     && strchr (cplus_markers, (*mangled)[3]) != ((void *)0))))
    {
      if ((*mangled)[2] == 'v')
 (*mangled) += 5;
      else
 (*mangled) += 4;
      while (**mangled != '\0')
 {
   switch (**mangled)
     {
     case 'Q':
     case 'K':
       success = demangle_qualified (work, mangled, declp, 0, 1);
       break;
     case 't':
       success = demangle_template (work, mangled, declp, 0, 1,
        1);
       break;
     default:
       if ((_sch_istable[((unsigned char)*mangled[0]) & 0xff] & (unsigned short)(_sch_isdigit)))
  {
    n = consume_count(mangled);
    if (n > (int) strlen (*mangled))
      {
        success = 1;
        break;
      }
  }
       else
  {
    n = strcspn (*mangled, cplus_markers);
  }
       string_appendn (declp, *mangled, n);
       (*mangled) += n;
     }
   p = strpbrk (*mangled, cplus_markers);
   if (success && ((p == ((void *)0)) || (p == *mangled)))
     {
       if (p != ((void *)0))
  {
    string_append (declp, ((work->options & (1 << 2)) ? "." : "::"));
    (*mangled)++;
  }
     }
   else
     {
       success = 0;
       break;
     }
 }
      if (success)
 string_append (declp, " virtual table");
    }
  else if ((*mangled)[0] == '_'
    && (strchr("0123456789Qt", (*mangled)[1]) != ((void *)0))
    && (p = strpbrk (*mangled, cplus_markers)) != ((void *)0))
    {
      (*mangled)++;
      switch (**mangled)
 {
 case 'Q':
 case 'K':
   success = demangle_qualified (work, mangled, declp, 0, 1);
   break;
 case 't':
   success = demangle_template (work, mangled, declp, 0, 1, 1);
   break;
 default:
   n = consume_count (mangled);
   if (n < 0 || n > (long) strlen (*mangled))
     {
       success = 0;
       break;
     }
   if (n > 10 && strncmp (*mangled, "_GLOBAL_", 8) == 0
       && (*mangled)[9] == 'N'
       && (*mangled)[8] == (*mangled)[10]
       && strchr (cplus_markers, (*mangled)[8]))
     {
       string_append (declp, "{anonymous}");
       (*mangled) += n;
       p = strpbrk (*mangled, cplus_markers);
       break;
     }
   string_appendn (declp, *mangled, n);
   (*mangled) += n;
 }
      if (success && (p == *mangled))
 {
   (*mangled)++;
   string_append (declp, ((work->options & (1 << 2)) ? "." : "::"));
   n = strlen (*mangled);
   string_appendn (declp, *mangled, n);
   (*mangled) += n;
 }
      else
 {
   success = 0;
 }
    }
  else if (strncmp (*mangled, "__thunk_", 8) == 0)
    {
      int delta;
      (*mangled) += 8;
      delta = consume_count (mangled);
      if (delta == -1)
 success = 0;
      else
 {
   char *method = internal_cplus_demangle (work, ++*mangled);
   if (method)
     {
       char buf[50];
       sprintf (buf, "virtual function thunk (delta:%d) for ", -delta);
       string_append (declp, buf);
       string_append (declp, method);
       free (method);
       n = strlen (*mangled);
       (*mangled) += n;
     }
   else
     {
       success = 0;
     }
 }
    }
  else if (strncmp (*mangled, "__t", 3) == 0
    && ((*mangled)[3] == 'i' || (*mangled)[3] == 'f'))
    {
      p = (*mangled)[3] == 'i' ? " type_info node" : " type_info function";
      (*mangled) += 4;
      switch (**mangled)
 {
 case 'Q':
 case 'K':
   success = demangle_qualified (work, mangled, declp, 0, 1);
   break;
 case 't':
   success = demangle_template (work, mangled, declp, 0, 1, 1);
   break;
 default:
   success = do_type (work, mangled, declp);
   break;
 }
      if (success && **mangled != '\0')
 success = 0;
      if (success)
 string_append (declp, p);
    }
  else
    {
      success = 0;
    }
  return (success);
}
static void
recursively_demangle(work, mangled, result, namelength)
     struct work_stuff *work;
     const char **mangled;
     string *result;
     int namelength;
{
  char * recurse = (char *)((void *)0);
  char * recurse_dem = (char *)((void *)0);
  recurse = (char *) xmalloc (namelength + 1);
  memcpy (recurse, *mangled, namelength);
  recurse[namelength] = '\000';
  recurse_dem = cplus_demangle (recurse, work->options);
  if (recurse_dem)
    {
      string_append (result, recurse_dem);
      free (recurse_dem);
    }
  else
    {
      string_appendn (result, *mangled, namelength);
    }
  free (recurse);
  *mangled += namelength;
}
static int
arm_special (mangled, declp)
     const char **mangled;
     string *declp;
{
  int n;
  int success = 1;
  const char *scan;
  if (strncmp (*mangled, "__vtbl__", 8) == 0)
    {
      scan = *mangled + 8;
      while (*scan != '\0')
        {
          n = consume_count (&scan);
          if (n == -1)
     {
       return (0);
     }
          scan += n;
          if (scan[0] == '_' && scan[1] == '_')
     {
       scan += 2;
     }
        }
      (*mangled) += 8;
      while (**mangled != '\0')
 {
   n = consume_count (mangled);
          if (n == -1
       || n > (long) strlen (*mangled))
     return 0;
   string_prependn (declp, *mangled, n);
   (*mangled) += n;
   if ((*mangled)[0] == '_' && (*mangled)[1] == '_')
     {
       string_prepend (declp, "::");
       (*mangled) += 2;
     }
 }
      string_append (declp, " virtual table");
    }
  else
    {
      success = 0;
    }
  return (success);
}
static int
demangle_qualified (work, mangled, result, isfuncname, append)
     struct work_stuff *work;
     const char **mangled;
     string *result;
     int isfuncname;
     int append;
{
  int qualifiers = 0;
  int success = 1;
  char num[2];
  string temp;
  string last_name;
  int bindex = register_Btype (work);
  isfuncname = (isfuncname
  && ((work->constructor & 1) || (work->destructor & 1)));
  string_init (&temp);
  string_init (&last_name);
  if ((*mangled)[0] == 'K')
    {
      int idx;
      (*mangled)++;
      idx = consume_count_with_underscores (mangled);
      if (idx == -1 || idx >= work -> numk)
        success = 0;
      else
        string_append (&temp, work -> ktypevec[idx]);
    }
  else
    switch ((*mangled)[1])
    {
    case '_':
      (*mangled)++;
      qualifiers = consume_count_with_underscores (mangled);
      if (qualifiers == -1)
 success = 0;
      break;
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
      num[0] = (*mangled)[1];
      num[1] = '\0';
      qualifiers = atoi (num);
      if ((*mangled)[2] == '_')
 {
   (*mangled)++;
 }
      (*mangled) += 2;
      break;
    case '0':
    default:
      success = 0;
    }
  if (!success)
    return success;
  while (qualifiers-- > 0)
    {
      int remember_K = 1;
      string_clear (&last_name);
      if (*mangled[0] == '_')
 (*mangled)++;
      if (*mangled[0] == 't')
 {
   success = demangle_template(work, mangled, &temp,
          &last_name, 1, 0);
   if (!success)
     break;
 }
      else if (*mangled[0] == 'K')
 {
          int idx;
          (*mangled)++;
          idx = consume_count_with_underscores (mangled);
          if (idx == -1 || idx >= work->numk)
            success = 0;
          else
            string_append (&temp, work->ktypevec[idx]);
          remember_K = 0;
   if (!success) break;
 }
      else
 {
   if ((((int) work->options) & (1 << 13)))
            {
       int namelength;
       namelength = consume_count (mangled);
       if (namelength == -1)
  {
    success = 0;
    break;
  }
        recursively_demangle(work, mangled, &temp, namelength);
            }
          else
            {
              string_delete (&last_name);
              success = do_type (work, mangled, &last_name);
              if (!success)
                break;
              string_appends (&temp, &last_name);
            }
 }
      if (remember_K)
 remember_Ktype (work, temp.b, ( (((&temp) -> b == (&temp) -> p))?0:((&temp)->p - (&temp)->b)));
      if (qualifiers > 0)
 string_append (&temp, ((work->options & (1 << 2)) ? "." : "::"));
    }
  remember_Btype (work, temp.b, ( (((&temp) -> b == (&temp) -> p))?0:((&temp)->p - (&temp)->b)), bindex);
  if (isfuncname)
    {
      string_append (&temp, ((work->options & (1 << 2)) ? "." : "::"));
      if (work -> destructor & 1)
 string_append (&temp, "~");
      string_appends (&temp, &last_name);
    }
  if (append)
    string_appends (result, &temp);
  else
    {
      if (!((result) -> b == (result) -> p))
 string_append (&temp, ((work->options & (1 << 2)) ? "." : "::"));
      string_prepends (result, &temp);
    }
  string_delete (&last_name);
  string_delete (&temp);
  return (success);
}
static int
get_count (type, count)
     const char **type;
     int *count;
{
  const char *p;
  int n;
  if (!(_sch_istable[((unsigned char)**type) & 0xff] & (unsigned short)(_sch_isdigit)))
    return (0);
  else
    {
      *count = **type - '0';
      (*type)++;
      if ((_sch_istable[((unsigned char)**type) & 0xff] & (unsigned short)(_sch_isdigit)))
 {
   p = *type;
   n = *count;
   do
     {
       n *= 10;
       n += *p - '0';
       p++;
     }
   while ((_sch_istable[((unsigned char)*p) & 0xff] & (unsigned short)(_sch_isdigit)));
   if (*p == '_')
     {
       *type = p + 1;
       *count = n;
     }
 }
    }
  return (1);
}
static int
do_type (work, mangled, result)
     struct work_stuff *work;
     const char **mangled;
     string *result;
{
  int n;
  int done;
  int success;
  string decl;
  const char *remembered_type;
  int type_quals;
  type_kind_t tk = tk_none;
  string_init (&decl);
  string_init (result);
  done = 0;
  success = 1;
  while (success && !done)
    {
      int member;
      switch (**mangled)
 {
 case 'P':
 case 'p':
   (*mangled)++;
   if (! (work -> options & (1 << 2)))
     string_prepend (&decl, "*");
   if (tk == tk_none)
     tk = tk_pointer;
   break;
 case 'R':
   (*mangled)++;
   string_prepend (&decl, "&");
   if (tk == tk_none)
     tk = tk_reference;
   break;
 case 'A':
   {
     ++(*mangled);
     if (!((&decl) -> b == (&decl) -> p)
  && (decl.b[0] == '*' || decl.b[0] == '&'))
       {
  string_prepend (&decl, "(");
  string_append (&decl, ")");
       }
     string_append (&decl, "[");
     if (**mangled != '_')
       success = demangle_template_value_parm (work, mangled, &decl,
            tk_integral);
     if (**mangled == '_')
       ++(*mangled);
     string_append (&decl, "]");
     break;
   }
 case 'T':
   (*mangled)++;
   if (!get_count (mangled, &n) || n >= work -> ntypes)
     {
       success = 0;
     }
   else
     {
       remembered_type = work -> typevec[n];
       mangled = &remembered_type;
     }
   break;
 case 'F':
   (*mangled)++;
     if (!((&decl) -> b == (&decl) -> p)
  && (decl.b[0] == '*' || decl.b[0] == '&'))
     {
       string_prepend (&decl, "(");
       string_append (&decl, ")");
     }
   if (!demangle_nested_args (work, mangled, &decl)
       || (**mangled != '_' && **mangled != '\0'))
     {
       success = 0;
       break;
     }
   if (success && (**mangled == '_'))
     (*mangled)++;
   break;
 case 'M':
 case 'O':
   {
     type_quals = 0x0;
     member = **mangled == 'M';
     (*mangled)++;
     string_append (&decl, ")");
     if (**mangled != 'Q')
       string_prepend (&decl, ((work->options & (1 << 2)) ? "." : "::"));
     if ((_sch_istable[((unsigned char)**mangled) & 0xff] & (unsigned short)(_sch_isdigit)))
       {
  n = consume_count (mangled);
  if (n == -1
      || (int) strlen (*mangled) < n)
    {
      success = 0;
      break;
    }
  string_prependn (&decl, *mangled, n);
  *mangled += n;
       }
     else if (**mangled == 'X' || **mangled == 'Y')
       {
  string temp;
  do_type (work, mangled, &temp);
  string_prepends (&decl, &temp);
  string_delete (&temp);
       }
     else if (**mangled == 't')
       {
  string temp;
  string_init (&temp);
  success = demangle_template (work, mangled, &temp,
          ((void *)0), 1, 1);
  if (success)
    {
      string_prependn (&decl, temp.b, temp.p - temp.b);
      string_delete (&temp);
    }
  else
    break;
       }
     else if (**mangled == 'Q')
       {
  success = demangle_qualified (work, mangled, &decl,
                         0,
                      0);
  if (!success)
    break;
       }
     else
       {
  success = 0;
  break;
       }
     string_prepend (&decl, "(");
     if (member)
       {
  switch (**mangled)
    {
    case 'C':
    case 'V':
    case 'u':
      type_quals |= code_for_qualifier (**mangled);
      (*mangled)++;
      break;
    default:
      break;
    }
  if (*(*mangled)++ != 'F')
    {
      success = 0;
      break;
    }
       }
     if ((member && !demangle_nested_args (work, mangled, &decl))
  || **mangled != '_')
       {
  success = 0;
  break;
       }
     (*mangled)++;
     if (! (work -> options & (1 << 1)))
       {
  break;
       }
     if (type_quals != 0x0)
       {
  {if (!((&decl) -> b == (&decl) -> p)) string_append(&decl, " ");};
  string_append (&decl, qualifier_string (type_quals));
       }
     break;
   }
        case 'G':
   (*mangled)++;
   break;
 case 'C':
 case 'V':
 case 'u':
   if ((work -> options & (1 << 1)))
     {
       if (!((&decl) -> b == (&decl) -> p))
  string_prepend (&decl, " ");
       string_prepend (&decl, demangle_qualifier (**mangled));
     }
   (*mangled)++;
   break;
 default:
   done = 1;
   break;
 }
    }
  if (success) switch (**mangled)
    {
    case 'Q':
    case 'K':
      {
        success = demangle_qualified (work, mangled, result, 0, 1);
        break;
      }
    case 'B':
      (*mangled)++;
      if (!get_count (mangled, &n) || n >= work -> numb)
 success = 0;
      else
 string_append (result, work->btypevec[n]);
      break;
    case 'X':
    case 'Y':
      {
 int idx;
 (*mangled)++;
 idx = consume_count_with_underscores (mangled);
 if (idx == -1
     || (work->tmpl_argvec && idx >= work->ntmpl_args)
     || consume_count_with_underscores (mangled) == -1)
   {
     success = 0;
     break;
   }
 if (work->tmpl_argvec)
   string_append (result, work->tmpl_argvec[idx]);
 else
   string_append_template_idx (result, idx);
 success = 1;
      }
    break;
    default:
      success = demangle_fund_type (work, mangled, result);
      if (tk == tk_none)
 tk = (type_kind_t) success;
      break;
    }
  if (success)
    {
      if (!((&decl) -> b == (&decl) -> p))
 {
   string_append (result, " ");
   string_appends (result, &decl);
 }
    }
  else
    string_delete (result);
  string_delete (&decl);
  if (success)
    return (int) ((tk == tk_none) ? tk_integral : tk);
  else
    return 0;
}
static int
demangle_fund_type (work, mangled, result)
     struct work_stuff *work;
     const char **mangled;
     string *result;
{
  int done = 0;
  int success = 1;
  char buf[10];
  unsigned int dec = 0;
  type_kind_t tk = tk_integral;
  while (!done)
    {
      switch (**mangled)
 {
 case 'C':
 case 'V':
 case 'u':
   if ((work -> options & (1 << 1)))
     {
              if (!((result) -> b == (result) -> p))
                string_prepend (result, " ");
       string_prepend (result, demangle_qualifier (**mangled));
     }
   (*mangled)++;
   break;
 case 'U':
   (*mangled)++;
   {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
   string_append (result, "unsigned");
   break;
 case 'S':
   (*mangled)++;
   {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
   string_append (result, "signed");
   break;
 case 'J':
   (*mangled)++;
   {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
   string_append (result, "__complex");
   break;
 default:
   done = 1;
   break;
 }
    }
  switch (**mangled)
    {
    case '\0':
    case '_':
      break;
    case 'v':
      (*mangled)++;
      {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
      string_append (result, "void");
      break;
    case 'x':
      (*mangled)++;
      {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
      string_append (result, "long long");
      break;
    case 'l':
      (*mangled)++;
      {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
      string_append (result, "long");
      break;
    case 'i':
      (*mangled)++;
      {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
      string_append (result, "int");
      break;
    case 's':
      (*mangled)++;
      {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
      string_append (result, "short");
      break;
    case 'b':
      (*mangled)++;
      {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
      string_append (result, "bool");
      tk = tk_bool;
      break;
    case 'c':
      (*mangled)++;
      {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
      string_append (result, "char");
      tk = tk_char;
      break;
    case 'w':
      (*mangled)++;
      {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
      string_append (result, "wchar_t");
      tk = tk_char;
      break;
    case 'r':
      (*mangled)++;
      {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
      string_append (result, "long double");
      tk = tk_real;
      break;
    case 'd':
      (*mangled)++;
      {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
      string_append (result, "double");
      tk = tk_real;
      break;
    case 'f':
      (*mangled)++;
      {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
      string_append (result, "float");
      tk = tk_real;
      break;
    case 'G':
      (*mangled)++;
      if (!(_sch_istable[((unsigned char)**mangled) & 0xff] & (unsigned short)(_sch_isdigit)))
 {
   success = 0;
   break;
 }
    case 'I':
      (*mangled)++;
      if (**mangled == '_')
 {
   int i;
   (*mangled)++;
   for (i = 0;
        i < (long) sizeof (buf) - 1 && **mangled && **mangled != '_';
        (*mangled)++, i++)
     buf[i] = **mangled;
   if (**mangled != '_')
     {
       success = 0;
       break;
     }
   buf[i] = '\0';
   (*mangled)++;
 }
      else
 {
   strncpy (buf, *mangled, 2);
   buf[2] = '\0';
   *mangled += (((strlen (*mangled)) < (2)) ? (strlen (*mangled)) : (2));
 }
      sscanf (buf, "%x", &dec);
      sprintf (buf, "int%u_t", dec);
      {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
      string_append (result, buf);
      break;
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
      {
        int bindex = register_Btype (work);
        string btype;
        string_init (&btype);
        if (demangle_class_name (work, mangled, &btype)) {
          remember_Btype (work, btype.b, ( (((&btype) -> b == (&btype) -> p))?0:((&btype)->p - (&btype)->b)), bindex);
          {if (!((result) -> b == (result) -> p)) string_append(result, " ");};
          string_appends (result, &btype);
        }
        else
          success = 0;
        string_delete (&btype);
        break;
      }
    case 't':
      {
        string btype;
        string_init (&btype);
        success = demangle_template (work, mangled, &btype, 0, 1, 1);
        string_appends (result, &btype);
        string_delete (&btype);
        break;
      }
    default:
      success = 0;
      break;
    }
  return success ? ((int) tk) : 0;
}
static int
do_hpacc_template_const_value (work, mangled, result)
     struct work_stuff *work ;
     const char **mangled;
     string *result;
{
  int unsigned_const;
  if (**mangled != 'U' && **mangled != 'S')
    return 0;
  unsigned_const = (**mangled == 'U');
  (*mangled)++;
  switch (**mangled)
    {
      case 'N':
        string_append (result, "-");
      case 'P':
        (*mangled)++;
        break;
      case 'M':
        string_append (result, "-2147483648");
        (*mangled)++;
        return 1;
      default:
        return 0;
    }
  if (!((_sch_istable[((unsigned char)**mangled) & 0xff] & (unsigned short)(_sch_isdigit))))
    return 0;
  while ((_sch_istable[((unsigned char)**mangled) & 0xff] & (unsigned short)(_sch_isdigit)))
    {
      char_str[0] = **mangled;
      string_append (result, char_str);
      (*mangled)++;
    }
  if (unsigned_const)
    string_append (result, "U");
  return 1;
}
static int
do_hpacc_template_literal (work, mangled, result)
     struct work_stuff *work;
     const char **mangled;
     string *result;
{
  int literal_len = 0;
  char * recurse;
  char * recurse_dem;
  if (**mangled != 'A')
    return 0;
  (*mangled)++;
  literal_len = consume_count (mangled);
  if (literal_len <= 0)
    return 0;
  string_append (result, "&");
  recurse = (char *) xmalloc (literal_len + 1);
  memcpy (recurse, *mangled, literal_len);
  recurse[literal_len] = '\000';
  recurse_dem = cplus_demangle (recurse, work->options);
  if (recurse_dem)
    {
      string_append (result, recurse_dem);
      free (recurse_dem);
    }
  else
    {
      string_appendn (result, *mangled, literal_len);
    }
  (*mangled) += literal_len;
  free (recurse);
  return 1;
}
static int
snarf_numeric_literal (args, arg)
     const char ** args;
     string * arg;
{
  if (**args == '-')
    {
      char_str[0] = '-';
      string_append (arg, char_str);
      (*args)++;
    }
  else if (**args == '+')
    (*args)++;
  if (!(_sch_istable[((unsigned char)**args) & 0xff] & (unsigned short)(_sch_isdigit)))
    return 0;
  while ((_sch_istable[((unsigned char)**args) & 0xff] & (unsigned short)(_sch_isdigit)))
    {
      char_str[0] = **args;
      string_append (arg, char_str);
      (*args)++;
    }
  return 1;
}
static int
do_arg (work, mangled, result)
     struct work_stuff *work;
     const char **mangled;
     string *result;
{
  const char *start = *mangled;
  string_init (result);
  if (work->nrepeats > 0)
    {
      --work->nrepeats;
      if (work->previous_argument == 0)
 return 0;
      string_appends (result, work->previous_argument);
      return 1;
    }
  if (**mangled == 'n')
    {
      (*mangled)++;
      work->nrepeats = consume_count(mangled);
      if (work->nrepeats <= 0)
 return 0;
      if (work->nrepeats > 9)
 {
   if (**mangled != '_')
     return 0;
   else
     (*mangled)++;
 }
      return do_arg (work, mangled, result);
    }
  if (work->previous_argument)
    string_delete (work->previous_argument);
  else
    work->previous_argument = (string*) xmalloc (sizeof (string));
  if (!do_type (work, mangled, work->previous_argument))
    return 0;
  string_appends (result, work->previous_argument);
  remember_type (work, start, *mangled - start);
  return 1;
}
static void
remember_type (work, start, len)
     struct work_stuff *work;
     const char *start;
     int len;
{
  char *tem;
  if (work->forgetting_types)
    return;
  if (work -> ntypes >= work -> typevec_size)
    {
      if (work -> typevec_size == 0)
 {
   work -> typevec_size = 3;
   work -> typevec
     = (char **) xmalloc (sizeof (char *) * work -> typevec_size);
 }
      else
 {
   work -> typevec_size *= 2;
   work -> typevec
     = (char **) xrealloc ((char *)work -> typevec,
      sizeof (char *) * work -> typevec_size);
 }
    }
  tem = xmalloc (len + 1);
  memcpy (tem, start, len);
  tem[len] = '\0';
  work -> typevec[work -> ntypes++] = tem;
}
static void
remember_Ktype (work, start, len)
     struct work_stuff *work;
     const char *start;
     int len;
{
  char *tem;
  if (work -> numk >= work -> ksize)
    {
      if (work -> ksize == 0)
 {
   work -> ksize = 5;
   work -> ktypevec
     = (char **) xmalloc (sizeof (char *) * work -> ksize);
 }
      else
 {
   work -> ksize *= 2;
   work -> ktypevec
     = (char **) xrealloc ((char *)work -> ktypevec,
      sizeof (char *) * work -> ksize);
 }
    }
  tem = xmalloc (len + 1);
  memcpy (tem, start, len);
  tem[len] = '\0';
  work -> ktypevec[work -> numk++] = tem;
}
static int
register_Btype (work)
     struct work_stuff *work;
{
  int ret;
  if (work -> numb >= work -> bsize)
    {
      if (work -> bsize == 0)
 {
   work -> bsize = 5;
   work -> btypevec
     = (char **) xmalloc (sizeof (char *) * work -> bsize);
 }
      else
 {
   work -> bsize *= 2;
   work -> btypevec
     = (char **) xrealloc ((char *)work -> btypevec,
      sizeof (char *) * work -> bsize);
 }
    }
  ret = work -> numb++;
  work -> btypevec[ret] = ((void *)0);
  return(ret);
}
static void
remember_Btype (work, start, len, index)
     struct work_stuff *work;
     const char *start;
     int len, index;
{
  char *tem;
  tem = xmalloc (len + 1);
  memcpy (tem, start, len);
  tem[len] = '\0';
  work -> btypevec[index] = tem;
}
static void
forget_B_and_K_types (work)
     struct work_stuff *work;
{
  int i;
  while (work -> numk > 0)
    {
      i = --(work -> numk);
      if (work -> ktypevec[i] != ((void *)0))
 {
   free (work -> ktypevec[i]);
   work -> ktypevec[i] = ((void *)0);
 }
    }
  while (work -> numb > 0)
    {
      i = --(work -> numb);
      if (work -> btypevec[i] != ((void *)0))
 {
   free (work -> btypevec[i]);
   work -> btypevec[i] = ((void *)0);
 }
    }
}
static void
forget_types (work)
     struct work_stuff *work;
{
  int i;
  while (work -> ntypes > 0)
    {
      i = --(work -> ntypes);
      if (work -> typevec[i] != ((void *)0))
 {
   free (work -> typevec[i]);
   work -> typevec[i] = ((void *)0);
 }
    }
}
static int
demangle_args (work, mangled, declp)
     struct work_stuff *work;
     const char **mangled;
     string *declp;
{
  string arg;
  int need_comma = 0;
  int r;
  int t;
  const char *tem;
  char temptype;
  if ((work -> options & (1 << 0)))
    {
      string_append (declp, "(");
      if (**mangled == '\0')
 {
   string_append (declp, "void");
 }
    }
  while ((**mangled != '_' && **mangled != '\0' && **mangled != 'e')
  || work->nrepeats > 0)
    {
      if ((**mangled == 'N') || (**mangled == 'T'))
 {
   temptype = *(*mangled)++;
   if (temptype == 'N')
     {
       if (!get_count (mangled, &r))
  {
    return (0);
  }
     }
   else
     {
       r = 1;
     }
          if (((((int) work->options) & (1 << 12)) || (((int) work->options) & (1 << 11)) || (((int) work->options) & (1 << 13))) && work -> ntypes >= 10)
            {
              if ((t = consume_count(mangled)) <= 0)
                {
                  return (0);
                }
            }
          else
     {
       if (!get_count (mangled, &t))
      {
           return (0);
      }
     }
   if ((((int) work->options) & (1 << 10)) || (((int) work->options) & (1 << 11)) || (((int) work->options) & (1 << 12)) || (((int) work->options) & (1 << 13)))
     {
       t--;
     }
   if ((t < 0) || (t >= work -> ntypes))
     {
       return (0);
     }
   while (work->nrepeats > 0 || --r >= 0)
     {
       tem = work -> typevec[t];
       if (need_comma && (work -> options & (1 << 0)))
  {
    string_append (declp, ", ");
  }
       if (!do_arg (work, &tem, &arg))
  {
    return (0);
  }
       if ((work -> options & (1 << 0)))
  {
    string_appends (declp, &arg);
  }
       string_delete (&arg);
       need_comma = 1;
     }
 }
      else
 {
   if (need_comma && (work -> options & (1 << 0)))
     string_append (declp, ", ");
   if (!do_arg (work, mangled, &arg))
     return (0);
   if ((work -> options & (1 << 0)))
     string_appends (declp, &arg);
   string_delete (&arg);
   need_comma = 1;
 }
    }
  if (**mangled == 'e')
    {
      (*mangled)++;
      if ((work -> options & (1 << 0)))
 {
   if (need_comma)
     {
       string_append (declp, ",");
     }
   string_append (declp, "...");
 }
    }
  if ((work -> options & (1 << 0)))
    {
      string_append (declp, ")");
    }
  return (1);
}
static int
demangle_nested_args (work, mangled, declp)
     struct work_stuff *work;
     const char **mangled;
     string *declp;
{
  string* saved_previous_argument;
  int result;
  int saved_nrepeats;
  ++work->forgetting_types;
  saved_previous_argument = work->previous_argument;
  saved_nrepeats = work->nrepeats;
  work->previous_argument = 0;
  work->nrepeats = 0;
  result = demangle_args (work, mangled, declp);
  if (work->previous_argument)
    {
      string_delete (work->previous_argument);
      free ((char *) work->previous_argument);
    }
  work->previous_argument = saved_previous_argument;
  --work->forgetting_types;
  work->nrepeats = saved_nrepeats;
  return result;
}
static void
demangle_function_name (work, mangled, declp, scan)
     struct work_stuff *work;
     const char **mangled;
     string *declp;
     const char *scan;
{
  size_t i;
  string type;
  const char *tem;
  string_appendn (declp, (*mangled), scan - (*mangled));
  string_need (declp, 1);
  *(declp -> p) = '\0';
  (*mangled) = scan + 2;
  if ((((int) work->options) & (1 << 12)) && (**mangled == 'X'))
    {
      demangle_arm_hp_template (work, mangled, 0, declp);
    }
  if ((((int) work->options) & (1 << 10)) || (((int) work->options) & (1 << 11)) || (((int) work->options) & (1 << 12)) || (((int) work->options) & (1 << 13)))
    {
      if (strcmp (declp -> b, "__ct") == 0)
 {
   work -> constructor += 1;
   string_clear (declp);
   return;
 }
      else if (strcmp (declp -> b, "__dt") == 0)
 {
   work -> destructor += 1;
   string_clear (declp);
   return;
 }
    }
  if (declp->p - declp->b >= 3
      && declp->b[0] == 'o'
      && declp->b[1] == 'p'
      && strchr (cplus_markers, declp->b[2]) != ((void *)0))
    {
      if (declp->p - declp->b >= 10
   && memcmp (declp->b + 3, "assign_", 7) == 0)
 {
   for (i = 0; i < (sizeof (optable) / sizeof ((optable)[0])); i++)
     {
       int len = declp->p - declp->b - 10;
       if ((int) strlen (optable[i].in) == len
    && memcmp (optable[i].in, declp->b + 10, len) == 0)
  {
    string_clear (declp);
    string_append (declp, "operator");
    string_append (declp, optable[i].out);
    string_append (declp, "=");
    break;
  }
     }
 }
      else
 {
   for (i = 0; i < (sizeof (optable) / sizeof ((optable)[0])); i++)
     {
       int len = declp->p - declp->b - 3;
       if ((int) strlen (optable[i].in) == len
    && memcmp (optable[i].in, declp->b + 3, len) == 0)
  {
    string_clear (declp);
    string_append (declp, "operator");
    string_append (declp, optable[i].out);
    break;
  }
     }
 }
    }
  else if (declp->p - declp->b >= 5 && memcmp (declp->b, "type", 4) == 0
    && strchr (cplus_markers, declp->b[4]) != ((void *)0))
    {
      tem = declp->b + 5;
      if (do_type (work, &tem, &type))
 {
   string_clear (declp);
   string_append (declp, "operator ");
   string_appends (declp, &type);
   string_delete (&type);
 }
    }
  else if (declp->b[0] == '_' && declp->b[1] == '_'
    && declp->b[2] == 'o' && declp->b[3] == 'p')
    {
      tem = declp->b + 4;
      if (do_type (work, &tem, &type))
 {
   string_clear (declp);
   string_append (declp, "operator ");
   string_appends (declp, &type);
   string_delete (&type);
 }
    }
  else if (declp->b[0] == '_' && declp->b[1] == '_'
    && (_sch_istable[((unsigned char)declp->b[2]) & 0xff] & (unsigned short)(_sch_islower))
    && (_sch_istable[((unsigned char)declp->b[3]) & 0xff] & (unsigned short)(_sch_islower)))
    {
      if (declp->b[4] == '\0')
 {
   for (i = 0; i < (sizeof (optable) / sizeof ((optable)[0])); i++)
     {
       if (strlen (optable[i].in) == 2
    && memcmp (optable[i].in, declp->b + 2, 2) == 0)
  {
    string_clear (declp);
    string_append (declp, "operator");
    string_append (declp, optable[i].out);
    break;
  }
     }
 }
      else
 {
   if (declp->b[2] == 'a' && declp->b[5] == '\0')
     {
       for (i = 0; i < (sizeof (optable) / sizeof ((optable)[0])); i++)
  {
    if (strlen (optable[i].in) == 3
        && memcmp (optable[i].in, declp->b + 2, 3) == 0)
      {
        string_clear (declp);
        string_append (declp, "operator");
        string_append (declp, optable[i].out);
        break;
      }
  }
     }
 }
    }
}
static void
string_need (s, n)
     string *s;
     int n;
{
  int tem;
  if (s->b == ((void *)0))
    {
      if (n < 32)
 {
   n = 32;
 }
      s->p = s->b = xmalloc (n);
      s->e = s->b + n;
    }
  else if (s->e - s->p < n)
    {
      tem = s->p - s->b;
      n += tem;
      n *= 2;
      s->b = xrealloc (s->b, n);
      s->p = s->b + tem;
      s->e = s->b + n;
    }
}
static void
string_delete (s)
     string *s;
{
  if (s->b != ((void *)0))
    {
      free (s->b);
      s->b = s->e = s->p = ((void *)0);
    }
}
static void
string_init (s)
     string *s;
{
  s->b = s->p = s->e = ((void *)0);
}
static void
string_clear (s)
     string *s;
{
  s->p = s->b;
}
static void
string_append (p, s)
     string *p;
     const char *s;
{
  int n;
  if (s == ((void *)0) || *s == '\0')
    return;
  n = strlen (s);
  string_need (p, n);
  memcpy (p->p, s, n);
  p->p += n;
}
static void
string_appends (p, s)
     string *p, *s;
{
  int n;
  if (s->b != s->p)
    {
      n = s->p - s->b;
      string_need (p, n);
      memcpy (p->p, s->b, n);
      p->p += n;
    }
}
static void
string_appendn (p, s, n)
     string *p;
     const char *s;
     int n;
{
  if (n != 0)
    {
      string_need (p, n);
      memcpy (p->p, s, n);
      p->p += n;
    }
}
static void
string_prepend (p, s)
     string *p;
     const char *s;
{
  if (s != ((void *)0) && *s != '\0')
    {
      string_prependn (p, s, strlen (s));
    }
}
static void
string_prepends (p, s)
     string *p, *s;
{
  if (s->b != s->p)
    {
      string_prependn (p, s->b, s->p - s->b);
    }
}
static void
string_prependn (p, s, n)
     string *p;
     const char *s;
     int n;
{
  char *q;
  if (n != 0)
    {
      string_need (p, n);
      for (q = p->p - 1; q >= p->b; q--)
 {
   q[n] = q[0];
 }
      memcpy (p->b, s, n);
      p->p += n;
    }
}
static void
string_append_template_idx (s, idx)
     string *s;
     int idx;
{
  char buf[32 + 1 ];
  sprintf(buf, "T%d", idx);
  string_append (s, buf);
}
struct demangle_operator_info
{
  const char *code;
  const char *name;
  int len;
  int args;
};
enum d_builtin_type_print
{
  D_PRINT_DEFAULT,
  D_PRINT_INT,
  D_PRINT_UNSIGNED,
  D_PRINT_LONG,
  D_PRINT_UNSIGNED_LONG,
  D_PRINT_LONG_LONG,
  D_PRINT_UNSIGNED_LONG_LONG,
  D_PRINT_BOOL,
  D_PRINT_FLOAT,
  D_PRINT_VOID
};
struct demangle_builtin_type_info
{
  const char *name;
  int len;
  const char *java_name;
  int java_len;
  enum d_builtin_type_print print;
};
struct d_info
{
  const char *s;
  const char *send;
  int options;
  const char *n;
  struct demangle_component *comps;
  int next_comp;
  int num_comps;
  struct demangle_component **subs;
  int next_sub;
  int num_subs;
  int did_subs;
  struct demangle_component *last_name;
  int expansion;
};
extern
const struct demangle_operator_info cplus_demangle_operators[];
extern
const struct demangle_builtin_type_info
cplus_demangle_builtin_types[(26)];
extern
struct demangle_component *
cplus_demangle_mangled_name (struct d_info *, int);
extern
struct demangle_component *
cplus_demangle_type (struct d_info *);
extern void
cplus_demangle_init_info (const char *, int, size_t, struct d_info *);
struct d_standard_sub_info
{
  char code;
  const char *simple_expansion;
  int simple_len;
  const char *full_expansion;
  int full_len;
  const char *set_last_name;
  int set_last_name_len;
};
struct d_print_template
{
  struct d_print_template *next;
  const struct demangle_component *template;
};
struct d_print_mod
{
  struct d_print_mod *next;
  const struct demangle_component *mod;
  int printed;
  struct d_print_template *templates;
};
struct d_print_info
{
  int options;
  char *buf;
  size_t len;
  size_t alc;
  struct d_print_template *templates;
  struct d_print_mod *modifiers;
  int allocation_failure;
};
static struct demangle_component *
d_make_empty (struct d_info *);
static struct demangle_component *
d_make_comp (struct d_info *, enum demangle_component_type, struct demangle_component *, struct demangle_component *)
                                    ;
static struct demangle_component *
d_make_name (struct d_info *, const char *, int);
static struct demangle_component *
d_make_builtin_type (struct d_info *, const struct demangle_builtin_type_info *)
                                                   ;
static struct demangle_component *
d_make_operator (struct d_info *, const struct demangle_operator_info *)
                                           ;
static struct demangle_component *
d_make_extended_operator (struct d_info *, int, struct demangle_component *)
                                   ;
static struct demangle_component *
d_make_ctor (struct d_info *, enum gnu_v3_ctor_kinds, struct demangle_component *)
                                    ;
static struct demangle_component *
d_make_dtor (struct d_info *, enum gnu_v3_dtor_kinds, struct demangle_component *)
                                    ;
static struct demangle_component *
d_make_template_param (struct d_info *, long);
static struct demangle_component *
d_make_sub (struct d_info *, const char *, int);
static int
has_return_type (struct demangle_component *);
static int
is_ctor_dtor_or_conversion (struct demangle_component *);
static struct demangle_component *
d_encoding (struct d_info *, int);
static struct demangle_component *
d_name (struct d_info *);
static struct demangle_component *
d_nested_name (struct d_info *);
static struct demangle_component *
d_prefix (struct d_info *);
static struct demangle_component *
d_unqualified_name (struct d_info *);
static struct demangle_component *
d_source_name (struct d_info *);
static long
d_number (struct d_info *);
static struct demangle_component *
d_identifier (struct d_info *, int);
static struct demangle_component *
d_operator_name (struct d_info *);
static struct demangle_component *
d_special_name (struct d_info *);
static int
d_call_offset (struct d_info *, int);
static struct demangle_component *
d_ctor_dtor_name (struct d_info *);
static struct demangle_component **
d_cv_qualifiers (struct d_info *, struct demangle_component **, int);
static struct demangle_component *
d_function_type (struct d_info *);
static struct demangle_component *
d_bare_function_type (struct d_info *, int);
static struct demangle_component *
d_class_enum_type (struct d_info *);
static struct demangle_component *
d_array_type (struct d_info *);
static struct demangle_component *
d_pointer_to_member_type (struct d_info *);
static struct demangle_component *
d_template_param (struct d_info *);
static struct demangle_component *
d_template_args (struct d_info *);
static struct demangle_component *
d_template_arg (struct d_info *);
static struct demangle_component *
d_expression (struct d_info *);
static struct demangle_component *
d_expr_primary (struct d_info *);
static struct demangle_component *
d_local_name (struct d_info *);
static int
d_discriminator (struct d_info *);
static int
d_add_substitution (struct d_info *, struct demangle_component *);
static struct demangle_component *
d_substitution (struct d_info *, int);
static void
d_print_resize (struct d_print_info *, size_t);
static void
d_print_append_char (struct d_print_info *, int);
static void
d_print_append_buffer (struct d_print_info *, const char *, size_t);
static void
d_print_error (struct d_print_info *);
static void
d_print_comp (struct d_print_info *, const struct demangle_component *)
                                           ;
static void
d_print_java_identifier (struct d_print_info *, const char *, int);
static void
d_print_mod_list (struct d_print_info *, struct d_print_mod *, int);
static void
d_print_mod (struct d_print_info *, const struct demangle_component *)
                                          ;
static void
d_print_function_type (struct d_print_info *, const struct demangle_component *, struct d_print_mod *)
                                ;
static void
d_print_array_type (struct d_print_info *, const struct demangle_component *, struct d_print_mod *)
                             ;
static void
d_print_expr_op (struct d_print_info *, const struct demangle_component *)
                                       ;
static void
d_print_cast (struct d_print_info *, const struct demangle_component *)
                                           ;
static char *
d_demangle (const char *, int, size_t *);
int
cplus_demangle_fill_name (p, s, len)
     struct demangle_component *p;
     const char *s;
     int len;
{
  if (p == ((void *)0) || s == ((void *)0) || len == 0)
    return 0;
  p->type = DEMANGLE_COMPONENT_NAME;
  p->u.s_name.s = s;
  p->u.s_name.len = len;
  return 1;
}
int
cplus_demangle_fill_extended_operator (p, args, name)
     struct demangle_component *p;
     int args;
     struct demangle_component *name;
{
  if (p == ((void *)0) || args < 0 || name == ((void *)0))
    return 0;
  p->type = DEMANGLE_COMPONENT_EXTENDED_OPERATOR;
  p->u.s_extended_operator.args = args;
  p->u.s_extended_operator.name = name;
  return 1;
}
int
cplus_demangle_fill_ctor (p, kind, name)
     struct demangle_component *p;
     enum gnu_v3_ctor_kinds kind;
     struct demangle_component *name;
{
  if (p == ((void *)0)
      || name == ((void *)0)
      || (kind < gnu_v3_complete_object_ctor
   && kind > gnu_v3_complete_object_allocating_ctor))
    return 0;
  p->type = DEMANGLE_COMPONENT_CTOR;
  p->u.s_ctor.kind = kind;
  p->u.s_ctor.name = name;
  return 1;
}
int
cplus_demangle_fill_dtor (p, kind, name)
     struct demangle_component *p;
     enum gnu_v3_dtor_kinds kind;
     struct demangle_component *name;
{
  if (p == ((void *)0)
      || name == ((void *)0)
      || (kind < gnu_v3_deleting_dtor
   && kind > gnu_v3_base_object_dtor))
    return 0;
  p->type = DEMANGLE_COMPONENT_DTOR;
  p->u.s_dtor.kind = kind;
  p->u.s_dtor.name = name;
  return 1;
}
static struct demangle_component *
d_make_empty (di)
     struct d_info *di;
{
  struct demangle_component *p;
  if (di->next_comp >= di->num_comps)
    return ((void *)0);
  p = &di->comps[di->next_comp];
  ++di->next_comp;
  return p;
}
static struct demangle_component *
d_make_comp (di, type, left, right)
     struct d_info *di;
     enum demangle_component_type type;
     struct demangle_component *left;
     struct demangle_component *right;
{
  struct demangle_component *p;
  switch (type)
    {
    case DEMANGLE_COMPONENT_QUAL_NAME:
    case DEMANGLE_COMPONENT_LOCAL_NAME:
    case DEMANGLE_COMPONENT_TYPED_NAME:
    case DEMANGLE_COMPONENT_TEMPLATE:
    case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
    case DEMANGLE_COMPONENT_UNARY:
    case DEMANGLE_COMPONENT_BINARY:
    case DEMANGLE_COMPONENT_BINARY_ARGS:
    case DEMANGLE_COMPONENT_TRINARY:
    case DEMANGLE_COMPONENT_TRINARY_ARG1:
    case DEMANGLE_COMPONENT_TRINARY_ARG2:
    case DEMANGLE_COMPONENT_LITERAL:
    case DEMANGLE_COMPONENT_LITERAL_NEG:
      if (left == ((void *)0) || right == ((void *)0))
 return ((void *)0);
      break;
    case DEMANGLE_COMPONENT_VTABLE:
    case DEMANGLE_COMPONENT_VTT:
    case DEMANGLE_COMPONENT_TYPEINFO:
    case DEMANGLE_COMPONENT_TYPEINFO_NAME:
    case DEMANGLE_COMPONENT_TYPEINFO_FN:
    case DEMANGLE_COMPONENT_THUNK:
    case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
    case DEMANGLE_COMPONENT_COVARIANT_THUNK:
    case DEMANGLE_COMPONENT_JAVA_CLASS:
    case DEMANGLE_COMPONENT_GUARD:
    case DEMANGLE_COMPONENT_REFTEMP:
    case DEMANGLE_COMPONENT_POINTER:
    case DEMANGLE_COMPONENT_REFERENCE:
    case DEMANGLE_COMPONENT_COMPLEX:
    case DEMANGLE_COMPONENT_IMAGINARY:
    case DEMANGLE_COMPONENT_VENDOR_TYPE:
    case DEMANGLE_COMPONENT_ARGLIST:
    case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
    case DEMANGLE_COMPONENT_CAST:
      if (left == ((void *)0))
 return ((void *)0);
      break;
    case DEMANGLE_COMPONENT_ARRAY_TYPE:
      if (right == ((void *)0))
 return ((void *)0);
      break;
    case DEMANGLE_COMPONENT_FUNCTION_TYPE:
    case DEMANGLE_COMPONENT_RESTRICT:
    case DEMANGLE_COMPONENT_VOLATILE:
    case DEMANGLE_COMPONENT_CONST:
    case DEMANGLE_COMPONENT_RESTRICT_THIS:
    case DEMANGLE_COMPONENT_VOLATILE_THIS:
    case DEMANGLE_COMPONENT_CONST_THIS:
      break;
    default:
      return ((void *)0);
    }
  p = d_make_empty (di);
  if (p != ((void *)0))
    {
      p->type = type;
      p->u.s_binary.left = left;
      p->u.s_binary.right = right;
    }
  return p;
}
static struct demangle_component *
d_make_name (di, s, len)
     struct d_info *di;
     const char *s;
     int len;
{
  struct demangle_component *p;
  p = d_make_empty (di);
  if (! cplus_demangle_fill_name (p, s, len))
    return ((void *)0);
  return p;
}
static struct demangle_component *
d_make_builtin_type (di, type)
     struct d_info *di;
     const struct demangle_builtin_type_info *type;
{
  struct demangle_component *p;
  if (type == ((void *)0))
    return ((void *)0);
  p = d_make_empty (di);
  if (p != ((void *)0))
    {
      p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE;
      p->u.s_builtin.type = type;
    }
  return p;
}
static struct demangle_component *
d_make_operator (di, op)
     struct d_info *di;
     const struct demangle_operator_info *op;
{
  struct demangle_component *p;
  p = d_make_empty (di);
  if (p != ((void *)0))
    {
      p->type = DEMANGLE_COMPONENT_OPERATOR;
      p->u.s_operator.op = op;
    }
  return p;
}
static struct demangle_component *
d_make_extended_operator (di, args, name)
     struct d_info *di;
     int args;
     struct demangle_component *name;
{
  struct demangle_component *p;
  p = d_make_empty (di);
  if (! cplus_demangle_fill_extended_operator (p, args, name))
    return ((void *)0);
  return p;
}
static struct demangle_component *
d_make_ctor (di, kind, name)
     struct d_info *di;
     enum gnu_v3_ctor_kinds kind;
     struct demangle_component *name;
{
  struct demangle_component *p;
  p = d_make_empty (di);
  if (! cplus_demangle_fill_ctor (p, kind, name))
    return ((void *)0);
  return p;
}
static struct demangle_component *
d_make_dtor (di, kind, name)
     struct d_info *di;
     enum gnu_v3_dtor_kinds kind;
     struct demangle_component *name;
{
  struct demangle_component *p;
  p = d_make_empty (di);
  if (! cplus_demangle_fill_dtor (p, kind, name))
    return ((void *)0);
  return p;
}
static struct demangle_component *
d_make_template_param (di, i)
     struct d_info *di;
     long i;
{
  struct demangle_component *p;
  p = d_make_empty (di);
  if (p != ((void *)0))
    {
      p->type = DEMANGLE_COMPONENT_TEMPLATE_PARAM;
      p->u.s_number.number = i;
    }
  return p;
}
static struct demangle_component *
d_make_sub (di, name, len)
     struct d_info *di;
     const char *name;
     int len;
{
  struct demangle_component *p;
  p = d_make_empty (di);
  if (p != ((void *)0))
    {
      p->type = DEMANGLE_COMPONENT_SUB_STD;
      p->u.s_string.string1 = name;
      p->u.s_string.len = len;
    }
  return p;
}
struct demangle_component *
cplus_demangle_mangled_name (di, top_level)
     struct d_info *di;
     int top_level;
{
  if ((*((di)->n++)) != '_')
    return ((void *)0);
  if ((*((di)->n++)) != 'Z')
    return ((void *)0);
  return d_encoding (di, top_level);
}
static int
has_return_type (dc)
     struct demangle_component *dc;
{
  if (dc == ((void *)0))
    return 0;
  switch (dc->type)
    {
    default:
      return 0;
    case DEMANGLE_COMPONENT_TEMPLATE:
      return ! is_ctor_dtor_or_conversion (((dc)->u.s_binary.left));
    case DEMANGLE_COMPONENT_RESTRICT_THIS:
    case DEMANGLE_COMPONENT_VOLATILE_THIS:
    case DEMANGLE_COMPONENT_CONST_THIS:
      return has_return_type (((dc)->u.s_binary.left));
    }
}
static int
is_ctor_dtor_or_conversion (dc)
     struct demangle_component *dc;
{
  if (dc == ((void *)0))
    return 0;
  switch (dc->type)
    {
    default:
      return 0;
    case DEMANGLE_COMPONENT_QUAL_NAME:
    case DEMANGLE_COMPONENT_LOCAL_NAME:
      return is_ctor_dtor_or_conversion (((dc)->u.s_binary.right));
    case DEMANGLE_COMPONENT_CTOR:
    case DEMANGLE_COMPONENT_DTOR:
    case DEMANGLE_COMPONENT_CAST:
      return 1;
    }
}
static struct demangle_component *
d_encoding (di, top_level)
     struct d_info *di;
     int top_level;
{
  char peek = (*((di)->n));
  if (peek == 'G' || peek == 'T')
    return d_special_name (di);
  else
    {
      struct demangle_component *dc;
      dc = d_name (di);
      if (dc != ((void *)0) && top_level && (di->options & (1 << 0)) == 0)
 {
   while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
   || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
   || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
     dc = ((dc)->u.s_binary.left);
   if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME)
     {
       struct demangle_component *dcr;
       dcr = ((dc)->u.s_binary.right);
       while (dcr->type == DEMANGLE_COMPONENT_RESTRICT_THIS
       || dcr->type == DEMANGLE_COMPONENT_VOLATILE_THIS
       || dcr->type == DEMANGLE_COMPONENT_CONST_THIS)
  dcr = ((dcr)->u.s_binary.left);
       dc->u.s_binary.right = dcr;
     }
   return dc;
 }
      peek = (*((di)->n));
      if (peek == '\0' || peek == 'E')
 return dc;
      return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc,
     d_bare_function_type (di, has_return_type (dc)));
    }
}
static struct demangle_component *
d_name (di)
     struct d_info *di;
{
  char peek = (*((di)->n));
  struct demangle_component *dc;
  switch (peek)
    {
    case 'N':
      return d_nested_name (di);
    case 'Z':
      return d_local_name (di);
    case 'S':
      {
 int subst;
 if (((di)->n[1]) != 't')
   {
     dc = d_substitution (di, 0);
     subst = 1;
   }
 else
   {
     ((di)->n += (2));
     dc = d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME,
         d_make_name (di, "std", 3),
         d_unqualified_name (di));
     di->expansion += 3;
     subst = 0;
   }
 if ((*((di)->n)) != 'I')
   {
   }
 else
   {
     if (! subst)
       {
  if (! d_add_substitution (di, dc))
    return ((void *)0);
       }
     dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
         d_template_args (di));
   }
 return dc;
      }
    default:
      dc = d_unqualified_name (di);
      if ((*((di)->n)) == 'I')
 {
   if (! d_add_substitution (di, dc))
     return ((void *)0);
   dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
       d_template_args (di));
 }
      return dc;
    }
}
static struct demangle_component *
d_nested_name (di)
     struct d_info *di;
{
  struct demangle_component *ret;
  struct demangle_component **pret;
  if ((*((di)->n++)) != 'N')
    return ((void *)0);
  pret = d_cv_qualifiers (di, &ret, 1);
  if (pret == ((void *)0))
    return ((void *)0);
  *pret = d_prefix (di);
  if (*pret == ((void *)0))
    return ((void *)0);
  if ((*((di)->n++)) != 'E')
    return ((void *)0);
  return ret;
}
static struct demangle_component *
d_prefix (di)
     struct d_info *di;
{
  struct demangle_component *ret = ((void *)0);
  while (1)
    {
      char peek;
      enum demangle_component_type comb_type;
      struct demangle_component *dc;
      peek = (*((di)->n));
      if (peek == '\0')
 return ((void *)0);
      comb_type = DEMANGLE_COMPONENT_QUAL_NAME;
      if (((peek) >= '0' && (peek) <= '9')
   || ((peek) >= 'a' && (peek) <= 'z')
   || peek == 'C'
   || peek == 'D')
 dc = d_unqualified_name (di);
      else if (peek == 'S')
 dc = d_substitution (di, 1);
      else if (peek == 'I')
 {
   if (ret == ((void *)0))
     return ((void *)0);
   comb_type = DEMANGLE_COMPONENT_TEMPLATE;
   dc = d_template_args (di);
 }
      else if (peek == 'T')
 dc = d_template_param (di);
      else if (peek == 'E')
 return ret;
      else
 return ((void *)0);
      if (ret == ((void *)0))
 ret = dc;
      else
 ret = d_make_comp (di, comb_type, ret, dc);
      if (peek != 'S' && (*((di)->n)) != 'E')
 {
   if (! d_add_substitution (di, ret))
     return ((void *)0);
 }
    }
}
static struct demangle_component *
d_unqualified_name (di)
     struct d_info *di;
{
  char peek;
  peek = (*((di)->n));
  if (((peek) >= '0' && (peek) <= '9'))
    return d_source_name (di);
  else if (((peek) >= 'a' && (peek) <= 'z'))
    {
      struct demangle_component *ret;
      ret = d_operator_name (di);
      if (ret != ((void *)0) && ret->type == DEMANGLE_COMPONENT_OPERATOR)
 di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
      return ret;
    }
  else if (peek == 'C' || peek == 'D')
    return d_ctor_dtor_name (di);
  else
    return ((void *)0);
}
static struct demangle_component *
d_source_name (di)
     struct d_info *di;
{
  long len;
  struct demangle_component *ret;
  len = d_number (di);
  if (len <= 0)
    return ((void *)0);
  ret = d_identifier (di, len);
  di->last_name = ret;
  return ret;
}
static long
d_number (di)
     struct d_info *di;
{
  int negative;
  char peek;
  long ret;
  negative = 0;
  peek = (*((di)->n));
  if (peek == 'n')
    {
      negative = 1;
      ((di)->n += (1));
      peek = (*((di)->n));
    }
  ret = 0;
  while (1)
    {
      if (! ((peek) >= '0' && (peek) <= '9'))
 {
   if (negative)
     ret = - ret;
   return ret;
 }
      ret = ret * 10 + peek - '0';
      ((di)->n += (1));
      peek = (*((di)->n));
    }
}
static struct demangle_component *
d_identifier (di, len)
     struct d_info *di;
     int len;
{
  const char *name;
  name = ((di)->n);
  if (di->send - name < len)
    return ((void *)0);
  ((di)->n += (len));
  if ((di->options & (1 << 2)) != 0
      && (*((di)->n)) == '$')
    ((di)->n += (1));
  if (len >= (int) (sizeof ("_GLOBAL_") - 1) + 2
      && memcmp (name, "_GLOBAL_",
   (sizeof ("_GLOBAL_") - 1)) == 0)
    {
      const char *s;
      s = name + (sizeof ("_GLOBAL_") - 1);
      if ((*s == '.' || *s == '_' || *s == '$')
   && s[1] == 'N')
 {
   di->expansion -= len - sizeof "(anonymous namespace)";
   return d_make_name (di, "(anonymous namespace)",
         sizeof "(anonymous namespace)" - 1);
 }
    }
  return d_make_name (di, name, len);
}
const struct demangle_operator_info cplus_demangle_operators[] =
{
  { "aN", "&=", (sizeof "&=") - 1, 2 },
  { "aS", "=", (sizeof "=") - 1, 2 },
  { "aa", "&&", (sizeof "&&") - 1, 2 },
  { "ad", "&", (sizeof "&") - 1, 1 },
  { "an", "&", (sizeof "&") - 1, 2 },
  { "cl", "()", (sizeof "()") - 1, 0 },
  { "cm", ",", (sizeof ",") - 1, 2 },
  { "co", "~", (sizeof "~") - 1, 1 },
  { "dV", "/=", (sizeof "/=") - 1, 2 },
  { "da", "delete[]", (sizeof "delete[]") - 1, 1 },
  { "de", "*", (sizeof "*") - 1, 1 },
  { "dl", "delete", (sizeof "delete") - 1, 1 },
  { "dv", "/", (sizeof "/") - 1, 2 },
  { "eO", "^=", (sizeof "^=") - 1, 2 },
  { "eo", "^", (sizeof "^") - 1, 2 },
  { "eq", "==", (sizeof "==") - 1, 2 },
  { "ge", ">=", (sizeof ">=") - 1, 2 },
  { "gt", ">", (sizeof ">") - 1, 2 },
  { "ix", "[]", (sizeof "[]") - 1, 2 },
  { "lS", "<<=", (sizeof "<<=") - 1, 2 },
  { "le", "<=", (sizeof "<=") - 1, 2 },
  { "ls", "<<", (sizeof "<<") - 1, 2 },
  { "lt", "<", (sizeof "<") - 1, 2 },
  { "mI", "-=", (sizeof "-=") - 1, 2 },
  { "mL", "*=", (sizeof "*=") - 1, 2 },
  { "mi", "-", (sizeof "-") - 1, 2 },
  { "ml", "*", (sizeof "*") - 1, 2 },
  { "mm", "--", (sizeof "--") - 1, 1 },
  { "na", "new[]", (sizeof "new[]") - 1, 1 },
  { "ne", "!=", (sizeof "!=") - 1, 2 },
  { "ng", "-", (sizeof "-") - 1, 1 },
  { "nt", "!", (sizeof "!") - 1, 1 },
  { "nw", "new", (sizeof "new") - 1, 1 },
  { "oR", "|=", (sizeof "|=") - 1, 2 },
  { "oo", "||", (sizeof "||") - 1, 2 },
  { "or", "|", (sizeof "|") - 1, 2 },
  { "pL", "+=", (sizeof "+=") - 1, 2 },
  { "pl", "+", (sizeof "+") - 1, 2 },
  { "pm", "->*", (sizeof "->*") - 1, 2 },
  { "pp", "++", (sizeof "++") - 1, 1 },
  { "ps", "+", (sizeof "+") - 1, 1 },
  { "pt", "->", (sizeof "->") - 1, 2 },
  { "qu", "?", (sizeof "?") - 1, 3 },
  { "rM", "%=", (sizeof "%=") - 1, 2 },
  { "rS", ">>=", (sizeof ">>=") - 1, 2 },
  { "rm", "%", (sizeof "%") - 1, 2 },
  { "rs", ">>", (sizeof ">>") - 1, 2 },
  { "st", "sizeof ", (sizeof "sizeof ") - 1, 1 },
  { "sz", "sizeof ", (sizeof "sizeof ") - 1, 1 },
  { ((void *)0), ((void *)0), 0, 0 }
};
static struct demangle_component *
d_operator_name (di)
     struct d_info *di;
{
  char c1;
  char c2;
  c1 = (*((di)->n++));
  c2 = (*((di)->n++));
  if (c1 == 'v' && ((c2) >= '0' && (c2) <= '9'))
    return d_make_extended_operator (di, c2 - '0', d_source_name (di));
  else if (c1 == 'c' && c2 == 'v')
    return d_make_comp (di, DEMANGLE_COMPONENT_CAST,
   cplus_demangle_type (di), ((void *)0));
  else
    {
      int low = 0;
      int high = ((sizeof (cplus_demangle_operators)
     / sizeof (cplus_demangle_operators[0]))
    - 1);
      while (1)
 {
   int i;
   const struct demangle_operator_info *p;
   i = low + (high - low) / 2;
   p = cplus_demangle_operators + i;
   if (c1 == p->code[0] && c2 == p->code[1])
     return d_make_operator (di, p);
   if (c1 < p->code[0] || (c1 == p->code[0] && c2 < p->code[1]))
     high = i;
   else
     low = i + 1;
   if (low == high)
     return ((void *)0);
 }
    }
}
static struct demangle_component *
d_special_name (di)
     struct d_info *di;
{
  char c;
  di->expansion += 20;
  c = (*((di)->n++));
  if (c == 'T')
    {
      switch ((*((di)->n++)))
 {
 case 'V':
   di->expansion -= 5;
   return d_make_comp (di, DEMANGLE_COMPONENT_VTABLE,
         cplus_demangle_type (di), ((void *)0));
 case 'T':
   di->expansion -= 10;
   return d_make_comp (di, DEMANGLE_COMPONENT_VTT,
         cplus_demangle_type (di), ((void *)0));
 case 'I':
   return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO,
         cplus_demangle_type (di), ((void *)0));
 case 'S':
   return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_NAME,
         cplus_demangle_type (di), ((void *)0));
 case 'h':
   if (! d_call_offset (di, 'h'))
     return ((void *)0);
   return d_make_comp (di, DEMANGLE_COMPONENT_THUNK,
         d_encoding (di, 0), ((void *)0));
 case 'v':
   if (! d_call_offset (di, 'v'))
     return ((void *)0);
   return d_make_comp (di, DEMANGLE_COMPONENT_VIRTUAL_THUNK,
         d_encoding (di, 0), ((void *)0));
 case 'c':
   if (! d_call_offset (di, '\0'))
     return ((void *)0);
   if (! d_call_offset (di, '\0'))
     return ((void *)0);
   return d_make_comp (di, DEMANGLE_COMPONENT_COVARIANT_THUNK,
         d_encoding (di, 0), ((void *)0));
 case 'C':
   {
     struct demangle_component *derived_type;
     long offset;
     struct demangle_component *base_type;
     derived_type = cplus_demangle_type (di);
     offset = d_number (di);
     if (offset < 0)
       return ((void *)0);
     if ((*((di)->n++)) != '_')
       return ((void *)0);
     base_type = cplus_demangle_type (di);
     di->expansion += 5;
     return d_make_comp (di, DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
    base_type, derived_type);
   }
 case 'F':
   return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_FN,
         cplus_demangle_type (di), ((void *)0));
 case 'J':
   return d_make_comp (di, DEMANGLE_COMPONENT_JAVA_CLASS,
         cplus_demangle_type (di), ((void *)0));
 default:
   return ((void *)0);
 }
    }
  else if (c == 'G')
    {
      switch ((*((di)->n++)))
 {
 case 'V':
   return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, d_name (di), ((void *)0));
 case 'R':
   return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, d_name (di),
         ((void *)0));
 default:
   return ((void *)0);
 }
    }
  else
    return ((void *)0);
}
static int
d_call_offset (di, c)
     struct d_info *di;
     int c;
{
  long offset;
  long virtual_offset;
  if (c == '\0')
    c = (*((di)->n++));
  if (c == 'h')
    offset = d_number (di);
  else if (c == 'v')
    {
      offset = d_number (di);
      if ((*((di)->n++)) != '_')
 return 0;
      virtual_offset = d_number (di);
    }
  else
    return 0;
  if ((*((di)->n++)) != '_')
    return 0;
  return 1;
}
static struct demangle_component *
d_ctor_dtor_name (di)
     struct d_info *di;
{
  if (di->last_name != ((void *)0))
    {
      if (di->last_name->type == DEMANGLE_COMPONENT_NAME)
 di->expansion += di->last_name->u.s_name.len;
      else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD)
 di->expansion += di->last_name->u.s_string.len;
    }
  switch ((*((di)->n++)))
    {
    case 'C':
      {
 enum gnu_v3_ctor_kinds kind;
 switch ((*((di)->n++)))
   {
   case '1':
     kind = gnu_v3_complete_object_ctor;
     break;
   case '2':
     kind = gnu_v3_base_object_ctor;
     break;
   case '3':
     kind = gnu_v3_complete_object_allocating_ctor;
     break;
   default:
     return ((void *)0);
   }
 return d_make_ctor (di, kind, di->last_name);
      }
    case 'D':
      {
 enum gnu_v3_dtor_kinds kind;
 switch ((*((di)->n++)))
   {
   case '0':
     kind = gnu_v3_deleting_dtor;
     break;
   case '1':
     kind = gnu_v3_complete_object_dtor;
     break;
   case '2':
     kind = gnu_v3_base_object_dtor;
     break;
   default:
     return ((void *)0);
   }
 return d_make_dtor (di, kind, di->last_name);
      }
    default:
      return ((void *)0);
    }
}
const struct demangle_builtin_type_info
cplus_demangle_builtin_types[(26)] =
{
          { "signed char", (sizeof "signed char") - 1, "signed char", (sizeof "signed char") - 1, D_PRINT_DEFAULT },
          { "bool", (sizeof "bool") - 1, "boolean", (sizeof "boolean") - 1, D_PRINT_BOOL },
          { "char", (sizeof "char") - 1, "byte", (sizeof "byte") - 1, D_PRINT_DEFAULT },
          { "double", (sizeof "double") - 1, "double", (sizeof "double") - 1, D_PRINT_FLOAT },
          { "long double", (sizeof "long double") - 1, "long double", (sizeof "long double") - 1, D_PRINT_FLOAT },
          { "float", (sizeof "float") - 1, "float", (sizeof "float") - 1, D_PRINT_FLOAT },
          { "__float128", (sizeof "__float128") - 1, "__float128", (sizeof "__float128") - 1, D_PRINT_FLOAT },
          { "unsigned char", (sizeof "unsigned char") - 1, "unsigned char", (sizeof "unsigned char") - 1, D_PRINT_DEFAULT },
          { "int", (sizeof "int") - 1, "int", (sizeof "int") - 1, D_PRINT_INT },
          { "unsigned int", (sizeof "unsigned int") - 1, "unsigned", (sizeof "unsigned") - 1, D_PRINT_UNSIGNED },
          { ((void *)0), 0, ((void *)0), 0, D_PRINT_DEFAULT },
          { "long", (sizeof "long") - 1, "long", (sizeof "long") - 1, D_PRINT_LONG },
          { "unsigned long", (sizeof "unsigned long") - 1, "unsigned long", (sizeof "unsigned long") - 1, D_PRINT_UNSIGNED_LONG },
          { "__int128", (sizeof "__int128") - 1, "__int128", (sizeof "__int128") - 1, D_PRINT_DEFAULT },
          { "unsigned __int128", (sizeof "unsigned __int128") - 1, "unsigned __int128", (sizeof "unsigned __int128") - 1,
     D_PRINT_DEFAULT },
          { ((void *)0), 0, ((void *)0), 0, D_PRINT_DEFAULT },
          { ((void *)0), 0, ((void *)0), 0, D_PRINT_DEFAULT },
          { ((void *)0), 0, ((void *)0), 0, D_PRINT_DEFAULT },
          { "short", (sizeof "short") - 1, "short", (sizeof "short") - 1, D_PRINT_DEFAULT },
          { "unsigned short", (sizeof "unsigned short") - 1, "unsigned short", (sizeof "unsigned short") - 1, D_PRINT_DEFAULT },
          { ((void *)0), 0, ((void *)0), 0, D_PRINT_DEFAULT },
          { "void", (sizeof "void") - 1, "void", (sizeof "void") - 1, D_PRINT_VOID },
          { "wchar_t", (sizeof "wchar_t") - 1, "char", (sizeof "char") - 1, D_PRINT_DEFAULT },
          { "long long", (sizeof "long long") - 1, "long", (sizeof "long") - 1, D_PRINT_LONG_LONG },
          { "unsigned long long", (sizeof "unsigned long long") - 1, "unsigned long long", (sizeof "unsigned long long") - 1,
     D_PRINT_UNSIGNED_LONG_LONG },
          { "...", (sizeof "...") - 1, "...", (sizeof "...") - 1, D_PRINT_DEFAULT },
};
struct demangle_component *
cplus_demangle_type (di)
     struct d_info *di;
{
  char peek;
  struct demangle_component *ret;
  int can_subst;
  peek = (*((di)->n));
  if (peek == 'r' || peek == 'V' || peek == 'K')
    {
      struct demangle_component **pret;
      pret = d_cv_qualifiers (di, &ret, 0);
      if (pret == ((void *)0))
 return ((void *)0);
      *pret = cplus_demangle_type (di);
      if (! d_add_substitution (di, ret))
 return ((void *)0);
      return ret;
    }
  can_subst = 1;
  switch (peek)
    {
    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
    case 'h': case 'i': case 'j': case 'l': case 'm': case 'n':
    case 'o': case 's': case 't':
    case 'v': case 'w': case 'x': case 'y': case 'z':
      ret = d_make_builtin_type (di,
     &cplus_demangle_builtin_types[peek - 'a']);
      di->expansion += ret->u.s_builtin.type->len;
      can_subst = 0;
      ((di)->n += (1));
      break;
    case 'u':
      ((di)->n += (1));
      ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE,
    d_source_name (di), ((void *)0));
      break;
    case 'F':
      ret = d_function_type (di);
      break;
    case '0': case '1': case '2': case '3': case '4':
    case '5': case '6': case '7': case '8': case '9':
    case 'N':
    case 'Z':
      ret = d_class_enum_type (di);
      break;
    case 'A':
      ret = d_array_type (di);
      break;
    case 'M':
      ret = d_pointer_to_member_type (di);
      break;
    case 'T':
      ret = d_template_param (di);
      if ((*((di)->n)) == 'I')
 {
   if (! d_add_substitution (di, ret))
     return ((void *)0);
   ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
        d_template_args (di));
 }
      break;
    case 'S':
      {
 char peek_next;
 peek_next = ((di)->n[1]);
 if (((peek_next) >= '0' && (peek_next) <= '9')
     || peek_next == '_'
     || ((peek_next) >= 'A' && (peek_next) <= 'Z'))
   {
     ret = d_substitution (di, 0);
     if ((*((di)->n)) == 'I')
       ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
     d_template_args (di));
     else
       can_subst = 0;
   }
 else
   {
     ret = d_class_enum_type (di);
     if (ret != ((void *)0) && ret->type == DEMANGLE_COMPONENT_SUB_STD)
       can_subst = 0;
   }
      }
      break;
    case 'P':
      ((di)->n += (1));
      ret = d_make_comp (di, DEMANGLE_COMPONENT_POINTER,
    cplus_demangle_type (di), ((void *)0));
      break;
    case 'R':
      ((di)->n += (1));
      ret = d_make_comp (di, DEMANGLE_COMPONENT_REFERENCE,
    cplus_demangle_type (di), ((void *)0));
      break;
    case 'C':
      ((di)->n += (1));
      ret = d_make_comp (di, DEMANGLE_COMPONENT_COMPLEX,
    cplus_demangle_type (di), ((void *)0));
      break;
    case 'G':
      ((di)->n += (1));
      ret = d_make_comp (di, DEMANGLE_COMPONENT_IMAGINARY,
    cplus_demangle_type (di), ((void *)0));
      break;
    case 'U':
      ((di)->n += (1));
      ret = d_source_name (di);
      ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
    cplus_demangle_type (di), ret);
      break;
    default:
      return ((void *)0);
    }
  if (can_subst)
    {
      if (! d_add_substitution (di, ret))
 return ((void *)0);
    }
  return ret;
}
static struct demangle_component **
d_cv_qualifiers (di, pret, member_fn)
     struct d_info *di;
     struct demangle_component **pret;
     int member_fn;
{
  char peek;
  peek = (*((di)->n));
  while (peek == 'r' || peek == 'V' || peek == 'K')
    {
      enum demangle_component_type t;
      ((di)->n += (1));
      if (peek == 'r')
 {
   t = (member_fn
        ? DEMANGLE_COMPONENT_RESTRICT_THIS
        : DEMANGLE_COMPONENT_RESTRICT);
   di->expansion += sizeof "restrict";
 }
      else if (peek == 'V')
 {
   t = (member_fn
        ? DEMANGLE_COMPONENT_VOLATILE_THIS
        : DEMANGLE_COMPONENT_VOLATILE);
   di->expansion += sizeof "volatile";
 }
      else
 {
   t = (member_fn
        ? DEMANGLE_COMPONENT_CONST_THIS
        : DEMANGLE_COMPONENT_CONST);
   di->expansion += sizeof "const";
 }
      *pret = d_make_comp (di, t, ((void *)0), ((void *)0));
      if (*pret == ((void *)0))
 return ((void *)0);
      pret = &((*pret)->u.s_binary.left);
      peek = (*((di)->n));
    }
  return pret;
}
static struct demangle_component *
d_function_type (di)
     struct d_info *di;
{
  struct demangle_component *ret;
  if ((*((di)->n++)) != 'F')
    return ((void *)0);
  if ((*((di)->n)) == 'Y')
    {
      ((di)->n += (1));
    }
  ret = d_bare_function_type (di, 1);
  if ((*((di)->n++)) != 'E')
    return ((void *)0);
  return ret;
}
static struct demangle_component *
d_bare_function_type (di, has_return_type)
     struct d_info *di;
     int has_return_type;
{
  struct demangle_component *return_type;
  struct demangle_component *tl;
  struct demangle_component **ptl;
  return_type = ((void *)0);
  tl = ((void *)0);
  ptl = &tl;
  while (1)
    {
      char peek;
      struct demangle_component *type;
      peek = (*((di)->n));
      if (peek == '\0' || peek == 'E')
 break;
      type = cplus_demangle_type (di);
      if (type == ((void *)0))
 return ((void *)0);
      if (has_return_type)
 {
   return_type = type;
   has_return_type = 0;
 }
      else
 {
   *ptl = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, type, ((void *)0));
   if (*ptl == ((void *)0))
     return ((void *)0);
   ptl = &((*ptl)->u.s_binary.right);
 }
    }
  if (tl == ((void *)0))
    return ((void *)0);
  if (((tl)->u.s_binary.right) == ((void *)0)
      && ((tl)->u.s_binary.left)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
      && ((tl)->u.s_binary.left)->u.s_builtin.type->print == D_PRINT_VOID)
    {
      di->expansion -= ((tl)->u.s_binary.left)->u.s_builtin.type->len;
      tl = ((void *)0);
    }
  return d_make_comp (di, DEMANGLE_COMPONENT_FUNCTION_TYPE, return_type, tl);
}
static struct demangle_component *
d_class_enum_type (di)
     struct d_info *di;
{
  return d_name (di);
}
static struct demangle_component *
d_array_type (di)
     struct d_info *di;
{
  char peek;
  struct demangle_component *dim;
  if ((*((di)->n++)) != 'A')
    return ((void *)0);
  peek = (*((di)->n));
  if (peek == '_')
    dim = ((void *)0);
  else if (((peek) >= '0' && (peek) <= '9'))
    {
      const char *s;
      s = ((di)->n);
      do
 {
   ((di)->n += (1));
   peek = (*((di)->n));
 }
      while (((peek) >= '0' && (peek) <= '9'));
      dim = d_make_name (di, s, ((di)->n) - s);
      if (dim == ((void *)0))
 return ((void *)0);
    }
  else
    {
      dim = d_expression (di);
      if (dim == ((void *)0))
 return ((void *)0);
    }
  if ((*((di)->n++)) != '_')
    return ((void *)0);
  return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim,
        cplus_demangle_type (di));
}
static struct demangle_component *
d_pointer_to_member_type (di)
     struct d_info *di;
{
  struct demangle_component *cl;
  struct demangle_component *mem;
  struct demangle_component **pmem;
  if ((*((di)->n++)) != 'M')
    return ((void *)0);
  cl = cplus_demangle_type (di);
  pmem = d_cv_qualifiers (di, &mem, 1);
  if (pmem == ((void *)0))
    return ((void *)0);
  *pmem = cplus_demangle_type (di);
  return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem);
}
static struct demangle_component *
d_template_param (di)
     struct d_info *di;
{
  long param;
  if ((*((di)->n++)) != 'T')
    return ((void *)0);
  if ((*((di)->n)) == '_')
    param = 0;
  else
    {
      param = d_number (di);
      if (param < 0)
 return ((void *)0);
      param += 1;
    }
  if ((*((di)->n++)) != '_')
    return ((void *)0);
  ++di->did_subs;
  return d_make_template_param (di, param);
}
static struct demangle_component *
d_template_args (di)
     struct d_info *di;
{
  struct demangle_component *hold_last_name;
  struct demangle_component *al;
  struct demangle_component **pal;
  hold_last_name = di->last_name;
  if ((*((di)->n++)) != 'I')
    return ((void *)0);
  al = ((void *)0);
  pal = &al;
  while (1)
    {
      struct demangle_component *a;
      a = d_template_arg (di);
      if (a == ((void *)0))
 return ((void *)0);
      *pal = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, a, ((void *)0));
      if (*pal == ((void *)0))
 return ((void *)0);
      pal = &((*pal)->u.s_binary.right);
      if ((*((di)->n)) == 'E')
 {
   ((di)->n += (1));
   break;
 }
    }
  di->last_name = hold_last_name;
  return al;
}
static struct demangle_component *
d_template_arg (di)
     struct d_info *di;
{
  struct demangle_component *ret;
  switch ((*((di)->n)))
    {
    case 'X':
      ((di)->n += (1));
      ret = d_expression (di);
      if ((*((di)->n++)) != 'E')
 return ((void *)0);
      return ret;
    case 'L':
      return d_expr_primary (di);
    default:
      return cplus_demangle_type (di);
    }
}
static struct demangle_component *
d_expression (di)
     struct d_info *di;
{
  char peek;
  peek = (*((di)->n));
  if (peek == 'L')
    return d_expr_primary (di);
  else if (peek == 'T')
    return d_template_param (di);
  else if (peek == 's' && ((di)->n[1]) == 'r')
    {
      struct demangle_component *type;
      struct demangle_component *name;
      ((di)->n += (2));
      type = cplus_demangle_type (di);
      name = d_unqualified_name (di);
      if ((*((di)->n)) != 'I')
 return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, name);
      else
 return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type,
       d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name,
      d_template_args (di)));
    }
  else
    {
      struct demangle_component *op;
      int args;
      op = d_operator_name (di);
      if (op == ((void *)0))
 return ((void *)0);
      if (op->type == DEMANGLE_COMPONENT_OPERATOR)
 di->expansion += op->u.s_operator.op->len - 2;
      if (op->type == DEMANGLE_COMPONENT_OPERATOR
   && strcmp (op->u.s_operator.op->code, "st") == 0)
 return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
       cplus_demangle_type (di));
      switch (op->type)
 {
 default:
   return ((void *)0);
 case DEMANGLE_COMPONENT_OPERATOR:
   args = op->u.s_operator.op->args;
   break;
 case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
   args = op->u.s_extended_operator.args;
   break;
 case DEMANGLE_COMPONENT_CAST:
   args = 1;
   break;
 }
      switch (args)
 {
 case 1:
   return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
         d_expression (di));
 case 2:
   {
     struct demangle_component *left;
     left = d_expression (di);
     return d_make_comp (di, DEMANGLE_COMPONENT_BINARY, op,
    d_make_comp (di,
          DEMANGLE_COMPONENT_BINARY_ARGS,
          left,
          d_expression (di)));
   }
 case 3:
   {
     struct demangle_component *first;
     struct demangle_component *second;
     first = d_expression (di);
     second = d_expression (di);
     return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op,
    d_make_comp (di,
          DEMANGLE_COMPONENT_TRINARY_ARG1,
          first,
          d_make_comp (di,
         DEMANGLE_COMPONENT_TRINARY_ARG2,
         second,
         d_expression (di))));
   }
 default:
   return ((void *)0);
 }
    }
}
static struct demangle_component *
d_expr_primary (di)
     struct d_info *di;
{
  struct demangle_component *ret;
  if ((*((di)->n++)) != 'L')
    return ((void *)0);
  if ((*((di)->n)) == '_')
    ret = cplus_demangle_mangled_name (di, 0);
  else
    {
      struct demangle_component *type;
      enum demangle_component_type t;
      const char *s;
      type = cplus_demangle_type (di);
      if (type == ((void *)0))
 return ((void *)0);
      if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
   && type->u.s_builtin.type->print != D_PRINT_DEFAULT)
 di->expansion -= type->u.s_builtin.type->len;
      t = DEMANGLE_COMPONENT_LITERAL;
      if ((*((di)->n)) == 'n')
 {
   t = DEMANGLE_COMPONENT_LITERAL_NEG;
   ((di)->n += (1));
 }
      s = ((di)->n);
      while ((*((di)->n)) != 'E')
 ((di)->n += (1));
      ret = d_make_comp (di, t, type, d_make_name (di, s, ((di)->n) - s));
    }
  if ((*((di)->n++)) != 'E')
    return ((void *)0);
  return ret;
}
static struct demangle_component *
d_local_name (di)
     struct d_info *di;
{
  struct demangle_component *function;
  if ((*((di)->n++)) != 'Z')
    return ((void *)0);
  function = d_encoding (di, 0);
  if ((*((di)->n++)) != 'E')
    return ((void *)0);
  if ((*((di)->n)) == 's')
    {
      ((di)->n += (1));
      if (! d_discriminator (di))
 return ((void *)0);
      return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function,
     d_make_name (di, "string literal",
           sizeof "string literal" - 1));
    }
  else
    {
      struct demangle_component *name;
      name = d_name (di);
      if (! d_discriminator (di))
 return ((void *)0);
      return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
    }
}
static int
d_discriminator (di)
     struct d_info *di;
{
  long discrim;
  if ((*((di)->n)) != '_')
    return 1;
  ((di)->n += (1));
  discrim = d_number (di);
  if (discrim < 0)
    return 0;
  return 1;
}
static int
d_add_substitution (di, dc)
     struct d_info *di;
     struct demangle_component *dc;
{
  if (dc == ((void *)0))
    return 0;
  if (di->next_sub >= di->num_subs)
    return 0;
  di->subs[di->next_sub] = dc;
  ++di->next_sub;
  return 1;
}
static const struct d_standard_sub_info standard_subs[] =
{
  { 't', "std", (sizeof "std") - 1,
    "std", (sizeof "std") - 1,
    ((void *)0), 0 },
  { 'a', "std::allocator", (sizeof "std::allocator") - 1,
    "std::allocator", (sizeof "std::allocator") - 1,
    "allocator", (sizeof "allocator") - 1 },
  { 'b', "std::basic_string", (sizeof "std::basic_string") - 1,
    "std::basic_string", (sizeof "std::basic_string") - 1,
    "basic_string", (sizeof "basic_string") - 1 },
  { 's', "std::string", (sizeof "std::string") - 1,
    "std::basic_string<char, std::char_traits<char>, std::allocator<char> >", (sizeof "std::basic_string<char, std::char_traits<char>, std::allocator<char> >") - 1,
    "basic_string", (sizeof "basic_string") - 1 },
  { 'i', "std::istream", (sizeof "std::istream") - 1,
    "std::basic_istream<char, std::char_traits<char> >", (sizeof "std::basic_istream<char, std::char_traits<char> >") - 1,
    "basic_istream", (sizeof "basic_istream") - 1 },
  { 'o', "std::ostream", (sizeof "std::ostream") - 1,
    "std::basic_ostream<char, std::char_traits<char> >", (sizeof "std::basic_ostream<char, std::char_traits<char> >") - 1,
    "basic_ostream", (sizeof "basic_ostream") - 1 },
  { 'd', "std::iostream", (sizeof "std::iostream") - 1,
    "std::basic_iostream<char, std::char_traits<char> >", (sizeof "std::basic_iostream<char, std::char_traits<char> >") - 1,
    "basic_iostream", (sizeof "basic_iostream") - 1 }
};
static struct demangle_component *
d_substitution (di, prefix)
     struct d_info *di;
     int prefix;
{
  char c;
  if ((*((di)->n++)) != 'S')
    return ((void *)0);
  c = (*((di)->n++));
  if (c == '_' || ((c) >= '0' && (c) <= '9') || ((c) >= 'A' && (c) <= 'Z'))
    {
      int id;
      id = 0;
      if (c != '_')
 {
   do
     {
       if (((c) >= '0' && (c) <= '9'))
  id = id * 36 + c - '0';
       else if (((c) >= 'A' && (c) <= 'Z'))
  id = id * 36 + c - 'A' + 10;
       else
  return ((void *)0);
       c = (*((di)->n++));
     }
   while (c != '_');
   ++id;
 }
      if (id >= di->next_sub)
 return ((void *)0);
      ++di->did_subs;
      return di->subs[id];
    }
  else
    {
      int verbose;
      const struct d_standard_sub_info *p;
      const struct d_standard_sub_info *pend;
      verbose = (di->options & (1 << 3)) != 0;
      if (! verbose && prefix)
 {
   char peek;
   peek = (*((di)->n));
   if (peek == 'C' || peek == 'D')
     verbose = 1;
 }
      pend = (&standard_subs[0]
       + sizeof standard_subs / sizeof standard_subs[0]);
      for (p = &standard_subs[0]; p < pend; ++p)
 {
   if (c == p->code)
     {
       const char *s;
       int len;
       if (p->set_last_name != ((void *)0))
  di->last_name = d_make_sub (di, p->set_last_name,
         p->set_last_name_len);
       if (verbose)
  {
    s = p->full_expansion;
    len = p->full_len;
  }
       else
  {
    s = p->simple_expansion;
    len = p->simple_len;
  }
       di->expansion += len;
       return d_make_sub (di, s, len);
     }
 }
      return ((void *)0);
    }
}
static void
d_print_resize (dpi, add)
     struct d_print_info *dpi;
     size_t add;
{
  size_t need;
  if (dpi->buf == ((void *)0))
    return;
  need = dpi->len + add;
  while (need > dpi->alc)
    {
      size_t newalc;
      char *newbuf;
      newalc = dpi->alc * 2;
      newbuf = realloc (dpi->buf, newalc);
      if (newbuf == ((void *)0))
 {
   free (dpi->buf);
   dpi->buf = ((void *)0);
   dpi->allocation_failure = 1;
   return;
 }
      dpi->buf = newbuf;
      dpi->alc = newalc;
    }
}
static void
d_print_append_char (dpi, c)
     struct d_print_info *dpi;
     int c;
{
  if (dpi->buf != ((void *)0))
    {
      if (dpi->len >= dpi->alc)
 {
   d_print_resize (dpi, 1);
   if (dpi->buf == ((void *)0))
     return;
 }
      dpi->buf[dpi->len] = c;
      ++dpi->len;
    }
}
static void
d_print_append_buffer (dpi, s, l)
     struct d_print_info *dpi;
     const char *s;
     size_t l;
{
  if (dpi->buf != ((void *)0))
    {
      if (dpi->len + l > dpi->alc)
 {
   d_print_resize (dpi, l);
   if (dpi->buf == ((void *)0))
     return;
 }
      memcpy (dpi->buf + dpi->len, s, l);
      dpi->len += l;
    }
}
static void
d_print_error (dpi)
     struct d_print_info *dpi;
{
  free (dpi->buf);
  dpi->buf = ((void *)0);
}
char *
cplus_demangle_print (options, dc, estimate, palc)
     int options;
     const struct demangle_component *dc;
     int estimate;
     size_t *palc;
{
  struct d_print_info dpi;
  dpi.options = options;
  dpi.alc = estimate + 1;
  dpi.buf = malloc (dpi.alc);
  if (dpi.buf == ((void *)0))
    {
      *palc = 1;
      return ((void *)0);
    }
  dpi.len = 0;
  dpi.templates = ((void *)0);
  dpi.modifiers = ((void *)0);
  dpi.allocation_failure = 0;
  d_print_comp (&dpi, dc);
  do { if ((&dpi)->buf != ((void *)0) && (&dpi)->len < (&dpi)->alc) (&dpi)->buf[(&dpi)->len++] = ('\0'); else d_print_append_char ((&dpi), ('\0')); } while (0);
  if (dpi.buf != ((void *)0))
    *palc = dpi.alc;
  else
    *palc = dpi.allocation_failure;
  return dpi.buf;
}
static void
d_print_comp (dpi, dc)
     struct d_print_info *dpi;
     const struct demangle_component *dc;
{
  if (dc == ((void *)0))
    {
      d_print_error (dpi);
      return;
    }
  if (((dpi)->buf == ((void *)0)))
    return;
  switch (dc->type)
    {
    case DEMANGLE_COMPONENT_NAME:
      if ((dpi->options & (1 << 2)) == 0)
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (dc->u.s_name.len) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (dc->u.s_name.s), (dc->u.s_name.len)); (dpi)->len += dc->u.s_name.len; } else d_print_append_buffer ((dpi), (dc->u.s_name.s), (dc->u.s_name.len)); } while (0);
      else
 d_print_java_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len);
      return;
    case DEMANGLE_COMPONENT_QUAL_NAME:
    case DEMANGLE_COMPONENT_LOCAL_NAME:
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      if ((dpi->options & (1 << 2)) == 0)
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("::") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("::")), (sizeof ("::") - 1)); (dpi)->len += sizeof ("::") - 1; } else d_print_append_buffer ((dpi), (("::")), (sizeof ("::") - 1)); } while (0);
      else
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('.'); else d_print_append_char ((dpi), ('.')); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.right));
      return;
    case DEMANGLE_COMPONENT_TYPED_NAME:
      {
 struct d_print_mod *hold_modifiers;
 struct demangle_component *typed_name;
 struct d_print_mod adpm[4];
 unsigned int i;
 struct d_print_template dpt;
 hold_modifiers = dpi->modifiers;
 i = 0;
 typed_name = ((dc)->u.s_binary.left);
 while (typed_name != ((void *)0))
   {
     if (i >= sizeof adpm / sizeof adpm[0])
       {
  d_print_error (dpi);
  return;
       }
     adpm[i].next = dpi->modifiers;
     dpi->modifiers = &adpm[i];
     adpm[i].mod = typed_name;
     adpm[i].printed = 0;
     adpm[i].templates = dpi->templates;
     ++i;
     if (typed_name->type != DEMANGLE_COMPONENT_RESTRICT_THIS
  && typed_name->type != DEMANGLE_COMPONENT_VOLATILE_THIS
  && typed_name->type != DEMANGLE_COMPONENT_CONST_THIS)
       break;
     typed_name = ((typed_name)->u.s_binary.left);
   }
 if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
   {
     dpt.next = dpi->templates;
     dpi->templates = &dpt;
     dpt.template = typed_name;
   }
 if (typed_name->type == DEMANGLE_COMPONENT_LOCAL_NAME)
   {
     struct demangle_component *local_name;
     local_name = ((typed_name)->u.s_binary.right);
     while (local_name->type == DEMANGLE_COMPONENT_RESTRICT_THIS
     || local_name->type == DEMANGLE_COMPONENT_VOLATILE_THIS
     || local_name->type == DEMANGLE_COMPONENT_CONST_THIS)
       {
  if (i >= sizeof adpm / sizeof adpm[0])
    {
      d_print_error (dpi);
      return;
    }
  adpm[i] = adpm[i - 1];
  adpm[i].next = &adpm[i - 1];
  dpi->modifiers = &adpm[i];
  adpm[i - 1].mod = local_name;
  adpm[i - 1].printed = 0;
  adpm[i - 1].templates = dpi->templates;
  ++i;
  local_name = ((local_name)->u.s_binary.left);
       }
   }
 d_print_comp (dpi, ((dc)->u.s_binary.right));
 if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
   dpi->templates = dpt.next;
 while (i > 0)
   {
     --i;
     if (! adpm[i].printed)
       {
  do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (' '); else d_print_append_char ((dpi), (' ')); } while (0);
  d_print_mod (dpi, adpm[i].mod);
       }
   }
 dpi->modifiers = hold_modifiers;
 return;
      }
    case DEMANGLE_COMPONENT_TEMPLATE:
      {
 struct d_print_mod *hold_dpm;
 hold_dpm = dpi->modifiers;
 dpi->modifiers = ((void *)0);
 d_print_comp (dpi, ((dc)->u.s_binary.left));
 if (((dpi)->buf == ((void *)0) || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1]) == '<')
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (' '); else d_print_append_char ((dpi), (' ')); } while (0);
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('<'); else d_print_append_char ((dpi), ('<')); } while (0);
 d_print_comp (dpi, ((dc)->u.s_binary.right));
 if (((dpi)->buf == ((void *)0) || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1]) == '>')
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (' '); else d_print_append_char ((dpi), (' ')); } while (0);
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('>'); else d_print_append_char ((dpi), ('>')); } while (0);
 dpi->modifiers = hold_dpm;
 return;
      }
    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
      {
 long i;
 struct demangle_component *a;
 struct d_print_template *hold_dpt;
 if (dpi->templates == ((void *)0))
   {
     d_print_error (dpi);
     return;
   }
 i = dc->u.s_number.number;
 for (a = ((dpi->templates->template)->u.s_binary.right);
      a != ((void *)0);
      a = ((a)->u.s_binary.right))
   {
     if (a->type != DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
       {
  d_print_error (dpi);
  return;
       }
     if (i <= 0)
       break;
     --i;
   }
 if (i != 0 || a == ((void *)0))
   {
     d_print_error (dpi);
     return;
   }
 hold_dpt = dpi->templates;
 dpi->templates = hold_dpt->next;
 d_print_comp (dpi, ((a)->u.s_binary.left));
 dpi->templates = hold_dpt;
 return;
      }
    case DEMANGLE_COMPONENT_CTOR:
      d_print_comp (dpi, dc->u.s_ctor.name);
      return;
    case DEMANGLE_COMPONENT_DTOR:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('~'); else d_print_append_char ((dpi), ('~')); } while (0);
      d_print_comp (dpi, dc->u.s_dtor.name);
      return;
    case DEMANGLE_COMPONENT_VTABLE:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("vtable for ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("vtable for ")), (sizeof ("vtable for ") - 1)); (dpi)->len += sizeof ("vtable for ") - 1; } else d_print_append_buffer ((dpi), (("vtable for ")), (sizeof ("vtable for ") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    case DEMANGLE_COMPONENT_VTT:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("VTT for ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("VTT for ")), (sizeof ("VTT for ") - 1)); (dpi)->len += sizeof ("VTT for ") - 1; } else d_print_append_buffer ((dpi), (("VTT for ")), (sizeof ("VTT for ") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("construction vtable for ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("construction vtable for ")), (sizeof ("construction vtable for ") - 1)); (dpi)->len += sizeof ("construction vtable for ") - 1; } else d_print_append_buffer ((dpi), (("construction vtable for ")), (sizeof ("construction vtable for ") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("-in-") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("-in-")), (sizeof ("-in-") - 1)); (dpi)->len += sizeof ("-in-") - 1; } else d_print_append_buffer ((dpi), (("-in-")), (sizeof ("-in-") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.right));
      return;
    case DEMANGLE_COMPONENT_TYPEINFO:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("typeinfo for ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("typeinfo for ")), (sizeof ("typeinfo for ") - 1)); (dpi)->len += sizeof ("typeinfo for ") - 1; } else d_print_append_buffer ((dpi), (("typeinfo for ")), (sizeof ("typeinfo for ") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    case DEMANGLE_COMPONENT_TYPEINFO_NAME:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("typeinfo name for ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("typeinfo name for ")), (sizeof ("typeinfo name for ") - 1)); (dpi)->len += sizeof ("typeinfo name for ") - 1; } else d_print_append_buffer ((dpi), (("typeinfo name for ")), (sizeof ("typeinfo name for ") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    case DEMANGLE_COMPONENT_TYPEINFO_FN:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("typeinfo fn for ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("typeinfo fn for ")), (sizeof ("typeinfo fn for ") - 1)); (dpi)->len += sizeof ("typeinfo fn for ") - 1; } else d_print_append_buffer ((dpi), (("typeinfo fn for ")), (sizeof ("typeinfo fn for ") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    case DEMANGLE_COMPONENT_THUNK:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("non-virtual thunk to ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("non-virtual thunk to ")), (sizeof ("non-virtual thunk to ") - 1)); (dpi)->len += sizeof ("non-virtual thunk to ") - 1; } else d_print_append_buffer ((dpi), (("non-virtual thunk to ")), (sizeof ("non-virtual thunk to ") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("virtual thunk to ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("virtual thunk to ")), (sizeof ("virtual thunk to ") - 1)); (dpi)->len += sizeof ("virtual thunk to ") - 1; } else d_print_append_buffer ((dpi), (("virtual thunk to ")), (sizeof ("virtual thunk to ") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    case DEMANGLE_COMPONENT_COVARIANT_THUNK:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("covariant return thunk to ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("covariant return thunk to ")), (sizeof ("covariant return thunk to ") - 1)); (dpi)->len += sizeof ("covariant return thunk to ") - 1; } else d_print_append_buffer ((dpi), (("covariant return thunk to ")), (sizeof ("covariant return thunk to ") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    case DEMANGLE_COMPONENT_JAVA_CLASS:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("java Class for ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("java Class for ")), (sizeof ("java Class for ") - 1)); (dpi)->len += sizeof ("java Class for ") - 1; } else d_print_append_buffer ((dpi), (("java Class for ")), (sizeof ("java Class for ") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    case DEMANGLE_COMPONENT_GUARD:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("guard variable for ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("guard variable for ")), (sizeof ("guard variable for ") - 1)); (dpi)->len += sizeof ("guard variable for ") - 1; } else d_print_append_buffer ((dpi), (("guard variable for ")), (sizeof ("guard variable for ") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    case DEMANGLE_COMPONENT_REFTEMP:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("reference temporary for ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("reference temporary for ")), (sizeof ("reference temporary for ") - 1)); (dpi)->len += sizeof ("reference temporary for ") - 1; } else d_print_append_buffer ((dpi), (("reference temporary for ")), (sizeof ("reference temporary for ") - 1)); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    case DEMANGLE_COMPONENT_SUB_STD:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (dc->u.s_string.len) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (dc->u.s_string.string1), (dc->u.s_string.len)); (dpi)->len += dc->u.s_string.len; } else d_print_append_buffer ((dpi), (dc->u.s_string.string1), (dc->u.s_string.len)); } while (0);
      return;
    case DEMANGLE_COMPONENT_RESTRICT:
    case DEMANGLE_COMPONENT_VOLATILE:
    case DEMANGLE_COMPONENT_CONST:
      {
 struct d_print_mod *pdpm;
 for (pdpm = dpi->modifiers; pdpm != ((void *)0); pdpm = pdpm->next)
   {
     if (! pdpm->printed)
       {
  if (pdpm->mod->type != DEMANGLE_COMPONENT_RESTRICT
      && pdpm->mod->type != DEMANGLE_COMPONENT_VOLATILE
      && pdpm->mod->type != DEMANGLE_COMPONENT_CONST)
    break;
  if (pdpm->mod->type == dc->type)
    {
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    }
       }
   }
      }
    case DEMANGLE_COMPONENT_RESTRICT_THIS:
    case DEMANGLE_COMPONENT_VOLATILE_THIS:
    case DEMANGLE_COMPONENT_CONST_THIS:
    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
    case DEMANGLE_COMPONENT_POINTER:
    case DEMANGLE_COMPONENT_REFERENCE:
    case DEMANGLE_COMPONENT_COMPLEX:
    case DEMANGLE_COMPONENT_IMAGINARY:
      {
 struct d_print_mod dpm;
 dpm.next = dpi->modifiers;
 dpi->modifiers = &dpm;
 dpm.mod = dc;
 dpm.printed = 0;
 dpm.templates = dpi->templates;
 d_print_comp (dpi, ((dc)->u.s_binary.left));
 if (! dpm.printed)
   d_print_mod (dpi, dc);
 dpi->modifiers = dpm.next;
 return;
      }
    case DEMANGLE_COMPONENT_BUILTIN_TYPE:
      if ((dpi->options & (1 << 2)) == 0)
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (dc->u.s_builtin.type->len) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (dc->u.s_builtin.type->name), (dc->u.s_builtin.type->len)); (dpi)->len += dc->u.s_builtin.type->len; } else d_print_append_buffer ((dpi), (dc->u.s_builtin.type->name), (dc->u.s_builtin.type->len)); } while (0)
                              ;
      else
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (dc->u.s_builtin.type->java_len) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (dc->u.s_builtin.type->java_name), (dc->u.s_builtin.type->java_len)); (dpi)->len += dc->u.s_builtin.type->java_len; } else d_print_append_buffer ((dpi), (dc->u.s_builtin.type->java_name), (dc->u.s_builtin.type->java_len)); } while (0)
                                   ;
      return;
    case DEMANGLE_COMPONENT_VENDOR_TYPE:
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      return;
    case DEMANGLE_COMPONENT_FUNCTION_TYPE:
      {
 if (((dc)->u.s_binary.left) != ((void *)0))
   {
     struct d_print_mod dpm;
     dpm.next = dpi->modifiers;
     dpi->modifiers = &dpm;
     dpm.mod = dc;
     dpm.printed = 0;
     dpm.templates = dpi->templates;
     d_print_comp (dpi, ((dc)->u.s_binary.left));
     dpi->modifiers = dpm.next;
     if (dpm.printed)
       return;
     do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (' '); else d_print_append_char ((dpi), (' ')); } while (0);
   }
 d_print_function_type (dpi, dc, dpi->modifiers);
 return;
      }
    case DEMANGLE_COMPONENT_ARRAY_TYPE:
      {
 struct d_print_mod *hold_modifiers;
 struct d_print_mod adpm[4];
 unsigned int i;
 struct d_print_mod *pdpm;
 hold_modifiers = dpi->modifiers;
 adpm[0].next = hold_modifiers;
 dpi->modifiers = &adpm[0];
 adpm[0].mod = dc;
 adpm[0].printed = 0;
 adpm[0].templates = dpi->templates;
 i = 1;
 pdpm = hold_modifiers;
 while (pdpm != ((void *)0)
        && (pdpm->mod->type == DEMANGLE_COMPONENT_RESTRICT
     || pdpm->mod->type == DEMANGLE_COMPONENT_VOLATILE
     || pdpm->mod->type == DEMANGLE_COMPONENT_CONST))
   {
     if (! pdpm->printed)
       {
  if (i >= sizeof adpm / sizeof adpm[0])
    {
      d_print_error (dpi);
      return;
    }
  adpm[i] = *pdpm;
  adpm[i].next = dpi->modifiers;
  dpi->modifiers = &adpm[i];
  pdpm->printed = 1;
  ++i;
       }
     pdpm = pdpm->next;
   }
 d_print_comp (dpi, ((dc)->u.s_binary.right));
 dpi->modifiers = hold_modifiers;
 if (adpm[0].printed)
   return;
 while (i > 1)
   {
     --i;
     d_print_mod (dpi, adpm[i].mod);
   }
 d_print_array_type (dpi, dc, dpi->modifiers);
 return;
      }
    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
      {
 struct d_print_mod dpm;
 dpm.next = dpi->modifiers;
 dpi->modifiers = &dpm;
 dpm.mod = dc;
 dpm.printed = 0;
 dpm.templates = dpi->templates;
 d_print_comp (dpi, ((dc)->u.s_binary.right));
 if (! dpm.printed)
   {
     do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (' '); else d_print_append_char ((dpi), (' ')); } while (0);
     d_print_comp (dpi, ((dc)->u.s_binary.left));
     do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("::*") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("::*")), (sizeof ("::*") - 1)); (dpi)->len += sizeof ("::*") - 1; } else d_print_append_buffer ((dpi), (("::*")), (sizeof ("::*") - 1)); } while (0);
   }
 dpi->modifiers = dpm.next;
 return;
      }
    case DEMANGLE_COMPONENT_ARGLIST:
    case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
      d_print_comp (dpi, ((dc)->u.s_binary.left));
      if (((dc)->u.s_binary.right) != ((void *)0))
 {
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof (", ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, ((", ")), (sizeof (", ") - 1)); (dpi)->len += sizeof (", ") - 1; } else d_print_append_buffer ((dpi), ((", ")), (sizeof (", ") - 1)); } while (0);
   d_print_comp (dpi, ((dc)->u.s_binary.right));
 }
      return;
    case DEMANGLE_COMPONENT_OPERATOR:
      {
 char c;
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("operator") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("operator")), (sizeof ("operator") - 1)); (dpi)->len += sizeof ("operator") - 1; } else d_print_append_buffer ((dpi), (("operator")), (sizeof ("operator") - 1)); } while (0);
 c = dc->u.s_operator.op->name[0];
 if (((c) >= 'a' && (c) <= 'z'))
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (' '); else d_print_append_char ((dpi), (' ')); } while (0);
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (dc->u.s_operator.op->len) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (dc->u.s_operator.op->name), (dc->u.s_operator.op->len)); (dpi)->len += dc->u.s_operator.op->len; } else d_print_append_buffer ((dpi), (dc->u.s_operator.op->name), (dc->u.s_operator.op->len)); } while (0)
                             ;
 return;
      }
    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("operator ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("operator ")), (sizeof ("operator ") - 1)); (dpi)->len += sizeof ("operator ") - 1; } else d_print_append_buffer ((dpi), (("operator ")), (sizeof ("operator ") - 1)); } while (0);
      d_print_comp (dpi, dc->u.s_extended_operator.name);
      return;
    case DEMANGLE_COMPONENT_CAST:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("operator ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("operator ")), (sizeof ("operator ") - 1)); (dpi)->len += sizeof ("operator ") - 1; } else d_print_append_buffer ((dpi), (("operator ")), (sizeof ("operator ") - 1)); } while (0);
      d_print_cast (dpi, dc);
      return;
    case DEMANGLE_COMPONENT_UNARY:
      if (((dc)->u.s_binary.left)->type != DEMANGLE_COMPONENT_CAST)
 d_print_expr_op (dpi, ((dc)->u.s_binary.left));
      else
 {
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('('); else d_print_append_char ((dpi), ('(')); } while (0);
   d_print_cast (dpi, ((dc)->u.s_binary.left));
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (')'); else d_print_append_char ((dpi), (')')); } while (0);
 }
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('('); else d_print_append_char ((dpi), ('(')); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.right));
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (')'); else d_print_append_char ((dpi), (')')); } while (0);
      return;
    case DEMANGLE_COMPONENT_BINARY:
      if (((dc)->u.s_binary.right)->type != DEMANGLE_COMPONENT_BINARY_ARGS)
 {
   d_print_error (dpi);
   return;
 }
      if (((dc)->u.s_binary.left)->type == DEMANGLE_COMPONENT_OPERATOR
   && ((dc)->u.s_binary.left)->u.s_operator.op->len == 1
   && ((dc)->u.s_binary.left)->u.s_operator.op->name[0] == '>')
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('('); else d_print_append_char ((dpi), ('(')); } while (0);
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('('); else d_print_append_char ((dpi), ('(')); } while (0);
      d_print_comp (dpi, ((((dc)->u.s_binary.right))->u.s_binary.left));
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof (") ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, ((") ")), (sizeof (") ") - 1)); (dpi)->len += sizeof (") ") - 1; } else d_print_append_buffer ((dpi), ((") ")), (sizeof (") ") - 1)); } while (0);
      d_print_expr_op (dpi, ((dc)->u.s_binary.left));
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof (" (") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, ((" (")), (sizeof (" (") - 1)); (dpi)->len += sizeof (" (") - 1; } else d_print_append_buffer ((dpi), ((" (")), (sizeof (" (") - 1)); } while (0);
      d_print_comp (dpi, ((((dc)->u.s_binary.right))->u.s_binary.right));
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (')'); else d_print_append_char ((dpi), (')')); } while (0);
      if (((dc)->u.s_binary.left)->type == DEMANGLE_COMPONENT_OPERATOR
   && ((dc)->u.s_binary.left)->u.s_operator.op->len == 1
   && ((dc)->u.s_binary.left)->u.s_operator.op->name[0] == '>')
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (')'); else d_print_append_char ((dpi), (')')); } while (0);
      return;
    case DEMANGLE_COMPONENT_BINARY_ARGS:
      d_print_error (dpi);
      return;
    case DEMANGLE_COMPONENT_TRINARY:
      if (((dc)->u.s_binary.right)->type != DEMANGLE_COMPONENT_TRINARY_ARG1
   || ((((dc)->u.s_binary.right))->u.s_binary.right)->type != DEMANGLE_COMPONENT_TRINARY_ARG2)
 {
   d_print_error (dpi);
   return;
 }
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('('); else d_print_append_char ((dpi), ('(')); } while (0);
      d_print_comp (dpi, ((((dc)->u.s_binary.right))->u.s_binary.left));
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof (") ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, ((") ")), (sizeof (") ") - 1)); (dpi)->len += sizeof (") ") - 1; } else d_print_append_buffer ((dpi), ((") ")), (sizeof (") ") - 1)); } while (0);
      d_print_expr_op (dpi, ((dc)->u.s_binary.left));
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof (" (") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, ((" (")), (sizeof (" (") - 1)); (dpi)->len += sizeof (" (") - 1; } else d_print_append_buffer ((dpi), ((" (")), (sizeof (" (") - 1)); } while (0);
      d_print_comp (dpi, ((((((dc)->u.s_binary.right))->u.s_binary.right))->u.s_binary.left));
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof (") : (") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, ((") : (")), (sizeof (") : (") - 1)); (dpi)->len += sizeof (") : (") - 1; } else d_print_append_buffer ((dpi), ((") : (")), (sizeof (") : (") - 1)); } while (0);
      d_print_comp (dpi, ((((((dc)->u.s_binary.right))->u.s_binary.right))->u.s_binary.right));
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (')'); else d_print_append_char ((dpi), (')')); } while (0);
      return;
    case DEMANGLE_COMPONENT_TRINARY_ARG1:
    case DEMANGLE_COMPONENT_TRINARY_ARG2:
      d_print_error (dpi);
      return;
    case DEMANGLE_COMPONENT_LITERAL:
    case DEMANGLE_COMPONENT_LITERAL_NEG:
      {
 enum d_builtin_type_print tp;
 tp = D_PRINT_DEFAULT;
 if (((dc)->u.s_binary.left)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE)
   {
     tp = ((dc)->u.s_binary.left)->u.s_builtin.type->print;
     switch (tp)
       {
       case D_PRINT_INT:
       case D_PRINT_UNSIGNED:
       case D_PRINT_LONG:
       case D_PRINT_UNSIGNED_LONG:
       case D_PRINT_LONG_LONG:
       case D_PRINT_UNSIGNED_LONG_LONG:
  if (((dc)->u.s_binary.right)->type == DEMANGLE_COMPONENT_NAME)
    {
      if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
        do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('-'); else d_print_append_char ((dpi), ('-')); } while (0);
      d_print_comp (dpi, ((dc)->u.s_binary.right));
      switch (tp)
        {
        default:
   break;
        case D_PRINT_UNSIGNED:
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('u'); else d_print_append_char ((dpi), ('u')); } while (0);
   break;
        case D_PRINT_LONG:
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('l'); else d_print_append_char ((dpi), ('l')); } while (0);
   break;
        case D_PRINT_UNSIGNED_LONG:
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("ul") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("ul")), (sizeof ("ul") - 1)); (dpi)->len += sizeof ("ul") - 1; } else d_print_append_buffer ((dpi), (("ul")), (sizeof ("ul") - 1)); } while (0);
   break;
        case D_PRINT_LONG_LONG:
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("ll") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("ll")), (sizeof ("ll") - 1)); (dpi)->len += sizeof ("ll") - 1; } else d_print_append_buffer ((dpi), (("ll")), (sizeof ("ll") - 1)); } while (0);
   break;
        case D_PRINT_UNSIGNED_LONG_LONG:
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("ull") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("ull")), (sizeof ("ull") - 1)); (dpi)->len += sizeof ("ull") - 1; } else d_print_append_buffer ((dpi), (("ull")), (sizeof ("ull") - 1)); } while (0);
   break;
        }
      return;
    }
  break;
       case D_PRINT_BOOL:
  if (((dc)->u.s_binary.right)->type == DEMANGLE_COMPONENT_NAME
      && ((dc)->u.s_binary.right)->u.s_name.len == 1
      && dc->type == DEMANGLE_COMPONENT_LITERAL)
    {
      switch (((dc)->u.s_binary.right)->u.s_name.s[0])
        {
        case '0':
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("false") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("false")), (sizeof ("false") - 1)); (dpi)->len += sizeof ("false") - 1; } else d_print_append_buffer ((dpi), (("false")), (sizeof ("false") - 1)); } while (0);
   return;
        case '1':
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("true") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("true")), (sizeof ("true") - 1)); (dpi)->len += sizeof ("true") - 1; } else d_print_append_buffer ((dpi), (("true")), (sizeof ("true") - 1)); } while (0);
   return;
        default:
   break;
        }
    }
  break;
       default:
  break;
       }
   }
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('('); else d_print_append_char ((dpi), ('(')); } while (0);
 d_print_comp (dpi, ((dc)->u.s_binary.left));
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (')'); else d_print_append_char ((dpi), (')')); } while (0);
 if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('-'); else d_print_append_char ((dpi), ('-')); } while (0);
 if (tp == D_PRINT_FLOAT)
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('['); else d_print_append_char ((dpi), ('[')); } while (0);
 d_print_comp (dpi, ((dc)->u.s_binary.right));
 if (tp == D_PRINT_FLOAT)
   do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (']'); else d_print_append_char ((dpi), (']')); } while (0);
      }
      return;
    default:
      d_print_error (dpi);
      return;
    }
}
static void
d_print_java_identifier (dpi, name, len)
     struct d_print_info *dpi;
     const char *name;
     int len;
{
  const char *p;
  const char *end;
  end = name + len;
  for (p = name; p < end; ++p)
    {
      if (end - p > 3
   && p[0] == '_'
   && p[1] == '_'
   && p[2] == 'U')
 {
   unsigned long c;
   const char *q;
   c = 0;
   for (q = p + 3; q < end; ++q)
     {
       int dig;
       if (((*q) >= '0' && (*q) <= '9'))
  dig = *q - '0';
       else if (*q >= 'A' && *q <= 'F')
  dig = *q - 'A' + 10;
       else if (*q >= 'a' && *q <= 'f')
  dig = *q - 'a' + 10;
       else
  break;
       c = c * 16 + dig;
     }
   if (q < end && *q == '_' && c < 256)
     {
       do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (c); else d_print_append_char ((dpi), (c)); } while (0);
       p = q;
       continue;
     }
 }
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (*p); else d_print_append_char ((dpi), (*p)); } while (0);
    }
}
static void
d_print_mod_list (dpi, mods, suffix)
     struct d_print_info *dpi;
     struct d_print_mod *mods;
     int suffix;
{
  struct d_print_template *hold_dpt;
  if (mods == ((void *)0) || ((dpi)->buf == ((void *)0)))
    return;
  if (mods->printed
      || (! suffix
   && (mods->mod->type == DEMANGLE_COMPONENT_RESTRICT_THIS
       || mods->mod->type == DEMANGLE_COMPONENT_VOLATILE_THIS
       || mods->mod->type == DEMANGLE_COMPONENT_CONST_THIS)))
    {
      d_print_mod_list (dpi, mods->next, suffix);
      return;
    }
  mods->printed = 1;
  hold_dpt = dpi->templates;
  dpi->templates = mods->templates;
  if (mods->mod->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
    {
      d_print_function_type (dpi, mods->mod, mods->next);
      dpi->templates = hold_dpt;
      return;
    }
  else if (mods->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
    {
      d_print_array_type (dpi, mods->mod, mods->next);
      dpi->templates = hold_dpt;
      return;
    }
  else if (mods->mod->type == DEMANGLE_COMPONENT_LOCAL_NAME)
    {
      struct d_print_mod *hold_modifiers;
      struct demangle_component *dc;
      hold_modifiers = dpi->modifiers;
      dpi->modifiers = ((void *)0);
      d_print_comp (dpi, ((mods->mod)->u.s_binary.left));
      dpi->modifiers = hold_modifiers;
      if ((dpi->options & (1 << 2)) == 0)
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("::") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("::")), (sizeof ("::") - 1)); (dpi)->len += sizeof ("::") - 1; } else d_print_append_buffer ((dpi), (("::")), (sizeof ("::") - 1)); } while (0);
      else
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('.'); else d_print_append_char ((dpi), ('.')); } while (0);
      dc = ((mods->mod)->u.s_binary.right);
      while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
      || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
      || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
 dc = ((dc)->u.s_binary.left);
      d_print_comp (dpi, dc);
      dpi->templates = hold_dpt;
      return;
    }
  d_print_mod (dpi, mods->mod);
  dpi->templates = hold_dpt;
  d_print_mod_list (dpi, mods->next, suffix);
}
static void
d_print_mod (dpi, mod)
     struct d_print_info *dpi;
     const struct demangle_component *mod;
{
  switch (mod->type)
    {
    case DEMANGLE_COMPONENT_RESTRICT:
    case DEMANGLE_COMPONENT_RESTRICT_THIS:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof (" restrict") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, ((" restrict")), (sizeof (" restrict") - 1)); (dpi)->len += sizeof (" restrict") - 1; } else d_print_append_buffer ((dpi), ((" restrict")), (sizeof (" restrict") - 1)); } while (0);
      return;
    case DEMANGLE_COMPONENT_VOLATILE:
    case DEMANGLE_COMPONENT_VOLATILE_THIS:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof (" volatile") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, ((" volatile")), (sizeof (" volatile") - 1)); (dpi)->len += sizeof (" volatile") - 1; } else d_print_append_buffer ((dpi), ((" volatile")), (sizeof (" volatile") - 1)); } while (0);
      return;
    case DEMANGLE_COMPONENT_CONST:
    case DEMANGLE_COMPONENT_CONST_THIS:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof (" const") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, ((" const")), (sizeof (" const") - 1)); (dpi)->len += sizeof (" const") - 1; } else d_print_append_buffer ((dpi), ((" const")), (sizeof (" const") - 1)); } while (0);
      return;
    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (' '); else d_print_append_char ((dpi), (' ')); } while (0);
      d_print_comp (dpi, ((mod)->u.s_binary.right));
      return;
    case DEMANGLE_COMPONENT_POINTER:
      if ((dpi->options & (1 << 2)) == 0)
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('*'); else d_print_append_char ((dpi), ('*')); } while (0);
      return;
    case DEMANGLE_COMPONENT_REFERENCE:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('&'); else d_print_append_char ((dpi), ('&')); } while (0);
      return;
    case DEMANGLE_COMPONENT_COMPLEX:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("complex ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("complex ")), (sizeof ("complex ") - 1)); (dpi)->len += sizeof ("complex ") - 1; } else d_print_append_buffer ((dpi), (("complex ")), (sizeof ("complex ") - 1)); } while (0);
      return;
    case DEMANGLE_COMPONENT_IMAGINARY:
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("imaginary ") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("imaginary ")), (sizeof ("imaginary ") - 1)); (dpi)->len += sizeof ("imaginary ") - 1; } else d_print_append_buffer ((dpi), (("imaginary ")), (sizeof ("imaginary ") - 1)); } while (0);
      return;
    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
      if (((dpi)->buf == ((void *)0) || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1]) != '(')
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (' '); else d_print_append_char ((dpi), (' ')); } while (0);
      d_print_comp (dpi, ((mod)->u.s_binary.left));
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof ("::*") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (("::*")), (sizeof ("::*") - 1)); (dpi)->len += sizeof ("::*") - 1; } else d_print_append_buffer ((dpi), (("::*")), (sizeof ("::*") - 1)); } while (0);
      return;
    case DEMANGLE_COMPONENT_TYPED_NAME:
      d_print_comp (dpi, ((mod)->u.s_binary.left));
      return;
    default:
      d_print_comp (dpi, mod);
      return;
    }
}
static void
d_print_function_type (dpi, dc, mods)
     struct d_print_info *dpi;
     const struct demangle_component *dc;
     struct d_print_mod *mods;
{
  int need_paren;
  int saw_mod;
  int need_space;
  struct d_print_mod *p;
  struct d_print_mod *hold_modifiers;
  need_paren = 0;
  saw_mod = 0;
  need_space = 0;
  for (p = mods; p != ((void *)0); p = p->next)
    {
      if (p->printed)
 break;
      saw_mod = 1;
      switch (p->mod->type)
 {
 case DEMANGLE_COMPONENT_POINTER:
 case DEMANGLE_COMPONENT_REFERENCE:
   need_paren = 1;
   break;
 case DEMANGLE_COMPONENT_RESTRICT:
 case DEMANGLE_COMPONENT_VOLATILE:
 case DEMANGLE_COMPONENT_CONST:
 case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
 case DEMANGLE_COMPONENT_COMPLEX:
 case DEMANGLE_COMPONENT_IMAGINARY:
 case DEMANGLE_COMPONENT_PTRMEM_TYPE:
   need_space = 1;
   need_paren = 1;
   break;
 case DEMANGLE_COMPONENT_RESTRICT_THIS:
 case DEMANGLE_COMPONENT_VOLATILE_THIS:
 case DEMANGLE_COMPONENT_CONST_THIS:
   break;
 default:
   break;
 }
      if (need_paren)
 break;
    }
  if (((dc)->u.s_binary.left) != ((void *)0) && ! saw_mod)
    need_paren = 1;
  if (need_paren)
    {
      if (! need_space)
 {
   if (((dpi)->buf == ((void *)0) || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1]) != '('
       && ((dpi)->buf == ((void *)0) || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1]) != '*')
     need_space = 1;
 }
      if (need_space && ((dpi)->buf == ((void *)0) || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1]) != ' ')
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (' '); else d_print_append_char ((dpi), (' ')); } while (0);
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('('); else d_print_append_char ((dpi), ('(')); } while (0);
    }
  hold_modifiers = dpi->modifiers;
  dpi->modifiers = ((void *)0);
  d_print_mod_list (dpi, mods, 0);
  if (need_paren)
    do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (')'); else d_print_append_char ((dpi), (')')); } while (0);
  do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('('); else d_print_append_char ((dpi), ('(')); } while (0);
  if (((dc)->u.s_binary.right) != ((void *)0))
    d_print_comp (dpi, ((dc)->u.s_binary.right));
  do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (')'); else d_print_append_char ((dpi), (')')); } while (0);
  d_print_mod_list (dpi, mods, 1);
  dpi->modifiers = hold_modifiers;
}
static void
d_print_array_type (dpi, dc, mods)
     struct d_print_info *dpi;
     const struct demangle_component *dc;
     struct d_print_mod *mods;
{
  int need_space;
  need_space = 1;
  if (mods != ((void *)0))
    {
      int need_paren;
      struct d_print_mod *p;
      need_paren = 0;
      for (p = mods; p != ((void *)0); p = p->next)
 {
   if (! p->printed)
     {
       if (p->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
  {
    need_space = 0;
    break;
  }
       else
  {
    need_paren = 1;
    need_space = 1;
    break;
  }
     }
 }
      if (need_paren)
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (sizeof (" (") - 1) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, ((" (")), (sizeof (" (") - 1)); (dpi)->len += sizeof (" (") - 1; } else d_print_append_buffer ((dpi), ((" (")), (sizeof (" (") - 1)); } while (0);
      d_print_mod_list (dpi, mods, 0);
      if (need_paren)
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (')'); else d_print_append_char ((dpi), (')')); } while (0);
    }
  if (need_space)
    do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (' '); else d_print_append_char ((dpi), (' ')); } while (0);
  do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('['); else d_print_append_char ((dpi), ('[')); } while (0);
  if (((dc)->u.s_binary.left) != ((void *)0))
    d_print_comp (dpi, ((dc)->u.s_binary.left));
  do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (']'); else d_print_append_char ((dpi), (']')); } while (0);
}
static void
d_print_expr_op (dpi, dc)
     struct d_print_info *dpi;
     const struct demangle_component *dc;
{
  if (dc->type == DEMANGLE_COMPONENT_OPERATOR)
    do { if ((dpi)->buf != ((void *)0) && (dpi)->len + (dc->u.s_operator.op->len) <= (dpi)->alc) { memcpy ((dpi)->buf + (dpi)->len, (dc->u.s_operator.op->name), (dc->u.s_operator.op->len)); (dpi)->len += dc->u.s_operator.op->len; } else d_print_append_buffer ((dpi), (dc->u.s_operator.op->name), (dc->u.s_operator.op->len)); } while (0)
                                ;
  else
    d_print_comp (dpi, dc);
}
static void
d_print_cast (dpi, dc)
     struct d_print_info *dpi;
     const struct demangle_component *dc;
{
  if (((dc)->u.s_binary.left)->type != DEMANGLE_COMPONENT_TEMPLATE)
    d_print_comp (dpi, ((dc)->u.s_binary.left));
  else
    {
      struct d_print_mod *hold_dpm;
      struct d_print_template dpt;
      hold_dpm = dpi->modifiers;
      dpi->modifiers = ((void *)0);
      dpt.next = dpi->templates;
      dpi->templates = &dpt;
      dpt.template = ((dc)->u.s_binary.left);
      d_print_comp (dpi, ((((dc)->u.s_binary.left))->u.s_binary.left));
      dpi->templates = dpt.next;
      if (((dpi)->buf == ((void *)0) || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1]) == '<')
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (' '); else d_print_append_char ((dpi), (' ')); } while (0);
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('<'); else d_print_append_char ((dpi), ('<')); } while (0);
      d_print_comp (dpi, ((((dc)->u.s_binary.left))->u.s_binary.right));
      if (((dpi)->buf == ((void *)0) || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1]) == '>')
 do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = (' '); else d_print_append_char ((dpi), (' ')); } while (0);
      do { if ((dpi)->buf != ((void *)0) && (dpi)->len < (dpi)->alc) (dpi)->buf[(dpi)->len++] = ('>'); else d_print_append_char ((dpi), ('>')); } while (0);
      dpi->modifiers = hold_dpm;
    }
}
void
cplus_demangle_init_info (mangled, options, len, di)
     const char *mangled;
     int options;
     size_t len;
     struct d_info *di;
{
  di->s = mangled;
  di->send = mangled + len;
  di->options = options;
  di->n = mangled;
  di->num_comps = 2 * len;
  di->next_comp = 0;
  di->num_subs = len;
  di->next_sub = 0;
  di->did_subs = 0;
  di->last_name = ((void *)0);
  di->expansion = 0;
}
static char *
d_demangle (mangled, options, palc)
     const char* mangled;
     int options;
     size_t *palc;
{
  size_t len;
  int type;
  struct d_info di;
  struct demangle_component *dc;
  int estimate;
  char *ret;
  *palc = 0;
  len = strlen (mangled);
  if (mangled[0] == '_' && mangled[1] == 'Z')
    type = 0;
  else if (strncmp (mangled, "_GLOBAL_", 8) == 0
    && (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$')
    && (mangled[9] == 'D' || mangled[9] == 'I')
    && mangled[10] == '_')
    {
      char *r;
      r = malloc (40 + len - 11);
      if (r == ((void *)0))
 *palc = 1;
      else
 {
   if (mangled[9] == 'I')
     strcpy (r, "global constructors keyed to ");
   else
     strcpy (r, "global destructors keyed to ");
   strcat (r, mangled + 11);
 }
      return r;
    }
  else
    {
      if ((options & (1 << 4)) == 0)
 return ((void *)0);
      type = 1;
    }
  cplus_demangle_init_info (mangled, options, len, &di);
  {
    di.comps = ((struct demangle_component *)
  malloc (di.num_comps * sizeof (struct demangle_component)));
    di.subs = ((struct demangle_component **)
        malloc (di.num_subs * sizeof (struct demangle_component *)));
    if (di.comps == ((void *)0) || di.subs == ((void *)0))
      {
 if (di.comps != ((void *)0))
   free (di.comps);
 if (di.subs != ((void *)0))
   free (di.subs);
 *palc = 1;
 return ((void *)0);
      }
    if (! type)
      dc = cplus_demangle_mangled_name (&di, 1);
    else
      dc = cplus_demangle_type (&di);
    if (((options & (1 << 0)) != 0) && (*((&di)->n)) != '\0')
      dc = ((void *)0);
    estimate = len + di.expansion + 10 * di.did_subs;
    estimate += estimate / 8;
    ret = ((void *)0);
    if (dc != ((void *)0))
      ret = cplus_demangle_print (options, dc, estimate, palc);
    free (di.comps);
    free (di.subs);
  }
  return ret;
}
char *
cplus_demangle_v3 (mangled, options)
     const char* mangled;
     int options;
{
  size_t alc;
  return d_demangle (mangled, options, &alc);
}
char *
java_demangle_v3 (mangled)
     const char* mangled;
{
  size_t alc;
  char *demangled;
  int nesting;
  char *from;
  char *to;
  demangled = d_demangle (mangled, (1 << 2) | (1 << 0), &alc);
  if (demangled == ((void *)0))
    return ((void *)0);
  nesting = 0;
  from = demangled;
  to = from;
  while (*from != '\0')
    {
      if (strncmp (from, "JArray<", 7) == 0)
 {
   from += 7;
   ++nesting;
 }
      else if (nesting > 0 && *from == '>')
 {
   while (to > demangled && to[-1] == ' ')
     --to;
   *to++ = '[';
   *to++ = ']';
   --nesting;
   ++from;
 }
      else
 *to++ = *from++;
    }
  *to = '\0';
  return demangled;
}
static int
is_ctor_or_dtor (mangled, ctor_kind, dtor_kind)
     const char *mangled;
     enum gnu_v3_ctor_kinds *ctor_kind;
     enum gnu_v3_dtor_kinds *dtor_kind;
{
  struct d_info di;
  struct demangle_component *dc;
  int ret;
  *ctor_kind = (enum gnu_v3_ctor_kinds) 0;
  *dtor_kind = (enum gnu_v3_dtor_kinds) 0;
  cplus_demangle_init_info (mangled, (1 << 14), strlen (mangled), &di);
  {
    di.comps = ((struct demangle_component *)
  malloc (di.num_comps * sizeof (struct demangle_component)));
    di.subs = ((struct demangle_component **)
        malloc (di.num_subs * sizeof (struct demangle_component *)));
    if (di.comps == ((void *)0) || di.subs == ((void *)0))
      {
 if (di.comps != ((void *)0))
   free (di.comps);
 if (di.subs != ((void *)0))
   free (di.subs);
 return 0;
      }
    dc = cplus_demangle_mangled_name (&di, 1);
    ret = 0;
    while (dc != ((void *)0))
      {
 switch (dc->type)
   {
   default:
     dc = ((void *)0);
     break;
   case DEMANGLE_COMPONENT_TYPED_NAME:
   case DEMANGLE_COMPONENT_TEMPLATE:
   case DEMANGLE_COMPONENT_RESTRICT_THIS:
   case DEMANGLE_COMPONENT_VOLATILE_THIS:
   case DEMANGLE_COMPONENT_CONST_THIS:
     dc = ((dc)->u.s_binary.left);
     break;
   case DEMANGLE_COMPONENT_QUAL_NAME:
   case DEMANGLE_COMPONENT_LOCAL_NAME:
     dc = ((dc)->u.s_binary.right);
     break;
   case DEMANGLE_COMPONENT_CTOR:
     *ctor_kind = dc->u.s_ctor.kind;
     ret = 1;
     dc = ((void *)0);
     break;
   case DEMANGLE_COMPONENT_DTOR:
     *dtor_kind = dc->u.s_dtor.kind;
     ret = 1;
     dc = ((void *)0);
     break;
   }
      }
    free (di.subs);
    free (di.comps);
  }
  return ret;
}
enum gnu_v3_ctor_kinds
is_gnu_v3_mangled_ctor (name)
     const char *name;
{
  enum gnu_v3_ctor_kinds ctor_kind;
  enum gnu_v3_dtor_kinds dtor_kind;
  if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
    return (enum gnu_v3_ctor_kinds) 0;
  return ctor_kind;
}
enum gnu_v3_dtor_kinds
is_gnu_v3_mangled_dtor (name)
     const char *name;
{
  enum gnu_v3_ctor_kinds ctor_kind;
  enum gnu_v3_dtor_kinds dtor_kind;
  if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
    return (enum gnu_v3_dtor_kinds) 0;
  return dtor_kind;
}
extern char *optarg;
extern int optind;
extern int opterr;
extern int optopt;
struct option
{
  const char *name;
  int has_arg;
  int *flag;
  int val;
};
extern int getopt (int argc, char *const *argv, const char *shortopts);
extern int getopt_long (int argc, char *const *argv, const char *shortopts,
          const struct option *longopts, int *longind);
extern int getopt_long_only (int argc, char *const *argv,
        const char *shortopts,
               const struct option *longopts, int *longind);
extern int _getopt_internal (int argc, char *const *argv,
        const char *shortopts,
               const struct option *longopts, int *longind,
        int long_only);
typedef struct dyn_string
{
  int allocated;
  int length;
  char *s;
}* dyn_string_t;
extern int dyn_string_init (struct dyn_string *, int);
extern dyn_string_t dyn_string_new (int);
extern void dyn_string_delete (dyn_string_t);
extern char *dyn_string_release (dyn_string_t);
extern dyn_string_t dyn_string_resize (dyn_string_t, int);
extern void dyn_string_clear (dyn_string_t);
extern int dyn_string_copy (dyn_string_t, dyn_string_t);
extern int dyn_string_copy_cstr (dyn_string_t, const char *);
extern int dyn_string_prepend (dyn_string_t, dyn_string_t);
extern int dyn_string_prepend_cstr (dyn_string_t, const char *);
extern int dyn_string_insert (dyn_string_t, int, dyn_string_t)
                     ;
extern int dyn_string_insert_cstr (dyn_string_t, int, const char *)
                     ;
extern int dyn_string_insert_char (dyn_string_t, int, int);
extern int dyn_string_append (dyn_string_t, dyn_string_t);
extern int dyn_string_append_cstr (dyn_string_t, const char *);
extern int dyn_string_append_char (dyn_string_t, int);
extern int dyn_string_substring (dyn_string_t, dyn_string_t, int, int)
                               ;
extern int dyn_string_eq (dyn_string_t, dyn_string_t);
   typedef unsigned int md5_uint32;
struct md5_ctx
{
  md5_uint32 A;
  md5_uint32 B;
  md5_uint32 C;
  md5_uint32 D;
  md5_uint32 total[2];
  md5_uint32 buflen;
  char buffer[128];
};
extern void md5_init_ctx (struct md5_ctx *ctx);
extern void md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx)
                             ;
extern void md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx)
                             ;
extern void *md5_finish_ctx (struct md5_ctx *ctx, void *resbuf);
extern void *md5_read_ctx (const struct md5_ctx *ctx, void *resbuf);
extern int md5_stream (FILE *stream, void *resblock);
extern void *md5_buffer (const char *buffer, size_t len, void *resblock);
static const unsigned char fillbuf[64] = { 0x80, 0 };
void
md5_init_ctx (ctx)
     struct md5_ctx *ctx;
{
  ctx->A = (md5_uint32) 0x67452301;
  ctx->B = (md5_uint32) 0xefcdab89;
  ctx->C = (md5_uint32) 0x98badcfe;
  ctx->D = (md5_uint32) 0x10325476;
  ctx->total[0] = ctx->total[1] = 0;
  ctx->buflen = 0;
}
void *
md5_read_ctx (ctx, resbuf)
     const struct md5_ctx *ctx;
     void *resbuf;
{
  ((md5_uint32 *) resbuf)[0] = (ctx->A);
  ((md5_uint32 *) resbuf)[1] = (ctx->B);
  ((md5_uint32 *) resbuf)[2] = (ctx->C);
  ((md5_uint32 *) resbuf)[3] = (ctx->D);
  return resbuf;
}
void *
md5_finish_ctx (ctx, resbuf)
     struct md5_ctx *ctx;
     void *resbuf;
{
  md5_uint32 bytes = ctx->buflen;
  size_t pad;
  ctx->total[0] += bytes;
  if (ctx->total[0] < bytes)
    ++ctx->total[1];
  pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
  memcpy (&ctx->buffer[bytes], fillbuf, pad);
  *(md5_uint32 *) &ctx->buffer[bytes + pad] = (ctx->total[0] << 3);
  *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = ((ctx->total[1] << 3) | (ctx->total[0] >> 29))
                             ;
  md5_process_block (ctx->buffer, bytes + pad + 8, ctx);
  return md5_read_ctx (ctx, resbuf);
}
int
md5_stream (stream, resblock)
     FILE *stream;
     void *resblock;
{
  struct md5_ctx ctx;
  char buffer[4096 + 72];
  size_t sum;
  md5_init_ctx (&ctx);
  while (1)
    {
      size_t n;
      sum = 0;
      do
 {
   n = fread (buffer + sum, 1, 4096 - sum, stream);
   sum += n;
 }
      while (sum < 4096 && n != 0);
      if (n == 0 && ferror (stream))
        return 1;
      if (n == 0)
 break;
      md5_process_block (buffer, 4096, &ctx);
    }
  if (sum > 0)
    md5_process_bytes (buffer, sum, &ctx);
  md5_finish_ctx (&ctx, resblock);
  return 0;
}
void *
md5_buffer (buffer, len, resblock)
     const char *buffer;
     size_t len;
     void *resblock;
{
  struct md5_ctx ctx;
  md5_init_ctx (&ctx);
  md5_process_bytes (buffer, len, &ctx);
  return md5_finish_ctx (&ctx, resblock);
}
void
md5_process_bytes (buffer, len, ctx)
     const void *buffer;
     size_t len;
     struct md5_ctx *ctx;
{
  if (ctx->buflen != 0)
    {
      size_t left_over = ctx->buflen;
      size_t add = 128 - left_over > len ? len : 128 - left_over;
      memcpy (&ctx->buffer[left_over], buffer, add);
      ctx->buflen += add;
      if (left_over + add > 64)
 {
   md5_process_block (ctx->buffer, (left_over + add) & ~63, ctx);
   memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
    (left_over + add) & 63);
   ctx->buflen = (left_over + add) & 63;
 }
      buffer = (const void *) ((const char *) buffer + add);
      len -= add;
    }
  if (len > 64)
    {
      md5_process_block (buffer, len & ~63, ctx);
      buffer = (const void *) ((const char *) buffer + (len & ~63));
      len &= 63;
    }
  if (len > 0)
    {
      memcpy (ctx->buffer, buffer, len);
      ctx->buflen = len;
    }
}
void
md5_process_block (buffer, len, ctx)
     const void *buffer;
     size_t len;
     struct md5_ctx *ctx;
{
  md5_uint32 correct_words[16];
  const md5_uint32 *words = (const md5_uint32 *) buffer;
  size_t nwords = len / sizeof (md5_uint32);
  const md5_uint32 *endp = words + nwords;
  md5_uint32 A = ctx->A;
  md5_uint32 B = ctx->B;
  md5_uint32 C = ctx->C;
  md5_uint32 D = ctx->D;
  ctx->total[0] += len;
  if (ctx->total[0] < len)
    ++ctx->total[1];
  while (words < endp)
    {
      md5_uint32 *cwp = correct_words;
      md5_uint32 A_save = A;
      md5_uint32 B_save = B;
      md5_uint32 C_save = C;
      md5_uint32 D_save = D;
      do { A += (D ^ (B & (C ^ D))) + (*cwp++ = (*words)) + (md5_uint32) 0xd76aa478; ++words; (A = (A << 7) | (A >> (32 - 7))); A += B; } while (0);
      do { D += (C ^ (A & (B ^ C))) + (*cwp++ = (*words)) + (md5_uint32) 0xe8c7b756; ++words; (D = (D << 12) | (D >> (32 - 12))); D += A; } while (0);
      do { C += (B ^ (D & (A ^ B))) + (*cwp++ = (*words)) + (md5_uint32) 0x242070db; ++words; (C = (C << 17) | (C >> (32 - 17))); C += D; } while (0);
      do { B += (A ^ (C & (D ^ A))) + (*cwp++ = (*words)) + (md5_uint32) 0xc1bdceee; ++words; (B = (B << 22) | (B >> (32 - 22))); B += C; } while (0);
      do { A += (D ^ (B & (C ^ D))) + (*cwp++ = (*words)) + (md5_uint32) 0xf57c0faf; ++words; (A = (A << 7) | (A >> (32 - 7))); A += B; } while (0);
      do { D += (C ^ (A & (B ^ C))) + (*cwp++ = (*words)) + (md5_uint32) 0x4787c62a; ++words; (D = (D << 12) | (D >> (32 - 12))); D += A; } while (0);
      do { C += (B ^ (D & (A ^ B))) + (*cwp++ = (*words)) + (md5_uint32) 0xa8304613; ++words; (C = (C << 17) | (C >> (32 - 17))); C += D; } while (0);
      do { B += (A ^ (C & (D ^ A))) + (*cwp++ = (*words)) + (md5_uint32) 0xfd469501; ++words; (B = (B << 22) | (B >> (32 - 22))); B += C; } while (0);
      do { A += (D ^ (B & (C ^ D))) + (*cwp++ = (*words)) + (md5_uint32) 0x698098d8; ++words; (A = (A << 7) | (A >> (32 - 7))); A += B; } while (0);
      do { D += (C ^ (A & (B ^ C))) + (*cwp++ = (*words)) + (md5_uint32) 0x8b44f7af; ++words; (D = (D << 12) | (D >> (32 - 12))); D += A; } while (0);
      do { C += (B ^ (D & (A ^ B))) + (*cwp++ = (*words)) + (md5_uint32) 0xffff5bb1; ++words; (C = (C << 17) | (C >> (32 - 17))); C += D; } while (0);
      do { B += (A ^ (C & (D ^ A))) + (*cwp++ = (*words)) + (md5_uint32) 0x895cd7be; ++words; (B = (B << 22) | (B >> (32 - 22))); B += C; } while (0);
      do { A += (D ^ (B & (C ^ D))) + (*cwp++ = (*words)) + (md5_uint32) 0x6b901122; ++words; (A = (A << 7) | (A >> (32 - 7))); A += B; } while (0);
      do { D += (C ^ (A & (B ^ C))) + (*cwp++ = (*words)) + (md5_uint32) 0xfd987193; ++words; (D = (D << 12) | (D >> (32 - 12))); D += A; } while (0);
      do { C += (B ^ (D & (A ^ B))) + (*cwp++ = (*words)) + (md5_uint32) 0xa679438e; ++words; (C = (C << 17) | (C >> (32 - 17))); C += D; } while (0);
      do { B += (A ^ (C & (D ^ A))) + (*cwp++ = (*words)) + (md5_uint32) 0x49b40821; ++words; (B = (B << 22) | (B >> (32 - 22))); B += C; } while (0);
      do { A += (C ^ (D & (B ^ C))) + correct_words[1] + (md5_uint32) 0xf61e2562; (A = (A << 5) | (A >> (32 - 5))); A += B; } while (0);
      do { D += (B ^ (C & (A ^ B))) + correct_words[6] + (md5_uint32) 0xc040b340; (D = (D << 9) | (D >> (32 - 9))); D += A; } while (0);
      do { C += (A ^ (B & (D ^ A))) + correct_words[11] + (md5_uint32) 0x265e5a51; (C = (C << 14) | (C >> (32 - 14))); C += D; } while (0);
      do { B += (D ^ (A & (C ^ D))) + correct_words[0] + (md5_uint32) 0xe9b6c7aa; (B = (B << 20) | (B >> (32 - 20))); B += C; } while (0);
      do { A += (C ^ (D & (B ^ C))) + correct_words[5] + (md5_uint32) 0xd62f105d; (A = (A << 5) | (A >> (32 - 5))); A += B; } while (0);
      do { D += (B ^ (C & (A ^ B))) + correct_words[10] + (md5_uint32) 0x02441453; (D = (D << 9) | (D >> (32 - 9))); D += A; } while (0);
      do { C += (A ^ (B & (D ^ A))) + correct_words[15] + (md5_uint32) 0xd8a1e681; (C = (C << 14) | (C >> (32 - 14))); C += D; } while (0);
      do { B += (D ^ (A & (C ^ D))) + correct_words[4] + (md5_uint32) 0xe7d3fbc8; (B = (B << 20) | (B >> (32 - 20))); B += C; } while (0);
      do { A += (C ^ (D & (B ^ C))) + correct_words[9] + (md5_uint32) 0x21e1cde6; (A = (A << 5) | (A >> (32 - 5))); A += B; } while (0);
      do { D += (B ^ (C & (A ^ B))) + correct_words[14] + (md5_uint32) 0xc33707d6; (D = (D << 9) | (D >> (32 - 9))); D += A; } while (0);
      do { C += (A ^ (B & (D ^ A))) + correct_words[3] + (md5_uint32) 0xf4d50d87; (C = (C << 14) | (C >> (32 - 14))); C += D; } while (0);
      do { B += (D ^ (A & (C ^ D))) + correct_words[8] + (md5_uint32) 0x455a14ed; (B = (B << 20) | (B >> (32 - 20))); B += C; } while (0);
      do { A += (C ^ (D & (B ^ C))) + correct_words[13] + (md5_uint32) 0xa9e3e905; (A = (A << 5) | (A >> (32 - 5))); A += B; } while (0);
      do { D += (B ^ (C & (A ^ B))) + correct_words[2] + (md5_uint32) 0xfcefa3f8; (D = (D << 9) | (D >> (32 - 9))); D += A; } while (0);
      do { C += (A ^ (B & (D ^ A))) + correct_words[7] + (md5_uint32) 0x676f02d9; (C = (C << 14) | (C >> (32 - 14))); C += D; } while (0);
      do { B += (D ^ (A & (C ^ D))) + correct_words[12] + (md5_uint32) 0x8d2a4c8a; (B = (B << 20) | (B >> (32 - 20))); B += C; } while (0);
      do { A += (B ^ C ^ D) + correct_words[5] + (md5_uint32) 0xfffa3942; (A = (A << 4) | (A >> (32 - 4))); A += B; } while (0);
      do { D += (A ^ B ^ C) + correct_words[8] + (md5_uint32) 0x8771f681; (D = (D << 11) | (D >> (32 - 11))); D += A; } while (0);
      do { C += (D ^ A ^ B) + correct_words[11] + (md5_uint32) 0x6d9d6122; (C = (C << 16) | (C >> (32 - 16))); C += D; } while (0);
      do { B += (C ^ D ^ A) + correct_words[14] + (md5_uint32) 0xfde5380c; (B = (B << 23) | (B >> (32 - 23))); B += C; } while (0);
      do { A += (B ^ C ^ D) + correct_words[1] + (md5_uint32) 0xa4beea44; (A = (A << 4) | (A >> (32 - 4))); A += B; } while (0);
      do { D += (A ^ B ^ C) + correct_words[4] + (md5_uint32) 0x4bdecfa9; (D = (D << 11) | (D >> (32 - 11))); D += A; } while (0);
      do { C += (D ^ A ^ B) + correct_words[7] + (md5_uint32) 0xf6bb4b60; (C = (C << 16) | (C >> (32 - 16))); C += D; } while (0);
      do { B += (C ^ D ^ A) + correct_words[10] + (md5_uint32) 0xbebfbc70; (B = (B << 23) | (B >> (32 - 23))); B += C; } while (0);
      do { A += (B ^ C ^ D) + correct_words[13] + (md5_uint32) 0x289b7ec6; (A = (A << 4) | (A >> (32 - 4))); A += B; } while (0);
      do { D += (A ^ B ^ C) + correct_words[0] + (md5_uint32) 0xeaa127fa; (D = (D << 11) | (D >> (32 - 11))); D += A; } while (0);
      do { C += (D ^ A ^ B) + correct_words[3] + (md5_uint32) 0xd4ef3085; (C = (C << 16) | (C >> (32 - 16))); C += D; } while (0);
      do { B += (C ^ D ^ A) + correct_words[6] + (md5_uint32) 0x04881d05; (B = (B << 23) | (B >> (32 - 23))); B += C; } while (0);
      do { A += (B ^ C ^ D) + correct_words[9] + (md5_uint32) 0xd9d4d039; (A = (A << 4) | (A >> (32 - 4))); A += B; } while (0);
      do { D += (A ^ B ^ C) + correct_words[12] + (md5_uint32) 0xe6db99e5; (D = (D << 11) | (D >> (32 - 11))); D += A; } while (0);
      do { C += (D ^ A ^ B) + correct_words[15] + (md5_uint32) 0x1fa27cf8; (C = (C << 16) | (C >> (32 - 16))); C += D; } while (0);
      do { B += (C ^ D ^ A) + correct_words[2] + (md5_uint32) 0xc4ac5665; (B = (B << 23) | (B >> (32 - 23))); B += C; } while (0);
      do { A += (C ^ (B | ~D)) + correct_words[0] + (md5_uint32) 0xf4292244; (A = (A << 6) | (A >> (32 - 6))); A += B; } while (0);
      do { D += (B ^ (A | ~C)) + correct_words[7] + (md5_uint32) 0x432aff97; (D = (D << 10) | (D >> (32 - 10))); D += A; } while (0);
      do { C += (A ^ (D | ~B)) + correct_words[14] + (md5_uint32) 0xab9423a7; (C = (C << 15) | (C >> (32 - 15))); C += D; } while (0);
      do { B += (D ^ (C | ~A)) + correct_words[5] + (md5_uint32) 0xfc93a039; (B = (B << 21) | (B >> (32 - 21))); B += C; } while (0);
      do { A += (C ^ (B | ~D)) + correct_words[12] + (md5_uint32) 0x655b59c3; (A = (A << 6) | (A >> (32 - 6))); A += B; } while (0);
      do { D += (B ^ (A | ~C)) + correct_words[3] + (md5_uint32) 0x8f0ccc92; (D = (D << 10) | (D >> (32 - 10))); D += A; } while (0);
      do { C += (A ^ (D | ~B)) + correct_words[10] + (md5_uint32) 0xffeff47d; (C = (C << 15) | (C >> (32 - 15))); C += D; } while (0);
      do { B += (D ^ (C | ~A)) + correct_words[1] + (md5_uint32) 0x85845dd1; (B = (B << 21) | (B >> (32 - 21))); B += C; } while (0);
      do { A += (C ^ (B | ~D)) + correct_words[8] + (md5_uint32) 0x6fa87e4f; (A = (A << 6) | (A >> (32 - 6))); A += B; } while (0);
      do { D += (B ^ (A | ~C)) + correct_words[15] + (md5_uint32) 0xfe2ce6e0; (D = (D << 10) | (D >> (32 - 10))); D += A; } while (0);
      do { C += (A ^ (D | ~B)) + correct_words[6] + (md5_uint32) 0xa3014314; (C = (C << 15) | (C >> (32 - 15))); C += D; } while (0);
      do { B += (D ^ (C | ~A)) + correct_words[13] + (md5_uint32) 0x4e0811a1; (B = (B << 21) | (B >> (32 - 21))); B += C; } while (0);
      do { A += (C ^ (B | ~D)) + correct_words[4] + (md5_uint32) 0xf7537e82; (A = (A << 6) | (A >> (32 - 6))); A += B; } while (0);
      do { D += (B ^ (A | ~C)) + correct_words[11] + (md5_uint32) 0xbd3af235; (D = (D << 10) | (D >> (32 - 10))); D += A; } while (0);
      do { C += (A ^ (D | ~B)) + correct_words[2] + (md5_uint32) 0x2ad7d2bb; (C = (C << 15) | (C >> (32 - 15))); C += D; } while (0);
      do { B += (D ^ (C | ~A)) + correct_words[9] + (md5_uint32) 0xeb86d391; (B = (B << 21) | (B >> (32 - 21))); B += C; } while (0);
      A += A_save;
      B += B_save;
      C += C_save;
      D += D_save;
    }
  ctx->A = A;
  ctx->B = B;
  ctx->C = C;
  ctx->D = D;
}
const char *libiberty_optr;
char *libiberty_nptr;
unsigned long libiberty_len;
typedef union hdr
{
  char align[sizeof(double)];
  struct
    {
      union hdr *next;
      char *deep;
    } h;
} header;
static header *last_alloca_header = ((void *)0);
void *
C_alloca (size)
     size_t size;
{
  auto char probe;
  register char *depth = &(probe);
  {
    register header *hp;
    for (hp = last_alloca_header; hp != ((void *)0);)
      if ((-1 > 0 && hp->h.deep > depth)
   || (-1 < 0 && hp->h.deep < depth))
 {
   register header *np = hp->h.next;
   free ((void *) hp);
   hp = np;
 }
      else
 break;
    last_alloca_header = hp;
  }
  if (size == 0)
    return ((void *)0);
  {
    register void * new = xmalloc (sizeof (header) + size);
    if (new == 0)
      abort();
    ((header *) new)->h.next = last_alloca_header;
    ((header *) new)->h.deep = depth;
    last_alloca_header = (header *) new;
    return (void *) ((char *) new + sizeof (header));
  }
}
char **
dupargv (argv)
     char **argv;
{
  int argc;
  char **copy;
  if (argv == ((void *)0))
    return ((void *)0);
  for (argc = 0; argv[argc] != ((void *)0); argc++);
  copy = (char **) malloc ((argc + 1) * sizeof (char *));
  if (copy == ((void *)0))
    return ((void *)0);
  for (argc = 0; argv[argc] != ((void *)0); argc++)
    {
      int len = strlen (argv[argc]);
      copy[argc] = malloc (sizeof (char *) * (len + 1));
      if (copy[argc] == ((void *)0))
 {
   freeargv (copy);
   return ((void *)0);
 }
      strcpy (copy[argc], argv[argc]);
    }
  copy[argc] = ((void *)0);
  return copy;
}
void freeargv (vector)
char **vector;
{
  register char **scan;
  if (vector != ((void *)0))
    {
      for (scan = vector; *scan != ((void *)0); scan++)
 {
   free (*scan);
 }
      free (vector);
    }
}
char **buildargv (input)
     const char *input;
{
  char *arg;
  char *copybuf;
  int squote = 0;
  int dquote = 0;
  int bsquote = 0;
  int argc = 0;
  int maxargc = 0;
  char **argv = ((void *)0);
  char **nargv;
  if (input != ((void *)0))
    {
      copybuf = (char *) C_alloca(strlen (input) + 1);
      do
 {
   while (((*input) == ' ' || (*input) == '\t'))
     {
       input++;
     }
   if ((maxargc == 0) || (argc >= (maxargc - 1)))
     {
       if (argv == ((void *)0))
  {
    maxargc = 8;
    nargv = (char **) malloc (maxargc * sizeof (char *));
  }
       else
  {
    maxargc *= 2;
    nargv = (char **) realloc (argv, maxargc * sizeof (char *));
  }
       if (nargv == ((void *)0))
  {
    if (argv != ((void *)0))
      {
        freeargv (argv);
        argv = ((void *)0);
      }
    break;
  }
       argv = nargv;
       argv[argc] = ((void *)0);
     }
   arg = copybuf;
   while (*input != '\0')
     {
       if (((*input) == ' ' || (*input) == '\t') && !squote && !dquote && !bsquote)
  {
    break;
  }
       else
  {
    if (bsquote)
      {
        bsquote = 0;
        *arg++ = *input;
      }
    else if (*input == '\\')
      {
        bsquote = 1;
      }
    else if (squote)
      {
        if (*input == '\'')
   {
     squote = 0;
   }
        else
   {
     *arg++ = *input;
   }
      }
    else if (dquote)
      {
        if (*input == '"')
   {
     dquote = 0;
   }
        else
   {
     *arg++ = *input;
   }
      }
    else
      {
        if (*input == '\'')
   {
     squote = 1;
   }
        else if (*input == '"')
   {
     dquote = 1;
   }
        else
   {
     *arg++ = *input;
   }
      }
    input++;
  }
     }
   *arg = '\0';
   argv[argc] = strdup (copybuf);
   if (argv[argc] == ((void *)0))
     {
       freeargv (argv);
       argv = ((void *)0);
       break;
     }
   argc++;
   argv[argc] = ((void *)0);
   while (((*input) == ' ' || (*input) == '\t'))
     {
       input++;
     }
 }
      while (*input != '\0');
    }
  return (argv);
}
extern char *choose_tmpdir (void);
char *
choose_temp_base ()
{
  const char *base = choose_tmpdir ();
  char *temp_filename;
  int len;
  len = strlen (base);
  temp_filename = xmalloc (len + (sizeof("ccXXXXXX") - 1) + 1);
  strcpy (temp_filename, base);
  strcpy (temp_filename + len, "ccXXXXXX");
  mktemp (temp_filename);
  if (strlen (temp_filename) == 0)
    abort ();
  return temp_filename;
}
static unsigned long vconcat_length (const char *, va_list);
static unsigned long
vconcat_length (first, args)
     const char *first;
     va_list args;
{
  unsigned long length = 0;
  const char *arg;
  for (arg = first; arg ; arg = __builtin_va_arg(args,c))
    length += strlen (arg);
  return length;
}
static char *vconcat_copy (char *, const char *, va_list);
static char *
vconcat_copy (dst, first, args)
     char *dst;
     const char *first;
     va_list args;
{
  char *end = dst;
  const char *arg;
  for (arg = first; arg ; arg = __builtin_va_arg(args,c))
    {
      unsigned long length = strlen (arg);
      memcpy (end, arg, length);
      end += length;
    }
  *end = '\000';
  return dst;
}
unsigned long
concat_length (const char *first, ...)
{
  unsigned long length;
  { va_list args; __builtin_va_start(args,first); { struct Qdmy;
  struct Qdmy;
  length = vconcat_length (first, args);
  } __builtin_va_end(args); };
  return length;
}
char *
concat_copy (char *dst, const char *first, ...)
{
  char *save_dst;
  { va_list args; __builtin_va_start(args,first); { struct Qdmy;
  struct Qdmy;
  struct Qdmy;
  vconcat_copy (dst, first, args);
  save_dst = dst;
  } __builtin_va_end(args); };
  return save_dst;
}
char *libiberty_concat_ptr;
char *
concat_copy2 (const char *first, ...)
{
  { va_list args; __builtin_va_start(args,first); { struct Qdmy;
  struct Qdmy;
  vconcat_copy (libiberty_concat_ptr, first, args);
  } __builtin_va_end(args); };
  return libiberty_concat_ptr;
}
char *
concat (const char *first, ...)
{
  char *newstr;
  { va_list args; __builtin_va_start(args,first); { struct Qdmy;
  struct Qdmy;
  newstr = (char *) xmalloc (vconcat_length (first, args) + 1);
  } __builtin_va_end(args); };
  { va_list args; __builtin_va_start(args,first); { struct Qdmy;
  struct Qdmy;
  vconcat_copy (newstr, first, args);
  } __builtin_va_end(args); };
  return newstr;
}
char *
reconcat (char *optr, const char *first, ...)
{
  char *newstr;
  { va_list args; __builtin_va_start(args,first); { struct Qdmy;
  struct Qdmy;
  struct Qdmy;
  newstr = (char *) xmalloc (vconcat_length (first, args) + 1);
  } __builtin_va_end(args); };
  { va_list args; __builtin_va_start(args,first); { struct Qdmy;
  struct Qdmy;
  struct Qdmy;
  vconcat_copy (newstr, first, args);
  if (optr)
    free (optr);
  } __builtin_va_end(args); };
  return newstr;
}
int
cplus_demangle_fill_component (p, type, left, right)
     struct demangle_component *p;
     enum demangle_component_type type;
     struct demangle_component *left;
     struct demangle_component *right;
{
  if (p == ((void *)0))
    return 0;
  switch (type)
    {
    case DEMANGLE_COMPONENT_QUAL_NAME:
    case DEMANGLE_COMPONENT_LOCAL_NAME:
    case DEMANGLE_COMPONENT_TYPED_NAME:
    case DEMANGLE_COMPONENT_TEMPLATE:
    case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
    case DEMANGLE_COMPONENT_FUNCTION_TYPE:
    case DEMANGLE_COMPONENT_ARRAY_TYPE:
    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
    case DEMANGLE_COMPONENT_ARGLIST:
    case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
    case DEMANGLE_COMPONENT_UNARY:
    case DEMANGLE_COMPONENT_BINARY:
    case DEMANGLE_COMPONENT_BINARY_ARGS:
    case DEMANGLE_COMPONENT_TRINARY:
    case DEMANGLE_COMPONENT_TRINARY_ARG1:
    case DEMANGLE_COMPONENT_TRINARY_ARG2:
    case DEMANGLE_COMPONENT_LITERAL:
    case DEMANGLE_COMPONENT_LITERAL_NEG:
      break;
    case DEMANGLE_COMPONENT_VTABLE:
    case DEMANGLE_COMPONENT_VTT:
    case DEMANGLE_COMPONENT_TYPEINFO:
    case DEMANGLE_COMPONENT_TYPEINFO_NAME:
    case DEMANGLE_COMPONENT_TYPEINFO_FN:
    case DEMANGLE_COMPONENT_THUNK:
    case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
    case DEMANGLE_COMPONENT_COVARIANT_THUNK:
    case DEMANGLE_COMPONENT_JAVA_CLASS:
    case DEMANGLE_COMPONENT_GUARD:
    case DEMANGLE_COMPONENT_REFTEMP:
    case DEMANGLE_COMPONENT_RESTRICT:
    case DEMANGLE_COMPONENT_VOLATILE:
    case DEMANGLE_COMPONENT_CONST:
    case DEMANGLE_COMPONENT_RESTRICT_THIS:
    case DEMANGLE_COMPONENT_VOLATILE_THIS:
    case DEMANGLE_COMPONENT_CONST_THIS:
    case DEMANGLE_COMPONENT_POINTER:
    case DEMANGLE_COMPONENT_REFERENCE:
    case DEMANGLE_COMPONENT_COMPLEX:
    case DEMANGLE_COMPONENT_IMAGINARY:
    case DEMANGLE_COMPONENT_VENDOR_TYPE:
    case DEMANGLE_COMPONENT_CAST:
      if (right != ((void *)0))
 return 0;
      break;
    default:
      return 0;
    }
  p->type = type;
  p->u.s_binary.left = left;
  p->u.s_binary.right = right;
  return 1;
}
int
cplus_demangle_fill_builtin_type (p, typename)
     struct demangle_component *p;
     const char *typename;
{
  int len;
  unsigned int i;
  if (p == ((void *)0) || typename == ((void *)0))
    return 0;
  len = strlen (typename);
  for (i = 0; i < (26); ++i)
    {
      if (len == cplus_demangle_builtin_types[i].len
   && strcmp (typename, cplus_demangle_builtin_types[i].name) == 0)
 {
   p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE;
   p->u.s_builtin.type = &cplus_demangle_builtin_types[i];
   return 1;
 }
    }
  return 0;
}
int
cplus_demangle_fill_operator (p, opname, args)
     struct demangle_component *p;
     const char *opname;
     int args;
{
  int len;
  unsigned int i;
  if (p == ((void *)0) || opname == ((void *)0))
    return 0;
  len = strlen (opname);
  for (i = 0; cplus_demangle_operators[i].name != ((void *)0); ++i)
    {
      if (len == cplus_demangle_operators[i].len
   && args == cplus_demangle_operators[i].args
   && strcmp (opname, cplus_demangle_operators[i].name) == 0)
 {
   p->type = DEMANGLE_COMPONENT_OPERATOR;
   p->u.s_operator.op = &cplus_demangle_operators[i];
   return 1;
 }
    }
  return 0;
}
struct demangle_component *
cplus_demangle_v3_components (mangled, options, mem)
     const char *mangled;
     int options;
     void **mem;
{
  size_t len;
  int type;
  struct d_info di;
  struct demangle_component *dc;
  len = strlen (mangled);
  if (mangled[0] == '_' && mangled[1] == 'Z')
    type = 0;
  else
    {
      if ((options & (1 << 4)) == 0)
 return ((void *)0);
      type = 1;
    }
  cplus_demangle_init_info (mangled, options, len, &di);
  di.comps = ((struct demangle_component *)
       malloc (di.num_comps * sizeof (struct demangle_component)));
  di.subs = ((struct demangle_component **)
      malloc (di.num_subs * sizeof (struct demangle_component *)));
  if (di.comps == ((void *)0) || di.subs == ((void *)0))
    {
      if (di.comps != ((void *)0))
 free (di.comps);
      if (di.subs != ((void *)0))
 free (di.subs);
      return ((void *)0);
    }
  if (! type)
    dc = cplus_demangle_mangled_name (&di, 1);
  else
    dc = cplus_demangle_type (&di);
  if ((options & (1 << 0)) != 0 && (*((&di)->n)) != '\0')
    dc = ((void *)0);
  free (di.subs);
  if (dc != ((void *)0))
    *mem = di.comps;
  else
    free (di.comps);
  return dc;
}
int
dyn_string_init (ds_struct_ptr, space)
     struct dyn_string *ds_struct_ptr;
     int space;
{
  if (space == 0)
    space = 1;
  ds_struct_ptr->s = (char *) xmalloc (space);
  ds_struct_ptr->allocated = space;
  ds_struct_ptr->length = 0;
  ds_struct_ptr->s[0] = '\0';
  return 1;
}
dyn_string_t
dyn_string_new (space)
     int space;
{
  dyn_string_t result;
  result = (dyn_string_t) xmalloc (sizeof (struct dyn_string));
  dyn_string_init (result, space);
  return result;
}
void
dyn_string_delete (ds)
     dyn_string_t ds;
{
  free (ds->s);
  free (ds);
}
char*
dyn_string_release (ds)
     dyn_string_t ds;
{
  char* result = ds->s;
  ds->s = ((void *)0);
  free (ds);
  return result;
}
dyn_string_t
dyn_string_resize (ds, space)
     dyn_string_t ds;
     int space;
{
  int new_allocated = ds->allocated;
  ++space;
  while (space > new_allocated)
    new_allocated *= 2;
  if (new_allocated != ds->allocated)
    {
      ds->allocated = new_allocated;
      ds->s = (char *) xrealloc (ds->s, ds->allocated);
    }
  return ds;
}
void
dyn_string_clear (ds)
     dyn_string_t ds;
{
  ds->s[0] = '\0';
  ds->length = 0;
}
int
dyn_string_copy (dest, src)
     dyn_string_t dest;
     dyn_string_t src;
{
  if (dest == src)
    abort ();
  if (dyn_string_resize (dest, src->length) == ((void *)0))
    return 0;
  strcpy (dest->s, src->s);
  dest->length = src->length;
  return 1;
}
int
dyn_string_copy_cstr (dest, src)
     dyn_string_t dest;
     const char *src;
{
  int length = strlen (src);
  if (dyn_string_resize (dest, length) == ((void *)0))
    return 0;
  strcpy (dest->s, src);
  dest->length = length;
  return 1;
}
int
dyn_string_prepend (dest, src)
     dyn_string_t dest;
     dyn_string_t src;
{
  return dyn_string_insert (dest, 0, src);
}
int
dyn_string_prepend_cstr (dest, src)
     dyn_string_t dest;
     const char *src;
{
  return dyn_string_insert_cstr (dest, 0, src);
}
int
dyn_string_insert (dest, pos, src)
     dyn_string_t dest;
     int pos;
     dyn_string_t src;
{
  int i;
  if (src == dest)
    abort ();
  if (dyn_string_resize (dest, dest->length + src->length) == ((void *)0))
    return 0;
  for (i = dest->length; i >= pos; --i)
    dest->s[i + src->length] = dest->s[i];
  strncpy (dest->s + pos, src->s, src->length);
  dest->length += src->length;
  return 1;
}
int
dyn_string_insert_cstr (dest, pos, src)
     dyn_string_t dest;
     int pos;
     const char *src;
{
  int i;
  int length = strlen (src);
  if (dyn_string_resize (dest, dest->length + length) == ((void *)0))
    return 0;
  for (i = dest->length; i >= pos; --i)
    dest->s[i + length] = dest->s[i];
  strncpy (dest->s + pos, src, length);
  dest->length += length;
  return 1;
}
int
dyn_string_insert_char (dest, pos, c)
     dyn_string_t dest;
     int pos;
     int c;
{
  int i;
  if (dyn_string_resize (dest, dest->length + 1) == ((void *)0))
    return 0;
  for (i = dest->length; i >= pos; --i)
    dest->s[i + 1] = dest->s[i];
  dest->s[pos] = c;
  ++dest->length;
  return 1;
}
int
dyn_string_append (dest, s)
     dyn_string_t dest;
     dyn_string_t s;
{
  if (dyn_string_resize (dest, dest->length + s->length) == 0)
    return 0;
  strcpy (dest->s + dest->length, s->s);
  dest->length += s->length;
  return 1;
}
int
dyn_string_append_cstr (dest, s)
     dyn_string_t dest;
     const char *s;
{
  int len = strlen (s);
  if (dyn_string_resize (dest, dest->length + len) == ((void *)0))
    return 0;
  strcpy (dest->s + dest->length, s);
  dest->length += len;
  return 1;
}
int
dyn_string_append_char (dest, c)
     dyn_string_t dest;
     int c;
{
  if (dyn_string_resize (dest, dest->length + 1) == ((void *)0))
    return 0;
  dest->s[dest->length] = c;
  dest->s[dest->length + 1] = '\0';
  ++(dest->length);
  return 1;
}
int
dyn_string_substring (dest, src, start, end)
     dyn_string_t dest;
     dyn_string_t src;
     int start;
     int end;
{
  int i;
  int length = end - start;
  if (start > end || start > src->length || end > src->length)
    abort ();
  if (dyn_string_resize (dest, length) == ((void *)0))
    return 0;
  for (i = length; --i >= 0; )
    dest->s[i] = src->s[start + i];
  dest->s[length] = '\0';
  dest->length = length;
  return 1;
}
int
dyn_string_eq (ds1, ds2)
     dyn_string_t ds1;
     dyn_string_t ds2;
{
  if (ds1->length != ds2->length)
    return 0;
  else
    return !strcmp (ds1->s, ds2->s);
}
struct stat
  {
    __dev_t st_dev;
    __ino_t st_ino;
    __nlink_t st_nlink;
    __mode_t st_mode;
    __uid_t st_uid;
    __gid_t st_gid;
    int __pad0;
    __dev_t st_rdev;
    __off_t st_size;
    __blksize_t st_blksize;
    __blkcnt_t st_blocks;
    struct timespec st_atim;
    struct timespec st_mtim;
    struct timespec st_ctim;
    __syscall_slong_t __glibc_reserved[3];
  };
struct stat64
  {
    __dev_t st_dev;
    __ino64_t st_ino;
    __nlink_t st_nlink;
    __mode_t st_mode;
    __uid_t st_uid;
    __gid_t st_gid;
    int __pad0;
    __dev_t st_rdev;
    __off_t st_size;
    __blksize_t st_blksize;
    __blkcnt64_t st_blocks;
    struct timespec st_atim;
    struct timespec st_mtim;
    struct timespec st_ctim;
    __syscall_slong_t __glibc_reserved[3];
  };
extern int stat (const char * __file,
   struct stat * __buf) ;
extern int fstat (int __fd, struct stat *__buf) ;
extern int stat64 (const char * __file,
     struct stat64 * __buf) ;
extern int fstat64 (int __fd, struct stat64 *__buf) ;
extern int fstatat (int __fd, const char * __file,
      struct stat * __buf, int __flag)
     ;
extern int fstatat64 (int __fd, const char * __file,
        struct stat64 * __buf, int __flag)
     ;
extern int lstat (const char * __file,
    struct stat * __buf) ;
extern int lstat64 (const char * __file,
      struct stat64 * __buf)
     ;
extern int chmod (const char *__file, __mode_t __mode)
     ;
extern int lchmod (const char *__file, __mode_t __mode)
     ;
extern int fchmod (int __fd, __mode_t __mode) ;
extern int fchmodat (int __fd, const char *__file, __mode_t __mode,
       int __flag)
     ;
extern __mode_t umask (__mode_t __mask) ;
extern __mode_t getumask (void) ;
extern int mkdir (const char *__path, __mode_t __mode)
     ;
extern int mkdirat (int __fd, const char *__path, __mode_t __mode)
     ;
extern int mknod (const char *__path, __mode_t __mode, __dev_t __dev)
     ;
extern int mknodat (int __fd, const char *__path, __mode_t __mode,
      __dev_t __dev) ;
extern int mkfifo (const char *__path, __mode_t __mode)
     ;
extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
     ;
extern int utimensat (int __fd, const char *__path,
        const struct timespec __times[2],
        int __flags)
     ;
extern int futimens (int __fd, const struct timespec __times[2]) ;
extern int __fxstat (int __ver, int __fildes, struct stat *__stat_buf)
     ;
extern int __xstat (int __ver, const char *__filename,
      struct stat *__stat_buf) ;
extern int __lxstat (int __ver, const char *__filename,
       struct stat *__stat_buf) ;
extern int __fxstatat (int __ver, int __fildes, const char *__filename,
         struct stat *__stat_buf, int __flag)
     ;
extern int __fxstat64 (int __ver, int __fildes, struct stat64 *__stat_buf)
     ;
extern int __xstat64 (int __ver, const char *__filename,
        struct stat64 *__stat_buf) ;
extern int __lxstat64 (int __ver, const char *__filename,
         struct stat64 *__stat_buf) ;
extern int __fxstatat64 (int __ver, int __fildes, const char *__filename,
    struct stat64 *__stat_buf, int __flag)
     ;
extern int __xmknod (int __ver, const char *__path, __mode_t __mode,
       __dev_t *__dev) ;
extern int __xmknodat (int __ver, int __fd, const char *__path,
         __mode_t __mode, __dev_t *__dev)
     ;
int fdmatch (fd1, fd2)
 int fd1;
 int fd2;
{
  struct stat sbuf1;
  struct stat sbuf2;
  if ((fstat (fd1, &sbuf1) == 0) &&
      (fstat (fd2, &sbuf2) == 0) &&
      (sbuf1.st_dev == sbuf2.st_dev) &&
      (sbuf1.st_ino == sbuf2.st_ino))
    {
      return (1);
    }
  else
    {
      return (0);
    }
}
typedef long fibheapkey_t;
typedef struct fibheap
{
  size_t nodes;
  struct fibnode *min;
  struct fibnode *root;
} *fibheap_t;
typedef struct fibnode
{
  struct fibnode *parent;
  struct fibnode *child;
  struct fibnode *left;
  struct fibnode *right;
  fibheapkey_t key;
  void *data;
  unsigned int degree : 31;
  unsigned int mark : 1;
} *fibnode_t;
extern fibheap_t fibheap_new (void);
extern fibnode_t fibheap_insert (fibheap_t, fibheapkey_t, void *);
extern int fibheap_empty (fibheap_t);
extern fibheapkey_t fibheap_min_key (fibheap_t);
extern fibheapkey_t fibheap_replace_key (fibheap_t, fibnode_t, fibheapkey_t)
                     ;
extern void *fibheap_replace_key_data (fibheap_t, fibnode_t, fibheapkey_t, void *)
                                  ;
extern void *fibheap_extract_min (fibheap_t);
extern void *fibheap_min (fibheap_t);
extern void *fibheap_replace_data (fibheap_t, fibnode_t, void *);
extern void *fibheap_delete_node (fibheap_t, fibnode_t);
extern void fibheap_delete (fibheap_t);
extern fibheap_t fibheap_union (fibheap_t, fibheap_t);
static void fibheap_ins_root (fibheap_t, fibnode_t);
static void fibheap_rem_root (fibheap_t, fibnode_t);
static void fibheap_consolidate (fibheap_t);
static void fibheap_link (fibheap_t, fibnode_t, fibnode_t);
static void fibheap_cut (fibheap_t, fibnode_t, fibnode_t);
static void fibheap_cascading_cut (fibheap_t, fibnode_t);
static fibnode_t fibheap_extr_min_node (fibheap_t);
static int fibheap_compare (fibheap_t, fibnode_t, fibnode_t);
static int fibheap_comp_data (fibheap_t, fibheapkey_t, void *, fibnode_t)
                     ;
static fibnode_t fibnode_new (void);
static void fibnode_insert_after (fibnode_t, fibnode_t);
static fibnode_t fibnode_remove (fibnode_t);
fibheap_t
fibheap_new ()
{
  return (fibheap_t) xcalloc (1, sizeof (struct fibheap));
}
static fibnode_t
fibnode_new ()
{
  fibnode_t node;
  node = (fibnode_t) xcalloc (1, sizeof *node);
  node->left = node;
  node->right = node;
  return node;
}
static int
fibheap_compare (heap, a, b)
     fibheap_t heap ;
     fibnode_t a;
     fibnode_t b;
{
  if (a->key < b->key)
    return -1;
  if (a->key > b->key)
    return 1;
  return 0;
}
static int
fibheap_comp_data (heap, key, data, b)
     fibheap_t heap;
     fibheapkey_t key;
     void *data;
     fibnode_t b;
{
  struct fibnode a;
  a.key = key;
  a.data = data;
  return fibheap_compare (heap, &a, b);
}
fibnode_t
fibheap_insert (heap, key, data)
     fibheap_t heap;
     fibheapkey_t key;
     void *data;
{
  fibnode_t node;
  node = fibnode_new ();
  node->data = data;
  node->key = key;
  fibheap_ins_root (heap, node);
  if (heap->min == ((void *)0) || node->key < heap->min->key)
    heap->min = node;
  heap->nodes++;
  return node;
}
void *
fibheap_min (heap)
     fibheap_t heap;
{
  if (heap->min == ((void *)0))
    return ((void *)0);
  return heap->min->data;
}
fibheapkey_t
fibheap_min_key (heap)
     fibheap_t heap;
{
  if (heap->min == ((void *)0))
    return 0;
  return heap->min->key;
}
fibheap_t
fibheap_union (heapa, heapb)
     fibheap_t heapa;
     fibheap_t heapb;
{
  fibnode_t a_root, b_root, temp;
  if ((a_root = heapa->root) == ((void *)0))
    {
      free (heapa);
      return heapb;
    }
  if ((b_root = heapb->root) == ((void *)0))
    {
      free (heapb);
      return heapa;
    }
  a_root->left->right = b_root;
  b_root->left->right = a_root;
  temp = a_root->left;
  a_root->left = b_root->left;
  b_root->left = temp;
  heapa->nodes += heapb->nodes;
  if (fibheap_compare (heapa, heapb->min, heapa->min) < 0)
    heapa->min = heapb->min;
  free (heapb);
  return heapa;
}
void *
fibheap_extract_min (heap)
     fibheap_t heap;
{
  fibnode_t z;
  void *ret = ((void *)0);
  if (heap->min != ((void *)0))
    {
      z = fibheap_extr_min_node (heap);
      ret = z->data;
      free (z);
    }
  return ret;
}
void *
fibheap_replace_key_data (heap, node, key, data)
     fibheap_t heap;
     fibnode_t node;
     fibheapkey_t key;
     void *data;
{
  void *odata;
  fibheapkey_t okey;
  fibnode_t y;
  if (fibheap_comp_data (heap, key, data, node) > 0)
    return ((void *)0);
  odata = node->data;
  okey = node->key;
  node->data = data;
  node->key = key;
  y = node->parent;
  if (okey == key)
    return odata;
  if (y != ((void *)0) && fibheap_compare (heap, node, y) <= 0)
    {
      fibheap_cut (heap, node, y);
      fibheap_cascading_cut (heap, y);
    }
  if (fibheap_compare (heap, node, heap->min) <= 0)
    heap->min = node;
  return odata;
}
void *
fibheap_replace_data (heap, node, data)
     fibheap_t heap;
     fibnode_t node;
     void *data;
{
  return fibheap_replace_key_data (heap, node, node->key, data);
}
fibheapkey_t
fibheap_replace_key (heap, node, key)
     fibheap_t heap;
     fibnode_t node;
     fibheapkey_t key;
{
  int okey = node->key;
  fibheap_replace_key_data (heap, node, key, node->data);
  return okey;
}
void *
fibheap_delete_node (heap, node)
     fibheap_t heap;
     fibnode_t node;
{
  void *ret = node->data;
  fibheap_replace_key (heap, node, (-9223372036854775807L - 1L));
  fibheap_extract_min (heap);
  return ret;
}
void
fibheap_delete (heap)
     fibheap_t heap;
{
  while (heap->min != ((void *)0))
    free (fibheap_extr_min_node (heap));
  free (heap);
}
int
fibheap_empty (heap)
     fibheap_t heap;
{
  return heap->nodes == 0;
}
static fibnode_t
fibheap_extr_min_node (heap)
     fibheap_t heap;
{
  fibnode_t ret = heap->min;
  fibnode_t x, y, orig;
  for (x = ret->child, orig = ((void *)0); x != orig && x != ((void *)0); x = y)
    {
      if (orig == ((void *)0))
 orig = x;
      y = x->right;
      x->parent = ((void *)0);
      fibheap_ins_root (heap, x);
    }
  fibheap_rem_root (heap, ret);
  heap->nodes--;
  if (heap->nodes == 0)
    heap->min = ((void *)0);
  else
    {
      heap->min = ret->right;
      fibheap_consolidate (heap);
    }
  return ret;
}
static void
fibheap_ins_root (heap, node)
     fibheap_t heap;
     fibnode_t node;
{
  if (heap->root == ((void *)0))
    {
      heap->root = node;
      node->left = node;
      node->right = node;
      return;
    }
  fibnode_insert_after (heap->root, node);
}
static void
fibheap_rem_root (heap, node)
     fibheap_t heap;
     fibnode_t node;
{
  if (node->left == node)
    heap->root = ((void *)0);
  else
    heap->root = fibnode_remove (node);
}
static void
fibheap_consolidate (heap)
     fibheap_t heap;
{
  fibnode_t a[1 + 8 * sizeof (long)];
  fibnode_t w;
  fibnode_t y;
  fibnode_t x;
  int i;
  int d;
  int D;
  D = 1 + 8 * sizeof (long);
  memset (a, 0, sizeof (fibnode_t) * D);
  while ((w = heap->root) != ((void *)0))
    {
      x = w;
      fibheap_rem_root (heap, w);
      d = x->degree;
      while (a[d] != ((void *)0))
 {
   y = a[d];
   if (fibheap_compare (heap, x, y) > 0)
     {
       fibnode_t temp;
       temp = x;
       x = y;
       y = temp;
     }
   fibheap_link (heap, y, x);
   a[d] = ((void *)0);
   d++;
 }
      a[d] = x;
    }
  heap->min = ((void *)0);
  for (i = 0; i < D; i++)
    if (a[i] != ((void *)0))
      {
 fibheap_ins_root (heap, a[i]);
 if (heap->min == ((void *)0) || fibheap_compare (heap, a[i], heap->min) < 0)
   heap->min = a[i];
      }
}
static void
fibheap_link (heap, node, parent)
     fibheap_t heap ;
     fibnode_t node;
     fibnode_t parent;
{
  if (parent->child == ((void *)0))
    parent->child = node;
  else
    fibnode_insert_after (parent->child->left, node);
  node->parent = parent;
  parent->degree++;
  node->mark = 0;
}
static void
fibheap_cut (heap, node, parent)
     fibheap_t heap;
     fibnode_t node;
     fibnode_t parent;
{
  fibnode_remove (node);
  parent->degree--;
  fibheap_ins_root (heap, node);
  node->parent = ((void *)0);
  node->mark = 0;
}
static void
fibheap_cascading_cut (heap, y)
     fibheap_t heap;
     fibnode_t y;
{
  fibnode_t z;
  while ((z = y->parent) != ((void *)0))
    {
      if (y->mark == 0)
 {
   y->mark = 1;
   return;
 }
      else
 {
   fibheap_cut (heap, y, z);
   y = z;
 }
    }
}
static void
fibnode_insert_after (a, b)
     fibnode_t a;
     fibnode_t b;
{
  if (a == a->right)
    {
      a->right = b;
      a->left = b;
      b->right = a;
      b->left = a;
    }
  else
    {
      b->right = a->right;
      a->right->left = b;
      a->right = b;
      b->left = a;
    }
}
static fibnode_t
fibnode_remove (node)
     fibnode_t node;
{
  fibnode_t ret;
  if (node == node->left)
    ret = ((void *)0);
  else
    ret = node->left;
  if (node->parent != ((void *)0) && node->parent->child == node)
    node->parent->child = ret;
  node->right->left = node->left;
  node->left->right = node->right;
  node->parent = ((void *)0);
  node->left = node;
  node->right = node;
  return ret;
}
typedef union { unsigned char __c[8]; double __d; } __huge_val_t;
static __huge_val_t __huge_val = { { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f } };
typedef union { unsigned char __c[4]; float __f; } __huge_valf_t;
static __huge_valf_t __huge_valf = { { 0, 0, 0x80, 0x7f } };
static union { unsigned char __c[12]; long double __ld; } __huge_vall = { { 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0x7f, 0, 0 } };
static union { unsigned char __c[4]; float __d; } __qnan_union
  = { { 0, 0, 0xc0, 0x7f } };
typedef float float_t;
typedef double double_t;
extern double acos (double __x) ; extern double __acos (double __x) ;
extern double asin (double __x) ; extern double __asin (double __x) ;
extern double atan (double __x) ; extern double __atan (double __x) ;
extern double atan2 (double __y, double __x) ; extern double __atan2 (double __y, double __x) ;
extern double cos (double __x) ; extern double __cos (double __x) ;
extern double sin (double __x) ; extern double __sin (double __x) ;
extern double tan (double __x) ; extern double __tan (double __x) ;
extern double cosh (double __x) ; extern double __cosh (double __x) ;
extern double sinh (double __x) ; extern double __sinh (double __x) ;
extern double tanh (double __x) ; extern double __tanh (double __x) ;
extern void sincos (double __x, double *__sinx, double *__cosx) ; extern void __sincos (double __x, double *__sinx, double *__cosx)
                                                           ;
extern double acosh (double __x) ; extern double __acosh (double __x) ;
extern double asinh (double __x) ; extern double __asinh (double __x) ;
extern double atanh (double __x) ; extern double __atanh (double __x) ;
extern double exp (double __x) ; extern double __exp (double __x) ;
extern double frexp (double __x, int *__exponent) ; extern double __frexp (double __x, int *__exponent) ;
extern double ldexp (double __x, int __exponent) ; extern double __ldexp (double __x, int __exponent) ;
extern double log (double __x) ; extern double __log (double __x) ;
extern double log10 (double __x) ; extern double __log10 (double __x) ;
extern double modf (double __x, double *__iptr) ; extern double __modf (double __x, double *__iptr) ;
extern double exp10 (double __x) ; extern double __exp10 (double __x) ;
extern double pow10 (double __x) ; extern double __pow10 (double __x) ;
extern double expm1 (double __x) ; extern double __expm1 (double __x) ;
extern double log1p (double __x) ; extern double __log1p (double __x) ;
extern double logb (double __x) ; extern double __logb (double __x) ;
extern double exp2 (double __x) ; extern double __exp2 (double __x) ;
extern double log2 (double __x) ; extern double __log2 (double __x) ;
extern double pow (double __x, double __y) ; extern double __pow (double __x, double __y) ;
extern double sqrt (double __x) ; extern double __sqrt (double __x) ;
extern double hypot (double __x, double __y) ; extern double __hypot (double __x, double __y) ;
extern double cbrt (double __x) ; extern double __cbrt (double __x) ;
extern double ceil (double __x) ; extern double __ceil (double __x) ;
extern double fabs (double __x) ; extern double __fabs (double __x) ;
extern double floor (double __x) ; extern double __floor (double __x) ;
extern double fmod (double __x, double __y) ; extern double __fmod (double __x, double __y) ;
extern int __isinf (double __value) ;
extern int __finite (double __value) ;
extern int isinf (double __value) ;
extern int finite (double __value) ;
extern double drem (double __x, double __y) ; extern double __drem (double __x, double __y) ;
extern double significand (double __x) ; extern double __significand (double __x) ;
extern double copysign (double __x, double __y) ; extern double __copysign (double __x, double __y) ;
extern double nan (const char *__tagb) ; extern double __nan (const char *__tagb) ;
extern int __isnan (double __value) ;
extern int isnan (double __value) ;
extern double j0 (double) ; extern double __j0 (double) ;
extern double j1 (double) ; extern double __j1 (double) ;
extern double jn (int, double) ; extern double __jn (int, double) ;
extern double y0 (double) ; extern double __y0 (double) ;
extern double y1 (double) ; extern double __y1 (double) ;
extern double yn (int, double) ; extern double __yn (int, double) ;
extern double erf (double) ; extern double __erf (double) ;
extern double erfc (double) ; extern double __erfc (double) ;
extern double lgamma (double) ; extern double __lgamma (double) ;
extern double tgamma (double) ; extern double __tgamma (double) ;
extern double gamma (double) ; extern double __gamma (double) ;
extern double lgamma_r (double, int *__signgamp) ; extern double __lgamma_r (double, int *__signgamp) ;
extern double rint (double __x) ; extern double __rint (double __x) ;
extern double nextafter (double __x, double __y) ; extern double __nextafter (double __x, double __y) ;
extern double nexttoward (double __x, long double __y) ; extern double __nexttoward (double __x, long double __y) ;
extern double remainder (double __x, double __y) ; extern double __remainder (double __x, double __y) ;
extern double scalbn (double __x, int __n) ; extern double __scalbn (double __x, int __n) ;
extern int ilogb (double __x) ; extern int __ilogb (double __x) ;
extern double scalbln (double __x, long int __n) ; extern double __scalbln (double __x, long int __n) ;
extern double nearbyint (double __x) ; extern double __nearbyint (double __x) ;
extern double round (double __x) ; extern double __round (double __x) ;
extern double trunc (double __x) ; extern double __trunc (double __x) ;
extern double remquo (double __x, double __y, int *__quo) ; extern double __remquo (double __x, double __y, int *__quo) ;
extern long int lrint (double __x) ; extern long int __lrint (double __x) ;
extern long long int llrint (double __x) ; extern long long int __llrint (double __x) ;
extern long int lround (double __x) ; extern long int __lround (double __x) ;
extern long long int llround (double __x) ; extern long long int __llround (double __x) ;
extern double fdim (double __x, double __y) ; extern double __fdim (double __x, double __y) ;
extern double fmax (double __x, double __y) ; extern double __fmax (double __x, double __y) ;
extern double fmin (double __x, double __y) ; extern double __fmin (double __x, double __y) ;
extern int __fpclassify (double __value)
     ;
extern int __signbit (double __value)
     ;
extern double fma (double __x, double __y, double __z) ; extern double __fma (double __x, double __y, double __z) ;
extern int __issignaling (double __value)
     ;
extern double scalb (double __x, double __n) ; extern double __scalb (double __x, double __n) ;
extern float acosf (float __x) ; extern float __acosf (float __x) ;
extern float asinf (float __x) ; extern float __asinf (float __x) ;
extern float atanf (float __x) ; extern float __atanf (float __x) ;
extern float atan2f (float __y, float __x) ; extern float __atan2f (float __y, float __x) ;
extern float cosf (float __x) ; extern float __cosf (float __x) ;
extern float sinf (float __x) ; extern float __sinf (float __x) ;
extern float tanf (float __x) ; extern float __tanf (float __x) ;
extern float coshf (float __x) ; extern float __coshf (float __x) ;
extern float sinhf (float __x) ; extern float __sinhf (float __x) ;
extern float tanhf (float __x) ; extern float __tanhf (float __x) ;
extern void sincosf (float __x, float *__sinx, float *__cosx) ; extern void __sincosf (float __x, float *__sinx, float *__cosx)
                                                           ;
extern float acoshf (float __x) ; extern float __acoshf (float __x) ;
extern float asinhf (float __x) ; extern float __asinhf (float __x) ;
extern float atanhf (float __x) ; extern float __atanhf (float __x) ;
extern float expf (float __x) ; extern float __expf (float __x) ;
extern float frexpf (float __x, int *__exponent) ; extern float __frexpf (float __x, int *__exponent) ;
extern float ldexpf (float __x, int __exponent) ; extern float __ldexpf (float __x, int __exponent) ;
extern float logf (float __x) ; extern float __logf (float __x) ;
extern float log10f (float __x) ; extern float __log10f (float __x) ;
extern float modff (float __x, float *__iptr) ; extern float __modff (float __x, float *__iptr) ;
extern float exp10f (float __x) ; extern float __exp10f (float __x) ;
extern float pow10f (float __x) ; extern float __pow10f (float __x) ;
extern float expm1f (float __x) ; extern float __expm1f (float __x) ;
extern float log1pf (float __x) ; extern float __log1pf (float __x) ;
extern float logbf (float __x) ; extern float __logbf (float __x) ;
extern float exp2f (float __x) ; extern float __exp2f (float __x) ;
extern float log2f (float __x) ; extern float __log2f (float __x) ;
extern float powf (float __x, float __y) ; extern float __powf (float __x, float __y) ;
extern float sqrtf (float __x) ; extern float __sqrtf (float __x) ;
extern float hypotf (float __x, float __y) ; extern float __hypotf (float __x, float __y) ;
extern float cbrtf (float __x) ; extern float __cbrtf (float __x) ;
extern float ceilf (float __x) ; extern float __ceilf (float __x) ;
extern float fabsf (float __x) ; extern float __fabsf (float __x) ;
extern float floorf (float __x) ; extern float __floorf (float __x) ;
extern float fmodf (float __x, float __y) ; extern float __fmodf (float __x, float __y) ;
extern int __isinff (float __value) ;
extern int __finitef (float __value) ;
extern int isinff (float __value) ;
extern int finitef (float __value) ;
extern float dremf (float __x, float __y) ; extern float __dremf (float __x, float __y) ;
extern float significandf (float __x) ; extern float __significandf (float __x) ;
extern float copysignf (float __x, float __y) ; extern float __copysignf (float __x, float __y) ;
extern float nanf (const char *__tagb) ; extern float __nanf (const char *__tagb) ;
extern int __isnanf (float __value) ;
extern int isnanf (float __value) ;
extern float j0f (float) ; extern float __j0f (float) ;
extern float j1f (float) ; extern float __j1f (float) ;
extern float jnf (int, float) ; extern float __jnf (int, float) ;
extern float y0f (float) ; extern float __y0f (float) ;
extern float y1f (float) ; extern float __y1f (float) ;
extern float ynf (int, float) ; extern float __ynf (int, float) ;
extern float erff (float) ; extern float __erff (float) ;
extern float erfcf (float) ; extern float __erfcf (float) ;
extern float lgammaf (float) ; extern float __lgammaf (float) ;
extern float tgammaf (float) ; extern float __tgammaf (float) ;
extern float gammaf (float) ; extern float __gammaf (float) ;
extern float lgammaf_r (float, int *__signgamp) ; extern float __lgammaf_r (float, int *__signgamp) ;
extern float rintf (float __x) ; extern float __rintf (float __x) ;
extern float nextafterf (float __x, float __y) ; extern float __nextafterf (float __x, float __y) ;
extern float nexttowardf (float __x, long double __y) ; extern float __nexttowardf (float __x, long double __y) ;
extern float remainderf (float __x, float __y) ; extern float __remainderf (float __x, float __y) ;
extern float scalbnf (float __x, int __n) ; extern float __scalbnf (float __x, int __n) ;
extern int ilogbf (float __x) ; extern int __ilogbf (float __x) ;
extern float scalblnf (float __x, long int __n) ; extern float __scalblnf (float __x, long int __n) ;
extern float nearbyintf (float __x) ; extern float __nearbyintf (float __x) ;
extern float roundf (float __x) ; extern float __roundf (float __x) ;
extern float truncf (float __x) ; extern float __truncf (float __x) ;
extern float remquof (float __x, float __y, int *__quo) ; extern float __remquof (float __x, float __y, int *__quo) ;
extern long int lrintf (float __x) ; extern long int __lrintf (float __x) ;
extern long long int llrintf (float __x) ; extern long long int __llrintf (float __x) ;
extern long int lroundf (float __x) ; extern long int __lroundf (float __x) ;
extern long long int llroundf (float __x) ; extern long long int __llroundf (float __x) ;
extern float fdimf (float __x, float __y) ; extern float __fdimf (float __x, float __y) ;
extern float fmaxf (float __x, float __y) ; extern float __fmaxf (float __x, float __y) ;
extern float fminf (float __x, float __y) ; extern float __fminf (float __x, float __y) ;
extern int __fpclassifyf (float __value)
     ;
extern int __signbitf (float __value)
     ;
extern float fmaf (float __x, float __y, float __z) ; extern float __fmaf (float __x, float __y, float __z) ;
extern int __issignalingf (float __value)
     ;
extern float scalbf (float __x, float __n) ; extern float __scalbf (float __x, float __n) ;
extern long double acosl (long double __x) ; extern long double __acosl (long double __x) ;
extern long double asinl (long double __x) ; extern long double __asinl (long double __x) ;
extern long double atanl (long double __x) ; extern long double __atanl (long double __x) ;
extern long double atan2l (long double __y, long double __x) ; extern long double __atan2l (long double __y, long double __x) ;
extern long double cosl (long double __x) ; extern long double __cosl (long double __x) ;
extern long double sinl (long double __x) ; extern long double __sinl (long double __x) ;
extern long double tanl (long double __x) ; extern long double __tanl (long double __x) ;
extern long double coshl (long double __x) ; extern long double __coshl (long double __x) ;
extern long double sinhl (long double __x) ; extern long double __sinhl (long double __x) ;
extern long double tanhl (long double __x) ; extern long double __tanhl (long double __x) ;
extern void sincosl (long double __x, long double *__sinx, long double *__cosx) ; extern void __sincosl (long double __x, long double *__sinx, long double *__cosx)
                                                           ;
extern long double acoshl (long double __x) ; extern long double __acoshl (long double __x) ;
extern long double asinhl (long double __x) ; extern long double __asinhl (long double __x) ;
extern long double atanhl (long double __x) ; extern long double __atanhl (long double __x) ;
extern long double expl (long double __x) ; extern long double __expl (long double __x) ;
extern long double frexpl (long double __x, int *__exponent) ; extern long double __frexpl (long double __x, int *__exponent) ;
extern long double ldexpl (long double __x, int __exponent) ; extern long double __ldexpl (long double __x, int __exponent) ;
extern long double logl (long double __x) ; extern long double __logl (long double __x) ;
extern long double log10l (long double __x) ; extern long double __log10l (long double __x) ;
extern long double modfl (long double __x, long double *__iptr) ; extern long double __modfl (long double __x, long double *__iptr) ;
extern long double exp10l (long double __x) ; extern long double __exp10l (long double __x) ;
extern long double pow10l (long double __x) ; extern long double __pow10l (long double __x) ;
extern long double expm1l (long double __x) ; extern long double __expm1l (long double __x) ;
extern long double log1pl (long double __x) ; extern long double __log1pl (long double __x) ;
extern long double logbl (long double __x) ; extern long double __logbl (long double __x) ;
extern long double exp2l (long double __x) ; extern long double __exp2l (long double __x) ;
extern long double log2l (long double __x) ; extern long double __log2l (long double __x) ;
extern long double powl (long double __x, long double __y) ; extern long double __powl (long double __x, long double __y) ;
extern long double sqrtl (long double __x) ; extern long double __sqrtl (long double __x) ;
extern long double hypotl (long double __x, long double __y) ; extern long double __hypotl (long double __x, long double __y) ;
extern long double cbrtl (long double __x) ; extern long double __cbrtl (long double __x) ;
extern long double ceill (long double __x) ; extern long double __ceill (long double __x) ;
extern long double fabsl (long double __x) ; extern long double __fabsl (long double __x) ;
extern long double floorl (long double __x) ; extern long double __floorl (long double __x) ;
extern long double fmodl (long double __x, long double __y) ; extern long double __fmodl (long double __x, long double __y) ;
extern int __isinfl (long double __value) ;
extern int __finitel (long double __value) ;
extern int isinfl (long double __value) ;
extern int finitel (long double __value) ;
extern long double dreml (long double __x, long double __y) ; extern long double __dreml (long double __x, long double __y) ;
extern long double significandl (long double __x) ; extern long double __significandl (long double __x) ;
extern long double copysignl (long double __x, long double __y) ; extern long double __copysignl (long double __x, long double __y) ;
extern long double nanl (const char *__tagb) ; extern long double __nanl (const char *__tagb) ;
extern int __isnanl (long double __value) ;
extern int isnanl (long double __value) ;
extern long double j0l (long double) ; extern long double __j0l (long double) ;
extern long double j1l (long double) ; extern long double __j1l (long double) ;
extern long double jnl (int, long double) ; extern long double __jnl (int, long double) ;
extern long double y0l (long double) ; extern long double __y0l (long double) ;
extern long double y1l (long double) ; extern long double __y1l (long double) ;
extern long double ynl (int, long double) ; extern long double __ynl (int, long double) ;
extern long double erfl (long double) ; extern long double __erfl (long double) ;
extern long double erfcl (long double) ; extern long double __erfcl (long double) ;
extern long double lgammal (long double) ; extern long double __lgammal (long double) ;
extern long double tgammal (long double) ; extern long double __tgammal (long double) ;
extern long double gammal (long double) ; extern long double __gammal (long double) ;
extern long double lgammal_r (long double, int *__signgamp) ; extern long double __lgammal_r (long double, int *__signgamp) ;
extern long double rintl (long double __x) ; extern long double __rintl (long double __x) ;
extern long double nextafterl (long double __x, long double __y) ; extern long double __nextafterl (long double __x, long double __y) ;
extern long double nexttowardl (long double __x, long double __y) ; extern long double __nexttowardl (long double __x, long double __y) ;
extern long double remainderl (long double __x, long double __y) ; extern long double __remainderl (long double __x, long double __y) ;
extern long double scalbnl (long double __x, int __n) ; extern long double __scalbnl (long double __x, int __n) ;
extern int ilogbl (long double __x) ; extern int __ilogbl (long double __x) ;
extern long double scalblnl (long double __x, long int __n) ; extern long double __scalblnl (long double __x, long int __n) ;
extern long double nearbyintl (long double __x) ; extern long double __nearbyintl (long double __x) ;
extern long double roundl (long double __x) ; extern long double __roundl (long double __x) ;
extern long double truncl (long double __x) ; extern long double __truncl (long double __x) ;
extern long double remquol (long double __x, long double __y, int *__quo) ; extern long double __remquol (long double __x, long double __y, int *__quo) ;
extern long int lrintl (long double __x) ; extern long int __lrintl (long double __x) ;
extern long long int llrintl (long double __x) ; extern long long int __llrintl (long double __x) ;
extern long int lroundl (long double __x) ; extern long int __lroundl (long double __x) ;
extern long long int llroundl (long double __x) ; extern long long int __llroundl (long double __x) ;
extern long double fdiml (long double __x, long double __y) ; extern long double __fdiml (long double __x, long double __y) ;
extern long double fmaxl (long double __x, long double __y) ; extern long double __fmaxl (long double __x, long double __y) ;
extern long double fminl (long double __x, long double __y) ; extern long double __fminl (long double __x, long double __y) ;
extern int __fpclassifyl (long double __value)
     ;
extern int __signbitl (long double __value)
     ;
extern long double fmal (long double __x, long double __y, long double __z) ; extern long double __fmal (long double __x, long double __y, long double __z) ;
extern int __issignalingl (long double __value)
     ;
extern long double scalbl (long double __x, long double __n) ; extern long double __scalbl (long double __x, long double __n) ;
extern int signgam;
enum
  {
    FP_NAN =
      0,
    FP_INFINITE =
      1,
    FP_ZERO =
      2,
    FP_SUBNORMAL =
      3,
    FP_NORMAL =
      4
  };
typedef enum
{
  _IEEE_ = -1,
  _SVID_,
  _XOPEN_,
  _POSIX_,
  _ISOC_
} _LIB_VERSION_TYPE;
extern _LIB_VERSION_TYPE _LIB_VERSION;
struct exception
  {
    int type;
    char *name;
    double arg1;
    double arg2;
    double retval;
  };
extern int matherr (struct exception *__exc);
enum floatformat_byteorders {
  floatformat_little,
  floatformat_big,
  floatformat_littlebyte_bigword
};
enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no };
struct floatformat
{
  enum floatformat_byteorders byteorder;
  unsigned int totalsize;
  unsigned int sign_start;
  unsigned int exp_start;
  unsigned int exp_len;
  int exp_bias;
  unsigned int exp_nan;
  unsigned int man_start;
  unsigned int man_len;
  enum floatformat_intbit intbit;
  const char *name;
  int (*is_valid) (const struct floatformat *fmt, const char *from);
};
extern const struct floatformat floatformat_ieee_single_big;
extern const struct floatformat floatformat_ieee_single_little;
extern const struct floatformat floatformat_ieee_double_big;
extern const struct floatformat floatformat_ieee_double_little;
extern const struct floatformat floatformat_ieee_double_littlebyte_bigword;
extern const struct floatformat floatformat_i387_ext;
extern const struct floatformat floatformat_m68881_ext;
extern const struct floatformat floatformat_i960_ext;
extern const struct floatformat floatformat_m88110_ext;
extern const struct floatformat floatformat_m88110_harris_ext;
extern const struct floatformat floatformat_arm_ext_big;
extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
extern const struct floatformat floatformat_ia64_spill_big;
extern const struct floatformat floatformat_ia64_spill_little;
extern const struct floatformat floatformat_ia64_quad_big;
extern const struct floatformat floatformat_ia64_quad_little;
extern void
floatformat_to_double (const struct floatformat *, const char *, double *);
extern void
floatformat_from_double (const struct floatformat *, const double *, char *)
                             ;
extern int
floatformat_is_valid (const struct floatformat *fmt, const char *from);
static unsigned long get_field (const unsigned char *, enum floatformat_byteorders, unsigned int, unsigned int, unsigned int)
                   ;
static int floatformat_always_valid (const struct floatformat *fmt, const char *from)
                            ;
static int
floatformat_always_valid (fmt, from)
     const struct floatformat *fmt ;
     const char *from ;
{
  return 1;
}
const struct floatformat floatformat_ieee_single_big =
{
  floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23,
  floatformat_intbit_no,
  "floatformat_ieee_single_big",
  floatformat_always_valid
};
const struct floatformat floatformat_ieee_single_little =
{
  floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23,
  floatformat_intbit_no,
  "floatformat_ieee_single_little",
  floatformat_always_valid
};
const struct floatformat floatformat_ieee_double_big =
{
  floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52,
  floatformat_intbit_no,
  "floatformat_ieee_double_big",
  floatformat_always_valid
};
const struct floatformat floatformat_ieee_double_little =
{
  floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52,
  floatformat_intbit_no,
  "floatformat_ieee_double_little",
  floatformat_always_valid
};
const struct floatformat floatformat_ieee_double_littlebyte_bigword =
{
  floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52,
  floatformat_intbit_no,
  "floatformat_ieee_double_littlebyte_bigword",
  floatformat_always_valid
};
static int floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from);
static int
floatformat_i387_ext_is_valid (fmt, from)
     const struct floatformat *fmt;
     const char *from;
{
  unsigned long exponent, int_bit;
  const unsigned char *ufrom = (const unsigned char *) from;
  exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
   fmt->exp_start, fmt->exp_len);
  int_bit = get_field (ufrom, fmt->byteorder, fmt->totalsize,
         fmt->man_start, 1);
  if ((exponent == 0) != (int_bit == 0))
    return 0;
  else
    return 1;
}
const struct floatformat floatformat_i387_ext =
{
  floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
  floatformat_intbit_yes,
  "floatformat_i387_ext",
  floatformat_i387_ext_is_valid
};
const struct floatformat floatformat_m68881_ext =
{
  floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64,
  floatformat_intbit_yes,
  "floatformat_m68881_ext",
  floatformat_always_valid
};
const struct floatformat floatformat_i960_ext =
{
  floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64,
  floatformat_intbit_yes,
  "floatformat_i960_ext",
  floatformat_always_valid
};
const struct floatformat floatformat_m88110_ext =
{
  floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
  floatformat_intbit_yes,
  "floatformat_m88110_ext",
  floatformat_always_valid
};
const struct floatformat floatformat_m88110_harris_ext =
{
  floatformat_big,128, 0, 1, 11, 0x3ff, 0x7ff, 12, 52,
  floatformat_intbit_no,
  "floatformat_m88110_ext_harris",
  floatformat_always_valid
};
const struct floatformat floatformat_arm_ext_big =
{
  floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
  floatformat_intbit_yes,
  "floatformat_arm_ext_big",
  floatformat_always_valid
};
const struct floatformat floatformat_arm_ext_littlebyte_bigword =
{
  floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
  floatformat_intbit_yes,
  "floatformat_arm_ext_littlebyte_bigword",
  floatformat_always_valid
};
const struct floatformat floatformat_ia64_spill_big =
{
  floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
  floatformat_intbit_yes,
  "floatformat_ia64_spill_big",
  floatformat_always_valid
};
const struct floatformat floatformat_ia64_spill_little =
{
  floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
  floatformat_intbit_yes,
  "floatformat_ia64_spill_little",
  floatformat_always_valid
};
const struct floatformat floatformat_ia64_quad_big =
{
  floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
  floatformat_intbit_no,
  "floatformat_ia64_quad_big",
  floatformat_always_valid
};
const struct floatformat floatformat_ia64_quad_little =
{
  floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
  floatformat_intbit_no,
  "floatformat_ia64_quad_little",
  floatformat_always_valid
};
static unsigned long
get_field (data, order, total_len, start, len)
     const unsigned char *data;
     enum floatformat_byteorders order;
     unsigned int total_len;
     unsigned int start;
     unsigned int len;
{
  unsigned long result;
  unsigned int cur_byte;
  int cur_bitshift;
  cur_byte = (start + len) / 8;
  if (order == floatformat_little)
    cur_byte = (total_len / 8) - cur_byte - 1;
  cur_bitshift =
    ((start + len) % 8) - 8;
  result = *(data + cur_byte) >> (-cur_bitshift);
  cur_bitshift += 8;
  if (order == floatformat_little)
    ++cur_byte;
  else
    --cur_byte;
  while ((unsigned int) cur_bitshift < len)
    {
      if (len - cur_bitshift < 8)
 result |=
   (*(data + cur_byte) & ((1 << (len - cur_bitshift)) - 1))
     << cur_bitshift;
      else
 result |= *(data + cur_byte) << cur_bitshift;
      cur_bitshift += 8;
      if (order == floatformat_little)
 ++cur_byte;
      else
 --cur_byte;
    }
  return result;
}
void
floatformat_to_double (fmt, from, to)
     const struct floatformat *fmt;
     const char *from;
     double *to;
{
  const unsigned char *ufrom = (const unsigned char *)from;
  double dto;
  long exponent;
  unsigned long mant;
  unsigned int mant_bits, mant_off;
  int mant_bits_left;
  int special_exponent;
  exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
   fmt->exp_start, fmt->exp_len);
  if ((unsigned long) exponent == fmt->exp_nan)
    {
      int nan;
      mant_off = fmt->man_start;
      mant_bits_left = fmt->man_len;
      nan = 0;
      while (mant_bits_left > 0)
 {
   mant_bits = (((mant_bits_left) < (32)) ? (mant_bits_left) : (32));
   if (get_field (ufrom, fmt->byteorder, fmt->totalsize,
    mant_off, mant_bits) != 0)
     {
       nan = 1;
       break;
     }
   mant_off += mant_bits;
   mant_bits_left -= mant_bits;
 }
      if (nan)
 dto = (__qnan_union.__d);
      else
 dto = (__huge_valf.__f);
      if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
 dto = -dto;
      *to = dto;
      return;
    }
  mant_bits_left = fmt->man_len;
  mant_off = fmt->man_start;
  dto = 0.0;
  special_exponent = exponent == 0 || (unsigned long) exponent == fmt->exp_nan;
  if (!special_exponent)
    exponent -= fmt->exp_bias;
  if (!special_exponent)
    {
      if (fmt->intbit == floatformat_intbit_no)
 dto = ldexp (1.0, exponent);
      else
 exponent++;
    }
  while (mant_bits_left > 0)
    {
      mant_bits = (((mant_bits_left) < (32)) ? (mant_bits_left) : (32));
      mant = get_field (ufrom, fmt->byteorder, fmt->totalsize,
    mant_off, mant_bits);
      if (exponent == 0 && mant != 0)
 dto += ldexp ((double)mant,
        (- fmt->exp_bias
         - mant_bits
         - (mant_off - fmt->man_start)
         + 1));
      else
 dto += ldexp ((double)mant, exponent - mant_bits);
      if (exponent != 0)
 exponent -= mant_bits;
      mant_off += mant_bits;
      mant_bits_left -= mant_bits;
    }
  if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
    dto = -dto;
  *to = dto;
}
static void put_field (unsigned char *, enum floatformat_byteorders, unsigned int, unsigned int, unsigned int, unsigned long)
                         ;
static void
put_field (data, order, total_len, start, len, stuff_to_put)
     unsigned char *data;
     enum floatformat_byteorders order;
     unsigned int total_len;
     unsigned int start;
     unsigned int len;
     unsigned long stuff_to_put;
{
  unsigned int cur_byte;
  int cur_bitshift;
  cur_byte = (start + len) / 8;
  if (order == floatformat_little)
    cur_byte = (total_len / 8) - cur_byte - 1;
  cur_bitshift =
    ((start + len) % 8) - 8;
  *(data + cur_byte) &=
    ~(((1 << ((start + len) % 8)) - 1) << (-cur_bitshift));
  *(data + cur_byte) |=
    (stuff_to_put & ((1 << 8) - 1)) << (-cur_bitshift);
  cur_bitshift += 8;
  if (order == floatformat_little)
    ++cur_byte;
  else
    --cur_byte;
  while ((unsigned int) cur_bitshift < len)
    {
      if (len - cur_bitshift < 8)
 {
   *(data + cur_byte) &=
     ~((1 << (len - cur_bitshift)) - 1);
   *(data + cur_byte) |= (stuff_to_put >> cur_bitshift);
 }
      else
 *(data + cur_byte) = ((stuff_to_put >> cur_bitshift)
         & ((1 << 8) - 1));
      cur_bitshift += 8;
      if (order == floatformat_little)
 ++cur_byte;
      else
 --cur_byte;
    }
}
void
floatformat_from_double (fmt, from, to)
     const struct floatformat *fmt;
     const double *from;
     char *to;
{
  double dfrom;
  int exponent;
  double mant;
  unsigned int mant_bits, mant_off;
  int mant_bits_left;
  unsigned char *uto = (unsigned char *)to;
  dfrom = *from;
  memset (uto, 0, fmt->totalsize / 8);
  if (dfrom < 0)
    {
      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1, 1);
      dfrom = -dfrom;
    }
  if (dfrom == 0)
    {
      return;
    }
  if (dfrom != dfrom)
    {
      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
   fmt->exp_len, fmt->exp_nan);
      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start,
   32, 1);
      return;
    }
  if (dfrom + dfrom == dfrom)
    {
      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
   fmt->exp_len, fmt->exp_nan);
      return;
    }
  mant = frexp (dfrom, &exponent);
  if (exponent + fmt->exp_bias - 1 > 0)
    put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
        fmt->exp_len, exponent + fmt->exp_bias - 1);
  else
    {
      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
   fmt->exp_len, 0);
      mant = ldexp (mant, exponent + fmt->exp_bias - 1);
    }
  mant_bits_left = fmt->man_len;
  mant_off = fmt->man_start;
  while (mant_bits_left > 0)
    {
      unsigned long mant_long;
      mant_bits = mant_bits_left < 32 ? mant_bits_left : 32;
      mant *= 4294967296.0;
      mant_long = (unsigned long)mant;
      mant -= mant_long;
      if ((unsigned int) mant_bits_left == fmt->man_len
   && fmt->intbit == floatformat_intbit_no
   && exponent + fmt->exp_bias - 1 > 0)
 {
   mant_long &= 0x7fffffff;
   mant_bits -= 1;
 }
      else if (mant_bits < 32)
 {
   mant_long >>= 32 - mant_bits;
 }
      put_field (uto, fmt->byteorder, fmt->totalsize,
   mant_off, mant_bits, mant_long);
      mant_off += mant_bits;
      mant_bits_left -= mant_bits;
    }
}
int
floatformat_is_valid (fmt, from)
     const struct floatformat *fmt;
     const char *from;
{
  return fmt->is_valid (fmt, from);
}
extern int *__errno_location (void) ;
extern char *program_invocation_name, *program_invocation_short_name;
typedef int error_t;
extern int fnmatch (const char *__pattern, const char *__name, int __flags);
typedef __intptr_t intptr_t;
typedef __socklen_t socklen_t;
extern int access (const char *__name, int __type) ;
extern int euidaccess (const char *__name, int __type)
     ;
extern int eaccess (const char *__name, int __type)
     ;
extern int faccessat (int __fd, const char *__file, int __type, int __flag)
     ;
extern __off_t lseek (int __fd, __off_t __offset, int __whence) ;
extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence)
     ;
extern int close (int __fd);
extern ssize_t read (int __fd, void *__buf, size_t __nbytes) ;
extern ssize_t write (int __fd, const void *__buf, size_t __n) ;
extern ssize_t pread (int __fd, void *__buf, size_t __nbytes,
        __off_t __offset) ;
extern ssize_t pwrite (int __fd, const void *__buf, size_t __n,
         __off_t __offset) ;
extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
   __off64_t __offset) ;
extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n,
    __off64_t __offset) ;
extern int pipe (int __pipedes[2]) ;
extern int pipe2 (int __pipedes[2], int __flags) ;
extern unsigned int alarm (unsigned int __seconds) ;
extern unsigned int sleep (unsigned int __seconds);
extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
     ;
extern int usleep (__useconds_t __useconds);
extern int pause (void);
extern int chown (const char *__file, __uid_t __owner, __gid_t __group)
     ;
extern int fchown (int __fd, __uid_t __owner, __gid_t __group) ;
extern int lchown (const char *__file, __uid_t __owner, __gid_t __group)
     ;
extern int fchownat (int __fd, const char *__file, __uid_t __owner,
       __gid_t __group, int __flag)
     ;
extern int chdir (const char *__path) ;
extern int fchdir (int __fd) ;
extern char *getcwd (char *__buf, size_t __size) ;
extern char *get_current_dir_name (void) ;
extern char *getwd (char *__buf)
     ;
extern int dup (int __fd) ;
extern int dup2 (int __fd, int __fd2) ;
extern int dup3 (int __fd, int __fd2, int __flags) ;
extern char **__environ;
extern char **environ;
extern int execve (const char *__path, char *const __argv[],
     char *const __envp[]) ;
extern int fexecve (int __fd, char *const __argv[], char *const __envp[])
     ;
extern int execv (const char *__path, char *const __argv[])
     ;
extern int execle (const char *__path, const char *__arg, ...)
     ;
extern int execl (const char *__path, const char *__arg, ...)
     ;
extern int execvp (const char *__file, char *const __argv[])
     ;
extern int execlp (const char *__file, const char *__arg, ...)
     ;
extern int execvpe (const char *__file, char *const __argv[],
      char *const __envp[])
     ;
extern int nice (int __inc) ;
extern void _exit (int __status) ;
enum
  {
    _PC_LINK_MAX,
    _PC_MAX_CANON,
    _PC_MAX_INPUT,
    _PC_NAME_MAX,
    _PC_PATH_MAX,
    _PC_PIPE_BUF,
    _PC_CHOWN_RESTRICTED,
    _PC_NO_TRUNC,
    _PC_VDISABLE,
    _PC_SYNC_IO,
    _PC_ASYNC_IO,
    _PC_PRIO_IO,
    _PC_SOCK_MAXBUF,
    _PC_FILESIZEBITS,
    _PC_REC_INCR_XFER_SIZE,
    _PC_REC_MAX_XFER_SIZE,
    _PC_REC_MIN_XFER_SIZE,
    _PC_REC_XFER_ALIGN,
    _PC_ALLOC_SIZE_MIN,
    _PC_SYMLINK_MAX,
    _PC_2_SYMLINKS
  };
enum
  {
    _SC_ARG_MAX,
    _SC_CHILD_MAX,
    _SC_CLK_TCK,
    _SC_NGROUPS_MAX,
    _SC_OPEN_MAX,
    _SC_STREAM_MAX,
    _SC_TZNAME_MAX,
    _SC_JOB_CONTROL,
    _SC_SAVED_IDS,
    _SC_REALTIME_SIGNALS,
    _SC_PRIORITY_SCHEDULING,
    _SC_TIMERS,
    _SC_ASYNCHRONOUS_IO,
    _SC_PRIORITIZED_IO,
    _SC_SYNCHRONIZED_IO,
    _SC_FSYNC,
    _SC_MAPPED_FILES,
    _SC_MEMLOCK,
    _SC_MEMLOCK_RANGE,
    _SC_MEMORY_PROTECTION,
    _SC_MESSAGE_PASSING,
    _SC_SEMAPHORES,
    _SC_SHARED_MEMORY_OBJECTS,
    _SC_AIO_LISTIO_MAX,
    _SC_AIO_MAX,
    _SC_AIO_PRIO_DELTA_MAX,
    _SC_DELAYTIMER_MAX,
    _SC_MQ_OPEN_MAX,
    _SC_MQ_PRIO_MAX,
    _SC_VERSION,
    _SC_PAGESIZE,
    _SC_RTSIG_MAX,
    _SC_SEM_NSEMS_MAX,
    _SC_SEM_VALUE_MAX,
    _SC_SIGQUEUE_MAX,
    _SC_TIMER_MAX,
    _SC_BC_BASE_MAX,
    _SC_BC_DIM_MAX,
    _SC_BC_SCALE_MAX,
    _SC_BC_STRING_MAX,
    _SC_COLL_WEIGHTS_MAX,
    _SC_EQUIV_CLASS_MAX,
    _SC_EXPR_NEST_MAX,
    _SC_LINE_MAX,
    _SC_RE_DUP_MAX,
    _SC_CHARCLASS_NAME_MAX,
    _SC_2_VERSION,
    _SC_2_C_BIND,
    _SC_2_C_DEV,
    _SC_2_FORT_DEV,
    _SC_2_FORT_RUN,
    _SC_2_SW_DEV,
    _SC_2_LOCALEDEF,
    _SC_PII,
    _SC_PII_XTI,
    _SC_PII_SOCKET,
    _SC_PII_INTERNET,
    _SC_PII_OSI,
    _SC_POLL,
    _SC_SELECT,
    _SC_UIO_MAXIOV,
    _SC_IOV_MAX = _SC_UIO_MAXIOV,
    _SC_PII_INTERNET_STREAM,
    _SC_PII_INTERNET_DGRAM,
    _SC_PII_OSI_COTS,
    _SC_PII_OSI_CLTS,
    _SC_PII_OSI_M,
    _SC_T_IOV_MAX,
    _SC_THREADS,
    _SC_THREAD_SAFE_FUNCTIONS,
    _SC_GETGR_R_SIZE_MAX,
    _SC_GETPW_R_SIZE_MAX,
    _SC_LOGIN_NAME_MAX,
    _SC_TTY_NAME_MAX,
    _SC_THREAD_DESTRUCTOR_ITERATIONS,
    _SC_THREAD_KEYS_MAX,
    _SC_THREAD_STACK_MIN,
    _SC_THREAD_THREADS_MAX,
    _SC_THREAD_ATTR_STACKADDR,
    _SC_THREAD_ATTR_STACKSIZE,
    _SC_THREAD_PRIORITY_SCHEDULING,
    _SC_THREAD_PRIO_INHERIT,
    _SC_THREAD_PRIO_PROTECT,
    _SC_THREAD_PROCESS_SHARED,
    _SC_NPROCESSORS_CONF,
    _SC_NPROCESSORS_ONLN,
    _SC_PHYS_PAGES,
    _SC_AVPHYS_PAGES,
    _SC_ATEXIT_MAX,
    _SC_PASS_MAX,
    _SC_XOPEN_VERSION,
    _SC_XOPEN_XCU_VERSION,
    _SC_XOPEN_UNIX,
    _SC_XOPEN_CRYPT,
    _SC_XOPEN_ENH_I18N,
    _SC_XOPEN_SHM,
    _SC_2_CHAR_TERM,
    _SC_2_C_VERSION,
    _SC_2_UPE,
    _SC_XOPEN_XPG2,
    _SC_XOPEN_XPG3,
    _SC_XOPEN_XPG4,
    _SC_CHAR_BIT,
    _SC_CHAR_MAX,
    _SC_CHAR_MIN,
    _SC_INT_MAX,
    _SC_INT_MIN,
    _SC_LONG_BIT,
    _SC_WORD_BIT,
    _SC_MB_LEN_MAX,
    _SC_NZERO,
    _SC_SSIZE_MAX,
    _SC_SCHAR_MAX,
    _SC_SCHAR_MIN,
    _SC_SHRT_MAX,
    _SC_SHRT_MIN,
    _SC_UCHAR_MAX,
    _SC_UINT_MAX,
    _SC_ULONG_MAX,
    _SC_USHRT_MAX,
    _SC_NL_ARGMAX,
    _SC_NL_LANGMAX,
    _SC_NL_MSGMAX,
    _SC_NL_NMAX,
    _SC_NL_SETMAX,
    _SC_NL_TEXTMAX,
    _SC_XBS5_ILP32_OFF32,
    _SC_XBS5_ILP32_OFFBIG,
    _SC_XBS5_LP64_OFF64,
    _SC_XBS5_LPBIG_OFFBIG,
    _SC_XOPEN_LEGACY,
    _SC_XOPEN_REALTIME,
    _SC_XOPEN_REALTIME_THREADS,
    _SC_ADVISORY_INFO,
    _SC_BARRIERS,
    _SC_BASE,
    _SC_C_LANG_SUPPORT,
    _SC_C_LANG_SUPPORT_R,
    _SC_CLOCK_SELECTION,
    _SC_CPUTIME,
    _SC_THREAD_CPUTIME,
    _SC_DEVICE_IO,
    _SC_DEVICE_SPECIFIC,
    _SC_DEVICE_SPECIFIC_R,
    _SC_FD_MGMT,
    _SC_FIFO,
    _SC_PIPE,
    _SC_FILE_ATTRIBUTES,
    _SC_FILE_LOCKING,
    _SC_FILE_SYSTEM,
    _SC_MONOTONIC_CLOCK,
    _SC_MULTI_PROCESS,
    _SC_SINGLE_PROCESS,
    _SC_NETWORKING,
    _SC_READER_WRITER_LOCKS,
    _SC_SPIN_LOCKS,
    _SC_REGEXP,
    _SC_REGEX_VERSION,
    _SC_SHELL,
    _SC_SIGNALS,
    _SC_SPAWN,
    _SC_SPORADIC_SERVER,
    _SC_THREAD_SPORADIC_SERVER,
    _SC_SYSTEM_DATABASE,
    _SC_SYSTEM_DATABASE_R,
    _SC_TIMEOUTS,
    _SC_TYPED_MEMORY_OBJECTS,
    _SC_USER_GROUPS,
    _SC_USER_GROUPS_R,
    _SC_2_PBS,
    _SC_2_PBS_ACCOUNTING,
    _SC_2_PBS_LOCATE,
    _SC_2_PBS_MESSAGE,
    _SC_2_PBS_TRACK,
    _SC_SYMLOOP_MAX,
    _SC_STREAMS,
    _SC_2_PBS_CHECKPOINT,
    _SC_V6_ILP32_OFF32,
    _SC_V6_ILP32_OFFBIG,
    _SC_V6_LP64_OFF64,
    _SC_V6_LPBIG_OFFBIG,
    _SC_HOST_NAME_MAX,
    _SC_TRACE,
    _SC_TRACE_EVENT_FILTER,
    _SC_TRACE_INHERIT,
    _SC_TRACE_LOG,
    _SC_LEVEL1_ICACHE_SIZE,
    _SC_LEVEL1_ICACHE_ASSOC,
    _SC_LEVEL1_ICACHE_LINESIZE,
    _SC_LEVEL1_DCACHE_SIZE,
    _SC_LEVEL1_DCACHE_ASSOC,
    _SC_LEVEL1_DCACHE_LINESIZE,
    _SC_LEVEL2_CACHE_SIZE,
    _SC_LEVEL2_CACHE_ASSOC,
    _SC_LEVEL2_CACHE_LINESIZE,
    _SC_LEVEL3_CACHE_SIZE,
    _SC_LEVEL3_CACHE_ASSOC,
    _SC_LEVEL3_CACHE_LINESIZE,
    _SC_LEVEL4_CACHE_SIZE,
    _SC_LEVEL4_CACHE_ASSOC,
    _SC_LEVEL4_CACHE_LINESIZE,
    _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,
    _SC_RAW_SOCKETS,
    _SC_V7_ILP32_OFF32,
    _SC_V7_ILP32_OFFBIG,
    _SC_V7_LP64_OFF64,
    _SC_V7_LPBIG_OFFBIG,
    _SC_SS_REPL_MAX,
    _SC_TRACE_EVENT_NAME_MAX,
    _SC_TRACE_NAME_MAX,
    _SC_TRACE_SYS_MAX,
    _SC_TRACE_USER_EVENT_MAX,
    _SC_XOPEN_STREAMS,
    _SC_THREAD_ROBUST_PRIO_INHERIT,
    _SC_THREAD_ROBUST_PRIO_PROTECT
  };
enum
  {
    _CS_PATH,
    _CS_V6_WIDTH_RESTRICTED_ENVS,
    _CS_GNU_LIBC_VERSION,
    _CS_GNU_LIBPTHREAD_VERSION,
    _CS_V5_WIDTH_RESTRICTED_ENVS,
    _CS_V7_WIDTH_RESTRICTED_ENVS,
    _CS_LFS_CFLAGS = 1000,
    _CS_LFS_LDFLAGS,
    _CS_LFS_LIBS,
    _CS_LFS_LINTFLAGS,
    _CS_LFS64_CFLAGS,
    _CS_LFS64_LDFLAGS,
    _CS_LFS64_LIBS,
    _CS_LFS64_LINTFLAGS,
    _CS_XBS5_ILP32_OFF32_CFLAGS = 1100,
    _CS_XBS5_ILP32_OFF32_LDFLAGS,
    _CS_XBS5_ILP32_OFF32_LIBS,
    _CS_XBS5_ILP32_OFF32_LINTFLAGS,
    _CS_XBS5_ILP32_OFFBIG_CFLAGS,
    _CS_XBS5_ILP32_OFFBIG_LDFLAGS,
    _CS_XBS5_ILP32_OFFBIG_LIBS,
    _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
    _CS_XBS5_LP64_OFF64_CFLAGS,
    _CS_XBS5_LP64_OFF64_LDFLAGS,
    _CS_XBS5_LP64_OFF64_LIBS,
    _CS_XBS5_LP64_OFF64_LINTFLAGS,
    _CS_XBS5_LPBIG_OFFBIG_CFLAGS,
    _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
    _CS_XBS5_LPBIG_OFFBIG_LIBS,
    _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
    _CS_POSIX_V6_ILP32_OFF32_CFLAGS,
    _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
    _CS_POSIX_V6_ILP32_OFF32_LIBS,
    _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
    _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
    _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
    _CS_POSIX_V6_ILP32_OFFBIG_LIBS,
    _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
    _CS_POSIX_V6_LP64_OFF64_CFLAGS,
    _CS_POSIX_V6_LP64_OFF64_LDFLAGS,
    _CS_POSIX_V6_LP64_OFF64_LIBS,
    _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
    _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
    _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
    _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
    _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
    _CS_POSIX_V7_ILP32_OFF32_CFLAGS,
    _CS_POSIX_V7_ILP32_OFF32_LDFLAGS,
    _CS_POSIX_V7_ILP32_OFF32_LIBS,
    _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS,
    _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS,
    _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS,
    _CS_POSIX_V7_ILP32_OFFBIG_LIBS,
    _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS,
    _CS_POSIX_V7_LP64_OFF64_CFLAGS,
    _CS_POSIX_V7_LP64_OFF64_LDFLAGS,
    _CS_POSIX_V7_LP64_OFF64_LIBS,
    _CS_POSIX_V7_LP64_OFF64_LINTFLAGS,
    _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS,
    _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS,
    _CS_POSIX_V7_LPBIG_OFFBIG_LIBS,
    _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS,
    _CS_V6_ENV,
    _CS_V7_ENV
  };
extern long int pathconf (const char *__path, int __name)
     ;
extern long int fpathconf (int __fd, int __name) ;
extern long int sysconf (int __name) ;
extern size_t confstr (int __name, char *__buf, size_t __len) ;
extern __pid_t getpid (void) ;
extern __pid_t getppid (void) ;
extern __pid_t getpgrp (void) ;
extern __pid_t __getpgid (__pid_t __pid) ;
extern __pid_t getpgid (__pid_t __pid) ;
extern int setpgid (__pid_t __pid, __pid_t __pgid) ;
extern int setpgrp (void) ;
extern __pid_t setsid (void) ;
extern __pid_t getsid (__pid_t __pid) ;
extern __uid_t getuid (void) ;
extern __uid_t geteuid (void) ;
extern __gid_t getgid (void) ;
extern __gid_t getegid (void) ;
extern int getgroups (int __size, __gid_t __list[]) ;
extern int group_member (__gid_t __gid) ;
extern int setuid (__uid_t __uid) ;
extern int setreuid (__uid_t __ruid, __uid_t __euid) ;
extern int seteuid (__uid_t __uid) ;
extern int setgid (__gid_t __gid) ;
extern int setregid (__gid_t __rgid, __gid_t __egid) ;
extern int setegid (__gid_t __gid) ;
extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid)
     ;
extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid)
     ;
extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid)
     ;
extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid)
     ;
extern __pid_t fork (void) ;
extern __pid_t vfork (void) ;
extern char *ttyname (int __fd) ;
extern int ttyname_r (int __fd, char *__buf, size_t __buflen)
     ;
extern int isatty (int __fd) ;
extern int ttyslot (void) ;
extern int link (const char *__from, const char *__to)
     ;
extern int linkat (int __fromfd, const char *__from, int __tofd,
     const char *__to, int __flags)
     ;
extern int symlink (const char *__from, const char *__to)
     ;
extern ssize_t readlink (const char * __path,
    char * __buf, size_t __len)
     ;
extern int symlinkat (const char *__from, int __tofd,
        const char *__to) ;
extern ssize_t readlinkat (int __fd, const char * __path,
      char * __buf, size_t __len)
     ;
extern int unlink (const char *__name) ;
extern int unlinkat (int __fd, const char *__name, int __flag)
     ;
extern int rmdir (const char *__path) ;
extern __pid_t tcgetpgrp (int __fd) ;
extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) ;
extern char *getlogin (void);
extern int getlogin_r (char *__name, size_t __name_len) ;
extern int setlogin (const char *__name) ;
extern int gethostname (char *__name, size_t __len) ;
extern int sethostname (const char *__name, size_t __len)
     ;
extern int sethostid (long int __id) ;
extern int getdomainname (char *__name, size_t __len)
     ;
extern int setdomainname (const char *__name, size_t __len)
     ;
extern int vhangup (void) ;
extern int revoke (const char *__file) ;
extern int profil (unsigned short int *__sample_buffer, size_t __size,
     size_t __offset, unsigned int __scale)
     ;
extern int acct (const char *__name) ;
extern char *getusershell (void) ;
extern void endusershell (void) ;
extern void setusershell (void) ;
extern int daemon (int __nochdir, int __noclose) ;
extern int chroot (const char *__path) ;
extern char *getpass (const char *__prompt) ;
extern int fsync (int __fd);
extern int syncfs (int __fd) ;
extern long int gethostid (void);
extern void sync (void) ;
extern int getpagesize (void) ;
extern int getdtablesize (void) ;
extern int truncate (const char *__file, __off_t __length)
     ;
extern int truncate64 (const char *__file, __off64_t __length)
     ;
extern int ftruncate (int __fd, __off_t __length) ;
extern int ftruncate64 (int __fd, __off64_t __length) ;
extern int brk (void *__addr) ;
extern void *sbrk (intptr_t __delta) ;
extern long int syscall (long int __sysno, ...) ;
extern int lockf (int __fd, int __cmd, __off_t __len) ;
extern int lockf64 (int __fd, int __cmd, __off64_t __len) ;
extern int fdatasync (int __fildes);
extern char *crypt (const char *__key, const char *__salt)
     ;
extern void encrypt (char *__glibc_block, int __edflag)
     ;
extern void swab (const void * __from, void * __to,
    ssize_t __n) ;
extern int __sigismember (const __sigset_t *, int);
extern int __sigaddset (__sigset_t *, int);
extern int __sigdelset (__sigset_t *, int);
typedef __sig_atomic_t sig_atomic_t;
typedef union sigval
  {
    int sival_int;
    void *sival_ptr;
  } sigval_t;
typedef __clock_t __sigchld_clock_t;
typedef struct
  {
    int si_signo;
    int si_errno;
    int si_code;
    union
      {
 int _pad[((128 / sizeof (int)) - 4)];
 struct
   {
     __pid_t si_pid;
     __uid_t si_uid;
   } _kill;
 struct
   {
     int si_tid;
     int si_overrun;
     sigval_t si_sigval;
   } _timer;
 struct
   {
     __pid_t si_pid;
     __uid_t si_uid;
     sigval_t si_sigval;
   } _rt;
 struct
   {
     __pid_t si_pid;
     __uid_t si_uid;
     int si_status;
     __sigchld_clock_t si_utime;
     __sigchld_clock_t si_stime;
   } _sigchld;
 struct
   {
     void *si_addr;
     short int si_addr_lsb;
   } _sigfault;
 struct
   {
     long int si_band;
     int si_fd;
   } _sigpoll;
 struct
   {
     void *_call_addr;
     int _syscall;
     unsigned int _arch;
   } _sigsys;
      } _sifields;
  } siginfo_t ;
enum
{
  SI_ASYNCNL = -60,
  SI_TKILL = -6,
  SI_SIGIO,
  SI_ASYNCIO,
  SI_MESGQ,
  SI_TIMER,
  SI_QUEUE,
  SI_USER,
  SI_KERNEL = 0x80
};
enum
{
  ILL_ILLOPC = 1,
  ILL_ILLOPN,
  ILL_ILLADR,
  ILL_ILLTRP,
  ILL_PRVOPC,
  ILL_PRVREG,
  ILL_COPROC,
  ILL_BADSTK
};
enum
{
  FPE_INTDIV = 1,
  FPE_INTOVF,
  FPE_FLTDIV,
  FPE_FLTOVF,
  FPE_FLTUND,
  FPE_FLTRES,
  FPE_FLTINV,
  FPE_FLTSUB
};
enum
{
  SEGV_MAPERR = 1,
  SEGV_ACCERR
};
enum
{
  BUS_ADRALN = 1,
  BUS_ADRERR,
  BUS_OBJERR,
  BUS_MCEERR_AR,
  BUS_MCEERR_AO
};
enum
{
  TRAP_BRKPT = 1,
  TRAP_TRACE
};
enum
{
  CLD_EXITED = 1,
  CLD_KILLED,
  CLD_DUMPED,
  CLD_TRAPPED,
  CLD_STOPPED,
  CLD_CONTINUED
};
enum
{
  POLL_IN = 1,
  POLL_OUT,
  POLL_MSG,
  POLL_ERR,
  POLL_PRI,
  POLL_HUP
};
typedef struct sigevent
  {
    sigval_t sigev_value;
    int sigev_signo;
    int sigev_notify;
    union
      {
 int _pad[((64 / sizeof (int)) - 4)];
 __pid_t _tid;
 struct
   {
     void (*_function) (sigval_t);
     pthread_attr_t *_attribute;
   } _sigev_thread;
      } _sigev_un;
  } sigevent_t;
enum
{
  SIGEV_SIGNAL = 0,
  SIGEV_NONE,
  SIGEV_THREAD,
  SIGEV_THREAD_ID = 4
};
typedef void (*__sighandler_t) (int);
extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
     ;
extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler)
     ;
extern __sighandler_t signal (int __sig, __sighandler_t __handler)
     ;
extern __sighandler_t bsd_signal (int __sig, __sighandler_t __handler)
     ;
extern int kill (__pid_t __pid, int __sig) ;
extern int killpg (__pid_t __pgrp, int __sig) ;
extern int raise (int __sig) ;
extern __sighandler_t ssignal (int __sig, __sighandler_t __handler)
     ;
extern int gsignal (int __sig) ;
extern void psignal (int __sig, const char *__s);
extern void psiginfo (const siginfo_t *__pinfo, const char *__s);
extern int __sigpause (int __sig_or_mask, int __is_sig);
extern int sigblock (int __mask) ;
extern int sigsetmask (int __mask) ;
extern int siggetmask (void) ;
typedef __sighandler_t sighandler_t;
typedef __sighandler_t sig_t;
extern int sigemptyset (sigset_t *__set) ;
extern int sigfillset (sigset_t *__set) ;
extern int sigaddset (sigset_t *__set, int __signo) ;
extern int sigdelset (sigset_t *__set, int __signo) ;
extern int sigismember (const sigset_t *__set, int __signo)
     ;
extern int sigisemptyset (const sigset_t *__set) ;
extern int sigandset (sigset_t *__set, const sigset_t *__left,
        const sigset_t *__right) ;
extern int sigorset (sigset_t *__set, const sigset_t *__left,
       const sigset_t *__right) ;
struct sigaction
  {
    union
      {
 __sighandler_t sa_handler;
 void (*sa_sigaction) (int, siginfo_t *, void *);
      }
    __sigaction_handler;
    __sigset_t sa_mask;
    int sa_flags;
    void (*sa_restorer) (void);
  };
extern int sigprocmask (int __how, const sigset_t * __set,
   sigset_t * __oset) ;
extern int sigsuspend (const sigset_t *__set) ;
extern int sigaction (int __sig, const struct sigaction * __act,
        struct sigaction * __oact) ;
extern int sigpending (sigset_t *__set) ;
extern int sigwait (const sigset_t * __set, int * __sig)
     ;
extern int sigwaitinfo (const sigset_t * __set,
   siginfo_t * __info) ;
extern int sigtimedwait (const sigset_t * __set,
    siginfo_t * __info,
    const struct timespec * __timeout)
     ;
extern int sigqueue (__pid_t __pid, int __sig, const union sigval __val)
     ;
extern const char *const _sys_siglist[65];
extern const char *const sys_siglist[65];
struct sigvec
  {
    __sighandler_t sv_handler;
    int sv_mask;
    int sv_flags;
  };
extern int sigvec (int __sig, const struct sigvec *__vec,
     struct sigvec *__ovec) ;
struct _fpx_sw_bytes
{
  __uint32_t magic1;
  __uint32_t extended_size;
  __uint64_t xstate_bv;
  __uint32_t xstate_size;
  __uint32_t padding[7];
};
struct _fpreg
{
  unsigned short significand[4];
  unsigned short exponent;
};
struct _fpxreg
{
  unsigned short significand[4];
  unsigned short exponent;
  unsigned short padding[3];
};
struct _xmmreg
{
  __uint32_t element[4];
};
struct _fpstate
{
  __uint16_t cwd;
  __uint16_t swd;
  __uint16_t ftw;
  __uint16_t fop;
  __uint64_t rip;
  __uint64_t rdp;
  __uint32_t mxcsr;
  __uint32_t mxcr_mask;
  struct _fpxreg _st[8];
  struct _xmmreg _xmm[16];
  __uint32_t padding[24];
};
struct sigcontext
{
  __uint64_t r8;
  __uint64_t r9;
  __uint64_t r10;
  __uint64_t r11;
  __uint64_t r12;
  __uint64_t r13;
  __uint64_t r14;
  __uint64_t r15;
  __uint64_t rdi;
  __uint64_t rsi;
  __uint64_t rbp;
  __uint64_t rbx;
  __uint64_t rdx;
  __uint64_t rax;
  __uint64_t rcx;
  __uint64_t rsp;
  __uint64_t rip;
  __uint64_t eflags;
  unsigned short cs;
  unsigned short gs;
  unsigned short fs;
  unsigned short __pad0;
  __uint64_t err;
  __uint64_t trapno;
  __uint64_t oldmask;
  __uint64_t cr2;
  union
    {
      struct _fpstate * fpstate;
      __uint64_t __fpstate_word;
    }u;
  __uint64_t __reserved1 [8];
};
struct _xsave_hdr
{
  __uint64_t xstate_bv;
  __uint64_t reserved1[2];
  __uint64_t reserved2[5];
};
struct _ymmh_state
{
  __uint32_t ymmh_space[64];
};
struct _xstate
{
  struct _fpstate fpstate;
  struct _xsave_hdr xstate_hdr;
  struct _ymmh_state ymmh;
};
extern int sigreturn (struct sigcontext *__scp) ;
extern int siginterrupt (int __sig, int __interrupt) ;
struct sigstack
  {
    void *ss_sp;
    int ss_onstack;
  };
enum
{
  SS_ONSTACK = 1,
  SS_DISABLE
};
typedef struct sigaltstack
  {
    void *ss_sp;
    int ss_flags;
    size_t ss_size;
  } stack_t;
 typedef long long int greg_t;
typedef greg_t gregset_t[23];
enum
{
  REG_R8 = 0,
  REG_R9,
  REG_R10,
  REG_R11,
  REG_R12,
  REG_R13,
  REG_R14,
  REG_R15,
  REG_RDI,
  REG_RSI,
  REG_RBP,
  REG_RBX,
  REG_RDX,
  REG_RAX,
  REG_RCX,
  REG_RSP,
  REG_RIP,
  REG_EFL,
  REG_CSGSFS,
  REG_ERR,
  REG_TRAPNO,
  REG_OLDMASK,
  REG_CR2
};
struct _libc_fpxreg
{
  unsigned short int significand[4];
  unsigned short int exponent;
  unsigned short int padding[3];
};
struct _libc_xmmreg
{
  __uint32_t element[4];
};
struct _libc_fpstate
{
  __uint16_t cwd;
  __uint16_t swd;
  __uint16_t ftw;
  __uint16_t fop;
  __uint64_t rip;
  __uint64_t rdp;
  __uint32_t mxcsr;
  __uint32_t mxcr_mask;
  struct _libc_fpxreg _st[8];
  struct _libc_xmmreg _xmm[16];
  __uint32_t padding[24];
};
typedef struct _libc_fpstate *fpregset_t;
typedef struct
  {
    gregset_t gregs;
    fpregset_t fpregs;
    unsigned long long __reserved1 [8];
} mcontext_t;
typedef struct ucontext
  {
    unsigned long int uc_flags;
    struct ucontext *uc_link;
    stack_t uc_stack;
    mcontext_t uc_mcontext;
    __sigset_t uc_sigmask;
    struct _libc_fpstate __fpregs_mem;
  } ucontext_t;
extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
     ;
extern int sigaltstack (const struct sigaltstack * __ss,
   struct sigaltstack * __oss) ;
extern int sighold (int __sig) ;
extern int sigrelse (int __sig) ;
extern int sigignore (int __sig) ;
extern __sighandler_t sigset (int __sig, __sighandler_t __disp) ;
extern int pthread_sigmask (int __how,
       const __sigset_t * __newmask,
       __sigset_t * __oldmask);
extern int pthread_kill (pthread_t __threadid, int __signo) ;
extern int pthread_sigqueue (pthread_t __threadid, int __signo,
        const union sigval __value) ;
extern int __libc_current_sigrtmin (void) ;
extern int __libc_current_sigrtmax (void) ;
extern char *getpwd ();
extern char *getwd ();
char *
getpwd ()
{
  static char *pwd;
  static int failure_errno;
  char *p = pwd;
  size_t s;
  struct stat dotstat, pwdstat;
  if (!p && !((*__errno_location ()) = failure_errno))
    {
      if (! ((p = getenv ("PWD")) != 0
      && *p == '/'
      && stat (p, &pwdstat) == 0
      && stat (".", &dotstat) == 0
      && dotstat.st_ino == pwdstat.st_ino
      && dotstat.st_dev == pwdstat.st_dev))
 for (s = (4096 + 1); ! getcwd (p = xmalloc (s), s); s *= 2)
   {
     int e = (*__errno_location ());
     free (p);
     if (e != 34)
       {
  (*__errno_location ()) = failure_errno = e;
  p = 0;
  break;
       }
   }
      pwd = p;
    }
  return p;
}
struct timezone
  {
    int tz_minuteswest;
    int tz_dsttime;
  };
typedef struct timezone * __timezone_ptr_t;
extern int gettimeofday (struct timeval * __tv,
    __timezone_ptr_t __tz) ;
extern int settimeofday (const struct timeval *__tv,
    const struct timezone *__tz)
     ;
extern int adjtime (const struct timeval *__delta,
      struct timeval *__olddelta) ;
enum __itimer_which
  {
    ITIMER_REAL = 0,
    ITIMER_VIRTUAL = 1,
    ITIMER_PROF = 2
  };
struct itimerval
  {
    struct timeval it_interval;
    struct timeval it_value;
  };
typedef enum __itimer_which __itimer_which_t;
extern int getitimer (__itimer_which_t __which,
        struct itimerval *__value) ;
extern int setitimer (__itimer_which_t __which,
        const struct itimerval * __new,
        struct itimerval * __old) ;
extern int utimes (const char *__file, const struct timeval __tvp[2])
     ;
extern int lutimes (const char *__file, const struct timeval __tvp[2])
     ;
extern int futimes (int __fd, const struct timeval __tvp[2]) ;
extern int futimesat (int __fd, const char *__file,
        const struct timeval __tvp[2]) ;
struct timex
{
  unsigned int modes;
  __syscall_slong_t offset;
  __syscall_slong_t freq;
  __syscall_slong_t maxerror;
  __syscall_slong_t esterror;
  int status;
  __syscall_slong_t constant;
  __syscall_slong_t precision;
  __syscall_slong_t tolerance;
  struct timeval time;
  __syscall_slong_t tick;
  __syscall_slong_t ppsfreq;
  __syscall_slong_t jitter;
  int shift;
  __syscall_slong_t stabil;
  __syscall_slong_t jitcnt;
  __syscall_slong_t calcnt;
  __syscall_slong_t errcnt;
  __syscall_slong_t stbcnt;
  int tai;
  int :32; int :32; int :32; int :32;
  int :32; int :32; int :32; int :32;
  int :32; int :32; int :32;
};
extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) ;
struct tm
{
  int tm_sec;
  int tm_min;
  int tm_hour;
  int tm_mday;
  int tm_mon;
  int tm_year;
  int tm_wday;
  int tm_yday;
  int tm_isdst;
  long int tm_gmtoff;
  const char *tm_zone;
};
struct itimerspec
  {
    struct timespec it_interval;
    struct timespec it_value;
  };
struct sigevent;
extern clock_t clock (void) ;
extern time_t time (time_t *__timer) ;
extern double difftime (time_t __time1, time_t __time0)
     ;
extern time_t mktime (struct tm *__tp) ;
extern size_t strftime (char * __s, size_t __maxsize,
   const char * __format,
   const struct tm * __tp) ;
extern char *strptime (const char * __s,
         const char * __fmt, struct tm *__tp)
     ;
extern size_t strftime_l (char * __s, size_t __maxsize,
     const char * __format,
     const struct tm * __tp,
     __locale_t __loc) ;
extern char *strptime_l (const char * __s,
    const char * __fmt, struct tm *__tp,
    __locale_t __loc) ;
extern struct tm *gmtime (const time_t *__timer) ;
extern struct tm *localtime (const time_t *__timer) ;
extern struct tm *gmtime_r (const time_t * __timer,
       struct tm * __tp) ;
extern struct tm *localtime_r (const time_t * __timer,
          struct tm * __tp) ;
extern char *asctime (const struct tm *__tp) ;
extern char *ctime (const time_t *__timer) ;
extern char *asctime_r (const struct tm * __tp,
   char * __buf) ;
extern char *ctime_r (const time_t * __timer,
        char * __buf) ;
extern char *__tzname[2];
extern int __daylight;
extern long int __timezone;
extern char *tzname[2];
extern void tzset (void) ;
extern int daylight;
extern long int timezone;
extern int stime (const time_t *__when) ;
extern time_t timegm (struct tm *__tp) ;
extern time_t timelocal (struct tm *__tp) ;
extern int dysize (int __year) ;
extern int nanosleep (const struct timespec *__requested_time,
        struct timespec *__remaining);
extern int clock_getres (clockid_t __clock_id, struct timespec *__res) ;
extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) ;
extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
     ;
extern int clock_nanosleep (clockid_t __clock_id, int __flags,
       const struct timespec *__req,
       struct timespec *__rem);
extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) ;
extern int timer_create (clockid_t __clock_id,
    struct sigevent * __evp,
    timer_t * __timerid) ;
extern int timer_delete (timer_t __timerid) ;
extern int timer_settime (timer_t __timerid, int __flags,
     const struct itimerspec * __value,
     struct itimerspec * __ovalue) ;
extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
     ;
extern int timer_getoverrun (timer_t __timerid) ;
extern int timespec_get (struct timespec *__ts, int __base)
     ;
extern int getdate_err;
extern struct tm *getdate (const char *__string);
extern int getdate_r (const char * __string,
        struct tm * __resbufp);
enum __rlimit_resource
{
  RLIMIT_CPU = 0,
  RLIMIT_FSIZE = 1,
  RLIMIT_DATA = 2,
  RLIMIT_STACK = 3,
  RLIMIT_CORE = 4,
  __RLIMIT_RSS = 5,
  RLIMIT_NOFILE = 7,
  __RLIMIT_OFILE = RLIMIT_NOFILE,
  RLIMIT_AS = 9,
  __RLIMIT_NPROC = 6,
  __RLIMIT_MEMLOCK = 8,
  __RLIMIT_LOCKS = 10,
  __RLIMIT_SIGPENDING = 11,
  __RLIMIT_MSGQUEUE = 12,
  __RLIMIT_NICE = 13,
  __RLIMIT_RTPRIO = 14,
  __RLIMIT_RTTIME = 15,
  __RLIMIT_NLIMITS = 16,
  __RLIM_NLIMITS = __RLIMIT_NLIMITS
};
typedef __rlim_t rlim_t;
typedef __rlim64_t rlim64_t;
struct rlimit
  {
    rlim_t rlim_cur;
    rlim_t rlim_max;
  };
struct rlimit64
  {
    rlim64_t rlim_cur;
    rlim64_t rlim_max;
 };
enum __rusage_who
{
  RUSAGE_SELF = 0,
  RUSAGE_CHILDREN = -1
  ,
  RUSAGE_THREAD = 1
};
struct rusage
  {
    struct timeval ru_utime;
    struct timeval ru_stime;
    union
      {
 long int ru_maxrss;
 __syscall_slong_t __ru_maxrss_word;
      }u;
    union
      {
 long int ru_ixrss;
 __syscall_slong_t __ru_ixrss_word;
      }u;
    union
      {
 long int ru_idrss;
 __syscall_slong_t __ru_idrss_word;
      }u;
    union
      {
 long int ru_isrss;
  __syscall_slong_t __ru_isrss_word;
      }u;
    union
      {
 long int ru_minflt;
 __syscall_slong_t __ru_minflt_word;
      }u;
    union
      {
 long int ru_majflt;
 __syscall_slong_t __ru_majflt_word;
      }u;
    union
      {
 long int ru_nswap;
 __syscall_slong_t __ru_nswap_word;
      }u;
    union
      {
 long int ru_inblock;
 __syscall_slong_t __ru_inblock_word;
      }u;
    union
      {
 long int ru_oublock;
 __syscall_slong_t __ru_oublock_word;
      }u;
    union
      {
 long int ru_msgsnd;
 __syscall_slong_t __ru_msgsnd_word;
      }u;
    union
      {
 long int ru_msgrcv;
 __syscall_slong_t __ru_msgrcv_word;
      }u;
    union
      {
 long int ru_nsignals;
 __syscall_slong_t __ru_nsignals_word;
      }u;
    union
      {
 long int ru_nvcsw;
 __syscall_slong_t __ru_nvcsw_word;
      }u;
    union
      {
 long int ru_nivcsw;
 __syscall_slong_t __ru_nivcsw_word;
      }u;
  };
enum __priority_which
{
  PRIO_PROCESS = 0,
  PRIO_PGRP = 1,
  PRIO_USER = 2
};
extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource,
      const struct rlimit *__new_limit,
      struct rlimit *__old_limit) ;
extern int prlimit64 (__pid_t __pid, enum __rlimit_resource __resource,
        const struct rlimit64 *__new_limit,
        struct rlimit64 *__old_limit) ;
typedef enum __rlimit_resource __rlimit_resource_t;
typedef enum __rusage_who __rusage_who_t;
typedef enum __priority_which __priority_which_t;
extern int getrlimit (__rlimit_resource_t __resource,
        struct rlimit *__rlimits) ;
extern int getrlimit64 (__rlimit_resource_t __resource,
   struct rlimit64 *__rlimits) ;
extern int setrlimit (__rlimit_resource_t __resource,
        const struct rlimit *__rlimits) ;
extern int setrlimit64 (__rlimit_resource_t __resource,
   const struct rlimit64 *__rlimits) ;
extern int getrusage (__rusage_who_t __who, struct rusage *__usage) ;
extern int getpriority (__priority_which_t __which, id_t __who) ;
extern int setpriority (__priority_which_t __which, id_t __who, int __prio)
     ;
struct tms
  {
    clock_t tms_utime;
    clock_t tms_stime;
    clock_t tms_cutime;
    clock_t tms_cstime;
  };
extern clock_t times (struct tms *__buffer) ;
long
get_run_time ()
{
  struct rusage rusage;
  getrusage (0, &rusage);
  return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec
   + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec);
}
extern void *malloc (size_t __size) ;
extern void *calloc (size_t __nmemb, size_t __size)
 ;
extern void *realloc (void *__ptr, size_t __size)
 ;
extern void free (void *__ptr) ;
extern void cfree (void *__ptr) ;
extern void *memalign (size_t __alignment, size_t __size)
 ;
extern void *valloc (size_t __size) ;
extern void *pvalloc (size_t __size) ;
extern void *(*__morecore) (ptrdiff_t __size);
extern void *__default_morecore (ptrdiff_t __size)
 ;
struct mallinfo
{
  int arena;
  int ordblks;
  int smblks;
  int hblks;
  int hblkhd;
  int usmblks;
  int fsmblks;
  int uordblks;
  int fordblks;
  int keepcost;
};
extern struct mallinfo mallinfo (void) ;
extern int mallopt (int __param, int __val) ;
extern int malloc_trim (size_t __pad) ;
extern size_t malloc_usable_size (void *__ptr) ;
extern void malloc_stats (void) ;
extern int malloc_info (int __options, FILE *__fp) ;
extern void *malloc_get_state (void) ;
extern int malloc_set_state (void *__ptr) ;
extern void (*volatile __malloc_initialize_hook) (void)
;
extern void (*volatile __free_hook) (void *__ptr,
                                                   const void *)
;
extern void *(*volatile __malloc_hook)(size_t __size,
                                                     const void *)
;
extern void *(*volatile __realloc_hook)(void *__ptr,
                                                      size_t __size,
                                                      const void *)
;
extern void *(*volatile __memalign_hook)(size_t __alignment,
                                                       size_t __size,
                                                       const void *)
;
extern void (*volatile __after_morecore_hook) (void);
extern void __malloc_check_init (void) ;
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long int uint64_t;
typedef signed char int_least8_t;
typedef short int int_least16_t;
typedef int int_least32_t;
typedef long int int_least64_t;
typedef unsigned char uint_least8_t;
typedef unsigned short int uint_least16_t;
typedef unsigned int uint_least32_t;
typedef unsigned long int uint_least64_t;
typedef signed char int_fast8_t;
typedef long int int_fast16_t;
typedef long int int_fast32_t;
typedef long int int_fast64_t;
typedef unsigned char uint_fast8_t;
typedef unsigned long int uint_fast16_t;
typedef unsigned long int uint_fast32_t;
typedef unsigned long int uint_fast64_t;
typedef unsigned long int uintptr_t;
typedef long int intmax_t;
typedef unsigned long int uintmax_t;
typedef unsigned int hashval_t;
typedef hashval_t (*htab_hash) (const void *);
typedef int (*htab_eq) (const void *, const void *);
typedef void (*htab_del) (void *);
typedef int (*htab_trav) (void **, void *);
typedef void * (*htab_alloc) (size_t, size_t);
typedef void (*htab_free) (void *);
typedef void * (*htab_alloc_with_arg) (void *, size_t, size_t);
typedef void (*htab_free_with_arg) (void *, void *);
struct htab
{
  htab_hash hash_f;
  htab_eq eq_f;
  htab_del del_f;
  void * * entries;
  size_t size;
  size_t n_elements;
  size_t n_deleted;
  unsigned int searches;
  unsigned int collisions;
  htab_alloc alloc_f;
  htab_free free_f;
  void * alloc_arg;
  htab_alloc_with_arg alloc_with_arg_f;
  htab_free_with_arg free_with_arg_f;
  unsigned int size_prime_index;
};
typedef struct htab *htab_t;
enum insert_option {NO_INSERT, INSERT};
extern htab_t htab_create_alloc (size_t, htab_hash, htab_eq, htab_del, htab_alloc, htab_free)
                              ;
extern htab_t htab_create_alloc_ex (size_t, htab_hash, htab_eq, htab_del, void *, htab_alloc_with_arg, htab_free_with_arg)
                              ;
extern htab_t htab_create (size_t, htab_hash, htab_eq, htab_del);
extern htab_t htab_try_create (size_t, htab_hash, htab_eq, htab_del);
extern void htab_set_functions_ex (htab_t, htab_hash, htab_eq, htab_del, void *, htab_alloc_with_arg, htab_free_with_arg)
                           ;
extern void htab_delete (htab_t);
extern void htab_empty (htab_t);
extern void * htab_find (htab_t, const void *);
extern void * *htab_find_slot (htab_t, const void *, enum insert_option)
                          ;
extern void * htab_find_with_hash (htab_t, const void *, hashval_t)
                    ;
extern void * *htab_find_slot_with_hash (htab_t, const void *, hashval_t, enum insert_option)
                             ;
extern void htab_clear_slot (htab_t, void **);
extern void htab_remove_elt (htab_t, void *);
extern void htab_remove_elt_with_hash (htab_t, void *, hashval_t);
extern void htab_traverse (htab_t, htab_trav, void *);
extern void htab_traverse_noresize (htab_t, htab_trav, void *);
extern size_t htab_size (htab_t);
extern size_t htab_elements (htab_t);
extern double htab_collisions (htab_t);
extern htab_hash htab_hash_pointer;
extern htab_eq htab_eq_pointer;
extern hashval_t htab_hash_string (const void *);
extern hashval_t iterative_hash (const void *, size_t, hashval_t);
static unsigned int higher_prime_index (unsigned long);
static hashval_t htab_mod_1 (hashval_t, hashval_t, hashval_t, int);
static hashval_t htab_mod (hashval_t, htab_t);
static hashval_t htab_mod_m2 (hashval_t, htab_t);
static hashval_t hash_pointer (const void *);
static int eq_pointer (const void *, const void *);
static int htab_expand (htab_t);
static void * *find_empty_slot_for_expand (htab_t, hashval_t);
htab_hash htab_hash_pointer = hash_pointer;
htab_eq htab_eq_pointer = eq_pointer;
struct prime_ent
{
  hashval_t prime;
  hashval_t inv;
  hashval_t inv_m2;
  hashval_t shift;
};
static struct prime_ent const prime_tab[] = {
  { 7, 0x24924925, 0x9999999b, 2 },
  { 13, 0x3b13b13c, 0x745d1747, 3 },
  { 31, 0x08421085, 0x1a7b9612, 4 },
  { 61, 0x0c9714fc, 0x15b1e5f8, 5 },
  { 127, 0x02040811, 0x0624dd30, 6 },
  { 251, 0x05197f7e, 0x073260a5, 7 },
  { 509, 0x01824366, 0x02864fc8, 8 },
  { 1021, 0x00c0906d, 0x014191f7, 9 },
  { 2039, 0x0121456f, 0x0161e69e, 10 },
  { 4093, 0x00300902, 0x00501908, 11 },
  { 8191, 0x00080041, 0x00180241, 12 },
  { 16381, 0x000c0091, 0x00140191, 13 },
  { 32749, 0x002605a5, 0x002a06e6, 14 },
  { 65521, 0x000f00e2, 0x00110122, 15 },
  { 131071, 0x00008001, 0x00018003, 16 },
  { 262139, 0x00014002, 0x0001c004, 17 },
  { 524287, 0x00002001, 0x00006001, 18 },
  { 1048573, 0x00003001, 0x00005001, 19 },
  { 2097143, 0x00004801, 0x00005801, 20 },
  { 4194301, 0x00000c01, 0x00001401, 21 },
  { 8388593, 0x00001e01, 0x00002201, 22 },
  { 16777213, 0x00000301, 0x00000501, 23 },
  { 33554393, 0x00001381, 0x00001481, 24 },
  { 67108859, 0x00000141, 0x000001c1, 25 },
  { 134217689, 0x000004e1, 0x00000521, 26 },
  { 268435399, 0x00000391, 0x000003b1, 27 },
  { 536870909, 0x00000019, 0x00000029, 28 },
  { 1073741789, 0x0000008d, 0x00000095, 29 },
  { 2147483647, 0x00000003, 0x00000007, 30 },
  { 0xfffffffb, 0x00000006, 0x00000008, 31 }
};
static unsigned int
higher_prime_index (n)
     unsigned long n;
{
  unsigned int low = 0;
  unsigned int high = sizeof(prime_tab) / sizeof(prime_tab[0]);
  while (low != high)
    {
      unsigned int mid = low + (high - low) / 2;
      if (n > prime_tab[mid].prime)
 low = mid + 1;
      else
 high = mid;
    }
  if (n > prime_tab[low].prime)
    {
      fprintf (stderr, "Cannot find prime bigger than %lu\n", n);
      abort ();
    }
  return low;
}
static hashval_t
hash_pointer (p)
     const void * p;
{
  return (hashval_t) ((long)p >> 3);
}
static int
eq_pointer (p1, p2)
     const void * p1;
     const void * p2;
{
  return p1 == p2;
}
 size_t
htab_size (htab)
     htab_t htab;
{
  return htab->size;
}
 size_t
htab_elements (htab)
     htab_t htab;
{
  return htab->n_elements - htab->n_deleted;
}
static hashval_t
htab_mod_1 (x, y, inv, shift)
     hashval_t x, y, inv;
     int shift;
{
  if (sizeof (hashval_t) * 8 <= 32)
    {
      hashval_t t1, t2, t3, t4, q, r;
      t1 = ((uint64_t)x * inv) >> 32;
      t2 = x - t1;
      t3 = t2 >> 1;
      t4 = t1 + t3;
      q = t4 >> shift;
      r = x - (q * y);
      return r;
    }
  return x % y;
}
static hashval_t
htab_mod (hash, htab)
     hashval_t hash;
     htab_t htab;
{
  const struct prime_ent *p = &prime_tab[htab->size_prime_index];
  return htab_mod_1 (hash, p->prime, p->inv, p->shift);
}
static hashval_t
htab_mod_m2 (hash, htab)
     hashval_t hash;
     htab_t htab;
{
  const struct prime_ent *p = &prime_tab[htab->size_prime_index];
  return 1 + htab_mod_1 (hash, p->prime - 2, p->inv_m2, p->shift);
}
htab_t
htab_create_alloc (size, hash_f, eq_f, del_f, alloc_f, free_f)
     size_t size;
     htab_hash hash_f;
     htab_eq eq_f;
     htab_del del_f;
     htab_alloc alloc_f;
     htab_free free_f;
{
  htab_t result;
  unsigned int size_prime_index;
  size_prime_index = higher_prime_index (size);
  size = prime_tab[size_prime_index].prime;
  result = (htab_t) (*alloc_f) (1, sizeof (struct htab));
  if (result == ((void *)0))
    return ((void *)0);
  result->entries = (void * *) (*alloc_f) (size, sizeof (void *));
  if (result->entries == ((void *)0))
    {
      if (free_f != ((void *)0))
 (*free_f) (result);
      return ((void *)0);
    }
  result->size = size;
  result->size_prime_index = size_prime_index;
  result->hash_f = hash_f;
  result->eq_f = eq_f;
  result->del_f = del_f;
  result->alloc_f = alloc_f;
  result->free_f = free_f;
  return result;
}
htab_t
htab_create_alloc_ex (size, hash_f, eq_f, del_f, alloc_arg, alloc_f,
        free_f)
     size_t size;
     htab_hash hash_f;
     htab_eq eq_f;
     htab_del del_f;
     void * alloc_arg;
     htab_alloc_with_arg alloc_f;
     htab_free_with_arg free_f;
{
  htab_t result;
  unsigned int size_prime_index;
  size_prime_index = higher_prime_index (size);
  size = prime_tab[size_prime_index].prime;
  result = (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab));
  if (result == ((void *)0))
    return ((void *)0);
  result->entries = (void * *) (*alloc_f) (alloc_arg, size, sizeof (void *));
  if (result->entries == ((void *)0))
    {
      if (free_f != ((void *)0))
 (*free_f) (alloc_arg, result);
      return ((void *)0);
    }
  result->size = size;
  result->size_prime_index = size_prime_index;
  result->hash_f = hash_f;
  result->eq_f = eq_f;
  result->del_f = del_f;
  result->alloc_arg = alloc_arg;
  result->alloc_with_arg_f = alloc_f;
  result->free_with_arg_f = free_f;
  return result;
}
void
htab_set_functions_ex (htab, hash_f, eq_f, del_f, alloc_arg, alloc_f, free_f)
     htab_t htab;
     htab_hash hash_f;
     htab_eq eq_f;
     htab_del del_f;
     void * alloc_arg;
     htab_alloc_with_arg alloc_f;
     htab_free_with_arg free_f;
{
  htab->hash_f = hash_f;
  htab->eq_f = eq_f;
  htab->del_f = del_f;
  htab->alloc_arg = alloc_arg;
  htab->alloc_with_arg_f = alloc_f;
  htab->free_with_arg_f = free_f;
}
htab_t
htab_create (size, hash_f, eq_f, del_f)
     size_t size;
     htab_hash hash_f;
     htab_eq eq_f;
     htab_del del_f;
{
  return htab_create_alloc (size, hash_f, eq_f, del_f, xcalloc, free);
}
htab_t
htab_try_create (size, hash_f, eq_f, del_f)
     size_t size;
     htab_hash hash_f;
     htab_eq eq_f;
     htab_del del_f;
{
  return htab_create_alloc (size, hash_f, eq_f, del_f, calloc, free);
}
void
htab_delete (htab)
     htab_t htab;
{
  size_t size = htab_size (htab);
  void * *entries = htab->entries;
  int i;
  if (htab->del_f)
    for (i = size - 1; i >= 0; i--)
      if (entries[i] != ((void *) 0) && entries[i] != ((void *) 1))
 (*htab->del_f) (entries[i]);
  if (htab->free_f != ((void *)0))
    {
      (*htab->free_f) (entries);
      (*htab->free_f) (htab);
    }
  else if (htab->free_with_arg_f != ((void *)0))
    {
      (*htab->free_with_arg_f) (htab->alloc_arg, entries);
      (*htab->free_with_arg_f) (htab->alloc_arg, htab);
    }
}
void
htab_empty (htab)
     htab_t htab;
{
  size_t size = htab_size (htab);
  void * *entries = htab->entries;
  int i;
  if (htab->del_f)
    for (i = size - 1; i >= 0; i--)
      if (entries[i] != ((void *) 0) && entries[i] != ((void *) 1))
 (*htab->del_f) (entries[i]);
  memset (entries, 0, size * sizeof (void *));
}
static void * *
find_empty_slot_for_expand (htab, hash)
     htab_t htab;
     hashval_t hash;
{
  hashval_t index = htab_mod (hash, htab);
  size_t size = htab_size (htab);
  void * *slot = htab->entries + index;
  hashval_t hash2;
  if (*slot == ((void *) 0))
    return slot;
  else if (*slot == ((void *) 1))
    abort ();
  hash2 = htab_mod_m2 (hash, htab);
  for (;;)
    {
      index += hash2;
      if (index >= size)
 index -= size;
      slot = htab->entries + index;
      if (*slot == ((void *) 0))
 return slot;
      else if (*slot == ((void *) 1))
 abort ();
    }
}
static int
htab_expand (htab)
     htab_t htab;
{
  void * *oentries;
  void * *olimit;
  void * *p;
  void * *nentries;
  size_t nsize, osize, elts;
  unsigned int oindex, nindex;
  oentries = htab->entries;
  oindex = htab->size_prime_index;
  osize = htab->size;
  olimit = oentries + osize;
  elts = htab_elements (htab);
  if (elts * 2 > osize || (elts * 8 < osize && osize > 32))
    {
      nindex = higher_prime_index (elts * 2);
      nsize = prime_tab[nindex].prime;
    }
  else
    {
      nindex = oindex;
      nsize = osize;
    }
  if (htab->alloc_with_arg_f != ((void *)0))
    nentries = (void * *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
        sizeof (void * *));
  else
    nentries = (void * *) (*htab->alloc_f) (nsize, sizeof (void * *));
  if (nentries == ((void *)0))
    return 0;
  htab->entries = nentries;
  htab->size = nsize;
  htab->size_prime_index = nindex;
  htab->n_elements -= htab->n_deleted;
  htab->n_deleted = 0;
  p = oentries;
  do
    {
      void * x = *p;
      if (x != ((void *) 0) && x != ((void *) 1))
 {
   void * *q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x));
   *q = x;
 }
      p++;
    }
  while (p < olimit);
  if (htab->free_f != ((void *)0))
    (*htab->free_f) (oentries);
  else if (htab->free_with_arg_f != ((void *)0))
    (*htab->free_with_arg_f) (htab->alloc_arg, oentries);
  return 1;
}
void *
htab_find_with_hash (htab, element, hash)
     htab_t htab;
     const void * element;
     hashval_t hash;
{
  hashval_t index, hash2;
  size_t size;
  void * entry;
  htab->searches++;
  size = htab_size (htab);
  index = htab_mod (hash, htab);
  entry = htab->entries[index];
  if (entry == ((void *) 0)
      || (entry != ((void *) 1) && (*htab->eq_f) (entry, element)))
    return entry;
  hash2 = htab_mod_m2 (hash, htab);
  for (;;)
    {
      htab->collisions++;
      index += hash2;
      if (index >= size)
 index -= size;
      entry = htab->entries[index];
      if (entry == ((void *) 0)
   || (entry != ((void *) 1) && (*htab->eq_f) (entry, element)))
 return entry;
    }
}
void *
htab_find (htab, element)
     htab_t htab;
     const void * element;
{
  return htab_find_with_hash (htab, element, (*htab->hash_f) (element));
}
void * *
htab_find_slot_with_hash (htab, element, hash, insert)
     htab_t htab;
     const void * element;
     hashval_t hash;
     enum insert_option insert;
{
  void * *first_deleted_slot;
  hashval_t index, hash2;
  size_t size;
  void * entry;
  size = htab_size (htab);
  if (insert == INSERT && size * 3 <= htab->n_elements * 4)
    {
      if (htab_expand (htab) == 0)
 return ((void *)0);
      size = htab_size (htab);
    }
  index = htab_mod (hash, htab);
  htab->searches++;
  first_deleted_slot = ((void *)0);
  entry = htab->entries[index];
  if (entry == ((void *) 0))
    goto empty_entry;
  else if (entry == ((void *) 1))
    first_deleted_slot = &htab->entries[index];
  else if ((*htab->eq_f) (entry, element))
    return &htab->entries[index];
  hash2 = htab_mod_m2 (hash, htab);
  for (;;)
    {
      htab->collisions++;
      index += hash2;
      if (index >= size)
 index -= size;
      entry = htab->entries[index];
      if (entry == ((void *) 0))
 goto empty_entry;
      else if (entry == ((void *) 1))
 {
   if (!first_deleted_slot)
     first_deleted_slot = &htab->entries[index];
 }
      else if ((*htab->eq_f) (entry, element))
 return &htab->entries[index];
    }
 empty_entry:
  if (insert == NO_INSERT)
    return ((void *)0);
  if (first_deleted_slot)
    {
      htab->n_deleted--;
      *first_deleted_slot = ((void *) 0);
      return first_deleted_slot;
    }
  htab->n_elements++;
  return &htab->entries[index];
}
void * *
htab_find_slot (htab, element, insert)
     htab_t htab;
     const void * element;
     enum insert_option insert;
{
  return htab_find_slot_with_hash (htab, element, (*htab->hash_f) (element),
       insert);
}
void
htab_remove_elt (htab, element)
     htab_t htab;
     void * element;
{
  htab_remove_elt_with_hash (htab, element, (*htab->hash_f) (element));
}
void
htab_remove_elt_with_hash (htab, element, hash)
     htab_t htab;
     void * element;
     hashval_t hash;
{
  void * *slot;
  slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT);
  if (*slot == ((void *) 0))
    return;
  if (htab->del_f)
    (*htab->del_f) (*slot);
  *slot = ((void *) 1);
  htab->n_deleted++;
}
void
htab_clear_slot (htab, slot)
     htab_t htab;
     void * *slot;
{
  if (slot < htab->entries || slot >= htab->entries + htab_size (htab)
      || *slot == ((void *) 0) || *slot == ((void *) 1))
    abort ();
  if (htab->del_f)
    (*htab->del_f) (*slot);
  *slot = ((void *) 1);
  htab->n_deleted++;
}
void
htab_traverse_noresize (htab, callback, info)
     htab_t htab;
     htab_trav callback;
     void * info;
{
  void * *slot;
  void * *limit;
  slot = htab->entries;
  limit = slot + htab_size (htab);
  do
    {
      void * x = *slot;
      if (x != ((void *) 0) && x != ((void *) 1))
 if (!(*callback) (slot, info))
   break;
    }
  while (++slot < limit);
}
void
htab_traverse (htab, callback, info)
     htab_t htab;
     htab_trav callback;
     void * info;
{
  if (htab_elements (htab) * 8 < htab_size (htab))
    htab_expand (htab);
  htab_traverse_noresize (htab, callback, info);
}
double
htab_collisions (htab)
     htab_t htab;
{
  if (htab->searches == 0)
    return 0.0;
  return (double) htab->collisions / (double) htab->searches;
}
hashval_t
htab_hash_string (p)
     const void * p;
{
  const unsigned char *str = (const unsigned char *) p;
  hashval_t r = 0;
  unsigned char c;
  while ((c = *str++) != 0)
    r = r * 67 + c - 113;
  return r;
}
hashval_t iterative_hash (k_in, length, initval)
     const void * k_in;
     register size_t length;
     register hashval_t initval;
{
  register const unsigned char *k = (const unsigned char *)k_in;
  register hashval_t a,b,c,len;
  len = length;
  a = b = 0x9e3779b9;
  c = initval;
  if (sizeof (hashval_t) == 4 && (((size_t)k)&3) == 0)
    while (len >= 12)
      {
 a += *(hashval_t *)(k+0);
 b += *(hashval_t *)(k+4);
 c += *(hashval_t *)(k+8);
 { a -= b; a -= c; a ^= (c>>13); b -= c; b -= a; b ^= (a<< 8); c -= a; c -= b; c ^= ((b&0xffffffff)>>13); a -= b; a -= c; a ^= ((c&0xffffffff)>>12); b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; };
 k += 12; len -= 12;
      }
  else
    while (len >= 12)
      {
 a += (k[0] +((hashval_t)k[1]<<8) +((hashval_t)k[2]<<16) +((hashval_t)k[3]<<24));
 b += (k[4] +((hashval_t)k[5]<<8) +((hashval_t)k[6]<<16) +((hashval_t)k[7]<<24));
 c += (k[8] +((hashval_t)k[9]<<8) +((hashval_t)k[10]<<16)+((hashval_t)k[11]<<24));
 { a -= b; a -= c; a ^= (c>>13); b -= c; b -= a; b ^= (a<< 8); c -= a; c -= b; c ^= ((b&0xffffffff)>>13); a -= b; a -= c; a ^= ((c&0xffffffff)>>12); b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; };
 k += 12; len -= 12;
      }
  c += length;
  switch(len)
    {
    case 11: c+=((hashval_t)k[10]<<24);
    case 10: c+=((hashval_t)k[9]<<16);
    case 9 : c+=((hashval_t)k[8]<<8);
    case 8 : b+=((hashval_t)k[7]<<24);
    case 7 : b+=((hashval_t)k[6]<<16);
    case 6 : b+=((hashval_t)k[5]<<8);
    case 5 : b+=k[4];
    case 4 : a+=((hashval_t)k[3]<<24);
    case 3 : a+=((hashval_t)k[2]<<16);
    case 2 : a+=((hashval_t)k[1]<<8);
    case 1 : a+=k[0];
    }
  { a -= b; a -= c; a ^= (c>>13); b -= c; b -= a; b ^= (a<< 8); c -= a; c -= b; c ^= ((b&0xffffffff)>>13); a -= b; a -= c; a ^= ((c&0xffffffff)>>12); b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; };
  return c;
}
const unsigned char _hex_value[256] =
{
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  0, 1, 2, 3,
  4, 5, 6, 7,
  8, 9, 99, 99,
  99, 99, 99, 99,
  99, 10, 11, 12,
  13, 14, 15, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 10, 11, 12,
  13, 14, 15, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
  99, 99, 99, 99,
};
void
hex_init ()
{
}
const char *
lbasename (name)
     const char *name;
{
  const char *base;
  for (base = name; *name; name++)
    if (((*name) == '/'))
      base = name + 1;
  return base;
}
extern char *canonicalize_file_name (const char *);
char *
lrealpath (filename)
     const char *filename;
{
  {
    char buf[4096];
    const char *rp = realpath (filename, buf);
    if (rp == ((void *)0))
      rp = filename;
    return strdup (rp);
  }
  {
    char *rp = canonicalize_file_name (filename);
    if (rp == ((void *)0))
      return strdup (filename);
    else
      return rp;
  }
  {
    long path_max = pathconf ("/", _PC_PATH_MAX);
    if (path_max > 0)
      {
 char *buf, *rp, *ret;
 buf = malloc (path_max);
 if (buf == ((void *)0))
   return ((void *)0);
 rp = realpath (filename, buf);
 ret = strdup (rp ? rp : filename);
 free (buf);
 return ret;
      }
  }
  return strdup (filename);
}
static char *save_string (const char *, int);
static char **split_directories (const char *, int *);
static void free_split_directories (char **);
static char *
save_string (s, len)
     const char *s;
     int len;
{
  char *result = malloc (len + 1);
  memcpy (result, s, len);
  result[len] = 0;
  return result;
}
static char **
split_directories (name, ptr_num_dirs)
     const char *name;
     int *ptr_num_dirs;
{
  int num_dirs = 0;
  char **dirs;
  const char *p, *q;
  int ch;
  p = name;
  while ((ch = *p++) != '\0')
    {
      if (((ch) == '/'))
 {
   num_dirs++;
   while (((*p) == '/'))
     p++;
 }
    }
  dirs = (char **) malloc (sizeof (char *) * (num_dirs + 2));
  if (dirs == ((void *)0))
    return ((void *)0);
  num_dirs = 0;
  p = name;
  q = p;
  while ((ch = *p++) != '\0')
    {
      if (((ch) == '/'))
 {
   while (((*p) == '/'))
     p++;
   dirs[num_dirs++] = save_string (q, p - q);
   if (dirs[num_dirs - 1] == ((void *)0))
     {
       dirs[num_dirs] = ((void *)0);
       free_split_directories (dirs);
       return ((void *)0);
     }
   q = p;
 }
    }
  if (p - 1 - q > 0)
    dirs[num_dirs++] = save_string (q, p - 1 - q);
  dirs[num_dirs] = ((void *)0);
  if (dirs[num_dirs - 1] == ((void *)0))
    {
      free_split_directories (dirs);
      return ((void *)0);
    }
  if (ptr_num_dirs)
    *ptr_num_dirs = num_dirs;
  return dirs;
}
static void
free_split_directories (dirs)
     char **dirs;
{
  int i = 0;
  while (dirs[i] != ((void *)0))
    free (dirs[i++]);
  free ((char *) dirs);
}
char *
make_relative_prefix (progname, bin_prefix, prefix)
     const char *progname;
     const char *bin_prefix;
     const char *prefix;
{
  char **prog_dirs, **bin_dirs, **prefix_dirs;
  int prog_num, bin_num, prefix_num;
  int i, n, common;
  int needed_len;
  char *ret, *ptr, *full_progname = ((void *)0);
  if (progname == ((void *)0) || bin_prefix == ((void *)0) || prefix == ((void *)0))
    return ((void *)0);
  if (lbasename (progname) == progname)
    {
      char *temp;
      temp = getenv ("PATH");
      if (temp)
 {
   char *startp, *endp, *nstore;
   size_t prefixlen = strlen (temp) + 1;
   if (prefixlen < 2)
     prefixlen = 2;
   nstore = (char *) C_alloca(prefixlen + strlen (progname) + 1);
   startp = endp = temp;
   while (1)
     {
       if (*endp == ':' || *endp == 0)
  {
    if (endp == startp)
      {
        nstore[0] = '.';
        nstore[1] = '/';
        nstore[2] = '\0';
      }
    else
      {
        strncpy (nstore, startp, endp - startp);
        if (! ((endp[-1]) == '/'))
   {
     nstore[endp - startp] = '/';
     nstore[endp - startp + 1] = 0;
   }
        else
   nstore[endp - startp] = 0;
      }
    strcat (nstore, progname);
    if (! access (nstore, 1)
        )
      {
        progname = nstore;
        break;
      }
    if (*endp == 0)
      break;
    endp = startp = endp + 1;
  }
       else
  endp++;
     }
 }
    }
  full_progname = lrealpath (progname);
  if (full_progname == ((void *)0))
    return ((void *)0);
  prog_dirs = split_directories (full_progname, &prog_num);
  bin_dirs = split_directories (bin_prefix, &bin_num);
  free (full_progname);
  if (bin_dirs == ((void *)0) || prog_dirs == ((void *)0))
    return ((void *)0);
  prog_num--;
  if (prog_num == bin_num)
    {
      for (i = 0; i < bin_num; i++)
 {
   if (strcmp (prog_dirs[i], bin_dirs[i]) != 0)
     break;
 }
      if (prog_num <= 0 || i == bin_num)
 {
   free_split_directories (prog_dirs);
   free_split_directories (bin_dirs);
   prog_dirs = bin_dirs = (char **) 0;
   return ((void *)0);
 }
    }
  prefix_dirs = split_directories (prefix, &prefix_num);
  if (prefix_dirs == ((void *)0))
    {
      free_split_directories (prog_dirs);
      free_split_directories (bin_dirs);
      return ((void *)0);
    }
  n = (prefix_num < bin_num) ? prefix_num : bin_num;
  for (common = 0; common < n; common++)
    {
      if (strcmp (bin_dirs[common], prefix_dirs[common]) != 0)
 break;
    }
  if (common == 0)
    {
      free_split_directories (prog_dirs);
      free_split_directories (bin_dirs);
      free_split_directories (prefix_dirs);
      return ((void *)0);
    }
  needed_len = 0;
  for (i = 0; i < prog_num; i++)
    needed_len += strlen (prog_dirs[i]);
  needed_len += sizeof ("..") * (bin_num - common);
  for (i = common; i < prefix_num; i++)
    needed_len += strlen (prefix_dirs[i]);
  needed_len += 1;
  ret = (char *) malloc (needed_len);
  if (ret == ((void *)0))
    return ((void *)0);
  *ret = '\0';
  for (i = 0; i < prog_num; i++)
    strcat (ret, prog_dirs[i]);
  ptr = ret + strlen(ret);
  for (i = common; i < bin_num; i++)
    {
      strcpy (ptr, "..");
      ptr += sizeof ("..") - 1;
      *(ptr++) = '/';
    }
  *ptr = '\0';
  for (i = common; i < prefix_num; i++)
    strcat (ret, prefix_dirs[i]);
  free_split_directories (prog_dirs);
  free_split_directories (bin_dirs);
  free_split_directories (prefix_dirs);
  return ret;
}
struct flock
  {
    short int l_type;
    short int l_whence;
    __off_t l_start;
    __off_t l_len;
    __pid_t l_pid;
  };
struct flock64
  {
    short int l_type;
    short int l_whence;
    __off64_t l_start;
    __off64_t l_len;
    __pid_t l_pid;
  };
struct iovec
  {
    void *iov_base;
    size_t iov_len;
  };
enum __pid_type
  {
    F_OWNER_TID = 0,
    F_OWNER_PID,
    F_OWNER_PGRP,
    F_OWNER_GID = F_OWNER_PGRP
  };
struct f_owner_ex
  {
    enum __pid_type type;
    __pid_t pid;
  };
struct file_handle
{
  unsigned int handle_bytes;
  int handle_type;
  unsigned char f_handle[0];
};
extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
    ;
extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
       unsigned int __flags);
extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
    size_t __count, unsigned int __flags);
extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
         __off64_t *__offout, size_t __len,
         unsigned int __flags);
extern ssize_t tee (int __fdin, int __fdout, size_t __len,
      unsigned int __flags);
extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
   __off64_t __len);
extern int name_to_handle_at (int __dfd, const char *__name,
         struct file_handle *__handle, int *__mnt_id,
         int __flags) ;
extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
         int __flags);
extern int fcntl (int __fd, int __cmd, ...);
extern int open (const char *__file, int __oflag, ...) ;
extern int open64 (const char *__file, int __oflag, ...) ;
extern int openat (int __fd, const char *__file, int __oflag, ...)
     ;
extern int openat64 (int __fd, const char *__file, int __oflag, ...)
     ;
extern int creat (const char *__file, mode_t __mode) ;
extern int creat64 (const char *__file, mode_t __mode) ;
extern int posix_fadvise (int __fd, off_t __offset, off_t __len,
     int __advise) ;
extern int posix_fadvise64 (int __fd, off64_t __offset, off64_t __len,
       int __advise) ;
extern int posix_fallocate (int __fd, off_t __offset, off_t __len);
extern int posix_fallocate64 (int __fd, off64_t __offset, off64_t __len);
extern int flock (int __fd, int __operation) ;
extern int mkstemps (char *, int);
static const char *try (const char *, const char *);
static const char *
try (dir, base)
     const char *dir, *base;
{
  if (base != 0)
    return base;
  if (dir != 0
      && access (dir, 4 | 2 | 1) == 0)
    return dir;
  return 0;
}
static const char tmp[] = { '/', 't', 'm', 'p', 0 };
static const char usrtmp[] =
{ '/', 'u', 's', 'r', '/', 't', 'm', 'p', 0 };
static const char vartmp[] =
{ '/', 'v', 'a', 'r', '/', 't', 'm', 'p', 0 };
static char *memoized_tmpdir;
char *
choose_tmpdir ()
{
  const char *base = 0;
  char *tmpdir;
  unsigned int len;
  if (memoized_tmpdir)
    return memoized_tmpdir;
  base = try (getenv ("TMPDIR"), base);
  base = try (getenv ("TMP"), base);
  base = try (getenv ("TEMP"), base);
  base = try ("/tmp", base);
  base = try (vartmp, base);
  base = try (usrtmp, base);
  base = try (tmp, base);
  if (base == 0)
    base = ".";
  len = strlen (base);
  tmpdir = xmalloc (len + 2);
  strcpy (tmpdir, base);
  tmpdir[len] = '/';
  tmpdir[len+1] = '\0';
  memoized_tmpdir = tmpdir;
  return tmpdir;
}
char *
make_temp_file (suffix)
     const char *suffix;
{
  const char *base = choose_tmpdir ();
  char *temp_filename;
  int base_len, suffix_len;
  int fd;
  if (suffix == 0)
    suffix = "";
  base_len = strlen (base);
  suffix_len = strlen (suffix);
  temp_filename = xmalloc (base_len
      + (sizeof("ccXXXXXX") - 1)
      + suffix_len + 1);
  strcpy (temp_filename, base);
  strcpy (temp_filename + base_len, "ccXXXXXX");
  strcpy (temp_filename + base_len + (sizeof("ccXXXXXX") - 1), suffix);
  fd = mkstemps (temp_filename, suffix_len);
  if (fd == -1)
    abort ();
  if (close (fd))
    abort ();
  return temp_filename;
}
struct objalloc
{
  char *current_ptr;
  unsigned int current_space;
  void * chunks;
};
struct objalloc_align { char x; double d; };
extern struct objalloc *objalloc_create (void);
extern void * _objalloc_alloc (struct objalloc *, unsigned long);
extern void objalloc_free (struct objalloc *);
extern void objalloc_free_block (struct objalloc *, void *);
struct objalloc_chunk
{
  struct objalloc_chunk *next;
  char *current_ptr;
};
struct objalloc *
objalloc_create ()
{
  struct objalloc *ret;
  struct objalloc_chunk *chunk;
  ret = (struct objalloc *) malloc (sizeof *ret);
  if (ret == ((void *)0))
    return ((void *)0);
  ret->chunks = (void *) malloc ((4096 - 32));
  if (ret->chunks == ((void *)0))
    {
      free (ret);
      return ((void *)0);
    }
  chunk = (struct objalloc_chunk *) ret->chunks;
  chunk->next = ((void *)0);
  chunk->current_ptr = ((void *)0);
  ret->current_ptr = (char *) chunk + ((sizeof (struct objalloc_chunk) + __builtin_offsetof (objalloc_align, d) - 1) &~ (__builtin_offsetof (objalloc_align, d) - 1));
  ret->current_space = (4096 - 32) - ((sizeof (struct objalloc_chunk) + __builtin_offsetof (objalloc_align, d) - 1) &~ (__builtin_offsetof (objalloc_align, d) - 1));
  return ret;
}
void *
_objalloc_alloc (o, len)
     struct objalloc *o;
     unsigned long len;
{
  if (len == 0)
    len = 1;
  len = (len + __builtin_offsetof (objalloc_align, d) - 1) &~ (__builtin_offsetof (objalloc_align, d) - 1);
  if (len <= o->current_space)
    {
      o->current_ptr += len;
      o->current_space -= len;
      return (void *) (o->current_ptr - len);
    }
  if (len >= (512))
    {
      char *ret;
      struct objalloc_chunk *chunk;
      ret = (char *) malloc (((sizeof (struct objalloc_chunk) + __builtin_offsetof (objalloc_align, d) - 1) &~ (__builtin_offsetof (objalloc_align, d) - 1)) + len);
      if (ret == ((void *)0))
 return ((void *)0);
      chunk = (struct objalloc_chunk *) ret;
      chunk->next = (struct objalloc_chunk *) o->chunks;
      chunk->current_ptr = o->current_ptr;
      o->chunks = (void *) chunk;
      return (void *) (ret + ((sizeof (struct objalloc_chunk) + __builtin_offsetof (objalloc_align, d) - 1) &~ (__builtin_offsetof (objalloc_align, d) - 1)));
    }
  else
    {
      struct objalloc_chunk *chunk;
      chunk = (struct objalloc_chunk *) malloc ((4096 - 32));
      if (chunk == ((void *)0))
 return ((void *)0);
      chunk->next = (struct objalloc_chunk *) o->chunks;
      chunk->current_ptr = ((void *)0);
      o->current_ptr = (char *) chunk + ((sizeof (struct objalloc_chunk) + __builtin_offsetof (objalloc_align, d) - 1) &~ (__builtin_offsetof (objalloc_align, d) - 1));
      o->current_space = (4096 - 32) - ((sizeof (struct objalloc_chunk) + __builtin_offsetof (objalloc_align, d) - 1) &~ (__builtin_offsetof (objalloc_align, d) - 1));
      o->chunks = (void *) chunk;
      return _objalloc_alloc ((o), (len));
    }
}
void
objalloc_free (o)
     struct objalloc *o;
{
  struct objalloc_chunk *l;
  l = (struct objalloc_chunk *) o->chunks;
  while (l != ((void *)0))
    {
      struct objalloc_chunk *next;
      next = l->next;
      free (l);
      l = next;
    }
  free (o);
}
void
objalloc_free_block (o, block)
     struct objalloc *o;
     void * block;
{
  struct objalloc_chunk *p, *small;
  char *b = (char *) block;
  small = ((void *)0);
  for (p = (struct objalloc_chunk *) o->chunks; p != ((void *)0); p = p->next)
    {
      if (p->current_ptr == ((void *)0))
 {
   if (b > (char *) p && b < (char *) p + (4096 - 32))
     break;
   small = p;
 }
      else
 {
   if (b == (char *) p + ((sizeof (struct objalloc_chunk) + __builtin_offsetof (objalloc_align, d) - 1) &~ (__builtin_offsetof (objalloc_align, d) - 1)))
     break;
 }
    }
  if (p == ((void *)0))
    abort ();
  if (p->current_ptr == ((void *)0))
    {
      struct objalloc_chunk *q;
      struct objalloc_chunk *first;
      first = ((void *)0);
      q = (struct objalloc_chunk *) o->chunks;
      while (q != p)
 {
   struct objalloc_chunk *next;
   next = q->next;
   if (small != ((void *)0))
     {
       if (small == q)
  small = ((void *)0);
       free (q);
     }
   else if (q->current_ptr > b)
     free (q);
   else if (first == ((void *)0))
     first = q;
   q = next;
 }
      if (first == ((void *)0))
 first = p;
      o->chunks = (void *) first;
      o->current_ptr = b;
      o->current_space = ((char *) p + (4096 - 32)) - b;
    }
  else
    {
      struct objalloc_chunk *q;
      char *current_ptr;
      current_ptr = p->current_ptr;
      p = p->next;
      q = (struct objalloc_chunk *) o->chunks;
      while (q != p)
 {
   struct objalloc_chunk *next;
   next = q->next;
   free (q);
   q = next;
 }
      o->chunks = (void *) p;
      while (p->current_ptr != ((void *)0))
 p = p->next;
      o->current_ptr = current_ptr;
      o->current_space = ((char *) p + (4096 - 32)) - current_ptr;
    }
}
struct _obstack_chunk
{
  char *limit;
  struct _obstack_chunk *prev;
  char contents[4];
};
struct obstack
{
  long chunk_size;
  struct _obstack_chunk *chunk;
  char *object_base;
  char *next_free;
  char *chunk_limit;
  long int temp;
  int alignment_mask;
  struct _obstack_chunk *(*chunkfun) (void *, long);
  void (*freefun) (void *, struct _obstack_chunk *);
  void *extra_arg;
  unsigned use_extra_arg:1;
  unsigned maybe_empty_object:1;
  unsigned alloc_failed:1;
};
extern void _obstack_newchunk (struct obstack *, int);
extern void _obstack_free (struct obstack *, void *);
extern int _obstack_begin (struct obstack *, int, int,
       void *(*) (long), void (*) (void *));
extern int _obstack_begin_1 (struct obstack *, int, int,
        void *(*) (void *, long),
        void (*) (void *, void *), void *);
extern int _obstack_memory_used (struct obstack *);
void obstack_init (struct obstack *obstack);
void * obstack_alloc (struct obstack *obstack, int size);
void * obstack_copy (struct obstack *obstack, void *address, int size);
void * obstack_copy0 (struct obstack *obstack, void *address, int size);
void obstack_free (struct obstack *obstack, void *block);
void obstack_blank (struct obstack *obstack, int size);
void obstack_grow (struct obstack *obstack, void *data, int size);
void obstack_grow0 (struct obstack *obstack, void *data, int size);
void obstack_1grow (struct obstack *obstack, int data_char);
void obstack_ptr_grow (struct obstack *obstack, void *data);
void obstack_int_grow (struct obstack *obstack, int data);
void * obstack_finish (struct obstack *obstack);
int obstack_object_size (struct obstack *obstack);
int obstack_room (struct obstack *obstack);
void obstack_make_room (struct obstack *obstack, int size);
void obstack_1grow_fast (struct obstack *obstack, int data_char);
void obstack_ptr_grow_fast (struct obstack *obstack, void *data);
void obstack_int_grow_fast (struct obstack *obstack, int data);
void obstack_blank_fast (struct obstack *obstack, int size);
void * obstack_base (struct obstack *obstack);
void * obstack_next_free (struct obstack *obstack);
int obstack_alignment_mask (struct obstack *obstack);
int obstack_chunk_size (struct obstack *obstack);
int obstack_memory_used (struct obstack *obstack);
extern void (*obstack_alloc_failed_handler) (void);
extern int obstack_exit_failure;
struct partition_elem
{
  int class_element;
  struct partition_elem* next;
  unsigned class_count;
};
typedef struct partition_def
{
  int num_elements;
  struct partition_elem elements[1];
} *partition;
extern partition partition_new (int);
extern void partition_delete (partition);
extern int partition_union (partition, int, int)
           ;
extern void partition_print (partition, FILE*)
             ;
static int elem_compare (const void *, const void *);
partition
partition_new (num_elements)
     int num_elements;
{
  int e;
  partition part = (partition)
    xmalloc (sizeof (struct partition_def) +
      (num_elements - 1) * sizeof (struct partition_elem));
  part->num_elements = num_elements;
  for (e = 0; e < num_elements; ++e)
    {
      part->elements[e].class_element = e;
      part->elements[e].next = &(part->elements[e]);
      part->elements[e].class_count = 1;
    }
  return part;
}
void
partition_delete (part)
      partition part;
{
  free (part);
}
int
partition_union (part, elem1, elem2)
     partition part;
     int elem1;
     int elem2;
{
  struct partition_elem *elements = part->elements;
  struct partition_elem *e1;
  struct partition_elem *e2;
  struct partition_elem *p;
  struct partition_elem *old_next;
  int class_element = elements[elem1].class_element;
  if (class_element == elements[elem2].class_element)
    return class_element;
  if (elements[elem1].class_count < elements[elem2].class_count)
    {
      int temp = elem1;
      elem1 = elem2;
      elem2 = temp;
      class_element = elements[elem1].class_element;
    }
  e1 = &(elements[elem1]);
  e2 = &(elements[elem2]);
  elements[class_element].class_count
    += elements[e2->class_element].class_count;
  e2->class_element = class_element;
  for (p = e2->next; p != e2; p = p->next)
    p->class_element = class_element;
  old_next = e1->next;
  e1->next = e2->next;
  e2->next = old_next;
  return class_element;
}
static int
elem_compare (elem1, elem2)
     const void *elem1;
     const void *elem2;
{
  int e1 = * (const int *) elem1;
  int e2 = * (const int *) elem2;
  if (e1 < e2)
    return -1;
  else if (e1 > e2)
    return 1;
  else
    return 0;
}
void
partition_print (part, fp)
     partition part;
     FILE *fp;
{
  char *done;
  int num_elements = part->num_elements;
  struct partition_elem *elements = part->elements;
  int *class_elements;
  int e;
  done = (char *) xmalloc (num_elements);
  memset (done, 0, num_elements);
  class_elements = (int *) xmalloc (num_elements * sizeof (int));
  fputc ('[', fp);
  for (e = 0; e < num_elements; ++e)
    if (! done[e])
      {
 int c = e;
 int count = elements[elements[e].class_element].class_count;
 int i;
 for (i = 0; i < count; ++i) {
   class_elements[i] = c;
   done[c] = 1;
   c = elements[c].next - elements;
 }
 qsort ((void *) class_elements, count, sizeof (int), elem_compare);
 fputc ('(', fp);
 for (i = 0; i < count; ++i)
   fprintf (fp, i == 0 ? "%d" : " %d", class_elements[i]);
 fputc (')', fp);
      }
  fputc (']', fp);
  free (done);
}
struct completion;
struct __sysctl_args {
 int *name;
 int nlen;
 void *oldval;
 size_t *oldlenp;
 void *newval;
 size_t newlen;
 unsigned long __unused[4];
};
enum
{
 CTL_KERN=1,
 CTL_VM=2,
 CTL_NET=3,
 CTL_PROC=4,
 CTL_FS=5,
 CTL_DEBUG=6,
 CTL_DEV=7,
 CTL_BUS=8,
 CTL_ABI=9,
 CTL_CPU=10,
 CTL_ARLAN=254,
 CTL_S390DBF=5677,
 CTL_SUNRPC=7249,
 CTL_PM=9899,
 CTL_FRV=9898
};
enum
{
 CTL_BUS_ISA=1
};
enum
{
 INOTIFY_MAX_USER_INSTANCES=1,
 INOTIFY_MAX_USER_WATCHES=2,
 INOTIFY_MAX_QUEUED_EVENTS=3
};
enum
{
 KERN_OSTYPE=1,
 KERN_OSRELEASE=2,
 KERN_OSREV=3,
 KERN_VERSION=4,
 KERN_SECUREMASK=5,
 KERN_PROF=6,
 KERN_NODENAME=7,
 KERN_DOMAINNAME=8,
 KERN_PANIC=15,
 KERN_REALROOTDEV=16,
 KERN_SPARC_REBOOT=21,
 KERN_CTLALTDEL=22,
 KERN_PRINTK=23,
 KERN_NAMETRANS=24,
 KERN_PPC_HTABRECLAIM=25,
 KERN_PPC_ZEROPAGED=26,
 KERN_PPC_POWERSAVE_NAP=27,
 KERN_MODPROBE=28,
 KERN_SG_BIG_BUFF=29,
 KERN_ACCT=30,
 KERN_PPC_L2CR=31,
 KERN_RTSIGNR=32,
 KERN_RTSIGMAX=33,
 KERN_SHMMAX=34,
 KERN_MSGMAX=35,
 KERN_MSGMNB=36,
 KERN_MSGPOOL=37,
 KERN_SYSRQ=38,
 KERN_MAX_THREADS=39,
  KERN_RANDOM=40,
  KERN_SHMALL=41,
  KERN_MSGMNI=42,
  KERN_SEM=43,
  KERN_SPARC_STOP_A=44,
  KERN_SHMMNI=45,
 KERN_OVERFLOWUID=46,
 KERN_OVERFLOWGID=47,
 KERN_SHMPATH=48,
 KERN_HOTPLUG=49,
 KERN_IEEE_EMULATION_WARNINGS=50,
 KERN_S390_USER_DEBUG_LOGGING=51,
 KERN_CORE_USES_PID=52,
 KERN_TAINTED=53,
 KERN_CADPID=54,
 KERN_PIDMAX=55,
   KERN_CORE_PATTERN=56,
 KERN_PANIC_ON_OOPS=57,
 KERN_HPPA_PWRSW=58,
 KERN_HPPA_UNALIGNED=59,
 KERN_PRINTK_RATELIMIT=60,
 KERN_PRINTK_RATELIMIT_BURST=61,
 KERN_PTY=62,
 KERN_NGROUPS_MAX=63,
 KERN_SPARC_SCONS_PWROFF=64,
 KERN_HZ_TIMER=65,
 KERN_UNKNOWN_NMI_PANIC=66,
 KERN_BOOTLOADER_TYPE=67,
 KERN_RANDOMIZE=68,
 KERN_SETUID_DUMPABLE=69,
 KERN_SPIN_RETRY=70,
 KERN_ACPI_VIDEO_FLAGS=71,
 KERN_IA64_UNALIGNED=72,
 KERN_COMPAT_LOG=73,
 KERN_MAX_LOCK_DEPTH=74,
 KERN_NMI_WATCHDOG=75,
 KERN_PANIC_ON_NMI=76,
 KERN_PANIC_ON_WARN=77
};
enum
{
 VM_UNUSED1=1,
 VM_UNUSED2=2,
 VM_UNUSED3=3,
 VM_UNUSED4=4,
 VM_OVERCOMMIT_MEMORY=5,
 VM_UNUSED5=6,
 VM_UNUSED7=7,
 VM_UNUSED8=8,
 VM_UNUSED9=9,
 VM_PAGE_CLUSTER=10,
 VM_DIRTY_BACKGROUND=11,
 VM_DIRTY_RATIO=12,
 VM_DIRTY_WB_CS=13,
 VM_DIRTY_EXPIRE_CS=14,
 VM_NR_PDFLUSH_THREADS=15,
 VM_OVERCOMMIT_RATIO=16,
 VM_PAGEBUF=17,
 VM_HUGETLB_PAGES=18,
 VM_SWAPPINESS=19,
 VM_LOWMEM_RESERVE_RATIO=20,
 VM_MIN_FREE_KBYTES=21,
 VM_MAX_MAP_COUNT=22,
 VM_LAPTOP_MODE=23,
 VM_BLOCK_DUMP=24,
 VM_HUGETLB_GROUP=25,
 VM_VFS_CACHE_PRESSURE=26,
 VM_LEGACY_VA_LAYOUT=27,
 VM_SWAP_TOKEN_TIMEOUT=28,
 VM_DROP_PAGECACHE=29,
 VM_PERCPU_PAGELIST_FRACTION=30,
 VM_ZONE_RECLAIM_MODE=31,
 VM_MIN_UNMAPPED=32,
 VM_PANIC_ON_OOM=33,
 VM_VDSO_ENABLED=34,
 VM_MIN_SLAB=35
};
enum
{
 NET_CORE=1,
 NET_ETHER=2,
 NET_802=3,
 NET_UNIX=4,
 NET_IPV4=5,
 NET_IPX=6,
 NET_ATALK=7,
 NET_NETROM=8,
 NET_AX25=9,
 NET_BRIDGE=10,
 NET_ROSE=11,
 NET_IPV6=12,
 NET_X25=13,
 NET_TR=14,
 NET_DECNET=15,
 NET_ECONET=16,
 NET_SCTP=17,
 NET_LLC=18,
 NET_NETFILTER=19,
 NET_DCCP=20,
 NET_IRDA=412
};
enum
{
 RANDOM_POOLSIZE=1,
 RANDOM_ENTROPY_COUNT=2,
 RANDOM_READ_THRESH=3,
 RANDOM_WRITE_THRESH=4,
 RANDOM_BOOT_ID=5,
 RANDOM_UUID=6
};
enum
{
 PTY_MAX=1,
 PTY_NR=2
};
enum
{
 BUS_ISA_MEM_BASE=1,
 BUS_ISA_PORT_BASE=2,
 BUS_ISA_PORT_SHIFT=3
};
enum
{
 NET_CORE_WMEM_MAX=1,
 NET_CORE_RMEM_MAX=2,
 NET_CORE_WMEM_DEFAULT=3,
 NET_CORE_RMEM_DEFAULT=4,
 NET_CORE_MAX_BACKLOG=6,
 NET_CORE_FASTROUTE=7,
 NET_CORE_MSG_COST=8,
 NET_CORE_MSG_BURST=9,
 NET_CORE_OPTMEM_MAX=10,
 NET_CORE_HOT_LIST_LENGTH=11,
 NET_CORE_DIVERT_VERSION=12,
 NET_CORE_NO_CONG_THRESH=13,
 NET_CORE_NO_CONG=14,
 NET_CORE_LO_CONG=15,
 NET_CORE_MOD_CONG=16,
 NET_CORE_DEV_WEIGHT=17,
 NET_CORE_SOMAXCONN=18,
 NET_CORE_BUDGET=19,
 NET_CORE_AEVENT_ETIME=20,
 NET_CORE_AEVENT_RSEQTH=21,
 NET_CORE_WARNINGS=22
};
enum
{
 NET_UNIX_DESTROY_DELAY=1,
 NET_UNIX_DELETE_DELAY=2,
 NET_UNIX_MAX_DGRAM_QLEN=3
};
enum
{
 NET_NF_CONNTRACK_MAX=1,
 NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT=2,
 NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV=3,
 NET_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED=4,
 NET_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT=5,
 NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT=6,
 NET_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK=7,
 NET_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT=8,
 NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE=9,
 NET_NF_CONNTRACK_UDP_TIMEOUT=10,
 NET_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11,
 NET_NF_CONNTRACK_ICMP_TIMEOUT=12,
 NET_NF_CONNTRACK_GENERIC_TIMEOUT=13,
 NET_NF_CONNTRACK_BUCKETS=14,
 NET_NF_CONNTRACK_LOG_INVALID=15,
 NET_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS=16,
 NET_NF_CONNTRACK_TCP_LOOSE=17,
 NET_NF_CONNTRACK_TCP_BE_LIBERAL=18,
 NET_NF_CONNTRACK_TCP_MAX_RETRANS=19,
 NET_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED=20,
 NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT=21,
 NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED=22,
 NET_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED=23,
 NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT=24,
 NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD=25,
 NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT=26,
 NET_NF_CONNTRACK_COUNT=27,
 NET_NF_CONNTRACK_ICMPV6_TIMEOUT=28,
 NET_NF_CONNTRACK_FRAG6_TIMEOUT=29,
 NET_NF_CONNTRACK_FRAG6_LOW_THRESH=30,
 NET_NF_CONNTRACK_FRAG6_HIGH_THRESH=31,
 NET_NF_CONNTRACK_CHECKSUM=32
};
enum
{
 NET_IPV4_FORWARD=8,
 NET_IPV4_DYNADDR=9,
 NET_IPV4_CONF=16,
 NET_IPV4_NEIGH=17,
 NET_IPV4_ROUTE=18,
 NET_IPV4_FIB_HASH=19,
 NET_IPV4_NETFILTER=20,
 NET_IPV4_TCP_TIMESTAMPS=33,
 NET_IPV4_TCP_WINDOW_SCALING=34,
 NET_IPV4_TCP_SACK=35,
 NET_IPV4_TCP_RETRANS_COLLAPSE=36,
 NET_IPV4_DEFAULT_TTL=37,
 NET_IPV4_AUTOCONFIG=38,
 NET_IPV4_NO_PMTU_DISC=39,
 NET_IPV4_TCP_SYN_RETRIES=40,
 NET_IPV4_IPFRAG_HIGH_THRESH=41,
 NET_IPV4_IPFRAG_LOW_THRESH=42,
 NET_IPV4_IPFRAG_TIME=43,
 NET_IPV4_TCP_MAX_KA_PROBES=44,
 NET_IPV4_TCP_KEEPALIVE_TIME=45,
 NET_IPV4_TCP_KEEPALIVE_PROBES=46,
 NET_IPV4_TCP_RETRIES1=47,
 NET_IPV4_TCP_RETRIES2=48,
 NET_IPV4_TCP_FIN_TIMEOUT=49,
 NET_IPV4_IP_MASQ_DEBUG=50,
 NET_TCP_SYNCOOKIES=51,
 NET_TCP_STDURG=52,
 NET_TCP_RFC1337=53,
 NET_TCP_SYN_TAILDROP=54,
 NET_TCP_MAX_SYN_BACKLOG=55,
 NET_IPV4_LOCAL_PORT_RANGE=56,
 NET_IPV4_ICMP_ECHO_IGNORE_ALL=57,
 NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS=58,
 NET_IPV4_ICMP_SOURCEQUENCH_RATE=59,
 NET_IPV4_ICMP_DESTUNREACH_RATE=60,
 NET_IPV4_ICMP_TIMEEXCEED_RATE=61,
 NET_IPV4_ICMP_PARAMPROB_RATE=62,
 NET_IPV4_ICMP_ECHOREPLY_RATE=63,
 NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES=64,
 NET_IPV4_IGMP_MAX_MEMBERSHIPS=65,
 NET_TCP_TW_RECYCLE=66,
 NET_IPV4_ALWAYS_DEFRAG=67,
 NET_IPV4_TCP_KEEPALIVE_INTVL=68,
 NET_IPV4_INET_PEER_THRESHOLD=69,
 NET_IPV4_INET_PEER_MINTTL=70,
 NET_IPV4_INET_PEER_MAXTTL=71,
 NET_IPV4_INET_PEER_GC_MINTIME=72,
 NET_IPV4_INET_PEER_GC_MAXTIME=73,
 NET_TCP_ORPHAN_RETRIES=74,
 NET_TCP_ABORT_ON_OVERFLOW=75,
 NET_TCP_SYNACK_RETRIES=76,
 NET_TCP_MAX_ORPHANS=77,
 NET_TCP_MAX_TW_BUCKETS=78,
 NET_TCP_FACK=79,
 NET_TCP_REORDERING=80,
 NET_TCP_ECN=81,
 NET_TCP_DSACK=82,
 NET_TCP_MEM=83,
 NET_TCP_WMEM=84,
 NET_TCP_RMEM=85,
 NET_TCP_APP_WIN=86,
 NET_TCP_ADV_WIN_SCALE=87,
 NET_IPV4_NONLOCAL_BIND=88,
 NET_IPV4_ICMP_RATELIMIT=89,
 NET_IPV4_ICMP_RATEMASK=90,
 NET_TCP_TW_REUSE=91,
 NET_TCP_FRTO=92,
 NET_TCP_LOW_LATENCY=93,
 NET_IPV4_IPFRAG_SECRET_INTERVAL=94,
 NET_IPV4_IGMP_MAX_MSF=96,
 NET_TCP_NO_METRICS_SAVE=97,
 NET_TCP_DEFAULT_WIN_SCALE=105,
 NET_TCP_MODERATE_RCVBUF=106,
 NET_TCP_TSO_WIN_DIVISOR=107,
 NET_TCP_BIC_BETA=108,
 NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR=109,
 NET_TCP_CONG_CONTROL=110,
 NET_TCP_ABC=111,
 NET_IPV4_IPFRAG_MAX_DIST=112,
  NET_TCP_MTU_PROBING=113,
 NET_TCP_BASE_MSS=114,
 NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS=115,
 NET_TCP_DMA_COPYBREAK=116,
 NET_TCP_SLOW_START_AFTER_IDLE=117,
 NET_CIPSOV4_CACHE_ENABLE=118,
 NET_CIPSOV4_CACHE_BUCKET_SIZE=119,
 NET_CIPSOV4_RBM_OPTFMT=120,
 NET_CIPSOV4_RBM_STRICTVALID=121,
 NET_TCP_AVAIL_CONG_CONTROL=122,
 NET_TCP_ALLOWED_CONG_CONTROL=123,
 NET_TCP_MAX_SSTHRESH=124,
 NET_TCP_FRTO_RESPONSE=125
};
enum {
 NET_IPV4_ROUTE_FLUSH=1,
 NET_IPV4_ROUTE_MIN_DELAY=2,
 NET_IPV4_ROUTE_MAX_DELAY=3,
 NET_IPV4_ROUTE_GC_THRESH=4,
 NET_IPV4_ROUTE_MAX_SIZE=5,
 NET_IPV4_ROUTE_GC_MIN_INTERVAL=6,
 NET_IPV4_ROUTE_GC_TIMEOUT=7,
 NET_IPV4_ROUTE_GC_INTERVAL=8,
 NET_IPV4_ROUTE_REDIRECT_LOAD=9,
 NET_IPV4_ROUTE_REDIRECT_NUMBER=10,
 NET_IPV4_ROUTE_REDIRECT_SILENCE=11,
 NET_IPV4_ROUTE_ERROR_COST=12,
 NET_IPV4_ROUTE_ERROR_BURST=13,
 NET_IPV4_ROUTE_GC_ELASTICITY=14,
 NET_IPV4_ROUTE_MTU_EXPIRES=15,
 NET_IPV4_ROUTE_MIN_PMTU=16,
 NET_IPV4_ROUTE_MIN_ADVMSS=17,
 NET_IPV4_ROUTE_SECRET_INTERVAL=18,
 NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS=19
};
enum
{
 NET_PROTO_CONF_ALL=-2,
 NET_PROTO_CONF_DEFAULT=-3
};
enum
{
 NET_IPV4_CONF_FORWARDING=1,
 NET_IPV4_CONF_MC_FORWARDING=2,
 NET_IPV4_CONF_PROXY_ARP=3,
 NET_IPV4_CONF_ACCEPT_REDIRECTS=4,
 NET_IPV4_CONF_SECURE_REDIRECTS=5,
 NET_IPV4_CONF_SEND_REDIRECTS=6,
 NET_IPV4_CONF_SHARED_MEDIA=7,
 NET_IPV4_CONF_RP_FILTER=8,
 NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE=9,
 NET_IPV4_CONF_BOOTP_RELAY=10,
 NET_IPV4_CONF_LOG_MARTIANS=11,
 NET_IPV4_CONF_TAG=12,
 NET_IPV4_CONF_ARPFILTER=13,
 NET_IPV4_CONF_MEDIUM_ID=14,
 NET_IPV4_CONF_NOXFRM=15,
 NET_IPV4_CONF_NOPOLICY=16,
 NET_IPV4_CONF_FORCE_IGMP_VERSION=17,
 NET_IPV4_CONF_ARP_ANNOUNCE=18,
 NET_IPV4_CONF_ARP_IGNORE=19,
 NET_IPV4_CONF_PROMOTE_SECONDARIES=20,
 NET_IPV4_CONF_ARP_ACCEPT=21,
 NET_IPV4_CONF_ARP_NOTIFY=22
};
enum
{
 NET_IPV4_NF_CONNTRACK_MAX=1,
 NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT=2,
 NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV=3,
 NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED=4,
 NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT=5,
 NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT=6,
 NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK=7,
 NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT=8,
 NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE=9,
 NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT=10,
 NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11,
 NET_IPV4_NF_CONNTRACK_ICMP_TIMEOUT=12,
 NET_IPV4_NF_CONNTRACK_GENERIC_TIMEOUT=13,
 NET_IPV4_NF_CONNTRACK_BUCKETS=14,
 NET_IPV4_NF_CONNTRACK_LOG_INVALID=15,
 NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS=16,
 NET_IPV4_NF_CONNTRACK_TCP_LOOSE=17,
 NET_IPV4_NF_CONNTRACK_TCP_BE_LIBERAL=18,
 NET_IPV4_NF_CONNTRACK_TCP_MAX_RETRANS=19,
  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED=20,
  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT=21,
  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED=22,
  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED=23,
  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT=24,
  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD=25,
  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT=26,
 NET_IPV4_NF_CONNTRACK_COUNT=27,
 NET_IPV4_NF_CONNTRACK_CHECKSUM=28
};
enum {
 NET_IPV6_CONF=16,
 NET_IPV6_NEIGH=17,
 NET_IPV6_ROUTE=18,
 NET_IPV6_ICMP=19,
 NET_IPV6_BINDV6ONLY=20,
 NET_IPV6_IP6FRAG_HIGH_THRESH=21,
 NET_IPV6_IP6FRAG_LOW_THRESH=22,
 NET_IPV6_IP6FRAG_TIME=23,
 NET_IPV6_IP6FRAG_SECRET_INTERVAL=24,
 NET_IPV6_MLD_MAX_MSF=25
};
enum {
 NET_IPV6_ROUTE_FLUSH=1,
 NET_IPV6_ROUTE_GC_THRESH=2,
 NET_IPV6_ROUTE_MAX_SIZE=3,
 NET_IPV6_ROUTE_GC_MIN_INTERVAL=4,
 NET_IPV6_ROUTE_GC_TIMEOUT=5,
 NET_IPV6_ROUTE_GC_INTERVAL=6,
 NET_IPV6_ROUTE_GC_ELASTICITY=7,
 NET_IPV6_ROUTE_MTU_EXPIRES=8,
 NET_IPV6_ROUTE_MIN_ADVMSS=9,
 NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS=10
};
enum {
 NET_IPV6_FORWARDING=1,
 NET_IPV6_HOP_LIMIT=2,
 NET_IPV6_MTU=3,
 NET_IPV6_ACCEPT_RA=4,
 NET_IPV6_ACCEPT_REDIRECTS=5,
 NET_IPV6_AUTOCONF=6,
 NET_IPV6_DAD_TRANSMITS=7,
 NET_IPV6_RTR_SOLICITS=8,
 NET_IPV6_RTR_SOLICIT_INTERVAL=9,
 NET_IPV6_RTR_SOLICIT_DELAY=10,
 NET_IPV6_USE_TEMPADDR=11,
 NET_IPV6_TEMP_VALID_LFT=12,
 NET_IPV6_TEMP_PREFERED_LFT=13,
 NET_IPV6_REGEN_MAX_RETRY=14,
 NET_IPV6_MAX_DESYNC_FACTOR=15,
 NET_IPV6_MAX_ADDRESSES=16,
 NET_IPV6_FORCE_MLD_VERSION=17,
 NET_IPV6_ACCEPT_RA_DEFRTR=18,
 NET_IPV6_ACCEPT_RA_PINFO=19,
 NET_IPV6_ACCEPT_RA_RTR_PREF=20,
 NET_IPV6_RTR_PROBE_INTERVAL=21,
 NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN=22,
 NET_IPV6_PROXY_NDP=23,
 NET_IPV6_ACCEPT_SOURCE_ROUTE=25,
 NET_IPV6_ACCEPT_RA_FROM_LOCAL=26,
 __NET_IPV6_MAX
};
enum {
 NET_IPV6_ICMP_RATELIMIT=1
};
enum {
 NET_NEIGH_MCAST_SOLICIT=1,
 NET_NEIGH_UCAST_SOLICIT=2,
 NET_NEIGH_APP_SOLICIT=3,
 NET_NEIGH_RETRANS_TIME=4,
 NET_NEIGH_REACHABLE_TIME=5,
 NET_NEIGH_DELAY_PROBE_TIME=6,
 NET_NEIGH_GC_STALE_TIME=7,
 NET_NEIGH_UNRES_QLEN=8,
 NET_NEIGH_PROXY_QLEN=9,
 NET_NEIGH_ANYCAST_DELAY=10,
 NET_NEIGH_PROXY_DELAY=11,
 NET_NEIGH_LOCKTIME=12,
 NET_NEIGH_GC_INTERVAL=13,
 NET_NEIGH_GC_THRESH1=14,
 NET_NEIGH_GC_THRESH2=15,
 NET_NEIGH_GC_THRESH3=16,
 NET_NEIGH_RETRANS_TIME_MS=17,
 NET_NEIGH_REACHABLE_TIME_MS=18
};
enum {
 NET_DCCP_DEFAULT=1
};
enum {
 NET_IPX_PPROP_BROADCASTING=1,
 NET_IPX_FORWARDING=2
};
enum {
 NET_LLC2=1,
 NET_LLC_STATION=2
};
enum {
 NET_LLC2_TIMEOUT=1
};
enum {
 NET_LLC_STATION_ACK_TIMEOUT=1
};
enum {
 NET_LLC2_ACK_TIMEOUT=1,
 NET_LLC2_P_TIMEOUT=2,
 NET_LLC2_REJ_TIMEOUT=3,
 NET_LLC2_BUSY_TIMEOUT=4
};
enum {
 NET_ATALK_AARP_EXPIRY_TIME=1,
 NET_ATALK_AARP_TICK_TIME=2,
 NET_ATALK_AARP_RETRANSMIT_LIMIT=3,
 NET_ATALK_AARP_RESOLVE_TIME=4
};
enum {
 NET_NETROM_DEFAULT_PATH_QUALITY=1,
 NET_NETROM_OBSOLESCENCE_COUNT_INITIALISER=2,
 NET_NETROM_NETWORK_TTL_INITIALISER=3,
 NET_NETROM_TRANSPORT_TIMEOUT=4,
 NET_NETROM_TRANSPORT_MAXIMUM_TRIES=5,
 NET_NETROM_TRANSPORT_ACKNOWLEDGE_DELAY=6,
 NET_NETROM_TRANSPORT_BUSY_DELAY=7,
 NET_NETROM_TRANSPORT_REQUESTED_WINDOW_SIZE=8,
 NET_NETROM_TRANSPORT_NO_ACTIVITY_TIMEOUT=9,
 NET_NETROM_ROUTING_CONTROL=10,
 NET_NETROM_LINK_FAILS_COUNT=11,
 NET_NETROM_RESET=12
};
enum {
 NET_AX25_IP_DEFAULT_MODE=1,
 NET_AX25_DEFAULT_MODE=2,
 NET_AX25_BACKOFF_TYPE=3,
 NET_AX25_CONNECT_MODE=4,
 NET_AX25_STANDARD_WINDOW=5,
 NET_AX25_EXTENDED_WINDOW=6,
 NET_AX25_T1_TIMEOUT=7,
 NET_AX25_T2_TIMEOUT=8,
 NET_AX25_T3_TIMEOUT=9,
 NET_AX25_IDLE_TIMEOUT=10,
 NET_AX25_N2=11,
 NET_AX25_PACLEN=12,
 NET_AX25_PROTOCOL=13,
 NET_AX25_DAMA_SLAVE_TIMEOUT=14
};
enum {
 NET_ROSE_RESTART_REQUEST_TIMEOUT=1,
 NET_ROSE_CALL_REQUEST_TIMEOUT=2,
 NET_ROSE_RESET_REQUEST_TIMEOUT=3,
 NET_ROSE_CLEAR_REQUEST_TIMEOUT=4,
 NET_ROSE_ACK_HOLD_BACK_TIMEOUT=5,
 NET_ROSE_ROUTING_CONTROL=6,
 NET_ROSE_LINK_FAIL_TIMEOUT=7,
 NET_ROSE_MAX_VCS=8,
 NET_ROSE_WINDOW_SIZE=9,
 NET_ROSE_NO_ACTIVITY_TIMEOUT=10
};
enum {
 NET_X25_RESTART_REQUEST_TIMEOUT=1,
 NET_X25_CALL_REQUEST_TIMEOUT=2,
 NET_X25_RESET_REQUEST_TIMEOUT=3,
 NET_X25_CLEAR_REQUEST_TIMEOUT=4,
 NET_X25_ACK_HOLD_BACK_TIMEOUT=5,
 NET_X25_FORWARD=6
};
enum
{
 NET_TR_RIF_TIMEOUT=1
};
enum {
 NET_DECNET_NODE_TYPE = 1,
 NET_DECNET_NODE_ADDRESS = 2,
 NET_DECNET_NODE_NAME = 3,
 NET_DECNET_DEFAULT_DEVICE = 4,
 NET_DECNET_TIME_WAIT = 5,
 NET_DECNET_DN_COUNT = 6,
 NET_DECNET_DI_COUNT = 7,
 NET_DECNET_DR_COUNT = 8,
 NET_DECNET_DST_GC_INTERVAL = 9,
 NET_DECNET_CONF = 10,
 NET_DECNET_NO_FC_MAX_CWND = 11,
 NET_DECNET_MEM = 12,
 NET_DECNET_RMEM = 13,
 NET_DECNET_WMEM = 14,
 NET_DECNET_DEBUG_LEVEL = 255
};
enum {
 NET_DECNET_CONF_LOOPBACK = -2,
 NET_DECNET_CONF_DDCMP = -3,
 NET_DECNET_CONF_PPP = -4,
 NET_DECNET_CONF_X25 = -5,
 NET_DECNET_CONF_GRE = -6,
 NET_DECNET_CONF_ETHER = -7
};
enum {
 NET_DECNET_CONF_DEV_PRIORITY = 1,
 NET_DECNET_CONF_DEV_T1 = 2,
 NET_DECNET_CONF_DEV_T2 = 3,
 NET_DECNET_CONF_DEV_T3 = 4,
 NET_DECNET_CONF_DEV_FORWARDING = 5,
 NET_DECNET_CONF_DEV_BLKSIZE = 6,
 NET_DECNET_CONF_DEV_STATE = 7
};
enum {
 NET_SCTP_RTO_INITIAL = 1,
 NET_SCTP_RTO_MIN = 2,
 NET_SCTP_RTO_MAX = 3,
 NET_SCTP_RTO_ALPHA = 4,
 NET_SCTP_RTO_BETA = 5,
 NET_SCTP_VALID_COOKIE_LIFE = 6,
 NET_SCTP_ASSOCIATION_MAX_RETRANS = 7,
 NET_SCTP_PATH_MAX_RETRANS = 8,
 NET_SCTP_MAX_INIT_RETRANSMITS = 9,
 NET_SCTP_HB_INTERVAL = 10,
 NET_SCTP_PRESERVE_ENABLE = 11,
 NET_SCTP_MAX_BURST = 12,
 NET_SCTP_ADDIP_ENABLE = 13,
 NET_SCTP_PRSCTP_ENABLE = 14,
 NET_SCTP_SNDBUF_POLICY = 15,
 NET_SCTP_SACK_TIMEOUT = 16,
 NET_SCTP_RCVBUF_POLICY = 17
};
enum {
 NET_BRIDGE_NF_CALL_ARPTABLES = 1,
 NET_BRIDGE_NF_CALL_IPTABLES = 2,
 NET_BRIDGE_NF_CALL_IP6TABLES = 3,
 NET_BRIDGE_NF_FILTER_VLAN_TAGGED = 4,
 NET_BRIDGE_NF_FILTER_PPPOE_TAGGED = 5
};
enum {
 NET_IRDA_DISCOVERY=1,
 NET_IRDA_DEVNAME=2,
 NET_IRDA_DEBUG=3,
 NET_IRDA_FAST_POLL=4,
 NET_IRDA_DISCOVERY_SLOTS=5,
 NET_IRDA_DISCOVERY_TIMEOUT=6,
 NET_IRDA_SLOT_TIMEOUT=7,
 NET_IRDA_MAX_BAUD_RATE=8,
 NET_IRDA_MIN_TX_TURN_TIME=9,
 NET_IRDA_MAX_TX_DATA_SIZE=10,
 NET_IRDA_MAX_TX_WINDOW=11,
 NET_IRDA_MAX_NOREPLY_TIME=12,
 NET_IRDA_WARN_NOREPLY_TIME=13,
 NET_IRDA_LAP_KEEPALIVE_TIME=14
};
enum
{
 FS_NRINODE=1,
 FS_STATINODE=2,
 FS_MAXINODE=3,
 FS_NRDQUOT=4,
 FS_MAXDQUOT=5,
 FS_NRFILE=6,
 FS_MAXFILE=7,
 FS_DENTRY=8,
 FS_NRSUPER=9,
 FS_MAXSUPER=10,
 FS_OVERFLOWUID=11,
 FS_OVERFLOWGID=12,
 FS_LEASES=13,
 FS_DIR_NOTIFY=14,
 FS_LEASE_TIME=15,
 FS_DQSTATS=16,
 FS_XFS=17,
 FS_AIO_NR=18,
 FS_AIO_MAX_NR=19,
 FS_INOTIFY=20,
 FS_OCFS2=988
};
enum {
 FS_DQ_LOOKUPS = 1,
 FS_DQ_DROPS = 2,
 FS_DQ_READS = 3,
 FS_DQ_WRITES = 4,
 FS_DQ_CACHE_HITS = 5,
 FS_DQ_ALLOCATED = 6,
 FS_DQ_FREE = 7,
 FS_DQ_SYNCS = 8,
 FS_DQ_WARNINGS = 9
};
enum {
 DEV_CDROM=1,
 DEV_HWMON=2,
 DEV_PARPORT=3,
 DEV_RAID=4,
 DEV_MAC_HID=5,
 DEV_SCSI=6,
 DEV_IPMI=7
};
enum {
 DEV_CDROM_INFO=1,
 DEV_CDROM_AUTOCLOSE=2,
 DEV_CDROM_AUTOEJECT=3,
 DEV_CDROM_DEBUG=4,
 DEV_CDROM_LOCK=5,
 DEV_CDROM_CHECK_MEDIA=6
};
enum {
 DEV_PARPORT_DEFAULT=-3
};
enum {
 DEV_RAID_SPEED_LIMIT_MIN=1,
 DEV_RAID_SPEED_LIMIT_MAX=2
};
enum {
 DEV_PARPORT_DEFAULT_TIMESLICE=1,
 DEV_PARPORT_DEFAULT_SPINTIME=2
};
enum {
 DEV_PARPORT_SPINTIME=1,
 DEV_PARPORT_BASE_ADDR=2,
 DEV_PARPORT_IRQ=3,
 DEV_PARPORT_DMA=4,
 DEV_PARPORT_MODES=5,
 DEV_PARPORT_DEVICES=6,
 DEV_PARPORT_AUTOPROBE=16
};
enum {
 DEV_PARPORT_DEVICES_ACTIVE=-3
};
enum {
 DEV_PARPORT_DEVICE_TIMESLICE=1
};
enum {
 DEV_MAC_HID_KEYBOARD_SENDS_LINUX_KEYCODES=1,
 DEV_MAC_HID_KEYBOARD_LOCK_KEYCODES=2,
 DEV_MAC_HID_MOUSE_BUTTON_EMULATION=3,
 DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE=4,
 DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE=5,
 DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=6
};
enum {
 DEV_SCSI_LOGGING_LEVEL=1
};
enum {
 DEV_IPMI_POWEROFF_POWERCYCLE=1
};
enum
{
 ABI_DEFHANDLER_COFF=1,
 ABI_DEFHANDLER_ELF=2,
 ABI_DEFHANDLER_LCALL7=3,
 ABI_DEFHANDLER_LIBCSO=4,
 ABI_TRACE=5,
 ABI_FAKE_UTSNAME=6
};
extern int sysctl (int *__name, int __nlen, void *__oldval,
     size_t *__oldlenp, void *__newval, size_t __newlen) ;
double
physmem_total ()
{
  {
    double pages = sysconf (_SC_PHYS_PAGES);
    double pagesize = sysconf (_SC_PAGESIZE);
    if (0 <= pages && 0 <= pagesize)
      return pages * pagesize;
  }
  return 0;
}
double
physmem_available ()
{
  {
    double pages = sysconf (_SC_AVPHYS_PAGES);
    double pagesize = sysconf (_SC_PAGESIZE);
    if (0 <= pages && 0 <= pagesize)
      return pages * pagesize;
  }
  return physmem_total () / 4;
}
typedef enum
{
  P_ALL,
  P_PID,
  P_PGID
} idtype_t;
extern __pid_t wait (void * __stat_loc);
extern __pid_t waitpid (__pid_t __pid, int *__stat_loc, int __options);
extern int waitid (idtype_t __idtype, __id_t __id, siginfo_t *__infop,
     int __options);
struct rusage;
extern __pid_t wait3 (void * __stat_loc, int __options,
        struct rusage * __usage) ;
extern __pid_t wait4 (__pid_t __pid, void * __stat_loc, int __options,
        struct rusage *__usage) ;
int
pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg,
   flagsarg)
     const char *program;
     char * const *argv;
     const char *this_pname;
     const char *temp_base ;
     char **errmsg_fmt, **errmsg_arg;
     int flagsarg;
{
  int pid;
  int pdes[2];
  int out;
  int input_desc, output_desc;
  int flags;
  volatile int retries, sleep_interval;
  static int last_pipe_input;
  flags = flagsarg;
  if (flags & 1)
    last_pipe_input = 0;
  input_desc = last_pipe_input;
  if (! (flags & 2))
    {
      if (pipe (pdes) < 0)
 {
   *errmsg_fmt = "pipe";
   *errmsg_arg = ((void *)0);
   return -1;
 }
      out = pdes[1];
      last_pipe_input = pdes[0];
    }
  else
    {
      out = 1;
      last_pipe_input = 0;
    }
  output_desc = out;
  sleep_interval = 1;
  pid = -1;
  for (retries = 0; retries < 4; retries++)
    {
      pid = vfork ();
      if (pid >= 0)
 break;
      sleep (sleep_interval);
      sleep_interval *= 2;
    }
  switch (pid)
    {
    case -1:
      *errmsg_fmt = "fork";
      *errmsg_arg = ((void *)0);
      return -1;
    case 0:
      if (input_desc != 0)
 {
   close (0);
   dup (input_desc);
   close (input_desc);
 }
      if (output_desc != 1)
 {
   close (1);
   dup (output_desc);
   close (output_desc);
 }
      if (last_pipe_input != 0)
 close (last_pipe_input);
      if (flags & 4)
 execvp (program, argv);
      else
 execv (program, argv);
      write (2, this_pname, strlen (this_pname));
      write (2, ": ", strlen (": "));
      write (2, "installation problem, cannot exec '", strlen ("installation problem, cannot exec '"));
      write (2, program, strlen (program));
      write (2, "': ", strlen ("': "));
      write (2, xstrerror ((*__errno_location ())), strlen (xstrerror ((*__errno_location ()))));
      write (2, "\n", strlen ("\n"));
      _exit (-1);
      return 0;
    default:
      if (input_desc != 0)
 close (input_desc);
      if (output_desc != 1)
 close (output_desc);
      return pid;
    }
}
int
pwait (pid, status, flags)
     int pid;
     int *status;
     int flags ;
{
  pid = waitpid (pid, status, 0);
  return pid;
}
const unsigned short _sch_istable[256] =
{
  (const unsigned short) (_sch_isnvsp |_sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl),
  (const unsigned short) ( _sch_iscntrl), (const unsigned short) (_sch_isnvsp|_sch_isspace|_sch_isblank|_sch_iscntrl), (const unsigned short) (_sch_isvsp|_sch_isspace |_sch_iscntrl), (const unsigned short) (_sch_isnvsp|_sch_isspace |_sch_iscntrl), (const unsigned short) (_sch_isnvsp|_sch_isspace |_sch_iscntrl), (const unsigned short) (_sch_isvsp|_sch_isspace |_sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl),
  (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl),
  (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl), (const unsigned short) ( _sch_iscntrl),
  (const unsigned short) (_sch_isnvsp|_sch_isspace|_sch_isblank|_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint),
  (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint),
  (const unsigned short) (_sch_isdigit |_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isdigit |_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isdigit |_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isdigit |_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isdigit |_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isdigit |_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isdigit |_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isdigit |_sch_isxdigit|_sch_isprint),
  (const unsigned short) (_sch_isdigit |_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isdigit |_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint),
  (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst|_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst|_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst|_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst|_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst|_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst|_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint),
  (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint),
  (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint),
  (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_isupper|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct|_sch_isidst |_sch_isprint),
  (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst|_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst|_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst|_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst|_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst|_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst|_sch_isxdigit|_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint),
  (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint),
  (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint),
  (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_islower|_sch_isidst |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) (_sch_ispunct |_sch_isprint), (const unsigned short) ( _sch_iscntrl),
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
const unsigned char _sch_tolower[256] =
{
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
  64,
  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
  'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
  91, 92, 93, 94, 95, 96,
  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
  'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
 123,124,125,126,127,
 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143,
 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159,
 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175,
 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191,
 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207,
 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223,
 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239,
 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255
};
const unsigned char _sch_toupper[256] =
{
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
  64,
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
  91, 92, 93, 94, 95, 96,
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
 123,124,125,126,127,
 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143,
 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159,
 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175,
 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191,
 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207,
 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223,
 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239,
 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255
};
extern void sort_pointers (size_t, void **, void **);
void sort_pointers (n, pointers, work)
     size_t n;
     void **pointers;
     void **work;
{
  unsigned int count[((127 * 2 + 1) + 1)];
  int big_endian_p;
  size_t i;
  size_t j;
  if ((sizeof (void *) / sizeof (char)) % 2 != 0)
    abort ();
  for (i = 0, j = 0; i < sizeof (size_t); ++i)
    {
      j *= ((127 * 2 + 1) + 1);
      j += i;
    }
  big_endian_p = (((char *)&j)[0] == 0);
  for (i = 0; i < sizeof (void *) / sizeof (char); ++i)
    {
      char *digit;
      char *bias;
      char *top;
      unsigned int *countp;
      void **pointerp;
      if (big_endian_p)
 j = sizeof (void *) / sizeof (char) - i;
      else
 j = i;
      memset (count, 0, ((127 * 2 + 1) + 1) * sizeof (unsigned int));
      bias = ((char *) pointers) + j;
      top = ((char *) (pointers + n)) + j;
      for (digit = bias;
    digit < top;
    digit += sizeof (void *) / sizeof (char))
 ++count[*digit];
      for (countp = count + 1; countp < count + ((127 * 2 + 1) + 1); ++countp)
 *countp += countp[-1];
      for (pointerp = pointers + n - 1; pointerp >= pointers; --pointerp)
 work[--count[((char *) pointerp)[j]]] = *pointerp;
      pointerp = pointers;
      pointers = work;
      work = pointerp;
    }
}
extern void * malloc (size_t);
extern void free (void *);
const char *
spaces (count)
  int count;
{
  register char *t;
  static char *buf;
  static int maxsize;
  if (count > maxsize)
    {
      if (buf)
 {
   free (buf);
 }
      buf = malloc (count + 1);
      if (buf == (char *) 0)
 return 0;
      for (t = buf + count ; t != buf ; )
 {
   *--t = ' ';
 }
      maxsize = count;
      buf[count] = '\0';
    }
  return (const char *) (buf + maxsize - count);
}
typedef unsigned long int splay_tree_key;
typedef unsigned long int splay_tree_value;
typedef struct splay_tree_node_s *splay_tree_node;
typedef int (*splay_tree_compare_fn) (splay_tree_key, splay_tree_key);
typedef void (*splay_tree_delete_key_fn) (splay_tree_key);
typedef void (*splay_tree_delete_value_fn) (splay_tree_value);
typedef int (*splay_tree_foreach_fn) (splay_tree_node, void*);
typedef void * (*splay_tree_allocate_fn) (int, void *);
typedef void (*splay_tree_deallocate_fn) (void *, void *);
struct splay_tree_node_s
{
  splay_tree_key key;
  splay_tree_value value;
  splay_tree_node left;
  splay_tree_node right;
};
struct splay_tree_s
{
  splay_tree_node root;
  splay_tree_compare_fn comp;
  splay_tree_delete_key_fn delete_key;
  splay_tree_delete_value_fn delete_value;
  splay_tree_allocate_fn allocate;
  splay_tree_deallocate_fn deallocate;
  void * allocate_data;
};
typedef struct splay_tree_s *splay_tree;
extern splay_tree splay_tree_new (splay_tree_compare_fn, splay_tree_delete_key_fn, splay_tree_delete_value_fn)
                                         ;
extern splay_tree splay_tree_new_with_allocator
                                        (splay_tree_compare_fn, splay_tree_delete_key_fn, splay_tree_delete_value_fn, splay_tree_allocate_fn, splay_tree_deallocate_fn, void *)
                                                        ;
extern void splay_tree_delete (splay_tree);
extern splay_tree_node splay_tree_insert
                          (splay_tree, splay_tree_key, splay_tree_value)
                               ;
extern void splay_tree_remove (splay_tree, splay_tree_key)
                      ;
extern splay_tree_node splay_tree_lookup
                                        (splay_tree, splay_tree_key)
                             ;
extern splay_tree_node splay_tree_predecessor
                                        (splay_tree, splay_tree_key)
                      ;
extern splay_tree_node splay_tree_successor
                                        (splay_tree, splay_tree_key)
                      ;
extern splay_tree_node splay_tree_max
                                        (splay_tree);
extern splay_tree_node splay_tree_min
                                        (splay_tree);
extern int splay_tree_foreach (splay_tree, splay_tree_foreach_fn, void*)
                    ;
extern int splay_tree_compare_ints (splay_tree_key, splay_tree_key)
                      ;
extern int splay_tree_compare_pointers (splay_tree_key, splay_tree_key)
                      ;
static void splay_tree_delete_helper (splay_tree, splay_tree_node)
                       ;
static void splay_tree_splay (splay_tree, splay_tree_key)
                      ;
static splay_tree_node splay_tree_splay_helper
                                        (splay_tree, splay_tree_key, splay_tree_node*, splay_tree_node*, splay_tree_node*)
                        ;
static int splay_tree_foreach_helper (splay_tree, splay_tree_node, splay_tree_foreach_fn, void*)
             ;
static void
splay_tree_delete_helper (sp, node)
     splay_tree sp;
     splay_tree_node node;
{
  if (!node)
    return;
  splay_tree_delete_helper (sp, node->left);
  splay_tree_delete_helper (sp, node->right);
  if (sp->delete_key)
    (*sp->delete_key)(node->key);
  if (sp->delete_value)
    (*sp->delete_value)(node->value);
  (*sp->deallocate) ((char*) node, sp->allocate_data);
}
static splay_tree_node
splay_tree_splay_helper (sp, key, node, parent, grandparent)
     splay_tree sp;
     splay_tree_key key;
     splay_tree_node *node;
     splay_tree_node *parent;
     splay_tree_node *grandparent;
{
  splay_tree_node *next;
  splay_tree_node n;
  int comparison;
  n = *node;
  if (!n)
    return *parent;
  comparison = (*sp->comp) (key, n->key);
  if (comparison == 0)
    next = 0;
  else if (comparison < 0)
    next = &n->left;
  else
    next = &n->right;
  if (next)
    {
      n = splay_tree_splay_helper (sp, key, next, node, parent);
      if (*node != n)
 return n;
    }
  if (!parent)
    return n;
  if (!grandparent)
    {
      if (n == (*parent)->left)
 {
   *node = n->right;
   n->right = *parent;
 }
      else
 {
   *node = n->left;
   n->left = *parent;
 }
      *parent = n;
      return n;
    }
  if (n == (*parent)->left && *parent == (*grandparent)->left)
    {
      splay_tree_node p = *parent;
      (*grandparent)->left = p->right;
      p->right = *grandparent;
      p->left = n->right;
      n->right = p;
      *grandparent = n;
      return n;
    }
  else if (n == (*parent)->right && *parent == (*grandparent)->right)
    {
      splay_tree_node p = *parent;
      (*grandparent)->right = p->left;
      p->left = *grandparent;
      p->right = n->left;
      n->left = p;
      *grandparent = n;
      return n;
    }
  if (n == (*parent)->left)
    {
      (*parent)->left = n->right;
      n->right = *parent;
      (*grandparent)->right = n->left;
      n->left = *grandparent;
      *grandparent = n;
      return n;
    }
  else
    {
      (*parent)->right = n->left;
      n->left = *parent;
      (*grandparent)->left = n->right;
      n->right = *grandparent;
      *grandparent = n;
      return n;
    }
}
static void
splay_tree_splay (sp, key)
     splay_tree sp;
     splay_tree_key key;
{
  if (sp->root == 0)
    return;
  splay_tree_splay_helper (sp, key, &sp->root,
                      0, 0);
}
static int
splay_tree_foreach_helper (sp, node, fn, data)
     splay_tree sp;
     splay_tree_node node;
     splay_tree_foreach_fn fn;
     void* data;
{
  int val;
  if (!node)
    return 0;
  val = splay_tree_foreach_helper (sp, node->left, fn, data);
  if (val)
    return val;
  val = (*fn)(node, data);
  if (val)
    return val;
  return splay_tree_foreach_helper (sp, node->right, fn, data);
}
static void *
splay_tree_xmalloc_allocate (size, data)
     int size;
     void *data ;
{
  return (void *) xmalloc (size);
}
static void
splay_tree_xmalloc_deallocate (object, data)
     void *object;
     void *data ;
{
  free (object);
}
splay_tree
splay_tree_new (compare_fn, delete_key_fn, delete_value_fn)
     splay_tree_compare_fn compare_fn;
     splay_tree_delete_key_fn delete_key_fn;
     splay_tree_delete_value_fn delete_value_fn;
{
  return (splay_tree_new_with_allocator
          (compare_fn, delete_key_fn, delete_value_fn,
           splay_tree_xmalloc_allocate, splay_tree_xmalloc_deallocate, 0));
}
splay_tree
splay_tree_new_with_allocator (compare_fn, delete_key_fn, delete_value_fn,
                               allocate_fn, deallocate_fn, allocate_data)
     splay_tree_compare_fn compare_fn;
     splay_tree_delete_key_fn delete_key_fn;
     splay_tree_delete_value_fn delete_value_fn;
     splay_tree_allocate_fn allocate_fn;
     splay_tree_deallocate_fn deallocate_fn;
     void *allocate_data;
{
  splay_tree sp = (splay_tree) (*allocate_fn) (sizeof (struct splay_tree_s),
                                               allocate_data);
  sp->root = 0;
  sp->comp = compare_fn;
  sp->delete_key = delete_key_fn;
  sp->delete_value = delete_value_fn;
  sp->allocate = allocate_fn;
  sp->deallocate = deallocate_fn;
  sp->allocate_data = allocate_data;
  return sp;
}
void
splay_tree_delete (sp)
     splay_tree sp;
{
  splay_tree_delete_helper (sp, sp->root);
  (*sp->deallocate) ((char*) sp, sp->allocate_data);
}
splay_tree_node
splay_tree_insert (sp, key, value)
     splay_tree sp;
     splay_tree_key key;
     splay_tree_value value;
{
  int comparison = 0;
  splay_tree_splay (sp, key);
  if (sp->root)
    comparison = (*sp->comp)(sp->root->key, key);
  if (sp->root && comparison == 0)
    {
      if (sp->delete_value)
 (*sp->delete_value)(sp->root->value);
      sp->root->value = value;
    }
  else
    {
      splay_tree_node node;
      node = ((splay_tree_node)
              (*sp->allocate) (sizeof (struct splay_tree_node_s),
                               sp->allocate_data));
      node->key = key;
      node->value = value;
      if (!sp->root)
 node->left = node->right = 0;
      else if (comparison < 0)
 {
   node->left = sp->root;
   node->right = node->left->right;
   node->left->right = 0;
 }
      else
 {
   node->right = sp->root;
   node->left = node->right->left;
   node->right->left = 0;
 }
      sp->root = node;
    }
  return sp->root;
}
void
splay_tree_remove (sp, key)
     splay_tree sp;
     splay_tree_key key;
{
  splay_tree_splay (sp, key);
  if (sp->root && (*sp->comp) (sp->root->key, key) == 0)
    {
      splay_tree_node left, right;
      left = sp->root->left;
      right = sp->root->right;
      if (sp->delete_value)
 (*sp->delete_value) (sp->root->value);
      (*sp->deallocate) (sp->root, sp->allocate_data);
      if (left)
 {
   sp->root = left;
   if (right)
     {
       while (left->right)
  left = left->right;
       left->right = right;
     }
 }
      else
 sp->root = right;
    }
}
splay_tree_node
splay_tree_lookup (sp, key)
     splay_tree sp;
     splay_tree_key key;
{
  splay_tree_splay (sp, key);
  if (sp->root && (*sp->comp)(sp->root->key, key) == 0)
    return sp->root;
  else
    return 0;
}
splay_tree_node
splay_tree_max (sp)
     splay_tree sp;
{
  splay_tree_node n = sp->root;
  if (!n)
    return ((void *)0);
  while (n->right)
    n = n->right;
  return n;
}
splay_tree_node
splay_tree_min (sp)
     splay_tree sp;
{
  splay_tree_node n = sp->root;
  if (!n)
    return ((void *)0);
  while (n->left)
    n = n->left;
  return n;
}
splay_tree_node
splay_tree_predecessor (sp, key)
     splay_tree sp;
     splay_tree_key key;
{
  int comparison;
  splay_tree_node node;
  if (!sp->root)
    return ((void *)0);
  splay_tree_splay (sp, key);
  comparison = (*sp->comp)(sp->root->key, key);
  if (comparison < 0)
    return sp->root;
  node = sp->root->left;
  if (node)
    while (node->right)
      node = node->right;
  return node;
}
splay_tree_node
splay_tree_successor (sp, key)
     splay_tree sp;
     splay_tree_key key;
{
  int comparison;
  splay_tree_node node;
  if (!sp->root)
    return ((void *)0);
  splay_tree_splay (sp, key);
  comparison = (*sp->comp)(sp->root->key, key);
  if (comparison > 0)
    return sp->root;
  node = sp->root->right;
  if (node)
    while (node->left)
      node = node->left;
  return node;
}
int
splay_tree_foreach (sp, fn, data)
     splay_tree sp;
     splay_tree_foreach_fn fn;
     void *data;
{
  return splay_tree_foreach_helper (sp, sp->root, fn, data);
}
int
splay_tree_compare_ints (k1, k2)
     splay_tree_key k1;
     splay_tree_key k2;
{
  if ((int) k1 < (int) k2)
    return -1;
  else if ((int) k1 > (int) k2)
    return 1;
  else
    return 0;
}
int
splay_tree_compare_pointers (k1, k2)
     splay_tree_key k1;
     splay_tree_key k2;
{
  if ((char*) k1 < (char*) k2)
    return -1;
  else if ((char*) k1 > (char*) k2)
    return 1;
  else
    return 0;
}
static void init_error_tables (void);
struct error_info
{
  const int value1;
  const char *const name;
};
static const struct error_info error_table[] =
{
  {1, "EPERM"},
  {2, "ENOENT"},
  {3, "ESRCH"},
  {4, "EINTR"},
  {5, "EIO"},
  {6, "ENXIO"},
  {7, "E2BIG"},
  {8, "ENOEXEC"},
  {9, "EBADF"},
  {10, "ECHILD"},
  {11, "EWOULDBLOCK"},
  {11, "EAGAIN"},
  {12, "ENOMEM"},
  {13, "EACCES"},
  {14, "EFAULT"},
  {15, "ENOTBLK"},
  {16, "EBUSY"},
  {17, "EEXIST"},
  {18, "EXDEV"},
  {19, "ENODEV"},
  {20, "ENOTDIR"},
  {21, "EISDIR"},
  {22, "EINVAL"},
  {23, "ENFILE"},
  {24, "EMFILE"},
  {25, "ENOTTY"},
  {26, "ETXTBSY"},
  {27, "EFBIG"},
  {28, "ENOSPC"},
  {29, "ESPIPE"},
  {30, "EROFS"},
  {31, "EMLINK"},
  {32, "EPIPE"},
  {33, "EDOM"},
  {34, "ERANGE"},
  {42, "ENOMSG"},
  {43, "EIDRM"},
  {44, "ECHRNG"},
  {45, "EL2NSYNC"},
  {46, "EL3HLT"},
  {47, "EL3RST"},
  {48, "ELNRNG"},
  {49, "EUNATCH"},
  {50, "ENOCSI"},
  {51, "EL2HLT"},
  {35, "EDEADLK"},
  {37, "ENOLCK"},
  {52, "EBADE"},
  {53, "EBADR"},
  {54, "EXFULL"},
  {55, "ENOANO"},
  {56, "EBADRQC"},
  {57, "EBADSLT"},
  {35, "EDEADLOCK"},
  {59, "EBFONT"},
  {60, "ENOSTR"},
  {61, "ENODATA"},
  {62, "ETIME"},
  {63, "ENOSR"},
  {64, "ENONET"},
  {65, "ENOPKG"},
  {66, "EREMOTE"},
  {67, "ENOLINK"},
  {68, "EADV"},
  {69, "ESRMNT"},
  {70, "ECOMM"},
  {71, "EPROTO"},
  {72, "EMULTIHOP"},
  {73, "EDOTDOT"},
  {74, "EBADMSG"},
  {36, "ENAMETOOLONG"},
  {75, "EOVERFLOW"},
  {76, "ENOTUNIQ"},
  {77, "EBADFD"},
  {78, "EREMCHG"},
  {79, "ELIBACC"},
  {80, "ELIBBAD"},
  {81, "ELIBSCN"},
  {82, "ELIBMAX"},
  {83, "ELIBEXEC"},
  {84, "EILSEQ"},
  {38, "ENOSYS"},
  {40, "ELOOP"},
  {85, "ERESTART"},
  {86, "ESTRPIPE"},
  {39, "ENOTEMPTY"},
  {87, "EUSERS"},
  {88, "ENOTSOCK"},
  {89, "EDESTADDRREQ"},
  {90, "EMSGSIZE"},
  {91, "EPROTOTYPE"},
  {92, "ENOPROTOOPT"},
  {93, "EPROTONOSUPPORT"},
  {94, "ESOCKTNOSUPPORT"},
  {95, "EOPNOTSUPP"},
  {96, "EPFNOSUPPORT"},
  {97, "EAFNOSUPPORT"},
  {98, "EADDRINUSE"},
  {99, "EADDRNOTAVAIL"},
  {100, "ENETDOWN"},
  {101, "ENETUNREACH"},
  {102, "ENETRESET"},
  {103, "ECONNABORTED"},
  {104, "ECONNRESET"},
  {105, "ENOBUFS"},
  {106, "EISCONN"},
  {107, "ENOTCONN"},
  {108, "ESHUTDOWN"},
  {109, "ETOOMANYREFS"},
  {110, "ETIMEDOUT"},
  {111, "ECONNREFUSED"},
  {112, "EHOSTDOWN"},
  {113, "EHOSTUNREACH"},
  {114, "EALREADY"},
  {115, "EINPROGRESS"},
  {116, "ESTALE"},
  {117, "EUCLEAN"},
  {118, "ENOTNAM"},
  {119, "ENAVAIL"},
  {120, "EISNAM"},
  {121, "EREMOTEIO"},
  {0, ((void *)0)}
};
static const char **error_names;
static int num_error_names = 0;
extern int sys_nerr;
extern const char * const sys_errlist[];
static void
init_error_tables ()
{
  const struct error_info *eip;
  int nbytes;
  if (num_error_names == 0)
    {
      for (eip = error_table; eip -> name != ((void *)0); eip++)
 {
   if (eip -> value >= num_error_names)
     {
       num_error_names = eip -> value + 1;
     }
 }
    }
  if (error_names == ((void *)0))
    {
      nbytes = num_error_names * sizeof (char *);
      if ((error_names = (const char **) malloc (nbytes)) != ((void *)0))
 {
   memset (error_names, 0, nbytes);
   for (eip = error_table; eip -> name != ((void *)0); eip++)
     {
       error_names[eip -> value] = eip -> name;
     }
 }
    }
}
int
errno_max ()
{
  int maxsize;
  if (error_names == ((void *)0))
    {
      init_error_tables ();
    }
  maxsize = (((sys_nerr)>(num_error_names))?(sys_nerr):(num_error_names));
  return (maxsize - 1);
}
const char *
strerrno (errnoval)
  int errnoval;
{
  const char *name;
  static char buf[32];
  if (error_names == ((void *)0))
    {
      init_error_tables ();
    }
  if ((errnoval < 0) || (errnoval >= num_error_names))
    {
      name = ((void *)0);
    }
  else if ((error_names == ((void *)0)) || (error_names[errnoval] == ((void *)0)))
    {
      sprintf (buf, "Error %d", errnoval);
      name = (const char *) buf;
    }
  else
    {
      name = error_names[errnoval];
    }
  return (name);
}
int
strtoerrno (name)
     const char *name;
{
  int errnoval = 0;
  if (name != ((void *)0))
    {
      if (error_names == ((void *)0))
 {
   init_error_tables ();
 }
      for (errnoval = 0; errnoval < num_error_names; errnoval++)
 {
   if ((error_names[errnoval] != ((void *)0)) &&
       (strcmp (name, error_names[errnoval]) == 0))
     {
       break;
     }
 }
      if (errnoval == num_error_names)
 {
   errnoval = 0;
 }
    }
  return (errnoval);
}
static void init_signal_tables (void);
struct signal_info
{
  const int value1;
  const char *const name;
};
static const struct signal_info signal_table[] =
{
  {1, "SIGHUP"},
  {2, "SIGINT"},
  {3, "SIGQUIT"},
  {4, "SIGILL"},
  {5, "SIGTRAP"},
  {6, "SIGIOT"},
  {6, "SIGABRT"},
  {8, "SIGFPE"},
  {9, "SIGKILL"},
  {7, "SIGBUS"},
  {11, "SIGSEGV"},
  {31, "SIGSYS"},
  {13, "SIGPIPE"},
  {14, "SIGALRM"},
  {15, "SIGTERM"},
  {10, "SIGUSR1"},
  {12, "SIGUSR2"},
  {17, "SIGCLD"},
  {17, "SIGCHLD"},
  {30, "SIGPWR"},
  {28, "SIGWINCH"},
  {23, "SIGURG"},
  {29, "SIGIO"},
  {29, "SIGPOLL"},
  {19, "SIGSTOP"},
  {20, "SIGTSTP"},
  {18, "SIGCONT"},
  {21, "SIGTTIN"},
  {22, "SIGTTOU"},
  {26, "SIGVTALRM"},
  {27, "SIGPROF"},
  {24, "SIGXCPU"},
  {25, "SIGXFSZ"},
  {0, ((void *)0)}
};
static const char **signal_names;
static int num_signal_names = 0;
static int sys_nsig = 65;
extern const char * const sys_siglist[];
static void
init_signal_tables ()
{
  const struct signal_info *eip;
  int nbytes;
  if (num_signal_names == 0)
    {
      for (eip = signal_table; eip -> name != ((void *)0); eip++)
 {
   if (eip -> value >= num_signal_names)
     {
       num_signal_names = eip -> value + 1;
     }
 }
    }
  if (signal_names == ((void *)0))
    {
      nbytes = num_signal_names * sizeof (char *);
      if ((signal_names = (const char **) malloc (nbytes)) != ((void *)0))
 {
   memset (signal_names, 0, nbytes);
   for (eip = signal_table; eip -> name != ((void *)0); eip++)
     {
       signal_names[eip -> value] = eip -> name;
     }
 }
    }
}
int
signo_max ()
{
  int maxsize;
  if (signal_names == ((void *)0))
    {
      init_signal_tables ();
    }
  maxsize = (((sys_nsig)>(num_signal_names))?(sys_nsig):(num_signal_names));
  return (maxsize - 1);
}
const char *
strsigno (signo)
  int signo;
{
  const char *name;
  static char buf[32];
  if (signal_names == ((void *)0))
    {
      init_signal_tables ();
    }
  if ((signo < 0) || (signo >= num_signal_names))
    {
      name = ((void *)0);
    }
  else if ((signal_names == ((void *)0)) || (signal_names[signo] == ((void *)0)))
    {
      sprintf (buf, "Signal %d", signo);
      name = (const char *) buf;
    }
  else
    {
      name = signal_names[signo];
    }
  return (name);
}
int
strtosigno (name)
     const char *name;
{
  int signo = 0;
  if (name != ((void *)0))
    {
      if (signal_names == ((void *)0))
 {
   init_signal_tables ();
 }
      for (signo = 0; signo < num_signal_names; signo++)
 {
   if ((signal_names[signo] != ((void *)0)) &&
       (strcmp (name, signal_names[signo]) == 0))
     {
       break;
     }
 }
      if (signo == num_signal_names)
 {
   signo = 0;
 }
    }
  return (signo);
}
typedef struct ternary_node_def *ternary_tree;
typedef struct ternary_node_def
{
  char splitchar;
  ternary_tree lokid;
  ternary_tree eqkid;
  ternary_tree hikid;
}
ternary_node;
void * ternary_insert (ternary_tree *p, const char *s, void * data, int replace)
                              ;
void ternary_cleanup (ternary_tree p);
void * ternary_search (const ternary_node *p, const char *s);
void *
ternary_insert (root, s, data, replace)
     ternary_tree *root;
     const char *s;
     void * data;
     int replace;
{
  int diff;
  ternary_tree curr, *pcurr;
  pcurr = root;
  while ((curr = *pcurr))
    {
      diff = *s - curr->splitchar;
      if (diff == 0)
 {
   if (*s++ == 0)
     {
       if (replace)
  curr->eqkid = (ternary_tree) data;
       return (void *) curr->eqkid;
     }
   pcurr = &(curr->eqkid);
 }
      else if (diff < 0)
 {
   pcurr = &(curr->lokid);
 }
      else
 {
   pcurr = &(curr->hikid);
 }
    }
  for (;;)
    {
      *pcurr = (ternary_tree) xmalloc (sizeof (ternary_node));
      curr = *pcurr;
      curr->splitchar = *s;
      curr->lokid = curr->hikid = curr->eqkid = 0;
      if (*s++ == 0)
 {
   curr->eqkid = (ternary_tree) data;
   return data;
 }
      pcurr = &(curr->eqkid);
    }
}
void
ternary_cleanup (p)
     ternary_tree p;
{
  if (p)
    {
      ternary_cleanup (p->lokid);
      if (p->splitchar)
 ternary_cleanup (p->eqkid);
      ternary_cleanup (p->hikid);
      free (p);
    }
}
void *
ternary_search (p, s)
     const ternary_node *p;
     const char *s;
{
  const ternary_node *curr;
  int diff, spchar;
  spchar = *s;
  curr = p;
  while (curr)
    {
      diff = spchar - curr->splitchar;
      if (diff == 0)
 {
   if (spchar == 0)
     return (void *) curr->eqkid;
   spchar = *++s;
   curr = curr->eqkid;
 }
      else if (diff < 0)
 curr = curr->lokid;
      else
 curr = curr->hikid;
    }
  return ((void *)0);
}
static void *
ternary_recursivesearch (p, s)
     const ternary_node *p;
     const char *s;
{
  if (!p)
    return 0;
  if (*s < p->splitchar)
    return ternary_recursivesearch (p->lokid, s);
  else if (*s > p->splitchar)
    return ternary_recursivesearch (p->hikid, s);
  else
    {
      if (*s == 0)
 return (void *) p->eqkid;
      return ternary_recursivesearch (p->eqkid, ++s);
    }
}
void * malloc (size_t);
static void xatexit_cleanup (void);
extern void (*_xexit_cleanup) (void);
struct xatexit {
 struct xatexit *next;
 int ind;
 void (*fns[32]) (void);
};
static struct xatexit xatexit_first;
static struct xatexit *xatexit_head = &xatexit_first;
int
xatexit (fn)
     void (*fn) (void);
{
  register struct xatexit *p;
  if (!_xexit_cleanup)
    _xexit_cleanup = xatexit_cleanup;
  p = xatexit_head;
  if (p->ind >= 32)
    {
      if ((p = (struct xatexit *) malloc (sizeof *p)) == ((void *)0))
 return -1;
      p->ind = 0;
      p->next = xatexit_head;
      xatexit_head = p;
    }
  p->fns[p->ind++] = fn;
  return 0;
}
static void
xatexit_cleanup ()
{
  register struct xatexit *p;
  register int n;
  for (p = xatexit_head; p; p = p->next)
    for (n = p->ind; --n >= 0;)
      (*p->fns[n]) ();
}
void (*_xexit_cleanup) (void);
void
xexit (code)
     int code;
{
  if (_xexit_cleanup != ((void *)0))
    (*_xexit_cleanup) ();
  exit (code);
}
void * malloc (size_t);
void * realloc (void *, size_t);
void * calloc (size_t, size_t);
void * sbrk (ptrdiff_t);
static const char *name = "";
static char *first_break = ((void *)0);
void
xmalloc_set_program_name (s)
     const char *s;
{
  name = s;
  if (first_break == ((void *)0))
    first_break = (char *) sbrk (0);
}
void
xmalloc_failed (size)
     size_t size;
{
  extern char **environ;
  size_t allocated;
  if (first_break != ((void *)0))
    allocated = (char *) sbrk (0) - first_break;
  else
    allocated = (char *) sbrk (0) - (char *) &environ;
  fprintf (stderr,
    "\n%s%sout of memory allocating %lu bytes after a total of %lu bytes\n",
    name, *name ? ": " : "",
    (unsigned long) size, (unsigned long) allocated);
  xexit (1);
}
void *
xmalloc (size)
    size_t size;
{
  void * newmem;
  if (size == 0)
    size = 1;
  newmem = malloc (size);
  if (!newmem)
    xmalloc_failed (size);
  return (newmem);
}
void *
xcalloc (nelem, elsize)
  size_t nelem, elsize;
{
  void * newmem;
  if (nelem == 0 || elsize == 0)
    nelem = elsize = 1;
  newmem = calloc (nelem, elsize);
  if (!newmem)
    xmalloc_failed (nelem * elsize);
  return (newmem);
}
void *
xrealloc (oldmem, size)
    void * oldmem;
    size_t size;
{
  void * newmem;
  if (size == 0)
    size = 1;
  if (!oldmem)
    newmem = malloc (size);
  else
    newmem = realloc (oldmem, size);
  if (!newmem)
    xmalloc_failed (size);
  return (newmem);
}
void *
xmemdup (input, copy_size, alloc_size)
  const void * input;
  size_t copy_size;
  size_t alloc_size;
{
  void * output = xcalloc (1, alloc_size);
  memcpy (output, input, copy_size);
  return output;
}
char *
xstrdup (s)
  const char *s;
{
  register size_t len = strlen (s) + 1;
  register char *ret = xmalloc (len);
  memcpy (ret, s, len);
  return ret;
}
extern char *strerror (int);
static char xstrerror_buf[sizeof "undocumented error #%d" + 20];
char *
xstrerror (errnum)
     int errnum;
{
  char *errstr;
  errstr = strerror (errnum);
  if (!errstr)
    {
      sprintf (xstrerror_buf, "undocumented error #%d", errnum);
      errstr = xstrerror_buf;
    }
  return errstr;
}
typedef unsigned long gcc_uint64_t;
int
mkstemps (template, suffix_len)
     char *template;
     int suffix_len;
{
  static const char letters[]
    = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  static gcc_uint64_t value;
  struct timeval tv;
  char *XXXXXX;
  size_t len;
  int count;
  len = strlen (template);
  if ((int) len < 6 + suffix_len
      || strncmp (&template[len - 6 - suffix_len], "XXXXXX", 6))
    {
      return -1;
    }
  XXXXXX = &template[len - 6 - suffix_len];
  gettimeofday (&tv, ((void *)0));
  value += ((gcc_uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();
  for (count = 0; count < 238328; ++count)
    {
      gcc_uint64_t v = value;
      int fd;
      XXXXXX[0] = letters[v % 62];
      v /= 62;
      XXXXXX[1] = letters[v % 62];
      v /= 62;
      XXXXXX[2] = letters[v % 62];
      v /= 62;
      XXXXXX[3] = letters[v % 62];
      v /= 62;
      XXXXXX[4] = letters[v % 62];
      v /= 62;
      XXXXXX[5] = letters[v % 62];
      fd = open (template, 02|0100|0200, 0600);
      if (fd >= 0)
 return fd;
      value += 7777;
    }
  template[0] = '\0';
  return -1;
}
extern int fputs_unlocked (const char *, FILE *);
extern int getopt (int, char * const *, const char *);
typedef struct ht_identifier ht_identifier;
struct ht_identifier
{
  const unsigned char *str;
  unsigned int len;
  unsigned int hash_value;
};
typedef struct ht hash_table;
typedef struct ht_identifier *hashnode;
enum ht_lookup_option {HT_NO_INSERT = 0, HT_ALLOC, HT_ALLOCED};
struct ht
{
  struct obstack stack;
  hashnode *entries;
  hashnode (*alloc_node) (hash_table *);
  void * (*alloc_subobject) (size_t);
  unsigned int nslots;
  unsigned int nelements;
  struct cpp_reader *pfile;
  unsigned int searches;
  unsigned int collisions;
  unsigned char entries_owned;
};
extern hash_table *ht_create (unsigned int order);
extern void ht_destroy (hash_table *);
extern hashnode ht_lookup (hash_table *, const unsigned char *,
      size_t, enum ht_lookup_option);
extern hashnode ht_lookup_with_hash (hash_table *, const unsigned char *,
                                     size_t, unsigned int,
                                     enum ht_lookup_option);
typedef int (*ht_cb) (struct cpp_reader *, hashnode, const void *);
extern void ht_forall (hash_table *, ht_cb, const void *);
extern void ht_load (hash_table *ht, hashnode *entries,
       unsigned int nslots, unsigned int nelements, unsigned char own);
extern void ht_dump_statistics (hash_table *);
enum lc_reason {LC_ENTER = 0, LC_LEAVE, LC_RENAME};
typedef unsigned int source_location;
struct line_map
{
  const char *to_file;
  unsigned int to_line;
  source_location start_location;
  int included_from;
  unsigned int reason : 8;
  unsigned char sysp;
  unsigned int column_bits : 8;
};
struct line_maps
{
  struct line_map *maps;
  unsigned int allocated;
  unsigned int used;
  unsigned int cache;
  int last_listed;
  unsigned int depth;
  unsigned char trace_includes;
  source_location highest_location;
  source_location highest_line;
  unsigned int max_column_hint;
};
extern void linemap_init (struct line_maps *);
extern void linemap_free (struct line_maps *);
extern void linemap_check_files_exited (struct line_maps *);
extern source_location linemap_line_start
(struct line_maps *, unsigned int, unsigned int);
extern const struct line_map *linemap_add
  (struct line_maps *, enum lc_reason, unsigned int sysp,
   const char *to_file, unsigned int to_line);
extern const struct line_map *linemap_lookup
  (struct line_maps *, source_location);
extern void linemap_print_containing_files (struct line_maps *,
         const struct line_map *);
extern source_location
linemap_position_for_column (struct line_maps *set, unsigned int to_column);
typedef struct cpp_reader cpp_reader;
typedef struct cpp_buffer cpp_buffer;
typedef struct cpp_options cpp_options;
typedef struct cpp_token cpp_token;
typedef struct cpp_string cpp_string;
typedef struct cpp_hashnode cpp_hashnode;
typedef struct cpp_macro cpp_macro;
typedef struct cpp_callbacks cpp_callbacks;
typedef struct cpp_dir cpp_dir;
struct answer;
struct _cpp_file;
enum cpp_ttype
{
  CPP_EQ = 0, CPP_NOT, CPP_GREATER, CPP_LESS, CPP_PLUS, CPP_MINUS, CPP_MULT, CPP_DIV, CPP_MOD, CPP_AND, CPP_OR, CPP_XOR, CPP_RSHIFT, CPP_LSHIFT, CPP_MIN, CPP_MAX, CPP_COMPL, CPP_AND_AND, CPP_OR_OR, CPP_QUERY, CPP_COLON, CPP_COMMA, CPP_OPEN_PAREN, CPP_CLOSE_PAREN, CPP_EOF, CPP_EQ_EQ, CPP_NOT_EQ, CPP_GREATER_EQ, CPP_LESS_EQ, CPP_PLUS_EQ, CPP_MINUS_EQ, CPP_MULT_EQ, CPP_DIV_EQ, CPP_MOD_EQ, CPP_AND_EQ, CPP_OR_EQ, CPP_XOR_EQ, CPP_RSHIFT_EQ, CPP_LSHIFT_EQ, CPP_MIN_EQ, CPP_MAX_EQ, CPP_HASH, CPP_PASTE, CPP_OPEN_SQUARE, CPP_CLOSE_SQUARE, CPP_OPEN_BRACE, CPP_CLOSE_BRACE, CPP_SEMICOLON, CPP_ELLIPSIS, CPP_PLUS_PLUS, CPP_MINUS_MINUS, CPP_DEREF, CPP_DOT, CPP_SCOPE, CPP_DEREF_STAR, CPP_DOT_STAR, CPP_ATSIGN, CPP_NAME, CPP_AT_NAME, CPP_NUMBER, CPP_CHAR, CPP_WCHAR, CPP_OTHER, CPP_STRING, CPP_WSTRING, CPP_OBJC_STRING, CPP_HEADER_NAME, CPP_COMMENT, CPP_MACRO_ARG, CPP_PADDING,
  N_TTYPES
};
enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_STDC89, CLK_STDC94, CLK_STDC99,
      CLK_GNUCXX, CLK_CXX98, CLK_ASM};
struct cpp_string
{
  unsigned int len;
  const unsigned char *text;
};
enum cpp_token_fld_kind {
  CPP_TOKEN_FLD_NODE,
  CPP_TOKEN_FLD_SOURCE,
  CPP_TOKEN_FLD_STR,
  CPP_TOKEN_FLD_ARG_NO,
  CPP_TOKEN_FLD_NONE
};
struct cpp_token
{
  source_location src_loc;
  unsigned int type : 8;
  unsigned char flags;
  union cpp_token_u
  {
    cpp_hashnode *
     
  node;
    cpp_token * source;
    struct cpp_string str;
    unsigned int arg_no;
  } val;
};
extern enum cpp_token_fld_kind cpp_token_val_index (cpp_token *tok);
typedef unsigned int cppchar_t;
typedef int cppchar_signed_t;
struct cpp_options
{
  unsigned int tabstop;
  enum c_lang lang;
  unsigned char cplusplus;
  unsigned char cplusplus_comments;
  unsigned char objc;
  unsigned char discard_comments;
  unsigned char discard_comments_in_macro_exp;
  unsigned char trigraphs;
  unsigned char digraphs;
  unsigned char extended_numbers;
  unsigned char print_include_names;
  unsigned char pedantic_errors;
  unsigned char inhibit_warnings;
  unsigned char warn_deprecated;
  unsigned char warn_system_headers;
  unsigned char inhibit_errors;
  unsigned char warn_comments;
  unsigned char warn_missing_include_dirs;
  unsigned char warn_trigraphs;
  unsigned char warn_multichar;
  unsigned char warn_traditional;
  unsigned char warn_long_long;
  unsigned char warn_endif_labels;
  unsigned char warn_num_sign_change;
  unsigned char warn_variadic_macros;
  unsigned char warnings_are_errors;
  unsigned char remap;
  unsigned char dollars_in_ident;
  unsigned char warn_dollars;
  unsigned char warn_undef;
  unsigned char warn_unused_macros;
  unsigned char c99;
  unsigned char std;
  unsigned char pedantic;
  unsigned char preprocessed;
  unsigned char show_column;
  unsigned char operator_names;
  unsigned char traditional;
  const char *narrow_charset;
  const char *wide_charset;
  const char *input_charset;
  unsigned char warn_invalid_pch;
  unsigned char restore_pch_deps;
  struct
  {
    enum {DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM } style;
    unsigned char missing_files;
    unsigned char phony_targets;
    unsigned char ignore_main_file;
  } deps;
  size_t precision, char_precision, int_precision, wchar_precision;
  unsigned char unsigned_char, unsigned_wchar;
  unsigned char bytes_big_endian;
  unsigned char stdc_0_in_system_headers;
};
typedef const char *(*missing_header_cb)(cpp_reader *, const char *header, cpp_dir **);
struct cpp_callbacks
{
  void (*line_change) (cpp_reader *, const cpp_token *, int);
  void (*file_change) (cpp_reader *, const struct line_map *);
  void (*dir_change) (cpp_reader *, const char *);
  void (*include) (cpp_reader *, unsigned int, const unsigned char *,
     const char *, int);
  void (*define) (cpp_reader *, unsigned int, cpp_hashnode *);
  void (*undef) (cpp_reader *, unsigned int, cpp_hashnode *);
  void (*ident) (cpp_reader *, unsigned int, const cpp_string *);
  void (*def_pragma) (cpp_reader *, unsigned int);
  int (*valid_pch) (cpp_reader *, const char *, int);
  void (*read_pch) (cpp_reader *, const char *, int, const char *);
  missing_header_cb missing_header;
};
struct cpp_dir
{
  struct cpp_dir *next;
  char *name;
  unsigned int len;
  unsigned char sysp;
  const char **name_map;
  char *(*construct) (const char *header, cpp_dir *dir);
  ino_t ino;
  dev_t dev;
  unsigned char user_supplied_p;
};
extern const char *progname;
enum ident_node_type
{
  NT_VOID = 0,
  NT_MACRO,
  NT_ASSERTION
};
enum builtin_type
{
  BT_SPECLINE = 0,
  BT_DATE,
  BT_FILE,
  BT_BASE_FILE,
  BT_INCLUDE_LEVEL,
  BT_TIME,
  BT_STDC,
  BT_PRAGMA
};
enum {
  NTV_MACRO,
  NTV_ANSWER,
  NTV_BUILTIN,
  NTV_ARGUMENT,
  NTV_NONE
};
struct cpp_hashnode
{
  struct ht_identifier ident;
  unsigned int is_directive : 1;
  unsigned int directive_index : 7;
  unsigned char rid_code;
  unsigned int type : 8;
  unsigned char flags;
  union _cpp_hashnode_value
  {
    cpp_macro * macro;
    struct answer * answers;
    enum builtin_type builtin;
    unsigned short arg_index;
  } value;
};
extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *,
          struct line_maps *);
extern void cpp_set_lang (cpp_reader *, enum c_lang);
extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
extern cpp_options *cpp_get_options (cpp_reader *);
extern cpp_callbacks *cpp_get_callbacks (cpp_reader *);
extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *);
extern struct depends *cpp_get_deps (cpp_reader *);
extern const char *cpp_read_main_file (cpp_reader *, const char *);
extern void cpp_init_builtins (cpp_reader *, int);
extern void cpp_post_options (cpp_reader *);
extern void cpp_init_iconv (cpp_reader *);
extern int cpp_finish (cpp_reader *, FILE *deps_stream);
extern void cpp_destroy (cpp_reader *);
extern unsigned int cpp_errors (cpp_reader *);
extern unsigned int cpp_token_len (const cpp_token *);
extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *);
extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *,
           unsigned char *);
extern void cpp_register_pragma (cpp_reader *, const char *, const char *,
     void (*) (cpp_reader *));
extern int cpp_avoid_paste (cpp_reader *, const cpp_token *,
       const cpp_token *);
extern const cpp_token *cpp_get_token (cpp_reader *);
extern const unsigned char *cpp_macro_definition (cpp_reader *,
        const cpp_hashnode *);
extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *,
       unsigned int *, int *);
extern unsigned char cpp_interpret_string (cpp_reader *,
      const cpp_string *, size_t,
      cpp_string *, unsigned char);
extern unsigned char cpp_interpret_string_notranslate (cpp_reader *,
           const cpp_string *, size_t,
           cpp_string *, unsigned char);
extern void cpp_define (cpp_reader *, const char *);
extern void cpp_assert (cpp_reader *, const char *);
extern void cpp_undef (cpp_reader *, const char *);
extern void cpp_unassert (cpp_reader *, const char *);
extern void cpp_undef_all (cpp_reader *);
extern cpp_buffer *cpp_push_buffer (cpp_reader *, const unsigned char *,
        size_t, int);
extern int cpp_defined (cpp_reader *, const unsigned char *, int);
typedef unsigned long cpp_num_part;
typedef struct cpp_num cpp_num;
struct cpp_num
{
  cpp_num_part high;
  cpp_num_part low;
  unsigned char unsignedp;
  unsigned char overflow;
};
extern unsigned cpp_classify_number (cpp_reader *, const cpp_token *);
extern cpp_num cpp_interpret_integer (cpp_reader *, const cpp_token *,
          unsigned int type);
cpp_num cpp_num_sign_extend (cpp_num, size_t);
extern void cpp_error (cpp_reader *, int, const char *msgid, ...)
  ;
extern void cpp_errno (cpp_reader *, int, const char *msgid);
extern void cpp_error_with_line (cpp_reader *, int, source_location, unsigned,
     const char *msgid, ...) ;
extern int cpp_ideq (const cpp_token *, const char *);
extern void cpp_output_line (cpp_reader *, FILE *);
extern void cpp_output_token (const cpp_token *, FILE *);
extern const char *cpp_type2name (enum cpp_ttype);
extern cppchar_t cpp_parse_escape (cpp_reader *, const unsigned char ** pstr,
       const unsigned char *limit, int wide);
extern cpp_hashnode *cpp_lookup (cpp_reader *, const unsigned char *,
     unsigned int);
typedef int (*cpp_cb) (cpp_reader *, cpp_hashnode *, void *);
extern void cpp_forall_identifiers (cpp_reader *, cpp_cb, void *);
extern void cpp_scan_nooutput (cpp_reader *);
extern int cpp_sys_macro_p (cpp_reader *);
extern unsigned char *cpp_quote_string (unsigned char *, const unsigned char *,
     unsigned int);
extern unsigned char cpp_included (cpp_reader *, const char *);
extern void cpp_make_system_header (cpp_reader *, int, int);
extern unsigned char cpp_push_include (cpp_reader *, const char *);
extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *);
extern const char *cpp_get_path (struct _cpp_file *);
extern cpp_dir *cpp_get_dir (struct _cpp_file *);
extern cpp_buffer *cpp_get_buffer (cpp_reader *);
extern struct _cpp_file *cpp_get_file (cpp_buffer *);
extern cpp_buffer *cpp_get_prev (cpp_buffer *);
struct save_macro_data;
extern int cpp_save_state (cpp_reader *, FILE *);
extern int cpp_write_pch_deps (cpp_reader *, FILE *);
extern int cpp_write_pch_state (cpp_reader *, FILE *);
extern int cpp_valid_state (cpp_reader *, const char *, int);
extern void cpp_prepare_state (cpp_reader *, struct save_macro_data **);
extern int cpp_read_state (cpp_reader *, const char *, FILE *,
      struct save_macro_data *);
typedef unsigned char uchar;
struct answer
{
  struct answer *next;
  unsigned int count;
  cpp_token first[1];
};
struct cpp_macro
{
  cpp_hashnode **
    params;
  union cpp_macro_u
  {
    cpp_token * tokens;
    const uchar * text;
  } exp;
  source_location line;
  unsigned int count;
  unsigned short paramc;
  unsigned int fun_like : 1;
  unsigned int variadic : 1;
  unsigned int syshdr : 1;
  unsigned int used : 1;
  unsigned int traditional : 1;
};
typedef void *iconv_t;
extern iconv_t iconv_open (const char *__tocode, const char *__fromcode);
extern size_t iconv (iconv_t __cd, char ** __inbuf,
       size_t * __inbytesleft,
       char ** __outbuf,
       size_t * __outbytesleft);
extern int iconv_close (iconv_t __cd);
struct directive;
struct pending_option;
struct op;
struct _cpp_strbuf;
typedef unsigned char (*convert_f) (iconv_t, const unsigned char *, size_t,
      struct _cpp_strbuf *);
struct cset_converter
{
  convert_f func;
  iconv_t cd;
};
struct dummy
{
  char c;
  union
  {
    double d;
    int *p;
  } u;
};
typedef struct _cpp_buff _cpp_buff;
struct _cpp_buff
{
  struct _cpp_buff *next;
  unsigned char *base, *cur, *limit;
};
extern _cpp_buff *_cpp_get_buff (cpp_reader *, size_t);
extern void _cpp_release_buff (cpp_reader *, _cpp_buff *);
extern void _cpp_extend_buff (cpp_reader *, _cpp_buff **, size_t);
extern _cpp_buff *_cpp_append_extend_buff (cpp_reader *, _cpp_buff *, size_t);
extern void _cpp_free_buff (_cpp_buff *);
extern unsigned char *_cpp_aligned_alloc (cpp_reader *, size_t);
extern unsigned char *_cpp_unaligned_alloc (cpp_reader *, size_t);
enum include_type {IT_INCLUDE, IT_INCLUDE_NEXT, IT_IMPORT, IT_CMDLINE};
union utoken
{
  const cpp_token *token;
  const cpp_token **ptoken;
};
typedef struct tokenrun tokenrun;
struct tokenrun
{
  tokenrun *next, *prev;
  cpp_token *base, *limit;
};
typedef struct cpp_context cpp_context;
struct cpp_context
{
  cpp_context *next, *prev;
  union
  {
    struct
    {
      union utoken first;
      union utoken last;
    } iso;
    struct
    {
      const uchar *cur;
      const uchar *rlimit;
    } trad;
  } u;
  _cpp_buff *buff;
  cpp_hashnode *macro;
  unsigned char direct_p;
};
struct lexer_state
{
  unsigned char in_directive;
  unsigned char directive_wants_padding;
  unsigned char skipping;
  unsigned char angled_headers;
  unsigned char in_expression;
  unsigned char save_comments;
  unsigned char va_args_ok;
  unsigned char poisoned_ok;
  unsigned char prevent_expansion;
  unsigned char parsing_args;
  unsigned char discarding_output;
  unsigned int skip_eval;
};
struct spec_nodes
{
  cpp_hashnode *n_defined;
  cpp_hashnode *n_true;
  cpp_hashnode *n_false;
  cpp_hashnode *n__VA_ARGS__;
};
typedef struct _cpp_line_note _cpp_line_note;
struct _cpp_line_note
{
  const uchar *pos;
  unsigned int type;
};
struct cpp_buffer
{
  const uchar *cur;
  const uchar *line_base;
  const uchar *next_line;
  const uchar *buf;
  const uchar *rlimit;
  _cpp_line_note *notes;
  unsigned int cur_note;
  unsigned int notes_used;
  unsigned int notes_cap;
  struct cpp_buffer *prev;
  struct _cpp_file *file;
  struct if_stack *if_stack;
  unsigned char need_line;
  unsigned int warned_cplusplus_comments : 1;
  unsigned int from_stage3 : 1;
  unsigned int return_at_eof : 1;
  unsigned char sysp;
  struct cpp_dir dir;
  struct cset_converter input_cset_desc;
};
struct cpp_reader
{
  cpp_buffer *buffer;
  cpp_buffer *overlaid_buffer;
  struct lexer_state state;
  struct line_maps *line_table;
  source_location directive_line;
  _cpp_buff *a_buff;
  _cpp_buff *u_buff;
  _cpp_buff *free_buffs;
  struct cpp_context base_context;
  struct cpp_context *context;
  const struct directive *directive;
  struct cpp_dir *quote_include;
  struct cpp_dir *bracket_include;
  struct cpp_dir no_search_path;
  struct _cpp_file *all_files;
  struct _cpp_file *main_file;
  struct htab *file_hash;
  struct file_hash_entry *file_hash_entries;
  unsigned int file_hash_entries_allocated, file_hash_entries_used;
  unsigned char quote_ignores_source_dir;
  unsigned char seen_once_only;
  const cpp_hashnode *mi_cmacro;
  const cpp_hashnode *mi_ind_cmacro;
  unsigned char mi_valid;
  cpp_token *cur_token;
  tokenrun base_run, *cur_run;
  unsigned int lookaheads;
  unsigned int keep_tokens;
  unsigned int errors;
  unsigned char *macro_buffer;
  unsigned int macro_buffer_len;
  struct cset_converter narrow_cset_desc;
  struct cset_converter wide_cset_desc;
  const uchar *date;
  const uchar *time;
  cpp_token avoid_paste;
  cpp_token eof;
  struct depends *deps;
  struct obstack hash_ob;
  struct obstack buffer_ob;
  struct pragma_entry *pragmas;
  struct cpp_callbacks cb;
  struct ht *hash_table1;
  struct op *op_stack, *op_limit;
  struct cpp_options opts;
  struct spec_nodes spec_nodes;
  unsigned char our_hashtable;
  struct
  {
    uchar *base;
    uchar *limit;
    uchar *cur;
    source_location first_line;
  } out;
  const uchar *saved_cur, *saved_rlimit, *saved_line_base;
  struct cpp_savedstate *savedstate;
};
extern unsigned char _cpp_trigraph_map[(127 * 2 + 1) + 1];
static int cpp_in_system_header (cpp_reader *);
static int
cpp_in_system_header (cpp_reader *pfile)
{
  return pfile->buffer ? pfile->buffer->sysp : 0;
}
extern int _cpp_begin_message (cpp_reader *, int,
          source_location, unsigned int);
extern void _cpp_free_definition (cpp_hashnode *);
extern unsigned char _cpp_create_definition (cpp_reader *, cpp_hashnode *);
extern void _cpp_pop_context (cpp_reader *);
extern void _cpp_push_text_context (cpp_reader *, cpp_hashnode *,
        const uchar *, size_t);
extern unsigned char _cpp_save_parameter (cpp_reader *, cpp_macro *, cpp_hashnode *);
extern unsigned char _cpp_arguments_ok (cpp_reader *, cpp_macro *, const cpp_hashnode *,
          unsigned int);
extern const uchar *_cpp_builtin_macro_text (cpp_reader *, cpp_hashnode *);
int _cpp_warn_if_unused_macro (cpp_reader *, cpp_hashnode *, void *);
extern void _cpp_init_hashtable (cpp_reader *, hash_table *);
extern void _cpp_destroy_hashtable (cpp_reader *);
typedef struct _cpp_file _cpp_file;
extern _cpp_file *_cpp_find_file (cpp_reader *, const char *fname,
      cpp_dir *start_dir, unsigned char fake);
extern unsigned char _cpp_find_failed (_cpp_file *);
extern void _cpp_mark_file_once_only (cpp_reader *, struct _cpp_file *);
extern void _cpp_fake_include (cpp_reader *, const char *);
extern unsigned char _cpp_stack_file (cpp_reader *, _cpp_file*, unsigned char);
extern unsigned char _cpp_stack_include (cpp_reader *, const char *, int,
    enum include_type);
extern int _cpp_compare_file_date (cpp_reader *, const char *, int);
extern void _cpp_report_missing_guards (cpp_reader *);
extern void _cpp_init_files (cpp_reader *);
extern void _cpp_cleanup_files (cpp_reader *);
extern void _cpp_pop_file_buffer (cpp_reader *, struct _cpp_file *);
extern unsigned char _cpp_save_file_entries (cpp_reader *pfile, FILE *f);
extern unsigned char _cpp_read_file_entries (cpp_reader *, FILE *);
extern unsigned char _cpp_parse_expr (cpp_reader *);
extern struct op *_cpp_expand_op_stack (cpp_reader *);
extern void _cpp_process_line_notes (cpp_reader *, int);
extern void _cpp_clean_line (cpp_reader *);
extern unsigned char _cpp_get_fresh_line (cpp_reader *);
extern unsigned char _cpp_skip_block_comment (cpp_reader *);
extern cpp_token *_cpp_temp_token (cpp_reader *);
extern const cpp_token *_cpp_lex_token (cpp_reader *);
extern cpp_token *_cpp_lex_direct (cpp_reader *);
extern int _cpp_equiv_tokens (const cpp_token *, const cpp_token *);
extern void _cpp_init_tokenrun (tokenrun *, unsigned int);
extern void _cpp_maybe_push_include_file (cpp_reader *);
extern int _cpp_test_assertion (cpp_reader *, unsigned int *);
extern int _cpp_handle_directive (cpp_reader *, int);
extern void _cpp_define_builtin (cpp_reader *, const char *);
extern char ** _cpp_save_pragma_names (cpp_reader *);
extern void _cpp_restore_pragma_names (cpp_reader *, char **);
extern void _cpp_do__Pragma (cpp_reader *);
extern void _cpp_init_directives (cpp_reader *);
extern void _cpp_init_internal_pragmas (cpp_reader *);
extern void _cpp_do_file_change (cpp_reader *, enum lc_reason, const char *,
     unsigned int, unsigned int);
extern void _cpp_pop_buffer (cpp_reader *);
extern unsigned char _cpp_scan_out_logical_line (cpp_reader *, cpp_macro *);
extern unsigned char _cpp_read_logical_line_trad (cpp_reader *);
extern void _cpp_overlay_buffer (cpp_reader *pfile, const uchar *, size_t);
extern void _cpp_remove_overlay (cpp_reader *);
extern unsigned char _cpp_create_trad_definition (cpp_reader *, cpp_macro *);
extern unsigned char _cpp_expansions_different_trad (const cpp_macro *,
         const cpp_macro *);
extern uchar *_cpp_copy_replacement_text (const cpp_macro *, uchar *);
extern size_t _cpp_replacement_text_len (const cpp_macro *);
extern cppchar_t _cpp_valid_ucn (cpp_reader *, const uchar **,
     const uchar *, int);
extern void _cpp_destroy_iconv (cpp_reader *);
extern uchar *_cpp_convert_input (cpp_reader *, const char *, uchar *,
      size_t, size_t, off_t *);
extern const char *_cpp_default_encoding (void);
static int ustrcmp (const uchar *, const uchar *);
static int ustrncmp (const uchar *, const uchar *, size_t);
static size_t ustrlen (const uchar *);
static uchar *uxstrdup (const uchar *);
static uchar *ustrchr (const uchar *, int);
static int ufputs (const uchar *, FILE *);
static int
ustrcmp (const uchar *s1, const uchar *s2)
{
  return strcmp ((const char *)s1, (const char *)s2);
}
static int
ustrncmp (const uchar *s1, const uchar *s2, size_t n)
{
  return strncmp ((const char *)s1, (const char *)s2, n);
}
static size_t
ustrlen (const uchar *s1)
{
  return strlen ((const char *)s1);
}
static uchar *
uxstrdup (const uchar *s1)
{
  return (uchar *) xstrdup ((const char *)s1);
}
static uchar *
ustrchr (const uchar *s1, int c)
{
  return (uchar *) strchr ((const char *)s1, c);
}
static int
ufputs (const uchar *s, FILE *f)
{
  return fputs_unlocked ((const char *)s, f);
}
struct ucnrange
{
  unsigned short lo, hi;
  unsigned short flags;
};
static const struct ucnrange ucnranges[] = {
  { 0x00aa, 0x00aa, 1 },
  { 0x00b5, 0x00b5, 1 },
  { 0x00b7, 0x00b7, 1 },
  { 0x00ba, 0x00ba, 1 },
  { 0x00c0, 0x00d6, 2|1 },
  { 0x00d8, 0x00f6, 2|1 },
  { 0x00f8, 0x01f5, 2|1 },
  { 0x01fa, 0x0217, 2|1 },
  { 0x0250, 0x02a8, 2|1 },
  { 0x02b0, 0x02b8, 1 },
  { 0x02bb, 0x02bb, 1 },
  { 0x02bd, 0x02c1, 1 },
  { 0x02d0, 0x02d1, 1 },
  { 0x02e0, 0x02e4, 1 },
  { 0x037a, 0x037a, 1 },
  { 0x0384, 0x0384, 2 },
  { 0x0386, 0x0386, 1 },
  { 0x0388, 0x038a, 2|1 },
  { 0x038c, 0x038c, 2|1 },
  { 0x038e, 0x03a1, 2|1 },
  { 0x03a3, 0x03ce, 2|1 },
  { 0x03d0, 0x03d6, 2|1 },
  { 0x03da, 0x03da, 2|1 },
  { 0x03dc, 0x03dc, 2|1 },
  { 0x03de, 0x03de, 2|1 },
  { 0x03e0, 0x03e0, 2|1 },
  { 0x03e2, 0x03f3, 2|1 },
  { 0x0401, 0x040c, 2|1 },
  { 0x040d, 0x040d, 2 },
  { 0x040e, 0x040e, 1 },
  { 0x040f, 0x044f, 2|1 },
  { 0x0451, 0x045c, 2|1 },
  { 0x045e, 0x0481, 2|1 },
  { 0x0490, 0x04c4, 2|1 },
  { 0x04c7, 0x04c8, 2|1 },
  { 0x04cb, 0x04cc, 2|1 },
  { 0x04d0, 0x04eb, 2|1 },
  { 0x04ee, 0x04f5, 2|1 },
  { 0x04f8, 0x04f9, 2|1 },
  { 0x0531, 0x0556, 2|1 },
  { 0x0559, 0x0559, 1 },
  { 0x0561, 0x0587, 2|1 },
  { 0x05b0, 0x05b9, 1 },
  { 0x05bb, 0x05bd, 1 },
  { 0x05bf, 0x05bf, 1 },
  { 0x05c1, 0x05c2, 1 },
  { 0x05d0, 0x05ea, 2|1 },
  { 0x05f0, 0x05f2, 2|1 },
  { 0x05f3, 0x05f4, 2 },
  { 0x0621, 0x063a, 2|1 },
  { 0x0640, 0x0652, 2|1 },
  { 0x0660, 0x0669, 1|4 },
  { 0x0670, 0x06b7, 2|1 },
  { 0x06ba, 0x06be, 2|1 },
  { 0x06c0, 0x06ce, 2|1 },
  { 0x06d0, 0x06dc, 1 },
  { 0x06e5, 0x06e7, 2|1 },
  { 0x06e8, 0x06e8, 1 },
  { 0x06ea, 0x06ed, 1 },
  { 0x06f0, 0x06f9, 1|4 },
  { 0x0901, 0x0903, 1 },
  { 0x0905, 0x0939, 2|1 },
  { 0x093d, 0x093d, 1 },
  { 0x093e, 0x094d, 1 },
  { 0x0950, 0x0952, 1 },
  { 0x0958, 0x0962, 2|1 },
  { 0x0963, 0x0963, 1 },
  { 0x0966, 0x096f, 1|4 },
  { 0x0981, 0x0983, 1 },
  { 0x0985, 0x098c, 2|1 },
  { 0x098f, 0x0990, 2|1 },
  { 0x0993, 0x09a8, 2|1 },
  { 0x09aa, 0x09b0, 2|1 },
  { 0x09b2, 0x09b2, 2|1 },
  { 0x09b6, 0x09b9, 2|1 },
  { 0x09be, 0x09c4, 1 },
  { 0x09c7, 0x09c8, 1 },
  { 0x09cb, 0x09cd, 1 },
  { 0x09dc, 0x09dd, 2|1 },
  { 0x09df, 0x09e1, 2|1 },
  { 0x09e2, 0x09e3, 1 },
  { 0x09e6, 0x09ef, 1|4 },
  { 0x09f0, 0x09f1, 2|1 },
  { 0x0a02, 0x0a02, 1 },
  { 0x0a05, 0x0a0a, 2|1 },
  { 0x0a0f, 0x0a10, 2|1 },
  { 0x0a13, 0x0a28, 2|1 },
  { 0x0a2a, 0x0a30, 2|1 },
  { 0x0a32, 0x0a33, 2|1 },
  { 0x0a35, 0x0a36, 2|1 },
  { 0x0a38, 0x0a39, 2|1 },
  { 0x0a3e, 0x0a42, 1 },
  { 0x0a47, 0x0a48, 1 },
  { 0x0a4b, 0x0a4d, 1 },
  { 0x0a59, 0x0a5c, 2|1 },
  { 0x0a5e, 0x0a5e, 2|1 },
  { 0x0a66, 0x0a6f, 1|4 },
  { 0x0a74, 0x0a74, 1 },
  { 0x0a81, 0x0a83, 1 },
  { 0x0a85, 0x0a8b, 2|1 },
  { 0x0a8d, 0x0a8d, 2|1 },
  { 0x0a8f, 0x0a91, 2|1 },
  { 0x0a93, 0x0aa8, 2|1 },
  { 0x0aaa, 0x0ab0, 2|1 },
  { 0x0ab2, 0x0ab3, 2|1 },
  { 0x0ab5, 0x0ab9, 2|1 },
  { 0x0abd, 0x0ac5, 1 },
  { 0x0ac7, 0x0ac9, 1 },
  { 0x0acb, 0x0acd, 1 },
  { 0x0ad0, 0x0ad0, 1 },
  { 0x0ae0, 0x0ae0, 2|1 },
  { 0x0ae6, 0x0aef, 1|4 },
  { 0x0b01, 0x0b03, 1 },
  { 0x0b05, 0x0b0c, 2|1 },
  { 0x0b0f, 0x0b10, 2|1 },
  { 0x0b13, 0x0b28, 2|1 },
  { 0x0b2a, 0x0b30, 2|1 },
  { 0x0b32, 0x0b33, 2|1 },
  { 0x0b36, 0x0b39, 2|1 },
  { 0x0b3d, 0x0b3d, 1 },
  { 0x0b3e, 0x0b43, 1 },
  { 0x0b47, 0x0b48, 1 },
  { 0x0b4b, 0x0b4d, 1 },
  { 0x0b5c, 0x0b5d, 2|1 },
  { 0x0b5f, 0x0b61, 2|1 },
  { 0x0b66, 0x0b6f, 1|4 },
  { 0x0b82, 0x0b83, 1 },
  { 0x0b85, 0x0b8a, 2|1 },
  { 0x0b8e, 0x0b90, 2|1 },
  { 0x0b92, 0x0b95, 2|1 },
  { 0x0b99, 0x0b9a, 2|1 },
  { 0x0b9c, 0x0b9c, 2|1 },
  { 0x0b9e, 0x0b9f, 2|1 },
  { 0x0ba3, 0x0ba4, 2|1 },
  { 0x0ba8, 0x0baa, 2|1 },
  { 0x0bae, 0x0bb5, 2|1 },
  { 0x0bb7, 0x0bb9, 2|1 },
  { 0x0bbe, 0x0bc2, 1 },
  { 0x0bc6, 0x0bc8, 1 },
  { 0x0bca, 0x0bcd, 1 },
  { 0x0be7, 0x0bef, 1|4 },
  { 0x0c01, 0x0c03, 1 },
  { 0x0c05, 0x0c0c, 2|1 },
  { 0x0c0e, 0x0c10, 2|1 },
  { 0x0c12, 0x0c28, 2|1 },
  { 0x0c2a, 0x0c33, 2|1 },
  { 0x0c35, 0x0c39, 2|1 },
  { 0x0c3e, 0x0c44, 1 },
  { 0x0c46, 0x0c48, 1 },
  { 0x0c4a, 0x0c4d, 1 },
  { 0x0c60, 0x0c61, 2|1 },
  { 0x0c66, 0x0c6f, 1|4 },
  { 0x0c82, 0x0c83, 1 },
  { 0x0c85, 0x0c8c, 2|1 },
  { 0x0c8e, 0x0c90, 2|1 },
  { 0x0c92, 0x0ca8, 2|1 },
  { 0x0caa, 0x0cb3, 2|1 },
  { 0x0cb5, 0x0cb9, 2|1 },
  { 0x0cbe, 0x0cc4, 1 },
  { 0x0cc6, 0x0cc8, 1 },
  { 0x0cca, 0x0ccd, 1 },
  { 0x0cde, 0x0cde, 1 },
  { 0x0ce0, 0x0ce1, 2|1 },
  { 0x0ce6, 0x0cef, 1|4 },
  { 0x0d02, 0x0d03, 1 },
  { 0x0d05, 0x0d0c, 2|1 },
  { 0x0d0e, 0x0d10, 2|1 },
  { 0x0d12, 0x0d28, 2|1 },
  { 0x0d2a, 0x0d39, 2|1 },
  { 0x0d3e, 0x0d43, 1 },
  { 0x0d46, 0x0d48, 1 },
  { 0x0d4a, 0x0d4d, 1 },
  { 0x0d60, 0x0d61, 2|1 },
  { 0x0d66, 0x0d6f, 1|4 },
  { 0x0e01, 0x0e30, 2|1 },
  { 0x0e31, 0x0e31, 1 },
  { 0x0e32, 0x0e33, 2|1 },
  { 0x0e34, 0x0e3a, 1 },
  { 0x0e40, 0x0e46, 2|1 },
  { 0x0e47, 0x0e49, 1 },
  { 0x0e50, 0x0e59, 2|1|4 },
  { 0x0e5a, 0x0e5b, 2|1 },
  { 0x0e81, 0x0e82, 2|1 },
  { 0x0e84, 0x0e84, 2|1 },
  { 0x0e87, 0x0e88, 2|1 },
  { 0x0e8a, 0x0e8a, 2|1 },
  { 0x0e8d, 0x0e8d, 2|1 },
  { 0x0e94, 0x0e97, 2|1 },
  { 0x0e99, 0x0e9f, 2|1 },
  { 0x0ea1, 0x0ea3, 2|1 },
  { 0x0ea5, 0x0ea5, 2|1 },
  { 0x0ea7, 0x0ea7, 2|1 },
  { 0x0eaa, 0x0eab, 2|1 },
  { 0x0ead, 0x0eae, 2|1 },
  { 0x0eaf, 0x0eaf, 2 },
  { 0x0eb0, 0x0eb0, 2|1 },
  { 0x0eb1, 0x0eb1, 1 },
  { 0x0eb2, 0x0eb3, 2|1 },
  { 0x0eb4, 0x0eb9, 1 },
  { 0x0ebb, 0x0ebc, 1 },
  { 0x0ebd, 0x0ebd, 2|1 },
  { 0x0ec0, 0x0ec4, 2|1 },
  { 0x0ec6, 0x0ec6, 2|1 },
  { 0x0ec8, 0x0ecd, 1 },
  { 0x0ed0, 0x0ed9, 1|4 },
  { 0x0edc, 0x0edd, 1 },
  { 0x0f00, 0x0f00, 1 },
  { 0x0f18, 0x0f19, 1 },
  { 0x0f20, 0x0f33, 1|4 },
  { 0x0f35, 0x0f35, 1 },
  { 0x0f37, 0x0f37, 1 },
  { 0x0f39, 0x0f39, 1 },
  { 0x0f3e, 0x0f47, 1 },
  { 0x0f49, 0x0f69, 1 },
  { 0x0f71, 0x0f84, 1 },
  { 0x0f86, 0x0f8b, 1 },
  { 0x0f90, 0x0f95, 1 },
  { 0x0f97, 0x0f97, 1 },
  { 0x0f99, 0x0fad, 1 },
  { 0x0fb1, 0x0fb7, 1 },
  { 0x0fb9, 0x0fb9, 1 },
  { 0x10a0, 0x10c5, 2|1 },
  { 0x10d0, 0x10f6, 2|1 },
  { 0x1100, 0x1159, 2 },
  { 0x1161, 0x11a2, 2 },
  { 0x11a8, 0x11f9, 2 },
  { 0x1e00, 0x1e9a, 2|1 },
  { 0x1e9b, 0x1e9b, 1 },
  { 0x1ea0, 0x1ef9, 2|1 },
  { 0x1f00, 0x1f15, 2|1 },
  { 0x1f18, 0x1f1d, 2|1 },
  { 0x1f20, 0x1f45, 2|1 },
  { 0x1f48, 0x1f4d, 2|1 },
  { 0x1f50, 0x1f57, 2|1 },
  { 0x1f59, 0x1f59, 2|1 },
  { 0x1f5b, 0x1f5b, 2|1 },
  { 0x1f5d, 0x1f5d, 2|1 },
  { 0x1f5f, 0x1f7d, 2|1 },
  { 0x1f80, 0x1fb4, 2|1 },
  { 0x1fb6, 0x1fbc, 2|1 },
  { 0x1fbe, 0x1fbe, 1 },
  { 0x1fc2, 0x1fc4, 2|1 },
  { 0x1fc6, 0x1fcc, 2|1 },
  { 0x1fd0, 0x1fd3, 2|1 },
  { 0x1fd6, 0x1fdb, 2|1 },
  { 0x1fe0, 0x1fec, 2|1 },
  { 0x1ff2, 0x1ff4, 2|1 },
  { 0x1ff6, 0x1ffc, 2|1 },
  { 0x203f, 0x2040, 1 },
  { 0x207f, 0x207f, 1 },
  { 0x2102, 0x2102, 1 },
  { 0x2107, 0x2107, 1 },
  { 0x210a, 0x2113, 1 },
  { 0x2115, 0x2115, 1 },
  { 0x2118, 0x211d, 1 },
  { 0x2124, 0x2124, 1 },
  { 0x2126, 0x2126, 1 },
  { 0x2128, 0x2128, 1 },
  { 0x212a, 0x2131, 1 },
  { 0x2133, 0x2138, 1 },
  { 0x2160, 0x2182, 1 },
  { 0x3005, 0x3007, 1 },
  { 0x3021, 0x3029, 1 },
  { 0x3041, 0x3093, 2|1 },
  { 0x3094, 0x3094, 2 },
  { 0x309b, 0x309c, 2|1 },
  { 0x309d, 0x309e, 2 },
  { 0x30a1, 0x30f6, 2|1 },
  { 0x30f7, 0x30fa, 2 },
  { 0x30fb, 0x30fc, 2|1 },
  { 0x30fd, 0x30fe, 2 },
  { 0x3105, 0x312c, 2|1 },
  { 0x4e00, 0x9fa5, 2|1 },
  { 0xac00, 0xd7a3, 1 },
  { 0xf900, 0xfa2d, 2 },
  { 0xfb1f, 0xfb36, 2 },
  { 0xfb38, 0xfb3c, 2 },
  { 0xfb3e, 0xfb3e, 2 },
  { 0xfb40, 0xfb44, 2 },
  { 0xfb46, 0xfbb1, 2 },
  { 0xfbd3, 0xfd3f, 2 },
  { 0xfd50, 0xfd8f, 2 },
  { 0xfd92, 0xfdc7, 2 },
  { 0xfdf0, 0xfdfb, 2 },
  { 0xfe70, 0xfe72, 2 },
  { 0xfe74, 0xfe74, 2 },
  { 0xfe76, 0xfefc, 2 },
  { 0xff21, 0xff3a, 2 },
  { 0xff41, 0xff5a, 2 },
  { 0xff66, 0xffbe, 2 },
  { 0xffc2, 0xffc7, 2 },
  { 0xffca, 0xffcf, 2 },
  { 0xffd2, 0xffd7, 2 },
  { 0xffda, 0xffdc, 2 }
};
struct _cpp_strbuf
{
  uchar *text;
  size_t asize;
  size_t len;
};
static int
one_utf8_to_cppchar (const uchar **inbufp, size_t *inbytesleftp,
       cppchar_t *cp)
{
  static const uchar masks[6] = { 0x7F, 0x1F, 0x0F, 0x07, 0x02, 0x01 };
  static const uchar patns[6] = { 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
  cppchar_t c;
  const uchar *inbuf = *inbufp;
  size_t nbytes, i;
  if (*inbytesleftp < 1)
    return 22;
  c = *inbuf;
  if (c < 0x80)
    {
      *cp = c;
      *inbytesleftp -= 1;
      *inbufp += 1;
      return 0;
    }
  for (nbytes = 2; nbytes < 7; nbytes++)
    if ((c & ~masks[nbytes-1]) == patns[nbytes-1])
      goto found;
  return 84;
 found:
  if (*inbytesleftp < nbytes)
    return 22;
  c = (c & masks[nbytes-1]);
  inbuf++;
  for (i = 1; i < nbytes; i++)
    {
      cppchar_t n = *inbuf++;
      if ((n & 0xC0) != 0x80)
 return 84;
      c = ((c << 6) + (n & 0x3F));
    }
  if (c <= 0x7F && nbytes > 1) return 84;
  if (c <= 0x7FF && nbytes > 2) return 84;
  if (c <= 0xFFFF && nbytes > 3) return 84;
  if (c <= 0x1FFFFF && nbytes > 4) return 84;
  if (c <= 0x3FFFFFF && nbytes > 5) return 84;
  if (c > 0x7FFFFFFF || (c >= 0xD800 && c <= 0xDFFF)) return 84;
  *cp = c;
  *inbufp = inbuf;
  *inbytesleftp -= nbytes;
  return 0;
}
static int
one_cppchar_to_utf8 (cppchar_t c, uchar **outbufp, size_t *outbytesleftp)
{
  static const uchar masks[6] = { 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
  static const uchar limits[6] = { 0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE };
  size_t nbytes;
  uchar buf[6], *p = &buf[6];
  uchar *outbuf = *outbufp;
  nbytes = 1;
  if (c < 0x80)
    *--p = c;
  else
    {
      do
 {
   *--p = ((c & 0x3F) | 0x80);
   c >>= 6;
   nbytes++;
 }
      while (c >= 0x3F || (c & limits[nbytes-1]));
      *--p = (c | masks[nbytes-1]);
    }
  if (*outbytesleftp < nbytes)
    return 7;
  while (p < &buf[6])
    *outbuf++ = *p++;
  *outbytesleftp -= nbytes;
  *outbufp = outbuf;
  return 0;
}
static int
one_utf8_to_utf32 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp,
     uchar **outbufp, size_t *outbytesleftp)
{
  uchar *outbuf;
  cppchar_t s = 0;
  int rval;
  if (*outbytesleftp < 4)
    return 7;
  rval = one_utf8_to_cppchar (inbufp, inbytesleftp, &s);
  if (rval)
    return rval;
  outbuf = *outbufp;
  outbuf[bigend ? 3 : 0] = (s & 0x000000FF);
  outbuf[bigend ? 2 : 1] = (s & 0x0000FF00) >> 8;
  outbuf[bigend ? 1 : 2] = (s & 0x00FF0000) >> 16;
  outbuf[bigend ? 0 : 3] = (s & 0xFF000000) >> 24;
  *outbufp += 4;
  *outbytesleftp -= 4;
  return 0;
}
static int
one_utf32_to_utf8 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp,
     uchar **outbufp, size_t *outbytesleftp)
{
  cppchar_t s;
  int rval;
  const uchar *inbuf;
  if (*inbytesleftp < 4)
    return 22;
  inbuf = *inbufp;
  s = inbuf[bigend ? 0 : 3] << 24;
  s += inbuf[bigend ? 1 : 2] << 16;
  s += inbuf[bigend ? 2 : 1] << 8;
  s += inbuf[bigend ? 3 : 0];
  if (s >= 0x7FFFFFFF || (s >= 0xD800 && s <= 0xDFFF))
    return 84;
  rval = one_cppchar_to_utf8 (s, outbufp, outbytesleftp);
  if (rval)
    return rval;
  *inbufp += 4;
  *inbytesleftp -= 4;
  return 0;
}
static int
one_utf8_to_utf16 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp,
     uchar **outbufp, size_t *outbytesleftp)
{
  int rval;
  cppchar_t s = 0;
  const uchar *save_inbuf = *inbufp;
  size_t save_inbytesleft = *inbytesleftp;
  uchar *outbuf = *outbufp;
  rval = one_utf8_to_cppchar (inbufp, inbytesleftp, &s);
  if (rval)
    return rval;
  if (s > 0x0010FFFF)
    {
      *inbufp = save_inbuf;
      *inbytesleftp = save_inbytesleft;
      return 84;
    }
  if (s < 0xFFFF)
    {
      if (*outbytesleftp < 2)
 {
   *inbufp = save_inbuf;
   *inbytesleftp = save_inbytesleft;
   return 7;
 }
      outbuf[bigend ? 1 : 0] = (s & 0x00FF);
      outbuf[bigend ? 0 : 1] = (s & 0xFF00) >> 8;
      *outbufp += 2;
      *outbytesleftp -= 2;
      return 0;
    }
  else
    {
      cppchar_t hi, lo;
      if (*outbytesleftp < 4)
 {
   *inbufp = save_inbuf;
   *inbytesleftp = save_inbytesleft;
   return 7;
 }
      hi = (s - 0x10000) / 0x400 + 0xD800;
      lo = (s - 0x10000) % 0x400 + 0xDC00;
      outbuf[bigend ? 1 : 0] = (hi & 0x00FF);
      outbuf[bigend ? 0 : 1] = (hi & 0xFF00) >> 8;
      outbuf[bigend ? 3 : 2] = (lo & 0x00FF);
      outbuf[bigend ? 2 : 3] = (lo & 0xFF00) >> 8;
      *outbufp += 4;
      *outbytesleftp -= 4;
      return 0;
    }
}
static int
one_utf16_to_utf8 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp,
     uchar **outbufp, size_t *outbytesleftp)
{
  cppchar_t s;
  const uchar *inbuf = *inbufp;
  int rval;
  if (*inbytesleftp < 2)
    return 22;
  s = inbuf[bigend ? 0 : 1] << 8;
  s += inbuf[bigend ? 1 : 0];
  if (s >= 0xDC00 && s <= 0xDFFF)
    return 84;
  else if (s >= 0xD800 && s <= 0xDBFF)
    {
      cppchar_t hi = s, lo;
      if (*inbytesleftp < 4)
 return 22;
      lo = inbuf[bigend ? 2 : 3] << 8;
      lo += inbuf[bigend ? 3 : 2];
      if (lo < 0xDC00 || lo > 0xDFFF)
 return 84;
      s = (hi - 0xD800) * 0x400 + (lo - 0xDC00) + 0x10000;
    }
  rval = one_cppchar_to_utf8 (s, outbufp, outbytesleftp);
  if (rval)
    return rval;
  if (s <= 0xFFFF)
    {
      *inbufp += 2;
      *inbytesleftp -= 2;
    }
  else
    {
      *inbufp += 4;
      *inbytesleftp -= 4;
    }
  return 0;
}
static unsigned char
conversion_loop (int (*const one_conversion)(iconv_t, const uchar **, size_t *,
          uchar **, size_t *),
   iconv_t cd, const uchar *from, size_t flen, struct _cpp_strbuf *to)
{
  const uchar *inbuf;
  uchar *outbuf;
  size_t inbytesleft, outbytesleft;
  int rval;
  inbuf = from;
  inbytesleft = flen;
  outbuf = to->text + to->len;
  outbytesleft = to->asize - to->len;
  for (;;)
    {
      do
 rval = one_conversion (cd, &inbuf, &inbytesleft,
          &outbuf, &outbytesleft);
      while (inbytesleft && !rval);
      if ((inbytesleft == 0))
 {
   to->len = to->asize - outbytesleft;
   return 1;
 }
      if (rval != 7)
 {
   (*__errno_location ()) = rval;
   return 0;
 }
      outbytesleft += 256;
      to->asize += 256;
      to->text = xrealloc (to->text, to->asize);
      outbuf = to->text + to->asize - outbytesleft;
    }
}
static unsigned char
convert_utf8_utf16 (iconv_t cd, const uchar *from, size_t flen,
      struct _cpp_strbuf *to)
{
  return conversion_loop (one_utf8_to_utf16, cd, from, flen, to);
}
static unsigned char
convert_utf8_utf32 (iconv_t cd, const uchar *from, size_t flen,
      struct _cpp_strbuf *to)
{
  return conversion_loop (one_utf8_to_utf32, cd, from, flen, to);
}
static unsigned char
convert_utf16_utf8 (iconv_t cd, const uchar *from, size_t flen,
      struct _cpp_strbuf *to)
{
  return conversion_loop (one_utf16_to_utf8, cd, from, flen, to);
}
static unsigned char
convert_utf32_utf8 (iconv_t cd, const uchar *from, size_t flen,
      struct _cpp_strbuf *to)
{
  return conversion_loop (one_utf32_to_utf8, cd, from, flen, to);
}
static unsigned char
convert_no_conversion (iconv_t cd ,
         const uchar *from, size_t flen, struct _cpp_strbuf *to)
{
  if (to->len + flen > to->asize)
    {
      to->asize = to->len + flen;
      to->text = xrealloc (to->text, to->asize);
    }
  memcpy (to->text + to->len, from, flen);
  to->len += flen;
  return 1;
}
static unsigned char
convert_using_iconv (iconv_t cd, const uchar *from, size_t flen,
       struct _cpp_strbuf *to)
{
  char *inbuf;
  char *outbuf;
  size_t inbytesleft, outbytesleft;
  if (iconv (cd, 0, 0, 0, 0) == (size_t)-1)
    return 0;
  inbuf = ( char *)from;
  inbytesleft = flen;
  outbuf = (char *)to->text + to->len;
  outbytesleft = to->asize - to->len;
  for (;;)
    {
      iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
      if ((inbytesleft == 0))
 {
   to->len = to->asize - outbytesleft;
   return 1;
 }
      if ((*__errno_location ()) != 7)
 return 0;
      outbytesleft += 256;
      to->asize += 256;
      to->text = xrealloc (to->text, to->asize);
      outbuf = (char *)to->text + to->asize - outbytesleft;
    }
}
struct conversion
{
  const char *pair;
  convert_f func;
  iconv_t fake_cd;
};
static const struct conversion conversion_tab[] = {
  { "UTF-8/UTF-32LE", convert_utf8_utf32, (iconv_t)0 },
  { "UTF-8/UTF-32BE", convert_utf8_utf32, (iconv_t)1 },
  { "UTF-8/UTF-16LE", convert_utf8_utf16, (iconv_t)0 },
  { "UTF-8/UTF-16BE", convert_utf8_utf16, (iconv_t)1 },
  { "UTF-32LE/UTF-8", convert_utf32_utf8, (iconv_t)0 },
  { "UTF-32BE/UTF-8", convert_utf32_utf8, (iconv_t)1 },
  { "UTF-16LE/UTF-8", convert_utf16_utf8, (iconv_t)0 },
  { "UTF-16BE/UTF-8", convert_utf16_utf8, (iconv_t)1 }
};
static struct cset_converter
init_iconv_desc (cpp_reader *pfile, const char *to, const char *from)
{
  struct cset_converter ret;
  char *pair;
  size_t i;
  if (!strcasecmp (to, from))
    {
      ret.func = convert_no_conversion;
      ret.cd = (iconv_t) -1;
      return ret;
    }
  pair = C_alloca(strlen(to) + strlen(from) + 2);
  strcpy(pair, from);
  strcat(pair, "/");
  strcat(pair, to);
  for (i = 0; i < (sizeof (conversion_tab) / sizeof ((conversion_tab)[0])); i++)
    if (!strcasecmp (pair, conversion_tab[i].pair))
      {
 ret.func = conversion_tab[i].func;
 ret.cd = conversion_tab[i].fake_cd;
 return ret;
      }
  if (1)
    {
      ret.func = convert_using_iconv;
      ret.cd = iconv_open (to, from);
      if (ret.cd == (iconv_t) -1)
 {
   if ((*__errno_location ()) == 22)
     cpp_error (pfile, 0x03,
         "conversion from %s to %s not supported by iconv",
         from, to);
   else
     cpp_errno (pfile, 0x03, "iconv_open");
   ret.func = convert_no_conversion;
 }
    }
  else
    {
      cpp_error (pfile, 0x03,
   "no iconv implementation, cannot convert from %s to %s",
   from, to);
      ret.func = convert_no_conversion;
      ret.cd = (iconv_t) -1;
    }
  return ret;
}
void
cpp_init_iconv (cpp_reader *pfile)
{
  const char *ncset = ((pfile)->opts.narrow_charset);
  const char *wcset = ((pfile)->opts.wide_charset);
  const char *default_wcset;
  unsigned char be = ((pfile)->opts.bytes_big_endian);
  if (((pfile)->opts.wchar_precision) >= 32)
    default_wcset = be ? "UTF-32BE" : "UTF-32LE";
  else if (((pfile)->opts.wchar_precision) >= 16)
    default_wcset = be ? "UTF-16BE" : "UTF-16LE";
  else
   default_wcset = "UTF-8";
  if (!ncset)
    ncset = "UTF-8";
  if (!wcset)
    wcset = default_wcset;
  pfile->narrow_cset_desc = init_iconv_desc (pfile, ncset, "UTF-8");
  pfile->wide_cset_desc = init_iconv_desc (pfile, wcset, "UTF-8");
}
void
_cpp_destroy_iconv (cpp_reader *pfile)
{
  if (1)
    {
      if (pfile->narrow_cset_desc.func == convert_using_iconv)
 iconv_close (pfile->narrow_cset_desc.cd);
      if (pfile->wide_cset_desc.func == convert_using_iconv)
 iconv_close (pfile->wide_cset_desc.cd);
    }
}
static size_t
width_to_mask (size_t width)
{
  width = ((width) < ((8 * sizeof (cppchar_t))) ? (width) : ((8 * sizeof (cppchar_t))));
  if (width >= 8 * sizeof (size_t))
    return ~(size_t) 0;
  else
    return ((size_t) 1 << width) - 1;
}
static int
ucn_valid_in_identifier (cpp_reader *pfile, cppchar_t c)
{
  int mn, mx, md;
  mn = -1;
  mx = (sizeof (ucnranges) / sizeof ((ucnranges)[0]));
  while (mx - mn > 1)
    {
      md = (mn + mx) / 2;
      if (c < ucnranges[md].lo)
 mx = md;
      else if (c > ucnranges[md].hi)
 mn = md;
      else
 goto found;
    }
  return 0;
 found:
  if (((pfile)->opts.pedantic)
      && ((((pfile)->opts.c99) && !(ucnranges[md].flags & 1))
   || (((pfile)->opts.cplusplus)
       && !(ucnranges[md].flags & 2))))
    return 0;
  if (((pfile)->opts.c99) && (ucnranges[md].flags & 4))
    return 2;
  return 1;
}
cppchar_t
_cpp_valid_ucn (cpp_reader *pfile, const uchar **pstr,
  const uchar *limit, int identifier_pos)
{
  cppchar_t result, c;
  unsigned int length;
  const uchar *str = *pstr;
  const uchar *base = str - 2;
  if (!((pfile)->opts.cplusplus) && !((pfile)->opts.c99))
    cpp_error (pfile, 0x00,
        "universal character names are only valid in C++ and C99");
  else if (((pfile)->opts.warn_traditional) && identifier_pos == 0)
    cpp_error (pfile, 0x00,
        "the meaning of '\\%c' is different in traditional C",
        (int) str[-1]);
  if (str[-1] == 'u')
    length = 4;
  else if (str[-1] == 'U')
    length = 8;
  else
    abort();
  result = 0;
  do
    {
      c = *str;
      if (!(_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isxdigit)))
 break;
      str++;
      result = (result << 4) + ((unsigned int) _hex_value[(unsigned char) (c)]);
    }
  while (--length && str < limit);
  *pstr = str;
  if (length)
    {
      cpp_error (pfile, 0x03,
   "incomplete universal character name %.*s",
   (int) (str - base), base);
      result = 1;
    }
  else if ((result < 0xa0
     && (result != 0x24 && result != 0x40 && result != 0x60))
    || (result & 0x80000000)
    || (result >= 0xD800 && result <= 0xDFFF))
    {
      cpp_error (pfile, 0x03,
   "%.*s is not a valid universal character",
   (int) (str - base), base);
      result = 1;
    }
  else if (identifier_pos)
    {
      int validity = ucn_valid_in_identifier (pfile, result);
      if (validity == 0)
 cpp_error (pfile, 0x03,
     "universal character %.*s is not valid in an identifier",
     (int) (str - base), base);
      else if (validity == 2 && identifier_pos == 1)
 cpp_error (pfile, 0x03,
   "universal character %.*s is not valid at the start of an identifier",
     (int) (str - base), base);
    }
  if (result == 0)
    result = 1;
  return result;
}
static const uchar *
convert_ucn (cpp_reader *pfile, const uchar *from, const uchar *limit,
      struct _cpp_strbuf *tbuf, unsigned char wide)
{
  cppchar_t ucn;
  uchar buf[6];
  uchar *bufp = buf;
  size_t bytesleft = 6;
  int rval;
  struct cset_converter cvt
    = wide ? pfile->wide_cset_desc : pfile->narrow_cset_desc;
  from++;
  ucn = _cpp_valid_ucn (pfile, &from, limit, 0);
  rval = one_cppchar_to_utf8 (ucn, &bufp, &bytesleft);
  if (rval)
    {
      (*__errno_location ()) = rval;
      cpp_errno (pfile, 0x03,
   "converting UCN to source character set");
    }
  else if (!cvt.func (cvt.cd, buf, 6 - bytesleft, tbuf))
    cpp_errno (pfile, 0x03,
        "converting UCN to execution character set");
  return from;
}
static void
emit_numeric_escape (cpp_reader *pfile, cppchar_t n,
       struct _cpp_strbuf *tbuf, unsigned char wide)
{
  if (wide)
    {
      unsigned char bigend = ((pfile)->opts.bytes_big_endian);
      size_t width = ((pfile)->opts.wchar_precision);
      size_t cwidth = ((pfile)->opts.char_precision);
      size_t cmask = width_to_mask (cwidth);
      size_t nbwc = width / cwidth;
      size_t i;
      size_t off = tbuf->len;
      cppchar_t c;
      if (tbuf->len + nbwc > tbuf->asize)
 {
   tbuf->asize += 256;
   tbuf->text = xrealloc (tbuf->text, tbuf->asize);
 }
      for (i = 0; i < nbwc; i++)
 {
   c = n & cmask;
   n >>= cwidth;
   tbuf->text[off + (bigend ? nbwc - i - 1 : i)] = c;
 }
      tbuf->len += nbwc;
    }
  else
    {
      if (tbuf->len + 1 > tbuf->asize)
 {
   tbuf->asize += 256;
   tbuf->text = xrealloc (tbuf->text, tbuf->asize);
 }
      tbuf->text[tbuf->len++] = n;
    }
}
static const uchar *
convert_hex (cpp_reader *pfile, const uchar *from, const uchar *limit,
      struct _cpp_strbuf *tbuf, unsigned char wide)
{
  cppchar_t c, n = 0, overflow = 0;
  int digits_found = 0;
  size_t width = (wide ? ((pfile)->opts.wchar_precision)
    : ((pfile)->opts.char_precision));
  size_t mask = width_to_mask (width);
  if (((pfile)->opts.warn_traditional))
    cpp_error (pfile, 0x00,
        "the meaning of '\\x' is different in traditional C");
  from++;
  while (from < limit)
    {
      c = *from;
      if (! (((unsigned int) _hex_value[(unsigned char) (c)]) != 99))
 break;
      from++;
      overflow |= n ^ (n << 4 >> 4);
      n = (n << 4) + ((unsigned int) _hex_value[(unsigned char) (c)]);
      digits_found = 1;
    }
  if (!digits_found)
    {
      cpp_error (pfile, 0x03,
   "\\x used with no following hex digits");
      return from;
    }
  if (overflow | (n != (n & mask)))
    {
      cpp_error (pfile, 0x02,
   "hex escape sequence out of range");
      n &= mask;
    }
  emit_numeric_escape (pfile, n, tbuf, wide);
  return from;
}
static const uchar *
convert_oct (cpp_reader *pfile, const uchar *from, const uchar *limit,
      struct _cpp_strbuf *tbuf, unsigned char wide)
{
  size_t count = 0;
  cppchar_t c, n = 0;
  size_t width = (wide ? ((pfile)->opts.wchar_precision)
    : ((pfile)->opts.char_precision));
  size_t mask = width_to_mask (width);
  unsigned char overflow = 0;
  while (from < limit && count++ < 3)
    {
      c = *from;
      if (c < '0' || c > '7')
 break;
      from++;
      overflow |= n ^ (n << 3 >> 3);
      n = (n << 3) + c - '0';
    }
  if (n != (n & mask))
    {
      cpp_error (pfile, 0x02,
   "octal escape sequence out of range");
      n &= mask;
    }
  emit_numeric_escape (pfile, n, tbuf, wide);
  return from;
}
static const uchar *
convert_escape (cpp_reader *pfile, const uchar *from, const uchar *limit,
  struct _cpp_strbuf *tbuf, unsigned char wide)
{
  static const uchar charconsts[] = { 7, 8, 27, 12, 10, 13, 9, 11 };
  uchar c;
  struct cset_converter cvt
    = wide ? pfile->wide_cset_desc : pfile->narrow_cset_desc;
  c = *from;
  switch (c)
    {
    case 'u': case 'U':
      return convert_ucn (pfile, from, limit, tbuf, wide);
    case 'x':
      return convert_hex (pfile, from, limit, tbuf, wide);
      break;
    case '0': case '1': case '2': case '3':
    case '4': case '5': case '6': case '7':
      return convert_oct (pfile, from, limit, tbuf, wide);
    case '\\': case '\'': case '"': case '?': break;
    case '(': case '{': case '[': case '%':
      if (((pfile)->opts.pedantic))
 goto unknown;
      break;
    case 'b': c = charconsts[1]; break;
    case 'f': c = charconsts[3]; break;
    case 'n': c = charconsts[4]; break;
    case 'r': c = charconsts[5]; break;
    case 't': c = charconsts[6]; break;
    case 'v': c = charconsts[7]; break;
    case 'a':
      if (((pfile)->opts.warn_traditional))
 cpp_error (pfile, 0x00,
     "the meaning of '\\a' is different in traditional C");
      c = charconsts[0];
      break;
    case 'e': case 'E':
      if (((pfile)->opts.pedantic))
 cpp_error (pfile, 0x02,
     "non-ISO-standard escape sequence, '\\%c'", (int) c);
      c = charconsts[2];
      break;
    default:
    unknown:
      if ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isgraph)))
 cpp_error (pfile, 0x02,
     "unknown escape sequence '\\%c'", (int) c);
      else
 cpp_error (pfile, 0x02,
     "unknown escape sequence: '\\%03o'", (int) c);
    }
  if (!cvt.func (cvt.cd, &c, 1, tbuf))
    cpp_errno (pfile, 0x03,
        "converting escape sequence to execution character set");
  return from + 1;
}
unsigned char
cpp_interpret_string (cpp_reader *pfile, const cpp_string *from, size_t count,
        cpp_string *to, unsigned char wide)
{
  struct _cpp_strbuf tbuf;
  const uchar *p, *base, *limit;
  size_t i;
  struct cset_converter cvt
    = wide ? pfile->wide_cset_desc : pfile->narrow_cset_desc;
  tbuf.asize = ((256) > (from->len) ? (256) : (from->len));
  tbuf.text = xmalloc (tbuf.asize);
  tbuf.len = 0;
  for (i = 0; i < count; i++)
    {
      p = from[i].text;
      if (*p == 'L') p++;
      p++;
      limit = from[i].text + from[i].len - 1;
      for (;;)
 {
   base = p;
   while (p < limit && *p != '\\')
     p++;
   if (p > base)
     {
       if (!cvt.func (cvt.cd, base, p - base, &tbuf))
  goto fail;
     }
   if (p == limit)
     break;
   p = convert_escape (pfile, p + 1, limit, &tbuf, wide);
 }
    }
  emit_numeric_escape (pfile, 0, &tbuf, wide);
  tbuf.text = xrealloc (tbuf.text, tbuf.len);
  to->text = tbuf.text;
  to->len = tbuf.len;
  return 1;
 fail:
  cpp_errno (pfile, 0x03, "converting to execution character set");
  free (tbuf.text);
  return 0;
}
unsigned char
cpp_interpret_string_notranslate (cpp_reader *pfile, const cpp_string *from,
      size_t count, cpp_string *to, unsigned char wide)
{
  struct cset_converter save_narrow_cset_desc = pfile->narrow_cset_desc;
  unsigned char retval;
  pfile->narrow_cset_desc.func = convert_no_conversion;
  pfile->narrow_cset_desc.cd = (iconv_t) -1;
  retval = cpp_interpret_string (pfile, from, count, to, wide);
  pfile->narrow_cset_desc = save_narrow_cset_desc;
  return retval;
}
static cppchar_t
narrow_str_to_charconst (cpp_reader *pfile, cpp_string str,
    unsigned int *pchars_seen, int *unsignedp)
{
  size_t width = ((pfile)->opts.char_precision);
  size_t max_chars = ((pfile)->opts.int_precision) / width;
  size_t mask = width_to_mask (width);
  size_t i;
  cppchar_t result, c;
  unsigned char unsigned_p;
  result = 0;
  for (i = 0; i < str.len - 1; i++)
    {
      c = str.text[i] & mask;
      if (width < (8 * sizeof (cppchar_t)))
 result = (result << width) | c;
      else
 result = c;
    }
  if (i > max_chars)
    {
      i = max_chars;
      cpp_error (pfile, 0x00,
   "character constant too long for its type");
    }
  else if (i > 1 && ((pfile)->opts.warn_multichar))
    cpp_error (pfile, 0x00, "multi-character character constant");
  if (i > 1)
    unsigned_p = 0;
  else
    unsigned_p = ((pfile)->opts.unsigned_char);
  if (i > 1)
    width = ((pfile)->opts.int_precision);
  if (width < (8 * sizeof (cppchar_t)))
    {
      mask = ((cppchar_t) 1 << width) - 1;
      if (unsigned_p || !(result & (1 << (width - 1))))
 result &= mask;
      else
 result |= ~mask;
    }
  *pchars_seen = i;
  *unsignedp = unsigned_p;
  return result;
}
static cppchar_t
wide_str_to_charconst (cpp_reader *pfile, cpp_string str,
         unsigned int *pchars_seen, int *unsignedp)
{
  unsigned char bigend = ((pfile)->opts.bytes_big_endian);
  size_t width = ((pfile)->opts.wchar_precision);
  size_t cwidth = ((pfile)->opts.char_precision);
  size_t mask = width_to_mask (width);
  size_t cmask = width_to_mask (cwidth);
  size_t nbwc = width / cwidth;
  size_t off, i;
  cppchar_t result = 0, c;
  off = str.len - (nbwc * 2);
  result = 0;
  for (i = 0; i < nbwc; i++)
    {
      c = bigend ? str.text[off + i] : str.text[off + nbwc - i - 1];
      result = (result << cwidth) | (c & cmask);
    }
  if (off > 0)
    cpp_error (pfile, 0x00,
        "character constant too long for its type");
  if (width < (8 * sizeof (cppchar_t)))
    {
      if (((pfile)->opts.unsigned_wchar) || !(result & (1 << (width - 1))))
 result &= mask;
      else
 result |= ~mask;
    }
  *unsignedp = ((pfile)->opts.unsigned_wchar);
  *pchars_seen = 1;
  return result;
}
cppchar_t
cpp_interpret_charconst (cpp_reader *pfile, const cpp_token *token,
    unsigned int *pchars_seen, int *unsignedp)
{
  cpp_string str = { 0, 0 };
  unsigned char wide = (token->type == CPP_WCHAR);
  cppchar_t result;
  if (token->val.str.len == (size_t) (2 + wide))
    {
      cpp_error (pfile, 0x03, "empty character constant");
      return 0;
    }
  else if (!cpp_interpret_string (pfile, &token->val.str, 1, &str, wide))
    return 0;
  if (wide)
    result = wide_str_to_charconst (pfile, str, pchars_seen, unsignedp);
  else
    result = narrow_str_to_charconst (pfile, str, pchars_seen, unsignedp);
  if (str.text != token->val.str.text)
    free ((void *)str.text);
  return result;
}
uchar *
_cpp_convert_input (cpp_reader *pfile, const char *input_charset,
      uchar *input, size_t size, size_t len, off_t *st_size)
{
  struct cset_converter input_cset;
  struct _cpp_strbuf to;
  input_cset = init_iconv_desc (pfile, "UTF-8", input_charset);
  if (input_cset.func == convert_no_conversion)
    {
      to.text = input;
      to.asize = size;
      to.len = len;
    }
  else
    {
      to.asize = ((65536) > (len) ? (65536) : (len));
      to.text = xmalloc (to.asize);
      to.len = 0;
      if (!input_cset.func (input_cset.cd, input, len, &to))
 cpp_error (pfile, 0x03,
     "failure to convert %s to %s",
     ((pfile)->opts.input_charset), "UTF-8");
      free (input);
    }
  if (input_cset.func == convert_using_iconv)
    iconv_close (input_cset.cd);
  if (to.len + 4096 < to.asize || to.len >= to.asize)
    to.text = xrealloc (to.text, to.len + 1);
  to.text[to.len] = '\n';
  *st_size = to.len;
  return to.text;
}
const char *
_cpp_default_encoding (void)
{
  const char *current_encoding = ((void *)0);
  if (current_encoding == ((void *)0) || *current_encoding == '\0')
    current_encoding = "UTF-8";
  return current_encoding;
}
struct depends;
extern struct depends *deps_init (void);
extern void deps_free (struct depends *);
extern void deps_add_vpath (struct depends *, const char *);
extern void deps_add_target (struct depends *, const char *, int);
extern void deps_add_default_target (struct depends *, const char *);
extern void deps_add_dep (struct depends *, const char *);
extern void deps_write (const struct depends *, FILE *, unsigned int);
extern int deps_save (struct depends *, FILE *);
extern int deps_restore (struct depends *, FILE *, const char *);
extern void deps_phony_targets (const struct depends *, FILE *);
struct if_stack
{
  struct if_stack *next;
  unsigned int line;
  const cpp_hashnode *mi_cmacro;
  unsigned char skip_elses;
  unsigned char was_skipping;
  int type;
};
typedef void (*pragma_cb) (cpp_reader *);
struct pragma_entry
{
  struct pragma_entry *next;
  const cpp_hashnode *pragma;
  int is_nspace;
  union {
    pragma_cb handler;
    struct pragma_entry *space;
  } u;
};
typedef void (*directive_handler) (cpp_reader *);
typedef struct directive directive;
struct directive
{
  directive_handler handler;
  const uchar *name;
  unsigned short length;
  unsigned char origin;
  unsigned char flags;
};
static void skip_rest_of_line (cpp_reader *);
static void check_eol (cpp_reader *);
static void start_directive (cpp_reader *);
static void prepare_directive_trad (cpp_reader *);
static void end_directive (cpp_reader *, int);
static void directive_diagnostics (cpp_reader *, const directive *, int);
static void run_directive (cpp_reader *, int, const char *, size_t);
static char *glue_header_name (cpp_reader *);
static const char *parse_include (cpp_reader *, int *);
static void push_conditional (cpp_reader *, int, int, const cpp_hashnode *);
static unsigned int read_flag (cpp_reader *, unsigned int);
static int strtoul_for_line (const uchar *, unsigned int, unsigned long *);
static void do_diagnostic (cpp_reader *, int, int);
static cpp_hashnode *lex_macro_node (cpp_reader *);
static int undefine_macros (cpp_reader *, cpp_hashnode *, void *);
static void do_include_common (cpp_reader *, enum include_type);
static struct pragma_entry *lookup_pragma_entry (struct pragma_entry *,
                                                 const cpp_hashnode *);
static struct pragma_entry *insert_pragma_entry (cpp_reader *,
                                                 struct pragma_entry **,
                                                 const cpp_hashnode *,
                                                 pragma_cb);
static int count_registered_pragmas (struct pragma_entry *);
static char ** save_registered_pragmas (struct pragma_entry *, char **);
static char ** restore_registered_pragmas (cpp_reader *, struct pragma_entry *,
                                           char **);
static void do_pragma_once (cpp_reader *);
static void do_pragma_poison (cpp_reader *);
static void do_pragma_system_header (cpp_reader *);
static void do_pragma_dependency (cpp_reader *);
static void do_linemarker (cpp_reader *);
static const cpp_token *get_token_no_padding (cpp_reader *);
static const cpp_token *get__Pragma_string (cpp_reader *);
static void destringize_and_run (cpp_reader *, const cpp_string *);
static int parse_answer (cpp_reader *, struct answer **, int);
static cpp_hashnode *parse_assertion (cpp_reader *, struct answer **, int);
static struct answer ** find_answer (cpp_hashnode *, const struct answer *);
static void handle_assertion (cpp_reader *, const char *, int);
static void do_define (cpp_reader *); static void do_include (cpp_reader *); static void do_endif (cpp_reader *); static void do_ifdef (cpp_reader *); static void do_if (cpp_reader *); static void do_else (cpp_reader *); static void do_ifndef (cpp_reader *); static void do_undef (cpp_reader *); static void do_line (cpp_reader *); static void do_elif (cpp_reader *); static void do_error (cpp_reader *); static void do_pragma (cpp_reader *); static void do_warning (cpp_reader *); static void do_include_next (cpp_reader *); static void do_ident (cpp_reader *); static void do_import (cpp_reader *); static void do_assert (cpp_reader *); static void do_unassert (cpp_reader *); static void do_sccs (cpp_reader *);
enum
{
  T_DEFINE = 0, T_INCLUDE, T_ENDIF, T_IFDEF, T_IF, T_ELSE, T_IFNDEF, T_UNDEF, T_LINE, T_ELIF, T_ERROR, T_PRAGMA, T_WARNING, T_INCLUDE_NEXT, T_IDENT, T_IMPORT, T_ASSERT, T_UNASSERT, T_SCCS,
  N_DIRECTIVES
};
static const directive dtable[] =
{
{ do_define, (const uchar *) "define", sizeof "define" - 1, 0, (1 << 3) }, { do_include, (const uchar *) "include", sizeof "include" - 1, 0, (1 << 2) | (1 << 4) }, { do_endif, (const uchar *) "endif", sizeof "endif" - 1, 0, (1 << 0) }, { do_ifdef, (const uchar *) "ifdef", sizeof "ifdef" - 1, 0, (1 << 0) | (1 << 1) }, { do_if, (const uchar *) "if", sizeof "if" - 1, 0, (1 << 0) | (1 << 1) | (1 << 4) }, { do_else, (const uchar *) "else", sizeof "else" - 1, 0, (1 << 0) }, { do_ifndef, (const uchar *) "ifndef", sizeof "ifndef" - 1, 0, (1 << 0) | (1 << 1) }, { do_undef, (const uchar *) "undef", sizeof "undef" - 1, 0, (1 << 3) }, { do_line, (const uchar *) "line", sizeof "line" - 1, 0, (1 << 4) }, { do_elif, (const uchar *) "elif", sizeof "elif" - 1, 1, (1 << 0) | (1 << 4) }, { do_error, (const uchar *) "error", sizeof "error" - 1, 1, 0 }, { do_pragma, (const uchar *) "pragma", sizeof "pragma" - 1, 1, (1 << 3) }, { do_warning, (const uchar *) "warning", sizeof "warning" - 1, 2, 0 }, { do_include_next, (const uchar *) "include_next", sizeof "include_next" - 1, 2, (1 << 2) | (1 << 4) }, { do_ident, (const uchar *) "ident", sizeof "ident" - 1, 2, (1 << 3) }, { do_import, (const uchar *) "import", sizeof "import" - 1, 2, (1 << 2) | (1 << 4) }, { do_assert, (const uchar *) "assert", sizeof "assert" - 1, 2, 0 }, { do_unassert, (const uchar *) "unassert", sizeof "unassert" - 1, 2, 0 }, { do_sccs, (const uchar *) "sccs", sizeof "sccs" - 1, 2, 0 }
};
static const directive linemarker_dir =
{
  do_linemarker, (const uchar *)"#", 1, 0, (1 << 3)
};
static void
skip_rest_of_line (cpp_reader *pfile)
{
  while (pfile->context->prev)
    _cpp_pop_context (pfile);
  if (! (pfile->cur_token[-1].type == CPP_EOF))
    while (_cpp_lex_token (pfile)->type != CPP_EOF)
      ;
}
static void
check_eol (cpp_reader *pfile)
{
  if (! (pfile->cur_token[-1].type == CPP_EOF) && _cpp_lex_token (pfile)->type != CPP_EOF)
    cpp_error (pfile, 0x02, "extra tokens at end of #%s directive",
        pfile->directive1->name);
}
static void
start_directive (cpp_reader *pfile)
{
  pfile->state.in_directive = 1;
  pfile->state.save_comments = 0;
  pfile->directive_line = pfile->line_table->highest_line;
}
static void
end_directive (cpp_reader *pfile, int skip_line)
{
  if (((pfile)->opts.traditional))
    {
      pfile->state.prevent_expansion--;
      if (pfile->directive1 != &dtable[T_DEFINE])
 _cpp_remove_overlay (pfile);
    }
  else if (skip_line)
    {
      skip_rest_of_line (pfile);
      if (!pfile->keep_tokens)
 {
   pfile->cur_run = &pfile->base_run;
   pfile->cur_token = pfile->base_run.base;
 }
    }
  pfile->state.save_comments = ! ((pfile)->opts.discard_comments);
  pfile->state.in_directive = 0;
  pfile->state.in_expression = 0;
  pfile->state.angled_headers = 0;
  pfile->directive1 = 0;
}
static void
prepare_directive_trad (cpp_reader *pfile)
{
  if (pfile->directive1 != &dtable[T_DEFINE])
    {
      unsigned char no_expand = (pfile->directive1
   && ! (pfile->directive1->flags & (1 << 4)));
      unsigned char was_skipping = pfile->state.skipping;
      pfile->state.in_expression = (pfile->directive1 == &dtable[T_IF]
        || pfile->directive1 == &dtable[T_ELIF]);
      if (pfile->state.in_expression)
 pfile->state.skipping = 0;
      if (no_expand)
 pfile->state.prevent_expansion++;
      _cpp_scan_out_logical_line (pfile, ((void *)0));
      if (no_expand)
 pfile->state.prevent_expansion--;
      pfile->state.skipping = was_skipping;
      _cpp_overlay_buffer (pfile, pfile->out.base,
      pfile->out.cur - pfile->out.base);
    }
  pfile->state.prevent_expansion++;
}
static void
directive_diagnostics (cpp_reader *pfile, const directive *dir, int indented)
{
  if (((pfile)->opts.pedantic)
      && ! pfile->state.skipping
      && dir->origin == 2)
    cpp_error (pfile, 0x02, "#%s is a GCC extension", dir->name);
  if (((pfile)->opts.warn_traditional))
    {
      if (dir == &dtable[T_ELIF])
 cpp_error (pfile, 0x00,
     "suggest not using #elif in traditional C");
      else if (indented && dir->origin == 0)
 cpp_error (pfile, 0x00,
     "traditional C ignores #%s with the # indented",
     dir->name);
      else if (!indented && dir->origin != 0)
 cpp_error (pfile, 0x00,
     "suggest hiding #%s from traditional C with an indented #",
     dir->name);
    }
}
int
_cpp_handle_directive (cpp_reader *pfile, int indented)
{
  const directive *dir = 0;
  const cpp_token *dname;
  unsigned char was_parsing_args = pfile->state.parsing_args;
  unsigned char was_discarding_output = pfile->state.discarding_output;
  int skip = 1;
  if (was_discarding_output)
    pfile->state.prevent_expansion = 0;
  if (was_parsing_args)
    {
      if (((pfile)->opts.pedantic))
 cpp_error (pfile, 0x02,
      "embedding a directive within macro arguments is not portable");
      pfile->state.parsing_args = 0;
      pfile->state.prevent_expansion = 0;
    }
  start_directive (pfile);
  dname = _cpp_lex_token (pfile);
  if (dname->type == CPP_NAME)
    {
      if (dname->val.node->is_directive)
 dir = &dtable[dname->val.node->directive_index];
    }
  else if (dname->type == CPP_NUMBER && ((pfile)->opts.lang) != CLK_ASM)
    {
      dir = &linemarker_dir;
      if (((pfile)->opts.pedantic) && ! ((pfile)->opts.preprocessed)
   && ! pfile->state.skipping)
 cpp_error (pfile, 0x02,
     "style of line directive is a GCC extension");
    }
  if (dir)
    {
      if (! (dir->flags & (1 << 1)))
 pfile->mi_valid = 0;
      if (((pfile)->opts.preprocessed)
   && (indented || !(dir->flags & (1 << 3))))
 {
   skip = 0;
   dir = 0;
 }
      else
 {
   pfile->state.angled_headers = dir->flags & (1 << 2);
   pfile->state.directive_wants_padding = dir->flags & (1 << 2);
   if (! ((pfile)->opts.preprocessed))
     directive_diagnostics (pfile, dir, indented);
   if (pfile->state.skipping && !(dir->flags & (1 << 0)))
     dir = 0;
 }
    }
  else if (dname->type == CPP_EOF)
    ;
  else
    {
      if (((pfile)->opts.lang) == CLK_ASM)
 skip = 0;
      else if (!pfile->state.skipping)
 cpp_error (pfile, 0x03, "invalid preprocessing directive #%s",
     cpp_token_as_text (pfile, dname));
    }
  pfile->directive1 = dir;
  if (((pfile)->opts.traditional))
    prepare_directive_trad (pfile);
  if (dir)
    pfile->directive1->handler (pfile);
  else if (skip == 0)
    _cpp_backup_tokens (pfile, 1);
  end_directive (pfile, skip);
  if (was_parsing_args)
    {
      pfile->state.parsing_args = 2;
      pfile->state.prevent_expansion = 1;
    }
  if (was_discarding_output)
    pfile->state.prevent_expansion = 1;
  return skip;
}
static void
run_directive (cpp_reader *pfile, int dir_no, const char *buf, size_t count)
{
  cpp_push_buffer (pfile, (const uchar *) buf, count,
                       1);
  if (dir_no == T_PRAGMA)
    pfile->buffer->file = pfile->buffer->prev->file;
  start_directive (pfile);
  _cpp_clean_line (pfile);
  pfile->directive1 = &dtable[dir_no];
  if (((pfile)->opts.traditional))
    prepare_directive_trad (pfile);
  pfile->directive1->handler (pfile);
  end_directive (pfile, 1);
  if (dir_no == T_PRAGMA)
    pfile->buffer->file = ((void *)0);
  _cpp_pop_buffer (pfile);
}
static cpp_hashnode *
lex_macro_node (cpp_reader *pfile)
{
  const cpp_token *token = _cpp_lex_token (pfile);
  if (token->type == CPP_NAME)
    {
      cpp_hashnode *node = token->val.node;
      if (node == pfile->spec_nodes.n_defined)
 cpp_error (pfile, 0x03,
     "\"defined\" cannot be used as a macro name");
      else if (! (node->flags & (1 << 1)))
 return node;
    }
  else if (token->flags & (1 << 4))
    cpp_error (pfile, 0x03,
       "\"%s\" cannot be used as a macro name as it is an operator in C++",
        ((&(token->val.node)->ident)->str));
  else if (token->type == CPP_EOF)
    cpp_error (pfile, 0x03, "no macro name given in #%s directive",
        pfile->directive1->name);
  else
    cpp_error (pfile, 0x03, "macro names must be identifiers");
  return ((void *)0);
}
static void
do_define (cpp_reader *pfile)
{
  cpp_hashnode *node = lex_macro_node (pfile);
  if (node)
    {
      pfile->state.save_comments =
 ! ((pfile)->opts.discard_comments_in_macro_exp);
      if (_cpp_create_definition (pfile, node))
 if (pfile->cb.define)
   pfile->cb.define (pfile, pfile->directive_line, node);
    }
}
static void
do_undef (cpp_reader *pfile)
{
  cpp_hashnode *node = lex_macro_node (pfile);
  if (node)
    {
      if (pfile->cb.undef)
 pfile->cb.undef (pfile, pfile->directive_line, node);
      if (node->type == NT_MACRO)
 {
   if (node->flags & (1 << 4))
     cpp_error (pfile, 0x00,
         "undefining \"%s\"", ((&(node)->ident)->str));
   if (((pfile)->opts.warn_unused_macros))
     _cpp_warn_if_unused_macro (pfile, node, ((void *)0));
   _cpp_free_definition (node);
 }
    }
  check_eol (pfile);
}
static int
undefine_macros (cpp_reader *pfile , cpp_hashnode *h,
   void *data_p )
{
  h->type = NT_VOID;
  h->flags &= ~((1 << 1)|(1 << 2)|(1 << 5));
  return 1;
}
void
cpp_undef_all (cpp_reader *pfile)
{
  cpp_forall_identifiers (pfile, undefine_macros, ((void *)0));
}
static char *
glue_header_name (cpp_reader *pfile)
{
  const cpp_token *token;
  char *buffer;
  size_t len, total_len = 0, capacity = 1024;
  buffer = xmalloc (capacity);
  for (;;)
    {
      token = get_token_no_padding (pfile);
      if (token->type == CPP_GREATER)
 break;
      if (token->type == CPP_EOF)
 {
   cpp_error (pfile, 0x03, "missing terminating > character");
   break;
 }
      len = cpp_token_len (token) + 2;
      if (total_len + len > capacity)
 {
   capacity = (capacity + len) * 2;
   buffer = xrealloc (buffer, capacity);
 }
      if (token->flags & (1 << 0))
 buffer[total_len++] = ' ';
      total_len = (cpp_spell_token (pfile, token, (uchar *) &buffer[total_len])
     - (uchar *) buffer);
    }
  buffer[total_len] = '\0';
  return buffer;
}
static const char *
parse_include (cpp_reader *pfile, int *pangle_brackets)
{
  char *fname;
  const cpp_token *header1;
  header1 = get_token_no_padding (pfile);
  if (header1->type == CPP_STRING || header1->type == CPP_HEADER_NAME)
    {
      fname = xmalloc (header1->val.str.len - 1);
      memcpy (fname, header1->val.str.text + 1, header1->val.str.len - 2);
      fname[header1->val.str.len - 2] = '\0';
      *pangle_brackets = header1->type == CPP_HEADER_NAME;
    }
  else if (header1->type == CPP_LESS)
    {
      fname = glue_header_name (pfile);
      *pangle_brackets = 1;
    }
  else
    {
      const unsigned char *dir;
      if (pfile->directive1 == &dtable[T_PRAGMA])
 dir = (const uchar *)"pragma dependency";
      else
 dir = pfile->directive1->name;
      cpp_error (pfile, 0x03, "#%s expects \"FILENAME\" or <FILENAME>",
   dir);
      return ((void *)0);
    }
  check_eol (pfile);
  return fname;
}
static void
do_include_common (cpp_reader *pfile, enum include_type type)
{
  const char *fname;
  int angle_brackets;
  fname = parse_include (pfile, &angle_brackets);
  if (!fname)
    return;
  if (pfile->line_table->depth >= 200)
    cpp_error (pfile, 0x03, "#include nested too deeply");
  else
    {
      skip_rest_of_line (pfile);
      if (pfile->cb.include)
 pfile->cb.include (pfile, pfile->directive_line,
      pfile->directive1->name, fname, angle_brackets);
      _cpp_stack_include (pfile, fname, angle_brackets, type);
    }
  free ((void *) fname);
}
static void
do_include (cpp_reader *pfile)
{
  do_include_common (pfile, IT_INCLUDE);
}
static void
do_import (cpp_reader *pfile)
{
  do_include_common (pfile, IT_IMPORT);
}
static void
do_include_next (cpp_reader *pfile)
{
  enum include_type type = IT_INCLUDE_NEXT;
  if (! pfile->buffer->prev)
    {
      cpp_error (pfile, 0x00,
   "#include_next in primary source file");
      type = IT_INCLUDE;
    }
  do_include_common (pfile, type);
}
static unsigned int
read_flag (cpp_reader *pfile, unsigned int last)
{
  const cpp_token *token = _cpp_lex_token (pfile);
  if (token->type == CPP_NUMBER && token->val.str.len == 1)
    {
      unsigned int flag = token->val.str.text[0] - '0';
      if (flag > last && flag <= 4
   && (flag != 4 || last == 3)
   && (flag != 2 || last == 0))
 return flag;
    }
  if (token->type != CPP_EOF)
    cpp_error (pfile, 0x03, "invalid flag \"%s\" in line directive",
        cpp_token_as_text (pfile, token));
  return 0;
}
static int
strtoul_for_line (const uchar *str, unsigned int len, long unsigned int *nump)
{
  unsigned long reg = 0;
  uchar c;
  while (len--)
    {
      c = *str++;
      if (!(_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isdigit)))
 return 1;
      reg *= 10;
      reg += c - '0';
    }
  *nump = reg;
  return 0;
}
static void
do_line (cpp_reader *pfile)
{
  const struct line_maps *line_table = pfile->line_table;
  const struct line_map *map = &line_table->maps[line_table->used - 1];
  const cpp_token *token;
  const char *new_file = map->to_file;
  unsigned long new_lineno;
  unsigned int cap = ((pfile)->opts.c99) ? 2147483647 : 32767;
  token = cpp_get_token (pfile);
  if (token->type != CPP_NUMBER
      || strtoul_for_line (token->val.str.text, token->val.str.len,
      &new_lineno))
    {
      cpp_error (pfile, 0x03,
   "\"%s\" after #line is not a positive integer",
   cpp_token_as_text (pfile, token));
      return;
    }
  if (((pfile)->opts.pedantic) && (new_lineno == 0 || new_lineno > cap))
    cpp_error (pfile, 0x02, "line number out of range");
  token = cpp_get_token (pfile);
  if (token->type == CPP_STRING)
    {
      cpp_string s = { 0, 0 };
      if (cpp_interpret_string_notranslate (pfile, &token->val.str, 1,
         &s, 0))
 new_file = (const char *)s.text;
      check_eol (pfile);
    }
  else if (token->type != CPP_EOF)
    {
      cpp_error (pfile, 0x03, "\"%s\" is not a valid filename",
   cpp_token_as_text (pfile, token));
      return;
    }
  skip_rest_of_line (pfile);
  _cpp_do_file_change (pfile, LC_RENAME, new_file, new_lineno,
         map->sysp);
}
static void
do_linemarker (cpp_reader *pfile)
{
  const struct line_maps *line_table = pfile->line_table;
  const struct line_map *map = &line_table->maps[line_table->used - 1];
  const cpp_token *token;
  const char *new_file = map->to_file;
  unsigned long new_lineno;
  unsigned int new_sysp = map->sysp;
  enum lc_reason reason = LC_RENAME;
  int flag;
  _cpp_backup_tokens (pfile, 1);
  token = cpp_get_token (pfile);
  if (token->type != CPP_NUMBER
      || strtoul_for_line (token->val.str.text, token->val.str.len,
      &new_lineno))
    {
      cpp_error (pfile, 0x03,
   "\"%s\" after # is not a positive integer",
   cpp_token_as_text (pfile, token));
      return;
    }
  token = cpp_get_token (pfile);
  if (token->type == CPP_STRING)
    {
      cpp_string s = { 0, 0 };
      if (cpp_interpret_string_notranslate (pfile, &token->val.str,
         1, &s, 0))
 new_file = (const char *)s.text;
      new_sysp = 0;
      flag = read_flag (pfile, 0);
      if (flag == 1)
 {
   reason = LC_ENTER;
   _cpp_fake_include (pfile, new_file);
   flag = read_flag (pfile, flag);
 }
      else if (flag == 2)
 {
   reason = LC_LEAVE;
   flag = read_flag (pfile, flag);
 }
      if (flag == 3)
 {
   new_sysp = 1;
   flag = read_flag (pfile, flag);
   if (flag == 4)
     new_sysp = 2;
   pfile->buffer->sysp = new_sysp;
 }
      check_eol (pfile);
    }
  else if (token->type != CPP_EOF)
    {
      cpp_error (pfile, 0x03, "\"%s\" is not a valid filename",
   cpp_token_as_text (pfile, token));
      return;
    }
  skip_rest_of_line (pfile);
  _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp);
}
void
_cpp_do_file_change (cpp_reader *pfile, enum lc_reason reason,
       const char *to_file, unsigned int file_line,
       unsigned int sysp)
{
  const struct line_map *map = linemap_add (pfile->line_table, reason, sysp,
         to_file, file_line);
  if (map != ((void *)0))
    linemap_line_start (pfile->line_table, map->to_line, 127);
  if (pfile->cb.file_change)
    pfile->cb.file_change (pfile, map);
}
static void
do_diagnostic (cpp_reader *pfile, int code, int print_dir)
{
  if (_cpp_begin_message (pfile, code, pfile->cur_token[-1].src_loc, 0))
    {
      if (print_dir)
 fprintf (stderr, "#%s ", pfile->directive1->name);
      pfile->state.prevent_expansion++;
      cpp_output_line (pfile, stderr);
      pfile->state.prevent_expansion--;
    }
}
static void
do_error (cpp_reader *pfile)
{
  do_diagnostic (pfile, 0x03, 1);
}
static void
do_warning (cpp_reader *pfile)
{
  do_diagnostic (pfile, 0x01, 1);
}
static void
do_ident (cpp_reader *pfile)
{
  const cpp_token *str = cpp_get_token (pfile);
  if (str->type != CPP_STRING)
    cpp_error (pfile, 0x03, "invalid #ident directive");
  else if (pfile->cb.ident)
    pfile->cb.ident (pfile, pfile->directive_line, &str->val.str);
  check_eol (pfile);
}
static struct pragma_entry *
lookup_pragma_entry (struct pragma_entry *chain, const cpp_hashnode *pragma)
{
  while (chain && chain->pragma != pragma)
    chain = chain->next;
  return chain;
}
static struct pragma_entry *
insert_pragma_entry (cpp_reader *pfile, struct pragma_entry **chain,
       const cpp_hashnode *pragma, pragma_cb handler)
{
  struct pragma_entry *new;
  new = (struct pragma_entry *)
    _cpp_aligned_alloc (pfile, sizeof (struct pragma_entry));
  new->pragma = pragma;
  if (handler)
    {
      new->is_nspace = 0;
      new->u.handler = handler;
    }
  else
    {
      new->is_nspace = 1;
      new->u.space = ((void *)0);
    }
  new->next = *chain;
  *chain = new;
  return new;
}
void
cpp_register_pragma (cpp_reader *pfile, const char *space, const char *name,
       pragma_cb handler)
{
  struct pragma_entry **chain = &pfile->pragmas;
  struct pragma_entry *entry;
  const cpp_hashnode *node;
  if (!handler)
    abort ();
  if (space)
    {
      node = cpp_lookup (pfile, (const uchar *) space, strlen (space));
      entry = lookup_pragma_entry (*chain, node);
      if (!entry)
 entry = insert_pragma_entry (pfile, chain, node, ((void *)0));
      else if (!entry->is_nspace)
 goto clash;
      chain = &entry->u.space;
    }
  node = cpp_lookup (pfile, (const uchar *) name, strlen (name));
  entry = lookup_pragma_entry (*chain, node);
  if (entry)
    {
      if (entry->is_nspace)
 clash:
 cpp_error (pfile, 0x04,
   "registering \"%s\" as both a pragma and a pragma namespace",
   ((&(node)->ident)->str));
      else if (space)
 cpp_error (pfile, 0x04, "#pragma %s %s is already registered",
     space, name);
      else
 cpp_error (pfile, 0x04, "#pragma %s is already registered", name);
    }
  else
    insert_pragma_entry (pfile, chain, node, handler);
}
void
_cpp_init_internal_pragmas (cpp_reader *pfile)
{
  cpp_register_pragma (pfile, 0, "once", do_pragma_once);
  cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison);
  cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header);
  cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency);
}
static int
count_registered_pragmas (struct pragma_entry *pe)
{
  int ct = 0;
  for (; pe != ((void *)0); pe = pe->next)
    {
      if (pe->is_nspace)
 ct += count_registered_pragmas (pe->u.space);
      ct++;
    }
  return ct;
}
static char **
save_registered_pragmas (struct pragma_entry *pe, char **sd)
{
  for (; pe != ((void *)0); pe = pe->next)
    {
      if (pe->is_nspace)
 sd = save_registered_pragmas (pe->u.space, sd);
      *sd++ = xmemdup (((&pe->pragma->ident)->str),
         ((&pe->pragma->ident)->len),
         ((&pe->pragma->ident)->len) + 1);
    }
  return sd;
}
char **
_cpp_save_pragma_names (cpp_reader *pfile)
{
  int ct = count_registered_pragmas (pfile->pragmas);
  char **result = (char * *) xmalloc (sizeof(char *) * (ct));
  (void) save_registered_pragmas (pfile->pragmas, result);
  return result;
}
static char **
restore_registered_pragmas (cpp_reader *pfile, struct pragma_entry *pe,
       char **sd)
{
  for (; pe != ((void *)0); pe = pe->next)
    {
      if (pe->is_nspace)
 sd = restore_registered_pragmas (pfile, pe->u.space, sd);
      pe->pragma = cpp_lookup (pfile, (const uchar *) *sd, strlen (*sd));
      free (*sd);
      sd++;
    }
  return sd;
}
void
_cpp_restore_pragma_names (cpp_reader *pfile, char **saved)
{
  (void) restore_registered_pragmas (pfile, pfile->pragmas, saved);
  free (saved);
}
static void
do_pragma (cpp_reader *pfile)
{
  const struct pragma_entry *p = ((void *)0);
  const cpp_token *token, *pragma_token = pfile->cur_token;
  unsigned int count = 1;
  pfile->state.prevent_expansion++;
  token = cpp_get_token (pfile);
  if (token->type == CPP_NAME)
    {
      p = lookup_pragma_entry (pfile->pragmas, token->val.node);
      if (p && p->is_nspace)
 {
   count = 2;
   token = cpp_get_token (pfile);
   if (token->type == CPP_NAME)
     p = lookup_pragma_entry (p->u.space, token->val.node);
   else
     p = ((void *)0);
 }
    }
  if (p)
    {
      if (pfile->cb.line_change)
 (*pfile->cb.line_change) (pfile, pragma_token, 0);
      (*p->u.handler) (pfile);
    }
  else if (pfile->cb.def_pragma)
    {
      _cpp_backup_tokens (pfile, count);
      pfile->cb.def_pragma (pfile, pfile->directive_line);
    }
  pfile->state.prevent_expansion--;
}
static void
do_pragma_once (cpp_reader *pfile)
{
  if (pfile->buffer->prev == ((void *)0))
    cpp_error (pfile, 0x00, "#pragma once in main file");
  check_eol (pfile);
  _cpp_mark_file_once_only (pfile, pfile->buffer->file);
}
static void
do_pragma_poison (cpp_reader *pfile)
{
  const cpp_token *tok;
  cpp_hashnode *hp;
  pfile->state.poisoned_ok = 1;
  for (;;)
    {
      tok = _cpp_lex_token (pfile);
      if (tok->type == CPP_EOF)
 break;
      if (tok->type != CPP_NAME)
 {
   cpp_error (pfile, 0x03,
       "invalid #pragma GCC poison directive");
   break;
 }
      hp = tok->val.node;
      if (hp->flags & (1 << 1))
 continue;
      if (hp->type == NT_MACRO)
 cpp_error (pfile, 0x00, "poisoning existing macro \"%s\"",
     ((&(hp)->ident)->str));
      _cpp_free_definition (hp);
      hp->flags |= (1 << 1) | (1 << 3);
    }
  pfile->state.poisoned_ok = 0;
}
static void
do_pragma_system_header (cpp_reader *pfile)
{
  cpp_buffer *buffer = pfile->buffer;
  if (buffer->prev == 0)
    cpp_error (pfile, 0x00,
        "#pragma system_header ignored outside include file");
  else
    {
      check_eol (pfile);
      skip_rest_of_line (pfile);
      cpp_make_system_header (pfile, 1, 0);
    }
}
static void
do_pragma_dependency (cpp_reader *pfile)
{
  const char *fname;
  int angle_brackets, ordering;
  fname = parse_include (pfile, &angle_brackets);
  if (!fname)
    return;
  ordering = _cpp_compare_file_date (pfile, fname, angle_brackets);
  if (ordering < 0)
    cpp_error (pfile, 0x00, "cannot find source file %s", fname);
  else if (ordering > 0)
    {
      cpp_error (pfile, 0x00,
   "current file is older than %s", fname);
      if (cpp_get_token (pfile)->type != CPP_EOF)
 {
   _cpp_backup_tokens (pfile, 1);
   do_diagnostic (pfile, 0x00, 0);
 }
    }
  free ((void *) fname);
}
static const cpp_token *
get_token_no_padding (cpp_reader *pfile)
{
  for (;;)
    {
      const cpp_token *result = cpp_get_token (pfile);
      if (result->type != CPP_PADDING)
 return result;
    }
}
static const cpp_token *
get__Pragma_string (cpp_reader *pfile)
{
  const cpp_token *string1;
  if (get_token_no_padding (pfile)->type != CPP_OPEN_PAREN)
    return ((void *)0);
  string1 = get_token_no_padding (pfile);
  if (string1->type != CPP_STRING && string1->type != CPP_WSTRING)
    return ((void *)0);
  if (get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
    return ((void *)0);
  return string1;
}
static void
destringize_and_run (cpp_reader *pfile, const cpp_string *in)
{
  const unsigned char *src, *limit;
  char *dest, *result;
  dest = result = C_alloca(in->len - 1);
  src = in->text + 1 + (in->text[0] == 'L');
  limit = in->text + in->len - 1;
  while (src < limit)
    {
      if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
 src++;
      *dest++ = *src++;
    }
  *dest = '\n';
  {
    cpp_context *saved_context = pfile->context;
    cpp_token *saved_cur_token = pfile->cur_token;
    tokenrun *saved_cur_run = pfile->cur_run;
    pfile->context = (cpp_context *) xmalloc (sizeof(cpp_context));
    pfile->context->macro = 0;
    pfile->context->prev = 0;
    run_directive (pfile, T_PRAGMA, result, dest - result);
    free (pfile->context);
    pfile->context = saved_context;
    pfile->cur_token = saved_cur_token;
    pfile->cur_run = saved_cur_run;
  }
  if (pfile->cb.line_change)
    pfile->cb.line_change (pfile, pfile->cur_token, 0);
}
void
_cpp_do__Pragma (cpp_reader *pfile)
{
  const cpp_token *string1 = get__Pragma_string (pfile);
  if (string1)
    destringize_and_run (pfile, &string1->val.str);
  else
    cpp_error (pfile, 0x03,
        "_Pragma takes a parenthesized string literal");
}
static void
do_sccs (cpp_reader *pfile )
{
}
static void
do_ifdef (cpp_reader *pfile)
{
  int skip = 1;
  if (! pfile->state.skipping)
    {
      const cpp_hashnode *node = lex_macro_node (pfile);
      if (node)
 {
   skip = node->type != NT_MACRO;
   do { if ((node)->type == NT_MACRO && !((node)->flags & (1 << 2))) (node)->value.macro->used = 1; } while (0);
   check_eol (pfile);
 }
    }
  push_conditional (pfile, skip, T_IFDEF, 0);
}
static void
do_ifndef (cpp_reader *pfile)
{
  int skip = 1;
  const cpp_hashnode *node = 0;
  if (! pfile->state.skipping)
    {
      node = lex_macro_node (pfile);
      if (node)
 {
   skip = node->type == NT_MACRO;
   do { if ((node)->type == NT_MACRO && !((node)->flags & (1 << 2))) (node)->value.macro->used = 1; } while (0);
   check_eol (pfile);
 }
    }
  push_conditional (pfile, skip, T_IFNDEF, node);
}
static void
do_if (cpp_reader *pfile)
{
  int skip = 1;
  if (! pfile->state.skipping)
    skip = _cpp_parse_expr (pfile) == 0;
  push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro);
}
static void
do_else (cpp_reader *pfile)
{
  cpp_buffer *buffer = pfile->buffer;
  struct if_stack *ifs = buffer->if_stack;
  if (ifs == ((void *)0))
    cpp_error (pfile, 0x03, "#else without #if");
  else
    {
      if (ifs->type == T_ELSE)
 {
   cpp_error (pfile, 0x03, "#else after #else");
   cpp_error_with_line (pfile, 0x03, ifs->line, 0,
          "the conditional began here");
 }
      ifs->type = T_ELSE;
      pfile->state.skipping = ifs->skip_elses;
      ifs->skip_elses = 1;
      ifs->mi_cmacro = 0;
      if (!ifs->was_skipping && ((pfile)->opts.warn_endif_labels))
 check_eol (pfile);
    }
}
static void
do_elif (cpp_reader *pfile)
{
  cpp_buffer *buffer = pfile->buffer;
  struct if_stack *ifs = buffer->if_stack;
  if (ifs == ((void *)0))
    cpp_error (pfile, 0x03, "#elif without #if");
  else
    {
      if (ifs->type == T_ELSE)
 {
   cpp_error (pfile, 0x03, "#elif after #else");
   cpp_error_with_line (pfile, 0x03, ifs->line, 0,
          "the conditional began here");
 }
      ifs->type = T_ELIF;
      if (ifs->skip_elses)
 pfile->state.skipping = 1;
      else
 {
   pfile->state.skipping = 0;
   pfile->state.skipping = ! _cpp_parse_expr (pfile);
   ifs->skip_elses = ! pfile->state.skipping;
 }
      ifs->mi_cmacro = 0;
    }
}
static void
do_endif (cpp_reader *pfile)
{
  cpp_buffer *buffer = pfile->buffer;
  struct if_stack *ifs = buffer->if_stack;
  if (ifs == ((void *)0))
    cpp_error (pfile, 0x03, "#endif without #if");
  else
    {
      if (!ifs->was_skipping && ((pfile)->opts.warn_endif_labels))
 check_eol (pfile);
      if (ifs->next == 0 && ifs->mi_cmacro)
 {
   pfile->mi_valid = 1;
   pfile->mi_cmacro = ifs->mi_cmacro;
 }
      buffer->if_stack = ifs->next;
      pfile->state.skipping = ifs->was_skipping;
      ( (&pfile->buffer_ob)->temp = (char *) (ifs) - (char *) (&pfile->buffer_ob)->chunk, (((&pfile->buffer_ob)->temp > 0 && (&pfile->buffer_ob)->temp < (&pfile->buffer_ob)->chunk_limit - (char *) (&pfile->buffer_ob)->chunk) ? (int) ((&pfile->buffer_ob)->next_free = (&pfile->buffer_ob)->object_base = (&pfile->buffer_ob)->temp + (char *) (&pfile->buffer_ob)->chunk) : (((obstack_free) ((&pfile->buffer_ob), (&pfile->buffer_ob)->temp + (char *) (&pfile->buffer_ob)->chunk), 0), 0)));
    }
}
static void
push_conditional (cpp_reader *pfile, int skip, int type,
    const cpp_hashnode *cmacro)
{
  struct if_stack *ifs;
  cpp_buffer *buffer = pfile->buffer;
  ifs = (struct if_stack *) (( ((&pfile->buffer_ob))->temp = ((sizeof(struct if_stack))), ((((&pfile->buffer_ob))->chunk_limit - ((&pfile->buffer_ob))->next_free < ((&pfile->buffer_ob))->temp) ? (_obstack_newchunk (((&pfile->buffer_ob)), ((&pfile->buffer_ob))->temp), 0) : 0), (((&pfile->buffer_ob))->next_free += (((&pfile->buffer_ob))->temp))), ( (((&pfile->buffer_ob))->next_free == ((&pfile->buffer_ob))->object_base ? ((((&pfile->buffer_ob))->maybe_empty_object = 1), 0) : 0), ((&pfile->buffer_ob))->temp = ((((&pfile->buffer_ob))->object_base) - (char *) 0), ((&pfile->buffer_ob))->next_free = (((((((&pfile->buffer_ob))->next_free) - (char *) 0)+((&pfile->buffer_ob))->alignment_mask) & ~ (((&pfile->buffer_ob))->alignment_mask)) + (char *) 0), ((((&pfile->buffer_ob))->next_free - (char *) ((&pfile->buffer_ob))->chunk > ((&pfile->buffer_ob))->chunk_limit - (char *) ((&pfile->buffer_ob))->chunk) ? (((&pfile->buffer_ob))->next_free = ((&pfile->buffer_ob))->chunk_limit) : 0), ((&pfile->buffer_ob))->object_base = ((&pfile->buffer_ob))->next_free, ((((&pfile->buffer_ob))->temp) + (char *) 0)));
  ifs->line = pfile->directive_line;
  ifs->next = buffer->if_stack;
  ifs->skip_elses = pfile->state.skipping || !skip;
  ifs->was_skipping = pfile->state.skipping;
  ifs->type = type;
  if (pfile->mi_valid && pfile->mi_cmacro == 0)
    ifs->mi_cmacro = cmacro;
  else
    ifs->mi_cmacro = 0;
  pfile->state.skipping = skip;
  buffer->if_stack = ifs;
}
static int
parse_answer (cpp_reader *pfile, struct answer **answerp, int type)
{
  const cpp_token *paren;
  struct answer *answer;
  unsigned int acount;
  paren = cpp_get_token (pfile);
  if (paren->type != CPP_OPEN_PAREN)
    {
      if (type == T_IF)
 {
   _cpp_backup_tokens (pfile, 1);
   return 0;
 }
      if (type == T_UNASSERT && paren->type == CPP_EOF)
 return 0;
      cpp_error (pfile, 0x03, "missing '(' after predicate");
      return 1;
    }
  for (acount = 0;; acount++)
    {
      size_t room_needed;
      const cpp_token *token = cpp_get_token (pfile);
      cpp_token *dest;
      if (token->type == CPP_CLOSE_PAREN)
 break;
      if (token->type == CPP_EOF)
 {
   cpp_error (pfile, 0x03, "missing ')' to complete answer");
   return 1;
 }
      room_needed = (sizeof (struct answer) + acount * sizeof (cpp_token));
      if ((size_t) ((pfile->a_buff)->limit - (pfile->a_buff)->cur) < room_needed)
 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (struct answer));
      dest = &((struct answer *) ((pfile->a_buff)->cur))->first[acount];
      *dest = *token;
      if (acount == 0)
 dest->flags &= ~(1 << 0);
    }
  if (acount == 0)
    {
      cpp_error (pfile, 0x03, "predicate's answer is empty");
      return 1;
    }
  answer = (struct answer *) ((pfile->a_buff)->cur);
  answer->count = acount;
  answer->next = ((void *)0);
  *answerp = answer;
  return 0;
}
static cpp_hashnode *
parse_assertion (cpp_reader *pfile, struct answer **answerp, int type)
{
  cpp_hashnode *result = 0;
  const cpp_token *predicate;
  pfile->state.prevent_expansion++;
  *answerp = 0;
  predicate = cpp_get_token (pfile);
  if (predicate->type == CPP_EOF)
    cpp_error (pfile, 0x03, "assertion without predicate");
  else if (predicate->type != CPP_NAME)
    cpp_error (pfile, 0x03, "predicate must be an identifier");
  else if (parse_answer (pfile, answerp, type) == 0)
    {
      unsigned int len = ((&(predicate->val.node)->ident)->len);
      unsigned char *sym = C_alloca(len + 1);
      sym[0] = '#';
      memcpy (sym + 1, ((&(predicate->val.node)->ident)->str), len);
      result = cpp_lookup (pfile, sym, len + 1);
    }
  pfile->state.prevent_expansion--;
  return result;
}
static struct answer **
find_answer (cpp_hashnode *node, const struct answer *candidate)
{
  unsigned int i;
  struct answer **result;
  for (result = &node->value.answers; *result; result = &(*result)->next)
    {
      struct answer *answer = *result;
      if (answer->count == candidate->count)
 {
   for (i = 0; i < answer->count; i++)
     if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
       break;
   if (i == answer->count)
     break;
 }
    }
  return result;
}
int
_cpp_test_assertion (cpp_reader *pfile, unsigned int *value)
{
  struct answer *answer;
  cpp_hashnode *node;
  node = parse_assertion (pfile, &answer, T_IF);
  *value = 0;
  if (node)
    *value = (node->type == NT_ASSERTION &&
       (answer == 0 || *find_answer (node, answer) != 0));
  else if (pfile->cur_token[-1].type == CPP_EOF)
    _cpp_backup_tokens (pfile, 1);
  return node == 0;
}
static void
do_assert (cpp_reader *pfile)
{
  struct answer *new_answer;
  cpp_hashnode *node;
  node = parse_assertion (pfile, &new_answer, T_ASSERT);
  if (node)
    {
      size_t answer_size;
      new_answer->next = 0;
      if (node->type == NT_ASSERTION)
 {
   if (*find_answer (node, new_answer))
     {
       cpp_error (pfile, 0x00, "\"%s\" re-asserted",
    ((&(node)->ident)->str) + 1);
       return;
     }
   new_answer->next = node->value.answers;
 }
      answer_size = sizeof (struct answer) + ((new_answer->count - 1)
           * sizeof (cpp_token));
      if (pfile->hash_table1->alloc_subobject)
 {
   struct answer *temp_answer = new_answer;
   new_answer = pfile->hash_table1->alloc_subobject (answer_size);
   memcpy (new_answer, temp_answer, answer_size);
 }
      else
 ((pfile->a_buff)->cur) += answer_size;
      node->type = NT_ASSERTION;
      node->value.answers = new_answer;
      check_eol (pfile);
    }
}
static void
do_unassert (cpp_reader *pfile)
{
  cpp_hashnode *node;
  struct answer *answer;
  node = parse_assertion (pfile, &answer, T_UNASSERT);
  if (node && node->type == NT_ASSERTION)
    {
      if (answer)
 {
   struct answer **p = find_answer (node, answer), *temp;
   temp = *p;
   if (temp)
     *p = temp->next;
   if (node->value.answers == 0)
     node->type = NT_VOID;
   check_eol (pfile);
 }
      else
 _cpp_free_definition (node);
    }
}
void
cpp_define (cpp_reader *pfile, const char *str)
{
  char *buf, *p;
  size_t count;
  count = strlen (str);
  buf = C_alloca(count + 3);
  memcpy (buf, str, count);
  p = strchr (str, '=');
  if (p)
    buf[p - str] = ' ';
  else
    {
      buf[count++] = ' ';
      buf[count++] = '1';
    }
  buf[count] = '\n';
  run_directive (pfile, T_DEFINE, buf, count);
}
void
_cpp_define_builtin (cpp_reader *pfile, const char *str)
{
  size_t len = strlen (str);
  char *buf = C_alloca(len + 1);
  memcpy (buf, str, len);
  buf[len] = '\n';
  run_directive (pfile, T_DEFINE, buf, len);
}
void
cpp_undef (cpp_reader *pfile, const char *macro)
{
  size_t len = strlen (macro);
  char *buf = C_alloca(len + 1);
  memcpy (buf, macro, len);
  buf[len] = '\n';
  run_directive (pfile, T_UNDEF, buf, len);
}
void
cpp_assert (cpp_reader *pfile, const char *str)
{
  handle_assertion (pfile, str, T_ASSERT);
}
void
cpp_unassert (cpp_reader *pfile, const char *str)
{
  handle_assertion (pfile, str, T_UNASSERT);
}
static void
handle_assertion (cpp_reader *pfile, const char *str, int type)
{
  size_t count = strlen (str);
  const char *p = strchr (str, '=');
  char *buf = C_alloca(count + 2);
  memcpy (buf, str, count);
  if (p)
    {
      buf[p - str] = '(';
      buf[count++] = ')';
    }
  buf[count] = '\n';
  str = buf;
  run_directive (pfile, type, str, count);
}
unsigned int
cpp_errors (cpp_reader *pfile)
{
  return pfile->errors;
}
cpp_options *
cpp_get_options (cpp_reader *pfile)
{
  return &pfile->opts;
}
cpp_callbacks *
cpp_get_callbacks (cpp_reader *pfile)
{
  return &pfile->cb;
}
void
cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb)
{
  pfile->cb = *cb;
}
struct depends *
cpp_get_deps (cpp_reader *pfile)
{
  if (!pfile->deps)
    pfile->deps = deps_init ();
  return pfile->deps;
}
cpp_buffer *
cpp_push_buffer (cpp_reader *pfile, const uchar *buffer, size_t len,
   int from_stage3)
{
  cpp_buffer *new = (cpp_buffer *) (( ((&pfile->buffer_ob))->temp = ((sizeof(cpp_buffer))), ((((&pfile->buffer_ob))->chunk_limit - ((&pfile->buffer_ob))->next_free < ((&pfile->buffer_ob))->temp) ? (_obstack_newchunk (((&pfile->buffer_ob)), ((&pfile->buffer_ob))->temp), 0) : 0), (((&pfile->buffer_ob))->next_free += (((&pfile->buffer_ob))->temp))), ( (((&pfile->buffer_ob))->next_free == ((&pfile->buffer_ob))->object_base ? ((((&pfile->buffer_ob))->maybe_empty_object = 1), 0) : 0), ((&pfile->buffer_ob))->temp = ((((&pfile->buffer_ob))->object_base) - (char *) 0), ((&pfile->buffer_ob))->next_free = (((((((&pfile->buffer_ob))->next_free) - (char *) 0)+((&pfile->buffer_ob))->alignment_mask) & ~ (((&pfile->buffer_ob))->alignment_mask)) + (char *) 0), ((((&pfile->buffer_ob))->next_free - (char *) ((&pfile->buffer_ob))->chunk > ((&pfile->buffer_ob))->chunk_limit - (char *) ((&pfile->buffer_ob))->chunk) ? (((&pfile->buffer_ob))->next_free = ((&pfile->buffer_ob))->chunk_limit) : 0), ((&pfile->buffer_ob))->object_base = ((&pfile->buffer_ob))->next_free, ((((&pfile->buffer_ob))->temp) + (char *) 0)));
  memset (new, 0, sizeof (cpp_buffer));
  new->next_line = new->buf = buffer;
  new->rlimit = buffer + len;
  new->from_stage3 = from_stage3;
  new->prev = pfile->buffer;
  new->need_line = 1;
  pfile->buffer = new;
  return new;
}
void
_cpp_pop_buffer (cpp_reader *pfile)
{
  cpp_buffer *buffer = pfile->buffer;
  struct _cpp_file *inc = buffer->file;
  struct if_stack *ifs;
  for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
    cpp_error_with_line (pfile, 0x03, ifs->line, 0,
    "unterminated #%s", dtable[ifs->type].name);
  pfile->state.skipping = 0;
  pfile->buffer = buffer->prev;
  free (buffer->notes);
  ( (&pfile->buffer_ob)->temp = (char *) (buffer) - (char *) (&pfile->buffer_ob)->chunk, (((&pfile->buffer_ob)->temp > 0 && (&pfile->buffer_ob)->temp < (&pfile->buffer_ob)->chunk_limit - (char *) (&pfile->buffer_ob)->chunk) ? (int) ((&pfile->buffer_ob)->next_free = (&pfile->buffer_ob)->object_base = (&pfile->buffer_ob)->temp + (char *) (&pfile->buffer_ob)->chunk) : (((obstack_free) ((&pfile->buffer_ob), (&pfile->buffer_ob)->temp + (char *) (&pfile->buffer_ob)->chunk), 0), 0)));
  if (inc)
    {
      _cpp_pop_file_buffer (pfile, inc);
      _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
    }
}
void
_cpp_init_directives (cpp_reader *pfile)
{
  unsigned int i;
  cpp_hashnode *node;
  for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
    {
      node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
      node->is_directive = 1;
      node->directive_index = i;
    }
}
static void print_location (cpp_reader *, source_location, unsigned int);
static void
print_location (cpp_reader *pfile, source_location line, unsigned int col)
{
  if (line == 0)
    fprintf (stderr, "%s: ", progname);
  else
    {
      const struct line_map *map;
      unsigned int lin;
      map = linemap_lookup (pfile->line_table, line);
      linemap_print_containing_files (pfile->line_table, map);
      lin = ((((line) - (map)->start_location) >> (map)->column_bits) + (map)->to_line);
      if (col == 0)
 {
   col = (((line) - (map)->start_location) & ((1 << (map)->column_bits) - 1));
   if (col == 0)
     col = 1;
 }
      if (lin == 0)
 fprintf (stderr, "%s:", map->to_file);
      else if (((pfile)->opts.show_column) == 0)
 fprintf (stderr, "%s:%u:", map->to_file, lin);
      else
 fprintf (stderr, "%s:%u:%u:", map->to_file, lin, col);
      fputc_unlocked (' ', stderr);
    }
}
int
_cpp_begin_message (cpp_reader *pfile, int code,
      source_location src_loc, unsigned int column)
{
  int level = (code & 0xf);
  switch (level)
    {
    case 0x00:
    case 0x02:
      if (cpp_in_system_header (pfile)
   && ! ((pfile)->opts.warn_system_headers))
 return 0;
    case 0x01:
      if (((pfile)->opts.warnings_are_errors)
   || (level == 0x02 && ((pfile)->opts.pedantic_errors)))
 {
   if (((pfile)->opts.inhibit_errors))
     return 0;
   level = 0x03;
   pfile->errors++;
 }
      else if (((pfile)->opts.inhibit_warnings))
 return 0;
      break;
    case 0x03:
      if (((pfile)->opts.inhibit_errors))
 return 0;
    case 0x04:
      pfile->errors++;
      break;
    }
  print_location (pfile, src_loc, column);
  if (((level & 0xf) >= 0x00 && (level & 0xf) <= 0x02))
    fputs_unlocked ("warning: ", stderr);
  else if (level == 0x04)
    fputs_unlocked ("internal error: ", stderr);
  return 1;
}
void
cpp_error (cpp_reader * pfile, int level, const char *msgid, ...)
{
  source_location src_loc;
  va_list ap;
  __builtin_va_start(ap,msgid);
  if (((pfile)->opts.traditional))
    {
      if (pfile->state.in_directive)
 src_loc = pfile->directive_line;
      else
 src_loc = pfile->line_table->highest_line;
    }
  else
    {
      src_loc = pfile->cur_token[-1].src_loc;
    }
  if (_cpp_begin_message (pfile, level, src_loc, 0))
    do { vfprintf (stderr, msgid, ap); putc_unlocked ('\n', stderr); } while (0);
  __builtin_va_end(ap);
}
void
cpp_error_with_line (cpp_reader *pfile, int level,
       source_location src_loc, unsigned int column,
       const char *msgid, ...)
{
  va_list ap;
  __builtin_va_start(ap,msgid);
  if (_cpp_begin_message (pfile, level, src_loc, column))
    do { vfprintf (stderr, msgid, ap); putc_unlocked ('\n', stderr); } while (0);
  __builtin_va_end(ap);
}
void
cpp_errno (cpp_reader *pfile, int level, const char *msgid)
{
  if (msgid[0] == '\0')
    msgid = "stdout";
  cpp_error (pfile, level, "%s: %s", msgid, xstrerror ((*__errno_location ())));
}
struct op
{
  const cpp_token *token;
  cpp_num value;
  enum cpp_ttype op;
};
static unsigned char num_positive (cpp_num, size_t);
static unsigned char num_greater_eq (cpp_num, cpp_num, size_t);
static cpp_num num_trim (cpp_num, size_t);
static cpp_num num_part_mul (cpp_num_part, cpp_num_part);
static cpp_num num_unary_op (cpp_reader *, cpp_num, enum cpp_ttype);
static cpp_num num_binary_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
static cpp_num num_negate (cpp_num, size_t);
static cpp_num num_bitwise_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
static cpp_num num_inequality_op (cpp_reader *, cpp_num, cpp_num,
      enum cpp_ttype);
static cpp_num num_equality_op (cpp_reader *, cpp_num, cpp_num,
    enum cpp_ttype);
static cpp_num num_mul (cpp_reader *, cpp_num, cpp_num);
static cpp_num num_div_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
static cpp_num num_lshift (cpp_num, size_t, size_t);
static cpp_num num_rshift (cpp_num, size_t, size_t);
static cpp_num append_digit (cpp_num, int, int, size_t);
static cpp_num parse_defined (cpp_reader *);
static cpp_num eval_token (cpp_reader *, const cpp_token *);
static struct op *reduce (cpp_reader *, struct op *, enum cpp_ttype);
static unsigned int interpret_float_suffix (const uchar *, size_t);
static unsigned int interpret_int_suffix (const uchar *, size_t);
static void check_promotion (cpp_reader *, const struct op *);
static unsigned int
interpret_float_suffix (const uchar *s, size_t len)
{
  size_t f = 0, l = 0, i = 0;
  while (len--)
    switch (s[len])
      {
      case 'f': case 'F': f++; break;
      case 'l': case 'L': l++; break;
      case 'i': case 'I':
      case 'j': case 'J': i++; break;
      default:
 return 0;
      }
  if (f + l > 1 || i > 1)
    return 0;
  return ((i ? 0x2000 : 0)
   | (f ? 0x0010 :
      l ? 0x0040 : 0x0020));
}
static unsigned int
interpret_int_suffix (const uchar *s, size_t len)
{
  size_t u, l, i;
  u = l = i = 0;
  while (len--)
    switch (s[len])
      {
      case 'u': case 'U': u++; break;
      case 'i': case 'I':
      case 'j': case 'J': i++; break;
      case 'l': case 'L': l++;
 if (l == 2 && s[len] != s[len + 1])
   return 0;
 break;
      default:
 return 0;
      }
  if (l > 2 || u > 1 || i > 1)
    return 0;
  return ((i ? 0x2000 : 0)
   | (u ? 0x1000 : 0)
   | ((l == 0) ? 0x0010
      : (l == 1) ? 0x0020 : 0x0040));
}
unsigned int
cpp_classify_number (cpp_reader *pfile, const cpp_token *token)
{
  const uchar *str = token->val.str.text;
  const uchar *limit;
  unsigned int max_digit, result, radix;
  enum {NOT_FLOAT = 0, AFTER_POINT, AFTER_EXPON} float_flag;
  if (token->val.str.len == 1)
    return 0x0001 | 0x0010 | 0x0100;
  limit = str + token->val.str.len;
  float_flag = NOT_FLOAT;
  max_digit = 0;
  radix = 10;
  if (*str == '0')
    {
      radix = 8;
      str++;
      if ((*str == 'x' || *str == 'X')
   && (str[1] == '.' || (_sch_istable[(str[1]) & 0xff] & (unsigned short)(_sch_isxdigit))))
 {
   radix = 16;
   str++;
 }
    }
  for (;;)
    {
      unsigned int c = *str++;
      if ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isdigit)) || ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isxdigit)) && radix == 16))
 {
   c = ((unsigned int) _hex_value[(unsigned char) (c)]);
   if (c > max_digit)
     max_digit = c;
 }
      else if (c == '.')
 {
   if (float_flag == NOT_FLOAT)
     float_flag = AFTER_POINT;
   else
     do { cpp_error (pfile, 0x03, "too many decimal points in number"); goto syntax_error; } while(0);
 }
      else if ((radix <= 10 && (c == 'e' || c == 'E'))
        || (radix == 16 && (c == 'p' || c == 'P')))
 {
   float_flag = AFTER_EXPON;
   break;
 }
      else
 {
   str--;
   break;
 }
    }
  if (float_flag != NOT_FLOAT && radix == 8)
    radix = 10;
  if (max_digit >= radix)
    do { cpp_error (pfile, 0x03, "invalid digit \"%c\" in octal constant", '0' + max_digit); goto syntax_error; } while(0);
  if (float_flag != NOT_FLOAT)
    {
      if (radix == 16 && ((pfile)->opts.pedantic) && !((pfile)->opts.c99))
 cpp_error (pfile, 0x02,
     "use of C99 hexadecimal floating constant");
      if (float_flag == AFTER_EXPON)
 {
   if (*str == '+' || *str == '-')
     str++;
   if (!(_sch_istable[(*str) & 0xff] & (unsigned short)(_sch_isdigit)))
     do { cpp_error (pfile, 0x03, "exponent has no digits"); goto syntax_error; } while(0);
   do
     str++;
   while ((_sch_istable[(*str) & 0xff] & (unsigned short)(_sch_isdigit)));
 }
      else if (radix == 16)
 do { cpp_error (pfile, 0x03, "hexadecimal floating constants require an exponent"); goto syntax_error; } while(0);
      result = interpret_float_suffix (str, limit - str);
      if (result == 0)
 {
   cpp_error (pfile, 0x03,
       "invalid suffix \"%.*s\" on floating constant",
       (int) (limit - str), str);
   return 0x0000;
 }
      if (limit != str
   && ((pfile)->opts.warn_traditional)
   && ! cpp_sys_macro_p (pfile))
 cpp_error (pfile, 0x00,
     "traditional C rejects the \"%.*s\" suffix",
     (int) (limit - str), str);
      result |= 0x0002;
    }
  else
    {
      result = interpret_int_suffix (str, limit - str);
      if (result == 0)
 {
   cpp_error (pfile, 0x03,
       "invalid suffix \"%.*s\" on integer constant",
       (int) (limit - str), str);
   return 0x0000;
 }
      if (((pfile)->opts.warn_traditional) && ! cpp_sys_macro_p (pfile))
 {
   int u_or_i = (result & (0x1000|0x2000));
   int large = (result & 0x00F0) == 0x0040;
   if (u_or_i || (large && ((pfile)->opts.warn_long_long)))
     cpp_error (pfile, 0x00,
         "traditional C rejects the \"%.*s\" suffix",
         (int) (limit - str), str);
 }
      if ((result & 0x00F0) == 0x0040
   && ! ((pfile)->opts.c99)
   && ((pfile)->opts.warn_long_long))
 cpp_error (pfile, 0x02,
     "use of C99 long long integer constant");
      result |= 0x0001;
    }
  if ((result & 0x2000) && ((pfile)->opts.pedantic))
    cpp_error (pfile, 0x02,
        "imaginary constants are a GCC extension");
  if (radix == 10)
    result |= 0x0100;
  else if (radix == 16)
    result |= 0x0200;
  else
    result |= 0x0400;
  return result;
 syntax_error:
  return 0x0000;
}
cpp_num
cpp_interpret_integer (cpp_reader *pfile, const cpp_token *token,
         unsigned int type)
{
  const uchar *p, *end;
  cpp_num result;
  result.low = 0;
  result.high = 0;
  result.unsignedp = !!(type & 0x1000);
  result.overflow = 0;
  p = token->val.str.text;
  end = p + token->val.str.len;
  if (token->val.str.len == 1)
    result.low = p[0] - '0';
  else
    {
      cpp_num_part max;
      size_t precision = ((pfile)->opts.precision);
      unsigned int base = 10, c = 0;
      unsigned char overflow = 0;
      if ((type & 0x0F00) == 0x0400)
 {
   base = 8;
   p++;
 }
      else if ((type & 0x0F00) == 0x0200)
 {
   base = 16;
   p += 2;
 }
      max = ~(cpp_num_part) 0;
      if (precision < (sizeof (cpp_num_part) * 8))
 max >>= (sizeof (cpp_num_part) * 8) - precision;
      max = (max - base + 1) / base + 1;
      for (; p < end; p++)
 {
   c = *p;
   if ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isdigit)) || (base == 16 && (_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isxdigit))))
     c = ((unsigned int) _hex_value[(unsigned char) (c)]);
   else
     break;
   if (result.low < max)
     result.low = result.low * base + c;
   else
     {
       result = append_digit (result, c, base, precision);
       overflow |= result.overflow;
       max = 0;
     }
 }
      if (overflow)
 cpp_error (pfile, 0x02,
     "integer constant is too large for its type");
      else if (!result.unsignedp
        && !(((pfile)->opts.traditional)
      && pfile->state.in_directive)
        && !num_positive (result, precision))
 {
   if (base == 10)
     cpp_error (pfile, 0x00,
         "integer constant is so large that it is unsigned");
   result.unsignedp = 1;
 }
    }
  return result;
}
static cpp_num
append_digit (cpp_num num, int digit, int base, size_t precision)
{
  cpp_num result;
  unsigned int shift = 3 + (base == 16);
  unsigned char overflow;
  cpp_num_part add_high, add_low;
  overflow = !!(num.high >> ((sizeof (cpp_num_part) * 8) - shift));
  result.high = num.high << shift;
  result.low = num.low << shift;
  result.high |= num.low >> ((sizeof (cpp_num_part) * 8) - shift);
  result.unsignedp = num.unsignedp;
  if (base == 10)
    {
      add_low = num.low << 1;
      add_high = (num.high << 1) + (num.low >> ((sizeof (cpp_num_part) * 8) - 1));
    }
  else
    add_high = add_low = 0;
  if (add_low + digit < add_low)
    add_high++;
  add_low += digit;
  if (result.low + add_low < result.low)
    add_high++;
  if (result.high + add_high < result.high)
    overflow = 1;
  result.low += add_low;
  result.high += add_high;
  result.overflow = overflow;
  num.low = result.low;
  num.high = result.high;
  result = num_trim (result, precision);
  if (!(result.low == num.low && result.high == num.high))
    result.overflow = 1;
  return result;
}
static cpp_num
parse_defined (cpp_reader *pfile)
{
  cpp_num result;
  int paren = 0;
  cpp_hashnode *node = 0;
  const cpp_token *token;
  cpp_context *initial_context = pfile->context;
  pfile->state.prevent_expansion++;
  token = cpp_get_token (pfile);
  if (token->type == CPP_OPEN_PAREN)
    {
      paren = 1;
      token = cpp_get_token (pfile);
    }
  if (token->type == CPP_NAME)
    {
      node = token->val.node;
      if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
 {
   cpp_error (pfile, 0x03, "missing ')' after \"defined\"");
   node = 0;
 }
    }
  else
    {
      cpp_error (pfile, 0x03,
   "operator \"defined\" requires an identifier");
      if (token->flags & (1 << 4))
 {
   cpp_token op;
   op.flags = 0;
   op.type = token->type;
   cpp_error (pfile, 0x03,
       "(\"%s\" is an alternative token for \"%s\" in C++)",
       cpp_token_as_text (pfile, token),
       cpp_token_as_text (pfile, &op));
 }
    }
  if (node)
    {
      if (pfile->context != initial_context && ((pfile)->opts.pedantic))
 cpp_error (pfile, 0x00,
     "this use of \"defined\" may not be portable");
      do { if ((node)->type == NT_MACRO && !((node)->flags & (1 << 2))) (node)->value.macro->used = 1; } while (0);
      pfile->mi_ind_cmacro = node;
    }
  pfile->state.prevent_expansion--;
  result.unsignedp = 0;
  result.high = 0;
  result.overflow = 0;
  result.low = node && node->type == NT_MACRO;
  return result;
}
static cpp_num
eval_token (cpp_reader *pfile, const cpp_token *token)
{
  cpp_num result;
  unsigned int temp;
  int unsignedp = 0;
  result.unsignedp = 0;
  result.overflow = 0;
  switch (token->type)
    {
    case CPP_NUMBER:
      temp = cpp_classify_number (pfile, token);
      switch (temp & 0x000F)
 {
 case 0x0002:
   cpp_error (pfile, 0x03,
       "floating constant in preprocessor expression");
   break;
 case 0x0001:
   if (!(temp & 0x2000))
     return cpp_interpret_integer (pfile, token, temp);
   cpp_error (pfile, 0x03,
       "imaginary number in preprocessor expression");
   break;
 case 0x0000:
   break;
 }
      result.high = result.low = 0;
      break;
    case CPP_WCHAR:
    case CPP_CHAR:
      {
 cppchar_t cc = cpp_interpret_charconst (pfile, token,
      &temp, &unsignedp);
 result.high = 0;
 result.low = cc;
 if (!unsignedp && (cppchar_signed_t) cc < 0)
   {
     if ((sizeof (cpp_num_part) * 8) > (8 * sizeof (cppchar_t)))
       result.low |= ~(~(cpp_num_part) 0
         >> ((sizeof (cpp_num_part) * 8) - (8 * sizeof (cppchar_t))));
     result.high = ~(cpp_num_part) 0;
     result = num_trim (result, ((pfile)->opts.precision));
   }
      }
      break;
    case CPP_NAME:
      if (token->val.node == pfile->spec_nodes.n_defined)
 return parse_defined (pfile);
      else if (((pfile)->opts.cplusplus)
        && (token->val.node == pfile->spec_nodes.n_true
     || token->val.node == pfile->spec_nodes.n_false))
 {
   result.high = 0;
   result.low = (token->val.node == pfile->spec_nodes.n_true);
 }
      else
 {
   result.high = 0;
   result.low = 0;
   if (((pfile)->opts.warn_undef) && !pfile->state.skip_eval)
     cpp_error (pfile, 0x00, "\"%s\" is not defined",
         ((&(token->val.node)->ident)->str));
 }
      break;
    default:
      _cpp_test_assertion (pfile, &temp);
      result.high = 0;
      result.low = temp;
    }
  result.unsignedp = !!unsignedp;
  return result;
}
static const struct operator
{
  uchar prio;
  uchar flags;
} op_table[] =
{
            {0, 0},
             {16, (1 << 0)},
                 {12, (1 << 1) | (1 << 2)},
              {12, (1 << 1) | (1 << 2)},
              {14, (1 << 1) | (1 << 2)},
               {14, (1 << 1) | (1 << 2)},
              {15, (1 << 1) | (1 << 2)},
             {15, (1 << 1) | (1 << 2)},
             {15, (1 << 1) | (1 << 2)},
             {9, (1 << 1) | (1 << 2)},
            {7, (1 << 1) | (1 << 2)},
             {8, (1 << 1) | (1 << 2)},
                {13, (1 << 1)},
                {13, (1 << 1)},
             {10, (1 << 1) | (1 << 2)},
             {10, (1 << 1) | (1 << 2)},
               {16, (1 << 0)},
                 {6, (1 << 1)},
               {5, (1 << 1)},
               {3, 0},
               {4, (1 << 1) | (1 << 2)},
               {2, (1 << 1)},
                   {1, (1 << 0)},
                    {0, 0},
             {0, 0},
               {11, (1 << 1)},
                {11, (1 << 1)},
                   {12, (1 << 1) | (1 << 2)},
                 {12, (1 << 1) | (1 << 2)},
               {16, (1 << 0)},
                {16, (1 << 0)}
};
unsigned char
_cpp_parse_expr (cpp_reader *pfile)
{
  struct op *top = pfile->op_stack;
  unsigned int lex_count;
  unsigned char saw_leading_not, want_value = 1;
  pfile->state.skip_eval = 0;
  pfile->mi_ind_cmacro = 0;
  saw_leading_not = 0;
  lex_count = 0;
  top->op = CPP_EOF;
  for (;;)
    {
      struct op op;
      lex_count++;
      op.token = cpp_get_token (pfile);
      op.op = op.token->type;
      switch (op.op)
 {
 case CPP_NUMBER:
 case CPP_CHAR:
 case CPP_WCHAR:
 case CPP_NAME:
 case CPP_HASH:
   if (!want_value)
     do { cpp_error (pfile, 0x03, "missing binary operator before token \"%s\"", cpp_token_as_text (pfile, op.token)); goto syntax_error; } while(0)
                                          ;
   want_value = 0;
   top->value = eval_token (pfile, op.token);
   continue;
 case CPP_NOT:
   saw_leading_not = lex_count == 1;
   break;
 case CPP_PLUS:
   if (want_value)
     op.op = (CPP_LESS_EQ + 1);
   break;
 case CPP_MINUS:
   if (want_value)
     op.op = (CPP_LESS_EQ + 2);
   break;
 default:
   if ((int) op.op <= (int) CPP_EQ || (int) op.op >= (int) CPP_PLUS_EQ)
     do { cpp_error (pfile, 0x03, "token \"%s\" is not valid in preprocessor expressions", cpp_token_as_text (pfile, op.token)); goto syntax_error; } while(0)
                                          ;
   break;
 }
      if (op_table[op.op].flags & (1 << 0))
 {
   if (!want_value)
     do { cpp_error (pfile, 0x03, "missing binary operator before token \"%s\"", cpp_token_as_text (pfile, op.token)); goto syntax_error; } while(0)
                                          ;
 }
      else if (want_value)
 {
   if (op.op == CPP_CLOSE_PAREN && top->op == CPP_OPEN_PAREN)
     do { cpp_error (pfile, 0x03, "missing expression between '(' and ')'"); goto syntax_error; } while(0);
   if (op.op == CPP_EOF && top->op == CPP_EOF)
      do { cpp_error (pfile, 0x03, "#if with no expression"); goto syntax_error; } while(0);
    if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN)
      do { cpp_error (pfile, 0x03, "operator '%s' has no right operand", cpp_token_as_text (pfile, top->token)); goto syntax_error; } while(0)
                                             ;
   else if (op.op == CPP_CLOSE_PAREN || op.op == CPP_EOF)
                                                          ;
   else
     do { cpp_error (pfile, 0x03, "operator '%s' has no left operand", cpp_token_as_text (pfile, op.token)); goto syntax_error; } while(0)
                                          ;
 }
      top = reduce (pfile, top, op.op);
      if (!top)
 goto syntax_error;
      if (op.op == CPP_EOF)
 break;
      switch (op.op)
 {
 case CPP_CLOSE_PAREN:
   continue;
 case CPP_OR_OR:
   if (!((top->value.low | top->value.high) == 0))
     pfile->state.skip_eval++;
   break;
 case CPP_AND_AND:
 case CPP_QUERY:
   if (((top->value.low | top->value.high) == 0))
     pfile->state.skip_eval++;
   break;
 case CPP_COLON:
   if (top->op != CPP_QUERY)
     do { cpp_error (pfile, 0x03, " ':' without preceding '?'"); goto syntax_error; } while(0);
   if (!((top[-1].value.low | top[-1].value.high) == 0))
     pfile->state.skip_eval++;
   else
     pfile->state.skip_eval--;
 default:
   break;
 }
      want_value = 1;
      if (++top == pfile->op_limit)
 top = _cpp_expand_op_stack (pfile);
      top->op = op.op;
      top->token = op.token;
    }
  if (pfile->mi_ind_cmacro && !(saw_leading_not && lex_count == 3))
    pfile->mi_ind_cmacro = 0;
  if (top != pfile->op_stack)
    {
      cpp_error (pfile, 0x04, "unbalanced stack in #if");
    syntax_error:
      return 0;
    }
  return !((top->value.low | top->value.high) == 0);
}
static struct op *
reduce (cpp_reader *pfile, struct op *top, enum cpp_ttype op)
{
  unsigned int prio;
  if (top->op <= CPP_EQ || top->op > CPP_LESS_EQ + 2)
    {
    bad_op:
      cpp_error (pfile, 0x04, "impossible operator '%u'", top->op);
      return 0;
    }
  if (op == CPP_OPEN_PAREN)
    return top;
  prio = op_table[op].prio - ((op_table[op].flags & (1 << 1)) != 0);
  while (prio < op_table[top->op].prio)
    {
      if (((pfile)->opts.warn_num_sign_change)
   && op_table[top->op].flags & (1 << 2))
 check_promotion (pfile, top);
      switch (top->op)
 {
 case (CPP_LESS_EQ + 1):
 case (CPP_LESS_EQ + 2):
 case CPP_NOT:
 case CPP_COMPL:
   top[-1].value = num_unary_op (pfile, top->value, top->op);
   break;
 case CPP_PLUS:
 case CPP_MINUS:
 case CPP_RSHIFT:
 case CPP_LSHIFT:
 case CPP_MIN:
 case CPP_MAX:
 case CPP_COMMA:
   top[-1].value = num_binary_op (pfile, top[-1].value,
      top->value, top->op);
   break;
 case CPP_GREATER:
 case CPP_LESS:
 case CPP_GREATER_EQ:
 case CPP_LESS_EQ:
   top[-1].value
     = num_inequality_op (pfile, top[-1].value, top->value, top->op);
   break;
 case CPP_EQ_EQ:
 case CPP_NOT_EQ:
   top[-1].value
     = num_equality_op (pfile, top[-1].value, top->value, top->op);
   break;
 case CPP_AND:
 case CPP_OR:
 case CPP_XOR:
   top[-1].value
     = num_bitwise_op (pfile, top[-1].value, top->value, top->op);
   break;
 case CPP_MULT:
   top[-1].value = num_mul (pfile, top[-1].value, top->value);
   break;
 case CPP_DIV:
 case CPP_MOD:
   top[-1].value = num_div_op (pfile, top[-1].value,
          top->value, top->op);
   break;
 case CPP_OR_OR:
   top--;
   if (!((top->value.low | top->value.high) == 0))
     pfile->state.skip_eval--;
   top->value.low = (!((top->value.low | top->value.high) == 0)
       || !((top[1].value.low | top[1].value.high) == 0));
   top->value.high = 0;
   top->value.unsignedp = 0;
   top->value.overflow = 0;
   continue;
 case CPP_AND_AND:
   top--;
   if (((top->value.low | top->value.high) == 0))
     pfile->state.skip_eval--;
   top->value.low = (!((top->value.low | top->value.high) == 0)
       && !((top[1].value.low | top[1].value.high) == 0));
   top->value.high = 0;
   top->value.unsignedp = 0;
   top->value.overflow = 0;
   continue;
 case CPP_OPEN_PAREN:
   if (op != CPP_CLOSE_PAREN)
     {
       cpp_error (pfile, 0x03, "missing ')' in expression");
       return 0;
     }
   top--;
   top->value = top[1].value;
   return top;
 case CPP_COLON:
   top -= 2;
   if (!((top->value.low | top->value.high) == 0))
     {
       pfile->state.skip_eval--;
       top->value = top[1].value;
     }
   else
     top->value = top[2].value;
   top->value.unsignedp = (top[1].value.unsignedp
      || top[2].value.unsignedp);
   continue;
 case CPP_QUERY:
   cpp_error (pfile, 0x03, "'?' without following ':'");
   return 0;
 default:
   goto bad_op;
 }
      top--;
      if (top->value.overflow && !pfile->state.skip_eval)
 cpp_error (pfile, 0x02,
     "integer overflow in preprocessor expression");
    }
  if (op == CPP_CLOSE_PAREN)
    {
      cpp_error (pfile, 0x03, "missing '(' in expression");
      return 0;
    }
  return top;
}
struct op *
_cpp_expand_op_stack (cpp_reader *pfile)
{
  size_t old_size = (size_t) (pfile->op_limit - pfile->op_stack);
  size_t new_size = old_size * 2 + 20;
  pfile->op_stack = xrealloc (pfile->op_stack, new_size * sizeof (struct op));
  pfile->op_limit = pfile->op_stack + new_size;
  return pfile->op_stack + old_size;
}
static void
check_promotion (cpp_reader *pfile, const struct op *op)
{
  if (op->value.unsignedp == op[-1].value.unsignedp)
    return;
  if (op->value.unsignedp)
    {
      if (!num_positive (op[-1].value, ((pfile)->opts.precision)))
 cpp_error (pfile, 0x00,
     "the left operand of \"%s\" changes sign when promoted",
     cpp_token_as_text (pfile, op->token));
    }
  else if (!num_positive (op->value, ((pfile)->opts.precision)))
    cpp_error (pfile, 0x00,
        "the right operand of \"%s\" changes sign when promoted",
        cpp_token_as_text (pfile, op->token));
}
static cpp_num
num_trim (cpp_num num, size_t precision)
{
  if (precision > (sizeof (cpp_num_part) * 8))
    {
      precision -= (sizeof (cpp_num_part) * 8);
      if (precision < (sizeof (cpp_num_part) * 8))
 num.high &= ((cpp_num_part) 1 << precision) - 1;
    }
  else
    {
      if (precision < (sizeof (cpp_num_part) * 8))
 num.low &= ((cpp_num_part) 1 << precision) - 1;
      num.high = 0;
    }
  return num;
}
static unsigned char
num_positive (cpp_num num, size_t precision)
{
  if (precision > (sizeof (cpp_num_part) * 8))
    {
      precision -= (sizeof (cpp_num_part) * 8);
      return (num.high & (cpp_num_part) 1 << (precision - 1)) == 0;
    }
  return (num.low & (cpp_num_part) 1 << (precision - 1)) == 0;
}
cpp_num
cpp_num_sign_extend (cpp_num num, size_t precision)
{
  if (!num.unsignedp)
    {
      if (precision > (sizeof (cpp_num_part) * 8))
 {
   precision -= (sizeof (cpp_num_part) * 8);
   if (precision < (sizeof (cpp_num_part) * 8)
       && (num.high & (cpp_num_part) 1 << (precision - 1)))
     num.high |= ~(~(cpp_num_part) 0 >> ((sizeof (cpp_num_part) * 8) - precision));
 }
      else if (num.low & (cpp_num_part) 1 << (precision - 1))
 {
   if (precision < (sizeof (cpp_num_part) * 8))
     num.low |= ~(~(cpp_num_part) 0 >> ((sizeof (cpp_num_part) * 8) - precision));
   num.high = ~(cpp_num_part) 0;
 }
    }
  return num;
}
static cpp_num
num_negate (cpp_num num, size_t precision)
{
  cpp_num copy;
  copy = num;
  num.high = ~num.high;
  num.low = ~num.low;
  if (++num.low == 0)
    num.high++;
  num = num_trim (num, precision);
  num.overflow = (!num.unsignedp && (num.low == copy.low && num.high == copy.high) && !((num.low | num.high) == 0));
  return num;
}
static unsigned char
num_greater_eq (cpp_num pa, cpp_num pb, size_t precision)
{
  unsigned char unsignedp;
  unsignedp = pa.unsignedp || pb.unsignedp;
  if (!unsignedp)
    {
      unsignedp = num_positive (pa, precision);
      if (unsignedp != num_positive (pb, precision))
 return unsignedp;
    }
  return (pa.high > pb.high) || (pa.high == pb.high && pa.low >= pb.low);
}
static cpp_num
num_bitwise_op (cpp_reader *pfile ,
  cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
{
  lhs.overflow = 0;
  lhs.unsignedp = lhs.unsignedp || rhs.unsignedp;
  if (op == CPP_AND)
    {
      lhs.low &= rhs.low;
      lhs.high &= rhs.high;
    }
  else if (op == CPP_OR)
    {
      lhs.low |= rhs.low;
      lhs.high |= rhs.high;
    }
  else
    {
      lhs.low ^= rhs.low;
      lhs.high ^= rhs.high;
    }
  return lhs;
}
static cpp_num
num_inequality_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs,
     enum cpp_ttype op)
{
  unsigned char gte = num_greater_eq (lhs, rhs, ((pfile)->opts.precision));
  if (op == CPP_GREATER_EQ)
    lhs.low = gte;
  else if (op == CPP_LESS)
    lhs.low = !gte;
  else if (op == CPP_GREATER)
    lhs.low = gte && !(lhs.low == rhs.low && lhs.high == rhs.high);
  else
    lhs.low = !gte || (lhs.low == rhs.low && lhs.high == rhs.high);
  lhs.high = 0;
  lhs.overflow = 0;
  lhs.unsignedp = 0;
  return lhs;
}
static cpp_num
num_equality_op (cpp_reader *pfile ,
   cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
{
  unsigned char eq = (lhs.low == rhs.low && lhs.high == rhs.high);
  if (op == CPP_NOT_EQ)
    eq = !eq;
  lhs.low = eq;
  lhs.high = 0;
  lhs.overflow = 0;
  lhs.unsignedp = 0;
  return lhs;
}
static cpp_num
num_rshift (cpp_num num, size_t precision, size_t n)
{
  cpp_num_part sign_mask;
  unsigned char x = num_positive (num, precision);
  if (num.unsignedp || x)
    sign_mask = 0;
  else
    sign_mask = ~(cpp_num_part) 0;
  if (n >= precision)
    num.high = num.low = sign_mask;
  else
    {
      if (precision < (sizeof (cpp_num_part) * 8))
 num.high = sign_mask, num.low |= sign_mask << precision;
      else if (precision < 2 * (sizeof (cpp_num_part) * 8))
 num.high |= sign_mask << (precision - (sizeof (cpp_num_part) * 8));
      if (n >= (sizeof (cpp_num_part) * 8))
 {
   n -= (sizeof (cpp_num_part) * 8);
   num.low = num.high;
   num.high = sign_mask;
 }
      if (n)
 {
   num.low = (num.low >> n) | (num.high << ((sizeof (cpp_num_part) * 8) - n));
   num.high = (num.high >> n) | (sign_mask << ((sizeof (cpp_num_part) * 8) - n));
 }
    }
  num = num_trim (num, precision);
  num.overflow = 0;
  return num;
}
static cpp_num
num_lshift (cpp_num num, size_t precision, size_t n)
{
  if (n >= precision)
    {
      num.overflow = !num.unsignedp && !((num.low | num.high) == 0);
      num.high = num.low = 0;
    }
  else
    {
      cpp_num orig, maybe_orig;
      size_t m = n;
      orig = num;
      if (m >= (sizeof (cpp_num_part) * 8))
 {
   m -= (sizeof (cpp_num_part) * 8);
   num.high = num.low;
   num.low = 0;
 }
      if (m)
 {
   num.high = (num.high << m) | (num.low >> ((sizeof (cpp_num_part) * 8) - m));
   num.low <<= m;
 }
      num = num_trim (num, precision);
      if (num.unsignedp)
 num.overflow = 0;
      else
 {
   maybe_orig = num_rshift (num, precision, n);
   num.overflow = !(orig.low == maybe_orig.low && orig.high == maybe_orig.high);
 }
    }
  return num;
}
static cpp_num
num_unary_op (cpp_reader *pfile, cpp_num num, enum cpp_ttype op)
{
  switch (op)
    {
    case (CPP_LESS_EQ + 1):
      if (((pfile)->opts.warn_traditional) && !pfile->state.skip_eval)
 cpp_error (pfile, 0x00,
     "traditional C rejects the unary plus operator");
      num.overflow = 0;
      break;
    case (CPP_LESS_EQ + 2):
      num = num_negate (num, ((pfile)->opts.precision));
      break;
    case CPP_COMPL:
      num.high = ~num.high;
      num.low = ~num.low;
      num = num_trim (num, ((pfile)->opts.precision));
      num.overflow = 0;
      break;
    default:
      num.low = ((num.low | num.high) == 0);
      num.high = 0;
      num.overflow = 0;
      num.unsignedp = 0;
      break;
    }
  return num;
}
static cpp_num
num_binary_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
{
  cpp_num result;
  size_t precision = ((pfile)->opts.precision);
  unsigned char gte;
  size_t n;
  switch (op)
    {
    case CPP_LSHIFT:
    case CPP_RSHIFT:
      if (!rhs.unsignedp && !num_positive (rhs, precision))
 {
   if (op == CPP_LSHIFT)
     op = CPP_RSHIFT;
   else
     op = CPP_LSHIFT;
   rhs = num_negate (rhs, precision);
 }
      if (rhs.high)
 n = ~0;
      else
 n = rhs.low;
      if (op == CPP_LSHIFT)
 lhs = num_lshift (lhs, precision, n);
      else
 lhs = num_rshift (lhs, precision, n);
      break;
    case CPP_MIN:
    case CPP_MAX:
      {
 unsigned char unsignedp = lhs.unsignedp || rhs.unsignedp;
 gte = num_greater_eq (lhs, rhs, precision);
 if (op == CPP_MIN)
   gte = !gte;
 if (!gte)
   lhs = rhs;
 lhs.unsignedp = unsignedp;
      }
      break;
    case CPP_MINUS:
      rhs = num_negate (rhs, precision);
    case CPP_PLUS:
      result.low = lhs.low + rhs.low;
      result.high = lhs.high + rhs.high;
      if (result.low < lhs.low)
 result.high++;
      result.unsignedp = lhs.unsignedp || rhs.unsignedp;
      result.overflow = 0;
      result = num_trim (result, precision);
      if (!result.unsignedp)
 {
   unsigned char lhsp = num_positive (lhs, precision);
   result.overflow = (lhsp == num_positive (rhs, precision)
        && lhsp != num_positive (result, precision));
 }
      return result;
    default:
      if (((pfile)->opts.pedantic) && (!((pfile)->opts.c99)
       || !pfile->state.skip_eval))
 cpp_error (pfile, 0x02,
     "comma operator in operand of #if");
      lhs = rhs;
      break;
    }
  return lhs;
}
static cpp_num
num_part_mul (cpp_num_part lhs, cpp_num_part rhs)
{
  cpp_num result;
  cpp_num_part middle[2], temp;
  result.low = (lhs & (~(cpp_num_part) 0 >> ((sizeof (cpp_num_part) * 8) / 2))) * (rhs & (~(cpp_num_part) 0 >> ((sizeof (cpp_num_part) * 8) / 2)));
  result.high = (lhs >> ((sizeof (cpp_num_part) * 8) / 2)) * (rhs >> ((sizeof (cpp_num_part) * 8) / 2));
  middle[0] = (lhs & (~(cpp_num_part) 0 >> ((sizeof (cpp_num_part) * 8) / 2))) * (rhs >> ((sizeof (cpp_num_part) * 8) / 2));
  middle[1] = (lhs >> ((sizeof (cpp_num_part) * 8) / 2)) * (rhs & (~(cpp_num_part) 0 >> ((sizeof (cpp_num_part) * 8) / 2)));
  temp = result.low;
  result.low += (middle[0] & (~(cpp_num_part) 0 >> ((sizeof (cpp_num_part) * 8) / 2))) << ((sizeof (cpp_num_part) * 8) / 2);
  if (result.low < temp)
    result.high++;
  temp = result.low;
  result.low += (middle[1] & (~(cpp_num_part) 0 >> ((sizeof (cpp_num_part) * 8) / 2))) << ((sizeof (cpp_num_part) * 8) / 2);
  if (result.low < temp)
    result.high++;
  result.high += (middle[0] >> ((sizeof (cpp_num_part) * 8) / 2));
  result.high += (middle[1] >> ((sizeof (cpp_num_part) * 8) / 2));
  result.unsignedp = 1;
  result.overflow = 0;
  return result;
}
static cpp_num
num_mul (cpp_reader *pfile, cpp_num lhs, cpp_num rhs)
{
  cpp_num result, temp;
  unsigned char unsignedp = lhs.unsignedp || rhs.unsignedp;
  unsigned char overflow, negate = 0;
  size_t precision = ((pfile)->opts.precision);
  if (!unsignedp)
    {
      if (!num_positive (lhs, precision))
 negate = !negate, lhs = num_negate (lhs, precision);
      if (!num_positive (rhs, precision))
 negate = !negate, rhs = num_negate (rhs, precision);
    }
  overflow = lhs.high && rhs.high;
  result = num_part_mul (lhs.low, rhs.low);
  temp = num_part_mul (lhs.high, rhs.low);
  result.high += temp.low;
  if (temp.high)
    overflow = 1;
  temp = num_part_mul (lhs.low, rhs.high);
  result.high += temp.low;
  if (temp.high)
    overflow = 1;
  temp.low = result.low, temp.high = result.high;
  result = num_trim (result, precision);
  if (!(result.low == temp.low && result.high == temp.high))
    overflow = 1;
  if (negate)
    result = num_negate (result, precision);
  if (unsignedp)
    result.overflow = 0;
  else
    result.overflow = overflow || (num_positive (result, precision) ^ !negate
       && !((result.low | result.high) == 0));
  result.unsignedp = unsignedp;
  return result;
}
static cpp_num
num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
{
  cpp_num result, sub;
  cpp_num_part mask;
  unsigned char unsignedp = lhs.unsignedp || rhs.unsignedp;
  unsigned char negate = 0, lhs_neg = 0;
  size_t i, precision = ((pfile)->opts.precision);
  if (!unsignedp)
    {
      if (!num_positive (lhs, precision))
 negate = !negate, lhs_neg = 1, lhs = num_negate (lhs, precision);
      if (!num_positive (rhs, precision))
 negate = !negate, rhs = num_negate (rhs, precision);
    }
  if (rhs.high)
    {
      i = precision - 1;
      mask = (cpp_num_part) 1 << (i - (sizeof (cpp_num_part) * 8));
      for (; ; i--, mask >>= 1)
 if (rhs.high & mask)
   break;
    }
  else if (rhs.low)
    {
      if (precision > (sizeof (cpp_num_part) * 8))
 i = precision - (sizeof (cpp_num_part) * 8) - 1;
      else
 i = precision - 1;
      mask = (cpp_num_part) 1 << i;
      for (; ; i--, mask >>= 1)
 if (rhs.low & mask)
   break;
    }
  else
    {
      if (!pfile->state.skip_eval)
 cpp_error (pfile, 0x03, "division by zero in #if");
      return lhs;
    }
  rhs.unsignedp = 1;
  lhs.unsignedp = 1;
  i = precision - i - 1;
  sub = num_lshift (rhs, precision, i);
  result.high = result.low = 0;
  for (;;)
    {
      if (num_greater_eq (lhs, sub, precision))
 {
   lhs = num_binary_op (pfile, lhs, sub, CPP_MINUS);
   if (i >= (sizeof (cpp_num_part) * 8))
     result.high |= (cpp_num_part) 1 << (i - (sizeof (cpp_num_part) * 8));
   else
     result.low |= (cpp_num_part) 1 << i;
 }
      if (i-- == 0)
 break;
      sub.low = (sub.low >> 1) | (sub.high << ((sizeof (cpp_num_part) * 8) - 1));
      sub.high >>= 1;
    }
  if (op == CPP_DIV)
    {
      result.unsignedp = unsignedp;
      result.overflow = 0;
      if (!unsignedp)
 {
   if (negate)
     result = num_negate (result, precision);
   result.overflow = num_positive (result, precision) ^ !negate;
 }
      return result;
    }
  lhs.unsignedp = unsignedp;
  lhs.overflow = 0;
  if (lhs_neg)
    lhs = num_negate (lhs, precision);
  return lhs;
}
struct dirent
  {
    __ino_t d_ino;
    __off_t d_off;
    unsigned short int d_reclen;
    unsigned char d_type;
    char d_name[256];
  };
struct dirent64
  {
    __ino64_t d_ino;
    __off64_t d_off;
    unsigned short int d_reclen;
    unsigned char d_type;
    char d_name[256];
  };
enum
  {
    DT_UNKNOWN = 0,
    DT_FIFO = 1,
    DT_CHR = 2,
    DT_DIR = 4,
    DT_BLK = 6,
    DT_REG = 8,
    DT_LNK = 10,
    DT_SOCK = 12,
    DT_WHT = 14
  };
typedef struct __dirstream DIR;
extern DIR *opendir (const char *__name) ;
extern DIR *fdopendir (int __fd);
extern int closedir (DIR *__dirp) ;
extern struct dirent *readdir (DIR *__dirp) ;
extern struct dirent64 *readdir64 (DIR *__dirp) ;
extern int readdir_r (DIR * __dirp,
        struct dirent * __entry,
        struct dirent ** __result)
     ;
extern int readdir64_r (DIR * __dirp,
   struct dirent64 * __entry,
   struct dirent64 ** __result)
     ;
extern void rewinddir (DIR *__dirp) ;
extern void seekdir (DIR *__dirp, long int __pos) ;
extern long int telldir (DIR *__dirp) ;
extern int dirfd (DIR *__dirp) ;
extern int scandir (const char * __dir,
      struct dirent *** __namelist,
      int (*__selector) (const struct dirent *),
      int (*__cmp) (const struct dirent **,
      const struct dirent **))
     ;
extern int scandir64 (const char * __dir,
        struct dirent64 *** __namelist,
        int (*__selector) (const struct dirent64 *),
        int (*__cmp) (const struct dirent64 **,
        const struct dirent64 **))
     ;
extern int scandirat (int __dfd, const char * __dir,
        struct dirent *** __namelist,
        int (*__selector) (const struct dirent *),
        int (*__cmp) (const struct dirent **,
        const struct dirent **))
     ;
extern int scandirat64 (int __dfd, const char * __dir,
   struct dirent64 *** __namelist,
   int (*__selector) (const struct dirent64 *),
   int (*__cmp) (const struct dirent64 **,
          const struct dirent64 **))
     ;
extern int alphasort (const struct dirent **__e1,
        const struct dirent **__e2)
     ;
extern int alphasort64 (const struct dirent64 **__e1,
   const struct dirent64 **__e2)
     ;
extern __ssize_t getdirentries (int __fd, char * __buf,
    size_t __nbytes,
    __off_t * __basep)
     ;
extern __ssize_t getdirentries64 (int __fd, char * __buf,
      size_t __nbytes,
      __off64_t * __basep)
     ;
extern int versionsort (const struct dirent **__e1,
   const struct dirent **__e2)
     ;
extern int versionsort64 (const struct dirent64 **__e1,
     const struct dirent64 **__e2)
     ;
struct _cpp_file
{
  const char *name;
  const char *path;
  const char *pchname;
  const char *dir_name;
  struct _cpp_file *next_file;
  const uchar *buffer;
  const cpp_hashnode *cmacro;
  cpp_dir *dir;
  struct stat st;
  int fd;
  int err_no;
  unsigned short stack_count;
  unsigned char once_only;
  unsigned char dont_read;
  unsigned char main_file;
  unsigned char buffer_valid;
  unsigned char pch;
};
struct file_hash_entry
{
  struct file_hash_entry *next;
  cpp_dir *start_dir;
  union
  {
    _cpp_file *file;
    cpp_dir *dir;
  } u;
};
static unsigned char open_file (_cpp_file *file);
static unsigned char pch_open_file (cpp_reader *pfile, _cpp_file *file,
      unsigned char *invalid_pch);
static unsigned char find_file_in_dir (cpp_reader *pfile, _cpp_file *file,
         unsigned char *invalid_pch);
static unsigned char read_file_guts (cpp_reader *pfile, _cpp_file *file);
static unsigned char read_file (cpp_reader *pfile, _cpp_file *file);
static unsigned char should_stack_file (cpp_reader *, _cpp_file *file, unsigned char import);
static struct cpp_dir *search_path_head (cpp_reader *, const char *fname,
     int angle_brackets, enum include_type);
static const char *dir_name_of_file (_cpp_file *file);
static void open_file_failed (cpp_reader *pfile, _cpp_file *file);
static struct file_hash_entry *search_cache (struct file_hash_entry *head,
          const cpp_dir *start_dir);
static _cpp_file *make_cpp_file (cpp_reader *, cpp_dir *, const char *fname);
static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp);
static void allocate_file_hash_entries (cpp_reader *pfile);
static struct file_hash_entry *new_file_hash_entry (cpp_reader *pfile);
static int report_missing_guard (void **slot, void *b);
static hashval_t file_hash_hash (const void *p);
static int file_hash_eq (const void *p, const void *q);
static char *read_filename_string (int ch, FILE *f);
static void read_name_map (cpp_dir *dir);
static char *remap_filename (cpp_reader *pfile, _cpp_file *file);
static char *append_file_to_dir (const char *fname, cpp_dir *dir);
static unsigned char validate_pch (cpp_reader *, _cpp_file *file, const char *pchname);
static int pchf_adder (void **slot, void *data);
static int pchf_save_compare (const void *e1, const void *e2);
static int pchf_compare (const void *d_p, const void *e_p);
static unsigned char check_file_against_entries (cpp_reader *, _cpp_file *, unsigned char);
static unsigned char
open_file (_cpp_file *file)
{
  if (file->path[0] == '\0')
    {
      file->fd = 0;
      ;
    }
  else
    file->fd = open (file->path, 00 | 0400 | 0, 0666);
  if (file->fd != -1)
    {
      if (fstat (file->fd, &file->st) == 0)
 {
   if (!((((file->st.st_mode)) & 0170000) == (0040000)))
     {
       file->err_no = 0;
       return 1;
     }
   (*__errno_location ()) = 2;
 }
      close (file->fd);
      file->fd = -1;
    }
  else if ((*__errno_location ()) == 20)
    (*__errno_location ()) = 2;
  file->err_no = (*__errno_location ());
  return 0;
}
static unsigned char
pch_open_file (cpp_reader *pfile, _cpp_file *file, unsigned char *invalid_pch)
{
  static const char extension[] = ".gch";
  const char *path = file->path;
  size_t len, flen;
  char *pchname;
  struct stat st;
  unsigned char valid = 0;
  if (file->name[0] == '\0' || !pfile->cb.valid_pch)
    return 0;
  flen = strlen (path);
  len = flen + sizeof (extension);
  pchname = xmalloc (len);
  memcpy (pchname, path, flen);
  memcpy (pchname + flen, extension, sizeof (extension));
  if (stat (pchname, &st) == 0)
    {
      DIR *pchdir;
      struct dirent *d;
      size_t dlen, plen = len;
      if (!((((st.st_mode)) & 0170000) == (0040000)))
 valid = validate_pch (pfile, file, pchname);
      else if ((pchdir = opendir (pchname)) != ((void *)0))
 {
   pchname[plen - 1] = '/';
   while ((d = readdir (pchdir)) != ((void *)0))
     {
       dlen = strlen (d->d_name) + 1;
       if ((strcmp (d->d_name, ".") == 0)
    || (strcmp (d->d_name, "..") == 0))
  continue;
       if (dlen + plen > len)
  {
    len += dlen + 64;
    pchname = xrealloc (pchname, len);
  }
       memcpy (pchname + plen, d->d_name, dlen);
       valid = validate_pch (pfile, file, pchname);
       if (valid)
  break;
     }
   closedir (pchdir);
 }
      if (valid)
 file->pch = 1;
      else
 *invalid_pch = 1;
    }
  if (valid)
    file->pchname = pchname;
  else
    free (pchname);
  return valid;
}
static unsigned char
find_file_in_dir (cpp_reader *pfile, _cpp_file *file, unsigned char *invalid_pch)
{
  char *path;
  if (((pfile)->opts.remap) && (path = remap_filename (pfile, file)))
    ;
  else
    if (file->dir->construct)
      path = file->dir->construct (file->name, file->dir);
    else
      path = append_file_to_dir (file->name, file->dir);
  if (path)
    {
      file->path = path;
      if (pch_open_file (pfile, file, invalid_pch))
 return 1;
      if (open_file (file))
 return 1;
      if (file->err_no != 2)
 {
   open_file_failed (pfile, file);
   return 1;
 }
      free (path);
      file->path = file->name;
    }
  else
    {
      file->err_no = 2;
      file->path = ((void *)0);
    }
  return 0;
}
static unsigned char
search_path_exhausted (cpp_reader *pfile, const char *header1, _cpp_file *file)
{
  missing_header_cb func = pfile->cb.missing_header;
  if (func
      && file->dir == ((void *)0))
    {
      if ((file->path = func (pfile, header1, &file->dir)) != ((void *)0))
 {
   if (open_file (file))
     return 1;
   free ((void *)file->path);
 }
      file->path = file->name;
    }
  return 0;
}
unsigned char
_cpp_find_failed (_cpp_file *file)
{
  return file->err_no != 0;
}
_cpp_file *
_cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, unsigned char fake)
{
  struct file_hash_entry *entry, **hash_slot;
  _cpp_file *file;
  unsigned char invalid_pch = 0;
  if (start_dir == ((void *)0))
    cpp_error (pfile, 0x04, "NULL directory in find_file");
  hash_slot = (struct file_hash_entry **)
    htab_find_slot_with_hash (pfile->file_hash, fname,
         htab_hash_string (fname),
         INSERT);
  entry = search_cache (*hash_slot, start_dir);
  if (entry)
    return entry->u.file;
  file = make_cpp_file (pfile, start_dir, fname);
  for (; !fake ;)
    {
      if (file->dir == pfile->quote_include
   || file->dir == pfile->bracket_include)
 {
   entry = search_cache (*hash_slot, file->dir);
   if (entry)
     {
       free ((char *) file->name);
       free (file);
       file = entry->u.file;
       goto found;
     }
 }
      if (find_file_in_dir (pfile, file, &invalid_pch))
 break;
      file->dir = file->dir->next;
      if (file->dir == ((void *)0))
 {
   if (search_path_exhausted (pfile, fname, file))
     return file;
   open_file_failed (pfile, file);
   if (invalid_pch)
     {
       cpp_error (pfile, 0x03,
        "one or more PCH files were found, but they were invalid");
       if (!cpp_get_options (pfile)->warn_invalid_pch)
  cpp_error (pfile, 0x03,
      "use -Winvalid-pch for more information");
     }
   break;
 }
    }
  file->next_file = pfile->all_files;
  pfile->all_files = file;
  if (file->dir && start_dir->next == pfile->quote_include)
    {
      cpp_dir *d;
      cpp_dir *proper_start_dir = pfile->quote_include;
      for (d = proper_start_dir;; d = d->next)
 {
   if (d == pfile->bracket_include)
     proper_start_dir = d;
   if (d == 0)
     {
       proper_start_dir = 0;
       break;
     }
   if (!strncmp (d->name, file->dir->name, file->dir->len - 1))
     break;
 }
      if (proper_start_dir)
 start_dir = proper_start_dir;
    }
 found:
  entry = new_file_hash_entry (pfile);
  entry->next = *hash_slot;
  entry->start_dir = start_dir;
  entry->u.file = file;
  *hash_slot = entry;
  return file;
}
static unsigned char
read_file_guts (cpp_reader *pfile, _cpp_file *file)
{
  ssize_t size, total, count;
  uchar *buf;
  unsigned char regular;
  if (((((file->st.st_mode)) & 0170000) == (0060000)))
    {
      cpp_error (pfile, 0x03, "%s is a block device", file->path);
      return 0;
    }
  regular = ((((file->st.st_mode)) & 0170000) == (0100000));
  if (regular)
    {
      if (file->st.st_size > ((ssize_t) (~ (ssize_t) 0 - ((ssize_t) ((! ((ssize_t) 0 < (ssize_t) -1)) ? ~ (ssize_t) 0 << (sizeof(ssize_t) * 8 - 1) : (ssize_t) 0)))))
 {
   cpp_error (pfile, 0x03, "%s is too large", file->path);
   return 0;
 }
      size = file->st.st_size;
    }
  else
    size = 8 * 1024;
  buf = xmalloc (size + 1);
  total = 0;
  while ((count = read (file->fd, buf + total, size - total)) > 0)
    {
      total += count;
      if (total == size)
 {
   if (regular)
     break;
   size *= 2;
   buf = xrealloc (buf, size + 1);
 }
    }
  if (count < 0)
    {
      cpp_errno (pfile, 0x03, file->path);
      return 0;
    }
  if (regular && total != size && 1)
    cpp_error (pfile, 0x00,
        "%s is shorter than expected", file->path);
  file->buffer = _cpp_convert_input (pfile, ((pfile)->opts.input_charset),
         buf, size, total, &file->st.st_size);
  file->buffer_valid = 1;
  return 1;
}
static unsigned char
read_file (cpp_reader *pfile, _cpp_file *file)
{
  if (file->buffer_valid)
    return 1;
  if (file->dont_read || file->err_no)
    return 0;
  if (file->fd == -1 && !open_file (file))
    {
      open_file_failed (pfile, file);
      return 0;
    }
  file->dont_read = !read_file_guts (pfile, file);
  close (file->fd);
  file->fd = -1;
  return !file->dont_read;
}
static unsigned char
should_stack_file (cpp_reader *pfile, _cpp_file *file, unsigned char import)
{
  _cpp_file *f;
  if (file->once_only)
    return 0;
  if (import)
    {
      _cpp_mark_file_once_only (pfile, file);
      if (file->stack_count)
 return 0;
    }
  if (file->cmacro && file->cmacro->type == NT_MACRO)
    return 0;
  if (file->pch)
    {
      pfile->cb.read_pch (pfile, file->pchname, file->fd, file->path);
      close (file->fd);
      file->fd = -1;
      return 0;
    }
  if (!read_file (pfile, file))
    return 0;
  if (check_file_against_entries (pfile, file, import))
    {
      if (! import)
 _cpp_mark_file_once_only (pfile, file);
      return 0;
    }
  if (!pfile->seen_once_only)
    return 1;
  for (f = pfile->all_files; f; f = f->next_file)
    {
      if (f == file)
 continue;
      if ((import || f->once_only)
   && f->err_no == 0
   && f->st.st_mtim.tv_sec == file->st.st_mtim.tv_sec
   && f->st.st_size == file->st.st_size
   && read_file (pfile, f)
   && f->st.st_size == file->st.st_size
   && !memcmp (f->buffer, file->buffer, f->st.st_size))
 break;
    }
  return f == ((void *)0);
}
unsigned char
_cpp_stack_file (cpp_reader *pfile, _cpp_file *file, unsigned char import)
{
  cpp_buffer *buffer;
  int sysp;
  if (!should_stack_file (pfile, file, import))
      return 0;
  if (pfile->buffer == ((void *)0) || file->dir == ((void *)0))
    sysp = 0;
  else
    sysp = ((pfile->buffer->sysp) > (file->dir->sysp) ? (pfile->buffer->sysp) : (file->dir->sysp));
  if (((pfile)->opts.deps.style) > !!sysp && !file->stack_count)
    {
      if (!file->main_file || !((pfile)->opts.deps.ignore_main_file))
 deps_add_dep (pfile->deps, file->path);
    }
  file->buffer_valid = 0;
  file->stack_count++;
  buffer = cpp_push_buffer (pfile, file->buffer, file->st.st_size,
       ((pfile)->opts.preprocessed));
  buffer->file = file;
  buffer->sysp = sysp;
  pfile->mi_valid = 1;
  pfile->mi_cmacro = 0;
  _cpp_do_file_change (pfile, LC_ENTER, file->path, 1, sysp);
  return 1;
}
void
_cpp_mark_file_once_only (cpp_reader *pfile, _cpp_file *file)
{
  pfile->seen_once_only = 1;
  file->once_only = 1;
}
static struct cpp_dir *
search_path_head (cpp_reader *pfile, const char *fname, int angle_brackets,
    enum include_type type)
{
  cpp_dir *dir;
  _cpp_file *file;
  if (((((fname)[0]) == '/')))
    return &pfile->no_search_path;
  file = pfile->buffer == ((void *)0) ? pfile->main_file : pfile->buffer->file;
  if (type == IT_INCLUDE_NEXT && file->dir)
    dir = file->dir->next;
  else if (angle_brackets)
    dir = pfile->bracket_include;
  else if (type == IT_CMDLINE)
    return make_cpp_dir (pfile, "./", 0);
  else if (pfile->quote_ignores_source_dir)
    dir = pfile->quote_include;
  else
    return make_cpp_dir (pfile, dir_name_of_file (file),
    pfile->buffer ? pfile->buffer->sysp : 0);
  if (dir == ((void *)0))
    cpp_error (pfile, 0x03,
        "no include path in which to search for %s", fname);
  return dir;
}
static const char *
dir_name_of_file (_cpp_file *file)
{
  if (!file->dir_name)
    {
      size_t len = lbasename (file->path) - file->path;
      char *dir_name = xmalloc (len + 1);
      memcpy (dir_name, file->path, len);
      dir_name[len] = '\0';
      file->dir_name = dir_name;
    }
  return file->dir_name;
}
unsigned char
_cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets,
      enum include_type type)
{
  struct cpp_dir *dir;
  _cpp_file *file;
  dir = search_path_head (pfile, fname, angle_brackets, type);
  if (!dir)
    return 0;
  file = _cpp_find_file (pfile, fname, dir, 0);
  if (! file->pch && file->err_no == 0 && type != IT_CMDLINE)
    pfile->line_table->highest_location--;
  return _cpp_stack_file (pfile, file, type == IT_IMPORT);
}
static void
open_file_failed (cpp_reader *pfile, _cpp_file *file)
{
  int sysp = pfile->line_table->highest_line > 1 && pfile->buffer ? pfile->buffer->sysp : 0;
  unsigned char print_dep = ((pfile)->opts.deps.style) > !!sysp;
  (*__errno_location ()) = file->err_no;
  if (print_dep && ((pfile)->opts.deps.missing_files) && (*__errno_location ()) == 2)
    deps_add_dep (pfile->deps, file->name);
  else
    {
      if (((pfile)->opts.deps.style) && ! print_dep)
 cpp_errno (pfile, 0x00, file->path);
      else
 cpp_errno (pfile, 0x03, file->path);
    }
}
static struct file_hash_entry *
search_cache (struct file_hash_entry *head, const cpp_dir *start_dir)
{
  struct file_hash_entry *p;
  for (p = head; p; p = p->next)
    if (p->start_dir == start_dir)
      return p;
  return 0;
}
static _cpp_file *
make_cpp_file (cpp_reader *pfile, cpp_dir *dir, const char *fname)
{
  _cpp_file *file;
  file = xcalloc (1, sizeof (_cpp_file));
  file->main_file = !pfile->buffer;
  file->fd = -1;
  file->dir = dir;
  file->name = xstrdup (fname);
  return file;
}
static cpp_dir *
make_cpp_dir (cpp_reader *pfile, const char *dir_name, int sysp)
{
  struct file_hash_entry *entry, **hash_slot;
  cpp_dir *dir;
  hash_slot = (struct file_hash_entry **)
    htab_find_slot_with_hash (pfile->file_hash, dir_name,
         htab_hash_string (dir_name),
         INSERT);
  for (entry = *hash_slot; entry; entry = entry->next)
    if (entry->start_dir == ((void *)0))
      return entry->u.dir;
  dir = xcalloc (1, sizeof (cpp_dir));
  dir->next = pfile->quote_include;
  dir->name = (char *) dir_name;
  dir->len = strlen (dir_name);
  dir->sysp = sysp;
  dir->construct = 0;
  entry = new_file_hash_entry (pfile);
  entry->next = *hash_slot;
  entry->start_dir = ((void *)0);
  entry->u.dir = dir;
  *hash_slot = entry;
  return dir;
}
static void
allocate_file_hash_entries (cpp_reader *pfile)
{
  pfile->file_hash_entries_used = 0;
  pfile->file_hash_entries_allocated = 127;
  pfile->file_hash_entries = xmalloc
    (pfile->file_hash_entries_allocated * sizeof (struct file_hash_entry));
}
static struct file_hash_entry *
new_file_hash_entry (cpp_reader *pfile)
{
  if (pfile->file_hash_entries_used == pfile->file_hash_entries_allocated)
    allocate_file_hash_entries (pfile);
  return &pfile->file_hash_entries[pfile->file_hash_entries_used++];
}
unsigned char
cpp_included (cpp_reader *pfile, const char *fname)
{
  struct file_hash_entry *entry;
  entry = htab_find_with_hash (pfile->file_hash, fname,
          htab_hash_string (fname));
  while (entry && (entry->start_dir == ((void *)0) || entry->u.file->err_no))
    entry = entry->next;
  return entry != ((void *)0);
}
static hashval_t
file_hash_hash (const void *p)
{
  struct file_hash_entry *entry = (struct file_hash_entry *) p;
  const char *hname;
  if (entry->start_dir)
    hname = entry->u.file->name;
  else
    hname = entry->u.dir->name;
  return htab_hash_string (hname);
}
static int
file_hash_eq (const void *p, const void *q)
{
  struct file_hash_entry *entry = (struct file_hash_entry *) p;
  const char *fname = (const char *) q;
  const char *hname;
  if (entry->start_dir)
    hname = entry->u.file->name;
  else
    hname = entry->u.dir->name;
  return strcmp (hname, fname) == 0;
}
void
_cpp_init_files (cpp_reader *pfile)
{
  pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
     ((void *)0), xcalloc, free);
  allocate_file_hash_entries (pfile);
}
void
_cpp_cleanup_files (cpp_reader *pfile)
{
  htab_delete (pfile->file_hash);
}
void
_cpp_fake_include (cpp_reader *pfile, const char *fname)
{
  _cpp_find_file (pfile, fname, pfile->buffer->file->dir, 1);
}
void
cpp_make_system_header (cpp_reader *pfile, int syshdr, int externc)
{
  int flags = 0;
  const struct line_maps *line_table = pfile->line_table;
  const struct line_map *map = &line_table->maps[line_table->used-1];
  if (syshdr)
    flags = 1 + (externc != 0);
  pfile->buffer->sysp = flags;
  _cpp_do_file_change (pfile, LC_RENAME, map->to_file,
         ((((pfile->line_table->highest_line) - (map)->start_location) >> (map)->column_bits) + (map)->to_line), flags);
}
void
cpp_change_file (cpp_reader *pfile, enum lc_reason reason,
   const char *new_name)
{
  _cpp_do_file_change (pfile, reason, new_name, 1, 0);
}
static int
report_missing_guard (void **slot, void *b)
{
  struct file_hash_entry *entry = (struct file_hash_entry *) *slot;
  int *bannerp = (int *) b;
  if (entry->start_dir != ((void *)0))
    {
      _cpp_file *file = entry->u.file;
      if (file->cmacro == ((void *)0) && file->stack_count == 1 && !file->main_file)
 {
   if (*bannerp == 0)
     {
       fputs_unlocked ("Multiple include guards may be useful for:\n", stderr)
              ;
       *bannerp = 1;
     }
   fputs_unlocked (entry->u.file->path, stderr);
   putc_unlocked ('\n', stderr);
 }
    }
  return 0;
}
void
_cpp_report_missing_guards (cpp_reader *pfile)
{
  int banner = 0;
  htab_traverse (pfile->file_hash, report_missing_guard, &banner);
}
int
_cpp_compare_file_date (cpp_reader *pfile, const char *fname,
   int angle_brackets)
{
  _cpp_file *file;
  struct cpp_dir *dir;
  dir = search_path_head (pfile, fname, angle_brackets, IT_INCLUDE);
  if (!dir)
    return -1;
  file = _cpp_find_file (pfile, fname, dir, 0);
  if (file->err_no)
    return -1;
  if (file->fd != -1)
    {
      close (file->fd);
      file->fd = -1;
    }
  return file->st.st_mtim.tv_sec > pfile->buffer->file->st.st_mtim.tv_sec;
}
unsigned char
cpp_push_include (cpp_reader *pfile, const char *fname)
{
  return _cpp_stack_include (pfile, fname, 0, IT_CMDLINE);
}
void
_cpp_pop_file_buffer (cpp_reader *pfile, _cpp_file *file)
{
  if (pfile->mi_valid && file->cmacro == ((void *)0))
    file->cmacro = pfile->mi_cmacro;
  pfile->mi_valid = 0;
  if (file->buffer)
    {
      free ((void *) file->buffer);
      file->buffer = ((void *)0);
    }
}
void
cpp_set_include_chains (cpp_reader *pfile, cpp_dir *quote, cpp_dir *bracket,
   int quote_ignores_source_dir)
{
  pfile->quote_include = quote;
  pfile->bracket_include = quote;
  pfile->quote_ignores_source_dir = quote_ignores_source_dir;
  for (; quote; quote = quote->next)
    {
      quote->name_map = ((void *)0);
      quote->len = strlen (quote->name);
      if (quote == bracket)
 pfile->bracket_include = bracket;
    }
}
static char *
append_file_to_dir (const char *fname, cpp_dir *dir)
{
  size_t dlen, flen;
  char *path;
  dlen = dir->len;
  flen = strlen (fname);
  path = xmalloc (dlen + 1 + flen + 1);
  memcpy (path, dir->name, dlen);
  if (dlen && path[dlen - 1] != '/')
    path[dlen++] = '/';
  memcpy (&path[dlen], fname, flen + 1);
  return path;
}
static char *
read_filename_string (int ch, FILE *f)
{
  char *alloc, *set;
  int len;
  len = 20;
  set = alloc = xmalloc (len + 1);
  if (! (_sch_istable[(ch) & 0xff] & (unsigned short)(_sch_iscppsp)))
    {
      *set++ = ch;
      while ((ch = _IO_getc (f)) != (-1) && ! (_sch_istable[(ch) & 0xff] & (unsigned short)(_sch_iscppsp)))
 {
   if (set - alloc == len)
     {
       len *= 2;
       alloc = xrealloc (alloc, len + 1);
       set = alloc + len / 2;
     }
   *set++ = ch;
 }
    }
  *set = '\0';
  ungetc (ch, f);
  return alloc;
}
static void
read_name_map (cpp_dir *dir)
{
  static const char FILE_NAME_MAP_FILE[] = "header.gcc";
  char *name;
  FILE *f;
  size_t len, count = 0, room = 9;
  len = dir->len;
  name = C_alloca(len + sizeof (FILE_NAME_MAP_FILE) + 1);
  memcpy (name, dir->name, len);
  if (len && name[len - 1] != '/')
    name[len++] = '/';
  strcpy (name + len, FILE_NAME_MAP_FILE);
  f = fopen (name, "r");
  dir->name_map = xmalloc (room * sizeof (char *));
  if (f)
    {
      int ch;
      while ((ch = _IO_getc (f)) != (-1))
 {
   char *to;
   if ((_sch_istable[(ch) & 0xff] & (unsigned short)(_sch_iscppsp)))
     continue;
   if (count + 2 > room)
     {
       room += 8;
       dir->name_map = xrealloc (dir->name_map, room * sizeof (char *));
     }
   dir->name_map[count] = read_filename_string (ch, f);
   while ((ch = _IO_getc (f)) != (-1) && (_sch_istable[(ch) & 0xff] & (unsigned short)(_sch_isblank)))
     ;
   to = read_filename_string (ch, f);
   if (((((to)[0]) == '/')))
     dir->name_map[count + 1] = to;
   else
     {
       dir->name_map[count + 1] = append_file_to_dir (to, dir);
       free (to);
     }
   count += 2;
   while ((ch = _IO_getc (f)) != '\n')
     if (ch == (-1))
       break;
 }
      fclose (f);
    }
  dir->name_map[count] = ((void *)0);
}
static char *
remap_filename (cpp_reader *pfile, _cpp_file *file)
{
  const char *fname, *p;
  char *new_dir;
  cpp_dir *dir;
  size_t index, len;
  dir = file->dir;
  fname = file->name;
  for (;;)
    {
      if (!dir->name_map)
 read_name_map (dir);
      for (index = 0; dir->name_map[index]; index += 2)
 if (!strcmp (dir->name_map[index], fname))
     return xstrdup (dir->name_map[index + 1]);
      p = strchr (fname, '/');
      if (!p || p == fname)
 return ((void *)0);
      len = dir->len + (p - fname + 1);
      new_dir = xmalloc (len + 1);
      memcpy (new_dir, dir->name, dir->len);
      memcpy (new_dir + dir->len, fname, p - fname + 1);
      new_dir[len] = '\0';
      dir = make_cpp_dir (pfile, new_dir, dir->sysp);
      fname = p + 1;
    }
}
static unsigned char
validate_pch (cpp_reader *pfile, _cpp_file *file, const char *pchname)
{
  const char *saved_path = file->path;
  unsigned char valid = 0;
  file->path = pchname;
  if (open_file (file))
    {
      valid = 1 & pfile->cb.valid_pch (pfile, pchname, file->fd);
      if (!valid)
 {
   close (file->fd);
   file->fd = -1;
 }
      if (((pfile)->opts.print_include_names))
 {
   unsigned int i;
   for (i = 1; i < pfile->line_table->depth; i++)
     putc_unlocked ('.', stderr);
   fprintf (stderr, "%c %s\n",
     valid ? '!' : 'x', pchname);
 }
    }
  file->path = saved_path;
  return valid;
}
const char *
cpp_get_path (struct _cpp_file *f)
{
  return f->path;
}
cpp_dir *
cpp_get_dir (struct _cpp_file *f)
{
  return f->dir;
}
cpp_buffer *
cpp_get_buffer (cpp_reader *pfile)
{
  return pfile->buffer;
}
_cpp_file *
cpp_get_file (cpp_buffer *b)
{
  return b->file;
}
cpp_buffer *
cpp_get_prev (cpp_buffer *b)
{
  return b->prev;
}
struct pchf_data {
  size_t count;
  unsigned char have_once_only;
  struct pchf_entry {
    off_t size;
    unsigned char sum[16];
    unsigned char once_only;
  } entries[1];
};
static struct pchf_data *pchf;
struct pchf_adder_info
{
  cpp_reader *pfile;
  struct pchf_data *d;
};
static int
pchf_adder (void **slot, void *data)
{
  struct file_hash_entry *h = (struct file_hash_entry *) *slot;
  struct pchf_adder_info *i = (struct pchf_adder_info *) data;
  if (h->start_dir != ((void *)0) && h->u.file->stack_count != 0)
    {
      struct pchf_data *d = i->d;
      _cpp_file *f = h->u.file;
      size_t count = d->count++;
      if (f->dont_read || f->err_no)
 return 1;
      d->entries[count].once_only = f->once_only;
      d->have_once_only = d->have_once_only | f->once_only;
      if (f->buffer_valid)
   md5_buffer ((const char *)f->buffer,
        f->st.st_size, d->entries[count].sum);
      else
 {
   FILE *ff;
   int oldfd = f->fd;
   if (!open_file (f))
     {
       open_file_failed (i->pfile, f);
       return 0;
     }
   ff = fdopen (f->fd, "rb");
   md5_stream (ff, d->entries[count].sum);
   fclose (ff);
   f->fd = oldfd;
 }
      d->entries[count].size = f->st.st_size;
    }
  return 1;
}
static int
pchf_save_compare (const void *e1, const void *e2)
{
  return memcmp (e1, e2, sizeof (struct pchf_entry));
}
unsigned char
_cpp_save_file_entries (cpp_reader *pfile, FILE *f)
{
  size_t count = 0;
  struct pchf_data *result;
  size_t result_size;
  struct pchf_adder_info pai;
  count = htab_elements (pfile->file_hash);
  result_size = (sizeof (struct pchf_data)
   + sizeof (struct pchf_entry) * (count - 1));
  result = xcalloc (result_size, 1);
  result->count = 0;
  result->have_once_only = 0;
  pai.pfile = pfile;
  pai.d = result;
  htab_traverse (pfile->file_hash, pchf_adder, &pai);
  result_size = (sizeof (struct pchf_data)
                 + sizeof (struct pchf_entry) * (result->count - 1));
  qsort (result->entries, result->count, sizeof (struct pchf_entry),
  pchf_save_compare);
  return fwrite_unlocked (result, result_size, 1, f) == 1;
}
unsigned char
_cpp_read_file_entries (cpp_reader *pfile , FILE *f)
{
  struct pchf_data d;
  if (fread (&d, sizeof (struct pchf_data) - sizeof (struct pchf_entry), 1, f)
       != 1)
    return 0;
  pchf = xmalloc (sizeof (struct pchf_data)
    + sizeof (struct pchf_entry) * (d.count - 1));
  memcpy (pchf, &d, sizeof (struct pchf_data) - sizeof (struct pchf_entry));
  if (fread (pchf->entries, sizeof (struct pchf_entry), d.count, f)
      != d.count)
    return 0;
  return 1;
}
struct pchf_compare_data
{
  off_t size;
  unsigned char sum[16];
  unsigned char sum_computed;
  unsigned char check_included;
  _cpp_file *f;
};
static int
pchf_compare (const void *d_p, const void *e_p)
{
  const struct pchf_entry *e = (const struct pchf_entry *)e_p;
  struct pchf_compare_data *d = (struct pchf_compare_data *)d_p;
  int result;
  result = memcmp (&d->size, &e->size, sizeof (off_t));
  if (result != 0)
    return result;
  if (! d->sum_computed)
    {
      _cpp_file *const f = d->f;
      md5_buffer ((const char *)f->buffer, f->st.st_size, d->sum);
      d->sum_computed = 1;
    }
  result = memcmp (d->sum, e->sum, 16);
  if (result != 0)
    return result;
  if (d->check_included || e->once_only)
    return 0;
  else
    return 1;
}
static unsigned char
check_file_against_entries (cpp_reader *pfile ,
       _cpp_file *f,
       unsigned char check_included)
{
  struct pchf_compare_data d;
  if (pchf == ((void *)0)
      || (! check_included && ! pchf->have_once_only))
    return 0;
  d.size = f->st.st_size;
  d.sum_computed = 0;
  d.f = f;
  d.check_included = check_included;
  return bsearch (&d, pchf->entries, pchf->count, sizeof (struct pchf_entry),
    pchf_compare) != ((void *)0);
}
static cpp_hashnode *alloc_ident_node (hash_table *);
static cpp_hashnode *
alloc_ident_node (hash_table *table)
{
  cpp_hashnode *node;
  node = (( ((&table->pfile->hash_ob))->temp = ((sizeof (cpp_hashnode))), ((((&table->pfile->hash_ob))->chunk_limit - ((&table->pfile->hash_ob))->next_free < ((&table->pfile->hash_ob))->temp) ? (_obstack_newchunk (((&table->pfile->hash_ob)), ((&table->pfile->hash_ob))->temp), 0) : 0), (((&table->pfile->hash_ob))->next_free += (((&table->pfile->hash_ob))->temp))), ( (((&table->pfile->hash_ob))->next_free == ((&table->pfile->hash_ob))->object_base ? ((((&table->pfile->hash_ob))->maybe_empty_object = 1), 0) : 0), ((&table->pfile->hash_ob))->temp = ((((&table->pfile->hash_ob))->object_base) - (char *) 0), ((&table->pfile->hash_ob))->next_free = (((((((&table->pfile->hash_ob))->next_free) - (char *) 0)+((&table->pfile->hash_ob))->alignment_mask) & ~ (((&table->pfile->hash_ob))->alignment_mask)) + (char *) 0), ((((&table->pfile->hash_ob))->next_free - (char *) ((&table->pfile->hash_ob))->chunk > ((&table->pfile->hash_ob))->chunk_limit - (char *) ((&table->pfile->hash_ob))->chunk) ? (((&table->pfile->hash_ob))->next_free = ((&table->pfile->hash_ob))->chunk_limit) : 0), ((&table->pfile->hash_ob))->object_base = ((&table->pfile->hash_ob))->next_free, ((((&table->pfile->hash_ob))->temp) + (char *) 0)));
  memset (node, 0, sizeof (cpp_hashnode));
  return node;
}
void
_cpp_init_hashtable (cpp_reader *pfile, hash_table *table)
{
  struct spec_nodes *s;
  if (table == ((void *)0))
    {
      pfile->our_hashtable = 1;
      table = ht_create (13);
      table->alloc_node = (hashnode (*) (hash_table *)) alloc_ident_node;
      _obstack_begin (&pfile->hash_ob, 0, 0,
        (void *(*) (long)) xmalloc,
        (void (*) (void *)) free);
    }
  table->pfile = pfile;
  pfile->hash_table1 = table;
  _cpp_init_directives (pfile);
  _cpp_init_internal_pragmas (pfile);
  s = &pfile->spec_nodes;
  s->n_defined = cpp_lookup (pfile, (const uchar *)"defined", sizeof "defined" - 1);
  s->n_true = cpp_lookup (pfile, (const uchar *)"true", sizeof "true" - 1);
  s->n_false = cpp_lookup (pfile, (const uchar *)"false", sizeof "false" - 1);
  s->n__VA_ARGS__ = cpp_lookup (pfile, (const uchar *)"__VA_ARGS__", sizeof "__VA_ARGS__" - 1);
  s->n__VA_ARGS__->flags |= (1 << 3);
}
void
_cpp_destroy_hashtable (cpp_reader *pfile)
{
  if (pfile->our_hashtable)
    {
      ht_destroy (pfile->hash_table1);
      ( (&pfile->hash_ob)->temp = (char *) (0) - (char *) (&pfile->hash_ob)->chunk, (((&pfile->hash_ob)->temp > 0 && (&pfile->hash_ob)->temp < (&pfile->hash_ob)->chunk_limit - (char *) (&pfile->hash_ob)->chunk) ? (int) ((&pfile->hash_ob)->next_free = (&pfile->hash_ob)->object_base = (&pfile->hash_ob)->temp + (char *) (&pfile->hash_ob)->chunk) : (((obstack_free) ((&pfile->hash_ob), (&pfile->hash_ob)->temp + (char *) (&pfile->hash_ob)->chunk), 0), 0)));
    }
}
cpp_hashnode *
cpp_lookup (cpp_reader *pfile, const unsigned char *str, unsigned int len)
{
  return ((cpp_hashnode *) (ht_lookup (pfile->hash_table1, str, len, HT_ALLOC)));
}
int
cpp_defined (cpp_reader *pfile, const unsigned char *str, int len)
{
  cpp_hashnode *node;
  node = ((cpp_hashnode *) (ht_lookup (pfile->hash_table1, str, len, HT_NO_INSERT)));
  return node && node->type == NT_MACRO;
}
void
cpp_forall_identifiers (cpp_reader *pfile, cpp_cb cb, void *v)
{
  ht_forall (pfile->hash_table1, (ht_cb) cb, v);
}
static void init_library (void);
static void mark_named_operators (cpp_reader *);
static void read_original_filename (cpp_reader *);
static void read_original_directory (cpp_reader *);
static void post_options (cpp_reader *);
uchar _cpp_trigraph_map[(127 * 2 + 1) + 1] = { 0 }; static void init_trigraph_map (void) { unsigned char *x = _cpp_trigraph_map;
  x['='] = '#'; x[')'] = ']'; x['!'] = '|';
  x['('] = '['; x['\''] = '^'; x['>'] = '}';
  x['/'] = '\\'; x['<'] = '{'; x['-'] = '~';
}
struct lang_flags
{
  char c99;
  char cplusplus;
  char extended_numbers;
  char std;
  char cplusplus_comments;
  char digraphs;
};
static const struct lang_flags lang_defaults[] =
{
                { 0, 0, 1, 0, 1, 1 },
                { 1, 0, 1, 0, 1, 1 },
                { 0, 0, 0, 1, 0, 0 },
                { 0, 0, 0, 1, 0, 1 },
                { 1, 0, 1, 1, 1, 1 },
                { 0, 1, 1, 0, 1, 1 },
                { 0, 1, 1, 1, 1, 1 },
                { 0, 0, 1, 0, 1, 0 }
};
void
cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
{
  const struct lang_flags *l = &lang_defaults[(int) lang];
  ((pfile)->opts.lang) = lang;
  ((pfile)->opts.c99) = l->c99;
  ((pfile)->opts.cplusplus) = l->cplusplus;
  ((pfile)->opts.extended_numbers) = l->extended_numbers;
  ((pfile)->opts.std) = l->std;
  ((pfile)->opts.trigraphs) = l->std;
  ((pfile)->opts.cplusplus_comments) = l->cplusplus_comments;
  ((pfile)->opts.digraphs) = l->digraphs;
}
static void
init_library (void)
{
  static int initialized = 0;
  if (! initialized)
    {
      initialized = 1;
      init_trigraph_map ();
       (void) bindtextdomain ("gcc", "/scratch2/smcc-extras/build/gcc-cvs/install/share/locale");
    }
}
cpp_reader *
cpp_create_reader (enum c_lang lang, hash_table *table,
     struct line_maps *line_table)
{
  cpp_reader *pfile;
  init_library ();
  pfile = xcalloc (1, sizeof (cpp_reader));
  cpp_set_lang (pfile, lang);
  ((pfile)->opts.warn_multichar) = 1;
  ((pfile)->opts.discard_comments) = 1;
  ((pfile)->opts.discard_comments_in_macro_exp) = 1;
  ((pfile)->opts.show_column) = 1;
  ((pfile)->opts.tabstop) = 8;
  ((pfile)->opts.operator_names) = 1;
  ((pfile)->opts.warn_trigraphs) = 2;
  ((pfile)->opts.warn_endif_labels) = 1;
  ((pfile)->opts.warn_deprecated) = 1;
  ((pfile)->opts.warn_long_long) = !((pfile)->opts.c99);
  ((pfile)->opts.dollars_in_ident) = 1;
  ((pfile)->opts.warn_dollars) = 1;
  ((pfile)->opts.warn_variadic_macros) = 1;
  ((pfile)->opts.precision) = 8 * sizeof (long);
  ((pfile)->opts.char_precision) = 8;
  ((pfile)->opts.wchar_precision) = 8 * sizeof (int);
  ((pfile)->opts.int_precision) = 8 * sizeof (int);
  ((pfile)->opts.unsigned_char) = 0;
  ((pfile)->opts.unsigned_wchar) = 1;
  ((pfile)->opts.bytes_big_endian) = 1;
  ((pfile)->opts.narrow_charset) = _cpp_default_encoding ();
  ((pfile)->opts.wide_charset) = 0;
  ((pfile)->opts.input_charset) = _cpp_default_encoding ();
  pfile->no_search_path.name = (char *) "";
  pfile->line_table = line_table;
  pfile->state.save_comments = ! ((pfile)->opts.discard_comments);
  pfile->avoid_paste.type = CPP_PADDING;
  pfile->avoid_paste.val.source = ((void *)0);
  pfile->eof.type = CPP_EOF;
  pfile->eof.flags = 0;
  _cpp_init_tokenrun (&pfile->base_run, 250);
  pfile->cur_run = &pfile->base_run;
  pfile->cur_token = pfile->base_run.base;
  pfile->context = &pfile->base_context;
  pfile->base_context.macro = 0;
  pfile->base_context.prev = pfile->base_context.next = 0;
  pfile->a_buff = _cpp_get_buff (pfile, 0);
  pfile->u_buff = _cpp_get_buff (pfile, 0);
  _cpp_expand_op_stack (pfile);
  _obstack_begin (&pfile->buffer_ob, 0, 0,
    (void *(*) (long)) xmalloc,
    (void (*) (void *)) free);
  _cpp_init_files (pfile);
  _cpp_init_hashtable (pfile, table);
  return pfile;
}
void
cpp_destroy (cpp_reader *pfile)
{
  cpp_context *context, *contextn;
  tokenrun *run, *runn;
  free (pfile->op_stack);
  while (((pfile)->buffer) != ((void *)0))
    _cpp_pop_buffer (pfile);
  if (pfile->out.base)
    free (pfile->out.base);
  if (pfile->macro_buffer)
    {
      free (pfile->macro_buffer);
      pfile->macro_buffer = ((void *)0);
      pfile->macro_buffer_len = 0;
    }
  if (pfile->deps)
    deps_free (pfile->deps);
  ( (&pfile->buffer_ob)->temp = (char *) (0) - (char *) (&pfile->buffer_ob)->chunk, (((&pfile->buffer_ob)->temp > 0 && (&pfile->buffer_ob)->temp < (&pfile->buffer_ob)->chunk_limit - (char *) (&pfile->buffer_ob)->chunk) ? (int) ((&pfile->buffer_ob)->next_free = (&pfile->buffer_ob)->object_base = (&pfile->buffer_ob)->temp + (char *) (&pfile->buffer_ob)->chunk) : (((obstack_free) ((&pfile->buffer_ob), (&pfile->buffer_ob)->temp + (char *) (&pfile->buffer_ob)->chunk), 0), 0)));
  _cpp_destroy_hashtable (pfile);
  _cpp_cleanup_files (pfile);
  _cpp_destroy_iconv (pfile);
  _cpp_free_buff (pfile->a_buff);
  _cpp_free_buff (pfile->u_buff);
  _cpp_free_buff (pfile->free_buffs);
  for (run = &pfile->base_run; run; run = runn)
    {
      runn = run->next;
      free (run->base);
      if (run != &pfile->base_run)
 free (run);
    }
  for (context = pfile->base_context.next; context; context = contextn)
    {
      contextn = context->next;
      free (context);
    }
  free (pfile);
}
struct builtin
{
  const uchar *name;
  unsigned short len;
  unsigned short value;
};
static const struct builtin builtin_array[] =
{
  { (const uchar *)"__TIME__", sizeof "__TIME__" - 1, BT_TIME },
  { (const uchar *)"__DATE__", sizeof "__DATE__" - 1, BT_DATE },
  { (const uchar *)"__FILE__", sizeof "__FILE__" - 1, BT_FILE },
  { (const uchar *)"__BASE_FILE__", sizeof "__BASE_FILE__" - 1, BT_BASE_FILE },
  { (const uchar *)"__LINE__", sizeof "__LINE__" - 1, BT_SPECLINE },
  { (const uchar *)"__INCLUDE_LEVEL__", sizeof "__INCLUDE_LEVEL__" - 1, BT_INCLUDE_LEVEL },
  { (const uchar *)"_Pragma", sizeof "_Pragma" - 1, BT_PRAGMA },
  { (const uchar *)"__STDC__", sizeof "__STDC__" - 1, BT_STDC }
};
static const struct builtin operator_array[] =
{
  { (const uchar *)"and", sizeof "and" - 1, CPP_AND_AND },
  { (const uchar *)"and_eq", sizeof "and_eq" - 1, CPP_AND_EQ },
  { (const uchar *)"bitand", sizeof "bitand" - 1, CPP_AND },
  { (const uchar *)"bitor", sizeof "bitor" - 1, CPP_OR },
  { (const uchar *)"compl", sizeof "compl" - 1, CPP_COMPL },
  { (const uchar *)"not", sizeof "not" - 1, CPP_NOT },
  { (const uchar *)"not_eq", sizeof "not_eq" - 1, CPP_NOT_EQ },
  { (const uchar *)"or", sizeof "or" - 1, CPP_OR_OR },
  { (const uchar *)"or_eq", sizeof "or_eq" - 1, CPP_OR_EQ },
  { (const uchar *)"xor", sizeof "xor" - 1, CPP_XOR },
  { (const uchar *)"xor_eq", sizeof "xor_eq" - 1, CPP_XOR_EQ }
};
static void
mark_named_operators (cpp_reader *pfile)
{
  const struct builtin *b;
  for (b = operator_array;
       b < (operator_array + (sizeof (operator_array) / sizeof ((operator_array)[0])));
       b++)
    {
      cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
      hp->flags |= (1 << 0);
      hp->is_directive = 0;
      hp->directive_index = b->value;
    }
}
void
cpp_init_builtins (cpp_reader *pfile, int hosted)
{
  const struct builtin *b;
  size_t n = (sizeof (builtin_array) / sizeof ((builtin_array)[0]));
  if (((pfile)->opts.traditional))
    n -= 2;
  for(b = builtin_array; b < builtin_array + n; b++)
    {
      cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
      hp->type = NT_MACRO;
      hp->flags |= (1 << 2) | (1 << 4);
      hp->value.builtin = b->value;
    }
  if (((pfile)->opts.cplusplus))
    _cpp_define_builtin (pfile, "__cplusplus 1");
  else if (((pfile)->opts.lang) == CLK_ASM)
    _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
  else if (((pfile)->opts.lang) == CLK_STDC94)
    _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
  else if (((pfile)->opts.c99))
    _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
  if (hosted)
    _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
  else
    _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
  if (((pfile)->opts.objc))
    _cpp_define_builtin (pfile, "__OBJC__ 1");
}
void
cpp_post_options (cpp_reader *pfile)
{
  ;
  post_options (pfile);
  if (((pfile)->opts.cplusplus) && ((pfile)->opts.operator_names))
    mark_named_operators (pfile);
}
const char *
cpp_read_main_file (cpp_reader *pfile, const char *fname)
{
  if (((pfile)->opts.deps.style) != DEPS_NONE)
    {
      if (!pfile->deps)
 pfile->deps = deps_init ();
      deps_add_default_target (pfile->deps, fname);
    }
  pfile->main_file
    = _cpp_find_file (pfile, fname, &pfile->no_search_path, 0);
  if (_cpp_find_failed (pfile->main_file))
    return ((void *)0);
  _cpp_stack_file (pfile, pfile->main_file, 0);
  if (((pfile)->opts.preprocessed))
    {
      read_original_filename (pfile);
      fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
    }
  return fname;
}
static void
read_original_filename (cpp_reader *pfile)
{
  const cpp_token *token, *token1;
  token = _cpp_lex_direct (pfile);
  if (token->type == CPP_HASH)
    {
      token1 = _cpp_lex_direct (pfile);
      _cpp_backup_tokens (pfile, 1);
      if (token1->type == CPP_NUMBER)
 {
   _cpp_handle_directive (pfile, token->flags & (1 << 0));
   read_original_directory (pfile);
   return;
 }
    }
  _cpp_backup_tokens (pfile, 1);
}
static void
read_original_directory (cpp_reader *pfile)
{
  const cpp_token *hash, *token;
  hash = _cpp_lex_direct (pfile);
  if (hash->type != CPP_HASH)
    {
      _cpp_backup_tokens (pfile, 1);
      return;
    }
  token = _cpp_lex_direct (pfile);
  if (token->type != CPP_NUMBER)
    {
      _cpp_backup_tokens (pfile, 2);
      return;
    }
  token = _cpp_lex_direct (pfile);
  if (token->type != CPP_STRING
      || ! (token->val.str.len >= 5
     && token->val.str.text[token->val.str.len-2] == '/'
     && token->val.str.text[token->val.str.len-3] == '/'))
    {
      _cpp_backup_tokens (pfile, 3);
      return;
    }
  if (pfile->cb.dir_change)
    {
      char *debugdir = C_alloca(token->val.str.len - 3);
      memcpy (debugdir, (const char *) token->val.str.text + 1,
       token->val.str.len - 4);
      debugdir[token->val.str.len - 4] = '\0';
      pfile->cb.dir_change (pfile, debugdir);
    }
}
int
cpp_finish (cpp_reader *pfile, FILE *deps_stream)
{
  if (((pfile)->opts.warn_unused_macros))
    cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, ((void *)0));
  while (pfile->buffer)
    _cpp_pop_buffer (pfile);
  if (((pfile)->opts.deps.style) != DEPS_NONE
      && deps_stream && pfile->errors == 0)
    {
      deps_write (pfile->deps, deps_stream, 72);
      if (((pfile)->opts.deps.phony_targets))
 deps_phony_targets (pfile->deps, deps_stream);
    }
  if (((pfile)->opts.print_include_names))
    _cpp_report_missing_guards (pfile);
  return pfile->errors;
}
static void
post_options (cpp_reader *pfile)
{
  if (((pfile)->opts.cplusplus))
    ((pfile)->opts.warn_traditional) = 0;
  if (((pfile)->opts.preprocessed))
    {
      pfile->state.prevent_expansion = 1;
      ((pfile)->opts.traditional) = 0;
    }
  if (((pfile)->opts.warn_trigraphs) == 2)
    ((pfile)->opts.warn_trigraphs) = !((pfile)->opts.trigraphs);
  if (((pfile)->opts.traditional))
    {
      ((pfile)->opts.cplusplus_comments) = 0;
      ((pfile)->opts.show_column) = 0;
      ((pfile)->opts.trigraphs) = 0;
      ((pfile)->opts.warn_trigraphs) = 0;
    }
}
enum spell_type
{
  SPELL_OPERATOR = 0,
  SPELL_IDENT,
  SPELL_LITERAL,
  SPELL_NONE
};
struct token_spelling
{
  enum spell_type category;
  const unsigned char *name;
};
static const unsigned char *const digraph_spellings[] =
{ (const uchar *)"%:", (const uchar *)"%:%:", (const uchar *)"<:", (const uchar *)":>", (const uchar *)"<%", (const uchar *)"%>" };
static const struct token_spelling token_spellings[N_TTYPES] = { { SPELL_OPERATOR, (const uchar *) "=" }, { SPELL_OPERATOR, (const uchar *) "!" }, { SPELL_OPERATOR, (const uchar *) ">" }, { SPELL_OPERATOR, (const uchar *) "<" }, { SPELL_OPERATOR, (const uchar *) "+" }, { SPELL_OPERATOR, (const uchar *) "-" }, { SPELL_OPERATOR, (const uchar *) "*" }, { SPELL_OPERATOR, (const uchar *) "/" }, { SPELL_OPERATOR, (const uchar *) "%" }, { SPELL_OPERATOR, (const uchar *) "&" }, { SPELL_OPERATOR, (const uchar *) "|" }, { SPELL_OPERATOR, (const uchar *) "^" }, { SPELL_OPERATOR, (const uchar *) ">>" }, { SPELL_OPERATOR, (const uchar *) "<<" }, { SPELL_OPERATOR, (const uchar *) "<?" }, { SPELL_OPERATOR, (const uchar *) ">?" }, { SPELL_OPERATOR, (const uchar *) "~" }, { SPELL_OPERATOR, (const uchar *) "&&" }, { SPELL_OPERATOR, (const uchar *) "||" }, { SPELL_OPERATOR, (const uchar *) "?" }, { SPELL_OPERATOR, (const uchar *) ":" }, { SPELL_OPERATOR, (const uchar *) "," }, { SPELL_OPERATOR, (const uchar *) "(" }, { SPELL_OPERATOR, (const uchar *) ")" }, { SPELL_NONE, (const uchar *) "CPP_EOF" }, { SPELL_OPERATOR, (const uchar *) "==" }, { SPELL_OPERATOR, (const uchar *) "!=" }, { SPELL_OPERATOR, (const uchar *) ">=" }, { SPELL_OPERATOR, (const uchar *) "<=" }, { SPELL_OPERATOR, (const uchar *) "+=" }, { SPELL_OPERATOR, (const uchar *) "-=" }, { SPELL_OPERATOR, (const uchar *) "*=" }, { SPELL_OPERATOR, (const uchar *) "/=" }, { SPELL_OPERATOR, (const uchar *) "%=" }, { SPELL_OPERATOR, (const uchar *) "&=" }, { SPELL_OPERATOR, (const uchar *) "|=" }, { SPELL_OPERATOR, (const uchar *) "^=" }, { SPELL_OPERATOR, (const uchar *) ">>=" }, { SPELL_OPERATOR, (const uchar *) "<<=" }, { SPELL_OPERATOR, (const uchar *) "<?=" }, { SPELL_OPERATOR, (const uchar *) ">?=" }, { SPELL_OPERATOR, (const uchar *) "#" }, { SPELL_OPERATOR, (const uchar *) "##" }, { SPELL_OPERATOR, (const uchar *) "[" }, { SPELL_OPERATOR, (const uchar *) "]" }, { SPELL_OPERATOR, (const uchar *) "{" }, { SPELL_OPERATOR, (const uchar *) "}" }, { SPELL_OPERATOR, (const uchar *) ";" }, { SPELL_OPERATOR, (const uchar *) "..." }, { SPELL_OPERATOR, (const uchar *) "++" }, { SPELL_OPERATOR, (const uchar *) "--" }, { SPELL_OPERATOR, (const uchar *) "->" }, { SPELL_OPERATOR, (const uchar *) "." }, { SPELL_OPERATOR, (const uchar *) "::" }, { SPELL_OPERATOR, (const uchar *) "->*" }, { SPELL_OPERATOR, (const uchar *) ".*" }, { SPELL_OPERATOR, (const uchar *) "@" }, { SPELL_IDENT, (const uchar *) "CPP_NAME" }, { SPELL_IDENT, (const uchar *) "CPP_AT_NAME" }, { SPELL_LITERAL, (const uchar *) "CPP_NUMBER" }, { SPELL_LITERAL, (const uchar *) "CPP_CHAR" }, { SPELL_LITERAL, (const uchar *) "CPP_WCHAR" }, { SPELL_LITERAL, (const uchar *) "CPP_OTHER" }, { SPELL_LITERAL, (const uchar *) "CPP_STRING" }, { SPELL_LITERAL, (const uchar *) "CPP_WSTRING" }, { SPELL_LITERAL, (const uchar *) "CPP_OBJC_STRING" }, { SPELL_LITERAL, (const uchar *) "CPP_HEADER_NAME" }, { SPELL_LITERAL, (const uchar *) "CPP_COMMENT" }, { SPELL_NONE, (const uchar *) "CPP_MACRO_ARG" }, { SPELL_NONE, (const uchar *) "CPP_PADDING" }, };
static void add_line_note (cpp_buffer *, const uchar *, unsigned int);
static int skip_line_comment (cpp_reader *);
static void skip_whitespace (cpp_reader *, cppchar_t);
static cpp_hashnode *lex_identifier (cpp_reader *, const uchar *);
static void lex_number (cpp_reader *, cpp_string *);
static unsigned char forms_identifier_p (cpp_reader *, int);
static void lex_preproc_string (cpp_reader *, cpp_token *, const uchar *);
static void save_comment (cpp_reader *, cpp_token *, const uchar *, cppchar_t);
static void create_literal (cpp_reader *, cpp_token *, const uchar *,
       unsigned int, enum cpp_ttype);
static unsigned char warn_in_comment (cpp_reader *, _cpp_line_note *);
static int name_p (cpp_reader *, const cpp_string *);
static tokenrun *next_tokenrun (tokenrun *);
static _cpp_buff *new_buff (size_t);
int
cpp_ideq (const cpp_token *token, const char *string1)
{
  if (token->type != CPP_NAME)
    return 0;
  return !ustrcmp (((&(token->val.node)->ident)->str), (const uchar *) string1);
}
static void
add_line_note (cpp_buffer *buffer, const uchar *pos, unsigned int type)
{
  if (buffer->notes_used == buffer->notes_cap)
    {
      buffer->notes_cap = buffer->notes_cap * 2 + 200;
      buffer->notes = xrealloc (buffer->notes,
    buffer->notes_cap * sizeof (_cpp_line_note));
    }
  buffer->notes[buffer->notes_used].pos = pos;
  buffer->notes[buffer->notes_used].type = type;
  buffer->notes_used++;
}
void
_cpp_clean_line (cpp_reader *pfile)
{
  cpp_buffer *buffer;
  const uchar *s;
  uchar c, *d, *p;
  buffer = pfile->buffer;
  buffer->cur_note = buffer->notes_used = 0;
  buffer->cur = buffer->line_base = buffer->next_line;
  buffer->need_line = 0;
  s = buffer->next_line - 1;
  if (!buffer->from_stage3)
    {
      for (;;)
 {
   c = *++s;
   if (c == '\n' || c == '\r')
     {
       d = (uchar *) s;
       if (s == buffer->rlimit)
  goto done;
       if (c == '\r' && s[1] == '\n')
  s++;
       if (s == buffer->rlimit)
  goto done;
       p = d;
       while (p != buffer->next_line && (_sch_istable[(p[-1]) & 0xff] & (unsigned short)(_sch_isnvsp)))
  p--;
       if (p == buffer->next_line || p[-1] != '\\')
  goto done;
       add_line_note (buffer, p - 1, p != d ? ' ' : '\\');
       d = p - 2;
       buffer->next_line = p - 1;
       break;
     }
   if (c == '?' && s[1] == '?' && _cpp_trigraph_map[s[2]])
     {
       add_line_note (buffer, s, s[2]);
       if (((pfile)->opts.trigraphs))
  {
    d = (uchar *) s;
    *d = _cpp_trigraph_map[s[2]];
    s += 2;
    break;
  }
     }
 }
      for (;;)
 {
   c = *++s;
   *++d = c;
   if (c == '\n' || c == '\r')
     {
       if (c == '\r' && s != buffer->rlimit && s[1] == '\n')
  s++;
       if (s == buffer->rlimit)
  break;
       p = d;
       while (p != buffer->next_line && (_sch_istable[(p[-1]) & 0xff] & (unsigned short)(_sch_isnvsp)))
  p--;
       if (p == buffer->next_line || p[-1] != '\\')
  break;
       add_line_note (buffer, p - 1, p != d ? ' ': '\\');
       d = p - 2;
       buffer->next_line = p - 1;
     }
   else if (c == '?' && s[1] == '?' && _cpp_trigraph_map[s[2]])
     {
       add_line_note (buffer, d, s[2]);
       if (((pfile)->opts.trigraphs))
  {
    *d = _cpp_trigraph_map[s[2]];
    s += 2;
  }
     }
 }
    }
  else
    {
      do
 s++;
      while (*s != '\n' && *s != '\r');
      d = (uchar *) s;
      if (*s == '\r' && s != buffer->rlimit && s[1] == '\n')
 s++;
    }
 done:
  *d = '\n';
  add_line_note (buffer, d + 1, '\n');
  buffer->next_line = s + 1;
}
static unsigned char
warn_in_comment (cpp_reader *pfile, _cpp_line_note *note)
{
  const uchar *p;
  if (note->type != '/')
    return 0;
  if (((pfile)->opts.trigraphs))
    return note[1].pos == note->pos;
  p = note->pos + 3;
  while ((_sch_istable[(*p) & 0xff] & (unsigned short)(_sch_isnvsp)))
    p++;
  return (*p == '\n' && p < note[1].pos);
}
void
_cpp_process_line_notes (cpp_reader *pfile, int in_comment)
{
  cpp_buffer *buffer = pfile->buffer;
  for (;;)
    {
      _cpp_line_note *note = &buffer->notes[buffer->cur_note];
      unsigned int col;
      if (note->pos > buffer->cur)
 break;
      buffer->cur_note++;
      col = ((note->pos + 1) - (buffer)->line_base);
      if (note->type == '\\' || note->type == ' ')
 {
   if (note->type == ' ' && !in_comment)
     cpp_error_with_line (pfile, 0x00, pfile->line_table->highest_line, col,
     "backslash and newline separated by space");
   if (buffer->next_line > buffer->rlimit)
     {
       cpp_error_with_line (pfile, 0x02, pfile->line_table->highest_line, col,
       "backslash-newline at end of file");
       buffer->next_line = buffer->rlimit;
     }
   buffer->line_base = note->pos;
   do { const struct line_maps *line_table = pfile->line_table; const struct line_map *map = &line_table->maps[line_table->used-1]; unsigned int line = ((((line_table->highest_line) - (map)->start_location) >> (map)->column_bits) + (map)->to_line); linemap_line_start (pfile->line_table, line + 1, 0); } while (0);
 }
      else if (_cpp_trigraph_map[note->type])
 {
   if (((pfile)->opts.warn_trigraphs)
       && (!in_comment || warn_in_comment (pfile, note)))
     {
       if (((pfile)->opts.trigraphs))
  cpp_error_with_line (pfile, 0x00, pfile->line_table->highest_line, col,
         "trigraph ??%c converted to %c",
         note->type,
         (int) _cpp_trigraph_map[note->type]);
       else
  {
    cpp_error_with_line
      (pfile, 0x00, pfile->line_table->highest_line, col,
       "trigraph ??%c ignored, use -trigraphs to enable",
       note->type);
  }
     }
 }
      else
 abort ();
    }
}
unsigned char
_cpp_skip_block_comment (cpp_reader *pfile)
{
  cpp_buffer *buffer = pfile->buffer;
  const uchar *cur = buffer->cur;
  uchar c;
  cur++;
  if (*cur == '/')
    cur++;
  for (;;)
    {
      c = *cur++;
      if (c == '/')
 {
   if (cur[-2] == '*')
     break;
   if (((pfile)->opts.warn_comments)
       && cur[0] == '*' && cur[1] != '/')
     {
       buffer->cur = cur;
       cpp_error_with_line (pfile, 0x00,
       pfile->line_table->highest_line, (((buffer)->cur) - (buffer)->line_base),
       "\"/*\" within comment");
     }
 }
      else if (c == '\n')
 {
   unsigned int cols;
   buffer->cur = cur - 1;
   _cpp_process_line_notes (pfile, 1);
   if (buffer->next_line >= buffer->rlimit)
     return 1;
   _cpp_clean_line (pfile);
   cols = buffer->next_line - buffer->line_base;
   do { const struct line_maps *line_table = pfile->line_table; const struct line_map *map = &line_table->maps[line_table->used-1]; unsigned int line = ((((line_table->highest_line) - (map)->start_location) >> (map)->column_bits) + (map)->to_line); linemap_line_start (pfile->line_table, line + 1, cols); } while (0);
   cur = buffer->cur;
 }
    }
  buffer->cur = cur;
  _cpp_process_line_notes (pfile, 1);
  return 0;
}
static int
skip_line_comment (cpp_reader *pfile)
{
  cpp_buffer *buffer = pfile->buffer;
  unsigned int orig_line = pfile->line_table->highest_line;
  while (*buffer->cur != '\n')
    buffer->cur++;
  _cpp_process_line_notes (pfile, 1);
  return orig_line != pfile->line_table->highest_line;
}
static void
skip_whitespace (cpp_reader *pfile, cppchar_t c)
{
  cpp_buffer *buffer = pfile->buffer;
  unsigned char saw_NUL = 0;
  do
    {
      if (c == ' ' || c == '\t')
 ;
      else if (c == '\0')
 saw_NUL = 1;
      else if (pfile->state.in_directive && ((pfile)->opts.pedantic))
 cpp_error_with_line (pfile, 0x02, pfile->line_table->highest_line,
        (((buffer)->cur) - (buffer)->line_base),
        "%s in preprocessing directive",
        c == '\f' ? "form feed" : "vertical tab");
      c = *buffer->cur++;
    }
  while ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isnvsp)));
  if (saw_NUL)
    cpp_error (pfile, 0x00, "null character(s) ignored");
  buffer->cur--;
}
static int
name_p (cpp_reader *pfile, const cpp_string *string1)
{
  unsigned int i;
  for (i = 0; i < string1->len; i++)
    if (!((_sch_istable[(string1->text[i]) & 0xff] & (unsigned short)(_sch_isidnum)) || ((string1->text[i]) == '$' && ((pfile)->opts.dollars_in_ident))))
      return 0;
  return 1;
}
static unsigned char
forms_identifier_p (cpp_reader *pfile, int first)
{
  cpp_buffer *buffer = pfile->buffer;
  if (*buffer->cur == '$')
    {
      if (!((pfile)->opts.dollars_in_ident))
 return 0;
      buffer->cur++;
      if (((pfile)->opts.warn_dollars) && !pfile->state.skipping)
 {
   ((pfile)->opts.warn_dollars) = 0;
   cpp_error (pfile, 0x02, "'$' in identifier or number");
 }
      return 1;
    }
  if (0 && *buffer->cur == '\\'
      && (buffer->cur[1] == 'u' || buffer->cur[1] == 'U'))
    {
      buffer->cur += 2;
      if (_cpp_valid_ucn (pfile, &buffer->cur, buffer->rlimit, 1 + !first))
 return 1;
      buffer->cur -= 2;
    }
  return 0;
}
static cpp_hashnode *
lex_identifier (cpp_reader *pfile, const uchar *base)
{
  cpp_hashnode *result;
  const uchar *cur, *limit;
  unsigned int len;
  unsigned int hash = ((0) * 67 + ((*base) - 113));;
  cur = pfile->buffer->cur;
  for (;;)
    {
      while ((_sch_istable[(*cur) & 0xff] & (unsigned short)(_sch_isidnum)))
 {
   hash = ((hash) * 67 + ((*cur) - 113));;
   cur++;
 }
      pfile->buffer->cur = cur;
      if (!forms_identifier_p (pfile, 0))
 break;
      limit = pfile->buffer->cur;
      while (cur < limit)
 {
   hash = ((hash) * 67 + ((*cur) - 113));;
   cur++;
 }
    }
  len = cur - base;
  hash = ((hash) + (len));
  result = (cpp_hashnode *)
    ht_lookup_with_hash (pfile->hash_table1, base, len, hash, HT_ALLOC);
  if (((result->flags & (1 << 3)) && !pfile->state.skipping)
                                )
    {
      if ((result->flags & (1 << 1)) && !pfile->state.poisoned_ok)
 cpp_error (pfile, 0x03, "attempt to use poisoned \"%s\"",
     ((&(result)->ident)->str));
      if (result == pfile->spec_nodes.n__VA_ARGS__
   && !pfile->state.va_args_ok)
 cpp_error (pfile, 0x02,
     "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro");
    }
  return result;
}
static void
lex_number (cpp_reader *pfile, cpp_string *number)
{
  const uchar *cur;
  const uchar *base;
  uchar *dest;
  base = pfile->buffer->cur - 1;
  do
    {
      cur = pfile->buffer->cur;
      while ((_sch_istable[(*cur) & 0xff] & (unsigned short)(_sch_isidnum)) || *cur == '.' || (((*cur) == '+' || (*cur) == '-') && ((cur[-1]) == 'e' || (cur[-1]) == 'E' || (((cur[-1]) == 'p' || (cur[-1]) == 'P') && ((pfile)->opts.extended_numbers)))))
 cur++;
      pfile->buffer->cur = cur;
    }
  while (forms_identifier_p (pfile, 0));
  number->len = cur - base;
  dest = _cpp_unaligned_alloc (pfile, number->len + 1);
  memcpy (dest, base, number->len);
  dest[number->len] = '\0';
  number->text = dest;
}
static void
create_literal (cpp_reader *pfile, cpp_token *token, const uchar *base,
  unsigned int len, enum cpp_ttype type)
{
  uchar *dest = _cpp_unaligned_alloc (pfile, len + 1);
  memcpy (dest, base, len);
  dest[len] = '\0';
  token->type = type;
  token->val.str.len = len;
  token->val.str.text = dest;
}
static void
lex_preproc_string (cpp_reader *pfile, cpp_token *token, const uchar *base)
{
  unsigned char saw_NUL = 0;
  const uchar *cur;
  cppchar_t terminator;
  enum cpp_ttype type;
  cur = base;
  terminator = *cur++;
  if (terminator == 'L')
    terminator = *cur++;
  if (terminator == '\"')
    type = *base == 'L' ? CPP_WSTRING: CPP_STRING;
  else if (terminator == '\'')
    type = *base == 'L' ? CPP_WCHAR: CPP_CHAR;
  else
    terminator = '>', type = CPP_HEADER_NAME;
  for (;;)
    {
      cppchar_t c = *cur++;
      if (c == '\\' && !pfile->state.angled_headers && *cur != '\n')
 cur++;
      else if (c == terminator)
 break;
      else if (c == '\n')
 {
   cur--;
   type = CPP_OTHER;
   break;
 }
      else if (c == '\0')
 saw_NUL = 1;
    }
  if (saw_NUL && !pfile->state.skipping)
    cpp_error (pfile, 0x00,
        "null character(s) preserved in literal");
  pfile->buffer->cur = cur;
  create_literal (pfile, token, base, cur - base, type);
}
static void
save_comment (cpp_reader *pfile, cpp_token *token, const unsigned char *from,
       cppchar_t type)
{
  unsigned char *buffer;
  unsigned int len, clen;
  len = pfile->buffer->cur - from + 1;
  if ((_sch_istable[(pfile->buffer->cur[-1]) & 0xff] & (unsigned short)(_sch_isvsp)))
    len--;
  clen = (pfile->state.in_directive && type == '/') ? len + 2 : len;
  buffer = _cpp_unaligned_alloc (pfile, clen);
  token->type = CPP_COMMENT;
  token->val.str.len = clen;
  token->val.str.text = buffer;
  buffer[0] = '/';
  memcpy (buffer + 1, from, len - 1);
  if (pfile->state.in_directive && type == '/')
    {
      buffer[1] = '*';
      buffer[clen - 2] = '*';
      buffer[clen - 1] = '/';
    }
}
void
_cpp_init_tokenrun (tokenrun *run, unsigned int count)
{
  run->base = (cpp_token *) xmalloc (sizeof(cpp_token) * (count));
  run->limit = run->base + count;
  run->next = ((void *)0);
}
static tokenrun *
next_tokenrun (tokenrun *run)
{
  if (run->next == ((void *)0))
    {
      run->next = (tokenrun *) xmalloc (sizeof(tokenrun));
      run->next->prev = run;
      _cpp_init_tokenrun (run->next, 250);
    }
  return run->next;
}
cpp_token *
_cpp_temp_token (cpp_reader *pfile)
{
  cpp_token *old, *result;
  old = pfile->cur_token - 1;
  if (pfile->cur_token == pfile->cur_run->limit)
    {
      pfile->cur_run = next_tokenrun (pfile->cur_run);
      pfile->cur_token = pfile->cur_run->base;
    }
  result = pfile->cur_token++;
  result->src_loc = old->src_loc;
  return result;
}
const cpp_token *
_cpp_lex_token (cpp_reader *pfile)
{
  cpp_token *result;
  for (;;)
    {
      if (pfile->cur_token == pfile->cur_run->limit)
 {
   pfile->cur_run = next_tokenrun (pfile->cur_run);
   pfile->cur_token = pfile->cur_run->base;
 }
      if (pfile->lookaheads)
 {
   pfile->lookaheads--;
   result = pfile->cur_token++;
 }
      else
 result = _cpp_lex_direct (pfile);
      if (result->flags & (1 << 6))
 {
   if (result->type == CPP_HASH
       && pfile->state.parsing_args != 1
       && _cpp_handle_directive (pfile, result->flags & (1 << 0)))
     continue;
   if (pfile->cb.line_change && !pfile->state.skipping)
     pfile->cb.line_change (pfile, result, pfile->state.parsing_args);
 }
      if (pfile->state.in_directive)
 break;
      pfile->mi_valid = 0;
      if (!pfile->state.skipping || result->type == CPP_EOF)
 break;
    }
  return result;
}
unsigned char
_cpp_get_fresh_line (cpp_reader *pfile)
{
  int return_at_eof;
  if (pfile->state.in_directive)
    return 0;
  for (;;)
    {
      cpp_buffer *buffer = pfile->buffer;
      if (!buffer->need_line)
 return 1;
      if (buffer->next_line < buffer->rlimit)
 {
   _cpp_clean_line (pfile);
   return 1;
 }
      if (pfile->state.parsing_args)
 return 0;
      if (buffer->buf != buffer->rlimit
   && buffer->next_line > buffer->rlimit
   && !buffer->from_stage3)
 {
   buffer->next_line = buffer->rlimit;
   cpp_error_with_line (pfile, 0x02, pfile->line_table->highest_line,
          ((buffer->cur) - (buffer)->line_base),
          "no newline at end of file");
 }
      return_at_eof = buffer->return_at_eof;
      _cpp_pop_buffer (pfile);
      if (pfile->buffer == ((void *)0) || return_at_eof)
 return 0;
    }
}
cpp_token *
_cpp_lex_direct (cpp_reader *pfile)
{
  cppchar_t c;
  cpp_buffer *buffer;
  const unsigned char *comment_start;
  cpp_token *result = pfile->cur_token++;
 fresh_line:
  result->flags = 0;
  buffer = pfile->buffer;
  if (buffer->need_line)
    {
      if (!_cpp_get_fresh_line (pfile))
 {
   result->type = CPP_EOF;
   if (!pfile->state.in_directive)
     {
       result->src_loc = pfile->line_table->highest_line;
       result->flags = (1 << 6);
     }
   return result;
 }
      if (!pfile->keep_tokens)
 {
   pfile->cur_run = &pfile->base_run;
   result = pfile->base_run.base;
   pfile->cur_token = result + 1;
 }
      result->flags = (1 << 6);
      if (pfile->state.parsing_args == 2)
 result->flags |= (1 << 0);
    }
  buffer = pfile->buffer;
 update_tokens_line:
  result->src_loc = pfile->line_table->highest_line;
 skipped_white:
  if (buffer->cur >= buffer->notes[buffer->cur_note].pos
      && !pfile->overlaid_buffer)
    {
      _cpp_process_line_notes (pfile, 0);
      result->src_loc = pfile->line_table->highest_line;
    }
  c = *buffer->cur++;
  { unsigned int to_column = (((buffer->cur) - (buffer)->line_base)); struct line_maps *set = (pfile->line_table); if ((to_column >= set->max_column_hint)) (result->src_loc) = linemap_position_for_column (set, to_column); else { source_location r = set->highest_line; r = r + to_column; if (r >= set->highest_location) set->highest_location = r; (result->src_loc) = r; }}
                                               ;
  switch (c)
    {
    case ' ': case '\t': case '\f': case '\v': case '\0':
      result->flags |= (1 << 0);
      skip_whitespace (pfile, c);
      goto skipped_white;
    case '\n':
      if (buffer->cur < buffer->rlimit)
 do { const struct line_maps *line_table = pfile->line_table; const struct line_map *map = &line_table->maps[line_table->used-1]; unsigned int line = ((((line_table->highest_line) - (map)->start_location) >> (map)->column_bits) + (map)->to_line); linemap_line_start (pfile->line_table, line + 1, 0); } while (0);
      buffer->need_line = 1;
      goto fresh_line;
    case '0': case '1': case '2': case '3': case '4':
    case '5': case '6': case '7': case '8': case '9':
      result->type = CPP_NUMBER;
      lex_number (pfile, &result->val.str);
      break;
    case 'L':
      if (*buffer->cur == '\'' || *buffer->cur == '"')
 {
   lex_preproc_string (pfile, result, buffer->cur - 1);
   break;
 }
    case '_':
    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
    case 'y': case 'z':
    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
    case 'G': case 'H': case 'I': case 'J': case 'K':
    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
    case 'Y': case 'Z':
      result->type = CPP_NAME;
      result->val.node = lex_identifier (pfile, buffer->cur - 1);
      if (result->val.node->flags & (1 << 0))
 {
   result->flags |= (1 << 4);
   result->type = result->val.node->directive_index;
 }
      break;
    case '\'':
    case '"':
      lex_preproc_string (pfile, result, buffer->cur - 1);
      break;
    case '/':
      comment_start = buffer->cur;
      c = *buffer->cur;
      if (c == '*')
 {
   if (_cpp_skip_block_comment (pfile))
     cpp_error (pfile, 0x03, "unterminated comment");
 }
      else if (c == '/' && (((pfile)->opts.cplusplus_comments)
       || cpp_in_system_header (pfile)))
 {
   if (((pfile)->opts.lang) == CLK_GNUC89 && ((pfile)->opts.pedantic)
       && ! buffer->warned_cplusplus_comments)
     {
       cpp_error (pfile, 0x02,
    "C++ style comments are not allowed in ISO C90");
       cpp_error (pfile, 0x02,
    "(this will be reported only once per input file)");
       buffer->warned_cplusplus_comments = 1;
     }
   if (skip_line_comment (pfile) && ((pfile)->opts.warn_comments))
     cpp_error (pfile, 0x00, "multi-line comment");
 }
      else if (c == '=')
 {
   buffer->cur++;
   result->type = CPP_DIV_EQ;
   break;
 }
      else
 {
   result->type = CPP_DIV;
   break;
 }
      if (!pfile->state.save_comments)
 {
   result->flags |= (1 << 0);
   goto update_tokens_line;
 }
      save_comment (pfile, result, comment_start, c);
      break;
    case '<':
      if (pfile->state.angled_headers)
 {
   lex_preproc_string (pfile, result, buffer->cur - 1);
   break;
 }
      result->type = CPP_LESS;
      if (*buffer->cur == '=')
 buffer->cur++, result->type = CPP_LESS_EQ;
      else if (*buffer->cur == '<')
 {
   buffer->cur++;
   do { result->type = CPP_LSHIFT; if (*buffer->cur == '=') buffer->cur++, result->type = CPP_LSHIFT_EQ; } while (0);
 }
      else if (*buffer->cur == '?' && ((pfile)->opts.cplusplus))
 {
   buffer->cur++;
   do { result->type = CPP_MIN; if (*buffer->cur == '=') buffer->cur++, result->type = CPP_MIN_EQ; } while (0);
 }
      else if (((pfile)->opts.digraphs))
 {
   if (*buffer->cur == ':')
     {
       buffer->cur++;
       result->flags |= (1 << 1);
       result->type = CPP_OPEN_SQUARE;
     }
   else if (*buffer->cur == '%')
     {
       buffer->cur++;
       result->flags |= (1 << 1);
       result->type = CPP_OPEN_BRACE;
     }
 }
      break;
    case '>':
      result->type = CPP_GREATER;
      if (*buffer->cur == '=')
 buffer->cur++, result->type = CPP_GREATER_EQ;
      else if (*buffer->cur == '>')
 {
   buffer->cur++;
   do { result->type = CPP_RSHIFT; if (*buffer->cur == '=') buffer->cur++, result->type = CPP_RSHIFT_EQ; } while (0);
 }
      else if (*buffer->cur == '?' && ((pfile)->opts.cplusplus))
 {
   buffer->cur++;
   do { result->type = CPP_MAX; if (*buffer->cur == '=') buffer->cur++, result->type = CPP_MAX_EQ; } while (0);
 }
      break;
    case '%':
      result->type = CPP_MOD;
      if (*buffer->cur == '=')
 buffer->cur++, result->type = CPP_MOD_EQ;
      else if (((pfile)->opts.digraphs))
 {
   if (*buffer->cur == ':')
     {
       buffer->cur++;
       result->flags |= (1 << 1);
       result->type = CPP_HASH;
       if (*buffer->cur == '%' && buffer->cur[1] == ':')
  buffer->cur += 2, result->type = CPP_PASTE;
     }
   else if (*buffer->cur == '>')
     {
       buffer->cur++;
       result->flags |= (1 << 1);
       result->type = CPP_CLOSE_BRACE;
     }
 }
      break;
    case '.':
      result->type = CPP_DOT;
      if ((_sch_istable[(*buffer->cur) & 0xff] & (unsigned short)(_sch_isdigit)))
 {
   result->type = CPP_NUMBER;
   lex_number (pfile, &result->val.str);
 }
      else if (*buffer->cur == '.' && buffer->cur[1] == '.')
 buffer->cur += 2, result->type = CPP_ELLIPSIS;
      else if (*buffer->cur == '*' && ((pfile)->opts.cplusplus))
 buffer->cur++, result->type = CPP_DOT_STAR;
      break;
    case '+':
      result->type = CPP_PLUS;
      if (*buffer->cur == '+')
 buffer->cur++, result->type = CPP_PLUS_PLUS;
      else if (*buffer->cur == '=')
 buffer->cur++, result->type = CPP_PLUS_EQ;
      break;
    case '-':
      result->type = CPP_MINUS;
      if (*buffer->cur == '>')
 {
   buffer->cur++;
   result->type = CPP_DEREF;
   if (*buffer->cur == '*' && ((pfile)->opts.cplusplus))
     buffer->cur++, result->type = CPP_DEREF_STAR;
 }
      else if (*buffer->cur == '-')
 buffer->cur++, result->type = CPP_MINUS_MINUS;
      else if (*buffer->cur == '=')
 buffer->cur++, result->type = CPP_MINUS_EQ;
      break;
    case '&':
      result->type = CPP_AND;
      if (*buffer->cur == '&')
 buffer->cur++, result->type = CPP_AND_AND;
      else if (*buffer->cur == '=')
 buffer->cur++, result->type = CPP_AND_EQ;
      break;
    case '|':
      result->type = CPP_OR;
      if (*buffer->cur == '|')
 buffer->cur++, result->type = CPP_OR_OR;
      else if (*buffer->cur == '=')
 buffer->cur++, result->type = CPP_OR_EQ;
      break;
    case ':':
      result->type = CPP_COLON;
      if (*buffer->cur == ':' && ((pfile)->opts.cplusplus))
 buffer->cur++, result->type = CPP_SCOPE;
      else if (*buffer->cur == '>' && ((pfile)->opts.digraphs))
 {
   buffer->cur++;
   result->flags |= (1 << 1);
   result->type = CPP_CLOSE_SQUARE;
 }
      break;
    case '*': do { result->type = CPP_MULT; if (*buffer->cur == '=') buffer->cur++, result->type = CPP_MULT_EQ; } while (0); break;
    case '=': do { result->type = CPP_EQ; if (*buffer->cur == '=') buffer->cur++, result->type = CPP_EQ_EQ; } while (0); break;
    case '!': do { result->type = CPP_NOT; if (*buffer->cur == '=') buffer->cur++, result->type = CPP_NOT_EQ; } while (0); break;
    case '^': do { result->type = CPP_XOR; if (*buffer->cur == '=') buffer->cur++, result->type = CPP_XOR_EQ; } while (0); break;
    case '#': do { result->type = CPP_HASH; if (*buffer->cur == '#') buffer->cur++, result->type = CPP_PASTE; } while (0); break;
    case '?': result->type = CPP_QUERY; break;
    case '~': result->type = CPP_COMPL; break;
    case ',': result->type = CPP_COMMA; break;
    case '(': result->type = CPP_OPEN_PAREN; break;
    case ')': result->type = CPP_CLOSE_PAREN; break;
    case '[': result->type = CPP_OPEN_SQUARE; break;
    case ']': result->type = CPP_CLOSE_SQUARE; break;
    case '{': result->type = CPP_OPEN_BRACE; break;
    case '}': result->type = CPP_CLOSE_BRACE; break;
    case ';': result->type = CPP_SEMICOLON; break;
    case '@': result->type = CPP_ATSIGN; break;
    case '$':
    case '\\':
      {
 const uchar *base = --buffer->cur;
 if (forms_identifier_p (pfile, 1))
   {
     result->type = CPP_NAME;
     result->val.node = lex_identifier (pfile, base);
     break;
   }
 buffer->cur++;
      }
    default:
      create_literal (pfile, result, buffer->cur - 1, 1, CPP_OTHER);
      break;
    }
  return result;
}
unsigned int
cpp_token_len (const cpp_token *token)
{
  unsigned int len;
  switch ((token_spellings[(token)->type].category))
    {
    default: len = 4; break;
    case SPELL_LITERAL: len = token->val.str.len; break;
    case SPELL_IDENT: len = ((&(token->val.node)->ident)->len); break;
    }
  return len;
}
unsigned char *
cpp_spell_token (cpp_reader *pfile, const cpp_token *token,
   unsigned char *buffer)
{
  switch ((token_spellings[(token)->type].category))
    {
    case SPELL_OPERATOR:
      {
 const unsigned char *spelling;
 unsigned char c;
 if (token->flags & (1 << 1))
   spelling
     = digraph_spellings[(int) token->type - (int) CPP_HASH];
 else if (token->flags & (1 << 4))
   goto spell_ident;
 else
   spelling = (token_spellings[(token)->type].name);
 while ((c = *spelling++) != '\0')
   *buffer++ = c;
      }
      break;
    spell_ident:
    case SPELL_IDENT:
      memcpy (buffer, ((&(token->val.node)->ident)->str), ((&(token->val.node)->ident)->len));
      buffer += ((&(token->val.node)->ident)->len);
      break;
    case SPELL_LITERAL:
      memcpy (buffer, token->val.str.text, token->val.str.len);
      buffer += token->val.str.len;
      break;
    case SPELL_NONE:
      cpp_error (pfile, 0x04,
   "unspellable token %s", (token_spellings[(token)->type].name));
      break;
    }
  return buffer;
}
unsigned char *
cpp_token_as_text (cpp_reader *pfile, const cpp_token *token)
{
  unsigned int len = cpp_token_len (token) + 1;
  unsigned char *start = _cpp_unaligned_alloc (pfile, len), *end;
  end = cpp_spell_token (pfile, token, start);
  end[0] = '\0';
  return start;
}
const char *
cpp_type2name (enum cpp_ttype type)
{
  return (const char *) token_spellings[type].name;
}
void
cpp_output_token (const cpp_token *token, FILE *fp)
{
  switch ((token_spellings[(token)->type].category))
    {
    case SPELL_OPERATOR:
      {
 const unsigned char *spelling;
 int c;
 if (token->flags & (1 << 1))
   spelling
     = digraph_spellings[(int) token->type - (int) CPP_HASH];
 else if (token->flags & (1 << 4))
   goto spell_ident;
 else
   spelling = (token_spellings[(token)->type].name);
 c = *spelling;
 do
   putc_unlocked (c, fp);
 while ((c = *++spelling) != '\0');
      }
      break;
    spell_ident:
    case SPELL_IDENT:
      fwrite_unlocked (((&(token->val.node)->ident)->str), 1, ((&(token->val.node)->ident)->len), fp);
    break;
    case SPELL_LITERAL:
      fwrite_unlocked (token->val.str.text, 1, token->val.str.len, fp);
      break;
    case SPELL_NONE:
      break;
    }
}
int
_cpp_equiv_tokens (const cpp_token *a, const cpp_token *b)
{
  if (a->type == b->type && a->flags == b->flags)
    switch ((token_spellings[(a)->type].category))
      {
      default:
      case SPELL_OPERATOR:
 return 1;
      case SPELL_NONE:
 return (a->type != CPP_MACRO_ARG || a->val.arg_no == b->val.arg_no);
      case SPELL_IDENT:
 return a->val.node == b->val.node;
      case SPELL_LITERAL:
 return (a->val.str.len == b->val.str.len
  && !memcmp (a->val.str.text, b->val.str.text,
       a->val.str.len));
      }
  return 0;
}
int
cpp_avoid_paste (cpp_reader *pfile, const cpp_token *token1,
   const cpp_token *token2)
{
  enum cpp_ttype a = token1->type, b = token2->type;
  cppchar_t c;
  if (token1->flags & (1 << 4))
    a = CPP_NAME;
  if (token2->flags & (1 << 4))
    b = CPP_NAME;
  c = (-1);
  if (token2->flags & (1 << 1))
    c = digraph_spellings[(int) b - (int) CPP_HASH][0];
  else if (token_spellings[b].category == SPELL_OPERATOR)
    c = token_spellings[b].name[0];
  if ((int) a <= (int) CPP_MAX && c == '=')
    return 1;
  switch (a)
    {
    case CPP_GREATER: return c == '>' || c == '?';
    case CPP_LESS: return c == '<' || c == '?' || c == '%' || c == ':';
    case CPP_PLUS: return c == '+';
    case CPP_MINUS: return c == '-' || c == '>';
    case CPP_DIV: return c == '/' || c == '*';
    case CPP_MOD: return c == ':' || c == '>';
    case CPP_AND: return c == '&';
    case CPP_OR: return c == '|';
    case CPP_COLON: return c == ':' || c == '>';
    case CPP_DEREF: return c == '*';
    case CPP_DOT: return c == '.' || c == '%' || b == CPP_NUMBER;
    case CPP_HASH: return c == '#' || c == '%';
    case CPP_NAME: return ((b == CPP_NUMBER
     && name_p (pfile, &token2->val.str))
    || b == CPP_NAME
    || b == CPP_CHAR || b == CPP_STRING);
    case CPP_NUMBER: return (b == CPP_NUMBER || b == CPP_NAME
    || c == '.' || c == '+' || c == '-');
    case CPP_OTHER: return ((token1->val.str.text[0] == '\\'
     && b == CPP_NAME)
    || (((pfile)->opts.objc)
        && token1->val.str.text[0] == '@'
        && (b == CPP_NAME || b == CPP_STRING)));
    default: break;
    }
  return 0;
}
void
cpp_output_line (cpp_reader *pfile, FILE *fp)
{
  const cpp_token *token;
  token = cpp_get_token (pfile);
  while (token->type != CPP_EOF)
    {
      cpp_output_token (token, fp);
      token = cpp_get_token (pfile);
      if (token->flags & (1 << 0))
 putc_unlocked (' ', fp);
    }
  putc_unlocked ('\n', fp);
}
static _cpp_buff *
new_buff (size_t len)
{
  _cpp_buff *result;
  unsigned char *base;
  if (len < 8000)
    len = 8000;
  len = (((len) + ((__builtin_offsetof (dummy, u)) - 1)) & ~((__builtin_offsetof (dummy, u)) - 1));
  base = xmalloc (len + sizeof (_cpp_buff));
  result = (_cpp_buff *) (base + len);
  result->base = base;
  result->cur = base;
  result->limit = base + len;
  result->next = ((void *)0);
  return result;
}
void
_cpp_release_buff (cpp_reader *pfile, _cpp_buff *buff)
{
  _cpp_buff *end = buff;
  while (end->next)
    end = end->next;
  end->next = pfile->free_buffs;
  pfile->free_buffs = buff;
}
_cpp_buff *
_cpp_get_buff (cpp_reader *pfile, size_t min_size)
{
  _cpp_buff *result, **p;
  for (p = &pfile->free_buffs;; p = &(*p)->next)
    {
      size_t size;
      if (*p == ((void *)0))
 return new_buff (min_size);
      result = *p;
      size = result->limit - result->base;
      if (size >= min_size && size <= (8000 + (min_size) * 3 / 2))
 break;
    }
  *p = result->next;
  result->next = ((void *)0);
  result->cur = result->base;
  return result;
}
_cpp_buff *
_cpp_append_extend_buff (cpp_reader *pfile, _cpp_buff *buff, size_t min_extra)
{
  size_t size = (min_extra + ((buff)->limit - (buff)->cur) * 2);
  _cpp_buff *new_buff = _cpp_get_buff (pfile, size);
  buff->next = new_buff;
  memcpy (new_buff->base, buff->cur, (size_t) ((buff)->limit - (buff)->cur));
  return new_buff;
}
void
_cpp_extend_buff (cpp_reader *pfile, _cpp_buff **pbuff, size_t min_extra)
{
  _cpp_buff *new_buff, *old_buff = *pbuff;
  size_t size = (min_extra + ((old_buff)->limit - (old_buff)->cur) * 2);
  new_buff = _cpp_get_buff (pfile, size);
  memcpy (new_buff->base, old_buff->cur, (size_t) ((old_buff)->limit - (old_buff)->cur));
  new_buff->next = old_buff;
  *pbuff = new_buff;
}
void
_cpp_free_buff (_cpp_buff *buff)
{
  _cpp_buff *next;
  for (; buff; buff = next)
    {
      next = buff->next;
      free (buff->base);
    }
}
unsigned char *
_cpp_unaligned_alloc (cpp_reader *pfile, size_t len)
{
  _cpp_buff *buff = pfile->u_buff;
  unsigned char *result = buff->cur;
  if (len > (size_t) (buff->limit - result))
    {
      buff = _cpp_get_buff (pfile, len);
      buff->next = pfile->u_buff;
      pfile->u_buff = buff;
      result = buff->cur;
    }
  buff->cur = result + len;
  return result;
}
unsigned char *
_cpp_aligned_alloc (cpp_reader *pfile, size_t len)
{
  _cpp_buff *buff = pfile->a_buff;
  unsigned char *result = buff->cur;
  if (len > (size_t) (buff->limit - result))
    {
      buff = _cpp_get_buff (pfile, len);
      buff->next = pfile->a_buff;
      pfile->a_buff = buff;
      result = buff->cur;
    }
  buff->cur = result + len;
  return result;
}
enum cpp_token_fld_kind
cpp_token_val_index (cpp_token *tok)
{
  switch ((token_spellings[(tok)->type].category))
    {
    case SPELL_IDENT:
      return CPP_TOKEN_FLD_NODE;
    case SPELL_LITERAL:
      return CPP_TOKEN_FLD_STR;
    case SPELL_NONE:
      if (tok->type == CPP_MACRO_ARG)
 return CPP_TOKEN_FLD_ARG_NO;
      else if (tok->type == CPP_PADDING)
 return CPP_TOKEN_FLD_SOURCE;
    default:
      return CPP_TOKEN_FLD_NONE;
    }
}
static void trace_include (const struct line_maps *, const struct line_map *);
void
linemap_init (struct line_maps *set)
{
  set->maps = ((void *)0);
  set->allocated = 0;
  set->used = 0;
  set->last_listed = -1;
  set->trace_includes = 0;
  set->depth = 0;
  set->cache = 0;
  set->highest_location = 0;
  set->highest_line = 0;
  set->max_column_hint = 0;
}
void
linemap_check_files_exited (struct line_maps *set)
{
  struct line_map *map;
  for (map = &set->maps[set->used - 1]; ! ((map)->included_from < 0);
       map = (&(set)->maps[(map)->included_from]))
    fprintf (stderr, "line-map.c: file \"%s\" entered but not left\n",
      map->to_file);
}
void
linemap_free (struct line_maps *set)
{
  if (set->maps)
    {
      linemap_check_files_exited (set);
      free (set->maps);
    }
}
const struct line_map *
linemap_add (struct line_maps *set, enum lc_reason reason,
      unsigned int sysp, const char *to_file, unsigned int to_line)
{
  struct line_map *map;
  source_location start_location = set->highest_location + 1;
  if (set->used && start_location < set->maps[set->used - 1].start_location)
    abort ();
  if (set->used == set->allocated)
    {
      set->allocated = 2 * set->allocated + 256;
      set->maps = xrealloc (set->maps, set->allocated * sizeof (struct line_map));
    }
  map = &set->maps[set->used];
  if (to_file && *to_file == '\0')
    to_file = "<stdin>";
  if (set->depth == 0)
    reason = LC_ENTER;
  else if (reason == LC_LEAVE)
    {
      struct line_map *from;
      unsigned char error;
      if (((map - 1)->included_from < 0))
 {
   if (to_file == ((void *)0))
     {
       set->depth--;
       return ((void *)0);
     }
   error = 1;
          reason = LC_RENAME;
          from = map - 1;
 }
      else
 {
   from = (&(set)->maps[(map - 1)->included_from]);
   error = to_file && strcmp (from->to_file, to_file);
 }
      if (error)
 fprintf (stderr, "line-map.c: file \"%s\" left but not entered\n",
   to_file);
      if (error || to_file == ((void *)0))
 {
   to_file = from->to_file;
   to_line = ((((from[1].start_location) - (from)->start_location) >> (from)->column_bits) + (from)->to_line);
   sysp = from->sysp;
 }
    }
  map->reason = reason;
  map->sysp = sysp;
  map->start_location = start_location;
  map->to_file = to_file;
  map->to_line = to_line;
  set->cache = set->used++;
  map->column_bits = 0;
  set->highest_location = start_location;
  set->highest_line = start_location;
  set->max_column_hint = 0;
  if (reason == LC_ENTER)
    {
      map->included_from = set->depth == 0 ? -1 : (int) (set->used - 2);
      set->depth++;
      if (set->trace_includes)
 trace_include (set, map);
    }
  else if (reason == LC_RENAME)
    map->included_from = map[-1].included_from;
  else if (reason == LC_LEAVE)
    {
      set->depth--;
      map->included_from = (&(set)->maps[(map - 1)->included_from])->included_from;
    }
  return map;
}
source_location
linemap_line_start (struct line_maps *set, unsigned int to_line,
      unsigned int max_column_hint)
{
  struct line_map *map = &set->maps[set->used - 1];
  source_location highest = set->highest_location;
  source_location r;
  unsigned int last_line = ((((set->highest_line) - (map)->start_location) >> (map)->column_bits) + (map)->to_line);
  int line_delta = to_line - last_line;
  unsigned char add_map = 0;
  if (line_delta < 0
      || (line_delta > 10 && line_delta * map->column_bits > 1000)
      || (max_column_hint >= (1U << map->column_bits))
      || (max_column_hint <= 80 && map->column_bits >= 10))
    {
      add_map = 1;
    }
  else
    max_column_hint = set->max_column_hint;
  if (add_map)
    {
      int column_bits;
      if (max_column_hint > 100000 || highest > 0xC0000000)
 {
   max_column_hint = 0;
   if (highest >0xF0000000)
     return 0;
   column_bits = 0;
 }
      else
 {
   column_bits = 7;
   while (max_column_hint >= (1U << column_bits))
     column_bits++;
   max_column_hint = 1U << column_bits;
 }
      if (line_delta < 0
   || last_line != map->to_line
   || (((highest) - (map)->start_location) & ((1 << (map)->column_bits) - 1)) >= (1U << column_bits))
 map = (struct line_map*) linemap_add (set, LC_RENAME, map->sysp,
          map->to_file, to_line);
      map->column_bits = column_bits;
      r = map->start_location;
    }
  else
    r = highest - (((highest) - (map)->start_location) & ((1 << (map)->column_bits) - 1))
      + (line_delta << map->column_bits);
  set->highest_line = r;
  if (r > set->highest_location)
    set->highest_location = r;
  set->max_column_hint = max_column_hint;
  return r;
}
source_location
linemap_position_for_column (struct line_maps *set, unsigned int to_column)
{
  source_location r = set->highest_line;
  if (to_column >= set->max_column_hint)
    {
      if (r >= 0xC000000 || to_column > 100000)
 {
   return r;
 }
      else
 {
   struct line_map *map = &set->maps[set->used - 1];
   r = linemap_line_start (set, ((((r) - (map)->start_location) >> (map)->column_bits) + (map)->to_line), to_column + 50);
 }
    }
  r = r + to_column;
  if (r >= set->highest_location)
    set->highest_location = r;
  return r;
}
const struct line_map *
linemap_lookup (struct line_maps *set, source_location line)
{
  unsigned int md, mn, mx;
  const struct line_map *cached;
  mn = set->cache;
  mx = set->used;
  cached = &set->maps[mn];
  if (line >= cached->start_location)
    {
      if (mn + 1 == mx || line < cached[1].start_location)
 return cached;
    }
  else
    {
      mx = mn;
      mn = 0;
    }
  while (mx - mn > 1)
    {
      md = (mn + mx) / 2;
      if (set->maps[md].start_location > line)
 mx = md;
      else
 mn = md;
    }
  set->cache = mn;
  return &set->maps[mn];
}
void
linemap_print_containing_files (struct line_maps *set,
    const struct line_map *map)
{
  if (((map)->included_from < 0) || set->last_listed == map->included_from)
    return;
  set->last_listed = map->included_from;
  map = (&(set)->maps[(map)->included_from]);
  fprintf (stderr, "In file included from %s:%u",
    map->to_file, ((((((((map)[1].start_location - 1 - (map)->start_location) & ~((1 << (map)->column_bits) - 1)) + (map)->start_location)) - (map)->start_location) >> (map)->column_bits) + (map)->to_line));
  while (! ((map)->included_from < 0))
    {
      map = (&(set)->maps[(map)->included_from]);
      fprintf (stderr, ",\n                 from %s:%u",
        map->to_file, ((((((((map)[1].start_location - 1 - (map)->start_location) & ~((1 << (map)->column_bits) - 1)) + (map)->start_location)) - (map)->start_location) >> (map)->column_bits) + (map)->to_line));
    }
  fputs_unlocked (":\n", stderr);
}
static void
trace_include (const struct line_maps *set, const struct line_map *map)
{
  unsigned int i = set->depth;
  while (--i)
    putc_unlocked ('.', stderr);
  fprintf (stderr, " %s\n", map->to_file);
}
typedef struct macro_arg macro_arg;
struct macro_arg
{
  const cpp_token **first;
  const cpp_token **expanded;
  const cpp_token *stringified;
  unsigned int count;
  unsigned int expanded_count;
};
static int enter_macro_context (cpp_reader *, cpp_hashnode *);
static int builtin_macro (cpp_reader *, cpp_hashnode *);
static void push_token_context (cpp_reader *, cpp_hashnode *,
    const cpp_token *, unsigned int);
static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
     const cpp_token **, unsigned int);
static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *);
static cpp_context *next_context (cpp_reader *);
static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
static void expand_arg (cpp_reader *, macro_arg *);
static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
static void paste_all_tokens (cpp_reader *, const cpp_token *);
static unsigned char paste_tokens (cpp_reader *, const cpp_token **, const cpp_token *);
static void replace_macro_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
    macro_arg *);
static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *);
static unsigned char create_iso_definition (cpp_reader *, cpp_macro *);
static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
static unsigned char warn_of_redefinition (cpp_reader *, const cpp_hashnode *,
      const cpp_macro *);
static unsigned char parse_params (cpp_reader *, cpp_macro *);
static void check_trad_stringification (cpp_reader *, const cpp_macro *,
     const cpp_string *);
int
_cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
      void *v )
{
  if (node->type == NT_MACRO && !(node->flags & (1 << 2)))
    {
      cpp_macro *macro = node->value.macro;
      if (!macro->used
   && ((linemap_lookup (pfile->line_table, macro->line))->included_from < 0))
 cpp_error_with_line (pfile, 0x00, macro->line, 0,
        "macro \"%s\" is not used", ((&(node)->ident)->str));
    }
  return 1;
}
static const cpp_token *
new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
{
  cpp_token *token = _cpp_temp_token (pfile);
  text[len] = '\0';
  token->type = CPP_STRING;
  token->val.str.len = len;
  token->val.str.text = text;
  token->flags = 0;
  return token;
}
static const char * const monthnames[] =
{
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
const uchar *
_cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
{
  const struct line_map *map;
  const uchar *result = ((void *)0);
  unsigned int number = 1;
  switch (node->value.builtin)
    {
    default:
      cpp_error (pfile, 0x04, "invalid built-in macro \"%s\"",
   ((&(node)->ident)->str));
      break;
    case BT_FILE:
    case BT_BASE_FILE:
      {
 unsigned int len;
 const char *name;
 uchar *buf;
 map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line);
 if (node->value.builtin == BT_BASE_FILE)
   while (! ((map)->included_from < 0))
     map = (&(pfile->line_table)->maps[(map)->included_from]);
 name = map->to_file;
 len = strlen (name);
 buf = _cpp_unaligned_alloc (pfile, len * 4 + 3);
 result = buf;
 *buf = '"';
 buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
 *buf++ = '"';
 *buf = '\0';
      }
      break;
    case BT_INCLUDE_LEVEL:
      number = pfile->line_table->depth - 1;
      break;
    case BT_SPECLINE:
      map = &pfile->line_table->maps[pfile->line_table->used-1];
      if (((pfile)->opts.traditional))
 number = pfile->line_table->highest_line;
      else
 number = pfile->cur_token[-1].src_loc;
      number = ((((number) - (map)->start_location) >> (map)->column_bits) + (map)->to_line);
      break;
    case BT_STDC:
      {
 if (cpp_in_system_header (pfile)
     && ((pfile)->opts.stdc_0_in_system_headers)
     && !((pfile)->opts.std))
   number = 0;
 else
   number = 1;
      }
      break;
    case BT_DATE:
    case BT_TIME:
      if (pfile->date == ((void *)0))
 {
   time_t tt;
   struct tm *tb = ((void *)0);
   (*__errno_location ()) = 0;
   tt = time(((void *)0));
   if (tt != (time_t)-1 || (*__errno_location ()) == 0)
     tb = localtime (&tt);
   if (tb)
     {
       pfile->date = _cpp_unaligned_alloc (pfile,
        sizeof ("\"Oct 11 1347\""));
       sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
         monthnames[tb->tm_mon], tb->tm_mday,
         tb->tm_year + 1900);
       pfile->time = _cpp_unaligned_alloc (pfile,
        sizeof ("\"12:34:56\""));
       sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
         tb->tm_hour, tb->tm_min, tb->tm_sec);
     }
   else
     {
       cpp_errno (pfile, 0x00,
    "could not determine date and time");
       pfile->date = (const uchar *)"\"??? ?? ????\"";
       pfile->time = (const uchar *)"\"??:??:??\"";
     }
 }
      if (node->value.builtin == BT_DATE)
 result = pfile->date;
      else
 result = pfile->time;
      break;
    }
  if (result == ((void *)0))
    {
      result = _cpp_unaligned_alloc (pfile, 21);
      sprintf ((char *) result, "%u", number);
    }
  return result;
}
static int
builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
{
  const uchar *buf;
  size_t len;
  char *nbuf;
  if (node->value.builtin == BT_PRAGMA)
    {
      if (pfile->state.in_directive)
 return 0;
      _cpp_do__Pragma (pfile);
      return 1;
    }
  buf = _cpp_builtin_macro_text (pfile, node);
  len = ustrlen (buf);
  nbuf = C_alloca(len + 1);
  memcpy (nbuf, buf, len);
  nbuf[len]='\n';
  cpp_push_buffer (pfile, (uchar *) nbuf, len, 1);
  _cpp_clean_line (pfile);
  pfile->cur_token = _cpp_temp_token (pfile);
  push_token_context (pfile, ((void *)0), _cpp_lex_direct (pfile), 1);
  if (pfile->buffer->cur != pfile->buffer->rlimit)
    cpp_error (pfile, 0x04, "invalid built-in macro \"%s\"",
        ((&(node)->ident)->str));
  _cpp_pop_buffer (pfile);
  return 1;
}
uchar *
cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
{
  while (len--)
    {
      uchar c = *src++;
      if (c == '\\' || c == '"')
 {
   *dest++ = '\\';
   *dest++ = c;
 }
      else
 {
   if ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isprint)))
     *dest++ = c;
   else
     {
       sprintf ((char *) dest, "\\%03o", c);
       dest += 4;
     }
 }
    }
  return dest;
}
static const cpp_token *
stringify_arg (cpp_reader *pfile, macro_arg *arg)
{
  unsigned char *dest;
  unsigned int i, escape_it, backslash_count = 0;
  const cpp_token *source = ((void *)0);
  size_t len;
  if ((size_t) ((pfile->u_buff)->limit - (pfile->u_buff)->cur) < 3)
    _cpp_extend_buff (pfile, &pfile->u_buff, 3);
  dest = ((pfile->u_buff)->cur);
  *dest++ = '"';
  for (i = 0; i < arg->count; i++)
    {
      const cpp_token *token = arg->first[i];
      if (token->type == CPP_PADDING)
 {
   if (source == ((void *)0))
     source = token->val.source;
   continue;
 }
      escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING
     || token->type == CPP_CHAR || token->type == CPP_WCHAR);
      len = cpp_token_len (token);
      if (escape_it)
 len *= 4;
      len += 3;
      if ((size_t) (((pfile->u_buff)->limit) - dest) < len)
 {
   size_t len_so_far = dest - ((pfile->u_buff)->cur);
   _cpp_extend_buff (pfile, &pfile->u_buff, len);
   dest = ((pfile->u_buff)->cur) + len_so_far;
 }
      if (dest - 1 != ((pfile->u_buff)->cur))
 {
   if (source == ((void *)0))
     source = token;
   if (source->flags & (1 << 0))
     *dest++ = ' ';
 }
      source = ((void *)0);
      if (escape_it)
 {
   _cpp_buff *buff = _cpp_get_buff (pfile, len);
   unsigned char *buf = ((buff)->cur);
   len = cpp_spell_token (pfile, token, buf) - buf;
   dest = cpp_quote_string (dest, buf, len);
   _cpp_release_buff (pfile, buff);
 }
      else
 dest = cpp_spell_token (pfile, token, dest);
      if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
 backslash_count++;
      else
 backslash_count = 0;
    }
  if (backslash_count & 1)
    {
      cpp_error (pfile, 0x00,
   "invalid string literal, ignoring final '\\'");
      dest--;
    }
  *dest++ = '"';
  len = dest - ((pfile->u_buff)->cur);
  ((pfile->u_buff)->cur) = dest + 1;
  return new_string_token (pfile, dest - len, len);
}
static unsigned char
paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
{
  unsigned char *buf, *end;
  const cpp_token *lhs;
  unsigned int len;
  unsigned char valid;
  lhs = *plhs;
  len = cpp_token_len (lhs) + cpp_token_len (rhs) + 1;
  buf = C_alloca(len);
  end = cpp_spell_token (pfile, lhs, buf);
  if (lhs->type == CPP_DIV && rhs->type != CPP_EQ)
    *end++ = ' ';
  end = cpp_spell_token (pfile, rhs, end);
  *end = '\n';
  cpp_push_buffer (pfile, buf, end - buf, 1);
  _cpp_clean_line (pfile);
  pfile->cur_token = _cpp_temp_token (pfile);
  *plhs = _cpp_lex_direct (pfile);
  valid = pfile->buffer->cur == pfile->buffer->rlimit;
  _cpp_pop_buffer (pfile);
  return valid;
}
static void
paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
{
  const cpp_token *rhs;
  cpp_context *context = pfile->context;
  do
    {
      if (context->direct_p)
 rhs = ((context)->u.iso.first).token++;
      else
 rhs = *((context)->u.iso.first).ptoken++;
      if (rhs->type == CPP_PADDING)
 abort ();
      if (!paste_tokens (pfile, &lhs, rhs))
 {
   _cpp_backup_tokens (pfile, 1);
   if (((pfile)->opts.lang) != CLK_ASM)
     cpp_error (pfile, 0x03,
  "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
         cpp_token_as_text (pfile, lhs),
         cpp_token_as_text (pfile, rhs));
   break;
 }
    }
  while (rhs->flags & (1 << 3));
  push_token_context (pfile, ((void *)0), lhs, 1);
}
unsigned char
_cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
{
  if (argc == macro->paramc)
    return 1;
  if (argc < macro->paramc)
    {
      if (argc + 1 == macro->paramc && macro->variadic)
 {
   if (((pfile)->opts.pedantic) && ! macro->syshdr)
     cpp_error (pfile, 0x02,
         "ISO C99 requires rest arguments to be used");
   return 1;
 }
      cpp_error (pfile, 0x03,
   "macro \"%s\" requires %u arguments, but only %u given",
   ((&(node)->ident)->str), macro->paramc, argc);
    }
  else
    cpp_error (pfile, 0x03,
        "macro \"%s\" passed %u arguments, but takes just %u",
        ((&(node)->ident)->str), argc, macro->paramc);
  return 0;
}
static _cpp_buff *
collect_args (cpp_reader *pfile, const cpp_hashnode *node)
{
  _cpp_buff *buff, *base_buff;
  cpp_macro *macro;
  macro_arg *args, *arg;
  const cpp_token *token;
  unsigned int argc;
  macro = node->value.macro;
  if (macro->paramc)
    argc = macro->paramc;
  else
    argc = 1;
  buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *)
           + sizeof (macro_arg)));
  base_buff = buff;
  args = (macro_arg *) buff->base;
  memset (args, 0, argc * sizeof (macro_arg));
  buff->cur = (unsigned char *) &args[argc];
  arg = args, argc = 0;
  do
    {
      unsigned int paren_depth = 0;
      unsigned int ntokens = 0;
      argc++;
      arg->first = (const cpp_token **) buff->cur;
      for (;;)
 {
   if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
     {
       buff = _cpp_append_extend_buff (pfile, buff,
           1000 * sizeof (cpp_token *));
       arg->first = (const cpp_token **) buff->cur;
     }
   token = cpp_get_token (pfile);
   if (token->type == CPP_PADDING)
     {
       if (ntokens == 0)
  continue;
     }
   else if (token->type == CPP_OPEN_PAREN)
     paren_depth++;
   else if (token->type == CPP_CLOSE_PAREN)
     {
       if (paren_depth-- == 0)
  break;
     }
   else if (token->type == CPP_COMMA)
     {
       if (paren_depth == 0
    && ! (macro->variadic && argc == macro->paramc))
  break;
     }
   else if (token->type == CPP_EOF
     || (token->type == CPP_HASH && token->flags & (1 << 6)))
     break;
   arg->first[ntokens++] = token;
 }
      while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
 ntokens--;
      arg->count = ntokens;
      arg->first[ntokens] = &pfile->eof;
      if (argc <= macro->paramc)
 {
   buff->cur = (unsigned char *) &arg->first[ntokens + 1];
   if (argc != macro->paramc)
     arg++;
 }
    }
  while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
  if (token->type == CPP_EOF)
    {
      if (pfile->context->prev || pfile->state.in_directive)
 _cpp_backup_tokens (pfile, 1);
      cpp_error (pfile, 0x03,
   "unterminated argument list invoking macro \"%s\"",
   ((&(node)->ident)->str));
    }
  else
    {
      if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
 argc = 0;
      if (_cpp_arguments_ok (pfile, macro, node, argc))
 {
   if (macro->variadic && (argc < macro->paramc
      || (argc == 1 && args[0].count == 0
          && !((pfile)->opts.std))))
     args[macro->paramc - 1].first = ((void *)0);
   return base_buff;
 }
    }
  _cpp_release_buff (pfile, base_buff);
  return ((void *)0);
}
static _cpp_buff *
funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node)
{
  const cpp_token *token, *padding = ((void *)0);
  for (;;)
    {
      token = cpp_get_token (pfile);
      if (token->type != CPP_PADDING)
 break;
      if (padding == ((void *)0)
   || (!(padding->flags & (1 << 0)) && token->val.source == ((void *)0)))
 padding = token;
    }
  if (token->type == CPP_OPEN_PAREN)
    {
      pfile->state.parsing_args = 2;
      return collect_args (pfile, node);
    }
  if (token->type != CPP_EOF || token == &pfile->eof)
    {
      _cpp_backup_tokens (pfile, 1);
      if (padding)
 push_token_context (pfile, ((void *)0), padding, 1);
    }
  return ((void *)0);
}
static int
enter_macro_context (cpp_reader *pfile, cpp_hashnode *node)
{
  pfile->mi_valid = 0;
  pfile->state.angled_headers = 0;
  if (! (node->flags & (1 << 2)))
    {
      cpp_macro *macro = node->value.macro;
      if (macro->fun_like)
 {
   _cpp_buff *buff;
   pfile->state.prevent_expansion++;
   pfile->keep_tokens++;
   pfile->state.parsing_args = 1;
   buff = funlike_invocation_p (pfile, node);
   pfile->state.parsing_args = 0;
   pfile->keep_tokens--;
   pfile->state.prevent_expansion--;
   if (buff == ((void *)0))
     {
       if (((pfile)->opts.warn_traditional) && ! node->value.macro->syshdr)
  cpp_error (pfile, 0x00,
 "function-like macro \"%s\" must be used with arguments in traditional C",
      ((&(node)->ident)->str));
       return 0;
     }
   if (macro->paramc > 0)
     replace_macro_args (pfile, node, macro, (macro_arg *) buff->base);
   _cpp_release_buff (pfile, buff);
 }
      node->flags |= (1 << 5);
      macro->used = 1;
      if (macro->paramc == 0)
 push_token_context (pfile, node, macro->exp.tokens, macro->count);
      return 1;
    }
  return builtin_macro (pfile, node);
}
static void
replace_macro_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro, macro_arg *args)
{
  unsigned int i, total;
  const cpp_token *src, *limit;
  const cpp_token **dest, **first;
  macro_arg *arg;
  _cpp_buff *buff;
  total = macro->count;
  limit = macro->exp.tokens + macro->count;
  for (src = macro->exp.tokens; src < limit; src++)
    if (src->type == CPP_MACRO_ARG)
      {
 total += 2;
 arg = &args[src->val.arg_no - 1];
 if (src->flags & (1 << 2))
   {
     if (!arg->stringified)
       arg->stringified = stringify_arg (pfile, arg);
   }
 else if ((src->flags & (1 << 3))
   || (src > macro->exp.tokens && (src[-1].flags & (1 << 3))))
   total += arg->count - 1;
 else
   {
     if (!arg->expanded)
       expand_arg (pfile, arg);
     total += arg->expanded_count - 1;
   }
      }
  buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *));
  first = (const cpp_token **) buff->base;
  dest = first;
  for (src = macro->exp.tokens; src < limit; src++)
    {
      unsigned int count;
      const cpp_token **from, **paste_flag;
      if (src->type != CPP_MACRO_ARG)
 {
   *dest++ = src;
   continue;
 }
      paste_flag = 0;
      arg = &args[src->val.arg_no - 1];
      if (src->flags & (1 << 2))
 count = 1, from = &arg->stringified;
      else if (src->flags & (1 << 3))
 count = arg->count, from = arg->first;
      else if (src != macro->exp.tokens && (src[-1].flags & (1 << 3)))
 {
   count = arg->count, from = arg->first;
   if (dest != first)
     {
       if (dest[-1]->type == CPP_COMMA
    && macro->variadic
    && src->val.arg_no == macro->paramc)
  {
    if (from == ((void *)0))
      dest--;
    else
      paste_flag = dest - 1;
  }
       else if (count == 0)
  paste_flag = dest - 1;
     }
 }
      else
 count = arg->expanded_count, from = arg->expanded;
      if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
   && src != macro->exp.tokens && !(src[-1].flags & (1 << 3)))
 *dest++ = padding_token (pfile, src);
      if (count)
 {
   memcpy (dest, from, count * sizeof (cpp_token *));
   dest += count;
   if (src->flags & (1 << 3))
     paste_flag = dest - 1;
 }
      if (!pfile->state.in_directive && !(src->flags & (1 << 3)))
 *dest++ = &pfile->avoid_paste;
      if (paste_flag)
 {
   cpp_token *token = _cpp_temp_token (pfile);
   token->type = (*paste_flag)->type;
   token->val.str = (*paste_flag)->val.str;
   if (src->flags & (1 << 3))
     token->flags = (*paste_flag)->flags | (1 << 3);
   else
     token->flags = (*paste_flag)->flags & ~(1 << 3);
   *paste_flag = token;
 }
    }
  for (i = 0; i < macro->paramc; i++)
    if (args[i].expanded)
      free (args[i].expanded);
  push_ptoken_context (pfile, node, buff, first, dest - first);
}
static const cpp_token *
padding_token (cpp_reader *pfile, const cpp_token *source)
{
  cpp_token *result = _cpp_temp_token (pfile);
  result->type = CPP_PADDING;
  result->val.source = (cpp_token *) source;
  result->flags = 0;
  return result;
}
static cpp_context *
next_context (cpp_reader *pfile)
{
  cpp_context *result = pfile->context->next;
  if (result == 0)
    {
      result = (cpp_context *) xmalloc (sizeof(cpp_context));
      result->prev = pfile->context;
      result->next = 0;
      pfile->context->next = result;
    }
  pfile->context = result;
  return result;
}
static void
push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
       const cpp_token **first, unsigned int count)
{
  cpp_context *context = next_context (pfile);
  context->direct_p = 0;
  context->macro = macro;
  context->buff = buff;
  ((context)->u.iso.first).ptoken = first;
  ((context)->u.iso.last).ptoken = first + count;
}
static void
push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
      const cpp_token *first, unsigned int count)
{
  cpp_context *context = next_context (pfile);
  context->direct_p = 1;
  context->macro = macro;
  context->buff = ((void *)0);
  ((context)->u.iso.first).token = first;
  ((context)->u.iso.last).token = first + count;
}
void
_cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
   const uchar *start, size_t len)
{
  cpp_context *context = next_context (pfile);
  context->direct_p = 1;
  context->macro = macro;
  context->buff = ((void *)0);
  ((context)->u.trad.cur) = start;
  ((context)->u.trad.rlimit) = start + len;
  macro->flags |= (1 << 5);
}
static void
expand_arg (cpp_reader *pfile, macro_arg *arg)
{
  unsigned int capacity;
  unsigned char saved_warn_trad;
  if (arg->count == 0)
    return;
  saved_warn_trad = ((pfile)->opts.warn_traditional);
  ((pfile)->opts.warn_traditional) = 0;
  capacity = 256;
  arg->expanded = xmalloc (capacity * sizeof (cpp_token *));
  push_ptoken_context (pfile, ((void *)0), ((void *)0), arg->first, arg->count + 1);
  for (;;)
    {
      const cpp_token *token;
      if (arg->expanded_count + 1 >= capacity)
 {
   capacity *= 2;
   arg->expanded = xrealloc (arg->expanded,
        capacity * sizeof (cpp_token *));
 }
      token = cpp_get_token (pfile);
      if (token->type == CPP_EOF)
 break;
      arg->expanded[arg->expanded_count++] = token;
    }
  _cpp_pop_context (pfile);
  ((pfile)->opts.warn_traditional) = saved_warn_trad;
}
void
_cpp_pop_context (cpp_reader *pfile)
{
  cpp_context *context = pfile->context;
  if (context->macro)
    context->macro->flags &= ~(1 << 5);
  if (context->buff)
    _cpp_release_buff (pfile, context->buff);
  pfile->context = context->prev;
}
const cpp_token *
cpp_get_token (cpp_reader *pfile)
{
  const cpp_token *result;
  for (;;)
    {
      cpp_hashnode *node;
      cpp_context *context = pfile->context;
      if (!context->prev)
 result = _cpp_lex_token (pfile);
      else if (((context)->u.iso.first).token != ((context)->u.iso.last).token)
 {
   if (context->direct_p)
     result = ((context)->u.iso.first).token++;
   else
     result = *((context)->u.iso.first).ptoken++;
   if (result->flags & (1 << 3))
     {
       paste_all_tokens (pfile, result);
       if (pfile->state.in_directive)
  continue;
       return padding_token (pfile, result);
     }
 }
      else
 {
   _cpp_pop_context (pfile);
   if (pfile->state.in_directive)
     continue;
   return &pfile->avoid_paste;
 }
      if (pfile->state.in_directive && result->type == CPP_COMMENT)
 continue;
      if (result->type != CPP_NAME)
 break;
      node = result->val.node;
      if (node->type != NT_MACRO || (result->flags & (1 << 5)))
 break;
      if (!(node->flags & (1 << 5)))
 {
   if (!pfile->state.prevent_expansion
       && enter_macro_context (pfile, node))
     {
       if (pfile->state.in_directive)
  continue;
       return padding_token (pfile, result);
     }
 }
      else
 {
   cpp_token *t = _cpp_temp_token (pfile);
   t->type = result->type;
   t->flags = result->flags | (1 << 5);
   t->val.str = result->val.str;
   result = t;
 }
      break;
    }
  return result;
}
int
cpp_sys_macro_p (cpp_reader *pfile)
{
  cpp_hashnode *node = pfile->context->macro;
  return node && node->value.macro && node->value.macro->syshdr;
}
void
cpp_scan_nooutput (cpp_reader *pfile)
{
  pfile->buffer->return_at_eof = 1;
  pfile->state.discarding_output++;
  pfile->state.prevent_expansion++;
  if (((pfile)->opts.traditional))
    while (_cpp_read_logical_line_trad (pfile))
      ;
  else
    while (cpp_get_token (pfile)->type != CPP_EOF)
      ;
  pfile->state.discarding_output--;
  pfile->state.prevent_expansion--;
}
void
_cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
{
  if (pfile->context->prev == ((void *)0))
    {
      pfile->lookaheads += count;
      while (count--)
 {
   pfile->cur_token--;
   if (pfile->cur_token == pfile->cur_run->base
       && pfile->cur_run->prev != ((void *)0))
     {
       pfile->cur_run = pfile->cur_run->prev;
       pfile->cur_token = pfile->cur_run->limit;
     }
 }
    }
  else
    {
      if (count != 1)
 abort ();
      if (pfile->context->direct_p)
 ((pfile->context)->u.iso.first).token--;
      else
 ((pfile->context)->u.iso.first).ptoken--;
    }
}
static unsigned char
warn_of_redefinition (cpp_reader *pfile, const cpp_hashnode *node,
        const cpp_macro *macro2)
{
  const cpp_macro *macro1;
  unsigned int i;
  if (node->flags & (1 << 4))
    return 1;
  macro1 = node->value.macro;
  if (macro1->paramc != macro2->paramc
      || macro1->fun_like != macro2->fun_like
      || macro1->variadic != macro2->variadic)
    return 1;
  for (i = 0; i < macro1->paramc; i++)
    if (macro1->params[i] != macro2->params[i])
      return 1;
  if (((pfile)->opts.traditional))
    return _cpp_expansions_different_trad (macro1, macro2);
  if (macro1->count != macro2->count)
    return 1;
  for (i = 0; i < macro1->count; i++)
    if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
      return 1;
  return 0;
}
void
_cpp_free_definition (cpp_hashnode *h)
{
  h->type = NT_VOID;
  h->flags &= ~((1 << 2) | (1 << 5));
}
unsigned char
_cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
{
  unsigned int len;
  if (node->flags & (1 << 6))
    {
      cpp_error (pfile, 0x03, "duplicate macro parameter \"%s\"",
   ((&(node)->ident)->str));
      return 1;
    }
  if ((size_t) ((pfile->a_buff)->limit - (pfile->a_buff)->cur)
      < (macro->paramc + 1) * sizeof (cpp_hashnode *))
    _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
  ((cpp_hashnode **) ((pfile->a_buff)->cur))[macro->paramc++] = node;
  node->flags |= (1 << 6);
  len = macro->paramc * sizeof (union _cpp_hashnode_value);
  if (len > pfile->macro_buffer_len)
    {
      pfile->macro_buffer = xrealloc (pfile->macro_buffer, len);
      pfile->macro_buffer_len = len;
    }
  ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
    = node->value;
  node->value.arg_index = macro->paramc;
  return 0;
}
static unsigned char
parse_params (cpp_reader *pfile, cpp_macro *macro)
{
  unsigned int prev_ident = 0;
  for (;;)
    {
      const cpp_token *token = _cpp_lex_token (pfile);
      switch (token->type)
 {
 default:
   if (token->type == CPP_COMMENT
       && ! ((pfile)->opts.discard_comments_in_macro_exp))
     continue;
   cpp_error (pfile, 0x03,
       "\"%s\" may not appear in macro parameter list",
       cpp_token_as_text (pfile, token));
   return 0;
 case CPP_NAME:
   if (prev_ident)
     {
       cpp_error (pfile, 0x03,
    "macro parameters must be comma-separated");
       return 0;
     }
   prev_ident = 1;
   if (_cpp_save_parameter (pfile, macro, token->val.node))
     return 0;
   continue;
 case CPP_CLOSE_PAREN:
   if (prev_ident || macro->paramc == 0)
     return 1;
 case CPP_COMMA:
   if (!prev_ident)
     {
       cpp_error (pfile, 0x03, "parameter name missing");
       return 0;
     }
   prev_ident = 0;
   continue;
 case CPP_ELLIPSIS:
   macro->variadic = 1;
   if (!prev_ident)
     {
       _cpp_save_parameter (pfile, macro,
       pfile->spec_nodes.n__VA_ARGS__);
       pfile->state.va_args_ok = 1;
       if (! ((pfile)->opts.c99)
    && ((pfile)->opts.pedantic)
    && ((pfile)->opts.warn_variadic_macros))
  cpp_error (pfile, 0x02,
      "anonymous variadic macros were introduced in C99");
     }
   else if (((pfile)->opts.pedantic)
     && ((pfile)->opts.warn_variadic_macros))
     cpp_error (pfile, 0x02,
         "ISO C does not permit named variadic macros");
   token = _cpp_lex_token (pfile);
   if (token->type == CPP_CLOSE_PAREN)
     return 1;
 case CPP_EOF:
   cpp_error (pfile, 0x03, "missing ')' in macro parameter list");
   return 0;
 }
    }
}
static cpp_token *
alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
{
  if ((size_t) ((pfile->a_buff)->limit - (pfile->a_buff)->cur) < (macro->count + 1) * sizeof (cpp_token))
    _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
  return &((cpp_token *) ((pfile->a_buff)->cur))[macro->count++];
}
static cpp_token *
lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
{
  cpp_token *token;
  pfile->cur_token = alloc_expansion_token (pfile, macro);
  token = _cpp_lex_direct (pfile);
  if (token->type == CPP_NAME
      && (token->val.node->flags & (1 << 6)) != 0)
    {
      token->type = CPP_MACRO_ARG;
      token->val.arg_no = token->val.node->value.arg_index;
    }
  else if (((pfile)->opts.warn_traditional) && macro->paramc > 0
    && (token->type == CPP_STRING || token->type == CPP_CHAR))
    check_trad_stringification (pfile, macro, &token->val.str);
  return token;
}
static unsigned char
create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
{
  cpp_token *token;
  const cpp_token *ctoken;
  ctoken = _cpp_lex_token (pfile);
  if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & (1 << 0)))
    {
      unsigned char ok = parse_params (pfile, macro);
      macro->params = (cpp_hashnode **) ((pfile->a_buff)->cur);
      if (!ok)
 return 0;
      if (pfile->hash_table1->alloc_subobject)
 {
   cpp_token *tokns = pfile->hash_table1->alloc_subobject
     (sizeof (cpp_token) * macro->paramc);
   memcpy (tokns, macro->params, sizeof (cpp_token) * macro->paramc);
   macro->params = (void *) tokns;
 }
      else
 ((pfile->a_buff)->cur) = (uchar *) &macro->params[macro->paramc];
      macro->fun_like = 1;
    }
  else if (ctoken->type != CPP_EOF && !(ctoken->flags & (1 << 0)))
    cpp_error (pfile, 0x02,
        "ISO C requires whitespace after the macro name");
  if (macro->fun_like)
    token = lex_expansion_token (pfile, macro);
  else
    {
      token = alloc_expansion_token (pfile, macro);
      *token = *ctoken;
    }
  for (;;)
    {
      if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
 {
   if (token->type == CPP_MACRO_ARG)
     {
       token->flags &= ~(1 << 0);
       token->flags |= (1 << 2);
       token->flags |= token[-1].flags & (1 << 0);
       token[-1] = token[0];
       macro->count--;
     }
   else if (((pfile)->opts.lang) != CLK_ASM)
     {
       cpp_error (pfile, 0x03,
    "'#' is not followed by a macro parameter");
       return 0;
     }
 }
      if (token->type == CPP_EOF)
 break;
      if (token->type == CPP_PASTE)
 {
   if (--macro->count > 0)
     token = lex_expansion_token (pfile, macro);
   if (macro->count == 0 || token->type == CPP_EOF)
     {
       cpp_error (pfile, 0x03,
   "'##' cannot appear at either end of a macro expansion");
       return 0;
     }
   token[-1].flags |= (1 << 3);
 }
      token = lex_expansion_token (pfile, macro);
    }
  macro->exp.tokens = (cpp_token *) ((pfile->a_buff)->cur);
  macro->traditional = 0;
  macro->count--;
  if (macro->count)
    macro->exp.tokens[0].flags &= ~(1 << 0);
  if (pfile->hash_table1->alloc_subobject)
    {
      cpp_token *tokns = pfile->hash_table1->alloc_subobject (sizeof (cpp_token)
            * macro->count);
      memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
      macro->exp.tokens = tokns;
    }
  else
    ((pfile->a_buff)->cur) = (uchar *) &macro->exp.tokens[macro->count];
  return 1;
}
unsigned char
_cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
{
  cpp_macro *macro;
  unsigned int i;
  unsigned char ok;
  if (pfile->hash_table1->alloc_subobject)
    macro = pfile->hash_table1->alloc_subobject (sizeof (cpp_macro));
  else
    macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
  macro->line = pfile->directive_line;
  macro->params = 0;
  macro->paramc = 0;
  macro->variadic = 0;
  macro->used = !((pfile)->opts.warn_unused_macros);
  macro->count = 0;
  macro->fun_like = 0;
  macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
  if (((pfile)->opts.traditional))
    ok = _cpp_create_trad_definition (pfile, macro);
  else
    {
      cpp_token *saved_cur_token = pfile->cur_token;
      ok = create_iso_definition (pfile, macro);
      saved_cur_token[-1].type = pfile->cur_token[-1].type;
      pfile->cur_token = saved_cur_token;
      pfile->state.va_args_ok = 0;
    }
  for (i = macro->paramc; i-- > 0; )
    {
      struct cpp_hashnode *node = macro->params[i];
      node->flags &= ~ (1 << 6);
      node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
    }
  if (!ok)
    return ok;
  if (node->type == NT_MACRO)
    {
      if (((pfile)->opts.warn_unused_macros))
 _cpp_warn_if_unused_macro (pfile, node, ((void *)0));
      if (warn_of_redefinition (pfile, node, macro))
 {
   cpp_error_with_line (pfile, 0x02, pfile->directive_line, 0,
          "\"%s\" redefined", ((&(node)->ident)->str));
   if (node->type == NT_MACRO && !(node->flags & (1 << 2)))
     cpp_error_with_line (pfile, 0x02,
     node->value.macro->line, 0,
    "this is the location of the previous definition");
 }
    }
  if (node->type != NT_VOID)
    _cpp_free_definition (node);
  node->type = NT_MACRO;
  node->value.macro = macro;
  if (! ustrncmp (((&(node)->ident)->str), (const uchar *)"__STDC_", sizeof "__STDC_" - 1))
    node->flags |= (1 << 4);
  return ok;
}
static void
check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
       const cpp_string *string1)
{
  unsigned int i, len;
  const uchar *p, *q, *limit;
  limit = string1->text + string1->len - 1;
  for (p = string1->text + 1; p < limit; p = q)
    {
      while (p < limit && !((_sch_istable[(*p) & 0xff] & (unsigned short)(_sch_isidst)) || ((*p) == '$' && ((pfile)->opts.dollars_in_ident))))
 p++;
      q = p;
      while (q < limit && ((_sch_istable[(*q) & 0xff] & (unsigned short)(_sch_isidnum)) || ((*q) == '$' && ((pfile)->opts.dollars_in_ident))))
 q++;
      len = q - p;
      for (i = 0; i < macro->paramc; i++)
 {
   const cpp_hashnode *node = macro->params[i];
   if (((&(node)->ident)->len) == len
       && !memcmp (p, ((&(node)->ident)->str), len))
     {
       cpp_error (pfile, 0x00,
    "macro argument \"%s\" would be stringified in traditional C",
    ((&(node)->ident)->str));
       break;
     }
 }
    }
}
const unsigned char *
cpp_macro_definition (cpp_reader *pfile, const cpp_hashnode *node)
{
  unsigned int i, len;
  const cpp_macro *macro = node->value.macro;
  unsigned char *buffer;
  if (node->type != NT_MACRO || (node->flags & (1 << 2)))
    {
      cpp_error (pfile, 0x04,
   "invalid hash type %d in cpp_macro_definition", node->type);
      return 0;
    }
  len = ((&(node)->ident)->len) + 2;
  if (macro->fun_like)
    {
      len += 4;
      for (i = 0; i < macro->paramc; i++)
 len += ((&(macro->params[i])->ident)->len) + 1;
    }
  if (((pfile)->opts.traditional))
    len += _cpp_replacement_text_len (macro);
  else
    {
      for (i = 0; i < macro->count; i++)
 {
   cpp_token *token = &macro->exp.tokens[i];
   if (token->type == CPP_MACRO_ARG)
     len += ((&(macro->params[token->val.arg_no - 1])->ident)->len);
   else
     len += cpp_token_len (token) + 1;
   if (token->flags & (1 << 2))
     len++;
   if (token->flags & (1 << 3))
     len += 3;
 }
    }
  if (len > pfile->macro_buffer_len)
    {
      pfile->macro_buffer = xrealloc (pfile->macro_buffer, len);
      pfile->macro_buffer_len = len;
    }
  buffer = pfile->macro_buffer;
  memcpy (buffer, ((&(node)->ident)->str), ((&(node)->ident)->len));
  buffer += ((&(node)->ident)->len);
  if (macro->fun_like)
    {
      *buffer++ = '(';
      for (i = 0; i < macro->paramc; i++)
 {
   cpp_hashnode *param = macro->params[i];
   if (param != pfile->spec_nodes.n__VA_ARGS__)
     {
       memcpy (buffer, ((&(param)->ident)->str), ((&(param)->ident)->len));
       buffer += ((&(param)->ident)->len);
     }
   if (i + 1 < macro->paramc)
     *buffer++ = ',';
   else if (macro->variadic)
     *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
 }
      *buffer++ = ')';
    }
  *buffer++ = ' ';
  if (((pfile)->opts.traditional))
    buffer = _cpp_copy_replacement_text (macro, buffer);
  else if (macro->count)
    {
      for (i = 0; i < macro->count; i++)
 {
   cpp_token *token = &macro->exp.tokens[i];
   if (token->flags & (1 << 0))
     *buffer++ = ' ';
   if (token->flags & (1 << 2))
     *buffer++ = '#';
   if (token->type == CPP_MACRO_ARG)
     {
       len = ((&(macro->params[token->val.arg_no - 1])->ident)->len);
       memcpy (buffer,
        ((&(macro->params[token->val.arg_no - 1])->ident)->str), len);
       buffer += len;
     }
   else
     buffer = cpp_spell_token (pfile, token, buffer);
   if (token->flags & (1 << 3))
     {
       *buffer++ = ' ';
       *buffer++ = '#';
       *buffer++ = '#';
     }
 }
    }
  *buffer = '\0';
  return pfile->macro_buffer;
}
struct depends
{
  const char **targetv;
  unsigned int ntargets;
  unsigned int targets_size;
  const char **depv;
  unsigned int ndeps;
  unsigned int deps_size;
  const char **vpathv;
  size_t *vpathlv;
  unsigned int nvpaths;
  unsigned int vpaths_size;
};
static const char *munge (const char *);
static const char *
munge (const char *filename)
{
  int len;
  const char *p, *q;
  char *dst, *buffer;
  for (p = filename, len = 0; *p; p++, len++)
    {
      switch (*p)
 {
 case ' ':
 case '\t':
   for (q = p - 1; filename <= q && *q == '\\'; q--)
     len++;
   len++;
   break;
 case '$':
   len++;
   break;
 }
    }
  buffer = xmalloc (len + 1);
  for (p = filename, dst = buffer; *p; p++, dst++)
    {
      switch (*p)
 {
 case ' ':
 case '\t':
   for (q = p - 1; filename <= q && *q == '\\'; q--)
     *dst++ = '\\';
   *dst++ = '\\';
   break;
 case '$':
   *dst++ = '$';
   break;
 default:
                ;
 }
      *dst = *p;
    }
  *dst = '\0';
  return buffer;
}
static const char *
apply_vpath (struct depends *d, const char *t)
{
  if (d->vpathv)
    {
      unsigned int i;
      for (i = 0; i < d->nvpaths; i++)
 {
   if (!strncmp (d->vpathv[i], t, d->vpathlv[i]))
     {
       const char *p = t + d->vpathlv[i];
       if (!((*p) == '/'))
  goto not_this_one;
       if (p[1] == '.' && p[2] == '.' && ((p[3]) == '/'))
  goto not_this_one;
       t = t + d->vpathlv[i] + 1;
       break;
     }
 not_this_one:;
 }
    }
  while (t[0] == '.' && ((t[1]) == '/'))
    t += 2;
  return t;
}
struct depends *
deps_init (void)
{
  return xcalloc (sizeof (struct depends), 1);
}
void
deps_free (struct depends *d)
{
  unsigned int i;
  if (d->targetv)
    {
      for (i = 0; i < d->ntargets; i++)
 free ((void *) d->targetv[i]);
      free (d->targetv);
    }
  if (d->depv)
    {
      for (i = 0; i < d->ndeps; i++)
 free ((void *) d->depv[i]);
      free (d->depv);
    }
  if (d->vpathv)
    {
      for (i = 0; i < d->nvpaths; i++)
 free ((void *) d->vpathv[i]);
      free (d->vpathv);
      free (d->vpathlv);
    }
  free (d);
}
void
deps_add_target (struct depends *d, const char *t, int quote)
{
  if (d->ntargets == d->targets_size)
    {
      d->targets_size = d->targets_size * 2 + 4;
      d->targetv = xrealloc (d->targetv,
        d->targets_size * sizeof (const char *));
    }
  t = apply_vpath (d, t);
  if (quote)
    t = munge (t);
  else
    t = xstrdup (t);
  d->targetv[d->ntargets++] = t;
}
void
deps_add_default_target (struct depends *d, const char *tgt)
{
  if (d->ntargets)
    return;
  if (tgt[0] == '\0')
    deps_add_target (d, "-", 1);
  else
    {
      const char *start = lbasename (tgt);
      char *o = C_alloca(strlen (start) + strlen (".o") + 1);
      char *suffix;
      strcpy (o, start);
      suffix = strrchr (o, '.');
      if (!suffix)
        suffix = o + strlen (o);
      strcpy (suffix, ".o");
      deps_add_target (d, o, 1);
    }
}
void
deps_add_dep (struct depends *d, const char *t)
{
  t = munge (apply_vpath (d, t));
  if (d->ndeps == d->deps_size)
    {
      d->deps_size = d->deps_size * 2 + 8;
      d->depv = xrealloc (d->depv, d->deps_size * sizeof (const char *));
    }
  d->depv[d->ndeps++] = t;
}
void
deps_add_vpath (struct depends *d, const char *vpath)
{
  const char *elem, *p;
  char *copy;
  size_t len;
  for (elem = vpath; *elem; elem = p)
    {
      for (p = elem; *p && *p != ':'; p++);
      len = p - elem;
      copy = xmalloc (len + 1);
      memcpy (copy, elem, len);
      copy[len] = '\0';
      if (*p == ':')
 p++;
      if (d->nvpaths == d->vpaths_size)
 {
   d->vpaths_size = d->vpaths_size * 2 + 8;
   d->vpathv = xrealloc (d->vpathv,
    d->vpaths_size * sizeof (const char *));
   d->vpathlv = xrealloc (d->vpathlv, d->vpaths_size * sizeof (size_t));
 }
      d->vpathv[d->nvpaths] = copy;
      d->vpathlv[d->nvpaths] = len;
      d->nvpaths++;
    }
}
void
deps_write (const struct depends *d, FILE *fp, unsigned int colmax)
{
  unsigned int size, i, column;
  column = 0;
  if (colmax && colmax < 34)
    colmax = 34;
  for (i = 0; i < d->ntargets; i++)
    {
      size = strlen (d->targetv[i]);
      column += size;
      if (colmax && column > colmax)
 {
   fputs_unlocked (" \\\n ", fp);
   column = 1 + size;
 }
      if (i)
 {
   putc_unlocked (' ', fp);
   column++;
 }
      fputs_unlocked (d->targetv[i], fp);
    }
  putc_unlocked (':', fp);
  putc_unlocked (' ', fp);
  column += 2;
  for (i = 0; i < d->ndeps; i++)
    {
      size = strlen (d->depv[i]);
      column += size;
      if (colmax && column > colmax)
 {
   fputs_unlocked (" \\\n ", fp);
   column = 1 + size;
 }
      if (i)
 {
   putc_unlocked (' ', fp);
   column++;
 }
      fputs_unlocked (d->depv[i], fp);
    }
  putc_unlocked ('\n', fp);
}
void
deps_phony_targets (const struct depends *d, FILE *fp)
{
  unsigned int i;
  for (i = 1; i < d->ndeps; i++)
    {
      putc_unlocked ('\n', fp);
      fputs_unlocked (d->depv[i], fp);
      putc_unlocked (':', fp);
      putc_unlocked ('\n', fp);
    }
}
int
deps_save (struct depends *deps, FILE *f)
{
  unsigned int i;
  if (fwrite_unlocked (&deps->ndeps, sizeof (deps->ndeps), 1, f) != 1)
      return -1;
  for (i = 0; i < deps->ndeps; i++)
    {
      size_t num_to_write = strlen (deps->depv[i]);
      if (fwrite_unlocked (&num_to_write, sizeof (size_t), 1, f) != 1)
          return -1;
      if (fwrite_unlocked (deps->depv[i], num_to_write, 1, f) != 1)
          return -1;
    }
  return 0;
}
int
deps_restore (struct depends *deps, FILE *fd, const char *self)
{
  unsigned int i, count;
  size_t num_to_read;
  size_t buf_size = 512;
  char *buf = xmalloc (buf_size);
  if (fread (&count, 1, sizeof (count), fd) != sizeof (count))
    return -1;
  for (i = 0; i < count; i++)
    {
      if (fread (&num_to_read, 1, sizeof (size_t), fd) != sizeof (size_t))
 return -1;
      if (buf_size < num_to_read + 1)
 {
   buf_size = num_to_read + 1 + 127;
   buf = xrealloc (buf, buf_size);
 }
      if (fread (buf, 1, num_to_read, fd) != num_to_read)
 return -1;
      buf[num_to_read] = '\0';
      if (self != ((void *)0) && strcmp (buf, self) != 0)
        deps_add_dep (deps, buf);
    }
  free (buf);
  return 0;
}
static int write_macdef (cpp_reader *, cpp_hashnode *, void *);
static int save_idents (cpp_reader *, cpp_hashnode *, void *);
static hashval_t hashmem (const void *, size_t);
static hashval_t cpp_string_hash (const void *);
static int cpp_string_eq (const void *, const void *);
static int count_defs (cpp_reader *, cpp_hashnode *, void *);
static int comp_hashnodes (const void *, const void *);
static int collect_ht_nodes (cpp_reader *, cpp_hashnode *, void *);
static int write_defs (cpp_reader *, cpp_hashnode *, void *);
static int save_macros (cpp_reader *, cpp_hashnode *, void *);
struct macrodef_struct
{
  unsigned int definition_length;
  unsigned short name_length;
  unsigned short flags;
};
static int
write_macdef (cpp_reader *pfile, cpp_hashnode *hn, void *file_p)
{
  FILE *f = (FILE *) file_p;
  switch (hn->type)
    {
    case NT_VOID:
      if (! (hn->flags & (1 << 1)))
 return 1;
    case NT_MACRO:
      if ((hn->flags & (1 << 2)))
 return 1;
      {
 struct macrodef_struct s;
 const unsigned char *defn;
 s.name_length = ((&(hn)->ident)->len);
 s.flags = hn->flags & (1 << 1);
 if (hn->type == NT_MACRO)
   {
     defn = cpp_macro_definition (pfile, hn);
     s.definition_length = ustrlen (defn);
   }
 else
   {
     defn = ((&(hn)->ident)->str);
     s.definition_length = s.name_length;
   }
 if (fwrite_unlocked (&s, sizeof (s), 1, f) != 1
     || fwrite_unlocked (defn, 1, s.definition_length, f) != s.definition_length)
   {
     cpp_errno (pfile, 0x03,
         "while writing precompiled header");
     return 0;
   }
      }
      return 1;
    case NT_ASSERTION:
      return 1;
    default:
      abort ();
    }
}
struct cpp_savedstate
{
  htab_t definedhash;
  size_t hashsize;
  size_t n_defs;
  cpp_hashnode **defs;
  unsigned char *definedstrs;
};
static int
save_idents (cpp_reader *pfile , cpp_hashnode *hn, void *ss_p)
{
  struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p;
  if (hn->type != NT_VOID)
    {
      struct cpp_string news;
      void **slot;
      news.len = ((&(hn)->ident)->len);
      news.text= ((&(hn)->ident)->str);
      slot = htab_find_slot (ss->definedhash, &news, INSERT);
      if (*slot == ((void *)0))
 {
   struct cpp_string *sp;
   unsigned char *text;
   sp = xmalloc (sizeof (struct cpp_string));
   *slot = sp;
   sp->len = ((&(hn)->ident)->len);
   sp->text = text = xmalloc (((&(hn)->ident)->len));
   memcpy (text, ((&(hn)->ident)->str), ((&(hn)->ident)->len));
 }
    }
  return 1;
}
static hashval_t
hashmem (const void *p_p, size_t sz)
{
  const unsigned char *p = (const unsigned char *)p_p;
  size_t i;
  hashval_t h;
  h = 0;
  for (i = 0; i < sz; i++)
    h = h * 67 - (*p++ - 113);
  return h;
}
static hashval_t
cpp_string_hash (const void *a_p)
{
  const struct cpp_string *a = (const struct cpp_string *) a_p;
  return hashmem (a->text, a->len);
}
static int
cpp_string_eq (const void *a_p, const void *b_p)
{
  const struct cpp_string *a = (const struct cpp_string *) a_p;
  const struct cpp_string *b = (const struct cpp_string *) b_p;
  return (a->len == b->len
   && memcmp (a->text, b->text, a->len) == 0);
}
int
cpp_save_state (cpp_reader *r, FILE *f)
{
  r->savedstate = xmalloc (sizeof (struct cpp_savedstate));
  r->savedstate->definedhash = htab_create (100, cpp_string_hash,
         cpp_string_eq, ((void *)0));
  cpp_forall_identifiers (r, save_idents, r->savedstate);
  cpp_forall_identifiers (r, write_macdef, f);
  return 0;
}
static int
count_defs (cpp_reader *pfile , cpp_hashnode *hn, void *ss_p)
{
  struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p;
  switch (hn->type)
    {
    case NT_MACRO:
      if (hn->flags & (1 << 2))
 return 1;
    case NT_VOID:
      {
 struct cpp_string news;
 void **slot;
 news.len = ((&(hn)->ident)->len);
 news.text = ((&(hn)->ident)->str);
 slot = htab_find (ss->definedhash, &news);
 if (slot == ((void *)0))
   {
     ss->hashsize += ((&(hn)->ident)->len) + 1;
     ss->n_defs += 1;
   }
      }
      return 1;
    case NT_ASSERTION:
      return 1;
    default:
      abort ();
    }
}
static int
write_defs (cpp_reader *pfile , cpp_hashnode *hn, void *ss_p)
{
  struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p;
  switch (hn->type)
    {
    case NT_MACRO:
      if (hn->flags & (1 << 2))
 return 1;
    case NT_VOID:
      {
 struct cpp_string news;
 void **slot;
 news.len = ((&(hn)->ident)->len);
 news.text = ((&(hn)->ident)->str);
 slot = htab_find (ss->definedhash, &news);
 if (slot == ((void *)0))
   {
     ss->defs[ss->n_defs] = hn;
     ss->n_defs += 1;
   }
      }
      return 1;
    case NT_ASSERTION:
      return 1;
    default:
      abort ();
    }
}
static int
comp_hashnodes (const void *px, const void *py)
{
  cpp_hashnode *x = *(cpp_hashnode **) px;
  cpp_hashnode *y = *(cpp_hashnode **) py;
  return ustrcmp (((&(x)->ident)->str), ((&(y)->ident)->str));
}
int
cpp_write_pch_deps (cpp_reader *r, FILE *f)
{
  struct macrodef_struct z;
  struct cpp_savedstate *const ss = r->savedstate;
  unsigned char *definedstrs;
  size_t i;
  ss->hashsize = 0;
  ss->n_defs = 0;
  cpp_forall_identifiers (r, count_defs, ss);
  ss->defs = xmalloc (ss->n_defs * sizeof (cpp_hashnode *));
  ss->n_defs = 0;
  cpp_forall_identifiers (r, write_defs, ss);
  qsort (ss->defs, ss->n_defs, sizeof (cpp_hashnode *), &comp_hashnodes);
  definedstrs = ss->definedstrs = xmalloc (ss->hashsize);
  for (i = 0; i < ss->n_defs; ++i)
    {
      size_t len = ((&(ss->defs[i])->ident)->len);
      memcpy (definedstrs, ((&(ss->defs[i])->ident)->str), len + 1);
      definedstrs += len + 1;
    }
  memset (&z, 0, sizeof (z));
  z.definition_length = ss->hashsize;
  if (fwrite_unlocked (&z, sizeof (z), 1, f) != 1
      || fwrite_unlocked (ss->definedstrs, ss->hashsize, 1, f) != 1)
    {
      cpp_errno (r, 0x03, "while writing precompiled header");
      return -1;
    }
  free (ss->definedstrs);
  free (ss);
  r->savedstate = ((void *)0);
  return 0;
}
int
cpp_write_pch_state (cpp_reader *r, FILE *f)
{
  if (!r->deps)
    r->deps = deps_init ();
  if (deps_save (r->deps, f) != 0)
    {
      cpp_errno (r, 0x03, "while writing precompiled header");
      return -1;
    }
  if (! _cpp_save_file_entries (r, f))
    {
      cpp_errno (r, 0x03, "while writing precompiled header");
      return -1;
    }
  return 0;
}
struct ht_node_list
{
  cpp_hashnode **defs;
  size_t n_defs;
  size_t asize;
};
static int
collect_ht_nodes (cpp_reader *pfile , cpp_hashnode *hn,
    void *nl_p)
{
  struct ht_node_list *const nl = (struct ht_node_list *)nl_p;
  if (hn->type != NT_VOID || hn->flags & (1 << 1))
    {
      if (nl->n_defs == nl->asize)
        {
          nl->asize *= 2;
          nl->defs = xrealloc (nl->defs, nl->asize * sizeof (cpp_hashnode *));
        }
      nl->defs[nl->n_defs] = hn;
      ++nl->n_defs;
    }
  return 1;
}
int
cpp_valid_state (cpp_reader *r, const char *name, int fd)
{
  struct macrodef_struct m;
  size_t namebufsz = 256;
  unsigned char *namebuf = xmalloc (namebufsz);
  unsigned char *undeftab = ((void *)0);
  struct ht_node_list nl = { 0, 0, 0 };
  unsigned char *first, *last;
  unsigned int i;
  for (;;)
    {
      cpp_hashnode *h;
      const unsigned char *newdefn;
      if (read (fd, &m, sizeof (m)) != sizeof (m))
 goto error;
      if (m.name_length == 0)
 break;
      if (((r)->opts.preprocessed))
 {
   if (lseek (fd, m.definition_length, 1) == -1)
     goto error;
   continue;
 }
      if (m.definition_length > namebufsz)
 {
   free (namebuf);
   namebufsz = m.definition_length + 256;
   namebuf = xmalloc (namebufsz);
 }
      if ((size_t)read (fd, namebuf, m.definition_length)
   != m.definition_length)
 goto error;
      h = cpp_lookup (r, namebuf, m.name_length);
      if (m.flags & (1 << 1)
   || h->type != NT_MACRO
   || h->flags & (1 << 1))
 {
   if (((r)->opts.warn_invalid_pch))
     cpp_error (r, 0x01,
         "%s: not used because `%.*s' not defined",
         name, m.name_length, namebuf);
   goto fail;
 }
      newdefn = cpp_macro_definition (r, h);
      if (m.definition_length != ustrlen (newdefn)
   || memcmp (namebuf, newdefn, m.definition_length) != 0)
 {
   if (((r)->opts.warn_invalid_pch))
     cpp_error (r, 0x01,
        "%s: not used because `%.*s' defined as `%s' not `%.*s'",
         name, m.name_length, namebuf, newdefn + m.name_length,
         m.definition_length - m.name_length,
         namebuf + m.name_length);
   goto fail;
 }
    }
  free (namebuf);
  namebuf = ((void *)0);
  undeftab = xmalloc (m.definition_length);
  if ((size_t) read (fd, undeftab, m.definition_length) != m.definition_length)
    goto error;
  nl.n_defs = 0;
  nl.asize = 10;
  nl.defs = xmalloc (nl.asize * sizeof (cpp_hashnode *));
  cpp_forall_identifiers (r, &collect_ht_nodes, &nl);
  qsort (nl.defs, nl.n_defs, sizeof (cpp_hashnode *), &comp_hashnodes);
  first = undeftab;
  last = undeftab + m.definition_length;
  i = 0;
  while (first < last && i < nl.n_defs)
    {
      int cmp = ustrcmp (first, ((&(nl.defs[i])->ident)->str));
      if (cmp < 0)
  first += ustrlen (first) + 1;
      else if (cmp > 0)
  ++i;
      else
 {
   if (((r)->opts.warn_invalid_pch))
     cpp_error (r, 0x01,
         "%s: not used because `%s' is defined",
         name, first);
   goto fail;
 }
    }
  free(nl.defs);
  free (undeftab);
  return 0;
 error:
  cpp_errno (r, 0x03, "while reading precompiled header");
  return -1;
 fail:
  if (namebuf != ((void *)0))
    free (namebuf);
  if (undeftab != ((void *)0))
    free (undeftab);
  if (nl.defs != ((void *)0))
    free (nl.defs);
  return 1;
}
struct save_macro_data
{
  uchar **defns;
  size_t count;
  size_t array_size;
  char **saved_pragmas;
};
static int
save_macros (cpp_reader *r, cpp_hashnode *h, void *data_p)
{
  struct save_macro_data *data = (struct save_macro_data *)data_p;
  if (h->type != NT_VOID
      && (h->flags & (1 << 2)) == 0)
    {
      if (data->count == data->array_size)
 {
   data->array_size *= 2;
   data->defns = xrealloc (data->defns, (data->array_size
      * sizeof (uchar *)));
 }
      switch (h->type)
 {
 case NT_ASSERTION:
   return 1;
 case NT_MACRO:
   {
     const uchar * defn = cpp_macro_definition (r, h);
     size_t defnlen = ustrlen (defn);
     data->defns[data->count] = xmemdup (defn, defnlen, defnlen + 2);
     data->defns[data->count][defnlen] = '\n';
   }
   break;
 default:
   abort ();
 }
      data->count++;
    }
  return 1;
}
void
cpp_prepare_state (cpp_reader *r, struct save_macro_data **data)
{
  struct save_macro_data *d = xmalloc (sizeof (struct save_macro_data));
  d->array_size = 512;
  d->defns = xmalloc (d->array_size * sizeof (d->defns[0]));
  d->count = 0;
  cpp_forall_identifiers (r, save_macros, d);
  d->saved_pragmas = _cpp_save_pragma_names (r);
  *data = d;
}
int
cpp_read_state (cpp_reader *r, const char *name, FILE *f,
  struct save_macro_data *data)
{
  size_t i;
  struct lexer_state old_state;
  {
    struct spec_nodes *s = &r->spec_nodes;
    s->n_defined = cpp_lookup (r, (const uchar *)"defined", sizeof "defined" - 1);
    s->n_true = cpp_lookup (r, (const uchar *)"true", sizeof "true" - 1);
    s->n_false = cpp_lookup (r, (const uchar *)"false", sizeof "false" - 1);
    s->n__VA_ARGS__ = cpp_lookup (r, (const uchar *)"__VA_ARGS__", sizeof "__VA_ARGS__" - 1);
  }
  old_state = r->state;
  r->state.in_directive = 1;
  r->state.prevent_expansion = 1;
  r->state.angled_headers = 0;
  for (i = 0; i < data->count; i++)
    {
      cpp_hashnode *h;
      size_t namelen;
      uchar *defn;
      namelen = strcspn (data->defns[i], "( \n");
      h = cpp_lookup (r, data->defns[i], namelen);
      defn = data->defns[i] + namelen;
      if (h->type == NT_VOID)
 {
   if (cpp_push_buffer (r, defn, ustrchr (defn, '\n') - defn, 1)
       != ((void *)0))
     {
       _cpp_clean_line (r);
       if (!_cpp_create_definition (r, h))
  abort ();
       _cpp_pop_buffer (r);
     }
   else
     abort ();
 }
      free (data->defns[i]);
    }
  r->state = old_state;
  _cpp_restore_pragma_names (r, data->saved_pragmas);
  free (data);
  if (deps_restore (r->deps, f, ((r)->opts.restore_pch_deps) ? name : ((void *)0))
      != 0)
    goto error;
  if (! _cpp_read_file_entries (r, f))
    goto error;
  return 0;
 error:
  cpp_errno (r, 0x03, "while reading precompiled header");
  return -1;
}
static unsigned int calc_hash (const unsigned char *, size_t);
static void ht_expand (hash_table *);
static double approx_sqrt (double);
static unsigned int
calc_hash (const unsigned char *str, size_t len)
{
  size_t n = len;
  unsigned int r = 0;
  while (n--)
    r = ((r) * 67 + ((*str++) - 113));;
  return ((r) + (len));
}
hash_table *
ht_create (unsigned int order)
{
  unsigned int nslots = 1 << order;
  hash_table *table;
  table = xcalloc (1, sizeof (hash_table));
  _obstack_begin (&table->stack, 0, 0,
    (void *(*) (long)) xmalloc,
    (void (*) (void *)) free);
  ((&table->stack)->alignment_mask) = 0;
  table->entries = xcalloc (nslots, sizeof (hashnode));
  table->entries_owned = 1;
  table->nslots = nslots;
  return table;
}
void
ht_destroy (hash_table *table)
{
  ( (&table->stack)->temp = (char *) (((void *)0)) - (char *) (&table->stack)->chunk, (((&table->stack)->temp > 0 && (&table->stack)->temp < (&table->stack)->chunk_limit - (char *) (&table->stack)->chunk) ? (int) ((&table->stack)->next_free = (&table->stack)->object_base = (&table->stack)->temp + (char *) (&table->stack)->chunk) : (((obstack_free) ((&table->stack), (&table->stack)->temp + (char *) (&table->stack)->chunk), 0), 0)));
  if (table->entries_owned)
    free (table->entries);
  free (table);
}
hashnode
ht_lookup (hash_table *table, const unsigned char *str, size_t len,
    enum ht_lookup_option insert)
{
  return ht_lookup_with_hash (table, str, len, calc_hash (str, len),
         insert);
}
hashnode
ht_lookup_with_hash (hash_table *table, const unsigned char *str,
       size_t len, unsigned int hash,
       enum ht_lookup_option insert)
{
  unsigned int hash2;
  unsigned int index;
  size_t sizemask;
  hashnode node;
  sizemask = table->nslots - 1;
  index = hash & sizemask;
  table->searches++;
  node = table->entries[index];
  if (node != ((void *)0))
    {
      if (node->hash_value == hash
   && ((node)->len) == (unsigned int) len
   && !memcmp (((node)->str), str, len))
 {
   if (insert == HT_ALLOCED)
     ( (&table->stack)->temp = (char *) ((void *) str) - (char *) (&table->stack)->chunk, (((&table->stack)->temp > 0 && (&table->stack)->temp < (&table->stack)->chunk_limit - (char *) (&table->stack)->chunk) ? (int) ((&table->stack)->next_free = (&table->stack)->object_base = (&table->stack)->temp + (char *) (&table->stack)->chunk) : (((obstack_free) ((&table->stack), (&table->stack)->temp + (char *) (&table->stack)->chunk), 0), 0)));
   return node;
 }
      hash2 = ((hash * 17) & sizemask) | 1;
      for (;;)
 {
   table->collisions++;
   index = (index + hash2) & sizemask;
   node = table->entries[index];
   if (node == ((void *)0))
     break;
   if (node->hash_value == hash
       && ((node)->len) == (unsigned int) len
       && !memcmp (((node)->str), str, len))
     {
       if (insert == HT_ALLOCED)
  ( (&table->stack)->temp = (char *) ((void *) str) - (char *) (&table->stack)->chunk, (((&table->stack)->temp > 0 && (&table->stack)->temp < (&table->stack)->chunk_limit - (char *) (&table->stack)->chunk) ? (int) ((&table->stack)->next_free = (&table->stack)->object_base = (&table->stack)->temp + (char *) (&table->stack)->chunk) : (((obstack_free) ((&table->stack), (&table->stack)->temp + (char *) (&table->stack)->chunk), 0), 0)));
       return node;
     }
 }
    }
  if (insert == HT_NO_INSERT)
    return ((void *)0);
  node = (*table->alloc_node) (table);
  table->entries[index] = node;
  ((node)->len) = (unsigned int) len;
  node->hash_value = hash;
  if (insert == HT_ALLOC)
    ((node)->str) = (( ((&table->stack))->temp = ((len)), ((((&table->stack))->next_free + ((&table->stack))->temp + 1 > ((&table->stack))->chunk_limit) ? (_obstack_newchunk (((&table->stack)), ((&table->stack))->temp + 1), 0) : 0), memcpy ((((&table->stack))->next_free), (((str))), (((&table->stack))->temp)), ((&table->stack))->next_free += ((&table->stack))->temp, *(((&table->stack))->next_free)++ = 0), ( (((&table->stack))->next_free == ((&table->stack))->object_base ? ((((&table->stack))->maybe_empty_object = 1), 0) : 0), ((&table->stack))->temp = ((((&table->stack))->object_base) - (char *) 0), ((&table->stack))->next_free = (((((((&table->stack))->next_free) - (char *) 0)+((&table->stack))->alignment_mask) & ~ (((&table->stack))->alignment_mask)) + (char *) 0), ((((&table->stack))->next_free - (char *) ((&table->stack))->chunk > ((&table->stack))->chunk_limit - (char *) ((&table->stack))->chunk) ? (((&table->stack))->next_free = ((&table->stack))->chunk_limit) : 0), ((&table->stack))->object_base = ((&table->stack))->next_free, ((((&table->stack))->temp) + (char *) 0)));
  else
    ((node)->str) = str;
  if (++table->nelements * 4 >= table->nslots * 3)
    ht_expand (table);
  return node;
}
static void
ht_expand (hash_table *table)
{
  hashnode *nentries, *p, *limit;
  unsigned int size, sizemask;
  size = table->nslots * 2;
  nentries = xcalloc (size, sizeof (hashnode));
  sizemask = size - 1;
  p = table->entries;
  limit = p + table->nslots;
  do
    if (*p)
      {
 unsigned int index, hash, hash2;
 hash = (*p)->hash_value;
 index = hash & sizemask;
 if (nentries[index])
   {
     hash2 = ((hash * 17) & sizemask) | 1;
     do
       {
  index = (index + hash2) & sizemask;
       }
     while (nentries[index]);
   }
 nentries[index] = *p;
      }
  while (++p < limit);
  if (table->entries_owned)
    free (table->entries);
  table->entries_owned = 1;
  table->entries = nentries;
  table->nslots = size;
}
void
ht_forall (hash_table *table, ht_cb cb, const void *v)
{
  hashnode *p, *limit;
  p = table->entries;
  limit = p + table->nslots;
  do
    if (*p)
      {
 if ((*cb) (table->pfile, *p, v) == 0)
   break;
      }
  while (++p < limit);
}
void
ht_load (hash_table *ht, hashnode *entries,
  unsigned int nslots, unsigned int nelements,
  unsigned char own)
{
  if (ht->entries_owned)
    free (ht->entries);
  ht->entries = entries;
  ht->nslots = nslots;
  ht->nelements = nelements;
  ht->entries_owned = own;
}
void
ht_dump_statistics (hash_table *table)
{
  size_t nelts, nids, overhead, headers;
  size_t total_bytes, longest, sum_of_squares;
  double exp_len, exp_len2, exp2_len;
  hashnode *p, *limit;
  total_bytes = longest = sum_of_squares = nids = 0;
  p = table->entries;
  limit = p + table->nslots;
  do
    if (*p)
      {
 size_t n = ((*p)->len);
 total_bytes += n;
 sum_of_squares += n * n;
 if (n > longest)
   longest = n;
 nids++;
      }
  while (++p < limit);
  nelts = table->nelements;
  overhead = _obstack_memory_used (&table->stack) - total_bytes;
  headers = table->nslots * sizeof (hashnode);
  fprintf (stderr, "\nString pool\nentries\t\t%lu\n",
    (unsigned long) nelts);
  fprintf (stderr, "identifiers\t%lu (%.2f%%)\n",
    (unsigned long) nids, nids * 100.0 / nelts);
  fprintf (stderr, "slots\t\t%lu\n",
    (unsigned long) table->nslots);
  fprintf (stderr, "bytes\t\t%lu%c (%lu%c overhead)\n",
    ((unsigned long) ((total_bytes) < 1024*10 ? (total_bytes) : ((total_bytes) < 1024*1024*10 ? (total_bytes) / 1024 : (total_bytes) / (1024*1024)))), ((total_bytes) < 1024*10 ? ' ' : ((total_bytes) < 1024*1024*10 ? 'k' : 'M')),
    ((unsigned long) ((overhead) < 1024*10 ? (overhead) : ((overhead) < 1024*1024*10 ? (overhead) / 1024 : (overhead) / (1024*1024)))), ((overhead) < 1024*10 ? ' ' : ((overhead) < 1024*1024*10 ? 'k' : 'M')));
  fprintf (stderr, "table size\t%lu%c\n",
    ((unsigned long) ((headers) < 1024*10 ? (headers) : ((headers) < 1024*1024*10 ? (headers) / 1024 : (headers) / (1024*1024)))), ((headers) < 1024*10 ? ' ' : ((headers) < 1024*1024*10 ? 'k' : 'M')));
  exp_len = (double)total_bytes / (double)nelts;
  exp2_len = exp_len * exp_len;
  exp_len2 = (double) sum_of_squares / (double) nelts;
  fprintf (stderr, "coll/search\t%.4f\n",
    (double) table->collisions / (double) table->searches);
  fprintf (stderr, "ins/search\t%.4f\n",
    (double) nelts / (double) table->searches);
  fprintf (stderr, "avg. entry\t%.2f bytes (+/- %.2f)\n",
    exp_len, approx_sqrt (exp_len2 - exp2_len));
  fprintf (stderr, "longest entry\t%lu\n",
    (unsigned long) longest);
}
static double
approx_sqrt (double x)
{
  double s, d;
  if (x < 0)
    abort ();
  if (x == 0)
    return 0;
  s = x;
  do
    {
      d = (s * s - x) / (2 * s);
      s -= d;
    }
  while (d > .0001);
  return s;
}
struct block
{
  unsigned int text_len;
  unsigned short arg_index;
  uchar text[1];
};
struct fun_macro
{
  _cpp_buff *buff;
  size_t *args;
  cpp_hashnode *node;
  size_t offset;
  unsigned int line;
  unsigned int argc;
};
enum ls {ls_none = 0,
  ls_fun_open,
  ls_fun_close,
  ls_defined,
  ls_defined_close,
  ls_hash,
  ls_predicate,
  ls_answer};
static const uchar *skip_whitespace_trad (cpp_reader *, const uchar *, int);
static cpp_hashnode *lex_identifier_trad (cpp_reader *, const uchar *);
static const uchar *copy_comment (cpp_reader *, const uchar *, int);
static void check_output_buffer (cpp_reader *, size_t);
static void push_replacement_text (cpp_reader *, cpp_hashnode *);
static unsigned char scan_parameters (cpp_reader *, cpp_macro *);
static unsigned char recursive_macro (cpp_reader *, cpp_hashnode *);
static void save_replacement_text (cpp_reader *, cpp_macro *, unsigned int);
static void maybe_start_funlike (cpp_reader *, cpp_hashnode *, const uchar *,
     struct fun_macro *);
static void save_argument (struct fun_macro *, size_t);
static void replace_args_and_push (cpp_reader *, struct fun_macro *);
static size_t canonicalize_text (uchar *, const uchar *, size_t, uchar *);
static void
check_output_buffer (cpp_reader *pfile, size_t n)
{
  n += 2 + 1;
  if (n > (size_t) (pfile->out.limit - pfile->out.cur))
    {
      size_t size = pfile->out.cur - pfile->out.base;
      size_t new_size = (size + n) * 3 / 2;
      pfile->out.base = xrealloc (pfile->out.base, new_size);
      pfile->out.limit = pfile->out.base + new_size;
      pfile->out.cur = pfile->out.base + size;
    }
}
static void
skip_macro_block_comment (cpp_reader *pfile)
{
  const uchar *cur = pfile->buffer->cur;
  cur++;
  if (*cur == '/')
    cur++;
  while(! (*cur++ == '/' && cur[-2] == '*') )
    ;
  pfile->buffer->cur = cur;
}
static const uchar *
copy_comment (cpp_reader *pfile, const uchar *cur, int in_define)
{
  unsigned char unterminated, copy = 0;
  source_location src_loc = pfile->line_table->highest_line;
  cpp_buffer *buffer = pfile->buffer;
  buffer->cur = cur;
  if (pfile->context->prev)
    unterminated = 0, skip_macro_block_comment (pfile);
  else
    unterminated = _cpp_skip_block_comment (pfile);
  if (unterminated)
    cpp_error_with_line (pfile, 0x03, src_loc, 0,
    "unterminated comment");
  if (pfile->state.in_directive)
    {
      if (in_define)
 {
   if (((pfile)->opts.discard_comments_in_macro_exp))
     pfile->out.cur--;
   else
     copy = 1;
 }
      else
 pfile->out.cur[-1] = ' ';
    }
  else if (((pfile)->opts.discard_comments))
    pfile->out.cur--;
  else
    copy = 1;
  if (copy)
    {
      size_t len = (size_t) (buffer->cur - cur);
      memcpy (pfile->out.cur, cur, len);
      pfile->out.cur += len;
      if (unterminated)
 {
   *pfile->out.cur++ = '*';
   *pfile->out.cur++ = '/';
 }
    }
  return buffer->cur;
}
static const uchar *
skip_whitespace_trad (cpp_reader *pfile, const uchar *cur, int skip_comments)
{
  uchar *out = pfile->out.cur;
  for (;;)
    {
      unsigned int c = *cur++;
      *out++ = c;
      if ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isnvsp)))
 continue;
      if (c == '/' && *cur == '*' && skip_comments)
 {
   pfile->out.cur = out;
   cur = copy_comment (pfile, cur, 0 );
   out = pfile->out.cur;
   continue;
 }
      out--;
      break;
    }
  pfile->out.cur = out;
  return cur - 1;
}
static cpp_hashnode *
lex_identifier_trad (cpp_reader *pfile, const uchar *cur)
{
  size_t len;
  uchar *out = pfile->out.cur;
  cpp_hashnode *result;
  do
    *out++ = *cur++;
  while ((_sch_istable[(*cur) & 0xff] & (unsigned short)(_sch_isidnum)));
  ((pfile->context)->u.trad.cur) = cur;
  len = out - pfile->out.cur;
  result = (cpp_hashnode *) ht_lookup (pfile->hash_table1, pfile->out.cur,
           len, HT_ALLOC);
  pfile->out.cur = out;
  return result;
}
void
_cpp_overlay_buffer (cpp_reader *pfile, const uchar *start, size_t len)
{
  cpp_buffer *buffer = pfile->buffer;
  pfile->overlaid_buffer = buffer;
  pfile->saved_cur = buffer->cur;
  pfile->saved_rlimit = buffer->rlimit;
  pfile->saved_line_base = buffer->next_line;
  buffer->need_line = 0;
  buffer->cur = start;
  buffer->line_base = start;
  buffer->rlimit = start + len;
}
void
_cpp_remove_overlay (cpp_reader *pfile)
{
  cpp_buffer *buffer = pfile->overlaid_buffer;
  buffer->cur = pfile->saved_cur;
  buffer->rlimit = pfile->saved_rlimit;
  buffer->line_base = pfile->saved_line_base;
  buffer->need_line = 1;
  pfile->overlaid_buffer = ((void *)0);
}
unsigned char
_cpp_read_logical_line_trad (cpp_reader *pfile)
{
  do
    {
      if (pfile->buffer->need_line && !_cpp_get_fresh_line (pfile))
 return 0;
    }
  while (!_cpp_scan_out_logical_line (pfile, ((void *)0)) || pfile->state.skipping);
  return pfile->buffer != ((void *)0);
}
static void
maybe_start_funlike (cpp_reader *pfile, cpp_hashnode *node, const uchar *start, struct fun_macro *macro)
{
  unsigned int n = node->value.macro->paramc + 1;
  if (macro->buff)
    _cpp_release_buff (pfile, macro->buff);
  macro->buff = _cpp_get_buff (pfile, n * sizeof (size_t));
  macro->args = (size_t *) ((macro->buff)->cur);
  macro->node = node;
  macro->offset = start - pfile->out.base;
  macro->argc = 0;
}
static void
save_argument (struct fun_macro *macro, size_t offset)
{
  macro->argc++;
  if (macro->argc <= macro->node->value.macro->paramc)
    macro->args[macro->argc] = offset;
}
unsigned char
_cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro)
{
  unsigned char result = 1;
  cpp_context *context;
  const uchar *cur;
  uchar *out;
  struct fun_macro fmacro;
  unsigned int c, paren_depth = 0, quote;
  enum ls lex_state = ls_none;
  unsigned char header_ok;
  const uchar *start_of_input_line;
  fmacro.buff = ((void *)0);
  quote = 0;
  header_ok = pfile->state.angled_headers;
  ((pfile->context)->u.trad.cur) = pfile->buffer->cur;
  ((pfile->context)->u.trad.rlimit) = pfile->buffer->rlimit;
  pfile->out.cur = pfile->out.base;
  pfile->out.first_line = pfile->line_table->highest_line;
  start_of_input_line = pfile->buffer->cur;
 new_context:
  context = pfile->context;
  cur = ((context)->u.trad.cur);
  check_output_buffer (pfile, ((context)->u.trad.rlimit) - cur);
  out = pfile->out.cur;
  for (;;)
    {
      if (!context->prev
   && cur >= pfile->buffer->notes[pfile->buffer->cur_note].pos)
 {
   pfile->buffer->cur = cur;
   _cpp_process_line_notes (pfile, 0);
 }
      c = *cur++;
      *out++ = c;
      switch (c)
 {
 case ' ':
 case '\t':
 case '\f':
 case '\v':
 case '\0':
   continue;
 case '\n':
   if (context->prev)
     {
       pfile->out.cur = out - 1;
       _cpp_pop_context (pfile);
       goto new_context;
     }
   pfile->out.cur = out - 1;
   pfile->buffer->cur = cur;
   pfile->buffer->need_line = 1;
   do { const struct line_maps *line_table = pfile->line_table; const struct line_map *map = &line_table->maps[line_table->used-1]; unsigned int line = ((((line_table->highest_line) - (map)->start_location) >> (map)->column_bits) + (map)->to_line); linemap_line_start (pfile->line_table, line + 1, 0); } while (0);
   if ((lex_state == ls_fun_open || lex_state == ls_fun_close)
       && !pfile->state.in_directive
       && _cpp_get_fresh_line (pfile))
     {
       if (lex_state == ls_fun_close)
  out[-1] = ' ';
       cur = pfile->buffer->cur;
       continue;
     }
   goto done;
 case '<':
   if (header_ok)
     quote = '>';
   break;
 case '>':
   if (c == quote)
     quote = 0;
   break;
 case '"':
 case '\'':
   if (c == quote)
     quote = 0;
   else if (!quote)
     quote = c;
   break;
 case '\\':
   if (*cur == '\\' || *cur == '"' || *cur == '\'')
     *out++ = *cur++;
   break;
 case '/':
   if (!quote && *cur == '*')
     {
       pfile->out.cur = out;
       cur = copy_comment (pfile, cur, macro != 0);
       out = pfile->out.cur;
       continue;
     }
   break;
 case '_':
 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
 case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
 case 's': case 't': case 'u': case 'v': case 'w': case 'x':
 case 'y': case 'z':
 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
 case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
 case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
 case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
 case 'Y': case 'Z':
   if (!pfile->state.skipping && (quote == 0 || macro))
     {
       cpp_hashnode *node;
       uchar *out_start = out - 1;
       pfile->out.cur = out_start;
       node = lex_identifier_trad (pfile, cur - 1);
       out = pfile->out.cur;
       cur = ((context)->u.trad.cur);
       if (node->type == NT_MACRO
    && (lex_state == ls_none || lex_state == ls_fun_open)
    && !pfile->state.prevent_expansion)
  {
    pfile->mi_valid = 0;
    if (! (node->flags & (1 << 2))
        && node->value.macro->fun_like)
      {
        maybe_start_funlike (pfile, node, out_start, &fmacro);
        lex_state = ls_fun_open;
        fmacro.line = pfile->line_table->highest_line;
        continue;
      }
    else if (!recursive_macro (pfile, node))
      {
        pfile->out.cur = out_start;
        push_replacement_text (pfile, node);
        lex_state = ls_none;
        goto new_context;
      }
  }
       else if (macro && (node->flags & (1 << 6)) != 0)
  {
    pfile->out.cur = out_start;
    save_replacement_text (pfile, macro, node->value.arg_index);
    out = pfile->out.base;
  }
       else if (lex_state == ls_hash)
  {
    lex_state = ls_predicate;
    continue;
  }
       else if (pfile->state.in_expression
         && node == pfile->spec_nodes.n_defined)
  {
    lex_state = ls_defined;
    continue;
  }
     }
   break;
 case '(':
   if (quote == 0)
     {
       paren_depth++;
       if (lex_state == ls_fun_open)
  {
    if (recursive_macro (pfile, fmacro.node))
      lex_state = ls_none;
    else
      {
        lex_state = ls_fun_close;
        paren_depth = 1;
        out = pfile->out.base + fmacro.offset;
        fmacro.args[0] = fmacro.offset;
      }
  }
       else if (lex_state == ls_predicate)
  lex_state = ls_answer;
       else if (lex_state == ls_defined)
  lex_state = ls_defined_close;
     }
   break;
 case ',':
   if (quote == 0 && lex_state == ls_fun_close && paren_depth == 1)
     save_argument (&fmacro, out - pfile->out.base);
   break;
 case ')':
   if (quote == 0)
     {
       paren_depth--;
       if (lex_state == ls_fun_close && paren_depth == 0)
  {
    cpp_macro *m = fmacro.node->value.macro;
    m->used = 1;
    lex_state = ls_none;
    save_argument (&fmacro, out - pfile->out.base);
    if (fmacro.argc == 1
        && m->paramc == 0
        && out == pfile->out.base + fmacro.offset + 1)
      fmacro.argc = 0;
    if (_cpp_arguments_ok (pfile, m, fmacro.node, fmacro.argc))
      {
        pfile->out.cur = (pfile->out.base
          + fmacro.offset);
        ((context)->u.trad.cur) = cur;
        replace_args_and_push (pfile, &fmacro);
        goto new_context;
      }
  }
       else if (lex_state == ls_answer || lex_state == ls_defined_close)
  lex_state = ls_none;
     }
   break;
 case '#':
   if (cur - 1 == start_of_input_line
       && !pfile->context->prev
       && !pfile->state.in_directive)
     {
       pfile->out.cur = out;
       cur = skip_whitespace_trad (pfile, cur, 1 );
       out = pfile->out.cur;
       if (*cur == '\n')
  {
    pfile->buffer->need_line = 1;
    do { const struct line_maps *line_table = pfile->line_table; const struct line_map *map = &line_table->maps[line_table->used-1]; unsigned int line = ((((line_table->highest_line) - (map)->start_location) >> (map)->column_bits) + (map)->to_line); linemap_line_start (pfile->line_table, line + 1, 0); } while (0);
    result = 0;
    goto done;
  }
       else
  {
    unsigned char do_it = 0;
    if ((_sch_istable[(*cur) & 0xff] & (unsigned short)(_sch_isdigit))
        && ((pfile)->opts.lang) != CLK_ASM)
      do_it = 1;
    else if (((_sch_istable[(*cur) & 0xff] & (unsigned short)(_sch_isidst)) || ((*cur) == '$' && ((pfile)->opts.dollars_in_ident))))
      do_it = lex_identifier_trad (pfile, cur)->is_directive;
    if (do_it || ((pfile)->opts.lang) != CLK_ASM)
      {
        pfile->buffer->cur = cur;
        _cpp_handle_directive (pfile, 0 );
        result = 0;
        goto done;
      }
  }
     }
   if (pfile->state.in_expression)
     {
       lex_state = ls_hash;
       continue;
     }
   break;
 default:
   break;
 }
      header_ok = 0;
      if (!pfile->state.in_directive)
 pfile->mi_valid = 0;
      if (lex_state == ls_none)
 continue;
      if (lex_state == ls_fun_open)
 lex_state = ls_none;
      else if (lex_state == ls_hash
        || lex_state == ls_predicate
        || lex_state == ls_defined)
 lex_state = ls_none;
    }
 done:
  if (fmacro.buff)
    _cpp_release_buff (pfile, fmacro.buff);
  if (lex_state == ls_fun_close)
    cpp_error_with_line (pfile, 0x03, fmacro.line, 0,
    "unterminated argument list invoking macro \"%s\"",
    ((&(fmacro.node)->ident)->str));
  return result;
}
static void
push_replacement_text (cpp_reader *pfile, cpp_hashnode *node)
{
  size_t len;
  const uchar *text;
  uchar *buf;
  if (node->flags & (1 << 2))
    {
      text = _cpp_builtin_macro_text (pfile, node);
      len = ustrlen (text);
      buf = _cpp_unaligned_alloc (pfile, len + 1);
      memcpy (buf, text, len);
      buf[len]='\n';
      text = buf;
    }
  else
    {
      cpp_macro *macro = node->value.macro;
      macro->used = 1;
      text = macro->exp.text;
      macro->traditional = 1;
      len = macro->count;
    }
  _cpp_push_text_context (pfile, node, text, len);
}
static unsigned char
recursive_macro (cpp_reader *pfile, cpp_hashnode *node)
{
  unsigned char recursing = !!(node->flags & (1 << 5));
  if (recursing && node->value.macro->fun_like)
    {
      size_t depth = 0;
      cpp_context *context = pfile->context;
      do
 {
   depth++;
   if (context->macro == node && depth > 20)
     break;
   context = context->prev;
 }
      while (context);
      recursing = context != ((void *)0);
    }
  if (recursing)
    cpp_error (pfile, 0x03,
        "detected recursion whilst expanding macro \"%s\"",
        ((&(node)->ident)->str));
  return recursing;
}
size_t
_cpp_replacement_text_len (const cpp_macro *macro)
{
  size_t len;
  if (macro->fun_like && (macro->paramc != 0))
    {
      const uchar *exp;
      len = 0;
      for (exp = macro->exp.text;;)
 {
   struct block *b = (struct block *) exp;
   len += b->text_len;
   if (b->arg_index == 0)
     break;
   len += ((&(macro->params[b->arg_index - 1])->ident)->len);
   exp += (((__builtin_offsetof (block, text) + (b->text_len)) + ((__builtin_offsetof (dummy, u)) - 1)) & ~((__builtin_offsetof (dummy, u)) - 1));
 }
    }
  else
    len = macro->count;
  return len;
}
uchar *
_cpp_copy_replacement_text (const cpp_macro *macro, uchar *dest)
{
  if (macro->fun_like && (macro->paramc != 0))
    {
      const uchar *exp;
      for (exp = macro->exp.text;;)
 {
   struct block *b = (struct block *) exp;
   cpp_hashnode *param;
   memcpy (dest, b->text, b->text_len);
   dest += b->text_len;
   if (b->arg_index == 0)
     break;
   param = macro->params[b->arg_index - 1];
   memcpy (dest, ((&(param)->ident)->str), ((&(param)->ident)->len));
   dest += ((&(param)->ident)->len);
   exp += (((__builtin_offsetof (block, text) + (b->text_len)) + ((__builtin_offsetof (dummy, u)) - 1)) & ~((__builtin_offsetof (dummy, u)) - 1));
 }
    }
  else
    {
      memcpy (dest, macro->exp.text, macro->count);
      dest += macro->count;
    }
  return dest;
}
static void
replace_args_and_push (cpp_reader *pfile, struct fun_macro *fmacro)
{
  cpp_macro *macro = fmacro->node->value.macro;
  if (macro->paramc == 0)
    push_replacement_text (pfile, fmacro->node);
  else
    {
      const uchar *exp;
      uchar *p;
      _cpp_buff *buff;
      size_t len = 0;
      for (exp = macro->exp.text;;)
 {
   struct block *b = (struct block *) exp;
   len += b->text_len;
   if (b->arg_index == 0)
     break;
   len += (fmacro->args[b->arg_index]
    - fmacro->args[b->arg_index - 1] - 1);
   exp += (((__builtin_offsetof (block, text) + (b->text_len)) + ((__builtin_offsetof (dummy, u)) - 1)) & ~((__builtin_offsetof (dummy, u)) - 1));
 }
      buff = _cpp_get_buff (pfile, len + 1);
      p = ((buff)->cur);
      for (exp = macro->exp.text;;)
 {
   struct block *b = (struct block *) exp;
   size_t arglen;
   memcpy (p, b->text, b->text_len);
   p += b->text_len;
   if (b->arg_index == 0)
     break;
   arglen = (fmacro->args[b->arg_index]
      - fmacro->args[b->arg_index - 1] - 1);
   memcpy (p, pfile->out.base + fmacro->args[b->arg_index - 1],
    arglen);
   p += arglen;
   exp += (((__builtin_offsetof (block, text) + (b->text_len)) + ((__builtin_offsetof (dummy, u)) - 1)) & ~((__builtin_offsetof (dummy, u)) - 1));
 }
      *p = '\n';
      _cpp_push_text_context (pfile, fmacro->node, ((buff)->cur), len);
      pfile->context->buff = buff;
    }
}
static unsigned char
scan_parameters (cpp_reader *pfile, cpp_macro *macro)
{
  const uchar *cur = ((pfile->context)->u.trad.cur) + 1;
  unsigned char ok;
  for (;;)
    {
      cur = skip_whitespace_trad (pfile, cur, 1 );
      if (((_sch_istable[(*cur) & 0xff] & (unsigned short)(_sch_isidst)) || ((*cur) == '$' && ((pfile)->opts.dollars_in_ident))))
 {
   ok = 0;
   if (_cpp_save_parameter (pfile, macro, lex_identifier_trad (pfile, cur)))
     break;
   cur = skip_whitespace_trad (pfile, ((pfile->context)->u.trad.cur),
     1 );
   if (*cur == ',')
     {
       cur++;
       continue;
     }
   ok = (*cur == ')');
   break;
 }
      ok = (*cur == ')' && macro->paramc == 0);
      break;
    }
  if (!ok)
    cpp_error (pfile, 0x03, "syntax error in macro parameter list");
  ((pfile->context)->u.trad.cur) = cur + (*cur == ')');
  return ok;
}
static void
save_replacement_text (cpp_reader *pfile, cpp_macro *macro,
         unsigned int arg_index)
{
  size_t len = pfile->out.cur - pfile->out.base;
  uchar *exp;
  if (macro->paramc == 0)
    {
      exp = _cpp_unaligned_alloc (pfile, len + 1);
      memcpy (exp, pfile->out.base, len);
      exp[len] = '\n';
      macro->exp.text = exp;
      macro->traditional = 1;
      macro->count = len;
    }
  else
    {
      size_t blen = (((__builtin_offsetof (block, text) + (len)) + ((__builtin_offsetof (dummy, u)) - 1)) & ~((__builtin_offsetof (dummy, u)) - 1));
      struct block *block;
      if (macro->count + blen > (size_t) ((pfile->a_buff)->limit - (pfile->a_buff)->cur))
 _cpp_extend_buff (pfile, &pfile->a_buff, macro->count + blen);
      exp = ((pfile->a_buff)->cur);
      block = (struct block *) (exp + macro->count);
      macro->exp.text = exp;
      macro->traditional = 1;
      block->text_len = len;
      block->arg_index = arg_index;
      memcpy (block->text, pfile->out.base, len);
      pfile->out.cur = pfile->out.base;
      macro->count += blen;
      if (arg_index == 0)
 ((pfile->a_buff)->cur) += macro->count;
    }
}
unsigned char
_cpp_create_trad_definition (cpp_reader *pfile, cpp_macro *macro)
{
  const uchar *cur;
  uchar *limit;
  cpp_context *context = pfile->context;
  pfile->out.cur = pfile->out.base;
  ((context)->u.trad.cur) = pfile->buffer->cur;
  ((context)->u.trad.rlimit) = pfile->buffer->rlimit;
  check_output_buffer (pfile, ((context)->u.trad.rlimit) - ((context)->u.trad.cur));
  if (* ((context)->u.trad.cur) == '(')
    {
      unsigned char ok = scan_parameters (pfile, macro);
      macro->params = (cpp_hashnode **) ((pfile->a_buff)->cur);
      if (!ok)
 macro = ((void *)0);
      else
 {
   ((pfile->a_buff)->cur) = (uchar *) &macro->params[macro->paramc];
   macro->fun_like = 1;
 }
    }
  pfile->buffer->cur
    = skip_whitespace_trad (pfile, ((context)->u.trad.cur),
         ((pfile)->opts.discard_comments_in_macro_exp));
  pfile->state.prevent_expansion++;
  _cpp_scan_out_logical_line (pfile, macro);
  pfile->state.prevent_expansion--;
  if (!macro)
    return 0;
  cur = pfile->out.base;
  limit = pfile->out.cur;
  while (limit > cur && (_sch_istable[(limit[-1]) & 0xff] & (unsigned short)(_sch_iscppsp)))
    limit--;
  pfile->out.cur = limit;
  save_replacement_text (pfile, macro, 0);
  return 1;
}
static size_t
canonicalize_text (uchar *dest, const uchar *src, size_t len, uchar *pquote)
{
  uchar *orig_dest = dest;
  uchar quote = *pquote;
  while (len)
    {
      if ((_sch_istable[(*src) & 0xff] & (unsigned short)(_sch_iscppsp)) && !quote)
 {
   do
     src++, len--;
   while (len && (_sch_istable[(*src) & 0xff] & (unsigned short)(_sch_iscppsp)));
   *dest++ = ' ';
 }
      else
 {
   if (*src == '\'' || *src == '"')
     {
       if (!quote)
  quote = *src;
       else if (quote == *src)
  quote = 0;
     }
   *dest++ = *src++, len--;
 }
    }
  *pquote = quote;
  return dest - orig_dest;
}
unsigned char
_cpp_expansions_different_trad (const cpp_macro *macro1,
    const cpp_macro *macro2)
{
  uchar *p1 = xmalloc (macro1->count + macro2->count);
  uchar *p2 = p1 + macro1->count;
  uchar quote1 = 0, quote2 = 0;
  unsigned char mismatch;
  size_t len1, len2;
  if (macro1->paramc > 0)
    {
      const uchar *exp1 = macro1->exp.text, *exp2 = macro2->exp.text;
      mismatch = 1;
      for (;;)
 {
   struct block *b1 = (struct block *) exp1;
   struct block *b2 = (struct block *) exp2;
   if (b1->arg_index != b2->arg_index)
     break;
   len1 = canonicalize_text (p1, b1->text, b1->text_len, &quote1);
   len2 = canonicalize_text (p2, b2->text, b2->text_len, &quote2);
   if (len1 != len2 || memcmp (p1, p2, len1))
     break;
   if (b1->arg_index == 0)
     {
       mismatch = 0;
       break;
     }
   exp1 += (((__builtin_offsetof (block, text) + (b1->text_len)) + ((__builtin_offsetof (dummy, u)) - 1)) & ~((__builtin_offsetof (dummy, u)) - 1));
   exp2 += (((__builtin_offsetof (block, text) + (b2->text_len)) + ((__builtin_offsetof (dummy, u)) - 1)) & ~((__builtin_offsetof (dummy, u)) - 1));
 }
    }
  else
    {
      len1 = canonicalize_text (p1, macro1->exp.text, macro1->count, &quote1);
      len2 = canonicalize_text (p2, macro2->exp.text, macro2->count, &quote2);
      mismatch = (len1 != len2 || memcmp (p1, p2, len1));
    }
  free (p1);
  return mismatch;
}
extern void warning (const char *, ...);
extern void error (const char *, ...);
extern void fatal (const char *, ...) ;
extern void internal_error (const char *, ...) ;
extern const char *trim_filename (const char *);
extern void fancy_abort (const char *, int, const char *)
    ;
extern int have_error;
extern const char *progname;
struct rtx_def;
typedef struct rtx_def *rtx;
struct rtvec_def;
typedef struct rtvec_def *rtvec;
union tree_node;
typedef union tree_node *tree;
struct cpp_reader;
struct processor_costs {
  const int add;
  const int lea;
  const int shift_var;
  const int shift_const;
  const int mult_init[5];
  const int mult_bit;
  const int divide[5];
  int movsx;
  int movzx;
  const int large_insn;
  const int move_ratio;
  const int movzbl_load;
  const int int_load[3];
  const int int_store[3];
  const int fp_move;
  const int fp_load[3];
  const int fp_store[3];
  const int mmx_move;
  const int mmx_load[2];
  const int mmx_store[2];
  const int sse_move;
  const int sse_load[3];
  const int sse_store[3];
  const int mmxsse_to_integer;
  const int prefetch_block;
  const int simultaneous_prefetches;
  const int branch_cost;
  const int fadd;
  const int fmul;
  const int fdiv;
  const int fabs;
  const int fchs;
  const int fsqrt;
};
extern const struct processor_costs *ix86_cost;
extern int target_flags;
extern const int x86_use_leave, x86_push_memory, x86_zero_extend_with_and;
extern const int x86_use_bit_test, x86_cmove, x86_deep_branch;
extern const int x86_branch_hints, x86_unroll_strlen;
extern const int x86_double_with_add, x86_partial_reg_stall, x86_movx;
extern const int x86_use_loop, x86_use_fiop, x86_use_mov0;
extern const int x86_use_cltd, x86_read_modify_write;
extern const int x86_read_modify, x86_split_long_moves;
extern const int x86_promote_QImode, x86_single_stringop, x86_fast_prefix;
extern const int x86_himode_math, x86_qimode_math, x86_promote_qi_regs;
extern const int x86_promote_hi_regs, x86_integer_DFmode_moves;
extern const int x86_add_esp_4, x86_add_esp_8, x86_sub_esp_4, x86_sub_esp_8;
extern const int x86_partial_reg_dependency, x86_memory_mismatch_stall;
extern const int x86_accumulate_outgoing_args, x86_prologue_using_move;
extern const int x86_epilogue_using_move, x86_decompose_lea;
extern const int x86_arch_always_fancy_math_387, x86_shift1;
extern const int x86_sse_partial_reg_dependency, x86_sse_partial_regs;
extern const int x86_sse_typeless_stores, x86_sse_load0_by_pxor;
extern const int x86_use_ffreep, x86_sse_partial_regs_for_cvtsd2ss;
extern const int x86_inter_unit_moves;
extern int x86_prefetch_sse;
enum reg_class
{
  NO_REGS,
  AREG, DREG, CREG, BREG, SIREG, DIREG,
  AD_REGS,
  Q_REGS,
  NON_Q_REGS,
  INDEX_REGS,
  LEGACY_REGS,
  GENERAL_REGS,
  FP_TOP_REG, FP_SECOND_REG,
  FLOAT_REGS,
  SSE_REGS,
  MMX_REGS,
  FP_TOP_SSE_REGS,
  FP_SECOND_SSE_REGS,
  FLOAT_SSE_REGS,
  FLOAT_INT_REGS,
  INT_SSE_REGS,
  FLOAT_INT_SSE_REGS,
  ALL_REGS, LIM_REG_CLASSES
};
typedef struct ix86_args {
  int words;
  int nregs;
  int regno;
  int fastcall;
  int sse_words;
  int sse_nregs;
  int warn_sse;
  int warn_mmx;
  int sse_regno;
  int mmx_words;
  int mmx_nregs;
  int mmx_regno;
  int maybe_vaarg;
} CUMULATIVE_ARGS;
enum ix86_builtins
{
  IX86_BUILTIN_ADDPS,
  IX86_BUILTIN_ADDSS,
  IX86_BUILTIN_DIVPS,
  IX86_BUILTIN_DIVSS,
  IX86_BUILTIN_MULPS,
  IX86_BUILTIN_MULSS,
  IX86_BUILTIN_SUBPS,
  IX86_BUILTIN_SUBSS,
  IX86_BUILTIN_CMPEQPS,
  IX86_BUILTIN_CMPLTPS,
  IX86_BUILTIN_CMPLEPS,
  IX86_BUILTIN_CMPGTPS,
  IX86_BUILTIN_CMPGEPS,
  IX86_BUILTIN_CMPNEQPS,
  IX86_BUILTIN_CMPNLTPS,
  IX86_BUILTIN_CMPNLEPS,
  IX86_BUILTIN_CMPNGTPS,
  IX86_BUILTIN_CMPNGEPS,
  IX86_BUILTIN_CMPORDPS,
  IX86_BUILTIN_CMPUNORDPS,
  IX86_BUILTIN_CMPNEPS,
  IX86_BUILTIN_CMPEQSS,
  IX86_BUILTIN_CMPLTSS,
  IX86_BUILTIN_CMPLESS,
  IX86_BUILTIN_CMPNEQSS,
  IX86_BUILTIN_CMPNLTSS,
  IX86_BUILTIN_CMPNLESS,
  IX86_BUILTIN_CMPORDSS,
  IX86_BUILTIN_CMPUNORDSS,
  IX86_BUILTIN_CMPNESS,
  IX86_BUILTIN_COMIEQSS,
  IX86_BUILTIN_COMILTSS,
  IX86_BUILTIN_COMILESS,
  IX86_BUILTIN_COMIGTSS,
  IX86_BUILTIN_COMIGESS,
  IX86_BUILTIN_COMINEQSS,
  IX86_BUILTIN_UCOMIEQSS,
  IX86_BUILTIN_UCOMILTSS,
  IX86_BUILTIN_UCOMILESS,
  IX86_BUILTIN_UCOMIGTSS,
  IX86_BUILTIN_UCOMIGESS,
  IX86_BUILTIN_UCOMINEQSS,
  IX86_BUILTIN_CVTPI2PS,
  IX86_BUILTIN_CVTPS2PI,
  IX86_BUILTIN_CVTSI2SS,
  IX86_BUILTIN_CVTSI642SS,
  IX86_BUILTIN_CVTSS2SI,
  IX86_BUILTIN_CVTSS2SI64,
  IX86_BUILTIN_CVTTPS2PI,
  IX86_BUILTIN_CVTTSS2SI,
  IX86_BUILTIN_CVTTSS2SI64,
  IX86_BUILTIN_MAXPS,
  IX86_BUILTIN_MAXSS,
  IX86_BUILTIN_MINPS,
  IX86_BUILTIN_MINSS,
  IX86_BUILTIN_LOADAPS,
  IX86_BUILTIN_LOADUPS,
  IX86_BUILTIN_STOREAPS,
  IX86_BUILTIN_STOREUPS,
  IX86_BUILTIN_LOADSS,
  IX86_BUILTIN_STORESS,
  IX86_BUILTIN_MOVSS,
  IX86_BUILTIN_MOVHLPS,
  IX86_BUILTIN_MOVLHPS,
  IX86_BUILTIN_LOADHPS,
  IX86_BUILTIN_LOADLPS,
  IX86_BUILTIN_STOREHPS,
  IX86_BUILTIN_STORELPS,
  IX86_BUILTIN_MASKMOVQ,
  IX86_BUILTIN_MOVMSKPS,
  IX86_BUILTIN_PMOVMSKB,
  IX86_BUILTIN_MOVNTPS,
  IX86_BUILTIN_MOVNTQ,
  IX86_BUILTIN_LOADDQA,
  IX86_BUILTIN_LOADDQU,
  IX86_BUILTIN_STOREDQA,
  IX86_BUILTIN_STOREDQU,
  IX86_BUILTIN_MOVQ,
  IX86_BUILTIN_LOADD,
  IX86_BUILTIN_STORED,
  IX86_BUILTIN_CLRTI,
  IX86_BUILTIN_PACKSSWB,
  IX86_BUILTIN_PACKSSDW,
  IX86_BUILTIN_PACKUSWB,
  IX86_BUILTIN_PADDB,
  IX86_BUILTIN_PADDW,
  IX86_BUILTIN_PADDD,
  IX86_BUILTIN_PADDQ,
  IX86_BUILTIN_PADDSB,
  IX86_BUILTIN_PADDSW,
  IX86_BUILTIN_PADDUSB,
  IX86_BUILTIN_PADDUSW,
  IX86_BUILTIN_PSUBB,
  IX86_BUILTIN_PSUBW,
  IX86_BUILTIN_PSUBD,
  IX86_BUILTIN_PSUBQ,
  IX86_BUILTIN_PSUBSB,
  IX86_BUILTIN_PSUBSW,
  IX86_BUILTIN_PSUBUSB,
  IX86_BUILTIN_PSUBUSW,
  IX86_BUILTIN_PAND,
  IX86_BUILTIN_PANDN,
  IX86_BUILTIN_POR,
  IX86_BUILTIN_PXOR,
  IX86_BUILTIN_PAVGB,
  IX86_BUILTIN_PAVGW,
  IX86_BUILTIN_PCMPEQB,
  IX86_BUILTIN_PCMPEQW,
  IX86_BUILTIN_PCMPEQD,
  IX86_BUILTIN_PCMPGTB,
  IX86_BUILTIN_PCMPGTW,
  IX86_BUILTIN_PCMPGTD,
  IX86_BUILTIN_PEXTRW,
  IX86_BUILTIN_PINSRW,
  IX86_BUILTIN_PMADDWD,
  IX86_BUILTIN_PMAXSW,
  IX86_BUILTIN_PMAXUB,
  IX86_BUILTIN_PMINSW,
  IX86_BUILTIN_PMINUB,
  IX86_BUILTIN_PMULHUW,
  IX86_BUILTIN_PMULHW,
  IX86_BUILTIN_PMULLW,
  IX86_BUILTIN_PSADBW,
  IX86_BUILTIN_PSHUFW,
  IX86_BUILTIN_PSLLW,
  IX86_BUILTIN_PSLLD,
  IX86_BUILTIN_PSLLQ,
  IX86_BUILTIN_PSRAW,
  IX86_BUILTIN_PSRAD,
  IX86_BUILTIN_PSRLW,
  IX86_BUILTIN_PSRLD,
  IX86_BUILTIN_PSRLQ,
  IX86_BUILTIN_PSLLWI,
  IX86_BUILTIN_PSLLDI,
  IX86_BUILTIN_PSLLQI,
  IX86_BUILTIN_PSRAWI,
  IX86_BUILTIN_PSRADI,
  IX86_BUILTIN_PSRLWI,
  IX86_BUILTIN_PSRLDI,
  IX86_BUILTIN_PSRLQI,
  IX86_BUILTIN_PUNPCKHBW,
  IX86_BUILTIN_PUNPCKHWD,
  IX86_BUILTIN_PUNPCKHDQ,
  IX86_BUILTIN_PUNPCKLBW,
  IX86_BUILTIN_PUNPCKLWD,
  IX86_BUILTIN_PUNPCKLDQ,
  IX86_BUILTIN_SHUFPS,
  IX86_BUILTIN_RCPPS,
  IX86_BUILTIN_RCPSS,
  IX86_BUILTIN_RSQRTPS,
  IX86_BUILTIN_RSQRTSS,
  IX86_BUILTIN_SQRTPS,
  IX86_BUILTIN_SQRTSS,
  IX86_BUILTIN_UNPCKHPS,
  IX86_BUILTIN_UNPCKLPS,
  IX86_BUILTIN_ANDPS,
  IX86_BUILTIN_ANDNPS,
  IX86_BUILTIN_ORPS,
  IX86_BUILTIN_XORPS,
  IX86_BUILTIN_EMMS,
  IX86_BUILTIN_LDMXCSR,
  IX86_BUILTIN_STMXCSR,
  IX86_BUILTIN_SFENCE,
  IX86_BUILTIN_FEMMS,
  IX86_BUILTIN_PAVGUSB,
  IX86_BUILTIN_PF2ID,
  IX86_BUILTIN_PFACC,
  IX86_BUILTIN_PFADD,
  IX86_BUILTIN_PFCMPEQ,
  IX86_BUILTIN_PFCMPGE,
  IX86_BUILTIN_PFCMPGT,
  IX86_BUILTIN_PFMAX,
  IX86_BUILTIN_PFMIN,
  IX86_BUILTIN_PFMUL,
  IX86_BUILTIN_PFRCP,
  IX86_BUILTIN_PFRCPIT1,
  IX86_BUILTIN_PFRCPIT2,
  IX86_BUILTIN_PFRSQIT1,
  IX86_BUILTIN_PFRSQRT,
  IX86_BUILTIN_PFSUB,
  IX86_BUILTIN_PFSUBR,
  IX86_BUILTIN_PI2FD,
  IX86_BUILTIN_PMULHRW,
  IX86_BUILTIN_PF2IW,
  IX86_BUILTIN_PFNACC,
  IX86_BUILTIN_PFPNACC,
  IX86_BUILTIN_PI2FW,
  IX86_BUILTIN_PSWAPDSI,
  IX86_BUILTIN_PSWAPDSF,
  IX86_BUILTIN_SSE_ZERO,
  IX86_BUILTIN_MMX_ZERO,
  IX86_BUILTIN_ADDPD,
  IX86_BUILTIN_ADDSD,
  IX86_BUILTIN_DIVPD,
  IX86_BUILTIN_DIVSD,
  IX86_BUILTIN_MULPD,
  IX86_BUILTIN_MULSD,
  IX86_BUILTIN_SUBPD,
  IX86_BUILTIN_SUBSD,
  IX86_BUILTIN_CMPEQPD,
  IX86_BUILTIN_CMPLTPD,
  IX86_BUILTIN_CMPLEPD,
  IX86_BUILTIN_CMPGTPD,
  IX86_BUILTIN_CMPGEPD,
  IX86_BUILTIN_CMPNEQPD,
  IX86_BUILTIN_CMPNLTPD,
  IX86_BUILTIN_CMPNLEPD,
  IX86_BUILTIN_CMPNGTPD,
  IX86_BUILTIN_CMPNGEPD,
  IX86_BUILTIN_CMPORDPD,
  IX86_BUILTIN_CMPUNORDPD,
  IX86_BUILTIN_CMPNEPD,
  IX86_BUILTIN_CMPEQSD,
  IX86_BUILTIN_CMPLTSD,
  IX86_BUILTIN_CMPLESD,
  IX86_BUILTIN_CMPNEQSD,
  IX86_BUILTIN_CMPNLTSD,
  IX86_BUILTIN_CMPNLESD,
  IX86_BUILTIN_CMPORDSD,
  IX86_BUILTIN_CMPUNORDSD,
  IX86_BUILTIN_CMPNESD,
  IX86_BUILTIN_COMIEQSD,
  IX86_BUILTIN_COMILTSD,
  IX86_BUILTIN_COMILESD,
  IX86_BUILTIN_COMIGTSD,
  IX86_BUILTIN_COMIGESD,
  IX86_BUILTIN_COMINEQSD,
  IX86_BUILTIN_UCOMIEQSD,
  IX86_BUILTIN_UCOMILTSD,
  IX86_BUILTIN_UCOMILESD,
  IX86_BUILTIN_UCOMIGTSD,
  IX86_BUILTIN_UCOMIGESD,
  IX86_BUILTIN_UCOMINEQSD,
  IX86_BUILTIN_MAXPD,
  IX86_BUILTIN_MAXSD,
  IX86_BUILTIN_MINPD,
  IX86_BUILTIN_MINSD,
  IX86_BUILTIN_ANDPD,
  IX86_BUILTIN_ANDNPD,
  IX86_BUILTIN_ORPD,
  IX86_BUILTIN_XORPD,
  IX86_BUILTIN_SQRTPD,
  IX86_BUILTIN_SQRTSD,
  IX86_BUILTIN_UNPCKHPD,
  IX86_BUILTIN_UNPCKLPD,
  IX86_BUILTIN_SHUFPD,
  IX86_BUILTIN_LOADAPD,
  IX86_BUILTIN_LOADUPD,
  IX86_BUILTIN_STOREAPD,
  IX86_BUILTIN_STOREUPD,
  IX86_BUILTIN_LOADSD,
  IX86_BUILTIN_STORESD,
  IX86_BUILTIN_MOVSD,
  IX86_BUILTIN_LOADHPD,
  IX86_BUILTIN_LOADLPD,
  IX86_BUILTIN_STOREHPD,
  IX86_BUILTIN_STORELPD,
  IX86_BUILTIN_CVTDQ2PD,
  IX86_BUILTIN_CVTDQ2PS,
  IX86_BUILTIN_CVTPD2DQ,
  IX86_BUILTIN_CVTPD2PI,
  IX86_BUILTIN_CVTPD2PS,
  IX86_BUILTIN_CVTTPD2DQ,
  IX86_BUILTIN_CVTTPD2PI,
  IX86_BUILTIN_CVTPI2PD,
  IX86_BUILTIN_CVTSI2SD,
  IX86_BUILTIN_CVTSI642SD,
  IX86_BUILTIN_CVTSD2SI,
  IX86_BUILTIN_CVTSD2SI64,
  IX86_BUILTIN_CVTSD2SS,
  IX86_BUILTIN_CVTSS2SD,
  IX86_BUILTIN_CVTTSD2SI,
  IX86_BUILTIN_CVTTSD2SI64,
  IX86_BUILTIN_CVTPS2DQ,
  IX86_BUILTIN_CVTPS2PD,
  IX86_BUILTIN_CVTTPS2DQ,
  IX86_BUILTIN_MOVNTI,
  IX86_BUILTIN_MOVNTPD,
  IX86_BUILTIN_MOVNTDQ,
  IX86_BUILTIN_SETPD1,
  IX86_BUILTIN_SETPD,
  IX86_BUILTIN_CLRPD,
  IX86_BUILTIN_SETRPD,
  IX86_BUILTIN_LOADPD1,
  IX86_BUILTIN_LOADRPD,
  IX86_BUILTIN_STOREPD1,
  IX86_BUILTIN_STORERPD,
  IX86_BUILTIN_MASKMOVDQU,
  IX86_BUILTIN_MOVMSKPD,
  IX86_BUILTIN_PMOVMSKB128,
  IX86_BUILTIN_MOVQ2DQ,
  IX86_BUILTIN_MOVDQ2Q,
  IX86_BUILTIN_PACKSSWB128,
  IX86_BUILTIN_PACKSSDW128,
  IX86_BUILTIN_PACKUSWB128,
  IX86_BUILTIN_PADDB128,
  IX86_BUILTIN_PADDW128,
  IX86_BUILTIN_PADDD128,
  IX86_BUILTIN_PADDQ128,
  IX86_BUILTIN_PADDSB128,
  IX86_BUILTIN_PADDSW128,
  IX86_BUILTIN_PADDUSB128,
  IX86_BUILTIN_PADDUSW128,
  IX86_BUILTIN_PSUBB128,
  IX86_BUILTIN_PSUBW128,
  IX86_BUILTIN_PSUBD128,
  IX86_BUILTIN_PSUBQ128,
  IX86_BUILTIN_PSUBSB128,
  IX86_BUILTIN_PSUBSW128,
  IX86_BUILTIN_PSUBUSB128,
  IX86_BUILTIN_PSUBUSW128,
  IX86_BUILTIN_PAND128,
  IX86_BUILTIN_PANDN128,
  IX86_BUILTIN_POR128,
  IX86_BUILTIN_PXOR128,
  IX86_BUILTIN_PAVGB128,
  IX86_BUILTIN_PAVGW128,
  IX86_BUILTIN_PCMPEQB128,
  IX86_BUILTIN_PCMPEQW128,
  IX86_BUILTIN_PCMPEQD128,
  IX86_BUILTIN_PCMPGTB128,
  IX86_BUILTIN_PCMPGTW128,
  IX86_BUILTIN_PCMPGTD128,
  IX86_BUILTIN_PEXTRW128,
  IX86_BUILTIN_PINSRW128,
  IX86_BUILTIN_PMADDWD128,
  IX86_BUILTIN_PMAXSW128,
  IX86_BUILTIN_PMAXUB128,
  IX86_BUILTIN_PMINSW128,
  IX86_BUILTIN_PMINUB128,
  IX86_BUILTIN_PMULUDQ,
  IX86_BUILTIN_PMULUDQ128,
  IX86_BUILTIN_PMULHUW128,
  IX86_BUILTIN_PMULHW128,
  IX86_BUILTIN_PMULLW128,
  IX86_BUILTIN_PSADBW128,
  IX86_BUILTIN_PSHUFHW,
  IX86_BUILTIN_PSHUFLW,
  IX86_BUILTIN_PSHUFD,
  IX86_BUILTIN_PSLLW128,
  IX86_BUILTIN_PSLLD128,
  IX86_BUILTIN_PSLLQ128,
  IX86_BUILTIN_PSRAW128,
  IX86_BUILTIN_PSRAD128,
  IX86_BUILTIN_PSRLW128,
  IX86_BUILTIN_PSRLD128,
  IX86_BUILTIN_PSRLQ128,
  IX86_BUILTIN_PSLLDQI128,
  IX86_BUILTIN_PSLLWI128,
  IX86_BUILTIN_PSLLDI128,
  IX86_BUILTIN_PSLLQI128,
  IX86_BUILTIN_PSRAWI128,
  IX86_BUILTIN_PSRADI128,
  IX86_BUILTIN_PSRLDQI128,
  IX86_BUILTIN_PSRLWI128,
  IX86_BUILTIN_PSRLDI128,
  IX86_BUILTIN_PSRLQI128,
  IX86_BUILTIN_PUNPCKHBW128,
  IX86_BUILTIN_PUNPCKHWD128,
  IX86_BUILTIN_PUNPCKHDQ128,
  IX86_BUILTIN_PUNPCKHQDQ128,
  IX86_BUILTIN_PUNPCKLBW128,
  IX86_BUILTIN_PUNPCKLWD128,
  IX86_BUILTIN_PUNPCKLDQ128,
  IX86_BUILTIN_PUNPCKLQDQ128,
  IX86_BUILTIN_CLFLUSH,
  IX86_BUILTIN_MFENCE,
  IX86_BUILTIN_LFENCE,
  IX86_BUILTIN_ADDSUBPS,
  IX86_BUILTIN_HADDPS,
  IX86_BUILTIN_HSUBPS,
  IX86_BUILTIN_MOVSHDUP,
  IX86_BUILTIN_MOVSLDUP,
  IX86_BUILTIN_ADDSUBPD,
  IX86_BUILTIN_HADDPD,
  IX86_BUILTIN_HSUBPD,
  IX86_BUILTIN_LOADDDUP,
  IX86_BUILTIN_MOVDDUP,
  IX86_BUILTIN_LDDQU,
  IX86_BUILTIN_MONITOR,
  IX86_BUILTIN_MWAIT,
  IX86_BUILTIN_MAX
};
extern int const dbx_register_map[53];
extern int const dbx64_register_map[53];
extern int const svr4_dbx_register_map[53];
enum processor_type
{
  PROCESSOR_I386,
  PROCESSOR_I486,
  PROCESSOR_PENTIUM,
  PROCESSOR_PENTIUMPRO,
  PROCESSOR_K6,
  PROCESSOR_ATHLON,
  PROCESSOR_PENTIUM4,
  PROCESSOR_K8,
  PROCESSOR_NOCONA,
  PROCESSOR_max
};
extern enum processor_type ix86_tune;
extern const char *ix86_tune_string;
extern enum processor_type ix86_arch;
extern const char *ix86_arch_string;
enum fpmath_unit
{
  FPMATH_387 = 1,
  FPMATH_SSE = 2
};
extern enum fpmath_unit ix86_fpmath;
extern const char *ix86_fpmath_string;
enum tls_dialect
{
  TLS_DIALECT_GNU,
  TLS_DIALECT_SUN
};
extern enum tls_dialect ix86_tls_dialect;
extern const char *ix86_tls_dialect_string;
enum cmodel {
  CM_32,
  CM_SMALL,
  CM_KERNEL,
  CM_MEDIUM,
  CM_LARGE,
  CM_SMALL_PIC
};
extern enum cmodel ix86_cmodel;
extern const char *ix86_cmodel_string;
enum asm_dialect {
  ASM_ATT,
  ASM_INTEL
};
extern const char *ix86_asm_string;
extern enum asm_dialect ix86_asm_dialect;
extern int ix86_regparm;
extern const char *ix86_regparm_string;
extern int ix86_preferred_stack_boundary;
extern const char *ix86_preferred_stack_boundary_string;
extern int ix86_branch_cost;
extern const char *ix86_branch_cost_string;
extern const char *ix86_debug_arg_string;
extern const char *ix86_debug_addr_string;
extern const char *ix86_align_loops_string;
extern const char *ix86_align_jumps_string;
extern const char *ix86_align_funcs_string;
extern enum reg_class const regclass_map[53];
extern rtx ix86_compare_op0;
extern rtx ix86_compare_op1;
enum fp_cw_mode {FP_CW_STORED, FP_CW_UNINITIALIZED, FP_CW_ANY};
struct machine_function
{
  struct stack_local_entry *stack_locals;
  const char *some_ld_name;
  int save_varrargs_registers;
  int accesses_prev_frame;
  int optimize_mode_switching;
  int use_fast_prologue_epilogue;
  int use_fast_prologue_epilogue_nregs;
};
extern rtx gen_cmpdi_ccno_1_rex64 (rtx, rtx);
extern rtx gen_cmpdi_1_insn_rex64 (rtx, rtx);
extern rtx gen_cmpqi_ext_3_insn (rtx, rtx);
extern rtx gen_cmpqi_ext_3_insn_rex64 (rtx, rtx);
extern rtx gen_x86_fnstsw_1 (rtx);
extern rtx gen_x86_sahf_1 (rtx);
extern rtx gen_popsi1 (rtx);
extern rtx gen_movsi_insv_1 (rtx, rtx);
extern rtx gen_movdi_insv_1_rex64 (rtx, rtx);
extern rtx gen_pushdi2_rex64 (rtx, rtx);
extern rtx gen_popdi1 (rtx);
extern rtx gen_swapxf (rtx, rtx);
extern rtx gen_zero_extendhisi2_and (rtx, rtx);
extern rtx gen_zero_extendsidi2_32 (rtx, rtx);
extern rtx gen_zero_extendsidi2_rex64 (rtx, rtx);
extern rtx gen_zero_extendhidi2 (rtx, rtx);
extern rtx gen_zero_extendqidi2 (rtx, rtx);
extern rtx gen_extendsidi2_rex64 (rtx, rtx);
extern rtx gen_extendhidi2 (rtx, rtx);
extern rtx gen_extendqidi2 (rtx, rtx);
extern rtx gen_extendhisi2 (rtx, rtx);
extern rtx gen_extendqihi2 (rtx, rtx);
extern rtx gen_extendqisi2 (rtx, rtx);
extern rtx gen_truncdfsf2_noop (rtx, rtx);
extern rtx gen_truncdfsf2_sse_only (rtx, rtx);
extern rtx gen_truncxfsf2_noop (rtx, rtx);
extern rtx gen_truncxfdf2_noop (rtx, rtx);
extern rtx gen_fix_truncdi_nomemory (rtx, rtx, rtx, rtx, rtx);
extern rtx gen_fix_truncdi_memory (rtx, rtx, rtx, rtx);
extern rtx gen_fix_truncsfdi_sse (rtx, rtx);
extern rtx gen_fix_truncdfdi_sse (rtx, rtx);
extern rtx gen_fix_truncsi_nomemory (rtx, rtx, rtx, rtx, rtx);
extern rtx gen_fix_truncsi_memory (rtx, rtx, rtx, rtx);
extern rtx gen_fix_truncsfsi_sse (rtx, rtx);
extern rtx gen_fix_truncdfsi_sse (rtx, rtx);
extern rtx gen_fix_trunchi_nomemory (rtx, rtx, rtx, rtx, rtx);
extern rtx gen_fix_trunchi_memory (rtx, rtx, rtx, rtx);
extern rtx gen_x86_fnstcw_1 (rtx);
extern rtx gen_x86_fldcw_1 (rtx);
extern rtx gen_floathixf2 (rtx, rtx);
extern rtx gen_floatsixf2 (rtx, rtx);
extern rtx gen_floatdixf2 (rtx, rtx);
extern rtx gen_adddi3_carry_rex64 (rtx, rtx, rtx, rtx);
extern rtx gen_addqi3_carry (rtx, rtx, rtx, rtx);
extern rtx gen_addhi3_carry (rtx, rtx, rtx, rtx);
extern rtx gen_addsi3_carry (rtx, rtx, rtx, rtx);
extern rtx gen_addqi3_cc (rtx, rtx, rtx);
extern rtx gen_addsi_1_zext (rtx, rtx, rtx);
extern rtx gen_addqi_ext_1 (rtx, rtx, rtx);
extern rtx gen_subdi3_carry_rex64 (rtx, rtx, rtx, rtx);
extern rtx gen_subqi3_carry (rtx, rtx, rtx, rtx);
extern rtx gen_subhi3_carry (rtx, rtx, rtx, rtx);
extern rtx gen_subsi3_carry (rtx, rtx, rtx, rtx);
extern rtx gen_subsi3_carry_zext (rtx, rtx, rtx, rtx);
extern rtx gen_divqi3 (rtx, rtx, rtx);
extern rtx gen_udivqi3 (rtx, rtx, rtx);
extern rtx gen_divmodhi4 (rtx, rtx, rtx, rtx);
extern rtx gen_udivmoddi4 (rtx, rtx, rtx, rtx);
extern rtx gen_udivmodsi4 (rtx, rtx, rtx, rtx);
extern rtx gen_testsi_1 (rtx, rtx);
extern rtx gen_andqi_ext_0 (rtx, rtx, rtx);
extern rtx gen_iorqi_ext_0 (rtx, rtx, rtx);
extern rtx gen_xorqi_ext_0 (rtx, rtx, rtx);
extern rtx gen_negsf2_memory (rtx, rtx);
extern rtx gen_negsf2_ifs (rtx, rtx, rtx);
extern rtx gen_negdf2_memory (rtx, rtx);
extern rtx gen_negdf2_ifs (rtx, rtx, rtx);
extern rtx gen_abssf2_memory (rtx, rtx);
extern rtx gen_abssf2_ifs (rtx, rtx, rtx);
extern rtx gen_absdf2_memory (rtx, rtx);
extern rtx gen_absdf2_ifs (rtx, rtx, rtx);
extern rtx gen_ashldi3_1 (rtx, rtx, rtx);
extern rtx gen_x86_shld_1 (rtx, rtx, rtx);
extern rtx gen_ashrdi3_63_rex64 (rtx, rtx, rtx);
extern rtx gen_ashrdi3_1 (rtx, rtx, rtx);
extern rtx gen_x86_shrd_1 (rtx, rtx, rtx);
extern rtx gen_ashrsi3_31 (rtx, rtx, rtx);
extern rtx gen_lshrdi3_1 (rtx, rtx, rtx);
extern rtx gen_setcc_2 (rtx, rtx);
extern rtx gen_jump (rtx);
extern rtx gen_doloop_end_internal (rtx, rtx, rtx);
extern rtx gen_blockage (rtx);
extern rtx gen_return_internal (void);
extern rtx gen_return_internal_long (void);
extern rtx gen_return_pop_internal (rtx);
extern rtx gen_return_indirect_internal (rtx);
extern rtx gen_nop (void);
extern rtx gen_align (rtx);
extern rtx gen_set_got (rtx);
extern rtx gen_eh_return_si (rtx);
extern rtx gen_eh_return_di (rtx);
extern rtx gen_leave (void);
extern rtx gen_leave_rex64 (void);
extern rtx gen_ctzsi2 (rtx, rtx);
extern rtx gen_ctzdi2 (rtx, rtx);
extern rtx gen_sqrtsf2_1 (rtx, rtx);
extern rtx gen_sqrtsf2_1_sse_only (rtx, rtx);
extern rtx gen_sqrtsf2_i387 (rtx, rtx);
extern rtx gen_sqrtdf2_1 (rtx, rtx);
extern rtx gen_sqrtdf2_1_sse_only (rtx, rtx);
extern rtx gen_sqrtdf2_i387 (rtx, rtx);
extern rtx gen_sqrtxf2 (rtx, rtx);
extern rtx gen_fpremxf4 (rtx, rtx, rtx, rtx);
extern rtx gen_fprem1xf4 (rtx, rtx, rtx, rtx);
extern rtx gen_sincosdf3 (rtx, rtx, rtx);
extern rtx gen_sincossf3 (rtx, rtx, rtx);
extern rtx gen_sincosxf3 (rtx, rtx, rtx);
extern rtx gen_atan2df3_1 (rtx, rtx, rtx);
extern rtx gen_atan2sf3_1 (rtx, rtx, rtx);
extern rtx gen_atan2xf3_1 (rtx, rtx, rtx);
extern rtx gen_fyl2x_xf3 (rtx, rtx, rtx);
extern rtx gen_fyl2xp1_xf3 (rtx, rtx, rtx);
extern rtx gen_cld (void);
extern rtx gen_x86_movdicc_0_m1_rex64 (rtx, rtx);
extern rtx gen_movdicc_c_rex64 (rtx, rtx, rtx, rtx);
extern rtx gen_x86_movsicc_0_m1 (rtx, rtx);
extern rtx gen_pro_epilogue_adjust_stack_1 (rtx, rtx, rtx);
extern rtx gen_pro_epilogue_adjust_stack_rex64 (rtx, rtx, rtx);
extern rtx gen_pro_epilogue_adjust_stack_rex64_2 (rtx, rtx, rtx, rtx);
extern rtx gen_sse_movsfcc (rtx, rtx, rtx, rtx, rtx, rtx);
extern rtx gen_sse_movsfcc_eq (rtx, rtx, rtx, rtx, rtx);
extern rtx gen_sse_movdfcc (rtx, rtx, rtx, rtx, rtx, rtx);
extern rtx gen_sse_movdfcc_eq (rtx, rtx, rtx, rtx, rtx);
extern rtx gen_allocate_stack_worker_1 (rtx);
extern rtx gen_allocate_stack_worker_rex64 (rtx);
extern rtx gen_trap (void);
extern rtx gen_movv4sf_internal (rtx, rtx);
extern rtx gen_movv4si_internal (rtx, rtx);
extern rtx gen_movv2di_internal (rtx, rtx);
extern rtx gen_movv8qi_internal (rtx, rtx);
extern rtx gen_movv4hi_internal (rtx, rtx);
extern rtx gen_movv2si_internal (rtx, rtx);
extern rtx gen_movv2sf_internal (rtx, rtx);
extern rtx gen_movv2df_internal (rtx, rtx);
extern rtx gen_movv8hi_internal (rtx, rtx);
extern rtx gen_movv16qi_internal (rtx, rtx);
extern rtx gen_movti_internal (rtx, rtx);
extern rtx gen_sse_movmskps (rtx, rtx);
extern rtx gen_mmx_pmovmskb (rtx, rtx);
extern rtx gen_mmx_maskmovq (rtx, rtx, rtx);
extern rtx gen_mmx_maskmovq_rex (rtx, rtx, rtx);
extern rtx gen_sse_movntv4sf (rtx, rtx);
extern rtx gen_sse_movntdi (rtx, rtx);
extern rtx gen_sse_movhlps (rtx, rtx, rtx);
extern rtx gen_sse_movlhps (rtx, rtx, rtx);
extern rtx gen_sse_movhps (rtx, rtx, rtx);
extern rtx gen_sse_movlps (rtx, rtx, rtx);
extern rtx gen_sse_loadss_1 (rtx, rtx, rtx);
extern rtx gen_sse_movss (rtx, rtx, rtx);
extern rtx gen_sse_storess (rtx, rtx);
extern rtx gen_sse_shufps (rtx, rtx, rtx, rtx);
extern rtx gen_addv4sf3 (rtx, rtx, rtx);
extern rtx gen_vmaddv4sf3 (rtx, rtx, rtx);
extern rtx gen_subv4sf3 (rtx, rtx, rtx);
extern rtx gen_vmsubv4sf3 (rtx, rtx, rtx);
extern rtx gen_mulv4sf3 (rtx, rtx, rtx);
extern rtx gen_vmmulv4sf3 (rtx, rtx, rtx);
extern rtx gen_divv4sf3 (rtx, rtx, rtx);
extern rtx gen_vmdivv4sf3 (rtx, rtx, rtx);
extern rtx gen_rcpv4sf2 (rtx, rtx);
extern rtx gen_vmrcpv4sf2 (rtx, rtx, rtx);
extern rtx gen_rsqrtv4sf2 (rtx, rtx);
extern rtx gen_vmrsqrtv4sf2 (rtx, rtx, rtx);
extern rtx gen_sqrtv4sf2 (rtx, rtx);
extern rtx gen_vmsqrtv4sf2 (rtx, rtx, rtx);
extern rtx gen_sse2_andv2di3 (rtx, rtx, rtx);
extern rtx gen_sse2_nandv2di3 (rtx, rtx, rtx);
extern rtx gen_sse2_iorv2di3 (rtx, rtx, rtx);
extern rtx gen_sse2_xorv2di3 (rtx, rtx, rtx);
extern rtx gen_sse_clrv4sf (rtx, rtx);
extern rtx gen_sse_clrv2df (rtx);
extern rtx gen_maskcmpv4sf3 (rtx, rtx, rtx, rtx);
extern rtx gen_maskncmpv4sf3 (rtx, rtx, rtx, rtx);
extern rtx gen_vmmaskcmpv4sf3 (rtx, rtx, rtx, rtx);
extern rtx gen_vmmaskncmpv4sf3 (rtx, rtx, rtx, rtx);
extern rtx gen_sse_comi (rtx, rtx);
extern rtx gen_sse_ucomi (rtx, rtx);
extern rtx gen_sse_unpckhps (rtx, rtx, rtx);
extern rtx gen_sse_unpcklps (rtx, rtx, rtx);
extern rtx gen_smaxv4sf3 (rtx, rtx, rtx);
extern rtx gen_vmsmaxv4sf3 (rtx, rtx, rtx);
extern rtx gen_sminv4sf3 (rtx, rtx, rtx);
extern rtx gen_vmsminv4sf3 (rtx, rtx, rtx);
extern rtx gen_cvtpi2ps (rtx, rtx, rtx);
extern rtx gen_cvtps2pi (rtx, rtx);
extern rtx gen_cvttps2pi (rtx, rtx);
extern rtx gen_cvtsi2ss (rtx, rtx, rtx);
extern rtx gen_cvtsi2ssq (rtx, rtx, rtx);
extern rtx gen_cvtss2si (rtx, rtx);
extern rtx gen_cvtss2siq (rtx, rtx);
extern rtx gen_cvttss2si (rtx, rtx);
extern rtx gen_cvttss2siq (rtx, rtx);
extern rtx gen_addv8qi3 (rtx, rtx, rtx);
extern rtx gen_addv4hi3 (rtx, rtx, rtx);
extern rtx gen_addv2si3 (rtx, rtx, rtx);
extern rtx gen_mmx_adddi3 (rtx, rtx, rtx);
extern rtx gen_ssaddv8qi3 (rtx, rtx, rtx);
extern rtx gen_ssaddv4hi3 (rtx, rtx, rtx);
extern rtx gen_usaddv8qi3 (rtx, rtx, rtx);
extern rtx gen_usaddv4hi3 (rtx, rtx, rtx);
extern rtx gen_subv8qi3 (rtx, rtx, rtx);
extern rtx gen_subv4hi3 (rtx, rtx, rtx);
extern rtx gen_subv2si3 (rtx, rtx, rtx);
extern rtx gen_mmx_subdi3 (rtx, rtx, rtx);
extern rtx gen_sssubv8qi3 (rtx, rtx, rtx);
extern rtx gen_sssubv4hi3 (rtx, rtx, rtx);
extern rtx gen_ussubv8qi3 (rtx, rtx, rtx);
extern rtx gen_ussubv4hi3 (rtx, rtx, rtx);
extern rtx gen_mulv4hi3 (rtx, rtx, rtx);
extern rtx gen_smulv4hi3_highpart (rtx, rtx, rtx);
extern rtx gen_umulv4hi3_highpart (rtx, rtx, rtx);
extern rtx gen_mmx_pmaddwd (rtx, rtx, rtx);
extern rtx gen_mmx_iordi3 (rtx, rtx, rtx);
extern rtx gen_mmx_xordi3 (rtx, rtx, rtx);
extern rtx gen_mmx_clrdi (rtx);
extern rtx gen_mmx_anddi3 (rtx, rtx, rtx);
extern rtx gen_mmx_nanddi3 (rtx, rtx, rtx);
extern rtx gen_mmx_uavgv8qi3 (rtx, rtx, rtx);
extern rtx gen_mmx_uavgv4hi3 (rtx, rtx, rtx);
extern rtx gen_mmx_psadbw (rtx, rtx, rtx);
extern rtx gen_mmx_pinsrw (rtx, rtx, rtx, rtx);
extern rtx gen_mmx_pextrw (rtx, rtx, rtx);
extern rtx gen_mmx_pshufw (rtx, rtx, rtx);
extern rtx gen_eqv8qi3 (rtx, rtx, rtx);
extern rtx gen_eqv4hi3 (rtx, rtx, rtx);
extern rtx gen_eqv2si3 (rtx, rtx, rtx);
extern rtx gen_gtv8qi3 (rtx, rtx, rtx);
extern rtx gen_gtv4hi3 (rtx, rtx, rtx);
extern rtx gen_gtv2si3 (rtx, rtx, rtx);
extern rtx gen_umaxv8qi3 (rtx, rtx, rtx);
extern rtx gen_smaxv4hi3 (rtx, rtx, rtx);
extern rtx gen_uminv8qi3 (rtx, rtx, rtx);
extern rtx gen_sminv4hi3 (rtx, rtx, rtx);
extern rtx gen_ashrv4hi3 (rtx, rtx, rtx);
extern rtx gen_ashrv2si3 (rtx, rtx, rtx);
extern rtx gen_lshrv4hi3 (rtx, rtx, rtx);
extern rtx gen_lshrv2si3 (rtx, rtx, rtx);
extern rtx gen_mmx_lshrdi3 (rtx, rtx, rtx);
extern rtx gen_ashlv4hi3 (rtx, rtx, rtx);
extern rtx gen_ashlv2si3 (rtx, rtx, rtx);
extern rtx gen_mmx_ashldi3 (rtx, rtx, rtx);
extern rtx gen_mmx_packsswb (rtx, rtx, rtx);
extern rtx gen_mmx_packssdw (rtx, rtx, rtx);
extern rtx gen_mmx_packuswb (rtx, rtx, rtx);
extern rtx gen_mmx_punpckhbw (rtx, rtx, rtx);
extern rtx gen_mmx_punpckhwd (rtx, rtx, rtx);
extern rtx gen_mmx_punpckhdq (rtx, rtx, rtx);
extern rtx gen_mmx_punpcklbw (rtx, rtx, rtx);
extern rtx gen_mmx_punpcklwd (rtx, rtx, rtx);
extern rtx gen_mmx_punpckldq (rtx, rtx, rtx);
extern rtx gen_emms (void);
extern rtx gen_ldmxcsr (rtx);
extern rtx gen_stmxcsr (rtx);
extern rtx gen_addv2sf3 (rtx, rtx, rtx);
extern rtx gen_subv2sf3 (rtx, rtx, rtx);
extern rtx gen_subrv2sf3 (rtx, rtx, rtx);
extern rtx gen_gtv2sf3 (rtx, rtx, rtx);
extern rtx gen_gev2sf3 (rtx, rtx, rtx);
extern rtx gen_eqv2sf3 (rtx, rtx, rtx);
extern rtx gen_pfmaxv2sf3 (rtx, rtx, rtx);
extern rtx gen_pfminv2sf3 (rtx, rtx, rtx);
extern rtx gen_mulv2sf3 (rtx, rtx, rtx);
extern rtx gen_femms (void);
extern rtx gen_pf2id (rtx, rtx);
extern rtx gen_pf2iw (rtx, rtx);
extern rtx gen_pfacc (rtx, rtx, rtx);
extern rtx gen_pfnacc (rtx, rtx, rtx);
extern rtx gen_pfpnacc (rtx, rtx, rtx);
extern rtx gen_pi2fw (rtx, rtx);
extern rtx gen_floatv2si2 (rtx, rtx);
extern rtx gen_pavgusb (rtx, rtx, rtx);
extern rtx gen_pfrcpv2sf2 (rtx, rtx);
extern rtx gen_pfrcpit1v2sf3 (rtx, rtx, rtx);
extern rtx gen_pfrcpit2v2sf3 (rtx, rtx, rtx);
extern rtx gen_pfrsqrtv2sf2 (rtx, rtx);
extern rtx gen_pfrsqit1v2sf3 (rtx, rtx, rtx);
extern rtx gen_pmulhrwv4hi3 (rtx, rtx, rtx);
extern rtx gen_pswapdv2si2 (rtx, rtx);
extern rtx gen_pswapdv2sf2 (rtx, rtx);
extern rtx gen_addv2df3 (rtx, rtx, rtx);
extern rtx gen_vmaddv2df3 (rtx, rtx, rtx);
extern rtx gen_subv2df3 (rtx, rtx, rtx);
extern rtx gen_vmsubv2df3 (rtx, rtx, rtx);
extern rtx gen_mulv2df3 (rtx, rtx, rtx);
extern rtx gen_vmmulv2df3 (rtx, rtx, rtx);
extern rtx gen_divv2df3 (rtx, rtx, rtx);
extern rtx gen_vmdivv2df3 (rtx, rtx, rtx);
extern rtx gen_smaxv2df3 (rtx, rtx, rtx);
extern rtx gen_vmsmaxv2df3 (rtx, rtx, rtx);
extern rtx gen_sminv2df3 (rtx, rtx, rtx);
extern rtx gen_vmsminv2df3 (rtx, rtx, rtx);
extern rtx gen_sqrtv2df2 (rtx, rtx);
extern rtx gen_vmsqrtv2df2 (rtx, rtx, rtx);
extern rtx gen_maskcmpv2df3 (rtx, rtx, rtx, rtx);
extern rtx gen_maskncmpv2df3 (rtx, rtx, rtx, rtx);
extern rtx gen_vmmaskcmpv2df3 (rtx, rtx, rtx, rtx);
extern rtx gen_vmmaskncmpv2df3 (rtx, rtx, rtx, rtx);
extern rtx gen_sse2_comi (rtx, rtx);
extern rtx gen_sse2_ucomi (rtx, rtx);
extern rtx gen_sse2_movmskpd (rtx, rtx);
extern rtx gen_sse2_pmovmskb (rtx, rtx);
extern rtx gen_sse2_maskmovdqu (rtx, rtx, rtx);
extern rtx gen_sse2_maskmovdqu_rex64 (rtx, rtx, rtx);
extern rtx gen_sse2_movntv2df (rtx, rtx);
extern rtx gen_sse2_movntv2di (rtx, rtx);
extern rtx gen_sse2_movntsi (rtx, rtx);
extern rtx gen_cvtdq2ps (rtx, rtx);
extern rtx gen_cvtps2dq (rtx, rtx);
extern rtx gen_cvttps2dq (rtx, rtx);
extern rtx gen_cvtdq2pd (rtx, rtx);
extern rtx gen_cvtpd2dq (rtx, rtx);
extern rtx gen_cvttpd2dq (rtx, rtx);
extern rtx gen_cvtpd2pi (rtx, rtx);
extern rtx gen_cvttpd2pi (rtx, rtx);
extern rtx gen_cvtpi2pd (rtx, rtx);
extern rtx gen_cvtsd2si (rtx, rtx);
extern rtx gen_cvtsd2siq (rtx, rtx);
extern rtx gen_cvttsd2si (rtx, rtx);
extern rtx gen_cvttsd2siq (rtx, rtx);
extern rtx gen_cvtsi2sd (rtx, rtx, rtx);
extern rtx gen_cvtsi2sdq (rtx, rtx, rtx);
extern rtx gen_cvtsd2ss (rtx, rtx, rtx);
extern rtx gen_cvtss2sd (rtx, rtx, rtx);
extern rtx gen_cvtpd2ps (rtx, rtx);
extern rtx gen_cvtps2pd (rtx, rtx);
extern rtx gen_addv16qi3 (rtx, rtx, rtx);
extern rtx gen_addv8hi3 (rtx, rtx, rtx);
extern rtx gen_addv4si3 (rtx, rtx, rtx);
extern rtx gen_addv2di3 (rtx, rtx, rtx);
extern rtx gen_ssaddv16qi3 (rtx, rtx, rtx);
extern rtx gen_ssaddv8hi3 (rtx, rtx, rtx);
extern rtx gen_usaddv16qi3 (rtx, rtx, rtx);
extern rtx gen_usaddv8hi3 (rtx, rtx, rtx);
extern rtx gen_subv16qi3 (rtx, rtx, rtx);
extern rtx gen_subv8hi3 (rtx, rtx, rtx);
extern rtx gen_subv4si3 (rtx, rtx, rtx);
extern rtx gen_subv2di3 (rtx, rtx, rtx);
extern rtx gen_sssubv16qi3 (rtx, rtx, rtx);
extern rtx gen_sssubv8hi3 (rtx, rtx, rtx);
extern rtx gen_ussubv16qi3 (rtx, rtx, rtx);
extern rtx gen_ussubv8hi3 (rtx, rtx, rtx);
extern rtx gen_mulv8hi3 (rtx, rtx, rtx);
extern rtx gen_smulv8hi3_highpart (rtx, rtx, rtx);
extern rtx gen_umulv8hi3_highpart (rtx, rtx, rtx);
extern rtx gen_sse2_umulsidi3 (rtx, rtx, rtx);
extern rtx gen_sse2_umulv2siv2di3 (rtx, rtx, rtx);
extern rtx gen_sse2_pmaddwd (rtx, rtx, rtx);
extern rtx gen_sse2_clrti (rtx);
extern rtx gen_sse2_uavgv16qi3 (rtx, rtx, rtx);
extern rtx gen_sse2_uavgv8hi3 (rtx, rtx, rtx);
extern rtx gen_sse2_psadbw (rtx, rtx, rtx);
extern rtx gen_sse2_pinsrw (rtx, rtx, rtx, rtx);
extern rtx gen_sse2_pextrw (rtx, rtx, rtx);
extern rtx gen_sse2_pshufd (rtx, rtx, rtx);
extern rtx gen_sse2_pshuflw (rtx, rtx, rtx);
extern rtx gen_sse2_pshufhw (rtx, rtx, rtx);
extern rtx gen_eqv16qi3 (rtx, rtx, rtx);
extern rtx gen_eqv8hi3 (rtx, rtx, rtx);
extern rtx gen_eqv4si3 (rtx, rtx, rtx);
extern rtx gen_gtv16qi3 (rtx, rtx, rtx);
extern rtx gen_gtv8hi3 (rtx, rtx, rtx);
extern rtx gen_gtv4si3 (rtx, rtx, rtx);
extern rtx gen_umaxv16qi3 (rtx, rtx, rtx);
extern rtx gen_smaxv8hi3 (rtx, rtx, rtx);
extern rtx gen_uminv16qi3 (rtx, rtx, rtx);
extern rtx gen_sminv8hi3 (rtx, rtx, rtx);
extern rtx gen_ashrv8hi3 (rtx, rtx, rtx);
extern rtx gen_ashrv4si3 (rtx, rtx, rtx);
extern rtx gen_lshrv8hi3 (rtx, rtx, rtx);
extern rtx gen_lshrv4si3 (rtx, rtx, rtx);
extern rtx gen_lshrv2di3 (rtx, rtx, rtx);
extern rtx gen_ashlv8hi3 (rtx, rtx, rtx);
extern rtx gen_ashlv4si3 (rtx, rtx, rtx);
extern rtx gen_ashlv2di3 (rtx, rtx, rtx);
extern rtx gen_ashrv8hi3_ti (rtx, rtx, rtx);
extern rtx gen_ashrv4si3_ti (rtx, rtx, rtx);
extern rtx gen_lshrv8hi3_ti (rtx, rtx, rtx);
extern rtx gen_lshrv4si3_ti (rtx, rtx, rtx);
extern rtx gen_lshrv2di3_ti (rtx, rtx, rtx);
extern rtx gen_ashlv8hi3_ti (rtx, rtx, rtx);
extern rtx gen_ashlv4si3_ti (rtx, rtx, rtx);
extern rtx gen_ashlv2di3_ti (rtx, rtx, rtx);
extern rtx gen_sse2_ashlti3 (rtx, rtx, rtx);
extern rtx gen_sse2_lshrti3 (rtx, rtx, rtx);
extern rtx gen_sse2_unpckhpd (rtx, rtx, rtx);
extern rtx gen_sse2_unpcklpd (rtx, rtx, rtx);
extern rtx gen_sse2_packsswb (rtx, rtx, rtx);
extern rtx gen_sse2_packssdw (rtx, rtx, rtx);
extern rtx gen_sse2_packuswb (rtx, rtx, rtx);
extern rtx gen_sse2_punpckhbw (rtx, rtx, rtx);
extern rtx gen_sse2_punpckhwd (rtx, rtx, rtx);
extern rtx gen_sse2_punpckhdq (rtx, rtx, rtx);
extern rtx gen_sse2_punpcklbw (rtx, rtx, rtx);
extern rtx gen_sse2_punpcklwd (rtx, rtx, rtx);
extern rtx gen_sse2_punpckldq (rtx, rtx, rtx);
extern rtx gen_sse2_punpcklqdq (rtx, rtx, rtx);
extern rtx gen_sse2_punpckhqdq (rtx, rtx, rtx);
extern rtx gen_sse2_movapd (rtx, rtx);
extern rtx gen_sse2_movupd (rtx, rtx);
extern rtx gen_sse2_movdqa (rtx, rtx);
extern rtx gen_sse2_movdqu (rtx, rtx);
extern rtx gen_sse2_movdq2q (rtx, rtx);
extern rtx gen_sse2_movdq2q_rex64 (rtx, rtx);
extern rtx gen_sse2_movq2dq (rtx, rtx);
extern rtx gen_sse2_movq2dq_rex64 (rtx, rtx);
extern rtx gen_sse2_movq (rtx, rtx);
extern rtx gen_sse2_loadd (rtx, rtx);
extern rtx gen_sse2_stored (rtx, rtx);
extern rtx gen_sse2_movhpd (rtx, rtx, rtx);
extern rtx gen_sse2_loadsd_1 (rtx, rtx, rtx);
extern rtx gen_sse2_movsd (rtx, rtx, rtx);
extern rtx gen_sse2_storesd (rtx, rtx);
extern rtx gen_sse2_shufpd (rtx, rtx, rtx, rtx);
extern rtx gen_sse2_clflush (rtx);
extern rtx gen_mwait (rtx, rtx);
extern rtx gen_monitor (rtx, rtx, rtx);
extern rtx gen_addsubv4sf3 (rtx, rtx, rtx);
extern rtx gen_addsubv2df3 (rtx, rtx, rtx);
extern rtx gen_haddv4sf3 (rtx, rtx, rtx);
extern rtx gen_haddv2df3 (rtx, rtx, rtx);
extern rtx gen_hsubv4sf3 (rtx, rtx, rtx);
extern rtx gen_hsubv2df3 (rtx, rtx, rtx);
extern rtx gen_movshdup (rtx, rtx);
extern rtx gen_movsldup (rtx, rtx);
extern rtx gen_lddqu (rtx, rtx);
extern rtx gen_loadddup (rtx, rtx);
extern rtx gen_movddup (rtx, rtx);
extern rtx gen_cmpdi (rtx, rtx);
extern rtx gen_cmpsi (rtx, rtx);
extern rtx gen_cmphi (rtx, rtx);
extern rtx gen_cmpqi (rtx, rtx);
extern rtx gen_cmpdi_1_rex64 (rtx, rtx);
extern rtx gen_cmpsi_1 (rtx, rtx);
extern rtx gen_cmpqi_ext_3 (rtx, rtx);
extern rtx gen_cmpxf (rtx, rtx);
extern rtx gen_cmpdf (rtx, rtx);
extern rtx gen_cmpsf (rtx, rtx);
extern rtx gen_movsi (rtx, rtx);
extern rtx gen_movhi (rtx, rtx);
extern rtx gen_movstricthi (rtx, rtx);
extern rtx gen_movqi (rtx, rtx);
extern rtx gen_reload_outqi (rtx, rtx, rtx);
extern rtx gen_movstrictqi (rtx, rtx);
extern rtx gen_movdi (rtx, rtx);
extern rtx gen_movsf (rtx, rtx);
extern rtx gen_movdf (rtx, rtx);
extern rtx gen_movxf (rtx, rtx);
extern rtx gen_zero_extendhisi2 (rtx, rtx);
extern rtx gen_zero_extendqihi2 (rtx, rtx);
extern rtx gen_zero_extendqisi2 (rtx, rtx);
extern rtx gen_zero_extendsidi2 (rtx, rtx);
extern rtx gen_extendsidi2 (rtx, rtx);
extern rtx gen_extendsfdf2 (rtx, rtx);
extern rtx gen_extendsfxf2 (rtx, rtx);
extern rtx gen_extenddfxf2 (rtx, rtx);
extern rtx gen_truncdfsf2 (rtx, rtx);
extern rtx gen_truncxfsf2 (rtx, rtx);
extern rtx gen_truncxfdf2 (rtx, rtx);
extern rtx gen_fix_truncxfdi2 (rtx, rtx);
extern rtx gen_fix_truncdfdi2 (rtx, rtx);
extern rtx gen_fix_truncsfdi2 (rtx, rtx);
extern rtx gen_fix_truncxfsi2 (rtx, rtx);
extern rtx gen_fix_truncdfsi2 (rtx, rtx);
extern rtx gen_fix_truncsfsi2 (rtx, rtx);
extern rtx gen_fix_truncxfhi2 (rtx, rtx);
extern rtx gen_fix_truncdfhi2 (rtx, rtx);
extern rtx gen_fix_truncsfhi2 (rtx, rtx);
extern rtx gen_floathisf2 (rtx, rtx);
extern rtx gen_floatsisf2 (rtx, rtx);
extern rtx gen_floatdisf2 (rtx, rtx);
extern rtx gen_floathidf2 (rtx, rtx);
extern rtx gen_floatsidf2 (rtx, rtx);
extern rtx gen_floatdidf2 (rtx, rtx);
extern rtx gen_floatunssisf2 (rtx, rtx);
extern rtx gen_floatunsdisf2 (rtx, rtx);
extern rtx gen_floatunsdidf2 (rtx, rtx);
extern rtx gen_vec_setv2df (rtx, rtx, rtx);
extern rtx gen_vec_extractv2df (rtx, rtx, rtx);
extern rtx gen_vec_initv2df (rtx, rtx);
extern rtx gen_vec_setv4sf (rtx, rtx, rtx);
extern rtx gen_vec_extractv4sf (rtx, rtx, rtx);
extern rtx gen_vec_initv4sf (rtx, rtx);
extern rtx gen_adddi3 (rtx, rtx, rtx);
extern rtx gen_addsi3 (rtx, rtx, rtx);
extern rtx gen_addhi3 (rtx, rtx, rtx);
extern rtx gen_addqi3 (rtx, rtx, rtx);
extern rtx gen_addxf3 (rtx, rtx, rtx);
extern rtx gen_adddf3 (rtx, rtx, rtx);
extern rtx gen_addsf3 (rtx, rtx, rtx);
extern rtx gen_subdi3 (rtx, rtx, rtx);
extern rtx gen_subsi3 (rtx, rtx, rtx);
extern rtx gen_subhi3 (rtx, rtx, rtx);
extern rtx gen_subqi3 (rtx, rtx, rtx);
extern rtx gen_subxf3 (rtx, rtx, rtx);
extern rtx gen_subdf3 (rtx, rtx, rtx);
extern rtx gen_subsf3 (rtx, rtx, rtx);
extern rtx gen_muldi3 (rtx, rtx, rtx);
extern rtx gen_mulsi3 (rtx, rtx, rtx);
extern rtx gen_mulhi3 (rtx, rtx, rtx);
extern rtx gen_mulqi3 (rtx, rtx, rtx);
extern rtx gen_umulqihi3 (rtx, rtx, rtx);
extern rtx gen_mulqihi3 (rtx, rtx, rtx);
extern rtx gen_umulditi3 (rtx, rtx, rtx);
extern rtx gen_umulsidi3 (rtx, rtx, rtx);
extern rtx gen_mulditi3 (rtx, rtx, rtx);
extern rtx gen_mulsidi3 (rtx, rtx, rtx);
extern rtx gen_umuldi3_highpart (rtx, rtx, rtx);
extern rtx gen_umulsi3_highpart (rtx, rtx, rtx);
extern rtx gen_smuldi3_highpart (rtx, rtx, rtx);
extern rtx gen_smulsi3_highpart (rtx, rtx, rtx);
extern rtx gen_mulxf3 (rtx, rtx, rtx);
extern rtx gen_muldf3 (rtx, rtx, rtx);
extern rtx gen_mulsf3 (rtx, rtx, rtx);
extern rtx gen_divxf3 (rtx, rtx, rtx);
extern rtx gen_divdf3 (rtx, rtx, rtx);
extern rtx gen_divsf3 (rtx, rtx, rtx);
extern rtx gen_divmoddi4 (rtx, rtx, rtx, rtx);
extern rtx gen_divmodsi4 (rtx, rtx, rtx, rtx);
extern rtx gen_udivmodhi4 (rtx, rtx, rtx, rtx);
extern rtx gen_testsi_ccno_1 (rtx, rtx);
extern rtx gen_testqi_ccz_1 (rtx, rtx);
extern rtx gen_testqi_ext_ccno_0 (rtx, rtx);
extern rtx gen_anddi3 (rtx, rtx, rtx);
extern rtx gen_andsi3 (rtx, rtx, rtx);
extern rtx gen_andhi3 (rtx, rtx, rtx);
extern rtx gen_andqi3 (rtx, rtx, rtx);
extern rtx gen_iordi3 (rtx, rtx, rtx);
extern rtx gen_iorsi3 (rtx, rtx, rtx);
extern rtx gen_iorhi3 (rtx, rtx, rtx);
extern rtx gen_iorqi3 (rtx, rtx, rtx);
extern rtx gen_xordi3 (rtx, rtx, rtx);
extern rtx gen_xorsi3 (rtx, rtx, rtx);
extern rtx gen_xorhi3 (rtx, rtx, rtx);
extern rtx gen_xorqi3 (rtx, rtx, rtx);
extern rtx gen_xorqi_cc_ext_1 (rtx, rtx, rtx);
extern rtx gen_negdi2 (rtx, rtx);
extern rtx gen_negsi2 (rtx, rtx);
extern rtx gen_neghi2 (rtx, rtx);
extern rtx gen_negqi2 (rtx, rtx);
extern rtx gen_negsf2 (rtx, rtx);
extern rtx gen_negdf2 (rtx, rtx);
extern rtx gen_negxf2 (rtx, rtx);
extern rtx gen_abssf2 (rtx, rtx);
extern rtx gen_absdf2 (rtx, rtx);
extern rtx gen_absxf2 (rtx, rtx);
extern rtx gen_one_cmpldi2 (rtx, rtx);
extern rtx gen_one_cmplsi2 (rtx, rtx);
extern rtx gen_one_cmplhi2 (rtx, rtx);
extern rtx gen_one_cmplqi2 (rtx, rtx);
extern rtx gen_ashldi3 (rtx, rtx, rtx);
extern rtx gen_x86_shift_adj_1 (rtx, rtx, rtx, rtx);
extern rtx gen_x86_shift_adj_2 (rtx, rtx, rtx);
extern rtx gen_ashlsi3 (rtx, rtx, rtx);
extern rtx gen_ashlhi3 (rtx, rtx, rtx);
extern rtx gen_ashlqi3 (rtx, rtx, rtx);
extern rtx gen_ashrdi3 (rtx, rtx, rtx);
extern rtx gen_x86_shift_adj_3 (rtx, rtx, rtx);
extern rtx gen_ashrsi3 (rtx, rtx, rtx);
extern rtx gen_ashrhi3 (rtx, rtx, rtx);
extern rtx gen_ashrqi3 (rtx, rtx, rtx);
extern rtx gen_lshrdi3 (rtx, rtx, rtx);
extern rtx gen_lshrsi3 (rtx, rtx, rtx);
extern rtx gen_lshrhi3 (rtx, rtx, rtx);
extern rtx gen_lshrqi3 (rtx, rtx, rtx);
extern rtx gen_rotldi3 (rtx, rtx, rtx);
extern rtx gen_rotlsi3 (rtx, rtx, rtx);
extern rtx gen_rotlhi3 (rtx, rtx, rtx);
extern rtx gen_rotlqi3 (rtx, rtx, rtx);
extern rtx gen_rotrdi3 (rtx, rtx, rtx);
extern rtx gen_rotrsi3 (rtx, rtx, rtx);
extern rtx gen_rotrhi3 (rtx, rtx, rtx);
extern rtx gen_rotrqi3 (rtx, rtx, rtx);
extern rtx gen_extv (rtx, rtx, rtx, rtx);
extern rtx gen_extzv (rtx, rtx, rtx, rtx);
extern rtx gen_insv (rtx, rtx, rtx, rtx);
extern rtx gen_seq (rtx);
extern rtx gen_sne (rtx);
extern rtx gen_sgt (rtx);
extern rtx gen_sgtu (rtx);
extern rtx gen_slt (rtx);
extern rtx gen_sltu (rtx);
extern rtx gen_sge (rtx);
extern rtx gen_sgeu (rtx);
extern rtx gen_sle (rtx);
extern rtx gen_sleu (rtx);
extern rtx gen_sunordered (rtx);
extern rtx gen_sordered (rtx);
extern rtx gen_suneq (rtx);
extern rtx gen_sunge (rtx);
extern rtx gen_sungt (rtx);
extern rtx gen_sunle (rtx);
extern rtx gen_sunlt (rtx);
extern rtx gen_sltgt (rtx);
extern rtx gen_beq (rtx);
extern rtx gen_bne (rtx);
extern rtx gen_bgt (rtx);
extern rtx gen_bgtu (rtx);
extern rtx gen_blt (rtx);
extern rtx gen_bltu (rtx);
extern rtx gen_bge (rtx);
extern rtx gen_bgeu (rtx);
extern rtx gen_ble (rtx);
extern rtx gen_bleu (rtx);
extern rtx gen_bunordered (rtx);
extern rtx gen_bordered (rtx);
extern rtx gen_buneq (rtx);
extern rtx gen_bunge (rtx);
extern rtx gen_bungt (rtx);
extern rtx gen_bunle (rtx);
extern rtx gen_bunlt (rtx);
extern rtx gen_bltgt (rtx);
extern rtx gen_indirect_jump (rtx);
extern rtx gen_tablejump (rtx, rtx);
extern rtx gen_doloop_end (rtx, rtx, rtx, rtx, rtx);
extern rtx gen_call_pop (rtx, rtx, rtx, rtx);
extern rtx gen_call (rtx, rtx, rtx);
extern rtx gen_sibcall (rtx, rtx, rtx);
extern rtx gen_call_value_pop (rtx, rtx, rtx, rtx, rtx);
extern rtx gen_call_value (rtx, rtx, rtx, rtx);
extern rtx gen_sibcall_value (rtx, rtx, rtx, rtx);
extern rtx gen_untyped_call (rtx, rtx, rtx);
extern rtx gen_return (void);
extern rtx gen_prologue (void);
extern rtx gen_epilogue (void);
extern rtx gen_sibcall_epilogue (void);
extern rtx gen_eh_return (rtx);
extern rtx gen_ffssi2 (rtx, rtx);
extern rtx gen_ffsdi2 (rtx, rtx);
extern rtx gen_clzsi2 (rtx, rtx);
extern rtx gen_clzdi2 (rtx, rtx);
extern rtx gen_tls_global_dynamic_32 (rtx, rtx);
extern rtx gen_tls_global_dynamic_64 (rtx, rtx);
extern rtx gen_tls_local_dynamic_base_32 (rtx);
extern rtx gen_tls_local_dynamic_base_64 (rtx);
extern rtx gen_sqrtsf2 (rtx, rtx);
extern rtx gen_sqrtdf2 (rtx, rtx);
extern rtx gen_fmodsf3 (rtx, rtx, rtx);
extern rtx gen_fmoddf3 (rtx, rtx, rtx);
extern rtx gen_fmodxf3 (rtx, rtx, rtx);
extern rtx gen_dremsf3 (rtx, rtx, rtx);
extern rtx gen_dremdf3 (rtx, rtx, rtx);
extern rtx gen_dremxf3 (rtx, rtx, rtx);
extern rtx gen_tandf2 (rtx, rtx);
extern rtx gen_tansf2 (rtx, rtx);
extern rtx gen_tanxf2 (rtx, rtx);
extern rtx gen_atan2df3 (rtx, rtx, rtx);
extern rtx gen_atandf2 (rtx, rtx);
extern rtx gen_atan2sf3 (rtx, rtx, rtx);
extern rtx gen_atansf2 (rtx, rtx);
extern rtx gen_atan2xf3 (rtx, rtx, rtx);
extern rtx gen_atanxf2 (rtx, rtx);
extern rtx gen_asindf2 (rtx, rtx);
extern rtx gen_asinsf2 (rtx, rtx);
extern rtx gen_asinxf2 (rtx, rtx);
extern rtx gen_acosdf2 (rtx, rtx);
extern rtx gen_acossf2 (rtx, rtx);
extern rtx gen_acosxf2 (rtx, rtx);
extern rtx gen_logsf2 (rtx, rtx);
extern rtx gen_logdf2 (rtx, rtx);
extern rtx gen_logxf2 (rtx, rtx);
extern rtx gen_log10sf2 (rtx, rtx);
extern rtx gen_log10df2 (rtx, rtx);
extern rtx gen_log10xf2 (rtx, rtx);
extern rtx gen_log2sf2 (rtx, rtx);
extern rtx gen_log2df2 (rtx, rtx);
extern rtx gen_log2xf2 (rtx, rtx);
extern rtx gen_log1psf2 (rtx, rtx);
extern rtx gen_log1pdf2 (rtx, rtx);
extern rtx gen_log1pxf2 (rtx, rtx);
extern rtx gen_logbsf2 (rtx, rtx);
extern rtx gen_logbdf2 (rtx, rtx);
extern rtx gen_logbxf2 (rtx, rtx);
extern rtx gen_ilogbsi2 (rtx, rtx, rtx, rtx);
extern rtx gen_expsf2 (rtx, rtx);
extern rtx gen_expdf2 (rtx, rtx);
extern rtx gen_expxf2 (rtx, rtx);
extern rtx gen_exp10sf2 (rtx, rtx);
extern rtx gen_exp10df2 (rtx, rtx);
extern rtx gen_exp10xf2 (rtx, rtx);
extern rtx gen_exp2sf2 (rtx, rtx);
extern rtx gen_exp2df2 (rtx, rtx);
extern rtx gen_exp2xf2 (rtx, rtx);
extern rtx gen_expm1df2 (rtx, rtx);
extern rtx gen_expm1sf2 (rtx, rtx);
extern rtx gen_expm1xf2 (rtx, rtx);
extern rtx gen_movstrsi (rtx, rtx, rtx, rtx);
extern rtx gen_movstrdi (rtx, rtx, rtx, rtx);
extern rtx gen_strmov (rtx, rtx, rtx, rtx);
extern rtx gen_strmov_singleop (rtx, rtx, rtx, rtx, rtx, rtx);
extern rtx gen_rep_mov (rtx, rtx, rtx, rtx, rtx, rtx, rtx);
extern rtx gen_clrstrsi (rtx, rtx, rtx);
extern rtx gen_clrstrdi (rtx, rtx, rtx);
extern rtx gen_strset (rtx, rtx, rtx);
extern rtx gen_strset_singleop (rtx, rtx, rtx, rtx);
extern rtx gen_rep_stos (rtx, rtx, rtx, rtx, rtx);
extern rtx gen_cmpstrsi (rtx, rtx, rtx, rtx, rtx);
extern rtx gen_cmpintqi (rtx);
extern rtx gen_cmpstrqi_nz_1 (rtx, rtx, rtx, rtx, rtx, rtx);
extern rtx gen_cmpstrqi_1 (rtx, rtx, rtx, rtx, rtx, rtx);
extern rtx gen_strlensi (rtx, rtx, rtx, rtx);
extern rtx gen_strlendi (rtx, rtx, rtx, rtx);
extern rtx gen_strlenqi_1 (rtx, rtx, rtx);
extern rtx gen_movdicc (rtx, rtx, rtx, rtx);
extern rtx gen_movsicc (rtx, rtx, rtx, rtx);
extern rtx gen_movhicc (rtx, rtx, rtx, rtx);
extern rtx gen_movqicc (rtx, rtx, rtx, rtx);
extern rtx gen_movsfcc (rtx, rtx, rtx, rtx);
extern rtx gen_movdfcc (rtx, rtx, rtx, rtx);
extern rtx gen_movxfcc (rtx, rtx, rtx, rtx);
extern rtx gen_minsf3 (rtx, rtx, rtx);
extern rtx gen_addqicc (rtx, rtx, rtx, rtx);
extern rtx gen_addhicc (rtx, rtx, rtx, rtx);
extern rtx gen_addsicc (rtx, rtx, rtx, rtx);
extern rtx gen_adddicc (rtx, rtx, rtx, rtx);
extern rtx gen_mindf3 (rtx, rtx, rtx);
extern rtx gen_maxsf3 (rtx, rtx, rtx);
extern rtx gen_maxdf3 (rtx, rtx, rtx);
extern rtx gen_allocate_stack_worker (rtx);
extern rtx gen_allocate_stack_worker_postreload (rtx);
extern rtx gen_allocate_stack_worker_rex64_postreload (rtx);
extern rtx gen_allocate_stack (rtx, rtx);
extern rtx gen_builtin_setjmp_receiver (rtx);
extern rtx gen_conditional_trap (rtx, rtx);
extern rtx gen_movti (rtx, rtx);
extern rtx gen_movtf (rtx, rtx);
extern rtx gen_movv2df (rtx, rtx);
extern rtx gen_movv8hi (rtx, rtx);
extern rtx gen_movv16qi (rtx, rtx);
extern rtx gen_movv4sf (rtx, rtx);
extern rtx gen_movv4si (rtx, rtx);
extern rtx gen_movv2di (rtx, rtx);
extern rtx gen_movv2si (rtx, rtx);
extern rtx gen_movv4hi (rtx, rtx);
extern rtx gen_movv8qi (rtx, rtx);
extern rtx gen_movv2sf (rtx, rtx);
extern rtx gen_sse_movaps (rtx, rtx);
extern rtx gen_sse_movups (rtx, rtx);
extern rtx gen_sse_loadss (rtx, rtx);
extern rtx gen_negv4sf2 (rtx, rtx);
extern rtx gen_sse_andv4sf3 (rtx, rtx, rtx);
extern rtx gen_sse_nandv4sf3 (rtx, rtx, rtx);
extern rtx gen_sse_iorv4sf3 (rtx, rtx, rtx);
extern rtx gen_sse_xorv4sf3 (rtx, rtx, rtx);
extern rtx gen_sse2_andv2df3 (rtx, rtx, rtx);
extern rtx gen_sse2_nandv2df3 (rtx, rtx, rtx);
extern rtx gen_sse2_iorv2df3 (rtx, rtx, rtx);
extern rtx gen_sse2_xorv2df3 (rtx, rtx, rtx);
extern rtx gen_sfence (void);
extern rtx gen_sse_prologue_save (rtx, rtx, rtx, rtx);
extern rtx gen_prefetch (rtx, rtx, rtx);
extern rtx gen_sse2_loadsd (rtx, rtx);
extern rtx gen_sse2_mfence (void);
extern rtx gen_sse2_lfence (void);
typedef unsigned long HARD_REG_ELT_TYPE;
typedef HARD_REG_ELT_TYPE HARD_REG_SET[((53 + (8 * 4) - 1) / (8 * 4))];
extern char fixed_regs[53];
extern HARD_REG_SET fixed_reg_set;
extern char call_used_regs[53];
extern HARD_REG_SET call_used_reg_set;
extern HARD_REG_SET losing_caller_save_reg_set;
extern char call_fixed_regs[53];
extern HARD_REG_SET call_fixed_reg_set;
extern char global_regs[53];
extern HARD_REG_SET regs_invalidated_by_call;
extern int reg_alloc_order[53];
extern int inv_reg_alloc_order[53];
extern HARD_REG_SET reg_class_contents[((int) LIM_REG_CLASSES)];
extern unsigned int reg_class_size[((int) LIM_REG_CLASSES)];
extern enum reg_class reg_class_superclasses[((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];
extern enum reg_class reg_class_subclasses[((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];
extern enum reg_class reg_class_subunion[((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];
extern enum reg_class reg_class_superunion[((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];
extern int n_non_fixed_regs;
extern const char * reg_names[53];
struct function;
enum machine_mode
{
  VOIDmode,
  BLKmode,
  CCmode,
  CCGCmode,
  CCGOCmode,
  CCNOmode,
  CCZmode,
  CCFPmode,
  CCFPUmode,
  BImode,
  QImode,
  HImode,
  SImode,
  DImode,
  TImode,
  SFmode,
  DFmode,
  XFmode,
  TFmode,
  CQImode,
  CHImode,
  CSImode,
  CDImode,
  CTImode,
  SCmode,
  DCmode,
  XCmode,
  TCmode,
  V2QImode,
  V4QImode,
  V2HImode,
  V8QImode,
  V4HImode,
  V2SImode,
  V1DImode,
  V16QImode,
  V8HImode,
  V4SImode,
  V2DImode,
  V8SImode,
  V4DImode,
  V8DImode,
  V2SFmode,
  V4SFmode,
  V2DFmode,
  V8SFmode,
  V4DFmode,
  V16SFmode,
  V8DFmode,
  MAX_MACHINE_MODE,
  MIN_MODE_RANDOM = VOIDmode,
  MAX_MODE_RANDOM = BLKmode,
  MIN_MODE_CC = CCmode,
  MAX_MODE_CC = CCFPUmode,
  MIN_MODE_INT = QImode,
  MAX_MODE_INT = TImode,
  MIN_MODE_PARTIAL_INT = VOIDmode,
  MAX_MODE_PARTIAL_INT = VOIDmode,
  MIN_MODE_FLOAT = SFmode,
  MAX_MODE_FLOAT = TFmode,
  MIN_MODE_COMPLEX_INT = CQImode,
  MAX_MODE_COMPLEX_INT = CTImode,
  MIN_MODE_COMPLEX_FLOAT = SCmode,
  MAX_MODE_COMPLEX_FLOAT = TCmode,
  MIN_MODE_VECTOR_INT = V2QImode,
  MAX_MODE_VECTOR_INT = V8DImode,
  MIN_MODE_VECTOR_FLOAT = V2SFmode,
  MAX_MODE_VECTOR_FLOAT = V8DFmode,
  NUM_MACHINE_MODES = MAX_MACHINE_MODE
};
extern const char * const mode_name[NUM_MACHINE_MODES];
enum mode_class { MODE_RANDOM, MODE_CC, MODE_INT, MODE_PARTIAL_INT, MODE_FLOAT, MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT, MODE_VECTOR_INT, MODE_VECTOR_FLOAT, MAX_MODE_CLASS };
extern const unsigned char mode_class[NUM_MACHINE_MODES];
extern unsigned char mode_size[NUM_MACHINE_MODES];
extern const unsigned short mode_precision[NUM_MACHINE_MODES];
extern const unsigned long mode_mask_array[NUM_MACHINE_MODES];
extern const unsigned char mode_inner[NUM_MACHINE_MODES];
extern const unsigned char mode_nunits[NUM_MACHINE_MODES];
extern const unsigned char mode_wider[NUM_MACHINE_MODES];
extern enum machine_mode mode_for_size (unsigned int, enum mode_class, int);
extern enum machine_mode smallest_mode_for_size (unsigned int,
       enum mode_class);
extern enum machine_mode int_mode_for_mode (enum machine_mode);
extern enum machine_mode get_best_mode (int, int, unsigned int,
     enum machine_mode, int);
extern unsigned char mode_base_align[NUM_MACHINE_MODES];
extern unsigned get_mode_alignment (enum machine_mode);
extern const unsigned char class_narrowest_mode[MAX_MODE_CLASS];
extern enum machine_mode byte_mode;
extern enum machine_mode word_mode;
extern enum machine_mode ptr_mode;
extern void init_adjust_machine_modes (void);
extern struct line_maps line_table;
typedef struct location_s
{
  const char *file;
  int line;
} expanded_location;
typedef struct location_s location_t;
typedef location_t *source_locus;
extern location_t unknown_location;
struct file_stack
{
  struct file_stack *next;
  location_t location;
};
extern const char *main_input_filename;
extern location_t input_location;
extern void push_srcloc (const char *name, int line);
extern void pop_srcloc (void);
extern struct file_stack *input_file_stack;
extern int input_file_stack_tick;
enum rtx_code {
UNKNOWN ,
NIL ,
INCLUDE ,
EXPR_LIST ,
INSN_LIST ,
MATCH_OPERAND ,
MATCH_SCRATCH ,
MATCH_DUP ,
MATCH_OPERATOR ,
MATCH_PARALLEL ,
MATCH_OP_DUP ,
MATCH_PAR_DUP ,
DEFINE_INSN ,
DEFINE_PEEPHOLE ,
DEFINE_SPLIT ,
DEFINE_INSN_AND_SPLIT ,
DEFINE_PEEPHOLE2 ,
DEFINE_EXPAND ,
DEFINE_DELAY ,
DEFINE_FUNCTION_UNIT ,
DEFINE_ASM_ATTRIBUTES ,
DEFINE_COND_EXEC ,
SEQUENCE ,
ADDRESS ,
DEFINE_CPU_UNIT ,
DEFINE_QUERY_CPU_UNIT ,
EXCLUSION_SET ,
PRESENCE_SET ,
FINAL_PRESENCE_SET ,
ABSENCE_SET ,
FINAL_ABSENCE_SET ,
DEFINE_BYPASS ,
DEFINE_AUTOMATON ,
AUTOMATA_OPTION ,
DEFINE_RESERVATION ,
DEFINE_INSN_RESERVATION ,
DEFINE_ATTR ,
ATTR ,
SET_ATTR ,
SET_ATTR_ALTERNATIVE ,
EQ_ATTR ,
EQ_ATTR_ALT ,
ATTR_FLAG ,
INSN ,
JUMP_INSN ,
CALL_INSN ,
BARRIER ,
CODE_LABEL ,
NOTE ,
COND_EXEC ,
PARALLEL ,
ASM_INPUT ,
ASM_OPERANDS ,
UNSPEC ,
UNSPEC_VOLATILE ,
ADDR_VEC ,
ADDR_DIFF_VEC ,
PREFETCH ,
SET ,
USE ,
CLOBBER ,
CALL ,
RETURN ,
TRAP_IF ,
RESX ,
CONST_INT ,
CONST_DOUBLE ,
CONST_VECTOR ,
CONST_STRING ,
CONST ,
PC ,
VALUE ,
REG ,
SCRATCH ,
SUBREG ,
STRICT_LOW_PART ,
CONCAT ,
MEM ,
LABEL_REF ,
SYMBOL_REF ,
CC0 ,
QUEUED ,
IF_THEN_ELSE ,
COND ,
COMPARE ,
PLUS ,
MINUS ,
NEG ,
MULT ,
DIV ,
MOD ,
UDIV ,
UMOD ,
AND ,
IOR ,
XOR ,
NOT ,
ASHIFT ,
ROTATE ,
ASHIFTRT ,
LSHIFTRT ,
ROTATERT ,
SMIN ,
SMAX ,
UMIN ,
UMAX ,
PRE_DEC ,
PRE_INC ,
POST_DEC ,
POST_INC ,
PRE_MODIFY ,
POST_MODIFY ,
NE ,
EQ ,
GE ,
GT ,
LE ,
LT ,
GEU ,
GTU ,
LEU ,
LTU ,
UNORDERED ,
ORDERED ,
UNEQ ,
UNGE ,
UNGT ,
UNLE ,
UNLT ,
LTGT ,
SIGN_EXTEND ,
ZERO_EXTEND ,
TRUNCATE ,
FLOAT_EXTEND ,
FLOAT_TRUNCATE ,
FLOAT ,
FIX ,
UNSIGNED_FLOAT ,
UNSIGNED_FIX ,
ABS ,
SQRT ,
FFS ,
CLZ ,
CTZ ,
POPCOUNT ,
PARITY ,
SIGN_EXTRACT ,
ZERO_EXTRACT ,
HIGH ,
LO_SUM ,
RANGE_INFO ,
RANGE_REG ,
RANGE_VAR ,
RANGE_LIVE ,
VEC_MERGE ,
VEC_SELECT ,
VEC_CONCAT ,
VEC_DUPLICATE ,
SS_PLUS ,
US_PLUS ,
SS_MINUS ,
US_MINUS ,
SS_TRUNCATE ,
US_TRUNCATE ,
VAR_LOCATION ,
  LAST_AND_UNUSED_RTX_CODE};
enum rtx_class {
  RTX_COMPARE,
  RTX_COMM_COMPARE,
  RTX_BIN_ARITH,
  RTX_COMM_ARITH,
  RTX_UNARY,
  RTX_EXTRA,
  RTX_MATCH,
  RTX_INSN,
  RTX_OBJ,
  RTX_CONST_OBJ,
  RTX_TERNARY,
  RTX_BITFIELD_OPS,
  RTX_AUTOINC
};
extern const unsigned char rtx_length[((int) LAST_AND_UNUSED_RTX_CODE)];
extern const char * const rtx_name[((int) LAST_AND_UNUSED_RTX_CODE)];
extern const char * const rtx_format[((int) LAST_AND_UNUSED_RTX_CODE)];
extern const enum rtx_class rtx_class[((int) LAST_AND_UNUSED_RTX_CODE)];
extern const unsigned char rtx_size[((int) LAST_AND_UNUSED_RTX_CODE)];
extern const unsigned char rtx_next[((int) LAST_AND_UNUSED_RTX_CODE)];
typedef struct
{
  unsigned min_align: 8;
  unsigned base_after_vec: 1;
  unsigned min_after_vec: 1;
  unsigned max_after_vec: 1;
  unsigned min_after_base: 1;
  unsigned max_after_base: 1;
  unsigned offset_unsigned: 1;
  unsigned : 2;
  unsigned scale : 8;
} addr_diff_vec_flags;
typedef struct mem_attrs
{
  long alias;
  tree expr;
  rtx offset;
  rtx size;
  unsigned int align;
} mem_attrs;
typedef struct reg_attrs
{
  tree decl;
  long offset;
} reg_attrs;
union rtunion_def
{
  int rtint;
  unsigned int rtuint;
  const char *rtstr;
  rtx rtx1;
  rtvec rtvec1;
  enum machine_mode rttype;
  addr_diff_vec_flags rt_addr_diff_vec_flags;
  struct cselib_val_struct *rt_cselib;
  struct bitmap_head_def *rtbit;
  tree rttree;
  struct basic_block_def *bb;
  mem_attrs *rtmem;
  reg_attrs *rtreg;
};
typedef union rtunion_def rtunion;
struct rtx_def
{
  unsigned int code: 16;
  unsigned int mode : 8;
  unsigned int jump : 1;
  unsigned int call : 1;
  unsigned int unchanging : 1;
  unsigned int volatil : 1;
  unsigned int in_struct : 1;
  unsigned int used : 1;
  unsigned frame_related : 1;
  unsigned return_val : 1;
  union u {
    rtunion fld[1];
    long hwint[1];
  } u;
};
struct rtvec_def {
  int num_elem;
  rtx elem[1];
};
enum reg_note
{
  REG_DEAD = 1,
  REG_INC,
  REG_EQUIV,
  REG_EQUAL,
  REG_RETVAL,
  REG_LIBCALL,
  REG_NONNEG,
  REG_NO_CONFLICT,
  REG_UNUSED,
  REG_CC_SETTER, REG_CC_USER,
  REG_LABEL,
  REG_DEP_ANTI, REG_DEP_OUTPUT,
  REG_BR_PROB,
  REG_VALUE_PROFILE,
  REG_NOALIAS,
  REG_SAVE_AREA,
  REG_BR_PRED,
  REG_FRAME_RELATED_EXPR,
  REG_EH_CONTEXT,
  REG_EH_REGION,
  REG_SAVE_NOTE,
  REG_MAYBE_DEAD,
  REG_NORETURN,
  REG_NON_LOCAL_GOTO,
  REG_CROSSING_JUMP,
  REG_SETJMP,
  REG_ALWAYS_RETURN,
  REG_VTABLE_REF
};
extern const char * const reg_note_name[];
enum insn_note
{
  NOTE_INSN_BIAS = -100,
  NOTE_INSN_DELETED,
  NOTE_INSN_BLOCK_BEG,
  NOTE_INSN_BLOCK_END,
  NOTE_INSN_LOOP_BEG,
  NOTE_INSN_LOOP_END,
  NOTE_INSN_LOOP_CONT,
  NOTE_INSN_LOOP_VTOP,
  NOTE_INSN_LOOP_END_TOP_COND,
  NOTE_INSN_FUNCTION_END,
  NOTE_INSN_PROLOGUE_END,
  NOTE_INSN_EPILOGUE_BEG,
  NOTE_INSN_DELETED_LABEL,
  NOTE_INSN_FUNCTION_BEG,
  NOTE_INSN_EH_REGION_BEG,
  NOTE_INSN_EH_REGION_END,
  NOTE_INSN_REPEATED_LINE_NUMBER,
  NOTE_INSN_BASIC_BLOCK,
  NOTE_INSN_EXPECTED_VALUE,
  NOTE_INSN_PREDICTION,
  NOTE_INSN_UNLIKELY_EXECUTED_CODE,
  NOTE_INSN_VAR_LOCATION,
  NOTE_INSN_MAX
};
extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
enum label_kind
{
  LABEL_NORMAL = 0,
  LABEL_STATIC_ENTRY,
  LABEL_GLOBAL_ENTRY,
  LABEL_WEAK_ENTRY
};
extern int rtx_cost (rtx, enum rtx_code);
extern int address_cost (rtx, enum machine_mode);
extern unsigned int subreg_lsb (rtx);
extern unsigned int subreg_lsb_1 (enum machine_mode, enum machine_mode,
      unsigned int);
extern unsigned int subreg_regno_offset (unsigned int, enum machine_mode,
      unsigned int, enum machine_mode);
extern unsigned char subreg_offset_representable_p (unsigned int, enum machine_mode,
        unsigned int, enum machine_mode);
extern unsigned int subreg_regno (rtx);
extern unsigned long nonzero_bits (rtx, enum machine_mode);
extern unsigned int num_sign_bit_copies (rtx, enum machine_mode);
extern int rtx_equal_function_value_matters;
extern int generating_concat_p;
extern int ceil_log2 (unsigned long);
extern rtx expand_builtin_expect_jump (tree, rtx, rtx);
extern void purge_builtin_constant_p (void);
extern void set_stack_check_libfunc (rtx);
extern long trunc_int_for_mode (long, enum machine_mode);
extern rtx plus_constant_wide (rtx, long);
extern rtx plus_constant_for_output_wide (rtx, long);
extern void optimize_save_area_alloca (rtx);
extern rtvec gen_rtvec (int, ...);
extern rtx copy_insn_1 (rtx);
extern rtx copy_insn (rtx);
extern rtx gen_int_mode (long, enum machine_mode);
extern rtx emit_copy_of_insn_after (rtx, rtx);
extern void set_reg_attrs_from_mem (rtx, rtx);
extern void set_mem_attrs_from_reg (rtx, rtx);
extern void set_reg_attrs_for_parm (rtx, rtx);
extern void set_reg_pointer_align (rtx, unsigned int);
extern int mem_expr_equal_p (tree, tree);
extern rtx rtx_alloc_stat (enum rtx_code );
extern rtvec rtvec_alloc (int);
extern rtx copy_rtx (rtx);
extern void dump_rtx_statistics (void);
extern rtx copy_rtx_if_shared (rtx);
extern rtx copy_most_rtx (rtx, rtx);
extern rtx shallow_copy_rtx_stat (rtx );
extern int rtx_equal_p (rtx, rtx);
extern rtvec gen_rtvec_v (int, rtx *);
extern rtx gen_reg_rtx (enum machine_mode);
extern rtx gen_rtx_REG_offset (rtx, enum machine_mode, unsigned int, int);
extern rtx gen_label_rtx (void);
extern int subreg_hard_regno (rtx, int);
extern rtx gen_lowpart_common (enum machine_mode, rtx);
extern rtx gen_lowpart_if_possible (enum machine_mode, rtx);
extern rtx gen_highpart (enum machine_mode, rtx);
extern rtx gen_highpart_mode (enum machine_mode, enum machine_mode, rtx);
extern rtx gen_realpart (enum machine_mode, rtx);
extern rtx gen_imagpart (enum machine_mode, rtx);
extern rtx operand_subword (rtx, unsigned int, int, enum machine_mode);
extern rtx operand_subword_force (rtx, unsigned int, enum machine_mode);
extern int subreg_lowpart_p (rtx);
extern unsigned int subreg_lowpart_offset (enum machine_mode,
        enum machine_mode);
extern unsigned int subreg_highpart_offset (enum machine_mode,
         enum machine_mode);
extern rtx make_safe_from (rtx, rtx);
extern rtx convert_memory_address (enum machine_mode, rtx);
extern rtx get_insns (void);
extern const char *get_insn_name (int);
extern rtx get_last_insn (void);
extern rtx get_last_insn_anywhere (void);
extern rtx get_first_nonnote_insn (void);
extern rtx get_last_nonnote_insn (void);
extern void start_sequence (void);
extern void push_to_sequence (rtx);
extern void end_sequence (void);
extern void push_to_full_sequence (rtx, rtx);
extern rtx immed_double_const (long, long,
          enum machine_mode);
extern rtx force_const_mem (enum machine_mode, rtx);
extern rtx get_pool_constant (rtx);
extern rtx get_pool_constant_mark (rtx, unsigned char *);
extern enum machine_mode get_pool_mode (rtx);
extern rtx get_pool_constant_for_function (struct function *, rtx);
extern enum machine_mode get_pool_mode_for_function (struct function *, rtx);
extern int get_pool_offset (rtx);
extern rtx simplify_subtraction (rtx);
extern rtx assign_stack_local (enum machine_mode, long, int);
extern rtx assign_stack_temp (enum machine_mode, long, int);
extern rtx assign_stack_temp_for_type (enum machine_mode,
           long, int, tree);
extern rtx assign_temp (tree, int, int, int);
extern rtx emit_insn_before (rtx, rtx);
extern rtx emit_insn_before_setloc (rtx, rtx, int);
extern rtx emit_jump_insn_before (rtx, rtx);
extern rtx emit_jump_insn_before_setloc (rtx, rtx, int);
extern rtx emit_call_insn_before (rtx, rtx);
extern rtx emit_call_insn_before_setloc (rtx, rtx, int);
extern rtx emit_barrier_before (rtx);
extern rtx emit_label_before (rtx, rtx);
extern rtx emit_note_before (int, rtx);
extern rtx emit_insn_after (rtx, rtx);
extern rtx emit_insn_after_setloc (rtx, rtx, int);
extern rtx emit_jump_insn_after (rtx, rtx);
extern rtx emit_jump_insn_after_setloc (rtx, rtx, int);
extern rtx emit_call_insn_after (rtx, rtx);
extern rtx emit_call_insn_after_setloc (rtx, rtx, int);
extern rtx emit_barrier_after (rtx);
extern rtx emit_label_after (rtx, rtx);
extern rtx emit_note_after (int, rtx);
extern rtx emit_note_copy_after (rtx, rtx);
extern rtx emit_insn (rtx);
extern rtx emit_jump_insn (rtx);
extern rtx emit_call_insn (rtx);
extern rtx emit_label (rtx);
extern rtx emit_barrier (void);
extern rtx emit_note (int);
extern rtx emit_note_copy (rtx);
extern rtx emit_line_note (location_t);
extern rtx make_insn_raw (rtx);
extern void add_function_usage_to (rtx, rtx);
extern rtx last_call_insn (void);
extern rtx previous_insn (rtx);
extern rtx next_insn (rtx);
extern rtx prev_nonnote_insn (rtx);
extern rtx next_nonnote_insn (rtx);
extern rtx prev_real_insn (rtx);
extern rtx next_real_insn (rtx);
extern rtx prev_active_insn (rtx);
extern rtx next_active_insn (rtx);
extern int active_insn_p (rtx);
extern rtx prev_label (rtx);
extern rtx next_label (rtx);
extern rtx skip_consecutive_labels (rtx);
extern rtx next_cc0_user (rtx);
extern rtx prev_cc0_setter (rtx);
extern tree choose_inner_scope (tree, tree);
extern int insn_line (rtx);
extern const char * insn_file (rtx);
extern int locator_line (int);
extern const char * locator_file (int);
extern int prologue_locator, epilogue_locator;
extern enum rtx_code reverse_condition (enum rtx_code);
extern enum rtx_code reverse_condition_maybe_unordered (enum rtx_code);
extern enum rtx_code swap_condition (enum rtx_code);
extern enum rtx_code unsigned_condition (enum rtx_code);
extern enum rtx_code signed_condition (enum rtx_code);
extern void mark_jump_label (rtx, rtx, int);
extern void cleanup_barriers (void);
extern unsigned char squeeze_notes (rtx *, rtx *);
extern rtx delete_related_insns (rtx);
extern void delete_jump (rtx);
extern void delete_barrier (rtx);
extern rtx get_label_before (rtx);
extern rtx get_label_after (rtx);
extern rtx follow_jumps (rtx);
extern rtx *find_constant_term_loc (rtx *);
extern rtx try_split (rtx, rtx, int);
extern int split_branch_probability;
extern rtx split_insns (rtx, rtx);
extern rtx simplify_unary_operation (enum rtx_code, enum machine_mode, rtx,
         enum machine_mode);
extern rtx simplify_binary_operation (enum rtx_code, enum machine_mode, rtx,
          rtx);
extern rtx simplify_ternary_operation (enum rtx_code, enum machine_mode,
           enum machine_mode, rtx, rtx, rtx);
extern rtx simplify_const_relational_operation (enum rtx_code,
      enum machine_mode, rtx, rtx);
extern rtx simplify_relational_operation (enum rtx_code, enum machine_mode,
       enum machine_mode, rtx, rtx);
extern rtx simplify_gen_binary (enum rtx_code, enum machine_mode, rtx, rtx);
extern rtx simplify_gen_unary (enum rtx_code, enum machine_mode, rtx,
          enum machine_mode);
extern rtx simplify_gen_ternary (enum rtx_code, enum machine_mode,
     enum machine_mode, rtx, rtx, rtx);
extern rtx simplify_gen_relational (enum rtx_code, enum machine_mode,
        enum machine_mode, rtx, rtx);
extern rtx simplify_subreg (enum machine_mode, rtx, enum machine_mode,
       unsigned int);
extern rtx simplify_gen_subreg (enum machine_mode, rtx, enum machine_mode,
    unsigned int);
extern rtx simplify_replace_rtx (rtx, rtx, rtx);
extern rtx simplify_rtx (rtx);
extern rtx avoid_constant_pool_reference (rtx);
extern enum machine_mode choose_hard_reg_mode (unsigned int, unsigned int,
            unsigned char);
extern rtx set_unique_reg_note (rtx, enum reg_note, rtx);
typedef struct replace_label_data
{
  rtx r1;
  rtx r2;
  unsigned char update_label_nuses;
} replace_label_data;
extern int rtx_addr_can_trap_p (rtx);
extern unsigned char nonzero_address_p (rtx);
extern int rtx_unstable_p (rtx);
extern int rtx_varies_p (rtx, int);
extern int rtx_addr_varies_p (rtx, int);
extern long get_integer_term (rtx);
extern rtx get_related_value (rtx);
extern rtx get_jump_table_offset (rtx, rtx *);
extern int global_reg_mentioned_p (rtx);
extern int reg_mentioned_p (rtx, rtx);
extern int count_occurrences (rtx, rtx, int);
extern int reg_referenced_p (rtx, rtx);
extern int reg_used_between_p (rtx, rtx, rtx);
extern int reg_referenced_between_p (rtx, rtx, rtx);
extern int reg_set_between_p (rtx, rtx, rtx);
extern int regs_set_between_p (rtx, rtx, rtx);
extern int commutative_operand_precedence (rtx);
extern int swap_commutative_operands_p (rtx, rtx);
extern int modified_between_p (rtx, rtx, rtx);
extern int no_labels_between_p (rtx, rtx);
extern int no_jumps_between_p (rtx, rtx);
extern int modified_in_p (rtx, rtx);
extern int insn_dependent_p (rtx, rtx);
extern int reg_set_p (rtx, rtx);
extern rtx single_set_2 (rtx, rtx);
extern int multiple_sets (rtx);
extern int set_noop_p (rtx);
extern int noop_move_p (rtx);
extern rtx find_last_value (rtx, rtx *, rtx, int);
extern int refers_to_regno_p (unsigned int, unsigned int, rtx, rtx *);
extern int reg_overlap_mentioned_p (rtx, rtx);
extern rtx set_of (rtx, rtx);
extern void note_stores (rtx, void (*) (rtx, rtx, void *), void *);
extern void note_uses (rtx *, void (*) (rtx *, void *), void *);
extern int dead_or_set_p (rtx, rtx);
extern int dead_or_set_regno_p (rtx, unsigned int);
extern rtx find_reg_note (rtx, enum reg_note, rtx);
extern rtx find_regno_note (rtx, enum reg_note, unsigned int);
extern rtx find_reg_equal_equiv_note (rtx);
extern int find_reg_fusage (rtx, enum rtx_code, rtx);
extern int find_regno_fusage (rtx, enum rtx_code, unsigned int);
extern int pure_call_p (rtx);
extern void remove_note (rtx, rtx);
extern int side_effects_p (rtx);
extern int volatile_refs_p (rtx);
extern int volatile_insn_p (rtx);
extern int may_trap_p (rtx);
extern int inequality_comparisons_p (rtx);
extern rtx replace_rtx (rtx, rtx, rtx);
extern rtx replace_regs (rtx, rtx *, unsigned int, int);
extern int replace_label (rtx *, void *);
extern int rtx_referenced_p (rtx, rtx);
extern unsigned char tablejump_p (rtx, rtx *, rtx *);
extern int computed_jump_p (rtx);
typedef int (*rtx_function) (rtx *, void *);
extern int for_each_rtx (rtx *, rtx_function, void *);
extern rtx regno_use_in (unsigned int, rtx);
extern int auto_inc_p (rtx);
extern int in_expr_list_p (rtx, rtx);
extern void remove_node_from_expr_list (rtx, rtx *);
extern int insns_safe_to_move_p (rtx, rtx, rtx *);
extern int loc_mentioned_in_p (rtx *, rtx);
extern rtx find_first_parameter_load (rtx, rtx);
extern unsigned char keep_with_call_p (rtx);
extern unsigned char label_is_jump_target_p (rtx, rtx);
extern rtx find_use_as_address (rtx, rtx, long);
void free_EXPR_LIST_list (rtx *);
void free_INSN_LIST_list (rtx *);
void free_EXPR_LIST_node (rtx);
void free_INSN_LIST_node (rtx);
rtx alloc_INSN_LIST (rtx, rtx);
rtx alloc_EXPR_LIST (int, rtx, rtx);
extern int max_parallel;
extern void free_reg_info (void);
extern int asm_noperands (rtx);
extern const char *decode_asm_operands (rtx, rtx *, rtx **, const char **,
     enum machine_mode *);
extern enum reg_class reg_preferred_class (int);
extern enum reg_class reg_alternate_class (int);
extern void split_all_insns (int);
extern void split_all_insns_noflow (void);
extern rtx const_int_rtx[64 * 2 + 1];
extern rtx const_true_rtx;
extern rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE];
enum global_rtl_index
{
  GR_PC,
  GR_CC0,
  GR_STACK_POINTER,
  GR_FRAME_POINTER,
  GR_HARD_FRAME_POINTER,
  GR_ARG_POINTER,
  GR_VIRTUAL_INCOMING_ARGS,
  GR_VIRTUAL_STACK_ARGS,
  GR_VIRTUAL_STACK_DYNAMIC,
  GR_VIRTUAL_OUTGOING_ARGS,
  GR_VIRTUAL_CFA,
  GR_MAX
};
extern rtx global_rtl[GR_MAX];
extern rtx pic_offset_table_rtx;
extern rtx static_chain_rtx;
extern rtx static_chain_incoming_rtx;
extern rtx return_address_pointer_rtx;
extern rtx gen_rtx_fmt_s (enum rtx_code, enum machine_mode mode,
           const char *arg0);
extern rtx gen_rtx_fmt_ee (enum rtx_code, enum machine_mode mode,
           rtx arg0, rtx arg1);
extern rtx gen_rtx_fmt_ue (enum rtx_code, enum machine_mode mode,
           rtx arg0, rtx arg1);
extern rtx gen_rtx_fmt_iss (enum rtx_code, enum machine_mode mode,
           int arg0, const char *arg1,
           const char *arg2);
extern rtx gen_rtx_fmt_is (enum rtx_code, enum machine_mode mode,
           int arg0, const char *arg1);
extern rtx gen_rtx_fmt_i (enum rtx_code, enum machine_mode mode,
           int arg0);
extern rtx gen_rtx_fmt_isE (enum rtx_code, enum machine_mode mode,
           int arg0, const char *arg1,
           rtvec arg2);
extern rtx gen_rtx_fmt_iE (enum rtx_code, enum machine_mode mode,
           int arg0, rtvec arg1);
extern rtx gen_rtx_fmt_sEss (enum rtx_code, enum machine_mode mode,
           const char *arg0, rtvec arg1,
           const char *arg2, const char *arg3);
extern rtx gen_rtx_fmt_eE (enum rtx_code, enum machine_mode mode,
           rtx arg0, rtvec arg1);
extern rtx gen_rtx_fmt_Ess (enum rtx_code, enum machine_mode mode,
           rtvec arg0, const char *arg1,
           const char *arg2);
extern rtx gen_rtx_fmt_E (enum rtx_code, enum machine_mode mode,
           rtvec arg0);
extern rtx gen_rtx_fmt_e (enum rtx_code, enum machine_mode mode,
           rtx arg0);
extern rtx gen_rtx_fmt_ss (enum rtx_code, enum machine_mode mode,
           const char *arg0, const char *arg1);
extern rtx gen_rtx_fmt_sies (enum rtx_code, enum machine_mode mode,
           const char *arg0, int arg1,
           rtx arg2, const char *arg3);
extern rtx gen_rtx_fmt_sse (enum rtx_code, enum machine_mode mode,
           const char *arg0, const char *arg1,
           rtx arg2);
extern rtx gen_rtx_fmt_sE (enum rtx_code, enum machine_mode mode,
           const char *arg0, rtvec arg1);
extern rtx gen_rtx_fmt_ii (enum rtx_code, enum machine_mode mode,
           int arg0, int arg1);
extern rtx gen_rtx_fmt_iuuBieiee (enum rtx_code, enum machine_mode mode,
           int arg0, rtx arg1, rtx arg2,
           struct basic_block_def *arg3,
           int arg4, rtx arg5, int arg6,
           rtx arg7, rtx arg8);
extern rtx gen_rtx_fmt_iuuBieiee0 (enum rtx_code, enum machine_mode mode,
           int arg0, rtx arg1, rtx arg2,
           struct basic_block_def *arg3,
           int arg4, rtx arg5, int arg6,
           rtx arg7, rtx arg8);
extern rtx gen_rtx_fmt_iuuBieieee (enum rtx_code, enum machine_mode mode,
           int arg0, rtx arg1, rtx arg2,
           struct basic_block_def *arg3,
           int arg4, rtx arg5, int arg6,
           rtx arg7, rtx arg8, rtx arg9);
extern rtx gen_rtx_fmt_iuu000000 (enum rtx_code, enum machine_mode mode,
           int arg0, rtx arg1, rtx arg2);
extern rtx gen_rtx_fmt_iuuB00is (enum rtx_code, enum machine_mode mode,
           int arg0, rtx arg1, rtx arg2,
           struct basic_block_def *arg3,
           int arg4, const char *arg5);
extern rtx gen_rtx_fmt_ssiEEsi (enum rtx_code, enum machine_mode mode,
           const char *arg0, const char *arg1,
           int arg2, rtvec arg3, rtvec arg4,
           const char *arg5, int arg6);
extern rtx gen_rtx_fmt_Ei (enum rtx_code, enum machine_mode mode,
           rtvec arg0, int arg1);
extern rtx gen_rtx_fmt_eEee0 (enum rtx_code, enum machine_mode mode,
           rtx arg0, rtvec arg1, rtx arg2,
           rtx arg3);
extern rtx gen_rtx_fmt_eee (enum rtx_code, enum machine_mode mode,
           rtx arg0, rtx arg1, rtx arg2);
extern rtx gen_rtx_fmt_ (enum rtx_code, enum machine_mode mode);
extern rtx gen_rtx_fmt_w (enum rtx_code, enum machine_mode mode,
           long arg0);
extern rtx gen_rtx_fmt_0 (enum rtx_code, enum machine_mode mode);
extern rtx gen_rtx_fmt_i00 (enum rtx_code, enum machine_mode mode,
           int arg0);
extern rtx gen_rtx_fmt_ei (enum rtx_code, enum machine_mode mode,
           rtx arg0, int arg1);
extern rtx gen_rtx_fmt_e0 (enum rtx_code, enum machine_mode mode,
           rtx arg0);
extern rtx gen_rtx_fmt_u00 (enum rtx_code, enum machine_mode mode,
           rtx arg0);
extern rtx gen_rtx_fmt_s00 (enum rtx_code, enum machine_mode mode,
           const char *arg0);
extern rtx gen_rtx_fmt_eeeee (enum rtx_code, enum machine_mode mode,
           rtx arg0, rtx arg1, rtx arg2,
           rtx arg3, rtx arg4);
extern rtx gen_rtx_fmt_Ee (enum rtx_code, enum machine_mode mode,
           rtvec arg0, rtx arg1);
extern rtx gen_rtx_fmt_uuEiiiiiibbii (enum rtx_code, enum machine_mode mode,
           rtx arg0, rtx arg1, rtvec arg2,
           int arg3, int arg4, int arg5,
           int arg6, int arg7, int arg8,
           struct bitmap_head_def *arg9,
           struct bitmap_head_def *arg10,
           int arg11, int arg12);
extern rtx gen_rtx_fmt_iiiiiiiitt (enum rtx_code, enum machine_mode mode,
           int arg0, int arg1, int arg2,
           int arg3, int arg4, int arg5,
           int arg6, int arg7,
           union tree_node *arg8,
           union tree_node *arg9);
extern rtx gen_rtx_fmt_eti (enum rtx_code, enum machine_mode mode,
           rtx arg0, union tree_node *arg1,
           int arg2);
extern rtx gen_rtx_fmt_bi (enum rtx_code, enum machine_mode mode,
           struct bitmap_head_def *arg0,
           int arg1);
extern rtx gen_rtx_fmt_te (enum rtx_code, enum machine_mode mode,
           union tree_node *arg0, rtx arg1);
extern rtx gen_rtx_CONST_INT (enum machine_mode, long);
extern rtx gen_rtx_CONST_VECTOR (enum machine_mode, rtvec);
extern rtx gen_raw_REG (enum machine_mode, int);
extern rtx gen_rtx_REG (enum machine_mode, unsigned);
extern rtx gen_rtx_SUBREG (enum machine_mode, rtx, int);
extern rtx gen_rtx_MEM (enum machine_mode, rtx);
extern rtx output_constant_def (tree, int);
extern rtx lookup_constant_def (tree);
extern int flow2_completed;
extern int reload_completed;
extern int epilogue_completed;
extern int reload_in_progress;
extern int cse_not_expected;
extern int no_new_pseudos;
extern int rtx_to_tree_code (enum rtx_code);
extern int delete_trivially_dead_insns (rtx, int);
extern int cse_main (rtx, int, int, FILE *);
extern void cse_condition_code_reg (void);
extern int comparison_dominates_p (enum rtx_code, enum rtx_code);
extern int condjump_p (rtx);
extern int any_condjump_p (rtx);
extern int any_uncondjump_p (rtx);
extern int safe_to_remove_jump_p (rtx);
extern rtx pc_set (rtx);
extern rtx condjump_label (rtx);
extern int simplejump_p (rtx);
extern int returnjump_p (rtx);
extern int onlyjump_p (rtx);
extern int only_sets_cc0_p (rtx);
extern int sets_cc0_p (rtx);
extern int invert_jump_1 (rtx, rtx);
extern int invert_jump (rtx, rtx, int);
extern int rtx_renumbered_equal_p (rtx, rtx);
extern int true_regnum (rtx);
extern unsigned int reg_or_subregno (rtx);
extern int redirect_jump_1 (rtx, rtx);
extern int redirect_jump (rtx, rtx, int);
extern void rebuild_jump_labels (rtx);
extern enum rtx_code reversed_comparison_code (rtx, rtx);
extern enum rtx_code reversed_comparison_code_parts (enum rtx_code,
           rtx, rtx, rtx);
extern void delete_for_peephole (rtx, rtx);
extern int condjump_in_parallel_p (rtx);
extern void purge_line_number_notes (rtx);
extern int max_reg_num (void);
extern int max_label_num (void);
extern int get_first_label_num (void);
extern void maybe_set_first_label_num (rtx);
extern void delete_insns_since (rtx);
extern void mark_reg_pointer (rtx, int);
extern void mark_user_reg (rtx);
extern void reset_used_flags (rtx);
extern void set_used_flags (rtx);
extern void reorder_insns (rtx, rtx, rtx);
extern void reorder_insns_nobb (rtx, rtx, rtx);
extern int get_max_uid (void);
extern int in_sequence_p (void);
extern void force_next_line_note (void);
extern void init_emit (void);
extern void init_emit_once (int);
extern void push_topmost_sequence (void);
extern void pop_topmost_sequence (void);
extern void reverse_comparison (rtx);
extern void set_new_first_and_last_insn (rtx, rtx);
extern void set_new_last_label_num (int);
extern void unshare_all_rtl (void);
extern void unshare_all_rtl_again (rtx);
extern void unshare_all_rtl_in_chain (rtx);
extern void verify_rtl_sharing (void);
extern void set_first_insn (rtx);
extern void set_last_insn (rtx);
extern void link_cc0_insns (rtx);
extern void add_insn (rtx);
extern void add_insn_before (rtx, rtx);
extern void add_insn_after (rtx, rtx);
extern void remove_insn (rtx);
extern void emit_insn_after_with_line_notes (rtx, rtx, rtx);
extern enum rtx_code classify_insn (rtx);
extern rtx emit (rtx);
int force_line_numbers (void);
void restore_line_number_status (int old_value);
extern void renumber_insns (FILE *);
extern void remove_unnecessary_notes (void);
extern rtx delete_insn (rtx);
extern rtx entry_of_function (void);
extern void delete_insn_chain (rtx, rtx);
extern rtx unlink_insn_chain (rtx, rtx);
extern rtx delete_insn_and_edges (rtx);
extern void delete_insn_chain_and_edges (rtx, rtx);
extern rtx gen_lowpart_SUBREG (enum machine_mode, rtx);
extern int combine_instructions (rtx, unsigned int);
extern unsigned int extended_count (rtx, enum machine_mode, int);
extern rtx remove_death (unsigned int, rtx);
extern void dump_combine_stats (FILE *);
extern void dump_combine_total_stats (FILE *);
extern void web_main (void);
extern void schedule_insns (FILE *);
extern void schedule_ebbs (FILE *);
extern void fix_sched_param (const char *, const char *);
extern const char *print_rtx_head;
extern void debug_rtx (rtx);
extern void debug_rtx_list (rtx, int);
extern void debug_rtx_range (rtx, rtx);
extern rtx debug_rtx_find (rtx, int);
extern void print_mem_expr (FILE *, tree);
extern void print_rtl (FILE *, rtx);
extern void print_simple_rtl (FILE *, rtx);
extern int print_rtl_single (FILE *, rtx);
extern void print_inline_rtx (FILE *, rtx, int);
extern void init_loop (void);
extern void loop_optimize (rtx, FILE *, int);
extern void branch_target_load_optimize (unsigned char);
extern void reposition_prologue_and_epilogue_notes (rtx);
extern void thread_prologue_and_epilogue_insns (rtx);
extern int prologue_epilogue_contains (rtx);
extern int sibcall_epilogue_contains (rtx);
extern void mark_temp_addr_taken (rtx);
extern void update_temp_slot_address (rtx, rtx);
extern void purge_hard_subreg_sets (rtx);
extern void set_file_and_line_for_stmt (location_t);
extern void expand_null_return (void);
extern void expand_naked_return (void);
extern void emit_jump (rtx);
extern int preserve_subexpressions_p (void);
extern rtx move_by_pieces (rtx, rtx, unsigned long,
      unsigned int, int);
extern void recompute_reg_usage (rtx, int);
extern int initialize_uninitialized_subregs (void);
extern void delete_dead_jumptables (void);
extern void print_rtl_with_bb (FILE *, rtx);
extern void dump_flow_info (FILE *);
extern void init_expmed (void);
extern void expand_inc (rtx, rtx);
extern void expand_dec (rtx, rtx);
extern rtx expand_mult_highpart (enum machine_mode, rtx,
     unsigned long, rtx, int, int);
extern unsigned char can_copy_p (enum machine_mode);
extern rtx fis_get_condition (rtx);
extern int gcse_main (rtx, FILE *);
extern int bypass_jumps (FILE *);
extern void gcse_after_reload_main (rtx, FILE *);
extern void mark_elimination (int, int);
extern int global_alloc (FILE *);
extern void dump_global_regs (FILE *);
extern void retry_global_alloc (int, HARD_REG_SET);
extern void build_insn_chain (rtx);
extern int reg_classes_intersect_p (enum reg_class, enum reg_class);
extern int reg_class_subset_p (enum reg_class, enum reg_class);
extern void globalize_reg (int);
extern void init_reg_modes_once (void);
extern void init_regs (void);
extern void init_fake_stack_mems (void);
extern void init_reg_sets (void);
extern void regset_release_memory (void);
extern void regclass_init (void);
extern void regclass (rtx, int, FILE *);
extern void reg_scan (rtx, unsigned int, int);
extern void reg_scan_update (rtx, rtx, unsigned int);
extern void fix_register (const char *, int, int);
extern void cannot_change_mode_set_regs (HARD_REG_SET *,
      enum machine_mode, unsigned int);
extern unsigned char invalid_mode_change_p (unsigned int, enum reg_class,
       enum machine_mode);
extern void regmove_optimize (rtx, int, FILE *);
extern void combine_stack_adjustments (void);
extern void dbr_schedule (rtx, FILE *);
extern void dump_local_alloc (FILE *);
extern int local_alloc (void);
extern unsigned char reg_to_stack (FILE *);
enum libcall_type
{
  LCT_NORMAL = 0,
  LCT_CONST = 1,
  LCT_PURE = 2,
  LCT_CONST_MAKE_BLOCK = 3,
  LCT_PURE_MAKE_BLOCK = 4,
  LCT_NORETURN = 5,
  LCT_THROW = 6,
  LCT_ALWAYS_RETURN = 7,
  LCT_RETURNS_TWICE = 8
};
extern void emit_library_call (rtx, enum libcall_type, enum machine_mode, int,
          ...);
extern rtx emit_library_call_value (rtx, rtx, enum libcall_type,
        enum machine_mode, int, ...);
extern int set_dominates_use (int, int, int, rtx, rtx);
extern int in_data_section (void);
extern void init_varasm_once (void);
extern void init_rtl (void);
extern void traverse_md_constants (int (*) (void **, void *), void *);
struct md_constant { char *name, *value; };
extern int read_skip_spaces (FILE *);
extern rtx read_rtx (FILE *);
extern const char *read_rtx_filename;
extern int read_rtx_lineno;
extern void fancy_abort (const char *, int, const char *)
    ;
extern void clear_reg_alias_info (rtx);
extern rtx canon_rtx (rtx);
extern int true_dependence (rtx, enum machine_mode, rtx, int (*)(rtx, int));
extern rtx get_addr (rtx);
extern int canon_true_dependence (rtx, enum machine_mode, rtx, rtx,
      int (*)(rtx, int));
extern int read_dependence (rtx, rtx);
extern int anti_dependence (rtx, rtx);
extern int output_dependence (rtx, rtx);
extern int unchanging_anti_dependence (rtx, rtx);
extern void mark_constant_function (void);
extern void init_alias_once (void);
extern void init_alias_analysis (void);
extern void end_alias_analysis (void);
extern rtx addr_side_effect_eval (rtx, int, int);
extern unsigned char memory_modified_in_insn_p (rtx, rtx);
extern rtx find_base_term (rtx);
extern rtx gen_hard_reg_clobber (enum machine_mode, unsigned int);
extern rtx get_reg_known_value (unsigned int);
extern unsigned char get_reg_known_equiv_p (unsigned int);
extern int stack_regs_mentioned (rtx insn);
extern rtx stack_limit_rtx;
extern void regrename_optimize (void);
extern void copyprop_hardreg_forward (void);
extern void if_convert (int);
extern void invert_br_probabilities (rtx);
extern unsigned char expensive_function_p (int);
extern void tracer (void);
extern void variable_tracking_main (void);
extern void get_mode_bounds (enum machine_mode, int, enum machine_mode,
        rtx *, rtx *);
extern rtx reversed_condition (rtx);
extern rtx compare_and_jump_seq (rtx, rtx, enum rtx_code, rtx, int, rtx);
extern rtx canon_condition (rtx);
extern void simplify_using_condition (rtx, rtx *, struct bitmap_head_def *);
extern void reg_alloc (void);
extern void sms_schedule (FILE *);
struct rtl_hooks
{
  rtx (*gen_lowpart) (enum machine_mode, rtx);
  rtx (*reg_nonzero_bits) (rtx, enum machine_mode, rtx, enum machine_mode,
      unsigned long, unsigned long *);
  rtx (*reg_num_sign_bit_copies) (rtx, enum machine_mode, rtx, enum machine_mode,
      unsigned int, unsigned int *);
};
extern struct rtl_hooks rtl_hooks;
extern const struct rtl_hooks general_rtl_hooks;
enum tree_code {
ERROR_MARK,
IDENTIFIER_NODE,
TREE_LIST,
TREE_VEC,
BLOCK,
VOID_TYPE,
INTEGER_TYPE,
REAL_TYPE,
COMPLEX_TYPE,
VECTOR_TYPE,
ENUMERAL_TYPE,
BOOLEAN_TYPE,
CHAR_TYPE,
POINTER_TYPE,
OFFSET_TYPE,
REFERENCE_TYPE,
METHOD_TYPE,
FILE_TYPE,
ARRAY_TYPE,
SET_TYPE,
RECORD_TYPE,
UNION_TYPE,
QUAL_UNION_TYPE,
FUNCTION_TYPE,
LANG_TYPE,
INTEGER_CST,
REAL_CST,
COMPLEX_CST,
VECTOR_CST,
STRING_CST,
FUNCTION_DECL,
LABEL_DECL,
CONST_DECL,
TYPE_DECL,
VAR_DECL,
PARM_DECL,
RESULT_DECL,
FIELD_DECL,
NAMESPACE_DECL,
TRANSLATION_UNIT_DECL,
COMPONENT_REF,
BIT_FIELD_REF,
INDIRECT_REF,
BUFFER_REF,
ARRAY_REF,
ARRAY_RANGE_REF,
OBJ_TYPE_REF,
EXC_PTR_EXPR,
FILTER_EXPR,
CONSTRUCTOR,
COMPOUND_EXPR,
MODIFY_EXPR,
INIT_EXPR,
TARGET_EXPR,
COND_EXPR,
BIND_EXPR,
LABELED_BLOCK_EXPR,
CALL_EXPR,
WITH_CLEANUP_EXPR,
CLEANUP_POINT_EXPR,
PLACEHOLDER_EXPR,
PLUS_EXPR,
MINUS_EXPR,
MULT_EXPR,
TRUNC_DIV_EXPR,
CEIL_DIV_EXPR,
FLOOR_DIV_EXPR,
ROUND_DIV_EXPR,
TRUNC_MOD_EXPR,
CEIL_MOD_EXPR,
FLOOR_MOD_EXPR,
ROUND_MOD_EXPR,
RDIV_EXPR,
EXACT_DIV_EXPR,
FIX_TRUNC_EXPR,
FIX_CEIL_EXPR,
FIX_FLOOR_EXPR,
FIX_ROUND_EXPR,
FLOAT_EXPR,
NEGATE_EXPR,
MIN_EXPR,
MAX_EXPR,
ABS_EXPR,
LSHIFT_EXPR,
RSHIFT_EXPR,
LROTATE_EXPR,
RROTATE_EXPR,
BIT_IOR_EXPR,
BIT_XOR_EXPR,
BIT_AND_EXPR,
BIT_NOT_EXPR,
TRUTH_ANDIF_EXPR,
TRUTH_ORIF_EXPR,
TRUTH_AND_EXPR,
TRUTH_OR_EXPR,
TRUTH_XOR_EXPR,
TRUTH_NOT_EXPR,
LT_EXPR,
LE_EXPR,
GT_EXPR,
GE_EXPR,
EQ_EXPR,
NE_EXPR,
UNORDERED_EXPR,
ORDERED_EXPR,
UNLT_EXPR,
UNLE_EXPR,
UNGT_EXPR,
UNGE_EXPR,
UNEQ_EXPR,
LTGT_EXPR,
IN_EXPR,
SET_LE_EXPR,
CARD_EXPR,
RANGE_EXPR,
CONVERT_EXPR,
NOP_EXPR,
NON_LVALUE_EXPR,
VIEW_CONVERT_EXPR,
SAVE_EXPR,
UNSAVE_EXPR,
ADDR_EXPR,
REFERENCE_EXPR,
ENTRY_VALUE_EXPR,
FDESC_EXPR,
COMPLEX_EXPR,
CONJ_EXPR,
REALPART_EXPR,
IMAGPART_EXPR,
PREDECREMENT_EXPR,
PREINCREMENT_EXPR,
POSTDECREMENT_EXPR,
POSTINCREMENT_EXPR,
VA_ARG_EXPR,
TRY_CATCH_EXPR,
TRY_FINALLY_EXPR,
DECL_EXPR,
LABEL_EXPR,
GOTO_EXPR,
GOTO_SUBROUTINE_EXPR,
RETURN_EXPR,
EXIT_EXPR,
LOOP_EXPR,
EXIT_BLOCK_EXPR,
SWITCH_EXPR,
CASE_LABEL_EXPR,
RESX_EXPR,
ASM_EXPR,
SSA_NAME,
PHI_NODE,
CATCH_EXPR,
EH_FILTER_EXPR,
SCEV_KNOWN,
SCEV_NOT_KNOWN,
POLYNOMIAL_CHREC,
STATEMENT_LIST,
VALUE_HANDLE,
TREE_BINFO,
  LAST_AND_UNUSED_TREE_CODE
};
extern const char tree_code_type[];
extern const unsigned char tree_code_length[];
extern const char *const tree_code_name[];
enum built_in_class
{
  NOT_BUILT_IN = 0,
  BUILT_IN_FRONTEND,
  BUILT_IN_MD,
  BUILT_IN_NORMAL
};
extern const char *const built_in_class_names[4];
enum built_in_function
{
BUILT_IN_ACOS,
BUILT_IN_ACOSF,
BUILT_IN_ACOSH,
BUILT_IN_ACOSHF,
BUILT_IN_ACOSHL,
BUILT_IN_ACOSL,
BUILT_IN_ASIN,
BUILT_IN_ASINF,
BUILT_IN_ASINH,
BUILT_IN_ASINHF,
BUILT_IN_ASINHL,
BUILT_IN_ASINL,
BUILT_IN_ATAN,
BUILT_IN_ATAN2,
BUILT_IN_ATAN2F,
BUILT_IN_ATAN2L,
BUILT_IN_ATANF,
BUILT_IN_ATANH,
BUILT_IN_ATANHF,
BUILT_IN_ATANHL,
BUILT_IN_ATANL,
BUILT_IN_CBRT,
BUILT_IN_CBRTF,
BUILT_IN_CBRTL,
BUILT_IN_CEIL,
BUILT_IN_CEILF,
BUILT_IN_CEILL,
BUILT_IN_COPYSIGN,
BUILT_IN_COPYSIGNF,
BUILT_IN_COPYSIGNL,
BUILT_IN_COS,
BUILT_IN_COSF,
BUILT_IN_COSH,
BUILT_IN_COSHF,
BUILT_IN_COSHL,
BUILT_IN_COSL,
BUILT_IN_DREM,
BUILT_IN_DREMF,
BUILT_IN_DREML,
BUILT_IN_ERF,
BUILT_IN_ERFC,
BUILT_IN_ERFCF,
BUILT_IN_ERFCL,
BUILT_IN_ERFF,
BUILT_IN_ERFL,
BUILT_IN_EXP,
BUILT_IN_EXP10,
BUILT_IN_EXP10F,
BUILT_IN_EXP10L,
BUILT_IN_EXP2,
BUILT_IN_EXP2F,
BUILT_IN_EXP2L,
BUILT_IN_EXPF,
BUILT_IN_EXPL,
BUILT_IN_EXPM1,
BUILT_IN_EXPM1F,
BUILT_IN_EXPM1L,
BUILT_IN_FABS,
BUILT_IN_FABSF,
BUILT_IN_FABSL,
BUILT_IN_FDIM,
BUILT_IN_FDIMF,
BUILT_IN_FDIML,
BUILT_IN_FLOOR,
BUILT_IN_FLOORF,
BUILT_IN_FLOORL,
BUILT_IN_FMA,
BUILT_IN_FMAF,
BUILT_IN_FMAL,
BUILT_IN_FMAX,
BUILT_IN_FMAXF,
BUILT_IN_FMAXL,
BUILT_IN_FMIN,
BUILT_IN_FMINF,
BUILT_IN_FMINL,
BUILT_IN_FMOD,
BUILT_IN_FMODF,
BUILT_IN_FMODL,
BUILT_IN_FREXP,
BUILT_IN_FREXPF,
BUILT_IN_FREXPL,
BUILT_IN_GAMMA,
BUILT_IN_GAMMAF,
BUILT_IN_GAMMAL,
BUILT_IN_HUGE_VAL,
BUILT_IN_HUGE_VALF,
BUILT_IN_HUGE_VALL,
BUILT_IN_HYPOT,
BUILT_IN_HYPOTF,
BUILT_IN_HYPOTL,
BUILT_IN_ILOGB,
BUILT_IN_ILOGBF,
BUILT_IN_ILOGBL,
BUILT_IN_INF,
BUILT_IN_INFF,
BUILT_IN_INFL,
BUILT_IN_J0,
BUILT_IN_J0F,
BUILT_IN_J0L,
BUILT_IN_J1,
BUILT_IN_J1F,
BUILT_IN_J1L,
BUILT_IN_JN,
BUILT_IN_JNF,
BUILT_IN_JNL,
BUILT_IN_LDEXP,
BUILT_IN_LDEXPF,
BUILT_IN_LDEXPL,
BUILT_IN_LGAMMA,
BUILT_IN_LGAMMAF,
BUILT_IN_LGAMMAL,
BUILT_IN_LLRINT,
BUILT_IN_LLRINTF,
BUILT_IN_LLRINTL,
BUILT_IN_LLROUND,
BUILT_IN_LLROUNDF,
BUILT_IN_LLROUNDL,
BUILT_IN_LOG,
BUILT_IN_LOG10,
BUILT_IN_LOG10F,
BUILT_IN_LOG10L,
BUILT_IN_LOG1P,
BUILT_IN_LOG1PF,
BUILT_IN_LOG1PL,
BUILT_IN_LOG2,
BUILT_IN_LOG2F,
BUILT_IN_LOG2L,
BUILT_IN_LOGB,
BUILT_IN_LOGBF,
BUILT_IN_LOGBL,
BUILT_IN_LOGF,
BUILT_IN_LOGL,
BUILT_IN_LRINT,
BUILT_IN_LRINTF,
BUILT_IN_LRINTL,
BUILT_IN_LROUND,
BUILT_IN_LROUNDF,
BUILT_IN_LROUNDL,
BUILT_IN_MODF,
BUILT_IN_MODFF,
BUILT_IN_MODFL,
BUILT_IN_NAN,
BUILT_IN_NANF,
BUILT_IN_NANL,
BUILT_IN_NANS,
BUILT_IN_NANSF,
BUILT_IN_NANSL,
BUILT_IN_NEARBYINT,
BUILT_IN_NEARBYINTF,
BUILT_IN_NEARBYINTL,
BUILT_IN_NEXTAFTER,
BUILT_IN_NEXTAFTERF,
BUILT_IN_NEXTAFTERL,
BUILT_IN_NEXTTOWARD,
BUILT_IN_NEXTTOWARDF,
BUILT_IN_NEXTTOWARDL,
BUILT_IN_POW,
BUILT_IN_POW10,
BUILT_IN_POW10F,
BUILT_IN_POW10L,
BUILT_IN_POWF,
BUILT_IN_POWL,
BUILT_IN_REMAINDER,
BUILT_IN_REMAINDERF,
BUILT_IN_REMAINDERL,
BUILT_IN_REMQUO,
BUILT_IN_REMQUOF,
BUILT_IN_REMQUOL,
BUILT_IN_RINT,
BUILT_IN_RINTF,
BUILT_IN_RINTL,
BUILT_IN_ROUND,
BUILT_IN_ROUNDF,
BUILT_IN_ROUNDL,
BUILT_IN_SCALB,
BUILT_IN_SCALBF,
BUILT_IN_SCALBL,
BUILT_IN_SCALBLN,
BUILT_IN_SCALBLNF,
BUILT_IN_SCALBLNL,
BUILT_IN_SCALBN,
BUILT_IN_SCALBNF,
BUILT_IN_SCALBNL,
BUILT_IN_SIGNBIT,
BUILT_IN_SIGNBITF,
BUILT_IN_SIGNBITL,
BUILT_IN_SIGNIFICAND,
BUILT_IN_SIGNIFICANDF,
BUILT_IN_SIGNIFICANDL,
BUILT_IN_SIN,
BUILT_IN_SINCOS,
BUILT_IN_SINCOSF,
BUILT_IN_SINCOSL,
BUILT_IN_SINF,
BUILT_IN_SINH,
BUILT_IN_SINHF,
BUILT_IN_SINHL,
BUILT_IN_SINL,
BUILT_IN_SQRT,
BUILT_IN_SQRTF,
BUILT_IN_SQRTL,
BUILT_IN_TAN,
BUILT_IN_TANF,
BUILT_IN_TANH,
BUILT_IN_TANHF,
BUILT_IN_TANHL,
BUILT_IN_TANL,
BUILT_IN_TGAMMA,
BUILT_IN_TGAMMAF,
BUILT_IN_TGAMMAL,
BUILT_IN_TRUNC,
BUILT_IN_TRUNCF,
BUILT_IN_TRUNCL,
BUILT_IN_Y0,
BUILT_IN_Y0F,
BUILT_IN_Y0L,
BUILT_IN_Y1,
BUILT_IN_Y1F,
BUILT_IN_Y1L,
BUILT_IN_YN,
BUILT_IN_YNF,
BUILT_IN_YNL,
BUILT_IN_CABS,
BUILT_IN_CABSF,
BUILT_IN_CABSL,
BUILT_IN_CACOS,
BUILT_IN_CACOSF,
BUILT_IN_CACOSH,
BUILT_IN_CACOSHF,
BUILT_IN_CACOSHL,
BUILT_IN_CACOSL,
BUILT_IN_CARG,
BUILT_IN_CARGF,
BUILT_IN_CARGL,
BUILT_IN_CASIN,
BUILT_IN_CASINF,
BUILT_IN_CASINH,
BUILT_IN_CASINHF,
BUILT_IN_CASINHL,
BUILT_IN_CASINL,
BUILT_IN_CATAN,
BUILT_IN_CATANF,
BUILT_IN_CATANH,
BUILT_IN_CATANHF,
BUILT_IN_CATANHL,
BUILT_IN_CATANL,
BUILT_IN_CCOS,
BUILT_IN_CCOSF,
BUILT_IN_CCOSH,
BUILT_IN_CCOSHF,
BUILT_IN_CCOSHL,
BUILT_IN_CCOSL,
BUILT_IN_CEXP,
BUILT_IN_CEXPF,
BUILT_IN_CEXPL,
BUILT_IN_CIMAG,
BUILT_IN_CIMAGF,
BUILT_IN_CIMAGL,
BUILT_IN_CONJ,
BUILT_IN_CONJF,
BUILT_IN_CONJL,
BUILT_IN_CPOW,
BUILT_IN_CPOWF,
BUILT_IN_CPOWL,
BUILT_IN_CPROJ,
BUILT_IN_CPROJF,
BUILT_IN_CPROJL,
BUILT_IN_CREAL,
BUILT_IN_CREALF,
BUILT_IN_CREALL,
BUILT_IN_CSIN,
BUILT_IN_CSINF,
BUILT_IN_CSINH,
BUILT_IN_CSINHF,
BUILT_IN_CSINHL,
BUILT_IN_CSINL,
BUILT_IN_CSQRT,
BUILT_IN_CSQRTF,
BUILT_IN_CSQRTL,
BUILT_IN_CTAN,
BUILT_IN_CTANF,
BUILT_IN_CTANH,
BUILT_IN_CTANHF,
BUILT_IN_CTANHL,
BUILT_IN_CTANL,
BUILT_IN_BCMP,
BUILT_IN_BCOPY,
BUILT_IN_BZERO,
BUILT_IN_FFS,
BUILT_IN_FFSL,
BUILT_IN_FFSLL,
BUILT_IN_INDEX,
BUILT_IN_MEMCMP,
BUILT_IN_MEMCPY,
BUILT_IN_MEMMOVE,
BUILT_IN_MEMPCPY,
BUILT_IN_MEMSET,
BUILT_IN_RINDEX,
BUILT_IN_STPCPY,
BUILT_IN_STRCAT,
BUILT_IN_STRCHR,
BUILT_IN_STRCMP,
BUILT_IN_STRCPY,
BUILT_IN_STRCSPN,
BUILT_IN_STRDUP,
BUILT_IN_STRLEN,
BUILT_IN_STRNCAT,
BUILT_IN_STRNCMP,
BUILT_IN_STRNCPY,
BUILT_IN_STRPBRK,
BUILT_IN_STRRCHR,
BUILT_IN_STRSPN,
BUILT_IN_STRSTR,
BUILT_IN_FPRINTF,
BUILT_IN_FPRINTF_UNLOCKED,
BUILT_IN_FPUTC,
BUILT_IN_FPUTC_UNLOCKED,
BUILT_IN_FPUTS,
BUILT_IN_FPUTS_UNLOCKED,
BUILT_IN_FSCANF,
BUILT_IN_FWRITE,
BUILT_IN_FWRITE_UNLOCKED,
BUILT_IN_PRINTF,
BUILT_IN_PRINTF_UNLOCKED,
BUILT_IN_PUTCHAR,
BUILT_IN_PUTCHAR_UNLOCKED,
BUILT_IN_PUTS,
BUILT_IN_PUTS_UNLOCKED,
BUILT_IN_SCANF,
BUILT_IN_SNPRINTF,
BUILT_IN_SPRINTF,
BUILT_IN_SSCANF,
BUILT_IN_VFPRINTF,
BUILT_IN_VFSCANF,
BUILT_IN_VPRINTF,
BUILT_IN_VSCANF,
BUILT_IN_VSNPRINTF,
BUILT_IN_VSPRINTF,
BUILT_IN_VSSCANF,
BUILT_IN_ISALNUM,
BUILT_IN_ISALPHA,
BUILT_IN_ISASCII,
BUILT_IN_ISBLANK,
BUILT_IN_ISCNTRL,
BUILT_IN_ISDIGIT,
BUILT_IN_ISGRAPH,
BUILT_IN_ISLOWER,
BUILT_IN_ISPRINT,
BUILT_IN_ISPUNCT,
BUILT_IN_ISSPACE,
BUILT_IN_ISUPPER,
BUILT_IN_ISXDIGIT,
BUILT_IN_TOASCII,
BUILT_IN_TOLOWER,
BUILT_IN_TOUPPER,
BUILT_IN_ISWALNUM,
BUILT_IN_ISWALPHA,
BUILT_IN_ISWBLANK,
BUILT_IN_ISWCNTRL,
BUILT_IN_ISWDIGIT,
BUILT_IN_ISWGRAPH,
BUILT_IN_ISWLOWER,
BUILT_IN_ISWPRINT,
BUILT_IN_ISWPUNCT,
BUILT_IN_ISWSPACE,
BUILT_IN_ISWUPPER,
BUILT_IN_ISWXDIGIT,
BUILT_IN_TOWLOWER,
BUILT_IN_TOWUPPER,
BUILT_IN_ABORT,
BUILT_IN_ABS,
BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
BUILT_IN_ALLOCA,
BUILT_IN_APPLY,
BUILT_IN_APPLY_ARGS,
BUILT_IN_ARGS_INFO,
BUILT_IN_CALLOC,
BUILT_IN_CLASSIFY_TYPE,
BUILT_IN_CLZ,
BUILT_IN_CLZL,
BUILT_IN_CLZLL,
BUILT_IN_CONSTANT_P,
BUILT_IN_CTZ,
BUILT_IN_CTZL,
BUILT_IN_CTZLL,
BUILT_IN_DCGETTEXT,
BUILT_IN_DGETTEXT,
BUILT_IN_DWARF_CFA,
BUILT_IN_DWARF_SP_COLUMN,
BUILT_IN_EH_RETURN,
BUILT_IN_EH_RETURN_DATA_REGNO,
BUILT_IN_EXECL,
BUILT_IN_EXECLP,
BUILT_IN_EXECLE,
BUILT_IN_EXECV,
BUILT_IN_EXECVP,
BUILT_IN_EXECVE,
BUILT_IN_EXIT,
BUILT_IN_EXPECT,
BUILT_IN_EXTEND_POINTER,
BUILT_IN_EXTRACT_RETURN_ADDR,
BUILT_IN_FORK,
BUILT_IN_FRAME_ADDRESS,
BUILT_IN_FROB_RETURN_ADDR,
BUILT_IN_GETTEXT,
BUILT_IN_IMAXABS,
BUILT_IN_INIT_DWARF_REG_SIZES,
BUILT_IN_FINITE,
BUILT_IN_FINITEF,
BUILT_IN_FINITEL,
BUILT_IN_ISINF,
BUILT_IN_ISINFF,
BUILT_IN_ISINFL,
BUILT_IN_ISNAN,
BUILT_IN_ISNANF,
BUILT_IN_ISNANL,
BUILT_IN_ISGREATER,
BUILT_IN_ISGREATEREQUAL,
BUILT_IN_ISLESS,
BUILT_IN_ISLESSEQUAL,
BUILT_IN_ISLESSGREATER,
BUILT_IN_ISUNORDERED,
BUILT_IN_LABS,
BUILT_IN_LLABS,
BUILT_IN_LONGJMP,
BUILT_IN_MALLOC,
BUILT_IN_NEXT_ARG,
BUILT_IN_PARITY,
BUILT_IN_PARITYL,
BUILT_IN_PARITYLL,
BUILT_IN_POPCOUNT,
BUILT_IN_POPCOUNTL,
BUILT_IN_POPCOUNTLL,
BUILT_IN_PREFETCH,
BUILT_IN_RETURN,
BUILT_IN_RETURN_ADDRESS,
BUILT_IN_SAVEREGS,
BUILT_IN_SETJMP,
BUILT_IN_STACK_ALLOC,
BUILT_IN_STACK_SAVE,
BUILT_IN_STACK_RESTORE,
BUILT_IN_STDARG_START,
BUILT_IN_STRFMON,
BUILT_IN_STRFTIME,
BUILT_IN_TRAP,
BUILT_IN_UNWIND_INIT,
BUILT_IN_UPDATE_SETJMP_BUF,
BUILT_IN_VA_COPY,
BUILT_IN_VA_END,
BUILT_IN_VA_START,
BUILT_IN__EXIT,
BUILT_IN__EXIT2,
BUILT_IN_INIT_TRAMPOLINE,
BUILT_IN_ADJUST_TRAMPOLINE,
BUILT_IN_NONLOCAL_GOTO,
BUILT_IN_PROFILE_FUNC_ENTER,
BUILT_IN_PROFILE_FUNC_EXIT,
  END_BUILTINS
};
extern const char *const built_in_names[(int) END_BUILTINS];
extern tree built_in_decls[(int) END_BUILTINS];
extern tree implicit_built_in_decls[(int) END_BUILTINS];
union tree_ann_d;
struct tree_common
{
  tree chain;
  tree type;
  union tree_ann_d *ann;
  unsigned int code : 8;
  unsigned side_effects_flag : 1;
  unsigned constant_flag : 1;
  unsigned addressable_flag : 1;
  unsigned volatile_flag : 1;
  unsigned readonly_flag : 1;
  unsigned unsigned_flag : 1;
  unsigned asm_written_flag: 1;
  unsigned nowarning_flag : 1;
  unsigned used_flag : 1;
  unsigned nothrow_flag : 1;
  unsigned static_flag : 1;
  unsigned public_flag : 1;
  unsigned private_flag : 1;
  unsigned protected_flag : 1;
  unsigned deprecated_flag : 1;
  unsigned invariant_flag : 1;
  unsigned lang_flag_0 : 1;
  unsigned lang_flag_1 : 1;
  unsigned lang_flag_2 : 1;
  unsigned lang_flag_3 : 1;
  unsigned lang_flag_4 : 1;
  unsigned lang_flag_5 : 1;
  unsigned lang_flag_6 : 1;
  unsigned visited : 1;
};
struct tree_int_cst
{
  struct tree_common common;
  struct tree_int_cst_lowhi {
    unsigned long low;
    long high;
  } int_cst;
};
struct real_value;
struct tree_real_cst
{
  struct tree_common common;
  struct real_value * real_cst_ptr;
};
struct tree_string
{
  struct tree_common common;
  int length;
  const char *pointer;
};
struct tree_complex
{
  struct tree_common common;
  tree real;
  tree imag;
};
struct tree_vector
{
  struct tree_common common;
  tree elements;
};
struct tree_identifier
{
  struct tree_common common;
  struct ht_identifier id;
};
struct tree_list
{
  struct tree_common common;
  tree purpose;
  tree value1;
};
struct tree_vec
{
  struct tree_common common;
  int length;
  tree a[1];
};
struct tree_exp
{
  struct tree_common common;
  source_locus locus;
  int complexity;
  tree block;
  tree
    operands[1];
};
struct ptr_info_def;
struct tree_ssa_name
{
  struct tree_common common;
  tree var;
  unsigned int version;
  struct ptr_info_def *ptr_info;
  tree value1_handle;
  void * aux;
};
struct edge_def;
struct phi_arg_d
{
  tree def;
  struct edge_def * e;
  unsigned char nonzero;
};
struct tree_phi_node
{
  struct tree_common common;
  tree result;
  int num_args;
  int capacity;
  int rewritten;
  struct phi_arg_d a[1];
};
struct varray_head_tag;
struct tree_block
{
  struct tree_common common;
  unsigned handler_block_flag : 1;
  unsigned abstract_flag : 1;
  unsigned block_num : 30;
  tree vars;
  tree subblocks;
  tree supercontext;
  tree abstract_origin;
  tree fragment_origin;
  tree fragment_chain;
};
struct die_struct;
struct tree_type
{
  struct tree_common common;
  tree value1s;
  tree size;
  tree size_unit;
  tree attributes;
  unsigned int uid;
  unsigned int precision : 9;
  unsigned int mode : 7;
  unsigned string_flag : 1;
  unsigned no_force_blk_flag : 1;
  unsigned needs_constructing_flag : 1;
  unsigned transparent_union_flag : 1;
  unsigned packed_flag : 1;
  unsigned restrict_flag : 1;
  unsigned spare : 2;
  unsigned lang_flag_0 : 1;
  unsigned lang_flag_1 : 1;
  unsigned lang_flag_2 : 1;
  unsigned lang_flag_3 : 1;
  unsigned lang_flag_4 : 1;
  unsigned lang_flag_5 : 1;
  unsigned lang_flag_6 : 1;
  unsigned user_align : 1;
  unsigned int align;
  tree pointer_to;
  tree reference_to;
  union tree_type_symtab {
    int address;
    char * pointer;
    struct die_struct * die;
  }
                    symtab;
  tree name;
  tree minval;
  tree maxval;
  tree next_variant;
  tree main_variant;
  tree binfo;
  tree context;
  long alias_set;
  struct lang_type *lang_specific;
};
struct tree_binfo
{
  struct tree_common common;
  tree offset;
  tree vtable;
  tree virtuals;
  tree base_types;
  tree vptr_field;
  tree base_accesses;
  tree inheritance;
  tree lang_slots[1];
};
extern unsigned binfo_lang_slots;
enum symbol_visibility
{
  VISIBILITY_DEFAULT,
  VISIBILITY_INTERNAL,
  VISIBILITY_HIDDEN,
  VISIBILITY_PROTECTED
};
struct function;
union alias_var_def;
struct tree_decl
{
  struct tree_common common;
  location_t locus;
  unsigned int uid;
  tree size;
  unsigned int mode : 8;
  unsigned external_flag : 1;
  unsigned nonlocal_flag : 1;
  unsigned regdecl_flag : 1;
  unsigned inline_flag : 1;
  unsigned bit_field_flag : 1;
  unsigned virtual_flag : 1;
  unsigned ignored_flag : 1;
  unsigned abstract_flag : 1;
  unsigned in_system_header_flag : 1;
  unsigned common_flag : 1;
  unsigned defer_output : 1;
  unsigned transparent_union : 1;
  unsigned static_ctor_flag : 1;
  unsigned static_dtor_flag : 1;
  unsigned artificial_flag : 1;
  unsigned weak_flag : 1;
  unsigned non_addr_const_p : 1;
  unsigned no_instrument_function_entry_exit : 1;
  unsigned comdat_flag : 1;
  unsigned malloc_flag : 1;
  unsigned no_limit_stack : 1;
  unsigned int built_in_class : 2;
  unsigned pure_flag : 1;
  unsigned non_addressable : 1;
  unsigned user_align : 1;
  unsigned uninlinable : 1;
  unsigned thread_local_flag : 1;
  unsigned declared_inline_flag : 1;
  unsigned seen_in_bind_expr : 1;
  unsigned int visibility : 2;
  unsigned lang_flag_0 : 1;
  unsigned lang_flag_1 : 1;
  unsigned lang_flag_2 : 1;
  unsigned lang_flag_3 : 1;
  unsigned lang_flag_4 : 1;
  unsigned lang_flag_5 : 1;
  unsigned lang_flag_6 : 1;
  unsigned lang_flag_7 : 1;
  unsigned needs_to_live_in_memory : 1;
  unsigned possibly_inlined : 1;
  union tree_decl_u1 {
    enum built_in_function f;
    long i;
    struct tree_decl_u1_a {
      unsigned int align : 24;
      unsigned int off_align : 8;
    } a;
  } u1;
  tree size_unit;
  tree name;
  tree context;
  tree arguments;
  tree result;
  tree initial;
  tree abstract_origin;
  tree assembler_name;
  tree section_name;
  tree attributes;
  rtx rtl;
  union tree_decl_u2 {
    struct function * f;
    rtx r;
    tree t;
    int i;
  } u2;
  tree saved_tree;
  tree inlined_fns;
  tree vindex;
  long pointer_alias_set;
  union alias_var_def * alias_var;
  struct lang_decl *lang_specific;
};
struct tree_statement_list_node
 
{
  struct tree_statement_list_node *prev;
  struct tree_statement_list_node *next;
  tree stmt;
};
struct tree_statement_list
 
{
  struct tree_common common;
  struct tree_statement_list_node *head;
  struct tree_statement_list_node *tail;
};
struct value_set;
struct tree_value_handle
{
  struct tree_common common;
  struct value_set * expr_set;
  unsigned int id;
};
enum tree_node_structure_enum {
  TS_COMMON,
  TS_INT_CST,
  TS_REAL_CST,
  TS_VECTOR,
  TS_STRING,
  TS_COMPLEX,
  TS_IDENTIFIER,
  TS_DECL,
  TS_TYPE,
  TS_LIST,
  TS_VEC,
  TS_EXP,
  TS_SSA_NAME,
  TS_PHI_NODE,
  TS_BLOCK,
  TS_BINFO,
  TS_STATEMENT_LIST,
  TS_VALUE_HANDLE,
  LAST_TS_ENUM
};
union tree_node
{
  struct tree_common common;
  struct tree_int_cst int_cst;
  struct tree_real_cst real_cst;
  struct tree_vector vector;
  struct tree_string string;
  struct tree_complex complex;
  struct tree_identifier identifier;
  struct tree_decl decl;
  struct tree_type type;
  struct tree_list list;
  struct tree_vec vec;
  struct tree_exp exp;
  struct tree_ssa_name ssa_name;
  struct tree_phi_node phi;
  struct tree_block block;
  struct tree_binfo binfo;
  struct tree_statement_list stmt_list;
  struct tree_value_handle value_handle;
};
enum tree_index
{
  TI_ERROR_MARK,
  TI_INTQI_TYPE,
  TI_INTHI_TYPE,
  TI_INTSI_TYPE,
  TI_INTDI_TYPE,
  TI_INTTI_TYPE,
  TI_UINTQI_TYPE,
  TI_UINTHI_TYPE,
  TI_UINTSI_TYPE,
  TI_UINTDI_TYPE,
  TI_UINTTI_TYPE,
  TI_INTEGER_ZERO,
  TI_INTEGER_ONE,
  TI_INTEGER_MINUS_ONE,
  TI_NULL_POINTER,
  TI_SIZE_ZERO,
  TI_SIZE_ONE,
  TI_BITSIZE_ZERO,
  TI_BITSIZE_ONE,
  TI_BITSIZE_UNIT,
  TI_PUBLIC,
  TI_PROTECTED,
  TI_PRIVATE,
  TI_BOOLEAN_FALSE,
  TI_BOOLEAN_TRUE,
  TI_COMPLEX_INTEGER_TYPE,
  TI_COMPLEX_FLOAT_TYPE,
  TI_COMPLEX_DOUBLE_TYPE,
  TI_COMPLEX_LONG_DOUBLE_TYPE,
  TI_FLOAT_TYPE,
  TI_DOUBLE_TYPE,
  TI_LONG_DOUBLE_TYPE,
  TI_FLOAT_PTR_TYPE,
  TI_DOUBLE_PTR_TYPE,
  TI_LONG_DOUBLE_PTR_TYPE,
  TI_INTEGER_PTR_TYPE,
  TI_VOID_TYPE,
  TI_PTR_TYPE,
  TI_CONST_PTR_TYPE,
  TI_SIZE_TYPE,
  TI_PID_TYPE,
  TI_PTRDIFF_TYPE,
  TI_VA_LIST_TYPE,
  TI_BOOLEAN_TYPE,
  TI_FILEPTR_TYPE,
  TI_VOID_LIST_NODE,
  TI_MAIN_IDENTIFIER,
  TI_MAX
};
extern tree global_trees[TI_MAX];
enum integer_type_kind
{
  itk_char,
  itk_signed_char,
  itk_unsigned_char,
  itk_short,
  itk_unsigned_short,
  itk_int,
  itk_unsigned_int,
  itk_long,
  itk_unsigned_long,
  itk_long_long,
  itk_unsigned_long_long,
  itk_none
};
typedef enum integer_type_kind integer_type_kind;
extern tree integer_types[itk_none];
enum tls_model {
  TLS_MODEL_GLOBAL_DYNAMIC = 1,
  TLS_MODEL_LOCAL_DYNAMIC,
  TLS_MODEL_INITIAL_EXEC,
  TLS_MODEL_LOCAL_EXEC
};
extern enum tls_model flag_tls_default;
enum ptrmemfunc_vbit_where_t
{
  ptrmemfunc_vbit_in_pfn,
  ptrmemfunc_vbit_in_delta
};
extern tree frame_base_decl;
extern tree decl_assembler_name (tree);
extern size_t tree_size (tree);
extern tree make_node_stat (enum tree_code );
extern tree copy_node_stat (tree );
extern tree copy_list (tree);
extern tree make_tree_binfo_stat (unsigned );
extern tree make_tree_vec_stat (int );
extern tree make_phi_node (tree, int);
extern void init_phinodes (void);
extern void fini_phinodes (void);
extern void release_phi_node (tree);
extern void init_ssanames (void);
extern void fini_ssanames (void);
extern tree make_ssa_name (tree, tree);
extern tree duplicate_ssa_name (tree, tree);
extern void release_ssa_name (tree);
extern tree get_identifier (const char *);
extern tree get_identifier_with_length (const char *, size_t);
extern tree maybe_get_identifier (const char *);
extern tree build (enum tree_code, tree, ...);
extern tree build_nt (enum tree_code, ...);
extern tree build0_stat (enum tree_code, tree );
extern tree build1_stat (enum tree_code, tree, tree );
extern tree build2_stat (enum tree_code, tree, tree, tree );
extern tree build3_stat (enum tree_code, tree, tree, tree, tree );
extern tree build4_stat (enum tree_code, tree, tree, tree, tree,
    tree );
extern tree build_int_2_wide (unsigned long, long);
extern tree build_vector (tree, tree);
extern tree build_constructor (tree, tree);
extern tree build_real_from_int_cst (tree, tree);
extern tree build_complex (tree, tree, tree);
extern tree build_string (int, const char *);
extern tree build_tree_list_stat (tree, tree );
extern tree build_decl_stat (enum tree_code, tree, tree );
extern tree build_block (tree, tree, tree, tree, tree);
extern void annotate_with_file_line (tree, const char *, int);
extern void annotate_with_locus (tree, location_t);
extern tree build_empty_stmt (void);
extern tree make_signed_type (int);
extern tree make_unsigned_type (int);
extern void initialize_sizetypes (void);
extern void set_sizetype (tree);
extern void fixup_unsigned_type (tree);
extern tree build_pointer_type_for_mode (tree, enum machine_mode, unsigned char);
extern tree build_pointer_type (tree);
extern tree build_reference_type_for_mode (tree, enum machine_mode, unsigned char);
extern tree build_reference_type (tree);
extern tree build_vector_type_for_mode (tree, enum machine_mode);
extern tree build_vector_type (tree innertype, int nunits);
extern tree build_type_no_quals (tree);
extern tree build_index_type (tree);
extern tree build_index_2_type (tree, tree);
extern tree build_array_type (tree, tree);
extern tree build_function_type (tree, tree);
extern tree build_function_type_list (tree, ...);
extern tree build_method_type_directly (tree, tree, tree);
extern tree build_method_type (tree, tree);
extern tree build_offset_type (tree, tree);
extern tree build_complex_type (tree);
extern tree array_type_nelts (tree);
extern tree value1_member (tree, tree);
extern tree purpose_member (tree, tree);
extern tree binfo_member (tree, tree);
extern int attribute_list_equal (tree, tree);
extern int attribute_list_contained (tree, tree);
extern int tree_int_cst_equal (tree, tree);
extern int tree_int_cst_lt (tree, tree);
extern int tree_int_cst_compare (tree, tree);
extern int host_integerp (tree, int);
extern long tree_low_cst (tree, int);
extern int tree_int_cst_msb (tree);
extern int tree_int_cst_sgn (tree);
extern int tree_expr_nonnegative_p (tree);
extern int rtl_expr_nonnegative_p (rtx);
extern tree get_inner_array_type (tree);
extern tree make_tree (tree, rtx);
extern tree build_type_attribute_variant (tree, tree);
extern tree build_decl_attribute_variant (tree, tree);
struct attribute_spec
{
  const char *const name;
  const int min_length;
  const int max_length;
  const unsigned char decl_required;
  const unsigned char type_required;
  const unsigned char function_type_required;
  tree (*const handler) (tree *node, tree name, tree args,
     int flags, unsigned char *no_add_attrs);
};
enum attribute_flags
{
  ATTR_FLAG_DECL_NEXT = 1,
  ATTR_FLAG_FUNCTION_NEXT = 2,
  ATTR_FLAG_ARRAY_NEXT = 4,
  ATTR_FLAG_TYPE_IN_PLACE = 8,
  ATTR_FLAG_BUILT_IN = 16
};
extern tree merge_decl_attributes (tree, tree);
extern tree merge_type_attributes (tree, tree);
extern void default_register_cpp_builtins (struct cpp_reader *);
extern void split_specs_attrs (tree, tree *, tree *);
extern tree strip_attrs (tree);
extern int valid_machine_attribute (tree, tree, tree, tree);
extern int is_attribute_p (const char *, tree);
extern tree lookup_attribute (const char *, tree);
extern tree merge_attributes (tree, tree);
extern unsigned char check_qualified_type (tree, tree, int);
extern tree get_qualified_type (tree, int);
extern tree build_qualified_type (tree, int);
extern tree build_type_copy (tree);
extern void finish_builtin_struct (tree, const char *,
        tree, tree);
extern void layout_type (tree);
typedef struct record_layout_info_s
{
  tree t;
  tree offset;
  unsigned int offset_align;
  tree bitpos;
  unsigned int record_align;
  unsigned int unpacked_align;
  tree prev_field;
  tree pending_statics;
  int remaining_in_alignment;
  int packed_maybe_necessary;
} *record_layout_info;
extern void set_lang_adjust_rli (void (*) (record_layout_info));
extern record_layout_info start_record_layout (tree);
extern tree bit_from_pos (tree, tree);
extern tree byte_from_pos (tree, tree);
extern void pos_from_bit (tree *, tree *, unsigned int, tree);
extern void normalize_offset (tree *, tree *, unsigned int);
extern tree rli_size_unit_so_far (record_layout_info);
extern tree rli_size_so_far (record_layout_info);
extern void normalize_rli (record_layout_info);
extern void place_field (record_layout_info, tree);
extern void compute_record_mode (tree);
extern void finish_record_layout (record_layout_info, int);
extern tree type_hash_canon (unsigned int, tree);
extern void layout_decl (tree, unsigned);
extern enum machine_mode mode_for_size_tree (tree, enum mode_class, int);
extern tree non_lvalue (tree);
extern tree pedantic_non_lvalue (tree);
extern tree convert (tree, tree);
extern unsigned int expr_align (tree);
extern tree expr_first (tree);
extern tree expr_last (tree);
extern tree expr_only (tree);
extern tree size_in_bytes (tree);
extern long int_size_in_bytes (tree);
extern tree bit_position (tree);
extern long int_bit_position (tree);
extern tree byte_position (tree);
extern long int_byte_position (tree);
enum size_type_kind
{
  SIZETYPE,
  SSIZETYPE,
  USIZETYPE,
  BITSIZETYPE,
  SBITSIZETYPE,
  UBITSIZETYPE,
  TYPE_KIND_LAST};
extern tree sizetype_tab[(int) TYPE_KIND_LAST];
extern tree size_binop (enum tree_code, tree, tree);
extern tree size_diffop (tree, tree);
extern tree size_int_wide (long, enum size_type_kind);
extern tree size_int_type_wide (long, tree);
extern tree round_up (tree, int);
extern tree round_down (tree, int);
extern tree get_pending_sizes (void);
extern void put_pending_size (tree);
extern void put_pending_sizes (tree);
extern unsigned int maximum_field_alignment;
extern unsigned int set_alignment;
extern tree chainon (tree, tree);
extern tree tree_cons_stat (tree, tree, tree );
extern tree tree_last (tree);
extern tree nreverse (tree);
extern int list_length (tree);
extern int fields_length (tree);
extern unsigned char initializer_zerop (tree);
extern void categorize_ctor_elements (tree, long *, long *);
extern long count_type_elements (tree);
extern int mostly_zeros_p (tree);
extern void add_var_to_bind_expr (tree, tree);
extern int integer_zerop (tree);
extern int integer_onep (tree);
extern int integer_all_onesp (tree);
extern int integer_pow2p (tree);
extern int integer_nonzerop (tree);
extern int staticp (tree);
extern tree save_expr (tree);
extern tree skip_simple_arithmetic (tree);
extern int first_rtl_op (enum tree_code);
enum tree_node_structure_enum tree_node_structure (tree);
extern tree unsave_expr (tree);
extern void unsave_expr_1 (tree);
extern int unsafe_for_reeval (tree);
extern unsigned char contains_placeholder_p (tree);
extern unsigned char type_contains_placeholder_p (tree);
extern int has_cleanups (tree);
extern tree substitute_in_expr (tree, tree, tree);
extern tree substitute_placeholder_in_expr (tree, tree);
extern tree variable_size (tree);
extern tree stabilize_reference (tree);
extern tree stabilize_reference_1 (tree);
extern tree get_unwidened (tree, tree);
extern tree get_narrower (tree, int *);
extern tree get_inner_reference (tree, long *, long *,
     tree *, enum machine_mode *, int *, int *);
extern int handled_component_p (tree);
extern tree array_ref_element_size (tree);
extern tree array_ref_low_bound (tree);
extern tree component_ref_field_offset (tree);
extern tree get_containing_scope (tree);
extern tree decl_function_context (tree);
extern tree decl_type_context (tree);
extern int real_zerop (tree);
extern int pedantic_lvalues;
extern tree current_function_decl;
extern tree current_function_func_begin_label;
extern tree current_file_decl;
extern int all_types_permanent;
extern tree poplevel (int, int, int);
extern tree builtin_function (const char *, tree, int, enum built_in_class,
         const char *, tree);
extern unsigned crc32_string (unsigned, const char *);
extern void clean_symbol_name (char *);
extern tree get_file_function_name_long (const char *);
extern tree get_set_constructor_bits (tree, char *, int);
extern tree get_set_constructor_bytes (tree, unsigned char *, int);
extern tree get_callee_fndecl (tree);
extern void change_decl_assembler_name (tree, tree);
extern int type_num_arguments (tree);
extern tree lhd_unsave_expr_now (tree);
extern unsigned char associative_tree_code (enum tree_code);
extern unsigned char commutative_tree_code (enum tree_code);
extern void expand_fixups (rtx);
extern void expand_expr_stmt (tree);
extern void expand_expr_stmt_value (tree, int, int);
extern int warn_if_unused_value (tree, location_t);
extern void expand_decl_init (tree);
extern void expand_label (tree);
extern void expand_goto (tree);
extern void expand_asm (tree, int);
extern void expand_start_cond (tree, int);
extern void expand_end_cond (void);
extern void expand_start_else (void);
extern void expand_start_elseif (tree);
extern void expand_stack_alloc (tree, tree);
extern rtx expand_stack_save (void);
extern void expand_stack_restore (tree);
extern void expand_return (tree);
extern void expand_start_bindings_and_block (int, tree);
extern void expand_end_bindings (tree, int, int);
extern void warn_about_unused_variables (tree);
extern void start_cleanup_deferral (void);
extern void end_cleanup_deferral (void);
extern int is_body_block (tree);
extern int conditional_context (void);
extern struct nesting * current_nesting_level (void);
extern tree last_cleanup_this_contour (void);
extern void expand_start_case (int, tree, tree, const char *);
extern void expand_end_case_type (tree, tree);
extern int add_case_node (tree, tree, tree, tree *, unsigned char);
extern int pushcase (tree, tree (*) (tree, tree), tree, tree *);
extern int pushcase_range (tree, tree, tree (*) (tree, tree), tree, tree *);
extern void using_eh_for_cleanups (void);
extern tree fold (tree);
extern tree fold_initializer (tree);
extern tree fold_convert (tree, tree);
extern tree fold_single_bit_test (enum tree_code, tree, tree, tree);
extern tree fold_abs_const (tree, tree);
extern int force_fit_type (tree, int);
extern int add_double (unsigned long, long,
         unsigned long, long,
         unsigned long *, long *);
extern int neg_double (unsigned long, long,
         unsigned long *, long *);
extern int mul_double (unsigned long, long,
         unsigned long, long,
         unsigned long *, long *);
extern void lshift_double (unsigned long, long,
      long, unsigned int,
      unsigned long *, long *, int);
extern void rshift_double (unsigned long, long,
      long, unsigned int,
      unsigned long *, long *, int);
extern void lrotate_double (unsigned long, long,
       long, unsigned int,
       unsigned long *, long *);
extern void rrotate_double (unsigned long, long,
       long, unsigned int,
       unsigned long *, long *);
extern int div_and_round_double (enum tree_code, int, unsigned long,
     long, unsigned long,
     long, unsigned long *,
     long *, unsigned long *,
     long *);
enum operand_equal_flag
{
  OEP_ONLY_CONST = 1,
  OEP_PURE_SAME = 2
};
extern int operand_equal_p (tree, tree, unsigned int);
extern tree omit_one_operand (tree, tree, tree);
extern tree omit_two_operands (tree, tree, tree, tree);
extern tree invert_truthvalue (tree);
extern tree nondestructive_fold_unary_to_constant (enum tree_code, tree, tree);
extern tree nondestructive_fold_binary_to_constant (enum tree_code, tree, tree, tree);
extern tree fold_read_from_constant_string (tree);
extern tree int_const_binop (enum tree_code, tree, tree, int);
extern tree build_fold_addr_expr (tree);
extern tree build_fold_addr_expr_with_type (tree, tree);
extern tree build_fold_indirect_ref (tree);
extern unsigned char tree_swap_operands_p (tree, tree, unsigned char);
extern enum tree_code swap_tree_comparison (enum tree_code);
extern tree fold_builtin (tree);
extern enum built_in_function builtin_mathfn_code (tree);
extern tree build_function_call_expr (tree, tree);
extern tree mathfn_built_in (tree, enum built_in_function fn);
extern tree strip_float_extensions (tree);
extern tree simplify_builtin (tree, int);
extern tree c_strlen (tree, int);
extern tree std_gimplify_va_arg_expr (tree, tree, tree *, tree *);
extern tree strip_float_extensions (tree);
extern void record_component_aliases (tree);
extern long get_alias_set (tree);
extern int alias_sets_conflict_p (long, long);
extern int alias_sets_might_conflict_p (long, long);
extern int readonly_fields_p (tree);
extern int objects_must_conflict_p (tree, tree);
extern int really_constant_p (tree);
extern int int_fits_type_p (tree, tree);
extern unsigned char variably_modified_type_p (tree, tree);
extern int tree_log2 (tree);
extern int tree_floor_log2 (tree);
extern int simple_cst_equal (tree, tree);
extern unsigned int iterative_hash_expr (tree, unsigned int);
extern int compare_tree_int (tree, unsigned long);
extern int type_list_equal (tree, tree);
extern int chain_member (tree, tree);
extern tree type_hash_lookup (unsigned int, tree);
extern void type_hash_add (unsigned int, tree);
extern int simple_cst_list_equal (tree, tree);
extern void dump_tree_statistics (void);
extern void expand_function_end (void);
extern void expand_function_start (tree);
extern void expand_pending_sizes (tree);
extern void recompute_tree_invarant_for_addr_expr (tree);
extern unsigned char needs_to_live_in_memory (tree);
extern tree make_vector (enum machine_mode, tree, int);
extern tree reconstruct_complex_type (tree, tree);
extern int real_onep (tree);
extern int real_twop (tree);
extern int real_minus_onep (tree);
extern void init_ttree (void);
extern void build_common_tree_nodes (int);
extern void build_common_tree_nodes_2 (int);
extern tree build_range_type (tree, tree, tree);
extern void expand_main_function (void);
extern void init_dummy_function_start (void);
extern void expand_dummy_function_end (void);
extern void init_function_for_compilation (void);
extern void allocate_struct_function (tree);
extern void init_function_start (tree);
extern unsigned char use_register_for_decl (tree);
extern void assign_parms (tree);
extern void setjmp_vars_warning (tree);
extern void setjmp_args_warning (void);
extern void init_temp_slots (void);
extern void combine_temp_slots (void);
extern void free_temp_slots (void);
extern void pop_temp_slots (void);
extern void push_temp_slots (void);
extern void preserve_temp_slots (rtx);
extern void preserve_rtl_expr_temps (tree);
extern int aggregate_value_p (tree, tree);
extern void push_function_context (void);
extern void pop_function_context (void);
extern void push_function_context_to (tree);
extern void pop_function_context_from (tree);
extern void print_rtl (FILE *, rtx);
extern void debug_tree (tree);
extern void print_node (FILE *, const char *, tree, int);
extern void print_node_brief (FILE *, const char *, tree, int);
extern void indent_to (FILE *, int);
extern unsigned char debug_find_tree (tree, tree);
extern rtx expand_builtin_return_addr (enum built_in_function, int, rtx);
extern void check_max_integer_computation_mode (tree);
extern rtx emit_line_note (location_t);
extern int flags_from_decl_or_type (tree);
extern int call_expr_flags (tree);
extern int setjmp_call_p (tree);
extern unsigned char alloca_call_p (tree);
extern tree decl_attributes (tree *, tree, int);
extern void set_decl_abstract_flags (tree, int);
extern void set_decl_origin_self (tree);
extern void set_min_and_max_values_for_integral_type (tree, int, unsigned char);
extern void fixup_signed_type (tree);
extern void internal_reference_types (void);
extern unsigned int update_alignment_for_field (record_layout_info, tree,
                                                unsigned int);
extern void make_decl_rtl (tree, const char *);
extern void make_decl_one_only (tree);
extern int supports_one_only (void);
extern void variable_section (tree, int);
enum tls_model decl_tls_model (tree);
extern void resolve_unique_section (tree, int, int);
extern void mark_referenced (tree);
extern void mark_decl_referenced (tree);
extern void notice_global_symbol (tree);
extern void emit_nop (void);
extern void expand_computed_goto (tree);
extern unsigned char parse_output_constraint (const char **, int, int, int,
         unsigned char *, unsigned char *, unsigned char *);
extern unsigned char parse_input_constraint (const char **, int, int, int, int,
        const char * const *, unsigned char *, unsigned char *);
extern void expand_asm_operands (tree, tree, tree, tree, int, location_t);
extern void expand_asm_expr (tree);
extern unsigned char asm_op_is_mem_input (tree, tree);
extern tree resolve_asm_operand_names (tree, tree, tree);
extern int any_pending_cleanups (void);
extern void init_stmt_for_function (void);
extern void expand_start_target_temps (void);
extern void expand_end_target_temps (void);
extern void expand_elseif (tree);
extern void save_stack_pointer (void);
extern void expand_decl (tree);
extern int expand_decl_cleanup (tree, tree);
extern int expand_decl_cleanup_eh (tree, tree, int);
extern void expand_anon_union_decl (tree, tree, tree);
extern int containing_blocks_have_cleanups_or_stack_level (void);
extern tree create_artificial_label (void);
extern void gimplify_function_tree (tree);
extern const char *get_name (tree);
extern tree unshare_expr (tree);
extern void sort_case_labels (tree);
extern tree get_file_function_name (int);
extern char *dwarf2out_cfi_label (void);
extern void dwarf2out_def_cfa (const char *, unsigned, long);
extern void dwarf2out_window_save (const char *);
extern void dwarf2out_args_size (const char *, long);
extern void dwarf2out_reg_save (const char *, unsigned, long);
extern void dwarf2out_return_save (const char *, long);
extern void dwarf2out_return_reg (const char *, unsigned);
typedef tree (*walk_tree_fn) (tree *, int *, void *);
tree walk_tree (tree*, walk_tree_fn, void*, void*);
tree walk_tree_without_duplicates (tree*, walk_tree_fn, void*);
enum tree_dump_index
{
  TDI_none,
  TDI_tu,
  TDI_class,
  TDI_original,
  TDI_generic,
  TDI_nested,
  TDI_inlined,
  TDI_vcg,
  TDI_xml,
  TDI_all,
  TDI_end
};
typedef struct dump_info *dump_info_p;
extern int dump_flag (dump_info_p, int, tree);
extern int dump_enabled_p (enum tree_dump_index);
extern FILE *dump_begin (enum tree_dump_index, int *);
extern void dump_end (enum tree_dump_index, FILE *);
extern void dump_node (tree, int, FILE *);
extern int dump_switch_p (const char *);
extern const char *dump_flag_name (enum tree_dump_index);
extern void set_decl_rtl (tree, rtx);
extern void set_decl_incoming_rtl (tree, rtx);
extern void fancy_abort (const char *, int, const char *)
    ;
typedef enum
{
  d_kind,
  t_kind,
  b_kind,
  s_kind,
  r_kind,
  e_kind,
  c_kind,
  id_kind,
  perm_list_kind,
  temp_list_kind,
  vec_kind,
  binfo_kind,
  phi_kind,
  ssa_name_kind,
  x_kind,
  lang_decl,
  lang_type,
  all_kinds
} tree_node_kind;
extern int tree_node_counts[];
extern int tree_node_sizes[];
extern unsigned char in_gimple_form;
extern void override_options (void);
extern void optimization_options (int, int);
extern int ix86_can_use_return_insn_p (void);
extern int ix86_frame_pointer_required (void);
extern void ix86_setup_frame_addresses (void);
extern void ix86_file_end (void);
extern long ix86_initial_elimination_offset (int, int);
extern void ix86_expand_prologue (void);
extern void ix86_expand_epilogue (int);
extern void ix86_output_addr_vec_elt (FILE *, int);
extern void ix86_output_addr_diff_elt (FILE *, int, int);
extern int ix86_aligned_p (rtx);
extern int standard_80387_constant_p (rtx);
extern const char *standard_80387_constant_opcode (rtx);
extern rtx standard_80387_constant_rtx (int);
extern int standard_sse_constant_p (rtx);
extern int symbolic_reference_mentioned_p (rtx);
extern unsigned char extended_reg_mentioned_p (rtx);
extern unsigned char x86_extended_QIreg_mentioned_p (rtx);
extern unsigned char x86_extended_reg_mentioned_p (rtx);
extern int any_fp_register_operand (rtx, enum machine_mode);
extern int register_and_not_any_fp_reg_operand (rtx, enum machine_mode);
extern int fp_register_operand (rtx, enum machine_mode);
extern int register_and_not_fp_reg_operand (rtx, enum machine_mode);
extern int x86_64_general_operand (rtx, enum machine_mode);
extern int x86_64_szext_general_operand (rtx, enum machine_mode);
extern int x86_64_nonmemory_operand (rtx, enum machine_mode);
extern int x86_64_szext_nonmemory_operand (rtx, enum machine_mode);
extern int x86_64_immediate_operand (rtx, enum machine_mode);
extern int x86_64_zext_immediate_operand (rtx, enum machine_mode);
extern int symbolic_operand (rtx, enum machine_mode);
extern int tls_symbolic_operand (rtx, enum machine_mode);
extern int global_dynamic_symbolic_operand (rtx, enum machine_mode);
extern int local_dynamic_symbolic_operand (rtx, enum machine_mode);
extern int initial_exec_symbolic_operand (rtx, enum machine_mode);
extern int local_exec_symbolic_operand (rtx, enum machine_mode);
extern int pic_symbolic_operand (rtx, enum machine_mode);
extern int call_insn_operand (rtx, enum machine_mode);
extern int sibcall_insn_operand (rtx, enum machine_mode);
extern int constant_call_address_operand (rtx, enum machine_mode);
extern int const0_operand (rtx, enum machine_mode);
extern int const1_operand (rtx, enum machine_mode);
extern int const248_operand (rtx, enum machine_mode);
extern int incdec_operand (rtx, enum machine_mode);
extern int reg_no_sp_operand (rtx, enum machine_mode);
extern int mmx_reg_operand (rtx, enum machine_mode);
extern int general_no_elim_operand (rtx, enum machine_mode);
extern int nonmemory_no_elim_operand (rtx, enum machine_mode);
extern int q_regs_operand (rtx, enum machine_mode);
extern int non_q_regs_operand (rtx, enum machine_mode);
extern int sse_comparison_operator (rtx, enum machine_mode);
extern int fcmov_comparison_operator (rtx, enum machine_mode);
extern int cmp_fp_expander_operand (rtx, enum machine_mode);
extern int ix86_comparison_operator (rtx, enum machine_mode);
extern int ext_register_operand (rtx, enum machine_mode);
extern int binary_fp_operator (rtx, enum machine_mode);
extern int mult_operator (rtx, enum machine_mode);
extern int div_operator (rtx, enum machine_mode);
extern int arith_or_logical_operator (rtx, enum machine_mode);
extern int promotable_binary_operator (rtx, enum machine_mode);
extern int memory_displacement_operand (rtx, enum machine_mode);
extern int cmpsi_operand (rtx, enum machine_mode);
extern int long_memory_operand (rtx, enum machine_mode);
extern int aligned_operand (rtx, enum machine_mode);
extern enum machine_mode ix86_cc_mode (enum rtx_code, rtx, rtx);
extern int ix86_expand_movstr (rtx, rtx, rtx, rtx);
extern int ix86_expand_clrstr (rtx, rtx, rtx);
extern int ix86_expand_strlen (rtx, rtx, rtx, rtx);
extern unsigned char legitimate_constant_p (rtx);
extern unsigned char constant_address_p (rtx);
extern unsigned char legitimate_pic_operand_p (rtx);
extern int legitimate_pic_address_disp_p (rtx);
extern int legitimate_address_p (enum machine_mode, rtx, int);
extern rtx legitimize_pic_address (rtx, rtx);
extern rtx legitimize_address (rtx, rtx, enum machine_mode);
extern void print_reg (rtx, int, FILE*);
extern void print_operand (FILE*, rtx, int);
extern void print_operand_address (FILE*, rtx);
extern unsigned char output_addr_const_extra (FILE*, rtx);
extern void split_di (rtx[], int, rtx[], rtx[]);
extern void split_ti (rtx[], int, rtx[], rtx[]);
extern const char *output_set_got (rtx);
extern const char *output_387_binary_op (rtx, rtx*);
extern const char *output_387_reg_move (rtx, rtx*);
extern const char *output_fix_trunc (rtx, rtx*);
extern const char *output_fp_compare (rtx, rtx*, int, int);
extern void i386_dwarf_output_addr_const (FILE*, rtx);
extern void i386_output_dwarf_dtprel (FILE*, int, rtx);
extern void ix86_expand_clear (rtx);
extern void ix86_expand_move (enum machine_mode, rtx[]);
extern void ix86_expand_vector_move (enum machine_mode, rtx[]);
extern void ix86_expand_binary_operator (enum rtx_code,
      enum machine_mode, rtx[]);
extern int ix86_binary_operator_ok (enum rtx_code, enum machine_mode, rtx[]);
extern void ix86_expand_unary_operator (enum rtx_code, enum machine_mode,
     rtx[]);
extern int ix86_unary_operator_ok (enum rtx_code, enum machine_mode, rtx[]);
extern int ix86_match_ccmode (rtx, enum machine_mode);
extern rtx ix86_expand_compare (enum rtx_code, rtx *, rtx *);
extern int ix86_use_fcomi_compare (enum rtx_code);
extern void ix86_expand_branch (enum rtx_code, rtx);
extern int ix86_expand_setcc (enum rtx_code, rtx);
extern int ix86_expand_int_movcc (rtx[]);
extern int ix86_expand_fp_movcc (rtx[]);
extern int ix86_expand_int_addcc (rtx[]);
extern void ix86_expand_call (rtx, rtx, rtx, rtx, rtx, int);
extern void x86_initialize_trampoline (rtx, rtx, rtx);
extern rtx ix86_zero_extend_to_Pmode (rtx);
extern void ix86_split_long_move (rtx[]);
extern void ix86_split_ashldi (rtx *, rtx);
extern void ix86_split_ashrdi (rtx *, rtx);
extern void ix86_split_lshrdi (rtx *, rtx);
extern rtx ix86_find_base_term (rtx);
extern int ix86_check_movabs (rtx, int);
extern rtx assign_386_stack_local (enum machine_mode, int);
extern int ix86_attr_length_immediate_default (rtx, int);
extern int ix86_attr_length_address_default (rtx);
extern enum machine_mode ix86_fp_compare_mode (enum rtx_code);
extern int x86_64_sign_extended_value (rtx);
extern int x86_64_zero_extended_value (rtx);
extern rtx ix86_libcall_value (enum machine_mode);
extern unsigned char ix86_function_value_regno_p (int);
extern unsigned char ix86_function_arg_regno_p (int);
extern int ix86_function_arg_boundary (enum machine_mode, tree);
extern int ix86_return_in_memory (tree);
extern void ix86_va_start (tree, rtx);
extern rtx ix86_va_arg (tree, tree);
extern rtx ix86_force_to_memory (enum machine_mode, rtx);
extern void ix86_free_from_memory (enum machine_mode);
extern void ix86_split_fp_branch (enum rtx_code code, rtx, rtx, rtx, rtx, rtx);
extern int ix86_hard_regno_mode_ok (int, enum machine_mode);
extern int ix86_register_move_cost (enum machine_mode, enum reg_class,
        enum reg_class);
extern int ix86_secondary_memory_needed (enum reg_class, enum reg_class,
      enum machine_mode, int);
extern enum reg_class ix86_preferred_reload_class (rtx, enum reg_class);
extern int ix86_memory_move_cost (enum machine_mode, enum reg_class, int);
extern void emit_i387_cw_initialization (rtx, rtx);
extern unsigned char ix86_fp_jump_nontrivial_p (enum rtx_code);
extern void x86_order_regs_for_local_alloc (void);
extern void x86_function_profiler (FILE *, int);
extern void x86_emit_floatuns (rtx [2]);
extern void ix86_emit_fp_unordered_jump (rtx);
extern void ix86_emit_i387_log1p (rtx, rtx);
extern enum rtx_code ix86_reverse_condition (enum rtx_code, enum machine_mode);
extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree);
extern rtx function_arg (CUMULATIVE_ARGS *, enum machine_mode, tree, int);
extern int function_arg_pass_by_reference (CUMULATIVE_ARGS *,
        enum machine_mode, tree, int);
extern void function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode,
      tree, int);
extern rtx ix86_function_value (tree);
extern void ix86_init_builtins (void);
extern rtx ix86_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
extern int ix86_return_pops_args (tree, tree, int);
extern int ix86_data_alignment (tree, int);
extern int ix86_local_alignment (tree, int);
extern int ix86_constant_alignment (tree, int);
extern tree ix86_handle_dll_attribute (tree *, tree, tree, int, unsigned char *);
extern tree ix86_handle_shared_attribute (tree *, tree, tree, int, unsigned char *);
extern unsigned int i386_pe_section_type_flags (tree, const char *, int);
extern void i386_pe_asm_named_section (const char *, unsigned int);
extern int x86_field_alignment (tree, int);
extern rtx ix86_tls_get_addr (void);
extern unsigned char ix86_must_pass_in_stack (enum machine_mode mode, tree);
extern void ix86_expand_vector_init (rtx, rtx);
extern int i386_pe_dllexport_name_p (const char *);
extern int i386_pe_dllimport_name_p (const char *);
extern void i386_pe_unique_section (tree, int);
extern void i386_pe_declare_function_type (FILE *, const char *, int);
extern void i386_pe_record_external_function (const char *);
extern void i386_pe_record_exported_symbol (const char *, int);
extern void i386_pe_asm_file_end (FILE *);
extern void i386_pe_encode_section_info (tree, rtx, int);
extern const char *i386_pe_strip_name_encoding (const char *);
extern const char *i386_pe_strip_name_encoding_full (const char *);
extern void i386_pe_output_labelref (FILE *, const char *);
extern int x86_64_immediate_operand (rtx, enum machine_mode);
extern int x86_64_nonmemory_operand (rtx, enum machine_mode);
extern int x86_64_movabs_operand (rtx, enum machine_mode);
extern int x86_64_szext_nonmemory_operand (rtx, enum machine_mode);
extern int x86_64_general_operand (rtx, enum machine_mode);
extern int x86_64_szext_general_operand (rtx, enum machine_mode);
extern int x86_64_zext_immediate_operand (rtx, enum machine_mode);
extern int shiftdi_operand (rtx, enum machine_mode);
extern int const_int_1_31_operand (rtx, enum machine_mode);
extern int symbolic_operand (rtx, enum machine_mode);
extern int aligned_operand (rtx, enum machine_mode);
extern int pic_symbolic_operand (rtx, enum machine_mode);
extern int call_insn_operand (rtx, enum machine_mode);
extern int sibcall_insn_operand (rtx, enum machine_mode);
extern int constant_call_address_operand (rtx, enum machine_mode);
extern int const0_operand (rtx, enum machine_mode);
extern int const1_operand (rtx, enum machine_mode);
extern int const248_operand (rtx, enum machine_mode);
extern int const_0_to_3_operand (rtx, enum machine_mode);
extern int const_0_to_7_operand (rtx, enum machine_mode);
extern int const_0_to_15_operand (rtx, enum machine_mode);
extern int const_0_to_255_operand (rtx, enum machine_mode);
extern int incdec_operand (rtx, enum machine_mode);
extern int mmx_reg_operand (rtx, enum machine_mode);
extern int reg_no_sp_operand (rtx, enum machine_mode);
extern int general_no_elim_operand (rtx, enum machine_mode);
extern int nonmemory_no_elim_operand (rtx, enum machine_mode);
extern int index_register_operand (rtx, enum machine_mode);
extern int flags_reg_operand (rtx, enum machine_mode);
extern int q_regs_operand (rtx, enum machine_mode);
extern int non_q_regs_operand (rtx, enum machine_mode);
extern int fcmov_comparison_operator (rtx, enum machine_mode);
extern int sse_comparison_operator (rtx, enum machine_mode);
extern int ix86_comparison_operator (rtx, enum machine_mode);
extern int ix86_carry_flag_operator (rtx, enum machine_mode);
extern int cmp_fp_expander_operand (rtx, enum machine_mode);
extern int ext_register_operand (rtx, enum machine_mode);
extern int binary_fp_operator (rtx, enum machine_mode);
extern int mult_operator (rtx, enum machine_mode);
extern int div_operator (rtx, enum machine_mode);
extern int arith_or_logical_operator (rtx, enum machine_mode);
extern int promotable_binary_operator (rtx, enum machine_mode);
extern int memory_displacement_operand (rtx, enum machine_mode);
extern int cmpsi_operand (rtx, enum machine_mode);
extern int long_memory_operand (rtx, enum machine_mode);
extern int tls_symbolic_operand (rtx, enum machine_mode);
extern int global_dynamic_symbolic_operand (rtx, enum machine_mode);
extern int local_dynamic_symbolic_operand (rtx, enum machine_mode);
extern int initial_exec_symbolic_operand (rtx, enum machine_mode);
extern int local_exec_symbolic_operand (rtx, enum machine_mode);
extern int any_fp_register_operand (rtx, enum machine_mode);
extern int register_and_not_any_fp_reg_operand (rtx, enum machine_mode);
extern int fp_register_operand (rtx, enum machine_mode);
extern int register_and_not_fp_reg_operand (rtx, enum machine_mode);
extern int zero_extended_scalar_load_operand (rtx, enum machine_mode);
extern int vector_move_operand (rtx, enum machine_mode);
extern int no_seg_address_operand (rtx, enum machine_mode);
typedef unsigned long BITMAP_WORD;
typedef struct bitmap_element_def
{
  struct bitmap_element_def *next;
  struct bitmap_element_def *prev;
  unsigned int indx;
  BITMAP_WORD bits[((128 + (8 * 4) - 1) / (8 * 4))];
} bitmap_element;
typedef struct bitmap_head_def {
  bitmap_element *first;
  bitmap_element *current;
  unsigned int indx;
  int using_obstack;
} bitmap_head;
typedef struct bitmap_head_def *bitmap;
enum bitmap_bits {
  BITMAP_AND,
  BITMAP_AND_COMPL,
  BITMAP_IOR,
  BITMAP_XOR,
  BITMAP_IOR_COMPL
};
extern bitmap_element bitmap_zero_bits;
extern void bitmap_clear (bitmap);
extern void bitmap_copy (bitmap, bitmap);
extern int bitmap_equal_p (bitmap, bitmap);
extern int bitmap_operation (bitmap, bitmap, bitmap, enum bitmap_bits);
extern void bitmap_ior_and_compl (bitmap, bitmap, bitmap);
extern void bitmap_clear_bit (bitmap, int);
extern void bitmap_set_bit (bitmap, int);
extern int bitmap_bit_p (bitmap, int);
extern void debug_bitmap (bitmap);
extern void debug_bitmap_file (FILE *, bitmap);
extern void bitmap_print (FILE *, bitmap, const char *, const char *);
extern bitmap bitmap_initialize (bitmap head, int using_obstack);
extern void bitmap_release_memory (void);
extern int bitmap_union_of_diff (bitmap, bitmap, bitmap, bitmap);
extern int bitmap_first_set_bit (bitmap);
extern int bitmap_last_set_bit (bitmap);
typedef struct simple_bitmap_def
{
  unsigned int n_bits;
  unsigned int size;
  unsigned int bytes;
  unsigned long elms[1];
} *sbitmap;
typedef unsigned long *sbitmap_ptr;
struct int_list;
extern void dump_sbitmap (FILE *, sbitmap);
extern void dump_sbitmap_file (FILE *, sbitmap);
extern void dump_sbitmap_vector (FILE *, const char *, const char *, sbitmap *,
     int);
extern sbitmap sbitmap_alloc (unsigned int);
extern sbitmap *sbitmap_vector_alloc (unsigned int, unsigned int);
extern sbitmap sbitmap_resize (sbitmap, unsigned int, int);
extern void sbitmap_copy (sbitmap, sbitmap);
extern int sbitmap_equal (sbitmap, sbitmap);
extern void sbitmap_zero (sbitmap);
extern void sbitmap_ones (sbitmap);
extern void sbitmap_vector_zero (sbitmap *, unsigned int);
extern void sbitmap_vector_ones (sbitmap *, unsigned int);
extern void sbitmap_union_of_diff (sbitmap, sbitmap, sbitmap, sbitmap);
extern unsigned char sbitmap_union_of_diff_cg (sbitmap, sbitmap, sbitmap, sbitmap);
extern void sbitmap_difference (sbitmap, sbitmap, sbitmap);
extern void sbitmap_not (sbitmap, sbitmap);
extern void sbitmap_a_or_b_and_c (sbitmap, sbitmap, sbitmap, sbitmap);
extern unsigned char sbitmap_a_or_b_and_c_cg (sbitmap, sbitmap, sbitmap, sbitmap);
extern void sbitmap_a_and_b_or_c (sbitmap, sbitmap, sbitmap, sbitmap);
extern unsigned char sbitmap_a_and_b_or_c_cg (sbitmap, sbitmap, sbitmap, sbitmap);
extern void sbitmap_a_and_b (sbitmap, sbitmap, sbitmap);
extern unsigned char sbitmap_a_and_b_cg (sbitmap, sbitmap, sbitmap);
extern void sbitmap_a_or_b (sbitmap, sbitmap, sbitmap);
extern unsigned char sbitmap_a_or_b_cg (sbitmap, sbitmap, sbitmap);
extern void sbitmap_a_xor_b (sbitmap, sbitmap, sbitmap);
extern unsigned char sbitmap_a_xor_b_cg (sbitmap, sbitmap, sbitmap);
extern unsigned char sbitmap_a_subset_b_p (sbitmap, sbitmap);
extern int sbitmap_first_set_bit (sbitmap);
extern int sbitmap_last_set_bit (sbitmap);
extern void sbitmap_intersect_of_predsucc (sbitmap, sbitmap *, int,
        struct int_list **);
extern void sbitmap_union_of_predsucc (sbitmap, sbitmap *, int,
           struct int_list **);
extern void sbitmap_intersection_of_succs (sbitmap, sbitmap *, int);
extern void sbitmap_intersection_of_preds (sbitmap, sbitmap *, int);
extern void sbitmap_union_of_succs (sbitmap, sbitmap *, int);
extern void sbitmap_union_of_preds (sbitmap, sbitmap *, int);
extern void debug_sbitmap (sbitmap);
extern sbitmap sbitmap_realloc (sbitmap, unsigned int);
struct const_equiv_data {
  rtx rtx1;
  unsigned age;
};
enum varray_data_enum {
  VARRAY_DATA_C,
  VARRAY_DATA_UC,
  VARRAY_DATA_S,
  VARRAY_DATA_US,
  VARRAY_DATA_I,
  VARRAY_DATA_U,
  VARRAY_DATA_L,
  VARRAY_DATA_UL,
  VARRAY_DATA_HINT,
  VARRAY_DATA_UHINT,
  VARRAY_DATA_GENERIC,
  VARRAY_DATA_GENERIC_NOGC,
  VARRAY_DATA_CPTR,
  VARRAY_DATA_RTX,
  VARRAY_DATA_RTVEC,
  VARRAY_DATA_TREE,
  VARRAY_DATA_BITMAP,
  VARRAY_DATA_REG,
  VARRAY_DATA_CONST_EQUIV,
  VARRAY_DATA_BB,
  VARRAY_DATA_TE,
  VARRAY_DATA_EDGE,
  VARRAY_DATA_TREE_PTR,
  NUM_VARRAY_DATA
};
typedef union varray_data_tag {
  char
                             c[1];
  unsigned char
                             uc[1];
  short
                             s[1];
  unsigned short
                             us[1];
  int
                             i[1];
  unsigned int
                             u[1];
  long
                             l[1];
  unsigned long
                             ul[1];
  long
                               hint[1];
  unsigned long
                                uhint[1];
  void *
                                  generic[1];
  void *
                                       generic_nogc[1];
  char *
                               cptr[1];
  rtx
                              rtx1[1];
  rtvec
                                rtvec1[1];
  tree
                               tree1[1];
  struct bitmap_head_def *
                                 bitmap1[1];
  struct reg_info_def *
                              reg[1];
  struct const_equiv_data
                                     const_equiv[1];
  struct basic_block_def *
                             bb[1];
  struct elt_list *
                             te[1];
  struct edge_def *
                                                    e[1];
  tree *
                                                        tp[1];
} varray_data;
struct varray_head_tag {
  size_t num_elements;
  size_t elements_used;
  enum varray_data_enum type;
  const char *name;
  varray_data data;
};
typedef struct varray_head_tag *varray_type;
extern varray_type varray_init (size_t, enum varray_data_enum, const char *);
extern varray_type varray_grow (varray_type, size_t);
extern void varray_clear (varray_type);
extern void varray_copy (varray_type v1, varray_type v2);
extern void dump_varray_statistics (void);
enum br_predictor
{
PRED_COMBINED,
PRED_DS_THEORY,
PRED_FIRST_MATCH,
PRED_NO_PREDICTION,
PRED_UNCONDITIONAL,
PRED_LOOP_ITERATIONS,
PRED_BUILTIN_EXPECT,
PRED_CONTINUE,
PRED_NORETURN,
PRED_LOOP_BRANCH,
PRED_LOOP_EXIT,
PRED_LOOP_CONDITION,
PRED_LOOP_PRECONDITIONING,
PRED_LOOP_HEADER,
PRED_POINTER,
PRED_TREE_POINTER,
PRED_OPCODE_POSITIVE,
PRED_OPCODE_NONEQUAL,
PRED_FPOPCODE,
PRED_TREE_OPCODE_POSITIVE,
PRED_TREE_OPCODE_NONEQUAL,
PRED_TREE_FPOPCODE,
PRED_CALL,
PRED_EARLY_RETURN,
PRED_GOTO,
PRED_CONST_RETURN,
PRED_NEGATIVE_RETURN,
PRED_NULL_RETURN,
PRED_MUDFLAP,
  END_PREDICTORS
};
enum prediction
{
   NOT_TAKEN,
   TAKEN
};
extern void predict_insn_def (rtx, enum br_predictor, enum prediction);
extern void predict_insn (rtx, enum br_predictor, int);
typedef bitmap_head regset_head;
typedef bitmap regset;
extern void reg_set_to_hard_reg_set (HARD_REG_SET *, bitmap);
typedef long long gcov_type;
struct edge_def
{
  struct edge_def *pred_next;
  struct edge_def *succ_next;
  struct basic_block_def *src;
  struct basic_block_def *dest;
  union edge_def_insns {
    rtx r;
    tree t;
  } insns;
  void * aux;
  source_locus goto_locus;
  int flags;
  int probability;
  gcov_type count;
  unsigned char crossing_edge;
};
typedef struct edge_def *edge;
extern const struct gcov_ctr_summary *profile_info;
struct loop;
struct loops;
struct bb_ann_d;
struct basic_block_def
{
  rtx head_;
  rtx end_;
  tree stmt_list;
  edge pred;
  edge succ;
  bitmap local_set;
  bitmap cond_local_set;
  bitmap global_live_at_start;
  bitmap global_live_at_end;
  void * aux;
  int index;
  struct basic_block_def *prev_bb;
  struct basic_block_def *next_bb;
  int loop_depth;
  struct loop * loop_father;
  struct et_node * dom[2];
  gcov_type count;
  int frequency;
  int flags;
  int partition1;
  struct reorder_block_def * rbi;
  struct bb_ann_d *tree_annotations;
};
typedef struct basic_block_def *basic_block;
typedef struct reorder_block_def
{
  rtx header1;
  rtx footer;
  basic_block next;
  basic_block original;
  basic_block copy;
  int duplicated;
  int visited;
} *reorder_block_def;
extern int n_basic_blocks;
extern int last_basic_block;
extern int n_edges;
extern varray_type basic_block_info;
extern regset regs_live_at_setjmp;
extern rtx label_value_list;
extern struct obstack flow_obstack;
extern basic_block ENTRY_BLOCK_PTR;
extern basic_block EXIT_BLOCK_PTR;
extern void compute_bb_for_insn (void);
extern void free_bb_for_insn (void);
extern void update_bb_for_insn (basic_block);
extern void free_basic_block_vars (void);
extern void insert_insn_on_edge (rtx, edge);
unsigned char safe_insert_insn_on_edge (rtx, edge);
extern void commit_edge_insertions (void);
extern void commit_edge_insertions_watch_calls (void);
extern void remove_fake_edges (void);
extern void add_noreturn_fake_exit_edges (void);
extern void connect_infinite_loops_to_exit (void);
extern edge unchecked_make_edge (basic_block, basic_block, int);
extern edge cached_make_edge (sbitmap *, basic_block, basic_block, int);
extern edge make_edge (basic_block, basic_block, int);
extern edge make_single_succ_edge (basic_block, basic_block, int);
extern void remove_edge (edge);
extern void redirect_edge_succ (edge, basic_block);
extern edge redirect_edge_succ_nodup (edge, basic_block);
extern void redirect_edge_pred (edge, basic_block);
extern basic_block create_basic_block_structure (rtx, rtx, rtx, basic_block);
extern void clear_bb_flags (void);
extern void flow_reverse_top_sort_order_compute (int *);
extern int flow_depth_first_order_compute (int *, int *);
extern void flow_preorder_transversal_compute (int *);
extern int dfs_enumerate_from (basic_block, int,
          unsigned char (*)(basic_block, void *),
          basic_block *, int, void *);
extern void dump_edge_info (FILE *, edge, int);
extern void brief_dump_cfg (FILE *);
extern void clear_edges (void);
extern void mark_critical_edges (void);
extern rtx first_insn_after_basic_block_note (basic_block);
typedef struct ce_if_block
{
  basic_block test_bb;
  basic_block then_bb;
  basic_block else_bb;
  basic_block join_bb;
  basic_block last_test_bb;
  int num_multiple_test_blocks;
  int num_and_and_blocks;
  int num_or_or_blocks;
  int num_multiple_test_insns;
  int and_and_p;
  int num_then_insns;
  int num_else_insns;
  int pass;
} ce_if_block_t;
struct edge_list
{
  int num_blocks;
  int num_edges;
  edge *index_to_edge;
};
struct edge_list * create_edge_list (void);
void free_edge_list (struct edge_list *);
void print_edge_list (FILE *, struct edge_list *);
void verify_edge_list (FILE *, struct edge_list *);
int find_edge_index (struct edge_list *, basic_block, basic_block);
edge find_edge (basic_block, basic_block);
enum update_life_extent
{
  UPDATE_LIFE_LOCAL = 0,
  UPDATE_LIFE_GLOBAL = 1,
  UPDATE_LIFE_GLOBAL_RM_NOTES = 2
};
extern void life_analysis (FILE *, int);
extern int update_life_info (sbitmap, enum update_life_extent, int);
extern int update_life_info_in_dirty_blocks (enum update_life_extent, int);
extern int count_or_remove_death_notes (sbitmap, int);
extern int propagate_block (basic_block, regset, regset, regset, int);
struct propagate_block_info;
extern rtx propagate_one_insn (struct propagate_block_info *, rtx);
extern struct propagate_block_info *init_propagate_block_info
 (basic_block, regset, regset, regset, int);
extern void free_propagate_block_info (struct propagate_block_info *);
extern struct edge_list *pre_edge_lcm (FILE *, int, sbitmap *, sbitmap *,
           sbitmap *, sbitmap *, sbitmap **,
           sbitmap **);
extern struct edge_list *pre_edge_rev_lcm (FILE *, int, sbitmap *,
        sbitmap *, sbitmap *,
        sbitmap *, sbitmap **,
        sbitmap **);
extern void compute_available (sbitmap *, sbitmap *, sbitmap *, sbitmap *);
extern int optimize_mode_switching (FILE *);
extern rtx emit_block_insn_after (rtx, rtx, basic_block);
extern rtx emit_block_insn_before (rtx, rtx, basic_block);
extern void estimate_probability (struct loops *);
extern void note_prediction_to_br_prob (void);
extern void expected_value_to_br_prob (void);
extern unsigned char maybe_hot_bb_p (basic_block);
extern unsigned char probably_cold_bb_p (basic_block);
extern unsigned char probably_never_executed_bb_p (basic_block);
extern unsigned char tree_predicted_by_p (basic_block, enum br_predictor);
extern unsigned char rtl_predicted_by_p (basic_block, enum br_predictor);
extern void tree_predict_edge (edge, enum br_predictor, int);
extern void rtl_predict_edge (edge, enum br_predictor, int);
extern void predict_edge_def (edge, enum br_predictor, enum prediction);
extern void init_flow (void);
extern void debug_bb (basic_block);
extern basic_block debug_bb_n (int);
extern void dump_regset (regset, FILE *);
extern void debug_regset (regset);
extern void allocate_reg_life_data (void);
extern void allocate_bb_life_data (void);
extern void expunge_block (basic_block);
extern void link_block (basic_block, basic_block);
extern void unlink_block (basic_block);
extern void compact_blocks (void);
extern basic_block alloc_block (void);
extern void find_unreachable_blocks (void);
extern int delete_noop_moves (void);
extern basic_block force_nonfallthru (edge);
extern rtx block_label (basic_block);
extern unsigned char forwarder_block_p (basic_block);
extern unsigned char purge_all_dead_edges (int);
extern unsigned char purge_dead_edges (basic_block);
extern void find_sub_basic_blocks (basic_block);
extern void find_many_sub_basic_blocks (sbitmap);
extern void rtl_make_eh_edge (sbitmap *, basic_block, rtx);
extern unsigned char can_fallthru (basic_block, basic_block);
extern unsigned char could_fall_through (basic_block, basic_block);
extern void flow_nodes_print (const char *, const sbitmap, FILE *);
extern void flow_edge_list_print (const char *, const edge *, int, FILE *);
extern void alloc_aux_for_block (basic_block, int);
extern void alloc_aux_for_blocks (int);
extern void clear_aux_for_blocks (void);
extern void free_aux_for_blocks (void);
extern void alloc_aux_for_edge (edge, int);
extern void alloc_aux_for_edges (int);
extern void clear_aux_for_edges (void);
extern void free_aux_for_edges (void);
extern void find_basic_blocks (rtx, int, FILE *);
extern unsigned char cleanup_cfg (int);
extern unsigned char delete_unreachable_blocks (void);
extern unsigned char merge_seq_blocks (void);
typedef struct conflict_graph_def *conflict_graph;
typedef int (*conflict_graph_enum_fn) (int, int, void *);
extern conflict_graph conflict_graph_new
 (int);
extern void conflict_graph_delete (conflict_graph);
extern int conflict_graph_add (conflict_graph, int, int);
extern int conflict_graph_conflict_p (conflict_graph, int, int);
extern void conflict_graph_enum (conflict_graph, int, conflict_graph_enum_fn,
     void *);
extern void conflict_graph_merge_regs (conflict_graph, int, int);
extern void conflict_graph_print (conflict_graph, FILE*);
extern conflict_graph conflict_graph_compute (regset, partition);
extern unsigned char mark_dfs_back_edges (void);
extern void set_edge_can_fallthru_flag (void);
extern void update_br_prob_note (basic_block);
extern void fixup_abnormal_edges (void);
extern unsigned char can_hoist_insn_p (rtx, rtx, regset);
extern rtx hoist_insn_after (rtx, rtx, rtx, rtx);
extern rtx hoist_insn_to_edge (rtx, edge, rtx, rtx);
extern unsigned char inside_basic_block_p (rtx);
extern unsigned char control_flow_insn_p (rtx);
extern void reorder_basic_blocks (void);
extern void partition_hot_cold_basic_blocks (void);
extern void alloc_rbi_pool (void);
extern void initialize_bb_rbi (basic_block bb);
extern void free_rbi_pool (void);
enum cdi_direction
{
  CDI_DOMINATORS,
  CDI_POST_DOMINATORS
};
enum dom_state
{
  DOM_NONE,
  DOM_CONS_OK,
  DOM_NO_FAST_QUERY,
  DOM_OK
};
extern enum dom_state dom_computed[2];
extern void calculate_dominance_info (enum cdi_direction);
extern void free_dominance_info (enum cdi_direction);
extern basic_block nearest_common_dominator (enum cdi_direction,
          basic_block, basic_block);
extern void set_immediate_dominator (enum cdi_direction, basic_block,
         basic_block);
extern basic_block get_immediate_dominator (enum cdi_direction, basic_block);
extern unsigned char dominated_by_p (enum cdi_direction, basic_block, basic_block);
extern int get_dominated_by (enum cdi_direction, basic_block, basic_block **);
extern void add_to_dominance_info (enum cdi_direction, basic_block);
extern void delete_from_dominance_info (enum cdi_direction, basic_block);
basic_block recount_dominator (enum cdi_direction, basic_block);
extern void redirect_immediate_dominators (enum cdi_direction, basic_block,
        basic_block);
extern void iterate_fix_dominators (enum cdi_direction, basic_block *, int);
extern void verify_dominators (enum cdi_direction);
extern basic_block first_dom_son (enum cdi_direction, basic_block);
extern basic_block next_dom_son (enum cdi_direction, basic_block);
extern edge try_redirect_by_replacing_jump (edge, basic_block, unsigned char);
extern void break_superblocks (void);
struct cfg_hooks
{
  const char *name;
  int (*verify_flow_info) (void);
  void (*dump_bb) (basic_block, FILE *, int);
  basic_block (*create_basic_block) (void *head, void *end, basic_block after);
  edge (*redirect_edge_and_branch) (edge e, basic_block b);
  basic_block (*redirect_edge_and_branch_force) (edge, basic_block);
  void (*delete_basic_block) (basic_block);
  basic_block (*split_block) (basic_block b, void * i);
  unsigned char (*move_block_after) (basic_block b, basic_block a);
  unsigned char (*can_merge_blocks_p) (basic_block a, basic_block b);
  void (*merge_blocks) (basic_block a, basic_block b);
  void (*predict_edge) (edge e, enum br_predictor predictor, int probability);
  unsigned char (*predicted_by_p) (basic_block bb, enum br_predictor predictor);
  unsigned char (*can_duplicate_block_p) (basic_block a);
  basic_block (*duplicate_block) (basic_block a);
  basic_block (*split_edge) (edge);
  void (*make_forwarder_block) (edge);
  void (*tidy_fallthru_edge) (edge);
  unsigned char (*block_ends_with_call_p) (basic_block);
  unsigned char (*block_ends_with_condjump_p) (basic_block);
  int (*flow_call_edges_add) (sbitmap);
};
extern void verify_flow_info (void);
extern void dump_bb (basic_block, FILE *, int);
extern edge redirect_edge_and_branch (edge, basic_block);
extern basic_block redirect_edge_and_branch_force (edge, basic_block);
extern edge split_block (basic_block, void *);
extern edge split_block_after_labels (basic_block);
extern unsigned char move_block_after (basic_block, basic_block);
extern void delete_basic_block (basic_block);
extern basic_block split_edge (edge);
extern basic_block create_basic_block (void *, void *, basic_block);
extern basic_block create_empty_bb (basic_block);
extern unsigned char can_merge_blocks_p (basic_block, basic_block);
extern void merge_blocks (basic_block, basic_block);
extern edge make_forwarder_block (basic_block, unsigned char (*)(edge),
      void (*) (basic_block));
extern void tidy_fallthru_edge (edge);
extern void tidy_fallthru_edges (void);
extern void predict_edge (edge e, enum br_predictor predictor, int probability);
extern unsigned char predicted_by_p (basic_block bb, enum br_predictor predictor);
extern unsigned char can_duplicate_block_p (basic_block);
extern basic_block duplicate_block (basic_block, edge);
extern unsigned char block_ends_with_call_p (basic_block bb);
extern unsigned char block_ends_with_condjump_p (basic_block bb);
extern int flow_call_edges_add (sbitmap);
extern struct cfg_hooks tree_cfg_hooks;
extern struct cfg_hooks rtl_cfg_hooks;
extern struct cfg_hooks cfg_layout_rtl_cfg_hooks;
extern int ir_type (void);
extern void rtl_register_cfg_hooks (void);
extern void cfg_layout_rtl_register_cfg_hooks (void);
extern void tree_register_cfg_hooks (void);
extern int warn_abi;
extern int warn_aggregate_return;
extern int warn_bad_function_cast;
extern int warn_cast_align;
extern int warn_cast_qual;
extern int warn_char_subscripts;
extern int warn_conversion;
extern int warn_ctor_dtor_privacy;
extern int warn_declaration_after_statement;
extern int warn_deprecated;
extern int warn_deprecated_decl;
extern int warn_disabled_optimization;
extern int warn_div_by_zero;
extern int warn_ecpp;
extern int warnings_are_errors;
extern int flag_fatal_errors;
extern int warn_float_equal;
extern int warn_format_extra_args;
extern int warn_format_nonliteral;
extern int warn_format_security;
extern int warn_format_y2k;
extern int warn_format_zero_length;
extern int mesg_implicit_function_declaration;
extern int warn_implicit_int;
extern int warn_init_self;
extern int warn_inline;
extern int warn_invalid_offsetof;
extern int warn_long_long;
extern int warn_missing_braces;
extern int warn_missing_declarations;
extern int warn_missing_format_attribute;
extern int warn_missing_noreturn;
extern int warn_missing_prototypes;
extern int warn_nested_externs;
extern int warn_nontemplate_friend;
extern int warn_nonvdtor;
extern int warn_nonnull;
extern int warn_old_style_cast;
extern int warn_old_style_definition;
extern int warn_overloaded_virtual;
extern int warn_packed;
extern int warn_padded;
extern int warn_parentheses;
extern int warn_pmf2ptr;
extern int warn_pointer_arith;
extern int warn_protocol;
extern int warn_redundant_decls;
extern int warn_reorder;
extern int warn_selector;
extern int warn_sequence_point;
extern int warn_shadow;
extern int warn_sign_compare;
extern int warn_sign_promo;
extern int warn_strict_prototypes;
extern int warn_switch;
extern int warn_switch_default;
extern int warn_switch_enum;
extern int warn_synth;
extern int warn_system_headers;
extern int warn_traditional;
extern int warn_undeclared_selector;
extern int warn_uninitialized;
extern int warn_notreached;
extern int warn_unused_function;
extern int warn_unused_label;
extern int warn_unused_parameter;
extern int warn_unused_value;
extern int warn_unused_variable;
extern int flag_pic;
extern int flag_pie;
extern int flag_abi_version;
extern int align_functions;
extern int align_jumps;
extern int align_labels;
extern int align_loops;
extern int flag_argument_noalias;
extern int flag_argument_noalias;
extern int flag_argument_noalias;
extern int flag_asynchronous_unwind_tables;
extern int flag_bounds_check;
extern int flag_branch_on_count_reg;
extern int flag_branch_probabilities;
extern int flag_branch_target_load_optimize;
extern int flag_branch_target_load_optimize2;
extern int flag_btr_bb_exclusive;
extern int flag_caller_saves;
extern int flag_no_common;
extern int flag_cprop_registers;
extern int flag_crossjumping;
extern int flag_cse_follow_jumps;
extern int flag_cse_skip_blocks;
extern int flag_data_sections;
extern int flag_defer_pop;
extern int flag_delayed_branch;
extern int flag_delete_null_pointer_checks;
extern int flag_dump_unnumbered;
extern int flag_eliminate_dwarf2_dups;
extern int flag_debug_only_used_symbols;
extern int flag_eliminate_unused_debug_types;
extern int flag_exceptions;
extern int flag_expensive_optimizations;
extern int flag_finite_math_only;
extern int flag_float_store;
extern int flag_force_addr;
extern int flag_force_mem;
extern int flag_no_function_cse;
extern int flag_function_sections;
extern int flag_gcse;
extern int flag_gcse_after_reload;
extern int flag_gcse_las;
extern int flag_gcse_lm;
extern int flag_gcse_sm;
extern int flag_guess_branch_prob;
extern int flag_no_ident;
extern int flag_if_conversion;
extern int flag_if_conversion2;
extern int flag_inhibit_size_directive;
extern int flag_no_inline;
extern int flag_inline_functions;
extern int flag_instrument_function_entry_exit;
extern int flag_keep_inline_functions;
extern int flag_keep_static_consts;
extern int flag_leading_underscore;
extern int flag_loop_optimize;
extern int flag_loop_optimize2;
extern int flag_errno_math;
extern int mem_report;
extern int flag_merge_constants;
extern int flag_merge_constants;
extern int flag_modulo_sched;
extern int flag_move_all_movables;
extern int flag_move_loop_invariants;
extern int flag_mudflap;
extern int flag_mudflap_ignore_reads;
extern int flag_mudflap_threads;
extern int flag_new_regalloc;
extern int flag_non_call_exceptions;
extern int flag_old_unroll_all_loops;
extern int flag_old_unroll_loops;
extern int flag_omit_frame_pointer;
extern int flag_regmove;
extern int flag_optimize_sibling_calls;
extern int flag_pack_struct;
extern int flag_pcc_struct_return;
extern int flag_peel_loops;
extern int flag_no_peephole;
extern int flag_peephole2;
extern int flag_pic;
extern int flag_pie;
extern int flag_prefetch_loop_arrays;
extern int profile_flag;
extern int profile_arc_flag;
extern int flag_profile_values;
extern int flag_reduce_all_givs;
extern int flag_pcc_struct_return;
extern int flag_regmove;
extern int flag_rename_registers;
extern int flag_reorder_blocks;
extern int flag_reorder_blocks_and_partition;
extern int flag_reorder_functions;
extern int flag_rerun_cse_after_loop;
extern int flag_rerun_loop_opt;
extern int flag_rounding_math;
extern int flag_schedule_interblock;
extern int flag_schedule_speculative;
extern int flag_schedule_speculative_load;
extern int flag_schedule_speculative_load_dangerous;
extern int flag_sched_stalled_insns;
extern int flag_sched_stalled_insns_dep;
extern int flag_sched2_use_superblocks;
extern int flag_sched2_use_traces;
extern int flag_schedule_insns;
extern int flag_schedule_insns_after_reload;
extern int flag_shared_data;
extern int flag_signaling_nans;
extern int flag_single_precision_constant;
extern int flag_stack_check;
extern int flag_strength_reduce;
extern int flag_strict_aliasing;
extern int flag_syntax_only;
extern int flag_test_coverage;
extern int flag_thread_jumps;
extern int time_report;
extern int flag_tracer;
extern int flag_trapping_math;
extern int flag_trapv;
extern int flag_tree_based_profiling;
extern int flag_tree_ccp;
extern int flag_tree_ch;
extern int flag_tree_combine_temps;
extern int flag_tree_copyrename;
extern int flag_tree_dce;
extern int flag_tree_dom;
extern int flag_tree_dse;
extern int flag_tree_fre;
extern int flag_tree_loop_optimize;
extern int flag_tree_live_range_split;
extern int flag_tree_pre;
extern int flag_tree_sra;
extern int flag_tree_ter;
extern int flag_unit_at_a_time;
extern int flag_unroll_all_loops;
extern int flag_unroll_loops;
extern int flag_unsafe_math_optimizations;
extern int flag_unswitch_loops;
extern int flag_unwind_tables;
extern int flag_var_tracking;
extern int flag_verbose_asm;
extern int flag_value_profile_transformations;
extern int flag_web;
extern int flag_wrapv;
extern int flag_zero_initialized_in_bss;
extern int profile_flag;
extern int pedantic;
extern int quiet_flag;
extern int version_flag;
extern int inhibit_warnings;
enum opt_code
{
  OPT__help,
  OPT__output_pch_,
  OPT__param,
  OPT__target_help,
  OPT__version,
  OPT_A,
  OPT_C,
  OPT_CC,
  OPT_D,
  OPT_E,
  OPT_F,
  OPT_G,
  OPT_H,
  OPT_I,
  OPT_M,
  OPT_MD,
  OPT_MF,
  OPT_MG,
  OPT_MM,
  OPT_MMD,
  OPT_MP,
  OPT_MQ,
  OPT_MT,
  OPT_O,
  OPT_Os,
  OPT_P,
  OPT_U,
  OPT_W,
  OPT_Wabi,
  OPT_Waggregate_return,
  OPT_Wall,
  OPT_Wbad_function_cast,
  OPT_Wcast_align,
  OPT_Wcast_qual,
  OPT_Wchar_subscripts,
  OPT_Wcomment,
  OPT_Wcomments,
  OPT_Wconversion,
  OPT_Wctor_dtor_privacy,
  OPT_Wdeclaration_after_statement,
  OPT_Wdeprecated,
  OPT_Wdeprecated_declarations,
  OPT_Wdisabled_optimization,
  OPT_Wdiv_by_zero,
  OPT_Weffc__,
  OPT_Wendif_labels,
  OPT_Werror,
  OPT_Werror_implicit_function_declaration,
  OPT_Wextra,
  OPT_Wfatal_errors,
  OPT_Wfloat_equal,
  OPT_Wformat,
  OPT_Wformat_extra_args,
  OPT_Wformat_nonliteral,
  OPT_Wformat_security,
  OPT_Wformat_y2k,
  OPT_Wformat_zero_length,
  OPT_Wformat_,
  OPT_Wimplicit,
  OPT_Wimplicit_function_declaration,
  OPT_Wimplicit_int,
  OPT_Wimport,
  OPT_Winit_self,
  OPT_Winline,
  OPT_Winvalid_offsetof,
  OPT_Winvalid_pch,
  OPT_Wlarger_than_,
  OPT_Wlong_long,
  OPT_Wmain,
  OPT_Wmissing_braces,
  OPT_Wmissing_declarations,
  OPT_Wmissing_format_attribute,
  OPT_Wmissing_include_dirs,
  OPT_Wmissing_noreturn,
  OPT_Wmissing_prototypes,
  OPT_Wmultichar,
  OPT_Wnested_externs,
  OPT_Wnon_template_friend,
  OPT_Wnon_virtual_dtor,
  OPT_Wnonnull,
  OPT_Wold_style_cast,
  OPT_Wold_style_definition,
  OPT_Woverloaded_virtual,
  OPT_Wpacked,
  OPT_Wpadded,
  OPT_Wparentheses,
  OPT_Wpmf_conversions,
  OPT_Wpointer_arith,
  OPT_Wprotocol,
  OPT_Wredundant_decls,
  OPT_Wreorder,
  OPT_Wreturn_type,
  OPT_Wselector,
  OPT_Wsequence_point,
  OPT_Wshadow,
  OPT_Wsign_compare,
  OPT_Wsign_promo,
  OPT_Wstrict_aliasing,
  OPT_Wstrict_aliasing_,
  OPT_Wstrict_prototypes,
  OPT_Wswitch,
  OPT_Wswitch_default,
  OPT_Wswitch_enum,
  OPT_Wsynth,
  OPT_Wsystem_headers,
  OPT_Wtraditional,
  OPT_Wtrigraphs,
  OPT_Wundeclared_selector,
  OPT_Wundef,
  OPT_Wuninitialized,
  OPT_Wunknown_pragmas,
  OPT_Wunreachable_code,
  OPT_Wunused,
  OPT_Wunused_function,
  OPT_Wunused_label,
  OPT_Wunused_macros,
  OPT_Wunused_parameter,
  OPT_Wunused_value,
  OPT_Wunused_variable,
  OPT_Wvariadic_macros,
  OPT_Wwrite_strings,
  OPT_ansi,
  OPT_aux_info,
  OPT_aux_info_,
  OPT_auxbase,
  OPT_auxbase_strip,
  OPT_d,
  OPT_dumpbase,
  OPT_fPIC,
  OPT_fPIE,
  OPT_fabi_version_,
  OPT_faccess_control,
  OPT_falign_functions,
  OPT_falign_functions_,
  OPT_falign_jumps,
  OPT_falign_jumps_,
  OPT_falign_labels,
  OPT_falign_labels_,
  OPT_falign_loops,
  OPT_falign_loops_,
  OPT_fall_virtual,
  OPT_falt_external_templates,
  OPT_fargument_alias,
  OPT_fargument_noalias,
  OPT_fargument_noalias_global,
  OPT_fasm,
  OPT_fasynchronous_unwind_tables,
  OPT_fbounds_check,
  OPT_fbranch_count_reg,
  OPT_fbranch_probabilities,
  OPT_fbranch_target_load_optimize,
  OPT_fbranch_target_load_optimize2,
  OPT_fbtr_bb_exclusive,
  OPT_fbuiltin,
  OPT_fbuiltin_,
  OPT_fcall_saved_,
  OPT_fcall_used_,
  OPT_fcaller_saves,
  OPT_fcheck_new,
  OPT_fcommon,
  OPT_fcond_mismatch,
  OPT_fconserve_space,
  OPT_fconst_strings,
  OPT_fconstant_string_class_,
  OPT_fcprop_registers,
  OPT_fcrossjumping,
  OPT_fcse_follow_jumps,
  OPT_fcse_skip_blocks,
  OPT_fdata_sections,
  OPT_fdefault_inline,
  OPT_fdefer_pop,
  OPT_fdelayed_branch,
  OPT_fdelete_null_pointer_checks,
  OPT_fdiagnostics_show_location_,
  OPT_fdollars_in_identifiers,
  OPT_fdump_,
  OPT_fdump_unnumbered,
  OPT_felide_constructors,
  OPT_feliminate_dwarf2_dups,
  OPT_feliminate_unused_debug_symbols,
  OPT_feliminate_unused_debug_types,
  OPT_fenforce_eh_specs,
  OPT_fenum_int_equiv,
  OPT_fexceptions,
  OPT_fexec_charset_,
  OPT_fexpensive_optimizations,
  OPT_fexternal_templates,
  OPT_ffast_math,
  OPT_ffinite_math_only,
  OPT_ffixed_,
  OPT_ffixed_form,
  OPT_ffixed_line_length_,
  OPT_ffloat_store,
  OPT_ffor_scope,
  OPT_fforce_addr,
  OPT_fforce_mem,
  OPT_ffreestanding,
  OPT_ffunction_cse,
  OPT_ffunction_sections,
  OPT_fgcse,
  OPT_fgcse_after_reload,
  OPT_fgcse_las,
  OPT_fgcse_lm,
  OPT_fgcse_sm,
  OPT_fgnu_keywords,
  OPT_fgnu_runtime,
  OPT_fguess_branch_probability,
  OPT_fguiding_decls,
  OPT_fhandle_exceptions,
  OPT_fhonor_std,
  OPT_fhosted,
  OPT_fhuge_objects,
  OPT_fident,
  OPT_fif_conversion,
  OPT_fif_conversion2,
  OPT_fimplement_inlines,
  OPT_fimplicit_inline_templates,
  OPT_fimplicit_templates,
  OPT_finhibit_size_directive,
  OPT_finline,
  OPT_finline_functions,
  OPT_finline_limit_,
  OPT_finline_limit_eq,
  OPT_finput_charset_,
  OPT_finstrument_functions,
  OPT_fkeep_inline_functions,
  OPT_fkeep_static_consts,
  OPT_flabels_ok,
  OPT_fleading_underscore,
  OPT_floop_optimize,
  OPT_floop_optimize2,
  OPT_fmath_errno,
  OPT_fmem_report,
  OPT_fmerge_all_constants,
  OPT_fmerge_constants,
  OPT_fmessage_length_,
  OPT_fmodulo_sched,
  OPT_fmove_all_movables,
  OPT_fmove_loop_invariants,
  OPT_fms_extensions,
  OPT_fmudflap,
  OPT_fmudflapir,
  OPT_fmudflapth,
  OPT_fname_mangling_version_,
  OPT_fnew_abi,
  OPT_fnew_ra,
  OPT_fnext_runtime,
  OPT_fnil_receivers,
  OPT_fnon_call_exceptions,
  OPT_fnonansi_builtins,
  OPT_fnonnull_objects,
  OPT_fobjc_exceptions,
  OPT_fobjc_sjlj_exceptions,
  OPT_fold_unroll_all_loops,
  OPT_fold_unroll_loops,
  OPT_fomit_frame_pointer,
  OPT_foperator_names,
  OPT_foptimize_register_move,
  OPT_foptimize_sibling_calls,
  OPT_foptional_diags,
  OPT_fpack_struct,
  OPT_fpcc_struct_return,
  OPT_fpch_deps,
  OPT_fpch_preprocess,
  OPT_fpeel_loops,
  OPT_fpeephole,
  OPT_fpeephole2,
  OPT_fpermissive,
  OPT_fpic,
  OPT_fpie,
  OPT_fprefetch_loop_arrays,
  OPT_fpreprocessed,
  OPT_fprofile,
  OPT_fprofile_arcs,
  OPT_fprofile_generate,
  OPT_fprofile_use,
  OPT_fprofile_values,
  OPT_frandom_seed,
  OPT_frandom_seed_,
  OPT_freduce_all_givs,
  OPT_freg_struct_return,
  OPT_fregmove,
  OPT_frename_registers,
  OPT_freorder_blocks,
  OPT_freorder_blocks_and_partition,
  OPT_freorder_functions,
  OPT_freplace_objc_classes,
  OPT_frepo,
  OPT_frerun_cse_after_loop,
  OPT_frerun_loop_opt,
  OPT_frounding_math,
  OPT_frtti,
  OPT_fsched_interblock,
  OPT_fsched_spec,
  OPT_fsched_spec_load,
  OPT_fsched_spec_load_dangerous,
  OPT_fsched_stalled_insns,
  OPT_fsched_stalled_insns_dep,
  OPT_fsched_stalled_insns_dep_,
  OPT_fsched_stalled_insns_,
  OPT_fsched_verbose_,
  OPT_fsched2_use_superblocks,
  OPT_fsched2_use_traces,
  OPT_fschedule_insns,
  OPT_fschedule_insns2,
  OPT_fshared_data,
  OPT_fshort_double,
  OPT_fshort_enums,
  OPT_fshort_wchar,
  OPT_fshow_column,
  OPT_fsignaling_nans,
  OPT_fsigned_bitfields,
  OPT_fsigned_char,
  OPT_fsingle_precision_constant,
  OPT_fsquangle,
  OPT_fstack_check,
  OPT_fstack_limit,
  OPT_fstack_limit_register_,
  OPT_fstack_limit_symbol_,
  OPT_fstats,
  OPT_fstrength_reduce,
  OPT_fstrict_aliasing,
  OPT_fstrict_prototype,
  OPT_fsyntax_only,
  OPT_ftabstop_,
  OPT_ftemplate_depth_,
  OPT_ftest_coverage,
  OPT_fthis_is_variable,
  OPT_fthread_jumps,
  OPT_ftime_report,
  OPT_ftls_model_,
  OPT_ftracer,
  OPT_ftrapping_math,
  OPT_ftrapv,
  OPT_ftree_based_profiling,
  OPT_ftree_ccp,
  OPT_ftree_ch,
  OPT_ftree_combine_temps,
  OPT_ftree_copyrename,
  OPT_ftree_dce,
  OPT_ftree_dominator_opts,
  OPT_ftree_dse,
  OPT_ftree_fre,
  OPT_ftree_loop_optimize,
  OPT_ftree_lrs,
  OPT_ftree_points_to_,
  OPT_ftree_pre,
  OPT_ftree_sra,
  OPT_ftree_ter,
  OPT_funit_at_a_time,
  OPT_funroll_all_loops,
  OPT_funroll_loops,
  OPT_funsafe_math_optimizations,
  OPT_funsigned_bitfields,
  OPT_funsigned_char,
  OPT_funswitch_loops,
  OPT_funwind_tables,
  OPT_fuse_cxa_atexit,
  OPT_fvar_tracking,
  OPT_fverbose_asm,
  OPT_fvpt,
  OPT_fvtable_gc,
  OPT_fvtable_thunks,
  OPT_fweak,
  OPT_fweb,
  OPT_fwide_exec_charset_,
  OPT_fworking_directory,
  OPT_fwrapv,
  OPT_fxref,
  OPT_fzero_initialized_in_bss,
  OPT_fzero_link,
  OPT_g,
  OPT_gcoff,
  OPT_gdwarf_2,
  OPT_gen_decls,
  OPT_ggdb,
  OPT_gstabs,
  OPT_gstabs_,
  OPT_gvms,
  OPT_gxcoff,
  OPT_gxcoff_,
  OPT_idirafter,
  OPT_imacros,
  OPT_include,
  OPT_iprefix,
  OPT_iquote,
  OPT_isysroot,
  OPT_isystem,
  OPT_iwithprefix,
  OPT_iwithprefixbefore,
  OPT_lang_asm,
  OPT_lang_objc,
  OPT_m,
  OPT_nostdinc,
  OPT_nostdinc__,
  OPT_o,
  OPT_p,
  OPT_pedantic,
  OPT_pedantic_errors,
  OPT_print_objc_runtime_info,
  OPT_quiet,
  OPT_remap,
  OPT_std_c__98,
  OPT_std_c89,
  OPT_std_c99,
  OPT_std_c9x,
  OPT_std_gnu__98,
  OPT_std_gnu89,
  OPT_std_gnu99,
  OPT_std_gnu9x,
  OPT_std_iso9899_1990,
  OPT_std_iso9899_199409,
  OPT_std_iso9899_1999,
  OPT_std_iso9899_199x,
  OPT_traditional_cpp,
  OPT_trigraphs,
  OPT_undef,
  OPT_v,
  OPT_version,
  OPT_w,
  N_OPTS
};
enum debug_info_type
{
  NO_DEBUG,
  DBX_DEBUG,
  SDB_DEBUG,
  DWARF_DEBUG,
  DWARF2_DEBUG,
  XCOFF_DEBUG,
  VMS_DEBUG,
  VMS_AND_DWARF2_DEBUG
};
extern enum debug_info_type write_symbols;
extern const char *const debug_type_names[];
enum debug_info_level
{
  DINFO_LEVEL_NONE,
  DINFO_LEVEL_TERSE,
  DINFO_LEVEL_NORMAL,
  DINFO_LEVEL_VERBOSE
};
extern enum debug_info_level debug_info_level;
extern unsigned char use_gnu_debug_info_extensions;
extern int flag_debug_only_used_symbols;
extern int optimize;
extern int optimize_size;
extern int quiet_flag;
extern int mem_report;
extern unsigned char extra_warnings;
extern void set_Wunused (int setting);
extern int warn_uninitialized;
extern int warn_return_type;
extern unsigned char warn_larger_than;
extern long larger_than_size;
extern int warn_strict_aliasing;
extern int profile_flag;
extern int profile_arc_flag;
extern int flag_profile_values;
extern int flag_test_coverage;
extern int flag_branch_probabilities;
extern int flag_reorder_blocks;
extern int flag_reorder_blocks_and_partition;
extern int flag_reorder_functions;
extern int flag_rename_registers;
extern int pedantic;
extern int in_system_header;
extern int flag_print_asm_name;
extern int flag_signed_char;
extern int flag_short_enums;
extern int flag_caller_saves;
extern int flag_pcc_struct_return;
extern int flag_force_mem;
extern int flag_force_addr;
extern int flag_defer_pop;
extern int flag_float_store;
extern int flag_strength_reduce;
extern int flag_old_unroll_loops;
extern int flag_old_unroll_all_loops;
extern int flag_move_all_movables;
extern int flag_prefetch_loop_arrays;
extern int flag_reduce_all_givs;
extern int flag_cse_follow_jumps;
extern int flag_cse_skip_blocks;
extern int flag_expensive_optimizations;
extern int flag_delete_null_pointer_checks;
extern int flag_no_function_cse;
extern int flag_omit_frame_pointer;
extern int flag_no_peephole;
extern int flag_optimize_sibling_calls;
extern int flag_errno_math;
extern int flag_unsafe_math_optimizations;
extern int flag_finite_math_only;
extern int flag_trapping_math;
extern int flag_rounding_math;
extern int flag_complex_divide_method;
extern int flag_rerun_loop_opt;
extern int flag_inline_functions;
extern int flag_keep_inline_functions;
extern int flag_no_inline;
extern int flag_really_no_inline;
extern int flag_syntax_only;
extern int rtl_dump_and_exit;
extern int flag_fatal_errors;
extern int flag_gen_aux_info;
extern int flag_shared_data;
extern int flag_modulo_sched;
extern int flag_schedule_insns;
extern int flag_schedule_insns_after_reload;
extern int flag_sched2_use_superblocks;
extern int flag_sched2_use_traces;
extern int flag_schedule_interblock;
extern int flag_schedule_speculative;
extern int flag_schedule_speculative_load;
extern int flag_schedule_speculative_load_dangerous;
extern int flag_sched_stalled_insns;
extern int flag_sched_stalled_insns_dep;
extern int flag_branch_on_count_reg;
extern int flag_single_precision_constant;
extern int flag_delayed_branch;
extern int flag_dump_unnumbered;
extern int flag_pedantic_errors;
extern int flag_pic;
extern int flag_pie;
extern int flag_shlib;
extern int flag_exceptions;
extern int flag_unwind_tables;
extern int flag_asynchronous_unwind_tables;
extern int flag_no_common;
extern int flag_inhibit_size_directive;
extern int flag_function_sections;
extern int flag_data_sections;
extern int flag_verbose_asm;
extern int flag_debug_asm;
extern int flag_dump_rtl_in_asm;
extern int flag_leading_underscore;
extern int flag_pack_struct;
extern int flag_argument_noalias;
extern int flag_strict_aliasing;
extern int flag_stack_check;
extern int flag_regmove;
extern int flag_instrument_function_entry_exit;
extern int flag_peephole2;
extern int flag_guess_branch_prob;
extern int flag_bounds_check;
extern int flag_merge_constants;
extern int flag_renumber_insns;
extern int frame_pointer_needed;
extern int flag_trapv;
extern int flag_wrapv;
extern int flag_evaluation_order;
extern unsigned long g_switch_value;
extern unsigned char g_switch_set;
extern int align_loops;
extern int align_loops_log;
extern int align_loops_max_skip;
extern int align_jumps;
extern int align_jumps_log;
extern int align_jumps_max_skip;
extern int align_labels;
extern int align_labels_log;
extern int align_labels_max_skip;
extern int align_functions;
extern int align_functions_log;
extern int force_align_functions_log;
extern int dump_for_graph;
enum graph_dump_types
{
  no_graph = 0,
  vcg
};
extern enum graph_dump_types graph_dump_format;
extern int flag_no_ident;
extern int flag_gcse;
extern int flag_gcse_lm;
extern int flag_gcse_sm;
extern int flag_gcse_las;
extern int flag_gcse_after_reload;
extern int flag_value_profile_transformations;
extern int flag_branch_target_load_optimize;
extern int flag_branch_target_load_optimize2;
extern int flag_btr_bb_exclusive;
extern int flag_eliminate_dwarf2_dups;
extern int flag_eliminate_unused_debug_types;
extern int flag_detailed_statistics;
extern int flag_non_call_exceptions;
extern int flag_mudflap;
extern int flag_mudflap_threads;
extern int flag_mudflap_ignore_reads;
extern int flag_tree_pre;
extern int flag_tree_ccp;
extern int flag_tree_dce;
extern int flag_tree_combine_temps;
extern int flag_tree_ter;
extern int flag_tree_live_range_split;
extern int flag_tree_dom;
extern int flag_tree_ch;
extern int flag_tree_dse;
extern int flag_tree_sra;
extern int flag_tree_copyrename;
enum pta_type
  {
    PTA_NONE,
    PTA_ANDERSEN
  };
extern enum pta_type flag_tree_points_to;
extern int flag_tree_fre;
extern int flag_zero_initialized_in_bss;
extern int flag_signaling_nans;
extern int flag_unit_at_a_time;
extern int flag_web;
extern int flag_remove_unreachable_functions;
extern int flag_var_tracking;
extern const char *flag_random_seed;
extern int flag_abi_version;
struct var_refs_queue
{
  rtx modified;
  enum machine_mode promoted_mode;
  int unsignedp;
  struct var_refs_queue *next;
};
struct sequence_stack
{
  rtx first;
  rtx last;
  struct sequence_stack *next;
};
extern struct sequence_stack *sequence_stack;
struct simple_obstack_stack
{
  struct obstack *obstack;
  struct simple_obstack_stack *next;
};
struct emit_status
{
  int x_reg_rtx_no;
  int x_first_label_num;
  rtx x_first_insn;
  rtx x_last_insn;
  struct sequence_stack *sequence_stack;
  int x_cur_insn_uid;
  location_t x_last_location;
  int regno_pointer_align_length;
  unsigned char *
    regno_pointer_align;
  rtx * x_regno_reg_rtx;
};
struct expr_status
{
  int x_pending_stack_adjust;
  int x_inhibit_defer_pop;
  int x_stack_pointer_delta;
  rtx x_saveregs_value;
  rtx x_apply_args_value;
  rtx x_forced_labels;
  rtx x_pending_chain;
};
struct function
{
  struct eh_status *eh;
  struct stmt_status *stmt;
  struct expr_status *expr;
  struct emit_status *emit;
  struct varasm_status *varasm;
  tree saved_tree;
  tree saved_args;
  tree decl;
  struct function *outer;
  int pops_args;
  int args_size;
  int pretend_args_size;
  int outgoing_args_size;
  rtx arg_offset_rtx;
  CUMULATIVE_ARGS args_info;
  rtx return_rtx;
  rtx internal_arg_pointer;
  struct initial_value_struct *hard_reg_initial_vals;
  rtx x_nonlocal_goto_handler_labels;
  rtx x_return_label;
  rtx x_naked_return_label;
  rtx x_stack_slot_list;
  rtx x_tail_recursion_reentry;
  rtx x_arg_pointer_save_area;
  long x_frame_offset;
  tree static_chain_decl;
  tree nonlocal_goto_save_area;
  rtx x_parm_birth_insn;
  struct varray_head_tag * x_used_temp_slots;
  struct temp_slot *x_avail_temp_slots;
  int x_temp_slot_level;
  int x_var_temp_slot_level;
  int x_target_temp_slot_level;
  struct var_refs_queue *fixup_var_refs_queue;
  int inlinable;
  int no_debugging_symbols;
  rtvec original_arg_vector;
  tree original_decl_initial;
  int inl_max_label_num;
  int funcdef_no;
  struct machine_function * machine;
  int stack_alignment_needed;
  int preferred_stack_boundary;
  unsigned char recursive_call_emit;
  unsigned char tail_call_emit;
  struct language_function * language;
  rtx epilogue_delay_list;
  enum function_frequency {
    FUNCTION_FREQUENCY_UNLIKELY_EXECUTED,
    FUNCTION_FREQUENCY_NORMAL,
    FUNCTION_FREQUENCY_HOT
  } function_frequency;
  int max_jumptable_ents;
  int last_label_uid;
  location_t function_end_locus;
  struct varray_head_tag *ib_boundaries_block;
  tree unexpanded_var_list;
  unsigned int returns_struct : 1;
  unsigned int returns_pcc_struct : 1;
  unsigned int returns_pointer : 1;
  unsigned int calls_setjmp : 1;
  unsigned int calls_longjmp : 1;
  unsigned int calls_alloca : 1;
  unsigned int calls_eh_return : 1;
  unsigned int has_nonlocal_label : 1;
  unsigned int has_nonlocal_goto : 1;
  unsigned int contains_functions : 1;
  unsigned int has_computed_jump : 1;
  unsigned int is_thunk : 1;
  unsigned int all_throwers_are_sibcalls : 1;
  unsigned int instrument_entry_exit : 1;
  unsigned int profile : 1;
  unsigned int limit_stack : 1;
  unsigned int stdarg : 1;
  unsigned int x_dont_save_pending_sizes_p : 1;
  unsigned int uses_const_pool : 1;
  unsigned int uses_pic_offset_table : 1;
  unsigned int uses_eh_lsda : 1;
  unsigned int arg_pointer_save_area_init : 1;
};
extern struct function *cfun;
extern struct function *outer_function_chain;
extern int virtuals_instantiated;
extern int trampolines_created;
struct function *find_function_data (tree);
extern void reorder_blocks (void);
extern void number_blocks (tree);
extern void clear_block_marks (tree);
extern tree blocks_nreverse (tree);
extern void reset_block_changes (void);
extern void record_block_change (tree);
extern void finalize_block_changes (void);
extern void check_block_change (rtx, tree *);
extern void free_block_changes (void);
extern long get_frame_size (void);
extern long get_func_frame_size (struct function *);
extern struct machine_function * (*init_machine_status) (void);
extern void restore_emit_status (struct function *);
extern void free_after_parsing (struct function *);
extern void free_after_compilation (struct function *);
extern void init_varasm_status (struct function *);
extern void diddle_return_value (void (*)(rtx, void*), void*);
extern void clobber_return_register (void);
extern void use_return_register (void);
extern rtx get_arg_pointer_save_area (struct function *);
extern void init_virtual_regs (struct emit_status *);
extern void instantiate_virtual_regs (void);
extern const char *current_function_name (void);
extern void init_function_once (void);
extern void do_warn_unused_parameter (tree);
void optimize_inline_calls (tree);
unsigned char tree_inlinable_function_p (tree);
tree copy_tree_r (tree*, int*, void*);
void clone_body (tree, tree, void*);
tree save_body (tree, tree *);
void remap_save_expr (tree*, void*, int*);
int estimate_num_insns (tree expr);
extern int flag_inline_trees;
typedef struct {
  struct tree_statement_list_node *ptr;
  tree container;
} tree_stmt_iterator;
static tree_stmt_iterator
tsi_start (tree t)
{
  tree_stmt_iterator i;
  i.ptr = ((t)->stmt_list.head);
  i.container = t;
  return i;
}
static tree_stmt_iterator
tsi_last (tree t)
{
  tree_stmt_iterator i;
  i.ptr = ((t)->stmt_list.tail);
  i.container = t;
  return i;
}
static unsigned char
tsi_end_p (tree_stmt_iterator i)
{
  return i.ptr == ((void *)0);
}
static unsigned char
tsi_one_before_end_p (tree_stmt_iterator i)
{
  return i.ptr != ((void *)0) && i.ptr->next == ((void *)0);
}
static void
tsi_next (tree_stmt_iterator *i)
{
  i->ptr = i->ptr->next;
}
static void
tsi_prev (tree_stmt_iterator *i)
{
  i->ptr = i->ptr->prev;
}
static tree *
tsi_stmt_ptr (tree_stmt_iterator i)
{
  return &i.ptr->stmt;
}
static tree
tsi_stmt (tree_stmt_iterator i)
{
  return i.ptr->stmt;
}
enum tsi_iterator_update
{
  TSI_NEW_STMT,
  TSI_SAME_STMT,
  TSI_CHAIN_START,
  TSI_CHAIN_END,
  TSI_CONTINUE_LINKING
};
extern void tsi_link_before (tree_stmt_iterator *, tree,
        enum tsi_iterator_update);
extern void tsi_link_after (tree_stmt_iterator *, tree,
       enum tsi_iterator_update);
void tsi_delink (tree_stmt_iterator *);
tree tsi_split_statement_list_after (const tree_stmt_iterator *);
tree tsi_split_statement_list_before (tree_stmt_iterator *);
void append_to_statement_list (tree, tree *);
void append_to_statement_list_force (tree, tree *);
extern tree create_tmp_var_raw (tree, const char *);
extern tree create_tmp_var_name (const char *);
extern tree create_tmp_var (tree, const char *);
extern unsigned char is_gimple_tmp_var (tree);
extern tree get_initialized_tmp_var (tree, tree *, tree *);
extern tree get_formal_tmp_var (tree, tree *);
extern void declare_tmp_vars (tree, tree);
extern void annotate_all_with_locus (tree *, location_t);
extern unsigned char is_gimple_stmt (tree);
extern unsigned char is_gimple_reg_type (tree);
extern unsigned char is_gimple_reg (tree);
extern unsigned char is_gimple_variable (tree);
extern unsigned char is_gimple_min_lval (tree);
extern unsigned char is_gimple_addr_expr_arg (tree);
extern unsigned char is_gimple_lvalue (tree);
extern unsigned char is_gimple_min_invariant (tree);
extern unsigned char is_gimple_val (tree);
extern unsigned char is_gimple_rhs (tree);
extern unsigned char is_gimple_condexpr (tree);
extern unsigned char is_gimple_cast (tree);
extern unsigned char is_gimple_constructor_elt (tree);
extern unsigned char is_gimple_non_addressable (tree t);
extern unsigned char is_gimple_call_addr (tree);
extern tree get_call_expr_in (tree t);
extern void recalculate_side_effects (tree);
typedef enum fallback_t {
  fb_none = 0,
  fb_rvalue = 1,
  fb_lvalue = 2,
  fb_mayfail = 4,
  fb_either= fb_rvalue | fb_lvalue
} fallback_t;
enum gimplify_status {
  GS_ERROR = -2,
  GS_UNHANDLED = -1,
  GS_OK = 0,
  GS_ALL_DONE = 1
};
extern enum gimplify_status gimplify_expr (tree *, tree *, tree *,
        unsigned char (*) (tree), fallback_t);
extern void gimplify_type_sizes (tree, tree *);
extern void gimplify_one_sizepos (tree *, tree *);
extern void gimplify_stmt (tree *);
extern void gimplify_to_stmt_list (tree *);
extern void gimplify_body (tree *, tree);
extern void push_gimplify_context (void);
extern void pop_gimplify_context (tree);
extern void gimplify_and_add (tree, tree *);
extern tree get_base_address (tree t);
extern void gimple_add_tmp_var (tree);
extern tree gimple_current_bind_expr (void);
extern void gimple_push_bind_expr (tree);
extern void gimple_pop_bind_expr (void);
extern void unshare_all_trees (tree);
extern tree voidify_wrapper_expr (tree, tree);
extern tree gimple_build_eh_filter (tree, tree, tree);
extern tree build_and_jump (tree *);
extern tree alloc_stmt_list (void);
extern void free_stmt_list (tree);
extern tree force_labels_r (tree *, int *, void *);
extern enum gimplify_status gimplify_va_arg_expr (tree *, tree *, tree *);
extern void lower_nested_functions (tree);
typedef struct def_operand_ptr
{
  tree * def;
} def_operand_p;
typedef struct use_operand_ptr
{
  tree * use;
} use_operand_p;
typedef struct def_optype_d
{
  unsigned num_defs;
  struct def_operand_ptr defs[1];
} def_optype_t;
typedef def_optype_t *def_optype;
typedef struct use_optype_d
{
  unsigned num_uses;
  struct use_operand_ptr uses[1];
} use_optype_t;
typedef use_optype_t *use_optype;
typedef struct v_may_def_optype_d
{
  unsigned num_v_may_defs;
  tree v_may_defs[1];
} v_may_def_optype_t;
typedef v_may_def_optype_t *v_may_def_optype;
typedef struct vuse_optype_d
{
  unsigned num_vuses;
  tree vuses[1];
} vuse_optype_t;
typedef vuse_optype_t *vuse_optype;
typedef struct v_must_def_optype_d
{
  unsigned num_v_must_defs;
  tree v_must_defs[1];
} v_must_def_optype_t;
typedef v_must_def_optype_t *v_must_def_optype;
extern void init_ssa_operands (void);
extern void fini_ssa_operands (void);
extern void verify_start_operands (tree);
extern void finalize_ssa_stmt_operands (tree);
void add_vuse (tree, tree);
extern void get_stmt_operands (tree);
extern void remove_vuses (tree);
extern void remove_v_may_defs (tree);
extern void remove_v_must_defs (tree);
extern void copy_virtual_operands (tree, tree);
struct ptr_info_def
{
  unsigned int pt_anything : 1;
  unsigned int pt_malloc : 1;
  unsigned int value1_escapes_p : 1;
  bitmap pt_vars;
  tree name_mem_tag;
};
enum tree_ann_type { TREE_ANN_COMMON, VAR_ANN, STMT_ANN };
struct tree_ann_common_d
{
  enum tree_ann_type type;
  tree value1_handle;
};
enum need_phi_state {
  NEED_PHI_STATE_UNKNOWN,
  NEED_PHI_STATE_NO,
  NEED_PHI_STATE_MAYBE
};
enum mem_tag_kind {
  NOT_A_TAG,
  TYPE_TAG,
  NAME_TAG
};
struct var_ann_d
{
  struct tree_ann_common_d common;
  unsigned has_hidden_use : 1;
  unsigned out_of_ssa_tag : 1;
  unsigned root_var_processed : 1;
  unsigned int mem_tag_kind : 2;
  unsigned is_alias_tag : 1;
  unsigned used : 1;
  unsigned int need_phi_state : 2;
  tree type_mem_tag;
  varray_type may_aliases;
  size_t uid;
  unsigned partition1;
  unsigned root_index;
  tree default_def;
  tree current_def;
};
struct dataflow_d
{
  varray_type immediate_uses;
  tree uses[2];
};
typedef struct dataflow_d *dataflow_t;
struct stmt_ann_d
{
  struct tree_ann_common_d common;
  unsigned modified : 1;
  unsigned in_ccp_worklist: 1;
  unsigned makes_aliased_loads : 1;
  unsigned makes_aliased_stores : 1;
  unsigned has_volatile_ops : 1;
  unsigned makes_clobbering_call : 1;
  basic_block bb;
  struct def_optype_d * def_ops;
  struct use_optype_d * use_ops;
  struct v_may_def_optype_d * v_may_def_ops;
  struct vuse_optype_d * vuse_ops;
  struct v_must_def_optype_d * v_must_def_ops;
  dataflow_t df;
  bitmap addresses_taken;
  unsigned int uid;
};
union tree_ann_d
{
  struct tree_ann_common_d common;
  struct var_ann_d decl;
  struct stmt_ann_d stmt;
};
typedef union tree_ann_d *tree_ann_t;
typedef struct var_ann_d *var_ann_t;
typedef struct stmt_ann_d *stmt_ann_t;
static tree_ann_t tree_ann (tree);
static tree_ann_t get_tree_ann (tree);
static var_ann_t var_ann (tree);
static var_ann_t get_var_ann (tree);
static stmt_ann_t stmt_ann (tree);
static stmt_ann_t get_stmt_ann (tree);
static enum tree_ann_type ann_type (tree_ann_t);
static basic_block bb_for_stmt (tree);
extern void set_bb_for_stmt (tree, basic_block);
static void modify_stmt (tree);
static void unmodify_stmt (tree);
static unsigned char stmt_modified_p (tree);
static varray_type may_aliases (tree);
static int get_lineno (tree);
static const char *get_filename (tree);
static unsigned char is_exec_stmt (tree);
static unsigned char is_label_stmt (tree);
static v_may_def_optype get_v_may_def_ops (stmt_ann_t);
static vuse_optype get_vuse_ops (stmt_ann_t);
static use_optype get_use_ops (stmt_ann_t);
static def_optype get_def_ops (stmt_ann_t);
static bitmap addresses_taken (tree);
static int num_immediate_uses (dataflow_t);
static tree immediate_use (dataflow_t, int);
static dataflow_t get_immediate_uses (tree);
static unsigned char has_hidden_use (tree);
static void set_has_hidden_use (tree);
static void set_default_def (tree, tree);
static tree default_def (tree);
static unsigned char may_be_aliased (tree);
struct edge_prediction
{
  struct edge_prediction *next;
  edge edge1;
  enum br_predictor predictor;
  int probability;
};
struct bb_ann_d
{
  tree phi_nodes;
  int num_preds;
  unsigned forwardable: 1;
  unsigned has_escape_site : 1;
  struct edge_prediction *predictions;
};
typedef struct bb_ann_d *bb_ann_t;
static bb_ann_t bb_ann (basic_block);
static tree phi_nodes (basic_block);
static void set_phi_nodes (basic_block, tree);
extern varray_type referenced_vars;
extern varray_type ssa_names;
extern tree global_var;
extern bitmap call_clobbered_vars;
extern unsigned char aliases_computed_p;
typedef struct {
  tree_stmt_iterator tsi;
  basic_block bb;
} block_stmt_iterator;
static block_stmt_iterator bsi_start (basic_block);
static block_stmt_iterator bsi_last (basic_block);
static block_stmt_iterator bsi_after_labels (basic_block);
static unsigned char bsi_end_p (block_stmt_iterator);
static void bsi_next (block_stmt_iterator *);
static void bsi_prev (block_stmt_iterator *);
static tree bsi_stmt (block_stmt_iterator);
static tree * bsi_stmt_ptr (block_stmt_iterator);
extern void bsi_remove (block_stmt_iterator *);
extern void bsi_move_before (block_stmt_iterator *, block_stmt_iterator *);
extern void bsi_move_after (block_stmt_iterator *, block_stmt_iterator *);
extern void bsi_move_to_bb_end (block_stmt_iterator *, basic_block);
enum bsi_iterator_update
{
  BSI_NEW_STMT,
  BSI_SAME_STMT,
  BSI_CHAIN_START,
  BSI_CHAIN_END,
  BSI_CONTINUE_LINKING
};
extern void bsi_insert_before (block_stmt_iterator *, tree,
          enum bsi_iterator_update);
extern void bsi_insert_after (block_stmt_iterator *, tree,
         enum bsi_iterator_update);
extern void bsi_replace (const block_stmt_iterator *, tree, unsigned char);
extern void delete_tree_cfg_annotations (void);
extern void disband_implicit_edges (void);
extern unsigned char stmt_ends_bb_p (tree);
extern unsigned char is_ctrl_stmt (tree);
extern unsigned char is_ctrl_altering_stmt (tree);
extern unsigned char computed_goto_p (tree);
extern unsigned char simple_goto_p (tree);
extern void tree_dump_bb (basic_block, FILE *, int);
extern void debug_tree_bb (basic_block);
extern basic_block debug_tree_bb_n (int);
extern void dump_tree_cfg (FILE *, int);
extern void debug_tree_cfg (int);
extern void dump_cfg_stats (FILE *);
extern void debug_cfg_stats (void);
extern void debug_loop_ir (void);
extern void print_loop_ir (FILE *);
extern void cleanup_tree_cfg (void);
extern tree first_stmt (basic_block);
extern tree last_stmt (basic_block);
extern tree *last_stmt_ptr (basic_block);
extern tree last_and_only_stmt (basic_block);
extern edge find_taken_edge (basic_block, tree);
extern void cfg_remove_useless_stmts (void);
extern edge thread_edge (edge, basic_block);
extern basic_block label_to_block (tree);
extern void tree_optimize_tail_calls (unsigned char, enum tree_dump_index);
extern edge tree_block_forwards_to (basic_block bb);
extern void bsi_insert_on_edge (edge, tree);
extern void bsi_commit_edge_inserts (int *);
extern void notice_special_calls (tree);
extern void clear_special_calls (void);
extern void compute_dominance_frontiers (bitmap *);
extern void verify_stmts (void);
extern tree tree_block_label (basic_block bb);
extern void extract_true_false_edges_from_block (basic_block, edge *, edge *);
extern unsigned char tree_purge_dead_eh_edges (basic_block);
extern unsigned char tree_purge_all_dead_eh_edges (bitmap);
extern void dump_generic_bb (FILE *, basic_block, int, int);
extern var_ann_t create_var_ann (tree);
extern stmt_ann_t create_stmt_ann (tree);
extern tree_ann_t create_tree_ann (tree);
extern tree create_phi_node (tree, basic_block);
extern void add_phi_arg (tree *, tree, edge);
extern void remove_phi_arg (tree, basic_block);
extern void remove_phi_arg_num (tree, int);
extern void remove_phi_node (tree, tree, basic_block);
extern void remove_all_phi_nodes_for (bitmap);
extern void dump_dfa_stats (FILE *);
extern void debug_dfa_stats (void);
extern void debug_referenced_vars (void);
extern void dump_referenced_vars (FILE *);
extern void dump_variable (FILE *, tree);
extern void debug_variable (tree);
extern void dump_immediate_uses (FILE *);
extern void debug_immediate_uses (void);
extern void dump_immediate_uses_for (FILE *, tree);
extern void debug_immediate_uses_for (tree);
extern void compute_immediate_uses (int, unsigned char (*)(tree));
extern void free_df (void);
extern tree get_virtual_var (tree);
extern void add_referenced_tmp_var (tree var);
extern void mark_new_vars_to_rename (tree, bitmap);
extern void redirect_immediate_uses (tree, tree);
extern tree make_rename_temp (tree, const char *);
struct lower_data;
extern void lower_stmt_body (tree, struct lower_data *);
extern void expand_used_vars (void);
extern void record_vars (tree);
extern unsigned char block_may_fallthru (tree block);
extern void dump_may_aliases_for (FILE *, tree);
extern void debug_may_aliases_for (tree);
extern void dump_alias_info (FILE *);
extern void debug_alias_info (void);
extern void dump_points_to_info (FILE *);
extern void debug_points_to_info (void);
typedef unsigned char (*walk_use_def_chains_fn) (tree, tree, void *);
extern void init_tree_ssa (void);
extern void rewrite_vars_out_of_ssa (bitmap);
extern void dump_reaching_defs (FILE *);
extern void debug_reaching_defs (void);
extern void dump_tree_ssa (FILE *);
extern void debug_tree_ssa (void);
extern void debug_def_blocks (void);
extern void dump_tree_ssa_stats (FILE *);
extern void debug_tree_ssa_stats (void);
extern void ssa_remove_edge (edge);
extern edge ssa_redirect_edge (edge, basic_block);
extern void set_is_used (tree);
extern unsigned char tree_ssa_useless_type_conversion (tree);
extern unsigned char tree_ssa_useless_type_conversion_1 (tree, tree);
extern void verify_ssa (void);
extern void delete_tree_ssa (void);
extern void register_new_def (tree, varray_type *);
extern void walk_use_def_chains (tree, walk_use_def_chains_fn, void *);
extern void kill_redundant_phi_nodes (void);
extern void rewrite_into_ssa (unsigned char);
extern void rewrite_ssa_into_ssa (bitmap);
void compute_global_livein (bitmap, bitmap);
tree duplicate_ssa_name (tree, tree);
unsigned char fold_stmt (tree *);
tree widen_bitfield (tree, tree, tree);
extern void dump_dominator_optimization_stats (FILE *);
extern void debug_dominator_optimization_stats (void);
extern void propagate_value (use_operand_p, tree);
extern void propagate_tree_value (tree *, tree);
extern void replace_exp (use_operand_p, tree);
static int phi_arg_from_edge (tree, edge);
static unsigned char may_propagate_copy (tree, tree);
static unsigned char is_call_clobbered (tree);
static void mark_call_clobbered (tree);
extern void make_eh_edges (tree);
extern unsigned char tree_could_trap_p (tree);
extern unsigned char tree_could_throw_p (tree);
extern unsigned char tree_can_throw_internal (tree);
extern unsigned char tree_can_throw_external (tree);
extern int lookup_stmt_eh_region (tree);
extern void add_stmt_to_eh_region (tree, int);
extern unsigned char remove_stmt_from_eh_region (tree);
extern unsigned char maybe_clean_eh_stmt (tree);
void add_to_value (tree, tree);
void debug_value_expressions (tree);
void print_value_expressions (FILE *, tree);
unsigned char expressions_equal_p (tree, tree);
tree get_value_handle (tree);
hashval_t vn_compute (tree, hashval_t, vuse_optype);
tree vn_lookup_or_add (tree, vuse_optype);
void vn_add (tree, tree, vuse_optype);
tree vn_lookup (tree, vuse_optype);
void vn_init (void);
void vn_delete (void);
void insert_edge_copies (tree stmt, basic_block bb);
static var_ann_t
var_ann (tree t)
{
  return (var_ann_t) t->common.ann;
}
static var_ann_t
get_var_ann (tree var)
{
  var_ann_t ann = var_ann (var);
  return (ann) ? ann : create_var_ann (var);
}
static stmt_ann_t
stmt_ann (tree t)
{
  return (stmt_ann_t) t->common.ann;
}
static stmt_ann_t
get_stmt_ann (tree stmt)
{
  stmt_ann_t ann = stmt_ann (stmt);
  return (ann) ? ann : create_stmt_ann (stmt);
}
static enum tree_ann_type
ann_type (tree_ann_t ann)
{
  return ann->common.type;
}
static basic_block
bb_for_stmt (tree t)
{
  stmt_ann_t ann = stmt_ann (t);
  return ann ? ann->bb : ((void *)0);
}
static varray_type
may_aliases (tree var)
{
  var_ann_t ann = var_ann (var);
  return ann ? ann->may_aliases : ((void *)0);
}
static unsigned char
has_hidden_use (tree var)
{
  var_ann_t ann = var_ann (var);
  return ann ? ann->has_hidden_use : 0;
}
static void
set_has_hidden_use (tree var)
{
  var_ann_t ann = var_ann (var);
  if (ann == ((void *)0))
    ann = create_var_ann (var);
  ann->has_hidden_use = 1;
}
static int
get_lineno (tree expr)
{
  if (expr == (tree) ((void *)0))
    return -1;
  if (((enum tree_code) (expr)->common.code) == COMPOUND_EXPR)
    expr = ((expr)->exp.operands[0]);
  if (! (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (expr)->common.code))])) != 0) ? (expr)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    return -1;
  return ((expr)->exp.locus->line);
}
static const char *
get_filename (tree expr)
{
  const char *filename;
  if (expr == (tree) ((void *)0))
    return "???";
  if (((enum tree_code) (expr)->common.code) == COMPOUND_EXPR)
    expr = ((expr)->exp.operands[0]);
  if ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (expr)->common.code))])) != 0) ? (expr)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) && (filename = ((expr)->exp.locus->file)))
    return filename;
  else
    return "???";
}
static void
modify_stmt (tree t)
{
  stmt_ann_t ann = stmt_ann (t);
  if (ann == ((void *)0))
    ann = create_stmt_ann (t);
  ann->modified = 1;
}
static void
unmodify_stmt (tree t)
{
  stmt_ann_t ann = stmt_ann (t);
  if (ann == ((void *)0))
    ann = create_stmt_ann (t);
  ann->modified = 0;
}
static unsigned char
stmt_modified_p (tree t)
{
  stmt_ann_t ann = stmt_ann (t);
  return ann ? ann->modified : 1;
}
static def_optype
get_def_ops (stmt_ann_t ann)
{
  return ann ? ann->def_ops : ((void *)0);
}
static use_optype
get_use_ops (stmt_ann_t ann)
{
  return ann ? ann->use_ops : ((void *)0);
}
static v_may_def_optype
get_v_may_def_ops (stmt_ann_t ann)
{
  return ann ? ann->v_may_def_ops : ((void *)0);
}
static vuse_optype
get_vuse_ops (stmt_ann_t ann)
{
  return ann ? ann->vuse_ops : ((void *)0);
}
static v_must_def_optype
get_v_must_def_ops (stmt_ann_t ann)
{
  return ann ? ann->v_must_def_ops : ((void *)0);
}
static tree
get_use_from_ptr (use_operand_p use)
{
  return *(use.use);
}
static tree
get_def_from_ptr (def_operand_p def)
{
  return *(def.def);
}
static use_operand_p
get_use_op_ptr (use_optype uses, unsigned int index)
{
  return uses->uses[index];
}
static def_operand_p
get_def_op_ptr (def_optype defs, unsigned int index)
{
  return defs->defs[index];
}
static def_operand_p
get_v_may_def_result_ptr(v_may_def_optype v_may_defs, unsigned int index)
{
  def_operand_p op;
  op.def = &(v_may_defs->v_may_defs[index * 2]);
  return op;
}
static use_operand_p
get_v_may_def_op_ptr(v_may_def_optype v_may_defs, unsigned int index)
{
  use_operand_p op;
  op.use = &(v_may_defs->v_may_defs[index * 2 + 1]);
  return op;
}
static use_operand_p
get_vuse_op_ptr(vuse_optype vuses, unsigned int index)
{
  use_operand_p op;
  op.use = &(vuses->vuses[index]);
  return op;
}
static def_operand_p
get_v_must_def_op_ptr (v_must_def_optype v_must_defs, unsigned int index)
{
  def_operand_p op;
  op.def = &(v_must_defs->v_must_defs[index]);
  return op;
}
static def_operand_p
get_phi_result_ptr (tree phi)
{
  def_operand_p op;
  op.def = &((phi)->phi.result);
  return op;
}
static use_operand_p
get_phi_arg_def_ptr (tree phi, int i)
{
  use_operand_p op;
  op.use = &(((phi)->phi.a[i]).def);
  return op;
}
static void
start_ssa_stmt_operands (tree stmt )
{
}
static bitmap
addresses_taken (tree stmt)
{
  stmt_ann_t ann = stmt_ann (stmt);
  return ann ? ann->addresses_taken : ((void *)0);
}
static dataflow_t
get_immediate_uses (tree stmt)
{
  stmt_ann_t ann = stmt_ann (stmt);
  return ann ? ann->df : ((void *)0);
}
static int
num_immediate_uses (dataflow_t df)
{
  varray_type imm;
  if (!df)
    return 0;
  imm = df->immediate_uses;
  if (!imm)
    return df->uses[1] ? 2 : 1;
  return ((imm)->elements_used) + 2;
}
static tree
immediate_use (dataflow_t df, int num)
{
  if (!df)
    return (tree) ((void *)0);
  if (num < 2)
    return df->uses[num];
  return ((df->immediate_uses)->data.tree1[num - 2]);
}
static bb_ann_t
bb_ann (basic_block bb)
{
  return (bb_ann_t)bb->tree_annotations;
}
static tree
phi_nodes (basic_block bb)
{
  if (bb->index < 0)
    return ((void *)0);
  return bb_ann (bb)->phi_nodes;
}
static void
set_phi_nodes (basic_block bb, tree l)
{
  tree phi;
  bb_ann (bb)->phi_nodes = l;
  for (phi = l; phi; phi = (((phi))->common.chain))
    set_bb_for_stmt (phi, bb);
}
static int
phi_arg_from_edge (tree phi, edge e)
{
  int i;
  for (i = 0; i < (phi)->phi.num_args; i++)
    if (((phi)->phi.a[i]).e == e)
      return i;
  return -1;
}
static unsigned char
is_exec_stmt (tree t)
{
  return (t && !(((enum tree_code) (t)->common.code) == NOP_EXPR && (((enum tree_code) (((t)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((t)->exp.operands[0]))) && t != global_trees[TI_ERROR_MARK]);
}
static unsigned char
is_label_stmt (tree t)
{
  if (t)
    switch (((enum tree_code) (t)->common.code))
      {
 case LABEL_DECL:
 case LABEL_EXPR:
 case CASE_LABEL_EXPR:
   return 1;
 default:
   return 0;
      }
  return 0;
}
static unsigned char
may_propagate_copy (tree dest, tree orig)
{
  if (((enum tree_code) (dest)->common.code) == SSA_NAME
      && ((enum tree_code) (orig)->common.code) == SSA_NAME
      && (((enum tree_code) (((dest)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((dest)->common.type))->common.code) == REFERENCE_TYPE)
      && (((enum tree_code) (((orig)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((orig)->common.type))->common.code) == REFERENCE_TYPE))
    {
      tree mt_dest = var_ann ((dest)->ssa_name.var)->type_mem_tag;
      tree mt_orig = var_ann ((orig)->ssa_name.var)->type_mem_tag;
      if (mt_dest && mt_orig && mt_dest != mt_orig)
 return 0;
    }
  if (((enum tree_code) (dest)->common.code) == SSA_NAME && !is_gimple_reg (dest))
    {
      if (((enum tree_code) (orig)->common.code) == SSA_NAME)
 {
   if (!is_gimple_reg (orig))
     return 1;
 }
      return 0;
    }
  if (((enum tree_code) (orig)->common.code) == SSA_NAME
      && (orig)->common.asm_written_flag)
    return 0;
  if (((enum tree_code) (dest)->common.code) == SSA_NAME
      && ((dest)->common.asm_written_flag
   || (((dest)->ssa_name.var)->decl.inline_flag)))
    return 0;
  return 1;
}
static void
set_default_def (tree var, tree def)
{
  var_ann_t ann = var_ann (var);
  if (ann == ((void *)0))
    ann = create_var_ann (var);
  ann->default_def = def;
}
static tree
default_def (tree var)
{
  var_ann_t ann = var_ann (var);
  return ann ? ann->default_def : (tree) ((void *)0);
}
static unsigned char
phi_ssa_name_p (tree t)
{
  if (((enum tree_code) (t)->common.code) == SSA_NAME)
    return 1;
  return 0;
}
static block_stmt_iterator
bsi_start (basic_block bb)
{
  block_stmt_iterator bsi;
  if (bb->stmt_list)
    bsi.tsi = tsi_start (bb->stmt_list);
  else
    {
      bsi.tsi.ptr = ((void *)0);
      bsi.tsi.container = ((void *)0);
    }
  bsi.bb = bb;
  return bsi;
}
static block_stmt_iterator
bsi_after_labels (basic_block bb)
{
  block_stmt_iterator bsi;
  tree_stmt_iterator next;
  bsi.bb = bb;
  if (!bb->stmt_list)
    {
      bsi.tsi.ptr = ((void *)0);
      bsi.tsi.container = ((void *)0);
      return bsi;
    }
  bsi.tsi = tsi_start (bb->stmt_list);
  if (tsi_end_p (bsi.tsi))
    return bsi;
  if (((enum tree_code) (tsi_stmt (bsi.tsi))->common.code) != LABEL_EXPR)
    fancy_abort ("gcc.c", 91144, "?");
  next = bsi.tsi;
  tsi_next (&next);
  while (!tsi_end_p (next)
  && ((enum tree_code) (tsi_stmt (next))->common.code) == LABEL_EXPR)
    {
      bsi.tsi = next;
      tsi_next (&next);
    }
  return bsi;
}
static block_stmt_iterator
bsi_last (basic_block bb)
{
  block_stmt_iterator bsi;
  if (bb->stmt_list)
    bsi.tsi = tsi_last (bb->stmt_list);
  else
    {
      bsi.tsi.ptr = ((void *)0);
      bsi.tsi.container = ((void *)0);
    }
  bsi.bb = bb;
  return bsi;
}
static unsigned char
bsi_end_p (block_stmt_iterator i)
{
  return tsi_end_p (i.tsi);
}
static void
bsi_next (block_stmt_iterator *i)
{
  tsi_next (&i->tsi);
}
static void
bsi_prev (block_stmt_iterator *i)
{
  tsi_prev (&i->tsi);
}
static tree
bsi_stmt (block_stmt_iterator i)
{
  return tsi_stmt (i.tsi);
}
static tree *
bsi_stmt_ptr (block_stmt_iterator i)
{
  return tsi_stmt_ptr (i.tsi);
}
static unsigned char
may_be_aliased (tree var)
{
  return (((var)->common.addressable_flag)
          || decl_function_context (var) != current_function_decl);
}
static unsigned char
is_call_clobbered (tree var)
{
  return needs_to_live_in_memory (var)
  || bitmap_bit_p (call_clobbered_vars, var_ann (var)->uid);
}
static void
mark_call_clobbered (tree var)
{
  var_ann_t ann = var_ann (var);
  (var)->decl.needs_to_live_in_memory = 1;
  bitmap_set_bit (call_clobbered_vars, ann->uid);
}
static void
mark_non_addressable (tree var)
{
  bitmap_clear_bit (call_clobbered_vars, var_ann (var)->uid);
  (var)->decl.needs_to_live_in_memory = 0;
  ((var)->common.addressable_flag) = 0;
}
static tree_ann_t
tree_ann (tree t)
{
  return t->common.ann;
}
static tree_ann_t
get_tree_ann (tree t)
{
  tree_ann_t ann = tree_ann (t);
  return (ann) ? ann : create_tree_ann (t);
}
extern void mudflap_init (void);
extern void mudflap_c_function_decls (tree);
extern void mudflap_c_function_ops (tree);
extern void mudflap_enqueue_decl (tree);
extern void mudflap_enqueue_constant (tree);
extern void mudflap_finish_file (void);
extern int mf_marked_p (tree);
extern tree mf_mark (tree);
typedef struct dump_node_info
{
  unsigned int index;
  unsigned int binfo_p : 1;
} *dump_node_info_p;
typedef struct dump_queue
{
  splay_tree_node node;
  struct dump_queue *next;
} *dump_queue_p;
struct dump_info
{
  FILE *stream;
  tree node;
  int flags;
  unsigned int index;
  unsigned int column;
  dump_queue_p queue;
  dump_queue_p queue_end;
  dump_queue_p free_list;
  splay_tree nodes;
};
extern void dump_pointer (dump_info_p, const char *, void *);
extern void dump_int (dump_info_p, const char *, int);
extern void dump_string (dump_info_p, const char *);
extern void dump_stmt (dump_info_p, tree);
extern void queue_and_dump_index (dump_info_p, const char *, tree, int);
extern void queue_and_dump_type (dump_info_p, tree);
extern void dump_function (enum tree_dump_index, tree);
extern void dump_function_to_file (tree, FILE *, int);
extern unsigned int dump_register (const char *, const char *);
extern FILE *dump_file;
extern int dump_flags;
extern struct bitmap_head_def *vars_to_rename;
struct tree_opt_pass
{
  const char *name;
  unsigned char (*gate) (void);
  void (*execute) (void);
  struct tree_opt_pass *sub;
  struct tree_opt_pass *next;
  unsigned int static_pass_number;
  unsigned int tv_id;
  unsigned int properties_required;
  unsigned int properties_provided;
  unsigned int properties_destroyed;
  unsigned int todo_flags_start;
  unsigned int todo_flags_finish;
};
extern struct tree_opt_pass pass_mudflap_1;
extern struct tree_opt_pass pass_mudflap_2;
extern struct tree_opt_pass pass_remove_useless_stmts;
extern struct tree_opt_pass pass_lower_cf;
extern struct tree_opt_pass pass_lower_eh;
extern struct tree_opt_pass pass_build_cfg;
extern struct tree_opt_pass pass_tree_profile;
extern struct tree_opt_pass pass_referenced_vars;
extern struct tree_opt_pass pass_build_pta;
extern struct tree_opt_pass pass_del_pta;
extern struct tree_opt_pass pass_sra;
extern struct tree_opt_pass pass_tail_recursion;
extern struct tree_opt_pass pass_tail_calls;
extern struct tree_opt_pass pass_loop;
extern struct tree_opt_pass pass_loop_init;
extern struct tree_opt_pass pass_loop_done;
extern struct tree_opt_pass pass_ch;
extern struct tree_opt_pass pass_ccp;
extern struct tree_opt_pass pass_build_ssa;
extern struct tree_opt_pass pass_del_ssa;
extern struct tree_opt_pass pass_dominator;
extern struct tree_opt_pass pass_dce;
extern struct tree_opt_pass pass_cd_dce;
extern struct tree_opt_pass pass_may_alias;
extern struct tree_opt_pass pass_split_crit_edges;
extern struct tree_opt_pass pass_pre;
extern struct tree_opt_pass pass_profile;
extern struct tree_opt_pass pass_lower_complex;
extern struct tree_opt_pass pass_fold_builtins;
extern struct tree_opt_pass pass_early_warn_uninitialized;
extern struct tree_opt_pass pass_late_warn_uninitialized;
extern struct tree_opt_pass pass_warn_function_return;
extern struct tree_opt_pass pass_phiopt;
extern struct tree_opt_pass pass_forwprop;
extern struct tree_opt_pass pass_redundant_phi;
extern struct tree_opt_pass pass_dse;
extern struct tree_opt_pass pass_nrv;
extern struct tree_opt_pass pass_remove_useless_vars;
extern struct tree_opt_pass pass_rename_ssa_copies;
extern struct tree_opt_pass pass_expand;
extern struct tree_opt_pass pass_rest_of_compilation;
extern struct tree_opt_pass pass_fre;
typedef struct
{
  const char *format_spec;
  va_list *args_ptr;
  int err_no;
} text_info;
typedef enum
{
  DIAGNOSTICS_SHOW_PREFIX_ONCE = 0x0,
  DIAGNOSTICS_SHOW_PREFIX_NEVER = 0x1,
  DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE = 0x2
} diagnostic_prefixing_rule_t;
typedef struct
{
  struct obstack obstack;
  FILE *stream;
  int line_length;
  char digit_buffer[128];
} output_buffer;
typedef unsigned int pp_flags;
typedef enum
{
  pp_none, pp_before, pp_after
} pp_padding;
typedef struct pretty_print_info pretty_printer;
typedef unsigned char (*printer_fn) (pretty_printer *, text_info *);
struct pretty_print_info
{
  output_buffer *buffer;
  const char *prefix;
  pp_padding padding;
  int maximum_length;
  int ideal_maximum_length;
  int indent_skip;
  diagnostic_prefixing_rule_t prefixing_rule;
  printer_fn format_decoder;
  unsigned char emitted_prefix;
  unsigned char need_newline;
};
extern void pp_construct (pretty_printer *, const char *, int);
extern void pp_base_set_line_maximum_length (pretty_printer *, int);
extern void pp_base_set_prefix (pretty_printer *, const char *);
extern void pp_base_destroy_prefix (pretty_printer *);
extern int pp_base_remaining_character_count_for_line (pretty_printer *);
extern void pp_base_clear_output_area (pretty_printer *);
extern const char *pp_base_formatted_text (pretty_printer *);
extern const char *pp_base_last_position_in_text (const pretty_printer *);
extern void pp_base_emit_prefix (pretty_printer *);
extern void pp_base_append_text (pretty_printer *, const char *, const char *);
extern void pp_printf (pretty_printer *, const char *, ...) ;
extern void pp_verbatim (pretty_printer *, const char *, ...);
extern void pp_base_flush (pretty_printer *);
extern void pp_base_format_text (pretty_printer *, text_info *);
extern void pp_base_format_verbatim (pretty_printer *, text_info *);
extern void pp_base_indent (pretty_printer *);
extern void pp_base_newline (pretty_printer *);
extern void pp_base_character (pretty_printer *, int);
extern void pp_base_string (pretty_printer *, const char *);
extern void pp_write_text_to_stream (pretty_printer *pp);
extern void pp_base_maybe_space (pretty_printer *);
typedef enum
{
DK_FATAL,
DK_ICE,
DK_ERROR,
DK_SORRY,
DK_WARNING,
DK_ANACHRONISM,
DK_NOTE,
DK_DEBUG,
  DK_LAST_DIAGNOSTIC_KIND
} diagnostic_t;
typedef struct
{
  text_info message;
  location_t location;
  diagnostic_t kind;
} diagnostic_info;
typedef struct diagnostic_context diagnostic_context;
typedef void (*diagnostic_starter_fn) (diagnostic_context *,
           diagnostic_info *);
typedef diagnostic_starter_fn diagnostic_finalizer_fn;
struct diagnostic_context
{
  pretty_printer *printer;
  int diagnostic_count[DK_LAST_DIAGNOSTIC_KIND];
  unsigned char warnings_are_errors_message;
  unsigned char abort_on_error;
  diagnostic_starter_fn begin_diagnostic;
  diagnostic_finalizer_fn end_diagnostic;
  void (*internal_error) (const char *, va_list *);
  tree last_function;
  int last_module;
  int lock;
  void *x_data;
};
extern diagnostic_context *global_dc;
extern void diagnostic_initialize (diagnostic_context *);
extern void diagnostic_report_current_module (diagnostic_context *);
extern void diagnostic_report_current_function (diagnostic_context *);
extern void diagnostic_report_diagnostic (diagnostic_context *,
       diagnostic_info *);
extern void diagnostic_set_info (diagnostic_info *, const char *, va_list *,
     location_t, diagnostic_t);
extern char *diagnostic_build_prefix (diagnostic_info *);
extern void verbatim (const char *, ...);
extern char *file_name_as_prefix (const char *);
extern void debug_output_buffer (pretty_printer *);
extern int dump_generic_node (pretty_printer *, tree, int, int, unsigned char);
extern void print_generic_stmt (FILE *, tree, int);
extern void print_generic_stmt_indented (FILE *, tree, int, int);
extern void print_generic_expr (FILE *, tree, int);
extern void print_generic_decl (FILE *, tree, int);
extern void debug_generic_expr (tree);
extern void debug_generic_stmt (tree);
extern void debug_c_tree (tree);
struct diagnostic_context;
typedef void (*lang_print_tree_hook) (FILE *, tree, int indent);
struct lang_hooks_for_tree_inlining
{
  tree (*walk_subtrees) (tree *, int *,
    tree (*) (tree *, int *, void *),
    void *, void *);
  int (*cannot_inline_tree_fn) (tree *);
  int (*disregard_inline_limits) (tree);
  tree (*add_pending_fn_decls) (void *, tree);
  int (*auto_var_in_fn_p) (tree, tree);
  tree (*copy_res_decl_for_inlining) (tree, tree, tree,
          void *, int *, tree);
  int (*anon_aggr_type_p) (tree);
  unsigned char (*var_mod_type_p) (tree, tree);
  int (*start_inlining) (tree);
  void (*end_inlining) (tree);
  tree (*convert_parm_for_inlining) (tree, tree, tree, int);
  int (*estimate_num_insns) (tree);
};
struct lang_hooks_for_callgraph
{
  tree (*analyze_expr) (tree *, int *, tree);
  void (*expand_function) (tree);
};
struct lang_hooks_for_functions
{
  void (*init) (struct function *);
  void (*final) (struct function *);
  void (*enter_nested) (struct function *);
  void (*leave_nested) (struct function *);
  unsigned char (*missing_noreturn_ok_p) (tree);
};
struct lang_hooks_for_tree_dump
{
  unsigned char (*dump_tree) (void *, tree);
  int (*type_quals) (tree);
};
struct lang_hooks_for_types
{
  tree (*make_type) (enum tree_code);
  tree (*type_for_mode) (enum machine_mode, int);
  tree (*type_for_size) (unsigned, int);
  tree (*unsigned_type) (tree);
  tree (*signed_type) (tree);
  tree (*signed_or_unsigned_type) (int, tree);
  tree (*type_promotes_to) (tree);
  void (*register_builtin_type) (tree, const char *);
  void (*incomplete_type_error) (tree value1, tree type);
  tree (*max_size) (tree);
  unsigned char hash_types;
};
struct lang_hooks_for_decls
{
  void (*pushlevel) (int);
  tree (*poplevel) (int, int, int);
  int (*global_bindings_p) (void);
  void (*insert_block) (tree);
  void (*set_block) (tree);
  tree (*pushdecl) (tree);
  tree (*getdecls) (void);
  unsigned char (*warn_unused_global) (tree);
  void (*final_write_globals) (void);
  void (*prepare_assemble_variable) (tree);
  unsigned char (*ok_for_sibcall) (tree);
};
struct lang_hooks
{
  const char *name;
  size_t identifier_size;
  size_t (*tree_size) (enum tree_code);
  unsigned int (*init_options) (unsigned int argc, const char **argv);
  void (*initialize_diagnostics) (struct diagnostic_context *);
  int (*handle_option) (size_t code, const char *arg, int value1);
  unsigned char (*missing_argument) (const char *opt, size_t code);
  unsigned char (*post_options) (const char **);
  unsigned char (*init) (void);
  void (*finish) (void);
  void (*parse_file) (int);
  void (*clear_binding_stack) (void);
  long (*get_alias_set) (tree);
  tree (*expand_constant) (tree);
  rtx (*expand_expr) (tree, rtx, enum machine_mode, int, rtx *);
  int (*expand_decl) (tree);
  tree (*truthvalue_conversion) (tree);
  int (*safe_from_p) (rtx, tree);
  void (*finish_incomplete_decl) (tree);
  int (*unsafe_for_reeval) (tree);
  unsigned char (*mark_addressable) (tree);
  int (*staticp) (tree);
  void (*dup_lang_specific_decl) (tree);
  tree (*unsave_expr_now) (tree);
  tree (*maybe_build_cleanup) (tree);
  void (*set_decl_assembler_name) (tree);
  unsigned char (*can_use_bit_fields_p) (void);
  unsigned char honor_readonly;
  unsigned char no_body_blocks;
  void (*print_statistics) (void);
  lang_print_tree_hook print_xnode;
  lang_print_tree_hook print_decl;
  lang_print_tree_hook print_type;
  lang_print_tree_hook print_identifier;
  const char *(*decl_printable_name) (tree decl, int verbosity);
  int (*types_compatible_p) (tree x, tree y);
  tree (*lang_get_callee_fndecl) (tree);
  void (*print_error_function) (struct diagnostic_context *, const char *);
  tree (*expr_size) (tree);
  void (*update_decl_after_saving) (tree, void *);
  const struct attribute_spec *attribute_table;
  const struct attribute_spec *common_attribute_table;
  const struct attribute_spec *format_attribute_table;
  struct lang_hooks_for_functions function;
  struct lang_hooks_for_tree_inlining tree_inlining;
  struct lang_hooks_for_callgraph callgraph;
  struct lang_hooks_for_tree_dump tree_dump;
  struct lang_hooks_for_decls decls;
  struct lang_hooks_for_types types;
  int (*gimplify_expr) (tree *, tree *, tree *);
  tree (*fold_obj_type_ref) (tree, tree);
  unsigned char gimple_before_inlining;
};
extern const struct lang_hooks lang_hooks;
extern const char empty_string[];
extern const char digit_vector[];
typedef void (*gt_pointer_operator) (void *, void *);
enum gt_types_enum {
 gt_ggc_e_11align_stack,
 gt_ggc_e_7c_scope,
 gt_ggc_e_9c_binding,
 gt_ggc_e_12aterm_list_a,
 gt_ggc_e_6aterm_,
 gt_ggc_e_15throw_stmt_node,
 gt_ggc_e_15edge_prediction,
 gt_ggc_e_19v_must_def_optype_d,
 gt_ggc_e_13vuse_optype_d,
 gt_ggc_e_18v_may_def_optype_d,
 gt_ggc_e_12use_optype_d,
 gt_ggc_e_12def_optype_d,
 gt_ggc_e_10dataflow_d,
 gt_ggc_e_23constant_descriptor_rtx,
 gt_ggc_e_24constant_descriptor_tree,
 gt_ggc_e_14in_named_entry,
 gt_ggc_e_17rtx_constant_pool,
 gt_ggc_e_9type_hash,
 gt_ggc_e_16string_pool_data,
 gt_ggc_e_10goto_fixup,
 gt_ggc_e_11label_chain,
 gt_ggc_e_7nesting,
 gt_ggc_e_9case_node,
 gt_ggc_e_9eh_region,
 gt_ggc_e_13ehl_map_entry,
 gt_ggc_e_16var_loc_list_def,
 gt_ggc_e_12var_loc_node,
 gt_ggc_e_16limbo_die_struct,
 gt_ggc_e_16dw_ranges_struct,
 gt_ggc_e_14pubname_struct,
 gt_ggc_e_28dw_separate_line_info_struct,
 gt_ggc_e_19dw_line_info_struct,
 gt_ggc_e_14dw_attr_struct,
 gt_ggc_e_18dw_loc_list_struct,
 gt_ggc_e_15queued_reg_save,
 gt_ggc_e_20indirect_string_node,
 gt_ggc_e_19dw_loc_descr_struct,
 gt_ggc_e_13dw_fde_struct,
 gt_ggc_e_13dw_cfi_struct,
 gt_ggc_e_8typeinfo,
 gt_ggc_e_15alias_set_entry,
 gt_ggc_e_8c_switch,
 gt_ggc_e_18sorted_fields_type,
 gt_ggc_e_19cgraph_varpool_node,
 gt_ggc_e_11cgraph_edge,
 gt_ggc_e_11cgraph_node,
 gt_ggc_e_8bb_ann_d,
 gt_ggc_e_17reorder_block_def,
 gt_ggc_e_7et_node,
 gt_ggc_e_4loop,
 gt_ggc_e_12elt_loc_list,
 gt_ggc_e_17cselib_val_struct,
 gt_ggc_e_8elt_list,
 gt_ggc_e_12reg_info_def,
 gt_ggc_e_14lang_tree_node,
 gt_ggc_e_9value_set,
 gt_ggc_e_24tree_statement_list_node,
 gt_ggc_e_9lang_decl,
 gt_ggc_e_13alias_var_def,
 gt_ggc_e_9lang_type,
 gt_ggc_e_10die_struct,
 gt_ggc_e_8edge_def,
 gt_ggc_e_12ptr_info_def,
 gt_ggc_e_10real_value,
 gt_ggc_e_10tree_ann_d,
 gt_ggc_e_13convert_optab,
 gt_ggc_e_5optab,
 gt_ggc_e_15basic_block_def,
 gt_ggc_e_9reg_attrs,
 gt_ggc_e_9mem_attrs,
 gt_ggc_e_17language_function,
 gt_ggc_e_9temp_slot,
 gt_ggc_e_15varray_head_tag,
 gt_ggc_e_20initial_value_struct,
 gt_ggc_e_13varasm_status,
 gt_ggc_e_11stmt_status,
 gt_ggc_e_9eh_status,
 gt_ggc_e_8function,
 gt_ggc_e_11expr_status,
 gt_ggc_e_11emit_status,
 gt_ggc_e_14sequence_stack,
 gt_ggc_e_14var_refs_queue,
 gt_ggc_e_15bitmap_head_def,
 gt_ggc_e_18bitmap_element_def,
 gt_ggc_e_17stack_local_entry,
 gt_ggc_e_16machine_function,
 gt_ggc_e_6answer,
 gt_ggc_e_9cpp_macro,
 gt_ggc_e_9cpp_token,
 gt_ggc_e_9tree_node,
 gt_ggc_e_9rtvec_def,
 gt_ggc_e_7rtx_def,
 gt_ggc_e_10location_s,
 gt_e_II17splay_tree_node_s,
 gt_e_SP9tree_node17splay_tree_node_s,
 gt_e_P13alias_var_def15varray_head_tag,
 gt_e_P15throw_stmt_node4htab,
 gt_e_P23constant_descriptor_rtx4htab,
 gt_e_P24constant_descriptor_tree4htab,
 gt_e_P14in_named_entry4htab,
 gt_e_P9type_hash4htab,
 gt_e_P13ehl_map_entry4htab,
 gt_e_P9tree_node4htab,
 gt_e_P9reg_attrs4htab,
 gt_e_P9mem_attrs4htab,
 gt_e_P7rtx_def4htab,
 gt_e_SP9tree_node12splay_tree_s,
 gt_e_P16var_loc_list_def4htab,
 gt_e_P10die_struct4htab,
 gt_e_P20indirect_string_node4htab,
 gt_e_P19cgraph_varpool_node4htab,
 gt_e_P11cgraph_node4htab,
 gt_e_P15alias_set_entry15varray_head_tag,
 gt_e_II12splay_tree_s,
 gt_e_P9temp_slot15varray_head_tag,
 gt_types_enum_last
};
extern void gt_ggc_mx_align_stack (void *);
extern void gt_ggc_mx_c_scope (void *);
extern void gt_ggc_mx_c_binding (void *);
extern void gt_ggc_mx_aterm_list_a (void *);
extern void gt_ggc_mx_aterm_ (void *);
extern void gt_ggc_mx_throw_stmt_node (void *);
extern void gt_ggc_mx_edge_prediction (void *);
extern void gt_ggc_mx_v_must_def_optype_d (void *);
extern void gt_ggc_mx_vuse_optype_d (void *);
extern void gt_ggc_mx_v_may_def_optype_d (void *);
extern void gt_ggc_mx_use_optype_d (void *);
extern void gt_ggc_mx_def_optype_d (void *);
extern void gt_ggc_mx_dataflow_d (void *);
extern void gt_ggc_mx_constant_descriptor_rtx (void *);
extern void gt_ggc_mx_constant_descriptor_tree (void *);
extern void gt_ggc_mx_in_named_entry (void *);
extern void gt_ggc_mx_rtx_constant_pool (void *);
extern void gt_ggc_mx_type_hash (void *);
extern void gt_ggc_mx_string_pool_data (void *);
extern void gt_ggc_mx_goto_fixup (void *);
extern void gt_ggc_mx_label_chain (void *);
extern void gt_ggc_mx_nesting (void *);
extern void gt_ggc_mx_case_node (void *);
extern void gt_ggc_mx_eh_region (void *);
extern void gt_ggc_mx_ehl_map_entry (void *);
extern void gt_ggc_mx_var_loc_list_def (void *);
extern void gt_ggc_mx_var_loc_node (void *);
extern void gt_ggc_mx_limbo_die_struct (void *);
extern void gt_ggc_mx_dw_ranges_struct (void *);
extern void gt_ggc_mx_pubname_struct (void *);
extern void gt_ggc_mx_dw_separate_line_info_struct (void *);
extern void gt_ggc_mx_dw_line_info_struct (void *);
extern void gt_ggc_mx_dw_attr_struct (void *);
extern void gt_ggc_mx_dw_loc_list_struct (void *);
extern void gt_ggc_mx_queued_reg_save (void *);
extern void gt_ggc_mx_indirect_string_node (void *);
extern void gt_ggc_mx_dw_loc_descr_struct (void *);
extern void gt_ggc_mx_dw_fde_struct (void *);
extern void gt_ggc_mx_dw_cfi_struct (void *);
extern void gt_ggc_mx_typeinfo (void *);
extern void gt_ggc_mx_alias_set_entry (void *);
extern void gt_ggc_mx_c_switch (void *);
extern void gt_ggc_mx_sorted_fields_type (void *);
extern void gt_ggc_mx_cgraph_varpool_node (void *);
extern void gt_ggc_mx_cgraph_edge (void *);
extern void gt_ggc_mx_cgraph_node (void *);
extern void gt_ggc_mx_bb_ann_d (void *);
extern void gt_ggc_mx_reorder_block_def (void *);
extern void gt_ggc_mx_et_node (void *);
extern void gt_ggc_mx_loop (void *);
extern void gt_ggc_mx_elt_loc_list (void *);
extern void gt_ggc_mx_cselib_val_struct (void *);
extern void gt_ggc_mx_elt_list (void *);
extern void gt_ggc_mx_reg_info_def (void *);
extern void gt_ggc_mx_lang_tree_node (void *);
extern void gt_ggc_mx_value_set (void *);
extern void gt_ggc_mx_tree_statement_list_node (void *);
extern void gt_ggc_mx_lang_decl (void *);
extern void gt_ggc_mx_alias_var_def (void *);
extern void gt_ggc_mx_lang_type (void *);
extern void gt_ggc_mx_die_struct (void *);
extern void gt_ggc_mx_edge_def (void *);
extern void gt_ggc_mx_ptr_info_def (void *);
extern void gt_ggc_mx_real_value (void *);
extern void gt_ggc_mx_tree_ann_d (void *);
extern void gt_ggc_mx_convert_optab (void *);
extern void gt_ggc_mx_optab (void *);
extern void gt_ggc_mx_basic_block_def (void *);
extern void gt_ggc_mx_reg_attrs (void *);
extern void gt_ggc_mx_mem_attrs (void *);
extern void gt_ggc_mx_language_function (void *);
extern void gt_ggc_mx_temp_slot (void *);
extern void gt_ggc_mx_varray_head_tag (void *);
extern void gt_ggc_mx_initial_value_struct (void *);
extern void gt_ggc_mx_varasm_status (void *);
extern void gt_ggc_mx_stmt_status (void *);
extern void gt_ggc_mx_eh_status (void *);
extern void gt_ggc_mx_function (void *);
extern void gt_ggc_mx_expr_status (void *);
extern void gt_ggc_mx_emit_status (void *);
extern void gt_ggc_mx_sequence_stack (void *);
extern void gt_ggc_mx_var_refs_queue (void *);
extern void gt_ggc_mx_bitmap_head_def (void *);
extern void gt_ggc_mx_bitmap_element_def (void *);
extern void gt_ggc_mx_stack_local_entry (void *);
extern void gt_ggc_mx_machine_function (void *);
extern void gt_ggc_mx_answer (void *);
extern void gt_ggc_mx_cpp_macro (void *);
extern void gt_ggc_mx_cpp_token (void *);
extern void gt_ggc_mx_rtvec_def (void *);
extern void gt_ggc_mx_rtx_def (void *);
extern void gt_ggc_mx_location_s (void *);
extern void gt_ggc_m_II17splay_tree_node_s (void *);
extern void gt_ggc_m_SP9tree_node17splay_tree_node_s (void *);
extern void gt_ggc_m_P13alias_var_def15varray_head_tag (void *);
extern void gt_ggc_m_P15throw_stmt_node4htab (void *);
extern void gt_ggc_m_P23constant_descriptor_rtx4htab (void *);
extern void gt_ggc_m_P24constant_descriptor_tree4htab (void *);
extern void gt_ggc_m_P14in_named_entry4htab (void *);
extern void gt_ggc_m_P9type_hash4htab (void *);
extern void gt_ggc_m_P13ehl_map_entry4htab (void *);
extern void gt_ggc_m_P9tree_node4htab (void *);
extern void gt_ggc_m_P9reg_attrs4htab (void *);
extern void gt_ggc_m_P9mem_attrs4htab (void *);
extern void gt_ggc_m_P7rtx_def4htab (void *);
extern void gt_ggc_m_SP9tree_node12splay_tree_s (void *);
extern void gt_ggc_m_P16var_loc_list_def4htab (void *);
extern void gt_ggc_m_P10die_struct4htab (void *);
extern void gt_ggc_m_P20indirect_string_node4htab (void *);
extern void gt_ggc_m_P19cgraph_varpool_node4htab (void *);
extern void gt_ggc_m_P11cgraph_node4htab (void *);
extern void gt_ggc_m_P15alias_set_entry15varray_head_tag (void *);
extern void gt_ggc_m_II12splay_tree_s (void *);
extern void gt_ggc_m_P9temp_slot15varray_head_tag (void *);
extern void gt_pch_nx_align_stack (void *);
extern void gt_pch_nx_c_scope (void *);
extern void gt_pch_nx_c_binding (void *);
extern void gt_pch_nx_aterm_list_a (void *);
extern void gt_pch_nx_aterm_ (void *);
extern void gt_pch_nx_throw_stmt_node (void *);
extern void gt_pch_nx_edge_prediction (void *);
extern void gt_pch_nx_v_must_def_optype_d (void *);
extern void gt_pch_nx_vuse_optype_d (void *);
extern void gt_pch_nx_v_may_def_optype_d (void *);
extern void gt_pch_nx_use_optype_d (void *);
extern void gt_pch_nx_def_optype_d (void *);
extern void gt_pch_nx_dataflow_d (void *);
extern void gt_pch_nx_constant_descriptor_rtx (void *);
extern void gt_pch_nx_constant_descriptor_tree (void *);
extern void gt_pch_nx_in_named_entry (void *);
extern void gt_pch_nx_rtx_constant_pool (void *);
extern void gt_pch_nx_type_hash (void *);
extern void gt_pch_nx_string_pool_data (void *);
extern void gt_pch_nx_goto_fixup (void *);
extern void gt_pch_nx_label_chain (void *);
extern void gt_pch_nx_nesting (void *);
extern void gt_pch_nx_case_node (void *);
extern void gt_pch_nx_eh_region (void *);
extern void gt_pch_nx_ehl_map_entry (void *);
extern void gt_pch_nx_var_loc_list_def (void *);
extern void gt_pch_nx_var_loc_node (void *);
extern void gt_pch_nx_limbo_die_struct (void *);
extern void gt_pch_nx_dw_ranges_struct (void *);
extern void gt_pch_nx_pubname_struct (void *);
extern void gt_pch_nx_dw_separate_line_info_struct (void *);
extern void gt_pch_nx_dw_line_info_struct (void *);
extern void gt_pch_nx_dw_attr_struct (void *);
extern void gt_pch_nx_dw_loc_list_struct (void *);
extern void gt_pch_nx_queued_reg_save (void *);
extern void gt_pch_nx_indirect_string_node (void *);
extern void gt_pch_nx_dw_loc_descr_struct (void *);
extern void gt_pch_nx_dw_fde_struct (void *);
extern void gt_pch_nx_dw_cfi_struct (void *);
extern void gt_pch_nx_typeinfo (void *);
extern void gt_pch_nx_alias_set_entry (void *);
extern void gt_pch_nx_c_switch (void *);
extern void gt_pch_nx_sorted_fields_type (void *);
extern void gt_pch_nx_cgraph_varpool_node (void *);
extern void gt_pch_nx_cgraph_edge (void *);
extern void gt_pch_nx_cgraph_node (void *);
extern void gt_pch_nx_bb_ann_d (void *);
extern void gt_pch_nx_reorder_block_def (void *);
extern void gt_pch_nx_et_node (void *);
extern void gt_pch_nx_loop (void *);
extern void gt_pch_nx_elt_loc_list (void *);
extern void gt_pch_nx_cselib_val_struct (void *);
extern void gt_pch_nx_elt_list (void *);
extern void gt_pch_nx_reg_info_def (void *);
extern void gt_pch_nx_lang_tree_node (void *);
extern void gt_pch_nx_value_set (void *);
extern void gt_pch_nx_tree_statement_list_node (void *);
extern void gt_pch_nx_lang_decl (void *);
extern void gt_pch_nx_alias_var_def (void *);
extern void gt_pch_nx_lang_type (void *);
extern void gt_pch_nx_die_struct (void *);
extern void gt_pch_nx_edge_def (void *);
extern void gt_pch_nx_ptr_info_def (void *);
extern void gt_pch_nx_real_value (void *);
extern void gt_pch_nx_tree_ann_d (void *);
extern void gt_pch_nx_convert_optab (void *);
extern void gt_pch_nx_optab (void *);
extern void gt_pch_nx_basic_block_def (void *);
extern void gt_pch_nx_reg_attrs (void *);
extern void gt_pch_nx_mem_attrs (void *);
extern void gt_pch_nx_language_function (void *);
extern void gt_pch_nx_temp_slot (void *);
extern void gt_pch_nx_varray_head_tag (void *);
extern void gt_pch_nx_initial_value_struct (void *);
extern void gt_pch_nx_varasm_status (void *);
extern void gt_pch_nx_stmt_status (void *);
extern void gt_pch_nx_eh_status (void *);
extern void gt_pch_nx_function (void *);
extern void gt_pch_nx_expr_status (void *);
extern void gt_pch_nx_emit_status (void *);
extern void gt_pch_nx_sequence_stack (void *);
extern void gt_pch_nx_var_refs_queue (void *);
extern void gt_pch_nx_bitmap_head_def (void *);
extern void gt_pch_nx_bitmap_element_def (void *);
extern void gt_pch_nx_stack_local_entry (void *);
extern void gt_pch_nx_machine_function (void *);
extern void gt_pch_nx_answer (void *);
extern void gt_pch_nx_cpp_macro (void *);
extern void gt_pch_nx_cpp_token (void *);
extern void gt_pch_nx_rtvec_def (void *);
extern void gt_pch_nx_rtx_def (void *);
extern void gt_pch_nx_location_s (void *);
extern void gt_pch_n_II17splay_tree_node_s (void *);
extern void gt_pch_n_SP9tree_node17splay_tree_node_s (void *);
extern void gt_pch_n_P13alias_var_def15varray_head_tag (void *);
extern void gt_pch_n_P15throw_stmt_node4htab (void *);
extern void gt_pch_n_P23constant_descriptor_rtx4htab (void *);
extern void gt_pch_n_P24constant_descriptor_tree4htab (void *);
extern void gt_pch_n_P14in_named_entry4htab (void *);
extern void gt_pch_n_P9type_hash4htab (void *);
extern void gt_pch_n_P13ehl_map_entry4htab (void *);
extern void gt_pch_n_P9tree_node4htab (void *);
extern void gt_pch_n_P9reg_attrs4htab (void *);
extern void gt_pch_n_P9mem_attrs4htab (void *);
extern void gt_pch_n_P7rtx_def4htab (void *);
extern void gt_pch_n_SP9tree_node12splay_tree_s (void *);
extern void gt_pch_n_P16var_loc_list_def4htab (void *);
extern void gt_pch_n_P10die_struct4htab (void *);
extern void gt_pch_n_P20indirect_string_node4htab (void *);
extern void gt_pch_n_P19cgraph_varpool_node4htab (void *);
extern void gt_pch_n_P11cgraph_node4htab (void *);
extern void gt_pch_n_P15alias_set_entry15varray_head_tag (void *);
extern void gt_pch_n_II12splay_tree_s (void *);
extern void gt_pch_n_P9temp_slot15varray_head_tag (void *);
extern void gt_pch_p_11align_stack
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_7c_scope
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9c_binding
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15throw_stmt_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15edge_prediction
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_19v_must_def_optype_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13vuse_optype_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18v_may_def_optype_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12use_optype_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12def_optype_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10dataflow_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_23constant_descriptor_rtx
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_24constant_descriptor_tree
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14in_named_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17rtx_constant_pool
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9type_hash
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16string_pool_data
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10goto_fixup
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11label_chain
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_7nesting
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9case_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9eh_region
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13ehl_map_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16var_loc_list_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12var_loc_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16limbo_die_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16dw_ranges_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14pubname_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_28dw_separate_line_info_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_19dw_line_info_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14dw_attr_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18dw_loc_list_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15queued_reg_save
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_20indirect_string_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_19dw_loc_descr_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13dw_fde_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13dw_cfi_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_8typeinfo
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15alias_set_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18sorted_fields_type
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_19cgraph_varpool_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11cgraph_edge
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11cgraph_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_8bb_ann_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12elt_loc_list
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17cselib_val_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_8elt_list
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14lang_tree_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_24tree_statement_list_node
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9lang_decl
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13alias_var_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9lang_type
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10die_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_8edge_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_12ptr_info_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10real_value
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10tree_ann_d
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13convert_optab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_5optab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15basic_block_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9reg_attrs
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9mem_attrs
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17language_function
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9temp_slot
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15varray_head_tag
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_20initial_value_struct
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_13varasm_status
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11stmt_status
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9eh_status
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_8function
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11expr_status
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_11emit_status
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14sequence_stack
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_14var_refs_queue
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_15bitmap_head_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_18bitmap_element_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_17stack_local_entry
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_16machine_function
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_6answer
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9cpp_macro
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9cpp_token
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_9rtvec_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_7rtx_def
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_10location_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_II17splay_tree_node_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_SP9tree_node17splay_tree_node_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P13alias_var_def15varray_head_tag
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P15throw_stmt_node4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P23constant_descriptor_rtx4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P24constant_descriptor_tree4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P14in_named_entry4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P9type_hash4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P13ehl_map_entry4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P9tree_node4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P9reg_attrs4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P9mem_attrs4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P7rtx_def4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_SP9tree_node12splay_tree_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P16var_loc_list_def4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P10die_struct4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P20indirect_string_node4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P19cgraph_varpool_node4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P11cgraph_node4htab
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P15alias_set_entry15varray_head_tag
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_II12splay_tree_s
    (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_p_P9temp_slot15varray_head_tag
    (void *, void *, gt_pointer_operator, void *);
typedef void (*gt_note_pointers) (void *, void *, gt_pointer_operator,
      void *);
typedef void (*gt_handle_reorder) (void *, void *, gt_pointer_operator,
       void *);
extern int gt_pch_note_object (void *, void *, gt_note_pointers);
extern void gt_pch_note_reorder (void *, void *, gt_handle_reorder);
typedef void (*gt_pointer_walker) (void *);
struct ggc_root_tab {
  void *base;
  size_t nelt;
  size_t stride;
  gt_pointer_walker cb;
  gt_pointer_walker pchw;
};
extern const struct ggc_root_tab * const gt_ggc_rtab[];
extern const struct ggc_root_tab * const gt_ggc_deletable_rtab[];
extern const struct ggc_root_tab * const gt_pch_cache_rtab[];
extern const struct ggc_root_tab * const gt_pch_scalar_rtab[];
struct htab;
struct ggc_cache_tab {
  struct htab * *base;
  size_t nelt;
  size_t stride;
  gt_pointer_walker cb;
  gt_pointer_walker pchw;
  int (*marked_p) (const void *);
};
extern const struct ggc_cache_tab * const gt_ggc_cache_rtab[];
extern int ggc_set_mark (const void *);
extern int ggc_marked_p (const void *);
extern void ggc_mark_stringpool (void);
extern void ggc_mark_roots (void);
extern void gt_pch_save_stringpool (void);
extern void gt_pch_fixup_stringpool (void);
extern void gt_pch_restore_stringpool (void);
extern void gt_pch_p_S (void *, void *, gt_pointer_operator, void *);
extern void gt_pch_n_S (const void *);
extern void gt_ggc_m_S (void *);
extern void init_stringpool (void);
struct alloc_zone;
extern void init_ggc (void);
extern struct alloc_zone *new_ggc_zone (const char *);
extern void destroy_ggc_zone (struct alloc_zone *);
extern void ggc_push_context (void);
extern void ggc_pop_context (void);
struct ggc_pch_data;
extern struct ggc_pch_data *init_ggc_pch (void);
extern void ggc_pch_count_object (struct ggc_pch_data *, void *, size_t, unsigned char);
extern size_t ggc_pch_total_size (struct ggc_pch_data *);
extern void ggc_pch_this_base (struct ggc_pch_data *, void *);
extern char *ggc_pch_alloc_object (struct ggc_pch_data *, void *, size_t, unsigned char);
extern void ggc_pch_prepare_write (struct ggc_pch_data *, FILE *);
extern void ggc_pch_write_object (struct ggc_pch_data *, FILE *, void *,
      void *, size_t, unsigned char);
extern void ggc_pch_finish (struct ggc_pch_data *, FILE *);
extern void ggc_pch_read (FILE *, void *);
extern struct alloc_zone *garbage_zone;
extern struct alloc_zone *rtl_zone;
extern struct alloc_zone *tree_zone;
extern void *ggc_alloc_stat (size_t );
extern void *ggc_alloc_zone_stat (size_t, struct alloc_zone * );
extern void *ggc_alloc_typed_stat (enum gt_types_enum, size_t );
extern void *ggc_alloc_cleared_stat (size_t );
extern void *ggc_alloc_cleared_zone (size_t, struct alloc_zone * );
extern void *ggc_realloc_stat (void *, size_t );
extern void *ggc_calloc (size_t, size_t);
extern void ggc_free (void *);
extern void ggc_record_overhead (size_t, size_t );
extern void dump_ggc_loc_statistics (void);
extern void *ggc_splay_alloc (int, void *);
extern void ggc_splay_dont_free (void *, void *);
extern const char *ggc_alloc_string (const char *contents, int length);
extern void ggc_collect (void);
extern size_t ggc_get_size (const void *);
extern void gt_pch_save (FILE *f);
extern void gt_pch_restore (FILE *f);
typedef struct ggc_statistics
{
  int unused;
} ggc_statistics;
extern void ggc_print_common_statistics (FILE *, ggc_statistics *);
extern void ggc_print_statistics (void);
extern void stringpool_statistics (void);
extern int ggc_min_expand_heuristic (void);
extern int ggc_min_heapsize_heuristic (void);
extern void init_ggc_heuristics (void);
struct cgraph_local_info
{
  int self_insns;
  unsigned char local;
  unsigned char finalized;
  unsigned char inlinable;
  unsigned char disregard_inline_limits;
  unsigned char redefined_extern_inline;
};
struct cgraph_global_info
{
  struct cgraph_node *inlined_to;
  int insns;
  unsigned char inlined;
};
struct cgraph_rtl_info
{
   int preferred_incoming_stack_boundary;
   unsigned char const_function;
   unsigned char pure_function;
};
struct cgraph_node
{
  tree decl;
  struct cgraph_edge *callees;
  struct cgraph_edge *callers;
  struct cgraph_node *next;
  struct cgraph_node *previous;
  struct cgraph_node *origin;
  struct cgraph_node *nested;
  struct cgraph_node *next_nested;
  struct cgraph_node *next_needed;
  struct cgraph_node *next_clone;
  void * aux;
  struct cgraph_local_info local;
  struct cgraph_global_info global;
  struct cgraph_rtl_info rtl;
  int uid;
  unsigned char needed;
  unsigned char reachable;
  unsigned char analyzed;
  unsigned char output;
};
struct cgraph_edge
{
  struct cgraph_node *caller;
  struct cgraph_node *callee;
  struct cgraph_edge *next_caller;
  struct cgraph_edge *next_callee;
  tree call_expr;
  void * aux;
  const char *inline_failed;
};
struct cgraph_varpool_node
{
  tree decl;
  struct cgraph_varpool_node *next_needed;
  unsigned char needed;
  unsigned char finalized;
  unsigned char output;
};
extern struct cgraph_node *cgraph_nodes;
extern int cgraph_n_nodes;
extern int cgraph_max_uid;
extern unsigned char cgraph_global_info_ready;
extern struct cgraph_node *cgraph_nodes_queue;
extern FILE *cgraph_dump_file;
extern int cgraph_varpool_n_nodes;
extern struct cgraph_varpool_node *cgraph_varpool_nodes_queue;
void dump_cgraph (FILE *);
void dump_cgraph_node (FILE *, struct cgraph_node *);
void cgraph_remove_edge (struct cgraph_edge *);
void cgraph_remove_node (struct cgraph_node *);
struct cgraph_edge *cgraph_create_edge (struct cgraph_node *,
     struct cgraph_node *,
            tree);
struct cgraph_node *cgraph_node (tree decl);
struct cgraph_edge *cgraph_edge (struct cgraph_node *, tree call_expr);
unsigned char cgraph_calls_p (tree, tree);
struct cgraph_local_info *cgraph_local_info (tree);
struct cgraph_global_info *cgraph_global_info (tree);
struct cgraph_rtl_info *cgraph_rtl_info (tree);
const char * cgraph_node_name (struct cgraph_node *);
struct cgraph_edge * cgraph_clone_edge (struct cgraph_edge *, struct cgraph_node *, tree);
struct cgraph_node * cgraph_clone_node (struct cgraph_node *);
struct cgraph_varpool_node *cgraph_varpool_node (tree decl);
void cgraph_varpool_mark_needed_node (struct cgraph_varpool_node *);
void cgraph_varpool_finalize_decl (tree);
unsigned char cgraph_varpool_assemble_pending_decls (void);
void cgraph_redirect_edge_callee (struct cgraph_edge *, struct cgraph_node *);
unsigned char cgraph_function_possibly_inlined_p (tree);
unsigned char cgraph_assemble_pending_functions (void);
void cgraph_finalize_function (tree, unsigned char);
void cgraph_finalize_compilation_unit (void);
void cgraph_create_edges (struct cgraph_node *, tree);
void cgraph_optimize (void);
void cgraph_mark_needed_node (struct cgraph_node *);
void cgraph_mark_reachable_node (struct cgraph_node *);
unsigned char cgraph_inline_p (struct cgraph_edge *, const char **reason);
unsigned char cgraph_preserve_function_body_p (tree);
void verify_cgraph (void);
void verify_cgraph_node (struct cgraph_node *);
void cgraph_mark_inline_edge (struct cgraph_edge *e);
void cgraph_clone_inlined_nodes (struct cgraph_edge *e, unsigned char duplicate);
void cgraph_build_static_cdtor (char which, tree body);
static tree mf_build_string (const char *string);
static tree mf_varname_tree (tree);
static tree mf_file_function_line_tree (location_t);
static void mf_decl_cache_locals (void);
static void mf_decl_clear_locals (void);
static void mf_xform_derefs (void);
static void execute_mudflap_function_ops (void);
static void mf_xform_decls (tree, tree);
static tree mx_xfn_xform_decls (tree *, int *, void *);
static void mx_register_decls (tree, tree *);
static void execute_mudflap_function_decls (void);
static tree
mf_build_string (const char *string1)
{
  size_t len = strlen (string1);
  tree result = mf_mark (build_string (len + 1, string1));
  ((result)->common.type)
      = build_array_type (integer_types[itk_char],
                          build_index_type (build_int_2_wide ((unsigned long) (len), (long) (0))));
  ((result)->common.constant_flag) = 1;
  ((result)->common.invariant_flag) = 1;
  ((result)->common.readonly_flag) = 1;
  ((result)->common.static_flag) = 1;
  result = build1_stat (ADDR_EXPR,build_pointer_type (integer_types[itk_char]),result );
  return mf_mark (result);
}
static tree
mf_varname_tree (tree decl)
{
  static pretty_printer buf_rec;
  static int initialized = 0;
  pretty_printer *buf = & buf_rec;
  const char *buf_contents;
  tree result;
  if (decl == (tree) ((void *)0))
    fancy_abort ("gcc.c", 94154, "?");
  if (!initialized)
    {
      pp_construct (buf, ((void *)0), 0);
      initialized = 1;
    }
  pp_base_clear_output_area ((buf));
  {
    expanded_location xloc = (((decl)->decl.locus));
    const char *sourcefile;
    unsigned sourceline = xloc.line;
    sourcefile = xloc.file;
    if (sourcefile == ((void *)0) && current_function_decl != (tree) ((void *)0))
      sourcefile = (((((current_function_decl)->decl.locus))).file);
    if (sourcefile == ((void *)0))
      sourcefile = "<unknown file>";
    pp_base_string ((buf), sourcefile);
    if (sourceline != 0)
      {
        pp_base_string ((buf), ":");
        do { sprintf ((buf)->buffer->digit_buffer, "%d", sourceline); pp_base_string ((buf), (buf)->buffer->digit_buffer); } while (0);
      }
  }
  if (current_function_decl != (tree) ((void *)0))
    {
      pp_base_string ((buf), " (");
      {
        const char *funcname = ((void *)0);
        if (((current_function_decl)->decl.name))
          funcname = lang_hooks.decl_printable_name (current_function_decl, 1);
        if (funcname == ((void *)0))
          funcname = "anonymous fn";
        pp_base_string ((buf), funcname);
      }
      pp_base_string ((buf), ") ");
    }
  else
    pp_base_string ((buf), " ");
  {
    const char *declname = ((void *)0);
    if (strcmp ("GNU C++", lang_hooks.name) == 0 &&
        ((decl)->decl.name) != ((void *)0))
      {
        declname = cplus_demangle (((const char *) (((decl)->decl.name))->identifier.id.str),
                                   (1 << 8) | (1 << 3));
      }
    if (declname == ((void *)0))
      declname = lang_hooks.decl_printable_name (decl, 3);
    if (declname == ((void *)0))
      declname = "<unnamed variable>";
    pp_base_string ((buf), declname);
  }
  buf_contents = pp_base_formatted_text (buf);
  result = mf_build_string (buf_contents);
  pp_base_clear_output_area ((buf));
  return result;
}
static tree
mf_file_function_line_tree (location_t location)
{
  expanded_location xloc = (location);
  const char *file = ((void *)0), *colon, *line, *op, *name, *cp;
  char linebuf[18];
  char *string1;
  tree result;
  if (xloc.file == ((void *)0) && current_function_decl != (tree) ((void *)0))
    xloc.file = (((((current_function_decl)->decl.locus))).file);
  if (xloc.file == ((void *)0))
    xloc.file = "<unknown file>";
  if (xloc.line > 0)
    {
      sprintf (linebuf, "%d", xloc.line);
      colon = ":";
      line = linebuf;
    }
  else
    colon = line = "";
  name = lang_hooks.decl_printable_name (current_function_decl, 1);
  if (name)
    {
      op = " (";
      cp = ")";
    }
  else
    op = name = cp = "";
  string1 = concat (file, colon, line, op, name, cp, ((void *)0));
  result = mf_build_string (string1);
  free (string1);
  return result;
}
static tree mf_uintptr_type;
static tree mf_cache_struct_type;
static tree mf_cache_structptr_type;
static tree mf_cache_array_decl;
static tree mf_cache_shift_decl;
static tree mf_cache_mask_decl;
static tree mf_cache_shift_decl_l;
static tree mf_cache_mask_decl_l;
static tree mf_check_fndecl;
static tree mf_register_fndecl;
static tree mf_unregister_fndecl;
static tree
mf_make_builtin (enum tree_code category, const char *name, tree type)
{
  tree decl = mf_mark (build_decl_stat (category,get_identifier (name),type ));
  ((decl)->common.public_flag) = 1;
  ((decl)->decl.external_flag) = 1;
  lang_hooks.decls.pushdecl (decl);
  return decl;
}
static tree
mf_make_mf_cache_struct_type (tree field_type)
{
  tree fieldlo = build_decl_stat (FIELD_DECL,get_identifier ("low"),field_type );
  tree fieldhi = build_decl_stat (FIELD_DECL,get_identifier ("high"),field_type );
  tree struct_type = make_node_stat (RECORD_TYPE );
  ((fieldlo)->decl.context) = struct_type;
  ((fieldhi)->decl.context) = struct_type;
  ((fieldlo)->common.chain) = fieldhi;
  ((struct_type)->type.values) = fieldlo;
  ((struct_type)->type.name) = get_identifier ("__mf_cache");
  layout_type (struct_type);
  return struct_type;
}
void
mudflap_init (void)
{
  static unsigned char done = 0;
  tree mf_const_string_type;
  tree mf_cache_array_type;
  tree mf_check_register_fntype;
  tree mf_unregister_fntype;
  if (done)
    return;
  done = 1;
  mf_uintptr_type = lang_hooks.types.type_for_mode (ptr_mode,
                        1);
  mf_const_string_type
    = build_pointer_type (build_qualified_type
     (integer_types[itk_char], 0x1));
  mf_cache_struct_type = mf_make_mf_cache_struct_type (mf_uintptr_type);
  mf_cache_structptr_type = build_pointer_type (mf_cache_struct_type);
  mf_cache_array_type = build_array_type (mf_cache_struct_type, 0);
  mf_check_register_fntype =
    build_function_type (global_trees[TI_VOID_TYPE], tree_cons_stat (0,global_trees[TI_PTR_TYPE],tree_cons_stat (0,global_trees[TI_SIZE_TYPE],tree_cons_stat (0,integer_types[itk_int],tree_cons_stat (0,mf_const_string_type,global_trees[TI_VOID_LIST_NODE] ) ) ) ))
                                              ;
  mf_unregister_fntype =
    build_function_type (global_trees[TI_VOID_TYPE], tree_cons_stat (0,global_trees[TI_PTR_TYPE],tree_cons_stat (0,global_trees[TI_SIZE_TYPE],tree_cons_stat (0,integer_types[itk_int],global_trees[TI_VOID_LIST_NODE] ) ) ))
                        ;
  mf_cache_array_decl = mf_make_builtin (VAR_DECL, "__mf_lookup_cache",
      mf_cache_array_type);
  mf_cache_shift_decl = mf_make_builtin (VAR_DECL, "__mf_lc_shift",
      integer_types[itk_unsigned_char]);
  mf_cache_mask_decl = mf_make_builtin (VAR_DECL, "__mf_lc_mask",
     mf_uintptr_type);
  mf_check_fndecl = mf_make_builtin (FUNCTION_DECL, "__mf_check",
         mf_check_register_fntype);
  mf_register_fndecl = mf_make_builtin (FUNCTION_DECL, "__mf_register",
     mf_check_register_fntype);
  mf_unregister_fndecl = mf_make_builtin (FUNCTION_DECL, "__mf_unregister",
       mf_unregister_fntype);
}
static void
execute_mudflap_function_ops (void)
{
  if (mf_marked_p (current_function_decl))
    return;
  push_gimplify_context ();
  if (! flag_mudflap_threads)
    mf_decl_cache_locals ();
  mf_xform_derefs ();
  if (! flag_mudflap_threads)
    mf_decl_clear_locals ();
  pop_gimplify_context (((void *)0));
}
static void
mf_decl_cache_locals (void)
{
  tree t, shift_init_stmts, mask_init_stmts;
  tree_stmt_iterator tsi;
  mf_cache_shift_decl_l
    = mf_mark (create_tmp_var (((mf_cache_shift_decl)->common.type),
                               "__mf_lookup_shift_l"));
  mf_cache_mask_decl_l
    = mf_mark (create_tmp_var (((mf_cache_mask_decl)->common.type),
                               "__mf_lookup_mask_l"));
  t = build (MODIFY_EXPR, ((mf_cache_shift_decl_l)->common.type),
             mf_cache_shift_decl_l, mf_cache_shift_decl);
  annotate_with_locus (t, ((current_function_decl)->decl.locus));
  gimplify_to_stmt_list (&t);
  shift_init_stmts = t;
  t = build (MODIFY_EXPR, ((mf_cache_mask_decl_l)->common.type),
             mf_cache_mask_decl_l, mf_cache_mask_decl);
  annotate_with_locus (t, ((current_function_decl)->decl.locus));
  gimplify_to_stmt_list (&t);
  mask_init_stmts = t;
  for (tsi = tsi_start (shift_init_stmts);
       ! tsi_end_p (tsi);
       tsi_next (&tsi))
    insert_edge_copies (tsi_stmt (tsi), ENTRY_BLOCK_PTR);
  for (tsi = tsi_start (mask_init_stmts);
       ! tsi_end_p (tsi);
       tsi_next (&tsi))
    insert_edge_copies (tsi_stmt (tsi), ENTRY_BLOCK_PTR);
  bsi_commit_edge_inserts (((void *)0));
}
static void
mf_decl_clear_locals (void)
{
  mf_cache_shift_decl_l = (tree) ((void *)0);
  mf_cache_mask_decl_l = (tree) ((void *)0);
}
static void
mf_build_check_statement_for (tree addr, tree size,
         block_stmt_iterator *instr_bsi,
                              location_t *locus, tree dirflag)
{
  tree_stmt_iterator head, tsi;
  tree ptrtype = ((addr)->common.type);
  block_stmt_iterator bsi;
  basic_block cond_bb, then_bb, join_bb;
  edge e;
  tree cond, t, u, v, l1, l2;
  tree mf_value;
  tree mf_base;
  tree mf_elem;
  l1 = create_artificial_label ();
  l2 = create_artificial_label ();
  cond_bb = bb_for_stmt (bsi_stmt (*instr_bsi));
  bsi = *instr_bsi;
  bsi_prev (&bsi);
  if (! bsi_end_p (bsi))
    {
      e = split_block (cond_bb, bsi_stmt (bsi));
      cond_bb = e->src;
      join_bb = e->dest;
    }
  else
    {
      join_bb = cond_bb;
      cond_bb = create_empty_bb (join_bb->prev_bb);
      e = make_edge (cond_bb, join_bb, 0);
    }
  e->flags = 2048;
  then_bb = create_empty_bb (cond_bb);
  make_edge (cond_bb, then_bb, 1024);
  make_edge (then_bb, join_bb, 1);
  predict_edge_def (then_bb->pred, PRED_MUDFLAP, NOT_TAKEN);
  if (dom_computed[CDI_DOMINATORS] >= DOM_CONS_OK)
    {
      set_immediate_dominator (CDI_DOMINATORS, then_bb, cond_bb);
      set_immediate_dominator (CDI_DOMINATORS, join_bb, cond_bb);
    }
  mf_value = create_tmp_var (ptrtype, "__mf_value");
  mf_elem = create_tmp_var (mf_cache_structptr_type, "__mf_elem");
  mf_base = create_tmp_var (mf_uintptr_type, "__mf_base");
  t = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], mf_value, unshare_expr (addr));
  ((t)->exp.locus = (locus));
  gimplify_to_stmt_list (&t);
  head = tsi_start (t);
  tsi = tsi_last (t);
  t = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], mf_base,
             build1_stat (NOP_EXPR,mf_uintptr_type,mf_value ));
  ((t)->exp.locus = (locus));
  gimplify_to_stmt_list (&t);
  tsi_link_after (&tsi, t, TSI_CONTINUE_LINKING);
  t = build (RSHIFT_EXPR, mf_uintptr_type, mf_base,
             (flag_mudflap_threads ? mf_cache_shift_decl : mf_cache_shift_decl_l));
  t = build (BIT_AND_EXPR, mf_uintptr_type, t,
             (flag_mudflap_threads ? mf_cache_mask_decl : mf_cache_mask_decl_l));
  t = build (ARRAY_REF,
             ((((mf_cache_array_decl)->common.type))->common.type),
             mf_cache_array_decl, t, (tree) ((void *)0), (tree) ((void *)0));
  t = build1_stat (ADDR_EXPR,mf_cache_structptr_type,t );
  t = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], mf_elem, t);
  ((t)->exp.locus = (locus));
  gimplify_to_stmt_list (&t);
  tsi_link_after (&tsi, t, TSI_CONTINUE_LINKING);
  t = build (COMPONENT_REF, mf_uintptr_type,
             build1_stat (INDIRECT_REF,mf_cache_struct_type,mf_elem ),
             ((mf_cache_struct_type)->type.values), (tree) ((void *)0));
  t = build (GT_EXPR, global_trees[TI_BOOLEAN_TYPE], t, mf_base);
  u = build (COMPONENT_REF, mf_uintptr_type,
             build1_stat (INDIRECT_REF,mf_cache_struct_type,mf_elem ),
             ((((mf_cache_struct_type)->type.values))->common.chain), (tree) ((void *)0));
  v = convert (mf_uintptr_type,
        size_binop (MINUS_EXPR, size, global_trees[TI_SIZE_ONE]));
  v = fold (build (PLUS_EXPR, mf_uintptr_type, mf_base, v));
  u = build (LT_EXPR, global_trees[TI_BOOLEAN_TYPE], u, v);
  t = build (TRUTH_OR_EXPR, global_trees[TI_BOOLEAN_TYPE], t, u);
  cond = create_tmp_var (global_trees[TI_BOOLEAN_TYPE], "__mf_unlikely_cond");
  t = build (MODIFY_EXPR, global_trees[TI_BOOLEAN_TYPE], cond, t);
  gimplify_to_stmt_list (&t);
  tsi_link_after (&tsi, t, TSI_CONTINUE_LINKING);
  t = build (COND_EXPR, global_trees[TI_VOID_TYPE], cond,
      build (GOTO_EXPR, global_trees[TI_VOID_TYPE], tree_block_label (then_bb)),
      build (GOTO_EXPR, global_trees[TI_VOID_TYPE], tree_block_label (join_bb)));
  ((t)->exp.locus = (locus));
  tsi_link_after (&tsi, t, TSI_CONTINUE_LINKING);
  bsi = bsi_last (cond_bb);
  for (tsi = head; ! tsi_end_p (tsi); tsi_next (&tsi))
    bsi_insert_after (&bsi, tsi_stmt (tsi), BSI_CONTINUE_LINKING);
  u = tree_cons_stat ((tree) ((void *)0),mf_file_function_line_tree (locus == ((void *)0) ? unknown_location : *locus),(tree) ((void *)0) )
             ;
  u = tree_cons_stat ((tree) ((void *)0),dirflag,u );
  u = tree_cons_stat ((tree) ((void *)0),size,u );
  u = tree_cons_stat ((tree) ((void *)0),mf_value,u );
  t = build_function_call_expr (mf_check_fndecl, u);
  gimplify_to_stmt_list (&t);
  head = tsi_start (t);
  tsi = tsi_last (t);
  if (! flag_mudflap_threads)
    {
      t = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE],
                 mf_cache_shift_decl_l, mf_cache_shift_decl);
      tsi_link_after (&tsi, t, TSI_CONTINUE_LINKING);
      t = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE],
                 mf_cache_mask_decl_l, mf_cache_mask_decl);
      tsi_link_after (&tsi, t, TSI_CONTINUE_LINKING);
    }
  bsi = bsi_start (then_bb);
  for (tsi = head; ! tsi_end_p (tsi); tsi_next (&tsi))
    bsi_insert_after (&bsi, tsi_stmt (tsi), BSI_CONTINUE_LINKING);
  *instr_bsi = bsi_start (join_bb);
  bsi_next (instr_bsi);
}
static void
mf_xform_derefs_1 (block_stmt_iterator *iter, tree *tp,
                   location_t *locus, tree dirflag)
{
  tree type, ptr_type, addr, size, t;
  if (dirflag == global_trees[TI_INTEGER_ZERO] && flag_mudflap_ignore_reads)
    return;
  t = *tp;
  type = ((t)->common.type);
  size = ((type)->type.size_unit);
  switch (((enum tree_code) (t)->common.code))
    {
    case ARRAY_REF:
      {
        tree op0, op1;
        op0 = ((t)->exp.operands[0]);
        op1 = ((t)->exp.operands[1]);
        while (((enum tree_code) (op1)->common.code) == INTEGER_CST)
          {
            tree dom = ((((op0)->common.type))->type.values);
     if (!dom
  || (! ((dom)->type.minval)
      || ! really_constant_p (((dom)->type.minval)))
  || (! ((dom)->type.maxval)
      || ! really_constant_p (((dom)->type.maxval)))
  || (tree_int_cst_lt (op1, ((dom)->type.minval))
      || tree_int_cst_lt (((dom)->type.maxval), op1)))
              break;
            if (((enum tree_code) (op0)->common.code) == VAR_DECL && !((op0)->decl.external_flag))
              return;
            if (((enum tree_code) (op0)->common.code) != ARRAY_REF)
              break;
            op1 = ((op0)->exp.operands[1]);
            op0 = ((op0)->exp.operands[0]);
          }
        ptr_type = build_pointer_type (type);
        addr = build1_stat (ADDR_EXPR,ptr_type,t );
      }
      break;
    case INDIRECT_REF:
      addr = ((t)->exp.operands[0]);
      ptr_type = ((addr)->common.type);
      break;
    case ARRAY_RANGE_REF:
      warning ("mudflap checking not yet implemented for ARRAY_RANGE_REF");
      return;
    case COMPONENT_REF:
      {
        tree field;
        if (((enum tree_code) (((t)->exp.operands[0]))->common.code) != INDIRECT_REF)
          return;
        field = ((t)->exp.operands[1]);
        if (((field)->decl.result))
          {
     if (((enum tree_code) (((field)->decl.size_unit))->common.code) == INTEGER_CST)
       size = ((field)->decl.size_unit);
            addr = ((((t)->exp.operands[0]))->exp.operands[0]);
            addr = fold_convert (global_trees[TI_PTR_TYPE], addr);
            addr = fold (build (PLUS_EXPR, global_trees[TI_PTR_TYPE],
                                addr, fold_convert (global_trees[TI_PTR_TYPE],
          byte_position (field))));
          }
        else
          {
            ptr_type = build_pointer_type (type);
            addr = build1_stat (ADDR_EXPR,ptr_type,t );
          }
      }
      break;
    case BIT_FIELD_REF:
      {
        tree ofs, rem, bpu;
        if (((enum tree_code) (((t)->exp.operands[0]))->common.code) != INDIRECT_REF)
          return;
        bpu = size_int_wide ((long) (8), BITSIZETYPE);
        ofs = convert (sizetype_tab[(int) BITSIZETYPE], ((t)->exp.operands[2]));
        rem = size_binop (TRUNC_MOD_EXPR, ofs, bpu);
        ofs = size_binop (TRUNC_DIV_EXPR, ofs, bpu);
        size = convert (sizetype_tab[(int) BITSIZETYPE], ((t)->exp.operands[1]));
        size = size_binop (PLUS_EXPR, size, rem);
        size = size_binop (CEIL_DIV_EXPR, size, bpu);
        size = convert (sizetype_tab[(int) SIZETYPE], size);
        addr = ((((t)->exp.operands[0]))->exp.operands[0]);
        addr = convert (global_trees[TI_PTR_TYPE], addr);
        addr = fold (build (PLUS_EXPR, global_trees[TI_PTR_TYPE], addr, ofs));
      }
      break;
    default:
      return;
    }
  mf_build_check_statement_for (addr, size, iter, locus, dirflag);
}
static void
mf_xform_derefs (void)
{
  basic_block bb, next;
  block_stmt_iterator i;
  int saved_last_basic_block = last_basic_block;
  bb = ENTRY_BLOCK_PTR ->next_bb;
  do
    {
      next = bb->next_bb;
      for (i = bsi_start (bb); !bsi_end_p (i); bsi_next (&i))
 {
   tree s = bsi_stmt (i);
   switch (((enum tree_code) (s)->common.code))
     {
     case MODIFY_EXPR:
       mf_xform_derefs_1 (&i, &((s)->exp.operands[0]), ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (s)->common.code))])) != 0) ? (s)->exp.locus : (location_t *)((void *)0)),
     global_trees[TI_INTEGER_ONE]);
       mf_xform_derefs_1 (&i, &((s)->exp.operands[1]), ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (s)->common.code))])) != 0) ? (s)->exp.locus : (location_t *)((void *)0)),
     global_trees[TI_INTEGER_ZERO]);
       break;
     case RETURN_EXPR:
       if (((s)->exp.operands[0]) != (tree) ((void *)0))
  {
    if (((enum tree_code) (((s)->exp.operands[0]))->common.code) == MODIFY_EXPR)
      mf_xform_derefs_1 (&i, &((((s)->exp.operands[0]))->exp.operands[1]),
           ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (s)->common.code))])) != 0) ? (s)->exp.locus : (location_t *)((void *)0)), global_trees[TI_INTEGER_ZERO]);
    else
      mf_xform_derefs_1 (&i, &((s)->exp.operands[0]), ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (s)->common.code))])) != 0) ? (s)->exp.locus : (location_t *)((void *)0)),
           global_trees[TI_INTEGER_ZERO]);
  }
       break;
     default:
       ;
     }
 }
      bb = next;
    }
  while (bb && bb->index <= saved_last_basic_block);
}
static void
execute_mudflap_function_decls (void)
{
  if (mf_marked_p (current_function_decl))
    return;
  push_gimplify_context ();
  mf_xform_decls (((current_function_decl)->decl.saved_tree),
                  ((current_function_decl)->decl.arguments));
  pop_gimplify_context (((void *)0));
}
struct mf_xform_decls_data
{
  tree param_decls;
};
static void
mx_register_decls (tree decl, tree *stmt_list)
{
  tree finally_stmts = (tree) ((void *)0);
  tree_stmt_iterator initially_stmts = tsi_start (*stmt_list);
  while (decl != (tree) ((void *)0))
    {
      if ((((enum tree_code) (decl)->common.code) == VAR_DECL || ((enum tree_code) (decl)->common.code) == PARM_DECL)
   && ! ((decl)->decl.external_flag)
   && ! ((decl)->common.static_flag)
   && ((decl)->common.addressable_flag)
   && ((((((decl)->common.type))->type.size) != (tree) ((void *)0)) || (((enum tree_code) (((decl)->common.type))->common.code) == VOID_TYPE))
   && ! mf_marked_p (decl))
        {
          tree size = (tree) ((void *)0), variable_name;
          tree unregister_fncall, unregister_fncall_params;
          tree register_fncall, register_fncall_params;
          if (((decl)->decl.defer_output))
            {
              tree stack_alloc_call = (tree) ((void *)0);
              while(! tsi_end_p (initially_stmts))
                {
                  tree t = tsi_stmt (initially_stmts);
                  tree call = (tree) ((void *)0);
                  if (((enum tree_code) (t)->common.code) == CALL_EXPR)
                    call = t;
                  else if (((enum tree_code) (t)->common.code) == MODIFY_EXPR &&
                           ((enum tree_code) (((t)->exp.operands[1]))->common.code) == CALL_EXPR)
                    call = ((t)->exp.operands[1]);
                  else if (((enum tree_code) (t)->common.code) == TRY_FINALLY_EXPR)
                    {
                      initially_stmts = tsi_start (((t)->exp.operands[0]));
                    }
                  if (call != (tree) ((void *)0))
                    {
                      if (((enum tree_code) (((call)->exp.operands[0]))->common.code) == ADDR_EXPR &&
                          ((((call)->exp.operands[0]))->exp.operands[0]) ==
      implicit_built_in_decls [BUILT_IN_STACK_ALLOC])
                        {
                          tree stack_alloc_args = ((call)->exp.operands[1]);
                          tree stack_alloc_op1 = ((stack_alloc_args)->list.value);
                          tree stack_alloc_op2 = ((((stack_alloc_args)->common.chain))->list.value);
                          if (((enum tree_code) (stack_alloc_op1)->common.code) == ADDR_EXPR &&
                              ((stack_alloc_op1)->exp.operands[0]) == decl)
                            {
                              size = stack_alloc_op2;
                              stack_alloc_call = call;
                              tsi_next (&initially_stmts);
                              break;
                            }
                        }
                    }
                  tsi_next (&initially_stmts);
                }
              if (stack_alloc_call == (tree) ((void *)0))
                {
                  warning ("mudflap cannot handle variable-sized declaration `%s'",
                         ((const char *) (((decl)->decl.name))->identifier.id.str));
                  break;
                }
            }
          else
            {
              size = convert (global_trees[TI_SIZE_TYPE], ((((decl)->common.type))->type.size_unit));
            }
          unregister_fncall_params =
            tree_cons_stat ((tree) ((void *)0),convert (global_trees[TI_PTR_TYPE], mf_mark (build1_stat (ADDR_EXPR,build_pointer_type (((decl)->common.type)),decl ))),tree_cons_stat ((tree) ((void *)0),size,tree_cons_stat ((tree) ((void *)0),build_int_2_wide ((unsigned long) (3), (long) (0)),(tree) ((void *)0) ) ) )
                                                         ;
          unregister_fncall = build_function_call_expr (mf_unregister_fndecl,
                                                        unregister_fncall_params);
          variable_name = mf_varname_tree (decl);
          register_fncall_params =
            tree_cons_stat ((tree) ((void *)0),convert (global_trees[TI_PTR_TYPE], mf_mark (build1_stat (ADDR_EXPR,build_pointer_type (((decl)->common.type)),decl ))),tree_cons_stat ((tree) ((void *)0),size,tree_cons_stat ((tree) ((void *)0),build_int_2_wide ((unsigned long) (3), (long) (0)),tree_cons_stat ((tree) ((void *)0),variable_name,(tree) ((void *)0) ) ) ) )
                                                                     ;
          register_fncall = build_function_call_expr (mf_register_fndecl,
                                                      register_fncall_params);
          gimplify_stmt (&register_fncall);
          gimplify_stmt (&unregister_fncall);
          if (tsi_end_p (initially_stmts))
            internal_error ("mudflap ran off end of BIND_EXPR body");
          tsi_link_before (&initially_stmts, register_fncall, TSI_SAME_STMT);
          append_to_statement_list (unregister_fncall, &finally_stmts);
          mf_mark (decl);
        }
      decl = ((decl)->common.chain);
    }
  if (finally_stmts != (tree) ((void *)0))
    {
      tree t = build (TRY_FINALLY_EXPR, global_trees[TI_VOID_TYPE],
                      *stmt_list, finally_stmts);
      *stmt_list = ((void *)0);
      append_to_statement_list (t, stmt_list);
    }
}
static tree
mx_xfn_xform_decls (tree *t, int *continue_p, void *data)
{
  struct mf_xform_decls_data* d = (struct mf_xform_decls_data*) data;
  if (*t == (tree) ((void *)0) || *t == global_trees[TI_ERROR_MARK])
    {
      *continue_p = 0;
      return (tree) ((void *)0);
    }
  *continue_p = 1;
  switch (((enum tree_code) (*t)->common.code))
    {
    case BIND_EXPR:
      {
        mx_register_decls (d->param_decls, &((((*t))->exp.operands[1])));
        d->param_decls = (tree) ((void *)0);
        mx_register_decls (((((*t))->exp.operands[0])), &((((*t))->exp.operands[1])));
      }
      break;
    default:
      break;
    }
  return ((void *)0);
}
static void
mf_xform_decls (tree fnbody, tree fnparams)
{
  struct mf_xform_decls_data d;
  d.param_decls = fnparams;
  walk_tree_without_duplicates (&fnbody, mx_xfn_xform_decls, &d);
}
static htab_t marked_trees = ((void *)0);
tree
mf_mark (tree t)
{
  void **slot;
  if (marked_trees == ((void *)0))
    marked_trees = htab_create_alloc (31, htab_hash_pointer, htab_eq_pointer, ((void *)0), ggc_calloc, ((void *)0));
  slot = htab_find_slot (marked_trees, t, INSERT);
  *slot = t;
  return t;
}
int
mf_marked_p (tree t)
{
  void *entry;
  if (marked_trees == ((void *)0))
    return 0;
  entry = htab_find (marked_trees, t);
  return (entry != ((void *)0));
}
static varray_type deferred_static_decls;
static tree enqueued_call_stmt_chain;
static void
mudflap_register_call (tree obj, tree object_size, tree varname)
{
  tree arg, args, call_stmt;
  args = tree_cons_stat ((tree) ((void *)0),varname,(tree) ((void *)0) );
  arg = build_int_2_wide ((unsigned long) (4), (long) (0));
  args = tree_cons_stat ((tree) ((void *)0),arg,args );
  arg = convert (global_trees[TI_SIZE_TYPE], object_size);
  args = tree_cons_stat ((tree) ((void *)0),arg,args );
  arg = build1_stat (ADDR_EXPR,build_pointer_type (((obj)->common.type)),obj );
  arg = convert (global_trees[TI_PTR_TYPE], arg);
  args = tree_cons_stat ((tree) ((void *)0),arg,args );
  call_stmt = build_function_call_expr (mf_register_fndecl, args);
  append_to_statement_list (call_stmt, &enqueued_call_stmt_chain);
}
void
mudflap_enqueue_decl (tree obj)
{
  if (mf_marked_p (obj))
    return;
  if ((tree_code_type[(int) (((enum tree_code) (obj)->common.code))] == 'd') && ((obj)->decl.external_flag) && ((obj)->decl.artificial_flag))
    return;
  if ((((((obj)->common.type))->type.size) != (tree) ((void *)0)))
    {
      tree object_size;
      mf_mark (obj);
      object_size = size_in_bytes (((obj)->common.type));
      if (dump_file)
        {
          fprintf (dump_file, "enqueue_decl obj=`");
          print_generic_expr (dump_file, obj, dump_flags);
          fprintf (dump_file, "' size=");
          print_generic_expr (dump_file, object_size, dump_flags);
          fprintf (dump_file, "\n");
        }
      mudflap_register_call (obj, object_size, mf_varname_tree (obj));
    }
  else
    {
      size_t i;
      if (! deferred_static_decls)
        deferred_static_decls = varray_init (10, VARRAY_DATA_TREE, "deferred static list");
      for (i = 0; i < ((deferred_static_decls)->elements_used); i++)
        if (((deferred_static_decls)->data.tree1[i]) == obj)
          {
            warning ("mudflap cannot track lifetime of `%s'",
                     ((const char *) (((obj)->decl.name))->identifier.id.str));
            return;
          }
      do { if ((deferred_static_decls)->elements_used >= (deferred_static_decls)->num_elements) (((deferred_static_decls)) = varray_grow ((deferred_static_decls), 2 * (deferred_static_decls)->num_elements)); (deferred_static_decls)->data.tree1[(deferred_static_decls)->elements_used++] = (obj); } while (0);
    }
}
void
mudflap_enqueue_constant (tree obj)
{
  tree object_size, varname;
  if (mf_marked_p (obj))
    return;
  if (((enum tree_code) (obj)->common.code) == STRING_CST)
    object_size = build_int_2_wide ((unsigned long) (((obj)->string1.length)), (long) (0));
  else
    object_size = size_in_bytes (((obj)->common.type));
  if (dump_file)
    {
      fprintf (dump_file, "enqueue_constant obj=`");
      print_generic_expr (dump_file, obj, dump_flags);
      fprintf (dump_file, "' size=");
      print_generic_expr (dump_file, object_size, dump_flags);
      fprintf (dump_file, "\n");
    }
  if (((enum tree_code) (obj)->common.code) == STRING_CST)
    varname = mf_build_string ("string literal");
  else
    varname = mf_build_string ("constant");
  mudflap_register_call (obj, object_size, varname);
}
void
mudflap_finish_file (void)
{
  if (deferred_static_decls)
    {
      size_t i;
      for (i = 0; i < ((deferred_static_decls)->elements_used); i++)
        {
          tree obj = ((deferred_static_decls)->data.tree1[i]);
          mudflap_enqueue_decl (obj);
        }
      varray_clear(deferred_static_decls);
    }
  if (enqueued_call_stmt_chain)
    {
      cgraph_build_static_cdtor ('I', enqueued_call_stmt_chain);
      enqueued_call_stmt_chain = 0;
    }
}
static unsigned char
gate_mudflap (void)
{
  return flag_mudflap != 0;
}
struct tree_opt_pass pass_mudflap_1 =
{
  "mudflap1",
  gate_mudflap,
  execute_mudflap_function_decls,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 0),
  0,
  0,
  0,
  (1 << 0)
};
struct tree_opt_pass pass_mudflap_2 =
{
  "mudflap2",
  gate_mudflap,
  execute_mudflap_function_ops,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 2),
  0,
  0,
  0,
  (1 << 4) | (1 << 5)
  | (1 << 0)
};
const struct ggc_root_tab gt_ggc_r_gt_tree_mudflap_h[] = {
  {
    &enqueued_call_stmt_chain,
    1,
    sizeof (enqueued_call_stmt_chain),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &deferred_static_decls,
    1,
    sizeof (deferred_static_decls),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &marked_trees,
    1,
    sizeof (marked_trees),
    &gt_ggc_m_P9tree_node4htab,
    &gt_pch_n_P9tree_node4htab
  },
  {
    &mf_unregister_fndecl,
    1,
    sizeof (mf_unregister_fndecl),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &mf_register_fndecl,
    1,
    sizeof (mf_register_fndecl),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &mf_check_fndecl,
    1,
    sizeof (mf_check_fndecl),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &mf_cache_mask_decl_l,
    1,
    sizeof (mf_cache_mask_decl_l),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &mf_cache_shift_decl_l,
    1,
    sizeof (mf_cache_shift_decl_l),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &mf_cache_mask_decl,
    1,
    sizeof (mf_cache_mask_decl),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &mf_cache_shift_decl,
    1,
    sizeof (mf_cache_shift_decl),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &mf_cache_array_decl,
    1,
    sizeof (mf_cache_array_decl),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &mf_cache_structptr_type,
    1,
    sizeof (mf_cache_structptr_type),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &mf_cache_struct_type,
    1,
    sizeof (mf_cache_struct_type),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &mf_uintptr_type,
    1,
    sizeof (mf_uintptr_type),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
extern tree chrec_not_analyzed_yet;
extern tree chrec_dont_know;
extern tree chrec_known;
static unsigned char
automatically_generated_chrec_p (tree chrec)
{
  return (chrec == chrec_not_analyzed_yet
   || chrec == chrec_dont_know
   || chrec == chrec_known);
}
static unsigned char
tree_is_chrec (tree expr)
{
  if (((enum tree_code) (expr)->common.code) == POLYNOMIAL_CHREC
      || automatically_generated_chrec_p (expr))
    return 1;
  else
    return 0;
}
extern tree chrec_fold_plus (tree, tree, tree);
extern tree chrec_fold_minus (tree, tree, tree);
extern tree chrec_fold_multiply (tree, tree, tree);
extern tree chrec_convert (tree, tree);
extern tree count_ev_in_wider_type (tree, tree);
extern tree chrec_type (tree);
extern tree chrec_apply (unsigned, tree, tree);
extern tree chrec_replace_initial_condition (tree, tree);
extern tree update_initial_condition_to_origin (tree);
extern tree initial_condition (tree);
extern tree evolution_part_in_loop_num (tree, unsigned);
extern tree hide_evolution_in_other_loops_than_loop (tree, unsigned);
extern tree reset_evolution_in_loop (unsigned, tree, tree);
extern tree chrec_merge (tree, tree);
extern unsigned char is_multivariate_chrec (tree);
extern unsigned char chrec_is_positive (tree, unsigned char *);
extern unsigned char chrec_contains_symbols (tree);
extern unsigned char chrec_contains_symbols_defined_in_loop (tree, unsigned);
extern unsigned char chrec_contains_undetermined (tree);
extern unsigned char tree_contains_chrecs (tree);
extern unsigned char evolution_function_is_affine_multivariate_p (tree);
extern unsigned char evolution_function_is_univariate_p (tree);
static tree
build_polynomial_chrec (unsigned loop_num,
   tree left,
   tree right)
{
  if (left == chrec_dont_know
      || right == chrec_dont_know)
    return chrec_dont_know;
  return build (POLYNOMIAL_CHREC, ((left)->common.type),
  build_int_2_wide ((unsigned long) (loop_num), (long) (0)), left, right);
}
static unsigned char
chrec_zerop (tree chrec)
{
  if (chrec == (tree) ((void *)0))
    return 0;
  if (((enum tree_code) (chrec)->common.code) == INTEGER_CST)
    return integer_zerop (chrec);
  return 0;
}
static unsigned char
evolution_function_is_constant_p (tree chrec)
{
  if (chrec == (tree) ((void *)0))
    return 0;
  switch (((enum tree_code) (chrec)->common.code))
    {
    case INTEGER_CST:
    case REAL_CST:
      return 1;
    default:
      return 0;
    }
}
static unsigned char
evolution_function_is_affine_p (tree chrec)
{
  if (chrec == (tree) ((void *)0))
    return 0;
  switch (((enum tree_code) (chrec)->common.code))
    {
    case POLYNOMIAL_CHREC:
      if (evolution_function_is_constant_p (((chrec)->exp.operands[1]))
   && evolution_function_is_constant_p (((chrec)->exp.operands[2])))
 return 1;
      else
 return 0;
    default:
      return 0;
    }
}
static unsigned char
evolution_function_is_affine_or_constant_p (tree chrec)
{
  return evolution_function_is_affine_p (chrec)
    || evolution_function_is_constant_p (chrec);
}
static unsigned char
tree_does_not_contain_chrecs (tree expr)
{
  return !tree_contains_chrecs (expr);
}
static unsigned char
no_evolution_in_loop_p (tree chrec, unsigned loop_num, unsigned char *res)
{
  tree scev;
  if (chrec == chrec_not_analyzed_yet
      || chrec == chrec_dont_know
      || chrec_contains_symbols_defined_in_loop (chrec, loop_num))
    return 0;
  scev = hide_evolution_in_other_loops_than_loop (chrec, loop_num);
  *res = !tree_is_chrec (scev);
  return 1;
}
tree chrec_not_analyzed_yet;
tree chrec_dont_know;
tree chrec_known;
tree
count_ev_in_wider_type (tree foo ,
   tree bar )
{
  return (tree) ((void *)0);
}
unsigned char
chrec_contains_symbols_defined_in_loop (tree chrec ,
     unsigned loop_nb )
{
  return 1;
}
static unsigned char
is_not_constant_evolution (tree cst)
{
  return (((enum tree_code) (cst)->common.code) == POLYNOMIAL_CHREC);
}
static tree
chrec_fold_poly_cst (enum tree_code code,
       tree type,
       tree poly,
       tree cst)
{
  switch (code)
    {
    case PLUS_EXPR:
      return build_polynomial_chrec
 ((((((poly)->exp.operands[0]))->int_cst.int_cst).low),
  chrec_fold_plus (type, ((poly)->exp.operands[1]), cst),
  ((poly)->exp.operands[2]));
    case MINUS_EXPR:
      return build_polynomial_chrec
 ((((((poly)->exp.operands[0]))->int_cst.int_cst).low),
  chrec_fold_minus (type, ((poly)->exp.operands[1]), cst),
  ((poly)->exp.operands[2]));
    case MULT_EXPR:
      return build_polynomial_chrec
 ((((((poly)->exp.operands[0]))->int_cst.int_cst).low),
  chrec_fold_multiply (type, ((poly)->exp.operands[1]), cst),
  chrec_fold_multiply (type, ((poly)->exp.operands[2]), cst));
    default:
      return chrec_dont_know;
    }
}
static tree
chrec_fold_plus_poly_poly (enum tree_code code,
      tree type,
      tree poly0,
      tree poly1)
{
  tree left, right;
  if ((((((poly0)->exp.operands[0]))->int_cst.int_cst).low) < (((((poly1)->exp.operands[0]))->int_cst.int_cst).low))
    {
      if (code == PLUS_EXPR)
 return build_polynomial_chrec
   ((((((poly1)->exp.operands[0]))->int_cst.int_cst).low),
    chrec_fold_plus (type, poly0, ((poly1)->exp.operands[1])),
    ((poly1)->exp.operands[2]));
      else
 return build_polynomial_chrec
   ((((((poly1)->exp.operands[0]))->int_cst.int_cst).low),
    chrec_fold_minus (type, poly0, ((poly1)->exp.operands[1])),
    chrec_fold_multiply (type, ((poly1)->exp.operands[2]),
    convert (type, global_trees[TI_INTEGER_MINUS_ONE])));
    }
  if ((((((poly0)->exp.operands[0]))->int_cst.int_cst).low) > (((((poly1)->exp.operands[0]))->int_cst.int_cst).low))
    {
      if (code == PLUS_EXPR)
 return build_polynomial_chrec
   ((((((poly0)->exp.operands[0]))->int_cst.int_cst).low),
    chrec_fold_plus (type, ((poly0)->exp.operands[1]), poly1),
    ((poly0)->exp.operands[2]));
      else
 return build_polynomial_chrec
   ((((((poly0)->exp.operands[0]))->int_cst.int_cst).low),
    chrec_fold_minus (type, ((poly0)->exp.operands[1]), poly1),
    ((poly0)->exp.operands[2]));
    }
  if (code == PLUS_EXPR)
    {
      left = chrec_fold_plus
 (type, ((poly0)->exp.operands[1]), ((poly1)->exp.operands[1]));
      right = chrec_fold_plus
 (type, ((poly0)->exp.operands[2]), ((poly1)->exp.operands[2]));
    }
  else
    {
      left = chrec_fold_minus
 (type, ((poly0)->exp.operands[1]), ((poly1)->exp.operands[1]));
      right = chrec_fold_minus
 (type, ((poly0)->exp.operands[2]), ((poly1)->exp.operands[2]));
    }
  if (chrec_zerop (right))
    return left;
  else
    return build_polynomial_chrec
      ((((((poly0)->exp.operands[0]))->int_cst.int_cst).low), left, right);
}
static tree
chrec_fold_multiply_poly_poly (tree type,
          tree poly0,
          tree poly1)
{
  if ((((((poly0)->exp.operands[0]))->int_cst.int_cst).low) < (((((poly1)->exp.operands[0]))->int_cst.int_cst).low))
    return build_polynomial_chrec
      ((((((poly1)->exp.operands[0]))->int_cst.int_cst).low),
       chrec_fold_multiply (type, ((poly1)->exp.operands[1]), poly0),
       ((poly1)->exp.operands[2]));
  if ((((((poly1)->exp.operands[0]))->int_cst.int_cst).low) < (((((poly0)->exp.operands[0]))->int_cst.int_cst).low))
    return build_polynomial_chrec
      ((((((poly0)->exp.operands[0]))->int_cst.int_cst).low),
       chrec_fold_multiply (type, ((poly0)->exp.operands[1]), poly1),
       ((poly0)->exp.operands[2]));
  return
    build_polynomial_chrec
    ((((((poly0)->exp.operands[0]))->int_cst.int_cst).low),
     build_polynomial_chrec
     ((((((poly0)->exp.operands[0]))->int_cst.int_cst).low),
      chrec_fold_multiply (type, ((poly0)->exp.operands[1]), ((poly1)->exp.operands[1])),
      chrec_fold_plus
      (type, chrec_fold_multiply (type, ((poly0)->exp.operands[1]), ((poly1)->exp.operands[2])),
       chrec_fold_plus
       (type,
 chrec_fold_multiply (type, ((poly0)->exp.operands[2]), ((poly1)->exp.operands[1])),
 chrec_fold_multiply (type, ((poly0)->exp.operands[2]), ((poly1)->exp.operands[2]))))),
     chrec_fold_multiply
     (type, build_int_2_wide ((unsigned long) (2), (long) (0)),
      chrec_fold_multiply (type, ((poly0)->exp.operands[2]), ((poly1)->exp.operands[2]))));
}
static tree
chrec_fold_automatically_generated_operands (tree op0,
          tree op1)
{
  if (op0 == chrec_dont_know
      || op1 == chrec_dont_know)
    return chrec_dont_know;
  if (op0 == chrec_known
      || op1 == chrec_known)
    return chrec_known;
  if (op0 == chrec_not_analyzed_yet
      || op1 == chrec_not_analyzed_yet)
    return chrec_not_analyzed_yet;
  return chrec_dont_know;
}
static tree
chrec_fold_plus_1 (enum tree_code code,
     tree type,
     tree op0,
     tree op1)
{
  if (automatically_generated_chrec_p (op0)
      || automatically_generated_chrec_p (op1))
    return chrec_fold_automatically_generated_operands (op0, op1);
  switch (((enum tree_code) (op0)->common.code))
    {
    case POLYNOMIAL_CHREC:
      switch (((enum tree_code) (op1)->common.code))
 {
 case POLYNOMIAL_CHREC:
   return chrec_fold_plus_poly_poly (code, type, op0, op1);
 default:
   if (code == PLUS_EXPR)
     return build_polynomial_chrec
       ((((((op0)->exp.operands[0]))->int_cst.int_cst).low),
        chrec_fold_plus (type, ((op0)->exp.operands[1]), op1),
        ((op0)->exp.operands[2]));
   else
     return build_polynomial_chrec
       ((((((op0)->exp.operands[0]))->int_cst.int_cst).low),
        chrec_fold_minus (type, ((op0)->exp.operands[1]), op1),
        ((op0)->exp.operands[2]));
 }
    default:
      switch (((enum tree_code) (op1)->common.code))
 {
 case POLYNOMIAL_CHREC:
   if (code == PLUS_EXPR)
     return build_polynomial_chrec
       ((((((op1)->exp.operands[0]))->int_cst.int_cst).low),
        chrec_fold_plus (type, op0, ((op1)->exp.operands[1])),
        ((op1)->exp.operands[2]));
   else
     return build_polynomial_chrec
       ((((((op1)->exp.operands[0]))->int_cst.int_cst).low),
        chrec_fold_minus (type, op0, ((op1)->exp.operands[1])),
        chrec_fold_multiply (type, ((op1)->exp.operands[2]),
        convert (type,
          global_trees[TI_INTEGER_MINUS_ONE])));
 default:
   if (tree_contains_chrecs (op0)
       || tree_contains_chrecs (op1))
     return build (code, type, op0, op1);
   else
     return fold (build (code, type, op0, op1));
 }
    }
}
tree
chrec_fold_plus (tree type,
   tree op0,
   tree op1)
{
  if (integer_zerop (op0))
    return op1;
  if (integer_zerop (op1))
    return op0;
  return chrec_fold_plus_1 (PLUS_EXPR, type, op0, op1);
}
tree
chrec_fold_minus (tree type,
    tree op0,
    tree op1)
{
  if (integer_zerop (op1))
    return op0;
  return chrec_fold_plus_1 (MINUS_EXPR, type, op0, op1);
}
tree
chrec_fold_multiply (tree type,
       tree op0,
       tree op1)
{
  if (automatically_generated_chrec_p (op0)
      || automatically_generated_chrec_p (op1))
    return chrec_fold_automatically_generated_operands (op0, op1);
  switch (((enum tree_code) (op0)->common.code))
    {
    case POLYNOMIAL_CHREC:
      switch (((enum tree_code) (op1)->common.code))
 {
 case POLYNOMIAL_CHREC:
   return chrec_fold_multiply_poly_poly (type, op0, op1);
 default:
   if (integer_onep (op1))
     return op0;
   if (integer_zerop (op1))
     return convert (type, global_trees[TI_INTEGER_ZERO]);
   return build_polynomial_chrec
     ((((((op0)->exp.operands[0]))->int_cst.int_cst).low),
      chrec_fold_multiply (type, ((op0)->exp.operands[1]), op1),
      chrec_fold_multiply (type, ((op0)->exp.operands[2]), op1));
 }
    default:
      if (integer_onep (op0))
 return op1;
      if (integer_zerop (op0))
 return convert (type, global_trees[TI_INTEGER_ZERO]);
      switch (((enum tree_code) (op1)->common.code))
 {
 case POLYNOMIAL_CHREC:
   return build_polynomial_chrec
     ((((((op1)->exp.operands[0]))->int_cst.int_cst).low),
      chrec_fold_multiply (type, ((op1)->exp.operands[1]), op0),
      chrec_fold_multiply (type, ((op1)->exp.operands[2]), op0));
 default:
   if (integer_onep (op1))
     return op0;
   if (integer_zerop (op1))
     return convert (type, global_trees[TI_INTEGER_ZERO]);
   return fold (build (MULT_EXPR, type, op0, op1));
 }
    }
}
static tree
tree_fold_factorial (tree f)
{
  if (tree_int_cst_sgn (f) <= 0)
    return global_trees[TI_INTEGER_ONE];
  else
    return fold
      (build (MULT_EXPR, integer_types[itk_int], f,
       tree_fold_factorial (fold (build (MINUS_EXPR, integer_types[itk_int],
      f, global_trees[TI_INTEGER_ONE])))));
}
static tree
tree_fold_binomial (tree n,
      tree k)
{
  return fold
    (build (EXACT_DIV_EXPR, integer_types[itk_int], tree_fold_factorial (n),
     fold (build (MULT_EXPR, integer_types[itk_int],
    tree_fold_factorial (k),
    tree_fold_factorial
    (fold (build (MINUS_EXPR, integer_types[itk_int],
           n, k)))))));
}
static tree
chrec_evaluate (unsigned var,
  tree chrec,
  tree n,
  tree k)
{
  tree type = chrec_type (chrec);
  tree binomial_n_k = tree_fold_binomial (n, k);
  if (((enum tree_code) (chrec)->common.code) == POLYNOMIAL_CHREC)
    {
      if ((((((chrec)->exp.operands[0]))->int_cst.int_cst).low) > var)
 return chrec_evaluate (var, ((chrec)->exp.operands[1]), n, k);
      if ((((((chrec)->exp.operands[0]))->int_cst.int_cst).low) == var)
 return chrec_fold_plus
   (type,
    fold (build (MULT_EXPR, type, binomial_n_k, ((chrec)->exp.operands[1]))),
    chrec_evaluate (var, ((chrec)->exp.operands[2]), n,
      fold (build (PLUS_EXPR, type, k, global_trees[TI_INTEGER_ONE]))));
      return fold (build (MULT_EXPR, type, binomial_n_k, chrec));
    }
  else
    return fold (build (MULT_EXPR, type, binomial_n_k, chrec));
}
tree
chrec_apply (unsigned var,
      tree chrec,
      tree x)
{
  tree type = chrec_type (chrec);
  tree res = chrec_dont_know;
  if (automatically_generated_chrec_p (chrec)
      || automatically_generated_chrec_p (x)
      || chrec_contains_symbols_defined_in_loop (chrec, var)
      || chrec_contains_symbols (x))
    return chrec_dont_know;
  if (dump_file && (dump_flags & (1 << 3)))
    fprintf (dump_file, "(chrec_apply \n");
  if (evolution_function_is_affine_p (chrec))
    {
      if (((enum tree_code) (((chrec)->exp.operands[1]))->common.code) == INTEGER_CST
   && integer_zerop (((chrec)->exp.operands[1])))
 res = chrec_fold_multiply (type, ((chrec)->exp.operands[2]), x);
      else
 res = chrec_fold_plus (type, ((chrec)->exp.operands[1]),
          chrec_fold_multiply (type,
          ((chrec)->exp.operands[2]), x));
    }
  else if (((enum tree_code) (chrec)->common.code) != POLYNOMIAL_CHREC)
    res = chrec;
  else if (((enum tree_code) (x)->common.code) == INTEGER_CST
    && tree_int_cst_sgn (x) == 1)
    res = chrec_evaluate (var, chrec, x, global_trees[TI_INTEGER_ZERO]);
  else
    res = chrec_dont_know;
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "  (varying_loop = %d\n", var);
      fprintf (dump_file, ")\n  (chrec = ");
      print_generic_expr (dump_file, chrec, 0);
      fprintf (dump_file, ")\n  (x = ");
      print_generic_expr (dump_file, x, 0);
      fprintf (dump_file, ")\n  (res = ");
      print_generic_expr (dump_file, res, 0);
      fprintf (dump_file, "))\n");
    }
  return res;
}
tree
chrec_replace_initial_condition (tree chrec,
     tree init_cond)
{
  if (automatically_generated_chrec_p (chrec))
    return chrec;
  switch (((enum tree_code) (chrec)->common.code))
    {
    case POLYNOMIAL_CHREC:
      return build_polynomial_chrec
 ((((((chrec)->exp.operands[0]))->int_cst.int_cst).low),
  chrec_replace_initial_condition (((chrec)->exp.operands[1]), init_cond),
  ((chrec)->exp.operands[2]));
    default:
      return init_cond;
    }
}
tree
initial_condition (tree chrec)
{
  if (automatically_generated_chrec_p (chrec))
    return chrec;
  if (((enum tree_code) (chrec)->common.code) == POLYNOMIAL_CHREC)
    return initial_condition (((chrec)->exp.operands[1]));
  else
    return chrec;
}
tree
hide_evolution_in_other_loops_than_loop (tree chrec,
      unsigned loop_num)
{
  if (automatically_generated_chrec_p (chrec))
    return chrec;
  switch (((enum tree_code) (chrec)->common.code))
    {
    case POLYNOMIAL_CHREC:
      if ((((((chrec)->exp.operands[0]))->int_cst.int_cst).low) == loop_num)
 return build_polynomial_chrec
   (loop_num,
    hide_evolution_in_other_loops_than_loop (((chrec)->exp.operands[1]),
          loop_num),
    ((chrec)->exp.operands[2]));
      else if ((((((chrec)->exp.operands[0]))->int_cst.int_cst).low) < loop_num)
 return initial_condition (chrec);
      else
 return hide_evolution_in_other_loops_than_loop (((chrec)->exp.operands[1]),
       loop_num);
    default:
      return chrec;
    }
}
tree
evolution_part_in_loop_num (tree chrec,
       unsigned loop_num)
{
  if (automatically_generated_chrec_p (chrec))
    return chrec;
  switch (((enum tree_code) (chrec)->common.code))
    {
    case POLYNOMIAL_CHREC:
      if ((((((chrec)->exp.operands[0]))->int_cst.int_cst).low) == loop_num)
 {
   if (((enum tree_code) (((chrec)->exp.operands[1]))->common.code) != POLYNOMIAL_CHREC
       || (((((((chrec)->exp.operands[1]))->exp.operands[0]))->int_cst.int_cst).low) != (((((chrec)->exp.operands[0]))->int_cst.int_cst).low))
     return ((chrec)->exp.operands[2]);
   else
     return build_polynomial_chrec
       (loop_num,
        evolution_part_in_loop_num (((chrec)->exp.operands[1]), loop_num),
        ((chrec)->exp.operands[2]));
 }
      else if ((((((chrec)->exp.operands[0]))->int_cst.int_cst).low) < loop_num)
 return (tree) ((void *)0);
      else
 return evolution_part_in_loop_num (((chrec)->exp.operands[1]), loop_num);
    default:
      return (tree) ((void *)0);
    }
}
tree
reset_evolution_in_loop (unsigned loop_num,
    tree chrec,
    tree new_evol)
{
  if (((enum tree_code) (chrec)->common.code) == POLYNOMIAL_CHREC
      && (((((chrec)->exp.operands[0]))->int_cst.int_cst).low) > loop_num)
    return build
      (((enum tree_code) (chrec)->common.code),
       build_int_2_wide ((unsigned long) ((((((chrec)->exp.operands[0]))->int_cst.int_cst).low)), (long) (0)),
       reset_evolution_in_loop (loop_num, ((chrec)->exp.operands[1]), new_evol),
       reset_evolution_in_loop (loop_num, ((chrec)->exp.operands[2]), new_evol));
  while (((enum tree_code) (chrec)->common.code) == POLYNOMIAL_CHREC
  && (((((chrec)->exp.operands[0]))->int_cst.int_cst).low) == loop_num)
    chrec = ((chrec)->exp.operands[1]);
  return build_polynomial_chrec (loop_num, chrec, new_evol);
}
tree
chrec_merge (tree chrec1,
      tree chrec2)
{
  if (chrec1 == chrec_dont_know
      || chrec2 == chrec_dont_know)
    return chrec_dont_know;
  if (chrec1 == chrec_known
      || chrec2 == chrec_known)
    return chrec_known;
  if (chrec1 == chrec_not_analyzed_yet)
    return chrec2;
  if (chrec2 == chrec_not_analyzed_yet)
    return chrec1;
  if (operand_equal_p (chrec1, chrec2, 0))
    return chrec1;
  return chrec_dont_know;
}
static unsigned char
is_multivariate_chrec_rec (tree chrec, unsigned int rec_var)
{
  if (chrec == (tree) ((void *)0))
    return 0;
  if (((enum tree_code) (chrec)->common.code) == POLYNOMIAL_CHREC)
    {
      if ((((((chrec)->exp.operands[0]))->int_cst.int_cst).low) != rec_var)
 return 1;
      else
 return (is_multivariate_chrec_rec (((chrec)->exp.operands[1]), rec_var)
  || is_multivariate_chrec_rec (((chrec)->exp.operands[2]), rec_var));
    }
  else
    return 0;
}
unsigned char
is_multivariate_chrec (tree chrec)
{
  if (chrec == (tree) ((void *)0))
    return 0;
  if (((enum tree_code) (chrec)->common.code) == POLYNOMIAL_CHREC)
    return (is_multivariate_chrec_rec (((chrec)->exp.operands[1]),
           (((((chrec)->exp.operands[0]))->int_cst.int_cst).low))
     || is_multivariate_chrec_rec (((chrec)->exp.operands[2]),
       (((((chrec)->exp.operands[0]))->int_cst.int_cst).low)));
  else
    return 0;
}
unsigned char
chrec_contains_symbols (tree chrec)
{
  if (chrec == (tree) ((void *)0))
    return 0;
  if (((enum tree_code) (chrec)->common.code) == SSA_NAME
      || ((enum tree_code) (chrec)->common.code) == VAR_DECL
      || ((enum tree_code) (chrec)->common.code) == PARM_DECL
      || ((enum tree_code) (chrec)->common.code) == FUNCTION_DECL
      || ((enum tree_code) (chrec)->common.code) == LABEL_DECL
      || ((enum tree_code) (chrec)->common.code) == RESULT_DECL
      || ((enum tree_code) (chrec)->common.code) == FIELD_DECL)
    return 1;
  switch (tree_code_length[(int) (((enum tree_code) (chrec)->common.code))])
    {
    case 3:
      if (chrec_contains_symbols (((chrec)->exp.operands[2])))
 return 1;
    case 2:
      if (chrec_contains_symbols (((chrec)->exp.operands[1])))
 return 1;
    case 1:
      if (chrec_contains_symbols (((chrec)->exp.operands[0])))
 return 1;
    default:
      return 0;
    }
}
unsigned char
chrec_contains_undetermined (tree chrec)
{
  if (chrec == chrec_dont_know
      || chrec == chrec_not_analyzed_yet
      || chrec == (tree) ((void *)0))
    return 1;
  switch (tree_code_length[(int) (((enum tree_code) (chrec)->common.code))])
    {
    case 3:
      if (chrec_contains_undetermined (((chrec)->exp.operands[2])))
 return 1;
    case 2:
      if (chrec_contains_undetermined (((chrec)->exp.operands[1])))
 return 1;
    case 1:
      if (chrec_contains_undetermined (((chrec)->exp.operands[0])))
 return 1;
    default:
      return 0;
    }
}
unsigned char
tree_contains_chrecs (tree expr)
{
  if (expr == (tree) ((void *)0))
    return 0;
  if (tree_is_chrec (expr))
    return 1;
  switch (tree_code_length[(int) (((enum tree_code) (expr)->common.code))])
    {
    case 3:
      if (tree_contains_chrecs (((expr)->exp.operands[2])))
 return 1;
    case 2:
      if (tree_contains_chrecs (((expr)->exp.operands[1])))
 return 1;
    case 1:
      if (tree_contains_chrecs (((expr)->exp.operands[0])))
 return 1;
    default:
      return 0;
    }
}
unsigned char
evolution_function_is_affine_multivariate_p (tree chrec)
{
  if (chrec == (tree) ((void *)0))
    return 0;
  switch (((enum tree_code) (chrec)->common.code))
    {
    case POLYNOMIAL_CHREC:
      if (evolution_function_is_constant_p (((chrec)->exp.operands[1])))
 {
   if (evolution_function_is_constant_p (((chrec)->exp.operands[2])))
     return 1;
   else
     {
       if (((enum tree_code) (((chrec)->exp.operands[2]))->common.code) == POLYNOMIAL_CHREC
    && (((((((chrec)->exp.operands[2]))->exp.operands[0]))->int_cst.int_cst).low)
       != (((((chrec)->exp.operands[0]))->int_cst.int_cst).low)
    && evolution_function_is_affine_multivariate_p
    (((chrec)->exp.operands[2])))
  return 1;
       else
  return 0;
     }
 }
      else
 {
   if (evolution_function_is_constant_p (((chrec)->exp.operands[2]))
       && ((enum tree_code) (((chrec)->exp.operands[1]))->common.code) == POLYNOMIAL_CHREC
       && (((((((chrec)->exp.operands[1]))->exp.operands[0]))->int_cst.int_cst).low) != (((((chrec)->exp.operands[0]))->int_cst.int_cst).low)
       && evolution_function_is_affine_multivariate_p
       (((chrec)->exp.operands[1])))
     return 1;
   else
     return 0;
 }
    default:
      return 0;
    }
}
unsigned char
evolution_function_is_univariate_p (tree chrec)
{
  if (chrec == (tree) ((void *)0))
    return 1;
  switch (((enum tree_code) (chrec)->common.code))
    {
    case POLYNOMIAL_CHREC:
      switch (((enum tree_code) (((chrec)->exp.operands[1]))->common.code))
 {
 case POLYNOMIAL_CHREC:
   if ((((((chrec)->exp.operands[0]))->int_cst.int_cst).low) != (((((((chrec)->exp.operands[1]))->exp.operands[0]))->int_cst.int_cst).low))
     return 0;
   if (!evolution_function_is_univariate_p (((chrec)->exp.operands[1])))
     return 0;
   break;
 default:
   break;
 }
      switch (((enum tree_code) (((chrec)->exp.operands[2]))->common.code))
 {
 case POLYNOMIAL_CHREC:
   if ((((((chrec)->exp.operands[0]))->int_cst.int_cst).low) != (((((((chrec)->exp.operands[2]))->exp.operands[0]))->int_cst.int_cst).low))
     return 0;
   if (!evolution_function_is_univariate_p (((chrec)->exp.operands[2])))
     return 0;
   break;
 default:
   break;
 }
    default:
      return 1;
    }
}
tree
chrec_convert (tree type,
        tree chrec)
{
  tree ct;
  if (automatically_generated_chrec_p (chrec))
    return chrec;
  ct = chrec_type (chrec);
  if (ct == type)
    return chrec;
  if (((ct)->type.precision) < ((type)->type.precision))
    return count_ev_in_wider_type (type, chrec);
  switch (((enum tree_code) (chrec)->common.code))
    {
    case POLYNOMIAL_CHREC:
      return build_polynomial_chrec ((((((chrec)->exp.operands[0]))->int_cst.int_cst).low),
         chrec_convert (type,
          ((chrec)->exp.operands[1])),
         chrec_convert (type,
          ((chrec)->exp.operands[2])));
    default:
      {
 tree res = convert (type, chrec);
 ((res)->common.public_flag) = 0;
 if (tree_code_type[(int) (((enum tree_code) (res)->common.code))] == 'c')
   ((res)->common.static_flag) = 0;
 return res;
      }
    }
}
tree
chrec_type (tree chrec)
{
  if (automatically_generated_chrec_p (chrec))
    return (tree) ((void *)0);
  return ((chrec)->common.type);
}
extern void initialize_scalar_evolutions_analyzer (void);
void
initialize_scalar_evolutions_analyzer (void)
{
  if (chrec_dont_know == (tree) ((void *)0))
    {
      chrec_not_analyzed_yet = (tree) ((void *)0);
      chrec_dont_know = make_node_stat (SCEV_NOT_KNOWN );
      chrec_known = make_node_stat (SCEV_KNOWN );
      ((chrec_dont_know)->common.type) = (tree) ((void *)0);
      ((chrec_known)->common.type) = (tree) ((void *)0);
    }
}
extern void compute_alignments (void);
extern void init_final (const char *);
extern void app_enable (void);
extern void app_disable (void);
extern int dbr_sequence_length (void);
extern void init_insn_lengths (void);
extern int get_attr_length (rtx);
extern void shorten_branches (rtx);
extern void final_start_function (rtx, FILE *, int);
extern void final_end_function (void);
extern void final (rtx, FILE *, int, int);
extern rtx final_scan_insn (rtx, FILE *, int, int, int, int *);
extern rtx alter_subreg (rtx *);
extern void output_operand_lossage (const char *, ...) ;
extern void output_asm_insn (const char *, rtx *);
extern int insn_current_reference_address (rtx);
extern int label_to_alignment (rtx);
extern void output_asm_label (rtx);
extern void output_address (rtx);
extern void output_addr_const (FILE *, rtx);
extern void asm_fprintf (FILE *file, const char *p, ...)
     ;
extern void split_double (rtx, rtx *, rtx *);
extern int leaf_function_p (void);
extern int final_forward_branch_p (rtx);
extern int only_leaf_regs_used (void);
extern void leaf_renumber_regs_insn (rtx);
extern const char *get_insn_template (int, rtx);
extern int add_weak (tree, const char *, const char *);
extern void allocate_for_life_analysis (void);
extern int regno_clobbered_at_setjmp (int);
extern void text_section (void);
extern void unlikely_text_section (void);
extern void data_section (void);
extern void readonly_data_section (void);
extern int in_text_section (void);
extern int in_unlikely_text_section (void);
extern void bss_section (void);
extern void init_section (void);
extern void fini_section (void);
extern void named_section (tree, const char *, int);
extern void function_section (tree);
extern void mergeable_string_section (tree, unsigned long,
          unsigned int);
extern void mergeable_constant_section (enum machine_mode,
     unsigned long, unsigned int);
extern void declare_weak (tree);
extern void merge_weak (tree, tree);
extern void weak_finish (void);
extern int decode_reg_name (const char *);
extern void make_var_volatile (tree);
extern void assemble_alias (tree, tree);
extern void default_assemble_visibility (tree, int);
extern void assemble_asm (tree);
extern void assemble_start_function (tree, const char *);
extern void assemble_end_function (tree, const char *);
extern void assemble_variable (tree, int, int, int);
extern void assemble_external (tree);
extern void assemble_zeros (unsigned long);
extern void assemble_align (int);
extern void assemble_eh_align (int);
extern void assemble_string (const char *, int);
extern void assemble_external_libcall (rtx);
extern void assemble_label (const char *);
extern void assemble_eh_label (const char *);
extern void assemble_name (FILE *, const char *);
extern const char *integer_asm_op (int, int);
extern void assemble_integer_with_op (const char *, rtx);
extern unsigned char default_assemble_integer (rtx, unsigned int, int);
extern unsigned char assemble_integer (rtx, unsigned, unsigned, int);
extern int get_pool_size (void);
extern void output_constant_pool (const char *, tree);
extern tree initializer_constant_valid_p (tree, tree);
extern void output_constant (tree, unsigned long, unsigned int);
extern rtx final_sequence;
extern FILE *asm_out_file;
extern const char *first_global_object_name;
extern const char *weak_global_object_name;
extern int current_function_is_leaf;
extern int current_function_nothrow;
extern int current_function_sp_is_unchanging;
extern int current_function_uses_only_leaf_regs;
extern FILE *dump_file;
extern rtx current_insn_predicate;
extern rtx current_output_insn;
extern rtx this_is_asm_operands;
extern int size_directive_output;
extern tree last_assemble_variable_decl;
extern unsigned char decl_readonly_section (tree, int);
extern unsigned char decl_readonly_section_1 (tree, int, int);
extern int compute_reloc_for_constant (tree);
extern const char *user_label_prefix;
extern void default_function_pro_epilogue (FILE *, long);
extern void default_exception_section (void);
extern void named_section_eh_frame_section (void);
extern void collect2_eh_frame_section (void);
extern void default_eh_frame_section (void);
extern void no_asm_to_stream (FILE *);
extern unsigned int get_named_section_flags (const char *);
extern unsigned char set_named_section_flags (const char *, unsigned int);
extern void named_section_flags (const char *, unsigned int);
extern unsigned char named_section_first_declaration (const char *);
extern unsigned int default_section_type_flags (tree, const char *, int);
extern unsigned int default_section_type_flags_1 (tree, const char *, int, int);
extern void default_no_named_section (const char *, unsigned int);
extern void default_elf_asm_named_section (const char *, unsigned int);
extern void default_coff_asm_named_section (const char *, unsigned int);
extern void default_pe_asm_named_section (const char *, unsigned int);
extern void default_stabs_asm_out_destructor (rtx, int);
extern void default_named_section_asm_out_destructor (rtx, int);
extern void default_dtor_section_asm_out_destructor (rtx, int);
extern void default_stabs_asm_out_constructor (rtx, int);
extern void default_named_section_asm_out_constructor (rtx, int);
extern void default_ctor_section_asm_out_constructor (rtx, int);
extern void default_select_section (tree, int, unsigned long);
extern void default_elf_select_section (tree, int, unsigned long);
extern void default_elf_select_section_1 (tree, int,
       unsigned long, int);
extern void default_unique_section (tree, int);
extern void default_unique_section_1 (tree, int, int);
extern void default_select_rtx_section (enum machine_mode, rtx,
     unsigned long);
extern void default_elf_select_rtx_section (enum machine_mode, rtx,
         unsigned long);
extern void default_encode_section_info (tree, rtx, int);
extern const char *default_strip_name_encoding (const char *);
extern unsigned char default_binds_local_p (tree);
extern unsigned char default_binds_local_p_1 (tree, int);
extern void default_globalize_label (FILE *, const char *);
extern void default_emit_unwind_label (FILE *, tree, int, int);
extern void default_internal_label (FILE *, const char *, unsigned long);
extern void default_file_start (void);
extern void file_end_indicate_exec_stack (void);
extern unsigned char default_valid_pointer_mode (enum machine_mode);
extern int default_address_cost (rtx);
enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM = 2, EXPAND_SUM,
        EXPAND_CONST_ADDRESS, EXPAND_INITIALIZER, EXPAND_WRITE,
        EXPAND_MEMORY};
enum direction {none, upward, downward};
struct args_size
{
  long constant;
  tree var;
};
struct locate_and_pad_arg_data
{
  struct args_size size;
  struct args_size offset;
  struct args_size slot_offset;
  struct args_size alignment_pad;
  enum direction where_pad;
};
tree split_complex_types (tree);
tree split_complex_values (tree);
extern unsigned char default_must_pass_in_stack (enum machine_mode, tree);
enum optab_methods
{
  OPTAB_DIRECT,
  OPTAB_LIB,
  OPTAB_WIDEN,
  OPTAB_LIB_WIDEN,
  OPTAB_MUST_WIDEN
};
extern rtx expand_simple_binop (enum machine_mode, enum rtx_code, rtx,
    rtx, rtx, int, enum optab_methods);
extern rtx expand_simple_unop (enum machine_mode, enum rtx_code, rtx, rtx,
          int);
extern int have_insn_for (enum rtx_code, enum machine_mode);
extern void emit_libcall_block (rtx, rtx, rtx, rtx);
extern rtx gen_add2_insn (rtx, rtx);
extern rtx gen_add3_insn (rtx, rtx, rtx);
extern rtx gen_sub2_insn (rtx, rtx);
extern rtx gen_sub3_insn (rtx, rtx, rtx);
extern rtx gen_move_insn (rtx, rtx);
extern int have_add2_insn (rtx, rtx);
extern int have_sub2_insn (rtx, rtx);
extern void emit_cmp_and_jump_insns (rtx, rtx, enum rtx_code, rtx,
         enum machine_mode, int, rtx);
extern void emit_indirect_jump (rtx);
rtx emit_conditional_move (rtx, enum rtx_code, rtx, rtx, enum machine_mode,
      rtx, rtx, enum machine_mode, int);
int can_conditionally_move_p (enum machine_mode mode);
rtx emit_conditional_add (rtx, enum rtx_code, rtx, rtx, enum machine_mode,
     rtx, rtx, enum machine_mode, int);
extern rtx negate_rtx (enum machine_mode, rtx);
extern rtx expand_and (enum machine_mode, rtx, rtx, rtx);
extern rtx emit_store_flag (rtx, enum rtx_code, rtx, rtx, enum machine_mode,
       int, int);
extern rtx emit_store_flag_force (rtx, enum rtx_code, rtx, rtx,
      enum machine_mode, int, int);
extern rtx canonicalize_condition (rtx, rtx, int, rtx *, rtx, int);
extern rtx get_condition (rtx, rtx *, int);
extern rtx gen_cond_trap (enum rtx_code, rtx, rtx, rtx);
extern rtx expand_builtin (tree, rtx, rtx, enum machine_mode, int);
extern tree std_build_builtin_va_list (void);
extern void std_expand_builtin_va_start (tree, rtx);
extern rtx std_expand_builtin_va_arg (tree, tree);
extern rtx expand_builtin_va_arg (tree, tree);
extern rtx default_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
extern void expand_builtin_setjmp_setup (rtx, rtx);
extern void expand_builtin_setjmp_receiver (rtx);
extern void expand_builtin_longjmp (rtx, rtx);
extern rtx expand_builtin_saveregs (void);
extern void expand_builtin_trap (void);
extern tree simplify_builtin_fputs (tree, int, int, tree);
extern tree simplify_builtin_strcpy (tree, tree);
extern tree simplify_builtin_strncpy (tree, tree);
extern void init_expr_once (void);
extern void init_expr (void);
extern void finish_expr_for_function (void);
extern rtx protect_from_queue (rtx, int);
extern void emit_queue (void);
extern int queued_subexp_p (rtx);
extern void convert_move (rtx, rtx, int);
extern rtx convert_to_mode (enum machine_mode, rtx, int);
extern rtx convert_modes (enum machine_mode, enum machine_mode, rtx, int);
enum block_op_methods
{
  BLOCK_OP_NORMAL,
  BLOCK_OP_NO_LIBCALL,
  BLOCK_OP_CALL_PARM
};
extern void init_block_move_fn (const char *);
extern void init_block_clear_fn (const char *);
extern rtx emit_block_move (rtx, rtx, rtx, enum block_op_methods);
extern void move_block_to_reg (int, rtx, int, enum machine_mode);
extern void move_block_from_reg (int, rtx, int);
extern rtx gen_group_rtx (rtx);
extern void emit_group_load (rtx, rtx, tree, int);
extern void emit_group_move (rtx, rtx);
extern void emit_group_store (rtx, rtx, tree, int);
extern rtx copy_blkmode_from_reg (rtx, rtx, tree);
extern void use_reg (rtx *, rtx);
extern void use_regs (rtx *, int, int);
extern void use_group_regs (rtx *, rtx);
extern rtx clear_storage (rtx, rtx);
extern int can_move_by_pieces (unsigned long, unsigned int);
extern int can_store_by_pieces (unsigned long,
    rtx (*) (void *, long,
      enum machine_mode),
    void *, unsigned int);
extern rtx store_by_pieces (rtx, unsigned long,
       rtx (*) (void *, long, enum machine_mode),
       void *, unsigned int, int);
extern rtx emit_move_insn (rtx, rtx);
extern rtx emit_move_insn_1 (rtx, rtx);
extern rtx push_block (rtx, int, int);
extern void emit_push_insn (rtx, enum machine_mode, tree, rtx, unsigned int,
       int, rtx, int, rtx, rtx, int, rtx);
extern rtx expand_assignment (tree, tree, int);
extern rtx store_expr (tree, rtx, int);
extern rtx force_operand (rtx, rtx);
extern rtx expand_expr_real (tree, rtx, enum machine_mode,
        enum expand_modifier, rtx *);
static rtx
expand_expr (tree exp, rtx target, enum machine_mode mode,
      enum expand_modifier modifier)
{
  return expand_expr_real (exp, target, mode, modifier, ((void *)0));
}
extern void expand_var (tree);
extern void init_pending_stack_adjust (void);
extern void clear_pending_stack_adjust (void);
extern void do_pending_stack_adjust (void);
extern tree string_constant (tree, tree *);
extern void jumpifnot (tree, rtx);
extern void jumpif (tree, rtx);
extern void do_jump (tree, rtx, rtx);
extern rtx compare_from_rtx (rtx, rtx, enum rtx_code, int, enum machine_mode,
        rtx);
extern void do_compare_rtx_and_jump (rtx, rtx, enum rtx_code, int,
         enum machine_mode, rtx, rtx, rtx);
extern int try_casesi (tree, tree, tree, tree, rtx, rtx);
extern int try_tablejump (tree, tree, tree, tree, rtx, rtx);
extern unsigned int case_values_threshold (void);
extern long new_alias_set (void);
extern void record_alias_subset (long, long);
extern long get_varargs_alias_set (void);
extern long get_frame_alias_set (void);
extern void record_base_value (unsigned int, rtx, int);
extern int can_address_p (tree);
extern rtx expr_size (tree);
extern long int_expr_size (tree);
extern rtx fix_lexical_addr (rtx, tree);
extern rtx trampoline_address (tree);
extern rtx hard_function_value (tree, tree, int);
extern rtx prepare_call_address (rtx, rtx, rtx *, int, int);
extern rtx expand_call (tree, rtx, int);
extern void fixup_tail_calls (void);
extern rtx expand_shift (enum tree_code, enum machine_mode, rtx, tree, rtx,
    int);
extern rtx expand_divmod (int, enum tree_code, enum machine_mode, rtx, rtx,
     rtx, int);
extern void locate_and_pad_parm (enum machine_mode, tree, int, int, tree,
     struct args_size *,
     struct locate_and_pad_arg_data *);
extern rtx label_rtx (tree);
extern rtx force_label_rtx (tree);
extern rtx promoted_input_arg (unsigned int, enum machine_mode *, int *);
extern rtx eliminate_constant_term (rtx, rtx *);
extern rtx memory_address (enum machine_mode, rtx);
extern rtx memory_address_noforce (enum machine_mode, rtx);
extern rtx change_address (rtx, enum machine_mode, rtx);
extern rtx adjust_address_1 (rtx, enum machine_mode, long, int, int);
extern rtx adjust_automodify_address_1 (rtx, enum machine_mode, rtx,
     long, int);
extern rtx offset_address (rtx, rtx, unsigned long);
extern void set_mem_alias_set (rtx, long);
extern void set_mem_align (rtx, unsigned int);
extern void set_mem_expr (rtx, tree);
extern void set_mem_offset (rtx, rtx);
extern void set_mem_size (rtx, rtx);
extern rtx replace_equiv_address (rtx, rtx);
extern rtx replace_equiv_address_nv (rtx, rtx);
extern rtx widen_memory_access (rtx, enum machine_mode, long);
extern rtx validize_mem (rtx);
extern void maybe_set_unchanging (rtx, tree);
extern void set_mem_attributes (rtx, tree, int);
extern void set_mem_attributes_minus_bitpos (rtx, tree, int, long);
extern rtx assemble_trampoline_template (void);
extern rtx stabilize (rtx);
extern rtx copy_all_regs (rtx);
extern rtx copy_to_reg (rtx);
extern rtx copy_addr_to_reg (rtx);
extern rtx copy_to_mode_reg (enum machine_mode, rtx);
extern rtx copy_to_suggested_reg (rtx, rtx, enum machine_mode);
extern rtx force_reg (enum machine_mode, rtx);
extern rtx force_not_mem (rtx);
extern enum machine_mode promote_mode (tree, enum machine_mode, int *, int);
extern void adjust_stack (rtx);
extern void anti_adjust_stack (rtx);
enum save_level {SAVE_BLOCK, SAVE_FUNCTION, SAVE_NONLOCAL};
extern void emit_stack_save (enum save_level, rtx *, rtx);
extern void emit_stack_restore (enum save_level, rtx, rtx);
extern void update_nonlocal_goto_save_area (void);
extern rtx allocate_dynamic_stack_space (rtx, rtx, int);
extern void probe_stack_range (long, rtx);
extern rtx hard_libcall_value (enum machine_mode);
extern rtx round_push (rtx);
enum extraction_pattern { EP_insv, EP_extv, EP_extzv };
extern enum machine_mode
mode_for_extraction (enum extraction_pattern, int);
extern rtx store_bit_field (rtx, unsigned long,
       unsigned long, enum machine_mode, rtx,
       long);
extern rtx extract_bit_field (rtx, unsigned long,
         unsigned long, int, rtx,
         enum machine_mode, enum machine_mode,
         long);
extern rtx expand_mult (enum machine_mode, rtx, rtx, rtx, int);
extern unsigned char const_mult_add_overflow_p (rtx, rtx, rtx, enum machine_mode, int);
extern rtx expand_mult_add (rtx, rtx, rtx, rtx,enum machine_mode, int);
extern rtx expand_mult_highpart_adjust (enum machine_mode, rtx, rtx, rtx, rtx, int);
extern rtx assemble_static_space (unsigned long);
extern int safe_from_p (rtx, tree, int);
extern void init_optabs (void);
extern void init_all_optabs (void);
extern rtx init_one_libfunc (const char *);
extern void do_jump_by_parts_equality_rtx (rtx, rtx, rtx);
extern void do_jump_by_parts_greater_rtx (enum machine_mode, int, rtx, rtx,
       rtx, rtx);
extern int vector_mode_valid_p (enum machine_mode);
struct timevar_time_def
{
  double user;
  double sys;
  double wall;
};
typedef enum
{
TV_TOTAL,
TV_GC,
TV_DUMP,
TV_CGRAPH,
TV_CGRAPHOPT,
TV_CFG,
TV_CLEANUP_CFG,
TV_CFG_VERIFY,
TV_DELETE_TRIVIALLY_DEAD,
TV_LIFE,
TV_LIFE_UPDATE,
TV_ALIAS_ANALYSIS,
TV_REG_SCAN,
TV_REBUILD_JUMP,
TV_CPP,
TV_LEX,
TV_PARSE,
TV_NAME_LOOKUP,
TV_INTEGRATION,
TV_TREE_GIMPLIFY,
TV_TREE_EH,
TV_TREE_CFG,
TV_TREE_CLEANUP_CFG,
TV_TREE_PTA,
TV_TREE_MAY_ALIAS,
TV_TREE_INSERT_PHI_NODES,
TV_TREE_SSA_REWRITE_BLOCKS,
TV_TREE_SSA_OTHER,
TV_TREE_OPS,
TV_TREE_SSA_DOMINATOR_OPTS,
TV_TREE_SRA,
TV_TREE_CCP,
TV_TREE_SPLIT_EDGES,
TV_TREE_PRE,
TV_TREE_FRE,
TV_TREE_PHIOPT,
TV_TREE_FORWPROP,
TV_TREE_DCE,
TV_TREE_CD_DCE,
TV_TREE_DSE,
TV_TREE_LOOP,
TV_TREE_CH,
TV_TREE_SSA_TO_NORMAL,
TV_TREE_NRV,
TV_TREE_COPY_RENAME,
TV_TREE_SSA_VERIFY,
TV_TREE_STMT_VERIFY,
TV_CGRAPH_VERIFY,
TV_DOM_FRONTIERS,
TV_CONTROL_DEPENDENCES,
TV_OVERLOAD,
TV_TEMPLATE_INSTANTIATION,
TV_EXPAND,
TV_VARCONST,
TV_JUMP,
TV_CSE,
TV_GCSE,
TV_LOOP,
TV_BYPASS,
TV_TRACER,
TV_WEB,
TV_CSE2,
TV_BRANCH_PROB,
TV_VPT,
TV_FLOW,
TV_COMBINE,
TV_IFCVT,
TV_REGMOVE,
TV_MODE_SWITCH,
TV_SMS,
TV_SCHED,
TV_LOCAL_ALLOC,
TV_GLOBAL_ALLOC,
TV_RELOAD_CSE_REGS,
TV_FLOW2,
TV_IFCVT2,
TV_PEEPHOLE2,
TV_RENAME_REGISTERS,
TV_SCHED2,
TV_MACH_DEP,
TV_DBR_SCHED,
TV_REORDER_BLOCKS,
TV_SHORTEN_BRANCH,
TV_REG_STACK,
TV_FINAL,
TV_SYMOUT,
TV_VAR_TRACKING,
TV_REST_OF_COMPILATION,
  TIMEVAR_LAST
}
timevar_id_t;
extern void timevar_init (void);
extern void timevar_push (timevar_id_t);
extern void timevar_pop (timevar_id_t);
extern void timevar_start (timevar_id_t);
extern void timevar_stop (timevar_id_t);
extern void timevar_get (timevar_id_t, struct timevar_time_def *);
extern void timevar_print (FILE *);
extern void print_time (const char *, long);
extern int toplev_main (unsigned int, const char **);
extern int read_integral_parameter (const char *, const char *, const int);
extern void strip_off_ending (char *, int);
extern const char *trim_filename (const char *);
extern void _fatal_insn_not_found (rtx, const char *, int, const char *)
     ;
extern void _fatal_insn (const char *, rtx, const char *, int, const char *)
     ;
extern void internal_error (const char *, ...)
     ;
extern void warning (const char *, ...);
extern void error (const char *, ...);
extern void fatal_error (const char *, ...)
     ;
extern void pedwarn (const char *, ...);
extern void sorry (const char *, ...);
extern void inform (const char *, ...) ;
extern void rest_of_decl_compilation (tree, const char *, int, int);
extern void rest_of_type_compilation (tree, int);
extern void rest_of_compilation (void);
extern void tree_rest_of_compilation (tree, unsigned char);
extern void init_tree_optimization_passes (void);
extern void init_optimization_passes (void);
extern void finish_optimization_passes (void);
extern unsigned char enable_rtl_dump_file (int);
extern void announce_function (tree);
extern void error_for_asm (rtx, const char *, ...) ;
extern void warning_for_asm (rtx, const char *, ...) ;
extern void warn_deprecated_use (tree);
extern void output_quoted_string (FILE *, const char *);
extern void output_file_directive (FILE *, const char *);
extern void fnotice (FILE *, const char *, ...)
     ;
extern int wrapup_global_declarations (tree *, int);
extern void check_global_declarations (tree *, int);
extern void write_global_declarations (void);
extern unsigned local_tick;
extern const char *progname;
extern const char *dump_base_name;
extern const char *aux_base_name;
extern const char *aux_info_file_name;
extern const char *asm_file_name;
extern unsigned char exit_after_options;
extern int target_flags_explicit;
extern int flag_loop_optimize;
extern int flag_crossjumping;
extern int flag_if_conversion;
extern int flag_if_conversion2;
extern int flag_keep_static_consts;
extern int flag_peel_loops;
extern int flag_rerun_cse_after_loop;
extern int flag_thread_jumps;
extern int flag_tracer;
extern int flag_unroll_loops;
extern int flag_unroll_all_loops;
extern int flag_unswitch_loops;
extern int flag_cprop_registers;
extern int time_report;
extern int flag_new_regalloc;
extern int flag_tree_based_profiling;
extern void display_target_options (void);
extern void print_version (FILE *, const char *);
extern void set_target_switch (const char *);
extern void * default_get_pch_validity (size_t *);
extern const char * default_pch_valid_p (const void *, size_t);
extern struct ht *ident_hash;
extern void set_fast_math_flags (int);
extern void decode_d_option (const char *);
extern unsigned char fast_math_flags_set_p (void);
extern int exact_log2_wide (unsigned long);
extern int floor_log2_wide (unsigned long);
extern const char *get_src_pwd (void);
extern unsigned char set_src_pwd (const char *);
struct function;
struct inline_remap;
struct eh_status;
struct eh_region;
extern int doing_eh (int);
extern void expand_eh_region_start (void);
extern void expand_eh_region_end_cleanup (tree);
extern void expand_start_all_catch (void);
extern void expand_start_catch (tree);
extern void expand_end_catch (void);
extern void expand_end_all_catch (void);
extern void expand_eh_region_end_allowed (tree, tree);
extern void expand_eh_region_end_must_not_throw (tree);
extern void expand_eh_region_end_throw (tree);
extern void expand_eh_region_end_fixup (tree);
extern void expand_eh_handler (tree);
extern void note_eh_region_may_contain_throw (struct eh_region *);
extern void note_current_region_may_contain_throw (void);
extern void for_each_eh_label (void (*) (rtx));
extern void for_each_eh_region (void (*) (struct eh_region *));
extern unsigned char can_throw_internal_1 (int);
extern unsigned char can_throw_internal (rtx);
extern unsigned char can_throw_external_1 (int);
extern unsigned char can_throw_external (rtx);
extern void set_nothrow_function_flags (void);
extern void finish_eh_generation (void);
extern void init_eh (void);
extern void init_eh_for_function (void);
extern rtx reachable_handlers (rtx);
extern void maybe_remove_eh_handler (rtx);
extern void convert_from_eh_region_ranges (void);
extern void convert_to_eh_region_ranges (void);
extern void find_exception_handler_labels (void);
extern unsigned char current_function_has_exception_handlers (void);
extern void output_function_exception_table (void);
extern void expand_builtin_unwind_init (void);
extern rtx expand_builtin_eh_return_data_regno (tree);
extern rtx expand_builtin_extract_return_addr (tree);
extern void expand_builtin_init_dwarf_reg_sizes (tree);
extern rtx expand_builtin_frob_return_addr (tree);
extern rtx expand_builtin_dwarf_sp_column (void);
extern void expand_builtin_eh_return (tree, tree);
extern void expand_eh_return (void);
extern rtx expand_builtin_extend_pointer (tree);
extern rtx get_exception_pointer (struct function *);
extern rtx get_exception_filter (struct function *);
extern int duplicate_eh_regions (struct function *, struct inline_remap *);
extern int check_handled (tree, tree);
extern void sjlj_emit_function_exit_after (rtx);
extern struct eh_region *gen_eh_region_cleanup (struct eh_region *,
      struct eh_region *);
extern struct eh_region *gen_eh_region_try (struct eh_region *);
extern struct eh_region *gen_eh_region_catch (struct eh_region *, tree);
extern struct eh_region *gen_eh_region_allowed (struct eh_region *, tree);
extern struct eh_region *gen_eh_region_must_not_throw (struct eh_region *);
extern int get_eh_region_number (struct eh_region *);
extern unsigned char get_eh_region_may_contain_throw (struct eh_region *);
extern tree get_eh_region_tree_label (struct eh_region *);
extern void set_eh_region_tree_label (struct eh_region *, tree);
extern void foreach_reachable_handler (int, unsigned char,
           void (*) (struct eh_region *, void *),
           void *);
extern void collect_eh_region_array (void);
extern void expand_resx_expr (tree);
extern int lookup_stmt_eh_region (tree);
extern tree (*lang_protect_cleanup_actions) (void);
extern int (*lang_eh_type_covers) (tree a, tree b);
extern tree (*lang_eh_runtime_type) (tree);
enum lpt_dec
{
  LPT_NONE,
  LPT_PEEL_COMPLETELY,
  LPT_PEEL_SIMPLE,
  LPT_UNROLL_CONSTANT,
  LPT_UNROLL_RUNTIME,
  LPT_UNROLL_STUPID
};
struct lpt_decision
{
  enum lpt_dec decision;
  unsigned times;
};
struct loop
{
  int num;
  basic_block header1;
  basic_block latch;
  basic_block pre_header;
  struct lpt_decision lpt_decision;
  unsigned ninsns;
  unsigned av_ninsns;
  edge *pre_header_edges;
  int num_pre_header_edges;
  basic_block first;
  basic_block last;
  sbitmap nodes;
  unsigned num_nodes;
  edge *entry_edges;
  int num_entries;
  edge *exit_edges;
  int num_exits;
  sbitmap exits_doms;
  int depth;
  struct loop **pred;
  int level;
  struct loop *outer;
  struct loop *inner;
  struct loop *next;
  struct loop *copy;
  int invalid;
  void *aux;
  rtx vtop;
  rtx cont;
  rtx cont_dominator;
  rtx start;
  rtx end;
  rtx top;
  rtx scan_start;
  rtx sink;
  rtx exit_labels;
  int exit_count;
};
enum
{
  LOOPS_HAVE_PREHEADERS = 1,
  LOOPS_HAVE_SIMPLE_LATCHES = 2,
  LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS = 4
};
struct loops
{
  unsigned num;
  unsigned levels;
  struct loop *array;
  struct loop **parray;
  struct loop *tree_root;
  struct cfg
  {
    int *dfs_order;
    int *rc_order;
  } cfg;
  sbitmap shared_headers;
  int state;
};
extern int flow_loops_find (struct loops *, int flags);
extern int flow_loops_update (struct loops *, int flags);
extern void flow_loops_free (struct loops *);
extern void flow_loops_dump (const struct loops *, FILE *,
        void (*)(const struct loop *, FILE *, int), int);
extern void flow_loop_dump (const struct loop *, FILE *,
       void (*)(const struct loop *, FILE *, int), int);
extern int flow_loop_scan (struct loop *, int);
extern void flow_loop_free (struct loop *);
void mark_irreducible_loops (struct loops *);
extern void create_loop_notes (void);
extern void flow_loop_tree_node_add (struct loop *, struct loop *);
extern void flow_loop_tree_node_remove (struct loop *);
extern unsigned char flow_loop_outside_edge_p (const struct loop *, edge);
extern unsigned char flow_loop_nested_p (const struct loop *, const struct loop *);
extern unsigned char flow_bb_inside_loop_p (const struct loop *, const basic_block);
extern struct loop * find_common_loop (struct loop *, struct loop *);
extern int num_loop_insns (struct loop *);
extern int average_num_loop_insns (struct loop *);
extern unsigned get_loop_level (const struct loop *);
extern basic_block *get_loop_body (const struct loop *);
extern basic_block *get_loop_body_in_dom_order (const struct loop *);
extern edge *get_loop_exit_edges (const struct loop *, unsigned *);
extern unsigned num_loop_branches (const struct loop *);
extern edge loop_preheader_edge (const struct loop *);
extern edge loop_latch_edge (const struct loop *);
extern void add_bb_to_loop (basic_block, struct loop *);
extern void remove_bb_from_loops (basic_block);
extern void cancel_loop (struct loops *, struct loop *);
extern void cancel_loop_tree (struct loops *, struct loop *);
extern basic_block loop_split_edge_with (edge, rtx);
extern int fix_loop_placement (struct loop *);
enum
{
  CP_SIMPLE_PREHEADERS = 1
};
extern void create_preheaders (struct loops *, int);
extern void force_single_succ_latches (struct loops *);
extern void verify_loop_structure (struct loops *);
extern unsigned char just_once_each_iteration_p (struct loop *, basic_block);
extern unsigned expected_loop_iterations (const struct loop *);
extern unsigned char can_duplicate_loop_p (struct loop *loop);
extern int duplicate_loop_to_header_edge (struct loop *, edge, struct loops *,
       unsigned, sbitmap, edge, edge *,
       unsigned *, int);
extern struct loop *loopify (struct loops *, edge, edge, basic_block);
extern void unloop (struct loops *, struct loop *);
extern unsigned char remove_path (struct loops *, edge);
extern edge split_loop_bb (basic_block, rtx);
struct rtx_iv
{
  rtx base, step;
  enum rtx_code extend;
  rtx delta, mult;
  enum machine_mode extend_mode;
  enum machine_mode mode;
  unsigned analysed : 1;
  unsigned first_special : 1;
};
struct niter_desc
{
  edge out_edge;
  edge in_edge;
  unsigned char simple_p;
  unsigned char const_iter;
  unsigned long long niter;
  unsigned long long niter_max;
  rtx assumptions;
  rtx noloop_assumptions;
  rtx infinite;
  unsigned char signed_p;
  enum machine_mode mode;
  rtx niter_expr;
};
extern void iv_analysis_loop_init (struct loop *);
extern rtx iv_get_reaching_def (rtx, rtx);
extern unsigned char iv_analyze (rtx, rtx, struct rtx_iv *);
extern rtx get_iv_value (struct rtx_iv *, rtx);
extern void find_simple_exit (struct loop *, struct niter_desc *);
extern void iv_number_of_iterations (struct loop *, rtx, rtx,
         struct niter_desc *);
extern void iv_analysis_done (void);
extern struct niter_desc *get_simple_loop_desc (struct loop *loop);
extern void free_simple_loop_desc (struct loop *loop);
static struct niter_desc *
simple_loop_desc (struct loop *loop)
{
  return loop->aux;
}
extern unsigned global_cost_for_size (unsigned, unsigned, unsigned);
extern void init_set_costs (void);
extern struct loops *loop_optimizer_init (FILE *);
extern void loop_optimizer_finalize (struct loops *, FILE *);
extern void unswitch_loops (struct loops *);
enum
{
  UAP_PEEL = 1,
  UAP_UNROLL = 2,
  UAP_UNROLL_ALL = 4
};
extern void unroll_and_peel_loops (struct loops *, int);
extern void doloop_optimize_loops (struct loops *);
extern void move_loop_invariants (struct loops *);
static const int initial_cfg_capacity = 20;
static varray_type label_to_block_map;
struct cfg_stats_d
{
  long num_merged_labels;
};
static struct cfg_stats_d cfg_stats;
static unsigned char found_computed_goto;
static basic_block create_bb (void *, void *, basic_block);
static void create_block_annotation (basic_block);
static void free_blocks_annotations (void);
static void clear_blocks_annotations (void);
static void make_blocks (tree);
static void factor_computed_gotos (void);
static void make_cfg_edges (void);
static void make_ctrl_stmt_edges (basic_block);
static void make_exit_edges (basic_block);
static void make_cond_expr_edges (basic_block);
static void make_switch_expr_edges (basic_block);
static void make_goto_expr_edges (basic_block);
static edge tree_redirect_edge_and_branch (edge, basic_block);
static edge tree_try_redirect_by_replacing_jump (edge, basic_block);
static void split_critical_edges (void);
static unsigned char stmt_starts_bb_p (tree, tree);
static int tree_verify_flow_info (void);
static void tree_make_forwarder_block (edge);
static unsigned char thread_jumps (void);
static unsigned char tree_forwarder_block_p (basic_block);
static void bsi_commit_edge_inserts_1 (edge e);
static void tree_cfg2vcg (FILE *);
static void tree_merge_blocks (basic_block, basic_block);
static unsigned char tree_can_merge_blocks_p (basic_block, basic_block);
static void remove_bb (basic_block);
static void group_case_labels (void);
static void cleanup_dead_labels (void);
static unsigned char cleanup_control_flow (void);
static unsigned char cleanup_control_expr_graph (basic_block, block_stmt_iterator);
static edge find_taken_edge_cond_expr (basic_block, tree);
static edge find_taken_edge_switch_expr (basic_block, tree);
static tree find_case_label_for_value (tree, tree);
static unsigned char phi_alternatives_equal (basic_block, edge, edge);
static void
build_tree_cfg (tree *tp)
{
  tree_register_cfg_hooks ();
  alloc_rbi_pool ();
  init_flow ();
  n_basic_blocks = 0;
  last_basic_block = 0;
  basic_block_info = varray_init (initial_cfg_capacity, VARRAY_DATA_BB, "basic_block_info");
  memset ((void *) &cfg_stats, 0, sizeof (cfg_stats));
  label_to_block_map = varray_init (initial_cfg_capacity, VARRAY_DATA_BB, "label to block map")
                         ;
  ENTRY_BLOCK_PTR->next_bb = EXIT_BLOCK_PTR;
  EXIT_BLOCK_PTR->prev_bb = ENTRY_BLOCK_PTR;
  found_computed_goto = 0;
  make_blocks (*tp);
  if (found_computed_goto)
    factor_computed_gotos ();
  if (n_basic_blocks == 0)
    create_empty_bb (ENTRY_BLOCK_PTR);
  create_block_annotation (ENTRY_BLOCK_PTR);
  create_block_annotation (EXIT_BLOCK_PTR);
  ((basic_block_info) = varray_grow (basic_block_info, n_basic_blocks));
  cleanup_dead_labels ();
  group_case_labels ();
  make_cfg_edges ();
  {
    int local_dump_flags;
    FILE *dump_file = dump_begin (TDI_vcg, &local_dump_flags);
    if (dump_file)
      {
 tree_cfg2vcg (dump_file);
 dump_end (TDI_vcg, dump_file);
      }
  }
  if (dump_file)
    dump_tree_cfg (dump_file, dump_flags);
}
static void
execute_build_cfg (void)
{
  build_tree_cfg (&((current_function_decl)->decl.saved_tree));
}
struct tree_opt_pass pass_build_cfg =
{
  "cfg",
  ((void *)0),
  execute_build_cfg,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_CFG,
  (1 << 2),
  (1 << 3),
  0,
  0,
  (1 << 5)
};
static void
factor_computed_gotos (void)
{
  basic_block bb;
  tree factored_label_decl = ((void *)0);
  tree var = ((void *)0);
  tree factored_computed_goto_label = ((void *)0);
  tree factored_computed_goto = ((void *)0);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      block_stmt_iterator bsi = bsi_last (bb);
      tree last;
      if (bsi_end_p (bsi))
 continue;
      last = bsi_stmt (bsi);
      if (last == factored_computed_goto)
 continue;
      if (computed_goto_p (last))
 {
   tree assignment;
   if (! factored_computed_goto)
     {
       basic_block new_bb = create_empty_bb (bb);
       block_stmt_iterator new_bsi = bsi_start (new_bb);
       var = create_tmp_var (global_trees[TI_PTR_TYPE], "gotovar");
       factored_label_decl = create_artificial_label ();
       factored_computed_goto_label
  = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],factored_label_decl );
       bsi_insert_after (&new_bsi, factored_computed_goto_label,
    BSI_NEW_STMT);
       factored_computed_goto = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],var );
       bsi_insert_after (&new_bsi, factored_computed_goto,
    BSI_NEW_STMT);
     }
   assignment = build (MODIFY_EXPR, global_trees[TI_PTR_TYPE],
         var, (((last))->exp.operands[0]));
   bsi_insert_before (&bsi, assignment, BSI_SAME_STMT);
   (((last))->exp.operands[0]) = factored_label_decl;
 }
    }
}
static void
create_block_annotation (basic_block bb)
{
  if (bb->tree_annotations)
    fancy_abort ("gcc.c", 99436, "?");
  bb->tree_annotations = ggc_alloc_cleared_stat (sizeof (struct bb_ann_d) );
}
static void free_blocks_annotations (void)
{
  clear_blocks_annotations ();
}
static void
clear_blocks_annotations (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    bb->tree_annotations = ((void *)0);
}
static void
make_blocks (tree stmt_list)
{
  tree_stmt_iterator i = tsi_start (stmt_list);
  tree stmt = ((void *)0);
  unsigned char start_new_block = 1;
  unsigned char first_stmt_of_list = 1;
  basic_block bb = ENTRY_BLOCK_PTR;
  while (!tsi_end_p (i))
    {
      tree prev_stmt;
      prev_stmt = stmt;
      stmt = tsi_stmt (i);
      if (start_new_block || stmt_starts_bb_p (stmt, prev_stmt))
 {
   if (!first_stmt_of_list)
     stmt_list = tsi_split_statement_list_before (&i);
   bb = create_basic_block (stmt_list, ((void *)0), bb);
   start_new_block = 0;
 }
      set_bb_for_stmt (stmt, bb);
      if (computed_goto_p (stmt))
 found_computed_goto = 1;
      if (stmt_ends_bb_p (stmt))
 start_new_block = 1;
      tsi_next (&i);
      first_stmt_of_list = 0;
    }
}
static basic_block
create_bb (void *h, void *e, basic_block after)
{
  basic_block bb;
  if (e)
    fancy_abort ("gcc.c", 99516, "?");
  bb = alloc_block ();
  memset (bb, 0, sizeof (*bb));
  bb->index = last_basic_block;
  bb->flags = 2;
  bb->stmt_list = h ? h : alloc_stmt_list ();
  link_block (bb, after);
  if ((size_t) last_basic_block == ((basic_block_info)->num_elements))
    {
      size_t new_size = last_basic_block + (last_basic_block + 3) / 4;
      ((basic_block_info) = varray_grow (basic_block_info, new_size));
    }
  (((basic_block_info)->data.bb[(last_basic_block)])) = bb;
  create_block_annotation (bb);
  n_basic_blocks++;
  last_basic_block++;
  initialize_bb_rbi (bb);
  return bb;
}
static void
make_cfg_edges (void)
{
  basic_block bb;
  make_edge (ENTRY_BLOCK_PTR, (((basic_block_info)->data.bb[(0)])), 1);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree first = first_stmt (bb);
      tree last = last_stmt (bb);
      if (first)
 {
   if (is_ctrl_stmt (last))
     make_ctrl_stmt_edges (bb);
   if (is_ctrl_altering_stmt (last))
     make_exit_edges (bb);
 }
      if (bb->succ == ((void *)0))
 make_edge (bb, bb->next_bb, 1);
    }
  remove_fake_edges ();
  cleanup_tree_cfg ();
}
static void
make_ctrl_stmt_edges (basic_block bb)
{
  tree last = last_stmt (bb);
  tree first = first_stmt (bb);
  if (((enum tree_code) (first)->common.code) == LABEL_EXPR
      && (((((first))->exp.operands[0]))->decl.nonlocal_flag))
    make_edge (ENTRY_BLOCK_PTR, bb, 2);
  switch (((enum tree_code) (last)->common.code))
    {
    case GOTO_EXPR:
      make_goto_expr_edges (bb);
      break;
    case RETURN_EXPR:
      make_edge (bb, EXIT_BLOCK_PTR, 0);
      break;
    case COND_EXPR:
      make_cond_expr_edges (bb);
      break;
    case SWITCH_EXPR:
      make_switch_expr_edges (bb);
      break;
    case RESX_EXPR:
      make_eh_edges (last);
      if (bb->succ == ((void *)0))
 make_edge (bb, EXIT_BLOCK_PTR, 16);
      break;
    default:
      fancy_abort ("gcc.c", 99639, "?");
    }
}
static void
make_exit_edges (basic_block bb)
{
  tree last = last_stmt (bb);
  if (last == (tree) ((void *)0))
    fancy_abort ("gcc.c", 99654, "?");
  switch (((enum tree_code) (last)->common.code))
    {
    case CALL_EXPR:
      if (((last)->common.side_effects_flag)
   && (cfun->has_nonlocal_label))
 make_goto_expr_edges (bb);
      make_eh_edges (last);
      if (call_expr_flags (last) & (2 | 64))
 {
   make_edge (bb, EXIT_BLOCK_PTR, 16);
   return;
 }
      make_edge (bb, bb->next_bb, 1);
      break;
    case MODIFY_EXPR:
      if (((enum tree_code) (((last)->exp.operands[1]))->common.code) == CALL_EXPR
   && ((((last)->exp.operands[1]))->common.side_effects_flag)
   && (cfun->has_nonlocal_label))
 make_goto_expr_edges (bb);
      make_eh_edges (last);
      make_edge (bb, bb->next_bb, 1);
      break;
    default:
      fancy_abort ("gcc.c", 99701, "?");
    }
}
static void
make_cond_expr_edges (basic_block bb)
{
  tree entry = last_stmt (bb);
  basic_block then_bb, else_bb;
  tree then_label, else_label;
  then_label = (((((((entry))->exp.operands[1]))))->exp.operands[0]);
  else_label = (((((((entry))->exp.operands[2]))))->exp.operands[0]);
  then_bb = label_to_block (then_label);
  else_bb = label_to_block (else_label);
  make_edge (bb, then_bb, 1024);
  make_edge (bb, else_bb, 2048);
}
static void
make_switch_expr_edges (basic_block bb)
{
  tree entry = last_stmt (bb);
  size_t i, n;
  tree vec;
  vec = (((entry))->exp.operands[2]);
  n = ((vec)->vec.length);
  for (i = 0; i < n; ++i)
    {
      tree lab = (((((vec)->vec.a[i])))->exp.operands[2]);
      basic_block label_bb = label_to_block (lab);
      make_edge (bb, label_bb, 0);
    }
}
basic_block
label_to_block (tree dest)
{
  int uid = ((dest)->decl.pointer_alias_set);
  if (((global_dc)->diagnostic_count[(int) (DK_ERROR)] || (global_dc)->diagnostic_count[(int) (DK_SORRY)]) && uid < 0)
    {
      block_stmt_iterator bsi = bsi_start ((((basic_block_info)->data.bb[(0)])));
      tree stmt;
      stmt = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],dest );
      bsi_insert_before (&bsi, stmt, BSI_NEW_STMT);
      uid = ((dest)->decl.pointer_alias_set);
    }
  return ((label_to_block_map)->data.bb[uid]);
}
static void
make_goto_expr_edges (basic_block bb)
{
  tree goto_t, dest;
  basic_block target_bb;
  int for_call;
  block_stmt_iterator last = bsi_last (bb);
  goto_t = bsi_stmt (last);
  if (((enum tree_code) (goto_t)->common.code) != GOTO_EXPR)
    {
      dest = global_trees[TI_ERROR_MARK];
      for_call = 1;
    }
  else
    {
      dest = (((goto_t))->exp.operands[0]);
      for_call = 0;
      if (simple_goto_p (goto_t))
 {
   edge e = make_edge (bb, label_to_block (dest), 1);
   e->goto_locus = ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (goto_t)->common.code))])) != 0) ? (goto_t)->exp.locus : (location_t *)((void *)0));
   bsi_remove (&last);
   return;
 }
      if (((enum tree_code) (dest)->common.code) == LABEL_DECL)
 return;
    }
  for (target_bb = ENTRY_BLOCK_PTR->next_bb; target_bb != EXIT_BLOCK_PTR; target_bb = target_bb->next_bb)
    {
      block_stmt_iterator bsi;
      for (bsi = bsi_start (target_bb); !bsi_end_p (bsi); bsi_next (&bsi))
 {
   tree target = bsi_stmt (bsi);
   if (((enum tree_code) (target)->common.code) != LABEL_EXPR)
     break;
   if (
       ((((((target))->exp.operands[0]))->common.side_effects_flag) && for_call == 0)
       || ((((((target))->exp.operands[0]))->decl.nonlocal_flag) && for_call == 1))
     {
       make_edge (bb, target_bb, 2);
       break;
     }
 }
    }
  if (!for_call && !bb->succ)
    make_edge (bb, EXIT_BLOCK_PTR, 16);
}
void
cleanup_tree_cfg (void)
{
  unsigned char something_changed = 1;
  timevar_push (TV_TREE_CLEANUP_CFG);
  while (something_changed)
    {
      something_changed = cleanup_control_flow ();
      something_changed |= thread_jumps ();
      something_changed |= delete_unreachable_blocks ();
    }
  merge_seq_blocks ();
  compact_blocks ();
  timevar_pop (TV_TREE_CLEANUP_CFG);
}
static tree *label_for_bb;
static void
update_eh_label (struct eh_region *region)
{
  tree old_label = get_eh_region_tree_label (region);
  if (old_label)
    {
      tree new_label = label_for_bb[label_to_block (old_label)->index];
      set_eh_region_tree_label (region, new_label);
    }
}
static tree
main_block_label (tree label)
{
  basic_block bb = label_to_block (label);
  if (!label_for_bb[bb->index])
    label_for_bb[bb->index] = label;
  return label_for_bb[bb->index];
}
static void
cleanup_dead_labels (void)
{
  basic_block bb;
  label_for_bb = xcalloc (last_basic_block, sizeof (tree));
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      block_stmt_iterator i;
      for (i = bsi_start (bb); !bsi_end_p (i); bsi_next (&i))
 {
   tree label, stmt = bsi_stmt (i);
   if (((enum tree_code) (stmt)->common.code) != LABEL_EXPR)
     break;
   label = (((stmt))->exp.operands[0]);
   if (! label_for_bb[bb->index])
     {
       label_for_bb[bb->index] = label;
       continue;
     }
   if (! ((label)->decl.artificial_flag)
       && ((label_for_bb[bb->index])->decl.artificial_flag))
     {
       label_for_bb[bb->index] = label;
       break;
     }
 }
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree stmt = last_stmt (bb);
      if (!stmt)
 continue;
      switch (((enum tree_code) (stmt)->common.code))
 {
 case COND_EXPR:
   {
     tree true_branch, false_branch;
     true_branch = ((((stmt))->exp.operands[1]));
     false_branch = ((((stmt))->exp.operands[2]));
     (((true_branch))->exp.operands[0])
       = main_block_label ((((true_branch))->exp.operands[0]));
     (((false_branch))->exp.operands[0])
       = main_block_label ((((false_branch))->exp.operands[0]));
     break;
   }
 case SWITCH_EXPR:
   {
     size_t i;
     tree vec = (((stmt))->exp.operands[2]);
     size_t n = ((vec)->vec.length);
     for (i = 0; i < n; ++i)
       (((((vec)->vec.a[i])))->exp.operands[2])
  = main_block_label ((((((vec)->vec.a[i])))->exp.operands[2]));
     break;
   }
 case GOTO_EXPR:
          if (! computed_goto_p (stmt))
     {
       (((stmt))->exp.operands[0])
  = main_block_label ((((stmt))->exp.operands[0]));
       break;
     }
 default:
   break;
      }
    }
  for_each_eh_region (update_eh_label);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      block_stmt_iterator i;
      tree label_for_this_bb = label_for_bb[bb->index];
      if (! label_for_this_bb)
 continue;
      for (i = bsi_start (bb); !bsi_end_p (i); )
 {
   tree label, stmt = bsi_stmt (i);
   if (((enum tree_code) (stmt)->common.code) != LABEL_EXPR)
     break;
   label = (((stmt))->exp.operands[0]);
   if (label == label_for_this_bb
       || ! ((label)->decl.artificial_flag)
       || ((label)->decl.nonlocal_flag))
     bsi_next (&i);
   else
     bsi_remove (&i);
 }
    }
  free (label_for_bb);
}
static void
group_case_labels (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree stmt = last_stmt (bb);
      if (stmt && ((enum tree_code) (stmt)->common.code) == SWITCH_EXPR)
 {
   tree labels = (((stmt))->exp.operands[2]);
   int old_size = ((labels)->vec.length);
   int i, j, new_size = old_size;
          i = 0;
   while (i < old_size - 2)
     {
       tree base_case, base_label, base_high, type;
       base_case = ((labels)->vec.a[i]);
       if (! base_case)
  fancy_abort ("gcc.c", 100089, "?");
       type = (((((base_case))->exp.operands[0]))->common.type);
       base_label = (((base_case))->exp.operands[2]);
       base_high = (((base_case))->exp.operands[1]) ?
  (((base_case))->exp.operands[1]) : (((base_case))->exp.operands[0]);
       while (i < old_size - 2)
  {
    tree merge_case = ((labels)->vec.a[++i]);
           tree merge_label = (((merge_case))->exp.operands[2]);
    tree t = int_const_binop (PLUS_EXPR, base_high,
         global_trees[TI_INTEGER_ONE], 1);
    if (merge_label == base_label
        && tree_int_cst_equal ((((merge_case))->exp.operands[0]), t))
      {
        base_high = (((merge_case))->exp.operands[1]) ?
   (((merge_case))->exp.operands[1]) : (((merge_case))->exp.operands[0]);
        (((base_case))->exp.operands[1]) = base_high;
        ((labels)->vec.a[i]) = (tree) ((void *)0);
        new_size--;
      }
    else
      break;
  }
     }
   for (i = 0, j = 0; i < new_size; i++)
     {
       while (! ((labels)->vec.a[j]))
  j++;
       ((labels)->vec.a[i]) = ((labels)->vec.a[j++]);
     }
   ((labels)->vec.length) = new_size;
 }
    }
}
static unsigned char
tree_can_merge_blocks_p (basic_block a, basic_block b)
{
  tree stmt;
  block_stmt_iterator bsi;
  if (!a->succ
      || a->succ->succ_next)
    return 0;
  if (a->succ->flags & 2)
    return 0;
  if (a->succ->dest != b)
    return 0;
  if (b == EXIT_BLOCK_PTR)
    return 0;
  if (b->pred->pred_next)
    return 0;
  stmt = last_stmt (a);
  if (stmt && stmt_ends_bb_p (stmt))
    return 0;
  if (stmt && ((enum tree_code) (stmt)->common.code) == LABEL_EXPR
      && (((((stmt))->exp.operands[0]))->decl.nonlocal_flag))
    return 0;
  if (phi_nodes (b))
    return 0;
  for (bsi = bsi_start (b); !bsi_end_p (bsi); bsi_next (&bsi))
    {
      stmt = bsi_stmt (bsi);
      if (((enum tree_code) (stmt)->common.code) != LABEL_EXPR)
 break;
      if (!(((((stmt))->exp.operands[0]))->decl.artificial_flag))
 return 0;
    }
  return 1;
}
static void
tree_merge_blocks (basic_block a, basic_block b)
{
  block_stmt_iterator bsi;
  tree_stmt_iterator last;
  if (dump_file)
    fprintf (dump_file, "Merging blocks %d and %d\n", a->index, b->index);
  move_block_after (b, a);
  if (!(a->succ->flags & 1))
    fancy_abort ("gcc.c", 100204, "?");
  if (last_stmt (a)
      && stmt_ends_bb_p (last_stmt (a)))
    fancy_abort ("gcc.c", 100208, "?");
  for (bsi = bsi_start (b); !bsi_end_p (bsi);)
    {
      if (((enum tree_code) (bsi_stmt (bsi))->common.code) == LABEL_EXPR)
 bsi_remove (&bsi);
      else
 {
   set_bb_for_stmt (bsi_stmt (bsi), a);
   bsi_next (&bsi);
 }
    }
  last = tsi_last (a->stmt_list);
  tsi_link_after (&last, b->stmt_list, TSI_NEW_STMT);
  b->stmt_list = ((void *)0);
}
struct rus_data
{
  tree *last_goto;
  unsigned char repeat;
  unsigned char may_throw;
  unsigned char may_branch;
  unsigned char has_label;
};
static void remove_useless_stmts_1 (tree *, struct rus_data *);
static unsigned char
remove_useless_stmts_warn_notreached (tree stmt)
{
  if ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (stmt)->common.code))])) != 0) ? (stmt)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    {
      location_t loc = ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (stmt)->common.code))])) != 0) ? (stmt)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) ? *(stmt)->exp.locus : unknown_location);
      warning ("%Hwill never be executed", &loc);
      return 1;
    }
  switch (((enum tree_code) (stmt)->common.code))
    {
    case STATEMENT_LIST:
      {
 tree_stmt_iterator i;
 for (i = tsi_start (stmt); !tsi_end_p (i); tsi_next (&i))
   if (remove_useless_stmts_warn_notreached (tsi_stmt (i)))
     return 1;
      }
      break;
    case COND_EXPR:
      if (remove_useless_stmts_warn_notreached (((((stmt))->exp.operands[0]))))
 return 1;
      if (remove_useless_stmts_warn_notreached (((((stmt))->exp.operands[1]))))
 return 1;
      if (remove_useless_stmts_warn_notreached (((((stmt))->exp.operands[2]))))
 return 1;
      break;
    case TRY_FINALLY_EXPR:
    case TRY_CATCH_EXPR:
      if (remove_useless_stmts_warn_notreached (((stmt)->exp.operands[0])))
 return 1;
      if (remove_useless_stmts_warn_notreached (((stmt)->exp.operands[1])))
 return 1;
      break;
    case CATCH_EXPR:
      return remove_useless_stmts_warn_notreached ((((stmt))->exp.operands[1]));
    case EH_FILTER_EXPR:
      return remove_useless_stmts_warn_notreached ((((stmt))->exp.operands[1]));
    case BIND_EXPR:
      return remove_useless_stmts_warn_notreached (((((stmt))->exp.operands[2])));
    default:
      break;
    }
  return 0;
}
static void
remove_useless_stmts_cond (tree *stmt_p, struct rus_data *data)
{
  tree then_clause, else_clause, cond;
  unsigned char save_has_label, then_has_label, else_has_label;
  save_has_label = data->has_label;
  data->has_label = 0;
  data->last_goto = ((void *)0);
  remove_useless_stmts_1 (&((((*stmt_p))->exp.operands[1])), data);
  then_has_label = data->has_label;
  data->has_label = 0;
  data->last_goto = ((void *)0);
  remove_useless_stmts_1 (&((((*stmt_p))->exp.operands[2])), data);
  else_has_label = data->has_label;
  data->has_label = save_has_label | then_has_label | else_has_label;
  fold_stmt (stmt_p);
  then_clause = ((((*stmt_p))->exp.operands[1]));
  else_clause = ((((*stmt_p))->exp.operands[2]));
  cond = ((((*stmt_p))->exp.operands[0]));
  if (!((then_clause)->common.side_effects_flag) && !((else_clause)->common.side_effects_flag))
    {
      *stmt_p = build_empty_stmt ();
      data->repeat = 1;
    }
  else if (integer_nonzerop (cond) && !else_has_label)
    {
      if (warn_notreached)
 remove_useless_stmts_warn_notreached (else_clause);
      *stmt_p = then_clause;
      data->repeat = 1;
    }
  else if (integer_zerop (cond) && !then_has_label)
    {
      if (warn_notreached)
 remove_useless_stmts_warn_notreached (then_clause);
      *stmt_p = else_clause;
      data->repeat = 1;
    }
  else
    {
      tree then_stmt = expr_only (then_clause);
      tree else_stmt = expr_only (else_clause);
      if (then_stmt && else_stmt
   && ((enum tree_code) (then_stmt)->common.code) == GOTO_EXPR
   && ((enum tree_code) (else_stmt)->common.code) == GOTO_EXPR
   && ((((then_stmt))->exp.operands[0]) == (((else_stmt))->exp.operands[0])))
 {
   *stmt_p = then_stmt;
   data->repeat = 1;
 }
      else if (((enum tree_code) (cond)->common.code) == VAR_DECL || ((enum tree_code) (cond)->common.code) == PARM_DECL)
 {
   if (else_stmt
       && ((enum tree_code) (else_stmt)->common.code) == MODIFY_EXPR
       && ((else_stmt)->exp.operands[0]) == cond
       && integer_zerop (((else_stmt)->exp.operands[1])))
     ((((*stmt_p))->exp.operands[2])) = alloc_stmt_list ();
 }
      else if ((((enum tree_code) (cond)->common.code) == EQ_EXPR || ((enum tree_code) (cond)->common.code) == NE_EXPR)
        && (((enum tree_code) (((cond)->exp.operands[0]))->common.code) == VAR_DECL
     || ((enum tree_code) (((cond)->exp.operands[0]))->common.code) == PARM_DECL)
        && ((((cond)->exp.operands[1]))->common.constant_flag))
 {
   tree stmt = (((enum tree_code) (cond)->common.code) == EQ_EXPR
         ? then_stmt : else_stmt);
   tree *location = (((enum tree_code) (cond)->common.code) == EQ_EXPR
       ? &((((*stmt_p))->exp.operands[1]))
       : &((((*stmt_p))->exp.operands[2])));
   if (stmt
       && ((enum tree_code) (stmt)->common.code) == MODIFY_EXPR
       && ((stmt)->exp.operands[0]) == ((cond)->exp.operands[0])
       && ((stmt)->exp.operands[1]) == ((cond)->exp.operands[1]))
     *location = alloc_stmt_list ();
 }
    }
  data->last_goto = ((void *)0);
}
static void
remove_useless_stmts_tf (tree *stmt_p, struct rus_data *data)
{
  unsigned char save_may_branch, save_may_throw;
  unsigned char this_may_branch, this_may_throw;
  save_may_branch = data->may_branch;
  save_may_throw = data->may_throw;
  data->may_branch = 0;
  data->may_throw = 0;
  data->last_goto = ((void *)0);
  remove_useless_stmts_1 (&((*stmt_p)->exp.operands[0]), data);
  this_may_branch = data->may_branch;
  this_may_throw = data->may_throw;
  data->may_branch |= save_may_branch;
  data->may_throw |= save_may_throw;
  data->last_goto = ((void *)0);
  remove_useless_stmts_1 (&((*stmt_p)->exp.operands[1]), data);
  if (!((((*stmt_p)->exp.operands[0]))->common.side_effects_flag))
    {
      *stmt_p = ((*stmt_p)->exp.operands[1]);
      data->repeat = 1;
    }
  else if (!((((*stmt_p)->exp.operands[1]))->common.side_effects_flag))
    {
      *stmt_p = ((*stmt_p)->exp.operands[0]);
      data->repeat = 1;
    }
  else if (!this_may_branch && !this_may_throw)
    {
      tree stmt = *stmt_p;
      *stmt_p = ((stmt)->exp.operands[0]);
      append_to_statement_list (((stmt)->exp.operands[1]), stmt_p);
      data->repeat = 1;
    }
}
static void
remove_useless_stmts_tc (tree *stmt_p, struct rus_data *data)
{
  unsigned char save_may_throw, this_may_throw;
  tree_stmt_iterator i;
  tree stmt;
  save_may_throw = data->may_throw;
  data->may_throw = 0;
  data->last_goto = ((void *)0);
  remove_useless_stmts_1 (&((*stmt_p)->exp.operands[0]), data);
  this_may_throw = data->may_throw;
  data->may_throw = save_may_throw;
  if (!this_may_throw)
    {
      if (warn_notreached)
 remove_useless_stmts_warn_notreached (((*stmt_p)->exp.operands[1]));
      *stmt_p = ((*stmt_p)->exp.operands[0]);
      data->repeat = 1;
      return;
    }
  this_may_throw = 1;
  i = tsi_start (((*stmt_p)->exp.operands[1]));
  stmt = tsi_stmt (i);
  data->last_goto = ((void *)0);
  switch (((enum tree_code) (stmt)->common.code))
    {
    case CATCH_EXPR:
      for (; !tsi_end_p (i); tsi_next (&i))
 {
   stmt = tsi_stmt (i);
   if ((((stmt))->exp.operands[0]) == ((void *)0))
     this_may_throw = 0;
   data->last_goto = ((void *)0);
   remove_useless_stmts_1 (&(((stmt))->exp.operands[1]), data);
 }
      break;
    case EH_FILTER_EXPR:
      if ((((stmt))->common.static_flag))
 this_may_throw = 0;
      else if ((((stmt))->exp.operands[0]) == ((void *)0))
 this_may_throw = 0;
      remove_useless_stmts_1 (&(((stmt))->exp.operands[1]), data);
      break;
    default:
      remove_useless_stmts_1 (&((*stmt_p)->exp.operands[1]), data);
      if (!((((*stmt_p)->exp.operands[1]))->common.side_effects_flag))
 {
   *stmt_p = ((*stmt_p)->exp.operands[0]);
   data->repeat = 1;
 }
      break;
    }
  data->may_throw |= this_may_throw;
}
static void
remove_useless_stmts_bind (tree *stmt_p, struct rus_data *data)
{
  tree block;
  remove_useless_stmts_1 (&((((*stmt_p))->exp.operands[1])), data);
  block = ((((*stmt_p))->exp.operands[2]));
  if (((((*stmt_p))->exp.operands[0])) == (tree) ((void *)0)
      && *stmt_p != ((current_function_decl)->decl.saved_tree)
      && (! block
   || ! ((block)->block.abstract_origin)
   || (((enum tree_code) (((block)->block.abstract_origin))->common.code)
       != FUNCTION_DECL)))
    {
      *stmt_p = ((((*stmt_p))->exp.operands[1]));
      data->repeat = 1;
    }
}
static void
remove_useless_stmts_goto (tree *stmt_p, struct rus_data *data)
{
  tree dest = (((*stmt_p))->exp.operands[0]);
  data->may_branch = 1;
  data->last_goto = ((void *)0);
  if (((enum tree_code) (dest)->common.code) == LABEL_DECL)
    data->last_goto = stmt_p;
}
static void
remove_useless_stmts_label (tree *stmt_p, struct rus_data *data)
{
  tree label = (((*stmt_p))->exp.operands[0]);
  data->has_label = 1;
  if (((label)->decl.nonlocal_flag))
    data->last_goto = ((void *)0);
  else if (data->last_goto && (((*data->last_goto))->exp.operands[0]) == label)
    {
      *data->last_goto = build_empty_stmt ();
      data->repeat = 1;
    }
}
static void
update_call_expr_flags (tree call)
{
  tree decl = get_callee_fndecl (call);
  if (!decl)
    return;
  if (call_expr_flags (call) & (1 | 256))
    ((call)->common.side_effects_flag) = 0;
  if (((decl)->common.nothrow_flag))
    ((call)->common.nothrow_flag) = 1;
}
void
notice_special_calls (tree t)
{
  int flags = call_expr_flags (t);
  if (flags & 8)
    (cfun->calls_alloca) = 1;
  if (flags & 32)
    (cfun->calls_setjmp) = 1;
}
void
clear_special_calls (void)
{
  (cfun->calls_alloca) = 0;
  (cfun->calls_setjmp) = 0;
}
static void
remove_useless_stmts_1 (tree *tp, struct rus_data *data)
{
  tree t = *tp;
  switch (((enum tree_code) (t)->common.code))
    {
    case COND_EXPR:
      remove_useless_stmts_cond (tp, data);
      break;
    case TRY_FINALLY_EXPR:
      remove_useless_stmts_tf (tp, data);
      break;
    case TRY_CATCH_EXPR:
      remove_useless_stmts_tc (tp, data);
      break;
    case BIND_EXPR:
      remove_useless_stmts_bind (tp, data);
      break;
    case GOTO_EXPR:
      remove_useless_stmts_goto (tp, data);
      break;
    case LABEL_EXPR:
      remove_useless_stmts_label (tp, data);
      break;
    case RETURN_EXPR:
      fold_stmt (tp);
      data->last_goto = ((void *)0);
      data->may_branch = 1;
      break;
    case CALL_EXPR:
      fold_stmt (tp);
      data->last_goto = ((void *)0);
      notice_special_calls (t);
      update_call_expr_flags (t);
      if (tree_could_throw_p (t))
 data->may_throw = 1;
      break;
    case MODIFY_EXPR:
      data->last_goto = ((void *)0);
      fold_stmt (tp);
      if (((enum tree_code) (((t)->exp.operands[1]))->common.code) == CALL_EXPR)
 {
   update_call_expr_flags (((t)->exp.operands[1]));
   notice_special_calls (((t)->exp.operands[1]));
 }
      if (tree_could_throw_p (t))
 data->may_throw = 1;
      break;
    case STATEMENT_LIST:
      {
 tree_stmt_iterator i = tsi_start (t);
 while (!tsi_end_p (i))
   {
     t = tsi_stmt (i);
     if ((((enum tree_code) (t)->common.code) == NOP_EXPR && (((enum tree_code) (((t)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((t)->exp.operands[0]))))
       {
  tsi_delink (&i);
  continue;
       }
     remove_useless_stmts_1 (tsi_stmt_ptr (i), data);
     t = tsi_stmt (i);
     if (((enum tree_code) (t)->common.code) == STATEMENT_LIST)
       {
  tsi_link_before (&i, t, TSI_SAME_STMT);
  tsi_delink (&i);
       }
     else
       tsi_next (&i);
   }
      }
      break;
    case SWITCH_EXPR:
      fold_stmt (tp);
      data->last_goto = ((void *)0);
      break;
    default:
      data->last_goto = ((void *)0);
      break;
    }
}
static void
remove_useless_stmts (void)
{
  struct rus_data data;
  clear_special_calls ();
  do
    {
      memset (&data, 0, sizeof (data));
      remove_useless_stmts_1 (&((current_function_decl)->decl.saved_tree), &data);
    }
  while (data.repeat);
}
struct tree_opt_pass pass_remove_useless_stmts =
{
  "useless",
  ((void *)0),
  remove_useless_stmts,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 0),
  0,
  0,
  0,
  (1 << 0)
};
static void
cfg_remove_useless_stmts_bb (basic_block bb)
{
  block_stmt_iterator bsi;
  tree stmt = (tree) ((void *)0);
  tree cond, var = (tree) ((void *)0), val = (tree) ((void *)0);
  struct var_ann_d *ann;
  if (!bb->pred
      || bb->pred->pred_next
      || !(bb->pred->flags & (1024 | 2048)))
    return;
  cond = ((((last_stmt (bb->pred->src)))->exp.operands[0]));
  if (((enum tree_code) (cond)->common.code) == VAR_DECL || ((enum tree_code) (cond)->common.code) == PARM_DECL)
    {
      var = cond;
      val = (bb->pred->flags & 2048
      ? global_trees[TI_BOOLEAN_FALSE] : global_trees[TI_BOOLEAN_TRUE]);
    }
  else if (((enum tree_code) (cond)->common.code) == TRUTH_NOT_EXPR
    && (((enum tree_code) (((cond)->exp.operands[0]))->common.code) == VAR_DECL
        || ((enum tree_code) (((cond)->exp.operands[0]))->common.code) == PARM_DECL))
    {
      var = ((cond)->exp.operands[0]);
      val = (bb->pred->flags & 2048
      ? global_trees[TI_BOOLEAN_TRUE] : global_trees[TI_BOOLEAN_FALSE]);
    }
  else
    {
      if (bb->pred->flags & 2048)
 cond = invert_truthvalue (cond);
      if (((enum tree_code) (cond)->common.code) == EQ_EXPR
   && (((enum tree_code) (((cond)->exp.operands[0]))->common.code) == VAR_DECL
       || ((enum tree_code) (((cond)->exp.operands[0]))->common.code) == PARM_DECL)
   && (((enum tree_code) (((cond)->exp.operands[1]))->common.code) == VAR_DECL
       || ((enum tree_code) (((cond)->exp.operands[1]))->common.code) == PARM_DECL
       || ((((cond)->exp.operands[1]))->common.constant_flag)))
 {
   var = ((cond)->exp.operands[0]);
   val = ((cond)->exp.operands[1]);
 }
      else
 return;
    }
  ann = var_ann (var);
  if (!ann
      || ann->may_aliases
      || ((var)->common.addressable_flag))
    return;
  if (! ((val)->common.constant_flag))
    {
      ann = var_ann (val);
      if (!ann
   || ann->may_aliases
   || ((val)->common.addressable_flag))
 return;
    }
  if (((((enum tree_code) (((var)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((var)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((var)->common.type))->common.type))->common.code) == REAL_TYPE)))
    return;
  for (bsi = bsi_start (bb); !bsi_end_p (bsi);)
    {
      stmt = bsi_stmt (bsi);
      if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR
   && ((stmt)->exp.operands[0]) == var
   && operand_equal_p (val, ((stmt)->exp.operands[1]), 0))
 {
   bsi_remove (&bsi);
   continue;
 }
      if (((enum tree_code) (stmt)->common.code) == ASM_EXPR
   || ((enum tree_code) (stmt)->common.code) == VA_ARG_EXPR
   || (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR
       && (((stmt)->exp.operands[0]) == var
    || ((stmt)->exp.operands[0]) == val
    || ((enum tree_code) (((stmt)->exp.operands[1]))->common.code) == VA_ARG_EXPR)))
 return;
      bsi_next (&bsi);
    }
}
void
cfg_remove_useless_stmts (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      cfg_remove_useless_stmts_bb (bb);
    }
}
static void
remove_phi_nodes_and_edges_for_unreachable_block (basic_block bb)
{
  tree phi;
  phi = phi_nodes (bb);
  while (phi)
    {
      tree next = (((phi))->common.chain);
      remove_phi_node (phi, (tree) ((void *)0), bb);
      phi = next;
    }
  while (bb->succ != ((void *)0))
    ssa_remove_edge (bb->succ);
}
static void
remove_bb (basic_block bb)
{
  block_stmt_iterator i;
  source_locus loc = 0;
  if (dump_file)
    {
      fprintf (dump_file, "Removing basic block %d\n", bb->index);
      if (dump_flags & (1 << 3))
 {
   dump_bb (bb, dump_file, 0);
   fprintf (dump_file, "\n");
 }
    }
  for (i = bsi_start (bb); !bsi_end_p (i); bsi_remove (&i))
    {
      tree stmt = bsi_stmt (i);
      set_bb_for_stmt (stmt, ((void *)0));
      if (((enum tree_code) (stmt)->common.code) != GOTO_EXPR && (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (stmt)->common.code))])) != 0) ? (stmt)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) && !loc)
 loc = ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (stmt)->common.code))])) != 0) ? (stmt)->exp.locus : (location_t *)((void *)0));
    }
  if (warn_notreached && loc)
    warning ("%Hwill never be executed", loc);
  remove_phi_nodes_and_edges_for_unreachable_block (bb);
}
edge
tree_block_forwards_to (basic_block bb)
{
  block_stmt_iterator bsi;
  bb_ann_t ann = bb_ann (bb);
  tree stmt;
  if (! ann->forwardable)
    return ((void *)0);
  ann->forwardable = 0;
  if (bb == EXIT_BLOCK_PTR
      || bb == ENTRY_BLOCK_PTR
      || !bb->succ
      || bb->succ->succ_next
      || bb->succ->dest == EXIT_BLOCK_PTR
      || (bb->succ->flags & 2) != 0
      || phi_nodes (bb)
      || phi_nodes (bb->succ->dest))
    return ((void *)0);
  for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
    {
      stmt = bsi_stmt (bsi);
      if (((enum tree_code) (stmt)->common.code) != LABEL_EXPR)
 break;
    }
  if (bsi_end_p (bsi))
    {
      edge dest;
      dest = tree_block_forwards_to (bb->succ->dest);
      if (!dest)
 dest = bb->succ;
      ann->forwardable = 1;
      return dest;
    }
  return ((void *)0);
}
static unsigned char
cleanup_control_flow (void)
{
  basic_block bb;
  block_stmt_iterator bsi;
  unsigned char retval = 0;
  tree stmt;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      bsi = bsi_last (bb);
      if (bsi_end_p (bsi))
 continue;
      stmt = bsi_stmt (bsi);
      if (((enum tree_code) (stmt)->common.code) == COND_EXPR
   || ((enum tree_code) (stmt)->common.code) == SWITCH_EXPR)
 retval |= cleanup_control_expr_graph (bb, bsi);
    }
  return retval;
}
static unsigned char
cleanup_control_expr_graph (basic_block bb, block_stmt_iterator bsi)
{
  edge taken_edge;
  unsigned char retval = 0;
  tree expr = bsi_stmt (bsi), val;
  if (bb->succ->succ_next)
    {
      edge e, next;
      switch (((enum tree_code) (expr)->common.code))
 {
 case COND_EXPR:
   val = ((((expr))->exp.operands[0]));
   break;
 case SWITCH_EXPR:
   val = (((expr))->exp.operands[0]);
   if (((enum tree_code) (val)->common.code) != INTEGER_CST)
     return 0;
   break;
 default:
   fancy_abort ("gcc.c", 101084, "?");
 }
      taken_edge = find_taken_edge (bb, val);
      if (!taken_edge)
 return 0;
      for (e = bb->succ; e; e = next)
 {
   next = e->succ_next;
   if (e != taken_edge)
     {
       taken_edge->probability += e->probability;
       taken_edge->count += e->count;
       ssa_remove_edge (e);
       retval = 1;
     }
 }
      if (taken_edge->probability > 10000)
 taken_edge->probability = 10000;
    }
  else
    taken_edge = bb->succ;
  bsi_remove (&bsi);
  taken_edge->flags = 1;
  if (dom_computed[CDI_DOMINATORS] >= DOM_CONS_OK)
    dom_computed[CDI_DOMINATORS] = DOM_CONS_OK;
  return retval;
}
edge
find_taken_edge (basic_block bb, tree val)
{
  tree stmt;
  stmt = last_stmt (bb);
  if (val == ((void *)0) || !really_constant_p (val))
    return ((void *)0);
  if (((enum tree_code) (stmt)->common.code) == COND_EXPR)
    return find_taken_edge_cond_expr (bb, val);
  if (((enum tree_code) (stmt)->common.code) == SWITCH_EXPR)
    return find_taken_edge_switch_expr (bb, val);
  return bb->succ;
}
static edge
find_taken_edge_cond_expr (basic_block bb, tree val)
{
  edge true_edge, false_edge;
  extract_true_false_edges_from_block (bb, &true_edge, &false_edge);
  if (true_edge->dest == false_edge->dest)
    return true_edge;
  if (integer_nonzerop (val))
    return true_edge;
  else if (integer_zerop (val))
    return false_edge;
  else
    return ((void *)0);
}
static edge
find_taken_edge_switch_expr (basic_block bb, tree val)
{
  tree switch_expr, taken_case;
  basic_block dest_bb;
  edge e;
  if (((enum tree_code) (val)->common.code) != INTEGER_CST)
    return ((void *)0);
  switch_expr = last_stmt (bb);
  taken_case = find_case_label_for_value (switch_expr, val);
  dest_bb = label_to_block ((((taken_case))->exp.operands[2]));
  e = find_edge (bb, dest_bb);
  if (!e)
    fancy_abort ("gcc.c", 101200, "?");
  return e;
}
static tree
find_case_label_for_value (tree switch_expr, tree val)
{
  tree vec = (((switch_expr))->exp.operands[2]);
  size_t low, high, n = ((vec)->vec.length);
  tree default_case = ((vec)->vec.a[n - 1]);
  for (low = -1, high = n - 1; high - low > 1; )
    {
      size_t i = (high + low) / 2;
      tree t = ((vec)->vec.a[i]);
      int cmp;
      cmp = tree_int_cst_compare ((((t))->exp.operands[0]), val);
      if (cmp > 0)
 high = i;
      else
 low = i;
      if ((((t))->exp.operands[1]) == ((void *)0))
 {
   if (cmp == 0)
     return t;
 }
      else
 {
   if (cmp <= 0 && tree_int_cst_compare ((((t))->exp.operands[1]), val) >= 0)
     return t;
 }
    }
  return default_case;
}
static unsigned char
phi_alternatives_equal (basic_block dest, edge e1, edge e2)
{
  tree phi, val1, val2;
  int n1, n2;
  for (phi = phi_nodes (dest); phi; phi = (((phi))->common.chain))
    {
      n1 = phi_arg_from_edge (phi, e1);
      n2 = phi_arg_from_edge (phi, e2);
      val1 = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((n1))));
      val2 = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((n2))));
      if (!operand_equal_p (val1, val2, 0))
 return 0;
    }
  return 1;
}
static void
compute_dominance_frontiers_1 (bitmap *frontiers, basic_block bb, sbitmap done)
{
  edge e;
  basic_block c;
  ((done)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
  for (c = first_dom_son (CDI_DOMINATORS, bb);
       c;
       c = next_dom_son (CDI_DOMINATORS, c))
    {
      if (! ((done)->elms [(c->index) / ((unsigned) (8 * 4))] >> (c->index) % ((unsigned) (8 * 4)) & 1))
     compute_dominance_frontiers_1 (frontiers, c, done);
    }
  for (e = bb->succ; e; e = e->succ_next)
    {
      if (e->dest == EXIT_BLOCK_PTR)
 continue;
      if (get_immediate_dominator (CDI_DOMINATORS, e->dest) != bb)
 bitmap_set_bit (frontiers[bb->index], e->dest->index);
    }
  for (c = first_dom_son (CDI_DOMINATORS, bb);
       c;
       c = next_dom_son (CDI_DOMINATORS, c))
    {
      int x;
      do { bitmap_element *ptr_ = (frontiers[c->index])->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (x) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { if (get_immediate_dominator (CDI_DOMINATORS, (((basic_block_info)->data.bb[(x)]))) != bb) bitmap_set_bit (frontiers[bb->index], x); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
    }
}
void
compute_dominance_frontiers (bitmap *frontiers)
{
  sbitmap done = sbitmap_alloc (last_basic_block);
  timevar_push (TV_DOM_FRONTIERS);
  sbitmap_zero (done);
  compute_dominance_frontiers_1 (frontiers, ENTRY_BLOCK_PTR->succ->dest, done);
  free(done);
  timevar_pop (TV_DOM_FRONTIERS);
}
void
tree_dump_bb (basic_block bb, FILE *outf, int indent1)
{
  dump_generic_bb (outf, bb, indent1, (1 << 6));
}
void
debug_tree_bb (basic_block bb)
{
  dump_bb (bb, stderr, 0);
}
basic_block
debug_tree_bb_n (int n)
{
  debug_tree_bb ((((basic_block_info)->data.bb[(n)])));
  return (((basic_block_info)->data.bb[(n)]));
}
void
debug_tree_cfg (int flags)
{
  dump_tree_cfg (stderr, flags);
}
void
dump_tree_cfg (FILE *file, int flags)
{
  if (flags & (1 << 3))
    {
      const char *funcname
 = lang_hooks.decl_printable_name (current_function_decl, 2);
      fputc_unlocked ('\n', file);
      fprintf (file, ";; Function %s\n\n", funcname);
      fprintf (file, ";; \n%d basic blocks, %d edges, last basic block %d.\n\n",
        n_basic_blocks, n_edges, last_basic_block);
      brief_dump_cfg (file);
      fprintf (file, "\n");
    }
  if (flags & (1 << 4))
    dump_cfg_stats (file);
  dump_function_to_file (current_function_decl, file, flags | (1 << 5));
}
void
dump_cfg_stats (FILE *file)
{
  static long max_num_merged_labels = 0;
  unsigned long size, total = 0;
  long n_edges;
  basic_block bb;
  const char * const fmt_str = "%-30s%-13s%12s\n";
  const char * const fmt_str_1 = "%-30s%13lu%11lu%c\n";
  const char * const fmt_str_3 = "%-43s%11lu%c\n";
  const char *funcname
    = lang_hooks.decl_printable_name (current_function_decl, 2);
  fprintf (file, "\nCFG Statistics for %s\n\n", funcname);
  fprintf (file, "---------------------------------------------------------\n");
  fprintf (file, fmt_str, "", "  Number of  ", "Memory");
  fprintf (file, fmt_str, "", "  instances  ", "used ");
  fprintf (file, "---------------------------------------------------------\n");
  size = n_basic_blocks * sizeof (struct basic_block_def);
  total += size;
  fprintf (file, fmt_str_1, "Basic blocks", n_basic_blocks, ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))),
    ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  n_edges = 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e;
      for (e = bb->succ; e; e = e->succ_next)
 n_edges++;
    }
  size = n_edges * sizeof (struct edge_def);
  total += size;
  fprintf (file, fmt_str_1, "Edges", n_edges, ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))), ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  size = n_basic_blocks * sizeof (struct bb_ann_d);
  total += size;
  fprintf (file, fmt_str_1, "Basic block annotations", n_basic_blocks,
    ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))), ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  fprintf (file, "---------------------------------------------------------\n");
  fprintf (file, fmt_str_3, "Total memory used by CFG data", ((unsigned long) ((total) < 1024*10 ? (total) : ((total) < 1024*1024*10 ? (total) / 1024 : (total) / (1024*1024)))),
    ((total) < 1024*10 ? 'b' : ((total) < 1024*1024*10 ? 'k' : 'M')));
  fprintf (file, "---------------------------------------------------------\n");
  fprintf (file, "\n");
  if (cfg_stats.num_merged_labels > max_num_merged_labels)
    max_num_merged_labels = cfg_stats.num_merged_labels;
  fprintf (file, "Coalesced label blocks: %ld (Max so far: %ld)\n",
    cfg_stats.num_merged_labels, max_num_merged_labels);
  fprintf (file, "\n");
}
void
debug_cfg_stats (void)
{
  dump_cfg_stats (stderr);
}
static void
tree_cfg2vcg (FILE *file)
{
  edge e;
  basic_block bb;
  const char *funcname
    = lang_hooks.decl_printable_name (current_function_decl, 2);
  fprintf (file, "graph: { title: \"%s\"\n", funcname);
  fprintf (file, "node: { title: \"ENTRY\" label: \"ENTRY\" }\n");
  fprintf (file, "node: { title: \"EXIT\" label: \"EXIT\" }\n");
  for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
    {
      fprintf (file, "edge: { sourcename: \"ENTRY\" targetname: \"%d\"",
        e->dest->index);
      if (e->flags & 16)
 fprintf (file, " linestyle: dotted priority: 10");
      else
 fprintf (file, " linestyle: solid priority: 100");
      fprintf (file, " }\n");
    }
  fputc_unlocked ('\n', file);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      enum tree_code head_code, end_code;
      const char *head_name, *end_name;
      int head_line = 0;
      int end_line = 0;
      tree first = first_stmt (bb);
      tree last = last_stmt (bb);
      if (first)
 {
   head_code = ((enum tree_code) (first)->common.code);
   head_name = tree_code_name[head_code];
   head_line = get_lineno (first);
 }
      else
 head_name = "no-statement";
      if (last)
 {
   end_code = ((enum tree_code) (last)->common.code);
   end_name = tree_code_name[end_code];
   end_line = get_lineno (last);
 }
      else
 end_name = "no-statement";
      fprintf (file, "node: { title: \"%d\" label: \"#%d\\n%s (%d)\\n%s (%d)\"}\n",
        bb->index, bb->index, head_name, head_line, end_name,
        end_line);
      for (e = bb->succ; e; e = e->succ_next)
 {
   if (e->dest == EXIT_BLOCK_PTR)
     fprintf (file, "edge: { sourcename: \"%d\" targetname: \"EXIT\"", bb->index);
   else
     fprintf (file, "edge: { sourcename: \"%d\" targetname: \"%d\"", bb->index, e->dest->index);
   if (e->flags & 16)
     fprintf (file, " priority: 10 linestyle: dotted");
   else
     fprintf (file, " priority: 100 linestyle: solid");
   fprintf (file, " }\n");
 }
      if (bb->next_bb != EXIT_BLOCK_PTR)
 fputc_unlocked ('\n', file);
    }
  fputs_unlocked ("}\n\n", file);
}
unsigned char
is_ctrl_stmt (tree t)
{
  return (((enum tree_code) (t)->common.code) == COND_EXPR
   || ((enum tree_code) (t)->common.code) == SWITCH_EXPR
   || ((enum tree_code) (t)->common.code) == GOTO_EXPR
   || ((enum tree_code) (t)->common.code) == RETURN_EXPR
   || ((enum tree_code) (t)->common.code) == RESX_EXPR);
}
unsigned char
is_ctrl_altering_stmt (tree t)
{
  tree call = t;
  switch (((enum tree_code) (t)->common.code))
    {
    case MODIFY_EXPR:
      call = ((t)->exp.operands[1]);
      if (((enum tree_code) (call)->common.code) != CALL_EXPR)
 break;
    case CALL_EXPR:
      if (((t)->common.side_effects_flag)
   && (cfun->has_nonlocal_label))
 return 1;
      if (call_expr_flags (call) & (2 | 64))
 return 1;
      break;
    default:
      return 0;
    }
  return tree_can_throw_internal (t);
}
unsigned char
computed_goto_p (tree t)
{
  return (((enum tree_code) (t)->common.code) == GOTO_EXPR
   && ((enum tree_code) ((((t))->exp.operands[0]))->common.code) != LABEL_DECL);
}
unsigned char
simple_goto_p (tree expr)
{
  return (((enum tree_code) (expr)->common.code) == GOTO_EXPR
    && ((enum tree_code) ((((expr))->exp.operands[0]))->common.code) == LABEL_DECL
    && (decl_function_context ((((expr))->exp.operands[0]))
        == current_function_decl));
}
static unsigned char
stmt_starts_bb_p (tree t, tree prev_t)
{
  enum tree_code code;
  if (t == (tree) ((void *)0))
    return 0;
  code = ((enum tree_code) (t)->common.code);
  if (code == LABEL_EXPR)
    {
      if (code == LABEL_EXPR
   && ((((((t))->exp.operands[0]))->decl.nonlocal_flag)
       || (((((t))->exp.operands[0]))->common.side_effects_flag)))
 return 1;
      if (prev_t && ((enum tree_code) (prev_t)->common.code) == code)
 {
   if ((((((prev_t))->exp.operands[0]))->decl.nonlocal_flag))
     return 1;
   cfg_stats.num_merged_labels++;
   return 0;
 }
      else
 return 1;
    }
  return 0;
}
unsigned char
stmt_ends_bb_p (tree t)
{
  return is_ctrl_stmt (t) || is_ctrl_altering_stmt (t);
}
void
disband_implicit_edges (void)
{
  basic_block bb;
  block_stmt_iterator last;
  edge e;
  tree stmt, label;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      last = bsi_last (bb);
      stmt = last_stmt (bb);
      if (stmt && ((enum tree_code) (stmt)->common.code) == COND_EXPR)
 {
   for (e = bb->succ; e; e = e->succ_next)
     {
       if (e->dest != bb->next_bb)
  continue;
       if (e->flags & 1024)
  ((((stmt))->exp.operands[1])) = build_empty_stmt ();
       else if (e->flags & 2048)
  ((((stmt))->exp.operands[2])) = build_empty_stmt ();
       else
  fancy_abort ("gcc.c", 101751, "?");
       e->flags |= 1;
     }
   continue;
 }
      if (stmt && ((enum tree_code) (stmt)->common.code) == RETURN_EXPR)
 {
   if (!bb->succ
       || bb->succ->succ_next
       || bb->succ->dest != EXIT_BLOCK_PTR)
     fancy_abort ("gcc.c", 101765, "?");
   if (bb->next_bb == EXIT_BLOCK_PTR
       && !((stmt)->exp.operands[0]))
     {
       bsi_remove (&last);
       bb->succ->flags |= 1;
     }
   continue;
 }
      if (stmt && is_ctrl_stmt (stmt))
 continue;
      for (e = bb->succ; e; e = e->succ_next)
 if (e->flags & 1)
   break;
      if (!e || e->dest == bb->next_bb)
 continue;
      if (e->dest == EXIT_BLOCK_PTR)
 fancy_abort ("gcc.c", 101790, "?");
      label = tree_block_label (e->dest);
      stmt = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],label );
      ((stmt)->exp.locus = (e->goto_locus));
      bsi_insert_after (&last, stmt, BSI_NEW_STMT);
      e->flags &= ~1;
    }
}
void
delete_tree_cfg_annotations (void)
{
  basic_block bb;
  if (n_basic_blocks > 0)
    free_blocks_annotations ();
  label_to_block_map = ((void *)0);
  free_rbi_pool ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    bb->rbi = ((void *)0);
}
tree
first_stmt (basic_block bb)
{
  block_stmt_iterator i = bsi_start (bb);
  return !bsi_end_p (i) ? bsi_stmt (i) : (tree) ((void *)0);
}
tree
last_stmt (basic_block bb)
{
  block_stmt_iterator b = bsi_last (bb);
  return !bsi_end_p (b) ? bsi_stmt (b) : (tree) ((void *)0);
}
tree *
last_stmt_ptr (basic_block bb)
{
  block_stmt_iterator last = bsi_last (bb);
  return !bsi_end_p (last) ? bsi_stmt_ptr (last) : ((void *)0);
}
tree
last_and_only_stmt (basic_block bb)
{
  block_stmt_iterator i = bsi_last (bb);
  tree last, prev;
  if (bsi_end_p (i))
    return (tree) ((void *)0);
  last = bsi_stmt (i);
  bsi_prev (&i);
  if (bsi_end_p (i))
    return last;
  prev = bsi_stmt (i);
  if (((enum tree_code) (prev)->common.code) == LABEL_EXPR)
    return last;
  else
    return (tree) ((void *)0);
}
void
set_bb_for_stmt (tree t, basic_block bb)
{
  if (((enum tree_code) (t)->common.code) == STATEMENT_LIST)
    {
      tree_stmt_iterator i;
      for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
 set_bb_for_stmt (tsi_stmt (i), bb);
    }
  else
    {
      stmt_ann_t ann = get_stmt_ann (t);
      ann->bb = bb;
      if (((enum tree_code) (t)->common.code) == LABEL_EXPR)
 {
   int uid;
   t = (((t))->exp.operands[0]);
   uid = ((t)->decl.pointer_alias_set);
   if (uid == -1)
     {
       ((t)->decl.pointer_alias_set) = uid = cfun->last_label_uid++;
       if (((label_to_block_map)->num_elements) <= (unsigned) uid)
  ((label_to_block_map) = varray_grow (label_to_block_map, 3 * uid / 2));
     }
   else
     {
     }
   ((label_to_block_map)->data.bb[uid]) = bb;
 }
    }
}
void
bsi_insert_before (block_stmt_iterator *i, tree t, enum bsi_iterator_update m)
{
  set_bb_for_stmt (t, i->bb);
  modify_stmt (t);
  tsi_link_before (&i->tsi, t, m);
}
void
bsi_insert_after (block_stmt_iterator *i, tree t, enum bsi_iterator_update m)
{
  set_bb_for_stmt (t, i->bb);
  modify_stmt (t);
  tsi_link_after (&i->tsi, t, m);
}
void
bsi_remove (block_stmt_iterator *i)
{
  tree t = bsi_stmt (*i);
  set_bb_for_stmt (t, ((void *)0));
  modify_stmt (t);
  tsi_delink (&i->tsi);
}
void
bsi_move_after (block_stmt_iterator *from, block_stmt_iterator *to)
{
  tree stmt = bsi_stmt (*from);
  bsi_remove (from);
  bsi_insert_after (to, stmt, BSI_SAME_STMT);
}
void
bsi_move_before (block_stmt_iterator *from, block_stmt_iterator *to)
{
  tree stmt = bsi_stmt (*from);
  bsi_remove (from);
  bsi_insert_before (to, stmt, BSI_SAME_STMT);
}
void
bsi_move_to_bb_end (block_stmt_iterator *from, basic_block bb)
{
  block_stmt_iterator last = bsi_last (bb);
  if (!bsi_end_p (last) && is_ctrl_stmt (bsi_stmt (last)))
    bsi_move_before (from, &last);
  else
    bsi_move_after (from, &last);
}
void
bsi_replace (const block_stmt_iterator *bsi, tree stmt, unsigned char preserve_eh_info)
{
  int eh_region;
  tree orig_stmt = bsi_stmt (*bsi);
  ((stmt)->exp.locus = (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (orig_stmt)->common.code))])) != 0) ? (orig_stmt)->exp.locus : (location_t *)((void *)0))));
  set_bb_for_stmt (stmt, bsi->bb);
  if (preserve_eh_info)
    {
      eh_region = lookup_stmt_eh_region (orig_stmt);
      if (eh_region >= 0)
 add_stmt_to_eh_region (stmt, eh_region);
    }
  *bsi_stmt_ptr (*bsi) = stmt;
  modify_stmt (stmt);
}
static unsigned char
tree_find_edge_insert_loc (edge e, block_stmt_iterator *bsi)
{
  basic_block dest, src;
  tree tmp;
  dest = e->dest;
 restart:
  if (dest->pred->pred_next == ((void *)0)
      && ! phi_nodes (dest)
      && dest != EXIT_BLOCK_PTR)
    {
      *bsi = bsi_start (dest);
      if (bsi_end_p (*bsi))
 return 1;
      tmp = bsi_stmt (*bsi);
      while (((enum tree_code) (tmp)->common.code) == LABEL_EXPR)
 {
   bsi_next (bsi);
   if (bsi_end_p (*bsi))
     break;
   tmp = bsi_stmt (*bsi);
 }
      if (bsi_end_p (*bsi))
 {
   *bsi = bsi_last (dest);
   return 1;
 }
      else
 return 0;
    }
  src = e->src;
  if ((e->flags & 2) == 0
      && src->succ->succ_next == ((void *)0)
      && src != ENTRY_BLOCK_PTR)
    {
      *bsi = bsi_last (src);
      if (bsi_end_p (*bsi))
 return 1;
      tmp = bsi_stmt (*bsi);
      if (!stmt_ends_bb_p (tmp))
 return 1;
      if (((enum tree_code) (tmp)->common.code) == RETURN_EXPR)
        {
   tree op = ((tmp)->exp.operands[0]);
   if (!is_gimple_val (op))
     {
       if (((enum tree_code) (op)->common.code) != MODIFY_EXPR)
  fancy_abort ("gcc.c", 102108, "?");
       bsi_insert_before (bsi, op, BSI_NEW_STMT);
       ((tmp)->exp.operands[0]) = ((op)->exp.operands[0]);
     }
   bsi_prev (bsi);
   return 1;
        }
    }
  dest = split_edge (e);
  e = dest->pred;
  goto restart;
}
void
bsi_commit_edge_inserts (int *new_blocks)
{
  basic_block bb;
  edge e;
  int blocks;
  blocks = n_basic_blocks;
  bsi_commit_edge_inserts_1 (ENTRY_BLOCK_PTR->succ);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    for (e = bb->succ; e; e = e->succ_next)
      bsi_commit_edge_inserts_1 (e);
  if (new_blocks)
    *new_blocks = n_basic_blocks - blocks;
}
static void
bsi_commit_edge_inserts_1 (edge e)
{
  if (((e)->insns.t))
    {
      block_stmt_iterator bsi;
      tree stmt = ((e)->insns.t);
      ((e)->insns.t) = (tree) ((void *)0);
      if (tree_find_edge_insert_loc (e, &bsi))
 bsi_insert_after (&bsi, stmt, BSI_NEW_STMT);
      else
 bsi_insert_before (&bsi, stmt, BSI_NEW_STMT);
    }
}
void
bsi_insert_on_edge (edge e, tree stmt)
{
  append_to_statement_list (stmt, &((e)->insns.t));
}
void pre_insert_on_edge (edge e, tree stmt);
void
pre_insert_on_edge (edge e, tree stmt)
{
  block_stmt_iterator bsi;
  if (((e)->insns.t))
    fancy_abort ("gcc.c", 102192, "?");
  if (tree_find_edge_insert_loc (e, &bsi))
    bsi_insert_after (&bsi, stmt, BSI_NEW_STMT);
  else
    bsi_insert_before (&bsi, stmt, BSI_NEW_STMT);
}
static basic_block
tree_split_edge (edge edge_in)
{
  basic_block new_bb, after_bb, dest, src;
  edge new_edge, e;
  tree phi;
  int i, num_elem;
  if (edge_in->flags & 2)
    fancy_abort ("gcc.c", 102218, "?");
  src = edge_in->src;
  dest = edge_in->dest;
  for (e = dest->pred; e; e = e->pred_next)
    if (e->src->next_bb == dest)
      break;
  if (!e)
    after_bb = dest->prev_bb;
  else
    after_bb = edge_in->src;
  new_bb = create_empty_bb (after_bb);
  new_edge = make_edge (new_bb, dest, 1);
  for (phi = phi_nodes (dest); phi; phi = (((phi))->common.chain))
    {
      num_elem = (phi)->phi.num_args;
      for (i = 0; i < num_elem; i++)
 if (((phi)->phi.a[i]).e == edge_in)
   {
     ((phi)->phi.a[i]).e = new_edge;
     break;
   }
    }
  if (!redirect_edge_and_branch (edge_in, new_bb))
    fancy_abort ("gcc.c", 102252, "?");
  if (((edge_in)->insns.t))
    fancy_abort ("gcc.c", 102255, "?");
  return new_bb;
}
static unsigned char
has_label_p (basic_block bb, tree label)
{
  block_stmt_iterator bsi;
  for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
    {
      tree stmt = bsi_stmt (bsi);
      if (((enum tree_code) (stmt)->common.code) != LABEL_EXPR)
 return 0;
      if ((((stmt))->exp.operands[0]) == label)
 return 1;
    }
  return 0;
}
static tree
verify_expr (tree *tp, int *walk_subtrees, void *data )
{
  tree t = *tp, x;
  if ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
    *walk_subtrees = 0;
  switch (((enum tree_code) (t)->common.code))
    {
    case SSA_NAME:
      if ((t)->common.nothrow_flag)
 {
   error ("SSA name in freelist but still referenced");
   return *tp;
 }
      break;
    case MODIFY_EXPR:
      x = ((t)->exp.operands[0]);
      if (((enum tree_code) (x)->common.code) == BIT_FIELD_REF
   && is_gimple_reg (((x)->exp.operands[0])))
 {
   error ("GIMPLE register modified with BIT_FIELD_REF");
   return t;
 }
      break;
    case ADDR_EXPR:
      for (x = ((t)->exp.operands[0]);
    (handled_component_p (x)
     || ((enum tree_code) (x)->common.code) == REALPART_EXPR
     || ((enum tree_code) (x)->common.code) == IMAGPART_EXPR);
    x = ((x)->exp.operands[0]))
 ;
      if (((enum tree_code) (x)->common.code) != VAR_DECL && ((enum tree_code) (x)->common.code) != PARM_DECL)
 return ((void *)0);
      if (!((x)->common.addressable_flag))
 {
   error ("address taken, but ADDRESSABLE bit not set");
   return x;
 }
      break;
    case COND_EXPR:
      x = ((t)->exp.operands[0]);
      if (((enum tree_code) (((x)->common.type))->common.code) != BOOLEAN_TYPE)
 {
   error ("non-boolean used in condition");
   return x;
 }
      break;
    case NOP_EXPR:
    case CONVERT_EXPR:
    case FIX_TRUNC_EXPR:
    case FIX_CEIL_EXPR:
    case FIX_FLOOR_EXPR:
    case FIX_ROUND_EXPR:
    case FLOAT_EXPR:
    case NEGATE_EXPR:
    case ABS_EXPR:
    case BIT_NOT_EXPR:
    case NON_LVALUE_EXPR:
    case TRUTH_NOT_EXPR:
      do { if (tree_code_type[(int) (((enum tree_code) (((t)->exp.operands[0]))->common.code))] != 'c' && !is_gimple_val (((t)->exp.operands[0]))) { error ("Invalid operand to unary operator"); return ((t)->exp.operands[0]); }} while (0);
      break;
    case REALPART_EXPR:
    case IMAGPART_EXPR:
    case COMPONENT_REF:
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
    case BIT_FIELD_REF:
    case VIEW_CONVERT_EXPR:
      while (((enum tree_code) (t)->common.code) == REALPART_EXPR || ((enum tree_code) (t)->common.code) == IMAGPART_EXPR
      || handled_component_p (t))
 {
   if (((enum tree_code) (t)->common.code) == COMPONENT_REF && ((t)->exp.operands[2]))
     do { if (tree_code_type[(int) (((enum tree_code) (((t)->exp.operands[2]))->common.code))] != 'c' && !is_gimple_val (((t)->exp.operands[2]))) { error ("Invalid COMPONENT_REF offset operator"); return ((t)->exp.operands[2]); }} while (0);
   else if (((enum tree_code) (t)->common.code) == ARRAY_REF
     || ((enum tree_code) (t)->common.code) == ARRAY_RANGE_REF)
     {
       do { if (tree_code_type[(int) (((enum tree_code) (((t)->exp.operands[1]))->common.code))] != 'c' && !is_gimple_val (((t)->exp.operands[1]))) { error ("Invalid array index."); return ((t)->exp.operands[1]); }} while (0);
       if (((t)->exp.operands[2]))
  do { if (tree_code_type[(int) (((enum tree_code) (((t)->exp.operands[2]))->common.code))] != 'c' && !is_gimple_val (((t)->exp.operands[2]))) { error ("Invalid array lower bound."); return ((t)->exp.operands[2]); }} while (0);
       if (((t)->exp.operands[3]))
  do { if (tree_code_type[(int) (((enum tree_code) (((t)->exp.operands[3]))->common.code))] != 'c' && !is_gimple_val (((t)->exp.operands[3]))) { error ("Invalid array stride."); return ((t)->exp.operands[3]); }} while (0);
     }
   else if (((enum tree_code) (t)->common.code) == BIT_FIELD_REF)
     {
       do { if (tree_code_type[(int) (((enum tree_code) (((t)->exp.operands[1]))->common.code))] != 'c' && !is_gimple_val (((t)->exp.operands[1]))) { error ("Invalid operand to BIT_FIELD_REF"); return ((t)->exp.operands[1]); }} while (0);
       do { if (tree_code_type[(int) (((enum tree_code) (((t)->exp.operands[2]))->common.code))] != 'c' && !is_gimple_val (((t)->exp.operands[2]))) { error ("Invalid operand to BIT_FIELD_REF"); return ((t)->exp.operands[2]); }} while (0);
     }
   t = ((t)->exp.operands[0]);
 }
      if (tree_code_type[(int) (((enum tree_code) (t)->common.code))] != 'c'
   && !is_gimple_lvalue (t))
 {
   error ("Invalid reference prefix.");
   return t;
 }
      *walk_subtrees = 0;
      break;
    case LT_EXPR:
    case LE_EXPR:
    case GT_EXPR:
    case GE_EXPR:
    case EQ_EXPR:
    case NE_EXPR:
    case UNORDERED_EXPR:
    case ORDERED_EXPR:
    case UNLT_EXPR:
    case UNLE_EXPR:
    case UNGT_EXPR:
    case UNGE_EXPR:
    case UNEQ_EXPR:
    case LTGT_EXPR:
    case PLUS_EXPR:
    case MINUS_EXPR:
    case MULT_EXPR:
    case TRUNC_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case TRUNC_MOD_EXPR:
    case CEIL_MOD_EXPR:
    case FLOOR_MOD_EXPR:
    case ROUND_MOD_EXPR:
    case RDIV_EXPR:
    case EXACT_DIV_EXPR:
    case MIN_EXPR:
    case MAX_EXPR:
    case LSHIFT_EXPR:
    case RSHIFT_EXPR:
    case LROTATE_EXPR:
    case RROTATE_EXPR:
    case BIT_IOR_EXPR:
    case BIT_XOR_EXPR:
    case BIT_AND_EXPR:
      do { if (tree_code_type[(int) (((enum tree_code) (((t)->exp.operands[0]))->common.code))] != 'c' && !is_gimple_val (((t)->exp.operands[0]))) { error ("Invalid operand to binary operator"); return ((t)->exp.operands[0]); }} while (0);
      do { if (tree_code_type[(int) (((enum tree_code) (((t)->exp.operands[1]))->common.code))] != 'c' && !is_gimple_val (((t)->exp.operands[1]))) { error ("Invalid operand to binary operator"); return ((t)->exp.operands[1]); }} while (0);
      break;
    default:
      break;
    }
  return ((void *)0);
}
static unsigned char
verify_stmt (tree stmt, unsigned char last_in_block)
{
  tree addr;
  if (!is_gimple_stmt (stmt))
    {
      error ("Is not a valid GIMPLE statement.");
      goto fail;
    }
  addr = walk_tree (&stmt, verify_expr, ((void *)0), ((void *)0));
  if (addr)
    {
      debug_generic_stmt (addr);
      return 1;
    }
  if (lookup_stmt_eh_region (stmt) >= 0)
    {
      if (!tree_could_throw_p (stmt))
 {
   error ("Statement marked for throw, but doesn't.");
   goto fail;
 }
      if (!last_in_block && tree_can_throw_internal (stmt))
 {
   error ("Statement marked for throw in middle of block.");
   goto fail;
 }
    }
  return 0;
 fail:
  debug_generic_stmt (stmt);
  return 1;
}
static unsigned char
tree_node_can_be_shared (tree t)
{
  if ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't') || (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd')
      || tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'c'
      || is_gimple_min_invariant (t)
      || ((enum tree_code) (t)->common.code) == SSA_NAME)
    return 1;
  while (((((enum tree_code) (t)->common.code) == ARRAY_REF || ((enum tree_code) (t)->common.code) == ARRAY_RANGE_REF)
   && (tree_code_type[(int) (((enum tree_code) (((t)->exp.operands[1]))->common.code))] == 'c'
       || is_gimple_min_invariant (((t)->exp.operands[1]))))
  || (((enum tree_code) (t)->common.code) == COMPONENT_REF
      || ((enum tree_code) (t)->common.code) == REALPART_EXPR
      || ((enum tree_code) (t)->common.code) == IMAGPART_EXPR))
    t = ((t)->exp.operands[0]);
  if ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd'))
    return 1;
  return 0;
}
static tree
verify_node_sharing (tree * tp, int *walk_subtrees, void *data)
{
  htab_t htab = (htab_t) data;
  void **slot;
  if (tree_node_can_be_shared (*tp))
    {
      *walk_subtrees = 0;
      return ((void *)0);
    }
  slot = htab_find_slot (htab, *tp, INSERT);
  if (*slot)
    return *slot;
  *slot = *tp;
  return ((void *)0);
}
void
verify_stmts (void)
{
  basic_block bb;
  block_stmt_iterator bsi;
  unsigned char err = 0;
  htab_t htab;
  tree addr;
  timevar_push (TV_TREE_STMT_VERIFY);
  htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, ((void *)0));
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree phi;
      int i;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 {
   int phi_num_args = (phi)->phi.num_args;
   for (i = 0; i < phi_num_args; i++)
     {
       tree t = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
       tree addr;
       if (((enum tree_code) (t)->common.code) != SSA_NAME
    && ((enum tree_code) (t)->common.code) != FUNCTION_DECL
    && !is_gimple_val (t))
  {
    error ("PHI def is not a GIMPLE value");
    debug_generic_stmt (phi);
    debug_generic_stmt (t);
    err |= 1;
  }
       addr = walk_tree (&t, verify_expr, ((void *)0), ((void *)0));
       if (addr)
  {
    debug_generic_stmt (addr);
    err |= 1;
  }
       addr = walk_tree (&t, verify_node_sharing, htab, ((void *)0));
       if (addr)
  {
    error ("Incorrect sharing of tree nodes");
    debug_generic_stmt (phi);
    debug_generic_stmt (addr);
    err |= 1;
  }
     }
 }
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); )
 {
   tree stmt = bsi_stmt (bsi);
   bsi_next (&bsi);
   err |= verify_stmt (stmt, bsi_end_p (bsi));
   addr = walk_tree (&stmt, verify_node_sharing, htab, ((void *)0));
   if (addr)
     {
       error ("Incorrect sharing of tree nodes");
       debug_generic_stmt (stmt);
       debug_generic_stmt (addr);
       err |= 1;
     }
 }
    }
  if (err)
    internal_error ("verify_stmts failed.");
  htab_delete (htab);
  timevar_pop (TV_TREE_STMT_VERIFY);
}
static int
tree_verify_flow_info (void)
{
  int err = 0;
  basic_block bb;
  block_stmt_iterator bsi;
  tree stmt;
  edge e;
  if (ENTRY_BLOCK_PTR->stmt_list)
    {
      error ("ENTRY_BLOCK has a statement list associated with it\n");
      err = 1;
    }
  if (EXIT_BLOCK_PTR->stmt_list)
    {
      error ("EXIT_BLOCK has a statement list associated with it\n");
      err = 1;
    }
  for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
    if (e->flags & 1)
      {
 error ("Fallthru to exit from bb %d\n", e->src->index);
 err = 1;
      }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      unsigned char found_ctrl_stmt = 0;
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
 {
   if (((enum tree_code) (bsi_stmt (bsi))->common.code) != LABEL_EXPR)
     break;
   if (label_to_block ((((bsi_stmt (bsi)))->exp.operands[0])) != bb)
     {
       error ("Label %s to block does not match in bb %d\n",
       ((const char *) (((bsi_stmt (bsi))->decl.name))->identifier.id.str),
       bb->index);
       err = 1;
     }
   if (decl_function_context ((((bsi_stmt (bsi)))->exp.operands[0]))
       != current_function_decl)
     {
       error ("Label %s has incorrect context in bb %d\n",
       ((const char *) (((bsi_stmt (bsi))->decl.name))->identifier.id.str),
       bb->index);
       err = 1;
     }
 }
      for (; !bsi_end_p (bsi); bsi_next (&bsi))
 {
   tree stmt = bsi_stmt (bsi);
   if (found_ctrl_stmt)
     {
       error ("Control flow in the middle of basic block %d\n",
       bb->index);
       err = 1;
     }
   if (stmt_ends_bb_p (stmt))
     found_ctrl_stmt = 1;
   if (((enum tree_code) (stmt)->common.code) == LABEL_EXPR)
     {
       error ("Label %s in the middle of basic block %d\n",
       ((const char *) (((stmt)->decl.name))->identifier.id.str),
       bb->index);
       err = 1;
     }
 }
      bsi = bsi_last (bb);
      if (bsi_end_p (bsi))
 continue;
      stmt = bsi_stmt (bsi);
      if (is_ctrl_stmt (stmt))
 {
   for (e = bb->succ; e; e = e->succ_next)
     if (e->flags & 1)
       {
  error ("Fallthru edge after a control statement in bb %d \n",
         bb->index);
  err = 1;
       }
 }
      switch (((enum tree_code) (stmt)->common.code))
 {
 case COND_EXPR:
   {
     edge true_edge;
     edge false_edge;
     if (((enum tree_code) (((((stmt))->exp.operands[1])))->common.code) != GOTO_EXPR
  || ((enum tree_code) (((((stmt))->exp.operands[2])))->common.code) != GOTO_EXPR)
       {
  error ("Structured COND_EXPR at the end of bb %d\n", bb->index);
  err = 1;
       }
     extract_true_false_edges_from_block (bb, &true_edge, &false_edge);
     if (!true_edge || !false_edge
  || !(true_edge->flags & 1024)
  || !(false_edge->flags & 2048)
  || (true_edge->flags & (1 | 2))
  || (false_edge->flags & (1 | 2))
  || bb->succ->succ_next->succ_next)
       {
  error ("Wrong outgoing edge flags at end of bb %d\n",
         bb->index);
  err = 1;
       }
     if (!has_label_p (true_edge->dest,
         (((((((stmt))->exp.operands[1]))))->exp.operands[0])))
       {
  error ("`then' label does not match edge at end of bb %d\n",
         bb->index);
  err = 1;
       }
     if (!has_label_p (false_edge->dest,
         (((((((stmt))->exp.operands[2]))))->exp.operands[0])))
       {
  error ("`else' label does not match edge at end of bb %d\n",
         bb->index);
  err = 1;
       }
   }
   break;
 case GOTO_EXPR:
   if (simple_goto_p (stmt))
     {
       error ("Explicit goto at end of bb %d\n", bb->index);
           err = 1;
     }
   else
     {
       for (e = bb->succ; e; e = e->succ_next)
  if ((e->flags & (1 | 1024
     | 2048))
      || !(e->flags & 2))
    {
      error ("Wrong outgoing edge flags at end of bb %d\n",
      bb->index);
      err = 1;
    }
     }
   break;
 case RETURN_EXPR:
   if (!bb->succ || bb->succ->succ_next
       || (bb->succ->flags & (1 | 2
           | 1024 | 2048)))
     {
       error ("Wrong outgoing edge flags at end of bb %d\n", bb->index);
       err = 1;
     }
   if (bb->succ->dest != EXIT_BLOCK_PTR)
     {
       error ("Return edge does not point to exit in bb %d\n",
       bb->index);
       err = 1;
     }
   break;
 case SWITCH_EXPR:
   {
     tree prev;
     edge e;
     size_t i, n;
     tree vec;
     vec = (((stmt))->exp.operands[2]);
     n = ((vec)->vec.length);
     for (i = 0; i < n; ++i)
       {
  tree lab = (((((vec)->vec.a[i])))->exp.operands[2]);
  basic_block label_bb = label_to_block (lab);
  if (label_bb->aux && label_bb->aux != (void *)1)
    fancy_abort ("gcc.c", 102837, "?");
  label_bb->aux = (void *)1;
       }
     prev = ((vec)->vec.a[0]);
     for (i = 1; i < n - 1; ++i)
       {
  tree c = ((vec)->vec.a[i]);
  if (! (((c))->exp.operands[0]))
    {
      error ("Found default case not at end of case vector");
      err = 1;
      continue;
    }
  if (! tree_int_cst_lt ((((prev))->exp.operands[0]), (((c))->exp.operands[0])))
    {
      error ("Case labels not sorted:\n ");
      print_generic_expr (stderr, prev, 0);
      fprintf (stderr," is greater than ");
      print_generic_expr (stderr, c, 0);
      fprintf (stderr," but comes before it.\n");
      err = 1;
    }
  prev = c;
       }
     if ((((((vec)->vec.a[n - 1])))->exp.operands[0]))
       {
  error ("No default case found at end of case vector");
  err = 1;
       }
     for (e = bb->succ; e; e = e->succ_next)
       {
  if (!e->dest->aux)
    {
      error ("Extra outgoing edge %d->%d\n",
      bb->index, e->dest->index);
      err = 1;
    }
  e->dest->aux = (void *)2;
  if ((e->flags & (1 | 2
     | 1024 | 2048)))
    {
      error ("Wrong outgoing edge flags at end of bb %d\n",
      bb->index);
      err = 1;
    }
       }
     for (i = 0; i < n; ++i)
       {
  tree lab = (((((vec)->vec.a[i])))->exp.operands[2]);
  basic_block label_bb = label_to_block (lab);
  if (label_bb->aux != (void *)2)
    {
      error ("Missing edge %i->%i\n",
      bb->index, label_bb->index);
      err = 1;
    }
       }
     for (e = bb->succ; e; e = e->succ_next)
       e->dest->aux = (void *)0;
   }
 default: ;
 }
    }
  if (dom_computed[CDI_DOMINATORS] >= DOM_NO_FAST_QUERY)
    verify_dominators (CDI_DOMINATORS);
  return err;
}
static void
tree_make_forwarder_block (edge fallthru)
{
  edge e;
  basic_block dummy, bb;
  tree phi, new_phi, var, prev, next;
  dummy = fallthru->src;
  bb = fallthru->dest;
  if (!bb->pred->pred_next)
    return;
  for (phi = phi_nodes (dummy); phi; phi = (((phi))->common.chain))
    {
      var = get_def_from_ptr (get_phi_result_ptr (phi));
      new_phi = create_phi_node (var, bb);
      (var)->common.chain = new_phi;
      ((*((get_phi_result_ptr (phi)).def)) = ((make_ssa_name ((var)->ssa_name.var, phi))));
      add_phi_arg (&new_phi, get_def_from_ptr (get_phi_result_ptr (phi)), fallthru);
    }
  prev = ((void *)0);
  for (phi = phi_nodes (bb); phi; phi = next)
    {
      next = (((phi))->common.chain);
      (((phi))->common.chain) = prev;
      prev = phi;
    }
  set_phi_nodes (bb, prev);
  for (e = bb->pred; e; e = e->pred_next)
    {
      if (e == fallthru)
 continue;
      for (phi = phi_nodes (bb), var = ((e)->insns.t);
    phi;
    phi = (((phi))->common.chain), var = ((var)->common.chain))
 add_phi_arg (&phi, ((var)->list.value), e);
      ((e)->insns.t) = ((void *)0);
    }
}
static unsigned char
tree_forwarder_block_p (basic_block bb)
{
  block_stmt_iterator bsi;
  edge e;
  if (! bb_ann (bb)->forwardable)
    return 0;
  if (!bb->succ
      || bb->succ->succ_next
      || bb->succ->dest == EXIT_BLOCK_PTR
      || (bb->succ->flags & 2)
      || bb == ENTRY_BLOCK_PTR)
    {
      bb_ann (bb)->forwardable = 0;
      return 0;
    }
  for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
    if (e->dest == bb)
      {
 bb_ann (bb)->forwardable = 0;
 return 0;
      }
  if (phi_nodes (bb))
    {
      bb_ann (bb)->forwardable = 0;
      return 0;
    }
  for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
    {
      tree stmt = bsi_stmt (bsi);
      switch (((enum tree_code) (stmt)->common.code))
 {
 case LABEL_EXPR:
   if ((((((stmt))->exp.operands[0]))->decl.nonlocal_flag))
     return 0;
   break;
 default:
   bb_ann (bb)->forwardable = 0;
   return 0;
 }
    }
  return 1;
}
static unsigned char
thread_jumps (void)
{
  edge e, next, last, old;
  basic_block bb, dest, tmp;
  tree phi;
  int arg;
  unsigned char retval = 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    bb_ann (bb)->forwardable = 1;
  for (bb = ENTRY_BLOCK_PTR; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      if (!bb->pred)
 continue;
      if (tree_forwarder_block_p (bb))
 continue;
      bb_ann (bb)->forwardable = 0;
      for (e = bb->succ; e; e = next)
 {
   next = e->succ_next;
   if ((e->flags & 2)
       || !tree_forwarder_block_p (e->dest))
     continue;
   last = e->dest->succ;
   bb_ann (e->dest)->forwardable = 0;
   for (dest = e->dest->succ->dest;
        tree_forwarder_block_p (dest);
        last = dest->succ,
        dest = dest->succ->dest)
     {
       if (!bb_ann (dest)->forwardable)
  break;
       if (dest->succ->dest == EXIT_BLOCK_PTR)
  break;
       bb_ann (dest)->forwardable = 0;
     }
   for (tmp = e->dest;
        tmp != dest;
        tmp = tmp->succ->dest)
     bb_ann (tmp)->forwardable = 1;
   if (dest == e->dest)
     continue;
   old = find_edge (bb, dest);
   if (old)
     {
       if (!phi_alternatives_equal (dest, last, old))
  {
    dest = last->src;
    if (dest == e->dest)
      continue;
    old = find_edge (bb, dest);
  }
     }
   retval = 1;
   e = redirect_edge_and_branch (e, dest);
   free_dominance_info (CDI_DOMINATORS);
   if (!old)
     {
       for (phi = phi_nodes (dest); phi; phi = (((phi))->common.chain))
  {
    arg = phi_arg_from_edge (phi, last);
    if (arg < 0)
      fancy_abort ("gcc.c", 103146, "?");
    add_phi_arg (&phi, get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((arg)))), e);
  }
     }
 }
      bb_ann (bb)->forwardable = 1;
    }
  return retval;
}
tree
tree_block_label (basic_block bb)
{
  block_stmt_iterator i, s = bsi_start (bb);
  unsigned char first = 1;
  tree label, stmt;
  for (i = s; !bsi_end_p (i); first = 0, bsi_next (&i))
    {
      stmt = bsi_stmt (i);
      if (((enum tree_code) (stmt)->common.code) != LABEL_EXPR)
 break;
      label = (((stmt))->exp.operands[0]);
      if (!((label)->decl.nonlocal_flag))
 {
   if (!first)
     bsi_move_before (&i, &s);
   return label;
 }
    }
  label = create_artificial_label ();
  stmt = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],label );
  bsi_insert_before (&s, stmt, BSI_NEW_STMT);
  return label;
}
static edge
tree_try_redirect_by_replacing_jump (edge e, basic_block target)
{
  basic_block src = e->src;
  edge tmp;
  block_stmt_iterator b;
  tree stmt;
  for (tmp = src->succ; tmp; tmp = tmp->succ_next)
    if (tmp->dest != target && tmp != e)
      break;
  if (tmp)
    return ((void *)0);
  b = bsi_last (src);
  if (bsi_end_p (b))
    return ((void *)0);
  stmt = bsi_stmt (b);
  if (((enum tree_code) (stmt)->common.code) == COND_EXPR
      || ((enum tree_code) (stmt)->common.code) == SWITCH_EXPR)
    {
      bsi_remove (&b);
      e = ssa_redirect_edge (e, target);
      e->flags = 1;
      return e;
    }
  return ((void *)0);
}
static edge
tree_redirect_edge_and_branch (edge e, basic_block dest)
{
  basic_block bb = e->src;
  block_stmt_iterator bsi;
  edge ret;
  tree label, stmt;
  if (e->flags & (4 | 8))
    return ((void *)0);
  if (e->src != ENTRY_BLOCK_PTR
      && (ret = tree_try_redirect_by_replacing_jump (e, dest)))
    return ret;
  if (e->dest == dest)
    return ((void *)0);
  label = tree_block_label (dest);
  bsi = bsi_last (bb);
  stmt = bsi_end_p (bsi) ? ((void *)0) : bsi_stmt (bsi);
  switch (stmt ? ((enum tree_code) (stmt)->common.code) : ERROR_MARK)
    {
    case COND_EXPR:
      stmt = (e->flags & 1024
       ? ((((stmt))->exp.operands[1]))
       : ((((stmt))->exp.operands[2])));
      (((stmt))->exp.operands[0]) = label;
      break;
    case GOTO_EXPR:
      fancy_abort ("gcc.c", 103270, "?");
    case SWITCH_EXPR:
      {
 tree vec = (((stmt))->exp.operands[2]);
 size_t i, n = ((vec)->vec.length);
 for (i = 0; i < n; ++i)
   {
     tree elt = ((vec)->vec.a[i]);
     if (label_to_block ((((elt))->exp.operands[2])) == e->dest)
       (((elt))->exp.operands[2]) = label;
   }
      }
      break;
    case RETURN_EXPR:
      bsi_remove (&bsi);
      e->flags |= 1;
      break;
    default:
      if (!(e->flags & 1))
 fancy_abort ("gcc.c", 103295, "?");
      break;
    }
  e = ssa_redirect_edge (e, dest);
  return e;
}
static basic_block
tree_redirect_edge_and_branch_force (edge e, basic_block dest)
{
  e = tree_redirect_edge_and_branch (e, dest);
  if (!e)
    fancy_abort ("gcc.c", 103315, "?");
  return ((void *)0);
}
static basic_block
tree_split_block (basic_block bb, void *stmt)
{
  block_stmt_iterator bsi, bsi_tgt;
  tree act;
  basic_block new_bb;
  edge e;
  new_bb = create_empty_bb (bb);
  new_bb->succ = bb->succ;
  bb->succ = ((void *)0);
  for (e = new_bb->succ; e; e = e->succ_next)
    e->src = new_bb;
  if (stmt && ((enum tree_code) ((tree) stmt)->common.code) == LABEL_EXPR)
    stmt = ((void *)0);
  for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
    {
      act = bsi_stmt (bsi);
      if (((enum tree_code) (act)->common.code) == LABEL_EXPR)
 continue;
      if (!stmt)
 break;
      if (stmt == act)
 {
   bsi_next (&bsi);
   break;
 }
    }
  bsi_tgt = bsi_start (new_bb);
  while (!bsi_end_p (bsi))
    {
      act = bsi_stmt (bsi);
      bsi_remove (&bsi);
      bsi_insert_after (&bsi_tgt, act, BSI_NEW_STMT);
    }
  return new_bb;
}
static unsigned char
tree_move_block_after (basic_block bb, basic_block after)
{
  if (bb->prev_bb == after)
    return 1;
  unlink_block (bb);
  link_block (bb, after);
  return 1;
}
static unsigned char
tree_can_duplicate_bb_p (basic_block bb )
{
  return 1;
}
static basic_block
tree_duplicate_bb (basic_block bb)
{
  basic_block new_bb;
  block_stmt_iterator bsi, bsi_tgt;
  new_bb = create_empty_bb (EXIT_BLOCK_PTR->prev_bb);
  bsi_tgt = bsi_start (new_bb);
  for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
    {
      tree stmt = bsi_stmt (bsi);
      tree copy;
      if (((enum tree_code) (stmt)->common.code) == LABEL_EXPR)
 continue;
      copy = unshare_expr (stmt);
      get_stmt_ann (copy);
      copy_virtual_operands (copy, stmt);
      bsi_insert_after (&bsi_tgt, copy, BSI_NEW_STMT);
    }
  return new_bb;
}
void
dump_function_to_file (tree fn, FILE *file, int flags)
{
  tree arg, vars, var;
  unsigned char ignore_topmost_bind = 0, any_var = 0;
  basic_block bb;
  tree chain;
  fprintf (file, "%s (", lang_hooks.decl_printable_name (fn, 2));
  arg = ((fn)->decl.arguments);
  while (arg)
    {
      print_generic_expr (file, arg, dump_flags);
      if (((arg)->common.chain))
 fprintf (file, ", ");
      arg = ((arg)->common.chain);
    }
  fprintf (file, ")\n");
  if (flags & (1 << 2))
    {
      dump_node (fn, (1 << 1) | flags, file);
      return;
    }
  if (cfun && cfun->unexpanded_var_list)
    {
      ignore_topmost_bind = 1;
      fprintf (file, "{\n");
      for (vars = cfun->unexpanded_var_list; vars; vars = ((vars)->common.chain))
 {
   var = ((vars)->list.value);
   print_generic_decl (file, var, flags);
   fprintf (file, "\n");
   any_var = 1;
 }
    }
  if (basic_block_info)
    {
      if (!ignore_topmost_bind)
 fprintf (file, "{\n");
      if (any_var && n_basic_blocks)
 fprintf (file, "\n");
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 dump_generic_bb (file, bb, 2, flags);
      fprintf (file, "}\n");
    }
  else
    {
      int indent;
      chain = ((fn)->decl.saved_tree);
      if (((enum tree_code) (chain)->common.code) == BIND_EXPR)
 {
   if (ignore_topmost_bind)
     {
       chain = ((((chain))->exp.operands[1]));
       indent1 = 2;
     }
   else
     indent1 = 0;
 }
      else
 {
   if (!ignore_topmost_bind)
     fprintf (file, "{\n");
   indent1 = 2;
 }
      if (any_var)
 fprintf (file, "\n");
      print_generic_stmt_indented (file, chain, flags, indent1);
      if (ignore_topmost_bind)
 fprintf (file, "}\n");
    }
  fprintf (file, "\n\n");
}
static void print_loop (FILE *, struct loop *, int);
static void print_pred_bbs (FILE *, edge);
static void print_succ_bbs (FILE *, edge);
static void
print_pred_bbs (FILE *file, edge e)
{
  if (e == ((void *)0))
    return;
  else if (e->pred_next == ((void *)0))
    fprintf (file, "bb_%d", e->src->index);
  else
    {
      fprintf (file, "bb_%d, ", e->src->index);
      print_pred_bbs (file, e->pred_next);
    }
}
static void
print_succ_bbs (FILE *file, edge e)
{
  if (e == ((void *)0))
    return;
  else if (e->succ_next == ((void *)0))
    fprintf (file, "bb_%d", e->dest->index);
  else
    {
      fprintf (file, "bb_%d, ", e->dest->index);
      print_succ_bbs (file, e->succ_next);
    }
}
static void
print_loop (FILE *file, struct loop *loop, int indent1)
{
  char *s_indent1;
  basic_block bb;
  if (loop == ((void *)0))
    return;
  s_indent1 = (char *) C_alloca((size_t) indent1 + 1);
  memset ((void *) s_indent1, ' ', (size_t) indent1);
  s_indent1[indent1] = '\0';
  fprintf (file, "%sloop_%d\n", s_indent1, loop->num);
  fprintf (file, "%s{\n", s_indent1);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (bb->loop_father == loop)
      {
 fprintf (file, "%s  bb_%d (preds = {", s_indent1, bb->index);
 print_pred_bbs (file, bb->pred);
 fprintf (file, "}, succs = {");
 print_succ_bbs (file, bb->succ);
 fprintf (file, "})\n");
 fprintf (file, "%s  {\n", s_indent1);
 tree_dump_bb (bb, file, indent1 + 4);
 fprintf (file, "%s  }\n", s_indent1);
      }
  print_loop (file, loop->inner, indent1 + 2);
  fprintf (file, "%s}\n", s_indent1);
  print_loop (file, loop->next, indent1);
}
void
print_loop_ir (FILE *file)
{
  basic_block bb;
  bb = (((basic_block_info)->data.bb[(0)]));
  if (bb && bb->loop_father)
    print_loop (file, bb->loop_father, 0);
}
void
debug_loop_ir (void)
{
  print_loop_ir (stderr);
}
static unsigned char
tree_block_ends_with_call_p (basic_block bb)
{
  block_stmt_iterator bsi = bsi_last (bb);
  tree t = tsi_stmt (bsi.tsi);
  if (((enum tree_code) (t)->common.code) == RETURN_EXPR && ((t)->exp.operands[0]))
    t = ((t)->exp.operands[0]);
  if (((enum tree_code) (t)->common.code) == MODIFY_EXPR)
    t = ((t)->exp.operands[1]);
  return ((enum tree_code) (t)->common.code) == CALL_EXPR;
}
static unsigned char
tree_block_ends_with_condjump_p (basic_block bb)
{
  tree stmt = tsi_stmt (bsi_last (bb).tsi);
  return (((enum tree_code) (stmt)->common.code) == COND_EXPR);
}
static unsigned char
need_fake_tree_edge_p (tree t)
{
  if (((enum tree_code) (t)->common.code) == RETURN_EXPR && ((t)->exp.operands[0]))
    t = ((t)->exp.operands[0]);
  if (((enum tree_code) (t)->common.code) == MODIFY_EXPR)
    t = ((t)->exp.operands[1]);
  if (((enum tree_code) (t)->common.code) == CALL_EXPR
      && !(call_expr_flags (t) &
     (2 | 64 | 1024)))
    return 1;
  if (((enum tree_code) (t)->common.code) == ASM_EXPR
       && ((((t)->common.public_flag)) || (((t)->common.static_flag))))
    return 1;
  return 0;
}
static int
tree_flow_call_edges_add (sbitmap blocks)
{
  int i;
  int blocks_split = 0;
  int last_bb = last_basic_block;
  unsigned char check_last_block = 0;
  if (n_basic_blocks == 0)
    return 0;
  if (! blocks)
    check_last_block = 1;
  else
    check_last_block = ((blocks)->elms [(EXIT_BLOCK_PTR->prev_bb->index) / ((unsigned) (8 * 4))] >> (EXIT_BLOCK_PTR->prev_bb->index) % ((unsigned) (8 * 4)) & 1);
  if (check_last_block)
    {
      basic_block bb = EXIT_BLOCK_PTR->prev_bb;
      block_stmt_iterator bsi = bsi_last (bb);
      tree t = (tree) ((void *)0);
      if (!bsi_end_p (bsi))
 t = bsi_stmt (bsi);
      if (need_fake_tree_edge_p (t))
 {
   edge e;
   for (e = bb->succ; e; e = e->succ_next)
     if (e->dest == EXIT_BLOCK_PTR)
       {
  bsi_insert_on_edge (e, build_empty_stmt ());
  bsi_commit_edge_inserts ((int *)((void *)0));
  break;
       }
 }
    }
  for (i = 0; i < last_bb; i++)
    {
      basic_block bb = (((basic_block_info)->data.bb[(i)]));
      block_stmt_iterator bsi;
      tree stmt, last_stmt;
      if (!bb)
 continue;
      if (blocks && !((blocks)->elms [(i) / ((unsigned) (8 * 4))] >> (i) % ((unsigned) (8 * 4)) & 1))
 continue;
      bsi = bsi_last (bb);
      if (!bsi_end_p (bsi))
 {
   last_stmt = bsi_stmt (bsi);
   do
     {
       stmt = bsi_stmt (bsi);
       if (need_fake_tree_edge_p (stmt))
  {
    edge e;
    if (stmt != last_stmt)
      {
        e = split_block (bb, stmt);
        if (e)
   blocks_split++;
      }
    make_edge (bb, EXIT_BLOCK_PTR, 16);
  }
       bsi_prev (&bsi);
     }
   while (!bsi_end_p (bsi));
 }
    }
  if (blocks_split)
    verify_flow_info ();
  return blocks_split;
}
unsigned char
tree_purge_dead_eh_edges (basic_block bb)
{
  unsigned char changed = 0;
  edge e, next;
  tree stmt = last_stmt (bb);
  if (stmt && tree_can_throw_internal (stmt))
    return 0;
  for (e = bb->succ; e ; e = next)
    {
      next = e->succ_next;
      if (e->flags & 8)
 {
   ssa_remove_edge (e);
   changed = 1;
 }
    }
  return changed;
}
unsigned char
tree_purge_all_dead_eh_edges (bitmap blocks)
{
  unsigned char changed = 0;
  size_t i;
  do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { changed |= tree_purge_dead_eh_edges ((((basic_block_info)->data.bb[(i)]))); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                                               ;
  return changed;
}
struct cfg_hooks tree_cfg_hooks = {
  "tree",
  tree_verify_flow_info,
  tree_dump_bb,
  create_bb,
  tree_redirect_edge_and_branch,
  tree_redirect_edge_and_branch_force,
  remove_bb,
  tree_split_block,
  tree_move_block_after,
  tree_can_merge_blocks_p,
  tree_merge_blocks,
  tree_predict_edge,
  tree_predicted_by_p,
  tree_can_duplicate_bb_p,
  tree_duplicate_bb,
  tree_split_edge,
  tree_make_forwarder_block,
  ((void *)0),
  tree_block_ends_with_call_p,
  tree_block_ends_with_condjump_p,
  tree_flow_call_edges_add
};
static void
split_critical_edges (void)
{
  basic_block bb;
  edge e;
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    {
      for (e = bb->succ; e ; e = e->succ_next)
 if (((e)->src->succ->succ_next && (e)->dest->pred->pred_next) && !(e->flags & 2))
   {
     split_edge (e);
   }
    }
}
struct tree_opt_pass pass_split_crit_edges =
{
  "crited",
  ((void *)0),
  split_critical_edges,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_SPLIT_EDGES,
  (1 << 3),
  (1 << 7),
  0,
  0,
  (1 << 0)
};
static void
execute_warn_function_return (void)
{
  location_t *locus;
  tree last;
  edge e;
  if (warn_missing_noreturn
      && !((cfun->decl)->common.volatile_flag)
      && EXIT_BLOCK_PTR->pred == ((void *)0)
      && !lang_hooks.function.missing_noreturn_ok_p (cfun->decl))
    warning ("%Jfunction might be possible candidate for attribute `noreturn'",
      cfun->decl);
  if (((cfun->decl)->common.volatile_flag)
      && EXIT_BLOCK_PTR->pred != ((void *)0))
    {
      locus = ((void *)0);
      for (e = EXIT_BLOCK_PTR->pred; e ; e = e->pred_next)
 {
   last = last_stmt (e->src);
   if (((enum tree_code) (last)->common.code) == RETURN_EXPR
       && (locus = ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (last)->common.code))])) != 0) ? (last)->exp.locus : (location_t *)((void *)0))) != ((void *)0))
     break;
 }
      if (!locus)
 locus = &cfun->function_end_locus;
      warning ("%H`noreturn' function does return", locus);
    }
  else if (warn_return_type
    && EXIT_BLOCK_PTR->pred != ((void *)0)
    && !(((enum tree_code) (((((cfun->decl)->common.type))->common.type))->common.code) == VOID_TYPE))
    {
      for (e = EXIT_BLOCK_PTR->pred; e ; e = e->pred_next)
 {
   tree last = last_stmt (e->src);
   if (((enum tree_code) (last)->common.code) == RETURN_EXPR
       && ((last)->exp.operands[0]) == ((void *)0))
     {
       locus = ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (last)->common.code))])) != 0) ? (last)->exp.locus : (location_t *)((void *)0));
       if (!locus)
  locus = &cfun->function_end_locus;
       warning ("%Hcontrol reaches end of non-void function", locus);
       break;
     }
 }
    }
}
void
extract_true_false_edges_from_block (basic_block b,
         edge *true_edge,
         edge *false_edge)
{
  edge e = b->succ;
  if (e->flags & 1024)
    {
      *true_edge = e;
      *false_edge = e->succ_next;
    }
  else
    {
      *false_edge = e;
      *true_edge = e->succ_next;
    }
}
struct tree_opt_pass pass_warn_function_return =
{
  ((void *)0),
  ((void *)0),
  execute_warn_function_return,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 3),
  0,
  0,
  0,
  0
};
const struct ggc_root_tab gt_ggc_r_gt_tree_cfg_h[] = {
  {
    &label_to_block_map,
    1,
    sizeof (label_to_block_map),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
union alias_var_def;
struct aterm_;
struct aterm_list_a;
enum alias_var_kind
{
  ATERM_AVAR
};
struct alias_var_common
{
  enum alias_var_kind kind;
  unsigned int varnum;
  tree decl;
};
struct alias_var_aterm
{
  struct alias_var_common common;
  struct aterm_ * term;
  struct aterm_list_a * ptset;
};
union alias_var_def
{
  struct alias_var_common common;
  struct alias_var_aterm aterm;
};
typedef union alias_var_def *alias_var;
union alias_type_def;
typedef union alias_type_def *alias_type;
alias_var alias_var_new_with_aterm (tree, struct aterm_ *);
struct tree_alias_ops
{
  void (*init) (struct tree_alias_ops *);
  void (*cleanup) (struct tree_alias_ops *);
  alias_var (*add_var) (struct tree_alias_ops *, tree);
  alias_var (*add_var_same) (struct tree_alias_ops *, tree,
     alias_var);
  void (*simple_assign) (struct tree_alias_ops *, alias_var,
    alias_var);
  void (*addr_assign) (struct tree_alias_ops *, alias_var, alias_var);
  void (*ptr_assign) (struct tree_alias_ops *, alias_var, alias_var);
  void (*op_assign) (struct tree_alias_ops *, alias_var, varray_type,
       tree, bitmap);
  void (*heap_assign) (struct tree_alias_ops *, alias_var);
  void (*assign_ptr) (struct tree_alias_ops *, alias_var, alias_var);
  void (*function_def) (struct tree_alias_ops *, alias_var,
   varray_type, alias_var);
  int (*function_call) (struct tree_alias_ops *, alias_var,
   alias_var, varray_type, bitmap);
  unsigned char (*may_alias) (struct tree_alias_ops *, alias_var, alias_var);
  unsigned char (*same_points_to_set) (struct tree_alias_ops *, alias_var,
         alias_var);
  unsigned char (*empty_points_to_set) (struct tree_alias_ops *, alias_var);
  void *data;
  unsigned int ip:1;
  unsigned int ip_partial:1;
};
extern struct tree_alias_ops *current_alias_ops;
extern void init_alias_vars (void);
extern unsigned char ptr_may_alias_var (tree, tree);
extern unsigned char same_points_to_set (tree, tree);
extern unsigned char empty_points_to_set (tree);
extern const char *alias_get_name (tree);
extern tree convert_to_integer (tree, tree);
extern tree convert_to_pointer (tree, tree);
extern tree convert_to_real (tree, tree);
extern tree convert_to_complex (tree, tree);
extern tree convert_to_vector (tree, tree);
typedef struct param_info
{
  const char *const option;
  int value1;
  const char *const help;
} param_info;
extern param_info *compiler_params;
extern void add_params (const param_info params[], size_t n);
extern void set_param_value (const char *name, int value1);
typedef enum compiler_param
{
PARAM_MAX_INLINE_INSNS_SINGLE,
PARAM_MAX_INLINE_INSNS_AUTO,
PARAM_MAX_INLINE_INSNS_RECURSIVE,
PARAM_MAX_INLINE_INSNS_RECURSIVE_AUTO,
PARAM_MAX_INLINE_RECURSIVE_DEPTH,
PARAM_MAX_INLINE_RECURSIVE_DEPTH_AUTO,
PARAM_MAX_INLINE_INSNS_RTL,
PARAM_MAX_DELAY_SLOT_INSN_SEARCH,
PARAM_MAX_DELAY_SLOT_LIVE_SEARCH,
PARAM_MAX_PENDING_LIST_LENGTH,
PARAM_LARGE_FUNCTION_INSNS,
PARAM_LARGE_FUNCTION_GROWTH,
PARAM_INLINE_UNIT_GROWTH,
PARAM_MAX_GCSE_MEMORY,
PARAM_MAX_GCSE_PASSES,
PARAM_GCSE_AFTER_RELOAD_PARTIAL_FRACTION,
PARAM_GCSE_AFTER_RELOAD_CRITICAL_FRACTION,
PARAM_MAX_UNROLLED_INSNS,
PARAM_MAX_AVERAGE_UNROLLED_INSNS,
PARAM_MAX_UNROLL_TIMES,
PARAM_MAX_PEELED_INSNS,
PARAM_MAX_PEEL_TIMES,
PARAM_MAX_COMPLETELY_PEELED_INSNS,
PARAM_MAX_COMPLETELY_PEEL_TIMES,
PARAM_MAX_ONCE_PEELED_INSNS,
PARAM_MAX_UNSWITCH_INSNS,
PARAM_MAX_UNSWITCH_LEVEL,
PARAM_MAX_SMS_LOOP_NUMBER,
PARAM_SMS_MAX_II_FACTOR,
PARAM_SMS_DFA_HISTORY,
PARAM_SMS_LOOP_AVERAGE_COUNT_THRESHOLD,
HOT_BB_COUNT_FRACTION,
HOT_BB_FREQUENCY_FRACTION,
TRACER_DYNAMIC_COVERAGE_FEEDBACK,
TRACER_DYNAMIC_COVERAGE,
TRACER_MAX_CODE_GROWTH,
TRACER_MIN_BRANCH_RATIO,
TRACER_MIN_BRANCH_PROBABILITY_FEEDBACK,
TRACER_MIN_BRANCH_PROBABILITY,
PARAM_MAX_CROSSJUMP_EDGES,
PARAM_MAX_CSE_PATH_LENGTH,
PARAM_GLOBAL_VAR_THRESHOLD,
PARAM_MAX_CSELIB_MEMORY_LOCATIONS,
GGC_MIN_EXPAND,
GGC_MIN_HEAPSIZE,
PARAM_MAX_RELOAD_SEARCH_INSNS,
PARAM_MAX_ALIASED_VOPS,
PARAM_MAX_SCHED_REGION_BLOCKS,
PARAM_MAX_SCHED_REGION_INSNS,
  LAST_PARAM
} compiler_param;
struct dfa_stats_d
{
  long num_stmt_anns;
  long num_var_anns;
  long num_defs;
  long num_uses;
  long num_phis;
  long num_phi_args;
  int max_num_phi_args;
  long num_v_may_defs;
  long num_vuses;
  long num_v_must_defs;
};
struct walk_state
{
  htab_t vars_found;
};
static void collect_dfa_stats (struct dfa_stats_d *);
static tree collect_dfa_stats_r (tree *, int *, void *);
static void add_immediate_use (tree, tree);
static tree find_vars_r (tree *, int *, void *);
static void add_referenced_var (tree, struct walk_state *);
static void compute_immediate_uses_for_phi (tree, unsigned char (*)(tree));
static void compute_immediate_uses_for_stmt (tree, int, unsigned char (*)(tree));
static void find_hidden_use_vars (tree);
static tree find_hidden_use_vars_r (tree *, int *, void *);
varray_type referenced_vars;
static void
find_referenced_vars (void)
{
  htab_t vars_found;
  basic_block bb;
  block_stmt_iterator si;
  struct walk_state walk_state;
  tree block;
  block = ((current_function_decl)->decl.initial);
  while (block)
    {
      find_hidden_use_vars (block);
      block = (((block))->common.chain);
    }
  vars_found = htab_create (50, htab_hash_pointer, htab_eq_pointer, ((void *)0));
  memset (&walk_state, 0, sizeof (walk_state));
  walk_state.vars_found = vars_found;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
      {
 tree *stmt_p = bsi_stmt_ptr (si);
 walk_tree (stmt_p, find_vars_r, &walk_state, ((void *)0));
      }
  htab_delete (vars_found);
}
struct tree_opt_pass pass_referenced_vars =
{
  ((void *)0),
  ((void *)0),
  find_referenced_vars,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 2) | (1 << 3),
  (1 << 4),
  0,
  0,
  0
};
void
compute_immediate_uses (int flags, unsigned char (*calc_for)(tree))
{
  basic_block bb;
  block_stmt_iterator si;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree phi;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 compute_immediate_uses_for_phi (phi, calc_for);
      for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
        {
   tree stmt = bsi_stmt (si);
   get_stmt_operands (stmt);
   compute_immediate_uses_for_stmt (stmt, flags, calc_for);
 }
    }
}
static void
free_df_for_stmt (tree stmt)
{
  stmt_ann_t ann = stmt_ann (stmt);
  if (ann && ann->df)
    {
      if (ann->df->immediate_uses)
 ggc_free (ann->df->immediate_uses);
      ggc_free (ann->df);
      ann->df = ((void *)0);
    }
}
void
free_df (void)
{
  basic_block bb;
  block_stmt_iterator si;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree phi;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 free_df_for_stmt (phi);
      for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
        {
   tree stmt = bsi_stmt (si);
   free_df_for_stmt (stmt);
 }
    }
}
static void
compute_immediate_uses_for_phi (tree phi, unsigned char (*calc_for)(tree))
{
  int i;
  for (i = 0; i < (phi)->phi.num_args; i++)
    {
      tree arg = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
      if (((enum tree_code) (arg)->common.code) == SSA_NAME && (!calc_for || calc_for (arg)))
 {
   tree imm_rdef_stmt = (get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i)))))->common.chain;
   if (!(((enum tree_code) (imm_rdef_stmt)->common.code) == NOP_EXPR && (((enum tree_code) (((imm_rdef_stmt)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((imm_rdef_stmt)->exp.operands[0]))))
     add_immediate_use (imm_rdef_stmt, phi);
 }
    }
}
static void
compute_immediate_uses_for_stmt (tree stmt, int flags, unsigned char (*calc_for)(tree))
{
  size_t i;
  use_optype uses;
  vuse_optype vuses;
  v_may_def_optype v_may_defs;
  stmt_ann_t ann;
  ann = stmt_ann (stmt);
  if (flags & 1 << 0)
    {
      uses = get_use_ops (ann);
      for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
 {
   tree use = (get_use_from_ptr (get_use_op_ptr (((uses)), ((i)))));
   tree imm_stmt = (use)->common.chain;
   if (!(((enum tree_code) (imm_stmt)->common.code) == NOP_EXPR && (((enum tree_code) (((imm_stmt)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((imm_stmt)->exp.operands[0]))) && (!calc_for || calc_for (use)))
     add_immediate_use (imm_stmt, stmt);
 }
    }
  if (flags & 1 << 1)
    {
      vuses = get_vuse_ops (ann);
      for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
 {
   tree vuse = (get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((i)))));
   tree imm_rdef_stmt = (vuse)->common.chain;
   if (!(((enum tree_code) (imm_rdef_stmt)->common.code) == NOP_EXPR && (((enum tree_code) (((imm_rdef_stmt)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((imm_rdef_stmt)->exp.operands[0]))) && (!calc_for || calc_for (vuse)))
     add_immediate_use (imm_rdef_stmt, stmt);
 }
      v_may_defs = get_v_may_def_ops (ann);
      for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
 {
   tree vuse = (get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((i)))));
   tree imm_rdef_stmt = (vuse)->common.chain;
   if (!(((enum tree_code) (imm_rdef_stmt)->common.code) == NOP_EXPR && (((enum tree_code) (((imm_rdef_stmt)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((imm_rdef_stmt)->exp.operands[0]))) && (!calc_for || calc_for (vuse)))
     add_immediate_use (imm_rdef_stmt, stmt);
 }
    }
}
static void
add_immediate_use (tree stmt, tree use_stmt)
{
  stmt_ann_t ann = get_stmt_ann (stmt);
  struct dataflow_d *df;
  df = ann->df;
  if (df == ((void *)0))
    {
      df = ann->df = ggc_alloc_stat (sizeof (struct dataflow_d) );
      memset ((void *) df, 0, sizeof (struct dataflow_d));
      df->uses[0] = use_stmt;
      return;
    }
  if (!df->uses[1])
    {
      df->uses[1] = use_stmt;
      return;
    }
  if (ann->df->immediate_uses == ((void *)0))
    ann->df->immediate_uses = varray_init (4, VARRAY_DATA_TREE, "immediate_uses");
  do { if ((ann->df->immediate_uses)->elements_used >= (ann->df->immediate_uses)->num_elements) (((ann->df->immediate_uses)) = varray_grow ((ann->df->immediate_uses), 2 * (ann->df->immediate_uses)->num_elements)); (ann->df->immediate_uses)->data.tree1[(ann->df->immediate_uses)->elements_used++] = (use_stmt); } while (0);
}
static void
redirect_immediate_use (tree use, tree old, tree new)
{
  tree imm_stmt = (use)->common.chain;
  struct dataflow_d *df = get_stmt_ann (imm_stmt)->df;
  unsigned int num_uses = num_immediate_uses (df);
  unsigned int i;
  for (i = 0; i < num_uses; i++)
    {
      if (immediate_use (df, i) == old)
 {
   if (i == 0 || i == 1)
     df->uses[i] = new;
   else
     ((df->immediate_uses)->data.tree1[i - 2]) = new;
 }
    }
}
void
redirect_immediate_uses (tree old, tree new)
{
  stmt_ann_t ann = get_stmt_ann (old);
  use_optype uses = get_use_ops (ann);
  vuse_optype vuses = get_vuse_ops (ann);
  v_may_def_optype v_may_defs = get_v_may_def_ops (ann);
  unsigned int i;
  for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
    redirect_immediate_use ((get_use_from_ptr (get_use_op_ptr (((uses)), ((i))))), old, new);
  for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
    redirect_immediate_use ((get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((i))))), old, new);
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    redirect_immediate_use ((get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((i))))), old, new);
}
var_ann_t
create_var_ann (tree t)
{
  var_ann_t ann;
  ann = ggc_alloc_stat (sizeof (*ann) );
  memset ((void *) ann, 0, sizeof (*ann));
  ann->common.type = VAR_ANN;
  t->common.ann = (tree_ann_t) ann;
  return ann;
}
stmt_ann_t
create_stmt_ann (tree t)
{
  stmt_ann_t ann;
  ann = ggc_alloc_stat (sizeof (*ann) );
  memset ((void *) ann, 0, sizeof (*ann));
  ann->common.type = STMT_ANN;
  ann->modified = 1;
  t->common.ann = (tree_ann_t) ann;
  return ann;
}
tree_ann_t
create_tree_ann (tree t)
{
  tree_ann_t ann;
  ann = ggc_alloc_stat (sizeof (*ann) );
  memset ((void *) ann, 0, sizeof (*ann));
  ann->common.type = TREE_ANN_COMMON;
  t->common.ann = ann;
  return ann;
}
tree
make_rename_temp (tree type, const char *prefix)
{
  tree t = create_tmp_var (type, prefix);
  add_referenced_tmp_var (t);
  bitmap_set_bit (vars_to_rename, var_ann (t)->uid);
  return t;
}
void dump_variable_dfa (FILE *file, tree var);
void
dump_referenced_vars (FILE *file)
{
  size_t i;
  fprintf (file, "\nReferenced variables in %s: %u\n\n",
    get_name (current_function_decl), (unsigned) ((referenced_vars)->elements_used));
  for (i = 0; i < ((referenced_vars)->elements_used); i++)
    {
      tree var = ((referenced_vars)->data.tree1[i]);
      fprintf (file, "Variable: ");
      dump_variable_dfa (file, var);
      fprintf (file, "\n");
    }
}
void
debug_referenced_vars (void)
{
  dump_referenced_vars (stderr);
}
void
dump_variable_dfa (FILE *file, tree var)
{
  var_ann_t ann;
  if (var == (tree) ((void *)0))
    {
      fprintf (file, "<nil>");
      return;
    }
  print_generic_expr (file, var, dump_flags);
  if (((enum tree_code) (var)->common.code) == SSA_NAME)
    var = (var)->ssa_name.var;
  ann = var_ann (var);
  fprintf (file, ", UID %u", (unsigned) ann->uid);
  if (ann->has_hidden_use)
    fprintf (file, ", has hidden uses");
  if (ann->type_mem_tag)
    {
      fprintf (file, ", type memory tag: ");
      print_generic_expr (file, ann->type_mem_tag, dump_flags);
    }
  if (ann->is_alias_tag)
    fprintf (file, ", is an alias tag");
  if (needs_to_live_in_memory (var))
    fprintf (file, ", is %s", ((var)->common.static_flag) ? "static" : "global");
  if (is_call_clobbered (var))
    fprintf (file, ", call clobbered");
  if (ann->default_def)
    {
      fprintf (file, ", default def: ");
      print_generic_expr (file, ann->default_def, dump_flags);
    }
  if (ann->may_aliases)
    {
      fprintf (file, ", may aliases: ");
      dump_may_aliases_for (file, var);
    }
  fprintf (file, "\n");
}
void
debug_variable (tree var)
{
  dump_variable_dfa (stderr, var);
}
void
dump_immediate_uses (FILE *file)
{
  basic_block bb;
  block_stmt_iterator si;
  const char *funcname
    = lang_hooks.decl_printable_name (current_function_decl, 2);
  fprintf (file, "\nDef-use edges for function %s\n", funcname);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree phi;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 dump_immediate_uses_for (file, phi);
      for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
 dump_immediate_uses_for (file, bsi_stmt (si));
    }
  fprintf (file, "\n");
}
void
debug_immediate_uses (void)
{
  dump_immediate_uses (stderr);
}
void
dump_immediate_uses_for (FILE *file, tree stmt)
{
  dataflow_t df = get_immediate_uses (stmt);
  int num_imm_uses = num_immediate_uses (df);
  if (num_imm_uses > 0)
    {
      int i;
      fprintf (file, "-> ");
      print_generic_stmt (file, stmt, (1 << 1));
      fprintf (file, "\n");
      for (i = 0; i < num_imm_uses; i++)
 {
   fprintf (file, "\t");
   print_generic_stmt (file, immediate_use (df, i), (1 << 1));
   fprintf (file, "\n");
 }
      fprintf (file, "\n");
    }
}
void
debug_immediate_uses_for (tree stmt)
{
  dump_immediate_uses_for (stderr, stmt);
}
void
dump_dfa_stats (FILE *file)
{
  struct dfa_stats_d dfa_stats;
  unsigned long size, total = 0;
  const char * const fmt_str = "%-30s%-13s%12s\n";
  const char * const fmt_str_1 = "%-30s%13lu%11lu%c\n";
  const char * const fmt_str_3 = "%-43s%11lu%c\n";
  const char *funcname
    = lang_hooks.decl_printable_name (current_function_decl, 2);
  collect_dfa_stats (&dfa_stats);
  fprintf (file, "\nDFA Statistics for %s\n\n", funcname);
  fprintf (file, "---------------------------------------------------------\n");
  fprintf (file, fmt_str, "", "  Number of  ", "Memory");
  fprintf (file, fmt_str, "", "  instances  ", "used ");
  fprintf (file, "---------------------------------------------------------\n");
  size = ((referenced_vars)->elements_used) * sizeof (tree);
  total += size;
  fprintf (file, fmt_str_1, "Referenced variables", ((referenced_vars)->elements_used),
    ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))), ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  size = dfa_stats.num_stmt_anns * sizeof (struct stmt_ann_d);
  total += size;
  fprintf (file, fmt_str_1, "Statements annotated", dfa_stats.num_stmt_anns,
    ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))), ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  size = dfa_stats.num_var_anns * sizeof (struct var_ann_d);
  total += size;
  fprintf (file, fmt_str_1, "Variables annotated", dfa_stats.num_var_anns,
    ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))), ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  size = dfa_stats.num_uses * sizeof (tree *);
  total += size;
  fprintf (file, fmt_str_1, "USE operands", dfa_stats.num_uses,
    ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))), ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  size = dfa_stats.num_defs * sizeof (tree *);
  total += size;
  fprintf (file, fmt_str_1, "DEF operands", dfa_stats.num_defs,
    ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))), ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  size = dfa_stats.num_vuses * sizeof (tree *);
  total += size;
  fprintf (file, fmt_str_1, "VUSE operands", dfa_stats.num_vuses,
    ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))), ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  size = dfa_stats.num_v_may_defs * sizeof (tree *);
  total += size;
  fprintf (file, fmt_str_1, "V_MAY_DEF operands", dfa_stats.num_v_may_defs,
    ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))), ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  size = dfa_stats.num_v_must_defs * sizeof (tree *);
  total += size;
  fprintf (file, fmt_str_1, "V_MUST_DEF operands", dfa_stats.num_v_must_defs,
    ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))), ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  size = dfa_stats.num_phis * sizeof (struct tree_phi_node);
  total += size;
  fprintf (file, fmt_str_1, "PHI nodes", dfa_stats.num_phis,
    ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))), ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  size = dfa_stats.num_phi_args * sizeof (struct phi_arg_d);
  total += size;
  fprintf (file, fmt_str_1, "PHI arguments", dfa_stats.num_phi_args,
     ((unsigned long) ((size) < 1024*10 ? (size) : ((size) < 1024*1024*10 ? (size) / 1024 : (size) / (1024*1024)))), ((size) < 1024*10 ? 'b' : ((size) < 1024*1024*10 ? 'k' : 'M')));
  fprintf (file, "---------------------------------------------------------\n");
  fprintf (file, fmt_str_3, "Total memory used by DFA/SSA data", ((unsigned long) ((total) < 1024*10 ? (total) : ((total) < 1024*1024*10 ? (total) / 1024 : (total) / (1024*1024)))),
    ((total) < 1024*10 ? 'b' : ((total) < 1024*1024*10 ? 'k' : 'M')));
  fprintf (file, "---------------------------------------------------------\n");
  fprintf (file, "\n");
  if (dfa_stats.num_phis)
    fprintf (file, "Average number of arguments per PHI node: %.1f (max: %d)\n",
      (float) dfa_stats.num_phi_args / (float) dfa_stats.num_phis,
      dfa_stats.max_num_phi_args);
  fprintf (file, "\n");
}
void
debug_dfa_stats (void)
{
  dump_dfa_stats (stderr);
}
static void
collect_dfa_stats (struct dfa_stats_d *dfa_stats_p)
{
  htab_t htab;
  basic_block bb;
  block_stmt_iterator i;
  if (dfa_stats_p == ((void *)0))
    fancy_abort ("gcc.c", 105518, "?");
  memset ((void *)dfa_stats_p, 0, sizeof (struct dfa_stats_d));
  htab = htab_create (30, htab_hash_pointer, htab_eq_pointer, ((void *)0));
  for (i = bsi_start ((((basic_block_info)->data.bb[(0)]))); !bsi_end_p (i); bsi_next (&i))
    walk_tree (bsi_stmt_ptr (i), collect_dfa_stats_r, (void *) dfa_stats_p,
        (void *) htab);
  htab_delete (htab);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree phi;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 {
   dfa_stats_p->num_phis++;
   dfa_stats_p->num_phi_args += (phi)->phi.num_args;
   if ((phi)->phi.num_args > dfa_stats_p->max_num_phi_args)
     dfa_stats_p->max_num_phi_args = (phi)->phi.num_args;
 }
    }
}
static tree
collect_dfa_stats_r (tree *tp, int *walk_subtrees ,
       void *data)
{
  tree t = *tp;
  struct dfa_stats_d *dfa_stats_p = (struct dfa_stats_d *)data;
  if (t->common.ann)
    {
      switch (ann_type (t->common.ann))
 {
 case STMT_ANN:
   {
     stmt_ann_t ann = (stmt_ann_t) t->common.ann;
     dfa_stats_p->num_stmt_anns++;
     dfa_stats_p->num_defs += ((get_def_ops (ann)) ? (get_def_ops (ann))->num_defs : 0);
     dfa_stats_p->num_uses += ((get_use_ops (ann)) ? (get_use_ops (ann))->num_uses : 0);
     dfa_stats_p->num_v_may_defs +=
                  ((get_v_may_def_ops (ann)) ? (get_v_may_def_ops (ann))->num_v_may_defs : 0);
     dfa_stats_p->num_vuses += ((get_vuse_ops (ann)) ? (get_vuse_ops (ann))->num_vuses : 0);
     dfa_stats_p->num_v_must_defs +=
                  ((get_v_must_def_ops (ann)) ? (get_v_must_def_ops (ann))->num_v_must_defs : 0);
     break;
   }
 case VAR_ANN:
   dfa_stats_p->num_var_anns++;
   break;
 default:
   break;
 }
    }
  return ((void *)0);
}
static tree
find_vars_r (tree *tp, int *walk_subtrees, void *data)
{
  struct walk_state *walk_state = (struct walk_state *) data;
  if ((((enum tree_code) (*tp)->common.code) == VAR_DECL || ((enum tree_code) (*tp)->common.code) == PARM_DECL || ((enum tree_code) (*tp)->common.code) == RESULT_DECL || (((enum tree_code) (*tp)->common.code) == SSA_NAME && (((enum tree_code) ((*tp)->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((*tp)->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((*tp)->ssa_name.var)->common.code) == RESULT_DECL))))
    add_referenced_var (*tp, walk_state);
  else if ((tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 'd')
    || (tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 't')
    || tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 'c')
    *walk_subtrees = 0;
  return (tree) ((void *)0);
}
static void
add_referenced_var (tree var, struct walk_state *walk_state)
{
  void **slot;
  var_ann_t v_ann;
  v_ann = get_var_ann (var);
  if (walk_state)
    slot = htab_find_slot (walk_state->vars_found, (void *) var, INSERT);
  else
    slot = ((void *)0);
  if (slot == ((void *)0) || *slot == ((void *)0))
    {
      if (slot)
 *slot = (void *) var;
      v_ann->uid = ((referenced_vars)->elements_used);
      do { if ((referenced_vars)->elements_used >= (referenced_vars)->num_elements) (((referenced_vars)) = varray_grow ((referenced_vars), 2 * (referenced_vars)->num_elements)); (referenced_vars)->data.tree1[(referenced_vars)->elements_used++] = (var); } while (0);
      if (needs_to_live_in_memory (var))
 mark_call_clobbered (var);
      if (((var)->decl.nonlocal_flag))
 v_ann->used = 1;
    }
}
tree
get_virtual_var (tree var)
{
  while ((((enum tree_code) (var)->common.code) == NOP_EXPR || ((enum tree_code) (var)->common.code) == CONVERT_EXPR || ((enum tree_code) (var)->common.code) == NON_LVALUE_EXPR) && ((var)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((var)->common.type))->type.mode) == ((((((var)->exp.operands[0]))->common.type))->type.mode))) (var) = ((var)->exp.operands[0]);
  if (((enum tree_code) (var)->common.code) == SSA_NAME)
    var = (var)->ssa_name.var;
  while (((enum tree_code) (var)->common.code) == REALPART_EXPR || ((enum tree_code) (var)->common.code) == IMAGPART_EXPR
  || handled_component_p (var))
    var = ((var)->exp.operands[0]);
  return var;
}
static void
find_hidden_use_vars (tree block)
{
  tree sub, decl, tem;
  for (decl = ((block)->block.vars); decl; decl = ((decl)->common.chain))
    {
      int inside_vla = 0;
      walk_tree (&decl, find_hidden_use_vars_r, &inside_vla, ((void *)0));
    }
  for (sub = ((block)->block.subblocks); sub; sub = ((sub)->common.chain))
    find_hidden_use_vars (sub);
  tem = get_pending_sizes ();
  put_pending_sizes (tem);
  for (; tem; tem = ((tem)->common.chain))
    {
      int inside_vla = 1;
      walk_tree (&((tem)->list.value), find_hidden_use_vars_r, &inside_vla, ((void *)0));
    }
}
static tree
find_hidden_use_vars_r (tree *tp, int *walk_subtrees ,
   void *data )
{
  int *inside_vla = (int *) data;
  if ((((enum tree_code) (*tp)->common.code) == VAR_DECL || ((enum tree_code) (*tp)->common.code) == PARM_DECL || ((enum tree_code) (*tp)->common.code) == RESULT_DECL || (((enum tree_code) (*tp)->common.code) == SSA_NAME && (((enum tree_code) ((*tp)->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((*tp)->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((*tp)->ssa_name.var)->common.code) == RESULT_DECL)))
      && ((((*tp)->decl.size)
    && ! really_constant_p (((*tp)->decl.size)))
   || (((*tp)->decl.size_unit)
       && ! really_constant_p (((*tp)->decl.size_unit)))))
    {
      int save = *inside_vla;
      *inside_vla = 1;
      walk_tree (&((*tp)->decl.size), find_hidden_use_vars_r, inside_vla, ((void *)0));
      walk_tree (&((*tp)->decl.size_unit), find_hidden_use_vars_r,
   inside_vla, ((void *)0));
      *inside_vla = save;
    }
  else if (*inside_vla && (((enum tree_code) (*tp)->common.code) == VAR_DECL || ((enum tree_code) (*tp)->common.code) == PARM_DECL || ((enum tree_code) (*tp)->common.code) == RESULT_DECL || (((enum tree_code) (*tp)->common.code) == SSA_NAME && (((enum tree_code) ((*tp)->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((*tp)->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((*tp)->ssa_name.var)->common.code) == RESULT_DECL))))
    set_has_hidden_use (*tp);
  return (tree) ((void *)0);
}
void
add_referenced_tmp_var (tree var)
{
  add_referenced_var (var, ((void *)0));
}
static unsigned char
v_may_defs_disappeared_p (v_may_def_optype v_may_defs_before,
                          v_may_def_optype v_may_defs_after)
{
  if (v_may_defs_before == ((void *)0))
    return 0;
  if (v_may_defs_after == ((void *)0)
      || ((v_may_defs_before) ? (v_may_defs_before)->num_v_may_defs : 0) >
         ((v_may_defs_after) ? (v_may_defs_after)->num_v_may_defs : 0))
    return 1;
  return 0;
}
static unsigned char
v_must_defs_disappeared_p (v_must_def_optype v_must_defs_before,
                           v_must_def_optype v_must_defs_after)
{
  if (v_must_defs_before == ((void *)0))
    return 0;
  if (v_must_defs_after == ((void *)0)
      || ((v_must_defs_before) ? (v_must_defs_before)->num_v_must_defs : 0) >
         ((v_must_defs_after) ? (v_must_defs_after)->num_v_must_defs : 0))
    return 1;
  return 0;
}
void
mark_new_vars_to_rename (tree stmt, bitmap vars_to_rename)
{
  def_optype defs;
  use_optype uses;
  v_may_def_optype v_may_defs;
  vuse_optype vuses;
  v_must_def_optype v_must_defs;
  size_t i;
  bitmap vars_in_vops_to_rename;
  unsigned char found_exposed_symbol = 0;
  v_may_def_optype v_may_defs_before, v_may_defs_after;
  v_must_def_optype v_must_defs_before, v_must_defs_after;
  stmt_ann_t ann;
  vars_in_vops_to_rename = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  ann = stmt_ann (stmt);
  v_may_defs_before = v_may_defs = get_v_may_def_ops (ann);
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      tree var = (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i)))));
      if (!(tree_code_type[(int) (((enum tree_code) (var)->common.code))] == 'd'))
 var = (var)->ssa_name.var;
      bitmap_set_bit (vars_in_vops_to_rename, var_ann (var)->uid);
    }
  vuses = get_vuse_ops (ann);
  for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
    {
      tree var = (get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((i)))));
      if (!(tree_code_type[(int) (((enum tree_code) (var)->common.code))] == 'd'))
 var = (var)->ssa_name.var;
      bitmap_set_bit (vars_in_vops_to_rename, var_ann (var)->uid);
    }
  v_must_defs_before = v_must_defs = get_v_must_def_ops (ann);
  for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
    {
      tree var = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i)))));
      if (!(tree_code_type[(int) (((enum tree_code) (var)->common.code))] == 'd'))
 var = (var)->ssa_name.var;
      bitmap_set_bit (vars_in_vops_to_rename, var_ann (var)->uid);
    }
  modify_stmt (stmt);
  get_stmt_operands (stmt);
  defs = get_def_ops (ann);
  for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
    {
      tree var = (get_def_from_ptr (get_def_op_ptr (((defs)), ((i)))));
      if ((tree_code_type[(int) (((enum tree_code) (var)->common.code))] == 'd'))
 {
   found_exposed_symbol = 1;
   bitmap_set_bit (vars_to_rename, var_ann (var)->uid);
 }
    }
  uses = get_use_ops (ann);
  for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
    {
      tree var = (get_use_from_ptr (get_use_op_ptr (((uses)), ((i)))));
      if ((tree_code_type[(int) (((enum tree_code) (var)->common.code))] == 'd'))
 {
   found_exposed_symbol = 1;
   bitmap_set_bit (vars_to_rename, var_ann (var)->uid);
 }
    }
  v_may_defs_after = v_may_defs = get_v_may_def_ops (ann);
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      tree var = (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i)))));
      if ((tree_code_type[(int) (((enum tree_code) (var)->common.code))] == 'd'))
 {
   found_exposed_symbol = 1;
   bitmap_set_bit (vars_to_rename, var_ann (var)->uid);
 }
    }
  vuses = get_vuse_ops (ann);
  for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
    {
      tree var = (get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((i)))));
      if ((tree_code_type[(int) (((enum tree_code) (var)->common.code))] == 'd'))
 {
   found_exposed_symbol = 1;
   bitmap_set_bit (vars_to_rename, var_ann (var)->uid);
 }
    }
  v_must_defs_after = v_must_defs = get_v_must_def_ops (ann);
  for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
    {
      tree var = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i)))));
      if ((tree_code_type[(int) (((enum tree_code) (var)->common.code))] == 'd'))
 {
   found_exposed_symbol = 1;
   bitmap_set_bit (vars_to_rename, var_ann (var)->uid);
 }
    }
  if (found_exposed_symbol
      || v_may_defs_disappeared_p (v_may_defs_before, v_may_defs_after)
      || v_must_defs_disappeared_p (v_must_defs_before, v_must_defs_after))
    bitmap_operation (vars_to_rename, vars_to_rename, vars_in_vops_to_rename, BITMAP_IOR);
  do { if (vars_in_vops_to_rename) { bitmap_clear (vars_in_vops_to_rename); free (vars_in_vops_to_rename); (vars_in_vops_to_rename) = 0; } } while (0);
}
extern int using_eh_for_cleanups_p;
static int
struct_ptr_eq (const void *a, const void *b)
{
  const void * const * x = a;
  const void * const * y = b;
  return *x == *y;
}
static hashval_t
struct_ptr_hash (const void *a)
{
  const void * const * x = a;
  return (size_t)*x >> 4;
}
struct throw_stmt_node
{
  tree stmt;
  int region_nr;
};
static htab_t throw_stmt_table;
static void
record_stmt_eh_region (struct eh_region *region, tree t)
{
  struct throw_stmt_node *n;
  void **slot;
  if (!region)
    return;
  n = ggc_alloc_stat (sizeof (*n) );
  n->stmt = t;
  n->region_nr = get_eh_region_number (region);
  slot = htab_find_slot (throw_stmt_table, n, INSERT);
  if (*slot)
    fancy_abort ("gcc.c", 106023, "?");
  *slot = n;
}
void
add_stmt_to_eh_region (tree t, int num)
{
  struct throw_stmt_node *n;
  void **slot;
  if (num < 0)
    fancy_abort ("gcc.c", 106034, "?");
  n = ggc_alloc_stat (sizeof (*n) );
  n->stmt = t;
  n->region_nr = num;
  slot = htab_find_slot (throw_stmt_table, n, INSERT);
  if (*slot)
    fancy_abort ("gcc.c", 106042, "?");
  *slot = n;
}
unsigned char
remove_stmt_from_eh_region (tree t)
{
  struct throw_stmt_node dummy;
  void **slot;
  if (!throw_stmt_table)
    return 0;
  dummy.stmt = t;
  slot = htab_find_slot (throw_stmt_table, &dummy, NO_INSERT);
  if (slot)
    {
      htab_clear_slot (throw_stmt_table, slot);
      return 1;
    }
  else
    return 0;
}
int
lookup_stmt_eh_region (tree t)
{
  struct throw_stmt_node *p, n;
  if (!throw_stmt_table)
    return -2;
  n.stmt = t;
  p = htab_find (throw_stmt_table, &n);
  return (p ? p->region_nr : -1);
}
struct finally_tree_node
{
  tree child, parent;
};
static htab_t finally_tree;
static void
record_in_finally_tree (tree child, tree parent)
{
  struct finally_tree_node *n;
  void **slot;
  n = xmalloc (sizeof (*n));
  n->child = child;
  n->parent = parent;
  slot = htab_find_slot (finally_tree, n, INSERT);
  if (*slot)
    fancy_abort ("gcc.c", 106106, "?");
  *slot = n;
}
static void
collect_finally_tree (tree t, tree region)
{
 tailrecurse:
  switch (((enum tree_code) (t)->common.code))
    {
    case LABEL_EXPR:
      record_in_finally_tree ((((t))->exp.operands[0]), region);
      break;
    case TRY_FINALLY_EXPR:
      record_in_finally_tree (t, region);
      collect_finally_tree (((t)->exp.operands[0]), t);
      t = ((t)->exp.operands[1]);
      goto tailrecurse;
    case TRY_CATCH_EXPR:
      collect_finally_tree (((t)->exp.operands[0]), region);
      t = ((t)->exp.operands[1]);
      goto tailrecurse;
    case CATCH_EXPR:
      t = (((t))->exp.operands[1]);
      goto tailrecurse;
    case EH_FILTER_EXPR:
      t = (((t))->exp.operands[1]);
      goto tailrecurse;
    case STATEMENT_LIST:
      {
 tree_stmt_iterator i;
 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
   collect_finally_tree (tsi_stmt (i), region);
      }
      break;
    default:
      break;
    }
}
static unsigned char
outside_finally_tree (tree start, tree target)
{
  struct finally_tree_node n, *p;
  do
    {
      n.child = start;
      p = htab_find (finally_tree, &n);
      if (!p)
 return 1;
      start = p->parent;
    }
  while (start != target);
  return 0;
}
struct leh_state
{
  struct eh_region *cur_region;
  struct eh_region *prev_try;
  struct leh_tf_state *tf;
};
struct leh_tf_state
{
  tree try_finally_expr;
  tree *top_p;
  struct leh_state *outer;
  struct eh_region *region;
  struct goto_queue_node {
    tree stmt;
    tree repl_stmt;
    tree cont_stmt;
    int index;
  } *goto_queue;
  size_t goto_queue_size;
  size_t goto_queue_active;
  varray_type dest_array;
  tree fallthru_label;
  tree eh_label;
  unsigned char may_fallthru;
  unsigned char may_return;
  unsigned char may_throw;
};
static void lower_eh_filter (struct leh_state *, tree *);
static void lower_eh_constructs_1 (struct leh_state *, tree *);
static int
goto_queue_cmp (const void *x, const void *y)
{
  tree a = ((const struct goto_queue_node *)x)->stmt;
  tree b = ((const struct goto_queue_node *)y)->stmt;
  return (a == b ? 0 : a < b ? -1 : 1);
}
static tree
find_goto_replacement (struct leh_tf_state *tf, tree stmt)
{
  struct goto_queue_node tmp, *ret;
  tmp.stmt = stmt;
  ret = bsearch (&tmp, tf->goto_queue, tf->goto_queue_active,
   sizeof (struct goto_queue_node), goto_queue_cmp);
  return (ret ? ret->repl_stmt : ((void *)0));
}
static void
replace_goto_queue_cond_clause (tree *tp, struct leh_tf_state *tf,
    tree_stmt_iterator *tsi)
{
  tree new, one, label;
  new = find_goto_replacement (tf, *tp);
  if (!new)
    return;
  one = expr_only (new);
  if (one && ((enum tree_code) (one)->common.code) == GOTO_EXPR)
    {
      *tp = one;
      return;
    }
  label = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],(tree) ((void *)0) );
  *tp = build_and_jump (&(((label))->exp.operands[0]));
  tsi_link_after (tsi, label, TSI_CONTINUE_LINKING);
  tsi_link_after (tsi, new, TSI_CONTINUE_LINKING);
}
static void replace_goto_queue_stmt_list (tree, struct leh_tf_state *);
static void
replace_goto_queue_1 (tree t, struct leh_tf_state *tf, tree_stmt_iterator *tsi)
{
  switch (((enum tree_code) (t)->common.code))
    {
    case GOTO_EXPR:
    case RETURN_EXPR:
      t = find_goto_replacement (tf, t);
      if (t)
 {
   tsi_link_before (tsi, t, TSI_SAME_STMT);
   tsi_delink (tsi);
   return;
 }
      break;
    case COND_EXPR:
      replace_goto_queue_cond_clause (&((((t))->exp.operands[1])), tf, tsi);
      replace_goto_queue_cond_clause (&((((t))->exp.operands[2])), tf, tsi);
      break;
    case TRY_FINALLY_EXPR:
    case TRY_CATCH_EXPR:
      replace_goto_queue_stmt_list (((t)->exp.operands[0]), tf);
      replace_goto_queue_stmt_list (((t)->exp.operands[1]), tf);
      break;
    case CATCH_EXPR:
      replace_goto_queue_stmt_list ((((t))->exp.operands[1]), tf);
      break;
    case EH_FILTER_EXPR:
      replace_goto_queue_stmt_list ((((t))->exp.operands[1]), tf);
      break;
    case STATEMENT_LIST:
      fancy_abort ("gcc.c", 106341, "?");
    default:
      break;
    }
  tsi_next (tsi);
}
static void
replace_goto_queue_stmt_list (tree t, struct leh_tf_state *tf)
{
  tree_stmt_iterator i = tsi_start (t);
  while (!tsi_end_p (i))
    replace_goto_queue_1 (tsi_stmt (i), tf, &i);
}
static void
replace_goto_queue (struct leh_tf_state *tf)
{
  replace_goto_queue_stmt_list (*tf->top_p, tf);
}
static void
maybe_record_in_goto_queue (struct leh_state *state, tree stmt)
{
  struct leh_tf_state *tf = state->tf;
  struct goto_queue_node *q;
  size_t active, size;
  int index;
  if (!tf)
    return;
  switch (((enum tree_code) (stmt)->common.code))
    {
    case GOTO_EXPR:
      {
 tree lab = (((stmt))->exp.operands[0]);
 if (((enum tree_code) (lab)->common.code) != LABEL_DECL)
   return;
 if (! outside_finally_tree (lab, tf->try_finally_expr))
   return;
 if (! tf->dest_array)
   {
     tf->dest_array = varray_init (10, VARRAY_DATA_TREE, "dest_array");
     do { if ((tf->dest_array)->elements_used >= (tf->dest_array)->num_elements) (((tf->dest_array)) = varray_grow ((tf->dest_array), 2 * (tf->dest_array)->num_elements)); (tf->dest_array)->data.tree1[(tf->dest_array)->elements_used++] = (lab); } while (0);
     index = 0;
   }
 else
   {
     int n = ((tf->dest_array)->elements_used);
     for (index = 0; index < n; ++index)
       if (((tf->dest_array)->data.tree1[index]) == lab)
  break;
     if (index == n)
       do { if ((tf->dest_array)->elements_used >= (tf->dest_array)->num_elements) (((tf->dest_array)) = varray_grow ((tf->dest_array), 2 * (tf->dest_array)->num_elements)); (tf->dest_array)->data.tree1[(tf->dest_array)->elements_used++] = (lab); } while (0);
   }
      }
      break;
    case RETURN_EXPR:
      tf->may_return = 1;
      index = -1;
      break;
    default:
      fancy_abort ("gcc.c", 106424, "?");
    }
  active = tf->goto_queue_active;
  size = tf->goto_queue_size;
  if (active >= size)
    {
      size = (size ? size * 2 : 32);
      tf->goto_queue_size = size;
      tf->goto_queue
 = xrealloc (tf->goto_queue, size * sizeof (struct goto_queue_node));
    }
  q = &tf->goto_queue[active];
  tf->goto_queue_active = active + 1;
  memset (q, 0, sizeof (*q));
  q->stmt = stmt;
  q->index = index;
}
static void
do_return_redirection (struct goto_queue_node *q, tree finlab, tree mod,
         tree *return_value_p)
{
  tree ret_expr = ((q->stmt)->exp.operands[0]);
  tree x;
  if (ret_expr)
    {
      if (((enum tree_code) (ret_expr)->common.code) == RESULT_DECL)
 {
   if (!*return_value_p)
     *return_value_p = ret_expr;
   else if (*return_value_p != ret_expr)
     fancy_abort ("gcc.c", 106515, "?");
          q->cont_stmt = q->stmt;
 }
      else if (((enum tree_code) (ret_expr)->common.code) == MODIFY_EXPR)
 {
   tree result = ((ret_expr)->exp.operands[0]);
   tree new, old = ((ret_expr)->exp.operands[1]);
   if (!*return_value_p)
     {
       if (aggregate_value_p (((result)->common.type),
         ((current_function_decl)->common.type)))
  new = result;
       else
  new = create_tmp_var (((old)->common.type), "rettmp");
       *return_value_p = new;
     }
   else
     new = *return_value_p;
   x = build (MODIFY_EXPR, ((new)->common.type), new, old);
   append_to_statement_list (x, &q->repl_stmt);
   if (new == result)
     x = result;
   else
     x = build (MODIFY_EXPR, ((result)->common.type), result, new);
   q->cont_stmt = build1_stat (RETURN_EXPR,global_trees[TI_VOID_TYPE],x );
 }
      else
 fancy_abort ("gcc.c", 106550, "?");
    }
  else
    {
      q->cont_stmt = q->stmt;
    }
  if (mod)
    append_to_statement_list (mod, &q->repl_stmt);
  x = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],finlab );
  append_to_statement_list (x, &q->repl_stmt);
}
static void
do_goto_redirection (struct goto_queue_node *q, tree finlab, tree mod)
{
  tree x;
  q->cont_stmt = q->stmt;
  if (mod)
    append_to_statement_list (mod, &q->repl_stmt);
  x = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],finlab );
  append_to_statement_list (x, &q->repl_stmt);
}
static void
frob_into_branch_around (tree *tp, tree lab, tree over)
{
  tree x, op1;
  op1 = ((*tp)->exp.operands[1]);
  *tp = ((*tp)->exp.operands[0]);
  if (block_may_fallthru (*tp))
    {
      if (!over)
 over = create_artificial_label ();
      x = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],over );
      append_to_statement_list (x, tp);
    }
  if (lab)
    {
      x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],lab );
      append_to_statement_list (x, tp);
    }
  append_to_statement_list (op1, tp);
  if (over)
    {
      x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],over );
      append_to_statement_list (x, tp);
    }
}
static tree
lower_try_finally_dup_block (tree t, struct leh_state *outer_state)
{
  tree region = ((void *)0);
  t = lhd_unsave_expr_now (t);
  if (outer_state->tf)
    region = outer_state->tf->try_finally_expr;
  collect_finally_tree (t, region);
  return t;
}
static tree
lower_try_finally_fallthru_label (struct leh_tf_state *tf)
{
  tree label = tf->fallthru_label;
  if (!label)
    {
      label = create_artificial_label ();
      tf->fallthru_label = label;
      if (tf->outer->tf)
        record_in_finally_tree (label, tf->outer->tf->try_finally_expr);
    }
  return label;
}
static void
honor_protect_cleanup_actions (struct leh_state *outer_state,
          struct leh_state *this_state,
          struct leh_tf_state *tf)
{
  tree protect_cleanup_actions, finally, x;
  tree_stmt_iterator i;
  unsigned char finally_may_fallthru;
  if (lang_protect_cleanup_actions)
    protect_cleanup_actions = lang_protect_cleanup_actions ();
  else
    protect_cleanup_actions = ((void *)0);
  finally = ((*tf->top_p)->exp.operands[1]);
  finally_may_fallthru = block_may_fallthru (finally);
  if (!finally_may_fallthru && !protect_cleanup_actions)
    return;
  if (this_state)
    finally = lower_try_finally_dup_block (finally, outer_state);
  if (finally_may_fallthru)
    {
      tree save_eptr, save_filt;
      save_eptr = create_tmp_var (global_trees[TI_PTR_TYPE], "save_eptr");
      save_filt = create_tmp_var (integer_types[itk_int], "save_filt");
      i = tsi_start (finally);
      x = build (EXC_PTR_EXPR, global_trees[TI_PTR_TYPE]);
      x = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], save_eptr, x);
      tsi_link_before (&i, x, TSI_CONTINUE_LINKING);
      x = build (FILTER_EXPR, integer_types[itk_int]);
      x = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], save_filt, x);
      tsi_link_before (&i, x, TSI_CONTINUE_LINKING);
      i = tsi_last (finally);
      x = build (EXC_PTR_EXPR, global_trees[TI_PTR_TYPE]);
      x = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], x, save_eptr);
      tsi_link_after (&i, x, TSI_CONTINUE_LINKING);
      x = build (FILTER_EXPR, integer_types[itk_int]);
      x = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], x, save_filt);
      tsi_link_after (&i, x, TSI_CONTINUE_LINKING);
      x = build1_stat (RESX_EXPR,global_trees[TI_VOID_TYPE],build_int_2_wide ((unsigned long) (get_eh_region_number (tf->region)), (long) (0)) )
                                                       ;
      tsi_link_after (&i, x, TSI_CONTINUE_LINKING);
    }
  if (protect_cleanup_actions)
    {
      x = build (EH_FILTER_EXPR, global_trees[TI_VOID_TYPE], ((void *)0), ((void *)0));
      append_to_statement_list (protect_cleanup_actions, &(((x))->exp.operands[1]));
      (((x))->common.static_flag) = 1;
      finally = build (TRY_CATCH_EXPR, global_trees[TI_VOID_TYPE], finally, x);
      lower_eh_filter (outer_state, &finally);
    }
  else
    lower_eh_constructs_1 (outer_state, &finally);
  i = tsi_last (((*tf->top_p)->exp.operands[0]));
  if (tf->may_fallthru)
    {
      x = lower_try_finally_fallthru_label (tf);
      x = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],x );
      tsi_link_after (&i, x, TSI_CONTINUE_LINKING);
      if (this_state)
        maybe_record_in_goto_queue (this_state, x);
      tf->may_fallthru = 0;
    }
  x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],tf->eh_label );
  tsi_link_after (&i, x, TSI_CONTINUE_LINKING);
  tsi_link_after (&i, finally, TSI_CONTINUE_LINKING);
  tf->may_throw = 0;
}
static void
lower_try_finally_nofallthru (struct leh_state *state, struct leh_tf_state *tf)
{
  tree x, finally, lab, return_val;
  struct goto_queue_node *q, *qe;
  if (tf->may_throw)
    lab = tf->eh_label;
  else
    lab = create_artificial_label ();
  finally = ((*tf->top_p)->exp.operands[1]);
  *tf->top_p = ((*tf->top_p)->exp.operands[0]);
  x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],lab );
  append_to_statement_list (x, tf->top_p);
  return_val = ((void *)0);
  q = tf->goto_queue;
  qe = q + tf->goto_queue_active;
  for (; q < qe; ++q)
    if (q->index < 0)
      do_return_redirection (q, lab, ((void *)0), &return_val);
    else
      do_goto_redirection (q, lab, ((void *)0));
  replace_goto_queue (tf);
  lower_eh_constructs_1 (state, &finally);
  append_to_statement_list (finally, tf->top_p);
}
static void
lower_try_finally_onedest (struct leh_state *state, struct leh_tf_state *tf)
{
  struct goto_queue_node *q, *qe;
  tree x, finally, finally_label;
  finally = ((*tf->top_p)->exp.operands[1]);
  *tf->top_p = ((*tf->top_p)->exp.operands[0]);
  lower_eh_constructs_1 (state, &finally);
  if (tf->may_throw)
    {
      x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],tf->eh_label );
      append_to_statement_list (x, tf->top_p);
      append_to_statement_list (finally, tf->top_p);
      x = build1_stat (RESX_EXPR,global_trees[TI_VOID_TYPE],build_int_2_wide ((unsigned long) (get_eh_region_number (tf->region)), (long) (0)) )
                                                       ;
      append_to_statement_list (x, tf->top_p);
      return;
    }
  if (tf->may_fallthru)
    {
      append_to_statement_list (finally, tf->top_p);
      return;
    }
  finally_label = create_artificial_label ();
  x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],finally_label );
  append_to_statement_list (x, tf->top_p);
  append_to_statement_list (finally, tf->top_p);
  q = tf->goto_queue;
  qe = q + tf->goto_queue_active;
  if (tf->may_return)
    {
      tree return_val = ((void *)0);
      for (; q < qe; ++q)
 do_return_redirection (q, finally_label, ((void *)0), &return_val);
      replace_goto_queue (tf);
    }
  else
    {
      for (; q < qe; ++q)
 do_goto_redirection (q, finally_label, ((void *)0));
      replace_goto_queue (tf);
      if (((tf->dest_array)->data.tree1[0]) == tf->fallthru_label)
 {
   tf->fallthru_label = ((void *)0);
   return;
 }
    }
  append_to_statement_list (tf->goto_queue[0].cont_stmt, tf->top_p);
  maybe_record_in_goto_queue (state, tf->goto_queue[0].cont_stmt);
}
static void
lower_try_finally_copy (struct leh_state *state, struct leh_tf_state *tf)
{
  tree finally, new_stmt;
  tree x;
  finally = ((*tf->top_p)->exp.operands[1]);
  *tf->top_p = ((*tf->top_p)->exp.operands[0]);
  new_stmt = (tree) ((void *)0);
  if (tf->may_fallthru)
    {
      x = lower_try_finally_dup_block (finally, state);
      lower_eh_constructs_1 (state, &x);
      append_to_statement_list (x, &new_stmt);
      x = lower_try_finally_fallthru_label (tf);
      x = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],x );
      append_to_statement_list (x, &new_stmt);
    }
  if (tf->may_throw)
    {
      x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],tf->eh_label );
      append_to_statement_list (x, &new_stmt);
      x = lower_try_finally_dup_block (finally, state);
      lower_eh_constructs_1 (state, &x);
      append_to_statement_list (x, &new_stmt);
      x = build1_stat (RESX_EXPR,global_trees[TI_VOID_TYPE],build_int_2_wide ((unsigned long) (get_eh_region_number (tf->region)), (long) (0)) )
                                                       ;
      append_to_statement_list (x, &new_stmt);
    }
  if (tf->goto_queue)
    {
      struct goto_queue_node *q, *qe;
      tree return_val = ((void *)0);
      int return_index;
      tree *labels;
      if (tf->dest_array)
 return_index = ((tf->dest_array)->elements_used);
      else
 return_index = 0;
      labels = xcalloc (sizeof (tree), return_index + 1);
      q = tf->goto_queue;
      qe = q + tf->goto_queue_active;
      for (; q < qe; q++)
 {
   int index = q->index < 0 ? return_index : q->index;
   tree lab = labels[index];
   unsigned char build_p = 0;
   if (!lab)
     {
       labels[index] = lab = create_artificial_label ();
       build_p = 1;
     }
   if (index == return_index)
     do_return_redirection (q, lab, ((void *)0), &return_val);
   else
     do_goto_redirection (q, lab, ((void *)0));
   if (build_p)
     {
       x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],lab );
       append_to_statement_list (x, &new_stmt);
       x = lower_try_finally_dup_block (finally, state);
       lower_eh_constructs_1 (state, &x);
       append_to_statement_list (x, &new_stmt);
       append_to_statement_list (q->cont_stmt, &new_stmt);
       maybe_record_in_goto_queue (state, q->cont_stmt);
     }
 }
      replace_goto_queue (tf);
      free (labels);
    }
  append_to_statement_list (new_stmt, tf->top_p);
}
static void
lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
{
  struct goto_queue_node *q, *qe;
  tree return_val = ((void *)0);
  tree finally, finally_tmp, finally_label;
  int return_index, eh_index, fallthru_index;
  int nlabels, ndests, j, last_case_index;
  tree case_label_vec, switch_stmt, last_case, switch_body;
  tree x;
  finally = ((*tf->top_p)->exp.operands[1]);
  *tf->top_p = ((*tf->top_p)->exp.operands[0]);
  lower_eh_constructs_1 (state, &finally);
  if (tf->dest_array)
    nlabels = ((tf->dest_array)->elements_used);
  else
    nlabels = 0;
  return_index = nlabels;
  eh_index = return_index + tf->may_return;
  fallthru_index = eh_index + tf->may_throw;
  ndests = fallthru_index + tf->may_fallthru;
  finally_tmp = create_tmp_var (integer_types[itk_int], "finally_tmp");
  finally_label = create_artificial_label ();
  case_label_vec = make_tree_vec_stat (ndests );
  switch_stmt = build (SWITCH_EXPR, integer_types[itk_int], finally_tmp,
         (tree) ((void *)0), case_label_vec);
  switch_body = ((void *)0);
  last_case = ((void *)0);
  last_case_index = 0;
  if (tf->may_fallthru)
    {
      x = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], finally_tmp,
   build_int_2_wide ((unsigned long) (fallthru_index), (long) (0)));
      append_to_statement_list (x, tf->top_p);
      if (tf->may_throw)
 {
   x = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],finally_label );
   append_to_statement_list (x, tf->top_p);
 }
      last_case = build (CASE_LABEL_EXPR, global_trees[TI_VOID_TYPE],
    build_int_2_wide ((unsigned long) (fallthru_index), (long) (0)), ((void *)0),
    create_artificial_label ());
      ((case_label_vec)->vec.a[last_case_index]) = last_case;
      last_case_index++;
      x = build (LABEL_EXPR, global_trees[TI_VOID_TYPE], (((last_case))->exp.operands[2]));
      append_to_statement_list (x, &switch_body);
      x = lower_try_finally_fallthru_label (tf);
      x = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],x );
      append_to_statement_list (x, &switch_body);
    }
  if (tf->may_throw)
    {
      x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],tf->eh_label );
      append_to_statement_list (x, tf->top_p);
      x = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], finally_tmp,
   build_int_2_wide ((unsigned long) (eh_index), (long) (0)));
      append_to_statement_list (x, tf->top_p);
      last_case = build (CASE_LABEL_EXPR, global_trees[TI_VOID_TYPE],
    build_int_2_wide ((unsigned long) (eh_index), (long) (0)), ((void *)0),
    create_artificial_label ());
      ((case_label_vec)->vec.a[last_case_index]) = last_case;
      last_case_index++;
      x = build (LABEL_EXPR, global_trees[TI_VOID_TYPE], (((last_case))->exp.operands[2]));
      append_to_statement_list (x, &switch_body);
      x = build1_stat (RESX_EXPR,global_trees[TI_VOID_TYPE],build_int_2_wide ((unsigned long) (get_eh_region_number (tf->region)), (long) (0)) )
                                                       ;
      append_to_statement_list (x, &switch_body);
    }
  x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],finally_label );
  append_to_statement_list (x, tf->top_p);
  append_to_statement_list (finally, tf->top_p);
  q = tf->goto_queue;
  qe = q + tf->goto_queue_active;
  j = last_case_index + tf->may_return;
  last_case_index += nlabels;
  for (; q < qe; ++q)
    {
      tree mod;
      int switch_id, case_index;
      if (q->index < 0)
 {
   mod = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], finally_tmp,
         build_int_2_wide ((unsigned long) (return_index), (long) (0)));
   do_return_redirection (q, finally_label, mod, &return_val);
   switch_id = return_index;
 }
      else
 {
   mod = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], finally_tmp,
         build_int_2_wide ((unsigned long) (q->index), (long) (0)));
   do_goto_redirection (q, finally_label, mod);
   switch_id = q->index;
 }
      case_index = j + q->index;
      if (!((case_label_vec)->vec.a[case_index]))
 {
   last_case = build (CASE_LABEL_EXPR, global_trees[TI_VOID_TYPE],
        build_int_2_wide ((unsigned long) (switch_id), (long) (0)), ((void *)0),
        create_artificial_label ());
   ((case_label_vec)->vec.a[case_index]) = last_case;
   x = build (LABEL_EXPR, global_trees[TI_VOID_TYPE], (((last_case))->exp.operands[2]));
   append_to_statement_list (x, &switch_body);
   append_to_statement_list (q->cont_stmt, &switch_body);
   maybe_record_in_goto_queue (state, q->cont_stmt);
 }
    }
  replace_goto_queue (tf);
  last_case_index += nlabels;
  (((last_case))->exp.operands[0]) = ((void *)0);
  sort_case_labels (case_label_vec);
  append_to_statement_list (switch_stmt, tf->top_p);
  append_to_statement_list (switch_body, tf->top_p);
}
static unsigned char
decide_copy_try_finally (int ndests, tree finally)
{
  int f_estimate, sw_estimate;
  if (!optimize)
    return 0;
  f_estimate = estimate_num_insns (finally);
  f_estimate = (f_estimate + 1) * ndests;
  sw_estimate = 10 + 2 * ndests;
  if (optimize_size)
    return f_estimate < sw_estimate;
  if (optimize > 1)
    return f_estimate < 100 || f_estimate < sw_estimate * 2;
  else
    return f_estimate < 40 || f_estimate * 2 < sw_estimate * 3;
}
static void
lower_try_finally (struct leh_state *state, tree *tp)
{
  struct leh_tf_state this_tf;
  struct leh_state this_state;
  int ndests;
  memset (&this_tf, 0, sizeof (this_tf));
  this_tf.try_finally_expr = *tp;
  this_tf.top_p = tp;
  this_tf.outer = state;
  if (using_eh_for_cleanups_p)
    this_tf.region
      = gen_eh_region_cleanup (state->cur_region, state->prev_try);
  else
    this_tf.region = ((void *)0);
  this_state.cur_region = this_tf.region;
  this_state.prev_try = state->prev_try;
  this_state.tf = &this_tf;
  lower_eh_constructs_1 (&this_state, &((*tp)->exp.operands[0]));
  this_tf.may_fallthru = block_may_fallthru (((*tp)->exp.operands[0]));
  if (using_eh_for_cleanups_p)
    this_tf.may_throw = get_eh_region_may_contain_throw (this_tf.region);
  if (this_tf.may_throw)
    {
      this_tf.eh_label = create_artificial_label ();
      set_eh_region_tree_label (this_tf.region, this_tf.eh_label);
      honor_protect_cleanup_actions (state, &this_state, &this_tf);
    }
  if (this_tf.goto_queue_active > 1)
    qsort (this_tf.goto_queue, this_tf.goto_queue_active,
    sizeof (struct goto_queue_node), goto_queue_cmp);
  if (this_tf.dest_array)
    ndests = ((this_tf.dest_array)->elements_used);
  else
    ndests = 0;
  ndests += this_tf.may_fallthru;
  ndests += this_tf.may_return;
  ndests += this_tf.may_throw;
  if (ndests == 0)
    *tp = ((*tp)->exp.operands[0]);
  else if (!block_may_fallthru (((*tp)->exp.operands[1])))
    lower_try_finally_nofallthru (state, &this_tf);
  else if (ndests == 1)
    lower_try_finally_onedest (state, &this_tf);
  else if (decide_copy_try_finally (ndests, ((*tp)->exp.operands[1])))
    lower_try_finally_copy (state, &this_tf);
  else
    lower_try_finally_switch (state, &this_tf);
  if (this_tf.fallthru_label)
    {
      tree x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],this_tf.fallthru_label );
      append_to_statement_list (x, tp);
    }
  if (this_tf.goto_queue)
    free (this_tf.goto_queue);
}
static void
lower_catch (struct leh_state *state, tree *tp)
{
  struct eh_region *try_region;
  struct leh_state this_state;
  tree_stmt_iterator i;
  tree out_label;
  try_region = gen_eh_region_try (state->cur_region);
  this_state.cur_region = try_region;
  this_state.prev_try = try_region;
  this_state.tf = state->tf;
  lower_eh_constructs_1 (&this_state, &((*tp)->exp.operands[0]));
  if (!get_eh_region_may_contain_throw (try_region))
    {
      *tp = ((*tp)->exp.operands[0]);
      return;
    }
  out_label = ((void *)0);
  for (i = tsi_start (((*tp)->exp.operands[1])); !tsi_end_p (i); )
    {
      struct eh_region *catch_region;
      tree catch, x, eh_label;
      catch = tsi_stmt (i);
      catch_region = gen_eh_region_catch (try_region, (((catch))->exp.operands[0]));
      this_state.cur_region = catch_region;
      this_state.prev_try = state->prev_try;
      lower_eh_constructs_1 (&this_state, &(((catch))->exp.operands[1]));
      eh_label = create_artificial_label ();
      set_eh_region_tree_label (catch_region, eh_label);
      x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],eh_label );
      tsi_link_before (&i, x, TSI_SAME_STMT);
      if (block_may_fallthru ((((catch))->exp.operands[1])))
 {
   if (!out_label)
     out_label = create_artificial_label ();
   x = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],out_label );
   append_to_statement_list (x, &(((catch))->exp.operands[1]));
 }
      tsi_link_before (&i, (((catch))->exp.operands[1]), TSI_SAME_STMT);
      tsi_delink (&i);
    }
  frob_into_branch_around (tp, ((void *)0), out_label);
}
static void
lower_eh_filter (struct leh_state *state, tree *tp)
{
  struct leh_state this_state;
  struct eh_region *this_region;
  tree inner = expr_first (((*tp)->exp.operands[1]));
  tree eh_label;
  if ((((inner))->common.static_flag))
    this_region = gen_eh_region_must_not_throw (state->cur_region);
  else
    this_region = gen_eh_region_allowed (state->cur_region,
      (((inner))->exp.operands[0]));
  this_state = *state;
  this_state.cur_region = this_region;
  lower_eh_constructs_1 (&this_state, &((*tp)->exp.operands[0]));
  if (!get_eh_region_may_contain_throw (this_region))
    {
      *tp = ((*tp)->exp.operands[0]);
      return;
    }
  lower_eh_constructs_1 (state, &(((inner))->exp.operands[1]));
  ((*tp)->exp.operands[1]) = (((inner))->exp.operands[1]);
  eh_label = create_artificial_label ();
  set_eh_region_tree_label (this_region, eh_label);
  frob_into_branch_around (tp, eh_label, ((void *)0));
}
static void
lower_cleanup (struct leh_state *state, tree *tp)
{
  struct leh_state this_state;
  struct eh_region *this_region;
  struct leh_tf_state fake_tf;
  if (!flag_exceptions)
    {
      *tp = ((*tp)->exp.operands[0]);
      lower_eh_constructs_1 (state, tp);
      return;
    }
  this_region = gen_eh_region_cleanup (state->cur_region, state->prev_try);
  this_state = *state;
  this_state.cur_region = this_region;
  lower_eh_constructs_1 (&this_state, &((*tp)->exp.operands[0]));
  if (!get_eh_region_may_contain_throw (this_region))
    {
      *tp = ((*tp)->exp.operands[0]);
      return;
    }
  memset (&fake_tf, 0, sizeof (fake_tf));
  fake_tf.top_p = tp;
  fake_tf.outer = state;
  fake_tf.region = this_region;
  fake_tf.may_fallthru = block_may_fallthru (((*tp)->exp.operands[0]));
  fake_tf.may_throw = 1;
  fake_tf.eh_label = create_artificial_label ();
  set_eh_region_tree_label (this_region, fake_tf.eh_label);
  honor_protect_cleanup_actions (state, ((void *)0), &fake_tf);
  if (fake_tf.may_throw)
    {
      lower_eh_constructs_1 (state, &((*tp)->exp.operands[1]));
      frob_into_branch_around (tp, fake_tf.eh_label, fake_tf.fallthru_label);
    }
  else
    {
      *tp = ((*tp)->exp.operands[0]);
      if (fake_tf.fallthru_label)
 {
   tree x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],fake_tf.fallthru_label );
   append_to_statement_list (x, tp);
 }
    }
}
static void
lower_eh_constructs_1 (struct leh_state *state, tree *tp)
{
  tree_stmt_iterator i;
  tree t = *tp;
  switch (((enum tree_code) (t)->common.code))
    {
    case COND_EXPR:
      lower_eh_constructs_1 (state, &((((t))->exp.operands[1])));
      lower_eh_constructs_1 (state, &((((t))->exp.operands[2])));
      break;
    case CALL_EXPR:
      if (state->cur_region && tree_could_throw_p (t))
 {
   record_stmt_eh_region (state->cur_region, t);
   note_eh_region_may_contain_throw (state->cur_region);
 }
      break;
    case MODIFY_EXPR:
      if (state->cur_region && tree_could_throw_p (t))
 {
   record_stmt_eh_region (state->cur_region, t);
   note_eh_region_may_contain_throw (state->cur_region);
   if (((enum tree_code) (((t)->exp.operands[1]))->common.code) == CALL_EXPR)
     record_stmt_eh_region (state->cur_region, ((t)->exp.operands[1]));
 }
      break;
    case GOTO_EXPR:
    case RETURN_EXPR:
      maybe_record_in_goto_queue (state, t);
      break;
    case SWITCH_EXPR:
      ;
      break;
    case TRY_FINALLY_EXPR:
      lower_try_finally (state, tp);
      break;
    case TRY_CATCH_EXPR:
      i = tsi_start (((t)->exp.operands[1]));
      switch (((enum tree_code) (tsi_stmt (i))->common.code))
 {
 case CATCH_EXPR:
   lower_catch (state, tp);
   break;
 case EH_FILTER_EXPR:
   lower_eh_filter (state, tp);
   break;
 default:
   lower_cleanup (state, tp);
   break;
 }
      break;
    case STATEMENT_LIST:
      for (i = tsi_start (t); !tsi_end_p (i); )
 {
   lower_eh_constructs_1 (state, tsi_stmt_ptr (i));
   t = tsi_stmt (i);
   if (((enum tree_code) (t)->common.code) == STATEMENT_LIST)
     {
       tsi_link_before (&i, t, TSI_SAME_STMT);
       tsi_delink (&i);
     }
   else
     tsi_next (&i);
 }
      break;
    default:
      break;
    }
}
static void
lower_eh_constructs (void)
{
  struct leh_state null_state;
  tree *tp = &((current_function_decl)->decl.saved_tree);
  finally_tree = htab_create (31, struct_ptr_hash, struct_ptr_eq, free);
  throw_stmt_table = htab_create_alloc (31, struct_ptr_hash, struct_ptr_eq, ggc_free, ggc_calloc, ((void *)0))
                   ;
  collect_finally_tree (*tp, ((void *)0));
  memset (&null_state, 0, sizeof (null_state));
  lower_eh_constructs_1 (&null_state, tp);
  htab_delete (finally_tree);
  collect_eh_region_array ();
}
struct tree_opt_pass pass_lower_eh =
{
  "eh",
  ((void *)0),
  lower_eh_constructs,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_EH,
  (1 << 1),
  (1 << 2),
  (1 << 1),
  0,
  (1 << 0)
};
static void
make_eh_edge (struct eh_region *region, void *data)
{
  tree stmt, lab;
  basic_block src, dst;
  stmt = data;
  lab = get_eh_region_tree_label (region);
  src = bb_for_stmt (stmt);
  dst = label_to_block (lab);
  make_edge (src, dst, 2 | 8);
}
void
make_eh_edges (tree stmt)
{
  int region_nr;
  unsigned char is_resx;
  if (((enum tree_code) (stmt)->common.code) == RESX_EXPR)
    {
      region_nr = (((((stmt)->exp.operands[0]))->int_cst.int_cst).low);
      is_resx = 1;
    }
  else
    {
      region_nr = lookup_stmt_eh_region (stmt);
      if (region_nr < 0)
 return;
      is_resx = 0;
    }
  foreach_reachable_handler (region_nr, is_resx, make_eh_edge, stmt);
}
unsigned char
tree_could_trap_p (tree expr)
{
  enum tree_code code = ((enum tree_code) (expr)->common.code);
  unsigned char honor_nans = 0;
  unsigned char honor_snans = 0;
  unsigned char fp_operation = 0;
  tree t;
  if (tree_code_type[(int) (code)] == '<'
      || tree_code_type[(int) (code)] == '1'
      || tree_code_type[(int) (code)] == '2')
    {
      t = ((expr)->common.type);
      fp_operation = ((((enum tree_code) (t)->common.code) == REAL_TYPE) || (((enum tree_code) (t)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((t)->common.type))->common.code) == REAL_TYPE));
      if (fp_operation)
 {
   honor_nans = flag_trapping_math && !flag_finite_math_only;
   honor_snans = flag_signaling_nans != 0;
 }
    }
  switch (code)
    {
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
    case COMPONENT_REF:
    case REALPART_EXPR:
    case IMAGPART_EXPR:
    case BIT_FIELD_REF:
      t = get_base_address (expr);
      return !t || tree_could_trap_p (t);
    case INDIRECT_REF:
      return !((expr)->common.nothrow_flag);
    case ASM_EXPR:
      return ((expr)->common.volatile_flag);
    case TRUNC_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case EXACT_DIV_EXPR:
    case CEIL_MOD_EXPR:
    case FLOOR_MOD_EXPR:
    case ROUND_MOD_EXPR:
    case TRUNC_MOD_EXPR:
    case RDIV_EXPR:
      if (honor_snans)
 return 1;
      if (fp_operation && flag_trapping_math)
 return 1;
      t = ((expr)->exp.operands[1]);
      if (!((t)->common.constant_flag) || integer_zerop (t))
        return 1;
      return 0;
    case LT_EXPR:
    case LE_EXPR:
    case GT_EXPR:
    case GE_EXPR:
    case LTGT_EXPR:
      return honor_nans;
    case EQ_EXPR:
    case NE_EXPR:
    case UNORDERED_EXPR:
    case ORDERED_EXPR:
    case UNLT_EXPR:
    case UNLE_EXPR:
    case UNGT_EXPR:
    case UNGE_EXPR:
    case UNEQ_EXPR:
      return honor_snans;
    case CONVERT_EXPR:
    case FIX_TRUNC_EXPR:
    case FIX_CEIL_EXPR:
    case FIX_FLOOR_EXPR:
    case FIX_ROUND_EXPR:
      return honor_nans;
    case NEGATE_EXPR:
    case ABS_EXPR:
    case CONJ_EXPR:
      return 0;
    default:
      if (fp_operation && flag_trapping_math)
 return 1;
      return 0;
    }
}
unsigned char
tree_could_throw_p (tree t)
{
  if (!flag_exceptions)
    return 0;
  if (((enum tree_code) (t)->common.code) == MODIFY_EXPR)
    {
      if (flag_non_call_exceptions
   && tree_could_trap_p (((t)->exp.operands[0])))
 return 1;
      t = ((t)->exp.operands[1]);
    }
  if (((enum tree_code) (t)->common.code) == CALL_EXPR)
    return (call_expr_flags (t) & 16) == 0;
  if (flag_non_call_exceptions)
    return tree_could_trap_p (t);
  return 0;
}
unsigned char
tree_can_throw_internal (tree stmt)
{
  int region_nr = lookup_stmt_eh_region (stmt);
  if (region_nr < 0)
    return 0;
  return can_throw_internal_1 (region_nr);
}
unsigned char
tree_can_throw_external (tree stmt)
{
  int region_nr = lookup_stmt_eh_region (stmt);
  if (region_nr < 0)
    return 0;
  return can_throw_external_1 (region_nr);
}
unsigned char
maybe_clean_eh_stmt (tree stmt)
{
  if (!tree_could_throw_p (stmt))
    if (remove_stmt_from_eh_region (stmt))
      return 1;
  return 0;
}
void
gt_ggc_mx_throw_stmt_node (void *x_p)
{
  struct throw_stmt_node * const x = (struct throw_stmt_node *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).stmt != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).stmt); } while (0);
    }
}
void
gt_ggc_m_P15throw_stmt_node4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_throw_stmt_node ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_pch_nx_throw_stmt_node (void *x_p)
{
  struct throw_stmt_node * const x = (struct throw_stmt_node *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_15throw_stmt_node))
    {
      do { if ((*x).stmt != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).stmt); } while (0);
    }
}
void
gt_pch_n_P15throw_stmt_node4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P15throw_stmt_node4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_throw_stmt_node ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P15throw_stmt_node4htab);
      }
    }
}
void
gt_pch_p_15throw_stmt_node (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct throw_stmt_node * const x = (struct throw_stmt_node *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).stmt), cookie);
}
void
gt_pch_p_P15throw_stmt_node4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
const struct ggc_root_tab gt_ggc_r_gt_tree_eh_h[] = {
  {
    &throw_stmt_table,
    1,
    sizeof (throw_stmt_table),
    &gt_ggc_m_P15throw_stmt_node4htab,
    &gt_pch_n_P15throw_stmt_node4htab
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
void
ssa_remove_edge (edge e)
{
  tree phi, next;
  for (phi = phi_nodes (e->dest); phi; phi = next)
    {
      next = (((phi))->common.chain);
      remove_phi_arg (phi, e->src);
    }
  remove_edge (e);
}
edge
ssa_redirect_edge (edge e, basic_block dest)
{
  tree phi, next;
  tree list = ((void *)0), *last = &list;
  tree src, dst, node;
  int i;
  for (phi = phi_nodes (e->dest); phi; phi = next)
    {
      next = (((phi))->common.chain);
      i = phi_arg_from_edge (phi, e);
      if (i < 0)
 continue;
      src = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
      dst = get_def_from_ptr (get_phi_result_ptr (phi));
      node = build_tree_list_stat(dst,src );
      *last = node;
      last = &((node)->common.chain);
      remove_phi_arg_num (phi, i);
    }
  e = redirect_edge_succ_nodup (e, dest);
  ((e)->insns.t) = list;
  return e;
}
static unsigned char
verify_def (basic_block bb, basic_block *definition_block, tree ssa_name,
     tree stmt)
{
  unsigned char err = 0;
  if (((enum tree_code) (ssa_name)->common.code) != SSA_NAME)
    {
      error ("Expected an SSA_NAME object");
      debug_generic_stmt (ssa_name);
      debug_generic_stmt (stmt);
    }
  if (definition_block[(ssa_name)->ssa_name.version])
    {
      error ("SSA_NAME created in two different blocks %i and %i",
      definition_block[(ssa_name)->ssa_name.version]->index, bb->index);
      fprintf (stderr, "SSA_NAME: ");
      debug_generic_stmt (ssa_name);
      debug_generic_stmt (stmt);
      err = 1;
    }
  definition_block[(ssa_name)->ssa_name.version] = bb;
  if ((ssa_name)->common.chain != stmt)
    {
      error ("SSA_NAME_DEF_STMT is wrong");
      fprintf (stderr, "SSA_NAME: ");
      debug_generic_stmt (ssa_name);
      fprintf (stderr, "Expected definition statement:\n");
      debug_generic_stmt ((ssa_name)->common.chain);
      fprintf (stderr, "\nActual definition statement:\n");
      debug_generic_stmt (stmt);
      err = 1;
    }
  return err;
}
static unsigned char
verify_use (basic_block bb, basic_block def_bb, tree ssa_name,
     tree stmt, unsigned char check_abnormal)
{
  unsigned char err = 0;
  if ((((enum tree_code) ((ssa_name)->common.chain)->common.code) == NOP_EXPR && (((enum tree_code) ((((ssa_name)->common.chain)->common.type))->common.code) == VOID_TYPE) && integer_zerop ((((ssa_name)->common.chain)->exp.operands[0]))))
    ;
  else if (!def_bb)
    {
      error ("Missing definition");
      err = 1;
    }
  else if (bb != def_bb
    && !dominated_by_p (CDI_DOMINATORS, bb, def_bb))
    {
      error ("Definition in block %i does not dominate use in block %i",
      def_bb->index, bb->index);
      err = 1;
    }
  if (check_abnormal
      && !(ssa_name)->common.asm_written_flag)
    {
      error ("SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set");
      err = 1;
    }
  if (err)
    {
      fprintf (stderr, "for SSA_NAME: ");
      debug_generic_stmt (ssa_name);
      fprintf (stderr, "in statement:\n");
      debug_generic_stmt (stmt);
    }
  return err;
}
static unsigned char
verify_phi_args (tree phi, basic_block bb, basic_block *definition_block)
{
  edge e;
  unsigned char err = 0;
  int i, phi_num_args = (phi)->phi.num_args;
  for (e = bb->pred; e; e = e->pred_next)
    e->aux = (void *) 1;
  for (i = 0; i < phi_num_args; i++)
    {
      tree op = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
      e = ((phi)->phi.a[i]).e;
      if (((enum tree_code) (op)->common.code) == SSA_NAME)
 err |= verify_use (e->src, definition_block[(op)->ssa_name.version], op,
      phi, e->flags & 2);
      if (e->dest != bb)
 {
   error ("Wrong edge %d->%d for PHI argument\n",
          e->src->index, e->dest->index, bb->index);
   err = 1;
 }
      if (e->aux == (void *) 0)
 {
   error ("PHI argument flowing through dead edge %d->%d\n",
          e->src->index, e->dest->index);
   err = 1;
 }
      if (e->aux == (void *) 2)
 {
   error ("PHI argument duplicated for edge %d->%d\n", e->src->index,
          e->dest->index);
   err = 1;
 }
      if (err)
 {
   fprintf (stderr, "PHI argument\n");
   debug_generic_stmt (op);
 }
      e->aux = (void *) 2;
    }
  for (e = bb->pred; e; e = e->pred_next)
    {
      if (e->aux != (void *) 2)
 {
   error ("No argument flowing through edge %d->%d\n", e->src->index,
   e->dest->index);
   err = 1;
 }
      e->aux = (void *) 0;
    }
  if (err)
    {
      fprintf (stderr, "for PHI node\n");
      debug_generic_stmt (phi);
    }
  return err;
}
void
verify_ssa (void)
{
  unsigned char err = 0;
  basic_block bb;
  basic_block *definition_block = xcalloc (((ssa_names)->elements_used), sizeof (basic_block));
  timevar_push (TV_TREE_SSA_VERIFY);
  calculate_dominance_info (CDI_DOMINATORS);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree phi;
      block_stmt_iterator bsi;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 err |= verify_def (bb, definition_block, get_def_from_ptr (get_phi_result_ptr (phi)), phi);
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
 {
   tree stmt;
   stmt_ann_t ann;
   unsigned int j;
   v_may_def_optype v_may_defs;
   v_must_def_optype v_must_defs;
   def_optype defs;
   stmt = bsi_stmt (bsi);
   ann = stmt_ann (stmt);
   get_stmt_operands (stmt);
   v_may_defs = get_v_may_def_ops (ann);
   if (ann->makes_aliased_stores && ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0) == 0)
     error ("Makes aliased stores, but no V_MAY_DEFS");
   for (j = 0; j < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); j++)
     {
       tree op = (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((j)))));
       if (is_gimple_reg (op))
  {
    error ("Found a virtual definition for a GIMPLE register");
    debug_generic_stmt (op);
    debug_generic_stmt (stmt);
    err = 1;
  }
       err |= verify_def (bb, definition_block, op, stmt);
     }
   v_must_defs = get_v_must_def_ops (stmt_ann (stmt));
   for (j = 0; j < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); j++)
     {
       tree op = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((j)))));
       if (is_gimple_reg (op))
  {
    error ("Found a virtual must-def for a GIMPLE register");
    debug_generic_stmt (op);
    debug_generic_stmt (stmt);
    err = 1;
  }
       err |= verify_def (bb, definition_block, op, stmt);
     }
   defs = get_def_ops (ann);
   for (j = 0; j < ((defs) ? (defs)->num_defs : 0); j++)
     {
       tree op = (get_def_from_ptr (get_def_op_ptr (((defs)), ((j)))));
       if (((enum tree_code) (op)->common.code) == SSA_NAME && !is_gimple_reg (op))
  {
    error ("Found a real definition for a non-GIMPLE register");
    debug_generic_stmt (op);
    debug_generic_stmt (stmt);
    err = 1;
  }
       err |= verify_def (bb, definition_block, op, stmt);
     }
 }
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e;
      tree phi;
      block_stmt_iterator bsi;
      for (e = bb->pred; e; e = e->pred_next)
 {
   if (e->aux)
     {
       error ("AUX pointer initialized for edge %d->%d\n", e->src->index,
        e->dest->index);
       err = 1;
     }
 }
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 err |= verify_phi_args (phi, bb, definition_block);
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
 {
   tree stmt = bsi_stmt (bsi);
   stmt_ann_t ann = stmt_ann (stmt);
   unsigned int j;
   vuse_optype vuses;
   v_may_def_optype v_may_defs;
   use_optype uses;
   vuses = get_vuse_ops (ann);
   for (j = 0; j < ((vuses) ? (vuses)->num_vuses : 0); j++)
     {
       tree op = (get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((j)))));
       if (is_gimple_reg (op))
  {
    error ("Found a virtual use for a GIMPLE register");
    debug_generic_stmt (op);
    debug_generic_stmt (stmt);
    err = 1;
  }
       err |= verify_use (bb, definition_block[(op)->ssa_name.version],
     op, stmt, 0);
     }
   v_may_defs = get_v_may_def_ops (ann);
   for (j = 0; j < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); j++)
     {
       tree op = (get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((j)))));
       if (is_gimple_reg (op))
  {
    error ("Found a virtual use for a GIMPLE register");
    debug_generic_stmt (op);
    debug_generic_stmt (stmt);
    err = 1;
  }
       err |= verify_use (bb, definition_block[(op)->ssa_name.version],
     op, stmt, 0);
     }
   uses = get_use_ops (ann);
   for (j = 0; j < ((uses) ? (uses)->num_uses : 0); j++)
     {
       tree op = (get_use_from_ptr (get_use_op_ptr (((uses)), ((j)))));
       if (((enum tree_code) (op)->common.code) == SSA_NAME && !is_gimple_reg (op))
  {
    error ("Found a real use of a non-GIMPLE register");
    debug_generic_stmt (op);
    debug_generic_stmt (stmt);
    err = 1;
  }
       err |= verify_use (bb, definition_block[(op)->ssa_name.version],
     op, stmt, 0);
     }
 }
    }
  free (definition_block);
  timevar_pop (TV_TREE_SSA_VERIFY);
  if (err)
    internal_error ("verify_ssa failed.");
}
void
set_is_used (tree t)
{
  while (1)
    {
      if ((((enum tree_code) (t)->common.code) == VAR_DECL || ((enum tree_code) (t)->common.code) == PARM_DECL || ((enum tree_code) (t)->common.code) == RESULT_DECL || (((enum tree_code) (t)->common.code) == SSA_NAME && (((enum tree_code) ((t)->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((t)->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((t)->ssa_name.var)->common.code) == RESULT_DECL))))
 break;
      if (((enum tree_code) (t)->common.code) == REALPART_EXPR || ((enum tree_code) (t)->common.code) == IMAGPART_EXPR)
 t = ((t)->exp.operands[0]);
      else
 while (handled_component_p (t))
   t = ((t)->exp.operands[0]);
    }
  if (((enum tree_code) (t)->common.code) == SSA_NAME)
    t = (t)->ssa_name.var;
  var_ann (t)->used = 1;
}
void
init_tree_ssa (void)
{
  referenced_vars = varray_init (20, VARRAY_DATA_TREE, "referenced_vars");
  call_clobbered_vars = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  init_ssa_operands ();
  init_ssanames ();
  init_phinodes ();
  global_var = (tree) ((void *)0);
  aliases_computed_p = 0;
}
void
delete_tree_ssa (void)
{
  size_t i;
  basic_block bb;
  block_stmt_iterator bsi;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
      bsi_stmt (bsi)->common.ann = ((void *)0);
  if (referenced_vars)
    {
      for (i = 0; i < ((referenced_vars)->elements_used); i++)
 ((referenced_vars)->data.tree1[i])->common.ann = ((void *)0);
      referenced_vars = ((void *)0);
    }
  fini_ssanames ();
  fini_phinodes ();
  fini_ssa_operands ();
  global_var = (tree) ((void *)0);
  do { if (call_clobbered_vars) { bitmap_clear (call_clobbered_vars); free (call_clobbered_vars); (call_clobbered_vars) = 0; } } while (0);
  call_clobbered_vars = ((void *)0);
  aliases_computed_p = 0;
}
unsigned char
tree_ssa_useless_type_conversion_1 (tree outer_type, tree inner_type)
{
  if (inner_type == outer_type
     || (lang_hooks.types_compatible_p (inner_type, outer_type)))
    return 1;
  else if ((((enum tree_code) (inner_type)->common.code) == POINTER_TYPE || ((enum tree_code) (inner_type)->common.code) == REFERENCE_TYPE)
           && (((enum tree_code) (outer_type)->common.code) == POINTER_TYPE || ((enum tree_code) (outer_type)->common.code) == REFERENCE_TYPE)
    && ((enum tree_code) (((outer_type)->common.type))->common.code) == VOID_TYPE)
    return 1;
  else if ((((enum tree_code) (inner_type)->common.code) == POINTER_TYPE || ((enum tree_code) (inner_type)->common.code) == REFERENCE_TYPE)
           && (((enum tree_code) (outer_type)->common.code) == POINTER_TYPE || ((enum tree_code) (outer_type)->common.code) == REFERENCE_TYPE)
           && lang_hooks.types_compatible_p (((inner_type)->common.type),
          ((outer_type)->common.type)))
    return 1;
  else if ((((enum tree_code) (inner_type)->common.code) == INTEGER_TYPE || ((enum tree_code) (inner_type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (inner_type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (inner_type)->common.code) == CHAR_TYPE)
           && (((enum tree_code) (outer_type)->common.code) == INTEGER_TYPE || ((enum tree_code) (outer_type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (outer_type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (outer_type)->common.code) == CHAR_TYPE)
    && ((inner_type)->type.mode) == ((outer_type)->type.mode)
    && ((inner_type)->common.unsigned_flag) == ((outer_type)->common.unsigned_flag)
    && ((inner_type)->type.precision) == ((outer_type)->type.precision))
    return 1;
  else if (((enum tree_code) (inner_type)->common.code) == COMPLEX_TYPE
    && ((enum tree_code) (outer_type)->common.code) == COMPLEX_TYPE
    && tree_ssa_useless_type_conversion_1 (((outer_type)->common.type),
        ((inner_type)->common.type)))
    return 1;
  return 0;
}
unsigned char
tree_ssa_useless_type_conversion (tree expr)
{
  if (((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR
      || ((enum tree_code) (expr)->common.code) == VIEW_CONVERT_EXPR
      || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR)
    return tree_ssa_useless_type_conversion_1 (((expr)->common.type),
            ((((expr)->exp.operands[0]))->common.type)
            );
  return 0;
}
static unsigned char
walk_use_def_chains_1 (tree var, walk_use_def_chains_fn fn, void *data,
         bitmap visited)
{
  tree def_stmt;
  if (bitmap_bit_p (visited, (var)->ssa_name.version))
    return 0;
  bitmap_set_bit (visited, (var)->ssa_name.version);
  def_stmt = (var)->common.chain;
  if (((enum tree_code) (def_stmt)->common.code) != PHI_NODE)
    {
      return (*fn) (var, def_stmt, data);
    }
  else
    {
      int i;
      for (i = 0; i < (def_stmt)->phi.num_args; i++)
 {
   tree arg = get_use_from_ptr (get_phi_arg_def_ptr (((def_stmt)), ((i))));
   if (((enum tree_code) (arg)->common.code) == SSA_NAME
       && walk_use_def_chains_1 (arg, fn, data, visited))
     return 1;
   if ((*fn) (arg, def_stmt, data))
     return 1;
 }
    }
  return 0;
}
void
walk_use_def_chains (tree var, walk_use_def_chains_fn fn, void *data)
{
  tree def_stmt;
  def_stmt = (var)->common.chain;
  if (((enum tree_code) (def_stmt)->common.code) != PHI_NODE)
    (*fn) (var, def_stmt, data);
  else
    {
      bitmap visited = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      walk_use_def_chains_1 (var, fn, data, visited);
      do { if (visited) { bitmap_clear (visited); free (visited); (visited) = 0; } } while (0);
    }
}
static void
propagate_into_addr (tree stmt, tree var, tree *x, tree repl)
{
  tree new_var, ass_stmt, addr_var;
  basic_block bb;
  block_stmt_iterator bsi;
  if (((enum tree_code) (repl)->common.code) != ADDR_EXPR)
    return;
  addr_var = ((repl)->exp.operands[0]);
  while (((enum tree_code) (*x)->common.code) == ARRAY_REF
  || ((enum tree_code) (*x)->common.code) == COMPONENT_REF
  || ((enum tree_code) (*x)->common.code) == BIT_FIELD_REF)
    x = &((*x)->exp.operands[0]);
  if (((enum tree_code) (*x)->common.code) != INDIRECT_REF
      || ((*x)->exp.operands[0]) != var)
    return;
  modify_stmt (stmt);
  if (((*x)->common.type) == ((addr_var)->common.type))
    {
      *x = addr_var;
      mark_new_vars_to_rename (stmt, vars_to_rename);
      return;
    }
  ass_stmt = build2_stat (MODIFY_EXPR,global_trees[TI_VOID_TYPE],(tree) ((void *)0),repl );
  new_var = duplicate_ssa_name (var, ass_stmt);
  ((*x)->exp.operands[0]) = new_var;
  ((ass_stmt)->exp.operands[0]) = new_var;
  bb = bb_for_stmt (stmt);
  tree_block_label (bb);
  bsi = bsi_after_labels (bb);
  bsi_insert_after (&bsi, ass_stmt, BSI_NEW_STMT);
  mark_new_vars_to_rename (stmt, vars_to_rename);
}
static void
replace_immediate_uses (tree var, tree repl)
{
  use_optype uses;
  vuse_optype vuses;
  v_may_def_optype v_may_defs;
  int i, j, n;
  dataflow_t df;
  tree stmt;
  stmt_ann_t ann;
  unsigned char mark_new_vars;
  df = get_immediate_uses ((var)->common.chain);
  n = num_immediate_uses (df);
  for (i = 0; i < n; i++)
    {
      stmt = immediate_use (df, i);
      ann = stmt_ann (stmt);
      if (((enum tree_code) (stmt)->common.code) == PHI_NODE)
 {
   for (j = 0; j < (stmt)->phi.num_args; j++)
     if (get_use_from_ptr (get_phi_arg_def_ptr (((stmt)), ((j)))) == var)
       {
  ((*((get_phi_arg_def_ptr (((stmt)), ((j)))).use)) = ((repl)));
  if (((enum tree_code) (repl)->common.code) == SSA_NAME
      && ((stmt)->phi.a[j]).e->flags & 2)
    (repl)->common.asm_written_flag = 1;
       }
   continue;
 }
      get_stmt_operands (stmt);
      mark_new_vars = 0;
      if (is_gimple_reg ((var)->ssa_name.var))
 {
   if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR)
     {
       propagate_into_addr (stmt, var, &((stmt)->exp.operands[0]), repl);
       propagate_into_addr (stmt, var, &((stmt)->exp.operands[1]), repl);
     }
   uses = get_use_ops (ann);
   for (j = 0; j < (int) ((uses) ? (uses)->num_uses : 0); j++)
     if ((get_use_from_ptr (get_use_op_ptr (((uses)), ((j))))) == var)
       {
  propagate_value (get_use_op_ptr ((uses), (j)), repl);
  mark_new_vars = (((enum tree_code) (((repl)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((repl)->common.type))->common.code) == REFERENCE_TYPE);
       }
 }
      else
 {
   vuses = get_vuse_ops (ann);
   for (j = 0; j < (int) ((vuses) ? (vuses)->num_vuses : 0); j++)
     if ((get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((j))))) == var)
       propagate_value (get_vuse_op_ptr ((vuses), (j)), repl);
   v_may_defs = get_v_may_def_ops (ann);
   for (j = 0; j < (int) ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); j++)
     if ((get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((j))))) == var)
       propagate_value (get_v_may_def_op_ptr ((v_may_defs), (j)), repl);
 }
      if (mark_new_vars)
 mark_new_vars_to_rename (stmt, vars_to_rename);
      else
 modify_stmt (stmt);
    }
}
static tree
get_eq_name (tree *eq_to, tree var)
{
  unsigned ver;
  tree val = var;
  while (((enum tree_code) (val)->common.code) == SSA_NAME)
    {
      ver = (val)->ssa_name.version;
      if (!eq_to[ver])
 break;
      val = eq_to[ver];
    }
  while (((enum tree_code) (var)->common.code) == SSA_NAME)
    {
      ver = (var)->ssa_name.version;
      if (!eq_to[ver])
 break;
      var = eq_to[ver];
      eq_to[ver] = val;
    }
  return val;
}
static void
check_phi_redundancy (tree phi, tree *eq_to)
{
  tree val = (tree) ((void *)0), def, res = get_def_from_ptr (get_phi_result_ptr (phi)), stmt;
  unsigned i, ver = (res)->ssa_name.version, n;
  dataflow_t df;
  if ((phi)->phi.num_args > 16)
    return;
  for (i = 0; i < (unsigned) (phi)->phi.num_args; i++)
    {
      def = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
      if (((enum tree_code) (def)->common.code) == SSA_NAME)
 {
   def = get_eq_name (eq_to, def);
   if (def == res)
     continue;
 }
      if (val
   && !operand_equal_p (val, def, 0))
 return;
      val = def;
    }
  if (!val)
    fancy_abort ("gcc.c", 108747, "?");
  if (get_eq_name (eq_to, res) == val)
    return;
  if (!may_propagate_copy (res, val))
    return;
  eq_to[ver] = val;
  df = get_immediate_uses ((res)->common.chain);
  n = num_immediate_uses (df);
  for (i = 0; i < n; i++)
    {
      stmt = immediate_use (df, i);
      if (((enum tree_code) (stmt)->common.code) == PHI_NODE)
 check_phi_redundancy (stmt, eq_to);
    }
}
void
kill_redundant_phi_nodes (void)
{
  tree *eq_to;
  unsigned i, old_num_ssa_names;
  basic_block bb;
  tree phi, var, repl, stmt;
  eq_to = xcalloc (((ssa_names)->elements_used), sizeof (tree));
  compute_immediate_uses (1 << 0 | 1 << 1, ((void *)0));
  old_num_ssa_names = ((ssa_names)->elements_used);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (phi = phi_nodes (bb); phi; phi = ((phi)->common.chain))
 {
   var = get_def_from_ptr (get_phi_result_ptr (phi));
   check_phi_redundancy (phi, eq_to);
 }
    }
  for (i = 0; i < old_num_ssa_names; i++)
    {
      if (!((ssa_names)->data.tree1[i]))
 continue;
      repl = get_eq_name (eq_to, ((ssa_names)->data.tree1[i]));
      if (repl != ((ssa_names)->data.tree1[i]))
 replace_immediate_uses (((ssa_names)->data.tree1[i]), repl);
    }
  for (i = 0; i < old_num_ssa_names; i++)
    {
      if (!((ssa_names)->data.tree1[i]))
 continue;
      repl = get_eq_name (eq_to, ((ssa_names)->data.tree1[i]));
      if (repl != ((ssa_names)->data.tree1[i]))
 {
   stmt = (((ssa_names)->data.tree1[i]))->common.chain;
   remove_phi_node (stmt, (tree) ((void *)0), bb_for_stmt (stmt));
 }
    }
  free_df ();
  free (eq_to);
}
struct tree_opt_pass pass_redundant_phi =
{
  "redphi",
  ((void *)0),
  kill_redundant_phi_nodes,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 1)
    | (1 << 2) | (1 << 3)
};
static void
warn_uninit (tree t, const char *msgid, location_t *locus)
{
  tree var = (t)->ssa_name.var;
  tree def = (t)->common.chain;
  if (!(((enum tree_code) (def)->common.code) == NOP_EXPR && (((enum tree_code) (((def)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((def)->exp.operands[0]))))
    return;
  if (((enum tree_code) (var)->common.code) == PARM_DECL)
    return;
  if (((var)->decl.inline_flag))
    return;
  if (((var)->common.nowarning_flag))
    return;
  if (!locus)
    locus = &((var)->decl.locus);
  warning (msgid, locus, var);
  ((var)->common.nowarning_flag) = 1;
}
static tree
warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data)
{
  location_t *locus = data;
  tree t = *tp;
  if (((enum tree_code) (t)->common.code) == SSA_NAME)
    {
      warn_uninit (t, "%H'%D' is used uninitialized in this function", locus);
      *walk_subtrees = 0;
    }
  else if ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd') || (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
    *walk_subtrees = 0;
  return (tree) ((void *)0);
}
static void
warn_uninitialized_phi (tree phi)
{
  int i, n = (phi)->phi.num_args;
  if (!is_gimple_reg (get_def_from_ptr (get_phi_result_ptr (phi))))
    return;
  for (i = 0; i < n; ++i)
    {
      tree op = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
      if (((enum tree_code) (op)->common.code) == SSA_NAME)
 warn_uninit (op, "%H'%D' may be used uninitialized in this function",
       ((void *)0));
    }
}
static void
execute_early_warn_uninitialized (void)
{
  block_stmt_iterator bsi;
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
      walk_tree (bsi_stmt_ptr (bsi), warn_uninitialized_var,
   ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (bsi_stmt (bsi))->common.code))])) != 0) ? (bsi_stmt (bsi))->exp.locus : (location_t *)((void *)0)), ((void *)0));
}
static void
execute_late_warn_uninitialized (void)
{
  basic_block bb;
  tree phi;
  execute_early_warn_uninitialized ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
      warn_uninitialized_phi (phi);
}
static unsigned char
gate_warn_uninitialized (void)
{
  return warn_uninitialized != 0;
}
struct tree_opt_pass pass_early_warn_uninitialized =
{
  ((void *)0),
  gate_warn_uninitialized,
  execute_early_warn_uninitialized,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 6),
  0,
  0,
  0,
  0
};
struct tree_opt_pass pass_late_warn_uninitialized =
{
  ((void *)0),
  gate_warn_uninitialized,
  execute_late_warn_uninitialized,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 6),
  0,
  0,
  0,
  0
};
int dump_flags;
bitmap vars_to_rename;
unsigned char in_gimple_form;
static struct tree_opt_pass *all_passes;
static void
execute_gimple (void)
{
  if (!lang_hooks.gimple_before_inlining)
    gimplify_function_tree (current_function_decl);
}
static struct tree_opt_pass pass_gimple =
{
  "gimple",
  ((void *)0),
  execute_gimple,
  ((void *)0),
  ((void *)0),
  0,
  0,
  0,
  (1 << 0),
  0,
  0,
  (1 << 0)
};
static unsigned char
gate_all_optimizations (void)
{
  return (optimize >= 1
   && !((global_dc)->diagnostic_count[(int) (DK_ERROR)] || (global_dc)->diagnostic_count[(int) (DK_SORRY)]));
}
static struct tree_opt_pass pass_all_optimizations =
{
  ((void *)0),
  gate_all_optimizations,
  ((void *)0),
  ((void *)0),
  ((void *)0),
  0,
  0,
  0,
  0,
  0,
  0,
  0
};
static void
execute_free_datastructures (void)
{
  tree *chain;
  free_dominance_info (CDI_DOMINATORS);
  disband_implicit_edges ();
  delete_tree_ssa ();
  chain = &((current_function_decl)->decl.saved_tree);
  *chain = alloc_stmt_list ();
  delete_tree_cfg_annotations ();
}
static struct tree_opt_pass pass_free_datastructures =
{
  ((void *)0),
  ((void *)0),
  execute_free_datastructures,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 3),
  0,
  0,
  0,
  0
};
static void
execute_init_datastructures (void)
{
  init_tree_ssa ();
}
static struct tree_opt_pass pass_init_datastructures =
{
  ((void *)0),
  ((void *)0),
  execute_init_datastructures,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 3),
  0,
  0,
  0,
  0
};
static void
register_one_dump_file (struct tree_opt_pass *pass)
{
  char *dot_name, *flag_name;
  char num[10];
  if (!pass->name)
    return;
  num[0] = '\0';
  if (pass->static_pass_number)
    sprintf (num, "%d", ((int) pass->static_pass_number < 0
    ? 1 : pass->static_pass_number));
  dot_name = concat (".", pass->name, num, ((void *)0));
  flag_name = concat ("tree-", pass->name, num, ((void *)0));
  pass->static_pass_number = dump_register (dot_name, flag_name);
}
static int
register_dump_files (struct tree_opt_pass *pass, int properties)
{
  do
    {
      if (pass->properties_required & ~properties)
        fancy_abort ("gcc.c", 109207, "?");
      if (pass->properties_destroyed & pass->properties_provided)
        fancy_abort ("gcc.c", 109210, "?");
      pass->properties_required = properties;
      pass->properties_provided = properties =
        (properties | pass->properties_provided) & ~pass->properties_destroyed;
      if (properties & ((1 << 0) | (1 << 1) | (1 << 2)))
        register_one_dump_file (pass);
      if (pass->sub)
 properties = register_dump_files (pass->sub, properties);
      pass = pass->next;
    }
  while (pass);
  return properties;
}
static struct tree_opt_pass *
dup_pass_1 (struct tree_opt_pass *pass)
{
  struct tree_opt_pass *new;
  new = xmalloc (sizeof (*new));
  memcpy (new, pass, sizeof (*new));
  if (pass->name)
    {
      int n, p = pass->static_pass_number;
      if (p)
 n = -(--p) + 1;
      else
 n = 2, p = -1;
      pass->static_pass_number = p;
      new->static_pass_number = n;
    }
  return new;
}
void
init_tree_optimization_passes (void)
{
  struct tree_opt_pass **p;
  p = &all_passes;
  (*p = &pass_gimple, p = &(*p)->next);
  (*p = &pass_remove_useless_stmts, p = &(*p)->next);
  (*p = &pass_mudflap_1, p = &(*p)->next);
  (*p = &pass_lower_cf, p = &(*p)->next);
  (*p = &pass_lower_eh, p = &(*p)->next);
  (*p = &pass_build_cfg, p = &(*p)->next);
  (*p = &pass_tree_profile, p = &(*p)->next);
  (*p = &pass_init_datastructures, p = &(*p)->next);
  (*p = &pass_all_optimizations, p = &(*p)->next);
  (*p = &pass_mudflap_2, p = &(*p)->next);
  (*p = &pass_free_datastructures, p = &(*p)->next);
  (*p = &pass_expand, p = &(*p)->next);
  (*p = &pass_rest_of_compilation, p = &(*p)->next);
  *p = ((void *)0);
  p = &pass_all_optimizations.sub;
  (*p = &pass_referenced_vars, p = &(*p)->next);
  (*p = &pass_build_pta, p = &(*p)->next);
  (*p = &pass_build_ssa, p = &(*p)->next);
  (*p = &pass_rename_ssa_copies, p = &(*p)->next);
  (*p = &pass_early_warn_uninitialized, p = &(*p)->next);
  (*p = &pass_dce, p = &(*p)->next);
  (*p = &pass_dominator, p = &(*p)->next);
  (*p = &pass_redundant_phi, p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_dce)), p = &(*p)->next);
  (*p = &pass_forwprop, p = &(*p)->next);
  (*p = &pass_phiopt, p = &(*p)->next);
  (*p = &pass_may_alias, p = &(*p)->next);
  (*p = &pass_tail_recursion, p = &(*p)->next);
  (*p = &pass_ch, p = &(*p)->next);
  (*p = &pass_del_pta, p = &(*p)->next);
  (*p = &pass_profile, p = &(*p)->next);
  (*p = &pass_lower_complex, p = &(*p)->next);
  (*p = &pass_sra, p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_rename_ssa_copies)), p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_dominator)), p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_redundant_phi)), p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_dce)), p = &(*p)->next);
  (*p = &pass_dse, p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_forwprop)), p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_phiopt)), p = &(*p)->next);
  (*p = &pass_ccp, p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_redundant_phi)), p = &(*p)->next);
  (*p = &pass_fold_builtins, p = &(*p)->next);
  (*p = &pass_split_crit_edges, p = &(*p)->next);
  (*p = &pass_pre, p = &(*p)->next);
  (*p = &pass_loop, p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_dominator)), p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_redundant_phi)), p = &(*p)->next);
  (*p = &pass_cd_dce, p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_dse)), p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_forwprop)), p = &(*p)->next);
  (*p = &(*dup_pass_1 (&pass_phiopt)), p = &(*p)->next);
  (*p = &pass_tail_calls, p = &(*p)->next);
  (*p = &pass_late_warn_uninitialized, p = &(*p)->next);
  (*p = &pass_warn_function_return, p = &(*p)->next);
  (*p = &pass_del_ssa, p = &(*p)->next);
  (*p = &pass_nrv, p = &(*p)->next);
  (*p = &pass_remove_useless_vars, p = &(*p)->next);
  *p = ((void *)0);
  p = &pass_loop.sub;
  (*p = &pass_loop_init, p = &(*p)->next);
  (*p = &pass_loop_done, p = &(*p)->next);
  *p = ((void *)0);
  register_dump_files (all_passes, 0);
}
static void execute_pass_list (struct tree_opt_pass *);
static unsigned int last_verified;
static void
execute_todo (unsigned int flags)
{
  if (flags & (1 << 1))
    {
      rewrite_into_ssa (0);
      bitmap_clear (vars_to_rename);
    }
  if ((flags & (1 << 0)) && dump_file)
    dump_function_to_file (current_function_decl,
      dump_file, dump_flags);
  if (flags & (1 << 2))
    ggc_collect ();
}
static unsigned char
execute_one_pass (struct tree_opt_pass *pass)
{
  unsigned int todo;
  if (pass->gate && !pass->gate ())
    return 0;
  in_gimple_form = (pass->properties_provided & ((1 << 0) | (1 << 1) | (1 << 2))) != 0;
  todo = pass->todo_flags_start & ~last_verified;
  if (todo)
    execute_todo (todo);
  if (pass->static_pass_number)
    {
      dump_file = dump_begin (pass->static_pass_number, &dump_flags);
      if (dump_file)
 {
   const char *dname, *aname;
   dname = lang_hooks.decl_printable_name (current_function_decl, 2);
   aname = (((const char *) (decl_assembler_name (current_function_decl))->identifier.id.str)
                                                  );
   fprintf (dump_file, "\n;; Function %s (%s)\n\n", dname, aname);
 }
    }
  if (pass->tv_id)
    timevar_push (pass->tv_id);
  if (pass->execute)
    pass->execute ();
  todo = pass->todo_flags_finish;
  last_verified = todo & ((1 << 3) | (1 << 4) | (1 << 5));
  if (todo)
    execute_todo (todo);
  if (pass->tv_id)
    timevar_pop (pass->tv_id);
  if (dump_file)
    {
      dump_end (pass->static_pass_number, dump_file);
      dump_file = ((void *)0);
    }
  return 1;
}
static void
execute_pass_list (struct tree_opt_pass *pass)
{
  do
    {
      if (execute_one_pass (pass) && pass->sub)
 execute_pass_list (pass->sub);
      pass = pass->next;
    }
  while (pass);
}
void
tree_rest_of_compilation (tree fndecl, unsigned char nested_p)
{
  location_t saved_loc;
  struct cgraph_node *saved_node = ((void *)0), *node;
  timevar_push (TV_EXPAND);
  if (flag_unit_at_a_time && !cgraph_global_info_ready)
    fancy_abort ("gcc.c", 109454, "?");
  current_function_decl = fndecl;
  saved_loc = input_location;
  input_location = ((fndecl)->decl.locus);
  init_function_start (fndecl);
  cfun->x_dont_save_pending_sizes_p = 1;
  node = cgraph_node (fndecl);
  if (cgraph_preserve_function_body_p (fndecl))
    {
      if (!flag_unit_at_a_time)
 {
   struct cgraph_edge *e;
   saved_node = cgraph_clone_node (node);
   for (e = saved_node->callees; e; e = e->next_callee)
     if (!e->inline_failed)
       cgraph_clone_inlined_nodes (e, 1);
 }
      cfun->saved_tree = save_body (fndecl, &cfun->saved_args);
    }
  if (flag_inline_trees)
    {
      struct cgraph_edge *e;
      for (e = node->callees; e; e = e->next_callee)
 if (!e->inline_failed || warn_inline)
   break;
      if (e)
 {
   timevar_push (TV_INTEGRATION);
   optimize_inline_calls (fndecl);
   timevar_pop (TV_INTEGRATION);
 }
    }
  if (!vars_to_rename)
    vars_to_rename = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  if (nested_p)
    ggc_push_context ();
  execute_pass_list (all_passes);
  if (cfun->saved_tree)
    {
      ((fndecl)->decl.saved_tree) = cfun->saved_tree;
      ((fndecl)->decl.arguments) = cfun->saved_args;
      if (!flag_unit_at_a_time)
 {
   struct cgraph_edge *e;
   while (node->callees)
     cgraph_remove_edge (node->callees);
   node->callees = saved_node->callees;
   saved_node->callees = ((void *)0);
   for (e = saved_node->callees; e; e = e->next_callee)
     e->caller = node;
   cgraph_remove_node (saved_node);
 }
    }
  else
    ((fndecl)->decl.saved_tree) = ((void *)0);
  cfun = 0;
  if (warn_larger_than && !((fndecl)->decl.external_flag) && ((fndecl)->common.type))
    {
      tree ret_type = ((((fndecl)->common.type))->common.type);
      if (ret_type && ((ret_type)->type.size_unit)
   && ((enum tree_code) (((ret_type)->type.size_unit))->common.code) == INTEGER_CST
   && 0 < compare_tree_int (((ret_type)->type.size_unit),
       larger_than_size))
 {
   unsigned int size_as_int
     = (((((ret_type)->type.size_unit))->int_cst.int_cst).low);
   if (compare_tree_int (((ret_type)->type.size_unit), size_as_int) == 0)
     warning ("%Jsize of return value of '%D' is %u bytes",
                     fndecl, fndecl, size_as_int);
   else
     warning ("%Jsize of return value of '%D' is larger than %wd bytes",
                     fndecl, fndecl, larger_than_size);
 }
    }
  if (!nested_p && !flag_inline_trees)
    {
      ((fndecl)->decl.saved_tree) = ((void *)0);
      if (((fndecl)->decl.u2.f) == 0
   && !cgraph_node (fndecl)->origin)
 {
   if (((fndecl)->decl.initial) != 0)
     ((fndecl)->decl.initial) = global_trees[TI_ERROR_MARK];
 }
    }
  input_location = saved_loc;
  ggc_collect ();
  if (nested_p)
    ggc_pop_context ();
  timevar_pop (TV_EXPAND);
}
static unsigned char is_gimple_id (tree);
unsigned char
is_gimple_rhs (tree t)
{
  enum tree_code code = ((enum tree_code) (t)->common.code);
  switch (tree_code_type[(int) (code)])
    {
    case '1':
    case '2':
    case '<':
      return 1;
    default:
      break;
    }
  switch (code)
    {
    case TRUTH_NOT_EXPR:
    case TRUTH_AND_EXPR:
    case TRUTH_OR_EXPR:
    case TRUTH_XOR_EXPR:
    case ADDR_EXPR:
    case CALL_EXPR:
    case CONSTRUCTOR:
    case COMPLEX_EXPR:
    case VA_ARG_EXPR:
    case INTEGER_CST:
    case REAL_CST:
    case STRING_CST:
    case COMPLEX_CST:
    case VECTOR_CST:
    case OBJ_TYPE_REF:
      return 1;
    default:
      break;
    }
  return is_gimple_lvalue (t) || is_gimple_val (t);
}
unsigned char
is_gimple_constructor_elt (tree t)
{
  return (is_gimple_val (t)
   || ((enum tree_code) (t)->common.code) == CONSTRUCTOR);
}
unsigned char
is_gimple_lvalue (tree t)
{
  return (is_gimple_addr_expr_arg (t)
   || ((enum tree_code) (t)->common.code) == INDIRECT_REF
   || ((enum tree_code) (t)->common.code) == BIT_FIELD_REF);
}
unsigned char
is_gimple_condexpr (tree t)
{
  return (is_gimple_val (t)
   || tree_code_type[(int) (((enum tree_code) (t)->common.code))] == '<');
}
unsigned char
is_gimple_addr_expr_arg (tree t)
{
  return (is_gimple_id (t)
   || ((enum tree_code) (t)->common.code) == ARRAY_REF
   || ((enum tree_code) (t)->common.code) == ARRAY_RANGE_REF
   || ((enum tree_code) (t)->common.code) == COMPONENT_REF
   || ((enum tree_code) (t)->common.code) == REALPART_EXPR
   || ((enum tree_code) (t)->common.code) == IMAGPART_EXPR
   || ((enum tree_code) (t)->common.code) == INDIRECT_REF);
}
unsigned char
is_gimple_min_invariant (tree t)
{
  switch (((enum tree_code) (t)->common.code))
    {
    case ADDR_EXPR:
      return ((t)->common.invariant_flag);
    case INTEGER_CST:
    case REAL_CST:
    case STRING_CST:
    case COMPLEX_CST:
    case VECTOR_CST:
      return !((t)->common.public_flag);
    default:
      return 0;
    }
}
unsigned char
is_gimple_stmt (tree t)
{
  enum tree_code code = ((enum tree_code) (t)->common.code);
  if ((((enum tree_code) (t)->common.code) == NOP_EXPR && (((enum tree_code) (((t)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((t)->exp.operands[0]))))
    return 1;
  switch (code)
    {
    case BIND_EXPR:
    case COND_EXPR:
      return ((t)->common.type) == ((void *)0) || (((enum tree_code) (((t)->common.type))->common.code) == VOID_TYPE);
    case SWITCH_EXPR:
    case GOTO_EXPR:
    case RETURN_EXPR:
    case LABEL_EXPR:
    case CASE_LABEL_EXPR:
    case TRY_CATCH_EXPR:
    case TRY_FINALLY_EXPR:
    case EH_FILTER_EXPR:
    case CATCH_EXPR:
    case ASM_EXPR:
    case RESX_EXPR:
    case PHI_NODE:
    case STATEMENT_LIST:
      return 1;
    case VA_ARG_EXPR:
      return 1;
    case CALL_EXPR:
    case MODIFY_EXPR:
      return 1;
    default:
      return 0;
    }
}
unsigned char
is_gimple_variable (tree t)
{
  return (((enum tree_code) (t)->common.code) == VAR_DECL
   || ((enum tree_code) (t)->common.code) == PARM_DECL
   || ((enum tree_code) (t)->common.code) == RESULT_DECL
   || ((enum tree_code) (t)->common.code) == SSA_NAME);
}
static unsigned char
is_gimple_id (tree t)
{
  return (is_gimple_variable (t)
   || ((enum tree_code) (t)->common.code) == FUNCTION_DECL
   || ((enum tree_code) (t)->common.code) == LABEL_DECL
   || ((enum tree_code) (t)->common.code) == STRING_CST);
}
unsigned char
is_gimple_reg_type (tree type)
{
  return (!(((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE)
          && ((enum tree_code) (type)->common.code) != COMPLEX_TYPE);
}
unsigned char
is_gimple_reg (tree t)
{
  if (((enum tree_code) (t)->common.code) == SSA_NAME)
    t = (t)->ssa_name.var;
  return (is_gimple_variable (t)
   && is_gimple_reg_type (((t)->common.type))
   && ! ((t)->common.volatile_flag)
   && ! ((t)->common.addressable_flag)
   && ! needs_to_live_in_memory (t));
}
unsigned char
is_gimple_non_addressable (tree t)
{
  if (((enum tree_code) (t)->common.code) == SSA_NAME)
    t = (t)->ssa_name.var;
  return (is_gimple_variable (t)
   && ! ((t)->common.addressable_flag)
   && ! needs_to_live_in_memory (t));
}
unsigned char
is_gimple_val (tree t)
{
  if (is_gimple_variable (t)
      && is_gimple_reg_type (((t)->common.type))
      && !is_gimple_reg (t))
    return 0;
  if (((enum tree_code) (t)->common.code) == EXC_PTR_EXPR || ((enum tree_code) (t)->common.code) == FILTER_EXPR)
    return 1;
  return (is_gimple_variable (t) || is_gimple_min_invariant (t));
}
unsigned char
is_gimple_min_lval (tree t)
{
  return (is_gimple_id (t)
   || ((enum tree_code) (t)->common.code) == INDIRECT_REF);
}
unsigned char
is_gimple_cast (tree t)
{
  return (((enum tree_code) (t)->common.code) == NOP_EXPR
   || ((enum tree_code) (t)->common.code) == CONVERT_EXPR
          || ((enum tree_code) (t)->common.code) == FIX_TRUNC_EXPR
          || ((enum tree_code) (t)->common.code) == FIX_CEIL_EXPR
          || ((enum tree_code) (t)->common.code) == FIX_FLOOR_EXPR
          || ((enum tree_code) (t)->common.code) == FIX_ROUND_EXPR);
}
unsigned char
is_gimple_call_addr (tree t)
{
  return (((enum tree_code) (t)->common.code) == OBJ_TYPE_REF
   || is_gimple_val (t));
}
tree
get_call_expr_in (tree t)
{
  if (((enum tree_code) (t)->common.code) == MODIFY_EXPR)
    t = ((t)->exp.operands[1]);
  if (((enum tree_code) (t)->common.code) == CALL_EXPR)
    return t;
  return (tree) ((void *)0);
}
tree
get_base_address (tree t)
{
  while (((enum tree_code) (t)->common.code) == REALPART_EXPR || ((enum tree_code) (t)->common.code) == IMAGPART_EXPR
  || handled_component_p (t))
    t = ((t)->exp.operands[0]);
  if ((((enum tree_code) (t)->common.code) == VAR_DECL || ((enum tree_code) (t)->common.code) == PARM_DECL || ((enum tree_code) (t)->common.code) == RESULT_DECL || (((enum tree_code) (t)->common.code) == SSA_NAME && (((enum tree_code) ((t)->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((t)->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((t)->ssa_name.var)->common.code) == RESULT_DECL)))
      || ((enum tree_code) (t)->common.code) == STRING_CST
      || ((enum tree_code) (t)->common.code) == CONSTRUCTOR
      || ((enum tree_code) (t)->common.code) == INDIRECT_REF)
    return t;
  else
    return (tree) ((void *)0);
}
void
recalculate_side_effects (tree t)
{
  enum tree_code code = ((enum tree_code) (t)->common.code);
  int fro = first_rtl_op (code);
  int i;
  switch (tree_code_type[(int) (code)])
    {
    case 'e':
      switch (code)
 {
 case INIT_EXPR:
 case MODIFY_EXPR:
 case VA_ARG_EXPR:
 case PREDECREMENT_EXPR:
 case PREINCREMENT_EXPR:
 case POSTDECREMENT_EXPR:
 case POSTINCREMENT_EXPR:
   return;
 default:
   break;
 }
    case '<':
    case '1':
    case '2':
    case 'r':
      ((t)->common.side_effects_flag) = ((t)->common.volatile_flag);
      for (i = 0; i < fro; ++i)
 {
   tree op = ((t)->exp.operands[i]);
   if (op && ((op)->common.side_effects_flag))
     ((t)->common.side_effects_flag) = 1;
 }
      break;
   }
}
alias_var
alias_var_new_with_aterm (tree decl, struct aterm_ *term)
{
  alias_var ret = ggc_alloc_stat (sizeof (struct alias_var_aterm) );
  ((ret)->common.kind) = ATERM_AVAR;
  ((ret)->common.decl) = decl;
  ((ret)->aterm.term) = term;
  return ret;
}
extern unsigned char hook_bool_void_false (void);
extern unsigned char hook_bool_bool_false (unsigned char);
extern unsigned char hook_bool_tree_false (tree);
extern unsigned char hook_bool_tree_true (tree);
extern unsigned char hook_bool_tree_hwi_hwi_tree_false (tree, long, long,
     tree);
extern unsigned char hook_bool_tree_hwi_hwi_tree_true (tree, long, long,
           tree);
extern unsigned char hook_bool_rtx_false (rtx);
extern unsigned char hook_bool_uintp_uintp_false (unsigned int *, unsigned int *);
extern unsigned char hook_bool_rtx_int_int_intp_false (rtx, int, int, int *);
extern unsigned char hook_bool_constcharptr_size_t_false (const char *, size_t);
extern void hook_void_void (void);
extern void hook_void_int (int);
extern void hook_void_charptr (char *);
extern void hook_void_FILEptr_constcharptr (FILE *, const char *);
extern void hook_void_tree (tree);
extern void hook_void_tree_treeptr (tree, tree *);
extern int hook_int_tree_tree_1 (tree, tree);
extern int hook_int_rtx_0 (rtx);
extern int hook_int_size_t_constcharptr_int_0 (size_t, const char *, int);
extern int hook_int_void_no_regs (void);
extern int hook_int_void_1 (void);
extern unsigned hook_uint_uint_constcharptrptr_0 (unsigned, const char **);
extern unsigned char default_can_output_mi_thunk_no_vcall (tree, long,
        long, tree);
extern unsigned char hook_bool_tree_tree_false (tree, tree);
extern rtx hook_rtx_rtx_identity (rtx);
extern rtx hook_rtx_rtx_null (rtx);
extern rtx hook_rtx_tree_int_null (tree, int);
extern tree hook_tree_tree_identity (tree a);
extern const char *hook_constcharptr_tree_null (tree);
struct diagnostic_context;
extern long hook_get_alias_set_0 (tree);
extern void lhd_do_nothing (void);
extern void lhd_do_nothing_t (tree);
extern void lhd_do_nothing_i (int);
extern void lhd_do_nothing_f (struct function *);
extern unsigned char lhd_post_options (const char **);
extern long lhd_get_alias_set (tree);
extern tree lhd_return_tree (tree);
extern tree lhd_return_null_tree_v (void);
extern tree lhd_return_null_tree (tree);
extern tree lhd_do_nothing_iii_return_null_tree (int, int, int);
extern int lhd_safe_from_p (rtx, tree);
extern int lhd_staticp (tree);
extern int lhd_unsafe_for_reeval (tree);
extern void lhd_clear_binding_stack (void);
extern void lhd_print_tree_nothing (FILE *, tree, int);
extern const char *lhd_decl_printable_name (tree, int);
extern int lhd_types_compatible_p (tree, tree);
extern rtx lhd_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
extern int lhd_expand_decl (tree);
extern void lhd_print_error_function (struct diagnostic_context *,
          const char *);
extern void lhd_set_decl_assembler_name (tree);
extern unsigned char lhd_can_use_bit_fields_p (void);
extern unsigned char lhd_warn_unused_global_decl (tree);
extern void lhd_incomplete_type_error (tree, tree);
extern tree lhd_type_promotes_to (tree);
extern void lhd_register_builtin_type (tree, const char *);
extern unsigned char lhd_decl_ok_for_sibcall (tree);
extern tree lhd_expr_size (tree);
extern unsigned char lhd_decl_uninit (tree);
extern tree lhd_get_callee_fndecl (tree);
extern size_t lhd_tree_size (enum tree_code);
extern tree lhd_tree_inlining_walk_subtrees (tree *, int *, walk_tree_fn,
          void *, void *);
extern int lhd_tree_inlining_cannot_inline_tree_fn (tree *);
extern int lhd_tree_inlining_disregard_inline_limits (tree);
extern tree lhd_tree_inlining_add_pending_fn_decls (void *, tree);
extern int lhd_tree_inlining_auto_var_in_fn_p (tree, tree);
extern tree lhd_tree_inlining_copy_res_decl_for_inlining (tree, tree, tree,
         void *, int *, tree);
extern int lhd_tree_inlining_anon_aggr_type_p (tree);
extern int lhd_tree_inlining_start_inlining (tree);
extern void lhd_tree_inlining_end_inlining (tree);
extern tree lhd_tree_inlining_convert_parm_for_inlining (tree, tree, tree, int);
extern void lhd_initialize_diagnostics (struct diagnostic_context *);
extern tree lhd_callgraph_analyze_expr (tree *, int *, tree);
extern int lhd_gimplify_expr (tree *, tree *, tree *);
extern unsigned char lhd_tree_dump_dump_tree (void *, tree);
extern int lhd_tree_dump_type_quals (tree);
extern tree lhd_make_node (enum tree_code);
enum real_value_class {
  rvc_zero,
  rvc_normal,
  rvc_inf,
  rvc_nan
};
struct real_value
{
  unsigned int class : 2;
  unsigned int sign : 1;
  unsigned int signalling : 1;
  unsigned int canonical : 1;
  unsigned int uexp : (32 - 5);
  unsigned long sig[((128 + (8 * 4)) / (8 * 4))];
};
extern char test_real_width
  [sizeof(struct real_value) <= (((128 + (8 * 4)) + 32)/(8 * 4) + (((128 + (8 * 4)) + 32)%(8 * 4) ? 1 : 0))*sizeof(long) ? 1 : -1];
struct real_format
{
  void (*encode) (const struct real_format *, long *,
    const struct real_value *);
  void (*decode) (const struct real_format *, struct real_value *,
    const long *);
  int b;
  int log2_b;
  int p;
  int pnan;
  int emin;
  int emax;
  int signbit;
  unsigned char has_nans;
  unsigned char has_inf;
  unsigned char has_denorm;
  unsigned char has_signed_zero;
  unsigned char qnan_msb_set;
};
extern const struct real_format *
  real_format_for_mode[MAX_MODE_FLOAT - MIN_MODE_FLOAT + 1];
extern void real_arithmetic (struct real_value *, int, const struct real_value *,
        const struct real_value *);
extern unsigned char real_compare (int, const struct real_value *, const struct real_value *);
extern unsigned char real_isinf (const struct real_value *);
extern unsigned char real_isnan (const struct real_value *);
extern unsigned char real_isneg (const struct real_value *);
extern unsigned char real_isnegzero (const struct real_value *);
extern unsigned char real_identical (const struct real_value *, const struct real_value *);
extern void real_convert (struct real_value *, enum machine_mode,
     const struct real_value *);
extern unsigned char exact_real_truncate (enum machine_mode, const struct real_value *);
extern void real_to_decimal (char *, const struct real_value *, size_t,
        size_t, int);
extern void real_to_hexadecimal (char *, const struct real_value *,
     size_t, size_t, int);
extern long real_to_integer (const struct real_value *);
extern void real_to_integer2 (long *, long *,
         const struct real_value *);
extern void real_from_string (struct real_value *, const char *);
extern void real_from_integer (struct real_value *, enum machine_mode,
          unsigned long, long, int);
extern long real_to_target_fmt (long *, const struct real_value *,
    const struct real_format *);
extern long real_to_target (long *, const struct real_value *, enum machine_mode);
extern void real_from_target_fmt (struct real_value *, const long *,
      const struct real_format *);
extern void real_from_target (struct real_value *, const long *,
         enum machine_mode);
extern void real_inf (struct real_value *);
extern unsigned char real_nan (struct real_value *, const char *, int, enum machine_mode);
extern void real_maxval (struct real_value *, int, enum machine_mode);
extern void real_2expN (struct real_value *, int);
extern unsigned int real_hash (const struct real_value *);
extern const struct real_format ieee_single_format;
extern const struct real_format mips_single_format;
extern const struct real_format ieee_double_format;
extern const struct real_format mips_double_format;
extern const struct real_format ieee_extended_motorola_format;
extern const struct real_format ieee_extended_intel_96_format;
extern const struct real_format ieee_extended_intel_96_round_53_format;
extern const struct real_format ieee_extended_intel_128_format;
extern const struct real_format ibm_extended_format;
extern const struct real_format mips_extended_format;
extern const struct real_format ieee_quad_format;
extern const struct real_format mips_quad_format;
extern const struct real_format vax_f_format;
extern const struct real_format vax_d_format;
extern const struct real_format vax_g_format;
extern const struct real_format i370_single_format;
extern const struct real_format i370_double_format;
extern const struct real_format c4x_single_format;
extern const struct real_format c4x_extended_format;
extern const struct real_format real_internal_format;
extern struct real_value real_value_truncate (enum machine_mode,
         struct real_value);
extern struct real_value real_arithmetic2 (int, const struct real_value *,
      const struct real_value *);
extern int significand_size (enum machine_mode);
extern struct real_value real_from_string2 (const char *, enum machine_mode);
extern int real_exponent (const struct real_value *);
extern void real_ldexp (struct real_value *, const struct real_value *, int);
extern struct real_value dconst0;
extern struct real_value dconst1;
extern struct real_value dconst2;
extern struct real_value dconst3;
extern struct real_value dconst10;
extern struct real_value dconstm1;
extern struct real_value dconstm2;
extern struct real_value dconsthalf;
extern struct real_value dconstthird;
extern struct real_value dconstpi;
extern struct real_value dconste;
struct real_value real_value_from_int_cst (tree, tree);
extern rtx const_double_from_real_value (struct real_value, enum machine_mode);
extern unsigned char exact_real_inverse (enum machine_mode, struct real_value *);
extern tree build_real (tree, struct real_value);
extern unsigned char real_sqrt (struct real_value *, enum machine_mode,
         const struct real_value *);
extern unsigned char real_powi (struct real_value *, enum machine_mode,
         const struct real_value *, long);
extern void real_trunc (struct real_value *, enum machine_mode,
   const struct real_value *);
extern void real_floor (struct real_value *, enum machine_mode,
   const struct real_value *);
extern void real_ceil (struct real_value *, enum machine_mode,
         const struct real_value *);
extern void real_round (struct real_value *, enum machine_mode,
   const struct real_value *);
extern void real_copysign (struct real_value *, const struct real_value *);
struct gcc_target
{
  struct asm_out
  {
    const char *open_paren, *close_paren;
    const char *byte_op;
    struct asm_int_op
    {
      const char *hi;
      const char *si;
      const char *di;
      const char *ti;
    } aligned_op, unaligned_op;
    unsigned char (* integer) (rtx x, unsigned int size, int aligned_p);
    void (* globalize_label) (FILE *, const char *);
    void (* unwind_label) (FILE *, tree, int, int);
    void (* internal_label) (FILE *, const char *, unsigned long);
    void (* visibility) (tree, int);
    void (* function_prologue) (FILE *, long);
    void (* function_end_prologue) (FILE *);
    void (* function_begin_epilogue) (FILE *);
    void (* function_epilogue) (FILE *, long);
    void (* named_section) (const char *, unsigned int);
    void (* exception_section) (void);
    void (* eh_frame_section) (void);
    void (* select_section) (tree, int, unsigned long);
    void (* select_rtx_section) (enum machine_mode, rtx,
     unsigned long);
    void (* unique_section) (tree, int);
    void (* constructor) (rtx, int);
    void (* destructor) (rtx, int);
    void (* output_mi_thunk) (FILE *file, tree thunk_decl,
         long delta, long vcall_offset,
         tree function_decl);
    unsigned char (* can_output_mi_thunk) (tree thunk_decl, long delta,
      long vcall_offset,
      tree function_decl);
    void (*file_start) (void);
    void (*file_end) (void);
    void (*external_libcall) (rtx);
  } asm_out;
  struct sched
  {
    int (* adjust_cost) (rtx insn, rtx link, rtx def_insn, int cost);
    int (* adjust_priority) (rtx, int);
    int (* issue_rate) (void);
    int (* variable_issue) (FILE *, int, rtx, int);
    void (* md_init) (FILE *, int, int);
    void (* md_finish) (FILE *, int);
    void (* md_init_global) (FILE *, int, int);
    void (* md_finish_global) (FILE *, int);
    int (* reorder) (FILE *, int, rtx *, int *, int);
    int (* reorder2) (FILE *, int, rtx *, int *, int);
    void (* dependencies_evaluation_hook) (rtx, rtx);
    int (* use_dfa_pipeline_interface) (void);
    void (* init_dfa_pre_cycle_insn) (void);
    rtx (* dfa_pre_cycle_insn) (void);
    void (* init_dfa_post_cycle_insn) (void);
    rtx (* dfa_post_cycle_insn) (void);
    int (* first_cycle_multipass_dfa_lookahead) (void);
    int (* first_cycle_multipass_dfa_lookahead_guard) (rtx);
    int (* dfa_new_cycle) (FILE *, int, rtx, int, int, int *);
    void (* init_dfa_bubbles) (void);
    rtx (* dfa_bubble) (int);
    unsigned char (* is_costly_dependence) (rtx, rtx, rtx, int, int);
  } sched;
  tree (* merge_decl_attributes) (tree, tree);
  tree (* merge_type_attributes) (tree, tree);
  const struct attribute_spec *attribute_table;
  int (* comp_type_attributes) (tree type1, tree type2);
  void (* set_default_type_attributes) (tree type);
  void (* insert_attributes) (tree decl, tree *attributes);
  unsigned char (* function_attribute_inlinable_p) (tree fndecl);
  unsigned char (* ms_bitfield_layout_p) (tree record_type);
  unsigned char (* align_anon_bitfield) (void);
  void (* init_builtins) (void);
  rtx (* expand_builtin) (tree exp, rtx target, rtx subtarget,
     enum machine_mode mode, int ignore);
  const char * (* mangle_fundamental_type) (tree type);
  void (* init_libfuncs) (void);
  unsigned int (* section_type_flags) (tree, const char *, int);
  unsigned char (* cannot_modify_jumps_p) (void);
  int (* branch_target_register_class) (void);
  unsigned char (* branch_target_register_callee_saved) (unsigned char after_pe_gen);
  unsigned char (* cannot_force_const_mem) (rtx);
  unsigned char (* cannot_copy_insn_p) (rtx);
  rtx (* delegitimize_address) (rtx);
  unsigned char (*function_ok_for_sibcall) (tree decl, tree exp);
  unsigned char (* in_small_data_p) (tree);
  unsigned char (* binds_local_p) (tree);
  void (* encode_section_info) (tree, rtx, int);
  const char * (* strip_name_encoding) (const char *);
  unsigned char (* valid_pointer_mode) (enum machine_mode mode);
  unsigned char (* vector_opaque_p) (tree);
  unsigned char (* rtx_costs) (rtx x, int code, int outer_code, int *total);
  int (* address_cost) (rtx x);
  rtx (* dwarf_register_span) (rtx);
  unsigned char (* fixed_condition_code_regs) (unsigned int *, unsigned int *);
  enum machine_mode (* cc_modes_compatible) (enum machine_mode,
          enum machine_mode);
  void (* machine_dependent_reorg) (void);
  tree (* build_builtin_va_list) (void);
  void * (* get_pch_validity) (size_t *);
  const char * (* pch_valid_p) (const void *, size_t);
  unsigned char (* default_short_enums) (void);
  rtx (* builtin_setjmp_frame_value) (void);
  tree (* md_asm_clobbers) (tree);
  struct calls {
    unsigned char (*promote_function_args) (tree fntype);
    unsigned char (*promote_function_return) (tree fntype);
    unsigned char (*promote_prototypes) (tree fntype);
    rtx (*struct_value_rtx) (tree fndecl, int incoming);
    unsigned char (*return_in_memory) (tree type, tree fndecl);
    unsigned char (*return_in_msb) (tree type);
    rtx (*expand_builtin_saveregs) (void);
    void (*setup_incoming_varargs) (CUMULATIVE_ARGS *ca, enum machine_mode mode,
        tree type, int *pretend_arg_size,
        int second_time);
    unsigned char (*strict_argument_naming) (CUMULATIVE_ARGS *ca);
    unsigned char (*pretend_outgoing_varargs_named) (CUMULATIVE_ARGS *ca);
    unsigned char (* split_complex_arg) (tree type);
    tree (* gimplify_va_arg_expr) (tree valist, tree type, tree *pre_p,
       tree *post_p);
  } calls;
  struct cxx {
    tree (*guard_type) (void);
    unsigned char (*guard_mask_bit) (void);
    tree (*get_cookie_size) (tree);
    unsigned char (*cookie_has_size) (void);
    int (*import_export_class) (tree, int);
  } cxx;
  unsigned char have_named_sections;
  unsigned char have_ctors_dtors;
  unsigned char have_tls;
  unsigned char have_srodata_section;
  unsigned char terminate_dw2_eh_frame_info;
  unsigned char file_start_app_off;
  unsigned char file_start_file_directive;
  unsigned char handle_pragma_redefine_extname;
  unsigned char handle_pragma_extern_prefix;
  unsigned char late_rtl_prologue_epilogue;
};
extern struct gcc_target targetm;
static struct gimplify_ctx
{
  tree current_bind_expr;
  unsigned char save_stack;
  tree temps;
  tree conditional_cleanups;
  int conditions;
  tree exit_label;
  tree return_temp;
  varray_type case_labels;
  htab_t temp_htab;
} *gimplify_ctxp;
typedef struct gimple_temp_hash_elt
{
  tree val;
  tree temp;
} elt_t;
static enum gimplify_status gimplify_modify_expr_rhs (tree *, tree *, tree *,
            tree *, tree *, unsigned char);
static enum gimplify_status gimplify_compound_expr (tree *, tree *, unsigned char);
static hashval_t
gimple_tree_hash (const void *p)
{
  tree t = ((const elt_t *) p)->val;
  return iterative_hash_expr (t, 0);
}
static int
gimple_tree_eq (const void *p1, const void *p2)
{
  tree t1 = ((const elt_t *) p1)->val;
  tree t2 = ((const elt_t *) p2)->val;
  enum tree_code code = ((enum tree_code) (t1)->common.code);
  if (((enum tree_code) (t2)->common.code) != code
      || ((t1)->common.type) != ((t2)->common.type))
    return 0;
  if (!operand_equal_p (t1, t2, 0))
    return 0;
  if (gimple_tree_hash (p1) != gimple_tree_hash (p2))
    fancy_abort ("gcc.c", 111523, "?");
  return 1;
}
void
push_gimplify_context (void)
{
  if (gimplify_ctxp)
    fancy_abort ("gcc.c", 111534, "?");
  gimplify_ctxp
    = (struct gimplify_ctx *) xcalloc (1, sizeof (struct gimplify_ctx));
  gimplify_ctxp->temp_htab
    = htab_create (1000, gimple_tree_hash, gimple_tree_eq, free);
}
void
pop_gimplify_context (tree body)
{
  if (!gimplify_ctxp || gimplify_ctxp->current_bind_expr)
    fancy_abort ("gcc.c", 111549, "?");
  if (body)
    declare_tmp_vars (gimplify_ctxp->temps, body);
  else
    record_vars (gimplify_ctxp->temps);
  htab_delete (gimplify_ctxp->temp_htab);
  free (gimplify_ctxp);
  gimplify_ctxp = ((void *)0);
}
void
gimple_push_bind_expr (tree bind)
{
  ((bind)->common.chain) = gimplify_ctxp->current_bind_expr;
  gimplify_ctxp->current_bind_expr = bind;
}
void
gimple_pop_bind_expr (void)
{
  gimplify_ctxp->current_bind_expr
    = ((gimplify_ctxp->current_bind_expr)->common.chain);
}
tree
gimple_current_bind_expr (void)
{
  return gimplify_ctxp->current_bind_expr;
}
static unsigned char
gimple_conditional_context (void)
{
  return gimplify_ctxp->conditions > 0;
}
static void
gimple_push_condition (void)
{
  ++(gimplify_ctxp->conditions);
}
static void
gimple_pop_condition (tree *pre_p)
{
  int conds = --(gimplify_ctxp->conditions);
  if (conds == 0)
    {
      append_to_statement_list (gimplify_ctxp->conditional_cleanups, pre_p);
      gimplify_ctxp->conditional_cleanups = (tree) ((void *)0);
    }
  else if (conds < 0)
    fancy_abort ("gcc.c", 111618, "?");
}
static void
append_to_statement_list_1 (tree t, tree *list_p, unsigned char side_effects)
{
  tree list = *list_p;
  tree_stmt_iterator i;
  if (!side_effects)
    return;
  if (!list)
    {
      if (t && ((enum tree_code) (t)->common.code) == STATEMENT_LIST)
 {
   *list_p = t;
   return;
 }
      *list_p = list = alloc_stmt_list ();
    }
  i = tsi_last (list);
  tsi_link_after (&i, t, TSI_CONTINUE_LINKING);
}
void
append_to_statement_list (tree t, tree *list_p)
{
  append_to_statement_list_1 (t, list_p, t ? ((t)->common.side_effects_flag) : 0);
}
void
append_to_statement_list_force (tree t, tree *list_p)
{
  append_to_statement_list_1 (t, list_p, t != ((void *)0));
}
void
gimplify_and_add (tree t, tree *list_p)
{
  gimplify_stmt (&t);
  append_to_statement_list (t, list_p);
}
static void
remove_suffix (char *name, int len)
{
  int i;
  for (i = 2; i < 8 && len > i; i++)
    {
      if (name[len - i] == '.')
 {
   name[len - i] = '\0';
   break;
 }
    }
}
tree
create_artificial_label (void)
{
  tree lab = build_decl_stat (LABEL_DECL,(tree) ((void *)0),global_trees[TI_VOID_TYPE] );
  ((lab)->decl.artificial_flag) = 1;
  ((lab)->decl.context) = current_function_decl;
  return lab;
}
static unsigned int tmp_var_id_num;
tree
create_tmp_var_name (const char *prefix)
{
  char *tmp_name;
  if (prefix)
    {
      char *preftmp = (libiberty_optr = (prefix), libiberty_len = strlen (libiberty_optr) + 1, libiberty_nptr = C_alloca(libiberty_len), (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len));
      remove_suffix (preftmp, strlen (preftmp));
      prefix = preftmp;
    }
  do { const char *const name_ = (prefix ? prefix : "T"); char *const output_ = (tmp_name) = C_alloca(strlen (name_) + 32); sprintf (output_, "%s.%lu", name_, (unsigned long)(tmp_var_id_num++)); } while (0);
  return get_identifier (tmp_name);
}
tree
create_tmp_var_raw (tree type, const char *prefix)
{
  tree tmp_var;
  tree new_type;
  new_type = build_qualified_type ((type), ((0) ? 0x1 : 0) | ((0) ? 0x2 : 0));
  ((new_type)->type.attributes) = ((type)->type.attributes);
  tmp_var = build_decl_stat (VAR_DECL,create_tmp_var_name (prefix),type );
  ((tmp_var)->decl.artificial_flag) = 1;
  ((tmp_var)->decl.ignored_flag) = 1;
  ((tmp_var)->common.readonly_flag) = 0;
  ((tmp_var)->decl.external_flag) = 0;
  ((tmp_var)->common.static_flag) = 0;
  ((tmp_var)->common.used_flag) = 1;
  return tmp_var;
}
tree
create_tmp_var (tree type, const char *prefix)
{
  tree tmp_var;
  tmp_var = create_tmp_var_raw (type, prefix);
  gimple_add_tmp_var (tmp_var);
  return tmp_var;
}
const char *
get_name (tree t)
{
  tree stripped_decl;
  stripped_decl = t;
  while ((((enum tree_code) (stripped_decl)->common.code) == NOP_EXPR || ((enum tree_code) (stripped_decl)->common.code) == CONVERT_EXPR || ((enum tree_code) (stripped_decl)->common.code) == NON_LVALUE_EXPR) && ((stripped_decl)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((stripped_decl)->common.type))->type.mode) == ((((((stripped_decl)->exp.operands[0]))->common.type))->type.mode))) (stripped_decl) = ((stripped_decl)->exp.operands[0]);
  if ((tree_code_type[(int) (((enum tree_code) (stripped_decl)->common.code))] == 'd') && ((stripped_decl)->decl.name))
    return ((const char *) (((stripped_decl)->decl.name))->identifier.id.str);
  else
    {
      switch (((enum tree_code) (stripped_decl)->common.code))
 {
 case ADDR_EXPR:
   return get_name (((stripped_decl)->exp.operands[0]));
   break;
 default:
   return ((void *)0);
 }
    }
}
static tree
create_tmp_from_val (tree val)
{
  return create_tmp_var (((val)->common.type), get_name (val));
}
static tree
lookup_tmp_var (tree val, unsigned char is_formal)
{
  if (!is_formal || ((val)->common.side_effects_flag))
    return create_tmp_from_val (val);
  else
    {
      elt_t elt, *elt_p;
      void **slot;
      elt.val = val;
      slot = htab_find_slot (gimplify_ctxp->temp_htab, (void *)&elt, INSERT);
      if (*slot == ((void *)0))
 {
   elt_p = xmalloc (sizeof (*elt_p));
   elt_p->val = val;
   elt_p->temp = create_tmp_from_val (val);
   ((elt_p->temp)->common.readonly_flag) = 1;
   *slot = (void *) elt_p;
 }
      else
 elt_p = (elt_t *) *slot;
      return elt_p->temp;
    }
}
static tree
internal_get_tmp_var (tree val, tree *pre_p, tree *post_p, unsigned char is_formal)
{
  tree t, mod;
  char class;
  gimplify_expr (&val, pre_p, post_p, is_gimple_rhs, fb_rvalue);
  t = lookup_tmp_var (val, is_formal);
  mod = build (MODIFY_EXPR, ((t)->common.type), t, val);
  class = tree_code_type[(int) (((enum tree_code) (val)->common.code))];
  if ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (val)->common.code))])) != 0) ? (val)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    ((mod)->exp.locus = (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (val)->common.code))])) != 0) ? (val)->exp.locus : (location_t *)((void *)0))));
  else
    annotate_with_locus (mod, input_location);
  gimplify_and_add (mod, pre_p);
  return t;
}
tree
get_formal_tmp_var (tree val, tree *pre_p)
{
  return internal_get_tmp_var (val, pre_p, ((void *)0), 1);
}
tree
get_initialized_tmp_var (tree val, tree *pre_p, tree *post_p)
{
  return internal_get_tmp_var (val, pre_p, post_p, 0);
}
unsigned char
is_gimple_tmp_var (tree t)
{
  return (((enum tree_code) (t)->common.code) == VAR_DECL && ((t)->decl.artificial_flag)
   && !((t)->common.static_flag) && !((t)->decl.external_flag));
}
void
declare_tmp_vars (tree vars, tree scope)
{
  tree last = vars;
  if (last)
    {
      tree temps;
      while (((enum tree_code) (scope)->common.code) == COMPOUND_EXPR)
 scope = ((scope)->exp.operands[0]);
      if (((enum tree_code) (scope)->common.code) != BIND_EXPR)
 fancy_abort ("gcc.c", 111922, "?");
      temps = nreverse (last);
      ((last)->common.chain) = ((((scope))->exp.operands[0]));
      ((((scope))->exp.operands[0])) = temps;
    }
}
void
gimple_add_tmp_var (tree tmp)
{
  if (((tmp)->common.chain) || ((tmp)->decl.seen_in_bind_expr))
    fancy_abort ("gcc.c", 111934, "?");
  ((tmp)->decl.context) = current_function_decl;
  ((tmp)->decl.seen_in_bind_expr) = 1;
  if (gimplify_ctxp)
    {
      ((tmp)->common.chain) = gimplify_ctxp->temps;
      gimplify_ctxp->temps = tmp;
    }
  else if (cfun)
    record_vars (tmp);
  else
    declare_tmp_vars (tmp, ((current_function_decl)->decl.saved_tree));
}
static unsigned char
should_carry_locus_p (tree stmt)
{
  if (((enum tree_code) (stmt)->common.code) == LABEL_EXPR)
    return 0;
  if (!((stmt)->common.side_effects_flag))
    return 0;
  return 1;
}
static void
annotate_one_with_locus (tree t, location_t locus)
{
  if ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (t)->common.code))])) != 0)
      && ! (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (t)->common.code))])) != 0) ? (t)->exp.locus : (location_t *)((void *)0)) != ((void *)0))
      && should_carry_locus_p (t))
    annotate_with_locus (t, locus);
}
void
annotate_all_with_locus (tree *stmt_p, location_t locus)
{
  tree_stmt_iterator i;
  if (!*stmt_p)
    return;
  for (i = tsi_start (*stmt_p); !tsi_end_p (i); tsi_next (&i))
    {
      tree t = tsi_stmt (i);
      annotate_one_with_locus (t, locus);
    }
}
static tree
mostly_copy_tree_r (tree *tp, int *walk_subtrees, void *data)
{
  enum tree_code code = ((enum tree_code) (*tp)->common.code);
  if (tree_code_type[(int) (code)] == 't'
      || tree_code_type[(int) (code)] == 'd'
      || tree_code_type[(int) (code)] == 'c'
      || code == SAVE_EXPR || code == TARGET_EXPR
      || code == BLOCK)
    *walk_subtrees = 0;
  else if (code == BIND_EXPR)
    fancy_abort ("gcc.c", 112021, "?");
  else
    copy_tree_r (tp, walk_subtrees, data);
  return (tree) ((void *)0);
}
static tree
mark_decls_volatile_r (tree *tp, int *walk_subtrees ,
         void *data )
{
  if ((((enum tree_code) (*tp)->common.code) == VAR_DECL || ((enum tree_code) (*tp)->common.code) == PARM_DECL || ((enum tree_code) (*tp)->common.code) == RESULT_DECL || (((enum tree_code) (*tp)->common.code) == SSA_NAME && (((enum tree_code) ((*tp)->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((*tp)->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((*tp)->ssa_name.var)->common.code) == RESULT_DECL))))
    ((*tp)->common.volatile_flag) = 1;
  return (tree) ((void *)0);
}
static tree
copy_if_shared_r (tree *tp, int *walk_subtrees ,
    void *data )
{
  tree t = *tp;
  enum tree_code code = ((enum tree_code) (t)->common.code);
  if (tree_code_type[(int) (code)] == 't'
      || tree_code_type[(int) (code)] == 'd'
      || tree_code_type[(int) (code)] == 'c')
    {
      if (((t)->common.visited))
 *walk_subtrees = 0;
      else
 ((t)->common.visited) = 1;
    }
  else if (((t)->common.visited))
    {
      walk_tree (tp, mostly_copy_tree_r, ((void *)0), ((void *)0));
      *walk_subtrees = 0;
    }
  else
    {
      ((t)->common.visited) = 1;
      if (((enum tree_code) (*tp)->common.code) == VA_ARG_EXPR
   && targetm.calls.gimplify_va_arg_expr == ((void *)0))
 {
   walk_tree (&((*tp)->exp.operands[0]), mark_decls_volatile_r,
       ((void *)0), ((void *)0));
 }
    }
  return (tree) ((void *)0);
}
static tree
unmark_visited_r (tree *tp, int *walk_subtrees ,
    void *data )
{
  if (((*tp)->common.visited))
    ((*tp)->common.visited) = 0;
  else
    *walk_subtrees = 0;
  return (tree) ((void *)0);
}
static void
unshare_body (tree *body_p, tree fndecl)
{
  struct cgraph_node *cgn = cgraph_node (fndecl);
  walk_tree (body_p, copy_if_shared_r, ((void *)0), ((void *)0));
  if (body_p == &((fndecl)->decl.saved_tree))
    for (cgn = cgn->nested; cgn; cgn = cgn->next_nested)
      unshare_body (&((cgn->decl)->decl.saved_tree), cgn->decl);
}
static void
unvisit_body (tree *body_p, tree fndecl)
{
  struct cgraph_node *cgn = cgraph_node (fndecl);
  walk_tree (body_p, unmark_visited_r, ((void *)0), ((void *)0));
  if (body_p == &((fndecl)->decl.saved_tree))
    for (cgn = cgn->nested; cgn; cgn = cgn->next_nested)
      unvisit_body (&((cgn->decl)->decl.saved_tree), cgn->decl);
}
void
unshare_all_trees (tree t)
{
  walk_tree (&t, copy_if_shared_r, ((void *)0), ((void *)0));
  walk_tree (&t, unmark_visited_r, ((void *)0), ((void *)0));
}
tree
unshare_expr (tree expr)
{
  walk_tree (&expr, mostly_copy_tree_r, ((void *)0), ((void *)0));
  return expr;
}
tree
gimple_build_eh_filter (tree body, tree allowed, tree failure)
{
  tree t;
  t = build (EH_FILTER_EXPR, global_trees[TI_VOID_TYPE], allowed, (tree) ((void *)0));
  append_to_statement_list (failure, &(((t))->exp.operands[1]));
  t = build (TRY_CATCH_EXPR, global_trees[TI_VOID_TYPE], (tree) ((void *)0), t);
  append_to_statement_list (body, &((t)->exp.operands[0]));
  return t;
}
tree
voidify_wrapper_expr (tree wrapper, tree temp)
{
  if (!(((enum tree_code) (((wrapper)->common.type))->common.code) == VOID_TYPE))
    {
      tree *p, sub = wrapper;
    restart:
      switch (((enum tree_code) (sub)->common.code))
 {
 case BIND_EXPR:
   p = &((((sub))->exp.operands[1]));
   break;
 default:
   p = &((sub)->exp.operands[0]);
   break;
 }
      if (((enum tree_code) (*p)->common.code) == STATEMENT_LIST)
 {
   tree_stmt_iterator i = tsi_last (*p);
   p = tsi_end_p (i) ? ((void *)0) : tsi_stmt_ptr (i);
 }
      else
 {
   for (; ((enum tree_code) (*p)->common.code) == COMPOUND_EXPR; p = &((*p)->exp.operands[1]))
     {
       ((*p)->common.side_effects_flag) = 1;
       ((*p)->common.type) = global_trees[TI_VOID_TYPE];
     }
 }
      if (p == ((void *)0) || (((enum tree_code) (*p)->common.code) == NOP_EXPR && (((enum tree_code) (((*p)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((*p)->exp.operands[0]))))
 ;
      else if (((enum tree_code) (*p)->common.code) == TRY_FINALLY_EXPR
        || ((enum tree_code) (*p)->common.code) == TRY_CATCH_EXPR)
 {
   sub = *p;
   goto restart;
 }
      else if (((enum tree_code) (*p)->common.code) == INIT_EXPR
        || ((enum tree_code) (*p)->common.code) == TARGET_EXPR)
 temp = ((*p)->exp.operands[0]);
      else if (((enum tree_code) (*p)->common.code) == INDIRECT_REF)
 {
   tree ptr = ((*p)->exp.operands[0]);
   temp = create_tmp_var (((ptr)->common.type), "retval");
   *p = build (MODIFY_EXPR, ((ptr)->common.type), temp, ptr);
   temp = build1_stat (INDIRECT_REF,((((temp)->common.type))->common.type),temp );
   ((wrapper)->common.side_effects_flag) = 1;
 }
      else
 {
   if (!temp)
     temp = create_tmp_var (((wrapper)->common.type), "retval");
   *p = build (MODIFY_EXPR, ((temp)->common.type), temp, *p);
   ((wrapper)->common.side_effects_flag) = 1;
 }
      ((wrapper)->common.type) = global_trees[TI_VOID_TYPE];
      return temp;
    }
  return (tree) ((void *)0);
}
static void
build_stack_save_restore (tree *save, tree *restore)
{
  tree save_call, tmp_var;
  save_call =
      build_function_call_expr (implicit_built_in_decls[BUILT_IN_STACK_SAVE],
    (tree) ((void *)0));
  tmp_var = create_tmp_var (global_trees[TI_PTR_TYPE], "saved_stack");
  *save = build (MODIFY_EXPR, global_trees[TI_PTR_TYPE], tmp_var, save_call);
  *restore =
    build_function_call_expr (implicit_built_in_decls[BUILT_IN_STACK_RESTORE],
         tree_cons_stat ((tree) ((void *)0),tmp_var,(tree) ((void *)0) ));
}
static enum gimplify_status
gimplify_bind_expr (tree *expr_p, tree temp, tree *pre_p)
{
  tree bind_expr = *expr_p;
  unsigned char old_save_stack = gimplify_ctxp->save_stack;
  tree t;
  temp = voidify_wrapper_expr (bind_expr, temp);
  for (t = ((((bind_expr))->exp.operands[0])); t ; t = ((t)->common.chain))
    ((t)->decl.seen_in_bind_expr) = 1;
  gimple_push_bind_expr (bind_expr);
  gimplify_ctxp->save_stack = 0;
  gimplify_to_stmt_list (&((((bind_expr))->exp.operands[1])));
  if (gimplify_ctxp->save_stack)
    {
      tree stack_save, stack_restore;
      build_stack_save_restore (&stack_save, &stack_restore);
      t = build (TRY_FINALLY_EXPR, global_trees[TI_VOID_TYPE],
   ((((bind_expr))->exp.operands[1])), (tree) ((void *)0));
      append_to_statement_list (stack_restore, &((t)->exp.operands[1]));
      ((((bind_expr))->exp.operands[1])) = (tree) ((void *)0);
      append_to_statement_list (stack_save, &((((bind_expr))->exp.operands[1])));
      append_to_statement_list (t, &((((bind_expr))->exp.operands[1])));
    }
  gimplify_ctxp->save_stack = old_save_stack;
  gimple_pop_bind_expr ();
  if (temp)
    {
      *expr_p = temp;
      append_to_statement_list (bind_expr, pre_p);
      return GS_OK;
    }
  else
    return GS_ALL_DONE;
}
static enum gimplify_status
gimplify_return_expr (tree stmt, tree *pre_p)
{
  tree ret_expr = ((stmt)->exp.operands[0]);
  tree result_decl, result;
  if (!ret_expr || ((enum tree_code) (ret_expr)->common.code) == RESULT_DECL)
    return GS_ALL_DONE;
  if (ret_expr == global_trees[TI_ERROR_MARK])
    return GS_ERROR;
  if ((((enum tree_code) (((((current_function_decl)->common.type))->common.type))->common.code) == VOID_TYPE))
    result_decl = (tree) ((void *)0);
  else
    {
      result_decl = ((ret_expr)->exp.operands[0]);
    }
  if (!result_decl
      || aggregate_value_p (result_decl, ((current_function_decl)->common.type)))
    result = result_decl;
  else if (gimplify_ctxp->return_temp)
    result = gimplify_ctxp->return_temp;
  else
    {
      result = create_tmp_var (((result_decl)->common.type), ((void *)0));
      ((result)->common.nowarning_flag) = 1;
      gimplify_ctxp->return_temp = result;
    }
  if (result != result_decl)
    ((ret_expr)->exp.operands[0]) = result;
  gimplify_and_add (((stmt)->exp.operands[0]), pre_p);
  if (result == result_decl)
    ret_expr = result;
  else
    ret_expr = build (MODIFY_EXPR, ((result)->common.type), result_decl, result);
  ((stmt)->exp.operands[0]) = ret_expr;
  return GS_ALL_DONE;
}
static enum gimplify_status
gimplify_decl_expr (tree *stmt_p)
{
  tree stmt = *stmt_p;
  tree decl = (((stmt))->exp.operands[0]);
  *stmt_p = (tree) ((void *)0);
  if (((decl)->common.type) == global_trees[TI_ERROR_MARK])
    return GS_ERROR;
  else if (((enum tree_code) (decl)->common.code) == TYPE_DECL)
    gimplify_type_sizes (((decl)->common.type), stmt_p);
  else if (((enum tree_code) (decl)->common.code) == VAR_DECL && !((decl)->decl.external_flag))
    {
      tree init = ((decl)->decl.initial);
      if (!((((decl)->decl.size))->common.constant_flag))
 {
   tree t, args;
   gimplify_type_sizes (((decl)->common.type), stmt_p);
   gimplify_one_sizepos (&((decl)->decl.size), stmt_p);
   gimplify_one_sizepos (&((decl)->decl.size_unit), stmt_p);
   args = tree_cons_stat (((void *)0),((decl)->decl.size_unit),((void *)0) );
   t = build_fold_addr_expr (decl);
   args = tree_cons_stat (((void *)0),t,args );
   t = implicit_built_in_decls[BUILT_IN_STACK_ALLOC];
   t = build_function_call_expr (t, args);
   gimplify_and_add (t, stmt_p);
   ((decl)->decl.defer_output) = 1;
 }
      if (init && init != global_trees[TI_ERROR_MARK])
 {
   if (!((decl)->common.static_flag))
     {
       ((decl)->decl.initial) = (tree) ((void *)0);
       init = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], decl, init);
       gimplify_and_add (init, stmt_p);
     }
   else
     walk_tree (&init, force_labels_r, ((void *)0), ((void *)0));
 }
      if (((decl)->decl.artificial_flag) && ((decl)->decl.name) == (tree) ((void *)0))
 gimple_add_tmp_var (decl);
    }
  return GS_ALL_DONE;
}
static enum gimplify_status
gimplify_loop_expr (tree *expr_p, tree *pre_p)
{
  tree saved_label = gimplify_ctxp->exit_label;
  tree start_label = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],(tree) ((void *)0) );
  tree jump_stmt = build_and_jump (&(((start_label))->exp.operands[0]));
  append_to_statement_list (start_label, pre_p);
  gimplify_ctxp->exit_label = (tree) ((void *)0);
  gimplify_and_add (((*expr_p)->exp.operands[0]), pre_p);
  if (gimplify_ctxp->exit_label)
    {
      append_to_statement_list (jump_stmt, pre_p);
      *expr_p = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],gimplify_ctxp->exit_label );
    }
  else
    *expr_p = jump_stmt;
  gimplify_ctxp->exit_label = saved_label;
  return GS_ALL_DONE;
}
static int
compare_case_labels (const void *p1, const void *p2)
{
  tree case1 = *(tree *)p1;
  tree case2 = *(tree *)p2;
  return tree_int_cst_compare ((((case1))->exp.operands[0]), (((case2))->exp.operands[0]));
}
void
sort_case_labels (tree label_vec)
{
  size_t len = ((label_vec)->vec.length);
  tree default_case = ((label_vec)->vec.a[len - 1]);
  if ((((default_case))->exp.operands[0]))
    {
      size_t i;
      for (i = 0; i < len; ++i)
 {
   tree t = ((label_vec)->vec.a[i]);
   if (!(((t))->exp.operands[0]))
     {
       default_case = t;
       ((label_vec)->vec.a[i]) = ((label_vec)->vec.a[len - 1]);
       ((label_vec)->vec.a[len - 1]) = default_case;
       break;
     }
 }
    }
  qsort (&((label_vec)->vec.a[0]), len - 1, sizeof (tree),
  compare_case_labels);
}
static enum gimplify_status
gimplify_switch_expr (tree *expr_p, tree *pre_p)
{
  tree switch_expr = *expr_p;
  enum gimplify_status ret;
  ret = gimplify_expr (&(((switch_expr))->exp.operands[0]), pre_p, ((void *)0),
         is_gimple_val, fb_rvalue);
  if ((((switch_expr))->exp.operands[1]))
    {
      varray_type labels, saved_labels;
      tree label_vec, default_case = (tree) ((void *)0);
      size_t i, len;
      if ((((switch_expr))->exp.operands[2]))
 fancy_abort ("gcc.c", 112570, "?");
      saved_labels = gimplify_ctxp->case_labels;
      gimplify_ctxp->case_labels = varray_init (8, VARRAY_DATA_TREE, "case_labels");
      gimplify_to_stmt_list (&(((switch_expr))->exp.operands[1]));
      labels = gimplify_ctxp->case_labels;
      gimplify_ctxp->case_labels = saved_labels;
      len = ((labels)->elements_used);
      for (i = 0; i < len; ++i)
 {
   tree t = ((labels)->data.tree1[i]);
   if (!(((t))->exp.operands[0]))
     {
       default_case = t;
       ((labels)->data.tree1[i]) = ((labels)->data.tree1[len - 1]);
       len--;
       break;
     }
 }
      label_vec = make_tree_vec_stat (len + 1 );
      (((*expr_p))->exp.operands[2]) = label_vec;
      append_to_statement_list (switch_expr, pre_p);
      if (! default_case)
 {
   default_case = build (CASE_LABEL_EXPR, global_trees[TI_VOID_TYPE], (tree) ((void *)0),
    (tree) ((void *)0), create_artificial_label ());
   append_to_statement_list ((((switch_expr))->exp.operands[1]), pre_p);
   *expr_p = build (LABEL_EXPR, global_trees[TI_VOID_TYPE],
      (((default_case))->exp.operands[2]));
 }
      else
 *expr_p = (((switch_expr))->exp.operands[1]);
      for (i = 0; i < len; ++i)
 ((label_vec)->vec.a[i]) = ((labels)->data.tree1[i]);
      ((label_vec)->vec.a[len]) = default_case;
      sort_case_labels (label_vec);
      (((switch_expr))->exp.operands[1]) = ((void *)0);
    }
  else if (!(((switch_expr))->exp.operands[2]))
    fancy_abort ("gcc.c", 112621, "?");
  return ret;
}
static enum gimplify_status
gimplify_case_label_expr (tree *expr_p)
{
  tree expr = *expr_p;
  if (gimplify_ctxp->case_labels)
    do { if ((gimplify_ctxp->case_labels)->elements_used >= (gimplify_ctxp->case_labels)->num_elements) (((gimplify_ctxp->case_labels)) = varray_grow ((gimplify_ctxp->case_labels), 2 * (gimplify_ctxp->case_labels)->num_elements)); (gimplify_ctxp->case_labels)->data.tree1[(gimplify_ctxp->case_labels)->elements_used++] = (expr); } while (0);
  else
    fancy_abort ("gcc.c", 112633, "?");
  *expr_p = build (LABEL_EXPR, global_trees[TI_VOID_TYPE], (((expr))->exp.operands[2]));
  return GS_ALL_DONE;
}
static enum gimplify_status
gimplify_labeled_block_expr (tree *expr_p)
{
  tree body = ((*expr_p)->exp.operands[1]);
  tree label = ((*expr_p)->exp.operands[0]);
  tree t;
  ((label)->decl.context) = current_function_decl;
  t = build (LABEL_EXPR, global_trees[TI_VOID_TYPE], label);
  if (body != (tree) ((void *)0))
    t = build (COMPOUND_EXPR, global_trees[TI_VOID_TYPE], body, t);
  *expr_p = t;
  return GS_OK;
}
static enum gimplify_status
gimplify_exit_block_expr (tree *expr_p)
{
  tree labeled_block = ((*expr_p)->exp.operands[0]);
  tree label;
  label = ((labeled_block)->exp.operands[0]);
  *expr_p = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],label );
  return GS_OK;
}
tree
build_and_jump (tree *label_p)
{
  if (label_p == ((void *)0))
    return (tree) ((void *)0);
  if (*label_p == (tree) ((void *)0))
    {
      tree label = create_artificial_label ();
      *label_p = label;
    }
  return build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],*label_p );
}
static enum gimplify_status
gimplify_exit_expr (tree *expr_p)
{
  tree cond = ((*expr_p)->exp.operands[0]);
  tree expr;
  expr = build_and_jump (&gimplify_ctxp->exit_label);
  expr = build (COND_EXPR, global_trees[TI_VOID_TYPE], cond, expr, (tree) ((void *)0));
  *expr_p = expr;
  return GS_OK;
}
tree
force_labels_r (tree *tp, int *walk_subtrees, void *data )
{
  if ((tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 't'))
    *walk_subtrees = 0;
  if (((enum tree_code) (*tp)->common.code) == LABEL_DECL)
    ((*tp)->common.side_effects_flag) = 1;
  return (tree) ((void *)0);
}
static void
canonicalize_component_ref (tree *expr_p)
{
  tree expr = *expr_p;
  tree type;
  if (((enum tree_code) (expr)->common.code) != COMPONENT_REF)
    fancy_abort ("gcc.c", 112745, "?");
  if ((((enum tree_code) (((expr)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((expr)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((expr)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((expr)->common.type))->common.code) == CHAR_TYPE))
    type = ((get_unwidened (expr, (tree) ((void *)0)))->common.type);
  else
    type = ((((expr)->exp.operands[1]))->common.type);
  if (((expr)->common.type) != type)
    {
      tree old_type = ((expr)->common.type);
      ((expr)->common.type) = type;
      expr = build1_stat (NOP_EXPR,old_type,expr );
      *expr_p = expr;
    }
}
static void
canonicalize_addr_expr (tree *expr_p)
{
  tree expr = *expr_p;
  tree ctype = ((expr)->common.type);
  tree addr_expr = ((expr)->exp.operands[0]);
  tree atype = ((addr_expr)->common.type);
  tree dctype, datype, ddatype, otype, obj_expr;
  if (!(((enum tree_code) (ctype)->common.code) == POINTER_TYPE || ((enum tree_code) (ctype)->common.code) == REFERENCE_TYPE) || !(((enum tree_code) (atype)->common.code) == POINTER_TYPE || ((enum tree_code) (atype)->common.code) == REFERENCE_TYPE))
    return;
  datype = ((atype)->common.type);
  if (((enum tree_code) (datype)->common.code) != ARRAY_TYPE)
    return;
  dctype = ((ctype)->common.type);
  ddatype = ((datype)->common.type);
  if (!lang_hooks.types_compatible_p (ddatype, dctype))
    return;
  obj_expr = ((addr_expr)->exp.operands[0]);
  otype = ((obj_expr)->common.type);
  if (!lang_hooks.types_compatible_p (otype, datype))
    return;
  if (((enum tree_code) (((dctype)->type.size_unit))->common.code) != INTEGER_CST
      || !((datype)->type.values) || !((((datype)->type.values))->type.minval)
      || ((enum tree_code) (((((datype)->type.values))->type.minval))->common.code) != INTEGER_CST)
    return;
  *expr_p = build4_stat (ARRAY_REF,dctype,obj_expr,((((datype)->type.values))->type.minval),((((datype)->type.values))->type.minval),size_binop (EXACT_DIV_EXPR, ((dctype)->type.size_unit), size_int_wide ((long) (((dctype)->type.align) / 8), SIZETYPE)) )
                         ;
  *expr_p = build1_stat (ADDR_EXPR,ctype,*expr_p );
}
static enum gimplify_status
gimplify_conversion (tree *expr_p)
{
  if (((enum tree_code) (*expr_p)->common.code) == NOP_EXPR || ((enum tree_code) (*expr_p)->common.code) == CONVERT_EXPR)
    {
      while ((((enum tree_code) (((*expr_p)->exp.operands[0]))->common.code) == NOP_EXPR || ((enum tree_code) (((*expr_p)->exp.operands[0]))->common.code) == CONVERT_EXPR || ((enum tree_code) (((*expr_p)->exp.operands[0]))->common.code) == NON_LVALUE_EXPR) && ((((*expr_p)->exp.operands[0]))->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((((*expr_p)->exp.operands[0]))->common.type))->type.mode) == ((((((((*expr_p)->exp.operands[0]))->exp.operands[0]))->common.type))->type.mode)) && (((((((*expr_p)->exp.operands[0]))->common.type))->common.unsigned_flag) == ((((((((*expr_p)->exp.operands[0]))->exp.operands[0]))->common.type))->common.unsigned_flag))) (((*expr_p)->exp.operands[0])) = ((((*expr_p)->exp.operands[0]))->exp.operands[0]);
      if (tree_ssa_useless_type_conversion (*expr_p))
 *expr_p = ((*expr_p)->exp.operands[0]);
    }
  if (((enum tree_code) (*expr_p)->common.code) == NOP_EXPR || ((enum tree_code) (*expr_p)->common.code) == CONVERT_EXPR)
    {
      tree sub = ((*expr_p)->exp.operands[0]);
      if (((enum tree_code) (sub)->common.code) == COMPONENT_REF)
 canonicalize_component_ref (&((*expr_p)->exp.operands[0]));
      else if (((enum tree_code) (sub)->common.code) == ADDR_EXPR)
 canonicalize_addr_expr (expr_p);
    }
  return GS_OK;
}
static enum gimplify_status
gimplify_minimax_expr (tree *expr_p, tree *pre_p, tree *post_p)
{
  tree op1 = ((*expr_p)->exp.operands[0]);
  tree op2 = ((*expr_p)->exp.operands[1]);
  enum tree_code code;
  enum gimplify_status r0, r1;
  if (((enum tree_code) (*expr_p)->common.code) == MIN_EXPR)
    code = LE_EXPR;
  else
    code = GE_EXPR;
  r0 = gimplify_expr (&op1, pre_p, post_p, is_gimple_val, fb_rvalue);
  r1 = gimplify_expr (&op2, pre_p, post_p, is_gimple_val, fb_rvalue);
  *expr_p = build (COND_EXPR, ((*expr_p)->common.type),
     build (code, global_trees[TI_BOOLEAN_TYPE], op1, op2),
     op1, op2);
  if (r0 == GS_ERROR || r1 == GS_ERROR)
    return GS_ERROR;
  else
    return GS_OK;
}
static enum gimplify_status
gimplify_array_ref_to_plus (tree *expr_p, tree *pre_p, tree *post_p)
{
  tree array = ((*expr_p)->exp.operands[0]);
  tree arrtype = ((array)->common.type);
  tree elttype = ((arrtype)->common.type);
  tree size = array_ref_element_size (*expr_p);
  tree ptrtype = build_pointer_type (elttype);
  enum tree_code add_code = PLUS_EXPR;
  tree idx = ((*expr_p)->exp.operands[1]);
  tree minidx = unshare_expr (array_ref_low_bound (*expr_p));
  tree offset, addr, result;
  enum gimplify_status ret;
  if (!integer_zerop (minidx))
    {
      idx = convert (((minidx)->common.type), idx);
      idx = fold (build (MINUS_EXPR, ((minidx)->common.type), idx, minidx));
    }
  if (((enum tree_code) (idx)->common.code) == INTEGER_CST && tree_int_cst_sgn (idx) < 0)
    {
      idx = fold (build1_stat (NEGATE_EXPR,((idx)->common.type),idx ));
      add_code = MINUS_EXPR;
    }
  idx = fold_convert (sizetype_tab[(int) SIZETYPE], idx);
  offset = size_binop (MULT_EXPR, size, idx);
  ret = gimplify_expr (&array, pre_p, post_p, is_gimple_min_lval, fb_lvalue);
  if (ret == GS_ERROR)
    return ret;
  addr = build_fold_addr_expr_with_type (array, ptrtype);
  result = fold (build (add_code, ptrtype, addr, offset));
  *expr_p = build1_stat (INDIRECT_REF,elttype,result );
  return GS_OK;
}
static enum gimplify_status
gimplify_compound_lval (tree *expr_p, tree *pre_p,
   tree *post_p, fallback_t fallback)
{
  tree *p;
  varray_type stack;
  enum gimplify_status ret = GS_OK, tret;
  int i;
  stack = varray_init (10, VARRAY_DATA_TREE, "stack");
  for (p = expr_p;
       (handled_component_p (*p)
 || ((enum tree_code) (*p)->common.code) == REALPART_EXPR || ((enum tree_code) (*p)->common.code) == IMAGPART_EXPR);
       p = &((*p)->exp.operands[0]))
    do { if ((stack)->elements_used >= (stack)->num_elements) (((stack)) = varray_grow ((stack), 2 * (stack)->num_elements)); (stack)->data.tree1[(stack)->elements_used++] = (*p); } while (0);
  for (i = ((stack)->elements_used) - 1; i >= 0; i--)
    {
      tree t = ((stack)->data.tree1[i]);
      if (((enum tree_code) (t)->common.code) == ARRAY_REF || ((enum tree_code) (t)->common.code) == ARRAY_RANGE_REF)
 {
   if (!((t)->exp.operands[2]))
     {
       tree low = unshare_expr (array_ref_low_bound (t));
       if (!is_gimple_min_invariant (low))
  {
           ((t)->exp.operands[2]) = low;
    tret = gimplify_expr (&((t)->exp.operands[2]), pre_p, post_p,
     is_gimple_tmp_var, fb_rvalue);
    ret = ((ret) < (tret) ? (ret) : (tret));
  }
     }
   if (!((t)->exp.operands[3]))
     {
       tree elmt_type = ((((((t)->exp.operands[0]))->common.type))->common.type);
       tree elmt_size = unshare_expr (array_ref_element_size (t));
       tree factor = size_int_wide ((long) (((elmt_type)->type.align) / 8), SIZETYPE);
       elmt_size = size_binop (EXACT_DIV_EXPR, elmt_size, factor);
       if (!is_gimple_min_invariant (elmt_size))
  {
           ((t)->exp.operands[3]) = elmt_size;
    tret = gimplify_expr (&((t)->exp.operands[3]), pre_p, post_p,
     is_gimple_tmp_var, fb_rvalue);
    ret = ((ret) < (tret) ? (ret) : (tret));
  }
     }
 }
      else if (((enum tree_code) (t)->common.code) == COMPONENT_REF)
 {
   if (!((t)->exp.operands[2]))
     {
       tree offset = unshare_expr (component_ref_field_offset (t));
       tree field = ((t)->exp.operands[1]);
       tree factor
  = size_int_wide ((long) ((((unsigned long)1) << (field)->decl.u1.a.off_align) / 8), SIZETYPE);
       offset = size_binop (EXACT_DIV_EXPR, offset, factor);
       if (!is_gimple_min_invariant (offset))
  {
           ((t)->exp.operands[2]) = offset;
    tret = gimplify_expr (&((t)->exp.operands[2]), pre_p, post_p,
     is_gimple_tmp_var, fb_rvalue);
    ret = ((ret) < (tret) ? (ret) : (tret));
  }
     }
 }
    }
  tret = gimplify_expr (p, pre_p, post_p, is_gimple_min_lval, fallback);
  ret = ((ret) < (tret) ? (ret) : (tret));
  for (; ((stack)->elements_used) > 0; )
    {
      tree t = ((stack)->data.tree1[(stack)->elements_used - 1]);
      if (((enum tree_code) (t)->common.code) == ARRAY_REF || ((enum tree_code) (t)->common.code) == ARRAY_RANGE_REF)
 {
   if (!is_gimple_min_invariant (((t)->exp.operands[1])))
     {
       tret = gimplify_expr (&((t)->exp.operands[1]), pre_p, post_p,
        is_gimple_tmp_var, fb_rvalue);
       ret = ((ret) < (tret) ? (ret) : (tret));
     }
 }
      else if (((enum tree_code) (t)->common.code) == BIT_FIELD_REF)
 {
   tret = gimplify_expr (&((t)->exp.operands[1]), pre_p, post_p,
    is_gimple_val, fb_rvalue);
   ret = ((ret) < (tret) ? (ret) : (tret));
   tret = gimplify_expr (&((t)->exp.operands[2]), pre_p, post_p,
    is_gimple_val, fb_rvalue);
   ret = ((ret) < (tret) ? (ret) : (tret));
 }
      while (tree_ssa_useless_type_conversion (((t)->exp.operands[0]))) ((t)->exp.operands[0]) = ((((t)->exp.operands[0]))->exp.operands[0]);
      recalculate_side_effects (t);
      do { ((stack)->elements_used--); } while (0);
    }
  tret = gimplify_expr (p, pre_p, post_p, is_gimple_min_lval, fallback);
  ret = ((ret) < (tret) ? (ret) : (tret));
  if ((fallback & fb_rvalue) && ((enum tree_code) (*expr_p)->common.code) == COMPONENT_REF)
    {
      canonicalize_component_ref (expr_p);
      ret = ((ret) < (GS_OK) ? (ret) : (GS_OK));
    }
  return ret;
}
static enum gimplify_status
gimplify_self_mod_expr (tree *expr_p, tree *pre_p, tree *post_p,
   unsigned char want_value)
{
  enum tree_code code;
  tree lhs, lvalue, rhs, t1;
  unsigned char postfix;
  enum tree_code arith_code;
  enum gimplify_status ret;
  code = ((enum tree_code) (*expr_p)->common.code);
  if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
    postfix = want_value;
  else
    postfix = 0;
  if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
    arith_code = PLUS_EXPR;
  else
    arith_code = MINUS_EXPR;
  lvalue = ((*expr_p)->exp.operands[0]);
  ret = gimplify_expr (&lvalue, pre_p, post_p, is_gimple_lvalue, fb_lvalue);
  if (ret == GS_ERROR)
    return ret;
  lhs = lvalue;
  rhs = ((*expr_p)->exp.operands[1]);
  if (postfix)
    {
      ret = gimplify_expr (&lhs, pre_p, post_p, is_gimple_val, fb_rvalue);
      if (ret == GS_ERROR)
 return ret;
    }
  t1 = build (arith_code, ((*expr_p)->common.type), lhs, rhs);
  t1 = build (MODIFY_EXPR, ((lvalue)->common.type), lvalue, t1);
  if (postfix)
    {
      gimplify_and_add (t1, post_p);
      *expr_p = lhs;
      return GS_ALL_DONE;
    }
  else
    {
      *expr_p = t1;
      return GS_OK;
    }
}
static enum gimplify_status
gimplify_call_expr (tree *expr_p, tree *pre_p, unsigned char want_value)
{
  tree decl;
  tree arglist;
  enum gimplify_status ret;
  if (! (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (*expr_p)->common.code))])) != 0) ? (*expr_p)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    annotate_with_locus (*expr_p, input_location);
  decl = get_callee_fndecl (*expr_p);
  if (decl && (((decl)->decl.built_in_class) != NOT_BUILT_IN))
    {
      tree new;
      if (((decl)->decl.u1.f) == BUILT_IN_STACK_ALLOC)
 gimplify_ctxp->save_stack = 1;
      if (((decl)->decl.u1.f) == BUILT_IN_STACK_RESTORE)
 gimplify_ctxp->save_stack = 0;
      new = simplify_builtin (*expr_p, !want_value);
      if (new && new != *expr_p)
 {
   *expr_p = new;
   return GS_OK;
 }
    }
  ret = gimplify_expr (&((*expr_p)->exp.operands[0]), pre_p, ((void *)0),
         is_gimple_call_addr, fb_rvalue);
  if (1)
    ((*expr_p)->exp.operands[1]) = nreverse (((*expr_p)->exp.operands[1]));
  for (arglist = ((*expr_p)->exp.operands[1]); arglist;
       arglist = ((arglist)->common.chain))
    {
      enum gimplify_status t;
      unsigned char (*test) (tree);
      fallback_t fb;
      if (is_gimple_reg_type (((((arglist)->list.value))->common.type)))
 test = is_gimple_val, fb = fb_rvalue;
      else
 test = is_gimple_lvalue, fb = fb_either;
      t = gimplify_expr (&((arglist)->list.value), pre_p, ((void *)0), test, fb);
      if (t == GS_ERROR)
 ret = GS_ERROR;
    }
  if (1)
    ((*expr_p)->exp.operands[1]) = nreverse (((*expr_p)->exp.operands[1]));
  if (ret != GS_ERROR && decl && (((decl)->decl.built_in_class) != NOT_BUILT_IN))
    {
      tree new = simplify_builtin (*expr_p, !want_value);
      if (new && new != *expr_p)
 {
   *expr_p = new;
   return GS_OK;
 }
    }
  if (((enum tree_code) (*expr_p)->common.code) == CALL_EXPR
      && (call_expr_flags (*expr_p) & (1 | 256)))
    ((*expr_p)->common.side_effects_flag) = 0;
  return ret;
}
static tree
shortcut_cond_r (tree pred, tree *true_label_p, tree *false_label_p)
{
  tree local_label = (tree) ((void *)0);
  tree t, expr = ((void *)0);
  if (((enum tree_code) (pred)->common.code) == TRUTH_ANDIF_EXPR)
    {
      if (false_label_p == ((void *)0))
 false_label_p = &local_label;
      t = shortcut_cond_r (((pred)->exp.operands[0]), ((void *)0), false_label_p);
      append_to_statement_list (t, &expr);
      t = shortcut_cond_r (((pred)->exp.operands[1]), true_label_p,
      false_label_p);
      append_to_statement_list (t, &expr);
    }
  else if (((enum tree_code) (pred)->common.code) == TRUTH_ORIF_EXPR)
    {
      if (true_label_p == ((void *)0))
 true_label_p = &local_label;
      t = shortcut_cond_r (((pred)->exp.operands[0]), true_label_p, ((void *)0));
      append_to_statement_list (t, &expr);
      t = shortcut_cond_r (((pred)->exp.operands[1]), true_label_p,
      false_label_p);
      append_to_statement_list (t, &expr);
    }
  else if (((enum tree_code) (pred)->common.code) == COND_EXPR)
    {
      expr = build (COND_EXPR, global_trees[TI_VOID_TYPE], ((pred)->exp.operands[0]),
      shortcut_cond_r (((pred)->exp.operands[1]), true_label_p,
         false_label_p),
      shortcut_cond_r (((pred)->exp.operands[2]), true_label_p,
         false_label_p));
    }
  else
    {
      expr = build (COND_EXPR, global_trees[TI_VOID_TYPE], pred,
      build_and_jump (true_label_p),
      build_and_jump (false_label_p));
    }
  if (local_label)
    {
      t = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],local_label );
      append_to_statement_list (t, &expr);
    }
  return expr;
}
static tree
shortcut_cond_expr (tree expr)
{
  tree pred = ((expr)->exp.operands[0]);
  tree then_ = ((expr)->exp.operands[1]);
  tree else_ = ((expr)->exp.operands[2]);
  tree true_label, false_label, end_label, t;
  tree *true_label_p;
  tree *false_label_p;
  unsigned char emit_end, emit_false;
  unsigned char then_se = then_ && ((then_)->common.side_effects_flag);
  unsigned char else_se = else_ && ((else_)->common.side_effects_flag);
  if (!else_se)
    {
      while (((enum tree_code) (pred)->common.code) == TRUTH_ANDIF_EXPR)
 {
   ((expr)->exp.operands[0]) = ((pred)->exp.operands[1]);
   then_ = shortcut_cond_expr (expr);
   pred = ((pred)->exp.operands[0]);
   expr = build (COND_EXPR, global_trees[TI_VOID_TYPE], pred, then_, (tree) ((void *)0));
 }
    }
  if (!then_se)
    {
      while (((enum tree_code) (pred)->common.code) == TRUTH_ORIF_EXPR)
 {
   ((expr)->exp.operands[0]) = ((pred)->exp.operands[1]);
   else_ = shortcut_cond_expr (expr);
   pred = ((pred)->exp.operands[0]);
   expr = build (COND_EXPR, global_trees[TI_VOID_TYPE], pred, (tree) ((void *)0), else_);
 }
    }
  if (((enum tree_code) (pred)->common.code) != TRUTH_ANDIF_EXPR
      && ((enum tree_code) (pred)->common.code) != TRUTH_ORIF_EXPR)
    return expr;
  true_label = false_label = end_label = (tree) ((void *)0);
  if (then_
      && ((enum tree_code) (then_)->common.code) == GOTO_EXPR
      && ((enum tree_code) ((((then_))->exp.operands[0]))->common.code) == LABEL_DECL)
    {
      true_label = (((then_))->exp.operands[0]);
      then_ = ((void *)0);
      then_se = 0;
    }
  if (else_
      && ((enum tree_code) (else_)->common.code) == GOTO_EXPR
      && ((enum tree_code) ((((else_))->exp.operands[0]))->common.code) == LABEL_DECL)
    {
      false_label = (((else_))->exp.operands[0]);
      else_ = ((void *)0);
      else_se = 0;
    }
  if (true_label)
    true_label_p = &true_label;
  else
    true_label_p = ((void *)0);
  if (false_label || else_se)
    false_label_p = &false_label;
  else
    false_label_p = ((void *)0);
  if (!then_se && !else_se)
    return shortcut_cond_r (pred, true_label_p, false_label_p);
  if (else_se)
    expr = expr_last (else_);
  else if (then_se)
    expr = expr_last (then_);
  else
    expr = ((void *)0);
  if (expr && ((enum tree_code) (expr)->common.code) == LABEL_EXPR)
    end_label = (((expr))->exp.operands[0]);
  if (!false_label_p)
    false_label_p = &end_label;
  emit_end = (end_label == (tree) ((void *)0));
  emit_false = (false_label == (tree) ((void *)0));
  pred = shortcut_cond_r (pred, true_label_p, false_label_p);
  expr = ((void *)0);
  append_to_statement_list (pred, &expr);
  append_to_statement_list (then_, &expr);
  if (else_se)
    {
      t = build_and_jump (&end_label);
      append_to_statement_list (t, &expr);
      if (emit_false)
 {
   t = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],false_label );
   append_to_statement_list (t, &expr);
 }
      append_to_statement_list (else_, &expr);
    }
  if (emit_end && end_label)
    {
      t = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],end_label );
      append_to_statement_list (t, &expr);
    }
  return expr;
}
static tree
gimple_boolify (tree expr)
{
  tree type = ((expr)->common.type);
  if (((enum tree_code) (type)->common.code) == BOOLEAN_TYPE)
    return expr;
  expr = lang_hooks.truthvalue_conversion (expr);
  switch (((enum tree_code) (expr)->common.code))
    {
    case TRUTH_AND_EXPR:
    case TRUTH_OR_EXPR:
    case TRUTH_XOR_EXPR:
    case TRUTH_ANDIF_EXPR:
    case TRUTH_ORIF_EXPR:
      ((expr)->exp.operands[1]) = gimple_boolify (((expr)->exp.operands[1]));
    case TRUTH_NOT_EXPR:
      ((expr)->exp.operands[0]) = gimple_boolify (((expr)->exp.operands[0]));
    case EQ_EXPR: case NE_EXPR:
    case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
      ((expr)->common.type) = global_trees[TI_BOOLEAN_TYPE];
      return expr;
    default:
      return convert (global_trees[TI_BOOLEAN_TYPE], expr);
    }
}
static enum gimplify_status
gimplify_cond_expr (tree *expr_p, tree *pre_p, tree target)
{
  tree expr = *expr_p;
  tree tmp, type;
  enum gimplify_status ret;
  type = ((expr)->common.type);
  if (!type)
    ((expr)->common.type) = global_trees[TI_VOID_TYPE];
  else if (! (((enum tree_code) (type)->common.code) == VOID_TYPE))
    {
      if (target)
 {
   tmp = target;
   ret = GS_OK;
 }
      else
 {
   tmp = create_tmp_var (((expr)->common.type), "iftmp");
   ret = GS_ALL_DONE;
 }
      if (((((expr)->exp.operands[1]))->common.type) != global_trees[TI_VOID_TYPE])
 ((expr)->exp.operands[1])
   = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], tmp, ((expr)->exp.operands[1]));
      if (((((expr)->exp.operands[2]))->common.type) != global_trees[TI_VOID_TYPE])
 ((expr)->exp.operands[2])
   = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], tmp, ((expr)->exp.operands[2]));
      ((expr)->common.type) = global_trees[TI_VOID_TYPE];
      recalculate_side_effects (expr);
      gimplify_and_add (expr, pre_p);
      *expr_p = tmp;
      return ret;
    }
  ((expr)->exp.operands[0]) = gimple_boolify (((expr)->exp.operands[0]));
  if (((enum tree_code) (((expr)->exp.operands[0]))->common.code) == TRUTH_ANDIF_EXPR
      || ((enum tree_code) (((expr)->exp.operands[0]))->common.code) == TRUTH_ORIF_EXPR)
    {
      expr = shortcut_cond_expr (expr);
      if (expr != *expr_p)
 {
   *expr_p = expr;
   gimple_push_condition ();
   gimplify_stmt (expr_p);
   gimple_pop_condition (pre_p);
   return GS_ALL_DONE;
 }
    }
  ret = gimplify_expr (&((expr)->exp.operands[0]), pre_p, ((void *)0),
         is_gimple_condexpr, fb_rvalue);
  gimple_push_condition ();
  gimplify_to_stmt_list (&((expr)->exp.operands[1]));
  gimplify_to_stmt_list (&((expr)->exp.operands[2]));
  recalculate_side_effects (expr);
  gimple_pop_condition (pre_p);
  if (ret == GS_ERROR)
    ;
  else if (((((expr)->exp.operands[1]))->common.side_effects_flag))
    ret = GS_ALL_DONE;
  else if (((((expr)->exp.operands[2]))->common.side_effects_flag))
    {
      ((expr)->exp.operands[0]) = invert_truthvalue (((expr)->exp.operands[0]));
      ret = gimplify_expr (&((expr)->exp.operands[0]), pre_p, ((void *)0),
      is_gimple_condexpr, fb_rvalue);
      tmp = ((expr)->exp.operands[1]);
      ((expr)->exp.operands[1]) = ((expr)->exp.operands[2]);
      ((expr)->exp.operands[2]) = tmp;
    }
  else
    expr = ((expr)->exp.operands[0]);
  *expr_p = expr;
  return ret;
}
static enum gimplify_status
gimplify_modify_expr_to_memcpy (tree *expr_p, unsigned char want_value)
{
  tree args, t, to, to_ptr, from;
  to = ((*expr_p)->exp.operands[0]);
  from = ((*expr_p)->exp.operands[1]);
  t = ((((from)->common.type))->type.size_unit);
  t = unshare_expr (t);
  t = ((t) == 0 || ((t)->common.constant_flag) ? (t) : substitute_placeholder_in_expr (t, to));
  t = ((t) == 0 || ((t)->common.constant_flag) ? (t) : substitute_placeholder_in_expr (t, from));
  args = tree_cons_stat (((void *)0),t,((void *)0) );
  t = build_fold_addr_expr (from);
  args = tree_cons_stat (((void *)0),t,args );
  to_ptr = build_fold_addr_expr (to);
  args = tree_cons_stat (((void *)0),to_ptr,args );
  t = implicit_built_in_decls[BUILT_IN_MEMCPY];
  t = build_function_call_expr (t, args);
  if (want_value)
    {
      t = build1_stat (NOP_EXPR,((to_ptr)->common.type),t );
      t = build1_stat (INDIRECT_REF,((to)->common.type),t );
    }
  *expr_p = t;
  return GS_OK;
}
static enum gimplify_status
gimplify_modify_expr_to_memset (tree *expr_p, unsigned char want_value)
{
  tree args, t, to, to_ptr;
  to = ((*expr_p)->exp.operands[0]);
  t = ((((((*expr_p)->exp.operands[1]))->common.type))->type.size_unit);
  t = unshare_expr (t);
  t = ((t) == 0 || ((t)->common.constant_flag) ? (t) : substitute_placeholder_in_expr (t, to));
  args = tree_cons_stat (((void *)0),t,((void *)0) );
  args = tree_cons_stat (((void *)0),global_trees[TI_INTEGER_ZERO],args );
  to_ptr = build_fold_addr_expr (to);
  args = tree_cons_stat (((void *)0),to_ptr,args );
  t = implicit_built_in_decls[BUILT_IN_MEMSET];
  t = build_function_call_expr (t, args);
  if (want_value)
    {
      t = build1_stat (NOP_EXPR,((to_ptr)->common.type),t );
      t = build1_stat (INDIRECT_REF,((to)->common.type),t );
    }
  *expr_p = t;
  return GS_OK;
}
static enum gimplify_status
gimplify_init_constructor (tree *expr_p, tree *pre_p,
      tree *post_p, unsigned char want_value)
{
  tree object = ((*expr_p)->exp.operands[0]);
  tree ctor = ((*expr_p)->exp.operands[1]);
  tree type = ((ctor)->common.type);
  enum gimplify_status ret;
  tree elt_list;
  if (((enum tree_code) (ctor)->common.code) != CONSTRUCTOR)
    return GS_UNHANDLED;
  elt_list = ((ctor)->exp.operands[0]);
  ret = GS_ALL_DONE;
  switch (((enum tree_code) (type)->common.code))
    {
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
    case ARRAY_TYPE:
      {
 long i, num_elements, num_nonzero_elements;
 long num_nonconstant_elements;
 unsigned char cleared;
 if (elt_list == ((void *)0))
   {
     if (want_value)
       {
  *expr_p = object;
  return GS_OK;
       }
     else
       return GS_UNHANDLED;
   }
 categorize_ctor_elements (ctor, &num_nonzero_elements,
      &num_nonconstant_elements);
 num_elements = count_type_elements (((ctor)->common.type));
 if (num_nonconstant_elements == 0
     && ((object)->common.readonly_flag)
     && ((enum tree_code) (object)->common.code) == VAR_DECL)
   {
     ((object)->decl.initial) = ctor;
     ((object)->common.static_flag) = 1;
     if (!((object)->decl.name))
       ((object)->decl.name) = create_tmp_var_name ("C");
     walk_tree (&((object)->decl.initial), force_labels_r, ((void *)0), ((void *)0));
     lhd_set_decl_assembler_name (object);
     *expr_p = (tree) ((void *)0);
     break;
   }
 if (num_nonconstant_elements == 0)
   {
     long size = int_size_in_bytes (type);
     unsigned int align;
     if (size < 0)
       {
  size = int_size_in_bytes (((object)->common.type));
  if (size >= 0)
    ((ctor)->common.type) = type = ((object)->common.type);
       }
     if ((tree_code_type[(int) (((enum tree_code) (object)->common.code))] == 'd'))
       align = ((object)->decl.u1.a.align);
     else
       align = ((type)->type.align);
     if (size > 0 && !can_move_by_pieces (size, align))
       {
  tree new = create_tmp_var_raw (type, "C");
  gimple_add_tmp_var (new);
  ((new)->common.static_flag) = 1;
  ((new)->common.readonly_flag) = 1;
  ((new)->decl.initial) = ctor;
  if (align > ((new)->decl.u1.a.align))
    {
      ((new)->decl.u1.a.align) = align;
      ((new)->decl.user_align) = 1;
    }
         walk_tree (&((new)->decl.initial), force_labels_r, ((void *)0), ((void *)0));
  ((*expr_p)->exp.operands[1]) = new;
  break;
       }
   }
 cleared = 0;
 if (num_elements - num_nonzero_elements > 2
     && num_nonzero_elements < num_elements/4)
   cleared = 1;
 else
   {
     long len = list_length (elt_list);
     if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
       {
  tree nelts = array_type_nelts (type);
  if (!host_integerp (nelts, 1)
      || tree_low_cst (nelts, 1) + 1 != len)
    cleared = 1;;
       }
     else if (len != fields_length (type))
       cleared = 1;
   }
 if (cleared)
   {
     ((ctor)->exp.operands[0]) = (tree) ((void *)0);
     object = unshare_expr (((*expr_p)->exp.operands[0]));
     gimplify_stmt (expr_p);
     append_to_statement_list (*expr_p, pre_p);
   }
 for (i = 0; elt_list; i++, elt_list = ((elt_list)->common.chain))
   {
     tree purpose, value, cref, init;
     purpose = ((elt_list)->list.purpose);
     value = ((elt_list)->list.value);
     if (cleared && initializer_zerop (value))
       continue;
     if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
       {
  tree t = ((((((object)->common.type))->common.type))->type.main_variant);
  if (!purpose)
    fancy_abort ("gcc.c", 113970, "?");
  if (((enum tree_code) (purpose)->common.code) == RANGE_EXPR)
    fancy_abort ("gcc.c", 113973, "?");
  cref = build (ARRAY_REF, t, unshare_expr (object), purpose,
         (tree) ((void *)0), (tree) ((void *)0));
       }
     else
       cref = build (COMPONENT_REF, ((purpose)->common.type),
       unshare_expr (object), purpose, (tree) ((void *)0));
     init = build (MODIFY_EXPR, ((purpose)->common.type), cref, value);
     gimplify_and_add (init, pre_p);
   }
 *expr_p = (tree) ((void *)0);
      }
      break;
    case COMPLEX_TYPE:
      {
 tree r, i;
 r = i = (tree) ((void *)0);
 if (elt_list)
   {
     r = ((elt_list)->list.value);
     elt_list = ((elt_list)->common.chain);
     if (elt_list)
       {
  i = ((elt_list)->list.value);
  if (((elt_list)->common.chain))
    fancy_abort ("gcc.c", 114006, "?");
       }
   }
 if (r == ((void *)0) || i == ((void *)0))
   {
     tree zero = convert (((type)->common.type), global_trees[TI_INTEGER_ZERO]);
     if (r == ((void *)0))
       r = zero;
     if (i == ((void *)0))
       i = zero;
   }
 if (((r)->common.constant_flag) && ((i)->common.constant_flag))
   {
     ctor = build_complex (type, r, i);
     ((*expr_p)->exp.operands[1]) = ctor;
   }
 else
   {
     ctor = build (COMPLEX_EXPR, type, r, i);
     ((*expr_p)->exp.operands[1]) = ctor;
     ret = gimplify_expr (&((*expr_p)->exp.operands[1]), pre_p, post_p,
     is_gimple_rhs, fb_rvalue);
   }
      }
      break;
    case VECTOR_TYPE:
      if (((ctor)->common.constant_flag))
 ((*expr_p)->exp.operands[1]) = build_vector (type, elt_list);
      else
 {
   for (; elt_list; elt_list = ((elt_list)->common.chain))
     {
       enum gimplify_status tret;
       tret = gimplify_expr (&((elt_list)->list.value), pre_p, post_p,
        is_gimple_constructor_elt, fb_rvalue);
       if (tret == GS_ERROR)
  ret = GS_ERROR;
     }
 }
      break;
    default:
      fancy_abort ("gcc.c", 114056, "?");
    }
  if (ret == GS_ERROR)
    return GS_ERROR;
  else if (want_value)
    {
      append_to_statement_list (*expr_p, pre_p);
      *expr_p = object;
      return GS_OK;
    }
  else
    return GS_ALL_DONE;
}
static enum gimplify_status
gimplify_modify_expr_rhs (tree *expr_p, tree *from_p, tree *to_p, tree *pre_p,
     tree *post_p, unsigned char want_value)
{
  enum gimplify_status ret = GS_OK;
  while (ret != GS_UNHANDLED)
    switch (((enum tree_code) (*from_p)->common.code))
      {
      case TARGET_EXPR:
 {
   tree init = ((*from_p)->exp.operands[1]);
   if (!(((enum tree_code) (((init)->common.type))->common.code) == VOID_TYPE))
     {
       *from_p = init;
       ret = GS_OK;
     }
   else
     ret = GS_UNHANDLED;
 }
 break;
      case COMPOUND_EXPR:
 gimplify_compound_expr (from_p, pre_p, 1);
 ret = GS_OK;
 break;
      case CONSTRUCTOR:
 return gimplify_init_constructor (expr_p, pre_p, post_p, want_value);
      case COND_EXPR:
 if (((((*from_p)->common.type))->common.addressable_flag))
   {
     *expr_p = *from_p;
     return gimplify_cond_expr (expr_p, pre_p, *to_p);
   }
 else
   ret = GS_UNHANDLED;
 break;
      default:
 ret = GS_UNHANDLED;
 break;
      }
  return ret;
}
static enum gimplify_status
gimplify_modify_expr (tree *expr_p, tree *pre_p, tree *post_p, unsigned char want_value)
{
  tree *from_p = &((*expr_p)->exp.operands[1]);
  tree *to_p = &((*expr_p)->exp.operands[0]);
  enum gimplify_status ret = GS_UNHANDLED;
  if (((enum tree_code) (*expr_p)->common.code) == INIT_EXPR)
    ((*expr_p)->common.code = (MODIFY_EXPR));
  ret = gimplify_modify_expr_rhs (expr_p, from_p, to_p, pre_p, post_p,
      want_value);
  if (ret != GS_UNHANDLED)
    return ret;
  if (((enum tree_code) (((*from_p)->common.type))->common.code) != ERROR_MARK
      && ((((*from_p)->common.type))->type.size_unit)
      && ((enum tree_code) (((((*from_p)->common.type))->type.size_unit))->common.code) != INTEGER_CST)
    {
      if (((enum tree_code) (*from_p)->common.code) == CONSTRUCTOR)
 return gimplify_modify_expr_to_memset (expr_p, want_value);
      else
 return gimplify_modify_expr_to_memcpy (expr_p, want_value);
    }
  ret = gimplify_expr (to_p, pre_p, post_p, is_gimple_lvalue, fb_lvalue);
  if (ret == GS_ERROR)
    return ret;
  ret = gimplify_expr (from_p, pre_p, post_p, is_gimple_rhs, fb_rvalue);
  if (ret == GS_ERROR)
    return ret;
  ret = gimplify_modify_expr_rhs (expr_p, from_p, to_p, pre_p, post_p,
      want_value);
  if (ret != GS_UNHANDLED)
    return ret;
  if (is_gimple_tmp_var (*to_p))
    ret = GS_ALL_DONE;
  else
    {
      if (aggregate_value_p (((*from_p)->common.type), (tree) ((void *)0)))
                       ;
      else if (((enum tree_code) (*from_p)->common.code) == CALL_EXPR
        || (flag_non_call_exceptions && tree_could_trap_p (*from_p))
        || (is_gimple_reg_type (((*from_p)->common.type))
     && !is_gimple_reg (*to_p)))
 gimplify_expr (from_p, pre_p, post_p, is_gimple_val, fb_rvalue);
      ret = want_value ? GS_OK : GS_ALL_DONE;
    }
  if (want_value)
    {
      append_to_statement_list (*expr_p, pre_p);
      *expr_p = *to_p;
    }
  return ret;
}
static enum gimplify_status
gimplify_variable_sized_compare (tree *expr_p)
{
  tree op0 = ((*expr_p)->exp.operands[0]);
  tree op1 = ((*expr_p)->exp.operands[1]);
  tree args, t, dest;
  t = ((((op0)->common.type))->type.size_unit);
  t = unshare_expr (t);
  t = ((t) == 0 || ((t)->common.constant_flag) ? (t) : substitute_placeholder_in_expr (t, op0));
  args = tree_cons_stat (((void *)0),t,((void *)0) );
  t = build_fold_addr_expr (op1);
  args = tree_cons_stat (((void *)0),t,args );
  dest = build_fold_addr_expr (op0);
  args = tree_cons_stat (((void *)0),dest,args );
  t = implicit_built_in_decls[BUILT_IN_MEMCMP];
  t = build_function_call_expr (t, args);
  *expr_p
    = build (((enum tree_code) (*expr_p)->common.code), ((*expr_p)->common.type), t, global_trees[TI_INTEGER_ZERO]);
  return GS_OK;
}
static enum gimplify_status
gimplify_boolean_expr (tree *expr_p)
{
  tree type = ((*expr_p)->common.type);
  *expr_p = build (COND_EXPR, type, *expr_p,
     convert (type, global_trees[TI_BOOLEAN_TRUE]),
     convert (type, global_trees[TI_BOOLEAN_FALSE]));
  return GS_OK;
}
static enum gimplify_status
gimplify_compound_expr (tree *expr_p, tree *pre_p, unsigned char want_value)
{
  tree t = *expr_p;
  do
    {
      tree *sub_p = &((t)->exp.operands[0]);
      if (((enum tree_code) (*sub_p)->common.code) == COMPOUND_EXPR)
 gimplify_compound_expr (sub_p, pre_p, 0);
      else
 gimplify_stmt (sub_p);
      append_to_statement_list (*sub_p, pre_p);
      t = ((t)->exp.operands[1]);
    }
  while (((enum tree_code) (t)->common.code) == COMPOUND_EXPR);
  *expr_p = t;
  if (want_value)
    return GS_OK;
  else
    {
      gimplify_stmt (expr_p);
      return GS_ALL_DONE;
    }
}
static enum gimplify_status
gimplify_statement_list (tree *expr_p)
{
  tree_stmt_iterator i = tsi_start (*expr_p);
  while (!tsi_end_p (i))
    {
      tree t;
      gimplify_stmt (tsi_stmt_ptr (i));
      t = tsi_stmt (i);
      if (t == ((void *)0))
 tsi_delink (&i);
      else if (((enum tree_code) (t)->common.code) == STATEMENT_LIST)
 {
   tsi_link_before (&i, t, TSI_SAME_STMT);
   tsi_delink (&i);
 }
      else
 tsi_next (&i);
    }
  return GS_ALL_DONE;
}
static enum gimplify_status
gimplify_save_expr (tree *expr_p, tree *pre_p, tree *post_p)
{
  enum gimplify_status ret = GS_ALL_DONE;
  tree val;
  val = ((*expr_p)->exp.operands[0]);
  if (is_gimple_tmp_var (val))
    *expr_p = val;
  else if (((val)->common.type) == global_trees[TI_VOID_TYPE])
    {
      tree body = ((*expr_p)->exp.operands[0]);
      ret = gimplify_expr (& body, pre_p, post_p, is_gimple_stmt, fb_none);
      append_to_statement_list (body, pre_p);
      *expr_p = ((void *)0);
    }
  else
    *expr_p = ((*expr_p)->exp.operands[0])
      = get_initialized_tmp_var (val, pre_p, post_p);
  return ret;
}
static enum gimplify_status
gimplify_addr_expr (tree *expr_p, tree *pre_p, tree *post_p)
{
  tree expr = *expr_p;
  tree op0 = ((expr)->exp.operands[0]);
  enum gimplify_status ret;
  switch (((enum tree_code) (op0)->common.code))
    {
    case INDIRECT_REF:
      *expr_p = ((op0)->exp.operands[0]);
      ret = GS_OK;
      break;
    case ARRAY_REF:
      ret = gimplify_array_ref_to_plus (&((expr)->exp.operands[0]),
     pre_p, post_p);
      *expr_p = ((((expr)->exp.operands[0]))->exp.operands[0]);
      break;
    case VIEW_CONVERT_EXPR:
      *expr_p = fold_convert (((expr)->common.type),
         build_fold_addr_expr (((op0)->exp.operands[0])));
      ret = GS_OK;
      break;
    default:
      ret = gimplify_expr (&((expr)->exp.operands[0]), pre_p, post_p,
      is_gimple_addr_expr_arg, fb_either);
      if (ret != GS_ERROR)
 {
   recompute_tree_invarant_for_addr_expr (expr);
   lang_hooks.mark_addressable (((expr)->exp.operands[0]));
 }
      break;
    }
  if ((tree_code_type[(int) (((enum tree_code) (((expr)->exp.operands[0]))->common.code))] == 'd'))
    ((expr)->common.invariant_flag) = 1;
  return ret;
}
static enum gimplify_status
gimplify_asm_expr (tree *expr_p, tree *pre_p, tree *post_p)
{
  tree expr = *expr_p;
  int noutputs = list_length ((((expr))->exp.operands[1]));
  const char **oconstraints
    = (const char **) C_alloca((noutputs) * sizeof (const char *));
  int i;
  tree link;
  const char *constraint;
  unsigned char allows_mem, allows_reg, is_inout;
  enum gimplify_status ret, tret;
  (((expr))->exp.operands[0])
    = resolve_asm_operand_names ((((expr))->exp.operands[0]), (((expr))->exp.operands[1]),
     (((expr))->exp.operands[2]));
  ret = GS_ALL_DONE;
  for (i = 0, link = (((expr))->exp.operands[1]); link; ++i, link = ((link)->common.chain))
    {
      oconstraints[i] = constraint
 = ((((((link)->list.purpose))->list.value))->string1.pointer);
      parse_output_constraint (&constraint, i, 0, 0,
          &allows_mem, &allows_reg, &is_inout);
      if (!allows_reg && allows_mem)
 lang_hooks.mark_addressable (((link)->list.value));
      tret = gimplify_expr (&((link)->list.value), pre_p, post_p,
       is_inout ? is_gimple_min_lval : is_gimple_lvalue,
       fb_lvalue | fb_mayfail);
      if (tret == GS_ERROR)
 {
   error ("invalid lvalue in asm output %d", i);
   ret = tret;
 }
      if (is_inout)
 {
   tree input;
   char buf[10];
   size_t constraint_len = strlen (constraint);
   char *p = xstrdup (constraint);
   p[0] = '=';
   ((((link)->list.purpose))->list.value) = build_string (constraint_len, p);
   free (p);
   if (allows_reg)
     {
       sprintf (buf, "%d", i);
       input = build_string (strlen (buf), buf);
     }
   else
     input = build_string (constraint_len - 1, constraint + 1);
   input = build_tree_list_stat(build_tree_list_stat((tree) ((void *)0),input ),unshare_expr (((link)->list.value)) )
                                        ;
   (((expr))->exp.operands[2]) = chainon ((((expr))->exp.operands[2]), input);
 }
    }
  for (link = (((expr))->exp.operands[2]); link; ++i, link = ((link)->common.chain))
    {
      constraint
 = ((((((link)->list.purpose))->list.value))->string1.pointer);
      parse_input_constraint (&constraint, 0, 0, noutputs, 0,
         oconstraints, &allows_mem, &allows_reg);
      if (!allows_reg && allows_mem)
 {
   lang_hooks.mark_addressable (((link)->list.value));
   tret = gimplify_expr (&((link)->list.value), pre_p, post_p,
    is_gimple_lvalue, fb_lvalue | fb_mayfail);
   if (tret == GS_ERROR)
     {
       error ("memory input %d is not directly addressable", i);
       ret = tret;
     }
 }
      else
 {
   tret = gimplify_expr (&((link)->list.value), pre_p, post_p,
    is_gimple_val, fb_rvalue);
   if (tret == GS_ERROR)
     ret = tret;
 }
    }
  return ret;
}
static enum gimplify_status
gimplify_cleanup_point_expr (tree *expr_p, tree *pre_p)
{
  tree_stmt_iterator iter;
  tree body;
  tree temp = voidify_wrapper_expr (*expr_p, ((void *)0));
  int old_conds = gimplify_ctxp->conditions;
  gimplify_ctxp->conditions = 0;
  body = ((*expr_p)->exp.operands[0]);
  gimplify_to_stmt_list (&body);
  gimplify_ctxp->conditions = old_conds;
  for (iter = tsi_start (body); !tsi_end_p (iter); )
    {
      tree *wce_p = tsi_stmt_ptr (iter);
      tree wce = *wce_p;
      if (((enum tree_code) (wce)->common.code) == WITH_CLEANUP_EXPR)
 {
   if (tsi_one_before_end_p (iter))
     {
       tsi_link_before (&iter, ((wce)->exp.operands[1]), TSI_SAME_STMT);
       tsi_delink (&iter);
       break;
     }
   else
     {
       tree sl, tfe;
       sl = tsi_split_statement_list_after (&iter);
       tfe = build (TRY_FINALLY_EXPR, global_trees[TI_VOID_TYPE], sl, (tree) ((void *)0));
       append_to_statement_list (((wce)->exp.operands[1]),
         &((tfe)->exp.operands[1]));
       *wce_p = tfe;
       iter = tsi_start (sl);
     }
 }
      else
 tsi_next (&iter);
    }
  if (temp)
    {
      *expr_p = temp;
      append_to_statement_list (body, pre_p);
      return GS_OK;
    }
  else
    {
      *expr_p = body;
      return GS_ALL_DONE;
    }
}
static void
gimple_push_cleanup (tree var, tree cleanup, tree *pre_p)
{
  tree wce;
  if ((global_dc)->diagnostic_count[(int) (DK_ERROR)] || (global_dc)->diagnostic_count[(int) (DK_SORRY)])
    return;
  if (gimple_conditional_context ())
    {
      tree flag = create_tmp_var (global_trees[TI_BOOLEAN_TYPE], "cleanup");
      tree ffalse = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], flag,
      global_trees[TI_BOOLEAN_FALSE]);
      tree ftrue = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], flag,
     global_trees[TI_BOOLEAN_TRUE]);
      cleanup = build (COND_EXPR, global_trees[TI_VOID_TYPE], flag, cleanup, ((void *)0));
      wce = build (WITH_CLEANUP_EXPR, global_trees[TI_VOID_TYPE], (tree) ((void *)0),
     cleanup, (tree) ((void *)0));
      append_to_statement_list (ffalse, &gimplify_ctxp->conditional_cleanups);
      append_to_statement_list (wce, &gimplify_ctxp->conditional_cleanups);
      append_to_statement_list (ftrue, pre_p);
      ((var)->common.nowarning_flag) = 1;
    }
  else
    {
      wce = build (WITH_CLEANUP_EXPR, global_trees[TI_VOID_TYPE], (tree) ((void *)0),
     cleanup, (tree) ((void *)0));
      append_to_statement_list (wce, pre_p);
    }
  gimplify_stmt (&((wce)->exp.operands[1]));
}
static enum gimplify_status
gimplify_target_expr (tree *expr_p, tree *pre_p, tree *post_p)
{
  tree targ = *expr_p;
  tree temp = ((targ)->exp.operands[0]);
  tree init = ((targ)->exp.operands[1]);
  enum gimplify_status ret;
  if (init)
    {
      gimple_add_tmp_var (temp);
      if ((((enum tree_code) (((init)->common.type))->common.code) == VOID_TYPE))
 ret = gimplify_expr (&init, pre_p, post_p, is_gimple_stmt, fb_none);
      else
 {
   ret = GS_OK;
          if (((enum tree_code) (init)->common.code) == BIND_EXPR)
     gimplify_bind_expr (&init, temp, pre_p);
          if (init != temp)
     {
       init = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], temp, init);
       ret = gimplify_expr (&init, pre_p, post_p, is_gimple_stmt,
       fb_none);
     }
 }
      if (ret == GS_ERROR)
 return GS_ERROR;
      append_to_statement_list (init, pre_p);
      if (((targ)->exp.operands[2]))
 {
   gimplify_stmt (&((targ)->exp.operands[2]));
   gimple_push_cleanup (temp, ((targ)->exp.operands[2]), pre_p);
 }
      ((targ)->exp.operands[3]) = init;
      ((targ)->exp.operands[1]) = (tree) ((void *)0);
    }
  else if (!((temp)->decl.seen_in_bind_expr))
    fancy_abort ("gcc.c", 114774, "?");
  *expr_p = temp;
  return GS_OK;
}
void
gimplify_stmt (tree *stmt_p)
{
  gimplify_expr (stmt_p, ((void *)0), ((void *)0), is_gimple_stmt, fb_none);
}
void
gimplify_to_stmt_list (tree *stmt_p)
{
  gimplify_stmt (stmt_p);
  if (!*stmt_p)
    *stmt_p = alloc_stmt_list ();
  else if (((enum tree_code) (*stmt_p)->common.code) != STATEMENT_LIST)
    {
      tree t = *stmt_p;
      *stmt_p = alloc_stmt_list ();
      append_to_statement_list (t, stmt_p);
    }
}
enum gimplify_status
gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p,
        unsigned char (* gimple_test_f) (tree), fallback_t fallback)
{
  tree tmp;
  tree internal_pre = (tree) ((void *)0);
  tree internal_post = (tree) ((void *)0);
  tree save_expr;
  int is_statement = (pre_p == ((void *)0));
  location_t saved_location;
  enum gimplify_status ret;
  save_expr = *expr_p;
  if (save_expr == (tree) ((void *)0))
    return GS_ALL_DONE;
  if (pre_p == ((void *)0))
    pre_p = &internal_pre;
  if (post_p == ((void *)0))
    post_p = &internal_post;
  saved_location = input_location;
  if (save_expr != global_trees[TI_ERROR_MARK]
      && (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (*expr_p)->common.code))])) != 0) ? (*expr_p)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    input_location = ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (*expr_p)->common.code))])) != 0) ? (*expr_p)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) ? *(*expr_p)->exp.locus : unknown_location);
  do
    {
      while (tree_ssa_useless_type_conversion (*expr_p)) *expr_p = ((*expr_p)->exp.operands[0]);
      save_expr = *expr_p;
      if (save_expr == global_trees[TI_ERROR_MARK]
   || (((save_expr)->common.type)
       && ((save_expr)->common.type) == global_trees[TI_ERROR_MARK]))
 {
   ret = GS_ERROR;
   break;
 }
      ret = lang_hooks.gimplify_expr (expr_p, pre_p, post_p);
      if (ret == GS_OK)
 {
   if (*expr_p == (tree) ((void *)0))
     break;
   if (*expr_p != save_expr)
     continue;
 }
      else if (ret != GS_UNHANDLED)
 break;
      ret = GS_OK;
      switch (((enum tree_code) (*expr_p)->common.code))
 {
 case POSTINCREMENT_EXPR:
 case POSTDECREMENT_EXPR:
 case PREINCREMENT_EXPR:
 case PREDECREMENT_EXPR:
   ret = gimplify_self_mod_expr (expr_p, pre_p, post_p,
     fallback != fb_none);
   break;
 case ARRAY_REF:
 case ARRAY_RANGE_REF:
 case REALPART_EXPR:
 case IMAGPART_EXPR:
 case COMPONENT_REF:
   ret = gimplify_compound_lval (expr_p, pre_p, post_p,
     fallback ? fallback : fb_rvalue);
   break;
 case COND_EXPR:
   ret = gimplify_cond_expr (expr_p, pre_p, (tree) ((void *)0));
   break;
 case CALL_EXPR:
   ret = gimplify_call_expr (expr_p, pre_p, fallback != fb_none);
   break;
 case TREE_LIST:
   fancy_abort ("gcc.c", 114932, "?");
 case COMPOUND_EXPR:
   ret = gimplify_compound_expr (expr_p, pre_p, fallback != fb_none);
   break;
 case MODIFY_EXPR:
 case INIT_EXPR:
   ret = gimplify_modify_expr (expr_p, pre_p, post_p,
          fallback != fb_none);
   break;
 case TRUTH_ANDIF_EXPR:
 case TRUTH_ORIF_EXPR:
   ret = gimplify_boolean_expr (expr_p);
   break;
 case TRUTH_NOT_EXPR:
   ((*expr_p)->exp.operands[0])
     = gimple_boolify (((*expr_p)->exp.operands[0]));
   ret = gimplify_expr (&((*expr_p)->exp.operands[0]), pre_p, post_p,
          is_gimple_val, fb_rvalue);
   recalculate_side_effects (*expr_p);
   break;
 case ADDR_EXPR:
   ret = gimplify_addr_expr (expr_p, pre_p, post_p);
   break;
 case VA_ARG_EXPR:
   ret = gimplify_va_arg_expr (expr_p, pre_p, post_p);
   break;
 case VIEW_CONVERT_EXPR:
   if ((((enum tree_code) (((*expr_p)->common.type))->common.code) == VOID_TYPE)
       || fallback == fb_none)
     {
       *expr_p = ((*expr_p)->exp.operands[0]);
       break;
     }
   if ((((((*expr_p)->common.type))->type.mode) == BLKmode
        && ((((((*expr_p)->exp.operands[0]))->common.type))->type.mode) == BLKmode)
       || !((((((*expr_p)->common.type))->type.size))->common.constant_flag)
       || !((((((((*expr_p)->exp.operands[0]))->common.type))->type.size))->common.constant_flag)
                                     )
     {
       tree restype = ((*expr_p)->common.type);
       *expr_p = build1_stat (INDIRECT_REF,((*expr_p)->common.type),fold_convert (build_pointer_type (restype), build_fold_addr_expr (((*expr_p)->exp.operands[0]))) )
                                        ;
       break;
     }
   goto unary;
 case CONVERT_EXPR:
 case NOP_EXPR:
   if ((((enum tree_code) (*expr_p)->common.code) == NOP_EXPR && (((enum tree_code) (((*expr_p)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((*expr_p)->exp.operands[0]))))
     {
       ret = GS_ALL_DONE;
       break;
     }
   if ((((enum tree_code) (((*expr_p)->common.type))->common.code) == VOID_TYPE)
       || fallback == fb_none)
     {
       *expr_p = ((*expr_p)->exp.operands[0]);
       break;
     }
   ret = gimplify_conversion (expr_p);
   if (ret == GS_ERROR)
     break;
   if (*expr_p != save_expr)
     break;
 case FIX_TRUNC_EXPR:
 case FIX_CEIL_EXPR:
 case FIX_FLOOR_EXPR:
 case FIX_ROUND_EXPR:
 unary:
   ret = gimplify_expr (&((*expr_p)->exp.operands[0]), pre_p, post_p,
          is_gimple_val, fb_rvalue);
   recalculate_side_effects (*expr_p);
   break;
 case INDIRECT_REF:
   ret = gimplify_expr (&((*expr_p)->exp.operands[0]), pre_p, post_p,
          is_gimple_reg, fb_rvalue);
   recalculate_side_effects (*expr_p);
   break;
 case INTEGER_CST:
 case REAL_CST:
 case STRING_CST:
 case COMPLEX_CST:
 case VECTOR_CST:
   ret = GS_ALL_DONE;
   break;
 case CONST_DECL:
   *expr_p = ((*expr_p)->decl.initial);
   break;
 case DECL_EXPR:
   ret = gimplify_decl_expr (expr_p);
   break;
 case EXC_PTR_EXPR:
   ret = GS_ALL_DONE;
   break;
 case BIND_EXPR:
   ret = gimplify_bind_expr (expr_p, ((void *)0), pre_p);
   break;
 case LOOP_EXPR:
   ret = gimplify_loop_expr (expr_p, pre_p);
   break;
 case SWITCH_EXPR:
   ret = gimplify_switch_expr (expr_p, pre_p);
   break;
 case LABELED_BLOCK_EXPR:
   ret = gimplify_labeled_block_expr (expr_p);
   break;
 case EXIT_BLOCK_EXPR:
   ret = gimplify_exit_block_expr (expr_p);
   break;
 case EXIT_EXPR:
   ret = gimplify_exit_expr (expr_p);
   break;
 case GOTO_EXPR:
   if (((enum tree_code) ((((*expr_p))->exp.operands[0]))->common.code) != LABEL_DECL)
     ret = gimplify_expr (&(((*expr_p))->exp.operands[0]), pre_p,
     ((void *)0), is_gimple_val, fb_rvalue);
   break;
 case LABEL_EXPR:
   ret = GS_ALL_DONE;
   break;
 case CASE_LABEL_EXPR:
   ret = gimplify_case_label_expr (expr_p);
   break;
 case RETURN_EXPR:
   ret = gimplify_return_expr (*expr_p, pre_p);
   break;
 case CONSTRUCTOR:
   if (fallback == fb_none)
     {
       for (tmp = ((*expr_p)->exp.operands[0]); tmp;
     tmp = ((tmp)->common.chain))
  if (((((tmp)->list.value))->common.side_effects_flag))
    gimplify_expr (&((tmp)->list.value), pre_p, post_p,
     gimple_test_f, fallback);
       *expr_p = (tree) ((void *)0);
     }
   ret = GS_ALL_DONE;
   break;
 case SAVE_EXPR:
   ret = gimplify_save_expr (expr_p, pre_p, post_p);
   break;
 case BIT_FIELD_REF:
   {
     enum gimplify_status r0, r1, r2;
     r0 = gimplify_expr (&((*expr_p)->exp.operands[0]), pre_p, post_p,
    is_gimple_lvalue, fb_either);
     r1 = gimplify_expr (&((*expr_p)->exp.operands[1]), pre_p, post_p,
    is_gimple_val, fb_rvalue);
     r2 = gimplify_expr (&((*expr_p)->exp.operands[2]), pre_p, post_p,
    is_gimple_val, fb_rvalue);
     recalculate_side_effects (*expr_p);
     ret = ((r0) < (((r1) < (r2) ? (r1) : (r2))) ? (r0) : (((r1) < (r2) ? (r1) : (r2))));
   }
   break;
 case NON_LVALUE_EXPR:
   fancy_abort ("gcc.c", 115154, "?");
   break;
 case ASM_EXPR:
   ret = gimplify_asm_expr (expr_p, pre_p, post_p);
   break;
 case TRY_FINALLY_EXPR:
 case TRY_CATCH_EXPR:
   gimplify_to_stmt_list (&((*expr_p)->exp.operands[0]));
   gimplify_to_stmt_list (&((*expr_p)->exp.operands[1]));
   ret = GS_ALL_DONE;
   break;
 case CLEANUP_POINT_EXPR:
   ret = gimplify_cleanup_point_expr (expr_p, pre_p);
   break;
 case TARGET_EXPR:
   ret = gimplify_target_expr (expr_p, pre_p, post_p);
   break;
 case CATCH_EXPR:
   gimplify_to_stmt_list (&(((*expr_p))->exp.operands[1]));
   ret = GS_ALL_DONE;
   break;
 case EH_FILTER_EXPR:
   gimplify_to_stmt_list (&(((*expr_p))->exp.operands[1]));
   ret = GS_ALL_DONE;
   break;
 case OBJ_TYPE_REF:
   {
     enum gimplify_status r0, r1;
     r0 = gimplify_expr (&(((*expr_p))->exp.operands[1]), pre_p, post_p,
           is_gimple_val, fb_rvalue);
     r1 = gimplify_expr (&(((*expr_p))->exp.operands[0]), pre_p, post_p,
           is_gimple_val, fb_rvalue);
     ret = ((r0) < (r1) ? (r0) : (r1));
   }
   break;
 case MIN_EXPR:
 case MAX_EXPR:
   ret = gimplify_minimax_expr (expr_p, pre_p, post_p);
   break;
 case LABEL_DECL:
   ((*expr_p)->common.side_effects_flag) = 1;
   ret = GS_ALL_DONE;
   break;
 case STATEMENT_LIST:
   ret = gimplify_statement_list (expr_p);
   break;
 case VAR_DECL:
   tmp = *expr_p;
   if (!((tmp)->common.static_flag) && !((tmp)->decl.external_flag)
       && decl_function_context (tmp) == current_function_decl
       && !((tmp)->decl.seen_in_bind_expr))
     {
       ret = GS_ERROR;
     }
   else
     ret = GS_ALL_DONE;
   break;
 default:
   if (tree_code_type[(int) (((enum tree_code) (*expr_p)->common.code))] == '<'
       && ((((enum tree_code) (((((*expr_p)->exp.operands[1]))->common.type))->common.code) == ARRAY_TYPE || ((enum tree_code) (((((*expr_p)->exp.operands[1]))->common.type))->common.code) == RECORD_TYPE || ((enum tree_code) (((((*expr_p)->exp.operands[1]))->common.type))->common.code) == UNION_TYPE || ((enum tree_code) (((((*expr_p)->exp.operands[1]))->common.type))->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (((((*expr_p)->exp.operands[1]))->common.type))->common.code) == SET_TYPE)))
     ret = gimplify_variable_sized_compare (expr_p);
   else if (tree_code_type[(int) (((enum tree_code) (*expr_p)->common.code))] == '1')
     ret = gimplify_expr (&((*expr_p)->exp.operands[0]), pre_p,
     post_p, is_gimple_val, fb_rvalue);
   else if (tree_code_type[(int) (((enum tree_code) (*expr_p)->common.code))] == '2'
     || tree_code_type[(int) (((enum tree_code) (*expr_p)->common.code))] == '<'
     || ((enum tree_code) (*expr_p)->common.code) == TRUTH_AND_EXPR
     || ((enum tree_code) (*expr_p)->common.code) == TRUTH_OR_EXPR
     || ((enum tree_code) (*expr_p)->common.code) == TRUTH_XOR_EXPR)
     {
       enum gimplify_status r0, r1;
       r0 = gimplify_expr (&((*expr_p)->exp.operands[0]), pre_p,
      post_p, is_gimple_val, fb_rvalue);
       r1 = gimplify_expr (&((*expr_p)->exp.operands[1]), pre_p,
      post_p, is_gimple_val, fb_rvalue);
       ret = ((r0) < (r1) ? (r0) : (r1));
     }
   else if (tree_code_type[(int) (((enum tree_code) (*expr_p)->common.code))] == 'd'
     || tree_code_type[(int) (((enum tree_code) (*expr_p)->common.code))] == 'c')
     {
       ret = GS_ALL_DONE;
       break;
     }
   else
     fancy_abort ("gcc.c", 115274, "?");
   recalculate_side_effects (*expr_p);
   break;
 }
      if (ret == GS_OK && (*expr_p == ((void *)0) || *expr_p == save_expr))
 ret = GS_ALL_DONE;
    }
  while (ret == GS_OK);
  if (ret == GS_ERROR)
    {
      if (is_statement)
 *expr_p = ((void *)0);
      goto out;
    }
  if (fallback == fb_none && *expr_p && !is_gimple_stmt (*expr_p))
    {
      if (!((*expr_p)->common.side_effects_flag))
 *expr_p = ((void *)0);
      else if (!((*expr_p)->common.volatile_flag))
 {
   enum tree_code code = ((enum tree_code) (*expr_p)->common.code);
   if (code == COMPONENT_REF
       || code == REALPART_EXPR || code == IMAGPART_EXPR)
     gimplify_expr (&((*expr_p)->exp.operands[0]), pre_p, post_p,
      gimple_test_f, fallback);
   else if (code == ARRAY_REF || code == ARRAY_RANGE_REF)
     {
       gimplify_expr (&((*expr_p)->exp.operands[0]), pre_p, post_p,
        gimple_test_f, fallback);
       gimplify_expr (&((*expr_p)->exp.operands[1]), pre_p, post_p,
      gimple_test_f, fallback);
     }
   else
     fancy_abort ("gcc.c", 115328, "?");
   *expr_p = ((void *)0);
 }
      else if ((((((*expr_p)->common.type))->type.size) != (tree) ((void *)0)))
 {
   tree tmp = create_tmp_var (((*expr_p)->common.type), "vol");
   *expr_p = build (MODIFY_EXPR, ((tmp)->common.type), tmp, *expr_p);
 }
      else
 *expr_p = ((void *)0);
    }
  if (fallback == fb_none || is_statement)
    {
      if (internal_pre || internal_post)
 {
   append_to_statement_list (*expr_p, &internal_pre);
   append_to_statement_list (internal_post, &internal_pre);
   annotate_all_with_locus (&internal_pre, input_location);
   *expr_p = internal_pre;
 }
      else if (!*expr_p)
 ;
      else if (((enum tree_code) (*expr_p)->common.code) == STATEMENT_LIST)
 annotate_all_with_locus (expr_p, input_location);
      else
 annotate_one_with_locus (*expr_p, input_location);
      goto out;
    }
  if (!internal_post && (*gimple_test_f) (*expr_p))
    goto out;
  if ((fallback & fb_lvalue) && !internal_post
      && is_gimple_addr_expr_arg (*expr_p))
    {
      tmp = build_fold_addr_expr (*expr_p);
      gimplify_expr (&tmp, pre_p, post_p, is_gimple_reg, fb_rvalue);
      *expr_p = build1_stat (INDIRECT_REF,((((tmp)->common.type))->common.type),tmp );
    }
  else if ((fallback & fb_rvalue) && is_gimple_rhs (*expr_p))
    {
      if (internal_post || (fallback & fb_lvalue))
 *expr_p = get_initialized_tmp_var (*expr_p, pre_p, post_p);
      else
 *expr_p = get_formal_tmp_var (*expr_p, pre_p);
    }
  else if (fallback & fb_mayfail)
    {
      ret = GS_ERROR;
      goto out;
    }
  else
    {
      fprintf (stderr, "gimplification failed:\n");
      print_generic_expr (stderr, *expr_p, 0);
      debug_tree (*expr_p);
      fancy_abort ("gcc.c", 115422, "?");
    }
  if (internal_post)
    {
      annotate_all_with_locus (&internal_post, input_location);
      append_to_statement_list (internal_post, pre_p);
    }
 out:
  input_location = saved_location;
  return ret;
}
void
gimplify_type_sizes (tree type, tree *list_p)
{
  tree field;
  switch (((enum tree_code) (type)->common.code))
    {
    case ERROR_MARK:
      return;
    case INTEGER_TYPE:
    case ENUMERAL_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
    case REAL_TYPE:
      gimplify_one_sizepos (&((type)->type.minval), list_p);
      gimplify_one_sizepos (&((type)->type.maxval), list_p);
      break;
    case ARRAY_TYPE:
      gimplify_type_sizes (((type)->type.values), list_p);
      break;
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      for (field = ((type)->type.values); field; field = ((field)->common.chain))
 if (((enum tree_code) (field)->common.code) == FIELD_DECL)
   gimplify_one_sizepos (&((field)->decl.arguments), list_p);
      break;
    default:
      break;
    }
  gimplify_one_sizepos (&((type)->type.size), list_p);
  gimplify_one_sizepos (&((type)->type.size_unit), list_p);
}
void
gimplify_one_sizepos (tree *expr_p, tree *stmt_p)
{
  if (*expr_p == (tree) ((void *)0) || ((*expr_p)->common.constant_flag)
      || ((enum tree_code) (*expr_p)->common.code) == VAR_DECL
      || ((*expr_p) != 0 && ! ((*expr_p)->common.constant_flag) && contains_placeholder_p (*expr_p)))
    return;
  gimplify_expr (expr_p, stmt_p, ((void *)0), is_gimple_val, fb_rvalue);
}
void
gimplify_body (tree *body_p, tree fndecl)
{
  location_t saved_location = input_location;
  tree body;
  timevar_push (TV_TREE_GIMPLIFY);
  push_gimplify_context ();
  unshare_body (body_p, fndecl);
  unvisit_body (body_p, fndecl);
  input_location = ((fndecl)->decl.locus);
  gimplify_stmt (body_p);
  body = *body_p;
  unshare_all_trees (body);
  if (!body)
    body = alloc_stmt_list ();
  else if (((enum tree_code) (body)->common.code) == STATEMENT_LIST)
    {
      tree t = expr_only (*body_p);
      if (t)
 body = t;
    }
  if (((enum tree_code) (body)->common.code) != BIND_EXPR)
    {
      tree b = build (BIND_EXPR, global_trees[TI_VOID_TYPE], (tree) ((void *)0),
        (tree) ((void *)0), (tree) ((void *)0));
      ((b)->common.side_effects_flag) = 1;
      append_to_statement_list_force (body, &((((b))->exp.operands[1])));
      body = b;
    }
  *body_p = body;
  pop_gimplify_context (body);
  timevar_pop (TV_TREE_GIMPLIFY);
  input_location = saved_location;
}
void
gimplify_function_tree (tree fndecl)
{
  tree oldfn;
  oldfn = current_function_decl;
  current_function_decl = fndecl;
  gimplify_body (&((fndecl)->decl.saved_tree), fndecl);
  if (flag_instrument_function_entry_exit
      && ! ((fndecl)->decl.no_instrument_function_entry_exit))
    {
      tree tf, x, bind;
      tf = build (TRY_FINALLY_EXPR, global_trees[TI_VOID_TYPE], ((void *)0), ((void *)0));
      ((tf)->common.side_effects_flag) = 1;
      x = ((fndecl)->decl.saved_tree);
      append_to_statement_list (x, &((tf)->exp.operands[0]));
      x = implicit_built_in_decls[BUILT_IN_PROFILE_FUNC_EXIT];
      x = build_function_call_expr (x, ((void *)0));
      append_to_statement_list (x, &((tf)->exp.operands[1]));
      bind = build (BIND_EXPR, global_trees[TI_VOID_TYPE], ((void *)0), ((void *)0), ((void *)0));
      ((bind)->common.side_effects_flag) = 1;
      x = implicit_built_in_decls[BUILT_IN_PROFILE_FUNC_ENTER];
      x = build_function_call_expr (x, ((void *)0));
      append_to_statement_list (x, &((((bind))->exp.operands[1])));
      append_to_statement_list (tf, &((((bind))->exp.operands[1])));
      ((fndecl)->decl.saved_tree) = bind;
    }
  current_function_decl = oldfn;
}
const struct ggc_root_tab gt_ggc_r_gt_gimplify_h[] = {
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_gimplify_h[] = {
  { &tmp_var_id_num, 1, sizeof (tmp_var_id_num), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static int op_prio (tree);
static const char *op_symbol (tree);
static void pretty_print_string (pretty_printer *, const char*);
static void print_call_name (pretty_printer *, tree);
static void newline_and_indent (pretty_printer *, int);
static void maybe_init_pretty_print (FILE *);
static void print_declaration (pretty_printer *, tree, int, int);
static void print_struct_decl (pretty_printer *, tree, int, int);
static void do_niy (pretty_printer *, tree);
static void dump_vops (pretty_printer *, tree, int, int);
static void dump_generic_bb_buff (pretty_printer *, basic_block, int, int);
static pretty_printer buffer;
static int initialized = 0;
static unsigned char dumping_stmts;
static void
do_niy (pretty_printer *buffer, tree node)
{
  int i, len;
  pp_base_string ((buffer), "<<< Unknown tree: ");
  pp_base_string ((buffer), tree_code_name[(int) ((enum tree_code) (node)->common.code)]);
  if ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (node)->common.code))])) != 0))
    {
      len = first_rtl_op (((enum tree_code) (node)->common.code));
      for (i = 0; i < len; ++i)
 {
   newline_and_indent (buffer, 2);
   dump_generic_node (buffer, ((node)->exp.operands[i]), 2, 0, 0);
 }
    }
  pp_base_string ((buffer), " >>>\n");
}
void
debug_generic_expr (tree t)
{
  print_generic_expr (stderr, t, (1 << 6)|(1 << 8));
  fprintf (stderr, "\n");
}
void
debug_generic_stmt (tree t)
{
  print_generic_stmt (stderr, t, (1 << 6)|(1 << 8));
  fprintf (stderr, "\n");
}
void
print_generic_decl (FILE *file, tree decl, int flags)
{
  maybe_init_pretty_print (file);
  dumping_stmts = 1;
  print_declaration (&buffer, decl, 2, flags);
  pp_write_text_to_stream (&buffer);
}
void
print_generic_stmt (FILE *file, tree t, int flags)
{
  maybe_init_pretty_print (file);
  dumping_stmts = 1;
  dump_generic_node (&buffer, t, 0, flags, 1);
  pp_base_flush ((&buffer));
}
void
print_generic_stmt_indented (FILE *file, tree t, int flags, int indent1)
{
  int i;
  maybe_init_pretty_print (file);
  dumping_stmts = 1;
  for (i = 0; i < indent1; i++)
    pp_base_character ((&buffer), ' ');
  dump_generic_node (&buffer, t, indent1, flags, 1);
  pp_base_flush ((&buffer));
}
void
print_generic_expr (FILE *file, tree t, int flags)
{
  maybe_init_pretty_print (file);
  dumping_stmts = 0;
  dump_generic_node (&buffer, t, 0, flags, 0);
}
static void
dump_decl_name (pretty_printer *buffer, tree node, int flags)
{
  if (((node)->decl.name))
    pp_base_append_text ((buffer), ((const char *) (((node)->decl.name))->identifier.id.str), ((const char *) (((node)->decl.name))->identifier.id.str) + ((((node)->decl.name))->identifier.id.len));
  if ((flags & (1 << 8))
      || ((node)->decl.name) == (tree) ((void *)0))
    {
      if (((enum tree_code) (node)->common.code) == LABEL_DECL
   && ((node)->decl.pointer_alias_set) != -1)
 pp_printf (buffer, "<L%ld>",
     ((node)->decl.pointer_alias_set));
      else
 pp_printf (buffer, "<D%u>", ((node)->decl.uid));
    }
}
static void
dump_function_declaration (pretty_printer *buffer, tree node,
      int spc, int flags)
{
  unsigned char wrote_arg = 0;
  tree arg;
  pp_base_character ((buffer), ' ');
  pp_base_character ((buffer), '(');
  arg = ((node)->type.values);
  while (arg && ((arg)->common.chain) && arg != global_trees[TI_ERROR_MARK])
    {
      wrote_arg = 1;
      dump_generic_node (buffer, ((arg)->list.value), spc, flags, 0);
      arg = ((arg)->common.chain);
      if (((arg)->common.chain) && ((enum tree_code) (((arg)->common.chain))->common.code) == TREE_LIST)
 {
   pp_base_character ((buffer), ',');
   pp_base_character ((buffer), ' ');
 }
    }
  if (!wrote_arg)
    pp_base_string ((buffer), "void");
  pp_base_character ((buffer), ')');
}
int
dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
     unsigned char is_stmt)
{
  tree type;
  tree op0, op1;
  const char *str;
  unsigned char is_expr;
  if (node == (tree) ((void *)0))
    return spc;
  is_expr = (strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (node)->common.code))])) != 0);
  if (((enum tree_code) (node)->common.code) != ERROR_MARK
      && is_gimple_stmt (node)
      && (flags & (1 << 6))
      && stmt_ann (node))
    dump_vops (buffer, node, spc, flags);
  if (dumping_stmts
      && (flags & (1 << 7))
      && (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (node)->common.code))])) != 0) ? (node)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    {
      expanded_location xloc = (((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (node)->common.code))])) != 0) ? (node)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) ? *(node)->exp.locus : unknown_location));
      pp_base_character ((buffer), '[');
      if (xloc.file)
 {
   pp_base_string ((buffer), xloc.file);
   pp_base_string ((buffer), " : ");
 }
      do { sprintf ((buffer)->buffer->digit_buffer, "%d", xloc.line); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0);
      pp_base_string ((buffer), "] ");
    }
  switch (((enum tree_code) (node)->common.code))
    {
    case ERROR_MARK:
      pp_base_string ((buffer), "<<< error >>>");
      break;
    case IDENTIFIER_NODE:
      pp_base_append_text ((buffer), ((const char *) (node)->identifier.id.str), ((const char *) (node)->identifier.id.str) + ((node)->identifier.id.len));
      break;
    case TREE_LIST:
      while (node && node != global_trees[TI_ERROR_MARK])
 {
   if (((node)->list.purpose))
     {
       dump_generic_node (buffer, ((node)->list.purpose), spc, flags, 0);
       pp_base_character ((buffer), ' ');
     }
   dump_generic_node (buffer, ((node)->list.value), spc, flags, 0);
   node = ((node)->common.chain);
   if (node && ((enum tree_code) (node)->common.code) == TREE_LIST)
     {
       pp_base_character ((buffer), ',');
       pp_base_character ((buffer), ' ');
     }
 }
      break;
    case TREE_VEC:
      dump_generic_node (buffer, (((node))->common.type), spc, flags, 0);
      break;
    case BLOCK:
      do_niy(buffer,node);
      break;
    case VOID_TYPE:
    case INTEGER_TYPE:
    case REAL_TYPE:
    case COMPLEX_TYPE:
    case VECTOR_TYPE:
    case ENUMERAL_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
      {
 unsigned int quals = ((((node)->common.readonly_flag) * 0x1) | (((node)->common.volatile_flag) * 0x2) | (((node)->type.restrict_flag) * 0x4));
 char class;
 if (quals & 0x1)
   pp_base_string ((buffer), "const ");
 else if (quals & 0x2)
   pp_base_string ((buffer), "volatile ");
 else if (quals & 0x4)
   pp_base_string ((buffer), "restrict ");
 class = tree_code_type[(int) (((enum tree_code) (node)->common.code))];
 if (class == 'd')
   {
     if (((node)->decl.name))
       dump_decl_name (buffer, node, flags);
     else
              pp_base_string ((buffer), "<unnamed type decl>");
   }
 else if (class == 't')
   {
     if (((node)->type.name))
       {
  if (((enum tree_code) (((node)->type.name))->common.code) == IDENTIFIER_NODE)
    pp_base_append_text ((buffer), ((const char *) (((node)->type.name))->identifier.id.str), ((const char *) (((node)->type.name))->identifier.id.str) + ((((node)->type.name))->identifier.id.len));
  else if (((enum tree_code) (((node)->type.name))->common.code) == TYPE_DECL
    && ((((node)->type.name))->decl.name))
    dump_decl_name (buffer, ((node)->type.name), flags);
  else
                  pp_base_string ((buffer), "<unnamed type>");
       }
     else
              pp_base_string ((buffer), "<unnamed type>");
   }
 break;
      }
    case POINTER_TYPE:
    case REFERENCE_TYPE:
      str = (((enum tree_code) (node)->common.code) == POINTER_TYPE ? "*" : "&");
      if (((enum tree_code) (((node)->common.type))->common.code) == FUNCTION_TYPE)
        {
   tree fnode = ((node)->common.type);
   dump_generic_node (buffer, ((fnode)->common.type), spc, flags, 0);
   pp_base_character ((buffer), ' ');
   pp_base_character ((buffer), '(');
   pp_base_string ((buffer), str);
   if (((node)->type.name) && ((((node)->type.name))->decl.name))
     dump_decl_name (buffer, ((node)->type.name), flags);
   else
     pp_printf (buffer, "<T%x>", ((node)->type.uid));
   pp_base_character ((buffer), ')');
   dump_function_declaration (buffer, fnode, spc, flags);
 }
      else
        {
   unsigned int quals = ((((node)->common.readonly_flag) * 0x1) | (((node)->common.volatile_flag) * 0x2) | (((node)->type.restrict_flag) * 0x4));
          dump_generic_node (buffer, ((node)->common.type), spc, flags, 0);
   pp_base_character ((buffer), ' ');
   pp_base_string ((buffer), str);
   if (quals & 0x1)
     pp_base_string ((buffer), " const");
   else if (quals & 0x2)
     pp_base_string ((buffer), "volatile");
   else if (quals & 0x4)
     pp_base_string ((buffer), " restrict");
 }
      break;
    case OFFSET_TYPE:
      do_niy(buffer,node);
      break;
    case METHOD_TYPE:
      dump_decl_name (buffer, ((((node)->type.maxval))->type.name), flags);
      pp_base_string ((buffer), "::");
      break;
    case FILE_TYPE:
      do_niy(buffer,node);
      break;
    case ARRAY_TYPE:
      {
 tree tmp;
 for (tmp = ((node)->common.type); ((enum tree_code) (tmp)->common.code) == ARRAY_TYPE;
      tmp = ((tmp)->common.type))
   ;
 dump_generic_node (buffer, tmp, spc, flags, 0);
 for (tmp = node; ((enum tree_code) (tmp)->common.code) == ARRAY_TYPE;
      tmp = ((tmp)->common.type))
   {
     tree domain = ((tmp)->type.values);
     pp_base_character ((buffer), '[');
     if (domain)
       {
  if (((domain)->type.minval)
      && !integer_zerop (((domain)->type.minval)))
    {
      dump_generic_node (buffer, ((domain)->type.minval),
           spc, flags, 0);
      pp_base_string ((buffer), " .. ");
    }
  if (((domain)->type.maxval))
    dump_generic_node (buffer, ((domain)->type.maxval),
         spc, flags, 0);
       }
     else
       pp_base_string ((buffer), "<unknown>");
     pp_base_character ((buffer), ']');
   }
 break;
      }
    case SET_TYPE:
      do_niy(buffer,node);
      break;
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      if (((enum tree_code) (node)->common.code) == RECORD_TYPE)
 pp_base_string ((buffer), "struct ");
      else if (((enum tree_code) (node)->common.code) == UNION_TYPE)
 pp_base_string ((buffer), "union ");
      if (((node)->type.name))
 dump_generic_node (buffer, ((node)->type.name), spc, flags, 0);
      else
 print_struct_decl (buffer, node, spc, flags);
      break;
    case LANG_TYPE:
      do_niy(buffer,node);
      break;
    case INTEGER_CST:
      if (((enum tree_code) (((node)->common.type))->common.code) == POINTER_TYPE)
 {
   do { sprintf ((buffer)->buffer->digit_buffer, "%ld", (long) (((node)->int_cst.int_cst).low)); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0);
   pp_base_string ((buffer), "B");
 }
      else if (! host_integerp (node, 0))
 {
   tree val = node;
   if (tree_int_cst_sgn (val) < 0)
     {
       pp_base_character ((buffer), '-');
       val = build_int_2_wide ((unsigned long) (-(((val)->int_cst.int_cst).low)), (long) (~(((val)->int_cst.int_cst).high) + !(((val)->int_cst.int_cst).low)))
                               ;
     }
   {
     static char format[10];
     if (!format[0])
       sprintf (format, "%%x%%0%dx", (8 * 4) / 4);
     sprintf ((buffer)->buffer->digit_buffer, format,
       (((val)->int_cst.int_cst).high),
       (((val)->int_cst.int_cst).low));
     pp_base_string ((buffer), (buffer)->buffer->digit_buffer);
   }
 }
      else
 do { sprintf ((buffer)->buffer->digit_buffer, "%ld", (long) (((node)->int_cst.int_cst).low)); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0);
      break;
    case REAL_CST:
      {
 struct real_value d;
 if (((node)->common.public_flag))
   pp_base_string ((buffer), " overflow");
 d = (*((node)->real_cst.real_cst_ptr));
 if (real_isinf (&(d)))
   pp_base_string ((buffer), " Inf");
 else if (real_isnan (&(d)))
   pp_base_string ((buffer), " Nan");
 else
   {
     char string1[100];
     real_to_decimal (string1, &d, sizeof (string1), 0, 1);
     pp_base_string ((buffer), string1);
   }
 break;
      }
    case COMPLEX_CST:
      pp_base_string ((buffer), "__complex__ (");
      dump_generic_node (buffer, ((node)->complex.real), spc, flags, 0);
      pp_base_string ((buffer), ", ");
      dump_generic_node (buffer, ((node)->complex.imag), spc, flags, 0);
      pp_base_string ((buffer), ")");
      break;
    case STRING_CST:
      pp_base_string ((buffer), "\"");
      pretty_print_string (buffer, ((node)->string1.pointer));
      pp_base_string ((buffer), "\"");
      break;
    case VECTOR_CST:
      {
 tree elt;
 pp_base_string ((buffer), "{ ");
 for (elt = ((node)->vector.elements); elt; elt = ((elt)->common.chain))
   {
     dump_generic_node (buffer, ((elt)->list.value), spc, flags, 0);
     if (((elt)->common.chain))
       pp_base_string ((buffer), ", ");
   }
 pp_base_string ((buffer), " }");
      }
      break;
    case FUNCTION_TYPE:
      break;
    case FUNCTION_DECL:
    case CONST_DECL:
      dump_decl_name (buffer, node, flags);
      break;
    case LABEL_DECL:
      if (((node)->decl.name))
 dump_decl_name (buffer, node, flags);
      else if (((node)->decl.pointer_alias_set) != -1)
        pp_printf (buffer, "<L%ld>",
     ((node)->decl.pointer_alias_set));
      else
        pp_printf (buffer, "<D%u>", ((node)->decl.uid));
      break;
    case TYPE_DECL:
      if (((((((node)->decl.locus))).line) == 0))
 {
   break;
 }
      if (((node)->decl.name))
 dump_decl_name (buffer, node, flags);
      else
 {
   if ((((enum tree_code) (((node)->common.type))->common.code) == RECORD_TYPE
        || ((enum tree_code) (((node)->common.type))->common.code) == UNION_TYPE)
       && ((((node)->common.type))->type.maxval))
     {
       pp_base_string ((buffer), "class ");
       dump_generic_node (buffer, ((node)->common.type), spc, flags, 0);
     }
   else
     {
       pp_base_string ((buffer), (((enum tree_code) (((node)->common.type))->common.code) == UNION_TYPE ? "union" : "struct "))
                            ;
       dump_generic_node (buffer, ((node)->common.type), spc, flags, 0);
     }
 }
      break;
    case VAR_DECL:
    case PARM_DECL:
    case FIELD_DECL:
    case NAMESPACE_DECL:
      dump_decl_name (buffer, node, flags);
      break;
    case RESULT_DECL:
      pp_base_string ((buffer), "<retval>");
      break;
    case COMPONENT_REF:
      op0 = ((node)->exp.operands[0]);
      str = ".";
      if (((enum tree_code) (op0)->common.code) == INDIRECT_REF)
 {
   op0 = ((op0)->exp.operands[0]);
   str = "->";
 }
      if (op_prio (op0) < op_prio (node))
 pp_base_character ((buffer), '(');
      dump_generic_node (buffer, op0, spc, flags, 0);
      if (op_prio (op0) < op_prio (node))
 pp_base_character ((buffer), ')');
      pp_base_string ((buffer), str);
      dump_generic_node (buffer, ((node)->exp.operands[1]), spc, flags, 0);
      op0 = component_ref_field_offset (node);
      if (op0 && ((enum tree_code) (op0)->common.code) != INTEGER_CST)
 {
   pp_base_string ((buffer), "{off: ");
   dump_generic_node (buffer, op0, spc, flags, 0);
   pp_base_character ((buffer), '}');
 }
      break;
    case BIT_FIELD_REF:
      pp_base_string ((buffer), "BIT_FIELD_REF <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_string ((buffer), ", ");
      dump_generic_node (buffer, ((node)->exp.operands[1]), spc, flags, 0);
      pp_base_string ((buffer), ", ");
      dump_generic_node (buffer, ((node)->exp.operands[2]), spc, flags, 0);
      pp_base_string ((buffer), ">");
      break;
    case BUFFER_REF:
      do_niy(buffer,node);
      break;
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
      op0 = ((node)->exp.operands[0]);
      if (op_prio (op0) < op_prio (node))
 pp_base_character ((buffer), '(');
      dump_generic_node (buffer, op0, spc, flags, 0);
      if (op_prio (op0) < op_prio (node))
 pp_base_character ((buffer), ')');
      pp_base_character ((buffer), '[');
      dump_generic_node (buffer, ((node)->exp.operands[1]), spc, flags, 0);
      if (((enum tree_code) (node)->common.code) == ARRAY_RANGE_REF)
 pp_base_string ((buffer), " ...");
      pp_base_character ((buffer), ']');
      op0 = array_ref_low_bound (node);
      op1 = array_ref_element_size (node);
      if (!integer_zerop (op0)
   || (((((node)->common.type))->type.size_unit)
       && !operand_equal_p (op1, ((((node)->common.type))->type.size_unit), 0)))
 {
   pp_base_string ((buffer), "{lb: ");
   dump_generic_node (buffer, op0, spc, flags, 0);
   pp_base_string ((buffer), " sz: ");
   dump_generic_node (buffer, op1, spc, flags, 0);
   pp_base_character ((buffer), '}');
 }
      break;
    case CONSTRUCTOR:
      {
 tree lnode;
 unsigned char is_struct_init = 0;
 pp_base_character ((buffer), '{');
 lnode = ((node)->exp.operands[0]);
 if (((enum tree_code) (((node)->common.type))->common.code) == RECORD_TYPE
     || ((enum tree_code) (((node)->common.type))->common.code) == UNION_TYPE)
   is_struct_init = 1;
 while (lnode && lnode != global_trees[TI_ERROR_MARK])
   {
     tree val;
     if (((lnode)->list.purpose) && is_struct_init)
       {
  pp_base_character ((buffer), '.');
  dump_generic_node (buffer, ((lnode)->list.purpose), spc, flags, 0);
  pp_base_string ((buffer), "=");
       }
     val = ((lnode)->list.value);
     if (val && ((enum tree_code) (val)->common.code) == ADDR_EXPR)
       if (((enum tree_code) (((val)->exp.operands[0]))->common.code) == FUNCTION_DECL)
  val = ((val)->exp.operands[0]);
     if (val && ((enum tree_code) (val)->common.code) == FUNCTION_DECL)
       {
  dump_decl_name (buffer, val, flags);
       }
     else
       {
  dump_generic_node (buffer, ((lnode)->list.value), spc, flags, 0);
       }
     lnode = ((lnode)->common.chain);
     if (lnode && ((enum tree_code) (lnode)->common.code) == TREE_LIST)
       {
  pp_base_character ((buffer), ',');
  pp_base_character ((buffer), ' ');
       }
   }
 pp_base_character ((buffer), '}');
      }
      break;
    case COMPOUND_EXPR:
      {
 tree *tp;
 if (flags & (1 << 1))
   {
     pp_base_string ((buffer), "<COMPOUND_EXPR>");
     break;
   }
 dump_generic_node (buffer, ((node)->exp.operands[0]),
      spc, flags, dumping_stmts);
 if (dumping_stmts)
   newline_and_indent (buffer, spc);
 else
   {
     pp_base_character ((buffer), ',');
     pp_base_character ((buffer), ' ');
   }
 for (tp = &((node)->exp.operands[1]);
      ((enum tree_code) (*tp)->common.code) == COMPOUND_EXPR;
      tp = &((*tp)->exp.operands[1]))
   {
     dump_generic_node (buffer, ((*tp)->exp.operands[0]),
          spc, flags, dumping_stmts);
     if (dumping_stmts)
       newline_and_indent (buffer, spc);
     else
       {
         pp_base_character ((buffer), ',');
         pp_base_character ((buffer), ' ');
       }
   }
 dump_generic_node (buffer, *tp, spc, flags, dumping_stmts);
      }
      break;
    case STATEMENT_LIST:
      {
 tree_stmt_iterator si;
 unsigned char first = 1;
 if ((flags & (1 << 1)) || !dumping_stmts)
   {
     pp_base_string ((buffer), "<STATEMENT_LIST>");
     break;
   }
 for (si = tsi_start (node); !tsi_end_p (si); tsi_next (&si))
   {
     if (!first)
       newline_and_indent (buffer, spc);
     else
       first = 0;
     dump_generic_node (buffer, tsi_stmt (si), spc, flags, 1);
   }
      }
      break;
    case MODIFY_EXPR:
    case INIT_EXPR:
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_character ((buffer), ' ');
      pp_base_character ((buffer), '=');
      pp_base_character ((buffer), ' ');
      dump_generic_node (buffer, ((node)->exp.operands[1]), spc, flags, 0);
      break;
    case TARGET_EXPR:
      pp_base_string ((buffer), "TARGET_EXPR <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_character ((buffer), ',');
      pp_base_character ((buffer), ' ');
      dump_generic_node (buffer, ((node)->exp.operands[1]), spc, flags, 0);
      pp_base_character ((buffer), '>');
      break;
    case DECL_EXPR:
      print_declaration (buffer, (((node))->exp.operands[0]), spc, flags);
      is_stmt = 0;
      break;
    case COND_EXPR:
      if (((node)->common.type) == ((void *)0) || ((node)->common.type) == global_trees[TI_VOID_TYPE])
 {
   pp_base_string ((buffer), "if (");
   dump_generic_node (buffer, ((((node))->exp.operands[0])), spc, flags, 0);
   pp_base_character ((buffer), ')');
   if (((((node))->exp.operands[1]))
       && ((enum tree_code) (((((node))->exp.operands[1])))->common.code) == GOTO_EXPR
       && ((((node))->exp.operands[2]))
       && ((enum tree_code) (((((node))->exp.operands[2])))->common.code) == GOTO_EXPR)
     {
       pp_base_character ((buffer), ' ');
       dump_generic_node (buffer, ((((node))->exp.operands[1])), 0, flags, 1);
       pp_base_string ((buffer), " else ");
       dump_generic_node (buffer, ((((node))->exp.operands[2])), 0, flags, 1);
     }
   else if (!(flags & (1 << 1)))
     {
       if (((((node))->exp.operands[1])))
  {
    newline_and_indent (buffer, spc+2);
    pp_base_character ((buffer), '{');
    newline_and_indent (buffer, spc+4);
    dump_generic_node (buffer, ((((node))->exp.operands[1])), spc+4,
         flags, 1);
    newline_and_indent (buffer, spc+2);
    pp_base_character ((buffer), '}');
  }
       if (((((node))->exp.operands[2])))
  {
    newline_and_indent (buffer, spc);
    pp_base_string ((buffer), "else");
    newline_and_indent (buffer, spc+2);
    pp_base_character ((buffer), '{');
    newline_and_indent (buffer, spc+4);
    dump_generic_node (buffer, ((((node))->exp.operands[2])), spc+4,
                flags, 1);
    newline_and_indent (buffer, spc+2);
    pp_base_character ((buffer), '}');
  }
     }
   is_expr = 0;
 }
      else
 {
   dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
   pp_base_character ((buffer), ' ');
   pp_base_character ((buffer), '?');
   pp_base_character ((buffer), ' ');
   dump_generic_node (buffer, ((node)->exp.operands[1]), spc, flags, 0);
   pp_base_character ((buffer), ' ');
   pp_base_character ((buffer), ':');
   pp_base_character ((buffer), ' ');
   dump_generic_node (buffer, ((node)->exp.operands[2]), spc, flags, 0);
 }
      break;
    case BIND_EXPR:
      pp_base_character ((buffer), '{');
      if (!(flags & (1 << 1)))
 {
   if (((((node))->exp.operands[0])))
     {
       pp_base_newline ((buffer));
       for (op0 = ((((node))->exp.operands[0])); op0; op0 = ((op0)->common.chain))
  {
    print_declaration (buffer, op0, spc+2, flags);
    pp_base_newline ((buffer));
  }
     }
   newline_and_indent (buffer, spc+2);
   dump_generic_node (buffer, ((((node))->exp.operands[1])), spc+2, flags, 1);
   newline_and_indent (buffer, spc);
   pp_base_character ((buffer), '}');
 }
      is_expr = 0;
      break;
    case CALL_EXPR:
      print_call_name (buffer, node);
      pp_base_character ((buffer), ' ');
      pp_base_character ((buffer), '(');
      op1 = ((node)->exp.operands[1]);
      if (op1)
 dump_generic_node (buffer, op1, spc, flags, 0);
      pp_base_character ((buffer), ')');
      op1 = ((node)->exp.operands[2]);
      if (op1)
 {
   pp_base_string ((buffer), " [static-chain: ");
   dump_generic_node (buffer, op1, spc, flags, 0);
   pp_base_character ((buffer), ']');
 }
      if (((node)->common.addressable_flag))
 pp_base_string ((buffer), " [tail call]");
      break;
    case WITH_CLEANUP_EXPR:
      do_niy(buffer,node);
      break;
    case CLEANUP_POINT_EXPR:
      pp_base_string ((buffer), "<<cleanup_point ");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_string ((buffer), ">>");
      break;
    case PLACEHOLDER_EXPR:
      pp_base_string ((buffer), "<PLACEHOLDER_EXPR ");
      dump_generic_node (buffer, ((node)->common.type), spc, flags, 0);
      pp_base_character ((buffer), '>');
      break;
    case MULT_EXPR:
    case PLUS_EXPR:
    case MINUS_EXPR:
    case TRUNC_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case TRUNC_MOD_EXPR:
    case CEIL_MOD_EXPR:
    case FLOOR_MOD_EXPR:
    case ROUND_MOD_EXPR:
    case RDIV_EXPR:
    case EXACT_DIV_EXPR:
    case LSHIFT_EXPR:
    case RSHIFT_EXPR:
    case LROTATE_EXPR:
    case RROTATE_EXPR:
    case BIT_IOR_EXPR:
    case BIT_XOR_EXPR:
    case BIT_AND_EXPR:
    case TRUTH_ANDIF_EXPR:
    case TRUTH_ORIF_EXPR:
    case TRUTH_AND_EXPR:
    case TRUTH_OR_EXPR:
    case TRUTH_XOR_EXPR:
    case LT_EXPR:
    case LE_EXPR:
    case GT_EXPR:
    case GE_EXPR:
    case EQ_EXPR:
    case NE_EXPR:
    case UNLT_EXPR:
    case UNLE_EXPR:
    case UNGT_EXPR:
    case UNGE_EXPR:
    case UNEQ_EXPR:
    case LTGT_EXPR:
    case ORDERED_EXPR:
    case UNORDERED_EXPR:
      {
 const char *op = op_symbol (node);
 op0 = ((node)->exp.operands[0]);
 op1 = ((node)->exp.operands[1]);
 if (op_prio (op0) < op_prio (node))
   {
     pp_base_character ((buffer), '(');
     dump_generic_node (buffer, op0, spc, flags, 0);
     pp_base_character ((buffer), ')');
   }
 else
   dump_generic_node (buffer, op0, spc, flags, 0);
 pp_base_character ((buffer), ' ');
 pp_base_string ((buffer), op);
 pp_base_character ((buffer), ' ');
 if (op_prio (op1) < op_prio (node))
   {
     pp_base_character ((buffer), '(');
     dump_generic_node (buffer, op1, spc, flags, 0);
     pp_base_character ((buffer), ')');
   }
 else
   dump_generic_node (buffer, op1, spc, flags, 0);
      }
      break;
    case NEGATE_EXPR:
    case BIT_NOT_EXPR:
    case TRUTH_NOT_EXPR:
    case ADDR_EXPR:
    case REFERENCE_EXPR:
    case PREDECREMENT_EXPR:
    case PREINCREMENT_EXPR:
    case INDIRECT_REF:
      if (((enum tree_code) (node)->common.code) == ADDR_EXPR
   && (((enum tree_code) (((node)->exp.operands[0]))->common.code) == STRING_CST
       || ((enum tree_code) (((node)->exp.operands[0]))->common.code) == FUNCTION_DECL))
 ;
      else
 pp_base_string ((buffer), op_symbol (node));
      if (op_prio (((node)->exp.operands[0])) < op_prio (node))
 {
   pp_base_character ((buffer), '(');
   dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
   pp_base_character ((buffer), ')');
 }
      else
 dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      break;
    case POSTDECREMENT_EXPR:
    case POSTINCREMENT_EXPR:
      if (op_prio (((node)->exp.operands[0])) < op_prio (node))
 {
   pp_base_character ((buffer), '(');
   dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
   pp_base_character ((buffer), ')');
 }
      else
 dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_string ((buffer), op_symbol (node));
      break;
    case MIN_EXPR:
      pp_base_string ((buffer), "MIN_EXPR <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_string ((buffer), ", ");
      dump_generic_node (buffer, ((node)->exp.operands[1]), spc, flags, 0);
      pp_base_character ((buffer), '>');
      break;
    case MAX_EXPR:
      pp_base_string ((buffer), "MAX_EXPR <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_string ((buffer), ", ");
      dump_generic_node (buffer, ((node)->exp.operands[1]), spc, flags, 0);
      pp_base_character ((buffer), '>');
      break;
    case ABS_EXPR:
      pp_base_string ((buffer), "ABS_EXPR <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_character ((buffer), '>');
      break;
    case IN_EXPR:
      do_niy(buffer,node);
      break;
    case SET_LE_EXPR:
      do_niy(buffer,node);
      break;
    case CARD_EXPR:
      do_niy(buffer,node);
      break;
    case RANGE_EXPR:
      do_niy(buffer,node);
      break;
    case FIX_TRUNC_EXPR:
    case FIX_CEIL_EXPR:
    case FIX_FLOOR_EXPR:
    case FIX_ROUND_EXPR:
    case FLOAT_EXPR:
    case CONVERT_EXPR:
    case NOP_EXPR:
      type = ((node)->common.type);
      op0 = ((node)->exp.operands[0]);
      if (type != ((op0)->common.type))
 {
   pp_base_character ((buffer), '(');
   dump_generic_node (buffer, type, spc, flags, 0);
   pp_base_string ((buffer), ")");
 }
      if (op_prio (op0) < op_prio (node))
 pp_base_character ((buffer), '(');
      dump_generic_node (buffer, op0, spc, flags, 0);
      if (op_prio (op0) < op_prio (node))
 pp_base_character ((buffer), ')');
      break;
    case VIEW_CONVERT_EXPR:
      pp_base_string ((buffer), "VIEW_CONVERT_EXPR<");
      dump_generic_node (buffer, ((node)->common.type), spc, flags, 0);
      pp_base_string ((buffer), ">(");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_character ((buffer), ')');
      break;
    case NON_LVALUE_EXPR:
      pp_base_string ((buffer), "NON_LVALUE_EXPR <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_character ((buffer), '>');
      break;
    case SAVE_EXPR:
      pp_base_string ((buffer), "SAVE_EXPR <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_character ((buffer), '>');
      break;
    case UNSAVE_EXPR:
      pp_base_string ((buffer), "UNSAVE_EXPR <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_character ((buffer), '>');
      break;
    case ENTRY_VALUE_EXPR:
      do_niy(buffer,node);
      break;
    case COMPLEX_EXPR:
      pp_base_string ((buffer), "COMPLEX_EXPR <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_string ((buffer), ", ");
      dump_generic_node (buffer, ((node)->exp.operands[1]), spc, flags, 0);
      pp_base_string ((buffer), ">");
      break;
    case CONJ_EXPR:
      pp_base_string ((buffer), "CONJ_EXPR <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_string ((buffer), ">");
      break;
    case REALPART_EXPR:
      pp_base_string ((buffer), "REALPART_EXPR <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_string ((buffer), ">");
      break;
    case IMAGPART_EXPR:
      pp_base_string ((buffer), "IMAGPART_EXPR <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_string ((buffer), ">");
      break;
    case VA_ARG_EXPR:
      pp_base_string ((buffer), "VA_ARG_EXPR <");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_string ((buffer), ">");
      break;
    case TRY_FINALLY_EXPR:
    case TRY_CATCH_EXPR:
      pp_base_string ((buffer), "try");
      newline_and_indent (buffer, spc+2);
      pp_base_string ((buffer), "{");
      newline_and_indent (buffer, spc+4);
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc+4, flags, 1);
      newline_and_indent (buffer, spc+2);
      pp_base_string ((buffer), "}");
      newline_and_indent (buffer, spc);
      pp_base_string ((buffer), (((enum tree_code) (node)->common.code) == TRY_CATCH_EXPR) ? "catch" : "finally")
                                                               ;
      newline_and_indent (buffer, spc+2);
      pp_base_string ((buffer), "{");
      newline_and_indent (buffer, spc+4);
      dump_generic_node (buffer, ((node)->exp.operands[1]), spc+4, flags, 1);
      newline_and_indent (buffer, spc+2);
      pp_base_string ((buffer), "}");
      is_expr = 0;
      break;
    case CATCH_EXPR:
      pp_base_string ((buffer), "catch (");
      dump_generic_node (buffer, (((node))->exp.operands[0]), spc+2, flags, 0);
      pp_base_string ((buffer), ")");
      newline_and_indent (buffer, spc+2);
      pp_base_string ((buffer), "{");
      newline_and_indent (buffer, spc+4);
      dump_generic_node (buffer, (((node))->exp.operands[1]), spc+4, flags, 1);
      newline_and_indent (buffer, spc+2);
      pp_base_string ((buffer), "}");
      is_expr = 0;
      break;
    case EH_FILTER_EXPR:
      pp_base_string ((buffer), "<<<eh_filter (");
      dump_generic_node (buffer, (((node))->exp.operands[0]), spc+2, flags, 0);
      pp_base_string ((buffer), ")>>>");
      newline_and_indent (buffer, spc+2);
      pp_base_string ((buffer), "{");
      newline_and_indent (buffer, spc+4);
      dump_generic_node (buffer, (((node))->exp.operands[1]), spc+4, flags, 1);
      newline_and_indent (buffer, spc+2);
      pp_base_string ((buffer), "}");
      is_expr = 0;
      break;
    case GOTO_SUBROUTINE_EXPR:
      do_niy(buffer,node);
      break;
    case LABEL_EXPR:
      op0 = ((node)->exp.operands[0]);
      if (((op0)->decl.name))
 {
   const char *name = ((const char *) (((op0)->decl.name))->identifier.id.str);
   if (strcmp (name, "break") == 0
       || strcmp (name, "continue") == 0)
     break;
 }
      dump_generic_node (buffer, op0, spc, flags, 0);
      pp_base_character ((buffer), ':');
      if (((op0)->decl.nonlocal_flag))
 pp_base_string ((buffer), " [non-local]");
      break;
    case LABELED_BLOCK_EXPR:
      op0 = ((node)->exp.operands[0]);
      if (((op0)->decl.name))
 {
   const char *name = ((const char *) (((op0)->decl.name))->identifier.id.str);
   if (strcmp (name, "break") == 0
       || strcmp (name, "continue") == 0)
     {
       dump_generic_node (buffer, ((node)->exp.operands[1]), spc, flags, 0);
       break;
     }
 }
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_string ((buffer), ": {");
      if (!(flags & (1 << 1)))
 newline_and_indent (buffer, spc+2);
      dump_generic_node (buffer, ((node)->exp.operands[1]), spc+2, flags, 1);
      if (!flags)
 newline_and_indent (buffer, spc);
      pp_base_character ((buffer), '}');
      is_expr = 0;
      break;
    case EXIT_BLOCK_EXPR:
      op0 = ((((node)->exp.operands[0]))->exp.operands[0]);
      if (((op0)->decl.name))
 {
   const char *name = ((const char *) (((op0)->decl.name))->identifier.id.str);
   if (strcmp (name, "break") == 0
       || strcmp (name, "continue") == 0)
     {
       pp_base_string ((buffer), name);
       break;
     }
 }
      pp_base_string ((buffer), "<<<exit block ");
      dump_generic_node (buffer, op0, spc, flags, 0);
      pp_base_string ((buffer), ">>>");
      break;
    case EXC_PTR_EXPR:
      pp_base_string ((buffer), "<<<exception object>>>");
      break;
    case FILTER_EXPR:
      pp_base_string ((buffer), "<<<filter object>>>");
      break;
    case LOOP_EXPR:
      pp_base_string ((buffer), "while (1)");
      if (!(flags & (1 << 1)))
 {
   newline_and_indent (buffer, spc+2);
   pp_base_character ((buffer), '{');
   newline_and_indent (buffer, spc+4);
   dump_generic_node (buffer, ((node)->exp.operands[0]), spc+4, flags, 1);
   newline_and_indent (buffer, spc+2);
   pp_base_character ((buffer), '}');
 }
      is_expr = 0;
      break;
    case RETURN_EXPR:
      pp_base_string ((buffer), "return");
      op0 = ((node)->exp.operands[0]);
      if (op0)
 {
   pp_base_character ((buffer), ' ');
   if (((enum tree_code) (op0)->common.code) == MODIFY_EXPR)
     dump_generic_node (buffer, ((op0)->exp.operands[1]), spc, flags, 0);
   else
     dump_generic_node (buffer, op0, spc, flags, 0);
 }
      break;
    case EXIT_EXPR:
      pp_base_string ((buffer), "if (");
      dump_generic_node (buffer, ((node)->exp.operands[0]), spc, flags, 0);
      pp_base_string ((buffer), ") break");
      break;
    case SWITCH_EXPR:
      pp_base_string ((buffer), "switch (");
      dump_generic_node (buffer, (((node))->exp.operands[0]), spc, flags, 0);
      pp_base_character ((buffer), ')');
      if (!(flags & (1 << 1)))
 {
   newline_and_indent (buffer, spc+2);
   pp_base_character ((buffer), '{');
   if ((((node))->exp.operands[1]))
     {
       newline_and_indent (buffer, spc+4);
       dump_generic_node (buffer, (((node))->exp.operands[1]), spc+4, flags, 1);
     }
   else
     {
       tree vec = (((node))->exp.operands[2]);
       size_t i, n = ((vec)->vec.length);
       for (i = 0; i < n; ++i)
  {
    tree elt = ((vec)->vec.a[i]);
    newline_and_indent (buffer, spc+4);
    dump_generic_node (buffer, elt, spc+4, flags, 0);
    pp_base_string ((buffer), " goto ");
    dump_generic_node (buffer, (((elt))->exp.operands[2]), spc+4, flags, 1);
    pp_base_character ((buffer), ';');
  }
     }
   newline_and_indent (buffer, spc+2);
   pp_base_character ((buffer), '}');
 }
      is_expr = 0;
      break;
    case GOTO_EXPR:
      op0 = (((node))->exp.operands[0]);
      if (((enum tree_code) (op0)->common.code) != SSA_NAME
   && (tree_code_type[(int) (((enum tree_code) (op0)->common.code))] == 'd')
   && ((op0)->decl.name))
 {
   const char *name = ((const char *) (((op0)->decl.name))->identifier.id.str);
   if (strcmp (name, "break") == 0
       || strcmp (name, "continue") == 0)
     {
       pp_base_string ((buffer), name);
       break;
     }
 }
      pp_base_string ((buffer), "goto ");
      dump_generic_node (buffer, op0, spc, flags, 0);
      break;
    case RESX_EXPR:
      pp_base_string ((buffer), "resx");
      break;
    case ASM_EXPR:
      pp_base_string ((buffer), "__asm__");
      if ((((node)->common.public_flag)))
 pp_base_string ((buffer), " __volatile__");
      pp_base_character ((buffer), '(');
      dump_generic_node (buffer, (((node))->exp.operands[0]), spc, flags, 0);
      pp_base_character ((buffer), ':');
      dump_generic_node (buffer, (((node))->exp.operands[1]), spc, flags, 0);
      pp_base_character ((buffer), ':');
      dump_generic_node (buffer, (((node))->exp.operands[2]), spc, flags, 0);
      if ((((node))->exp.operands[3]))
 {
   pp_base_character ((buffer), ':');
   dump_generic_node (buffer, (((node))->exp.operands[3]), spc, flags, 0);
 }
      pp_base_string ((buffer), ")");
      break;
    case CASE_LABEL_EXPR:
      if ((((node))->exp.operands[0]) && (((node))->exp.operands[1]))
 {
   pp_base_string ((buffer), "case ");
   dump_generic_node (buffer, (((node))->exp.operands[0]), spc, flags, 0);
   pp_base_string ((buffer), " ... ");
   dump_generic_node (buffer, (((node))->exp.operands[1]), spc, flags, 0);
 }
      else if ((((node))->exp.operands[0]))
 {
   pp_base_string ((buffer), "case ");
   dump_generic_node (buffer, (((node))->exp.operands[0]), spc, flags, 0);
 }
      else
 pp_base_string ((buffer), "default ");
      pp_base_character ((buffer), ':');
      break;
    case OBJ_TYPE_REF:
      pp_base_string ((buffer), "OBJ_TYPE_REF(");
      dump_generic_node (buffer, (((node))->exp.operands[0]), spc, flags, 0);
      pp_base_character ((buffer), ';');
      dump_generic_node (buffer, (((node))->exp.operands[1]), spc, flags, 0);
      pp_base_character ((buffer), '-');
      pp_base_character ((buffer), '>');
      dump_generic_node (buffer, (((node))->exp.operands[2]), spc, flags, 0);
      pp_base_character ((buffer), ')');
      break;
    case PHI_NODE:
      {
 int i;
 dump_generic_node (buffer, get_def_from_ptr (get_phi_result_ptr (node)), spc, flags, 0);
 pp_base_string ((buffer), " = PHI <");
 for (i = 0; i < (node)->phi.num_args; i++)
   {
     dump_generic_node (buffer, get_use_from_ptr (get_phi_arg_def_ptr (((node)), ((i)))), spc, flags, 0);
     pp_base_string ((buffer), "(");
     do { sprintf ((buffer)->buffer->digit_buffer, "%d", ((node)->phi.a[i]).e->src->index); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0);
     pp_base_string ((buffer), ")");
     if (i < (node)->phi.num_args - 1)
       pp_base_string ((buffer), ", ");
   }
 pp_base_string ((buffer), ">;");
      }
      break;
    case SSA_NAME:
      dump_generic_node (buffer, (node)->ssa_name.var, spc, flags, 0);
      pp_base_string ((buffer), "_");
      do { sprintf ((buffer)->buffer->digit_buffer, "%d", (node)->ssa_name.version); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0);
      break;
    case VALUE_HANDLE:
      pp_printf (buffer, "VH.%d", ((node)->value_handle.id));
      break;
    default:
      do_niy(buffer,node);
    }
  if (is_stmt && is_expr)
    pp_base_character ((buffer), ';');
  pp_write_text_to_stream (buffer);
  return spc;
}
static void
print_declaration (pretty_printer *buffer, tree t, int spc, int flags)
{
  do { int i; for (i = 0; i<spc; i++) pp_base_character ((buffer), ' '); } while (0);
  if (((enum tree_code) (t)->common.code) == TYPE_DECL)
    pp_base_string ((buffer), "typedef ");
  if (((t)->decl.regdecl_flag))
    pp_base_string ((buffer), "register ");
  if (((t)->common.public_flag) && ((t)->decl.external_flag))
    pp_base_string ((buffer), "extern ");
  else if (((t)->common.static_flag))
    pp_base_string ((buffer), "static ");
  if (((enum tree_code) (((t)->common.type))->common.code) == ARRAY_TYPE)
    {
      tree tmp;
      tmp = ((t)->common.type);
      while (((enum tree_code) (((tmp)->common.type))->common.code) == ARRAY_TYPE)
 tmp = ((tmp)->common.type);
      dump_generic_node (buffer, ((tmp)->common.type), spc, flags, 0);
      pp_base_character ((buffer), ' ');
      dump_generic_node (buffer, t, spc, flags, 0);
      tmp = ((t)->common.type);
      while (((enum tree_code) (tmp)->common.code) == ARRAY_TYPE)
 {
   pp_base_character ((buffer), '[');
   if (((tmp)->type.values))
     {
       if (((enum tree_code) (((tmp)->type.size))->common.code) == INTEGER_CST)
  do { sprintf ((buffer)->buffer->digit_buffer, "%ld", (long) (((((tmp)->type.size))->int_cst.int_cst).low) / (((((((tmp)->common.type))->type.size))->int_cst.int_cst).low)); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0)
                                                   ;
       else
  dump_generic_node (buffer, ((tmp)->type.size_unit), spc, flags,
       0);
     }
   pp_base_character ((buffer), ']');
   tmp = ((tmp)->common.type);
 }
    }
  else if (((enum tree_code) (t)->common.code) == FUNCTION_DECL)
    {
      dump_generic_node (buffer, ((((t)->common.type))->common.type), spc, flags, 0);
      pp_base_character ((buffer), ' ');
      dump_decl_name (buffer, t, flags);
      dump_function_declaration (buffer, ((t)->common.type), spc, flags);
    }
  else
    {
      dump_generic_node (buffer, ((t)->common.type), spc, flags, 0);
      pp_base_character ((buffer), ' ');
      dump_generic_node (buffer, t, spc, flags, 0);
    }
  if (((enum tree_code) (t)->common.code) != FUNCTION_DECL)
    {
      if (((t)->decl.initial))
 {
   pp_base_character ((buffer), ' ');
   pp_base_character ((buffer), '=');
   pp_base_character ((buffer), ' ');
   dump_generic_node (buffer, ((t)->decl.initial), spc, flags, 0);
 }
    }
  pp_base_character ((buffer), ';');
}
static void
print_struct_decl (pretty_printer *buffer, tree node, int spc, int flags)
{
  if (((node)->type.name))
    {
      do { int i; for (i = 0; i<spc; i++) pp_base_character ((buffer), ' '); } while (0);
      if (((enum tree_code) (node)->common.code) == RECORD_TYPE)
 pp_base_string ((buffer), "struct ");
      else if ((((enum tree_code) (node)->common.code) == UNION_TYPE
  || ((enum tree_code) (node)->common.code) == QUAL_UNION_TYPE))
 pp_base_string ((buffer), "union ");
      dump_generic_node (buffer, ((node)->type.name), spc, 0, 0);
    }
  pp_base_newline ((buffer));
  do { int i; for (i = 0; i<spc; i++) pp_base_character ((buffer), ' '); } while (0);
  pp_base_character ((buffer), '{');
  pp_base_newline ((buffer));
  {
    tree tmp;
    tmp = ((node)->type.values);
    while (tmp)
      {
 if (((tmp)->common.type) != node
     || (((enum tree_code) (((tmp)->common.type))->common.code) == POINTER_TYPE
  && ((((tmp)->common.type))->common.type) != node))
   {
     print_declaration (buffer, tmp, spc+2, flags);
     pp_base_newline ((buffer));
   }
 tmp = ((tmp)->common.chain);
      }
  }
  do { int i; for (i = 0; i<spc; i++) pp_base_character ((buffer), ' '); } while (0);
  pp_base_character ((buffer), '}');
}
static int
op_prio (tree op)
{
  if (op == ((void *)0))
    return 9999;
  switch (((enum tree_code) (op)->common.code))
    {
    case TREE_LIST:
    case COMPOUND_EXPR:
    case BIND_EXPR:
      return 1;
    case MODIFY_EXPR:
    case INIT_EXPR:
      return 2;
    case COND_EXPR:
      return 3;
    case TRUTH_OR_EXPR:
    case TRUTH_ORIF_EXPR:
      return 4;
    case TRUTH_AND_EXPR:
    case TRUTH_ANDIF_EXPR:
      return 5;
    case BIT_IOR_EXPR:
      return 6;
    case BIT_XOR_EXPR:
    case TRUTH_XOR_EXPR:
      return 7;
    case BIT_AND_EXPR:
      return 8;
    case EQ_EXPR:
    case NE_EXPR:
      return 9;
    case UNLT_EXPR:
    case UNLE_EXPR:
    case UNGT_EXPR:
    case UNGE_EXPR:
    case UNEQ_EXPR:
    case LTGT_EXPR:
    case ORDERED_EXPR:
    case UNORDERED_EXPR:
    case LT_EXPR:
    case LE_EXPR:
    case GT_EXPR:
    case GE_EXPR:
      return 10;
    case LSHIFT_EXPR:
    case RSHIFT_EXPR:
    case LROTATE_EXPR:
    case RROTATE_EXPR:
      return 11;
    case PLUS_EXPR:
    case MINUS_EXPR:
      return 12;
    case MULT_EXPR:
    case TRUNC_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case RDIV_EXPR:
    case EXACT_DIV_EXPR:
    case TRUNC_MOD_EXPR:
    case CEIL_MOD_EXPR:
    case FLOOR_MOD_EXPR:
    case ROUND_MOD_EXPR:
      return 13;
    case TRUTH_NOT_EXPR:
    case BIT_NOT_EXPR:
    case POSTINCREMENT_EXPR:
    case POSTDECREMENT_EXPR:
    case PREINCREMENT_EXPR:
    case PREDECREMENT_EXPR:
    case NEGATE_EXPR:
    case INDIRECT_REF:
    case ADDR_EXPR:
    case FLOAT_EXPR:
    case NOP_EXPR:
    case CONVERT_EXPR:
    case FIX_TRUNC_EXPR:
    case FIX_CEIL_EXPR:
    case FIX_FLOOR_EXPR:
    case FIX_ROUND_EXPR:
    case TARGET_EXPR:
      return 14;
    case CALL_EXPR:
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
    case COMPONENT_REF:
      return 15;
    case MIN_EXPR:
    case MAX_EXPR:
    case ABS_EXPR:
    case REALPART_EXPR:
    case IMAGPART_EXPR:
      return 16;
    case SAVE_EXPR:
    case NON_LVALUE_EXPR:
      return op_prio (((op)->exp.operands[0]));
    default:
      return 9999;
    }
}
static const char *
op_symbol (tree op)
{
  if (op == ((void *)0))
    fancy_abort ("gcc.c", 117450, "?");
  switch (((enum tree_code) (op)->common.code))
    {
    case MODIFY_EXPR:
      return "=";
    case TRUTH_OR_EXPR:
    case TRUTH_ORIF_EXPR:
      return "||";
    case TRUTH_AND_EXPR:
    case TRUTH_ANDIF_EXPR:
      return "&&";
    case BIT_IOR_EXPR:
      return "|";
    case TRUTH_XOR_EXPR:
    case BIT_XOR_EXPR:
      return "^";
    case ADDR_EXPR:
    case BIT_AND_EXPR:
      return "&";
    case ORDERED_EXPR:
      return "ord";
    case UNORDERED_EXPR:
      return "unord";
    case EQ_EXPR:
      return "==";
    case UNEQ_EXPR:
      return "u==";
    case NE_EXPR:
      return "!=";
    case LT_EXPR:
      return "<";
    case UNLT_EXPR:
      return "u<";
    case LE_EXPR:
      return "<=";
    case UNLE_EXPR:
      return "u<=";
    case GT_EXPR:
      return ">";
    case UNGT_EXPR:
      return "u>";
    case GE_EXPR:
      return ">=";
    case UNGE_EXPR:
      return "u>=";
    case LTGT_EXPR:
      return "<>";
    case LSHIFT_EXPR:
      return "<<";
    case RSHIFT_EXPR:
      return ">>";
    case PLUS_EXPR:
      return "+";
    case NEGATE_EXPR:
    case MINUS_EXPR:
      return "-";
    case BIT_NOT_EXPR:
      return "~";
    case TRUTH_NOT_EXPR:
      return "!";
    case MULT_EXPR:
    case INDIRECT_REF:
      return "*";
    case TRUNC_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case RDIV_EXPR:
    case EXACT_DIV_EXPR:
      return "/";
    case TRUNC_MOD_EXPR:
    case CEIL_MOD_EXPR:
    case FLOOR_MOD_EXPR:
    case ROUND_MOD_EXPR:
      return "%";
    case PREDECREMENT_EXPR:
      return " --";
    case PREINCREMENT_EXPR:
      return " ++";
    case POSTDECREMENT_EXPR:
      return "-- ";
    case POSTINCREMENT_EXPR:
      return "++ ";
    case REFERENCE_EXPR:
      return "";
    default:
      return "<<< ??? >>>";
    }
}
static void
print_call_name (pretty_printer *buffer, tree node)
{
  tree op0;
  if (((enum tree_code) (node)->common.code) != CALL_EXPR)
    fancy_abort ("gcc.c", 117577, "?");
  op0 = ((node)->exp.operands[0]);
  if (((enum tree_code) (op0)->common.code) == NON_LVALUE_EXPR)
    op0 = ((op0)->exp.operands[0]);
  switch (((enum tree_code) (op0)->common.code))
    {
    case VAR_DECL:
    case PARM_DECL:
      pp_printf (buffer, "%s", ((enum tree_code) (op0)->common.code) == NOP_EXPR ? lang_hooks.decl_printable_name (((op0)->exp.operands[0]), 1) : lang_hooks.decl_printable_name (op0, 1));
      break;
    case ADDR_EXPR:
    case INDIRECT_REF:
    case NOP_EXPR:
      dump_generic_node (buffer, ((op0)->exp.operands[0]), 0, 0, 0);
      break;
    case COND_EXPR:
      pp_base_string ((buffer), "(");
      dump_generic_node (buffer, ((op0)->exp.operands[0]), 0, 0, 0);
      pp_base_string ((buffer), ") ? ");
      dump_generic_node (buffer, ((op0)->exp.operands[1]), 0, 0, 0);
      pp_base_string ((buffer), " : ");
      dump_generic_node (buffer, ((op0)->exp.operands[2]), 0, 0, 0);
      break;
    case COMPONENT_REF:
      if (((enum tree_code) (((op0)->exp.operands[0]))->common.code) == INDIRECT_REF ||
   ((enum tree_code) (((op0)->exp.operands[0]))->common.code) == VAR_DECL)
 pp_printf (buffer, "%s", ((enum tree_code) (((op0)->exp.operands[1]))->common.code) == NOP_EXPR ? lang_hooks.decl_printable_name (((((op0)->exp.operands[1]))->exp.operands[0]), 1) : lang_hooks.decl_printable_name (((op0)->exp.operands[1]), 1));
      else
 dump_generic_node (buffer, ((op0)->exp.operands[0]), 0, 0, 0);
      break;
    case ARRAY_REF:
      if (((enum tree_code) (((op0)->exp.operands[0]))->common.code) == VAR_DECL)
 pp_printf (buffer, "%s", ((enum tree_code) (((op0)->exp.operands[0]))->common.code) == NOP_EXPR ? lang_hooks.decl_printable_name (((((op0)->exp.operands[0]))->exp.operands[0]), 1) : lang_hooks.decl_printable_name (((op0)->exp.operands[0]), 1));
      else
 dump_generic_node (buffer, op0, 0, 0, 0);
      break;
    case SSA_NAME:
    case OBJ_TYPE_REF:
      dump_generic_node (buffer, op0, 0, 0, 0);
      break;
    default:
      do_niy(buffer,node);
    }
}
static void
pretty_print_string (pretty_printer *buffer, const char *str)
{
  if (str == ((void *)0))
    return;
  while (*str)
    {
      switch (str[0])
 {
 case '\b':
   pp_base_string ((buffer), "\\b");
   break;
 case '\f':
   pp_base_string ((buffer), "\\f");
   break;
 case '\n':
   pp_base_string ((buffer), "\\n");
   break;
 case '\r':
   pp_base_string ((buffer), "\\r");
   break;
 case '\t':
   pp_base_string ((buffer), "\\t");
   break;
 case '\v':
   pp_base_string ((buffer), "\\v");
   break;
 case '\\':
   pp_base_string ((buffer), "\\\\");
   break;
 case '\"':
   pp_base_string ((buffer), "\\\"");
   break;
 case '\'':
   pp_base_string ((buffer), "\\'");
   break;
 case '\0':
   pp_base_string ((buffer), "\\0");
   break;
 case '\1':
   pp_base_string ((buffer), "\\1");
   break;
 case '\2':
   pp_base_string ((buffer), "\\2");
   break;
 case '\3':
   pp_base_string ((buffer), "\\3");
   break;
 case '\4':
   pp_base_string ((buffer), "\\4");
   break;
 case '\5':
   pp_base_string ((buffer), "\\5");
   break;
 case '\6':
   pp_base_string ((buffer), "\\6");
   break;
 case '\7':
   pp_base_string ((buffer), "\\7");
   break;
 default:
   pp_base_character ((buffer), str[0]);
   break;
 }
      str++;
    }
}
static void
maybe_init_pretty_print (FILE *file)
{
  if (!initialized)
    {
      pp_construct (&buffer, ((void *)0), 0);
      (&buffer)->need_newline = 1;
      initialized = 1;
    }
  buffer.buffer->stream = file;
}
static void
newline_and_indent (pretty_printer *buffer, int spc)
{
  pp_base_newline ((buffer));
  do { int i; for (i = 0; i<spc; i++) pp_base_character ((buffer), ' '); } while (0);
}
static void
dump_vops (pretty_printer *buffer, tree stmt, int spc, int flags)
{
  size_t i;
  stmt_ann_t ann = stmt_ann (stmt);
  v_may_def_optype v_may_defs = get_v_may_def_ops (ann);
  v_must_def_optype v_must_defs = get_v_must_def_ops (ann);
  vuse_optype vuses = get_vuse_ops (ann);
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      pp_base_string ((buffer), "#   ");
      dump_generic_node (buffer, (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i))))),
                         spc + 2, flags, 0);
      pp_base_string ((buffer), " = V_MAY_DEF <");
      dump_generic_node (buffer, (get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((i))))),
                         spc + 2, flags, 0);
      pp_base_string ((buffer), ">;");
      newline_and_indent (buffer, spc);
    }
  for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
    {
      tree v_must_def = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i)))));
      pp_base_string ((buffer), "#   V_MUST_DEF <");
      dump_generic_node (buffer, v_must_def, spc + 2, flags, 0);
      pp_base_string ((buffer), ">;");
      newline_and_indent (buffer, spc);
    }
  for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
    {
      tree vuse = (get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((i)))));
      pp_base_string ((buffer), "#   VUSE <");
      dump_generic_node (buffer, vuse, spc + 2, flags, 0);
      pp_base_string ((buffer), ">;");
      newline_and_indent (buffer, spc);
    }
}
void
dump_generic_bb (FILE *file, basic_block bb, int indent1, int flags)
{
  maybe_init_pretty_print (file);
  dumping_stmts = 1;
  dump_generic_bb_buff (&buffer, bb, indent1, flags);
  pp_base_flush ((&buffer));
}
static void
dump_bb_header (pretty_printer *buffer, basic_block bb, int indent1, int flags)
{
  edge e;
  tree stmt;
  if (flags & (1 << 5))
    {
      do { int i; for (i = 0; i<indent1; i++) pp_base_character ((buffer), ' '); } while (0);
      pp_base_string ((buffer), "# BLOCK ");
      do { sprintf ((buffer)->buffer->digit_buffer, "%d", bb->index); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0);
      if (flags & (1 << 7))
 {
   block_stmt_iterator bsi;
   for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
     if (get_lineno (bsi_stmt (bsi)) != -1)
       {
  pp_base_string ((buffer), ", starting at line ");
  do { sprintf ((buffer)->buffer->digit_buffer, "%d", get_lineno (bsi_stmt (bsi))); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0);
  break;
       }
 }
      newline_and_indent (buffer, indent1);
      pp_base_string ((buffer), "# PRED:");
      pp_write_text_to_stream (buffer);
      for (e = bb->pred; e; e = e->pred_next)
        if (flags & (1 << 1))
   {
     pp_base_string ((buffer), " ");
     if (e->src == ENTRY_BLOCK_PTR)
       pp_base_string ((buffer), "ENTRY");
     else
       do { sprintf ((buffer)->buffer->digit_buffer, "%d", e->src->index); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0);
   }
 else
   dump_edge_info (buffer->buffer->stream, e, 0);
      pp_base_newline ((buffer));
    }
  else
    {
      stmt = first_stmt (bb);
      if (!stmt || ((enum tree_code) (stmt)->common.code) != LABEL_EXPR)
 {
   do { int i; for (i = 0; i<indent1 - 2; i++) pp_base_character ((buffer), ' '); } while (0);
   pp_base_string ((buffer), "<bb ");
   do { sprintf ((buffer)->buffer->digit_buffer, "%d", bb->index); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0);
   pp_base_string ((buffer), ">:");
   pp_base_newline ((buffer));
 }
    }
}
static void
dump_bb_end (pretty_printer *buffer, basic_block bb, int indent1, int flags)
{
  edge e;
  do { int i; for (i = 0; i<indent1; i++) pp_base_character ((buffer), ' '); } while (0);
  pp_base_string ((buffer), "# SUCC:");
  pp_write_text_to_stream (buffer);
  for (e = bb->succ; e; e = e->succ_next)
    if (flags & (1 << 1))
      {
 pp_base_string ((buffer), " ");
 if (e->dest == EXIT_BLOCK_PTR)
   pp_base_string ((buffer), "EXIT");
 else
   do { sprintf ((buffer)->buffer->digit_buffer, "%d", e->dest->index); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0);
      }
    else
      dump_edge_info (buffer->buffer->stream, e, 1);
  pp_base_newline ((buffer));
}
static void
dump_phi_nodes (pretty_printer *buffer, basic_block bb, int indent1, int flags)
{
  tree phi = phi_nodes (bb);
  if (!phi)
    return;
  for (; phi; phi = (((phi))->common.chain))
    {
      if (is_gimple_reg (get_def_from_ptr (get_phi_result_ptr (phi))) || (flags & (1 << 6)))
        {
          do { int i; for (i = 0; i<indent1; i++) pp_base_character ((buffer), ' '); } while (0);
          pp_base_string ((buffer), "# ");
          dump_generic_node (buffer, phi, indent1, flags, 0);
          pp_base_newline ((buffer));
        }
    }
}
static void
pp_cfg_jump (pretty_printer *buffer, basic_block bb)
{
  tree stmt;
  stmt = first_stmt (bb);
  pp_base_string ((buffer), "goto <bb ");
  do { sprintf ((buffer)->buffer->digit_buffer, "%d", bb->index); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0);
  pp_base_string ((buffer), ">");
  if (stmt && ((enum tree_code) (stmt)->common.code) == LABEL_EXPR)
    {
      pp_base_string ((buffer), " (");
      dump_generic_node (buffer, (((stmt))->exp.operands[0]), 0, 0, 0);
      pp_base_string ((buffer), ")");
    }
  pp_base_character ((buffer), ';');
}
static void
dump_implicit_edges (pretty_printer *buffer, basic_block bb, int indent1,
       int flags)
{
  edge e;
  for (e = bb->succ; e; e = e->succ_next)
    if (e->flags & 1)
      break;
  if (e && e->dest != bb->next_bb)
    {
      do { int i; for (i = 0; i<indent1; i++) pp_base_character ((buffer), ' '); } while (0);
      if ((flags & (1 << 7))
   && e->goto_locus
   )
 {
   expanded_location goto_xloc;
   goto_xloc = *e->goto_locus;
   pp_base_character ((buffer), '[');
   if (goto_xloc.file)
     {
       pp_base_string ((buffer), goto_xloc.file);
       pp_base_string ((buffer), " : ");
     }
   do { sprintf ((buffer)->buffer->digit_buffer, "%d", goto_xloc.line); pp_base_string ((buffer), (buffer)->buffer->digit_buffer); } while (0);
   pp_base_string ((buffer), "] ");
 }
      pp_cfg_jump (buffer, e->dest);
      pp_base_newline ((buffer));
    }
}
static void
dump_generic_bb_buff (pretty_printer *buffer, basic_block bb,
        int indent1, int flags)
{
  block_stmt_iterator bsi;
  tree stmt;
  int label_indent1 = indent1 - 2;
  if (label_indent1 < 0)
    label_indent1 = 0;
  dump_bb_header (buffer, bb, indent1, flags);
  if (bb_ann (bb))
    dump_phi_nodes (buffer, bb, indent1, flags);
  for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
    {
      int curr_indent1;
      stmt = bsi_stmt (bsi);
      curr_indent1 = ((enum tree_code) (stmt)->common.code) == LABEL_EXPR ? label_indent1 : indent1;
      do { int i; for (i = 0; i<curr_indent1; i++) pp_base_character ((buffer), ' '); } while (0);
      dump_generic_node (buffer, stmt, curr_indent1, flags, 1);
      pp_base_newline ((buffer));
    }
  dump_implicit_edges (buffer, bb, indent1, flags);
  if (flags & (1 << 5))
    dump_bb_end (buffer, bb, indent1, flags);
}
struct dom_walk_data
{
  unsigned int dom_direction : 2;
  unsigned int walk_stmts_backward : 1;
  void (*initialize_block_local_data) (struct dom_walk_data *,
           basic_block, unsigned char);
  void (*before_dom_children_before_stmts) (struct dom_walk_data *,
         basic_block);
  void (*before_dom_children_walk_stmts) (struct dom_walk_data *,
       basic_block, block_stmt_iterator);
  void (*before_dom_children_after_stmts) (struct dom_walk_data *,
        basic_block);
  void (*after_dom_children_before_stmts) (struct dom_walk_data *,
        basic_block);
  void (*after_dom_children_walk_stmts) (struct dom_walk_data *,
      basic_block, block_stmt_iterator);
  void (*after_dom_children_after_stmts) (struct dom_walk_data *,
       basic_block);
  void *global_data;
  varray_type block_data_stack;
  size_t block_local_data_size;
  varray_type free_block_data;
};
void walk_dominator_tree (struct dom_walk_data *, basic_block);
void init_walk_dominator_tree (struct dom_walk_data *);
void fini_walk_dominator_tree (struct dom_walk_data *);
struct def_blocks_d
{
  tree var;
  bitmap def_blocks;
  bitmap phi_blocks;
  bitmap livein_blocks;
};
static htab_t def_blocks;
struct mark_def_sites_global_data
{
  sbitmap kills;
  sbitmap names_to_rename;
};
struct rewrite_block_data
{
  varray_type block_defs;
};
struct ssa_name_info
{
  unsigned int need_phi_state : 2;
  tree current_def;
};
static void rewrite_finalize_block (struct dom_walk_data *, basic_block);
static void rewrite_initialize_block_local_data (struct dom_walk_data *,
       basic_block, unsigned char);
static void rewrite_initialize_block (struct dom_walk_data *, basic_block);
static void rewrite_add_phi_arguments (struct dom_walk_data *, basic_block);
static void mark_def_sites (struct dom_walk_data *walk_data,
       basic_block bb, block_stmt_iterator);
static void mark_def_sites_initialize_block (struct dom_walk_data *walk_data,
          basic_block bb);
static void set_def_block (tree, basic_block, unsigned char, unsigned char);
static void set_livein_block (tree, basic_block);
static unsigned char prepare_use_operand_for_rename (use_operand_p, size_t *uid_p);
static unsigned char prepare_def_operand_for_rename (tree def, size_t *uid_p);
static void insert_phi_nodes (bitmap *, bitmap);
static void rewrite_stmt (struct dom_walk_data *, basic_block,
     block_stmt_iterator);
static void rewrite_operand (use_operand_p);
static void insert_phi_nodes_for (tree, bitmap *, varray_type *);
static tree get_reaching_def (tree);
static hashval_t def_blocks_hash (const void *);
static int def_blocks_eq (const void *, const void *);
static void def_blocks_free (void *);
static int debug_def_blocks_r (void **, void *);
static struct def_blocks_d *get_def_blocks_for (tree);
static struct def_blocks_d *find_def_blocks_for (tree);
static void htab_statistics (FILE *, htab_t);
static struct ssa_name_info *
get_ssa_name_ann (tree name)
{
  if (!(name)->ssa_name.aux)
    (name)->ssa_name.aux = xcalloc (1, sizeof (struct ssa_name_info));
  return (name)->ssa_name.aux;
}
static enum need_phi_state
get_phi_state (tree var)
{
  if (((enum tree_code) (var)->common.code) == SSA_NAME)
    return get_ssa_name_ann (var)->need_phi_state;
  else
    return var_ann (var)->need_phi_state;
}
static void
set_phi_state (tree var, enum need_phi_state state)
{
  if (((enum tree_code) (var)->common.code) == SSA_NAME)
    get_ssa_name_ann (var)->need_phi_state = state;
  else
    var_ann (var)->need_phi_state = state;
}
static tree
get_current_def (tree var)
{
  if (((enum tree_code) (var)->common.code) == SSA_NAME)
    return get_ssa_name_ann (var)->current_def;
  else
    return var_ann (var)->current_def;
}
static void
set_current_def (tree var, tree def)
{
  if (((enum tree_code) (var)->common.code) == SSA_NAME)
    get_ssa_name_ann (var)->current_def = def;
  else
    var_ann (var)->current_def = def;
}
void
compute_global_livein (bitmap livein, bitmap def_blocks)
{
  basic_block bb, *worklist, *tos;
  int i;
  tos = worklist
    = (basic_block *) xmalloc (sizeof (basic_block) * (n_basic_blocks + 1));
  do { bitmap_element *ptr_ = (livein)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { *tos++ = (((basic_block_info)->data.bb[(i)])); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
  while (tos != worklist)
    {
      edge e;
      bb = *--tos;
      for (e = bb->pred; e; e = e->pred_next)
 {
   basic_block pred = e->src;
   int pred_index = pred->index;
   if (pred != ENTRY_BLOCK_PTR
       && ! bitmap_bit_p (livein, pred_index)
       && ! bitmap_bit_p (def_blocks, pred_index))
     {
       *tos++ = pred;
       bitmap_set_bit (livein, pred_index);
     }
 }
    }
  free (worklist);
}
static void
mark_def_sites_initialize_block (struct dom_walk_data *walk_data,
     basic_block bb )
{
  struct mark_def_sites_global_data *gd = walk_data->global_data;
  sbitmap kills = gd->kills;
  sbitmap_zero (kills);
}
static void
ssa_mark_def_sites_initialize_block (struct dom_walk_data *walk_data,
         basic_block bb)
{
  struct mark_def_sites_global_data *gd = walk_data->global_data;
  sbitmap kills = gd->kills;
  tree phi, def;
  unsigned def_uid;
  sbitmap_zero (kills);
  for (phi = phi_nodes (bb); phi; phi = ((phi)->common.chain))
    {
      def = get_def_from_ptr (get_phi_result_ptr (phi));
      def_uid = (def)->ssa_name.version;
      if (!((gd->names_to_rename)->elms [(def_uid) / ((unsigned) (8 * 4))] >> (def_uid) % ((unsigned) (8 * 4)) & 1))
 continue;
      set_def_block (def, bb, 1, 1);
      ((kills)->elms [(def_uid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (def_uid) % ((unsigned) (8 * 4)));
    }
}
static void
ssa_mark_phi_uses (struct dom_walk_data *walk_data, basic_block bb)
{
  struct mark_def_sites_global_data *gd = walk_data->global_data;
  sbitmap kills = gd->kills;
  edge e;
  tree phi, use;
  unsigned uid;
  for (e = bb->succ; e; e = e->succ_next)
    {
      if (e->dest == EXIT_BLOCK_PTR)
 continue;
      for (phi = phi_nodes (e->dest); phi; phi = ((phi)->common.chain))
 {
   use = get_use_from_ptr (get_phi_arg_def_ptr ((((phi))), ((phi_arg_from_edge ((phi),(e))))));
   if (((enum tree_code) (use)->common.code) != SSA_NAME)
     continue;
   uid = (use)->ssa_name.version;
   if (((gd->names_to_rename)->elms [(uid) / ((unsigned) (8 * 4))] >> (uid) % ((unsigned) (8 * 4)) & 1)
       && !((kills)->elms [(uid) / ((unsigned) (8 * 4))] >> (uid) % ((unsigned) (8 * 4)) & 1))
     set_livein_block (use, bb);
 }
    }
}
static void
mark_def_sites (struct dom_walk_data *walk_data,
  basic_block bb,
  block_stmt_iterator bsi)
{
  struct mark_def_sites_global_data *gd = walk_data->global_data;
  sbitmap kills = gd->kills;
  v_may_def_optype v_may_defs;
  v_must_def_optype v_must_defs;
  vuse_optype vuses;
  def_optype defs;
  use_optype uses;
  size_t i, uid;
  tree stmt;
  stmt_ann_t ann;
  stmt = bsi_stmt (bsi);
  get_stmt_operands (stmt);
  ann = stmt_ann (stmt);
  uses = get_use_ops (ann);
  for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
    {
      use_operand_p use_p = get_use_op_ptr ((uses), (i));
      if (prepare_use_operand_for_rename (use_p, &uid)
   && !((kills)->elms [(uid) / ((unsigned) (8 * 4))] >> (uid) % ((unsigned) (8 * 4)) & 1))
 set_livein_block (get_use_from_ptr (use_p), bb);
    }
  vuses = get_vuse_ops (ann);
  for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
    {
      use_operand_p use_p = get_vuse_op_ptr ((vuses), (i));
      if (prepare_use_operand_for_rename (use_p, &uid)
   && !((kills)->elms [(uid) / ((unsigned) (8 * 4))] >> (uid) % ((unsigned) (8 * 4)) & 1))
 set_livein_block (get_use_from_ptr (use_p), bb);
    }
  v_may_defs = get_v_may_def_ops (ann);
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      use_operand_p use_p = get_v_may_def_op_ptr ((v_may_defs), (i));
      if (prepare_use_operand_for_rename (use_p, &uid))
 {
   if (((enum tree_code) ((get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i))))))->common.code) != SSA_NAME)
     (((*((get_v_may_def_result_ptr (((v_may_defs)), ((i)))).def)) = ((get_use_from_ptr (use_p)))));
          set_livein_block (get_use_from_ptr (use_p), bb);
   set_def_block ((get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i))))), bb, 0, 0);
 }
    }
  v_must_defs = get_v_must_def_ops (ann);
  for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
    {
      tree def = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i)))));
      if (prepare_def_operand_for_rename (def, &uid))
 {
   set_def_block (def, bb, 0, 0);
   ((kills)->elms [(uid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (uid) % ((unsigned) (8 * 4)));
 }
    }
  defs = get_def_ops (ann);
  for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
    {
      tree def = (get_def_from_ptr (get_def_op_ptr (((defs)), ((i)))));
      if (prepare_def_operand_for_rename (def, &uid))
 {
   set_def_block (def, bb, 0, 0);
   ((kills)->elms [(uid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (uid) % ((unsigned) (8 * 4)));
 }
    }
}
static void
ssa_mark_def_sites (struct dom_walk_data *walk_data,
      basic_block bb,
      block_stmt_iterator bsi)
{
  struct mark_def_sites_global_data *gd = walk_data->global_data;
  sbitmap kills = gd->kills;
  v_may_def_optype v_may_defs;
  v_must_def_optype v_must_defs;
  vuse_optype vuses;
  def_optype defs;
  use_optype uses;
  size_t i, uid, def_uid;
  tree stmt, use, def;
  stmt_ann_t ann;
  stmt = bsi_stmt (bsi);
  get_stmt_operands (stmt);
  ann = stmt_ann (stmt);
  uses = get_use_ops (ann);
  for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
    {
      use = (get_use_from_ptr (get_use_op_ptr (((uses)), ((i)))));
      uid = (use)->ssa_name.version;
      if (((gd->names_to_rename)->elms [(uid) / ((unsigned) (8 * 4))] >> (uid) % ((unsigned) (8 * 4)) & 1)
   && !((kills)->elms [(uid) / ((unsigned) (8 * 4))] >> (uid) % ((unsigned) (8 * 4)) & 1))
 set_livein_block (use, bb);
    }
  vuses = get_vuse_ops (ann);
  for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
    {
      use = (get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((i)))));
      uid = (use)->ssa_name.version;
      if (((gd->names_to_rename)->elms [(uid) / ((unsigned) (8 * 4))] >> (uid) % ((unsigned) (8 * 4)) & 1)
   && !((kills)->elms [(uid) / ((unsigned) (8 * 4))] >> (uid) % ((unsigned) (8 * 4)) & 1))
 set_livein_block (use, bb);
    }
  v_may_defs = get_v_may_def_ops (ann);
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      use = (get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((i)))));
      uid = (use)->ssa_name.version;
      if (((gd->names_to_rename)->elms [(uid) / ((unsigned) (8 * 4))] >> (uid) % ((unsigned) (8 * 4)) & 1)
   && !((kills)->elms [(uid) / ((unsigned) (8 * 4))] >> (uid) % ((unsigned) (8 * 4)) & 1))
 set_livein_block (use, bb);
    }
  defs = get_def_ops (ann);
  for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
    {
      def = (get_def_from_ptr (get_def_op_ptr (((defs)), ((i)))));
      def_uid = (def)->ssa_name.version;
      if (((gd->names_to_rename)->elms [(def_uid) / ((unsigned) (8 * 4))] >> (def_uid) % ((unsigned) (8 * 4)) & 1))
 {
   set_def_block (def, bb, 0, 1);
   ((kills)->elms [(def_uid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (def_uid) % ((unsigned) (8 * 4)));
 }
    }
  v_may_defs = get_v_may_def_ops (ann);
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      def = (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i)))));
      def_uid = (def)->ssa_name.version;
      if (((gd->names_to_rename)->elms [(def_uid) / ((unsigned) (8 * 4))] >> (def_uid) % ((unsigned) (8 * 4)) & 1))
 {
   set_def_block (def, bb, 0, 1);
   ((kills)->elms [(def_uid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (def_uid) % ((unsigned) (8 * 4)));
 }
    }
  v_must_defs = get_v_must_def_ops (ann);
  for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
    {
      def = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i)))));
      def_uid = (def)->ssa_name.version;
      if (((gd->names_to_rename)->elms [(def_uid) / ((unsigned) (8 * 4))] >> (def_uid) % ((unsigned) (8 * 4)) & 1))
 {
   set_def_block (def, bb, 0, 1);
   ((kills)->elms [(def_uid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (def_uid) % ((unsigned) (8 * 4)));
 }
    }
}
static void
set_def_block (tree var, basic_block bb, unsigned char phi_p, unsigned char ssa_p)
{
  struct def_blocks_d *db_p;
  enum need_phi_state state;
  if (!ssa_p
      && ((enum tree_code) (var)->common.code) == SSA_NAME)
    var = (var)->ssa_name.var;
  state = get_phi_state (var);
  db_p = get_def_blocks_for (var);
  bitmap_set_bit (db_p->def_blocks, bb->index);
  if (phi_p)
    bitmap_set_bit (db_p->phi_blocks, bb->index);
  if (state == NEED_PHI_STATE_UNKNOWN)
    set_phi_state (var, NEED_PHI_STATE_NO);
  else
    set_phi_state (var, NEED_PHI_STATE_MAYBE);
}
static void
set_livein_block (tree var, basic_block bb)
{
  struct def_blocks_d *db_p;
  enum need_phi_state state = get_phi_state (var);
  db_p = get_def_blocks_for (var);
  bitmap_set_bit (db_p->livein_blocks, bb->index);
  if (state == NEED_PHI_STATE_NO)
    {
      int def_block_index = bitmap_first_set_bit (db_p->def_blocks);
      if (def_block_index == -1
   || ! dominated_by_p (CDI_DOMINATORS, bb,
                        (((basic_block_info)->data.bb[(def_block_index)]))))
 set_phi_state (var, NEED_PHI_STATE_MAYBE);
    }
  else
    set_phi_state (var, NEED_PHI_STATE_MAYBE);
}
static unsigned char
prepare_use_operand_for_rename (use_operand_p op_p, size_t *uid_p)
{
  tree use = get_use_from_ptr (op_p);
  tree var = (((enum tree_code) (use)->common.code) != SSA_NAME) ? use : (use)->ssa_name.var;
  *uid_p = var_ann (var)->uid;
  if (vars_to_rename && !bitmap_bit_p (vars_to_rename, *uid_p))
    return 0;
  if (((enum tree_code) (use)->common.code) == SSA_NAME)
    ((*((op_p).use)) = (var));
  return 1;
}
static unsigned char
prepare_def_operand_for_rename (tree def, size_t *uid_p)
{
  tree var = (((enum tree_code) (def)->common.code) != SSA_NAME) ? def : (def)->ssa_name.var;
  *uid_p = var_ann (var)->uid;
  if (vars_to_rename && !bitmap_bit_p (vars_to_rename, *uid_p))
    return 0;
  return 1;
}
static
void insert_phi_nodes_1 (tree var, bitmap *dfs, varray_type *work_stack)
{
  if (get_phi_state (var) != NEED_PHI_STATE_NO)
    insert_phi_nodes_for (var, dfs, work_stack);
}
static void
insert_phi_nodes (bitmap *dfs, bitmap names_to_rename)
{
  size_t i;
  varray_type work_stack;
  timevar_push (TV_TREE_INSERT_PHI_NODES);
  work_stack = varray_init (last_basic_block, VARRAY_DATA_GENERIC_NOGC, "work_stack");
  if (names_to_rename)
    {
      do { bitmap_element *ptr_ = (names_to_rename)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { if (((ssa_names)->data.tree1[i])) insert_phi_nodes_1 (((ssa_names)->data.tree1[i]), dfs, &work_stack); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
    }
  else if (vars_to_rename)
    do { bitmap_element *ptr_ = (vars_to_rename)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); insert_phi_nodes_1 (((referenced_vars)->data.tree1[i]), dfs, &work_stack); if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                                           ;
  else
    for (i = 0; i < ((referenced_vars)->elements_used); i++)
      insert_phi_nodes_1 (((referenced_vars)->data.tree1[i]), dfs, &work_stack);
  do { if (work_stack) { free (work_stack); work_stack = (varray_type) 0; } } while (0);
  timevar_pop (TV_TREE_INSERT_PHI_NODES);
}
static void
rewrite_initialize_block_local_data (struct dom_walk_data *walk_data ,
         basic_block bb ,
         unsigned char recycled )
{
}
static void
rewrite_initialize_block (struct dom_walk_data *walk_data, basic_block bb)
{
  tree phi;
  struct rewrite_block_data *bd
    = (struct rewrite_block_data *)((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  if (dump_file && (dump_flags & (1 << 3)))
    fprintf (dump_file, "\n\nRenaming block #%d\n\n", bb->index);
  for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
    {
      tree result = get_def_from_ptr (get_phi_result_ptr (phi));
      register_new_def (result, &bd->block_defs);
    }
}
static void
ssa_register_new_def (tree var, tree def, varray_type *block_defs_p)
{
  tree currdef;
  if (get_phi_state (var) == NEED_PHI_STATE_NO)
    {
      set_current_def (var, def);
      return;
    }
  currdef = get_current_def (var);
  if (! *block_defs_p)
    *block_defs_p = varray_init (20, VARRAY_DATA_TREE, "block_defs");
  do { if ((*block_defs_p)->elements_used >= (*block_defs_p)->num_elements) (((*block_defs_p)) = varray_grow ((*block_defs_p), 2 * (*block_defs_p)->num_elements)); (*block_defs_p)->data.tree1[(*block_defs_p)->elements_used++] = (var); } while (0);
  do { if ((*block_defs_p)->elements_used >= (*block_defs_p)->num_elements) (((*block_defs_p)) = varray_grow ((*block_defs_p), 2 * (*block_defs_p)->num_elements)); (*block_defs_p)->data.tree1[(*block_defs_p)->elements_used++] = (currdef); } while (0);
  set_current_def (var, def);
}
static void
ssa_rewrite_initialize_block (struct dom_walk_data *walk_data, basic_block bb)
{
  tree phi, new_name;
  struct rewrite_block_data *bd
    = (struct rewrite_block_data *)((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  sbitmap names_to_rename = walk_data->global_data;
  edge e;
  unsigned char abnormal_phi;
  if (dump_file && (dump_flags & (1 << 3)))
    fprintf (dump_file, "\n\nRenaming block #%d\n\n", bb->index);
  for (e = bb->pred; e; e = e->pred_next)
    if (e->flags & 2)
      break;
  abnormal_phi = (e != ((void *)0));
  for (phi = phi_nodes (bb); phi; phi = ((phi)->common.chain))
    {
      tree result = get_def_from_ptr (get_phi_result_ptr (phi));
      if (((names_to_rename)->elms [((result)->ssa_name.version) / ((unsigned) (8 * 4))] >> ((result)->ssa_name.version) % ((unsigned) (8 * 4)) & 1))
 {
   new_name = duplicate_ssa_name (result, phi);
   ((*((get_phi_result_ptr (phi)).def)) = ((new_name)));
   if (abnormal_phi)
     (new_name)->common.asm_written_flag = 1;
 }
      else
 new_name = result;
      ssa_register_new_def (result, new_name, &bd->block_defs);
    }
}
static void
rewrite_add_phi_arguments (struct dom_walk_data *walk_data ,
      basic_block bb)
{
  edge e;
  for (e = bb->succ; e; e = e->succ_next)
    {
      tree phi;
      for (phi = phi_nodes (e->dest); phi; phi = ((phi)->common.chain))
 {
   tree currdef;
   if ((phi)->phi.rewritten)
     break;
   currdef = get_reaching_def ((get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.var);
   add_phi_arg (&phi, currdef, e);
 }
    }
}
static void
ssa_rewrite_phi_arguments (struct dom_walk_data *walk_data, basic_block bb)
{
  edge e;
  sbitmap names_to_rename = walk_data->global_data;
  use_operand_p op;
  for (e = bb->succ; e; e = e->succ_next)
    {
      tree phi;
      if (e->dest == EXIT_BLOCK_PTR)
 continue;
      for (phi = phi_nodes (e->dest); phi; phi = ((phi)->common.chain))
 {
   op = get_phi_arg_def_ptr (((phi)), (phi_arg_from_edge ((phi),(e))));
   if (((enum tree_code) (get_use_from_ptr (op))->common.code) != SSA_NAME)
     continue;
   if (!((names_to_rename)->elms [((get_use_from_ptr (op))->ssa_name.version) / ((unsigned) (8 * 4))] >> ((get_use_from_ptr (op))->ssa_name.version) % ((unsigned) (8 * 4)) & 1))
     continue;
   ((*((op).use)) = (get_reaching_def (get_use_from_ptr (op))));
   if (e->flags & 2)
     (get_use_from_ptr (op))->common.asm_written_flag = 1;
 }
    }
}
static void
rewrite_finalize_block (struct dom_walk_data *walk_data,
   basic_block bb )
{
  struct rewrite_block_data *bd
    = (struct rewrite_block_data *)((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  while (bd->block_defs && ((bd->block_defs)->elements_used) > 0)
    {
      tree tmp = ((bd->block_defs)->data.tree1[(bd->block_defs)->elements_used - 1]);
      tree saved_def, var;
      do { ((bd->block_defs)->elements_used--); } while (0);
      if (((enum tree_code) (tmp)->common.code) == SSA_NAME)
 {
   saved_def = tmp;
   var = (saved_def)->ssa_name.var;
 }
      else
 {
   saved_def = ((void *)0);
   var = tmp;
 }
      set_current_def (var, saved_def);
    }
}
static void
ssa_rewrite_finalize_block (struct dom_walk_data *walk_data,
       basic_block bb )
{
  struct rewrite_block_data *bd
    = (struct rewrite_block_data *)((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  while (bd->block_defs && ((bd->block_defs)->elements_used) > 0)
    {
      tree var;
      tree saved_def = ((bd->block_defs)->data.tree1[(bd->block_defs)->elements_used - 1]);
      do { ((bd->block_defs)->elements_used--); } while (0);
      var = ((bd->block_defs)->data.tree1[(bd->block_defs)->elements_used - 1]);
      do { ((bd->block_defs)->elements_used--); } while (0);
      set_current_def (var, saved_def);
    }
}
void
dump_tree_ssa (FILE *file)
{
  basic_block bb;
  const char *funcname
    = lang_hooks.decl_printable_name (current_function_decl, 2);
  fprintf (file, "SSA information for %s\n\n", funcname);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      dump_bb (bb, file, 0);
      fputs_unlocked ("    ", file);
      print_generic_stmt (file, phi_nodes (bb), dump_flags);
      fputs_unlocked ("\n\n", file);
    }
}
void
debug_tree_ssa (void)
{
  dump_tree_ssa (stderr);
}
void
dump_tree_ssa_stats (FILE *file)
{
  fprintf (file, "\nHash table statistics:\n");
  fprintf (file, "    def_blocks: ");
  htab_statistics (file, def_blocks);
  fprintf (file, "\n");
}
void
debug_tree_ssa_stats (void)
{
  dump_tree_ssa_stats (stderr);
}
static void
htab_statistics (FILE *file, htab_t htab)
{
  fprintf (file, "size %ld, %ld elements, %f collision/search ratio\n",
    (long) htab_size (htab),
    (long) htab_elements (htab),
    htab_collisions (htab));
}
static void
insert_phi_nodes_for (tree var, bitmap *dfs, varray_type *work_stack)
{
  struct def_blocks_d *def_map;
  bitmap phi_insertion_points;
  int bb_index;
  edge e;
  tree phi;
  basic_block bb;
  def_map = find_def_blocks_for (var);
  if (def_map == ((void *)0))
    return;
  phi_insertion_points = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  do { bitmap_element *ptr_ = (def_map->def_blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (bb_index) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { do { if ((*work_stack)->elements_used >= (*work_stack)->num_elements) (((*work_stack)) = varray_grow ((*work_stack), 2 * (*work_stack)->num_elements)); (*work_stack)->data.generic_nogc[(*work_stack)->elements_used++] = ((((basic_block_info)->data.bb[(bb_index)]))); } while (0); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
  while (((*work_stack)->elements_used) > 0)
    {
      int dfs_index;
      bb = ((*work_stack)->data.generic_nogc[(*work_stack)->elements_used - 1]);
      bb_index = bb->index;
      do { ((*work_stack)->elements_used--); } while (0);
      do { bitmap_element *ptr1_ = (dfs[bb_index])->first; bitmap_element *ptr2_ = (phi_insertion_points)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr1_ != 0 && ptr1_->indx < indx_) ptr1_ = ptr1_->next; if (ptr1_ != 0 && ptr1_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr1_ != 0 ; ptr1_ = ptr1_->next) { bitmap_element *tmp2_; while (ptr2_ != 0 && ptr2_->indx < ptr1_->indx) ptr2_ = ptr2_->next; tmp2_ = ((ptr2_ != 0 && ptr2_->indx == ptr1_->indx) ? ptr2_ : &bitmap_zero_bits); for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = (ptr1_->bits[word_num_] & ~ tmp2_->bits[word_num_]); if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (dfs_index) = (ptr1_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { basic_block bb = (((basic_block_info)->data.bb[(dfs_index)])); do { if ((*work_stack)->elements_used >= (*work_stack)->num_elements) (((*work_stack)) = varray_grow ((*work_stack), 2 * (*work_stack)->num_elements)); (*work_stack)->data.generic_nogc[(*work_stack)->elements_used++] = (bb); } while (0); bitmap_set_bit (phi_insertion_points, dfs_index); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
    }
  bitmap_operation (phi_insertion_points, phi_insertion_points,
      def_map->phi_blocks, BITMAP_AND_COMPL);
  compute_global_livein (def_map->livein_blocks, def_map->def_blocks);
  do { bitmap_element *ptr1_ = (phi_insertion_points)->first; bitmap_element *ptr2_ = (def_map->livein_blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr1_ != 0 && ptr1_->indx < indx_) ptr1_ = ptr1_->next; if (ptr1_ != 0 && ptr1_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr1_ != 0 ; ptr1_ = ptr1_->next) { while (ptr2_ != 0 && ptr2_->indx < ptr1_->indx) ptr2_ = ptr2_->next; if (ptr2_ == 0) { ptr1_ = (bitmap_element *)0; break; } else if (ptr2_->indx > ptr1_->indx) { bit_num_ = word_num_ = 0; continue; } for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = (ptr1_->bits[word_num_] & ptr2_->bits[word_num_]); if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (bb_index) = (ptr1_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); do { bb = (((basic_block_info)->data.bb[(bb_index)])); phi = create_phi_node (var, bb); if (((enum tree_code) (var)->common.code) == SSA_NAME) { for (e = bb->pred; e; e = e->pred_next) add_phi_arg (&phi, var, e); } } while (0); if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
              ;
  do { if (phi_insertion_points) { bitmap_clear (phi_insertion_points); free (phi_insertion_points); (phi_insertion_points) = 0; } } while (0);
}
static void
rewrite_stmt (struct dom_walk_data *walk_data,
       basic_block bb ,
       block_stmt_iterator si)
{
  size_t i;
  stmt_ann_t ann;
  tree stmt;
  vuse_optype vuses;
  v_may_def_optype v_may_defs;
  v_must_def_optype v_must_defs;
  def_optype defs;
  use_optype uses;
  struct rewrite_block_data *bd;
  bd = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  stmt = bsi_stmt (si);
  ann = stmt_ann (stmt);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "Renaming statement ");
      print_generic_stmt (dump_file, stmt, (1 << 1));
      fprintf (dump_file, "\n");
    }
  defs = get_def_ops (ann);
  uses = get_use_ops (ann);
  vuses = get_vuse_ops (ann);
  v_may_defs = get_v_may_def_ops (ann);
  v_must_defs = get_v_must_def_ops (ann);
  for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
    rewrite_operand (get_use_op_ptr ((uses), (i)));
  for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
    rewrite_operand (get_vuse_op_ptr ((vuses), (i)));
  for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
    {
      def_operand_p def_p = get_def_op_ptr ((defs), (i));
      if (((enum tree_code) (get_def_from_ptr (def_p))->common.code) != SSA_NAME)
 ((*((def_p).def)) = (make_ssa_name (get_def_from_ptr (def_p), stmt)));
      register_new_def (get_def_from_ptr (def_p), &bd->block_defs);
    }
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      rewrite_operand (get_v_may_def_op_ptr ((v_may_defs), (i)));
      if (((enum tree_code) ((get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i))))))->common.code) != SSA_NAME)
 (((*((get_v_may_def_result_ptr (((v_may_defs)), ((i)))).def)) = ((make_ssa_name ((get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i))))), stmt)))))
                ;
      register_new_def ((get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i))))), &bd->block_defs);
    }
  for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
    {
      def_operand_p v_must_def_p = get_v_must_def_op_ptr ((v_must_defs), (i));
      if (((enum tree_code) (get_def_from_ptr (v_must_def_p))->common.code) != SSA_NAME)
 ((*((v_must_def_p).def)) = (make_ssa_name (get_def_from_ptr (v_must_def_p), stmt)))
                                                     ;
      register_new_def (get_def_from_ptr (v_must_def_p), &bd->block_defs);
    }
}
static void
ssa_rewrite_stmt (struct dom_walk_data *walk_data,
    basic_block bb ,
    block_stmt_iterator si)
{
  size_t i;
  stmt_ann_t ann;
  tree stmt, var;
  use_operand_p use_p;
  def_operand_p def_p;
  vuse_optype vuses;
  v_may_def_optype v_may_defs;
  v_must_def_optype v_must_defs;
  def_optype defs;
  use_optype uses;
  struct rewrite_block_data *bd;
  sbitmap names_to_rename = walk_data->global_data;
  bd = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  stmt = bsi_stmt (si);
  ann = stmt_ann (stmt);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "Renaming statement ");
      print_generic_stmt (dump_file, stmt, (1 << 1));
      fprintf (dump_file, "\n");
    }
  defs = get_def_ops (ann);
  uses = get_use_ops (ann);
  vuses = get_vuse_ops (ann);
  v_may_defs = get_v_may_def_ops (ann);
  v_must_defs = get_v_must_def_ops (ann);
  for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
    {
      use_p = get_use_op_ptr ((uses), (i));
      if (((names_to_rename)->elms [((get_use_from_ptr (use_p))->ssa_name.version) / ((unsigned) (8 * 4))] >> ((get_use_from_ptr (use_p))->ssa_name.version) % ((unsigned) (8 * 4)) & 1))
 ((*((use_p).use)) = (get_reaching_def (get_use_from_ptr (use_p))));
    }
  for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
    {
      use_p = get_vuse_op_ptr ((vuses), (i));
      if (((names_to_rename)->elms [((get_use_from_ptr (use_p))->ssa_name.version) / ((unsigned) (8 * 4))] >> ((get_use_from_ptr (use_p))->ssa_name.version) % ((unsigned) (8 * 4)) & 1))
 ((*((use_p).use)) = (get_reaching_def (get_use_from_ptr (use_p))));
    }
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      use_p = get_v_may_def_op_ptr ((v_may_defs), (i));
      if (((names_to_rename)->elms [((get_use_from_ptr (use_p))->ssa_name.version) / ((unsigned) (8 * 4))] >> ((get_use_from_ptr (use_p))->ssa_name.version) % ((unsigned) (8 * 4)) & 1))
 ((*((use_p).use)) = (get_reaching_def (get_use_from_ptr (use_p))));
    }
  for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
    {
      def_p = get_def_op_ptr ((defs), (i));
      var = get_def_from_ptr (def_p);
      if (!((names_to_rename)->elms [((var)->ssa_name.version) / ((unsigned) (8 * 4))] >> ((var)->ssa_name.version) % ((unsigned) (8 * 4)) & 1))
 continue;
      ((*((def_p).def)) = (duplicate_ssa_name (var, stmt)));
      ssa_register_new_def (var, get_def_from_ptr (def_p), &bd->block_defs);
    }
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      def_p = get_v_may_def_result_ptr ((v_may_defs), (i));
      var = get_def_from_ptr (def_p);
      if (!((names_to_rename)->elms [((var)->ssa_name.version) / ((unsigned) (8 * 4))] >> ((var)->ssa_name.version) % ((unsigned) (8 * 4)) & 1))
 continue;
      ((*((def_p).def)) = (duplicate_ssa_name (var, stmt)));
      ssa_register_new_def (var, get_def_from_ptr (def_p), &bd->block_defs);
    }
  for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
    {
      def_p = get_v_must_def_op_ptr ((v_must_defs), (i));
      var = get_def_from_ptr (def_p);
      if (!((names_to_rename)->elms [((var)->ssa_name.version) / ((unsigned) (8 * 4))] >> ((var)->ssa_name.version) % ((unsigned) (8 * 4)) & 1))
 continue;
      ((*((def_p).def)) = (duplicate_ssa_name (var, stmt)));
      ssa_register_new_def (var, get_def_from_ptr (def_p), &bd->block_defs);
    }
}
static void
rewrite_operand (use_operand_p op_p)
{
  if (((enum tree_code) (get_use_from_ptr (op_p))->common.code) != SSA_NAME)
    ((*((op_p).use)) = (get_reaching_def (get_use_from_ptr (op_p))));
}
void
register_new_def (tree def, varray_type *block_defs_p)
{
  tree var = (def)->ssa_name.var;
  tree currdef;
  if (get_phi_state (var) == NEED_PHI_STATE_NO)
    {
      set_current_def (var, def);
      return;
    }
  currdef = get_current_def (var);
  if (! *block_defs_p)
    *block_defs_p = varray_init (20, VARRAY_DATA_TREE, "block_defs");
  do { if ((*block_defs_p)->elements_used >= (*block_defs_p)->num_elements) (((*block_defs_p)) = varray_grow ((*block_defs_p), 2 * (*block_defs_p)->num_elements)); (*block_defs_p)->data.tree1[(*block_defs_p)->elements_used++] = (currdef ? currdef : var); } while (0);
  set_current_def (var, def);
}
static tree
get_reaching_def (tree var)
{
  tree default_d, currdef_var, avar;
  default_d = (tree) ((void *)0);
  currdef_var = get_current_def (var);
  if (currdef_var == (tree) ((void *)0))
    {
      if (((enum tree_code) (var)->common.code) == SSA_NAME)
 avar = (var)->ssa_name.var;
      else
 avar = var;
      default_d = default_def (avar);
      if (default_d == (tree) ((void *)0))
 {
   default_d = make_ssa_name (avar, build_empty_stmt ());
   set_default_def (avar, default_d);
 }
      set_current_def (var, default_d);
    }
  return (currdef_var) ? currdef_var : default_d;
}
static hashval_t
def_blocks_hash (const void *p)
{
  return htab_hash_pointer
 ((const void *)((const struct def_blocks_d *)p)->var);
}
static int
def_blocks_eq (const void *p1, const void *p2)
{
  return ((const struct def_blocks_d *)p1)->var
  == ((const struct def_blocks_d *)p2)->var;
}
static void
def_blocks_free (void *p)
{
  struct def_blocks_d *entry = p;
  do { if (entry->def_blocks) { bitmap_clear (entry->def_blocks); free (entry->def_blocks); (entry->def_blocks) = 0; } } while (0);
  do { if (entry->phi_blocks) { bitmap_clear (entry->phi_blocks); free (entry->phi_blocks); (entry->phi_blocks) = 0; } } while (0);
  do { if (entry->livein_blocks) { bitmap_clear (entry->livein_blocks); free (entry->livein_blocks); (entry->livein_blocks) = 0; } } while (0);
  free (entry);
}
void
debug_def_blocks (void)
{
  htab_traverse (def_blocks, debug_def_blocks_r, ((void *)0));
}
static int
debug_def_blocks_r (void **slot, void *data )
{
  unsigned long i;
  struct def_blocks_d *db_p = (struct def_blocks_d *) *slot;
  fprintf (stderr, "VAR: ");
  print_generic_expr (stderr, db_p->var, dump_flags);
  fprintf (stderr, ", DEF_BLOCKS: { ");
  do { bitmap_element *ptr_ = (db_p->def_blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); fprintf (stderr, "%ld ", i); if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                   ;
  fprintf (stderr, "}");
  fprintf (stderr, ", LIVEIN_BLOCKS: { ");
  do { bitmap_element *ptr_ = (db_p->livein_blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); fprintf (stderr, "%ld ", i); if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                   ;
  fprintf (stderr, "}\n");
  return 1;
}
static struct def_blocks_d *
find_def_blocks_for (tree var)
{
  struct def_blocks_d dm;
  dm.var = var;
  return (struct def_blocks_d *) htab_find (def_blocks, &dm);
}
static struct def_blocks_d *
get_def_blocks_for (tree var)
{
  struct def_blocks_d db, *db_p;
  void **slot;
  db.var = var;
  slot = htab_find_slot (def_blocks, (void *) &db, INSERT);
  if (*slot == ((void *)0))
    {
      db_p = xmalloc (sizeof (*db_p));
      db_p->var = var;
      db_p->def_blocks = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      db_p->phi_blocks = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      db_p->livein_blocks = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      *slot = (void *) db_p;
    }
  else
    db_p = (struct def_blocks_d *) *slot;
  return db_p;
}
static void
invalidate_name_tags (bitmap vars_to_rename)
{
  size_t i;
  unsigned char rename_name_tags_p;
  rename_name_tags_p = 0;
  do { bitmap_element *ptr_ = (vars_to_rename)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); if ((((enum tree_code) (((((referenced_vars)->data.tree1[i]))->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((((referenced_vars)->data.tree1[i]))->common.type))->common.code) == REFERENCE_TYPE)) { rename_name_tags_p = 1; break; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
  if (rename_name_tags_p)
    for (i = 0; i < ((referenced_vars)->elements_used); i++)
      {
 var_ann_t ann = var_ann (((referenced_vars)->data.tree1[i]));
 if (ann->mem_tag_kind == NAME_TAG)
   {
     size_t j;
     varray_type may_aliases = ann->may_aliases;
     bitmap_set_bit (vars_to_rename, ann->uid);
     if (ann->may_aliases)
       for (j = 0; j < ((may_aliases)->elements_used); j++)
  {
    tree var = ((may_aliases)->data.tree1[j]);
    bitmap_set_bit (vars_to_rename, var_ann (var)->uid);
  }
   }
      }
}
void
rewrite_into_ssa (unsigned char all)
{
  bitmap *dfs;
  basic_block bb;
  struct dom_walk_data walk_data;
  struct mark_def_sites_global_data mark_def_sites_global_data;
  bitmap old_vars_to_rename = vars_to_rename;
  unsigned i;
  timevar_push (TV_TREE_SSA_OTHER);
  if (all)
    vars_to_rename = ((void *)0);
  else
    {
      if (vars_to_rename == ((void *)0))
 fancy_abort ("gcc.c", 119712, "?");
      if (bitmap_first_set_bit (vars_to_rename) < 0)
 {
   timevar_pop (TV_TREE_SSA_OTHER);
   return;
 }
      invalidate_name_tags (vars_to_rename);
      remove_all_phi_nodes_for (vars_to_rename);
    }
  def_blocks = htab_create (((referenced_vars)->elements_used),
       def_blocks_hash, def_blocks_eq, def_blocks_free);
  dfs = (bitmap *) xmalloc (last_basic_block * sizeof (bitmap *));
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e;
      int count = 0;
      for (e = bb->pred; e; e = e->pred_next)
 count++;
      bb_ann (bb)->num_preds = count;
      dfs[bb->index] = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
    }
  for (i = 0; i < ((referenced_vars)->elements_used); i++)
    set_current_def (((referenced_vars)->data.tree1[i]), (tree) ((void *)0));
  calculate_dominance_info (CDI_DOMINATORS);
  compute_dominance_frontiers (dfs);
  walk_data.walk_stmts_backward = 0;
  walk_data.dom_direction = CDI_DOMINATORS;
  walk_data.initialize_block_local_data = ((void *)0);
  walk_data.before_dom_children_before_stmts = mark_def_sites_initialize_block;
  walk_data.before_dom_children_walk_stmts = mark_def_sites;
  walk_data.before_dom_children_after_stmts = ((void *)0);
  walk_data.after_dom_children_before_stmts = ((void *)0);
  walk_data.after_dom_children_walk_stmts = ((void *)0);
  walk_data.after_dom_children_after_stmts = ((void *)0);
  mark_def_sites_global_data.kills = sbitmap_alloc (((referenced_vars)->elements_used));
  walk_data.global_data = &mark_def_sites_global_data;
  walk_data.block_local_data_size = 0;
  init_walk_dominator_tree (&walk_data);
  walk_dominator_tree (&walk_data, ENTRY_BLOCK_PTR);
  fini_walk_dominator_tree (&walk_data);
  free(mark_def_sites_global_data.kills);
  insert_phi_nodes (dfs, ((void *)0));
  timevar_push (TV_TREE_SSA_REWRITE_BLOCKS);
  walk_data.walk_stmts_backward = 0;
  walk_data.dom_direction = CDI_DOMINATORS;
  walk_data.initialize_block_local_data = rewrite_initialize_block_local_data;
  walk_data.before_dom_children_before_stmts = rewrite_initialize_block;
  walk_data.before_dom_children_walk_stmts = rewrite_stmt;
  walk_data.before_dom_children_after_stmts = rewrite_add_phi_arguments;
  walk_data.after_dom_children_before_stmts = ((void *)0);
  walk_data.after_dom_children_walk_stmts = ((void *)0);
  walk_data.after_dom_children_after_stmts = rewrite_finalize_block;
  walk_data.global_data = ((void *)0);
  walk_data.block_local_data_size = sizeof (struct rewrite_block_data);
  init_walk_dominator_tree (&walk_data);
  walk_dominator_tree (&walk_data, ENTRY_BLOCK_PTR);
  fini_walk_dominator_tree (&walk_data);
  timevar_pop (TV_TREE_SSA_REWRITE_BLOCKS);
  if (dump_file && (dump_flags & (1 << 4)))
    {
      dump_dfa_stats (dump_file);
      dump_tree_ssa_stats (dump_file);
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    do { if (dfs[bb->index]) { bitmap_clear (dfs[bb->index]); free (dfs[bb->index]); (dfs[bb->index]) = 0; } } while (0);
  free (dfs);
  htab_delete (def_blocks);
  vars_to_rename = old_vars_to_rename;
  timevar_pop (TV_TREE_SSA_OTHER);
}
void
rewrite_ssa_into_ssa (bitmap names_to_rename)
{
  bitmap *dfs;
  basic_block bb;
  struct dom_walk_data walk_data;
  struct mark_def_sites_global_data mark_def_sites_global_data;
  unsigned i;
  sbitmap snames_to_rename;
  tree name;
  if (bitmap_first_set_bit (names_to_rename) < 0)
    return;
  timevar_push (TV_TREE_SSA_OTHER);
  def_blocks = htab_create (((ssa_names)->elements_used),
       def_blocks_hash, def_blocks_eq, def_blocks_free);
  dfs = (bitmap *) xmalloc (last_basic_block * sizeof (bitmap *));
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e;
      int count = 0;
      for (e = bb->pred; e; e = e->pred_next)
 count++;
      bb_ann (bb)->num_preds = count;
      dfs[bb->index] = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
    }
  calculate_dominance_info (CDI_DOMINATORS);
  compute_dominance_frontiers (dfs);
  walk_data.walk_stmts_backward = 0;
  walk_data.dom_direction = CDI_DOMINATORS;
  walk_data.initialize_block_local_data = ((void *)0);
  walk_data.before_dom_children_before_stmts
   = ssa_mark_def_sites_initialize_block;
  walk_data.before_dom_children_walk_stmts = ssa_mark_def_sites;
  walk_data.before_dom_children_after_stmts = ssa_mark_phi_uses;
  walk_data.after_dom_children_before_stmts = ((void *)0);
  walk_data.after_dom_children_walk_stmts = ((void *)0);
  walk_data.after_dom_children_after_stmts = ((void *)0);
  snames_to_rename = sbitmap_alloc (((ssa_names)->elements_used));
  sbitmap_zero (snames_to_rename);
  do { bitmap_element *ptr_ = (names_to_rename)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); ((snames_to_rename)->elms [(i) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (i) % ((unsigned) (8 * 4))); if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                     ;
  mark_def_sites_global_data.kills = sbitmap_alloc (((ssa_names)->elements_used));
  mark_def_sites_global_data.names_to_rename = snames_to_rename;
  walk_data.global_data = &mark_def_sites_global_data;
  walk_data.block_local_data_size = 0;
  init_walk_dominator_tree (&walk_data);
  walk_dominator_tree (&walk_data, ENTRY_BLOCK_PTR);
  fini_walk_dominator_tree (&walk_data);
  free(mark_def_sites_global_data.kills);
  for (i = 0; i < ((ssa_names)->elements_used); i++)
    if (((ssa_names)->data.tree1[i]))
      set_current_def (((ssa_names)->data.tree1[i]), (tree) ((void *)0));
  insert_phi_nodes (dfs, names_to_rename);
  timevar_push (TV_TREE_SSA_REWRITE_BLOCKS);
  walk_data.walk_stmts_backward = 0;
  walk_data.dom_direction = CDI_DOMINATORS;
  walk_data.initialize_block_local_data
   = rewrite_initialize_block_local_data;
  walk_data.before_dom_children_before_stmts = ssa_rewrite_initialize_block;
  walk_data.before_dom_children_walk_stmts = ssa_rewrite_stmt;
  walk_data.before_dom_children_after_stmts = ssa_rewrite_phi_arguments;
  walk_data.after_dom_children_before_stmts = ((void *)0);
  walk_data.after_dom_children_walk_stmts = ((void *)0);
  walk_data.after_dom_children_after_stmts = ssa_rewrite_finalize_block;
  walk_data.global_data = snames_to_rename;
  walk_data.block_local_data_size = sizeof (struct rewrite_block_data);
  init_walk_dominator_tree (&walk_data);
  walk_dominator_tree (&walk_data, ENTRY_BLOCK_PTR);
  fini_walk_dominator_tree (&walk_data);
  free(snames_to_rename);
  timevar_pop (TV_TREE_SSA_REWRITE_BLOCKS);
  if (dump_file && (dump_flags & (1 << 4)))
    {
      dump_dfa_stats (dump_file);
      dump_tree_ssa_stats (dump_file);
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    do { if (dfs[bb->index]) { bitmap_clear (dfs[bb->index]); free (dfs[bb->index]); (dfs[bb->index]) = 0; } } while (0);
  free (dfs);
  htab_delete (def_blocks);
  for (i = 0; i < ((ssa_names)->elements_used); i++)
    {
      name = ((ssa_names)->data.tree1[i]);
      if (!name
   || !(name)->ssa_name.aux)
 continue;
      free ((name)->ssa_name.aux);
      (name)->ssa_name.aux = ((void *)0);
    }
  timevar_pop (TV_TREE_SSA_OTHER);
}
static void
rewrite_all_into_ssa (void)
{
  rewrite_into_ssa (1);
}
struct tree_opt_pass pass_build_ssa =
{
  "ssa",
  ((void *)0),
  rewrite_all_into_ssa,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 3) | (1 << 4),
  (1 << 6),
  0,
  0,
  (1 << 0) | (1 << 3)
};
typedef struct _var_map
{
  partition var_partition;
  int *partition_to_compact;
  int *compact_to_partition;
  tree *partition_to_var;
  unsigned int num_partitions;
  unsigned int partition_size;
  int *ref_count;
} *var_map;
extern var_map init_var_map (int);
extern void delete_var_map (var_map);
extern void dump_var_map (FILE *, var_map);
extern int var_union (var_map, tree, tree);
extern void change_partition_var (var_map, tree, int);
extern void compact_var_map (var_map, int);
extern void remove_ssa_form (FILE *, var_map, int);
extern void register_ssa_partitions_for_vars (bitmap vars, var_map map);
extern tree make_ssa_temp (tree);
static int num_var_partitions (var_map);
static tree var_to_partition_to_var (var_map, tree);
static tree partition_to_var (var_map, int);
static int var_to_partition (var_map, tree);
static tree version_to_var (var_map, int);
static int version_ref_count (var_map, tree);
static void register_ssa_partition (var_map, tree, unsigned char);
extern var_map create_ssa_var_map (int);
static int
num_var_partitions (var_map map)
{
  return map->num_partitions;
}
static int
version_ref_count (var_map map, tree ssa_var)
{
  int version = (ssa_var)->ssa_name.version;
  return map->ref_count[version];
}
static tree
partition_to_var (var_map map, int i)
{
  if (map->compact_to_partition)
    i = map->compact_to_partition[i];
  i = ((map->var_partition)->elements[(i)].class_element);
  return map->partition_to_var[i];
}
static tree version_to_var (var_map map, int version)
{
  int part;
  part = ((map->var_partition)->elements[(version)].class_element);
  if (map->partition_to_compact)
    part = map->partition_to_compact[part];
  if (part == -1)
    return (tree) ((void *)0);
  return partition_to_var (map, part);
}
static int
var_to_partition (var_map map, tree var)
{
  var_ann_t ann;
  int part;
  if (((enum tree_code) (var)->common.code) == SSA_NAME)
    {
      part = ((map->var_partition)->elements[((var)->ssa_name.version)].class_element);
      if (map->partition_to_compact)
 part = map->partition_to_compact[part];
    }
  else
    {
      ann = var_ann (var);
      if (ann->out_of_ssa_tag)
 part = (ann->partition1);
      else
        part = -1;
    }
  return part;
}
static tree
var_to_partition_to_var (var_map map, tree var)
{
  int part;
  part = var_to_partition (map, var);
  if (part == -1)
    return (tree) ((void *)0);
  return partition_to_var (map, part);
}
static void
register_ssa_partition (var_map map, tree ssa_var, unsigned char is_use)
{
  int version;
  version = (ssa_var)->ssa_name.version;
  if (is_use && map->ref_count)
    map->ref_count[version]++;
  if (map->partition_to_var[version] == (tree) ((void *)0))
    map->partition_to_var[(ssa_var)->ssa_name.version] = ssa_var;
}
typedef struct tree_live_info_d
{
  var_map map;
  bitmap global;
  bitmap *livein;
  int num_blocks;
  bitmap *liveout;
} *tree_live_info_p;
extern tree_live_info_p calculate_live_on_entry (var_map);
extern void calculate_live_on_exit (tree_live_info_p);
extern void delete_tree_live_info (tree_live_info_p);
extern void dump_live_info (FILE *, tree_live_info_p, int);
static int partition_is_global (tree_live_info_p, int);
static bitmap live_entry_blocks (tree_live_info_p, int);
static bitmap live_on_exit (tree_live_info_p, basic_block);
static var_map live_var_map (tree_live_info_p);
static void live_merge_and_clear (tree_live_info_p, int, int);
static void make_live_on_entry (tree_live_info_p, basic_block, int);
static int
partition_is_global (tree_live_info_p live, int p)
{
  if (!live->global)
    fancy_abort ("gcc.c", 120315, "?");
  return bitmap_bit_p (live->global, p);
}
static bitmap
live_entry_blocks (tree_live_info_p live, int p)
{
  if (!live->livein)
    fancy_abort ("gcc.c", 120328, "?");
  return live->livein[p];
}
static bitmap
live_on_exit (tree_live_info_p live, basic_block bb)
{
  if (!live->liveout)
    fancy_abort ("gcc.c", 120341, "?");
  if (bb == ENTRY_BLOCK_PTR || bb == EXIT_BLOCK_PTR)
    fancy_abort ("gcc.c", 120344, "?");
  return live->liveout[bb->index];
}
static var_map
live_var_map (tree_live_info_p live)
{
  return live->map;
}
static void
live_merge_and_clear (tree_live_info_p live, int p1, int p2)
{
  bitmap_operation (live->livein[p1], live->livein[p1], live->livein[p2], BITMAP_IOR);
  bitmap_clear (live->livein[p2]);
}
static void
make_live_on_entry (tree_live_info_p live, basic_block bb , int p)
{
  bitmap_set_bit (live->livein[p], bb->index);
  bitmap_set_bit (live->global, p);
}
typedef struct tree_partition_associator_d
{
  varray_type trees;
  varray_type first_partition;
  int *next_partition;
  int *partition_to_tree_map;
  int num_trees;
  int uncompressed_num;
  var_map map;
} *tpa_p;
static tree tpa_tree (tpa_p, int);
static int tpa_first_partition (tpa_p, int);
static int tpa_next_partition (tpa_p, int);
static int tpa_num_trees (tpa_p);
static int tpa_find_tree (tpa_p, int);
static void tpa_decompact (tpa_p);
extern tpa_p tpa_init (var_map);
extern void tpa_delete (tpa_p);
extern void tpa_dump (FILE *, tpa_p);
extern void tpa_remove_partition (tpa_p, int, int);
extern int tpa_compact (tpa_p);
static int
tpa_num_trees (tpa_p tpa)
{
  return tpa->num_trees;
}
static tree
tpa_tree (tpa_p tpa, int i)
{
  return ((tpa->trees)->data.tree1[i]);
}
static int
tpa_first_partition (tpa_p tpa, int i)
{
  return ((tpa->first_partition)->data.i[i]);
}
static int
tpa_next_partition (tpa_p tpa, int i)
{
  return tpa->next_partition[i];
}
static int
tpa_find_tree (tpa_p tpa, int i)
{
  int index;
  index = tpa->partition_to_tree_map[i];
  if (index != -1 && index >= tpa_num_trees (tpa))
    {
      index = -1;
    }
  return index;
}
static void
tpa_decompact(tpa_p tpa)
{
  tpa->num_trees = tpa->uncompressed_num;
}
typedef tpa_p root_var_p;
static tree root_var (root_var_p, int);
static int root_var_first_partition (root_var_p, int);
static int root_var_next_partition (root_var_p, int);
static int root_var_num (root_var_p);
static void root_var_dump (FILE *, root_var_p);
static void root_var_remove_partition (root_var_p, int, int);
static void root_var_delete (root_var_p);
static int root_var_find (root_var_p, int);
static int root_var_compact (root_var_p);
static void root_var_decompact (tpa_p);
extern root_var_p root_var_init (var_map);
static int
root_var_num (root_var_p rv)
{
  return tpa_num_trees (rv);
}
static tree
root_var (root_var_p rv, int i)
{
  return tpa_tree (rv, i);
}
static int
root_var_first_partition (root_var_p rv, int i)
{
  return tpa_first_partition (rv, i);
}
static int
root_var_next_partition (root_var_p rv, int i)
{
  return tpa_next_partition (rv, i);
}
static void
root_var_dump (FILE *f, root_var_p rv)
{
  fprintf (f, "\nRoot Var dump\n");
  tpa_dump (f, rv);
  fprintf (f, "\n");
}
static void
root_var_delete (root_var_p rv)
{
  tpa_delete (rv);
}
static void
root_var_remove_partition (root_var_p rv, int root_index, int partition_index)
{
  tpa_remove_partition (rv, root_index, partition_index);
}
static int
root_var_find (root_var_p rv, int i)
{
  return tpa_find_tree (rv, i);
}
static int
root_var_compact (root_var_p rv)
{
  return tpa_compact (rv);
}
static void
root_var_decompact (root_var_p rv)
{
  tpa_decompact (rv);
}
typedef tpa_p type_var_p;
static tree type_var (type_var_p, int);
static int type_var_first_partition (type_var_p, int);
static int type_var_next_partition (type_var_p, int);
static int type_var_num (type_var_p);
static void type_var_dump (FILE *, type_var_p);
static void type_var_remove_partition (type_var_p, int, int);
static void type_var_delete (type_var_p);
static int type_var_find (type_var_p, int);
static int type_var_compact (type_var_p);
static void type_var_decompact (type_var_p);
extern type_var_p type_var_init (var_map);
static int
type_var_num (type_var_p tv)
{
  return tpa_num_trees (tv);
}
static tree
type_var (type_var_p tv, int i)
{
  return tpa_tree (tv, i);
}
static int
type_var_first_partition (type_var_p tv, int i)
{
  return tpa_first_partition (tv, i);
}
static int
type_var_next_partition (type_var_p tv, int i)
{
  return tpa_next_partition (tv, i);
}
static void
type_var_dump (FILE *f, type_var_p tv)
{
  fprintf (f, "\nType Var dump\n");
  tpa_dump (f, tv);
  fprintf (f, "\n");
}
static void
type_var_delete (type_var_p tv)
{
  tpa_delete (tv);
}
static void
type_var_remove_partition (type_var_p tv, int type_index, int partition_index)
{
  tpa_remove_partition (tv, type_index, partition_index);
}
static int
type_var_find (type_var_p tv, int i)
{
  return tpa_find_tree (tv, i);
}
static int
type_var_compact (type_var_p tv)
{
  return tpa_compact (tv);
}
static void
type_var_decompact (type_var_p tv)
{
  tpa_decompact (tv);
}
typedef struct partition_pair_d
{
  int first_partition;
  int second_partition;
  int cost;
  struct partition_pair_d *next;
} *partition_pair_p;
typedef struct coalesce_list_d
{
  var_map map;
  partition_pair_p *list;
  unsigned char add_mode;
} *coalesce_list_p;
extern coalesce_list_p create_coalesce_list (var_map);
extern void add_coalesce (coalesce_list_p, int, int, int);
extern void sort_coalesce_list (coalesce_list_p);
extern void dump_coalesce_list (FILE *, coalesce_list_p);
extern void delete_coalesce_list (coalesce_list_p);
extern int pop_best_coalesce (coalesce_list_p, int *, int *);
extern conflict_graph build_tree_conflict_graph (tree_live_info_p, tpa_p,
       coalesce_list_p);
extern void coalesce_tpa_members (tpa_p tpa, conflict_graph graph, var_map map,
      coalesce_list_p cl, FILE *);
typedef struct _elim_graph {
  int size;
  varray_type nodes;
  varray_type edge_list;
  sbitmap visited;
  varray_type stack;
  var_map map;
  edge e;
  varray_type const_copies;
} *elim_graph;
static tree create_temp (tree);
static void insert_copy_on_edge (edge, tree, tree);
static elim_graph new_elim_graph (int);
static void delete_elim_graph (elim_graph);
static void clear_elim_graph (elim_graph);
static int elim_graph_size (elim_graph);
static void elim_graph_add_node (elim_graph, tree);
static void elim_graph_add_edge (elim_graph, int, int);
static int elim_graph_remove_succ_edge (elim_graph, int);
static void eliminate_name (elim_graph, tree);
static void eliminate_build (elim_graph, basic_block, int);
static void elim_forward (elim_graph, int);
static int elim_unvisited_predecessor (elim_graph, int);
static void elim_backward (elim_graph, int);
static void elim_create (elim_graph, int);
static void eliminate_phi (edge, int, elim_graph);
static tree_live_info_p coalesce_ssa_name (var_map, int);
static void assign_vars (var_map);
static unsigned char replace_use_variable (var_map, use_operand_p, tree *);
static unsigned char replace_def_variable (var_map, def_operand_p, tree *);
static void eliminate_virtual_phis (void);
static void coalesce_abnormal_edges (var_map, conflict_graph, root_var_p);
static void print_exprs (FILE *, const char *, tree, const char *, tree,
    const char *);
static void print_exprs_edge (FILE *, edge, const char *, tree, const char *,
         tree);
static tree
create_temp (tree t)
{
  tree tmp;
  const char *name = ((void *)0);
  tree type;
  if (((enum tree_code) (t)->common.code) == SSA_NAME)
    t = (t)->ssa_name.var;
  if (((enum tree_code) (t)->common.code) != VAR_DECL
      && ((enum tree_code) (t)->common.code) != PARM_DECL)
    fancy_abort ("gcc.c", 120872, "?");
  type = ((t)->common.type);
  tmp = ((t)->decl.name);
  if (tmp)
    name = ((const char *) (tmp)->identifier.id.str);
  if (name == ((void *)0))
    name = "temp";
  tmp = create_tmp_var (type, name);
  ((tmp)->decl.artificial_flag) = ((t)->decl.artificial_flag);
  add_referenced_tmp_var (tmp);
  var_ann (tmp)->type_mem_tag = var_ann (t)->type_mem_tag;
  if (is_call_clobbered (t))
    mark_call_clobbered (tmp);
  return tmp;
}
static void
insert_copy_on_edge (edge e, tree dest, tree src)
{
  tree copy;
  copy = build (MODIFY_EXPR, ((dest)->common.type), dest, src);
  set_is_used (dest);
  if (((enum tree_code) (src)->common.code) == ADDR_EXPR)
    src = ((src)->exp.operands[0]);
  if (((enum tree_code) (src)->common.code) == VAR_DECL || ((enum tree_code) (src)->common.code) == PARM_DECL)
    set_is_used (src);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file,
        "Inserting a copy on edge BB%d->BB%d :",
        e->src->index,
        e->dest->index);
      print_generic_expr (dump_file, copy, dump_flags);
      fprintf (dump_file, "\n");
    }
  bsi_insert_on_edge (e, copy);
}
static elim_graph
new_elim_graph (int size)
{
  elim_graph g = (elim_graph) xmalloc (sizeof (struct _elim_graph));
  g->nodes = varray_init (30, VARRAY_DATA_TREE, "Elimination Node List");
  g->const_copies = varray_init (20, VARRAY_DATA_TREE, "Elimination Constant Copies");
  g->edge_list = varray_init (20, VARRAY_DATA_I, "Elimination Edge List");
  g->stack = varray_init (30, VARRAY_DATA_I, " Elimination Stack");
  g->visited = sbitmap_alloc (size);
  return g;
}
static void
clear_elim_graph (elim_graph g)
{
  ((g->nodes)->elements_used = 0);
  ((g->edge_list)->elements_used = 0);
}
static void
delete_elim_graph (elim_graph g)
{
  free(g->visited);
  free (g);
}
static int
elim_graph_size (elim_graph g)
{
  return ((g->nodes)->elements_used);
}
static void
elim_graph_add_node (elim_graph g, tree node)
{
  int x;
  for (x = 0; x < elim_graph_size (g); x++)
    if (((g->nodes)->data.tree1[x]) == node)
      return;
  do { if ((g->nodes)->elements_used >= (g->nodes)->num_elements) (((g->nodes)) = varray_grow ((g->nodes), 2 * (g->nodes)->num_elements)); (g->nodes)->data.tree1[(g->nodes)->elements_used++] = (node); } while (0);
}
static void
elim_graph_add_edge (elim_graph g, int pred, int succ)
{
  do { if ((g->edge_list)->elements_used >= (g->edge_list)->num_elements) (((g->edge_list)) = varray_grow ((g->edge_list), 2 * (g->edge_list)->num_elements)); (g->edge_list)->data.i[(g->edge_list)->elements_used++] = (pred); } while (0);
  do { if ((g->edge_list)->elements_used >= (g->edge_list)->num_elements) (((g->edge_list)) = varray_grow ((g->edge_list), 2 * (g->edge_list)->num_elements)); (g->edge_list)->data.i[(g->edge_list)->elements_used++] = (succ); } while (0);
}
static int
elim_graph_remove_succ_edge (elim_graph g, int node)
{
  int y;
  unsigned x;
  for (x = 0; x < ((g->edge_list)->elements_used); x += 2)
    if (((g->edge_list)->data.i[x]) == node)
      {
        ((g->edge_list)->data.i[x]) = -1;
 y = ((g->edge_list)->data.i[x + 1]);
 ((g->edge_list)->data.i[x + 1]) = -1;
 return y;
      }
  return -1;
}
static void
eliminate_name (elim_graph g, tree T)
{
  elim_graph_add_node (g, T);
}
static void
eliminate_build (elim_graph g, basic_block B, int i)
{
  tree phi;
  tree T0, Ti;
  int p0, pi;
  clear_elim_graph (g);
  for (phi = phi_nodes (B); phi; phi = (((phi))->common.chain))
    {
      T0 = var_to_partition_to_var (g->map, get_def_from_ptr (get_phi_result_ptr (phi)));
      if (T0 == (tree) ((void *)0))
 continue;
      if (((phi)->phi.a[i]).e == g->e)
 Ti = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
      else
        {
   pi = phi_arg_from_edge (phi, g->e);
   if (pi == -1)
     fancy_abort ("gcc.c", 121092, "?");
   Ti = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((pi))));
 }
      if (!phi_ssa_name_p (Ti)
   || (((enum tree_code) (Ti)->common.code) == SSA_NAME
       && var_to_partition (g->map, Ti) == -1))
        {
   do { if ((g->const_copies)->elements_used >= (g->const_copies)->num_elements) (((g->const_copies)) = varray_grow ((g->const_copies), 2 * (g->const_copies)->num_elements)); (g->const_copies)->data.tree1[(g->const_copies)->elements_used++] = (T0); } while (0);
   do { if ((g->const_copies)->elements_used >= (g->const_copies)->num_elements) (((g->const_copies)) = varray_grow ((g->const_copies), 2 * (g->const_copies)->num_elements)); (g->const_copies)->data.tree1[(g->const_copies)->elements_used++] = (Ti); } while (0);
 }
      else
        {
   Ti = var_to_partition_to_var (g->map, Ti);
   if (T0 != Ti)
     {
       eliminate_name (g, T0);
       eliminate_name (g, Ti);
       p0 = var_to_partition (g->map, T0);
       pi = var_to_partition (g->map, Ti);
       elim_graph_add_edge (g, p0, pi);
     }
 }
    }
}
static void
elim_forward (elim_graph g, int T)
{
  int S;
  ((g->visited)->elms [(T) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (T) % ((unsigned) (8 * 4)));
  do { unsigned x_; int y_; for (x_ = 0; x_ < (((g)->edge_list)->elements_used); x_ += 2) { y_ = (((g)->edge_list)->data.i[x_]); if (y_ != (T)) continue; (S) = (((g)->edge_list)->data.i[x_ + 1]); { if (!((g->visited)->elms [(S) / ((unsigned) (8 * 4))] >> (S) % ((unsigned) (8 * 4)) & 1)) elim_forward (g, S); }; } } while (0)
      ;
  do { if ((g->stack)->elements_used >= (g->stack)->num_elements) (((g->stack)) = varray_grow ((g->stack), 2 * (g->stack)->num_elements)); (g->stack)->data.i[(g->stack)->elements_used++] = (T); } while (0);
}
static int
elim_unvisited_predecessor (elim_graph g, int T)
{
  int P;
  do { unsigned x_; int y_; for (x_ = 0; x_ < (((g)->edge_list)->elements_used); x_ += 2) { y_ = (((g)->edge_list)->data.i[x_ + 1]); if (y_ != (T)) continue; (P) = (((g)->edge_list)->data.i[x_]); { if (!((g->visited)->elms [(P) / ((unsigned) (8 * 4))] >> (P) % ((unsigned) (8 * 4)) & 1)) return 1; }; } } while (0)
      ;
  return 0;
}
static void
elim_backward (elim_graph g, int T)
{
  int P;
  ((g->visited)->elms [(T) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (T) % ((unsigned) (8 * 4)));
  do { unsigned x_; int y_; for (x_ = 0; x_ < (((g)->edge_list)->elements_used); x_ += 2) { y_ = (((g)->edge_list)->data.i[x_ + 1]); if (y_ != (T)) continue; (P) = (((g)->edge_list)->data.i[x_]); { if (!((g->visited)->elms [(P) / ((unsigned) (8 * 4))] >> (P) % ((unsigned) (8 * 4)) & 1)) { elim_backward (g, P); insert_copy_on_edge (g->e, partition_to_var (g->map, P), partition_to_var (g->map, T)); } }; } } while (0)
      ;
}
static void
elim_create (elim_graph g, int T)
{
  tree U;
  int P, S;
  if (elim_unvisited_predecessor (g, T))
    {
      U = create_temp (partition_to_var (g->map, T));
      insert_copy_on_edge (g->e, U, partition_to_var (g->map, T));
      do { unsigned x_; int y_; for (x_ = 0; x_ < (((g)->edge_list)->elements_used); x_ += 2) { y_ = (((g)->edge_list)->data.i[x_ + 1]); if (y_ != (T)) continue; (P) = (((g)->edge_list)->data.i[x_]); { if (!((g->visited)->elms [(P) / ((unsigned) (8 * 4))] >> (P) % ((unsigned) (8 * 4)) & 1)) { elim_backward (g, P); insert_copy_on_edge (g->e, partition_to_var (g->map, P), U); } }; } } while (0)
   ;
    }
  else
    {
      S = elim_graph_remove_succ_edge (g, T);
      if (S != -1)
 {
   ((g->visited)->elms [(T) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (T) % ((unsigned) (8 * 4)));
   insert_copy_on_edge (g->e,
          partition_to_var (g->map, T),
          partition_to_var (g->map, S));
 }
    }
}
static void
eliminate_phi (edge e, int i, elim_graph g)
{
  int num_nodes = 0;
  int x;
  basic_block B = e->dest;
  if (e->flags & 2)
    return;
  num_nodes = num_var_partitions (g->map);
  g->e = e;
  eliminate_build (g, B, i);
  if (elim_graph_size (g) != 0)
    {
      sbitmap_zero (g->visited);
      ((g->stack)->elements_used = 0);
      for (x = 0; x < elim_graph_size (g); x++)
        {
   tree var = ((g->nodes)->data.tree1[x]);
   int p = var_to_partition (g->map, var);
   if (!((g->visited)->elms [(p) / ((unsigned) (8 * 4))] >> (p) % ((unsigned) (8 * 4)) & 1))
     elim_forward (g, p);
 }
      sbitmap_zero (g->visited);
      while (((g->stack)->elements_used) > 0)
 {
   x = ((g->stack)->data.i[(g->stack)->elements_used - 1]);
   do { ((g->stack)->elements_used--); } while (0);
   if (!((g->visited)->elms [(x) / ((unsigned) (8 * 4))] >> (x) % ((unsigned) (8 * 4)) & 1))
     elim_create (g, x);
 }
    }
  while (((g->const_copies)->elements_used) > 0)
    {
      tree src, dest;
      src = ((g->const_copies)->data.tree1[(g->const_copies)->elements_used - 1]);
      do { ((g->const_copies)->elements_used--); } while (0);
      dest = ((g->const_copies)->data.tree1[(g->const_copies)->elements_used - 1]);
      do { ((g->const_copies)->elements_used--); } while (0);
      insert_copy_on_edge (e, dest, src);
    }
}
static void
print_exprs (FILE *f, const char *str1, tree expr1, const char *str2,
      tree expr2, const char *str3)
{
  fprintf (f, "%s", str1);
  print_generic_expr (f, expr1, (1 << 1));
  fprintf (f, "%s", str2);
  print_generic_expr (f, expr2, (1 << 1));
  fprintf (f, "%s", str3);
}
static void
print_exprs_edge (FILE *f, edge e, const char *str1, tree expr1,
    const char *str2, tree expr2)
{
  print_exprs (f, str1, expr1, str2, expr2, " across an abnormal edge");
  fprintf (f, " from BB%d->BB%d\n", e->src->index,
        e->dest->index);
}
static void
coalesce_abnormal_edges (var_map map, conflict_graph graph, root_var_p rv)
{
  basic_block bb;
  edge e;
  tree phi, var, tmp;
  int x, y;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    for (e = bb->succ; e; e = e->succ_next)
      if (e->dest != EXIT_BLOCK_PTR && e->flags & 2)
 for (phi = phi_nodes (e->dest); phi; phi = (((phi))->common.chain))
   {
     var = get_def_from_ptr (get_phi_result_ptr (phi));
     x = var_to_partition (map, var);
     if (x == -1)
       continue;
     y = phi_arg_from_edge (phi, e);
     if (y == -1)
       fancy_abort ("gcc.c", 121333, "?");
     tmp = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((y))));
     if (!phi_ssa_name_p (tmp))
       {
         print_exprs_edge (stderr, e,
      "\nConstant argument in PHI. Can't insert :",
      var, " = ", tmp);
  fancy_abort ("gcc.c", 121341, "?");
       }
     y = var_to_partition (map, tmp);
     if (x == -1 || y == -1)
       fancy_abort ("gcc.c", 121345, "?");
     if (root_var_find (rv, x) != root_var_find (rv, y))
       {
  print_exprs_edge (stderr, e, "\nDifferent root vars: ",
      root_var (rv, root_var_find (rv, x)),
      " and ",
      root_var (rv, root_var_find (rv, y)));
  fancy_abort ("gcc.c", 121352, "?");
       }
     if (x != y)
       {
  if (!conflict_graph_conflict_p (graph, x, y))
    {
      var = partition_to_var (map, x);
      tmp = partition_to_var (map, y);
      if (dump_file
   && (dump_flags & (1 << 3)))
        {
   print_exprs_edge (dump_file, e,
       "ABNORMAL: Coalescing ",
       var, " and ", tmp);
        }
      if (var_union (map, var, tmp) == -1)
        {
   print_exprs_edge (stderr, e, "\nUnable to coalesce",
       partition_to_var (map, x), " and ",
       partition_to_var (map, y));
   fancy_abort ("gcc.c", 121374, "?");
        }
      conflict_graph_merge_regs (graph, x, y);
    }
  else
    {
      print_exprs_edge (stderr, e, "\n Conflict ",
          partition_to_var (map, x),
          " and ", partition_to_var (map, y));
      fancy_abort ("gcc.c", 121383, "?");
    }
       }
   }
}
static tree_live_info_p
coalesce_ssa_name (var_map map, int flags)
{
  int num, x, i;
  sbitmap live;
  tree var, phi;
  root_var_p rv;
  tree_live_info_p liveinfo;
  var_ann_t ann;
  conflict_graph graph;
  basic_block bb;
  coalesce_list_p cl = ((void *)0);
  if (num_var_partitions (map) <= 1)
    return ((void *)0);
  if ((flags & (0x8 | 0x10)) == 0)
    flags |= 0x8;
  liveinfo = calculate_live_on_entry (map);
  calculate_live_on_exit (liveinfo);
  rv = root_var_init (map);
  root_var_compact (rv);
  if (flags & 0x10)
    {
      cl = create_coalesce_list (map);
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
     {
       tree res = get_def_from_ptr (get_phi_result_ptr (phi));
       int p = var_to_partition (map, res);
       if (p == -1)
  continue;
       for (x = 0; x < (phi)->phi.num_args; x++)
  {
    tree arg = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((x))));
    int p2;
    if (((enum tree_code) (arg)->common.code) != SSA_NAME)
      continue;
    if ((res)->ssa_name.var != (arg)->ssa_name.var)
      continue;
    p2 = var_to_partition (map, get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((x)))));
    if (p2 != -1)
      add_coalesce (cl, p, p2, 1);
  }
     }
 }
      var = (tree) ((void *)0);
      i = 0;
      for (x = 0; x < num_var_partitions (map); x++)
 {
   tree p = partition_to_var (map, x);
   if (((enum tree_code) ((p)->ssa_name.var)->common.code) == RESULT_DECL)
     {
       if (var == (tree) ((void *)0))
  {
    var = p;
    i = x;
  }
       else
  add_coalesce (cl, i, x, 1);
     }
 }
    }
  graph = build_tree_conflict_graph (liveinfo, rv, cl);
  if (cl)
    {
      if (dump_file && (dump_flags & (1 << 3)))
 {
   fprintf (dump_file, "Before sorting:\n");
   dump_coalesce_list (dump_file, cl);
 }
      sort_coalesce_list (cl);
      if (dump_file && (dump_flags & (1 << 3)))
 {
   fprintf (dump_file, "\nAfter sorting:\n");
   dump_coalesce_list (dump_file, cl);
 }
    }
  root_var_decompact (rv);
  live = sbitmap_alloc (num_var_partitions (map));
  sbitmap_zero (live);
  num = num_var_partitions (map);
  for (x = 0 ; x < num; x++)
    {
      var = partition_to_var (map, x);
      if (default_def ((var)->ssa_name.var) == var)
 ((live)->elms [(x) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (x) % ((unsigned) (8 * 4)));
    }
  if ((flags & 0x2) == 0)
    {
      delete_tree_live_info (liveinfo);
      liveinfo = ((void *)0);
    }
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (live)->size; unsigned long *ptr_ = (live)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (x) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { var = root_var (rv, root_var_find (rv, x)); ann = var_ann (var); if (partition_to_var (map, x) != var) { if (ann->out_of_ssa_tag) { fancy_abort ("gcc.c", 121540, "?"); } if (dump_file && (dump_flags & (1 << 3))) { print_exprs (dump_file, "Must coalesce ", partition_to_var (map, x), " with the root variable ", var, ".\n"); } change_partition_var (map, var, x); } }; if (word_ == 0) break; } } } } while (0)
      ;
  free(live);
  coalesce_abnormal_edges (map, graph, rv);
  if (dump_file && (dump_flags & (1 << 3)))
    dump_var_map (dump_file, map);
  if (flags & 0x10)
    coalesce_tpa_members (rv, graph, map, cl,
     ((dump_flags & (1 << 3)) ? dump_file
          : ((void *)0)));
  if (flags & 0x8)
    coalesce_tpa_members (rv, graph, map, ((void *)0),
     ((dump_flags & (1 << 3)) ? dump_file
          : ((void *)0)));
  if (cl)
    delete_coalesce_list (cl);
  root_var_delete (rv);
  conflict_graph_delete (graph);
  return liveinfo;
}
static void
assign_vars (var_map map)
{
  int x, i, num, rep;
  tree t, var;
  var_ann_t ann;
  root_var_p rv;
  rv = root_var_init (map);
  if (!rv)
    return;
  num = num_var_partitions (map);
  for (x = 0; x < num; x++)
    {
      var = partition_to_var (map, x);
      if (((enum tree_code) (var)->common.code) != SSA_NAME)
 {
   ann = var_ann (var);
   ann->out_of_ssa_tag = 1;
   if (dump_file && (dump_flags & (1 << 3)))
     {
       fprintf (dump_file, "partition %d has variable ", x);
       print_generic_expr (dump_file, var, (1 << 1));
       fprintf (dump_file, " assigned to it.\n");
     }
 }
    }
  num = root_var_num (rv);
  for (x = 0; x < num; x++)
    {
      var = root_var (rv, x);
      ann = var_ann (var);
      for (i = root_var_first_partition (rv, x);
    i != -1;
    i = root_var_next_partition (rv, i))
 {
   t = partition_to_var (map, i);
   if (t == var || ((enum tree_code) (t)->common.code) != SSA_NAME)
     continue;
   rep = var_to_partition (map, t);
   if (!ann->out_of_ssa_tag)
     {
       if (dump_file && (dump_flags & (1 << 3)))
  print_exprs (dump_file, "", t, "  --> ", var, "\n");
       change_partition_var (map, var, rep);
       continue;
     }
   if (dump_file && (dump_flags & (1 << 3)))
     print_exprs (dump_file, "", t, " not coalesced with ", var,
    "");
   var = create_temp (t);
   change_partition_var (map, var, rep);
   ann = var_ann (var);
   if (dump_file && (dump_flags & (1 << 3)))
     {
       fprintf (dump_file, " -->  New temp:  '");
       print_generic_expr (dump_file, var, (1 << 1));
       fprintf (dump_file, "'\n");
     }
 }
    }
  root_var_delete (rv);
}
static unsigned char
replace_use_variable (var_map map, use_operand_p p, tree *expr)
{
  tree new_var;
  tree var = get_use_from_ptr (p);
  if (expr)
    {
      int version = (var)->ssa_name.version;
      if (expr[version])
        {
   tree new_expr = ((expr[version])->exp.operands[1]);
   ((*((p).use)) = (new_expr));
   ((expr[version])->exp.operands[1]) = (tree) ((void *)0);
   return 1;
 }
    }
  new_var = var_to_partition_to_var (map, var);
  if (new_var)
    {
      ((*((p).use)) = (new_var));
      set_is_used (new_var);
      return 1;
    }
  return 0;
}
static unsigned char
replace_def_variable (var_map map, def_operand_p def_p, tree *expr)
{
  tree new_var;
  tree var = get_def_from_ptr (def_p);
  if (expr)
    {
      int version = (var)->ssa_name.version;
      if (expr[version])
        {
   tree new_expr = ((expr[version])->exp.operands[1]);
   ((*((def_p).def)) = (new_expr));
   ((expr[version])->exp.operands[1]) = (tree) ((void *)0);
   return 1;
 }
    }
  new_var = var_to_partition_to_var (map, var);
  if (new_var)
    {
      ((*((def_p).def)) = (new_var));
      set_is_used (new_var);
      return 1;
    }
  return 0;
}
static void
eliminate_virtual_phis (void)
{
  basic_block bb;
  tree phi, next;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (phi = phi_nodes (bb); phi; phi = next)
        {
   next = (((phi))->common.chain);
   if (!is_gimple_reg ((get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.var))
     {
       remove_phi_node (phi, (tree) ((void *)0), bb);
     }
 }
    }
}
static void
coalesce_vars (var_map map, tree_live_info_p liveinfo)
{
  basic_block bb;
  type_var_p tv;
  tree var;
  int x, p, p2;
  coalesce_list_p cl;
  conflict_graph graph;
  cl = create_coalesce_list (map);
  for (x = 0; x < num_var_partitions (map); x++)
    {
      var = partition_to_var (map, x);
      p = var_to_partition (map, var);
      if (p != x)
        live_merge_and_clear (liveinfo, p, x);
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree phi, arg;
      int p;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 {
   p = var_to_partition (map, get_def_from_ptr (get_phi_result_ptr (phi)));
   if (p == -1)
     continue;
   make_live_on_entry (liveinfo, bb, p);
   for (x = 0; x < (phi)->phi.num_args; x++)
     {
       arg = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((x))));
       if (!phi_ssa_name_p (arg))
         continue;
       p2 = var_to_partition (map, arg);
       if (p2 == -1)
  continue;
       if (p != p2)
         add_coalesce (cl, p, p2, 1);
     }
 }
   }
  calculate_live_on_exit (liveinfo);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "Live range info for variable memory coalescing.\n");
      dump_live_info (dump_file, liveinfo, (0x01 | 0x02));
      fprintf (dump_file, "Coalesce list from phi nodes:\n");
      dump_coalesce_list (dump_file, cl);
    }
  tv = type_var_init (map);
  if (dump_file)
    type_var_dump (dump_file, tv);
  type_var_compact (tv);
  if (dump_file)
    type_var_dump (dump_file, tv);
  graph = build_tree_conflict_graph (liveinfo, tv, cl);
  type_var_decompact (tv);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "type var list now looks like:n");
      type_var_dump (dump_file, tv);
      fprintf (dump_file, "Coalesce list after conflict graph build:\n");
      dump_coalesce_list (dump_file, cl);
    }
  sort_coalesce_list (cl);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "Coalesce list after sorting:\n");
      dump_coalesce_list (dump_file, cl);
    }
  coalesce_tpa_members (tv, graph, map, cl,
   ((dump_flags & (1 << 3)) ? dump_file : ((void *)0)));
  type_var_delete (tv);
  delete_coalesce_list (cl);
}
typedef struct value_expr_d
{
  int value1;
  struct value_expr_d *next;
} *value_expr_p;
typedef struct temp_expr_table_d
{
  var_map map;
  void **version_info;
  value_expr_p *partition_dep_list;
  bitmap replaceable;
  unsigned char saw_replaceable;
  int virtual_partition;
  bitmap partition_in_use;
  value_expr_p free_list;
  value_expr_p pending_dependence;
} *temp_expr_table_p;
static temp_expr_table_p new_temp_expr_table (var_map);
static tree *free_temp_expr_table (temp_expr_table_p);
static value_expr_p new_value_expr (temp_expr_table_p);
static void free_value_expr (temp_expr_table_p, value_expr_p);
static value_expr_p find_value_in_list (value_expr_p, int,
            value_expr_p *);
static void add_value_to_list (temp_expr_table_p, value_expr_p *, int);
static void add_info_to_list (temp_expr_table_p, value_expr_p *,
         value_expr_p);
static value_expr_p remove_value_from_list (value_expr_p *, int);
static void add_dependance (temp_expr_table_p, int, tree);
static unsigned char check_replaceable (temp_expr_table_p, tree);
static void finish_expr (temp_expr_table_p, int, unsigned char);
static void mark_replaceable (temp_expr_table_p, tree);
static void kill_expr (temp_expr_table_p, int, unsigned char);
static void kill_virtual_exprs (temp_expr_table_p, unsigned char);
static void find_replaceable_in_bb (temp_expr_table_p, basic_block);
static tree *find_replaceable_exprs (var_map);
static void dump_replaceable_exprs (FILE *, tree *);
static temp_expr_table_p
new_temp_expr_table (var_map map)
{
  temp_expr_table_p t;
  t = (temp_expr_table_p) xmalloc (sizeof (struct temp_expr_table_d));
  t->map = map;
  t->version_info = xcalloc (((ssa_names)->elements_used) + 1, sizeof (void *));
  t->partition_dep_list = xcalloc (num_var_partitions (map) + 1,
       sizeof (value_expr_p));
  t->replaceable = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  t->partition_in_use = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  t->saw_replaceable = 0;
  t->virtual_partition = num_var_partitions (map);
  t->free_list = ((void *)0);
  t->pending_dependence = ((void *)0);
  return t;
}
static tree *
free_temp_expr_table (temp_expr_table_p t)
{
  value_expr_p p;
  tree *ret = ((void *)0);
  while ((p = t->free_list))
    {
      t->free_list = p->next;
      free (p);
    }
  do { if (t->partition_in_use) { bitmap_clear (t->partition_in_use); free (t->partition_in_use); (t->partition_in_use) = 0; } } while (0);
  do { if (t->replaceable) { bitmap_clear (t->replaceable); free (t->replaceable); (t->replaceable) = 0; } } while (0);
  free (t->partition_dep_list);
  if (t->saw_replaceable)
    ret = (tree *)t->version_info;
  else
    free (t->version_info);
  free (t);
  return ret;
}
static value_expr_p
new_value_expr (temp_expr_table_p table)
{
  value_expr_p p;
  if (table->free_list)
    {
      p = table->free_list;
      table->free_list = p->next;
    }
  else
    p = (value_expr_p) xmalloc (sizeof (struct value_expr_d));
  return p;
}
static void
free_value_expr (temp_expr_table_p table, value_expr_p p)
{
  p->next = table->free_list;
  table->free_list = p;
}
static value_expr_p
find_value_in_list (value_expr_p list, int value1, value_expr_p *last_ptr)
{
  value_expr_p curr;
  value_expr_p last = ((void *)0);
  for (curr = list; curr; last = curr, curr = curr->next)
    {
      if (curr->value == value)
        break;
    }
  if (last_ptr)
    *last_ptr = last;
  return curr;
}
static void
add_value_to_list (temp_expr_table_p tab, value_expr_p *list, int value1)
{
  value_expr_p info;
  if (!find_value_in_list (*list, value, ((void *)0)))
    {
      info = new_value_expr (tab);
      info->value = value;
      info->next = *list;
      *list = info;
    }
}
static void
add_info_to_list (temp_expr_table_p tab, value_expr_p *list, value_expr_p info)
{
  if (find_value_in_list (*list, info->value, ((void *)0)))
    free_value_expr (tab, info);
  else
    {
      info->next = *list;
      *list = info;
    }
}
static value_expr_p
remove_value_from_list (value_expr_p *list, int value1)
{
  value_expr_p info, last;
  info = find_value_in_list (*list, value, &last);
  if (!info)
    return ((void *)0);
  if (!last)
    *list = info->next;
  else
    last->next = info->next;
  return info;
}
static void
add_dependance (temp_expr_table_p tab, int version, tree var)
{
  int i, x;
  value_expr_p info;
  i = (var)->ssa_name.version;
  if (bitmap_bit_p (tab->replaceable, i))
    {
      while ((info = tab->pending_dependence))
        {
   tab->pending_dependence = info->next;
   x = info->value;
   info->value = version;
   add_info_to_list (tab, &(tab->partition_dep_list[x]), info);
          add_value_to_list (tab,
        (value_expr_p *)&(tab->version_info[version]), x);
   bitmap_set_bit (tab->partition_in_use, x);
 }
    }
  else
    {
      i = var_to_partition (tab->map, var);
      add_value_to_list (tab, &(tab->partition_dep_list[i]), version);
      add_value_to_list (tab,
    (value_expr_p *)&(tab->version_info[version]), i);
      bitmap_set_bit (tab->partition_in_use, i);
    }
}
static unsigned char
check_replaceable (temp_expr_table_p tab, tree stmt)
{
  stmt_ann_t ann;
  vuse_optype vuseops;
  def_optype defs;
  use_optype uses;
  tree var, def;
  int num_use_ops, version, i;
  var_map map = tab->map;
  if (((enum tree_code) (stmt)->common.code) != MODIFY_EXPR)
    return 0;
  ann = stmt_ann (stmt);
  defs = get_def_ops (ann);
  if (((defs) ? (defs)->num_defs : 0) != 1)
    return 0;
  def = (get_def_from_ptr (get_def_op_ptr (((defs)), ((0)))));
  if (version_ref_count (map, def) != 1)
    return 0;
  if ((((def)->ssa_name.var)->decl.inline_flag))
    return 0;
  if (((get_v_may_def_ops (ann)) ? (get_v_may_def_ops (ann))->num_v_may_defs : 0) != 0)
    return 0;
  if (((get_v_must_def_ops (ann)) ? (get_v_must_def_ops (ann))->num_v_must_defs : 0) != 0)
    return 0;
  if (flag_float_store && ((((enum tree_code) (((((stmt)->exp.operands[1]))->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((((stmt)->exp.operands[1]))->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((((stmt)->exp.operands[1]))->common.type))->common.type))->common.code) == REAL_TYPE)))
    return 0;
  uses = get_use_ops (ann);
  num_use_ops = ((uses) ? (uses)->num_uses : 0);
  vuseops = get_vuse_ops (ann);
  if (num_use_ops == 0 && ((vuseops) ? (vuseops)->num_vuses : 0) == 0)
    return 0;
  version = (def)->ssa_name.version;
  for (i = 0; i < num_use_ops; i++)
    {
      var = (get_use_from_ptr (get_use_op_ptr (((uses)), ((i)))));
      add_dependance (tab, version, var);
    }
  if (((vuseops) ? (vuseops)->num_vuses : 0) != 0)
    {
      add_value_to_list (tab, (value_expr_p *)&(tab->version_info[version]),
    (tab->virtual_partition));
      add_value_to_list (tab,
    &(tab->partition_dep_list[(tab->virtual_partition)]),
    version);
      bitmap_set_bit (tab->partition_in_use, (tab->virtual_partition));
    }
  return 1;
}
static void
finish_expr (temp_expr_table_p tab, int version, unsigned char replace)
{
  value_expr_p info, tmp;
  int partition1;
  for (info = (value_expr_p) tab->version_info[version]; info; info = tmp)
    {
      partition1 = info->value;
      tmp = remove_value_from_list (&(tab->partition_dep_list[partition1]),
        version);
      free_value_expr (tab, tmp);
      if (!(tab->partition_dep_list[partition1]) && replace)
        bitmap_clear_bit (tab->partition_in_use, partition1);
      tmp = info->next;
      if (!replace)
        free_value_expr (tab, info);
    }
  if (replace)
    {
      tab->saw_replaceable = 1;
      bitmap_set_bit (tab->replaceable, version);
    }
  else
    {
      tab->version_info[version] = ((void *)0);
    }
}
static void
mark_replaceable (temp_expr_table_p tab, tree var)
{
  value_expr_p info;
  int version = (var)->ssa_name.version;
  finish_expr (tab, version, 1);
  if (tab->version_info[version])
    {
      info = (value_expr_p) tab->version_info[version];
      for ( ; info->next; info = info->next)
 continue;
      info->next = tab->pending_dependence;
      tab->pending_dependence = (value_expr_p)tab->version_info[version];
    }
  tab->version_info[version] = (var)->common.chain;
}
static void
kill_expr (temp_expr_table_p tab, int partition1, unsigned char clear_bit)
{
  value_expr_p ptr;
  while ((ptr = tab->partition_dep_list[partition1]) != ((void *)0))
    finish_expr (tab, ptr->value, 0);
  if (clear_bit)
    bitmap_clear_bit (tab->partition_in_use, partition1);
}
static void
kill_virtual_exprs (temp_expr_table_p tab, unsigned char clear_bit)
{
  kill_expr (tab, (tab->virtual_partition), clear_bit);
}
static void
find_replaceable_in_bb (temp_expr_table_p tab, basic_block bb)
{
  block_stmt_iterator bsi;
  tree stmt, def;
  stmt_ann_t ann;
  int partition1, num, i;
  use_optype uses;
  def_optype defs;
  var_map map = tab->map;
  value_expr_p p;
  for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
    {
      stmt = bsi_stmt (bsi);
      ann = stmt_ann (stmt);
      uses = get_use_ops (ann);
      num = ((uses) ? (uses)->num_uses : 0);
      for (i = 0; i < num; i++)
 {
   def = (get_use_from_ptr (get_use_op_ptr (((uses)), ((i)))));
   if (tab->version_info[(def)->ssa_name.version])
     {
       if (!ann->has_volatile_ops)
  mark_replaceable (tab, def);
       else
  finish_expr (tab, (def)->ssa_name.version, 0);
     }
 }
      defs = get_def_ops (ann);
      num = ((defs) ? (defs)->num_defs : 0);
      for (i = 0; i < num; i++)
 {
   def = (get_def_from_ptr (get_def_op_ptr (((defs)), ((i)))));
   partition1 = var_to_partition (map, def);
   if (partition1 != -1 && tab->partition_dep_list[partition1])
     kill_expr (tab, partition1, 1);
 }
      if (!ann->has_volatile_ops)
 check_replaceable (tab, stmt);
      while ((p = tab->pending_dependence))
 {
   tab->pending_dependence = p->next;
   free_value_expr (tab, p);
 }
      if (((get_v_may_def_ops (ann)) ? (get_v_may_def_ops (ann))->num_v_may_defs : 0) > 0)
        kill_virtual_exprs (tab, 1);
      if (((get_v_must_def_ops (ann)) ? (get_v_must_def_ops (ann))->num_v_must_defs : 0) > 0)
        kill_virtual_exprs (tab, 1);
    }
}
static tree *
find_replaceable_exprs (var_map map)
{
  basic_block bb;
  int i;
  temp_expr_table_p table;
  tree *ret;
  table = new_temp_expr_table (map);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      find_replaceable_in_bb (table, bb);
      do { bitmap_element *ptr_ = ((table->partition_in_use))->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { kill_expr (table, i, 0); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
    }
  ret = free_temp_expr_table (table);
  return ret;
}
static void
dump_replaceable_exprs (FILE *f, tree *expr)
{
  tree stmt, var;
  int x;
  fprintf (f, "\nReplacing Expressions\n");
  for (x = 0; x < (int)((ssa_names)->elements_used) + 1; x++)
    if (expr[x])
      {
        stmt = expr[x];
 var = (get_def_from_ptr (get_def_op_ptr (((get_def_ops (stmt_ann (stmt)))), ((0)))));
 print_generic_expr (f, var, (1 << 1));
 fprintf (f, " replace with --> ");
 print_generic_expr (f, ((stmt)->exp.operands[1]), (1 << 1));
 fprintf (f, "\n");
      }
  fprintf (f, "\n");
}
static tree
discover_nonconstant_array_refs_r (tree * tp, int *walk_subtrees,
       void *data )
{
  tree t = *tp;
  if ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't') || (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd'))
    *walk_subtrees = 0;
  else if (((enum tree_code) (t)->common.code) == ARRAY_REF || ((enum tree_code) (t)->common.code) == ARRAY_RANGE_REF)
    {
      while (((((enum tree_code) (t)->common.code) == ARRAY_REF || ((enum tree_code) (t)->common.code) == ARRAY_RANGE_REF)
       && is_gimple_min_invariant (((t)->exp.operands[1]))
       && (!((t)->exp.operands[2])
    || is_gimple_min_invariant (((t)->exp.operands[2]))))
      || (((enum tree_code) (t)->common.code) == COMPONENT_REF
   && (!((t)->exp.operands[2])
       || is_gimple_min_invariant (((t)->exp.operands[2]))))
      || ((enum tree_code) (t)->common.code) == BIT_FIELD_REF
      || ((enum tree_code) (t)->common.code) == REALPART_EXPR
      || ((enum tree_code) (t)->common.code) == IMAGPART_EXPR
      || ((enum tree_code) (t)->common.code) == VIEW_CONVERT_EXPR
      || ((enum tree_code) (t)->common.code) == NOP_EXPR
      || ((enum tree_code) (t)->common.code) == CONVERT_EXPR)
 t = ((t)->exp.operands[0]);
      if (((enum tree_code) (t)->common.code) == ARRAY_REF || ((enum tree_code) (t)->common.code) == ARRAY_RANGE_REF)
 {
   t = get_base_address (t);
   if (t && (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd'))
     ((t)->common.addressable_flag) = 1;
 }
      *walk_subtrees = 0;
    }
  return (tree) ((void *)0);
}
static void
discover_nonconstant_array_refs (void)
{
  basic_block bb;
  block_stmt_iterator bsi;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
 walk_tree (bsi_stmt_ptr (bsi), discover_nonconstant_array_refs_r,
     ((void *)0) , ((void *)0));
    }
}
static void
rewrite_trees (var_map map, tree *values)
{
  elim_graph g;
  basic_block bb;
  block_stmt_iterator si;
  edge e;
  tree phi;
  unsigned char changed;
  g = new_elim_graph (map->num_partitions);
  g->map = map;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (si = bsi_start (bb); !bsi_end_p (si); )
 {
   size_t i, num_uses, num_defs;
   use_optype uses;
   def_optype defs;
   tree stmt = bsi_stmt (si);
   use_operand_p use_p;
   int remove = 0, is_copy = 0;
   stmt_ann_t ann;
   get_stmt_operands (stmt);
   ann = stmt_ann (stmt);
   changed = 0;
   if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR
       && (((enum tree_code) (((stmt)->exp.operands[1]))->common.code) == SSA_NAME))
     is_copy = 1;
   uses = get_use_ops (ann);
   num_uses = ((uses) ? (uses)->num_uses : 0);
   for (i = 0; i < num_uses; i++)
     {
       use_p = get_use_op_ptr ((uses), (i));
       if (replace_use_variable (map, use_p, values))
         changed = 1;
     }
   defs = get_def_ops (ann);
   num_defs = ((defs) ? (defs)->num_defs : 0);
   if (values && num_defs == 1)
     {
       tree def = (get_def_from_ptr (get_def_op_ptr (((defs)), ((0)))));
       tree val;
       val = values[(def)->ssa_name.version];
       if (val)
  remove = 1;
     }
   if (!remove)
     {
       for (i = 0; i < num_defs; i++)
  {
    def_operand_p def_p = get_def_op_ptr ((defs), (i));
    if (replace_def_variable (map, def_p, ((void *)0)))
      changed = 1;
    if (is_copy
        && num_uses == 1
        && (get_def_from_ptr (def_p) == (get_use_from_ptr (get_use_op_ptr (((uses)), ((0)))))))
      remove = 1;
  }
       if (changed)
  modify_stmt (stmt);
     }
   if (remove)
     bsi_remove (&si);
   else
     bsi_next (&si);
 }
      phi = phi_nodes (bb);
      if (phi)
        {
   for (e = bb->pred; e; e = e->pred_next)
     eliminate_phi (e, phi_arg_from_edge (phi, e), g);
 }
    }
  delete_elim_graph (g);
  bsi_commit_edge_inserts (((void *)0));
}
void
remove_ssa_form (FILE *dump, var_map map, int flags)
{
  tree_live_info_p liveinfo;
  basic_block bb;
  tree phi, next;
  FILE *save;
  tree *values = ((void *)0);
  save = dump_file;
  dump_file = dump;
  if ((flags & 0x2) == 0)
    compact_var_map (map, 1);
  else
    compact_var_map (map, 0);
  if (dump_file && (dump_flags & (1 << 3)))
    dump_var_map (dump_file, map);
  liveinfo = coalesce_ssa_name (map, flags);
  if ((flags & 0x2) == 0)
    compact_var_map (map, 0);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "After Coalescing:\n");
      dump_var_map (dump_file, map);
    }
  if (flags & 0x1)
    {
      values = find_replaceable_exprs (map);
      if (values && dump_file && (dump_flags & (1 << 3)))
 dump_replaceable_exprs (dump_file, values);
    }
  assign_vars (map);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "After Root variable replacement:\n");
      dump_var_map (dump_file, map);
    }
  if ((flags & 0x2) && liveinfo)
    {
      coalesce_vars (map, liveinfo);
      if (dump_file && (dump_flags & (1 << 3)))
 {
   fprintf (dump_file, "After variable memory coalescing:\n");
   dump_var_map (dump_file, map);
 }
    }
  if (liveinfo)
    delete_tree_live_info (liveinfo);
  rewrite_trees (map, values);
  if (values)
    free (values);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (phi = phi_nodes (bb); phi; phi = next)
 {
   next = (((phi))->common.chain);
   if ((flags & 0x4)
       || var_to_partition (map, get_def_from_ptr (get_phi_result_ptr (phi))) != -1)
     remove_phi_node (phi, (tree) ((void *)0), bb);
 }
    }
  dump_file = save;
}
void
rewrite_vars_out_of_ssa (bitmap vars)
{
  if (bitmap_first_set_bit (vars) >= 0)
    {
      var_map map;
      basic_block bb;
      tree phi;
      int i;
      int ssa_flags;
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
     {
       tree result = (get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.var;
       if (bitmap_bit_p (vars, var_ann (result)->uid))
  continue;
       for (i = 0; i < (phi)->phi.num_args; i++)
  {
    tree arg = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
    if (((enum tree_code) (arg)->common.code) != SSA_NAME)
      continue;
    arg = (arg)->ssa_name.var;
    if (bitmap_bit_p (vars, var_ann (arg)->uid))
      {
        tree new_name, copy;
        new_name = make_ssa_name (result, phi);
        copy = build (MODIFY_EXPR, ((arg)->common.type),
        new_name, get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i)))));
        (new_name)->common.chain = copy;
        ((*((get_phi_arg_def_ptr (((phi)), ((i)))).use)) = ((new_name)));
        bsi_insert_on_edge (((phi)->phi.a[i]).e, copy);
        modify_stmt (copy);
      }
  }
     }
 }
      bsi_commit_edge_inserts (((void *)0));
      map = init_var_map (((ssa_names)->elements_used) + 1);
      register_ssa_partitions_for_vars (vars, map);
      ssa_flags = 0x8;
      if (flag_tree_combine_temps)
 ssa_flags |= 0x2;
      remove_ssa_form (dump_file, map, ssa_flags);
      do { bitmap_element *ptr_ = (vars)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { var_ann (((referenced_vars)->data.tree1[i]))->out_of_ssa_tag = 0; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
     delete_var_map (map);
    }
}
static void
rewrite_out_of_ssa (void)
{
  var_map map;
  int var_flags = 0;
  int ssa_flags = (0x4 | 0x10);
  if (!flag_tree_live_range_split)
    ssa_flags |= 0x8;
  eliminate_virtual_phis ();
  if (dump_file && (dump_flags & (1 << 3)))
    dump_tree_cfg (dump_file, dump_flags & ~(1 << 3));
  if (flag_tree_ter && !flag_mudflap)
    var_flags = 0x01;
  map = create_ssa_var_map (var_flags);
  if (flag_tree_combine_temps)
    ssa_flags |= 0x2;
  if (flag_tree_ter && !flag_mudflap)
    ssa_flags |= 0x1;
  remove_ssa_form (dump_file, map, ssa_flags);
  if (dump_file && (dump_flags & (1 << 3)))
    dump_tree_cfg (dump_file, dump_flags & ~(1 << 3));
  cfg_remove_useless_stmts ();
  delete_var_map (map);
  discover_nonconstant_array_refs ();
}
struct tree_opt_pass pass_del_ssa =
{
  "optimized",
  ((void *)0),
  rewrite_out_of_ssa,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_SSA_TO_NORMAL,
  (1 << 3) | (1 << 6),
  0,
  (1 << 6),
  (1 << 3) | (1 << 4)
    | (1 << 5),
  (1 << 0) | (1 << 2)
};
enum rid
{
  RID_STATIC = 0,
  RID_UNSIGNED, RID_LONG, RID_CONST, RID_EXTERN,
  RID_REGISTER, RID_TYPEDEF, RID_SHORT, RID_INLINE,
  RID_VOLATILE, RID_SIGNED, RID_AUTO, RID_RESTRICT,
  RID_COMPLEX, RID_THREAD,
  RID_FRIEND, RID_VIRTUAL, RID_EXPLICIT, RID_EXPORT, RID_MUTABLE,
  RID_IN, RID_OUT, RID_INOUT, RID_BYCOPY, RID_BYREF, RID_ONEWAY,
  RID_INT, RID_CHAR, RID_FLOAT, RID_DOUBLE, RID_VOID,
  RID_ENUM, RID_STRUCT, RID_UNION, RID_IF, RID_ELSE,
  RID_WHILE, RID_DO, RID_FOR, RID_SWITCH, RID_CASE,
  RID_DEFAULT, RID_BREAK, RID_CONTINUE, RID_RETURN, RID_GOTO,
  RID_SIZEOF,
  RID_ASM, RID_TYPEOF, RID_ALIGNOF, RID_ATTRIBUTE, RID_VA_ARG,
  RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_PTRBASE,
  RID_PTREXTENT, RID_PTRVALUE, RID_CHOOSE_EXPR, RID_TYPES_COMPATIBLE_P,
  RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,
  RID_BOOL, RID_WCHAR, RID_CLASS,
  RID_PUBLIC, RID_PRIVATE, RID_PROTECTED,
  RID_TEMPLATE, RID_NULL, RID_CATCH,
  RID_DELETE, RID_FALSE, RID_NAMESPACE,
  RID_NEW, RID_OFFSETOF, RID_OPERATOR,
  RID_THIS, RID_THROW, RID_TRUE,
  RID_TRY, RID_TYPENAME, RID_TYPEID,
  RID_USING,
  RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,
  RID_ID, RID_AT_ENCODE, RID_AT_END,
  RID_AT_CLASS, RID_AT_ALIAS, RID_AT_DEFS,
  RID_AT_PRIVATE, RID_AT_PROTECTED, RID_AT_PUBLIC,
  RID_AT_PROTOCOL, RID_AT_SELECTOR,
  RID_AT_THROW, RID_AT_TRY, RID_AT_CATCH,
  RID_AT_FINALLY, RID_AT_SYNCHRONIZED,
  RID_AT_INTERFACE,
  RID_AT_IMPLEMENTATION,
  RID_MAX,
  RID_FIRST_MODIFIER = RID_STATIC,
  RID_LAST_MODIFIER = RID_ONEWAY,
  RID_FIRST_AT = RID_AT_ENCODE,
  RID_LAST_AT = RID_AT_IMPLEMENTATION,
  RID_FIRST_PQ = RID_IN,
  RID_LAST_PQ = RID_ONEWAY
};
extern tree *ridpointers;
enum c_tree_index
{
    CTI_WCHAR_TYPE,
    CTI_SIGNED_WCHAR_TYPE,
    CTI_UNSIGNED_WCHAR_TYPE,
    CTI_WINT_TYPE,
    CTI_SIGNED_SIZE_TYPE,
    CTI_UNSIGNED_PTRDIFF_TYPE,
    CTI_INTMAX_TYPE,
    CTI_UINTMAX_TYPE,
    CTI_WIDEST_INT_LIT_TYPE,
    CTI_WIDEST_UINT_LIT_TYPE,
    CTI_CHAR_ARRAY_TYPE,
    CTI_WCHAR_ARRAY_TYPE,
    CTI_INT_ARRAY_TYPE,
    CTI_STRING_TYPE,
    CTI_CONST_STRING_TYPE,
    CTI_TRUTHVALUE_TYPE,
    CTI_TRUTHVALUE_TRUE,
    CTI_TRUTHVALUE_FALSE,
    CTI_DEFAULT_FUNCTION_TYPE,
    CTI_FUNCTION_NAME_DECL,
    CTI_PRETTY_FUNCTION_NAME_DECL,
    CTI_C99_FUNCTION_NAME_DECL,
    CTI_SAVED_FUNCTION_NAME_DECLS,
    CTI_VOID_ZERO,
    C_TREE_IDX_MAX
};
struct c_common_identifier
{
  struct tree_common common;
  struct cpp_hashnode node;
};
extern tree c_global_trees[C_TREE_IDX_MAX];
struct sorted_fields_type
{
  int len;
  tree elts[1];
};
typedef enum c_language_kind
{
  clk_c = 0,
  clk_objc = 1,
  clk_cxx = 2,
  clk_objcxx = 3
}
c_language_kind;
extern c_language_kind c_language;
struct stmt_tree_s {
  tree x_cur_stmt_list;
  int stmts_are_full_exprs_p;
};
typedef struct stmt_tree_s *stmt_tree;
struct c_language_function {
  struct stmt_tree_s x_stmt_tree;
};
extern void (*lang_expand_function_end) (void);
extern int (*lang_missing_noreturn_ok_p) (tree);
extern void push_file_scope (void);
extern void pop_file_scope (void);
extern int yyparse (void);
extern stmt_tree current_stmt_tree (void);
extern tree push_stmt_list (void);
extern tree re_push_stmt_list (tree);
extern tree pop_stmt_list (tree);
extern tree add_stmt (tree);
extern void push_cleanup (tree, tree, unsigned char);
extern tree walk_stmt_tree (tree *, walk_tree_fn, void *);
extern int c_expand_decl (tree);
extern int field_decl_cmp (const void *, const void *);
extern void resort_sorted_fields (void *, void *, gt_pointer_operator,
                                  void *);
extern unsigned char has_c_linkage (tree decl);
extern int flag_preprocess_only;
extern int flag_nil_receivers;
extern int flag_objc_exceptions;
extern int flag_objc_sjlj_exceptions;
extern int flag_zero_link;
extern int flag_replace_objc_classes;
extern char flag_no_line_commands;
extern char flag_no_output;
extern char flag_dump_macros;
extern char flag_dump_includes;
extern unsigned char flag_pch_preprocess;
extern const char *pch_file;
extern int flag_iso;
extern int flag_undef;
extern int flag_no_builtin;
extern int flag_no_nonansi_builtin;
extern int flag_short_double;
extern int flag_short_wchar;
extern int flag_ms_extensions;
extern int flag_no_asm;
extern int flag_const_strings;
extern int flag_signed_bitfields;
extern int explicit_flag_signed_bitfields;
extern int warn_write_strings;
extern int warn_unknown_pragmas;
extern int warn_format;
extern int flag_cond_mismatch;
extern int flag_isoc94;
extern int flag_isoc99;
extern int flag_hosted;
extern int warn_main;
extern int flag_gen_declaration;
extern int flag_next_runtime;
extern int print_struct_values;
extern const char *constant_string_class_name;
extern int flag_no_gnu_keywords;
extern int flag_implement_inlines;
extern int flag_implicit_templates;
extern int flag_implicit_inline_templates;
extern int flag_use_repository;
extern int flag_optional_diags;
extern int flag_elide_constructors;
extern int flag_default_inline;
extern int flag_rtti;
extern int flag_conserve_space;
extern int flag_access_control;
extern int flag_check_new;
extern int flag_new_for_scope;
extern int flag_weak;
extern int flag_working_directory;
extern int flag_use_cxa_atexit;
extern int flag_permissive;
extern int flag_enforce_eh_specs;
extern int warn_implicit;
extern int max_tinst_depth;
extern int skip_evaluation;
extern const struct attribute_spec c_common_attribute_table[];
extern const struct attribute_spec c_common_format_attribute_table[];
extern tree (*make_fname_decl) (tree, int);
extern tree identifier_global_value (tree);
extern void record_builtin_type (enum rid, const char *, tree);
extern tree build_void_list_node (void);
extern void start_fname_decls (void);
extern void finish_fname_decls (void);
extern const char *fname_as_string (int);
extern tree fname_decl (unsigned, tree);
extern void check_function_arguments (tree, tree);
extern void check_function_arguments_recurse (void (*)
           (void *, tree,
            unsigned long),
           void *, tree,
           unsigned long);
extern void check_function_format (tree, tree);
extern void set_Wformat (int);
extern tree handle_format_attribute (tree *, tree, tree, int, unsigned char *);
extern tree handle_format_arg_attribute (tree *, tree, tree, int, unsigned char *);
extern int c_common_handle_option (size_t code, const char *arg, int value1);
extern unsigned char c_common_missing_argument (const char *opt, size_t code);
extern tree c_common_type_for_mode (enum machine_mode, int);
extern tree c_common_type_for_size (unsigned int, int);
extern tree c_common_unsigned_type (tree);
extern tree c_common_signed_type (tree);
extern tree c_common_signed_or_unsigned_type (int, tree);
extern tree c_common_truthvalue_conversion (tree);
extern void c_apply_type_quals_to_decl (int, tree);
extern tree c_sizeof_or_alignof_type (tree, enum tree_code, int);
extern tree c_alignof_expr (tree);
extern void binary_op_error (enum tree_code);
extern tree check_case_value (tree);
extern tree fix_string_type (tree);
struct varray_head_tag;
extern void constant_expression_warning (tree);
extern tree convert_and_check (tree, tree);
extern void overflow_warning (tree);
extern void unsigned_conversion_warning (tree, tree);
extern tree shorten_compare (tree *, tree *, tree *, enum tree_code *);
extern tree pointer_int_sum (enum tree_code, tree, tree);
extern unsigned int min_precision (tree, int);
extern tree c_build_qualified_type (tree, int);
extern void c_common_nodes_and_builtins (void);
extern void disable_builtin_function (const char *);
extern tree build_va_arg (tree, tree);
extern unsigned int c_common_init_options (unsigned int, const char **);
extern unsigned char c_common_post_options (const char **);
extern unsigned char c_common_init (void);
extern void c_common_finish (void);
extern void c_common_parse_file (int);
extern long c_common_get_alias_set (tree);
extern void c_register_builtin_type (tree, const char*);
extern unsigned char c_promoting_integer_type_p (tree);
extern int self_promoting_args_p (tree);
extern tree strip_array_types (tree);
extern tree strip_pointer_operator (tree);
extern void c_parse_file (void);
extern void finish_file (void);
enum c_tree_code {
  C_DUMMY_TREE_CODE = LAST_AND_UNUSED_TREE_CODE,
SIZEOF_EXPR,
ARROW_EXPR,
ALIGNOF_EXPR,
EXPR_STMT,
FOR_STMT,
WHILE_STMT,
DO_STMT,
BREAK_STMT,
CONTINUE_STMT,
SWITCH_STMT,
STMT_EXPR,
COMPOUND_LITERAL_EXPR,
  LAST_C_TREE_CODE
};
extern unsigned char statement_code_p[256];
extern int stmts_are_full_exprs_p (void);
extern int anon_aggr_type_p (tree);
extern void emit_local_var (tree);
extern void make_rtl_for_local_static (tree);
extern tree do_case (tree, tree);
extern tree build_stmt (enum tree_code, ...);
extern tree build_case_label (tree, tree, tree);
extern tree build_continue_stmt (void);
extern tree build_break_stmt (void);
extern void c_expand_asm_operands (tree, tree, tree, tree, int, location_t);
extern tree build_unary_op (enum tree_code, tree, int);
extern tree build_binary_op (enum tree_code, tree, tree, int);
extern int lvalue_p (tree);
extern tree default_conversion (tree);
extern tree common_type (tree, tree);
extern tree decl_constant_value (tree);
extern tree boolean_increment (enum tree_code, tree);
extern void extract_interface_info (void);
extern int case_compare (splay_tree_key, splay_tree_key);
extern tree c_add_case_label (splay_tree, tree, tree, tree);
extern void c_do_switch_warnings (splay_tree, tree);
extern tree build_function_call (tree, tree);
extern tree finish_label_address_expr (tree);
extern tree lookup_label (tree);
extern int vector_types_convertible_p (tree t1, tree t2);
extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
extern int c_staticp (tree);
extern int c_common_unsafe_for_reeval (tree);
extern void init_c_lex (void);
extern void c_cpp_builtins (cpp_reader *);
extern int pending_lang_change;
struct c_fileinfo
{
  int time;
  short interface_only;
  short interface_unknown;
};
struct c_fileinfo *get_fileinfo (const char *);
extern void dump_time_statistics (void);
extern unsigned char c_dump_tree (void *, tree);
extern void c_warn_unused_result (tree *);
extern void verify_sequence_points (tree);
extern void c_genericize (tree);
extern int c_gimplify_expr (tree *, tree *, tree *);
extern tree c_build_bind_expr (tree, tree);
extern void pch_init (void);
extern int c_common_valid_pch (cpp_reader *pfile, const char *name, int fd);
extern void c_common_read_pch (cpp_reader *pfile, const char *name, int fd,
          const char *orig);
extern void c_common_write_pch (void);
extern void c_common_no_more_pch (void);
extern void c_common_pch_pragma (cpp_reader *pfile);
extern void builtin_define_with_value (const char *, const char *, int);
extern void c_stddef_cpp_builtins (void);
extern void fe_file_change (const struct line_map *);
extern void c_parse_error (const char *, enum cpp_ttype, tree);
extern tree lookup_interface (tree);
extern tree is_class_name (tree);
extern tree objc_is_object_ptr (tree);
extern void objc_check_decl (tree);
extern int objc_comptypes (tree, tree, int);
extern tree objc_message_selector (void);
extern tree lookup_objc_ivar (tree);
extern void *get_current_scope (void);
extern void objc_mark_locals_volatile (void *);
extern void objc_clear_super_receiver (void);
extern int objc_is_public (tree, tree);
extern void init_pp_output (FILE *);
extern void preprocess_file (cpp_reader *);
extern void pp_file_change (const struct line_map *);
extern void pp_dir_change (cpp_reader *, const char *);
struct lang_decl
{
  tree pending_sizes;
};
struct lang_type
{
  struct sorted_fields_type * s;
  tree enum_min;
  tree enum_max;
};
struct language_function
{
  struct c_language_function base;
  tree x_break_label;
  tree x_cont_label;
  struct c_switch * x_switch_stack;
  int returns_value;
  int returns_null;
  int returns_abnormally;
  int warn_about_return_type;
  int extern_inline;
};
extern void c_parse_init (void);
extern void gen_aux_info_record (tree, int, int, int);
extern tree c_break_label;
extern tree c_cont_label;
extern int global_bindings_p (void);
extern void push_scope (void);
extern tree pop_scope (void);
extern void insert_block (tree);
extern tree pushdecl (tree);
extern void c_expand_body (tree);
extern void c_init_decl_processing (void);
extern void c_dup_lang_specific_decl (tree);
extern void c_print_identifier (FILE *, tree, int);
extern tree build_array_declarator (tree, tree, int, int);
extern tree build_enumerator (tree, tree);
extern void check_for_loop_decls (void);
extern void mark_forward_parm_decls (void);
extern int complete_array_type (tree, tree, int);
extern void declare_parm_level (void);
extern void undeclared_variable (tree);
extern tree declare_label (tree);
extern tree define_label (location_t, tree);
extern void finish_decl (tree, tree, tree);
extern tree finish_enum (tree, tree, tree);
extern void finish_function (void);
extern tree finish_struct (tree, tree, tree);
extern tree get_parm_info (unsigned char);
extern tree grokfield (tree, tree, tree);
extern tree groktypename (tree);
extern tree groktypename_in_parm_context (tree);
extern tree implicitly_declare (tree);
extern void keep_next_level (void);
extern tree lookup_name (tree);
extern void pending_xref_error (void);
extern void c_push_function_context (struct function *);
extern void c_pop_function_context (struct function *);
extern void push_parm_decl (tree);
extern tree pushdecl_top_level (tree);
extern tree set_array_declarator_type (tree, tree, int);
extern void shadow_tag (tree);
extern void shadow_tag_warned (tree, int);
extern tree start_enum (tree);
extern int start_function (tree, tree, tree);
extern tree start_decl (tree, tree, int, tree);
extern tree start_struct (enum tree_code, tree);
extern void store_parm_decls (void);
extern tree xref_tag (enum tree_code, tree);
extern int c_expand_decl (tree);
extern tree make_pointer_declarator (tree, tree);
extern int c_disregard_inline_limits (tree);
extern int c_cannot_inline_tree_fn (tree *);
extern unsigned char c_objc_common_init (void);
extern unsigned char c_missing_noreturn_ok_p (tree);
extern tree c_objc_common_truthvalue_conversion (tree expr);
extern void c_objc_common_finish_file (void);
extern int defer_fn (tree);
extern unsigned char c_warn_unused_global_decl (tree);
extern void c_initialize_diagnostics (diagnostic_context *);
extern struct c_switch *c_switch_stack;
extern tree require_complete_type (tree);
extern int same_translation_unit_p (tree, tree);
extern int comptypes (tree, tree);
extern tree c_size_in_bytes (tree);
extern unsigned char c_mark_addressable (tree);
extern void c_incomplete_type_error (tree, tree);
extern tree c_type_promotes_to (tree);
extern tree composite_type (tree, tree);
extern tree build_component_ref (tree, tree);
extern tree build_indirect_ref (tree, const char *);
extern tree build_array_ref (tree, tree);
extern tree build_external_ref (tree, int);
extern tree parser_build_binary_op (enum tree_code, tree, tree);
extern void readonly_error (tree, const char *);
extern tree build_conditional_expr (tree, tree, tree);
extern tree build_compound_expr (tree);
extern tree c_cast_expr (tree, tree);
extern tree build_c_cast (tree, tree);
extern tree build_modify_expr (tree, enum tree_code, tree);
extern void store_init_value (tree, tree);
extern void error_init (const char *);
extern void pedwarn_init (const char *);
extern void start_init (tree, tree, int);
extern void finish_init (void);
extern void really_start_incremental_init (tree);
extern void push_init_level (int);
extern tree pop_init_level (int);
extern void set_init_index (tree, tree);
extern void set_init_label (tree);
extern void process_init_element (tree);
extern tree build_compound_literal (tree, tree);
extern void pedwarn_c90 (const char *, ...) ;
extern void pedwarn_c99 (const char *, ...) ;
extern tree c_start_case (tree);
extern void c_finish_case (tree);
extern tree build_asm_expr (tree, tree, tree, tree, unsigned char);
extern tree build_asm_stmt (tree, tree);
extern tree c_convert_parm_for_inlining (tree, tree, tree, int);
extern int c_types_compatible_p (tree, tree);
extern tree c_begin_compound_stmt (unsigned char);
extern tree c_end_compound_stmt (tree, unsigned char);
extern void c_finish_if_stmt (location_t, tree, tree, tree, unsigned char);
extern void c_finish_loop (location_t, tree, tree, tree, tree, tree, unsigned char);
extern tree c_begin_stmt_expr (void);
extern tree c_finish_stmt_expr (tree);
extern tree c_process_expr_stmt (tree);
extern tree c_finish_expr_stmt (tree);
extern tree c_finish_return (tree);
extern tree c_finish_bc_stmt (tree *, unsigned char);
extern tree c_finish_goto_label (tree);
extern tree c_finish_goto_ptr (tree);
extern tree build_offsetof (tree, tree);
extern int current_function_returns_value;
extern int current_function_returns_null;
extern int current_function_returns_abnormally;
extern int system_header_p;
extern unsigned char c_override_global_bindings_to_false;
extern unsigned char c_eh_initialized_p;
extern void c_finish_incomplete_decl (tree);
extern void *get_current_scope (void);
extern void objc_mark_locals_volatile (void *);
extern void c_write_global_declarations (void);
extern tree static_ctors;
extern tree static_dtors;
static varray_type alias_vars = ((void *)0);
struct tree_alias_ops *current_alias_ops;
static varray_type local_alias_vars;
static varray_type local_alias_varnums;
tree pta_global_var;
static bitmap addrargs;
static alias_var get_alias_var_decl (tree);
static alias_var get_alias_var (tree);
static void find_func_aliases (tree);
static void deal_with_call_aliasing (tree, alias_var);
static alias_var create_fun_alias_var_ptf (tree, tree);
static alias_var create_fun_alias_var (tree, int);
static alias_var create_alias_var (tree);
static void intra_function_call (varray_type);
static void get_values_from_constructor (tree, varray_type *, bitmap, int *);
static unsigned char call_may_clobber (tree);
static unsigned char call_may_return (tree);
static unsigned char
call_may_clobber (tree expr)
{
  int flags;
  if (((enum tree_code) (expr)->common.code) != CALL_EXPR)
    return 0;
  flags = call_expr_flags (expr);
  return (! (flags & (1 | 256 | 2)));
}
static unsigned char
call_may_return (tree expr)
{
  int flags;
  if (((enum tree_code) (expr)->common.code) != CALL_EXPR)
    return 0;
  flags = call_expr_flags (expr);
  return ! (flags & 2);
}
static alias_var
get_alias_var_decl (tree decl)
{
  alias_var newvar;
  if (((enum tree_code) (decl)->common.code) == FIELD_DECL)
    fancy_abort ("gcc.c", 124383, "?");
  if ((tree_code_type[(int) (((enum tree_code) (decl)->common.code))] == 'd'))
    {
      if (((decl)->decl.alias_var1))
 return ((decl)->decl.alias_var1);
    }
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
    newvar = create_fun_alias_var (decl, 0);
  else
    {
      newvar = create_alias_var (decl);
      if ((((decl)->decl.context) == ((void *)0)
    || ((decl)->common.public_flag)
    || ((decl)->common.static_flag)
    || decl_function_context (decl) == ((void *)0))
   && decl != pta_global_var)
 {
   current_alias_ops->addr_assign (current_alias_ops,
       get_alias_var (pta_global_var),
       newvar);
   if (((decl)->decl.initial))
     find_func_aliases (decl);
 }
    }
  if (!current_alias_ops->ip)
    {
      if (!current_alias_ops->ip_partial
   || (((enum tree_code) (decl)->common.code) != FUNCTION_DECL
       && ((enum tree_code) (decl)->common.code) != PARM_DECL))
 {
   do { if ((local_alias_varnums)->elements_used >= (local_alias_varnums)->num_elements) (((local_alias_varnums)) = varray_grow ((local_alias_varnums), 2 * (local_alias_varnums)->num_elements)); (local_alias_varnums)->data.i[(local_alias_varnums)->elements_used++] = (((newvar)->common.varnum)); } while (0);
   do { if ((local_alias_vars)->elements_used >= (local_alias_vars)->num_elements) (((local_alias_vars)) = varray_grow ((local_alias_vars), 2 * (local_alias_vars)->num_elements)); (local_alias_vars)->data.tree1[(local_alias_vars)->elements_used++] = (decl); } while (0);
 }
    }
  return newvar;
}
static alias_var
get_alias_var (tree expr)
{
  if ((tree_code_type[(int) (((enum tree_code) (expr)->common.code))] == 'd'))
    return get_alias_var_decl (expr);
  if (tree_code_type[(int) (((enum tree_code) (expr)->common.code))] == 'c')
    return ((void *)0);
  switch (((enum tree_code) (expr)->common.code))
    {
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
      {
 tree p;
 for (p = expr;
      ((enum tree_code) (p)->common.code) == ARRAY_REF || ((enum tree_code) (p)->common.code) == ARRAY_RANGE_REF;
      p = ((p)->exp.operands[0]))
   ;
 return get_alias_var (p);
      }
      break;
    case COMPONENT_REF:
      {
 tree p;
 for (p = expr; ((enum tree_code) (p)->common.code) == COMPONENT_REF;
      p = ((p)->exp.operands[0]));
 return get_alias_var (p);
      }
      break;
    case REALPART_EXPR:
    case IMAGPART_EXPR:
    case NOP_EXPR:
    case CONVERT_EXPR:
    case FIX_TRUNC_EXPR:
    case FIX_CEIL_EXPR:
    case FIX_FLOOR_EXPR:
    case FIX_ROUND_EXPR:
    case ADDR_EXPR:
    case INDIRECT_REF:
    case BIT_FIELD_REF:
      return get_alias_var (((expr)->exp.operands[0]));
      break;
    default:
      return ((void *)0);
    }
}
static void
intra_function_call (varray_type args)
{
  size_t l = ((args)->elements_used);
  size_t i;
  alias_var av = get_alias_var (pta_global_var);
  for (i = 0; i < l; i++)
    {
      alias_var argi = ((args)->data.generic[i]);
      size_t j;
      for (j = 0; j < l; j++)
 {
   alias_var argj;
   if (i == j)
     continue;
   argj = ((args)->data.generic[j]);
   if (!((((((argi)->common.decl))->common.type))->type.restrict_flag)
       || !((((((argj)->common.decl))->common.type))->type.restrict_flag))
     if (alias_sets_conflict_p (get_alias_set (((argi)->common.decl)),
           get_alias_set (((argj)->common.decl))))
       current_alias_ops->simple_assign (current_alias_ops, argi, argj);
 }
    }
  for (i = 0; i < l; i++)
    {
      alias_var argav = ((args)->data.generic[i]);
      if (!((((((argav)->common.decl))->common.type))->type.restrict_flag)
   || !((((((av)->common.decl))->common.type))->type.restrict_flag))
 {
   current_alias_ops->simple_assign (current_alias_ops, argav, av);
 }
    }
}
static void
get_values_from_constructor (tree constructor, varray_type *vals,
        bitmap addrargs, int *i)
{
  tree elt_list;
  switch (((enum tree_code) (constructor)->common.code))
    {
    case CONSTRUCTOR:
      {
 for (elt_list = ((constructor)->exp.operands[0]);
      elt_list;
      elt_list = ((elt_list)->common.chain))
   {
     tree value1 = ((elt_list)->list.value);
     if (((enum tree_code) (value)->common.code) == TREE_LIST
  || ((enum tree_code) (value)->common.code) == CONSTRUCTOR)
       {
  get_values_from_constructor (value, vals, addrargs, i); }
     else
       {
  alias_var aav;
  aav = get_alias_var (value);
  if (aav)
    do { if ((*vals)->elements_used >= (*vals)->num_elements) (((*vals)) = varray_grow ((*vals), 2 * (*vals)->num_elements)); (*vals)->data.generic[(*vals)->elements_used++] = (aav); } while (0);
  if (((enum tree_code) (value)->common.code) == ADDR_EXPR)
    bitmap_set_bit (addrargs, *i);
  *i = *i + 1;
       }
   }
      }
      break;
    case TREE_LIST:
      for (elt_list = constructor;
    elt_list;
    elt_list = ((elt_list)->common.chain))
 {
   get_values_from_constructor (((elt_list)->list.value), vals, addrargs, i);
 }
      break;
    default:
      fancy_abort ("gcc.c", 124608, "?");
    }
}
static void
deal_with_call_aliasing (tree callargs, alias_var lhsAV)
{
  tree arg, argp;
  for (argp = callargs;
       argp;
       argp = ((argp)->common.chain))
    {
      arg = ((argp)->list.value);
      if (((enum tree_code) (arg)->common.code) == ADDR_EXPR)
 current_alias_ops->addr_assign (current_alias_ops, lhsAV,
     get_alias_var (arg));
      else if ((((enum tree_code) (((arg)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((arg)->common.type))->common.code) == REFERENCE_TYPE))
 {
   alias_var argtv = get_alias_var (arg);
   if (argtv)
     current_alias_ops->simple_assign (current_alias_ops, lhsAV,
           argtv);
 }
    }
}
static tree
find_op_of_decl (tree cref)
{
  while (!(tree_code_type[(int) (((enum tree_code) (((cref)->exp.operands[0]))->common.code))] == 'd'))
    {
      cref = ((cref)->exp.operands[0]);
    }
  return cref;
}
static void
find_func_aliases (tree stp)
{
  if (((enum tree_code) (stp)->common.code) == RETURN_EXPR)
    {
      stp = ((stp)->exp.operands[0]);
      if (!stp)
 return;
    }
  if (((enum tree_code) (stp)->common.code) == MODIFY_EXPR
      || ((tree_code_type[(int) (((enum tree_code) (stp)->common.code))] == 'd') && ((stp)->decl.initial) != (tree) ((void *)0) ))
    {
      tree op0, op1;
      alias_var lhsAV = ((void *)0);
      alias_var rhsAV = ((void *)0);
      if ((tree_code_type[(int) (((enum tree_code) (stp)->common.code))] == 'd'))
 {
   op0 = stp;
   op1 = ((stp)->decl.initial);
 }
      else
 {
   op0 = ((stp)->exp.operands[0]);
   op1 = ((stp)->exp.operands[1]);
 }
      lhsAV = get_alias_var (op0);
      if (!lhsAV)
 return;
      rhsAV = get_alias_var (op1);
      while (((enum tree_code) (op1)->common.code) == COMPONENT_REF
      && ((enum tree_code) (((op1)->exp.operands[0]))->common.code) == COMPONENT_REF)
 {
   op1 = ((op1)->exp.operands[0]);
 }
      while (((enum tree_code) (op1)->common.code) == BIT_FIELD_REF)
 {
   op1 = ((op1)->exp.operands[0]);
 }
      if (((enum tree_code) (op1)->common.code) == COMPONENT_REF)
 op1 = find_op_of_decl (op1);
      if (is_gimple_variable (op0))
 {
   if (is_gimple_variable (op1))
     {
       if (rhsAV != ((void *)0))
  current_alias_ops->simple_assign (current_alias_ops, lhsAV,
        rhsAV);
     }
   else if (((enum tree_code) (op1)->common.code) == COMPONENT_REF
     && (tree_code_type[(int) (((enum tree_code) (((op1)->exp.operands[0]))->common.code))] == 'd'))
     {
          if (rhsAV != ((void *)0))
  current_alias_ops->simple_assign (current_alias_ops, lhsAV,
        rhsAV);
     }
   else if (is_gimple_cast (op1))
     {
       tree stripped_op1 = op1;
       while ((((enum tree_code) (stripped_op1)->common.code) == NOP_EXPR || ((enum tree_code) (stripped_op1)->common.code) == CONVERT_EXPR || ((enum tree_code) (stripped_op1)->common.code) == NON_LVALUE_EXPR) && ((stripped_op1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((stripped_op1)->common.type))->type.mode) == ((((((stripped_op1)->exp.operands[0]))->common.type))->type.mode))) (stripped_op1) = ((stripped_op1)->exp.operands[0]);
       if (rhsAV != ((void *)0))
  {
    if (((enum tree_code) (stripped_op1)->common.code) == ADDR_EXPR)
      current_alias_ops->addr_assign (current_alias_ops, lhsAV,
          rhsAV);
    else
      current_alias_ops->simple_assign (current_alias_ops, lhsAV,
            rhsAV);
  }
     }
   else if (((enum tree_code) (op1)->common.code) == INDIRECT_REF
     || ((enum tree_code) (op1)->common.code) == ARRAY_REF
     || (((enum tree_code) (op1)->common.code) == COMPONENT_REF
         && ((enum tree_code) (((op1)->exp.operands[0]))->common.code) == INDIRECT_REF))
     {
       if (rhsAV != ((void *)0))
  current_alias_ops->ptr_assign (current_alias_ops, lhsAV,
            rhsAV);
     }
   else if (((enum tree_code) (op1)->common.code) == ADDR_EXPR)
     {
       if (rhsAV != ((void *)0))
  current_alias_ops->addr_assign (current_alias_ops, lhsAV,
      rhsAV);
     }
   else if (((enum tree_code) (op1)->common.code) == CALL_EXPR)
     {
       if (0)
  {}
       else
  {
    if (call_may_return (op1))
      {
        varray_type args;
        tree arg;
        tree callop0, callop1;
        int argnum;
        args = varray_init (1, VARRAY_DATA_GENERIC, "Arguments");
        bitmap_clear (addrargs);
        callop1 = ((op1)->exp.operands[1]);
        callop0 = ((op1)->exp.operands[0]);
        for (arg = callop1, argnum = 0;
      arg;
      arg = ((arg)->common.chain), argnum++)
   {
     alias_var aav = get_alias_var (((arg)->list.value));
     if (aav)
       {
         do { if ((args)->elements_used >= (args)->num_elements) (((args)) = varray_grow ((args), 2 * (args)->num_elements)); (args)->data.generic[(args)->elements_used++] = (aav); } while (0);
         if (((enum tree_code) (((arg)->list.value))->common.code) == ADDR_EXPR)
    bitmap_set_bit (addrargs, argnum);
       }
   }
        if (current_alias_ops->function_call (current_alias_ops, lhsAV,
           get_alias_var (callop0),
           args, addrargs))
   {
     if (call_may_clobber (op1)
         && !current_alias_ops->ip
                              && flag_argument_noalias != 2)
       {
         intra_function_call (args);
       }
     if ((((enum tree_code) (((op0)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((op0)->common.type))->common.code) == REFERENCE_TYPE))
       deal_with_call_aliasing (callop1, lhsAV);
   }
      }
  }
     }
   else
     {
       bitmap_clear (addrargs);
       if (((enum tree_code) (op1)->common.code) == CONSTRUCTOR)
         {
    varray_type ops;
    int i = 0;
    ops = varray_init (1, VARRAY_DATA_GENERIC, "Operands");
    get_values_from_constructor (op1, &ops, addrargs, &i);
    current_alias_ops->op_assign (current_alias_ops, lhsAV,
      ops, op1, addrargs);
  }
       else
  switch (tree_code_type[(int) (((enum tree_code) (op1)->common.code))])
    {
    case 'e':
    case 's':
    case '<':
    case '1':
    case 'r':
    case '2':
      {
        tree op;
        varray_type ops;
        int i;
        ops = varray_init (1, VARRAY_DATA_GENERIC, "Operands");
        for (i = 0; i < tree_code_length[(int) (((enum tree_code) (op1)->common.code))]; i++)
   {
     alias_var aav;
     op = ((op1)->exp.operands[i]);
     aav = get_alias_var (op);
     if (aav)
       do { if ((ops)->elements_used >= (ops)->num_elements) (((ops)) = varray_grow ((ops), 2 * (ops)->num_elements)); (ops)->data.generic[(ops)->elements_used++] = (aav); } while (0);
     if (((enum tree_code) (op)->common.code) == ADDR_EXPR)
       bitmap_set_bit (addrargs, i);
   }
        current_alias_ops->op_assign (current_alias_ops, lhsAV,
          ops, op1, addrargs);
      }
      break;
    default:
      break;
    }
     }
 }
      else
 {
   if ((((enum tree_code) (op0)->common.code) == COMPONENT_REF
        || ((enum tree_code) (op0)->common.code) == BIT_FIELD_REF)
       && is_gimple_variable (op1))
     {
       if (rhsAV != ((void *)0))
  current_alias_ops->simple_assign (current_alias_ops, lhsAV,
        rhsAV);
     }
   else if (((enum tree_code) (op0)->common.code) == COMPONENT_REF
     && ((enum tree_code) (op1)->common.code) == ADDR_EXPR)
     {
       if (rhsAV != ((void *)0))
  current_alias_ops->addr_assign (current_alias_ops, lhsAV,
      rhsAV);
     }
   else if ((((enum tree_code) (op0)->common.code) == INDIRECT_REF
      || ((enum tree_code) (op0)->common.code) == ARRAY_REF)
     && ((enum tree_code) (((op0)->exp.operands[0]))->common.code) == COMPONENT_REF
     && is_gimple_variable (op1))
     {
       if (rhsAV != ((void *)0))
  current_alias_ops->assign_ptr (current_alias_ops, lhsAV,
            rhsAV);
     }
   else if ((((enum tree_code) (op0)->common.code) == INDIRECT_REF
      || ((enum tree_code) (op0)->common.code) == ARRAY_REF)
     && ((enum tree_code) (op1)->common.code) == ADDR_EXPR)
     {
       alias_var tempvar;
       tree temp = create_tmp_var_raw (global_trees[TI_VOID_TYPE], "aliastmp");
       tempvar = current_alias_ops->add_var (current_alias_ops, temp);
       current_alias_ops->addr_assign (current_alias_ops, tempvar,
           rhsAV);
       current_alias_ops->assign_ptr (current_alias_ops, lhsAV,
          tempvar);
     }
   else if ((((enum tree_code) (op0)->common.code) == INDIRECT_REF
      || ((enum tree_code) (op0)->common.code) == ARRAY_REF)
     && (((enum tree_code) (op1)->common.code) == INDIRECT_REF
         || ((enum tree_code) (op1)->common.code) == ARRAY_REF))
     {
       alias_var tempvar;
       tree temp;
       temp = create_tmp_var_raw (global_trees[TI_VOID_TYPE], "aliastmp");
       tempvar = current_alias_ops->add_var (current_alias_ops, temp);
       current_alias_ops->ptr_assign (current_alias_ops, tempvar,
          rhsAV);
       current_alias_ops->assign_ptr (current_alias_ops, lhsAV,
          tempvar);
     }
   else if ((((enum tree_code) (op0)->common.code) == INDIRECT_REF
      || ((enum tree_code) (op0)->common.code) == ARRAY_REF)
     && is_gimple_cast (op1))
     {
       if (rhsAV != ((void *)0))
  {
    alias_var tempvar;
    tree temp;
    temp = create_tmp_var_raw (global_trees[TI_VOID_TYPE], "aliastmp");
    tempvar = current_alias_ops->add_var (current_alias_ops,
       temp);
    current_alias_ops->simple_assign (current_alias_ops,
          tempvar, rhsAV);
    current_alias_ops->assign_ptr (current_alias_ops, lhsAV,
       tempvar);
  }
     }
   else
     {
       if (rhsAV != ((void *)0))
  current_alias_ops->assign_ptr (current_alias_ops, lhsAV,
            rhsAV);
     }
 }
    }
  else if (((enum tree_code) (stp)->common.code) == CALL_EXPR)
    {
      alias_var callvar;
      varray_type args;
      tree arg;
      callvar = get_alias_var (((stp)->exp.operands[0]));
      if (callvar != ((void *)0))
 {
   if (call_may_clobber (stp))
     {
       int argnum;
       args = varray_init (1, VARRAY_DATA_GENERIC, "Arguments");
       bitmap_clear (addrargs);
       for (arg = ((stp)->exp.operands[1]), argnum=0;
     arg;
     arg = ((arg)->common.chain), argnum++)
  {
    alias_var aav = get_alias_var (((arg)->list.value));
    if (aav)
      {
        do { if ((args)->elements_used >= (args)->num_elements) (((args)) = varray_grow ((args), 2 * (args)->num_elements)); (args)->data.generic[(args)->elements_used++] = (aav); } while (0);
        if (((enum tree_code) (((arg)->list.value))->common.code) == ADDR_EXPR)
   bitmap_set_bit (addrargs, argnum);
      }
  }
       if (current_alias_ops->function_call (current_alias_ops, ((void *)0),
          callvar, args, addrargs))
  if (!current_alias_ops->ip && flag_argument_noalias != 2)
    intra_function_call (args);
     }
 }
  }
}
static alias_var
create_fun_alias_var (tree decl, int force)
{
  alias_var avar, retvar;
  tree rdecl;
  varray_type params = ((void *)0);
  if (!force)
    {
      if (((decl)->decl.alias_var1))
        return ((decl)->decl.alias_var1);
    }
  params = varray_init (1, VARRAY_DATA_GENERIC, "Arguments");
  if (((decl)->decl.arguments) != ((void *)0))
    {
      tree arg;
      for (arg = ((decl)->decl.arguments); arg; arg = ((arg)->common.chain))
 {
   alias_var var = get_alias_var (arg);
   do { if ((params)->elements_used >= (params)->num_elements) (((params)) = varray_grow ((params), 2 * (params)->num_elements)); (params)->data.generic[(params)->elements_used++] = (var); } while (0);
   if ((((enum tree_code) (((arg)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((arg)->common.type))->common.code) == REFERENCE_TYPE)
       && !current_alias_ops->ip
       && (!current_alias_ops->ip_partial
    || !cgraph_local_info (decl)->local))
     current_alias_ops->simple_assign (current_alias_ops, var,
           get_alias_var (pta_global_var));
 }
    }
  else if (((((decl)->common.type))->type.values) != ((void *)0))
    {
      tree arg;
      for (arg = ((((decl)->common.type))->type.values);
    arg && ((arg)->list.value) != global_trees[TI_VOID_TYPE];
    arg = ((arg)->common.chain))
 {
   tree fakedecl = create_tmp_var_raw (((arg)->list.value), "normarg");
   alias_var var;
   ((fakedecl)->decl.context) = current_function_decl;
   var = get_alias_var (fakedecl);
   do { if ((params)->elements_used >= (params)->num_elements) (((params)) = varray_grow ((params), 2 * (params)->num_elements)); (params)->data.generic[(params)->elements_used++] = (var); } while (0);
   if ((((enum tree_code) (((fakedecl)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((fakedecl)->common.type))->common.code) == REFERENCE_TYPE)
       && !current_alias_ops->ip
       && (!current_alias_ops->ip_partial
    || !((decl)->common.static_flag)
    || ((decl)->common.public_flag)))
     current_alias_ops->simple_assign (current_alias_ops, var,
           get_alias_var (pta_global_var));
 }
    }
  else
    {
      tree fakedecl = create_tmp_var_raw (global_trees[TI_VOID_TYPE], "fakearg");
      alias_var fakevar;
      ((fakedecl)->decl.context) = current_function_decl;
      fakevar = get_alias_var (fakedecl);
      do { if ((params)->elements_used >= (params)->num_elements) (((params)) = varray_grow ((params), 2 * (params)->num_elements)); (params)->data.generic[(params)->elements_used++] = (fakevar); } while (0);
    }
  if (!((decl)->decl.result))
    {
      rdecl = create_tmp_var_raw (((((decl)->common.type))->common.type), "_rv_");
      retvar = current_alias_ops->add_var (current_alias_ops, rdecl);
      ((rdecl)->decl.alias_var1) = retvar;
    }
  else
    {
      retvar = current_alias_ops->add_var (current_alias_ops,
        ((decl)->decl.result));
      ((((decl)->decl.result))->decl.alias_var1) = retvar;
    }
  do { if ((alias_vars)->elements_used >= (alias_vars)->num_elements) (((alias_vars)) = varray_grow ((alias_vars), 2 * (alias_vars)->num_elements)); (alias_vars)->data.generic[(alias_vars)->elements_used++] = (retvar); } while (0);
  ((retvar)->common.varnum) = ((alias_vars)->elements_used) - 1;
  avar = current_alias_ops->add_var (current_alias_ops, decl);
  do { if ((alias_vars)->elements_used >= (alias_vars)->num_elements) (((alias_vars)) = varray_grow ((alias_vars), 2 * (alias_vars)->num_elements)); (alias_vars)->data.generic[(alias_vars)->elements_used++] = (avar); } while (0);
  ((avar)->common.varnum) = ((alias_vars)->elements_used) - 1;
  current_alias_ops->function_def (current_alias_ops, avar, params, retvar);
  ((decl)->decl.alias_var1) = avar;
  return avar;
}
static alias_var
create_fun_alias_var_ptf (tree decl, tree type)
{
  alias_var avar, retvar;
  tree rdecl;
  varray_type params = ((void *)0);
  if (((decl)->decl.alias_var1))
    return ((decl)->decl.alias_var1);
  params = varray_init (1, VARRAY_DATA_GENERIC, "Arguments");
  if (((type)->type.values) != ((void *)0))
    {
      tree arg;
      for (arg = ((type)->type.values);
    arg && ((arg)->list.value) != global_trees[TI_VOID_TYPE];
    arg = ((arg)->common.chain))
 {
   tree fakedecl = create_tmp_var_raw (((arg)->list.value), "ptfarg");
   alias_var var;
   ((fakedecl)->decl.context) = ((decl)->decl.context);
   var = get_alias_var (fakedecl);
   do { if ((params)->elements_used >= (params)->num_elements) (((params)) = varray_grow ((params), 2 * (params)->num_elements)); (params)->data.generic[(params)->elements_used++] = (var); } while (0);
 }
    }
  else
    {
      tree fakedecl = create_tmp_var_raw (global_trees[TI_VOID_TYPE], "fakearg");
      alias_var fakevar;
      ((fakedecl)->decl.context) = ((decl)->decl.context);
      fakevar = get_alias_var (fakedecl);
      do { if ((params)->elements_used >= (params)->num_elements) (((params)) = varray_grow ((params), 2 * (params)->num_elements)); (params)->data.generic[(params)->elements_used++] = (fakevar); } while (0);
    }
  rdecl = create_tmp_var_raw (((type)->common.type), "_rv_");
  retvar = current_alias_ops->add_var (current_alias_ops, rdecl);
  do { if ((alias_vars)->elements_used >= (alias_vars)->num_elements) (((alias_vars)) = varray_grow ((alias_vars), 2 * (alias_vars)->num_elements)); (alias_vars)->data.generic[(alias_vars)->elements_used++] = (retvar); } while (0);
  ((retvar)->common.varnum) = ((alias_vars)->elements_used) - 1;
  avar = current_alias_ops->add_var (current_alias_ops, decl);
  do { if ((alias_vars)->elements_used >= (alias_vars)->num_elements) (((alias_vars)) = varray_grow ((alias_vars), 2 * (alias_vars)->num_elements)); (alias_vars)->data.generic[(alias_vars)->elements_used++] = (avar); } while (0);
  ((avar)->common.varnum) = ((alias_vars)->elements_used) - 1;
  current_alias_ops->function_def (current_alias_ops, avar, params, retvar);
  ((decl)->decl.alias_var1) = avar;
  return avar;
}
static alias_var
create_alias_var (tree decl)
{
  alias_var avar;
  if (!(tree_code_type[(int) (((enum tree_code) (decl)->common.code))] == 'd'))
    fancy_abort ("gcc.c", 125189, "?");
  if ((tree_code_type[(int) (((enum tree_code) (decl)->common.code))] == 'd'))
    {
      if (((decl)->decl.alias_var1))
 return ((decl)->decl.alias_var1);
    }
  if ((((enum tree_code) (((decl)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((decl)->common.type))->common.code) == REFERENCE_TYPE)
      && ((enum tree_code) (((((decl)->common.type))->common.type))->common.code) == FUNCTION_TYPE)
    {
      avar = create_fun_alias_var_ptf (decl, ((((decl)->common.type))->common.type));
    }
  else
    avar = current_alias_ops->add_var (current_alias_ops, decl);
  if ((tree_code_type[(int) (((enum tree_code) (decl)->common.code))] == 'd'))
    {
      ((decl)->decl.alias_var1) = avar;
    }
  do { if ((alias_vars)->elements_used >= (alias_vars)->num_elements) (((alias_vars)) = varray_grow ((alias_vars), 2 * (alias_vars)->num_elements)); (alias_vars)->data.generic[(alias_vars)->elements_used++] = (avar); } while (0);
  ((avar)->common.varnum) = ((alias_vars)->elements_used) - 1;
  return avar;
}
static void
create_alias_vars (void)
{
  basic_block bb;
   {
     current_alias_ops = ((void *)0);
     flag_tree_points_to = PTA_NONE;
     return;
   }
  pta_global_var = build_decl_stat (VAR_DECL,get_identifier (".pta_global_var"),global_trees[TI_SIZE_TYPE] )
                         ;
  ((pta_global_var)->decl.artificial_flag) = 1;
  ((pta_global_var)->common.readonly_flag) = 1;
  ((pta_global_var)->decl.external_flag) = 0;
  ((pta_global_var)->common.static_flag) = 1;
  ((pta_global_var)->common.used_flag) = 1;
  ((pta_global_var)->decl.context) = current_function_decl;
  ((pta_global_var)->common.volatile_flag) = 1;
  ((pta_global_var)->common.addressable_flag) = 0;
  init_alias_vars ();
  ((current_function_decl)->decl.alias_var1) = ((void *)0);
  get_alias_var (current_function_decl);
  if (cfun->unexpanded_var_list)
    {
      tree vars, var;
      for (vars = cfun->unexpanded_var_list; vars; vars = ((vars)->common.chain))
 {
   var = ((vars)->list.value);
   if (((enum tree_code) (var)->common.code) != LABEL_DECL
       && decl_function_context (var) == ((void *)0)
       && ((var)->decl.initial))
     find_func_aliases (var);
 }
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      block_stmt_iterator bsi;
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
 find_func_aliases (bsi_stmt (bsi));
    }
  pta_global_var = (tree) ((void *)0);
}
struct tree_opt_pass pass_build_pta =
{
  "pta",
  ((void *)0),
  create_alias_vars,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_PTA,
  (1 << 3),
  (1 << 5),
  0,
  0,
  0
};
static void
delete_alias_vars (void)
{
  size_t i;
  if (flag_tree_points_to != PTA_ANDERSEN)
    return;
  for (i = 0; i < ((local_alias_vars)->elements_used); i++)
    {
      tree key = ((local_alias_vars)->data.tree1[i]);
      if ((tree_code_type[(int) (((enum tree_code) (key)->common.code))] == 'd'))
 ((key)->decl.alias_var1) = ((void *)0);
      else
 fancy_abort ("gcc.c", 125306, "?");
    }
  for (i = 0; i < ((local_alias_varnums)->elements_used); i ++)
    ((alias_vars)->data.generic[((local_alias_varnums)->data.i[i])]) = ((void *)0);
  if (!current_alias_ops->ip && !current_alias_ops->ip_partial)
    {
      varray_clear(local_alias_vars);
      varray_clear(local_alias_varnums);
    }
  do { if (addrargs) { bitmap_clear (addrargs); free (addrargs); (addrargs) = 0; } } while (0);
  current_alias_ops->cleanup (current_alias_ops);
}
struct tree_opt_pass pass_del_pta =
{
  "pta",
  ((void *)0),
  delete_alias_vars,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_PTA,
  (1 << 5),
  0,
  (1 << 5),
  0,
  0
};
void
init_alias_vars (void)
{
  current_alias_ops->init (current_alias_ops);
  addrargs = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  local_alias_vars = varray_init (10, VARRAY_DATA_TREE, "Local alias vars");
  local_alias_varnums = varray_init (10, VARRAY_DATA_I, "Local alias varnums");
  if ((!current_alias_ops->ip && !current_alias_ops->ip_partial)
      || alias_vars == ((void *)0))
    alias_vars = varray_init (10, VARRAY_DATA_GENERIC, "Alias vars");
}
unsigned char
empty_points_to_set (tree ptr)
{
 alias_var ptrtv;
  if ((tree_code_type[(int) (((enum tree_code) (ptr)->common.code))] == 'd'))
    {
      ptrtv = ((ptr)->decl.alias_var1);
      if (!ptrtv)
 return 1;
    }
  else
    fancy_abort ("gcc.c", 125372, "?");
  return current_alias_ops->empty_points_to_set (current_alias_ops, ptrtv);
}
unsigned char
same_points_to_set (tree ptr, tree var)
{
  alias_var ptrtv, vartv;
  if (ptr == var)
    return 1;
  if ((tree_code_type[(int) (((enum tree_code) (ptr)->common.code))] == 'd'))
    {
      ptrtv = ((ptr)->decl.alias_var1);
      if (!ptrtv)
 return 0;
    }
  else
    fancy_abort ("gcc.c", 125402, "?");
  if ((tree_code_type[(int) (((enum tree_code) (var)->common.code))] == 'd'))
    {
      vartv = ((var)->decl.alias_var1);
      if (!vartv)
 return 0;
    }
  else
    fancy_abort ("gcc.c", 125411, "?");
  return current_alias_ops->same_points_to_set (current_alias_ops, vartv, ptrtv);
}
unsigned char
ptr_may_alias_var (tree ptr, tree var)
{
  alias_var ptrtv, vartv;
  if (ptr == var)
    return 1;
  if ((tree_code_type[(int) (((enum tree_code) (ptr)->common.code))] == 'd'))
    {
      ptrtv = ((ptr)->decl.alias_var1);
      if (!ptrtv)
 return 0;
    }
  else
    fancy_abort ("gcc.c", 125442, "?");
  if ((tree_code_type[(int) (((enum tree_code) (var)->common.code))] == 'd'))
    {
      vartv = ((var)->decl.alias_var1);
      if (!vartv)
 return 0;
    }
  else
    fancy_abort ("gcc.c", 125451, "?");
  return current_alias_ops->may_alias (current_alias_ops, ptrtv, vartv);
}
const char *
alias_get_name (tree t)
{
  const char *name;
    {
      if (((enum tree_code) (t)->common.code) == FUNCTION_DECL)
 name = ((const char *) (((t)->decl.name))->identifier.id.str);
      else if (((enum tree_code) (t)->common.code) == RESULT_DECL)
 name = "<return value>";
      else
 name = get_name (t);
    }
  if (!name)
    {
      char *namep;
      namep = ggc_alloc_stat (2 + 4 + 2 + 1 );
      sprintf (namep, "<UV%x>", ((unsigned)((unsigned long)(t) & 0xffff)));
      return namep;
    }
  return name;
}
const struct ggc_root_tab gt_ggc_r_gt_tree_alias_common_h[] = {
  {
    &local_alias_varnums,
    1,
    sizeof (local_alias_varnums),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &local_alias_vars,
    1,
    sizeof (local_alias_vars),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &alias_vars,
    1,
    sizeof (alias_vars),
    &gt_ggc_m_P13alias_var_def15varray_head_tag,
    &gt_pch_n_P13alias_var_def15varray_head_tag
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
typedef enum
{
  UNINITIALIZED = 0,
  UNDEFINED,
  CONSTANT,
  VARYING
} latticevalue;
typedef struct
{
  latticevalue lattice_val;
  tree const_val;
} value;
static sbitmap executable_blocks;
static varray_type cfg_blocks = ((void *)0);
static unsigned int cfg_blocks_num = 0;
static int cfg_blocks_tail;
static int cfg_blocks_head;
static sbitmap bb_in_list;
static value *value_vector;
static varray_type ssa_edges;
static varray_type varying_ssa_edges;
static void initialize (void);
static void finalize_ssa (void);
static void visit_phi_node (tree);
static tree ccp_fold (tree);
static value cp_lattice_meet (value, value);
static void visit_stmt (tree);
static void visit_cond_stmt (tree);
static void visit_assignment (tree);
static void add_var_to_ssa_edges_worklist (tree, value);
static void add_outgoing_control_edges (basic_block);
static void add_control_edge (edge);
static void def_to_varying (tree);
static void set_lattice_value (tree, value);
static void simulate_block (basic_block);
static void simulate_stmt (tree);
static void substitute_and_fold (void);
static value evaluate_stmt (tree);
static void dump_lattice_value (FILE *, const char *, value);
static unsigned char replace_uses_in (tree, unsigned char *);
static latticevalue likely_value (tree);
static tree get_rhs (tree);
static unsigned char set_rhs (tree *, tree);
static value *get_value (tree);
static value get_default_value (tree);
static tree ccp_fold_builtin (tree, tree);
static unsigned char get_strlen (tree, tree *, bitmap);
static unsigned char cfg_blocks_empty_p (void);
static void cfg_blocks_add (basic_block);
static basic_block cfg_blocks_get (void);
static unsigned char need_imm_uses_for_ccp (tree var);
static void
process_ssa_edge_worklist (varray_type *worklist)
{
  while (((*worklist)->elements_used) > 0)
    {
      tree stmt = ((*worklist)->data.tree1[(*worklist)->elements_used - 1]);
      stmt_ann_t ann = stmt_ann (stmt);
      do { ((*worklist)->elements_used--); } while (0);
      if (ann->in_ccp_worklist)
 {
   ann->in_ccp_worklist = 0;
   simulate_stmt (stmt);
 }
    }
}
static void
tree_ssa_ccp (void)
{
  initialize ();
  while (!cfg_blocks_empty_p ()
  || ((ssa_edges)->elements_used) > 0
  || ((varying_ssa_edges)->elements_used) > 0)
    {
      if (!cfg_blocks_empty_p ())
 {
   basic_block dest_block = cfg_blocks_get ();
   simulate_block (dest_block);
 }
      process_ssa_edge_worklist (&varying_ssa_edges);
      process_ssa_edge_worklist (&ssa_edges);
    }
  substitute_and_fold ();
  cleanup_tree_cfg ();
  finalize_ssa ();
  if (dump_file && (dump_flags & (1 << 3)))
    {
      dump_referenced_vars (dump_file);
      fprintf (dump_file, "\n\n");
    }
}
static unsigned char
gate_ccp (void)
{
  return flag_tree_ccp != 0;
}
struct tree_opt_pass pass_ccp =
{
  "ccp",
  gate_ccp,
  tree_ssa_ccp,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_CCP,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 1)
    | (1 << 2) | (1 << 3)
    | (1 << 5)
};
static value *
get_value (tree var)
{
  value *val;
  val = &value_vector[(var)->ssa_name.version];
  if (val->lattice_val == UNINITIALIZED)
    *val = get_default_value (var);
  return val;
}
static void
simulate_block (basic_block block)
{
  tree phi;
  if (block == EXIT_BLOCK_PTR)
    return;
  if (dump_file && (dump_flags & (1 << 3)))
    fprintf (dump_file, "\nSimulating block %d\n", block->index);
  for (phi = phi_nodes (block); phi; phi = (((phi))->common.chain))
    visit_phi_node (phi);
  if (!((executable_blocks)->elms [(block->index) / ((unsigned) (8 * 4))] >> (block->index) % ((unsigned) (8 * 4)) & 1))
    {
      block_stmt_iterator j;
      unsigned int normal_edge_count;
      edge e, normal_edge;
      ((executable_blocks)->elms [(block->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (block->index) % ((unsigned) (8 * 4)));
      for (j = bsi_start (block); !bsi_end_p (j); bsi_next (&j))
 visit_stmt (bsi_stmt (j));
      normal_edge_count = 0;
      normal_edge = ((void *)0);
      for (e = block->succ; e; e = e->succ_next)
        {
   if (e->flags & 2)
     {
       add_control_edge (e);
     }
   else
     {
       normal_edge_count++;
       normal_edge = e;
     }
        }
        if (normal_edge_count == 1)
   add_control_edge (normal_edge);
    }
}
static void
simulate_stmt (tree use_stmt)
{
  basic_block use_bb = bb_for_stmt (use_stmt);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "\nSimulating statement (from ssa_edges): ");
      print_generic_stmt (dump_file, use_stmt, dump_flags);
    }
  if (((enum tree_code) (use_stmt)->common.code) == PHI_NODE)
    {
      visit_phi_node (use_stmt);
    }
  else if (((executable_blocks)->elms [(use_bb->index) / ((unsigned) (8 * 4))] >> (use_bb->index) % ((unsigned) (8 * 4)) & 1))
    {
      visit_stmt (use_stmt);
    }
}
static void
substitute_and_fold (void)
{
  basic_block bb;
  if (dump_file && (dump_flags & (1 << 3)))
    fprintf (dump_file,
      "\nSubstituing constants and folding statements\n\n");
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      block_stmt_iterator i;
      tree phi;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 {
   int i;
   for (i = 0; i < (phi)->phi.num_args; i++)
     {
       value *new_val;
       use_operand_p orig_p = get_phi_arg_def_ptr ((phi), (i));
       tree orig = get_use_from_ptr (orig_p);
       if (! (((enum tree_code) (orig)->common.code) == VAR_DECL || ((enum tree_code) (orig)->common.code) == PARM_DECL || ((enum tree_code) (orig)->common.code) == RESULT_DECL || (((enum tree_code) (orig)->common.code) == SSA_NAME && (((enum tree_code) ((orig)->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((orig)->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((orig)->ssa_name.var)->common.code) == RESULT_DECL))))
  break;
       new_val = get_value (orig);
       if (new_val->lattice_val == CONSTANT
    && may_propagate_copy (orig, new_val->const_val))
  ((*((orig_p).use)) = (new_val->const_val));
     }
 }
      for (i = bsi_start (bb); !bsi_end_p (i); bsi_next (&i))
 {
          unsigned char replaced_address;
   tree stmt = bsi_stmt (i);
   if (stmt_modified_p (stmt) || !is_exec_stmt (stmt))
     continue;
   if (dump_file && (dump_flags & (1 << 3)))
     {
       fprintf (dump_file, "Line %d: replaced ", get_lineno (stmt));
       print_generic_stmt (dump_file, stmt, (1 << 1));
     }
   if (replace_uses_in (stmt, &replaced_address))
     {
       unsigned char changed = fold_stmt (bsi_stmt_ptr (i));
       stmt = bsi_stmt(i);
       modify_stmt (stmt);
       if (replaced_address || changed)
  {
    mark_new_vars_to_rename (stmt, vars_to_rename);
    if (maybe_clean_eh_stmt (stmt))
      tree_purge_dead_eh_edges (bb);
  }
     }
   if (dump_file && (dump_flags & (1 << 3)))
     {
       fprintf (dump_file, " with ");
       print_generic_stmt (dump_file, stmt, (1 << 1));
       fprintf (dump_file, "\n");
     }
 }
    }
}
static void
visit_phi_node (tree phi)
{
  unsigned char short_circuit = 0;
  value phi_val, *curr_val;
  int i;
  if (((phi)->common.visited))
    return;
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "\nVisiting PHI node: ");
      print_generic_expr (dump_file, phi, dump_flags);
    }
  curr_val = get_value (get_def_from_ptr (get_phi_result_ptr (phi)));
  switch (curr_val->lattice_val)
    {
    case VARYING:
      if (dump_file && (dump_flags & (1 << 3)))
 fprintf (dump_file, "\n   Shortcircuit. Default of VARYING.");
      short_circuit = 1;
      break;
    case CONSTANT:
      phi_val = *curr_val;
      break;
    case UNDEFINED:
    case UNINITIALIZED:
      phi_val.lattice_val = UNDEFINED;
      phi_val.const_val = (tree) ((void *)0);
      break;
    default:
      fancy_abort ("gcc.c", 126029, "?");
    }
  if (short_circuit || (((get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.var)->common.volatile_flag))
    {
      phi_val.lattice_val = VARYING;
      phi_val.const_val = ((void *)0);
    }
  else
    for (i = 0; i < (phi)->phi.num_args; i++)
      {
 edge e = ((phi)->phi.a[i]).e;
 if (dump_file && (dump_flags & (1 << 3)))
   {
     fprintf (dump_file,
       "\n    Argument #%d (%d -> %d %sexecutable)\n",
       i, e->src->index, e->dest->index,
       (e->flags & 4096) ? "" : "not ");
   }
 if (e->flags & 4096)
   {
     tree rdef = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
     value *rdef_val, val;
     if (is_gimple_min_invariant (rdef))
       {
  val.lattice_val = CONSTANT;
  val.const_val = rdef;
  rdef_val = &val;
       }
     else
       rdef_val = get_value (rdef);
     phi_val = cp_lattice_meet (phi_val, *rdef_val);
     if (dump_file && (dump_flags & (1 << 3)))
       {
  fprintf (dump_file, "\t");
  print_generic_expr (dump_file, rdef, dump_flags);
  dump_lattice_value (dump_file, "\tValue: ", *rdef_val);
  fprintf (dump_file, "\n");
       }
     if (phi_val.lattice_val == VARYING)
       break;
   }
      }
  if (dump_file && (dump_flags & (1 << 3)))
    {
      dump_lattice_value (dump_file, "\n    PHI node value: ", phi_val);
      fprintf (dump_file, "\n\n");
    }
  set_lattice_value (get_def_from_ptr (get_phi_result_ptr (phi)), phi_val);
  if (phi_val.lattice_val == VARYING)
    ((phi)->common.visited) = 1;
}
static value
cp_lattice_meet (value val1, value val2)
{
  value result;
  if (val1.lattice_val == UNDEFINED)
    return val2;
  else if (val2.lattice_val == UNDEFINED)
    return val1;
  if (val1.lattice_val == VARYING || val2.lattice_val == VARYING)
    {
      result.lattice_val = VARYING;
      result.const_val = (tree) ((void *)0);
      return result;
    }
  if (simple_cst_equal (val1.const_val, val2.const_val) == 1)
    {
      result.lattice_val = CONSTANT;
      result.const_val = val1.const_val;
    }
  else
    {
      result.lattice_val = VARYING;
      result.const_val = (tree) ((void *)0);
    }
  return result;
}
static void
visit_stmt (tree stmt)
{
  size_t i;
  stmt_ann_t ann;
  def_optype defs;
  v_may_def_optype v_may_defs;
  v_must_def_optype v_must_defs;
  if (((stmt)->common.visited))
    return;
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "\nVisiting statement: ");
      print_generic_stmt (dump_file, stmt, (1 << 1));
      fprintf (dump_file, "\n");
    }
  ann = stmt_ann (stmt);
  if (ann->in_ccp_worklist)
    ann->in_ccp_worklist = 0;
  if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR
      && ((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == SSA_NAME)
    visit_assignment (stmt);
  else if (((defs = get_def_ops (ann)) ? (defs = get_def_ops (ann))->num_defs : 0) != 0)
    {
      ((stmt)->common.visited) = 1;
      for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
 {
   tree def = (get_def_from_ptr (get_def_op_ptr (((defs)), ((i)))));
   def_to_varying (def);
 }
    }
  else if (((enum tree_code) (stmt)->common.code) == COND_EXPR || ((enum tree_code) (stmt)->common.code) == SWITCH_EXPR)
    visit_cond_stmt (stmt);
  else
    {
      ((stmt)->common.visited) = 1;
      if (computed_goto_p (stmt))
 add_outgoing_control_edges (bb_for_stmt (stmt));
    }
  v_may_defs = get_v_may_def_ops (ann);
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    def_to_varying ((get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i))))));
  v_must_defs = get_v_must_def_ops (ann);
  for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
    def_to_varying ((get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i))))));
}
static void
visit_assignment (tree stmt)
{
  value val;
  tree lhs, rhs;
  lhs = ((stmt)->exp.operands[0]);
  rhs = ((stmt)->exp.operands[1]);
  if ((((lhs)->ssa_name.var)->common.volatile_flag))
    {
      val.lattice_val = VARYING;
      val.const_val = (tree) ((void *)0);
    }
  else if (((enum tree_code) (rhs)->common.code) == SSA_NAME)
    {
      value *nval = get_value (rhs);
      val = *nval;
    }
  else
    {
      val = evaluate_stmt (stmt);
    }
  {
    tree lhs = ((stmt)->exp.operands[0]);
    if (val.lattice_val == CONSTANT
 && ((enum tree_code) (lhs)->common.code) == COMPONENT_REF
 && ((((lhs)->exp.operands[1]))->decl.bit_field_flag))
      {
 tree w = widen_bitfield (val.const_val, ((lhs)->exp.operands[1]), lhs);
 if (w && is_gimple_min_invariant (w))
   val.const_val = w;
 else
   {
     val.lattice_val = VARYING;
     val.const_val = ((void *)0);
   }
      }
  }
  set_lattice_value (lhs, val);
  if (val.lattice_val == VARYING)
    ((stmt)->common.visited) = 1;
}
static void
visit_cond_stmt (tree stmt)
{
  edge e;
  value val;
  basic_block block;
  block = bb_for_stmt (stmt);
  val = evaluate_stmt (stmt);
  e = find_taken_edge (block, val.const_val);
  if (e)
    add_control_edge (e);
  else
    {
      ((stmt)->common.visited) = 1;
      add_outgoing_control_edges (block);
    }
}
static void
add_outgoing_control_edges (basic_block bb)
{
  edge e;
  for (e = bb->succ; e; e = e->succ_next)
    add_control_edge (e);
}
static void
add_control_edge (edge e)
{
  basic_block bb = e->dest;
  if (bb == EXIT_BLOCK_PTR)
    return;
  if (e->flags & 4096)
      return;
  e->flags |= 4096;
  if (((bb_in_list)->elms [(bb->index) / ((unsigned) (8 * 4))] >> (bb->index) % ((unsigned) (8 * 4)) & 1))
    return;
  cfg_blocks_add (bb);
  if (dump_file && (dump_flags & (1 << 3)))
    fprintf (dump_file, "Adding Destination of edge (%d -> %d) to worklist\n\n",
      e->src->index, e->dest->index);
}
static tree
ccp_fold (tree stmt)
{
  tree rhs = get_rhs (stmt);
  enum tree_code code = ((enum tree_code) (rhs)->common.code);
  int kind = tree_code_type[(int) (code)];
  tree retval = (tree) ((void *)0);
  if (((enum tree_code) (rhs)->common.code) == SSA_NAME)
    return get_value (rhs)->const_val;
  if (kind == '1')
    {
      tree op0 = ((rhs)->exp.operands[0]);
      if (((enum tree_code) (op0)->common.code) == SSA_NAME)
 {
   value *val = get_value (op0);
   if (val->lattice_val == CONSTANT)
     op0 = get_value (op0)->const_val;
 }
      retval = nondestructive_fold_unary_to_constant (code,
                 ((rhs)->common.type),
            op0);
      if (retval && ! is_gimple_min_invariant (retval))
 return ((void *)0);
      if (! retval && is_gimple_min_invariant (op0))
 return build1_stat (code,((rhs)->common.type),op0 );
    }
  else if (kind == '2'
           || kind == '<'
           || code == TRUTH_AND_EXPR
           || code == TRUTH_OR_EXPR
           || code == TRUTH_XOR_EXPR)
    {
      tree op0 = ((rhs)->exp.operands[0]);
      tree op1 = ((rhs)->exp.operands[1]);
      if (((enum tree_code) (op0)->common.code) == SSA_NAME)
 {
   value *val = get_value (op0);
   if (val->lattice_val == CONSTANT)
     op0 = val->const_val;
 }
      if (((enum tree_code) (op1)->common.code) == SSA_NAME)
 {
   value *val = get_value (op1);
   if (val->lattice_val == CONSTANT)
     op1 = val->const_val;
 }
      retval = nondestructive_fold_binary_to_constant (code,
                  ((rhs)->common.type),
             op0, op1);
      if (retval && ! is_gimple_min_invariant (retval))
 return ((void *)0);
      if (! retval
   && is_gimple_min_invariant (op0)
   && is_gimple_min_invariant (op1))
 return build (code, ((rhs)->common.type), op0, op1);
    }
  else if (code == CALL_EXPR
    && ((enum tree_code) (((rhs)->exp.operands[0]))->common.code) == ADDR_EXPR
    && (((enum tree_code) (((((rhs)->exp.operands[0]))->exp.operands[0]))->common.code)
        == FUNCTION_DECL)
    && (((((((rhs)->exp.operands[0]))->exp.operands[0]))->decl.built_in_class) != NOT_BUILT_IN))
    {
      use_optype uses = get_use_ops (stmt_ann (stmt));
      if (((uses) ? (uses)->num_uses : 0) != 0)
 {
   tree *orig;
   size_t i;
   orig = xmalloc (sizeof (tree) * ((uses) ? (uses)->num_uses : 0));
   for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
     orig[i] = (get_use_from_ptr (get_use_op_ptr (((uses)), ((i)))));
   replace_uses_in (stmt, ((void *)0));
   retval = fold_builtin (rhs);
   for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
     (((*((get_use_op_ptr (((uses)), ((i)))).use)) = ((orig[i]))));
   free (orig);
 }
    }
  else
    return rhs;
  if (retval)
    {
      if (((retval)->common.type) != ((rhs)->common.type))
 retval = fold_convert (((rhs)->common.type), retval);
      if (((retval)->common.type) == ((rhs)->common.type))
 return retval;
    }
  return rhs;
}
static value
evaluate_stmt (tree stmt)
{
  value val;
  tree simplified;
  latticevalue likelyvalue = likely_value (stmt);
  if (likelyvalue == CONSTANT)
    simplified = ccp_fold (stmt);
  else if (likelyvalue == VARYING)
    simplified = get_rhs (stmt);
  else
    simplified = (tree) ((void *)0);
  if (simplified && is_gimple_min_invariant (simplified))
    {
      val.lattice_val = CONSTANT;
      val.const_val = simplified;
    }
  else
    {
      val.lattice_val = (likelyvalue == UNDEFINED ? UNDEFINED : VARYING);
      val.const_val = (tree) ((void *)0);
    }
  return val;
}
static void
dump_lattice_value (FILE *outf, const char *prefix, value val)
{
  switch (val.lattice_val)
    {
    case UNDEFINED:
      fprintf (outf, "%sUNDEFINED", prefix);
      break;
    case VARYING:
      fprintf (outf, "%sVARYING", prefix);
      break;
    case CONSTANT:
      fprintf (outf, "%sCONSTANT ", prefix);
      print_generic_expr (outf, val.const_val, dump_flags);
      break;
    default:
      fancy_abort ("gcc.c", 126575, "?");
    }
}
tree
widen_bitfield (tree val, tree field, tree var)
{
  unsigned long var_size, field_size;
  tree wide_val;
  unsigned long mask;
  unsigned int i;
  if (!host_integerp (((((var)->common.type))->type.size), 1)
      || !host_integerp (((field)->decl.size), 1)
      || !host_integerp (val, 0))
    return (tree) ((void *)0);
  var_size = tree_low_cst (((((var)->common.type))->type.size), 1);
  field_size = tree_low_cst (((field)->decl.size), 1);
  if (field_size > (8 * 4) || var_size > (8 * 4))
    return (tree) ((void *)0);
  if (((field)->common.unsigned_flag)
      || !(tree_low_cst (val, 0) & (((long)1) << (field_size - 1))))
    {
      for (i = 0, mask = 0; i < field_size; i++)
 mask |= ((long) 1) << i;
      wide_val = build (BIT_AND_EXPR, ((var)->common.type), val,
   fold_convert (((var)->common.type), build_int_2_wide ((unsigned long) (mask), (long) (0))));
    }
  else
    {
      for (i = 0, mask = 0; i < (var_size - field_size); i++)
 mask |= ((long) 1) << (var_size - i - 1);
      wide_val = build (BIT_IOR_EXPR, ((var)->common.type), val,
   fold_convert (((var)->common.type), build_int_2_wide ((unsigned long) (mask), (long) (0))));
    }
  return fold (wide_val);
}
static unsigned char
need_imm_uses_for_ccp (tree var)
{
  return get_value (var)->lattice_val != VARYING;
}
static void
initialize (void)
{
  edge e;
  basic_block bb;
  sbitmap virtual_var;
  ssa_edges = varray_init (20, VARRAY_DATA_TREE, "ssa_edges");
  varying_ssa_edges = varray_init (20, VARRAY_DATA_TREE, "varying_ssa_edges");
  executable_blocks = sbitmap_alloc (last_basic_block);
  sbitmap_zero (executable_blocks);
  bb_in_list = sbitmap_alloc (last_basic_block);
  sbitmap_zero (bb_in_list);
  value_vector = (value *) xmalloc (((ssa_names)->elements_used) * sizeof (value));
  memset (value_vector, 0, ((ssa_names)->elements_used) * sizeof (value));
  virtual_var = sbitmap_alloc (((ssa_names)->elements_used));
  sbitmap_zero (virtual_var);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      block_stmt_iterator i;
      tree stmt;
      stmt_ann_t ann;
      def_optype defs;
      v_may_def_optype v_may_defs;
      v_must_def_optype v_must_defs;
      size_t x;
      int vary;
      for (i = bsi_start (bb); !bsi_end_p (i); bsi_next (&i))
        {
   vary = 0;
   stmt = bsi_stmt (i);
   get_stmt_operands (stmt);
   ann = stmt_ann (stmt);
   defs = get_def_ops (ann);
   for (x = 0; x < ((defs) ? (defs)->num_defs : 0); x++)
     {
       tree def = (get_def_from_ptr (get_def_op_ptr (((defs)), ((x)))));
       if (get_value (def)->lattice_val == VARYING)
  vary = 1;
     }
   ((stmt)->common.visited) = vary;
   v_may_defs = get_v_may_def_ops (ann);
   for (x = 0; x < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); x++)
     {
       tree res = (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((x)))));
       get_value (res)->lattice_val = VARYING;
       ((virtual_var)->elms [((res)->ssa_name.version) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << ((res)->ssa_name.version) % ((unsigned) (8 * 4)));
     }
   v_must_defs = get_v_must_def_ops (ann);
   for (x = 0; x < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); x++)
     {
       tree v_must_def = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((x)))));
       get_value (v_must_def)->lattice_val = VARYING;
       ((virtual_var)->elms [((v_must_def)->ssa_name.version) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << ((v_must_def)->ssa_name.version) % ((unsigned) (8 * 4)));
     }
 }
      for (e = bb->succ; e; e = e->succ_next)
 e->flags &= ~4096;
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree phi, var;
      int x;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
        {
   value *val;
   val = get_value (get_def_from_ptr (get_phi_result_ptr (phi)));
   if (val->lattice_val != VARYING)
     {
       for (x = 0; x < (phi)->phi.num_args; x++)
         {
    var = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((x))));
    if (((enum tree_code) (var)->common.code) == SSA_NAME)
      {
        if (((virtual_var)->elms [((var)->ssa_name.version) / ((unsigned) (8 * 4))] >> ((var)->ssa_name.version) % ((unsigned) (8 * 4)) & 1))
          {
     val->lattice_val = VARYING;
     ((virtual_var)->elms [((get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.version) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << ((get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.version) % ((unsigned) (8 * 4)))
                                           ;
     break;
   }
      }
 }
     }
   ((phi)->common.visited) = ((val->lattice_val == VARYING) ? 1 : 0);
 }
    }
  free(virtual_var);
  compute_immediate_uses (1 << 0, need_imm_uses_for_ccp);
  if (dump_file && (dump_flags & (1 << 3)))
    dump_immediate_uses (dump_file);
  cfg_blocks = varray_init (20, VARRAY_DATA_BB, "cfg_blocks");
  for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
    {
      if (e->dest != EXIT_BLOCK_PTR)
        {
   e->flags |= 4096;
   cfg_blocks_add (e->dest);
 }
    }
}
static void
finalize_ssa (void)
{
  ssa_edges = ((void *)0);
  varying_ssa_edges = ((void *)0);
  cfg_blocks = ((void *)0);
  free (value_vector);
  free(bb_in_list);
  free(executable_blocks);
  free_df ();
}
static unsigned char
cfg_blocks_empty_p (void)
{
  return (cfg_blocks_num == 0);
}
static void
cfg_blocks_add (basic_block bb)
{
   if (bb == ENTRY_BLOCK_PTR || bb == EXIT_BLOCK_PTR)
     return;
   if (((bb_in_list)->elms [(bb->index) / ((unsigned) (8 * 4))] >> (bb->index) % ((unsigned) (8 * 4)) & 1))
     return;
    if (cfg_blocks_empty_p ())
      {
 cfg_blocks_tail = cfg_blocks_head = 0;
 cfg_blocks_num = 1;
      }
    else
      {
 cfg_blocks_num++;
 if (cfg_blocks_num > ((cfg_blocks)->num_elements))
   {
     cfg_blocks_tail = ((cfg_blocks)->num_elements);
     cfg_blocks_head = 0;
     ((cfg_blocks) = varray_grow (cfg_blocks, 2 * ((cfg_blocks)->num_elements)));
   }
 else
   cfg_blocks_tail = (cfg_blocks_tail + 1) % ((cfg_blocks)->num_elements);
      }
    ((cfg_blocks)->data.bb[cfg_blocks_tail]) = bb;
    ((bb_in_list)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
}
static basic_block
cfg_blocks_get (void)
{
  basic_block bb;
  bb = ((cfg_blocks)->data.bb[cfg_blocks_head]);
  cfg_blocks_head = (cfg_blocks_head + 1) % ((cfg_blocks)->num_elements);
  --cfg_blocks_num;
  ((bb_in_list)->elms [(bb->index) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4))));
  return bb;
}
static void
add_var_to_ssa_edges_worklist (tree var, value val)
{
  tree stmt = (var)->common.chain;
  dataflow_t df = get_immediate_uses (stmt);
  int num_uses = num_immediate_uses (df);
  int i;
  for (i = 0; i < num_uses; i++)
    {
      tree use = immediate_use (df, i);
      if (!((use)->common.visited))
 {
   stmt_ann_t ann = stmt_ann (use);
   if (ann->in_ccp_worklist == 0)
     {
       ann->in_ccp_worklist = 1;
       if (val.lattice_val == VARYING)
  do { if ((varying_ssa_edges)->elements_used >= (varying_ssa_edges)->num_elements) (((varying_ssa_edges)) = varray_grow ((varying_ssa_edges), 2 * (varying_ssa_edges)->num_elements)); (varying_ssa_edges)->data.tree1[(varying_ssa_edges)->elements_used++] = (use); } while (0);
       else
  do { if ((ssa_edges)->elements_used >= (ssa_edges)->num_elements) (((ssa_edges)) = varray_grow ((ssa_edges), 2 * (ssa_edges)->num_elements)); (ssa_edges)->data.tree1[(ssa_edges)->elements_used++] = (use); } while (0);
     }
 }
    }
}
static void
def_to_varying (tree var)
{
  value val;
  val.lattice_val = VARYING;
  val.const_val = (tree) ((void *)0);
  set_lattice_value (var, val);
}
static void
set_lattice_value (tree var, value val)
{
  value *old = get_value (var);
  if (old->lattice_val == CONSTANT && val.lattice_val == CONSTANT
      && !simple_cst_equal (old->const_val, val.const_val))
    {
      val.lattice_val = VARYING;
      val.const_val = (tree) ((void *)0);
    }
  if (old->lattice_val != val.lattice_val)
    {
      if (dump_file && (dump_flags & (1 << 3)))
 {
   dump_lattice_value (dump_file,
         "Lattice value changed to ", val);
   fprintf (dump_file, ".  Adding definition to SSA edges.\n");
 }
      add_var_to_ssa_edges_worklist (var, val);
      *old = val;
    }
}
static unsigned char
replace_uses_in (tree stmt, unsigned char *replaced_addresses_p)
{
  unsigned char replaced = 0;
  use_optype uses;
  size_t i;
  if (replaced_addresses_p)
    *replaced_addresses_p = 0;
  get_stmt_operands (stmt);
  uses = get_use_ops (stmt_ann (stmt));
  for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
    {
      use_operand_p use = get_use_op_ptr ((uses), (i));
      value *val = get_value (get_use_from_ptr (use));
      if (val->lattice_val == CONSTANT)
 {
   ((*((use).use)) = (val->const_val));
   replaced = 1;
   if ((((enum tree_code) (((get_use_from_ptr (use))->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((get_use_from_ptr (use))->common.type))->common.code) == REFERENCE_TYPE)
       && replaced_addresses_p)
     *replaced_addresses_p = 1;
 }
    }
  return replaced;
}
static latticevalue
likely_value (tree stmt)
{
  use_optype uses;
  size_t i;
  int found_constant = 0;
  stmt_ann_t ann;
  ann = stmt_ann (stmt);
  if (ann->makes_aliased_loads || ann->has_volatile_ops)
    return VARYING;
  if (get_call_expr_in (stmt) != (tree) ((void *)0))
    return VARYING;
  get_stmt_operands (stmt);
  uses = get_use_ops (ann);
  for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
    {
      tree use = (get_use_from_ptr (get_use_op_ptr (((uses)), ((i)))));
      value *val = get_value (use);
      if (val->lattice_val == UNDEFINED)
 return UNDEFINED;
      if (val->lattice_val == CONSTANT)
 found_constant = 1;
    }
  return ((found_constant || !uses) ? CONSTANT : VARYING);
}
static tree
maybe_fold_offset_to_array_ref (tree base, tree offset, tree orig_type)
{
  tree min_idx, idx, elt_offset = global_trees[TI_INTEGER_ZERO];
  tree array_type, elt_type, elt_size;
  if (((enum tree_code) (base)->common.code) == ARRAY_REF)
    {
      tree low_bound = array_ref_low_bound (base);
      elt_offset = ((base)->exp.operands[1]);
      if (((enum tree_code) (low_bound)->common.code) != INTEGER_CST
   || ((enum tree_code) (elt_offset)->common.code) != INTEGER_CST)
 return (tree) ((void *)0);
      elt_offset = int_const_binop (MINUS_EXPR, elt_offset, low_bound, 0);
      base = ((base)->exp.operands[0]);
    }
  array_type = ((base)->common.type);
  if (((enum tree_code) (array_type)->common.code) != ARRAY_TYPE)
    return (tree) ((void *)0);
  elt_type = ((array_type)->common.type);
  if (!lang_hooks.types_compatible_p (orig_type, elt_type))
    return (tree) ((void *)0);
  elt_size = ((elt_type)->type.size_unit);
  if (integer_zerop (offset))
    {
      if (((enum tree_code) (elt_size)->common.code) != INTEGER_CST)
 elt_size = size_int_wide ((long) (((elt_type)->type.align)), SIZETYPE);
      idx = global_trees[TI_INTEGER_ZERO];
    }
  else
    {
      unsigned long lquo, lrem;
      long hquo, hrem;
      if (((enum tree_code) (elt_size)->common.code) != INTEGER_CST
   || div_and_round_double (TRUNC_DIV_EXPR, 1,
       (((offset)->int_cst.int_cst).low),
       (((offset)->int_cst.int_cst).high),
       (((elt_size)->int_cst.int_cst).low),
       (((elt_size)->int_cst.int_cst).high),
       &lquo, &hquo, &lrem, &hrem)
   || lrem || hrem)
 return (tree) ((void *)0);
      idx = build_int_2_wide (lquo, hquo);
    }
  min_idx = global_trees[TI_INTEGER_ZERO];
  if (((array_type)->type.values))
    {
      if (((((array_type)->type.values))->type.minval))
 min_idx = ((((array_type)->type.values))->type.minval);
      else
 min_idx = fold_convert (((array_type)->type.values), min_idx);
      if (((enum tree_code) (min_idx)->common.code) != INTEGER_CST)
 return (tree) ((void *)0);
      idx = fold_convert (((array_type)->type.values), idx);
      elt_offset = fold_convert (((array_type)->type.values), elt_offset);
    }
  if (!integer_zerop (min_idx))
    idx = int_const_binop (PLUS_EXPR, idx, min_idx, 0);
  if (!integer_zerop (elt_offset))
    idx = int_const_binop (PLUS_EXPR, idx, elt_offset, 0);
  return build (ARRAY_REF, orig_type, base, idx, min_idx,
  size_int_wide ((long) (tree_low_cst (elt_size, 1) / (((elt_type)->type.align) / 8)), SIZETYPE)
                                               );
}
static tree
maybe_fold_offset_to_component_ref (tree record_type, tree base, tree offset,
        tree orig_type, unsigned char base_is_ptr)
{
  tree f, t, field_type, tail_array_field;
  if (((enum tree_code) (record_type)->common.code) != RECORD_TYPE
      && ((enum tree_code) (record_type)->common.code) != UNION_TYPE
      && ((enum tree_code) (record_type)->common.code) != QUAL_UNION_TYPE)
    return (tree) ((void *)0);
  if (lang_hooks.types_compatible_p (record_type, orig_type))
    return (tree) ((void *)0);
  tail_array_field = (tree) ((void *)0);
  for (f = ((record_type)->type.values); f ; f = ((f)->common.chain))
    {
      int cmp;
      if (((enum tree_code) (f)->common.code) != FIELD_DECL)
 continue;
      if (((f)->decl.bit_field_flag))
 continue;
      if (((enum tree_code) (((f)->decl.arguments))->common.code) != INTEGER_CST)
 continue;
      if (!((f)->decl.context))
 continue;
      tail_array_field = (tree) ((void *)0);
      cmp = tree_int_cst_compare (((f)->decl.arguments), offset);
      if (cmp > 0)
 continue;
      field_type = ((f)->common.type);
      if (cmp < 0)
 {
   if (!(((enum tree_code) (field_type)->common.code) == ARRAY_TYPE || ((enum tree_code) (field_type)->common.code) == RECORD_TYPE || ((enum tree_code) (field_type)->common.code) == UNION_TYPE || ((enum tree_code) (field_type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (field_type)->common.code) == SET_TYPE))
     continue;
   if (((enum tree_code) (field_type)->common.code) == ARRAY_TYPE)
     tail_array_field = f;
   if (!((f)->decl.size_unit)
       || ((enum tree_code) (((f)->decl.size_unit))->common.code) != INTEGER_CST)
     continue;
   t = int_const_binop (MINUS_EXPR, offset, ((f)->decl.arguments), 1);
   if (!tree_int_cst_lt (t, ((f)->decl.size_unit)))
     continue;
   offset = t;
 }
      else if (lang_hooks.types_compatible_p (orig_type, field_type))
 {
   if (base_is_ptr)
     base = build1_stat (INDIRECT_REF,record_type,base );
   t = build (COMPONENT_REF, field_type, base, f, (tree) ((void *)0));
   return t;
 }
      else if (!(((enum tree_code) (field_type)->common.code) == ARRAY_TYPE || ((enum tree_code) (field_type)->common.code) == RECORD_TYPE || ((enum tree_code) (field_type)->common.code) == UNION_TYPE || ((enum tree_code) (field_type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (field_type)->common.code) == SET_TYPE))
 return (tree) ((void *)0);
      goto found;
    }
  if (!tail_array_field)
    return (tree) ((void *)0);
  f = tail_array_field;
  field_type = ((f)->common.type);
 found:
  if (base_is_ptr)
    base = build1_stat (INDIRECT_REF,record_type,base );
  base = build (COMPONENT_REF, field_type, base, f, (tree) ((void *)0));
  t = maybe_fold_offset_to_array_ref (base, offset, orig_type);
  if (t)
    return t;
  return maybe_fold_offset_to_component_ref (field_type, base, offset,
          orig_type, 0);
}
static tree
maybe_fold_stmt_indirect (tree expr, tree base, tree offset)
{
  tree t;
  base = fold (base);
  while ((((enum tree_code) (base)->common.code) == NOP_EXPR || ((enum tree_code) (base)->common.code) == CONVERT_EXPR || ((enum tree_code) (base)->common.code) == NON_LVALUE_EXPR) && ((base)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((base)->common.type))->type.mode) == ((((((base)->exp.operands[0]))->common.type))->type.mode))) (base) = ((base)->exp.operands[0]);
  ((expr)->exp.operands[0]) = base;
  t = fold_read_from_constant_string (expr);
  if (t)
    return t;
  if (((enum tree_code) (base)->common.code) == PLUS_EXPR)
    {
      tree offset2;
      offset2 = ((base)->exp.operands[1]);
      if (((enum tree_code) (offset2)->common.code) != INTEGER_CST)
 return (tree) ((void *)0);
      base = ((base)->exp.operands[0]);
      offset = int_const_binop (PLUS_EXPR, offset, offset2, 1);
    }
  if (((enum tree_code) (base)->common.code) == ADDR_EXPR)
    {
      base = ((base)->exp.operands[0]);
      t = maybe_fold_offset_to_array_ref (base, offset, ((expr)->common.type));
      if (t)
 return t;
      t = maybe_fold_offset_to_component_ref (((base)->common.type), base, offset,
           ((expr)->common.type), 0);
      if (t)
 return t;
      if (integer_zerop (offset)
   && lang_hooks.types_compatible_p (((base)->common.type),
         ((expr)->common.type)))
 return base;
    }
  else
    {
      t = base;
      while ((((enum tree_code) (t)->common.code) == NOP_EXPR || ((enum tree_code) (t)->common.code) == CONVERT_EXPR || ((enum tree_code) (t)->common.code) == NON_LVALUE_EXPR) && ((t)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((t)->common.type))->type.mode) == ((((((t)->exp.operands[0]))->common.type))->type.mode))) (t) = ((t)->exp.operands[0]);
      if (((enum tree_code) (t)->common.code) == ADDR_EXPR
   && ((enum tree_code) (((t)->exp.operands[0]))->common.code) == STRING_CST)
 {
   return global_trees[TI_INTEGER_ZERO];
 }
      if ((((enum tree_code) (((base)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((base)->common.type))->common.code) == REFERENCE_TYPE))
 {
          t = maybe_fold_offset_to_component_ref (((((base)->common.type))->common.type),
        base, offset,
        ((expr)->common.type), 1);
   if (t)
     return t;
 }
    }
  return (tree) ((void *)0);
}
static tree
maybe_fold_stmt_addition (tree expr)
{
  tree op0 = ((expr)->exp.operands[0]);
  tree op1 = ((expr)->exp.operands[1]);
  tree ptr_type = ((expr)->common.type);
  tree ptd_type;
  tree t;
  unsigned char subtract = (((enum tree_code) (expr)->common.code) == MINUS_EXPR);
  if (!(((enum tree_code) (ptr_type)->common.code) == POINTER_TYPE || ((enum tree_code) (ptr_type)->common.code) == REFERENCE_TYPE))
    return (tree) ((void *)0);
  if ((((enum tree_code) (((op0)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((op0)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((op0)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((op0)->common.type))->common.code) == CHAR_TYPE))
    {
      if (subtract)
 return (tree) ((void *)0);
      t = op0, op0 = op1, op1 = t;
    }
  if (((enum tree_code) (op1)->common.code) != INTEGER_CST)
    return (tree) ((void *)0);
  if (((enum tree_code) (op0)->common.code) != ADDR_EXPR)
    return (tree) ((void *)0);
  op0 = ((op0)->exp.operands[0]);
  while (((enum tree_code) (op0)->common.code) == ARRAY_REF)
    {
      tree array_obj = ((op0)->exp.operands[0]);
      tree array_idx = ((op0)->exp.operands[1]);
      tree elt_type = ((op0)->common.type);
      tree elt_size = ((elt_type)->type.size_unit);
      tree min_idx;
      if (((enum tree_code) (array_idx)->common.code) != INTEGER_CST)
 break;
      if (((enum tree_code) (elt_size)->common.code) != INTEGER_CST)
 break;
      min_idx = ((((array_obj)->common.type))->type.values);
      if (min_idx)
 {
   min_idx = ((min_idx)->type.minval);
   if (min_idx)
     {
       if (((enum tree_code) (min_idx)->common.code) != INTEGER_CST)
  break;
       array_idx = convert (((min_idx)->common.type), array_idx);
       if (!integer_zerop (min_idx))
  array_idx = int_const_binop (MINUS_EXPR, array_idx,
          min_idx, 0);
     }
 }
      array_idx = convert (sizetype_tab[(int) SIZETYPE], array_idx);
      array_idx = int_const_binop (MULT_EXPR, array_idx, elt_size, 0);
      if (subtract
   && ((((op1)->common.type))->common.unsigned_flag)
   && tree_int_cst_lt (array_idx, op1))
 return ((void *)0);
      op1 = int_const_binop (subtract ? MINUS_EXPR : PLUS_EXPR,
        array_idx, op1, 0);
      subtract = 0;
      op0 = array_obj;
    }
  if (subtract)
    {
      if (((((op1)->common.type))->common.unsigned_flag))
 return ((void *)0);
      op1 = fold (build1_stat (NEGATE_EXPR,((op1)->common.type),op1 ));
      if (((enum tree_code) (op1)->common.code) != INTEGER_CST)
 return ((void *)0);
    }
  ptd_type = ((ptr_type)->common.type);
  t = maybe_fold_offset_to_array_ref (op0, op1, ptd_type);
  if (!t)
    t = maybe_fold_offset_to_component_ref (((op0)->common.type), op0, op1,
         ptd_type, 0);
  if (t)
    t = build1_stat (ADDR_EXPR,ptr_type,t );
  return t;
}
static tree
fold_stmt_r (tree *expr_p, int *walk_subtrees, void *data)
{
  unsigned char *changed_p = data;
  tree expr = *expr_p, t;
  switch (((enum tree_code) (expr)->common.code))
    {
    case INDIRECT_REF:
      t = walk_tree (&((expr)->exp.operands[0]), fold_stmt_r, data, ((void *)0));
      if (t)
 return t;
      *walk_subtrees = 0;
      t = maybe_fold_stmt_indirect (expr, ((expr)->exp.operands[0]),
        global_trees[TI_INTEGER_ZERO]);
      break;
    case ADDR_EXPR:
      t = walk_tree (&((expr)->exp.operands[0]), fold_stmt_r, data, ((void *)0));
      if (t)
 return t;
      *walk_subtrees = 0;
      if (*changed_p)
        recompute_tree_invarant_for_addr_expr (expr);
      return (tree) ((void *)0);
    case PLUS_EXPR:
    case MINUS_EXPR:
      t = walk_tree (&((expr)->exp.operands[0]), fold_stmt_r, data, ((void *)0));
      if (t)
 return t;
      t = walk_tree (&((expr)->exp.operands[1]), fold_stmt_r, data, ((void *)0));
      if (t)
 return t;
      *walk_subtrees = 0;
      t = maybe_fold_stmt_addition (expr);
      break;
    case COMPONENT_REF:
      t = walk_tree (&((expr)->exp.operands[0]), fold_stmt_r, data, ((void *)0));
      if (t)
        return t;
      *walk_subtrees = 0;
      if ((current_file_decl && ((current_file_decl)->common.chain))
        && (((((expr)->exp.operands[1]))->decl.context) !=
            ((((expr)->exp.operands[0]))->common.type)))
        {
          tree f;
          tree orig_field = ((expr)->exp.operands[1]);
          tree orig_type = ((orig_field)->common.type);
          for (f = ((((((expr)->exp.operands[0]))->common.type))->type.values);
              f; f = ((f)->common.chain))
            {
              if (lang_hooks.types_compatible_p (((f)->common.type), orig_type)
                  && tree_int_cst_compare (((f)->decl.u2.t),
                                          ((orig_field)->decl.u2.t))
                      == 0
                  && tree_int_cst_compare (((f)->decl.arguments),
                                          ((orig_field)->decl.arguments))
                      == 0)
                {
                  ((expr)->exp.operands[1]) = f;
                  break;
                }
            }
        }
      break;
    default:
      return (tree) ((void *)0);
    }
  if (t)
    {
      *expr_p = t;
      *changed_p = 1;
    }
  return (tree) ((void *)0);
}
unsigned char
fold_stmt (tree *stmt_p)
{
  tree rhs, result, stmt;
  unsigned char changed = 0;
  stmt = *stmt_p;
  if (walk_tree (stmt_p, fold_stmt_r, &changed, ((void *)0)))
    {
      *stmt_p
 = build_function_call_expr (implicit_built_in_decls[BUILT_IN_TRAP],
        ((void *)0));
      return 1;
    }
  rhs = get_rhs (stmt);
  if (!rhs)
    return changed;
  result = (tree) ((void *)0);
  if (((enum tree_code) (rhs)->common.code) == CALL_EXPR)
    {
      tree callee;
      callee = get_callee_fndecl (rhs);
      if (callee && (((callee)->decl.built_in_class) != NOT_BUILT_IN))
 result = ccp_fold_builtin (stmt, rhs);
      else
 {
   callee = ((rhs)->exp.operands[0]);
   if (((enum tree_code) (callee)->common.code) == OBJ_TYPE_REF
       && lang_hooks.fold_obj_type_ref
       && ((enum tree_code) ((((callee))->exp.operands[1]))->common.code) == ADDR_EXPR
       && (tree_code_type[(int) (((enum tree_code) ((((((callee))->exp.operands[1]))->exp.operands[0]))->common.code))] == 'd'))
     {
       tree t;
       t = (((((((callee))->exp.operands[1]))->exp.operands[0]))->common.type);
       t = lang_hooks.fold_obj_type_ref (callee, t);
       if (t)
  {
    ((rhs)->exp.operands[0]) = t;
    changed = 1;
  }
     }
 }
    }
  if (result == (tree) ((void *)0))
    result = fold (rhs);
  while (tree_ssa_useless_type_conversion (result)) result = ((result)->exp.operands[0]);
  if (result != rhs)
    changed |= set_rhs (stmt_p, result);
  return changed;
}
static tree
get_rhs (tree stmt)
{
  enum tree_code code = ((enum tree_code) (stmt)->common.code);
  if (code == MODIFY_EXPR)
    return ((stmt)->exp.operands[1]);
  if (code == COND_EXPR)
    return ((((stmt))->exp.operands[0]));
  else if (code == SWITCH_EXPR)
    return (((stmt))->exp.operands[0]);
  else if (code == RETURN_EXPR)
    {
      if (!((stmt)->exp.operands[0]))
 return (tree) ((void *)0);
      if (((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == MODIFY_EXPR)
 return ((((stmt)->exp.operands[0]))->exp.operands[1]);
      else
 return ((stmt)->exp.operands[0]);
    }
  else if (code == GOTO_EXPR)
    return (((stmt))->exp.operands[0]);
  else if (code == LABEL_EXPR)
    return (((stmt))->exp.operands[0]);
  else
    return stmt;
}
static unsigned char
set_rhs (tree *stmt_p, tree expr)
{
  tree stmt = *stmt_p;
  enum tree_code code = ((enum tree_code) (expr)->common.code);
  if (tree_code_type[(int) (code)] == '2')
    {
      if (!is_gimple_val (((expr)->exp.operands[0]))
   || !is_gimple_val (((expr)->exp.operands[1])))
 return 0;
    }
  else if (tree_code_type[(int) (code)] == '1')
    {
      if (!is_gimple_val (((expr)->exp.operands[0])))
 return 0;
    }
  code = ((enum tree_code) (stmt)->common.code);
  if (code == MODIFY_EXPR)
    ((stmt)->exp.operands[1]) = expr;
  else if (code == COND_EXPR)
    ((((stmt))->exp.operands[0])) = expr;
  else if (code == SWITCH_EXPR)
    (((stmt))->exp.operands[0]) = expr;
  else if (code == RETURN_EXPR)
    {
      if (((stmt)->exp.operands[0])
   && ((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == MODIFY_EXPR)
 ((((stmt)->exp.operands[0]))->exp.operands[1]) = expr;
      else
 ((stmt)->exp.operands[0]) = expr;
    }
  else if (code == GOTO_EXPR)
    (((stmt))->exp.operands[0]) = expr;
  else if (code == LABEL_EXPR)
    (((stmt))->exp.operands[0]) = expr;
  else
    {
      stmt_ann_t ann = stmt_ann (stmt);
      *stmt_p = ((expr)->common.side_effects_flag) ? expr : build_empty_stmt ();
      (*stmt_p)->common.ann = (tree_ann_t) ann;
      if (((expr)->common.side_effects_flag))
 {
   def_optype defs;
   v_may_def_optype v_may_defs;
   v_must_def_optype v_must_defs;
   size_t i;
   defs = get_def_ops (ann);
   for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
     {
       tree var = (get_def_from_ptr (get_def_op_ptr (((defs)), ((i)))));
       if (((enum tree_code) (var)->common.code) == SSA_NAME)
  (var)->common.chain = *stmt_p;
     }
   v_may_defs = get_v_may_def_ops (ann);
   for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
     {
       tree var = (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i)))));
       if (((enum tree_code) (var)->common.code) == SSA_NAME)
  (var)->common.chain = *stmt_p;
     }
   v_must_defs = get_v_must_def_ops (ann);
   for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
     {
       tree var = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i)))));
       if (((enum tree_code) (var)->common.code) == SSA_NAME)
  (var)->common.chain = *stmt_p;
     }
 }
    }
  return 1;
}
static value
get_default_value (tree var)
{
  value val;
  tree sym;
  if (((enum tree_code) (var)->common.code) == SSA_NAME)
    sym = (var)->ssa_name.var;
  else
    {
      sym = var;
    }
  val.lattice_val = UNDEFINED;
  val.const_val = (tree) ((void *)0);
  if (((enum tree_code) (sym)->common.code) == PARM_DECL || ((sym)->common.volatile_flag))
    {
      val.lattice_val = VARYING;
    }
  else if (decl_function_context (sym) != current_function_decl
           || ((sym)->common.static_flag))
    {
      val.lattice_val = VARYING;
      if (((sym)->common.readonly_flag)
   && ((sym)->decl.initial)
   && is_gimple_min_invariant (((sym)->decl.initial)))
 {
   val.lattice_val = CONSTANT;
   val.const_val = ((sym)->decl.initial);
 }
    }
  else
    {
      enum tree_code code;
      tree stmt = (var)->common.chain;
      if (!(((enum tree_code) (stmt)->common.code) == NOP_EXPR && (((enum tree_code) (((stmt)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((stmt)->exp.operands[0]))))
        {
   code = ((enum tree_code) (stmt)->common.code);
   if (code != MODIFY_EXPR && code != PHI_NODE)
     val.lattice_val = VARYING;
 }
    }
  return val;
}
static tree
ccp_fold_builtin (tree stmt, tree fn)
{
  tree result, strlen_val[2];
  tree arglist = ((fn)->exp.operands[1]), a;
  tree callee = get_callee_fndecl (fn);
  bitmap visited;
  int strlen_arg, i;
  if (((callee)->decl.built_in_class) == BUILT_IN_MD)
    return (tree) ((void *)0);
  result = fold_builtin (fn);
  if (result)
    return result;
  if (!arglist)
    return (tree) ((void *)0);
  switch (((callee)->decl.u1.f))
    {
    case BUILT_IN_STRLEN:
    case BUILT_IN_FPUTS:
    case BUILT_IN_FPUTS_UNLOCKED:
      strlen_arg = 1;
      break;
    case BUILT_IN_STRCPY:
    case BUILT_IN_STRNCPY:
      strlen_arg = 2;
      break;
    default:
      return (tree) ((void *)0);
    }
  visited = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  memset (strlen_val, 0, sizeof (strlen_val));
  for (i = 0, a = arglist;
       strlen_arg;
       i++, strlen_arg >>= 1, a = ((a)->common.chain))
    if (strlen_arg & 1)
      {
 bitmap_clear (visited);
 if (!get_strlen (((a)->list.value1), &strlen_val[i], visited))
   strlen_val[i] = (tree) ((void *)0);
      }
  do { if (visited) { bitmap_clear (visited); free (visited); (visited) = 0; } } while (0);
  switch (((callee)->decl.u1.f))
    {
    case BUILT_IN_STRLEN:
      if (strlen_val[0]
   && global_trees[TI_SIZE_TYPE])
 {
   tree new = convert (global_trees[TI_SIZE_TYPE], strlen_val[0]);
   if (is_gimple_val (new)
       || (is_gimple_cast (new)
    && is_gimple_val (((new)->exp.operands[0]))))
     return new;
   else
     return (tree) ((void *)0);
 }
      return strlen_val[0];
    case BUILT_IN_STRCPY:
      if (strlen_val[1]
   && is_gimple_val (strlen_val[1]))
      return simplify_builtin_strcpy (arglist, strlen_val[1]);
    case BUILT_IN_STRNCPY:
      if (strlen_val[1]
   && is_gimple_val (strlen_val[1]))
      return simplify_builtin_strncpy (arglist, strlen_val[1]);
    case BUILT_IN_FPUTS:
      return simplify_builtin_fputs (arglist,
         ((enum tree_code) (stmt)->common.code) != MODIFY_EXPR, 0,
         strlen_val[0]);
    case BUILT_IN_FPUTS_UNLOCKED:
      return simplify_builtin_fputs (arglist,
         ((enum tree_code) (stmt)->common.code) != MODIFY_EXPR, 1,
         strlen_val[0]);
    default:
      fancy_abort ("gcc.c", 127919, "?");
    }
  return (tree) ((void *)0);
}
static unsigned char
get_strlen (tree arg, tree *length, bitmap visited)
{
  tree var, def_stmt, val;
  if (((enum tree_code) (arg)->common.code) != SSA_NAME)
    {
      val = c_strlen (arg, 1);
      if (!val)
 return 0;
      if (*length && simple_cst_equal (val, *length) != 1)
 return 0;
      *length = val;
      return 1;
    }
  if (bitmap_bit_p (visited, (arg)->ssa_name.version))
    return 1;
  bitmap_set_bit (visited, (arg)->ssa_name.version);
  var = arg;
  def_stmt = (var)->common.chain;
  switch (((enum tree_code) (def_stmt)->common.code))
    {
      case MODIFY_EXPR:
 {
   tree len, rhs;
   rhs = ((def_stmt)->exp.operands[1]);
   while ((((enum tree_code) (rhs)->common.code) == NOP_EXPR || ((enum tree_code) (rhs)->common.code) == CONVERT_EXPR || ((enum tree_code) (rhs)->common.code) == NON_LVALUE_EXPR) && ((rhs)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((rhs)->common.type))->type.mode) == ((((((rhs)->exp.operands[0]))->common.type))->type.mode))) (rhs) = ((rhs)->exp.operands[0]);
   if (((enum tree_code) (rhs)->common.code) == SSA_NAME)
     return get_strlen (rhs, length, visited);
   len = c_strlen (rhs, 1);
   if (len)
     {
       if (*length && simple_cst_equal (len, *length) != 1)
  return 0;
       *length = len;
       return 1;
     }
   break;
 }
      case PHI_NODE:
 {
   int i;
   for (i = 0; i < (def_stmt)->phi.num_args; i++)
     {
       tree arg = get_use_from_ptr (get_phi_arg_def_ptr (((def_stmt)), ((i))));
       if (arg == get_def_from_ptr (get_phi_result_ptr (def_stmt)))
  continue;
       if (!get_strlen (arg, length, visited))
  return 0;
     }
   return 1;
 }
      default:
 break;
    }
  return 0;
}
static void
execute_fold_all_builtins (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      block_stmt_iterator i;
      for (i = bsi_start (bb); !bsi_end_p (i); bsi_next (&i))
 {
   tree *stmtp = bsi_stmt_ptr (i);
   tree call = get_rhs (*stmtp);
   tree callee, result;
   if (!call || ((enum tree_code) (call)->common.code) != CALL_EXPR)
     continue;
   callee = get_callee_fndecl (call);
   if (!callee || ((callee)->decl.built_in_class) != BUILT_IN_NORMAL)
     continue;
   result = ccp_fold_builtin (*stmtp, call);
   if (!result)
     switch (((callee)->decl.u1.f))
       {
       case BUILT_IN_CONSTANT_P:
  result = global_trees[TI_INTEGER_ZERO];
  break;
       default:
  continue;
       }
   if (dump_file && (dump_flags & (1 << 3)))
     {
       fprintf (dump_file, "Simplified\n  ");
       print_generic_stmt (dump_file, *stmtp, dump_flags);
     }
   if (set_rhs (stmtp, result))
     modify_stmt (*stmtp);
   if (dump_file && (dump_flags & (1 << 3)))
     {
       fprintf (dump_file, "to\n  ");
       print_generic_stmt (dump_file, *stmtp, dump_flags);
       fprintf (dump_file, "\n");
     }
 }
    }
}
struct tree_opt_pass pass_fold_builtins =
{
  "fab",
  ((void *)0),
  execute_fold_all_builtins,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 3)
};
const struct ggc_root_tab gt_ggc_r_gt_tree_ssa_ccp_h[] = {
  {
    &varying_ssa_edges,
    1,
    sizeof (varying_ssa_edges),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &ssa_edges,
    1,
    sizeof (ssa_edges),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &cfg_blocks,
    1,
    sizeof (cfg_blocks),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static htab_t value_table;
typedef struct val_expr_pair_d
{
  tree v;
  tree e;
  vuse_optype vuses;
  hashval_t hashcode;
} *val_expr_pair_t;
static void set_value_handle (tree e, tree v);
static tree
make_value_handle (tree type)
{
  static unsigned int id = 0;
  tree vh;
  vh = build0_stat (VALUE_HANDLE,type );
  ((vh)->value_handle.id) = id++;
  return vh;
}
hashval_t
vn_compute (tree expr, hashval_t val, vuse_optype vuses)
{
  size_t i;
  val = iterative_hash_expr (expr, val);
  for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
    val = iterative_hash_expr ((get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((i))))), val);
  return val;
}
unsigned char
expressions_equal_p (tree e1, tree e2)
{
  tree te1, te2;
  if (e1 == e2)
    return 1;
  te1 = ((e1)->common.type);
  te2 = ((e2)->common.type);
  if (((enum tree_code) (e1)->common.code) == ((enum tree_code) (e2)->common.code)
      && (te1 == te2 || lang_hooks.types_compatible_p (te1, te2))
      && operand_equal_p (e1, e2, OEP_PURE_SAME))
    return 1;
  return 0;
}
static hashval_t
val_expr_pair_hash (const void *p)
{
  const val_expr_pair_t ve = (val_expr_pair_t) p;
  return ve->hashcode;
}
static int
val_expr_pair_expr_eq (const void *p1, const void *p2)
{
  const val_expr_pair_t ve1 = (val_expr_pair_t) p1;
  const val_expr_pair_t ve2 = (val_expr_pair_t) p2;
  if (expressions_equal_p (ve1->e, ve2->e))
    return 1;
  return 0;
}
static void
set_value_handle (tree e, tree v)
{
  if (((enum tree_code) (e)->common.code) == SSA_NAME)
    (e)->ssa_name.value_handle = v;
  else if ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (e)->common.code))])) != 0) || (tree_code_type[(int) (((enum tree_code) (e)->common.code))] == 'd'))
    get_tree_ann (e)->common.value_handle = v;
  else if (is_gimple_min_invariant (e))
    ;
  else
    fancy_abort ("gcc.c", 128304, "?");
}
void
vn_add (tree expr, tree val, vuse_optype vuses)
{
  void **slot;
  val_expr_pair_t new_pair;
  new_pair = xmalloc (sizeof (struct val_expr_pair_d));
  new_pair->e = expr;
  new_pair->v = val;
  new_pair->vuses = vuses;
  new_pair->hashcode = vn_compute (expr, 0, vuses);
  slot = htab_find_slot_with_hash (value_table, new_pair, new_pair->hashcode,
       INSERT);
  if (*slot)
    free (*slot);
  *slot = (void *) new_pair;
  set_value_handle (expr, val);
  add_to_value (val, expr);
}
tree
vn_lookup (tree expr, vuse_optype vuses)
{
  void **slot;
  struct val_expr_pair_d vep = {((void *)0), ((void *)0), ((void *)0), 0};
  if (is_gimple_min_invariant (expr))
    return expr;
  vep.e = expr;
  vep.vuses = vuses;
  vep.hashcode = vn_compute (expr, 0, vuses);
  slot = htab_find_slot_with_hash (value_table, &vep, vep.hashcode, NO_INSERT);
  if (!slot)
    return (tree) ((void *)0);
  else
    return ((val_expr_pair_t) *slot)->v;
}
tree
vn_lookup_or_add (tree expr, vuse_optype vuses)
{
  tree v = vn_lookup (expr, vuses);
  if (v == (tree) ((void *)0))
    {
      v = make_value_handle (((expr)->common.type));
      if (dump_file && (dump_flags & (1 << 3)))
 {
   fprintf (dump_file, "Created value ");
   print_generic_expr (dump_file, v, dump_flags);
   fprintf (dump_file, " for ");
   print_generic_expr (dump_file, expr, dump_flags);
   fprintf (dump_file, "\n");
 }
      vn_add (expr, v, vuses);
    }
  set_value_handle (expr, v);
  return v;
}
tree
get_value_handle (tree expr)
{
  if (((enum tree_code) (expr)->common.code) == SSA_NAME)
    return (expr)->ssa_name.value_handle;
  else if ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (expr)->common.code))])) != 0) || (tree_code_type[(int) (((enum tree_code) (expr)->common.code))] == 'd'))
    {
      tree_ann_t ann = tree_ann (expr);
      return ((ann) ? ann->common.value_handle : (tree) ((void *)0));
    }
  else if (is_gimple_min_invariant (expr))
    return expr;
  fancy_abort ("gcc.c", 128410, "?");
}
void
vn_init (void)
{
  value_table = htab_create (511, val_expr_pair_hash,
        val_expr_pair_expr_eq, free);
}
void
vn_delete (void)
{
  htab_delete (value_table);
  value_table = ((void *)0);
}
static struct stmt_stats
{
  int total;
  int total_phis;
  int removed;
  int removed_phis;
} stats;
static varray_type worklist;
static sbitmap processed;
static sbitmap last_stmt_necessary;
bitmap *control_dependence_map;
static void set_control_dependence_map_bit (basic_block, int);
static void clear_control_dependence_bitmap (basic_block);
static void find_all_control_dependences (struct edge_list *);
static void find_control_dependence (struct edge_list *, int);
static basic_block find_pdom (basic_block);
static void mark_stmt_necessary (tree, unsigned char);
static void mark_operand_necessary (tree);
static unsigned char need_to_preserve_store (tree);
static void mark_stmt_if_obviously_necessary (tree, unsigned char);
static void find_obviously_necessary_stmts (struct edge_list *);
static void mark_control_dependent_edges_necessary (basic_block, struct edge_list *);
static void propagate_necessity (struct edge_list *);
static void eliminate_unnecessary_stmts (void);
static void remove_dead_phis (basic_block);
static void remove_dead_stmt (block_stmt_iterator *, basic_block);
static void print_stats (void);
static void tree_dce_init (unsigned char);
static void tree_dce_done (unsigned char);
static void
set_control_dependence_map_bit (basic_block bb, int edge_index)
{
  if (bb == ENTRY_BLOCK_PTR)
    return;
  if (bb == EXIT_BLOCK_PTR)
    fancy_abort ("gcc.c", 128545, "?");
  bitmap_set_bit (control_dependence_map[bb->index], edge_index);
}
static
void clear_control_dependence_bitmap (basic_block bb)
{
  bitmap_clear (control_dependence_map[bb->index]);
}
static void
find_all_control_dependences (struct edge_list *el)
{
  int i;
  for (i = 0; i < ((el)->num_edges); ++i)
    find_control_dependence (el, i);
}
static void
find_control_dependence (struct edge_list *el, int edge_index)
{
  basic_block current_block;
  basic_block ending_block;
  if (((el)->index_to_edge[(edge_index)]->src) == ENTRY_BLOCK_PTR)
    ending_block = ENTRY_BLOCK_PTR->next_bb;
  else
    ending_block = find_pdom (((el)->index_to_edge[(edge_index)]->src));
  for (current_block = ((el)->index_to_edge[(edge_index)]->dest);
       current_block != ending_block && current_block != EXIT_BLOCK_PTR;
       current_block = find_pdom (current_block))
    {
      edge e = ((el)->index_to_edge[(edge_index)]);
      if (e->flags & 2)
 continue;
      set_control_dependence_map_bit (current_block, edge_index);
    }
}
static basic_block
find_pdom (basic_block block)
{
  if (block == ENTRY_BLOCK_PTR)
    fancy_abort ("gcc.c", 128610, "?");
  else if (block == EXIT_BLOCK_PTR)
    return EXIT_BLOCK_PTR;
  else
    {
      basic_block bb = get_immediate_dominator (CDI_POST_DOMINATORS, block);
      if (! bb)
 return EXIT_BLOCK_PTR;
      return bb;
    }
}
static void
mark_stmt_necessary (tree stmt, unsigned char add_to_worklist)
{
  if (stmt->common.asm_written_flag)
    return;
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "Marking useful stmt: ");
      print_generic_stmt (dump_file, stmt, (1 << 1));
      fprintf (dump_file, "\n");
    }
  stmt->common.asm_written_flag = 1;
  if (add_to_worklist)
    do { if ((worklist)->elements_used >= (worklist)->num_elements) (((worklist)) = varray_grow ((worklist), 2 * (worklist)->num_elements)); (worklist)->data.tree1[(worklist)->elements_used++] = (stmt); } while (0);
}
static void
mark_operand_necessary (tree op)
{
  tree stmt;
  int ver;
  ver = (op)->ssa_name.version;
  if (((processed)->elms [(ver) / ((unsigned) (8 * 4))] >> (ver) % ((unsigned) (8 * 4)) & 1))
    return;
  ((processed)->elms [(ver) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (ver) % ((unsigned) (8 * 4)));
  stmt = (op)->common.chain;
  if (stmt->common.asm_written_flag
      || (((enum tree_code) (stmt)->common.code) == NOP_EXPR && (((enum tree_code) (((stmt)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((stmt)->exp.operands[0]))))
    return;
  stmt->common.asm_written_flag = 1;
  do { if ((worklist)->elements_used >= (worklist)->num_elements) (((worklist)) = varray_grow ((worklist), 2 * (worklist)->num_elements)); (worklist)->data.tree1[(worklist)->elements_used++] = (stmt); } while (0);
}
static unsigned char
need_to_preserve_store (tree ssa_name)
{
  return (needs_to_live_in_memory ((ssa_name)->ssa_name.var));
}
static void
mark_stmt_if_obviously_necessary (tree stmt, unsigned char aggressive)
{
  def_optype defs;
  v_may_def_optype v_may_defs;
  v_must_def_optype v_must_defs;
  stmt_ann_t ann;
  size_t i;
  switch (((enum tree_code) (stmt)->common.code))
    {
    case BIND_EXPR:
    case LABEL_EXPR:
    case CASE_LABEL_EXPR:
      mark_stmt_necessary (stmt, 0);
      return;
    case ASM_EXPR:
    case RESX_EXPR:
    case RETURN_EXPR:
      mark_stmt_necessary (stmt, 1);
      return;
    case CALL_EXPR:
      if (((stmt)->common.side_effects_flag))
 mark_stmt_necessary (stmt, 1);
      return;
    case MODIFY_EXPR:
      if (((enum tree_code) (((stmt)->exp.operands[1]))->common.code) == CALL_EXPR
   && ((((stmt)->exp.operands[1]))->common.side_effects_flag))
 {
   mark_stmt_necessary (stmt, 1);
   return;
 }
      if (((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == EXC_PTR_EXPR
   || ((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == FILTER_EXPR)
 {
   mark_stmt_necessary (stmt, 1);
   return;
 }
      break;
    case GOTO_EXPR:
      if (! simple_goto_p (stmt))
 mark_stmt_necessary (stmt, 1);
      return;
    case COND_EXPR:
      if ((((((((stmt))->exp.operands[1]))))->exp.operands[0])
   == (((((((stmt))->exp.operands[2]))))->exp.operands[0]))
 {
   ((((stmt))->exp.operands[0])) = global_trees[TI_INTEGER_ZERO];
   modify_stmt (stmt);
   return;
 }
    case SWITCH_EXPR:
      if (! aggressive)
 mark_stmt_necessary (stmt, 1);
      break;
    default:
      break;
    }
  ann = stmt_ann (stmt);
  if (ann->has_volatile_ops
      || is_ctrl_altering_stmt (stmt))
    {
      mark_stmt_necessary (stmt, 1);
      return;
    }
  get_stmt_operands (stmt);
  defs = get_def_ops (ann);
  for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
    {
      tree def = (get_def_from_ptr (get_def_op_ptr (((defs)), ((i)))));
      if (need_to_preserve_store (def))
 {
   mark_stmt_necessary (stmt, 1);
   return;
        }
    }
  v_may_defs = get_v_may_def_ops (ann);
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      tree v_may_def = (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i)))));
      if (need_to_preserve_store (v_may_def))
 {
   mark_stmt_necessary (stmt, 1);
   return;
        }
    }
  v_must_defs = get_v_must_def_ops (ann);
  for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
    {
      tree v_must_def = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i)))));
      if (need_to_preserve_store (v_must_def))
 {
   mark_stmt_necessary (stmt, 1);
   return;
        }
    }
  return;
}
static void
find_obviously_necessary_stmts (struct edge_list *el)
{
  basic_block bb;
  block_stmt_iterator i;
  edge e;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree phi;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 {
   phi->common.asm_written_flag = 0;
   if (is_gimple_reg (get_def_from_ptr (get_phi_result_ptr (phi)))
       && need_to_preserve_store (get_def_from_ptr (get_phi_result_ptr (phi))))
     mark_stmt_necessary (phi, 1);
        }
      for (i = bsi_start (bb); ! bsi_end_p (i); bsi_next (&i))
 {
   tree stmt = bsi_stmt (i);
   stmt->common.asm_written_flag = 0;
   mark_stmt_if_obviously_necessary (stmt, el != ((void *)0));
 }
      bb->flags &= ~8;
    }
  if (el)
    {
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   for (e = bb->succ; e; e = e->succ_next)
     if (e->flags & 32)
       mark_control_dependent_edges_necessary (e->dest, el);
 }
    }
}
static void
mark_control_dependent_edges_necessary (basic_block bb, struct edge_list *el)
{
  int edge_number;
  if (bb == ENTRY_BLOCK_PTR)
    return;
  do { bitmap_element *ptr_ = (control_dependence_map[bb->index])->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (edge_number) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { tree t; basic_block cd_bb = ((el)->index_to_edge[(edge_number)]->src); if (((last_stmt_necessary)->elms [(cd_bb->index) / ((unsigned) (8 * 4))] >> (cd_bb->index) % ((unsigned) (8 * 4)) & 1)) continue; ((last_stmt_necessary)->elms [(cd_bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (cd_bb->index) % ((unsigned) (8 * 4))); t = last_stmt (cd_bb); if (t && is_ctrl_stmt (t)) mark_stmt_necessary (t, 1); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
}
static void
propagate_necessity (struct edge_list *el)
{
  tree i;
  unsigned char aggressive = (el ? 1 : 0);
  if (dump_file && (dump_flags & (1 << 3)))
    fprintf (dump_file, "\nProcessing worklist:\n");
  while (((worklist)->elements_used) > 0)
    {
      i = ((worklist)->data.tree1[(worklist)->elements_used - 1]);
      do { ((worklist)->elements_used--); } while (0);
      if (dump_file && (dump_flags & (1 << 3)))
 {
   fprintf (dump_file, "processing: ");
   print_generic_stmt (dump_file, i, (1 << 1));
   fprintf (dump_file, "\n");
 }
      if (aggressive)
 {
   basic_block bb = bb_for_stmt (i);
   if (! (bb->flags & 8))
     {
       bb->flags |= 8;
       mark_control_dependent_edges_necessary (bb, el);
     }
 }
      if (((enum tree_code) (i)->common.code) == PHI_NODE)
 {
   int k;
   for (k = 0; k < (i)->phi.num_args; k++)
            {
       tree arg = get_use_from_ptr (get_phi_arg_def_ptr (((i)), ((k))));
       if (((enum tree_code) (arg)->common.code) == SSA_NAME)
  mark_operand_necessary (arg);
     }
   if (aggressive)
     {
       for (k = 0; k < (i)->phi.num_args; k++)
  {
    basic_block arg_bb = ((i)->phi.a[k]).e->src;
    if (! (arg_bb->flags & 8))
      {
        arg_bb->flags |= 8;
        mark_control_dependent_edges_necessary (arg_bb, el);
      }
  }
     }
 }
      else
 {
   vuse_optype vuses;
   v_may_def_optype v_may_defs;
   use_optype uses;
   stmt_ann_t ann;
   size_t k;
   get_stmt_operands (i);
   ann = stmt_ann (i);
   uses = get_use_ops (ann);
   for (k = 0; k < ((uses) ? (uses)->num_uses : 0); k++)
     mark_operand_necessary ((get_use_from_ptr (get_use_op_ptr (((uses)), ((k))))));
   vuses = get_vuse_ops (ann);
   for (k = 0; k < ((vuses) ? (vuses)->num_vuses : 0); k++)
     mark_operand_necessary ((get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((k))))));
   v_may_defs = get_v_may_def_ops (ann);
   for (k = 0; k < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); k++)
     mark_operand_necessary ((get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((k))))));
 }
    }
}
static void
eliminate_unnecessary_stmts (void)
{
  basic_block bb;
  block_stmt_iterator i;
  if (dump_file && (dump_flags & (1 << 3)))
    fprintf (dump_file, "\nEliminating unnecessary statements:\n");
  clear_special_calls ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      remove_dead_phis (bb);
      for (i = bsi_start (bb); ! bsi_end_p (i) ; )
 {
   tree t = bsi_stmt (i);
   stats.total++;
   if (! t->common.asm_written_flag)
     remove_dead_stmt (&i, bb);
   else
     {
       if (((enum tree_code) (t)->common.code) == CALL_EXPR)
  notice_special_calls (t);
       else if (((enum tree_code) (t)->common.code) == MODIFY_EXPR
         && ((enum tree_code) (((t)->exp.operands[1]))->common.code) == CALL_EXPR)
  notice_special_calls (((t)->exp.operands[1]));
       bsi_next (&i);
     }
 }
    }
}
static void
remove_dead_phis (basic_block bb)
{
  tree prev, phi;
  prev = (tree) ((void *)0);
  phi = phi_nodes (bb);
  while (phi)
    {
      stats.total_phis++;
      if (! phi->common.asm_written_flag)
 {
   tree next = (((phi))->common.chain);
   if (dump_file && (dump_flags & (1 << 3)))
     {
       fprintf (dump_file, "Deleting : ");
       print_generic_stmt (dump_file, phi, (1 << 1));
       fprintf (dump_file, "\n");
     }
   remove_phi_node (phi, prev, bb);
   stats.removed_phis++;
   phi = next;
 }
      else
 {
   prev = phi;
   phi = (((phi))->common.chain);
 }
    }
}
static void
remove_dead_stmt (block_stmt_iterator *i, basic_block bb)
{
  tree t = bsi_stmt (*i);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "Deleting : ");
      print_generic_stmt (dump_file, t, (1 << 1));
      fprintf (dump_file, "\n");
    }
  stats.removed++;
  if (is_ctrl_stmt (t))
    {
      basic_block post_dom_bb;
      edge e;
      post_dom_bb = get_immediate_dominator (CDI_POST_DOMINATORS, bb);
      if (! post_dom_bb)
 {
   bsi_next (i);
   return;
 }
      redirect_edge_and_branch (bb->succ, post_dom_bb);
      ((bb->succ)->insns.t) = ((void *)0);
      bb->succ->flags &= ~(1024 | 2048);
      if (post_dom_bb != EXIT_BLOCK_PTR)
 bb->succ->flags |= 1;
      else
 bb->succ->flags &= ~1;
      for (e = bb->succ->succ_next; e != ((void *)0);)
 {
   edge tmp = e;
   e = e->succ_next;
   remove_edge (tmp);
 }
    }
  bsi_remove (i);
}
static void
print_stats (void)
{
  if (dump_file && (dump_flags & ((1 << 4)|(1 << 3))))
    {
      float percg;
      percg = ((float) stats.removed / (float) stats.total) * 100;
      fprintf (dump_file, "Removed %d of %d statements (%d%%)\n",
        stats.removed, stats.total, (int) percg);
      if (stats.total_phis == 0)
 percg = 0;
      else
 percg = ((float) stats.removed_phis / (float) stats.total_phis) * 100;
      fprintf (dump_file, "Removed %d of %d PHI nodes (%d%%)\n",
        stats.removed_phis, stats.total_phis, (int) percg);
    }
}
static void
tree_dce_init (unsigned char aggressive)
{
  memset ((void *) &stats, 0, sizeof (stats));
  if (aggressive)
    {
      int i;
      control_dependence_map
 = xmalloc (last_basic_block * sizeof (bitmap));
      for (i = 0; i < last_basic_block; ++i)
 control_dependence_map[i] = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      last_stmt_necessary = sbitmap_alloc (last_basic_block);
      sbitmap_zero (last_stmt_necessary);
    }
  processed = sbitmap_alloc (((ssa_names)->elements_used) + 1);
  sbitmap_zero (processed);
  worklist = varray_init (64, VARRAY_DATA_TREE, "work list");
}
static void
tree_dce_done (unsigned char aggressive)
{
  if (aggressive)
    {
      int i;
      for (i = 0; i < last_basic_block; ++i)
 do { if (control_dependence_map[i]) { bitmap_clear (control_dependence_map[i]); free (control_dependence_map[i]); (control_dependence_map[i]) = 0; } } while (0);
      free (control_dependence_map);
      free(last_stmt_necessary);
    }
  free(processed);
}
static void
perform_tree_ssa_dce (unsigned char aggressive)
{
  struct edge_list *el = ((void *)0);
  tree_dce_init (aggressive);
  if (aggressive)
    {
      timevar_push (TV_CONTROL_DEPENDENCES);
      calculate_dominance_info (CDI_POST_DOMINATORS);
      el = create_edge_list ();
      find_all_control_dependences (el);
      timevar_pop (TV_CONTROL_DEPENDENCES);
      mark_dfs_back_edges ();
    }
  find_obviously_necessary_stmts (el);
  propagate_necessity (el);
  eliminate_unnecessary_stmts ();
  if (aggressive)
    free_dominance_info (CDI_POST_DOMINATORS);
  cleanup_tree_cfg ();
  if (dump_file)
    {
      dump_function_to_file (current_function_decl, dump_file, dump_flags);
      print_stats ();
    }
  tree_dce_done (aggressive);
  free_edge_list (el);
}
static void
tree_ssa_dce (void)
{
  perform_tree_ssa_dce ( 0);
}
static void
tree_ssa_cd_dce (void)
{
  perform_tree_ssa_dce ( optimize >= 2);
}
static unsigned char
gate_dce (void)
{
  return flag_tree_dce != 0;
}
struct tree_opt_pass pass_dce =
{
  "dce",
  gate_dce,
  tree_ssa_dce,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_DCE,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 2) | (1 << 3)
};
struct tree_opt_pass pass_cd_dce =
{
  "cddce",
  gate_dce,
  tree_ssa_cd_dce,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_CD_DCE,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 2) | (1 << 3) | (1 << 4)
};
static void
replace_ssa_names_ann (tree op,
     tree var,
     unsigned char for_propagation )
{
  if ((((enum tree_code) (((op)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((op)->common.type))->common.code) == REFERENCE_TYPE))
    {
      var_ann_t new_ann = var_ann ((var)->ssa_name.var);
      var_ann_t orig_ann = var_ann ((op)->ssa_name.var);
      if (new_ann->type_mem_tag == (tree) ((void *)0))
 new_ann->type_mem_tag = orig_ann->type_mem_tag;
      else if (orig_ann->type_mem_tag == (tree) ((void *)0))
 orig_ann->type_mem_tag = new_ann->type_mem_tag;
      else if (new_ann->type_mem_tag != orig_ann->type_mem_tag)
 fancy_abort ("gcc.c", 129417, "?");
    }
}
static void
replace_exp_1 (use_operand_p op_p, tree val, unsigned char for_propagation)
{
  if (((enum tree_code) (val)->common.code) == SSA_NAME)
    {
      if (((enum tree_code) (get_use_from_ptr (op_p))->common.code) == SSA_NAME)
 replace_ssa_names_ann (get_use_from_ptr (op_p), val, for_propagation);
      ((*((op_p).use)) = (val));
    }
  else
    ((*((op_p).use)) = (lhd_unsave_expr_now (val)));
}
void
propagate_value (use_operand_p op_p, tree val)
{
  replace_exp_1 (op_p, val, 1);
}
void
propagate_tree_value (tree *op_p, tree val)
{
  if (((enum tree_code) (val)->common.code) == SSA_NAME)
    {
      if (((enum tree_code) (*op_p)->common.code) == SSA_NAME)
 replace_ssa_names_ann (*op_p, val, 1);
      *op_p = val;
    }
  else
    *op_p = lhd_unsave_expr_now (val);
}
void
replace_exp (use_operand_p op_p, tree val)
{
  replace_exp_1 (op_p, val, 0);
}
struct nrv_data
{
  tree var;
  tree result;
};
static tree finalize_nrv_r (tree *, int *, void *);
static tree
finalize_nrv_r (tree *tp, int *walk_subtrees, void *data)
{
  struct nrv_data *dp = (struct nrv_data *)data;
  if ((tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 't'))
    *walk_subtrees = 0;
  else if (((enum tree_code) (*tp)->common.code) == RETURN_EXPR)
    ((*tp)->exp.operands[0]) = dp->result;
  else if (*tp == dp->var)
    *tp = dp->result;
  return (tree) ((void *)0);
}
static void
tree_nrv (void)
{
  tree result = ((current_function_decl)->decl.result);
  tree result_type = ((result)->common.type);
  tree found = ((void *)0);
  basic_block bb;
  struct nrv_data data;
  if (!aggregate_value_p (result, current_function_decl))
    return;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree stmt = last_stmt (bb);
      if (stmt && ((enum tree_code) (stmt)->common.code) == RETURN_EXPR)
 {
   tree ret_expr = ((stmt)->exp.operands[0]);
   if (!ret_expr
       || ((enum tree_code) (ret_expr)->common.code) != MODIFY_EXPR
       || ((enum tree_code) (((ret_expr)->exp.operands[0]))->common.code) != RESULT_DECL)
     return;
   if (found != ((void *)0))
     {
       if (found != ((ret_expr)->exp.operands[1]))
  return;
     }
   else
     found = ((ret_expr)->exp.operands[1]);
   if (((enum tree_code) (found)->common.code) != VAR_DECL
       || ((found)->decl.context) != current_function_decl
       || ((found)->common.static_flag)
       || ((found)->common.addressable_flag)
       || ((found)->decl.u1.a.align) > ((result)->decl.u1.a.align)
              || !lang_hooks.types_compatible_p (((found)->common.type),
    result_type))
     return;
 }
    }
  if (!found)
    return;
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "NRV Replaced: ");
      print_generic_expr (dump_file, found, dump_flags);
      fprintf (dump_file, "  with: ");
      print_generic_expr (dump_file, result, dump_flags);
      fprintf (dump_file, "\n");
    }
  ((result)->decl.name) = ((found)->decl.name);
  ((result)->decl.locus) = ((found)->decl.locus);
  ((result)->decl.abstract_origin) = ((found)->decl.abstract_origin);
  ((result)->common.addressable_flag) = ((found)->common.addressable_flag);
  data.var = found;
  data.result = result;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      block_stmt_iterator bsi;
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
 walk_tree (bsi_stmt_ptr (bsi), finalize_nrv_r, &data, 0);
    }
  var_ann (found)->used = 0;
}
struct tree_opt_pass pass_nrv =
{
  "nrv",
  ((void *)0),
  tree_nrv,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_NRV,
  (1 << 3),
  0,
  0,
  0,
  (1 << 0) | (1 << 2)
};
extern void rename_ssa_copies (void);
static void
copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
{
  int p1, p2, p3;
  tree root1, root2;
  var_ann_t ann1, ann2, ann3;
  unsigned char gimp1, gimp2;
  register_ssa_partition (map, var1, 0);
  register_ssa_partition (map, var2, 1);
  p1 = ((map->var_partition)->elements[((var1)->ssa_name.version)].class_element);
  p2 = ((map->var_partition)->elements[((var2)->ssa_name.version)].class_element);
  if (debug)
    {
      fprintf (debug, "Try : ");
      print_generic_expr (debug, var1, (1 << 1));
      fprintf (debug, "(P%d) & ", p1);
      print_generic_expr (debug, var2, (1 << 1));
      fprintf (debug, "(P%d)", p2);
    }
  root1 = (partition_to_var (map, p1))->ssa_name.var;
  root2 = (partition_to_var (map, p2))->ssa_name.var;
  if (((root1)->decl.inline_flag) || ((root2)->decl.inline_flag))
    {
      if (debug)
        {
   if (((root1)->decl.inline_flag))
     print_generic_expr (debug, var1, (1 << 1));
   else
     print_generic_expr (debug, var2, (1 << 1));
   fprintf (debug, " is a hardware register.  No Coalescing.\n");
 }
      return;
    }
  ann1 = var_ann (root1);
  ann2 = var_ann (root2);
  if (p1 == p2)
    {
      if (debug)
 fprintf (debug, " : Already coalesced.\n");
      return;
    }
  if (root1 == root2)
    {
      p1 = partition_union (map->var_partition, p1, p2);
      if (debug)
 fprintf (debug, " : Same root, coalesced --> P%d.\n", p1);
      return;
    }
  if (((enum tree_code) (root1)->common.code) == PARM_DECL && ((enum tree_code) (root2)->common.code) == PARM_DECL)
    {
      if (debug)
        fprintf (debug, " : 2 different PARM_DECLS. No coalesce.\n");
      return;
    }
  if ((((enum tree_code) (root1)->common.code) == RESULT_DECL) != (((enum tree_code) (root2)->common.code) == RESULT_DECL))
    {
      if (debug)
        fprintf (debug, " : One root a RESULT_DECL. No coalesce.\n");
      return;
    }
  gimp1 = is_gimple_tmp_var (root1);
  gimp2 = is_gimple_tmp_var (root2);
  if (!gimp1 && !gimp2)
    {
      if ((((root2)->decl.abstract_origin) != (tree) ((void *)0) && ((root2)->decl.abstract_origin) != (root2)))
        gimp2 = 1;
      else
        if ((((root1)->decl.abstract_origin) != (tree) ((void *)0) && ((root1)->decl.abstract_origin) != (root1)))
   gimp1 = 1;
 else
   {
     if (debug)
       fprintf (debug, " : 2 different USER vars. No coalesce.\n");
     return;
   }
    }
  if (ann1->type_mem_tag && ann2->type_mem_tag
      && ann1->type_mem_tag != ann2->type_mem_tag)
    {
      if (debug)
 fprintf (debug, " : 2 memory tags. No coalesce.\n");
      return;
    }
  if (default_def (root1))
    {
      if (default_def (root2))
 {
   if (debug)
     fprintf (debug, " : 2 default defs. No coalesce.\n");
   return;
 }
      else
        {
   gimp2 = 1;
   gimp1 = 0;
 }
    }
  else
    if (default_def (root2))
      {
 gimp1 = 1;
 gimp2 = 0;
      }
  p3 = partition_union (map->var_partition, p1, p2);
  if (!gimp2)
    (partition_to_var (map, p3))->ssa_name.var = root2;
  else
    if (!gimp1)
      (partition_to_var (map, p3))->ssa_name.var = root1;
  ann3 = var_ann ((partition_to_var (map, p3))->ssa_name.var);
  if (ann1->type_mem_tag)
    ann3->type_mem_tag = ann1->type_mem_tag;
  else
    ann3->type_mem_tag = ann2->type_mem_tag;
  if (debug)
    {
      fprintf (debug, " --> P%d ", p3);
      print_generic_expr (debug, (partition_to_var (map, p3))->ssa_name.var,
     (1 << 1));
      fprintf (debug, "\n");
    }
}
void
rename_ssa_copies (void)
{
  var_map map;
  basic_block bb;
  block_stmt_iterator bsi;
  tree phi, stmt, var, part_var;
  unsigned x;
  FILE *debug;
  if (dump_file && (dump_flags & (1 << 3)))
    debug = dump_file;
  else
    debug = ((void *)0);
  map = init_var_map (((ssa_names)->elements_used) + 1);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
 {
   stmt = bsi_stmt (bsi);
   if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR)
     {
       tree lhs = ((stmt)->exp.operands[0]);
       tree rhs = ((stmt)->exp.operands[1]);
              if (((enum tree_code) (lhs)->common.code) == SSA_NAME
    && !has_hidden_use ((lhs)->ssa_name.var)
    && ((enum tree_code) (rhs)->common.code) == SSA_NAME)
  copy_rename_partition_coalesce (map, lhs, rhs, debug);
     }
 }
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
        {
          int i;
   tree res = get_def_from_ptr (get_phi_result_ptr (phi));
   if (!is_gimple_reg ((res)->ssa_name.var)
       || has_hidden_use ((res)->ssa_name.var))
     continue;
          for (i = 0; i < (phi)->phi.num_args; i++)
            {
              tree arg = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
              if (((enum tree_code) (arg)->common.code) == SSA_NAME)
  copy_rename_partition_coalesce (map, res, arg, debug);
            }
        }
    }
  if (debug)
    dump_var_map (debug, map);
  for (x = 1; x <= ((ssa_names)->elements_used); x++)
    {
      part_var = partition_to_var (map, x);
      if (!part_var)
        continue;
      var = map->partition_to_var[x];
      if (debug)
        {
   if ((var)->ssa_name.var != (part_var)->ssa_name.var)
     {
       fprintf (debug, "Coalesced ");
       print_generic_expr (debug, var, (1 << 1));
       fprintf (debug, " to ");
       print_generic_expr (debug, part_var, (1 << 1));
       fprintf (debug, "\n");
     }
 }
      (var)->ssa_name.var = (part_var)->ssa_name.var;
    }
  delete_var_map (map);
}
static unsigned char
gate_copyrename (void)
{
  return flag_tree_copyrename != 0;
}
struct tree_opt_pass pass_rename_ssa_copies =
{
  "copyrename",
  gate_copyrename,
  rename_ssa_copies,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_COPY_RENAME,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 3)
};
typedef unsigned long ALLOC_POOL_ID_TYPE;
typedef struct alloc_pool_list_def
{
  struct alloc_pool_list_def *next;
}
 *alloc_pool_list;
typedef struct alloc_pool_def
{
  const char *name;
  size_t elts_per_block;
  alloc_pool_list free_list;
  size_t elts_allocated;
  size_t elts_free;
  size_t blocks_allocated;
  alloc_pool_list block_list;
  size_t block_size;
  size_t elt_size;
}
 *alloc_pool;
extern alloc_pool create_alloc_pool (const char *, size_t, size_t);
extern void free_alloc_pool (alloc_pool);
extern void *pool_alloc (alloc_pool);
extern void pool_free (alloc_pool, void *);
extern void dump_alloc_pool_statistics (void);
typedef struct value_set_node
{
  tree expr;
  struct value_set_node *next;
} *value_set_node_t;
typedef struct value_set
{
  value_set_node_t head;
  value_set_node_t tail;
  size_t length;
  unsigned char indexed;
  bitmap values;
} *value_set_t;
typedef struct bitmap_set
{
  bitmap expressions;
  bitmap values;
} *bitmap_set_t;
typedef struct bb_value_sets
{
  value_set_t exp_gen;
  bitmap_set_t phi_gen;
  bitmap_set_t tmp_gen;
  bitmap_set_t avail_out;
  value_set_t antic_in;
  bitmap_set_t new_sets;
} *bb_value_sets_t;
static struct
{
  int eliminations;
  int insertions;
  int phis;
} pre_stats;
static tree bitmap_find_leader (bitmap_set_t, tree);
static tree find_leader (value_set_t, tree);
static void value_insert_into_set (value_set_t, tree);
static void bitmap_value_insert_into_set (bitmap_set_t, tree);
static void bitmap_value_replace_in_set (bitmap_set_t, tree);
static void insert_into_set (value_set_t, tree);
static void bitmap_set_copy (bitmap_set_t, bitmap_set_t);
static unsigned char bitmap_set_contains_value (bitmap_set_t, tree);
static bitmap_set_t bitmap_set_new (void);
static value_set_t set_new (unsigned char);
static unsigned char is_undefined_value (tree);
static tree create_expression_by_pieces (basic_block, tree, tree);
static alloc_pool value_set_pool;
static alloc_pool bitmap_set_pool;
static alloc_pool value_set_node_pool;
static alloc_pool binary_node_pool;
static alloc_pool unary_node_pool;
static htab_t phi_translate_table;
typedef struct expr_pred_trans_d
{
  tree e;
  basic_block pred;
  tree v;
  hashval_t hashcode;
} *expr_pred_trans_t;
static hashval_t
expr_pred_trans_hash (const void *p)
{
  const expr_pred_trans_t ve = (expr_pred_trans_t) p;
  return ve->hashcode;
}
static int
expr_pred_trans_eq (const void *p1, const void *p2)
{
  const expr_pred_trans_t ve1 = (expr_pred_trans_t) p1;
  const expr_pred_trans_t ve2 = (expr_pred_trans_t) p2;
  basic_block b1 = ve1->pred;
  basic_block b2 = ve2->pred;
  if (b1 != b2)
    return 0;
  if (expressions_equal_p (ve1->e, ve2->e))
    return 1;
  return 0;
}
static tree
phi_trans_lookup (tree e, basic_block pred)
{
  void **slot;
  struct expr_pred_trans_d ept;
  ept.e = e;
  ept.pred = pred;
  ept.hashcode = vn_compute (e, (unsigned long) pred, ((void *)0));
  slot = htab_find_slot_with_hash (phi_translate_table, &ept, ept.hashcode,
       NO_INSERT);
  if (!slot)
    return ((void *)0);
  else
    return ((expr_pred_trans_t) *slot)->v;
}
static void
phi_trans_add (tree e, tree v, basic_block pred)
{
  void **slot;
  expr_pred_trans_t new_pair = xmalloc (sizeof (*new_pair));
  new_pair->e = e;
  new_pair->pred = pred;
  new_pair->v = v;
  new_pair->hashcode = vn_compute (e, (unsigned long) pred, ((void *)0));
  slot = htab_find_slot_with_hash (phi_translate_table, new_pair,
       new_pair->hashcode, INSERT);
  if (*slot)
    free (*slot);
  *slot = (void *) new_pair;
}
void
add_to_value (tree v, tree e)
{
  if (is_gimple_min_invariant (v))
    return;
  if (((v)->value_handle.expr_set) == ((void *)0))
    ((v)->value_handle.expr_set) = set_new (0);
  insert_into_set (((v)->value_handle.expr_set), e);
}
static unsigned char
value_exists_in_set_bitmap (value_set_t set, tree v)
{
  if (!set->values)
    return 0;
  return bitmap_bit_p (set->values, ((v)->value_handle.id));
}
static void
value_remove_from_set_bitmap (value_set_t set, tree v)
{
  if (!set->values)
    return;
  bitmap_clear_bit (set->values, ((v)->value_handle.id));
}
static void
value_insert_into_set_bitmap (value_set_t set, tree v)
{
  if (set->values == ((void *)0))
    {
      set->values = bitmap_initialize (((void *)0), 0);
      bitmap_clear (set->values);
    }
  bitmap_set_bit (set->values, ((v)->value_handle.id));
}
static bitmap_set_t
bitmap_set_new (void)
{
  bitmap_set_t ret = pool_alloc (bitmap_set_pool);
  ret->expressions = bitmap_initialize (((void *)0), 0);
  ret->values = bitmap_initialize (((void *)0), 0);
  bitmap_clear (ret->expressions);
  bitmap_clear (ret->values);
  return ret;
}
static value_set_t
set_new (unsigned char indexed)
{
  value_set_t ret;
  ret = pool_alloc (value_set_pool);
  ret->head = ret->tail = ((void *)0);
  ret->length = 0;
  ret->indexed = indexed;
  ret->values = ((void *)0);
  return ret;
}
static void
bitmap_insert_into_set (bitmap_set_t set, tree expr)
{
  tree val;
  if (((enum tree_code) (expr)->common.code) != SSA_NAME)
    fancy_abort ("gcc.c", 130606, "?");
  val = get_value_handle (expr);
  if (val == ((void *)0))
    fancy_abort ("gcc.c", 130610, "?");
  if (!is_gimple_min_invariant (val))
    bitmap_set_bit (set->values, ((val)->value_handle.id));
  bitmap_set_bit (set->expressions, (expr)->ssa_name.version);
}
static void
insert_into_set (value_set_t set, tree expr)
{
  value_set_node_t newnode = pool_alloc (value_set_node_pool);
  tree val = get_value_handle (expr);
  if (val == ((void *)0))
    fancy_abort ("gcc.c", 130625, "?");
  if (set->indexed)
    value_insert_into_set_bitmap (set, val);
  newnode->next = ((void *)0);
  newnode->expr = expr;
  set->length ++;
  if (set->head == ((void *)0))
    {
      set->head = set->tail = newnode;
    }
  else
    {
      set->tail->next = newnode;
      set->tail = newnode;
    }
}
static void
bitmap_set_copy (bitmap_set_t dest, bitmap_set_t orig)
{
  bitmap_copy (dest->expressions, orig->expressions);
  bitmap_copy (dest->values, orig->values);
}
static void
set_copy (value_set_t dest, value_set_t orig)
{
  value_set_node_t node;
  if (!orig || !orig->head)
    return;
  for (node = orig->head;
       node;
       node = node->next)
    {
      insert_into_set (dest, node->expr);
    }
}
static void
set_remove (value_set_t set, tree expr)
{
  value_set_node_t node, prev;
  value_remove_from_set_bitmap (set, get_value_handle (expr));
  set->length--;
  prev = ((void *)0);
  for (node = set->head;
       node != ((void *)0);
       prev = node, node = node->next)
    {
      if (node->expr == expr)
 {
   if (prev == ((void *)0))
     set->head = node->next;
   else
     prev->next= node->next;
   if (node == set->tail)
     set->tail = prev;
   pool_free (value_set_node_pool, node);
   return;
 }
    }
}
static unsigned char
set_contains_value (value_set_t set, tree val)
{
  if (is_gimple_min_invariant (val))
    return 1;
  if (set->length == 0)
    return 0;
  return value_exists_in_set_bitmap (set, val);
}
static unsigned char
bitmap_set_contains (bitmap_set_t set, tree expr)
{
  if (((enum tree_code) (expr)->common.code) != SSA_NAME)
    return 0;
  return bitmap_bit_p (set->expressions, (expr)->ssa_name.version);
}
static unsigned char
bitmap_set_contains_value (bitmap_set_t set, tree val)
{
  if (is_gimple_min_invariant (val))
    return 1;
  return bitmap_bit_p (set->values, ((val)->value_handle.id));
}
static void
bitmap_set_replace_value (bitmap_set_t set, tree lookfor, tree expr)
{
  value_set_t exprset;
  value_set_node_t node;
  if (is_gimple_min_invariant (lookfor))
    return;
  if (!bitmap_set_contains_value (set, lookfor))
    return;
  exprset = ((lookfor)->value_handle.expr_set);
  for (node = exprset->head; node; node = node->next)
    {
      if (((enum tree_code) (node->expr)->common.code) == SSA_NAME)
 {
   if (bitmap_bit_p (set->expressions, (node->expr)->ssa_name.version))
     {
       bitmap_clear_bit (set->expressions, (node->expr)->ssa_name.version);
       bitmap_set_bit (set->expressions, (expr)->ssa_name.version);
       return;
     }
 }
    }
}
static value_set_t
bitmap_set_subtract_from_value_set (value_set_t a, bitmap_set_t b,
        unsigned char indexed)
{
  value_set_t ret = set_new (indexed);
  value_set_node_t node;
  for (node = a->head;
       node;
       node = node->next)
    {
      if (!bitmap_set_contains (b, node->expr))
 insert_into_set (ret, node->expr);
    }
  return ret;
}
static unsigned char
set_equal (value_set_t a, value_set_t b)
{
  value_set_node_t node;
  if (a->length != b->length)
    return 0;
  for (node = a->head;
       node;
       node = node->next)
    {
      if (!set_contains_value (b, get_value_handle (node->expr)))
 return 0;
    }
  return 1;
}
static void
bitmap_value_replace_in_set (bitmap_set_t set, tree expr)
{
  tree val = get_value_handle (expr);
  bitmap_set_replace_value (set, val, expr);
}
static void
bitmap_value_insert_into_set (bitmap_set_t set, tree expr)
{
  tree val = get_value_handle (expr);
  if (is_gimple_min_invariant (val))
    return;
  if (!bitmap_set_contains_value (set, val))
    bitmap_insert_into_set (set, expr);
}
static void
value_insert_into_set (value_set_t set, tree expr)
{
  tree val = get_value_handle (expr);
  if (is_gimple_min_invariant (val))
    return;
  if (!set_contains_value (set, val))
    insert_into_set (set, expr);
}
static void
bitmap_print_value_set (FILE *outfile, bitmap_set_t set,
   const char *setname, int blockindex)
{
  fprintf (outfile, "%s[%d] := { ", setname, blockindex);
  if (set)
    {
      int i;
      do { bitmap_element *ptr_ = (set->expressions)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { print_generic_expr (outfile, ((ssa_names)->data.tree1[i]), 0); fprintf (outfile, " ("); print_generic_expr (outfile, get_value_handle (((ssa_names)->data.tree1[i])), 0); fprintf (outfile, ") "); if (bitmap_last_set_bit (set->expressions) != i) fprintf (outfile, ", "); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
        ;
    }
  fprintf (outfile, " }\n");
}
static void
print_value_set (FILE *outfile, value_set_t set,
   const char *setname, int blockindex)
{
  value_set_node_t node;
  fprintf (outfile, "%s[%d] := { ", setname, blockindex);
  if (set)
    {
      for (node = set->head;
    node;
    node = node->next)
 {
   print_generic_expr (outfile, node->expr, 0);
   fprintf (outfile, " (");
   print_generic_expr (outfile, get_value_handle (node->expr), 0);
   fprintf (outfile, ") ");
   if (node->next)
     fprintf (outfile, ", ");
 }
    }
  fprintf (outfile, " }\n");
}
void
print_value_expressions (FILE *outfile, tree val)
{
  if (((val)->value_handle.expr_set))
    {
      char s[10];
      sprintf (s, "VH.%04d", ((val)->value_handle.id));
      print_value_set (outfile, ((val)->value_handle.expr_set), s, 0);
    }
}
void
debug_value_expressions (tree val)
{
  print_value_expressions (stderr, val);
}
void debug_value_set (value_set_t, const char *, int);
void
debug_value_set (value_set_t set, const char *setname, int blockindex)
{
  print_value_set (stderr, set, setname, blockindex);
}
static tree
phi_translate (tree expr, value_set_t set, basic_block pred,
        basic_block phiblock)
{
  tree phitrans = ((void *)0);
  tree oldexpr = expr;
  if (expr == ((void *)0))
    return ((void *)0);
  phitrans = phi_trans_lookup (expr, pred);
  if (phitrans)
    return phitrans;
  switch (tree_code_type[(int) (((enum tree_code) (expr)->common.code))])
    {
    case '2':
      {
 tree oldop1 = ((expr)->exp.operands[0]);
 tree oldop2 = ((expr)->exp.operands[1]);
 tree newop1;
 tree newop2;
 tree newexpr;
 newop1 = phi_translate (find_leader (set, oldop1),
    set, pred, phiblock);
 if (newop1 == ((void *)0))
   return ((void *)0);
 newop2 = phi_translate (find_leader (set, oldop2),
    set, pred, phiblock);
 if (newop2 == ((void *)0))
   return ((void *)0);
 if (newop1 != oldop1 || newop2 != oldop2)
   {
     newexpr = pool_alloc (binary_node_pool);
     memcpy (newexpr, expr, tree_size (expr));
     create_tree_ann (newexpr);
     ((newexpr)->exp.operands[0]) = newop1 == oldop1 ? oldop1 : get_value_handle (newop1);
     ((newexpr)->exp.operands[1]) = newop2 == oldop2 ? oldop2 : get_value_handle (newop2);
     vn_lookup_or_add (newexpr, ((void *)0));
     expr = newexpr;
     phi_trans_add (oldexpr, newexpr, pred);
   }
      }
      break;
    case 'r':
      return ((void *)0);
      break;
    case '1':
      {
 tree oldop1 = ((expr)->exp.operands[0]);
 tree newop1;
 tree newexpr;
 newop1 = phi_translate (find_leader (set, oldop1),
    set, pred, phiblock);
 if (newop1 == ((void *)0))
   return ((void *)0);
 if (newop1 != oldop1)
   {
     newexpr = pool_alloc (unary_node_pool);
     memcpy (newexpr, expr, tree_size (expr));
     create_tree_ann (newexpr);
     ((newexpr)->exp.operands[0]) = get_value_handle (newop1);
     vn_lookup_or_add (newexpr, ((void *)0));
     expr = newexpr;
     phi_trans_add (oldexpr, newexpr, pred);
   }
      }
      break;
    case 'd':
      fancy_abort ("gcc.c", 131012, "?");
    case 'x':
      {
 tree phi = ((void *)0);
 int i;
 if (((enum tree_code) (expr)->common.code) != SSA_NAME)
   fancy_abort ("gcc.c", 131018, "?");
 if (((enum tree_code) ((expr)->common.chain)->common.code) == PHI_NODE)
   phi = (expr)->common.chain;
 else
   return expr;
 for (i = 0; i < (phi)->phi.num_args; i++)
   if (((phi)->phi.a[i]).e->src == pred)
     {
       tree val;
       if (is_undefined_value (get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))))))
  return ((void *)0);
       val = vn_lookup_or_add (get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i)))), ((void *)0));
       return get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
     }
      }
      break;
    }
  return expr;
}
static void
phi_translate_set (value_set_t dest, value_set_t set, basic_block pred,
     basic_block phiblock)
{
  value_set_node_t node;
  for (node = set->head;
       node;
       node = node->next)
    {
      tree translated;
      translated = phi_translate (node->expr, set, pred, phiblock);
      phi_trans_add (node->expr, translated, pred);
      if (translated != ((void *)0))
 value_insert_into_set (dest, translated);
    }
}
static tree
bitmap_find_leader (bitmap_set_t set, tree val)
{
  if (val == ((void *)0))
    return ((void *)0);
  if (is_gimple_min_invariant (val))
    return val;
  if (bitmap_set_contains_value (set, val))
    {
      value_set_t exprset;
      value_set_node_t node;
      exprset = ((val)->value_handle.expr_set);
      for (node = exprset->head; node; node = node->next)
 {
   if (((enum tree_code) (node->expr)->common.code) == SSA_NAME)
     {
       if (bitmap_bit_p (set->expressions,
    (node->expr)->ssa_name.version))
  return node->expr;
     }
 }
    }
  return ((void *)0);
}
static tree
find_leader (value_set_t set, tree val)
{
  value_set_node_t node;
  if (val == ((void *)0))
    return ((void *)0);
  if (is_gimple_min_invariant (val))
    return val;
  if (set->length == 0)
    return ((void *)0);
  if (value_exists_in_set_bitmap (set, val))
    {
      for (node = set->head;
    node;
    node = node->next)
 {
   if (get_value_handle (node->expr) == val)
     return node->expr;
 }
    }
  return ((void *)0);
}
static unsigned char
valid_in_set (value_set_t set, tree expr)
{
  switch (tree_code_type[(int) (((enum tree_code) (expr)->common.code))])
    {
    case '2':
      {
 tree op1 = ((expr)->exp.operands[0]);
 tree op2 = ((expr)->exp.operands[1]);
 return set_contains_value (set, op1) && set_contains_value (set, op2);
      }
      break;
    case '1':
      {
 tree op1 = ((expr)->exp.operands[0]);
 return set_contains_value (set, op1);
      }
      break;
    case 'r':
      {
 return 0;
      }
    case 'x':
      {
 if (((enum tree_code) (expr)->common.code) == SSA_NAME)
   return 1;
 fancy_abort ("gcc.c", 131169, "?");
      }
    case 'c':
      fancy_abort ("gcc.c", 131172, "?");
    }
  return 0;
}
static void
clean (value_set_t set)
{
  value_set_node_t node;
  value_set_node_t next;
  node = set->head;
  while (node)
    {
      next = node->next;
      if (!valid_in_set (set, node->expr))
 set_remove (set, node->expr);
      node = next;
    }
}
static unsigned char
compute_antic_aux (basic_block block)
{
  basic_block son;
  edge e;
  unsigned char changed = 0;
  value_set_t S, old, ANTIC_OUT;
  value_set_node_t node;
  ANTIC_OUT = S = ((void *)0);
  if (! (block->flags & 8))
    {
      for (e = block->pred; e; e = e->pred_next)
  if (e->flags & 2)
    {
      block->flags |= 8;
      break;
    }
    }
  if (block->flags & 8)
    {
      S = ((void *)0);
      goto visit_sons;
    }
  old = set_new (0);
  set_copy (old, ((bb_value_sets_t) ((block)->aux))->antic_in);
  ANTIC_OUT = set_new (1);
  if (block->succ == ((void *)0));
  else if (block->succ->succ_next == ((void *)0))
    {
      phi_translate_set (ANTIC_OUT, ((bb_value_sets_t) ((block->succ->dest)->aux))->antic_in,
    block, block->succ->dest);
    }
  else
    {
      varray_type worklist;
      edge e;
      size_t i;
      basic_block bprime, first;
      worklist = varray_init (1, VARRAY_DATA_BB, "succ");
      e = block->succ;
      while (e)
 {
   do { if ((worklist)->elements_used >= (worklist)->num_elements) (((worklist)) = varray_grow ((worklist), 2 * (worklist)->num_elements)); (worklist)->data.bb[(worklist)->elements_used++] = (e->dest); } while (0);
   e = e->succ_next;
 }
      first = ((worklist)->data.bb[0]);
      set_copy (ANTIC_OUT, ((bb_value_sets_t) ((first)->aux))->antic_in);
      for (i = 1; i < ((worklist)->elements_used); i++)
 {
   bprime = ((worklist)->data.bb[i]);
   node = ANTIC_OUT->head;
   while (node)
     {
       tree val;
       value_set_node_t next = node->next;
       val = get_value_handle (node->expr);
       if (!set_contains_value (((bb_value_sets_t) ((bprime)->aux))->antic_in, val))
  set_remove (ANTIC_OUT, node->expr);
       node = next;
     }
 }
      varray_clear(worklist);
    }
  S = bitmap_set_subtract_from_value_set (ANTIC_OUT, ((bb_value_sets_t) ((block)->aux))->tmp_gen, 0);
  ((bb_value_sets_t) ((block)->aux))->antic_in = bitmap_set_subtract_from_value_set (((bb_value_sets_t) ((block)->aux))->exp_gen,
        ((bb_value_sets_t) ((block)->aux))->tmp_gen,
        1);
  for (node = S->head;
       node;
       node = node->next)
    {
      value_insert_into_set (((bb_value_sets_t) ((block)->aux))->antic_in, node->expr);
    }
  clean (((bb_value_sets_t) ((block)->aux))->antic_in);
  if (!set_equal (old, ((bb_value_sets_t) ((block)->aux))->antic_in))
    changed = 1;
 visit_sons:
  if (dump_file && (dump_flags & (1 << 3)))
    {
      if (ANTIC_OUT)
 print_value_set (dump_file, ANTIC_OUT, "ANTIC_OUT", block->index);
      print_value_set (dump_file, ((bb_value_sets_t) ((block)->aux))->antic_in, "ANTIC_IN", block->index);
      if (S)
 print_value_set (dump_file, S, "S", block->index);
    }
  for (son = first_dom_son (CDI_POST_DOMINATORS, block);
       son;
       son = next_dom_son (CDI_POST_DOMINATORS, son))
    {
      changed |= compute_antic_aux (son);
    }
  return changed;
}
static void
compute_antic (void)
{
  unsigned char changed = 1;
  basic_block bb;
  int num_iterations = 0;
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    {
      ((bb_value_sets_t) ((bb)->aux))->antic_in = set_new (1);
      if (bb->flags & 8)
 fancy_abort ("gcc.c", 131348, "?");
    }
  while (changed)
    {
      num_iterations++;
      changed = 0;
      changed = compute_antic_aux (EXIT_BLOCK_PTR);
    }
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    {
      bb->flags &= ~8;
    }
  if (num_iterations > 2 && dump_file && (dump_flags & (1 << 4)))
    fprintf (dump_file, "compute_antic required %d iterations\n", num_iterations);
}
static tree
find_or_generate_expression (basic_block block, tree expr, tree stmts)
{
  tree genop;
  genop = bitmap_find_leader (((bb_value_sets_t) ((block)->aux))->avail_out, expr);
  if (genop == ((void *)0))
    genop = bitmap_find_leader (((bb_value_sets_t) ((block)->aux))->new_sets, expr);
  if (genop == ((void *)0))
    {
      genop = ((expr)->value_handle.expr_set)->head->expr;
      if (tree_code_type[(int) (((enum tree_code) (genop)->common.code))] != '1'
   && tree_code_type[(int) (((enum tree_code) (genop)->common.code))] != '2')
 fancy_abort ("gcc.c", 131395, "?");
      genop = create_expression_by_pieces (block, genop, stmts);
    }
  return genop;
}
static tree
create_expression_by_pieces (basic_block block, tree expr, tree stmts)
{
  tree name = (tree) ((void *)0);
  tree newexpr = (tree) ((void *)0);
  tree v;
  switch (tree_code_type[(int) (((enum tree_code) (expr)->common.code))])
    {
    case '2':
      {
 tree_stmt_iterator tsi;
 tree genop1, genop2;
 tree temp;
 tree op1 = ((expr)->exp.operands[0]);
 tree op2 = ((expr)->exp.operands[1]);
 genop1 = find_or_generate_expression (block, op1, stmts);
 genop2 = find_or_generate_expression (block, op2, stmts);
 temp = create_tmp_var (((expr)->common.type), "pretmp");
 add_referenced_tmp_var (temp);
 newexpr = build (((enum tree_code) (expr)->common.code), ((expr)->common.type),
    genop1, genop2);
 newexpr = build (MODIFY_EXPR, ((expr)->common.type),
    temp, newexpr);
 name = make_ssa_name (temp, newexpr);
 ((newexpr)->exp.operands[0]) = name;
 tsi = tsi_last (stmts);
 tsi_link_after (&tsi, newexpr, TSI_CONTINUE_LINKING);
 pre_stats.insertions++;
 break;
      }
    case '1':
      {
 tree_stmt_iterator tsi;
 tree genop1;
 tree temp;
 tree op1 = ((expr)->exp.operands[0]);
 genop1 = find_or_generate_expression (block, op1, stmts);
 temp = create_tmp_var (((expr)->common.type), "pretmp");
 add_referenced_tmp_var (temp);
 newexpr = build (((enum tree_code) (expr)->common.code), ((expr)->common.type),
    genop1);
 newexpr = build (MODIFY_EXPR, ((expr)->common.type),
    temp, newexpr);
 name = make_ssa_name (temp, newexpr);
 ((newexpr)->exp.operands[0]) = name;
 tsi = tsi_last (stmts);
 tsi_link_after (&tsi, newexpr, TSI_CONTINUE_LINKING);
 pre_stats.insertions++;
 break;
      }
    default:
      fancy_abort ("gcc.c", 131469, "?");
    }
  v = get_value_handle (expr);
  vn_add (name, v, ((void *)0));
  bitmap_insert_into_set (((bb_value_sets_t) ((block)->aux))->new_sets, name);
  bitmap_value_insert_into_set (((bb_value_sets_t) ((block)->aux))->avail_out, name);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "Inserted ");
      print_generic_expr (dump_file, newexpr, 0);
      fprintf (dump_file, " in predecessor %d\n", block->index);
    }
  return name;
}
static unsigned char
insert_aux (basic_block block)
{
  basic_block son;
  unsigned char new_stuff = 0;
  if (block)
    {
      basic_block dom;
      dom = get_immediate_dominator (CDI_DOMINATORS, block);
      if (dom)
 {
   int i;
   bitmap_set_t newset = ((bb_value_sets_t) ((dom)->aux))->new_sets;
   do { bitmap_element *ptr_ = (newset->expressions)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { bitmap_insert_into_set (((bb_value_sets_t) ((block)->aux))->new_sets, ((ssa_names)->data.tree1[i])); bitmap_value_replace_in_set (((bb_value_sets_t) ((block)->aux))->avail_out, ((ssa_names)->data.tree1[i])); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
     ;
   if (block->pred->pred_next)
     {
       value_set_node_t node;
       for (node = ((bb_value_sets_t) ((block)->aux))->antic_in->head;
     node;
     node = node->next)
  {
    if (tree_code_type[(int) (((enum tree_code) (node->expr)->common.code))] == '2'
        || tree_code_type[(int) (((enum tree_code) (node->expr)->common.code))] == '1')
      {
        tree *avail;
        tree val;
        unsigned char by_some = 0;
        unsigned char cant_insert = 0;
        unsigned char all_same = 1;
        tree first_s = ((void *)0);
        edge pred;
        basic_block bprime;
        tree eprime;
        val = get_value_handle (node->expr);
        if (bitmap_set_contains_value (((bb_value_sets_t) ((block)->aux))->phi_gen, val))
   continue;
        if (bitmap_set_contains_value (((bb_value_sets_t) ((dom)->aux))->avail_out, val))
   {
     if (dump_file && (dump_flags & (1 << 3)))
       fprintf (dump_file, "Found fully redundant value\n");
     continue;
   }
        avail = xcalloc (last_basic_block, sizeof (tree));
        for (pred = block->pred;
      pred;
      pred = pred->pred_next)
   {
     tree vprime;
     tree edoubleprime;
     bprime = pred->src;
     eprime = phi_translate (node->expr,
        ((bb_value_sets_t) ((block)->aux))->antic_in,
        bprime, block);
     if (eprime == ((void *)0))
       {
         cant_insert = 1;
         break;
       }
     vprime = get_value_handle (eprime);
     if (!vprime)
       fancy_abort ("gcc.c", 131577, "?");
     edoubleprime = bitmap_find_leader (((bb_value_sets_t) ((bprime)->aux))->avail_out,
            vprime);
     if (edoubleprime == ((void *)0))
       {
         avail[bprime->index] = eprime;
         all_same = 0;
       }
     else
       {
         avail[bprime->index] = edoubleprime;
         by_some = 1;
         if (first_s == ((void *)0))
    first_s = edoubleprime;
         else if (first_s != edoubleprime)
    all_same = 0;
         if (first_s != edoubleprime
      && operand_equal_p (first_s, edoubleprime, 0))
    fancy_abort ("gcc.c", 131595, "?");
       }
   }
        if (!cant_insert && !all_same && by_some)
   {
     tree type = ((avail[block->pred->src->index])->common.type);
     tree temp;
     if (dump_file && (dump_flags & (1 << 3)))
       {
         fprintf (dump_file, "Found partial redundancy for expression ");
         print_generic_expr (dump_file, node->expr, 0);
         fprintf (dump_file, "\n");
       }
     for (pred = block->pred;
          pred;
          pred = pred->pred_next)
       {
         tree stmts = alloc_stmt_list ();
         tree builtexpr;
         bprime = pred->src;
         eprime = avail[bprime->index];
         if (tree_code_type[(int) (((enum tree_code) (eprime)->common.code))] == '2'
      || tree_code_type[(int) (((enum tree_code) (eprime)->common.code))] == '1')
    {
      builtexpr = create_expression_by_pieces (bprime,
            eprime,
            stmts);
      bsi_insert_on_edge (pred, stmts);
      bsi_commit_edge_inserts (((void *)0));
      avail[bprime->index] = builtexpr;
    }
       }
     temp = create_tmp_var (type, "prephitmp");
     add_referenced_tmp_var (temp);
     temp = create_phi_node (temp, block);
     vn_add (get_def_from_ptr (get_phi_result_ptr (temp)), val, ((void *)0));
       bitmap_value_replace_in_set (((bb_value_sets_t) ((block)->aux))->avail_out,
        get_def_from_ptr (get_phi_result_ptr (temp)));
     for (pred = block->pred;
          pred;
          pred = pred->pred_next)
       {
         add_phi_arg (&temp, avail[pred->src->index],
        pred);
       }
     if (dump_file && (dump_flags & (1 << 3)))
       {
         fprintf (dump_file, "Created phi ");
         print_generic_expr (dump_file, temp, 0);
         fprintf (dump_file, " in block %d\n", block->index);
       }
     pre_stats.phis++;
     new_stuff = 1;
     bitmap_insert_into_set (((bb_value_sets_t) ((block)->aux))->new_sets,
        get_def_from_ptr (get_phi_result_ptr (temp)));
     bitmap_insert_into_set (((bb_value_sets_t) ((block)->aux))->phi_gen,
        get_def_from_ptr (get_phi_result_ptr (temp)));
   }
        free (avail);
      }
  }
     }
 }
    }
  for (son = first_dom_son (CDI_DOMINATORS, block);
       son;
       son = next_dom_son (CDI_DOMINATORS, son))
    {
      new_stuff |= insert_aux (son);
    }
  return new_stuff;
}
static void
insert_pre (void)
{
  unsigned char new_stuff = 1;
  basic_block bb;
  int num_iterations = 0;
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    ((bb_value_sets_t) ((bb)->aux))->new_sets = bitmap_set_new ();
  while (new_stuff)
    {
      num_iterations++;
      new_stuff = 0;
      new_stuff = insert_aux (ENTRY_BLOCK_PTR);
    }
  if (num_iterations > 2 && dump_file && (dump_flags & (1 << 4)))
    fprintf (dump_file, "insert required %d iterations\n", num_iterations);
}
static unsigned char
is_undefined_value (tree expr)
{
  return (((enum tree_code) (expr)->common.code) == SSA_NAME
          && (((enum tree_code) ((expr)->common.chain)->common.code) == NOP_EXPR && (((enum tree_code) ((((expr)->common.chain)->common.type))->common.code) == VOID_TYPE) && integer_zerop ((((expr)->common.chain)->exp.operands[0])))
   && ((enum tree_code) ((expr)->ssa_name.var)->common.code) != PARM_DECL
   && !(((expr)->ssa_name.var)->decl.inline_flag));
}
static void
add_to_sets (tree var, tree expr, vuse_optype vuses, bitmap_set_t s1,
      bitmap_set_t s2)
{
  tree val = vn_lookup_or_add (expr, vuses);
  if (var != expr)
    vn_add (var, val, vuses);
  bitmap_insert_into_set (s1, var);
  bitmap_value_insert_into_set (s2, var);
}
static tree
create_value_expr_from (tree expr, basic_block block, vuse_optype vuses)
{
  int i;
  enum tree_code code = ((enum tree_code) (expr)->common.code);
  tree vexpr;
  if (tree_code_type[(int) (code)] == '1')
    vexpr = pool_alloc (unary_node_pool);
  else
    vexpr = pool_alloc (binary_node_pool);
  memcpy (vexpr, expr, tree_size (expr));
  for (i = 0; i < tree_code_length[(int) (code)]; i++)
    {
      tree op = ((expr)->exp.operands[i]);
      if (op != ((void *)0))
 {
   tree val = vn_lookup_or_add (op, vuses);
   if (!is_undefined_value (op))
     value_insert_into_set (((bb_value_sets_t) ((block)->aux))->exp_gen, op);
   ((val)->common.type) = ((((vexpr)->exp.operands[i]))->common.type);
   ((vexpr)->exp.operands[i]) = val;
 }
    }
  return vexpr;
}
static void
compute_avail (basic_block block)
{
  basic_block son;
  if (block == ENTRY_BLOCK_PTR)
    {
      tree param;
      for (param = ((current_function_decl)->decl.arguments);
    param;
    param = ((param)->common.chain))
 {
   if (default_def (param) != ((void *)0))
     {
       tree val;
       tree def = default_def (param);
       val = vn_lookup_or_add (def, ((void *)0));
       bitmap_insert_into_set (((bb_value_sets_t) ((block)->aux))->tmp_gen, def);
       bitmap_value_insert_into_set (((bb_value_sets_t) ((block)->aux))->avail_out, def);
     }
 }
    }
  else if (block)
    {
      block_stmt_iterator bsi;
      tree stmt, phi;
      basic_block dom;
      dom = get_immediate_dominator (CDI_DOMINATORS, block);
      if (dom)
 bitmap_set_copy (((bb_value_sets_t) ((block)->aux))->avail_out, ((bb_value_sets_t) ((dom)->aux))->avail_out);
      for (phi = phi_nodes (block); phi; phi = (((phi))->common.chain))
 if (is_gimple_reg (get_def_from_ptr (get_phi_result_ptr (phi))))
   add_to_sets (get_def_from_ptr (get_phi_result_ptr (phi)), get_def_from_ptr (get_phi_result_ptr (phi)), ((void *)0),
         ((bb_value_sets_t) ((block)->aux))->phi_gen, ((bb_value_sets_t) ((block)->aux))->avail_out);
      for (bsi = bsi_start (block); !bsi_end_p (bsi); bsi_next (&bsi))
 {
   stmt_ann_t ann;
   size_t j;
   stmt = bsi_stmt (bsi);
   ann = stmt_ann (stmt);
   get_stmt_operands (stmt);
   if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR
       && !ann->has_volatile_ops
       && ((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == SSA_NAME
       && !(((stmt)->exp.operands[0]))->common.asm_written_flag)
     {
       tree lhs = ((stmt)->exp.operands[0]);
       tree rhs = ((stmt)->exp.operands[1]);
       vuse_optype vuses = get_vuse_ops (stmt_ann(stmt));
       while (tree_ssa_useless_type_conversion (rhs)) rhs = ((rhs)->exp.operands[0]);
       if (tree_code_type[(int) (((enum tree_code) (rhs)->common.code))] == '1'
    || tree_code_type[(int) (((enum tree_code) (rhs)->common.code))] == '2')
  {
    tree newt = create_value_expr_from (rhs, block, vuses);
    add_to_sets (lhs, newt, vuses, ((bb_value_sets_t) ((block)->aux))->tmp_gen,
          ((bb_value_sets_t) ((block)->aux))->avail_out);
    value_insert_into_set (((bb_value_sets_t) ((block)->aux))->exp_gen, newt);
    continue;
  }
       else if (((enum tree_code) (rhs)->common.code) == SSA_NAME
         || is_gimple_min_invariant (rhs))
  {
    add_to_sets (lhs, rhs, vuses, ((bb_value_sets_t) ((block)->aux))->tmp_gen,
          ((bb_value_sets_t) ((block)->aux))->avail_out);
    if (((enum tree_code) (rhs)->common.code) == SSA_NAME
        && !is_undefined_value (rhs))
      value_insert_into_set (((bb_value_sets_t) ((block)->aux))->exp_gen, rhs);
    continue;
  }
     }
   for (j = 0; j < ((get_def_ops (stmt_ann (stmt))) ? (get_def_ops (stmt_ann (stmt)))->num_defs : 0); j++)
     {
       tree def = (get_def_from_ptr (get_def_op_ptr (((get_def_ops (stmt_ann (stmt)))), ((j)))));
       add_to_sets (def, def, ((void *)0), ((bb_value_sets_t) ((block)->aux))->tmp_gen,
       ((bb_value_sets_t) ((block)->aux))->avail_out);
     }
   for (j = 0; j < ((get_use_ops (stmt_ann (stmt))) ? (get_use_ops (stmt_ann (stmt)))->num_uses : 0); j++)
     {
       tree use = (get_use_from_ptr (get_use_op_ptr (((get_use_ops (stmt_ann (stmt)))), ((j)))));
       add_to_sets (use, use, ((void *)0), ((bb_value_sets_t) ((block)->aux))->tmp_gen,
       ((bb_value_sets_t) ((block)->aux))->avail_out);
     }
 }
    }
  for (son = first_dom_son (CDI_DOMINATORS, block);
       son;
       son = next_dom_son (CDI_DOMINATORS, son))
    compute_avail (son);
}
static void
eliminate (void)
{
  basic_block b;
  for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = b->next_bb)
    {
      block_stmt_iterator i;
      for (i = bsi_start (b); !bsi_end_p (i); bsi_next (&i))
        {
          tree stmt = bsi_stmt (i);
   if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR
       && ((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == SSA_NAME
       && ((enum tree_code) (((stmt)->exp.operands[1]))->common.code) != SSA_NAME
       && !is_gimple_min_invariant (((stmt)->exp.operands[1]))
       && !stmt_ann (stmt)->has_volatile_ops)
     {
       tree lhs = ((stmt)->exp.operands[0]);
       tree *rhs_p = &((stmt)->exp.operands[1]);
       tree sprime;
       vuse_optype vuses = get_vuse_ops (stmt_ann(stmt));
       sprime = bitmap_find_leader (((bb_value_sets_t) ((b)->aux))->avail_out, vn_lookup (lhs, vuses));
       if (sprime
    && sprime != lhs
    && (((enum tree_code) (*rhs_p)->common.code) != SSA_NAME
        || may_propagate_copy (*rhs_p, sprime)))
  {
    if (sprime == *rhs_p)
      fancy_abort ("gcc.c", 131963, "?");
    if (dump_file && (dump_flags & (1 << 3)))
      {
        fprintf (dump_file, "Replaced ");
        print_generic_expr (dump_file, *rhs_p, 0);
        fprintf (dump_file, " with ");
        print_generic_expr (dump_file, sprime, 0);
        fprintf (dump_file, " in ");
        print_generic_stmt (dump_file, stmt, 0);
      }
    pre_stats.eliminations++;
    propagate_tree_value (rhs_p, sprime);
    modify_stmt (stmt);
  }
     }
        }
    }
}
static void
init_pre (void)
{
  size_t tsize;
  basic_block bb;
  vn_init ();
  memset (&pre_stats, 0, sizeof (pre_stats));
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    bb->aux = xcalloc (1, sizeof (struct bb_value_sets));
  phi_translate_table = htab_create (511, expr_pred_trans_hash,
         expr_pred_trans_eq, free);
  value_set_pool = create_alloc_pool ("Value sets",
          sizeof (struct value_set), 30);
  bitmap_set_pool = create_alloc_pool ("Bitmap sets",
           sizeof (struct bitmap_set), 30);
  value_set_node_pool = create_alloc_pool ("Value set nodes",
               sizeof (struct value_set_node), 30);
  calculate_dominance_info (CDI_POST_DOMINATORS);
  calculate_dominance_info (CDI_DOMINATORS);
  tsize = tree_size (build (PLUS_EXPR, global_trees[TI_VOID_TYPE], (tree) ((void *)0), (tree) ((void *)0)));
  binary_node_pool = create_alloc_pool ("Binary tree nodes", tsize, 30);
  tsize = tree_size (build1_stat (NEGATE_EXPR,global_trees[TI_VOID_TYPE],(tree) ((void *)0) ));
  unary_node_pool = create_alloc_pool ("Unary tree nodes", tsize, 30);
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    {
      ((bb_value_sets_t) ((bb)->aux))->exp_gen = set_new (1);
      ((bb_value_sets_t) ((bb)->aux))->phi_gen = bitmap_set_new ();
      ((bb_value_sets_t) ((bb)->aux))->tmp_gen = bitmap_set_new ();
      ((bb_value_sets_t) ((bb)->aux))->avail_out = bitmap_set_new ();
    }
}
static void
fini_pre (void)
{
  basic_block bb;
  free_alloc_pool (value_set_pool);
  free_alloc_pool (bitmap_set_pool);
  free_alloc_pool (value_set_node_pool);
  free_alloc_pool (binary_node_pool);
  free_alloc_pool (unary_node_pool);
  htab_delete (phi_translate_table);
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    {
      free (bb->aux);
      bb->aux = ((void *)0);
    }
  free_dominance_info (CDI_POST_DOMINATORS);
  vn_delete ();
}
static void
execute_pre (unsigned char do_fre)
{
  init_pre ();
  compute_avail (ENTRY_BLOCK_PTR);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      basic_block bb;
      for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
 {
   print_value_set (dump_file, ((bb_value_sets_t) ((bb)->aux))->exp_gen, "exp_gen", bb->index);
   bitmap_print_value_set (dump_file, ((bb_value_sets_t) ((bb)->aux))->tmp_gen, "tmp_gen",
      bb->index);
   bitmap_print_value_set (dump_file, ((bb_value_sets_t) ((bb)->aux))->avail_out, "avail_out",
      bb->index);
 }
    }
  if (!do_fre && n_basic_blocks < 4000)
    {
      compute_antic ();
      insert_pre ();
    }
  eliminate ();
  if (dump_file && (dump_flags & (1 << 4)))
    {
      fprintf (dump_file, "Insertions:%d\n", pre_stats.insertions);
      fprintf (dump_file, "New PHIs:%d\n", pre_stats.phis);
      fprintf (dump_file, "Eliminated:%d\n", pre_stats.eliminations);
    }
  fini_pre ();
}
static void
do_pre (void)
{
  execute_pre (0);
}
static unsigned char
gate_pre (void)
{
  return flag_tree_pre != 0;
}
struct tree_opt_pass pass_pre =
{
  "pre",
  gate_pre,
  do_pre,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_PRE,
  (1 << 7) | (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 2) | (1 << 3)
};
static void
do_fre (void)
{
  execute_pre (1);
}
static unsigned char
gate_fre (void)
{
  return flag_tree_fre != 0;
}
struct tree_opt_pass pass_fre =
{
  "fre",
  gate_fre,
  do_fre,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_FRE,
  (1 << 7) | (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 2) | (1 << 3)
};
static void live_worklist (tree_live_info_p, varray_type, int);
static tree_live_info_p new_tree_live_info (var_map);
static void set_if_valid (var_map, bitmap, tree);
static void add_livein_if_notdef (tree_live_info_p, bitmap,
      tree, basic_block);
static void register_ssa_partition (var_map, tree, unsigned char);
static void add_conflicts_if_valid (tpa_p, conflict_graph,
        var_map, bitmap, tree);
static partition_pair_p find_partition_pair (coalesce_list_p, int, int, unsigned char);
var_map
init_var_map (int size)
{
  var_map map;
  map = (var_map) xmalloc (sizeof (struct _var_map));
  map->var_partition = partition_new (size);
  map->partition_to_var
       = (tree *)xmalloc (size * sizeof (tree));
  memset (map->partition_to_var, 0, size * sizeof (tree));
  map->partition_to_compact = ((void *)0);
  map->compact_to_partition = ((void *)0);
  map->num_partitions = size;
  map->partition_size = size;
  map->ref_count = ((void *)0);
  return map;
}
void
delete_var_map (var_map map)
{
  free (map->partition_to_var);
  partition_delete (map->var_partition);
  if (map->partition_to_compact)
    free (map->partition_to_compact);
  if (map->compact_to_partition)
    free (map->compact_to_partition);
  if (map->ref_count)
    free (map->ref_count);
  free (map);
}
int
var_union (var_map map, tree var1, tree var2)
{
  int p1, p2, p3;
  tree root_var = (tree) ((void *)0);
  tree other_var = (tree) ((void *)0);
  if (((enum tree_code) (var1)->common.code) == SSA_NAME)
    p1 = ((map->var_partition)->elements[((var1)->ssa_name.version)].class_element);
  else
    {
      p1 = var_to_partition (map, var1);
      if (map->compact_to_partition)
        p1 = map->compact_to_partition[p1];
      root_var = var1;
    }
  if (((enum tree_code) (var2)->common.code) == SSA_NAME)
    p2 = ((map->var_partition)->elements[((var2)->ssa_name.version)].class_element);
  else
    {
      p2 = var_to_partition (map, var2);
      if (map->compact_to_partition)
        p2 = map->compact_to_partition[p2];
      if (!root_var || is_gimple_tmp_var (root_var))
        {
   other_var = root_var;
   root_var = var2;
 }
      else
 other_var = var2;
    }
  if (p1 == -1 || p2 == -1)
    fancy_abort ("gcc.c", 132285, "?");
  if (p1 == p2)
    p3 = p1;
  else
    p3 = partition_union (map->var_partition, p1, p2);
  if (map->partition_to_compact)
    p3 = map->partition_to_compact[p3];
  if (root_var)
    change_partition_var (map, root_var, p3);
  if (other_var)
    change_partition_var (map, other_var, p3);
  return p3;
}
void
compact_var_map (var_map map, int flags)
{
  sbitmap used;
  int x, limit, count, tmp, root, root_i;
  tree var;
  root_var_p rv = ((void *)0);
  limit = map->partition_size;
  used = sbitmap_alloc (limit);
  sbitmap_zero (used);
  if (map->partition_to_compact)
    {
      free (map->partition_to_compact);
      map->partition_to_compact = ((void *)0);
    }
  if (map->compact_to_partition)
    {
      free (map->compact_to_partition);
      map->compact_to_partition = ((void *)0);
    }
  map->num_partitions = map->partition_size;
  if (flags & 1)
    rv = root_var_init (map);
  map->partition_to_compact = (int *)xmalloc (limit * sizeof (int));
  memset (map->partition_to_compact, 0xff, (limit * sizeof (int)));
  count = 0;
  for (x = 0; x < limit; x++)
    {
      tmp = ((map->var_partition)->elements[(x)].class_element);
      if (!((used)->elms [(tmp) / ((unsigned) (8 * 4))] >> (tmp) % ((unsigned) (8 * 4)) & 1) && map->partition_to_var[tmp] != (tree) ((void *)0))
        {
   if (rv)
     {
       root = root_var_find (rv, tmp);
       root_i = root_var_first_partition (rv, root);
       if (root_var_next_partition (rv, root_i) == -1)
         continue;
     }
   ((used)->elms [(tmp) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (tmp) % ((unsigned) (8 * 4)));
   count++;
 }
    }
  if (count != limit)
    {
      map->compact_to_partition = (int *)xmalloc (count * sizeof (int));
      count = 0;
      do { unsigned int word_num_; unsigned int bit_num_ = (1) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (used)->size; unsigned long *ptr_ = (used)->elms; for (word_num_ = (1) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (x) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { map->partition_to_compact[x] = count; map->compact_to_partition[count] = x; var = map->partition_to_var[x]; if (((enum tree_code) (var)->common.code) != SSA_NAME) change_partition_var (map, var, count); count++; }; if (word_ == 0) break; } } } } while (0)
   ;
    }
  else
    {
      free (map->partition_to_compact);
      map->partition_to_compact = ((void *)0);
    }
  map->num_partitions = count;
  if (rv)
    root_var_delete (rv);
  free(used);
}
void
change_partition_var (var_map map, tree var, int part)
{
  var_ann_t ann;
  if (((enum tree_code) (var)->common.code) == SSA_NAME)
    fancy_abort ("gcc.c", 132415, "?");
  ann = var_ann (var);
  ann->out_of_ssa_tag = 1;
  (ann->partition1) = part;
  if (map->compact_to_partition)
    map->partition_to_var[map->compact_to_partition[part]] = var;
}
var_map
create_ssa_var_map (int flags)
{
  block_stmt_iterator bsi;
  basic_block bb;
  tree dest, use;
  tree stmt;
  stmt_ann_t ann;
  vuse_optype vuses;
  v_may_def_optype v_may_defs;
  v_must_def_optype v_must_defs;
  use_optype uses;
  def_optype defs;
  unsigned x;
  var_map map;
  map = init_var_map (((ssa_names)->elements_used) + 1);
  if (flags & 0x01)
    {
      map->ref_count
 = (int *)xmalloc (((((ssa_names)->elements_used) + 1) * sizeof (int)));
      memset (map->ref_count, 0, (((ssa_names)->elements_used) + 1) * sizeof (int));
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree phi, arg;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 {
   int i;
   register_ssa_partition (map, get_def_from_ptr (get_phi_result_ptr (phi)), 0);
   for (i = 0; i < (phi)->phi.num_args; i++)
     {
       arg = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
       if (((enum tree_code) (arg)->common.code) == SSA_NAME)
  register_ssa_partition (map, arg, 1);
     }
 }
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
        {
   stmt = bsi_stmt (bsi);
   get_stmt_operands (stmt);
   ann = stmt_ann (stmt);
   uses = get_use_ops (ann);
   for (x = 0; x < ((uses) ? (uses)->num_uses : 0); x++)
     {
       use = (get_use_from_ptr (get_use_op_ptr (((uses)), ((x)))));
       register_ssa_partition (map, use, 1);
     }
   defs = get_def_ops (ann);
   for (x = 0; x < ((defs) ? (defs)->num_defs : 0); x++)
     {
       dest = (get_def_from_ptr (get_def_op_ptr (((defs)), ((x)))));
       register_ssa_partition (map, dest, 0);
     }
   vuses = get_vuse_ops (ann);
   for (x = 0; x < ((vuses) ? (vuses)->num_vuses : 0); x++)
     {
       tree var = (get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((x)))));
       set_is_used (var);
     }
   v_may_defs = get_v_may_def_ops (ann);
   for (x = 0; x < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); x++)
     {
       tree var = (get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((x)))));
       set_is_used (var);
     }
   v_must_defs = get_v_must_def_ops (ann);
   for (x = 0; x < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); x++)
     {
       tree var = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((x)))));
       set_is_used (var);
     }
 }
    }
  return map;
}
static tree_live_info_p
new_tree_live_info (var_map map)
{
  tree_live_info_p live;
  int x;
  live = (tree_live_info_p) xmalloc (sizeof (struct tree_live_info_d));
  live->map = map;
  live->num_blocks = last_basic_block;
  live->global = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  live->livein = (bitmap *)xmalloc (num_var_partitions (map) * sizeof (bitmap));
  for (x = 0; x < num_var_partitions (map); x++)
    live->livein[x] = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  live->liveout = ((void *)0);
  return live;
}
void
delete_tree_live_info (tree_live_info_p live)
{
  int x;
  if (live->liveout)
    {
      for (x = live->num_blocks - 1; x >= 0; x--)
        do { if (live->liveout[x]) { bitmap_clear (live->liveout[x]); free (live->liveout[x]); (live->liveout[x]) = 0; } } while (0);
      free (live->liveout);
    }
  if (live->livein)
    {
      for (x = num_var_partitions (live->map) - 1; x >= 0; x--)
        do { if (live->livein[x]) { bitmap_clear (live->livein[x]); free (live->livein[x]); (live->livein[x]) = 0; } } while (0);
      free (live->livein);
    }
  if (live->global)
    do { if (live->global) { bitmap_clear (live->global); free (live->global); (live->global) = 0; } } while (0);
  free (live);
}
static void
live_worklist (tree_live_info_p live, varray_type stack, int i)
{
  int b;
  tree var;
  basic_block def_bb = ((void *)0);
  edge e;
  var_map map = live->map;
  var = partition_to_var (map, i);
  if ((var)->common.chain)
    def_bb = bb_for_stmt ((var)->common.chain);
  do { bitmap_element *ptr_ = (live->livein[i])->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (b) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { do { if ((stack)->elements_used >= (stack)->num_elements) (((stack)) = varray_grow ((stack), 2 * (stack)->num_elements)); (stack)->data.i[(stack)->elements_used++] = (b); } while (0); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
  while (((stack)->elements_used) > 0)
    {
      b = ((stack)->data.i[(stack)->elements_used - 1]);
      do { ((stack)->elements_used--); } while (0);
      for (e = (((basic_block_info)->data.bb[(b)]))->pred; e; e = e->pred_next)
        if (e->src != ENTRY_BLOCK_PTR)
   {
     if (e->src == def_bb)
       continue;
     if (!bitmap_bit_p (live->livein[i], e->src->index))
       {
         bitmap_set_bit (live->livein[i], e->src->index);
  do { if ((stack)->elements_used >= (stack)->num_elements) (((stack)) = varray_grow ((stack), 2 * (stack)->num_elements)); (stack)->data.i[(stack)->elements_used++] = (e->src->index); } while (0);
       }
   }
    }
}
static void
set_if_valid (var_map map, bitmap vec, tree var)
{
  int p = var_to_partition (map, var);
  if (p != -1)
    bitmap_set_bit (vec, p);
}
static void
add_livein_if_notdef (tree_live_info_p live, bitmap def_vec,
        tree var, basic_block bb)
{
  int p = var_to_partition (live->map, var);
  if (p == -1 || bb == ENTRY_BLOCK_PTR)
    return;
  if (!bitmap_bit_p (def_vec, p))
    {
      bitmap_set_bit (live->livein[p], bb->index);
      bitmap_set_bit (live->global, p);
    }
}
tree_live_info_p
calculate_live_on_entry (var_map map)
{
  tree_live_info_p live;
  int num, i;
  basic_block bb;
  bitmap saw_def;
  tree phi, var, stmt;
  tree op;
  edge e;
  varray_type stack;
  block_stmt_iterator bsi;
  use_optype uses;
  def_optype defs;
  stmt_ann_t ann;
  saw_def = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  live = new_tree_live_info (map);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      bitmap_clear (saw_def);
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 {
   for (i = 0; i < (phi)->phi.num_args; i++)
     {
       var = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
       if (!phi_ssa_name_p (var))
         continue;
       stmt = (var)->common.chain;
       e = ((phi)->phi.a[i]).e;
       if (!stmt || e->src != bb_for_stmt (stmt))
  add_livein_if_notdef (live, saw_def, var, e->src);
     }
        }
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
        {
   var = get_def_from_ptr (get_phi_result_ptr (phi));
   set_if_valid (map, saw_def, var);
 }
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
        {
   stmt = bsi_stmt (bsi);
   get_stmt_operands (stmt);
   ann = stmt_ann (stmt);
   uses = get_use_ops (ann);
   num = ((uses) ? (uses)->num_uses : 0);
   for (i = 0; i < num; i++)
     {
       op = (get_use_from_ptr (get_use_op_ptr (((uses)), ((i)))));
       add_livein_if_notdef (live, saw_def, op, bb);
     }
   defs = get_def_ops (ann);
   num = ((defs) ? (defs)->num_defs : 0);
   for (i = 0; i < num; i++)
     {
       op = (get_def_from_ptr (get_def_op_ptr (((defs)), ((i)))));
       set_if_valid (map, saw_def, op);
     }
 }
    }
  stack = varray_init (last_basic_block, VARRAY_DATA_I, "stack");
  do { bitmap_element *ptr_ = (live->global)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { live_worklist (live, stack, i); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
  do { if (saw_def) { bitmap_clear (saw_def); free (saw_def); (saw_def) = 0; } } while (0);
  return live;
}
void
calculate_live_on_exit (tree_live_info_p liveinfo)
{
  unsigned b;
  int i, x;
  bitmap *on_exit;
  basic_block bb;
  edge e;
  tree t, phi;
  bitmap on_entry;
  var_map map = liveinfo->map;
  on_exit = (bitmap *)xmalloc (last_basic_block * sizeof (bitmap));
  for (x = 0; x < last_basic_block; x++)
    on_exit[x] = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 for (i = 0; i < (phi)->phi.num_args; i++)
   {
     t = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
     e = ((phi)->phi.a[i]).e;
     if (!phi_ssa_name_p (t) || e->src == ENTRY_BLOCK_PTR)
       continue;
     set_if_valid (map, on_exit[e->src->index], t);
   }
    }
  for (i = 0; i < num_var_partitions (map); i++)
    {
      on_entry = live_entry_blocks (liveinfo, i);
      do { bitmap_element *ptr_ = (on_entry)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (b) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { for (e = (((basic_block_info)->data.bb[(b)]))->pred; e; e = e->pred_next) if (e->src != ENTRY_BLOCK_PTR) bitmap_set_bit (on_exit[e->src->index], i); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
    }
  liveinfo->liveout = on_exit;
}
tpa_p
tpa_init (var_map map)
{
  tpa_p tpa;
  int num_partitions = num_var_partitions (map);
  int x;
  if (num_partitions == 0)
    return ((void *)0);
  tpa = (tpa_p) xmalloc (sizeof (struct tree_partition_associator_d));
  tpa->num_trees = 0;
  tpa->uncompressed_num = -1;
  tpa->map = map;
  tpa->next_partition = (int *)xmalloc (num_partitions * sizeof (int));
  memset (tpa->next_partition, -1, num_partitions * sizeof (int));
  tpa->partition_to_tree_map = (int *)xmalloc (num_partitions * sizeof (int));
  memset (tpa->partition_to_tree_map, -1, num_partitions * sizeof (int));
  x = ((40) > ((num_partitions / 20)) ? (40) : ((num_partitions / 20)));
  tpa->trees = varray_init (x, VARRAY_DATA_TREE, "trees");
  tpa->first_partition = varray_init (x, VARRAY_DATA_I, "first_partition");
  return tpa;
}
void
tpa_remove_partition (tpa_p tpa, int tree_index, int partition_index)
{
  int i;
  i = tpa_first_partition (tpa, tree_index);
  if (i == partition_index)
    {
      ((tpa->first_partition)->data.i[tree_index]) = tpa->next_partition[i];
    }
  else
    {
      for ( ; i != -1; i = tpa_next_partition (tpa, i))
        {
   if (tpa->next_partition[i] == partition_index)
     {
       tpa->next_partition[i] = tpa->next_partition[partition_index];
       break;
     }
 }
    }
}
void
tpa_delete (tpa_p tpa)
{
  if (!tpa)
    return;
  free (tpa->partition_to_tree_map);
  free (tpa->next_partition);
  free (tpa);
}
int
tpa_compact (tpa_p tpa)
{
  int last, x, y, first, swap_i;
  tree swap_t;
  for (last = tpa->num_trees - 1; last > 0; last--)
    {
      first = tpa_first_partition (tpa, last);
      if (tpa_next_partition (tpa, first) != -1)
        break;
    }
  x = 0;
  while (x < last)
    {
      first = tpa_first_partition (tpa, x);
      if (tpa_next_partition (tpa, first) == -1)
        {
   swap_t = ((tpa->trees)->data.tree1[last]);
   swap_i = ((tpa->first_partition)->data.i[last]);
   ((tpa->trees)->data.tree1[last]) = ((tpa->trees)->data.tree1[x]);
   ((tpa->first_partition)->data.i[last])
     = ((tpa->first_partition)->data.i[x]);
   tpa->partition_to_tree_map[tpa_first_partition (tpa, last)] = last;
   ((tpa->trees)->data.tree1[x]) = swap_t;
   ((tpa->first_partition)->data.i[x]) = swap_i;
   for (y = tpa_first_partition (tpa, x);
        y != -1;
        y = tpa_next_partition (tpa, y))
     tpa->partition_to_tree_map[y] = x;
   last--;
   for (; last > x; last--)
     {
       first = tpa_first_partition (tpa, last);
       if (tpa_next_partition (tpa, first) != -1)
  break;
     }
 }
      x++;
    }
  first = tpa_first_partition (tpa, x);
  if (tpa_next_partition (tpa, first) != -1)
    x++;
  tpa->uncompressed_num = tpa->num_trees;
  tpa->num_trees = x;
  return last;
}
root_var_p
root_var_init (var_map map)
{
  root_var_p rv;
  int num_partitions = num_var_partitions (map);
  int x, p;
  tree t;
  var_ann_t ann;
  sbitmap seen;
  rv = tpa_init (map);
  if (!rv)
    return ((void *)0);
  seen = sbitmap_alloc (num_partitions);
  sbitmap_zero (seen);
  for (x = num_partitions - 1; x >= 0; x--)
    {
      t = partition_to_var (map, x);
      if (!t)
        continue;
      p = var_to_partition (map, t);
      if (((seen)->elms [(p) / ((unsigned) (8 * 4))] >> (p) % ((unsigned) (8 * 4)) & 1))
        continue;
      ((seen)->elms [(p) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (p) % ((unsigned) (8 * 4)));
      if (((enum tree_code) (t)->common.code) == SSA_NAME)
 t = (t)->ssa_name.var;
      ann = var_ann (t);
      if (ann->root_var_processed)
        {
   rv->next_partition[p] = ((rv->first_partition)->data.i[(ann->root_index)])
                                    ;
   ((rv->first_partition)->data.i[(ann->root_index)]) = p;
 }
      else
        {
   ann->root_var_processed = 1;
   (ann->root_index) = rv->num_trees++;
   do { if ((rv->trees)->elements_used >= (rv->trees)->num_elements) (((rv->trees)) = varray_grow ((rv->trees), 2 * (rv->trees)->num_elements)); (rv->trees)->data.tree1[(rv->trees)->elements_used++] = (t); } while (0);
   do { if ((rv->first_partition)->elements_used >= (rv->first_partition)->num_elements) (((rv->first_partition)) = varray_grow ((rv->first_partition), 2 * (rv->first_partition)->num_elements)); (rv->first_partition)->data.i[(rv->first_partition)->elements_used++] = (p); } while (0);
 }
      rv->partition_to_tree_map[p] = (ann->root_index);
    }
  for (x = 0; x < rv->num_trees; x++)
    {
      t = ((rv->trees)->data.tree1[x]);
      var_ann (t)->root_var_processed = 0;
    }
  free(seen);
  return rv;
}
type_var_p
type_var_init (var_map map)
{
  type_var_p tv;
  int x, y, p;
  int num_partitions = num_var_partitions (map);
  tree t;
  sbitmap seen;
  seen = sbitmap_alloc (num_partitions);
  sbitmap_zero (seen);
  tv = tpa_init (map);
  if (!tv)
    return ((void *)0);
  for (x = num_partitions - 1; x >= 0; x--)
    {
      t = partition_to_var (map, x);
      if (!t
   || ((t)->common.volatile_flag)
   || ((enum tree_code) (t)->common.code) == RESULT_DECL
         || ((enum tree_code) (t)->common.code) == PARM_DECL
   || ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd')
       && (((t)->decl.regdecl_flag)
    || !((t)->decl.artificial_flag)
    || ((t)->decl.rtl != ((void *)0)))))
        continue;
      p = var_to_partition (map, t);
      if (((seen)->elms [(p) / ((unsigned) (8 * 4))] >> (p) % ((unsigned) (8 * 4)) & 1))
        continue;
      ((seen)->elms [(p) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (p) % ((unsigned) (8 * 4)));
      t = ((t)->common.type);
      for (y = 0; y < tv->num_trees; y++)
        if (t == ((tv->trees)->data.tree1[y]))
   break;
      if (y == tv->num_trees)
        {
   tv->num_trees++;
   do { if ((tv->trees)->elements_used >= (tv->trees)->num_elements) (((tv->trees)) = varray_grow ((tv->trees), 2 * (tv->trees)->num_elements)); (tv->trees)->data.tree1[(tv->trees)->elements_used++] = (t); } while (0);
   do { if ((tv->first_partition)->elements_used >= (tv->first_partition)->num_elements) (((tv->first_partition)) = varray_grow ((tv->first_partition), 2 * (tv->first_partition)->num_elements)); (tv->first_partition)->data.i[(tv->first_partition)->elements_used++] = (p); } while (0);
 }
      else
        {
   tv->next_partition[p] = ((tv->first_partition)->data.i[y]);
   ((tv->first_partition)->data.i[y]) = p;
 }
      tv->partition_to_tree_map[p] = y;
    }
  free(seen);
  return tv;
}
coalesce_list_p
create_coalesce_list (var_map map)
{
  coalesce_list_p list;
  list = (coalesce_list_p) xmalloc (sizeof (struct coalesce_list_d));
  list->map = map;
  list->add_mode = 1;
  list->list = (partition_pair_p *) xcalloc (num_var_partitions (map),
          sizeof (struct partition_pair_d));
  return list;
}
void
delete_coalesce_list (coalesce_list_p cl)
{
  free (cl->list);
  free (cl);
}
static partition_pair_p
find_partition_pair (coalesce_list_p cl, int p1, int p2, unsigned char create)
{
  partition_pair_p node, tmp;
  int s;
  if (p2 < p1)
    {
      s = p1;
      p1 = p2;
      p2 = s;
    }
  tmp = ((void *)0);
  for (node = cl->list[p1]; node; node = node->next)
    {
      if (node->second_partition == p2)
        return node;
      else
        if (node->second_partition > p2)
   break;
     tmp = node;
    }
  if (!create)
    return ((void *)0);
  node = (partition_pair_p) xmalloc (sizeof (struct partition_pair_d));
  node->first_partition = p1;
  node->second_partition = p2;
  node->cost = 0;
  if (tmp != ((void *)0))
    {
      node->next = tmp->next;
      tmp->next = node;
    }
  else
    {
      node->next = cl->list[p1];
      cl->list[p1] = node;
    }
  return node;
}
void
add_coalesce (coalesce_list_p cl, int p1, int p2, int value1)
{
  partition_pair_p node;
  if (p1 == p2)
    return;
  node = find_partition_pair (cl, p1, p2, 1);
  node->cost += value1;
}
static
int compare_pairs (const void *p1, const void *p2)
{
  return (*(partition_pair_p *)p2)->cost - (*(partition_pair_p *)p1)->cost;
}
void
sort_coalesce_list (coalesce_list_p cl)
{
  int x, num, count;
  partition_pair_p chain, p;
  partition_pair_p *list;
  if (!cl->add_mode)
    fancy_abort ("gcc.c", 133323, "?");
  cl->add_mode = 0;
  num = 0;
  chain = ((void *)0);
  for (x = 0; x < num_var_partitions (cl->map); x++)
    if (cl->list[x] != ((void *)0))
      {
        for (p = cl->list[x]; p->next != ((void *)0); p = p->next)
   num++;
 num++;
 p->next = chain;
 chain = cl->list[x];
 cl->list[x] = ((void *)0);
      }
  if (num > 2)
    {
      list = xmalloc (sizeof (partition_pair_p) * num);
      count = 0;
      for (p = chain; p != ((void *)0); p = p->next)
 list[count++] = p;
      qsort (list, count, sizeof (partition_pair_p), compare_pairs);
      p = list[0];
      for (x = 1; x < num; x++)
 {
   p->next = list[x];
   p = list[x];
 }
      p->next = ((void *)0);
      cl->list[0] = list[0];
      free (list);
    }
  else
    {
      cl->list[0] = chain;
      if (num == 2)
 {
   if (chain->cost < chain->next->cost)
     {
       cl->list[0] = chain->next;
       cl->list[0]->next = chain;
       chain->next = ((void *)0);
     }
 }
    }
}
int
pop_best_coalesce (coalesce_list_p cl, int *p1, int *p2)
{
  partition_pair_p node;
  int ret;
  if (cl->add_mode)
    fancy_abort ("gcc.c", 133394, "?");
  node = cl->list[0];
  if (!node)
    return -1;
  cl->list[0] = node->next;
  *p1 = node->first_partition;
  *p2 = node->second_partition;
  ret = node->cost;
  free (node);
  return ret;
}
static void
add_conflicts_if_valid (tpa_p tpa, conflict_graph graph,
   var_map map, bitmap vec, tree var)
{
  int p, y, first;
  p = var_to_partition (map, var);
  if (p != -1)
    {
      bitmap_clear_bit (vec, p);
      first = tpa_find_tree (tpa, p);
      if (first == -1)
        return;
      for (y = tpa_first_partition (tpa, first);
    y != -1;
    y = tpa_next_partition (tpa, y))
 {
   if (bitmap_bit_p (vec, y))
     conflict_graph_add (graph, p, y);
 }
    }
}
conflict_graph
build_tree_conflict_graph (tree_live_info_p liveinfo, tpa_p tpa,
      coalesce_list_p cl)
{
  conflict_graph graph;
  var_map map;
  bitmap live;
  int num, x, y, i;
  basic_block bb;
  varray_type partition_link, tpa_to_clear, tpa_nodes;
  def_optype defs;
  use_optype uses;
  unsigned l;
  map = live_var_map (liveinfo);
  graph = conflict_graph_new (num_var_partitions (map));
  if (tpa_num_trees (tpa) == 0)
    return graph;
  live = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  partition_link = varray_init (num_var_partitions (map) + 1, VARRAY_DATA_I, "part_link");
  tpa_nodes = varray_init (tpa_num_trees (tpa), VARRAY_DATA_I, "tpa nodes");
  tpa_to_clear = varray_init (50, VARRAY_DATA_I, "tpa to clear");
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      block_stmt_iterator bsi;
      tree phi;
      bitmap_copy (live, live_on_exit (liveinfo, bb));
      for (bsi = bsi_last (bb); !bsi_end_p (bsi); bsi_prev (&bsi))
        {
   unsigned char is_a_copy = 0;
   tree stmt = bsi_stmt (bsi);
   stmt_ann_t ann;
   get_stmt_operands (stmt);
   ann = stmt_ann (stmt);
   if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR)
     {
       tree lhs = ((stmt)->exp.operands[0]);
       tree rhs = ((stmt)->exp.operands[1]);
       int p1, p2;
       int bit;
       if ((tree_code_type[(int) (((enum tree_code) (lhs)->common.code))] == 'd') || ((enum tree_code) (lhs)->common.code) == SSA_NAME)
  p1 = var_to_partition (map, lhs);
       else
  p1 = -1;
       if ((tree_code_type[(int) (((enum tree_code) (rhs)->common.code))] == 'd') || ((enum tree_code) (rhs)->common.code) == SSA_NAME)
  p2 = var_to_partition (map, rhs);
       else
  p2 = -1;
       if (p1 != -1 && p2 != -1)
  {
    is_a_copy = 1;
    bit = bitmap_bit_p (live, p2);
    if (bit)
      bitmap_clear_bit (live, p2);
    add_conflicts_if_valid (tpa, graph, map, live, lhs);
    if (bit)
      bitmap_set_bit (live, p2);
    if (cl)
      add_coalesce (cl, p1, p2, 1);
    set_if_valid (map, live, rhs);
  }
     }
   if (!is_a_copy)
     {
       tree var;
       defs = get_def_ops (ann);
       num = ((defs) ? (defs)->num_defs : 0);
       for (x = 0; x < num; x++)
  {
    var = (get_def_from_ptr (get_def_op_ptr (((defs)), ((x)))));
    add_conflicts_if_valid (tpa, graph, map, live, var);
  }
       uses = get_use_ops (ann);
       num = ((uses) ? (uses)->num_uses : 0);
       for (x = 0; x < num; x++)
  {
    var = (get_use_from_ptr (get_use_op_ptr (((uses)), ((x)))));
    set_if_valid (map, live, var);
  }
     }
 }
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 {
   tree result = get_def_from_ptr (get_phi_result_ptr (phi));
   int p = var_to_partition (map, result);
   if (p != -1 && ! bitmap_bit_p (live, p))
     add_conflicts_if_valid (tpa, graph, map, live, result);
 }
      do { bitmap_element *ptr_ = (live)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (x) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { i = tpa_find_tree (tpa, x); if (i != -1) { int start = ((tpa_nodes)->data.i[i]); if (!start) do { if ((tpa_to_clear)->elements_used >= (tpa_to_clear)->num_elements) (((tpa_to_clear)) = varray_grow ((tpa_to_clear), 2 * (tpa_to_clear)->num_elements)); (tpa_to_clear)->data.i[(tpa_to_clear)->elements_used++] = (i); } while (0); for (y = start; y != 0; y = ((partition_link)->data.i[y])) conflict_graph_add (graph, x, y - 1); ((tpa_nodes)->data.i[i]) = x + 1; ((partition_link)->data.i[x + 1]) = start; } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
 for (l = 0; l < ((tpa_to_clear)->elements_used); l++)
   ((tpa_nodes)->data.i[((tpa_to_clear)->data.i[l])]) = 0;
 ((tpa_to_clear)->elements_used = 0);
    }
  do { if (live) { bitmap_clear (live); free (live); (live) = 0; } } while (0);
  return graph;
}
void
coalesce_tpa_members (tpa_p tpa, conflict_graph graph, var_map map,
        coalesce_list_p cl, FILE *debug)
{
  int x, y, z, w;
  tree var, tmp;
  if (cl)
    {
      while (pop_best_coalesce (cl, &x, &y) != -1)
        {
   if (debug)
     {
       fprintf (debug, "Coalesce list: (%d)", x);
       print_generic_expr (debug, partition_to_var (map, x), (1 << 1));
       fprintf (debug, " & (%d)", y);
       print_generic_expr (debug, partition_to_var (map, y), (1 << 1));
     }
   w = tpa_find_tree (tpa, x);
   z = tpa_find_tree (tpa, y);
   if (w != z || w == -1 || z == -1)
     {
       if (debug)
  {
    if (w != z)
      fprintf (debug, ": Fail, Non-matching TPA's\n");
    if (w == -1)
      fprintf (debug, ": Fail %d non TPA.\n", x);
    else
      fprintf (debug, ": Fail %d non TPA.\n", y);
  }
       continue;
     }
   var = partition_to_var (map, x);
   tmp = partition_to_var (map, y);
   x = var_to_partition (map, var);
   y = var_to_partition (map, tmp);
   if (debug)
     fprintf (debug, " [map: %d, %d] ", x, y);
   if (x == y)
     {
       if (debug)
  fprintf (debug, ": Already Coalesced.\n");
       continue;
     }
   if (!conflict_graph_conflict_p (graph, x, y))
     {
       z = var_union (map, var, tmp);
       if (z == -1)
         {
    if (debug)
      fprintf (debug, ": Unable to perform partition union.\n");
    continue;
  }
       if (z == x)
         {
    conflict_graph_merge_regs (graph, x, y);
    w = tpa_find_tree (tpa, y);
    tpa_remove_partition (tpa, w, y);
  }
       else
         {
    conflict_graph_merge_regs (graph, y, x);
    w = tpa_find_tree (tpa, x);
    tpa_remove_partition (tpa, w, x);
  }
       if (debug)
  fprintf (debug, ": Success -> %d\n", z);
     }
   else
     if (debug)
       fprintf (debug, ": Fail due to conflict\n");
 }
      return;
    }
  for (x = 0; x < tpa_num_trees (tpa); x++)
    {
      while (tpa_first_partition (tpa, x) != -1)
        {
   int p1, p2;
   y = tpa_first_partition (tpa, x);
   tpa_remove_partition (tpa, x, y);
   var = partition_to_var (map, y);
   p1 = var_to_partition (map, var);
   for (z = tpa_next_partition (tpa, y);
        z != -1;
        z = tpa_next_partition (tpa, z))
     {
       tmp = partition_to_var (map, z);
       p2 = var_to_partition (map, tmp);
       if (debug)
  {
    fprintf (debug, "Coalesce : ");
    print_generic_expr (debug, var, (1 << 1));
    fprintf (debug, " &");
    print_generic_expr (debug, tmp, (1 << 1));
    fprintf (debug, "  (%d ,%d)", p1, p2);
  }
       if (tmp == var)
         {
    tpa_remove_partition (tpa, x, z);
    if (debug)
      fprintf (debug, ": Already coalesced\n");
  }
       else
  if (!conflict_graph_conflict_p (graph, p1, p2))
    {
      int v;
      if (tpa_find_tree (tpa, y) == -1
   || tpa_find_tree (tpa, z) == -1)
        {
   if (debug)
     fprintf (debug, ": Fail non-TPA member\n");
   continue;
        }
      if ((v = var_union (map, var, tmp)) == -1)
        {
   if (debug)
     fprintf (debug, ": Fail cannot combine partitions\n");
   continue;
        }
      tpa_remove_partition (tpa, x, z);
      if (v == p1)
        conflict_graph_merge_regs (graph, v, z);
      else
        {
   conflict_graph_merge_regs (graph, v, y);
   p1 = v;
        }
      var = partition_to_var (map, p1);
      if (debug)
        fprintf (debug, ": Success -> %d\n", v);
    }
  else
    if (debug)
      fprintf (debug, ": Fail, Conflict\n");
     }
 }
    }
}
void
dump_coalesce_list (FILE *f, coalesce_list_p cl)
{
  partition_pair_p node;
  int x, num;
  tree var;
  if (cl->add_mode)
    {
      fprintf (f, "Coalesce List:\n");
      num = num_var_partitions (cl->map);
      for (x = 0; x < num; x++)
        {
   node = cl->list[x];
   if (node)
     {
       fprintf (f, "[");
       print_generic_expr (f, partition_to_var (cl->map, x), (1 << 1));
       fprintf (f, "] - ");
       for ( ; node; node = node->next)
         {
    var = partition_to_var (cl->map, node->second_partition);
    print_generic_expr (f, var, (1 << 1));
    fprintf (f, "(%1d), ", node->cost);
  }
       fprintf (f, "\n");
     }
 }
    }
  else
    {
      fprintf (f, "Sorted Coalesce list:\n");
      for (node = cl->list[0]; node; node = node->next)
        {
   fprintf (f, "(%d) ", node->cost);
   var = partition_to_var (cl->map, node->first_partition);
   print_generic_expr (f, var, (1 << 1));
   fprintf (f, " : ");
   var = partition_to_var (cl->map, node->second_partition);
   print_generic_expr (f, var, (1 << 1));
   fprintf (f, "\n");
 }
    }
}
void
tpa_dump (FILE *f, tpa_p tpa)
{
  int x, i;
  if (!tpa)
    return;
  for (x = 0; x < tpa_num_trees (tpa); x++)
    {
      print_generic_expr (f, tpa_tree (tpa, x), (1 << 1));
      fprintf (f, " : (");
      for (i = tpa_first_partition (tpa, x);
    i != -1;
    i = tpa_next_partition (tpa, i))
 {
   fprintf (f, "(%d)",i);
   print_generic_expr (f, partition_to_var (tpa->map, i), (1 << 1));
   fprintf (f, " ");
 }
      fprintf (f, ")\n");
    }
  fflush (f);
}
void
dump_var_map (FILE *f, var_map map)
{
  int t;
  unsigned x, y;
  int p;
  fprintf (f, "\nPartition map \n\n");
  for (x = 0; x < map->num_partitions; x++)
    {
      if (map->compact_to_partition != ((void *)0))
 p = map->compact_to_partition[x];
      else
 p = x;
      if (map->partition_to_var[p] == (tree) ((void *)0))
        continue;
      t = 0;
      for (y = 1; y < ((ssa_names)->elements_used); y++)
        {
   p = ((map->var_partition)->elements[(y)].class_element);
   if (map->partition_to_compact)
     p = map->partition_to_compact[p];
   if (p == (int)x)
     {
       if (t++ == 0)
         {
    fprintf(f, "Partition %d (", x);
    print_generic_expr (f, partition_to_var (map, p), (1 << 1));
    fprintf (f, " - ");
  }
       fprintf (f, "%d ", y);
     }
 }
      if (t != 0)
 fprintf (f, ")\n");
    }
  fprintf (f, "\n");
}
void
dump_live_info (FILE *f, tree_live_info_p live, int flag)
{
  basic_block bb;
  int i;
  var_map map = live->map;
  if ((flag & 0x01) && live->livein)
    {
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   fprintf (f, "\nLive on entry to BB%d : ", bb->index);
   for (i = 0; i < num_var_partitions (map); i++)
     {
       if (bitmap_bit_p (live_entry_blocks (live, i), bb->index))
         {
    print_generic_expr (f, partition_to_var (map, i), (1 << 1));
    fprintf (f, "  ");
  }
     }
   fprintf (f, "\n");
 }
    }
  if ((flag & 0x02) && live->liveout)
    {
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   fprintf (f, "\nLive on exit from BB%d : ", bb->index);
   do { bitmap_element *ptr_ = (live->liveout[bb->index])->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { print_generic_expr (f, partition_to_var (map, i), (1 << 1)); fprintf (f, "  "); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
   fprintf (f, "\n");
 }
    }
}
void
register_ssa_partitions_for_vars (bitmap vars, var_map map)
{
  basic_block bb;
  if (bitmap_first_set_bit (vars) >= 0)
    {
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   block_stmt_iterator bsi;
   tree next;
   tree phi;
   for (phi = phi_nodes (bb); phi; phi = next)
     {
       tree result = (get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.var;
       next = (((phi))->common.chain);
       if (bitmap_bit_p (vars, var_ann (result)->uid))
  {
    if (! is_gimple_reg (result))
      remove_phi_node (phi, (tree) ((void *)0), bb);
    else
      {
        int i;
        register_ssa_partition (map, get_def_from_ptr (get_phi_result_ptr (phi)), 0);
        for (i = 0; i < (phi)->phi.num_args; i++)
   {
     tree arg = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
     if (((enum tree_code) (arg)->common.code) != SSA_NAME)
       continue;
     if (!bitmap_bit_p (vars,
          var_ann ((arg)->ssa_name.var)->uid))
       continue;
     register_ssa_partition (map, arg, 1);
          }
      }
  }
     }
   for (bsi = bsi_start (bb); ! bsi_end_p (bsi); bsi_next (&bsi))
     {
       stmt_ann_t ann = stmt_ann (bsi_stmt (bsi));
       use_optype uses = get_use_ops (ann);
       def_optype defs = get_def_ops (ann);
       unsigned int i;
       for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
  {
    tree op = (get_use_from_ptr (get_use_op_ptr (((uses)), ((i)))));
    if (((enum tree_code) (op)->common.code) == SSA_NAME
        && bitmap_bit_p (vars, var_ann ((op)->ssa_name.var)->uid))
      register_ssa_partition (map, op, 1);
  }
       for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
  {
    tree op = (get_def_from_ptr (get_def_op_ptr (((defs)), ((i)))));
    if (((enum tree_code) (op)->common.code) == SSA_NAME
     && bitmap_bit_p (vars,
        var_ann ((op)->ssa_name.var)->uid))
      register_ssa_partition (map, op, 0);
  }
     }
 }
    }
}
static varray_type build_defs;
static varray_type build_uses;
static varray_type build_v_may_defs;
static varray_type build_vuses;
static varray_type build_v_must_defs;
typedef struct voperands_d
{
  v_may_def_optype v_may_def_ops;
  vuse_optype vuse_ops;
  v_must_def_optype v_must_def_ops;
} *voperands_t;
static void note_addressable (tree, stmt_ann_t);
static void get_expr_operands (tree, tree *, int, voperands_t);
static void append_def (tree *, tree);
static void append_use (tree *, tree);
static void append_v_may_def (tree, tree, voperands_t);
static void append_v_must_def (tree, tree, voperands_t);
static void add_call_clobber_ops (tree, voperands_t);
static void add_call_read_ops (tree, voperands_t);
static void add_stmt_operand (tree *, tree, int, voperands_t);
static def_optype
allocate_def_optype (unsigned num)
{
  def_optype def_ops;
  unsigned size;
  size = sizeof (struct def_optype_d) + sizeof (tree *) * (num - 1);
  def_ops = ggc_alloc_stat (size );
  def_ops->num_defs = num;
  return def_ops;
}
static use_optype
allocate_use_optype (unsigned num)
{
  use_optype use_ops;
  unsigned size;
  size = sizeof (struct use_optype_d) + sizeof (tree *) * (num - 1);
  use_ops = ggc_alloc_stat (size );
  use_ops->num_uses = num;
  return use_ops;
}
static v_may_def_optype
allocate_v_may_def_optype (unsigned num)
{
  v_may_def_optype v_may_def_ops;
  unsigned size;
  size = sizeof (struct v_may_def_optype_d) + sizeof (tree) * ((num * 2) - 1);
  v_may_def_ops = ggc_alloc_stat (size );
  v_may_def_ops->num_v_may_defs = num;
  return v_may_def_ops;
}
static vuse_optype
allocate_vuse_optype (unsigned num)
{
  vuse_optype vuse_ops;
  unsigned size;
  size = sizeof (struct vuse_optype_d) + sizeof (tree) * (num - 1);
  vuse_ops = ggc_alloc_stat (size );
  vuse_ops->num_vuses = num;
  return vuse_ops;
}
static v_must_def_optype
allocate_v_must_def_optype (unsigned num)
{
  v_must_def_optype v_must_def_ops;
  unsigned size;
  size = sizeof (struct v_must_def_optype_d) + sizeof (tree *) * (num - 1);
  v_must_def_ops = ggc_alloc_stat (size );
  v_must_def_ops->num_v_must_defs = num;
  return v_must_def_ops;
}
static void
free_uses (use_optype *uses, unsigned char dealloc)
{
  if (*uses)
    {
      if (dealloc)
 ggc_free (*uses);
      *uses = ((void *)0);
    }
}
static void
free_defs (def_optype *defs, unsigned char dealloc)
{
  if (*defs)
    {
      if (dealloc)
 ggc_free (*defs);
      *defs = ((void *)0);
    }
}
static void
free_vuses (vuse_optype *vuses, unsigned char dealloc)
{
  if (*vuses)
    {
      if (dealloc)
 ggc_free (*vuses);
      *vuses = ((void *)0);
    }
}
static void
free_v_may_defs (v_may_def_optype *v_may_defs, unsigned char dealloc)
{
  if (*v_may_defs)
    {
      if (dealloc)
 ggc_free (*v_may_defs);
      *v_may_defs = ((void *)0);
    }
}
static void
free_v_must_defs (v_must_def_optype *v_must_defs, unsigned char dealloc)
{
  if (*v_must_defs)
    {
      if (dealloc)
 ggc_free (*v_must_defs);
      *v_must_defs = ((void *)0);
    }
}
void
remove_vuses (tree stmt)
{
  stmt_ann_t ann;
  ann = stmt_ann (stmt);
  if (ann)
    free_vuses (&(ann->vuse_ops), 1);
}
void
remove_v_may_defs (tree stmt)
{
  stmt_ann_t ann;
  ann = stmt_ann (stmt);
  if (ann)
    free_v_may_defs (&(ann->v_may_def_ops), 1);
}
void
remove_v_must_defs (tree stmt)
{
  stmt_ann_t ann;
  ann = stmt_ann (stmt);
  if (ann)
    free_v_must_defs (&(ann->v_must_def_ops), 1);
}
void
init_ssa_operands (void)
{
  build_defs = varray_init (5, VARRAY_DATA_TREE_PTR, "build defs");
  build_uses = varray_init (10, VARRAY_DATA_TREE_PTR, "build uses");
  build_v_may_defs = varray_init (10, VARRAY_DATA_TREE, "build v_may_defs");
  build_vuses = varray_init (10, VARRAY_DATA_TREE, "build vuses");
  build_v_must_defs = varray_init (10, VARRAY_DATA_TREE, "build v_must_defs");
}
void
fini_ssa_operands (void)
{
}
static void
finalize_ssa_defs (tree stmt)
{
  unsigned num, x;
  stmt_ann_t ann;
  def_optype def_ops;
  num = ((build_defs)->elements_used);
  if (num == 0)
    return;
  def_ops = allocate_def_optype (num);
  for (x = 0; x < num ; x++)
    def_ops->defs[x].def = ((build_defs)->data.tp[x]);
  ((build_defs)->elements_used = 0);
  ann = stmt_ann (stmt);
  ann->def_ops = def_ops;
}
static void
finalize_ssa_uses (tree stmt)
{
  unsigned num, x;
  use_optype use_ops;
  stmt_ann_t ann;
  num = ((build_uses)->elements_used);
  if (num == 0)
    return;
  use_ops = allocate_use_optype (num);
  for (x = 0; x < num ; x++)
    use_ops->uses[x].use = ((build_uses)->data.tp[x]);
  ((build_uses)->elements_used = 0);
  ann = stmt_ann (stmt);
  ann->use_ops = use_ops;
}
static void
finalize_ssa_v_may_defs (tree stmt)
{
  unsigned num, x;
  v_may_def_optype v_may_def_ops;
  stmt_ann_t ann;
  num = ((build_v_may_defs)->elements_used);
  if (num == 0)
    return;
  v_may_def_ops = allocate_v_may_def_optype (num / 2);
  for (x = 0; x < num; x++)
    v_may_def_ops->v_may_defs[x] = ((build_v_may_defs)->data.tree1[x]);
  varray_clear(build_v_may_defs);
  ann = stmt_ann (stmt);
  ann->v_may_def_ops = v_may_def_ops;
}
static void
finalize_ssa_vuses (tree stmt)
{
  unsigned num, x;
  stmt_ann_t ann;
  vuse_optype vuse_ops;
  v_may_def_optype v_may_defs;
  num = ((build_vuses)->elements_used);
  if (num == 0)
    return;
  ann = stmt_ann (stmt);
  v_may_defs = get_v_may_def_ops (ann);
  if (((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0) > 0)
    {
      size_t i, j;
      for (i = 0; i < ((build_vuses)->elements_used); i++)
 {
   unsigned char found = 0;
   for (j = 0; j < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); j++)
     {
       tree vuse_var, v_may_def_var;
       tree vuse = ((build_vuses)->data.tree1[i]);
       tree v_may_def = (get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((j)))));
       if (((enum tree_code) (vuse)->common.code) == SSA_NAME)
  vuse_var = (vuse)->ssa_name.var;
       else
  vuse_var = vuse;
       if (((enum tree_code) (v_may_def)->common.code) == SSA_NAME)
  v_may_def_var = (v_may_def)->ssa_name.var;
       else
  v_may_def_var = v_may_def;
     if (vuse_var == v_may_def_var)
       {
  found = 1;
  break;
       }
     }
   if (found)
     {
       if (i != ((build_vuses)->elements_used) - 1)
  {
    ((build_vuses)->data.tree1[i])
      = ((build_vuses)->data.tree1[((build_vuses)->elements_used) - 1])
                                            ;
  }
       do { ((build_vuses)->elements_used--); } while (0);
       i--;
     }
 }
    }
  num = ((build_vuses)->elements_used);
  if (num == 0)
    return;
  vuse_ops = allocate_vuse_optype (num);
  for (x = 0; x < num; x++)
    vuse_ops->vuses[x] = ((build_vuses)->data.tree1[x]);
  varray_clear(build_vuses);
  ann->vuse_ops = vuse_ops;
}
static void
finalize_ssa_v_must_defs (tree stmt)
{
  unsigned num, x;
  stmt_ann_t ann;
  v_must_def_optype v_must_def_ops;
  num = ((build_v_must_defs)->elements_used);
  if (num == 0)
    return;
  v_must_def_ops = allocate_v_must_def_optype (num);
  for (x = 0; x < num ; x++)
    v_must_def_ops->v_must_defs[x] = ((build_v_must_defs)->data.tree1[x]);
  ((build_v_must_defs)->elements_used = 0);
  ann = stmt_ann (stmt);
  ann->v_must_def_ops = v_must_def_ops;
}
extern void
finalize_ssa_stmt_operands (tree stmt)
{
  finalize_ssa_defs (stmt);
  finalize_ssa_uses (stmt);
  finalize_ssa_v_must_defs (stmt);
  finalize_ssa_v_may_defs (stmt);
  finalize_ssa_vuses (stmt);
}
extern void
verify_start_operands (tree stmt )
{
}
static void
append_def (tree *def_p, tree stmt )
{
  do { if ((build_defs)->elements_used >= (build_defs)->num_elements) (((build_defs)) = varray_grow ((build_defs), 2 * (build_defs)->num_elements)); (build_defs)->data.tp[(build_defs)->elements_used++] = (def_p); } while (0);
}
static void
append_use (tree *use_p, tree stmt )
{
  do { if ((build_uses)->elements_used >= (build_uses)->num_elements) (((build_uses)) = varray_grow ((build_uses), 2 * (build_uses)->num_elements)); (build_uses)->data.tp[(build_uses)->elements_used++] = (use_p); } while (0);
}
static void
append_v_may_def (tree var, tree stmt, voperands_t prev_vops)
{
  stmt_ann_t ann;
  size_t i;
  tree result, source;
  ann = stmt_ann (stmt);
  for (i = 0; i < ((build_v_may_defs)->elements_used); i += 2)
    {
      tree result = ((build_v_may_defs)->data.tree1[i]);
      if (var == result
   || (((enum tree_code) (result)->common.code) == SSA_NAME
       && var == (result)->ssa_name.var))
 return;
    }
  result = (tree) ((void *)0);
  source = (tree) ((void *)0);
  if (prev_vops)
    for (i = 0; i < ((prev_vops->v_may_def_ops) ? (prev_vops->v_may_def_ops)->num_v_may_defs : 0); i++)
      {
 result = (get_def_from_ptr (get_v_may_def_result_ptr (((prev_vops->v_may_def_ops)), ((i)))));
 if (result == var
     || (((enum tree_code) (result)->common.code) == SSA_NAME
  && (result)->ssa_name.var == var))
   {
     source = (get_use_from_ptr (get_v_may_def_op_ptr (((prev_vops->v_may_def_ops)), ((i)))));
     break;
   }
      }
  if (source == (tree) ((void *)0))
    {
      result = var;
      source = var;
    }
  do { if ((build_v_may_defs)->elements_used >= (build_v_may_defs)->num_elements) (((build_v_may_defs)) = varray_grow ((build_v_may_defs), 2 * (build_v_may_defs)->num_elements)); (build_v_may_defs)->data.tree1[(build_v_may_defs)->elements_used++] = (result); } while (0);
  do { if ((build_v_may_defs)->elements_used >= (build_v_may_defs)->num_elements) (((build_v_may_defs)) = varray_grow ((build_v_may_defs), 2 * (build_v_may_defs)->num_elements)); (build_v_may_defs)->data.tree1[(build_v_may_defs)->elements_used++] = (source); } while (0);
}
static void
append_vuse (tree var, tree stmt, voperands_t prev_vops)
{
  stmt_ann_t ann;
  size_t i;
  unsigned char found;
  tree vuse;
  ann = stmt_ann (stmt);
  for (i = 0; i < ((build_vuses)->elements_used); i++)
    {
      tree vuse_var = ((build_vuses)->data.tree1[i]);
      if (var == vuse_var
   || (((enum tree_code) (vuse_var)->common.code) == SSA_NAME
       && var == (vuse_var)->ssa_name.var))
 return;
    }
  found = 0;
  vuse = (tree) ((void *)0);
  if (prev_vops)
    for (i = 0; i < ((prev_vops->vuse_ops) ? (prev_vops->vuse_ops)->num_vuses : 0); i++)
      {
 vuse = (get_use_from_ptr (get_vuse_op_ptr (((prev_vops->vuse_ops)), ((i)))));
 if (vuse == var
     || (((enum tree_code) (vuse)->common.code) == SSA_NAME
  && (vuse)->ssa_name.var == var))
   {
     found = 1;
     break;
   }
      }
  if (found)
    var = vuse;
  do { if ((build_vuses)->elements_used >= (build_vuses)->num_elements) (((build_vuses)) = varray_grow ((build_vuses), 2 * (build_vuses)->num_elements)); (build_vuses)->data.tree1[(build_vuses)->elements_used++] = (var); } while (0);
}
static void
append_v_must_def (tree var, tree stmt, voperands_t prev_vops)
{
  stmt_ann_t ann;
  size_t i;
  unsigned char found;
  tree v_must_def;
  ann = stmt_ann (stmt);
  for (i = 0; i < ((build_v_must_defs)->elements_used); i++)
    {
      tree v_must_def_var = ((build_v_must_defs)->data.tree1[i]);
      if (var == v_must_def_var
   || (((enum tree_code) (v_must_def_var)->common.code) == SSA_NAME
       && var == (v_must_def_var)->ssa_name.var))
 return;
    }
  found = 0;
  v_must_def = (tree) ((void *)0);
  if (prev_vops)
    for (i = 0; i < ((prev_vops->v_must_def_ops) ? (prev_vops->v_must_def_ops)->num_v_must_defs : 0); i++)
      {
 v_must_def = (get_def_from_ptr (get_v_must_def_op_ptr (((prev_vops->v_must_def_ops)), ((i)))));
 if (v_must_def == var
     || (((enum tree_code) (v_must_def)->common.code) == SSA_NAME
  && (v_must_def)->ssa_name.var == var))
   {
     found = 1;
     break;
   }
      }
  if (found)
    var = v_must_def;
  do { if ((build_v_must_defs)->elements_used >= (build_v_must_defs)->num_elements) (((build_v_must_defs)) = varray_grow ((build_v_must_defs), 2 * (build_v_must_defs)->num_elements)); (build_v_must_defs)->data.tree1[(build_v_must_defs)->elements_used++] = (var); } while (0);
}
void
add_vuse (tree var, tree stmt)
{
  append_vuse (var, stmt, ((void *)0));
}
void
get_stmt_operands (tree stmt)
{
  enum tree_code code;
  stmt_ann_t ann;
  struct voperands_d prev_vops;
  if (((enum tree_code) (stmt)->common.code) == ERROR_MARK)
    return;
  ann = get_stmt_ann (stmt);
  if (!ann->modified)
    return;
  timevar_push (TV_TREE_OPS);
  ann->has_volatile_ops = 0;
  ann->makes_aliased_stores = 0;
  ann->makes_aliased_loads = 0;
  free_defs (&(ann->def_ops), 1);
  free_uses (&(ann->use_ops), 1);
  prev_vops.v_may_def_ops = get_v_may_def_ops (ann);
  prev_vops.vuse_ops = get_vuse_ops (ann);
  prev_vops.v_must_def_ops = get_v_must_def_ops (ann);
  free_v_may_defs (&(ann->v_may_def_ops), 0);
  free_vuses (&(ann->vuse_ops), 0);
  free_v_must_defs (&(ann->v_must_def_ops), 0);
  start_ssa_stmt_operands (stmt);
  code = ((enum tree_code) (stmt)->common.code);
  switch (code)
    {
    case MODIFY_EXPR:
      get_expr_operands (stmt, &((stmt)->exp.operands[1]), 0, &prev_vops);
      if (((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == ARRAY_REF
          || ((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == COMPONENT_REF
   || ((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == REALPART_EXPR
   || ((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == IMAGPART_EXPR
   || tree_could_throw_p (((stmt)->exp.operands[1])))
        get_expr_operands (stmt, &((stmt)->exp.operands[0]), (1 << 0),
                    &prev_vops);
      else
        get_expr_operands (stmt, &((stmt)->exp.operands[0]),
                    (1 << 0) | (1 << 2), &prev_vops);
      break;
    case COND_EXPR:
      get_expr_operands (stmt, &((((stmt))->exp.operands[0])), 0, &prev_vops);
      break;
    case SWITCH_EXPR:
      get_expr_operands (stmt, &(((stmt))->exp.operands[0]), 0, &prev_vops);
      break;
    case ASM_EXPR:
      {
 int noutputs = list_length ((((stmt))->exp.operands[1]));
 const char **oconstraints
   = (const char **) C_alloca((noutputs) * sizeof (const char *));
 int i;
 tree link;
 const char *constraint;
 unsigned char allows_mem, allows_reg, is_inout;
 for (i=0, link = (((stmt))->exp.operands[1]); link;
      ++i, link = ((link)->common.chain))
   {
     oconstraints[i] = constraint
       = ((((((link)->list.purpose))->list.value1))->string1.pointer);
     parse_output_constraint (&constraint, i, 0, 0,
         &allows_mem, &allows_reg, &is_inout);
     if (allows_reg && is_inout)
       fancy_abort ("gcc.c", 134822, "?");
     if (!allows_reg && allows_mem)
       {
  tree t = get_base_address (((link)->list.value1));
  if (t && (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd'))
    mark_call_clobbered (t);
       }
     get_expr_operands (stmt, &((link)->list.value1), (1 << 0),
          &prev_vops);
   }
 for (link = (((stmt))->exp.operands[2]); link; link = ((link)->common.chain))
   {
     constraint
       = ((((((link)->list.purpose))->list.value1))->string1.pointer);
     parse_input_constraint (&constraint, 0, 0, noutputs, 0,
        oconstraints, &allows_mem, &allows_reg);
     if (!allows_reg && allows_mem)
       {
  tree t = get_base_address (((link)->list.value1));
  if (t && (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd'))
    mark_call_clobbered (t);
       }
     get_expr_operands (stmt, &((link)->list.value1), 0, &prev_vops);
   }
 for (link = (((stmt))->exp.operands[3]); link; link = ((link)->common.chain))
   if (!strcmp (((((link)->list.value1))->string1.pointer), "memory"))
     add_call_clobber_ops (stmt, &prev_vops);
      }
      break;
    case RETURN_EXPR:
      get_expr_operands (stmt, &((stmt)->exp.operands[0]), 0, &prev_vops);
      break;
    case GOTO_EXPR:
      get_expr_operands (stmt, &(((stmt))->exp.operands[0]), 0, &prev_vops);
      break;
    case LABEL_EXPR:
      get_expr_operands (stmt, &(((stmt))->exp.operands[0]), 0, &prev_vops);
      break;
    case BIND_EXPR:
    case CASE_LABEL_EXPR:
    case TRY_CATCH_EXPR:
    case TRY_FINALLY_EXPR:
    case EH_FILTER_EXPR:
    case CATCH_EXPR:
    case RESX_EXPR:
      break;
    default:
      get_expr_operands (stmt, &stmt, 0, &prev_vops);
      break;
    }
  finalize_ssa_stmt_operands (stmt);
  free_v_may_defs (&(prev_vops.v_may_def_ops), 1);
  free_vuses (&(prev_vops.vuse_ops), 1);
  free_v_must_defs (&(prev_vops.v_must_def_ops), 1);
  ann->modified = 0;
  timevar_pop (TV_TREE_OPS);
}
static void
get_expr_operands (tree stmt, tree *expr_p, int flags, voperands_t prev_vops)
{
  enum tree_code code;
  char class;
  tree expr = *expr_p;
  if (expr == ((void *)0) || expr == global_trees[TI_ERROR_MARK])
    return;
  code = ((enum tree_code) (expr)->common.code);
  class = tree_code_type[(int) (code)];
  if (code == ADDR_EXPR)
    {
      add_stmt_operand (expr_p, stmt, 0, ((void *)0));
      if (((expr)->common.constant_flag))
 return;
      flags |= (1 << 1);
      expr_p = &((expr)->exp.operands[0]);
      expr = *expr_p;
      code = ((enum tree_code) (expr)->common.code);
      class = tree_code_type[(int) (code)];
    }
  if (class == 'c'
      || class == 't'
      || code == BLOCK
      || code == FUNCTION_DECL
      || code == EXC_PTR_EXPR
      || code == FILTER_EXPR
      || code == LABEL_DECL)
    return;
  if ((((enum tree_code) (expr)->common.code) == VAR_DECL || ((enum tree_code) (expr)->common.code) == PARM_DECL || ((enum tree_code) (expr)->common.code) == RESULT_DECL || (((enum tree_code) (expr)->common.code) == SSA_NAME && (((enum tree_code) ((expr)->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((expr)->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((expr)->ssa_name.var)->common.code) == RESULT_DECL))))
    {
      add_stmt_operand (expr_p, stmt, flags, prev_vops);
      return;
    }
  if (code == INDIRECT_REF)
    {
      tree *pptr = &((expr)->exp.operands[0]);
      tree ptr = *pptr;
      if ((((enum tree_code) (ptr)->common.code) == VAR_DECL || ((enum tree_code) (ptr)->common.code) == PARM_DECL || ((enum tree_code) (ptr)->common.code) == RESULT_DECL || (((enum tree_code) (ptr)->common.code) == SSA_NAME && (((enum tree_code) ((ptr)->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((ptr)->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((ptr)->ssa_name.var)->common.code) == RESULT_DECL))))
 {
   if (!aliases_computed_p)
     {
       stmt_ann (stmt)->has_volatile_ops = 1;
     }
   else
     {
       struct ptr_info_def *pi = ((void *)0);
       if (((enum tree_code) (ptr)->common.code) == SSA_NAME
    && (pi = (ptr)->ssa_name.ptr_info) != ((void *)0)
    && pi->name_mem_tag)
  {
    add_stmt_operand (&pi->name_mem_tag, stmt, flags,
                      prev_vops);
  }
       else
  {
    var_ann_t ann;
    if (dump_file
        && ((enum tree_code) (ptr)->common.code) == SSA_NAME
        && pi == ((void *)0))
      {
        fprintf (dump_file,
     "NOTE: no flow-sensitive alias info for ");
        print_generic_expr (dump_file, ptr, dump_flags);
        fprintf (dump_file, " in ");
        print_generic_stmt (dump_file, stmt, dump_flags);
      }
    if (((enum tree_code) (ptr)->common.code) == SSA_NAME)
      ptr = (ptr)->ssa_name.var;
    ann = var_ann (ptr);
    add_stmt_operand (&ann->type_mem_tag, stmt, flags, prev_vops);
  }
     }
 }
      else if (((enum tree_code) (ptr)->common.code) == INTEGER_CST)
 {
   stmt_ann (stmt)->has_volatile_ops = 1;
   return;
 }
      else if ((((enum tree_code) (ptr)->common.code) == PLUS_EXPR || ((enum tree_code) (ptr)->common.code) == MINUS_EXPR)
        && ((enum tree_code) (((ptr)->exp.operands[0]))->common.code) == ADDR_EXPR
        && ((enum tree_code) (((ptr)->exp.operands[1]))->common.code) == INTEGER_CST)
 {
   pptr = &((ptr)->exp.operands[0]);
          add_stmt_operand (pptr, stmt, 0, ((void *)0));
   pptr = &((*pptr)->exp.operands[0]);
   get_expr_operands (stmt, pptr, flags, prev_vops);
   return;
 }
      else
 fancy_abort ("gcc.c", 135058, "?");
      get_expr_operands (stmt, pptr, 0, prev_vops);
      return;
    }
  if (code == ARRAY_REF || code == ARRAY_RANGE_REF)
    {
      if ((((enum tree_code) (((expr)->exp.operands[0]))->common.code) == VAR_DECL || ((enum tree_code) (((expr)->exp.operands[0]))->common.code) == PARM_DECL || ((enum tree_code) (((expr)->exp.operands[0]))->common.code) == RESULT_DECL || (((enum tree_code) (((expr)->exp.operands[0]))->common.code) == SSA_NAME && (((enum tree_code) ((((expr)->exp.operands[0]))->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((((expr)->exp.operands[0]))->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((((expr)->exp.operands[0]))->ssa_name.var)->common.code) == RESULT_DECL))))
 add_stmt_operand (expr_p, stmt, flags, prev_vops);
      else
 get_expr_operands (stmt, &((expr)->exp.operands[0]), flags, prev_vops);
      get_expr_operands (stmt, &((expr)->exp.operands[1]), 0, prev_vops);
      get_expr_operands (stmt, &((expr)->exp.operands[2]), 0, prev_vops);
      get_expr_operands (stmt, &((expr)->exp.operands[3]), 0, prev_vops);
      return;
    }
  if (code == IMAGPART_EXPR || code == REALPART_EXPR || code == COMPONENT_REF)
    {
      if ((((enum tree_code) (((expr)->exp.operands[0]))->common.code) == VAR_DECL || ((enum tree_code) (((expr)->exp.operands[0]))->common.code) == PARM_DECL || ((enum tree_code) (((expr)->exp.operands[0]))->common.code) == RESULT_DECL || (((enum tree_code) (((expr)->exp.operands[0]))->common.code) == SSA_NAME && (((enum tree_code) ((((expr)->exp.operands[0]))->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((((expr)->exp.operands[0]))->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((((expr)->exp.operands[0]))->ssa_name.var)->common.code) == RESULT_DECL))))
 add_stmt_operand (expr_p, stmt, flags, prev_vops);
      else
 get_expr_operands (stmt, &((expr)->exp.operands[0]), flags, prev_vops);
      if (code == COMPONENT_REF)
 get_expr_operands (stmt, &((expr)->exp.operands[2]), 0, prev_vops);
      return;
    }
  if (code == CALL_EXPR)
    {
      tree op;
      int call_flags = call_expr_flags (expr);
      get_expr_operands (stmt, &((expr)->exp.operands[0]), 0, prev_vops);
      for (op = ((expr)->exp.operands[1]); op; op = ((op)->common.chain))
        get_expr_operands (stmt, &((op)->list.value1), 0, prev_vops);
      get_expr_operands (stmt, &((expr)->exp.operands[2]), 0, prev_vops);
      if (bitmap_first_set_bit (call_clobbered_vars) >= 0)
 {
   if (!(call_flags
  & (256 | 1 | 2)))
     add_call_clobber_ops (stmt, prev_vops);
   else if (!(call_flags & (1 | 2)))
     add_call_read_ops (stmt, prev_vops);
 }
      else if (!aliases_computed_p)
 stmt_ann (stmt)->has_volatile_ops = 1;
      return;
    }
  if (code == TREE_LIST)
    {
      tree op;
      for (op = expr; op; op = ((op)->common.chain))
        get_expr_operands (stmt, &((op)->list.value1), flags, prev_vops);
      return;
    }
  if (code == MODIFY_EXPR)
    {
      get_expr_operands (stmt, &((expr)->exp.operands[1]), 0, prev_vops);
      if (((enum tree_code) (((expr)->exp.operands[0]))->common.code) == ARRAY_REF
          || ((enum tree_code) (((expr)->exp.operands[0]))->common.code) == COMPONENT_REF
   || ((enum tree_code) (((expr)->exp.operands[0]))->common.code) == REALPART_EXPR
   || ((enum tree_code) (((expr)->exp.operands[0]))->common.code) == IMAGPART_EXPR)
        get_expr_operands (stmt, &((expr)->exp.operands[0]), (1 << 0),
                    prev_vops);
      else
        get_expr_operands (stmt, &((expr)->exp.operands[0]),
                    (1 << 0) | (1 << 2), prev_vops);
      return;
    }
  if (code == VA_ARG_EXPR)
    {
      stmt_ann (stmt)->has_volatile_ops = 1;
      return;
    }
  if (class == '1'
      || code == TRUTH_NOT_EXPR
      || code == BIT_FIELD_REF
      || code == CONSTRUCTOR)
    {
      get_expr_operands (stmt, &((expr)->exp.operands[0]), flags, prev_vops);
      return;
    }
  if (class == '2'
      || class == '<'
      || code == TRUTH_AND_EXPR
      || code == TRUTH_OR_EXPR
      || code == TRUTH_XOR_EXPR
      || code == COMPOUND_EXPR
      || code == OBJ_TYPE_REF)
    {
      tree op0 = ((expr)->exp.operands[0]);
      tree op1 = ((expr)->exp.operands[1]);
      if (tree_swap_operands_p (op0, op1, 0))
 {
   if (code == LT_EXPR
       || code == GT_EXPR
       || code == LE_EXPR
       || code == GE_EXPR)
     {
       ((expr)->common.code = (swap_tree_comparison (code)));
       ((expr)->exp.operands[0]) = op1;
       ((expr)->exp.operands[1]) = op0;
     }
   if (commutative_tree_code (code))
     {
       ((expr)->exp.operands[0]) = op1;
       ((expr)->exp.operands[1]) = op0;
     }
 }
      get_expr_operands (stmt, &((expr)->exp.operands[0]), flags, prev_vops);
      get_expr_operands (stmt, &((expr)->exp.operands[1]), flags, prev_vops);
      return;
    }
  fprintf (stderr, "unhandled expression in get_expr_operands():\n");
  debug_tree (expr);
  fputs_unlocked ("\n", stderr);
  fancy_abort ("gcc.c", 135239, "?");
}
static void
add_stmt_operand (tree *var_p, tree stmt, int flags, voperands_t prev_vops)
{
  unsigned char is_real_op;
  tree var, sym;
  stmt_ann_t s_ann;
  var_ann_t v_ann;
  var = *var_p;
  while ((((enum tree_code) (var)->common.code) == NOP_EXPR || ((enum tree_code) (var)->common.code) == CONVERT_EXPR || ((enum tree_code) (var)->common.code) == NON_LVALUE_EXPR) && ((var)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((var)->common.type))->type.mode) == ((((((var)->exp.operands[0]))->common.type))->type.mode))) (var) = ((var)->exp.operands[0]);
  s_ann = stmt_ann (stmt);
  if (((enum tree_code) (var)->common.code) == ADDR_EXPR)
    {
      note_addressable (((var)->exp.operands[0]), s_ann);
      return;
    }
  is_real_op = is_gimple_reg (var);
  if (!is_real_op && !(tree_code_type[(int) (((enum tree_code) (var)->common.code))] == 'd'))
    var = get_virtual_var (var);
  if (var == (tree) ((void *)0) || !(((enum tree_code) (var)->common.code) == VAR_DECL || ((enum tree_code) (var)->common.code) == PARM_DECL || ((enum tree_code) (var)->common.code) == RESULT_DECL || (((enum tree_code) (var)->common.code) == SSA_NAME && (((enum tree_code) ((var)->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((var)->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((var)->ssa_name.var)->common.code) == RESULT_DECL))))
    return;
  sym = (((enum tree_code) (var)->common.code) == SSA_NAME ? (var)->ssa_name.var : var);
  v_ann = var_ann (sym);
  if (v_ann->has_hidden_use)
    {
      s_ann->has_volatile_ops = 1;
      return;
    }
  if (((sym)->common.volatile_flag))
    {
      s_ann->has_volatile_ops = 1;
      return;
    }
  if (is_real_op)
    {
      if (flags & (1 << 0))
 append_def (var_p, stmt);
      else
 append_use (var_p, stmt);
    }
  else
    {
      varray_type aliases;
      if (flags & (1 << 1))
 return;
      aliases = v_ann->may_aliases;
      if (!aliases_computed_p && may_be_aliased (var))
 s_ann->has_volatile_ops = 1;
      if (aliases == ((void *)0))
 {
   if (flags & (1 << 0))
     {
       if (v_ann->is_alias_tag)
         {
    s_ann->makes_aliased_stores = 1;
    append_v_may_def (var, stmt, prev_vops);
  }
       else if ((flags & (1 << 2))
                 && v_ann->mem_tag_kind == NOT_A_TAG)
         append_v_must_def (var, stmt, prev_vops);
       else
  append_v_may_def (var, stmt, prev_vops);
     }
   else
     {
       append_vuse (var, stmt, prev_vops);
       if (v_ann->is_alias_tag)
  s_ann->makes_aliased_loads = 1;
     }
 }
      else
 {
   size_t i;
   if (((aliases)->elements_used) == 0)
     fancy_abort ("gcc.c", 135368, "?");
   if (flags & (1 << 0))
     {
       if (v_ann->is_alias_tag)
  append_v_may_def (var, stmt, prev_vops);
       for (i = 0; i < ((aliases)->elements_used); i++)
  append_v_may_def (((aliases)->data.tree1[i]), stmt, prev_vops);
       s_ann->makes_aliased_stores = 1;
     }
   else
     {
       if (v_ann->is_alias_tag)
  append_vuse (var, stmt, prev_vops);
       for (i = 0; i < ((aliases)->elements_used); i++)
  append_vuse (((aliases)->data.tree1[i]), stmt, prev_vops);
       s_ann->makes_aliased_loads = 1;
     }
 }
    }
}
static void
note_addressable (tree var, stmt_ann_t s_ann)
{
  var = get_base_address (var);
  if (var && (((enum tree_code) (var)->common.code) == VAR_DECL || ((enum tree_code) (var)->common.code) == PARM_DECL || ((enum tree_code) (var)->common.code) == RESULT_DECL || (((enum tree_code) (var)->common.code) == SSA_NAME && (((enum tree_code) ((var)->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((var)->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((var)->ssa_name.var)->common.code) == RESULT_DECL))))
    {
      if (s_ann->addresses_taken == ((void *)0))
 s_ann->addresses_taken = bitmap_initialize (((void *)0), 0);
      bitmap_set_bit (s_ann->addresses_taken, var_ann (var)->uid);
    }
}
static void
add_call_clobber_ops (tree stmt, voperands_t prev_vops)
{
  stmt_ann (stmt)->makes_clobbering_call = 1;
  if (global_var)
    add_stmt_operand (&global_var, stmt, (1 << 0), prev_vops);
  else
    {
      size_t i;
      do { bitmap_element *ptr_ = (call_clobbered_vars)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { tree var = ((referenced_vars)->data.tree1[i]); if (!((var)->common.readonly_flag)) add_stmt_operand (&var, stmt, (1 << 0), prev_vops); else add_stmt_operand (&var, stmt, 0, prev_vops); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
    }
}
static void
add_call_read_ops (tree stmt, voperands_t prev_vops)
{
  if (global_var)
    add_stmt_operand (&global_var, stmt, 0, prev_vops);
  else
    {
      size_t i;
      do { bitmap_element *ptr_ = (call_clobbered_vars)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { tree var = ((referenced_vars)->data.tree1[i]); add_stmt_operand (&var, stmt, 0, prev_vops); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
    }
}
void
copy_virtual_operands (tree dst, tree src)
{
  vuse_optype vuses = get_vuse_ops (stmt_ann(src));
  v_may_def_optype v_may_defs = get_v_may_def_ops (stmt_ann(src));
  v_must_def_optype v_must_defs = get_v_must_def_ops (stmt_ann (src));
  vuse_optype *vuses_new = &stmt_ann (dst)->vuse_ops;
  v_may_def_optype *v_may_defs_new = &stmt_ann (dst)->v_may_def_ops;
  v_must_def_optype *v_must_defs_new = &stmt_ann (dst)->v_must_def_ops;
  unsigned i;
  if (vuses)
    {
      *vuses_new = allocate_vuse_optype (((vuses) ? (vuses)->num_vuses : 0));
      for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
 (((*((get_vuse_op_ptr (((*vuses_new)), ((i)))).use)) = (((get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((i)))))))));
    }
  if (v_may_defs)
    {
      *v_may_defs_new = allocate_v_may_def_optype (((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0));
      for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
 {
   (((*((get_v_may_def_op_ptr (((*v_may_defs_new)), ((i)))).use)) = (((get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((i)))))))));
   (((*((get_v_may_def_result_ptr (((*v_may_defs_new)), ((i)))).def)) = (((get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i)))))))))
                                     ;
 }
    }
  if (v_must_defs)
    {
      *v_must_defs_new = allocate_v_must_def_optype (((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0));
      for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
 (((*((get_v_must_def_op_ptr (((*v_must_defs_new)), ((i)))).def)) = (((get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i)))))))));
    }
}
const struct ggc_root_tab gt_ggc_r_gt_tree_ssa_operands_h[] = {
  {
    &build_v_must_defs,
    1,
    sizeof (build_v_must_defs),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &build_vuses,
    1,
    sizeof (build_vuses),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &build_v_may_defs,
    1,
    sizeof (build_v_may_defs),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &build_uses,
    1,
    sizeof (build_uses),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &build_defs,
    1,
    sizeof (build_defs),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
struct alias_map_d
{
  tree var;
  long set;
  long total_alias_vops;
  unsigned int grouped_p : 1;
  sbitmap may_aliases;
};
struct alias_info
{
  bitmap ssa_names_visited;
  varray_type processed_ptrs;
  bitmap addresses_needed;
  struct alias_map_d **addressable_vars;
  size_t num_addressable_vars;
  struct alias_map_d **pointers;
  size_t num_pointers;
  size_t num_calls_found;
  varray_type num_references;
  long total_alias_vops;
  bitmap written_vars;
  bitmap dereferenced_ptrs_store;
  bitmap dereferenced_ptrs_load;
};
struct alias_stats_d
{
  unsigned int alias_queries;
  unsigned int alias_mayalias;
  unsigned int alias_noalias;
  unsigned int simple_queries;
  unsigned int simple_resolved;
  unsigned int tbaa_queries;
  unsigned int tbaa_resolved;
  unsigned int pta_queries;
  unsigned int pta_resolved;
};
static struct alias_stats_d alias_stats;
static void compute_flow_insensitive_aliasing (struct alias_info *);
static void dump_alias_stats (FILE *);
static unsigned char may_alias_p (tree, long, tree, long);
static tree create_memory_tag (tree type, unsigned char is_type_tag);
static tree get_tmt_for (tree, struct alias_info *);
static tree get_nmt_for (tree);
static void add_may_alias (tree, tree);
static struct alias_info *init_alias_info (void);
static void delete_alias_info (struct alias_info *);
static void compute_points_to_and_addr_escape (struct alias_info *);
static void compute_flow_sensitive_aliasing (struct alias_info *);
static void setup_pointers_and_addressables (struct alias_info *);
static unsigned char collect_points_to_info_r (tree, tree, void *);
static unsigned char is_escape_site (tree, size_t *);
static void add_pointed_to_var (struct alias_info *, tree, tree);
static void add_pointed_to_expr (tree, tree);
static void create_global_var (void);
static void collect_points_to_info_for (struct alias_info *, tree);
static unsigned char ptr_is_dereferenced_by (tree, tree, unsigned char *);
static void maybe_create_global_var (struct alias_info *ai);
static void group_aliases (struct alias_info *);
static struct ptr_info_def *get_ptr_info (tree t);
bitmap call_clobbered_vars;
unsigned char aliases_computed_p;
tree global_var;
static void
compute_may_aliases (void)
{
  struct alias_info *ai;
  memset (&alias_stats, 0, sizeof (alias_stats));
  ai = init_alias_info ();
  compute_points_to_and_addr_escape (ai);
  setup_pointers_and_addressables (ai);
  compute_flow_sensitive_aliasing (ai);
  compute_flow_insensitive_aliasing (ai);
  maybe_create_global_var (ai);
  if (dump_file)
    {
      dump_referenced_vars (dump_file);
      if (dump_flags & (1 << 4))
 dump_alias_stats (dump_file);
      dump_points_to_info (dump_file);
      dump_alias_info (dump_file);
    }
  delete_alias_info (ai);
  aliases_computed_p = 1;
}
struct tree_opt_pass pass_may_alias =
{
  "alias",
  ((void *)0),
  compute_may_aliases,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_MAY_ALIAS,
  (1 << 3) | (1 << 6) | (1 << 5),
  0,
  0,
  0,
  (1 << 0) | (1 << 1)
    | (1 << 2) | (1 << 3)
};
static struct alias_info *
init_alias_info (void)
{
  struct alias_info *ai;
  ai = xcalloc (1, sizeof (struct alias_info));
  ai->ssa_names_visited = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  ai->processed_ptrs = varray_init (50, VARRAY_DATA_TREE, "processed_ptrs");
  ai->addresses_needed = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  ai->num_references = varray_init (((referenced_vars)->elements_used), VARRAY_DATA_U, "num_references");
  ai->written_vars = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  ai->dereferenced_ptrs_store = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  ai->dereferenced_ptrs_load = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  return ai;
}
static void
delete_alias_info (struct alias_info *ai)
{
  size_t i;
  do { if (ai->ssa_names_visited) { bitmap_clear (ai->ssa_names_visited); free (ai->ssa_names_visited); (ai->ssa_names_visited) = 0; } } while (0);
  ai->processed_ptrs = ((void *)0);
  do { if (ai->addresses_needed) { bitmap_clear (ai->addresses_needed); free (ai->addresses_needed); (ai->addresses_needed) = 0; } } while (0);
  for (i = 0; i < ai->num_addressable_vars; i++)
    {
      free(ai->addressable_vars[i]->may_aliases);
      free (ai->addressable_vars[i]);
    }
  free (ai->addressable_vars);
  for (i = 0; i < ai->num_pointers; i++)
    {
      free(ai->pointers[i]->may_aliases);
      free (ai->pointers[i]);
    }
  free (ai->pointers);
  ai->num_references = ((void *)0);
  do { if (ai->written_vars) { bitmap_clear (ai->written_vars); free (ai->written_vars); (ai->written_vars) = 0; } } while (0);
  do { if (ai->dereferenced_ptrs_store) { bitmap_clear (ai->dereferenced_ptrs_store); free (ai->dereferenced_ptrs_store); (ai->dereferenced_ptrs_store) = 0; } } while (0);
  do { if (ai->dereferenced_ptrs_load) { bitmap_clear (ai->dereferenced_ptrs_load); free (ai->dereferenced_ptrs_load); (ai->dereferenced_ptrs_load) = 0; } } while (0);
  free (ai);
}
static void
collect_points_to_info_for (struct alias_info *ai, tree ptr)
{
  if (!bitmap_bit_p (ai->ssa_names_visited, (ptr)->ssa_name.version))
    {
      struct ptr_info_def *pi;
      bitmap_set_bit (ai->ssa_names_visited, (ptr)->ssa_name.version);
      walk_use_def_chains (ptr, collect_points_to_info_r, ai);
      do { if ((ai->processed_ptrs)->elements_used >= (ai->processed_ptrs)->num_elements) (((ai->processed_ptrs)) = varray_grow ((ai->processed_ptrs), 2 * (ai->processed_ptrs)->num_elements)); (ai->processed_ptrs)->data.tree1[(ai->processed_ptrs)->elements_used++] = (ptr); } while (0);
      pi = (ptr)->ssa_name.ptr_info;
      if (pi->pt_anything)
 {
   pi->pt_malloc = 0;
   pi->pt_vars = ((void *)0);
 }
    }
}
static tree
find_ptr_dereference (tree *tp, int *walk_subtrees , void *data)
{
  tree ptr = (tree) data;
  if (((enum tree_code) (*tp)->common.code) == INDIRECT_REF
      && ((*tp)->exp.operands[0]) == ptr)
    return *tp;
  return (tree) ((void *)0);
}
static unsigned char
ptr_is_dereferenced_by (tree ptr, tree stmt, unsigned char *is_store)
{
  *is_store = 0;
  if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR
      || (((enum tree_code) (stmt)->common.code) == RETURN_EXPR
   && ((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == MODIFY_EXPR))
    {
      tree e, lhs, rhs;
      e = (((enum tree_code) (stmt)->common.code) == RETURN_EXPR) ? ((stmt)->exp.operands[0]) : stmt;
      lhs = ((e)->exp.operands[0]);
      rhs = ((e)->exp.operands[1]);
      if ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (lhs)->common.code))])) != 0)
   && walk_tree (&lhs, find_ptr_dereference, ptr, ((void *)0)))
 {
   *is_store = 1;
   return 1;
 }
      else if ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (rhs)->common.code))])) != 0)
        && walk_tree (&rhs, find_ptr_dereference, ptr, ((void *)0)))
 {
   return 1;
 }
    }
  else if (((enum tree_code) (stmt)->common.code) == ASM_EXPR)
    {
      if (walk_tree (&(((stmt))->exp.operands[1]), find_ptr_dereference, ptr, ((void *)0))
   || walk_tree (&(((stmt))->exp.operands[3]), find_ptr_dereference, ptr, ((void *)0)))
 {
   *is_store = 1;
   return 1;
 }
      else if (walk_tree (&(((stmt))->exp.operands[2]), find_ptr_dereference, ptr, ((void *)0)))
 {
   return 1;
 }
    }
  return 0;
}
static void
compute_points_to_and_addr_escape (struct alias_info *ai)
{
  basic_block bb;
  size_t i;
  timevar_push (TV_TREE_PTA);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      bb_ann_t block_ann = bb_ann (bb);
      block_stmt_iterator si;
      for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
 {
   use_optype uses;
   def_optype defs;
   v_may_def_optype v_may_defs;
   v_must_def_optype v_must_defs;
   stmt_ann_t ann;
   bitmap addr_taken;
   tree stmt = bsi_stmt (si);
   unsigned char stmt_escapes_p = is_escape_site (stmt, &ai->num_calls_found);
   get_stmt_operands (stmt);
   addr_taken = addresses_taken (stmt);
   if (addr_taken)
     do { bitmap_element *ptr_ = (addr_taken)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { tree var = ((referenced_vars)->data.tree1[i]); bitmap_set_bit (ai->addresses_needed, var_ann (var)->uid); if (stmt_escapes_p) mark_call_clobbered (var); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
    ;
   if (stmt_escapes_p)
     block_ann->has_escape_site = 1;
   if (addr_taken
       && ((enum tree_code) (stmt)->common.code) == MODIFY_EXPR
       && !(((enum tree_code) (((((stmt)->exp.operands[0]))->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((((stmt)->exp.operands[0]))->common.type))->common.code) == REFERENCE_TYPE))
     do { bitmap_element *ptr_ = (addr_taken)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { tree var = ((referenced_vars)->data.tree1[i]); mark_call_clobbered (var); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
    ;
   ann = stmt_ann (stmt);
   uses = get_use_ops (ann);
   for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
     {
       tree op = (get_use_from_ptr (get_use_op_ptr (((uses)), ((i)))));
       var_ann_t v_ann = var_ann ((op)->ssa_name.var);
       struct ptr_info_def *pi;
       unsigned char is_store;
       if (may_be_aliased ((op)->ssa_name.var))
  (((ai->num_references)->data.u[v_ann->uid]))++;
       if (!(((enum tree_code) (((op)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((op)->common.type))->common.code) == REFERENCE_TYPE))
  continue;
       collect_points_to_info_for (ai, op);
       pi = (op)->ssa_name.ptr_info;
       if (ptr_is_dereferenced_by (op, stmt, &is_store))
  {
    if (pi->pt_malloc || pi->pt_vars)
      pi->name_mem_tag = get_nmt_for (op);
    (((ai->num_references)->data.u[v_ann->uid]))++;
    if (is_store)
      bitmap_set_bit (ai->dereferenced_ptrs_store, v_ann->uid);
    else
      bitmap_set_bit (ai->dereferenced_ptrs_load, v_ann->uid);
  }
       else if (stmt_escapes_p)
  {
    pi->value_escapes_p = 1;
    if (get_call_expr_in (stmt))
      bitmap_set_bit (ai->dereferenced_ptrs_store, v_ann->uid);
  }
     }
   defs = get_def_ops (ann);
   for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
     {
       tree op = (get_def_from_ptr (get_def_op_ptr (((defs)), ((i)))));
       tree var = (op)->ssa_name.var;
       var_ann_t ann = var_ann (var);
       bitmap_set_bit (ai->written_vars, ann->uid);
       if (may_be_aliased (var))
  (((ai->num_references)->data.u[ann->uid]))++;
     }
   v_may_defs = get_v_may_def_ops (ann);
   for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
     {
       tree op = (get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((i)))));
       tree var = (op)->ssa_name.var;
       var_ann_t ann = var_ann (var);
       bitmap_set_bit (ai->written_vars, ann->uid);
     }
   v_must_defs = get_v_must_def_ops (ann);
   for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
     {
       tree op = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i)))));
       tree var = (op)->ssa_name.var;
       var_ann_t ann = var_ann (var);
       bitmap_set_bit (ai->written_vars, ann->uid);
     }
   modify_stmt (stmt);
 }
    }
  timevar_pop (TV_TREE_PTA);
}
static void
compute_flow_sensitive_aliasing (struct alias_info *ai)
{
  size_t i;
  for (i = 0; i < ((ai->processed_ptrs)->elements_used); i++)
    {
      size_t j;
      tree ptr = ((ai->processed_ptrs)->data.tree1[i]);
      struct ptr_info_def *pi = (ptr)->ssa_name.ptr_info;
      var_ann_t v_ann = var_ann ((ptr)->ssa_name.var);
      if (pi->value_escapes_p || pi->pt_anything)
 {
   if (pi->name_mem_tag)
     mark_call_clobbered (pi->name_mem_tag);
   if (v_ann->type_mem_tag)
     mark_call_clobbered (v_ann->type_mem_tag);
   if (pi->pt_anything)
     {
       long ptr_set;
       ptr_set = get_alias_set (((((ptr)->common.type))->common.type));
       for (j = 0; j < ai->num_addressable_vars; j++)
  {
    struct alias_map_d *alias_map = ai->addressable_vars[j];
    if (alias_map->set == ptr_set)
      mark_call_clobbered (alias_map->var);
  }
     }
   if (pi->value_escapes_p
       && pi->name_mem_tag == (tree) ((void *)0)
       && pi->pt_vars)
     do { bitmap_element *ptr_ = (pi->pt_vars)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); mark_call_clobbered (((referenced_vars)->data.tree1[j])); if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                           ;
 }
      if (pi->name_mem_tag && pi->pt_vars)
 do { bitmap_element *ptr_ = (pi->pt_vars)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); add_may_alias (pi->name_mem_tag, ((referenced_vars)->data.tree1[j])); if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                                          ;
      if (pi->name_mem_tag
   && v_ann->type_mem_tag
   && is_call_clobbered (pi->name_mem_tag))
 mark_call_clobbered (v_ann->type_mem_tag);
    }
}
static void
compute_flow_insensitive_aliasing (struct alias_info *ai)
{
  size_t i;
  ai->total_alias_vops = 0;
  for (i = 0; i < ai->num_pointers; i++)
    {
      size_t j;
      struct alias_map_d *p_map = ai->pointers[i];
      tree tag = var_ann (p_map->var)->type_mem_tag;
      var_ann_t tag_ann = var_ann (tag);
      p_map->total_alias_vops = 0;
      p_map->may_aliases = sbitmap_alloc (((referenced_vars)->elements_used));
      sbitmap_zero (p_map->may_aliases);
      for (j = 0; j < ai->num_addressable_vars; j++)
 {
   struct alias_map_d *v_map;
   var_ann_t v_ann;
   tree var;
   unsigned char tag_stored_p, var_stored_p;
   v_map = ai->addressable_vars[j];
   var = v_map->var;
   v_ann = var_ann (var);
   tag_stored_p = bitmap_bit_p (ai->written_vars, tag_ann->uid)
    || is_call_clobbered (tag);
   var_stored_p = bitmap_bit_p (ai->written_vars, v_ann->uid)
    || is_call_clobbered (var);
   if (!tag_stored_p && !var_stored_p)
     continue;
   if (may_alias_p (p_map->var, p_map->set, var, v_map->set))
     {
       size_t num_tag_refs, num_var_refs;
       num_tag_refs = ((ai->num_references)->data.u[tag_ann->uid]);
       num_var_refs = ((ai->num_references)->data.u[v_ann->uid]);
       add_may_alias (tag, var);
       ai->total_alias_vops += (num_var_refs + num_tag_refs);
       p_map->total_alias_vops += (num_var_refs + num_tag_refs);
       ((p_map->may_aliases)->elms [(var_ann (var)->uid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (var_ann (var)->uid) % ((unsigned) (8 * 4)));
     }
 }
    }
  if (dump_file)
    fprintf (dump_file, "%s: Total number of aliased vops: %ld\n",
      get_name (current_function_decl),
      ai->total_alias_vops);
  if (ai->total_alias_vops >= (compiler_params[(int) PARAM_MAX_ALIASED_VOPS].value1))
    group_aliases (ai);
}
static int
total_alias_vops_cmp (const void *p, const void *q)
{
  const struct alias_map_d **p1 = (const struct alias_map_d **)p;
  const struct alias_map_d **p2 = (const struct alias_map_d **)q;
  long n1 = (*p1)->total_alias_vops;
  long n2 = (*p2)->total_alias_vops;
  return (n1 > n2 ? -1 : (n1 == n2) ? 0 : 1);
}
static void
group_aliases_into (tree tag, sbitmap tag_aliases, struct alias_info *ai)
{
  size_t i;
  var_ann_t tag_ann = var_ann (tag);
  size_t num_tag_refs = ((ai->num_references)->data.u[tag_ann->uid]);
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (tag_aliases)->size; unsigned long *ptr_ = (tag_aliases)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (i) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { tree var = ((referenced_vars)->data.tree1[i]); var_ann_t ann = var_ann (var); ann->is_alias_tag = 0; ann->may_aliases = ((void *)0); if (var != tag) add_may_alias (var, tag); ai->total_alias_vops -= num_tag_refs; }; if (word_ == 0) break; } } } } while (0)
      ;
  ai->total_alias_vops += num_tag_refs;
  tag_ann->may_aliases = ((void *)0);
}
static void
group_aliases (struct alias_info *ai)
{
  size_t i;
  sbitmap res;
  qsort (ai->pointers, ai->num_pointers, sizeof (struct alias_map_d *),
         total_alias_vops_cmp);
  res = sbitmap_alloc (((referenced_vars)->elements_used));
  for (i = 0; i < ai->num_pointers; i++)
    {
      size_t j;
      tree tag1 = var_ann (ai->pointers[i]->var)->type_mem_tag;
      sbitmap tag1_aliases = ai->pointers[i]->may_aliases;
      if (ai->pointers[i]->grouped_p)
 continue;
      for (j = i + 1; j < ai->num_pointers; j++)
 {
   sbitmap tag2_aliases = ai->pointers[j]->may_aliases;
   sbitmap_a_and_b (res, tag1_aliases, tag2_aliases);
   if (sbitmap_first_set_bit (res) >= 0)
     {
       tree tag2 = var_ann (ai->pointers[j]->var)->type_mem_tag;
       sbitmap_a_or_b (tag1_aliases, tag1_aliases, tag2_aliases);
       sbitmap_zero (tag2_aliases);
       var_ann (tag2)->may_aliases = ((void *)0);
       add_may_alias (tag2, tag1);
       ai->pointers[j]->grouped_p = 1;
     }
 }
      group_aliases_into (tag1, tag1_aliases, ai);
      if (ai->total_alias_vops < (compiler_params[(int) PARAM_MAX_ALIASED_VOPS].value1))
 break;
    }
  for (i = 0; i < ((ai->processed_ptrs)->elements_used); i++)
    {
      size_t j;
      tree ptr = ((ai->processed_ptrs)->data.tree1[i]);
      tree name_tag = (ptr)->ssa_name.ptr_info->name_mem_tag;
      varray_type aliases;
      if (name_tag == (tree) ((void *)0))
 continue;
      aliases = var_ann (name_tag)->may_aliases;
      for (j = 0; aliases && j < ((aliases)->elements_used); j++)
 {
   tree alias = ((aliases)->data.tree1[j]);
   var_ann_t ann = var_ann (alias);
   if (ann->may_aliases)
     {
       ((aliases)->data.tree1[j]) = ((ann->may_aliases)->data.tree1[0]);
     }
 }
    }
  free(res);
  if (dump_file)
    fprintf (dump_file,
      "%s: Total number of aliased vops after grouping: %ld%s\n",
      get_name (current_function_decl),
      ai->total_alias_vops,
      (ai->total_alias_vops < 0) ? " (negative values are OK)" : "");
}
static void
create_alias_map_for (tree var, struct alias_info *ai)
{
  struct alias_map_d *alias_map;
  alias_map = xcalloc (1, sizeof (*alias_map));
  alias_map->var = var;
  if (((enum tree_code) (((var)->common.type))->common.code) == ARRAY_TYPE)
    alias_map->set = get_alias_set (((((var)->common.type))->common.type));
  else
    alias_map->set = get_alias_set (var);
  ai->addressable_vars[ai->num_addressable_vars++] = alias_map;
}
static void
setup_pointers_and_addressables (struct alias_info *ai)
{
  size_t i, n_vars, num_addressable_vars, num_pointers;
  num_addressable_vars = num_pointers = 0;
  for (i = 0; i < ((referenced_vars)->elements_used); i++)
    {
      tree var = ((referenced_vars)->data.tree1[i]);
      if (may_be_aliased (var))
 num_addressable_vars++;
      if ((((enum tree_code) (((var)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((var)->common.type))->common.code) == REFERENCE_TYPE))
 {
   var_ann_t ann = var_ann (var);
   if (((var)->common.volatile_flag) || ann->has_hidden_use)
     bitmap_set_bit (ai->dereferenced_ptrs_store, ann->uid);
   num_pointers++;
 }
    }
  ai->addressable_vars = xcalloc (num_addressable_vars,
      sizeof (struct alias_map_d *));
  ai->pointers = xcalloc (num_pointers, sizeof (struct alias_map_d *));
  ai->num_addressable_vars = 0;
  ai->num_pointers = 0;
  n_vars = ((referenced_vars)->elements_used);
  for (i = 0; i < n_vars; i++)
    {
      tree var = ((referenced_vars)->data.tree1[i]);
      var_ann_t v_ann = var_ann (var);
      if (v_ann->mem_tag_kind != NOT_A_TAG)
 continue;
      if (((var)->common.addressable_flag))
 {
   if (!bitmap_bit_p (ai->addresses_needed, v_ann->uid)
       && !v_ann->has_hidden_use
       && v_ann->mem_tag_kind == NOT_A_TAG
       && !needs_to_live_in_memory (var))
     {
       mark_non_addressable (var);
       bitmap_set_bit (vars_to_rename, v_ann->uid);
     }
 }
      if (may_be_aliased (var))
 {
   create_alias_map_for (var, ai);
   bitmap_set_bit (vars_to_rename, var_ann (var)->uid);
 }
      if ((((enum tree_code) (((var)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((var)->common.type))->common.code) == REFERENCE_TYPE)
   && (bitmap_bit_p (ai->dereferenced_ptrs_store, v_ann->uid)
       || bitmap_bit_p (ai->dereferenced_ptrs_load, v_ann->uid)))
 {
   tree tag = v_ann->type_mem_tag;
   var_ann_t t_ann;
   if (tag == (tree) ((void *)0))
     tag = get_tmt_for (var, ai);
   t_ann = var_ann (tag);
   v_ann->type_mem_tag = tag;
   if (bitmap_bit_p (ai->dereferenced_ptrs_store, v_ann->uid))
     bitmap_set_bit (ai->written_vars, t_ann->uid);
   if (((enum tree_code) (var)->common.code) == PARM_DECL || needs_to_live_in_memory (var))
     mark_call_clobbered (tag);
   if (t_ann->uid >= ((ai->num_references)->num_elements))
     ((ai->num_references) = varray_grow (ai->num_references, t_ann->uid + 10));
   ((ai->num_references)->data.u[t_ann->uid])
       += ((ai->num_references)->data.u[v_ann->uid]);
 }
    }
  if (ai->num_addressable_vars == 0
      && ai->num_pointers > 1)
    {
      free (ai->addressable_vars);
      ai->addressable_vars = xcalloc (ai->num_pointers,
          sizeof (struct alias_map_d *));
      ai->num_addressable_vars = 0;
      for (i = 0; i < ai->num_pointers; i++)
 {
   struct alias_map_d *p = ai->pointers[i];
   tree tag = var_ann (p->var)->type_mem_tag;
   create_alias_map_for (tag, ai);
 }
    }
}
static void
maybe_create_global_var (struct alias_info *ai)
{
  size_t i, n_clobbered;
  n_clobbered = 0;
  do { bitmap_element *ptr_ = (call_clobbered_vars)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); n_clobbered++; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0);
  if (n_clobbered == 0
      || ai->num_calls_found * n_clobbered >= (size_t) (compiler_params[(int) PARAM_GLOBAL_VAR_THRESHOLD].value1))
    create_global_var ();
  if (global_var)
    do { bitmap_element *ptr_ = (call_clobbered_vars)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { tree var = ((referenced_vars)->data.tree1[i]); if (var != global_var) { add_may_alias (var, global_var); bitmap_set_bit (vars_to_rename, var_ann (var)->uid); } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
        ;
}
static unsigned char
may_alias_p (tree ptr, long mem_alias_set,
      tree var, long var_alias_set)
{
  tree mem;
  var_ann_t v_ann, m_ann;
  alias_stats.alias_queries++;
  alias_stats.simple_queries++;
  mem = var_ann (ptr)->type_mem_tag;
  if (mem == var)
    {
      alias_stats.alias_noalias++;
      alias_stats.simple_resolved++;
      return 0;
    }
  v_ann = var_ann (var);
  m_ann = var_ann (mem);
  alias_stats.tbaa_queries++;
  if ((((enum tree_code) (((var)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((var)->common.type))->common.code) == REFERENCE_TYPE)
      && var_alias_set != 0)
    {
      long ptr_alias_set = get_alias_set (ptr);
      if (ptr_alias_set == var_alias_set)
 {
   alias_stats.alias_noalias++;
   alias_stats.tbaa_resolved++;
   return 0;
 }
    }
  if (!alias_sets_conflict_p (mem_alias_set, var_alias_set))
    {
      if ((((enum tree_code) (((mem)->common.type))->common.code) == ARRAY_TYPE || ((enum tree_code) (((mem)->common.type))->common.code) == RECORD_TYPE || ((enum tree_code) (((mem)->common.type))->common.code) == UNION_TYPE || ((enum tree_code) (((mem)->common.type))->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (((mem)->common.type))->common.code) == SET_TYPE)
   || (((enum tree_code) (((var)->common.type))->common.code) == ARRAY_TYPE || ((enum tree_code) (((var)->common.type))->common.code) == RECORD_TYPE || ((enum tree_code) (((var)->common.type))->common.code) == UNION_TYPE || ((enum tree_code) (((var)->common.type))->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (((var)->common.type))->common.code) == SET_TYPE))
 {
   tree ptr_to_var;
   if (((enum tree_code) (((var)->common.type))->common.code) == ARRAY_TYPE)
     ptr_to_var = ((((((var)->common.type))->common.type))->type.pointer_to);
   else
     ptr_to_var = ((((var)->common.type))->type.pointer_to);
   if (ptr_to_var == (tree) ((void *)0))
     {
       alias_stats.alias_noalias++;
       alias_stats.tbaa_resolved++;
       return 0;
     }
   if (!alias_sets_conflict_p (mem_alias_set, get_alias_set (ptr_to_var))
       && !alias_sets_conflict_p (var_alias_set, get_alias_set (ptr)))
     {
       alias_stats.alias_noalias++;
       alias_stats.tbaa_resolved++;
       return 0;
     }
 }
      else
 {
   alias_stats.alias_noalias++;
   alias_stats.tbaa_resolved++;
   return 0;
 }
    }
  if (flag_tree_points_to != PTA_NONE)
      alias_stats.pta_queries++;
  if (flag_tree_points_to == PTA_ANDERSEN
      && !ptr_may_alias_var (ptr, var))
    {
      alias_stats.alias_noalias++;
      alias_stats.pta_resolved++;
      return 0;
    }
  alias_stats.alias_mayalias++;
  return 1;
}
static void
add_may_alias (tree var, tree alias)
{
  size_t i;
  var_ann_t v_ann = get_var_ann (var);
  var_ann_t a_ann = get_var_ann (alias);
  if (v_ann->may_aliases == ((void *)0))
    v_ann->may_aliases = varray_init (2, VARRAY_DATA_TREE, "aliases");
  for (i = 0; i < ((v_ann->may_aliases)->elements_used); i++)
    if (alias == ((v_ann->may_aliases)->data.tree1[i]))
      return;
  if (is_call_clobbered (var))
    mark_call_clobbered (alias);
  else if (is_call_clobbered (alias))
    mark_call_clobbered (var);
  do { if ((v_ann->may_aliases)->elements_used >= (v_ann->may_aliases)->num_elements) (((v_ann->may_aliases)) = varray_grow ((v_ann->may_aliases), 2 * (v_ann->may_aliases)->num_elements)); (v_ann->may_aliases)->data.tree1[(v_ann->may_aliases)->elements_used++] = (alias); } while (0);
  a_ann->is_alias_tag = 1;
}
static void
merge_pointed_to_info (struct alias_info *ai, tree dest, tree orig)
{
  struct ptr_info_def *dest_pi, *orig_pi;
  collect_points_to_info_for (ai, orig);
  dest_pi = get_ptr_info (dest);
  orig_pi = (orig)->ssa_name.ptr_info;
  if (orig_pi)
    {
      dest_pi->pt_anything |= orig_pi->pt_anything;
      dest_pi->pt_malloc |= orig_pi->pt_malloc;
      if (orig_pi->pt_vars)
 {
   if (dest_pi->pt_vars == ((void *)0))
     {
       dest_pi->pt_vars = bitmap_initialize (((void *)0), 0);
       bitmap_copy (dest_pi->pt_vars, orig_pi->pt_vars);
     }
   else
     bitmap_operation (dest_pi->pt_vars, dest_pi->pt_vars, orig_pi->pt_vars, BITMAP_IOR)
                       ;
      }
    }
}
static void
add_pointed_to_expr (tree ptr, tree value1)
{
  struct ptr_info_def *pi;
  pi = get_ptr_info (ptr);
  if (((enum tree_code) (value1)->common.code) == CALL_EXPR
      && (call_expr_flags (value1) & (4 | 8)))
    pi->pt_malloc = 1;
  else
    pi->pt_anything = 1;
  if (dump_file)
    {
      fprintf (dump_file, "Pointer ");
      print_generic_expr (dump_file, ptr, dump_flags);
      fprintf (dump_file, " points to ");
      if (pi->pt_malloc)
 fprintf (dump_file, "malloc space: ");
      else
 fprintf (dump_file, "an arbitrary address: ");
      print_generic_expr (dump_file, value1, dump_flags);
      fprintf (dump_file, "\n");
    }
}
static void
add_pointed_to_var (struct alias_info *ai, tree ptr, tree value1)
{
  if (((enum tree_code) (value1)->common.code) == ADDR_EXPR)
    {
      tree pt_var;
      struct ptr_info_def *pi;
      size_t uid;
      pt_var = ((value1)->exp.operands[0]);
      if (tree_code_type[(int) (((enum tree_code) (pt_var)->common.code))] == 'r')
 pt_var = get_base_address (pt_var);
      if (pt_var && (((enum tree_code) (pt_var)->common.code) == VAR_DECL || ((enum tree_code) (pt_var)->common.code) == PARM_DECL || ((enum tree_code) (pt_var)->common.code) == RESULT_DECL || (((enum tree_code) (pt_var)->common.code) == SSA_NAME && (((enum tree_code) ((pt_var)->ssa_name.var)->common.code) == VAR_DECL || ((enum tree_code) ((pt_var)->ssa_name.var)->common.code) == PARM_DECL || ((enum tree_code) ((pt_var)->ssa_name.var)->common.code) == RESULT_DECL))))
 {
   pi = get_ptr_info (ptr);
   uid = var_ann (pt_var)->uid;
   if (pi->pt_vars == ((void *)0))
     pi->pt_vars = bitmap_initialize (((void *)0), 0);
   bitmap_set_bit (pi->pt_vars, uid);
   bitmap_set_bit (ai->addresses_needed, uid);
 }
      else
 add_pointed_to_expr (ptr, value1);
    }
  else
    add_pointed_to_expr (ptr, value1);
}
static unsigned char
collect_points_to_info_r (tree var, tree stmt, void *data)
{
  struct alias_info *ai = (struct alias_info *) data;
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "Visiting use-def links for ");
      print_generic_expr (dump_file, var, dump_flags);
      fprintf (dump_file, "\n");
    }
  if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR)
    {
      tree rhs = ((stmt)->exp.operands[1]);
      while ((((enum tree_code) (rhs)->common.code) == NOP_EXPR || ((enum tree_code) (rhs)->common.code) == CONVERT_EXPR || ((enum tree_code) (rhs)->common.code) == NON_LVALUE_EXPR) && ((rhs)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((rhs)->common.type))->type.mode) == ((((((rhs)->exp.operands[0]))->common.type))->type.mode))) (rhs) = ((rhs)->exp.operands[0]);
      if (is_gimple_min_invariant (rhs))
 add_pointed_to_var (ai, var, rhs);
      else if (((enum tree_code) (rhs)->common.code) == SSA_NAME
        && (((enum tree_code) (((rhs)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((rhs)->common.type))->common.code) == REFERENCE_TYPE))
 merge_pointed_to_info (ai, var, rhs);
      else if (((enum tree_code) (rhs)->common.code) == PLUS_EXPR
        || ((enum tree_code) (rhs)->common.code) == MINUS_EXPR)
 {
   tree op0 = ((rhs)->exp.operands[0]);
   tree op1 = ((rhs)->exp.operands[1]);
   if (((enum tree_code) (op0)->common.code) == SSA_NAME
       && (((enum tree_code) (((op0)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((op0)->common.type))->common.code) == REFERENCE_TYPE))
     merge_pointed_to_info (ai, var, op0);
   else if (((enum tree_code) (op1)->common.code) == SSA_NAME
     && (((enum tree_code) (((op1)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == REFERENCE_TYPE))
     merge_pointed_to_info (ai, var, op1);
   else if (is_gimple_min_invariant (op0))
     add_pointed_to_var (ai, var, op0);
   else if (is_gimple_min_invariant (op1))
     add_pointed_to_var (ai, var, op1);
   else
     add_pointed_to_expr (var, rhs);
 }
      else
 add_pointed_to_expr (var, rhs);
    }
  else if (((enum tree_code) (stmt)->common.code) == ASM_EXPR)
    {
      get_ptr_info (var)->pt_anything = 1;
    }
  else if ((((enum tree_code) (stmt)->common.code) == NOP_EXPR && (((enum tree_code) (((stmt)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((stmt)->exp.operands[0]))))
    {
      tree decl = (var)->ssa_name.var;
      if (((enum tree_code) (decl)->common.code) == PARM_DECL)
 add_pointed_to_expr (var, decl);
      else if (((decl)->decl.initial))
 add_pointed_to_var (ai, var, ((decl)->decl.initial));
      else
 add_pointed_to_expr (var, decl);
    }
  else if (((enum tree_code) (stmt)->common.code) == PHI_NODE)
    {
      tree lhs = get_def_from_ptr (get_phi_result_ptr (stmt));
      if (is_gimple_min_invariant (var))
 add_pointed_to_var (ai, lhs, var);
      else if (((enum tree_code) (var)->common.code) == SSA_NAME)
 merge_pointed_to_info (ai, lhs, var);
      else
 fancy_abort ("gcc.c", 137266, "?");
    }
  else
    fancy_abort ("gcc.c", 137269, "?");
  return 0;
}
static unsigned char
is_escape_site (tree stmt, size_t *num_calls_p)
{
  if (get_call_expr_in (stmt) != (tree) ((void *)0))
    {
      if (num_calls_p)
 (*num_calls_p)++;
      return 1;
    }
  else if (((enum tree_code) (stmt)->common.code) == ASM_EXPR)
    return 1;
  else if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR)
    {
      tree lhs = ((stmt)->exp.operands[0]);
      if (((enum tree_code) (lhs)->common.code) != SSA_NAME)
 lhs = get_base_address (lhs);
      if (lhs == (tree) ((void *)0))
 return 1;
      if (((enum tree_code) (lhs)->common.code) == SSA_NAME)
 return 0;
      return 1;
    }
  else if (((enum tree_code) (stmt)->common.code) == RETURN_EXPR)
    return 1;
  return 0;
}
static tree
create_memory_tag (tree type, unsigned char is_type_tag)
{
  var_ann_t ann;
  tree tag = create_tmp_var_raw (type, (is_type_tag) ? "TMT" : "NMT");
  ((tag)->decl.context) = current_function_decl;
  ((tag)->common.volatile_flag) = ((type)->common.volatile_flag);
  ((tag)->common.addressable_flag) = 1;
  ann = get_var_ann (tag);
  ann->mem_tag_kind = (is_type_tag) ? TYPE_TAG : NAME_TAG;
  ann->type_mem_tag = (tree) ((void *)0);
  add_referenced_tmp_var (tag);
  bitmap_set_bit (vars_to_rename, ann->uid);
  return tag;
}
static tree
get_nmt_for (tree ptr)
{
  struct ptr_info_def *pi = get_ptr_info (ptr);
  tree tag = pi->name_mem_tag;
  if (tag == (tree) ((void *)0))
    {
      tag = create_memory_tag (((((ptr)->common.type))->common.type), 0);
      if (((enum tree_code) ((ptr)->ssa_name.var)->common.code) == PARM_DECL)
 mark_call_clobbered (tag);
      if (pi->pt_malloc)
 mark_call_clobbered (tag);
    }
  return tag;
}
static tree
get_tmt_for (tree ptr, struct alias_info *ai)
{
  size_t i;
  tree tag;
  tree tag_type = ((((ptr)->common.type))->common.type);
  long tag_set = get_alias_set (tag_type);
  for (i = 0, tag = (tree) ((void *)0); i < ai->num_pointers; i++)
    {
      struct alias_map_d *curr = ai->pointers[i];
      if (tag_set == curr->set
   && (flag_tree_points_to == PTA_NONE
       || same_points_to_set (curr->var, ptr)))
 {
   tag = var_ann (curr->var)->type_mem_tag;
   break;
 }
    }
  if (tag == (tree) ((void *)0))
    {
      struct alias_map_d *alias_map;
      tag = create_memory_tag (tag_type, 1);
      alias_map = xcalloc (1, sizeof (*alias_map));
      alias_map->var = ptr;
      alias_map->set = tag_set;
      ai->pointers[ai->num_pointers++] = alias_map;
    }
  return tag;
}
static void
create_global_var (void)
{
  global_var = build_decl_stat (VAR_DECL,get_identifier (".GLOBAL_VAR"),global_trees[TI_SIZE_TYPE] )
                                          ;
  ((global_var)->decl.artificial_flag) = 1;
  ((global_var)->common.readonly_flag) = 0;
  ((global_var)->decl.external_flag) = 0;
  ((global_var)->common.static_flag) = 1;
  ((global_var)->common.used_flag) = 1;
  ((global_var)->decl.context) = (tree) ((void *)0);
  ((global_var)->common.volatile_flag) = 0;
  ((global_var)->common.addressable_flag) = 0;
  add_referenced_tmp_var (global_var);
  bitmap_set_bit (vars_to_rename, var_ann (global_var)->uid);
}
static void
dump_alias_stats (FILE *file)
{
  const char *funcname
    = lang_hooks.decl_printable_name (current_function_decl, 2);
  fprintf (file, "\nAlias statistics for %s\n\n", funcname);
  fprintf (file, "Total alias queries:\t%u\n", alias_stats.alias_queries);
  fprintf (file, "Total alias mayalias results:\t%u\n",
    alias_stats.alias_mayalias);
  fprintf (file, "Total alias noalias results:\t%u\n",
    alias_stats.alias_noalias);
  fprintf (file, "Total simple queries:\t%u\n",
    alias_stats.simple_queries);
  fprintf (file, "Total simple resolved:\t%u\n",
    alias_stats.simple_resolved);
  fprintf (file, "Total TBAA queries:\t%u\n",
    alias_stats.tbaa_queries);
  fprintf (file, "Total TBAA resolved:\t%u\n",
    alias_stats.tbaa_resolved);
  fprintf (file, "Total PTA queries:\t%u\n",
    alias_stats.pta_queries);
  fprintf (file, "Total PTA resolved:\t%u\n",
    alias_stats.pta_resolved);
}
void
dump_alias_info (FILE *file)
{
  size_t i;
  const char *funcname
    = lang_hooks.decl_printable_name (current_function_decl, 2);
  fprintf (file, "\nAlias information for %s\n\n", funcname);
  for (i = 0; i < ((referenced_vars)->elements_used); i++)
    {
      tree var = ((referenced_vars)->data.tree1[i]);
      var_ann_t ann = var_ann (var);
      if (ann->may_aliases
   || ann->type_mem_tag
   || ann->is_alias_tag
   || ann->mem_tag_kind != NOT_A_TAG)
 dump_variable_dfa (file, var);
    }
  fprintf (file, "\n");
}
void
debug_alias_info (void)
{
  dump_alias_info (stderr);
}
static struct ptr_info_def *
get_ptr_info (tree t)
{
  struct ptr_info_def *pi;
  pi = (t)->ssa_name.ptr_info;
  if (pi == ((void *)0))
    {
      pi = ggc_alloc_stat (sizeof (*pi) );
      memset ((void *)pi, 0, sizeof (*pi));
      (t)->ssa_name.ptr_info = pi;
    }
  return pi;
}
static void
dump_points_to_info_for (FILE *file, tree ptr)
{
  struct ptr_info_def *pi = (ptr)->ssa_name.ptr_info;
  fprintf (file, "Pointer ");
  print_generic_expr (file, ptr, dump_flags);
  if (pi == ((void *)0))
    return;
  if (pi->name_mem_tag)
    {
      fprintf (file, ", name memory tag: ");
      print_generic_expr (file, pi->name_mem_tag, dump_flags);
    }
  if (pi->value_escapes_p)
    fprintf (file, ", its value escapes");
  if (pi->pt_anything)
    fprintf (file, ", points-to anything");
  if (pi->pt_malloc)
    fprintf (file, ", points-to malloc");
  if (pi->pt_vars)
    {
      unsigned ix;
      fprintf (file, ", points-to vars: { ");
      do { bitmap_element *ptr_ = (pi->pt_vars)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (ix) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { print_generic_expr (file, ((referenced_vars)->data.tree1[ix]), dump_flags); fprintf (file, " "); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
     ;
      fprintf (file, "}");
    }
  fprintf (file, "\n");
}
void
dump_points_to_info (FILE *file)
{
  basic_block bb;
  block_stmt_iterator si;
  size_t i;
  const char *fname =
    lang_hooks.decl_printable_name (current_function_decl, 2);
  fprintf (file, "\n\nPointed-to sets for pointers in %s\n\n", fname);
  for (i = 0; i < ((referenced_vars)->elements_used); i++)
    {
      tree var = ((referenced_vars)->data.tree1[i]);
      if ((((enum tree_code) (((var)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((var)->common.type))->common.code) == REFERENCE_TYPE))
 {
   var_ann_t ann = var_ann (var);
   if (ann->default_def)
     dump_points_to_info_for (file, ann->default_def);
 }
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree phi;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 {
   tree ptr = get_def_from_ptr (get_phi_result_ptr (phi));
   if ((((enum tree_code) (((ptr)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((ptr)->common.type))->common.code) == REFERENCE_TYPE))
     dump_points_to_info_for (file, ptr);
 }
 for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
   {
     stmt_ann_t ann = stmt_ann (bsi_stmt (si));
     def_optype defs = get_def_ops (ann);
     if (defs)
       for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
  if ((((enum tree_code) ((((get_def_from_ptr (get_def_op_ptr (((defs)), ((i))))))->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) ((((get_def_from_ptr (get_def_op_ptr (((defs)), ((i))))))->common.type))->common.code) == REFERENCE_TYPE))
    dump_points_to_info_for (file, (get_def_from_ptr (get_def_op_ptr (((defs)), ((i))))));
   }
    }
  fprintf (file, "\n");
}
void
debug_points_to_info (void)
{
  dump_points_to_info (stderr);
}
void
dump_may_aliases_for (FILE *file, tree var)
{
  varray_type aliases;
  if (((enum tree_code) (var)->common.code) == SSA_NAME)
    var = (var)->ssa_name.var;
  aliases = var_ann (var)->may_aliases;
  if (aliases)
    {
      size_t i;
      fprintf (file, "{ ");
      for (i = 0; i < ((aliases)->elements_used); i++)
 {
   print_generic_expr (file, ((aliases)->data.tree1[i]), dump_flags);
   fprintf (file, " ");
 }
      fprintf (file, "}");
    }
}
void
debug_may_aliases_for (tree var)
{
  dump_may_aliases_for (stderr, var);
}
static void tree_ssa_phiopt (void);
static unsigned char conditional_replacement (basic_block, tree, tree, tree);
static unsigned char value_replacement (basic_block, tree, tree, tree);
static unsigned char abs_replacement (basic_block, tree, tree, tree);
static void replace_phi_with_stmt (block_stmt_iterator, basic_block,
       basic_block, tree, tree);
static unsigned char candidate_bb_for_phi_optimization (basic_block,
            basic_block *,
            basic_block *);
static unsigned char empty_block_p (basic_block);
static void
tree_ssa_phiopt (void)
{
  basic_block bb;
  unsigned char removed_phis = 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree arg0, arg1, phi;
      phi = phi_nodes (bb);
      if (phi && (((phi))->common.chain) == ((void *)0)
   && (phi)->phi.num_args == 2)
 {
   arg0 = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((0))));
   arg1 = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((1))));
     if (conditional_replacement (bb, phi, arg0, arg1)
  || value_replacement (bb, phi, arg0, arg1)
  || abs_replacement (bb, phi, arg0, arg1))
       {
  removed_phis = 1;
       }
 }
    }
  if (removed_phis)
    cleanup_tree_cfg ();
}
static unsigned char
empty_block_p (basic_block bb)
{
  block_stmt_iterator bsi;
  bsi = bsi_start (bb);
  while (!bsi_end_p (bsi)
   && (((enum tree_code) (bsi_stmt (bsi))->common.code) == LABEL_EXPR
       || (((enum tree_code) (bsi_stmt (bsi))->common.code) == NOP_EXPR && (((enum tree_code) (((bsi_stmt (bsi))->common.type))->common.code) == VOID_TYPE) && integer_zerop (((bsi_stmt (bsi))->exp.operands[0])))))
    bsi_next (&bsi);
  if (!bsi_end_p (bsi))
    return 0;
  return 1;
}
static unsigned char
candidate_bb_for_phi_optimization (basic_block bb,
       basic_block *cond_block_p,
       basic_block *other_block_p)
{
  tree last0, last1;
  basic_block cond_block, other_block;
  last0 = last_stmt (bb->pred->src);
  last1 = last_stmt (bb->pred->pred_next->src);
  if (last0 && ((enum tree_code) (last0)->common.code) == COND_EXPR)
    {
      cond_block = bb->pred->src;
      other_block = bb->pred->pred_next->src;
    }
  else if (last1 && ((enum tree_code) (last1)->common.code) == COND_EXPR)
    {
      other_block = bb->pred->src;
      cond_block = bb->pred->pred_next->src;
    }
  else
    return 0;
  if (!cond_block->succ
      || !cond_block->succ->succ_next
      || cond_block->succ->succ_next->succ_next
      || (cond_block->succ->flags & 2) != 0
      || (cond_block->succ->succ_next->flags & 2) != 0)
    return 0;
  if (!other_block->pred
      || other_block->pred->src != cond_block
      || other_block->pred->pred_next
      || !other_block->succ
      || other_block->succ->dest != bb
      || other_block->succ->succ_next
      || phi_nodes (other_block))
    return 0;
  *cond_block_p = cond_block;
  *other_block_p = other_block;
  return 1;
}
static void
replace_phi_with_stmt (block_stmt_iterator bsi, basic_block bb,
         basic_block cond_block, tree phi, tree new)
{
  bsi_insert_after (&bsi, new, BSI_NEW_STMT);
  (get_def_from_ptr (get_phi_result_ptr (phi)))->common.chain = new;
  release_phi_node (phi);
  bb_ann (bb)->phi_nodes = ((void *)0);
  if (cond_block->succ->dest == bb)
    {
      cond_block->succ->flags |= 1;
      cond_block->succ->flags &= ~(1024 | 2048);
      ssa_remove_edge (cond_block->succ->succ_next);
    }
  else
    {
      cond_block->succ->succ_next->flags |= 1;
      cond_block->succ->succ_next->flags
 &= ~(1024 | 2048);
      ssa_remove_edge (cond_block->succ);
    }
  bsi = bsi_last (cond_block);
  bsi_remove (&bsi);
  if (dump_file && (dump_flags & (1 << 3)))
    fprintf (dump_file,
       "COND_EXPR in block %d and PHI in block %d converted to straightline code.\n",
       cond_block->index,
       bb->index);
}
static unsigned char
conditional_replacement (basic_block bb, tree phi, tree arg0, tree arg1)
{
  tree result;
  tree old_result = ((void *)0);
  basic_block other_block = ((void *)0);
  basic_block cond_block = ((void *)0);
  tree new, cond;
  block_stmt_iterator bsi;
  edge true_edge, false_edge;
  tree new_var = ((void *)0);
  if ((integer_zerop (arg0) && integer_onep (arg1))
      || (integer_zerop (arg1) && integer_onep (arg0)))
    ;
  else
    return 0;
  if (!candidate_bb_for_phi_optimization (bb, &cond_block, &other_block)
      || !empty_block_p (other_block))
    return 0;
  cond = ((((last_stmt (cond_block)))->exp.operands[0]));
  result = get_def_from_ptr (get_phi_result_ptr (phi));
  if (((enum tree_code) (cond)->common.code) != SSA_NAME
      && !lang_hooks.types_compatible_p (((cond)->common.type), ((result)->common.type)))
    {
      new_var = make_rename_temp (((cond)->common.type), ((void *)0));
      old_result = cond;
      cond = new_var;
    }
  if (!lang_hooks.types_compatible_p (((cond)->common.type), ((result)->common.type)))
    cond = fold_convert (((result)->common.type), cond);
  extract_true_false_edges_from_block (cond_block, &true_edge, &false_edge);
  bsi = bsi_start (bb);
  if (old_result)
    {
      tree new1;
      if (tree_code_type[(int) (((enum tree_code) (old_result)->common.code))] != '<')
 return 0;
      new1 = build (((enum tree_code) (old_result)->common.code), ((result)->common.type),
      ((old_result)->exp.operands[0]),
      ((old_result)->exp.operands[1]));
      new1 = build (MODIFY_EXPR, ((result)->common.type), new_var, new1);
      bsi_insert_after (&bsi, new1, BSI_NEW_STMT);
    }
  if ((((phi)->phi.a[0]).e == true_edge && integer_onep (arg0))
      || (((phi)->phi.a[0]).e == false_edge && integer_zerop (arg0))
      || (((phi)->phi.a[1]).e == true_edge && integer_onep (arg1))
      || (((phi)->phi.a[1]).e == false_edge && integer_zerop (arg1)))
    {
      new = build (MODIFY_EXPR, ((get_def_from_ptr (get_phi_result_ptr (phi)))->common.type),
      get_def_from_ptr (get_phi_result_ptr (phi)), cond);
    }
  else
    {
      tree cond1 = invert_truthvalue (cond);
      cond = cond1;
      if (((enum tree_code) (cond)->common.code) == COND_EXPR)
 return 0;
      if (is_gimple_cast (cond)
   && !is_gimple_val (((cond)->exp.operands[0])))
 {
   tree temp = ((cond)->exp.operands[0]);
   tree new_var_1 = make_rename_temp (((temp)->common.type), ((void *)0));
   new = build (MODIFY_EXPR, ((new_var_1)->common.type), new_var_1, temp);
   bsi_insert_after (&bsi, new, BSI_NEW_STMT);
   cond = fold_convert (((result)->common.type), new_var_1);
 }
      if (((enum tree_code) (cond)->common.code) == TRUTH_NOT_EXPR
   && !is_gimple_val (((cond)->exp.operands[0])))
 return 0;
      new = build (MODIFY_EXPR, ((get_def_from_ptr (get_phi_result_ptr (phi)))->common.type),
      get_def_from_ptr (get_phi_result_ptr (phi)), cond);
    }
  replace_phi_with_stmt (bsi, bb, cond_block, phi, new);
  return 1;
}
static unsigned char
value_replacement (basic_block bb, tree phi, tree arg0, tree arg1)
{
  tree result;
  basic_block other_block = ((void *)0);
  basic_block cond_block = ((void *)0);
  tree new, cond;
  edge true_edge, false_edge;
  if ((((mode_class[((((arg1)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations))
    return 0;
  if (!candidate_bb_for_phi_optimization (bb, &cond_block, &other_block)
      || !empty_block_p (other_block))
    return 0;
  cond = ((((last_stmt (cond_block)))->exp.operands[0]));
  result = get_def_from_ptr (get_phi_result_ptr (phi));
  if (((enum tree_code) (cond)->common.code) != NE_EXPR && ((enum tree_code) (cond)->common.code) != EQ_EXPR)
    return 0;
  extract_true_false_edges_from_block (cond_block, &true_edge, &false_edge);
  if ((operand_equal_p (arg0, ((cond)->exp.operands[0]), 0)
       && operand_equal_p (arg1, ((cond)->exp.operands[1]), 0))
      || (operand_equal_p (arg1, ((cond)->exp.operands[0]), 0)
   && operand_equal_p (arg0, ((cond)->exp.operands[1]), 0)))
    {
      edge e;
      tree arg;
      e = (((enum tree_code) (cond)->common.code) == NE_EXPR ? true_edge : false_edge);
      if (e->dest == other_block)
 e = e->dest->succ;
      if (((phi)->phi.a[0]).e == e)
 arg = arg0;
      else
 arg = arg1;
      new = build (MODIFY_EXPR, ((result)->common.type), result, arg);
      replace_phi_with_stmt (bsi_start (bb), bb, cond_block, phi, new);
      return 1;
    }
  return 0;
}
static unsigned char
abs_replacement (basic_block bb, tree phi, tree arg0, tree arg1)
{
  tree result;
  basic_block other_block = ((void *)0);
  basic_block cond_block = ((void *)0);
  tree new, cond;
  block_stmt_iterator bsi;
  edge true_edge, false_edge;
  tree assign = ((void *)0);
  edge e;
  tree rhs = ((void *)0), lhs = ((void *)0);
  unsigned char negate;
  enum tree_code cond_code;
  if ((((mode_class[((((arg1)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations))
    return 0;
  if (!candidate_bb_for_phi_optimization (bb, &cond_block, &other_block))
    return 0;
  bsi = bsi_start (other_block);
  while (!bsi_end_p (bsi))
    {
      tree stmt = bsi_stmt (bsi);
      if (((enum tree_code) (stmt)->common.code) == LABEL_EXPR
          || (((enum tree_code) (stmt)->common.code) == NOP_EXPR && (((enum tree_code) (((stmt)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((stmt)->exp.operands[0]))))
        {
          bsi_next (&bsi);
          continue;
        }
      if (assign)
 return 0;
      if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR)
        {
          lhs = ((stmt)->exp.operands[0]);
          rhs = ((stmt)->exp.operands[1]);
          if (((enum tree_code) (rhs)->common.code) == NEGATE_EXPR)
            {
              rhs = ((rhs)->exp.operands[0]);
              if ((lhs == arg0 && rhs == arg1)
    || (lhs == arg1 && rhs == arg0))
  {
    assign = stmt;
    bsi_next (&bsi);
  }
       else
  return 0;
            }
   else
     return 0;
        }
      else
 return 0;
    }
  if (assign == ((void *)0))
    return 0;
  cond = ((((last_stmt (cond_block)))->exp.operands[0]));
  result = get_def_from_ptr (get_phi_result_ptr (phi));
  cond_code = ((enum tree_code) (cond)->common.code);
  if (cond_code != GT_EXPR && cond_code != GE_EXPR
      && cond_code != LT_EXPR && cond_code != LE_EXPR)
    return 0;
  if (((cond)->exp.operands[0]) != rhs)
    return 0;
  if (((((enum tree_code) (((((cond)->exp.operands[1]))->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((((cond)->exp.operands[1]))->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((((cond)->exp.operands[1]))->common.type))->common.type))->common.code) == REAL_TYPE))
        ? real_zerop (((cond)->exp.operands[1]))
        : integer_zerop (((cond)->exp.operands[1])))
    ;
  else
    return 0;
  extract_true_false_edges_from_block (cond_block, &true_edge, &false_edge);
  if (cond_code == GT_EXPR || cond_code == GE_EXPR)
    e = true_edge;
  else
    e = false_edge;
  if (e->dest == other_block)
    negate = 1;
  else
    negate = 0;
  if (negate)
    lhs = make_rename_temp (((result)->common.type), ((void *)0));
  else
    lhs = result;
  new = build (MODIFY_EXPR, ((lhs)->common.type),
               lhs, build1_stat (ABS_EXPR,((lhs)->common.type),rhs ));
  replace_phi_with_stmt (bsi_start (bb), bb, cond_block, phi, new);
  if (negate)
    {
      bsi = bsi_start (bb);
      bsi_next (&bsi);
      new = build (MODIFY_EXPR, ((result)->common.type),
                   result, build1_stat (NEGATE_EXPR,((lhs)->common.type),lhs ));
      bsi_insert_after (&bsi, new, BSI_NEW_STMT);
      (result)->common.chain = new;
    }
  return 1;
}
static unsigned char
gate_phiopt (void)
{
  return 1;
}
struct tree_opt_pass pass_phiopt =
{
  "phiopt",
  gate_phiopt,
  tree_ssa_phiopt,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_PHIOPT,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 2)
    | (1 << 3) | (1 << 1)
    | (1 << 4)
};
static bitmap vars;
static unsigned char need_imm_uses_for_forwprop (tree);
static void tree_ssa_forward_propagate_single_use_vars (void);
static void record_single_argument_cond_exprs (varray_type,
            varray_type *,
            bitmap);
static void substitute_single_use_vars (varray_type *, varray_type);
static unsigned char
need_imm_uses_for_forwprop (tree var)
{
  return bitmap_bit_p (vars, (var)->ssa_name.version);
}
static void
record_single_argument_cond_exprs (varray_type cond_worklist,
       varray_type *vars_worklist,
       bitmap vars)
{
  while (((cond_worklist)->elements_used) > 0)
    {
      tree last = ((cond_worklist)->data.tree1[(cond_worklist)->elements_used - 1]);
      do { ((cond_worklist)->elements_used--); } while (0);
      if (last && ((enum tree_code) (last)->common.code) == COND_EXPR)
 {
   tree cond = ((((last))->exp.operands[0]));
   enum tree_code cond_code = ((enum tree_code) (cond)->common.code);
   if (cond_code == SSA_NAME
       || ((cond_code == EQ_EXPR || cond_code == NE_EXPR)
    && ((enum tree_code) (((cond)->exp.operands[0]))->common.code) == SSA_NAME
    && tree_code_type[(int) (((enum tree_code) (((cond)->exp.operands[1]))->common.code))] == 'c'
    && (((enum tree_code) (((((cond)->exp.operands[1]))->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((((cond)->exp.operands[1]))->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((((cond)->exp.operands[1]))->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((((cond)->exp.operands[1]))->common.type))->common.code) == CHAR_TYPE)))
     {
       tree def;
       tree test_var;
       if (cond_code == SSA_NAME)
  test_var = cond;
       else
  test_var = ((cond)->exp.operands[0]);
       if (bitmap_bit_p (vars, (test_var)->ssa_name.version))
  continue;
       def = (test_var)->common.chain;
       if (((enum tree_code) (def)->common.code) == MODIFY_EXPR)
  {
    tree def_rhs = ((def)->exp.operands[1]);
    if (((enum tree_code) (def_rhs)->common.code) == PLUS_EXPR
    || ((enum tree_code) (def_rhs)->common.code) == MINUS_EXPR)
      {
        tree op0 = ((def_rhs)->exp.operands[0]);
        tree op1 = ((def_rhs)->exp.operands[1]);
        if (((enum tree_code) (op0)->common.code) != SSA_NAME
     || tree_code_type[(int) (((enum tree_code) (op1)->common.code))] != 'c'
     || !(((enum tree_code) (((op1)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == CHAR_TYPE))
   continue;
      }
    else if (((enum tree_code) (cond)->common.code) == SSA_NAME
      || integer_zerop (((cond)->exp.operands[1]))
      || integer_onep (((cond)->exp.operands[1])))
      {
        if (tree_code_type[(int) (((enum tree_code) (def_rhs)->common.code))] == '<')
   {
     tree op0 = ((def_rhs)->exp.operands[0]);
     tree op1 = ((def_rhs)->exp.operands[1]);
     if ((((enum tree_code) (op0)->common.code) != SSA_NAME
          && !is_gimple_min_invariant (op0))
         || (((enum tree_code) (op1)->common.code) != SSA_NAME
      && !is_gimple_min_invariant (op1)))
       continue;
          }
        else if (((enum tree_code) (def_rhs)->common.code) == TRUTH_NOT_EXPR)
   {
     def_rhs = ((def_rhs)->exp.operands[0]);
     if (((enum tree_code) (def_rhs)->common.code) != SSA_NAME
         && !is_gimple_min_invariant (def_rhs))
       continue;
   }
        else if (((enum tree_code) (def_rhs)->common.code) == NOP_EXPR
          || ((enum tree_code) (def_rhs)->common.code) == CONVERT_EXPR)
   {
     tree outer_type;
     tree inner_type;
     outer_type = ((def_rhs)->common.type);
     inner_type = ((((def_rhs)->exp.operands[0]))->common.type);
     if ((((enum tree_code) (outer_type)->common.code) == BOOLEAN_TYPE
          && (((enum tree_code) (inner_type)->common.code) == INTEGER_TYPE || ((enum tree_code) (inner_type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (inner_type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (inner_type)->common.code) == CHAR_TYPE))
         || (((enum tree_code) (inner_type)->common.code) == BOOLEAN_TYPE
      && (((enum tree_code) (outer_type)->common.code) == INTEGER_TYPE || ((enum tree_code) (outer_type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (outer_type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (outer_type)->common.code) == CHAR_TYPE)))
       ;
     else
       continue;
   }
        else
   continue;
      }
    else
      continue;
    do { if ((*vars_worklist)->elements_used >= (*vars_worklist)->num_elements) (((*vars_worklist)) = varray_grow ((*vars_worklist), 2 * (*vars_worklist)->num_elements)); (*vars_worklist)->data.tree1[(*vars_worklist)->elements_used++] = (test_var); } while (0);
    bitmap_set_bit (vars, (test_var)->ssa_name.version);
  }
     }
 }
    }
}
static void
substitute_single_use_vars (varray_type *cond_worklist,
       varray_type vars_worklist)
{
  while (((vars_worklist)->elements_used) > 0)
    {
      tree test_var = ((vars_worklist)->data.tree1[(vars_worklist)->elements_used - 1]);
      tree def = (test_var)->common.chain;
      dataflow_t df;
      int j, num_uses, propagated_uses;
      block_stmt_iterator bsi;
      do { ((vars_worklist)->elements_used--); } while (0);
      df = get_immediate_uses (def);
      num_uses = num_immediate_uses (df);
      propagated_uses = 0;
      if (num_uses == 1
   || (((enum tree_code) (((test_var)->common.type))->common.code) == BOOLEAN_TYPE
       && ((enum tree_code) (((def)->exp.operands[1]))->common.code) == TRUTH_NOT_EXPR
       && (((enum tree_code) (((((def)->exp.operands[1]))->exp.operands[0]))->common.code)
    == SSA_NAME)))
 ;
      else
 continue;
      for (j = 0; j < num_uses; j++)
 {
   tree cond_stmt;
   tree cond;
   enum tree_code cond_code;
   tree def_rhs;
   enum tree_code def_rhs_code;
   tree new_cond;
   cond_stmt = immediate_use (df, j);
   if (((enum tree_code) (cond_stmt)->common.code) != COND_EXPR)
     continue;
   cond = ((((cond_stmt))->exp.operands[0]));
   cond_code = ((enum tree_code) (cond)->common.code);
   def_rhs = ((def)->exp.operands[1]);
   def_rhs_code = ((enum tree_code) (def_rhs)->common.code);
   if (def_rhs_code == PLUS_EXPR || def_rhs_code == MINUS_EXPR)
     {
       tree op0 = ((def_rhs)->exp.operands[0]);
       tree op1 = ((def_rhs)->exp.operands[1]);
       enum tree_code new_code;
       tree t;
       new_code = def_rhs_code == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR;
       t = int_const_binop (new_code, ((cond)->exp.operands[1]), op1, 0);
       if (!is_gimple_val (t))
  continue;
       new_cond = build (cond_code, global_trees[TI_BOOLEAN_TYPE], op0, t);
     }
   else if (tree_code_type[(int) (def_rhs_code)] == '<')
     {
       tree op0 = ((def_rhs)->exp.operands[0]);
       tree op1 = ((def_rhs)->exp.operands[1]);
       new_cond = build (def_rhs_code, global_trees[TI_BOOLEAN_TYPE], op0, op1);
       if ((cond_code == EQ_EXPR
     && integer_zerop (((cond)->exp.operands[1])))
    || (cond_code == NE_EXPR
        && integer_onep (((cond)->exp.operands[1]))))
  {
    new_cond = invert_truthvalue (new_cond);
    if (tree_code_type[(int) (((enum tree_code) (new_cond)->common.code))] != '<'
        && ((enum tree_code) (new_cond)->common.code) != SSA_NAME)
      continue;
  }
     }
   else
     {
       unsigned char invert = 0;
       enum tree_code new_code;
       if (def_rhs_code == TRUTH_NOT_EXPR)
  invert = 1;
       if (cond_code == SSA_NAME
    || (cond_code == NE_EXPR
        && integer_zerop (((cond)->exp.operands[1])))
    || (cond_code == EQ_EXPR
        && integer_onep (((cond)->exp.operands[1]))))
  new_code = NE_EXPR;
       else
  new_code = EQ_EXPR;
       if (invert)
  new_code = (new_code == EQ_EXPR ? NE_EXPR : EQ_EXPR);
       new_cond = build (new_code,
    global_trees[TI_BOOLEAN_TYPE],
    ((def_rhs)->exp.operands[0]),
    convert (((def_rhs)->common.type),
      global_trees[TI_INTEGER_ZERO]));
     }
   if (dump_file && (dump_flags & (1 << 3)))
     {
       fprintf (dump_file, "  Replaced '");
       print_generic_expr (dump_file, cond, dump_flags);
       fprintf (dump_file, "' with '");
       print_generic_expr (dump_file, new_cond, dump_flags);
       fprintf (dump_file, "'\n");
     }
   ((((cond_stmt))->exp.operands[0])) = new_cond;
   modify_stmt (cond_stmt);
   propagated_uses++;
   do { if ((*cond_worklist)->elements_used >= (*cond_worklist)->num_elements) (((*cond_worklist)) = varray_grow ((*cond_worklist), 2 * (*cond_worklist)->num_elements)); (*cond_worklist)->data.tree1[(*cond_worklist)->elements_used++] = (cond_stmt); } while (0);
 }
      if (num_uses && num_uses == propagated_uses)
 for (bsi = bsi_start (bb_for_stmt (def));
      !bsi_end_p (bsi);
      bsi_next (&bsi))
   {
     if (def == bsi_stmt (bsi))
       {
  bsi_remove (&bsi);
  break;
       }
   }
    }
}
static void
tree_ssa_forward_propagate_single_use_vars (void)
{
  basic_block bb;
  varray_type vars_worklist, cond_worklist;
  vars = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  vars_worklist = varray_init (10, VARRAY_DATA_TREE, "VARS worklist");
  cond_worklist = varray_init (10, VARRAY_DATA_TREE, "COND worklist");
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree last = last_stmt (bb);
      if (last && ((enum tree_code) (last)->common.code) == COND_EXPR)
 do { if ((cond_worklist)->elements_used >= (cond_worklist)->num_elements) (((cond_worklist)) = varray_grow ((cond_worklist), 2 * (cond_worklist)->num_elements)); (cond_worklist)->data.tree1[(cond_worklist)->elements_used++] = (last); } while (0);
    }
  while (((cond_worklist)->elements_used) > 0)
    {
      record_single_argument_cond_exprs (cond_worklist, &vars_worklist, vars);
      if (((vars_worklist)->elements_used) > 0)
 {
   compute_immediate_uses (1 << 0, need_imm_uses_for_forwprop);
   bitmap_clear (vars);
   substitute_single_use_vars (&cond_worklist, vars_worklist);
   free_df ();
 }
    }
  do { if (vars) { bitmap_clear (vars); free (vars); (vars) = 0; } } while (0);
}
static unsigned char
gate_forwprop (void)
{
  return 1;
}
struct tree_opt_pass pass_forwprop = {
  "forwprop",
  gate_forwprop,
  tree_ssa_forward_propagate_single_use_vars,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_FORWPROP,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 2)
  | (1 << 3)
};
struct var_map_elt
{
  tree old;
  tree new;
};
struct nesting_info
{
  struct nesting_info *outer;
  struct nesting_info *inner;
  struct nesting_info *next;
  htab_t var_map1;
  tree context;
  tree new_local_var_chain;
  tree frame_type;
  tree frame_decl;
  tree chain_field;
  tree chain_decl;
  tree nl_goto_field;
  unsigned char any_parm_remapped;
  unsigned char any_tramp_created;
};
static hashval_t
var_map_hash (const void *x)
{
  const struct var_map_elt *a = x;
  return htab_hash_pointer (a->old);
}
static int
var_map_eq (const void *x, const void *y)
{
  const struct var_map_elt *a = x;
  const struct var_map_elt *b = y;
  return a->old == b->old;
}
static tree
create_tmp_var_for (struct nesting_info *info, tree type, const char *prefix)
{
  tree tmp_var;
  tmp_var = create_tmp_var_raw (type, prefix);
  ((tmp_var)->decl.context) = info->context;
  ((tmp_var)->common.chain) = info->new_local_var_chain;
  ((tmp_var)->decl.seen_in_bind_expr) = 1;
  info->new_local_var_chain = tmp_var;
  return tmp_var;
}
static tree
build_addr (tree exp)
{
  tree base = exp;
  while (((enum tree_code) (base)->common.code) == REALPART_EXPR || ((enum tree_code) (base)->common.code) == IMAGPART_EXPR
  || handled_component_p (base))
    base = ((base)->exp.operands[0]);
  if ((tree_code_type[(int) (((enum tree_code) (base)->common.code))] == 'd'))
    ((base)->common.addressable_flag) = 1;
  return build1_stat (ADDR_EXPR,build_pointer_type (((exp)->common.type)),exp );
}
static void
insert_field_into_struct (tree type, tree field)
{
  tree *p;
  ((field)->decl.context) = type;
  for (p = &((type)->type.value1s); *p ; p = &((*p)->common.chain))
    if (((field)->decl.u1.a.align) >= ((*p)->decl.u1.a.align))
      break;
  ((field)->common.chain) = *p;
  *p = field;
}
static tree
get_frame_type (struct nesting_info *info)
{
  tree type = info->frame_type;
  if (!type)
    {
      char *name;
      type = make_node_stat (RECORD_TYPE );
      name = concat ("FRAME.",
       ((const char *) (((info->context)->decl.name))->identifier.id.str),
       ((void *)0));
      ((type)->type.name) = get_identifier (name);
      free (name);
      info->frame_type = type;
      info->frame_decl = create_tmp_var_for (info, type, "FRAME");
    }
  return type;
}
static unsigned char
use_pointer_in_frame (tree decl)
{
  if (((enum tree_code) (decl)->common.code) == PARM_DECL)
    {
      return (((enum tree_code) (((decl)->common.type))->common.code) == ARRAY_TYPE || ((enum tree_code) (((decl)->common.type))->common.code) == RECORD_TYPE || ((enum tree_code) (((decl)->common.type))->common.code) == UNION_TYPE || ((enum tree_code) (((decl)->common.type))->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (((decl)->common.type))->common.code) == SET_TYPE);
    }
  else
    {
      return ((decl)->decl.size) == ((void *)0) || !((((decl)->decl.size))->common.constant_flag);
    }
}
static tree
lookup_field_for_decl (struct nesting_info *info, tree decl,
         enum insert_option insert)
{
  struct var_map_elt *elt, dummy;
  void **slot;
  tree field;
  dummy.old = decl;
  slot = htab_find_slot (info->var_map1, &dummy, insert);
  if (!slot)
    {
      if (insert == INSERT)
 fancy_abort ("gcc.c", 139115, "?");
      return ((void *)0);
    }
  elt = *slot;
  if (!elt && insert == INSERT)
    {
      field = make_node_stat (FIELD_DECL );
      ((field)->decl.name) = ((decl)->decl.name);
      if (use_pointer_in_frame (decl))
 {
   ((field)->common.type) = build_pointer_type (((decl)->common.type));
   ((field)->decl.u1.a.align) = ((((field)->common.type))->type.align);
   ((field)->decl.non_addressable) = 1;
 }
      else
 {
          ((field)->common.type) = ((decl)->common.type);
          ((field)->decl.locus) = ((decl)->decl.locus);
          ((field)->decl.u1.a.align) = ((decl)->decl.u1.a.align);
          ((field)->decl.user_align) = ((decl)->decl.user_align);
          ((field)->common.addressable_flag) = ((decl)->common.addressable_flag);
          ((field)->decl.non_addressable) = !((decl)->common.addressable_flag);
          ((field)->common.volatile_flag) = ((decl)->common.volatile_flag);
 }
      insert_field_into_struct (get_frame_type (info), field);
      elt = xmalloc (sizeof (*elt));
      elt->old = decl;
      elt->new = field;
      *slot = elt;
      if (((enum tree_code) (decl)->common.code) == PARM_DECL)
 info->any_parm_remapped = 1;
    }
  else
    field = elt ? elt->new : ((void *)0);
  return field;
}
static tree
get_chain_decl (struct nesting_info *info)
{
  tree decl = info->chain_decl;
  if (!decl)
    {
      tree type;
      type = get_frame_type (info->outer);
      type = build_pointer_type (type);
      decl = build_decl_stat (PARM_DECL,create_tmp_var_name ("CHAIN"),type );
      ((decl)->decl.artificial_flag) = 1;
      ((decl)->decl.ignored_flag) = 1;
      ((decl)->common.used_flag) = 1;
      ((decl)->decl.context) = info->context;
      ((decl)->decl.initial) = type;
      ((decl)->common.readonly_flag) = 1;
      info->chain_decl = decl;
    }
  return decl;
}
static tree
get_chain_field (struct nesting_info *info)
{
  tree field = info->chain_field;
  if (!field)
    {
      tree type = build_pointer_type (get_frame_type (info->outer));
      field = make_node_stat (FIELD_DECL );
      ((field)->decl.name) = get_identifier ("__chain");
      ((field)->common.type) = type;
      ((field)->decl.u1.a.align) = ((type)->type.align);
      ((field)->decl.non_addressable) = 1;
      insert_field_into_struct (get_frame_type (info), field);
      info->chain_field = field;
    }
  return field;
}
static tree
init_tmp_var (struct nesting_info *info, tree exp, tree_stmt_iterator *tsi)
{
  tree t, stmt;
  t = create_tmp_var_for (info, ((exp)->common.type), ((void *)0));
  stmt = build (MODIFY_EXPR, ((t)->common.type), t, exp);
  ((stmt)->exp.locus = (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (tsi_stmt (*tsi))->common.code))])) != 0) ? (tsi_stmt (*tsi))->exp.locus : (location_t *)((void *)0))));
  tsi_link_before (tsi, stmt, TSI_SAME_STMT);
  return t;
}
static tree
gimplify_val_nested (struct nesting_info *info, tree exp, tree_stmt_iterator *tsi)
{
  if (is_gimple_val (exp))
    return exp;
  else
    return init_tmp_var (info, exp, tsi);
}
static tree trampoline_type;
static tree
get_trampoline_type (void)
{
  tree record, t;
  unsigned align, size;
  if (trampoline_type)
    return trampoline_type;
  align = 8;
  size = (0 ? 23 : 10);
  if (align > (8 * (0 ? 8 : 4)))
    {
      size += ((align/8) - 1) & -((8 * (0 ? 8 : 4))/8);
      align = (8 * (0 ? 8 : 4));
    }
  t = build_index_type (build_int_2_wide ((unsigned long) (size - 1), (long) (0)));
  t = build_array_type (integer_types[itk_char], t);
  t = build_decl_stat (FIELD_DECL,get_identifier ("__data"),t );
  ((t)->decl.u1.a.align) = align;
  ((t)->decl.user_align) = 1;
  record = make_node_stat (RECORD_TYPE );
  ((record)->type.name) = get_identifier ("__builtin_trampoline");
  ((record)->type.value1s) = t;
  layout_type (record);
  return record;
}
static tree
lookup_tramp_for_decl (struct nesting_info *info, tree decl,
         enum insert_option insert)
{
  struct var_map_elt *elt, dummy;
  void **slot;
  tree field;
  dummy.old = decl;
  slot = htab_find_slot (info->var_map1, &dummy, insert);
  if (!slot)
    {
      if (insert == INSERT)
 fancy_abort ("gcc.c", 139300, "?");
      return ((void *)0);
    }
  elt = *slot;
  if (!elt && insert == INSERT)
    {
      field = make_node_stat (FIELD_DECL );
      ((field)->decl.name) = ((decl)->decl.name);
      ((field)->common.type) = get_trampoline_type ();
      ((field)->common.addressable_flag) = 1;
      insert_field_into_struct (get_frame_type (info), field);
      elt = xmalloc (sizeof (*elt));
      elt->old = decl;
      elt->new = field;
      *slot = elt;
      info->any_tramp_created = 1;
    }
  else
    field = elt ? elt->new : ((void *)0);
  return field;
}
static tree
get_nl_goto_field (struct nesting_info *info)
{
  tree field = info->nl_goto_field;
  if (!field)
    {
      unsigned size;
      tree type;
      if ((0 ? DImode : SImode) == ptr_mode)
 type = global_trees[TI_PTR_TYPE];
      else
 type = lang_hooks.types.type_for_mode ((0 ? DImode : SImode), 1);
      size = ((unsigned short) mode_size[(0 ? DImode : SImode)]);
      size = size / ((unsigned short) mode_size[(0 ? DImode : SImode)]);
      size = size + 1;
      type = build_array_type (type, build_index_type (build_int_2_wide ((unsigned long) (size), (long) (0))));
      field = make_node_stat (FIELD_DECL );
      ((field)->decl.name) = get_identifier ("__nl_goto_buf");
      ((field)->common.type) = type;
      ((field)->decl.u1.a.align) = ((type)->type.align);
      ((field)->common.addressable_flag) = 1;
      insert_field_into_struct (get_frame_type (info), field);
      info->nl_goto_field = field;
    }
  return field;
}
struct walk_stmt_info
{
  walk_tree_fn callback;
  tree_stmt_iterator tsi;
  struct nesting_info *info;
  unsigned char val_only;
};
static void
walk_stmts (struct walk_stmt_info *wi, tree *tp)
{
  tree t = *tp;
  if (!t)
    return;
  switch (((enum tree_code) (t)->common.code))
    {
    case STATEMENT_LIST:
      {
 tree_stmt_iterator i;
 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
   {
     wi->tsi = i;
     walk_stmts (wi, tsi_stmt_ptr (i));
   }
      }
      break;
    case COND_EXPR:
      walk_tree (&((((t))->exp.operands[0])), wi->callback, wi, ((void *)0));
      walk_stmts (wi, &((((t))->exp.operands[1])));
      walk_stmts (wi, &((((t))->exp.operands[2])));
      break;
    case CATCH_EXPR:
      walk_stmts (wi, &(((t))->exp.operands[1]));
      break;
    case EH_FILTER_EXPR:
      walk_stmts (wi, &(((t))->exp.operands[1]));
      break;
    case TRY_CATCH_EXPR:
    case TRY_FINALLY_EXPR:
      walk_stmts (wi, &((t)->exp.operands[0]));
      walk_stmts (wi, &((t)->exp.operands[1]));
      break;
    case BIND_EXPR:
      walk_stmts (wi, &((((t))->exp.operands[1])));
      break;
    case RETURN_EXPR:
      walk_stmts (wi, &((t)->exp.operands[0]));
      break;
    case MODIFY_EXPR:
      wi->val_only = 0;
      walk_tree (&((t)->exp.operands[0]), wi->callback, wi, ((void *)0));
      wi->val_only = 0;
      walk_tree (&((t)->exp.operands[1]), wi->callback, wi, ((void *)0));
      wi->val_only = 1;
      break;
    default:
      wi->val_only = 1;
      walk_tree (tp, wi->callback, wi, ((void *)0));
      break;
    }
}
static void
walk_function (walk_tree_fn callback, struct nesting_info *info)
{
  struct walk_stmt_info wi;
  memset (&wi, 0, sizeof (wi));
  wi.callback = callback;
  wi.info = info;
  wi.val_only = 1;
  walk_stmts (&wi, &((info->context)->decl.saved_tree));
}
static void
walk_all_functions (walk_tree_fn callback, struct nesting_info *root)
{
  do
    {
      if (root->inner)
 walk_all_functions (callback, root->inner);
      walk_function (callback, root);
      root = root->next;
    }
  while (root);
}
static struct nesting_info *
create_nesting_tree (struct cgraph_node *cgn)
{
  struct nesting_info *info = xcalloc (1, sizeof (*info));
  info->var_map1 = htab_create (7, var_map_hash, var_map_eq, free);
  info->context = cgn->decl;
  for (cgn = cgn->nested; cgn ; cgn = cgn->next_nested)
    {
      struct nesting_info *sub = create_nesting_tree (cgn);
      sub->outer = info;
      sub->next = info->inner;
      info->inner = sub;
    }
  return info;
}
static tree
get_static_chain (struct nesting_info *info, tree target_context,
    tree_stmt_iterator *tsi)
{
  struct nesting_info *i;
  tree x;
  if (info->context == target_context)
    {
      x = build_addr (info->frame_decl);
    }
  else
    {
      x = get_chain_decl (info);
      for (i = info->outer; i->context != target_context; i = i->outer)
 {
   tree field = get_chain_field (i);
   x = build1_stat (INDIRECT_REF,((((x)->common.type))->common.type),x );
   x = build (COMPONENT_REF, ((field)->common.type), x, field, (tree) ((void *)0));
   x = init_tmp_var (info, x, tsi);
 }
    }
  return x;
}
static tree
get_frame_field (struct nesting_info *info, tree target_context,
   tree field, tree_stmt_iterator *tsi)
{
  struct nesting_info *i;
  tree x;
  if (info->context == target_context)
    {
      (void) get_frame_type (info);
      x = info->frame_decl;
    }
  else
    {
      x = get_chain_decl (info);
      for (i = info->outer; i->context != target_context; i = i->outer)
 {
   tree field = get_chain_field (i);
   x = build1_stat (INDIRECT_REF,((((x)->common.type))->common.type),x );
   x = build (COMPONENT_REF, ((field)->common.type), x, field, (tree) ((void *)0));
   x = init_tmp_var (info, x, tsi);
 }
      x = build1_stat (INDIRECT_REF,((((x)->common.type))->common.type),x );
    }
  x = build (COMPONENT_REF, ((field)->common.type), x, field, (tree) ((void *)0));
  return x;
}
static tree
convert_nonlocal_reference (tree *tp, int *walk_subtrees, void *data)
{
  struct walk_stmt_info *wi = data;
  struct nesting_info *info = wi->info;
  tree t = *tp;
  *walk_subtrees = 0;
  switch (((enum tree_code) (t)->common.code))
    {
    case VAR_DECL:
      if (((t)->common.static_flag) || ((t)->decl.external_flag))
 break;
    case PARM_DECL:
      if (decl_function_context (t) != info->context)
 {
   tree target_context = decl_function_context (t);
   struct nesting_info *i;
   tree x;
   for (i = info->outer; i->context != target_context; i = i->outer)
     continue;
   x = lookup_field_for_decl (i, t, INSERT);
   x = get_frame_field (info, target_context, x, &wi->tsi);
   if (use_pointer_in_frame (t))
     {
       x = init_tmp_var (info, x, &wi->tsi);
       x = build1_stat (INDIRECT_REF,((((x)->common.type))->common.type),x );
     }
   if (wi->val_only)
     x = init_tmp_var (info, x, &wi->tsi);
   *tp = x;
 }
      break;
    case GOTO_EXPR:
      if (((enum tree_code) ((((t))->exp.operands[0]))->common.code) != LABEL_DECL)
 {
   *walk_subtrees = 1;
   wi->val_only = 1;
 }
      break;
    case LABEL_DECL:
      if (decl_function_context (t) != info->context)
        ((t)->common.side_effects_flag) = 1;
      break;
    case ADDR_EXPR:
      {
 unsigned char save_val_only = wi->val_only;
 tree save_sub = ((t)->exp.operands[0]);
 wi->val_only = 0;
 walk_tree (&((t)->exp.operands[0]), convert_nonlocal_reference, wi, ((void *)0));
 wi->val_only = 1;
 if (save_sub != ((t)->exp.operands[0]))
   {
     ((t)->common.invariant_flag) = 0;
     if (save_val_only)
       *tp = gimplify_val_nested (wi->info, t, &wi->tsi);
   }
      }
      break;
    case REALPART_EXPR:
    case IMAGPART_EXPR:
    case COMPONENT_REF:
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
    case BIT_FIELD_REF:
      wi->val_only = 1;
      for (; handled_component_p (t)
    || ((enum tree_code) (t)->common.code) == REALPART_EXPR || ((enum tree_code) (t)->common.code) == IMAGPART_EXPR;
    tp = &((t)->exp.operands[0]), t = *tp)
 {
   if (((enum tree_code) (t)->common.code) == COMPONENT_REF)
     walk_tree (&((t)->exp.operands[2]), convert_nonlocal_reference, wi,
         ((void *)0));
   else if (((enum tree_code) (t)->common.code) == ARRAY_REF
     || ((enum tree_code) (t)->common.code) == ARRAY_RANGE_REF)
     {
       walk_tree (&((t)->exp.operands[1]), convert_nonlocal_reference, wi,
    ((void *)0));
       walk_tree (&((t)->exp.operands[2]), convert_nonlocal_reference, wi,
    ((void *)0));
       walk_tree (&((t)->exp.operands[3]), convert_nonlocal_reference, wi,
    ((void *)0));
     }
   else if (((enum tree_code) (t)->common.code) == BIT_FIELD_REF)
     {
       walk_tree (&((t)->exp.operands[1]), convert_nonlocal_reference, wi,
    ((void *)0));
       walk_tree (&((t)->exp.operands[2]), convert_nonlocal_reference, wi,
    ((void *)0));
     }
 }
      wi->val_only = 0;
      walk_tree (tp, convert_nonlocal_reference, wi, ((void *)0));
      break;
    default:
      if (!(tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd') && !(tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
 {
   *walk_subtrees = 1;
          wi->val_only = 1;
 }
      break;
    }
  return (tree) ((void *)0);
}
static tree
convert_local_reference (tree *tp, int *walk_subtrees, void *data)
{
  struct walk_stmt_info *wi = data;
  struct nesting_info *info = wi->info;
  tree t = *tp, field, x, y;
  switch (((enum tree_code) (t)->common.code))
    {
    case VAR_DECL:
      if (((t)->common.static_flag) || ((t)->decl.external_flag))
 break;
    case PARM_DECL:
      if (decl_function_context (t) == info->context)
 {
   if (use_pointer_in_frame (t))
     break;
   field = lookup_field_for_decl (info, t, NO_INSERT);
   if (!field)
     break;
   x = get_frame_field (info, info->context, field, &wi->tsi);
   if (wi->val_only)
     x = init_tmp_var (info, x, &wi->tsi);
   *tp = x;
 }
      break;
    case ADDR_EXPR:
      {
 unsigned char save_val_only = wi->val_only;
 tree save_sub = ((t)->exp.operands[0]);
 wi->val_only = 0;
 walk_tree (&((t)->exp.operands[0]), convert_local_reference, wi, ((void *)0));
 wi->val_only = save_val_only;
 if (((t)->exp.operands[0]) != save_sub)
   {
     ((info->frame_decl)->common.addressable_flag) = 1;
     if (save_val_only)
       *tp = gimplify_val_nested (wi->info, t, &wi->tsi);
   }
      }
      break;
    case CALL_EXPR:
      *walk_subtrees = 1;
      x = get_callee_fndecl (t);
      if (!x || ((x)->decl.built_in_class) != BUILT_IN_NORMAL)
 break;
      if (((x)->decl.u1.f) != BUILT_IN_STACK_ALLOC)
 break;
      t = ((((t)->exp.operands[1]))->list.value1);
      if (((enum tree_code) (t)->common.code) != ADDR_EXPR)
 fancy_abort ("gcc.c", 139791, "?");
      t = ((t)->exp.operands[0]);
      if (((enum tree_code) (t)->common.code) != VAR_DECL)
 fancy_abort ("gcc.c", 139794, "?");
      field = lookup_field_for_decl (info, t, NO_INSERT);
      if (!field)
 break;
      if (!use_pointer_in_frame (t))
 fancy_abort ("gcc.c", 139799, "?");
      x = build_addr (t);
      y = get_frame_field (info, info->context, field, &wi->tsi);
      x = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], y, x);
      ((x)->exp.locus = (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (tsi_stmt (wi->tsi))->common.code))])) != 0) ? (tsi_stmt (wi->tsi))->exp.locus : (location_t *)((void *)0))));
      tsi_link_after (&wi->tsi, x, TSI_SAME_STMT);
      break;
    case REALPART_EXPR:
    case IMAGPART_EXPR:
    case COMPONENT_REF:
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
    case BIT_FIELD_REF:
      wi->val_only = 1;
      for (; handled_component_p (t)
    || ((enum tree_code) (t)->common.code) == REALPART_EXPR || ((enum tree_code) (t)->common.code) == IMAGPART_EXPR;
    tp = &((t)->exp.operands[0]), t = *tp)
 {
   if (((enum tree_code) (t)->common.code) == COMPONENT_REF)
     walk_tree (&((t)->exp.operands[2]), convert_local_reference, wi,
         ((void *)0));
   else if (((enum tree_code) (t)->common.code) == ARRAY_REF
     || ((enum tree_code) (t)->common.code) == ARRAY_RANGE_REF)
     {
       walk_tree (&((t)->exp.operands[1]), convert_local_reference, wi,
    ((void *)0));
       walk_tree (&((t)->exp.operands[2]), convert_local_reference, wi,
    ((void *)0));
       walk_tree (&((t)->exp.operands[3]), convert_local_reference, wi,
    ((void *)0));
     }
   else if (((enum tree_code) (t)->common.code) == BIT_FIELD_REF)
     {
       walk_tree (&((t)->exp.operands[1]), convert_local_reference, wi,
    ((void *)0));
       walk_tree (&((t)->exp.operands[2]), convert_local_reference, wi,
    ((void *)0));
     }
 }
      wi->val_only = 0;
      walk_tree (tp, convert_local_reference, wi, ((void *)0));
      break;
    default:
      if (!(tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd') && !(tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
 {
   *walk_subtrees = 1;
   wi->val_only = 1;
 }
      break;
    }
  return (tree) ((void *)0);
}
static tree
convert_nl_goto_reference (tree *tp, int *walk_subtrees, void *data)
{
  struct walk_stmt_info *wi = data;
  struct nesting_info *info = wi->info, *i;
  tree t = *tp, label, new_label, target_context, x, arg, field;
  struct var_map_elt *elt;
  void **slot;
  *walk_subtrees = 0;
  if (((enum tree_code) (t)->common.code) != GOTO_EXPR)
    return (tree) ((void *)0);
  label = (((t))->exp.operands[0]);
  if (((enum tree_code) (label)->common.code) != LABEL_DECL)
    return (tree) ((void *)0);
  target_context = decl_function_context (label);
  if (target_context == info->context)
    return (tree) ((void *)0);
  for (i = info->outer; target_context != i->context; i = i->outer)
    continue;
  new_label = create_artificial_label ();
  ((new_label)->decl.nonlocal_flag) = 1;
  elt = xmalloc (sizeof (*elt));
  elt->old = label;
  elt->new = new_label;
  slot = htab_find_slot (i->var_map1, elt, INSERT);
  *slot = elt;
  field = get_nl_goto_field (i);
  x = get_frame_field (info, target_context, field, &wi->tsi);
  x = build_addr (x);
  x = gimplify_val_nested (info, x, &wi->tsi);
  arg = tree_cons_stat (((void *)0),x,((void *)0) );
  x = build_addr (new_label);
  arg = tree_cons_stat (((void *)0),x,arg );
  x = implicit_built_in_decls[BUILT_IN_NONLOCAL_GOTO];
  x = build_function_call_expr (x, arg);
  ((x)->exp.locus = (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (tsi_stmt (wi->tsi))->common.code))])) != 0) ? (tsi_stmt (wi->tsi))->exp.locus : (location_t *)((void *)0))));
  *tsi_stmt_ptr (wi->tsi) = x;
  return (tree) ((void *)0);
}
static tree
convert_nl_goto_receiver (tree *tp, int *walk_subtrees, void *data)
{
  struct walk_stmt_info *wi = data;
  struct nesting_info *info = wi->info;
  tree t = *tp, label, new_label, x;
  struct var_map_elt *elt, dummy;
  tree_stmt_iterator tmp_tsi;
  *walk_subtrees = 0;
  if (((enum tree_code) (t)->common.code) != LABEL_EXPR)
    return (tree) ((void *)0);
  label = (((t))->exp.operands[0]);
  dummy.old = label;
  elt = htab_find (info->var_map1, &dummy);
  if (!elt)
    return (tree) ((void *)0);
  new_label = elt->new;
  tmp_tsi = wi->tsi;
  tsi_prev (&tmp_tsi);
  if (tsi_end_p (tmp_tsi) || block_may_fallthru (tsi_stmt (tmp_tsi)))
    {
      x = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],label );
      tsi_link_before (&wi->tsi, x, TSI_SAME_STMT);
    }
  x = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],new_label );
  tsi_link_before (&wi->tsi, x, TSI_SAME_STMT);
  return (tree) ((void *)0);
}
static tree
convert_tramp_reference (tree *tp, int *walk_subtrees, void *data)
{
  struct walk_stmt_info *wi = data;
  struct nesting_info *info = wi->info, *i;
  tree t = *tp, decl, target_context, x, arg;
  *walk_subtrees = 0;
  switch (((enum tree_code) (t)->common.code))
    {
    case ADDR_EXPR:
      decl = ((t)->exp.operands[0]);
      if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL)
 break;
      target_context = decl_function_context (decl);
      if (!target_context)
 break;
      if (((decl)->decl.regdecl_flag))
 break;
      for (i = info; i->context != target_context; i = i->outer)
 continue;
      x = lookup_tramp_for_decl (i, decl, INSERT);
      x = get_frame_field (info, target_context, x, &wi->tsi);
      x = build_addr (x);
      x = gimplify_val_nested (info, x, &wi->tsi);
      arg = tree_cons_stat (((void *)0),x,((void *)0) );
      x = implicit_built_in_decls[BUILT_IN_ADJUST_TRAMPOLINE];
      x = build_function_call_expr (x, arg);
      x = init_tmp_var (info, x, &wi->tsi);
      x = build1_stat (NOP_EXPR,((t)->common.type),x );
      x = init_tmp_var (info, x, &wi->tsi);
      *tp = x;
      break;
    case CALL_EXPR:
      walk_tree (&((t)->exp.operands[1]), convert_tramp_reference, wi, ((void *)0));
      break;
    default:
      if (!(tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd') && !(tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
 *walk_subtrees = 1;
      break;
    }
  return (tree) ((void *)0);
}
static tree
convert_call_expr (tree *tp, int *walk_subtrees, void *data)
{
  struct walk_stmt_info *wi = data;
  struct nesting_info *info = wi->info;
  tree t = *tp, decl, target_context;
  *walk_subtrees = 0;
  switch (((enum tree_code) (t)->common.code))
    {
    case CALL_EXPR:
      decl = get_callee_fndecl (t);
      if (!decl)
 break;
      target_context = decl_function_context (decl);
      if (target_context && !((decl)->decl.regdecl_flag))
 ((t)->exp.operands[2])
   = get_static_chain (info, target_context, &wi->tsi);
      break;
    case RETURN_EXPR:
    case MODIFY_EXPR:
      *walk_subtrees = 1;
      break;
    default:
      break;
    }
  return (tree) ((void *)0);
}
static void
convert_all_function_calls (struct nesting_info *root)
{
  do
    {
      if (root->inner)
 convert_all_function_calls (root->inner);
      walk_function (convert_tramp_reference, root);
      walk_function (convert_call_expr, root);
      if (root->outer && !root->chain_decl && !root->chain_field)
 ((root->context)->decl.regdecl_flag) = 1;
      else
 {
 }
      root = root->next;
    }
  while (root);
}
static void
finalize_nesting_tree_1 (struct nesting_info *root)
{
  tree stmt_list = ((void *)0);
  tree context = root->context;
  struct function *sf;
  if (root->frame_type)
    {
      layout_type (root->frame_type);
      layout_decl (root->frame_decl, 0);
    }
  if (root->any_parm_remapped)
    {
      tree p;
      for (p = ((context)->decl.arguments); p ; p = ((p)->common.chain))
 {
   tree field, x, y;
   field = lookup_field_for_decl (root, p, NO_INSERT);
   if (!field)
     continue;
   if (use_pointer_in_frame (p))
     x = build_addr (p);
   else
     x = p;
   y = build (COMPONENT_REF, ((field)->common.type),
       root->frame_decl, field, (tree) ((void *)0));
   x = build (MODIFY_EXPR, ((field)->common.type), y, x);
   append_to_statement_list (x, &stmt_list);
 }
    }
  if (root->chain_field)
    {
      tree x = build (COMPONENT_REF, ((root->chain_field)->common.type),
        root->frame_decl, root->chain_field, (tree) ((void *)0));
      x = build (MODIFY_EXPR, ((x)->common.type), x, get_chain_decl (root));
      append_to_statement_list (x, &stmt_list);
    }
  if (root->any_tramp_created)
    {
      struct nesting_info *i;
      for (i = root->inner; i ; i = i->next)
 {
   tree arg, x, field;
   field = lookup_tramp_for_decl (root, i->context, NO_INSERT);
   if (!field)
     continue;
   if (((i->context)->decl.regdecl_flag))
     x = global_trees[TI_NULL_POINTER];
   else
     x = build_addr (root->frame_decl);
   arg = tree_cons_stat (((void *)0),x,((void *)0) );
   x = build_addr (i->context);
   arg = tree_cons_stat (((void *)0),x,arg );
   x = build (COMPONENT_REF, ((field)->common.type),
       root->frame_decl, field, (tree) ((void *)0));
   x = build_addr (x);
   arg = tree_cons_stat (((void *)0),x,arg );
   x = implicit_built_in_decls[BUILT_IN_INIT_TRAMPOLINE];
   x = build_function_call_expr (x, arg);
   append_to_statement_list (x, &stmt_list);
 }
    }
  if (stmt_list)
    {
      annotate_all_with_locus (&stmt_list,
          ((context)->decl.locus));
      append_to_statement_list (((((((context)->decl.saved_tree)))->exp.operands[1])),
    &stmt_list);
      ((((((context)->decl.saved_tree)))->exp.operands[1])) = stmt_list;
    }
  sf = ((root->context)->decl.u2.f);
  sf->static_chain_decl = root->chain_decl;
  if (root->nl_goto_field)
    {
      sf->nonlocal_goto_save_area
 = get_frame_field (root, context, root->nl_goto_field, ((void *)0));
      sf->has_nonlocal_label = 1;
    }
  if (root->new_local_var_chain)
    declare_tmp_vars (root->new_local_var_chain,
        ((root->context)->decl.saved_tree));
  dump_function (TDI_nested, root->context);
}
static void
finalize_nesting_tree (struct nesting_info *root)
{
  do
    {
      if (root->inner)
 finalize_nesting_tree (root->inner);
      finalize_nesting_tree_1 (root);
      root = root->next;
    }
  while (root);
}
static void
free_nesting_tree (struct nesting_info *root)
{
  struct nesting_info *next;
  do
    {
      if (root->inner)
 free_nesting_tree (root->inner);
      htab_delete (root->var_map1);
      next = root->next;
      free (root);
      root = next;
    }
  while (root);
}
void
lower_nested_functions (tree fndecl)
{
  struct nesting_info *root;
  struct cgraph_node *cgn;
  cgn = cgraph_node (fndecl);
  if (!cgn->nested)
    return;
  root = create_nesting_tree (cgn);
  walk_all_functions (convert_nonlocal_reference, root);
  walk_all_functions (convert_local_reference, root);
  walk_all_functions (convert_nl_goto_reference, root);
  walk_all_functions (convert_nl_goto_receiver, root);
  convert_all_function_calls (root);
  finalize_nesting_tree (root);
  free_nesting_tree (root);
}
const struct ggc_root_tab gt_ggc_r_gt_tree_nested_h[] = {
  {
    &trampoline_type,
    1,
    sizeof (trampoline_type),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
struct dse_global_data
{
  bitmap stores;
};
struct dse_block_local_data
{
  bitmap stores;
};
static unsigned char gate_dse (void);
static void tree_ssa_dse (void);
static void dse_initialize_block_local_data (struct dom_walk_data *,
          basic_block,
          unsigned char);
static void dse_optimize_stmt (struct dom_walk_data *,
          basic_block,
          block_stmt_iterator);
static void dse_record_phis (struct dom_walk_data *, basic_block);
static void dse_finalize_block (struct dom_walk_data *, basic_block);
static void fix_phi_uses (tree, tree);
static void fix_stmt_v_may_defs (tree, tree);
static void record_voperand_set (bitmap, bitmap *, unsigned int);
static unsigned char
need_imm_uses_for_dse (tree var)
{
  return !is_gimple_reg (var);
}
static void
fix_phi_uses (tree phi, tree stmt)
{
  stmt_ann_t ann = stmt_ann (stmt);
  v_may_def_optype v_may_defs;
  unsigned int i;
  int j;
  get_stmt_operands (stmt);
  v_may_defs = get_v_may_def_ops (ann);
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      tree v_may_def = (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i)))));
      for (j = 0; j < (phi)->phi.num_args; j++)
 if (v_may_def == get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((j)))))
   ((*((get_phi_arg_def_ptr (((phi)), ((j)))).use)) = (((get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((i))))))));
    }
}
static void
fix_stmt_v_may_defs (tree stmt1, tree stmt2)
{
  stmt_ann_t ann1 = stmt_ann (stmt1);
  stmt_ann_t ann2 = stmt_ann (stmt2);
  v_may_def_optype v_may_defs1;
  v_may_def_optype v_may_defs2;
  unsigned int i, j;
  get_stmt_operands (stmt1);
  get_stmt_operands (stmt2);
  v_may_defs1 = get_v_may_def_ops (ann1);
  v_may_defs2 = get_v_may_def_ops (ann2);
  for (i = 0; i < ((v_may_defs1) ? (v_may_defs1)->num_v_may_defs : 0); i++)
    {
      tree v_may_def1 = (get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs1)), ((i)))));
      for (j = 0; j < ((v_may_defs2) ? (v_may_defs2)->num_v_may_defs : 0); j++)
 {
   if (v_may_def1 == (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs2)), ((j))))))
     {
       (((*((get_v_may_def_op_ptr (((v_may_defs1)), ((i)))).use)) = (((get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs2)), ((j)))))))));
       break;
     }
 }
    }
}
static void
record_voperand_set (bitmap global, bitmap *local, unsigned int uid)
{
  if (*local == ((void *)0))
    *local = bitmap_initialize (((void *)0), 0);
  bitmap_set_bit (*local, uid);
  bitmap_set_bit (global, uid);
}
static void
dse_initialize_block_local_data (struct dom_walk_data *walk_data,
     basic_block bb ,
     unsigned char recycled)
{
  struct dse_block_local_data *bd
    = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  if (recycled)
    {
      if (bd->stores)
 bitmap_clear (bd->stores);
    }
}
static void
dse_optimize_stmt (struct dom_walk_data *walk_data,
     basic_block bb ,
     block_stmt_iterator bsi)
{
  struct dse_block_local_data *bd
    = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  struct dse_global_data *dse_gd = walk_data->global_data;
  tree stmt = bsi_stmt (bsi);
  stmt_ann_t ann = stmt_ann (stmt);
  v_may_def_optype v_may_defs;
  get_stmt_operands (stmt);
  v_may_defs = get_v_may_def_ops (ann);
  if (((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0) == 0)
    return;
  if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR
      && ((enum tree_code) (((stmt)->exp.operands[1]))->common.code) != CALL_EXPR)
    {
      dataflow_t df = get_immediate_uses (stmt);
      unsigned int num_uses = num_immediate_uses (df);
      tree use;
      tree skipped_phi;
      if (num_uses == 0)
 {
   record_voperand_set (dse_gd->stores, &bd->stores, ann->uid);
   return;
 }
      use = immediate_use (df, 0);
      skipped_phi = ((void *)0);
      while (num_uses == 1
      && ((enum tree_code) (use)->common.code) == PHI_NODE
      && bitmap_bit_p (dse_gd->stores, stmt_ann (use)->uid))
 {
   if (!skipped_phi)
     skipped_phi = use;
   df = get_immediate_uses (use);
   num_uses = num_immediate_uses (df);
   use = immediate_use (df, 0);
 }
      if (num_uses == 1
   && bitmap_bit_p (dse_gd->stores, stmt_ann (use)->uid)
   && operand_equal_p (((stmt)->exp.operands[0]),
         ((use)->exp.operands[0]), 0))
 {
   if (skipped_phi)
     fix_phi_uses (skipped_phi, stmt);
   else
     fix_stmt_v_may_defs (use, stmt);
   if (dump_file && (dump_flags & (1 << 3)))
            {
              fprintf (dump_file, "  Deleted dead store '");
              print_generic_expr (dump_file, bsi_stmt (bsi), dump_flags);
              fprintf (dump_file, "'\n");
            }
   redirect_immediate_uses (stmt, skipped_phi ? skipped_phi : use);
   bsi_remove (&bsi);
 }
      record_voperand_set (dse_gd->stores, &bd->stores, ann->uid);
    }
}
static void
dse_record_phis (struct dom_walk_data *walk_data, basic_block bb)
{
  struct dse_block_local_data *bd
    = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  struct dse_global_data *dse_gd = walk_data->global_data;
  tree phi;
  for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
    if (need_imm_uses_for_dse (get_def_from_ptr (get_phi_result_ptr (phi))))
      record_voperand_set (dse_gd->stores,
      &bd->stores,
      get_stmt_ann (phi)->uid);
}
static void
dse_finalize_block (struct dom_walk_data *walk_data,
      basic_block bb )
{
  struct dse_block_local_data *bd
    = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  struct dse_global_data *dse_gd = walk_data->global_data;
  bitmap stores = dse_gd->stores;
  unsigned int i;
  if (bd->stores)
    do { bitmap_element *ptr_ = (bd->stores)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); bitmap_clear_bit (stores, i);; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0);
}
static void
tree_ssa_dse (void)
{
  struct dom_walk_data walk_data;
  struct dse_global_data dse_gd;
  unsigned int uid = 0;
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      block_stmt_iterator bsi;
      tree phi;
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
 stmt_ann (bsi_stmt (bsi))->uid = uid++;
      for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
 stmt_ann (phi)->uid = uid++;
    }
  calculate_dominance_info (CDI_POST_DOMINATORS);
  compute_immediate_uses (1 << 1, need_imm_uses_for_dse);
  walk_data.walk_stmts_backward = 1;
  walk_data.dom_direction = CDI_POST_DOMINATORS;
  walk_data.initialize_block_local_data = dse_initialize_block_local_data;
  walk_data.before_dom_children_before_stmts = ((void *)0);
  walk_data.before_dom_children_walk_stmts = dse_optimize_stmt;
  walk_data.before_dom_children_after_stmts = dse_record_phis;
  walk_data.after_dom_children_before_stmts = ((void *)0);
  walk_data.after_dom_children_walk_stmts = ((void *)0);
  walk_data.after_dom_children_after_stmts = dse_finalize_block;
  walk_data.block_local_data_size = sizeof (struct dse_block_local_data);
  dse_gd.stores = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  walk_data.global_data = &dse_gd;
  init_walk_dominator_tree (&walk_data);
  walk_dominator_tree (&walk_data, EXIT_BLOCK_PTR);
  fini_walk_dominator_tree (&walk_data);
  do { if (dse_gd.stores) { bitmap_clear (dse_gd.stores); free (dse_gd.stores); (dse_gd.stores) = 0; } } while (0);
  free_df ();
  free_dominance_info (CDI_POST_DOMINATORS);
}
static unsigned char
gate_dse (void)
{
  return flag_tree_dse != 0;
}
struct tree_opt_pass pass_dse = {
  "dse",
  gate_dse,
  tree_ssa_dse,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_DSE,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 2)
  | (1 << 3)
};
static htab_t avail_exprs;
struct expr_hash_elt
{
  tree lhs;
  tree rhs;
  stmt_ann_t ann;
  hashval_t hash;
};
static varray_type const_and_copies;
static bitmap nonzero_vars;
static unsigned char cfg_altered;
static bitmap need_eh_cleanup;
struct opt_stats_d
{
  long num_stmts;
  long num_exprs_considered;
  long num_re;
};
struct vrp_element
{
  tree low;
  tree high;
  tree cond;
  basic_block bb;
};
static struct opt_stats_d opt_stats;
static varray_type redirection_edges;
static varray_type vrp_data;
struct dom_walk_block_data
{
  varray_type avail_exprs;
  varray_type const_and_copies;
  varray_type nonzero_vars;
  varray_type stmts_to_rescan;
  varray_type vrp_variables;
  varray_type block_defs;
};
struct eq_expr_value
{
  tree src;
  tree dst;
};
static void optimize_stmt (struct dom_walk_data *,
      basic_block bb,
      block_stmt_iterator);
static tree get_value_for (tree, varray_type table);
static void set_value_for (tree, tree, varray_type table);
static tree lookup_avail_expr (tree, varray_type *, unsigned char);
static struct eq_expr_value get_eq_expr_value (tree, int, varray_type *,
            basic_block, varray_type *);
static hashval_t avail_expr_hash (const void *);
static hashval_t real_avail_expr_hash (const void *);
static int avail_expr_eq (const void *, const void *);
static void htab_statistics2 (FILE *, htab_t);
static void record_cond (tree, tree, varray_type *);
static void record_dominating_conditions (tree, varray_type *);
static void record_const_or_copy (tree, tree, varray_type *);
static void record_equality (tree, tree, varray_type *);
static tree update_rhs_and_lookup_avail_expr (tree, tree, varray_type *,
           stmt_ann_t, unsigned char);
static tree simplify_rhs_and_lookup_avail_expr (struct dom_walk_data *,
      tree, stmt_ann_t, int);
static tree simplify_cond_and_lookup_avail_expr (tree, varray_type *,
       stmt_ann_t, int);
static tree simplify_switch_and_lookup_avail_expr (tree, varray_type *,
         stmt_ann_t, int);
static tree find_equivalent_equality_comparison (tree);
static void record_range (tree, basic_block, varray_type *);
static unsigned char extract_range_from_cond (tree, tree *, tree *, int *);
static void record_equivalences_from_phis (struct dom_walk_data *, basic_block);
static void record_equivalences_from_incoming_edge (struct dom_walk_data *,
          basic_block);
static unsigned char eliminate_redundant_computations (struct dom_walk_data *,
           tree, stmt_ann_t);
static void record_equivalences_from_stmt (tree, varray_type *, varray_type *,
        int, stmt_ann_t);
static void thread_across_edge (struct dom_walk_data *, edge);
static void dom_opt_finalize_block (struct dom_walk_data *, basic_block);
static void dom_opt_initialize_block_local_data (struct dom_walk_data *,
       basic_block, unsigned char);
static void dom_opt_initialize_block (struct dom_walk_data *, basic_block);
static void cprop_into_phis (struct dom_walk_data *, basic_block);
static void remove_local_expressions_from_table (varray_type locals,
       unsigned limit,
       htab_t table);
static void restore_vars_to_original_value (varray_type locals,
         unsigned limit,
         varray_type table);
static void restore_currdefs_to_original_value (varray_type locals,
      unsigned limit);
static void register_definitions_for_stmt (stmt_ann_t, varray_type *);
static void redirect_edges_and_update_ssa_graph (varray_type);
static tree
local_fold (tree t)
{
  t = fold (t);
  while (tree_ssa_useless_type_conversion (t)) t = ((t)->exp.operands[0]);
  return t;
}
static tree
get_value_for (tree var, varray_type table)
{
  return ((table)->data.tree1[(var)->ssa_name.version]);
}
static void
set_value_for (tree var, tree value1, varray_type table)
{
  ((table)->data.tree1[(var)->ssa_name.version]) = value1;
}
static void
redirect_edges_and_update_ssa_graph (varray_type redirection_edges)
{
  basic_block tgt, bb;
  tree phi;
  unsigned int i;
  size_t old_num_referenced_vars = ((referenced_vars)->elements_used);
  bitmap virtuals_to_rename = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (i = 0; i < ((redirection_edges)->elements_used); i += 2)
    {
      block_stmt_iterator bsi;
      edge e;
      basic_block tgt;
      tree phi;
      e = ((redirection_edges)->data.e[i]);
      tgt = ((redirection_edges)->data.e[i + 1])->dest;
      for (phi = phi_nodes (e->dest); phi; phi = (((phi))->common.chain))
 {
   tree result = (get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.var;
   if (is_gimple_reg (get_def_from_ptr (get_phi_result_ptr (phi))))
     bitmap_set_bit (vars_to_rename, var_ann (result)->uid);
   else
     bitmap_set_bit (virtuals_to_rename, var_ann (result)->uid);
        }
      for (bsi = bsi_start (e->dest); ! bsi_end_p (bsi); bsi_next (&bsi))
 {
   unsigned int j;
   def_optype defs;
   v_may_def_optype v_may_defs;
   v_must_def_optype v_must_defs;
   tree stmt = bsi_stmt (bsi);
   stmt_ann_t ann = stmt_ann (stmt);
   if (((enum tree_code) (stmt)->common.code) == COND_EXPR)
     break;
   get_stmt_operands (stmt);
   defs = get_def_ops (ann);
   for (j = 0; j < ((defs) ? (defs)->num_defs : 0); j++)
     {
       tree op = ((get_def_from_ptr (get_def_op_ptr (((defs)), ((j))))))->ssa_name.var;
       bitmap_set_bit (vars_to_rename, var_ann (op)->uid);
     }
   v_may_defs = get_v_may_def_ops (stmt_ann(stmt));
   for (j = 0; j < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); j++)
     {
       tree op = (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((j)))));
       bitmap_set_bit (vars_to_rename, var_ann (op)->uid);
     }
   v_must_defs = get_v_must_def_ops (stmt_ann (stmt));
   for (j = 0; j < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); j++)
     {
       tree op = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((j)))));
       bitmap_set_bit (vars_to_rename, var_ann (op)->uid);
     }
 }
      for (phi = phi_nodes (tgt); phi; phi = (((phi))->common.chain))
 {
   tree result = (get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.var;
   if (is_gimple_reg (get_def_from_ptr (get_phi_result_ptr (phi))))
     bitmap_set_bit (vars_to_rename, var_ann (result)->uid);
   else
     bitmap_set_bit (virtuals_to_rename, var_ann (result)->uid);
        }
    }
  if (bitmap_first_set_bit (vars_to_rename) >= 0)
    rewrite_vars_out_of_ssa (vars_to_rename);
  for (i = 0; i < ((redirection_edges)->elements_used); i += 2)
    {
      edge e = ((redirection_edges)->data.e[i]);
      tree last = last_stmt (e->dest);
      if (last
   && ((enum tree_code) (last)->common.code) != COND_EXPR
   && ((enum tree_code) (last)->common.code) != SWITCH_EXPR)
 {
   e = e->dest->succ;
   ((redirection_edges)->data.e[i]) = e;
 }
    }
  if (((referenced_vars)->elements_used) != old_num_referenced_vars)
    {
      for (i = 0; i < ((redirection_edges)->elements_used); i += 2)
 {
   block_stmt_iterator bsi;
   edge e;
   e = ((redirection_edges)->data.e[i]);
   for (bsi = bsi_start (e->dest); ! bsi_end_p (bsi); bsi_next (&bsi))
     {
       tree stmt = bsi_stmt (bsi);
       if ((((enum tree_code) (stmt)->common.code) == NOP_EXPR && (((enum tree_code) (((stmt)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((stmt)->exp.operands[0])))
    || ((enum tree_code) (stmt)->common.code) == LABEL_EXPR)
  continue;
       if (((enum tree_code) (stmt)->common.code) == COND_EXPR)
  break;
       ((redirection_edges)->data.e[i]) = ((void *)0);
       ((redirection_edges)->data.e[i + 1]) = ((void *)0);
       break;
     }
 }
    }
  for (i = 0; i < ((redirection_edges)->elements_used); i += 2)
    {
      basic_block src;
      edge e;
      e = ((redirection_edges)->data.e[i]);
      if (!e)
 continue;
      tgt = ((redirection_edges)->data.e[i + 1])->dest;
      if (dump_file && (dump_flags & (1 << 3)))
 fprintf (dump_file, "  Threaded jump %d --> %d to %d\n",
   e->src->index, e->dest->index, tgt->index);
      src = e->src;
      e = redirect_edge_and_branch (e, tgt);
      ((e)->insns.t) = (tree) ((void *)0);
      free_dominance_info (CDI_DOMINATORS);
      if ((dump_file && (dump_flags & (1 << 3)))
   && e->src != src)
 fprintf (dump_file, "    basic block %d created\n",
   e->src->index);
      cfg_altered = 1;
    }
  varray_clear(redirection_edges);
  for (i = old_num_referenced_vars; i < ((referenced_vars)->elements_used); i++)
    {
      bitmap_set_bit (vars_to_rename, i);
      var_ann (((referenced_vars)->data.tree1[i]))->out_of_ssa_tag = 0;
    }
  bitmap_operation (vars_to_rename, vars_to_rename, virtuals_to_rename, BITMAP_IOR);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree next;
      for (phi = phi_nodes (bb); phi; phi = next)
 {
   tree result = get_def_from_ptr (get_phi_result_ptr (phi));
   next = (((phi))->common.chain);
   if (bitmap_bit_p (virtuals_to_rename,
       var_ann ((result)->ssa_name.var)->uid))
     remove_phi_node (phi, ((void *)0), bb);
 }
    }
  do { if (virtuals_to_rename) { bitmap_clear (virtuals_to_rename); free (virtuals_to_rename); (virtuals_to_rename) = 0; } } while (0);
}
static void
tree_ssa_dominator_optimize (void)
{
  basic_block bb;
  struct dom_walk_data walk_data;
  unsigned int i;
  for (i = 0; i < ((referenced_vars)->elements_used); i++)
    var_ann (((referenced_vars)->data.tree1[i]))->current_def = ((void *)0);
  mark_dfs_back_edges ();
  avail_exprs = htab_create (1024, real_avail_expr_hash, avail_expr_eq, free);
  const_and_copies = varray_init (((ssa_names)->elements_used), VARRAY_DATA_TREE, "const_and_copies");
  nonzero_vars = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  redirection_edges = varray_init (20, VARRAY_DATA_EDGE, "redirection_edges");
  vrp_data = varray_init (((ssa_names)->elements_used), VARRAY_DATA_GENERIC, "vrp_data");
  need_eh_cleanup = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  walk_data.walk_stmts_backward = 0;
  walk_data.dom_direction = CDI_DOMINATORS;
  walk_data.initialize_block_local_data = dom_opt_initialize_block_local_data;
  walk_data.before_dom_children_before_stmts = dom_opt_initialize_block;
  walk_data.before_dom_children_walk_stmts = optimize_stmt;
  walk_data.before_dom_children_after_stmts = cprop_into_phis;
  walk_data.after_dom_children_before_stmts = ((void *)0);
  walk_data.after_dom_children_walk_stmts = ((void *)0);
  walk_data.after_dom_children_after_stmts = dom_opt_finalize_block;
  walk_data.global_data = ((void *)0);
  walk_data.block_local_data_size = sizeof (struct dom_walk_block_data);
  init_walk_dominator_tree (&walk_data);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    bb_ann (bb)->forwardable = 1;
  calculate_dominance_info (CDI_DOMINATORS);
  do
    {
      cfg_altered = 0;
      walk_dominator_tree (&walk_data, ENTRY_BLOCK_PTR);
      if (((redirection_edges)->elements_used) > 0)
 redirect_edges_and_update_ssa_graph (redirection_edges);
      if (bitmap_first_set_bit (need_eh_cleanup) >= 0)
 {
   cfg_altered = tree_purge_all_dead_eh_edges (need_eh_cleanup);
   bitmap_clear (need_eh_cleanup);
 }
      cfg_altered |= delete_unreachable_blocks ();
      if (cfg_altered)
 {
          free_dominance_info (CDI_DOMINATORS);
   cleanup_tree_cfg ();
   calculate_dominance_info (CDI_DOMINATORS);
 }
      if (cfg_altered
   && bitmap_first_set_bit (vars_to_rename) >= 0)
 {
   rewrite_into_ssa (0);
   bitmap_clear (vars_to_rename);
   ((const_and_copies) = varray_grow (const_and_copies, ((ssa_names)->elements_used)));
   ((vrp_data) = varray_grow (vrp_data, ((ssa_names)->elements_used)));
 }
      bitmap_clear (nonzero_vars);
      htab_empty (avail_exprs);
      varray_clear(const_and_copies);
      varray_clear(vrp_data);
      for (i = 0; i < ((referenced_vars)->elements_used); i++)
 var_ann (((referenced_vars)->data.tree1[i]))->current_def = ((void *)0);
    }
  while (cfg_altered);
  cleanup_tree_cfg ();
  if (dump_file && (dump_flags & (1 << 4)))
    dump_dominator_optimization_stats (dump_file);
  htab_delete (avail_exprs);
  fini_walk_dominator_tree (&walk_data);
  do { if (nonzero_vars) { bitmap_clear (nonzero_vars); free (nonzero_vars); (nonzero_vars) = 0; } } while (0);
  do { if (need_eh_cleanup) { bitmap_clear (need_eh_cleanup); free (need_eh_cleanup); (need_eh_cleanup) = 0; } } while (0);
}
static unsigned char
gate_dominator (void)
{
  return flag_tree_dom != 0;
}
struct tree_opt_pass pass_dominator =
{
  "dom",
  gate_dominator,
  tree_ssa_dominator_optimize,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_SSA_DOMINATOR_OPTS,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 1)
    | (1 << 3)
};
static void
thread_across_edge (struct dom_walk_data *walk_data, edge e)
{
  struct dom_walk_block_data *bd
    = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  block_stmt_iterator bsi;
  tree stmt = ((void *)0);
  tree phi;
  for (phi = phi_nodes (e->dest); phi; phi = (((phi))->common.chain))
    {
      tree src = get_use_from_ptr (get_phi_arg_def_ptr ((((phi))), ((phi_arg_from_edge ((phi),(e))))));
      tree dst = get_def_from_ptr (get_phi_result_ptr (phi));
      record_const_or_copy (dst, src, &bd->const_and_copies);
      register_new_def (dst, &bd->block_defs);
    }
  for (bsi = bsi_start (e->dest); ! bsi_end_p (bsi); bsi_next (&bsi))
    {
      tree lhs, cached_lhs;
      stmt = bsi_stmt (bsi);
      if ((((enum tree_code) (stmt)->common.code) == NOP_EXPR && (((enum tree_code) (((stmt)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((stmt)->exp.operands[0]))) || ((enum tree_code) (stmt)->common.code) == LABEL_EXPR)
 continue;
      if (((enum tree_code) (stmt)->common.code) != MODIFY_EXPR
   || ((enum tree_code) (((stmt)->exp.operands[0]))->common.code) != SSA_NAME)
 break;
      if (((enum tree_code) (((stmt)->exp.operands[1]))->common.code) == SSA_NAME)
 cached_lhs = ((stmt)->exp.operands[1]);
      else
 cached_lhs = lookup_avail_expr (stmt, ((void *)0), 0);
      lhs = ((stmt)->exp.operands[0]);
      if (lhs == cached_lhs)
 break;
      if (!cached_lhs)
 {
   stmt_ann_t ann = stmt_ann (stmt);
   use_optype uses = get_use_ops (ann);
   vuse_optype vuses = get_vuse_ops (ann);
   tree *uses_copy = xcalloc (((uses) ? (uses)->num_uses : 0), sizeof (tree));
   tree *vuses_copy = xcalloc (((vuses) ? (vuses)->num_vuses : 0), sizeof (tree));
   unsigned int i;
   for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
     {
       tree tmp = ((void *)0);
       uses_copy[i] = (get_use_from_ptr (get_use_op_ptr (((uses)), ((i)))));
       if (((enum tree_code) ((get_use_from_ptr (get_use_op_ptr (((uses)), ((i))))))->common.code) == SSA_NAME)
  tmp = get_value_for ((get_use_from_ptr (get_use_op_ptr (((uses)), ((i))))), const_and_copies);
       if (tmp)
  (((*((get_use_op_ptr (((uses)), ((i)))).use)) = ((tmp))));
     }
   for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
     {
       tree tmp = ((void *)0);
       vuses_copy[i] = (get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((i)))));
       if (((enum tree_code) ((get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((i))))))->common.code) == SSA_NAME)
  tmp = get_value_for ((get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((i))))), const_and_copies);
       if (tmp)
  (((*((get_vuse_op_ptr (((vuses)), ((i)))).use)) = ((tmp))));
     }
   cached_lhs = lookup_avail_expr (stmt, ((void *)0), 0);
   for (i = 0; i < ((uses) ? (uses)->num_uses : 0); i++)
     (((*((get_use_op_ptr (((uses)), ((i)))).use)) = ((uses_copy[i]))));
   for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
     (((*((get_vuse_op_ptr (((vuses)), ((i)))).use)) = ((vuses_copy[i]))));
   free (uses_copy);
   free (vuses_copy);
   if (! cached_lhs)
     break;
 }
      if (((enum tree_code) (cached_lhs)->common.code) != SSA_NAME)
 break;
      if ((cached_lhs)->ssa_name.var != (lhs)->ssa_name.var)
 break;
      if (var_ann ((lhs)->ssa_name.var)->current_def != cached_lhs)
 break;
      record_const_or_copy (lhs, cached_lhs, &bd->const_and_copies);
      register_new_def (lhs, &bd->block_defs);
    }
  if (stmt
      && (((enum tree_code) (stmt)->common.code) == COND_EXPR
   || ((enum tree_code) (stmt)->common.code) == SWITCH_EXPR))
    {
      tree cond, cached_lhs;
      edge e1;
      if (!e->flags & 32)
 {
   for (e1 = e->dest->pred; e; e = e->pred_next)
     if (e1->flags & 32)
       break;
   if (e1)
     return;
 }
      if (((enum tree_code) (stmt)->common.code) == COND_EXPR)
 cond = ((((stmt))->exp.operands[0]));
      else
 cond = (((stmt))->exp.operands[0]);
      if (tree_code_type[(int) (((enum tree_code) (cond)->common.code))] == '<')
 {
   tree dummy_cond, op0, op1;
   enum tree_code cond_code;
   op0 = ((cond)->exp.operands[0]);
   op1 = ((cond)->exp.operands[1]);
   cond_code = ((enum tree_code) (cond)->common.code);
   if (((enum tree_code) (op0)->common.code) == SSA_NAME)
     {
       tree tmp = get_value_for (op0, const_and_copies);
       if (tmp)
  op0 = tmp;
     }
   if (((enum tree_code) (op1)->common.code) == SSA_NAME)
     {
       tree tmp = get_value_for (op1, const_and_copies);
       if (tmp)
  op1 = tmp;
     }
   dummy_cond = walk_data->global_data;
   if (! dummy_cond)
     {
       dummy_cond = build (cond_code, global_trees[TI_BOOLEAN_TYPE], op0, op1);
       dummy_cond = build (COND_EXPR, global_trees[TI_VOID_TYPE],
      dummy_cond, ((void *)0), ((void *)0));
       walk_data->global_data = dummy_cond;
     }
   else
     {
       ((((dummy_cond)->exp.operands[0]))->common.code = (cond_code));
       ((((dummy_cond)->exp.operands[0]))->exp.operands[0]) = op0;
       ((((dummy_cond)->exp.operands[0]))->exp.operands[1]) = op1;
     }
   cached_lhs = local_fold (((((dummy_cond))->exp.operands[0])));
   if (! is_gimple_min_invariant (cached_lhs))
     cached_lhs = lookup_avail_expr (dummy_cond, ((void *)0), 0);
    if (!cached_lhs || ! is_gimple_min_invariant (cached_lhs))
     {
       stmt_ann_t ann = get_stmt_ann (dummy_cond);
       cached_lhs = simplify_cond_and_lookup_avail_expr (dummy_cond,
        ((void *)0),
        ann,
        0);
     }
 }
      else if (((enum tree_code) (cond)->common.code) == SSA_NAME)
 {
   cached_lhs = cond;
   cached_lhs = get_value_for (cached_lhs, const_and_copies);
   if (cached_lhs && ! is_gimple_min_invariant (cached_lhs))
     cached_lhs = 0;
 }
      else
 cached_lhs = lookup_avail_expr (stmt, ((void *)0), 0);
      if (cached_lhs)
 {
   edge taken_edge = find_taken_edge (e->dest, cached_lhs);
   basic_block dest = (taken_edge ? taken_edge->dest : ((void *)0));
   if (dest == e->dest)
     return;
   if (dest)
     {
       int saved_forwardable = bb_ann (e->src)->forwardable;
       edge tmp_edge;
       bb_ann (e->src)->forwardable = 0;
       tmp_edge = tree_block_forwards_to (dest);
       taken_edge = (tmp_edge ? tmp_edge : taken_edge);
       bb_ann (e->src)->forwardable = saved_forwardable;
       do { if ((redirection_edges)->elements_used >= (redirection_edges)->num_elements) (((redirection_edges)) = varray_grow ((redirection_edges), 2 * (redirection_edges)->num_elements)); (redirection_edges)->data.e[(redirection_edges)->elements_used++] = (e); } while (0);
       do { if ((redirection_edges)->elements_used >= (redirection_edges)->num_elements) (((redirection_edges)) = varray_grow ((redirection_edges), 2 * (redirection_edges)->num_elements)); (redirection_edges)->data.e[(redirection_edges)->elements_used++] = (taken_edge); } while (0);
     }
 }
    }
}
static void
dom_opt_initialize_block_local_data (struct dom_walk_data *walk_data ,
         basic_block bb ,
         unsigned char recycled )
{
}
static void
dom_opt_initialize_block (struct dom_walk_data *walk_data, basic_block bb)
{
  if (dump_file && (dump_flags & (1 << 3)))
    fprintf (dump_file, "\n\nOptimizing block #%d\n\n", bb->index);
  record_equivalences_from_incoming_edge (walk_data, bb);
  record_equivalences_from_phis (walk_data, bb);
}
static void
initialize_hash_element (tree expr, tree lhs, struct expr_hash_elt *element)
{
  if (tree_code_type[(int) (((enum tree_code) (expr)->common.code))] == '<'
      || ((enum tree_code) (expr)->common.code) == TRUTH_NOT_EXPR)
    {
      element->ann = ((void *)0);
      element->rhs = expr;
    }
  else if (((enum tree_code) (expr)->common.code) == COND_EXPR)
    {
      element->ann = stmt_ann (expr);
      element->rhs = ((((expr))->exp.operands[0]));
    }
  else if (((enum tree_code) (expr)->common.code) == SWITCH_EXPR)
    {
      element->ann = stmt_ann (expr);
      element->rhs = (((expr))->exp.operands[0]);
    }
  else if (((enum tree_code) (expr)->common.code) == RETURN_EXPR && ((expr)->exp.operands[0]))
    {
      element->ann = stmt_ann (expr);
      element->rhs = ((((expr)->exp.operands[0]))->exp.operands[1]);
    }
  else
    {
      element->ann = stmt_ann (expr);
      element->rhs = ((expr)->exp.operands[1]);
    }
  element->lhs = lhs;
  element->hash = avail_expr_hash (element);
}
static void
remove_local_expressions_from_table (varray_type locals,
         unsigned limit,
         htab_t table)
{
  if (! locals)
    return;
  while (((locals)->elements_used) > limit)
    {
      struct expr_hash_elt element;
      tree expr = ((locals)->data.tree1[(locals)->elements_used - 1]);
      do { ((locals)->elements_used--); } while (0);
      initialize_hash_element (expr, ((void *)0), &element);
      htab_remove_elt_with_hash (table, &element, element.hash);
    }
}
static void
restore_nonzero_vars_to_original_value (varray_type locals,
     unsigned limit,
     bitmap table)
{
  if (!locals)
    return;
  while (((locals)->elements_used) > limit)
    {
      tree name = ((locals)->data.tree1[(locals)->elements_used - 1]);
      do { ((locals)->elements_used--); } while (0);
      bitmap_clear_bit (table, (name)->ssa_name.version);
    }
}
static void
restore_vars_to_original_value (varray_type locals,
    unsigned limit,
    varray_type table)
{
  if (! locals)
    return;
  while (((locals)->elements_used) > limit)
    {
      tree prev_value, dest;
      prev_value = ((locals)->data.tree1[(locals)->elements_used - 1]);
      do { ((locals)->elements_used--); } while (0);
      dest = ((locals)->data.tree1[(locals)->elements_used - 1]);
      do { ((locals)->elements_used--); } while (0);
      set_value_for (dest, prev_value, table);
    }
}
static void
restore_currdefs_to_original_value (varray_type locals, unsigned limit)
{
  if (!locals)
    return;
  while (((locals)->elements_used) > limit)
    {
      tree tmp = ((locals)->data.tree1[(locals)->elements_used - 1]);
      tree saved_def, var;
      do { ((locals)->elements_used--); } while (0);
      if (((enum tree_code) (tmp)->common.code) == SSA_NAME)
 {
   saved_def = tmp;
   var = (saved_def)->ssa_name.var;
 }
      else
 {
   saved_def = ((void *)0);
   var = tmp;
 }
      var_ann (var)->current_def = saved_def;
    }
}
static void
dom_opt_finalize_block (struct dom_walk_data *walk_data, basic_block bb)
{
  struct dom_walk_block_data *bd
    = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  tree last;
  if (bb->succ
      && ! bb->succ->succ_next
      && (bb->succ->flags & 2) == 0
      && (get_immediate_dominator (CDI_DOMINATORS, bb->succ->dest) != bb
   || phi_nodes (bb->succ->dest)))
    {
      thread_across_edge (walk_data, bb->succ);
    }
  else if ((last = last_stmt (bb))
    && ((enum tree_code) (last)->common.code) == COND_EXPR
    && (tree_code_type[(int) (((enum tree_code) (((((last))->exp.operands[0])))->common.code))] == '<'
        || ((enum tree_code) (((((last))->exp.operands[0])))->common.code) == SSA_NAME)
    && bb->succ
    && (bb->succ->flags & 2) == 0
    && bb->succ->succ_next
    && (bb->succ->succ_next->flags & 2) == 0
    && ! bb->succ->succ_next->succ_next)
    {
      edge true_edge, false_edge;
      tree cond, inverted = ((void *)0);
      enum tree_code cond_code;
      extract_true_false_edges_from_block (bb, &true_edge, &false_edge);
      cond = ((((last))->exp.operands[0]));
      cond_code = ((enum tree_code) (cond)->common.code);
      if (tree_code_type[(int) (cond_code)] == '<')
 inverted = invert_truthvalue (cond);
      if (get_immediate_dominator (CDI_DOMINATORS, true_edge->dest) != bb
   || phi_nodes (true_edge->dest))
 {
   unsigned avail_expr_limit;
   unsigned const_and_copies_limit;
   unsigned currdefs_limit;
   avail_expr_limit
     = bd->avail_exprs ? ((bd->avail_exprs)->elements_used) : 0;
   const_and_copies_limit
     = bd->const_and_copies ? ((bd->const_and_copies)->elements_used)
       : 0;
   currdefs_limit
     = bd->block_defs ? ((bd->block_defs)->elements_used) : 0;
   if (tree_code_type[(int) (cond_code)] == '<')
     {
       record_cond (cond, global_trees[TI_BOOLEAN_TRUE], &bd->avail_exprs);
       record_dominating_conditions (cond, &bd->avail_exprs);
       record_cond (inverted, global_trees[TI_BOOLEAN_FALSE], &bd->avail_exprs);
     }
   else if (cond_code == SSA_NAME)
     record_const_or_copy (cond, global_trees[TI_BOOLEAN_TRUE],
      &bd->const_and_copies);
   thread_across_edge (walk_data, true_edge);
   remove_local_expressions_from_table (bd->avail_exprs,
            avail_expr_limit,
            avail_exprs);
   restore_vars_to_original_value (bd->const_and_copies,
       const_and_copies_limit,
       const_and_copies);
   restore_currdefs_to_original_value (bd->block_defs, currdefs_limit);
 }
      if (get_immediate_dominator (CDI_DOMINATORS, false_edge->dest) != bb
   || phi_nodes (false_edge->dest))
 {
   if (tree_code_type[(int) (cond_code)] == '<')
     {
       record_cond (cond, global_trees[TI_BOOLEAN_FALSE], &bd->avail_exprs);
       record_cond (inverted, global_trees[TI_BOOLEAN_TRUE], &bd->avail_exprs);
       record_dominating_conditions (inverted, &bd->avail_exprs);
     }
   else if (cond_code == SSA_NAME)
     record_const_or_copy (cond, global_trees[TI_BOOLEAN_FALSE],
      &bd->const_and_copies);
   thread_across_edge (walk_data, false_edge);
 }
    }
  remove_local_expressions_from_table (bd->avail_exprs, 0, avail_exprs);
  restore_nonzero_vars_to_original_value (bd->nonzero_vars, 0, nonzero_vars);
  restore_vars_to_original_value (bd->const_and_copies, 0, const_and_copies);
  restore_currdefs_to_original_value (bd->block_defs, 0);
  while (bd->vrp_variables && ((bd->vrp_variables)->elements_used) > 0)
    {
      tree var = ((bd->vrp_variables)->data.tree1[(bd->vrp_variables)->elements_used - 1]);
      varray_type var_vrp_records = ((vrp_data)->data.generic[(var)->ssa_name.version])
                              ;
      while (((var_vrp_records)->elements_used) > 0)
 {
   struct vrp_element *element
     = (struct vrp_element *)((var_vrp_records)->data.generic[(var_vrp_records)->elements_used - 1]);
   if (element->bb != bb)
     break;
   do { ((var_vrp_records)->elements_used--); } while (0);
 }
      do { ((bd->vrp_variables)->elements_used--); } while (0);
    }
  while (bd->stmts_to_rescan && ((bd->stmts_to_rescan)->elements_used) > 0)
    {
      tree stmt = ((bd->stmts_to_rescan)->data.tree1[(bd->stmts_to_rescan)->elements_used - 1]);
      do { ((bd->stmts_to_rescan)->elements_used--); } while (0);
      mark_new_vars_to_rename (stmt, vars_to_rename);
    }
}
static void
record_equivalences_from_phis (struct dom_walk_data *walk_data, basic_block bb)
{
  struct dom_walk_block_data *bd
    = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  tree phi;
  for (phi = phi_nodes (bb); phi; phi = (((phi))->common.chain))
    {
      tree lhs = get_def_from_ptr (get_phi_result_ptr (phi));
      tree rhs = ((void *)0);
      int i;
      for (i = 0; i < (phi)->phi.num_args; i++)
 {
   tree t = get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((i))));
   if (((enum tree_code) (t)->common.code) == SSA_NAME || is_gimple_min_invariant (t))
     {
       if (operand_equal_p (lhs, t, 0))
  continue;
       if (rhs == ((void *)0))
  rhs = t;
       else if (! operand_equal_p (rhs, t, 0))
  break;
     }
   else
     break;
 }
      if (!rhs)
 rhs = lhs;
      if (i == (phi)->phi.num_args
   && may_propagate_copy (lhs, rhs))
 set_value_for (lhs, rhs, const_and_copies);
      for (i = 0; i < (phi)->phi.num_args; i++)
 {
   if (!((phi)->phi.a[i]).nonzero)
     break;
 }
      if (i == (phi)->phi.num_args)
 bitmap_set_bit (nonzero_vars, (get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.version);
      register_new_def (lhs, &bd->block_defs);
    }
}
static void
record_equivalences_from_incoming_edge (struct dom_walk_data *walk_data,
     basic_block bb)
{
  int edge_flags;
  basic_block parent;
  struct eq_expr_value eq_expr_value;
  tree parent_block_last_stmt = ((void *)0);
  struct dom_walk_block_data *bd
    = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  parent = get_immediate_dominator (CDI_DOMINATORS, bb);
  if (parent)
    {
      parent_block_last_stmt = last_stmt (parent);
      if (parent_block_last_stmt && !is_ctrl_stmt (parent_block_last_stmt))
 parent_block_last_stmt = ((void *)0);
    }
  eq_expr_value.src = ((void *)0);
  eq_expr_value.dst = ((void *)0);
  if (bb->pred
      && ! bb->pred->pred_next
      && parent_block_last_stmt
      && bb_for_stmt (parent_block_last_stmt) == bb->pred->src)
    {
      edge_flags = bb->pred->flags;
    }
  else
    {
      edge_flags = 0;
      parent_block_last_stmt = ((void *)0);
    }
  if (parent_block_last_stmt
      && bb->pred->pred_next == ((void *)0)
      && ((enum tree_code) (parent_block_last_stmt)->common.code) == COND_EXPR
      && (edge_flags & (1024 | 2048)))
    eq_expr_value = get_eq_expr_value (parent_block_last_stmt,
           (edge_flags & 1024) != 0,
           &bd->avail_exprs,
           bb,
           &bd->vrp_variables);
  else if (parent_block_last_stmt
    && bb->pred->pred_next == ((void *)0)
    && bb->pred->src == parent
    && ((enum tree_code) (parent_block_last_stmt)->common.code) == SWITCH_EXPR)
    {
      tree switch_cond = (((parent_block_last_stmt))->exp.operands[0]);
      if (((enum tree_code) (switch_cond)->common.code) == SSA_NAME)
 {
   tree switch_vec = (((parent_block_last_stmt))->exp.operands[2]);
   size_t i, n = ((switch_vec)->vec.length);
   int case_count = 0;
   tree match_case = (tree) ((void *)0);
   for (i = 0; i < n; ++i)
     {
       tree elt = ((switch_vec)->vec.a[i]);
       if (label_to_block ((((elt))->exp.operands[2])) == bb)
  {
    if (++case_count > 1 || (((elt))->exp.operands[1]))
      break;
    match_case = elt;
  }
     }
   if (case_count == 1
       && match_case
       && (((match_case))->exp.operands[0])
       && !(((match_case))->exp.operands[1]))
     {
       eq_expr_value.dst = switch_cond;
       eq_expr_value.src = (((match_case))->exp.operands[0]);
     }
 }
    }
  if (eq_expr_value.src && eq_expr_value.dst)
    record_equality (eq_expr_value.dst, eq_expr_value.src,
       &bd->const_and_copies);
}
void
dump_dominator_optimization_stats (FILE *file)
{
  long n_exprs;
  fprintf (file, "Total number of statements:                   %6ld\n\n",
    opt_stats.num_stmts);
  fprintf (file, "Exprs considered for dominator optimizations: %6ld\n",
           opt_stats.num_exprs_considered);
  n_exprs = opt_stats.num_exprs_considered;
  if (n_exprs == 0)
    n_exprs = 1;
  fprintf (file, "    Redundant expressions eliminated:         %6ld (%.0f%%)\n",
    opt_stats.num_re, ((float)(opt_stats.num_re) * 100.0 / (float)(n_exprs))
                  );
  fprintf (file, "\nHash table statistics:\n");
  fprintf (file, "    avail_exprs: ");
  htab_statistics2 (file, avail_exprs);
}
void
debug_dominator_optimization_stats (void)
{
  dump_dominator_optimization_stats (stderr);
}
static void
htab_statistics2 (FILE *file, htab_t htab)
{
  fprintf (file, "size %ld, %ld elements, %f collision/search ratio\n",
    (long) htab_size (htab),
    (long) htab_elements (htab),
    htab_collisions (htab));
}
static void
record_var_is_nonzero (tree var, varray_type *block_nonzero_vars_p)
{
  int indx = (var)->ssa_name.version;
  if (bitmap_bit_p (nonzero_vars, indx))
    return;
  bitmap_set_bit (nonzero_vars, indx);
  if (! *block_nonzero_vars_p)
    *block_nonzero_vars_p = varray_init (2, VARRAY_DATA_TREE, "block_nonzero_vars");
  do { if ((*block_nonzero_vars_p)->elements_used >= (*block_nonzero_vars_p)->num_elements) (((*block_nonzero_vars_p)) = varray_grow ((*block_nonzero_vars_p), 2 * (*block_nonzero_vars_p)->num_elements)); (*block_nonzero_vars_p)->data.tree1[(*block_nonzero_vars_p)->elements_used++] = (var); } while (0);
}
static void
record_cond (tree cond, tree value1, varray_type *block_avail_exprs_p)
{
  struct expr_hash_elt *element = xmalloc (sizeof (struct expr_hash_elt));
  void **slot;
  initialize_hash_element (cond, value1, element);
  slot = htab_find_slot_with_hash (avail_exprs, (void *)element,
       element->hash, 1);
  if (*slot == ((void *)0))
    {
      *slot = (void *) element;
      if (! *block_avail_exprs_p)
 *block_avail_exprs_p = varray_init (20, VARRAY_DATA_TREE, "block_avail_exprs");
      do { if ((*block_avail_exprs_p)->elements_used >= (*block_avail_exprs_p)->num_elements) (((*block_avail_exprs_p)) = varray_grow ((*block_avail_exprs_p), 2 * (*block_avail_exprs_p)->num_elements)); (*block_avail_exprs_p)->data.tree1[(*block_avail_exprs_p)->elements_used++] = (cond); } while (0);
    }
  else
    free (element);
}
static void
record_dominating_conditions (tree cond, varray_type *block_avail_exprs_p)
{
  switch (((enum tree_code) (cond)->common.code))
    {
    case LT_EXPR:
      record_cond (build2_stat (LE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (ORDERED_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (NE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (LTGT_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      break;
    case GT_EXPR:
      record_cond (build2_stat (GE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (ORDERED_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (NE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (LTGT_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      break;
    case GE_EXPR:
    case LE_EXPR:
      record_cond (build2_stat (ORDERED_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      break;
    case EQ_EXPR:
      record_cond (build2_stat (ORDERED_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (LE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (GE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      break;
    case UNORDERED_EXPR:
      record_cond (build2_stat (NE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (UNLE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (UNGE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (UNEQ_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (UNLT_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (UNGT_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      break;
    case UNLT_EXPR:
      record_cond (build2_stat (UNLE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (NE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      break;
    case UNGT_EXPR:
      record_cond (build2_stat (UNGE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (NE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      break;
    case UNEQ_EXPR:
      record_cond (build2_stat (UNLE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (UNGE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      break;
    case LTGT_EXPR:
      record_cond (build2_stat (NE_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
      record_cond (build2_stat (ORDERED_EXPR,global_trees[TI_BOOLEAN_TYPE],((cond)->exp.operands[0]),((cond)->exp.operands[1]) )
                             ,
     global_trees[TI_BOOLEAN_TRUE],
     block_avail_exprs_p);
    default:
      break;
    }
}
static void
record_const_or_copy_1 (tree x, tree y, tree prev_x,
   varray_type *block_const_and_copies_p)
{
  set_value_for (x, y, const_and_copies);
  if (!*block_const_and_copies_p)
    *block_const_and_copies_p = varray_init (2, VARRAY_DATA_TREE, "block_const_and_copies");
  do { if ((*block_const_and_copies_p)->elements_used >= (*block_const_and_copies_p)->num_elements) (((*block_const_and_copies_p)) = varray_grow ((*block_const_and_copies_p), 2 * (*block_const_and_copies_p)->num_elements)); (*block_const_and_copies_p)->data.tree1[(*block_const_and_copies_p)->elements_used++] = (x); } while (0);
  do { if ((*block_const_and_copies_p)->elements_used >= (*block_const_and_copies_p)->num_elements) (((*block_const_and_copies_p)) = varray_grow ((*block_const_and_copies_p), 2 * (*block_const_and_copies_p)->num_elements)); (*block_const_and_copies_p)->data.tree1[(*block_const_and_copies_p)->elements_used++] = (prev_x); } while (0);
}
static void
record_const_or_copy (tree x, tree y, varray_type *block_const_and_copies_p)
{
  tree prev_x = get_value_for (x, const_and_copies);
  if (((enum tree_code) (y)->common.code) == SSA_NAME)
    {
      tree tmp = get_value_for (y, const_and_copies);
      if (tmp)
 y = tmp;
    }
  record_const_or_copy_1 (x, y, prev_x, block_const_and_copies_p);
}
static void
record_equality (tree x, tree y, varray_type *block_const_and_copies_p)
{
  tree prev_x = ((void *)0), prev_y = ((void *)0);
  if (((enum tree_code) (x)->common.code) == SSA_NAME)
    prev_x = get_value_for (x, const_and_copies);
  if (((enum tree_code) (y)->common.code) == SSA_NAME)
    prev_y = get_value_for (y, const_and_copies);
  if (((y)->common.invariant_flag))
    ;
  else if (((x)->common.invariant_flag))
    prev_x = x, x = y, y = prev_x, prev_x = prev_y;
  else if (prev_x && ((prev_x)->common.invariant_flag))
    x = y, y = prev_x, prev_x = prev_y;
  else if (prev_y)
    y = prev_y;
  if (((enum tree_code) (x)->common.code) != SSA_NAME)
    return;
  if ((((mode_class[((((x)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((x)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((x)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations)
      && (((enum tree_code) (y)->common.code) != REAL_CST
   || real_compare (EQ_EXPR, &(dconst0), &((*((y)->real_cst.real_cst_ptr))))))
    return;
  record_const_or_copy_1 (x, y, prev_x, block_const_and_copies_p);
}
static tree
simplify_rhs_and_lookup_avail_expr (struct dom_walk_data *walk_data,
        tree stmt,
        stmt_ann_t ann,
        int insert)
{
  tree rhs = ((stmt)->exp.operands[1]);
  enum tree_code rhs_code = ((enum tree_code) (rhs)->common.code);
  tree result = ((void *)0);
  struct dom_walk_block_data *bd
    = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  if ((rhs_code == BIT_NOT_EXPR || rhs_code == NEGATE_EXPR)
      && ((enum tree_code) (((rhs)->exp.operands[0]))->common.code) == SSA_NAME)
    {
      tree rhs_def_stmt = (((rhs)->exp.operands[0]))->common.chain;
      if (((enum tree_code) (rhs_def_stmt)->common.code) == MODIFY_EXPR
   && ((enum tree_code) (((rhs_def_stmt)->exp.operands[1]))->common.code) == rhs_code)
 {
   tree rhs_def_operand;
   rhs_def_operand = ((((rhs_def_stmt)->exp.operands[1]))->exp.operands[0]);
   if (((enum tree_code) (rhs_def_operand)->common.code) == SSA_NAME
       && ! (rhs_def_operand)->common.asm_written_flag)
     result = update_rhs_and_lookup_avail_expr (stmt,
             rhs_def_operand,
             &bd->avail_exprs,
             ann,
             insert);
 }
    }
  if ((associative_tree_code (rhs_code) || rhs_code == MINUS_EXPR)
      && ((enum tree_code) (((rhs)->exp.operands[0]))->common.code) == SSA_NAME
      && is_gimple_min_invariant (((rhs)->exp.operands[1])))
    {
      tree rhs_def_stmt = (((rhs)->exp.operands[0]))->common.chain;
      if (((enum tree_code) (rhs_def_stmt)->common.code) == MODIFY_EXPR)
 {
   tree rhs_def_rhs = ((rhs_def_stmt)->exp.operands[1]);
   enum tree_code rhs_def_code = ((enum tree_code) (rhs_def_rhs)->common.code);
   if (rhs_code == rhs_def_code
       || (rhs_code == PLUS_EXPR && rhs_def_code == MINUS_EXPR)
       || (rhs_code == MINUS_EXPR && rhs_def_code == PLUS_EXPR))
     {
       tree def_stmt_op0 = ((rhs_def_rhs)->exp.operands[0]);
       tree def_stmt_op1 = ((rhs_def_rhs)->exp.operands[1]);
       if (((enum tree_code) (def_stmt_op0)->common.code) == SSA_NAME
    && ! (def_stmt_op0)->common.asm_written_flag
    && is_gimple_min_invariant (def_stmt_op1))
  {
    tree outer_const = ((rhs)->exp.operands[1]);
    tree type = ((((stmt)->exp.operands[0]))->common.type);
    tree t;
    if (((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE))
        && !flag_unsafe_math_optimizations
        && (rhs_def_code == PLUS_EXPR
     || rhs_def_code == MINUS_EXPR))
      {
        unsigned char neg = 0;
        neg ^= (rhs_code == MINUS_EXPR);
        neg ^= (rhs_def_code == MINUS_EXPR);
        neg ^= real_isneg (((outer_const)->real_cst.real_cst_ptr));
        neg ^= real_isneg (((def_stmt_op1)->real_cst.real_cst_ptr));
        if (neg)
   goto dont_fold_assoc;
      }
    if (rhs_def_code != rhs_code)
      {
        if (rhs_def_code == MINUS_EXPR)
          t = build (MINUS_EXPR, type, outer_const, def_stmt_op1);
        else
          t = build (MINUS_EXPR, type, def_stmt_op1, outer_const);
        rhs_code = PLUS_EXPR;
      }
    else if (rhs_def_code == MINUS_EXPR)
      t = build (PLUS_EXPR, type, def_stmt_op1, outer_const);
    else
      t = build (rhs_def_code, type, def_stmt_op1, outer_const);
    t = local_fold (t);
    t = build (rhs_code, type, def_stmt_op0, t);
    t = local_fold (t);
    if (((enum tree_code) (t)->common.code) == SSA_NAME
        || (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == '1'
     && ((enum tree_code) (((t)->exp.operands[0]))->common.code) == SSA_NAME)
        || ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == '2'
      || tree_code_type[(int) (((enum tree_code) (t)->common.code))] == '<')
     && ((enum tree_code) (((t)->exp.operands[0]))->common.code) == SSA_NAME
     && is_gimple_val (((t)->exp.operands[1]))))
      result = update_rhs_and_lookup_avail_expr
        (stmt, t, &bd->avail_exprs, ann, insert);
  }
     }
 }
 dont_fold_assoc:;
    }
  if ((rhs_code == TRUNC_DIV_EXPR || rhs_code == TRUNC_MOD_EXPR)
      && (((enum tree_code) (((((rhs)->exp.operands[0]))->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((((rhs)->exp.operands[0]))->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((((rhs)->exp.operands[0]))->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((((rhs)->exp.operands[0]))->common.type))->common.code) == CHAR_TYPE)
      && integer_pow2p (((rhs)->exp.operands[1])))
    {
      tree val;
      tree op = ((rhs)->exp.operands[0]);
      if (((((op)->common.type))->common.unsigned_flag))
 {
   val = global_trees[TI_INTEGER_ONE];
 }
      else
 {
   tree dummy_cond = walk_data->global_data;
   if (! dummy_cond)
     {
       dummy_cond = build (GT_EXPR, global_trees[TI_BOOLEAN_TYPE],
      op, global_trees[TI_INTEGER_ZERO]);
       dummy_cond = build (COND_EXPR, global_trees[TI_VOID_TYPE],
      dummy_cond, ((void *)0), ((void *)0));
       walk_data->global_data = dummy_cond;
     }
          else
     {
       ((((dummy_cond)->exp.operands[0]))->common.code = (GT_EXPR));
       ((((dummy_cond)->exp.operands[0]))->exp.operands[0]) = op;
       ((((dummy_cond)->exp.operands[0]))->exp.operands[1])
  = global_trees[TI_INTEGER_ZERO];
     }
   val = simplify_cond_and_lookup_avail_expr (dummy_cond,
           &bd->avail_exprs,
           ((void *)0), 0);
 }
      if (val && integer_onep (val))
 {
   tree t;
   tree op0 = ((rhs)->exp.operands[0]);
   tree op1 = ((rhs)->exp.operands[1]);
   if (rhs_code == TRUNC_DIV_EXPR)
     t = build (RSHIFT_EXPR, ((op0)->common.type), op0,
         build_int_2_wide ((unsigned long) (tree_log2 (op1)), (long) (0)));
   else
     t = build (BIT_AND_EXPR, ((op0)->common.type), op0,
         local_fold (build (MINUS_EXPR, ((op1)->common.type),
       op1, global_trees[TI_INTEGER_ONE])));
   result = update_rhs_and_lookup_avail_expr (stmt, t,
           &bd->avail_exprs,
           ann, insert);
 }
    }
  if (rhs_code == ABS_EXPR
      && (((enum tree_code) (((((rhs)->exp.operands[0]))->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((((rhs)->exp.operands[0]))->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((((rhs)->exp.operands[0]))->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((((rhs)->exp.operands[0]))->common.type))->common.code) == CHAR_TYPE))
    {
      tree val;
      tree op = ((rhs)->exp.operands[0]);
      tree type = ((op)->common.type);
      if (((type)->common.unsigned_flag))
 {
   val = global_trees[TI_INTEGER_ZERO];
 }
      else
 {
   tree dummy_cond = walk_data->global_data;
   if (! dummy_cond)
     {
       dummy_cond = build (LE_EXPR, global_trees[TI_BOOLEAN_TYPE],
      op, global_trees[TI_INTEGER_ZERO]);
       dummy_cond = build (COND_EXPR, global_trees[TI_VOID_TYPE],
      dummy_cond, ((void *)0), ((void *)0));
       walk_data->global_data = dummy_cond;
     }
   else
     {
       ((((dummy_cond)->exp.operands[0]))->common.code = (LE_EXPR));
       ((((dummy_cond)->exp.operands[0]))->exp.operands[0]) = op;
       ((((dummy_cond)->exp.operands[0]))->exp.operands[1])
  = fold_convert (type, global_trees[TI_INTEGER_ZERO]);
     }
   val = simplify_cond_and_lookup_avail_expr (dummy_cond,
           &bd->avail_exprs,
           ((void *)0), 0);
   if (!val)
     {
       ((((dummy_cond)->exp.operands[0]))->common.code = (GE_EXPR));
       ((((dummy_cond)->exp.operands[0]))->exp.operands[0]) = op;
       ((((dummy_cond)->exp.operands[0]))->exp.operands[1])
  = fold_convert (type, global_trees[TI_INTEGER_ZERO]);
       val = simplify_cond_and_lookup_avail_expr (dummy_cond,
        &bd->avail_exprs,
        ((void *)0), 0);
       if (val)
  {
    if (integer_zerop (val))
      val = global_trees[TI_INTEGER_ONE];
    else if (integer_onep (val))
      val = global_trees[TI_INTEGER_ZERO];
  }
     }
 }
      if (val
   && (integer_onep (val) || integer_zerop (val)))
 {
   tree t;
   if (integer_onep (val))
     t = build1_stat (NEGATE_EXPR,((op)->common.type),op );
   else
     t = op;
   result = update_rhs_and_lookup_avail_expr (stmt, t,
           &bd->avail_exprs,
           ann, insert);
 }
    }
  if (((enum tree_code) (rhs)->common.code) == INDIRECT_REF || ((enum tree_code) (rhs)->common.code) == ARRAY_REF)
    {
      tree t = fold_read_from_constant_string (rhs);
      if (t)
        result = update_rhs_and_lookup_avail_expr (stmt, t,
         &bd->avail_exprs,
         ann, insert);
    }
  return result;
}
static tree
find_equivalent_equality_comparison (tree cond)
{
  tree op0 = ((cond)->exp.operands[0]);
  tree op1 = ((cond)->exp.operands[1]);
  tree def_stmt = (op0)->common.chain;
  if (def_stmt && ((enum tree_code) (def_stmt)->common.code) == MODIFY_EXPR)
    {
      tree def_rhs = ((def_stmt)->exp.operands[1]);
      if ((((enum tree_code) (def_rhs)->common.code) == NOP_EXPR
    || ((enum tree_code) (def_rhs)->common.code) == CONVERT_EXPR)
   && ((enum tree_code) (((def_rhs)->exp.operands[0]))->common.code) == SSA_NAME)
 {
   tree def_rhs_inner = ((def_rhs)->exp.operands[0]);
   tree def_rhs_inner_type = ((def_rhs_inner)->common.type);
   tree new;
   if (((def_rhs_inner_type)->type.precision)
       > ((((def_rhs)->common.type))->type.precision))
     return ((void *)0);
   new = build1_stat (((enum tree_code) (def_rhs)->common.code),def_rhs_inner_type,op1 );
   new = local_fold (new);
   if (is_gimple_val (new) && tree_int_cst_equal (new, op1))
     return build (((enum tree_code) (cond)->common.code), ((cond)->common.type),
     def_rhs_inner, new);
 }
    }
  return ((void *)0);
}
static tree
simplify_cond_and_lookup_avail_expr (tree stmt,
         varray_type *block_avail_exprs_p,
         stmt_ann_t ann,
         int insert)
{
  tree cond = ((((stmt))->exp.operands[0]));
  if (tree_code_type[(int) (((enum tree_code) (cond)->common.code))] == '<')
    {
      tree op0 = ((cond)->exp.operands[0]);
      tree op1 = ((cond)->exp.operands[1]);
      if (((enum tree_code) (op0)->common.code) == SSA_NAME && is_gimple_min_invariant (op1))
 {
   int limit;
   tree low, high, cond_low, cond_high;
   int lowequal, highequal, swapped, no_overlap, subset, cond_inverted;
   varray_type vrp_records;
   struct vrp_element *element;
   if (((enum tree_code) (cond)->common.code) == EQ_EXPR || ((enum tree_code) (cond)->common.code) == NE_EXPR)
     {
       tree new_cond = find_equivalent_equality_comparison (cond);
       if (new_cond)
  {
    ((((stmt))->exp.operands[0])) = new_cond;
    ann->modified = 1;
    new_cond = lookup_avail_expr (stmt, block_avail_exprs_p,
      insert);
    if (new_cond)
      return new_cond;
    op0 = ((cond)->exp.operands[0]);
    op1 = ((cond)->exp.operands[1]);
  }
     }
   vrp_records = ((vrp_data)->data.generic[(op0)->ssa_name.version]);
   if (vrp_records == ((void *)0))
     return ((void *)0);
   limit = ((vrp_records)->elements_used);
   if (limit == 0
       || ! extract_range_from_cond (cond, &cond_high,
         &cond_low, &cond_inverted))
     return ((void *)0);
    element
      = (struct vrp_element *)((vrp_records)->data.generic[limit - 1]);
   if (element->high && element->low)
     {
       low = element->low;
       high = element->high;
     }
   else
     {
       tree tmp_high, tmp_low;
       int dummy;
       extract_range_from_cond (element->cond, &tmp_high,
           &tmp_low, &dummy);
       if (limit == 1)
  {
    low = tmp_low;
    high = tmp_high;
  }
       else
  {
    struct vrp_element *prev
      = (struct vrp_element *)((vrp_records)->data.generic[limit - 2])
                  ;
    low = prev->low;
    high = prev->high;
    low = (tree_int_cst_compare (low, tmp_low) == 1
    ? low : tmp_low);
    high = (tree_int_cst_compare (high, tmp_high) == -1
     ? high : tmp_high);
  }
       element->low = low;
       element->high = high;
     }
   lowequal = tree_int_cst_equal (low, cond_low);
   highequal = tree_int_cst_equal (high, cond_high);
   if (lowequal && highequal)
     return (cond_inverted ? global_trees[TI_BOOLEAN_FALSE] : global_trees[TI_BOOLEAN_TRUE]);
   swapped = 0;
   if (tree_int_cst_compare (low, cond_low) == 1
       || (lowequal
    && tree_int_cst_compare (cond_high, high) == 1))
     {
       tree temp;
       swapped = 1;
       temp = low;
       low = cond_low;
       cond_low = temp;
       temp = high;
       high = cond_high;
       cond_high = temp;
     }
   no_overlap = tree_int_cst_lt (high, cond_low);
   subset = tree_int_cst_compare (cond_high, high) != 1;
   if (no_overlap)
     return (cond_inverted ? global_trees[TI_BOOLEAN_TRUE] : global_trees[TI_BOOLEAN_FALSE]);
   if (subset && swapped)
     return (cond_inverted ? global_trees[TI_BOOLEAN_FALSE] : global_trees[TI_BOOLEAN_TRUE]);
   low = tree_int_cst_compare (low, cond_low) == 1 ? low : cond_low;
   high = tree_int_cst_compare (high, cond_high) == -1 ? high : cond_high;
   if (((enum tree_code) (cond)->common.code) != EQ_EXPR
       && ((enum tree_code) (cond)->common.code) != NE_EXPR
       && tree_int_cst_equal (low, high))
     {
       ((cond)->common.code = (EQ_EXPR));
       ((cond)->exp.operands[1]) = high;
     }
 }
    }
  return 0;
}
static tree
simplify_switch_and_lookup_avail_expr (tree stmt,
           varray_type *block_avail_exprs_p,
           stmt_ann_t ann,
           int insert)
{
  tree cond = (((stmt))->exp.operands[0]);
  tree def, to, ti;
  if (((enum tree_code) (cond)->common.code) == SSA_NAME)
    {
      def = (cond)->common.chain;
      if (((enum tree_code) (def)->common.code) == MODIFY_EXPR)
 {
   def = ((def)->exp.operands[1]);
   if (((enum tree_code) (def)->common.code) == NOP_EXPR)
     {
       def = ((def)->exp.operands[0]);
       to = ((cond)->common.type);
       ti = ((def)->common.type);
       if (((to)->common.unsigned_flag) == ((ti)->common.unsigned_flag)
    && ((to)->type.precision) >= ((ti)->type.precision)
           && is_gimple_val (def))
  {
    (((stmt))->exp.operands[0]) = def;
    ann->modified = 1;
    return lookup_avail_expr (stmt, block_avail_exprs_p, insert);
  }
     }
 }
    }
  return 0;
}
static void
cprop_into_successor_phis (basic_block bb,
      varray_type const_and_copies,
      bitmap nonzero_vars)
{
  edge e;
  for (e = bb->succ; e; e = e->succ_next)
    {
      tree phi;
      int phi_num_args;
      int hint;
      if (e->flags & 2)
 continue;
      phi = phi_nodes (e->dest);
      if (! phi)
 continue;
      phi_num_args = (phi)->phi.num_args;
      hint = phi_num_args;
      for ( ; phi; phi = (((phi))->common.chain))
 {
   int i;
   tree new;
   use_operand_p orig_p;
   tree orig;
   if (hint != phi_num_args && ((phi)->phi.a[hint]).e == e)
     ;
   else
     {
       for (i = 0; i < phi_num_args; i++)
  if (((phi)->phi.a[i]).e == e)
    break;
       hint = i;
     }
   orig_p = get_phi_arg_def_ptr ((phi), (hint));
   orig = get_use_from_ptr (orig_p);
   if (((enum tree_code) (orig)->common.code) != SSA_NAME)
     continue;
   if (bitmap_bit_p (nonzero_vars, (orig)->ssa_name.version))
     ((phi)->phi.a[hint]).nonzero = 1;
   new = ((const_and_copies)->data.tree1[(orig)->ssa_name.version]);
   if (new
       && (((enum tree_code) (new)->common.code) == SSA_NAME
    || is_gimple_min_invariant (new))
       && may_propagate_copy (orig, new))
     {
       propagate_value (orig_p, new);
     }
 }
    }
}
static void
cprop_into_phis (struct dom_walk_data *walk_data ,
   basic_block bb)
{
  cprop_into_successor_phis (bb, const_and_copies, nonzero_vars);
}
static unsigned char
eliminate_redundant_computations (struct dom_walk_data *walk_data,
      tree stmt, stmt_ann_t ann)
{
  v_may_def_optype v_may_defs = get_v_may_def_ops (ann);
  tree *expr_p, def = (tree) ((void *)0);
  unsigned char insert = 1;
  tree cached_lhs;
  unsigned char retval = 0;
  struct dom_walk_block_data *bd
    = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR)
    def = ((stmt)->exp.operands[0]);
  if (ann->makes_aliased_stores
      || ! def
      || ((enum tree_code) (def)->common.code) != SSA_NAME
      || (def)->common.asm_written_flag
      || ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0) != 0)
    insert = 0;
  cached_lhs = lookup_avail_expr (stmt, &bd->avail_exprs, insert);
  if (! cached_lhs && ((enum tree_code) (stmt)->common.code) == MODIFY_EXPR)
    cached_lhs = simplify_rhs_and_lookup_avail_expr (walk_data,
           stmt,
           ann,
           insert);
  else if (! cached_lhs && ((enum tree_code) (stmt)->common.code) == COND_EXPR)
    cached_lhs = simplify_cond_and_lookup_avail_expr (stmt,
            &bd->avail_exprs,
            ann,
            insert);
  else if (!cached_lhs && ((enum tree_code) (stmt)->common.code) == SWITCH_EXPR)
    cached_lhs = simplify_switch_and_lookup_avail_expr (stmt,
              &bd->avail_exprs,
              ann,
              insert);
  opt_stats.num_exprs_considered++;
  if (((enum tree_code) (stmt)->common.code) == COND_EXPR)
    expr_p = &((((stmt))->exp.operands[0]));
  else if (((enum tree_code) (stmt)->common.code) == SWITCH_EXPR)
    expr_p = &(((stmt))->exp.operands[0]);
  else if (((enum tree_code) (stmt)->common.code) == RETURN_EXPR && ((stmt)->exp.operands[0]))
    expr_p = &((((stmt)->exp.operands[0]))->exp.operands[1]);
  else
    expr_p = &((stmt)->exp.operands[1]);
  if (cached_lhs
      && (((enum tree_code) (cached_lhs)->common.code) != SSA_NAME
   || may_propagate_copy (*expr_p, cached_lhs)))
    {
      if (dump_file && (dump_flags & (1 << 3)))
 {
   fprintf (dump_file, "  Replaced redundant expr '");
   print_generic_expr (dump_file, *expr_p, dump_flags);
   fprintf (dump_file, "' with '");
   print_generic_expr (dump_file, cached_lhs, dump_flags);
    fprintf (dump_file, "'\n");
 }
      opt_stats.num_re++;
      if (((enum tree_code) (cached_lhs)->common.code) == ADDR_EXPR
   || ((((enum tree_code) (((*expr_p)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((*expr_p)->common.type))->common.code) == REFERENCE_TYPE)
       && is_gimple_min_invariant (cached_lhs)))
 retval = 1;
      propagate_tree_value (expr_p, cached_lhs);
      ann->modified = 1;
    }
  return retval;
}
static void
record_equivalences_from_stmt (tree stmt,
          varray_type *block_avail_exprs_p,
          varray_type *block_nonzero_vars_p,
          int may_optimize_p,
          stmt_ann_t ann)
{
  tree lhs = ((stmt)->exp.operands[0]);
  enum tree_code lhs_code = ((enum tree_code) (lhs)->common.code);
  int i;
  if (lhs_code == SSA_NAME)
    {
      tree rhs = ((stmt)->exp.operands[1]);
      while (tree_ssa_useless_type_conversion (rhs)) rhs = ((rhs)->exp.operands[0]);
      if (may_optimize_p
   && (((enum tree_code) (rhs)->common.code) == SSA_NAME
       || is_gimple_min_invariant (rhs)))
 set_value_for (lhs, rhs, const_and_copies);
      while (((enum tree_code) (rhs)->common.code) == NOP_EXPR
      || ((enum tree_code) (rhs)->common.code) == CONVERT_EXPR)
        rhs = ((rhs)->exp.operands[0]);
      if (alloca_call_p (rhs)
          || (((enum tree_code) (rhs)->common.code) == ADDR_EXPR
       && (tree_code_type[(int) (((enum tree_code) (((rhs)->exp.operands[0]))->common.code))] == 'd')
       && ! ((((rhs)->exp.operands[0]))->decl.weak_flag)))
 record_var_is_nonzero (lhs, block_nonzero_vars_p);
      if (((enum tree_code) (rhs)->common.code) == BIT_IOR_EXPR
   && integer_nonzerop (((rhs)->exp.operands[1])))
 record_var_is_nonzero (lhs, block_nonzero_vars_p);
    }
  if (flag_delete_null_pointer_checks)
    for (i = 0; i < 2; i++)
      {
 tree t = ((stmt)->exp.operands[i]);
 while (((enum tree_code) (t)->common.code) == COMPONENT_REF)
   t = ((t)->exp.operands[0]);
 if (((enum tree_code) (t)->common.code) == INDIRECT_REF)
          {
     tree op = ((t)->exp.operands[0]);
     while (((enum tree_code) (op)->common.code) == SSA_NAME)
       {
  tree def = (op)->common.chain;
  record_var_is_nonzero (op, block_nonzero_vars_p);
  if (def
      && ((enum tree_code) (def)->common.code) == MODIFY_EXPR
      && ((enum tree_code) (((def)->exp.operands[1]))->common.code) == NOP_EXPR)
    op = ((((def)->exp.operands[1]))->exp.operands[0]);
  else
    break;
       }
   }
      }
  if (!ann->has_volatile_ops
      && (((enum tree_code) (((stmt)->exp.operands[1]))->common.code) == SSA_NAME
   || is_gimple_min_invariant (((stmt)->exp.operands[1])))
      && !is_gimple_reg (lhs))
    {
      tree rhs = ((stmt)->exp.operands[1]);
      tree new;
      size_t j;
      if (lhs_code == COMPONENT_REF
   && ((((lhs)->exp.operands[1]))->decl.bit_field_flag))
 {
   if (((rhs)->common.constant_flag))
     rhs = widen_bitfield (rhs, ((lhs)->exp.operands[1]), lhs);
   else
     rhs = ((void *)0);
   if (rhs && ! is_gimple_min_invariant (rhs))
     rhs = ((void *)0);
 }
      if (rhs)
 {
   v_may_def_optype v_may_defs = get_v_may_def_ops (ann);
   v_must_def_optype v_must_defs = get_v_must_def_ops (ann);
   new = build (MODIFY_EXPR, ((stmt)->common.type), rhs, lhs);
   get_stmt_ann (new);
   get_stmt_operands (new);
   remove_vuses (new);
   remove_v_may_defs (new);
   remove_v_must_defs (new);
   start_ssa_stmt_operands (new);
   for (j = 0; j < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); j++)
     {
       tree op = (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((j)))));
       add_vuse (op, new);
     }
   for (j = 0; j < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); j++)
     {
       tree op = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((j)))));
       add_vuse (op, new);
     }
   finalize_ssa_stmt_operands (new);
   lookup_avail_expr (new, block_avail_exprs_p, 1);
 }
    }
}
static unsigned char
cprop_operand (stmt_ann_t ann, use_operand_p op_p, varray_type const_and_copies)
{
  unsigned char may_have_exposed_new_symbols = 0;
  tree val;
  tree op = get_use_from_ptr (op_p);
  val = ((const_and_copies)->data.tree1[(op)->ssa_name.version]);
  if (val)
    {
      tree op_type, val_type;
      if (!is_gimple_reg (op)
   && (get_virtual_var (val) != get_virtual_var (op)
       || ((enum tree_code) (val)->common.code) != SSA_NAME))
 return 0;
      op_type = ((op)->common.type);
      val_type = ((val)->common.type);
      while ((((enum tree_code) (op_type)->common.code) == POINTER_TYPE || ((enum tree_code) (op_type)->common.code) == REFERENCE_TYPE) && (((enum tree_code) (val_type)->common.code) == POINTER_TYPE || ((enum tree_code) (val_type)->common.code) == REFERENCE_TYPE))
 {
   op_type = ((op_type)->common.type);
   val_type = ((val_type)->common.type);
 }
     if (!lang_hooks.types_compatible_p (op_type, val_type)
           && ((enum tree_code) (val)->common.code) != SSA_NAME)
 {
   val = fold_convert (((op)->common.type), val);
   if (!is_gimple_min_invariant (val)
       && ((enum tree_code) (val)->common.code) != SSA_NAME)
     return 0;
 }
      if (((enum tree_code) (val)->common.code) == SSA_NAME
   && !may_propagate_copy (op, val))
 return 0;
      if (dump_file && (dump_flags & (1 << 3)))
 {
   fprintf (dump_file, "  Replaced '");
   print_generic_expr (dump_file, op, dump_flags);
   fprintf (dump_file, "' with %s '",
     (((enum tree_code) (val)->common.code) != SSA_NAME ? "constant" : "variable"));
   print_generic_expr (dump_file, val, dump_flags);
   fprintf (dump_file, "'\n");
 }
      if (((enum tree_code) (val)->common.code) == ADDR_EXPR
   || ((((enum tree_code) (((op)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((op)->common.type))->common.code) == REFERENCE_TYPE)
       && is_gimple_min_invariant (val)))
 may_have_exposed_new_symbols = 1;
      propagate_value (op_p, val);
      ann->modified = 1;
    }
  return may_have_exposed_new_symbols;
}
static unsigned char
cprop_into_stmt (tree stmt, varray_type const_and_copies)
{
  unsigned char may_have_exposed_new_symbols = 0;
  stmt_ann_t ann = stmt_ann (stmt);
  size_t i, num_uses, num_vuses, num_v_may_defs;
  vuse_optype vuses;
  v_may_def_optype v_may_defs;
  use_optype uses;
  uses = get_use_ops (ann);
  num_uses = ((uses) ? (uses)->num_uses : 0);
  for (i = 0; i < num_uses; i++)
    {
      use_operand_p op_p = get_use_op_ptr ((uses), (i));
      if (((enum tree_code) (get_use_from_ptr (op_p))->common.code) == SSA_NAME)
 may_have_exposed_new_symbols
   |= cprop_operand (ann, op_p, const_and_copies);
    }
  vuses = get_vuse_ops (ann);
  num_vuses = ((vuses) ? (vuses)->num_vuses : 0);
  for (i = 0; i < num_vuses; i++)
    {
      use_operand_p op_p = get_vuse_op_ptr ((vuses), (i));
      if (((enum tree_code) (get_use_from_ptr (op_p))->common.code) == SSA_NAME)
 may_have_exposed_new_symbols
   |= cprop_operand (ann, op_p, const_and_copies);
    }
  v_may_defs = get_v_may_def_ops (ann);
  num_v_may_defs = ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0);
  for (i = 0; i < num_v_may_defs; i++)
    {
      use_operand_p op_p = get_v_may_def_op_ptr ((v_may_defs), (i));
      if (((enum tree_code) (get_use_from_ptr (op_p))->common.code) == SSA_NAME)
 may_have_exposed_new_symbols
   |= cprop_operand (ann, op_p, const_and_copies);
    }
  return may_have_exposed_new_symbols;
}
static void
optimize_stmt (struct dom_walk_data *walk_data, basic_block bb,
        block_stmt_iterator si)
{
  stmt_ann_t ann;
  tree stmt;
  unsigned char may_optimize_p;
  unsigned char may_have_exposed_new_symbols = 0;
  struct dom_walk_block_data *bd
    = ((walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used - 1]);
  stmt = bsi_stmt (si);
  get_stmt_operands (stmt);
  ann = stmt_ann (stmt);
  opt_stats.num_stmts++;
  may_have_exposed_new_symbols = 0;
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "Optimizing statement ");
      print_generic_stmt (dump_file, stmt, (1 << 1));
    }
  may_have_exposed_new_symbols = cprop_into_stmt (stmt, const_and_copies);
  if (ann->modified)
    {
      if (fold_stmt (bsi_stmt_ptr (si)))
 {
   stmt = bsi_stmt (si);
   ann = stmt_ann (stmt);
   if (dump_file && (dump_flags & (1 << 3)))
     {
       fprintf (dump_file, "  Folded to: ");
       print_generic_stmt (dump_file, stmt, (1 << 1));
     }
 }
      may_have_exposed_new_symbols = 1;
    }
  may_optimize_p = (!ann->has_volatile_ops
      && ((((enum tree_code) (stmt)->common.code) == RETURN_EXPR
    && ((stmt)->exp.operands[0])
    && ((enum tree_code) (((stmt)->exp.operands[0]))->common.code) == MODIFY_EXPR
    && ! (((((((stmt)->exp.operands[0]))->exp.operands[1]))->common.side_effects_flag)
                                                    ))
   || (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR
       && ! ((((stmt)->exp.operands[1]))->common.side_effects_flag))
   || ((enum tree_code) (stmt)->common.code) == COND_EXPR
   || ((enum tree_code) (stmt)->common.code) == SWITCH_EXPR));
  if (may_optimize_p)
    may_have_exposed_new_symbols
      |= eliminate_redundant_computations (walk_data, stmt, ann);
  if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR)
    record_equivalences_from_stmt (stmt,
       &bd->avail_exprs,
       &bd->nonzero_vars,
       may_optimize_p,
       ann);
  register_definitions_for_stmt (ann, &bd->block_defs);
  if (ann->modified)
    {
      tree val = ((void *)0);
      if (((enum tree_code) (stmt)->common.code) == COND_EXPR)
 val = ((((stmt))->exp.operands[0]));
      else if (((enum tree_code) (stmt)->common.code) == SWITCH_EXPR)
 val = (((stmt))->exp.operands[0]);
      if (val && ((enum tree_code) (val)->common.code) == INTEGER_CST && find_taken_edge (bb, val))
 cfg_altered = 1;
      if (maybe_clean_eh_stmt (stmt))
 {
   bitmap_set_bit (need_eh_cleanup, bb->index);
   if (dump_file && (dump_flags & (1 << 3)))
     fprintf (dump_file, "  Flagged to clear EH edges.\n");
 }
    }
  if (may_have_exposed_new_symbols)
    {
      if (! bd->stmts_to_rescan)
 bd->stmts_to_rescan = varray_init (20, VARRAY_DATA_TREE, "stmts_to_rescan");
      do { if ((bd->stmts_to_rescan)->elements_used >= (bd->stmts_to_rescan)->num_elements) (((bd->stmts_to_rescan)) = varray_grow ((bd->stmts_to_rescan), 2 * (bd->stmts_to_rescan)->num_elements)); (bd->stmts_to_rescan)->data.tree1[(bd->stmts_to_rescan)->elements_used++] = (bsi_stmt (si)); } while (0);
    }
}
static tree
update_rhs_and_lookup_avail_expr (tree stmt, tree new_rhs,
      varray_type *block_avail_exprs_p,
      stmt_ann_t ann,
      unsigned char insert)
{
  tree cached_lhs = ((void *)0);
  if (insert)
    {
      struct expr_hash_elt element;
      initialize_hash_element (stmt, ((void *)0), &element);
      htab_remove_elt_with_hash (avail_exprs, &element, element.hash);
    }
  ((stmt)->exp.operands[1]) = new_rhs;
  cached_lhs = lookup_avail_expr (stmt, block_avail_exprs_p, insert);
  if (insert)
    do { ((*block_avail_exprs_p)->elements_used--); } while (0);
  ann->modified = 1;
  return cached_lhs;
}
static tree
lookup_avail_expr (tree stmt, varray_type *block_avail_exprs_p, unsigned char insert)
{
  void **slot;
  tree lhs;
  tree temp;
  struct expr_hash_elt *element = xcalloc (sizeof (struct expr_hash_elt), 1);
  lhs = ((enum tree_code) (stmt)->common.code) == MODIFY_EXPR ? ((stmt)->exp.operands[0]) : ((void *)0);
  initialize_hash_element (stmt, lhs, element);
  if (((enum tree_code) (element->rhs)->common.code) == SSA_NAME
      || is_gimple_min_invariant (element->rhs))
    {
      free (element);
      return (tree) ((void *)0);
    }
  if ((((enum tree_code) (element->rhs)->common.code) == EQ_EXPR
       || ((enum tree_code) (element->rhs)->common.code) == NE_EXPR)
      && ((enum tree_code) (((element->rhs)->exp.operands[0]))->common.code) == SSA_NAME
      && integer_zerop (((element->rhs)->exp.operands[1])))
    {
      int indx = (((element->rhs)->exp.operands[0]))->ssa_name.version;
      if (bitmap_bit_p (nonzero_vars, indx))
 {
   tree t = element->rhs;
   free (element);
   if (((enum tree_code) (t)->common.code) == EQ_EXPR)
     return global_trees[TI_BOOLEAN_FALSE];
   else
     return global_trees[TI_BOOLEAN_TRUE];
 }
    }
  slot = htab_find_slot_with_hash (avail_exprs, element, element->hash,
       (insert ? INSERT : NO_INSERT));
  if (slot == ((void *)0))
    {
      free (element);
      return (tree) ((void *)0);
    }
  if (*slot == ((void *)0))
    {
      *slot = (void *) element;
      if (! *block_avail_exprs_p)
        *block_avail_exprs_p = varray_init (20, VARRAY_DATA_TREE, "block_avail_exprs");
      do { if ((*block_avail_exprs_p)->elements_used >= (*block_avail_exprs_p)->num_elements) (((*block_avail_exprs_p)) = varray_grow ((*block_avail_exprs_p), 2 * (*block_avail_exprs_p)->num_elements)); (*block_avail_exprs_p)->data.tree1[(*block_avail_exprs_p)->elements_used++] = (stmt ? stmt : element->rhs); } while (0);
      return (tree) ((void *)0);
    }
  lhs = ((struct expr_hash_elt *)*slot)->lhs;
  if (((enum tree_code) (lhs)->common.code) == SSA_NAME)
    {
      temp = get_value_for (lhs, const_and_copies);
      if (temp)
 lhs = temp;
    }
  free (element);
  return lhs;
}
static unsigned char
extract_range_from_cond (tree cond, tree *hi_p, tree *lo_p, int *inverted_p)
{
  tree op1 = ((cond)->exp.operands[1]);
  tree high, low, type;
  int inverted;
  if (((enum tree_code) (((op1)->common.type))->common.code) != INTEGER_TYPE)
    return 0;
  type = ((op1)->common.type);
  switch (((enum tree_code) (cond)->common.code))
    {
    case EQ_EXPR:
      high = low = op1;
      inverted = 0;
      break;
    case NE_EXPR:
      high = low = op1;
      inverted = 1;
      break;
    case GE_EXPR:
      low = op1;
      high = ((type)->type.maxval);
      inverted = 0;
      break;
    case GT_EXPR:
      low = int_const_binop (PLUS_EXPR, op1, global_trees[TI_INTEGER_ONE], 1);
      high = ((type)->type.maxval);
      inverted = 0;
      break;
    case LE_EXPR:
      high = op1;
      low = ((type)->type.minval);
      inverted = 0;
      break;
    case LT_EXPR:
      high = int_const_binop (MINUS_EXPR, op1, global_trees[TI_INTEGER_ONE], 1);
      low = ((type)->type.minval);
      inverted = 0;
      break;
    default:
      return 0;
    }
  *hi_p = high;
  *lo_p = low;
  *inverted_p = inverted;
  return 1;
}
static void
record_range (tree cond, basic_block bb, varray_type *vrp_variables_p)
{
  if (tree_code_type[(int) (((enum tree_code) (cond)->common.code))] == '<'
      && ((enum tree_code) (cond)->common.code) != NE_EXPR
      && ((enum tree_code) (((((cond)->exp.operands[1]))->common.type))->common.code) == INTEGER_TYPE)
    {
      struct vrp_element *element = ggc_alloc_stat (sizeof (struct vrp_element) );
      int ssa_version = (((cond)->exp.operands[0]))->ssa_name.version;
      varray_type *vrp_records_p
 = (varray_type *)&((vrp_data)->data.generic[ssa_version]);
      element->low = ((void *)0);
      element->high = ((void *)0);
      element->cond = cond;
      element->bb = bb;
      if (*vrp_records_p == ((void *)0))
 {
   *vrp_records_p = varray_init (2, VARRAY_DATA_GENERIC, "vrp records");
   ((vrp_data)->data.generic[ssa_version]) = *vrp_records_p;
 }
      do { if ((*vrp_records_p)->elements_used >= (*vrp_records_p)->num_elements) (((*vrp_records_p)) = varray_grow ((*vrp_records_p), 2 * (*vrp_records_p)->num_elements)); (*vrp_records_p)->data.generic[(*vrp_records_p)->elements_used++] = (element); } while (0);
      if (! *vrp_variables_p)
 *vrp_variables_p = varray_init (2, VARRAY_DATA_TREE, "vrp_variables");
      do { if ((*vrp_variables_p)->elements_used >= (*vrp_variables_p)->num_elements) (((*vrp_variables_p)) = varray_grow ((*vrp_variables_p), 2 * (*vrp_variables_p)->num_elements)); (*vrp_variables_p)->data.tree1[(*vrp_variables_p)->elements_used++] = (((cond)->exp.operands[0])); } while (0);
    }
}
static struct eq_expr_value
get_eq_expr_value (tree if_stmt,
     int true_arm,
     varray_type *block_avail_exprs_p,
     basic_block bb,
     varray_type *vrp_variables_p)
{
  tree cond;
  struct eq_expr_value retval;
  cond = ((((if_stmt))->exp.operands[0]));
  retval.src = ((void *)0);
  retval.dst = ((void *)0);
  if (((enum tree_code) (cond)->common.code) == SSA_NAME)
    {
      retval.dst = cond;
      retval.src = (true_arm ? global_trees[TI_INTEGER_ONE] : global_trees[TI_INTEGER_ZERO]);
      return retval;
    }
  if (tree_code_type[(int) (((enum tree_code) (cond)->common.code))] == '<')
    {
      tree op0 = ((cond)->exp.operands[0]);
      tree op1 = ((cond)->exp.operands[1]);
      if ((((enum tree_code) (cond)->common.code) == EQ_EXPR || ((enum tree_code) (cond)->common.code) == NE_EXPR)
   && ((enum tree_code) (op0)->common.code) == SSA_NAME
   && ((enum tree_code) (((op0)->common.type))->common.code) == BOOLEAN_TYPE
   && is_gimple_min_invariant (op1))
 {
   if ((((enum tree_code) (cond)->common.code) == EQ_EXPR && true_arm)
       || (((enum tree_code) (cond)->common.code) == NE_EXPR && ! true_arm))
     {
       retval.src = op1;
     }
   else
     {
       if (integer_zerop (op1))
  retval.src = global_trees[TI_BOOLEAN_TRUE];
       else
  retval.src = global_trees[TI_BOOLEAN_FALSE];
     }
   retval.dst = op0;
   return retval;
 }
      if (((enum tree_code) (op0)->common.code) == SSA_NAME
   && (is_gimple_min_invariant (op1) || ((enum tree_code) (op1)->common.code) == SSA_NAME))
 {
   tree inverted = invert_truthvalue (cond);
   if (true_arm)
     {
       record_cond (cond, global_trees[TI_BOOLEAN_TRUE], block_avail_exprs_p);
       record_dominating_conditions (cond, block_avail_exprs_p);
       record_cond (inverted, global_trees[TI_BOOLEAN_FALSE], block_avail_exprs_p);
       if (((op1)->common.constant_flag))
  record_range (cond, bb, vrp_variables_p);
       if (((enum tree_code) (cond)->common.code) == EQ_EXPR)
  {
    retval.dst = op0;
    retval.src = op1;
    return retval;
  }
     }
   else
     {
       record_cond (inverted, global_trees[TI_BOOLEAN_TRUE], block_avail_exprs_p);
       record_dominating_conditions (inverted, block_avail_exprs_p);
       record_cond (cond, global_trees[TI_BOOLEAN_FALSE], block_avail_exprs_p);
       if (((op1)->common.constant_flag))
  record_range (inverted, bb, vrp_variables_p);
       if (((enum tree_code) (cond)->common.code) == NE_EXPR)
  {
    retval.dst = op0;
    retval.src = op1;
    return retval;
  }
     }
 }
    }
  return retval;
}
static hashval_t
avail_expr_hash (const void *p)
{
  stmt_ann_t ann = ((struct expr_hash_elt *)p)->ann;
  tree rhs = ((struct expr_hash_elt *)p)->rhs;
  hashval_t val = 0;
  size_t i;
  vuse_optype vuses;
  val = iterative_hash_expr (rhs, val);
  if (!ann)
    return val;
  vuses = get_vuse_ops (ann);
  for (i = 0; i < ((vuses) ? (vuses)->num_vuses : 0); i++)
    val = iterative_hash_expr ((get_use_from_ptr (get_vuse_op_ptr (((vuses)), ((i))))), val);
  return val;
}
static hashval_t
real_avail_expr_hash (const void *p)
{
  return ((const struct expr_hash_elt *)p)->hash;
}
static int
avail_expr_eq (const void *p1, const void *p2)
{
  stmt_ann_t ann1 = ((struct expr_hash_elt *)p1)->ann;
  tree rhs1 = ((struct expr_hash_elt *)p1)->rhs;
  stmt_ann_t ann2 = ((struct expr_hash_elt *)p2)->ann;
  tree rhs2 = ((struct expr_hash_elt *)p2)->rhs;
  if (rhs1 == rhs2 && ann1 == ann2)
    return 1;
  if (((enum tree_code) (rhs1)->common.code) != ((enum tree_code) (rhs2)->common.code))
    return 0;
  if ((((rhs1)->common.type) == ((rhs2)->common.type)
       || lang_hooks.types_compatible_p (((rhs1)->common.type), ((rhs2)->common.type)))
      && operand_equal_p (rhs1, rhs2, OEP_PURE_SAME))
    {
      vuse_optype ops1 = ((void *)0);
      vuse_optype ops2 = ((void *)0);
      size_t num_ops1 = 0;
      size_t num_ops2 = 0;
      size_t i;
      if (ann1)
 {
   ops1 = get_vuse_ops (ann1);
   num_ops1 = ((ops1) ? (ops1)->num_vuses : 0);
 }
      if (ann2)
 {
   ops2 = get_vuse_ops (ann2);
   num_ops2 = ((ops2) ? (ops2)->num_vuses : 0);
 }
      if (num_ops1 != num_ops2)
 return 0;
      for (i = 0; i < num_ops1; i++)
 if ((get_use_from_ptr (get_vuse_op_ptr (((ops1)), ((i))))) != (get_use_from_ptr (get_vuse_op_ptr (((ops2)), ((i))))))
   return 0;
      return 1;
    }
  return 0;
}
static void
register_definitions_for_stmt (stmt_ann_t ann, varray_type *block_defs_p)
{
  def_optype defs;
  v_may_def_optype v_may_defs;
  v_must_def_optype v_must_defs;
  unsigned int i;
  defs = get_def_ops (ann);
  for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
    {
      tree def = (get_def_from_ptr (get_def_op_ptr (((defs)), ((i)))));
      register_new_def (def, block_defs_p);
    }
  v_may_defs = get_v_may_def_ops (ann);
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      register_new_def ((get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i))))), block_defs_p);
    }
  v_must_defs = get_v_must_def_ops (ann);
  for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
    {
      register_new_def ((get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i))))), block_defs_p);
    }
}
void
walk_dominator_tree (struct dom_walk_data *walk_data, basic_block bb)
{
  void *bd = ((void *)0);
  basic_block dest;
  block_stmt_iterator bsi;
  if (walk_data->initialize_block_local_data)
    {
      unsigned char recycled;
      if (((walk_data->free_block_data)->elements_used) > 0)
 {
   bd = ((walk_data->free_block_data)->data.generic[(walk_data->free_block_data)->elements_used - 1]);
   do { ((walk_data->free_block_data)->elements_used--); } while (0);
   recycled = 1;
 }
      else
 {
   bd = xcalloc (1, walk_data->block_local_data_size);
   recycled = 0;
 }
      do { if ((walk_data->block_data_stack)->elements_used >= (walk_data->block_data_stack)->num_elements) (((walk_data->block_data_stack)) = varray_grow ((walk_data->block_data_stack), 2 * (walk_data->block_data_stack)->num_elements)); (walk_data->block_data_stack)->data.generic[(walk_data->block_data_stack)->elements_used++] = (bd); } while (0);
      walk_data->initialize_block_local_data (walk_data, bb, recycled);
    }
  if (walk_data->before_dom_children_before_stmts)
    (*walk_data->before_dom_children_before_stmts) (walk_data, bb);
  if (walk_data->before_dom_children_walk_stmts)
    {
      if (walk_data->walk_stmts_backward)
 for (bsi = bsi_last (bb); !bsi_end_p (bsi); bsi_prev (&bsi))
   (*walk_data->before_dom_children_walk_stmts) (walk_data, bb, bsi);
      else
 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
   (*walk_data->before_dom_children_walk_stmts) (walk_data, bb, bsi);
    }
  if (walk_data->before_dom_children_after_stmts)
    (*walk_data->before_dom_children_after_stmts) (walk_data, bb);
  for (dest = first_dom_son (walk_data->dom_direction, bb);
       dest;
       dest = next_dom_son (walk_data->dom_direction, dest))
    {
      if (dest->pred)
 walk_dominator_tree (walk_data, dest);
    }
  if (walk_data->after_dom_children_before_stmts)
    (*walk_data->after_dom_children_before_stmts) (walk_data, bb);
  if (walk_data->after_dom_children_walk_stmts)
    {
      if (walk_data->walk_stmts_backward)
 for (bsi = bsi_last (bb); !bsi_end_p (bsi); bsi_prev (&bsi))
   (*walk_data->after_dom_children_walk_stmts) (walk_data, bb, bsi);
      else
 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
   (*walk_data->after_dom_children_walk_stmts) (walk_data, bb, bsi);
    }
  if (walk_data->after_dom_children_after_stmts)
    (*walk_data->after_dom_children_after_stmts) (walk_data, bb);
  if (walk_data->initialize_block_local_data)
    {
      do { if ((walk_data->free_block_data)->elements_used >= (walk_data->free_block_data)->num_elements) (((walk_data->free_block_data)) = varray_grow ((walk_data->free_block_data), 2 * (walk_data->free_block_data)->num_elements)); (walk_data->free_block_data)->data.generic[(walk_data->free_block_data)->elements_used++] = (bd); } while (0);
      do { ((walk_data->block_data_stack)->elements_used--); } while (0);
    }
}
void
init_walk_dominator_tree (struct dom_walk_data *walk_data)
{
  if (walk_data->initialize_block_local_data)
    {
      walk_data->free_block_data = varray_init (2, VARRAY_DATA_GENERIC, "freelist ");
      walk_data->block_data_stack = varray_init (2, VARRAY_DATA_GENERIC, "block_data");
    }
  else
    {
      walk_data->free_block_data = ((void *)0);
      walk_data->block_data_stack = ((void *)0);
    }
}
void
fini_walk_dominator_tree (struct dom_walk_data *walk_data)
{
  if (walk_data->initialize_block_local_data)
    {
      while (((walk_data->free_block_data)->elements_used) > 0)
 {
   free (((walk_data->free_block_data)->data.generic[(walk_data->free_block_data)->elements_used - 1]));
   do { ((walk_data->free_block_data)->elements_used--); } while (0);
 }
    }
}
struct tailcall
{
  basic_block call_block;
  block_stmt_iterator call_bsi;
  unsigned char tail_recursion;
  tree mult, add;
  struct tailcall *next;
};
static tree m_acc, a_acc;
static unsigned char suitable_for_tail_opt_p (void);
static unsigned char optimize_tail_call (struct tailcall *, unsigned char);
static void eliminate_tail_call (struct tailcall *);
static void find_tail_calls (basic_block, struct tailcall **);
static unsigned char
suitable_for_tail_opt_p (void)
{
  int i;
  if ((cfun->stdarg))
    return 0;
  for (i = 0; i < (int) ((referenced_vars)->elements_used); i++)
    {
      tree var = ((referenced_vars)->data.tree1[i]);
      if (decl_function_context (var) == current_function_decl
   && !((var)->common.static_flag)
   && var_ann (var)->mem_tag_kind == NOT_A_TAG
   && is_call_clobbered (var))
 return 0;
    }
  return 1;
}
static unsigned char
suitable_for_tail_call_opt_p (void)
{
  if ((cfun->calls_alloca))
    return 0;
  if (0 && current_function_has_exception_handlers ())
    return 0;
  if ((cfun->calls_setjmp))
    return 0;
  return 1;
}
static tree
independent_of_stmt_p (tree expr, tree at, block_stmt_iterator bsi)
{
  basic_block bb, call_bb, at_bb;
  edge e;
  if (is_gimple_min_invariant (expr))
    return expr;
  if (((enum tree_code) (expr)->common.code) != SSA_NAME)
    return (tree) ((void *)0);
  at_bb = bb_for_stmt (at);
  call_bb = bb_for_stmt (bsi_stmt (bsi));
  for (bb = call_bb; bb != at_bb; bb = bb->succ->dest)
    bb->aux = &bb->aux;
  bb->aux = &bb->aux;
  while (1)
    {
      at = (expr)->common.chain;
      bb = bb_for_stmt (at);
      if (!bb || !bb->aux)
 break;
      if (bb == call_bb)
 {
   for (; !bsi_end_p (bsi); bsi_next (&bsi))
     if (bsi_stmt (bsi) == at)
       break;
   if (!bsi_end_p (bsi))
     expr = (tree) ((void *)0);
   break;
 }
      if (((enum tree_code) (at)->common.code) != PHI_NODE)
 {
   expr = (tree) ((void *)0);
   break;
 }
      for (e = bb->pred; e; e = e->pred_next)
 if (e->src->aux)
   break;
      if (!e)
 fancy_abort ("gcc.c", 144878, "?");
      expr = get_use_from_ptr (get_phi_arg_def_ptr ((((at))), ((phi_arg_from_edge ((at),(e))))));
    }
  for (bb = call_bb; bb != at_bb; bb = bb->succ->dest)
    bb->aux = ((void *)0);
  bb->aux = ((void *)0);
  return expr;
}
static unsigned char
process_assignment (tree ass, tree stmt, block_stmt_iterator call, tree *m,
      tree *a, tree *ass_var)
{
  tree op0, op1, non_ass_var;
  tree dest = ((ass)->exp.operands[0]);
  tree src = ((ass)->exp.operands[1]);
  enum tree_code code = ((enum tree_code) (src)->common.code);
  tree src_var = src;
  while ((((enum tree_code) (src_var)->common.code) == NOP_EXPR || ((enum tree_code) (src_var)->common.code) == CONVERT_EXPR || ((enum tree_code) (src_var)->common.code) == NON_LVALUE_EXPR) && ((src_var)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((src_var)->common.type))->type.mode) == ((((((src_var)->exp.operands[0]))->common.type))->type.mode))) (src_var) = ((src_var)->exp.operands[0]);
  if (((enum tree_code) (src_var)->common.code) == SSA_NAME)
    {
      if (src_var != *ass_var)
 return 0;
      *ass_var = dest;
      return 1;
    }
  if (tree_code_type[(int) (code)] != '2')
    return 0;
  op0 = ((src)->exp.operands[0]);
  op1 = ((src)->exp.operands[1]);
  if (op0 == *ass_var
      && (non_ass_var = independent_of_stmt_p (op1, stmt, call)))
    ;
  else if (op1 == *ass_var
    && (non_ass_var = independent_of_stmt_p (op0, stmt, call)))
    ;
  else
    return 0;
  switch (code)
    {
    case PLUS_EXPR:
      if (*a)
 return 0;
      *a = non_ass_var;
      *ass_var = dest;
      return 1;
    case MULT_EXPR:
      if (*a || *m)
 return 0;
      *m = non_ass_var;
      *ass_var = dest;
      return 1;
    default:
      return 0;
    }
}
static tree
propagate_through_phis (tree var, edge e)
{
  basic_block dest = e->dest;
  tree phi;
  for (phi = phi_nodes (dest); phi; phi = (((phi))->common.chain))
    if (get_use_from_ptr (get_phi_arg_def_ptr ((((phi))), ((phi_arg_from_edge ((phi),(e)))))) == var)
      return get_def_from_ptr (get_phi_result_ptr (phi));
  return var;
}
static void
find_tail_calls (basic_block bb, struct tailcall **ret)
{
  tree ass_var, ret_var, stmt, func, param, args, call = (tree) ((void *)0);
  block_stmt_iterator bsi, absi;
  unsigned char tail_recursion;
  struct tailcall *nw;
  edge e;
  tree m, a;
  basic_block abb;
  stmt_ann_t ann;
  if (bb->succ->succ_next)
    return;
  for (bsi = bsi_last (bb); !bsi_end_p (bsi); bsi_prev (&bsi))
    {
      stmt = bsi_stmt (bsi);
      if (((enum tree_code) (stmt)->common.code) == LABEL_EXPR)
 continue;
      get_stmt_operands (stmt);
      if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR)
 {
   ass_var = ((stmt)->exp.operands[0]);
   call = ((stmt)->exp.operands[1]);
 }
      else
 {
   ass_var = (tree) ((void *)0);
   call = stmt;
 }
      if (((enum tree_code) (call)->common.code) == CALL_EXPR)
 break;
      ann = stmt_ann (stmt);
      if (((get_v_may_def_ops (ann)) ? (get_v_may_def_ops (ann))->num_v_may_defs : 0)
          || ((get_v_must_def_ops (ann)) ? (get_v_must_def_ops (ann))->num_v_must_defs : 0)
   || ((get_vuse_ops (ann)) ? (get_vuse_ops (ann))->num_vuses : 0))
 return;
    }
  if (bsi_end_p (bsi))
    {
      for (e = bb->pred; e; e = e->pred_next)
 find_tail_calls (e->src, ret);
      return;
    }
  tail_recursion = 0;
  func = get_callee_fndecl (call);
  if (func == current_function_decl)
    {
      for (param = ((func)->decl.arguments), args = ((call)->exp.operands[1]);
    param && args;
    param = ((param)->common.chain), args = ((args)->common.chain))
 {
   tree arg = ((args)->list.value1);
   if (param != arg
       && (!is_gimple_reg_type (((param)->common.type))
    || !lang_hooks.types_compatible_p (((param)->common.type),
           ((arg)->common.type))))
     break;
 }
      if (!args && !param)
 tail_recursion = 1;
    }
  m = (tree) ((void *)0);
  a = (tree) ((void *)0);
  abb = bb;
  absi = bsi;
  while (1)
    {
      bsi_next (&absi);
      while (bsi_end_p (absi))
 {
   ass_var = propagate_through_phis (ass_var, abb->succ);
   abb = abb->succ->dest;
   absi = bsi_start (abb);
 }
      stmt = bsi_stmt (absi);
      if (((enum tree_code) (stmt)->common.code) == LABEL_EXPR)
 continue;
      if (((enum tree_code) (stmt)->common.code) == RETURN_EXPR)
 break;
      if (((enum tree_code) (stmt)->common.code) != MODIFY_EXPR)
 return;
      if (!process_assignment (stmt, stmt, bsi, &m, &a, &ass_var))
 return;
    }
  ret_var = ((stmt)->exp.operands[0]);
  if (ret_var
      && ((enum tree_code) (ret_var)->common.code) == MODIFY_EXPR)
    {
      tree ret_op = ((ret_var)->exp.operands[1]);
      while ((((enum tree_code) (ret_op)->common.code) == NOP_EXPR || ((enum tree_code) (ret_op)->common.code) == CONVERT_EXPR || ((enum tree_code) (ret_op)->common.code) == NON_LVALUE_EXPR) && ((ret_op)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((ret_op)->common.type))->type.mode) == ((((((ret_op)->exp.operands[0]))->common.type))->type.mode))) (ret_op) = ((ret_op)->exp.operands[0]);
      if (!tail_recursion
   && ((enum tree_code) (ret_op)->common.code) != SSA_NAME)
 return;
      if (!process_assignment (ret_var, stmt, bsi, &m, &a, &ass_var))
 return;
      ret_var = ((ret_var)->exp.operands[0]);
    }
  if (ret_var
      && (ret_var != ass_var))
    return;
  if (!tail_recursion && (m || a))
    return;
  nw = xmalloc (sizeof (struct tailcall));
  nw->call_block = bb;
  nw->call_bsi = bsi;
  nw->tail_recursion = tail_recursion;
  nw->mult = m;
  nw->add = a;
  nw->next = *ret;
  *ret = nw;
}
static void
adjust_accumulator_values (block_stmt_iterator bsi, tree m, tree a, edge back)
{
  tree stmt, var, phi, tmp;
  tree ret_type = ((((current_function_decl)->decl.result))->common.type);
  tree a_acc_arg = a_acc, m_acc_arg = m_acc;
  if (a)
    {
      if (m_acc)
 {
   if (integer_onep (a))
     var = m_acc;
   else
     {
       stmt = build (MODIFY_EXPR, ret_type, (tree) ((void *)0),
       build (MULT_EXPR, ret_type, m_acc, a));
       tmp = create_tmp_var (ret_type, "acc_tmp");
       add_referenced_tmp_var (tmp);
       var = make_ssa_name (tmp, stmt);
       ((stmt)->exp.operands[0]) = var;
       bsi_insert_after (&bsi, stmt, BSI_NEW_STMT);
     }
 }
      else
 var = a;
      stmt = build (MODIFY_EXPR, ret_type, (tree) ((void *)0),
      build (PLUS_EXPR, ret_type, a_acc, var));
      var = make_ssa_name ((a_acc)->ssa_name.var, stmt);
      ((stmt)->exp.operands[0]) = var;
      bsi_insert_after (&bsi, stmt, BSI_NEW_STMT);
      a_acc_arg = var;
    }
  if (m)
    {
      stmt = build (MODIFY_EXPR, ret_type, (tree) ((void *)0),
      build (MULT_EXPR, ret_type, m_acc, m));
      var = make_ssa_name ((m_acc)->ssa_name.var, stmt);
      ((stmt)->exp.operands[0]) = var;
      bsi_insert_after (&bsi, stmt, BSI_NEW_STMT);
      m_acc_arg = var;
    }
  if (a_acc)
    {
      for (phi = phi_nodes (back->dest); phi; phi = (((phi))->common.chain))
 if (get_def_from_ptr (get_phi_result_ptr (phi)) == a_acc)
   break;
      add_phi_arg (&phi, a_acc_arg, back);
    }
  if (m_acc)
    {
      for (phi = phi_nodes (back->dest); phi; phi = (((phi))->common.chain))
 if (get_def_from_ptr (get_phi_result_ptr (phi)) == m_acc)
   break;
      add_phi_arg (&phi, m_acc_arg, back);
    }
}
static void
adjust_return_value (basic_block bb, tree m, tree a)
{
  tree ret_stmt = last_stmt (bb), ret_var, var, stmt, tmp;
  tree ret_type = ((((current_function_decl)->decl.result))->common.type);
  block_stmt_iterator bsi = bsi_last (bb);
  if (((enum tree_code) (ret_stmt)->common.code) != RETURN_EXPR)
    fancy_abort ("gcc.c", 145229, "?");
  ret_var = ((ret_stmt)->exp.operands[0]);
  if (!ret_var)
    return;
  if (((enum tree_code) (ret_var)->common.code) == MODIFY_EXPR)
    {
      ret_var->common.ann = (tree_ann_t) stmt_ann (ret_stmt);
      bsi_replace (&bsi, ret_var, 1);
      (((ret_var)->exp.operands[0]))->common.chain = ret_var;
      ret_var = ((ret_var)->exp.operands[0]);
      ret_stmt = build1_stat (RETURN_EXPR,((ret_stmt)->common.type),ret_var );
      bsi_insert_after (&bsi, ret_stmt, BSI_NEW_STMT);
    }
  if (m)
    {
      stmt = build (MODIFY_EXPR, ret_type, (tree) ((void *)0),
      build (MULT_EXPR, ret_type, m_acc, ret_var));
      tmp = create_tmp_var (ret_type, "acc_tmp");
      add_referenced_tmp_var (tmp);
      var = make_ssa_name (tmp, stmt);
      ((stmt)->exp.operands[0]) = var;
      bsi_insert_before (&bsi, stmt, BSI_NEW_STMT);
    }
  else
    var = ret_var;
  if (a)
    {
      stmt = build (MODIFY_EXPR, ret_type, (tree) ((void *)0),
      build (PLUS_EXPR, ret_type, a_acc, var));
      tmp = create_tmp_var (ret_type, "acc_tmp");
      add_referenced_tmp_var (tmp);
      var = make_ssa_name (tmp, stmt);
      ((stmt)->exp.operands[0]) = var;
      bsi_insert_before (&bsi, stmt, BSI_NEW_STMT);
    }
  ((ret_stmt)->exp.operands[0]) = var;
  modify_stmt (ret_stmt);
}
static void
eliminate_tail_call (struct tailcall *t)
{
  tree param, stmt, args, rslt, call;
  basic_block bb, first;
  edge e;
  tree phi;
  stmt_ann_t ann;
  v_may_def_optype v_may_defs;
  unsigned i;
  stmt = bsi_stmt (t->call_bsi);
  get_stmt_operands (stmt);
  ann = stmt_ann (stmt);
  bb = t->call_block;
  if (dump_file && (dump_flags & (1 << 3)))
    {
      fprintf (dump_file, "Eliminated tail recursion in bb %d : ",
        bb->index);
      print_generic_stmt (dump_file, stmt, (1 << 1));
      fprintf (dump_file, "\n");
    }
  if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR)
    stmt = ((stmt)->exp.operands[1]);
  first = ENTRY_BLOCK_PTR->succ->dest;
  e = redirect_edge_and_branch (t->call_block->succ, first);
  if (!e)
    fancy_abort ("gcc.c", 145312, "?");
  ((e)->insns.t) = (tree) ((void *)0);
  for (param = ((current_function_decl)->decl.arguments),
       args = ((stmt)->exp.operands[1]);
       param;
       param = ((param)->common.chain),
       args = ((args)->common.chain))
    {
      for (phi = phi_nodes (first); phi; phi = (((phi))->common.chain))
 if (param == (get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.var)
   break;
      if (!phi)
 continue;
      add_phi_arg (&phi, ((args)->list.value1), e);
    }
  v_may_defs = get_v_may_def_ops (ann);
  for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
    {
      param = ((get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i))))))->ssa_name.var;
      for (phi = phi_nodes (first); phi; phi = (((phi))->common.chain))
 if (param == (get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.var)
   break;
      if (!phi)
 {
   tree name = var_ann (param)->default_def;
   tree new_name = make_ssa_name (param, (name)->common.chain);
   var_ann (param)->default_def = new_name;
   phi = create_phi_node (name, first);
   (name)->common.chain = phi;
   add_phi_arg (&phi, new_name, ENTRY_BLOCK_PTR->succ);
   if (first->pred->pred_next->pred_next)
     fancy_abort ("gcc.c", 145362, "?");
 }
      add_phi_arg (&phi, (get_use_from_ptr (get_v_may_def_op_ptr (((v_may_defs)), ((i))))), e);
    }
  adjust_accumulator_values (t->call_bsi, t->mult, t->add, e);
  call = bsi_stmt (t->call_bsi);
  if (((enum tree_code) (call)->common.code) == MODIFY_EXPR)
    {
      rslt = ((call)->exp.operands[0]);
      (rslt)->common.chain = build_empty_stmt ();
    }
  bsi_remove (&t->call_bsi);
}
static unsigned char
optimize_tail_call (struct tailcall *t, unsigned char opt_tailcalls)
{
  if (t->tail_recursion)
    {
      eliminate_tail_call (t);
      return 1;
    }
  if (opt_tailcalls)
    {
      tree stmt = bsi_stmt (t->call_bsi);
      if (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR)
 stmt = ((stmt)->exp.operands[1]);
      if (((enum tree_code) (stmt)->common.code) != CALL_EXPR)
 fancy_abort ("gcc.c", 145403, "?");
      ((stmt)->common.addressable_flag) = 1;
      if (dump_file && (dump_flags & (1 << 3)))
        {
   fprintf (dump_file, "Found tail call ");
   print_generic_expr (dump_file, stmt, dump_flags);
   fprintf (dump_file, " in bb %i\n", t->call_block->index);
 }
    }
  return 0;
}
static void
tree_optimize_tail_calls_1 (unsigned char opt_tailcalls)
{
  edge e;
  unsigned char phis_constructed = 0;
  struct tailcall *tailcalls = ((void *)0), *act, *next;
  unsigned char changed = 0;
  basic_block first = ENTRY_BLOCK_PTR->succ->dest;
  tree stmt, param, ret_type, tmp, phi;
  if (!suitable_for_tail_opt_p ())
    return;
  if (opt_tailcalls)
    opt_tailcalls = suitable_for_tail_call_opt_p ();
  for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
    {
      stmt = last_stmt (e->src);
      if (stmt
   && ((enum tree_code) (stmt)->common.code) == RETURN_EXPR)
 find_tail_calls (e->src, &tailcalls);
    }
  a_acc = m_acc = (tree) ((void *)0);
  for (act = tailcalls; act; act = act->next)
    {
      if (!act->tail_recursion)
 continue;
      if (!phis_constructed)
 {
   if (first->pred->pred_next)
     first = split_edge (ENTRY_BLOCK_PTR->succ);
   for (param = ((current_function_decl)->decl.arguments);
        param;
        param = ((param)->common.chain))
     if (var_ann (param)
  && (var_ann (param)->default_def
      && ((enum tree_code) (var_ann (param)->default_def)->common.code) == SSA_NAME))
     {
       tree name = var_ann (param)->default_def;
       tree new_name = make_ssa_name (param, (name)->common.chain);
       tree phi;
       var_ann (param)->default_def = new_name;
       phi = create_phi_node (name, first);
       (name)->common.chain = phi;
       add_phi_arg (&phi, new_name, first->pred);
     }
   phis_constructed = 1;
 }
      if (act->add && !a_acc)
 {
   ret_type = ((((current_function_decl)->decl.result))->common.type);
   tmp = create_tmp_var (ret_type, "add_acc");
   add_referenced_tmp_var (tmp);
   phi = create_phi_node (tmp, first);
   add_phi_arg (&phi, fold_convert (ret_type, global_trees[TI_INTEGER_ZERO]),
         first->pred);
   a_acc = get_def_from_ptr (get_phi_result_ptr (phi));
 }
      if (act->mult && !m_acc)
 {
   ret_type = ((((current_function_decl)->decl.result))->common.type);
   tmp = create_tmp_var (ret_type, "mult_acc");
   add_referenced_tmp_var (tmp);
   phi = create_phi_node (tmp, first);
   add_phi_arg (&phi, fold_convert (ret_type, global_trees[TI_INTEGER_ONE]),
         first->pred);
   m_acc = get_def_from_ptr (get_phi_result_ptr (phi));
 }
    }
  for (; tailcalls; tailcalls = next)
    {
      next = tailcalls->next;
      changed |= optimize_tail_call (tailcalls, opt_tailcalls);
      free (tailcalls);
    }
  if (a_acc || m_acc)
    {
      for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
 {
   stmt = last_stmt (e->src);
   if (stmt
       && ((enum tree_code) (stmt)->common.code) == RETURN_EXPR)
     adjust_return_value (e->src, m_acc, a_acc);
 }
    }
  if (changed)
    {
      free_dominance_info (CDI_DOMINATORS);
      cleanup_tree_cfg ();
    }
}
static void
execute_tail_recursion (void)
{
  tree_optimize_tail_calls_1 (0);
}
static unsigned char
gate_tail_calls (void)
{
  return flag_optimize_sibling_calls != 0;
}
static void
execute_tail_calls (void)
{
  tree_optimize_tail_calls_1 (1);
}
struct tree_opt_pass pass_tail_recursion =
{
  "tailr",
  ((void *)0),
  execute_tail_recursion,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 3)
};
struct tree_opt_pass pass_tail_calls =
{
  "tailc",
  gate_tail_calls,
  execute_tail_calls,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 3)
};
struct lower_data
{
  tree block;
  tree return_statements;
};
static void lower_stmt (tree_stmt_iterator *, struct lower_data *);
static void lower_bind_expr (tree_stmt_iterator *, struct lower_data *);
static void lower_cond_expr (tree_stmt_iterator *, struct lower_data *);
static void lower_return_expr (tree_stmt_iterator *, struct lower_data *);
static unsigned char expand_var_p (tree);
static void
lower_function_body (void)
{
  struct lower_data data;
  tree *body_p = &((current_function_decl)->decl.saved_tree);
  tree bind = *body_p;
  tree_stmt_iterator i;
  tree t, x;
  if (((enum tree_code) (bind)->common.code) != BIND_EXPR)
    fancy_abort ("gcc.c", 145633, "?");
  data.block = ((current_function_decl)->decl.initial);
  ((data.block)->block.subblocks) = (tree) ((void *)0);
  (((data.block))->common.chain) = (tree) ((void *)0);
  ((data.block)->common.asm_written_flag) = 1;
  data.return_statements = (tree) ((void *)0);
  *body_p = alloc_stmt_list ();
  i = tsi_start (*body_p);
  tsi_link_after (&i, bind, TSI_NEW_STMT);
  lower_bind_expr (&i, &data);
  i = tsi_last (*body_p);
  if (block_may_fallthru (*body_p)
      && (data.return_statements == ((void *)0)
          || ((((data.return_statements)->list.value1))->exp.operands[0]) != ((void *)0)))
    {
      x = build (RETURN_EXPR, global_trees[TI_VOID_TYPE], ((void *)0));
      annotate_with_locus (x, cfun->function_end_locus);
      tsi_link_after (&i, x, TSI_CONTINUE_LINKING);
    }
  for (t = data.return_statements ; t ; t = ((t)->common.chain))
    {
      x = build (LABEL_EXPR, global_trees[TI_VOID_TYPE], ((t)->list.purpose));
      tsi_link_after (&i, x, TSI_CONTINUE_LINKING);
      x = ((t)->list.value1);
      ((x)->exp.locus = (((void *)0)));
      tsi_link_after (&i, x, TSI_CONTINUE_LINKING);
    }
  if (data.block != ((current_function_decl)->decl.initial))
    fancy_abort ("gcc.c", 145681, "?");
  ((data.block)->block.subblocks)
    = blocks_nreverse (((data.block)->block.subblocks));
  clear_block_marks (data.block);
}
struct tree_opt_pass pass_lower_cf =
{
  "lower",
  ((void *)0),
  lower_function_body,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 0),
  (1 << 1),
  (1 << 0),
  0,
  (1 << 0)
};
void
lower_stmt_body (tree expr, struct lower_data *data)
{
  tree_stmt_iterator tsi;
  for (tsi = tsi_start (expr); !tsi_end_p (tsi); )
    lower_stmt (&tsi, data);
}
static void
lower_stmt (tree_stmt_iterator *tsi, struct lower_data *data)
{
  tree stmt = tsi_stmt (*tsi);
  if ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (stmt)->common.code))])) != 0) ? (stmt)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) && data)
    ((stmt)->exp.block) = data->block;
  switch (((enum tree_code) (stmt)->common.code))
    {
    case BIND_EXPR:
      lower_bind_expr (tsi, data);
      return;
    case COND_EXPR:
      lower_cond_expr (tsi, data);
      return;
    case RETURN_EXPR:
      lower_return_expr (tsi, data);
      return;
    case TRY_FINALLY_EXPR:
    case TRY_CATCH_EXPR:
      lower_stmt_body (((stmt)->exp.operands[0]), data);
      lower_stmt_body (((stmt)->exp.operands[1]), data);
      break;
    case CATCH_EXPR:
      lower_stmt_body ((((stmt))->exp.operands[1]), data);
      break;
    case EH_FILTER_EXPR:
      lower_stmt_body ((((stmt))->exp.operands[1]), data);
      break;
    case NOP_EXPR:
    case ASM_EXPR:
    case MODIFY_EXPR:
    case CALL_EXPR:
    case GOTO_EXPR:
    case LABEL_EXPR:
    case VA_ARG_EXPR:
    case SWITCH_EXPR:
      break;
    default:
      print_node_brief (stderr, "", stmt, 0);
    case COMPOUND_EXPR:
      fancy_abort ("gcc.c", 145765, "?");
    }
  tsi_next (tsi);
}
static void
lower_bind_expr (tree_stmt_iterator *tsi, struct lower_data *data)
{
  tree old_block = data->block;
  tree stmt = tsi_stmt (*tsi);
  tree new_block = ((((stmt))->exp.operands[2]));
  if (new_block)
    {
      if (new_block == old_block)
 {
   if (new_block != ((current_function_decl)->decl.initial))
     fancy_abort ("gcc.c", 145788, "?");
   new_block = ((void *)0);
 }
      else
 {
   if (((new_block)->common.asm_written_flag))
     fancy_abort ("gcc.c", 145795, "?");
   ((new_block)->common.asm_written_flag) = 1;
   (((new_block))->common.chain) = ((old_block)->block.subblocks);
   ((old_block)->block.subblocks) = new_block;
   ((new_block)->block.subblocks) = (tree) ((void *)0);
   ((new_block)->block.supercontext) = old_block;
   data->block = new_block;
 }
    }
  record_vars (((((stmt))->exp.operands[0])));
  lower_stmt_body (((((stmt))->exp.operands[1])), data);
  if (new_block)
    {
      if (data->block != new_block)
 fancy_abort ("gcc.c", 145816, "?");
      ((new_block)->block.subblocks)
 = blocks_nreverse (((new_block)->block.subblocks));
      data->block = old_block;
    }
  tsi_link_before (tsi, ((((stmt))->exp.operands[1])), TSI_SAME_STMT);
  tsi_delink (tsi);
}
unsigned char
block_may_fallthru (tree block)
{
  tree stmt = expr_last (block);
  switch (stmt ? ((enum tree_code) (stmt)->common.code) : ERROR_MARK)
    {
    case GOTO_EXPR:
    case RETURN_EXPR:
    case RESX_EXPR:
    case SWITCH_EXPR:
      return 0;
    case COND_EXPR:
      if (block_may_fallthru (((((stmt))->exp.operands[1]))))
 return 1;
      return block_may_fallthru (((((stmt))->exp.operands[2])));
    case BIND_EXPR:
      return block_may_fallthru (((((stmt))->exp.operands[1])));
    case TRY_FINALLY_EXPR:
      return block_may_fallthru (((stmt)->exp.operands[1]));
    case MODIFY_EXPR:
      if (((enum tree_code) (((stmt)->exp.operands[1]))->common.code) == CALL_EXPR)
 stmt = ((stmt)->exp.operands[1]);
      else
 return 1;
    case CALL_EXPR:
      return (call_expr_flags (stmt) & 2) == 0;
    default:
      return 1;
    }
}
static void
lower_cond_expr (tree_stmt_iterator *tsi, struct lower_data *data)
{
  tree stmt = tsi_stmt (*tsi);
  unsigned char then_is_goto, else_is_goto;
  tree then_branch, else_branch;
  tree then_goto, else_goto;
  then_branch = ((((stmt))->exp.operands[1]));
  else_branch = ((((stmt))->exp.operands[2]));
  lower_stmt_body (then_branch, data);
  lower_stmt_body (else_branch, data);
  then_goto = expr_only (then_branch);
  then_is_goto = then_goto && simple_goto_p (then_goto);
  else_goto = expr_only (else_branch);
  else_is_goto = else_goto && simple_goto_p (else_goto);
  if (!then_is_goto || !else_is_goto)
    {
      tree then_label, else_label, end_label, t;
      then_label = (tree) ((void *)0);
      else_label = (tree) ((void *)0);
      end_label = (tree) ((void *)0);
      if (!then_is_goto)
 {
   t = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],(tree) ((void *)0) );
   if (((then_branch)->common.side_effects_flag))
     then_label = t;
   else
     end_label = t;
   then_goto = build_and_jump (&(((t))->exp.operands[0]));
 }
      if (!else_is_goto)
 {
   t = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],(tree) ((void *)0) );
   if (((else_branch)->common.side_effects_flag))
     else_label = t;
   else
     {
       if (end_label)
  {
    tsi_delink (tsi);
    return;
  }
       else
  end_label = t;
     }
   else_goto = build_and_jump (&(((t))->exp.operands[0]));
 }
      if (then_label)
 {
   unsigned char may_fallthru = block_may_fallthru (then_branch);
   tsi_link_after (tsi, then_label, TSI_CONTINUE_LINKING);
   tsi_link_after (tsi, then_branch, TSI_CONTINUE_LINKING);
   if (else_label && may_fallthru)
     {
       end_label = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],(tree) ((void *)0) );
       t = build_and_jump (&(((end_label))->exp.operands[0]));
       tsi_link_after (tsi, t, TSI_CONTINUE_LINKING);
     }
 }
      if (else_label)
 {
   tsi_link_after (tsi, else_label, TSI_CONTINUE_LINKING);
   tsi_link_after (tsi, else_branch, TSI_CONTINUE_LINKING);
 }
      if (end_label)
 tsi_link_after (tsi, end_label, TSI_CONTINUE_LINKING);
    }
  ((((stmt))->exp.operands[1])) = then_goto;
  ((((stmt))->exp.operands[2])) = else_goto;
  tsi_next (tsi);
}
static void
lower_return_expr (tree_stmt_iterator *tsi, struct lower_data *data)
{
  tree stmt = tsi_stmt (*tsi);
  tree value1, t, label;
  value1 = ((stmt)->exp.operands[0]);
  if (value1 && ((enum tree_code) (value1)->common.code) == MODIFY_EXPR)
    value1 = ((value1)->exp.operands[1]);
  for (t = data->return_statements; t ; t = ((t)->common.chain))
    {
      tree tvalue = ((((t)->list.value1))->exp.operands[0]);
      if (tvalue && ((enum tree_code) (tvalue)->common.code) == MODIFY_EXPR)
 tvalue = ((tvalue)->exp.operands[1]);
      if (value1 == tvalue)
 {
   label = ((t)->list.purpose);
   goto found;
 }
    }
  label = create_artificial_label ();
  data->return_statements = tree_cons_stat (label,stmt,data->return_statements );
 found:
  t = build (GOTO_EXPR, global_trees[TI_VOID_TYPE], label);
  ((t)->exp.locus = (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (stmt)->common.code))])) != 0) ? (stmt)->exp.locus : (location_t *)((void *)0))));
  tsi_link_before (tsi, t, TSI_SAME_STMT);
  tsi_delink (tsi);
}
void
record_vars (tree vars)
{
  for (; vars; vars = ((vars)->common.chain))
    {
      tree var = vars;
      if (((var)->decl.external_flag))
 continue;
      if (((enum tree_code) (var)->common.code) == FUNCTION_DECL)
 continue;
      cfun->unexpanded_var_list = tree_cons_stat ((tree) ((void *)0),var,cfun->unexpanded_var_list )
                                    ;
    }
}
static unsigned char
expand_var_p (tree var)
{
  struct var_ann_d *ann;
  if (((enum tree_code) (var)->common.code) != VAR_DECL)
    return 1;
  ann = var_ann (var);
  if (ann
      && ! ann->may_aliases
      && ! ann->used
      && ! ann->has_hidden_use
      && ! ((var)->common.addressable_flag)
      && ! ((var)->common.volatile_flag)
      && (((var)->decl.artificial_flag) || optimize >= 2))
    return 0;
  return 1;
}
static void
remove_useless_vars (void)
{
  tree var, *cell;
  for (cell = &cfun->unexpanded_var_list; *cell; )
    {
      var = ((*cell)->list.value1);
      if (!expand_var_p (var))
 {
   *cell = ((*cell)->common.chain);
   continue;
 }
      cell = &((*cell)->common.chain);
    }
}
void
expand_used_vars (void)
{
  tree cell;
  cfun->unexpanded_var_list = nreverse (cfun->unexpanded_var_list);
  for (cell = cfun->unexpanded_var_list; cell; cell = ((cell)->common.chain))
    expand_var (((cell)->list.value1));
  cfun->unexpanded_var_list = (tree) ((void *)0);
}
struct tree_opt_pass pass_remove_useless_vars =
{
  "vars",
  ((void *)0),
  remove_useless_vars,
  ((void *)0),
  ((void *)0),
  0,
  0,
  0,
  0,
  0,
  0,
  (1 << 0)
};
static tree stmt_list_cache;
tree
alloc_stmt_list (void)
{
  tree list = stmt_list_cache;
  if (list)
    {
      stmt_list_cache = ((list)->common.chain);
      memset (list, 0, sizeof(struct tree_common));
      ((list)->common.code = (STATEMENT_LIST));
    }
  else
    list = make_node_stat (STATEMENT_LIST );
  ((list)->common.type) = global_trees[TI_VOID_TYPE];
  return list;
}
void
free_stmt_list (tree t)
{
  ((t)->common.chain) = stmt_list_cache;
  stmt_list_cache = t;
}
void
tsi_link_before (tree_stmt_iterator *i, tree t, enum tsi_iterator_update mode)
{
  struct tree_statement_list_node *head, *tail, *cur;
  if (t == i->container)
    fancy_abort ("gcc.c", 146169, "?");
  if (((enum tree_code) (t)->common.code) == STATEMENT_LIST)
    {
      head = ((t)->stmt_list.head);
      tail = ((t)->stmt_list.tail);
      ((t)->stmt_list.head) = ((void *)0);
      ((t)->stmt_list.tail) = ((void *)0);
      free_stmt_list (t);
      if (!head || !tail)
 {
   if (head != tail)
     fancy_abort ("gcc.c", 146184, "?");
   return;
 }
    }
  else
    {
      head = ggc_alloc_stat (sizeof (*head) );
      head->prev = ((void *)0);
      head->next = ((void *)0);
      head->stmt = t;
      tail = head;
    }
  ((i->container)->common.side_effects_flag) = 1;
  cur = i->ptr;
  if (cur)
    {
      head->prev = cur->prev;
      if (head->prev)
 head->prev->next = head;
      else
 ((i->container)->stmt_list.head) = head;
      tail->next = cur;
      cur->prev = tail;
    }
  else
    {
      if (((i->container)->stmt_list.tail))
 fancy_abort ("gcc.c", 146215, "?");
      ((i->container)->stmt_list.head) = head;
      ((i->container)->stmt_list.tail) = tail;
    }
  switch (mode)
    {
    case TSI_NEW_STMT:
    case TSI_CONTINUE_LINKING:
    case TSI_CHAIN_START:
      i->ptr = head;
      break;
    case TSI_CHAIN_END:
      i->ptr = tail;
      break;
    case TSI_SAME_STMT:
      if (!cur)
 fancy_abort ("gcc.c", 146233, "?");
      break;
    }
}
void
tsi_link_after (tree_stmt_iterator *i, tree t, enum tsi_iterator_update mode)
{
  struct tree_statement_list_node *head, *tail, *cur;
  if (t == i->container)
    fancy_abort ("gcc.c", 146247, "?");
  if (((enum tree_code) (t)->common.code) == STATEMENT_LIST)
    {
      head = ((t)->stmt_list.head);
      tail = ((t)->stmt_list.tail);
      ((t)->stmt_list.head) = ((void *)0);
      ((t)->stmt_list.tail) = ((void *)0);
      free_stmt_list (t);
      if (!head || !tail)
 {
   if (head != tail)
     fancy_abort ("gcc.c", 146262, "?");
   return;
 }
    }
  else
    {
      head = ggc_alloc_stat (sizeof (*head) );
      head->prev = ((void *)0);
      head->next = ((void *)0);
      head->stmt = t;
      tail = head;
    }
  ((i->container)->common.side_effects_flag) = 1;
  cur = i->ptr;
  if (cur)
    {
      tail->next = cur->next;
      if (tail->next)
 tail->next->prev = tail;
      else
 ((i->container)->stmt_list.tail) = tail;
      head->prev = cur;
      cur->next = head;
    }
  else
    {
      if (((i->container)->stmt_list.tail))
 fancy_abort ("gcc.c", 146293, "?");
      ((i->container)->stmt_list.head) = head;
      ((i->container)->stmt_list.tail) = tail;
    }
  switch (mode)
    {
    case TSI_NEW_STMT:
    case TSI_CHAIN_START:
      i->ptr = head;
      break;
    case TSI_CONTINUE_LINKING:
    case TSI_CHAIN_END:
      i->ptr = tail;
      break;
    case TSI_SAME_STMT:
      if (!cur)
        fancy_abort ("gcc.c", 146311, "?");
      break;
    }
}
void
tsi_delink (tree_stmt_iterator *i)
{
  struct tree_statement_list_node *cur, *next, *prev;
  cur = i->ptr;
  next = cur->next;
  prev = cur->prev;
  if (prev)
    prev->next = next;
  else
    ((i->container)->stmt_list.head) = next;
  if (next)
    next->prev = prev;
  else
    ((i->container)->stmt_list.tail) = prev;
  if (!next && !prev)
    ((i->container)->common.side_effects_flag) = 0;
  i->ptr = next;
}
tree
tsi_split_statement_list_after (const tree_stmt_iterator *i)
{
  struct tree_statement_list_node *cur, *next;
  tree old_sl, new_sl;
  cur = i->ptr;
  if (cur == ((void *)0))
    fancy_abort ("gcc.c", 146355, "?");
  next = cur->next;
  old_sl = i->container;
  new_sl = alloc_stmt_list ();
  ((new_sl)->common.side_effects_flag) = 1;
  ((new_sl)->stmt_list.head) = next;
  ((new_sl)->stmt_list.tail) = ((old_sl)->stmt_list.tail);
  ((old_sl)->stmt_list.tail) = cur;
  cur->next = ((void *)0);
  next->prev = ((void *)0);
  return new_sl;
}
tree
tsi_split_statement_list_before (tree_stmt_iterator *i)
{
  struct tree_statement_list_node *cur, *prev;
  tree old_sl, new_sl;
  cur = i->ptr;
  if (cur == ((void *)0))
    fancy_abort ("gcc.c", 146383, "?");
  prev = cur->prev;
  old_sl = i->container;
  new_sl = alloc_stmt_list ();
  ((new_sl)->common.side_effects_flag) = 1;
  i->container = new_sl;
  ((new_sl)->stmt_list.head) = cur;
  ((new_sl)->stmt_list.tail) = ((old_sl)->stmt_list.tail);
  ((old_sl)->stmt_list.tail) = prev;
  cur->prev = ((void *)0);
  prev->next = ((void *)0);
  return new_sl;
}
tree
expr_first (tree expr)
{
  if (expr == (tree) ((void *)0))
    return expr;
  if (((enum tree_code) (expr)->common.code) == STATEMENT_LIST)
    {
      struct tree_statement_list_node *n = ((expr)->stmt_list.head);
      return n ? n->stmt : (tree) ((void *)0);
    }
  while (((enum tree_code) (expr)->common.code) == COMPOUND_EXPR)
    expr = ((expr)->exp.operands[0]);
  return expr;
}
tree
expr_last (tree expr)
{
  if (expr == (tree) ((void *)0))
    return expr;
  if (((enum tree_code) (expr)->common.code) == STATEMENT_LIST)
    {
      struct tree_statement_list_node *n = ((expr)->stmt_list.tail);
      return n ? n->stmt : (tree) ((void *)0);
    }
  while (((enum tree_code) (expr)->common.code) == COMPOUND_EXPR)
    expr = ((expr)->exp.operands[1]);
  return expr;
}
tree
expr_only (tree expr)
{
  if (expr == (tree) ((void *)0))
    return (tree) ((void *)0);
  if (((enum tree_code) (expr)->common.code) == STATEMENT_LIST)
    {
      struct tree_statement_list_node *n = ((expr)->stmt_list.tail);
      if (n && ((expr)->stmt_list.head) == n)
 return n->stmt;
      else
 return (tree) ((void *)0);
    }
  if (((enum tree_code) (expr)->common.code) == COMPOUND_EXPR)
    return (tree) ((void *)0);
  return expr;
}
const struct ggc_root_tab gt_ggc_rd_gt_tree_iterator_h[] = {
  { &stmt_list_cache, 1, sizeof (stmt_list_cache), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static tree free_phinodes[10 - 2];
static unsigned long free_phinode_count;
static int ideal_phi_node_len (int);
static void resize_phi_node (tree *, int);
void
init_phinodes (void)
{
  int i;
  for (i = 0; i < 10 - 2; i++)
    free_phinodes[i] = ((void *)0);
  free_phinode_count = 0;
}
void
fini_phinodes (void)
{
  int i;
  for (i = 0; i < 10 - 2; i++)
    free_phinodes[i] = ((void *)0);
  free_phinode_count = 0;
}
static int
ideal_phi_node_len (int len)
{
  size_t size, new_size;
  int log2, new_len;
  if (len < 2)
    len = 2;
  size = sizeof (struct tree_phi_node) + (len - 1) * sizeof (struct phi_arg_d);
  log2 = ceil_log2 (size);
  new_size = 1 << log2;
  new_len = len + (new_size - size) / sizeof (struct phi_arg_d);
  return new_len;
}
tree
make_phi_node (tree var, int len)
{
  tree phi;
  int size;
  int bucket = 10 - 2;
  len = ideal_phi_node_len (len);
  size = sizeof (struct tree_phi_node) + (len - 1) * sizeof (struct phi_arg_d);
  if (free_phinode_count)
    for (bucket = len - 2; bucket < 10 - 2; bucket++)
      if (free_phinodes[bucket])
 break;
  if (bucket < 10 - 2
      && (free_phinodes[bucket])->phi.capacity >= len)
    {
      free_phinode_count--;
      phi = free_phinodes[bucket];
      free_phinodes[bucket] = (((free_phinodes[bucket]))->common.chain);
    }
  else
    {
      phi = ggc_alloc_stat (size );
    }
  memset (phi, 0, size);
  ((phi)->common.code = (PHI_NODE));
  (phi)->phi.capacity = len;
  if (((enum tree_code) (var)->common.code) == SSA_NAME)
    ((*((get_phi_result_ptr (phi)).def)) = ((var)));
  else
    ((*((get_phi_result_ptr (phi)).def)) = ((make_ssa_name (var, phi))));
  return phi;
}
void
release_phi_node (tree phi)
{
  int bucket;
  int len = (phi)->phi.capacity;
  bucket = len > 10 - 1 ? 10 - 1 : len;
  bucket -= 2;
  (((phi))->common.chain) = free_phinodes[bucket];
  free_phinodes[bucket] = phi;
  free_phinode_count++;
}
static void
resize_phi_node (tree *phi, int len)
{
  int size, old_size;
  tree new_phi;
  int i, old_len, bucket = 10 - 2;
  old_size = (sizeof (struct tree_phi_node)
      + ((*phi)->phi.capacity - 1) * sizeof (struct phi_arg_d));
  size = sizeof (struct tree_phi_node) + (len - 1) * sizeof (struct phi_arg_d);
  if (free_phinode_count)
    for (bucket = len - 2; bucket < 10 - 2; bucket++)
      if (free_phinodes[bucket])
 break;
  if (bucket < 10 - 2
      && (free_phinodes[bucket])->phi.capacity >= len)
    {
      free_phinode_count--;
      new_phi = free_phinodes[bucket];
      free_phinodes[bucket] = (((free_phinodes[bucket]))->common.chain);
    }
  else
    {
      new_phi = ggc_alloc_stat (size );
    }
  memcpy (new_phi, *phi, old_size);
  old_len = (new_phi)->phi.capacity;
  (new_phi)->phi.capacity = len;
  for (i = old_len; i < len; i++)
    {
      ((*((get_phi_arg_def_ptr (((new_phi)), ((i)))).use)) = (((tree) ((void *)0))));
      ((new_phi)->phi.a[i]).e = ((void *)0);
      ((new_phi)->phi.a[i]).nonzero = 0;
    }
  *phi = new_phi;
}
tree
create_phi_node (tree var, basic_block bb)
{
  tree phi;
  phi = make_phi_node (var, bb_ann (bb)->num_preds);
  (phi)->phi.rewritten = 0;
  (((phi))->common.chain) = phi_nodes (bb);
  bb_ann (bb)->phi_nodes = phi;
  set_bb_for_stmt (phi, bb);
  return phi;
}
void
add_phi_arg (tree *phi, tree def, edge e)
{
  int i = (*phi)->phi.num_args;
  if (i >= (*phi)->phi.capacity)
    {
      tree old_phi = *phi;
      resize_phi_node (phi, ideal_phi_node_len (i + 4));
      (get_def_from_ptr (get_phi_result_ptr (*phi)))->common.chain = *phi;
      if (*phi != old_phi)
 {
   release_phi_node (old_phi);
   if (phi_nodes (e->dest) == old_phi)
     bb_ann (e->dest)->phi_nodes = *phi;
   else
     {
       tree p;
       for (p = phi_nodes (e->dest);
     p && (((p))->common.chain) != old_phi;
     p = (((p))->common.chain))
  ;
       if (!p)
  fancy_abort ("gcc.c", 146834, "?");
       (((p))->common.chain) = *phi;
     }
 }
    }
  if (e->flags & 2)
    {
      (def)->common.asm_written_flag = 1;
      (get_def_from_ptr (get_phi_result_ptr (*phi)))->common.asm_written_flag = 1;
    }
  ((*((get_phi_arg_def_ptr (((*phi)), ((i)))).use)) = ((def)));
  ((*phi)->phi.a[i]).e = e;
  ((*phi)->phi.a[i]).nonzero = 0;
  (*phi)->phi.num_args++;
}
void
remove_phi_arg (tree phi, basic_block block)
{
  int i, num_elem = (phi)->phi.num_args;
  for (i = 0; i < num_elem; i++)
    {
      basic_block src_bb;
      src_bb = ((phi)->phi.a[i]).e->src;
      if (src_bb == block)
 {
   remove_phi_arg_num (phi, i);
   return;
 }
    }
}
void
remove_phi_arg_num (tree phi, int i)
{
  int num_elem = (phi)->phi.num_args;
  if (i != num_elem - 1)
    {
      ((*((get_phi_arg_def_ptr (((phi)), ((i)))).use)) = ((get_use_from_ptr (get_phi_arg_def_ptr (((phi)), ((num_elem - 1)))))));
      ((phi)->phi.a[i]).e = ((phi)->phi.a[num_elem - 1]).e;
      ((phi)->phi.a[i]).nonzero = ((phi)->phi.a[num_elem - 1]).nonzero;
    }
  ((*((get_phi_arg_def_ptr (((phi)), ((num_elem - 1)))).use)) = (((tree) ((void *)0))));
  ((phi)->phi.a[num_elem - 1]).e = ((void *)0);
  ((phi)->phi.a[num_elem - 1]).nonzero = 0;
  (phi)->phi.num_args--;
  if ((phi)->phi.num_args == 0)
    remove_phi_node (phi, ((void *)0), bb_for_stmt (phi));
}
void
remove_phi_node (tree phi, tree prev, basic_block bb)
{
  if (prev)
    {
      (((prev))->common.chain) = (((phi))->common.chain);
      release_ssa_name (get_def_from_ptr (get_phi_result_ptr (phi)));
      release_phi_node (phi);
    }
  else if (phi == phi_nodes (bb))
    {
      bb_ann (bb)->phi_nodes = (((phi))->common.chain);
      release_ssa_name (get_def_from_ptr (get_phi_result_ptr (phi)));
      release_phi_node (phi);
    }
  else
    {
      tree prev, t;
      prev = (tree) ((void *)0);
      for (t = phi_nodes (bb); t && t != phi; t = (((t))->common.chain))
 prev = t;
      if (t)
 remove_phi_node (t, prev, bb);
    }
}
void
remove_all_phi_nodes_for (bitmap vars)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      tree phi, new_phi_list, last_phi, next;
      last_phi = new_phi_list = (tree) ((void *)0);
      for (phi = phi_nodes (bb), next = ((void *)0); phi; phi = next)
 {
   tree var = (get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.var;
   next = (((phi))->common.chain);
   if (!bitmap_bit_p (vars, var_ann (var)->uid))
     {
       (phi)->phi.rewritten = 1;
       if (new_phi_list == (tree) ((void *)0))
  new_phi_list = last_phi = phi;
       else
  {
    (((last_phi))->common.chain) = phi;
    last_phi = phi;
  }
     }
   else
     {
       release_ssa_name (get_def_from_ptr (get_phi_result_ptr (phi)));
       release_phi_node (phi);
     }
 }
      if (last_phi)
 (((last_phi))->common.chain) = (tree) ((void *)0);
      bb_ann (bb)->phi_nodes = new_phi_list;
    }
}
const struct ggc_root_tab gt_ggc_rd_gt_tree_phinodes_h[] = {
  { &free_phinodes, 1, sizeof (free_phinodes), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
varray_type ssa_names;
static tree free_ssanames;
void
init_ssanames (void)
{
  ssa_names = varray_init (50, VARRAY_DATA_TREE, "ssa_names table");
  do { if ((ssa_names)->elements_used >= (ssa_names)->num_elements) (((ssa_names)) = varray_grow ((ssa_names), 2 * (ssa_names)->num_elements)); (ssa_names)->data.tree1[(ssa_names)->elements_used++] = ((tree) ((void *)0)); } while (0);
  free_ssanames = ((void *)0);
}
void
fini_ssanames (void)
{
  free_ssanames = ((void *)0);
}
tree
make_ssa_name (tree var, tree stmt)
{
  tree t;
  if (free_ssanames)
    {
      unsigned int save_version;
      t = free_ssanames;
      free_ssanames = ((free_ssanames)->common.chain);
      save_version = (t)->ssa_name.version;
      memset (t, 0, tree_size (t));
      ((t)->common.code = (SSA_NAME));
      (t)->ssa_name.version = save_version;
    }
  else
    {
      t = make_node_stat (SSA_NAME );
      (t)->ssa_name.version = ((ssa_names)->elements_used);
      do { if ((ssa_names)->elements_used >= (ssa_names)->num_elements) (((ssa_names)) = varray_grow ((ssa_names), 2 * (ssa_names)->num_elements)); (ssa_names)->data.tree1[(ssa_names)->elements_used++] = (t); } while (0);
    }
  ((t)->common.type) = ((var)->common.type);
  (t)->ssa_name.var = var;
  (t)->common.chain = stmt;
  (t)->ssa_name.ptr_info = ((void *)0);
  return t;
}
void
release_ssa_name (tree var)
{
  if (! (var)->common.nothrow_flag)
    {
      (var)->common.nothrow_flag = 1;
      ((var)->common.chain) = free_ssanames;
      free_ssanames = var;
    }
}
tree
duplicate_ssa_name (tree name, tree stmt)
{
  tree new_name = make_ssa_name ((name)->ssa_name.var, stmt);
  struct ptr_info_def *old_ptr_info = (name)->ssa_name.ptr_info;
  struct ptr_info_def *new_ptr_info;
  if (!old_ptr_info)
    return new_name;
  new_ptr_info = ggc_alloc_stat (sizeof (struct ptr_info_def) );
  *new_ptr_info = *old_ptr_info;
  if (old_ptr_info->pt_vars)
    {
      new_ptr_info->pt_vars = bitmap_initialize (((void *)0), 0);
      bitmap_copy (new_ptr_info->pt_vars, old_ptr_info->pt_vars);
    }
  (new_name)->ssa_name.ptr_info = new_ptr_info;
  return new_name;
}
const struct ggc_root_tab gt_ggc_r_gt_tree_ssanames_h[] = {
  {
    &free_ssanames,
    1,
    sizeof (free_ssanames),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static bitmap sra_candidates;
static bitmap needs_copy_in;
static bitmap sra_type_decomp_cache;
static bitmap sra_type_inst_cache;
struct sra_elt
{
  struct sra_elt *parent;
  struct sra_elt *children;
  struct sra_elt *sibling;
  tree element;
  tree type;
  tree replacement;
  unsigned int n_uses;
  unsigned int n_copies;
  unsigned char is_scalar;
  unsigned char cannot_scalarize;
  unsigned char use_block_copy;
  unsigned char visited;
};
static htab_t sra_map;
static struct obstack sra_obstack;
static void dump_sra_elt_name (FILE *, struct sra_elt *);
extern void debug_sra_elt_name (struct sra_elt *);
static unsigned char
is_sra_candidate_decl (tree decl)
{
  return (tree_code_type[(int) (((enum tree_code) (decl)->common.code))] == 'd') && bitmap_bit_p (sra_candidates, var_ann (decl)->uid);
}
static unsigned char
is_sra_scalar_type (tree type)
{
  enum tree_code code = ((enum tree_code) (type)->common.code);
  return (code == INTEGER_TYPE || code == REAL_TYPE || code == VECTOR_TYPE
   || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE
   || code == CHAR_TYPE || code == POINTER_TYPE || code == OFFSET_TYPE
   || code == REFERENCE_TYPE);
}
static unsigned char
type_can_be_decomposed_p (tree type)
{
  unsigned int cache = ((((type)->type.main_variant))->type.uid) * 2;
  tree t;
  if (bitmap_bit_p (sra_type_decomp_cache, cache+0))
    return 1;
  if (bitmap_bit_p (sra_type_decomp_cache, cache+1))
    return 0;
  if (((type)->type.size) == ((void *)0) || integer_zerop (((type)->type.size)))
    goto fail;
  switch (((enum tree_code) (type)->common.code))
    {
    case RECORD_TYPE:
      {
 unsigned char saw_one_field = 0;
 for (t = ((type)->type.value1s); t ; t = ((t)->common.chain))
   if (((enum tree_code) (t)->common.code) == FIELD_DECL)
     {
       if (((t)->decl.bit_field_flag)
    && (tree_low_cst (((t)->decl.size), 1)
        != ((((t)->common.type))->type.precision)))
  goto fail;
       saw_one_field = 1;
     }
 if (!saw_one_field)
   goto fail;
      }
      break;
    case ARRAY_TYPE:
      t = ((type)->type.value1s);
      if (t == ((void *)0))
 goto fail;
      if (((t)->type.minval) == ((void *)0) || !((((t)->type.minval))->common.constant_flag))
 goto fail;
      if (((t)->type.maxval) == ((void *)0) || !((((t)->type.maxval))->common.constant_flag))
 goto fail;
      break;
    case COMPLEX_TYPE:
      break;
    default:
      goto fail;
    }
  bitmap_set_bit (sra_type_decomp_cache, cache+0);
  return 1;
 fail:
  bitmap_set_bit (sra_type_decomp_cache, cache+1);
  return 0;
}
static unsigned char
decl_can_be_decomposed_p (tree var)
{
  if (is_sra_scalar_type (((var)->common.type)))
    return 0;
  if (!is_gimple_non_addressable (var))
    {
      if (dump_file && (dump_flags & (1 << 3)))
 {
   fprintf (dump_file, "Cannot scalarize variable ");
   print_generic_expr (dump_file, var, dump_flags);
   fprintf (dump_file, " because it must live in memory\n");
 }
      return 0;
    }
  if (((var)->common.volatile_flag))
    {
      if (dump_file && (dump_flags & (1 << 3)))
 {
   fprintf (dump_file, "Cannot scalarize variable ");
   print_generic_expr (dump_file, var, dump_flags);
   fprintf (dump_file, " because it is declared volatile\n");
 }
      return 0;
    }
  if (!type_can_be_decomposed_p (((var)->common.type)))
    {
      if (dump_file && (dump_flags & (1 << 3)))
 {
   fprintf (dump_file, "Cannot scalarize variable ");
   print_generic_expr (dump_file, var, dump_flags);
   fprintf (dump_file, " because its type cannot be decomposed\n");
 }
      return 0;
    }
  return 1;
}
static unsigned char
type_can_instantiate_all_elements (tree type)
{
  if (is_sra_scalar_type (type))
    return 1;
  if (!type_can_be_decomposed_p (type))
    return 0;
  switch (((enum tree_code) (type)->common.code))
    {
    case RECORD_TYPE:
      {
 unsigned int cache = ((((type)->type.main_variant))->type.uid) * 2;
 tree f;
 if (bitmap_bit_p (sra_type_inst_cache, cache+0))
   return 1;
 if (bitmap_bit_p (sra_type_inst_cache, cache+1))
   return 0;
 for (f = ((type)->type.value1s); f ; f = ((f)->common.chain))
   if (((enum tree_code) (f)->common.code) == FIELD_DECL)
     {
       if (!type_can_instantiate_all_elements (((f)->common.type)))
  {
    bitmap_set_bit (sra_type_inst_cache, cache+1);
    return 0;
  }
     }
 bitmap_set_bit (sra_type_inst_cache, cache+0);
 return 1;
      }
    case ARRAY_TYPE:
      return type_can_instantiate_all_elements (((type)->common.type));
    case COMPLEX_TYPE:
      return 1;
    default:
      fancy_abort ("gcc.c", 147590, "?");
    }
}
static unsigned char
can_completely_scalarize_p (struct sra_elt *elt)
{
  struct sra_elt *c;
  if (elt->cannot_scalarize)
    return 0;
  for (c = elt->children; c ; c = c->sibling)
    if (!can_completely_scalarize_p (c))
      return 0;
  return 1;
}
static hashval_t
sra_hash_tree (tree t)
{
  switch (((enum tree_code) (t)->common.code))
    {
    case VAR_DECL:
    case PARM_DECL:
    case RESULT_DECL:
    case FIELD_DECL:
      return ((t)->decl.uid);
    case INTEGER_CST:
      return (((t)->int_cst.int_cst).low) ^ (((t)->int_cst.int_cst).high);
    default:
      fancy_abort ("gcc.c", 147628, "?");
    }
}
static hashval_t
sra_elt_hash (const void *x)
{
  const struct sra_elt *e = x;
  const struct sra_elt *p;
  hashval_t h;
  h = sra_hash_tree (e->element);
  for (p = e->parent; p ; p = p->parent)
    h = (h * 65521) ^ sra_hash_tree (p->element);
  return h;
}
static int
sra_elt_eq (const void *x, const void *y)
{
  const struct sra_elt *a = x;
  const struct sra_elt *b = y;
  if (a->parent != b->parent)
    return 0;
  if (a->element == b->element)
    return 1;
  if (((enum tree_code) (a->element)->common.code) == INTEGER_CST
      && ((enum tree_code) (b->element)->common.code) == INTEGER_CST)
    return tree_int_cst_equal (a->element, b->element);
  else
    return 0;
}
static struct sra_elt *
lookup_element (struct sra_elt *parent, tree child, tree type,
  enum insert_option insert)
{
  struct sra_elt dummy;
  struct sra_elt **slot;
  struct sra_elt *elt;
  dummy.parent = parent;
  dummy.element = child;
  slot = (struct sra_elt **) htab_find_slot (sra_map, &dummy, insert);
  if (!slot && insert == NO_INSERT)
    return ((void *)0);
  elt = *slot;
  if (!elt && insert == INSERT)
    {
      *slot = elt = (( ((&sra_obstack))->temp = ((sizeof (*elt))), ((((&sra_obstack))->chunk_limit - ((&sra_obstack))->next_free < ((&sra_obstack))->temp) ? (_obstack_newchunk (((&sra_obstack)), ((&sra_obstack))->temp), 0) : 0), (((&sra_obstack))->next_free += (((&sra_obstack))->temp))), ( (((&sra_obstack))->next_free == ((&sra_obstack))->object_base ? ((((&sra_obstack))->maybe_empty_object = 1), 0) : 0), ((&sra_obstack))->temp = ((((&sra_obstack))->object_base) - (char *) 0), ((&sra_obstack))->next_free = (((((((&sra_obstack))->next_free) - (char *) 0)+((&sra_obstack))->alignment_mask) & ~ (((&sra_obstack))->alignment_mask)) + (char *) 0), ((((&sra_obstack))->next_free - (char *) ((&sra_obstack))->chunk > ((&sra_obstack))->chunk_limit - (char *) ((&sra_obstack))->chunk) ? (((&sra_obstack))->next_free = ((&sra_obstack))->chunk_limit) : 0), ((&sra_obstack))->object_base = ((&sra_obstack))->next_free, ((((&sra_obstack))->temp) + (char *) 0)));
      memset (elt, 0, sizeof (*elt));
      elt->parent = parent;
      elt->element = child;
      elt->type = type;
      elt->is_scalar = is_sra_scalar_type (type);
      if (parent)
 {
   elt->sibling = parent->children;
   parent->children = elt;
 }
      if (((enum tree_code) (child)->common.code) == PARM_DECL)
 {
   elt->n_copies = 1;
   bitmap_set_bit (needs_copy_in, var_ann (child)->uid);
 }
    }
  return elt;
}
static unsigned char
is_valid_const_index (tree expr)
{
  tree dom, t, index = ((expr)->exp.operands[1]);
  if (((enum tree_code) (index)->common.code) != INTEGER_CST)
    return 0;
  dom = ((((((expr)->exp.operands[0]))->common.type))->type.value1s);
  if (dom == ((void *)0))
    return 0;
  t = ((dom)->type.minval);
  if (!t || ((enum tree_code) (t)->common.code) != INTEGER_CST)
    return 0;
  if (tree_int_cst_lt (index, t))
    return 0;
  t = ((dom)->type.maxval);
  if (!t || ((enum tree_code) (t)->common.code) != INTEGER_CST)
    return 0;
  if (tree_int_cst_lt (t, index))
    return 0;
  return 1;
}
static struct sra_elt *
maybe_lookup_element_for_expr (tree expr)
{
  struct sra_elt *elt;
  tree child;
  switch (((enum tree_code) (expr)->common.code))
    {
    case VAR_DECL:
    case PARM_DECL:
    case RESULT_DECL:
      if (is_sra_candidate_decl (expr))
 return lookup_element (((void *)0), expr, ((expr)->common.type), INSERT);
      return ((void *)0);
    case ARRAY_REF:
      if (is_valid_const_index (expr))
        child = ((expr)->exp.operands[1]);
      else
 return ((void *)0);
      break;
    case COMPONENT_REF:
      if (((enum tree_code) (((((expr)->exp.operands[0]))->common.type))->common.code) != RECORD_TYPE)
 return ((void *)0);
      child = ((expr)->exp.operands[1]);
      break;
    case REALPART_EXPR:
      child = global_trees[TI_INTEGER_ZERO];
      break;
    case IMAGPART_EXPR:
      child = global_trees[TI_INTEGER_ONE];
      break;
    default:
      return ((void *)0);
    }
  elt = maybe_lookup_element_for_expr (((expr)->exp.operands[0]));
  if (elt)
    return lookup_element (elt, child, ((expr)->common.type), INSERT);
  return ((void *)0);
}
struct sra_walk_fns
{
  void (*use) (struct sra_elt *elt, tree *expr_p,
        block_stmt_iterator *bsi, unsigned char is_output);
  void (*copy) (struct sra_elt *lhs_elt, struct sra_elt *rhs_elt,
  block_stmt_iterator *bsi);
  unsigned char (*init) (struct sra_elt *elt, tree value1, block_stmt_iterator *bsi);
  void (*ldst) (struct sra_elt *elt, tree other,
  block_stmt_iterator *bsi, unsigned char is_output);
  unsigned char initial_scan;
};
static void
sra_walk_expr (tree *expr_p, block_stmt_iterator *bsi, unsigned char is_output,
        const struct sra_walk_fns *fns)
{
  tree expr = *expr_p;
  tree inner = expr;
  unsigned char disable_scalarization = 0;
  while (1)
    switch (((enum tree_code) (inner)->common.code))
      {
      case VAR_DECL:
      case PARM_DECL:
      case RESULT_DECL:
 if (is_sra_candidate_decl (inner))
   {
     struct sra_elt *elt = maybe_lookup_element_for_expr (expr);
     if (disable_scalarization)
       elt->cannot_scalarize = 1;
     else
       fns->use (elt, expr_p, bsi, is_output);
   }
 return;
      case ARRAY_REF:
 if (!is_valid_const_index (inner))
   {
     disable_scalarization = 1;
     goto use_all;
   }
 if (((inner)->exp.operands[2]) || ((inner)->exp.operands[3]))
   goto use_all;
 inner = ((inner)->exp.operands[0]);
 break;
      case COMPONENT_REF:
 if (((enum tree_code) (((((inner)->exp.operands[0]))->common.type))->common.code) != RECORD_TYPE)
   goto use_all;
 if (((inner)->exp.operands[2]))
   goto use_all;
 inner = ((inner)->exp.operands[0]);
 break;
      case REALPART_EXPR:
      case IMAGPART_EXPR:
 inner = ((inner)->exp.operands[0]);
 break;
      case BIT_FIELD_REF:
 goto use_all;
      case ARRAY_RANGE_REF:
 goto use_all;
      case VIEW_CONVERT_EXPR:
      case NOP_EXPR:
 goto use_all;
      use_all:
        expr_p = &((inner)->exp.operands[0]);
 inner = expr = *expr_p;
 break;
      default:
 return;
      }
}
static void
sra_walk_tree_list (tree list, block_stmt_iterator *bsi, unsigned char is_output,
      const struct sra_walk_fns *fns)
{
  tree op;
  for (op = list; op ; op = ((op)->common.chain))
    sra_walk_expr (&((op)->list.value1), bsi, is_output, fns);
}
static void
sra_walk_call_expr (tree expr, block_stmt_iterator *bsi,
      const struct sra_walk_fns *fns)
{
  sra_walk_tree_list (((expr)->exp.operands[1]), bsi, 0, fns);
}
static void
sra_walk_asm_expr (tree expr, block_stmt_iterator *bsi,
     const struct sra_walk_fns *fns)
{
  sra_walk_tree_list ((((expr))->exp.operands[2]), bsi, 0, fns);
  sra_walk_tree_list ((((expr))->exp.operands[1]), bsi, 1, fns);
}
static void
sra_walk_modify_expr (tree expr, block_stmt_iterator *bsi,
        const struct sra_walk_fns *fns)
{
  struct sra_elt *lhs_elt, *rhs_elt;
  tree lhs, rhs;
  lhs = ((expr)->exp.operands[0]);
  rhs = ((expr)->exp.operands[1]);
  lhs_elt = maybe_lookup_element_for_expr (lhs);
  rhs_elt = maybe_lookup_element_for_expr (rhs);
  if (lhs_elt && rhs_elt)
    {
      fns->copy (lhs_elt, rhs_elt, bsi);
      return;
    }
  if (lhs_elt)
    {
      if ((((enum tree_code) (rhs)->common.code) == COMPLEX_EXPR
    || ((enum tree_code) (rhs)->common.code) == COMPLEX_CST
    || ((enum tree_code) (rhs)->common.code) == CONSTRUCTOR)
   && fns->init (lhs_elt, rhs, bsi))
 ;
      else if (((enum tree_code) (rhs)->common.code) == VAR_DECL
        && ((rhs)->common.static_flag)
        && ((rhs)->common.readonly_flag)
        && targetm.binds_local_p (rhs)
        && ((rhs)->decl.initial)
        && fns->init (lhs_elt, ((rhs)->decl.initial), bsi))
 ;
      else if (!lhs_elt->is_scalar && is_gimple_addr_expr_arg (rhs))
 fns->ldst (lhs_elt, rhs, bsi, 1);
      else
 fns->use (lhs_elt, &((expr)->exp.operands[0]), bsi, 1);
    }
  else
    {
      sra_walk_expr (&((expr)->exp.operands[0]), bsi, 1, fns);
    }
  if (rhs_elt)
    {
      if (!rhs_elt->is_scalar)
 fns->ldst (rhs_elt, lhs, bsi, 0);
      else
 fns->use (rhs_elt, &((expr)->exp.operands[1]), bsi, 0);
    }
  else if (((enum tree_code) (rhs)->common.code) == CALL_EXPR)
    sra_walk_call_expr (rhs, bsi, fns);
  else
    sra_walk_expr (&((expr)->exp.operands[1]), bsi, 0, fns);
}
static void
sra_walk_function (const struct sra_walk_fns *fns)
{
  basic_block bb;
  block_stmt_iterator si, ni;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    for (si = bsi_start (bb); !bsi_end_p (si); si = ni)
      {
 tree stmt, t;
 stmt_ann_t ann;
 stmt = bsi_stmt (si);
 ann = stmt_ann (stmt);
 ni = si;
 bsi_next (&ni);
 if (((get_v_may_def_ops (ann)) ? (get_v_may_def_ops (ann))->num_v_may_defs : 0) == 0
     && ((get_vuse_ops (ann)) ? (get_vuse_ops (ann))->num_vuses : 0) == 0
     && ((get_v_must_def_ops (ann)) ? (get_v_must_def_ops (ann))->num_v_must_defs : 0) == 0)
   continue;
 switch (((enum tree_code) (stmt)->common.code))
   {
   case RETURN_EXPR:
     t = ((stmt)->exp.operands[0]);
     if (((enum tree_code) (t)->common.code) == MODIFY_EXPR)
       sra_walk_expr (&((t)->exp.operands[1]), &si, 0, fns);
     else
       sra_walk_expr (&((stmt)->exp.operands[0]), &si, 0, fns);
     break;
   case MODIFY_EXPR:
     sra_walk_modify_expr (stmt, &si, fns);
     break;
   case CALL_EXPR:
     sra_walk_call_expr (stmt, &si, fns);
     break;
   case ASM_EXPR:
     sra_walk_asm_expr (stmt, &si, fns);
     break;
   default:
     break;
   }
      }
}
static unsigned char
find_candidates_for_sra (void)
{
  size_t i;
  unsigned char any_set = 0;
  for (i = 0; i < ((referenced_vars)->elements_used); i++)
    {
      tree var = ((referenced_vars)->data.tree1[i]);
      if (decl_can_be_decomposed_p (var))
        {
          bitmap_set_bit (sra_candidates, var_ann (var)->uid);
          any_set = 1;
        }
    }
  return any_set;
}
static void
scan_use (struct sra_elt *elt, tree *expr_p ,
   block_stmt_iterator *bsi ,
   unsigned char is_output )
{
  elt->n_uses += 1;
}
static void
scan_copy (struct sra_elt *lhs_elt, struct sra_elt *rhs_elt,
    block_stmt_iterator *bsi )
{
  lhs_elt->n_copies += 1;
  rhs_elt->n_copies += 1;
}
static unsigned char
scan_init (struct sra_elt *lhs_elt, tree rhs ,
    block_stmt_iterator *bsi )
{
  lhs_elt->n_copies += 1;
  return 1;
}
static void
scan_ldst (struct sra_elt *elt, tree other ,
    block_stmt_iterator *bsi ,
    unsigned char is_output )
{
  elt->n_copies += 1;
}
static void
scan_dump (struct sra_elt *elt)
{
  struct sra_elt *c;
  dump_sra_elt_name (dump_file, elt);
  fprintf (dump_file, ": n_uses=%u n_copies=%u\n", elt->n_uses, elt->n_copies);
  for (c = elt->children; c ; c = c->sibling)
    scan_dump (c);
}
static void
scan_function (void)
{
  static const struct sra_walk_fns fns = {
    scan_use, scan_copy, scan_init, scan_ldst, 1
  };
  sra_walk_function (&fns);
  if (dump_file && (dump_flags & (1 << 3)))
    {
      size_t i;
      fputs_unlocked ("\nScan results:\n", dump_file);
      do { bitmap_element *ptr_ = (sra_candidates)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { tree var = ((referenced_vars)->data.tree1[i]); struct sra_elt *elt = lookup_element (((void *)0), var, ((void *)0), NO_INSERT); if (elt) scan_dump (elt); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
      fputc_unlocked ('\n', dump_file);
    }
}
static void
build_element_name_1 (struct sra_elt *elt)
{
  tree t;
  char buffer[32];
  if (elt->parent)
    {
      build_element_name_1 (elt->parent);
      ( (((&sra_obstack)->next_free + 1 > (&sra_obstack)->chunk_limit) ? (_obstack_newchunk ((&sra_obstack), 1), 0) : 0), (*((&sra_obstack)->next_free)++ = ('$')));
      if (((enum tree_code) (elt->parent->type)->common.code) == COMPLEX_TYPE)
 {
   if (elt->element == global_trees[TI_INTEGER_ZERO])
     ( (&sra_obstack)->temp = (4), (((&sra_obstack)->next_free + (&sra_obstack)->temp > (&sra_obstack)->chunk_limit) ? (_obstack_newchunk ((&sra_obstack), (&sra_obstack)->temp), 0) : 0), memcpy (((&sra_obstack)->next_free), (("real")), ((&sra_obstack)->temp)), (&sra_obstack)->next_free += (&sra_obstack)->temp);
   else
     ( (&sra_obstack)->temp = (4), (((&sra_obstack)->next_free + (&sra_obstack)->temp > (&sra_obstack)->chunk_limit) ? (_obstack_newchunk ((&sra_obstack), (&sra_obstack)->temp), 0) : 0), memcpy (((&sra_obstack)->next_free), (("imag")), ((&sra_obstack)->temp)), (&sra_obstack)->next_free += (&sra_obstack)->temp);
   return;
 }
    }
  t = elt->element;
  if (((enum tree_code) (t)->common.code) == INTEGER_CST)
    {
      sprintf (buffer, "%ld", (((t)->int_cst.int_cst).low));
      ( (&sra_obstack)->temp = (strlen (buffer)), (((&sra_obstack)->next_free + (&sra_obstack)->temp > (&sra_obstack)->chunk_limit) ? (_obstack_newchunk ((&sra_obstack), (&sra_obstack)->temp), 0) : 0), memcpy (((&sra_obstack)->next_free), ((buffer)), ((&sra_obstack)->temp)), (&sra_obstack)->next_free += (&sra_obstack)->temp);
    }
  else
    {
      tree name = ((t)->decl.name);
      if (name)
 ( (&sra_obstack)->temp = (((name)->identifier.id.len)), (((&sra_obstack)->next_free + (&sra_obstack)->temp > (&sra_obstack)->chunk_limit) ? (_obstack_newchunk ((&sra_obstack), (&sra_obstack)->temp), 0) : 0), memcpy (((&sra_obstack)->next_free), ((((const char *) (name)->identifier.id.str))), ((&sra_obstack)->temp)), (&sra_obstack)->next_free += (&sra_obstack)->temp)
                                 ;
      else
 {
   sprintf (buffer, "D%u", ((t)->decl.uid));
   ( (&sra_obstack)->temp = (strlen (buffer)), (((&sra_obstack)->next_free + (&sra_obstack)->temp > (&sra_obstack)->chunk_limit) ? (_obstack_newchunk ((&sra_obstack), (&sra_obstack)->temp), 0) : 0), memcpy (((&sra_obstack)->next_free), ((buffer)), ((&sra_obstack)->temp)), (&sra_obstack)->next_free += (&sra_obstack)->temp);
 }
    }
}
static char *
build_element_name (struct sra_elt *elt)
{
  build_element_name_1 (elt);
  ( (((&sra_obstack)->next_free + 1 > (&sra_obstack)->chunk_limit) ? (_obstack_newchunk ((&sra_obstack), 1), 0) : 0), (*((&sra_obstack)->next_free)++ = ('\0')));
  return ( ((&sra_obstack)->next_free == (&sra_obstack)->object_base ? (((&sra_obstack)->maybe_empty_object = 1), 0) : 0), (&sra_obstack)->temp = (((&sra_obstack)->object_base) - (char *) 0), (&sra_obstack)->next_free = ((((((&sra_obstack)->next_free) - (char *) 0)+(&sra_obstack)->alignment_mask) & ~ ((&sra_obstack)->alignment_mask)) + (char *) 0), (((&sra_obstack)->next_free - (char *) (&sra_obstack)->chunk > (&sra_obstack)->chunk_limit - (char *) (&sra_obstack)->chunk) ? ((&sra_obstack)->next_free = (&sra_obstack)->chunk_limit) : 0), (&sra_obstack)->object_base = (&sra_obstack)->next_free, (((&sra_obstack)->temp) + (char *) 0));
}
static void
instantiate_element (struct sra_elt *elt)
{
  struct sra_elt *base_elt;
  tree var, base;
  for (base_elt = elt; base_elt->parent; base_elt = base_elt->parent)
    continue;
  base = base_elt->element;
  elt->replacement = var = make_rename_temp (elt->type, "SR");
  ((var)->decl.locus) = ((base)->decl.locus);
  ((var)->common.nowarning_flag) = ((base)->common.nowarning_flag);
  ((var)->decl.artificial_flag) = ((base)->decl.artificial_flag);
  if (((base)->decl.name) && !((base)->decl.ignored_flag))
    {
      char *pretty_name = build_element_name (elt);
      ((var)->decl.name) = get_identifier (pretty_name);
      ( (&sra_obstack)->temp = (char *) (pretty_name) - (char *) (&sra_obstack)->chunk, (((&sra_obstack)->temp > 0 && (&sra_obstack)->temp < (&sra_obstack)->chunk_limit - (char *) (&sra_obstack)->chunk) ? (int) ((&sra_obstack)->next_free = (&sra_obstack)->object_base = (&sra_obstack)->temp + (char *) (&sra_obstack)->chunk) : (((obstack_free) ((&sra_obstack), (&sra_obstack)->temp + (char *) (&sra_obstack)->chunk), 0), 0)));
    }
  if (dump_file)
    {
      fputs_unlocked ("  ", dump_file);
      dump_sra_elt_name (dump_file, elt);
      fputs_unlocked (" -> ", dump_file);
      print_generic_expr (dump_file, var, dump_flags);
      fputc_unlocked ('\n', dump_file);
    }
}
static void
decide_instantiation_1 (struct sra_elt *elt, unsigned int parent_uses,
   unsigned int parent_copies)
{
  if (dump_file && !elt->parent)
    {
      fputs_unlocked ("Initial instantiation for ", dump_file);
      dump_sra_elt_name (dump_file, elt);
      fputc_unlocked ('\n', dump_file);
    }
  if (elt->cannot_scalarize)
    return;
  if (elt->is_scalar)
    {
      if (elt->n_uses + elt->n_copies + parent_copies > parent_uses)
 instantiate_element (elt);
    }
  else
    {
      struct sra_elt *c;
      unsigned int this_uses = elt->n_uses + parent_uses;
      unsigned int this_copies = elt->n_copies + parent_copies;
      for (c = elt->children; c ; c = c->sibling)
 decide_instantiation_1 (c, this_uses, this_copies);
    }
}
static unsigned int
sum_instantiated_sizes (struct sra_elt *elt, unsigned long *sizep)
{
  if (elt->replacement)
    {
      *sizep += (((((elt->type)->type.size_unit))->int_cst.int_cst).low);
      return 1;
    }
  else
    {
      struct sra_elt *c;
      unsigned int count = 0;
      for (c = elt->children; c ; c = c->sibling)
 count += sum_instantiated_sizes (c, sizep);
      return count;
    }
}
static void instantiate_missing_elements (struct sra_elt *elt);
static void
instantiate_missing_elements_1 (struct sra_elt *elt, tree child, tree type)
{
  struct sra_elt *sub = lookup_element (elt, child, type, INSERT);
  if (sub->is_scalar)
    {
      if (sub->replacement == ((void *)0))
 instantiate_element (sub);
    }
  else
    instantiate_missing_elements (sub);
}
static void
instantiate_missing_elements (struct sra_elt *elt)
{
  tree type = elt->type;
  switch (((enum tree_code) (type)->common.code))
    {
    case RECORD_TYPE:
      {
 tree f;
 for (f = ((type)->type.value1s); f ; f = ((f)->common.chain))
   if (((enum tree_code) (f)->common.code) == FIELD_DECL)
     instantiate_missing_elements_1 (elt, f, ((f)->common.type));
 break;
      }
    case ARRAY_TYPE:
      {
 tree i, max, subtype;
 i = ((((type)->type.value1s))->type.minval);
 max = ((((type)->type.value1s))->type.maxval);
 subtype = ((type)->common.type);
 while (1)
   {
     instantiate_missing_elements_1 (elt, i, subtype);
     if (tree_int_cst_equal (i, max))
       break;
     i = int_const_binop (PLUS_EXPR, i, global_trees[TI_INTEGER_ONE], 1);
   }
 break;
      }
    case COMPLEX_TYPE:
      type = ((type)->common.type);
      instantiate_missing_elements_1 (elt, global_trees[TI_INTEGER_ZERO], type);
      instantiate_missing_elements_1 (elt, global_trees[TI_INTEGER_ONE], type);
      break;
    default:
      fancy_abort ("gcc.c", 148468, "?");
    }
}
static unsigned char
decide_block_copy (struct sra_elt *elt)
{
  struct sra_elt *c;
  unsigned char any_inst;
  if (elt->cannot_scalarize)
    {
      elt->use_block_copy = 1;
      if (dump_file)
 {
   fputs_unlocked ("Scalarization disabled for ", dump_file);
   dump_sra_elt_name (dump_file, elt);
   fputc_unlocked ('\n', dump_file);
 }
      return 0;
    }
  if (elt->n_uses == 0 && elt->n_copies == 0)
    ;
  else if (!elt->is_scalar)
    {
      tree size_tree = ((elt->type)->type.size_unit);
      unsigned char use_block_copy = 1;
      if (host_integerp (size_tree, 1))
 {
   unsigned long full_size, inst_size = 0;
   unsigned int inst_count;
   full_size = tree_low_cst (size_tree, 1);
   if (full_size <= (unsigned) (optimize_size ? 3 : ix86_cost->move_ratio) * (0 ? 8 : 4)
       && elt->n_copies > elt->n_uses)
     use_block_copy = 0;
   else
     {
       inst_count = sum_instantiated_sizes (elt, &inst_size);
       if (inst_size * 4 >= full_size * 3)
  use_block_copy = 0;
     }
   if (!use_block_copy
       && (!can_completely_scalarize_p (elt)
    || !type_can_instantiate_all_elements (elt->type)))
     use_block_copy = 1;
 }
      elt->use_block_copy = use_block_copy;
      if (dump_file)
 {
   fprintf (dump_file, "Using %s for ",
     use_block_copy ? "block-copy" : "element-copy");
   dump_sra_elt_name (dump_file, elt);
   fputc_unlocked ('\n', dump_file);
 }
      if (!use_block_copy)
 {
   instantiate_missing_elements (elt);
   return 1;
 }
    }
  any_inst = elt->replacement != ((void *)0);
  for (c = elt->children; c ; c = c->sibling)
    any_inst |= decide_block_copy (c);
  return any_inst;
}
static void
decide_instantiations (void)
{
  unsigned int i;
  unsigned char cleared_any;
  struct bitmap_head_def done_head;
  bitmap_initialize (&done_head, 1);
  cleared_any = 0;
  do { bitmap_element *ptr_ = (sra_candidates)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { tree var = ((referenced_vars)->data.tree1[i]); struct sra_elt *elt = lookup_element (((void *)0), var, ((void *)0), NO_INSERT); if (elt) { decide_instantiation_1 (elt, 0, 0); if (!decide_block_copy (elt)) elt = ((void *)0); } if (!elt) { bitmap_set_bit (&done_head, i); cleared_any = 1; } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
  if (cleared_any)
    {
      bitmap_operation (sra_candidates, sra_candidates, &done_head,
   BITMAP_AND_COMPL);
      bitmap_operation (needs_copy_in, needs_copy_in, &done_head,
   BITMAP_AND_COMPL);
    }
  bitmap_clear (&done_head);
  if (dump_file)
    fputc_unlocked ('\n', dump_file);
}
static void
mark_all_v_defs (tree stmt)
{
  v_may_def_optype v_may_defs;
  v_must_def_optype v_must_defs;
  size_t i, n;
  get_stmt_operands (stmt);
  v_may_defs = get_v_may_def_ops (stmt_ann (stmt));
  n = ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0);
  for (i = 0; i < n; i++)
    {
      tree sym = (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i)))));
      if (((enum tree_code) (sym)->common.code) == SSA_NAME)
 sym = (sym)->ssa_name.var;
      bitmap_set_bit (vars_to_rename, var_ann (sym)->uid);
    }
  v_must_defs = get_v_must_def_ops (stmt_ann (stmt));
  n = ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0);
  for (i = 0; i < n; i++)
    {
      tree sym = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i)))));
      if (((enum tree_code) (sym)->common.code) == SSA_NAME)
 sym = (sym)->ssa_name.var;
      bitmap_set_bit (vars_to_rename, var_ann (sym)->uid);
    }
}
static tree
generate_one_element_ref (struct sra_elt *elt, tree base)
{
  switch (((enum tree_code) (((base)->common.type))->common.code))
    {
    case RECORD_TYPE:
      return build (COMPONENT_REF, elt->type, base, elt->element, ((void *)0));
    case ARRAY_TYPE:
      return build (ARRAY_REF, elt->type, base, elt->element, ((void *)0), ((void *)0));
    case COMPLEX_TYPE:
      if (elt->element == global_trees[TI_INTEGER_ZERO])
 return build (REALPART_EXPR, elt->type, base);
      else
 return build (IMAGPART_EXPR, elt->type, base);
    default:
      fancy_abort ("gcc.c", 148666, "?");
    }
}
static tree
generate_element_ref (struct sra_elt *elt)
{
  if (elt->parent)
    return generate_one_element_ref (elt, generate_element_ref (elt->parent));
  else
    return elt->element;
}
static void
generate_copy_inout (struct sra_elt *elt, unsigned char copy_out, tree expr,
       tree *list_p)
{
  struct sra_elt *c;
  tree t;
  if (elt->replacement)
    {
      if (copy_out)
 t = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], elt->replacement, expr);
      else
 t = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], expr, elt->replacement);
      append_to_statement_list (t, list_p);
    }
  else
    {
      for (c = elt->children; c ; c = c->sibling)
 {
   t = generate_one_element_ref (c, unshare_expr (expr));
   generate_copy_inout (c, copy_out, t, list_p);
 }
    }
}
static void
generate_element_copy (struct sra_elt *dst, struct sra_elt *src, tree *list_p)
{
  struct sra_elt *dc, *sc;
  for (dc = dst->children; dc ; dc = dc->sibling)
    {
      sc = lookup_element (src, dc->element, ((void *)0), NO_INSERT);
      if (sc == ((void *)0))
 fancy_abort ("gcc.c", 148724, "?");
      generate_element_copy (dc, sc, list_p);
    }
  if (dst->replacement)
    {
      tree t;
      if (src->replacement == ((void *)0))
 fancy_abort ("gcc.c", 148733, "?");
      t = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], dst->replacement,
   src->replacement);
      append_to_statement_list (t, list_p);
    }
}
static void
generate_element_zero (struct sra_elt *elt, tree *list_p)
{
  struct sra_elt *c;
  for (c = elt->children; c ; c = c->sibling)
    generate_element_zero (c, list_p);
  if (elt->visited)
    elt->visited = 0;
  else if (elt->replacement)
    {
      tree t;
      if (elt->is_scalar)
 t = fold_convert (elt->type, global_trees[TI_INTEGER_ZERO]);
      else
 fancy_abort ("gcc.c", 148764, "?");
      t = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], elt->replacement, t);
      append_to_statement_list (t, list_p);
    }
}
static unsigned char
generate_element_init (struct sra_elt *elt, tree init, tree *list_p)
{
  unsigned char result = 1;
  enum tree_code init_code;
  struct sra_elt *sub;
  tree t;
  while (tree_ssa_useless_type_conversion (init)) init = ((init)->exp.operands[0]);
  init_code = ((enum tree_code) (init)->common.code);
  if (elt->is_scalar)
    {
      if (elt->replacement)
 {
   t = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], elt->replacement, init);
   append_to_statement_list (t, list_p);
   elt->visited = 1;
 }
      return result;
    }
  switch (init_code)
    {
    case COMPLEX_CST:
    case COMPLEX_EXPR:
      for (sub = elt->children; sub ; sub = sub->sibling)
 {
   if (sub->element == global_trees[TI_INTEGER_ZERO])
     t = (init_code == COMPLEX_EXPR
   ? ((init)->exp.operands[0]) : ((init)->complex.real));
   else
     t = (init_code == COMPLEX_EXPR
   ? ((init)->exp.operands[1]) : ((init)->complex.imag));
   result &= generate_element_init (sub, t, list_p);
 }
      break;
    case CONSTRUCTOR:
      for (t = ((init)->exp.operands[0]); t ; t = ((t)->common.chain))
 {
   sub = lookup_element (elt, ((t)->list.purpose), ((void *)0), NO_INSERT);
   if (sub == ((void *)0))
     continue;
   result &= generate_element_init (sub, ((t)->list.value1), list_p);
 }
      break;
    default:
      result = 0;
    }
  return result;
}
void
insert_edge_copies (tree stmt, basic_block bb)
{
  edge e;
  unsigned char first_copy;
  first_copy = 1;
  for (e = bb->succ; e; e = e->succ_next)
    {
      if (!(e->flags & 2))
 {
   if (first_copy)
     {
       bsi_insert_on_edge (e, stmt);
       first_copy = 0;
     }
   else
     bsi_insert_on_edge (e, lhd_unsave_expr_now (stmt));
 }
    }
}
static void
sra_insert_before (block_stmt_iterator *bsi, tree list)
{
  tree stmt = bsi_stmt (*bsi);
  if ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (stmt)->common.code))])) != 0) ? (stmt)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    annotate_all_with_locus (&list, ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (stmt)->common.code))])) != 0) ? (stmt)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) ? *(stmt)->exp.locus : unknown_location));
  bsi_insert_before (bsi, list, BSI_SAME_STMT);
}
static void
sra_insert_after (block_stmt_iterator *bsi, tree list)
{
  tree stmt = bsi_stmt (*bsi);
  if ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (stmt)->common.code))])) != 0) ? (stmt)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    annotate_all_with_locus (&list, ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (stmt)->common.code))])) != 0) ? (stmt)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) ? *(stmt)->exp.locus : unknown_location));
  if (stmt_ends_bb_p (stmt))
    insert_edge_copies (list, bsi->bb);
  else
    bsi_insert_after (bsi, list, BSI_SAME_STMT);
}
static void
sra_replace (block_stmt_iterator *bsi, tree list)
{
  sra_insert_before (bsi, list);
  bsi_remove (bsi);
  if (bsi_end_p (*bsi))
    *bsi = bsi_last (bsi->bb);
  else
    bsi_prev (bsi);
}
static void
scalarize_use (struct sra_elt *elt, tree *expr_p, block_stmt_iterator *bsi,
        unsigned char is_output)
{
  tree list = ((void *)0), stmt = bsi_stmt (*bsi);
  if (elt->replacement)
    {
      if (is_output)
 mark_all_v_defs (stmt);
      *expr_p = elt->replacement;
      modify_stmt (stmt);
    }
  else
    {
      generate_copy_inout (elt, is_output, generate_element_ref (elt), &list);
      if (list == ((void *)0))
 return;
      if (is_output)
 {
   mark_all_v_defs (expr_first (list));
   sra_insert_after (bsi, list);
 }
      else
 sra_insert_before (bsi, list);
    }
}
static void
scalarize_copy (struct sra_elt *lhs_elt, struct sra_elt *rhs_elt,
  block_stmt_iterator *bsi)
{
  tree list, stmt;
  if (lhs_elt->replacement && rhs_elt->replacement)
    {
      stmt = bsi_stmt (*bsi);
      ((stmt)->exp.operands[0]) = lhs_elt->replacement;
      ((stmt)->exp.operands[1]) = rhs_elt->replacement;
      modify_stmt (stmt);
    }
  else if (lhs_elt->use_block_copy || rhs_elt->use_block_copy)
    {
      list = ((void *)0);
      generate_copy_inout (rhs_elt, 0,
      generate_element_ref (rhs_elt), &list);
      if (list)
 {
   mark_all_v_defs (expr_first (list));
   sra_insert_before (bsi, list);
 }
      list = ((void *)0);
      generate_copy_inout (lhs_elt, 1,
      generate_element_ref (lhs_elt), &list);
      if (list)
 sra_insert_after (bsi, list);
    }
  else
    {
      stmt = bsi_stmt (*bsi);
      mark_all_v_defs (stmt);
      list = ((void *)0);
      generate_element_copy (lhs_elt, rhs_elt, &list);
      if (list == ((void *)0))
 fancy_abort ("gcc.c", 149013, "?");
      sra_replace (bsi, list);
    }
}
static unsigned char
scalarize_init (struct sra_elt *lhs_elt, tree rhs, block_stmt_iterator *bsi)
{
  unsigned char result = 1;
  tree list = ((void *)0);
  if (rhs)
    result = generate_element_init (lhs_elt, rhs, &list);
  generate_element_zero (lhs_elt, &list);
  if (!result || list == ((void *)0))
    return result;
  if (lhs_elt->use_block_copy)
    {
      mark_all_v_defs (expr_first (list));
      sra_insert_after (bsi, list);
    }
  else
    {
      mark_all_v_defs (bsi_stmt (*bsi));
      sra_replace (bsi, list);
    }
  return 1;
}
static tree
mark_notrap (tree *tp, int *walk_subtrees, void *data )
{
  tree t = *tp;
  if (((enum tree_code) (t)->common.code) == INDIRECT_REF)
    {
      ((t)->common.nothrow_flag) = 1;
      *walk_subtrees = 0;
    }
  else if ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd') || (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
    *walk_subtrees = 0;
  return ((void *)0);
}
static void
scalarize_ldst (struct sra_elt *elt, tree other,
  block_stmt_iterator *bsi, unsigned char is_output)
{
  if (elt->replacement)
    fancy_abort ("gcc.c", 149090, "?");
  if (elt->use_block_copy)
    {
      scalarize_use (elt, ((void *)0), bsi, is_output);
    }
  else
    {
      tree list = ((void *)0), stmt = bsi_stmt (*bsi);
      mark_all_v_defs (stmt);
      generate_copy_inout (elt, is_output, other, &list);
      if (list == ((void *)0))
 fancy_abort ("gcc.c", 149109, "?");
      if (stmt_ends_bb_p (stmt))
 {
   tree_stmt_iterator tsi;
   tree first;
   tsi = tsi_start (list);
   first = tsi_stmt (tsi);
   tsi_delink (&tsi);
   bsi_replace (bsi, first, 1);
   if (!tsi_end_p (tsi))
     {
       do
  {
    walk_tree (tsi_stmt_ptr (tsi), mark_notrap, ((void *)0), ((void *)0));
    tsi_next (&tsi);
  }
       while (!tsi_end_p (tsi));
       insert_edge_copies (list, bsi->bb);
     }
 }
      else
 sra_replace (bsi, list);
    }
}
static void
scalarize_parms (void)
{
  tree list = ((void *)0);
  size_t i;
  do { bitmap_element *ptr_ = (needs_copy_in)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { tree var = ((referenced_vars)->data.tree1[i]); struct sra_elt *elt = lookup_element (((void *)0), var, ((void *)0), NO_INSERT); generate_copy_inout (elt, 1, var, &list); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
  if (list)
    insert_edge_copies (list, ENTRY_BLOCK_PTR);
}
static void
scalarize_function (void)
{
  static const struct sra_walk_fns fns = {
    scalarize_use, scalarize_copy, scalarize_init, scalarize_ldst, 0
  };
  sra_walk_function (&fns);
  scalarize_parms ();
  bsi_commit_edge_inserts (((void *)0));
}
static void
dump_sra_elt_name (FILE *f, struct sra_elt *elt)
{
  if (elt->parent && ((enum tree_code) (elt->parent->type)->common.code) == COMPLEX_TYPE)
    {
      fputs_unlocked (elt->element == global_trees[TI_INTEGER_ZERO] ? "__real__ " : "__imag__ ", f);
      dump_sra_elt_name (f, elt->parent);
    }
  else
    {
      if (elt->parent)
        dump_sra_elt_name (f, elt->parent);
      if ((tree_code_type[(int) (((enum tree_code) (elt->element)->common.code))] == 'd'))
 {
   if (((enum tree_code) (elt->element)->common.code) == FIELD_DECL)
     fputc_unlocked ('.', f);
   print_generic_expr (f, elt->element, dump_flags);
 }
      else
 fprintf (f, "[%ld]",
   (((elt->element)->int_cst.int_cst).low));
    }
}
void
debug_sra_elt_name (struct sra_elt *elt)
{
  dump_sra_elt_name (stderr, elt);
  fputc_unlocked ('\n', stderr);
}
static void
tree_sra (void)
{
  _obstack_begin ((&sra_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
  sra_candidates = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  needs_copy_in = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  sra_type_decomp_cache = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  sra_type_inst_cache = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  sra_map = htab_create (101, sra_elt_hash, sra_elt_eq, ((void *)0));
  if (find_candidates_for_sra ())
    {
      scan_function ();
      decide_instantiations ();
      scalarize_function ();
    }
  htab_delete (sra_map);
  sra_map = ((void *)0);
  do { if (sra_candidates) { bitmap_clear (sra_candidates); free (sra_candidates); (sra_candidates) = 0; } } while (0);
  do { if (needs_copy_in) { bitmap_clear (needs_copy_in); free (needs_copy_in); (needs_copy_in) = 0; } } while (0);
  do { if (sra_type_decomp_cache) { bitmap_clear (sra_type_decomp_cache); free (sra_type_decomp_cache); (sra_type_decomp_cache) = 0; } } while (0);
  do { if (sra_type_inst_cache) { bitmap_clear (sra_type_inst_cache); free (sra_type_inst_cache); (sra_type_inst_cache) = 0; } } while (0);
  ( (&sra_obstack)->temp = (char *) (((void *)0)) - (char *) (&sra_obstack)->chunk, (((&sra_obstack)->temp > 0 && (&sra_obstack)->temp < (&sra_obstack)->chunk_limit - (char *) (&sra_obstack)->chunk) ? (int) ((&sra_obstack)->next_free = (&sra_obstack)->object_base = (&sra_obstack)->temp + (char *) (&sra_obstack)->chunk) : (((obstack_free) ((&sra_obstack), (&sra_obstack)->temp + (char *) (&sra_obstack)->chunk), 0), 0)));
}
static unsigned char
gate_sra (void)
{
  return flag_tree_sra != 0;
}
struct tree_opt_pass pass_sra =
{
  "sra",
  gate_sra,
  tree_sra,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_SRA,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  (1 << 0) | (1 << 1)
    | (1 << 2) | (1 << 3)
};
static tree
gimplify_val_complex (block_stmt_iterator *bsi, tree type, tree exp)
{
  tree t, new_stmt, orig_stmt;
  if (is_gimple_val (exp))
    return exp;
  t = make_rename_temp (type, ((void *)0));
  new_stmt = build (MODIFY_EXPR, type, t, exp);
  orig_stmt = bsi_stmt (*bsi);
  ((new_stmt)->exp.locus = (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (orig_stmt)->common.code))])) != 0) ? (orig_stmt)->exp.locus : (location_t *)((void *)0))));
  ((new_stmt)->exp.block) = ((orig_stmt)->exp.block);
  bsi_insert_before (bsi, new_stmt, BSI_SAME_STMT);
  return t;
}
static tree
extract_component (block_stmt_iterator *bsi, tree t, unsigned char imagpart_p)
{
  tree ret, inner_type;
  inner_type = ((((t)->common.type))->common.type);
  switch (((enum tree_code) (t)->common.code))
    {
    case COMPLEX_CST:
      ret = (imagpart_p ? ((t)->complex.imag) : ((t)->complex.real));
      break;
    case COMPLEX_EXPR:
      ret = ((t)->exp.operands[imagpart_p]);
      break;
    case VAR_DECL:
    case PARM_DECL:
      ret = build1_stat ((imagpart_p ? IMAGPART_EXPR : REALPART_EXPR),inner_type,t )
                    ;
      break;
    default:
      fancy_abort ("gcc.c", 149340, "?");
    }
  return gimplify_val_complex (bsi, inner_type, ret);
}
static tree
do_binop (block_stmt_iterator *bsi, enum tree_code code,
   tree type, tree a, tree b)
{
  tree ret;
  ret = fold (build (code, type, a, b));
  while ((((enum tree_code) (ret)->common.code) == NOP_EXPR || ((enum tree_code) (ret)->common.code) == CONVERT_EXPR || ((enum tree_code) (ret)->common.code) == NON_LVALUE_EXPR) && ((ret)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((ret)->common.type))->type.mode) == ((((((ret)->exp.operands[0]))->common.type))->type.mode))) (ret) = ((ret)->exp.operands[0]);
  return gimplify_val_complex (bsi, type, ret);
}
static tree
do_unop (block_stmt_iterator *bsi, enum tree_code code, tree type, tree a)
{
  tree ret;
  ret = fold (build1_stat (code,type,a ));
  while ((((enum tree_code) (ret)->common.code) == NOP_EXPR || ((enum tree_code) (ret)->common.code) == CONVERT_EXPR || ((enum tree_code) (ret)->common.code) == NON_LVALUE_EXPR) && ((ret)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((ret)->common.type))->type.mode) == ((((((ret)->exp.operands[0]))->common.type))->type.mode))) (ret) = ((ret)->exp.operands[0]);
  return gimplify_val_complex (bsi, type, ret);
}
static void
update_complex_assignment (block_stmt_iterator *bsi, tree r, tree i)
{
  tree stmt = bsi_stmt (*bsi);
  tree type;
  modify_stmt (stmt);
  if (((enum tree_code) (stmt)->common.code) == RETURN_EXPR)
    stmt = ((stmt)->exp.operands[0]);
  type = ((((stmt)->exp.operands[1]))->common.type);
  ((stmt)->exp.operands[1]) = build (COMPLEX_EXPR, type, r, i);
}
static void
expand_complex_addition (block_stmt_iterator *bsi, tree inner_type,
    tree ar, tree ai, tree br, tree bi,
    enum tree_code code)
{
  tree rr, ri;
  rr = do_binop (bsi, code, inner_type, ar, br);
  ri = do_binop (bsi, code, inner_type, ai, bi);
  update_complex_assignment (bsi, rr, ri);
}
static void
expand_complex_multiplication (block_stmt_iterator *bsi, tree inner_type,
          tree ar, tree ai, tree br, tree bi)
{
  tree t1, t2, t3, t4, rr, ri;
  t1 = do_binop (bsi, MULT_EXPR, inner_type, ar, br);
  t2 = do_binop (bsi, MULT_EXPR, inner_type, ai, bi);
  t3 = do_binop (bsi, MULT_EXPR, inner_type, ar, bi);
  if (ar == br && ai == bi)
    t4 = t3;
  else
    t4 = do_binop (bsi, MULT_EXPR, inner_type, ai, br);
  rr = do_binop (bsi, MINUS_EXPR, inner_type, t1, t2);
  ri = do_binop (bsi, PLUS_EXPR, inner_type, t3, t4);
  update_complex_assignment (bsi, rr, ri);
}
static void
expand_complex_div_straight (block_stmt_iterator *bsi, tree inner_type,
        tree ar, tree ai, tree br, tree bi,
        enum tree_code code)
{
  tree rr, ri, div, t1, t2, t3;
  t1 = do_binop (bsi, MULT_EXPR, inner_type, br, br);
  t2 = do_binop (bsi, MULT_EXPR, inner_type, bi, bi);
  div = do_binop (bsi, PLUS_EXPR, inner_type, t1, t2);
  t1 = do_binop (bsi, MULT_EXPR, inner_type, ar, br);
  t2 = do_binop (bsi, MULT_EXPR, inner_type, ai, bi);
  t3 = do_binop (bsi, PLUS_EXPR, inner_type, t1, t2);
  rr = do_binop (bsi, code, inner_type, t3, div);
  t1 = do_binop (bsi, MULT_EXPR, inner_type, ai, br);
  t2 = do_binop (bsi, MULT_EXPR, inner_type, ar, bi);
  t3 = do_binop (bsi, MINUS_EXPR, inner_type, t1, t2);
  ri = do_binop (bsi, code, inner_type, t3, div);
  update_complex_assignment (bsi, rr, ri);
}
static void
expand_complex_div_wide (block_stmt_iterator *bsi, tree inner_type,
    tree ar, tree ai, tree br, tree bi,
    enum tree_code code)
{
  tree rr, ri, ratio, div, t1, t2, min, max, cond;
  t1 = do_unop (bsi, ABS_EXPR, inner_type, br);
  t2 = do_unop (bsi, ABS_EXPR, inner_type, bi);
  cond = fold (build (LT_EXPR, global_trees[TI_BOOLEAN_TYPE], t1, t2));
  while ((((enum tree_code) (cond)->common.code) == NOP_EXPR || ((enum tree_code) (cond)->common.code) == CONVERT_EXPR || ((enum tree_code) (cond)->common.code) == NON_LVALUE_EXPR) && ((cond)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((cond)->common.type))->type.mode) == ((((((cond)->exp.operands[0]))->common.type))->type.mode))) (cond) = ((cond)->exp.operands[0]);
  if (((cond)->common.constant_flag))
    {
      if (integer_zerop (cond))
 min = bi, max = br;
      else
 min = br, max = bi;
    }
  else
    {
      basic_block bb_cond, bb_true, bb_false, bb_join;
      tree l1, l2, l3;
      edge e;
      l1 = create_artificial_label ();
      t1 = build (GOTO_EXPR, global_trees[TI_VOID_TYPE], l1);
      l2 = create_artificial_label ();
      t2 = build (GOTO_EXPR, global_trees[TI_VOID_TYPE], l2);
      cond = build (COND_EXPR, global_trees[TI_VOID_TYPE], cond, t1, t2);
      bsi_insert_before (bsi, cond, BSI_SAME_STMT);
      min = make_rename_temp (inner_type, ((void *)0));
      max = make_rename_temp (inner_type, ((void *)0));
      l3 = create_artificial_label ();
      e = split_block (bsi->bb, cond);
      bb_cond = e->src;
      bb_join = e->dest;
      bb_true = create_empty_bb (bb_cond);
      bb_false = create_empty_bb (bb_true);
      e->flags = 1024;
      redirect_edge_succ (e, bb_true);
      make_edge (bb_cond, bb_false, 2048);
      make_edge (bb_true, bb_join, 0);
      make_edge (bb_false, bb_join, 0);
      if (dom_computed[CDI_DOMINATORS] >= DOM_CONS_OK)
        {
          set_immediate_dominator (CDI_DOMINATORS, bb_true, bb_cond);
          set_immediate_dominator (CDI_DOMINATORS, bb_false, bb_cond);
        }
      *bsi = bsi_start (bb_true);
      t1 = build (LABEL_EXPR, global_trees[TI_VOID_TYPE], l1);
      bsi_insert_after (bsi, t1, BSI_NEW_STMT);
      t1 = build (MODIFY_EXPR, inner_type, min, br);
      bsi_insert_after (bsi, t1, BSI_NEW_STMT);
      t1 = build (MODIFY_EXPR, inner_type, max, bi);
      bsi_insert_after (bsi, t1, BSI_NEW_STMT);
      *bsi = bsi_start (bb_false);
      t1 = build (LABEL_EXPR, global_trees[TI_VOID_TYPE], l2);
      bsi_insert_after (bsi, t1, BSI_NEW_STMT);
      t1 = build (MODIFY_EXPR, inner_type, min, bi);
      bsi_insert_after (bsi, t1, BSI_NEW_STMT);
      t1 = build (MODIFY_EXPR, inner_type, max, br);
      bsi_insert_after (bsi, t1, BSI_NEW_STMT);
      *bsi = bsi_start (bb_join);
      t1 = build (LABEL_EXPR, global_trees[TI_VOID_TYPE], l3);
      bsi_insert_before (bsi, t1, BSI_SAME_STMT);
    }
  ratio = do_binop (bsi, code, inner_type, min, max);
  t1 = do_binop (bsi, MULT_EXPR, inner_type, min, ratio);
  div = do_binop (bsi, PLUS_EXPR, inner_type, t1, max);
  t1 = do_binop (bsi, MULT_EXPR, inner_type, ai, ratio);
  t2 = do_binop (bsi, PLUS_EXPR, inner_type, ar, t1);
  rr = do_binop (bsi, code, inner_type, t2, div);
  t1 = do_binop (bsi, MULT_EXPR, inner_type, ar, ratio);
  t2 = do_binop (bsi, MINUS_EXPR, inner_type, ai, t1);
  ri = do_binop (bsi, code, inner_type, t2, div);
  update_complex_assignment (bsi, rr, ri);
}
static void
expand_complex_division (block_stmt_iterator *bsi, tree inner_type,
    tree ar, tree ai, tree br, tree bi,
    enum tree_code code)
{
  switch (flag_complex_divide_method)
    {
    case 0:
      expand_complex_div_straight (bsi, inner_type, ar, ai, br, bi, code);
      break;
    case 1:
      expand_complex_div_wide (bsi, inner_type, ar, ai, br, bi, code);
      break;
    default:
      fancy_abort ("gcc.c", 149590, "?");
    }
}
static void
expand_complex_negation (block_stmt_iterator *bsi, tree inner_type,
    tree ar, tree ai)
{
  tree rr, ri;
  rr = do_unop (bsi, NEGATE_EXPR, inner_type, ar);
  ri = do_unop (bsi, NEGATE_EXPR, inner_type, ai);
  update_complex_assignment (bsi, rr, ri);
}
static void
expand_complex_conjugate (block_stmt_iterator *bsi, tree inner_type,
     tree ar, tree ai)
{
  tree ri;
  ri = do_unop (bsi, NEGATE_EXPR, inner_type, ai);
  update_complex_assignment (bsi, ar, ri);
}
static void
expand_complex_comparison (block_stmt_iterator *bsi, tree ar, tree ai,
      tree br, tree bi, enum tree_code code)
{
  tree cr, ci, cc, stmt, type;
  cr = do_binop (bsi, code, global_trees[TI_BOOLEAN_TYPE], ar, br);
  ci = do_binop (bsi, code, global_trees[TI_BOOLEAN_TYPE], ai, bi);
  cc = do_binop (bsi, (code == EQ_EXPR ? TRUTH_AND_EXPR : TRUTH_OR_EXPR),
   global_trees[TI_BOOLEAN_TYPE], cr, ci);
  stmt = bsi_stmt (*bsi);
  modify_stmt (stmt);
  switch (((enum tree_code) (stmt)->common.code))
    {
    case RETURN_EXPR:
      stmt = ((stmt)->exp.operands[0]);
    case MODIFY_EXPR:
      type = ((((stmt)->exp.operands[1]))->common.type);
      ((stmt)->exp.operands[1]) = fold_convert (type, cc);
      break;
    case COND_EXPR:
      ((stmt)->exp.operands[0]) = cc;
      break;
    default:
      fancy_abort ("gcc.c", 149654, "?");
    }
}
static void
expand_complex_operations_1 (block_stmt_iterator *bsi)
{
  tree stmt = bsi_stmt (*bsi);
  tree rhs, type, inner_type;
  tree ac, ar, ai, bc, br, bi;
  enum tree_code code;
  switch (((enum tree_code) (stmt)->common.code))
    {
    case RETURN_EXPR:
      stmt = ((stmt)->exp.operands[0]);
      if (!stmt)
 return;
      if (((enum tree_code) (stmt)->common.code) != MODIFY_EXPR)
 return;
    case MODIFY_EXPR:
      rhs = ((stmt)->exp.operands[1]);
      break;
    case COND_EXPR:
      rhs = ((stmt)->exp.operands[0]);
      break;
    default:
      return;
    }
  type = ((rhs)->common.type);
  code = ((enum tree_code) (rhs)->common.code);
  switch (code)
    {
    case PLUS_EXPR:
    case MINUS_EXPR:
    case MULT_EXPR:
    case TRUNC_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case RDIV_EXPR:
    case NEGATE_EXPR:
    case CONJ_EXPR:
      if (((enum tree_code) (type)->common.code) != COMPLEX_TYPE)
 return;
      inner_type = ((type)->common.type);
      break;
    case EQ_EXPR:
    case NE_EXPR:
      inner_type = ((((rhs)->exp.operands[1]))->common.type);
      if (((enum tree_code) (inner_type)->common.code) != COMPLEX_TYPE)
 return;
      break;
    default:
      return;
    }
  ac = ((rhs)->exp.operands[0]);
  ar = extract_component (bsi, ac, 0);
  ai = extract_component (bsi, ac, 1);
  if (tree_code_type[(int) (code)] == '1')
    bc = br = bi = ((void *)0);
  else
    {
      bc = ((rhs)->exp.operands[1]);
      if (ac == bc)
 br = ar, bi = ai;
      else
 {
   br = extract_component (bsi, bc, 0);
   bi = extract_component (bsi, bc, 1);
 }
    }
  switch (code)
    {
    case PLUS_EXPR:
    case MINUS_EXPR:
      expand_complex_addition (bsi, inner_type, ar, ai, br, bi, code);
      break;
    case MULT_EXPR:
      expand_complex_multiplication (bsi, inner_type, ar, ai, br, bi);
      break;
    case TRUNC_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case RDIV_EXPR:
      expand_complex_division (bsi, inner_type, ar, ai, br, bi, code);
      break;
    case NEGATE_EXPR:
      expand_complex_negation (bsi, inner_type, ar, ai);
      break;
    case CONJ_EXPR:
      expand_complex_conjugate (bsi, inner_type, ar, ai);
      break;
    case EQ_EXPR:
    case NE_EXPR:
      expand_complex_comparison (bsi, ar, ai, br, bi, code);
      break;
    default:
      fancy_abort ("gcc.c", 149775, "?");
    }
}
static void
expand_complex_operations (void)
{
  int old_last_basic_block = last_basic_block;
  block_stmt_iterator bsi;
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      if (bb->index >= old_last_basic_block)
 continue;
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
 expand_complex_operations_1 (&bsi);
    }
}
struct tree_opt_pass pass_lower_complex =
{
  "complex",
  ((void *)0),
  expand_complex_operations,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 3),
  0,
  0,
  0,
  (1 << 0) | (1 << 1)
    | (1 << 2) | (1 << 3)
    | (1 << 5) | (1 << 4)
};
struct loops *current_loops;
static struct loops *
tree_loop_optimizer_init (FILE *dump)
{
  struct loops *loops = loop_optimizer_init (dump);
  if (!loops)
    return ((void *)0);
  kill_redundant_phi_nodes ();
  rewrite_into_ssa (0);
  bitmap_clear (vars_to_rename);
  return loops;
}
static unsigned char
gate_loop (void)
{
  return flag_tree_loop_optimize != 0;
}
struct tree_opt_pass pass_loop =
{
  "loop",
  gate_loop,
  ((void *)0),
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_LOOP,
  (1 << 3),
  0,
  0,
  (1 << 2),
  (1 << 0) | (1 << 3) | (1 << 2)
};
static void
tree_ssa_loop_init (void)
{
  current_loops = tree_loop_optimizer_init (dump_file);
}
struct tree_opt_pass pass_loop_init =
{
  "loopinit",
  ((void *)0),
  tree_ssa_loop_init,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 3),
  0,
  0,
  0,
  0
};
static void
tree_ssa_loop_done (void)
{
  if (!current_loops)
    return;
  loop_optimizer_finalize (current_loops,
      (dump_flags & (1 << 3) ? dump_file : ((void *)0)));
  current_loops = ((void *)0);
  cleanup_tree_cfg ();
}
struct tree_opt_pass pass_loop_done =
{
  "loopdone",
  ((void *)0),
  tree_ssa_loop_done,
  ((void *)0),
  ((void *)0),
  0,
  0,
  (1 << 3),
  0,
  0,
  0,
  0
};
enum op_type {
  OP_IN,
  OP_OUT,
  OP_INOUT
};
struct operand_alternative
{
  const char *constraint;
  enum reg_class class;
  unsigned int reject;
  int matches;
  int matched;
  unsigned int earlyclobber:1;
  unsigned int memory_ok:1;
  unsigned int offmem_ok:1;
  unsigned int nonoffmem_ok:1;
  unsigned int decmem_ok:1;
  unsigned int incmem_ok:1;
  unsigned int is_address:1;
  unsigned int anything_ok:1;
};
extern void init_recog (void);
extern void init_recog_no_volatile (void);
extern int recog_memoized_1 (rtx);
extern int check_asm_operands (rtx);
extern int asm_operand_ok (rtx, const char *);
extern int validate_change (rtx, rtx *, rtx, int);
extern int insn_invalid_p (rtx);
extern int apply_change_group (void);
extern int num_validated_changes (void);
extern void cancel_changes (int);
extern int constrain_operands (int);
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_subexp (rtx, rtx, rtx, rtx *);
extern int validate_replace_rtx (rtx, rtx, rtx);
extern void validate_replace_rtx_group (rtx, rtx, rtx);
extern void validate_replace_src_group (rtx, rtx, rtx);
extern int num_changes_pending (void);
extern int reg_fits_class_p (rtx, enum reg_class, int, enum machine_mode);
extern rtx *find_single_use (rtx, rtx, rtx *);
extern int general_operand (rtx, enum machine_mode);
extern int address_operand (rtx, enum machine_mode);
extern int register_operand (rtx, enum machine_mode);
extern int pmode_register_operand (rtx, enum machine_mode);
extern int scratch_operand (rtx, enum machine_mode);
extern int immediate_operand (rtx, enum machine_mode);
extern int const_int_operand (rtx, enum machine_mode);
extern int const_double_operand (rtx, enum machine_mode);
extern int nonimmediate_operand (rtx, enum machine_mode);
extern int nonmemory_operand (rtx, enum machine_mode);
extern int push_operand (rtx, enum machine_mode);
extern int pop_operand (rtx, enum machine_mode);
extern int memory_operand (rtx, enum machine_mode);
extern int indirect_operand (rtx, enum machine_mode);
extern int comparison_operator (rtx, enum machine_mode);
extern int offsettable_memref_p (rtx);
extern int offsettable_nonstrict_memref_p (rtx);
extern int offsettable_address_p (int, enum machine_mode, rtx);
extern int mode_dependent_address_p (rtx);
extern int recog (rtx, rtx, int *);
extern void add_clobbers (rtx, int);
extern int added_clobbers_hard_reg_p (int);
extern void insn_extract (rtx);
extern void extract_insn (rtx);
extern void extract_constrain_insn_cached (rtx);
extern void extract_insn_cached (rtx);
extern void preprocess_constraints (void);
extern rtx peep2_next_insn (int);
extern int peep2_regno_dead_p (int, int);
extern int peep2_reg_dead_p (int, rtx);
extern rtx peep2_find_free_register (int, int, const char *,
         enum machine_mode, HARD_REG_SET *);
extern void peephole2_optimize (FILE *);
extern rtx peephole2_insns (rtx, rtx, int *);
extern int store_data_bypass_p (rtx, rtx);
extern int if_test_bypass_p (rtx, rtx);
extern int volatile_ok;
extern int which_alternative;
struct recog_data
{
  rtx operand[30];
  rtx *operand_loc[30];
  const char *constraints[30];
  enum machine_mode operand_mode[30];
  enum op_type operand_type[30];
  rtx *dup_loc[4];
  char dup_num[4];
  char n_operands;
  char n_dups;
  char n_alternatives;
  rtx insn;
};
extern struct recog_data recog_data;
extern struct operand_alternative recog_op_alt[30][30];
typedef int (*insn_operand_predicate_fn) (rtx, enum machine_mode);
typedef const char * (*insn_output_fn) (rtx *, rtx);
typedef rtx (*insn_gen_fn) (rtx, ...);
struct insn_operand_data
{
  const insn_operand_predicate_fn predicate;
  const char *const constraint;
  unsigned int const mode : 16;
  const char strict_low;
  const char eliminable;
};
struct insn_data
{
  const char *const name;
  struct {
    const char *single;
    const char *const *multi;
    insn_output_fn function;
  } output;
  const insn_gen_fn genfun;
  const struct insn_operand_data *const operand;
  const char n_operands;
  const char n_dups;
  const char n_alternatives;
  const char output_format;
};
extern const struct insn_data insn_data[];
extern int max_regno;
typedef struct reg_info_def
{
  int first_uid;
  int last_uid;
  int last_note_uid;
  int sets;
  int refs;
  int freq;
  int deaths;
  int live_length;
  int calls_crossed;
  int basic_block1;
  char changes_mode;
} reg_info;
extern varray_type reg_n_info;
extern bitmap_head subregs_of_mode;
extern short *reg_renumber;
extern char regs_ever_live[53];
extern char regs_asm_clobbered[53];
extern enum machine_mode reg_raw_mode[53];
extern rtx regs_may_share;
extern int caller_save_needed;
extern void allocate_reg_info (size_t, int, int);
extern unsigned char hard_regno_nregs[53][MAX_MACHINE_MODE];
enum attr_cpu {CPU_I386, CPU_I486, CPU_PENTIUM, CPU_PENTIUMPRO, CPU_K6, CPU_ATHLON, CPU_PENTIUM4, CPU_K8, CPU_NOCONA};
extern enum attr_cpu get_attr_cpu (void);
enum attr_type {TYPE_OTHER, TYPE_MULTI, TYPE_ALU, TYPE_ALU1, TYPE_NEGNOT, TYPE_IMOV, TYPE_IMOVX, TYPE_LEA, TYPE_INCDEC, TYPE_ISHIFT, TYPE_ISHIFT1, TYPE_ROTATE, TYPE_ROTATE1, TYPE_IMUL, TYPE_IDIV, TYPE_ICMP, TYPE_TEST, TYPE_IBR, TYPE_SETCC, TYPE_ICMOV, TYPE_PUSH, TYPE_POP, TYPE_CALL, TYPE_CALLV, TYPE_LEAVE, TYPE_STR, TYPE_CLD, TYPE_FMOV, TYPE_FOP, TYPE_FSGN, TYPE_FMUL, TYPE_FDIV, TYPE_FPSPC, TYPE_FCMOV, TYPE_FCMP, TYPE_FXCH, TYPE_FISTP, TYPE_SSELOG, TYPE_SSEIADD, TYPE_SSEISHFT, TYPE_SSEIMUL, TYPE_SSE, TYPE_SSEMOV, TYPE_SSEADD, TYPE_SSEMUL, TYPE_SSECMP, TYPE_SSECOMI, TYPE_SSECVT, TYPE_SSEICVT, TYPE_SSEDIV, TYPE_MMX, TYPE_MMXMOV, TYPE_MMXADD, TYPE_MMXMUL, TYPE_MMXCMP, TYPE_MMXCVT, TYPE_MMXSHFT};
extern enum attr_type get_attr_type (rtx);
enum attr_mode {MODE_UNKNOWN, MODE_NONE, MODE_QI, MODE_HI, MODE_SI, MODE_DI, MODE_SF, MODE_DF, MODE_XF, MODE_TI, MODE_V4SF, MODE_V2DF, MODE_V2SF};
extern enum attr_mode get_attr_mode (rtx);
enum attr_unit {UNIT_INTEGER, UNIT_I387, UNIT_SSE, UNIT_MMX, UNIT_UNKNOWN};
extern enum attr_unit get_attr_unit (rtx);
extern int get_attr_length_immediate (rtx);
extern int get_attr_length_address (rtx);
extern int get_attr_prefix_data16 (rtx);
extern int get_attr_prefix_rep (rtx);
extern int get_attr_prefix_0f (rtx);
extern int get_attr_prefix_rex (rtx);
extern int get_attr_modrm (rtx);
extern int get_attr_length (rtx);
extern void shorten_branches (rtx);
extern int insn_default_length (rtx);
extern int insn_variable_length_p (rtx);
extern int insn_current_length (rtx);
extern varray_type insn_addresses_;
extern int insn_current_address;
enum attr_memory {MEMORY_NONE, MEMORY_LOAD, MEMORY_STORE, MEMORY_BOTH, MEMORY_UNKNOWN};
extern enum attr_memory get_attr_memory (rtx);
enum attr_imm_disp {IMM_DISP_FALSE, IMM_DISP_TRUE, IMM_DISP_UNKNOWN};
extern enum attr_imm_disp get_attr_imm_disp (rtx);
enum attr_fp_int_src {FP_INT_SRC_FALSE, FP_INT_SRC_TRUE};
extern enum attr_fp_int_src get_attr_fp_int_src (rtx);
enum attr_pent_prefix {PENT_PREFIX_FALSE, PENT_PREFIX_TRUE};
extern enum attr_pent_prefix get_attr_pent_prefix (rtx);
enum attr_pent_pair {PENT_PAIR_UV, PENT_PAIR_PU, PENT_PAIR_PV, PENT_PAIR_NP};
extern enum attr_pent_pair get_attr_pent_pair (rtx);
enum attr_athlon_decode {ATHLON_DECODE_DIRECT, ATHLON_DECODE_VECTOR, ATHLON_DECODE_DOUBLE};
extern enum attr_athlon_decode get_attr_athlon_decode (rtx);
extern int result_ready_cost (rtx);
extern int function_units_used (rtx);
extern const struct function_unit_desc
{
  const char *const name;
  const int bitmask;
  const int multiplicity;
  const int simultaneity;
  const int default_cost;
  const int max_issue_delay;
  int (*const ready_cost_function) (rtx);
  int (*const conflict_cost_function) (rtx, rtx);
  const int max_blockage;
  unsigned int (*const blockage_range_function) (rtx);
  int (*const blockage_function) (rtx, rtx);
} function_units[];
extern int max_dfa_issue_rate;
extern int insn_default_latency (rtx);
extern int bypass_p (rtx);
extern int insn_latency (rtx, rtx);
extern int max_insn_queue_index;
typedef void *state_t;
extern int state_size (void);
extern void state_reset (state_t);
extern int state_transition (state_t, rtx);
extern int min_issue_delay (state_t, rtx);
extern int state_dead_lock_p (state_t);
extern int min_insn_conflict_delay (state_t, rtx, rtx);
extern void print_reservation (FILE *, rtx);
extern void dfa_clean_insn_cache (void);
extern void dfa_start (void);
extern void dfa_finish (void);
int
insn_current_length (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 514:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 0) && (((((insn_addresses_ != 0) ? ((insn_addresses_)->data.i[((((((enum rtx_code) (recog_data.operand[0])->code) == LABEL_REF ? (((recog_data.operand[0])->u.fld[0]).rtx1) : recog_data.operand[0])->u.fld[0]).rtint))]) : 0) - (insn_current_reference_address (insn))) >= (-126)) && ((((insn_addresses_ != 0) ? ((insn_addresses_)->data.i[((((((enum rtx_code) (recog_data.operand[0])->code) == LABEL_REF ? (((recog_data.operand[0])->u.fld[0]).rtx1) : recog_data.operand[0])->u.fld[0]).rtint))]) : 0) - (insn_current_reference_address (insn))) < (128))))
        {
   return 2;
        }
      else
        {
   return 16 ;
        }
    case 509:
      extract_insn_cached (insn);
      if (((((insn_addresses_ != 0) ? ((insn_addresses_)->data.i[((((((enum rtx_code) (recog_data.operand[0])->code) == LABEL_REF ? (((recog_data.operand[0])->u.fld[0]).rtx1) : recog_data.operand[0])->u.fld[0]).rtint))]) : 0) - (insn_current_reference_address (insn))) >= (-126)) && ((((insn_addresses_ != 0) ? ((insn_addresses_)->data.i[((((((enum rtx_code) (recog_data.operand[0])->code) == LABEL_REF ? (((recog_data.operand[0])->u.fld[0]).rtx1) : recog_data.operand[0])->u.fld[0]).rtint))]) : 0) - (insn_current_reference_address (insn))) < (128)))
        {
   return 2;
        }
      else
        {
   return 5;
        }
    case 498:
      extract_insn_cached (insn);
      if (((((insn_addresses_ != 0) ? ((insn_addresses_)->data.i[((((((enum rtx_code) (recog_data.operand[0])->code) == LABEL_REF ? (((recog_data.operand[0])->u.fld[0]).rtx1) : recog_data.operand[0])->u.fld[0]).rtint))]) : 0) - (insn_current_reference_address (insn))) >= (-126)) && ((((insn_addresses_ != 0) ? ((insn_addresses_)->data.i[((((((enum rtx_code) (recog_data.operand[0])->code) == LABEL_REF ? (((recog_data.operand[0])->u.fld[0]).rtx1) : recog_data.operand[0])->u.fld[0]).rtint))]) : 0) - (insn_current_reference_address (insn))) < (128)))
        {
   return 2;
        }
      else
        {
   return 6;
        }
    case 497:
      extract_insn_cached (insn);
      if (((((insn_addresses_ != 0) ? ((insn_addresses_)->data.i[((((((enum rtx_code) (recog_data.operand[0])->code) == LABEL_REF ? (((recog_data.operand[0])->u.fld[0]).rtx1) : recog_data.operand[0])->u.fld[0]).rtint))]) : 0) - (insn_current_reference_address (insn))) >= (-126)) && ((((insn_addresses_ != 0) ? ((insn_addresses_)->data.i[((((((enum rtx_code) (recog_data.operand[0])->code) == LABEL_REF ? (((recog_data.operand[0])->u.fld[0]).rtx1) : recog_data.operand[0])->u.fld[0]).rtint))]) : 0) - (insn_current_reference_address (insn))) < (128)))
        {
   return 2;
        }
      else
        {
   return 6;
        }
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 150776, "?");
    default:
      return 0;
    }
}
int
insn_variable_length_p (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 514:
    case 509:
    case 498:
    case 497:
      return 1;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 150797, "?");
    default:
      return 0;
    }
}
int
insn_default_length (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 655:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x3))
        {
   return 16 ;
        }
      else
        {
   return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
        }
    case 580:
    case 579:
    case 578:
    case 577:
    case 576:
    case 575:
    case 574:
    case 573:
    case 572:
    case 571:
    case 570:
    case 568:
    case 567:
    case 566:
    case 565:
    case 563:
    case 562:
      if (get_attr_unit (insn) == UNIT_I387)
        {
   return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 584:
    case 581:
    case 559:
    case 556:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 490:
    case 489:
    case 487:
    case 478:
    case 477:
    case 475:
    case 464:
    case 463:
    case 459:
    case 443:
    case 440:
    case 439:
    case 437:
    case 435:
      extract_insn_cached (insn);
      if (register_operand (recog_data.operand[0], VOIDmode))
        {
   return 2;
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 484:
    case 483:
    case 471:
    case 467:
    case 461:
    case 455:
    case 451:
    case 431:
    case 427:
      extract_insn_cached (insn);
      if (register_operand (recog_data.operand[0], SImode))
        {
   return 2;
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 481:
    case 469:
    case 447:
    case 445:
    case 420:
    case 418:
      extract_insn_cached (insn);
      if (register_operand (recog_data.operand[0], DImode))
        {
   return 2;
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 172:
    case 169:
    case 166:
    case 163:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return 16 ;
        }
      else if (which_alternative == 0)
        {
   return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 137:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 136:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x3))
        {
   return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xe))
        {
   return 16 ;
        }
      else if (which_alternative == 0)
        {
   return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 176:
    case 175:
    case 174:
    case 171:
    case 168:
    case 165:
    case 162:
    case 145:
    case 142:
    case 133:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return 16 ;
        }
      else
        {
   return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
        }
    case 656:
    case 654:
    case 128:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return 16 ;
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 101:
    case 100:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x7))
        {
   return 16 ;
        }
      else
        {
   return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
        }
    case 96:
    case 95:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x18))
        {
   return 16 ;
        }
      else if (((1 << which_alternative) & 0x7))
        {
   return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 657:
    case 616:
    case 615:
    case 614:
    case 613:
    case 612:
    case 611:
    case 610:
    case 609:
    case 608:
    case 607:
    case 606:
    case 605:
    case 604:
    case 603:
    case 602:
    case 601:
    case 600:
    case 599:
    case 598:
    case 597:
    case 596:
    case 595:
    case 594:
    case 593:
    case 592:
    case 591:
    case 590:
    case 589:
    case 588:
    case 587:
    case 586:
    case 583:
    case 561:
    case 558:
    case 555:
    case 391:
    case 390:
    case 389:
    case 388:
    case 387:
    case 386:
    case 376:
    case 375:
    case 374:
    case 373:
    case 372:
    case 371:
    case 146:
    case 144:
    case 143:
    case 141:
    case 138:
    case 132:
    case 131:
    case 130:
    case 102:
    case 97:
    case 92:
      return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
    case 91:
    case 90:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return 2 + get_attr_prefix_data16 (insn) + get_attr_length_address (insn);
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 89:
    case 88:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 1)
        {
   return 16 ;
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 84:
    case 83:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 4)
        {
   return 16 ;
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 721:
    case 720:
    case 82:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return 16 ;
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 76:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return 16 ;
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 34:
    case 31:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 4;
        }
      else
        {
   return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
        }
    case 33:
    case 30:
    case 25:
    case 23:
    case 21:
    case 20:
    case 19:
      return 4;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 151193, "?");
      return 128 ;
    case 1022:
    case 1021:
    case 526:
      return 3;
    case 853:
      return 135 ;
    case 554:
    case 553:
    case 552:
    case 551:
      return 7;
    case 549:
    case 544:
    case 530:
      return 12 ;
    case 548:
      return 13 ;
    case 547:
      return 11 ;
    case 545:
      return 14 ;
    case 528:
    case 525:
    case 524:
    case 29:
      return 1;
    case 523:
      return 0;
    case 718:
    case 717:
    case 716:
    case 715:
    case 714:
    case 713:
    case 712:
    case 711:
    case 710:
    case 709:
    case 708:
    case 697:
    case 696:
    case 684:
    case 683:
    case 682:
    case 681:
    case 680:
    case 679:
    case 678:
    case 677:
    case 676:
    case 675:
    case 674:
    case 673:
    case 668:
    case 667:
    case 665:
    case 664:
    case 662:
    case 661:
    case 659:
    case 658:
    case 550:
    case 543:
    case 542:
    case 541:
    case 540:
    case 539:
    case 538:
    case 537:
    case 536:
    case 535:
    case 532:
    case 531:
    case 508:
    case 507:
    case 506:
    case 505:
    case 504:
    case 503:
    case 502:
    case 501:
    case 500:
    case 499:
    case 450:
    case 449:
    case 423:
    case 422:
    case 405:
    case 404:
    case 385:
    case 384:
    case 383:
    case 382:
    case 381:
    case 380:
    case 379:
    case 378:
    case 377:
    case 370:
    case 369:
    case 368:
    case 367:
    case 366:
    case 365:
    case 364:
    case 363:
    case 362:
    case 351:
    case 287:
    case 286:
    case 275:
    case 273:
    case 272:
    case 270:
    case 269:
    case 267:
    case 266:
    case 225:
    case 177:
    case 159:
    case 158:
    case 157:
    case 154:
    case 153:
    case 152:
    case 149:
    case 148:
    case 147:
    case 127:
    case 126:
    case 117:
    case 99:
    case 98:
    case 94:
    case 93:
    case 75:
    case 27:
    case 26:
    case 24:
    case 22:
    case 18:
    case 546:
    case 529:
    case 514:
      return 16 ;
    case 686:
    case 685:
    case 509:
      return 5;
    case 498:
    case 497:
      return 6;
    case 472:
    case 456:
    case 452:
    case 432:
    case 428:
    case 161:
    case 160:
    case 28:
      return 2;
    default:
      return get_attr_modrm (insn) + get_attr_prefix_0f (insn) + get_attr_prefix_rex (insn) + 1 + get_attr_prefix_rep (insn) + get_attr_prefix_data16 (insn) + get_attr_length_immediate (insn) + get_attr_length_address (insn);
    }
}
int
bypass_p (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 89:
    case 88:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && (! (memory_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 76:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && (! (memory_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 534:
    case 533:
    case 79:
    case 78:
    case 40:
    case 39:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 77:
    case 58:
    case 57:
    case 49:
    case 48:
    case 38:
    case 37:
    case 36:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 151440, "?");
    default:
      return 0;
    }
}
int
insn_default_latency (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 1015:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 1009:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && ((memory_operand (recog_data.operand[1], DFmode)) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_K8))) && (which_alternative == 1)) || (((((ix86_tune) == (CPU_ATHLON))) && (which_alternative == 1)) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 1)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 1008:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && ((memory_operand (recog_data.operand[1], DFmode)) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((which_alternative == 1) && (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 1012:
    case 1011:
    case 1010:
    case 1004:
    case 1002:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((memory_operand (recog_data.operand[1], DFmode)) || (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 966:
    case 965:
    case 964:
    case 963:
    case 962:
    case 961:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 952:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((optimize_size) != (0))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 903:
    case 902:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 6;
        }
      else
        {
   return 0;
        }
    case 899:
    case 898:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 3;
        }
      else
        {
   return 0;
        }
    case 891:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 22 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 20 ;
        }
      else
        {
   return 0;
        }
    case 890:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 39 ;
        }
      else
        {
   return 0;
        }
    case 895:
    case 893:
    case 889:
    case 887:
    case 885:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 1028:
    case 1026:
    case 1024:
    case 894:
    case 892:
    case 888:
    case 886:
    case 884:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 5;
        }
      else
        {
   return 0;
        }
    case 881:
    case 880:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 879:
    case 878:
    case 870:
    case 869:
    case 865:
    case 864:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 1020:
    case 1019:
    case 1018:
    case 852:
      if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 3;
        }
      else
        {
   return 0;
        }
    case 851:
      if (((ix86_tune) == (CPU_K6)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 850:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 2;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 3;
        }
      else
        {
   return 0;
        }
    case 849:
      if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 859:
    case 858:
    case 857:
    case 827:
    case 826:
    case 825:
    case 824:
    case 823:
    case 822:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 871:
    case 842:
    case 841:
    case 840:
    case 839:
    case 838:
    case 837:
    case 836:
    case 835:
    case 834:
    case 833:
    case 832:
    case 818:
    case 817:
    case 816:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 883:
    case 882:
    case 863:
    case 813:
    case 812:
      if ((((ix86_tune) == (CPU_PENTIUM))) || (((ix86_tune) == (CPU_PENTIUMPRO))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 877:
    case 862:
    case 810:
    case 809:
    case 808:
    case 807:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 3;
        }
      else
        {
   return 0;
        }
    case 876:
    case 875:
    case 874:
    case 873:
    case 872:
    case 868:
    case 867:
    case 866:
    case 861:
    case 860:
    case 856:
    case 855:
    case 854:
    case 831:
    case 830:
    case 829:
    case 828:
    case 815:
    case 814:
    case 811:
    case 806:
    case 805:
    case 804:
    case 803:
    case 802:
    case 801:
    case 800:
    case 799:
    case 798:
    case 797:
    case 796:
    case 795:
    case 794:
    case 793:
    case 792:
    case 791:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 923:
    case 921:
    case 788:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD))) || (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))))
        {
   return 9;
        }
      else
        {
   return 0;
        }
    case 922:
    case 920:
    case 787:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD))) || (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))))
        {
   return 9;
        }
      else
        {
   return 0;
        }
    case 775:
    case 774:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 6;
        }
      else
        {
   return 0;
        }
    case 771:
    case 770:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 3;
        }
      else
        {
   return 0;
        }
    case 769:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 3;
        }
      else
        {
   return 0;
        }
    case 768:
      extract_constrain_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 3;
        }
      else
        {
   return 0;
        }
    case 767:
    case 766:
    case 765:
    case 764:
    case 763:
    case 762:
    case 761:
    case 760:
    case 759:
    case 758:
    case 757:
    case 756:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 3;
        }
      else
        {
   return 0;
        }
    case 755:
    case 754:
    case 753:
    case 752:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 3;
        }
      else
        {
   return 0;
        }
    case 1030:
    case 1029:
    case 780:
    case 778:
    case 750:
    case 748:
    case 746:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 745:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 18 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 22 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 20 ;
        }
      else
        {
   return 0;
        }
    case 744:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 48 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 39 ;
        }
      else
        {
   return 0;
        }
    case 743:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 742:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 5;
        }
      else
        {
   return 0;
        }
    case 741:
    case 739:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 1027:
    case 1025:
    case 1023:
    case 740:
    case 738:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 5;
        }
      else
        {
   return 0;
        }
    case 736:
    case 735:
    case 734:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)) || (get_attr_memory (insn) == MEMORY_STORE))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 928:
    case 783:
    case 782:
    case 777:
    case 776:
    case 737:
    case 733:
    case 732:
    case 731:
    case 730:
    case 725:
    case 724:
    case 723:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 721:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((1 << which_alternative) & 0x3))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((memory_operand (recog_data.operand[1], DFmode)) || (((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || (((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0)))))))) || (((((ix86_tune) == (CPU_ATHLON))) && ((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0)))))))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 720:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((1 << which_alternative) & 0x3))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((memory_operand (recog_data.operand[1], DFmode)) || (((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || (((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0)))))))) || (((((ix86_tune) == (CPU_ATHLON))) && ((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0)))))))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 719:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0)))))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((memory_operand (recog_data.operand[1], DFmode)) || (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0)))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && (! ((optimize_size) != (0)))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0)))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && (! ((optimize_size) != (0)))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || (((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0)))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && (! ((optimize_size) != (0)))) || (!((1 << which_alternative) & 0x7)))))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 707:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((memory_operand (recog_data.operand[1], DFmode)) || (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || (((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7)))))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 706:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((memory_operand (recog_data.operand[1], DFmode)) || (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || (((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7)))))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 705:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((memory_operand (recog_data.operand[1], DFmode)) || (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || (((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7)))))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 848:
    case 847:
    case 846:
    case 845:
    case 844:
    case 843:
    case 821:
    case 820:
    case 819:
    case 727:
    case 726:
    case 704:
    case 703:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 729:
    case 702:
    case 701:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if (((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 700:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((memory_operand (recog_data.operand[1], DFmode)) || (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || (((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7)))))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 699:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((memory_operand (recog_data.operand[1], DFmode)) || (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || (((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7)))))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 728:
    case 722:
    case 698:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE)) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((memory_operand (recog_data.operand[1], DFmode)) || (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 695:
    case 694:
    case 693:
    case 692:
    case 691:
    case 690:
    case 689:
    case 688:
    case 687:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 10 ;
        }
      else
        {
   return 6;
        }
    case 672:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (which_alternative == 0)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if (((which_alternative == 1) && (((ix86_tune) == (CPU_K6)))) || (((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((which_alternative == 1) && ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 671:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode)))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((((get_attr_memory (insn) == MEMORY_STORE) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode)))) || ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], DImode)))))) || ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (which_alternative == 0)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], DImode)))) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], DImode))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 670:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode)))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((((get_attr_memory (insn) == MEMORY_STORE) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode)))) || ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], SImode)))))) || ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (which_alternative == 0)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], SImode)))) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], SImode))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 657:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 2;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 7;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 15 ;
        }
      else
        {
   return 0;
        }
    case 655:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((1 << which_alternative) & 0x3)))
        {
   return 1;
        }
      else if (!((1 << which_alternative) & 0x3))
        {
   return 6;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 2;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 7;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 15 ;
        }
      else
        {
   return 0;
        }
    case 656:
    case 654:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((1 << which_alternative) & 0x3)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (!((1 << which_alternative) & 0x3))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (!((1 << which_alternative) & 0x3))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (!((1 << which_alternative) & 0x3))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (!((1 << which_alternative) & 0x3))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x3)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((1 << which_alternative) & 0x3)))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((1 << which_alternative) & 0x3)))
        {
   return 15 ;
        }
      else
        {
   return 0;
        }
    case 653:
    case 652:
    case 651:
    case 649:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 650:
    case 648:
      if ((((ix86_tune) == (CPU_PENTIUM))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) || ((((ix86_tune) == (CPU_K6))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 647:
    case 646:
    case 645:
    case 644:
    case 643:
    case 642:
    case 641:
    case 640:
    case 639:
    case 638:
    case 637:
    case 636:
    case 635:
    case 634:
    case 633:
    case 632:
    case 631:
    case 630:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 12 ;
        }
      else
        {
   return 6;
        }
    case 629:
    case 628:
    case 627:
    case 626:
    case 625:
    case 624:
    case 623:
    case 622:
    case 621:
    case 620:
    case 619:
    case 618:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 12 ;
        }
      else
        {
   return 6;
        }
    case 617:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 2;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 2;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 616:
    case 615:
    case 614:
    case 613:
    case 612:
    case 611:
    case 610:
    case 607:
    case 604:
    case 600:
    case 596:
    case 592:
    case 591:
    case 590:
    case 589:
    case 588:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 70 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 38 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 56 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 100 ;
        }
      else
        {
   return 0;
        }
    case 608:
    case 605:
    case 603:
    case 601:
    case 599:
    case 597:
    case 595:
    case 593:
    case 587:
    case 586:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 70 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 32 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 56 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 100 ;
        }
      else
        {
   return 0;
        }
    case 1031:
    case 1017:
    case 1013:
    case 1007:
    case 1006:
    case 1005:
    case 1003:
    case 1001:
    case 1000:
    case 999:
    case 998:
    case 997:
    case 996:
    case 995:
    case 994:
    case 993:
    case 992:
    case 991:
    case 990:
    case 989:
    case 960:
    case 959:
    case 958:
    case 957:
    case 956:
    case 929:
    case 919:
    case 918:
    case 917:
    case 916:
    case 915:
    case 914:
    case 913:
    case 912:
    case 911:
    case 910:
    case 909:
    case 908:
    case 907:
    case 906:
    case 905:
    case 904:
    case 896:
    case 784:
    case 669:
    case 663:
    case 585:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 584:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (which_alternative == 0))
        {
   return 70 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (which_alternative == 0))
        {
   return 56 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 103 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 100 ;
        }
      else
        {
   return 0;
        }
    case 609:
    case 606:
    case 602:
    case 598:
    case 594:
    case 583:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 70 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 18 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 56 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 100 ;
        }
      else
        {
   return 0;
        }
    case 897:
    case 781:
    case 779:
    case 751:
    case 749:
    case 747:
    case 666:
    case 660:
    case 582:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 581:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (which_alternative == 0))
        {
   return 70 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 18 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 19 ;
        }
      else if (((which_alternative == 1) && (((ix86_tune) == (CPU_PENTIUMPRO)))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (which_alternative == 0))
        {
   return 56 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 103 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 100 ;
        }
      else
        {
   return 0;
        }
    case 580:
    case 579:
    case 578:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_type (insn) == TYPE_FOP) || (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)) || ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], XFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 18 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], XFmode)) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 56 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP)) || ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], XFmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 11 ;
        }
      else
        {
   return 0;
        }
    case 577:
    case 576:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_type (insn) == TYPE_FOP) || (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)) || ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], XFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], XFmode)) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 56 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP)) || ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], XFmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 11 ;
        }
      else
        {
   return 0;
        }
    case 575:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_type (insn) == TYPE_FOP) || (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)) || ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], XFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 38 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], XFmode)) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 56 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP)) || ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], XFmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 11 ;
        }
      else
        {
   return 0;
        }
    case 574:
    case 573:
    case 572:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_type (insn) == TYPE_FOP) || (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)) || ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], DFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 18 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], DFmode)) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 56 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP)) || ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], DFmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 11 ;
        }
      else
        {
   return 0;
        }
    case 571:
    case 570:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_type (insn) == TYPE_FOP) || (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)) || ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], DFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], DFmode)) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 56 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP)) || ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], DFmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 11 ;
        }
      else
        {
   return 0;
        }
    case 569:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEADD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_SSEADD)) || ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_SSEADD)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (mult_operator (recog_data.operand[3], SFmode))) || ((((ix86_tune) == (CPU_K8))) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 22 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEDIV))
        {
   return 20 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_SSEDIV)) || ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return 39 ;
        }
      else
        {
   return 0;
        }
    case 568:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_type (insn) == TYPE_FOP) || ((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)) || ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode))))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode)))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode))) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 56 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP)) || ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 11 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEADD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_SSEADD)) || ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_SSEADD)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 7;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode)))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 22 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEDIV))
        {
   return 20 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_SSEDIV)) || ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return 39 ;
        }
      else
        {
   return 0;
        }
    case 567:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_type (insn) == TYPE_FOP) || (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)) || ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], DFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], DFmode)) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 56 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP)) || ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], DFmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 11 ;
        }
      else
        {
   return 0;
        }
    case 566:
    case 565:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_type (insn) == TYPE_FOP) || (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)) || ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], SFmode)) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 56 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP)) || ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 11 ;
        }
      else
        {
   return 0;
        }
    case 564:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_SSEADD)) || ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_SSEADD))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], SFmode))) || ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return 18 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEADD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_SSEADD)) || ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_SSEADD)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (mult_operator (recog_data.operand[3], SFmode))) || ((((ix86_tune) == (CPU_K8))) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 22 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEDIV))
        {
   return 20 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_SSEDIV)) || ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return 39 ;
        }
      else
        {
   return 0;
        }
    case 563:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_type (insn) == TYPE_FOP) || ((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)) || ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 18 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_SSEADD)) || ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_SSEADD))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode)))) || ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return 18 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode))) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 56 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP)) || ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 11 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEADD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_SSEADD)) || ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_SSEADD)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 7;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode)))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 22 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEDIV))
        {
   return 20 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_SSEDIV)) || ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return 39 ;
        }
      else
        {
   return 0;
        }
    case 562:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_type (insn) == TYPE_FOP) || (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)) || ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 18 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], SFmode)) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 56 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP)) || ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 11 ;
        }
      else
        {
   return 0;
        }
    case 561:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (! (mult_operator (recog_data.operand[3], XFmode)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (! (mult_operator (recog_data.operand[3], XFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (! (mult_operator (recog_data.operand[3], XFmode)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && (! (mult_operator (recog_data.operand[3], XFmode)))) || ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], XFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((! (mult_operator (recog_data.operand[3], XFmode))) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (mult_operator (recog_data.operand[3], XFmode))) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], XFmode)) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((! (mult_operator (recog_data.operand[3], XFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((! (mult_operator (recog_data.operand[3], XFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (! (mult_operator (recog_data.operand[3], XFmode)))) || ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], XFmode)))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 560:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (! (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (! (mult_operator (recog_data.operand[3], SFmode)))) || ((((ix86_tune) == (CPU_K8))) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (mult_operator (recog_data.operand[3], SFmode))) || ((((ix86_tune) == (CPU_K8))) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 5;
        }
      else
        {
   return 0;
        }
    case 559:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative != 1) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))) || ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))) || ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode)))) || ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 7;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode))))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 7;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode)))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 5;
        }
      else
        {
   return 0;
        }
    case 557:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) && (! (mult_operator (recog_data.operand[3], SFmode)))) || ((get_attr_memory (insn) == MEMORY_LOAD) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], SFmode))) || ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (! (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (! (mult_operator (recog_data.operand[3], SFmode)))) || ((((ix86_tune) == (CPU_K8))) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && (mult_operator (recog_data.operand[3], SFmode))) || ((((ix86_tune) == (CPU_K8))) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 5;
        }
      else
        {
   return 0;
        }
    case 556:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative != 1) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))) || ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode))))) || ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode)))) || ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))) || ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode)))) || ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 7;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode))))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 7;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode)))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 5;
        }
      else
        {
   return 0;
        }
    case 558:
    case 555:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_BOTH) && (! (mult_operator (recog_data.operand[3], SFmode)))) || ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], SFmode)) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (! (mult_operator (recog_data.operand[3], SFmode)))) || ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 554:
    case 552:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) || (((ix86_tune) == (CPU_K6))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 534:
    case 533:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 4;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 3;
        }
      else
        {
   return 0;
        }
    case 522:
    case 521:
    case 520:
    case 519:
    case 518:
    case 517:
    case 516:
    case 515:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 10 ;
        }
      else
        {
   return 6;
        }
    case 527:
    case 514:
    case 513:
    case 512:
    case 511:
    case 510:
    case 509:
    case 498:
    case 497:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (memory_operand (recog_data.operand[0], VOIDmode))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[0], VOIDmode)))
        {
   return 6;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 0;
        }
      else
        {
   return 0;
        }
    case 901:
    case 900:
    case 496:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 773:
    case 772:
    case 495:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))) || ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 494:
    case 493:
      extract_insn_cached (insn);
      if (((((ix86_tune) == (CPU_PENTIUM))) && (! (memory_operand (recog_data.operand[0], VOIDmode)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) || ((((ix86_tune) == (CPU_K6))) && (! (memory_operand (recog_data.operand[0], VOIDmode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (memory_operand (recog_data.operand[0], VOIDmode)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 492:
    case 490:
    case 479:
    case 477:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const1_operand (recog_data.operand[1], VOIDmode))) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const1_operand (recog_data.operand[1], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const1_operand (recog_data.operand[1], VOIDmode))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const1_operand (recog_data.operand[1], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const1_operand (recog_data.operand[1], VOIDmode))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const1_operand (recog_data.operand[1], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 491:
    case 489:
    case 488:
    case 487:
    case 486:
    case 485:
    case 484:
    case 483:
    case 482:
    case 481:
    case 480:
    case 478:
    case 476:
    case 475:
    case 474:
    case 473:
    case 472:
    case 471:
    case 470:
    case 469:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const1_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const1_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const1_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 466:
    case 464:
    case 442:
    case 440:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const_int_operand (recog_data.operand[1], VOIDmode))) && (memory_operand (recog_data.operand[1], VOIDmode))) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const_int_operand (recog_data.operand[1], VOIDmode)))) && (memory_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const_int_operand (recog_data.operand[1], VOIDmode))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const_int_operand (recog_data.operand[1], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 424:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 468:
    case 467:
    case 465:
    case 463:
    case 462:
    case 461:
    case 460:
    case 459:
    case 458:
    case 457:
    case 456:
    case 455:
    case 454:
    case 453:
    case 452:
    case 451:
    case 448:
    case 447:
    case 446:
    case 445:
    case 444:
    case 443:
    case 441:
    case 439:
    case 438:
    case 437:
    case 436:
    case 435:
    case 434:
    case 433:
    case 432:
    case 431:
    case 430:
    case 429:
    case 428:
    case 427:
    case 421:
    case 420:
    case 419:
    case 418:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const_int_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const_int_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const_int_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const_int_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const_int_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const_int_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 426:
    case 425:
    case 417:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative == 1) && (const_int_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((which_alternative != 1) || (! (const_int_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative == 1) && (const_int_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((which_alternative != 1) || (! (const_int_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative == 1) && (const_int_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((which_alternative != 1) || (! (const_int_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (! (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 414:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((get_attr_type (insn) == TYPE_ALU) || (which_alternative == 2))) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((get_attr_type (insn) == TYPE_ALU) || (which_alternative == 2))) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((get_attr_type (insn) == TYPE_ALU) || (which_alternative == 2))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 2) || (get_attr_type (insn) == TYPE_ISHIFT)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && ((which_alternative == 2) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 2)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 413:
    case 412:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ISHIFT))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 411:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative != 0) || (get_attr_type (insn) == TYPE_ISHIFT)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && ((which_alternative != 0) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 1)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 410:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode))))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 408:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative != 0) || ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative != 0) || ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative != 0) || ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative != 0) || ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode))))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && ((which_alternative == 0) && ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode)))))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && ((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode))))) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && ((which_alternative != 0) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 1)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 406:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 416:
    case 415:
    case 409:
    case 403:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_type (insn) == TYPE_ALU)) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_type (insn) == TYPE_ALU)) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_type (insn) == TYPE_ALU)) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ISHIFT))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 407:
    case 402:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative != 0) || (get_attr_type (insn) == TYPE_ALU))) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative != 0) || (get_attr_type (insn) == TYPE_ALU))) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative != 0) || (get_attr_type (insn) == TYPE_ALU))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative != 0) || (get_attr_type (insn) == TYPE_ISHIFT)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && ((which_alternative != 0) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 1)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 391:
    case 390:
    case 389:
    case 388:
    case 387:
    case 386:
    case 376:
    case 375:
    case 374:
    case 373:
    case 372:
    case 371:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((ix86_tune) == (CPU_PENTIUMPRO))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 400:
    case 398:
    case 395:
    case 394:
    case 392:
    case 361:
    case 360:
    case 359:
    case 358:
    case 357:
    case 356:
    case 355:
    case 354:
    case 353:
    case 352:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 294:
    case 290:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x3))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x3))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x3))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (((1 << which_alternative) & 0x3))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 288:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x7))) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 3)) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x7))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 3)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x7))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 3)) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x7))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x7))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x7))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (((1 << which_alternative) & 0x7))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 282:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 281:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((((1 << which_alternative) & 0x5)) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((!((1 << which_alternative) & 0x5)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((((1 << which_alternative) & 0x5)) && (get_attr_memory (insn) == MEMORY_NONE)) || ((!((1 << which_alternative) & 0x5)) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 280:
    case 279:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative != 1) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative != 1) && (get_attr_memory (insn) == MEMORY_NONE)) || ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 278:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((!((1 << which_alternative) & 0xa)) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((((1 << which_alternative) & 0xa)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((!((1 << which_alternative) & 0xa)) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((1 << which_alternative) & 0xa)) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 277:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 19 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 9;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 276:
    case 271:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 39 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 19 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 9;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 274:
    case 268:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 19 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 9;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 265:
    case 264:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 19 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 9;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 263:
    case 262:
    case 260:
    case 259:
    case 257:
    case 255:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 11 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 4;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 261:
    case 258:
    case 256:
    case 254:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 11 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 4;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 253:
    case 252:
    case 251:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 11 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 4;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((! (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((! (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((! (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((! (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 250:
      extract_constrain_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 11 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 4;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 0) && (! (((ix86_tune) == (CPU_ATHLON))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative != 0) || (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 0) && (! (((ix86_tune) == (CPU_ATHLON))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative != 0) || (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 0) && (! (((ix86_tune) == (CPU_ATHLON))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative != 0) || (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 0) && (! (((ix86_tune) == (CPU_ATHLON))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative != 0) || (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 249:
    case 248:
      extract_constrain_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 11 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 4;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 247:
      extract_constrain_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 11 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 4;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 217:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (incdec_operand (recog_data.operand[2], QImode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (incdec_operand (recog_data.operand[2], QImode))) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 215:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative != 3)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative != 3)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (which_alternative != 3)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative != 3) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative != 3) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && ((which_alternative == 3) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 3)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 209:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_NONE)) || (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_NONE))) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative != 2)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative != 2)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (which_alternative != 2)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative != 2) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative != 2) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && ((which_alternative == 2) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 2)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 202:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((which_alternative != 0) || (pic_symbolic_operand (recog_data.operand[2], SImode))) || ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && (((which_alternative != 0) || (pic_symbolic_operand (recog_data.operand[2], SImode))) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative != 0) || (pic_symbolic_operand (recog_data.operand[2], SImode)))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 201:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], SImode))) || ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && (((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], SImode))) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], SImode)))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 196:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], DImode))) || ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && (((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], DImode))) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], DImode)))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 195:
    case 194:
    case 193:
    case 192:
    case 191:
    case 190:
    case 189:
    case 188:
    case 187:
    case 186:
      if ((((ix86_tune) == (CPU_PENTIUM))) || (((ix86_tune) == (CPU_PENTIUMPRO))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 350:
    case 349:
    case 348:
    case 346:
    case 345:
    case 344:
    case 343:
    case 342:
    case 340:
    case 339:
    case 338:
    case 337:
    case 336:
    case 335:
    case 334:
    case 333:
    case 332:
    case 331:
    case 330:
    case 329:
    case 328:
    case 327:
    case 326:
    case 325:
    case 324:
    case 323:
    case 322:
    case 320:
    case 318:
    case 317:
    case 316:
    case 315:
    case 314:
    case 313:
    case 312:
    case 311:
    case 310:
    case 309:
    case 308:
    case 307:
    case 306:
    case 305:
    case 304:
    case 303:
    case 302:
    case 301:
    case 300:
    case 298:
    case 296:
    case 295:
    case 293:
    case 292:
    case 291:
    case 289:
    case 246:
    case 245:
    case 243:
    case 242:
    case 241:
    case 240:
    case 239:
    case 238:
    case 237:
    case 236:
    case 235:
    case 234:
    case 229:
    case 228:
    case 227:
    case 224:
    case 223:
    case 222:
    case 221:
    case 220:
    case 219:
    case 218:
    case 216:
    case 214:
    case 213:
    case 212:
    case 211:
    case 210:
    case 208:
    case 207:
    case 206:
    case 205:
    case 204:
    case 203:
    case 200:
    case 199:
    case 198:
    case 197:
    case 185:
    case 184:
    case 179:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 233:
    case 232:
    case 231:
    case 230:
    case 226:
    case 183:
    case 182:
    case 181:
    case 180:
    case 178:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 176:
    case 175:
    case 174:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (which_alternative != 0)
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 10 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 925:
    case 924:
    case 173:
    case 170:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 9;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 11 ;
        }
      else
        {
   return 0;
        }
    case 172:
    case 169:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (which_alternative == 1)
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)) || ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0))) || ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 9;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 11 ;
        }
      else
        {
   return 0;
        }
    case 786:
    case 785:
    case 167:
    case 164:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 9;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 11 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 14 ;
        }
      else
        {
   return 0;
        }
    case 166:
    case 163:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (which_alternative == 1)
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)) || ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0))) || ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (!((1 << which_alternative) & 0x3)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 9;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 11 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x3)) && ((((1 << which_alternative) & 0x6)) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 14 ;
        }
      else
        {
   return 0;
        }
    case 171:
    case 168:
    case 165:
    case 162:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (which_alternative != 0)
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 156:
    case 155:
    case 151:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 9;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 11 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 14 ;
        }
      else
        {
   return 0;
        }
    case 790:
    case 789:
    case 150:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD))) || ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 9;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 11 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 14 ;
        }
      else
        {
   return 0;
        }
    case 159:
    case 158:
    case 157:
    case 154:
    case 153:
    case 152:
    case 149:
    case 148:
    case 147:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 3;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 5;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 926:
    case 139:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 9;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 12 ;
        }
      else
        {
   return 0;
        }
    case 137:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)) || (get_attr_memory (insn) == MEMORY_STORE)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((which_alternative == 1) && ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 136:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 2) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 2) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 2) && (((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)) || (get_attr_memory (insn) == MEMORY_STORE)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 2) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 2) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((which_alternative == 2) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || ((which_alternative == 2) && ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 9;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 12 ;
        }
      else
        {
   return 0;
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((1 << which_alternative) & 0xe))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)) || ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0))) || ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 4) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((which_alternative == 4) && ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 145:
    case 142:
    case 133:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (which_alternative != 0)
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 146:
    case 144:
    case 143:
    case 141:
    case 138:
    case 132:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 131:
    case 130:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 10 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 1033:
    case 1032:
    case 1016:
    case 1014:
    case 927:
    case 140:
    case 129:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 128:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x3)) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE)) && (which_alternative == 1)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x3)) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x3))) || ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 1)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 1))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x3)) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 1)))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 1)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) && (which_alternative == 1)))
        {
   return 10 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) && (which_alternative == 1)))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x3)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x3)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x3))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((which_alternative == 2) && ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 114:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (which_alternative == 1))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 1)) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative != 1)) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 1)) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative != 1)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 1)) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative != 1)) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 1))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 1)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 1)) || ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 3) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 3) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x3))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 2))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 113:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (which_alternative == 1))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 1)) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative != 1)) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 1)) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative != 1)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 1)) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative != 1)) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 1))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 1)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 1)) || ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 3) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 3) && ((memory_operand (recog_data.operand[1], DFmode)) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 3) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x3)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((which_alternative == 3) && ((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON))))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x3)))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 2))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((1 << which_alternative) & 0x7))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 4) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 4) && ((memory_operand (recog_data.operand[1], DFmode)) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 4) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || (((which_alternative == 4) && ((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON))))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 109:
    case 106:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((which_alternative != 1) || (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((which_alternative != 1) || (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((which_alternative != 1) || (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 101:
    case 100:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (!((1 << which_alternative) & 0x7))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 10 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 96:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((1 << which_alternative) & 0x18))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x7))) || ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x7)))) || ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x7)))) || ((get_attr_memory (insn) == MEMORY_NONE) && (((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x7))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x1f)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((!((1 << which_alternative) & 0x1f)) && (memory_operand (recog_data.operand[1], DFmode))) || (((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x1f)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_K8))) && ((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))))) || (((((ix86_tune) == (CPU_ATHLON))) && ((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x1f))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 95:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((1 << which_alternative) & 0x18))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x7))) || ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x7)))) || ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x7)))) || ((get_attr_memory (insn) == MEMORY_NONE) && (((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))))) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x7))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x1f)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((!((1 << which_alternative) & 0x1f)) && (memory_operand (recog_data.operand[1], DFmode))) || (((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x1f)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_K8))) && ((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))))) || (((((ix86_tune) == (CPU_ATHLON))) && ((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x1f))))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 988:
    case 987:
    case 986:
    case 985:
    case 984:
    case 983:
    case 982:
    case 981:
    case 980:
    case 979:
    case 978:
    case 977:
    case 976:
    case 975:
    case 974:
    case 973:
    case 972:
    case 971:
    case 970:
    case 969:
    case 968:
    case 967:
    case 955:
    case 954:
    case 953:
    case 951:
    case 950:
    case 949:
    case 948:
    case 947:
    case 946:
    case 945:
    case 944:
    case 943:
    case 942:
    case 941:
    case 940:
    case 939:
    case 938:
    case 937:
    case 936:
    case 935:
    case 934:
    case 933:
    case 932:
    case 931:
    case 930:
    case 102:
    case 97:
    case 92:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 91:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((1 << which_alternative) & 0x18)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (!((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (!((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (!((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x18)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x18))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x18))) || ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x7)))) || ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x7)))) || ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x7)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((((get_attr_memory (insn) == MEMORY_NONE) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (((1 << which_alternative) & 0x1e0)))) || ((get_attr_memory (insn) == MEMORY_LOAD) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (((1 << which_alternative) & 0x1e0))))) || ((get_attr_memory (insn) == MEMORY_STORE) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (((1 << which_alternative) & 0x1e0))))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x7))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x1e0)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((1 << which_alternative) & 0x1e0)) && (memory_operand (recog_data.operand[1], DFmode))) || (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x1e0)) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (get_attr_memory (insn) == MEMORY_LOAD)))) || ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x1e0)) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (get_attr_memory (insn) == MEMORY_LOAD)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x1f)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_K8))) && ((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0))))))) || (((((ix86_tune) == (CPU_ATHLON))) && ((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0))))))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x1f))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x1ff)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x1ff)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 90:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((1 << which_alternative) & 0x18)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (!((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (!((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (!((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x18)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x18))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x18))) || ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x7)))) || ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x7)))) || ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x7)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((((get_attr_memory (insn) == MEMORY_NONE) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (((1 << which_alternative) & 0x1e0)))) || ((get_attr_memory (insn) == MEMORY_LOAD) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (((1 << which_alternative) & 0x1e0))))) || ((get_attr_memory (insn) == MEMORY_STORE) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (((1 << which_alternative) & 0x1e0))))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) || ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x7))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x1e0)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((1 << which_alternative) & 0x1e0)) && (memory_operand (recog_data.operand[1], DFmode))) || (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x1e0)) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (get_attr_memory (insn) == MEMORY_LOAD)))) || ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x1e0)) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (get_attr_memory (insn) == MEMORY_LOAD)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x1f)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_K8))) && ((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0))))))) || (((((ix86_tune) == (CPU_ATHLON))) && ((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0))))))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x1f))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x1ff)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x1ff)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 89:
    case 88:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && (! (memory_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((which_alternative == 1) && (! (memory_operand (recog_data.operand[1], VOIDmode)))) && ((which_alternative == 1) && (memory_operand (recog_data.operand[1], VOIDmode)))) || (((which_alternative != 1) || (memory_operand (recog_data.operand[1], VOIDmode))) && ((which_alternative == 1) && (memory_operand (recog_data.operand[1], VOIDmode))))))
        {
   return 3;
        }
      else if (which_alternative != 1)
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 84:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 1;
        }
      else if (which_alternative == 4)
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_STORE) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))))) || ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode))))))) || ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((get_attr_memory (insn) == MEMORY_BOTH) || (which_alternative == 4))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x700)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((1 << which_alternative) & 0x700)) && (memory_operand (recog_data.operand[1], DFmode))) || ((which_alternative == 8) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 8) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x700)) && ((!((1 << which_alternative) & 0x111)) && (get_attr_memory (insn) == MEMORY_LOAD)))) || ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x700)) && ((!((1 << which_alternative) & 0x111)) && (get_attr_memory (insn) == MEMORY_LOAD)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 8) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x7e0)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_K8))) && (which_alternative == 8)) || (((((ix86_tune) == (CPU_ATHLON))) && (which_alternative == 8)) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x7e0))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0xe0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0xe0)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 83:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 1;
        }
      else if (which_alternative == 4)
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_STORE) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))))) || ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode))))))) || ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((get_attr_memory (insn) == MEMORY_BOTH) || (which_alternative == 4))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x700)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((1 << which_alternative) & 0x700)) && (memory_operand (recog_data.operand[1], DFmode))) || ((which_alternative == 8) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 8) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x700)) && ((!((1 << which_alternative) & 0x111)) && (get_attr_memory (insn) == MEMORY_LOAD)))) || ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x700)) && ((!((1 << which_alternative) & 0x111)) && (get_attr_memory (insn) == MEMORY_LOAD)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 8) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x7e0)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_K8))) && (which_alternative == 8)) || (((((ix86_tune) == (CPU_ATHLON))) && (which_alternative == 8)) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x7e0))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0xe0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0xe0)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 82:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((1 << which_alternative) & 0x3))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((((1 << which_alternative) & 0xc)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0xc))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0xc))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (((1 << which_alternative) & 0xc))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0xf)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((!((1 << which_alternative) & 0xf)) && (memory_operand (recog_data.operand[1], DFmode))) || ((which_alternative == 5) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 5) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0xf)) && ((which_alternative != 5) && (get_attr_memory (insn) == MEMORY_LOAD)))) || ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0xf)) && ((which_alternative != 5) && (get_attr_memory (insn) == MEMORY_LOAD)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0xf)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0xf)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 5) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xf)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_K8))) && (which_alternative == 5)) || (((((ix86_tune) == (CPU_ATHLON))) && (which_alternative == 5)) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0xf))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0xc)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0xc)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 76:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && (! (memory_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((which_alternative == 0) && (! (memory_operand (recog_data.operand[1], VOIDmode)))) && ((which_alternative == 0) && (memory_operand (recog_data.operand[1], VOIDmode)))) || (((which_alternative != 0) || (memory_operand (recog_data.operand[1], VOIDmode))) && ((which_alternative == 0) && (memory_operand (recog_data.operand[1], VOIDmode))))))
        {
   return 3;
        }
      else if (which_alternative != 0)
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 71:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_STORE) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))) || ((get_attr_memory (insn) == MEMORY_NONE) && ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0))) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 70:
    case 66:
    case 65:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_IMOV))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_type (insn) == TYPE_IMOV)) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (get_attr_type (insn) == TYPE_IMOV))) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_type (insn) == TYPE_IMOV)) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (get_attr_type (insn) == TYPE_IMOV))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_type (insn) == TYPE_IMOV)) && (get_attr_memory (insn) == MEMORY_NONE)) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (get_attr_type (insn) == TYPE_IMOV))) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_IMOV))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_IMOV)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_IMOV)) || ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_IMOVX))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_IMOVX)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOVX) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOVX) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 125:
    case 124:
    case 123:
    case 122:
    case 121:
    case 120:
    case 119:
    case 118:
    case 116:
    case 115:
    case 110:
    case 107:
    case 104:
    case 69:
    case 64:
    case 63:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 59:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && ((((optimize_size) != (0)) || ((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0))))) || ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_BOTH)) || (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))) && ((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))) && (get_attr_memory (insn) == MEMORY_BOTH))) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && ((((optimize_size) != (0)) || ((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0))))) || ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_LOAD)) || (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))) && ((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))) && (get_attr_memory (insn) == MEMORY_LOAD))) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && ((((optimize_size) != (0)) || ((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0))))) || ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_NONE)) || (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))) && ((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))) && (get_attr_memory (insn) == MEMORY_NONE))) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_STORE) && (((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))))) || ((get_attr_memory (insn) == MEMORY_NONE) && (((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 74:
    case 73:
    case 72:
    case 61:
    case 55:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE)) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 60:
    case 54:
    case 53:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE)) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 50:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_IMOV))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH))) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (get_attr_type (insn) == TYPE_IMOV))) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD))) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (get_attr_type (insn) == TYPE_IMOV))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && ((((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE))) || (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (get_attr_type (insn) == TYPE_IMOV))) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_IMOV))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_IMOV)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_IMOV)) || ((get_attr_memory (insn) == MEMORY_NONE) && (((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5)))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5))))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 87:
    case 47:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE)) || ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 6;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 553:
    case 551:
    case 86:
    case 68:
    case 52:
    case 46:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 4;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 3;
        }
      else
        {
   return 0;
        }
    case 85:
    case 67:
    case 51:
    case 45:
      if ((((ix86_tune) == (CPU_PENTIUM))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) || (((ix86_tune) == (CPU_K6)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 44:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode)))))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_STORE) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode)))))) || ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode))))))) || ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode)))) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0xe0)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((1 << which_alternative) & 0xe0)) && (memory_operand (recog_data.operand[1], DFmode))) || ((which_alternative == 5) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 5) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 5) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0xfc)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_K8))) && (which_alternative == 5)) || (((((ix86_tune) == (CPU_ATHLON))) && (which_alternative == 5)) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0xfc))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x1c)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x1c)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 43:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode)))))))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_STORE) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode)))))) || ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode))))))) || ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode))))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode)))) || ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0xe0)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((1 << which_alternative) & 0xe0)) && (memory_operand (recog_data.operand[1], DFmode))) || ((which_alternative == 5) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 5) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 5) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 3;
        }
      else if ((((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0xfc)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))) || (((((ix86_tune) == (CPU_K8))) && (which_alternative == 5)) || (((((ix86_tune) == (CPU_ATHLON))) && (which_alternative == 5)) || (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0xfc))))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x1c)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x1c)))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 401:
    case 399:
    case 397:
    case 396:
    case 393:
    case 347:
    case 341:
    case 321:
    case 319:
    case 299:
    case 297:
    case 244:
    case 108:
    case 105:
    case 103:
    case 81:
    case 80:
    case 62:
    case 56:
    case 42:
    case 41:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (memory_operand (recog_data.operand[1], VOIDmode))) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (memory_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 4;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 79:
    case 78:
    case 40:
    case 39:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (memory_operand (recog_data.operand[0], VOIDmode))))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[0], VOIDmode)))
        {
   return 4;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 77:
    case 58:
    case 57:
    case 49:
    case 48:
    case 38:
    case 37:
    case 36:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) || ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 35:
    case 32:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) && (((enum machine_mode) (recog_data.operand[1])->mode) == SFmode)) || ((get_attr_memory (insn) == MEMORY_LOAD) && (((enum machine_mode) (recog_data.operand[1])->mode) == SFmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 6;
        }
      else
        {
   return 0;
        }
    case 34:
    case 31:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (((enum machine_mode) (recog_data.operand[1])->mode) == SFmode))) || ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 1) && (((enum machine_mode) (recog_data.operand[1])->mode) == SFmode)))))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 5;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 6;
        }
      else
        {
   return 0;
        }
    case 33:
    case 30:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 3;
        }
      else
        {
   return 0;
        }
    case 25:
    case 23:
    case 21:
    case 20:
    case 19:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE)) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 2;
        }
      else
        {
   return 0;
        }
    case 285:
    case 284:
    case 283:
    case 17:
    case 16:
    case 15:
    case 14:
    case 13:
    case 12:
    case 11:
    case 10:
    case 9:
    case 8:
    case 7:
    case 6:
    case 5:
    case 4:
    case 3:
    case 2:
    case 1:
    case 0:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 2;
        }
      else if (((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)) || ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))) || ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 3;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 1;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 162728, "?");
    default:
      return 6;
    }
}
static int
internal_dfa_insn_code (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 1015:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 242 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 243 ;
        }
      else
        {
   return 273 ;
        }
    case 1009:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (which_alternative == 1))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (which_alternative == 1))
        {
   return 215 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 1))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 1008:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if ((which_alternative == 1) && (((ix86_tune) == (CPU_K8))))
        {
   return 214 ;
        }
      else if ((which_alternative == 1) && (((ix86_tune) == (CPU_ATHLON))))
        {
   return 215 ;
        }
      else if ((which_alternative == 1) && ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 1012:
    case 1011:
    case 1010:
    case 1004:
    case 1002:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 214 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 215 ;
        }
      else
        {
   return 273 ;
        }
    case 966:
    case 965:
    case 964:
    case 963:
    case 962:
    case 961:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 226 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 227 ;
        }
      else
        {
   return 273 ;
        }
    case 952:
      extract_constrain_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((optimize_size) != (0)))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 204 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 214 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 215 ;
        }
      else
        {
   return 273 ;
        }
    case 903:
    case 902:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 232 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 233 ;
        }
      else
        {
   return 273 ;
        }
    case 899:
    case 898:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 228 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 229 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 230 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 231 ;
        }
      else
        {
   return 273 ;
        }
    case 891:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 265 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 266 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 267 ;
        }
      else
        {
   return 273 ;
        }
    case 890:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 268 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 269 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 270 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 271 ;
        }
      else
        {
   return 273 ;
        }
    case 889:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 258 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 259 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 260 ;
        }
      else
        {
   return 273 ;
        }
    case 888:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 261 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 262 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 263 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 264 ;
        }
      else
        {
   return 273 ;
        }
    case 895:
    case 893:
    case 887:
    case 885:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 235 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 236 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 237 ;
        }
      else
        {
   return 273 ;
        }
    case 1028:
    case 1026:
    case 1024:
    case 894:
    case 892:
    case 886:
    case 884:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 238 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 239 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 240 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 241 ;
        }
      else
        {
   return 273 ;
        }
    case 881:
    case 880:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 27 ;
        }
      else
        {
   return 273 ;
        }
    case 879:
    case 878:
    case 870:
    case 869:
    case 865:
    case 864:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 219 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 1020:
    case 1019:
    case 1018:
    case 852:
      if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 76 ;
        }
      else
        {
   return 273 ;
        }
    case 851:
      if (((ix86_tune) == (CPU_K6)))
        {
   return 135 ;
        }
      else
        {
   return 273 ;
        }
    case 850:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 23 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 131 ;
        }
      else
        {
   return 273 ;
        }
    case 849:
      if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 859:
    case 858:
    case 857:
    case 827:
    case 826:
    case 825:
    case 824:
    case 823:
    case 822:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 131 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 219 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 871:
    case 842:
    case 841:
    case 840:
    case 839:
    case 838:
    case 837:
    case 836:
    case 835:
    case 834:
    case 833:
    case 832:
    case 818:
    case 817:
    case 816:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 71 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 219 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 883:
    case 882:
    case 863:
    case 813:
    case 812:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 27 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 877:
    case 862:
    case 810:
    case 809:
    case 808:
    case 807:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 73 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 217 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 218 ;
        }
      else
        {
   return 273 ;
        }
    case 876:
    case 875:
    case 874:
    case 873:
    case 872:
    case 868:
    case 867:
    case 866:
    case 861:
    case 860:
    case 856:
    case 855:
    case 854:
    case 831:
    case 830:
    case 829:
    case 828:
    case 815:
    case 814:
    case 811:
    case 806:
    case 805:
    case 804:
    case 803:
    case 802:
    case 801:
    case 800:
    case 799:
    case 798:
    case 797:
    case 796:
    case 795:
    case 794:
    case 793:
    case 792:
    case 791:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 219 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 923:
    case 921:
    case 788:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 255 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 256 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 257 ;
        }
      else
        {
   return 273 ;
        }
    case 922:
    case 920:
    case 787:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 89 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 255 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 256 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 257 ;
        }
      else
        {
   return 273 ;
        }
    case 775:
    case 774:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 82 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 83 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 232 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 233 ;
        }
      else
        {
   return 273 ;
        }
    case 771:
    case 770:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 96 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 97 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 99 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 228 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 229 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 230 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 231 ;
        }
      else
        {
   return 273 ;
        }
    case 769:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 27 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 104 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 223 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 224 ;
        }
      else
        {
   return 273 ;
        }
    case 768:
      extract_constrain_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0)))))
        {
   return 104 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0)))))
        {
   return 105 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 223 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 224 ;
        }
      else
        {
   return 273 ;
        }
    case 767:
    case 766:
    case 765:
    case 764:
    case 763:
    case 762:
    case 761:
    case 760:
    case 759:
    case 758:
    case 757:
    case 756:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 221 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 222 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 223 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 224 ;
        }
      else
        {
   return 273 ;
        }
    case 755:
    case 754:
    case 753:
    case 752:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 104 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 221 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 222 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 223 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 224 ;
        }
      else
        {
   return 273 ;
        }
    case 1030:
    case 1029:
    case 780:
    case 778:
    case 750:
    case 748:
    case 746:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 93 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else
        {
   return 273 ;
        }
    case 745:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 86 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 265 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 266 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 267 ;
        }
      else
        {
   return 273 ;
        }
    case 744:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 102 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 268 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 269 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 270 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 271 ;
        }
      else
        {
   return 273 ;
        }
    case 743:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 84 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 85 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 258 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 259 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 260 ;
        }
      else
        {
   return 273 ;
        }
    case 742:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 100 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 101 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 261 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 262 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 263 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 264 ;
        }
      else
        {
   return 273 ;
        }
    case 741:
    case 739:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 78 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 79 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 235 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 236 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 237 ;
        }
      else
        {
   return 273 ;
        }
    case 1027:
    case 1025:
    case 1023:
    case 740:
    case 738:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 94 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 95 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 238 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 239 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 240 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 241 ;
        }
      else
        {
   return 273 ;
        }
    case 736:
    case 735:
    case 734:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 90 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 91 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 92 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 207 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 208 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 928:
    case 783:
    case 782:
    case 777:
    case 776:
    case 737:
    case 733:
    case 732:
    case 731:
    case 730:
    case 725:
    case 724:
    case 723:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 98 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else
        {
   return 273 ;
        }
    case 721:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((1 << which_alternative) & 0x3))
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))))
        {
   return 215 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 720:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((1 << which_alternative) & 0x3))
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((((1 << which_alternative) & 0xc)) && ((optimize_size) != (0))) || ((which_alternative == 4) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0xc)) && (! ((optimize_size) != (0)))) || ((which_alternative == 4) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))))))
        {
   return 215 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 719:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0))))))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0))))))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0))))))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0)))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && (! ((optimize_size) != (0)))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0)))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && (! ((optimize_size) != (0)))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0)))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && (! ((optimize_size) != (0)))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0)))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && (! ((optimize_size) != (0)))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0)))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && (! ((optimize_size) != (0)))) || (!((1 << which_alternative) & 0x7))))))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((optimize_size) != (0)))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && (! ((optimize_size) != (0)))) || (!((1 << which_alternative) & 0x7))))))
        {
   return 215 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 707:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))))
        {
   return 215 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 706:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))))
        {
   return 215 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 705:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))))
        {
   return 215 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 848:
    case 847:
    case 846:
    case 845:
    case 844:
    case 843:
    case 821:
    case 820:
    case 819:
    case 727:
    case 726:
    case 704:
    case 703:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 75 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 219 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 729:
    case 702:
    case 701:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 210 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 700:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))))
        {
   return 215 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 699:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))))))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((((1 << which_alternative) & 0x3)) && ((optimize_size) != (0))) || ((which_alternative == 2) && ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0))))) || (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))))
        {
   return 215 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 728:
    case 722:
    case 698:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (memory_operand (recog_data.operand[1], DFmode)))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 214 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 215 ;
        }
      else
        {
   return 273 ;
        }
    case 695:
    case 694:
    case 693:
    case 692:
    case 691:
    case 690:
    case 689:
    case 688:
    case 687:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 10 ;
        }
      else
        {
   return 28 ;
        }
    case 672:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (which_alternative == 0)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((which_alternative == 1) && (((ix86_tune) == (CPU_K6))))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((which_alternative == 1) && ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 671:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode)))))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode)))))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode)))))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], DImode))))))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (which_alternative == 0)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], DImode)))))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], DImode)))))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 670:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode)))))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode)))))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode)))))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], SImode))))))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (which_alternative == 0)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], SImode)))))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], SImode)))))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 657:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 27 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 55 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 194 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 196 ;
        }
      else
        {
   return 273 ;
        }
    case 655:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((1 << which_alternative) & 0x3)))
        {
   return 27 ;
        }
      else if (!((1 << which_alternative) & 0x3))
        {
   return 28 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 55 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 194 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 196 ;
        }
      else
        {
   return 273 ;
        }
    case 656:
    case 654:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (((1 << which_alternative) & 0x3)))
        {
   return 55 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (!((1 << which_alternative) & 0x3))))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (!((1 << which_alternative) & 0x3))))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (!((1 << which_alternative) & 0x3))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (!((1 << which_alternative) & 0x3))))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 193 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((1 << which_alternative) & 0x3)))
        {
   return 194 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 195 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((1 << which_alternative) & 0x3)))
        {
   return 196 ;
        }
      else
        {
   return 273 ;
        }
    case 653:
    case 652:
    case 651:
    case 649:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 650:
    case 648:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 25 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 109 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 160 ;
        }
      else
        {
   return 273 ;
        }
    case 647:
    case 646:
    case 645:
    case 644:
    case 643:
    case 642:
    case 641:
    case 640:
    case 639:
    case 638:
    case 637:
    case 636:
    case 635:
    case 634:
    case 633:
    case 632:
    case 631:
    case 630:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else
        {
   return 28 ;
        }
    case 629:
    case 628:
    case 627:
    case 626:
    case 625:
    case 624:
    case 623:
    case 622:
    case 621:
    case 620:
    case 619:
    case 618:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 1;
        }
      else
        {
   return 28 ;
        }
    case 617:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 3;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 37 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 161 ;
        }
      else
        {
   return 273 ;
        }
    case 616:
    case 615:
    case 614:
    case 613:
    case 612:
    case 611:
    case 610:
    case 607:
    case 604:
    case 600:
    case 596:
    case 592:
    case 591:
    case 590:
    case 589:
    case 588:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 15 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 69 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 142 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 192 ;
        }
      else
        {
   return 273 ;
        }
    case 608:
    case 605:
    case 603:
    case 601:
    case 599:
    case 597:
    case 595:
    case 593:
    case 587:
    case 586:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 15 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 67 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 142 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 192 ;
        }
      else
        {
   return 273 ;
        }
    case 1031:
    case 1017:
    case 1013:
    case 1007:
    case 1006:
    case 1005:
    case 1003:
    case 1001:
    case 1000:
    case 999:
    case 998:
    case 997:
    case 996:
    case 995:
    case 994:
    case 993:
    case 992:
    case 991:
    case 990:
    case 989:
    case 960:
    case 959:
    case 958:
    case 957:
    case 956:
    case 929:
    case 919:
    case 918:
    case 917:
    case 916:
    case 915:
    case 914:
    case 913:
    case 912:
    case 911:
    case 910:
    case 909:
    case 908:
    case 907:
    case 906:
    case 905:
    case 904:
    case 896:
    case 784:
    case 669:
    case 663:
    case 585:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else
        {
   return 273 ;
        }
    case 584:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (which_alternative == 0))
        {
   return 15 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 67 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 68 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (which_alternative == 0))
        {
   return 142 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 191 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 192 ;
        }
      else
        {
   return 273 ;
        }
    case 609:
    case 606:
    case 602:
    case 598:
    case 594:
    case 583:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 15 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 65 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 142 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 192 ;
        }
      else
        {
   return 273 ;
        }
    case 897:
    case 781:
    case 779:
    case 751:
    case 749:
    case 747:
    case 666:
    case 660:
    case 582:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 77 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else
        {
   return 273 ;
        }
    case 581:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (which_alternative == 0))
        {
   return 15 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 65 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 66 ;
        }
      else if ((which_alternative == 1) && (((ix86_tune) == (CPU_PENTIUMPRO))))
        {
   return 77 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (which_alternative == 0))
        {
   return 142 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 191 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 192 ;
        }
      else
        {
   return 273 ;
        }
    case 580:
    case 579:
    case 578:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (mult_operator (recog_data.operand[3], XFmode)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 14 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 65 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 66 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], XFmode)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 142 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], XFmode)))
        {
   return 185 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 187 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 188 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 189 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 190 ;
        }
      else
        {
   return 273 ;
        }
    case 577:
    case 576:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (mult_operator (recog_data.operand[3], XFmode)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 14 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], XFmode)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 142 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], XFmode)))
        {
   return 185 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 187 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 188 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 189 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 190 ;
        }
      else
        {
   return 273 ;
        }
    case 575:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (mult_operator (recog_data.operand[3], XFmode)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 14 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 69 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 70 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], XFmode)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 142 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], XFmode)))
        {
   return 185 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 187 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 188 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 189 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 190 ;
        }
      else
        {
   return 273 ;
        }
    case 574:
    case 573:
    case 572:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (mult_operator (recog_data.operand[3], DFmode)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 14 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 65 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 66 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], DFmode)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 142 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], DFmode)))
        {
   return 185 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 187 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 188 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 189 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 190 ;
        }
      else
        {
   return 273 ;
        }
    case 571:
    case 570:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (mult_operator (recog_data.operand[3], DFmode)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 14 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], DFmode)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 142 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], DFmode)))
        {
   return 185 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 187 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 188 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 189 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 190 ;
        }
      else
        {
   return 273 ;
        }
    case 569:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 235 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 236 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEADD))
        {
   return 237 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 258 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 259 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 260 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 265 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 266 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEDIV))
        {
   return 267 ;
        }
      else
        {
   return 273 ;
        }
    case 568:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 14 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode)))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode)))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 67 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 68 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 142 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 185 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 187 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 188 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 189 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 190 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 235 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 236 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEADD))
        {
   return 237 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 258 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 259 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 260 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 261 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 262 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 263 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 264 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 265 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 266 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEDIV))
        {
   return 267 ;
        }
      else
        {
   return 273 ;
        }
    case 567:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (mult_operator (recog_data.operand[3], DFmode)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 14 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], DFmode))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 67 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 68 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], DFmode)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 142 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], DFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], DFmode)))
        {
   return 185 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 187 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 188 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 189 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 190 ;
        }
      else
        {
   return 273 ;
        }
    case 566:
    case 565:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 14 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], SFmode)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 142 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 185 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 187 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 188 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 189 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 190 ;
        }
      else
        {
   return 273 ;
        }
    case 564:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_SSEADD)))
        {
   return 78 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_SSEADD)))
        {
   return 79 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 84 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 85 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return 86 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return 87 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 235 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 236 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEADD))
        {
   return 237 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 258 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 259 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 260 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 265 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 266 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEDIV))
        {
   return 267 ;
        }
      else
        {
   return 273 ;
        }
    case 563:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 14 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 65 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 66 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_SSEADD)))
        {
   return 78 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_SSEADD)))
        {
   return 79 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 84 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 85 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return 86 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return 87 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 142 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 185 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 187 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 188 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 189 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 190 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 235 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEADD) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 236 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEADD))
        {
   return 237 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 258 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 259 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 260 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 261 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 262 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 263 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 264 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 265 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_SSEDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 266 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_SSEDIV))
        {
   return 267 ;
        }
      else
        {
   return 273 ;
        }
    case 562:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 14 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_FOP)))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 65 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_FDIV)))
        {
   return 66 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], SFmode)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 142 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_unit (insn) == UNIT_INTEGER) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FOP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_type (insn) == TYPE_FOP))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 185 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 187 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_type (insn) == TYPE_FDIV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 188 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 189 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_type (insn) == TYPE_FDIV))
        {
   return 190 ;
        }
      else
        {
   return 273 ;
        }
    case 561:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (! (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (mult_operator (recog_data.operand[3], XFmode)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (! (mult_operator (recog_data.operand[3], XFmode)))))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (! (mult_operator (recog_data.operand[3], XFmode)))))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (! (mult_operator (recog_data.operand[3], XFmode)))))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (! (mult_operator (recog_data.operand[3], XFmode)))))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (mult_operator (recog_data.operand[3], XFmode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (mult_operator (recog_data.operand[3], XFmode))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (mult_operator (recog_data.operand[3], XFmode))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], XFmode)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((! (mult_operator (recog_data.operand[3], XFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((! (mult_operator (recog_data.operand[3], XFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (! (mult_operator (recog_data.operand[3], XFmode))))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], XFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], XFmode)))
        {
   return 185 ;
        }
      else
        {
   return 273 ;
        }
    case 560:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 235 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 236 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (! (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 237 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 258 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 259 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 260 ;
        }
      else
        {
   return 273 ;
        }
    case 559:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 185 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 235 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 236 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 237 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 238 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 239 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 240 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 241 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 258 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 259 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 260 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 261 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 262 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 263 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 264 ;
        }
      else
        {
   return 273 ;
        }
    case 557:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 78 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 79 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 84 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 85 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 235 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 236 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (! (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 237 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 258 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 259 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 260 ;
        }
      else
        {
   return 273 ;
        }
    case 556:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 78 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode))))))
        {
   return 79 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 84 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 85 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 185 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 235 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 236 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 237 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 238 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 239 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 240 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 241 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 258 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 259 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 260 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 261 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 262 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 263 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 264 ;
        }
      else
        {
   return 273 ;
        }
    case 558:
    case 555:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (! (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 12 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 13 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 49 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 50 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 51 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (! (mult_operator (recog_data.operand[3], SFmode)))))
        {
   return 52 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 63 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 64 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 140 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((mult_operator (recog_data.operand[3], SFmode)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 141 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 180 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((! (mult_operator (recog_data.operand[3], SFmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 181 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (! (mult_operator (recog_data.operand[3], SFmode))))
        {
   return 182 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 183 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((mult_operator (recog_data.operand[3], SFmode)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 184 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return 185 ;
        }
      else
        {
   return 273 ;
        }
    case 554:
    case 552:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 20 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 110 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 163 ;
        }
      else
        {
   return 273 ;
        }
    case 553:
    case 551:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 7;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 30 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 162 ;
        }
      else
        {
   return 273 ;
        }
    case 534:
    case 533:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 9;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 40 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 131 ;
        }
      else if (((ix86_tune) == (CPU_ATHLON)))
        {
   return 148 ;
        }
      else if (((ix86_tune) == (CPU_K8)))
        {
   return 149 ;
        }
      else
        {
   return 273 ;
        }
    case 522:
    case 521:
    case 520:
    case 519:
    case 518:
    case 517:
    case 516:
    case 515:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 10 ;
        }
      else
        {
   return 28 ;
        }
    case 527:
    case 514:
    case 513:
    case 512:
    case 511:
    case 510:
    case 509:
    case 498:
    case 497:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 11 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (memory_operand (recog_data.operand[0], VOIDmode))))
        {
   return 38 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[0], VOIDmode)))
        {
   return 39 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 130 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 143 ;
        }
      else
        {
   return 273 ;
        }
    case 901:
    case 900:
    case 496:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 225 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 226 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 227 ;
        }
      else
        {
   return 273 ;
        }
    case 773:
    case 772:
    case 495:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 80 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 81 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 225 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 226 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 227 ;
        }
      else
        {
   return 273 ;
        }
    case 494:
    case 493:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (! (memory_operand (recog_data.operand[0], VOIDmode))))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (memory_operand (recog_data.operand[0], VOIDmode))))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[0], VOIDmode)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (! (memory_operand (recog_data.operand[0], VOIDmode))))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (memory_operand (recog_data.operand[0], VOIDmode)))
        {
   return 123 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (! (memory_operand (recog_data.operand[0], VOIDmode))))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (memory_operand (recog_data.operand[0], VOIDmode)))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 492:
    case 490:
    case 479:
    case 477:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const1_operand (recog_data.operand[1], VOIDmode))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const1_operand (recog_data.operand[1], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const1_operand (recog_data.operand[1], VOIDmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const1_operand (recog_data.operand[1], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const1_operand (recog_data.operand[1], VOIDmode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const1_operand (recog_data.operand[1], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 491:
    case 489:
    case 488:
    case 487:
    case 486:
    case 485:
    case 484:
    case 483:
    case 482:
    case 481:
    case 480:
    case 478:
    case 476:
    case 475:
    case 474:
    case 473:
    case 472:
    case 471:
    case 470:
    case 469:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const1_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const1_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const1_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 466:
    case 464:
    case 442:
    case 440:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const_int_operand (recog_data.operand[1], VOIDmode))) && (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const_int_operand (recog_data.operand[1], VOIDmode)))) && (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const_int_operand (recog_data.operand[1], VOIDmode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const_int_operand (recog_data.operand[1], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 424:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 468:
    case 467:
    case 465:
    case 463:
    case 462:
    case 461:
    case 460:
    case 459:
    case 458:
    case 457:
    case 456:
    case 455:
    case 454:
    case 453:
    case 452:
    case 451:
    case 448:
    case 447:
    case 446:
    case 445:
    case 444:
    case 443:
    case 441:
    case 439:
    case 438:
    case 437:
    case 436:
    case 435:
    case 434:
    case 433:
    case 432:
    case 431:
    case 430:
    case 429:
    case 428:
    case 427:
    case 421:
    case 420:
    case 419:
    case 418:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const_int_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const_int_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const_int_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const_int_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (const_int_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (const_int_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 426:
    case 425:
    case 417:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative == 1) && (const_int_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((which_alternative != 1) || (! (const_int_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative == 1) && (const_int_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((which_alternative != 1) || (! (const_int_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative == 1) && (const_int_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((which_alternative != 1) || (! (const_int_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (! (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 414:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((get_attr_type (insn) == TYPE_ALU) || (which_alternative == 2))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((get_attr_type (insn) == TYPE_ALU) || (which_alternative == 2))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((get_attr_type (insn) == TYPE_ALU) || (which_alternative == 2))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 2)))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (which_alternative == 2))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 2))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 413:
    case 412:
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 411:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 1)))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (which_alternative == 1))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 1))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 410:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode))))))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode))))))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 408:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative != 0) || ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative != 0) || ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative != 0) || ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 1)))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 0) && ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode)))))))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && ((which_alternative == 0) && ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode)))))))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && ((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((which_alternative == 0) && ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (which_alternative == 1))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 1))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 406:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 161 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 164 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 167 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 169 ;
        }
      else
        {
   return 273 ;
        }
    case 416:
    case 415:
    case 409:
    case 403:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_type (insn) == TYPE_ALU)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_type (insn) == TYPE_ALU)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_type (insn) == TYPE_ALU)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 407:
    case 402:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative != 0) || (get_attr_type (insn) == TYPE_ALU))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative != 0) || (get_attr_type (insn) == TYPE_ALU))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((which_alternative != 0) || (get_attr_type (insn) == TYPE_ALU))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 1)))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 35 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((! (get_attr_memory (insn) == MEMORY_NONE)) && (get_attr_type (insn) == TYPE_ISHIFT)))
        {
   return 36 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (get_attr_type (insn) == TYPE_ALU)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ISHIFT) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_ALU) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (which_alternative == 1))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 1))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 391:
    case 390:
    case 389:
    case 388:
    case 387:
    case 386:
    case 376:
    case 375:
    case 374:
    case 373:
    case 372:
    case 371:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 53 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 186 ;
        }
      else
        {
   return 273 ;
        }
    case 400:
    case 398:
    case 395:
    case 394:
    case 392:
    case 361:
    case 360:
    case 359:
    case 358:
    case 357:
    case 356:
    case 355:
    case 354:
    case 353:
    case 352:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 294:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x3))))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x3))))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x3))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (((1 << which_alternative) & 0x3))))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 290:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x3))))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x3))))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x3))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (((1 << which_alternative) & 0x3))))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 288:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x7))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 3)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x7))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x7))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative == 3)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x7))))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x7))))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x7))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (((1 << which_alternative) & 0x7))))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 282:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else
        {
   return 273 ;
        }
    case 281:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x5)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((!((1 << which_alternative) & 0x5)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x5)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((!((1 << which_alternative) & 0x5)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else
        {
   return 273 ;
        }
    case 280:
    case 279:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative != 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative != 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else
        {
   return 273 ;
        }
    case 278:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((!((1 << which_alternative) & 0xa)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0xa)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((!((1 << which_alternative) & 0xa)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0xa)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else
        {
   return 273 ;
        }
    case 277:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 45 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 46 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 119 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 120 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 157 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 158 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 161 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 164 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 167 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 169 ;
        }
      else
        {
   return 273 ;
        }
    case 276:
    case 271:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 47 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 48 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 119 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 120 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 157 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 158 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 161 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 164 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 167 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 169 ;
        }
      else
        {
   return 273 ;
        }
    case 274:
    case 268:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 119 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 120 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 157 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 158 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 161 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 164 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 167 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 169 ;
        }
      else
        {
   return 273 ;
        }
    case 265:
    case 264:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 2;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 43 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 44 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 119 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 120 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 157 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 158 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 161 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 164 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 167 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 169 ;
        }
      else
        {
   return 273 ;
        }
    case 263:
    case 262:
    case 260:
    case 259:
    case 257:
    case 255:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 41 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 42 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 116 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 151 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 153 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 154 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 156 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 161 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 164 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 167 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 169 ;
        }
      else
        {
   return 273 ;
        }
    case 261:
    case 258:
    case 256:
    case 254:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 41 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 42 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 116 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 151 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 152 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 154 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 155 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 156 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 161 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 164 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 167 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 169 ;
        }
      else
        {
   return 273 ;
        }
    case 253:
    case 252:
    case 251:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 41 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 42 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 116 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 151 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 153 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 154 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 156 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((! (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 161 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((! (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 164 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((! (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 167 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((! (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 169 ;
        }
      else
        {
   return 273 ;
        }
    case 250:
      extract_constrain_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 41 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 42 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 116 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 151 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 153 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 154 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 156 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 0) && (! (((ix86_tune) == (CPU_ATHLON))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative != 0) || (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 161 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 0) && (! (((ix86_tune) == (CPU_ATHLON))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative != 0) || (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 164 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 0) && (! (((ix86_tune) == (CPU_ATHLON))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative != 0) || (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 167 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative == 0) && (! (((ix86_tune) == (CPU_ATHLON))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((which_alternative != 0) || (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 169 ;
        }
      else
        {
   return 273 ;
        }
    case 249:
    case 248:
      extract_constrain_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 41 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 42 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 116 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 151 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 153 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 154 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 156 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 161 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 164 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 167 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 169 ;
        }
      else
        {
   return 273 ;
        }
    case 247:
      extract_constrain_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 0;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 41 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 42 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 116 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 151 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 152 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 154 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 155 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 156 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 161 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 164 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 167 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((! (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative != 1) && ((which_alternative != 2) || (! (memory_operand (recog_data.operand[1], VOIDmode)))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 169 ;
        }
      else
        {
   return 273 ;
        }
    case 217:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (incdec_operand (recog_data.operand[2], QImode))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (incdec_operand (recog_data.operand[2], QImode))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((! (incdec_operand (recog_data.operand[2], QImode))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 215:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 3)))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative != 3)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative != 3)))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative != 3)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (which_alternative != 3)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative != 3) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative != 3) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative != 3) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (which_alternative == 3))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 3))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 339:
    case 338:
    case 337:
    case 317:
    case 316:
    case 315:
    case 295:
    case 242:
    case 241:
    case 240:
    case 214:
    case 212:
    case 211:
    case 210:
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 209:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 2)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x3))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 2)))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative != 2)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative != 2)))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative != 2)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (which_alternative != 2)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative != 2) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative != 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative != 2) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (which_alternative == 2))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 2))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 202:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative != 0) || (pic_symbolic_operand (recog_data.operand[2], SImode)))))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative != 0) || (pic_symbolic_operand (recog_data.operand[2], SImode))))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative != 0) || (pic_symbolic_operand (recog_data.operand[2], SImode))))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 201:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], SImode)))))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], SImode))))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], SImode))))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 196:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], DImode)))))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC))))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_INCDEC)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], DImode))))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], DImode))))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 195:
    case 194:
    case 193:
    case 192:
    case 191:
    case 190:
    case 189:
    case 188:
    case 187:
    case 186:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 24 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 34 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 150 ;
        }
      else
        {
   return 273 ;
        }
    case 350:
    case 349:
    case 348:
    case 346:
    case 345:
    case 344:
    case 343:
    case 342:
    case 340:
    case 336:
    case 335:
    case 334:
    case 333:
    case 332:
    case 331:
    case 330:
    case 329:
    case 328:
    case 327:
    case 326:
    case 325:
    case 324:
    case 323:
    case 322:
    case 320:
    case 318:
    case 314:
    case 313:
    case 312:
    case 311:
    case 310:
    case 309:
    case 308:
    case 307:
    case 306:
    case 305:
    case 304:
    case 303:
    case 302:
    case 301:
    case 300:
    case 298:
    case 296:
    case 293:
    case 292:
    case 291:
    case 289:
    case 246:
    case 245:
    case 243:
    case 239:
    case 238:
    case 237:
    case 236:
    case 235:
    case 234:
    case 229:
    case 228:
    case 227:
    case 224:
    case 223:
    case 222:
    case 221:
    case 220:
    case 219:
    case 218:
    case 216:
    case 213:
    case 208:
    case 207:
    case 206:
    case 205:
    case 204:
    case 203:
    case 200:
    case 199:
    case 198:
    case 197:
    case 185:
    case 184:
    case 179:
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 233:
    case 232:
    case 231:
    case 230:
    case 226:
    case 183:
    case 182:
    case 181:
    case 180:
    case 178:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 176:
    case 175:
    case 174:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (which_alternative != 0)
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 60 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 62 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 170 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 171 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 174 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 175 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 177 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 179 ;
        }
      else
        {
   return 273 ;
        }
    case 925:
    case 924:
    case 173:
    case 170:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 246 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 247 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 248 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 249 ;
        }
      else
        {
   return 273 ;
        }
    case 172:
    case 169:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (which_alternative == 1)
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 177 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 179 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 246 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 247 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 248 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 249 ;
        }
      else
        {
   return 273 ;
        }
    case 786:
    case 785:
    case 167:
    case 164:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 88 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 247 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 248 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 249 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 250 ;
        }
      else
        {
   return 273 ;
        }
    case 166:
    case 163:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (which_alternative == 1)
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (!((1 << which_alternative) & 0x3)))
        {
   return 88 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 177 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 179 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 247 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 248 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 249 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x3)) && ((((1 << which_alternative) & 0x6)) && (get_attr_memory (insn) == MEMORY_NONE))))
        {
   return 250 ;
        }
      else
        {
   return 273 ;
        }
    case 171:
    case 168:
    case 165:
    case 162:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (which_alternative != 0)
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 177 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 179 ;
        }
      else
        {
   return 273 ;
        }
    case 156:
    case 155:
    case 151:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 247 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 248 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 249 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 250 ;
        }
      else
        {
   return 273 ;
        }
    case 790:
    case 789:
    case 150:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 88 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 247 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 248 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 249 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 250 ;
        }
      else
        {
   return 273 ;
        }
    case 159:
    case 158:
    case 157:
    case 154:
    case 153:
    case 152:
    case 149:
    case 148:
    case 147:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 12 ;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 54 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 178 ;
        }
      else
        {
   return 273 ;
        }
    case 926:
    case 139:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 251 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 252 ;
        }
      else
        {
   return 273 ;
        }
    case 137:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 177 ;
        }
      else if ((which_alternative == 1) && ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 179 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 242 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 243 ;
        }
      else
        {
   return 273 ;
        }
    case 136:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 2) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 2) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 2) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 2) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 2) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 177 ;
        }
      else if ((which_alternative == 2) && ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 179 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 251 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 252 ;
        }
      else
        {
   return 273 ;
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((1 << which_alternative) & 0xe))
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 177 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 179 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 4) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 242 ;
        }
      else if ((which_alternative == 4) && ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 243 ;
        }
      else
        {
   return 273 ;
        }
    case 145:
    case 142:
    case 133:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (which_alternative != 0)
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 177 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 179 ;
        }
      else
        {
   return 273 ;
        }
    case 146:
    case 144:
    case 143:
    case 141:
    case 138:
    case 132:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 177 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 179 ;
        }
      else
        {
   return 273 ;
        }
    case 131:
    case 130:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 60 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 62 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 170 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 171 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 174 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 175 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 177 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 179 ;
        }
      else
        {
   return 273 ;
        }
    case 1033:
    case 1032:
    case 1016:
    case 1014:
    case 927:
    case 140:
    case 129:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 242 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 243 ;
        }
      else
        {
   return 273 ;
        }
    case 128:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x3)) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE)) && (which_alternative == 1)))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x3)) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x3))))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 1)))
        {
   return 60 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 0)))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 1)))
        {
   return 62 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x3)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 1)))
        {
   return 170 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 1)))
        {
   return 171 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) && (which_alternative == 1)))
        {
   return 174 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)) && (which_alternative == 1)))
        {
   return 175 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x3)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x3)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 177 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x3)))
        {
   return 179 ;
        }
      else if (((((ix86_tune) == (CPU_K8))) || (((ix86_tune) == (CPU_ATHLON)))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 242 ;
        }
      else if ((which_alternative == 2) && ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))))
        {
   return 243 ;
        }
      else
        {
   return 273 ;
        }
    case 114:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (which_alternative == 1))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative != 1)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 1)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative != 1)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 1)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative != 1)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 1)))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 1)))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 1)))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 3) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 3) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x3)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x3)))
        {
   return 216 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 219 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 2))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 113:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (which_alternative == 1))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative != 1)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 1)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative != 1)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (which_alternative == 1)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (which_alternative != 1)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 1)))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 1)))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (which_alternative == 1)))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 3) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 3) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 3) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x3)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 3) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 3) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x3)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if ((which_alternative == 3) && (((ix86_tune) == (CPU_K8))))
        {
   return 214 ;
        }
      else if ((which_alternative == 3) && (((ix86_tune) == (CPU_ATHLON))))
        {
   return 215 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x3)))
        {
   return 216 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((which_alternative == 2) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 219 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 2))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((1 << which_alternative) & 0x7))
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 4) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 4) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 4) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 4) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 4) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 4) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 213 ;
        }
      else if ((which_alternative == 4) && (((ix86_tune) == (CPU_K8))))
        {
   return 214 ;
        }
      else if ((which_alternative == 4) && (((ix86_tune) == (CPU_ATHLON))))
        {
   return 215 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 109:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative != 1) || (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative != 1) || (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative != 1) || (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 106:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative != 1) || (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative != 1) || (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative == 1) && (! (get_attr_imm_disp (insn) == IMM_DISP_TRUE))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative != 1) || (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 114 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 101:
    case 100:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 5;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (!((1 << which_alternative) & 0x7))
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 60 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 62 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 170 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 171 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 174 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 175 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 177 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 179 ;
        }
      else
        {
   return 273 ;
        }
    case 96:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((1 << which_alternative) & 0x18))
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x7))))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x7))))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x7))))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0))))))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0))))))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0))))))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 177 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x7)))
        {
   return 179 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x1f)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x1f)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x1f)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))))
        {
   return 215 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x1f)))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 95:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((1 << which_alternative) & 0x18))
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x7))))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x7))))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x7))))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0))))))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0))))))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0))))))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 177 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x7)))
        {
   return 179 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x1f)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x1f)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x1f)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((which_alternative == 5) && ((optimize_size) != (0))) || ((which_alternative == 6) && ((optimize_size) != (0)))) || ((((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((! ((optimize_size) != (0))) && (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)))))))
        {
   return 215 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x1f)))
        {
   return 216 ;
        }
      else
        {
   return 273 ;
        }
    case 988:
    case 987:
    case 986:
    case 985:
    case 984:
    case 983:
    case 982:
    case 981:
    case 980:
    case 979:
    case 978:
    case 977:
    case 976:
    case 975:
    case 974:
    case 973:
    case 972:
    case 971:
    case 970:
    case 969:
    case 968:
    case 967:
    case 955:
    case 954:
    case 953:
    case 951:
    case 950:
    case 949:
    case 948:
    case 947:
    case 946:
    case 945:
    case 944:
    case 943:
    case 942:
    case 941:
    case 940:
    case 939:
    case 938:
    case 937:
    case 936:
    case 935:
    case 934:
    case 933:
    case 932:
    case 931:
    case 930:
    case 102:
    case 97:
    case 92:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else
        {
   return 273 ;
        }
    case 91:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((1 << which_alternative) & 0x18)))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (!((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (!((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (!((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x18))))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x18))))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x18))))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x7))))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x7))))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x7))))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (((1 << which_alternative) & 0x1e0)))))
        {
   return 90 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (((1 << which_alternative) & 0x1e0)))))
        {
   return 91 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (((1 << which_alternative) & 0x1e0)))))
        {
   return 92 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 177 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x7)))
        {
   return 179 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x1e0)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x1e0)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x1e0)) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 207 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x1e0)) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 208 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x1f)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))))
        {
   return 215 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x1f)))
        {
   return 216 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x1ff)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 219 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x1ff)))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 90:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_NONE) || (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 4;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((((1 << which_alternative) & 0x7)) && ((immediate_operand (recog_data.operand[1], VOIDmode)) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return 6;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((1 << which_alternative) & 0x18)))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (!((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (!((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (!((1 << which_alternative) & 0x18))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x18))))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x18))))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x18))))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((1 << which_alternative) & 0x7))))
        {
   return 58 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0x7))))
        {
   return 59 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0x7))))
        {
   return 61 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (((1 << which_alternative) & 0x1e0)))))
        {
   return 90 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (((1 << which_alternative) & 0x1e0)))))
        {
   return 91 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (((1 << which_alternative) & 0x1e0)))))
        {
   return 92 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))))
        {
   return 106 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))))
        {
   return 107 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))))
        {
   return 108 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 139 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x18)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 172 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 173 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 176 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 177 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x7)))
        {
   return 179 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x1e0)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x1e0)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x1e0)) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 207 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x1e0)) && ((((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 208 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0x1f)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x1f)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((which_alternative == 5) && (((! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))) || (! ((((target_flags & 0x00008000) != 0)) != (0)))) || (! ((optimize_size) == (0))))) || ((which_alternative == 6) && ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || ((which_alternative == 5) && ((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && (((((target_flags & 0x00008000) != 0)) != (0)) && ((optimize_size) == (0)))))))
        {
   return 215 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x1f)))
        {
   return 216 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x1ff)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 219 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0x1ff)))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 89:
    case 88:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 1) && (! (memory_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative != 1) || (memory_operand (recog_data.operand[1], VOIDmode))) && ((which_alternative == 1) && (memory_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 19 ;
        }
      else if (which_alternative != 1)
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 131 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 145 ;
        }
      else
        {
   return 273 ;
        }
    case 84:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if (which_alternative == 4)
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))))))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))))))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))))))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode))))))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((get_attr_memory (insn) == MEMORY_BOTH) || (which_alternative == 4))))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x700)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x700)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 8) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 8) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x700)) && ((!((1 << which_alternative) & 0x111)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 207 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x700)) && ((!((1 << which_alternative) & 0x111)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 208 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 8) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 8) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x7e0)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (which_alternative == 8))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (which_alternative == 8))
        {
   return 215 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x7e0)))
        {
   return 216 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0xe0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 219 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0xe0)))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 83:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if (which_alternative == 4)
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))))))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))))))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))))))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode))))))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((get_attr_memory (insn) == MEMORY_BOTH) || (which_alternative == 4))))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x700)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x700)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 8) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 8) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x700)) && ((!((1 << which_alternative) & 0x111)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 207 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x700)) && ((!((1 << which_alternative) & 0x111)) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 208 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0x7e0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 8) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 8) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x7e0)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (which_alternative == 8))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (which_alternative == 8))
        {
   return 215 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x7e0)))
        {
   return 216 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0xe0)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 219 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0xe0)))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 82:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if (((1 << which_alternative) & 0x3))
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((((1 << which_alternative) & 0xc)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((1 << which_alternative) & 0xc))))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((1 << which_alternative) & 0xc))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_BOTH) && (((1 << which_alternative) & 0xc))))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0xf)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0xf)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 5) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 5) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0xf)) && ((which_alternative != 5) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 207 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0xf)) && ((which_alternative != 5) && (get_attr_memory (insn) == MEMORY_LOAD))))
        {
   return 208 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((!((1 << which_alternative) & 0xf)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((!((1 << which_alternative) & 0xf)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 5) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 5) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xf)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (which_alternative == 5))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (which_alternative == 5))
        {
   return 215 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (!((1 << which_alternative) & 0xf)))
        {
   return 216 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0xc)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 219 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0xc)))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 76:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((which_alternative == 0) && (! (memory_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((which_alternative != 0) || (memory_operand (recog_data.operand[1], VOIDmode))) && ((which_alternative == 0) && (memory_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 19 ;
        }
      else if (which_alternative != 0)
        {
   return 28 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 131 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 145 ;
        }
      else
        {
   return 273 ;
        }
    case 71:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 70:
    case 66:
    case 65:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_IMOV))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (get_attr_type (insn) == TYPE_IMOV))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_type (insn) == TYPE_IMOV)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (get_attr_type (insn) == TYPE_IMOV))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_type (insn) == TYPE_IMOV)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (get_attr_type (insn) == TYPE_IMOV))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_IMOV)))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_IMOV)))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_IMOV)))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_IMOVX)))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_IMOVX)))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOVX) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOVX) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOVX) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 125:
    case 124:
    case 123:
    case 122:
    case 121:
    case 120:
    case 119:
    case 118:
    case 116:
    case 115:
    case 110:
    case 107:
    case 104:
    case 69:
    case 64:
    case 63:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 74:
    case 73:
    case 72:
    case 61:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 59:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && ((((optimize_size) != (0)) || ((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0))))) || ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))) && ((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && ((((optimize_size) != (0)) || ((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0))))) || ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))) && ((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && ((((optimize_size) != (0)) || ((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0))))) || ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && ((((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))) && ((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || ((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))))))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))))))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))))))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 399:
    case 105:
    case 56:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 55:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 60:
    case 54:
    case 53:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 52:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 7;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 30 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 162 ;
        }
      else
        {
   return 273 ;
        }
    case 50:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_type (insn) == TYPE_IMOV))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 17 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (get_attr_type (insn) == TYPE_IMOV))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (get_attr_type (insn) == TYPE_IMOV))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_PU) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (((get_attr_imm_disp (insn) == IMM_DISP_TRUE) || (! (get_attr_type (insn) == TYPE_IMOV))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (get_attr_type (insn) == TYPE_IMOV)))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (get_attr_type (insn) == TYPE_IMOV)))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && (get_attr_type (insn) == TYPE_IMOV)))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5))))))
        {
   return 32 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5))))))
        {
   return 33 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5)))) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5)))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 122 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5)))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((get_attr_type (insn) == TYPE_IMOV) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 87:
    case 47:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 161 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 164 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_BOTH))
        {
   return 167 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 169 ;
        }
      else
        {
   return 273 ;
        }
    case 86:
    case 68:
    case 46:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 7;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 30 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 162 ;
        }
      else
        {
   return 273 ;
        }
    case 85:
    case 67:
    case 51:
    case 45:
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 7;
        }
      else if (((ix86_tune) == (CPU_PENTIUMPRO)))
        {
   return 31 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 165 ;
        }
      else
        {
   return 273 ;
        }
    case 44:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode)))))))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode)))))))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode)))))))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode))))))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode)))))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode)))))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0xe0)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0xe0)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 5) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 5) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 5) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 5) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0xfc)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (which_alternative == 5))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (which_alternative == 5))
        {
   return 215 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0xfc)))
        {
   return 216 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x1c)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 219 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x1c)))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 43:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))))
        {
   return 7;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_UV) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_pent_pair (insn) == PENT_PAIR_NP) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode)))))))
        {
   return 29 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode)))))))
        {
   return 30 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_STORE) && ((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode)))))))
        {
   return 31 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode))))))
        {
   return 34 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (nonimmediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 124 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && ((get_attr_memory (insn) == MEMORY_NONE) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 125 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 126 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 127 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 128 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode)))))
        {
   return 134 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode)))))
        {
   return 150 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 162 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 163 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 165 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_BOTH)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((!((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return 168 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0xe0)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 203 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0xe0)) && (memory_operand (recog_data.operand[1], DFmode))))
        {
   return 204 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 5) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 205 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 5) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 206 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 209 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((((1 << which_alternative) & 0xfc)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 210 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 5) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 211 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 5) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 212 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0xfc)) && ((get_attr_memory (insn) == MEMORY_STORE) || (get_attr_memory (insn) == MEMORY_BOTH))))
        {
   return 213 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (which_alternative == 5))
        {
   return 214 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (which_alternative == 5))
        {
   return 215 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0xfc)))
        {
   return 216 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && ((((1 << which_alternative) & 0x1c)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 219 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (((1 << which_alternative) & 0x1c)))
        {
   return 220 ;
        }
      else
        {
   return 273 ;
        }
    case 401:
    case 397:
    case 396:
    case 393:
    case 347:
    case 341:
    case 321:
    case 319:
    case 299:
    case 297:
    case 244:
    case 108:
    case 103:
    case 81:
    case 80:
    case 62:
    case 42:
    case 41:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 16 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 113 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 115 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 123 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((get_attr_memory (insn) == MEMORY_STORE) || (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 135 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 166 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_STORE))
        {
   return 168 ;
        }
      else
        {
   return 273 ;
        }
    case 79:
    case 78:
    case 40:
    case 39:
      extract_insn_cached (insn);
      if (((ix86_tune) == (CPU_PENTIUM)))
        {
   return 9;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (memory_operand (recog_data.operand[0], VOIDmode))))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[0], VOIDmode)))
        {
   return 112 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 146 ;
        }
      else
        {
   return 273 ;
        }
    case 77:
    case 58:
    case 57:
    case 49:
    case 48:
    case 38:
    case 37:
    case 36:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 8;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 19 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 111 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 112 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 131 ;
        }
      else if (((ix86_tune) == (CPU_K6)))
        {
   return 135 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 145 ;
        }
      else
        {
   return 273 ;
        }
    case 35:
    case 32:
      extract_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (((enum machine_mode) (recog_data.operand[1])->mode) == SFmode)))
        {
   return 82 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (((enum machine_mode) (recog_data.operand[1])->mode) == SFmode)))
        {
   return 83 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 232 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 233 ;
        }
      else
        {
   return 273 ;
        }
    case 34:
    case 31:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && (which_alternative == 0)))
        {
   return 56 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && (which_alternative == 0)))
        {
   return 57 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_NONE) && ((which_alternative == 1) && (((enum machine_mode) (recog_data.operand[1])->mode) == SFmode))))
        {
   return 82 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && ((get_attr_memory (insn) == MEMORY_LOAD) && ((which_alternative == 1) && (((enum machine_mode) (recog_data.operand[1])->mode) == SFmode))))
        {
   return 83 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 197 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 0) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 198 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 199 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (which_alternative == 0))
        {
   return 202 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 232 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && ((which_alternative == 1) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 233 ;
        }
      else
        {
   return 273 ;
        }
    case 33:
    case 30:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 56 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 57 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 197 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 198 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 199 ;
        }
      else
        {
   return 273 ;
        }
    case 25:
    case 23:
    case 21:
    case 20:
    case 19:
      if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 56 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 57 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 131 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 137 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 138 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 200 ;
        }
      else if ((((ix86_tune) == (CPU_K8))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 201 ;
        }
      else if ((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8))))
        {
   return 202 ;
        }
      else
        {
   return 273 ;
        }
    case 8:
    case 7:
    case 6:
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 21 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 25 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else
        {
   return 273 ;
        }
    case 285:
    case 284:
    case 283:
    case 17:
    case 16:
    case 15:
    case 14:
    case 13:
    case 12:
    case 11:
    case 10:
    case 9:
    case 5:
    case 4:
    case 3:
    case 2:
    case 1:
    case 0:
      if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 20 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_LOAD)))
        {
   return 23 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((! (get_attr_imm_disp (insn) == IMM_DISP_TRUE)) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 24 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUM))) && ((get_attr_imm_disp (insn) == IMM_DISP_TRUE) && (get_attr_memory (insn) == MEMORY_NONE)))
        {
   return 27 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 109 ;
        }
      else if ((((ix86_tune) == (CPU_PENTIUMPRO))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 110 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 121 ;
        }
      else if ((((ix86_tune) == (CPU_K6))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 122 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_NONE))
        {
   return 160 ;
        }
      else if (((((ix86_tune) == (CPU_ATHLON))) || (((ix86_tune) == (CPU_K8)))) && (get_attr_memory (insn) == MEMORY_LOAD))
        {
   return 163 ;
        }
      else
        {
   return 273 ;
        }
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 187842, "?");
    default:
      return 28 ;
    }
}
int
result_ready_cost (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 187857, "?");
    default:
      return 1;
    }
}
int
function_units_used (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 187872, "?");
    default:
      return -1 ;
    }
}
enum attr_athlon_decode
get_attr_athlon_decode (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 584:
    case 581:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return ATHLON_DECODE_DIRECT;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 250:
      extract_constrain_insn_cached (insn);
      if ((which_alternative != 0) || (((ix86_tune) == (CPU_ATHLON))))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 249:
    case 248:
    case 247:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_ATHLON))) || ((which_alternative == 1) || ((which_alternative == 2) && (memory_operand (recog_data.operand[1], VOIDmode)))))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 176:
    case 175:
    case 174:
      extract_constrain_insn_cached (insn);
      if ((which_alternative != 0) || ((which_alternative == 0) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 172:
    case 169:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   if (which_alternative == 1)
     {
       return ATHLON_DECODE_VECTOR;
     }
   else
     {
       return ATHLON_DECODE_DIRECT;
     }
        }
      else if (which_alternative == 2)
        {
   return ATHLON_DECODE_DOUBLE;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 166:
    case 163:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   if (which_alternative == 1)
     {
       return ATHLON_DECODE_VECTOR;
     }
   else
     {
       return ATHLON_DECODE_DIRECT;
     }
        }
      else if (which_alternative == 2)
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DOUBLE;
        }
    case 136:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return ATHLON_DECODE_VECTOR;
        }
      else if (which_alternative == 1)
        {
   return ATHLON_DECODE_DOUBLE;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xe))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 171:
    case 168:
    case 165:
    case 162:
    case 145:
    case 142:
    case 133:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 131:
    case 130:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 1) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE)))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 128:
      extract_constrain_insn_cached (insn);
      if (((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE)) && (which_alternative == 1))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 101:
    case 100:
      extract_constrain_insn_cached (insn);
      if ((!((1 << which_alternative) & 0x7)) || ((((1 << which_alternative) & 0x7)) && ((get_attr_memory (insn) == MEMORY_LOAD) || (get_attr_memory (insn) == MEMORY_STORE))))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 96:
    case 95:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x18))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 89:
    case 88:
      extract_constrain_insn_cached (insn);
      if ((which_alternative != 1) || ((which_alternative == 1) && (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 84:
    case 83:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 4)
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 721:
    case 720:
    case 656:
    case 654:
    case 82:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 76:
      extract_constrain_insn_cached (insn);
      if ((which_alternative != 0) || ((which_alternative == 0) && (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 77:
    case 58:
    case 57:
    case 49:
    case 48:
    case 38:
    case 37:
    case 36:
      extract_insn_cached (insn);
      if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 251:
    case 252:
    case 253:
      if (((ix86_tune) == (CPU_ATHLON)))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 254:
    case 255:
    case 256:
    case 257:
    case 258:
    case 259:
    case 260:
    case 261:
    case 262:
    case 263:
      if (((ix86_tune) == (CPU_ATHLON)))
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DOUBLE;
        }
    case 150:
    case 151:
    case 155:
    case 156:
    case 787:
    case 788:
    case 789:
    case 790:
    case 920:
    case 921:
    case 922:
    case 923:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return ATHLON_DECODE_DOUBLE;
        }
      else
        {
   return ATHLON_DECODE_VECTOR;
        }
    case 170:
    case 173:
    case 924:
    case 925:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return ATHLON_DECODE_DOUBLE;
        }
      else
        {
   return ATHLON_DECODE_DIRECT;
        }
    case 139:
    case 164:
    case 167:
    case 785:
    case 786:
    case 926:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return ATHLON_DECODE_VECTOR;
        }
      else
        {
   return ATHLON_DECODE_DOUBLE;
        }
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 188236, "?");
    case 1022:
    case 1021:
    case 853:
    case 718:
    case 717:
    case 716:
    case 715:
    case 714:
    case 713:
    case 712:
    case 711:
    case 710:
    case 709:
    case 708:
    case 697:
    case 696:
    case 686:
    case 685:
    case 684:
    case 683:
    case 682:
    case 681:
    case 680:
    case 679:
    case 678:
    case 677:
    case 676:
    case 675:
    case 674:
    case 673:
    case 668:
    case 667:
    case 665:
    case 664:
    case 662:
    case 661:
    case 659:
    case 658:
    case 657:
    case 655:
    case 647:
    case 646:
    case 645:
    case 644:
    case 643:
    case 642:
    case 641:
    case 640:
    case 639:
    case 638:
    case 637:
    case 636:
    case 635:
    case 634:
    case 633:
    case 632:
    case 631:
    case 630:
    case 629:
    case 628:
    case 627:
    case 626:
    case 625:
    case 624:
    case 623:
    case 622:
    case 621:
    case 620:
    case 619:
    case 618:
    case 617:
    case 616:
    case 615:
    case 614:
    case 613:
    case 612:
    case 611:
    case 610:
    case 609:
    case 608:
    case 607:
    case 606:
    case 605:
    case 604:
    case 603:
    case 602:
    case 601:
    case 600:
    case 599:
    case 598:
    case 597:
    case 596:
    case 595:
    case 594:
    case 593:
    case 592:
    case 591:
    case 550:
    case 549:
    case 548:
    case 547:
    case 546:
    case 545:
    case 544:
    case 543:
    case 542:
    case 541:
    case 540:
    case 539:
    case 538:
    case 537:
    case 536:
    case 535:
    case 534:
    case 533:
    case 532:
    case 531:
    case 530:
    case 529:
    case 528:
    case 526:
    case 525:
    case 524:
    case 523:
    case 522:
    case 521:
    case 520:
    case 519:
    case 518:
    case 517:
    case 516:
    case 515:
    case 508:
    case 507:
    case 506:
    case 505:
    case 504:
    case 503:
    case 502:
    case 501:
    case 500:
    case 499:
    case 450:
    case 449:
    case 423:
    case 422:
    case 405:
    case 404:
    case 385:
    case 384:
    case 383:
    case 382:
    case 381:
    case 380:
    case 379:
    case 378:
    case 377:
    case 370:
    case 369:
    case 368:
    case 367:
    case 366:
    case 365:
    case 364:
    case 363:
    case 362:
    case 351:
    case 287:
    case 286:
    case 277:
    case 276:
    case 275:
    case 274:
    case 273:
    case 272:
    case 271:
    case 270:
    case 269:
    case 268:
    case 267:
    case 266:
    case 265:
    case 264:
    case 225:
    case 177:
    case 160:
    case 127:
    case 126:
    case 117:
    case 99:
    case 98:
    case 94:
    case 93:
    case 79:
    case 78:
    case 75:
    case 40:
    case 39:
    case 28:
    case 27:
    case 26:
    case 24:
    case 22:
    case 18:
    case 29:
    case 30:
    case 31:
    case 32:
    case 33:
    case 34:
    case 35:
    case 47:
    case 87:
    case 161:
    case 406:
      return ATHLON_DECODE_VECTOR;
    default:
      return ATHLON_DECODE_DIRECT;
    }
}
enum attr_fp_int_src
get_attr_fp_int_src (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 162:
    case 163:
    case 164:
    case 165:
    case 166:
    case 167:
    case 168:
    case 169:
    case 170:
    case 171:
    case 172:
    case 173:
    case 174:
    case 175:
    case 176:
    case 565:
    case 566:
    case 570:
    case 571:
    case 576:
    case 577:
      return FP_INT_SRC_TRUE;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 188491, "?");
    default:
      return FP_INT_SRC_FALSE;
    }
}
enum attr_imm_disp
get_attr_imm_disp (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 672:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 0) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 671:
      extract_constrain_insn_cached (insn);
      if ((((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode)))) || ((which_alternative == 0) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode)))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 670:
      extract_constrain_insn_cached (insn);
      if ((((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode)))) || ((which_alternative == 0) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode)))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 655:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x3))
        {
   return IMM_DISP_UNKNOWN;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 426:
    case 425:
    case 417:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 1) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 410:
      extract_constrain_insn_cached (insn);
      if ((((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))) || ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode))))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 408:
      extract_constrain_insn_cached (insn);
      if (((which_alternative == 0) && (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))) || ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode)))))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 416:
    case 415:
    case 414:
    case 413:
    case 412:
    case 411:
    case 409:
    case 407:
    case 403:
    case 402:
      extract_insn_cached (insn);
      if (((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_ISHIFT)) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 294:
    case 290:
      extract_constrain_insn_cached (insn);
      if ((((1 << which_alternative) & 0x3)) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 288:
      extract_constrain_insn_cached (insn);
      if ((((1 << which_alternative) & 0x7)) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 217:
      extract_insn_cached (insn);
      if ((! (incdec_operand (recog_data.operand[2], QImode))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 223:
    case 222:
    case 221:
    case 219:
    case 218:
    case 216:
      extract_insn_cached (insn);
      if ((! (incdec_operand (recog_data.operand[2], QImode))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 215:
      extract_constrain_insn_cached (insn);
      if (((which_alternative != 3) && (! (incdec_operand (recog_data.operand[2], QImode)))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 220:
    case 214:
    case 213:
    case 212:
    case 211:
    case 210:
      extract_insn_cached (insn);
      if ((! (incdec_operand (recog_data.operand[2], HImode))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 209:
      extract_constrain_insn_cached (insn);
      if (((which_alternative != 2) && (! (incdec_operand (recog_data.operand[2], HImode)))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 208:
    case 207:
    case 206:
    case 205:
    case 204:
    case 203:
      extract_insn_cached (insn);
      if ((! (incdec_operand (recog_data.operand[2], SImode))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 200:
    case 199:
    case 198:
    case 197:
      extract_insn_cached (insn);
      if ((! (incdec_operand (recog_data.operand[2], DImode))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 202:
    case 201:
    case 196:
      extract_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_ALU) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 491:
    case 489:
    case 488:
    case 487:
    case 486:
    case 485:
    case 484:
    case 483:
    case 482:
    case 481:
    case 480:
    case 478:
    case 476:
    case 475:
    case 474:
    case 473:
    case 472:
    case 471:
    case 470:
    case 469:
    case 468:
    case 467:
    case 465:
    case 463:
    case 462:
    case 461:
    case 460:
    case 459:
    case 458:
    case 457:
    case 456:
    case 455:
    case 454:
    case 453:
    case 452:
    case 451:
    case 448:
    case 447:
    case 446:
    case 445:
    case 444:
    case 443:
    case 441:
    case 439:
    case 438:
    case 437:
    case 436:
    case 435:
    case 434:
    case 433:
    case 432:
    case 431:
    case 430:
    case 429:
    case 428:
    case 427:
    case 424:
    case 421:
    case 420:
    case 419:
    case 418:
    case 406:
    case 350:
    case 349:
    case 348:
    case 346:
    case 345:
    case 344:
    case 343:
    case 342:
    case 340:
    case 339:
    case 338:
    case 337:
    case 336:
    case 335:
    case 334:
    case 333:
    case 332:
    case 331:
    case 330:
    case 329:
    case 328:
    case 327:
    case 326:
    case 325:
    case 324:
    case 323:
    case 322:
    case 320:
    case 318:
    case 317:
    case 316:
    case 315:
    case 314:
    case 313:
    case 312:
    case 311:
    case 310:
    case 309:
    case 308:
    case 307:
    case 306:
    case 305:
    case 304:
    case 303:
    case 302:
    case 301:
    case 300:
    case 298:
    case 296:
    case 295:
    case 293:
    case 292:
    case 291:
    case 289:
    case 277:
    case 276:
    case 274:
    case 271:
    case 268:
    case 265:
    case 264:
    case 263:
    case 262:
    case 261:
    case 260:
    case 259:
    case 258:
    case 257:
    case 256:
    case 255:
    case 254:
    case 253:
    case 252:
    case 251:
    case 250:
    case 249:
    case 248:
    case 247:
    case 246:
    case 245:
    case 243:
    case 242:
    case 241:
    case 240:
    case 239:
    case 238:
    case 237:
    case 236:
    case 235:
    case 234:
    case 233:
    case 232:
    case 231:
    case 230:
    case 229:
    case 228:
    case 227:
    case 226:
    case 224:
    case 185:
    case 184:
    case 183:
    case 182:
    case 181:
    case 180:
    case 179:
    case 178:
      extract_insn_cached (insn);
      if ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[2], VOIDmode)))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 172:
    case 169:
    case 166:
    case 163:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return IMM_DISP_UNKNOWN;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xe))
        {
   return IMM_DISP_UNKNOWN;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return IMM_DISP_UNKNOWN;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 114:
    case 113:
    case 109:
    case 106:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 1) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 101:
    case 100:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x7))
        {
   return IMM_DISP_UNKNOWN;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 96:
    case 95:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x18))
        {
   return IMM_DISP_UNKNOWN;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 91:
    case 90:
      extract_constrain_insn_cached (insn);
      if ((((1 << which_alternative) & 0x18)) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 89:
    case 88:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 1)
        {
   return IMM_DISP_UNKNOWN;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 84:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 4)
        {
   return IMM_DISP_UNKNOWN;
        }
      else if (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 83:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 4)
        {
   return IMM_DISP_UNKNOWN;
        }
      else if (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 721:
    case 720:
    case 82:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return IMM_DISP_UNKNOWN;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 176:
    case 175:
    case 174:
    case 171:
    case 168:
    case 165:
    case 162:
    case 145:
    case 142:
    case 133:
    case 76:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return IMM_DISP_UNKNOWN;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 71:
      extract_constrain_insn_cached (insn);
      if (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 59:
      extract_constrain_insn_cached (insn);
      if ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 70:
    case 66:
    case 65:
    case 50:
      extract_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_IMOV) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 44:
      extract_constrain_insn_cached (insn);
      if (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 43:
      extract_constrain_insn_cached (insn);
      if (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case 492:
    case 490:
    case 479:
    case 477:
    case 466:
    case 464:
    case 442:
    case 440:
    case 401:
    case 399:
    case 397:
    case 396:
    case 393:
    case 347:
    case 341:
    case 321:
    case 319:
    case 299:
    case 297:
    case 285:
    case 284:
    case 283:
    case 282:
    case 281:
    case 280:
    case 279:
    case 278:
    case 244:
    case 108:
    case 105:
    case 103:
    case 87:
    case 86:
    case 85:
    case 81:
    case 80:
    case 74:
    case 73:
    case 72:
    case 68:
    case 67:
    case 62:
    case 61:
    case 60:
    case 56:
    case 55:
    case 54:
    case 53:
    case 52:
    case 51:
    case 47:
    case 46:
    case 45:
    case 42:
    case 41:
    case 17:
    case 16:
    case 15:
    case 14:
    case 13:
    case 12:
    case 11:
    case 10:
    case 9:
    case 8:
    case 7:
    case 6:
    case 5:
    case 4:
    case 3:
    case 2:
    case 1:
    case 0:
      extract_insn_cached (insn);
      if ((memory_displacement_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode)))
        {
   return IMM_DISP_TRUE;
        }
      else
        {
   return IMM_DISP_FALSE;
        }
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 189220, "?");
    case 1022:
    case 1021:
    case 853:
    case 718:
    case 717:
    case 716:
    case 715:
    case 714:
    case 713:
    case 712:
    case 711:
    case 710:
    case 709:
    case 708:
    case 697:
    case 696:
    case 686:
    case 685:
    case 684:
    case 683:
    case 682:
    case 681:
    case 680:
    case 679:
    case 678:
    case 677:
    case 676:
    case 675:
    case 674:
    case 673:
    case 668:
    case 667:
    case 665:
    case 664:
    case 662:
    case 661:
    case 659:
    case 658:
    case 550:
    case 549:
    case 548:
    case 547:
    case 546:
    case 545:
    case 544:
    case 543:
    case 542:
    case 541:
    case 540:
    case 539:
    case 538:
    case 537:
    case 536:
    case 535:
    case 532:
    case 531:
    case 530:
    case 529:
    case 528:
    case 526:
    case 525:
    case 524:
    case 523:
    case 508:
    case 507:
    case 506:
    case 505:
    case 504:
    case 503:
    case 502:
    case 501:
    case 500:
    case 499:
    case 450:
    case 449:
    case 423:
    case 422:
    case 405:
    case 404:
    case 385:
    case 384:
    case 383:
    case 382:
    case 381:
    case 380:
    case 379:
    case 378:
    case 377:
    case 370:
    case 369:
    case 368:
    case 367:
    case 366:
    case 365:
    case 364:
    case 363:
    case 362:
    case 351:
    case 287:
    case 286:
    case 275:
    case 273:
    case 272:
    case 270:
    case 269:
    case 267:
    case 266:
    case 225:
    case 177:
    case 161:
    case 160:
    case 127:
    case 126:
    case 117:
    case 99:
    case 98:
    case 94:
    case 93:
    case 75:
    case 29:
    case 28:
    case 27:
    case 26:
    case 24:
    case 22:
    case 18:
      return IMM_DISP_UNKNOWN;
    default:
      return IMM_DISP_FALSE;
    }
}
int
get_attr_length_address (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 695:
    case 694:
    case 693:
    case 692:
    case 691:
    case 690:
    case 689:
    case 688:
    case 687:
      extract_constrain_insn_cached (insn);
      if (constant_call_address_operand (recog_data.operand[1], VOIDmode))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_address_default (insn);
        }
    case 655:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x3))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_address_default (insn);
        }
    case 522:
    case 521:
    case 520:
    case 519:
    case 518:
    case 517:
    case 516:
    case 515:
      extract_constrain_insn_cached (insn);
      if (constant_call_address_operand (recog_data.operand[0], VOIDmode))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_address_default (insn);
        }
    case 172:
    case 169:
    case 166:
    case 163:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_address_default (insn);
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xe))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_address_default (insn);
        }
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_address_default (insn);
        }
    case 101:
    case 100:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x7))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_address_default (insn);
        }
    case 96:
    case 95:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x18))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_address_default (insn);
        }
    case 89:
    case 88:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 1)
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_address_default (insn);
        }
    case 84:
    case 83:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 4)
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_address_default (insn);
        }
    case 721:
    case 720:
    case 82:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_address_default (insn);
        }
    case 176:
    case 175:
    case 174:
    case 171:
    case 168:
    case 165:
    case 162:
    case 145:
    case 142:
    case 133:
    case 76:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_address_default (insn);
        }
    case 45:
    case 46:
    case 51:
    case 52:
    case 67:
    case 68:
    case 85:
    case 86:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 8;
        }
      else
        {
   return 0;
        }
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 189549, "?");
    case 1022:
    case 1021:
    case 718:
    case 717:
    case 716:
    case 715:
    case 714:
    case 713:
    case 712:
    case 711:
    case 710:
    case 709:
    case 708:
    case 697:
    case 696:
    case 686:
    case 685:
    case 684:
    case 683:
    case 682:
    case 681:
    case 680:
    case 679:
    case 678:
    case 677:
    case 676:
    case 675:
    case 674:
    case 673:
    case 668:
    case 667:
    case 665:
    case 664:
    case 662:
    case 661:
    case 659:
    case 658:
    case 647:
    case 646:
    case 645:
    case 644:
    case 643:
    case 642:
    case 641:
    case 640:
    case 639:
    case 638:
    case 637:
    case 636:
    case 635:
    case 634:
    case 633:
    case 632:
    case 631:
    case 630:
    case 629:
    case 628:
    case 627:
    case 626:
    case 625:
    case 624:
    case 623:
    case 622:
    case 621:
    case 620:
    case 619:
    case 618:
    case 617:
    case 550:
    case 549:
    case 548:
    case 547:
    case 546:
    case 545:
    case 544:
    case 543:
    case 542:
    case 541:
    case 540:
    case 539:
    case 538:
    case 537:
    case 536:
    case 535:
    case 532:
    case 531:
    case 530:
    case 529:
    case 528:
    case 526:
    case 525:
    case 524:
    case 523:
    case 508:
    case 507:
    case 506:
    case 505:
    case 504:
    case 503:
    case 502:
    case 501:
    case 500:
    case 499:
    case 450:
    case 449:
    case 423:
    case 422:
    case 405:
    case 404:
    case 385:
    case 384:
    case 383:
    case 382:
    case 381:
    case 380:
    case 379:
    case 378:
    case 377:
    case 370:
    case 369:
    case 368:
    case 367:
    case 366:
    case 365:
    case 364:
    case 363:
    case 362:
    case 351:
    case 287:
    case 286:
    case 275:
    case 273:
    case 272:
    case 270:
    case 269:
    case 267:
    case 266:
    case 225:
    case 177:
    case 161:
    case 160:
    case 127:
    case 126:
    case 117:
    case 102:
    case 99:
    case 98:
    case 97:
    case 94:
    case 93:
    case 92:
    case 75:
    case 29:
    case 28:
    case 27:
    case 26:
    case 24:
    case 22:
    case 18:
    case 853:
      return 0;
    default:
      extract_constrain_insn_cached (insn);
      return ix86_attr_length_address_default (insn);
    }
}
int
get_attr_length_immediate (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 695:
    case 694:
    case 693:
    case 692:
    case 691:
    case 690:
    case 689:
    case 688:
    case 687:
      extract_insn_cached (insn);
      if (constant_call_address_operand (recog_data.operand[1], VOIDmode))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 671:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], DImode))))
        {
   return 0;
        }
      else if (which_alternative == 0)
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,0);
        }
    case 670:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], SImode))))
        {
   return 0;
        }
      else if (which_alternative == 0)
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,0);
        }
    case 569:
    case 564:
      extract_constrain_insn_cached (insn);
      if (get_attr_unit (insn) == UNIT_SSE)
        {
   return 0;
        }
      else
        {
   return
        fancy_abort ("gcc.c", 189783, "?"),1;
        }
    case 568:
    case 563:
      extract_constrain_insn_cached (insn);
      if ((get_attr_unit (insn) == UNIT_I387) || (get_attr_unit (insn) == UNIT_SSE))
        {
   return 0;
        }
      else
        {
   return
        fancy_abort ("gcc.c", 189796, "?"),1;
        }
    case 580:
    case 579:
    case 578:
    case 577:
    case 576:
    case 575:
    case 574:
    case 573:
    case 572:
    case 571:
    case 570:
    case 567:
    case 566:
    case 565:
    case 562:
      extract_constrain_insn_cached (insn);
      if (get_attr_unit (insn) == UNIT_I387)
        {
   return 0;
        }
      else
        {
   return
        fancy_abort ("gcc.c", 189822, "?"),1;
        }
    case 559:
    case 556:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return 0;
        }
      else
        {
   return
        fancy_abort ("gcc.c", 189835, "?"),1;
        }
    case 522:
    case 521:
    case 520:
    case 519:
    case 518:
    case 517:
    case 516:
    case 515:
      extract_insn_cached (insn);
      if (constant_call_address_operand (recog_data.operand[0], VOIDmode))
        {
   return 4;
        }
      else
        {
   return 0;
        }
    case 426:
    case 425:
    case 417:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
    case 414:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 2)
        {
   return 0;
        }
      else if ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_ISHIFT))
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return
        fancy_abort ("gcc.c", 189882, "?"),1;
        }
    case 410:
      extract_constrain_insn_cached (insn);
      if (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))) || ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode)))))
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return
        fancy_abort ("gcc.c", 189894, "?"),1;
        }
    case 408:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return 0;
        }
      else if ((which_alternative == 0) && (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))) || ((! (((x86_double_with_add & (1 << ix86_tune))) != (0))) || (! (const1_operand (recog_data.operand[2], VOIDmode))))))
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return
        fancy_abort ("gcc.c", 189910, "?"),1;
        }
    case 416:
    case 415:
    case 413:
    case 412:
    case 409:
    case 403:
      extract_constrain_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_ISHIFT))
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return
        fancy_abort ("gcc.c", 189927, "?"),1;
        }
    case 411:
    case 407:
    case 402:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return 0;
        }
      else if ((get_attr_type (insn) == TYPE_ALU) || (get_attr_type (insn) == TYPE_ISHIFT))
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return
        fancy_abort ("gcc.c", 189945, "?"),1;
        }
    case 294:
    case 290:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return 0;
        }
    case 288:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return 0;
        }
    case 223:
    case 222:
    case 221:
    case 219:
    case 218:
    case 217:
    case 216:
      extract_constrain_insn_cached (insn);
      if (incdec_operand (recog_data.operand[2], QImode))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
    case 215:
      extract_constrain_insn_cached (insn);
      if (((which_alternative != 3) && (incdec_operand (recog_data.operand[2], QImode))) || (which_alternative == 3))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
    case 220:
    case 214:
    case 213:
    case 212:
    case 211:
    case 210:
      extract_constrain_insn_cached (insn);
      if (incdec_operand (recog_data.operand[2], HImode))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
    case 209:
      extract_constrain_insn_cached (insn);
      if (((which_alternative != 2) && (incdec_operand (recog_data.operand[2], HImode))) || (which_alternative == 2))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
    case 208:
    case 207:
    case 206:
    case 205:
    case 204:
    case 203:
      extract_constrain_insn_cached (insn);
      if (incdec_operand (recog_data.operand[2], SImode))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
    case 202:
      extract_constrain_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_INCDEC) || ((which_alternative != 0) || (pic_symbolic_operand (recog_data.operand[2], SImode))))
        {
   return 0;
        }
      else if (get_attr_type (insn) == TYPE_ALU)
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return
        fancy_abort ("gcc.c", 190055, "?"),1;
        }
    case 201:
      extract_constrain_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_INCDEC) || ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], SImode))))
        {
   return 0;
        }
      else if (get_attr_type (insn) == TYPE_ALU)
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return
        fancy_abort ("gcc.c", 190071, "?"),1;
        }
    case 200:
    case 199:
    case 198:
    case 197:
      extract_constrain_insn_cached (insn);
      if (incdec_operand (recog_data.operand[2], DImode))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
    case 196:
      extract_constrain_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_INCDEC) || ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], DImode))))
        {
   return 0;
        }
      else if (get_attr_type (insn) == TYPE_ALU)
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return
        fancy_abort ("gcc.c", 190101, "?"),1;
        }
    case 114:
    case 113:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x3))
        {
   return 0;
        }
      else if (which_alternative == 0)
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,0);
        }
    case 91:
    case 90:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x18))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,0);
        }
    case 89:
    case 88:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 1)
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
    case 84:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   if (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))
     {
       return 0;
     }
   else
     {
       return ix86_attr_length_immediate_default(insn,0);
     }
        }
      else if (which_alternative == 1)
        {
   return 4;
        }
      else if (which_alternative == 2)
        {
   return 8;
        }
      else
        {
   if (((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))) || (((1 << which_alternative) & 0x7f0)))
     {
       return 0;
     }
   else
     {
       return ix86_attr_length_immediate_default(insn,0);
     }
        }
    case 83:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   if (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))
     {
       return 0;
     }
   else
     {
       return ix86_attr_length_immediate_default(insn,0);
     }
        }
      else if (which_alternative == 1)
        {
   return 4;
        }
      else if (which_alternative == 2)
        {
   return 8;
        }
      else
        {
   if (((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))) || (((1 << which_alternative) & 0x7f0)))
     {
       return 0;
     }
   else
     {
       return ix86_attr_length_immediate_default(insn,0);
     }
        }
    case 672:
    case 76:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
    case 71:
      extract_constrain_insn_cached (insn);
      if ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,0);
        }
    case 70:
    case 66:
    case 65:
      extract_constrain_insn_cached (insn);
      if (get_attr_type (insn) == TYPE_IMOVX)
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else if (get_attr_type (insn) == TYPE_IMOV)
        {
   return ix86_attr_length_immediate_default(insn,0);
        }
      else
        {
   return
        fancy_abort ("gcc.c", 190248, "?"),1;
        }
    case 59:
      extract_constrain_insn_cached (insn);
      if (((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else if (((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))))
        {
   return ix86_attr_length_immediate_default(insn,0);
        }
      else
        {
   return
        fancy_abort ("gcc.c", 190264, "?"),1;
        }
    case 50:
      extract_constrain_insn_cached (insn);
      if (((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5))))
        {
   return ix86_attr_length_immediate_default(insn,1);
        }
      else if (get_attr_type (insn) == TYPE_IMOV)
        {
   return ix86_attr_length_immediate_default(insn,0);
        }
      else
        {
   return
        fancy_abort ("gcc.c", 190280, "?"),1;
        }
    case 553:
    case 551:
    case 285:
    case 284:
    case 283:
    case 281:
    case 280:
    case 279:
    case 278:
    case 87:
    case 74:
    case 73:
    case 72:
    case 61:
    case 60:
    case 55:
    case 54:
    case 53:
    case 47:
      extract_constrain_insn_cached (insn);
      return ix86_attr_length_immediate_default(insn,0);
    case 85:
    case 67:
    case 51:
    case 45:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,0);
        }
    case 44:
      extract_constrain_insn_cached (insn);
      if (((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode)))) || (((1 << which_alternative) & 0xfc)))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,0);
        }
    case 43:
      extract_constrain_insn_cached (insn);
      if (((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode)))) || (((1 << which_alternative) & 0xfc)))
        {
   return 0;
        }
      else
        {
   return ix86_attr_length_immediate_default(insn,0);
        }
    case 554:
    case 552:
    case 492:
    case 491:
    case 490:
    case 489:
    case 488:
    case 487:
    case 486:
    case 485:
    case 484:
    case 483:
    case 482:
    case 481:
    case 480:
    case 479:
    case 478:
    case 477:
    case 476:
    case 475:
    case 474:
    case 473:
    case 472:
    case 471:
    case 470:
    case 469:
    case 468:
    case 467:
    case 466:
    case 465:
    case 464:
    case 463:
    case 462:
    case 461:
    case 460:
    case 459:
    case 458:
    case 457:
    case 456:
    case 455:
    case 454:
    case 453:
    case 452:
    case 451:
    case 448:
    case 447:
    case 446:
    case 445:
    case 444:
    case 443:
    case 442:
    case 441:
    case 440:
    case 439:
    case 438:
    case 437:
    case 436:
    case 435:
    case 434:
    case 433:
    case 432:
    case 431:
    case 430:
    case 429:
    case 428:
    case 427:
    case 424:
    case 421:
    case 420:
    case 419:
    case 418:
    case 406:
    case 401:
    case 400:
    case 399:
    case 398:
    case 397:
    case 396:
    case 395:
    case 394:
    case 393:
    case 392:
    case 361:
    case 360:
    case 359:
    case 358:
    case 357:
    case 356:
    case 355:
    case 354:
    case 353:
    case 352:
    case 350:
    case 349:
    case 348:
    case 347:
    case 346:
    case 341:
    case 340:
    case 339:
    case 338:
    case 337:
    case 336:
    case 335:
    case 334:
    case 333:
    case 332:
    case 331:
    case 330:
    case 329:
    case 328:
    case 327:
    case 322:
    case 321:
    case 320:
    case 319:
    case 318:
    case 317:
    case 316:
    case 315:
    case 314:
    case 313:
    case 312:
    case 311:
    case 310:
    case 309:
    case 308:
    case 307:
    case 306:
    case 305:
    case 299:
    case 298:
    case 297:
    case 296:
    case 295:
    case 293:
    case 292:
    case 291:
    case 289:
    case 263:
    case 262:
    case 261:
    case 250:
    case 249:
    case 248:
    case 247:
    case 246:
    case 245:
    case 244:
    case 243:
    case 242:
    case 241:
    case 240:
    case 239:
    case 238:
    case 237:
    case 236:
    case 235:
    case 234:
    case 233:
    case 232:
    case 231:
    case 230:
    case 229:
    case 228:
    case 227:
    case 226:
    case 224:
    case 185:
    case 184:
    case 183:
    case 182:
    case 181:
    case 180:
    case 179:
    case 178:
    case 125:
    case 124:
    case 123:
    case 122:
    case 121:
    case 120:
    case 119:
    case 118:
    case 116:
    case 115:
    case 110:
    case 109:
    case 108:
    case 107:
    case 106:
    case 105:
    case 104:
    case 103:
    case 79:
    case 78:
    case 77:
    case 69:
    case 64:
    case 63:
    case 58:
    case 57:
    case 49:
    case 48:
    case 40:
    case 39:
    case 38:
    case 37:
    case 36:
    case 17:
    case 16:
    case 15:
    case 13:
    case 12:
    case 11:
    case 10:
    case 8:
    case 7:
    case 5:
    case 4:
    case 2:
    case 1:
      extract_constrain_insn_cached (insn);
      return ix86_attr_length_immediate_default(insn,1);
    case 0:
    case 3:
    case 6:
    case 9:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 514:
    case 509:
    case 498:
    case 497:
    case 42:
    case 81:
    case 282:
    case 300:
    case 301:
    case 323:
    case 342:
      return 1;
    case 526:
      return 2;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 190599, "?");
    default:
      return 0;
    }
}
enum attr_memory
get_attr_memory (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 695:
    case 694:
    case 693:
    case 692:
    case 691:
    case 690:
    case 689:
    case 688:
    case 687:
      extract_insn_cached (insn);
      if (constant_call_address_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_NONE;
        }
      else
        {
   return MEMORY_LOAD;
        }
    case 672:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (memory_operand (recog_data.operand[2], VOIDmode)))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 671:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], DImode))))
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (((which_alternative != 1) || (! (const0_operand (recog_data.operand[2], DImode)))) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 670:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 1) && (! (const0_operand (recog_data.operand[2], SImode))))
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (((which_alternative != 1) || (! (const0_operand (recog_data.operand[2], SImode)))) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 655:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x3))
        {
   return MEMORY_UNKNOWN;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 656:
    case 654:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || ((memory_operand (recog_data.operand[2], VOIDmode)) || (memory_operand (recog_data.operand[3], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 653:
    case 652:
    case 651:
    case 649:
      extract_insn_cached (insn);
      if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || ((memory_operand (recog_data.operand[2], VOIDmode)) || (memory_operand (recog_data.operand[3], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 584:
    case 581:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 522:
    case 521:
    case 520:
    case 519:
    case 518:
    case 517:
    case 516:
    case 515:
      extract_insn_cached (insn);
      if (constant_call_address_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_NONE;
        }
      else
        {
   return MEMORY_LOAD;
        }
    case 527:
    case 514:
    case 513:
    case 512:
    case 511:
    case 510:
    case 509:
    case 498:
    case 497:
      extract_insn_cached (insn);
      if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 494:
    case 493:
      extract_insn_cached (insn);
      if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 426:
    case 425:
    case 417:
      extract_constrain_insn_cached (insn);
      if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || ((which_alternative == 1) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 411:
    case 408:
    case 407:
    case 402:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (memory_operand (recog_data.operand[2], VOIDmode)))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 294:
    case 290:
      extract_constrain_insn_cached (insn);
      if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || ((((1 << which_alternative) & 0x3)) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 288:
      extract_constrain_insn_cached (insn);
      if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || ((((1 << which_alternative) & 0x7)) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 217:
      extract_insn_cached (insn);
      if (((! (incdec_operand (recog_data.operand[2], QImode))) && (memory_operand (recog_data.operand[1], VOIDmode))) || ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || ((incdec_operand (recog_data.operand[2], QImode)) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 215:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 3)
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (memory_operand (recog_data.operand[2], VOIDmode)))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 414:
    case 209:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 2)
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (memory_operand (recog_data.operand[2], VOIDmode)))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 202:
      extract_constrain_insn_cached (insn);
      if ((which_alternative != 0) || (pic_symbolic_operand (recog_data.operand[2], SImode)))
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (memory_operand (recog_data.operand[2], VOIDmode)))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 201:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], SImode)))
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (memory_operand (recog_data.operand[2], VOIDmode)))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 196:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], DImode)))
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (memory_operand (recog_data.operand[2], VOIDmode)))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 172:
    case 169:
    case 166:
    case 163:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return MEMORY_UNKNOWN;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 176:
    case 175:
    case 174:
    case 171:
    case 168:
    case 165:
    case 162:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return MEMORY_UNKNOWN;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xe))
        {
   return MEMORY_UNKNOWN;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 145:
    case 142:
    case 133:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return MEMORY_UNKNOWN;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return MEMORY_UNKNOWN;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 109:
    case 106:
      extract_constrain_insn_cached (insn);
      if (((which_alternative == 1) && (memory_operand (recog_data.operand[1], VOIDmode))) || ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 101:
    case 100:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x7))
        {
   return MEMORY_UNKNOWN;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 96:
    case 95:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x18))
        {
   return MEMORY_UNKNOWN;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 89:
    case 88:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 1)
        {
   return MEMORY_UNKNOWN;
        }
      else
        {
   if (memory_operand (recog_data.operand[1], VOIDmode))
     {
       return MEMORY_BOTH;
     }
   else
     {
       return MEMORY_STORE;
     }
        }
    case 84:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 4)
        {
   return MEMORY_UNKNOWN;
        }
      else if ((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode))))
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || ((((((1 << which_alternative) & 0x7f0)) || (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))) && (!((1 << which_alternative) & 0x7e0))) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 83:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 4)
        {
   return MEMORY_UNKNOWN;
        }
      else if ((!((1 << which_alternative) & 0x7f0)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode))))
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || ((((((1 << which_alternative) & 0x7f0)) || (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))) && (!((1 << which_alternative) & 0x7e0))) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 721:
    case 720:
    case 82:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return MEMORY_UNKNOWN;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 76:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return MEMORY_UNKNOWN;
        }
      else
        {
   if (memory_operand (recog_data.operand[1], VOIDmode))
     {
       return MEMORY_BOTH;
     }
   else
     {
       return MEMORY_STORE;
     }
        }
    case 71:
      extract_constrain_insn_cached (insn);
      if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || ((((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0))) && ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 70:
    case 66:
    case 65:
      extract_insn_cached (insn);
      if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (((! (get_attr_type (insn) == TYPE_IMOV)) && (! (get_attr_type (insn) == TYPE_IMOVX))) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 59:
      extract_constrain_insn_cached (insn);
      if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || ((((! ((optimize_size) != (0))) && (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2)))))) && ((((optimize_size) != (0)) || ((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0))))) || ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 50:
      extract_constrain_insn_cached (insn);
      if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (((! (get_attr_type (insn) == TYPE_IMOV)) && ((((optimize_size) != (0)) || (((which_alternative == 0) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_himode_math & (1 << ix86_tune))) == (0)))) || ((((1 << which_alternative) & 0x6)) && (aligned_operand (recog_data.operand[1], HImode))))) || ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (!((1 << which_alternative) & 0x5))))) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 1033:
    case 1032:
    case 1031:
    case 1030:
    case 1029:
    case 1017:
    case 1016:
    case 1015:
    case 1014:
    case 1013:
    case 1012:
    case 1011:
    case 1010:
    case 1009:
    case 1008:
    case 1007:
    case 1006:
    case 1005:
    case 1004:
    case 1003:
    case 1002:
    case 1001:
    case 1000:
    case 999:
    case 998:
    case 997:
    case 996:
    case 995:
    case 994:
    case 993:
    case 992:
    case 991:
    case 990:
    case 989:
    case 960:
    case 959:
    case 958:
    case 957:
    case 956:
    case 929:
    case 928:
    case 927:
    case 926:
    case 925:
    case 924:
    case 923:
    case 922:
    case 921:
    case 920:
    case 919:
    case 918:
    case 917:
    case 916:
    case 915:
    case 914:
    case 913:
    case 912:
    case 911:
    case 910:
    case 909:
    case 908:
    case 907:
    case 906:
    case 905:
    case 904:
    case 897:
    case 896:
    case 879:
    case 878:
    case 876:
    case 875:
    case 874:
    case 873:
    case 872:
    case 870:
    case 869:
    case 865:
    case 864:
    case 848:
    case 847:
    case 846:
    case 845:
    case 844:
    case 843:
    case 821:
    case 820:
    case 819:
    case 790:
    case 789:
    case 788:
    case 787:
    case 786:
    case 785:
    case 784:
    case 783:
    case 782:
    case 781:
    case 780:
    case 779:
    case 778:
    case 777:
    case 776:
    case 751:
    case 750:
    case 749:
    case 748:
    case 747:
    case 746:
    case 737:
    case 736:
    case 735:
    case 734:
    case 733:
    case 732:
    case 731:
    case 730:
    case 729:
    case 728:
    case 727:
    case 726:
    case 725:
    case 724:
    case 723:
    case 722:
    case 719:
    case 707:
    case 706:
    case 705:
    case 704:
    case 703:
    case 702:
    case 701:
    case 700:
    case 699:
    case 698:
    case 669:
    case 666:
    case 663:
    case 660:
    case 585:
    case 582:
    case 391:
    case 390:
    case 389:
    case 388:
    case 387:
    case 386:
    case 376:
    case 375:
    case 374:
    case 373:
    case 372:
    case 371:
    case 173:
    case 170:
    case 167:
    case 164:
    case 156:
    case 155:
    case 151:
    case 150:
    case 146:
    case 144:
    case 143:
    case 141:
    case 140:
    case 139:
    case 138:
    case 137:
    case 136:
    case 132:
    case 131:
    case 130:
    case 129:
    case 128:
    case 125:
    case 124:
    case 123:
    case 122:
    case 121:
    case 120:
    case 119:
    case 118:
    case 116:
    case 115:
    case 114:
    case 113:
    case 110:
    case 107:
    case 104:
    case 91:
    case 90:
    case 87:
    case 74:
    case 73:
    case 72:
    case 69:
    case 64:
    case 63:
    case 61:
    case 60:
    case 55:
    case 54:
    case 53:
    case 47:
      extract_insn_cached (insn);
      if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 44:
      extract_constrain_insn_cached (insn);
      if ((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode))))
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (((((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode))) && (!((1 << which_alternative) & 0xfc))) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 43:
      extract_constrain_insn_cached (insn);
      if ((!((1 << which_alternative) & 0xfc)) && (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode))))
        {
   return MEMORY_NONE;
        }
      else if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (((((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode))) && (!((1 << which_alternative) & 0xfc))) && (memory_operand (recog_data.operand[2], VOIDmode))))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 466:
    case 464:
    case 442:
    case 440:
    case 401:
    case 400:
    case 399:
    case 398:
    case 397:
    case 396:
    case 395:
    case 394:
    case 393:
    case 392:
    case 361:
    case 360:
    case 359:
    case 358:
    case 357:
    case 356:
    case 355:
    case 354:
    case 353:
    case 352:
    case 347:
    case 341:
    case 321:
    case 319:
    case 299:
    case 297:
    case 244:
    case 108:
    case 105:
    case 103:
    case 81:
    case 80:
    case 62:
    case 56:
    case 42:
    case 41:
      extract_insn_cached (insn);
      if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else
        {
   return MEMORY_NONE;
        }
    case 79:
    case 78:
    case 40:
    case 39:
      extract_insn_cached (insn);
      if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_BOTH;
        }
      else
        {
   return MEMORY_LOAD;
        }
    case 77:
    case 58:
    case 57:
    case 49:
    case 48:
    case 38:
    case 37:
    case 36:
      extract_insn_cached (insn);
      if (memory_operand (recog_data.operand[1], VOIDmode))
        {
   return MEMORY_BOTH;
        }
      else
        {
   return MEMORY_STORE;
        }
    case 966:
    case 965:
    case 964:
    case 963:
    case 962:
    case 961:
    case 903:
    case 902:
    case 901:
    case 900:
    case 899:
    case 898:
    case 859:
    case 858:
    case 857:
    case 827:
    case 826:
    case 825:
    case 824:
    case 823:
    case 822:
    case 775:
    case 774:
    case 773:
    case 772:
    case 771:
    case 770:
    case 496:
    case 495:
    case 285:
    case 284:
    case 283:
    case 282:
    case 281:
    case 280:
    case 279:
    case 278:
    case 35:
    case 34:
    case 33:
    case 32:
    case 31:
    case 30:
    case 25:
    case 23:
    case 21:
    case 20:
    case 19:
    case 17:
    case 16:
    case 15:
    case 14:
    case 13:
    case 12:
    case 11:
    case 10:
    case 9:
    case 8:
    case 7:
    case 6:
    case 5:
    case 4:
    case 3:
    case 2:
    case 1:
    case 0:
      extract_insn_cached (insn);
      if ((memory_operand (recog_data.operand[0], VOIDmode)) || (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 191874, "?");
    case 1022:
    case 1021:
    case 718:
    case 717:
    case 716:
    case 715:
    case 714:
    case 713:
    case 712:
    case 711:
    case 710:
    case 709:
    case 708:
    case 697:
    case 696:
    case 686:
    case 685:
    case 684:
    case 683:
    case 682:
    case 681:
    case 680:
    case 679:
    case 678:
    case 677:
    case 676:
    case 675:
    case 674:
    case 673:
    case 668:
    case 667:
    case 665:
    case 664:
    case 662:
    case 661:
    case 659:
    case 658:
    case 647:
    case 646:
    case 645:
    case 644:
    case 643:
    case 642:
    case 550:
    case 549:
    case 548:
    case 547:
    case 546:
    case 545:
    case 544:
    case 543:
    case 542:
    case 541:
    case 540:
    case 539:
    case 538:
    case 537:
    case 536:
    case 535:
    case 532:
    case 531:
    case 530:
    case 529:
    case 528:
    case 526:
    case 525:
    case 524:
    case 523:
    case 508:
    case 507:
    case 506:
    case 505:
    case 504:
    case 503:
    case 502:
    case 501:
    case 500:
    case 499:
    case 450:
    case 449:
    case 423:
    case 422:
    case 405:
    case 404:
    case 385:
    case 384:
    case 383:
    case 382:
    case 381:
    case 380:
    case 379:
    case 378:
    case 377:
    case 370:
    case 369:
    case 368:
    case 367:
    case 366:
    case 365:
    case 364:
    case 363:
    case 362:
    case 351:
    case 287:
    case 286:
    case 275:
    case 273:
    case 272:
    case 270:
    case 269:
    case 267:
    case 266:
    case 225:
    case 177:
    case 161:
    case 160:
    case 127:
    case 126:
    case 117:
    case 99:
    case 98:
    case 94:
    case 93:
    case 75:
    case 29:
    case 28:
    case 27:
    case 26:
    case 24:
    case 22:
    case 18:
    case 849:
    case 852:
    case 1018:
    case 1019:
    case 1020:
      return MEMORY_UNKNOWN;
    case 534:
    case 533:
    case 159:
    case 158:
    case 157:
    case 154:
    case 153:
    case 152:
    case 149:
    case 148:
    case 147:
    case 618:
    case 619:
    case 620:
    case 621:
    case 622:
    case 623:
    case 624:
    case 625:
    case 626:
    case 627:
    case 628:
    case 629:
      return MEMORY_BOTH;
    case 45:
    case 51:
    case 67:
    case 85:
    case 630:
    case 631:
    case 632:
    case 633:
    case 634:
    case 635:
    case 636:
    case 637:
    case 638:
    case 639:
    case 640:
    case 641:
    case 851:
    case 853:
      return MEMORY_STORE;
    case 46:
    case 52:
    case 68:
    case 86:
    case 551:
    case 552:
    case 553:
    case 554:
    case 850:
      return MEMORY_LOAD;
    case 657:
    case 617:
    case 616:
    case 615:
    case 614:
    case 613:
    case 612:
    case 611:
    case 610:
    case 609:
    case 608:
    case 607:
    case 606:
    case 605:
    case 604:
    case 603:
    case 602:
    case 601:
    case 600:
    case 599:
    case 598:
    case 597:
    case 596:
    case 595:
    case 594:
    case 593:
    case 592:
    case 591:
    case 590:
    case 589:
    case 588:
    case 587:
    case 586:
    case 583:
    case 195:
    case 194:
    case 193:
    case 192:
    case 191:
    case 190:
    case 189:
    case 188:
    case 187:
    case 186:
    case 648:
    case 650:
    case 768:
    case 769:
    case 812:
    case 813:
    case 863:
    case 880:
    case 881:
    case 882:
    case 883:
    case 952:
      return MEMORY_NONE;
    default:
      extract_insn_cached (insn);
      if ((memory_operand (recog_data.operand[0], VOIDmode)) && (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return MEMORY_BOTH;
        }
      else if (memory_operand (recog_data.operand[0], VOIDmode))
        {
   return MEMORY_STORE;
        }
      else if ((memory_operand (recog_data.operand[1], VOIDmode)) || (memory_operand (recog_data.operand[2], VOIDmode)))
        {
   return MEMORY_LOAD;
        }
      else
        {
   return MEMORY_NONE;
        }
    }
}
int
get_attr_modrm (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 695:
    case 694:
    case 693:
    case 692:
    case 691:
    case 690:
    case 689:
    case 688:
    case 687:
      extract_insn_cached (insn);
      if (constant_call_address_operand (recog_data.operand[1], VOIDmode))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 671:
      extract_constrain_insn_cached (insn);
      if (((which_alternative == 1) && (const0_operand (recog_data.operand[2], DImode))) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 670:
      extract_constrain_insn_cached (insn);
      if (((which_alternative == 1) && (const0_operand (recog_data.operand[2], SImode))) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 580:
    case 579:
    case 578:
    case 577:
    case 576:
    case 575:
    case 574:
    case 573:
    case 572:
    case 571:
    case 570:
    case 568:
    case 567:
    case 566:
    case 565:
    case 563:
    case 562:
      if (get_attr_unit (insn) == UNIT_I387)
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 522:
    case 521:
    case 520:
    case 519:
    case 518:
    case 517:
    case 516:
    case 515:
      extract_insn_cached (insn);
      if (constant_call_address_operand (recog_data.operand[0], VOIDmode))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 278:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 0;
        }
      else if (which_alternative == 1)
        {
   return 1;
        }
      else if (which_alternative == 2)
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 223:
    case 222:
    case 221:
    case 219:
    case 218:
    case 217:
    case 216:
      extract_insn_cached (insn);
      if ((incdec_operand (recog_data.operand[2], QImode)) && ((register_operand (recog_data.operand[1], SImode)) || (register_operand (recog_data.operand[1], HImode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 215:
      extract_constrain_insn_cached (insn);
      if (((which_alternative != 3) && (incdec_operand (recog_data.operand[2], QImode))) && ((register_operand (recog_data.operand[1], SImode)) || (register_operand (recog_data.operand[1], HImode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 220:
    case 214:
    case 213:
    case 212:
    case 211:
    case 210:
      extract_insn_cached (insn);
      if ((incdec_operand (recog_data.operand[2], HImode)) && ((register_operand (recog_data.operand[1], SImode)) || (register_operand (recog_data.operand[1], HImode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 209:
      extract_constrain_insn_cached (insn);
      if (((which_alternative != 2) && (incdec_operand (recog_data.operand[2], HImode))) && ((register_operand (recog_data.operand[1], SImode)) || (register_operand (recog_data.operand[1], HImode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 208:
    case 207:
    case 206:
    case 205:
    case 204:
    case 203:
      extract_insn_cached (insn);
      if ((incdec_operand (recog_data.operand[2], SImode)) && ((register_operand (recog_data.operand[1], SImode)) || (register_operand (recog_data.operand[1], HImode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 200:
    case 199:
    case 198:
    case 197:
      extract_insn_cached (insn);
      if ((incdec_operand (recog_data.operand[2], DImode)) && ((register_operand (recog_data.operand[1], SImode)) || (register_operand (recog_data.operand[1], HImode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 202:
    case 201:
    case 196:
      extract_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_INCDEC) && ((register_operand (recog_data.operand[1], SImode)) || (register_operand (recog_data.operand[1], HImode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 137:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 136:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x3))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 656:
    case 655:
    case 654:
    case 128:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 123:
    case 122:
    case 121:
      extract_constrain_insn_cached (insn);
      if ((! (((ix86_tune) == (CPU_K6)))) && (which_alternative == 0))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 114:
    case 113:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 1) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 101:
    case 100:
    case 96:
    case 95:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 91:
    case 90:
      extract_constrain_insn_cached (insn);
      if ((((1 << which_alternative) & 0x7)) || ((((1 << which_alternative) & 0x18)) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode)))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 89:
    case 88:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 1) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 84:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   if (((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
     {
       return 0;
     }
   else
     {
       return 1;
     }
        }
      else if (((1 << which_alternative) & 0x6))
        {
   return 0;
        }
      else
        {
   if (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
     {
       return 0;
     }
   else
     {
       return 1;
     }
        }
    case 83:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   if (((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
     {
       return 0;
     }
   else
     {
       return 1;
     }
        }
      else if (((1 << which_alternative) & 0x6))
        {
   return 0;
        }
      else
        {
   if (((!((1 << which_alternative) & 0x7f0)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode))))) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
     {
       return 0;
     }
   else
     {
       return 1;
     }
        }
    case 76:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 0) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 71:
      extract_constrain_insn_cached (insn);
      if (((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 59:
      extract_constrain_insn_cached (insn);
      if ((((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2)))))) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 74:
    case 73:
    case 72:
    case 61:
    case 55:
      extract_insn_cached (insn);
      if ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode)))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 70:
    case 66:
    case 65:
    case 50:
      extract_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_IMOV) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 86:
    case 85:
    case 68:
    case 67:
    case 52:
    case 51:
    case 46:
    case 45:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 0;
        }
      else
        {
   if ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode)))
     {
       return 0;
     }
   else
     {
       return 1;
     }
        }
    case 44:
      extract_constrain_insn_cached (insn);
      if (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 43:
      extract_constrain_insn_cached (insn);
      if (((!((1 << which_alternative) & 0xfc)) && ((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode))))) && ((register_operand (recog_data.operand[0], VOIDmode)) && (immediate_operand (recog_data.operand[1], VOIDmode))))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 79:
    case 78:
    case 40:
    case 39:
      extract_insn_cached (insn);
      if (! (memory_operand (recog_data.operand[0], VOIDmode)))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 77:
    case 58:
    case 57:
    case 49:
    case 48:
    case 38:
    case 37:
    case 36:
      extract_insn_cached (insn);
      if (! (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 584:
    case 581:
    case 559:
    case 556:
    case 281:
    case 280:
    case 279:
    case 176:
    case 175:
    case 174:
    case 172:
    case 171:
    case 169:
    case 168:
    case 166:
    case 165:
    case 163:
    case 162:
    case 145:
    case 142:
    case 135:
    case 134:
    case 133:
    case 34:
    case 31:
    case 118:
    case 417:
    case 425:
    case 426:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 657:
    case 647:
    case 646:
    case 645:
    case 644:
    case 643:
    case 642:
    case 641:
    case 640:
    case 639:
    case 638:
    case 637:
    case 636:
    case 635:
    case 634:
    case 633:
    case 632:
    case 631:
    case 630:
    case 629:
    case 628:
    case 627:
    case 626:
    case 625:
    case 624:
    case 623:
    case 622:
    case 621:
    case 620:
    case 619:
    case 618:
    case 617:
    case 616:
    case 615:
    case 614:
    case 613:
    case 612:
    case 611:
    case 610:
    case 609:
    case 608:
    case 607:
    case 606:
    case 605:
    case 604:
    case 603:
    case 602:
    case 601:
    case 600:
    case 599:
    case 598:
    case 597:
    case 596:
    case 595:
    case 594:
    case 593:
    case 592:
    case 591:
    case 590:
    case 589:
    case 588:
    case 587:
    case 586:
    case 583:
    case 561:
    case 558:
    case 555:
    case 534:
    case 533:
    case 391:
    case 390:
    case 389:
    case 388:
    case 387:
    case 386:
    case 376:
    case 375:
    case 374:
    case 373:
    case 372:
    case 371:
    case 161:
    case 160:
    case 159:
    case 158:
    case 157:
    case 154:
    case 153:
    case 152:
    case 149:
    case 148:
    case 147:
    case 146:
    case 144:
    case 143:
    case 141:
    case 138:
    case 132:
    case 131:
    case 130:
    case 102:
    case 97:
    case 92:
    case 33:
    case 30:
    case 28:
    case 25:
    case 23:
    case 21:
    case 20:
    case 19:
    case 47:
    case 53:
    case 54:
    case 60:
    case 87:
    case 497:
    case 498:
    case 509:
    case 524:
    case 525:
    case 526:
    case 528:
    case 551:
    case 552:
    case 553:
    case 554:
    case 853:
      return 0;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 192826, "?");
    default:
      return 1;
    }
}
enum attr_mode
get_attr_mode (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 1015:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_DF;
        }
      else
        {
   return MODE_V2DF;
        }
    case 654:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return MODE_SF;
        }
      else
        {
   return MODE_SI;
        }
    case 281:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return MODE_QI;
        }
      else
        {
   return MODE_SI;
        }
    case 278:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return MODE_SI;
        }
      else
        {
   return MODE_DI;
        }
    case 340:
    case 318:
    case 298:
    case 296:
    case 216:
    case 215:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return MODE_QI;
        }
      else
        {
   return MODE_SI;
        }
    case 294:
    case 209:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return MODE_HI;
        }
      else
        {
   return MODE_SI;
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xf))
        {
   return MODE_SF;
        }
      else
        {
   return MODE_DF;
        }
    case 114:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_SI;
        }
      else if (which_alternative == 1)
        {
   return MODE_DI;
        }
      else
        {
   return MODE_SI;
        }
    case 113:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_SI;
        }
      else if (((1 << which_alternative) & 0x6))
        {
   return MODE_DI;
        }
      else
        {
   return MODE_TI;
        }
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return MODE_SI;
        }
      else if (which_alternative == 3)
        {
   return MODE_DI;
        }
      else
        {
   return MODE_TI;
        }
    case 101:
    case 100:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return MODE_XF;
        }
      else
        {
   return MODE_SI;
        }
    case 93:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_DF;
        }
      else if (((1 << which_alternative) & 0x6))
        {
   return MODE_SI;
        }
      else
        {
   return MODE_DF;
        }
    case 84:
    case 83:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_SI;
        }
      else if (((1 << which_alternative) & 0xe))
        {
   return MODE_DI;
        }
      else if (which_alternative == 4)
        {
   return MODE_SI;
        }
      else if (((1 << which_alternative) & 0xe0))
        {
   return MODE_DI;
        }
      else if (which_alternative == 8)
        {
   return MODE_TI;
        }
      else
        {
   return MODE_DI;
        }
    case 82:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x1f))
        {
   return MODE_DI;
        }
      else if (which_alternative == 5)
        {
   return MODE_TI;
        }
      else
        {
   return MODE_DI;
        }
    case 71:
      extract_constrain_insn_cached (insn);
      if ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))
        {
   return MODE_SI;
        }
      else
        {
   return MODE_QI;
        }
    case 59:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x38))
        {
   return MODE_SI;
        }
      else if (which_alternative == 6)
        {
   return MODE_QI;
        }
      else if (((! ((optimize_size) != (0))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))) || ((((optimize_size) != (0)) || ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))) && ((((1 << which_alternative) & 0x7)) && ((((x86_partial_reg_dependency & (1 << ix86_tune))) != (0)) || ((((x86_partial_reg_stall & (1 << ix86_tune))) != (0)) && (((x86_qimode_math & (1 << ix86_tune))) == (0)))))))
        {
   return MODE_SI;
        }
      else
        {
   return MODE_QI;
        }
    case 50:
      extract_constrain_insn_cached (insn);
      if ((((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5)))) || (((((1 << which_alternative) & 0x6)) && (aligned_operand (recog_data.operand[1], HImode))) || ((which_alternative == 0) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_himode_math & (1 << ix86_tune))) == (0))))))
        {
   return MODE_SI;
        }
      else
        {
   return MODE_HI;
        }
    case 44:
    case 43:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return MODE_SI;
        }
      else if (which_alternative == 2)
        {
   return MODE_DI;
        }
      else if (((1 << which_alternative) & 0x18))
        {
   return MODE_SI;
        }
      else if (which_alternative == 5)
        {
   return MODE_TI;
        }
      else
        {
   return MODE_SI;
        }
    case 18:
    case 25:
    case 26:
    case 30:
    case 33:
      extract_insn_cached (insn);
      if (((enum machine_mode) (recog_data.operand[1])->mode) == SFmode)
        {
   return MODE_SF;
        }
      else if (((enum machine_mode) (recog_data.operand[1])->mode) == DFmode)
        {
   return MODE_DF;
        }
      else
        {
   return MODE_XF;
        }
    case 31:
    case 32:
    case 34:
    case 35:
      extract_insn_cached (insn);
      if (((enum machine_mode) (recog_data.operand[1])->mode) == SFmode)
        {
   return MODE_SF;
        }
      else
        {
   return MODE_DF;
        }
    case 65:
    case 66:
    case 70:
      if (get_attr_type (insn) == TYPE_IMOVX)
        {
   return MODE_SI;
        }
      else
        {
   return MODE_QI;
        }
    case 88:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_SF;
        }
      else if (which_alternative == 1)
        {
   return MODE_SI;
        }
      else
        {
   return MODE_SF;
        }
    case 89:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_SF;
        }
      else if (which_alternative == 1)
        {
   return MODE_DI;
        }
      else
        {
   return MODE_SF;
        }
    case 90:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x618))
        {
   return MODE_SI;
        }
      else if (which_alternative == 5)
        {
   if (((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && ((((target_flags & 0x00008000) != 0)) != (0))) && ((optimize_size) == (0)))
     {
       return MODE_TI;
     }
   else
     {
       return MODE_V4SF;
     }
        }
      else if (which_alternative == 6)
        {
   if ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_SF;
     }
        }
      else if (which_alternative == 11)
        {
   return MODE_DI;
        }
      else
        {
   return MODE_SF;
        }
    case 91:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x618))
        {
   return MODE_SI;
        }
      else if (which_alternative == 5)
        {
   if (((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && ((((target_flags & 0x00008000) != 0)) != (0))) && ((optimize_size) == (0)))
     {
       return MODE_TI;
     }
   else
     {
       return MODE_V4SF;
     }
        }
      else if (which_alternative == 6)
        {
   if ((((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)) || (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_SF;
     }
        }
      else if (which_alternative == 11)
        {
   return MODE_DI;
        }
      else
        {
   return MODE_SF;
        }
    case 94:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_DF;
        }
      else if (which_alternative == 1)
        {
   return MODE_SI;
        }
      else
        {
   return MODE_DF;
        }
    case 95:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x18))
        {
   return MODE_SI;
        }
      else if (which_alternative == 5)
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else if (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))
     {
       return MODE_TI;
     }
   else
     {
       return MODE_V2DF;
     }
        }
      else if (which_alternative == 6)
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else if (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))
     {
       return MODE_V2DF;
     }
   else
     {
       return MODE_DF;
     }
        }
      else if (which_alternative == 7)
        {
   if (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))
     {
       return MODE_V2DF;
     }
   else
     {
       return MODE_DF;
     }
        }
      else
        {
   return MODE_DF;
        }
    case 96:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x18))
        {
   return MODE_SI;
        }
      else if (which_alternative == 5)
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else if (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))
     {
       return MODE_TI;
     }
   else
     {
       return MODE_V2DF;
     }
        }
      else if (which_alternative == 6)
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else if (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))
     {
       return MODE_V2DF;
     }
   else
     {
       return MODE_DF;
     }
        }
      else if (which_alternative == 7)
        {
   if (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))
     {
       return MODE_V2DF;
     }
   else
     {
       return MODE_DF;
     }
        }
      else
        {
   return MODE_DF;
        }
    case 98:
    case 99:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_XF;
        }
      else
        {
   return MODE_SI;
        }
    case 289:
    case 288:
    case 115:
    case 116:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_SI;
        }
      else
        {
   return MODE_DI;
        }
    case 128:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_SF;
        }
      else if (which_alternative == 1)
        {
   return MODE_XF;
        }
      else
        {
   return MODE_DF;
        }
    case 130:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_SF;
        }
      else
        {
   return MODE_XF;
        }
    case 131:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_DF;
        }
      else
        {
   return MODE_XF;
        }
    case 137:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_DF;
        }
      else
        {
   return MODE_SF;
        }
    case 411:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_HI;
        }
      else
        {
   return MODE_SI;
        }
    case 414:
    case 400:
    case 415:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return MODE_QI;
        }
      else
        {
   return MODE_SI;
        }
    case 699:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else if (which_alternative == 2)
        {
   if ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else
        {
   return MODE_TI;
        }
    case 700:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else if (which_alternative == 2)
        {
   if ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else
        {
   return MODE_TI;
        }
    case 705:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_V2DF;
     }
        }
      else if (which_alternative == 2)
        {
   if ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_V2DF;
     }
        }
      else
        {
   return MODE_V2DF;
        }
    case 706:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else if (which_alternative == 2)
        {
   if ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else
        {
   return MODE_TI;
        }
    case 707:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else if (which_alternative == 2)
        {
   if ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else
        {
   return MODE_TI;
        }
    case 719:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else if (which_alternative == 2)
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else
        {
   return MODE_TI;
        }
    case 720:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xc))
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else if (which_alternative == 4)
        {
   if ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else
        {
   return MODE_DI;
        }
    case 721:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xc))
        {
   if ((optimize_size) != (0))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else if (which_alternative == 4)
        {
   if ((((x86_sse_typeless_stores & (1 << ix86_tune))) != (0)) || ((optimize_size) != (0)))
     {
       return MODE_V4SF;
     }
   else
     {
       return MODE_TI;
     }
        }
      else
        {
   return MODE_DI;
        }
    case 768:
      extract_constrain_insn_cached (insn);
      if (((((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0)) && ((((target_flags & 0x00008000) != 0)) != (0))) && ((optimize_size) == (0)))
        {
   return MODE_TI;
        }
      else
        {
   return MODE_V4SF;
        }
    case 952:
      extract_constrain_insn_cached (insn);
      if ((optimize_size) != (0))
        {
   return MODE_V4SF;
        }
      else
        {
   return MODE_TI;
        }
    case 854:
    case 855:
    case 856:
    case 857:
    case 858:
    case 859:
    case 860:
    case 861:
    case 862:
    case 864:
    case 865:
    case 866:
    case 867:
    case 868:
    case 869:
    case 870:
      return MODE_V2SF;
    case 756:
    case 757:
    case 758:
    case 759:
    case 884:
    case 886:
    case 888:
    case 890:
    case 892:
    case 894:
    case 896:
    case 898:
    case 899:
    case 904:
    case 905:
    case 908:
    case 910:
    case 911:
    case 914:
    case 929:
    case 989:
    case 990:
    case 1002:
    case 1003:
    case 1013:
    case 1017:
    case 1024:
    case 1026:
    case 1028:
      return MODE_V2DF;
    case 698:
    case 722:
    case 723:
    case 724:
    case 725:
    case 728:
    case 730:
    case 731:
    case 732:
    case 733:
    case 737:
    case 738:
    case 740:
    case 742:
    case 744:
    case 746:
    case 748:
    case 750:
    case 752:
    case 753:
    case 754:
    case 755:
    case 769:
    case 770:
    case 771:
    case 776:
    case 777:
    case 778:
    case 780:
    case 782:
    case 783:
    case 928:
    case 1023:
    case 1025:
    case 1027:
    case 1029:
    case 1030:
      return MODE_V4SF;
    case 760:
    case 761:
    case 762:
    case 763:
    case 764:
    case 765:
    case 766:
    case 767:
    case 871:
    case 872:
    case 873:
    case 874:
    case 875:
    case 876:
    case 877:
    case 878:
    case 879:
    case 906:
    case 907:
    case 909:
    case 912:
    case 913:
    case 915:
    case 916:
    case 917:
    case 918:
    case 919:
    case 930:
    case 931:
    case 932:
    case 933:
    case 934:
    case 935:
    case 936:
    case 937:
    case 938:
    case 939:
    case 940:
    case 941:
    case 942:
    case 943:
    case 944:
    case 945:
    case 946:
    case 947:
    case 948:
    case 949:
    case 950:
    case 951:
    case 953:
    case 954:
    case 955:
    case 956:
    case 957:
    case 958:
    case 959:
    case 960:
    case 961:
    case 962:
    case 963:
    case 964:
    case 965:
    case 966:
    case 967:
    case 968:
    case 969:
    case 970:
    case 971:
    case 972:
    case 973:
    case 974:
    case 975:
    case 976:
    case 977:
    case 978:
    case 979:
    case 980:
    case 981:
    case 982:
    case 983:
    case 984:
    case 985:
    case 986:
    case 987:
    case 988:
    case 991:
    case 992:
    case 993:
    case 994:
    case 995:
    case 996:
    case 997:
    case 998:
    case 999:
    case 1000:
    case 1001:
    case 1004:
    case 1005:
    case 1006:
    case 1007:
    case 1008:
    case 1009:
    case 1010:
    case 1011:
    case 1012:
    case 1031:
      return MODE_TI;
    case 23:
    case 24:
    case 102:
    case 174:
    case 175:
    case 176:
    case 374:
    case 375:
    case 376:
    case 390:
    case 391:
    case 561:
    case 575:
    case 588:
    case 589:
    case 590:
    case 591:
    case 592:
    case 596:
    case 600:
    case 604:
    case 607:
    case 610:
    case 611:
    case 612:
    case 613:
    case 614:
    case 615:
    case 616:
    case 657:
      return MODE_XF;
    case 21:
    case 22:
    case 97:
    case 129:
    case 140:
    case 144:
    case 145:
    case 146:
    case 151:
    case 155:
    case 156:
    case 168:
    case 169:
    case 170:
    case 171:
    case 172:
    case 173:
    case 372:
    case 373:
    case 387:
    case 388:
    case 389:
    case 496:
    case 558:
    case 559:
    case 560:
    case 567:
    case 568:
    case 569:
    case 584:
    case 585:
    case 586:
    case 587:
    case 593:
    case 595:
    case 597:
    case 599:
    case 601:
    case 603:
    case 605:
    case 608:
    case 655:
    case 656:
    case 663:
    case 669:
    case 885:
    case 887:
    case 889:
    case 891:
    case 893:
    case 895:
    case 900:
    case 901:
    case 902:
    case 903:
    case 924:
    case 925:
    case 927:
    case 1014:
    case 1016:
    case 1032:
    case 1033:
      return MODE_DF;
    case 19:
    case 20:
    case 92:
    case 132:
    case 133:
    case 136:
    case 138:
    case 139:
    case 141:
    case 142:
    case 143:
    case 150:
    case 162:
    case 163:
    case 164:
    case 165:
    case 166:
    case 167:
    case 371:
    case 386:
    case 495:
    case 555:
    case 556:
    case 557:
    case 562:
    case 563:
    case 564:
    case 572:
    case 573:
    case 574:
    case 578:
    case 579:
    case 580:
    case 581:
    case 582:
    case 583:
    case 594:
    case 598:
    case 602:
    case 606:
    case 609:
    case 660:
    case 666:
    case 734:
    case 735:
    case 736:
    case 739:
    case 741:
    case 743:
    case 745:
    case 747:
    case 749:
    case 751:
    case 772:
    case 773:
    case 774:
    case 775:
    case 779:
    case 781:
    case 784:
    case 785:
    case 786:
    case 789:
    case 790:
    case 897:
    case 926:
      return MODE_SF;
    case 0:
    case 1:
    case 2:
    case 76:
    case 77:
    case 78:
    case 79:
    case 81:
    case 85:
    case 86:
    case 87:
    case 118:
    case 119:
    case 120:
    case 147:
    case 148:
    case 149:
    case 178:
    case 179:
    case 189:
    case 196:
    case 197:
    case 198:
    case 199:
    case 200:
    case 226:
    case 227:
    case 228:
    case 229:
    case 239:
    case 247:
    case 254:
    case 256:
    case 258:
    case 261:
    case 268:
    case 273:
    case 274:
    case 305:
    case 306:
    case 307:
    case 327:
    case 328:
    case 329:
    case 352:
    case 353:
    case 392:
    case 393:
    case 402:
    case 403:
    case 417:
    case 419:
    case 421:
    case 446:
    case 448:
    case 470:
    case 482:
    case 618:
    case 625:
    case 630:
    case 637:
    case 648:
    case 649:
    case 671:
    case 672:
    case 701:
    case 702:
    case 703:
    case 704:
    case 726:
    case 727:
    case 729:
    case 788:
    case 791:
    case 792:
    case 793:
    case 794:
    case 795:
    case 796:
    case 797:
    case 798:
    case 799:
    case 800:
    case 801:
    case 802:
    case 803:
    case 804:
    case 805:
    case 806:
    case 807:
    case 808:
    case 809:
    case 810:
    case 811:
    case 812:
    case 813:
    case 814:
    case 815:
    case 816:
    case 817:
    case 818:
    case 819:
    case 820:
    case 821:
    case 822:
    case 823:
    case 824:
    case 825:
    case 826:
    case 827:
    case 828:
    case 829:
    case 830:
    case 831:
    case 832:
    case 833:
    case 834:
    case 835:
    case 836:
    case 837:
    case 838:
    case 839:
    case 840:
    case 841:
    case 842:
    case 843:
    case 844:
    case 845:
    case 846:
    case 847:
    case 848:
    case 853:
    case 921:
    case 923:
      return MODE_DI;
    case 3:
    case 4:
    case 5:
    case 28:
    case 29:
    case 36:
    case 37:
    case 38:
    case 39:
    case 40:
    case 41:
    case 42:
    case 45:
    case 46:
    case 47:
    case 54:
    case 63:
    case 64:
    case 69:
    case 80:
    case 103:
    case 104:
    case 108:
    case 109:
    case 110:
    case 121:
    case 122:
    case 124:
    case 125:
    case 152:
    case 153:
    case 154:
    case 182:
    case 183:
    case 184:
    case 186:
    case 187:
    case 188:
    case 190:
    case 191:
    case 192:
    case 193:
    case 194:
    case 195:
    case 201:
    case 202:
    case 203:
    case 204:
    case 205:
    case 206:
    case 207:
    case 208:
    case 213:
    case 232:
    case 233:
    case 234:
    case 235:
    case 236:
    case 237:
    case 238:
    case 248:
    case 249:
    case 255:
    case 257:
    case 259:
    case 260:
    case 262:
    case 263:
    case 271:
    case 272:
    case 275:
    case 276:
    case 279:
    case 290:
    case 291:
    case 292:
    case 293:
    case 308:
    case 309:
    case 310:
    case 311:
    case 312:
    case 313:
    case 314:
    case 330:
    case 331:
    case 332:
    case 333:
    case 334:
    case 335:
    case 336:
    case 354:
    case 355:
    case 356:
    case 357:
    case 394:
    case 395:
    case 396:
    case 397:
    case 406:
    case 407:
    case 408:
    case 409:
    case 410:
    case 424:
    case 425:
    case 426:
    case 429:
    case 430:
    case 433:
    case 434:
    case 453:
    case 454:
    case 457:
    case 458:
    case 473:
    case 474:
    case 485:
    case 486:
    case 565:
    case 566:
    case 570:
    case 571:
    case 576:
    case 577:
    case 619:
    case 620:
    case 626:
    case 627:
    case 628:
    case 629:
    case 631:
    case 632:
    case 638:
    case 639:
    case 650:
    case 651:
    case 653:
    case 670:
    case 787:
    case 920:
    case 922:
      return MODE_SI;
    case 6:
    case 7:
    case 8:
    case 48:
    case 51:
    case 52:
    case 53:
    case 55:
    case 56:
    case 57:
    case 105:
    case 106:
    case 107:
    case 123:
    case 157:
    case 158:
    case 159:
    case 160:
    case 161:
    case 181:
    case 210:
    case 211:
    case 212:
    case 214:
    case 231:
    case 240:
    case 241:
    case 242:
    case 250:
    case 277:
    case 280:
    case 295:
    case 315:
    case 316:
    case 317:
    case 337:
    case 338:
    case 339:
    case 358:
    case 359:
    case 398:
    case 399:
    case 412:
    case 413:
    case 436:
    case 438:
    case 460:
    case 462:
    case 476:
    case 488:
    case 621:
    case 622:
    case 633:
    case 634:
    case 652:
      return MODE_HI;
    case 9:
    case 10:
    case 11:
    case 12:
    case 13:
    case 14:
    case 15:
    case 16:
    case 17:
    case 49:
    case 58:
    case 60:
    case 61:
    case 62:
    case 67:
    case 68:
    case 72:
    case 73:
    case 74:
    case 180:
    case 185:
    case 217:
    case 218:
    case 219:
    case 220:
    case 221:
    case 222:
    case 223:
    case 224:
    case 230:
    case 243:
    case 244:
    case 245:
    case 246:
    case 251:
    case 252:
    case 253:
    case 264:
    case 265:
    case 282:
    case 283:
    case 284:
    case 285:
    case 297:
    case 299:
    case 300:
    case 301:
    case 302:
    case 303:
    case 304:
    case 319:
    case 320:
    case 321:
    case 322:
    case 323:
    case 324:
    case 325:
    case 326:
    case 341:
    case 342:
    case 343:
    case 344:
    case 345:
    case 346:
    case 347:
    case 348:
    case 349:
    case 350:
    case 360:
    case 361:
    case 401:
    case 416:
    case 441:
    case 442:
    case 444:
    case 465:
    case 466:
    case 468:
    case 479:
    case 480:
    case 491:
    case 492:
    case 493:
    case 494:
    case 623:
    case 624:
    case 635:
    case 636:
    case 640:
    case 641:
    case 642:
    case 643:
    case 644:
    case 645:
    case 646:
    case 647:
      return MODE_QI;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 194521, "?");
    default:
      return MODE_UNKNOWN;
    }
}
enum attr_pent_pair
get_attr_pent_pair (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 695:
    case 694:
    case 693:
    case 692:
    case 691:
    case 690:
    case 689:
    case 688:
    case 687:
      extract_insn_cached (insn);
      if (constant_call_address_operand (recog_data.operand[1], VOIDmode))
        {
   return PENT_PAIR_PV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 671:
    case 670:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else
        {
   return PENT_PAIR_UV;
        }
    case 522:
    case 521:
    case 520:
    case 519:
    case 518:
    case 517:
    case 516:
    case 515:
      extract_insn_cached (insn);
      if (constant_call_address_operand (recog_data.operand[0], VOIDmode))
        {
   return PENT_PAIR_PV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 492:
    case 490:
    case 479:
    case 477:
      extract_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (const1_operand (recog_data.operand[1], VOIDmode))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 491:
    case 489:
    case 488:
    case 487:
    case 486:
    case 485:
    case 484:
    case 483:
    case 482:
    case 481:
    case 480:
    case 478:
    case 476:
    case 475:
    case 474:
    case 473:
    case 472:
    case 471:
    case 470:
    case 469:
      extract_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (const1_operand (recog_data.operand[2], VOIDmode))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 466:
    case 464:
    case 442:
    case 440:
      extract_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (const_int_operand (recog_data.operand[1], VOIDmode))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 468:
    case 467:
    case 465:
    case 463:
    case 462:
    case 461:
    case 460:
    case 459:
    case 458:
    case 457:
    case 456:
    case 455:
    case 454:
    case 453:
    case 452:
    case 451:
    case 448:
    case 447:
    case 446:
    case 445:
    case 444:
    case 443:
    case 441:
    case 439:
    case 438:
    case 437:
    case 436:
    case 435:
    case 434:
    case 433:
    case 432:
    case 431:
    case 430:
    case 429:
    case 428:
    case 427:
    case 421:
    case 420:
    case 419:
    case 418:
      extract_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (const_int_operand (recog_data.operand[2], VOIDmode))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 426:
    case 425:
    case 417:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((which_alternative == 1) && (const_int_operand (recog_data.operand[2], VOIDmode)))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 414:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((get_attr_type (insn) == TYPE_ALU) || (which_alternative == 2))
        {
   return PENT_PAIR_UV;
        }
      else if ((get_attr_type (insn) == TYPE_ISHIFT) && (const_int_operand (recog_data.operand[2], VOIDmode)))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 413:
    case 412:
      extract_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((get_attr_type (insn) == TYPE_ALU) || ((get_attr_type (insn) == TYPE_ISHIFT) && (const_int_operand (recog_data.operand[2], VOIDmode))))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 411:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((which_alternative != 0) || (get_attr_type (insn) == TYPE_ALU))
        {
   if (which_alternative == 0)
     {
       return PENT_PAIR_PU;
     }
   else
     {
       return PENT_PAIR_UV;
     }
        }
      else if ((get_attr_type (insn) == TYPE_ISHIFT) && (const_int_operand (recog_data.operand[2], VOIDmode)))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 410:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return PENT_PAIR_UV;
        }
      else if (const_int_operand (recog_data.operand[2], VOIDmode))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 408:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((which_alternative != 0) || ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode))))
        {
   return PENT_PAIR_UV;
        }
      else if (const_int_operand (recog_data.operand[2], VOIDmode))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 416:
    case 415:
    case 409:
    case 403:
      extract_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (get_attr_type (insn) == TYPE_ALU)
        {
   return PENT_PAIR_UV;
        }
      else if ((get_attr_type (insn) == TYPE_ISHIFT) && (const_int_operand (recog_data.operand[2], VOIDmode)))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 407:
    case 402:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((which_alternative != 0) || (get_attr_type (insn) == TYPE_ALU))
        {
   return PENT_PAIR_UV;
        }
      else if ((get_attr_type (insn) == TYPE_ISHIFT) && (const_int_operand (recog_data.operand[2], VOIDmode)))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 294:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (((1 << which_alternative) & 0x3))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 290:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (((1 << which_alternative) & 0x3))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 288:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (((1 << which_alternative) & 0x7))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 215:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (((which_alternative != 3) && (! (incdec_operand (recog_data.operand[2], QImode)))) || ((which_alternative == 3) || ((which_alternative != 3) && (incdec_operand (recog_data.operand[2], QImode)))))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 209:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (((which_alternative != 2) && (! (incdec_operand (recog_data.operand[2], HImode)))) || ((which_alternative == 2) || ((which_alternative != 2) && (incdec_operand (recog_data.operand[2], HImode)))))
        {
   if (((1 << which_alternative) & 0x3))
     {
       return PENT_PAIR_PU;
     }
   else
     {
       return PENT_PAIR_UV;
     }
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 202:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((get_attr_type (insn) == TYPE_ALU) || (((which_alternative != 0) || (pic_symbolic_operand (recog_data.operand[2], SImode))) || (get_attr_type (insn) == TYPE_INCDEC)))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 201:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((get_attr_type (insn) == TYPE_ALU) || (((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], SImode))) || (get_attr_type (insn) == TYPE_INCDEC)))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 196:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((get_attr_type (insn) == TYPE_ALU) || (((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], DImode))) || (get_attr_type (insn) == TYPE_INCDEC)))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 114:
    case 113:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (which_alternative == 1)
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 109:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (which_alternative != 0)
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 106:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (which_alternative != 0)
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 91:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (((1 << which_alternative) & 0x18))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 90:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (((1 << which_alternative) & 0x18))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 89:
    case 88:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 1) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 84:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((!((1 << which_alternative) & 0x7f0)) && (((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))) || (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 83:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((!((1 << which_alternative) & 0x7f0)) && (((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], DImode)))) || (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 76:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 0) && (! (memory_operand (recog_data.operand[1], VOIDmode))))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 71:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0))))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 70:
    case 66:
    case 65:
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (get_attr_type (insn) == TYPE_IMOV)
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 59:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (((optimize_size) != (0)) || (((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))) || (((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x28)) && ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))))))
        {
   if (((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))
     {
       return PENT_PAIR_PU;
     }
   else
     {
       return PENT_PAIR_UV;
     }
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 50:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if (get_attr_type (insn) == TYPE_IMOV)
        {
   if ((((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5)))) || (get_attr_mode (insn) == MODE_HI))
     {
       return PENT_PAIR_PU;
     }
   else
     {
       return PENT_PAIR_UV;
     }
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 57:
    case 48:
      extract_insn_cached (insn);
      if (! (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return PENT_PAIR_PU;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 44:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((!((1 << which_alternative) & 0xfc)) && (((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode)))) || (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode)))))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 43:
      extract_constrain_insn_cached (insn);
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else if ((!((1 << which_alternative) & 0xfc)) && (((! ((flag_pic) != (0))) || (! (symbolic_operand (recog_data.operand[1], SImode)))) || (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode)))))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 79:
    case 78:
    case 40:
    case 39:
      extract_insn_cached (insn);
      if (! (memory_operand (recog_data.operand[0], VOIDmode)))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 77:
    case 58:
    case 49:
    case 38:
    case 37:
    case 36:
      extract_insn_cached (insn);
      if (! (memory_operand (recog_data.operand[1], VOIDmode)))
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 399:
    case 339:
    case 338:
    case 337:
    case 317:
    case 316:
    case 315:
    case 295:
    case 242:
    case 241:
    case 240:
    case 214:
    case 212:
    case 211:
    case 210:
    case 105:
    case 56:
    case 55:
    case 52:
    case 51:
    case 8:
    case 7:
    case 6:
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else
        {
   return PENT_PAIR_PU;
        }
    case 672:
    case 401:
    case 397:
    case 396:
    case 393:
    case 350:
    case 349:
    case 348:
    case 347:
    case 346:
    case 345:
    case 344:
    case 343:
    case 342:
    case 341:
    case 340:
    case 336:
    case 335:
    case 334:
    case 333:
    case 332:
    case 331:
    case 330:
    case 329:
    case 328:
    case 327:
    case 326:
    case 325:
    case 324:
    case 323:
    case 322:
    case 321:
    case 320:
    case 319:
    case 318:
    case 314:
    case 313:
    case 312:
    case 311:
    case 310:
    case 309:
    case 308:
    case 307:
    case 306:
    case 305:
    case 304:
    case 303:
    case 302:
    case 301:
    case 300:
    case 299:
    case 298:
    case 297:
    case 296:
    case 293:
    case 292:
    case 291:
    case 289:
    case 285:
    case 284:
    case 283:
    case 246:
    case 245:
    case 244:
    case 243:
    case 239:
    case 238:
    case 237:
    case 236:
    case 235:
    case 234:
    case 229:
    case 228:
    case 227:
    case 224:
    case 223:
    case 222:
    case 221:
    case 220:
    case 219:
    case 218:
    case 217:
    case 216:
    case 213:
    case 208:
    case 207:
    case 206:
    case 205:
    case 204:
    case 203:
    case 200:
    case 199:
    case 198:
    case 197:
    case 185:
    case 184:
    case 179:
    case 108:
    case 103:
    case 86:
    case 85:
    case 81:
    case 80:
    case 74:
    case 73:
    case 72:
    case 68:
    case 67:
    case 62:
    case 61:
    case 46:
    case 45:
    case 42:
    case 41:
    case 17:
    case 16:
    case 15:
    case 14:
    case 13:
    case 12:
    case 11:
    case 10:
    case 9:
    case 5:
    case 4:
    case 3:
    case 2:
    case 1:
    case 0:
      if (get_attr_imm_disp (insn) == IMM_DISP_TRUE)
        {
   return PENT_PAIR_NP;
        }
      else
        {
   return PENT_PAIR_UV;
        }
    case 278:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return PENT_PAIR_UV;
        }
      else if (which_alternative == 1)
        {
   return PENT_PAIR_NP;
        }
      else if (which_alternative == 2)
        {
   return PENT_PAIR_UV;
        }
      else if (which_alternative == 3)
        {
   return PENT_PAIR_NP;
        }
      else
        {
   return PENT_PAIR_UV;
        }
    case 279:
    case 280:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return PENT_PAIR_UV;
        }
      else if (which_alternative == 1)
        {
   return PENT_PAIR_NP;
        }
      else
        {
   return PENT_PAIR_UV;
        }
    case 281:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return PENT_PAIR_UV;
        }
      else if (which_alternative == 1)
        {
   return PENT_PAIR_NP;
        }
      else if (which_alternative == 2)
        {
   return PENT_PAIR_UV;
        }
      else
        {
   return PENT_PAIR_NP;
        }
    case 527:
    case 514:
    case 513:
    case 512:
    case 511:
    case 510:
    case 509:
    case 498:
    case 497:
      return PENT_PAIR_PV;
    case 178:
    case 180:
    case 181:
    case 182:
    case 183:
    case 226:
    case 230:
    case 231:
    case 232:
    case 233:
    case 648:
    case 650:
      return PENT_PAIR_PU;
    case 554:
    case 553:
    case 552:
    case 551:
    case 195:
    case 194:
    case 193:
    case 192:
    case 191:
    case 190:
    case 189:
    case 188:
    case 187:
    case 186:
      return PENT_PAIR_UV;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 195539, "?");
    default:
      return PENT_PAIR_NP;
    }
}
enum attr_pent_prefix
get_attr_pent_prefix (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 569:
    case 568:
    case 564:
    case 563:
      if (get_attr_unit (insn) == UNIT_SSE)
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 559:
    case 556:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 209:
    case 136:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0xf))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 122:
    case 121:
      extract_constrain_insn_cached (insn);
      if ((((ix86_tune) == (CPU_K6))) || (which_alternative != 0))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 114:
    case 113:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 1)
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 288:
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x7))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 411:
    case 137:
    case 109:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 96:
      extract_constrain_insn_cached (insn);
      if ((!((1 << which_alternative) & 0x1f)) || (((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 95:
      extract_constrain_insn_cached (insn);
      if ((!((1 << which_alternative) & 0x1f)) || (((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 91:
      extract_constrain_insn_cached (insn);
      if ((!((1 << which_alternative) & 0x1f)) || ((((1 << which_alternative) & 0x1e0)) && (((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78)))))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 90:
      extract_constrain_insn_cached (insn);
      if ((!((1 << which_alternative) & 0x1f)) || ((((1 << which_alternative) & 0x1e0)) && (((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78)))))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 84:
    case 83:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7e0))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 721:
    case 720:
    case 656:
    case 654:
    case 290:
    case 249:
    case 248:
    case 247:
    case 172:
    case 169:
    case 166:
    case 163:
    case 128:
    case 82:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x3))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 71:
      extract_constrain_insn_cached (insn);
      if ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 70:
    case 66:
    case 65:
      if (get_attr_type (insn) == TYPE_IMOVX)
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 59:
      extract_constrain_insn_cached (insn);
      if (((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 50:
      extract_constrain_insn_cached (insn);
      if ((((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5)))) || (get_attr_mode (insn) == MODE_HI))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 44:
    case 43:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xfc))
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 584:
    case 581:
    case 34:
    case 31:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return PENT_PREFIX_TRUE;
        }
      else
        {
   return PENT_PREFIX_FALSE;
        }
    case 1033:
    case 1032:
    case 1031:
    case 1030:
    case 1029:
    case 1028:
    case 1027:
    case 1026:
    case 1025:
    case 1024:
    case 1023:
    case 1020:
    case 1019:
    case 1018:
    case 1017:
    case 1016:
    case 1015:
    case 1014:
    case 1013:
    case 1012:
    case 1011:
    case 1010:
    case 1009:
    case 1008:
    case 1007:
    case 1006:
    case 1005:
    case 1004:
    case 1003:
    case 1002:
    case 1001:
    case 1000:
    case 999:
    case 998:
    case 997:
    case 996:
    case 995:
    case 994:
    case 993:
    case 992:
    case 991:
    case 990:
    case 989:
    case 988:
    case 987:
    case 986:
    case 985:
    case 984:
    case 983:
    case 982:
    case 981:
    case 980:
    case 979:
    case 978:
    case 977:
    case 976:
    case 975:
    case 974:
    case 973:
    case 972:
    case 971:
    case 970:
    case 969:
    case 968:
    case 967:
    case 966:
    case 965:
    case 964:
    case 963:
    case 962:
    case 961:
    case 960:
    case 959:
    case 958:
    case 957:
    case 956:
    case 955:
    case 954:
    case 953:
    case 952:
    case 951:
    case 950:
    case 949:
    case 948:
    case 947:
    case 946:
    case 945:
    case 944:
    case 943:
    case 942:
    case 941:
    case 940:
    case 939:
    case 938:
    case 937:
    case 936:
    case 935:
    case 934:
    case 933:
    case 932:
    case 931:
    case 930:
    case 929:
    case 928:
    case 927:
    case 926:
    case 925:
    case 924:
    case 923:
    case 922:
    case 921:
    case 920:
    case 919:
    case 918:
    case 917:
    case 916:
    case 915:
    case 914:
    case 913:
    case 912:
    case 911:
    case 910:
    case 909:
    case 908:
    case 907:
    case 906:
    case 905:
    case 904:
    case 903:
    case 902:
    case 901:
    case 900:
    case 899:
    case 898:
    case 897:
    case 896:
    case 895:
    case 894:
    case 893:
    case 892:
    case 891:
    case 890:
    case 889:
    case 888:
    case 887:
    case 886:
    case 885:
    case 884:
    case 883:
    case 882:
    case 881:
    case 880:
    case 879:
    case 878:
    case 877:
    case 876:
    case 875:
    case 874:
    case 873:
    case 872:
    case 871:
    case 870:
    case 869:
    case 868:
    case 867:
    case 866:
    case 865:
    case 864:
    case 863:
    case 862:
    case 861:
    case 860:
    case 859:
    case 858:
    case 857:
    case 856:
    case 855:
    case 854:
    case 852:
    case 851:
    case 850:
    case 849:
    case 848:
    case 847:
    case 846:
    case 845:
    case 844:
    case 843:
    case 842:
    case 841:
    case 840:
    case 839:
    case 838:
    case 837:
    case 836:
    case 835:
    case 834:
    case 833:
    case 832:
    case 831:
    case 830:
    case 829:
    case 828:
    case 827:
    case 826:
    case 825:
    case 824:
    case 823:
    case 822:
    case 821:
    case 820:
    case 819:
    case 818:
    case 817:
    case 816:
    case 815:
    case 814:
    case 813:
    case 812:
    case 811:
    case 810:
    case 809:
    case 808:
    case 807:
    case 806:
    case 805:
    case 804:
    case 803:
    case 802:
    case 801:
    case 800:
    case 799:
    case 798:
    case 797:
    case 796:
    case 795:
    case 794:
    case 793:
    case 792:
    case 791:
    case 790:
    case 789:
    case 788:
    case 787:
    case 786:
    case 785:
    case 784:
    case 783:
    case 782:
    case 781:
    case 780:
    case 779:
    case 778:
    case 777:
    case 776:
    case 775:
    case 774:
    case 773:
    case 772:
    case 771:
    case 770:
    case 769:
    case 768:
    case 767:
    case 766:
    case 765:
    case 764:
    case 763:
    case 762:
    case 761:
    case 760:
    case 759:
    case 758:
    case 757:
    case 756:
    case 755:
    case 754:
    case 753:
    case 752:
    case 751:
    case 750:
    case 749:
    case 748:
    case 747:
    case 746:
    case 745:
    case 744:
    case 743:
    case 742:
    case 741:
    case 740:
    case 739:
    case 738:
    case 737:
    case 736:
    case 735:
    case 734:
    case 733:
    case 732:
    case 731:
    case 730:
    case 729:
    case 728:
    case 727:
    case 726:
    case 725:
    case 724:
    case 723:
    case 722:
    case 719:
    case 707:
    case 706:
    case 705:
    case 704:
    case 703:
    case 702:
    case 701:
    case 700:
    case 699:
    case 698:
    case 669:
    case 666:
    case 663:
    case 660:
    case 653:
    case 652:
    case 651:
    case 649:
    case 647:
    case 646:
    case 645:
    case 644:
    case 643:
    case 642:
    case 641:
    case 640:
    case 639:
    case 638:
    case 637:
    case 634:
    case 633:
    case 629:
    case 628:
    case 627:
    case 626:
    case 625:
    case 622:
    case 621:
    case 585:
    case 582:
    case 560:
    case 557:
    case 543:
    case 542:
    case 541:
    case 540:
    case 539:
    case 537:
    case 525:
    case 496:
    case 495:
    case 494:
    case 493:
    case 488:
    case 476:
    case 462:
    case 460:
    case 438:
    case 436:
    case 424:
    case 413:
    case 412:
    case 406:
    case 399:
    case 398:
    case 359:
    case 358:
    case 339:
    case 338:
    case 337:
    case 317:
    case 316:
    case 315:
    case 295:
    case 294:
    case 280:
    case 277:
    case 250:
    case 242:
    case 241:
    case 240:
    case 231:
    case 214:
    case 212:
    case 211:
    case 210:
    case 181:
    case 173:
    case 170:
    case 167:
    case 164:
    case 161:
    case 160:
    case 159:
    case 158:
    case 157:
    case 156:
    case 155:
    case 151:
    case 150:
    case 140:
    case 139:
    case 129:
    case 125:
    case 124:
    case 123:
    case 120:
    case 119:
    case 116:
    case 115:
    case 110:
    case 107:
    case 106:
    case 105:
    case 104:
    case 69:
    case 64:
    case 63:
    case 57:
    case 56:
    case 55:
    case 53:
    case 52:
    case 51:
    case 48:
    case 35:
    case 32:
    case 8:
    case 7:
    case 6:
      return PENT_PREFIX_TRUE;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 196246, "?");
    default:
      return PENT_PREFIX_FALSE;
    }
}
int
get_attr_prefix_rex (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 721:
    case 720:
      extract_constrain_insn_cached (insn);
      if ((!((1 << which_alternative) & 0x1c)) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 415:
    case 414:
    case 400:
      extract_constrain_insn_cached (insn);
      if (((which_alternative == 0) && ((x86_extended_QIreg_mentioned_p (insn)) != (0))) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 281:
      extract_constrain_insn_cached (insn);
      if (((((1 << which_alternative) & 0x7)) && ((x86_extended_QIreg_mentioned_p (insn)) != (0))) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 278:
      extract_constrain_insn_cached (insn);
      if ((!((1 << which_alternative) & 0x3)) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 340:
    case 318:
    case 298:
    case 296:
    case 216:
    case 215:
      extract_constrain_insn_cached (insn);
      if (((((1 << which_alternative) & 0x3)) && ((x86_extended_QIreg_mentioned_p (insn)) != (0))) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 114:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 1) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 113:
      extract_constrain_insn_cached (insn);
      if ((((1 << which_alternative) & 0x6)) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 3) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 91:
    case 90:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 11) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 84:
    case 83:
      extract_constrain_insn_cached (insn);
      if ((!((1 << which_alternative) & 0x111)) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 82:
      extract_constrain_insn_cached (insn);
      if ((which_alternative != 5) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 289:
    case 288:
    case 116:
    case 115:
    case 76:
      extract_constrain_insn_cached (insn);
      if ((which_alternative != 0) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 71:
      extract_constrain_insn_cached (insn);
      if ((((q_regs_operand (recog_data.operand[0], QImode)) && (! (((x86_movx & (1 << ix86_tune))) != (0)))) && ((x86_extended_QIreg_mentioned_p (insn)) != (0))) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 70:
    case 66:
    case 65:
      extract_constrain_insn_cached (insn);
      if (((! (get_attr_type (insn) == TYPE_IMOVX)) && ((x86_extended_QIreg_mentioned_p (insn)) != (0))) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 59:
      extract_constrain_insn_cached (insn);
      if ((((which_alternative == 6) || ((!((1 << which_alternative) & 0x78)) && ((((optimize_size) != (0)) || ((! (((x86_movx & (1 << ix86_tune))) != (0))) || (which_alternative != 2))) && ((((! ((optimize_size) != (0))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))) || ((!((1 << which_alternative) & 0x7)) || (! (((x86_partial_reg_dependency & (1 << ix86_tune))) != (0))))) && (((! ((optimize_size) != (0))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))) || ((!((1 << which_alternative) & 0x7)) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) != (0))) || (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))))))) && ((x86_extended_QIreg_mentioned_p (insn)) != (0))) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 44:
    case 43:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 2) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 647:
    case 646:
    case 645:
    case 644:
    case 643:
    case 642:
    case 641:
    case 640:
    case 636:
    case 635:
    case 624:
    case 623:
    case 494:
    case 493:
    case 492:
    case 491:
    case 480:
    case 479:
    case 468:
    case 466:
    case 465:
    case 444:
    case 442:
    case 441:
    case 416:
    case 401:
    case 361:
    case 360:
    case 350:
    case 349:
    case 348:
    case 347:
    case 346:
    case 345:
    case 344:
    case 343:
    case 342:
    case 341:
    case 326:
    case 325:
    case 324:
    case 323:
    case 322:
    case 321:
    case 320:
    case 319:
    case 304:
    case 303:
    case 302:
    case 301:
    case 300:
    case 299:
    case 297:
    case 285:
    case 284:
    case 283:
    case 282:
    case 265:
    case 264:
    case 253:
    case 252:
    case 251:
    case 246:
    case 245:
    case 244:
    case 243:
    case 230:
    case 224:
    case 223:
    case 222:
    case 221:
    case 220:
    case 219:
    case 218:
    case 217:
    case 185:
    case 180:
    case 74:
    case 73:
    case 72:
    case 68:
    case 67:
    case 62:
    case 61:
    case 60:
    case 58:
    case 49:
    case 17:
    case 16:
    case 15:
    case 14:
    case 13:
    case 12:
    case 11:
    case 10:
    case 9:
      extract_constrain_insn_cached (insn);
      if (((x86_extended_QIreg_mentioned_p (insn)) != (0)) || ((x86_extended_reg_mentioned_p (insn)) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 923:
    case 921:
    case 853:
    case 848:
    case 847:
    case 846:
    case 845:
    case 844:
    case 843:
    case 842:
    case 841:
    case 840:
    case 839:
    case 838:
    case 837:
    case 836:
    case 835:
    case 834:
    case 833:
    case 832:
    case 831:
    case 830:
    case 829:
    case 828:
    case 827:
    case 826:
    case 825:
    case 824:
    case 823:
    case 822:
    case 821:
    case 820:
    case 819:
    case 818:
    case 817:
    case 816:
    case 815:
    case 814:
    case 813:
    case 812:
    case 811:
    case 810:
    case 809:
    case 808:
    case 807:
    case 806:
    case 805:
    case 804:
    case 803:
    case 802:
    case 801:
    case 800:
    case 799:
    case 798:
    case 797:
    case 796:
    case 795:
    case 794:
    case 793:
    case 792:
    case 791:
    case 788:
    case 729:
    case 727:
    case 726:
    case 704:
    case 703:
    case 702:
    case 701:
    case 672:
    case 671:
    case 649:
    case 648:
    case 637:
    case 630:
    case 625:
    case 618:
    case 482:
    case 470:
    case 448:
    case 446:
    case 421:
    case 419:
    case 417:
    case 403:
    case 402:
    case 393:
    case 392:
    case 353:
    case 352:
    case 329:
    case 328:
    case 327:
    case 307:
    case 306:
    case 305:
    case 274:
    case 273:
    case 268:
    case 261:
    case 258:
    case 256:
    case 254:
    case 247:
    case 239:
    case 229:
    case 228:
    case 227:
    case 226:
    case 200:
    case 199:
    case 198:
    case 197:
    case 196:
    case 189:
    case 179:
    case 178:
    case 149:
    case 148:
    case 147:
    case 120:
    case 119:
    case 118:
    case 87:
    case 86:
    case 85:
    case 81:
    case 2:
    case 1:
    case 0:
      return 1;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 196693, "?");
    default:
      extract_constrain_insn_cached (insn);
      if ((x86_extended_reg_mentioned_p (insn)) != (0))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    }
}
int
get_attr_prefix_0f (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 569:
    case 568:
    case 564:
    case 563:
      if (get_attr_unit (insn) == UNIT_SSE)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 559:
    case 556:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 426:
    case 425:
    case 417:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 0;
        }
      else
        {
   return 0;
        }
    case 250:
    case 249:
    case 248:
    case 247:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 136:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0xf))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 114:
    case 113:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 1)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 288:
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x7))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 137:
    case 109:
    case 106:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 96:
    case 95:
    case 91:
    case 90:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x1f))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 84:
    case 83:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7e0))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 721:
    case 720:
    case 656:
    case 654:
    case 294:
    case 290:
    case 172:
    case 169:
    case 166:
    case 163:
    case 128:
    case 82:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x3))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 71:
      extract_constrain_insn_cached (insn);
      if ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 70:
    case 66:
    case 65:
      if (get_attr_type (insn) == TYPE_IMOVX)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 59:
      extract_constrain_insn_cached (insn);
      if (((! ((optimize_size) != (0))) && ((which_alternative != 3) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_qimode_math & (1 << ix86_tune))) == (0)))))) && ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 50:
      extract_constrain_insn_cached (insn);
      if (((! ((optimize_size) != (0))) && (((which_alternative != 0) || ((! (((x86_partial_reg_stall & (1 << ix86_tune))) == (0))) && (! (((x86_himode_math & (1 << ix86_tune))) == (0))))) && ((!((1 << which_alternative) & 0x6)) || (! (aligned_operand (recog_data.operand[1], HImode)))))) && ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 44:
    case 43:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xfc))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 584:
    case 581:
    case 34:
    case 31:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 121:
    case 122:
    case 123:
      extract_constrain_insn_cached (insn);
      if ((! (((ix86_tune) == (CPU_K6)))) && (which_alternative == 0))
        {
   return 0;
        }
      else
        {
   return 1;
        }
    case 1033:
    case 1032:
    case 1031:
    case 1030:
    case 1029:
    case 1028:
    case 1027:
    case 1026:
    case 1025:
    case 1024:
    case 1023:
    case 1020:
    case 1019:
    case 1018:
    case 1017:
    case 1016:
    case 1015:
    case 1014:
    case 1013:
    case 1012:
    case 1011:
    case 1010:
    case 1009:
    case 1008:
    case 1007:
    case 1006:
    case 1005:
    case 1004:
    case 1003:
    case 1002:
    case 1001:
    case 1000:
    case 999:
    case 998:
    case 997:
    case 996:
    case 995:
    case 994:
    case 993:
    case 992:
    case 991:
    case 990:
    case 989:
    case 988:
    case 987:
    case 986:
    case 985:
    case 984:
    case 983:
    case 982:
    case 981:
    case 980:
    case 979:
    case 978:
    case 977:
    case 976:
    case 975:
    case 974:
    case 973:
    case 972:
    case 971:
    case 970:
    case 969:
    case 968:
    case 967:
    case 966:
    case 965:
    case 964:
    case 963:
    case 962:
    case 961:
    case 960:
    case 959:
    case 958:
    case 957:
    case 956:
    case 955:
    case 954:
    case 953:
    case 952:
    case 951:
    case 950:
    case 949:
    case 948:
    case 947:
    case 946:
    case 945:
    case 944:
    case 943:
    case 942:
    case 941:
    case 940:
    case 939:
    case 938:
    case 937:
    case 936:
    case 935:
    case 934:
    case 933:
    case 932:
    case 931:
    case 930:
    case 929:
    case 928:
    case 927:
    case 926:
    case 925:
    case 924:
    case 923:
    case 922:
    case 921:
    case 920:
    case 919:
    case 918:
    case 917:
    case 916:
    case 915:
    case 914:
    case 913:
    case 912:
    case 911:
    case 910:
    case 909:
    case 908:
    case 907:
    case 906:
    case 905:
    case 904:
    case 903:
    case 902:
    case 901:
    case 900:
    case 899:
    case 898:
    case 897:
    case 896:
    case 895:
    case 894:
    case 893:
    case 892:
    case 891:
    case 890:
    case 889:
    case 888:
    case 887:
    case 886:
    case 885:
    case 884:
    case 883:
    case 882:
    case 881:
    case 880:
    case 879:
    case 878:
    case 877:
    case 876:
    case 875:
    case 874:
    case 873:
    case 872:
    case 871:
    case 870:
    case 869:
    case 868:
    case 867:
    case 866:
    case 865:
    case 864:
    case 863:
    case 862:
    case 861:
    case 860:
    case 859:
    case 858:
    case 857:
    case 856:
    case 855:
    case 854:
    case 852:
    case 851:
    case 850:
    case 849:
    case 848:
    case 847:
    case 846:
    case 845:
    case 844:
    case 843:
    case 842:
    case 841:
    case 840:
    case 839:
    case 838:
    case 837:
    case 836:
    case 835:
    case 834:
    case 833:
    case 832:
    case 831:
    case 830:
    case 829:
    case 828:
    case 827:
    case 826:
    case 825:
    case 824:
    case 823:
    case 822:
    case 821:
    case 820:
    case 819:
    case 818:
    case 817:
    case 816:
    case 815:
    case 814:
    case 813:
    case 812:
    case 811:
    case 810:
    case 809:
    case 808:
    case 807:
    case 806:
    case 805:
    case 804:
    case 803:
    case 802:
    case 801:
    case 800:
    case 799:
    case 798:
    case 797:
    case 796:
    case 795:
    case 794:
    case 793:
    case 792:
    case 791:
    case 790:
    case 789:
    case 788:
    case 787:
    case 786:
    case 785:
    case 784:
    case 783:
    case 782:
    case 781:
    case 780:
    case 779:
    case 778:
    case 777:
    case 776:
    case 775:
    case 774:
    case 773:
    case 772:
    case 771:
    case 770:
    case 769:
    case 768:
    case 767:
    case 766:
    case 765:
    case 764:
    case 763:
    case 762:
    case 761:
    case 760:
    case 759:
    case 758:
    case 757:
    case 756:
    case 755:
    case 754:
    case 753:
    case 752:
    case 751:
    case 750:
    case 749:
    case 748:
    case 747:
    case 746:
    case 745:
    case 744:
    case 743:
    case 742:
    case 741:
    case 740:
    case 739:
    case 738:
    case 737:
    case 736:
    case 735:
    case 734:
    case 733:
    case 732:
    case 731:
    case 730:
    case 729:
    case 728:
    case 727:
    case 726:
    case 725:
    case 724:
    case 723:
    case 722:
    case 719:
    case 707:
    case 706:
    case 705:
    case 704:
    case 703:
    case 702:
    case 701:
    case 700:
    case 699:
    case 698:
    case 669:
    case 666:
    case 663:
    case 660:
    case 653:
    case 652:
    case 651:
    case 649:
    case 585:
    case 582:
    case 560:
    case 557:
    case 496:
    case 495:
    case 494:
    case 493:
    case 173:
    case 170:
    case 167:
    case 164:
    case 156:
    case 155:
    case 151:
    case 150:
    case 140:
    case 139:
    case 129:
    case 125:
    case 124:
    case 120:
    case 119:
    case 116:
    case 115:
    case 110:
    case 107:
    case 104:
    case 69:
    case 64:
    case 63:
    case 35:
    case 32:
    case 406:
    case 424:
    case 537:
    case 539:
    case 540:
    case 541:
    case 542:
    case 543:
      return 1;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 197332, "?");
    default:
      return 0;
    }
}
int
get_attr_prefix_rep (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 569:
    case 568:
    case 564:
    case 563:
      if (get_attr_unit (insn) == UNIT_SSE)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 559:
    case 556:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 1015:
    case 137:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 136:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0xf))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 172:
    case 169:
    case 166:
    case 163:
    case 128:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x3))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 96:
      extract_constrain_insn_cached (insn);
      if ((!((1 << which_alternative) & 0x1f)) && (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))))) || (((which_alternative == 7) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))) || (!((1 << which_alternative) & 0xf8)))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 95:
      extract_constrain_insn_cached (insn);
      if ((!((1 << which_alternative) & 0x1f)) && (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))))) || (((which_alternative == 7) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))) || (!((1 << which_alternative) & 0xf8)))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 91:
      extract_constrain_insn_cached (insn);
      if ((((1 << which_alternative) & 0x1e0)) && (((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 90:
      extract_constrain_insn_cached (insn);
      if ((((1 << which_alternative) & 0x1e0)) && (((which_alternative == 6) && ((! (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0))) && (! (((x86_sse_partial_regs & (1 << ix86_tune))) != (0))))) || (!((1 << which_alternative) & 0xe78))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 584:
    case 581:
    case 34:
    case 31:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 1033:
    case 1032:
    case 1016:
    case 1014:
    case 927:
    case 926:
    case 925:
    case 924:
    case 903:
    case 902:
    case 901:
    case 900:
    case 897:
    case 895:
    case 893:
    case 891:
    case 889:
    case 887:
    case 885:
    case 790:
    case 789:
    case 786:
    case 785:
    case 784:
    case 781:
    case 779:
    case 775:
    case 774:
    case 773:
    case 772:
    case 751:
    case 749:
    case 747:
    case 745:
    case 743:
    case 741:
    case 739:
    case 736:
    case 735:
    case 734:
    case 669:
    case 666:
    case 663:
    case 660:
    case 585:
    case 582:
    case 560:
    case 557:
    case 496:
    case 495:
    case 173:
    case 170:
    case 167:
    case 164:
    case 156:
    case 155:
    case 151:
    case 150:
    case 140:
    case 139:
    case 129:
    case 35:
    case 32:
    case 525:
    case 625:
    case 626:
    case 627:
    case 628:
    case 629:
    case 637:
    case 638:
    case 639:
    case 640:
    case 641:
    case 642:
    case 643:
    case 644:
    case 645:
    case 646:
    case 647:
      return 1;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 197562, "?");
    default:
      return 0;
    }
}
int
get_attr_prefix_data16 (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 1015:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 705:
      extract_constrain_insn_cached (insn);
      if (((((1 << which_alternative) & 0x3)) && (! ((optimize_size) != (0)))) || (((which_alternative == 2) && ((! (((x86_sse_typeless_stores & (1 << ix86_tune))) != (0))) && (! ((optimize_size) != (0))))) || (!((1 << which_alternative) & 0x7))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 411:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 294:
    case 209:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 96:
      extract_constrain_insn_cached (insn);
      if (((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 95:
      extract_constrain_insn_cached (insn);
      if (((which_alternative == 5) && ((! ((optimize_size) != (0))) && (! (((x86_sse_load0_by_pxor & (1 << ix86_tune))) != (0))))) || (((which_alternative == 6) && ((! ((optimize_size) != (0))) && (((x86_sse_partial_reg_dependency & (1 << ix86_tune))) != (0)))) || ((which_alternative == 7) && (((x86_sse_partial_regs & (1 << ix86_tune))) != (0)))))
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 50:
      if (get_attr_mode (insn) == MODE_HI)
        {
   return 1;
        }
      else
        {
   return 0;
        }
    case 1028:
    case 1026:
    case 1024:
    case 1017:
    case 1013:
    case 1003:
    case 1002:
    case 990:
    case 989:
    case 929:
    case 914:
    case 911:
    case 910:
    case 908:
    case 905:
    case 904:
    case 899:
    case 898:
    case 896:
    case 894:
    case 892:
    case 890:
    case 888:
    case 886:
    case 884:
    case 759:
    case 758:
    case 757:
    case 756:
    case 652:
    case 634:
    case 633:
    case 622:
    case 621:
    case 488:
    case 476:
    case 462:
    case 460:
    case 438:
    case 436:
    case 413:
    case 412:
    case 399:
    case 398:
    case 359:
    case 358:
    case 339:
    case 338:
    case 337:
    case 317:
    case 316:
    case 315:
    case 295:
    case 280:
    case 277:
    case 250:
    case 242:
    case 241:
    case 240:
    case 231:
    case 214:
    case 212:
    case 211:
    case 210:
    case 181:
    case 161:
    case 160:
    case 159:
    case 158:
    case 157:
    case 123:
    case 107:
    case 106:
    case 105:
    case 57:
    case 56:
    case 55:
    case 53:
    case 52:
    case 51:
    case 48:
    case 8:
    case 7:
    case 6:
      return 1;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 197740, "?");
    default:
      return 0;
    }
}
enum attr_type
get_attr_type (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 721:
    case 720:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return TYPE_OTHER;
        }
      else
        {
   return TYPE_SSEMOV;
        }
    case 655:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return TYPE_FCMOV;
        }
      else
        {
   return TYPE_MULTI;
        }
    case 656:
    case 654:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return TYPE_FCMOV;
        }
      else
        {
   return TYPE_ICMOV;
        }
    case 294:
    case 290:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_IMOVX;
        }
    case 288:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_IMOVX;
        }
    case 202:
      extract_constrain_insn_cached (insn);
      if ((which_alternative != 0) || (pic_symbolic_operand (recog_data.operand[2], SImode)))
        {
   return TYPE_LEA;
        }
      else if (incdec_operand (recog_data.operand[2], SImode))
        {
   return TYPE_INCDEC;
        }
      else
        {
   return TYPE_ALU;
        }
    case 201:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], SImode)))
        {
   return TYPE_LEA;
        }
      else if (incdec_operand (recog_data.operand[2], SImode))
        {
   return TYPE_INCDEC;
        }
      else
        {
   return TYPE_ALU;
        }
    case 196:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 2) || (pic_symbolic_operand (recog_data.operand[2], DImode)))
        {
   return TYPE_LEA;
        }
      else if (incdec_operand (recog_data.operand[2], DImode))
        {
   return TYPE_INCDEC;
        }
      else
        {
   return TYPE_ALU;
        }
    case 172:
    case 169:
    case 166:
    case 163:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_FMOV;
        }
      else if (which_alternative == 1)
        {
   return TYPE_MULTI;
        }
      else
        {
   return TYPE_SSEICVT;
        }
    case 136:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return TYPE_SSECVT;
        }
      else
        {
   return TYPE_FMOV;
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_FMOV;
        }
      else if (((1 << which_alternative) & 0xe))
        {
   return TYPE_MULTI;
        }
      else
        {
   return TYPE_SSECVT;
        }
    case 128:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return TYPE_FMOV;
        }
      else
        {
   return TYPE_SSECVT;
        }
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return TYPE_MULTI;
        }
      else if (which_alternative == 3)
        {
   return TYPE_MMXMOV;
        }
      else
        {
   return TYPE_SSEMOV;
        }
    case 101:
    case 100:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return TYPE_FMOV;
        }
      else
        {
   return TYPE_MULTI;
        }
    case 96:
    case 95:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return TYPE_FMOV;
        }
      else if (((1 << which_alternative) & 0x18))
        {
   return TYPE_MULTI;
        }
      else
        {
   return TYPE_SSEMOV;
        }
    case 91:
    case 90:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return TYPE_FMOV;
        }
      else if (((1 << which_alternative) & 0x18))
        {
   return TYPE_IMOV;
        }
      else if (((1 << which_alternative) & 0x1e0))
        {
   return TYPE_SSEMOV;
        }
      else
        {
   return TYPE_MMXMOV;
        }
    case 82:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return TYPE_OTHER;
        }
      else if (((1 << which_alternative) & 0xc))
        {
   return TYPE_MMX;
        }
      else
        {
   return TYPE_SSEMOV;
        }
    case 59:
      extract_constrain_insn_cached (insn);
      if (((optimize_size) != (0)) || ((which_alternative == 3) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_qimode_math & (1 << ix86_tune))) == (0)))))
        {
   return TYPE_IMOV;
        }
      else if ((((1 << which_alternative) & 0x28)) || ((((x86_movx & (1 << ix86_tune))) != (0)) && (which_alternative == 2)))
        {
   return TYPE_IMOVX;
        }
      else
        {
   return TYPE_IMOV;
        }
    case 50:
      extract_constrain_insn_cached (insn);
      if (((optimize_size) != (0)) || (((which_alternative == 0) && ((((x86_partial_reg_stall & (1 << ix86_tune))) == (0)) || (((x86_himode_math & (1 << ix86_tune))) == (0)))) || ((((1 << which_alternative) & 0x6)) && (aligned_operand (recog_data.operand[1], HImode)))))
        {
   return TYPE_IMOV;
        }
      else if ((((x86_movx & (1 << ix86_tune))) != (0)) && (((1 << which_alternative) & 0x5)))
        {
   return TYPE_IMOVX;
        }
      else
        {
   return TYPE_IMOV;
        }
    case 0:
    case 3:
    case 6:
    case 9:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_TEST;
        }
      else
        {
   return TYPE_ICMP;
        }
    case 31:
    case 34:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_FCMP;
        }
      else
        {
   return TYPE_SSECOMI;
        }
    case 43:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x1c))
        {
   return TYPE_MMXMOV;
        }
      else if (((1 << which_alternative) & 0xe0))
        {
   return TYPE_SSEMOV;
        }
      else if (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode)))
        {
   return TYPE_LEA;
        }
      else
        {
   return TYPE_IMOV;
        }
    case 44:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x1c))
        {
   return TYPE_MMXMOV;
        }
      else if (((1 << which_alternative) & 0xe0))
        {
   return TYPE_SSEMOV;
        }
      else if (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], SImode)))
        {
   return TYPE_LEA;
        }
      else
        {
   return TYPE_IMOV;
        }
    case 65:
      extract_constrain_insn_cached (insn);
      if ((register_operand (recog_data.operand[0], QImode)) && ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0))))
        {
   return TYPE_IMOVX;
        }
      else
        {
   return TYPE_IMOV;
        }
    case 66:
      extract_constrain_insn_cached (insn);
      if ((register_operand (recog_data.operand[0], QImode)) && ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0))))
        {
   return TYPE_IMOVX;
        }
      else
        {
   return TYPE_IMOV;
        }
    case 70:
      extract_constrain_insn_cached (insn);
      if ((register_operand (recog_data.operand[0], QImode)) && ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0))))
        {
   return TYPE_IMOVX;
        }
      else
        {
   return TYPE_IMOV;
        }
    case 71:
      extract_constrain_insn_cached (insn);
      if ((! (q_regs_operand (recog_data.operand[0], QImode))) || (((x86_movx & (1 << ix86_tune))) != (0)))
        {
   return TYPE_IMOVX;
        }
      else
        {
   return TYPE_IMOV;
        }
    case 76:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_PUSH;
        }
      else
        {
   return TYPE_MULTI;
        }
    case 83:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xe0))
        {
   return TYPE_MMXMOV;
        }
      else if (((1 << which_alternative) & 0x700))
        {
   return TYPE_SSEMOV;
        }
      else if (which_alternative == 4)
        {
   return TYPE_MULTI;
        }
      else if (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))
        {
   return TYPE_LEA;
        }
      else
        {
   return TYPE_IMOV;
        }
    case 84:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xe0))
        {
   return TYPE_MMXMOV;
        }
      else if (((1 << which_alternative) & 0x700))
        {
   return TYPE_SSEMOV;
        }
      else if (which_alternative == 4)
        {
   return TYPE_MULTI;
        }
      else if (((flag_pic) != (0)) && (symbolic_operand (recog_data.operand[1], DImode)))
        {
   return TYPE_LEA;
        }
      else
        {
   return TYPE_IMOV;
        }
    case 88:
    case 89:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_MULTI;
        }
      else if (which_alternative == 1)
        {
   return TYPE_PUSH;
        }
      else
        {
   return TYPE_MULTI;
        }
    case 106:
    case 109:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_IMOVX;
        }
      else
        {
   return TYPE_ALU1;
        }
    case 113:
    case 114:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_IMOVX;
        }
      else if (which_alternative == 1)
        {
   return TYPE_IMOV;
        }
      else if (which_alternative == 2)
        {
   return TYPE_MMXMOV;
        }
      else
        {
   return TYPE_SSEMOV;
        }
    case 137:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_SSECVT;
        }
      else
        {
   return TYPE_FMOV;
        }
    case 145:
    case 142:
    case 133:
    case 162:
    case 165:
    case 168:
    case 171:
    case 174:
    case 175:
    case 176:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_FMOV;
        }
      else
        {
   return TYPE_MULTI;
        }
    case 197:
    case 198:
    case 199:
    case 200:
      extract_insn_cached (insn);
      if (incdec_operand (recog_data.operand[2], DImode))
        {
   return TYPE_INCDEC;
        }
      else
        {
   return TYPE_ALU;
        }
    case 203:
    case 204:
    case 205:
    case 206:
    case 207:
    case 208:
      extract_insn_cached (insn);
      if (incdec_operand (recog_data.operand[2], SImode))
        {
   return TYPE_INCDEC;
        }
      else
        {
   return TYPE_ALU;
        }
    case 209:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 2)
        {
   return TYPE_LEA;
        }
      else
        {
   if (incdec_operand (recog_data.operand[2], HImode))
     {
       return TYPE_INCDEC;
     }
   else
     {
       return TYPE_ALU;
     }
        }
    case 215:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 3)
        {
   return TYPE_LEA;
        }
      else
        {
   if (incdec_operand (recog_data.operand[2], QImode))
     {
       return TYPE_INCDEC;
     }
   else
     {
       return TYPE_ALU;
     }
        }
    case 217:
      extract_insn_cached (insn);
      if (incdec_operand (recog_data.operand[2], QImode))
        {
   return TYPE_INCDEC;
        }
      else
        {
   return TYPE_ALU1;
        }
    case 210:
    case 211:
    case 212:
    case 213:
    case 214:
    case 220:
      extract_insn_cached (insn);
      if (incdec_operand (recog_data.operand[2], HImode))
        {
   return TYPE_INCDEC;
        }
      else
        {
   return TYPE_ALU;
        }
    case 216:
    case 218:
    case 219:
    case 221:
    case 222:
    case 223:
      extract_insn_cached (insn);
      if (incdec_operand (recog_data.operand[2], QImode))
        {
   return TYPE_INCDEC;
        }
      else
        {
   return TYPE_ALU;
        }
    case 402:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return TYPE_LEA;
        }
      else if (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (register_operand (recog_data.operand[0], VOIDmode))) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 403:
      extract_constrain_insn_cached (insn);
      if (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (register_operand (recog_data.operand[0], VOIDmode))) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 407:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return TYPE_LEA;
        }
      else if (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (register_operand (recog_data.operand[0], VOIDmode))) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 408:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return TYPE_LEA;
        }
      else if ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 409:
      extract_constrain_insn_cached (insn);
      if (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (register_operand (recog_data.operand[0], VOIDmode))) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 410:
      extract_constrain_insn_cached (insn);
      if ((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 411:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   return TYPE_LEA;
        }
      else if (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (register_operand (recog_data.operand[0], VOIDmode))) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 412:
      extract_constrain_insn_cached (insn);
      if (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (register_operand (recog_data.operand[0], VOIDmode))) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 413:
      extract_constrain_insn_cached (insn);
      if (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (register_operand (recog_data.operand[0], VOIDmode))) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 414:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 2)
        {
   return TYPE_LEA;
        }
      else if (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (register_operand (recog_data.operand[0], VOIDmode))) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 415:
      extract_constrain_insn_cached (insn);
      if (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (register_operand (recog_data.operand[0], VOIDmode))) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 416:
      extract_constrain_insn_cached (insn);
      if (((((x86_double_with_add & (1 << ix86_tune))) != (0)) && (register_operand (recog_data.operand[0], VOIDmode))) && (const1_operand (recog_data.operand[2], VOIDmode)))
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 417:
    case 425:
    case 426:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_IMOVX;
        }
      else
        {
   return TYPE_ISHIFT;
        }
    case 555:
    case 558:
      extract_insn_cached (insn);
      if (mult_operator (recog_data.operand[3], SFmode))
        {
   return TYPE_FMUL;
        }
      else
        {
   return TYPE_FOP;
        }
    case 556:
    case 559:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 1)
        {
   if (mult_operator (recog_data.operand[3], SFmode))
     {
       return TYPE_SSEMUL;
     }
   else
     {
       return TYPE_SSEADD;
     }
        }
      else
        {
   if (mult_operator (recog_data.operand[3], SFmode))
     {
       return TYPE_FMUL;
     }
   else
     {
       return TYPE_FOP;
     }
        }
    case 557:
    case 560:
      extract_insn_cached (insn);
      if (mult_operator (recog_data.operand[3], SFmode))
        {
   return TYPE_SSEMUL;
        }
      else
        {
   return TYPE_SSEADD;
        }
    case 561:
      extract_insn_cached (insn);
      if (mult_operator (recog_data.operand[3], XFmode))
        {
   return TYPE_FMUL;
        }
      else
        {
   return TYPE_FOP;
        }
    case 563:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return TYPE_SSEMUL;
        }
      else if ((which_alternative == 2) && (div_operator (recog_data.operand[3], SFmode)))
        {
   return TYPE_SSEDIV;
        }
      else if (which_alternative == 2)
        {
   return TYPE_SSEADD;
        }
      else if (mult_operator (recog_data.operand[3], SFmode))
        {
   return TYPE_FMUL;
        }
      else if (div_operator (recog_data.operand[3], SFmode))
        {
   return TYPE_FDIV;
        }
      else
        {
   return TYPE_FOP;
        }
    case 562:
    case 565:
    case 566:
      extract_insn_cached (insn);
      if (mult_operator (recog_data.operand[3], SFmode))
        {
   return TYPE_FMUL;
        }
      else if (div_operator (recog_data.operand[3], SFmode))
        {
   return TYPE_FDIV;
        }
      else
        {
   return TYPE_FOP;
        }
    case 568:
      extract_constrain_insn_cached (insn);
      if ((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode)))
        {
   return TYPE_SSEMUL;
        }
      else if ((which_alternative == 2) && (div_operator (recog_data.operand[3], SFmode)))
        {
   return TYPE_SSEDIV;
        }
      else if (which_alternative == 2)
        {
   return TYPE_SSEADD;
        }
      else if (mult_operator (recog_data.operand[3], DFmode))
        {
   return TYPE_FMUL;
        }
      else if (div_operator (recog_data.operand[3], DFmode))
        {
   return TYPE_FDIV;
        }
      else
        {
   return TYPE_FOP;
        }
    case 564:
    case 569:
      extract_insn_cached (insn);
      if (mult_operator (recog_data.operand[3], SFmode))
        {
   return TYPE_SSEMUL;
        }
      else if (div_operator (recog_data.operand[3], SFmode))
        {
   return TYPE_SSEDIV;
        }
      else
        {
   return TYPE_SSEADD;
        }
    case 567:
    case 570:
    case 571:
    case 572:
    case 573:
    case 574:
      extract_insn_cached (insn);
      if (mult_operator (recog_data.operand[3], DFmode))
        {
   return TYPE_FMUL;
        }
      else if (div_operator (recog_data.operand[3], DFmode))
        {
   return TYPE_FDIV;
        }
      else
        {
   return TYPE_FOP;
        }
    case 575:
    case 576:
    case 577:
    case 578:
    case 579:
    case 580:
      extract_insn_cached (insn);
      if (mult_operator (recog_data.operand[3], XFmode))
        {
   return TYPE_FMUL;
        }
      else if (div_operator (recog_data.operand[3], XFmode))
        {
   return TYPE_FDIV;
        }
      else
        {
   return TYPE_FOP;
        }
    case 581:
    case 584:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_FPSPC;
        }
      else
        {
   return TYPE_SSE;
        }
    case 670:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_ALU;
        }
      else if (const0_operand (recog_data.operand[2], SImode))
        {
   return TYPE_IMOV;
        }
      else
        {
   return TYPE_LEA;
        }
    case 671:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_ALU;
        }
      else if (const0_operand (recog_data.operand[2], DImode))
        {
   return TYPE_IMOV;
        }
      else
        {
   return TYPE_LEA;
        }
    case 672:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_ALU;
        }
      else
        {
   return TYPE_LEA;
        }
    case 1008:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_SSECVT;
        }
      else
        {
   return TYPE_SSEMOV;
        }
    case 1009:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return TYPE_SSECVT;
        }
      else if (which_alternative == 1)
        {
   return TYPE_SSEMOV;
        }
      else
        {
   return TYPE_SSECVT;
        }
    case 816:
    case 817:
    case 818:
    case 832:
    case 833:
    case 834:
    case 835:
    case 836:
    case 837:
    case 838:
    case 839:
    case 840:
    case 841:
    case 842:
    case 871:
      return TYPE_MMXSHFT;
    case 703:
    case 704:
    case 726:
    case 727:
    case 819:
    case 820:
    case 821:
    case 843:
    case 844:
    case 845:
    case 846:
    case 847:
    case 848:
    case 864:
    case 865:
    case 869:
    case 870:
    case 878:
    case 879:
      return TYPE_MMXCVT;
    case 822:
    case 823:
    case 824:
    case 825:
    case 826:
    case 827:
    case 857:
    case 858:
    case 859:
      return TYPE_MMXCMP;
    case 807:
    case 808:
    case 809:
    case 810:
    case 862:
    case 877:
      return TYPE_MMXMUL;
    case 791:
    case 792:
    case 793:
    case 794:
    case 795:
    case 796:
    case 797:
    case 798:
    case 799:
    case 800:
    case 801:
    case 802:
    case 803:
    case 804:
    case 805:
    case 806:
    case 811:
    case 812:
    case 813:
    case 814:
    case 815:
    case 828:
    case 829:
    case 830:
    case 831:
    case 854:
    case 855:
    case 856:
    case 860:
    case 861:
    case 866:
    case 867:
    case 868:
      return TYPE_MMXADD;
    case 701:
    case 702:
    case 729:
      return TYPE_MMXMOV;
    case 849:
    case 863:
    case 872:
    case 873:
    case 874:
    case 875:
    case 876:
    case 882:
    case 883:
      return TYPE_MMX;
    case 744:
    case 745:
    case 890:
    case 891:
      return TYPE_SSEDIV;
    case 150:
    case 151:
    case 155:
    case 156:
    case 164:
    case 167:
    case 170:
    case 173:
    case 785:
    case 786:
    case 787:
    case 788:
    case 789:
    case 790:
    case 920:
    case 921:
    case 922:
    case 923:
    case 924:
    case 925:
      return TYPE_SSEICVT;
    case 129:
    case 139:
    case 140:
    case 723:
    case 724:
    case 725:
    case 730:
    case 731:
    case 732:
    case 733:
    case 737:
    case 776:
    case 777:
    case 782:
    case 783:
    case 784:
    case 904:
    case 905:
    case 906:
    case 907:
    case 908:
    case 909:
    case 910:
    case 911:
    case 912:
    case 913:
    case 914:
    case 915:
    case 916:
    case 917:
    case 918:
    case 919:
    case 926:
    case 927:
    case 928:
    case 929:
    case 956:
    case 957:
    case 958:
    case 959:
    case 960:
    case 989:
    case 990:
    case 991:
    case 992:
    case 993:
    case 994:
    case 995:
    case 996:
    case 997:
    case 998:
    case 999:
    case 1000:
    case 1001:
    case 1003:
    case 1005:
    case 1006:
    case 1007:
    case 1013:
    case 1014:
    case 1015:
    case 1016:
    case 1017:
    case 1031:
    case 1032:
    case 1033:
      return TYPE_SSECVT;
    case 32:
    case 35:
    case 774:
    case 775:
    case 902:
    case 903:
      return TYPE_SSECOMI;
    case 495:
    case 496:
    case 770:
    case 771:
    case 772:
    case 773:
    case 898:
    case 899:
    case 900:
    case 901:
    case 961:
    case 962:
    case 963:
    case 964:
    case 965:
    case 966:
      return TYPE_SSECMP;
    case 742:
    case 743:
    case 888:
    case 889:
      return TYPE_SSEMUL;
    case 738:
    case 739:
    case 740:
    case 741:
    case 884:
    case 885:
    case 886:
    case 887:
    case 892:
    case 893:
    case 894:
    case 895:
    case 1023:
    case 1024:
    case 1025:
    case 1026:
    case 1027:
    case 1028:
      return TYPE_SSEADD;
    case 698:
    case 699:
    case 700:
    case 705:
    case 706:
    case 707:
    case 719:
    case 722:
    case 728:
    case 734:
    case 735:
    case 736:
    case 952:
    case 1002:
    case 1004:
    case 1010:
    case 1011:
    case 1012:
      return TYPE_SSEMOV;
    case 582:
    case 585:
    case 660:
    case 663:
    case 666:
    case 669:
    case 746:
    case 747:
    case 748:
    case 749:
    case 750:
    case 751:
    case 778:
    case 779:
    case 780:
    case 781:
    case 850:
    case 851:
    case 852:
    case 880:
    case 881:
    case 896:
    case 897:
    case 1018:
    case 1019:
    case 1020:
    case 1029:
    case 1030:
      return TYPE_SSE;
    case 946:
    case 947:
    case 948:
    case 949:
    case 950:
      return TYPE_SSEIMUL;
    case 971:
    case 972:
    case 973:
    case 974:
    case 975:
    case 976:
    case 977:
    case 978:
    case 979:
    case 980:
    case 981:
    case 982:
    case 983:
    case 984:
    case 985:
    case 986:
    case 987:
    case 988:
      return TYPE_SSEISHFT;
    case 930:
    case 931:
    case 932:
    case 933:
    case 934:
    case 935:
    case 936:
    case 937:
    case 938:
    case 939:
    case 940:
    case 941:
    case 942:
    case 943:
    case 944:
    case 945:
    case 951:
    case 953:
    case 954:
    case 955:
    case 967:
    case 968:
    case 969:
    case 970:
      return TYPE_SSEIADD;
    case 752:
    case 753:
    case 754:
    case 755:
    case 756:
    case 757:
    case 758:
    case 759:
    case 760:
    case 761:
    case 762:
    case 763:
    case 764:
    case 765:
    case 766:
    case 767:
    case 768:
    case 769:
      return TYPE_SSELOG;
    case 147:
    case 148:
    case 149:
    case 152:
    case 153:
    case 154:
    case 157:
    case 158:
    case 159:
      return TYPE_FISTP;
    case 92:
    case 97:
    case 102:
      return TYPE_FXCH;
    case 19:
    case 20:
    case 21:
    case 23:
    case 25:
    case 30:
    case 33:
      return TYPE_FCMP;
    case 657:
      return TYPE_FCMOV;
    case 583:
    case 586:
    case 587:
    case 588:
    case 589:
    case 590:
    case 591:
    case 592:
    case 593:
    case 594:
    case 595:
    case 596:
    case 597:
    case 598:
    case 599:
    case 600:
    case 601:
    case 602:
    case 603:
    case 604:
    case 605:
    case 606:
    case 607:
    case 608:
    case 609:
    case 610:
    case 611:
    case 612:
    case 613:
    case 614:
    case 615:
    case 616:
      return TYPE_FPSPC;
    case 371:
    case 372:
    case 373:
    case 374:
    case 375:
    case 376:
    case 386:
    case 387:
    case 388:
    case 389:
    case 390:
    case 391:
      return TYPE_FSGN;
    case 130:
    case 131:
    case 132:
    case 138:
    case 141:
    case 143:
    case 144:
    case 146:
      return TYPE_FMOV;
    case 617:
      return TYPE_CLD;
    case 618:
    case 619:
    case 620:
    case 621:
    case 622:
    case 623:
    case 624:
    case 625:
    case 626:
    case 627:
    case 628:
    case 629:
    case 630:
    case 631:
    case 632:
    case 633:
    case 634:
    case 635:
    case 636:
    case 637:
    case 638:
    case 639:
    case 640:
    case 641:
    case 642:
    case 643:
    case 644:
    case 645:
    case 646:
    case 647:
      return TYPE_STR;
    case 533:
    case 534:
      return TYPE_LEAVE;
    case 687:
    case 688:
    case 689:
    case 690:
    case 691:
    case 692:
    case 693:
    case 694:
    case 695:
      return TYPE_CALLV;
    case 515:
    case 516:
    case 517:
    case 518:
    case 519:
    case 520:
    case 521:
    case 522:
      return TYPE_CALL;
    case 39:
    case 40:
    case 78:
    case 79:
      return TYPE_POP;
    case 36:
    case 37:
    case 38:
    case 48:
    case 49:
    case 57:
    case 58:
    case 77:
      return TYPE_PUSH;
    case 649:
    case 651:
    case 652:
    case 653:
      return TYPE_ICMOV;
    case 493:
    case 494:
      return TYPE_SETCC;
    case 497:
    case 498:
    case 509:
    case 510:
    case 511:
    case 512:
    case 513:
    case 514:
    case 527:
      return TYPE_IBR;
    case 14:
    case 278:
    case 279:
    case 280:
    case 281:
    case 282:
    case 283:
    case 284:
    case 285:
      return TYPE_TEST;
    case 1:
    case 2:
    case 4:
    case 5:
    case 7:
    case 8:
    case 10:
    case 11:
    case 12:
    case 13:
    case 15:
    case 16:
    case 17:
      return TYPE_ICMP;
    case 264:
    case 265:
    case 268:
    case 271:
    case 274:
    case 276:
    case 277:
      return TYPE_IDIV;
    case 247:
    case 248:
    case 249:
    case 250:
    case 251:
    case 252:
    case 253:
    case 254:
    case 255:
    case 256:
    case 257:
    case 258:
    case 259:
    case 260:
    case 261:
    case 262:
    case 263:
      return TYPE_IMUL;
    case 477:
    case 479:
    case 490:
    case 492:
      return TYPE_ROTATE1;
    case 469:
    case 470:
    case 471:
    case 472:
    case 473:
    case 474:
    case 475:
    case 476:
    case 478:
    case 480:
    case 481:
    case 482:
    case 483:
    case 484:
    case 485:
    case 486:
    case 487:
    case 488:
    case 489:
    case 491:
      return TYPE_ROTATE;
    case 440:
    case 442:
    case 464:
    case 466:
      return TYPE_ISHIFT1;
    case 406:
    case 418:
    case 419:
    case 420:
    case 421:
    case 424:
    case 427:
    case 428:
    case 429:
    case 430:
    case 431:
    case 432:
    case 433:
    case 434:
    case 435:
    case 436:
    case 437:
    case 438:
    case 439:
    case 441:
    case 443:
    case 444:
    case 445:
    case 446:
    case 447:
    case 448:
    case 451:
    case 452:
    case 453:
    case 454:
    case 455:
    case 456:
    case 457:
    case 458:
    case 459:
    case 460:
    case 461:
    case 462:
    case 463:
    case 465:
    case 467:
    case 468:
      return TYPE_ISHIFT;
    case 186:
    case 187:
    case 188:
    case 189:
    case 190:
    case 191:
    case 192:
    case 193:
    case 194:
    case 195:
      return TYPE_LEA;
    case 63:
    case 64:
    case 69:
    case 104:
    case 107:
    case 110:
    case 115:
    case 116:
    case 118:
    case 119:
    case 120:
    case 121:
    case 122:
    case 123:
    case 124:
    case 125:
      return TYPE_IMOVX;
    case 45:
    case 46:
    case 47:
    case 51:
    case 52:
    case 53:
    case 54:
    case 55:
    case 60:
    case 61:
    case 67:
    case 68:
    case 72:
    case 73:
    case 74:
    case 85:
    case 86:
    case 87:
    case 551:
    case 553:
      return TYPE_IMOV;
    case 352:
    case 353:
    case 354:
    case 355:
    case 356:
    case 357:
    case 358:
    case 359:
    case 360:
    case 361:
    case 392:
    case 394:
    case 395:
    case 398:
    case 400:
      return TYPE_NEGNOT;
    case 41:
    case 42:
    case 56:
    case 62:
    case 80:
    case 81:
    case 103:
    case 105:
    case 108:
    case 244:
    case 297:
    case 299:
    case 319:
    case 321:
    case 341:
    case 347:
    case 393:
    case 396:
    case 397:
    case 399:
    case 401:
      return TYPE_ALU1;
    case 178:
    case 179:
    case 180:
    case 181:
    case 182:
    case 183:
    case 184:
    case 185:
    case 224:
    case 226:
    case 227:
    case 228:
    case 229:
    case 230:
    case 231:
    case 232:
    case 233:
    case 234:
    case 235:
    case 236:
    case 237:
    case 238:
    case 239:
    case 240:
    case 241:
    case 242:
    case 243:
    case 245:
    case 246:
    case 289:
    case 291:
    case 292:
    case 293:
    case 295:
    case 296:
    case 298:
    case 300:
    case 301:
    case 302:
    case 303:
    case 304:
    case 305:
    case 306:
    case 307:
    case 308:
    case 309:
    case 310:
    case 311:
    case 312:
    case 313:
    case 314:
    case 315:
    case 316:
    case 317:
    case 318:
    case 320:
    case 322:
    case 323:
    case 324:
    case 325:
    case 326:
    case 327:
    case 328:
    case 329:
    case 330:
    case 331:
    case 332:
    case 333:
    case 334:
    case 335:
    case 336:
    case 337:
    case 338:
    case 339:
    case 340:
    case 342:
    case 343:
    case 344:
    case 345:
    case 346:
    case 348:
    case 349:
    case 350:
    case 552:
    case 554:
    case 648:
    case 650:
      return TYPE_ALU;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 199683, "?");
    case 18:
    case 22:
    case 24:
    case 26:
    case 93:
    case 94:
    case 98:
    case 99:
    case 266:
    case 267:
    case 269:
    case 270:
    case 272:
    case 273:
    case 275:
    case 404:
    case 405:
    case 422:
    case 423:
    case 449:
    case 450:
    case 530:
    case 544:
    case 545:
    case 546:
    case 547:
    case 548:
    case 549:
    case 685:
    case 686:
      return TYPE_MULTI;
    default:
      return TYPE_OTHER;
    }
}
enum attr_unit
get_attr_unit (rtx insn )
{
  switch (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)))
    {
    case 721:
    case 720:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x3))
        {
   return UNIT_SSE;
        }
      else
        {
   return UNIT_UNKNOWN;
        }
    case 656:
    case 655:
    case 654:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return UNIT_I387;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 580:
    case 579:
    case 578:
    case 577:
    case 576:
    case 575:
      extract_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_FOP) || ((mult_operator (recog_data.operand[3], XFmode)) || (get_attr_type (insn) == TYPE_FDIV)))
        {
   return UNIT_I387;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 568:
      extract_constrain_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_FOP) || (((which_alternative != 2) && (mult_operator (recog_data.operand[3], DFmode))) || (get_attr_type (insn) == TYPE_FDIV)))
        {
   return UNIT_I387;
        }
      else if ((get_attr_type (insn) == TYPE_SSEADD) || (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) || (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return UNIT_SSE;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 574:
    case 573:
    case 572:
    case 571:
    case 570:
    case 567:
      extract_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_FOP) || ((mult_operator (recog_data.operand[3], DFmode)) || (get_attr_type (insn) == TYPE_FDIV)))
        {
   return UNIT_I387;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 569:
    case 564:
      extract_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_SSEADD) || ((mult_operator (recog_data.operand[3], SFmode)) || (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return UNIT_SSE;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 563:
      extract_constrain_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_FOP) || (((which_alternative != 2) && (mult_operator (recog_data.operand[3], SFmode))) || (get_attr_type (insn) == TYPE_FDIV)))
        {
   return UNIT_I387;
        }
      else if ((get_attr_type (insn) == TYPE_SSEADD) || (((which_alternative == 2) && (mult_operator (recog_data.operand[3], SFmode))) || (get_attr_type (insn) == TYPE_SSEDIV)))
        {
   return UNIT_SSE;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 566:
    case 565:
    case 562:
      extract_insn_cached (insn);
      if ((get_attr_type (insn) == TYPE_FOP) || ((mult_operator (recog_data.operand[3], SFmode)) || (get_attr_type (insn) == TYPE_FDIV)))
        {
   return UNIT_I387;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 559:
    case 556:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return UNIT_I387;
        }
      else if (which_alternative == 1)
        {
   return UNIT_SSE;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 172:
    case 169:
    case 166:
    case 163:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return UNIT_I387;
        }
      else if (!((1 << which_alternative) & 0x3))
        {
   return UNIT_SSE;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 137:
      extract_constrain_insn_cached (insn);
      if (which_alternative != 0)
        {
   return UNIT_I387;
        }
      else
        {
   return UNIT_SSE;
        }
    case 136:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x3))
        {
   return UNIT_I387;
        }
      else
        {
   return UNIT_SSE;
        }
    case 135:
    case 134:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return UNIT_I387;
        }
      else if (!((1 << which_alternative) & 0xf))
        {
   return UNIT_SSE;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 176:
    case 175:
    case 174:
    case 171:
    case 168:
    case 165:
    case 162:
    case 145:
    case 142:
    case 133:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return UNIT_I387;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 128:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x3))
        {
   return UNIT_I387;
        }
      else
        {
   return UNIT_SSE;
        }
    case 114:
    case 113:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0x7))
        {
   return UNIT_SSE;
        }
      else if (which_alternative == 2)
        {
   return UNIT_MMX;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 112:
    case 111:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0xf))
        {
   return UNIT_SSE;
        }
      else if (which_alternative == 3)
        {
   return UNIT_MMX;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 101:
    case 100:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return UNIT_I387;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 96:
    case 95:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return UNIT_I387;
        }
      else if (!((1 << which_alternative) & 0x1f))
        {
   return UNIT_SSE;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 91:
    case 90:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x7))
        {
   return UNIT_I387;
        }
      else if (((1 << which_alternative) & 0x1e0))
        {
   return UNIT_SSE;
        }
      else if (!((1 << which_alternative) & 0x1ff))
        {
   return UNIT_MMX;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 84:
    case 83:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0x700))
        {
   return UNIT_SSE;
        }
      else if (((1 << which_alternative) & 0xe0))
        {
   return UNIT_MMX;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 82:
      extract_constrain_insn_cached (insn);
      if (!((1 << which_alternative) & 0xf))
        {
   return UNIT_SSE;
        }
      else if (((1 << which_alternative) & 0xc))
        {
   return UNIT_MMX;
        }
      else
        {
   return UNIT_UNKNOWN;
        }
    case 44:
    case 43:
      extract_constrain_insn_cached (insn);
      if (((1 << which_alternative) & 0xe0))
        {
   return UNIT_SSE;
        }
      else if (((1 << which_alternative) & 0x1c))
        {
   return UNIT_MMX;
        }
      else
        {
   return UNIT_INTEGER;
        }
    case 584:
    case 581:
    case 34:
    case 31:
      extract_constrain_insn_cached (insn);
      if (which_alternative == 0)
        {
   return UNIT_I387;
        }
      else
        {
   return UNIT_SSE;
        }
    case 1022:
    case 1021:
    case 853:
    case 718:
    case 717:
    case 716:
    case 715:
    case 714:
    case 713:
    case 712:
    case 711:
    case 710:
    case 709:
    case 708:
    case 697:
    case 696:
    case 684:
    case 683:
    case 682:
    case 681:
    case 680:
    case 679:
    case 678:
    case 677:
    case 676:
    case 675:
    case 674:
    case 673:
    case 668:
    case 667:
    case 665:
    case 664:
    case 662:
    case 661:
    case 659:
    case 658:
    case 550:
    case 543:
    case 542:
    case 541:
    case 540:
    case 539:
    case 538:
    case 537:
    case 536:
    case 535:
    case 532:
    case 531:
    case 529:
    case 528:
    case 526:
    case 525:
    case 524:
    case 523:
    case 508:
    case 507:
    case 506:
    case 505:
    case 504:
    case 503:
    case 502:
    case 501:
    case 500:
    case 499:
    case 385:
    case 384:
    case 383:
    case 382:
    case 381:
    case 380:
    case 379:
    case 378:
    case 377:
    case 370:
    case 369:
    case 368:
    case 367:
    case 366:
    case 365:
    case 364:
    case 363:
    case 362:
    case 351:
    case 287:
    case 286:
    case 225:
    case 177:
    case 127:
    case 126:
    case 117:
    case 75:
    case 29:
    case 27:
      return UNIT_UNKNOWN;
    case 883:
    case 882:
    case 879:
    case 878:
    case 877:
    case 876:
    case 875:
    case 874:
    case 873:
    case 872:
    case 871:
    case 870:
    case 869:
    case 868:
    case 867:
    case 866:
    case 865:
    case 864:
    case 863:
    case 862:
    case 861:
    case 860:
    case 859:
    case 858:
    case 857:
    case 856:
    case 855:
    case 854:
    case 849:
    case 848:
    case 847:
    case 846:
    case 845:
    case 844:
    case 843:
    case 842:
    case 841:
    case 840:
    case 839:
    case 838:
    case 837:
    case 836:
    case 835:
    case 834:
    case 833:
    case 832:
    case 831:
    case 830:
    case 829:
    case 828:
    case 827:
    case 826:
    case 825:
    case 824:
    case 823:
    case 822:
    case 821:
    case 820:
    case 819:
    case 818:
    case 817:
    case 816:
    case 815:
    case 814:
    case 813:
    case 812:
    case 811:
    case 810:
    case 809:
    case 808:
    case 807:
    case 806:
    case 805:
    case 804:
    case 803:
    case 802:
    case 801:
    case 800:
    case 799:
    case 798:
    case 797:
    case 796:
    case 795:
    case 794:
    case 793:
    case 792:
    case 791:
    case 729:
    case 727:
    case 726:
    case 704:
    case 703:
    case 702:
    case 701:
      return UNIT_MMX;
    case 1033:
    case 1032:
    case 1031:
    case 1030:
    case 1029:
    case 1028:
    case 1027:
    case 1026:
    case 1025:
    case 1024:
    case 1023:
    case 1020:
    case 1019:
    case 1018:
    case 1017:
    case 1016:
    case 1015:
    case 1014:
    case 1013:
    case 1012:
    case 1011:
    case 1010:
    case 1009:
    case 1008:
    case 1007:
    case 1006:
    case 1005:
    case 1004:
    case 1003:
    case 1002:
    case 1001:
    case 1000:
    case 999:
    case 998:
    case 997:
    case 996:
    case 995:
    case 994:
    case 993:
    case 992:
    case 991:
    case 990:
    case 989:
    case 988:
    case 987:
    case 986:
    case 985:
    case 984:
    case 983:
    case 982:
    case 981:
    case 980:
    case 979:
    case 978:
    case 977:
    case 976:
    case 975:
    case 974:
    case 973:
    case 972:
    case 971:
    case 970:
    case 969:
    case 968:
    case 967:
    case 966:
    case 965:
    case 964:
    case 963:
    case 962:
    case 961:
    case 960:
    case 959:
    case 958:
    case 957:
    case 956:
    case 955:
    case 954:
    case 953:
    case 952:
    case 951:
    case 950:
    case 949:
    case 948:
    case 947:
    case 946:
    case 945:
    case 944:
    case 943:
    case 942:
    case 941:
    case 940:
    case 939:
    case 938:
    case 937:
    case 936:
    case 935:
    case 934:
    case 933:
    case 932:
    case 931:
    case 930:
    case 929:
    case 928:
    case 927:
    case 926:
    case 925:
    case 924:
    case 923:
    case 922:
    case 921:
    case 920:
    case 919:
    case 918:
    case 917:
    case 916:
    case 915:
    case 914:
    case 913:
    case 912:
    case 911:
    case 910:
    case 909:
    case 908:
    case 907:
    case 906:
    case 905:
    case 904:
    case 903:
    case 902:
    case 901:
    case 900:
    case 899:
    case 898:
    case 897:
    case 896:
    case 895:
    case 894:
    case 893:
    case 892:
    case 891:
    case 890:
    case 889:
    case 888:
    case 887:
    case 886:
    case 885:
    case 884:
    case 881:
    case 880:
    case 852:
    case 851:
    case 850:
    case 790:
    case 789:
    case 788:
    case 787:
    case 786:
    case 785:
    case 784:
    case 783:
    case 782:
    case 781:
    case 780:
    case 779:
    case 778:
    case 777:
    case 776:
    case 775:
    case 774:
    case 773:
    case 772:
    case 771:
    case 770:
    case 769:
    case 768:
    case 767:
    case 766:
    case 765:
    case 764:
    case 763:
    case 762:
    case 761:
    case 760:
    case 759:
    case 758:
    case 757:
    case 756:
    case 755:
    case 754:
    case 753:
    case 752:
    case 751:
    case 750:
    case 749:
    case 748:
    case 747:
    case 746:
    case 745:
    case 744:
    case 743:
    case 742:
    case 741:
    case 740:
    case 739:
    case 738:
    case 737:
    case 736:
    case 735:
    case 734:
    case 733:
    case 732:
    case 731:
    case 730:
    case 728:
    case 725:
    case 724:
    case 723:
    case 722:
    case 719:
    case 707:
    case 706:
    case 705:
    case 700:
    case 699:
    case 698:
    case 669:
    case 666:
    case 663:
    case 660:
    case 585:
    case 582:
    case 560:
    case 557:
    case 496:
    case 495:
    case 173:
    case 170:
    case 167:
    case 164:
    case 156:
    case 155:
    case 151:
    case 150:
    case 140:
    case 139:
    case 129:
    case 35:
    case 32:
      return UNIT_SSE;
    case 657:
    case 616:
    case 615:
    case 614:
    case 613:
    case 612:
    case 611:
    case 610:
    case 609:
    case 608:
    case 607:
    case 606:
    case 605:
    case 604:
    case 603:
    case 602:
    case 601:
    case 600:
    case 599:
    case 598:
    case 597:
    case 596:
    case 595:
    case 594:
    case 593:
    case 592:
    case 591:
    case 590:
    case 589:
    case 588:
    case 587:
    case 586:
    case 583:
    case 561:
    case 558:
    case 555:
    case 391:
    case 390:
    case 389:
    case 388:
    case 387:
    case 386:
    case 376:
    case 375:
    case 374:
    case 373:
    case 372:
    case 371:
    case 159:
    case 158:
    case 157:
    case 154:
    case 153:
    case 152:
    case 149:
    case 148:
    case 147:
    case 146:
    case 144:
    case 143:
    case 141:
    case 138:
    case 132:
    case 131:
    case 130:
    case 102:
    case 97:
    case 92:
    case 33:
    case 30:
    case 25:
    case 23:
    case 21:
    case 20:
    case 19:
    case 28:
    case 160:
    case 161:
      return UNIT_I387;
    case -1:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ASM_INPUT
          && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
        _fatal_insn_not_found (insn, "gcc.c", 200608, "?");
    default:
      return UNIT_INTEGER;
    }
}
const struct function_unit_desc function_units[] = {
{"dummy", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} };
int max_dfa_issue_rate = 6;
static const unsigned char pentium_translate[] = {
    0, 1, 2, 3, 2, 4, 3, 5, 5, 5,
    6, 7, 8, 5, 2, 2, 9, 10, 11, 4,
   12, 13, 14, 3, 5, 8, 7, 2, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
   15, 15, 16};
static const unsigned char pentium_transitions[] = {
   19, 18, 2, 3, 4, 15, 17, 16, 15, 14,
   14, 13, 5, 5, 1, 0, 0, 3, 6, 3,
   20, 4, 20, 4, 3, 20, 3, 5, 2, 2,
    6, 2, 4, 4, 20, 4, 3, 3, 3, 15,
    0, 4, 13, 3, 3, 2, 0, 1, 2, 4,
    6, 4, 3, 2, 2, 4, 3, 20, 4, 14,
    3, 3, 6, 20, 16, 0, 6, 6, 7, 6,
    7, 8, 17, 7, 8, 9, 9, 10, 10, 11,
   11, 12, 12, 4, 18, 19, 19, 6};
static const unsigned char pentium_check[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
   20, 5, 20, 5, 5, 20, 5, 5, 5, 15,
   15, 15, 13, 15, 20, 15, 15, 1, 15, 15,
   15, 1, 13, 13, 1, 2, 2, 1, 1, 14,
   14, 14, 3, 3, 16, 4, 4, 20, 16, 14,
   14, 16, 17, 20, 16, 16, 17, 6, 6, 17,
    7, 7, 17, 17, 8, 8, 9, 9, 10, 10,
   11, 11, 12, 12, 18, 18, 19, 19};
static const unsigned char pentium_base[] = {
    0, 32, 30, 37, 40, 12, 52, 55, 59, 61,
   63, 65, 67, 27, 44, 24, 49, 57, 69, 71
};
static const unsigned char pentium_min_issue_delay[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 2, 34,
   34, 2, 34, 2, 32, 34, 0, 17, 17, 17,
   17, 17, 17, 17, 16, 2, 34, 34, 34, 34,
   34, 34, 34, 0, 51, 51, 51, 51, 51, 51,
   51, 48, 2, 34, 34, 0, 2, 2, 0, 32,
    0, 170, 170, 170, 170, 170, 170, 170, 160, 9,
  153, 153, 153, 153, 153, 153, 153, 0, 136, 136,
  136, 136, 136, 136, 136, 128, 7, 119, 119, 119,
  119, 119, 119, 119, 0, 102, 102, 102, 102, 102,
  102, 102, 96, 5, 85, 85, 85, 85, 85, 85,
   85, 0, 68, 68, 68, 68, 68, 68, 68, 64,
    3, 51, 51, 3, 51, 51, 51, 51, 0, 51,
   51, 48, 0, 51, 51, 51, 48, 1, 17, 17,
    0, 1, 1, 0, 16, 0, 17, 17, 16, 17,
   16, 17, 1, 16, 10, 170, 170, 10, 170, 10,
  160, 170, 0, 204, 204, 204, 204, 204, 204, 204,
  192, 11, 187, 187, 187, 187, 187, 187, 187, 0
};
static const unsigned char pentium_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
static const unsigned char pentium_fpu_translate[] = {
    0, 0, 1, 0, 1, 2, 3, 0, 0, 0,
    0, 0, 1, 4, 5, 6, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 7};
static const unsigned char pentium_fpu_transitions[] = {
    0, 72, 73, 71, 74, 32, 1, 0, 69, 74,
   73, 71, 75, 1, 2, 70, 70, 72, 73, 71,
    2, 3, 3, 0, 4, 5, 6, 7, 8, 4,
    9, 5, 6, 7, 8, 9, 10, 10, 11, 12,
   13, 14, 15, 11, 16, 12, 13, 14, 15, 16,
   17, 17, 18, 19, 20, 21, 22, 18, 23, 19,
   20, 21, 22, 23, 24, 24, 25, 26, 27, 28,
   29, 25, 30, 26, 27, 28, 29, 30, 31, 31,
   32, 33, 34, 35, 36, 32, 37, 33, 34, 35,
   36, 37, 38, 38, 39, 40, 41, 42, 43, 39,
   44, 40, 41, 42, 43, 44, 45, 45, 46, 47,
   48, 49, 50, 46, 51, 47, 48, 49, 50, 51,
   52, 52, 53, 54, 55, 56, 57, 53, 58, 54,
   55, 56, 57, 58, 59, 59, 60, 61, 62, 63,
   64, 60, 65, 61, 62, 63, 64, 65, 66, 66,
   67, 68, 71, 72, 73, 67, 74, 68, 69, 72,
    0, 71, 75, 70};
static const unsigned char pentium_fpu_check[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 69, 69,
   69, 69, 75, 1, 2, 69, 70, 70, 70, 70,
    1, 2, 3, 70, 4, 5, 6, 7, 8, 3,
    9, 4, 5, 6, 7, 8, 10, 9, 11, 12,
   13, 14, 15, 10, 16, 11, 12, 13, 14, 15,
   17, 16, 18, 19, 20, 21, 22, 17, 23, 18,
   19, 20, 21, 22, 24, 23, 25, 26, 27, 28,
   29, 24, 30, 25, 26, 27, 28, 29, 31, 30,
   32, 33, 34, 35, 36, 31, 37, 32, 33, 34,
   35, 36, 38, 37, 39, 40, 41, 42, 43, 38,
   44, 39, 40, 41, 42, 43, 45, 44, 46, 47,
   48, 49, 50, 45, 51, 46, 47, 48, 49, 50,
   52, 51, 53, 54, 55, 56, 57, 52, 58, 53,
   54, 55, 56, 57, 59, 58, 60, 61, 62, 63,
   64, 59, 65, 60, 61, 62, 63, 64, 66, 65,
   67, 68, 71, 72, 73, 66, 74, 67, 68, 71,
   72, 73, 75, 74};
static const unsigned char pentium_fpu_base[] = {
    0, 13, 14, 22, 24, 25, 26, 27, 28, 30,
   36, 38, 39, 40, 41, 42, 44, 50, 52, 53,
   54, 55, 56, 58, 64, 66, 67, 68, 69, 70,
   72, 78, 80, 81, 82, 83, 84, 86, 92, 94,
   95, 96, 97, 98, 100, 106, 108, 109, 110, 111,
  112, 114, 120, 122, 123, 124, 125, 126, 128, 134,
  136, 137, 138, 139, 140, 142, 148, 150, 151, 8,
   16, 152, 153, 154, 156};
static const unsigned char pentium_fpu_min_issue_delay[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 68,
   68, 68, 70, 70, 70, 0, 0, 67, 67, 67,
   69, 69, 69, 0, 0, 66, 66, 66, 68, 68,
   68, 0, 0, 65, 65, 65, 67, 67, 67, 0,
    0, 64, 64, 64, 66, 66, 66, 0, 0, 63,
   63, 63, 65, 65, 65, 0, 0, 62, 62, 62,
   64, 64, 64, 0, 0, 61, 61, 61, 63, 63,
   63, 0, 0, 60, 60, 60, 62, 62, 62, 0,
    0, 59, 59, 59, 61, 61, 61, 0, 0, 58,
   58, 58, 60, 60, 60, 0, 0, 57, 57, 57,
   59, 59, 59, 0, 0, 56, 56, 56, 58, 58,
   58, 0, 0, 55, 55, 55, 57, 57, 57, 0,
    0, 54, 54, 54, 56, 56, 56, 0, 0, 53,
   53, 53, 55, 55, 55, 0, 0, 52, 52, 52,
   54, 54, 54, 0, 0, 51, 51, 51, 53, 53,
   53, 0, 0, 50, 50, 50, 52, 52, 52, 0,
    0, 49, 49, 49, 51, 51, 51, 0, 0, 48,
   48, 48, 50, 50, 50, 0, 0, 47, 47, 47,
   49, 49, 49, 0, 0, 46, 46, 46, 48, 48,
   48, 0, 0, 45, 45, 45, 47, 47, 47, 0,
    0, 44, 44, 44, 46, 46, 46, 0, 0, 43,
   43, 43, 45, 45, 45, 0, 0, 42, 42, 42,
   44, 44, 44, 0, 0, 41, 41, 41, 43, 43,
   43, 0, 0, 40, 40, 40, 42, 42, 42, 0,
    0, 39, 39, 39, 41, 41, 41, 0, 0, 38,
   38, 38, 40, 40, 40, 0, 0, 37, 37, 37,
   39, 39, 39, 0, 0, 36, 36, 36, 38, 38,
   38, 0, 0, 35, 35, 35, 37, 37, 37, 0,
    0, 34, 34, 34, 36, 36, 36, 0, 0, 33,
   33, 33, 35, 35, 35, 0, 0, 32, 32, 32,
   34, 34, 34, 0, 0, 31, 31, 31, 33, 33,
   33, 0, 0, 30, 30, 30, 32, 32, 32, 0,
    0, 29, 29, 29, 31, 31, 31, 0, 0, 28,
   28, 28, 30, 30, 30, 0, 0, 27, 27, 27,
   29, 29, 29, 0, 0, 26, 26, 26, 28, 28,
   28, 0, 0, 25, 25, 25, 27, 27, 27, 0,
    0, 24, 24, 24, 26, 26, 26, 0, 0, 23,
   23, 23, 25, 25, 25, 0, 0, 22, 22, 22,
   24, 24, 24, 0, 0, 21, 21, 21, 23, 23,
   23, 0, 0, 20, 20, 20, 22, 22, 22, 0,
    0, 19, 19, 19, 21, 21, 21, 0, 0, 18,
   18, 18, 20, 20, 20, 0, 0, 17, 17, 17,
   19, 19, 19, 0, 0, 16, 16, 16, 18, 18,
   18, 0, 0, 15, 15, 15, 17, 17, 17, 0,
    0, 14, 14, 14, 16, 16, 16, 0, 0, 13,
   13, 13, 15, 15, 15, 0, 0, 12, 12, 12,
   14, 14, 14, 0, 0, 11, 11, 11, 13, 13,
   13, 0, 0, 10, 10, 10, 12, 12, 12, 0,
    0, 9, 9, 9, 11, 11, 11, 0, 0, 8,
    8, 8, 10, 10, 10, 0, 0, 7, 7, 7,
    9, 9, 9, 0, 0, 6, 6, 6, 8, 8,
    8, 0, 0, 5, 5, 5, 7, 7, 7, 0,
    0, 4, 4, 4, 6, 6, 6, 0, 0, 3,
    3, 3, 5, 5, 5, 0, 0, 2, 2, 2,
    4, 4, 4, 0, 0, 1, 1, 1, 3, 3,
    3, 0, 0, 0, 0, 0, 2, 2, 2, 0,
    0, 0, 0, 0, 1, 1, 1, 0, 0, 2,
    2, 2, 2, 2, 2, 0, 0, 1, 1, 1,
    1, 1, 1, 0, 0, 3, 3, 3, 3, 3,
    3, 0, 0, 1, 1, 1, 2, 2, 2, 0
};
static const unsigned char pentium_fpu_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0};
static const unsigned char ppro_decoder_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
    2, 1, 2, 2, 2, 2, 1, 1, 2, 1,
    1, 2, 1, 1, 1, 1, 1, 1, 1, 2,
    1, 1, 1, 2, 1, 1, 2, 1, 2, 2,
    1, 2, 1, 1, 1, 2, 1, 2, 1, 2,
    1, 2, 1, 2, 1, 2, 1, 2, 2, 1,
    1, 1, 2, 1, 2, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 2, 1, 1, 1, 1, 2,
    1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 3};
static const unsigned char ppro_decoder_transitions[] = {
    0, 1, 1, 0, 1, 4, 2, 0, 2, 4,
    3, 0, 3, 4, 4, 0};
static const unsigned char ppro_decoder_min_issue_delay[] = {
    4, 70};
static const unsigned char ppro_decoder_dead_lock[] = {
    0, 0, 0, 0};
static const unsigned char ppro_core_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    0, 0, 1, 0, 2, 2, 2, 3, 4, 4,
    5, 2, 2, 6, 6, 7, 6, 7, 6, 2,
    8, 6, 8, 2, 8, 8, 2, 2, 2, 0,
    8, 2, 8, 8, 8, 2, 2, 2, 2, 2,
    2, 4, 4, 2, 2, 4, 0, 2, 4, 4,
    4, 4, 2, 2, 2, 2, 9, 9, 10, 4,
    1, 1, 0, 10, 10, 10, 10, 10, 10, 4,
    8, 8, 11, 11, 4, 4, 5, 0, 0, 1,
    1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 12};
static const unsigned char ppro_core_transitions[] = {
    0, 34, 34, 43, 36, 33, 32, 31, 33, 18,
  104, 1, 0, 36, 42, 42, 105, 35, 40, 39,
   41, 40, 38, 105, 37, 0, 104, 35, 35, 36,
   37, 43, 44, 45, 43, 70, 38, 103, 36, 1,
   37, 105, 2, 37, 103, 105, 39, 40, 19, 103,
  105, 2, 2, 102, 105, 41, 102, 101, 33, 34,
   42, 43, 101, 105, 3, 3, 100, 32, 44, 100,
   99, 105, 0, 42, 45, 99, 105, 4, 4, 98,
   40, 46, 98, 97, 105, 47, 39, 48, 97, 105,
    5, 5, 96, 41, 49, 96, 95, 31, 50, 47,
   51, 95, 105, 6, 6, 94, 30, 52, 94, 93,
   49, 53, 29, 54, 93, 105, 7, 7, 92, 51,
   55, 92, 91, 28, 56, 53, 57, 91, 105, 8,
    8, 90, 27, 58, 90, 89, 55, 59, 26, 60,
   89, 105, 9, 9, 88, 57, 61, 88, 87, 25,
   62, 59, 63, 87, 105, 10, 10, 86, 24, 64,
   86, 85, 61, 65, 23, 66, 85, 105, 11, 11,
   84, 63, 67, 84, 83, 22, 68, 65, 69, 83,
  105, 12, 12, 82, 21, 70, 82, 81, 67, 71,
   20, 72, 81, 105, 13, 13, 80, 69, 73, 80,
   79, 38, 74, 18, 75, 79, 105, 14, 14, 78,
   72, 76, 78, 77, 17, 77, 74, 78, 77, 105,
   15, 15, 76, 16, 79, 76, 75, 76, 80, 15,
   81, 75, 105, 16, 16, 74, 78, 82, 74, 73,
   14, 83, 80, 84, 73, 105, 17, 17, 72, 13,
   85, 72, 71, 82, 86, 12, 87, 71, 105, 18,
   18, 38, 84, 88, 38, 70, 11, 89, 86, 90,
   70, 105, 19, 19, 69, 10, 91, 69, 68, 88,
   92, 9, 93, 68, 105, 20, 20, 67, 90, 94,
   67, 66, 8, 95, 92, 96, 66, 105, 21, 21,
   65, 7, 97, 65, 64, 94, 98, 6, 99, 64,
  105, 22, 22, 63, 96, 100, 63, 62, 5, 101,
   98, 102, 62, 105, 23, 23, 61, 4, 103, 61,
   60, 100, 105, 3, 105, 60, 105, 24, 24, 59,
  102, 105, 59, 58, 105, 105, 105, 105, 58, 105,
   25, 25, 57, 105, 105, 57, 56, 105, 105, 105,
  105, 56, 105, 26, 26, 55, 105, 105, 55, 54,
  105, 105, 105, 105, 54, 105, 27, 27, 53, 105,
  105, 53, 52, 105, 105, 105, 105, 52, 105, 28,
   28, 51, 105, 105, 51, 50, 105, 105, 105, 105,
   50, 105, 29, 29, 49, 105, 105, 49, 48, 105,
  105, 105, 105, 48, 105, 30, 30, 47, 105, 105,
   47, 46, 105, 105, 105, 105, 46, 105, 31, 31,
   41, 105, 105, 41, 45, 105, 105, 105, 105, 45,
  105, 32, 32, 39, 105, 105, 39, 44, 105, 105,
  105, 105, 44, 105, 33, 33, 40, 105, 105, 40,
   43, 105, 105, 105, 105, 43, 105, 34, 34, 42,
  105, 105, 42, 40, 105, 105, 105, 105, 35, 105,
    0};
static const unsigned char ppro_core_check[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 36, 36, 36, 105, 35, 36, 36,
   36, 36, 36, 105, 36, 36, 104, 104, 104, 35,
   37, 104, 104, 104, 104, 104, 38, 104, 104, 1,
    1, 105, 37, 1, 1, 105, 39, 40, 38, 1,
  105, 1, 2, 2, 105, 41, 2, 2, 39, 40,
   42, 43, 2, 105, 2, 3, 3, 41, 44, 3,
    3, 105, 42, 43, 45, 3, 105, 3, 4, 4,
   44, 46, 4, 4, 105, 47, 45, 48, 4, 105,
    4, 5, 5, 46, 49, 5, 5, 47, 50, 48,
   51, 5, 105, 5, 6, 6, 49, 52, 6, 6,
   50, 53, 51, 54, 6, 105, 6, 7, 7, 52,
   55, 7, 7, 53, 56, 54, 57, 7, 105, 7,
    8, 8, 55, 58, 8, 8, 56, 59, 57, 60,
    8, 105, 8, 9, 9, 58, 61, 9, 9, 59,
   62, 60, 63, 9, 105, 9, 10, 10, 61, 64,
   10, 10, 62, 65, 63, 66, 10, 105, 10, 11,
   11, 64, 67, 11, 11, 65, 68, 66, 69, 11,
  105, 11, 12, 12, 67, 70, 12, 12, 68, 71,
   69, 72, 12, 105, 12, 13, 13, 70, 73, 13,
   13, 71, 74, 72, 75, 13, 105, 13, 14, 14,
   73, 76, 14, 14, 74, 77, 75, 78, 14, 105,
   14, 15, 15, 76, 79, 15, 15, 77, 80, 78,
   81, 15, 105, 15, 16, 16, 79, 82, 16, 16,
   80, 83, 81, 84, 16, 105, 16, 17, 17, 82,
   85, 17, 17, 83, 86, 84, 87, 17, 105, 17,
   18, 18, 85, 88, 18, 18, 86, 89, 87, 90,
   18, 105, 18, 19, 19, 88, 91, 19, 19, 89,
   92, 90, 93, 19, 105, 19, 20, 20, 91, 94,
   20, 20, 92, 95, 93, 96, 20, 105, 20, 21,
   21, 94, 97, 21, 21, 95, 98, 96, 99, 21,
  105, 21, 22, 22, 97, 100, 22, 22, 98, 101,
   99, 102, 22, 105, 22, 23, 23, 100, 103, 23,
   23, 101, 105, 102, 105, 23, 105, 23, 24, 24,
  103, 105, 24, 24, 105, 105, 105, 105, 24, 105,
   24, 25, 25, 105, 105, 25, 25, 105, 105, 105,
  105, 25, 105, 25, 26, 26, 105, 105, 26, 26,
  105, 105, 105, 105, 26, 105, 26, 27, 27, 105,
  105, 27, 27, 105, 105, 105, 105, 27, 105, 27,
   28, 28, 105, 105, 28, 28, 105, 105, 105, 105,
   28, 105, 28, 29, 29, 105, 105, 29, 29, 105,
  105, 105, 105, 29, 105, 29, 30, 30, 105, 105,
   30, 30, 105, 105, 105, 105, 30, 105, 30, 31,
   31, 105, 105, 31, 31, 105, 105, 105, 105, 31,
  105, 31, 32, 32, 105, 105, 32, 32, 105, 105,
  105, 105, 32, 105, 32, 33, 33, 105, 105, 33,
   33, 105, 105, 105, 105, 33, 105, 33, 34, 34,
  105, 105, 34, 34, 105, 105, 105, 105, 34, 105,
   34};
static const unsigned short ppro_core_base[] = {
    0, 39, 52, 65, 78, 91, 104, 117, 130, 143,
  156, 169, 182, 195, 208, 221, 234, 247, 260, 273,
  286, 299, 312, 325, 338, 351, 364, 377, 390, 403,
  416, 429, 442, 455, 468, 17, 13, 30, 36, 46,
   47, 55, 60, 61, 68, 74, 81, 85, 87, 94,
   98, 100, 107, 111, 113, 120, 124, 126, 133, 137,
  139, 146, 150, 152, 159, 163, 165, 172, 176, 178,
  185, 189, 191, 198, 202, 204, 211, 215, 217, 224,
  228, 230, 237, 241, 243, 250, 254, 256, 263, 267,
  269, 276, 280, 282, 289, 293, 295, 302, 306, 308,
  315, 319, 321, 328, 26};
static const unsigned char ppro_core_min_issue_delay[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 34, 34, 0, 0, 34,
   34, 34, 34, 0, 34, 0, 0, 0, 33, 33,
    0, 0, 33, 33, 33, 33, 0, 33, 0, 0,
    0, 32, 32, 0, 0, 32, 32, 32, 32, 0,
   32, 0, 0, 0, 31, 31, 0, 0, 31, 31,
   31, 31, 0, 31, 0, 0, 0, 30, 30, 0,
    0, 30, 30, 30, 30, 0, 30, 0, 0, 0,
   29, 29, 0, 0, 29, 29, 29, 29, 0, 29,
    0, 0, 0, 28, 28, 0, 0, 28, 28, 28,
   28, 0, 28, 0, 0, 0, 27, 27, 0, 0,
   27, 27, 27, 27, 0, 27, 0, 0, 0, 26,
   26, 0, 0, 26, 26, 26, 26, 0, 26, 0,
    0, 0, 25, 25, 0, 0, 25, 25, 25, 25,
    0, 25, 0, 0, 0, 24, 24, 0, 0, 24,
   24, 24, 24, 0, 24, 0, 0, 0, 23, 23,
    0, 0, 23, 23, 23, 23, 0, 23, 0, 0,
    0, 22, 22, 0, 0, 22, 22, 22, 22, 0,
   22, 0, 0, 0, 21, 21, 0, 0, 21, 21,
   21, 21, 0, 21, 0, 0, 0, 20, 20, 0,
    0, 20, 20, 20, 20, 0, 20, 0, 0, 0,
   19, 19, 0, 0, 19, 19, 19, 19, 0, 19,
    0, 0, 0, 18, 18, 0, 0, 18, 18, 18,
   18, 0, 18, 0, 0, 0, 17, 17, 0, 0,
   17, 17, 17, 17, 0, 17, 0, 0, 0, 16,
   16, 0, 0, 16, 16, 16, 16, 0, 16, 0,
    0, 0, 15, 15, 0, 0, 15, 15, 15, 15,
    0, 15, 0, 0, 0, 14, 14, 0, 0, 14,
   14, 14, 14, 0, 14, 0, 0, 0, 13, 13,
    0, 0, 13, 13, 13, 13, 0, 13, 0, 0,
    0, 12, 12, 0, 0, 12, 12, 12, 12, 0,
   12, 0, 0, 0, 11, 11, 0, 0, 11, 11,
   11, 11, 0, 11, 0, 0, 0, 10, 10, 0,
    0, 10, 10, 10, 10, 0, 10, 0, 0, 0,
    9, 9, 0, 0, 9, 9, 9, 9, 0, 9,
    0, 0, 0, 8, 8, 0, 0, 8, 8, 8,
    8, 0, 8, 0, 0, 0, 7, 7, 0, 0,
    7, 7, 7, 7, 0, 7, 0, 0, 0, 6,
    6, 0, 0, 6, 6, 6, 6, 0, 6, 0,
    0, 0, 5, 5, 0, 0, 5, 5, 5, 5,
    0, 5, 0, 0, 0, 4, 4, 0, 0, 4,
    4, 4, 4, 0, 4, 0, 0, 0, 3, 3,
    0, 0, 3, 3, 3, 3, 0, 3, 0, 0,
    0, 2, 2, 0, 0, 2, 2, 2, 2, 0,
    2, 0, 0, 0, 1, 1, 0, 0, 1, 1,
    1, 1, 0, 1, 0, 0, 1, 1, 2, 2,
    1, 1, 1, 1, 1, 2, 1, 0, 0, 0,
    0, 1, 1, 0, 0, 0, 0, 0, 1, 0,
    0, 0, 1, 34, 34, 1, 1, 34, 34, 34,
   34, 1, 34, 0, 0, 1, 17, 17, 1, 1,
   17, 17, 17, 17, 1, 17, 0, 0, 1, 3,
    3, 1, 1, 3, 3, 3, 3, 1, 3, 0,
    0, 1, 2, 2, 1, 1, 2, 2, 2, 2,
    1, 2, 0, 0, 1, 4, 4, 1, 1, 4,
    4, 4, 4, 1, 4, 0, 0, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    2, 0, 0, 2, 3, 3, 2, 2, 3, 3,
    3, 3, 2, 3, 0, 0, 2, 4, 4, 2,
    2, 4, 4, 4, 4, 2, 4, 0, 0, 2,
    5, 5, 2, 2, 5, 5, 5, 5, 2, 5,
    0, 0, 1, 5, 5, 1, 1, 5, 5, 5,
    5, 1, 5, 0, 0, 2, 6, 6, 2, 2,
    6, 6, 6, 6, 2, 6, 0, 0, 1, 6,
    6, 1, 1, 6, 6, 6, 6, 1, 6, 0,
    0, 2, 7, 7, 2, 2, 7, 7, 7, 7,
    2, 7, 0, 0, 1, 7, 7, 1, 1, 7,
    7, 7, 7, 1, 7, 0, 0, 2, 8, 8,
    2, 2, 8, 8, 8, 8, 2, 8, 0, 0,
    1, 8, 8, 1, 1, 8, 8, 8, 8, 1,
    8, 0, 0, 2, 9, 9, 2, 2, 9, 9,
    9, 9, 2, 9, 0, 0, 1, 9, 9, 1,
    1, 9, 9, 9, 9, 1, 9, 0, 0, 2,
   10, 10, 2, 2, 10, 10, 10, 10, 2, 10,
    0, 0, 1, 10, 10, 1, 1, 10, 10, 10,
   10, 1, 10, 0, 0, 2, 11, 11, 2, 2,
   11, 11, 11, 11, 2, 11, 0, 0, 1, 11,
   11, 1, 1, 11, 11, 11, 11, 1, 11, 0,
    0, 2, 12, 12, 2, 2, 12, 12, 12, 12,
    2, 12, 0, 0, 1, 12, 12, 1, 1, 12,
   12, 12, 12, 1, 12, 0, 0, 2, 13, 13,
    2, 2, 13, 13, 13, 13, 2, 13, 0, 0,
    1, 13, 13, 1, 1, 13, 13, 13, 13, 1,
   13, 0, 0, 2, 14, 14, 2, 2, 14, 14,
   14, 14, 2, 14, 0, 0, 1, 14, 14, 1,
    1, 14, 14, 14, 14, 1, 14, 0, 0, 2,
   15, 15, 2, 2, 15, 15, 15, 15, 2, 15,
    0, 0, 1, 15, 15, 1, 1, 15, 15, 15,
   15, 1, 15, 0, 0, 2, 16, 16, 2, 2,
   16, 16, 16, 16, 2, 16, 0, 0, 1, 16,
   16, 1, 1, 16, 16, 16, 16, 1, 16, 0,
    0, 2, 17, 17, 2, 2, 17, 17, 17, 17,
    2, 17, 0, 0, 2, 18, 18, 2, 2, 18,
   18, 18, 18, 2, 18, 0, 0, 1, 18, 18,
    1, 1, 18, 18, 18, 18, 1, 18, 0, 0,
    2, 19, 19, 2, 2, 19, 19, 19, 19, 2,
   19, 0, 0, 1, 19, 19, 1, 1, 19, 19,
   19, 19, 1, 19, 0, 0, 2, 20, 20, 2,
    2, 20, 20, 20, 20, 2, 20, 0, 0, 1,
   20, 20, 1, 1, 20, 20, 20, 20, 1, 20,
    0, 0, 2, 21, 21, 2, 2, 21, 21, 21,
   21, 2, 21, 0, 0, 1, 21, 21, 1, 1,
   21, 21, 21, 21, 1, 21, 0, 0, 2, 22,
   22, 2, 2, 22, 22, 22, 22, 2, 22, 0,
    0, 1, 22, 22, 1, 1, 22, 22, 22, 22,
    1, 22, 0, 0, 2, 23, 23, 2, 2, 23,
   23, 23, 23, 2, 23, 0, 0, 1, 23, 23,
    1, 1, 23, 23, 23, 23, 1, 23, 0, 0,
    2, 24, 24, 2, 2, 24, 24, 24, 24, 2,
   24, 0, 0, 1, 24, 24, 1, 1, 24, 24,
   24, 24, 1, 24, 0, 0, 2, 25, 25, 2,
    2, 25, 25, 25, 25, 2, 25, 0, 0, 1,
   25, 25, 1, 1, 25, 25, 25, 25, 1, 25,
    0, 0, 2, 26, 26, 2, 2, 26, 26, 26,
   26, 2, 26, 0, 0, 1, 26, 26, 1, 1,
   26, 26, 26, 26, 1, 26, 0, 0, 2, 27,
   27, 2, 2, 27, 27, 27, 27, 2, 27, 0,
    0, 1, 27, 27, 1, 1, 27, 27, 27, 27,
    1, 27, 0, 0, 2, 28, 28, 2, 2, 28,
   28, 28, 28, 2, 28, 0, 0, 1, 28, 28,
    1, 1, 28, 28, 28, 28, 1, 28, 0, 0,
    2, 29, 29, 2, 2, 29, 29, 29, 29, 2,
   29, 0, 0, 1, 29, 29, 1, 1, 29, 29,
   29, 29, 1, 29, 0, 0, 2, 30, 30, 2,
    2, 30, 30, 30, 30, 2, 30, 0, 0, 1,
   30, 30, 1, 1, 30, 30, 30, 30, 1, 30,
    0, 0, 2, 31, 31, 2, 2, 31, 31, 31,
   31, 2, 31, 0, 0, 1, 31, 31, 1, 1,
   31, 31, 31, 31, 1, 31, 0, 0, 2, 32,
   32, 2, 2, 32, 32, 32, 32, 2, 32, 0,
    0, 1, 32, 32, 1, 1, 32, 32, 32, 32,
    1, 32, 0, 0, 2, 33, 33, 2, 2, 33,
   33, 33, 33, 2, 33, 0, 0, 1, 33, 33,
    1, 1, 33, 33, 33, 33, 1, 33, 0, 0,
    2, 34, 34, 2, 2, 34, 34, 34, 34, 2,
   34, 0, 0, 0, 0, 2, 2, 0, 0, 0,
    0, 0, 2, 0, 0};
static const unsigned char ppro_core_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0};
static const unsigned char ppro_idiv_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 1, 1, 2, 2, 3, 3, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 4};
static const unsigned char ppro_idiv_transitions[] = {
    0, 26, 17, 1, 0, 1, 38, 38, 38, 2,
    2, 38, 38, 38, 3, 3, 38, 38, 38, 4,
    4, 38, 38, 38, 5, 5, 38, 38, 38, 6,
    6, 38, 38, 38, 7, 7, 38, 38, 38, 8,
    8, 38, 38, 38, 9, 9, 38, 38, 38, 10,
   10, 38, 38, 38, 11, 11, 38, 38, 38, 12,
   12, 38, 38, 38, 13, 13, 38, 38, 38, 14,
   14, 38, 38, 38, 15, 15, 38, 38, 38, 16,
   16, 38, 38, 38, 17, 17, 38, 38, 38, 18,
   18, 38, 38, 38, 19, 19, 38, 38, 38, 20,
   20, 38, 38, 38, 21, 21, 38, 38, 38, 22,
   22, 38, 38, 38, 23, 23, 38, 38, 38, 24,
   24, 38, 38, 38, 25, 25, 38, 38, 38, 26,
   26, 38, 38, 38, 27, 27, 38, 38, 38, 28,
   28, 38, 38, 38, 29, 29, 38, 38, 38, 30,
   30, 38, 38, 38, 31, 31, 38, 38, 38, 32,
   32, 38, 38, 38, 33, 33, 38, 38, 38, 34,
   34, 38, 38, 38, 35, 35, 38, 38, 38, 36,
   36, 38, 38, 38, 37, 37, 38, 38, 38, 0
};
static const unsigned char ppro_idiv_min_issue_delay[] = {
    0, 0, 0, 0, 0, 0, 37, 37, 37, 0,
    0, 36, 36, 36, 0, 0, 35, 35, 35, 0,
    0, 34, 34, 34, 0, 0, 33, 33, 33, 0,
    0, 32, 32, 32, 0, 0, 31, 31, 31, 0,
    0, 30, 30, 30, 0, 0, 29, 29, 29, 0,
    0, 28, 28, 28, 0, 0, 27, 27, 27, 0,
    0, 26, 26, 26, 0, 0, 25, 25, 25, 0,
    0, 24, 24, 24, 0, 0, 23, 23, 23, 0,
    0, 22, 22, 22, 0, 0, 21, 21, 21, 0,
    0, 20, 20, 20, 0, 0, 19, 19, 19, 0,
    0, 18, 18, 18, 0, 0, 17, 17, 17, 0,
    0, 16, 16, 16, 0, 0, 15, 15, 15, 0,
    0, 14, 14, 14, 0, 0, 13, 13, 13, 0,
    0, 12, 12, 12, 0, 0, 11, 11, 11, 0,
    0, 10, 10, 10, 0, 0, 9, 9, 9, 0,
    0, 8, 8, 8, 0, 0, 7, 7, 7, 0,
    0, 6, 6, 6, 0, 0, 5, 5, 5, 0,
    0, 4, 4, 4, 0, 0, 3, 3, 3, 0,
    0, 2, 2, 2, 0, 0, 1, 1, 1, 0
};
static const unsigned char ppro_idiv_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0};
static const unsigned char ppro_fdiv_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 1, 1, 2, 2, 3,
    3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 4};
static const unsigned char ppro_fdiv_transitions[] = {
    0, 21, 7, 1, 0, 1, 38, 38, 38, 2,
    2, 38, 38, 38, 3, 3, 38, 38, 38, 4,
    4, 38, 38, 38, 5, 5, 38, 38, 38, 6,
    6, 38, 38, 38, 7, 7, 38, 38, 38, 8,
    8, 38, 38, 38, 9, 9, 38, 38, 38, 10,
   10, 38, 38, 38, 11, 11, 38, 38, 38, 12,
   12, 38, 38, 38, 13, 13, 38, 38, 38, 14,
   14, 38, 38, 38, 15, 15, 38, 38, 38, 16,
   16, 38, 38, 38, 17, 17, 38, 38, 38, 18,
   18, 38, 38, 38, 19, 19, 38, 38, 38, 20,
   20, 38, 38, 38, 21, 21, 38, 38, 38, 22,
   22, 38, 38, 38, 23, 23, 38, 38, 38, 24,
   24, 38, 38, 38, 25, 25, 38, 38, 38, 26,
   26, 38, 38, 38, 27, 27, 38, 38, 38, 28,
   28, 38, 38, 38, 29, 29, 38, 38, 38, 30,
   30, 38, 38, 38, 31, 31, 38, 38, 38, 32,
   32, 38, 38, 38, 33, 33, 38, 38, 38, 34,
   34, 38, 38, 38, 35, 35, 38, 38, 38, 36,
   36, 38, 38, 38, 37, 37, 38, 38, 38, 0
};
static const unsigned char ppro_fdiv_min_issue_delay[] = {
    0, 0, 0, 0, 0, 0, 37, 37, 37, 0,
    0, 36, 36, 36, 0, 0, 35, 35, 35, 0,
    0, 34, 34, 34, 0, 0, 33, 33, 33, 0,
    0, 32, 32, 32, 0, 0, 31, 31, 31, 0,
    0, 30, 30, 30, 0, 0, 29, 29, 29, 0,
    0, 28, 28, 28, 0, 0, 27, 27, 27, 0,
    0, 26, 26, 26, 0, 0, 25, 25, 25, 0,
    0, 24, 24, 24, 0, 0, 23, 23, 23, 0,
    0, 22, 22, 22, 0, 0, 21, 21, 21, 0,
    0, 20, 20, 20, 0, 0, 19, 19, 19, 0,
    0, 18, 18, 18, 0, 0, 17, 17, 17, 0,
    0, 16, 16, 16, 0, 0, 15, 15, 15, 0,
    0, 14, 14, 14, 0, 0, 13, 13, 13, 0,
    0, 12, 12, 12, 0, 0, 11, 11, 11, 0,
    0, 10, 10, 10, 0, 0, 9, 9, 9, 0,
    0, 8, 8, 8, 0, 0, 7, 7, 7, 0,
    0, 6, 6, 6, 0, 0, 5, 5, 5, 0,
    0, 4, 4, 4, 0, 0, 3, 3, 3, 0,
    0, 2, 2, 2, 0, 0, 1, 1, 1, 0
};
static const unsigned char ppro_fdiv_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0};
static const unsigned char ppro_load_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1, 0, 0, 1, 0, 0, 1, 0, 0, 1,
    1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
    1, 0, 1, 0, 0, 0, 0, 1, 0, 1,
    2, 0, 0, 0, 1, 0, 1, 0, 1, 0,
    1, 0, 1, 0, 1, 0, 0, 0, 0, 1,
    0, 1, 0, 1, 0, 1, 0, 1, 2, 1,
    0, 1, 0, 0, 0, 2, 0, 2, 0, 0,
    0, 2, 0, 2, 0, 1, 0, 2, 0, 0,
    1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 3};
static const unsigned char ppro_load_transitions[] = {
    0, 2, 1, 0, 1, 3, 3, 2, 2, 3,
    3, 0};
static const unsigned char ppro_load_min_issue_delay[] = {
    0, 40, 20};
static const unsigned char ppro_load_dead_lock[] = {
    0, 0, 0};
static const unsigned char ppro_store_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 1, 0, 0, 0, 0, 2, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 3, 2, 0, 3, 0, 0, 0, 0, 0,
    0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 1, 0, 0, 0, 0, 0, 0, 2,
    0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
    0, 2, 2, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 6};
static const unsigned char ppro_store_transitions[] = {
    0, 3, 5, 10, 7, 1, 0, 1, 11, 11,
    2, 11, 11, 3, 2, 11, 11, 11, 11, 11,
    1, 3, 11, 1, 4, 11, 11, 0, 4, 11,
    2, 11, 11, 11, 5, 5, 1, 11, 6, 11,
   11, 3, 6, 2, 11, 11, 11, 11, 1, 7,
   11, 11, 2, 11, 11, 8, 8, 11, 1, 9,
    7, 11, 0, 9, 11, 2, 11, 2, 11, 5,
   10, 4, 6, 11, 2, 2, 5};
static const unsigned char ppro_store_min_issue_delay[] = {
    0, 0, 146, 131, 159, 4, 20, 17, 240, 18,
  128, 159, 9, 24, 16, 16, 68, 192, 16, 0
};
static const unsigned char ppro_store_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0};
static const unsigned char k6_decoder_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
    2, 1, 1, 2, 1, 1, 1, 1, 2, 2,
    1, 1, 2, 2, 1, 1, 0, 2, 1, 1,
    1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 3};
static const unsigned char k6_decoder_transitions[] = {
    0, 2, 1, 0, 1, 3, 3, 0, 2, 1,
    3, 0};
static const unsigned char k6_decoder_min_issue_delay[] = {
    6, 32};
static const unsigned char k6_decoder_dead_lock[] = {
    0, 0, 0};
static const unsigned char k6_load_unit_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 1, 1, 0, 1, 1, 0,
    1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
    0, 1, 1, 2, 0, 0, 0, 0, 1, 0,
    0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 3};
static const unsigned char k6_load_unit_transitions[] = {
    0, 10, 1, 0, 1, 11, 11, 2, 2, 11,
   11, 3, 3, 11, 11, 4, 4, 11, 11, 5,
    5, 11, 11, 6, 6, 11, 11, 7, 7, 11,
   11, 8, 8, 11, 11, 9, 9, 11, 11, 10,
   10, 11, 11, 0};
static const unsigned char k6_load_unit_min_issue_delay[] = {
    0, 0, 10, 160, 9, 144, 8, 128, 7, 112,
    6, 96, 5, 80, 4, 64, 3, 48, 2, 32,
    1, 16};
static const unsigned char k6_load_unit_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0};
static const unsigned char k6_store_unit_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 1, 0, 0, 2, 0,
    0, 0, 0, 1, 0, 0, 0, 3, 0, 0,
    0, 0, 0, 0, 3, 3, 4, 0, 0, 3,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 5};
static const unsigned char k6_store_unit_transitions[] = {
    0, 23, 36, 31, 1, 0, 1, 37, 37, 37,
   37, 2, 2, 37, 37, 37, 37, 3, 3, 37,
   37, 37, 37, 4, 4, 37, 37, 37, 37, 5,
    5, 37, 37, 37, 37, 6, 6, 37, 5, 37,
   37, 7, 7, 37, 8, 37, 37, 17, 8, 37,
   37, 37, 37, 9, 9, 6, 10, 37, 37, 28,
   10, 5, 37, 37, 37, 11, 11, 37, 12, 37,
   37, 15, 12, 37, 37, 37, 37, 13, 13, 37,
   14, 6, 37, 7, 14, 37, 37, 5, 37, 6,
   15, 37, 16, 7, 37, 17, 16, 37, 37, 8,
   37, 9, 17, 7, 18, 37, 37, 31, 18, 8,
   37, 37, 37, 19, 19, 11, 20, 37, 37, 23,
   20, 12, 37, 37, 37, 21, 21, 37, 22, 11,
   37, 15, 22, 37, 37, 12, 37, 13, 23, 37,
   24, 28, 37, 29, 24, 37, 37, 25, 37, 26,
   25, 37, 37, 37, 37, 26, 26, 13, 27, 9,
   37, 28, 27, 14, 37, 10, 37, 11, 28, 37,
   25, 37, 37, 29, 29, 15, 30, 17, 37, 31,
   30, 16, 37, 18, 37, 19, 31, 28, 32, 37,
   37, 35, 32, 25, 37, 37, 37, 33, 33, 21,
   34, 19, 37, 23, 34, 22, 37, 20, 37, 21,
   35, 23, 36, 31, 37, 0, 36, 24, 37, 32,
   37, 33};
static const unsigned char k6_store_unit_min_issue_delay[] = {
    0, 0, 0, 0, 0, 0, 0, 7, 5, 9,
   18, 0, 0, 6, 4, 8, 17, 0, 0, 5,
    3, 7, 16, 0, 0, 4, 2, 6, 15, 0,
    0, 3, 1, 5, 14, 0, 0, 2, 0, 4,
   13, 0, 0, 1, 0, 3, 12, 0, 0, 1,
    1, 3, 12, 0, 0, 0, 0, 2, 11, 0,
    0, 0, 1, 2, 11, 0, 0, 2, 0, 1,
   10, 0, 0, 3, 1, 1, 14, 0, 0, 2,
    0, 0, 13, 0, 0, 3, 1, 0, 14, 0,
    0, 1, 0, 0, 9, 0, 0, 1, 1, 0,
   12, 0, 0, 0, 0, 2, 8, 0, 0, 0,
    1, 2, 8, 0, 0, 0, 0, 1, 7, 0,
    0, 0, 1, 1, 11, 0, 0, 2, 0, 0,
   10, 0, 0, 3, 1, 0, 14, 0, 0, 1,
    0, 0, 6, 0, 0, 1, 1, 0, 6, 0,
    0, 1, 1, 1, 6, 0, 0, 0, 0, 0,
    5, 0, 0, 0, 1, 0, 11, 0, 0, 1,
    0, 1, 4, 0, 0, 0, 0, 0, 3, 0,
    0, 0, 1, 0, 8, 0, 0, 0, 0, 1,
    2, 0, 0, 0, 1, 1, 6, 0, 0, 0,
    0, 0, 7, 0, 0, 0, 1, 0, 11, 0,
    0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
    6, 0};
static const unsigned char k6_store_unit_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0};
static const unsigned char k6_integer_units_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 1, 2, 2, 3, 4, 4, 5,
    6, 7, 8, 8, 7, 0, 0, 0, 8, 0,
    0, 0, 9, 0, 8, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 10};
static const unsigned char k6_integer_units_transitions[] = {
    0, 3, 106, 4, 111, 13, 108, 3, 106, 1,
    0, 3, 114, 2, 114, 26, 114, 100, 7, 2,
    4, 0, 7, 114, 11, 6, 31, 114, 12, 5,
   11, 8, 0, 1, 4, 7, 9, 106, 2, 6,
    4, 105, 104, 2, 2, 107, 105, 3, 108, 100,
  114, 114, 111, 26, 9, 100, 110, 109, 13, 26,
  113, 112, 4, 2, 6, 114, 114, 4, 114, 10,
   11, 103, 99, 3, 8, 99, 5, 2, 13, 11,
  114, 114, 14, 114, 28, 96, 94, 92, 14, 91,
   89, 87, 15, 15, 10, 114, 114, 16, 114, 30,
   86, 84, 82, 16, 81, 79, 77, 17, 17, 8,
  114, 114, 18, 114, 33, 76, 74, 72, 18, 71,
   69, 67, 19, 19, 30, 114, 114, 20, 114, 35,
   66, 64, 62, 20, 61, 59, 57, 21, 21, 31,
  114, 114, 22, 114, 38, 56, 54, 52, 22, 51,
   49, 47, 23, 23, 35, 114, 114, 24, 114, 40,
   46, 44, 42, 24, 41, 39, 37, 25, 25, 36,
  114, 114, 26, 114, 43, 36, 34, 32, 26, 31,
   29, 27, 4, 100, 40, 114, 8, 114, 114, 11,
   12, 102, 101, 13, 10, 9, 2, 6, 10, 3,
   12, 114, 114, 31, 114, 114, 36, 114, 98, 97,
   13, 30, 28, 4, 35, 33, 26, 41, 114, 114,
   46, 114, 114, 51, 114, 40, 38, 25, 45, 43,
   24, 50, 48, 23, 56, 114, 114, 61, 114, 114,
   66, 114, 55, 53, 22, 60, 58, 21, 65, 63,
   20, 71, 114, 114, 76, 114, 114, 81, 114, 70,
   68, 19, 75, 73, 18, 80, 78, 17, 86, 114,
  114, 91, 114, 114, 96, 114, 85, 83, 16, 90,
   88, 15, 95, 93, 14, 104, 5, 105, 99, 107,
  103, 114, 5, 114, 99, 6, 103, 11, 45, 7,
  109, 101, 110, 102, 112, 27, 114, 101, 41, 102,
   95, 27, 96, 27, 10, 113, 29, 29, 114, 32,
   28, 34, 29, 10, 30, 8, 33, 8, 35, 30,
   37, 31, 39, 114, 42, 114, 44, 38, 47, 40,
   35, 43, 36, 45, 40, 48, 41, 49, 45, 52,
  114, 54, 114, 57, 50, 59, 53, 46, 55, 50,
   58, 51, 60, 55, 62, 56, 64, 114, 67, 114,
   69, 63, 72, 65, 60, 68, 61, 70, 65, 73,
   66, 74, 70, 77, 114, 79, 114, 82, 75, 84,
   78, 71, 80, 75, 83, 76, 85, 80, 87, 81,
   89, 114, 92, 114, 94, 88, 99, 90, 85, 93,
   86, 95, 90, 10, 91, 101, 11, 102, 48, 103,
   50, 53, 97, 55, 98, 95, 6, 96, 45, 7,
   46, 50, 58, 51, 60, 63, 65, 68, 70, 73,
   75, 78, 55, 80, 56, 60, 61, 65, 66, 70,
   71, 75, 83, 76, 85, 88, 90, 93, 95, 97,
   98, 114, 80, 114, 81, 85, 86, 90, 91, 95,
   96};
static const unsigned char k6_integer_units_check[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 3, 114, 3, 114, 3, 114, 3, 3, 3,
    3, 3, 7, 114, 7, 6, 7, 114, 7, 5,
    7, 7, 7, 1, 1, 6, 5, 106, 106, 5,
    1, 1, 1, 1, 106, 106, 106, 106, 108, 108,
  114, 114, 111, 111, 9, 108, 108, 108, 108, 111,
  111, 111, 111, 2, 9, 114, 114, 4, 114, 10,
    2, 2, 2, 2, 4, 4, 4, 4, 13, 10,
  114, 114, 14, 114, 28, 13, 13, 13, 13, 14,
   14, 14, 14, 15, 28, 114, 114, 16, 114, 30,
   15, 15, 15, 15, 16, 16, 16, 16, 17, 30,
  114, 114, 18, 114, 33, 17, 17, 17, 17, 18,
   18, 18, 18, 19, 33, 114, 114, 20, 114, 35,
   19, 19, 19, 19, 20, 20, 20, 20, 21, 35,
  114, 114, 22, 114, 38, 21, 21, 21, 21, 22,
   22, 22, 22, 23, 38, 114, 114, 24, 114, 40,
   23, 23, 23, 23, 24, 24, 24, 24, 25, 40,
  114, 114, 26, 114, 43, 25, 25, 25, 25, 26,
   26, 26, 26, 100, 43, 114, 8, 114, 114, 11,
  100, 100, 100, 100, 8, 8, 8, 11, 11, 11,
   12, 114, 114, 31, 114, 114, 36, 114, 12, 12,
   12, 31, 31, 31, 36, 36, 36, 41, 114, 114,
   46, 114, 114, 51, 114, 41, 41, 41, 46, 46,
   46, 51, 51, 51, 56, 114, 114, 61, 114, 114,
   66, 114, 56, 56, 56, 61, 61, 61, 66, 66,
   66, 71, 114, 114, 76, 114, 114, 81, 114, 71,
   71, 71, 76, 76, 76, 81, 81, 81, 86, 114,
  114, 91, 114, 114, 96, 114, 86, 86, 86, 91,
   91, 91, 96, 96, 96, 104, 104, 105, 105, 107,
  107, 114, 104, 114, 105, 104, 107, 105, 45, 107,
  109, 109, 110, 110, 112, 112, 114, 109, 45, 110,
  109, 112, 110, 27, 112, 113, 113, 29, 114, 32,
   27, 34, 113, 27, 29, 113, 32, 29, 34, 32,
   37, 34, 39, 114, 42, 114, 44, 37, 47, 39,
   37, 42, 39, 44, 42, 47, 44, 49, 47, 52,
  114, 54, 114, 57, 49, 59, 52, 49, 54, 52,
   57, 54, 59, 57, 62, 59, 64, 114, 67, 114,
   69, 62, 72, 64, 62, 67, 64, 69, 67, 72,
   69, 74, 72, 77, 114, 79, 114, 82, 74, 84,
   77, 74, 79, 77, 82, 79, 84, 82, 87, 84,
   89, 114, 92, 114, 94, 87, 99, 89, 87, 92,
   89, 94, 92, 99, 94, 101, 99, 102, 48, 103,
   50, 53, 101, 55, 102, 101, 103, 102, 48, 103,
   50, 53, 58, 55, 60, 63, 65, 68, 70, 73,
   75, 78, 58, 80, 60, 63, 65, 68, 70, 73,
   75, 78, 83, 80, 85, 88, 90, 93, 95, 97,
   98, 114, 83, 114, 85, 88, 90, 93, 95, 97,
   98};
static const unsigned short k6_integer_units_base[] = {
    0, 33, 63, 11, 67, 29, 25, 22, 186, 54,
   69, 189, 200, 78, 82, 93, 97, 108, 112, 123,
  127, 138, 142, 153, 157, 168, 172, 313, 84, 317,
   99, 203, 319, 114, 321, 129, 206, 330, 144, 332,
  159, 217, 334, 174, 336, 298, 220, 338, 418, 347,
  420, 223, 349, 421, 351, 423, 234, 353, 432, 355,
  434, 237, 364, 435, 366, 436, 240, 368, 437, 370,
  438, 251, 372, 439, 381, 440, 254, 383, 441, 385,
  443, 257, 387, 452, 389, 454, 268, 398, 455, 400,
  456, 271, 402, 457, 404, 458, 274, 459, 460, 406,
  183, 415, 417, 419, 285, 287, 37, 289, 48, 300,
  302, 52, 304, 315};
static const unsigned char k6_integer_units_min_issue_delay[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 2, 3, 2, 3, 2, 0, 0,
    0, 0, 0, 2, 1, 2, 1, 2, 1, 0,
    0, 0, 0, 0, 1, 0, 1, 0, 1, 0,
    0, 0, 0, 0, 0, 3, 2, 3, 2, 3,
    2, 0, 0, 0, 0, 0, 3, 2, 3, 2,
    3, 2, 0, 2, 2, 0, 0, 2, 1, 2,
    1, 2, 1, 2, 1, 1, 0, 0, 1, 0,
    1, 0, 1, 0, 1, 0, 0, 0, 0, 3,
    2, 3, 2, 3, 2, 1, 0, 0, 0, 0,
    3, 2, 3, 2, 3, 2, 3, 2, 2, 0,
    0, 3, 2, 3, 2, 3, 2, 2, 1, 1,
    0, 0, 2, 1, 2, 1, 2, 1, 1, 0,
    0, 0, 0, 18, 17, 18, 17, 18, 17, 1,
    0, 0, 0, 0, 17, 16, 17, 16, 17, 16,
    0, 0, 0, 0, 0, 16, 15, 16, 15, 16,
   15, 0, 0, 0, 0, 0, 15, 14, 15, 14,
   15, 14, 0, 0, 0, 0, 0, 14, 13, 14,
   13, 14, 13, 0, 0, 0, 0, 0, 13, 12,
   13, 12, 13, 12, 0, 0, 0, 0, 0, 12,
   11, 12, 11, 12, 11, 0, 0, 0, 0, 0,
   11, 10, 11, 10, 11, 10, 0, 0, 0, 0,
    0, 10, 9, 10, 9, 10, 9, 0, 0, 0,
    0, 0, 9, 8, 9, 8, 9, 8, 0, 0,
    0, 0, 0, 8, 7, 8, 7, 8, 7, 0,
    0, 0, 0, 0, 7, 6, 7, 6, 7, 6,
    0, 0, 0, 0, 0, 6, 5, 6, 5, 6,
    5, 0, 0, 0, 0, 0, 5, 4, 5, 4,
    5, 4, 0, 0, 0, 0, 0, 4, 3, 4,
    3, 4, 3, 0, 0, 0, 0, 0, 4, 3,
    4, 3, 4, 3, 0, 2, 2, 0, 0, 4,
    3, 4, 3, 4, 3, 3, 2, 2, 0, 0,
    4, 3, 4, 3, 4, 3, 0, 1, 1, 0,
    0, 4, 3, 4, 3, 4, 3, 2, 1, 1,
    0, 0, 4, 3, 4, 3, 4, 3, 1, 0,
    0, 0, 0, 5, 4, 5, 4, 5, 4, 0,
    2, 2, 0, 0, 5, 4, 5, 4, 5, 4,
    3, 2, 2, 0, 0, 5, 4, 5, 4, 5,
    4, 0, 1, 1, 0, 0, 5, 4, 5, 4,
    5, 4, 2, 1, 1, 0, 0, 5, 4, 5,
    4, 5, 4, 1, 0, 0, 0, 0, 6, 5,
    6, 5, 6, 5, 0, 2, 2, 0, 0, 6,
    5, 6, 5, 6, 5, 3, 2, 2, 0, 0,
    6, 5, 6, 5, 6, 5, 0, 1, 1, 0,
    0, 6, 5, 6, 5, 6, 5, 2, 1, 1,
    0, 0, 6, 5, 6, 5, 6, 5, 1, 0,
    0, 0, 0, 7, 6, 7, 6, 7, 6, 0,
    2, 2, 0, 0, 7, 6, 7, 6, 7, 6,
    3, 2, 2, 0, 0, 7, 6, 7, 6, 7,
    6, 0, 1, 1, 0, 0, 7, 6, 7, 6,
    7, 6, 2, 1, 1, 0, 0, 7, 6, 7,
    6, 7, 6, 1, 0, 0, 0, 0, 8, 7,
    8, 7, 8, 7, 0, 2, 2, 0, 0, 8,
    7, 8, 7, 8, 7, 3, 2, 2, 0, 0,
    8, 7, 8, 7, 8, 7, 0, 1, 1, 0,
    0, 8, 7, 8, 7, 8, 7, 2, 1, 1,
    0, 0, 8, 7, 8, 7, 8, 7, 1, 0,
    0, 0, 0, 9, 8, 9, 8, 9, 8, 0,
    2, 2, 0, 0, 9, 8, 9, 8, 9, 8,
    3, 2, 2, 0, 0, 9, 8, 9, 8, 9,
    8, 0, 1, 1, 0, 0, 9, 8, 9, 8,
    9, 8, 2, 1, 1, 0, 0, 9, 8, 9,
    8, 9, 8, 1, 0, 0, 0, 0, 10, 9,
   10, 9, 10, 9, 0, 2, 2, 0, 0, 10,
    9, 10, 9, 10, 9, 3, 2, 2, 0, 0,
   10, 9, 10, 9, 10, 9, 0, 1, 1, 0,
    0, 10, 9, 10, 9, 10, 9, 2, 1, 1,
    0, 0, 10, 9, 10, 9, 10, 9, 1, 0,
    0, 0, 0, 11, 10, 11, 10, 11, 10, 0,
    2, 2, 0, 0, 11, 10, 11, 10, 11, 10,
    3, 2, 2, 0, 0, 11, 10, 11, 10, 11,
   10, 0, 1, 1, 0, 0, 11, 10, 11, 10,
   11, 10, 2, 1, 1, 0, 0, 11, 10, 11,
   10, 11, 10, 1, 0, 0, 0, 0, 12, 11,
   12, 11, 12, 11, 0, 2, 2, 0, 0, 12,
   11, 12, 11, 12, 11, 3, 2, 2, 0, 0,
   12, 11, 12, 11, 12, 11, 0, 1, 1, 0,
    0, 12, 11, 12, 11, 12, 11, 2, 1, 1,
    0, 0, 12, 11, 12, 11, 12, 11, 1, 0,
    0, 0, 0, 13, 12, 13, 12, 13, 12, 0,
    2, 2, 0, 0, 13, 12, 13, 12, 13, 12,
    3, 2, 2, 0, 0, 13, 12, 13, 12, 13,
   12, 0, 1, 1, 0, 0, 13, 12, 13, 12,
   13, 12, 2, 1, 1, 0, 0, 13, 12, 13,
   12, 13, 12, 1, 0, 0, 0, 0, 14, 13,
   14, 13, 14, 13, 0, 2, 2, 0, 0, 14,
   13, 14, 13, 14, 13, 3, 2, 2, 0, 0,
   14, 13, 14, 13, 14, 13, 0, 1, 1, 0,
    0, 14, 13, 14, 13, 14, 13, 2, 1, 1,
    0, 0, 14, 13, 14, 13, 14, 13, 1, 0,
    0, 0, 0, 15, 14, 15, 14, 15, 14, 0,
    2, 2, 0, 0, 15, 14, 15, 14, 15, 14,
    3, 2, 2, 0, 0, 15, 14, 15, 14, 15,
   14, 0, 1, 1, 0, 0, 15, 14, 15, 14,
   15, 14, 2, 1, 1, 0, 0, 15, 14, 15,
   14, 15, 14, 1, 0, 0, 0, 0, 16, 15,
   16, 15, 16, 15, 0, 2, 2, 0, 0, 16,
   15, 16, 15, 16, 15, 3, 2, 2, 0, 0,
   16, 15, 16, 15, 16, 15, 0, 1, 1, 0,
    0, 16, 15, 16, 15, 16, 15, 2, 1, 1,
    0, 0, 16, 15, 16, 15, 16, 15, 1, 0,
    0, 0, 0, 17, 16, 17, 16, 17, 16, 0,
    2, 2, 0, 0, 17, 16, 17, 16, 17, 16,
    3, 2, 2, 0, 0, 17, 16, 17, 16, 17,
   16, 0, 1, 1, 0, 0, 17, 16, 17, 16,
   17, 16, 2, 1, 1, 0, 0, 17, 16, 17,
   16, 17, 16, 1, 0, 0, 0, 0, 18, 17,
   18, 17, 18, 17, 3, 2, 2, 0, 0, 18,
   17, 18, 17, 18, 17, 2, 1, 1, 0, 0,
    3, 2, 3, 2, 3, 2, 0, 1, 1, 0,
    0, 18, 17, 18, 17, 18, 17, 0, 0, 0,
    0, 0, 18, 17, 18, 17, 18, 17, 0, 2,
    2, 0, 0, 18, 17, 18, 17, 18, 17, 0,
    1, 1, 0, 0, 2, 1, 2, 1, 2, 1,
    0, 1, 1, 0, 0, 0, 2, 3, 2, 3,
    2, 0, 2, 2, 0, 0, 0, 2, 3, 2,
    3, 2, 0, 1, 1, 0, 0, 0, 1, 2,
    1, 2, 1, 0, 0, 0, 0, 0, 0, 1,
    2, 1, 2, 1, 0, 1, 1, 0, 0, 0,
   17, 18, 17, 18, 17, 0, 0, 0, 0, 0,
    0, 17, 18, 17, 18, 17, 0, 2, 2, 0,
    0, 0, 17, 18, 17, 18, 17, 0, 1, 1,
    0, 0, 0, 3, 4, 3, 4, 3, 0, 0,
    0, 0, 0, 0, 3, 4, 3, 4, 3, 0,
    2, 2, 0, 0, 0, 3, 4, 3, 4, 3,
    0, 1, 1, 0};
static const unsigned char k6_integer_units_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0};
static const unsigned char k6_fpu_unit_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 1, 2, 2,
    1, 2, 3, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 4};
static const unsigned char k6_fpu_unit_transitions[] = {
    0, 55, 54, 1, 0, 1, 57, 57, 57, 2,
    2, 57, 57, 57, 3, 3, 57, 57, 57, 4,
    4, 57, 57, 57, 5, 5, 57, 57, 57, 6,
    6, 57, 57, 57, 7, 7, 57, 57, 57, 8,
    8, 57, 57, 57, 9, 9, 57, 57, 57, 10,
   10, 57, 57, 57, 11, 11, 57, 57, 57, 12,
   12, 57, 57, 57, 13, 13, 57, 57, 57, 14,
   14, 57, 57, 57, 15, 15, 57, 57, 57, 16,
   16, 57, 57, 57, 17, 17, 57, 57, 57, 18,
   18, 57, 57, 57, 19, 19, 57, 57, 57, 20,
   20, 57, 57, 57, 21, 21, 57, 57, 57, 22,
   22, 57, 57, 57, 23, 23, 57, 57, 57, 24,
   24, 57, 57, 57, 25, 25, 57, 57, 57, 26,
   26, 57, 57, 57, 27, 27, 57, 57, 57, 28,
   28, 57, 57, 57, 29, 29, 57, 57, 57, 30,
   30, 57, 57, 57, 31, 31, 57, 57, 57, 32,
   32, 57, 57, 57, 33, 33, 57, 57, 57, 34,
   34, 57, 57, 57, 35, 35, 57, 57, 57, 36,
   36, 57, 57, 57, 37, 37, 57, 57, 57, 38,
   38, 57, 57, 57, 39, 39, 57, 57, 57, 40,
   40, 57, 57, 57, 41, 41, 57, 57, 57, 42,
   42, 57, 57, 57, 43, 43, 57, 57, 57, 44,
   44, 57, 57, 57, 45, 45, 57, 57, 57, 46,
   46, 57, 57, 57, 47, 47, 57, 57, 57, 48,
   48, 57, 57, 57, 49, 49, 57, 57, 57, 50,
   50, 57, 57, 57, 51, 51, 57, 57, 57, 52,
   52, 57, 57, 57, 53, 53, 57, 57, 57, 54,
   54, 57, 57, 57, 55, 55, 57, 57, 57, 56,
   56, 57, 54, 57, 0};
static const unsigned char k6_fpu_unit_min_issue_delay[] = {
    0, 0, 0, 0, 0, 0, 56, 55, 56, 0,
    0, 55, 54, 55, 0, 0, 54, 53, 54, 0,
    0, 53, 52, 53, 0, 0, 52, 51, 52, 0,
    0, 51, 50, 51, 0, 0, 50, 49, 50, 0,
    0, 49, 48, 49, 0, 0, 48, 47, 48, 0,
    0, 47, 46, 47, 0, 0, 46, 45, 46, 0,
    0, 45, 44, 45, 0, 0, 44, 43, 44, 0,
    0, 43, 42, 43, 0, 0, 42, 41, 42, 0,
    0, 41, 40, 41, 0, 0, 40, 39, 40, 0,
    0, 39, 38, 39, 0, 0, 38, 37, 38, 0,
    0, 37, 36, 37, 0, 0, 36, 35, 36, 0,
    0, 35, 34, 35, 0, 0, 34, 33, 34, 0,
    0, 33, 32, 33, 0, 0, 32, 31, 32, 0,
    0, 31, 30, 31, 0, 0, 30, 29, 30, 0,
    0, 29, 28, 29, 0, 0, 28, 27, 28, 0,
    0, 27, 26, 27, 0, 0, 26, 25, 26, 0,
    0, 25, 24, 25, 0, 0, 24, 23, 24, 0,
    0, 23, 22, 23, 0, 0, 22, 21, 22, 0,
    0, 21, 20, 21, 0, 0, 20, 19, 20, 0,
    0, 19, 18, 19, 0, 0, 18, 17, 18, 0,
    0, 17, 16, 17, 0, 0, 16, 15, 16, 0,
    0, 15, 14, 15, 0, 0, 14, 13, 14, 0,
    0, 13, 12, 13, 0, 0, 12, 11, 12, 0,
    0, 11, 10, 11, 0, 0, 10, 9, 10, 0,
    0, 9, 8, 9, 0, 0, 8, 7, 8, 0,
    0, 7, 6, 7, 0, 0, 6, 5, 6, 0,
    0, 5, 4, 5, 0, 0, 4, 3, 4, 0,
    0, 3, 2, 3, 0, 0, 2, 1, 2, 0,
    0, 1, 0, 1, 0};
static const unsigned char k6_fpu_unit_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0};
static const unsigned char k6_branch_unit_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 2};
static const unsigned char k6_branch_unit_transitions[] = {
    0, 1, 0, 1, 2, 0};
static const unsigned char k6_branch_unit_min_issue_delay[] = {
    8};
static const unsigned char k6_branch_unit_dead_lock[] = {
    0, 0};
static const unsigned char athlon_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 1, 2, 1, 2, 3, 2, 3,
    1, 4, 5, 6, 2, 2, 2, 7, 8, 8,
    1, 2, 1, 1, 2, 1, 1, 2, 1, 2,
    2, 2, 1, 1, 2, 2, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    1, 1, 1, 1, 1, 3, 2, 2, 3, 1,
    1, 2, 3, 1, 3, 2, 1, 1, 1, 1,
    1, 2, 3, 2, 3, 1, 1, 1, 2, 3,
    2, 3, 2, 2, 2, 1, 1, 1, 2, 3,
    2, 3, 1, 1, 3, 3, 1, 2, 3, 3,
    2, 3, 2, 3, 2, 2, 2, 3, 1, 1,
    1, 2, 3, 2, 3, 1, 1, 1, 2, 3,
    2, 3, 9};
static const unsigned char athlon_transitions[] = {
    0, 1, 3, 2, 5, 70, 8, 28, 16, 0,
    1, 2, 76, 3, 76, 76, 76, 76, 76, 4,
    2, 3, 76, 76, 76, 76, 76, 76, 76, 4,
    3, 76, 76, 76, 76, 76, 76, 76, 76, 0,
    4, 1, 3, 1, 5, 70, 8, 28, 16, 0,
    5, 76, 76, 76, 76, 76, 76, 76, 76, 6,
    6, 70, 52, 51, 72, 76, 69, 76, 76, 7,
    7, 8, 10, 9, 54, 69, 76, 76, 16, 11,
    8, 9, 76, 10, 76, 76, 76, 76, 76, 71,
    9, 10, 76, 76, 76, 76, 76, 76, 76, 71,
   10, 76, 76, 76, 76, 76, 76, 76, 76, 11,
   11, 12, 14, 13, 49, 65, 38, 76, 16, 15,
   12, 13, 76, 14, 76, 76, 76, 76, 76, 48,
   13, 14, 76, 76, 76, 76, 76, 76, 76, 48,
   14, 76, 76, 76, 76, 76, 76, 76, 76, 15,
   15, 1, 3, 2, 76, 76, 76, 76, 16, 0,
   16, 76, 76, 76, 76, 76, 76, 76, 76, 17,
   17, 18, 20, 19, 76, 76, 76, 76, 76, 21,
   18, 19, 76, 20, 76, 76, 76, 76, 76, 47,
   19, 20, 76, 76, 76, 76, 76, 76, 76, 47,
   20, 76, 76, 76, 76, 76, 76, 76, 76, 21,
   21, 22, 24, 23, 76, 76, 76, 76, 76, 25,
   22, 23, 76, 24, 76, 76, 76, 76, 76, 46,
   23, 24, 76, 76, 76, 76, 76, 76, 76, 46,
   24, 76, 76, 76, 76, 76, 76, 76, 76, 25,
   25, 26, 28, 27, 76, 76, 76, 76, 76, 29,
   26, 27, 76, 28, 76, 76, 76, 76, 76, 45,
   27, 28, 76, 76, 76, 76, 76, 76, 76, 45,
   28, 76, 76, 76, 76, 76, 76, 76, 76, 29,
   29, 30, 32, 31, 76, 76, 76, 76, 76, 33,
   30, 31, 76, 32, 76, 76, 76, 76, 76, 44,
   31, 32, 76, 76, 76, 76, 76, 76, 76, 44,
   32, 76, 76, 76, 76, 76, 76, 76, 76, 33,
   33, 34, 36, 35, 76, 76, 76, 76, 76, 37,
   34, 35, 76, 36, 76, 76, 76, 76, 76, 43,
   35, 36, 76, 76, 76, 76, 76, 76, 76, 43,
   36, 76, 76, 76, 76, 76, 76, 76, 76, 37,
   37, 38, 40, 39, 76, 76, 76, 76, 16, 41,
   38, 39, 76, 40, 76, 76, 76, 76, 76, 42,
   39, 40, 76, 76, 76, 76, 76, 76, 76, 42,
   40, 76, 76, 76, 76, 76, 76, 76, 76, 41,
   41, 12, 14, 13, 76, 76, 76, 76, 16, 15,
   42, 12, 14, 12, 76, 76, 76, 76, 16, 15,
   43, 38, 40, 38, 76, 76, 76, 76, 16, 41,
   44, 34, 36, 34, 76, 76, 76, 76, 76, 37,
   45, 30, 32, 30, 76, 76, 76, 76, 76, 33,
   46, 26, 28, 26, 76, 76, 76, 76, 76, 29,
   47, 22, 24, 22, 76, 76, 76, 76, 76, 25,
   48, 1, 3, 1, 76, 76, 76, 76, 16, 0,
   49, 76, 76, 76, 76, 76, 76, 76, 76, 50,
   50, 70, 52, 51, 76, 76, 76, 76, 76, 7,
   51, 52, 76, 76, 76, 76, 76, 76, 76, 53,
   52, 76, 76, 76, 76, 76, 76, 76, 76, 7,
   53, 8, 10, 8, 54, 69, 76, 76, 16, 11,
   54, 76, 76, 76, 76, 76, 76, 76, 76, 55,
   55, 65, 63, 62, 57, 76, 34, 76, 76, 56,
   56, 8, 10, 9, 76, 76, 76, 76, 16, 11,
   57, 76, 76, 76, 76, 76, 76, 76, 76, 58,
   58, 69, 67, 66, 76, 76, 76, 76, 76, 59,
   59, 38, 40, 39, 60, 34, 76, 76, 16, 41,
   60, 76, 76, 76, 76, 76, 76, 76, 76, 61,
   61, 65, 63, 62, 76, 76, 76, 76, 76, 56,
   62, 63, 76, 76, 76, 76, 76, 76, 76, 64,
   63, 76, 76, 76, 76, 76, 76, 76, 76, 56,
   64, 8, 10, 8, 76, 76, 76, 76, 16, 11,
   65, 62, 76, 63, 76, 76, 76, 76, 76, 64,
   66, 67, 76, 76, 76, 76, 76, 76, 76, 68,
   67, 76, 76, 76, 76, 76, 76, 76, 76, 59,
   68, 38, 40, 38, 60, 34, 76, 76, 16, 41,
   69, 66, 76, 67, 76, 76, 76, 76, 76, 68,
   70, 51, 76, 52, 76, 76, 76, 76, 76, 53,
   71, 12, 14, 12, 49, 65, 38, 76, 16, 15,
   72, 76, 76, 76, 76, 76, 76, 76, 76, 73,
   73, 69, 67, 66, 74, 76, 76, 76, 76, 59,
   74, 76, 76, 76, 76, 76, 76, 76, 76, 75,
   75, 34, 36, 35, 32, 76, 76, 76, 76, 37
};
static const unsigned char athlon_min_issue_delay[] = {
    0, 0, 0, 0, 0, 0, 16, 17, 17, 16,
    0, 17, 17, 17, 16, 1, 17, 17, 17, 16,
    0, 0, 0, 0, 0, 1, 17, 18, 21, 32,
    0, 0, 1, 4, 16, 0, 0, 0, 19, 0,
    0, 16, 17, 19, 16, 0, 17, 17, 19, 16,
    1, 17, 17, 19, 16, 0, 0, 0, 2, 0,
    0, 16, 34, 34, 16, 0, 17, 34, 34, 16,
    1, 17, 34, 34, 16, 0, 0, 17, 17, 0,
    1, 17, 153, 153, 96, 0, 0, 136, 136, 80,
    0, 16, 136, 136, 80, 0, 17, 136, 136, 80,
    1, 17, 136, 136, 80, 0, 0, 119, 119, 64,
    0, 16, 119, 119, 64, 0, 17, 119, 119, 64,
    1, 17, 119, 119, 64, 0, 0, 102, 102, 48,
    0, 16, 102, 102, 48, 0, 17, 102, 102, 48,
    1, 17, 102, 102, 48, 0, 0, 85, 85, 32,
    0, 16, 85, 85, 32, 0, 17, 85, 85, 32,
    1, 17, 85, 85, 32, 0, 0, 68, 68, 16,
    0, 16, 68, 68, 16, 0, 17, 68, 68, 16,
    1, 17, 68, 68, 16, 0, 0, 51, 51, 0,
    0, 16, 51, 51, 16, 0, 17, 51, 51, 16,
    1, 17, 51, 51, 16, 0, 0, 34, 34, 0,
    0, 0, 34, 34, 0, 0, 0, 51, 51, 0,
    0, 0, 68, 68, 16, 0, 0, 85, 85, 32,
    0, 0, 102, 102, 48, 0, 0, 119, 119, 64,
    0, 0, 17, 17, 0, 1, 17, 34, 53, 32,
    0, 0, 17, 36, 16, 0, 17, 17, 36, 16,
    1, 17, 17, 36, 16, 0, 0, 0, 19, 0,
    1, 17, 19, 21, 32, 0, 0, 2, 4, 16,
    0, 0, 17, 19, 0, 1, 17, 34, 85, 32,
    0, 0, 17, 68, 16, 0, 0, 0, 51, 0,
    1, 17, 51, 53, 32, 0, 0, 34, 36, 16,
    0, 17, 34, 36, 16, 1, 17, 34, 36, 16,
    0, 0, 17, 19, 0, 0, 16, 34, 36, 16,
    0, 17, 17, 68, 16, 1, 17, 17, 68, 16,
    0, 0, 0, 51, 0, 0, 16, 17, 68, 16,
    0, 16, 17, 36, 16, 0, 0, 0, 2, 0,
    1, 17, 18, 85, 32, 0, 0, 1, 68, 16,
    1, 17, 21, 85, 32, 0, 0, 4, 68, 16
};
static const unsigned char athlon_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0};
static const unsigned char athlon_load_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
    0, 0, 0, 0, 1, 1, 1, 0, 1, 1,
    0, 0, 1, 1, 1, 1, 2, 3, 1, 4,
    5, 5, 1, 1, 6, 6, 7, 7, 7, 0,
    1, 1, 0, 1, 1, 0, 0, 1, 1, 0,
    0, 1, 0, 1, 0, 1, 0, 1, 1, 0,
    1, 1, 0, 1, 1, 5, 5, 1, 1, 1,
    1, 8, 8, 7, 0, 0, 0, 1, 0, 1,
    0, 5, 5, 0, 0, 1, 1, 0, 5, 5,
    0, 0, 1, 1, 0, 1, 1, 0, 5, 5,
    0, 0, 1, 0, 5, 0, 1, 1, 1, 1,
    1, 1, 0, 5, 0, 1, 0, 0, 1, 1,
    0, 5, 5, 0, 0, 1, 1, 0, 5, 5,
    0, 0, 9};
static const unsigned char athlon_load_transitions[] = {
    0, 12, 151, 159, 11, 4, 60, 59, 1, 0,
    1, 13, 162, 146, 133, 5, 162, 162, 162, 2,
    2, 7, 53, 38, 162, 16, 162, 162, 162, 3,
    3, 162, 162, 162, 162, 162, 16, 19, 33, 4,
    4, 162, 162, 162, 20, 162, 41, 10, 5, 0,
    5, 162, 162, 162, 6, 162, 162, 162, 162, 2,
    6, 162, 162, 162, 33, 162, 162, 162, 162, 7,
    7, 16, 54, 8, 162, 162, 162, 162, 162, 3,
    8, 162, 162, 162, 162, 162, 162, 162, 162, 9,
    9, 162, 162, 162, 162, 162, 18, 52, 162, 10,
   10, 162, 162, 162, 21, 162, 162, 41, 162, 11,
   11, 22, 125, 156, 31, 20, 61, 69, 133, 12,
   12, 4, 143, 149, 22, 162, 30, 29, 13, 0,
   13, 5, 162, 85, 14, 162, 162, 162, 162, 2,
   14, 6, 162, 75, 15, 162, 162, 162, 162, 7,
   15, 33, 162, 17, 162, 162, 162, 162, 162, 16,
   16, 162, 162, 162, 162, 162, 162, 162, 162, 3,
   17, 162, 162, 162, 162, 162, 162, 162, 162, 18,
   18, 162, 162, 162, 162, 162, 162, 162, 162, 19,
   19, 162, 162, 162, 162, 162, 162, 16, 162, 20,
   20, 162, 162, 162, 3, 162, 42, 21, 6, 12,
   21, 162, 162, 162, 19, 162, 162, 42, 162, 22,
   22, 20, 78, 141, 25, 162, 24, 23, 14, 12,
   23, 21, 76, 107, 26, 162, 162, 24, 162, 22,
   24, 42, 74, 108, 7, 162, 162, 162, 162, 25,
   25, 3, 67, 140, 162, 162, 7, 26, 15, 4,
   26, 19, 56, 27, 162, 162, 162, 7, 162, 20,
   27, 162, 162, 162, 162, 162, 162, 8, 162, 28,
   28, 162, 162, 162, 9, 162, 51, 50, 162, 29,
   29, 10, 87, 135, 23, 162, 162, 30, 162, 11,
   30, 41, 81, 120, 24, 162, 162, 162, 162, 31,
   31, 25, 111, 57, 162, 3, 2, 36, 32, 4,
   32, 15, 162, 34, 162, 33, 162, 162, 162, 16,
   33, 162, 162, 162, 162, 162, 162, 162, 162, 16,
   34, 17, 162, 35, 162, 162, 162, 162, 162, 18,
   35, 162, 162, 162, 162, 162, 162, 162, 162, 33,
   36, 26, 49, 37, 162, 19, 162, 2, 162, 20,
   37, 27, 48, 45, 162, 162, 162, 38, 162, 28,
   38, 8, 44, 39, 162, 162, 162, 162, 162, 9,
   39, 162, 162, 162, 162, 162, 162, 162, 162, 40,
   40, 162, 162, 162, 162, 162, 33, 43, 162, 41,
   41, 162, 162, 162, 42, 162, 162, 162, 162, 31,
   42, 162, 162, 162, 16, 162, 162, 162, 162, 25,
   43, 162, 162, 162, 162, 162, 162, 33, 162, 42,
   44, 162, 162, 162, 162, 162, 162, 162, 162, 43,
   45, 162, 162, 162, 162, 162, 162, 39, 162, 46,
   46, 162, 162, 162, 40, 162, 6, 47, 162, 30,
   47, 162, 162, 162, 43, 162, 162, 6, 162, 24,
   48, 162, 162, 162, 162, 162, 162, 44, 162, 47,
   49, 56, 55, 48, 162, 162, 162, 53, 162, 50,
   50, 162, 162, 162, 52, 162, 162, 51, 162, 23,
   51, 162, 162, 162, 18, 162, 162, 162, 162, 26,
   52, 162, 162, 162, 162, 162, 162, 18, 162, 21,
   53, 54, 35, 44, 162, 162, 162, 162, 162, 52,
   54, 162, 162, 162, 162, 162, 162, 162, 162, 52,
   55, 162, 162, 162, 162, 162, 162, 35, 162, 6,
   56, 162, 162, 162, 162, 162, 162, 54, 162, 50,
   57, 140, 112, 138, 162, 162, 38, 37, 34, 58,
   58, 162, 162, 162, 28, 162, 86, 68, 162, 59,
   59, 29, 136, 123, 69, 10, 162, 60, 162, 11,
   60, 30, 121, 109, 61, 41, 162, 162, 162, 31,
   61, 24, 90, 62, 2, 42, 162, 162, 162, 25,
   62, 108, 91, 106, 38, 162, 162, 162, 162, 63,
   63, 9, 102, 67, 162, 162, 65, 64, 162, 10,
   64, 52, 66, 56, 162, 162, 162, 65, 162, 21,
   65, 18, 17, 54, 162, 162, 162, 162, 162, 19,
   66, 162, 162, 162, 162, 162, 162, 17, 162, 51,
   67, 162, 162, 162, 162, 162, 54, 56, 162, 68,
   68, 162, 162, 162, 50, 162, 162, 86, 162, 69,
   69, 23, 95, 70, 36, 21, 162, 61, 162, 22,
   70, 107, 96, 103, 37, 162, 162, 62, 162, 71,
   71, 28, 101, 78, 63, 162, 73, 72, 162, 29,
   72, 50, 77, 76, 64, 162, 162, 73, 162, 23,
   73, 51, 75, 74, 65, 162, 162, 162, 162, 26,
   74, 162, 162, 162, 54, 162, 162, 162, 162, 64,
   75, 162, 162, 162, 17, 162, 162, 162, 162, 65,
   76, 162, 162, 162, 56, 162, 162, 74, 162, 72,
   77, 162, 162, 162, 66, 162, 162, 75, 162, 73,
   78, 162, 162, 162, 67, 162, 74, 76, 162, 79,
   79, 68, 100, 87, 72, 162, 162, 80, 162, 69,
   80, 86, 85, 81, 73, 162, 162, 162, 162, 36,
   81, 162, 162, 162, 74, 162, 162, 162, 162, 82,
   82, 64, 84, 49, 162, 52, 162, 83, 162, 21,
   83, 65, 34, 53, 162, 18, 162, 162, 162, 19,
   84, 66, 162, 55, 162, 162, 162, 34, 162, 51,
   85, 162, 162, 162, 75, 162, 162, 162, 162, 83,
   86, 162, 162, 162, 51, 162, 162, 162, 162, 36,
   87, 162, 162, 162, 76, 162, 162, 81, 162, 88,
   88, 72, 99, 95, 82, 50, 162, 89, 162, 23,
   89, 73, 94, 90, 83, 51, 162, 162, 162, 26,
   90, 74, 93, 91, 53, 162, 162, 162, 162, 64,
   91, 162, 162, 162, 44, 162, 162, 162, 162, 92,
   92, 43, 162, 66, 162, 162, 162, 15, 162, 42,
   93, 162, 162, 162, 35, 162, 162, 162, 162, 15,
   94, 75, 162, 93, 34, 162, 162, 162, 162, 65,
   95, 76, 98, 96, 49, 162, 162, 90, 162, 72,
   96, 162, 162, 162, 48, 162, 162, 91, 162, 97,
   97, 47, 162, 77, 92, 162, 162, 14, 162, 24,
   98, 162, 162, 162, 55, 162, 162, 93, 162, 14,
   99, 77, 162, 98, 84, 162, 162, 94, 162, 73,
  100, 162, 162, 162, 77, 162, 162, 85, 162, 89,
  101, 162, 162, 162, 102, 162, 75, 77, 162, 80,
  102, 162, 162, 162, 162, 162, 17, 66, 162, 86,
  103, 162, 162, 162, 45, 162, 162, 106, 162, 104,
  104, 46, 162, 101, 105, 162, 14, 97, 162, 30,
  105, 40, 162, 102, 162, 162, 15, 92, 162, 41,
  106, 162, 162, 162, 39, 162, 162, 162, 162, 105,
  107, 162, 162, 162, 27, 162, 162, 108, 162, 71,
  108, 162, 162, 162, 8, 162, 162, 162, 162, 63,
  109, 120, 119, 116, 62, 162, 162, 162, 162, 110,
  110, 63, 115, 111, 162, 9, 83, 82, 162, 10,
  111, 67, 114, 112, 162, 162, 53, 49, 162, 68,
  112, 162, 162, 162, 162, 162, 44, 48, 162, 113,
  113, 162, 162, 162, 47, 162, 162, 5, 162, 61,
  114, 162, 162, 162, 162, 162, 35, 55, 162, 5,
  115, 102, 162, 114, 162, 162, 34, 84, 162, 86,
  116, 162, 162, 162, 106, 162, 162, 162, 162, 117,
  117, 105, 162, 115, 162, 40, 32, 118, 162, 41,
  118, 92, 162, 84, 162, 43, 162, 32, 162, 42,
  119, 162, 162, 162, 91, 162, 162, 162, 162, 118,
  120, 162, 162, 162, 108, 162, 162, 162, 162, 110,
  121, 81, 122, 119, 90, 162, 162, 162, 162, 82,
  122, 162, 162, 162, 93, 162, 162, 162, 162, 32,
  123, 135, 134, 130, 70, 162, 162, 109, 162, 124,
  124, 71, 129, 125, 110, 28, 89, 88, 162, 29,
  125, 78, 128, 126, 111, 162, 90, 95, 162, 79,
  126, 162, 162, 162, 112, 162, 91, 96, 162, 127,
  127, 113, 162, 100, 97, 162, 162, 13, 162, 61,
  128, 162, 162, 162, 114, 162, 93, 98, 162, 13,
  129, 101, 162, 128, 115, 162, 94, 99, 162, 80,
  130, 162, 162, 162, 103, 162, 162, 116, 162, 131,
  131, 104, 162, 129, 117, 46, 133, 132, 162, 30,
  132, 97, 162, 99, 118, 47, 162, 133, 162, 24,
  133, 14, 162, 94, 32, 6, 162, 162, 162, 7,
  134, 162, 162, 162, 96, 162, 162, 119, 162, 132,
  135, 162, 162, 162, 107, 162, 162, 120, 162, 124,
  136, 87, 137, 134, 95, 162, 162, 121, 162, 88,
  137, 162, 162, 162, 98, 162, 162, 122, 162, 133,
  138, 162, 162, 162, 162, 162, 39, 45, 35, 139,
  139, 162, 162, 162, 46, 162, 5, 113, 162, 60,
  140, 162, 162, 162, 162, 162, 8, 27, 17, 58,
  141, 162, 162, 162, 140, 162, 108, 107, 75, 142,
  142, 58, 148, 143, 71, 162, 80, 79, 162, 59,
  143, 162, 162, 162, 78, 162, 81, 87, 162, 144,
  144, 79, 147, 136, 88, 68, 162, 145, 162, 69,
  145, 80, 146, 121, 89, 86, 162, 162, 162, 36,
  146, 85, 162, 122, 94, 162, 162, 162, 162, 83,
  147, 100, 162, 137, 99, 162, 162, 146, 162, 89,
  148, 162, 162, 162, 101, 162, 85, 100, 162, 145,
  149, 162, 162, 162, 141, 162, 120, 135, 85, 150,
  150, 142, 155, 151, 124, 58, 145, 144, 162, 59,
  151, 143, 154, 152, 125, 162, 121, 136, 162, 144,
  152, 162, 162, 162, 126, 162, 119, 134, 162, 153,
  153, 127, 162, 147, 132, 113, 162, 1, 162, 61,
  154, 162, 162, 162, 128, 162, 122, 137, 162, 1,
  155, 148, 162, 154, 129, 162, 146, 147, 162, 145,
  156, 141, 126, 157, 57, 162, 62, 70, 94, 142,
  157, 162, 162, 162, 138, 162, 106, 103, 93, 158,
  158, 139, 162, 148, 104, 162, 13, 127, 162, 60,
  159, 149, 152, 160, 156, 162, 109, 123, 146, 150,
  160, 162, 162, 162, 157, 162, 116, 130, 122, 161,
  161, 158, 162, 155, 131, 139, 1, 153, 162, 60
};
static const unsigned char athlon_load_min_issue_delay[] = {
    0, 0, 0, 0, 0, 0, 16, 0, 34, 32,
    0, 0, 32, 17, 16, 2, 34, 18, 0, 0,
    1, 17, 1, 0, 0, 1, 17, 1, 34, 32,
    1, 17, 4, 34, 32, 0, 0, 35, 17, 16,
    3, 51, 35, 17, 48, 2, 34, 18, 0, 32,
    1, 17, 1, 16, 16, 0, 0, 0, 0, 0,
    0, 0, 1, 0, 0, 0, 16, 1, 34, 32,
    0, 16, 4, 34, 32, 0, 64, 52, 34, 32,
    3, 51, 35, 17, 16, 4, 68, 53, 50, 48,
    3, 51, 36, 33, 32, 2, 34, 19, 16, 16,
    1, 17, 2, 0, 0, 1, 17, 3, 16, 16,
    0, 0, 2, 0, 0, 0, 0, 3, 16, 16,
    0, 0, 3, 17, 16, 0, 0, 18, 0, 0,
    0, 0, 19, 16, 16, 2, 34, 19, 16, 48,
    1, 17, 2, 0, 32, 0, 0, 1, 16, 16,
    0, 0, 1, 17, 16, 0, 0, 16, 0, 0,
    0, 64, 48, 34, 32, 4, 68, 52, 34, 32,
    0, 64, 53, 50, 48, 5, 85, 69, 51, 48,
    0, 0, 16, 16, 16, 0, 0, 19, 16, 48,
    0, 0, 35, 17, 48, 3, 51, 35, 17, 48,
    2, 34, 18, 0, 32, 1, 17, 1, 17, 16,
    1, 17, 3, 17, 16, 2, 34, 20, 32, 32,
    3, 51, 37, 49, 48, 2, 34, 19, 16, 48,
    1, 17, 2, 0, 32, 1, 17, 4, 32, 32,
    2, 34, 21, 48, 48, 0, 0, 21, 48, 48,
    1, 17, 4, 32, 32, 1, 17, 4, 33, 32,
    2, 34, 20, 32, 32, 0, 0, 37, 49, 48,
    3, 51, 37, 49, 48, 2, 34, 21, 48, 48,
    2, 34, 21, 48, 48, 0, 0, 18, 0, 0,
    1, 17, 1, 0, 32, 0, 0, 0, 16, 16,
    0, 0, 0, 17, 16, 0, 0, 0, 17, 16,
    0, 0, 3, 17, 48, 0, 0, 18, 0, 32,
    0, 0, 20, 32, 32, 0, 0, 36, 33, 32,
    2, 34, 21, 48, 48, 2, 34, 18, 0, 48,
    1, 17, 1, 32, 32, 0, 0, 0, 16, 16,
    0, 0, 3, 16, 48, 0, 0, 2, 0, 32,
    0, 0, 4, 32, 32, 0, 0, 4, 33, 32,
    1, 17, 5, 49, 48, 1, 17, 5, 50, 48,
    1, 17, 5, 48, 48, 1, 17, 5, 48, 48,
    1, 17, 2, 0, 48, 0, 0, 1, 32, 32,
    0, 0, 1, 33, 32, 1, 17, 1, 49, 48,
    0, 0, 16, 32, 32, 0, 0, 32, 33, 32,
    0, 32, 21, 48, 48, 1, 17, 1, 50, 48,
    1, 17, 1, 33, 32, 1, 17, 1, 48, 48,
    0, 0, 0, 32, 32, 0, 0, 0, 33, 32,
    0, 0, 5, 49, 48, 1, 49, 5, 49, 48,
    0, 32, 20, 32, 32, 1, 81, 5, 51, 48,
    0, 16, 5, 50, 48, 0, 0, 5, 48, 48,
    1, 33, 5, 48, 48, 0, 16, 4, 32, 32,
    1, 33, 5, 48, 48, 0, 16, 5, 48, 48,
    1, 17, 1, 48, 48, 1, 17, 2, 0, 48,
    2, 34, 18, 0, 48, 1, 33, 3, 16, 48,
    0, 16, 2, 0, 32, 0, 32, 18, 0, 32,
    1, 49, 3, 17, 48, 1, 17, 3, 16, 48,
    1, 17, 3, 17, 48, 0, 0, 1, 17, 48,
    0, 0, 16, 0, 32, 0, 0, 18, 0, 48,
    2, 34, 18, 0, 48, 1, 17, 1, 32, 32,
    2, 34, 18, 0, 48, 0, 32, 18, 0, 48,
    1, 49, 1, 17, 48, 0, 32, 16, 0, 32,
    0, 32, 16, 32, 32, 1, 49, 1, 49, 48,
    1, 17, 1, 17, 48, 0, 0, 1, 49, 48,
    1, 81, 1, 51, 48, 0, 0, 1, 16, 48,
    0, 0, 0, 0, 32, 0, 0, 2, 0, 48,
    1, 33, 2, 0, 48, 0, 16, 1, 32, 32,
    1, 33, 2, 0, 48, 0, 16, 2, 0, 48,
    1, 33, 1, 16, 48, 0, 16, 0, 0, 32,
    0, 16, 0, 32, 32, 0, 16, 0, 34, 32,
    1, 33, 1, 48, 48, 1, 17, 1, 16, 48,
    0, 0, 1, 48, 48, 1, 33, 1, 48, 48,
    2, 34, 18, 0, 0, 1, 17, 1, 0, 32,
    2, 34, 18, 0, 0, 1, 17, 2, 0, 0,
    0, 0, 1, 0, 32, 1, 17, 1, 0, 48,
    0, 0, 0, 32, 32, 0, 0, 0, 33, 32,
    0, 16, 1, 50, 48, 0, 16, 1, 48, 48,
    1, 17, 1, 0, 48, 1, 17, 1, 0, 0,
    0, 0, 0, 0, 32, 0, 0, 1, 0, 48,
    1, 33, 1, 0, 48, 0, 16, 0, 32, 32,
    1, 33, 1, 0, 48, 0, 16, 1, 0, 48,
    0, 0, 2, 0, 0, 1, 33, 2, 0, 0,
    0, 16, 1, 0, 32, 0, 0, 1, 0, 0,
    1, 33, 1, 0, 0, 0, 16, 0, 0, 32
};
static const unsigned char athlon_load_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0};
static const unsigned char athlon_mult_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 1, 1, 1, 2, 2, 2, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 3};
static const unsigned char athlon_mult_transitions[] = {
    0, 4, 1, 0, 1, 5, 16, 2, 2, 7,
   15, 3, 3, 10, 6, 4, 4, 16, 5, 0,
    5, 16, 16, 2, 6, 11, 16, 7, 7, 16,
    8, 3, 8, 16, 16, 9, 9, 13, 12, 10,
   10, 16, 11, 4, 11, 16, 16, 7, 12, 14,
   16, 13, 13, 16, 14, 10, 14, 16, 16, 13,
   15, 8, 16, 9};
static const unsigned char athlon_mult_min_issue_delay[] = {
    0, 0, 0, 16, 0, 0, 0, 0, 1, 0,
    1, 16, 0, 16, 1, 0, 1, 16, 0, 0,
    2, 0, 2, 16, 0, 16, 3, 0, 4, 16,
    0, 16};
static const unsigned char athlon_mult_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0};
static const unsigned char athlon_fp_translate[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    2, 2, 3, 4, 5, 6, 4, 4, 4, 7,
    8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
    9, 1, 1, 1, 1, 1, 1, 8, 8, 8,
    8, 8, 8, 3, 4, 10, 3, 11, 4, 3,
    4, 10, 10, 4, 7, 7, 7, 9, 9, 7,
    7, 12, 12, 12, 9, 8, 8, 8, 13, 13,
   13, 13, 8, 8, 8, 8, 8, 8, 13, 13,
   13, 13, 4, 4, 10, 10, 4, 10, 10, 4,
   14, 15, 16, 15, 14, 1, 1, 4, 9, 9,
    9, 12, 12, 12, 12, 17, 17, 17, 18, 18,
   19, 19, 20};
static const unsigned short athlon_fp_transitions[] = {
    0, 1, 3, 419, 419, 5, 6, 18, 416, 18,
  424, 424, 68, 460, 10, 462, 9, 244, 443, 202,
    0, 2, 1, 3, 11, 11, 5, 6, 18, 15,
   18, 21, 21, 68, 457, 10, 459, 9, 244, 443,
  463, 446, 411, 1, 3, 412, 412, 5, 6, 18,
  429, 18, 432, 432, 68, 434, 10, 440, 9, 244,
  443, 463, 0, 446, 1, 3, 400, 400, 5, 6,
   18, 447, 18, 450, 450, 68, 452, 10, 454, 9,
  244, 443, 416, 411, 1, 417, 417, 463, 3, 19,
  463, 19, 418, 418, 71, 463, 4, 422, 463, 256,
  428, 382, 0, 460, 2, 5, 420, 420, 4, 6,
  435, 463, 435, 425, 425, 74, 5, 7, 461, 463,
  260, 439, 386, 416, 15, 6, 8, 16, 16, 7,
    9, 19, 463, 19, 25, 25, 71, 8, 463, 455,
  419, 256, 428, 12, 446, 10, 9, 12, 417, 12,
   10, 22, 69, 420, 463, 13, 14, 245, 421, 203,
    0, 424, 463, 17, 22, 1, 463, 20, 22, 418,
   22, 463, 73, 73, 425, 11, 15, 463, 258, 427,
  384, 419, 429, 18, 463, 413, 413, 21, 463, 19,
  463, 19, 430, 430, 71, 23, 463, 431, 463, 256,
  428, 434, 0, 463, 414, 414, 24, 463, 435, 463,
  435, 433, 433, 74, 26, 12, 437, 463, 260, 439,
  447, 416, 463, 401, 401, 28, 16, 19, 463, 19,
  448, 448, 71, 31, 27, 449, 463, 256, 428, 452,
  411, 463, 444, 444, 34, 29, 435, 463, 435, 451,
  451, 74, 37, 32, 453, 463, 260, 439, 457, 429,
   40, 456, 456, 463, 35, 435, 463, 435, 445, 445,
   74, 463, 38, 458, 462, 260, 439, 441, 447, 43,
   41, 441, 422, 441, 463, 76, 76, 461, 463, 46,
   49, 262, 442, 388, 424, 11, 52, 55, 12, 44,
  463, 58, 12, 16, 12, 61, 22, 69, 456, 47,
   50, 21, 245, 421, 22, 446, 53, 56, 22, 25,
   22, 59, 73, 73, 445, 62, 463, 400, 258, 427,
   12, 400, 463, 64, 12, 401, 12, 67, 22, 69,
  444, 463, 463, 412, 245, 421, 12, 411, 463, 70,
   12, 413, 12, 65, 22, 69, 414, 68, 463, 432,
  245, 421, 22, 0, 463, 72, 22, 430, 22, 19,
   73, 73, 433, 463, 463, 440, 258, 427, 441, 419,
  463, 75, 441, 431, 441, 22, 76, 76, 437, 463,
  463, 450, 262, 442, 22, 424, 463, 77, 22, 448,
   22, 13, 73, 73, 451, 463, 463, 454, 258, 427,
  441, 412, 463, 78, 441, 449, 441, 69, 76, 76,
  453, 463, 463, 459, 262, 442, 441, 432, 80, 463,
  441, 455, 441, 71, 76, 76, 458, 463, 82, 463,
  262, 442, 18, 450, 463, 12, 12, 463, 73, 19,
   19, 463, 22, 22, 463, 435, 29, 441, 17, 30,
   30, 463, 2, 187, 187, 463, 189, 189, 463, 191,
   32, 193, 463, 33, 33, 463, 32, 178, 178, 463,
  180, 180, 463, 182, 35, 184, 463, 36, 36, 463,
   35, 169, 169, 463, 171, 171, 463, 173, 38, 175,
  463, 39, 39, 463, 38, 160, 160, 463, 162, 162,
  463, 164, 41, 166, 463, 42, 42, 463, 41, 151,
  151, 463, 153, 153, 463, 155, 44, 157, 463, 45,
   45, 463, 44, 142, 142, 463, 144, 144, 463, 146,
   47, 148, 463, 48, 48, 463, 47, 133, 133, 463,
  135, 135, 463, 137, 50, 139, 463, 51, 51, 463,
   50, 124, 124, 463, 126, 126, 463, 128, 53, 130,
  463, 54, 54, 463, 53, 115, 115, 463, 117, 117,
  463, 119, 56, 121, 463, 57, 57, 463, 56, 106,
  106, 463, 108, 108, 463, 110, 59, 112, 463, 60,
   60, 463, 59, 97, 97, 463, 99, 99, 463, 101,
   62, 103, 463, 63, 63, 463, 62, 88, 88, 463,
   90, 90, 463, 92, 65, 94, 463, 66, 66, 463,
   65, 79, 79, 463, 81, 81, 463, 83, 68, 85,
  463, 69, 69, 463, 68, 71, 71, 463, 73, 73,
  463, 74, 199, 76, 463, 200, 200, 463, 18, 391,
  391, 463, 393, 393, 463, 395, 202, 397, 463, 203,
  203, 463, 202, 382, 382, 463, 384, 384, 463, 386,
  205, 388, 463, 206, 206, 463, 205, 373, 373, 463,
  375, 375, 463, 377, 208, 379, 463, 209, 209, 463,
  208, 364, 364, 463, 366, 366, 463, 368, 211, 370,
  463, 212, 212, 463, 211, 355, 355, 463, 357, 357,
  463, 359, 214, 361, 463, 215, 215, 463, 214, 346,
  346, 463, 348, 348, 463, 350, 217, 352, 463, 218,
  218, 463, 217, 337, 337, 463, 339, 339, 463, 341,
  220, 343, 463, 221, 221, 463, 220, 328, 328, 463,
  330, 330, 463, 332, 223, 334, 463, 224, 224, 463,
  223, 319, 319, 463, 321, 321, 463, 323, 226, 325,
  463, 227, 227, 463, 226, 310, 310, 463, 312, 312,
  463, 314, 229, 316, 463, 230, 230, 463, 229, 301,
  301, 463, 303, 303, 463, 305, 232, 307, 463, 233,
  233, 463, 232, 292, 292, 463, 294, 294, 463, 296,
  235, 298, 463, 236, 236, 463, 235, 283, 283, 463,
  285, 285, 463, 287, 238, 289, 463, 239, 239, 463,
  238, 274, 274, 463, 276, 276, 463, 278, 241, 280,
  463, 242, 242, 463, 241, 265, 265, 463, 267, 267,
  463, 269, 244, 271, 463, 245, 245, 463, 244, 256,
  256, 463, 258, 258, 463, 260, 247, 262, 463, 27,
   27, 463, 247, 248, 248, 463, 250, 250, 84, 252,
  403, 254, 86, 197, 197, 463, 29, 404, 404, 87,
  406, 406, 463, 408, 417, 410, 89, 1, 23, 91,
  199, 1, 66, 1, 463, 13, 17, 463, 93, 79,
   95, 246, 402, 204, 0, 418, 81, 96, 13, 67,
   98, 100, 13, 463, 13, 463, 23, 23, 77, 102,
   63, 104, 26, 196, 380, 419, 420, 88, 105, 14,
   90, 64, 107, 14, 463, 14, 463, 24, 70, 86,
  109, 60, 111, 255, 415, 381, 416, 422, 97, 113,
   20, 463, 99, 114, 20, 463, 20, 463, 72, 72,
   61, 116, 95, 118, 257, 423, 383, 424, 425, 57,
  120, 24, 463, 106, 122, 24, 463, 24, 123, 10,
   10, 108, 463, 58, 463, 259, 426, 385, 417, 443,
  104, 125, 421, 421, 54, 463, 428, 428, 115, 427,
  427, 463, 439, 461, 442, 127, 436, 463, 129, 403,
  436, 117, 436, 463, 75, 75, 463, 131, 132, 134,
  261, 438, 387, 418, 16, 55, 136, 1, 113, 463,
  138, 1, 463, 1, 140, 13, 17, 51, 124, 126,
   25, 246, 402, 13, 446, 463, 52, 13, 463, 13,
  122, 23, 23, 463, 48, 463, 401, 26, 196, 1,
  400, 463, 141, 1, 463, 1, 143, 13, 17, 463,
  463, 463, 413, 246, 402, 1, 411, 463, 145, 1,
  463, 1, 133, 13, 17, 463, 135, 463, 414, 246,
  402, 14, 0, 463, 147, 14, 463, 14, 49, 24,
   70, 463, 463, 463, 430, 255, 415, 13, 416, 463,
  149, 13, 463, 13, 131, 23, 23, 463, 463, 463,
  431, 26, 196, 20, 419, 463, 150, 20, 463, 20,
   45, 72, 72, 463, 463, 463, 433, 257, 423, 24,
  424, 463, 152, 24, 463, 24, 142, 10, 10, 463,
  463, 463, 437, 259, 426, 436, 417, 463, 154, 436,
  463, 436, 144, 75, 75, 463, 463, 463, 444, 261,
  438, 14, 418, 463, 156, 14, 463, 14, 46, 24,
   70, 463, 463, 463, 445, 255, 415, 24, 429, 463,
  158, 24, 463, 24, 140, 10, 10, 463, 463, 463,
  448, 259, 426, 13, 401, 463, 159, 13, 463, 13,
   42, 23, 23, 463, 463, 463, 449, 26, 196, 20,
  412, 463, 161, 20, 463, 20, 151, 72, 72, 463,
  463, 463, 451, 257, 423, 24, 432, 463, 163, 24,
  463, 24, 153, 10, 10, 463, 463, 463, 453, 259,
  426, 436, 413, 463, 165, 436, 463, 436, 43, 75,
   75, 463, 463, 463, 455, 261, 438, 20, 430, 463,
  167, 20, 463, 20, 149, 72, 72, 463, 463, 463,
  456, 257, 423, 14, 450, 463, 168, 14, 463, 14,
   39, 24, 70, 463, 463, 463, 458, 255, 415, 436,
  447, 463, 463, 436, 170, 436, 160, 75, 75, 463,
  172, 174, 12, 261, 438, 1, 448, 463, 19, 1,
    1, 1, 1, 13, 162, 14, 176, 463, 13, 13,
   40, 158, 2, 20, 22, 463, 463, 13, 2, 463,
  177, 13, 13, 179, 181, 23, 36, 24, 27, 463,
  463, 28, 183, 463, 11, 28, 28, 185, 186, 194,
  169, 195, 30, 171, 37, 31, 188, 463, 29, 31,
   31, 190, 167, 185, 192, 186, 33, 33, 178, 34,
  194, 463, 32, 34, 34, 195, 180, 176, 196, 177,
   36, 34, 463, 37, 176, 463, 35, 37, 37, 198,
   30, 167, 201, 168, 39, 187, 463, 40, 197, 463,
   38, 40, 40, 204, 207, 158, 210, 159, 42, 199,
  463, 43, 202, 463, 41, 43, 43, 213, 216, 149,
  219, 150, 45, 205, 208, 46, 211, 463, 44, 46,
   46, 222, 225, 140, 228, 141, 48, 214, 217, 49,
  220, 463, 47, 49, 49, 231, 234, 131, 237, 132,
   51, 223, 226, 52, 229, 463, 50, 52, 52, 240,
  243, 122, 246, 123, 54, 232, 235, 55, 238, 463,
   53, 55, 55, 249, 251, 113, 253, 114, 57, 241,
  244, 58, 247, 463, 56, 58, 58, 255, 257, 104,
  259, 105, 60, 189, 31, 61, 185, 463, 59, 61,
   61, 261, 263, 95, 264, 96, 63, 248, 250, 64,
   28, 463, 62, 64, 64, 266, 268, 86, 270, 87,
   66, 194, 245, 67, 256, 463, 65, 67, 67, 463,
  463, 77, 463, 78, 69, 258, 246, 17, 26, 463,
   68, 17, 17, 463, 463, 23, 71, 70, 463, 17,
   17, 272, 73, 463, 18, 23, 23, 23, 463, 23,
   23, 72, 463, 10, 74, 10, 18, 70, 70, 273,
   76, 242, 12, 72, 10, 10, 463, 72, 72, 75,
  463, 75, 79, 75, 19, 67, 67, 275, 81, 265,
   22, 77, 77, 77, 463, 77, 77, 80, 463, 82,
   83, 82, 68, 78, 78, 277, 85, 267, 69, 80,
   82, 82, 463, 80, 80, 84, 463, 84, 88, 84,
   71, 64, 64, 279, 90, 243, 73, 86, 86, 86,
  463, 86, 86, 89, 463, 91, 92, 91, 65, 87,
   87, 281, 94, 263, 66, 89, 91, 91, 463, 89,
   89, 93, 463, 93, 97, 93, 79, 61, 61, 282,
   99, 239, 81, 95, 95, 95, 463, 95, 95, 98,
  463, 100, 101, 100, 62, 96, 96, 284, 103, 274,
   63, 98, 100, 100, 463, 98, 98, 102, 463, 102,
  106, 102, 88, 58, 58, 286, 108, 276, 90, 104,
  104, 104, 463, 104, 104, 107, 463, 109, 110, 109,
   59, 105, 105, 288, 112, 240, 60, 107, 109, 109,
  463, 107, 107, 111, 463, 111, 115, 111, 97, 55,
   55, 290, 117, 272, 99, 113, 113, 113, 463, 113,
  113, 116, 463, 118, 119, 118, 56, 114, 114, 291,
  121, 236, 57, 116, 118, 118, 463, 116, 116, 120,
  463, 120, 124, 120, 106, 52, 52, 293, 126, 283,
  108, 122, 122, 122, 463, 122, 122, 125, 463, 127,
  128, 127, 53, 123, 123, 295, 130, 285, 54, 125,
  127, 127, 463, 125, 125, 129, 463, 129, 133, 129,
  115, 49, 49, 297, 135, 237, 117, 131, 131, 131,
  463, 131, 131, 134, 463, 136, 137, 136, 50, 132,
  132, 299, 139, 281, 51, 134, 136, 136, 463, 134,
  134, 138, 463, 138, 142, 138, 124, 46, 46, 300,
  144, 233, 126, 140, 140, 140, 463, 140, 140, 143,
  463, 145, 146, 145, 47, 141, 141, 302, 148, 292,
   48, 143, 145, 145, 463, 143, 143, 147, 463, 147,
  151, 147, 133, 43, 43, 304, 153, 294, 135, 149,
  149, 149, 463, 149, 149, 152, 463, 154, 155, 154,
   44, 150, 150, 306, 157, 234, 45, 152, 154, 154,
  463, 152, 152, 156, 463, 156, 160, 156, 142, 40,
   40, 308, 162, 290, 144, 158, 158, 158, 463, 158,
  158, 161, 463, 163, 164, 163, 41, 159, 159, 309,
  166, 230, 42, 161, 163, 163, 463, 161, 161, 165,
  463, 165, 169, 165, 151, 37, 37, 311, 171, 301,
  153, 167, 167, 167, 463, 167, 167, 170, 463, 172,
  173, 172, 38, 168, 168, 313, 175, 303, 39, 170,
  172, 172, 463, 170, 170, 174, 463, 174, 178, 174,
  160, 34, 34, 315, 180, 231, 162, 176, 176, 176,
  463, 176, 176, 179, 463, 181, 182, 181, 35, 177,
  177, 317, 184, 299, 36, 179, 181, 181, 463, 179,
  179, 183, 463, 183, 187, 183, 169, 31, 31, 318,
  189, 227, 171, 185, 185, 185, 463, 185, 185, 188,
  320, 190, 191, 190, 32, 186, 186, 322, 193, 310,
   33, 188, 190, 190, 463, 188, 188, 192, 324, 192,
  312, 192, 178, 197, 463, 463, 198, 228, 180, 326,
  198, 198, 327, 329, 398, 331, 399, 200, 308, 463,
  201, 333, 463, 199, 201, 201, 335, 336, 389, 224,
  390, 203, 319, 321, 204, 225, 463, 202, 204, 204,
  338, 317, 380, 340, 381, 206, 221, 328, 207, 342,
  463, 205, 207, 207, 344, 345, 371, 347, 372, 209,
  330, 463, 210, 222, 463, 208, 210, 210, 349, 326,
  362, 351, 363, 212, 218, 337, 213, 339, 463, 211,
  213, 213, 353, 354, 353, 356, 354, 215, 219, 463,
  216, 335, 463, 214, 216, 216, 358, 360, 344, 362,
  345, 218, 215, 346, 219, 348, 463, 217, 219, 219,
  363, 365, 335, 367, 336, 221, 216, 344, 222, 212,
  463, 220, 222, 222, 369, 371, 326, 372, 327, 224,
  355, 357, 225, 213, 463, 223, 225, 225, 374, 376,
  317, 378, 318, 227, 353, 209, 228, 364, 463, 226,
  228, 228, 380, 381, 308, 383, 309, 230, 366, 210,
  231, 362, 463, 229, 231, 231, 385, 387, 299, 389,
  300, 233, 206, 373, 234, 375, 463, 232, 234, 234,
  390, 392, 290, 394, 291, 236, 207, 371, 237, 203,
  463, 235, 237, 237, 396, 398, 281, 399, 282, 239,
  382, 384, 240, 204, 463, 238, 240, 240, 402, 405,
  272, 407, 273, 242, 380, 200, 243, 391, 463, 241,
  243, 243, 463, 463, 263, 463, 264, 245, 403, 393,
  246, 201, 463, 244, 246, 246, 463, 463, 26, 248,
  255, 463, 28, 28, 409, 250, 463, 247, 194, 194,
  194, 463, 194, 194, 249, 463, 251, 252, 251, 29,
  195, 195, 415, 254, 389, 30, 249, 251, 251, 463,
  249, 249, 253, 463, 253, 256, 253, 187, 246, 246,
  423, 258, 404, 189, 26, 26, 26, 463, 26, 26,
  257, 463, 259, 260, 259, 247, 255, 255, 426, 262,
  406, 27, 257, 259, 259, 463, 257, 257, 261, 463,
  261, 265, 261, 248, 243, 243, 436, 267, 198, 250,
  263, 263, 263, 463, 263, 263, 266, 463, 268, 269,
  268, 244, 264, 264, 438, 271, 25, 245, 266, 268,
  268, 463, 266, 266, 270, 463, 270, 274, 270, 256,
  240, 240, 463, 276, 398, 258, 272, 272, 272, 463,
  272, 272, 275, 463, 277, 278, 277, 241, 273, 273,
  463, 280, 463, 242, 275, 277, 277, 463, 275, 275,
  279, 463, 279, 283, 279, 265, 237, 237, 463, 285,
  463, 267, 281, 281, 281, 463, 281, 281, 284, 463,
  286, 287, 286, 238, 282, 282, 463, 289, 463, 239,
  284, 286, 286, 463, 284, 284, 288, 463, 288, 292,
  288, 274, 234, 234, 463, 294, 463, 276, 290, 290,
  290, 463, 290, 290, 293, 463, 295, 296, 295, 235,
  291, 291, 463, 298, 463, 236, 293, 295, 295, 463,
  293, 293, 297, 463, 297, 301, 297, 283, 231, 231,
  463, 303, 463, 285, 299, 299, 299, 463, 299, 299,
  302, 463, 304, 305, 304, 232, 300, 300, 463, 307,
  463, 233, 302, 304, 304, 463, 302, 302, 306, 463,
  306, 310, 306, 292, 228, 228, 463, 312, 463, 294,
  308, 308, 308, 463, 308, 308, 311, 463, 313, 314,
  313, 229, 309, 309, 463, 316, 463, 230, 311, 313,
  313, 463, 311, 311, 315, 463, 315, 319, 315, 301,
  225, 225, 463, 321, 463, 303, 317, 317, 317, 463,
  317, 317, 320, 463, 322, 323, 322, 226, 318, 318,
  463, 325, 463, 227, 320, 322, 322, 463, 320, 320,
  324, 463, 324, 328, 324, 310, 222, 222, 463, 330,
  463, 312, 326, 326, 326, 463, 326, 326, 329, 463,
  331, 332, 331, 223, 327, 327, 463, 334, 463, 224,
  329, 331, 331, 463, 329, 329, 333, 463, 333, 337,
  333, 319, 219, 219, 463, 339, 463, 321, 335, 335,
  335, 463, 335, 335, 338, 463, 340, 341, 340, 220,
  336, 336, 463, 343, 463, 221, 338, 340, 340, 463,
  338, 338, 342, 463, 342, 346, 342, 328, 216, 216,
  463, 348, 463, 330, 344, 344, 344, 463, 344, 344,
  347, 463, 349, 350, 349, 217, 345, 345, 463, 352,
  463, 218, 347, 349, 349, 463, 347, 347, 351, 463,
  351, 355, 351, 337, 213, 213, 463, 357, 463, 339,
  353, 353, 353, 463, 353, 353, 356, 463, 358, 359,
  358, 214, 354, 354, 463, 361, 463, 215, 356, 358,
  358, 463, 356, 356, 360, 463, 360, 364, 360, 346,
  210, 210, 463, 366, 463, 348, 362, 362, 362, 463,
  362, 362, 365, 463, 367, 368, 367, 211, 363, 363,
  463, 370, 463, 212, 365, 367, 367, 463, 365, 365,
  369, 463, 369, 373, 369, 355, 207, 207, 463, 375,
  463, 357, 371, 371, 371, 463, 371, 371, 374, 463,
  376, 377, 376, 208, 372, 372, 463, 379, 463, 209,
  374, 376, 376, 463, 374, 374, 378, 463, 378, 382,
  378, 364, 204, 204, 463, 384, 463, 366, 380, 380,
  380, 463, 380, 380, 383, 463, 385, 386, 385, 205,
  381, 381, 463, 388, 463, 206, 383, 385, 385, 463,
  383, 383, 387, 463, 387, 391, 387, 373, 201, 201,
  463, 393, 463, 375, 389, 389, 389, 463, 389, 389,
  392, 463, 394, 395, 394, 202, 390, 390, 463, 397,
  463, 203, 392, 394, 394, 463, 392, 392, 396, 463,
  396, 404, 396, 382, 198, 198, 463, 406, 463, 384,
  398, 398, 398, 463, 398, 398, 405, 463, 407, 408,
  407, 199, 399, 399, 463, 410, 463, 200, 405, 407,
  407, 463, 405, 405, 409, 463, 409, 463, 409, 391,
  421, 463, 463, 402, 463, 393, 463, 402, 402, 463,
  463, 196, 463, 415, 427, 463, 463, 196, 463, 463,
  403, 196, 196, 463, 463, 426, 428, 426, 435, 402,
  402, 14, 14, 463, 197, 463, 196, 196, 24, 24,
  463, 423, 463, 436, 463, 463, 403, 439, 15, 463,
  415, 415, 441, 463, 463, 20, 463, 426, 426, 20,
   20, 463, 438, 72, 463, 436, 442, 404, 463, 423,
  463, 463, 21, 423, 423, 463, 463, 438, 463, 438,
  463, 463, 463, 463, 463, 463, 406};
static const unsigned short athlon_fp_check[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  463, 2, 411, 411, 411, 411, 411, 411, 411, 411,
  411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
  411, 463, 411, 446, 446, 446, 446, 446, 446, 446,
  446, 446, 446, 446, 446, 446, 446, 446, 446, 446,
  446, 446, 416, 446, 1, 416, 416, 463, 3, 416,
  463, 416, 416, 416, 416, 463, 4, 416, 463, 416,
  416, 416, 416, 460, 1, 5, 460, 460, 3, 6,
  460, 463, 460, 460, 460, 460, 4, 7, 460, 463,
  460, 460, 460, 460, 15, 5, 8, 15, 15, 6,
    9, 15, 463, 15, 15, 15, 15, 7, 463, 15,
  419, 15, 15, 419, 15, 10, 8, 419, 419, 419,
    9, 419, 419, 419, 463, 13, 14, 419, 419, 419,
  419, 424, 463, 17, 424, 10, 463, 20, 424, 424,
  424, 463, 424, 424, 424, 13, 14, 463, 424, 424,
  424, 424, 429, 17, 463, 429, 429, 20, 463, 429,
  463, 429, 429, 429, 429, 23, 463, 429, 463, 429,
  429, 434, 429, 463, 434, 434, 24, 463, 434, 463,
  434, 434, 434, 434, 26, 23, 434, 463, 434, 434,
  447, 434, 463, 447, 447, 28, 24, 447, 463, 447,
  447, 447, 447, 31, 26, 447, 463, 447, 447, 452,
  447, 463, 452, 452, 34, 28, 452, 463, 452, 452,
  452, 452, 37, 31, 452, 463, 452, 452, 457, 452,
   40, 457, 457, 463, 34, 457, 463, 457, 457, 457,
  457, 463, 37, 457, 462, 457, 457, 462, 457, 43,
   40, 462, 462, 462, 463, 462, 462, 462, 463, 46,
   49, 462, 462, 462, 462, 11, 52, 55, 11, 43,
  463, 58, 11, 11, 11, 61, 11, 11, 11, 46,
   49, 21, 11, 11, 21, 11, 52, 55, 21, 21,
   21, 58, 21, 21, 21, 61, 463, 400, 21, 21,
  400, 21, 463, 64, 400, 400, 400, 67, 400, 400,
  400, 463, 463, 412, 400, 400, 412, 400, 463, 70,
  412, 412, 412, 64, 412, 412, 412, 67, 463, 432,
  412, 412, 432, 412, 463, 72, 432, 432, 432, 70,
  432, 432, 432, 463, 463, 440, 432, 432, 440, 432,
  463, 75, 440, 440, 440, 72, 440, 440, 440, 463,
  463, 450, 440, 440, 450, 440, 463, 77, 450, 450,
  450, 75, 450, 450, 450, 463, 463, 454, 450, 450,
  454, 450, 463, 78, 454, 454, 454, 77, 454, 454,
  454, 463, 463, 459, 454, 454, 459, 454, 80, 463,
  459, 459, 459, 78, 459, 459, 459, 463, 82, 463,
  459, 459, 18, 459, 463, 18, 18, 463, 80, 18,
   18, 463, 18, 18, 463, 18, 29, 18, 82, 29,
   29, 463, 18, 29, 29, 463, 29, 29, 463, 29,
   32, 29, 463, 32, 32, 463, 29, 32, 32, 463,
   32, 32, 463, 32, 35, 32, 463, 35, 35, 463,
   32, 35, 35, 463, 35, 35, 463, 35, 38, 35,
  463, 38, 38, 463, 35, 38, 38, 463, 38, 38,
  463, 38, 41, 38, 463, 41, 41, 463, 38, 41,
   41, 463, 41, 41, 463, 41, 44, 41, 463, 44,
   44, 463, 41, 44, 44, 463, 44, 44, 463, 44,
   47, 44, 463, 47, 47, 463, 44, 47, 47, 463,
   47, 47, 463, 47, 50, 47, 463, 50, 50, 463,
   47, 50, 50, 463, 50, 50, 463, 50, 53, 50,
  463, 53, 53, 463, 50, 53, 53, 463, 53, 53,
  463, 53, 56, 53, 463, 56, 56, 463, 53, 56,
   56, 463, 56, 56, 463, 56, 59, 56, 463, 59,
   59, 463, 56, 59, 59, 463, 59, 59, 463, 59,
   62, 59, 463, 62, 62, 463, 59, 62, 62, 463,
   62, 62, 463, 62, 65, 62, 463, 65, 65, 463,
   62, 65, 65, 463, 65, 65, 463, 65, 68, 65,
  463, 68, 68, 463, 65, 68, 68, 463, 68, 68,
  463, 68, 199, 68, 463, 199, 199, 463, 68, 199,
  199, 463, 199, 199, 463, 199, 202, 199, 463, 202,
  202, 463, 199, 202, 202, 463, 202, 202, 463, 202,
  205, 202, 463, 205, 205, 463, 202, 205, 205, 463,
  205, 205, 463, 205, 208, 205, 463, 208, 208, 463,
  205, 208, 208, 463, 208, 208, 463, 208, 211, 208,
  463, 211, 211, 463, 208, 211, 211, 463, 211, 211,
  463, 211, 214, 211, 463, 214, 214, 463, 211, 214,
  214, 463, 214, 214, 463, 214, 217, 214, 463, 217,
  217, 463, 214, 217, 217, 463, 217, 217, 463, 217,
  220, 217, 463, 220, 220, 463, 217, 220, 220, 463,
  220, 220, 463, 220, 223, 220, 463, 223, 223, 463,
  220, 223, 223, 463, 223, 223, 463, 223, 226, 223,
  463, 226, 226, 463, 223, 226, 226, 463, 226, 226,
  463, 226, 229, 226, 463, 229, 229, 463, 226, 229,
  229, 463, 229, 229, 463, 229, 232, 229, 463, 232,
  232, 463, 229, 232, 232, 463, 232, 232, 463, 232,
  235, 232, 463, 235, 235, 463, 232, 235, 235, 463,
  235, 235, 463, 235, 238, 235, 463, 238, 238, 463,
  235, 238, 238, 463, 238, 238, 463, 238, 241, 238,
  463, 241, 241, 463, 238, 241, 241, 463, 241, 241,
  463, 241, 244, 241, 463, 244, 244, 463, 241, 244,
  244, 463, 244, 244, 463, 244, 247, 244, 463, 247,
  247, 463, 244, 247, 247, 463, 247, 247, 84, 247,
  403, 247, 86, 403, 403, 463, 247, 403, 403, 87,
  403, 403, 463, 403, 417, 403, 89, 417, 84, 91,
  403, 417, 86, 417, 463, 417, 417, 463, 93, 87,
   95, 417, 417, 417, 417, 418, 89, 96, 418, 91,
   98, 100, 418, 463, 418, 463, 418, 418, 93, 102,
   95, 104, 418, 418, 418, 418, 420, 96, 105, 420,
   98, 100, 107, 420, 463, 420, 463, 420, 420, 102,
  109, 104, 111, 420, 420, 420, 420, 422, 105, 113,
  422, 463, 107, 114, 422, 463, 422, 463, 422, 422,
  109, 116, 111, 118, 422, 422, 422, 422, 425, 113,
  120, 425, 463, 114, 122, 425, 463, 425, 123, 425,
  425, 116, 463, 118, 463, 425, 425, 425, 425, 443,
  120, 125, 443, 443, 122, 463, 443, 443, 123, 443,
  443, 463, 443, 461, 443, 127, 461, 463, 129, 443,
  461, 125, 461, 463, 461, 461, 463, 131, 132, 134,
  461, 461, 461, 461, 16, 127, 136, 16, 129, 463,
  138, 16, 463, 16, 140, 16, 16, 131, 132, 134,
   25, 16, 16, 25, 16, 463, 136, 25, 463, 25,
  138, 25, 25, 463, 140, 463, 401, 25, 25, 401,
   25, 463, 141, 401, 463, 401, 143, 401, 401, 463,
  463, 463, 413, 401, 401, 413, 401, 463, 145, 413,
  463, 413, 141, 413, 413, 463, 143, 463, 414, 413,
  413, 414, 413, 463, 147, 414, 463, 414, 145, 414,
  414, 463, 463, 463, 430, 414, 414, 430, 414, 463,
  149, 430, 463, 430, 147, 430, 430, 463, 463, 463,
  431, 430, 430, 431, 430, 463, 150, 431, 463, 431,
  149, 431, 431, 463, 463, 463, 433, 431, 431, 433,
  431, 463, 152, 433, 463, 433, 150, 433, 433, 463,
  463, 463, 437, 433, 433, 437, 433, 463, 154, 437,
  463, 437, 152, 437, 437, 463, 463, 463, 444, 437,
  437, 444, 437, 463, 156, 444, 463, 444, 154, 444,
  444, 463, 463, 463, 445, 444, 444, 445, 444, 463,
  158, 445, 463, 445, 156, 445, 445, 463, 463, 463,
  448, 445, 445, 448, 445, 463, 159, 448, 463, 448,
  158, 448, 448, 463, 463, 463, 449, 448, 448, 449,
  448, 463, 161, 449, 463, 449, 159, 449, 449, 463,
  463, 463, 451, 449, 449, 451, 449, 463, 163, 451,
  463, 451, 161, 451, 451, 463, 463, 463, 453, 451,
  451, 453, 451, 463, 165, 453, 463, 453, 163, 453,
  453, 463, 463, 463, 455, 453, 453, 455, 453, 463,
  167, 455, 463, 455, 165, 455, 455, 463, 463, 463,
  456, 455, 455, 456, 455, 463, 168, 456, 463, 456,
  167, 456, 456, 463, 463, 463, 458, 456, 456, 458,
  456, 463, 463, 458, 170, 458, 168, 458, 458, 463,
  172, 174, 12, 458, 458, 12, 458, 463, 19, 12,
   12, 19, 19, 12, 170, 12, 176, 463, 19, 19,
  172, 174, 12, 19, 22, 463, 463, 22, 19, 463,
  177, 22, 22, 179, 181, 22, 176, 22, 27, 463,
  463, 27, 183, 463, 22, 27, 27, 185, 186, 27,
  177, 27, 30, 179, 181, 30, 188, 463, 27, 30,
   30, 190, 183, 30, 192, 30, 33, 185, 186, 33,
  194, 463, 30, 33, 33, 195, 188, 33, 196, 33,
   36, 190, 463, 36, 192, 463, 33, 36, 36, 198,
  194, 36, 201, 36, 39, 195, 463, 39, 196, 463,
   36, 39, 39, 204, 207, 39, 210, 39, 42, 198,
  463, 42, 201, 463, 39, 42, 42, 213, 216, 42,
  219, 42, 45, 204, 207, 45, 210, 463, 42, 45,
   45, 222, 225, 45, 228, 45, 48, 213, 216, 48,
  219, 463, 45, 48, 48, 231, 234, 48, 237, 48,
   51, 222, 225, 51, 228, 463, 48, 51, 51, 240,
  243, 51, 246, 51, 54, 231, 234, 54, 237, 463,
   51, 54, 54, 249, 251, 54, 253, 54, 57, 240,
  243, 57, 246, 463, 54, 57, 57, 255, 257, 57,
  259, 57, 60, 249, 251, 60, 253, 463, 57, 60,
   60, 261, 263, 60, 264, 60, 63, 255, 257, 63,
  259, 463, 60, 63, 63, 266, 268, 63, 270, 63,
   66, 261, 263, 66, 264, 463, 63, 66, 66, 463,
  463, 66, 463, 66, 69, 266, 268, 69, 270, 463,
   66, 69, 69, 463, 463, 69, 71, 69, 463, 71,
   71, 272, 73, 463, 69, 73, 71, 71, 463, 73,
   73, 71, 463, 73, 74, 73, 71, 74, 74, 273,
   76, 272, 73, 76, 74, 74, 463, 76, 76, 74,
  463, 76, 79, 76, 74, 79, 79, 275, 81, 273,
   76, 81, 79, 79, 463, 81, 81, 79, 463, 81,
   83, 81, 79, 83, 83, 277, 85, 275, 81, 85,
   83, 83, 463, 85, 85, 83, 463, 85, 88, 85,
   83, 88, 88, 279, 90, 277, 85, 90, 88, 88,
  463, 90, 90, 88, 463, 90, 92, 90, 88, 92,
   92, 281, 94, 279, 90, 94, 92, 92, 463, 94,
   94, 92, 463, 94, 97, 94, 92, 97, 97, 282,
   99, 281, 94, 99, 97, 97, 463, 99, 99, 97,
  463, 99, 101, 99, 97, 101, 101, 284, 103, 282,
   99, 103, 101, 101, 463, 103, 103, 101, 463, 103,
  106, 103, 101, 106, 106, 286, 108, 284, 103, 108,
  106, 106, 463, 108, 108, 106, 463, 108, 110, 108,
  106, 110, 110, 288, 112, 286, 108, 112, 110, 110,
  463, 112, 112, 110, 463, 112, 115, 112, 110, 115,
  115, 290, 117, 288, 112, 117, 115, 115, 463, 117,
  117, 115, 463, 117, 119, 117, 115, 119, 119, 291,
  121, 290, 117, 121, 119, 119, 463, 121, 121, 119,
  463, 121, 124, 121, 119, 124, 124, 293, 126, 291,
  121, 126, 124, 124, 463, 126, 126, 124, 463, 126,
  128, 126, 124, 128, 128, 295, 130, 293, 126, 130,
  128, 128, 463, 130, 130, 128, 463, 130, 133, 130,
  128, 133, 133, 297, 135, 295, 130, 135, 133, 133,
  463, 135, 135, 133, 463, 135, 137, 135, 133, 137,
  137, 299, 139, 297, 135, 139, 137, 137, 463, 139,
  139, 137, 463, 139, 142, 139, 137, 142, 142, 300,
  144, 299, 139, 144, 142, 142, 463, 144, 144, 142,
  463, 144, 146, 144, 142, 146, 146, 302, 148, 300,
  144, 148, 146, 146, 463, 148, 148, 146, 463, 148,
  151, 148, 146, 151, 151, 304, 153, 302, 148, 153,
  151, 151, 463, 153, 153, 151, 463, 153, 155, 153,
  151, 155, 155, 306, 157, 304, 153, 157, 155, 155,
  463, 157, 157, 155, 463, 157, 160, 157, 155, 160,
  160, 308, 162, 306, 157, 162, 160, 160, 463, 162,
  162, 160, 463, 162, 164, 162, 160, 164, 164, 309,
  166, 308, 162, 166, 164, 164, 463, 166, 166, 164,
  463, 166, 169, 166, 164, 169, 169, 311, 171, 309,
  166, 171, 169, 169, 463, 171, 171, 169, 463, 171,
  173, 171, 169, 173, 173, 313, 175, 311, 171, 175,
  173, 173, 463, 175, 175, 173, 463, 175, 178, 175,
  173, 178, 178, 315, 180, 313, 175, 180, 178, 178,
  463, 180, 180, 178, 463, 180, 182, 180, 178, 182,
  182, 317, 184, 315, 180, 184, 182, 182, 463, 184,
  184, 182, 463, 184, 187, 184, 182, 187, 187, 318,
  189, 317, 184, 189, 187, 187, 463, 189, 189, 187,
  320, 189, 191, 189, 187, 191, 191, 322, 193, 318,
  189, 193, 191, 191, 463, 193, 193, 191, 324, 193,
  320, 193, 191, 197, 463, 463, 197, 322, 193, 326,
  197, 197, 327, 329, 197, 331, 197, 200, 324, 463,
  200, 333, 463, 197, 200, 200, 335, 336, 200, 326,
  200, 203, 327, 329, 203, 331, 463, 200, 203, 203,
  338, 333, 203, 340, 203, 206, 335, 336, 206, 342,
  463, 203, 206, 206, 344, 345, 206, 347, 206, 209,
  338, 463, 209, 340, 463, 206, 209, 209, 349, 342,
  209, 351, 209, 212, 344, 345, 212, 347, 463, 209,
  212, 212, 353, 354, 212, 356, 212, 215, 349, 463,
  215, 351, 463, 212, 215, 215, 358, 360, 215, 362,
  215, 218, 353, 354, 218, 356, 463, 215, 218, 218,
  363, 365, 218, 367, 218, 221, 358, 360, 221, 362,
  463, 218, 221, 221, 369, 371, 221, 372, 221, 224,
  363, 365, 224, 367, 463, 221, 224, 224, 374, 376,
  224, 378, 224, 227, 369, 371, 227, 372, 463, 224,
  227, 227, 380, 381, 227, 383, 227, 230, 374, 376,
  230, 378, 463, 227, 230, 230, 385, 387, 230, 389,
  230, 233, 380, 381, 233, 383, 463, 230, 233, 233,
  390, 392, 233, 394, 233, 236, 385, 387, 236, 389,
  463, 233, 236, 236, 396, 398, 236, 399, 236, 239,
  390, 392, 239, 394, 463, 236, 239, 239, 402, 405,
  239, 407, 239, 242, 396, 398, 242, 399, 463, 239,
  242, 242, 463, 463, 242, 463, 242, 245, 402, 405,
  245, 407, 463, 242, 245, 245, 463, 463, 245, 248,
  245, 463, 248, 248, 409, 250, 463, 245, 250, 248,
  248, 463, 250, 250, 248, 463, 250, 252, 250, 248,
  252, 252, 415, 254, 409, 250, 254, 252, 252, 463,
  254, 254, 252, 463, 254, 256, 254, 252, 256, 256,
  423, 258, 415, 254, 258, 256, 256, 463, 258, 258,
  256, 463, 258, 260, 258, 256, 260, 260, 426, 262,
  423, 258, 262, 260, 260, 463, 262, 262, 260, 463,
  262, 265, 262, 260, 265, 265, 436, 267, 426, 262,
  267, 265, 265, 463, 267, 267, 265, 463, 267, 269,
  267, 265, 269, 269, 438, 271, 436, 267, 271, 269,
  269, 463, 271, 271, 269, 463, 271, 274, 271, 269,
  274, 274, 463, 276, 438, 271, 276, 274, 274, 463,
  276, 276, 274, 463, 276, 278, 276, 274, 278, 278,
  463, 280, 463, 276, 280, 278, 278, 463, 280, 280,
  278, 463, 280, 283, 280, 278, 283, 283, 463, 285,
  463, 280, 285, 283, 283, 463, 285, 285, 283, 463,
  285, 287, 285, 283, 287, 287, 463, 289, 463, 285,
  289, 287, 287, 463, 289, 289, 287, 463, 289, 292,
  289, 287, 292, 292, 463, 294, 463, 289, 294, 292,
  292, 463, 294, 294, 292, 463, 294, 296, 294, 292,
  296, 296, 463, 298, 463, 294, 298, 296, 296, 463,
  298, 298, 296, 463, 298, 301, 298, 296, 301, 301,
  463, 303, 463, 298, 303, 301, 301, 463, 303, 303,
  301, 463, 303, 305, 303, 301, 305, 305, 463, 307,
  463, 303, 307, 305, 305, 463, 307, 307, 305, 463,
  307, 310, 307, 305, 310, 310, 463, 312, 463, 307,
  312, 310, 310, 463, 312, 312, 310, 463, 312, 314,
  312, 310, 314, 314, 463, 316, 463, 312, 316, 314,
  314, 463, 316, 316, 314, 463, 316, 319, 316, 314,
  319, 319, 463, 321, 463, 316, 321, 319, 319, 463,
  321, 321, 319, 463, 321, 323, 321, 319, 323, 323,
  463, 325, 463, 321, 325, 323, 323, 463, 325, 325,
  323, 463, 325, 328, 325, 323, 328, 328, 463, 330,
  463, 325, 330, 328, 328, 463, 330, 330, 328, 463,
  330, 332, 330, 328, 332, 332, 463, 334, 463, 330,
  334, 332, 332, 463, 334, 334, 332, 463, 334, 337,
  334, 332, 337, 337, 463, 339, 463, 334, 339, 337,
  337, 463, 339, 339, 337, 463, 339, 341, 339, 337,
  341, 341, 463, 343, 463, 339, 343, 341, 341, 463,
  343, 343, 341, 463, 343, 346, 343, 341, 346, 346,
  463, 348, 463, 343, 348, 346, 346, 463, 348, 348,
  346, 463, 348, 350, 348, 346, 350, 350, 463, 352,
  463, 348, 352, 350, 350, 463, 352, 352, 350, 463,
  352, 355, 352, 350, 355, 355, 463, 357, 463, 352,
  357, 355, 355, 463, 357, 357, 355, 463, 357, 359,
  357, 355, 359, 359, 463, 361, 463, 357, 361, 359,
  359, 463, 361, 361, 359, 463, 361, 364, 361, 359,
  364, 364, 463, 366, 463, 361, 366, 364, 364, 463,
  366, 366, 364, 463, 366, 368, 366, 364, 368, 368,
  463, 370, 463, 366, 370, 368, 368, 463, 370, 370,
  368, 463, 370, 373, 370, 368, 373, 373, 463, 375,
  463, 370, 375, 373, 373, 463, 375, 375, 373, 463,
  375, 377, 375, 373, 377, 377, 463, 379, 463, 375,
  379, 377, 377, 463, 379, 379, 377, 463, 379, 382,
  379, 377, 382, 382, 463, 384, 463, 379, 384, 382,
  382, 463, 384, 384, 382, 463, 384, 386, 384, 382,
  386, 386, 463, 388, 463, 384, 388, 386, 386, 463,
  388, 388, 386, 463, 388, 391, 388, 386, 391, 391,
  463, 393, 463, 388, 393, 391, 391, 463, 393, 393,
  391, 463, 393, 395, 393, 391, 395, 395, 463, 397,
  463, 393, 397, 395, 395, 463, 397, 397, 395, 463,
  397, 404, 397, 395, 404, 404, 463, 406, 463, 397,
  406, 404, 404, 463, 406, 406, 404, 463, 406, 408,
  406, 404, 408, 408, 463, 410, 463, 406, 410, 408,
  408, 463, 410, 410, 408, 463, 410, 463, 410, 408,
  421, 463, 463, 421, 463, 410, 463, 421, 421, 463,
  463, 421, 463, 421, 427, 463, 463, 427, 463, 463,
  421, 427, 427, 463, 463, 427, 428, 427, 435, 428,
  428, 435, 435, 463, 427, 463, 428, 428, 435, 435,
  463, 428, 463, 435, 463, 463, 428, 439, 435, 463,
  439, 439, 441, 463, 463, 441, 463, 439, 439, 441,
  441, 463, 439, 441, 463, 441, 442, 439, 463, 442,
  463, 463, 441, 442, 442, 463, 463, 442, 463, 442,
  463, 463, 463, 463, 463, 463, 442};
static const unsigned short athlon_fp_base[] = {
    0, 84, 21, 88, 96, 105, 109, 117, 126, 130,
  145, 295, 1332, 155, 156, 124, 1044, 163, 442, 1338,
  167, 311, 1354, 195, 206, 1060, 214, 1368, 225, 456,
 1382, 233, 470, 1396, 244, 484, 1410, 252, 498, 1424,
  260, 512, 1438, 279, 526, 1452, 289, 540, 1466, 290,
  554, 1480, 296, 568, 1494, 297, 582, 1508, 301, 596,
 1522, 305, 610, 1536, 333, 624, 1550, 337, 638, 1564,
  349, 1576, 365, 1582, 1594, 381, 1600, 397, 413, 1612,
  428, 1618, 438, 1630, 888, 1636, 892, 899, 1648, 906,
 1654, 909, 1666, 918, 1672, 920, 927, 1684, 930, 1690,
  931, 1702, 939, 1708, 941, 948, 1720, 952, 1726, 960,
 1738, 962, 1744, 969, 973, 1756, 981, 1762, 983, 1774,
  990, 1780, 994, 998, 1792, 1011, 1798, 1025, 1810, 1028,
 1816, 1037, 1038, 1828, 1039, 1834, 1046, 1846, 1050, 1852,
 1054, 1082, 1864, 1086, 1870, 1098, 1882, 1114, 1888, 1130,
 1146, 1900, 1162, 1906, 1178, 1918, 1194, 1924, 1210, 1226,
 1936, 1242, 1942, 1258, 1954, 1274, 1960, 1290, 1306, 1972,
 1324, 1978, 1330, 1990, 1331, 1996, 1346, 1360, 2008, 1363,
 2014, 1364, 2026, 1372, 2032, 1377, 1378, 2044, 1386, 2050,
 1391, 2062, 1394, 2068, 1400, 1405, 1408, 2083, 1419, 652,
 2097, 1422, 666, 2111, 1433, 680, 2125, 1434, 694, 2139,
 1436, 708, 2153, 1447, 722, 2167, 1448, 736, 2181, 1450,
  750, 2195, 1461, 764, 2209, 1462, 778, 2223, 1464, 792,
 2237, 1475, 806, 2251, 1476, 820, 2265, 1478, 834, 2279,
 1489, 848, 2293, 1490, 862, 2307, 1492, 876, 2319, 1503,
 2325, 1504, 2337, 1506, 2343, 1517, 2355, 1518, 2361, 1520,
 2373, 1531, 2379, 1532, 1534, 2391, 1545, 2397, 1546, 2409,
 1548, 2415, 1581, 1599, 2427, 1617, 2433, 1635, 2445, 1653,
 2451, 1671, 1689, 2463, 1707, 2469, 1725, 2481, 1743, 2487,
 1761, 1779, 2499, 1797, 2505, 1815, 2517, 1833, 2523, 1851,
 1869, 2535, 1887, 2541, 1905, 2553, 1923, 2559, 1941, 1959,
 2571, 1977, 2577, 1995, 2589, 2013, 2595, 2031, 2049, 2607,
 2060, 2613, 2067, 2625, 2078, 2631, 2089, 2092, 2643, 2093,
 2649, 2095, 2661, 2101, 2667, 2106, 2107, 2679, 2120, 2685,
 2123, 2697, 2129, 2703, 2134, 2135, 2715, 2137, 2721, 2148,
 2733, 2151, 2739, 2162, 2163, 2751, 2165, 2757, 2176, 2769,
 2177, 2775, 2179, 2190, 2787, 2191, 2793, 2193, 2805, 2204,
 2811, 2205, 2207, 2823, 2218, 2829, 2219, 2841, 2221, 2847,
 2232, 2233, 2859, 2235, 2865, 2246, 2877, 2247, 2883, 2249,
 2260, 2895, 2261, 2901, 2263, 2913, 2274, 2919, 2275, 2277,
  327, 1076, 2288, 890, 2931, 2289, 2937, 2291, 2949, 2324,
 2955, 42, 343, 1092, 1108, 2342, 82, 904, 925, 140,
  946, 2970, 967, 2360, 161, 988, 2378, 2984, 2996, 182,
 1124, 1140, 359, 1156, 201, 2998, 2396, 1172, 2414, 3017,
  375, 3022, 3036, 1009, 1188, 1204, 63, 220, 1220, 1236,
  391, 1252, 239, 1268, 407, 1284, 1300, 258, 1316, 423,
  103, 1023, 274};
static const unsigned char athlon_fp_min_issue_delay[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 6, 0, 0, 9, 9, 9, 9, 9, 9,
    9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
    9, 9, 15, 0, 0, 8, 8, 8, 8, 8,
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
    8, 8, 8, 14, 0, 0, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 13, 0, 0, 6, 6, 6,
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    6, 6, 6, 6, 6, 12, 0, 0, 5, 5,
    5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
    5, 5, 5, 5, 5, 5, 11, 0, 0, 4,
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    4, 4, 4, 4, 4, 4, 4, 10, 0, 0,
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3, 9, 0,
    0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    2, 2, 2, 2, 2, 2, 2, 2, 2, 8,
    0, 0, 1, 1, 0, 1, 1, 1, 0, 0,
    0, 1, 0, 0, 0, 1, 1, 1, 0, 0,
    6, 0, 0, 1, 1, 0, 1, 1, 1, 0,
    0, 1, 1, 0, 1, 0, 1, 1, 1, 1,
    1, 6, 0, 0, 2, 2, 1, 2, 2, 2,
    1, 1, 1, 2, 1, 1, 1, 2, 2, 2,
    1, 1, 7, 0, 0, 2, 2, 1, 1, 2,
    2, 1, 2, 1, 1, 1, 1, 2, 2, 1,
    2, 1, 1, 6, 0, 0, 1, 1, 0, 0,
    1, 1, 0, 1, 0, 0, 0, 0, 1, 1,
    0, 1, 0, 0, 5, 0, 0, 1, 1, 0,
    1, 1, 1, 0, 1, 0, 1, 0, 0, 1,
    1, 1, 1, 0, 0, 5, 0, 0, 2, 2,
    1, 1, 2, 2, 1, 1, 2, 1, 1, 2,
    1, 2, 1, 2, 2, 2, 5, 0, 0, 1,
    1, 0, 0, 1, 1, 0, 0, 1, 0, 0,
    1, 0, 1, 0, 1, 1, 1, 4, 0, 0,
    1, 1, 0, 0, 1, 1, 1, 1, 1, 0,
    0, 1, 1, 1, 0, 1, 1, 1, 4, 0,
    0, 3, 3, 1, 3, 3, 3, 1, 1, 1,
    3, 1, 1, 1, 3, 3, 3, 1, 1, 4,
    0, 0, 2, 2, 0, 2, 2, 2, 0, 0,
    0, 2, 0, 0, 0, 2, 2, 2, 0, 0,
    3, 0, 0, 2, 2, 0, 2, 2, 2, 0,
    0, 1, 2, 0, 1, 0, 2, 2, 2, 1,
    1, 6, 0, 0, 2, 2, 1, 2, 2, 2,
    1, 1, 2, 2, 1, 2, 1, 2, 2, 2,
    2, 2, 7, 0, 0, 2, 2, 1, 2, 2,
    2, 1, 2, 1, 2, 1, 1, 2, 2, 2,
    2, 1, 1, 6, 0, 0, 2, 2, 0, 2,
    2, 2, 0, 1, 0, 2, 0, 0, 1, 2,
    2, 2, 0, 0, 3, 0, 0, 17, 17, 1,
    2, 17, 17, 1, 1, 17, 2, 1, 17, 1,
   17, 2, 17, 17, 17, 20, 0, 0, 16, 16,
    0, 1, 16, 16, 0, 0, 16, 1, 0, 16,
    0, 16, 1, 16, 16, 16, 19, 0, 0, 16,
   16, 1, 1, 16, 16, 1, 1, 16, 1, 1,
   16, 1, 16, 1, 16, 16, 16, 19, 0, 0,
   15, 15, 0, 0, 15, 15, 0, 0, 15, 0,
    0, 15, 0, 15, 0, 15, 15, 15, 18, 0,
    0, 15, 15, 0, 1, 15, 15, 0, 0, 15,
    1, 0, 15, 0, 15, 1, 15, 15, 15, 18,
    0, 0, 15, 15, 1, 1, 15, 15, 1, 1,
   15, 1, 1, 15, 1, 15, 1, 15, 15, 15,
   18, 0, 0, 14, 14, 0, 0, 14, 14, 0,
    0, 14, 0, 0, 14, 0, 14, 0, 14, 14,
   14, 17, 0, 0, 14, 14, 0, 1, 14, 14,
    0, 0, 14, 1, 0, 14, 0, 14, 1, 14,
   14, 14, 17, 0, 0, 14, 14, 1, 1, 14,
   14, 1, 1, 14, 1, 1, 14, 1, 14, 1,
   14, 14, 14, 17, 0, 0, 13, 13, 0, 0,
   13, 13, 0, 0, 13, 0, 0, 13, 0, 13,
    0, 13, 13, 13, 16, 0, 0, 13, 13, 0,
    1, 13, 13, 0, 0, 13, 1, 0, 13, 0,
   13, 1, 13, 13, 13, 16, 0, 0, 13, 13,
    1, 1, 13, 13, 1, 1, 13, 1, 1, 13,
    1, 13, 1, 13, 13, 13, 16, 0, 0, 12,
   12, 0, 0, 12, 12, 0, 0, 12, 0, 0,
   12, 0, 12, 0, 12, 12, 12, 15, 0, 0,
   12, 12, 0, 1, 12, 12, 0, 0, 12, 1,
    0, 12, 0, 12, 1, 12, 12, 12, 15, 0,
    0, 12, 12, 1, 1, 12, 12, 1, 1, 12,
    1, 1, 12, 1, 12, 1, 12, 12, 12, 15,
    0, 0, 11, 11, 0, 0, 11, 11, 0, 0,
   11, 0, 0, 11, 0, 11, 0, 11, 11, 11,
   14, 0, 0, 11, 11, 0, 1, 11, 11, 0,
    0, 11, 1, 0, 11, 0, 11, 1, 11, 11,
   11, 14, 0, 0, 11, 11, 1, 1, 11, 11,
    1, 1, 11, 1, 1, 11, 1, 11, 1, 11,
   11, 11, 14, 0, 0, 10, 10, 0, 0, 10,
   10, 0, 0, 10, 0, 0, 10, 0, 10, 0,
   10, 10, 10, 13, 0, 0, 10, 10, 0, 1,
   10, 10, 0, 0, 10, 1, 0, 10, 0, 10,
    1, 10, 10, 10, 13, 0, 0, 10, 10, 1,
    1, 10, 10, 1, 1, 10, 1, 1, 10, 1,
   10, 1, 10, 10, 10, 13, 0, 0, 9, 9,
    0, 0, 9, 9, 0, 0, 9, 0, 0, 9,
    0, 9, 0, 9, 9, 9, 12, 0, 0, 9,
    9, 0, 1, 9, 9, 0, 0, 9, 1, 0,
    9, 0, 9, 1, 9, 9, 9, 12, 0, 0,
    9, 9, 1, 1, 9, 9, 1, 1, 9, 1,
    1, 9, 1, 9, 1, 9, 9, 9, 12, 0,
    0, 8, 8, 0, 0, 8, 8, 0, 0, 8,
    0, 0, 8, 0, 8, 0, 8, 8, 8, 11,
    0, 0, 8, 8, 0, 1, 8, 8, 0, 0,
    8, 1, 0, 8, 0, 8, 1, 8, 8, 8,
   11, 0, 0, 8, 8, 1, 1, 8, 8, 1,
    1, 8, 1, 1, 8, 1, 8, 1, 8, 8,
    8, 11, 0, 0, 7, 7, 0, 0, 7, 7,
    0, 0, 7, 0, 0, 7, 0, 7, 0, 7,
    7, 7, 10, 0, 0, 7, 7, 0, 1, 7,
    7, 0, 0, 7, 1, 0, 7, 0, 7, 1,
    7, 7, 7, 10, 0, 0, 7, 7, 1, 1,
    7, 7, 1, 1, 7, 1, 1, 7, 1, 7,
    1, 7, 7, 7, 10, 0, 0, 6, 6, 0,
    0, 6, 6, 0, 0, 6, 0, 0, 6, 0,
    6, 0, 6, 6, 6, 9, 0, 0, 6, 6,
    0, 1, 6, 6, 0, 0, 6, 1, 0, 6,
    0, 6, 1, 6, 6, 6, 9, 0, 0, 6,
    6, 1, 1, 6, 6, 1, 1, 6, 1, 1,
    6, 1, 6, 1, 6, 6, 6, 9, 0, 0,
    5, 5, 0, 0, 5, 5, 0, 0, 5, 0,
    0, 5, 0, 5, 0, 5, 5, 5, 8, 0,
    0, 5, 5, 0, 1, 5, 5, 0, 0, 5,
    1, 0, 5, 0, 5, 1, 5, 5, 5, 8,
    0, 0, 5, 5, 1, 1, 5, 5, 1, 1,
    5, 1, 1, 5, 1, 5, 1, 5, 5, 5,
    8, 0, 0, 4, 4, 0, 0, 4, 4, 0,
    0, 4, 0, 0, 4, 0, 4, 0, 4, 4,
    4, 7, 0, 0, 4, 4, 0, 1, 4, 4,
    0, 0, 4, 1, 0, 4, 0, 4, 1, 4,
    4, 4, 7, 0, 0, 4, 4, 1, 1, 4,
    4, 1, 1, 4, 1, 1, 4, 1, 4, 1,
    4, 4, 4, 7, 0, 0, 3, 3, 0, 0,
    3, 3, 0, 0, 3, 0, 0, 3, 0, 3,
    0, 3, 3, 3, 6, 0, 0, 3, 3, 0,
    1, 3, 3, 0, 0, 3, 1, 0, 3, 0,
    3, 1, 3, 3, 3, 6, 0, 0, 3, 3,
    1, 1, 3, 3, 1, 1, 3, 1, 1, 3,
    1, 3, 1, 3, 3, 3, 6, 0, 0, 2,
    2, 0, 0, 2, 2, 0, 0, 2, 0, 0,
    2, 0, 2, 0, 2, 2, 2, 5, 0, 0,
    2, 2, 0, 1, 2, 2, 0, 0, 2, 1,
    0, 2, 0, 2, 1, 2, 2, 2, 5, 0,
    0, 2, 2, 1, 1, 2, 2, 2, 2, 2,
    1, 1, 2, 2, 2, 1, 2, 2, 2, 5,
    0, 0, 2, 2, 0, 0, 2, 2, 1, 1,
    2, 0, 0, 2, 1, 2, 0, 2, 2, 2,
    5, 0, 0, 3, 3, 1, 3, 3, 3, 1,
    1, 2, 3, 1, 2, 1, 3, 3, 3, 2,
    2, 7, 0, 0, 2, 2, 0, 2, 2, 2,
    0, 0, 2, 2, 0, 2, 0, 2, 2, 2,
    2, 2, 7, 0, 0, 2, 2, 0, 0, 2,
    2, 2, 2, 2, 0, 0, 2, 2, 2, 0,
    2, 2, 2, 5, 0, 0, 3, 3, 2, 3,
    3, 3, 2, 2, 2, 3, 2, 2, 2, 3,
    3, 3, 2, 2, 8, 0, 0, 3, 3, 0,
    3, 3, 3, 0, 0, 2, 3, 0, 2, 0,
    3, 3, 3, 2, 2, 7, 0, 0, 3, 3,
    1, 2, 3, 3, 1, 1, 3, 2, 1, 3,
    1, 3, 2, 3, 3, 3, 6, 0, 0, 3,
    3, 1, 1, 3, 3, 2, 2, 3, 1, 1,
    3, 2, 3, 1, 3, 3, 3, 6, 0, 0,
    3, 3, 0, 0, 3, 3, 1, 1, 3, 0,
    0, 3, 1, 3, 0, 3, 3, 3, 6, 0,
    0, 3, 3, 1, 3, 3, 3, 1, 1, 3,
    3, 1, 3, 1, 3, 3, 3, 3, 3, 8,
    0, 0, 3, 3, 0, 2, 3, 3, 0, 0,
    3, 2, 0, 3, 0, 3, 2, 3, 3, 3,
    6, 0, 0, 3, 3, 2, 2, 3, 3, 2,
    2, 3, 2, 2, 3, 2, 3, 2, 3, 3,
    3, 6, 0, 0, 3, 3, 0, 0, 3, 3,
    2, 2, 3, 0, 0, 3, 2, 3, 0, 3,
    3, 3, 6, 0, 0, 3, 3, 2, 3, 3,
    3, 2, 2, 3, 3, 2, 3, 2, 3, 3,
    3, 3, 3, 8, 0, 0, 3, 3, 0, 3,
    3, 3, 0, 0, 3, 3, 0, 3, 0, 3,
    3, 3, 3, 3, 8, 0, 0, 4, 4, 1,
    2, 4, 4, 1, 1, 4, 2, 1, 4, 1,
    4, 2, 4, 4, 4, 7, 0, 0, 4, 4,
    1, 1, 4, 4, 2, 2, 4, 1, 1, 4,
    2, 4, 1, 4, 4, 4, 7, 0, 0, 4,
    4, 0, 0, 4, 4, 1, 1, 4, 0, 0,
    4, 1, 4, 0, 4, 4, 4, 7, 0, 0,
    4, 4, 1, 3, 4, 4, 1, 1, 4, 3,
    1, 4, 1, 4, 3, 4, 4, 4, 7, 0,
    0, 4, 4, 0, 2, 4, 4, 0, 0, 4,
    2, 0, 4, 0, 4, 2, 4, 4, 4, 7,
    0, 0, 4, 4, 2, 2, 4, 4, 2, 2,
    4, 2, 2, 4, 2, 4, 2, 4, 4, 4,
    7, 0, 0, 4, 4, 0, 0, 4, 4, 2,
    2, 4, 0, 0, 4, 2, 4, 0, 4, 4,
    4, 7, 0, 0, 4, 4, 2, 3, 4, 4,
    2, 2, 4, 3, 2, 4, 2, 4, 3, 4,
    4, 4, 7, 0, 0, 4, 4, 0, 3, 4,
    4, 0, 0, 4, 3, 0, 4, 0, 4, 3,
    4, 4, 4, 7, 0, 0, 5, 5, 1, 2,
    5, 5, 1, 1, 5, 2, 1, 5, 1, 5,
    2, 5, 5, 5, 8, 0, 0, 5, 5, 1,
    1, 5, 5, 2, 2, 5, 1, 1, 5, 2,
    5, 1, 5, 5, 5, 8, 0, 0, 5, 5,
    0, 0, 5, 5, 1, 1, 5, 0, 0, 5,
    1, 5, 0, 5, 5, 5, 8, 0, 0, 5,
    5, 1, 3, 5, 5, 1, 1, 5, 3, 1,
    5, 1, 5, 3, 5, 5, 5, 8, 0, 0,
    5, 5, 0, 2, 5, 5, 0, 0, 5, 2,
    0, 5, 0, 5, 2, 5, 5, 5, 8, 0,
    0, 5, 5, 2, 2, 5, 5, 2, 2, 5,
    2, 2, 5, 2, 5, 2, 5, 5, 5, 8,
    0, 0, 5, 5, 0, 0, 5, 5, 2, 2,
    5, 0, 0, 5, 2, 5, 0, 5, 5, 5,
    8, 0, 0, 5, 5, 2, 3, 5, 5, 2,
    2, 5, 3, 2, 5, 2, 5, 3, 5, 5,
    5, 8, 0, 0, 5, 5, 0, 3, 5, 5,
    0, 0, 5, 3, 0, 5, 0, 5, 3, 5,
    5, 5, 8, 0, 0, 6, 6, 1, 2, 6,
    6, 1, 1, 6, 2, 1, 6, 1, 6, 2,
    6, 6, 6, 9, 0, 0, 6, 6, 1, 1,
    6, 6, 2, 2, 6, 1, 1, 6, 2, 6,
    1, 6, 6, 6, 9, 0, 0, 6, 6, 0,
    0, 6, 6, 1, 1, 6, 0, 0, 6, 1,
    6, 0, 6, 6, 6, 9, 0, 0, 6, 6,
    1, 3, 6, 6, 1, 1, 6, 3, 1, 6,
    1, 6, 3, 6, 6, 6, 9, 0, 0, 6,
    6, 0, 2, 6, 6, 0, 0, 6, 2, 0,
    6, 0, 6, 2, 6, 6, 6, 9, 0, 0,
    6, 6, 2, 2, 6, 6, 2, 2, 6, 2,
    2, 6, 2, 6, 2, 6, 6, 6, 9, 0,
    0, 6, 6, 0, 0, 6, 6, 2, 2, 6,
    0, 0, 6, 2, 6, 0, 6, 6, 6, 9,
    0, 0, 6, 6, 2, 3, 6, 6, 2, 2,
    6, 3, 2, 6, 2, 6, 3, 6, 6, 6,
    9, 0, 0, 6, 6, 0, 3, 6, 6, 0,
    0, 6, 3, 0, 6, 0, 6, 3, 6, 6,
    6, 9, 0, 0, 7, 7, 1, 2, 7, 7,
    1, 1, 7, 2, 1, 7, 1, 7, 2, 7,
    7, 7, 10, 0, 0, 7, 7, 1, 1, 7,
    7, 2, 2, 7, 1, 1, 7, 2, 7, 1,
    7, 7, 7, 10, 0, 0, 7, 7, 0, 0,
    7, 7, 1, 1, 7, 0, 0, 7, 1, 7,
    0, 7, 7, 7, 10, 0, 0, 7, 7, 1,
    3, 7, 7, 1, 1, 7, 3, 1, 7, 1,
    7, 3, 7, 7, 7, 10, 0, 0, 7, 7,
    0, 2, 7, 7, 0, 0, 7, 2, 0, 7,
    0, 7, 2, 7, 7, 7, 10, 0, 0, 7,
    7, 2, 2, 7, 7, 2, 2, 7, 2, 2,
    7, 2, 7, 2, 7, 7, 7, 10, 0, 0,
    7, 7, 0, 0, 7, 7, 2, 2, 7, 0,
    0, 7, 2, 7, 0, 7, 7, 7, 10, 0,
    0, 7, 7, 2, 3, 7, 7, 2, 2, 7,
    3, 2, 7, 2, 7, 3, 7, 7, 7, 10,
    0, 0, 7, 7, 0, 3, 7, 7, 0, 0,
    7, 3, 0, 7, 0, 7, 3, 7, 7, 7,
   10, 0, 0, 8, 8, 1, 2, 8, 8, 1,
    1, 8, 2, 1, 8, 1, 8, 2, 8, 8,
    8, 11, 0, 0, 8, 8, 1, 1, 8, 8,
    2, 2, 8, 1, 1, 8, 2, 8, 1, 8,
    8, 8, 11, 0, 0, 8, 8, 0, 0, 8,
    8, 1, 1, 8, 0, 0, 8, 1, 8, 0,
    8, 8, 8, 11, 0, 0, 8, 8, 1, 3,
    8, 8, 1, 1, 8, 3, 1, 8, 1, 8,
    3, 8, 8, 8, 11, 0, 0, 8, 8, 0,
    2, 8, 8, 0, 0, 8, 2, 0, 8, 0,
    8, 2, 8, 8, 8, 11, 0, 0, 8, 8,
    2, 2, 8, 8, 2, 2, 8, 2, 2, 8,
    2, 8, 2, 8, 8, 8, 11, 0, 0, 8,
    8, 0, 0, 8, 8, 2, 2, 8, 0, 0,
    8, 2, 8, 0, 8, 8, 8, 11, 0, 0,
    8, 8, 2, 3, 8, 8, 2, 2, 8, 3,
    2, 8, 2, 8, 3, 8, 8, 8, 11, 0,
    0, 8, 8, 0, 3, 8, 8, 0, 0, 8,
    3, 0, 8, 0, 8, 3, 8, 8, 8, 11,
    0, 0, 9, 9, 1, 2, 9, 9, 1, 1,
    9, 2, 1, 9, 1, 9, 2, 9, 9, 9,
   12, 0, 0, 9, 9, 1, 1, 9, 9, 2,
    2, 9, 1, 1, 9, 2, 9, 1, 9, 9,
    9, 12, 0, 0, 9, 9, 0, 0, 9, 9,
    1, 1, 9, 0, 0, 9, 1, 9, 0, 9,
    9, 9, 12, 0, 0, 9, 9, 1, 3, 9,
    9, 1, 1, 9, 3, 1, 9, 1, 9, 3,
    9, 9, 9, 12, 0, 0, 9, 9, 0, 2,
    9, 9, 0, 0, 9, 2, 0, 9, 0, 9,
    2, 9, 9, 9, 12, 0, 0, 9, 9, 2,
    2, 9, 9, 2, 2, 9, 2, 2, 9, 2,
    9, 2, 9, 9, 9, 12, 0, 0, 9, 9,
    0, 0, 9, 9, 2, 2, 9, 0, 0, 9,
    2, 9, 0, 9, 9, 9, 12, 0, 0, 9,
    9, 2, 3, 9, 9, 2, 2, 9, 3, 2,
    9, 2, 9, 3, 9, 9, 9, 12, 0, 0,
    9, 9, 0, 3, 9, 9, 0, 0, 9, 3,
    0, 9, 0, 9, 3, 9, 9, 9, 12, 0,
    0, 10, 10, 1, 2, 10, 10, 1, 1, 10,
    2, 1, 10, 1, 10, 2, 10, 10, 10, 13,
    0, 0, 10, 10, 1, 1, 10, 10, 2, 2,
   10, 1, 1, 10, 2, 10, 1, 10, 10, 10,
   13, 0, 0, 10, 10, 0, 0, 10, 10, 1,
    1, 10, 0, 0, 10, 1, 10, 0, 10, 10,
   10, 13, 0, 0, 10, 10, 1, 3, 10, 10,
    1, 1, 10, 3, 1, 10, 1, 10, 3, 10,
   10, 10, 13, 0, 0, 10, 10, 0, 2, 10,
   10, 0, 0, 10, 2, 0, 10, 0, 10, 2,
   10, 10, 10, 13, 0, 0, 10, 10, 2, 2,
   10, 10, 2, 2, 10, 2, 2, 10, 2, 10,
    2, 10, 10, 10, 13, 0, 0, 10, 10, 0,
    0, 10, 10, 2, 2, 10, 0, 0, 10, 2,
   10, 0, 10, 10, 10, 13, 0, 0, 10, 10,
    2, 3, 10, 10, 2, 2, 10, 3, 2, 10,
    2, 10, 3, 10, 10, 10, 13, 0, 0, 10,
   10, 0, 3, 10, 10, 0, 0, 10, 3, 0,
   10, 0, 10, 3, 10, 10, 10, 13, 0, 0,
   11, 11, 1, 2, 11, 11, 1, 1, 11, 2,
    1, 11, 1, 11, 2, 11, 11, 11, 14, 0,
    0, 11, 11, 1, 1, 11, 11, 2, 2, 11,
    1, 1, 11, 2, 11, 1, 11, 11, 11, 14,
    0, 0, 11, 11, 0, 0, 11, 11, 1, 1,
   11, 0, 0, 11, 1, 11, 0, 11, 11, 11,
   14, 0, 0, 11, 11, 1, 3, 11, 11, 1,
    1, 11, 3, 1, 11, 1, 11, 3, 11, 11,
   11, 14, 0, 0, 11, 11, 0, 2, 11, 11,
    0, 0, 11, 2, 0, 11, 0, 11, 2, 11,
   11, 11, 14, 0, 0, 11, 11, 2, 2, 11,
   11, 2, 2, 11, 2, 2, 11, 2, 11, 2,
   11, 11, 11, 14, 0, 0, 11, 11, 0, 0,
   11, 11, 2, 2, 11, 0, 0, 11, 2, 11,
    0, 11, 11, 11, 14, 0, 0, 11, 11, 2,
    3, 11, 11, 2, 2, 11, 3, 2, 11, 2,
   11, 3, 11, 11, 11, 14, 0, 0, 11, 11,
    0, 3, 11, 11, 0, 0, 11, 3, 0, 11,
    0, 11, 3, 11, 11, 11, 14, 0, 0, 12,
   12, 1, 2, 12, 12, 1, 1, 12, 2, 1,
   12, 1, 12, 2, 12, 12, 12, 15, 0, 0,
   12, 12, 1, 1, 12, 12, 2, 2, 12, 1,
    1, 12, 2, 12, 1, 12, 12, 12, 15, 0,
    0, 12, 12, 0, 0, 12, 12, 1, 1, 12,
    0, 0, 12, 1, 12, 0, 12, 12, 12, 15,
    0, 0, 12, 12, 1, 3, 12, 12, 1, 1,
   12, 3, 1, 12, 1, 12, 3, 12, 12, 12,
   15, 0, 0, 12, 12, 0, 2, 12, 12, 0,
    0, 12, 2, 0, 12, 0, 12, 2, 12, 12,
   12, 15, 0, 0, 12, 12, 2, 2, 12, 12,
    2, 2, 12, 2, 2, 12, 2, 12, 2, 12,
   12, 12, 15, 0, 0, 12, 12, 0, 0, 12,
   12, 2, 2, 12, 0, 0, 12, 2, 12, 0,
   12, 12, 12, 15, 0, 0, 12, 12, 2, 3,
   12, 12, 2, 2, 12, 3, 2, 12, 2, 12,
    3, 12, 12, 12, 15, 0, 0, 12, 12, 0,
    3, 12, 12, 0, 0, 12, 3, 0, 12, 0,
   12, 3, 12, 12, 12, 15, 0, 0, 13, 13,
    1, 2, 13, 13, 1, 1, 13, 2, 1, 13,
    1, 13, 2, 13, 13, 13, 16, 0, 0, 13,
   13, 1, 1, 13, 13, 2, 2, 13, 1, 1,
   13, 2, 13, 1, 13, 13, 13, 16, 0, 0,
   13, 13, 0, 0, 13, 13, 1, 1, 13, 0,
    0, 13, 1, 13, 0, 13, 13, 13, 16, 0,
    0, 13, 13, 1, 3, 13, 13, 1, 1, 13,
    3, 1, 13, 1, 13, 3, 13, 13, 13, 16,
    0, 0, 13, 13, 0, 2, 13, 13, 0, 0,
   13, 2, 0, 13, 0, 13, 2, 13, 13, 13,
   16, 0, 0, 13, 13, 2, 2, 13, 13, 2,
    2, 13, 2, 2, 13, 2, 13, 2, 13, 13,
   13, 16, 0, 0, 13, 13, 0, 0, 13, 13,
    2, 2, 13, 0, 0, 13, 2, 13, 0, 13,
   13, 13, 16, 0, 0, 13, 13, 2, 3, 13,
   13, 2, 2, 13, 3, 2, 13, 2, 13, 3,
   13, 13, 13, 16, 0, 0, 13, 13, 0, 3,
   13, 13, 0, 0, 13, 3, 0, 13, 0, 13,
    3, 13, 13, 13, 16, 0, 0, 14, 14, 1,
    2, 14, 14, 1, 1, 14, 2, 1, 14, 1,
   14, 2, 14, 14, 14, 17, 0, 0, 14, 14,
    1, 1, 14, 14, 2, 2, 14, 1, 1, 14,
    2, 14, 1, 14, 14, 14, 17, 0, 0, 14,
   14, 0, 0, 14, 14, 1, 1, 14, 0, 0,
   14, 1, 14, 0, 14, 14, 14, 17, 0, 0,
   14, 14, 1, 3, 14, 14, 1, 1, 14, 3,
    1, 14, 1, 14, 3, 14, 14, 14, 17, 0,
    0, 14, 14, 0, 2, 14, 14, 0, 0, 14,
    2, 0, 14, 0, 14, 2, 14, 14, 14, 17,
    0, 0, 14, 14, 2, 2, 14, 14, 2, 2,
   14, 2, 2, 14, 2, 14, 2, 14, 14, 14,
   17, 0, 0, 14, 14, 0, 0, 14, 14, 2,
    2, 14, 0, 0, 14, 2, 14, 0, 14, 14,
   14, 17, 0, 0, 14, 14, 2, 3, 14, 14,
    2, 2, 14, 3, 2, 14, 2, 14, 3, 14,
   14, 14, 17, 0, 0, 14, 14, 0, 3, 14,
   14, 0, 0, 14, 3, 0, 14, 0, 14, 3,
   14, 14, 14, 17, 0, 0, 15, 15, 1, 2,
   15, 15, 1, 1, 15, 2, 1, 15, 1, 15,
    2, 15, 15, 15, 18, 0, 0, 15, 15, 1,
    1, 15, 15, 2, 2, 15, 1, 1, 15, 2,
   15, 1, 15, 15, 15, 18, 0, 0, 15, 15,
    0, 0, 15, 15, 1, 1, 15, 0, 0, 15,
    1, 15, 0, 15, 15, 15, 18, 0, 0, 15,
   15, 1, 3, 15, 15, 1, 1, 15, 3, 1,
   15, 1, 15, 3, 15, 15, 15, 18, 0, 0,
   15, 15, 0, 2, 15, 15, 0, 0, 15, 2,
    0, 15, 0, 15, 2, 15, 15, 15, 18, 0,
    0, 15, 15, 2, 2, 15, 15, 2, 2, 15,
    2, 2, 15, 2, 15, 2, 15, 15, 15, 18,
    0, 0, 15, 15, 0, 0, 15, 15, 2, 2,
   15, 0, 0, 15, 2, 15, 0, 15, 15, 15,
   18, 0, 0, 15, 15, 2, 3, 15, 15, 2,
    2, 15, 3, 2, 15, 2, 15, 3, 15, 15,
   15, 18, 0, 0, 15, 15, 0, 3, 15, 15,
    0, 0, 15, 3, 0, 15, 0, 15, 3, 15,
   15, 15, 18, 0, 0, 16, 16, 1, 2, 16,
   16, 1, 1, 16, 2, 1, 16, 1, 16, 2,
   16, 16, 16, 19, 0, 0, 16, 16, 1, 1,
   16, 16, 2, 2, 16, 1, 1, 16, 2, 16,
    1, 16, 16, 16, 19, 0, 0, 34, 34, 1,
    2, 34, 34, 1, 1, 34, 2, 1, 34, 1,
   34, 2, 34, 34, 34, 37, 0, 0, 33, 33,
    0, 1, 33, 33, 0, 0, 33, 1, 0, 33,
    0, 33, 1, 33, 33, 33, 36, 0, 0, 33,
   33, 1, 1, 33, 33, 1, 1, 33, 1, 1,
   33, 1, 33, 1, 33, 33, 33, 36, 0, 0,
   32, 32, 0, 0, 32, 32, 0, 0, 32, 0,
    0, 32, 0, 32, 0, 32, 32, 32, 35, 0,
    0, 32, 32, 0, 1, 32, 32, 0, 0, 32,
    1, 0, 32, 0, 32, 1, 32, 32, 32, 35,
    0, 0, 32, 32, 1, 1, 32, 32, 1, 1,
   32, 1, 1, 32, 1, 32, 1, 32, 32, 32,
   35, 0, 0, 31, 31, 0, 0, 31, 31, 0,
    0, 31, 0, 0, 31, 0, 31, 0, 31, 31,
   31, 34, 0, 0, 31, 31, 0, 1, 31, 31,
    0, 0, 31, 1, 0, 31, 0, 31, 1, 31,
   31, 31, 34, 0, 0, 31, 31, 1, 1, 31,
   31, 1, 1, 31, 1, 1, 31, 1, 31, 1,
   31, 31, 31, 34, 0, 0, 30, 30, 0, 0,
   30, 30, 0, 0, 30, 0, 0, 30, 0, 30,
    0, 30, 30, 30, 33, 0, 0, 30, 30, 0,
    1, 30, 30, 0, 0, 30, 1, 0, 30, 0,
   30, 1, 30, 30, 30, 33, 0, 0, 30, 30,
    1, 1, 30, 30, 1, 1, 30, 1, 1, 30,
    1, 30, 1, 30, 30, 30, 33, 0, 0, 29,
   29, 0, 0, 29, 29, 0, 0, 29, 0, 0,
   29, 0, 29, 0, 29, 29, 29, 32, 0, 0,
   29, 29, 0, 1, 29, 29, 0, 0, 29, 1,
    0, 29, 0, 29, 1, 29, 29, 29, 32, 0,
    0, 29, 29, 1, 1, 29, 29, 1, 1, 29,
    1, 1, 29, 1, 29, 1, 29, 29, 29, 32,
    0, 0, 28, 28, 0, 0, 28, 28, 0, 0,
   28, 0, 0, 28, 0, 28, 0, 28, 28, 28,
   31, 0, 0, 28, 28, 0, 1, 28, 28, 0,
    0, 28, 1, 0, 28, 0, 28, 1, 28, 28,
   28, 31, 0, 0, 28, 28, 1, 1, 28, 28,
    1, 1, 28, 1, 1, 28, 1, 28, 1, 28,
   28, 28, 31, 0, 0, 27, 27, 0, 0, 27,
   27, 0, 0, 27, 0, 0, 27, 0, 27, 0,
   27, 27, 27, 30, 0, 0, 27, 27, 0, 1,
   27, 27, 0, 0, 27, 1, 0, 27, 0, 27,
    1, 27, 27, 27, 30, 0, 0, 27, 27, 1,
    1, 27, 27, 1, 1, 27, 1, 1, 27, 1,
   27, 1, 27, 27, 27, 30, 0, 0, 26, 26,
    0, 0, 26, 26, 0, 0, 26, 0, 0, 26,
    0, 26, 0, 26, 26, 26, 29, 0, 0, 26,
   26, 0, 1, 26, 26, 0, 0, 26, 1, 0,
   26, 0, 26, 1, 26, 26, 26, 29, 0, 0,
   26, 26, 1, 1, 26, 26, 1, 1, 26, 1,
    1, 26, 1, 26, 1, 26, 26, 26, 29, 0,
    0, 25, 25, 0, 0, 25, 25, 0, 0, 25,
    0, 0, 25, 0, 25, 0, 25, 25, 25, 28,
    0, 0, 25, 25, 0, 1, 25, 25, 0, 0,
   25, 1, 0, 25, 0, 25, 1, 25, 25, 25,
   28, 0, 0, 25, 25, 1, 1, 25, 25, 1,
    1, 25, 1, 1, 25, 1, 25, 1, 25, 25,
   25, 28, 0, 0, 24, 24, 0, 0, 24, 24,
    0, 0, 24, 0, 0, 24, 0, 24, 0, 24,
   24, 24, 27, 0, 0, 24, 24, 0, 1, 24,
   24, 0, 0, 24, 1, 0, 24, 0, 24, 1,
   24, 24, 24, 27, 0, 0, 24, 24, 1, 1,
   24, 24, 1, 1, 24, 1, 1, 24, 1, 24,
    1, 24, 24, 24, 27, 0, 0, 23, 23, 0,
    0, 23, 23, 0, 0, 23, 0, 0, 23, 0,
   23, 0, 23, 23, 23, 26, 0, 0, 23, 23,
    0, 1, 23, 23, 0, 0, 23, 1, 0, 23,
    0, 23, 1, 23, 23, 23, 26, 0, 0, 23,
   23, 1, 1, 23, 23, 1, 1, 23, 1, 1,
   23, 1, 23, 1, 23, 23, 23, 26, 0, 0,
   22, 22, 0, 0, 22, 22, 0, 0, 22, 0,
    0, 22, 0, 22, 0, 22, 22, 22, 25, 0,
    0, 22, 22, 0, 1, 22, 22, 0, 0, 22,
    1, 0, 22, 0, 22, 1, 22, 22, 22, 25,
    0, 0, 22, 22, 1, 1, 22, 22, 1, 1,
   22, 1, 1, 22, 1, 22, 1, 22, 22, 22,
   25, 0, 0, 21, 21, 0, 0, 21, 21, 0,
    0, 21, 0, 0, 21, 0, 21, 0, 21, 21,
   21, 24, 0, 0, 21, 21, 0, 1, 21, 21,
    0, 0, 21, 1, 0, 21, 0, 21, 1, 21,
   21, 21, 24, 0, 0, 21, 21, 1, 1, 21,
   21, 1, 1, 21, 1, 1, 21, 1, 21, 1,
   21, 21, 21, 24, 0, 0, 20, 20, 0, 0,
   20, 20, 0, 0, 20, 0, 0, 20, 0, 20,
    0, 20, 20, 20, 23, 0, 0, 20, 20, 0,
    1, 20, 20, 0, 0, 20, 1, 0, 20, 0,
   20, 1, 20, 20, 20, 23, 0, 0, 20, 20,
    1, 1, 20, 20, 1, 1, 20, 1, 1, 20,
    1, 20, 1, 20, 20, 20, 23, 0, 0, 19,
   19, 0, 0, 19, 19, 0, 0, 19, 0, 0,
   19, 0, 19, 0, 19, 19, 19, 22, 0, 0,
   19, 19, 0, 1, 19, 19, 0, 0, 19, 1,
    0, 19, 0, 19, 1, 19, 19, 19, 22, 0,
    0, 19, 19, 1, 1, 19, 19, 1, 1, 19,
    1, 1, 19, 1, 19, 1, 19, 19, 19, 22,
    0, 0, 18, 18, 0, 0, 18, 18, 0, 0,
   18, 0, 0, 18, 0, 18, 0, 18, 18, 18,
   21, 0, 0, 18, 18, 0, 1, 18, 18, 0,
    0, 18, 1, 0, 18, 0, 18, 1, 18, 18,
   18, 21, 0, 0, 18, 18, 1, 1, 18, 18,
    1, 1, 18, 1, 1, 18, 1, 18, 1, 18,
   18, 18, 21, 0, 0, 17, 17, 0, 0, 17,
   17, 0, 0, 17, 0, 0, 17, 0, 17, 0,
   17, 17, 17, 20, 0, 0, 17, 17, 0, 1,
   17, 17, 0, 0, 17, 1, 0, 17, 0, 17,
    1, 17, 17, 17, 20, 0, 0, 17, 17, 1,
    1, 17, 17, 1, 1, 17, 1, 1, 17, 1,
   17, 1, 17, 17, 17, 20, 0, 0, 16, 16,
    0, 0, 16, 16, 0, 0, 16, 0, 0, 16,
    0, 16, 0, 16, 16, 16, 19, 0, 0, 16,
   16, 0, 0, 16, 16, 1, 1, 16, 0, 0,
   16, 1, 16, 0, 16, 16, 16, 19, 0, 0,
   16, 16, 1, 3, 16, 16, 1, 1, 16, 3,
    1, 16, 1, 16, 3, 16, 16, 16, 19, 0,
    0, 16, 16, 0, 2, 16, 16, 0, 0, 16,
    2, 0, 16, 0, 16, 2, 16, 16, 16, 19,
    0, 0, 16, 16, 2, 2, 16, 16, 2, 2,
   16, 2, 2, 16, 2, 16, 2, 16, 16, 16,
   19, 0, 0, 16, 16, 0, 0, 16, 16, 2,
    2, 16, 0, 0, 16, 2, 16, 0, 16, 16,
   16, 19, 0, 0, 16, 16, 2, 3, 16, 16,
    2, 2, 16, 3, 2, 16, 2, 16, 3, 16,
   16, 16, 19, 0, 0, 16, 16, 0, 3, 16,
   16, 0, 0, 16, 3, 0, 16, 0, 16, 3,
   16, 16, 16, 19, 0, 0, 17, 17, 1, 1,
   17, 17, 2, 2, 17, 1, 1, 17, 2, 17,
    1, 17, 17, 17, 20, 0, 0, 17, 17, 0,
    0, 17, 17, 1, 1, 17, 0, 0, 17, 1,
   17, 0, 17, 17, 17, 20, 0, 0, 17, 17,
    1, 3, 17, 17, 1, 1, 17, 3, 1, 17,
    1, 17, 3, 17, 17, 17, 20, 0, 0, 17,
   17, 0, 2, 17, 17, 0, 0, 17, 2, 0,
   17, 0, 17, 2, 17, 17, 17, 20, 0, 0,
   17, 17, 2, 2, 17, 17, 2, 2, 17, 2,
    2, 17, 2, 17, 2, 17, 17, 17, 20, 0,
    0, 17, 17, 0, 0, 17, 17, 2, 2, 17,
    0, 0, 17, 2, 17, 0, 17, 17, 17, 20,
    0, 0, 17, 17, 2, 3, 17, 17, 2, 2,
   17, 3, 2, 17, 2, 17, 3, 17, 17, 17,
   20, 0, 0, 17, 17, 0, 3, 17, 17, 0,
    0, 17, 3, 0, 17, 0, 17, 3, 17, 17,
   17, 20, 0, 0, 18, 18, 1, 2, 18, 18,
    1, 1, 18, 2, 1, 18, 1, 18, 2, 18,
   18, 18, 21, 0, 0, 18, 18, 1, 1, 18,
   18, 2, 2, 18, 1, 1, 18, 2, 18, 1,
   18, 18, 18, 21, 0, 0, 18, 18, 0, 0,
   18, 18, 1, 1, 18, 0, 0, 18, 1, 18,
    0, 18, 18, 18, 21, 0, 0, 18, 18, 1,
    3, 18, 18, 1, 1, 18, 3, 1, 18, 1,
   18, 3, 18, 18, 18, 21, 0, 0, 18, 18,
    0, 2, 18, 18, 0, 0, 18, 2, 0, 18,
    0, 18, 2, 18, 18, 18, 21, 0, 0, 18,
   18, 2, 2, 18, 18, 2, 2, 18, 2, 2,
   18, 2, 18, 2, 18, 18, 18, 21, 0, 0,
   18, 18, 0, 0, 18, 18, 2, 2, 18, 0,
    0, 18, 2, 18, 0, 18, 18, 18, 21, 0,
    0, 18, 18, 2, 3, 18, 18, 2, 2, 18,
    3, 2, 18, 2, 18, 3, 18, 18, 18, 21,
    0, 0, 18, 18, 0, 3, 18, 18, 0, 0,
   18, 3, 0, 18, 0, 18, 3, 18, 18, 18,
   21, 0, 0, 19, 19, 1, 2, 19, 19, 1,
    1, 19, 2, 1, 19, 1, 19, 2, 19, 19,
   19, 22, 0, 0, 19, 19, 1, 1, 19, 19,
    2, 2, 19, 1, 1, 19, 2, 19, 1, 19,
   19, 19, 22, 0, 0, 19, 19, 0, 0, 19,
   19, 1, 1, 19, 0, 0, 19, 1, 19, 0,
   19, 19, 19, 22, 0, 0, 19, 19, 1, 3,
   19, 19, 1, 1, 19, 3, 1, 19, 1, 19,
    3, 19, 19, 19, 22, 0, 0, 19, 19, 0,
    2, 19, 19, 0, 0, 19, 2, 0, 19, 0,
   19, 2, 19, 19, 19, 22, 0, 0, 19, 19,
    2, 2, 19, 19, 2, 2, 19, 2, 2, 19,
    2, 19, 2, 19, 19, 19, 22, 0, 0, 19,
   19, 0, 0, 19, 19, 2, 2, 19, 0, 0,
   19, 2, 19, 0, 19, 19, 19, 22, 0, 0,
   19, 19, 2, 3, 19, 19, 2, 2, 19, 3,
    2, 19, 2, 19, 3, 19, 19, 19, 22, 0,
    0, 19, 19, 0, 3, 19, 19, 0, 0, 19,
    3, 0, 19, 0, 19, 3, 19, 19, 19, 22,
    0, 0, 20, 20, 1, 2, 20, 20, 1, 1,
   20, 2, 1, 20, 1, 20, 2, 20, 20, 20,
   23, 0, 0, 20, 20, 1, 1, 20, 20, 2,
    2, 20, 1, 1, 20, 2, 20, 1, 20, 20,
   20, 23, 0, 0, 20, 20, 0, 0, 20, 20,
    1, 1, 20, 0, 0, 20, 1, 20, 0, 20,
   20, 20, 23, 0, 0, 20, 20, 1, 3, 20,
   20, 1, 1, 20, 3, 1, 20, 1, 20, 3,
   20, 20, 20, 23, 0, 0, 20, 20, 0, 2,
   20, 20, 0, 0, 20, 2, 0, 20, 0, 20,
    2, 20, 20, 20, 23, 0, 0, 20, 20, 2,
    2, 20, 20, 2, 2, 20, 2, 2, 20, 2,
   20, 2, 20, 20, 20, 23, 0, 0, 20, 20,
    0, 0, 20, 20, 2, 2, 20, 0, 0, 20,
    2, 20, 0, 20, 20, 20, 23, 0, 0, 20,
   20, 2, 3, 20, 20, 2, 2, 20, 3, 2,
   20, 2, 20, 3, 20, 20, 20, 23, 0, 0,
   20, 20, 0, 3, 20, 20, 0, 0, 20, 3,
    0, 20, 0, 20, 3, 20, 20, 20, 23, 0,
    0, 21, 21, 1, 2, 21, 21, 1, 1, 21,
    2, 1, 21, 1, 21, 2, 21, 21, 21, 24,
    0, 0, 21, 21, 1, 1, 21, 21, 2, 2,
   21, 1, 1, 21, 2, 21, 1, 21, 21, 21,
   24, 0, 0, 21, 21, 0, 0, 21, 21, 1,
    1, 21, 0, 0, 21, 1, 21, 0, 21, 21,
   21, 24, 0, 0, 21, 21, 1, 3, 21, 21,
    1, 1, 21, 3, 1, 21, 1, 21, 3, 21,
   21, 21, 24, 0, 0, 21, 21, 0, 2, 21,
   21, 0, 0, 21, 2, 0, 21, 0, 21, 2,
   21, 21, 21, 24, 0, 0, 21, 21, 2, 2,
   21, 21, 2, 2, 21, 2, 2, 21, 2, 21,
    2, 21, 21, 21, 24, 0, 0, 21, 21, 0,
    0, 21, 21, 2, 2, 21, 0, 0, 21, 2,
   21, 0, 21, 21, 21, 24, 0, 0, 21, 21,
    2, 3, 21, 21, 2, 2, 21, 3, 2, 21,
    2, 21, 3, 21, 21, 21, 24, 0, 0, 21,
   21, 0, 3, 21, 21, 0, 0, 21, 3, 0,
   21, 0, 21, 3, 21, 21, 21, 24, 0, 0,
   22, 22, 1, 2, 22, 22, 1, 1, 22, 2,
    1, 22, 1, 22, 2, 22, 22, 22, 25, 0,
    0, 22, 22, 1, 1, 22, 22, 2, 2, 22,
    1, 1, 22, 2, 22, 1, 22, 22, 22, 25,
    0, 0, 22, 22, 0, 0, 22, 22, 1, 1,
   22, 0, 0, 22, 1, 22, 0, 22, 22, 22,
   25, 0, 0, 22, 22, 1, 3, 22, 22, 1,
    1, 22, 3, 1, 22, 1, 22, 3, 22, 22,
   22, 25, 0, 0, 22, 22, 0, 2, 22, 22,
    0, 0, 22, 2, 0, 22, 0, 22, 2, 22,
   22, 22, 25, 0, 0, 22, 22, 2, 2, 22,
   22, 2, 2, 22, 2, 2, 22, 2, 22, 2,
   22, 22, 22, 25, 0, 0, 22, 22, 0, 0,
   22, 22, 2, 2, 22, 0, 0, 22, 2, 22,
    0, 22, 22, 22, 25, 0, 0, 22, 22, 2,
    3, 22, 22, 2, 2, 22, 3, 2, 22, 2,
   22, 3, 22, 22, 22, 25, 0, 0, 22, 22,
    0, 3, 22, 22, 0, 0, 22, 3, 0, 22,
    0, 22, 3, 22, 22, 22, 25, 0, 0, 23,
   23, 1, 2, 23, 23, 1, 1, 23, 2, 1,
   23, 1, 23, 2, 23, 23, 23, 26, 0, 0,
   23, 23, 1, 1, 23, 23, 2, 2, 23, 1,
    1, 23, 2, 23, 1, 23, 23, 23, 26, 0,
    0, 23, 23, 0, 0, 23, 23, 1, 1, 23,
    0, 0, 23, 1, 23, 0, 23, 23, 23, 26,
    0, 0, 23, 23, 1, 3, 23, 23, 1, 1,
   23, 3, 1, 23, 1, 23, 3, 23, 23, 23,
   26, 0, 0, 23, 23, 0, 2, 23, 23, 0,
    0, 23, 2, 0, 23, 0, 23, 2, 23, 23,
   23, 26, 0, 0, 23, 23, 2, 2, 23, 23,
    2, 2, 23, 2, 2, 23, 2, 23, 2, 23,
   23, 23, 26, 0, 0, 23, 23, 0, 0, 23,
   23, 2, 2, 23, 0, 0, 23, 2, 23, 0,
   23, 23, 23, 26, 0, 0, 23, 23, 2, 3,
   23, 23, 2, 2, 23, 3, 2, 23, 2, 23,
    3, 23, 23, 23, 26, 0, 0, 23, 23, 0,
    3, 23, 23, 0, 0, 23, 3, 0, 23, 0,
   23, 3, 23, 23, 23, 26, 0, 0, 24, 24,
    1, 2, 24, 24, 1, 1, 24, 2, 1, 24,
    1, 24, 2, 24, 24, 24, 27, 0, 0, 24,
   24, 1, 1, 24, 24, 2, 2, 24, 1, 1,
   24, 2, 24, 1, 24, 24, 24, 27, 0, 0,
   24, 24, 0, 0, 24, 24, 1, 1, 24, 0,
    0, 24, 1, 24, 0, 24, 24, 24, 27, 0,
    0, 24, 24, 1, 3, 24, 24, 1, 1, 24,
    3, 1, 24, 1, 24, 3, 24, 24, 24, 27,
    0, 0, 24, 24, 0, 2, 24, 24, 0, 0,
   24, 2, 0, 24, 0, 24, 2, 24, 24, 24,
   27, 0, 0, 24, 24, 2, 2, 24, 24, 2,
    2, 24, 2, 2, 24, 2, 24, 2, 24, 24,
   24, 27, 0, 0, 24, 24, 0, 0, 24, 24,
    2, 2, 24, 0, 0, 24, 2, 24, 0, 24,
   24, 24, 27, 0, 0, 24, 24, 2, 3, 24,
   24, 2, 2, 24, 3, 2, 24, 2, 24, 3,
   24, 24, 24, 27, 0, 0, 24, 24, 0, 3,
   24, 24, 0, 0, 24, 3, 0, 24, 0, 24,
    3, 24, 24, 24, 27, 0, 0, 25, 25, 1,
    2, 25, 25, 1, 1, 25, 2, 1, 25, 1,
   25, 2, 25, 25, 25, 28, 0, 0, 25, 25,
    1, 1, 25, 25, 2, 2, 25, 1, 1, 25,
    2, 25, 1, 25, 25, 25, 28, 0, 0, 25,
   25, 0, 0, 25, 25, 1, 1, 25, 0, 0,
   25, 1, 25, 0, 25, 25, 25, 28, 0, 0,
   25, 25, 1, 3, 25, 25, 1, 1, 25, 3,
    1, 25, 1, 25, 3, 25, 25, 25, 28, 0,
    0, 25, 25, 0, 2, 25, 25, 0, 0, 25,
    2, 0, 25, 0, 25, 2, 25, 25, 25, 28,
    0, 0, 25, 25, 2, 2, 25, 25, 2, 2,
   25, 2, 2, 25, 2, 25, 2, 25, 25, 25,
   28, 0, 0, 25, 25, 0, 0, 25, 25, 2,
    2, 25, 0, 0, 25, 2, 25, 0, 25, 25,
   25, 28, 0, 0, 25, 25, 2, 3, 25, 25,
    2, 2, 25, 3, 2, 25, 2, 25, 3, 25,
   25, 25, 28, 0, 0, 25, 25, 0, 3, 25,
   25, 0, 0, 25, 3, 0, 25, 0, 25, 3,
   25, 25, 25, 28, 0, 0, 26, 26, 1, 2,
   26, 26, 1, 1, 26, 2, 1, 26, 1, 26,
    2, 26, 26, 26, 29, 0, 0, 26, 26, 1,
    1, 26, 26, 2, 2, 26, 1, 1, 26, 2,
   26, 1, 26, 26, 26, 29, 0, 0, 26, 26,
    0, 0, 26, 26, 1, 1, 26, 0, 0, 26,
    1, 26, 0, 26, 26, 26, 29, 0, 0, 26,
   26, 1, 3, 26, 26, 1, 1, 26, 3, 1,
   26, 1, 26, 3, 26, 26, 26, 29, 0, 0,
   26, 26, 0, 2, 26, 26, 0, 0, 26, 2,
    0, 26, 0, 26, 2, 26, 26, 26, 29, 0,
    0, 26, 26, 2, 2, 26, 26, 2, 2, 26,
    2, 2, 26, 2, 26, 2, 26, 26, 26, 29,
    0, 0, 26, 26, 0, 0, 26, 26, 2, 2,
   26, 0, 0, 26, 2, 26, 0, 26, 26, 26,
   29, 0, 0, 26, 26, 2, 3, 26, 26, 2,
    2, 26, 3, 2, 26, 2, 26, 3, 26, 26,
   26, 29, 0, 0, 26, 26, 0, 3, 26, 26,
    0, 0, 26, 3, 0, 26, 0, 26, 3, 26,
   26, 26, 29, 0, 0, 27, 27, 1, 2, 27,
   27, 1, 1, 27, 2, 1, 27, 1, 27, 2,
   27, 27, 27, 30, 0, 0, 27, 27, 1, 1,
   27, 27, 2, 2, 27, 1, 1, 27, 2, 27,
    1, 27, 27, 27, 30, 0, 0, 27, 27, 0,
    0, 27, 27, 1, 1, 27, 0, 0, 27, 1,
   27, 0, 27, 27, 27, 30, 0, 0, 27, 27,
    1, 3, 27, 27, 1, 1, 27, 3, 1, 27,
    1, 27, 3, 27, 27, 27, 30, 0, 0, 27,
   27, 0, 2, 27, 27, 0, 0, 27, 2, 0,
   27, 0, 27, 2, 27, 27, 27, 30, 0, 0,
   27, 27, 2, 2, 27, 27, 2, 2, 27, 2,
    2, 27, 2, 27, 2, 27, 27, 27, 30, 0,
    0, 27, 27, 0, 0, 27, 27, 2, 2, 27,
    0, 0, 27, 2, 27, 0, 27, 27, 27, 30,
    0, 0, 27, 27, 2, 3, 27, 27, 2, 2,
   27, 3, 2, 27, 2, 27, 3, 27, 27, 27,
   30, 0, 0, 27, 27, 0, 3, 27, 27, 0,
    0, 27, 3, 0, 27, 0, 27, 3, 27, 27,
   27, 30, 0, 0, 28, 28, 1, 2, 28, 28,
    1, 1, 28, 2, 1, 28, 1, 28, 2, 28,
   28, 28, 31, 0, 0, 28, 28, 1, 1, 28,
   28, 2, 2, 28, 1, 1, 28, 2, 28, 1,
   28, 28, 28, 31, 0, 0, 28, 28, 0, 0,
   28, 28, 1, 1, 28, 0, 0, 28, 1, 28,
    0, 28, 28, 28, 31, 0, 0, 28, 28, 1,
    3, 28, 28, 1, 1, 28, 3, 1, 28, 1,
   28, 3, 28, 28, 28, 31, 0, 0, 28, 28,
    0, 2, 28, 28, 0, 0, 28, 2, 0, 28,
    0, 28, 2, 28, 28, 28, 31, 0, 0, 28,
   28, 2, 2, 28, 28, 2, 2, 28, 2, 2,
   28, 2, 28, 2, 28, 28, 28, 31, 0, 0,
   28, 28, 0, 0, 28, 28, 2, 2, 28, 0,
    0, 28, 2, 28, 0, 28, 28, 28, 31, 0,
    0, 28, 28, 2, 3, 28, 28, 2, 2, 28,
    3, 2, 28, 2, 28, 3, 28, 28, 28, 31,
    0, 0, 28, 28, 0, 3, 28, 28, 0, 0,
   28, 3, 0, 28, 0, 28, 3, 28, 28, 28,
   31, 0, 0, 29, 29, 1, 2, 29, 29, 1,
    1, 29, 2, 1, 29, 1, 29, 2, 29, 29,
   29, 32, 0, 0, 29, 29, 1, 1, 29, 29,
    2, 2, 29, 1, 1, 29, 2, 29, 1, 29,
   29, 29, 32, 0, 0, 29, 29, 0, 0, 29,
   29, 1, 1, 29, 0, 0, 29, 1, 29, 0,
   29, 29, 29, 32, 0, 0, 29, 29, 1, 3,
   29, 29, 1, 1, 29, 3, 1, 29, 1, 29,
    3, 29, 29, 29, 32, 0, 0, 29, 29, 0,
    2, 29, 29, 0, 0, 29, 2, 0, 29, 0,
   29, 2, 29, 29, 29, 32, 0, 0, 29, 29,
    2, 2, 29, 29, 2, 2, 29, 2, 2, 29,
    2, 29, 2, 29, 29, 29, 32, 0, 0, 29,
   29, 0, 0, 29, 29, 2, 2, 29, 0, 0,
   29, 2, 29, 0, 29, 29, 29, 32, 0, 0,
   29, 29, 2, 3, 29, 29, 2, 2, 29, 3,
    2, 29, 2, 29, 3, 29, 29, 29, 32, 0,
    0, 29, 29, 0, 3, 29, 29, 0, 0, 29,
    3, 0, 29, 0, 29, 3, 29, 29, 29, 32,
    0, 0, 30, 30, 1, 2, 30, 30, 1, 1,
   30, 2, 1, 30, 1, 30, 2, 30, 30, 30,
   33, 0, 0, 30, 30, 1, 1, 30, 30, 2,
    2, 30, 1, 1, 30, 2, 30, 1, 30, 30,
   30, 33, 0, 0, 30, 30, 0, 0, 30, 30,
    1, 1, 30, 0, 0, 30, 1, 30, 0, 30,
   30, 30, 33, 0, 0, 30, 30, 1, 3, 30,
   30, 1, 1, 30, 3, 1, 30, 1, 30, 3,
   30, 30, 30, 33, 0, 0, 30, 30, 0, 2,
   30, 30, 0, 0, 30, 2, 0, 30, 0, 30,
    2, 30, 30, 30, 33, 0, 0, 30, 30, 2,
    2, 30, 30, 2, 2, 30, 2, 2, 30, 2,
   30, 2, 30, 30, 30, 33, 0, 0, 30, 30,
    0, 0, 30, 30, 2, 2, 30, 0, 0, 30,
    2, 30, 0, 30, 30, 30, 33, 0, 0, 30,
   30, 2, 3, 30, 30, 2, 2, 30, 3, 2,
   30, 2, 30, 3, 30, 30, 30, 33, 0, 0,
   30, 30, 0, 3, 30, 30, 0, 0, 30, 3,
    0, 30, 0, 30, 3, 30, 30, 30, 33, 0,
    0, 31, 31, 1, 2, 31, 31, 1, 1, 31,
    2, 1, 31, 1, 31, 2, 31, 31, 31, 34,
    0, 0, 31, 31, 1, 1, 31, 31, 2, 2,
   31, 1, 1, 31, 2, 31, 1, 31, 31, 31,
   34, 0, 0, 31, 31, 0, 0, 31, 31, 1,
    1, 31, 0, 0, 31, 1, 31, 0, 31, 31,
   31, 34, 0, 0, 31, 31, 1, 3, 31, 31,
    1, 1, 31, 3, 1, 31, 1, 31, 3, 31,
   31, 31, 34, 0, 0, 31, 31, 0, 2, 31,
   31, 0, 0, 31, 2, 0, 31, 0, 31, 2,
   31, 31, 31, 34, 0, 0, 31, 31, 2, 2,
   31, 31, 2, 2, 31, 2, 2, 31, 2, 31,
    2, 31, 31, 31, 34, 0, 0, 31, 31, 0,
    0, 31, 31, 2, 2, 31, 0, 0, 31, 2,
   31, 0, 31, 31, 31, 34, 0, 0, 31, 31,
    2, 3, 31, 31, 2, 2, 31, 3, 2, 31,
    2, 31, 3, 31, 31, 31, 34, 0, 0, 31,
   31, 0, 3, 31, 31, 0, 0, 31, 3, 0,
   31, 0, 31, 3, 31, 31, 31, 34, 0, 0,
   32, 32, 1, 2, 32, 32, 1, 1, 32, 2,
    1, 32, 1, 32, 2, 32, 32, 32, 35, 0,
    0, 32, 32, 1, 1, 32, 32, 2, 2, 32,
    1, 1, 32, 2, 32, 1, 32, 32, 32, 35,
    0, 0, 32, 32, 0, 0, 32, 32, 1, 1,
   32, 0, 0, 32, 1, 32, 0, 32, 32, 32,
   35, 0, 0, 32, 32, 1, 3, 32, 32, 1,
    1, 32, 3, 1, 32, 1, 32, 3, 32, 32,
   32, 35, 0, 0, 32, 32, 0, 2, 32, 32,
    0, 0, 32, 2, 0, 32, 0, 32, 2, 32,
   32, 32, 35, 0, 0, 32, 32, 2, 2, 32,
   32, 2, 2, 32, 2, 2, 32, 2, 32, 2,
   32, 32, 32, 35, 0, 0, 32, 32, 0, 0,
   32, 32, 2, 2, 32, 0, 0, 32, 2, 32,
    0, 32, 32, 32, 35, 0, 0, 32, 32, 2,
    3, 32, 32, 2, 2, 32, 3, 2, 32, 2,
   32, 3, 32, 32, 32, 35, 0, 0, 32, 32,
    0, 3, 32, 32, 0, 0, 32, 3, 0, 32,
    0, 32, 3, 32, 32, 32, 35, 0, 0, 33,
   33, 1, 2, 33, 33, 1, 1, 33, 2, 1,
   33, 1, 33, 2, 33, 33, 33, 36, 0, 0,
   33, 33, 1, 1, 33, 33, 2, 2, 33, 1,
    1, 33, 2, 33, 1, 33, 33, 33, 36, 0,
    0, 1, 1, 0, 1, 1, 1, 0, 0, 0,
    1, 0, 0, 0, 1, 1, 1, 0, 0, 2,
    0, 0, 1, 1, 0, 1, 1, 1, 0, 1,
    0, 1, 0, 0, 1, 1, 1, 1, 0, 0,
    2, 0, 0, 34, 34, 1, 1, 34, 34, 1,
    1, 34, 1, 1, 34, 1, 34, 1, 34, 34,
   34, 37, 0, 0, 33, 33, 0, 0, 33, 33,
    0, 0, 33, 0, 0, 33, 0, 33, 0, 33,
   33, 33, 36, 0, 0, 33, 33, 0, 0, 33,
   33, 1, 1, 33, 0, 0, 33, 1, 33, 0,
   33, 33, 33, 36, 0, 0, 33, 33, 1, 3,
   33, 33, 1, 1, 33, 3, 1, 33, 1, 33,
    3, 33, 33, 33, 36, 0, 0, 33, 33, 0,
    2, 33, 33, 0, 0, 33, 2, 0, 33, 0,
   33, 2, 33, 33, 33, 36, 0, 0, 33, 33,
    2, 2, 33, 33, 2, 2, 33, 2, 2, 33,
    2, 33, 2, 33, 33, 33, 36, 0, 0, 33,
   33, 0, 0, 33, 33, 2, 2, 33, 0, 0,
   33, 2, 33, 0, 33, 33, 33, 36, 0, 0,
   33, 33, 2, 3, 33, 33, 2, 2, 33, 3,
    2, 33, 2, 33, 3, 33, 33, 33, 36, 0,
    0, 33, 33, 0, 3, 33, 33, 0, 0, 33,
    3, 0, 33, 0, 33, 3, 33, 33, 33, 36,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1, 0, 0, 1, 1, 0, 1, 1, 1, 0,
    0, 0, 1, 0, 0, 0, 1, 1, 1, 0,
    0, 1, 0, 0, 1, 1, 0, 1, 1, 1,
    0, 1, 0, 1, 0, 0, 1, 1, 1, 1,
    0, 0, 1, 0, 0, 2, 2, 0, 1, 2,
    2, 0, 2, 0, 1, 0, 0, 2, 2, 1,
    2, 0, 0, 1, 0, 0, 34, 34, 1, 1,
   34, 34, 2, 2, 34, 1, 1, 34, 2, 34,
    1, 34, 34, 34, 37, 0, 0, 1, 1, 0,
    0, 1, 1, 0, 1, 0, 0, 0, 0, 1,
    1, 0, 1, 0, 0, 0, 0, 0, 1, 1,
    0, 1, 1, 1, 0, 1, 0, 1, 0, 0,
    1, 1, 1, 1, 0, 0, 0, 0, 0, 2,
    2, 0, 2, 2, 2, 0, 1, 0, 2, 0,
    0, 1, 2, 2, 2, 0, 0, 0, 0, 0,
    1, 1, 0, 1, 1, 1, 0, 0, 0, 1,
    0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
    0, 2, 2, 0, 1, 2, 2, 0, 2, 0,
    1, 0, 0, 2, 2, 1, 2, 0, 0, 0,
    0, 0, 34, 34, 0, 1, 34, 34, 0, 0,
   34, 1, 0, 34, 0, 34, 1, 34, 34, 34,
   37, 0, 0, 3, 3, 0, 3, 3, 3, 0,
    1, 0, 3, 0, 0, 1, 3, 3, 3, 0,
    0, 0, 0, 0, 34, 34, 1, 3, 34, 34,
    1, 1, 34, 3, 1, 34, 1, 34, 3, 34,
   34, 34, 37, 0, 0, 2, 2, 0, 2, 2,
    2, 0, 0, 0, 2, 0, 0, 0, 2, 2,
    2, 0, 0, 0, 0, 0, 2, 2, 0, 2,
    2, 2, 0, 2, 0, 2, 0, 0, 2, 2,
    2, 2, 0, 0, 0, 0, 0, 34, 34, 2,
    2, 34, 34, 2, 2, 34, 2, 2, 34, 2,
   34, 2, 34, 34, 34, 37, 0, 0, 34, 34,
    0, 2, 34, 34, 0, 0, 34, 2, 0, 34,
    0, 34, 2, 34, 34, 34, 37, 0, 0, 34,
   34, 0, 0, 34, 34, 1, 1, 34, 0, 0,
   34, 1, 34, 0, 34, 34, 34, 37, 0, 0,
    1, 1, 0, 0, 1, 1, 0, 1, 0, 0,
    0, 0, 1, 1, 0, 1, 0, 0, 1, 0,
    0, 2, 2, 0, 2, 2, 2, 0, 1, 0,
    2, 0, 0, 1, 2, 2, 2, 0, 0, 1,
    0, 0, 3, 3, 0, 3, 3, 3, 0, 1,
    0, 3, 0, 0, 1, 3, 3, 3, 0, 0,
    1, 0, 0, 2, 2, 0, 2, 2, 2, 0,
    0, 0, 2, 0, 0, 0, 2, 2, 2, 0,
    0, 1, 0, 0, 2, 2, 0, 2, 2, 2,
    0, 2, 0, 2, 0, 0, 2, 2, 2, 2,
    0, 0, 1, 0, 0, 2, 2, 0, 0, 2,
    2, 0, 2, 0, 0, 0, 0, 2, 2, 0,
    2, 0, 0, 1, 0, 0, 2, 2, 0, 0,
    2, 2, 1, 2, 1, 0, 0, 1, 2, 2,
    0, 2, 1, 1, 4, 0, 0, 3, 3, 1,
    3, 3, 3, 1, 2, 1, 3, 1, 1, 2,
    3, 3, 3, 1, 1, 4, 0, 0, 3, 3,
    0, 3, 3, 3, 0, 2, 0, 3, 0, 0,
    2, 3, 3, 3, 0, 0, 1, 0, 0, 34,
   34, 2, 3, 34, 34, 2, 2, 34, 3, 2,
   34, 2, 34, 3, 34, 34, 34, 37, 0, 0,
   34, 34, 0, 0, 34, 34, 2, 2, 34, 0,
    0, 34, 2, 34, 0, 34, 34, 34, 37, 0,
    0, 3, 3, 0, 3, 3, 3, 0, 0, 0,
    3, 0, 0, 0, 3, 3, 3, 0, 0, 1,
    0, 0, 3, 3, 0, 3, 3, 3, 0, 0,
    1, 3, 0, 1, 0, 3, 3, 3, 1, 1,
    4, 0, 0, 34, 34, 0, 3, 34, 34, 0,
    0, 34, 3, 0, 34, 0, 34, 3, 34, 34,
   34, 37, 0, 0, 34, 34, 0, 0, 34, 34,
    0, 0, 34, 0, 0, 34, 0, 34, 0, 34,
   34, 34, 37, 0, 0, 2, 2, 0, 1, 2,
    2, 0, 2, 0, 1, 0, 0, 2, 2, 1,
    2, 0, 0, 2, 0, 0, 2, 2, 0, 2,
    2, 2, 0, 2, 0, 2, 0, 0, 2, 2,
    2, 2, 0, 0, 3, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 2, 0, 0, 1, 1,
    0, 0, 1, 1, 0, 1, 0, 0, 0, 0,
    1, 1, 0, 1, 0, 0, 2, 0, 0, 2,
    2, 0, 2, 2, 2, 0, 1, 0, 2, 0,
    0, 1, 2, 2, 2, 0, 0, 2, 0, 0,
    3, 3, 0, 3, 3, 3, 0, 1, 0, 3,
    0, 0, 1, 3, 3, 3, 0, 0, 2, 0,
    0, 2, 2, 0, 2, 2, 2, 0, 0, 0,
    2, 0, 0, 0, 2, 2, 2, 0, 0, 2,
    0, 0, 2, 2, 0, 2, 2, 2, 0, 2,
    0, 2, 0, 0, 2, 2, 2, 2, 0, 0,
    2, 0, 0, 2, 2, 0, 0, 2, 2, 0,
    2, 0, 0, 0, 0, 2, 2, 0, 2, 0,
    0, 2, 0, 0, 3, 3, 0, 3, 3, 3,
    0, 2, 0, 3, 0, 0, 2, 3, 3, 3,
    0, 0, 2, 0, 0, 3, 3, 0, 3, 3,
    3, 0, 0, 0, 3, 0, 0, 0, 3, 3,
    3, 0, 0, 2, 0, 0, 3, 3, 0, 3,
    3, 3, 0, 1, 0, 3, 0, 0, 1, 3,
    3, 3, 0, 0, 3, 0, 0, 2, 2, 0,
    1, 2, 2, 0, 2, 0, 1, 0, 0, 2,
    2, 1, 2, 0, 0, 3, 0, 0, 2, 2,
    0, 0, 2, 2, 0, 2, 0, 0, 0, 0,
    2, 2, 0, 2, 0, 0, 3, 0, 0, 3,
    3, 0, 3, 3, 3, 0, 2, 0, 3, 0,
    0, 2, 3, 3, 3, 0, 0, 3, 0, 0,
    3, 3, 0, 3, 3, 3, 0, 0, 0, 3,
    0, 0, 0, 3, 3, 3, 0, 0, 3, 0,
    0, 2, 2, 0, 0, 2, 2, 0, 2, 0,
    0, 0, 0, 2, 2, 0, 2, 0, 0, 0,
    0, 0, 3, 3, 0, 3, 3, 3, 0, 2,
    0, 3, 0, 0, 2, 3, 3, 3, 0, 0,
    0, 0, 0, 3, 3, 0, 3, 3, 3, 0,
    0, 0, 3, 0, 0, 0, 3, 3, 3, 0,
    0, 0, 0};
static const unsigned char athlon_fp_dead_lock[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0};
struct DFA_chip
{
  unsigned char pentium_automaton_state;
  unsigned char pentium_fpu_automaton_state;
  unsigned char ppro_decoder_automaton_state;
  unsigned char ppro_core_automaton_state;
  unsigned char ppro_idiv_automaton_state;
  unsigned char ppro_fdiv_automaton_state;
  unsigned char ppro_load_automaton_state;
  unsigned char ppro_store_automaton_state;
  unsigned char k6_decoder_automaton_state;
  unsigned char k6_load_unit_automaton_state;
  unsigned char k6_store_unit_automaton_state;
  unsigned char k6_integer_units_automaton_state;
  unsigned char k6_fpu_unit_automaton_state;
  unsigned char k6_branch_unit_automaton_state;
  unsigned char athlon_automaton_state;
  unsigned char athlon_load_automaton_state;
  unsigned char athlon_mult_automaton_state;
  unsigned short athlon_fp_automaton_state;
};
int max_insn_queue_index = 127;
static int
internal_min_issue_delay (int insn_code, struct DFA_chip *chip )
{
  int temp ;
  int res = -1;
  switch (insn_code)
    {
    case 0:
    case 1:
    case 3:
    case 7:
    case 8:
    case 9:
    case 10:
    case 11:
    case 16:
    case 17:
    case 18:
    case 19:
    case 20:
    case 21:
    case 22:
    case 23:
    case 24:
    case 25:
    case 26:
    case 27:
      temp = pentium_min_issue_delay [(pentium_translate [insn_code] + chip->pentium_automaton_state * 17) / 2];
      temp = (temp >> (8 - (pentium_translate [insn_code] % 2 + 1) * 4)) & 15;
      res = temp;
      break;
    case 2:
    case 4:
    case 5:
    case 6:
    case 12:
    case 13:
    case 14:
    case 15:
      temp = pentium_fpu_min_issue_delay [pentium_fpu_translate [insn_code] + chip->pentium_fpu_automaton_state * 8];
      res = temp;
      temp = pentium_min_issue_delay [(pentium_translate [insn_code] + chip->pentium_automaton_state * 17) / 2];
      temp = (temp >> (8 - (pentium_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      break;
    case 28:
      temp = ppro_decoder_min_issue_delay [(ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (ppro_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      res = temp;
      break;
    case 29:
    case 32:
    case 34:
    case 35:
    case 37:
    case 38:
    case 41:
    case 49:
    case 53:
    case 55:
    case 56:
    case 58:
    case 61:
    case 63:
    case 71:
    case 73:
    case 75:
    case 77:
    case 78:
    case 80:
    case 82:
    case 84:
    case 86:
    case 90:
    case 93:
    case 94:
    case 96:
    case 98:
    case 100:
    case 102:
    case 104:
    case 106:
    case 109:
      temp = ppro_core_min_issue_delay [ppro_core_translate [insn_code] + chip->ppro_core_automaton_state * 13];
      res = temp;
      temp = ppro_decoder_min_issue_delay [(ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (ppro_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 30:
    case 33:
    case 59:
    case 107:
      temp = ppro_load_min_issue_delay [(ppro_load_translate [insn_code] + chip->ppro_load_automaton_state * 4) / 4];
      temp = (temp >> (8 - (ppro_load_translate [insn_code] % 4 + 1) * 2)) & 3;
      res = temp;
      temp = ppro_decoder_min_issue_delay [(ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (ppro_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 31:
    case 76:
    case 92:
    case 108:
      temp = ppro_store_min_issue_delay [(ppro_store_translate [insn_code] + chip->ppro_store_automaton_state * 7) / 4];
      temp = (temp >> (8 - (ppro_store_translate [insn_code] % 4 + 1) * 2)) & 3;
      res = temp;
      temp = ppro_decoder_min_issue_delay [(ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (ppro_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 36:
    case 52:
    case 112:
      temp = ppro_store_min_issue_delay [(ppro_store_translate [insn_code] + chip->ppro_store_automaton_state * 7) / 4];
      temp = (temp >> (8 - (ppro_store_translate [insn_code] % 4 + 1) * 2)) & 3;
      res = temp;
      temp = ppro_load_min_issue_delay [(ppro_load_translate [insn_code] + chip->ppro_load_automaton_state * 4) / 4];
      temp = (temp >> (8 - (ppro_load_translate [insn_code] % 4 + 1) * 2)) & 3;
      if (temp > res)
        res = temp;
      temp = ppro_core_min_issue_delay [ppro_core_translate [insn_code] + chip->ppro_core_automaton_state * 13];
      if (temp > res)
        res = temp;
      temp = ppro_decoder_min_issue_delay [(ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (ppro_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 39:
    case 40:
    case 42:
    case 50:
    case 57:
    case 60:
    case 64:
    case 72:
    case 74:
    case 79:
    case 81:
    case 83:
    case 85:
    case 87:
    case 88:
    case 89:
    case 91:
    case 95:
    case 97:
    case 101:
    case 103:
    case 105:
    case 110:
      temp = ppro_load_min_issue_delay [(ppro_load_translate [insn_code] + chip->ppro_load_automaton_state * 4) / 4];
      temp = (temp >> (8 - (ppro_load_translate [insn_code] % 4 + 1) * 2)) & 3;
      res = temp;
      temp = ppro_core_min_issue_delay [ppro_core_translate [insn_code] + chip->ppro_core_automaton_state * 13];
      if (temp > res)
        res = temp;
      temp = ppro_decoder_min_issue_delay [(ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (ppro_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 43:
    case 45:
    case 47:
      temp = ppro_idiv_min_issue_delay [ppro_idiv_translate [insn_code] + chip->ppro_idiv_automaton_state * 5];
      res = temp;
      temp = ppro_core_min_issue_delay [ppro_core_translate [insn_code] + chip->ppro_core_automaton_state * 13];
      if (temp > res)
        res = temp;
      temp = ppro_decoder_min_issue_delay [(ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (ppro_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 44:
    case 46:
    case 48:
      temp = ppro_load_min_issue_delay [(ppro_load_translate [insn_code] + chip->ppro_load_automaton_state * 4) / 4];
      temp = (temp >> (8 - (ppro_load_translate [insn_code] % 4 + 1) * 2)) & 3;
      res = temp;
      temp = ppro_idiv_min_issue_delay [ppro_idiv_translate [insn_code] + chip->ppro_idiv_automaton_state * 5];
      if (temp > res)
        res = temp;
      temp = ppro_core_min_issue_delay [ppro_core_translate [insn_code] + chip->ppro_core_automaton_state * 13];
      if (temp > res)
        res = temp;
      temp = ppro_decoder_min_issue_delay [(ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (ppro_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 51:
    case 54:
    case 62:
    case 99:
    case 111:
      temp = ppro_store_min_issue_delay [(ppro_store_translate [insn_code] + chip->ppro_store_automaton_state * 7) / 4];
      temp = (temp >> (8 - (ppro_store_translate [insn_code] % 4 + 1) * 2)) & 3;
      res = temp;
      temp = ppro_core_min_issue_delay [ppro_core_translate [insn_code] + chip->ppro_core_automaton_state * 13];
      if (temp > res)
        res = temp;
      temp = ppro_decoder_min_issue_delay [(ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (ppro_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 65:
    case 67:
    case 69:
      temp = ppro_fdiv_min_issue_delay [ppro_fdiv_translate [insn_code] + chip->ppro_fdiv_automaton_state * 5];
      res = temp;
      temp = ppro_core_min_issue_delay [ppro_core_translate [insn_code] + chip->ppro_core_automaton_state * 13];
      if (temp > res)
        res = temp;
      temp = ppro_decoder_min_issue_delay [(ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (ppro_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 66:
    case 68:
    case 70:
      temp = ppro_load_min_issue_delay [(ppro_load_translate [insn_code] + chip->ppro_load_automaton_state * 4) / 4];
      temp = (temp >> (8 - (ppro_load_translate [insn_code] % 4 + 1) * 2)) & 3;
      res = temp;
      temp = ppro_fdiv_min_issue_delay [ppro_fdiv_translate [insn_code] + chip->ppro_fdiv_automaton_state * 5];
      if (temp > res)
        res = temp;
      temp = ppro_core_min_issue_delay [ppro_core_translate [insn_code] + chip->ppro_core_automaton_state * 13];
      if (temp > res)
        res = temp;
      temp = ppro_decoder_min_issue_delay [(ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (ppro_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 113:
    case 116:
    case 119:
    case 121:
    case 124:
      temp = k6_integer_units_min_issue_delay [k6_integer_units_translate [insn_code] + chip->k6_integer_units_automaton_state * 11];
      res = temp;
      temp = k6_decoder_min_issue_delay [(k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (k6_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 114:
    case 117:
    case 120:
    case 122:
    case 128:
    case 132:
      temp = k6_integer_units_min_issue_delay [k6_integer_units_translate [insn_code] + chip->k6_integer_units_automaton_state * 11];
      res = temp;
      temp = k6_load_unit_min_issue_delay [(k6_load_unit_translate [insn_code] + chip->k6_load_unit_automaton_state * 4) / 2];
      temp = (temp >> (8 - (k6_load_unit_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      temp = k6_decoder_min_issue_delay [(k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (k6_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 115:
    case 118:
    case 123:
      temp = k6_integer_units_min_issue_delay [k6_integer_units_translate [insn_code] + chip->k6_integer_units_automaton_state * 11];
      res = temp;
      temp = k6_store_unit_min_issue_delay [k6_store_unit_translate [insn_code] + chip->k6_store_unit_automaton_state * 6];
      if (temp > res)
        res = temp;
      temp = k6_load_unit_min_issue_delay [(k6_load_unit_translate [insn_code] + chip->k6_load_unit_automaton_state * 4) / 2];
      temp = (temp >> (8 - (k6_load_unit_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      temp = k6_decoder_min_issue_delay [(k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (k6_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 125:
      temp = k6_decoder_min_issue_delay [(k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (k6_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      res = temp;
      break;
    case 126:
    case 131:
    case 133:
      temp = k6_load_unit_min_issue_delay [(k6_load_unit_translate [insn_code] + chip->k6_load_unit_automaton_state * 4) / 2];
      temp = (temp >> (8 - (k6_load_unit_translate [insn_code] % 2 + 1) * 4)) & 15;
      res = temp;
      temp = k6_decoder_min_issue_delay [(k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (k6_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 127:
    case 135:
      temp = k6_store_unit_min_issue_delay [k6_store_unit_translate [insn_code] + chip->k6_store_unit_automaton_state * 6];
      res = temp;
      temp = k6_decoder_min_issue_delay [(k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (k6_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 129:
    case 130:
      temp = k6_branch_unit_min_issue_delay [(k6_branch_unit_translate [insn_code] + chip->k6_branch_unit_automaton_state * 3) / 8];
      temp = (temp >> (8 - (k6_branch_unit_translate [insn_code] % 8 + 1) * 1)) & 1;
      res = temp;
      temp = k6_decoder_min_issue_delay [(k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (k6_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 134:
      temp = k6_integer_units_min_issue_delay [k6_integer_units_translate [insn_code] + chip->k6_integer_units_automaton_state * 11];
      res = temp;
      temp = k6_store_unit_min_issue_delay [k6_store_unit_translate [insn_code] + chip->k6_store_unit_automaton_state * 6];
      if (temp > res)
        res = temp;
      temp = k6_decoder_min_issue_delay [(k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (k6_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 136:
      temp = k6_store_unit_min_issue_delay [k6_store_unit_translate [insn_code] + chip->k6_store_unit_automaton_state * 6];
      res = temp;
      break;
    case 137:
    case 140:
    case 142:
      temp = k6_fpu_unit_min_issue_delay [k6_fpu_unit_translate [insn_code] + chip->k6_fpu_unit_automaton_state * 5];
      res = temp;
      temp = k6_decoder_min_issue_delay [(k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (k6_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 138:
    case 141:
      temp = k6_fpu_unit_min_issue_delay [k6_fpu_unit_translate [insn_code] + chip->k6_fpu_unit_automaton_state * 5];
      res = temp;
      temp = k6_load_unit_min_issue_delay [(k6_load_unit_translate [insn_code] + chip->k6_load_unit_automaton_state * 4) / 2];
      temp = (temp >> (8 - (k6_load_unit_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      temp = k6_decoder_min_issue_delay [(k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (k6_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 139:
      temp = k6_fpu_unit_min_issue_delay [k6_fpu_unit_translate [insn_code] + chip->k6_fpu_unit_automaton_state * 5];
      res = temp;
      temp = k6_store_unit_min_issue_delay [k6_store_unit_translate [insn_code] + chip->k6_store_unit_automaton_state * 6];
      if (temp > res)
        res = temp;
      temp = k6_decoder_min_issue_delay [(k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (k6_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      break;
    case 143:
    case 144:
    case 150:
    case 160:
    case 161:
      temp = athlon_min_issue_delay [(athlon_translate [insn_code] + chip->athlon_automaton_state * 10) / 2];
      temp = (temp >> (8 - (athlon_translate [insn_code] % 2 + 1) * 4)) & 15;
      res = temp;
      break;
    case 145:
    case 146:
    case 147:
    case 148:
    case 149:
    case 159:
    case 162:
    case 163:
    case 164:
    case 165:
    case 166:
    case 167:
    case 168:
    case 169:
      temp = athlon_load_min_issue_delay [(athlon_load_translate [insn_code] + chip->athlon_load_automaton_state * 10) / 2];
      temp = (temp >> (8 - (athlon_load_translate [insn_code] % 2 + 1) * 4)) & 15;
      res = temp;
      temp = athlon_min_issue_delay [(athlon_translate [insn_code] + chip->athlon_automaton_state * 10) / 2];
      temp = (temp >> (8 - (athlon_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      break;
    case 151:
    case 152:
    case 153:
      temp = athlon_mult_min_issue_delay [(athlon_mult_translate [insn_code] + chip->athlon_mult_automaton_state * 4) / 2];
      temp = (temp >> (8 - (athlon_mult_translate [insn_code] % 2 + 1) * 4)) & 15;
      res = temp;
      temp = athlon_min_issue_delay [(athlon_translate [insn_code] + chip->athlon_automaton_state * 10) / 2];
      temp = (temp >> (8 - (athlon_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      break;
    case 154:
    case 155:
    case 156:
      temp = athlon_mult_min_issue_delay [(athlon_mult_translate [insn_code] + chip->athlon_mult_automaton_state * 4) / 2];
      temp = (temp >> (8 - (athlon_mult_translate [insn_code] % 2 + 1) * 4)) & 15;
      res = temp;
      temp = athlon_load_min_issue_delay [(athlon_load_translate [insn_code] + chip->athlon_load_automaton_state * 10) / 2];
      temp = (temp >> (8 - (athlon_load_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      temp = athlon_min_issue_delay [(athlon_translate [insn_code] + chip->athlon_automaton_state * 10) / 2];
      temp = (temp >> (8 - (athlon_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      break;
    case 157:
    case 179:
    case 182:
    case 185:
    case 186:
    case 189:
    case 190:
    case 192:
    case 194:
    case 196:
    case 199:
    case 202:
    case 214:
    case 215:
    case 216:
    case 218:
    case 220:
    case 223:
    case 224:
    case 227:
    case 230:
    case 231:
    case 234:
    case 237:
    case 240:
    case 241:
    case 243:
    case 245:
    case 252:
    case 254:
    case 256:
    case 257:
    case 260:
    case 263:
    case 264:
    case 267:
    case 270:
    case 271:
      temp = athlon_fp_min_issue_delay [athlon_fp_translate [insn_code] + chip->athlon_fp_automaton_state * 21];
      res = temp;
      temp = athlon_min_issue_delay [(athlon_translate [insn_code] + chip->athlon_automaton_state * 10) / 2];
      temp = (temp >> (8 - (athlon_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      break;
    case 158:
    case 170:
    case 171:
    case 172:
    case 173:
    case 174:
    case 175:
    case 176:
    case 177:
    case 178:
    case 180:
    case 181:
    case 183:
    case 184:
    case 187:
    case 188:
    case 191:
    case 193:
    case 195:
    case 197:
    case 198:
    case 200:
    case 201:
    case 203:
    case 204:
    case 205:
    case 206:
    case 207:
    case 208:
    case 209:
    case 210:
    case 211:
    case 212:
    case 213:
    case 217:
    case 219:
    case 221:
    case 222:
    case 225:
    case 226:
    case 228:
    case 229:
    case 232:
    case 233:
    case 235:
    case 236:
    case 238:
    case 239:
    case 242:
    case 244:
    case 246:
    case 247:
    case 248:
    case 249:
    case 250:
    case 251:
    case 253:
    case 255:
    case 258:
    case 259:
    case 261:
    case 262:
    case 265:
    case 266:
    case 268:
    case 269:
      temp = athlon_fp_min_issue_delay [athlon_fp_translate [insn_code] + chip->athlon_fp_automaton_state * 21];
      res = temp;
      temp = athlon_load_min_issue_delay [(athlon_load_translate [insn_code] + chip->athlon_load_automaton_state * 10) / 2];
      temp = (temp >> (8 - (athlon_load_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      temp = athlon_min_issue_delay [(athlon_translate [insn_code] + chip->athlon_automaton_state * 10) / 2];
      temp = (temp >> (8 - (athlon_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      break;
    case 272:
      temp = athlon_fp_min_issue_delay [athlon_fp_translate [insn_code] + chip->athlon_fp_automaton_state * 21];
      res = temp;
      temp = athlon_mult_min_issue_delay [(athlon_mult_translate [insn_code] + chip->athlon_mult_automaton_state * 4) / 2];
      temp = (temp >> (8 - (athlon_mult_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      temp = athlon_load_min_issue_delay [(athlon_load_translate [insn_code] + chip->athlon_load_automaton_state * 10) / 2];
      temp = (temp >> (8 - (athlon_load_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      temp = athlon_min_issue_delay [(athlon_translate [insn_code] + chip->athlon_automaton_state * 10) / 2];
      temp = (temp >> (8 - (athlon_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      temp = k6_branch_unit_min_issue_delay [(k6_branch_unit_translate [insn_code] + chip->k6_branch_unit_automaton_state * 3) / 8];
      temp = (temp >> (8 - (k6_branch_unit_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      temp = k6_fpu_unit_min_issue_delay [k6_fpu_unit_translate [insn_code] + chip->k6_fpu_unit_automaton_state * 5];
      if (temp > res)
        res = temp;
      temp = k6_integer_units_min_issue_delay [k6_integer_units_translate [insn_code] + chip->k6_integer_units_automaton_state * 11];
      if (temp > res)
        res = temp;
      temp = k6_store_unit_min_issue_delay [k6_store_unit_translate [insn_code] + chip->k6_store_unit_automaton_state * 6];
      if (temp > res)
        res = temp;
      temp = k6_load_unit_min_issue_delay [(k6_load_unit_translate [insn_code] + chip->k6_load_unit_automaton_state * 4) / 2];
      temp = (temp >> (8 - (k6_load_unit_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      temp = k6_decoder_min_issue_delay [(k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (k6_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      temp = ppro_store_min_issue_delay [(ppro_store_translate [insn_code] + chip->ppro_store_automaton_state * 7) / 4];
      temp = (temp >> (8 - (ppro_store_translate [insn_code] % 4 + 1) * 2)) & 3;
      if (temp > res)
        res = temp;
      temp = ppro_load_min_issue_delay [(ppro_load_translate [insn_code] + chip->ppro_load_automaton_state * 4) / 4];
      temp = (temp >> (8 - (ppro_load_translate [insn_code] % 4 + 1) * 2)) & 3;
      if (temp > res)
        res = temp;
      temp = ppro_fdiv_min_issue_delay [ppro_fdiv_translate [insn_code] + chip->ppro_fdiv_automaton_state * 5];
      if (temp > res)
        res = temp;
      temp = ppro_idiv_min_issue_delay [ppro_idiv_translate [insn_code] + chip->ppro_idiv_automaton_state * 5];
      if (temp > res)
        res = temp;
      temp = ppro_core_min_issue_delay [ppro_core_translate [insn_code] + chip->ppro_core_automaton_state * 13];
      if (temp > res)
        res = temp;
      temp = ppro_decoder_min_issue_delay [(ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4) / 8];
      temp = (temp >> (8 - (ppro_decoder_translate [insn_code] % 8 + 1) * 1)) & 1;
      if (temp > res)
        res = temp;
      temp = pentium_fpu_min_issue_delay [pentium_fpu_translate [insn_code] + chip->pentium_fpu_automaton_state * 8];
      if (temp > res)
        res = temp;
      temp = pentium_min_issue_delay [(pentium_translate [insn_code] + chip->pentium_automaton_state * 17) / 2];
      temp = (temp >> (8 - (pentium_translate [insn_code] % 2 + 1) * 4)) & 15;
      if (temp > res)
        res = temp;
      break;
    default:
      res = -1;
      break;
    }
  return res;
}
static int
internal_state_transition (int insn_code, struct DFA_chip *chip )
{
  int temp ;
  switch (insn_code)
    {
    case 0:
    case 1:
    case 3:
    case 7:
    case 8:
    case 9:
    case 10:
    case 11:
    case 16:
    case 17:
    case 18:
    case 19:
    case 20:
    case 21:
    case 22:
    case 23:
    case 24:
    case 25:
    case 26:
    case 27:
      {
        temp = pentium_base [chip->pentium_automaton_state] + pentium_translate [insn_code];
        if (pentium_check [temp] != chip->pentium_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->pentium_automaton_state = pentium_transitions [temp];
        return -1;
      }
    case 2:
    case 4:
    case 5:
    case 6:
    case 12:
    case 13:
    case 14:
    case 15:
      {
        unsigned char _pentium_fpu_automaton_state;
        temp = pentium_fpu_base [chip->pentium_fpu_automaton_state] + pentium_fpu_translate [insn_code];
        if (pentium_fpu_check [temp] != chip->pentium_fpu_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _pentium_fpu_automaton_state = pentium_fpu_transitions [temp];
        temp = pentium_base [chip->pentium_automaton_state] + pentium_translate [insn_code];
        if (pentium_check [temp] != chip->pentium_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->pentium_automaton_state = pentium_transitions [temp];
        chip->pentium_fpu_automaton_state = _pentium_fpu_automaton_state;
        return -1;
      }
    case 28:
      {
        temp = ppro_decoder_transitions [ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4];
        if (temp >= 4)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->ppro_decoder_automaton_state = temp;
        return -1;
      }
    case 29:
    case 32:
    case 34:
    case 35:
    case 37:
    case 38:
    case 41:
    case 49:
    case 53:
    case 55:
    case 56:
    case 58:
    case 61:
    case 63:
    case 71:
    case 73:
    case 75:
    case 77:
    case 78:
    case 80:
    case 82:
    case 84:
    case 86:
    case 90:
    case 93:
    case 94:
    case 96:
    case 98:
    case 100:
    case 102:
    case 104:
    case 106:
    case 109:
      {
        unsigned char _ppro_core_automaton_state;
        temp = ppro_core_base [chip->ppro_core_automaton_state] + ppro_core_translate [insn_code];
        if (ppro_core_check [temp] != chip->ppro_core_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_core_automaton_state = ppro_core_transitions [temp];
        temp = ppro_decoder_transitions [ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4];
        if (temp >= 4)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->ppro_decoder_automaton_state = temp;
        chip->ppro_core_automaton_state = _ppro_core_automaton_state;
        return -1;
      }
    case 30:
    case 33:
    case 59:
    case 107:
      {
        unsigned char _ppro_load_automaton_state;
        temp = ppro_load_transitions [ppro_load_translate [insn_code] + chip->ppro_load_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_load_automaton_state = temp;
        temp = ppro_decoder_transitions [ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4];
        if (temp >= 4)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->ppro_decoder_automaton_state = temp;
        chip->ppro_load_automaton_state = _ppro_load_automaton_state;
        return -1;
      }
    case 31:
    case 76:
    case 92:
    case 108:
      {
        unsigned char _ppro_store_automaton_state;
        temp = ppro_store_transitions [ppro_store_translate [insn_code] + chip->ppro_store_automaton_state * 7];
        if (temp >= 11)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_store_automaton_state = temp;
        temp = ppro_decoder_transitions [ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4];
        if (temp >= 4)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->ppro_decoder_automaton_state = temp;
        chip->ppro_store_automaton_state = _ppro_store_automaton_state;
        return -1;
      }
    case 36:
    case 52:
    case 112:
      {
        unsigned char _ppro_store_automaton_state;
        unsigned char _ppro_load_automaton_state;
        unsigned char _ppro_core_automaton_state;
        temp = ppro_store_transitions [ppro_store_translate [insn_code] + chip->ppro_store_automaton_state * 7];
        if (temp >= 11)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_store_automaton_state = temp;
        temp = ppro_load_transitions [ppro_load_translate [insn_code] + chip->ppro_load_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_load_automaton_state = temp;
        temp = ppro_core_base [chip->ppro_core_automaton_state] + ppro_core_translate [insn_code];
        if (ppro_core_check [temp] != chip->ppro_core_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_core_automaton_state = ppro_core_transitions [temp];
        temp = ppro_decoder_transitions [ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4];
        if (temp >= 4)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->ppro_decoder_automaton_state = temp;
        chip->ppro_store_automaton_state = _ppro_store_automaton_state;
        chip->ppro_load_automaton_state = _ppro_load_automaton_state;
        chip->ppro_core_automaton_state = _ppro_core_automaton_state;
        return -1;
      }
    case 39:
    case 40:
    case 42:
    case 50:
    case 57:
    case 60:
    case 64:
    case 72:
    case 74:
    case 79:
    case 81:
    case 83:
    case 85:
    case 87:
    case 88:
    case 89:
    case 91:
    case 95:
    case 97:
    case 101:
    case 103:
    case 105:
    case 110:
      {
        unsigned char _ppro_load_automaton_state;
        unsigned char _ppro_core_automaton_state;
        temp = ppro_load_transitions [ppro_load_translate [insn_code] + chip->ppro_load_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_load_automaton_state = temp;
        temp = ppro_core_base [chip->ppro_core_automaton_state] + ppro_core_translate [insn_code];
        if (ppro_core_check [temp] != chip->ppro_core_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_core_automaton_state = ppro_core_transitions [temp];
        temp = ppro_decoder_transitions [ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4];
        if (temp >= 4)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->ppro_decoder_automaton_state = temp;
        chip->ppro_load_automaton_state = _ppro_load_automaton_state;
        chip->ppro_core_automaton_state = _ppro_core_automaton_state;
        return -1;
      }
    case 43:
    case 45:
    case 47:
      {
        unsigned char _ppro_idiv_automaton_state;
        unsigned char _ppro_core_automaton_state;
        temp = ppro_idiv_transitions [ppro_idiv_translate [insn_code] + chip->ppro_idiv_automaton_state * 5];
        if (temp >= 38)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_idiv_automaton_state = temp;
        temp = ppro_core_base [chip->ppro_core_automaton_state] + ppro_core_translate [insn_code];
        if (ppro_core_check [temp] != chip->ppro_core_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_core_automaton_state = ppro_core_transitions [temp];
        temp = ppro_decoder_transitions [ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4];
        if (temp >= 4)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->ppro_decoder_automaton_state = temp;
        chip->ppro_idiv_automaton_state = _ppro_idiv_automaton_state;
        chip->ppro_core_automaton_state = _ppro_core_automaton_state;
        return -1;
      }
    case 44:
    case 46:
    case 48:
      {
        unsigned char _ppro_load_automaton_state;
        unsigned char _ppro_idiv_automaton_state;
        unsigned char _ppro_core_automaton_state;
        temp = ppro_load_transitions [ppro_load_translate [insn_code] + chip->ppro_load_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_load_automaton_state = temp;
        temp = ppro_idiv_transitions [ppro_idiv_translate [insn_code] + chip->ppro_idiv_automaton_state * 5];
        if (temp >= 38)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_idiv_automaton_state = temp;
        temp = ppro_core_base [chip->ppro_core_automaton_state] + ppro_core_translate [insn_code];
        if (ppro_core_check [temp] != chip->ppro_core_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_core_automaton_state = ppro_core_transitions [temp];
        temp = ppro_decoder_transitions [ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4];
        if (temp >= 4)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->ppro_decoder_automaton_state = temp;
        chip->ppro_load_automaton_state = _ppro_load_automaton_state;
        chip->ppro_idiv_automaton_state = _ppro_idiv_automaton_state;
        chip->ppro_core_automaton_state = _ppro_core_automaton_state;
        return -1;
      }
    case 51:
    case 54:
    case 62:
    case 99:
    case 111:
      {
        unsigned char _ppro_store_automaton_state;
        unsigned char _ppro_core_automaton_state;
        temp = ppro_store_transitions [ppro_store_translate [insn_code] + chip->ppro_store_automaton_state * 7];
        if (temp >= 11)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_store_automaton_state = temp;
        temp = ppro_core_base [chip->ppro_core_automaton_state] + ppro_core_translate [insn_code];
        if (ppro_core_check [temp] != chip->ppro_core_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_core_automaton_state = ppro_core_transitions [temp];
        temp = ppro_decoder_transitions [ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4];
        if (temp >= 4)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->ppro_decoder_automaton_state = temp;
        chip->ppro_store_automaton_state = _ppro_store_automaton_state;
        chip->ppro_core_automaton_state = _ppro_core_automaton_state;
        return -1;
      }
    case 65:
    case 67:
    case 69:
      {
        unsigned char _ppro_fdiv_automaton_state;
        unsigned char _ppro_core_automaton_state;
        temp = ppro_fdiv_transitions [ppro_fdiv_translate [insn_code] + chip->ppro_fdiv_automaton_state * 5];
        if (temp >= 38)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_fdiv_automaton_state = temp;
        temp = ppro_core_base [chip->ppro_core_automaton_state] + ppro_core_translate [insn_code];
        if (ppro_core_check [temp] != chip->ppro_core_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_core_automaton_state = ppro_core_transitions [temp];
        temp = ppro_decoder_transitions [ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4];
        if (temp >= 4)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->ppro_decoder_automaton_state = temp;
        chip->ppro_fdiv_automaton_state = _ppro_fdiv_automaton_state;
        chip->ppro_core_automaton_state = _ppro_core_automaton_state;
        return -1;
      }
    case 66:
    case 68:
    case 70:
      {
        unsigned char _ppro_load_automaton_state;
        unsigned char _ppro_fdiv_automaton_state;
        unsigned char _ppro_core_automaton_state;
        temp = ppro_load_transitions [ppro_load_translate [insn_code] + chip->ppro_load_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_load_automaton_state = temp;
        temp = ppro_fdiv_transitions [ppro_fdiv_translate [insn_code] + chip->ppro_fdiv_automaton_state * 5];
        if (temp >= 38)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_fdiv_automaton_state = temp;
        temp = ppro_core_base [chip->ppro_core_automaton_state] + ppro_core_translate [insn_code];
        if (ppro_core_check [temp] != chip->ppro_core_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_core_automaton_state = ppro_core_transitions [temp];
        temp = ppro_decoder_transitions [ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4];
        if (temp >= 4)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->ppro_decoder_automaton_state = temp;
        chip->ppro_load_automaton_state = _ppro_load_automaton_state;
        chip->ppro_fdiv_automaton_state = _ppro_fdiv_automaton_state;
        chip->ppro_core_automaton_state = _ppro_core_automaton_state;
        return -1;
      }
    case 113:
    case 116:
    case 119:
    case 121:
    case 124:
      {
        unsigned char _k6_integer_units_automaton_state;
        temp = k6_integer_units_base [chip->k6_integer_units_automaton_state] + k6_integer_units_translate [insn_code];
        if (k6_integer_units_check [temp] != chip->k6_integer_units_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_integer_units_automaton_state = k6_integer_units_transitions [temp];
        temp = k6_decoder_transitions [k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->k6_decoder_automaton_state = temp;
        chip->k6_integer_units_automaton_state = _k6_integer_units_automaton_state;
        return -1;
      }
    case 114:
    case 117:
    case 120:
    case 122:
    case 128:
    case 132:
      {
        unsigned char _k6_integer_units_automaton_state;
        unsigned char _k6_load_unit_automaton_state;
        temp = k6_integer_units_base [chip->k6_integer_units_automaton_state] + k6_integer_units_translate [insn_code];
        if (k6_integer_units_check [temp] != chip->k6_integer_units_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_integer_units_automaton_state = k6_integer_units_transitions [temp];
        temp = k6_load_unit_transitions [k6_load_unit_translate [insn_code] + chip->k6_load_unit_automaton_state * 4];
        if (temp >= 11)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_load_unit_automaton_state = temp;
        temp = k6_decoder_transitions [k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->k6_decoder_automaton_state = temp;
        chip->k6_integer_units_automaton_state = _k6_integer_units_automaton_state;
        chip->k6_load_unit_automaton_state = _k6_load_unit_automaton_state;
        return -1;
      }
    case 115:
    case 118:
    case 123:
      {
        unsigned char _k6_integer_units_automaton_state;
        unsigned char _k6_store_unit_automaton_state;
        unsigned char _k6_load_unit_automaton_state;
        temp = k6_integer_units_base [chip->k6_integer_units_automaton_state] + k6_integer_units_translate [insn_code];
        if (k6_integer_units_check [temp] != chip->k6_integer_units_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_integer_units_automaton_state = k6_integer_units_transitions [temp];
        temp = k6_store_unit_transitions [k6_store_unit_translate [insn_code] + chip->k6_store_unit_automaton_state * 6];
        if (temp >= 37)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_store_unit_automaton_state = temp;
        temp = k6_load_unit_transitions [k6_load_unit_translate [insn_code] + chip->k6_load_unit_automaton_state * 4];
        if (temp >= 11)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_load_unit_automaton_state = temp;
        temp = k6_decoder_transitions [k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->k6_decoder_automaton_state = temp;
        chip->k6_integer_units_automaton_state = _k6_integer_units_automaton_state;
        chip->k6_store_unit_automaton_state = _k6_store_unit_automaton_state;
        chip->k6_load_unit_automaton_state = _k6_load_unit_automaton_state;
        return -1;
      }
    case 125:
      {
        temp = k6_decoder_transitions [k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->k6_decoder_automaton_state = temp;
        return -1;
      }
    case 126:
    case 131:
    case 133:
      {
        unsigned char _k6_load_unit_automaton_state;
        temp = k6_load_unit_transitions [k6_load_unit_translate [insn_code] + chip->k6_load_unit_automaton_state * 4];
        if (temp >= 11)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_load_unit_automaton_state = temp;
        temp = k6_decoder_transitions [k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->k6_decoder_automaton_state = temp;
        chip->k6_load_unit_automaton_state = _k6_load_unit_automaton_state;
        return -1;
      }
    case 127:
    case 135:
      {
        unsigned char _k6_store_unit_automaton_state;
        temp = k6_store_unit_transitions [k6_store_unit_translate [insn_code] + chip->k6_store_unit_automaton_state * 6];
        if (temp >= 37)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_store_unit_automaton_state = temp;
        temp = k6_decoder_transitions [k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->k6_decoder_automaton_state = temp;
        chip->k6_store_unit_automaton_state = _k6_store_unit_automaton_state;
        return -1;
      }
    case 129:
    case 130:
      {
        unsigned char _k6_branch_unit_automaton_state;
        temp = k6_branch_unit_transitions [k6_branch_unit_translate [insn_code] + chip->k6_branch_unit_automaton_state * 3];
        if (temp >= 2)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_branch_unit_automaton_state = temp;
        temp = k6_decoder_transitions [k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->k6_decoder_automaton_state = temp;
        chip->k6_branch_unit_automaton_state = _k6_branch_unit_automaton_state;
        return -1;
      }
    case 134:
      {
        unsigned char _k6_integer_units_automaton_state;
        unsigned char _k6_store_unit_automaton_state;
        temp = k6_integer_units_base [chip->k6_integer_units_automaton_state] + k6_integer_units_translate [insn_code];
        if (k6_integer_units_check [temp] != chip->k6_integer_units_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_integer_units_automaton_state = k6_integer_units_transitions [temp];
        temp = k6_store_unit_transitions [k6_store_unit_translate [insn_code] + chip->k6_store_unit_automaton_state * 6];
        if (temp >= 37)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_store_unit_automaton_state = temp;
        temp = k6_decoder_transitions [k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->k6_decoder_automaton_state = temp;
        chip->k6_integer_units_automaton_state = _k6_integer_units_automaton_state;
        chip->k6_store_unit_automaton_state = _k6_store_unit_automaton_state;
        return -1;
      }
    case 136:
      {
        temp = k6_store_unit_transitions [k6_store_unit_translate [insn_code] + chip->k6_store_unit_automaton_state * 6];
        if (temp >= 37)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->k6_store_unit_automaton_state = temp;
        return -1;
      }
    case 137:
    case 140:
    case 142:
      {
        unsigned char _k6_fpu_unit_automaton_state;
        temp = k6_fpu_unit_transitions [k6_fpu_unit_translate [insn_code] + chip->k6_fpu_unit_automaton_state * 5];
        if (temp >= 57)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_fpu_unit_automaton_state = temp;
        temp = k6_decoder_transitions [k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->k6_decoder_automaton_state = temp;
        chip->k6_fpu_unit_automaton_state = _k6_fpu_unit_automaton_state;
        return -1;
      }
    case 138:
    case 141:
      {
        unsigned char _k6_fpu_unit_automaton_state;
        unsigned char _k6_load_unit_automaton_state;
        temp = k6_fpu_unit_transitions [k6_fpu_unit_translate [insn_code] + chip->k6_fpu_unit_automaton_state * 5];
        if (temp >= 57)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_fpu_unit_automaton_state = temp;
        temp = k6_load_unit_transitions [k6_load_unit_translate [insn_code] + chip->k6_load_unit_automaton_state * 4];
        if (temp >= 11)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_load_unit_automaton_state = temp;
        temp = k6_decoder_transitions [k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->k6_decoder_automaton_state = temp;
        chip->k6_fpu_unit_automaton_state = _k6_fpu_unit_automaton_state;
        chip->k6_load_unit_automaton_state = _k6_load_unit_automaton_state;
        return -1;
      }
    case 139:
      {
        unsigned char _k6_fpu_unit_automaton_state;
        unsigned char _k6_store_unit_automaton_state;
        temp = k6_fpu_unit_transitions [k6_fpu_unit_translate [insn_code] + chip->k6_fpu_unit_automaton_state * 5];
        if (temp >= 57)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_fpu_unit_automaton_state = temp;
        temp = k6_store_unit_transitions [k6_store_unit_translate [insn_code] + chip->k6_store_unit_automaton_state * 6];
        if (temp >= 37)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_store_unit_automaton_state = temp;
        temp = k6_decoder_transitions [k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->k6_decoder_automaton_state = temp;
        chip->k6_fpu_unit_automaton_state = _k6_fpu_unit_automaton_state;
        chip->k6_store_unit_automaton_state = _k6_store_unit_automaton_state;
        return -1;
      }
    case 143:
    case 144:
    case 150:
    case 160:
    case 161:
      {
        temp = athlon_transitions [athlon_translate [insn_code] + chip->athlon_automaton_state * 10];
        if (temp >= 76)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->athlon_automaton_state = temp;
        return -1;
      }
    case 145:
    case 146:
    case 147:
    case 148:
    case 149:
    case 159:
    case 162:
    case 163:
    case 164:
    case 165:
    case 166:
    case 167:
    case 168:
    case 169:
      {
        unsigned char _athlon_load_automaton_state;
        temp = athlon_load_transitions [athlon_load_translate [insn_code] + chip->athlon_load_automaton_state * 10];
        if (temp >= 162)
          return internal_min_issue_delay (insn_code, chip);
        else
          _athlon_load_automaton_state = temp;
        temp = athlon_transitions [athlon_translate [insn_code] + chip->athlon_automaton_state * 10];
        if (temp >= 76)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->athlon_automaton_state = temp;
        chip->athlon_load_automaton_state = _athlon_load_automaton_state;
        return -1;
      }
    case 151:
    case 152:
    case 153:
      {
        unsigned char _athlon_mult_automaton_state;
        temp = athlon_mult_transitions [athlon_mult_translate [insn_code] + chip->athlon_mult_automaton_state * 4];
        if (temp >= 16)
          return internal_min_issue_delay (insn_code, chip);
        else
          _athlon_mult_automaton_state = temp;
        temp = athlon_transitions [athlon_translate [insn_code] + chip->athlon_automaton_state * 10];
        if (temp >= 76)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->athlon_automaton_state = temp;
        chip->athlon_mult_automaton_state = _athlon_mult_automaton_state;
        return -1;
      }
    case 154:
    case 155:
    case 156:
      {
        unsigned char _athlon_mult_automaton_state;
        unsigned char _athlon_load_automaton_state;
        temp = athlon_mult_transitions [athlon_mult_translate [insn_code] + chip->athlon_mult_automaton_state * 4];
        if (temp >= 16)
          return internal_min_issue_delay (insn_code, chip);
        else
          _athlon_mult_automaton_state = temp;
        temp = athlon_load_transitions [athlon_load_translate [insn_code] + chip->athlon_load_automaton_state * 10];
        if (temp >= 162)
          return internal_min_issue_delay (insn_code, chip);
        else
          _athlon_load_automaton_state = temp;
        temp = athlon_transitions [athlon_translate [insn_code] + chip->athlon_automaton_state * 10];
        if (temp >= 76)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->athlon_automaton_state = temp;
        chip->athlon_mult_automaton_state = _athlon_mult_automaton_state;
        chip->athlon_load_automaton_state = _athlon_load_automaton_state;
        return -1;
      }
    case 157:
    case 179:
    case 182:
    case 185:
    case 186:
    case 189:
    case 190:
    case 192:
    case 194:
    case 196:
    case 199:
    case 202:
    case 214:
    case 215:
    case 216:
    case 218:
    case 220:
    case 223:
    case 224:
    case 227:
    case 230:
    case 231:
    case 234:
    case 237:
    case 240:
    case 241:
    case 243:
    case 245:
    case 252:
    case 254:
    case 256:
    case 257:
    case 260:
    case 263:
    case 264:
    case 267:
    case 270:
    case 271:
      {
        unsigned short _athlon_fp_automaton_state;
        temp = athlon_fp_base [chip->athlon_fp_automaton_state] + athlon_fp_translate [insn_code];
        if (athlon_fp_check [temp] != chip->athlon_fp_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _athlon_fp_automaton_state = athlon_fp_transitions [temp];
        temp = athlon_transitions [athlon_translate [insn_code] + chip->athlon_automaton_state * 10];
        if (temp >= 76)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->athlon_automaton_state = temp;
        chip->athlon_fp_automaton_state = _athlon_fp_automaton_state;
        return -1;
      }
    case 158:
    case 170:
    case 171:
    case 172:
    case 173:
    case 174:
    case 175:
    case 176:
    case 177:
    case 178:
    case 180:
    case 181:
    case 183:
    case 184:
    case 187:
    case 188:
    case 191:
    case 193:
    case 195:
    case 197:
    case 198:
    case 200:
    case 201:
    case 203:
    case 204:
    case 205:
    case 206:
    case 207:
    case 208:
    case 209:
    case 210:
    case 211:
    case 212:
    case 213:
    case 217:
    case 219:
    case 221:
    case 222:
    case 225:
    case 226:
    case 228:
    case 229:
    case 232:
    case 233:
    case 235:
    case 236:
    case 238:
    case 239:
    case 242:
    case 244:
    case 246:
    case 247:
    case 248:
    case 249:
    case 250:
    case 251:
    case 253:
    case 255:
    case 258:
    case 259:
    case 261:
    case 262:
    case 265:
    case 266:
    case 268:
    case 269:
      {
        unsigned short _athlon_fp_automaton_state;
        unsigned char _athlon_load_automaton_state;
        temp = athlon_fp_base [chip->athlon_fp_automaton_state] + athlon_fp_translate [insn_code];
        if (athlon_fp_check [temp] != chip->athlon_fp_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _athlon_fp_automaton_state = athlon_fp_transitions [temp];
        temp = athlon_load_transitions [athlon_load_translate [insn_code] + chip->athlon_load_automaton_state * 10];
        if (temp >= 162)
          return internal_min_issue_delay (insn_code, chip);
        else
          _athlon_load_automaton_state = temp;
        temp = athlon_transitions [athlon_translate [insn_code] + chip->athlon_automaton_state * 10];
        if (temp >= 76)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->athlon_automaton_state = temp;
        chip->athlon_fp_automaton_state = _athlon_fp_automaton_state;
        chip->athlon_load_automaton_state = _athlon_load_automaton_state;
        return -1;
      }
    case 272:
      {
        unsigned short _athlon_fp_automaton_state;
        unsigned char _athlon_mult_automaton_state;
        unsigned char _athlon_load_automaton_state;
        unsigned char _athlon_automaton_state;
        unsigned char _k6_branch_unit_automaton_state;
        unsigned char _k6_fpu_unit_automaton_state;
        unsigned char _k6_integer_units_automaton_state;
        unsigned char _k6_store_unit_automaton_state;
        unsigned char _k6_load_unit_automaton_state;
        unsigned char _k6_decoder_automaton_state;
        unsigned char _ppro_store_automaton_state;
        unsigned char _ppro_load_automaton_state;
        unsigned char _ppro_fdiv_automaton_state;
        unsigned char _ppro_idiv_automaton_state;
        unsigned char _ppro_core_automaton_state;
        unsigned char _ppro_decoder_automaton_state;
        unsigned char _pentium_fpu_automaton_state;
        temp = athlon_fp_base [chip->athlon_fp_automaton_state] + athlon_fp_translate [insn_code];
        if (athlon_fp_check [temp] != chip->athlon_fp_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _athlon_fp_automaton_state = athlon_fp_transitions [temp];
        temp = athlon_mult_transitions [athlon_mult_translate [insn_code] + chip->athlon_mult_automaton_state * 4];
        if (temp >= 16)
          return internal_min_issue_delay (insn_code, chip);
        else
          _athlon_mult_automaton_state = temp;
        temp = athlon_load_transitions [athlon_load_translate [insn_code] + chip->athlon_load_automaton_state * 10];
        if (temp >= 162)
          return internal_min_issue_delay (insn_code, chip);
        else
          _athlon_load_automaton_state = temp;
        temp = athlon_transitions [athlon_translate [insn_code] + chip->athlon_automaton_state * 10];
        if (temp >= 76)
          return internal_min_issue_delay (insn_code, chip);
        else
          _athlon_automaton_state = temp;
        temp = k6_branch_unit_transitions [k6_branch_unit_translate [insn_code] + chip->k6_branch_unit_automaton_state * 3];
        if (temp >= 2)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_branch_unit_automaton_state = temp;
        temp = k6_fpu_unit_transitions [k6_fpu_unit_translate [insn_code] + chip->k6_fpu_unit_automaton_state * 5];
        if (temp >= 57)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_fpu_unit_automaton_state = temp;
        temp = k6_integer_units_base [chip->k6_integer_units_automaton_state] + k6_integer_units_translate [insn_code];
        if (k6_integer_units_check [temp] != chip->k6_integer_units_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_integer_units_automaton_state = k6_integer_units_transitions [temp];
        temp = k6_store_unit_transitions [k6_store_unit_translate [insn_code] + chip->k6_store_unit_automaton_state * 6];
        if (temp >= 37)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_store_unit_automaton_state = temp;
        temp = k6_load_unit_transitions [k6_load_unit_translate [insn_code] + chip->k6_load_unit_automaton_state * 4];
        if (temp >= 11)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_load_unit_automaton_state = temp;
        temp = k6_decoder_transitions [k6_decoder_translate [insn_code] + chip->k6_decoder_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          _k6_decoder_automaton_state = temp;
        temp = ppro_store_transitions [ppro_store_translate [insn_code] + chip->ppro_store_automaton_state * 7];
        if (temp >= 11)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_store_automaton_state = temp;
        temp = ppro_load_transitions [ppro_load_translate [insn_code] + chip->ppro_load_automaton_state * 4];
        if (temp >= 3)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_load_automaton_state = temp;
        temp = ppro_fdiv_transitions [ppro_fdiv_translate [insn_code] + chip->ppro_fdiv_automaton_state * 5];
        if (temp >= 38)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_fdiv_automaton_state = temp;
        temp = ppro_idiv_transitions [ppro_idiv_translate [insn_code] + chip->ppro_idiv_automaton_state * 5];
        if (temp >= 38)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_idiv_automaton_state = temp;
        temp = ppro_core_base [chip->ppro_core_automaton_state] + ppro_core_translate [insn_code];
        if (ppro_core_check [temp] != chip->ppro_core_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_core_automaton_state = ppro_core_transitions [temp];
        temp = ppro_decoder_transitions [ppro_decoder_translate [insn_code] + chip->ppro_decoder_automaton_state * 4];
        if (temp >= 4)
          return internal_min_issue_delay (insn_code, chip);
        else
          _ppro_decoder_automaton_state = temp;
        temp = pentium_fpu_base [chip->pentium_fpu_automaton_state] + pentium_fpu_translate [insn_code];
        if (pentium_fpu_check [temp] != chip->pentium_fpu_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          _pentium_fpu_automaton_state = pentium_fpu_transitions [temp];
        temp = pentium_base [chip->pentium_automaton_state] + pentium_translate [insn_code];
        if (pentium_check [temp] != chip->pentium_automaton_state)
          return internal_min_issue_delay (insn_code, chip);
        else
          chip->pentium_automaton_state = pentium_transitions [temp];
        chip->athlon_fp_automaton_state = _athlon_fp_automaton_state;
        chip->athlon_mult_automaton_state = _athlon_mult_automaton_state;
        chip->athlon_load_automaton_state = _athlon_load_automaton_state;
        chip->athlon_automaton_state = _athlon_automaton_state;
        chip->k6_branch_unit_automaton_state = _k6_branch_unit_automaton_state;
        chip->k6_fpu_unit_automaton_state = _k6_fpu_unit_automaton_state;
        chip->k6_integer_units_automaton_state = _k6_integer_units_automaton_state;
        chip->k6_store_unit_automaton_state = _k6_store_unit_automaton_state;
        chip->k6_load_unit_automaton_state = _k6_load_unit_automaton_state;
        chip->k6_decoder_automaton_state = _k6_decoder_automaton_state;
        chip->ppro_store_automaton_state = _ppro_store_automaton_state;
        chip->ppro_load_automaton_state = _ppro_load_automaton_state;
        chip->ppro_fdiv_automaton_state = _ppro_fdiv_automaton_state;
        chip->ppro_idiv_automaton_state = _ppro_idiv_automaton_state;
        chip->ppro_core_automaton_state = _ppro_core_automaton_state;
        chip->ppro_decoder_automaton_state = _ppro_decoder_automaton_state;
        chip->pentium_fpu_automaton_state = _pentium_fpu_automaton_state;
        return -1;
      }
    default:
      return -1;
    }
}
static int *dfa_insn_codes;
static int dfa_insn_codes_length;
static void
dfa_insn_code_enlarge (int uid)
{
  int i = dfa_insn_codes_length;
  dfa_insn_codes_length = 2 * uid;
  dfa_insn_codes = xrealloc (dfa_insn_codes,
                 dfa_insn_codes_length * sizeof(int));
  for (; i < dfa_insn_codes_length; i++)
    dfa_insn_codes[i] = -1;
}
static int
dfa_insn_code (rtx insn)
{
  int uid = (((insn)->u.fld[0]).rtint);
  int insn_code;
  if (uid >= dfa_insn_codes_length)
    dfa_insn_code_enlarge (uid);
  insn_code = dfa_insn_codes[uid];
  if (insn_code < 0)
    {
      insn_code = internal_dfa_insn_code (insn);
      dfa_insn_codes[uid] = insn_code;
    }
  return insn_code;
}
int
state_transition (state_t state, rtx insn)
{
  int insn_code;
  if (insn != 0)
    {
      insn_code = dfa_insn_code (insn);
      if (insn_code > 272)
        return -1;
    }
  else
    insn_code = 272;
  return internal_state_transition (insn_code, state);
}
int
min_issue_delay (state_t state, rtx insn)
{
  int insn_code;
  if (insn != 0)
    {
      insn_code = dfa_insn_code (insn);
      if (insn_code > 272)
        return 0;
    }
  else
    insn_code = 272;
  return internal_min_issue_delay (insn_code, state);
}
static int
internal_state_dead_lock_p (struct DFA_chip *chip)
{
  if (pentium_dead_lock [chip->pentium_automaton_state])
    return 1 ;
  if (pentium_fpu_dead_lock [chip->pentium_fpu_automaton_state])
    return 1 ;
  if (ppro_decoder_dead_lock [chip->ppro_decoder_automaton_state])
    return 1 ;
  if (ppro_core_dead_lock [chip->ppro_core_automaton_state])
    return 1 ;
  if (ppro_idiv_dead_lock [chip->ppro_idiv_automaton_state])
    return 1 ;
  if (ppro_fdiv_dead_lock [chip->ppro_fdiv_automaton_state])
    return 1 ;
  if (ppro_load_dead_lock [chip->ppro_load_automaton_state])
    return 1 ;
  if (ppro_store_dead_lock [chip->ppro_store_automaton_state])
    return 1 ;
  if (k6_decoder_dead_lock [chip->k6_decoder_automaton_state])
    return 1 ;
  if (k6_load_unit_dead_lock [chip->k6_load_unit_automaton_state])
    return 1 ;
  if (k6_store_unit_dead_lock [chip->k6_store_unit_automaton_state])
    return 1 ;
  if (k6_integer_units_dead_lock [chip->k6_integer_units_automaton_state])
    return 1 ;
  if (k6_fpu_unit_dead_lock [chip->k6_fpu_unit_automaton_state])
    return 1 ;
  if (k6_branch_unit_dead_lock [chip->k6_branch_unit_automaton_state])
    return 1 ;
  if (athlon_dead_lock [chip->athlon_automaton_state])
    return 1 ;
  if (athlon_load_dead_lock [chip->athlon_load_automaton_state])
    return 1 ;
  if (athlon_mult_dead_lock [chip->athlon_mult_automaton_state])
    return 1 ;
  if (athlon_fp_dead_lock [chip->athlon_fp_automaton_state])
    return 1 ;
  return 0 ;
}
int
state_dead_lock_p (state_t state)
{
  return internal_state_dead_lock_p (state);
}
int
state_size (void)
{
  return sizeof (struct DFA_chip);
}
static void
internal_reset (struct DFA_chip *chip)
{
  memset (chip, 0, sizeof (struct DFA_chip));
}
void
state_reset (state_t state)
{
  internal_reset (state);
}
int
min_insn_conflict_delay (state_t state, rtx insn, rtx insn2)
{
  struct DFA_chip DFA_chip;
  int insn_code, insn2_code;
  if (insn != 0)
    {
      insn_code = dfa_insn_code (insn);
      if (insn_code > 272)
        return 0;
    }
  else
    insn_code = 272;
  if (insn2 != 0)
    {
      insn2_code = dfa_insn_code (insn2);
      if (insn2_code > 272)
        return 0;
    }
  else
    insn2_code = 272;
  memcpy (&DFA_chip, state, sizeof (DFA_chip));
  internal_reset (&DFA_chip);
  if (internal_state_transition (insn_code, &DFA_chip) > 0)
    fancy_abort ("gcc.c", 208682, "?");
  return internal_min_issue_delay (insn2_code, &DFA_chip);
}
static int
internal_insn_latency (int insn_code ,
 int insn2_code ,
 rtx insn ,
 rtx insn2 )
{
  static const unsigned char default_latencies[] =
    {
       11, 12, 1, 2, 1, 3, 2, 1,
        1, 1, 10, 1, 3, 3, 39, 70,
        3, 3, 3, 3, 2, 2, 2, 2,
        1, 1, 1, 1, 6, 1, 4, 1,
        1, 4, 1, 1, 4, 2, 1, 6,
        4, 4, 4, 19, 19, 23, 23, 39,
       39, 3, 5, 3, 5, 1, 5, 2,
        1, 4, 1, 1, 3, 1, 3, 5,
        6, 18, 19, 32, 33, 38, 39, 1,
        2, 3, 3, 4, 3, 3, 3, 3,
        3, 3, 1, 1, 4, 4, 18, 18,
        4, 3, 3, 3, 3, 4, 3, 3,
        3, 3, 3, 4, 5, 5, 48, 48,
        2, 2, 1, 2, 3, 1, 3, 1,
        4, 1, 3, 3, 2, 4, 4, 17,
       19, 1, 3, 3, 1, 0, 2, 1,
        2, 1, 1, 3, 5, 10, 2, 2,
       10, 2, 6, 6, 2, 2, 56, 0,
        0, 2, 4, 3, 3, 3, 2, 5,
        4, 3, 8, 7, 6, 6, 9, 6,
        1, 2, 3, 4, 6, 1, 4, 6,
        1, 2, 12, 13, 0, 2, 10, 8,
        4, 2, 4, 2, 4, 6, 4, 4,
        6, 4, 2, 24, 13, 24, 11, 103,
      100, 7, 7, 17, 15, 3, 5, 3,
        2, 4, 2, 0, 2, 2, 0, 1,
        1, 0, 2, 3, 3, 2, 2, 2,
        2, 4, 3, 3, 2, 3, 5, 3,
        3, 2, 4, 2, 3, 5, 3, 3,
        4, 6, 4, 4, 6, 4, 5, 7,
        5, 5, 4, 2, 5, 3, 6, 9,
        9, 11, 14, 9, 12, 8, 8, 9,
        9, 9, 4, 6, 4, 5, 7, 5,
        5, 20, 22, 20, 39, 35, 39, 39,
    };
  if (insn_code >= 272 || insn2_code >= 272)
    return 0;
  switch (insn_code)
    {
    case 8:
      switch (insn2_code)
        {
        case 10:
          return 0;
        case 9:
          return 0;
        case 8:
          return 0;
        }
      break;
    case 9:
      switch (insn2_code)
        {
        case 10:
          return 0;
        case 9:
          return 0;
        case 8:
          return 0;
        }
      break;
    }
  return default_latencies[insn_code];
}
int
insn_latency (rtx insn, rtx insn2)
{
  int insn_code, insn2_code;
  if (insn != 0)
    {
      insn_code = dfa_insn_code (insn);
      if (insn_code > 272)
        return 0;
    }
  else
    insn_code = 272;
  if (insn2 != 0)
    {
      insn2_code = dfa_insn_code (insn2);
      if (insn2_code > 272)
        return 0;
    }
  else
    insn2_code = 272;
  return internal_insn_latency (insn_code, insn2_code, insn, insn2);
}
void
print_reservation (FILE *f, rtx insn )
{
  static const char *const reservation_names[] =
    {
      "pentium-np*11",
      "pentium-np*12",
      "(pentium-np+pentium-fp)",
      "pentium-np*2",
      "(pentium-fp+pentium-np)",
      "((pentium-fp+pentium-np))*3",
      "((pentium-fp+pentium-np))*2",
      "pentium-firstuv",
      "pentium-firstuv",
      "pentium-firstuv",
      "pentium-firstv,pentium-v*9",
      "pentium-firstv",
      "(pentium-firstu+pentium-fp),nothing,nothing",
      "(pentium-firstuv+pentium-fp+pentium-fmul),pentium-fmul,nothing",
      "(pentium-np+pentium-fp+pentium-fmul),((pentium-fp+pentium-fmul))*36,pentium-fmul*2",
      "(pentium-np+pentium-fp+pentium-fmul),((pentium-fp+pentium-fmul))*67,pentium-fmul*2",
      "pentium-firstuvboth,(pentium-uv+pentium-memory),pentium-uv",
      "pentium-firstuboth,(pentium-u+pentium-memory),pentium-u",
      "pentium-firstvboth,(pentium-v+pentium-memory),pentium-v",
      "pentium-np,pentium-np,pentium-np",
      "pentium-firstuvload,pentium-uv",
      "pentium-firstuload,pentium-u",
      "pentium-firstvload,pentium-v",
      "pentium-np,pentium-np",
      "pentium-firstuv",
      "pentium-firstu",
      "pentium-firstv",
      "pentium-np",
      "decoder0",
      "decodern,p0|p1",
      "decodern,p2",
      "decoder0,(p4+p3)",
      "decodern,p0|p1",
      "decodern,p2",
      "decodern,p0",
      "decodern,p0",
      "decoder0,(p2+p0),(p4+p3)",
      "decoder0,((p0+p1))*2",
      "decodern,p1",
      "decoder0,(p2+p1)",
      "decoder0,(p2+(p0|p1)),p0|p1",
      "decodern,p0",
      "decoder0,(p2+p0)",
      "decoder0,((p0+idiv))*2,((p0|p1)+idiv),idiv*9",
      "decoder0,(p2+p0+idiv),(p0+idiv),((p0|p1)+idiv),idiv*9",
      "decoder0,((p0+idiv))*3,((p0|p1)+idiv),idiv*17",
      "decoder0,(p2+p0+idiv),(p0+idiv),((p0|p1)+idiv),idiv*18",
      "decoder0,((p0+idiv))*3,((p0|p1)+idiv),idiv*33",
      "decoder0,(p2+p0+idiv),(p0+idiv),((p0|p1)+idiv),idiv*34",
      "decodern,p0",
      "decoder0,(p2+p0),p0",
      "decoder0,p0,p0,(p0+p4+p3)",
      "decoder0,(p2+p0),(p0+p4+p3)",
      "decodern,p0",
      "decoder0,p0*2,(p4+p3)",
      "decoder0,p0*2",
      "decodern,p0",
      "decoder0,(p2+p0)",
      "decodern,p0",
      "decodern,p2",
      "decoder0,((p2+p0))*2",
      "decodern,p0",
      "decoder0,(p0+p4),(p0+p3)",
      "decoder0,p0*2",
      "decoder0,(p2+p0),p0",
      "decodern,(p0+fdiv),fdiv*16",
      "decoder0,(p2+p0+fdiv),fdiv*16",
      "decodern,(p0+fdiv),fdiv*30",
      "decoder0,(p2+p0+fdiv),fdiv*30",
      "decodern,(p0+fdiv),fdiv*36",
      "decoder0,(p2+p0+fdiv),fdiv*36",
      "decodern,p1",
      "decoder0,(p2+p1)",
      "decodern,p0",
      "decoder0,(p2+p0)",
      "decodern,p1",
      "decoder0,(p4+p3)",
      "decodern,p0",
      "decodern,p1",
      "decoder0,(p2+p1)",
      "decoder0,p1",
      "decoder0,(p2+p1)",
      "decodern,p0",
      "decoder0,(p2+p0)",
      "decodern,p0",
      "decoder0,(p2+p0)",
      "decoder0,p0*17",
      "decoder0,(p2+p0),p0*16",
      "decoder0,((p2+p1))*2",
      "decoder0,(p2+p1)",
      "decoder0,p0|p1",
      "decoder0,(p2+(p0|p1))",
      "decoder0,(p4+p3)",
      "decoder0,p1*2",
      "decoder0,p1*2",
      "decoder0,((p2+p1))*2",
      "decoder0,p1*2",
      "decoder0,((p2+p1))*2",
      "decoder0,p1*2",
      "decoder0,p1,(p4+p3)",
      "decoder0,p0*2",
      "decoder0,((p2+p0))*2",
      "decoder0,p0*34",
      "decoder0,((p2+p0))*2,p0*32",
      "decodern,p1",
      "decoder0,(p2+p1)",
      "decoder0,(p0|p1)*2",
      "decoder0,p2*2",
      "decoder0,((p4+p3))*2",
      "decodern,p0|p1",
      "decoder0,(p2+(p0|p1))",
      "decoder0,p0|p1,(p4+p3)",
      "decoder0,(p2+(p0|p1)),(p4+p3)",
      "k6_decode_short,k6_alux",
      "k6_decode_short,k6_load,k6_alux",
      "k6_decode_long,k6_load,k6_alux,k6_store",
      "k6_decode_vector,k6_alux*3",
      "k6_decode_vector,k6_load,k6_alux*3",
      "k6_decode_vector,k6_load,k6_alux*3,k6_store",
      "k6_decode_vector,k6_alux*17",
      "k6_decode_vector,k6_load,k6_alux*17",
      "k6_decode_short,k6_alux|k6_aluy",
      "k6_decode_short,k6_load,k6_alux|k6_aluy",
      "k6_decode_long,k6_load,k6_alux|k6_aluy,k6_store",
      "k6_decode_short,k6_alux|k6_aluy",
      "k6_decode_short",
      "k6_decode_short,k6_load",
      "k6_decode_short,k6_store",
      "k6_decode_long,k6_load,k6_alux|k6_aluy",
      "k6_decode_vector,k6_branch",
      "k6_decode_short,k6_branch",
      "k6_decode_short,k6_load",
      "k6_decode_long,k6_load,(k6_alux|k6_aluy)*2",
      "k6_decode_vector,k6_load*10",
      "k6_decode_short,k6_store,k6_alux|k6_aluy",
      "k6_decode_short,k6_store",
      "k6_store*10",
      "k6_decode_vector,k6_fpu*2",
      "k6_decode_short,k6_load,k6_fpu*2",
      "k6_decode_short,k6_store,k6_fpu*2",
      "k6_decode_short,k6_fpu*2",
      "k6_decode_short,k6_load,k6_fpu*2",
      "k6_decode_short,k6_fpu*56",
      "athlon-direct,athlon-ieu",
      "athlon-vector,athlon-ieu",
      "athlon-direct,athlon-agu,athlon-store",
      "athlon-vector,athlon-load,athlon-ieu",
      "athlon-double,(athlon-ieu+athlon-load)",
      "athlon-vector,(athlon-ieu+athlon-load)",
      "athlon-double,(athlon-ieu+athlon-load)",
      "athlon-direct,athlon-agu,nothing",
      "athlon-vector,athlon-ieu0,athlon-mult,nothing,nothing,athlon-ieu0",
      "athlon-direct0,athlon-ieu0,athlon-mult,nothing,athlon-ieu0",
      "athlon-direct0,athlon-ieu0,athlon-mult,athlon-ieu0",
      "athlon-vector,athlon-load,athlon-ieu,athlon-mult,nothing,nothing,athlon-ieu",
      "athlon-vector,athlon-load,athlon-ieu,athlon-mult,nothing,athlon-ieu",
      "athlon-vector,athlon-load,athlon-ieu,athlon-mult,athlon-ieu",
      "athlon-vector,(athlon-ieu0*6+(athlon-fpsched,athlon-fvector))",
      "athlon-vector,((athlon-load,athlon-ieu0*6)+(athlon-fpsched,athlon-fvector))",
      "athlon-vector,athlon-load,athlon-ieu0*6",
      "athlon-direct,athlon-ieu",
      "athlon-vector,athlon-ieu,athlon-ieu",
      "athlon-direct,athlon-load",
      "athlon-direct,athlon-load,athlon-ieu",
      "athlon-vector,athlon-load,athlon-ieu,athlon-ieu",
      "athlon-direct,athlon-agu,athlon-store",
      "athlon-direct,athlon-load,athlon-ieu,athlon-store,athlon-store",
      "athlon-vector,athlon-load,athlon-ieu,athlon-ieu,athlon-store",
      "athlon-direct,(athlon-ieu+athlon-agu),athlon-store",
      "athlon-vector,(athlon-ieu+athlon-agu),athlon-ieu,athlon-store",
      "athlon-vector,athlon-fpload2,athlon-fvector*9",
      "athlon-vector,athlon-fpload2k8,athlon-fvector*9",
      "athlon-direct,athlon-fpload,athlon-fany",
      "athlon-direct,athlon-fploadk8,athlon-fstore",
      "athlon-vector,(athlon-fpsched+athlon-agu),(athlon-store2+athlon-fvector*7)",
      "athlon-vector,(athlon-fpsched+athlon-agu),(athlon-store2+athlon-fvector*6)",
      "athlon-direct,(athlon-fpsched+athlon-agu),(athlon-fstore+athlon-store)",
      "athlon-direct,(athlon-fpsched+athlon-agu),(athlon-fstore+athlon-store)",
      "athlon-direct,(athlon-fpsched+athlon-agu),(athlon-fstore+athlon-store)",
      "athlon-direct,athlon-fpsched,athlon-faddmul",
      "athlon-direct,athlon-fpload,athlon-fadd",
      "athlon-direct,athlon-fploadk8,athlon-fadd",
      "athlon-direct,athlon-fpsched,athlon-fadd",
      "athlon-direct,athlon-fpload,athlon-fmul",
      "athlon-direct,athlon-fploadk8,athlon-fmul",
      "athlon-direct,athlon-fpsched,athlon-fmul",
      "athlon-direct,athlon-fpsched,athlon-fmul",
      "athlon-direct,athlon-fpload,athlon-fmul",
      "athlon-direct,athlon-fploadk8,athlon-fmul",
      "athlon-direct,athlon-fpsched,athlon-fmul",
      "athlon-direct,athlon-fpsched,athlon-fmul",
      "athlon-vector,athlon-fpload,athlon-fvector",
      "athlon-vector,athlon-fpsched,athlon-fvector",
      "athlon-vector,athlon-fpload,athlon-fvector",
      "athlon-vector,athlon-fpsched,athlon-fvector",
      "athlon-vector,athlon-fploadk8,athlon-fvector",
      "athlon-vector,athlon-fpsched,athlon-fvector",
      "athlon-vector,athlon-fpload,athlon-fadd",
      "athlon-vector,athlon-fploadk8,athlon-fadd",
      "athlon-vector,athlon-fpsched,athlon-fadd",
      "athlon-direct,athlon-fpload,athlon-fadd",
      "athlon-direct,athlon-fploadk8,athlon-fadd",
      "athlon-direct,athlon-fpsched,athlon-fadd",
      "athlon-direct,athlon-fpload,athlon-fany",
      "athlon-direct,athlon-fploadk8,athlon-fstore",
      "athlon-double,athlon-fpload2k8,athlon-fstore,athlon-fstore",
      "athlon-vector,athlon-fpload2,(athlon-fany+athlon-fany)",
      "athlon-vector,athlon-fpload,athlon-fany*2",
      "athlon-double,athlon-fploadk8,(athlon-fstore+athlon-fany)",
      "athlon-direct,athlon-fpload,athlon-fany",
      "athlon-direct,athlon-fploadk8,athlon-fstore",
      "athlon-vector,(athlon-fpsched+athlon-agu),((athlon-fstore+athlon-store2))*2",
      "athlon-double,(athlon-fpsched+athlon-agu),((athlon-fstore+athlon-store2))*2",
      "athlon-direct,(athlon-fpsched+athlon-agu),(athlon-fstore+athlon-store)",
      "athlon-double,athlon-fpsched,(athlon-faddmul+athlon-faddmul)",
      "athlon-vector,athlon-fpsched,(athlon-faddmul+athlon-faddmul)",
      "athlon-direct,athlon-fpsched,athlon-faddmul",
      "athlon-direct,athlon-fpload,athlon-fmul",
      "athlon-direct,athlon-fpsched,athlon-fmul",
      "athlon-direct,athlon-fpload,athlon-faddmul",
      "athlon-direct,athlon-fpsched,athlon-faddmul",
      "athlon-vector,athlon-fpload2,athlon-fmul*2",
      "athlon-double,athlon-fpload2k8,athlon-fmul*2",
      "athlon-vector,athlon-fpsched,athlon-fmul*2",
      "athlon-double,athlon-fpsched,athlon-fmul",
      "athlon-direct,athlon-fpload,athlon-fadd",
      "athlon-direct,athlon-fploadk8,athlon-fadd",
      "athlon-direct,athlon-fpsched,athlon-fadd",
      "athlon-vector,athlon-fpload2,athlon-fadd*2",
      "athlon-double,athlon-fpload2k8,athlon-fadd*2",
      "athlon-vector,athlon-fpsched,athlon-fadd*2",
      "athlon-double,athlon-fpsched,athlon-fadd*2",
      "athlon-vector,athlon-fpload,athlon-fadd",
      "athlon-vector,athlon-fploadk8,athlon-fadd",
      "athlon-vector,athlon-fpsched,athlon-fadd",
      "athlon-direct,athlon-fpload,athlon-fadd",
      "athlon-direct,athlon-fploadk8,athlon-fadd",
      "athlon-direct,athlon-fpsched,athlon-fadd",
      "athlon-vector,athlon-fpload2,athlon-fadd*2",
      "athlon-double,athlon-fpload2k8,athlon-fadd*2",
      "athlon-vector,athlon-fpsched,athlon-fadd*2",
      "athlon-double,athlon-fpsched,athlon-fadd*2",
      "athlon-direct,athlon-fploadk8,athlon-fstore",
      "athlon-direct,athlon-fpsched,athlon-fstore",
      "athlon-double,athlon-fpload2k8,athlon-fstore*2",
      "athlon-double,athlon-fpsched,athlon-fstore,athlon-fstore",
      "athlon-direct,athlon-fploadk8,athlon-fstore",
      "athlon-vector,athlon-fpload,athlon-fstore*2",
      "athlon-double,athlon-fploadk8,athlon-fstore*2",
      "athlon-double,athlon-fploadk8,athlon-fstore",
      "athlon-vector,athlon-fploadk8,athlon-fvector*2",
      "athlon-double,athlon-fploadk8,athlon-fstore*3",
      "athlon-vector,athlon-fpsched,athlon-fvector*3",
      "athlon-double,athlon-fpload2k8,athlon-fstore*3",
      "athlon-vector,athlon-fpsched,athlon-fvector*2",
      "athlon-vector,athlon-fploadk8,athlon-fvector",
      "athlon-vector,athlon-fpsched,athlon-fvector",
      "athlon-double,athlon-fpsched,athlon-fstore",
      "athlon-direct,athlon-fpload,athlon-fmul",
      "athlon-direct,athlon-fploadk8,athlon-fmul",
      "athlon-direct,athlon-fpsched,athlon-fmul",
      "athlon-vector,athlon-fpload2,athlon-fmul*2",
      "athlon-double,athlon-fpload2k8,athlon-fmul*2",
      "athlon-vector,athlon-fpsched,athlon-fmul*2",
      "athlon-double,athlon-fpsched,athlon-fmul*2",
      "athlon-direct,athlon-fpload,athlon-fmul*17",
      "athlon-direct,athlon-fploadk8,athlon-fmul*17",
      "athlon-direct,athlon-fpsched,athlon-fmul*17",
      "athlon-vector,athlon-fpload2,athlon-fmul*34",
      "athlon-double,athlon-fpload2k8,athlon-fmul*34",
      "athlon-vector,athlon-fmul*34",
      "athlon-double,athlon-fmul*34",
      "nothing"
    };
  int insn_code;
  if (insn == 0)
    insn_code = 272;
  else
    {
      insn_code = dfa_insn_code (insn);
      if (insn_code > 272)
        insn_code = 272;
    }
  fputs_unlocked (reservation_names[insn_code], f);
}
void
dfa_clean_insn_cache (void)
{
  int i;
  for (i = 0; i < dfa_insn_codes_length; i++)
    dfa_insn_codes [i] = -1;
}
void
dfa_start (void)
{
  dfa_insn_codes_length = get_max_uid ();
  dfa_insn_codes = xmalloc (dfa_insn_codes_length * sizeof (int));
  dfa_clean_insn_cache ();
}
void
dfa_finish (void)
{
  free (dfa_insn_codes);
}
int length_unit_log = 0;
enum insn_code {
  CODE_FOR_cmpdi_ccno_1_rex64 = 0,
  CODE_FOR_cmpdi_1_insn_rex64 = 2,
  CODE_FOR_cmpqi_ext_3_insn = 15,
  CODE_FOR_cmpqi_ext_3_insn_rex64 = 16,
  CODE_FOR_x86_fnstsw_1 = 28,
  CODE_FOR_x86_sahf_1 = 29,
  CODE_FOR_popsi1 = 40,
  CODE_FOR_movsi_insv_1 = 72,
  CODE_FOR_movdi_insv_1_rex64 = 73,
  CODE_FOR_pushdi2_rex64 = 76,
  CODE_FOR_popdi1 = 79,
  CODE_FOR_swapxf = 102,
  CODE_FOR_zero_extendhisi2_and = 103,
  CODE_FOR_zero_extendsidi2_32 = 111,
  CODE_FOR_zero_extendsidi2_rex64 = 113,
  CODE_FOR_zero_extendhidi2 = 115,
  CODE_FOR_zero_extendqidi2 = 116,
  CODE_FOR_extendsidi2_rex64 = 118,
  CODE_FOR_extendhidi2 = 119,
  CODE_FOR_extendqidi2 = 120,
  CODE_FOR_extendhisi2 = 121,
  CODE_FOR_extendqihi2 = 123,
  CODE_FOR_extendqisi2 = 124,
  CODE_FOR_truncdfsf2_noop = 132,
  CODE_FOR_truncdfsf2_sse_only = 139,
  CODE_FOR_truncxfsf2_noop = 141,
  CODE_FOR_truncxfdf2_noop = 144,
  CODE_FOR_fix_truncdi_nomemory = 148,
  CODE_FOR_fix_truncdi_memory = 149,
  CODE_FOR_fix_truncsfdi_sse = 150,
  CODE_FOR_fix_truncdfdi_sse = 151,
  CODE_FOR_fix_truncsi_nomemory = 153,
  CODE_FOR_fix_truncsi_memory = 154,
  CODE_FOR_fix_truncsfsi_sse = 155,
  CODE_FOR_fix_truncdfsi_sse = 156,
  CODE_FOR_fix_trunchi_nomemory = 158,
  CODE_FOR_fix_trunchi_memory = 159,
  CODE_FOR_x86_fnstcw_1 = 160,
  CODE_FOR_x86_fldcw_1 = 161,
  CODE_FOR_floathixf2 = 174,
  CODE_FOR_floatsixf2 = 175,
  CODE_FOR_floatdixf2 = 176,
  CODE_FOR_adddi3_carry_rex64 = 178,
  CODE_FOR_addqi3_carry = 180,
  CODE_FOR_addhi3_carry = 181,
  CODE_FOR_addsi3_carry = 182,
  CODE_FOR_addqi3_cc = 185,
  CODE_FOR_addsi_1_zext = 202,
  CODE_FOR_addqi_ext_1 = 222,
  CODE_FOR_subdi3_carry_rex64 = 226,
  CODE_FOR_subqi3_carry = 230,
  CODE_FOR_subhi3_carry = 231,
  CODE_FOR_subsi3_carry = 232,
  CODE_FOR_subsi3_carry_zext = 233,
  CODE_FOR_divqi3 = 264,
  CODE_FOR_udivqi3 = 265,
  CODE_FOR_divmodhi4 = 272,
  CODE_FOR_udivmoddi4 = 273,
  CODE_FOR_udivmodsi4 = 275,
  CODE_FOR_testsi_1 = 279,
  CODE_FOR_andqi_ext_0 = 300,
  CODE_FOR_iorqi_ext_0 = 323,
  CODE_FOR_xorqi_ext_0 = 342,
  CODE_FOR_negsf2_memory = 362,
  CODE_FOR_negsf2_ifs = 363,
  CODE_FOR_negdf2_memory = 365,
  CODE_FOR_negdf2_ifs = 366,
  CODE_FOR_abssf2_memory = 377,
  CODE_FOR_abssf2_ifs = 378,
  CODE_FOR_absdf2_memory = 380,
  CODE_FOR_absdf2_ifs = 381,
  CODE_FOR_ashldi3_1 = 404,
  CODE_FOR_x86_shld_1 = 406,
  CODE_FOR_ashrdi3_63_rex64 = 417,
  CODE_FOR_ashrdi3_1 = 422,
  CODE_FOR_x86_shrd_1 = 424,
  CODE_FOR_ashrsi3_31 = 425,
  CODE_FOR_lshrdi3_1 = 449,
  CODE_FOR_setcc_2 = 494,
  CODE_FOR_jump = 509,
  CODE_FOR_doloop_end_internal = 514,
  CODE_FOR_blockage = 523,
  CODE_FOR_return_internal = 524,
  CODE_FOR_return_internal_long = 525,
  CODE_FOR_return_pop_internal = 526,
  CODE_FOR_return_indirect_internal = 527,
  CODE_FOR_nop = 528,
  CODE_FOR_align = 529,
  CODE_FOR_set_got = 530,
  CODE_FOR_eh_return_si = 531,
  CODE_FOR_eh_return_di = 532,
  CODE_FOR_leave = 533,
  CODE_FOR_leave_rex64 = 534,
  CODE_FOR_ctzsi2 = 540,
  CODE_FOR_ctzdi2 = 541,
  CODE_FOR_sqrtsf2_1 = 581,
  CODE_FOR_sqrtsf2_1_sse_only = 582,
  CODE_FOR_sqrtsf2_i387 = 583,
  CODE_FOR_sqrtdf2_1 = 584,
  CODE_FOR_sqrtdf2_1_sse_only = 585,
  CODE_FOR_sqrtdf2_i387 = 586,
  CODE_FOR_sqrtxf2 = 588,
  CODE_FOR_fpremxf4 = 591,
  CODE_FOR_fprem1xf4 = 592,
  CODE_FOR_sincosdf3 = 601,
  CODE_FOR_sincossf3 = 602,
  CODE_FOR_sincosxf3 = 604,
  CODE_FOR_atan2df3_1 = 608,
  CODE_FOR_atan2sf3_1 = 609,
  CODE_FOR_atan2xf3_1 = 610,
  CODE_FOR_fyl2x_xf3 = 611,
  CODE_FOR_fyl2xp1_xf3 = 612,
  CODE_FOR_cld = 617,
  CODE_FOR_x86_movdicc_0_m1_rex64 = 648,
  CODE_FOR_movdicc_c_rex64 = 649,
  CODE_FOR_x86_movsicc_0_m1 = 650,
  CODE_FOR_pro_epilogue_adjust_stack_1 = 670,
  CODE_FOR_pro_epilogue_adjust_stack_rex64 = 671,
  CODE_FOR_pro_epilogue_adjust_stack_rex64_2 = 672,
  CODE_FOR_sse_movsfcc = 673,
  CODE_FOR_sse_movsfcc_eq = 674,
  CODE_FOR_sse_movdfcc = 675,
  CODE_FOR_sse_movdfcc_eq = 676,
  CODE_FOR_allocate_stack_worker_1 = 685,
  CODE_FOR_allocate_stack_worker_rex64 = 686,
  CODE_FOR_trap = 696,
  CODE_FOR_movv4sf_internal = 698,
  CODE_FOR_movv4si_internal = 699,
  CODE_FOR_movv2di_internal = 700,
  CODE_FOR_movv8qi_internal = 701,
  CODE_FOR_movv4hi_internal = 702,
  CODE_FOR_movv2si_internal = 703,
  CODE_FOR_movv2sf_internal = 704,
  CODE_FOR_movv2df_internal = 705,
  CODE_FOR_movv8hi_internal = 706,
  CODE_FOR_movv16qi_internal = 707,
  CODE_FOR_movti_internal = 719,
  CODE_FOR_sse_movmskps = 724,
  CODE_FOR_mmx_pmovmskb = 725,
  CODE_FOR_mmx_maskmovq = 726,
  CODE_FOR_mmx_maskmovq_rex = 727,
  CODE_FOR_sse_movntv4sf = 728,
  CODE_FOR_sse_movntdi = 729,
  CODE_FOR_sse_movhlps = 730,
  CODE_FOR_sse_movlhps = 731,
  CODE_FOR_sse_movhps = 732,
  CODE_FOR_sse_movlps = 733,
  CODE_FOR_sse_loadss_1 = 734,
  CODE_FOR_sse_movss = 735,
  CODE_FOR_sse_storess = 736,
  CODE_FOR_sse_shufps = 737,
  CODE_FOR_addv4sf3 = 738,
  CODE_FOR_vmaddv4sf3 = 739,
  CODE_FOR_subv4sf3 = 740,
  CODE_FOR_vmsubv4sf3 = 741,
  CODE_FOR_mulv4sf3 = 742,
  CODE_FOR_vmmulv4sf3 = 743,
  CODE_FOR_divv4sf3 = 744,
  CODE_FOR_vmdivv4sf3 = 745,
  CODE_FOR_rcpv4sf2 = 746,
  CODE_FOR_vmrcpv4sf2 = 747,
  CODE_FOR_rsqrtv4sf2 = 748,
  CODE_FOR_vmrsqrtv4sf2 = 749,
  CODE_FOR_sqrtv4sf2 = 750,
  CODE_FOR_vmsqrtv4sf2 = 751,
  CODE_FOR_sse2_andv2di3 = 761,
  CODE_FOR_sse2_nandv2di3 = 763,
  CODE_FOR_sse2_iorv2di3 = 765,
  CODE_FOR_sse2_xorv2di3 = 767,
  CODE_FOR_sse_clrv4sf = 768,
  CODE_FOR_sse_clrv2df = 769,
  CODE_FOR_maskcmpv4sf3 = 770,
  CODE_FOR_maskncmpv4sf3 = 771,
  CODE_FOR_vmmaskcmpv4sf3 = 772,
  CODE_FOR_vmmaskncmpv4sf3 = 773,
  CODE_FOR_sse_comi = 774,
  CODE_FOR_sse_ucomi = 775,
  CODE_FOR_sse_unpckhps = 776,
  CODE_FOR_sse_unpcklps = 777,
  CODE_FOR_smaxv4sf3 = 778,
  CODE_FOR_vmsmaxv4sf3 = 779,
  CODE_FOR_sminv4sf3 = 780,
  CODE_FOR_vmsminv4sf3 = 781,
  CODE_FOR_cvtpi2ps = 782,
  CODE_FOR_cvtps2pi = 783,
  CODE_FOR_cvttps2pi = 784,
  CODE_FOR_cvtsi2ss = 785,
  CODE_FOR_cvtsi2ssq = 786,
  CODE_FOR_cvtss2si = 787,
  CODE_FOR_cvtss2siq = 788,
  CODE_FOR_cvttss2si = 789,
  CODE_FOR_cvttss2siq = 790,
  CODE_FOR_addv8qi3 = 791,
  CODE_FOR_addv4hi3 = 792,
  CODE_FOR_addv2si3 = 793,
  CODE_FOR_mmx_adddi3 = 794,
  CODE_FOR_ssaddv8qi3 = 795,
  CODE_FOR_ssaddv4hi3 = 796,
  CODE_FOR_usaddv8qi3 = 797,
  CODE_FOR_usaddv4hi3 = 798,
  CODE_FOR_subv8qi3 = 799,
  CODE_FOR_subv4hi3 = 800,
  CODE_FOR_subv2si3 = 801,
  CODE_FOR_mmx_subdi3 = 802,
  CODE_FOR_sssubv8qi3 = 803,
  CODE_FOR_sssubv4hi3 = 804,
  CODE_FOR_ussubv8qi3 = 805,
  CODE_FOR_ussubv4hi3 = 806,
  CODE_FOR_mulv4hi3 = 807,
  CODE_FOR_smulv4hi3_highpart = 808,
  CODE_FOR_umulv4hi3_highpart = 809,
  CODE_FOR_mmx_pmaddwd = 810,
  CODE_FOR_mmx_iordi3 = 811,
  CODE_FOR_mmx_xordi3 = 812,
  CODE_FOR_mmx_clrdi = 813,
  CODE_FOR_mmx_anddi3 = 814,
  CODE_FOR_mmx_nanddi3 = 815,
  CODE_FOR_mmx_uavgv8qi3 = 816,
  CODE_FOR_mmx_uavgv4hi3 = 817,
  CODE_FOR_mmx_psadbw = 818,
  CODE_FOR_mmx_pinsrw = 819,
  CODE_FOR_mmx_pextrw = 820,
  CODE_FOR_mmx_pshufw = 821,
  CODE_FOR_eqv8qi3 = 822,
  CODE_FOR_eqv4hi3 = 823,
  CODE_FOR_eqv2si3 = 824,
  CODE_FOR_gtv8qi3 = 825,
  CODE_FOR_gtv4hi3 = 826,
  CODE_FOR_gtv2si3 = 827,
  CODE_FOR_umaxv8qi3 = 828,
  CODE_FOR_smaxv4hi3 = 829,
  CODE_FOR_uminv8qi3 = 830,
  CODE_FOR_sminv4hi3 = 831,
  CODE_FOR_ashrv4hi3 = 832,
  CODE_FOR_ashrv2si3 = 833,
  CODE_FOR_lshrv4hi3 = 834,
  CODE_FOR_lshrv2si3 = 835,
  CODE_FOR_mmx_lshrdi3 = 836,
  CODE_FOR_ashlv4hi3 = 837,
  CODE_FOR_ashlv2si3 = 838,
  CODE_FOR_mmx_ashldi3 = 839,
  CODE_FOR_mmx_packsswb = 840,
  CODE_FOR_mmx_packssdw = 841,
  CODE_FOR_mmx_packuswb = 842,
  CODE_FOR_mmx_punpckhbw = 843,
  CODE_FOR_mmx_punpckhwd = 844,
  CODE_FOR_mmx_punpckhdq = 845,
  CODE_FOR_mmx_punpcklbw = 846,
  CODE_FOR_mmx_punpcklwd = 847,
  CODE_FOR_mmx_punpckldq = 848,
  CODE_FOR_emms = 849,
  CODE_FOR_ldmxcsr = 850,
  CODE_FOR_stmxcsr = 851,
  CODE_FOR_addv2sf3 = 854,
  CODE_FOR_subv2sf3 = 855,
  CODE_FOR_subrv2sf3 = 856,
  CODE_FOR_gtv2sf3 = 857,
  CODE_FOR_gev2sf3 = 858,
  CODE_FOR_eqv2sf3 = 859,
  CODE_FOR_pfmaxv2sf3 = 860,
  CODE_FOR_pfminv2sf3 = 861,
  CODE_FOR_mulv2sf3 = 862,
  CODE_FOR_femms = 863,
  CODE_FOR_pf2id = 864,
  CODE_FOR_pf2iw = 865,
  CODE_FOR_pfacc = 866,
  CODE_FOR_pfnacc = 867,
  CODE_FOR_pfpnacc = 868,
  CODE_FOR_pi2fw = 869,
  CODE_FOR_floatv2si2 = 870,
  CODE_FOR_pavgusb = 871,
  CODE_FOR_pfrcpv2sf2 = 872,
  CODE_FOR_pfrcpit1v2sf3 = 873,
  CODE_FOR_pfrcpit2v2sf3 = 874,
  CODE_FOR_pfrsqrtv2sf2 = 875,
  CODE_FOR_pfrsqit1v2sf3 = 876,
  CODE_FOR_pmulhrwv4hi3 = 877,
  CODE_FOR_pswapdv2si2 = 878,
  CODE_FOR_pswapdv2sf2 = 879,
  CODE_FOR_addv2df3 = 884,
  CODE_FOR_vmaddv2df3 = 885,
  CODE_FOR_subv2df3 = 886,
  CODE_FOR_vmsubv2df3 = 887,
  CODE_FOR_mulv2df3 = 888,
  CODE_FOR_vmmulv2df3 = 889,
  CODE_FOR_divv2df3 = 890,
  CODE_FOR_vmdivv2df3 = 891,
  CODE_FOR_smaxv2df3 = 892,
  CODE_FOR_vmsmaxv2df3 = 893,
  CODE_FOR_sminv2df3 = 894,
  CODE_FOR_vmsminv2df3 = 895,
  CODE_FOR_sqrtv2df2 = 896,
  CODE_FOR_vmsqrtv2df2 = 897,
  CODE_FOR_maskcmpv2df3 = 898,
  CODE_FOR_maskncmpv2df3 = 899,
  CODE_FOR_vmmaskcmpv2df3 = 900,
  CODE_FOR_vmmaskncmpv2df3 = 901,
  CODE_FOR_sse2_comi = 902,
  CODE_FOR_sse2_ucomi = 903,
  CODE_FOR_sse2_movmskpd = 904,
  CODE_FOR_sse2_pmovmskb = 905,
  CODE_FOR_sse2_maskmovdqu = 906,
  CODE_FOR_sse2_maskmovdqu_rex64 = 907,
  CODE_FOR_sse2_movntv2df = 908,
  CODE_FOR_sse2_movntv2di = 909,
  CODE_FOR_sse2_movntsi = 910,
  CODE_FOR_cvtdq2ps = 911,
  CODE_FOR_cvtps2dq = 912,
  CODE_FOR_cvttps2dq = 913,
  CODE_FOR_cvtdq2pd = 914,
  CODE_FOR_cvtpd2dq = 915,
  CODE_FOR_cvttpd2dq = 916,
  CODE_FOR_cvtpd2pi = 917,
  CODE_FOR_cvttpd2pi = 918,
  CODE_FOR_cvtpi2pd = 919,
  CODE_FOR_cvtsd2si = 920,
  CODE_FOR_cvtsd2siq = 921,
  CODE_FOR_cvttsd2si = 922,
  CODE_FOR_cvttsd2siq = 923,
  CODE_FOR_cvtsi2sd = 924,
  CODE_FOR_cvtsi2sdq = 925,
  CODE_FOR_cvtsd2ss = 926,
  CODE_FOR_cvtss2sd = 927,
  CODE_FOR_cvtpd2ps = 928,
  CODE_FOR_cvtps2pd = 929,
  CODE_FOR_addv16qi3 = 930,
  CODE_FOR_addv8hi3 = 931,
  CODE_FOR_addv4si3 = 932,
  CODE_FOR_addv2di3 = 933,
  CODE_FOR_ssaddv16qi3 = 934,
  CODE_FOR_ssaddv8hi3 = 935,
  CODE_FOR_usaddv16qi3 = 936,
  CODE_FOR_usaddv8hi3 = 937,
  CODE_FOR_subv16qi3 = 938,
  CODE_FOR_subv8hi3 = 939,
  CODE_FOR_subv4si3 = 940,
  CODE_FOR_subv2di3 = 941,
  CODE_FOR_sssubv16qi3 = 942,
  CODE_FOR_sssubv8hi3 = 943,
  CODE_FOR_ussubv16qi3 = 944,
  CODE_FOR_ussubv8hi3 = 945,
  CODE_FOR_mulv8hi3 = 946,
  CODE_FOR_smulv8hi3_highpart = 947,
  CODE_FOR_umulv8hi3_highpart = 948,
  CODE_FOR_sse2_umulsidi3 = 949,
  CODE_FOR_sse2_umulv2siv2di3 = 950,
  CODE_FOR_sse2_pmaddwd = 951,
  CODE_FOR_sse2_clrti = 952,
  CODE_FOR_sse2_uavgv16qi3 = 953,
  CODE_FOR_sse2_uavgv8hi3 = 954,
  CODE_FOR_sse2_psadbw = 955,
  CODE_FOR_sse2_pinsrw = 956,
  CODE_FOR_sse2_pextrw = 957,
  CODE_FOR_sse2_pshufd = 958,
  CODE_FOR_sse2_pshuflw = 959,
  CODE_FOR_sse2_pshufhw = 960,
  CODE_FOR_eqv16qi3 = 961,
  CODE_FOR_eqv8hi3 = 962,
  CODE_FOR_eqv4si3 = 963,
  CODE_FOR_gtv16qi3 = 964,
  CODE_FOR_gtv8hi3 = 965,
  CODE_FOR_gtv4si3 = 966,
  CODE_FOR_umaxv16qi3 = 967,
  CODE_FOR_smaxv8hi3 = 968,
  CODE_FOR_uminv16qi3 = 969,
  CODE_FOR_sminv8hi3 = 970,
  CODE_FOR_ashrv8hi3 = 971,
  CODE_FOR_ashrv4si3 = 972,
  CODE_FOR_lshrv8hi3 = 973,
  CODE_FOR_lshrv4si3 = 974,
  CODE_FOR_lshrv2di3 = 975,
  CODE_FOR_ashlv8hi3 = 976,
  CODE_FOR_ashlv4si3 = 977,
  CODE_FOR_ashlv2di3 = 978,
  CODE_FOR_ashrv8hi3_ti = 979,
  CODE_FOR_ashrv4si3_ti = 980,
  CODE_FOR_lshrv8hi3_ti = 981,
  CODE_FOR_lshrv4si3_ti = 982,
  CODE_FOR_lshrv2di3_ti = 983,
  CODE_FOR_ashlv8hi3_ti = 984,
  CODE_FOR_ashlv4si3_ti = 985,
  CODE_FOR_ashlv2di3_ti = 986,
  CODE_FOR_sse2_ashlti3 = 987,
  CODE_FOR_sse2_lshrti3 = 988,
  CODE_FOR_sse2_unpckhpd = 989,
  CODE_FOR_sse2_unpcklpd = 990,
  CODE_FOR_sse2_packsswb = 991,
  CODE_FOR_sse2_packssdw = 992,
  CODE_FOR_sse2_packuswb = 993,
  CODE_FOR_sse2_punpckhbw = 994,
  CODE_FOR_sse2_punpckhwd = 995,
  CODE_FOR_sse2_punpckhdq = 996,
  CODE_FOR_sse2_punpcklbw = 997,
  CODE_FOR_sse2_punpcklwd = 998,
  CODE_FOR_sse2_punpckldq = 999,
  CODE_FOR_sse2_punpcklqdq = 1000,
  CODE_FOR_sse2_punpckhqdq = 1001,
  CODE_FOR_sse2_movapd = 1002,
  CODE_FOR_sse2_movupd = 1003,
  CODE_FOR_sse2_movdqa = 1004,
  CODE_FOR_sse2_movdqu = 1005,
  CODE_FOR_sse2_movdq2q = 1006,
  CODE_FOR_sse2_movdq2q_rex64 = 1007,
  CODE_FOR_sse2_movq2dq = 1008,
  CODE_FOR_sse2_movq2dq_rex64 = 1009,
  CODE_FOR_sse2_movq = 1010,
  CODE_FOR_sse2_loadd = 1011,
  CODE_FOR_sse2_stored = 1012,
  CODE_FOR_sse2_movhpd = 1013,
  CODE_FOR_sse2_loadsd_1 = 1014,
  CODE_FOR_sse2_movsd = 1015,
  CODE_FOR_sse2_storesd = 1016,
  CODE_FOR_sse2_shufpd = 1017,
  CODE_FOR_sse2_clflush = 1018,
  CODE_FOR_mwait = 1021,
  CODE_FOR_monitor = 1022,
  CODE_FOR_addsubv4sf3 = 1023,
  CODE_FOR_addsubv2df3 = 1024,
  CODE_FOR_haddv4sf3 = 1025,
  CODE_FOR_haddv2df3 = 1026,
  CODE_FOR_hsubv4sf3 = 1027,
  CODE_FOR_hsubv2df3 = 1028,
  CODE_FOR_movshdup = 1029,
  CODE_FOR_movsldup = 1030,
  CODE_FOR_lddqu = 1031,
  CODE_FOR_loadddup = 1032,
  CODE_FOR_movddup = 1033,
  CODE_FOR_cmpdi = 1034,
  CODE_FOR_cmpsi = 1035,
  CODE_FOR_cmphi = 1036,
  CODE_FOR_cmpqi = 1037,
  CODE_FOR_cmpdi_1_rex64 = 1038,
  CODE_FOR_cmpsi_1 = 1039,
  CODE_FOR_cmpqi_ext_3 = 1040,
  CODE_FOR_cmpxf = 1041,
  CODE_FOR_cmpdf = 1042,
  CODE_FOR_cmpsf = 1043,
  CODE_FOR_movsi = 1045,
  CODE_FOR_movhi = 1046,
  CODE_FOR_movstricthi = 1047,
  CODE_FOR_movqi = 1048,
  CODE_FOR_reload_outqi = 1049,
  CODE_FOR_movstrictqi = 1050,
  CODE_FOR_movdi = 1051,
  CODE_FOR_movsf = 1060,
  CODE_FOR_movdf = 1064,
  CODE_FOR_movxf = 1069,
  CODE_FOR_zero_extendhisi2 = 1075,
  CODE_FOR_zero_extendqihi2 = 1077,
  CODE_FOR_zero_extendqisi2 = 1081,
  CODE_FOR_zero_extendsidi2 = 1085,
  CODE_FOR_extendsidi2 = 1089,
  CODE_FOR_extendsfdf2 = 1099,
  CODE_FOR_extendsfxf2 = 1100,
  CODE_FOR_extenddfxf2 = 1101,
  CODE_FOR_truncdfsf2 = 1102,
  CODE_FOR_truncxfsf2 = 1107,
  CODE_FOR_truncxfdf2 = 1110,
  CODE_FOR_fix_truncxfdi2 = 1113,
  CODE_FOR_fix_truncdfdi2 = 1114,
  CODE_FOR_fix_truncsfdi2 = 1115,
  CODE_FOR_fix_truncxfsi2 = 1121,
  CODE_FOR_fix_truncdfsi2 = 1122,
  CODE_FOR_fix_truncsfsi2 = 1123,
  CODE_FOR_fix_truncxfhi2 = 1129,
  CODE_FOR_fix_truncdfhi2 = 1130,
  CODE_FOR_fix_truncsfhi2 = 1131,
  CODE_FOR_floathisf2 = 1135,
  CODE_FOR_floatsisf2 = 1136,
  CODE_FOR_floatdisf2 = 1138,
  CODE_FOR_floathidf2 = 1140,
  CODE_FOR_floatsidf2 = 1141,
  CODE_FOR_floatdidf2 = 1142,
  CODE_FOR_floatunssisf2 = 1144,
  CODE_FOR_floatunsdisf2 = 1145,
  CODE_FOR_floatunsdidf2 = 1146,
  CODE_FOR_vec_setv2df = 1147,
  CODE_FOR_vec_extractv2df = 1148,
  CODE_FOR_vec_initv2df = 1149,
  CODE_FOR_vec_setv4sf = 1150,
  CODE_FOR_vec_extractv4sf = 1151,
  CODE_FOR_vec_initv4sf = 1152,
  CODE_FOR_adddi3 = 1153,
  CODE_FOR_addsi3 = 1155,
  CODE_FOR_addhi3 = 1165,
  CODE_FOR_addqi3 = 1166,
  CODE_FOR_addxf3 = 1167,
  CODE_FOR_adddf3 = 1168,
  CODE_FOR_addsf3 = 1169,
  CODE_FOR_subdi3 = 1170,
  CODE_FOR_subsi3 = 1172,
  CODE_FOR_subhi3 = 1173,
  CODE_FOR_subqi3 = 1174,
  CODE_FOR_subxf3 = 1175,
  CODE_FOR_subdf3 = 1176,
  CODE_FOR_subsf3 = 1177,
  CODE_FOR_muldi3 = 1178,
  CODE_FOR_mulsi3 = 1179,
  CODE_FOR_mulhi3 = 1180,
  CODE_FOR_mulqi3 = 1181,
  CODE_FOR_umulqihi3 = 1182,
  CODE_FOR_mulqihi3 = 1183,
  CODE_FOR_umulditi3 = 1184,
  CODE_FOR_umulsidi3 = 1185,
  CODE_FOR_mulditi3 = 1186,
  CODE_FOR_mulsidi3 = 1187,
  CODE_FOR_umuldi3_highpart = 1188,
  CODE_FOR_umulsi3_highpart = 1189,
  CODE_FOR_smuldi3_highpart = 1190,
  CODE_FOR_smulsi3_highpart = 1191,
  CODE_FOR_mulxf3 = 1192,
  CODE_FOR_muldf3 = 1193,
  CODE_FOR_mulsf3 = 1194,
  CODE_FOR_divxf3 = 1195,
  CODE_FOR_divdf3 = 1196,
  CODE_FOR_divsf3 = 1197,
  CODE_FOR_divmoddi4 = 1198,
  CODE_FOR_divmodsi4 = 1200,
  CODE_FOR_udivmodhi4 = 1204,
  CODE_FOR_testsi_ccno_1 = 1205,
  CODE_FOR_testqi_ccz_1 = 1206,
  CODE_FOR_testqi_ext_ccno_0 = 1207,
  CODE_FOR_anddi3 = 1211,
  CODE_FOR_andsi3 = 1212,
  CODE_FOR_andhi3 = 1216,
  CODE_FOR_andqi3 = 1217,
  CODE_FOR_iordi3 = 1220,
  CODE_FOR_iorsi3 = 1221,
  CODE_FOR_iorhi3 = 1222,
  CODE_FOR_iorqi3 = 1223,
  CODE_FOR_xordi3 = 1226,
  CODE_FOR_xorsi3 = 1227,
  CODE_FOR_xorhi3 = 1228,
  CODE_FOR_xorqi3 = 1229,
  CODE_FOR_xorqi_cc_ext_1 = 1230,
  CODE_FOR_negdi2 = 1233,
  CODE_FOR_negsi2 = 1235,
  CODE_FOR_neghi2 = 1236,
  CODE_FOR_negqi2 = 1237,
  CODE_FOR_negsf2 = 1238,
  CODE_FOR_negdf2 = 1245,
  CODE_FOR_negxf2 = 1252,
  CODE_FOR_abssf2 = 1255,
  CODE_FOR_absdf2 = 1262,
  CODE_FOR_absxf2 = 1268,
  CODE_FOR_one_cmpldi2 = 1271,
  CODE_FOR_one_cmplsi2 = 1273,
  CODE_FOR_one_cmplhi2 = 1276,
  CODE_FOR_one_cmplqi2 = 1278,
  CODE_FOR_ashldi3 = 1280,
  CODE_FOR_x86_shift_adj_1 = 1284,
  CODE_FOR_x86_shift_adj_2 = 1285,
  CODE_FOR_ashlsi3 = 1286,
  CODE_FOR_ashlhi3 = 1290,
  CODE_FOR_ashlqi3 = 1291,
  CODE_FOR_ashrdi3 = 1292,
  CODE_FOR_x86_shift_adj_3 = 1295,
  CODE_FOR_ashrsi3 = 1296,
  CODE_FOR_ashrhi3 = 1297,
  CODE_FOR_ashrqi3 = 1298,
  CODE_FOR_lshrdi3 = 1299,
  CODE_FOR_lshrsi3 = 1302,
  CODE_FOR_lshrhi3 = 1303,
  CODE_FOR_lshrqi3 = 1304,
  CODE_FOR_rotldi3 = 1305,
  CODE_FOR_rotlsi3 = 1306,
  CODE_FOR_rotlhi3 = 1307,
  CODE_FOR_rotlqi3 = 1308,
  CODE_FOR_rotrdi3 = 1309,
  CODE_FOR_rotrsi3 = 1310,
  CODE_FOR_rotrhi3 = 1311,
  CODE_FOR_rotrqi3 = 1312,
  CODE_FOR_extv = 1313,
  CODE_FOR_extzv = 1314,
  CODE_FOR_insv = 1315,
  CODE_FOR_seq = 1316,
  CODE_FOR_sne = 1317,
  CODE_FOR_sgt = 1318,
  CODE_FOR_sgtu = 1319,
  CODE_FOR_slt = 1320,
  CODE_FOR_sltu = 1321,
  CODE_FOR_sge = 1322,
  CODE_FOR_sgeu = 1323,
  CODE_FOR_sle = 1324,
  CODE_FOR_sleu = 1325,
  CODE_FOR_sunordered = 1326,
  CODE_FOR_sordered = 1327,
  CODE_FOR_suneq = 1328,
  CODE_FOR_sunge = 1329,
  CODE_FOR_sungt = 1330,
  CODE_FOR_sunle = 1331,
  CODE_FOR_sunlt = 1332,
  CODE_FOR_sltgt = 1333,
  CODE_FOR_beq = 1338,
  CODE_FOR_bne = 1339,
  CODE_FOR_bgt = 1340,
  CODE_FOR_bgtu = 1341,
  CODE_FOR_blt = 1342,
  CODE_FOR_bltu = 1343,
  CODE_FOR_bge = 1344,
  CODE_FOR_bgeu = 1345,
  CODE_FOR_ble = 1346,
  CODE_FOR_bleu = 1347,
  CODE_FOR_bunordered = 1348,
  CODE_FOR_bordered = 1349,
  CODE_FOR_buneq = 1350,
  CODE_FOR_bunge = 1351,
  CODE_FOR_bungt = 1352,
  CODE_FOR_bunle = 1353,
  CODE_FOR_bunlt = 1354,
  CODE_FOR_bltgt = 1355,
  CODE_FOR_indirect_jump = 1360,
  CODE_FOR_tablejump = 1361,
  CODE_FOR_doloop_end = 1362,
  CODE_FOR_call_pop = 1367,
  CODE_FOR_call = 1368,
  CODE_FOR_sibcall = 1369,
  CODE_FOR_call_value_pop = 1370,
  CODE_FOR_call_value = 1371,
  CODE_FOR_sibcall_value = 1372,
  CODE_FOR_untyped_call = 1373,
  CODE_FOR_return = 1374,
  CODE_FOR_prologue = 1375,
  CODE_FOR_epilogue = 1376,
  CODE_FOR_sibcall_epilogue = 1377,
  CODE_FOR_eh_return = 1378,
  CODE_FOR_ffssi2 = 1381,
  CODE_FOR_ffsdi2 = 1384,
  CODE_FOR_clzsi2 = 1386,
  CODE_FOR_clzdi2 = 1387,
  CODE_FOR_tls_global_dynamic_32 = 1388,
  CODE_FOR_tls_global_dynamic_64 = 1389,
  CODE_FOR_tls_local_dynamic_base_32 = 1390,
  CODE_FOR_tls_local_dynamic_base_64 = 1391,
  CODE_FOR_sqrtsf2 = 1395,
  CODE_FOR_sqrtdf2 = 1396,
  CODE_FOR_fmodsf3 = 1397,
  CODE_FOR_fmoddf3 = 1398,
  CODE_FOR_fmodxf3 = 1399,
  CODE_FOR_dremsf3 = 1400,
  CODE_FOR_dremdf3 = 1401,
  CODE_FOR_dremxf3 = 1402,
  CODE_FOR_tandf2 = 1412,
  CODE_FOR_tansf2 = 1414,
  CODE_FOR_tanxf2 = 1416,
  CODE_FOR_atan2df3 = 1417,
  CODE_FOR_atandf2 = 1418,
  CODE_FOR_atan2sf3 = 1419,
  CODE_FOR_atansf2 = 1420,
  CODE_FOR_atan2xf3 = 1421,
  CODE_FOR_atanxf2 = 1422,
  CODE_FOR_asindf2 = 1423,
  CODE_FOR_asinsf2 = 1424,
  CODE_FOR_asinxf2 = 1425,
  CODE_FOR_acosdf2 = 1426,
  CODE_FOR_acossf2 = 1427,
  CODE_FOR_acosxf2 = 1428,
  CODE_FOR_logsf2 = 1429,
  CODE_FOR_logdf2 = 1430,
  CODE_FOR_logxf2 = 1431,
  CODE_FOR_log10sf2 = 1432,
  CODE_FOR_log10df2 = 1433,
  CODE_FOR_log10xf2 = 1434,
  CODE_FOR_log2sf2 = 1435,
  CODE_FOR_log2df2 = 1436,
  CODE_FOR_log2xf2 = 1437,
  CODE_FOR_log1psf2 = 1438,
  CODE_FOR_log1pdf2 = 1439,
  CODE_FOR_log1pxf2 = 1440,
  CODE_FOR_logbsf2 = 1441,
  CODE_FOR_logbdf2 = 1442,
  CODE_FOR_logbxf2 = 1443,
  CODE_FOR_ilogbsi2 = 1444,
  CODE_FOR_expsf2 = 1445,
  CODE_FOR_expdf2 = 1446,
  CODE_FOR_expxf2 = 1447,
  CODE_FOR_exp10sf2 = 1448,
  CODE_FOR_exp10df2 = 1449,
  CODE_FOR_exp10xf2 = 1450,
  CODE_FOR_exp2sf2 = 1451,
  CODE_FOR_exp2df2 = 1452,
  CODE_FOR_exp2xf2 = 1453,
  CODE_FOR_expm1df2 = 1454,
  CODE_FOR_expm1sf2 = 1455,
  CODE_FOR_expm1xf2 = 1456,
  CODE_FOR_movstrsi = 1457,
  CODE_FOR_movstrdi = 1458,
  CODE_FOR_strmov = 1459,
  CODE_FOR_strmov_singleop = 1460,
  CODE_FOR_rep_mov = 1461,
  CODE_FOR_clrstrsi = 1462,
  CODE_FOR_clrstrdi = 1463,
  CODE_FOR_strset = 1464,
  CODE_FOR_strset_singleop = 1465,
  CODE_FOR_rep_stos = 1466,
  CODE_FOR_cmpstrsi = 1467,
  CODE_FOR_cmpintqi = 1468,
  CODE_FOR_cmpstrqi_nz_1 = 1469,
  CODE_FOR_cmpstrqi_1 = 1470,
  CODE_FOR_strlensi = 1471,
  CODE_FOR_strlendi = 1472,
  CODE_FOR_strlenqi_1 = 1473,
  CODE_FOR_movdicc = 1476,
  CODE_FOR_movsicc = 1477,
  CODE_FOR_movhicc = 1478,
  CODE_FOR_movqicc = 1479,
  CODE_FOR_movsfcc = 1481,
  CODE_FOR_movdfcc = 1482,
  CODE_FOR_movxfcc = 1484,
  CODE_FOR_minsf3 = 1485,
  CODE_FOR_addqicc = 1487,
  CODE_FOR_addhicc = 1488,
  CODE_FOR_addsicc = 1489,
  CODE_FOR_adddicc = 1490,
  CODE_FOR_mindf3 = 1492,
  CODE_FOR_maxsf3 = 1495,
  CODE_FOR_maxdf3 = 1498,
  CODE_FOR_allocate_stack_worker = 1506,
  CODE_FOR_allocate_stack_worker_postreload = 1507,
  CODE_FOR_allocate_stack_worker_rex64_postreload = 1508,
  CODE_FOR_allocate_stack = 1509,
  CODE_FOR_builtin_setjmp_receiver = 1510,
  CODE_FOR_conditional_trap = 1579,
  CODE_FOR_movti = 1582,
  CODE_FOR_movtf = 1583,
  CODE_FOR_movv2df = 1584,
  CODE_FOR_movv8hi = 1585,
  CODE_FOR_movv16qi = 1586,
  CODE_FOR_movv4sf = 1587,
  CODE_FOR_movv4si = 1588,
  CODE_FOR_movv2di = 1589,
  CODE_FOR_movv2si = 1590,
  CODE_FOR_movv4hi = 1591,
  CODE_FOR_movv8qi = 1592,
  CODE_FOR_movv2sf = 1593,
  CODE_FOR_sse_movaps = 1598,
  CODE_FOR_sse_movups = 1599,
  CODE_FOR_sse_loadss = 1600,
  CODE_FOR_negv4sf2 = 1601,
  CODE_FOR_sse_andv4sf3 = 1602,
  CODE_FOR_sse_nandv4sf3 = 1603,
  CODE_FOR_sse_iorv4sf3 = 1604,
  CODE_FOR_sse_xorv4sf3 = 1605,
  CODE_FOR_sse2_andv2df3 = 1606,
  CODE_FOR_sse2_nandv2df3 = 1607,
  CODE_FOR_sse2_iorv2df3 = 1608,
  CODE_FOR_sse2_xorv2df3 = 1609,
  CODE_FOR_sfence = 1610,
  CODE_FOR_sse_prologue_save = 1611,
  CODE_FOR_prefetch = 1612,
  CODE_FOR_sse2_loadsd = 1613,
  CODE_FOR_sse2_mfence = 1614,
  CODE_FOR_sse2_lfence = 1615,
  CODE_FOR_nothing
};
struct optab_handlers
{
  enum insn_code insn_code;
  rtx libfunc;
};
struct optab
{
  enum rtx_code code;
  struct optab_handlers handlers[NUM_MACHINE_MODES];
};
typedef struct optab * optab;
struct convert_optab
{
  enum rtx_code code;
  struct optab_handlers handlers[NUM_MACHINE_MODES][NUM_MACHINE_MODES];
};
typedef struct convert_optab *convert_optab;
enum optab_index
{
  OTI_add,
  OTI_addv,
  OTI_sub,
  OTI_subv,
  OTI_smul,
  OTI_smulv,
  OTI_smul_highpart,
  OTI_umul_highpart,
  OTI_smul_widen,
  OTI_umul_widen,
  OTI_sdiv,
  OTI_sdivv,
  OTI_sdivmod,
  OTI_udiv,
  OTI_udivmod,
  OTI_smod,
  OTI_umod,
  OTI_fmod,
  OTI_drem,
  OTI_ftrunc,
  OTI_and,
  OTI_ior,
  OTI_xor,
  OTI_ashl,
  OTI_lshr,
  OTI_ashr,
  OTI_rotl,
  OTI_rotr,
  OTI_smin,
  OTI_smax,
  OTI_umin,
  OTI_umax,
  OTI_pow,
  OTI_atan2,
  OTI_mov,
  OTI_movstrict,
  OTI_neg,
  OTI_negv,
  OTI_abs,
  OTI_absv,
  OTI_one_cmpl,
  OTI_ffs,
  OTI_clz,
  OTI_ctz,
  OTI_popcount,
  OTI_parity,
  OTI_sqrt,
  OTI_sincos,
  OTI_sin,
  OTI_asin,
  OTI_cos,
  OTI_acos,
  OTI_exp,
  OTI_exp10,
  OTI_exp2,
  OTI_expm1,
  OTI_logb,
  OTI_ilogb,
  OTI_log,
  OTI_log10,
  OTI_log2,
  OTI_log1p,
  OTI_floor,
  OTI_ceil,
  OTI_trunc,
  OTI_round,
  OTI_nearbyint,
  OTI_tan,
  OTI_atan,
  OTI_cmp,
  OTI_ucmp,
  OTI_tst,
  OTI_eq,
  OTI_ne,
  OTI_gt,
  OTI_ge,
  OTI_lt,
  OTI_le,
  OTI_unord,
  OTI_strlen,
  OTI_cbranch,
  OTI_cmov,
  OTI_cstore,
  OTI_push,
  OTI_addcc,
  OTI_vec_set,
  OTI_vec_extract,
  OTI_vec_init,
  OTI_MAX
};
extern optab optab_table[OTI_MAX];
enum convert_optab_index
{
  CTI_sext,
  CTI_zext,
  CTI_trunc,
  CTI_sfix,
  CTI_ufix,
  CTI_sfixtrunc,
  CTI_ufixtrunc,
  CTI_sfloat,
  CTI_ufloat,
  CONVERT_OPTAB_MAX
};
extern convert_optab convert_optab_table[CONVERT_OPTAB_MAX];
extern enum insn_code reload_in_optab[NUM_MACHINE_MODES];
extern enum insn_code reload_out_optab[NUM_MACHINE_MODES];
extern optab code_to_optab[((int) LAST_AND_UNUSED_RTX_CODE) + 1];
typedef rtx (*rtxfun) (rtx);
extern rtxfun bcc_gen_fctn[((int) LAST_AND_UNUSED_RTX_CODE)];
extern enum insn_code setcc_gen_code[((int) LAST_AND_UNUSED_RTX_CODE)];
extern enum insn_code movcc_gen_code[NUM_MACHINE_MODES];
extern enum insn_code movstr_optab[NUM_MACHINE_MODES];
extern enum insn_code clrstr_optab[NUM_MACHINE_MODES];
extern enum insn_code cmpstr_optab[NUM_MACHINE_MODES];
extern enum insn_code cmpmem_optab[NUM_MACHINE_MODES];
extern rtx expand_binop (enum machine_mode, optab, rtx, rtx, rtx, int,
    enum optab_methods);
extern rtx sign_expand_binop (enum machine_mode, optab, optab, rtx, rtx,
         rtx, int, enum optab_methods);
extern int expand_twoval_unop (optab, rtx, rtx, rtx, int);
extern int expand_twoval_binop (optab, rtx, rtx, rtx, rtx, int);
extern rtx expand_unop (enum machine_mode, optab, rtx, rtx, int);
extern rtx expand_abs_nojump (enum machine_mode, rtx, rtx, int);
extern rtx expand_abs (enum machine_mode, rtx, rtx, int, int);
extern rtx expand_complex_abs (enum machine_mode, rtx, rtx, int);
extern void emit_unop_insn (int, rtx, rtx, enum rtx_code);
extern rtx emit_no_conflict_block (rtx, rtx, rtx, rtx, rtx);
extern void emit_clr_insn (rtx);
extern void emit_0_to_1_insn (rtx);
extern void emit_cmp_insn (rtx, rtx, enum rtx_code, rtx, enum machine_mode,
      int);
enum can_compare_purpose
{
  ccp_jump,
  ccp_cmov,
  ccp_store_flag
};
extern int can_compare_p (enum rtx_code, enum machine_mode,
     enum can_compare_purpose);
extern rtx prepare_operand (int, rtx, int, enum machine_mode,
       enum machine_mode, int);
extern enum insn_code can_extend_p (enum machine_mode, enum machine_mode, int);
extern rtx gen_extend_insn (rtx, rtx, enum machine_mode,
       enum machine_mode, int);
extern void init_fixtab (void);
extern void init_floattab (void);
extern void set_optab_libfunc (optab, enum machine_mode, const char *);
extern void set_conv_libfunc (convert_optab, enum machine_mode,
         enum machine_mode, const char *);
extern void expand_float (rtx, rtx, int);
extern void expand_fix (rtx, rtx, int);
struct resources
{
  char memory;
  char unch_memory;
  char volatil;
  char cc;
  HARD_REG_SET regs;
};
enum mark_resource_type
{
  MARK_SRC_DEST = 0,
  MARK_SRC_DEST_CALL = 1
};
extern void mark_target_live_regs (rtx, rtx, struct resources *);
extern void mark_set_resources (rtx, struct resources *, int,
    enum mark_resource_type);
extern void mark_referenced_resources (rtx, struct resources *, int);
extern void clear_hashed_info_for_insn (rtx);
extern void incr_ticks_for_insn (rtx);
extern void mark_end_of_function_resources (rtx, int);
extern void init_resource_info (rtx);
extern void free_resource_info (void);
extern int memory_move_secondary_cost (enum machine_mode, enum reg_class, int);
enum reload_type
{
  RELOAD_FOR_INPUT, RELOAD_FOR_OUTPUT, RELOAD_FOR_INSN,
  RELOAD_FOR_INPUT_ADDRESS, RELOAD_FOR_INPADDR_ADDRESS,
  RELOAD_FOR_OUTPUT_ADDRESS, RELOAD_FOR_OUTADDR_ADDRESS,
  RELOAD_FOR_OPERAND_ADDRESS, RELOAD_FOR_OPADDR_ADDR,
  RELOAD_OTHER, RELOAD_FOR_OTHER_ADDRESS
};
struct reload
{
  rtx in;
  rtx out;
  enum reg_class class;
  enum machine_mode inmode;
  enum machine_mode outmode;
  enum machine_mode mode;
  unsigned int nregs;
  int inc;
  rtx in_reg;
  rtx out_reg;
  int regno;
  rtx reg_rtx;
  int opnum;
  int secondary_in_reload;
  int secondary_out_reload;
  enum insn_code secondary_in_icode;
  enum insn_code secondary_out_icode;
  enum reload_type when_needed;
  unsigned int optional:1;
  unsigned int nocombine:1;
  unsigned int secondary_p:1;
  unsigned int nongroup:1;
};
extern struct reload rld[(2 * 30 * (2 + 1))];
extern int n_reloads;
extern struct varray_head_tag *reg_equiv_memory_loc_varray;
extern rtx *reg_equiv_constant;
extern rtx *reg_equiv_memory_loc;
extern rtx *reg_equiv_address;
extern rtx *reg_equiv_mem;
extern int n_earlyclobbers;
extern rtx reload_earlyclobbers[30];
extern int reload_n_operands;
extern int reload_first_uid;
extern char indirect_symref_ok;
extern char double_reg_address_ok;
extern int num_not_at_initial_offset;
struct needs
{
  short regs[2][((int) LIM_REG_CLASSES)];
  short groups[((int) LIM_REG_CLASSES)];
};
struct insn_chain
{
  struct insn_chain *next, *prev;
  struct insn_chain *next_need_reload;
  int block;
  rtx insn;
  regset_head live_throughout;
  regset_head dead_or_set;
  struct reload *rld;
  int n_reloads;
  HARD_REG_SET used_spill_regs;
  struct needs need;
  unsigned int need_reload:1;
  unsigned int need_operand_change:1;
  unsigned int need_elim:1;
  unsigned int is_caller_save_insn:1;
};
extern struct insn_chain *reload_insn_chain;
extern struct insn_chain *new_insn_chain (void);
extern void compute_use_by_pseudos (HARD_REG_SET *, regset);
extern rtx get_secondary_mem (rtx, enum machine_mode, int, enum reload_type);
extern void clear_secondary_mem (void);
extern void transfer_replacements (int, int);
extern int remove_address_replacements (rtx in_rtx);
extern int operands_match_p (rtx, rtx);
extern int safe_from_earlyclobber (rtx, rtx);
extern int find_reloads (rtx, int, int, int, short *);
extern rtx form_sum (rtx, rtx);
extern void subst_reloads (rtx);
extern void copy_replacements (rtx, rtx);
extern void move_replacements (rtx *x, rtx *y);
extern rtx find_replacement (rtx *);
extern int refers_to_regno_for_reload_p (unsigned int, unsigned int,
      rtx, rtx *);
extern int reg_overlap_mentioned_for_reload_p (rtx, rtx);
extern int refers_to_mem_for_reload_p (rtx);
extern rtx find_equiv_reg (rtx, rtx, enum reg_class, int, short *,
      int, enum machine_mode);
extern int regno_clobbered_p (unsigned int, rtx, enum machine_mode, int);
extern int earlyclobber_operand_p (rtx);
extern int push_reload (rtx, rtx, rtx *, rtx *, enum reg_class,
   enum machine_mode, enum machine_mode,
   int, int, int, enum reload_type);
extern void reload_cse_regs (rtx);
extern int reloads_conflict (int, int);
extern void init_reload (void);
extern int reload (rtx, int);
extern void mark_home_live (int);
extern rtx eliminate_regs (rtx, enum machine_mode, rtx);
extern rtx gen_reload (rtx, rtx, int, enum reload_type);
extern void deallocate_reload_reg (int r);
extern void init_caller_save (void);
extern void init_save_areas (void);
extern void setup_save_areas (void);
extern void save_call_clobbered_regs (void);
extern void cleanup_subreg_operands (rtx);
extern void debug_reload_to_stream (FILE *);
extern void debug_reload (void);
extern rtx reload_adjust_reg_for_mode (rtx, enum machine_mode);
rtx
gen_cmpdi_ccno_1_rex64 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (VOIDmode, 17)), (gen_rtx_fmt_ee (COMPARE, (VOIDmode), (operand0), (operand1))))
           ;
}
rtx
gen_cmpdi_1_insn_rex64 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (VOIDmode, 17)), (gen_rtx_fmt_ee (COMPARE, (VOIDmode), (operand0), (operand1))))
           ;
}
rtx
gen_cmpqi_ext_3_insn (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (VOIDmode, 17)), (gen_rtx_fmt_ee (COMPARE, (VOIDmode), (gen_rtx_SUBREG (QImode, gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)])), 0)), (operand1))))
           ;
}
rtx
gen_cmpqi_ext_3_insn_rex64 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (VOIDmode, 17)), (gen_rtx_fmt_ee (COMPARE, (VOIDmode), (gen_rtx_SUBREG (QImode, gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)])), 0)), (operand1))))
           ;
}
rtx
gen_x86_fnstsw_1 (rtx operand0 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (HImode), (gen_rtvec (1, gen_rtx_REG (CCFPmode, 18))), (24))))
     ;
}
rtx
gen_x86_sahf_1 (rtx operand0 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_Ei (UNSPEC, (CCmode), (gen_rtvec (1, operand0)), (25))))
     ;
}
rtx
gen_popsi1 (rtx operand0 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (4)])))))))
                                             ;
}
rtx
gen_movsi_insv_1 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand1))
          ;
}
rtx
gen_movdi_insv_1_rex64 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (DImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand1))
          ;
}
rtx
gen_pushdi2_rex64 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_popdi1 (rtx operand0 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (DImode, gen_rtx_REG (DImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (8)])))))))
                                             ;
}
rtx
gen_swapxf (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1)), gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (operand0)))))
            ;
}
rtx
gen_zero_extendhisi2_and (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (SImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_zero_extendsidi2_32 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_zero_extendsidi2_rex64 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (operand1))))
           ;
}
rtx
gen_zero_extendhidi2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (operand1))))
           ;
}
rtx
gen_zero_extendqidi2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (operand1))))
           ;
}
rtx
gen_extendsidi2_rex64 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SIGN_EXTEND, (DImode), (operand1))))
           ;
}
rtx
gen_extendhidi2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SIGN_EXTEND, (DImode), (operand1))))
           ;
}
rtx
gen_extendqidi2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SIGN_EXTEND, (DImode), (operand1))))
           ;
}
rtx
gen_extendhisi2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SIGN_EXTEND, (SImode), (operand1))))
           ;
}
rtx
gen_extendqihi2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SIGN_EXTEND, (HImode), (operand1))))
           ;
}
rtx
gen_extendqisi2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SIGN_EXTEND, (SImode), (operand1))))
           ;
}
rtx
gen_truncdfsf2_noop (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand1))))
           ;
}
rtx
gen_truncdfsf2_sse_only (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand1))))
           ;
}
rtx
gen_truncxfsf2_noop (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand1))))
           ;
}
rtx
gen_truncxfdf2_noop (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand1))))
           ;
}
rtx
gen_fix_truncdi_nomemory (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 ,
 rtx operand4 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (5, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (DImode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand4)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DFmode)))))))
                            ;
}
rtx
gen_fix_truncdi_memory (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (DImode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DFmode)))))))
                            ;
}
rtx
gen_fix_truncsfdi_sse (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (DImode), (operand1))))
           ;
}
rtx
gen_fix_truncdfdi_sse (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (DImode), (operand1))))
           ;
}
rtx
gen_fix_truncsi_nomemory (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 ,
 rtx operand4 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (SImode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand4)))))
            ;
}
rtx
gen_fix_truncsi_memory (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (SImode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)))))
            ;
}
rtx
gen_fix_truncsfsi_sse (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (SImode), (operand1))))
           ;
}
rtx
gen_fix_truncdfsi_sse (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (SImode), (operand1))))
           ;
}
rtx
gen_fix_trunchi_nomemory (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 ,
 rtx operand4 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (HImode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand4)))))
            ;
}
rtx
gen_fix_trunchi_memory (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (HImode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)))))
            ;
}
rtx
gen_x86_fnstcw_1 (rtx operand0 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (HImode), (gen_rtvec (1, gen_rtx_REG (HImode, 18))), (26))))
     ;
}
rtx
gen_x86_fldcw_1 (rtx operand0 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (HImode, 18)), (gen_rtx_fmt_Ei (UNSPEC, (HImode), (gen_rtvec (1, operand0)), (28))))
     ;
}
rtx
gen_floathixf2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (XFmode), (operand1))))
           ;
}
rtx
gen_floatsixf2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (XFmode), (operand1))))
           ;
}
rtx
gen_floatdixf2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (XFmode), (operand1))))
           ;
}
rtx
gen_adddi3_carry_rex64 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_fmt_ee (PLUS, (DImode), (operand3), (operand1))), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_addqi3_carry (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (QImode), (gen_rtx_fmt_ee (PLUS, (QImode), (operand3), (operand1))), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_addhi3_carry (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (HImode), (gen_rtx_fmt_ee (PLUS, (HImode), (operand3), (operand1))), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_addsi3_carry (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_fmt_ee (PLUS, (SImode), (operand3), (operand1))), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_addqi3_cc (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_Ei (UNSPEC, (CCmode), (gen_rtvec (2, operand1, operand2)), (27)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (QImode), (operand1), (operand2)))))))
             ;
}
rtx
gen_addsi_1_zext (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (gen_rtx_fmt_ee (PLUS, (SImode), (operand1), (operand2)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_addqi_ext_1 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand1), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_subdi3_carry_rex64 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (DImode), (operand1), (gen_rtx_fmt_ee (PLUS, (DImode), (operand3), (operand2)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_subqi3_carry (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (QImode), (operand1), (gen_rtx_fmt_ee (PLUS, (QImode), (operand3), (operand2)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_subhi3_carry (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (HImode), (operand1), (gen_rtx_fmt_ee (PLUS, (HImode), (operand3), (operand2)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_subsi3_carry (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (SImode), (operand1), (gen_rtx_fmt_ee (PLUS, (SImode), (operand3), (operand2)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_subsi3_carry_zext (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (gen_rtx_fmt_ee (MINUS, (SImode), (operand1), (gen_rtx_fmt_ee (PLUS, (SImode), (operand3), (operand2)))))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_divqi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (DIV, (QImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_udivqi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UDIV, (QImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_divmodhi4 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (DIV, (HImode), (operand1), (operand2)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (MOD, (HImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_udivmoddi4 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UDIV, (DImode), (operand1), (operand2)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (UMOD, (DImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_udivmodsi4 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UDIV, (SImode), (operand1), (operand2)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (UMOD, (SImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_testsi_1 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (VOIDmode, 17)), (gen_rtx_fmt_ee (COMPARE, (VOIDmode), (gen_rtx_fmt_ee (AND, (SImode), (operand0), (operand1))), ((const_int_rtx[64])))))
             ;
}
rtx
gen_andqi_ext_0 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (gen_rtx_fmt_ee (AND, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand1), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_iorqi_ext_0 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (gen_rtx_fmt_ee (IOR, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand1), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_xorqi_ext_0 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (gen_rtx_fmt_ee (XOR, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand1), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_negsf2_memory (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (SFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_negsf2_ifs (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (SFmode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_negdf2_memory (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (DFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_negdf2_ifs (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (DFmode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_abssf2_memory (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ABS, (SFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_abssf2_ifs (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ABS, (SFmode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_absdf2_memory (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ABS, (DFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_absdf2_ifs (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ABS, (DFmode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_ashldi3_1 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (DImode), (operand1), (operand2)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_x86_shld_1 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (IOR, (SImode), (gen_rtx_fmt_ee (ASHIFT, (SImode), (operand0), (operand2))), (gen_rtx_fmt_ee (LSHIFTRT, (SImode), (operand1), (gen_rtx_fmt_ee (MINUS, (QImode), (const_int_rtx[64 + (32)]), (operand2)))))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_ashrdi3_63_rex64 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (DImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_ashrdi3_1 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (DImode), (operand1), (operand2)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_x86_shrd_1 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (IOR, (SImode), (gen_rtx_fmt_ee (ASHIFTRT, (SImode), (operand0), (operand2))), (gen_rtx_fmt_ee (ASHIFT, (SImode), (operand1), (gen_rtx_fmt_ee (MINUS, (QImode), (const_int_rtx[64 + (32)]), (operand2)))))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_ashrsi3_31 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (SImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_lshrdi3_1 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (DImode), (operand1), (operand2)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_setcc_2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand0))), (gen_rtx_fmt_ee (((enum rtx_code) (operand1)->code), QImode, gen_rtx_REG (VOIDmode, 17), (const_int_rtx[64]))))
              ;
}
rtx
gen_jump (rtx operand0 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))))
           ;
}
rtx
gen_doloop_end_internal (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (gen_rtx_fmt_ee (NE, (VOIDmode), (operand1), ((const_int_rtx[64 +1])))), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_ee (PLUS, (SImode), (operand1), ((const_int_rtx[64 -1]))))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_blockage (rtx operand0 )
{
  return gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (VOIDmode), (gen_rtvec (1, operand0)), (0))
   ;
}
rtx
gen_return_internal (void)
{
  return gen_rtx_fmt_ (RETURN, (VOIDmode));
}
rtx
gen_return_internal_long (void)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ (RETURN, (VOIDmode)), gen_rtx_fmt_Ei (UNSPEC, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))), (75)))))
      ;
}
rtx
gen_return_pop_internal (rtx operand0 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ (RETURN, (VOIDmode)), gen_rtx_fmt_e (USE, (VOIDmode), (operand0)))))
            ;
}
rtx
gen_return_indirect_internal (rtx operand0 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ (RETURN, (VOIDmode)), gen_rtx_fmt_e (USE, (VOIDmode), (operand0)))))
            ;
}
rtx
gen_nop (void)
{
  return (const_int_rtx[64]);
}
rtx
gen_align (rtx operand0 )
{
  return gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (VOIDmode), (gen_rtvec (1, operand0)), (68))
    ;
}
rtx
gen_set_got (rtx operand0 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SImode), (gen_rtvec (1, (const_int_rtx[64]))), (12)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_eh_return_si (rtx operand0 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_Ei (UNSPEC, (VOIDmode), (gen_rtvec (1, operand0)), (76))))
     ;
}
rtx
gen_eh_return_di (rtx operand0 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_Ei (UNSPEC, (VOIDmode), (gen_rtvec (1, operand0)), (76))))
     ;
}
rtx
gen_leave (void)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 6)), (const_int_rtx[64 + (4)])))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 6)), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 6)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               ;
}
rtx
gen_leave_rex64 (void)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 6)), (const_int_rtx[64 + (8)])))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 6)), (gen_rtx_MEM (DImode, gen_rtx_REG (DImode, 6)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               ;
}
rtx
gen_ctzsi2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (CTZ, (SImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_ctzdi2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (CTZ, (DImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_sqrtsf2_1 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SQRT, (SFmode), (operand1))))
           ;
}
rtx
gen_sqrtsf2_1_sse_only (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SQRT, (SFmode), (operand1))))
           ;
}
rtx
gen_sqrtsf2_i387 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SQRT, (SFmode), (operand1))))
           ;
}
rtx
gen_sqrtdf2_1 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SQRT, (DFmode), (operand1))))
           ;
}
rtx
gen_sqrtdf2_1_sse_only (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SQRT, (DFmode), (operand1))))
           ;
}
rtx
gen_sqrtdf2_i387 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SQRT, (DFmode), (operand1))))
           ;
}
rtx
gen_sqrtxf2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SQRT, (XFmode), (operand1))))
           ;
}
rtx
gen_fpremxf4 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand3)), (88)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand3)), (89)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCFPmode, 18)), (gen_rtx_fmt_Ei (UNSPEC, (CCFPmode), (gen_rtvec (1, (const_int_rtx[64]))), (45)))))))
       ;
}
rtx
gen_fprem1xf4 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand3)), (90)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand3)), (91)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCFPmode, 18)), (gen_rtx_fmt_Ei (UNSPEC, (CCFPmode), (gen_rtvec (1, (const_int_rtx[64]))), (45)))))))
       ;
}
rtx
gen_sincosdf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DFmode), (gen_rtvec (1, operand2)), (80)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_Ei (UNSPEC, (DFmode), (gen_rtvec (1, operand2)), (81)))))))
       ;
}
rtx
gen_sincossf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SFmode), (gen_rtvec (1, operand2)), (80)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_Ei (UNSPEC, (SFmode), (gen_rtvec (1, operand2)), (81)))))))
       ;
}
rtx
gen_sincosxf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand2)), (80)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand2)), (81)))))))
       ;
}
rtx
gen_atan2df3_1 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DFmode), (gen_rtvec (2, operand2, operand1)), (65)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DFmode)))))))
                            ;
}
rtx
gen_atan2sf3_1 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SFmode), (gen_rtvec (2, operand2, operand1)), (65)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SFmode)))))))
                            ;
}
rtx
gen_atan2xf3_1 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand1)), (65)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            ;
}
rtx
gen_fyl2x_xf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand1)), (66)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            ;
}
rtx
gen_fyl2xp1_xf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand1)), (67)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            ;
}
rtx
gen_cld (void)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 19)), ((const_int_rtx[64])))
            ;
}
rtx
gen_x86_movdicc_0_m1_rex64 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DImode), (operand1), ((const_int_rtx[64 -1])), ((const_int_rtx[64]))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_movdicc_c_rex64 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DImode), (gen_rtx_fmt_ee (((enum rtx_code) (operand1)->code), VOIDmode, gen_rtx_REG (VOIDmode, 17), (const_int_rtx[64]))), (operand2), (operand3))))
           ;
}
rtx
gen_x86_movsicc_0_m1 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SImode), (operand1), ((const_int_rtx[64 -1])), ((const_int_rtx[64]))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_pro_epilogue_adjust_stack_1 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (SImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               ;
}
rtx
gen_pro_epilogue_adjust_stack_rex64 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (DImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               ;
}
rtx
gen_pro_epilogue_adjust_stack_rex64_2 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (DImode), (operand1), (operand3)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_hard_reg_clobber (CCmode, 17), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               ;
}
rtx
gen_sse_movsfcc (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 ,
 rtx operand4 ,
 rtx operand5 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SFmode), (gen_rtx_fmt_ee (((enum rtx_code) (operand1)->code), VOIDmode, operand4, operand5)), (operand2), (operand3)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SFmode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_sse_movsfcc_eq (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 ,
 rtx operand4 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SFmode), (gen_rtx_fmt_ee (EQ, (VOIDmode), (operand3), (operand4))), (operand1), (operand2)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SFmode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_sse_movdfcc (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 ,
 rtx operand4 ,
 rtx operand5 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DFmode), (gen_rtx_fmt_ee (((enum rtx_code) (operand1)->code), VOIDmode, operand4, operand5)), (operand2), (operand3)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DFmode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_sse_movdfcc_eq (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 ,
 rtx operand4 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DFmode), (gen_rtx_fmt_ee (EQ, (VOIDmode), (operand3), (operand4))), (operand1), (operand2)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DFmode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_allocate_stack_worker_1 (rtx operand0 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (SImode), (gen_rtvec (1, operand0)), (10)), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (MINUS, (SImode), (gen_rtx_REG (SImode, 7)), (operand0)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_allocate_stack_worker_rex64 (rtx operand0 )
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (DImode), (gen_rtvec (1, operand0)), (10)), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (MINUS, (DImode), (gen_rtx_REG (DImode, 7)), (operand0)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_trap (void)
{
  return gen_rtx_fmt_ee (TRAP_IF, (VOIDmode), ((const_int_rtx[64 +1])), (const_int_rtx[64 + (5)]))
                                          ;
}
rtx
gen_movv4sf_internal (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_movv4si_internal (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_movv2di_internal (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_movv8qi_internal (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_movv4hi_internal (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_movv2si_internal (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_movv2sf_internal (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_movv2df_internal (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_movv8hi_internal (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_movv16qi_internal (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_movti_internal (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_sse_movmskps (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SImode), (gen_rtvec (1, operand1)), (33))))
     ;
}
rtx
gen_mmx_pmovmskb (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SImode), (gen_rtvec (1, operand1)), (33))))
     ;
}
rtx
gen_mmx_maskmovq (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (V8QImode, operand0)), (gen_rtx_fmt_Ei (UNSPEC, (V8QImode), (gen_rtvec (2, operand1, operand2)), (32))))
     ;
}
rtx
gen_mmx_maskmovq_rex (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (V8QImode, operand0)), (gen_rtx_fmt_Ei (UNSPEC, (V8QImode), (gen_rtvec (2, operand1, operand2)), (32))))
     ;
}
rtx
gen_sse_movntv4sf (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (1, operand1)), (34))))
     ;
}
rtx
gen_sse_movntdi (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, operand1)), (34))))
     ;
}
rtx
gen_sse_movhlps (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (operand1), (gen_rtx_fmt_ee (VEC_SELECT, (V4SFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, const_int_rtx[64 + (2)], const_int_rtx[64 + (3)], (const_int_rtx[64]), (const_int_rtx[64 +1]))))))), (const_int_rtx[64 + (3)]))))
                                           ;
}
rtx
gen_sse_movlhps (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (operand1), (gen_rtx_fmt_ee (VEC_SELECT, (V4SFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, const_int_rtx[64 + (2)], const_int_rtx[64 + (3)], (const_int_rtx[64]), (const_int_rtx[64 +1]))))))), (const_int_rtx[64 + (12)]))))
                                            ;
}
rtx
gen_sse_movhps (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (operand1), (operand2), (const_int_rtx[64 + (12)]))))
                                            ;
}
rtx
gen_sse_movlps (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (operand1), (operand2), (const_int_rtx[64 + (3)]))))
                                           ;
}
rtx
gen_sse_loadss_1 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_e (VEC_DUPLICATE, (V4SFmode), (operand1))), (operand2), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sse_movss (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (operand1), (operand2), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sse_storess (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))
                ;
}
rtx
gen_sse_shufps (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (3, operand1, operand2, operand3)), (41))))
     ;
}
rtx
gen_addv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (V4SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_vmaddv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_ee (PLUS, (V4SFmode), (operand1), (operand2))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_subv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (V4SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_vmsubv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_ee (MINUS, (V4SFmode), (operand1), (operand2))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_mulv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (V4SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_vmmulv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_ee (MULT, (V4SFmode), (operand1), (operand2))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_divv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (DIV, (V4SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_vmdivv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_ee (DIV, (V4SFmode), (operand1), (operand2))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_rcpv4sf2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (1, operand1)), (42))))
     ;
}
rtx
gen_vmrcpv4sf2 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (1, operand1)), (42))), (operand2), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_rsqrtv4sf2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (1, operand1)), (43))))
     ;
}
rtx
gen_vmrsqrtv4sf2 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (1, operand1)), (43))), (operand2), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sqrtv4sf2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SQRT, (V4SFmode), (operand1))))
           ;
}
rtx
gen_vmsqrtv4sf2 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_e (SQRT, (V4SFmode), (operand1))), (operand2), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sse2_andv2di3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (V2DImode), (operand1), (operand2))))
           ;
}
rtx
gen_sse2_nandv2di3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (V2DImode), (gen_rtx_fmt_e (NOT, (V2DImode), (operand1))), (operand2))))
           ;
}
rtx
gen_sse2_iorv2di3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (IOR, (V2DImode), (operand1), (operand2))))
           ;
}
rtx
gen_sse2_xorv2di3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (V2DImode), (operand1), (operand2))))
           ;
}
rtx
gen_sse_clrv4sf (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          ;
}
rtx
gen_sse_clrv2df (rtx operand0 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2DFmode), (gen_rtvec (1, (const_int_rtx[64]))), (45))))
     ;
}
rtx
gen_maskcmpv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), V4SImode, operand1, operand2)))
            ;
}
rtx
gen_maskncmpv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NOT, (V4SImode), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), V4SImode, operand1, operand2)))))
             ;
}
rtx
gen_vmmaskcmpv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SImode), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), V4SImode, operand1, operand2)), (gen_rtx_SUBREG (V4SImode, operand1, 0)), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_vmmaskncmpv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SImode), (gen_rtx_fmt_e (NOT, (V4SImode), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), V4SImode, operand1, operand2)))), (gen_rtx_SUBREG (V4SImode, operand1, 0)), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sse_comi (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCFPmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCFPmode), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand0), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))))
                 ;
}
rtx
gen_sse_ucomi (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCFPUmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCFPUmode), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand0), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))))
                 ;
}
rtx
gen_sse_unpckhps (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_ee (VEC_SELECT, (V4SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, const_int_rtx[64 + (2)], (const_int_rtx[64]), const_int_rtx[64 + (3)], (const_int_rtx[64 +1]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (V4SFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, (const_int_rtx[64]), const_int_rtx[64 + (2)], (const_int_rtx[64 +1]), const_int_rtx[64 + (3)])))))), (const_int_rtx[64 + (5)]))))
                                           ;
}
rtx
gen_sse_unpcklps (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_ee (VEC_SELECT, (V4SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, (const_int_rtx[64]), const_int_rtx[64 + (2)], (const_int_rtx[64 +1]), const_int_rtx[64 + (3)])))))), (gen_rtx_fmt_ee (VEC_SELECT, (V4SFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, const_int_rtx[64 + (2)], (const_int_rtx[64]), const_int_rtx[64 + (3)], (const_int_rtx[64 +1]))))))), (const_int_rtx[64 + (5)]))))
                                           ;
}
rtx
gen_smaxv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SMAX, (V4SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_vmsmaxv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_ee (SMAX, (V4SFmode), (operand1), (operand2))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sminv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SMIN, (V4SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_vmsminv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_ee (SMIN, (V4SFmode), (operand1), (operand2))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_cvtpi2ps (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (operand1), (gen_rtx_fmt_e (VEC_DUPLICATE, (V4SFmode), (gen_rtx_fmt_e (FLOAT, (V2SFmode), (operand2))))), (const_int_rtx[64 + (12)]))))
                                            ;
}
rtx
gen_cvtps2pi (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (V2SImode), (gen_rtx_fmt_e (FIX, (V4SImode), (operand1))), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64]), (const_int_rtx[64 +1]))))))))
                ;
}
rtx
gen_cvttps2pi (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (V2SImode), (gen_rtx_fmt_Ei (UNSPEC, (V4SImode), (gen_rtvec (1, operand1)), (30))), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64]), (const_int_rtx[64 +1]))))))))
                ;
}
rtx
gen_cvtsi2ss (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (operand1), (gen_rtx_fmt_e (VEC_DUPLICATE, (V4SFmode), (gen_rtx_fmt_e (FLOAT, (SFmode), (operand2))))), (const_int_rtx[64 + (14)]))))
                                            ;
}
rtx
gen_cvtsi2ssq (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (operand1), (gen_rtx_fmt_e (VEC_DUPLICATE, (V4SFmode), (gen_rtx_fmt_e (FLOAT, (SFmode), (operand2))))), (const_int_rtx[64 + (14)]))))
                                            ;
}
rtx
gen_cvtss2si (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (SImode), (gen_rtx_fmt_e (FIX, (V4SImode), (operand1))), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))
                ;
}
rtx
gen_cvtss2siq (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (DImode), (gen_rtx_fmt_e (FIX, (V4DImode), (operand1))), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))
                ;
}
rtx
gen_cvttss2si (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (SImode), (gen_rtx_fmt_Ei (UNSPEC, (V4SImode), (gen_rtvec (1, operand1)), (30))), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))
                ;
}
rtx
gen_cvttss2siq (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (DImode), (gen_rtx_fmt_Ei (UNSPEC, (V4DImode), (gen_rtvec (1, operand1)), (30))), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))
                ;
}
rtx
gen_addv8qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (V8QImode), (operand1), (operand2))))
           ;
}
rtx
gen_addv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_addv2si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (V2SImode), (operand1), (operand2))))
           ;
}
rtx
gen_mmx_adddi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, gen_rtx_fmt_ee (PLUS, (DImode), (operand1), (operand2)))), (45))))
     ;
}
rtx
gen_ssaddv8qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SS_PLUS, (V8QImode), (operand1), (operand2))))
           ;
}
rtx
gen_ssaddv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SS_PLUS, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_usaddv8qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (US_PLUS, (V8QImode), (operand1), (operand2))))
           ;
}
rtx
gen_usaddv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (US_PLUS, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_subv8qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (V8QImode), (operand1), (operand2))))
           ;
}
rtx
gen_subv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_subv2si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (V2SImode), (operand1), (operand2))))
           ;
}
rtx
gen_mmx_subdi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, gen_rtx_fmt_ee (MINUS, (DImode), (operand1), (operand2)))), (45))))
     ;
}
rtx
gen_sssubv8qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SS_MINUS, (V8QImode), (operand1), (operand2))))
           ;
}
rtx
gen_sssubv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SS_MINUS, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_ussubv8qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (US_MINUS, (V8QImode), (operand1), (operand2))))
           ;
}
rtx
gen_ussubv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (US_MINUS, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_mulv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_smulv4hi3_highpart (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (TRUNCATE, (V4HImode), (gen_rtx_fmt_ee (LSHIFTRT, (V4SImode), (gen_rtx_fmt_ee (MULT, (V4SImode), (gen_rtx_fmt_e (SIGN_EXTEND, (V4SImode), (operand1))), (gen_rtx_fmt_e (SIGN_EXTEND, (V4SImode), (operand2))))), (const_int_rtx[64 + (16)]))))))
                                             ;
}
rtx
gen_umulv4hi3_highpart (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (TRUNCATE, (V4HImode), (gen_rtx_fmt_ee (LSHIFTRT, (V4SImode), (gen_rtx_fmt_ee (MULT, (V4SImode), (gen_rtx_fmt_e (ZERO_EXTEND, (V4SImode), (operand1))), (gen_rtx_fmt_e (ZERO_EXTEND, (V4SImode), (operand2))))), (const_int_rtx[64 + (16)]))))))
                                             ;
}
rtx
gen_mmx_pmaddwd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (V2SImode), (gen_rtx_fmt_ee (MULT, (V2SImode), (gen_rtx_fmt_e (SIGN_EXTEND, (V2SImode), (gen_rtx_fmt_ee (VEC_SELECT, (V2HImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64]), const_int_rtx[64 + (2)])))))))), (gen_rtx_fmt_e (SIGN_EXTEND, (V2SImode), (gen_rtx_fmt_ee (VEC_SELECT, (V2HImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64]), const_int_rtx[64 + (2)])))))))))), (gen_rtx_fmt_ee (MULT, (V2SImode), (gen_rtx_fmt_e (SIGN_EXTEND, (V2SImode), (gen_rtx_fmt_ee (VEC_SELECT, (V2HImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64 +1]), const_int_rtx[64 + (3)])))))))), (gen_rtx_fmt_e (SIGN_EXTEND, (V2SImode), (gen_rtx_fmt_ee (VEC_SELECT, (V2HImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64 +1]), const_int_rtx[64 + (3)])))))))))))))
                                                 ;
}
rtx
gen_mmx_iordi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, gen_rtx_fmt_ee (IOR, (DImode), (operand1), (operand2)))), (45))))
     ;
}
rtx
gen_mmx_xordi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, gen_rtx_fmt_ee (XOR, (DImode), (operand1), (operand2)))), (45))))
     ;
}
rtx
gen_mmx_clrdi (rtx operand0 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, (const_int_rtx[64]))), (45))))
     ;
}
rtx
gen_mmx_anddi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, gen_rtx_fmt_ee (AND, (DImode), (operand1), (operand2)))), (45))))
     ;
}
rtx
gen_mmx_nanddi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, gen_rtx_fmt_ee (AND, (DImode), (gen_rtx_fmt_e (NOT, (DImode), (operand1))), (operand2)))), (45))))
     ;
}
rtx
gen_mmx_uavgv8qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (V8QImode), (gen_rtx_fmt_ee (PLUS, (V8QImode), (gen_rtx_fmt_ee (PLUS, (V8QImode), (operand1), (operand2))), (gen_rtx_CONST_VECTOR (V8QImode, gen_rtvec (8, (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1])))))), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_mmx_uavgv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (V4HImode), (gen_rtx_fmt_ee (PLUS, (V4HImode), (gen_rtx_fmt_ee (PLUS, (V4HImode), (operand1), (operand2))), (gen_rtx_CONST_VECTOR (V4HImode, gen_rtvec (4, (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1])))))), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_mmx_psadbw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (2, operand1, operand2)), (61))))
     ;
}
rtx
gen_mmx_pinsrw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4HImode), (operand1), (gen_rtx_fmt_e (VEC_DUPLICATE, (V4HImode), (gen_rtx_fmt_e (TRUNCATE, (HImode), (operand2))))), (operand3))))
           ;
}
rtx
gen_mmx_pextrw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (SImode), (gen_rtx_fmt_ee (VEC_SELECT, (HImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, operand2)))))))))
               ;
}
rtx
gen_mmx_pshufw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4HImode), (gen_rtvec (2, operand1, operand2)), (41))))
     ;
}
rtx
gen_eqv8qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (EQ, (V8QImode), (operand1), (operand2))))
           ;
}
rtx
gen_eqv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (EQ, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_eqv2si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (EQ, (V2SImode), (operand1), (operand2))))
           ;
}
rtx
gen_gtv8qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (GT, (V8QImode), (operand1), (operand2))))
           ;
}
rtx
gen_gtv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (GT, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_gtv2si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (GT, (V2SImode), (operand1), (operand2))))
           ;
}
rtx
gen_umaxv8qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UMAX, (V8QImode), (operand1), (operand2))))
           ;
}
rtx
gen_smaxv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SMAX, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_uminv8qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UMIN, (V8QImode), (operand1), (operand2))))
           ;
}
rtx
gen_sminv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SMIN, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_ashrv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_ashrv2si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (V2SImode), (operand1), (operand2))))
           ;
}
rtx
gen_lshrv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_lshrv2si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (V2SImode), (operand1), (operand2))))
           ;
}
rtx
gen_mmx_lshrdi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, gen_rtx_fmt_ee (LSHIFTRT, (DImode), (operand1), (operand2)))), (45))))
     ;
}
rtx
gen_ashlv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (V4HImode), (operand1), (operand2))))
           ;
}
rtx
gen_ashlv2si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (V2SImode), (operand1), (operand2))))
           ;
}
rtx
gen_mmx_ashldi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, gen_rtx_fmt_ee (ASHIFT, (DImode), (operand1), (operand2)))), (45))))
     ;
}
rtx
gen_mmx_packsswb (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V8QImode), (gen_rtx_fmt_e (SS_TRUNCATE, (V4QImode), (operand1))), (gen_rtx_fmt_e (SS_TRUNCATE, (V4QImode), (operand2))))))
            ;
}
rtx
gen_mmx_packssdw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V4HImode), (gen_rtx_fmt_e (SS_TRUNCATE, (V2HImode), (operand1))), (gen_rtx_fmt_e (SS_TRUNCATE, (V2HImode), (operand2))))))
            ;
}
rtx
gen_mmx_packuswb (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V8QImode), (gen_rtx_fmt_e (US_TRUNCATE, (V4QImode), (operand1))), (gen_rtx_fmt_e (US_TRUNCATE, (V4QImode), (operand2))))))
            ;
}
rtx
gen_mmx_punpckhbw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V8QImode), (gen_rtx_fmt_ee (VEC_SELECT, (V8QImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (8, const_int_rtx[64 + (4)], (const_int_rtx[64]), const_int_rtx[64 + (5)], (const_int_rtx[64 +1]), const_int_rtx[64 + (6)], const_int_rtx[64 + (2)], const_int_rtx[64 + (7)], const_int_rtx[64 + (3)])))))), (gen_rtx_fmt_ee (VEC_SELECT, (V8QImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (8, (const_int_rtx[64]), const_int_rtx[64 + (4)], (const_int_rtx[64 +1]), const_int_rtx[64 + (5)], const_int_rtx[64 + (2)], const_int_rtx[64 + (6)], const_int_rtx[64 + (3)], const_int_rtx[64 + (7)])))))), (gen_rtx_CONST_INT (VOIDmode, (long) (85L))))))
                ;
}
rtx
gen_mmx_punpckhwd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4HImode), (gen_rtx_fmt_ee (VEC_SELECT, (V4HImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, (const_int_rtx[64]), const_int_rtx[64 + (2)], (const_int_rtx[64 +1]), const_int_rtx[64 + (3)])))))), (gen_rtx_fmt_ee (VEC_SELECT, (V4HImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, const_int_rtx[64 + (2)], (const_int_rtx[64]), const_int_rtx[64 + (3)], (const_int_rtx[64 +1]))))))), (const_int_rtx[64 + (5)]))))
                                           ;
}
rtx
gen_mmx_punpckhdq (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2SImode), (operand1), (gen_rtx_fmt_ee (VEC_SELECT, (V2SImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64 +1]), (const_int_rtx[64]))))))), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_mmx_punpcklbw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V8QImode), (gen_rtx_fmt_ee (VEC_SELECT, (V8QImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (8, (const_int_rtx[64]), const_int_rtx[64 + (4)], (const_int_rtx[64 +1]), const_int_rtx[64 + (5)], const_int_rtx[64 + (2)], const_int_rtx[64 + (6)], const_int_rtx[64 + (3)], const_int_rtx[64 + (7)])))))), (gen_rtx_fmt_ee (VEC_SELECT, (V8QImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (8, const_int_rtx[64 + (4)], (const_int_rtx[64]), const_int_rtx[64 + (5)], (const_int_rtx[64 +1]), const_int_rtx[64 + (6)], const_int_rtx[64 + (2)], const_int_rtx[64 + (7)], const_int_rtx[64 + (3)])))))), (gen_rtx_CONST_INT (VOIDmode, (long) (85L))))))
                ;
}
rtx
gen_mmx_punpcklwd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4HImode), (gen_rtx_fmt_ee (VEC_SELECT, (V4HImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, const_int_rtx[64 + (2)], (const_int_rtx[64]), const_int_rtx[64 + (3)], (const_int_rtx[64 +1]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (V4HImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, (const_int_rtx[64]), const_int_rtx[64 + (2)], (const_int_rtx[64 +1]), const_int_rtx[64 + (3)])))))), (const_int_rtx[64 + (5)]))))
                                           ;
}
rtx
gen_mmx_punpckldq (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2SImode), (gen_rtx_fmt_ee (VEC_SELECT, (V2SImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64 +1]), (const_int_rtx[64]))))))), (operand2), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_emms (void)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (17, gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))), (31)), gen_hard_reg_clobber (XFmode, 8), gen_hard_reg_clobber (XFmode, 9), gen_hard_reg_clobber (XFmode, 10), gen_hard_reg_clobber (XFmode, 11), gen_hard_reg_clobber (XFmode, 12), gen_hard_reg_clobber (XFmode, 13), gen_hard_reg_clobber (XFmode, 14), gen_hard_reg_clobber (XFmode, 15), gen_hard_reg_clobber (DImode, 29), gen_hard_reg_clobber (DImode, 30), gen_hard_reg_clobber (DImode, 31), gen_hard_reg_clobber (DImode, 32), gen_hard_reg_clobber (DImode, 33), gen_hard_reg_clobber (DImode, 34), gen_hard_reg_clobber (DImode, 35), gen_hard_reg_clobber (DImode, 36))))
                                     ;
}
rtx
gen_ldmxcsr (rtx operand0 )
{
  return gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (VOIDmode), (gen_rtvec (1, operand0)), (37))
    ;
}
rtx
gen_stmxcsr (rtx operand0 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (SImode), (gen_rtvec (1, (const_int_rtx[64]))), (40))))
     ;
}
rtx
gen_addv2sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (V2SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_subv2sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (V2SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_subrv2sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (V2SFmode), (operand2), (operand1))))
           ;
}
rtx
gen_gtv2sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (GT, (V2SImode), (operand1), (operand2))))
           ;
}
rtx
gen_gev2sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (GE, (V2SImode), (operand1), (operand2))))
           ;
}
rtx
gen_eqv2sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (EQ, (V2SImode), (operand1), (operand2))))
           ;
}
rtx
gen_pfmaxv2sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SMAX, (V2SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_pfminv2sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SMIN, (V2SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_mulv2sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (V2SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_femms (void)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (17, gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))), (46)), gen_hard_reg_clobber (XFmode, 8), gen_hard_reg_clobber (XFmode, 9), gen_hard_reg_clobber (XFmode, 10), gen_hard_reg_clobber (XFmode, 11), gen_hard_reg_clobber (XFmode, 12), gen_hard_reg_clobber (XFmode, 13), gen_hard_reg_clobber (XFmode, 14), gen_hard_reg_clobber (XFmode, 15), gen_hard_reg_clobber (DImode, 29), gen_hard_reg_clobber (DImode, 30), gen_hard_reg_clobber (DImode, 31), gen_hard_reg_clobber (DImode, 32), gen_hard_reg_clobber (DImode, 33), gen_hard_reg_clobber (DImode, 34), gen_hard_reg_clobber (DImode, 35), gen_hard_reg_clobber (DImode, 36))))
                                     ;
}
rtx
gen_pf2id (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (V2SImode), (operand1))))
           ;
}
rtx
gen_pf2iw (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SIGN_EXTEND, (V2SImode), (gen_rtx_fmt_e (SS_TRUNCATE, (V2HImode), (gen_rtx_fmt_e (FIX, (V2SImode), (operand1))))))))
             ;
}
rtx
gen_pfacc (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V2SFmode), (gen_rtx_fmt_ee (PLUS, (SFmode), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64 +1]))))))))), (gen_rtx_fmt_ee (PLUS, (SFmode), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64 +1]))))))))))))
                  ;
}
rtx
gen_pfnacc (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V2SFmode), (gen_rtx_fmt_ee (MINUS, (SFmode), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64 +1]))))))))), (gen_rtx_fmt_ee (MINUS, (SFmode), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64 +1]))))))))))))
                  ;
}
rtx
gen_pfpnacc (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V2SFmode), (gen_rtx_fmt_ee (MINUS, (SFmode), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64 +1]))))))))), (gen_rtx_fmt_ee (PLUS, (SFmode), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (SFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64 +1]))))))))))))
                  ;
}
rtx
gen_pi2fw (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (V2SFmode), (gen_rtx_fmt_ee (VEC_CONCAT, (V2SImode), (gen_rtx_fmt_e (SIGN_EXTEND, (SImode), (gen_rtx_fmt_e (TRUNCATE, (HImode), (gen_rtx_fmt_ee (VEC_SELECT, (SImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))))), (gen_rtx_fmt_e (SIGN_EXTEND, (SImode), (gen_rtx_fmt_e (TRUNCATE, (HImode), (gen_rtx_fmt_ee (VEC_SELECT, (SImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64 +1]))))))))))))))))
                    ;
}
rtx
gen_floatv2si2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (V2SFmode), (operand1))))
           ;
}
rtx
gen_pavgusb (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V8QImode), (gen_rtvec (2, operand1, operand2)), (49))))
     ;
}
rtx
gen_pfrcpv2sf2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2SFmode), (gen_rtvec (1, operand1)), (50))))
     ;
}
rtx
gen_pfrcpit1v2sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2SFmode), (gen_rtvec (2, operand1, operand2)), (51))))
     ;
}
rtx
gen_pfrcpit2v2sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2SFmode), (gen_rtvec (2, operand1, operand2)), (52))))
     ;
}
rtx
gen_pfrsqrtv2sf2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2SFmode), (gen_rtvec (1, operand1)), (53))))
     ;
}
rtx
gen_pfrsqit1v2sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2SFmode), (gen_rtvec (2, operand1, operand2)), (54))))
     ;
}
rtx
gen_pmulhrwv4hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (TRUNCATE, (V4HImode), (gen_rtx_fmt_ee (LSHIFTRT, (V4SImode), (gen_rtx_fmt_ee (PLUS, (V4SImode), (gen_rtx_fmt_ee (MULT, (V4SImode), (gen_rtx_fmt_e (SIGN_EXTEND, (V4SImode), (operand1))), (gen_rtx_fmt_e (SIGN_EXTEND, (V4SImode), (operand2))))), (gen_rtx_CONST_VECTOR (V4SImode, gen_rtvec (4, gen_rtx_CONST_INT (VOIDmode, (long) (32768L)), gen_rtx_CONST_INT (VOIDmode, (long) (32768L)), gen_rtx_CONST_INT (VOIDmode, (long) (32768L)), gen_rtx_CONST_INT (VOIDmode, (long) (32768L))))))), (const_int_rtx[64 + (16)]))))))
                                             ;
}
rtx
gen_pswapdv2si2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (V2SImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64 +1]), (const_int_rtx[64]))))))))
                ;
}
rtx
gen_pswapdv2sf2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (V2SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64 +1]), (const_int_rtx[64]))))))))
                ;
}
rtx
gen_addv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (V2DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_vmaddv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (gen_rtx_fmt_ee (PLUS, (V2DFmode), (operand1), (operand2))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_subv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (V2DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_vmsubv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (gen_rtx_fmt_ee (MINUS, (V2DFmode), (operand1), (operand2))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_mulv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (V2DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_vmmulv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (gen_rtx_fmt_ee (MULT, (V2DFmode), (operand1), (operand2))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_divv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (DIV, (V2DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_vmdivv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (gen_rtx_fmt_ee (DIV, (V2DFmode), (operand1), (operand2))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_smaxv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SMAX, (V2DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_vmsmaxv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (gen_rtx_fmt_ee (SMAX, (V2DFmode), (operand1), (operand2))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sminv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SMIN, (V2DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_vmsminv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (gen_rtx_fmt_ee (SMIN, (V2DFmode), (operand1), (operand2))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sqrtv2df2 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SQRT, (V2DFmode), (operand1))))
           ;
}
rtx
gen_vmsqrtv2df2 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (gen_rtx_fmt_e (SQRT, (V2DFmode), (operand1))), (operand2), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_maskcmpv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), V2DImode, operand1, operand2)))
            ;
}
rtx
gen_maskncmpv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NOT, (V2DImode), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), V2DImode, operand1, operand2)))))
             ;
}
rtx
gen_vmmaskcmpv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DImode), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), V2DImode, operand1, operand2)), (gen_rtx_SUBREG (V2DImode, operand1, 0)), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_vmmaskncmpv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DImode), (gen_rtx_fmt_e (NOT, (V2DImode), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), V2DImode, operand1, operand2)))), (gen_rtx_SUBREG (V2DImode, operand1, 0)), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sse2_comi (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCFPmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCFPmode), (gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand0), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))))
                 ;
}
rtx
gen_sse2_ucomi (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCFPUmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCFPUmode), (gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand0), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))))
                 ;
}
rtx
gen_sse2_movmskpd (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SImode), (gen_rtvec (1, operand1)), (33))))
     ;
}
rtx
gen_sse2_pmovmskb (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SImode), (gen_rtvec (1, operand1)), (33))))
     ;
}
rtx
gen_sse2_maskmovdqu (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (V16QImode, operand0)), (gen_rtx_fmt_Ei (UNSPEC, (V16QImode), (gen_rtvec (2, operand1, operand2)), (32))))
     ;
}
rtx
gen_sse2_maskmovdqu_rex64 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (V16QImode, operand0)), (gen_rtx_fmt_Ei (UNSPEC, (V16QImode), (gen_rtvec (2, operand1, operand2)), (32))))
     ;
}
rtx
gen_sse2_movntv2df (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2DFmode), (gen_rtvec (1, operand1)), (34))))
     ;
}
rtx
gen_sse2_movntv2di (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2DImode), (gen_rtvec (1, operand1)), (34))))
     ;
}
rtx
gen_sse2_movntsi (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SImode), (gen_rtvec (1, operand1)), (34))))
     ;
}
rtx
gen_cvtdq2ps (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (V4SFmode), (operand1))))
           ;
}
rtx
gen_cvtps2dq (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (V4SImode), (operand1))))
           ;
}
rtx
gen_cvttps2dq (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SImode), (gen_rtvec (1, operand1)), (30))))
     ;
}
rtx
gen_cvtdq2pd (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (V2DFmode), (gen_rtx_fmt_ee (VEC_SELECT, (V2SImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64]), (const_int_rtx[64 +1]))))))))))
                 ;
}
rtx
gen_cvtpd2dq (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V4SImode), (gen_rtx_fmt_e (FIX, (V2SImode), (operand1))), (gen_rtx_CONST_VECTOR (V2SImode, gen_rtvec (2, (const_int_rtx[64]), (const_int_rtx[64])))))))
                ;
}
rtx
gen_cvttpd2dq (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V4SImode), (gen_rtx_fmt_Ei (UNSPEC, (V2SImode), (gen_rtvec (1, operand1)), (30))), (gen_rtx_CONST_VECTOR (V2SImode, gen_rtvec (2, (const_int_rtx[64]), (const_int_rtx[64])))))))
                ;
}
rtx
gen_cvtpd2pi (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (V2SImode), (operand1))))
           ;
}
rtx
gen_cvttpd2pi (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2SImode), (gen_rtvec (1, operand1)), (30))))
     ;
}
rtx
gen_cvtpi2pd (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (V2DFmode), (operand1))))
           ;
}
rtx
gen_cvtsd2si (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (SImode), (gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))))
                 ;
}
rtx
gen_cvtsd2siq (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (DImode), (gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))))
                 ;
}
rtx
gen_cvttsd2si (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SImode), (gen_rtvec (1, gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64])))))))), (30))))
     ;
}
rtx
gen_cvttsd2siq (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64])))))))), (30))))
     ;
}
rtx
gen_cvtsi2sd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (operand1), (gen_rtx_fmt_e (VEC_DUPLICATE, (V2DFmode), (gen_rtx_fmt_e (FLOAT, (DFmode), (operand2))))), (const_int_rtx[64 + (2)]))))
                                           ;
}
rtx
gen_cvtsi2sdq (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (operand1), (gen_rtx_fmt_e (VEC_DUPLICATE, (V2DFmode), (gen_rtx_fmt_e (FLOAT, (DFmode), (operand2))))), (const_int_rtx[64 + (2)]))))
                                           ;
}
rtx
gen_cvtsd2ss (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (operand1), (gen_rtx_fmt_e (VEC_DUPLICATE, (V4SFmode), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (V2SFmode), (operand2))))), (const_int_rtx[64 + (14)]))))
                                            ;
}
rtx
gen_cvtss2sd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (operand1), (gen_rtx_fmt_e (FLOAT_EXTEND, (V2DFmode), (gen_rtx_fmt_ee (VEC_SELECT, (V2SFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64]), (const_int_rtx[64 +1]))))))))), (const_int_rtx[64 + (2)]))))
                                           ;
}
rtx
gen_cvtpd2ps (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_SUBREG (V4SFmode, gen_rtx_fmt_ee (VEC_CONCAT, (V4SImode), (gen_rtx_SUBREG (V2SImode, gen_rtx_fmt_e (FLOAT_TRUNCATE, (V2SFmode), (operand1)), 0)), (gen_rtx_CONST_VECTOR (V2SImode, gen_rtvec (2, (const_int_rtx[64]), (const_int_rtx[64]))))), 0)))
    ;
}
rtx
gen_cvtps2pd (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_EXTEND, (V2DFmode), (gen_rtx_fmt_ee (VEC_SELECT, (V2SFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64]), (const_int_rtx[64 +1]))))))))))
                 ;
}
rtx
gen_addv16qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (V16QImode), (operand1), (operand2))))
           ;
}
rtx
gen_addv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_addv4si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (V4SImode), (operand1), (operand2))))
           ;
}
rtx
gen_addv2di3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (V2DImode), (operand1), (operand2))))
           ;
}
rtx
gen_ssaddv16qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SS_PLUS, (V16QImode), (operand1), (operand2))))
           ;
}
rtx
gen_ssaddv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SS_PLUS, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_usaddv16qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (US_PLUS, (V16QImode), (operand1), (operand2))))
           ;
}
rtx
gen_usaddv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (US_PLUS, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_subv16qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (V16QImode), (operand1), (operand2))))
           ;
}
rtx
gen_subv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_subv4si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (V4SImode), (operand1), (operand2))))
           ;
}
rtx
gen_subv2di3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (V2DImode), (operand1), (operand2))))
           ;
}
rtx
gen_sssubv16qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SS_MINUS, (V16QImode), (operand1), (operand2))))
           ;
}
rtx
gen_sssubv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SS_MINUS, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_ussubv16qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (US_MINUS, (V16QImode), (operand1), (operand2))))
           ;
}
rtx
gen_ussubv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (US_MINUS, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_mulv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_smulv8hi3_highpart (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (TRUNCATE, (V8HImode), (gen_rtx_fmt_ee (LSHIFTRT, (V8SImode), (gen_rtx_fmt_ee (MULT, (V8SImode), (gen_rtx_fmt_e (SIGN_EXTEND, (V8SImode), (operand1))), (gen_rtx_fmt_e (SIGN_EXTEND, (V8SImode), (operand2))))), (const_int_rtx[64 + (16)]))))))
                                             ;
}
rtx
gen_umulv8hi3_highpart (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (TRUNCATE, (V8HImode), (gen_rtx_fmt_ee (LSHIFTRT, (V8SImode), (gen_rtx_fmt_ee (MULT, (V8SImode), (gen_rtx_fmt_e (ZERO_EXTEND, (V8SImode), (operand1))), (gen_rtx_fmt_e (ZERO_EXTEND, (V8SImode), (operand2))))), (const_int_rtx[64 + (16)]))))))
                                             ;
}
rtx
gen_sse2_umulsidi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (DImode), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (gen_rtx_fmt_ee (VEC_SELECT, (SImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (gen_rtx_fmt_ee (VEC_SELECT, (SImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))))))
                  ;
}
rtx
gen_sse2_umulv2siv2di3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (V2DImode), (gen_rtx_fmt_e (ZERO_EXTEND, (V2DImode), (gen_rtx_fmt_ee (VEC_SELECT, (V2SImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64]), const_int_rtx[64 + (2)])))))))), (gen_rtx_fmt_e (ZERO_EXTEND, (V2DImode), (gen_rtx_fmt_ee (VEC_SELECT, (V2SImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64]), const_int_rtx[64 + (2)])))))))))))
                                                ;
}
rtx
gen_sse2_pmaddwd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (V4SImode), (gen_rtx_fmt_ee (MULT, (V4SImode), (gen_rtx_fmt_e (SIGN_EXTEND, (V4SImode), (gen_rtx_fmt_ee (VEC_SELECT, (V4HImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, (const_int_rtx[64]), const_int_rtx[64 + (2)], const_int_rtx[64 + (4)], const_int_rtx[64 + (6)])))))))), (gen_rtx_fmt_e (SIGN_EXTEND, (V4SImode), (gen_rtx_fmt_ee (VEC_SELECT, (V4HImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, (const_int_rtx[64]), const_int_rtx[64 + (2)], const_int_rtx[64 + (4)], const_int_rtx[64 + (6)])))))))))), (gen_rtx_fmt_ee (MULT, (V4SImode), (gen_rtx_fmt_e (SIGN_EXTEND, (V4SImode), (gen_rtx_fmt_ee (VEC_SELECT, (V4HImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, (const_int_rtx[64 +1]), const_int_rtx[64 + (3)], const_int_rtx[64 + (5)], const_int_rtx[64 + (7)])))))))), (gen_rtx_fmt_e (SIGN_EXTEND, (V4SImode), (gen_rtx_fmt_ee (VEC_SELECT, (V4HImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, (const_int_rtx[64 +1]), const_int_rtx[64 + (3)], const_int_rtx[64 + (5)], const_int_rtx[64 + (7)])))))))))))))
                                                 ;
}
rtx
gen_sse2_clrti (rtx operand0 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), ((const_int_rtx[64])))
            ;
}
rtx
gen_sse2_uavgv16qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (V16QImode), (gen_rtx_fmt_ee (PLUS, (V16QImode), (gen_rtx_fmt_ee (PLUS, (V16QImode), (operand1), (operand2))), (gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec (16, (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1])))))), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sse2_uavgv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (V8HImode), (gen_rtx_fmt_ee (PLUS, (V8HImode), (gen_rtx_fmt_ee (PLUS, (V8HImode), (operand1), (operand2))), (gen_rtx_CONST_VECTOR (V8HImode, gen_rtvec (8, (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1]), (const_int_rtx[64 +1])))))), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sse2_psadbw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2DImode), (gen_rtvec (2, operand1, operand2)), (61))))
     ;
}
rtx
gen_sse2_pinsrw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V8HImode), (operand1), (gen_rtx_fmt_e (VEC_DUPLICATE, (V8HImode), (gen_rtx_fmt_e (TRUNCATE, (HImode), (operand2))))), (operand3))))
           ;
}
rtx
gen_sse2_pextrw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (SImode), (gen_rtx_fmt_ee (VEC_SELECT, (HImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, operand2)))))))))
               ;
}
rtx
gen_sse2_pshufd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SImode), (gen_rtvec (2, operand1, operand2)), (41))))
     ;
}
rtx
gen_sse2_pshuflw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V8HImode), (gen_rtvec (2, operand1, operand2)), (55))))
     ;
}
rtx
gen_sse2_pshufhw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V8HImode), (gen_rtvec (2, operand1, operand2)), (56))))
     ;
}
rtx
gen_eqv16qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (EQ, (V16QImode), (operand1), (operand2))))
           ;
}
rtx
gen_eqv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (EQ, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_eqv4si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (EQ, (V4SImode), (operand1), (operand2))))
           ;
}
rtx
gen_gtv16qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (GT, (V16QImode), (operand1), (operand2))))
           ;
}
rtx
gen_gtv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (GT, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_gtv4si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (GT, (V4SImode), (operand1), (operand2))))
           ;
}
rtx
gen_umaxv16qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UMAX, (V16QImode), (operand1), (operand2))))
           ;
}
rtx
gen_smaxv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SMAX, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_uminv16qi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UMIN, (V16QImode), (operand1), (operand2))))
           ;
}
rtx
gen_sminv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (SMIN, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_ashrv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_ashrv4si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (V4SImode), (operand1), (operand2))))
           ;
}
rtx
gen_lshrv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_lshrv4si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (V4SImode), (operand1), (operand2))))
           ;
}
rtx
gen_lshrv2di3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (V2DImode), (operand1), (operand2))))
           ;
}
rtx
gen_ashlv8hi3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (V8HImode), (operand1), (operand2))))
           ;
}
rtx
gen_ashlv4si3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (V4SImode), (operand1), (operand2))))
           ;
}
rtx
gen_ashlv2di3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (V2DImode), (operand1), (operand2))))
           ;
}
rtx
gen_ashrv8hi3_ti (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (V8HImode), (operand1), (gen_rtx_SUBREG (SImode, operand2, 0)))))
     ;
}
rtx
gen_ashrv4si3_ti (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (V4SImode), (operand1), (gen_rtx_SUBREG (SImode, operand2, 0)))))
     ;
}
rtx
gen_lshrv8hi3_ti (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (V8HImode), (operand1), (gen_rtx_SUBREG (SImode, operand2, 0)))))
     ;
}
rtx
gen_lshrv4si3_ti (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (V4SImode), (operand1), (gen_rtx_SUBREG (SImode, operand2, 0)))))
     ;
}
rtx
gen_lshrv2di3_ti (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (V2DImode), (operand1), (gen_rtx_SUBREG (SImode, operand2, 0)))))
     ;
}
rtx
gen_ashlv8hi3_ti (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (V8HImode), (operand1), (gen_rtx_SUBREG (SImode, operand2, 0)))))
     ;
}
rtx
gen_ashlv4si3_ti (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (V4SImode), (operand1), (gen_rtx_SUBREG (SImode, operand2, 0)))))
     ;
}
rtx
gen_ashlv2di3_ti (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (V2DImode), (operand1), (gen_rtx_SUBREG (SImode, operand2, 0)))))
     ;
}
rtx
gen_sse2_ashlti3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (TImode), (gen_rtvec (1, gen_rtx_fmt_ee (ASHIFT, (TImode), (operand1), (gen_rtx_fmt_ee (MULT, (SImode), (operand2), (const_int_rtx[64 + (8)])))))), (45))))
     ;
}
rtx
gen_sse2_lshrti3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (TImode), (gen_rtvec (1, gen_rtx_fmt_ee (LSHIFTRT, (TImode), (operand1), (gen_rtx_fmt_ee (MULT, (SImode), (operand2), (const_int_rtx[64 + (8)])))))), (45))))
     ;
}
rtx
gen_sse2_unpckhpd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V2DFmode), (gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64 +1]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64 +1]))))))))))
                 ;
}
rtx
gen_sse2_unpcklpd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V2DFmode), (gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))))
                 ;
}
rtx
gen_sse2_packsswb (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V16QImode), (gen_rtx_fmt_e (SS_TRUNCATE, (V8QImode), (operand1))), (gen_rtx_fmt_e (SS_TRUNCATE, (V8QImode), (operand2))))))
            ;
}
rtx
gen_sse2_packssdw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V8HImode), (gen_rtx_fmt_e (SS_TRUNCATE, (V4HImode), (operand1))), (gen_rtx_fmt_e (SS_TRUNCATE, (V4HImode), (operand2))))))
            ;
}
rtx
gen_sse2_packuswb (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V16QImode), (gen_rtx_fmt_e (US_TRUNCATE, (V8QImode), (operand1))), (gen_rtx_fmt_e (US_TRUNCATE, (V8QImode), (operand2))))))
            ;
}
rtx
gen_sse2_punpckhbw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V16QImode), (gen_rtx_fmt_ee (VEC_SELECT, (V16QImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (16, const_int_rtx[64 + (8)], (const_int_rtx[64]), const_int_rtx[64 + (9)], (const_int_rtx[64 +1]), const_int_rtx[64 + (10)], const_int_rtx[64 + (2)], const_int_rtx[64 + (11)], const_int_rtx[64 + (3)], const_int_rtx[64 + (12)], const_int_rtx[64 + (4)], const_int_rtx[64 + (13)], const_int_rtx[64 + (5)], const_int_rtx[64 + (14)], const_int_rtx[64 + (6)], const_int_rtx[64 + (15)], const_int_rtx[64 + (7)])))))), (gen_rtx_fmt_ee (VEC_SELECT, (V16QImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (16, (const_int_rtx[64]), const_int_rtx[64 + (8)], (const_int_rtx[64 +1]), const_int_rtx[64 + (9)], const_int_rtx[64 + (2)], const_int_rtx[64 + (10)], const_int_rtx[64 + (3)], const_int_rtx[64 + (11)], const_int_rtx[64 + (4)], const_int_rtx[64 + (12)], const_int_rtx[64 + (5)], const_int_rtx[64 + (13)], const_int_rtx[64 + (6)], const_int_rtx[64 + (14)], const_int_rtx[64 + (7)], const_int_rtx[64 + (15)])))))), (gen_rtx_CONST_INT (VOIDmode, (long) (21845L))))))
                   ;
}
rtx
gen_sse2_punpckhwd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V8HImode), (gen_rtx_fmt_ee (VEC_SELECT, (V8HImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (8, const_int_rtx[64 + (4)], (const_int_rtx[64]), const_int_rtx[64 + (5)], (const_int_rtx[64 +1]), const_int_rtx[64 + (6)], const_int_rtx[64 + (2)], const_int_rtx[64 + (7)], const_int_rtx[64 + (3)])))))), (gen_rtx_fmt_ee (VEC_SELECT, (V8HImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (8, (const_int_rtx[64]), const_int_rtx[64 + (4)], (const_int_rtx[64 +1]), const_int_rtx[64 + (5)], const_int_rtx[64 + (2)], const_int_rtx[64 + (6)], const_int_rtx[64 + (3)], const_int_rtx[64 + (7)])))))), (gen_rtx_CONST_INT (VOIDmode, (long) (85L))))))
                ;
}
rtx
gen_sse2_punpckhdq (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SImode), (gen_rtx_fmt_ee (VEC_SELECT, (V4SImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, const_int_rtx[64 + (2)], (const_int_rtx[64]), const_int_rtx[64 + (3)], (const_int_rtx[64 +1]))))))), (gen_rtx_fmt_ee (VEC_SELECT, (V4SImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, (const_int_rtx[64]), const_int_rtx[64 + (2)], (const_int_rtx[64 +1]), const_int_rtx[64 + (3)])))))), (const_int_rtx[64 + (5)]))))
                                           ;
}
rtx
gen_sse2_punpcklbw (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V16QImode), (gen_rtx_fmt_ee (VEC_SELECT, (V16QImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (16, (const_int_rtx[64]), const_int_rtx[64 + (8)], (const_int_rtx[64 +1]), const_int_rtx[64 + (9)], const_int_rtx[64 + (2)], const_int_rtx[64 + (10)], const_int_rtx[64 + (3)], const_int_rtx[64 + (11)], const_int_rtx[64 + (4)], const_int_rtx[64 + (12)], const_int_rtx[64 + (5)], const_int_rtx[64 + (13)], const_int_rtx[64 + (6)], const_int_rtx[64 + (14)], const_int_rtx[64 + (7)], const_int_rtx[64 + (15)])))))), (gen_rtx_fmt_ee (VEC_SELECT, (V16QImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (16, const_int_rtx[64 + (8)], (const_int_rtx[64]), const_int_rtx[64 + (9)], (const_int_rtx[64 +1]), const_int_rtx[64 + (10)], const_int_rtx[64 + (2)], const_int_rtx[64 + (11)], const_int_rtx[64 + (3)], const_int_rtx[64 + (12)], const_int_rtx[64 + (4)], const_int_rtx[64 + (13)], const_int_rtx[64 + (5)], const_int_rtx[64 + (14)], const_int_rtx[64 + (6)], const_int_rtx[64 + (15)], const_int_rtx[64 + (7)])))))), (gen_rtx_CONST_INT (VOIDmode, (long) (21845L))))))
                   ;
}
rtx
gen_sse2_punpcklwd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V8HImode), (gen_rtx_fmt_ee (VEC_SELECT, (V8HImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (8, (const_int_rtx[64]), const_int_rtx[64 + (4)], (const_int_rtx[64 +1]), const_int_rtx[64 + (5)], const_int_rtx[64 + (2)], const_int_rtx[64 + (6)], const_int_rtx[64 + (3)], const_int_rtx[64 + (7)])))))), (gen_rtx_fmt_ee (VEC_SELECT, (V8HImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (8, const_int_rtx[64 + (4)], (const_int_rtx[64]), const_int_rtx[64 + (5)], (const_int_rtx[64 +1]), const_int_rtx[64 + (6)], const_int_rtx[64 + (2)], const_int_rtx[64 + (7)], const_int_rtx[64 + (3)])))))), (gen_rtx_CONST_INT (VOIDmode, (long) (85L))))))
                ;
}
rtx
gen_sse2_punpckldq (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SImode), (gen_rtx_fmt_ee (VEC_SELECT, (V4SImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, (const_int_rtx[64]), const_int_rtx[64 + (2)], (const_int_rtx[64 +1]), const_int_rtx[64 + (3)])))))), (gen_rtx_fmt_ee (VEC_SELECT, (V4SImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, const_int_rtx[64 + (2)], (const_int_rtx[64]), const_int_rtx[64 + (3)], (const_int_rtx[64 +1]))))))), (const_int_rtx[64 + (5)]))))
                                           ;
}
rtx
gen_sse2_punpcklqdq (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DImode), (gen_rtx_fmt_ee (VEC_SELECT, (V2DImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64 +1]), (const_int_rtx[64]))))))), (operand1), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sse2_punpckhqdq (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DImode), (operand1), (gen_rtx_fmt_ee (VEC_SELECT, (V2DImode), (operand2), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, (const_int_rtx[64 +1]), (const_int_rtx[64]))))))), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sse2_movapd (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2DFmode), (gen_rtvec (1, operand1)), (38))))
     ;
}
rtx
gen_sse2_movupd (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2DFmode), (gen_rtvec (1, operand1)), (39))))
     ;
}
rtx
gen_sse2_movdqa (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V16QImode), (gen_rtvec (1, operand1)), (38))))
     ;
}
rtx
gen_sse2_movdqu (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V16QImode), (gen_rtvec (1, operand1)), (39))))
     ;
}
rtx
gen_sse2_movdq2q (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (DImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))
                ;
}
rtx
gen_sse2_movdq2q_rex64 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (DImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))
                ;
}
rtx
gen_sse2_movq2dq (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V2DImode), (operand1), ((const_int_rtx[64])))))
             ;
}
rtx
gen_sse2_movq2dq_rex64 (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V2DImode), (operand1), ((const_int_rtx[64])))))
             ;
}
rtx
gen_sse2_movq (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_CONCAT, (V2DImode), (gen_rtx_fmt_ee (VEC_SELECT, (DImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))), ((const_int_rtx[64])))))
             ;
}
rtx
gen_sse2_loadd (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SImode), (gen_rtx_fmt_e (VEC_DUPLICATE, (V4SImode), (operand1))), (gen_rtx_CONST_VECTOR (V4SImode, gen_rtvec (4, (const_int_rtx[64]), (const_int_rtx[64]), (const_int_rtx[64]), (const_int_rtx[64])))), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sse2_stored (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (SImode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))
                ;
}
rtx
gen_sse2_movhpd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (operand1), (operand2), (const_int_rtx[64 + (2)]))))
                                           ;
}
rtx
gen_sse2_loadsd_1 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (gen_rtx_fmt_e (VEC_DUPLICATE, (V2DFmode), (operand1))), (operand2), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sse2_movsd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (operand1), (operand2), ((const_int_rtx[64 +1])))))
             ;
}
rtx
gen_sse2_storesd (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))
                ;
}
rtx
gen_sse2_shufpd (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 ,
 rtx operand3 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2DFmode), (gen_rtvec (3, operand1, operand2, operand3)), (41))))
     ;
}
rtx
gen_sse2_clflush (rtx operand0 )
{
  return gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (VOIDmode), (gen_rtvec (1, operand0)), (57))
    ;
}
rtx
gen_mwait (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (VOIDmode), (gen_rtvec (2, operand0, operand1)), (70))
    ;
}
rtx
gen_monitor (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (VOIDmode), (gen_rtvec (3, operand0, operand1, operand2)), (69))
    ;
}
rtx
gen_addsubv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (2, operand1, operand2)), (71))))
     ;
}
rtx
gen_addsubv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2DFmode), (gen_rtvec (2, operand1, operand2)), (71))))
     ;
}
rtx
gen_haddv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (2, operand1, operand2)), (72))))
     ;
}
rtx
gen_haddv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2DFmode), (gen_rtvec (2, operand1, operand2)), (72))))
     ;
}
rtx
gen_hsubv4sf3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (2, operand1, operand2)), (73))))
     ;
}
rtx
gen_hsubv2df3 (rtx operand0 ,
 rtx operand1 ,
 rtx operand2 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V2DFmode), (gen_rtvec (2, operand1, operand2)), (73))))
     ;
}
rtx
gen_movshdup (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (1, operand1)), (74))))
     ;
}
rtx
gen_movsldup (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (1, operand1)), (75))))
     ;
}
rtx
gen_lddqu (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V16QImode), (gen_rtvec (1, operand1)), (76))))
     ;
}
rtx
gen_loadddup (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (VEC_DUPLICATE, (V2DFmode), (operand1))))
           ;
}
rtx
gen_movddup (rtx operand0 ,
 rtx operand1 )
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (VEC_DUPLICATE, (V2DFmode), (gen_rtx_fmt_ee (VEC_SELECT, (DFmode), (operand1), (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (1, (const_int_rtx[64]))))))))))
                 ;
}
rtx
gen_cmpdi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((enum rtx_code) (operands[0])->code) == MEM && ((enum rtx_code) (operands[1])->code) == MEM)
    operands[0] = force_reg (DImode, operands[0]);
  ix86_compare_op0 = operands[0];
  ix86_compare_op1 = operands[1];
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (operand0), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_cmpsi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((enum rtx_code) (operands[0])->code) == MEM && ((enum rtx_code) (operands[1])->code) == MEM)
    operands[0] = force_reg (SImode, operands[0]);
  ix86_compare_op0 = operands[0];
  ix86_compare_op1 = operands[1];
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (operand0), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_cmphi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((enum rtx_code) (operands[0])->code) == MEM && ((enum rtx_code) (operands[1])->code) == MEM)
    operands[0] = force_reg (HImode, operands[0]);
  ix86_compare_op0 = operands[0];
  ix86_compare_op1 = operands[1];
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (operand0), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_cmpqi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((enum rtx_code) (operands[0])->code) == MEM && ((enum rtx_code) (operands[1])->code) == MEM)
    operands[0] = force_reg (QImode, operands[0]);
  ix86_compare_op0 = operands[0];
  ix86_compare_op1 = operands[1];
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (operand0), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_cmpdi_1_rex64 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (operand0), (operand1))))
           ;
}
rtx
gen_cmpsi_1 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (operand0), (operand1))))
           ;
}
rtx
gen_cmpqi_ext_3 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (gen_rtx_SUBREG (QImode, gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)])), 0)), (operand1))))
           ;
}
rtx
gen_cmpxf (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_compare_op0 = operands[0];
  ix86_compare_op1 = operands[1];
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (operand0), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_cmpdf (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_compare_op0 = operands[0];
  ix86_compare_op1 = operands[1];
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (operand0), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_cmpsf (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_compare_op0 = operands[0];
  ix86_compare_op1 = operands[1];
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (operand0), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1044 (rtx, rtx *);
rtx
gen_split_1044 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[2] = gen_rtx_MEM ((0 ? DImode : SImode), (global_rtl[GR_STACK_POINTER]));
   operands[2] = gen_rtx_fmt_e (FLOAT, (((enum machine_mode) (operands[0])->mode)), (operands[2]));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (SImode, gen_rtx_fmt_e (PRE_DEC, (SImode), (gen_rtx_REG (SImode, 7))))), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCFPmode, 18)), (gen_rtx_fmt_ee (COMPARE, (CCFPmode), (operand0), (operand2))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand1)), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (4)])))))))
                                             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movsi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_move (SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movhi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_move (HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movstricthi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((enum rtx_code) (operands[0])->code) == MEM && ((enum rtx_code) (operands[1])->code) == MEM)
    operands[1] = force_reg (HImode, operands[1]);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand0))), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movqi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_move (QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_reload_outqi (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  rtx op0, op1, op2;
  op0 = operands[0]; op1 = operands[1]; op2 = operands[2];
  if (reg_overlap_mentioned_p (op2, op0))
    fancy_abort ("gcc.c", 218077, "?");
  if (! q_regs_operand (op1, QImode))
    {
      emit_insn (gen_movqi (op2, op1));
      op1 = op2;
    }
  emit_insn (gen_movqi (op0, op1));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, operand0, operand1, operand2)))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movstrictqi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((enum rtx_code) (operands[0])->code) == MEM && ((enum rtx_code) (operands[1])->code) == MEM)
    operands[1] = force_reg (QImode, operands[1]);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand0))), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movdi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_move (DImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1052 (rtx, rtx *);
rtx
gen_peephole2_1052 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1053 (rtx, rtx *);
rtx
gen_peephole2_1053 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
split_di (operands + 1, 1, operands + 2, operands + 3);
   operands[1] = rtl_hooks.gen_lowpart (DImode, operands[2]);
   operands[2] = gen_rtx_MEM (SImode, gen_rtx_fmt_ee (PLUS, (DImode), ((global_rtl[GR_STACK_POINTER])), (gen_rtx_CONST_INT (VOIDmode, (long) (4))))
                      );
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand3))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1054 (rtx, rtx *);
rtx
gen_split_1054 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
split_di (operands + 1, 1, operands + 2, operands + 3);
   operands[1] = rtl_hooks.gen_lowpart (DImode, operands[2]);
   operands[2] = gen_rtx_MEM (SImode, gen_rtx_fmt_ee (PLUS, (DImode), ((global_rtl[GR_STACK_POINTER])), (gen_rtx_CONST_INT (VOIDmode, (long) (4))))
                      );
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand3))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1055 (rtx, rtx *);
rtx
gen_split_1055 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_long_move (operands); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1056 (rtx, rtx *);
rtx
gen_split_1056 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_long_move (operands); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1057 (rtx, rtx *);
rtx
gen_peephole2_1057 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1058 (rtx, rtx *);
rtx
gen_peephole2_1058 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
split_di (operands, 2, operands + 2, operands + 4);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand3))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (operand5))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1059 (rtx, rtx *);
rtx
gen_split_1059 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx _val = 0;
  start_sequence ();
split_di (operands, 2, operands + 2, operands + 4);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand3))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (operand5))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movsf (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_move (SFmode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1061 (rtx, rtx *);
rtx
gen_split_1061 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
operands[1] = get_pool_constant ((((operands[1])->u.fld[0]).rtx1));
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1062 (rtx, rtx *);
rtx
gen_split_1062 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (-4)]))))
                                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (SFmode, gen_rtx_REG (SImode, 7))), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1063 (rtx, rtx *);
rtx
gen_split_1063 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (-8)]))))
                                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (SFmode, gen_rtx_REG (DImode, 7))), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movdf (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_move (DFmode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1065 (rtx, rtx *);
rtx
gen_split_1065 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (-8)]))))
                                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DFmode, gen_rtx_REG (SImode, 7))), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1066 (rtx, rtx *);
rtx
gen_split_1066 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (-8)]))))
                                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DFmode, gen_rtx_REG (DImode, 7))), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1067 (rtx, rtx *);
rtx
gen_split_1067 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_long_move (operands); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1068 (rtx, rtx *);
rtx
gen_split_1068 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_long_move (operands); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movxf (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_move (XFmode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1070 (rtx, rtx *);
rtx
gen_split_1070 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_long_move (operands); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1071 (rtx, rtx *);
rtx
gen_split_1071 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) ((target_flags & 0x00080000) ? -16 : -12));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (XFmode, gen_rtx_REG (SImode, 7))), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1072 (rtx, rtx *);
rtx
gen_split_1072 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) ((target_flags & 0x00080000) ? -16 : -12));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (XFmode, gen_rtx_REG (DImode, 7))), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1073 (rtx, rtx *);
rtx
gen_split_1073 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_long_move (operands); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1074 (rtx, rtx *);
rtx
gen_split_1074 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
{
  rtx c = get_pool_constant ((((operands[1])->u.fld[0]).rtx1));
  rtx r = operands[0];
  if (((enum rtx_code) (r)->code) == SUBREG)
    r = (((r)->u.fld[0]).rtx1);
  if (((((enum rtx_code) (r)->code) == REG) && ((((((r)->u.fld[0]).rtuint)) >= (20 + 1) && ((((r)->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((r)->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((r)->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))))
    {
      if (!standard_sse_constant_p (c))
 return (end_sequence (), _val);
    }
  else if (((((enum rtx_code) (r)->code) == REG) && (((((r)->u.fld[0]).rtuint)) >= 8 && ((((r)->u.fld[0]).rtuint)) <= (8 + 7))))
    {
      if (!standard_80387_constant_p (c))
 return (end_sequence (), _val);
    }
  else if (((((enum rtx_code) (r)->code) == REG) && (((((r)->u.fld[0]).rtuint)) >= (((20 + 1) + 7) + 1) && ((((r)->u.fld[0]).rtuint)) <= ((((20 + 1) + 7) + 1) + 7))))
    return (end_sequence (), _val);
  operands[1] = c;
}
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_zero_extendhisi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if ((x86_zero_extend_with_and & (1 << ix86_tune)) && !optimize_size)
    {
      operands[1] = force_reg (HImode, operands[1]);
      emit_insn (gen_zero_extendhisi2_and (operands[0], operands[1]));
      return (_val = get_insns (), end_sequence (), _val);
    }
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (SImode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1076 (rtx, rtx *);
rtx
gen_split_1076 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (SImode), (copy_rtx (operand0)), (gen_rtx_CONST_INT (VOIDmode, (long) (65535L)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_zero_extendqihi2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (HImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
extern rtx gen_split_1078 (rtx, rtx *);
rtx
gen_split_1078 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (HImode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1079 (rtx, rtx *);
rtx
gen_split_1079 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[2] = rtl_hooks.gen_lowpart (QImode, operands[0]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), ((const_int_rtx[64])))
            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand2))), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1080 (rtx, rtx *);
rtx
gen_split_1080 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (HImode), (copy_rtx (operand0)), (gen_rtx_CONST_INT (VOIDmode, (long) (255L)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_zero_extendqisi2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (SImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
extern rtx gen_split_1082 (rtx, rtx *);
rtx
gen_split_1082 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (SImode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1083 (rtx, rtx *);
rtx
gen_split_1083 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[2] = rtl_hooks.gen_lowpart (QImode, operands[0]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), ((const_int_rtx[64])))
            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand2))), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1084 (rtx, rtx *);
rtx
gen_split_1084 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (SImode), (copy_rtx (operand0)), (gen_rtx_CONST_INT (VOIDmode, (long) (255L)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_zero_extendsidi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
if (!0)
     {
       emit_insn (gen_zero_extendsidi2_32 (operands[0], operands[1]));
       return (_val = get_insns (), end_sequence (), _val);
     }
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1086 (rtx, rtx *);
rtx
gen_split_1086 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
split_di (&operands[0], 1, &operands[3], &operands[4]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), ((const_int_rtx[64])))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1087 (rtx, rtx *);
rtx
gen_split_1087 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
split_di (&operands[0], 1, &operands[3], &operands[4]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), ((const_int_rtx[64])))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1088 (rtx, rtx *);
rtx
gen_split_1088 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
split_di (&operands[0], 1, &operands[3], &operands[4]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), ((const_int_rtx[64])))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_extendsidi2 (rtx operand0,
 rtx operand1)
{
  rtx operand2 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (0)
    {
      emit_insn (gen_extendsidi2_rex64 (operands[0], operands[1]));
      return (_val = get_insns (), end_sequence (), _val);
    }
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SIGN_EXTEND, (DImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))))))
                            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1090 (rtx, rtx *);
rtx
gen_split_1090 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
split_di (&operands[0], 1, &operands[3], &operands[4]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (operand1))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand1)), (gen_rtx_fmt_ee (ASHIFTRT, (SImode), (copy_rtx (operand1)), (const_int_rtx[64 + (31)])))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (copy_rtx (operand1)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1091 (rtx, rtx *);
rtx
gen_split_1091 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  split_di (&operands[0], 1, &operands[3], &operands[4]);
  emit_move_insn (operands[3], operands[1]);
  if (true_regnum (operands[1]) == 0
      && true_regnum (operands[2]) == 1
      && (optimize_size || (x86_use_cltd & (1 << ix86_tune))))
    {
      emit_insn (gen_ashrsi3_31 (operands[2], operands[1], gen_rtx_CONST_INT (VOIDmode, (long) (31))));
    }
  else
    {
      emit_move_insn (operands[2], operands[1]);
      emit_insn (gen_ashrsi3_31 (operands[2], operands[2], gen_rtx_CONST_INT (VOIDmode, (long) (31))));
    }
  emit_move_insn (operands[4], operands[2]);
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1092 (rtx, rtx *);
rtx
gen_split_1092 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  split_di (&operands[0], 1, &operands[3], &operands[4]);
  if (true_regnum (operands[3]) != true_regnum (operands[1]))
    emit_move_insn (operands[3], operands[1]);
  if (true_regnum (operands[3]) == 0
      && (optimize_size || (x86_use_cltd & (1 << ix86_tune))))
    {
      emit_insn (gen_ashrsi3_31 (operands[4], operands[3], gen_rtx_CONST_INT (VOIDmode, (long) (31))));
      return (_val = get_insns (), end_sequence (), _val);
    }
  if (true_regnum (operands[4]) != true_regnum (operands[1]))
    emit_move_insn (operands[4], operands[1]);
  emit_insn (gen_ashrsi3_31 (operands[4], operands[4], gen_rtx_CONST_INT (VOIDmode, (long) (31))));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1093 (rtx, rtx *);
rtx
gen_split_1093 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (-8)]))))
                                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DFmode, gen_rtx_REG (SImode, 7))), (gen_rtx_fmt_e (FLOAT_EXTEND, (DFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1094 (rtx, rtx *);
rtx
gen_split_1094 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (-8)]))))
                                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DFmode, gen_rtx_REG (DImode, 7))), (gen_rtx_fmt_e (FLOAT_EXTEND, (DFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1095 (rtx, rtx *);
rtx
gen_split_1095 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) ((target_flags & 0x00080000) ? -16 : -12));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (XFmode, gen_rtx_REG (SImode, 7))), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1096 (rtx, rtx *);
rtx
gen_split_1096 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) ((target_flags & 0x00080000) ? -16 : -12));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DFmode, gen_rtx_REG (DImode, 7))), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1097 (rtx, rtx *);
rtx
gen_split_1097 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) ((target_flags & 0x00080000) ? -16 : -12));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DFmode, gen_rtx_REG (SImode, 7))), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1098 (rtx, rtx *);
rtx
gen_split_1098 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) ((target_flags & 0x00080000) ? -16 : -12));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (XFmode, gen_rtx_REG (DImode, 7))), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_extendsfdf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((enum rtx_code) (operands[1])->code) == CONST_DOUBLE)
    operands[1] = validize_mem (force_const_mem (SFmode, operands[1]));
  if (((enum rtx_code) (operands[0])->code) == MEM && ((enum rtx_code) (operands[1])->code) == MEM)
    operands[1] = force_reg (SFmode, operands[1]);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_EXTEND, (DFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_extendsfxf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((enum rtx_code) (operands[1])->code) == CONST_DOUBLE)
    operands[1] = validize_mem (force_const_mem (SFmode, operands[1]));
  if (((enum rtx_code) (operands[0])->code) == MEM && ((enum rtx_code) (operands[1])->code) == MEM)
    operands[1] = force_reg (SFmode, operands[1]);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_extenddfxf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((enum rtx_code) (operands[1])->code) == CONST_DOUBLE)
    operands[1] = validize_mem (force_const_mem (DFmode, operands[1]));
  if (((enum rtx_code) (operands[0])->code) == MEM && ((enum rtx_code) (operands[1])->code) == MEM)
    operands[1] = force_reg (DFmode, operands[1]);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_truncdfsf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
   if (!(target_flags & 0x00000001))
     {
 emit_insn (gen_truncdfsf2_sse_only (operands[0], operands[1]));
 return (_val = get_insns (), end_sequence (), _val);
     }
   else if (flag_unsafe_math_optimizations)
     {
 rtx reg = (((enum rtx_code) (operands[0])->code) == REG) ? operands[0] : gen_reg_rtx (SFmode);
 emit_insn (gen_truncdfsf2_noop (reg, operands[1]));
 if (reg != operands[0])
   emit_move_insn (operands[0], reg);
 return (_val = get_insns (), end_sequence (), _val);
     }
   else
     operands[2] = assign_386_stack_local (SFmode, 0);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand1)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand2)))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1103 (rtx, rtx *);
rtx
gen_split_1103 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1104 (rtx, rtx *);
rtx
gen_split_1104 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  rtx src, dest;
  if (!(x86_sse_partial_regs_for_cvtsd2ss & (1 << ix86_tune)))
    emit_insn (gen_truncdfsf2_sse_only (operands[0], operands[1]));
  else
    {
      dest = simplify_gen_subreg (V4SFmode, operands[0], SFmode, 0);
      src = simplify_gen_subreg (V2DFmode, operands[1], DFmode, 0);
      if (((enum rtx_code) (src)->code) == SUBREG)
 alter_subreg (&src);
      if (reg_overlap_mentioned_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 219562, "?");
      emit_insn (gen_sse_clrv4sf (dest, (const_tiny_rtx[0][(int) (V4SFmode)])));
      emit_insn (gen_cvtsd2ss (dest, dest, src));
    }
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1105 (rtx, rtx *);
rtx
gen_split_1105 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  rtx src, dest;
  dest = simplify_gen_subreg (V4SFmode, operands[0], SFmode, 0);
  src = simplify_gen_subreg (V2DFmode, operands[1], DFmode, 0);
  if (((enum rtx_code) (src)->code) == SUBREG)
    alter_subreg (&src);
  if (reg_overlap_mentioned_p (operands[0], operands[1]))
    fancy_abort ("gcc.c", 219589, "?");
  emit_insn (gen_sse_clrv4sf (dest, (const_tiny_rtx[0][(int) (V4SFmode)])));
  emit_insn (gen_cvtsd2ss (dest, dest, src));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1106 (rtx, rtx *);
rtx
gen_split_1106 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_truncxfsf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
  if (flag_unsafe_math_optimizations)
    {
      rtx reg = (((enum rtx_code) (operands[0])->code) == REG) ? operands[0] : gen_reg_rtx (SFmode);
      emit_insn (gen_truncxfsf2_noop (reg, operands[1]));
      if (reg != operands[0])
 emit_move_insn (operands[0], reg);
      return (_val = get_insns (), end_sequence (), _val);
    }
  else
    operands[2] = assign_386_stack_local (SFmode, 0);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand1)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand2)))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1108 (rtx, rtx *);
rtx
gen_split_1108 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1109 (rtx, rtx *);
rtx
gen_split_1109 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_truncxfdf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
  if (flag_unsafe_math_optimizations)
    {
      rtx reg = (((enum rtx_code) (operands[0])->code) == REG) ? operands[0] : gen_reg_rtx (DFmode);
      emit_insn (gen_truncxfdf2_noop (reg, operands[1]));
      if (reg != operands[0])
 emit_move_insn (operands[0], reg);
      return (_val = get_insns (), end_sequence (), _val);
    }
  else
    operands[2] = assign_386_stack_local (DFmode, 0);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand1)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand2)))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1111 (rtx, rtx *);
rtx
gen_split_1111 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1112 (rtx, rtx *);
rtx
gen_split_1112 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_fix_truncxfdi2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (DImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_fix_truncdfdi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (0 && ((target_flags & 0x00008000) != 0))
   {
     rtx out = (((enum rtx_code) (operands[0])->code) == REG) ? operands[0] : gen_reg_rtx (DImode);
     emit_insn (gen_fix_truncdfdi_sse (out, operands[1]));
     if (out != operands[0])
 emit_move_insn (operands[0], out);
     return (_val = get_insns (), end_sequence (), _val);
   }
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (DImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_fix_truncsfdi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((target_flags & 0x00004000) != 0) && 0)
   {
     rtx out = (((enum rtx_code) (operands[0])->code) == REG) ? operands[0] : gen_reg_rtx (DImode);
     emit_insn (gen_fix_truncsfdi_sse (out, operands[1]));
     if (out != operands[0])
 emit_move_insn (operands[0], out);
     return (_val = get_insns (), end_sequence (), _val);
   }
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (DImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1116 (rtx, rtx *);
rtx
gen_split_1116 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  (cfun->machine->optimize_mode_switching) = 1;
  operands[2] = assign_386_stack_local (HImode, 1);
  operands[3] = assign_386_stack_local (HImode, 2);
  if (memory_operand (operands[0], VOIDmode))
    emit_insn (gen_fix_truncdi_memory (operands[0], operands[1],
           operands[2], operands[3]));
  else
    {
      operands[4] = assign_386_stack_local (DImode, 0);
      emit_insn (gen_fix_truncdi_nomemory (operands[0], operands[1],
        operands[2], operands[3],
        operands[4]));
    }
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1117 (rtx, rtx *);
rtx
gen_split_1117 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_e (FIX, (DImode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand5)))))
            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand4)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1118 (rtx, rtx *);
rtx
gen_split_1118 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (DImode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand5)))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1119 (rtx, rtx *);
rtx
gen_peephole2_1119 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "x", SFmode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (DImode), (copy_rtx (operand2)))))
                      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1120 (rtx, rtx *);
rtx
gen_peephole2_1120 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "Y", DFmode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (DImode), (copy_rtx (operand2)))))
                      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_fix_truncxfsi2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (SImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_fix_truncdfsi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((target_flags & 0x00008000) != 0))
   {
     rtx out = (((enum rtx_code) (operands[0])->code) == REG) ? operands[0] : gen_reg_rtx (SImode);
     emit_insn (gen_fix_truncdfsi_sse (out, operands[1]));
     if (out != operands[0])
 emit_move_insn (operands[0], out);
     return (_val = get_insns (), end_sequence (), _val);
   }
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (SImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_fix_truncsfsi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((target_flags & 0x00004000) != 0))
   {
     rtx out = (((enum rtx_code) (operands[0])->code) == REG) ? operands[0] : gen_reg_rtx (SImode);
     emit_insn (gen_fix_truncsfsi_sse (out, operands[1]));
     if (out != operands[0])
 emit_move_insn (operands[0], out);
     return (_val = get_insns (), end_sequence (), _val);
   }
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (SImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1124 (rtx, rtx *);
rtx
gen_split_1124 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  (cfun->machine->optimize_mode_switching) = 1;
  operands[2] = assign_386_stack_local (HImode, 1);
  operands[3] = assign_386_stack_local (HImode, 2);
  if (memory_operand (operands[0], VOIDmode))
    emit_insn (gen_fix_truncsi_memory (operands[0], operands[1],
           operands[2], operands[3]));
  else
    {
      operands[4] = assign_386_stack_local (SImode, 0);
      emit_insn (gen_fix_truncsi_nomemory (operands[0], operands[1],
        operands[2], operands[3],
        operands[4]));
    }
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1125 (rtx, rtx *);
rtx
gen_peephole2_1125 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "x", SFmode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (SImode), (copy_rtx (operand2)))))
                      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1126 (rtx, rtx *);
rtx
gen_peephole2_1126 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "Y", DFmode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (SImode), (copy_rtx (operand2)))))
                      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1127 (rtx, rtx *);
rtx
gen_split_1127 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_e (FIX, (SImode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)))))
            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand4)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1128 (rtx, rtx *);
rtx
gen_split_1128 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (SImode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_fix_truncxfhi2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (HImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_fix_truncdfhi2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (HImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_fix_truncsfhi2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (HImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
extern rtx gen_split_1132 (rtx, rtx *);
rtx
gen_split_1132 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  (cfun->machine->optimize_mode_switching) = 1;
  operands[2] = assign_386_stack_local (HImode, 1);
  operands[3] = assign_386_stack_local (HImode, 2);
  if (memory_operand (operands[0], VOIDmode))
    emit_insn (gen_fix_trunchi_memory (operands[0], operands[1],
           operands[2], operands[3]));
  else
    {
      operands[4] = assign_386_stack_local (HImode, 0);
      emit_insn (gen_fix_trunchi_nomemory (operands[0], operands[1],
        operands[2], operands[3],
        operands[4]));
    }
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1133 (rtx, rtx *);
rtx
gen_split_1133 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (HImode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1134 (rtx, rtx *);
rtx
gen_split_1134 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_e (FIX, (HImode), (operand1)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (copy_rtx (operand4))))))
                       );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand4)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_floathisf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((target_flags & 0x00004000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0))
    {
      emit_insn (gen_floatsisf2 (operands[0],
     convert_to_mode (SImode, operands[1], 0)));
      return (_val = get_insns (), end_sequence (), _val);
    }
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (SFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_floatsisf2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (SFmode), (operand1))))
           ;
}
extern rtx gen_split_1137 (rtx, rtx *);
rtx
gen_split_1137 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  rtx dest;
  dest = simplify_gen_subreg (V4SFmode, operands[0], SFmode, 0);
  emit_insn (gen_sse_clrv4sf (dest, (const_tiny_rtx[0][(int) (V4SFmode)])));
  emit_insn (gen_cvtsi2ss (dest, dest, operands[1]));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_floatdisf2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (SFmode), (operand1))))
           ;
}
extern rtx gen_split_1139 (rtx, rtx *);
rtx
gen_split_1139 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  rtx dest;
  dest = simplify_gen_subreg (V4SFmode, operands[0], SFmode, 0);
  emit_insn (gen_sse_clrv4sf (dest, (const_tiny_rtx[0][(int) (V4SFmode)])));
  emit_insn (gen_cvtsi2ssq (dest, dest, operands[1]));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_floathidf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((target_flags & 0x00004000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0))
    {
      emit_insn (gen_floatsidf2 (operands[0],
     convert_to_mode (SImode, operands[1], 0)));
      return (_val = get_insns (), end_sequence (), _val);
    }
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (DFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_floatsidf2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (DFmode), (operand1))))
           ;
}
rtx
gen_floatdidf2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT, (DFmode), (operand1))))
           ;
}
extern rtx gen_split_1143 (rtx, rtx *);
rtx
gen_split_1143 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  operands[2] = ix86_force_to_memory (((enum machine_mode) (operands[1])->mode), operands[1]);
  operands[2] = gen_rtx_fmt_e (FLOAT, (((enum machine_mode) (operands[0])->mode)), (operands[2]));
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (operands[2])));
  ix86_free_from_memory (((enum machine_mode) (operands[1])->mode));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_floatunssisf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
x86_emit_floatuns (operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_floatunsdisf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
x86_emit_floatuns (operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_floatunsdidf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
x86_emit_floatuns (operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_vec_setv2df (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  switch (((operands[2])->u.hwint[0]))
    {
    case 0:
      emit_insn (gen_sse2_movsd (operands[0], operands[0],
     simplify_gen_subreg (V2DFmode, operands[1],
            DFmode, 0)));
      break;
    case 1:
      {
 rtx op1 = simplify_gen_subreg (V2DFmode, operands[1], DFmode, 0);
 emit_insn (gen_sse2_unpcklpd (operands[0], operands[0], op1));
      }
      break;
    default:
      fancy_abort ("gcc.c", 220703, "?");
    }
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (operand0);
  emit (operand1);
  emit (operand2);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_vec_extractv2df (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  switch (((operands[2])->u.hwint[0]))
    {
    case 0:
      emit_move_insn (operands[0], rtl_hooks.gen_lowpart (DFmode, operands[1]));
      break;
    case 1:
      {
 rtx dest = simplify_gen_subreg (V2DFmode, operands[0], DFmode, 0);
 emit_insn (gen_sse2_unpckhpd (dest, operands[1], operands[1]));
      }
      break;
    default:
      fancy_abort ("gcc.c", 220746, "?");
    }
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (operand0);
  emit (operand1);
  emit (operand2);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_vec_initv2df (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_expand_vector_init (operands[0], operands[1]);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (operand0);
  emit (operand1);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_vec_setv4sf (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  switch (((operands[2])->u.hwint[0]))
    {
    case 0:
      emit_insn (gen_sse_movss (operands[0], operands[0],
    simplify_gen_subreg (V4SFmode, operands[1],
           SFmode, 0)));
      break;
    case 1:
      {
 rtx op1 = simplify_gen_subreg (V4SFmode, operands[1], SFmode, 0);
 rtx tmp = gen_reg_rtx (V4SFmode);
        emit_move_insn (tmp, operands[0]);
 emit_insn (gen_sse_unpcklps (operands[0], operands[0], operands[0]));
 emit_insn (gen_sse_movss (operands[0], operands[0], op1));
        emit_insn (gen_sse_shufps (operands[0], operands[0], tmp,
                                   gen_rtx_CONST_INT (VOIDmode, (long) (1 + (0<<2) + (2<<4) + (3<<6)))));
      }
    case 2:
      {
        rtx op1 = simplify_gen_subreg (V4SFmode, operands[1], SFmode, 0);
        rtx tmp = gen_reg_rtx (V4SFmode);
        emit_move_insn (tmp, operands[0]);
        emit_insn (gen_sse_movss (tmp, tmp, op1));
        emit_insn (gen_sse_shufps (operands[0], operands[0], tmp,
                                   gen_rtx_CONST_INT (VOIDmode, (long) (0 + (1<<2) + (0<<4) + (3<<6)))));
      }
      break;
    case 3:
      {
        rtx op1 = simplify_gen_subreg (V4SFmode, operands[1], SFmode, 0);
        rtx tmp = gen_reg_rtx (V4SFmode);
        emit_move_insn (tmp, operands[0]);
        emit_insn (gen_sse_movss (tmp, tmp, op1));
        emit_insn (gen_sse_shufps (operands[0], operands[0], tmp,
                                   gen_rtx_CONST_INT (VOIDmode, (long) (0 + (1<<2) + (2<<4) + (0<<6)))));
      }
      break;
    default:
      fancy_abort ("gcc.c", 220842, "?");
    }
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (operand0);
  emit (operand1);
  emit (operand2);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_vec_extractv4sf (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  switch (((operands[2])->u.hwint[0]))
    {
    case 0:
      emit_move_insn (operands[0], rtl_hooks.gen_lowpart (SFmode, operands[1]));
      break;
    case 1:
      {
 rtx op0 = simplify_gen_subreg (V4SFmode, operands[1], SFmode, 0);
 rtx tmp = gen_reg_rtx (V4SFmode);
        emit_move_insn (tmp, operands[1]);
        emit_insn (gen_sse_shufps (op0, tmp, tmp,
                                   (const_int_rtx[64 +1])));
      }
    case 2:
      {
 rtx op0 = simplify_gen_subreg (V4SFmode, operands[1], SFmode, 0);
 rtx tmp = gen_reg_rtx (V4SFmode);
        emit_move_insn (tmp, operands[1]);
        emit_insn (gen_sse_unpckhps (op0, tmp, tmp));
      }
    case 3:
      {
 rtx op0 = simplify_gen_subreg (V4SFmode, operands[1], SFmode, 0);
 rtx tmp = gen_reg_rtx (V4SFmode);
        emit_move_insn (tmp, operands[1]);
        emit_insn (gen_sse_shufps (op0, tmp, tmp,
                                   gen_rtx_CONST_INT (VOIDmode, (long) (3))));
      }
    default:
      fancy_abort ("gcc.c", 220904, "?");
    }
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (operand0);
  emit (operand1);
  emit (operand2);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_vec_initv4sf (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_expand_vector_init (operands[0], operands[1]);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (operand0);
  emit (operand1);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_adddi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (PLUS, DImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (DImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1154 (rtx, rtx *);
rtx
gen_split_1154 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx _val = 0;
  start_sequence ();
split_di (operands+0, 1, operands+0, operands+3);
   split_di (operands+1, 1, operands+1, operands+4);
   split_di (operands+2, 1, operands+2, operands+5);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_Ei (UNSPEC, (CCmode), (gen_rtvec (2, operand1, operand2)), (27)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (SImode), (copy_rtx (operand1)), (copy_rtx (operand2))))))))
                        );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_fmt_ee (LTU, (SImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))), (operand4))), (operand5)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_addsi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (PLUS, SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (SImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1156 (rtx, rtx *);
rtx
gen_split_1156 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  rtx pat;
  operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
  operands[1] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[1]);
  operands[2] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[2]);
  operands[3] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[3]);
  pat = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (operands[1]), (operands[2]))), (operands[3]))
                      ;
  if ((0 ? DImode : SImode) != SImode)
    pat = gen_rtx_SUBREG (SImode, pat, 0);
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (pat)));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1157 (rtx, rtx *);
rtx
gen_split_1157 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
{
  operands[1] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[1]);
  operands[2] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[2]);
  operands[3] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[3]);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (gen_rtx_SUBREG (SImode, gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_fmt_ee (PLUS, (DImode), (operand1), (operand2))), (operand3)), 0)))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1158 (rtx, rtx *);
rtx
gen_split_1158 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  rtx pat;
  operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
  operands[1] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[1]);
  operands[3] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[3]);
  pat = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (gen_rtx_fmt_ee (MULT, ((0 ? DImode : SImode)), (operands[1]), (operands[2]))), (operands[3]))
                      ;
  if ((0 ? DImode : SImode) != SImode)
    pat = gen_rtx_SUBREG (SImode, pat, 0);
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (pat)));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1159 (rtx, rtx *);
rtx
gen_split_1159 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
{
  operands[1] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[1]);
  operands[3] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[3]);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (gen_rtx_SUBREG (SImode, gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_fmt_ee (MULT, (DImode), (operand1), (operand2))), (operand3)), 0)))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1160 (rtx, rtx *);
rtx
gen_split_1160 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  rtx pat;
  operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
  operands[1] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[1]);
  operands[3] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[3]);
  operands[4] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[4]);
  pat = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (gen_rtx_fmt_ee (MULT, ((0 ? DImode : SImode)), (operands[1]), (operands[2]))), (operands[3]))), (operands[4]))
                      ;
  if ((0 ? DImode : SImode) != SImode)
    pat = gen_rtx_SUBREG (SImode, pat, 0);
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (pat)));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1161 (rtx, rtx *);
rtx
gen_split_1161 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
{
  operands[1] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[1]);
  operands[3] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[3]);
  operands[4] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[4]);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (gen_rtx_SUBREG (SImode, gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_fmt_ee (MULT, (DImode), (operand1), (operand2))), (operand3))), (operand4)), 0)))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1162 (rtx, rtx *);
rtx
gen_split_1162 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (DImode), (operand1), (operand2))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1163 (rtx, rtx *);
rtx
gen_split_1163 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  rtx pat;
  if (((enum machine_mode) (operands[0])->mode) != (0 ? DImode : SImode))
    {
      operands[1] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[1]);
      operands[2] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[2]);
    }
  operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
  pat = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (operands[1]), (operands[2]));
  if ((0 ? DImode : SImode) != SImode)
    pat = gen_rtx_SUBREG (SImode, pat, 0);
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (pat)));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1164 (rtx, rtx *);
rtx
gen_split_1164 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
{
  operands[1] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[1]);
  operands[2] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[2]);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (gen_rtx_SUBREG (SImode, gen_rtx_fmt_ee (PLUS, (DImode), (operand1), (operand2)), 0)))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_addhi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (PLUS, HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (HImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_addqi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (PLUS, QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (QImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_addxf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand1), (operand2))))
           ;
}
rtx
gen_adddf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_addsf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_subdi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (MINUS, DImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (DImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1171 (rtx, rtx *);
rtx
gen_split_1171 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx _val = 0;
  start_sequence ();
split_di (operands+0, 1, operands+0, operands+3);
   split_di (operands+1, 1, operands+1, operands+4);
   split_di (operands+2, 1, operands+2, operands+5);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (operand1), (operand2)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (SImode), (copy_rtx (operand1)), (copy_rtx (operand2))))))))
                        );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (MINUS, (SImode), (operand4), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_fmt_ee (LTU, (SImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))), (operand5)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_subsi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (MINUS, SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (SImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_subhi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (MINUS, HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (HImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_subqi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (MINUS, QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (QImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_subxf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand1), (operand2))))
           ;
}
rtx
gen_subdf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_subsf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_muldi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (DImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_mulsi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (SImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_mulhi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (HImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_mulqi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (QImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_umulqihi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (HImode), (gen_rtx_fmt_e (ZERO_EXTEND, (HImode), (operand1))), (gen_rtx_fmt_e (ZERO_EXTEND, (HImode), (operand2)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_mulqihi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (HImode), (gen_rtx_fmt_e (SIGN_EXTEND, (HImode), (operand1))), (gen_rtx_fmt_e (SIGN_EXTEND, (HImode), (operand2)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_umulditi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (TImode), (gen_rtx_fmt_e (ZERO_EXTEND, (TImode), (operand1))), (gen_rtx_fmt_e (ZERO_EXTEND, (TImode), (operand2)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_umulsidi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (DImode), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (operand1))), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (operand2)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_mulditi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (TImode), (gen_rtx_fmt_e (SIGN_EXTEND, (TImode), (operand1))), (gen_rtx_fmt_e (SIGN_EXTEND, (TImode), (operand2)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_mulsidi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (DImode), (gen_rtx_fmt_e (SIGN_EXTEND, (DImode), (operand1))), (gen_rtx_fmt_e (SIGN_EXTEND, (DImode), (operand2)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_umuldi3_highpart (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (TRUNCATE, (DImode), (gen_rtx_fmt_ee (LSHIFTRT, (TImode), (gen_rtx_fmt_ee (MULT, (TImode), (gen_rtx_fmt_e (ZERO_EXTEND, (TImode), (operand1))), (gen_rtx_fmt_e (ZERO_EXTEND, (TImode), (operand2))))), (const_int_rtx[64 + (64)])))))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_umulsi3_highpart (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (TRUNCATE, (SImode), (gen_rtx_fmt_ee (LSHIFTRT, (DImode), (gen_rtx_fmt_ee (MULT, (DImode), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (operand1))), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (operand2))))), (const_int_rtx[64 + (32)])))))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_smuldi3_highpart (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (TRUNCATE, (DImode), (gen_rtx_fmt_ee (LSHIFTRT, (TImode), (gen_rtx_fmt_ee (MULT, (TImode), (gen_rtx_fmt_e (SIGN_EXTEND, (TImode), (operand1))), (gen_rtx_fmt_e (SIGN_EXTEND, (TImode), (operand2))))), (const_int_rtx[64 + (64)])))))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_smulsi3_highpart (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (TRUNCATE, (SImode), (gen_rtx_fmt_ee (LSHIFTRT, (DImode), (gen_rtx_fmt_ee (MULT, (DImode), (gen_rtx_fmt_e (SIGN_EXTEND, (DImode), (operand1))), (gen_rtx_fmt_e (SIGN_EXTEND, (DImode), (operand2))))), (const_int_rtx[64 + (32)])))))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_mulxf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (XFmode), (operand1), (operand2))))
           ;
}
rtx
gen_muldf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_mulsf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_divxf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (DIV, (XFmode), (operand1), (operand2))))
           ;
}
rtx
gen_divdf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (DIV, (DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_divsf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (DIV, (SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_divmoddi4 (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (DIV, (DImode), (operand1), (operand2)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (MOD, (DImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
extern rtx gen_split_1199 (rtx, rtx *);
rtx
gen_split_1199 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
{
  if (!(x86_use_cltd & (1 << ix86_tune)) && !optimize_size)
    {
      if (true_regnum (operands[1]))
        emit_move_insn (operands[0], operands[1]);
      else
 emit_move_insn (operands[3], operands[1]);
      operands[4] = operands[3];
    }
  else
    {
      if (true_regnum (operands[1]))
 fancy_abort ("gcc.c", 222037, "?");
      operands[4] = operands[1];
    }
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (ASHIFTRT, (DImode), (operand4), (const_int_rtx[64 + (63)])))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (DIV, (DImode), (gen_rtx_REG (DImode, 0)), (operand2)))), gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand3)), (gen_rtx_fmt_ee (MOD, (DImode), (gen_rtx_REG (DImode, 0)), (copy_rtx (operand2))))), gen_rtx_fmt_e (USE, (VOIDmode), (copy_rtx (operand3))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_divmodsi4 (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (DIV, (SImode), (operand1), (operand2)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (MOD, (SImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
extern rtx gen_split_1201 (rtx, rtx *);
rtx
gen_split_1201 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
{
  if (!(x86_use_cltd & (1 << ix86_tune)) && !optimize_size)
    {
      if (true_regnum (operands[1]))
        emit_move_insn (operands[0], operands[1]);
      else
 emit_move_insn (operands[3], operands[1]);
      operands[4] = operands[3];
    }
  else
    {
      if (true_regnum (operands[1]))
 fancy_abort ("gcc.c", 222123, "?");
      operands[4] = operands[1];
    }
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (ASHIFTRT, (SImode), (operand4), (const_int_rtx[64 + (31)])))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (DIV, (SImode), (gen_rtx_REG (SImode, 0)), (operand2)))), gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand3)), (gen_rtx_fmt_ee (MOD, (SImode), (gen_rtx_REG (SImode, 0)), (copy_rtx (operand2))))), gen_rtx_fmt_e (USE, (VOIDmode), (copy_rtx (operand3))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1202 (rtx, rtx *);
rtx
gen_split_1202 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), ((const_int_rtx[64])))
            );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UDIV, (DImode), (operand1), (operand2)))), gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand3)), (gen_rtx_fmt_ee (UMOD, (DImode), (copy_rtx (operand1)), (copy_rtx (operand2))))), gen_rtx_fmt_e (USE, (VOIDmode), (copy_rtx (operand3))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1203 (rtx, rtx *);
rtx
gen_split_1203 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), ((const_int_rtx[64])))
            );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UDIV, (SImode), (operand1), (operand2)))), gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand3)), (gen_rtx_fmt_ee (UMOD, (SImode), (copy_rtx (operand1)), (copy_rtx (operand2))))), gen_rtx_fmt_e (USE, (VOIDmode), (copy_rtx (operand3))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_udivmodhi4 (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[5];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
operands[4] = gen_reg_rtx (HImode);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), ((const_int_rtx[64])))
            );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UDIV, (HImode), (operand1), (operand2)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (UMOD, (HImode), (operand1), (operand2)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand4)), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_testsi_ccno_1 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (AND, (SImode), (operand0), (operand1))), ((const_int_rtx[64])))))
             ;
}
rtx
gen_testqi_ccz_1 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCZmode), (gen_rtx_fmt_ee (AND, (QImode), (operand0), (operand1))), ((const_int_rtx[64])))))
             ;
}
rtx
gen_testqi_ext_ccno_0 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (AND, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand1))), ((const_int_rtx[64])))))
             ;
}
extern rtx gen_split_1208 (rtx, rtx *);
rtx
gen_split_1208 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
{
  long len = ((operands[1])->u.hwint[0]);
  long pos = ((operands[2])->u.hwint[0]);
  long mask;
  enum machine_mode mode, submode;
  mode = ((enum machine_mode) (operands[0])->mode);
  if (((enum rtx_code) (operands[0])->code) == MEM)
    {
      if (! (((operands[0]))->volatil))
 {
   mode = smallest_mode_for_size (pos + len, MODE_INT);
   operands[0] = adjust_address_1 (operands[0], mode, 0, 1, 1);
 }
    }
  else if (((enum rtx_code) (operands[0])->code) == SUBREG
    && (submode = ((enum machine_mode) ((((operands[0])->u.fld[0]).rtx1))->mode),
        ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) > ((unsigned short) (((unsigned short) mode_size[submode]) * 8)))
    && pos + len <= ((unsigned short) (((unsigned short) mode_size[submode]) * 8)))
    {
      mode = submode;
      operands[0] = (((operands[0])->u.fld[0]).rtx1);
    }
  else if (mode == HImode && pos + len <= 8)
    {
      mode = QImode;
      operands[0] = rtl_hooks.gen_lowpart (QImode, operands[0]);
    }
  mask = ((long)1 << (pos + len)) - 1;
  mask &= ~(((long)1 << pos) - 1);
  operands[3] = gen_rtx_fmt_ee (AND, (mode), (operands[0]), (gen_int_mode (mask, mode)));
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (operand3), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1209 (rtx, rtx *);
rtx
gen_split_1209 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
   operands[1] = gen_int_mode (((operands[1])->u.hwint[0]) >> 8, SImode);
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (AND, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand1))), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1210 (rtx, rtx *);
rtx
gen_split_1210 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (QImode, operands[0]);
   operands[1] = rtl_hooks.gen_lowpart (QImode, operands[1]);
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (AND, (QImode), (operand0), (operand1))), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_anddi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (AND, DImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (DImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_andsi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (AND, SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (SImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1213 (rtx, rtx *);
rtx
gen_split_1213 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
operands[1] = rtl_hooks.gen_lowpart (HImode, operands[0]);
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand1))), ((const_int_rtx[64])))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1214 (rtx, rtx *);
rtx
gen_split_1214 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
operands[1] = rtl_hooks.gen_lowpart (QImode, operands[0]);
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand1))), ((const_int_rtx[64])))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1215 (rtx, rtx *);
rtx
gen_split_1215 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (gen_rtx_fmt_ee (XOR, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (copy_rtx (operand0)), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (copy_rtx (operand0)), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)])))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_andhi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (AND, HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (HImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_andqi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (AND, QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (QImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1218 (rtx, rtx *);
rtx
gen_split_1218 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
   operands[1] = rtl_hooks.gen_lowpart (SImode, operands[1]);
   operands[2] = gen_int_mode ((((operands[2])->u.hwint[0]) >> 8) & 0xff, SImode);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (gen_rtx_fmt_ee (AND, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand1), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1219 (rtx, rtx *);
rtx
gen_split_1219 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (QImode, operands[0]);
   operands[1] = rtl_hooks.gen_lowpart (QImode, operands[1]);
   operands[2] = rtl_hooks.gen_lowpart (QImode, operands[2]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand0))), (gen_rtx_fmt_ee (AND, (QImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_iordi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (IOR, DImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (IOR, (DImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_iorsi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (IOR, SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (IOR, (SImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_iorhi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (IOR, HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (IOR, (HImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_iorqi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (IOR, QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (IOR, (QImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1224 (rtx, rtx *);
rtx
gen_split_1224 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
   operands[1] = rtl_hooks.gen_lowpart (SImode, operands[1]);
   operands[2] = gen_int_mode ((((operands[2])->u.hwint[0]) >> 8) & 0xff, SImode);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (gen_rtx_fmt_ee (IOR, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand1), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1225 (rtx, rtx *);
rtx
gen_split_1225 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (QImode, operands[0]);
   operands[1] = rtl_hooks.gen_lowpart (QImode, operands[1]);
   operands[2] = rtl_hooks.gen_lowpart (QImode, operands[2]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand0))), (gen_rtx_fmt_ee (IOR, (QImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_xordi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (XOR, DImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (DImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_xorsi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (XOR, SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (SImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_xorhi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (XOR, HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (HImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_xorqi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (XOR, QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (QImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_xorqi_cc_ext_1 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (XOR, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand1), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand2))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (gen_rtx_fmt_ee (XOR, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand1), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand2)))))))
             ;
}
extern rtx gen_split_1231 (rtx, rtx *);
rtx
gen_split_1231 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
   operands[1] = rtl_hooks.gen_lowpart (SImode, operands[1]);
   operands[2] = gen_int_mode ((((operands[2])->u.hwint[0]) >> 8) & 0xff, SImode);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (gen_rtx_fmt_ee (XOR, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand1), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1232 (rtx, rtx *);
rtx
gen_split_1232 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (QImode, operands[0]);
   operands[1] = rtl_hooks.gen_lowpart (QImode, operands[1]);
   operands[2] = rtl_hooks.gen_lowpart (QImode, operands[2]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand0))), (gen_rtx_fmt_ee (XOR, (QImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_negdi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_unary_operator (NEG, DImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (DImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1234 (rtx, rtx *);
rtx
gen_split_1234 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
split_di (operands+1, 1, operands+2, operands+3);
   split_di (operands+0, 1, operands+0, operands+1);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCZmode), (gen_rtx_fmt_e (NEG, (SImode), (operand2))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (SImode), (copy_rtx (operand2))))))))
                        );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_fmt_ee (LTU, (SImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))), (operand3))), ((const_int_rtx[64]))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand1)), (gen_rtx_fmt_e (NEG, (SImode), (copy_rtx (operand1))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_negsi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_unary_operator (NEG, SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (SImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_neghi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_unary_operator (NEG, HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (HImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_negqi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_unary_operator (NEG, QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (QImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_negsf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
if (((target_flags & 0x00004000) != 0))
     {
       if (memory_operand (operands[0], VOIDmode)
    && rtx_equal_p (operands[0], operands[1]))
  emit_insn (gen_negsf2_memory (operands[0], operands[1]));
       else
 {
   rtx reg = gen_reg_rtx (SFmode);
   rtx dest = operands[0];
   rtx imm = rtl_hooks.gen_lowpart (SFmode, gen_int_mode (0x80000000, SImode));
   operands[1] = force_reg (SFmode, operands[1]);
   operands[0] = force_reg (SFmode, operands[0]);
   reg = force_reg (V4SFmode,
      gen_rtx_CONST_VECTOR (V4SFmode,
        gen_rtvec (4, imm, (const_tiny_rtx[0][(int) (SFmode)]),
     (const_tiny_rtx[0][(int) (SFmode)]),
     (const_tiny_rtx[0][(int) (SFmode)]))));
   emit_insn (gen_negsf2_ifs (operands[0], operands[1], reg));
   if (dest != operands[0])
     emit_move_insn (dest, operands[0]);
 }
       return (_val = get_insns (), end_sequence (), _val);
     }
   ix86_expand_unary_operator (NEG, SFmode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (SFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1239 (rtx, rtx *);
rtx
gen_split_1239 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (SFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1240 (rtx, rtx *);
rtx
gen_split_1240 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (SFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1241 (rtx, rtx *);
rtx
gen_split_1241 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
{
  operands[0] = simplify_gen_subreg (V4SFmode, operands[0], SFmode, 0);
  operands[1] = simplify_gen_subreg (V4SFmode, operands[1], SFmode, 0);
  if (operands_match_p (operands[0], operands[2]))
    {
      rtx tmp;
      tmp = operands[1];
      operands[1] = operands[2];
      operands[2] = tmp;
    }
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (V4SFmode), (operand1), (operand2))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1242 (rtx, rtx *);
rtx
gen_split_1242 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (SFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1243 (rtx, rtx *);
rtx
gen_split_1243 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
operands[1] = gen_int_mode (0x80000000, SImode);
   operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (SImode), (copy_rtx (operand0)), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1244 (rtx, rtx *);
rtx
gen_split_1244 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
{
  int size = ((unsigned short) mode_size[((enum machine_mode) (operands[1])->mode)]);
  if (((enum machine_mode) (operands[1])->mode) == XFmode)
    size = 10;
  operands[0] = adjust_address_1 (operands[0], QImode, size - 1, 1, 1);
  operands[1] = gen_int_mode (0x80, QImode);
}
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (QImode), (copy_rtx (operand0)), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_negdf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
if (((target_flags & 0x00008000) != 0))
     {
       if (memory_operand (operands[0], VOIDmode)
    && rtx_equal_p (operands[0], operands[1]))
  emit_insn (gen_negdf2_memory (operands[0], operands[1]));
       else
 {
   rtx reg;
   rtx imm = immed_double_const (0, 0x80000000, DImode);
   rtx dest = operands[0];
   operands[1] = force_reg (DFmode, operands[1]);
   operands[0] = force_reg (DFmode, operands[0]);
   imm = rtl_hooks.gen_lowpart (DFmode, imm);
   reg = force_reg (V2DFmode,
      gen_rtx_CONST_VECTOR (V2DFmode,
        gen_rtvec (2, imm, (const_tiny_rtx[0][(int) (DFmode)]))));
   emit_insn (gen_negdf2_ifs (operands[0], operands[1], reg));
   if (dest != operands[0])
     emit_move_insn (dest, operands[0]);
 }
       return (_val = get_insns (), end_sequence (), _val);
     }
   ix86_expand_unary_operator (NEG, DFmode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (DFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1246 (rtx, rtx *);
rtx
gen_split_1246 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (DFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1247 (rtx, rtx *);
rtx
gen_split_1247 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (DFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1248 (rtx, rtx *);
rtx
gen_split_1248 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (DImode, operands[0]);
    operands[1] = rtl_hooks.gen_lowpart (DImode, operands[1]);
    operands[2] = rtl_hooks.gen_lowpart (DImode, operands[2]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (DImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1249 (rtx, rtx *);
rtx
gen_split_1249 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
{
  operands[0] = simplify_gen_subreg (V2DFmode, operands[0], DFmode, 0);
  operands[1] = simplify_gen_subreg (V2DFmode, operands[1], DFmode, 0);
  if ((x86_sse_partial_regs & (1 << ix86_tune)) && !optimize_size)
    emit_insn (gen_sse2_unpcklpd (operands[0], operands[0], operands[0]));
  if (operands_match_p (operands[0], operands[2]))
    {
      rtx tmp;
      tmp = operands[1];
      operands[1] = operands[2];
      operands[2] = tmp;
    }
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (V2DFmode), (operand1), (operand2))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1250 (rtx, rtx *);
rtx
gen_split_1250 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (DFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1251 (rtx, rtx *);
rtx
gen_split_1251 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
operands[4] = gen_int_mode (0x80000000, SImode);
   split_di (operands+0, 1, operands+2, operands+3);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (XOR, (SImode), (copy_rtx (operand3)), (operand4)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_negxf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_unary_operator (NEG, XFmode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (XFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1253 (rtx, rtx *);
rtx
gen_split_1253 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (XFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1254 (rtx, rtx *);
rtx
gen_split_1254 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
operands[1] = gen_rtx_CONST_INT (VOIDmode, (long) (0x8000));
   operands[0] = gen_rtx_REG (SImode,
         true_regnum (operands[0]) + (0 ? 1 : 2));
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (SImode), (copy_rtx (operand0)), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_abssf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
if (((target_flags & 0x00004000) != 0))
     {
       if (memory_operand (operands[0], VOIDmode)
    && rtx_equal_p (operands[0], operands[1]))
  emit_insn (gen_abssf2_memory (operands[0], operands[1]));
       else
 {
   rtx reg = gen_reg_rtx (V4SFmode);
   rtx dest = operands[0];
   rtx imm;
   operands[1] = force_reg (SFmode, operands[1]);
   operands[0] = force_reg (SFmode, operands[0]);
   imm = rtl_hooks.gen_lowpart (SFmode, gen_int_mode(~0x80000000, SImode));
   reg = force_reg (V4SFmode,
      gen_rtx_CONST_VECTOR (V4SFmode,
      gen_rtvec (4, imm, (const_tiny_rtx[0][(int) (SFmode)]),
          (const_tiny_rtx[0][(int) (SFmode)]),
          (const_tiny_rtx[0][(int) (SFmode)]))));
   emit_insn (gen_abssf2_ifs (operands[0], operands[1], reg));
   if (dest != operands[0])
     emit_move_insn (dest, operands[0]);
 }
       return (_val = get_insns (), end_sequence (), _val);
     }
   ix86_expand_unary_operator (ABS, SFmode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (SFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1256 (rtx, rtx *);
rtx
gen_split_1256 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ABS, (SFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1257 (rtx, rtx *);
rtx
gen_split_1257 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ABS, (SFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1258 (rtx, rtx *);
rtx
gen_split_1258 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
{
  operands[0] = simplify_gen_subreg (V4SFmode, operands[0], SFmode, 0);
  operands[1] = simplify_gen_subreg (V4SFmode, operands[1], SFmode, 0);
  if (operands_match_p (operands[0], operands[2]))
    {
      rtx tmp;
      tmp = operands[1];
      operands[1] = operands[2];
      operands[2] = tmp;
    }
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (V4SFmode), (operand1), (operand2))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1259 (rtx, rtx *);
rtx
gen_split_1259 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ABS, (SFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1260 (rtx, rtx *);
rtx
gen_split_1260 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
operands[1] = gen_int_mode (~0x80000000, SImode);
   operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (SImode), (copy_rtx (operand0)), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1261 (rtx, rtx *);
rtx
gen_split_1261 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
{
  int size = ((unsigned short) mode_size[((enum machine_mode) (operands[1])->mode)]);
  if (((enum machine_mode) (operands[1])->mode) == XFmode)
    size = 10;
  operands[0] = adjust_address_1 (operands[0], QImode, size - 1, 1, 1);
  operands[1] = gen_int_mode (~0x80, QImode);
}
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (QImode), (copy_rtx (operand0)), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_absdf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
if (((target_flags & 0x00008000) != 0))
     {
       if (memory_operand (operands[0], VOIDmode)
    && rtx_equal_p (operands[0], operands[1]))
  emit_insn (gen_absdf2_memory (operands[0], operands[1]));
       else
 {
   rtx reg = gen_reg_rtx (V2DFmode);
   rtx imm = immed_double_const (~0, ~0x80000000, DImode);
   rtx dest = operands[0];
   operands[1] = force_reg (DFmode, operands[1]);
   operands[0] = force_reg (DFmode, operands[0]);
   imm = rtl_hooks.gen_lowpart (DFmode, imm);
   reg = force_reg (V2DFmode,
      gen_rtx_CONST_VECTOR (V2DFmode,
      gen_rtvec (2, imm, (const_tiny_rtx[0][(int) (DFmode)]))));
   emit_insn (gen_absdf2_ifs (operands[0], operands[1], reg));
   if (dest != operands[0])
     emit_move_insn (dest, operands[0]);
 }
       return (_val = get_insns (), end_sequence (), _val);
     }
   ix86_expand_unary_operator (ABS, DFmode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (DFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1263 (rtx, rtx *);
rtx
gen_split_1263 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ABS, (DFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1264 (rtx, rtx *);
rtx
gen_split_1264 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ABS, (DFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1265 (rtx, rtx *);
rtx
gen_split_1265 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
{
  operands[0] = simplify_gen_subreg (V2DFmode, operands[0], DFmode, 0);
  operands[1] = simplify_gen_subreg (V2DFmode, operands[1], DFmode, 0);
  if ((x86_sse_partial_regs & (1 << ix86_tune)) && !optimize_size)
    emit_insn (gen_sse2_unpcklpd (operands[0], operands[0], operands[0]));
  if (operands_match_p (operands[0], operands[2]))
    {
      rtx tmp;
      tmp = operands[1];
      operands[1] = operands[2];
      operands[2] = tmp;
    }
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (V2DFmode), (operand1), (operand2))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1266 (rtx, rtx *);
rtx
gen_split_1266 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ABS, (DFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1267 (rtx, rtx *);
rtx
gen_split_1267 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
operands[4] = gen_int_mode (~0x80000000, SImode);
   split_di (operands+0, 1, operands+2, operands+3);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (AND, (SImode), (copy_rtx (operand3)), (operand4)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_absxf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_unary_operator (ABS, XFmode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (XFmode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1269 (rtx, rtx *);
rtx
gen_split_1269 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ABS, (XFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1270 (rtx, rtx *);
rtx
gen_split_1270 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
operands[1] = gen_rtx_CONST_INT (VOIDmode, (long) (~0x8000));
   operands[0] = gen_rtx_REG (SImode,
         true_regnum (operands[0]) + (0 ? 1 : 2));
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (SImode), (copy_rtx (operand0)), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_one_cmpldi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_unary_operator (NOT, DImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NOT, (DImode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1272 (rtx, rtx *);
rtx
gen_split_1272 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (XOR, (DImode), (operand1), ((const_int_rtx[64 -1])))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (DImode), (copy_rtx (operand1)), ((const_int_rtx[64 -1]))))))))
                );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_one_cmplsi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_unary_operator (NOT, SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NOT, (SImode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1274 (rtx, rtx *);
rtx
gen_split_1274 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (XOR, (SImode), (operand1), ((const_int_rtx[64 -1])))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (SImode), (copy_rtx (operand1)), ((const_int_rtx[64 -1]))))))))
                );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1275 (rtx, rtx *);
rtx
gen_split_1275 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (XOR, (SImode), (operand1), ((const_int_rtx[64 -1])))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (gen_rtx_fmt_ee (XOR, (SImode), (copy_rtx (operand1)), ((const_int_rtx[64 -1]))))))))))
                 );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_one_cmplhi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_unary_operator (NOT, HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NOT, (HImode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1277 (rtx, rtx *);
rtx
gen_split_1277 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (XOR, (HImode), (operand1), ((const_int_rtx[64 -1])))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (HImode), (copy_rtx (operand1)), ((const_int_rtx[64 -1]))))))))
                );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_one_cmplqi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
ix86_expand_unary_operator (NOT, QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NOT, (QImode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1279 (rtx, rtx *);
rtx
gen_split_1279 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (XOR, (QImode), (operand1), ((const_int_rtx[64 -1])))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (QImode), (copy_rtx (operand1)), ((const_int_rtx[64 -1]))))))))
                );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_ashldi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  if (!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && ! immediate_operand (operands[2], QImode))
    {
      emit_insn (gen_ashldi3_1 (operands[0], operands[1], operands[2]));
      return (_val = get_insns (), end_sequence (), _val);
    }
  ix86_expand_binary_operator (ASHIFT, DImode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (DImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1281 (rtx, rtx *);
rtx
gen_split_1281 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[2] = gen_int_mode (1 << ((operands[2])->u.hwint[0]), DImode);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (DImode), (operand1), (operand2))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1282 (rtx, rtx *);
rtx
gen_split_1282 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_ashldi (operands, operands[3]); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1283 (rtx, rtx *);
rtx
gen_split_1283 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_ashldi (operands, (rtx) 0); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_x86_shift_adj_1 (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCZmode), (gen_rtx_fmt_ee (AND, (QImode), (operand2), (const_int_rtx[64 + (32)]))), ((const_int_rtx[64])))))
             );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SImode), (gen_rtx_fmt_ee (NE, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), ((const_int_rtx[64])))), (operand1), (operand0))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SImode), (gen_rtx_fmt_ee (NE, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), ((const_int_rtx[64])))), (operand3), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_x86_shift_adj_2 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  rtx label = gen_label_rtx ();
  rtx tmp;
  emit_insn (gen_testqi_ccz_1 (operands[2], gen_rtx_CONST_INT (VOIDmode, (long) (32))));
  tmp = gen_rtx_REG (CCZmode, 17);
  tmp = gen_rtx_fmt_ee (EQ, (VOIDmode), (tmp), ((const_int_rtx[64])));
  tmp = gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (tmp), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (label))), ((global_rtl[GR_PC])))
                ;
  tmp = emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (tmp)));
  (((tmp)->u.fld[9]).rtx1) = label;
  emit_move_insn (operands[0], operands[1]);
  emit_move_insn (operands[1], (const_int_rtx[64]));
  emit_label (label);
  (((label)->u.fld[4]).rtint) = 1;
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_ashlsi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ASHIFT, SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (SImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1287 (rtx, rtx *);
rtx
gen_split_1287 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  rtx pat;
  operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
  operands[1] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[1]);
  operands[2] = gen_int_mode (1 << ((operands[2])->u.hwint[0]), (0 ? DImode : SImode));
  pat = gen_rtx_fmt_ee (MULT, ((0 ? DImode : SImode)), (operands[1]), (operands[2]));
  if ((0 ? DImode : SImode) != SImode)
    pat = gen_rtx_SUBREG (SImode, pat, 0);
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (pat)));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1288 (rtx, rtx *);
rtx
gen_split_1288 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  rtx pat, clob;
  emit_move_insn (operands[1], operands[0]);
  pat = gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (gen_rtx_fmt_ee (ASHIFT, (((enum machine_mode) (operands[0])->mode)), (operands[0]), (operands[2]))))
                                   ;
  clob = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_REG (CCmode, 17)));
  emit_insn (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, pat, clob))));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1289 (rtx, rtx *);
rtx
gen_split_1289 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
{
  operands[1] = rtl_hooks.gen_lowpart ((0 ? DImode : SImode), operands[1]);
  operands[2] = gen_int_mode (1 << ((operands[2])->u.hwint[0]), (0 ? DImode : SImode));
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (gen_rtx_SUBREG (SImode, gen_rtx_fmt_ee (MULT, (SImode), (operand1), (operand2)), 0)))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_ashlhi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ASHIFT, HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (HImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_ashlqi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ASHIFT, QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (QImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_ashrdi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  if (!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && ! immediate_operand (operands[2], QImode))
    {
      emit_insn (gen_ashrdi3_1 (operands[0], operands[1], operands[2]));
      return (_val = get_insns (), end_sequence (), _val);
    }
  ix86_expand_binary_operator (ASHIFTRT, DImode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (DImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1293 (rtx, rtx *);
rtx
gen_split_1293 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_ashrdi (operands, operands[3]); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1294 (rtx, rtx *);
rtx
gen_split_1294 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_ashrdi (operands, (rtx) 0); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_x86_shift_adj_3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  rtx label = gen_label_rtx ();
  rtx tmp;
  emit_insn (gen_testqi_ccz_1 (operands[2], gen_rtx_CONST_INT (VOIDmode, (long) (32))));
  tmp = gen_rtx_REG (CCZmode, 17);
  tmp = gen_rtx_fmt_ee (EQ, (VOIDmode), (tmp), ((const_int_rtx[64])));
  tmp = gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (tmp), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (label))), ((global_rtl[GR_PC])))
                ;
  tmp = emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (tmp)));
  (((tmp)->u.fld[9]).rtx1) = label;
  emit_move_insn (operands[0], operands[1]);
  emit_insn (gen_ashrsi3_31 (operands[1], operands[1], gen_rtx_CONST_INT (VOIDmode, (long) (31))));
  emit_label (label);
  (((label)->u.fld[4]).rtint) = 1;
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_ashrsi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ASHIFTRT, SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (SImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_ashrhi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ASHIFTRT, HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (HImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_ashrqi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ASHIFTRT, QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFTRT, (QImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_lshrdi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  if (!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && ! immediate_operand (operands[2], QImode))
    {
      emit_insn (gen_lshrdi3_1 (operands[0], operands[1], operands[2]));
      return (_val = get_insns (), end_sequence (), _val);
    }
  ix86_expand_binary_operator (LSHIFTRT, DImode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (DImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1300 (rtx, rtx *);
rtx
gen_split_1300 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_lshrdi (operands, operands[3]); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1301 (rtx, rtx *);
rtx
gen_split_1301 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_lshrdi (operands, (rtx) 0); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_lshrsi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (LSHIFTRT, SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (SImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_lshrhi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (LSHIFTRT, HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (HImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_lshrqi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (LSHIFTRT, QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LSHIFTRT, (QImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_rotldi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ROTATE, DImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ROTATE, (DImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_rotlsi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ROTATE, SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ROTATE, (SImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_rotlhi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ROTATE, HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ROTATE, (HImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_rotlqi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ROTATE, QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ROTATE, (QImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_rotrdi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ROTATERT, DImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ROTATERT, (DImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_rotrsi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ROTATERT, SImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ROTATERT, (SImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_rotrhi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ROTATERT, HImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ROTATERT, (HImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_rotrqi3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
ix86_expand_binary_operator (ROTATERT, QImode, operands); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ROTATERT, (QImode), (operand1), (operand2))))
           );
  emit_insn (gen_hard_reg_clobber (CCmode, 17));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_extv (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
{
  if (((operands[2])->u.hwint[0]) != 8 || ((operands[3])->u.hwint[0]) != 8)
    return (end_sequence (), _val);
  if (! register_operand (operands[1], VOIDmode))
    return (end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (SIGN_EXTRACT, (SImode), (operand1), (operand2), (operand3))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_extzv (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
{
  if (((operands[2])->u.hwint[0]) != 8 || ((operands[3])->u.hwint[0]) != 8)
    return (end_sequence (), _val);
  if (! register_operand (operands[1], VOIDmode))
    return (end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand1), (operand2), (operand3))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_insv (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
{
  if (((operands[1])->u.hwint[0]) != 8 || ((operands[2])->u.hwint[0]) != 8)
    return (end_sequence (), _val);
  if (! register_operand (operands[0], VOIDmode))
    return (end_sequence (), _val);
  if (0)
    emit_insn (gen_movdi_insv_1_rex64 (operands[0], operands[3]));
  else
    emit_insn (gen_movsi_insv_1 (operands[0], operands[3]));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (VOIDmode), (operand0), (operand1), (operand2))), (operand3))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_seq (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (EQ, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (EQ, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sne (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (NE, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (NE, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sgt (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (GT, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (GT, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sgtu (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (GTU, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (GTU, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_slt (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (LT, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LT, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sltu (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (LTU, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LTU, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sge (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (GE, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (GE, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sgeu (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (GEU, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (GEU, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sle (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (LE, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LE, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sleu (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (LEU, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LEU, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sunordered (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (UNORDERED, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UNORDERED, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sordered (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (ORDERED, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ORDERED, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_suneq (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (UNEQ, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UNEQ, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sunge (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (UNGE, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UNGE, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sungt (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (UNGT, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UNGT, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sunle (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (UNLE, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UNLE, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sunlt (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (UNLT, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (UNLT, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sltgt (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
if (ix86_expand_setcc (LTGT, operands[0])) return (_val = get_insns (), end_sequence (), _val); else return (end_sequence (), _val);
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (LTGT, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1334 (rtx, rtx *);
rtx
gen_split_1334 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
{
  ((operands[1])->mode = (QImode));
}
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1335 (rtx, rtx *);
rtx
gen_split_1335 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
{
  ((operands[1])->mode = (QImode));
}
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1336 (rtx, rtx *);
rtx
gen_split_1336 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
{
  rtx new_op1 = copy_rtx (operands[1]);
  operands[1] = new_op1;
  ((new_op1)->mode = (QImode));
  ((new_op1)->code = (ix86_reverse_condition (((enum rtx_code) (new_op1)->code), ((enum machine_mode) ((((new_op1)->u.fld[0]).rtx1))->mode))))
                                        ;
  if (! ix86_comparison_operator (new_op1, VOIDmode))
    return (end_sequence (), _val);
}
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1337 (rtx, rtx *);
rtx
gen_split_1337 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
{
  rtx new_op1 = copy_rtx (operands[1]);
  operands[1] = new_op1;
  ((new_op1)->mode = (QImode));
  ((new_op1)->code = (ix86_reverse_condition (((enum rtx_code) (new_op1)->code), ((enum machine_mode) ((((new_op1)->u.fld[0]).rtx1))->mode))))
                                        ;
  if (! ix86_comparison_operator (new_op1, VOIDmode))
    return (end_sequence (), _val);
}
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_beq (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (EQ, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bne (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (NE, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bgt (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (GT, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bgtu (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (GTU, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_blt (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (LT, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bltu (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (LTU, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bge (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (GE, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bgeu (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (GEU, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_ble (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (LE, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bleu (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (LEU, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bunordered (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (UNORDERED, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bordered (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (ORDERED, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_buneq (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (UNEQ, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bunge (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (UNGE, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bungt (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (UNGT, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bunle (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (UNLE, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bunlt (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (UNLT, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_bltgt (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
ix86_expand_branch (LTGT, operands[0]); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand1), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1356 (rtx, rtx *);
rtx
gen_split_1356 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
{
  ((operands[0])->mode = (VOIDmode));
}
  operand0 = operands[0];
  operand1 = operands[1];
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand0), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand1))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1357 (rtx, rtx *);
rtx
gen_split_1357 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
{
  rtx new_op0 = copy_rtx (operands[0]);
  operands[0] = new_op0;
  ((new_op0)->mode = (VOIDmode));
  ((new_op0)->code = (ix86_reverse_condition (((enum rtx_code) (new_op0)->code), ((enum machine_mode) ((((new_op0)->u.fld[0]).rtx1))->mode))))
                                        ;
  if (! ix86_comparison_operator (new_op0, VOIDmode))
    return (end_sequence (), _val);
}
  operand0 = operands[0];
  operand1 = operands[1];
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand0), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand1))), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1358 (rtx, rtx *);
rtx
gen_split_1358 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  ix86_split_fp_branch (((enum rtx_code) (operands[0])->code), operands[1], operands[2],
                 operands[3], operands[4], (rtx) 0);
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1359 (rtx, rtx *);
rtx
gen_split_1359 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx _val = 0;
  start_sequence ();
{
  ix86_split_fp_branch (((enum rtx_code) (operands[0])->code), operands[1], operands[2],
        operands[3], operands[4], operands[5]);
  return (_val = get_insns (), end_sequence (), _val);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  operand6 = operands[6];
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (operand6), (operand3), (operand4))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_indirect_jump (rtx operand0)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (operand0))
          ;
}
rtx
gen_tablejump (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (flag_pic)
    {
      rtx op0, op1;
      enum rtx_code code;
      if (0)
 {
   code = PLUS;
   op0 = operands[0];
   op1 = gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (operands[1]));
 }
      else if (0 || 1)
 {
   code = PLUS;
   op0 = operands[0];
   op1 = pic_offset_table_rtx;
 }
      else
 {
   code = MINUS;
   op0 = pic_offset_table_rtx;
   op1 = operands[0];
 }
      operands[0] = expand_simple_binop ((0 ? DImode : SImode), code, op0, op1, (rtx) 0, 0,
      OPTAB_DIRECT);
    }
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_jump_insn (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (operand0)), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand1)))))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_doloop_end (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3,
 rtx operand4)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[5];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
    operands[4] = operand4;
{
  if (((operands[3])->u.hwint[0]) > 1)
    return (end_sequence (), _val);
  if (((enum machine_mode) (operands[0])->mode) != SImode)
    return (end_sequence (), _val);
  emit_jump_insn (gen_doloop_end_internal (operands[4], operands[0],
        operands[0]));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand3))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand4))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1363 (rtx, rtx *);
rtx
gen_split_1363 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCZmode), (gen_rtx_fmt_ee (PLUS, (SImode), (operand1), ((const_int_rtx[64 -1])))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand1)), (gen_rtx_fmt_ee (PLUS, (SImode), (copy_rtx (operand1)), ((const_int_rtx[64 -1]))))))))
                );
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (gen_rtx_fmt_ee (NE, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), ((const_int_rtx[64])))), (operand0), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1364 (rtx, rtx *);
rtx
gen_split_1364 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (operand1))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCZmode), (gen_rtx_fmt_ee (PLUS, (SImode), (copy_rtx (operand3)), ((const_int_rtx[64 -1])))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand3)), (gen_rtx_fmt_ee (PLUS, (SImode), (copy_rtx (operand3)), ((const_int_rtx[64 -1]))))))))
                );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (copy_rtx (operand3)))
                     );
  emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (gen_rtx_fmt_ee (NE, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), ((const_int_rtx[64])))), (operand0), ((global_rtl[GR_PC])))))
         );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1365 (rtx, rtx *);
rtx
gen_peephole2_1365 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
{
  operands[4] = gen_rtx_REG (((enum machine_mode) (operands[0])->mode), 17);
  operands[5] = rtl_hooks.gen_lowpart (QImode, operands[3]);
  ix86_expand_clear (operands[3]);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (operand0))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand5))), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1366 (rtx, rtx *);
rtx
gen_peephole2_1366 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
{
  operands[4] = gen_rtx_REG (((enum machine_mode) (operands[0])->mode), 17);
  operands[5] = rtl_hooks.gen_lowpart (QImode, operands[3]);
  ix86_expand_clear (operands[3]);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (operand0))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand5))), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_call_pop (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
{
  ix86_expand_call (((void *)0), operands[0], operands[1], operands[2], operands[3], 0);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_call_insn (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (CALL, (VOIDmode), (operand0), (operand1)), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (operand3)))))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_call (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  ix86_expand_call (((void *)0), operands[0], operands[1], operands[2], ((void *)0), 0);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_call_insn (gen_rtx_fmt_ee (CALL, (VOIDmode), (operand0), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sibcall (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  ix86_expand_call (((void *)0), operands[0], operands[1], operands[2], ((void *)0), 1);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_call_insn (gen_rtx_fmt_ee (CALL, (VOIDmode), (operand0), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_call_value_pop (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3,
 rtx operand4)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[5];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
    operands[4] = operand4;
{
  ix86_expand_call (operands[0], operands[1], operands[2],
      operands[3], operands[4], 0);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
  }
  emit_call_insn (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (CALL, (VOIDmode), (operand1), (operand2)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (operand4)))))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_call_value (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
{
  ix86_expand_call (operands[0], operands[1], operands[2], operands[3], ((void *)0), 0);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_call_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (CALL, (VOIDmode), (operand1), (operand2))))
           );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand3))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sibcall_value (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
{
  ix86_expand_call (operands[0], operands[1], operands[2], operands[3], ((void *)0), 1);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_call_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (CALL, (VOIDmode), (operand1), (operand2))))
           );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand3))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_untyped_call (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  int i;
  ix86_expand_call (((target_flags & 0x00000020)
       ? gen_rtx_REG (XCmode, 8) : ((void *)0)),
      operands[0], (const_int_rtx[64]), gen_rtx_CONST_INT (VOIDmode, (long) ((0 ? 8 : (((target_flags & 0x00004000) != 0) ? 3 : 0)) - 1)),
      ((void *)0), 0);
  for (i = 0; i < (((((operands[2])->u.fld[0]).rtvec1))->num_elem); i++)
    {
      rtx set = (((((operands[2])->u.fld[0]).rtvec1))->elem[i]);
      emit_move_insn ((((set)->u.fld[0]).rtx1), (((set)->u.fld[1]).rtx1));
    }
  emit_insn (gen_blockage ((const_int_rtx[64])));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_call_insn (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (CALL, (VOIDmode), (operand0), ((const_int_rtx[64]))), operand1, operand2)))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_return (void)
{
  rtx _val = 0;
  start_sequence ();
  {
{
  if ((cfun->pops_args))
    {
      rtx popc = gen_rtx_CONST_INT (VOIDmode, (long) ((cfun->pops_args)));
      emit_jump_insn (gen_return_pop_internal (popc));
      return (_val = get_insns (), end_sequence (), _val);
    }
}
  }
  emit_jump_insn (gen_rtx_fmt_ (RETURN, (VOIDmode)));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_prologue (void)
{
  rtx _val = 0;
  start_sequence ();
  {
ix86_expand_prologue (); return (_val = get_insns (), end_sequence (), _val);
  }
  emit_insn ((const_int_rtx[64 +1]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_epilogue (void)
{
  rtx _val = 0;
  start_sequence ();
  {
ix86_expand_epilogue (1); return (_val = get_insns (), end_sequence (), _val);
  }
  emit_insn ((const_int_rtx[64 +1]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sibcall_epilogue (void)
{
  rtx _val = 0;
  start_sequence ();
  {
ix86_expand_epilogue (0); return (_val = get_insns (), end_sequence (), _val);
  }
  emit_insn ((const_int_rtx[64 +1]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_eh_return (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
{
  rtx tmp, sa = gen_rtx_REG ((0 ? DImode : SImode), 2), ra = operands[0];
  tmp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_ARG_POINTER])), (sa));
  tmp = plus_constant_wide ((tmp), (long) (-(0 ? 8 : 4)));
  tmp = gen_rtx_MEM ((0 ? DImode : SImode), tmp);
  emit_move_insn (tmp, ra);
  if ((0 ? DImode : SImode) == SImode)
    emit_jump_insn (gen_eh_return_si (sa));
  else
    emit_jump_insn (gen_eh_return_di (sa));
  emit_barrier ();
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1379 (rtx, rtx *);
rtx
gen_split_1379 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_expand_epilogue (2); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64 +1]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1380 (rtx, rtx *);
rtx
gen_split_1380 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_expand_epilogue (2); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64 +1]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_ffssi2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FFS, (SImode), (operand1)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
extern rtx gen_split_1382 (rtx, rtx *);
rtx
gen_split_1382 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), ((const_int_rtx[64 -1])))
             );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCZmode), (operand1), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (CTZ, (SImode), (copy_rtx (operand1))))))))
                        );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SImode), (gen_rtx_fmt_ee (EQ, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), ((const_int_rtx[64])))), (copy_rtx (operand2)), (copy_rtx (operand0)))))
                      );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (gen_rtx_fmt_ee (PLUS, (SImode), (copy_rtx (operand0)), ((const_int_rtx[64 +1]))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1383 (rtx, rtx *);
rtx
gen_split_1383 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
{
  operands[3] = rtl_hooks.gen_lowpart (QImode, operands[2]);
  ix86_expand_clear (operands[2]);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCZmode), (operand1), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (CTZ, (SImode), (copy_rtx (operand1))))))))
                        );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand3))), (gen_rtx_fmt_ee (EQ, (QImode), (gen_rtx_REG (CCZmode, 17)), ((const_int_rtx[64])))))
             );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (NEG, (SImode), (copy_rtx (operand2))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (gen_rtx_fmt_ee (IOR, (SImode), (copy_rtx (operand0)), (copy_rtx (operand2))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (gen_rtx_fmt_ee (PLUS, (SImode), (copy_rtx (operand0)), ((const_int_rtx[64 +1]))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_ffsdi2 (rtx operand0,
 rtx operand1)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FFS, (DImode), (operand1)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
extern rtx gen_split_1385 (rtx, rtx *);
rtx
gen_split_1385 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), ((const_int_rtx[64 -1])))
             );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCZmode), (operand1), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (CTZ, (DImode), (copy_rtx (operand1))))))))
                        );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DImode), (gen_rtx_fmt_ee (EQ, (VOIDmode), (gen_rtx_REG (CCZmode, 17)), ((const_int_rtx[64])))), (copy_rtx (operand2)), (copy_rtx (operand0)))))
                      );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (gen_rtx_fmt_ee (PLUS, (DImode), (copy_rtx (operand0)), ((const_int_rtx[64 +1]))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_clzsi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (SImode), (const_int_rtx[64 + (31)]), (gen_rtx_fmt_e (CLZ, (SImode), (operand1)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (SImode), (operand0), (const_int_rtx[64 + (31)])))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_clzdi2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (DImode), (const_int_rtx[64 + (63)]), (gen_rtx_fmt_e (CLZ, (DImode), (operand1)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (DImode), (operand0), (const_int_rtx[64 + (63)])))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_tls_global_dynamic_32 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4 ;
  rtx operand5 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[6];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (flag_pic)
    operands[2] = pic_offset_table_rtx;
  else
    {
      operands[2] = gen_reg_rtx ((0 ? DImode : SImode));
      emit_insn (gen_set_got (operands[2]));
    }
  operands[3] = ix86_tls_get_addr ();
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SImode), (gen_rtvec (3, operand2, operand1, operand3)), (16)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_tls_global_dynamic_64 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = ix86_tls_get_addr ();
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_call_insn (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (CALL, (VOIDmode), (gen_rtx_MEM (QImode, operand2)), ((const_int_rtx[64]))))), gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, operand1)), (16)))))
      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_tls_local_dynamic_base_32 (rtx operand0)
{
  rtx operand1;
  rtx operand2;
  rtx operand3 ;
  rtx operand4 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[5];
    operands[0] = operand0;
{
  if (flag_pic)
    operands[1] = pic_offset_table_rtx;
  else
    {
      operands[1] = gen_reg_rtx ((0 ? DImode : SImode));
      emit_insn (gen_set_got (operands[1]));
    }
  operands[2] = ix86_tls_get_addr ();
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SImode), (gen_rtvec (2, operand1, operand2)), (17)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_tls_local_dynamic_base_64 (rtx operand0)
{
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
{
  operands[1] = ix86_tls_get_addr ();
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_call_insn (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (CALL, (VOIDmode), (gen_rtx_MEM (QImode, operand1)), ((const_int_rtx[64]))))), gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (1, (const_int_rtx[64]))), (17)))))
      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1392 (rtx, rtx *);
rtx
gen_split_1392 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SImode), (gen_rtvec (3, operand1, operand3, operand2)), (16)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand4)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand5)), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1393 (rtx, rtx *);
rtx
gen_split_1393 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  operands[4] = ix86_force_to_memory (((enum machine_mode) (operands[1])->mode), operands[1]);
  operands[4] = gen_rtx_fmt_e (FLOAT, (((enum machine_mode) (operands[0])->mode)), (operands[4]));
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (gen_rtx_fmt_ee (((enum rtx_code) (operands[3])->code), ((enum machine_mode) (operands[3])->mode), operands[4], operands[2])))
                    );
  ix86_free_from_memory (((enum machine_mode) (operands[1])->mode));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1394 (rtx, rtx *);
rtx
gen_split_1394 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
  operands[4] = ix86_force_to_memory (((enum machine_mode) (operands[2])->mode), operands[2]);
  operands[4] = gen_rtx_fmt_e (FLOAT, (((enum machine_mode) (operands[0])->mode)), (operands[4]));
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (gen_rtx_fmt_ee (((enum rtx_code) (operands[3])->code), ((enum machine_mode) (operands[3])->mode), operands[1], operands[4])))
                    );
  ix86_free_from_memory (((enum machine_mode) (operands[2])->mode));
  return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sqrtsf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (!((ix86_fpmath & FPMATH_SSE) != 0))
    operands[1] = force_reg (SFmode, operands[1]);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SQRT, (SFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sqrtdf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (!((target_flags & 0x00008000) != 0) || !((ix86_fpmath & FPMATH_SSE) != 0))
    operands[1] = force_reg (DFmode, operands[1]);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (SQRT, (DFmode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_fmodsf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  rtx label = gen_label_rtx ();
  rtx op1 = gen_reg_rtx (XFmode);
  rtx op2 = gen_reg_rtx (XFmode);
  emit_insn(gen_extendsfxf2 (op1, operands[1]));
  emit_insn(gen_extendsfxf2 (op2, operands[2]));
  emit_label (label);
  emit_insn (gen_fpremxf4 (op1, op2, op1, op2));
  ix86_emit_fp_unordered_jump (label);
  emit_insn (gen_truncxfsf2_noop (operands[0], op1));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_fmoddf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  rtx label = gen_label_rtx ();
  rtx op1 = gen_reg_rtx (XFmode);
  rtx op2 = gen_reg_rtx (XFmode);
  emit_insn (gen_extenddfxf2 (op1, operands[1]));
  emit_insn (gen_extenddfxf2 (op2, operands[2]));
  emit_label (label);
  emit_insn (gen_fpremxf4 (op1, op2, op1, op2));
  ix86_emit_fp_unordered_jump (label);
  emit_insn (gen_truncxfdf2_noop (operands[0], op1));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_fmodxf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  rtx label = gen_label_rtx ();
  emit_label (label);
  emit_insn (gen_fpremxf4 (operands[1], operands[2],
      operands[1], operands[2]));
  ix86_emit_fp_unordered_jump (label);
  emit_move_insn (operands[0], operands[1]);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_dremsf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  rtx label = gen_label_rtx ();
  rtx op1 = gen_reg_rtx (XFmode);
  rtx op2 = gen_reg_rtx (XFmode);
  emit_insn(gen_extendsfxf2 (op1, operands[1]));
  emit_insn(gen_extendsfxf2 (op2, operands[2]));
  emit_label (label);
  emit_insn (gen_fprem1xf4 (op1, op2, op1, op2));
  ix86_emit_fp_unordered_jump (label);
  emit_insn (gen_truncxfsf2_noop (operands[0], op1));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_dremdf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  rtx label = gen_label_rtx ();
  rtx op1 = gen_reg_rtx (XFmode);
  rtx op2 = gen_reg_rtx (XFmode);
  emit_insn (gen_extenddfxf2 (op1, operands[1]));
  emit_insn (gen_extenddfxf2 (op2, operands[2]));
  emit_label (label);
  emit_insn (gen_fprem1xf4 (op1, op2, op1, op2));
  ix86_emit_fp_unordered_jump (label);
  emit_insn (gen_truncxfdf2_noop (operands[0], op1));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_dremxf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  rtx label = gen_label_rtx ();
  emit_label (label);
  emit_insn (gen_fprem1xf4 (operands[1], operands[2],
       operands[1], operands[2]));
  ix86_emit_fp_unordered_jump (label);
  emit_move_insn (operands[0], operands[1]);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1403 (rtx, rtx *);
rtx
gen_split_1403 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_Ei (UNSPEC, (DFmode), (gen_rtvec (1, operand2)), (21))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1404 (rtx, rtx *);
rtx
gen_split_1404 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DFmode), (gen_rtvec (1, operand2)), (22))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1405 (rtx, rtx *);
rtx
gen_split_1405 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_Ei (UNSPEC, (SFmode), (gen_rtvec (1, operand2)), (21))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1406 (rtx, rtx *);
rtx
gen_split_1406 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SFmode), (gen_rtvec (1, operand2)), (22))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1407 (rtx, rtx *);
rtx
gen_split_1407 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_Ei (UNSPEC, (DFmode), (gen_rtvec (1, gen_rtx_fmt_e (FLOAT_EXTEND, (DFmode), (operand2)))), (21))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1408 (rtx, rtx *);
rtx
gen_split_1408 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DFmode), (gen_rtvec (1, gen_rtx_fmt_e (FLOAT_EXTEND, (DFmode), (operand2)))), (22))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1409 (rtx, rtx *);
rtx
gen_split_1409 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand2)), (21))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1410 (rtx, rtx *);
rtx
gen_split_1410 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand2)), (22))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1411 (rtx, rtx *);
rtx
gen_peephole2_1411 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DFmode), (gen_rtvec (1, operand2)), (82)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_Ei (UNSPEC, (DFmode), (gen_rtvec (1, copy_rtx (operand2))), (83)))))))
       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_tandf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = gen_reg_rtx (DFmode);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_Ei (UNSPEC, (DFmode), (gen_rtvec (1, operand1)), (82)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DFmode), (gen_rtvec (1, operand1)), (83)))))))
       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1413 (rtx, rtx *);
rtx
gen_peephole2_1413 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SFmode), (gen_rtvec (1, operand2)), (82)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_Ei (UNSPEC, (SFmode), (gen_rtvec (1, copy_rtx (operand2))), (83)))))))
       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_tansf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = gen_reg_rtx (SFmode);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_Ei (UNSPEC, (SFmode), (gen_rtvec (1, operand1)), (82)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SFmode), (gen_rtvec (1, operand1)), (83)))))))
       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1415 (rtx, rtx *);
rtx
gen_peephole2_1415 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand2)), (82)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, copy_rtx (operand2))), (83)))))))
       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_tanxf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = gen_reg_rtx (XFmode);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand1)), (82)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand1)), (83)))))))
       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_atan2df3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  rtx copy = gen_reg_rtx (DFmode);
  emit_move_insn (copy, operands[1]);
  emit_insn (gen_atan2df3_1 (operands[0], copy, operands[2]));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_atandf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = gen_reg_rtx (DFmode);
  emit_move_insn (operands[2], (const_tiny_rtx[1][(int) (DFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DFmode), (gen_rtvec (2, operand2, operand1)), (65)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DFmode)))))))
                            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_atan2sf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  rtx copy = gen_reg_rtx (SFmode);
  emit_move_insn (copy, operands[1]);
  emit_insn (gen_atan2sf3_1 (operands[0], copy, operands[2]));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_atansf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = gen_reg_rtx (SFmode);
  emit_move_insn (operands[2], (const_tiny_rtx[1][(int) (SFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SFmode), (gen_rtvec (2, operand2, operand1)), (65)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SFmode)))))))
                            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_atan2xf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  rtx copy = gen_reg_rtx (XFmode);
  emit_move_insn (copy, operands[1]);
  emit_insn (gen_atan2xf3_1 (operands[0], copy, operands[2]));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_atanxf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[2], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand1)), (65)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_asindf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[9];
    operands[0] = operand0;
    operands[1] = operand1;
{
  int i;
  for (i=2; i<8; i++)
    operands[i] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[4], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (MULT, (XFmode), (operand2), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand4), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_e (SQRT, (XFmode), (operand5))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand6, operand2)), (65)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand7))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_asinsf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[9];
    operands[0] = operand0;
    operands[1] = operand1;
{
  int i;
  for (i=2; i<8; i++)
    operands[i] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[4], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (MULT, (XFmode), (operand2), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand4), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_e (SQRT, (XFmode), (operand5))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand6, operand2)), (65)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand7))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_asinxf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[7];
    operands[0] = operand0;
    operands[1] = operand1;
{
  int i;
  for (i=2; i<6; i++)
    operands[i] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[3], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_ee (MULT, (XFmode), (operand1), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand3), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_e (SQRT, (XFmode), (operand4))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand5, operand1)), (65)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_acosdf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[9];
    operands[0] = operand0;
    operands[1] = operand1;
{
  int i;
  for (i=2; i<8; i++)
    operands[i] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[4], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (MULT, (XFmode), (operand2), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand4), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_e (SQRT, (XFmode), (operand5))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand6)), (65)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand7))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_acossf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[9];
    operands[0] = operand0;
    operands[1] = operand1;
{
  int i;
  for (i=2; i<8; i++)
    operands[i] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[4], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (MULT, (XFmode), (operand2), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand4), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_e (SQRT, (XFmode), (operand5))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand6)), (65)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand7))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_acosxf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[7];
    operands[0] = operand0;
    operands[1] = operand1;
{
  int i;
  for (i=2; i<6; i++)
    operands[i] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[3], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_ee (MULT, (XFmode), (operand1), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand3), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_e (SQRT, (XFmode), (operand4))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand1, operand5)), (65)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_logsf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[6];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  operands[2] = gen_reg_rtx (XFmode);
  operands[3] = gen_reg_rtx (XFmode);
  operands[4] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (4);
  emit_move_insn (operands[3], temp);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand3)), (66)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand4))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_logdf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[6];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  operands[2] = gen_reg_rtx (XFmode);
  operands[3] = gen_reg_rtx (XFmode);
  operands[4] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (4);
  emit_move_insn (operands[3], temp);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand3)), (66)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand4))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_logxf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  operands[2] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (4);
  emit_move_insn (operands[2], temp);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand1, operand2)), (66)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_log10sf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[6];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  operands[2] = gen_reg_rtx (XFmode);
  operands[3] = gen_reg_rtx (XFmode);
  operands[4] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (3);
  emit_move_insn (operands[3], temp);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand3)), (66)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand4))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_log10df2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[6];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  operands[2] = gen_reg_rtx (XFmode);
  operands[3] = gen_reg_rtx (XFmode);
  operands[4] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (3);
  emit_move_insn (operands[3], temp);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand3)), (66)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand4))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_log10xf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  operands[2] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (3);
  emit_move_insn (operands[2], temp);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand1, operand2)), (66)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_log2sf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[6];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = gen_reg_rtx (XFmode);
  operands[3] = gen_reg_rtx (XFmode);
  operands[4] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[3], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand3)), (66)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand4))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_log2df2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[6];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = gen_reg_rtx (XFmode);
  operands[3] = gen_reg_rtx (XFmode);
  operands[4] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[3], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand2, operand3)), (66)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand4))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_log2xf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3 ;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[2], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand1, operand2)), (66)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode)))))))
                            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_log1psf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx op0 = gen_reg_rtx (XFmode);
  rtx op1 = gen_reg_rtx (XFmode);
  emit_insn (gen_extendsfxf2 (op1, operands[1]));
  ix86_emit_i387_log1p (op0, op1);
  emit_insn (gen_truncxfsf2_noop (operands[0], op0));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_log1pdf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx op0 = gen_reg_rtx (XFmode);
  rtx op1 = gen_reg_rtx (XFmode);
  emit_insn (gen_extenddfxf2 (op1, operands[1]));
  ix86_emit_i387_log1p (op0, op1);
  emit_insn (gen_truncxfdf2_noop (operands[0], op0));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_log1pxf2 (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_emit_i387_log1p (operands[0], operands[1]);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_logbsf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[5];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = gen_reg_rtx (XFmode);
  operands[3] = gen_reg_rtx (XFmode);
  operands[4] = gen_reg_rtx (XFmode);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand2)), (84)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand2)), (85)))))))
       );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand4))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_logbdf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[5];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = gen_reg_rtx (XFmode);
  operands[3] = gen_reg_rtx (XFmode);
  operands[4] = gen_reg_rtx (XFmode);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand2)), (84)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand2)), (85)))))))
       );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand4))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_logbxf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
{
  operands[2] = gen_reg_rtx (XFmode);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand1)), (84)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand1)), (85)))))))
       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_ilogbsi2 (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
{
  operands[2] = gen_reg_rtx (XFmode);
  operands[3] = gen_reg_rtx (XFmode);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand1)), (84)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand1)), (85)))))))
       );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FIX, (SImode), (operand3)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_expsf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx operand9;
  rtx operand10;
  rtx operand11;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[12];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  int i;
  for (i=2; i<12; i++)
    operands[i] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (5);
  emit_move_insn (operands[3], temp);
  emit_move_insn (operands[8], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
    operand9 = operands[9];
    operand10 = operands[10];
    operand11 = operands[11];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (MULT, (XFmode), (operand2), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand4)), (68))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand4), (operand5))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand6)), (69))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand9), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand7), (operand8))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand10), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand9, operand5)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand11), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand9, operand5)), (87)))))))
       );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand10))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_expdf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx operand9;
  rtx operand10;
  rtx operand11;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[12];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  int i;
  for (i=2; i<12; i++)
    operands[i] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (5);
  emit_move_insn (operands[3], temp);
  emit_move_insn (operands[8], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
    operand9 = operands[9];
    operand10 = operands[10];
    operand11 = operands[11];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (MULT, (XFmode), (operand2), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand4)), (68))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand4), (operand5))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand6)), (69))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand9), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand7), (operand8))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand10), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand9, operand5)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand11), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand9, operand5)), (87)))))))
       );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand10))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_expxf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx operand9;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[10];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  int i;
  for (i=2; i<10; i++)
    operands[i] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (5);
  emit_move_insn (operands[2], temp);
  emit_move_insn (operands[7], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
    operand9 = operands[9];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (MULT, (XFmode), (operand1), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand3)), (68))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand3), (operand4))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand5)), (69))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand8), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand6), (operand7))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand8, operand4)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand9), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand8, operand4)), (87)))))))
       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_exp10sf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx operand9;
  rtx operand10;
  rtx operand11;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[12];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  int i;
  for (i=2; i<12; i++)
    operands[i] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (6);
  emit_move_insn (operands[3], temp);
  emit_move_insn (operands[8], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
    operand9 = operands[9];
    operand10 = operands[10];
    operand11 = operands[11];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (MULT, (XFmode), (operand2), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand4)), (68))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand4), (operand5))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand6)), (69))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand9), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand7), (operand8))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand10), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand9, operand5)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand11), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand9, operand5)), (87)))))))
       );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand10))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_exp10df2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx operand9;
  rtx operand10;
  rtx operand11;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[12];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  int i;
  for (i=2; i<12; i++)
    operands[i] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (6);
  emit_move_insn (operands[3], temp);
  emit_move_insn (operands[8], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
    operand9 = operands[9];
    operand10 = operands[10];
    operand11 = operands[11];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (MULT, (XFmode), (operand2), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand4)), (68))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand4), (operand5))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand6)), (69))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand9), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand7), (operand8))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand10), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand9, operand5)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand11), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand9, operand5)), (87)))))))
       );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand10))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_exp10xf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx operand9;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[10];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  int i;
  for (i=2; i<10; i++)
    operands[i] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (6);
  emit_move_insn (operands[2], temp);
  emit_move_insn (operands[7], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
    operand9 = operands[9];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (MULT, (XFmode), (operand1), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand3)), (68))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand3), (operand4))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand5)), (69))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand8), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand6), (operand7))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand8, operand4)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand9), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand8, operand4)), (87)))))))
       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_exp2sf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx operand9;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[10];
    operands[0] = operand0;
    operands[1] = operand1;
{
  int i;
  for (i=2; i<10; i++)
    operands[i] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[6], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
    operand9 = operands[9];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand2)), (68))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand2), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand4)), (69))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand5), (operand6))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand8), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand7, operand3)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand9), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand7, operand3)), (87)))))))
       );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand8))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_exp2df2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx operand9;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[10];
    operands[0] = operand0;
    operands[1] = operand1;
{
  int i;
  for (i=2; i<10; i++)
    operands[i] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[6], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
    operand9 = operands[9];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand2)), (68))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand2), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand4)), (69))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand5), (operand6))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand8), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand7, operand3)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand9), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand7, operand3)), (87)))))))
       );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand8))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_exp2xf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[9];
    operands[0] = operand0;
    operands[1] = operand1;
{
  int i;
  for (i=2; i<9; i++)
    operands[i] = gen_reg_rtx (XFmode);
  emit_move_insn (operands[6], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand2)), (68))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand2), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand4)), (69))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand5), (operand6))))
           );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand7, operand3)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand8), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand7, operand3)), (87)))))))
       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_expm1df2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx operand9;
  rtx operand10;
  rtx operand11;
  rtx operand12;
  rtx operand13;
  rtx operand14;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[15];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  int i;
  for (i=2; i<15; i++)
    operands[i] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (5);
  emit_move_insn (operands[3], temp);
  emit_move_insn (operands[10], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
    operand9 = operands[9];
    operand10 = operands[10];
    operand11 = operands[11];
    operand12 = operands[12];
    operand13 = operands[13];
    operand14 = operands[14];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (MULT, (XFmode), (operand2), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand4)), (68))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand4), (operand5))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand6)), (69))))
     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand8), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand7, operand5)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand9), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand7, operand5)), (87)))))))
       );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand11), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand10, operand9)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand12), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand10, operand9)), (87)))))))
       );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand13), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand11), (operand10))))
            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand14), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand13), (operand8))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (DFmode), (operand14))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_expm1sf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx operand9;
  rtx operand10;
  rtx operand11;
  rtx operand12;
  rtx operand13;
  rtx operand14;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[15];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  int i;
  for (i=2; i<15; i++)
    operands[i] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (5);
  emit_move_insn (operands[3], temp);
  emit_move_insn (operands[10], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
    operand9 = operands[9];
    operand10 = operands[10];
    operand11 = operands[11];
    operand12 = operands[12];
    operand13 = operands[13];
    operand14 = operands[14];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_e (FLOAT_EXTEND, (XFmode), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (MULT, (XFmode), (operand2), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand4)), (68))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand4), (operand5))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand6)), (69))))
     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand8), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand7, operand5)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand9), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand7, operand5)), (87)))))))
       );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand11), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand10, operand9)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand12), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand10, operand9)), (87)))))))
       );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand13), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand11), (operand10))))
            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand14), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand13), (operand8))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (FLOAT_TRUNCATE, (SFmode), (operand14))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_expm1xf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx operand9;
  rtx operand10;
  rtx operand11;
  rtx operand12;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[13];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx temp;
  int i;
  for (i=2; i<13; i++)
    operands[i] = gen_reg_rtx (XFmode);
  temp = standard_80387_constant_rtx (5);
  emit_move_insn (operands[2], temp);
  emit_move_insn (operands[9], (const_tiny_rtx[1][(int) (XFmode)]));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
    operand7 = operands[7];
    operand8 = operands[8];
    operand9 = operands[9];
    operand10 = operands[10];
    operand11 = operands[11];
    operand12 = operands[12];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_ee (MULT, (XFmode), (operand1), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand3)), (68))))
     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand5), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand3), (operand4))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand6), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (1, operand5)), (69))))
     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand7), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand6, operand4)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand8), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand6, operand4)), (87)))))))
       );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand10), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand9, operand8)), (86)))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand11), (gen_rtx_fmt_Ei (UNSPEC, (XFmode), (gen_rtvec (2, operand9, operand8)), (87)))))))
       );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand12), (gen_rtx_fmt_ee (MINUS, (XFmode), (operand10), (operand9))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (XFmode), (operand12), (operand7))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movstrsi (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
{
 if (ix86_expand_movstr (operands[0], operands[1], operands[2], operands[3]))
   return (_val = get_insns (), end_sequence (), _val);
 else
   return (end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand3))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movstrdi (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
{
 if (ix86_expand_movstr (operands[0], operands[1], operands[2], operands[3]))
   return (_val = get_insns (), end_sequence (), _val);
 else
   return (end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand3))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_strmov (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[7];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
{
  rtx adjust = gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (operands[1])->mode)])));
  operands[5] = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (operands[0]), (adjust));
  operands[6] = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (operands[2]), (adjust));
  if ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)
    {
      emit_insn (gen_strmov_singleop (operands[0], operands[1],
          operands[2], operands[3],
          operands[5], operands[6]));
      return (_val = get_insns (), end_sequence (), _val);
    }
  operands[4] = gen_reg_rtx (((enum machine_mode) (operands[1])->mode));
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
    operand5 = operands[5];
    operand6 = operands[6];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (operand3))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (operand4))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand5)), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand6)), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_strmov_singleop (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3,
 rtx operand4,
 rtx operand5)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (operand3)), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand4)), gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand5)), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_REG (SImode, 19))))))
       ;
}
rtx
gen_rep_mov (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3,
 rtx operand4,
 rtx operand5,
 rtx operand6)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (6, gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), ((const_int_rtx[64]))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand5)), gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand6)), gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (operand3)), gen_rtx_fmt_e (USE, (VOIDmode), (operand4)), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_REG (SImode, 19))))))
       ;
}
rtx
gen_clrstrsi (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
 if (ix86_expand_clrstr (operands[0], operands[1], operands[2]))
   return (_val = get_insns (), end_sequence (), _val);
 else
   return (end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_clrstrdi (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
 if (ix86_expand_clrstr (operands[0], operands[1], operands[2]))
   return (_val = get_insns (), end_sequence (), _val);
 else
   return (end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand1))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_strset (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  if (((enum machine_mode) (operands[1])->mode) != ((enum machine_mode) (operands[2])->mode))
    operands[1] = adjust_address_1 (operands[1], ((enum machine_mode) (operands[2])->mode), 0, 0, 1);
  operands[3] = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (operands[0]), (gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (operands[2])->mode)])))))
                            ;
  if ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)
    {
      emit_insn (gen_strset_singleop (operands[0], operands[1], operands[2],
          operands[3]));
      return (_val = get_insns (), end_sequence (), _val);
    }
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (operand2))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand3)), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_strset_singleop (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (operand2)), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand3)), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_REG (SImode, 19))))))
       ;
}
rtx
gen_rep_stos (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3,
 rtx operand4)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (6, gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), ((const_int_rtx[64]))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand4)), gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), ((const_int_rtx[64]))), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)), gen_rtx_fmt_e (USE, (VOIDmode), (operand1)), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_REG (SImode, 19))))))
       ;
}
rtx
gen_cmpstrsi (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3,
 rtx operand4)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[5];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
    operands[4] = operand4;
{
  rtx addr1, addr2, out, outlow, count, countreg, align;
  if (global_regs[4] || global_regs[5])
    return (end_sequence (), _val);
  out = operands[0];
  if (((enum rtx_code) (out)->code) != REG)
    out = gen_reg_rtx (SImode);
  addr1 = copy_to_mode_reg ((0 ? DImode : SImode), (((operands[1])->u.fld[0]).rtx1));
  addr2 = copy_to_mode_reg ((0 ? DImode : SImode), (((operands[2])->u.fld[0]).rtx1));
  if (addr1 != (((operands[1])->u.fld[0]).rtx1))
    operands[1] = replace_equiv_address_nv (operands[1], addr1);
  if (addr2 != (((operands[2])->u.fld[0]).rtx1))
    operands[2] = replace_equiv_address_nv (operands[2], addr2);
  count = operands[3];
  countreg = ix86_zero_extend_to_Pmode (count);
  align = operands[4];
  emit_insn (gen_cld ());
  if (((enum rtx_code) (count)->code) == CONST_INT)
    {
      if (((count)->u.hwint[0]) == 0)
 {
   emit_move_insn (operands[0], (const_int_rtx[64]));
   return (_val = get_insns (), end_sequence (), _val);
 }
      emit_insn (gen_cmpstrqi_nz_1 (addr1, addr2, countreg, align,
        operands[1], operands[2]));
    }
  else
    {
      if (0)
 emit_insn (gen_cmpdi_1_rex64 (countreg, countreg));
      else
 emit_insn (gen_cmpsi_1 (countreg, countreg));
      emit_insn (gen_cmpstrqi_1 (addr1, addr2, countreg, align,
     operands[1], operands[2]));
    }
  outlow = rtl_hooks.gen_lowpart (QImode, out);
  emit_insn (gen_cmpintqi (outlow));
  emit_move_insn (out, gen_rtx_fmt_e (SIGN_EXTEND, (SImode), (outlow)));
  if (operands[0] != out)
    emit_move_insn (operands[0], out);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
    operand4 = operands[4];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (COMPARE, (SImode), (operand1), (operand2))))
           );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand3))
          );
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (operand4))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_cmpintqi (rtx operand0)
{
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
operands[1] = gen_reg_rtx (QImode);
   operands[2] = gen_reg_rtx (QImode);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_fmt_ee (GTU, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_ee (LTU, (QImode), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])))))
             );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (QImode), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_cmpstrqi_nz_1 (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3,
 rtx operand4,
 rtx operand5)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (7, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (operand4), (operand5)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_REG (SImode, 19))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand1)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand2)))))
            ;
}
rtx
gen_cmpstrqi_1 (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3,
 rtx operand4,
 rtx operand5)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (7, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_eee (IF_THEN_ELSE, (CCmode), (gen_rtx_fmt_ee (NE, (VOIDmode), (operand2), ((const_int_rtx[64])))), (gen_rtx_fmt_ee (COMPARE, (CCmode), (operand4), (operand5))), ((const_int_rtx[64]))))), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_REG (CCmode, 17))), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_REG (SImode, 19))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand1)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand2)))))
            ;
}
rtx
gen_strlensi (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
{
 if (ix86_expand_strlen (operands[0], operands[1], operands[2], operands[3]))
   return (_val = get_insns (), end_sequence (), _val);
 else
   return (end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (SImode), (gen_rtvec (3, operand1, operand2, operand3)), (20))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_strlendi (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
{
 if (ix86_expand_strlen (operands[0], operands[1], operands[2], operands[3]))
   return (_val = get_insns (), end_sequence (), _val);
 else
   return (end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (DImode), (gen_rtvec (3, operand1, operand2, operand3)), (20))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_strlenqi_1 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_REG (SImode, 19))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand1)), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
extern rtx gen_peephole2_1474 (rtx, rtx *);
rtx
gen_peephole2_1474 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  operand6 = operands[6];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (7, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCmode), (gen_rtx_MEM (BLKmode, operand4)), (gen_rtx_MEM (BLKmode, operand5))))), gen_rtx_fmt_e (USE, (VOIDmode), (operand6)), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_REG (SImode, 19))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand1)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand2)))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1475 (rtx, rtx *);
rtx
gen_peephole2_1475 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  operand6 = operands[6];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (7, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCmode, 17)), (gen_rtx_fmt_eee (IF_THEN_ELSE, (CCmode), (gen_rtx_fmt_ee (NE, (VOIDmode), (operand6), ((const_int_rtx[64])))), (gen_rtx_fmt_ee (COMPARE, (CCmode), (gen_rtx_MEM (BLKmode, operand4)), (gen_rtx_MEM (BLKmode, operand5)))), ((const_int_rtx[64]))))), gen_rtx_fmt_e (USE, (VOIDmode), (operand3)), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_REG (CCmode, 17))), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_REG (SImode, 19))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand1)), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand2)))))
            );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movdicc (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
if (!ix86_expand_int_movcc (operands)) return (end_sequence (), _val); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DImode), (operand1), (operand2), (operand3))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movsicc (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
if (!ix86_expand_int_movcc (operands)) return (end_sequence (), _val); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SImode), (operand1), (operand2), (operand3))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movhicc (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
if (!ix86_expand_int_movcc (operands)) return (end_sequence (), _val); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (HImode), (operand1), (operand2), (operand3))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movqicc (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
if (!ix86_expand_int_movcc (operands)) return (end_sequence (), _val); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (QImode), (operand1), (operand2), (operand3))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1480 (rtx, rtx *);
rtx
gen_split_1480 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
   operands[2] = rtl_hooks.gen_lowpart (SImode, operands[2]);
   operands[3] = rtl_hooks.gen_lowpart (SImode, operands[3]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SImode), (gen_rtx_fmt_ee (((enum rtx_code) (operand1)->code), ((enum machine_mode) (operand1)->mode), operand4, (const_int_rtx[64]))), (operand2), (operand3))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movsfcc (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
if (! ix86_expand_fp_movcc (operands)) return (end_sequence (), _val); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SFmode), (operand1), (operand2), (operand3))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movdfcc (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
if (! ix86_expand_fp_movcc (operands)) return (end_sequence (), _val); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DFmode), (operand1), (operand2), (operand3))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1483 (rtx, rtx *);
rtx
gen_split_1483 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx _val = 0;
  start_sequence ();
split_di (operands+2, 1, operands+5, operands+6);
   split_di (operands+3, 1, operands+7, operands+8);
   split_di (operands, 1, operands+2, operands+3);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  operand6 = operands[6];
  operand7 = operands[7];
  operand8 = operands[8];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SImode), (gen_rtx_fmt_ee (((enum rtx_code) (operand1)->code), ((enum machine_mode) (operand1)->mode), operand4, (const_int_rtx[64]))), (operand5), (operand7))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SImode), (gen_rtx_fmt_ee (((enum rtx_code) (operand1)->code), ((enum machine_mode) (operand1)->mode), copy_rtx (operand4), (const_int_rtx[64]))), (operand6), (operand8))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movxfcc (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
if (! ix86_expand_fp_movcc (operands)) return (end_sequence (), _val); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (XFmode), (operand1), (operand2), (operand3))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_minsf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SFmode), (gen_rtx_fmt_ee (LT, (VOIDmode), (operand1), (operand2))), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
extern rtx gen_split_1486 (rtx, rtx *);
rtx
gen_split_1486 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SFmode), (gen_rtx_fmt_ee (LT, (VOIDmode), (operand1), (operand2))), (copy_rtx (operand1)), (copy_rtx (operand2)))))
                      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_addqicc (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
if (!ix86_expand_int_addcc (operands)) return (end_sequence (), _val); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit (operand0);
  emit (operand1);
  emit (operand2);
  emit (operand3);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_addhicc (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
if (!ix86_expand_int_addcc (operands)) return (end_sequence (), _val); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit (operand0);
  emit (operand1);
  emit (operand2);
  emit (operand3);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_addsicc (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
if (!ix86_expand_int_addcc (operands)) return (end_sequence (), _val); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit (operand0);
  emit (operand1);
  emit (operand2);
  emit (operand3);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_adddicc (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[4];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operands[3] = operand3;
if (!ix86_expand_int_addcc (operands)) return (end_sequence (), _val); return (_val = get_insns (), end_sequence (), _val);
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
    operand3 = operands[3];
  }
  emit (operand0);
  emit (operand1);
  emit (operand2);
  emit (operand3);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1491 (rtx, rtx *);
rtx
gen_split_1491 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCFPmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCFPmode), (operand2), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SFmode), (gen_rtx_fmt_ee (GE, (VOIDmode), (gen_rtx_REG (CCFPmode, 17)), ((const_int_rtx[64])))), (copy_rtx (operand1)), (copy_rtx (operand2)))))
                      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_mindf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DFmode), (gen_rtx_fmt_ee (LT, (VOIDmode), (operand1), (operand2))), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1493 (rtx, rtx *);
rtx
gen_split_1493 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DFmode), (gen_rtx_fmt_ee (LT, (VOIDmode), (operand1), (operand2))), (copy_rtx (operand1)), (copy_rtx (operand2)))))
                      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1494 (rtx, rtx *);
rtx
gen_split_1494 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCFPmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCFPmode), (operand2), (operand1))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DFmode), (gen_rtx_fmt_ee (GE, (VOIDmode), (gen_rtx_REG (CCFPmode, 17)), ((const_int_rtx[64])))), (copy_rtx (operand1)), (copy_rtx (operand2)))))
                      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_maxsf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SFmode), (gen_rtx_fmt_ee (GT, (VOIDmode), (operand1), (operand2))), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1496 (rtx, rtx *);
rtx
gen_split_1496 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SFmode), (gen_rtx_fmt_ee (GT, (VOIDmode), (operand1), (operand2))), (copy_rtx (operand1)), (copy_rtx (operand2)))))
                      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1497 (rtx, rtx *);
rtx
gen_split_1497 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCFPmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCFPmode), (operand1), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SFmode), (gen_rtx_fmt_ee (GT, (VOIDmode), (gen_rtx_REG (CCFPmode, 17)), ((const_int_rtx[64])))), (copy_rtx (operand1)), (copy_rtx (operand2)))))
                      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_maxdf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DFmode), (gen_rtx_fmt_ee (GT, (VOIDmode), (operand1), (operand2))), (operand1), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1499 (rtx, rtx *);
rtx
gen_split_1499 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DFmode), (gen_rtx_fmt_ee (GT, (VOIDmode), (operand1), (operand2))), (copy_rtx (operand1)), (copy_rtx (operand2)))))
                      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1500 (rtx, rtx *);
rtx
gen_split_1500 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCFPmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCFPmode), (operand1), (operand2))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (DFmode), (gen_rtx_fmt_ee (GT, (VOIDmode), (gen_rtx_REG (CCFPmode, 17)), ((const_int_rtx[64])))), (copy_rtx (operand1)), (copy_rtx (operand2)))))
                      );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1501 (rtx, rtx *);
rtx
gen_split_1501 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
{
   ix86_compare_op0 = operands[5];
   ix86_compare_op1 = operands[4];
   operands[1] = gen_rtx_fmt_ee (swap_condition (((enum rtx_code) (operands[1])->code)),
     VOIDmode, operands[5], operands[4]);
   ix86_expand_fp_movcc (operands);
   return (_val = get_insns (), end_sequence (), _val);
}
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1502 (rtx, rtx *);
rtx
gen_split_1502 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx _val = 0;
  start_sequence ();
{
  if (operands_match_p (operands[2], operands[3]))
    {
      emit_move_insn (operands[0], operands[2]);
      return (_val = get_insns (), end_sequence (), _val);
    }
  ((operands[1])->mode = (((enum machine_mode) (operands[0])->mode)));
  if (operands_match_p (operands[0], operands[4]))
    operands[6] = operands[4], operands[7] = operands[2];
  else
    operands[6] = operands[2], operands[7] = operands[4];
  operands[0] = simplify_gen_subreg (V4SFmode, operands[0], SFmode, 0);
  operands[2] = simplify_gen_subreg (V4SFmode, operands[2], SFmode, 0);
  operands[3] = simplify_gen_subreg (V4SFmode, operands[3], SFmode, 0);
  operands[8] = simplify_gen_subreg (V4SFmode, operands[4], SFmode, 0);
  operands[6] = simplify_gen_subreg (V4SFmode, operands[6], SFmode, 0);
  operands[7] = simplify_gen_subreg (V4SFmode, operands[7], SFmode, 0);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  operand6 = operands[6];
  operand7 = operands[7];
  operand8 = operands[8];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (((enum rtx_code) (operand1)->code), ((enum machine_mode) (operand1)->mode), copy_rtx (operand4), operand5)))
            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_ee (AND, (V4SFmode), (copy_rtx (operand2)), (operand8))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand8)), (gen_rtx_fmt_ee (AND, (V4SFmode), (gen_rtx_fmt_e (NOT, (V4SFmode), (copy_rtx (operand8)))), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (IOR, (V4SFmode), (operand6), (operand7))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1503 (rtx, rtx *);
rtx
gen_split_1503 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx _val = 0;
  start_sequence ();
{
  if (((enum machine_mode) (operands[2])->mode) == DFmode
      && (x86_sse_partial_regs & (1 << ix86_tune)) && !optimize_size)
    {
      rtx op = simplify_gen_subreg (V2DFmode, operands[2], DFmode, 0);
      emit_insn (gen_sse2_unpcklpd (op, op, op));
      op = simplify_gen_subreg (V2DFmode, operands[3], DFmode, 0);
      emit_insn (gen_sse2_unpcklpd (op, op, op));
    }
  if (operands_match_p (operands[2], operands[3]))
    {
      emit_move_insn (operands[0], operands[2]);
      return (_val = get_insns (), end_sequence (), _val);
    }
  ((operands[1])->mode = (((enum machine_mode) (operands[0])->mode)));
  if (operands_match_p (operands[0], operands[4]))
    operands[6] = operands[4], operands[7] = operands[2];
  else
    operands[6] = operands[2], operands[7] = operands[4];
  operands[0] = simplify_gen_subreg (V2DFmode, operands[0], DFmode, 0);
  operands[2] = simplify_gen_subreg (V2DFmode, operands[2], DFmode, 0);
  operands[3] = simplify_gen_subreg (V2DFmode, operands[3], DFmode, 0);
  operands[8] = simplify_gen_subreg (V2DFmode, operands[4], DFmode, 0);
  operands[6] = simplify_gen_subreg (V2DFmode, operands[6], DFmode, 0);
  operands[7] = simplify_gen_subreg (V2DFmode, operands[7], DFmode, 0);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  operand6 = operands[6];
  operand7 = operands[7];
  operand8 = operands[8];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand4), (gen_rtx_fmt_ee (((enum rtx_code) (operand1)->code), ((enum machine_mode) (operand1)->mode), copy_rtx (operand4), operand5)))
            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (gen_rtx_fmt_ee (AND, (V2DFmode), (copy_rtx (operand2)), (operand8))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand8)), (gen_rtx_fmt_ee (AND, (V2DFmode), (gen_rtx_fmt_e (NOT, (V2DFmode), (copy_rtx (operand8)))), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (IOR, (V2DFmode), (operand6), (operand7))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1504 (rtx, rtx *);
rtx
gen_split_1504 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx _val = 0;
  start_sequence ();
{
  ((operands[1])->mode = (((enum machine_mode) (operands[0])->mode)));
  if (!sse_comparison_operator (operands[1], VOIDmode)
      || !rtx_equal_p (operands[0], operands[4]))
    {
      rtx tmp = operands[5];
      operands[5] = operands[4];
      operands[4] = tmp;
      ((operands[1])->code = (swap_condition (((enum rtx_code) (operands[1])->code))));
    }
  if (!rtx_equal_p (operands[0], operands[4]))
    fancy_abort ("gcc.c", 232959, "?");
  operands[8] = simplify_gen_subreg (V4SFmode, operands[0], SFmode, 0);
  if (const0_operand (operands[2], ((enum machine_mode) (operands[2])->mode)))
    {
      operands[7] = operands[3];
      operands[6] = gen_rtx_fmt_e (NOT, (V4SFmode), (operands[8]));
    }
  else
    {
      operands[7] = operands[2];
      operands[6] = operands[8];
    }
  operands[7] = simplify_gen_subreg (V4SFmode, operands[7], SFmode, 0);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  operand6 = operands[6];
  operand7 = operands[7];
  operand8 = operands[8];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (((enum rtx_code) (operand1)->code), ((enum machine_mode) (operand1)->mode), copy_rtx (operand0), operand5)))
            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand8), (gen_rtx_fmt_ee (AND, (V4SFmode), (operand6), (operand7))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1505 (rtx, rtx *);
rtx
gen_split_1505 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx operand4;
  rtx operand5;
  rtx operand6;
  rtx operand7;
  rtx operand8;
  rtx _val = 0;
  start_sequence ();
{
  if ((x86_sse_partial_regs & (1 << ix86_tune)) && !optimize_size
      && ((enum machine_mode) (operands[2])->mode) == DFmode)
    {
      if ((((enum rtx_code) (operands[2])->code) == REG))
 {
   rtx op = simplify_gen_subreg (V2DFmode, operands[2], DFmode, 0);
   emit_insn (gen_sse2_unpcklpd (op, op, op));
 }
      if ((((enum rtx_code) (operands[3])->code) == REG))
 {
   rtx op = simplify_gen_subreg (V2DFmode, operands[3], DFmode, 0);
   emit_insn (gen_sse2_unpcklpd (op, op, op));
 }
    }
  ((operands[1])->mode = (((enum machine_mode) (operands[0])->mode)));
  if (!sse_comparison_operator (operands[1], VOIDmode)
      || !rtx_equal_p (operands[0], operands[4]))
    {
      rtx tmp = operands[5];
      operands[5] = operands[4];
      operands[4] = tmp;
      ((operands[1])->code = (swap_condition (((enum rtx_code) (operands[1])->code))));
    }
  if (!rtx_equal_p (operands[0], operands[4]))
    fancy_abort ("gcc.c", 233038, "?");
  operands[8] = simplify_gen_subreg (V2DFmode, operands[0], DFmode, 0);
  if (const0_operand (operands[2], ((enum machine_mode) (operands[2])->mode)))
    {
      operands[7] = operands[3];
      operands[6] = gen_rtx_fmt_e (NOT, (V2DFmode), (operands[8]));
    }
  else
    {
      operands[7] = operands[2];
      operands[6] = operands[8];
    }
  operands[7] = simplify_gen_subreg (V2DFmode, operands[7], DFmode, 0);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  operand4 = operands[4];
  operand5 = operands[5];
  operand6 = operands[6];
  operand7 = operands[7];
  operand8 = operands[8];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (((enum rtx_code) (operand1)->code), ((enum machine_mode) (operand1)->mode), copy_rtx (operand0), operand5)))
            );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand8), (gen_rtx_fmt_ee (AND, (V2DFmode), (operand6), (operand7))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_allocate_stack_worker (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
{
  if (reload_completed)
    {
      if (0)
 emit_insn (gen_allocate_stack_worker_rex64_postreload (operands[0]));
      else
 emit_insn (gen_allocate_stack_worker_postreload (operands[0]));
    }
  else
    {
      if (0)
 emit_insn (gen_allocate_stack_worker_rex64 (operands[0]));
      else
 emit_insn (gen_allocate_stack_worker_1 (operands[0]));
    }
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
  }
  emit (operand0);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_allocate_stack_worker_postreload (rtx operand0)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (SImode), (gen_rtvec (1, operand0)), (10)), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (MINUS, (SImode), (gen_rtx_REG (SImode, 7)), (operand0)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0)), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_allocate_stack_worker_rex64_postreload (rtx operand0)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (DImode), (gen_rtvec (1, operand0)), (10)), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (MINUS, (DImode), (gen_rtx_REG (DImode, 7)), (operand0)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0)), gen_hard_reg_clobber (CCmode, 17))))
                                     ;
}
rtx
gen_allocate_stack (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
    emit_insn (gen_allocate_stack_worker (copy_to_mode_reg (SImode,
           operands[1])));
  emit_move_insn (operands[0], (global_rtl[GR_VIRTUAL_STACK_DYNAMIC]));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MINUS, (SImode), (gen_rtx_REG (SImode, 7)), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (MINUS, (SImode), (gen_rtx_REG (SImode, 7)), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_builtin_setjmp_receiver (rtx operand0)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
    operands[0] = operand0;
{
  emit_insn (gen_set_got (pic_offset_table_rtx));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (operand0))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1511 (rtx, rtx *);
rtx
gen_split_1511 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
   operands[1] = rtl_hooks.gen_lowpart (SImode, operands[1]);
   if (((enum rtx_code) (operands[3])->code) != ASHIFT)
     operands[2] = rtl_hooks.gen_lowpart (SImode, operands[2]);
   ((operands[3])->mode = (SImode));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), ((enum machine_mode) (operand3)->mode), operand1, operand2))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1512 (rtx, rtx *);
rtx
gen_split_1512 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
operands[2]
     = gen_int_mode (((operands[2])->u.hwint[0])
       & mode_mask_array[((enum machine_mode) (operands[0])->mode)],
       SImode);
   operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
   operands[1] = rtl_hooks.gen_lowpart (SImode, operands[1]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (AND, (SImode), (operand1), (operand2))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (SImode), (copy_rtx (operand1)), (copy_rtx (operand2))))))))
                        );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1513 (rtx, rtx *);
rtx
gen_split_1513 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
operands[1]
     = gen_int_mode (((operands[1])->u.hwint[0])
       & mode_mask_array[((enum machine_mode) (operands[0])->mode)],
       SImode);
   operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (AND, (SImode), (operand0), (operand1))), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1514 (rtx, rtx *);
rtx
gen_split_1514 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
   operands[1] = rtl_hooks.gen_lowpart (SImode, operands[1]);
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NEG, (SImode), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1515 (rtx, rtx *);
rtx
gen_split_1515 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
   operands[1] = rtl_hooks.gen_lowpart (SImode, operands[1]);
  operand0 = operands[0];
  operand1 = operands[1];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (NOT, (SImode), (operand1))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1516 (rtx, rtx *);
rtx
gen_split_1516 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (SImode, operands[0]);
   operands[2] = rtl_hooks.gen_lowpart (SImode, operands[2]);
   operands[3] = rtl_hooks.gen_lowpart (SImode, operands[3]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SImode), (operand1), (operand2), (operand3))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1517 (rtx, rtx *);
rtx
gen_peephole2_1517 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (1, 1, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1518 (rtx, rtx *);
rtx
gen_peephole2_1518 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (1, 1, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1519 (rtx, rtx *);
rtx
gen_peephole2_1519 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (1, 1, "r", SFmode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1520 (rtx, rtx *);
rtx
gen_peephole2_1520 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (1, 1, "r", HImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1521 (rtx, rtx *);
rtx
gen_peephole2_1521 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (1, 1, "q", QImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1522 (rtx, rtx *);
rtx
gen_peephole2_1522 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[1] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), ((const_int_rtx[64]))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand1)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1523 (rtx, rtx *);
rtx
gen_peephole2_1523 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[1] = peep2_find_free_register (0, 0, "r", HImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
operands[2] = rtl_hooks.gen_lowpart (SImode, operands[1]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), ((const_int_rtx[64]))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1524 (rtx, rtx *);
rtx
gen_peephole2_1524 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[1] = peep2_find_free_register (0, 0, "q", QImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
operands[2] = rtl_hooks.gen_lowpart (SImode, operands[1]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), ((const_int_rtx[64]))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1525 (rtx, rtx *);
rtx
gen_peephole2_1525 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1526 (rtx, rtx *);
rtx
gen_peephole2_1526 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "r", HImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1527 (rtx, rtx *);
rtx
gen_peephole2_1527 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "q", QImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1528 (rtx, rtx *);
rtx
gen_peephole2_1528 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[3] = peep2_find_free_register (1, 1, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (operand0))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (copy_rtx (operand3)), ((const_int_rtx[64])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1529 (rtx, rtx *);
rtx
gen_peephole2_1529 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (SImode), (operand1), ((const_int_rtx[64 -1]))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1530 (rtx, rtx *);
rtx
gen_peephole2_1530 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (HImode), (operand1), ((const_int_rtx[64 -1]))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1531 (rtx, rtx *);
rtx
gen_peephole2_1531 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (QImode), (operand1), ((const_int_rtx[64 -1]))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1532 (rtx, rtx *);
rtx
gen_peephole2_1532 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (AND, (SImode), (operand0), (operand1))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (gen_rtx_fmt_ee (AND, (SImode), (copy_rtx (operand0)), (copy_rtx (operand1))))))))
                        );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1533 (rtx, rtx *);
rtx
gen_peephole2_1533 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (AND, (QImode), (operand0), (operand1))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (gen_rtx_fmt_ee (AND, (QImode), (copy_rtx (operand0)), (copy_rtx (operand1))))))))
                        );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1534 (rtx, rtx *);
rtx
gen_peephole2_1534 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCNOmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCNOmode), (gen_rtx_fmt_ee (AND, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (operand0), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (operand1))), ((const_int_rtx[64]))))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (copy_rtx (operand0)), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (gen_rtx_fmt_ee (AND, (SImode), (gen_rtx_fmt_eee (ZERO_EXTRACT, (SImode), (copy_rtx (operand0)), (const_int_rtx[64 + (8)]), (const_int_rtx[64 + (8)]))), (copy_rtx (operand1))))))))
                        );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1535 (rtx, rtx *);
rtx
gen_peephole2_1535 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), ((enum machine_mode) (operand3)->mode), copy_rtx (operand0), copy_rtx (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1536 (rtx, rtx *);
rtx
gen_peephole2_1536 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), ((enum machine_mode) (operand3)->mode), copy_rtx (operand2), copy_rtx (operand0)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1537 (rtx, rtx *);
rtx
gen_peephole2_1537 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand0))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand2)), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), ((enum machine_mode) (operand3)->mode), copy_rtx (operand2), operand1))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1538 (rtx, rtx *);
rtx
gen_peephole2_1538 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[2] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand0))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand2)), (gen_rtx_fmt_ee (((enum rtx_code) (operand3)->code), ((enum machine_mode) (operand3)->mode), operand1, copy_rtx (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (copy_rtx (operand2)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1539 (rtx, rtx *);
rtx
gen_peephole2_1539 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (((enum machine_mode) (operands[0])->mode) == DImode ? DImode : SImode,
         operands[0]);
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), ((const_int_rtx[64]))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1540 (rtx, rtx *);
rtx
gen_peephole2_1540 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (operand0))), ((const_int_rtx[64]))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1541 (rtx, rtx *);
rtx
gen_peephole2_1541 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
operands[0] = rtl_hooks.gen_lowpart (((enum machine_mode) (operands[0])->mode) == DImode ? DImode : SImode,
         operands[0]);
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), ((const_int_rtx[64 -1]))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1542 (rtx, rtx *);
rtx
gen_peephole2_1542 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (SImode), (copy_rtx (operand0)), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1543 (rtx, rtx *);
rtx
gen_peephole2_1543 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
operands[2] = rtl_hooks.gen_lowpart (SImode, operands[2]);
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (SImode), (copy_rtx (operand0)), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1544 (rtx, rtx *);
rtx
gen_peephole2_1544 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (PLUS, (DImode), (copy_rtx (operand0)), (operand1)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1545 (rtx, rtx *);
rtx
gen_peephole2_1545 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (exact_log2_wide ((unsigned long) (((operands[1])->u.hwint[0])))));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (SImode), (copy_rtx (operand0)), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1546 (rtx, rtx *);
rtx
gen_peephole2_1546 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (exact_log2_wide ((unsigned long) (((operands[1])->u.hwint[0])))));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (DImode), (copy_rtx (operand0)), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1547 (rtx, rtx *);
rtx
gen_peephole2_1547 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (exact_log2_wide ((unsigned long) (((operands[2])->u.hwint[0])))));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (ASHIFT, (SImode), (copy_rtx (operand0)), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1548 (rtx, rtx *);
rtx
gen_peephole2_1548 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (SImode, gen_rtx_fmt_e (PRE_DEC, (SImode), (gen_rtx_REG (SImode, 7))))), (copy_rtx (operand0))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1549 (rtx, rtx *);
rtx
gen_peephole2_1549 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (SImode, gen_rtx_fmt_e (PRE_DEC, (SImode), (gen_rtx_REG (SImode, 7))))), (copy_rtx (operand0)))
                     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (SImode, gen_rtx_fmt_e (PRE_DEC, (SImode), (gen_rtx_REG (SImode, 7))))), (copy_rtx (operand0))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1550 (rtx, rtx *);
rtx
gen_peephole2_1550 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (SImode, gen_rtx_fmt_e (PRE_DEC, (SImode), (gen_rtx_REG (SImode, 7))))), (copy_rtx (operand0)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1551 (rtx, rtx *);
rtx
gen_peephole2_1551 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (SImode, gen_rtx_fmt_e (PRE_DEC, (SImode), (gen_rtx_REG (SImode, 7))))), (copy_rtx (operand0)))
                     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (SImode, gen_rtx_fmt_e (PRE_DEC, (SImode), (gen_rtx_REG (SImode, 7))))), (copy_rtx (operand0)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1552 (rtx, rtx *);
rtx
gen_peephole2_1552 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (4)])))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1553 (rtx, rtx *);
rtx
gen_peephole2_1553 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  if ((operands[1] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (4)])))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (4)])))))))
                                             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1554 (rtx, rtx *);
rtx
gen_peephole2_1554 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (4)])))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (4)])))))))
                                             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1555 (rtx, rtx *);
rtx
gen_peephole2_1555 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (4)])))))))
                                             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1556 (rtx, rtx *);
rtx
gen_peephole2_1556 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  if ((operands[1] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (4)])))))))
                                             );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (4)])))))))
                                             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1557 (rtx, rtx *);
rtx
gen_peephole2_1557 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (4)])))))))
                                             );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (gen_rtx_MEM (SImode, gen_rtx_REG (SImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (const_int_rtx[64 + (4)])))))))
                                             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1558 (rtx, rtx *);
rtx
gen_peephole2_1558 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCGCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCGCmode), (operand0), (operand1)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (copy_rtx (operand0))))))
                       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1559 (rtx, rtx *);
rtx
gen_peephole2_1559 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCGCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCGCmode), (operand0), (operand1)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (copy_rtx (operand0))))))
                       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1560 (rtx, rtx *);
rtx
gen_peephole2_1560 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCGCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCGCmode), (operand0), (operand1)))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (copy_rtx (operand0))))))
                       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1561 (rtx, rtx *);
rtx
gen_peephole2_1561 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCGCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCGCmode), (operand0), (gen_rtx_CONST_INT (VOIDmode, (long) (128L)))))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (copy_rtx (operand0))))))
                       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1562 (rtx, rtx *);
rtx
gen_peephole2_1562 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (CCGCmode, 17)), (gen_rtx_fmt_ee (COMPARE, (CCGCmode), (operand0), (gen_rtx_CONST_INT (VOIDmode, (long) (128L)))))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (copy_rtx (operand0))))))
                       );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1563 (rtx, rtx *);
rtx
gen_peephole2_1563 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DImode, gen_rtx_fmt_e (PRE_DEC, (DImode), (gen_rtx_REG (DImode, 7))))), (copy_rtx (operand0))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1564 (rtx, rtx *);
rtx
gen_peephole2_1564 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DImode, gen_rtx_fmt_e (PRE_DEC, (DImode), (gen_rtx_REG (DImode, 7))))), (copy_rtx (operand0)))
                     );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DImode, gen_rtx_fmt_e (PRE_DEC, (DImode), (gen_rtx_REG (DImode, 7))))), (copy_rtx (operand0))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1565 (rtx, rtx *);
rtx
gen_peephole2_1565 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DImode, gen_rtx_fmt_e (PRE_DEC, (DImode), (gen_rtx_REG (DImode, 7))))), (copy_rtx (operand0)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1566 (rtx, rtx *);
rtx
gen_peephole2_1566 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand0))
          );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DImode, gen_rtx_fmt_e (PRE_DEC, (DImode), (gen_rtx_REG (DImode, 7))))), (copy_rtx (operand0)))
                     );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DImode, gen_rtx_fmt_e (PRE_DEC, (DImode), (gen_rtx_REG (DImode, 7))))), (copy_rtx (operand0)))
                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1567 (rtx, rtx *);
rtx
gen_peephole2_1567 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (DImode, gen_rtx_REG (DImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (8)])))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1568 (rtx, rtx *);
rtx
gen_peephole2_1568 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  if ((operands[1] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (DImode, gen_rtx_REG (DImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (8)])))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_MEM (DImode, gen_rtx_REG (DImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (8)])))))))
                                             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1569 (rtx, rtx *);
rtx
gen_peephole2_1569 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (3, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (DImode, gen_rtx_REG (DImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (8)])))), gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode))))))))
                               );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (gen_rtx_MEM (DImode, gen_rtx_REG (DImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (8)])))))))
                                             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1570 (rtx, rtx *);
rtx
gen_peephole2_1570 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (DImode, gen_rtx_REG (DImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (8)])))))))
                                             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1571 (rtx, rtx *);
rtx
gen_peephole2_1571 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  if ((operands[1] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (DImode, gen_rtx_REG (DImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (8)])))))))
                                             );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand1), (gen_rtx_MEM (DImode, gen_rtx_REG (DImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (8)])))))))
                                             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1572 (rtx, rtx *);
rtx
gen_peephole2_1572 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[0] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_MEM (DImode, gen_rtx_REG (DImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (8)])))))))
                                             );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operand0)), (gen_rtx_MEM (DImode, gen_rtx_REG (DImode, 7)))), gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (const_int_rtx[64 + (8)])))))))
                                             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1573 (rtx, rtx *);
rtx
gen_peephole2_1573 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[3] = peep2_find_free_register (0, 0, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (operand1))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (DImode), (copy_rtx (operand3)), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1574 (rtx, rtx *);
rtx
gen_peephole2_1574 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[3] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (operand1))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (SImode), (copy_rtx (operand3)), (operand2)))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1575 (rtx, rtx *);
rtx
gen_peephole2_1575 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[3] = peep2_find_free_register (0, 0, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (operand1))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_e (ZERO_EXTEND, (DImode), (gen_rtx_fmt_ee (MULT, (SImode), (copy_rtx (operand3)), (operand2)))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1576 (rtx, rtx *);
rtx
gen_peephole2_1576 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[3] = peep2_find_free_register (1, 1, "r", DImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
{
  if (!rtx_equal_p (operands[0], operands[1]))
    emit_move_insn (operands[0], operands[1]);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (operand2))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (DImode), (copy_rtx (operand0)), (copy_rtx (operand3))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1577 (rtx, rtx *);
rtx
gen_peephole2_1577 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[3] = peep2_find_free_register (1, 1, "r", SImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
{
  if (!rtx_equal_p (operands[0], operands[1]))
    emit_move_insn (operands[0], operands[1]);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (operand2))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (SImode), (copy_rtx (operand0)), (copy_rtx (operand3))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_peephole2_1578 (rtx, rtx *);
rtx
gen_peephole2_1578 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  HARD_REG_SET _regs_allocated;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (_regs_allocated); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if ((operands[3] = peep2_find_free_register (1, 1, "r", HImode, &_regs_allocated)) == (rtx) 0)
    return ((void *)0);
  start_sequence ();
{
  if (!rtx_equal_p (operands[0], operands[1]))
    emit_move_insn (operands[0], operands[1]);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand3), (operand2))
          );
  emit (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (MULT, (HImode), (copy_rtx (operand0)), (copy_rtx (operand3))))), gen_hard_reg_clobber (CCmode, 17))))
                                     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_conditional_trap (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
{
  emit_insn (gen_rtx_fmt_ee (TRAP_IF, (VOIDmode), (ix86_expand_compare (((enum rtx_code) (operands[0])->code), ((void *)0), ((void *)0))), (operands[1]))
                     );
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (TRAP_IF, (VOIDmode), (gen_rtx_fmt_ee (((enum rtx_code) (operand0)->code), VOIDmode, operand2, (const_int_rtx[64]))), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1580 (rtx, rtx *);
rtx
gen_split_1580 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
{
  operands[1] = simplify_gen_subreg (SFmode, operands[1], V4SFmode, 0);
  operands[2] = (const_tiny_rtx[0][(int) (V4SFmode)]);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V4SFmode), (gen_rtx_fmt_e (VEC_DUPLICATE, (V4SFmode), (operand1))), (operand2), ((const_int_rtx[64 +1])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1581 (rtx, rtx *);
rtx
gen_split_1581 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
{
  operands[1] = simplify_gen_subreg (DFmode, operands[1], V2DFmode, 0);
  operands[2] = (const_tiny_rtx[0][(int) (V2DFmode)]);
}
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_eee (VEC_MERGE, (V2DFmode), (gen_rtx_fmt_e (VEC_DUPLICATE, (V2DFmode), (operand1))), (operand2), ((const_int_rtx[64 +1])))))
             );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movti (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (0)
    ix86_expand_move (TImode, operands);
  else
    ix86_expand_vector_move (TImode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movtf (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (0)
    ix86_expand_move (TFmode, operands);
  else
    ix86_expand_vector_move (TFmode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movv2df (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_expand_vector_move (V2DFmode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movv8hi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_expand_vector_move (V8HImode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movv16qi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_expand_vector_move (V16QImode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movv4sf (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_expand_vector_move (V4SFmode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movv4si (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_expand_vector_move (V4SImode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movv2di (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_expand_vector_move (V2DImode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movv2si (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_expand_vector_move (V2SImode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movv4hi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_expand_vector_move (V4HImode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movv8qi (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_expand_vector_move (V8QImode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_movv2sf (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  ix86_expand_vector_move (V2SFmode, operands);
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1594 (rtx, rtx *);
rtx
gen_split_1594 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
operands[2] = change_address (operands[0], ((enum machine_mode) (operands[0])->mode),
     (global_rtl[GR_STACK_POINTER]));
   operands[3] = gen_rtx_CONST_INT (VOIDmode, (long) (-((unsigned short) mode_size[((enum machine_mode) (operands[0])->mode)])));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (SImode, 7)), (gen_rtx_fmt_ee (PLUS, (SImode), (gen_rtx_REG (SImode, 7)), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1595 (rtx, rtx *);
rtx
gen_split_1595 (rtx curr_insn , rtx *operands)
{
  rtx operand0;
  rtx operand1;
  rtx operand2;
  rtx operand3;
  rtx _val = 0;
  start_sequence ();
operands[2] = change_address (operands[0], ((enum machine_mode) (operands[0])->mode),
     (global_rtl[GR_STACK_POINTER]));
   operands[3] = gen_rtx_CONST_INT (VOIDmode, (long) (-((unsigned short) mode_size[((enum machine_mode) (operands[0])->mode)])));
  operand0 = operands[0];
  operand1 = operands[1];
  operand2 = operands[2];
  operand3 = operands[3];
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (DImode, 7)), (gen_rtx_fmt_ee (PLUS, (DImode), (gen_rtx_REG (DImode, 7)), (operand3))))
           );
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand2), (operand1))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1596 (rtx, rtx *);
rtx
gen_split_1596 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_long_move (operands); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
extern rtx gen_split_1597 (rtx, rtx *);
rtx
gen_split_1597 (rtx curr_insn , rtx *operands )
{
  rtx _val = 0;
  start_sequence ();
ix86_split_long_move (operands); return (_val = get_insns (), end_sequence (), _val);
  emit_insn ((const_int_rtx[64]));
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sse_movaps (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((enum rtx_code) (operands[0])->code) == MEM && ((enum rtx_code) (operands[1])->code) == MEM)
    {
      rtx tmp = gen_reg_rtx (V4SFmode);
      emit_insn (gen_sse_movaps (tmp, operands[1]));
      emit_move_insn (operands[0], tmp);
      return (_val = get_insns (), end_sequence (), _val);
    }
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (1, operand1)), (38))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sse_movups (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  if (((enum rtx_code) (operands[0])->code) == MEM && ((enum rtx_code) (operands[1])->code) == MEM)
    {
      rtx tmp = gen_reg_rtx (V4SFmode);
      emit_insn (gen_sse_movups (tmp, operands[1]));
      emit_move_insn (operands[0], tmp);
      return (_val = get_insns (), end_sequence (), _val);
    }
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (V4SFmode), (gen_rtvec (1, operand1)), (39))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sse_loadss (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  emit_insn (gen_sse_loadss_1 (operands[0], operands[1],
          (const_tiny_rtx[0][(int) (V4SFmode)])));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (operand0);
  emit (operand1);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_negv4sf2 (rtx operand0,
 rtx operand1)
{
  rtx operand2;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
{
  rtx m0 = rtl_hooks.gen_lowpart (SFmode, gen_int_mode (0x80000000, SImode));
  rtx vm0 = gen_rtx_CONST_VECTOR (V4SFmode, gen_rtvec (4, m0, m0, m0, m0));
  operands[2] = force_reg (V4SFmode, vm0);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (V4SFmode), (operand1), (operand2))))
           );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sse_andv4sf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (V4SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_sse_nandv4sf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (V4SFmode), (gen_rtx_fmt_e (NOT, (V4SFmode), (operand1))), (operand2))))
           ;
}
rtx
gen_sse_iorv4sf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (IOR, (V4SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_sse_xorv4sf3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (V4SFmode), (operand1), (operand2))))
           ;
}
rtx
gen_sse2_andv2df3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (V2DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_sse2_nandv2df3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (AND, (V2DFmode), (gen_rtx_fmt_e (NOT, (V2DFmode), (operand1))), (operand2))))
           ;
}
rtx
gen_sse2_iorv2df3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (IOR, (V2DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_sse2_xorv2df3 (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_ee (XOR, (V2DFmode), (operand1), (operand2))))
           ;
}
rtx
gen_sfence (void)
{
  rtx operand0;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
{
  operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, ((0 ? DImode : SImode))));
  (((operands[0]))->volatil) = 1;
}
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (BLKmode), (gen_rtvec (1, operand0)), (44))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sse_prologue_save (rtx operand0,
 rtx operand1,
 rtx operand2,
 rtx operand3)
{
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (4, gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (BLKmode), (gen_rtvec (8, gen_rtx_REG (DImode, 21), gen_rtx_REG (DImode, 22), gen_rtx_REG (DImode, 23), gen_rtx_REG (DImode, 24), gen_rtx_REG (DImode, 25), gen_rtx_REG (DImode, 26), gen_rtx_REG (DImode, 27), gen_rtx_REG (DImode, 28))), (13)))), gen_rtx_fmt_e (USE, (VOIDmode), (operand1)), gen_rtx_fmt_e (USE, (VOIDmode), (operand2)), gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_fmt_u00 (LABEL_REF, (DImode), (operand3)))))))
             ;
}
rtx
gen_prefetch (rtx operand0,
 rtx operand1,
 rtx operand2)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[3];
    operands[0] = operand0;
    operands[1] = operand1;
    operands[2] = operand2;
{
  int rw = ((operands[1])->u.hwint[0]);
  int locality = ((operands[2])->u.hwint[0]);
  if (rw != 0 && rw != 1)
    fancy_abort ("gcc.c", 236326, "?");
  if (locality < 0 || locality > 3)
    fancy_abort ("gcc.c", 236328, "?");
  if (((enum machine_mode) (operands[0])->mode) != (0 ? DImode : SImode) && ((enum machine_mode) (operands[0])->mode) != VOIDmode)
    fancy_abort ("gcc.c", 236330, "?");
  if (((target_flags & 0x00020000) != 0) && (!(x86_prefetch_sse) || rw))
    operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (3));
  else
    operands[1] = (const_int_rtx[64]);
}
    operand0 = operands[0];
    operand1 = operands[1];
    operand2 = operands[2];
  }
  emit_insn (gen_rtx_fmt_eee (PREFETCH, (VOIDmode), (operand0), (operand1), (operand2))
          );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sse2_loadsd (rtx operand0,
 rtx operand1)
{
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[2];
    operands[0] = operand0;
    operands[1] = operand1;
{
  emit_insn (gen_sse2_loadsd_1 (operands[0], operands[1],
           (const_tiny_rtx[0][(int) (V2DFmode)])));
  return (_val = get_insns (), end_sequence (), _val);
}
    operand0 = operands[0];
    operand1 = operands[1];
  }
  emit (operand0);
  emit (operand1);
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sse2_mfence (void)
{
  rtx operand0;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
{
  operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, ((0 ? DImode : SImode))));
  (((operands[0]))->volatil) = 1;
}
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (BLKmode), (gen_rtvec (1, operand0)), (59))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
rtx
gen_sse2_lfence (void)
{
  rtx operand0;
  rtx _val = 0;
  start_sequence ();
  {
    rtx operands[1];
{
  operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, ((0 ? DImode : SImode))));
  (((operands[0]))->volatil) = 1;
}
    operand0 = operands[0];
  }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operand0), (gen_rtx_fmt_Ei (UNSPEC, (BLKmode), (gen_rtvec (1, operand0)), (60))))
     );
  _val = get_insns ();
  end_sequence ();
  return _val;
}
void
add_clobbers (rtx pattern , int insn_code_number)
{
  switch (insn_code_number)
    {
    case 863:
    case 849:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_hard_reg_clobber (XFmode, 8);
      (((((pattern)->u.fld[0]).rtvec1))->elem[2]) = gen_hard_reg_clobber (XFmode, 9);
      (((((pattern)->u.fld[0]).rtvec1))->elem[3]) = gen_hard_reg_clobber (XFmode, 10);
      (((((pattern)->u.fld[0]).rtvec1))->elem[4]) = gen_hard_reg_clobber (XFmode, 11);
      (((((pattern)->u.fld[0]).rtvec1))->elem[5]) = gen_hard_reg_clobber (XFmode, 12);
      (((((pattern)->u.fld[0]).rtvec1))->elem[6]) = gen_hard_reg_clobber (XFmode, 13);
      (((((pattern)->u.fld[0]).rtvec1))->elem[7]) = gen_hard_reg_clobber (XFmode, 14);
      (((((pattern)->u.fld[0]).rtvec1))->elem[8]) = gen_hard_reg_clobber (XFmode, 15);
      (((((pattern)->u.fld[0]).rtvec1))->elem[9]) = gen_hard_reg_clobber (DImode, 29);
      (((((pattern)->u.fld[0]).rtvec1))->elem[10]) = gen_hard_reg_clobber (DImode, 30);
      (((((pattern)->u.fld[0]).rtvec1))->elem[11]) = gen_hard_reg_clobber (DImode, 31);
      (((((pattern)->u.fld[0]).rtvec1))->elem[12]) = gen_hard_reg_clobber (DImode, 32);
      (((((pattern)->u.fld[0]).rtvec1))->elem[13]) = gen_hard_reg_clobber (DImode, 33);
      (((((pattern)->u.fld[0]).rtvec1))->elem[14]) = gen_hard_reg_clobber (DImode, 34);
      (((((pattern)->u.fld[0]).rtvec1))->elem[15]) = gen_hard_reg_clobber (DImode, 35);
      (((((pattern)->u.fld[0]).rtvec1))->elem[16]) = gen_hard_reg_clobber (DImode, 36);
      break;
    case 686:
      (((((pattern)->u.fld[0]).rtvec1))->elem[2]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DImode))))
                          ;
      (((((pattern)->u.fld[0]).rtvec1))->elem[3]) = gen_hard_reg_clobber (CCmode, 17);
      break;
    case 676:
    case 675:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DFmode))))
                          ;
      (((((pattern)->u.fld[0]).rtvec1))->elem[2]) = gen_hard_reg_clobber (CCmode, 17);
      break;
    case 674:
    case 673:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SFmode))))
                          ;
      (((((pattern)->u.fld[0]).rtvec1))->elem[2]) = gen_hard_reg_clobber (CCmode, 17);
      break;
    case 612:
    case 611:
    case 610:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (XFmode))))
                          ;
      break;
    case 609:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SFmode))))
                          ;
      break;
    case 608:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DFmode))))
                          ;
      break;
    case 550:
    case 548:
    case 547:
    case 545:
    case 544:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode))))
                          ;
      (((((pattern)->u.fld[0]).rtvec1))->elem[2]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode))))
                          ;
      (((((pattern)->u.fld[0]).rtvec1))->elem[3]) = gen_hard_reg_clobber (CCmode, 17);
      break;
    case 685:
    case 514:
      (((((pattern)->u.fld[0]).rtvec1))->elem[2]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode))))
                          ;
      (((((pattern)->u.fld[0]).rtvec1))->elem[3]) = gen_hard_reg_clobber (CCmode, 17);
      break;
    case 508:
    case 507:
    case 506:
    case 505:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_hard_reg_clobber (CCFPmode, 18);
      (((((pattern)->u.fld[0]).rtvec1))->elem[2]) = gen_hard_reg_clobber (CCFPmode, 17);
      (((((pattern)->u.fld[0]).rtvec1))->elem[3]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (HImode))))
                          ;
      break;
    case 504:
    case 503:
    case 502:
    case 501:
    case 500:
    case 499:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_hard_reg_clobber (CCFPmode, 18);
      (((((pattern)->u.fld[0]).rtvec1))->elem[2]) = gen_hard_reg_clobber (CCFPmode, 17);
      break;
    case 647:
    case 646:
    case 277:
    case 276:
    case 274:
    case 271:
    case 268:
      (((((pattern)->u.fld[0]).rtvec1))->elem[3]) = gen_hard_reg_clobber (CCmode, 17);
      break;
    case 382:
    case 381:
    case 378:
    case 367:
    case 366:
    case 363:
    case 275:
    case 273:
    case 272:
    case 270:
    case 269:
    case 267:
    case 266:
      (((((pattern)->u.fld[0]).rtvec1))->elem[2]) = gen_hard_reg_clobber (CCmode, 17);
      break;
    case 536:
    case 535:
    case 449:
    case 422:
    case 404:
    case 263:
    case 262:
    case 260:
    case 259:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode))))
                          ;
      (((((pattern)->u.fld[0]).rtvec1))->elem[2]) = gen_hard_reg_clobber (CCmode, 17);
      break;
    case 538:
    case 261:
    case 258:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DImode))))
                          ;
      (((((pattern)->u.fld[0]).rtvec1))->elem[2]) = gen_hard_reg_clobber (CCmode, 17);
      break;
    case 348:
    case 322:
    case 221:
    case 220:
    case 219:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (QImode))))
                          ;
      break;
    case 339:
    case 317:
    case 214:
    case 213:
    case 212:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (HImode))))
                          ;
      break;
    case 336:
    case 314:
    case 208:
    case 207:
    case 205:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode))))
                          ;
      break;
    case 329:
    case 307:
    case 200:
    case 199:
    case 198:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DImode))))
                          ;
      break;
    case 149:
      (((((pattern)->u.fld[0]).rtvec1))->elem[3]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DFmode))))
                          ;
      break;
    case 148:
      (((((pattern)->u.fld[0]).rtvec1))->elem[4]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (DFmode))))
                          ;
      break;
    case 117:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_hard_reg_clobber (CCmode, 17);
      (((((pattern)->u.fld[0]).rtvec1))->elem[2]) = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (SImode))))
                          ;
      break;
    case 668:
    case 667:
    case 665:
    case 664:
    case 662:
    case 661:
    case 659:
    case 658:
    case 650:
    case 648:
    case 554:
    case 552:
    case 543:
    case 542:
    case 541:
    case 540:
    case 530:
    case 492:
    case 491:
    case 490:
    case 489:
    case 488:
    case 487:
    case 486:
    case 485:
    case 484:
    case 483:
    case 482:
    case 481:
    case 480:
    case 479:
    case 478:
    case 477:
    case 476:
    case 475:
    case 474:
    case 473:
    case 472:
    case 471:
    case 470:
    case 469:
    case 466:
    case 465:
    case 464:
    case 463:
    case 460:
    case 459:
    case 454:
    case 453:
    case 452:
    case 451:
    case 450:
    case 446:
    case 445:
    case 442:
    case 441:
    case 440:
    case 439:
    case 436:
    case 435:
    case 430:
    case 429:
    case 428:
    case 427:
    case 426:
    case 425:
    case 424:
    case 423:
    case 419:
    case 418:
    case 417:
    case 415:
    case 414:
    case 412:
    case 411:
    case 408:
    case 407:
    case 406:
    case 405:
    case 402:
    case 385:
    case 384:
    case 383:
    case 380:
    case 379:
    case 377:
    case 370:
    case 369:
    case 368:
    case 365:
    case 364:
    case 362:
    case 360:
    case 358:
    case 355:
    case 354:
    case 352:
    case 351:
    case 345:
    case 344:
    case 343:
    case 342:
    case 341:
    case 340:
    case 337:
    case 332:
    case 331:
    case 330:
    case 327:
    case 326:
    case 325:
    case 324:
    case 323:
    case 319:
    case 318:
    case 315:
    case 310:
    case 309:
    case 308:
    case 305:
    case 304:
    case 303:
    case 302:
    case 300:
    case 297:
    case 296:
    case 294:
    case 291:
    case 290:
    case 288:
    case 265:
    case 264:
    case 257:
    case 256:
    case 255:
    case 254:
    case 253:
    case 252:
    case 251:
    case 250:
    case 249:
    case 248:
    case 247:
    case 244:
    case 243:
    case 240:
    case 235:
    case 234:
    case 233:
    case 232:
    case 231:
    case 230:
    case 227:
    case 226:
    case 225:
    case 224:
    case 223:
    case 222:
    case 217:
    case 216:
    case 215:
    case 210:
    case 209:
    case 202:
    case 201:
    case 196:
    case 183:
    case 182:
    case 181:
    case 180:
    case 178:
    case 177:
    case 157:
    case 152:
    case 147:
    case 112:
    case 111:
    case 109:
    case 108:
    case 106:
    case 105:
    case 103:
    case 81:
    case 80:
    case 62:
    case 56:
    case 42:
    case 41:
      (((((pattern)->u.fld[0]).rtvec1))->elem[1]) = gen_hard_reg_clobber (CCmode, 17);
      break;
    default:
      fancy_abort ("gcc.c", 236827, "?");
    }
}
int
added_clobbers_hard_reg_p (int insn_code_number)
{
  switch (insn_code_number)
    {
    case 612:
    case 611:
    case 610:
    case 609:
    case 608:
    case 348:
    case 322:
    case 221:
    case 220:
    case 219:
    case 339:
    case 317:
    case 214:
    case 213:
    case 212:
    case 336:
    case 314:
    case 208:
    case 207:
    case 205:
    case 329:
    case 307:
    case 200:
    case 199:
    case 198:
    case 149:
    case 148:
      return 0;
    case 863:
    case 849:
    case 686:
    case 676:
    case 675:
    case 674:
    case 673:
    case 550:
    case 548:
    case 547:
    case 545:
    case 544:
    case 685:
    case 514:
    case 508:
    case 507:
    case 506:
    case 505:
    case 504:
    case 503:
    case 502:
    case 501:
    case 500:
    case 499:
    case 647:
    case 646:
    case 277:
    case 276:
    case 274:
    case 271:
    case 268:
    case 382:
    case 381:
    case 378:
    case 367:
    case 366:
    case 363:
    case 275:
    case 273:
    case 272:
    case 270:
    case 269:
    case 267:
    case 266:
    case 536:
    case 535:
    case 449:
    case 422:
    case 404:
    case 263:
    case 262:
    case 260:
    case 259:
    case 538:
    case 261:
    case 258:
    case 117:
    case 668:
    case 667:
    case 665:
    case 664:
    case 662:
    case 661:
    case 659:
    case 658:
    case 650:
    case 648:
    case 554:
    case 552:
    case 543:
    case 542:
    case 541:
    case 540:
    case 530:
    case 492:
    case 491:
    case 490:
    case 489:
    case 488:
    case 487:
    case 486:
    case 485:
    case 484:
    case 483:
    case 482:
    case 481:
    case 480:
    case 479:
    case 478:
    case 477:
    case 476:
    case 475:
    case 474:
    case 473:
    case 472:
    case 471:
    case 470:
    case 469:
    case 466:
    case 465:
    case 464:
    case 463:
    case 460:
    case 459:
    case 454:
    case 453:
    case 452:
    case 451:
    case 450:
    case 446:
    case 445:
    case 442:
    case 441:
    case 440:
    case 439:
    case 436:
    case 435:
    case 430:
    case 429:
    case 428:
    case 427:
    case 426:
    case 425:
    case 424:
    case 423:
    case 419:
    case 418:
    case 417:
    case 415:
    case 414:
    case 412:
    case 411:
    case 408:
    case 407:
    case 406:
    case 405:
    case 402:
    case 385:
    case 384:
    case 383:
    case 380:
    case 379:
    case 377:
    case 370:
    case 369:
    case 368:
    case 365:
    case 364:
    case 362:
    case 360:
    case 358:
    case 355:
    case 354:
    case 352:
    case 351:
    case 345:
    case 344:
    case 343:
    case 342:
    case 341:
    case 340:
    case 337:
    case 332:
    case 331:
    case 330:
    case 327:
    case 326:
    case 325:
    case 324:
    case 323:
    case 319:
    case 318:
    case 315:
    case 310:
    case 309:
    case 308:
    case 305:
    case 304:
    case 303:
    case 302:
    case 300:
    case 297:
    case 296:
    case 294:
    case 291:
    case 290:
    case 288:
    case 265:
    case 264:
    case 257:
    case 256:
    case 255:
    case 254:
    case 253:
    case 252:
    case 251:
    case 250:
    case 249:
    case 248:
    case 247:
    case 244:
    case 243:
    case 240:
    case 235:
    case 234:
    case 233:
    case 232:
    case 231:
    case 230:
    case 227:
    case 226:
    case 225:
    case 224:
    case 223:
    case 222:
    case 217:
    case 216:
    case 215:
    case 210:
    case 209:
    case 202:
    case 201:
    case 196:
    case 183:
    case 182:
    case 181:
    case 180:
    case 178:
    case 177:
    case 157:
    case 152:
    case 147:
    case 112:
    case 111:
    case 109:
    case 108:
    case 106:
    case 105:
    case 103:
    case 81:
    case 80:
    case 62:
    case 56:
    case 42:
    case 41:
      return 1;
    default:
      fancy_abort ("gcc.c", 237114, "?");
    }
}
const char *const mode_name[NUM_MACHINE_MODES] =
{
  "VOID",
  "BLK",
  "CC",
  "CCGC",
  "CCGOC",
  "CCNO",
  "CCZ",
  "CCFP",
  "CCFPU",
  "BI",
  "QI",
  "HI",
  "SI",
  "DI",
  "TI",
  "SF",
  "DF",
  "XF",
  "TF",
  "CQI",
  "CHI",
  "CSI",
  "CDI",
  "CTI",
  "SC",
  "DC",
  "XC",
  "TC",
  "V2QI",
  "V4QI",
  "V2HI",
  "V8QI",
  "V4HI",
  "V2SI",
  "V1DI",
  "V16QI",
  "V8HI",
  "V4SI",
  "V2DI",
  "V8SI",
  "V4DI",
  "V8DI",
  "V2SF",
  "V4SF",
  "V2DF",
  "V8SF",
  "V4DF",
  "V16SF",
  "V8DF"
};
const unsigned char mode_class[NUM_MACHINE_MODES] =
{
  MODE_RANDOM,
  MODE_RANDOM,
  MODE_CC,
  MODE_CC,
  MODE_CC,
  MODE_CC,
  MODE_CC,
  MODE_CC,
  MODE_CC,
  MODE_INT,
  MODE_INT,
  MODE_INT,
  MODE_INT,
  MODE_INT,
  MODE_INT,
  MODE_FLOAT,
  MODE_FLOAT,
  MODE_FLOAT,
  MODE_FLOAT,
  MODE_COMPLEX_INT,
  MODE_COMPLEX_INT,
  MODE_COMPLEX_INT,
  MODE_COMPLEX_INT,
  MODE_COMPLEX_INT,
  MODE_COMPLEX_FLOAT,
  MODE_COMPLEX_FLOAT,
  MODE_COMPLEX_FLOAT,
  MODE_COMPLEX_FLOAT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_INT,
  MODE_VECTOR_FLOAT,
  MODE_VECTOR_FLOAT,
  MODE_VECTOR_FLOAT,
  MODE_VECTOR_FLOAT,
  MODE_VECTOR_FLOAT,
  MODE_VECTOR_FLOAT,
  MODE_VECTOR_FLOAT
};
const unsigned short mode_precision[NUM_MACHINE_MODES] =
{
  0,
  0,
  4*8,
  4*8,
  4*8,
  4*8,
  4*8,
  4*8,
  4*8,
  1,
  1*8,
  2*8,
  4*8,
  8*8,
  16*8,
  4*8,
  8*8,
  12*8,
  16*8,
  2*8,
  4*8,
  8*8,
  16*8,
  32*8,
  8*8,
  16*8,
  24*8,
  32*8,
  2*8,
  4*8,
  4*8,
  8*8,
  8*8,
  8*8,
  8*8,
  16*8,
  16*8,
  16*8,
  16*8,
  32*8,
  32*8,
  64*8,
  8*8,
  16*8,
  16*8,
  32*8,
  32*8,
  64*8,
  64*8
};
unsigned char mode_size[NUM_MACHINE_MODES] =
{
  0,
  0,
  4,
  4,
  4,
  4,
  4,
  4,
  4,
  1,
  1,
  2,
  4,
  8,
  16,
  4,
  8,
  12,
  16,
  2,
  4,
  8,
  16,
  32,
  8,
  16,
  24,
  32,
  2,
  4,
  4,
  8,
  8,
  8,
  8,
  16,
  16,
  16,
  16,
  32,
  32,
  64,
  8,
  16,
  16,
  32,
  32,
  64,
  64
};
const unsigned char mode_nunits[NUM_MACHINE_MODES] =
{
  0,
  0,
  1,
  1,
  1,
  1,
  1,
  1,
  1,
  1,
  1,
  1,
  1,
  1,
  1,
  1,
  1,
  1,
  1,
  2,
  2,
  2,
  2,
  2,
  2,
  2,
  2,
  2,
  2,
  4,
  2,
  8,
  4,
  2,
  1,
  16,
  8,
  4,
  2,
  8,
  4,
  8,
  2,
  4,
  2,
  8,
  4,
  16,
  8
};
const unsigned char mode_wider[NUM_MACHINE_MODES] =
{
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  QImode,
  HImode,
  SImode,
  DImode,
  TImode,
  VOIDmode,
  DFmode,
  XFmode,
  TFmode,
  VOIDmode,
  CHImode,
  CSImode,
  CDImode,
  CTImode,
  VOIDmode,
  DCmode,
  XCmode,
  TCmode,
  VOIDmode,
  V4QImode,
  V2HImode,
  V8QImode,
  V4HImode,
  V2SImode,
  V1DImode,
  V16QImode,
  V8HImode,
  V4SImode,
  V2DImode,
  V8SImode,
  V4DImode,
  V8DImode,
  VOIDmode,
  V4SFmode,
  V2DFmode,
  V8SFmode,
  V4DFmode,
  V16SFmode,
  V8DFmode,
  VOIDmode
};
const unsigned long mode_mask_array[NUM_MACHINE_MODES] =
{
  ((0) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (0)) - 1,
  ((0) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (0)) - 1,
  ((4*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (4*8)) - 1,
  ((4*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (4*8)) - 1,
  ((4*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (4*8)) - 1,
  ((4*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (4*8)) - 1,
  ((4*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (4*8)) - 1,
  ((4*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (4*8)) - 1,
  ((4*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (4*8)) - 1,
  ((1) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (1)) - 1,
  ((1*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (1*8)) - 1,
  ((2*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (2*8)) - 1,
  ((4*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (4*8)) - 1,
  ((8*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (8*8)) - 1,
  ((16*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (16*8)) - 1,
  ((4*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (4*8)) - 1,
  ((8*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (8*8)) - 1,
  ((12*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (12*8)) - 1,
  ((16*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (16*8)) - 1,
  ((2*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (2*8)) - 1,
  ((4*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (4*8)) - 1,
  ((8*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (8*8)) - 1,
  ((16*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (16*8)) - 1,
  ((32*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (32*8)) - 1,
  ((8*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (8*8)) - 1,
  ((16*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (16*8)) - 1,
  ((24*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (24*8)) - 1,
  ((32*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (32*8)) - 1,
  ((2*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (2*8)) - 1,
  ((4*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (4*8)) - 1,
  ((4*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (4*8)) - 1,
  ((8*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (8*8)) - 1,
  ((8*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (8*8)) - 1,
  ((8*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (8*8)) - 1,
  ((8*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (8*8)) - 1,
  ((16*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (16*8)) - 1,
  ((16*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (16*8)) - 1,
  ((16*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (16*8)) - 1,
  ((16*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (16*8)) - 1,
  ((32*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (32*8)) - 1,
  ((32*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (32*8)) - 1,
  ((64*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (64*8)) - 1,
  ((8*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (8*8)) - 1,
  ((16*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (16*8)) - 1,
  ((16*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (16*8)) - 1,
  ((32*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (32*8)) - 1,
  ((32*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (32*8)) - 1,
  ((64*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (64*8)) - 1,
  ((64*8) >= (8 * 4)) ? ~(unsigned long) 0 : ((unsigned long) 1 << (64*8)) - 1
};
const unsigned char mode_inner[NUM_MACHINE_MODES] =
{
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  VOIDmode,
  QImode,
  HImode,
  SImode,
  DImode,
  TImode,
  SFmode,
  DFmode,
  XFmode,
  TFmode,
  QImode,
  QImode,
  HImode,
  QImode,
  HImode,
  SImode,
  DImode,
  QImode,
  HImode,
  SImode,
  DImode,
  SImode,
  DImode,
  DImode,
  SFmode,
  SFmode,
  DFmode,
  SFmode,
  DFmode,
  SFmode,
  DFmode
};
unsigned char mode_base_align[NUM_MACHINE_MODES] =
{
  0,
  0,
  4,
  4,
  4,
  4,
  4,
  4,
  4,
  1,
  1,
  2,
  4,
  8,
  16,
  4,
  8,
  4,
  16,
  1,
  2,
  4,
  8,
  16,
  4,
  8,
  4,
  16,
  2,
  4,
  4,
  8,
  8,
  8,
  8,
  16,
  16,
  16,
  16,
  32,
  32,
  64,
  8,
  16,
  16,
  32,
  32,
  64,
  64
};
const unsigned char class_narrowest_mode[MAX_MODE_CLASS] =
{
  MIN_MODE_RANDOM,
  MIN_MODE_CC,
  MIN_MODE_INT,
  MIN_MODE_PARTIAL_INT,
  MIN_MODE_FLOAT,
  MIN_MODE_COMPLEX_INT,
  MIN_MODE_COMPLEX_FLOAT,
  MIN_MODE_VECTOR_INT,
  MIN_MODE_VECTOR_FLOAT
};
const struct real_format *
 real_format_for_mode[MAX_MODE_FLOAT - MIN_MODE_FLOAT + 1] =
{
  &ieee_single_format,
  &ieee_double_format,
  &ieee_extended_intel_96_format,
  &ieee_quad_format
};
void
init_adjust_machine_modes (void)
{
  size_t s ;
  s = (target_flags & 0x00080000) ? 16 : 12;
  mode_size[XFmode] = s;
  mode_base_align[XFmode] = s & (~s + 1);
  mode_size[XCmode] = 2*s;
  mode_base_align[XCmode] = s & (~s + 1);
  s = (target_flags & 0x00080000) ? 16 : 4;
  mode_base_align[XFmode] = s;
  mode_base_align[XCmode] = s;
  (real_format_for_mode[(XFmode) - MIN_MODE_FLOAT]) = ((target_flags & 0x00080000) ? &ieee_extended_intel_128_format : &ieee_extended_intel_96_format);
}
static rtx junk ;
void
insn_extract (rtx insn)
{
  rtx *ro = recog_data.operand;
  rtx **ro_loc = recog_data.operand_loc;
  rtx pat = (((insn)->u.fld[5]).rtx1);
  int i ;
  switch ((((insn)->u.fld[6]).rtint))
    {
    case -1:
      _fatal_insn_not_found (insn, "gcc.c", 237662, "?");
    case 1022:
      ro[0] = *(ro_loc[0] = &(((((pat)->u.fld[0]).rtvec1))->elem[0]));
      ro[1] = *(ro_loc[1] = &(((((pat)->u.fld[0]).rtvec1))->elem[1]));
      ro[2] = *(ro_loc[2] = &(((((pat)->u.fld[0]).rtvec1))->elem[2]));
      break;
    case 1021:
      ro[0] = *(ro_loc[0] = &(((((pat)->u.fld[0]).rtvec1))->elem[0]));
      ro[1] = *(ro_loc[1] = &(((((pat)->u.fld[0]).rtvec1))->elem[1]));
      break;
    case 1000:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 988:
    case 987:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 950:
    case 949:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 928:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 881:
    case 880:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((pat)->u.fld[2]).rtx1));
      break;
    case 877:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 869:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &((((((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      break;
    case 868:
    case 867:
    case 866:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 865:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 856:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 853:
      ro[0] = *(ro_loc[0] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[3]))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[4] = *(ro_loc[4] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      break;
    case 1020:
    case 1019:
    case 852:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
      recog_data.dup_num[0] = 0;
      break;
    case 957:
    case 820:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      break;
    case 956:
    case 819:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((pat)->u.fld[1]).rtx1))->u.fld[2]).rtx1));
      break;
    case 1028:
    case 1027:
    case 1026:
    case 1025:
    case 1024:
    case 1023:
    case 960:
    case 959:
    case 958:
    case 955:
    case 876:
    case 874:
    case 873:
    case 871:
    case 821:
    case 818:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[1]));
      break;
    case 954:
    case 953:
    case 817:
    case 816:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      break;
    case 815:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1));
      break;
    case 951:
    case 810:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &(((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 948:
    case 947:
    case 809:
    case 808:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 916:
    case 790:
    case 789:
    case 784:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      break;
    case 927:
    case 926:
    case 925:
    case 924:
    case 786:
    case 785:
    case 782:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 999:
    case 998:
    case 997:
    case 996:
    case 995:
    case 994:
    case 993:
    case 992:
    case 991:
    case 990:
    case 989:
    case 847:
    case 846:
    case 844:
    case 843:
    case 842:
    case 841:
    case 840:
    case 777:
    case 776:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 903:
    case 902:
    case 775:
    case 774:
      ro[0] = *(ro_loc[0] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 901:
    case 773:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      break;
    case 900:
    case 772:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      break;
    case 899:
    case 771:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 749:
    case 747:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      ro[2] = *(ro_loc[2] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 895:
    case 893:
    case 891:
    case 889:
    case 887:
    case 885:
    case 781:
    case 779:
    case 745:
    case 743:
    case 741:
    case 739:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[0] = 1;
      break;
    case 1017:
    case 737:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[1]));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[2]));
      break;
    case 1015:
    case 1013:
    case 978:
    case 977:
    case 976:
    case 975:
    case 974:
    case 973:
    case 972:
    case 971:
    case 970:
    case 969:
    case 968:
    case 967:
    case 966:
    case 965:
    case 964:
    case 963:
    case 962:
    case 961:
    case 946:
    case 945:
    case 944:
    case 943:
    case 942:
    case 941:
    case 940:
    case 939:
    case 938:
    case 937:
    case 936:
    case 935:
    case 934:
    case 933:
    case 932:
    case 931:
    case 930:
    case 894:
    case 892:
    case 890:
    case 888:
    case 886:
    case 884:
    case 862:
    case 861:
    case 860:
    case 859:
    case 858:
    case 857:
    case 855:
    case 854:
    case 838:
    case 837:
    case 835:
    case 834:
    case 833:
    case 832:
    case 831:
    case 830:
    case 829:
    case 828:
    case 827:
    case 826:
    case 825:
    case 824:
    case 823:
    case 822:
    case 807:
    case 806:
    case 805:
    case 804:
    case 803:
    case 801:
    case 800:
    case 799:
    case 798:
    case 797:
    case 796:
    case 795:
    case 793:
    case 792:
    case 791:
    case 780:
    case 778:
    case 767:
    case 766:
    case 765:
    case 764:
    case 761:
    case 760:
    case 759:
    case 758:
    case 756:
    case 755:
    case 754:
    case 752:
    case 744:
    case 742:
    case 740:
    case 738:
    case 735:
    case 733:
    case 732:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 1001:
    case 986:
    case 985:
    case 984:
    case 983:
    case 982:
    case 981:
    case 980:
    case 979:
    case 845:
    case 731:
    case 730:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 907:
    case 906:
    case 727:
    case 726:
      ro[0] = *(ro_loc[0] = &((((((pat)->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[1]));
      break;
    case 695:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 1014:
    case 897:
    case 848:
    case 763:
    case 762:
    case 757:
    case 753:
    case 751:
    case 734:
    case 694:
    case 693:
    case 692:
    case 691:
    case 690:
    case 689:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 688:
    case 687:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 686:
    case 685:
      ro[0] = *(ro_loc[0] = &((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtvec1))->elem[0]));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[0] = 0;
      break;
    case 684:
    case 683:
    case 682:
    case 681:
    case 680:
    case 679:
    case 678:
    case 677:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((pat)->u.fld[1]).rtx1))->u.fld[2]).rtx1));
      ro[4] = *(ro_loc[4] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[5] = *(ro_loc[5] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      break;
    case 676:
    case 674:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[2]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[4] = *(ro_loc[4] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[5] = *(ro_loc[5] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      break;
    case 675:
    case 673:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[2]).rtx1));
      ro[4] = *(ro_loc[4] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[5] = *(ro_loc[5] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[6] = *(ro_loc[6] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      break;
    case 672:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 669:
    case 666:
    case 663:
    case 660:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[2]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 668:
    case 667:
    case 665:
    case 664:
    case 662:
    case 661:
    case 659:
    case 658:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[2]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 653:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((pat)->u.fld[1]).rtx1))->u.fld[2]).rtx1));
      ro[4] = *(ro_loc[4] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 657:
    case 656:
    case 655:
    case 654:
    case 652:
    case 651:
    case 649:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((pat)->u.fld[1]).rtx1))->u.fld[2]).rtx1));
      break;
    case 647:
    case 646:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[1]));
      ro[3] = *(ro_loc[3] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[2]));
      ro[4] = *(ro_loc[4] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[3]));
      ro[5] = *(ro_loc[5] = &((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      break;
    case 645:
    case 644:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[4]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[5]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[6]))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[4] = *(ro_loc[4] = &(((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[5] = *(ro_loc[5] = &(((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[6] = *(ro_loc[6] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 643:
    case 642:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[4]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[5]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[6]))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      ro[4] = *(ro_loc[4] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[5] = *(ro_loc[5] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[6] = *(ro_loc[6] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      break;
    case 641:
    case 640:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[3]))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[4] = *(ro_loc[4] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[4]))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 4;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[1] = 3;
      break;
    case 639:
    case 638:
    case 637:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[3]))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[4] = *(ro_loc[4] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[4]))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 4;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[1] = 3;
      break;
    case 636:
    case 635:
    case 634:
    case 633:
    case 632:
    case 631:
    case 630:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      break;
    case 629:
    case 628:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[4] = *(ro_loc[4] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[5] = *(ro_loc[5] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[4]))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 5;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[3]))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[1] = 3;
      recog_data.dup_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[3]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[2] = 4;
      recog_data.dup_loc[3] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[3] = 5;
      break;
    case 627:
    case 626:
    case 625:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[4] = *(ro_loc[4] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[5] = *(ro_loc[5] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[4]))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 5;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[3]))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[1] = 3;
      recog_data.dup_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[3]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[2] = 4;
      recog_data.dup_loc[3] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[3] = 5;
      break;
    case 624:
    case 623:
    case 622:
    case 621:
    case 620:
    case 619:
    case 618:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 3;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 612:
    case 611:
    case 610:
    case 609:
    case 608:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[1]));
      ro[2] = *(ro_loc[2] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      break;
    case 603:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 2;
      break;
    case 613:
    case 607:
    case 606:
    case 605:
    case 604:
    case 602:
    case 601:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      recog_data.dup_loc[0] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
      recog_data.dup_num[0] = 2;
      break;
    case 923:
    case 922:
    case 599:
    case 595:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      break;
    case 1031:
    case 1030:
    case 1029:
    case 1005:
    case 1004:
    case 1003:
    case 1002:
    case 918:
    case 913:
    case 910:
    case 909:
    case 908:
    case 905:
    case 904:
    case 875:
    case 872:
    case 748:
    case 746:
    case 729:
    case 728:
    case 725:
    case 724:
    case 723:
    case 722:
    case 615:
    case 614:
    case 600:
    case 598:
    case 597:
    case 596:
    case 594:
    case 593:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      break;
    case 616:
    case 592:
    case 591:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      ro[3] = *(ro_loc[3] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[1]));
      recog_data.dup_loc[0] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[1]);
      recog_data.dup_num[0] = 3;
      recog_data.dup_loc[1] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
      recog_data.dup_num[1] = 2;
      break;
    case 580:
    case 574:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &(((pat)->u.fld[1]).rtx1));
      break;
    case 579:
    case 577:
    case 573:
    case 571:
    case 566:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &(((pat)->u.fld[1]).rtx1));
      break;
    case 578:
    case 576:
    case 572:
    case 570:
    case 565:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &(((pat)->u.fld[1]).rtx1));
      break;
    case 898:
    case 770:
    case 575:
    case 569:
    case 568:
    case 567:
    case 564:
    case 563:
    case 562:
    case 561:
    case 560:
    case 559:
    case 558:
    case 557:
    case 556:
    case 555:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &(((pat)->u.fld[1]).rtx1));
      break;
    case 554:
    case 552:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 550:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      ro[2] = *(ro_loc[2] = &((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtvec1))->elem[1]));
      ro[3] = *(ro_loc[3] = &(((((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      ro[4] = *(ro_loc[4] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[5] = *(ro_loc[5] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      break;
    case 548:
    case 547:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      ro[2] = *(ro_loc[2] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[1]));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[4] = *(ro_loc[4] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      break;
    case 546:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtvec1))->elem[0]));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 545:
    case 544:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      ro[2] = *(ro_loc[2] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[1]));
      ro[3] = *(ro_loc[3] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[2]));
      ro[4] = *(ro_loc[4] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[5] = *(ro_loc[5] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      break;
    case 543:
    case 542:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 539:
    case 537:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      break;
    case 527:
    case 526:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      break;
    case 863:
    case 849:
    case 696:
    case 617:
    case 534:
    case 533:
    case 528:
    case 525:
    case 524:
      break;
    case 1018:
    case 850:
    case 529:
    case 523:
      ro[0] = *(ro_loc[0] = &(((((pat)->u.fld[0]).rtvec1))->elem[0]));
      break;
    case 516:
    case 515:
      ro[0] = *(ro_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 514:
      ro[0] = *(ro_loc[0] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      break;
    case 513:
    case 512:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 522:
    case 511:
    case 510:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[1]).rtx1));
      break;
    case 509:
      ro[0] = *(ro_loc[0] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 508:
    case 506:
      ro[0] = *(ro_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[2]).rtx1))->u.fld[0]).rtx1));
      ro[4] = *(ro_loc[4] = &((((((((pat)->u.fld[0]).rtvec1))->elem[3]))->u.fld[0]).rtx1));
      break;
    case 507:
    case 505:
      ro[0] = *(ro_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[4] = *(ro_loc[4] = &((((((((pat)->u.fld[0]).rtvec1))->elem[3]))->u.fld[0]).rtx1));
      break;
    case 504:
    case 503:
    case 502:
      ro[0] = *(ro_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[2]).rtx1))->u.fld[0]).rtx1));
      break;
    case 501:
    case 500:
    case 499:
      ro[0] = *(ro_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 498:
      ro[0] = *(ro_loc[0] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 497:
      ro[0] = *(ro_loc[0] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 496:
    case 495:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((pat)->u.fld[1]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 424:
    case 406:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 0;
      recog_data.dup_loc[1] = &(((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 449:
    case 422:
    case 404:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      break;
    case 397:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      break;
    case 357:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      break;
    case 355:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 401:
    case 399:
    case 396:
    case 393:
    case 361:
    case 359:
    case 356:
    case 353:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      break;
    case 458:
    case 456:
    case 335:
    case 313:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 549:
    case 452:
    case 332:
    case 310:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 350:
    case 349:
    case 301:
      ro[0] = *(ro_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 347:
    case 321:
    case 299:
      ro[0] = *(ro_loc[0] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 0;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[1] = 0;
      recog_data.dup_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[2] = 1;
      break;
    case 287:
    case 286:
      ro[0] = *(ro_loc[0] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[2]).rtx1));
      break;
    case 285:
    case 284:
    case 283:
      ro[0] = *(ro_loc[0] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 282:
      ro[0] = *(ro_loc[0] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      break;
    case 276:
    case 274:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 3;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[1] = 1;
      recog_data.dup_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[2] = 2;
      break;
    case 275:
    case 273:
    case 272:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 277:
    case 271:
    case 268:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[4] = *(ro_loc[4] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 270:
    case 269:
    case 267:
    case 266:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 2;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 3;
      break;
    case 263:
    case 260:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      break;
    case 262:
    case 261:
    case 259:
    case 258:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      break;
    case 257:
    case 256:
    case 255:
    case 254:
    case 253:
    case 252:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 239:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 233:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 246:
    case 242:
    case 238:
    case 229:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 232:
    case 231:
    case 230:
    case 226:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 345:
    case 344:
    case 343:
    case 326:
    case 325:
    case 324:
    case 304:
    case 303:
    case 302:
    case 224:
      ro[0] = *(ro_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 342:
    case 323:
    case 300:
    case 223:
    case 222:
      ro[0] = *(ro_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 492:
    case 490:
    case 479:
    case 477:
    case 466:
    case 464:
    case 442:
    case 440:
    case 341:
    case 319:
    case 297:
    case 244:
    case 217:
      ro[0] = *(ro_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 0;
      break;
    case 206:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      recog_data.dup_loc[0] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 434:
    case 432:
    case 410:
    case 334:
    case 312:
    case 293:
    case 237:
    case 204:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 486:
    case 484:
    case 474:
    case 472:
    case 454:
    case 430:
    case 428:
    case 426:
    case 408:
    case 331:
    case 309:
    case 291:
    case 249:
    case 235:
    case 202:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      break;
    case 348:
    case 339:
    case 336:
    case 329:
    case 322:
    case 317:
    case 314:
    case 307:
    case 221:
    case 214:
    case 208:
    case 200:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      break;
    case 220:
    case 213:
    case 207:
    case 199:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 219:
    case 212:
    case 205:
    case 198:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 468:
    case 467:
    case 462:
    case 461:
    case 457:
    case 455:
    case 448:
    case 447:
    case 444:
    case 443:
    case 438:
    case 437:
    case 433:
    case 431:
    case 421:
    case 420:
    case 416:
    case 413:
    case 409:
    case 403:
    case 346:
    case 338:
    case 333:
    case 328:
    case 320:
    case 316:
    case 311:
    case 306:
    case 298:
    case 295:
    case 292:
    case 289:
    case 245:
    case 241:
    case 236:
    case 228:
    case 218:
    case 211:
    case 203:
    case 197:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 195:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[4] = *(ro_loc[4] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      break;
    case 194:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[4] = *(ro_loc[4] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 193:
    case 191:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      break;
    case 192:
    case 190:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 183:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &(((((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 185:
    case 184:
    case 179:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      ro[2] = *(ro_loc[2] = &(((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[1]));
      recog_data.dup_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 2;
      break;
    case 182:
    case 181:
    case 180:
    case 178:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 671:
    case 670:
    case 491:
    case 489:
    case 488:
    case 487:
    case 485:
    case 483:
    case 482:
    case 481:
    case 480:
    case 478:
    case 476:
    case 475:
    case 473:
    case 471:
    case 470:
    case 469:
    case 465:
    case 463:
    case 460:
    case 459:
    case 453:
    case 451:
    case 450:
    case 446:
    case 445:
    case 441:
    case 439:
    case 436:
    case 435:
    case 429:
    case 427:
    case 425:
    case 423:
    case 419:
    case 418:
    case 417:
    case 415:
    case 414:
    case 412:
    case 411:
    case 407:
    case 405:
    case 402:
    case 340:
    case 337:
    case 330:
    case 327:
    case 318:
    case 315:
    case 308:
    case 305:
    case 296:
    case 294:
    case 290:
    case 288:
    case 265:
    case 264:
    case 251:
    case 250:
    case 248:
    case 247:
    case 243:
    case 240:
    case 234:
    case 227:
    case 225:
    case 216:
    case 215:
    case 210:
    case 209:
    case 201:
    case 196:
    case 177:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 159:
    case 154:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      break;
    case 158:
    case 153:
    case 149:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      ro[4] = *(ro_loc[4] = &((((((((pat)->u.fld[0]).rtvec1))->elem[3]))->u.fld[0]).rtx1));
      break;
    case 148:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      ro[3] = *(ro_loc[3] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      ro[4] = *(ro_loc[4] = &((((((((pat)->u.fld[0]).rtvec1))->elem[3]))->u.fld[0]).rtx1));
      ro[5] = *(ro_loc[5] = &((((((((pat)->u.fld[0]).rtvec1))->elem[4]))->u.fld[0]).rtx1));
      break;
    case 538:
    case 536:
    case 535:
    case 382:
    case 381:
    case 378:
    case 367:
    case 366:
    case 363:
    case 145:
    case 142:
    case 135:
    case 134:
    case 133:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1));
      break;
    case 117:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &((((((((pat)->u.fld[0]).rtvec1))->elem[2]))->u.fld[0]).rtx1));
      break;
    case 650:
    case 648:
    case 541:
    case 540:
    case 385:
    case 384:
    case 383:
    case 380:
    case 379:
    case 377:
    case 370:
    case 369:
    case 368:
    case 365:
    case 364:
    case 362:
    case 360:
    case 358:
    case 354:
    case 352:
    case 351:
    case 157:
    case 152:
    case 147:
    case 112:
    case 111:
    case 109:
    case 108:
    case 106:
    case 105:
    case 103:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 74:
      ro[0] = *(ro_loc[0] = &((((((pat)->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 1033:
    case 1011:
    case 1010:
    case 929:
    case 921:
    case 920:
    case 915:
    case 914:
    case 788:
    case 787:
    case 783:
    case 590:
    case 589:
    case 587:
    case 395:
    case 391:
    case 390:
    case 388:
    case 376:
    case 375:
    case 373:
    case 188:
    case 125:
    case 122:
    case 71:
    case 70:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 62:
    case 56:
      ro[0] = *(ro_loc[0] = &(((((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1));
      break;
    case 102:
    case 97:
    case 92:
    case 87:
    case 60:
    case 54:
    case 53:
    case 47:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1));
      recog_data.dup_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1);
      recog_data.dup_num[0] = 1;
      recog_data.dup_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1);
      recog_data.dup_num[1] = 0;
      break;
    case 1032:
    case 1016:
    case 1012:
    case 1009:
    case 1008:
    case 1007:
    case 1006:
    case 919:
    case 917:
    case 912:
    case 911:
    case 896:
    case 879:
    case 878:
    case 870:
    case 864:
    case 750:
    case 736:
    case 588:
    case 586:
    case 585:
    case 584:
    case 583:
    case 582:
    case 581:
    case 400:
    case 398:
    case 394:
    case 392:
    case 389:
    case 387:
    case 386:
    case 374:
    case 372:
    case 371:
    case 187:
    case 176:
    case 175:
    case 174:
    case 173:
    case 172:
    case 171:
    case 170:
    case 169:
    case 168:
    case 167:
    case 166:
    case 165:
    case 164:
    case 163:
    case 162:
    case 156:
    case 155:
    case 151:
    case 150:
    case 146:
    case 144:
    case 143:
    case 141:
    case 140:
    case 139:
    case 138:
    case 137:
    case 136:
    case 132:
    case 131:
    case 130:
    case 129:
    case 128:
    case 127:
    case 126:
    case 124:
    case 123:
    case 121:
    case 120:
    case 119:
    case 118:
    case 116:
    case 115:
    case 114:
    case 113:
    case 110:
    case 107:
    case 104:
    case 86:
    case 69:
    case 68:
    case 66:
    case 65:
    case 64:
    case 63:
    case 52:
    case 46:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 521:
    case 520:
    case 519:
    case 518:
    case 517:
    case 494:
    case 85:
    case 73:
    case 72:
    case 67:
    case 61:
    case 55:
    case 51:
    case 45:
      ro[0] = *(ro_loc[0] = &((((((pat)->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((pat)->u.fld[1]).rtx1));
      break;
    case 530:
    case 79:
    case 78:
    case 40:
    case 39:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      break;
    case 81:
    case 80:
    case 77:
    case 42:
    case 41:
    case 38:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((pat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1));
      break;
    case 883:
    case 882:
    case 768:
    case 721:
    case 720:
    case 719:
    case 718:
    case 717:
    case 716:
    case 715:
    case 714:
    case 713:
    case 712:
    case 711:
    case 710:
    case 709:
    case 708:
    case 707:
    case 706:
    case 705:
    case 704:
    case 703:
    case 702:
    case 701:
    case 700:
    case 699:
    case 698:
    case 697:
    case 493:
    case 189:
    case 186:
    case 101:
    case 100:
    case 99:
    case 98:
    case 96:
    case 95:
    case 94:
    case 93:
    case 91:
    case 90:
    case 89:
    case 88:
    case 84:
    case 83:
    case 82:
    case 76:
    case 75:
    case 59:
    case 58:
    case 57:
    case 50:
    case 49:
    case 48:
    case 44:
    case 43:
    case 37:
    case 36:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((pat)->u.fld[1]).rtx1));
      break;
    case 532:
    case 531:
    case 161:
    case 29:
      ro[0] = *(ro_loc[0] = &((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]));
      break;
    case 952:
    case 851:
    case 813:
    case 769:
    case 553:
    case 551:
    case 160:
    case 28:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      break;
    case 27:
      ro[0] = *(ro_loc[0] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      break;
    case 839:
    case 836:
    case 814:
    case 812:
    case 811:
    case 802:
    case 794:
    case 26:
    case 24:
    case 22:
    case 20:
    case 18:
      ro[0] = *(ro_loc[0] = &(((pat)->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1));
      ro[2] = *(ro_loc[2] = &(((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1));
      break;
    case 17:
      ro[0] = *(ro_loc[0] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 16:
    case 15:
    case 14:
      ro[0] = *(ro_loc[0] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case 13:
    case 12:
      ro[0] = *(ro_loc[0] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      break;
    case 281:
    case 280:
    case 279:
    case 278:
    case 11:
    case 7:
    case 4:
    case 1:
      ro[0] = *(ro_loc[0] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &(((((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      break;
    case 35:
    case 34:
    case 33:
    case 32:
    case 31:
    case 30:
    case 25:
    case 23:
    case 21:
    case 19:
    case 10:
    case 9:
    case 8:
    case 6:
    case 5:
    case 3:
    case 2:
    case 0:
      ro[0] = *(ro_loc[0] = &((((((pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1));
      ro[1] = *(ro_loc[1] = &((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    default:
      fancy_abort ("gcc.c", 239638, "?");
    }
}
void
init_all_optabs (void)
{
  if ((0))
    (convert_optab_table[CTI_zext])->handlers[DImode][HImode].insn_code = CODE_FOR_zero_extendhidi2;
  if ((0))
    (convert_optab_table[CTI_zext])->handlers[DImode][QImode].insn_code = CODE_FOR_zero_extendqidi2;
  if ((0))
    (convert_optab_table[CTI_sext])->handlers[DImode][HImode].insn_code = CODE_FOR_extendhidi2;
  if ((0))
    (convert_optab_table[CTI_sext])->handlers[DImode][QImode].insn_code = CODE_FOR_extendqidi2;
  (convert_optab_table[CTI_sext])->handlers[SImode][HImode].insn_code = CODE_FOR_extendhisi2;
  (convert_optab_table[CTI_sext])->handlers[HImode][QImode].insn_code = CODE_FOR_extendqihi2;
  (convert_optab_table[CTI_sext])->handlers[SImode][QImode].insn_code = CODE_FOR_extendqisi2;
  if (((target_flags & 0x00000001)))
    (convert_optab_table[CTI_sfloat])->handlers[XFmode][HImode].insn_code = CODE_FOR_floathixf2;
  if (((target_flags & 0x00000001)))
    (convert_optab_table[CTI_sfloat])->handlers[XFmode][SImode].insn_code = CODE_FOR_floatsixf2;
  if (((target_flags & 0x00000001)))
    (convert_optab_table[CTI_sfloat])->handlers[XFmode][DImode].insn_code = CODE_FOR_floatdixf2;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_sdiv])->handlers[QImode].insn_code = CODE_FOR_divqi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_udiv])->handlers[QImode].insn_code = CODE_FOR_udivqi3;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_sdivmod])->handlers[HImode].insn_code = CODE_FOR_divmodhi4;
  if ((0))
    (optab_table[OTI_udivmod])->handlers[DImode].insn_code = CODE_FOR_udivmoddi4;
  (optab_table[OTI_udivmod])->handlers[SImode].insn_code = CODE_FOR_udivmodsi4;
  (optab_table[OTI_ctz])->handlers[SImode].insn_code = CODE_FOR_ctzsi2;
  if ((0))
    (optab_table[OTI_ctz])->handlers[DImode].insn_code = CODE_FOR_ctzdi2;
  if (((target_flags & 0x00000001) && !(target_flags & 0x00000040) && ((target_flags & 0x00000010) || flag_unsafe_math_optimizations) ))
    (optab_table[OTI_sqrt])->handlers[XFmode].insn_code = CODE_FOR_sqrtxf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_sincos])->handlers[DFmode].insn_code = CODE_FOR_sincosdf3;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_sincos])->handlers[SFmode].insn_code = CODE_FOR_sincossf3;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_sincos])->handlers[XFmode].insn_code = CODE_FOR_sincosxf3;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_addv])->handlers[V4SFmode].insn_code =
    (optab_table[OTI_add])->handlers[V4SFmode].insn_code = CODE_FOR_addv4sf3;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_subv])->handlers[V4SFmode].insn_code =
    (optab_table[OTI_sub])->handlers[V4SFmode].insn_code = CODE_FOR_subv4sf3;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_smulv])->handlers[V4SFmode].insn_code =
    (optab_table[OTI_smul])->handlers[V4SFmode].insn_code = CODE_FOR_mulv4sf3;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_sdiv])->handlers[V4SFmode].insn_code = CODE_FOR_divv4sf3;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_sqrt])->handlers[V4SFmode].insn_code = CODE_FOR_sqrtv4sf2;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_add])->handlers[V8QImode].insn_code = CODE_FOR_addv8qi3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_add])->handlers[V4HImode].insn_code = CODE_FOR_addv4hi3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_add])->handlers[V2SImode].insn_code = CODE_FOR_addv2si3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_sub])->handlers[V8QImode].insn_code = CODE_FOR_subv8qi3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_sub])->handlers[V4HImode].insn_code = CODE_FOR_subv4hi3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_sub])->handlers[V2SImode].insn_code = CODE_FOR_subv2si3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_smul])->handlers[V4HImode].insn_code = CODE_FOR_mulv4hi3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_smul_highpart])->handlers[V4HImode].insn_code = CODE_FOR_smulv4hi3_highpart;
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    (optab_table[OTI_umul_highpart])->handlers[V4HImode].insn_code = CODE_FOR_umulv4hi3_highpart;
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    (optab_table[OTI_umax])->handlers[V8QImode].insn_code = CODE_FOR_umaxv8qi3;
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    (optab_table[OTI_smax])->handlers[V4HImode].insn_code = CODE_FOR_smaxv4hi3;
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    (optab_table[OTI_umin])->handlers[V8QImode].insn_code = CODE_FOR_uminv8qi3;
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    (optab_table[OTI_smin])->handlers[V4HImode].insn_code = CODE_FOR_sminv4hi3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_ashr])->handlers[V4HImode].insn_code = CODE_FOR_ashrv4hi3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_ashr])->handlers[V2SImode].insn_code = CODE_FOR_ashrv2si3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_lshr])->handlers[V4HImode].insn_code = CODE_FOR_lshrv4hi3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_lshr])->handlers[V2SImode].insn_code = CODE_FOR_lshrv2si3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_ashl])->handlers[V4HImode].insn_code = CODE_FOR_ashlv4hi3;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_ashl])->handlers[V2SImode].insn_code = CODE_FOR_ashlv2si3;
  if ((((target_flags & 0x00020000) != 0)))
    (optab_table[OTI_addv])->handlers[V2SFmode].insn_code =
    (optab_table[OTI_add])->handlers[V2SFmode].insn_code = CODE_FOR_addv2sf3;
  if ((((target_flags & 0x00020000) != 0)))
    (optab_table[OTI_subv])->handlers[V2SFmode].insn_code =
    (optab_table[OTI_sub])->handlers[V2SFmode].insn_code = CODE_FOR_subv2sf3;
  if ((((target_flags & 0x00020000) != 0)))
    (optab_table[OTI_smulv])->handlers[V2SFmode].insn_code =
    (optab_table[OTI_smul])->handlers[V2SFmode].insn_code = CODE_FOR_mulv2sf3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_addv])->handlers[V2DFmode].insn_code =
    (optab_table[OTI_add])->handlers[V2DFmode].insn_code = CODE_FOR_addv2df3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_subv])->handlers[V2DFmode].insn_code =
    (optab_table[OTI_sub])->handlers[V2DFmode].insn_code = CODE_FOR_subv2df3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_smulv])->handlers[V2DFmode].insn_code =
    (optab_table[OTI_smul])->handlers[V2DFmode].insn_code = CODE_FOR_mulv2df3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_sdiv])->handlers[V2DFmode].insn_code = CODE_FOR_divv2df3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_sqrt])->handlers[V2DFmode].insn_code = CODE_FOR_sqrtv2df2;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_add])->handlers[V16QImode].insn_code = CODE_FOR_addv16qi3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_add])->handlers[V8HImode].insn_code = CODE_FOR_addv8hi3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_add])->handlers[V4SImode].insn_code = CODE_FOR_addv4si3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_add])->handlers[V2DImode].insn_code = CODE_FOR_addv2di3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_sub])->handlers[V16QImode].insn_code = CODE_FOR_subv16qi3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_sub])->handlers[V8HImode].insn_code = CODE_FOR_subv8hi3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_sub])->handlers[V4SImode].insn_code = CODE_FOR_subv4si3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_sub])->handlers[V2DImode].insn_code = CODE_FOR_subv2di3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_smul])->handlers[V8HImode].insn_code = CODE_FOR_mulv8hi3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_smul_highpart])->handlers[V8HImode].insn_code = CODE_FOR_smulv8hi3_highpart;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_umul_highpart])->handlers[V8HImode].insn_code = CODE_FOR_umulv8hi3_highpart;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_umax])->handlers[V16QImode].insn_code = CODE_FOR_umaxv16qi3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_smax])->handlers[V8HImode].insn_code = CODE_FOR_smaxv8hi3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_umin])->handlers[V16QImode].insn_code = CODE_FOR_uminv16qi3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_smin])->handlers[V8HImode].insn_code = CODE_FOR_sminv8hi3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_ashr])->handlers[V8HImode].insn_code = CODE_FOR_ashrv8hi3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_ashr])->handlers[V4SImode].insn_code = CODE_FOR_ashrv4si3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_lshr])->handlers[V8HImode].insn_code = CODE_FOR_lshrv8hi3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_lshr])->handlers[V4SImode].insn_code = CODE_FOR_lshrv4si3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_lshr])->handlers[V2DImode].insn_code = CODE_FOR_lshrv2di3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_ashl])->handlers[V8HImode].insn_code = CODE_FOR_ashlv8hi3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_ashl])->handlers[V4SImode].insn_code = CODE_FOR_ashlv4si3;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_ashl])->handlers[V2DImode].insn_code = CODE_FOR_ashlv2di3;
  (optab_table[OTI_cmp])->handlers[DImode].insn_code = CODE_FOR_cmpdi;
  (optab_table[OTI_cmp])->handlers[SImode].insn_code = CODE_FOR_cmpsi;
  (optab_table[OTI_cmp])->handlers[HImode].insn_code = CODE_FOR_cmphi;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_cmp])->handlers[QImode].insn_code = CODE_FOR_cmpqi;
  if (((target_flags & 0x00000001)))
    (optab_table[OTI_cmp])->handlers[XFmode].insn_code = CODE_FOR_cmpxf;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_cmp])->handlers[DFmode].insn_code = CODE_FOR_cmpdf;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_cmp])->handlers[SFmode].insn_code = CODE_FOR_cmpsf;
  (optab_table[OTI_mov])->handlers[SImode].insn_code = CODE_FOR_movsi;
  (optab_table[OTI_mov])->handlers[HImode].insn_code = CODE_FOR_movhi;
  if ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size))
    (optab_table[OTI_movstrict])->handlers[HImode].insn_code = CODE_FOR_movstricthi;
  (optab_table[OTI_mov])->handlers[QImode].insn_code = CODE_FOR_movqi;
  reload_out_optab[QImode] = CODE_FOR_reload_outqi;
  if ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size))
    (optab_table[OTI_movstrict])->handlers[QImode].insn_code = CODE_FOR_movstrictqi;
  (optab_table[OTI_mov])->handlers[DImode].insn_code = CODE_FOR_movdi;
  (optab_table[OTI_mov])->handlers[SFmode].insn_code = CODE_FOR_movsf;
  (optab_table[OTI_mov])->handlers[DFmode].insn_code = CODE_FOR_movdf;
  (optab_table[OTI_mov])->handlers[XFmode].insn_code = CODE_FOR_movxf;
  (convert_optab_table[CTI_zext])->handlers[SImode][HImode].insn_code = CODE_FOR_zero_extendhisi2;
  (convert_optab_table[CTI_zext])->handlers[HImode][QImode].insn_code = CODE_FOR_zero_extendqihi2;
  (convert_optab_table[CTI_zext])->handlers[SImode][QImode].insn_code = CODE_FOR_zero_extendqisi2;
  (convert_optab_table[CTI_zext])->handlers[DImode][SImode].insn_code = CODE_FOR_zero_extendsidi2;
  (convert_optab_table[CTI_sext])->handlers[DImode][SImode].insn_code = CODE_FOR_extendsidi2;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00008000) != 0)))
    (convert_optab_table[CTI_sext])->handlers[DFmode][SFmode].insn_code = CODE_FOR_extendsfdf2;
  if (((target_flags & 0x00000001)))
    (convert_optab_table[CTI_sext])->handlers[XFmode][SFmode].insn_code = CODE_FOR_extendsfxf2;
  if (((target_flags & 0x00000001)))
    (convert_optab_table[CTI_sext])->handlers[XFmode][DFmode].insn_code = CODE_FOR_extenddfxf2;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00008000) != 0)))
    (convert_optab_table[CTI_trunc])->handlers[SFmode][DFmode].insn_code = CODE_FOR_truncdfsf2;
  if (((target_flags & 0x00000001)))
    (convert_optab_table[CTI_trunc])->handlers[SFmode][XFmode].insn_code = CODE_FOR_truncxfsf2;
  if (((target_flags & 0x00000001)))
    (convert_optab_table[CTI_trunc])->handlers[DFmode][XFmode].insn_code = CODE_FOR_truncxfdf2;
  if (((target_flags & 0x00000001)))
    (convert_optab_table[CTI_sfixtrunc])->handlers[DImode][XFmode].insn_code = CODE_FOR_fix_truncxfdi2;
  if (((target_flags & 0x00000001) || (((target_flags & 0x00008000) != 0) && 0)))
    (convert_optab_table[CTI_sfixtrunc])->handlers[DImode][DFmode].insn_code = CODE_FOR_fix_truncdfdi2;
  if (((target_flags & 0x00000001) || (((target_flags & 0x00004000) != 0) && 0)))
    (convert_optab_table[CTI_sfixtrunc])->handlers[DImode][SFmode].insn_code = CODE_FOR_fix_truncsfdi2;
  if (((target_flags & 0x00000001)))
    (convert_optab_table[CTI_sfixtrunc])->handlers[SImode][XFmode].insn_code = CODE_FOR_fix_truncxfsi2;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00008000) != 0)))
    (convert_optab_table[CTI_sfixtrunc])->handlers[SImode][DFmode].insn_code = CODE_FOR_fix_truncdfsi2;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    (convert_optab_table[CTI_sfixtrunc])->handlers[SImode][SFmode].insn_code = CODE_FOR_fix_truncsfsi2;
  if (((target_flags & 0x00000001)))
    (convert_optab_table[CTI_sfixtrunc])->handlers[HImode][XFmode].insn_code = CODE_FOR_fix_truncxfhi2;
  if (((target_flags & 0x00000001) && !((target_flags & 0x00008000) != 0)))
    (convert_optab_table[CTI_sfixtrunc])->handlers[HImode][DFmode].insn_code = CODE_FOR_fix_truncdfhi2;
  if (((target_flags & 0x00000001) && !((target_flags & 0x00004000) != 0)))
    (convert_optab_table[CTI_sfixtrunc])->handlers[HImode][SFmode].insn_code = CODE_FOR_fix_truncsfhi2;
  if ((((target_flags & 0x00004000) != 0) || (target_flags & 0x00000001)))
    (convert_optab_table[CTI_sfloat])->handlers[SFmode][HImode].insn_code = CODE_FOR_floathisf2;
  if ((((target_flags & 0x00004000) != 0) || (target_flags & 0x00000001)))
    (convert_optab_table[CTI_sfloat])->handlers[SFmode][SImode].insn_code = CODE_FOR_floatsisf2;
  if (((0 && ((target_flags & 0x00004000) != 0)) || (target_flags & 0x00000001)))
    (convert_optab_table[CTI_sfloat])->handlers[SFmode][DImode].insn_code = CODE_FOR_floatdisf2;
  if ((((target_flags & 0x00008000) != 0) || (target_flags & 0x00000001)))
    (convert_optab_table[CTI_sfloat])->handlers[DFmode][HImode].insn_code = CODE_FOR_floathidf2;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00008000) != 0)))
    (convert_optab_table[CTI_sfloat])->handlers[DFmode][SImode].insn_code = CODE_FOR_floatsidf2;
  if (((0 && ((target_flags & 0x00008000) != 0)) || (target_flags & 0x00000001)))
    (convert_optab_table[CTI_sfloat])->handlers[DFmode][DImode].insn_code = CODE_FOR_floatdidf2;
  if ((((target_flags & 0x00004000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && !0))
    (convert_optab_table[CTI_ufloat])->handlers[SFmode][SImode].insn_code = CODE_FOR_floatunssisf2;
  if ((((target_flags & 0x00004000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && 0))
    (convert_optab_table[CTI_ufloat])->handlers[SFmode][DImode].insn_code = CODE_FOR_floatunsdisf2;
  if ((((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && 0))
    (convert_optab_table[CTI_ufloat])->handlers[DFmode][DImode].insn_code = CODE_FOR_floatunsdidf2;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_vec_set])->handlers[V2DFmode].insn_code = CODE_FOR_vec_setv2df;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_vec_extract])->handlers[V2DFmode].insn_code = CODE_FOR_vec_extractv2df;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_vec_init])->handlers[V2DFmode].insn_code = CODE_FOR_vec_initv2df;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_vec_set])->handlers[V4SFmode].insn_code = CODE_FOR_vec_setv4sf;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_vec_extract])->handlers[V4SFmode].insn_code = CODE_FOR_vec_extractv4sf;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_vec_init])->handlers[V4SFmode].insn_code = CODE_FOR_vec_initv4sf;
  (optab_table[OTI_add])->handlers[DImode].insn_code = CODE_FOR_adddi3;
  (optab_table[OTI_add])->handlers[SImode].insn_code = CODE_FOR_addsi3;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_add])->handlers[HImode].insn_code = CODE_FOR_addhi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_add])->handlers[QImode].insn_code = CODE_FOR_addqi3;
  if (((target_flags & 0x00000001)))
    (optab_table[OTI_addv])->handlers[XFmode].insn_code =
    (optab_table[OTI_add])->handlers[XFmode].insn_code = CODE_FOR_addxf3;
  if (((target_flags & 0x00000001) || (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0))))
    (optab_table[OTI_addv])->handlers[DFmode].insn_code =
    (optab_table[OTI_add])->handlers[DFmode].insn_code = CODE_FOR_adddf3;
  if (((target_flags & 0x00000001) || ((ix86_fpmath & FPMATH_SSE) != 0)))
    (optab_table[OTI_addv])->handlers[SFmode].insn_code =
    (optab_table[OTI_add])->handlers[SFmode].insn_code = CODE_FOR_addsf3;
  (optab_table[OTI_sub])->handlers[DImode].insn_code = CODE_FOR_subdi3;
  (optab_table[OTI_sub])->handlers[SImode].insn_code = CODE_FOR_subsi3;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_sub])->handlers[HImode].insn_code = CODE_FOR_subhi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_sub])->handlers[QImode].insn_code = CODE_FOR_subqi3;
  if (((target_flags & 0x00000001)))
    (optab_table[OTI_subv])->handlers[XFmode].insn_code =
    (optab_table[OTI_sub])->handlers[XFmode].insn_code = CODE_FOR_subxf3;
  if (((target_flags & 0x00000001) || (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0))))
    (optab_table[OTI_subv])->handlers[DFmode].insn_code =
    (optab_table[OTI_sub])->handlers[DFmode].insn_code = CODE_FOR_subdf3;
  if (((target_flags & 0x00000001) || ((ix86_fpmath & FPMATH_SSE) != 0)))
    (optab_table[OTI_subv])->handlers[SFmode].insn_code =
    (optab_table[OTI_sub])->handlers[SFmode].insn_code = CODE_FOR_subsf3;
  if ((0))
    (optab_table[OTI_smul])->handlers[DImode].insn_code = CODE_FOR_muldi3;
  (optab_table[OTI_smul])->handlers[SImode].insn_code = CODE_FOR_mulsi3;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_smul])->handlers[HImode].insn_code = CODE_FOR_mulhi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_smul])->handlers[QImode].insn_code = CODE_FOR_mulqi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_umul_widen])->handlers[HImode].insn_code = CODE_FOR_umulqihi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_smul_widen])->handlers[HImode].insn_code = CODE_FOR_mulqihi3;
  if ((0))
    (optab_table[OTI_umul_widen])->handlers[TImode].insn_code = CODE_FOR_umulditi3;
  if ((!0))
    (optab_table[OTI_umul_widen])->handlers[DImode].insn_code = CODE_FOR_umulsidi3;
  if ((0))
    (optab_table[OTI_smul_widen])->handlers[TImode].insn_code = CODE_FOR_mulditi3;
  if ((!0))
    (optab_table[OTI_smul_widen])->handlers[DImode].insn_code = CODE_FOR_mulsidi3;
  if ((0))
    (optab_table[OTI_umul_highpart])->handlers[DImode].insn_code = CODE_FOR_umuldi3_highpart;
  (optab_table[OTI_umul_highpart])->handlers[SImode].insn_code = CODE_FOR_umulsi3_highpart;
  if ((0))
    (optab_table[OTI_smul_highpart])->handlers[DImode].insn_code = CODE_FOR_smuldi3_highpart;
  (optab_table[OTI_smul_highpart])->handlers[SImode].insn_code = CODE_FOR_smulsi3_highpart;
  if (((target_flags & 0x00000001)))
    (optab_table[OTI_smulv])->handlers[XFmode].insn_code =
    (optab_table[OTI_smul])->handlers[XFmode].insn_code = CODE_FOR_mulxf3;
  if (((target_flags & 0x00000001) || (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0))))
    (optab_table[OTI_smulv])->handlers[DFmode].insn_code =
    (optab_table[OTI_smul])->handlers[DFmode].insn_code = CODE_FOR_muldf3;
  if (((target_flags & 0x00000001) || ((ix86_fpmath & FPMATH_SSE) != 0)))
    (optab_table[OTI_smulv])->handlers[SFmode].insn_code =
    (optab_table[OTI_smul])->handlers[SFmode].insn_code = CODE_FOR_mulsf3;
  if (((target_flags & 0x00000001)))
    (optab_table[OTI_sdiv])->handlers[XFmode].insn_code = CODE_FOR_divxf3;
  if (((target_flags & 0x00000001) || (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0))))
    (optab_table[OTI_sdiv])->handlers[DFmode].insn_code = CODE_FOR_divdf3;
  if (((target_flags & 0x00000001) || ((ix86_fpmath & FPMATH_SSE) != 0)))
    (optab_table[OTI_sdiv])->handlers[SFmode].insn_code = CODE_FOR_divsf3;
  if ((0))
    (optab_table[OTI_sdivmod])->handlers[DImode].insn_code = CODE_FOR_divmoddi4;
  (optab_table[OTI_sdivmod])->handlers[SImode].insn_code = CODE_FOR_divmodsi4;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_udivmod])->handlers[HImode].insn_code = CODE_FOR_udivmodhi4;
  if ((0))
    (optab_table[OTI_and])->handlers[DImode].insn_code = CODE_FOR_anddi3;
  (optab_table[OTI_and])->handlers[SImode].insn_code = CODE_FOR_andsi3;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_and])->handlers[HImode].insn_code = CODE_FOR_andhi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_and])->handlers[QImode].insn_code = CODE_FOR_andqi3;
  if ((0))
    (optab_table[OTI_ior])->handlers[DImode].insn_code = CODE_FOR_iordi3;
  (optab_table[OTI_ior])->handlers[SImode].insn_code = CODE_FOR_iorsi3;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_ior])->handlers[HImode].insn_code = CODE_FOR_iorhi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_ior])->handlers[QImode].insn_code = CODE_FOR_iorqi3;
  if ((0))
    (optab_table[OTI_xor])->handlers[DImode].insn_code = CODE_FOR_xordi3;
  (optab_table[OTI_xor])->handlers[SImode].insn_code = CODE_FOR_xorsi3;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_xor])->handlers[HImode].insn_code = CODE_FOR_xorhi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_xor])->handlers[QImode].insn_code = CODE_FOR_xorqi3;
  (optab_table[OTI_neg])->handlers[DImode].insn_code = CODE_FOR_negdi2;
  (optab_table[OTI_neg])->handlers[SImode].insn_code = CODE_FOR_negsi2;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_neg])->handlers[HImode].insn_code = CODE_FOR_neghi2;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_neg])->handlers[QImode].insn_code = CODE_FOR_negqi2;
  if (((target_flags & 0x00000001)))
    (optab_table[OTI_negv])->handlers[SFmode].insn_code =
    (optab_table[OTI_neg])->handlers[SFmode].insn_code = CODE_FOR_negsf2;
  if (((target_flags & 0x00000001)))
    (optab_table[OTI_negv])->handlers[DFmode].insn_code =
    (optab_table[OTI_neg])->handlers[DFmode].insn_code = CODE_FOR_negdf2;
  if (((target_flags & 0x00000001)))
    (optab_table[OTI_negv])->handlers[XFmode].insn_code =
    (optab_table[OTI_neg])->handlers[XFmode].insn_code = CODE_FOR_negxf2;
  if (((target_flags & 0x00000001)))
    (optab_table[OTI_absv])->handlers[SFmode].insn_code =
    (optab_table[OTI_abs])->handlers[SFmode].insn_code = CODE_FOR_abssf2;
  if (((target_flags & 0x00000001)))
    (optab_table[OTI_absv])->handlers[DFmode].insn_code =
    (optab_table[OTI_abs])->handlers[DFmode].insn_code = CODE_FOR_absdf2;
  if (((target_flags & 0x00000001)))
    (optab_table[OTI_absv])->handlers[XFmode].insn_code =
    (optab_table[OTI_abs])->handlers[XFmode].insn_code = CODE_FOR_absxf2;
  if ((0))
    (optab_table[OTI_one_cmpl])->handlers[DImode].insn_code = CODE_FOR_one_cmpldi2;
  (optab_table[OTI_one_cmpl])->handlers[SImode].insn_code = CODE_FOR_one_cmplsi2;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_one_cmpl])->handlers[HImode].insn_code = CODE_FOR_one_cmplhi2;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_one_cmpl])->handlers[QImode].insn_code = CODE_FOR_one_cmplqi2;
  (optab_table[OTI_ashl])->handlers[DImode].insn_code = CODE_FOR_ashldi3;
  (optab_table[OTI_ashl])->handlers[SImode].insn_code = CODE_FOR_ashlsi3;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_ashl])->handlers[HImode].insn_code = CODE_FOR_ashlhi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_ashl])->handlers[QImode].insn_code = CODE_FOR_ashlqi3;
  (optab_table[OTI_ashr])->handlers[DImode].insn_code = CODE_FOR_ashrdi3;
  (optab_table[OTI_ashr])->handlers[SImode].insn_code = CODE_FOR_ashrsi3;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_ashr])->handlers[HImode].insn_code = CODE_FOR_ashrhi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_ashr])->handlers[QImode].insn_code = CODE_FOR_ashrqi3;
  (optab_table[OTI_lshr])->handlers[DImode].insn_code = CODE_FOR_lshrdi3;
  (optab_table[OTI_lshr])->handlers[SImode].insn_code = CODE_FOR_lshrsi3;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_lshr])->handlers[HImode].insn_code = CODE_FOR_lshrhi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_lshr])->handlers[QImode].insn_code = CODE_FOR_lshrqi3;
  if ((0))
    (optab_table[OTI_rotl])->handlers[DImode].insn_code = CODE_FOR_rotldi3;
  (optab_table[OTI_rotl])->handlers[SImode].insn_code = CODE_FOR_rotlsi3;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_rotl])->handlers[HImode].insn_code = CODE_FOR_rotlhi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_rotl])->handlers[QImode].insn_code = CODE_FOR_rotlqi3;
  if ((0))
    (optab_table[OTI_rotr])->handlers[DImode].insn_code = CODE_FOR_rotrdi3;
  (optab_table[OTI_rotr])->handlers[SImode].insn_code = CODE_FOR_rotrsi3;
  if (((x86_himode_math & (1 << ix86_tune))))
    (optab_table[OTI_rotr])->handlers[HImode].insn_code = CODE_FOR_rotrhi3;
  if (((x86_qimode_math & (1 << ix86_tune))))
    (optab_table[OTI_rotr])->handlers[QImode].insn_code = CODE_FOR_rotrqi3;
  setcc_gen_code[EQ] = CODE_FOR_seq;
  setcc_gen_code[NE] = CODE_FOR_sne;
  setcc_gen_code[GT] = CODE_FOR_sgt;
  setcc_gen_code[GTU] = CODE_FOR_sgtu;
  setcc_gen_code[LT] = CODE_FOR_slt;
  setcc_gen_code[LTU] = CODE_FOR_sltu;
  setcc_gen_code[GE] = CODE_FOR_sge;
  setcc_gen_code[GEU] = CODE_FOR_sgeu;
  setcc_gen_code[LE] = CODE_FOR_sle;
  setcc_gen_code[LEU] = CODE_FOR_sleu;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    setcc_gen_code[UNORDERED] = CODE_FOR_sunordered;
  if (((target_flags & 0x00000001)))
    setcc_gen_code[ORDERED] = CODE_FOR_sordered;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    setcc_gen_code[UNEQ] = CODE_FOR_suneq;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    setcc_gen_code[UNGE] = CODE_FOR_sunge;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    setcc_gen_code[UNGT] = CODE_FOR_sungt;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    setcc_gen_code[UNLE] = CODE_FOR_sunle;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    setcc_gen_code[UNLT] = CODE_FOR_sunlt;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    setcc_gen_code[LTGT] = CODE_FOR_sltgt;
  bcc_gen_fctn[EQ] = gen_beq;
  bcc_gen_fctn[NE] = gen_bne;
  bcc_gen_fctn[GT] = gen_bgt;
  bcc_gen_fctn[GTU] = gen_bgtu;
  bcc_gen_fctn[LT] = gen_blt;
  bcc_gen_fctn[LTU] = gen_bltu;
  bcc_gen_fctn[GE] = gen_bge;
  bcc_gen_fctn[GEU] = gen_bgeu;
  bcc_gen_fctn[LE] = gen_ble;
  bcc_gen_fctn[LEU] = gen_bleu;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    bcc_gen_fctn[UNORDERED] = gen_bunordered;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    bcc_gen_fctn[ORDERED] = gen_bordered;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    bcc_gen_fctn[UNEQ] = gen_buneq;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    bcc_gen_fctn[UNGE] = gen_bunge;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    bcc_gen_fctn[UNGT] = gen_bungt;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    bcc_gen_fctn[UNLE] = gen_bunle;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    bcc_gen_fctn[UNLT] = gen_bunlt;
  if (((target_flags & 0x00000001) || ((target_flags & 0x00004000) != 0)))
    bcc_gen_fctn[LTGT] = gen_bltgt;
  (optab_table[OTI_ffs])->handlers[SImode].insn_code = CODE_FOR_ffssi2;
  if ((0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))))
    (optab_table[OTI_ffs])->handlers[DImode].insn_code = CODE_FOR_ffsdi2;
  (optab_table[OTI_clz])->handlers[SImode].insn_code = CODE_FOR_clzsi2;
  if ((0))
    (optab_table[OTI_clz])->handlers[DImode].insn_code = CODE_FOR_clzdi2;
  if (((! (target_flags & 0x00000040) && (target_flags & 0x00000001)) || ((ix86_fpmath & FPMATH_SSE) != 0)))
    (optab_table[OTI_sqrt])->handlers[SFmode].insn_code = CODE_FOR_sqrtsf2;
  if (((! (target_flags & 0x00000040) && (target_flags & 0x00000001)) || (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0))))
    (optab_table[OTI_sqrt])->handlers[DFmode].insn_code = CODE_FOR_sqrtdf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_fmod])->handlers[SFmode].insn_code = CODE_FOR_fmodsf3;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_fmod])->handlers[DFmode].insn_code = CODE_FOR_fmoddf3;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_fmod])->handlers[XFmode].insn_code = CODE_FOR_fmodxf3;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_drem])->handlers[SFmode].insn_code = CODE_FOR_dremsf3;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_drem])->handlers[DFmode].insn_code = CODE_FOR_dremdf3;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_drem])->handlers[XFmode].insn_code = CODE_FOR_dremxf3;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_tan])->handlers[DFmode].insn_code = CODE_FOR_tandf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_tan])->handlers[SFmode].insn_code = CODE_FOR_tansf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_tan])->handlers[XFmode].insn_code = CODE_FOR_tanxf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_atan2])->handlers[DFmode].insn_code = CODE_FOR_atan2df3;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_atan])->handlers[DFmode].insn_code = CODE_FOR_atandf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_atan2])->handlers[SFmode].insn_code = CODE_FOR_atan2sf3;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_atan])->handlers[SFmode].insn_code = CODE_FOR_atansf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_atan2])->handlers[XFmode].insn_code = CODE_FOR_atan2xf3;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_atan])->handlers[XFmode].insn_code = CODE_FOR_atanxf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_asin])->handlers[DFmode].insn_code = CODE_FOR_asindf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_asin])->handlers[SFmode].insn_code = CODE_FOR_asinsf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_asin])->handlers[XFmode].insn_code = CODE_FOR_asinxf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_acos])->handlers[DFmode].insn_code = CODE_FOR_acosdf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_acos])->handlers[SFmode].insn_code = CODE_FOR_acossf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_acos])->handlers[XFmode].insn_code = CODE_FOR_acosxf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_log])->handlers[SFmode].insn_code = CODE_FOR_logsf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_log])->handlers[DFmode].insn_code = CODE_FOR_logdf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_log])->handlers[XFmode].insn_code = CODE_FOR_logxf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_log10])->handlers[SFmode].insn_code = CODE_FOR_log10sf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_log10])->handlers[DFmode].insn_code = CODE_FOR_log10df2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_log10])->handlers[XFmode].insn_code = CODE_FOR_log10xf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_log2])->handlers[SFmode].insn_code = CODE_FOR_log2sf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_log2])->handlers[DFmode].insn_code = CODE_FOR_log2df2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_log2])->handlers[XFmode].insn_code = CODE_FOR_log2xf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_log1p])->handlers[SFmode].insn_code = CODE_FOR_log1psf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_log1p])->handlers[DFmode].insn_code = CODE_FOR_log1pdf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_log1p])->handlers[XFmode].insn_code = CODE_FOR_log1pxf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_logb])->handlers[SFmode].insn_code = CODE_FOR_logbsf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_logb])->handlers[DFmode].insn_code = CODE_FOR_logbdf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_logb])->handlers[XFmode].insn_code = CODE_FOR_logbxf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_ilogb])->handlers[SImode].insn_code = CODE_FOR_ilogbsi2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_exp])->handlers[SFmode].insn_code = CODE_FOR_expsf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_exp])->handlers[DFmode].insn_code = CODE_FOR_expdf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_exp])->handlers[XFmode].insn_code = CODE_FOR_expxf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_exp10])->handlers[SFmode].insn_code = CODE_FOR_exp10sf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_exp10])->handlers[DFmode].insn_code = CODE_FOR_exp10df2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_exp10])->handlers[XFmode].insn_code = CODE_FOR_exp10xf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_exp2])->handlers[SFmode].insn_code = CODE_FOR_exp2sf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_exp2])->handlers[DFmode].insn_code = CODE_FOR_exp2df2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_exp2])->handlers[XFmode].insn_code = CODE_FOR_exp2xf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_expm1])->handlers[DFmode].insn_code = CODE_FOR_expm1df2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_expm1])->handlers[SFmode].insn_code = CODE_FOR_expm1sf2;
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    (optab_table[OTI_expm1])->handlers[XFmode].insn_code = CODE_FOR_expm1xf2;
  if ((! optimize_size))
    movstr_optab[SImode] = CODE_FOR_movstrsi;
  if ((0))
    movstr_optab[DImode] = CODE_FOR_movstrdi;
  clrstr_optab[SImode] = CODE_FOR_clrstrsi;
  if ((0))
    clrstr_optab[DImode] = CODE_FOR_clrstrdi;
  if ((! optimize_size || (target_flags & 0x00000400)))
    cmpstr_optab[SImode] = CODE_FOR_cmpstrsi;
  (optab_table[OTI_strlen])->handlers[SImode].insn_code = CODE_FOR_strlensi;
  (optab_table[OTI_strlen])->handlers[DImode].insn_code = CODE_FOR_strlendi;
  if ((0))
    movcc_gen_code[DImode] = CODE_FOR_movdicc;
  movcc_gen_code[SImode] = CODE_FOR_movsicc;
  if (((x86_himode_math & (1 << ix86_tune))))
    movcc_gen_code[HImode] = CODE_FOR_movhicc;
  if (((x86_qimode_math & (1 << ix86_tune))))
    movcc_gen_code[QImode] = CODE_FOR_movqicc;
  if ((((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))))
    movcc_gen_code[SFmode] = CODE_FOR_movsfcc;
  if ((((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))))
    movcc_gen_code[DFmode] = CODE_FOR_movdfcc;
  if ((((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))))
    movcc_gen_code[XFmode] = CODE_FOR_movxfcc;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_smin])->handlers[SFmode].insn_code = CODE_FOR_minsf3;
  (optab_table[OTI_addcc])->handlers[QImode].insn_code = CODE_FOR_addqicc;
  (optab_table[OTI_addcc])->handlers[HImode].insn_code = CODE_FOR_addhicc;
  (optab_table[OTI_addcc])->handlers[SImode].insn_code = CODE_FOR_addsicc;
  if ((0))
    (optab_table[OTI_addcc])->handlers[DImode].insn_code = CODE_FOR_adddicc;
  if ((((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0)))
    (optab_table[OTI_smin])->handlers[DFmode].insn_code = CODE_FOR_mindf3;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_smax])->handlers[SFmode].insn_code = CODE_FOR_maxsf3;
  if ((((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0)))
    (optab_table[OTI_smax])->handlers[DFmode].insn_code = CODE_FOR_maxdf3;
  if ((((target_flags & 0x00004000) != 0) || 0))
    (optab_table[OTI_mov])->handlers[TImode].insn_code = CODE_FOR_movti;
  if ((0))
    (optab_table[OTI_mov])->handlers[TFmode].insn_code = CODE_FOR_movtf;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_mov])->handlers[V2DFmode].insn_code = CODE_FOR_movv2df;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_mov])->handlers[V8HImode].insn_code = CODE_FOR_movv8hi;
  if ((((target_flags & 0x00008000) != 0)))
    (optab_table[OTI_mov])->handlers[V16QImode].insn_code = CODE_FOR_movv16qi;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_mov])->handlers[V4SFmode].insn_code = CODE_FOR_movv4sf;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_mov])->handlers[V4SImode].insn_code = CODE_FOR_movv4si;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_mov])->handlers[V2DImode].insn_code = CODE_FOR_movv2di;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_mov])->handlers[V2SImode].insn_code = CODE_FOR_movv2si;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_mov])->handlers[V4HImode].insn_code = CODE_FOR_movv4hi;
  if ((((target_flags & 0x00002000) != 0)))
    (optab_table[OTI_mov])->handlers[V8QImode].insn_code = CODE_FOR_movv8qi;
  if ((((target_flags & 0x00020000) != 0)))
    (optab_table[OTI_mov])->handlers[V2SFmode].insn_code = CODE_FOR_movv2sf;
  if ((((target_flags & 0x00004000) != 0)))
    (optab_table[OTI_negv])->handlers[V4SFmode].insn_code =
    (optab_table[OTI_neg])->handlers[V4SFmode].insn_code = CODE_FOR_negv4sf2;
}
static const char * const output_0[] = {
  "test{q}\t{%0, %0|%0, %0}",
  "cmp{q}\t{%1, %0|%0, %1}"
};
static const char * const output_3[] = {
  "test{l}\t{%0, %0|%0, %0}",
  "cmp{l}\t{%1, %0|%0, %1}"
};
static const char * const output_6[] = {
  "test{w}\t{%0, %0|%0, %0}",
  "cmp{w}\t{%1, %0|%0, %1}"
};
static const char * const output_9[] = {
  "test{b}\t{%0, %0|%0, %0}",
  "cmp{b}\t{$0, %0|%0, 0}"
};
static const char *
output_18 (rtx *operands , rtx insn )
{
{
  if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
    return "ftst\n\tfnstsw\t%0\n\tfstp\t%y0";
  else
    return "ftst\n\tfnstsw\t%0";
}
}
static const char *
output_19 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 0, 0);
}
static const char *
output_20 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 2, 0);
}
static const char *
output_21 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 0, 0);
}
static const char *
output_22 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 2, 0);
}
static const char *
output_23 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 0, 0);
}
static const char *
output_24 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 2, 0);
}
static const char *
output_25 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 0, 1);
}
static const char *
output_26 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 2, 1);
}
static const char *
output_30 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 1, 0);
}
static const char *
output_31 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 1, 0);
}
static const char *
output_32 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 1, 0);
}
static const char *
output_33 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 1, 1);
}
static const char *
output_34 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 1, 1);
}
static const char *
output_35 (rtx *operands , rtx insn )
{
 return output_fp_compare (insn, operands, 1, 1);
}
static const char *
output_42 (rtx *operands , rtx insn )
{
{
  operands[1] = (const_int_rtx[64 -1]);
  return "or{l}\t{%1, %0|%0, %1}";
}
}
static const char *
output_43 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_SSEMOV:
      if (get_attr_mode (insn) == MODE_TI)
        return "movdqa\t{%1, %0|%0, %1}";
      return "movd\t{%1, %0|%0, %1}";
    case TYPE_MMXMOV:
      if (get_attr_mode (insn) == MODE_DI)
 return "movq\t{%1, %0|%0, %1}";
      return "movd\t{%1, %0|%0, %1}";
    case TYPE_LEA:
      return "lea{l}\t{%1, %0|%0, %1}";
    default:
      if (flag_pic && !legitimate_pic_operand_p (operands[1]))
 fancy_abort ("gcc.c", 240559, "?");
      return "mov{l}\t{%1, %0|%0, %1}";
    }
}
}
static const char *
output_44 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_SSEMOV:
      if (get_attr_mode (insn) == MODE_TI)
        return "movdqa\t{%1, %0|%0, %1}";
      return "movd\t{%1, %0|%0, %1}";
    case TYPE_MMXMOV:
      if (get_attr_mode (insn) == MODE_DI)
 return "movq\t{%1, %0|%0, %1}";
      return "movd\t{%1, %0|%0, %1}";
    case TYPE_LEA:
      return "lea{l}\t{%1, %0|%0, %1}";
    default:
      if (flag_pic && !legitimate_pic_operand_p (operands[1]))
 fancy_abort ("gcc.c", 240586, "?");
      return "mov{l}\t{%1, %0|%0, %1}";
    }
}
}
static const char * const output_45[] = {
  "movabs{l}\t{%1, %P0|%P0, %1}",
  "mov{l}\t{%1, %a0|%a0, %1}"
};
static const char * const output_46[] = {
  "movabs{l}\t{%P1, %0|%0, %P1}",
  "mov{l}\t{%a1, %0|%0, %a1}"
};
static const char * const output_48[] = {
  "push{w}\t{|WORD PTR }%1",
  "push{w}\t%1"
};
static const char *
output_50 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_IMOVX:
      return "movz{wl|x}\t{%1, %k0|%k0, %1}";
    default:
      if (get_attr_mode (insn) == MODE_SI)
        return "mov{l}\t{%k1, %k0|%k0, %k1}";
      else
        return "mov{w}\t{%1, %0|%0, %1}";
    }
}
}
static const char * const output_51[] = {
  "movabs{w}\t{%1, %P0|%P0, %1}",
  "mov{w}\t{%1, %a0|%a0, %1}"
};
static const char * const output_52[] = {
  "movabs{w}\t{%P1, %0|%0, %P1}",
  "mov{w}\t{%a1, %0|%0, %a1}"
};
static const char * const output_57[] = {
  "push{w}\t{|word ptr }%1",
  "push{w}\t%w1"
};
static const char *
output_59 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_IMOVX:
      if (!(0 ? ((((enum rtx_code) (operands[1])->code) == REG) && (((((operands[1])->u.fld[0]).rtuint)) < 8 || (((((operands[1])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (operands[1])->code) == REG) && (((operands[1])->u.fld[0]).rtuint) < 4)) && ((enum rtx_code) (operands[1])->code) != MEM)
 fancy_abort ("gcc.c", 240649, "?");
      return "movz{bl|x}\t{%1, %k0|%k0, %1}";
    default:
      if (get_attr_mode (insn) == MODE_SI)
        return "mov{l}\t{%k1, %k0|%k0, %k1}";
      else
        return "mov{b}\t{%1, %0|%0, %1}";
    }
}
}
static const char *
output_65 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_IMOVX:
      return "movs{bl|x}\t{%h1, %k0|%k0, %h1}";
    default:
      return "mov{b}\t{%h1, %0|%0, %h1}";
    }
}
}
static const char *
output_66 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_IMOVX:
      return "movs{bl|x}\t{%h1, %k0|%k0, %h1}";
    default:
      return "mov{b}\t{%h1, %0|%0, %h1}";
    }
}
}
static const char * const output_67[] = {
  "movabs{b}\t{%1, %P0|%P0, %1}",
  "mov{b}\t{%1, %a0|%a0, %1}"
};
static const char * const output_68[] = {
  "movabs{b}\t{%P1, %0|%0, %P1}",
  "mov{b}\t{%a1, %0|%0, %a1}"
};
static const char *
output_70 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_IMOVX:
      return "movz{bl|x}\t{%h1, %k0|%k0, %h1}";
    default:
      return "mov{b}\t{%h1, %0|%0, %h1}";
    }
}
}
static const char *
output_71 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_IMOVX:
      return "movz{bl|x}\t{%h1, %k0|%k0, %h1}";
    default:
      return "mov{b}\t{%h1, %0|%0, %h1}";
    }
}
}
static const char * const output_76[] = {
  "push{q}\t%1",
  "#"
};
static const char *
output_81 (rtx *operands , rtx insn )
{
{
  operands[1] = (const_int_rtx[64 -1]);
  return "or{q}\t{%1, %0|%0, %1}";
}
}
static const char * const output_82[] = {
  "#",
  "#",
  "movq\t{%1, %0|%0, %1}",
  "movq\t{%1, %0|%0, %1}",
  "movq\t{%1, %0|%0, %1}",
  "movdqa\t{%1, %0|%0, %1}",
  "movq\t{%1, %0|%0, %1}"
};
static const char *
output_83 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_SSEMOV:
      if (get_attr_mode (insn) == MODE_TI)
   return "movdqa\t{%1, %0|%0, %1}";
    case TYPE_MMXMOV:
      if (((((enum rtx_code) (operands[0])->code) == REG) && (((((operands[0])->u.fld[0]).rtuint)) < 8 || (((((operands[0])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) || ((((enum rtx_code) (operands[1])->code) == REG) && (((((operands[1])->u.fld[0]).rtuint)) < 8 || (((((operands[1])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))))
   return "movd\t{%1, %0|%0, %1}";
      return "movq\t{%1, %0|%0, %1}";
    case TYPE_MULTI:
      return "#";
    case TYPE_LEA:
      return "lea{q}\t{%a1, %0|%0, %a1}";
    default:
      if (flag_pic && !legitimate_pic_operand_p (operands[1]))
 fancy_abort ("gcc.c", 240772, "?");
      if (get_attr_mode (insn) == MODE_SI)
 return "mov{l}\t{%k1, %k0|%k0, %k1}";
      else if (which_alternative == 2)
 return "movabs{q}\t{%1, %0|%0, %1}";
      else
 return "mov{q}\t{%1, %0|%0, %1}";
    }
}
}
static const char *
output_84 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_SSEMOV:
      if (get_attr_mode (insn) == MODE_TI)
   return "movdqa\t{%1, %0|%0, %1}";
    case TYPE_MMXMOV:
      return "movq\t{%1, %0|%0, %1}";
    case TYPE_MULTI:
      return "#";
    case TYPE_LEA:
      return "lea{q}\t{%a1, %0|%0, %a1}";
    default:
      if (flag_pic && !legitimate_pic_operand_p (operands[1]))
 fancy_abort ("gcc.c", 240801, "?");
      if (get_attr_mode (insn) == MODE_SI)
 return "mov{l}\t{%k1, %k0|%k0, %k1}";
      else if (which_alternative == 2)
 return "movabs{q}\t{%1, %0|%0, %1}";
      else
 return "mov{q}\t{%1, %0|%0, %1}";
    }
}
}
static const char * const output_85[] = {
  "movabs{q}\t{%1, %P0|%P0, %1}",
  "mov{q}\t{%1, %a0|%a0, %1}"
};
static const char * const output_86[] = {
  "movabs{q}\t{%P1, %0|%0, %P1}",
  "mov{q}\t{%a1, %0|%0, %a1}"
};
static const char *
output_88 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 1:
      return "push{l}\t%1";
    default:
      fancy_abort ("gcc.c", 240833, "?");
    }
}
}
static const char *
output_89 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 1:
      return "push{q}\t%q1";
    default:
      fancy_abort ("gcc.c", 240849, "?");
    }
}
}
static const char *
output_90 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      return output_387_reg_move (insn, operands);
    case 1:
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
        return "fstp%z0\t%y0";
      else
        return "fst%z0\t%y0";
    case 2:
      return standard_80387_constant_opcode (operands[1]);
    case 3:
    case 4:
      return "mov{l}\t{%1, %0|%0, %1}";
    case 5:
      if (get_attr_mode (insn) == MODE_TI)
 return "pxor\t%0, %0";
      else
 return "xorps\t%0, %0";
    case 6:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "movaps\t{%1, %0|%0, %1}";
      else
 return "movss\t{%1, %0|%0, %1}";
    case 7:
    case 8:
      return "movss\t{%1, %0|%0, %1}";
    case 9:
    case 10:
      return "movd\t{%1, %0|%0, %1}";
    case 11:
      return "movq\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 240897, "?");
    }
}
}
static const char *
output_91 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      return output_387_reg_move (insn, operands);
    case 1:
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
        return "fstp%z0\t%y0";
      else
        return "fst%z0\t%y0";
    case 2:
      return standard_80387_constant_opcode (operands[1]);
    case 3:
    case 4:
      return "mov{l}\t{%1, %0|%0, %1}";
    case 5:
      if (get_attr_mode (insn) == MODE_TI)
 return "pxor\t%0, %0";
      else
 return "xorps\t%0, %0";
    case 6:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "movaps\t{%1, %0|%0, %1}";
      else
 return "movss\t{%1, %0|%0, %1}";
    case 7:
    case 8:
      return "movss\t{%1, %0|%0, %1}";
    case 9:
    case 10:
      return "movd\t{%1, %0|%0, %1}";
    case 11:
      return "movq\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 240945, "?");
    }
}
}
static const char *
output_92 (rtx *operands , rtx insn )
{
{
  if (((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) == 8))
    return "fxch\t%1";
  else
    return "fxch\t%0";
}
}
static const char *
output_93 (rtx *operands , rtx insn )
{
{
  fancy_abort ("gcc.c", 240966, "?");
}
}
static const char *
output_94 (rtx *operands , rtx insn )
{
{
  fancy_abort ("gcc.c", 240975, "?");
}
}
static const char *
output_95 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      return output_387_reg_move (insn, operands);
    case 1:
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
        return "fstp%z0\t%y0";
      else
        return "fst%z0\t%y0";
    case 2:
      return standard_80387_constant_opcode (operands[1]);
    case 3:
    case 4:
      return "#";
    case 5:
      switch (get_attr_mode (insn))
 {
 case MODE_V4SF:
   return "xorps\t%0, %0";
 case MODE_V2DF:
   return "xorpd\t%0, %0";
 case MODE_TI:
   return "pxor\t%0, %0";
 default:
   fancy_abort ("gcc.c", 241010, "?");
 }
    case 6:
      switch (get_attr_mode (insn))
 {
 case MODE_V4SF:
   return "movaps\t{%1, %0|%0, %1}";
 case MODE_V2DF:
   return "movapd\t{%1, %0|%0, %1}";
 case MODE_DF:
   return "movsd\t{%1, %0|%0, %1}";
 default:
   fancy_abort ("gcc.c", 241022, "?");
 }
    case 7:
      if (get_attr_mode (insn) == MODE_V2DF)
 return "movlpd\t{%1, %0|%0, %1}";
      else
 return "movsd\t{%1, %0|%0, %1}";
    case 8:
      return "movsd\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 241033, "?");
    }
}
}
static const char *
output_96 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      return output_387_reg_move (insn, operands);
    case 1:
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
        return "fstp%z0\t%y0";
      else
        return "fst%z0\t%y0";
    case 2:
      return standard_80387_constant_opcode (operands[1]);
    case 3:
    case 4:
      return "#";
    case 5:
      switch (get_attr_mode (insn))
 {
 case MODE_V4SF:
   return "xorps\t%0, %0";
 case MODE_V2DF:
   return "xorpd\t%0, %0";
 case MODE_TI:
   return "pxor\t%0, %0";
 default:
   fancy_abort ("gcc.c", 241070, "?");
 }
    case 6:
      switch (get_attr_mode (insn))
 {
 case MODE_V4SF:
   return "movaps\t{%1, %0|%0, %1}";
 case MODE_V2DF:
   return "movapd\t{%1, %0|%0, %1}";
 case MODE_DF:
   return "movsd\t{%1, %0|%0, %1}";
 default:
   fancy_abort ("gcc.c", 241082, "?");
 }
    case 7:
      if (get_attr_mode (insn) == MODE_V2DF)
 return "movlpd\t{%1, %0|%0, %1}";
      else
 return "movsd\t{%1, %0|%0, %1}";
    case 8:
      return "movsd\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 241093, "?");
    }
}
}
static const char *
output_97 (rtx *operands , rtx insn )
{
{
  if (((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) == 8))
    return "fxch\t%1";
  else
    return "fxch\t%0";
}
}
static const char *
output_98 (rtx *operands , rtx insn )
{
{
  fancy_abort ("gcc.c", 241114, "?");
}
}
static const char *
output_99 (rtx *operands , rtx insn )
{
{
  fancy_abort ("gcc.c", 241123, "?");
}
}
static const char *
output_100 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      return output_387_reg_move (insn, operands);
    case 1:
      if (! find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
        return "fstp%z0\t%y0\n\tfld%z0\t%y0";
      else
        return "fstp%z0\t%y0";
    case 2:
      return standard_80387_constant_opcode (operands[1]);
    case 3: case 4:
      return "#";
    }
  fancy_abort ("gcc.c", 241150, "?");
}
}
static const char *
output_101 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      return output_387_reg_move (insn, operands);
    case 1:
      if (! find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
        return "fstp%z0\t%y0\n\tfld%z0\t%y0";
      else
        return "fstp%z0\t%y0";
    case 2:
      return standard_80387_constant_opcode (operands[1]);
    case 3: case 4:
      return "#";
    }
  fancy_abort ("gcc.c", 241177, "?");
}
}
static const char *
output_102 (rtx *operands , rtx insn )
{
{
  if (((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) == 8))
    return "fxch\t%1";
  else
    return "fxch\t%0";
}
}
static const char * const output_111[] = {
  "#",
  "#",
  "#",
  "movd\t{%1, %0|%0, %1}",
  "movd\t{%1, %0|%0, %1}"
};
static const char * const output_112[] = {
  "#",
  "#",
  "#",
  "movd\t{%1, %0|%0, %1}",
  "movd\t{%1, %0|%0, %1}"
};
static const char * const output_113[] = {
  "mov\t{%k1, %k0|%k0, %k1}",
  "#",
  "movd\t{%1, %0|%0, %1}",
  "movd\t{%1, %0|%0, %1}"
};
static const char * const output_114[] = {
  "mov\t{%k1, %k0|%k0, %k1}",
  "#",
  "movd\t{%1, %0|%0, %1}",
  "movd\t{%1, %0|%0, %1}"
};
static const char * const output_115[] = {
  "movz{wl|x}\t{%1, %k0|%k0, %1}",
  "movz{wq|x}\t{%1, %0|%0, %1}"
};
static const char * const output_116[] = {
  "movz{bl|x}\t{%1, %k0|%k0, %1}",
  "movz{bq|x}\t{%1, %0|%0, %1}"
};
static const char * const output_118[] = {
  "{cltq|cdqe}",
  "movs{lq|x}\t{%1,%0|%0, %1}"
};
static const char *
output_121 (rtx *operands , rtx insn )
{
{
  switch (get_attr_prefix_0f (insn))
    {
    case 0:
      return "{cwtl|cwde}";
    default:
      return "movs{wl|x}\t{%1,%0|%0, %1}";
    }
}
}
static const char *
output_122 (rtx *operands , rtx insn )
{
{
  switch (get_attr_prefix_0f (insn))
    {
    case 0:
      return "{cwtl|cwde}";
    default:
      return "movs{wl|x}\t{%1,%k0|%k0, %1}";
    }
}
}
static const char *
output_123 (rtx *operands , rtx insn )
{
{
  switch (get_attr_prefix_0f (insn))
    {
    case 0:
      return "{cbtw|cbw}";
    default:
      return "movs{bw|x}\t{%1,%0|%0, %1}";
    }
}
}
static const char *
output_128 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      return output_387_reg_move (insn, operands);
    case 1:
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
        return "fstp%z0\t%y0";
      else
        return "fst%z0\t%y0";
    case 2:
      return "cvtss2sd\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 241298, "?");
    }
}
}
static const char *
output_130 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      return output_387_reg_move (insn, operands);
    case 1:
      if (! find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
        return "fstp%z0\t%y0\n\tfld%z0\t%y0";
      else
        return "fstp%z0\t%y0";
    default:
      fancy_abort ("gcc.c", 241321, "?");
    }
}
}
static const char *
output_131 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      return output_387_reg_move (insn, operands);
    case 1:
      if (! find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
        return "fstp%z0\t%y0\n\tfld%z0\t%y0";
      else
        return "fstp%z0\t%y0";
    default:
      fancy_abort ("gcc.c", 241344, "?");
    }
}
}
static const char *
output_132 (rtx *operands , rtx insn )
{
{
  return output_387_reg_move (insn, operands);
}
}
static const char *
output_133 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
 return "fstp%z0\t%y0";
      else
 return "fst%z0\t%y0";
    default:
      fancy_abort ("gcc.c", 241369, "?");
    }
}
}
static const char *
output_134 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
 return "fstp%z0\t%y0";
      else
 return "fst%z0\t%y0";
    case 4:
      return "#";
    default:
      fancy_abort ("gcc.c", 241388, "?");
    }
}
}
static const char *
output_135 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
 return "fstp%z0\t%y0";
      else
 return "fst%z0\t%y0";
    case 4:
      return "#";
    default:
      fancy_abort ("gcc.c", 241407, "?");
    }
}
}
static const char *
output_136 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
    case 1:
      return "cvtsd2ss\t{%1, %0|%0, %1}";
    case 2:
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
 return "fstp%z0\t%y0";
      else
 return "fst%z0\t%y0";
    default:
      fancy_abort ("gcc.c", 241427, "?");
    }
}
}
static const char *
output_137 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      return "#";
    case 1:
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
 return "fstp%z0\t%y0";
      else
 return "fst%z0\t%y0";
    default:
      fancy_abort ("gcc.c", 241446, "?");
    }
}
}
static const char *
output_138 (rtx *operands , rtx insn )
{
{
  if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
    return "fstp%z0\t%y0";
  else
    return "fst%z0\t%y0";
}
}
static const char *
output_141 (rtx *operands , rtx insn )
{
{
  return output_387_reg_move (insn, operands);
}
}
static const char *
output_142 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
 return "fstp%z0\t%y0";
      else
 return "fst%z0\t%y0";
    default:
      fancy_abort ("gcc.c", 241482, "?");
    }
}
}
static const char *
output_143 (rtx *operands , rtx insn )
{
{
  if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
    return "fstp%z0\t%y0";
  else
    return "fst%z0\t%y0";
}
}
static const char *
output_144 (rtx *operands , rtx insn )
{
{
  return output_387_reg_move (insn, operands);
}
}
static const char *
output_145 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
 return "fstp%z0\t%y0";
      else
 return "fst%z0\t%y0";
    default:
      fancy_abort ("gcc.c", 241518, "?");
    }
  fancy_abort ("gcc.c", 241520, "?");
}
}
static const char *
output_146 (rtx *operands , rtx insn )
{
{
  if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
    return "fstp%z0\t%y0";
  else
    return "fst%z0\t%y0";
}
}
static const char *
output_149 (rtx *operands , rtx insn )
{
 operands[5] = operands[4]; return output_fix_trunc (insn, operands);
}
static const char *
output_154 (rtx *operands , rtx insn )
{
 return output_fix_trunc (insn, operands);
}
static const char *
output_159 (rtx *operands , rtx insn )
{
 return output_fix_trunc (insn, operands);
}
static const char * const output_162[] = {
  "fild%z1\t%1",
  "#"
};
static const char * const output_163[] = {
  "fild%z1\t%1",
  "#",
  "cvtsi2ss\t{%1, %0|%0, %1}",
  "cvtsi2ss\t{%1, %0|%0, %1}"
};
static const char * const output_165[] = {
  "fild%z1\t%1",
  "#"
};
static const char * const output_166[] = {
  "fild%z1\t%1",
  "#",
  "cvtsi2ss{q}\t{%1, %0|%0, %1}",
  "cvtsi2ss{q}\t{%1, %0|%0, %1}"
};
static const char * const output_168[] = {
  "fild%z1\t%1",
  "#"
};
static const char * const output_169[] = {
  "fild%z1\t%1",
  "#",
  "cvtsi2sd\t{%1, %0|%0, %1}",
  "cvtsi2sd\t{%1, %0|%0, %1}"
};
static const char * const output_171[] = {
  "fild%z1\t%1",
  "#"
};
static const char * const output_172[] = {
  "fild%z1\t%1",
  "#",
  "cvtsi2sd{q}\t{%1, %0|%0, %1}",
  "cvtsi2sd{q}\t{%1, %0|%0, %1}"
};
static const char * const output_174[] = {
  "fild%z1\t%1",
  "#"
};
static const char * const output_175[] = {
  "fild%z1\t%1",
  "#"
};
static const char * const output_176[] = {
  "fild%z1\t%1",
  "#"
};
static const char *
output_196 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_LEA:
      operands[2] = (((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1);
      return "lea{q}\t{%a2, %0|%0, %a2}";
    case TYPE_INCDEC:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241628, "?");
      if (operands[2] == (const_int_rtx[64 +1]))
        return "inc{q}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
        return "dec{q}\t%0";
      else
 fancy_abort ("gcc.c", 241634, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241638, "?");
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
   && ((((operands[2])->u.hwint[0]) & ((((unsigned int) 1) << 31) - 1)))
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
        {
          operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
          return "sub{q}\t{%2, %0|%0, %2}";
        }
      return "add{q}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_197 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241665, "?");
      if (operands[2] == (const_int_rtx[64 +1]))
        return "inc{q}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
        return "dec{q}\t%0";
      else
 fancy_abort ("gcc.c", 241671, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241675, "?");
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
   && ((((operands[2])->u.hwint[0]) & ((((unsigned int) 1) << 31) - 1)))
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
        {
          operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
          return "sub{q}\t{%2, %0|%0, %2}";
        }
      return "add{q}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_198 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241703, "?");
      if (operands[2] == (const_int_rtx[64 +1]))
        return "inc{q}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
        return "dec{q}\t%0";
      else
 fancy_abort ("gcc.c", 241709, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241713, "?");
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
   && ((((operands[2])->u.hwint[0]) & ((((unsigned int) 1) << 31) - 1)))
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
        {
          operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
          return "sub{q}\t{%2, %0|%0, %2}";
        }
      return "add{q}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_199 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 -1]))
        return "inc{q}\t%0";
      else if (operands[2] == (const_int_rtx[64 +1]))
        return "dec{q}\t%0";
      else
 fancy_abort ("gcc.c", 241745, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241749, "?");
      if ((((operands[2])->u.hwint[0]) == -128
    || (((operands[2])->u.hwint[0]) > 0
        && ((operands[2])->u.hwint[0]) != 128))
   && ((((operands[2])->u.hwint[0]) & ((((unsigned int) 1) << 31) - 1))))
 return "sub{q}\t{%2, %0|%0, %2}";
      operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
      return "add{q}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_200 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241772, "?");
      if (operands[2] == (const_int_rtx[64 +1]))
        return "inc{q}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
        return "dec{q}\t%0";
      else
 fancy_abort ("gcc.c", 241778, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241782, "?");
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
   && ((((operands[2])->u.hwint[0]) & ((((unsigned int) 1) << 31) - 1)))
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
        {
          operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
          return "sub{q}\t{%2, %0|%0, %2}";
        }
      return "add{q}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_201 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_LEA:
      operands[2] = (((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1);
      return "lea{l}\t{%a2, %0|%0, %a2}";
    case TYPE_INCDEC:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241812, "?");
      if (operands[2] == (const_int_rtx[64 +1]))
        return "inc{l}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
        return "dec{l}\t%0";
      else
 fancy_abort ("gcc.c", 241818, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241822, "?");
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
        {
          operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
          return "sub{l}\t{%2, %0|%0, %2}";
        }
      return "add{l}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_202 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_LEA:
      operands[2] = (((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1);
      return "lea{l}\t{%a2, %k0|%k0, %a2}";
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
        return "inc{l}\t%k0";
      else if (operands[2] == (const_int_rtx[64 -1]))
        return "dec{l}\t%k0";
      else
 fancy_abort ("gcc.c", 241855, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
        {
          operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
          return "sub{l}\t{%2, %k0|%k0, %2}";
        }
      return "add{l}\t{%2, %k0|%k0, %2}";
    }
}
}
static const char *
output_203 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241881, "?");
      if (operands[2] == (const_int_rtx[64 +1]))
        return "inc{l}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
        return "dec{l}\t%0";
      else
 fancy_abort ("gcc.c", 241887, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241891, "?");
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
        {
          operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
          return "sub{l}\t{%2, %0|%0, %2}";
        }
      return "add{l}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_204 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
        return "inc{l}\t%k0";
      else if (operands[2] == (const_int_rtx[64 -1]))
        return "dec{l}\t%k0";
      else
 fancy_abort ("gcc.c", 241919, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
        {
          operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
          return "sub{l}\t{%2, %k0|%k0, %2}";
        }
      return "add{l}\t{%2, %k0|%k0, %2}";
    }
}
}
static const char *
output_205 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241945, "?");
      if (operands[2] == (const_int_rtx[64 +1]))
        return "inc{l}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
        return "dec{l}\t%0";
      else
 fancy_abort ("gcc.c", 241951, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 241955, "?");
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
        {
          operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
          return "sub{l}\t{%2, %0|%0, %2}";
        }
      return "add{l}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_206 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
        return "inc{l}\t%k0";
      else if (operands[2] == (const_int_rtx[64 -1]))
        return "dec{l}\t%k0";
      else
 fancy_abort ("gcc.c", 241983, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
        {
          operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
          return "sub{l}\t{%2, %k0|%k0, %2}";
        }
      return "add{l}\t{%2, %k0|%k0, %2}";
    }
}
}
static const char *
output_207 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 -1]))
        return "inc{l}\t%0";
      else if (operands[2] == (const_int_rtx[64 +1]))
        return "dec{l}\t%0";
      else
 fancy_abort ("gcc.c", 242013, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 242017, "?");
      if ((((operands[2])->u.hwint[0]) == -128
    || (((operands[2])->u.hwint[0]) > 0
        && ((operands[2])->u.hwint[0]) != 128)))
 return "sub{l}\t{%2, %0|%0, %2}";
      operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
      return "add{l}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_208 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 242038, "?");
      if (operands[2] == (const_int_rtx[64 +1]))
        return "inc{l}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
        return "dec{l}\t%0";
      else
 fancy_abort ("gcc.c", 242044, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 242048, "?");
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
        {
          operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
          return "sub{l}\t{%2, %0|%0, %2}";
        }
      return "add{l}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_209 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_LEA:
      return "#";
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
 return "inc{w}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
 return "dec{w}\t%0";
      fancy_abort ("gcc.c", 242077, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
 {
   operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
   return "sub{w}\t{%2, %0|%0, %2}";
 }
      return "add{w}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_210 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
 return "inc{w}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
 return "dec{w}\t%0";
      fancy_abort ("gcc.c", 242106, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
 {
   operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
   return "sub{w}\t{%2, %0|%0, %2}";
 }
      return "add{w}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_211 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
 return "inc{w}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
 return "dec{w}\t%0";
      fancy_abort ("gcc.c", 242135, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
 {
   operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
   return "sub{w}\t{%2, %0|%0, %2}";
 }
      return "add{w}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_212 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
 return "inc{w}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
 return "dec{w}\t%0";
      fancy_abort ("gcc.c", 242164, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
 {
   operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
   return "sub{w}\t{%2, %0|%0, %2}";
 }
      return "add{w}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_213 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 -1]))
        return "inc{w}\t%0";
      else if (operands[2] == (const_int_rtx[64 +1]))
        return "dec{w}\t%0";
      else
 fancy_abort ("gcc.c", 242194, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 242198, "?");
      if ((((operands[2])->u.hwint[0]) == -128
    || (((operands[2])->u.hwint[0]) > 0
        && ((operands[2])->u.hwint[0]) != 128)))
 return "sub{w}\t{%2, %0|%0, %2}";
      operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
      return "add{w}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_214 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
 return "inc{w}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
 return "dec{w}\t%0";
      fancy_abort ("gcc.c", 242222, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
 {
   operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
   return "sub{w}\t{%2, %0|%0, %2}";
 }
      return "add{w}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_215 (rtx *operands , rtx insn )
{
{
  int widen = (which_alternative == 2);
  switch (get_attr_type (insn))
    {
    case TYPE_LEA:
      return "#";
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
 return widen ? "inc{l}\t%k0" : "inc{b}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
 return widen ? "dec{l}\t%k0" : "dec{b}\t%0";
      fancy_abort ("gcc.c", 242254, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
 {
   operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
   if (widen)
     return "sub{l}\t{%2, %k0|%k0, %2}";
   else
     return "sub{b}\t{%2, %0|%0, %2}";
 }
      if (widen)
        return "add{l}\t{%k2, %k0|%k0, %k2}";
      else
        return "add{b}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_216 (rtx *operands , rtx insn )
{
{
  int widen = (which_alternative == 2);
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
 return widen ? "inc{l}\t%k0" : "inc{b}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1]))
 return widen ? "dec{l}\t%k0" : "dec{b}\t%0";
      fancy_abort ("gcc.c", 242290, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
    && ((operands[2])->u.hwint[0]) != -128)))
 {
   operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
   if (widen)
     return "sub{l}\t{%2, %k0|%k0, %2}";
   else
     return "sub{b}\t{%2, %0|%0, %2}";
 }
      if (widen)
        return "add{l}\t{%k2, %k0|%k0, %k2}";
      else
        return "add{b}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_217 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[1] == (const_int_rtx[64 +1]))
 return "inc{b}\t%0";
      else if (operands[1] == (const_int_rtx[64 -1]))
 return "dec{b}\t%0";
      fancy_abort ("gcc.c", 242325, "?");
    default:
      if (((enum rtx_code) (operands[1])->code) == CONST_INT
   && ((operands[1])->u.hwint[0]) < 0)
 {
   operands[1] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[1])->u.hwint[0])));
   return "sub{b}\t{%1, %0|%0, %1}";
 }
      return "add{b}\t{%1, %0|%0, %1}";
    }
}
}
static const char *
output_218 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
 return "inc{b}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1])
        || (((enum rtx_code) (operands[2])->code) == CONST_INT
     && ((operands[2])->u.hwint[0]) == 255))
 return "dec{b}\t%0";
      fancy_abort ("gcc.c", 242353, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && ((operands[2])->u.hwint[0]) < 0)
 {
   operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
   return "sub{b}\t{%2, %0|%0, %2}";
 }
      return "add{b}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_219 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
 return "inc{b}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1])
        || (((enum rtx_code) (operands[2])->code) == CONST_INT
     && ((operands[2])->u.hwint[0]) == 255))
 return "dec{b}\t%0";
      fancy_abort ("gcc.c", 242381, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && ((operands[2])->u.hwint[0]) < 0)
 {
   operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
   return "sub{b}\t{%2, %0|%0, %2}";
 }
      return "add{b}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_220 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 -1])
   || (((enum rtx_code) (operands[2])->code) == CONST_INT
       && ((operands[2])->u.hwint[0]) == 255))
        return "inc{b}\t%0";
      else if (operands[2] == (const_int_rtx[64 +1]))
        return "dec{b}\t%0";
      else
 fancy_abort ("gcc.c", 242410, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 242414, "?");
      if (((operands[2])->u.hwint[0]) < 0)
        {
          operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
          return "add{b}\t{%2, %0|%0, %2}";
        }
      return "sub{b}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_221 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
 return "inc{b}\t%0";
      else if (operands[2] == (const_int_rtx[64 -1])
        || (((enum rtx_code) (operands[2])->code) == CONST_INT
     && ((operands[2])->u.hwint[0]) == 255))
 return "dec{b}\t%0";
      fancy_abort ("gcc.c", 242438, "?");
    default:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && ((operands[2])->u.hwint[0]) < 0)
 {
   operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
   return "sub{b}\t{%2, %0|%0, %2}";
 }
      return "add{b}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_222 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
 return "inc{b}\t%h0";
      else if (operands[2] == (const_int_rtx[64 -1])
        || (((enum rtx_code) (operands[2])->code) == CONST_INT
     && ((operands[2])->u.hwint[0]) == 255))
 return "dec{b}\t%h0";
      fancy_abort ("gcc.c", 242466, "?");
    default:
      return "add{b}\t{%2, %h0|%h0, %2}";
    }
}
}
static const char *
output_223 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_INCDEC:
      if (operands[2] == (const_int_rtx[64 +1]))
 return "inc{b}\t%h0";
      else if (operands[2] == (const_int_rtx[64 -1])
        || (((enum rtx_code) (operands[2])->code) == CONST_INT
     && ((operands[2])->u.hwint[0]) == 255))
 return "dec{b}\t%h0";
      fancy_abort ("gcc.c", 242487, "?");
    default:
      return "add{b}\t{%2, %h0|%h0, %2}";
    }
}
}
static const char * const output_247[] = {
  "imul{q}\t{%2, %1, %0|%0, %1, %2}",
  "imul{q}\t{%2, %1, %0|%0, %1, %2}",
  "imul{q}\t{%2, %0|%0, %2}"
};
static const char * const output_248[] = {
  "imul{l}\t{%2, %1, %0|%0, %1, %2}",
  "imul{l}\t{%2, %1, %0|%0, %1, %2}",
  "imul{l}\t{%2, %0|%0, %2}"
};
static const char * const output_249[] = {
  "imul{l}\t{%2, %1, %k0|%k0, %1, %2}",
  "imul{l}\t{%2, %1, %k0|%k0, %1, %2}",
  "imul{l}\t{%2, %k0|%k0, %2}"
};
static const char * const output_250[] = {
  "imul{w}\t{%2, %1, %0|%0, %1, %2}",
  "imul{w}\t{%2, %1, %0|%0, %1, %2}",
  "imul{w}\t{%2, %0|%0, %2}"
};
static const char * const output_278[] = {
  "test{l}\t{%k1, %k0|%k0, %k1}",
  "test{l}\t{%k1, %k0|%k0, %k1}",
  "test{q}\t{%1, %0|%0, %1}",
  "test{q}\t{%1, %0|%0, %1}",
  "test{q}\t{%1, %0|%0, %1}"
};
static const char *
output_281 (rtx *operands , rtx insn )
{
{
  if (which_alternative == 3)
    {
      if (((enum rtx_code) (operands[1])->code) == CONST_INT
   && (((operands[1])->u.hwint[0]) & 0xffffff00))
 operands[1] = gen_rtx_CONST_INT (VOIDmode, (long) (((operands[1])->u.hwint[0]) & 0xff));
      return "test{l}\t{%1, %k0|%k0, %1}";
    }
  return "test{b}\t{%1, %0|%0, %1}";
}
}
static const char *
output_288 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_IMOVX:
      {
 enum machine_mode mode;
 if (((enum rtx_code) (operands[2])->code) != CONST_INT)
   fancy_abort ("gcc.c", 242553, "?");
        if (((operands[2])->u.hwint[0]) == 0xff)
   mode = QImode;
 else if (((operands[2])->u.hwint[0]) == 0xffff)
   mode = HImode;
 else
   fancy_abort ("gcc.c", 242559, "?");
 operands[1] = rtl_hooks.gen_lowpart (mode, operands[1]);
 if (mode == QImode)
   return "movz{bq|x}\t{%1,%0|%0, %1}";
 else
   return "movz{wq|x}\t{%1,%0|%0, %1}";
      }
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 242570, "?");
      if (get_attr_mode (insn) == MODE_SI)
 return "and{l}\t{%k2, %k0|%k0, %k2}";
      else
 return "and{q}\t{%2, %0|%0, %2}";
    }
}
}
static const char * const output_289[] = {
  "and{l}\t{%k2, %k0|%k0, %k2}",
  "and{q}\t{%2, %0|%0, %2}",
  "and{q}\t{%2, %0|%0, %2}"
};
static const char *
output_290 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_IMOVX:
      {
 enum machine_mode mode;
 if (((enum rtx_code) (operands[2])->code) != CONST_INT)
   fancy_abort ("gcc.c", 242596, "?");
        if (((operands[2])->u.hwint[0]) == 0xff)
   mode = QImode;
 else if (((operands[2])->u.hwint[0]) == 0xffff)
   mode = HImode;
 else
   fancy_abort ("gcc.c", 242602, "?");
 operands[1] = rtl_hooks.gen_lowpart (mode, operands[1]);
 if (mode == QImode)
   return "movz{bl|x}\t{%1,%0|%0, %1}";
 else
   return "movz{wl|x}\t{%1,%0|%0, %1}";
      }
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 242613, "?");
      return "and{l}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_294 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_IMOVX:
      if (((enum rtx_code) (operands[2])->code) != CONST_INT)
 fancy_abort ("gcc.c", 242627, "?");
      if (((operands[2])->u.hwint[0]) == 0xff)
 return "movz{bl|x}\t{%b1, %k0|%k0, %b1}";
      fancy_abort ("gcc.c", 242630, "?");
    default:
      if (! rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 242634, "?");
      return "and{w}\t{%2, %0|%0, %2}";
    }
}
}
static const char * const output_296[] = {
  "and{b}\t{%2, %0|%0, %2}",
  "and{b}\t{%2, %0|%0, %2}",
  "and{l}\t{%k2, %k0|%k0, %k2}"
};
static const char *
output_298 (rtx *operands , rtx insn )
{
{
  if (which_alternative == 2)
    {
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) & 0xffffff00))
        operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (((operands[2])->u.hwint[0]) & 0xff));
      return "and{l}\t{%2, %k0|%k0, %2}";
    }
  return "and{b}\t{%2, %0|%0, %2}";
}
}
static const char * const output_318[] = {
  "or{b}\t{%2, %0|%0, %2}",
  "or{b}\t{%2, %0|%0, %2}",
  "or{l}\t{%k2, %k0|%k0, %k2}"
};
static const char * const output_327[] = {
  "xor{q}\t{%2, %0|%0, %2}",
  "xor{q}\t{%2, %0|%0, %2}"
};
static const char * const output_328[] = {
  "xor{q}\t{%2, %0|%0, %2}",
  "xor{q}\t{%2, %0|%0, %2}"
};
static const char * const output_340[] = {
  "xor{b}\t{%2, %0|%0, %2}",
  "xor{b}\t{%2, %0|%0, %2}",
  "xor{l}\t{%k2, %k0|%k0, %k2}"
};
static const char * const output_400[] = {
  "not{b}\t%0",
  "not{l}\t%k0"
};
static const char *
output_402 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_ALU:
      if (operands[2] != (const_int_rtx[64 +1]))
 fancy_abort ("gcc.c", 242697, "?");
      if (!rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 242699, "?");
      return "add{q}\t{%0, %0|%0, %0}";
    case TYPE_LEA:
      if (((enum rtx_code) (operands[2])->code) != CONST_INT
   || (unsigned long) ((operands[2])->u.hwint[0]) > 3)
 fancy_abort ("gcc.c", 242705, "?");
      operands[1] = gen_rtx_fmt_ee (MULT, (DImode), (operands[1]), (gen_rtx_CONST_INT (VOIDmode, (long) (1 << ((operands[2])->u.hwint[0])))))
                                          ;
      return "lea{q}\t{%a1, %0|%0, %a1}";
    default:
      if ((((enum rtx_code) (operands[2])->code) == REG))
 return "sal{q}\t{%b2, %0|%0, %b2}";
      else if (operands[2] == (const_int_rtx[64 +1])
        && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
 return "sal{q}\t%0";
      else
 return "sal{q}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_403 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_ALU:
      if (operands[2] != (const_int_rtx[64 +1]))
 fancy_abort ("gcc.c", 242730, "?");
      return "add{q}\t{%0, %0|%0, %0}";
    default:
      if ((((enum rtx_code) (operands[2])->code) == REG))
 return "sal{q}\t{%b2, %0|%0, %b2}";
      else if (operands[2] == (const_int_rtx[64 +1])
        && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
 return "sal{q}\t%0";
      else
 return "sal{q}\t{%2, %0|%0, %2}";
    }
}
}
static const char * const output_406[] = {
  "shld{l}\t{%2, %1, %0|%0, %1, %2}",
  "shld{l}\t{%s2%1, %0|%0, %1, %2}"
};
static const char *
output_407 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_ALU:
      if (operands[2] != (const_int_rtx[64 +1]))
 fancy_abort ("gcc.c", 242758, "?");
      if (!rtx_equal_p (operands[0], operands[1]))
 fancy_abort ("gcc.c", 242760, "?");
      return "add{l}\t{%0, %0|%0, %0}";
    case TYPE_LEA:
      return "#";
    default:
      if ((((enum rtx_code) (operands[2])->code) == REG))
 return "sal{l}\t{%b2, %0|%0, %b2}";
      else if (operands[2] == (const_int_rtx[64 +1])
        && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
 return "sal{l}\t%0";
      else
 return "sal{l}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_408 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_ALU:
      if (operands[2] != (const_int_rtx[64 +1]))
 fancy_abort ("gcc.c", 242786, "?");
      return "add{l}\t{%k0, %k0|%k0, %k0}";
    case TYPE_LEA:
      return "#";
    default:
      if ((((enum rtx_code) (operands[2])->code) == REG))
 return "sal{l}\t{%b2, %k0|%k0, %b2}";
      else if (operands[2] == (const_int_rtx[64 +1])
        && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
 return "sal{l}\t%k0";
      else
 return "sal{l}\t{%2, %k0|%k0, %2}";
    }
}
}
static const char *
output_409 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_ALU:
      if (operands[2] != (const_int_rtx[64 +1]))
 fancy_abort ("gcc.c", 242812, "?");
      return "add{l}\t{%0, %0|%0, %0}";
    default:
      if ((((enum rtx_code) (operands[2])->code) == REG))
 return "sal{l}\t{%b2, %0|%0, %b2}";
      else if (operands[2] == (const_int_rtx[64 +1])
        && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
 return "sal{l}\t%0";
      else
 return "sal{l}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_410 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_ALU:
      if (operands[2] != (const_int_rtx[64 +1]))
 fancy_abort ("gcc.c", 242835, "?");
      return "add{l}\t{%k0, %k0|%k0, %k0}";
    default:
      if ((((enum rtx_code) (operands[2])->code) == REG))
 return "sal{l}\t{%b2, %k0|%k0, %b2}";
      else if (operands[2] == (const_int_rtx[64 +1])
        && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
 return "sal{l}\t%k0";
      else
 return "sal{l}\t{%2, %k0|%k0, %2}";
    }
}
}
static const char *
output_411 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_LEA:
      return "#";
    case TYPE_ALU:
      if (operands[2] != (const_int_rtx[64 +1]))
 fancy_abort ("gcc.c", 242860, "?");
      return "add{w}\t{%0, %0|%0, %0}";
    default:
      if ((((enum rtx_code) (operands[2])->code) == REG))
 return "sal{w}\t{%b2, %0|%0, %b2}";
      else if (operands[2] == (const_int_rtx[64 +1])
        && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
 return "sal{w}\t%0";
      else
 return "sal{w}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_412 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_ALU:
      if (operands[2] != (const_int_rtx[64 +1]))
 fancy_abort ("gcc.c", 242883, "?");
      return "add{w}\t{%0, %0|%0, %0}";
    default:
      if ((((enum rtx_code) (operands[2])->code) == REG))
 return "sal{w}\t{%b2, %0|%0, %b2}";
      else if (operands[2] == (const_int_rtx[64 +1])
        && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
 return "sal{w}\t%0";
      else
 return "sal{w}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_413 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_ALU:
      if (operands[2] != (const_int_rtx[64 +1]))
 fancy_abort ("gcc.c", 242906, "?");
      return "add{w}\t{%0, %0|%0, %0}";
    default:
      if ((((enum rtx_code) (operands[2])->code) == REG))
 return "sal{w}\t{%b2, %0|%0, %b2}";
      else if (operands[2] == (const_int_rtx[64 +1])
        && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
 return "sal{w}\t%0";
      else
 return "sal{w}\t{%2, %0|%0, %2}";
    }
}
}
static const char *
output_414 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_LEA:
      return "#";
    case TYPE_ALU:
      if (operands[2] != (const_int_rtx[64 +1]))
 fancy_abort ("gcc.c", 242931, "?");
      if ((((enum rtx_code) (operands[1])->code) == REG) && !(0 ? ((((enum rtx_code) (operands[1])->code) == REG) && (((((operands[1])->u.fld[0]).rtuint)) < 8 || (((((operands[1])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (operands[1])->code) == REG) && (((operands[1])->u.fld[0]).rtuint) < 4)))
        return "add{l}\t{%k0, %k0|%k0, %k0}";
      else
        return "add{b}\t{%0, %0|%0, %0}";
    default:
      if ((((enum rtx_code) (operands[2])->code) == REG))
 {
   if (get_attr_mode (insn) == MODE_SI)
     return "sal{l}\t{%b2, %k0|%k0, %b2}";
   else
     return "sal{b}\t{%b2, %0|%0, %b2}";
 }
      else if (operands[2] == (const_int_rtx[64 +1])
        && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
 {
   if (get_attr_mode (insn) == MODE_SI)
     return "sal{l}\t%0";
   else
     return "sal{b}\t%0";
 }
      else
 {
   if (get_attr_mode (insn) == MODE_SI)
     return "sal{l}\t{%2, %k0|%k0, %2}";
   else
     return "sal{b}\t{%2, %0|%0, %2}";
 }
    }
}
}
static const char *
output_415 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_ALU:
      if (operands[2] != (const_int_rtx[64 +1]))
 fancy_abort ("gcc.c", 242972, "?");
      if ((((enum rtx_code) (operands[1])->code) == REG) && !(0 ? ((((enum rtx_code) (operands[1])->code) == REG) && (((((operands[1])->u.fld[0]).rtuint)) < 8 || (((((operands[1])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (operands[1])->code) == REG) && (((operands[1])->u.fld[0]).rtuint) < 4)))
        return "add{l}\t{%k0, %k0|%k0, %k0}";
      else
        return "add{b}\t{%0, %0|%0, %0}";
    default:
      if ((((enum rtx_code) (operands[2])->code) == REG))
 {
   if (get_attr_mode (insn) == MODE_SI)
     return "sal{l}\t{%b2, %k0|%k0, %b2}";
   else
     return "sal{b}\t{%b2, %0|%0, %b2}";
 }
      else if (operands[2] == (const_int_rtx[64 +1])
        && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
 {
   if (get_attr_mode (insn) == MODE_SI)
     return "sal{l}\t%0";
   else
     return "sal{b}\t%0";
 }
      else
 {
   if (get_attr_mode (insn) == MODE_SI)
     return "sal{l}\t{%2, %k0|%k0, %2}";
   else
     return "sal{b}\t{%2, %0|%0, %2}";
 }
    }
}
}
static const char *
output_416 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_ALU:
      if (operands[2] != (const_int_rtx[64 +1]))
 fancy_abort ("gcc.c", 243013, "?");
      return "add{b}\t{%0, %0|%0, %0}";
    default:
      if ((((enum rtx_code) (operands[2])->code) == REG))
 return "sal{b}\t{%b2, %0|%0, %b2}";
      else if (operands[2] == (const_int_rtx[64 +1])
        && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
 return "sal{b}\t%0";
      else
 return "sal{b}\t{%2, %0|%0, %2}";
    }
}
}
static const char * const output_417[] = {
  "{cqto|cqo}",
  "sar{q}\t{%2, %0|%0, %2}"
};
static const char * const output_419[] = {
  "sar{q}\t{%2, %0|%0, %2}",
  "sar{q}\t{%b2, %0|%0, %b2}"
};
static const char * const output_424[] = {
  "shrd{l}\t{%2, %1, %0|%0, %1, %2}",
  "shrd{l}\t{%s2%1, %0|%0, %1, %2}"
};
static const char * const output_425[] = {
  "{cltd|cdq}",
  "sar{l}\t{%2, %0|%0, %2}"
};
static const char * const output_426[] = {
  "{cltd|cdq}",
  "sar{l}\t{%2, %k0|%k0, %2}"
};
static const char * const output_429[] = {
  "sar{l}\t{%2, %0|%0, %2}",
  "sar{l}\t{%b2, %0|%0, %b2}"
};
static const char * const output_430[] = {
  "sar{l}\t{%2, %k0|%k0, %2}",
  "sar{l}\t{%b2, %k0|%k0, %b2}"
};
static const char * const output_436[] = {
  "sar{w}\t{%2, %0|%0, %2}",
  "sar{w}\t{%b2, %0|%0, %b2}"
};
static const char * const output_441[] = {
  "sar{b}\t{%2, %0|%0, %2}",
  "sar{b}\t{%b2, %0|%0, %b2}"
};
static const char * const output_442[] = {
  "sar{b}\t{%1, %0|%0, %1}",
  "sar{b}\t{%b1, %0|%0, %b1}"
};
static const char * const output_446[] = {
  "shr{q}\t{%2, %0|%0, %2}",
  "shr{q}\t{%b2, %0|%0, %b2}"
};
static const char * const output_453[] = {
  "shr{l}\t{%2, %0|%0, %2}",
  "shr{l}\t{%b2, %0|%0, %b2}"
};
static const char * const output_454[] = {
  "shr{l}\t{%2, %k0|%k0, %2}",
  "shr{l}\t{%b2, %k0|%k0, %b2}"
};
static const char * const output_460[] = {
  "shr{w}\t{%2, %0|%0, %2}",
  "shr{w}\t{%b2, %0|%0, %b2}"
};
static const char * const output_465[] = {
  "shr{b}\t{%2, %0|%0, %2}",
  "shr{b}\t{%b2, %0|%0, %b2}"
};
static const char * const output_466[] = {
  "shr{b}\t{%1, %0|%0, %1}",
  "shr{b}\t{%b1, %0|%0, %b1}"
};
static const char * const output_470[] = {
  "rol{q}\t{%2, %0|%0, %2}",
  "rol{q}\t{%b2, %0|%0, %b2}"
};
static const char * const output_473[] = {
  "rol{l}\t{%2, %0|%0, %2}",
  "rol{l}\t{%b2, %0|%0, %b2}"
};
static const char * const output_474[] = {
  "rol{l}\t{%2, %k0|%k0, %2}",
  "rol{l}\t{%b2, %k0|%k0, %b2}"
};
static const char * const output_476[] = {
  "rol{w}\t{%2, %0|%0, %2}",
  "rol{w}\t{%b2, %0|%0, %b2}"
};
static const char * const output_479[] = {
  "rol{b}\t{%1, %0|%0, %1}",
  "rol{b}\t{%b1, %0|%0, %b1}"
};
static const char * const output_480[] = {
  "rol{b}\t{%2, %0|%0, %2}",
  "rol{b}\t{%b2, %0|%0, %b2}"
};
static const char * const output_482[] = {
  "ror{q}\t{%2, %0|%0, %2}",
  "ror{q}\t{%b2, %0|%0, %b2}"
};
static const char * const output_485[] = {
  "ror{l}\t{%2, %0|%0, %2}",
  "ror{l}\t{%b2, %0|%0, %b2}"
};
static const char * const output_486[] = {
  "ror{l}\t{%2, %k0|%k0, %2}",
  "ror{l}\t{%b2, %k0|%k0, %b2}"
};
static const char * const output_488[] = {
  "ror{w}\t{%2, %0|%0, %2}",
  "ror{w}\t{%b2, %0|%0, %b2}"
};
static const char * const output_491[] = {
  "ror{b}\t{%2, %0|%0, %2}",
  "ror{b}\t{%b2, %0|%0, %b2}"
};
static const char * const output_492[] = {
  "ror{b}\t{%1, %0|%0, %1}",
  "ror{b}\t{%b1, %0|%0, %b1}"
};
static const char *
output_514 (rtx *operands , rtx insn )
{
{
  if (which_alternative != 0)
    return "#";
  if (get_attr_length (insn) == 2)
    return "%+loop\t%l0";
  else
    return "dec{l}\t%1\n\t%+jne\t%l0";
}
}
static const char *
output_515 (rtx *operands , rtx insn )
{
{
  if ((((insn))->jump))
    return "jmp\t%P0";
  else
    return "call\t%P0";
}
}
static const char *
output_516 (rtx *operands , rtx insn )
{
{
  if (constant_call_address_operand (operands[0], (0 ? DImode : SImode)))
    {
      if ((((insn))->jump))
 return "jmp\t%P0";
      else
 return "call\t%P0";
    }
  if ((((insn))->jump))
    return "jmp\t%A0";
  else
    return "call\t%A0";
}
}
static const char *
output_517 (rtx *operands , rtx insn )
{
{
  if ((((insn))->jump))
    return "jmp\t%P0";
  else
    return "call\t%P0";
}
}
static const char *
output_518 (rtx *operands , rtx insn )
{
{
  if (constant_call_address_operand (operands[0], QImode))
    return "call\t%P0";
  return "call\t%A0";
}
}
static const char *
output_519 (rtx *operands , rtx insn )
{
{
  if (constant_call_address_operand (operands[0], QImode))
    return "jmp\t%P0";
  return "jmp\t%A0";
}
}
static const char *
output_520 (rtx *operands , rtx insn )
{
{
  if (constant_call_address_operand (operands[0], QImode))
    return "call\t%P0";
  return "call\t%A0";
}
}
static const char *
output_529 (rtx *operands , rtx insn )
{
{
  do { if ((4) != 0) { if (((int)((operands[0])->u.hwint[0])) == 0) fprintf ((asm_out_file), "\t.p2align %d\n", (4)); else fprintf ((asm_out_file), "\t.p2align %d,,%d\n", (4), ((int)((operands[0])->u.hwint[0]))); } } while (0);
  return "";
}
}
static const char *
output_530 (rtx *operands , rtx insn )
{
{ return output_set_got (operands[0]); }
}
static const char *
output_555 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_556 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_557 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_558 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_559 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_560 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_561 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_562 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_563 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_564 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_565 (rtx *operands , rtx insn )
{
 return which_alternative ? "#" : output_387_binary_op (insn, operands);
}
static const char *
output_566 (rtx *operands , rtx insn )
{
 return which_alternative ? "#" : output_387_binary_op (insn, operands);
}
static const char *
output_567 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_568 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_569 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_570 (rtx *operands , rtx insn )
{
 return which_alternative ? "#" : output_387_binary_op (insn, operands);
}
static const char *
output_571 (rtx *operands , rtx insn )
{
 return which_alternative ? "#" : output_387_binary_op (insn, operands);
}
static const char *
output_572 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_573 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_574 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_575 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_576 (rtx *operands , rtx insn )
{
 return which_alternative ? "#" : output_387_binary_op (insn, operands);
}
static const char *
output_577 (rtx *operands , rtx insn )
{
 return which_alternative ? "#" : output_387_binary_op (insn, operands);
}
static const char *
output_578 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_579 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char *
output_580 (rtx *operands , rtx insn )
{
 return output_387_binary_op (insn, operands);
}
static const char * const output_581[] = {
  "fsqrt",
  "sqrtss\t{%1, %0|%0, %1}"
};
static const char * const output_584[] = {
  "fsqrt",
  "sqrtsd\t{%1, %0|%0, %1}"
};
static const char * const output_649[] = {
  "cmov%O2%C1\t{%2, %0|%0, %2}",
  "cmov%O2%c1\t{%3, %0|%0, %3}"
};
static const char * const output_651[] = {
  "cmov%O2%C1\t{%2, %0|%0, %2}",
  "cmov%O2%c1\t{%3, %0|%0, %3}"
};
static const char * const output_652[] = {
  "cmov%O2%C1\t{%2, %0|%0, %2}",
  "cmov%O2%c1\t{%3, %0|%0, %3}"
};
static const char * const output_654[] = {
  "fcmov%F1\t{%2, %0|%0, %2}",
  "fcmov%f1\t{%3, %0|%0, %3}",
  "cmov%O2%C1\t{%2, %0|%0, %2}",
  "cmov%O2%c1\t{%3, %0|%0, %3}"
};
static const char * const output_655[] = {
  "fcmov%F1\t{%2, %0|%0, %2}",
  "fcmov%f1\t{%3, %0|%0, %3}",
  "#",
  "#"
};
static const char * const output_656[] = {
  "fcmov%F1\t{%2, %0|%0, %2}",
  "fcmov%f1\t{%3, %0|%0, %3}",
  "cmov%O2%C1\t{%2, %0|%0, %2}",
  "cmov%O2%c1\t{%3, %0|%0, %3}"
};
static const char * const output_657[] = {
  "fcmov%F1\t{%2, %0|%0, %2}",
  "fcmov%f1\t{%3, %0|%0, %3}"
};
static const char *
output_670 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_IMOV:
      return "mov{l}\t{%1, %0|%0, %1}";
    case TYPE_ALU:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
           && ((operands[2])->u.hwint[0]) != -128)))
 {
   operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
   return "sub{l}\t{%2, %0|%0, %2}";
 }
      return "add{l}\t{%2, %0|%0, %2}";
    case TYPE_LEA:
      operands[2] = (((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1);
      return "lea{l}\t{%a2, %0|%0, %a2}";
    default:
      fancy_abort ("gcc.c", 243505, "?");
    }
}
}
static const char *
output_671 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_IMOV:
      return "mov{q}\t{%1, %0|%0, %1}";
    case TYPE_ALU:
      if (((enum rtx_code) (operands[2])->code) == CONST_INT
   && ((((operands[2])->u.hwint[0]) & ((((unsigned int) 1) << 31) - 1)))
          && (((operands[2])->u.hwint[0]) == 128
       || (((operands[2])->u.hwint[0]) < 0
           && ((operands[2])->u.hwint[0]) != -128)))
 {
   operands[2] = gen_rtx_CONST_INT (VOIDmode, (long) (-((operands[2])->u.hwint[0])));
   return "sub{q}\t{%2, %0|%0, %2}";
 }
      return "add{q}\t{%2, %0|%0, %2}";
    case TYPE_LEA:
      operands[2] = (((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1);
      return "lea{q}\t{%a2, %0|%0, %a2}";
    default:
      fancy_abort ("gcc.c", 243537, "?");
    }
}
}
static const char *
output_672 (rtx *operands , rtx insn )
{
{
  switch (get_attr_type (insn))
    {
    case TYPE_ALU:
      return "add{q}\t{%2, %0|%0, %2}";
    case TYPE_LEA:
      operands[2] = gen_rtx_fmt_ee (PLUS, (DImode), (operands[1]), (operands[2]));
      return "lea{q}\t{%a2, %0|%0, %a2}";
    default:
      fancy_abort ("gcc.c", 243556, "?");
    }
}
}
static const char *
output_687 (rtx *operands , rtx insn )
{
{
  if ((((insn))->jump))
    return "jmp\t%P1";
  else
    return "call\t%P1";
}
}
static const char *
output_688 (rtx *operands , rtx insn )
{
{
  if (constant_call_address_operand (operands[1], QImode))
    {
      if ((((insn))->jump))
 return "jmp\t%P1";
      else
 return "call\t%P1";
    }
  if ((((insn))->jump))
    return "jmp\t%A1";
  else
    return "call\t%A1";
}
}
static const char *
output_689 (rtx *operands , rtx insn )
{
{
  if ((((insn))->jump))
    return "jmp\t%P1";
  else
    return "call\t%P1";
}
}
static const char *
output_690 (rtx *operands , rtx insn )
{
{
  if ((((insn))->jump))
    return "jmp\t%P1";
  else
    return "call\t%P1";
}
}
static const char *
output_691 (rtx *operands , rtx insn )
{
{
  if (constant_call_address_operand (operands[1], QImode))
    return "call\t%P1";
  return "call\t%*%1";
}
}
static const char *
output_692 (rtx *operands , rtx insn )
{
{
  if (constant_call_address_operand (operands[1], QImode))
    return "jmp\t%P1";
  return "jmp\t%*%1";
}
}
static const char *
output_693 (rtx *operands , rtx insn )
{
{
  if (constant_call_address_operand (operands[1], QImode))
    return "call\t%P1";
  return "call\t%A1";
}
}
static const char *
output_697 (rtx *operands , rtx insn )
{
{
  operands[2] = gen_label_rtx ();
  output_asm_insn ("j%c0\t%l2\n\t int\t%1", operands);
  (*targetm.asm_out.internal_label) (asm_out_file, "L",
        (((operands[2])->u.fld[6]).rtint));
  return "";
}
}
static const char * const output_698[] = {
  "xorps\t%0, %0",
  "movaps\t{%1, %0|%0, %1}",
  "movaps\t{%1, %0|%0, %1}"
};
static const char *
output_699 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "xorps\t%0, %0";
      else
 return "pxor\t%0, %0";
    case 1:
    case 2:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "movaps\t{%1, %0|%0, %1}";
      else
 return "movdqa\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 243678, "?");
    }
}
}
static const char *
output_700 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "xorps\t%0, %0";
      else
 return "pxor\t%0, %0";
    case 1:
    case 2:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "movaps\t{%1, %0|%0, %1}";
      else
 return "movdqa\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 243701, "?");
    }
}
}
static const char * const output_701[] = {
  "pxor\t%0, %0",
  "movq\t{%1, %0|%0, %1}",
  "movq\t{%1, %0|%0, %1}"
};
static const char * const output_702[] = {
  "pxor\t%0, %0",
  "movq\t{%1, %0|%0, %1}",
  "movq\t{%1, %0|%0, %1}"
};
static const char * const output_703[] = {
  "pxor\t%0, %0",
  "movq\t{%1, %0|%0, %1}",
  "movq\t{%1, %0|%0, %1}"
};
static const char * const output_704[] = {
  "pxor\t%0, %0",
  "movq\t{%1, %0|%0, %1}",
  "movq\t{%1, %0|%0, %1}"
};
static const char *
output_705 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "xorps\t%0, %0";
      else
 return "xorpd\t%0, %0";
    case 1:
    case 2:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "movaps\t{%1, %0|%0, %1}";
      else
 return "movapd\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 243748, "?");
    }
}
}
static const char *
output_706 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "xorps\t%0, %0";
      else
 return "pxor\t%0, %0";
    case 1:
    case 2:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "movaps\t{%1, %0|%0, %1}";
      else
 return "movdqa\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 243771, "?");
    }
}
}
static const char *
output_707 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "xorps\t%0, %0";
      else
 return "pxor\t%0, %0";
    case 1:
    case 2:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "movaps\t{%1, %0|%0, %1}";
      else
 return "movdqa\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 243794, "?");
    }
}
}
static const char *
output_719 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "xorps\t%0, %0";
      else
 return "pxor\t%0, %0";
    case 1:
    case 2:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "movaps\t{%1, %0|%0, %1}";
      else
 return "movdqa\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 243817, "?");
    }
}
}
static const char *
output_720 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
    case 1:
      return "#";
    case 2:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "xorps\t%0, %0";
      else
 return "pxor\t%0, %0";
    case 3:
    case 4:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "movaps\t{%1, %0|%0, %1}";
      else
 return "movdqa\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 243843, "?");
    }
}
}
static const char *
output_721 (rtx *operands , rtx insn )
{
{
  switch (which_alternative)
    {
    case 0:
    case 1:
      return "#";
    case 2:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "xorps\t%0, %0";
      else
 return "pxor\t%0, %0";
    case 3:
    case 4:
      if (get_attr_mode (insn) == MODE_V4SF)
 return "movaps\t{%1, %0|%0, %1}";
      else
 return "movdqa\t{%1, %0|%0, %1}";
    default:
      fancy_abort ("gcc.c", 243869, "?");
    }
}
}
static const char *
output_768 (rtx *operands , rtx insn )
{
{
  if (get_attr_mode (insn) == MODE_TI)
    return "pxor\t{%0, %0|%0, %0}";
  else
    return "xorps\t{%0, %0|%0, %0}";
}
}
static const char *
output_771 (rtx *operands , rtx insn )
{
{
  if (((enum rtx_code) (operands[3])->code) == UNORDERED)
    return "cmpordps\t{%2, %0|%0, %2}";
  else
    return "cmpn%D3ps\t{%2, %0|%0, %2}";
}
}
static const char *
output_773 (rtx *operands , rtx insn )
{
{
  if (((enum rtx_code) (operands[3])->code) == UNORDERED)
    return "cmpordss\t{%2, %0|%0, %2}";
  else
    return "cmpn%D3ss\t{%2, %0|%0, %2}";
}
}
static const char *
output_853 (rtx *operands , rtx insn )
{
{
  int i;
  operands[0] = gen_rtx_MEM ((0 ? DImode : SImode),
        gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (operands[0]), (operands[4])));
  output_asm_insn ("jmp\t%A1", operands);
  for (i = (0 ? 8 : (((target_flags & 0x00004000) != 0) ? 3 : 0)) - 1; i >= ((operands[2])->u.hwint[0]); i--)
    {
      operands[4] = adjust_address_1 (operands[0], DImode, i*16, 1, 1);
      operands[5] = gen_rtx_REG (TImode, ((i) < 8 ? (20 + 1) + (i) : (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + (i) - 8));
      ((operands[4])->mode = (TImode));
      if (((enum rtx_code) ((((operands[0])->u.fld[0]).rtx1))->code) != PLUS)
        output_asm_insn ("rex", operands);
      output_asm_insn ("movaps\t{%5, %4|%4, %5}", operands);
    }
  (*targetm.asm_out.internal_label) (asm_out_file, "L",
        (((operands[3])->u.fld[6]).rtint));
  return "";
}
}
static const char *
output_880 (rtx *operands , rtx insn )
{
{
  static const char * const patterns[4] = {
   "prefetchnta\t%a0", "prefetcht2\t%a0", "prefetcht1\t%a0", "prefetcht0\t%a0"
  };
  int locality = ((operands[1])->u.hwint[0]);
  if (locality < 0 || locality > 3)
    fancy_abort ("gcc.c", 243942, "?");
  return patterns[locality];
}
}
static const char *
output_881 (rtx *operands , rtx insn )
{
{
  static const char * const patterns[4] = {
   "prefetchnta\t%a0", "prefetcht2\t%a0", "prefetcht1\t%a0", "prefetcht0\t%a0"
  };
  int locality = ((operands[1])->u.hwint[0]);
  if (locality < 0 || locality > 3)
    fancy_abort ("gcc.c", 243958, "?");
  return patterns[locality];
}
}
static const char *
output_882 (rtx *operands , rtx insn )
{
{
  if (((operands[1])->u.hwint[0]) == 0)
    return "prefetch\t%a0";
  else
    return "prefetchw\t%a0";
}
}
static const char *
output_883 (rtx *operands , rtx insn )
{
{
  if (((operands[1])->u.hwint[0]) == 0)
    return "prefetch\t%a0";
  else
    return "prefetchw\t%a0";
}
}
static const char *
output_899 (rtx *operands , rtx insn )
{
{
  if (((enum rtx_code) (operands[3])->code) == UNORDERED)
    return "cmpordps\t{%2, %0|%0, %2}";
  else
    return "cmpn%D3pd\t{%2, %0|%0, %2}";
}
}
static const char *
output_901 (rtx *operands , rtx insn )
{
{
  if (((enum rtx_code) (operands[3])->code) == UNORDERED)
    return "cmpordsd\t{%2, %0|%0, %2}";
  else
    return "cmpn%D3sd\t{%2, %0|%0, %2}";
}
}
static const char *
output_952 (rtx *operands , rtx insn )
{
{
  if (get_attr_mode (insn) == MODE_TI)
    return "pxor\t%0, %0";
  else
    return "xorps\t%0, %0";
}
}
static const char * const output_1006[] = {
  "movq\t{%1, %0|%0, %1}",
  "movdq2q\t{%1, %0|%0, %1}"
};
static const char * const output_1007[] = {
  "movq\t{%1, %0|%0, %1}",
  "movdq2q\t{%1, %0|%0, %1}",
  "movd\t{%1, %0|%0, %1}"
};
static const char * const output_1008[] = {
  "movq\t{%1, %0|%0, %1}",
  "movq2dq\t{%1, %0|%0, %1}"
};
static const char * const output_1009[] = {
  "movq\t{%1, %0|%0, %1}",
  "movq2dq\t{%1, %0|%0, %1}",
  "movd\t{%1, %0|%0, %1}"
};
static const char * const output_1015[] = {
  "movsd\t{%2, %0|%0, %2}",
  "movlpd\t{%2, %0|%0, %2}",
  "movlpd\t{%2, %0|%0, %2}"
};
static const struct insn_operand_data operand_data[] =
{
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "r,?mr",
    DImode,
    0,
    1
  },
  {
    const0_operand,
    "n,n",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm,r",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "re,mr",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "mr,r",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "re,mr",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "r,?mr",
    SImode,
    0,
    1
  },
  {
    const0_operand,
    "n,n",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm,r",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "ri,mr",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "r,?mr",
    HImode,
    0,
    1
  },
  {
    const0_operand,
    "n,n",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm,r",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "ri,mr",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "q,?mq",
    QImode,
    0,
    1
  },
  {
    const0_operand,
    "n,n",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "qm,q",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qi,mq",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "Qm",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "Q",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q",
    VOIDmode,
    0,
    1
  },
  {
    const0_operand,
    "n",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "Qmn",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q",
    VOIDmode,
    0,
    1
  },
  {
    nonmemory_operand,
    "Qn",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    const0_operand,
    "X",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "f,f",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,?r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "f#x,x#f",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "f#x,xm#f",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    VOIDmode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    SImode,
    0,
    1
  },
  {
    general_no_elim_operand,
    "ri*m",
    SImode,
    0,
    1
  },
  {
    push_operand,
    "=X",
    SImode,
    0,
    1
  },
  {
    nonmemory_no_elim_operand,
    "ri",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r*m",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    const0_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,m,!*y,!rm,!*y,!*Y,!rm,!*Y",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "rinm,rin,*y,*y,rm,*Y,*Y,rm",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,m,!*y,!m,!*y,!*Y,!m,!*Y",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "rinm,rin,*y,*y,m,*Y,*Y,m",
    SImode,
    0,
    1
  },
  {
    x86_64_movabs_operand,
    "i,r",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "a,er",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=a,r",
    SImode,
    0,
    1
  },
  {
    x86_64_movabs_operand,
    "i,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "+r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "+r",
    SImode,
    0,
    1
  },
  {
    push_operand,
    "=<,<",
    HImode,
    0,
    1
  },
  {
    general_no_elim_operand,
    "n,r*m",
    HImode,
    0,
    1
  },
  {
    push_operand,
    "=X",
    HImode,
    0,
    1
  },
  {
    nonmemory_no_elim_operand,
    "ri",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,r,r,m",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "r,rn,rm,rn",
    HImode,
    0,
    1
  },
  {
    x86_64_movabs_operand,
    "i,r",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "a,er",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=a,r",
    HImode,
    0,
    1
  },
  {
    x86_64_movabs_operand,
    "i,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "+r",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "+r",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "+rm,r",
    HImode,
    1,
    1
  },
  {
    general_operand,
    "rn,m",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "+r",
    HImode,
    1,
    1
  },
  {
    const0_operand,
    "i",
    HImode,
    0,
    1
  },
  {
    push_operand,
    "=X,X",
    QImode,
    0,
    1
  },
  {
    nonmemory_no_elim_operand,
    "n,r",
    QImode,
    0,
    1
  },
  {
    push_operand,
    "=X",
    QImode,
    0,
    1
  },
  {
    nonmemory_no_elim_operand,
    "qi",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=q,q,q,r,r,?r,m",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "q,qn,qm,q,rn,qm,qn",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "+r",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "+r",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "+qm,q",
    QImode,
    1,
    1
  },
  {
    general_operand,
    "*qn,m",
    QImode,
    0,
    1
  },
  {
    q_regs_operand,
    "+q",
    QImode,
    1,
    1
  },
  {
    const0_operand,
    "i",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=R",
    SImode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "=R",
    HImode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=Qm,?r",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q,Q",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "=Q,?R",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q,Q",
    VOIDmode,
    0,
    1
  },
  {
    x86_64_movabs_operand,
    "i,r",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "a,er",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=a,r",
    QImode,
    0,
    1
  },
  {
    x86_64_movabs_operand,
    "i,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=Qm,?R",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q,Q",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "+Q",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "Qmn",
    SImode,
    0,
    1
  },
  {
    ext_register_operand,
    "+Q",
    VOIDmode,
    0,
    1
  },
  {
    nonmemory_operand,
    "Qn",
    DImode,
    0,
    1
  },
  {
    ext_register_operand,
    "+Q",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "Q",
    SImode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    DImode,
    0,
    1
  },
  {
    general_no_elim_operand,
    "riF*m",
    DImode,
    0,
    1
  },
  {
    push_operand,
    "=<,!<",
    DImode,
    0,
    1
  },
  {
    general_no_elim_operand,
    "re*m,n",
    DImode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    DImode,
    0,
    1
  },
  {
    general_no_elim_operand,
    "re*m",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r*m",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    const0_operand,
    "i",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "i",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,o,!m*y,!*y,!m,!*Y,!*Y",
    DImode,
    0,
    1
  },
  {
    general_operand,
    "riFo,riF,*y,m,*Y,*Y,m",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,r,r,mr,!mr,!*y,!rm,!*y,!*Y,!rm,!*Y",
    DImode,
    0,
    1
  },
  {
    general_operand,
    "Z,rem,i,re,n,*y,*y,rm,*Y,*Y,rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,r,r,mr,!mr,!*y,!m,!*y,!*Y,!m,!*Y",
    DImode,
    0,
    1
  },
  {
    general_operand,
    "Z,rem,i,re,n,*y,*y,m,*Y,*Y,m",
    DImode,
    0,
    1
  },
  {
    x86_64_movabs_operand,
    "i,r",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "a,er",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=a,r",
    DImode,
    0,
    1
  },
  {
    x86_64_movabs_operand,
    "i,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "+r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "+r",
    DImode,
    0,
    1
  },
  {
    push_operand,
    "=<,<,<",
    SFmode,
    0,
    1
  },
  {
    general_no_elim_operand,
    "f#rx,rFm#fx,x#rf",
    SFmode,
    0,
    1
  },
  {
    push_operand,
    "=X,X,X",
    SFmode,
    0,
    1
  },
  {
    nonmemory_no_elim_operand,
    "f#rx,rF#fx,x#rf",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f#xr,m,f#xr,r#xf,m,x#rf,x#rf,x#rf,m,!*y,!rm,!*y",
    SFmode,
    0,
    1
  },
  {
    general_operand,
    "fm#rx,f#rx,G,rmF#fx,Fr#fx,C,x,xm#rf,x#rf,rm,*y,*y",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f#xr,m,f#xr,r#xf,m,x#rf,x#rf,x#rf,m,!*y,!m,!*y",
    SFmode,
    0,
    1
  },
  {
    general_operand,
    "fm#rx,f#rx,G,rmF#fx,Fr#fx,C,x,xm#rf,x#rf,m,*y,*y",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "+f",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "+f",
    SFmode,
    0,
    1
  },
  {
    push_operand,
    "=<,<,<,<",
    DFmode,
    0,
    1
  },
  {
    general_no_elim_operand,
    "f#Y,Fo#fY,*r#fY,Y#f",
    DFmode,
    0,
    1
  },
  {
    push_operand,
    "=<,<,<",
    DFmode,
    0,
    1
  },
  {
    general_no_elim_operand,
    "f#rY,rFo#fY,Y#rf",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f#Y,m,f#Y,*r,o,Y#f,Y#f,Y#f,m",
    DFmode,
    0,
    1
  },
  {
    general_operand,
    "fm#Y,f#Y,G,*roF,F*r,C,Y#f,YHm#f,Y#f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f#Yr,m,f#Yr,r#Yf,o,Y#rf,Y#rf,Y#rf,m",
    DFmode,
    0,
    1
  },
  {
    general_operand,
    "fm#Yr,f#Yr,G,roF#Yf,Fr#Yf,C,Y#rf,Ym#rf,Y#rf",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "+f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "+f",
    DFmode,
    0,
    1
  },
  {
    push_operand,
    "=X,X,X",
    XFmode,
    0,
    1
  },
  {
    general_no_elim_operand,
    "f,Fo,*r",
    XFmode,
    0,
    1
  },
  {
    push_operand,
    "=<,<",
    XFmode,
    0,
    1
  },
  {
    general_no_elim_operand,
    "f#r,ro#f",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f,m,f,*r,o",
    XFmode,
    0,
    1
  },
  {
    general_operand,
    "fm,f,G,*roF,F*r",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f#r,m,f#r,r#f,o",
    XFmode,
    0,
    1
  },
  {
    general_operand,
    "fm#r,f#r,G,roF#f,Fr#f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "+f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "+f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=r,?&q",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,qm",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "qm,0",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "qm",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r,?&q",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,qm",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "qm,0",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "qm",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,?r,?*o,!?y,!?Y",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,rm,r,m,m",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,?r,?*o,!?y,!?Y",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,rm,r,rm,rm",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,o,!?y,!?Y",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm,0,m,m",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,o,!?y,!*?",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm,0,rm,rm",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "r,m",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Q,m",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=*A,r,?r,?*o",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0,0,r,r",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "=X,X,X,&r",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "=*a,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "*0,rm",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "qm",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=*a,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "*0,rm",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=*a,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "*0,rm",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=*a,r",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "*0,qm",
    QImode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fY",
    SFmode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f#Y,mf#Y,Y#f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm#Y,f#Y,mY#f",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=Y",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "mY",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f,m",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm,f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f,m",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm,f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=m,?f#rx,?r#fx,?x#rf",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "f,f,f,f",
    DFmode,
    0,
    1
  },
  {
    memory_operand,
    "=X,m,m,m",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=*!m#fxr,?f#xr,?r#fx,?x#fr,Y#fr",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "f#Y,f#Y,f#Y,f#Y,mY#f",
    DFmode,
    0,
    1
  },
  {
    memory_operand,
    "=X,m,m,m,X",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=*!m,?f#rx,?r#fx,?x#rf,&Y",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "f#Y,f#Y,f#Y,f#Y,mY#f",
    DFmode,
    0,
    1
  },
  {
    memory_operand,
    "=X,m,m,m,X",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=Y,Y,!m",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Y,mY,f#Y",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=&Y,!m",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "mY,f",
    DFmode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=Y,Y",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Y,mY",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=&Y",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "mY",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=m,?f#rx,?r#fx,?x#rf",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "f,f,f,f",
    XFmode,
    0,
    1
  },
  {
    memory_operand,
    "=X,m,m,m",
    SFmode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=m,?f#rY,?r#fY,?Y#rf",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "f,f,f,f",
    XFmode,
    0,
    1
  },
  {
    memory_operand,
    "=X,m,m,m",
    DFmode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=m,?r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "f,f",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "m,m",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "m,m",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "=m,m",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "=&1f,&1f",
    DFmode,
    0,
    0
  },
  {
    memory_operand,
    "=m",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "m",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "m",
    HImode,
    0,
    1
  },
  {
    scratch_operand,
    "=&1f",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "x,xm",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Y,Ym",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=m,?r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "f,f",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "m,m",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "m,m",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "=m,m",
    SImode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "m",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "m",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "x,xm",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Y,Ym",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=m,?r",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "f,f",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "m,m",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "m,m",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "=m,m",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "m",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "m",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=f,f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,r",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=f#x,?f#x,x#f,x#f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,r,r,mr",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x,x",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "r,mr",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=f,?f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=f#x,?f#x,x#f,x#f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,r,r,mr",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=x,x",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "r,mr",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=f,f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,r",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=f#Y,?f#Y,Y#f,Y#f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,r,r,mr",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=Y,Y",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "r,mr",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=f,?f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=f#Y,?f#Y,Y#f,Y#f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,r,r,mr",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=Y,Y",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "r,mr",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=f,f",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,r",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=f,f",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=f,f",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,o",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    DImode,
    0,
    1
  },
  {
    general_operand,
    "roiF,riF",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "re,rm",
    DImode,
    0,
    1
  },
  {
    ix86_carry_flag_operator,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm,q",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qi,qm",
    QImode,
    0,
    1
  },
  {
    ix86_carry_flag_operator,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "ri,rm",
    HImode,
    0,
    1
  },
  {
    ix86_carry_flag_operator,
    "",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "ri,rm",
    SImode,
    0,
    1
  },
  {
    ix86_carry_flag_operator,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "rim",
    SImode,
    0,
    1
  },
  {
    ix86_carry_flag_operator,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    no_seg_address_operand,
    "p",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    no_seg_address_operand,
    "p",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    no_seg_address_operand,
    "p",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    VOIDmode,
    0,
    1
  },
  {
    index_register_operand,
    "r",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "r",
    VOIDmode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    index_register_operand,
    "r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "r",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    VOIDmode,
    0,
    1
  },
  {
    index_register_operand,
    "r",
    VOIDmode,
    0,
    1
  },
  {
    const248_operand,
    "i",
    VOIDmode,
    0,
    1
  },
  {
    nonmemory_operand,
    "ri",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    index_register_operand,
    "r",
    SImode,
    0,
    1
  },
  {
    const248_operand,
    "n",
    SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "ri",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    VOIDmode,
    0,
    1
  },
  {
    index_register_operand,
    "r",
    VOIDmode,
    0,
    1
  },
  {
    const248_operand,
    "i",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "r",
    VOIDmode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    index_register_operand,
    "r",
    SImode,
    0,
    1
  },
  {
    const248_operand,
    "n",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "r",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,rm,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0,r",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "rme,re,re",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "rme,re",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "=r",
    DImode,
    0,
    0
  },
  {
    x86_64_general_operand,
    "%0",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "rme",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "=rm",
    DImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    x86_64_immediate_operand,
    "e",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "=r",
    DImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "%0",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "rme",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,rm,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0,r",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "rmni,rni,rni",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,r",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "rmni,rni",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,rm",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "rmni,rni",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "rmni",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "=r",
    SImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "%0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "rmni",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "=rm",
    SImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    const_int_operand,
    "n",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r,r",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0,r",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "ri,rm,rni",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,rm",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "rmni,rni",
    HImode,
    0,
    1
  },
  {
    scratch_operand,
    "=r",
    HImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "%0",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "rmni",
    HImode,
    0,
    1
  },
  {
    scratch_operand,
    "=rm",
    HImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "0",
    HImode,
    0,
    1
  },
  {
    const_int_operand,
    "n",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm,q,r,r",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0,0,r",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qn,qmn,rn,rn",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm,q,r",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0,0",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qn,qmn,rn",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "+qm,q",
    QImode,
    1,
    1
  },
  {
    general_operand,
    "qn,qnm",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=q,qm",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qmni,qni",
    QImode,
    0,
    1
  },
  {
    scratch_operand,
    "=q",
    QImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "%0",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qmni",
    QImode,
    0,
    1
  },
  {
    scratch_operand,
    "=qm",
    QImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "0",
    QImode,
    0,
    1
  },
  {
    const_int_operand,
    "n",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "=Q",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "0",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "Qmn",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "=Q",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "0",
    VOIDmode,
    0,
    1
  },
  {
    nonmemory_operand,
    "Qn",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "=Q",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "%0",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,o",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    DImode,
    0,
    1
  },
  {
    general_operand,
    "roiF,riF",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "re,rm",
    DImode,
    0,
    1
  },
  {
    ix86_carry_flag_operator,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm,q",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qi,qm",
    QImode,
    0,
    1
  },
  {
    ix86_carry_flag_operator,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "ri,rm",
    HImode,
    0,
    1
  },
  {
    ix86_carry_flag_operator,
    "",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "ri,rm",
    SImode,
    0,
    1
  },
  {
    ix86_carry_flag_operator,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=rm,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "ri,rm",
    SImode,
    0,
    1
  },
  {
    ix86_carry_flag_operator,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "rim",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm,q",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qn,qmn",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "+qm,q",
    QImode,
    1,
    1
  },
  {
    general_operand,
    "qn,qmn",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm,q",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qi,qm",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%rm,rm,0",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "K,e,mr",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%rm,rm,0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "K,i,mr",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%rm,rm,0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "K,i,mr",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r,r",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%rm,rm,0",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "K,i,mr",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "qm",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "qm",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=A",
    TImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=A",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=d",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%a",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "=1",
    DImode,
    0,
    0
  },
  {
    register_operand,
    "=d",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%a",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "=1",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "=d",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%a",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "=1",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "=a",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "qm",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=&a,?a",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=&d,&d",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "1,0",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm,rm",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=&d",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=d",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "3",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=&a,?a",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=&d,&d",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "1,0",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm,rm",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=&d",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=d",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "3",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=&d",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=&d",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=&d",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=d",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "3",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%!*a,r,!*a,r,rm",
    DImode,
    0,
    1
  },
  {
    x86_64_szext_general_operand,
    "Z,Z,e,e,re",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%!*a,r,rm",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "in,in,rin",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%!*a,r,rm",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "n,n,rn",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%!*a,q,qm,r",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "n,n,qn,n",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "n",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "Qm",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    SImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,rm,r,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0,0,qm",
    DImode,
    0,
    1
  },
  {
    x86_64_szext_general_operand,
    "Z,re,rm,L",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,r,rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0,0",
    DImode,
    0,
    1
  },
  {
    x86_64_szext_general_operand,
    "Z,rem,re",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0,qm",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "ri,rm,L",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,rm",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "rim,ri",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r,r",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0,qm",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "ri,rm,L",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,rm",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "rim,ri",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm,q,r",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0,0",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qi,qmi,ri",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "+qm,q",
    QImode,
    1,
    1
  },
  {
    general_operand,
    "qi,qmi",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=q,qm,*r",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0,0",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qim,qi,i",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "+q,qm",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "qmi,qi",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "=Q",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "0",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "n",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "=Q",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "0",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "Qm",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "=Q",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "0",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "Q",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "re,rme",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "rem,re",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "=r",
    DImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "%0",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "rem",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "ri,rmi",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "rim",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=rm",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "%0",
    SImode,
    0,
    1
  },
  {
    x86_64_zext_immediate_operand,
    "Z",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    SImode,
    0,
    1
  },
  {
    x86_64_zext_immediate_operand,
    "Z",
    VOIDmode,
    0,
    1
  },
  {
    scratch_operand,
    "=r",
    SImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "%0",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "rim",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,m",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "rmi,ri",
    HImode,
    0,
    1
  },
  {
    scratch_operand,
    "=r",
    HImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "%0",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "rim",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=q,m,r",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0,0",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qmi,qi,ri",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "+q,m",
    QImode,
    1,
    1
  },
  {
    general_operand,
    "qmi,qi",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=q,qm",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qim,qi",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "+q,qm",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qim,qi",
    QImode,
    0,
    1
  },
  {
    scratch_operand,
    "=q",
    QImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "%0",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "qim",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "%0",
    SImode,
    0,
    1
  },
  {
    x86_64_zext_immediate_operand,
    "Z",
    DImode,
    0,
    1
  },
  {
    ext_register_operand,
    "=q",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "0",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "qmn",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=ro",
    DImode,
    0,
    1
  },
  {
    general_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    QImode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    SFmode,
    0,
    1
  },
  {
    memory_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x#fr,x#fr,f#xr,rm#xf",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,x#fr,0,0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm,0,xm*r,xm*r",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f#r,rm#f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    SFmode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    DFmode,
    0,
    1
  },
  {
    memory_operand,
    "0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=Y#fr,Y#fr,f#Yr,rm#Yf",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,Y#fr,0,0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym,0,Ym*r,Ym*r",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=Y#f,Y#f,fm#Y",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,Y#fr,0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym,0,Ym*r",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f#r,rm#f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f,mf",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=f#r,rm#f",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=Y#fr,Y#fr,mf#Yr,mr#Yf",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,Y#fr,0,0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym,0,Ym*r,Ym*r",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=Y#fr,Y#fr,mf#Yr",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,Y#fr,0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym,0,Ym*r",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm,r",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,r",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "cJ,M",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    immediate_operand,
    "e",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "Jc",
    QImode,
    0,
    1
  },
  {
    scratch_operand,
    "=&r",
    SImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "+r*m,r*m",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "r,r",
    SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "I,c",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,r",
    SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "cI,M",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0,r",
    SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "cI,M",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    const_int_1_31_operand,
    "I",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    const_int_1_31_operand,
    "I",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,r",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,r",
    HImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "cI,M",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    HImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "cI",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    HImode,
    0,
    1
  },
  {
    const_int_1_31_operand,
    "I",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm,r,r",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0,r",
    QImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "cI,cI,M",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm,r",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    QImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "cI,cI",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    QImode,
    0,
    1
  },
  {
    const_int_1_31_operand,
    "I",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=*d,rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "*a,0",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "i,i",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    const1_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "J,c",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "n",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=*d,rm",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "*a,0",
    SImode,
    0,
    1
  },
  {
    const_int_operand,
    "i,i",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=*d,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "*a,0",
    SImode,
    0,
    1
  },
  {
    const_int_operand,
    "i,i",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    const1_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    const1_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,rm",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "I,c",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "I,c",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    HImode,
    0,
    1
  },
  {
    const1_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,rm",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    HImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "I,c",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    QImode,
    0,
    1
  },
  {
    const1_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "+qm",
    QImode,
    1,
    1
  },
  {
    const1_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm,qm",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    QImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "I,c",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "+qm,qm",
    QImode,
    1,
    1
  },
  {
    nonmemory_operand,
    "I,c",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    QImode,
    0,
    1
  },
  {
    const1_operand,
    "I",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "e",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "I,c",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=rm,rm",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "e,c",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=qm",
    QImode,
    0,
    1
  },
  {
    ix86_comparison_operator,
    "",
    QImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "+qm",
    QImode,
    1,
    1
  },
  {
    ix86_comparison_operator,
    "",
    QImode,
    0,
    0
  },
  {
    register_operand,
    "=x",
    SFmode,
    0,
    1
  },
  {
    sse_comparison_operator,
    "",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=Y",
    DFmode,
    0,
    1
  },
  {
    sse_comparison_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym",
    DFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    ix86_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "f#x,x#f",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "f#x,xm#f",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "x",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    scratch_operand,
    "=a",
    HImode,
    0,
    0
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    scratch_operand,
    "=a",
    HImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "rm",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    DImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "c,?*r,?*r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=1,1,*m*r",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "=X,X,r",
    SImode,
    0,
    0
  },
  {
    constant_call_address_operand,
    "",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    call_insn_operand,
    "rsm",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    constant_call_address_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    call_insn_operand,
    "rsm",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    sibcall_insn_operand,
    "s,c,d,a",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    call_insn_operand,
    "rsm",
    DImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    constant_call_address_operand,
    "",
    DImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "c",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "c",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "=&r",
    SImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "=&q",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "=&r",
    DImode,
    0,
    0
  },
  {
    register_operand,
    "=a",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "b",
    SImode,
    0,
    1
  },
  {
    tls_symbolic_operand,
    "",
    SImode,
    0,
    1
  },
  {
    call_insn_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "=d",
    SImode,
    0,
    0
  },
  {
    scratch_operand,
    "=c",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "=a",
    DImode,
    0,
    1
  },
  {
    tls_symbolic_operand,
    "",
    DImode,
    0,
    1
  },
  {
    call_insn_operand,
    "",
    DImode,
    0,
    1
  },
  {
    0,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "b",
    SImode,
    0,
    1
  },
  {
    call_insn_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "=d",
    SImode,
    0,
    0
  },
  {
    scratch_operand,
    "=c",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "=a",
    DImode,
    0,
    1
  },
  {
    call_insn_operand,
    "",
    DImode,
    0,
    1
  },
  {
    0,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=a",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "b",
    SImode,
    0,
    1
  },
  {
    call_insn_operand,
    "",
    SImode,
    0,
    1
  },
  {
    tls_symbolic_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "=d",
    SImode,
    0,
    0
  },
  {
    scratch_operand,
    "=c",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm",
    SFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "=f#x,x#f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm#x,xm#f",
    SFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "=x",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    SFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "=f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm",
    DFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=f#Y,Y#f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm#Y,Ym#f",
    DFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=Y",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym",
    DFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "%0",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "f",
    XFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,fm",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm,0",
    SFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f,x",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,fm,0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm,0,xm#f",
    SFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "=x",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    SFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,?r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    SFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,?r",
    SImode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,fm",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm,0",
    DFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=f#Y,f#Y,Y#f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,fm,0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm,0,Ym#f",
    DFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=Y",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym",
    DFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,?r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    DFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,?r",
    SImode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm,0",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "0,f",
    DFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0,f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm,0",
    SFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0,f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm,0",
    SFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "0,f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "f,0",
    XFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,?r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    XFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,?r",
    SImode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm,0",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "0,f",
    XFmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "0,f",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm,0",
    VOIDmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "=f,f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "0,f",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "fm,0",
    VOIDmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "=f#x,x#f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0#x,xm#f",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=f#Y,Y#f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0#Y,Ym#f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=Y",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "=u",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "1",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=u",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=u",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=u",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "u",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DFmode,
    0,
    1
  },
  {
    scratch_operand,
    "=1",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=f",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "u",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    scratch_operand,
    "=1",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "=f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "u",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    XFmode,
    0,
    1
  },
  {
    scratch_operand,
    "=1",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "=D",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=S",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=S",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=S",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=c",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "2",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=S",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=c",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "2",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=c",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=c",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=c",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=c",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=c",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=S",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=c",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "2",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=S",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=c",
    DImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "2",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=&c",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    QImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=&c",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=D",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "a",
    QImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "1",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    ix86_carry_flag_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    ix86_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "rm,0",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,rm",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    ix86_carry_flag_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    SImode,
    0,
    1
  },
  {
    ix86_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "rm,0",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,rm",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    HImode,
    0,
    1
  },
  {
    ix86_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "rm,0",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,rm",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    QImode,
    0,
    1
  },
  {
    ix86_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "r,0",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "0,r",
    QImode,
    0,
    1
  },
  {
    flags_reg_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "=f#r,f#r,r#f,r#f",
    SFmode,
    0,
    1
  },
  {
    fcmov_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "f#r,0,rm#f,0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,f#r,0,rm#f",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=f#r,f#r,&r#f,&r#f",
    DFmode,
    0,
    1
  },
  {
    fcmov_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "f#r,0,rm#f,0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,f#r,0,rm#f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=f#r,f#r,r#f,r#f",
    DFmode,
    0,
    1
  },
  {
    fcmov_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "f#r,0#r,rm#f,0#f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0#r,f#r,0#f,rm#f",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=f,f",
    XFmode,
    0,
    1
  },
  {
    fcmov_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "f,0",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "0,f",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "=x#f,f#x,f#x",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "0,0,f#x",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm#f,f#x,0",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=x#f,f#x",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm#f,f#x",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=Y#f,f#Y,f#Y",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0,0,f#Y",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym#f,f#Y,0",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=Y#f,f#Y",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0,0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym#f,f#Y",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "0,r",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "i,i",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0,r",
    DImode,
    0,
    1
  },
  {
    x86_64_immediate_operand,
    "e,e",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "r,r",
    DImode,
    0,
    1
  },
  {
    immediate_operand,
    "i,i",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=&x#rf,x#rf,?f#xr,?f#xr,?f#xr,?f#xr,?r#xf,?r#xf,?r#xf,?r#xf",
    SFmode,
    0,
    1
  },
  {
    sse_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "x#fr,0#fr,f#fx,0#fx,f#fx,0#fx,rm#rx,0#rx,rm#rx,0#rx",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "x#fr,x#fr,0#fx,f#fx,0#fx,f#fx,0#fx,rm#rx,0#rx,rm#rx",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0#fx,x#fx,f#x,f#x,xm#f,xm#f,f#x,f#x,xm#f,xm#f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm#f,xm#f,f#x,f#x,x#f,x#f,f#x,f#x,x#f,x#f",
    SFmode,
    0,
    1
  },
  {
    scratch_operand,
    "=2,&4,X,X,X,X,X,X,X,X",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "=&x#rf,x#rf,?f#xr,?f#xr,?r#xf,?r#xf",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "x#fr,0#fr,0#fx,0#fx,0#rx,0#rx",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "x#fr,x#fr,f#fx,f#fx,rm#rx,rm#rx",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0#fx,x#fx,f#x,xm#f,f#x,xm#f",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm#f,xm#f,f#x,x#f,f#x,x#f",
    SFmode,
    0,
    1
  },
  {
    scratch_operand,
    "=1,&3,X,X,X,X",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "=&Y#rf,Y#rf,?f#Yr,?f#Yr,?f#Yr,?f#Yr,?r#Yf,?r#Yf,?r#Yf,?r#Yf",
    DFmode,
    0,
    1
  },
  {
    sse_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "Y#fr,0#fr,f#fY,0#fY,f#fY,0#fY,rm#rY,0#rY,rm#rY,0#rY",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Y#fr,Y#fr,0#fY,f#fY,0#fY,f#fY,0#fY,rm#rY,0#rY,rm#rY",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0#fY,Y#fY,f#Y,f#Y,Ym#f,Ym#f,f#Y,f#Y,Ym#f,Ym#f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym#f,Ym#f,f#Y,f#Y,Y#f,Y#f,f#Y,f#Y,Y#f,Y#f",
    DFmode,
    0,
    1
  },
  {
    scratch_operand,
    "=2,&4,X,X,X,X,X,X,X,X",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=&Y#rf,Y#rf,?f#Yr,?f#Yr,?r#Yf,?r#Yf",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Y#fr,0#fr,0#fY,0#fY,0#rY,0#rY",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Y#fr,Y#fr,f#fY,f#fY,rm#rY,rm#rY",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0#fY,Y#fY,f#Y,Ym#f,f#Y,Ym#f",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym#f,Ym#f,f#Y,Y#f,f#Y,Y#f",
    DFmode,
    0,
    1
  },
  {
    scratch_operand,
    "=1,&3,X,X,X,X",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "=&x",
    SFmode,
    0,
    1
  },
  {
    sse_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "x",
    SFmode,
    0,
    1
  },
  {
    const0_operand,
    "X",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=&x",
    SFmode,
    0,
    1
  },
  {
    sse_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    const0_operand,
    "X",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=&x",
    SFmode,
    0,
    1
  },
  {
    fcmov_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "x",
    SFmode,
    0,
    1
  },
  {
    const0_operand,
    "X",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=&x",
    SFmode,
    0,
    1
  },
  {
    fcmov_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    const0_operand,
    "X",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "=&Y",
    DFmode,
    0,
    1
  },
  {
    sse_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "Y",
    DFmode,
    0,
    1
  },
  {
    const0_operand,
    "X",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=&Y",
    DFmode,
    0,
    1
  },
  {
    sse_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    const0_operand,
    "X",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "Y",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=&Y",
    DFmode,
    0,
    1
  },
  {
    fcmov_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "Y",
    DFmode,
    0,
    1
  },
  {
    const0_operand,
    "X",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=&Y",
    DFmode,
    0,
    1
  },
  {
    fcmov_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    const0_operand,
    "X",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "Y",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "Ym",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "a",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "=0",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "a",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "=0",
    DImode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    constant_call_address_operand,
    "",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    call_insn_operand,
    "rsm",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    constant_call_address_operand,
    "",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    DImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    sibcall_insn_operand,
    "s,c,d,a",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    call_insn_operand,
    "rsm",
    DImode,
    0,
    1
  },
  {
    0,
    "",
    DImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    constant_call_address_operand,
    "",
    DImode,
    0,
    1
  },
  {
    0,
    "",
    DImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    DImode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,x,m",
    V4SFmode,
    0,
    1
  },
  {
    vector_move_operand,
    "C,xm,x",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,x,m",
    V4SImode,
    0,
    1
  },
  {
    vector_move_operand,
    "C,xm,x",
    V4SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,x,m",
    V2DImode,
    0,
    1
  },
  {
    vector_move_operand,
    "C,xm,x",
    V2DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=y,y,m",
    V8QImode,
    0,
    1
  },
  {
    vector_move_operand,
    "C,ym,y",
    V8QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=y,y,m",
    V4HImode,
    0,
    1
  },
  {
    vector_move_operand,
    "C,ym,y",
    V4HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=y,y,m",
    V2SImode,
    0,
    1
  },
  {
    vector_move_operand,
    "C,ym,y",
    V2SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=y,y,m",
    V2SFmode,
    0,
    1
  },
  {
    vector_move_operand,
    "C,ym,y",
    V2SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,x,m",
    V2DFmode,
    0,
    1
  },
  {
    vector_move_operand,
    "C,xm,x",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,x,m",
    V8HImode,
    0,
    1
  },
  {
    vector_move_operand,
    "C,xm,x",
    V8HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,x,m",
    V16QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "C,xm,x",
    V16QImode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    TImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    TImode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V2DFmode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V2DImode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V8HImode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V16QImode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V4SFmode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V4SImode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V2SImode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V4HImode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V8QImode,
    0,
    1
  },
  {
    push_operand,
    "=<",
    V2SFmode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V2SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,x,m",
    TImode,
    0,
    1
  },
  {
    vector_move_operand,
    "C,xm,x",
    TImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,o,x,x,xm",
    TImode,
    0,
    1
  },
  {
    general_operand,
    "riFo,riF,C,xm,x",
    TImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=r,o,x,x,xm",
    TFmode,
    0,
    1
  },
  {
    general_operand,
    "riFo,riF,C,xm,x",
    TFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,m",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm,x",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "D",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "D",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V8QImode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V4SFmode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,m",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,x",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SFmode,
    0,
    1
  },
  {
    memory_operand,
    "m",
    SFmode,
    0,
    1
  },
  {
    const0_operand,
    "X",
    V4SFmode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SFmode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    TImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    TImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    TImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "%0",
    V2DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    TImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    TImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    TImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SFmode,
    0,
    1
  },
  {
    const0_operand,
    "X",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V4SFmode,
    0,
    1
  },
  {
    sse_comparison_operator,
    "",
    V4SImode,
    0,
    0
  },
  {
    register_operand,
    "x",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=x,x",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "r,rm",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x,x",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "r,rm",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "x,m",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "x,m",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "x,xm",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "x,xm",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "%0",
    V8QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "%0",
    V4HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "%0",
    V2SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "%0",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V8QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V8QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    SImode,
    0,
    1
  },
  {
    const_0_to_15_operand,
    "N",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V4HImode,
    0,
    1
  },
  {
    const_0_to_3_operand,
    "N",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V4HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V4HImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4HImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "yi",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "yi",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "yi",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V8QImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V4HImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "y",
    V2SImode,
    0,
    1
  },
  {
    memory_operand,
    "m",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    BLKmode,
    0,
    1
  },
  {
    register_operand,
    "R",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "r",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "i",
    DImode,
    0,
    1
  },
  {
    0,
    "X",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "n",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V2SFmode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V2SFmode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V2SFmode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "y",
    V2SFmode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V2SFmode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V2SImode,
    0,
    1
  },
  {
    address_operand,
    "p",
    SImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    SImode,
    0,
    1
  },
  {
    address_operand,
    "p",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    SImode,
    0,
    1
  },
  {
    address_operand,
    "p",
    SImode,
    0,
    1
  },
  {
    const_int_operand,
    "n",
    SImode,
    0,
    1
  },
  {
    address_operand,
    "p",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "n",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "xm",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "x",
    V2DFmode,
    0,
    1
  },
  {
    sse_comparison_operator,
    "",
    V2DImode,
    0,
    0
  },
  {
    register_operand,
    "x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "D",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "D",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V16QImode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V2DFmode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V2DImode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    V2SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "x,m",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "x,m",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "x,xm",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=r,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "x,xm",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=x,x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "r,rm",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x,x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "r,rm",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=x,x",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "0,0",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "x,xm",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "%0",
    V16QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "%0",
    V8HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "%0",
    V4SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "%0",
    V2DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V16QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V8HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "=y",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "ym",
    V2SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V8HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V16QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V8HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    SImode,
    0,
    1
  },
  {
    const_0_to_255_operand,
    "N",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V8HImode,
    0,
    1
  },
  {
    const_0_to_7_operand,
    "N",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V4SImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V8HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V8HImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V8HImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "xi",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "xi",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "xi",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V8HImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "xi",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "xi",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "xi",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    TImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    TImode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V8HImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V4SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V2DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,m",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm,x",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,m",
    V16QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm,x",
    V16QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=m,y",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "x,x",
    V2DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=m,y,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "x,x,x",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "=x,?x",
    V2DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,y",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=x,?x,?x",
    V2DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,y,r",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V2DImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V4SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "mr",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=mr",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V4SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,m",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "m,x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DFmode,
    0,
    1
  },
  {
    memory_operand,
    "m",
    DFmode,
    0,
    1
  },
  {
    const0_operand,
    "X",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "=x,x,m",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "0,0,0",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "x,m,x",
    V2DFmode,
    0,
    1
  },
  {
    memory_operand,
    "=m",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "0",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "xm",
    V2DFmode,
    0,
    1
  },
  {
    immediate_operand,
    "i",
    SImode,
    0,
    1
  },
  {
    address_operand,
    "p",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "a",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "c",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "d",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V16QImode,
    0,
    1
  },
  {
    memory_operand,
    "m",
    V16QImode,
    0,
    1
  },
  {
    register_operand,
    "=x",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "x",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "",
    DImode,
    0,
    1
  },
  {
    cmpsi_operand,
    "",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    general_operand,
    "",
    DImode,
    0,
    1
  },
  {
    ext_register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "",
    QImode,
    0,
    1
  },
  {
    cmp_fp_expander_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    cmp_fp_expander_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    cmp_fp_expander_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    cmp_fp_expander_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    cmp_fp_expander_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    cmp_fp_expander_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    1,
    1
  },
  {
    general_operand,
    "",
    HImode,
    0,
    1
  },
  {
    0,
    "=m",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "r",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=&q",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    1,
    1
  },
  {
    general_operand,
    "",
    QImode,
    0,
    1
  },
  {
    push_operand,
    "",
    DImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    DImode,
    0,
    0
  },
  {
    push_operand,
    "",
    DImode,
    0,
    1
  },
  {
    general_operand,
    "",
    DImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    DImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    general_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    push_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    push_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    any_fp_register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    general_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    push_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    any_fp_register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    push_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    general_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    general_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    push_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    push_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    any_fp_register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "rm",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    general_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "",
    SImode,
    0,
    0
  },
  {
    memory_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    push_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    fp_register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    push_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    fp_register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    push_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    fp_register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    general_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    general_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    general_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    fp_register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "",
    VOIDmode,
    0,
    0
  },
  {
    memory_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    scratch_operand,
    "x",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    scratch_operand,
    "Y",
    DFmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    scratch_operand,
    "x",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    scratch_operand,
    "Y",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    fp_register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    general_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    index_register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    index_register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    index_register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const248_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    index_register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    const248_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    index_register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const248_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    index_register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    const248_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    x86_64_nonmemory_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    x86_64_general_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    TImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "",
    DImode,
    0,
    0
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "=d",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "",
    DImode,
    0,
    0
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    QImode,
    0,
    1
  },
  {
    ext_register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    x86_64_szext_general_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    ext_register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    0,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    0,
    "",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    fp_register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_and_not_fp_reg_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    0,
    "",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    0,
    "",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    fp_register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_and_not_fp_reg_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    fp_register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_and_not_fp_reg_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    0,
    "",
    V4SFmode,
    0,
    1
  },
  {
    shiftdi_operand,
    "",
    DImode,
    0,
    1
  },
  {
    shiftdi_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    QImode,
    0,
    1
  },
  {
    scratch_operand,
    "",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "r",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    index_register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    ext_register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    ext_register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    ix86_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "",
    QImode,
    1,
    1
  },
  {
    ix86_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    scratch_operand,
    "=a",
    HImode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "rm",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "",
    SImode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "",
    SImode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    ix86_comparison_operator,
    "",
    QImode,
    0,
    0
  },
  {
    q_regs_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    QImode,
    0,
    1
  },
  {
    0,
    "",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    QImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    QImode,
    0,
    1
  },
  {
    0,
    "",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    QImode,
    0,
    1
  },
  {
    0,
    "",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "",
    DImode,
    0,
    0
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    tls_symbolic_operand,
    "",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    SImode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    tls_symbolic_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    SImode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    call_insn_operand,
    "",
    SImode,
    0,
    1
  },
  {
    tls_symbolic_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "",
    SImode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    binary_fp_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    scratch_operand,
    "",
    XFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    BLKmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    BLKmode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    SImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    BLKmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    BLKmode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    BLKmode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    BLKmode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "",
    BLKmode,
    0,
    1
  },
  {
    general_operand,
    "",
    BLKmode,
    0,
    1
  },
  {
    general_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "",
    BLKmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    general_operand,
    "",
    BLKmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "",
    DImode,
    0,
    1
  },
  {
    general_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "",
    HImode,
    0,
    1
  },
  {
    general_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    general_operand,
    "",
    QImode,
    0,
    1
  },
  {
    general_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    ix86_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    flags_reg_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_and_not_any_fp_reg_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    fcmov_comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    flags_reg_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    XFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    DImode,
    0,
    1
  },
  {
    fp_register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    fp_register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonimmediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    sse_comparison_operator,
    "",
    SFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    sse_comparison_operator,
    "",
    DFmode,
    0,
    0
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonmemory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    nonmemory_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DFmode,
    0,
    1
  },
  {
    register_operand,
    "=r",
    SImode,
    0,
    1
  },
  {
    general_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    aligned_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    promotable_binary_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    aligned_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    aligned_operand,
    "",
    HImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    comparison_operator,
    "",
    VOIDmode,
    0,
    0
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    push_operand,
    "",
    SImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    SImode,
    0,
    0
  },
  {
    push_operand,
    "",
    DImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    DImode,
    0,
    0
  },
  {
    push_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    SFmode,
    0,
    0
  },
  {
    push_operand,
    "",
    HImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    HImode,
    0,
    0
  },
  {
    push_operand,
    "",
    QImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    QImode,
    0,
    1
  },
  {
    scratch_operand,
    "q",
    QImode,
    0,
    0
  },
  {
    memory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    SImode,
    0,
    0
  },
  {
    memory_operand,
    "",
    HImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    HImode,
    0,
    0
  },
  {
    memory_operand,
    "",
    QImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    scratch_operand,
    "q",
    QImode,
    0,
    0
  },
  {
    memory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    0,
    "",
    VOIDmode,
    0,
    0
  },
  {
    scratch_operand,
    "r",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    QImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    SImode,
    0,
    0
  },
  {
    arith_or_logical_operator,
    "",
    SImode,
    0,
    0
  },
  {
    memory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    SImode,
    0,
    0
  },
  {
    arith_or_logical_operator,
    "",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "",
    VOIDmode,
    1,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonmemory_operand,
    "",
    DImode,
    0,
    1
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    SImode,
    0,
    0
  },
  {
    scratch_operand,
    "r",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    incdec_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    incdec_operand,
    "",
    HImode,
    0,
    1
  },
  {
    register_operand,
    "",
    QImode,
    0,
    1
  },
  {
    incdec_operand,
    "",
    QImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    DImode,
    0,
    0
  },
  {
    scratch_operand,
    "r",
    DImode,
    0,
    0
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    DImode,
    0,
    0
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    DImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    DImode,
    0,
    0
  },
  {
    register_operand,
    "",
    SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    SImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    SImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    SImode,
    0,
    0
  },
  {
    register_operand,
    "",
    HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    HImode,
    0,
    1
  },
  {
    scratch_operand,
    "r",
    HImode,
    0,
    0
  },
  {
    register_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    zero_extended_scalar_load_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    zero_extended_scalar_load_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    TImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    TImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    TFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    TFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V8HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V8HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V16QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V16QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V4SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V4SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V2DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V2DImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V2SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V2SImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V4HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V4HImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V8QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V8QImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V2SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V2SFmode,
    0,
    1
  },
  {
    push_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    register_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    TImode,
    0,
    1
  },
  {
    general_operand,
    "",
    TImode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    TFmode,
    0,
    1
  },
  {
    general_operand,
    "",
    TFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V4SFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    register_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    nonimmediate_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    0,
    "",
    BLKmode,
    0,
    1
  },
  {
    register_operand,
    "",
    DImode,
    0,
    1
  },
  {
    immediate_operand,
    "",
    DImode,
    0,
    1
  },
  {
    0,
    "",
    VOIDmode,
    0,
    1
  },
  {
    address_operand,
    "",
    VOIDmode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    SImode,
    0,
    1
  },
  {
    const_int_operand,
    "",
    SImode,
    0,
    1
  },
  {
    register_operand,
    "",
    V2DFmode,
    0,
    1
  },
  {
    memory_operand,
    "",
    DFmode,
    0,
    1
  }
};
const struct insn_data insn_data[] =
{
  {
    "cmpdi_ccno_1_rex64",
    { 0, output_0, 0 },
    (insn_gen_fn) gen_cmpdi_ccno_1_rex64,
    &operand_data[1],
    2,
    0,
    2,
    2
  },
  {
    "*cmpdi_minus_1_rex64",
    {
    "cmp{q}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[3],
    2,
    0,
    2,
    1
  },
  {
    "cmpdi_1_insn_rex64",
    {
    "cmp{q}\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cmpdi_1_insn_rex64,
    &operand_data[5],
    2,
    0,
    2,
    1
  },
  {
    "*cmpsi_ccno_1",
    { 0, output_3, 0 },
    0,
    &operand_data[7],
    2,
    0,
    2,
    2
  },
  {
    "*cmpsi_minus_1",
    {
    "cmp{l}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[9],
    2,
    0,
    2,
    1
  },
  {
    "*cmpsi_1_insn",
    {
    "cmp{l}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[9],
    2,
    0,
    2,
    1
  },
  {
    "*cmphi_ccno_1",
    { 0, output_6, 0 },
    0,
    &operand_data[11],
    2,
    0,
    2,
    2
  },
  {
    "*cmphi_minus_1",
    {
    "cmp{w}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[13],
    2,
    0,
    2,
    1
  },
  {
    "*cmphi_1",
    {
    "cmp{w}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[13],
    2,
    0,
    2,
    1
  },
  {
    "*cmpqi_ccno_1",
    { 0, output_9, 0 },
    0,
    &operand_data[15],
    2,
    0,
    2,
    2
  },
  {
    "*cmpqi_1",
    {
    "cmp{b}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[17],
    2,
    0,
    2,
    1
  },
  {
    "*cmpqi_minus_1",
    {
    "cmp{b}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[17],
    2,
    0,
    2,
    1
  },
  {
    "*cmpqi_ext_1",
    {
    "cmp{b}\t{%h1, %0|%0, %h1}",
    0, 0 },
    0,
    &operand_data[19],
    2,
    0,
    1,
    1
  },
  {
    "*cmpqi_ext_1_rex64",
    {
    "cmp{b}\t{%h1, %0|%0, %h1}",
    0, 0 },
    0,
    &operand_data[21],
    2,
    0,
    1,
    1
  },
  {
    "*cmpqi_ext_2",
    {
    "test{b}\t%h0, %h0",
    0, 0 },
    0,
    &operand_data[22],
    2,
    0,
    1,
    1
  },
  {
    "cmpqi_ext_3_insn",
    {
    "cmp{b}\t{%1, %h0|%h0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cmpqi_ext_3_insn,
    &operand_data[24],
    2,
    0,
    1,
    1
  },
  {
    "cmpqi_ext_3_insn_rex64",
    {
    "cmp{b}\t{%1, %h0|%h0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cmpqi_ext_3_insn_rex64,
    &operand_data[26],
    2,
    0,
    1,
    1
  },
  {
    "*cmpqi_ext_4",
    {
    "cmp{b}\t{%h1, %h0|%h0, %h1}",
    0, 0 },
    0,
    &operand_data[28],
    2,
    0,
    1,
    1
  },
  {
    "*cmpfp_0",
    { 0, 0, output_18 },
    0,
    &operand_data[30],
    3,
    0,
    1,
    3
  },
  {
    "*cmpfp_2_sf",
    { 0, 0, output_19 },
    0,
    &operand_data[33],
    2,
    0,
    1,
    3
  },
  {
    "*cmpfp_2_sf_1",
    { 0, 0, output_20 },
    0,
    &operand_data[35],
    3,
    0,
    1,
    3
  },
  {
    "*cmpfp_2_df",
    { 0, 0, output_21 },
    0,
    &operand_data[38],
    2,
    0,
    1,
    3
  },
  {
    "*cmpfp_2_df_1",
    { 0, 0, output_22 },
    0,
    &operand_data[40],
    3,
    0,
    1,
    3
  },
  {
    "*cmpfp_2_xf",
    { 0, 0, output_23 },
    0,
    &operand_data[43],
    2,
    0,
    1,
    3
  },
  {
    "*cmpfp_2_xf_1",
    { 0, 0, output_24 },
    0,
    &operand_data[45],
    3,
    0,
    1,
    3
  },
  {
    "*cmpfp_2u",
    { 0, 0, output_25 },
    0,
    &operand_data[48],
    2,
    0,
    1,
    3
  },
  {
    "*cmpfp_2u_1",
    { 0, 0, output_26 },
    0,
    &operand_data[50],
    3,
    0,
    1,
    3
  },
  {
    "*ficom_1",
    {
    "#",
    0, 0 },
    0,
    &operand_data[53],
    2,
    0,
    2,
    1
  },
  {
    "x86_fnstsw_1",
    {
    "fnstsw\t%0",
    0, 0 },
    (insn_gen_fn) gen_x86_fnstsw_1,
    &operand_data[30],
    1,
    0,
    1,
    1
  },
  {
    "x86_sahf_1",
    {
    "sahf",
    0, 0 },
    (insn_gen_fn) gen_x86_sahf_1,
    &operand_data[55],
    1,
    0,
    1,
    1
  },
  {
    "*cmpfp_i",
    { 0, 0, output_30 },
    0,
    &operand_data[48],
    2,
    0,
    1,
    3
  },
  {
    "*cmpfp_i_sse",
    { 0, 0, output_31 },
    0,
    &operand_data[56],
    2,
    0,
    2,
    3
  },
  {
    "*cmpfp_i_sse_only",
    { 0, 0, output_32 },
    0,
    &operand_data[58],
    2,
    0,
    1,
    3
  },
  {
    "*cmpfp_iu",
    { 0, 0, output_33 },
    0,
    &operand_data[48],
    2,
    0,
    1,
    3
  },
  {
    "*cmpfp_iu_sse",
    { 0, 0, output_34 },
    0,
    &operand_data[56],
    2,
    0,
    2,
    3
  },
  {
    "*cmpfp_iu_sse_only",
    { 0, 0, output_35 },
    0,
    &operand_data[58],
    2,
    0,
    1,
    3
  },
  {
    "*pushsi2",
    {
    "push{l}\t%1",
    0, 0 },
    0,
    &operand_data[60],
    2,
    0,
    1,
    1
  },
  {
    "*pushsi2_rex64",
    {
    "push{q}\t%q1",
    0, 0 },
    0,
    &operand_data[62],
    2,
    0,
    1,
    1
  },
  {
    "*pushsi2_prologue",
    {
    "push{l}\t%1",
    0, 0 },
    0,
    &operand_data[60],
    2,
    0,
    1,
    1
  },
  {
    "*popsi1_epilogue",
    {
    "pop{l}\t%0",
    0, 0 },
    0,
    &operand_data[64],
    1,
    0,
    1,
    1
  },
  {
    "popsi1",
    {
    "pop{l}\t%0",
    0, 0 },
    (insn_gen_fn) gen_popsi1,
    &operand_data[64],
    1,
    0,
    1,
    1
  },
  {
    "*movsi_xor",
    {
    "xor{l}\t{%0, %0|%0, %0}",
    0, 0 },
    0,
    &operand_data[65],
    2,
    0,
    1,
    1
  },
  {
    "*movsi_or",
    { 0, 0, output_42 },
    0,
    &operand_data[67],
    2,
    0,
    1,
    3
  },
  {
    "*movsi_1",
    { 0, 0, output_43 },
    0,
    &operand_data[69],
    2,
    0,
    8,
    3
  },
  {
    "*movsi_1_nointernunit",
    { 0, 0, output_44 },
    0,
    &operand_data[71],
    2,
    0,
    8,
    3
  },
  {
    "*movabssi_1_rex64",
    { 0, output_45, 0 },
    0,
    &operand_data[73],
    2,
    0,
    2,
    2
  },
  {
    "*movabssi_2_rex64",
    { 0, output_46, 0 },
    0,
    &operand_data[75],
    2,
    0,
    2,
    2
  },
  {
    "*swapsi",
    {
    "xchg{l}\t%1, %0",
    0, 0 },
    0,
    &operand_data[77],
    2,
    2,
    1,
    1
  },
  {
    "*pushhi2",
    { 0, output_48, 0 },
    0,
    &operand_data[79],
    2,
    0,
    2,
    2
  },
  {
    "*pushhi2_rex64",
    {
    "push{q}\t%q1",
    0, 0 },
    0,
    &operand_data[81],
    2,
    0,
    1,
    1
  },
  {
    "*movhi_1",
    { 0, 0, output_50 },
    0,
    &operand_data[83],
    2,
    0,
    4,
    3
  },
  {
    "*movabshi_1_rex64",
    { 0, output_51, 0 },
    0,
    &operand_data[85],
    2,
    0,
    2,
    2
  },
  {
    "*movabshi_2_rex64",
    { 0, output_52, 0 },
    0,
    &operand_data[87],
    2,
    0,
    2,
    2
  },
  {
    "*swaphi_1",
    {
    "xchg{w}\t%1, %0",
    0, 0 },
    0,
    &operand_data[89],
    2,
    2,
    1,
    1
  },
  {
    "*swaphi_2",
    {
    "xchg{l}\t%k1, %k0",
    0, 0 },
    0,
    &operand_data[89],
    2,
    2,
    1,
    1
  },
  {
    "*movstricthi_1",
    {
    "mov{w}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[91],
    2,
    0,
    2,
    1
  },
  {
    "*movstricthi_xor",
    {
    "xor{w}\t{%0, %0|%0, %0}",
    0, 0 },
    0,
    &operand_data[93],
    2,
    0,
    1,
    1
  },
  {
    "*pushqi2",
    { 0, output_57, 0 },
    0,
    &operand_data[95],
    2,
    0,
    2,
    2
  },
  {
    "*pushqi2_rex64",
    {
    "push{q}\t%q1",
    0, 0 },
    0,
    &operand_data[97],
    2,
    0,
    1,
    1
  },
  {
    "*movqi_1",
    { 0, 0, output_59 },
    0,
    &operand_data[99],
    2,
    0,
    7,
    3
  },
  {
    "*swapqi",
    {
    "xchg{b}\t%1, %0",
    0, 0 },
    0,
    &operand_data[101],
    2,
    2,
    1,
    1
  },
  {
    "*movstrictqi_1",
    {
    "mov{b}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[103],
    2,
    0,
    2,
    1
  },
  {
    "*movstrictqi_xor",
    {
    "xor{b}\t{%0, %0|%0, %0}",
    0, 0 },
    0,
    &operand_data[105],
    2,
    0,
    1,
    1
  },
  {
    "*movsi_extv_1",
    {
    "movs{bl|x}\t{%h1, %0|%0, %h1}",
    0, 0 },
    0,
    &operand_data[107],
    2,
    0,
    1,
    1
  },
  {
    "*movhi_extv_1",
    {
    "movs{bl|x}\t{%h1, %k0|%k0, %h1}",
    0, 0 },
    0,
    &operand_data[109],
    2,
    0,
    1,
    1
  },
  {
    "*movqi_extv_1",
    { 0, 0, output_65 },
    0,
    &operand_data[111],
    2,
    0,
    2,
    3
  },
  {
    "*movqi_extv_1_rex64",
    { 0, 0, output_66 },
    0,
    &operand_data[113],
    2,
    0,
    2,
    3
  },
  {
    "*movabsqi_1_rex64",
    { 0, output_67, 0 },
    0,
    &operand_data[115],
    2,
    0,
    2,
    2
  },
  {
    "*movabsqi_2_rex64",
    { 0, output_68, 0 },
    0,
    &operand_data[117],
    2,
    0,
    2,
    2
  },
  {
    "*movsi_extzv_1",
    {
    "movz{bl|x}\t{%h1, %0|%0, %h1}",
    0, 0 },
    0,
    &operand_data[107],
    2,
    0,
    1,
    1
  },
  {
    "*movqi_extzv_2",
    { 0, 0, output_70 },
    0,
    &operand_data[119],
    2,
    0,
    2,
    3
  },
  {
    "*movqi_extzv_2_rex64",
    { 0, 0, output_71 },
    0,
    &operand_data[113],
    2,
    0,
    2,
    3
  },
  {
    "movsi_insv_1",
    {
    "mov{b}\t{%b1, %h0|%h0, %b1}",
    0, 0 },
    (insn_gen_fn) gen_movsi_insv_1,
    &operand_data[121],
    2,
    0,
    1,
    1
  },
  {
    "movdi_insv_1_rex64",
    {
    "mov{b}\t{%b1, %h0|%h0, %b1}",
    0, 0 },
    (insn_gen_fn) gen_movdi_insv_1_rex64,
    &operand_data[123],
    2,
    0,
    1,
    1
  },
  {
    "*movqi_insv_2",
    {
    "mov{b}\t{%h1, %h0|%h0, %h1}",
    0, 0 },
    0,
    &operand_data[125],
    2,
    0,
    1,
    1
  },
  {
    "*pushdi",
    {
    "#",
    0, 0 },
    0,
    &operand_data[127],
    2,
    0,
    1,
    1
  },
  {
    "pushdi2_rex64",
    { 0, output_76, 0 },
    (insn_gen_fn) gen_pushdi2_rex64,
    &operand_data[129],
    2,
    0,
    2,
    2
  },
  {
    "*pushdi2_prologue_rex64",
    {
    "push{q}\t%1",
    0, 0 },
    0,
    &operand_data[131],
    2,
    0,
    1,
    1
  },
  {
    "*popdi1_epilogue_rex64",
    {
    "pop{q}\t%0",
    0, 0 },
    0,
    &operand_data[133],
    1,
    0,
    1,
    1
  },
  {
    "popdi1",
    {
    "pop{q}\t%0",
    0, 0 },
    (insn_gen_fn) gen_popdi1,
    &operand_data[133],
    1,
    0,
    1,
    1
  },
  {
    "*movdi_xor_rex64",
    {
    "xor{l}\t{%k0, %k0|%k0, %k0}",
    0, 0 },
    0,
    &operand_data[134],
    2,
    0,
    1,
    1
  },
  {
    "*movdi_or_rex64",
    { 0, 0, output_81 },
    0,
    &operand_data[136],
    2,
    0,
    1,
    3
  },
  {
    "*movdi_2",
    { 0, output_82, 0 },
    0,
    &operand_data[138],
    2,
    0,
    7,
    2
  },
  {
    "*movdi_1_rex64",
    { 0, 0, output_83 },
    0,
    &operand_data[140],
    2,
    0,
    11,
    3
  },
  {
    "*movdi_1_rex64_nointerunit",
    { 0, 0, output_84 },
    0,
    &operand_data[142],
    2,
    0,
    11,
    3
  },
  {
    "*movabsdi_1_rex64",
    { 0, output_85, 0 },
    0,
    &operand_data[144],
    2,
    0,
    2,
    2
  },
  {
    "*movabsdi_2_rex64",
    { 0, output_86, 0 },
    0,
    &operand_data[146],
    2,
    0,
    2,
    2
  },
  {
    "*swapdi_rex64",
    {
    "xchg{q}\t%1, %0",
    0, 0 },
    0,
    &operand_data[148],
    2,
    2,
    1,
    1
  },
  {
    "*pushsf",
    { 0, 0, output_88 },
    0,
    &operand_data[150],
    2,
    0,
    3,
    3
  },
  {
    "*pushsf_rex64",
    { 0, 0, output_89 },
    0,
    &operand_data[152],
    2,
    0,
    3,
    3
  },
  {
    "*movsf_1",
    { 0, 0, output_90 },
    0,
    &operand_data[154],
    2,
    0,
    12,
    3
  },
  {
    "*movsf_1_nointerunit",
    { 0, 0, output_91 },
    0,
    &operand_data[156],
    2,
    0,
    12,
    3
  },
  {
    "*swapsf",
    { 0, 0, output_92 },
    0,
    &operand_data[158],
    2,
    2,
    1,
    3
  },
  {
    "*pushdf_nointeger",
    { 0, 0, output_93 },
    0,
    &operand_data[160],
    2,
    0,
    4,
    3
  },
  {
    "*pushdf_integer",
    { 0, 0, output_94 },
    0,
    &operand_data[162],
    2,
    0,
    3,
    3
  },
  {
    "*movdf_nointeger",
    { 0, 0, output_95 },
    0,
    &operand_data[164],
    2,
    0,
    9,
    3
  },
  {
    "*movdf_integer",
    { 0, 0, output_96 },
    0,
    &operand_data[166],
    2,
    0,
    9,
    3
  },
  {
    "*swapdf",
    { 0, 0, output_97 },
    0,
    &operand_data[168],
    2,
    2,
    1,
    3
  },
  {
    "*pushxf_nointeger",
    { 0, 0, output_98 },
    0,
    &operand_data[170],
    2,
    0,
    3,
    3
  },
  {
    "*pushxf_integer",
    { 0, 0, output_99 },
    0,
    &operand_data[172],
    2,
    0,
    2,
    3
  },
  {
    "*movxf_nointeger",
    { 0, 0, output_100 },
    0,
    &operand_data[174],
    2,
    0,
    5,
    3
  },
  {
    "*movxf_integer",
    { 0, 0, output_101 },
    0,
    &operand_data[176],
    2,
    0,
    5,
    3
  },
  {
    "swapxf",
    { 0, 0, output_102 },
    (insn_gen_fn) gen_swapxf,
    &operand_data[178],
    2,
    2,
    1,
    3
  },
  {
    "zero_extendhisi2_and",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_zero_extendhisi2_and,
    &operand_data[180],
    2,
    0,
    1,
    1
  },
  {
    "*zero_extendhisi2_movzwl",
    {
    "movz{wl|x}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[182],
    2,
    0,
    1,
    1
  },
  {
    "*zero_extendqihi2_and",
    {
    "#",
    0, 0 },
    0,
    &operand_data[184],
    2,
    0,
    2,
    1
  },
  {
    "*zero_extendqihi2_movzbw_and",
    {
    "#",
    0, 0 },
    0,
    &operand_data[186],
    2,
    0,
    2,
    1
  },
  {
    "*zero_extendqihi2_movzbw",
    {
    "movz{bw|x}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[188],
    2,
    0,
    1,
    1
  },
  {
    "*zero_extendqisi2_and",
    {
    "#",
    0, 0 },
    0,
    &operand_data[190],
    2,
    0,
    2,
    1
  },
  {
    "*zero_extendqisi2_movzbw_and",
    {
    "#",
    0, 0 },
    0,
    &operand_data[192],
    2,
    0,
    2,
    1
  },
  {
    "*zero_extendqisi2_movzbw",
    {
    "movz{bl|x}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[194],
    2,
    0,
    1,
    1
  },
  {
    "zero_extendsidi2_32",
    { 0, output_111, 0 },
    (insn_gen_fn) gen_zero_extendsidi2_32,
    &operand_data[196],
    2,
    0,
    5,
    2
  },
  {
    "*zero_extendsidi2_32_1",
    { 0, output_112, 0 },
    0,
    &operand_data[198],
    2,
    0,
    5,
    2
  },
  {
    "zero_extendsidi2_rex64",
    { 0, output_113, 0 },
    (insn_gen_fn) gen_zero_extendsidi2_rex64,
    &operand_data[200],
    2,
    0,
    4,
    2
  },
  {
    "*zero_extendsidi2_rex64_1",
    { 0, output_114, 0 },
    0,
    &operand_data[202],
    2,
    0,
    4,
    2
  },
  {
    "zero_extendhidi2",
    { 0, output_115, 0 },
    (insn_gen_fn) gen_zero_extendhidi2,
    &operand_data[204],
    2,
    0,
    2,
    2
  },
  {
    "zero_extendqidi2",
    { 0, output_116, 0 },
    (insn_gen_fn) gen_zero_extendqidi2,
    &operand_data[206],
    2,
    0,
    2,
    2
  },
  {
    "*extendsidi2_1",
    {
    "#",
    0, 0 },
    0,
    &operand_data[208],
    3,
    0,
    4,
    1
  },
  {
    "extendsidi2_rex64",
    { 0, output_118, 0 },
    (insn_gen_fn) gen_extendsidi2_rex64,
    &operand_data[211],
    2,
    0,
    2,
    2
  },
  {
    "extendhidi2",
    {
    "movs{wq|x}\t{%1,%0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_extendhidi2,
    &operand_data[213],
    2,
    0,
    1,
    1
  },
  {
    "extendqidi2",
    {
    "movs{bq|x}\t{%1,%0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_extendqidi2,
    &operand_data[215],
    2,
    0,
    1,
    1
  },
  {
    "extendhisi2",
    { 0, 0, output_121 },
    (insn_gen_fn) gen_extendhisi2,
    &operand_data[217],
    2,
    0,
    2,
    3
  },
  {
    "*extendhisi2_zext",
    { 0, 0, output_122 },
    0,
    &operand_data[219],
    2,
    0,
    2,
    3
  },
  {
    "extendqihi2",
    { 0, 0, output_123 },
    (insn_gen_fn) gen_extendqihi2,
    &operand_data[221],
    2,
    0,
    2,
    3
  },
  {
    "extendqisi2",
    {
    "movs{bl|x}\t{%1,%0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_extendqisi2,
    &operand_data[194],
    2,
    0,
    1,
    1
  },
  {
    "*extendqisi2_zext",
    {
    "movs{bl|x}\t{%1,%k0|%k0, %1}",
    0, 0 },
    0,
    &operand_data[215],
    2,
    0,
    1,
    1
  },
  {
    "*dummy_extendsfdf2",
    {
    "#",
    0, 0 },
    0,
    &operand_data[223],
    2,
    0,
    1,
    1
  },
  {
    "*dummy_extendsfxf2",
    {
    "#",
    0, 0 },
    0,
    &operand_data[225],
    2,
    0,
    1,
    1
  },
  {
    "*extendsfdf2_1",
    { 0, 0, output_128 },
    0,
    &operand_data[227],
    2,
    0,
    3,
    3
  },
  {
    "*extendsfdf2_1_sse_only",
    {
    "cvtss2sd\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[229],
    2,
    0,
    1,
    1
  },
  {
    "*extendsfxf2_1",
    { 0, 0, output_130 },
    0,
    &operand_data[231],
    2,
    0,
    2,
    3
  },
  {
    "*extenddfxf2_1",
    { 0, 0, output_131 },
    0,
    &operand_data[233],
    2,
    0,
    2,
    3
  },
  {
    "truncdfsf2_noop",
    { 0, 0, output_132 },
    (insn_gen_fn) gen_truncdfsf2_noop,
    &operand_data[235],
    2,
    0,
    1,
    3
  },
  {
    "*truncdfsf2_1",
    { 0, 0, output_133 },
    0,
    &operand_data[237],
    3,
    0,
    4,
    3
  },
  {
    "*truncdfsf2_1_sse",
    { 0, 0, output_134 },
    0,
    &operand_data[240],
    3,
    0,
    5,
    3
  },
  {
    "*truncdfsf2_1_sse_nooverlap",
    { 0, 0, output_135 },
    0,
    &operand_data[243],
    3,
    0,
    5,
    3
  },
  {
    "*truncdfsf2_2",
    { 0, 0, output_136 },
    0,
    &operand_data[246],
    2,
    0,
    3,
    3
  },
  {
    "*truncdfsf2_2_nooverlap",
    { 0, 0, output_137 },
    0,
    &operand_data[248],
    2,
    0,
    2,
    3
  },
  {
    "*truncdfsf2_3",
    { 0, 0, output_138 },
    0,
    &operand_data[250],
    2,
    0,
    1,
    3
  },
  {
    "truncdfsf2_sse_only",
    {
    "cvtsd2ss\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_truncdfsf2_sse_only,
    &operand_data[252],
    2,
    0,
    2,
    1
  },
  {
    "*truncdfsf2_sse_only_nooverlap",
    {
    "#",
    0, 0 },
    0,
    &operand_data[254],
    2,
    0,
    1,
    1
  },
  {
    "truncxfsf2_noop",
    { 0, 0, output_141 },
    (insn_gen_fn) gen_truncxfsf2_noop,
    &operand_data[256],
    2,
    0,
    1,
    3
  },
  {
    "*truncxfsf2_1",
    { 0, 0, output_142 },
    0,
    &operand_data[258],
    3,
    0,
    4,
    3
  },
  {
    "*truncxfsf2_2",
    { 0, 0, output_143 },
    0,
    &operand_data[261],
    2,
    0,
    1,
    3
  },
  {
    "truncxfdf2_noop",
    { 0, 0, output_144 },
    (insn_gen_fn) gen_truncxfdf2_noop,
    &operand_data[263],
    2,
    0,
    1,
    3
  },
  {
    "*truncxfdf2_1",
    { 0, 0, output_145 },
    0,
    &operand_data[265],
    3,
    0,
    4,
    3
  },
  {
    "*truncxfdf2_2",
    { 0, 0, output_146 },
    0,
    &operand_data[268],
    2,
    0,
    1,
    3
  },
  {
    "*fix_truncdi_1",
    {
    "#",
    0, 0 },
    0,
    &operand_data[270],
    2,
    0,
    2,
    1
  },
  {
    "fix_truncdi_nomemory",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_fix_truncdi_nomemory,
    &operand_data[270],
    6,
    0,
    2,
    1
  },
  {
    "fix_truncdi_memory",
    { 0, 0, output_149 },
    (insn_gen_fn) gen_fix_truncdi_memory,
    &operand_data[276],
    5,
    0,
    1,
    3
  },
  {
    "fix_truncsfdi_sse",
    {
    "cvttss2si{q}\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_fix_truncsfdi_sse,
    &operand_data[281],
    2,
    0,
    2,
    1
  },
  {
    "fix_truncdfdi_sse",
    {
    "cvttsd2si{q}\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_fix_truncdfdi_sse,
    &operand_data[283],
    2,
    0,
    2,
    1
  },
  {
    "*fix_truncsi_1",
    {
    "#",
    0, 0 },
    0,
    &operand_data[285],
    2,
    0,
    2,
    1
  },
  {
    "fix_truncsi_nomemory",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_fix_truncsi_nomemory,
    &operand_data[285],
    5,
    0,
    2,
    1
  },
  {
    "fix_truncsi_memory",
    { 0, 0, output_154 },
    (insn_gen_fn) gen_fix_truncsi_memory,
    &operand_data[290],
    4,
    0,
    1,
    3
  },
  {
    "fix_truncsfsi_sse",
    {
    "cvttss2si\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_fix_truncsfsi_sse,
    &operand_data[294],
    2,
    0,
    2,
    1
  },
  {
    "fix_truncdfsi_sse",
    {
    "cvttsd2si\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_fix_truncdfsi_sse,
    &operand_data[296],
    2,
    0,
    2,
    1
  },
  {
    "*fix_trunchi_1",
    {
    "#",
    0, 0 },
    0,
    &operand_data[298],
    2,
    0,
    2,
    1
  },
  {
    "fix_trunchi_nomemory",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_fix_trunchi_nomemory,
    &operand_data[298],
    5,
    0,
    2,
    1
  },
  {
    "fix_trunchi_memory",
    { 0, 0, output_159 },
    (insn_gen_fn) gen_fix_trunchi_memory,
    &operand_data[303],
    4,
    0,
    1,
    3
  },
  {
    "x86_fnstcw_1",
    {
    "fnstcw\t%0",
    0, 0 },
    (insn_gen_fn) gen_x86_fnstcw_1,
    &operand_data[303],
    1,
    0,
    1,
    1
  },
  {
    "x86_fldcw_1",
    {
    "fldcw\t%0",
    0, 0 },
    (insn_gen_fn) gen_x86_fldcw_1,
    &operand_data[278],
    1,
    0,
    1,
    1
  },
  {
    "*floathisf2_1",
    { 0, output_162, 0 },
    0,
    &operand_data[307],
    2,
    0,
    2,
    2
  },
  {
    "*floatsisf2_i387",
    { 0, output_163, 0 },
    0,
    &operand_data[309],
    2,
    0,
    4,
    2
  },
  {
    "*floatsisf2_sse",
    {
    "cvtsi2ss\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[311],
    2,
    0,
    2,
    1
  },
  {
    "*floatdisf2_i387_only",
    { 0, output_165, 0 },
    0,
    &operand_data[313],
    2,
    0,
    2,
    2
  },
  {
    "*floatdisf2_i387",
    { 0, output_166, 0 },
    0,
    &operand_data[315],
    2,
    0,
    4,
    2
  },
  {
    "*floatdisf2_sse",
    {
    "cvtsi2ss{q}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[317],
    2,
    0,
    2,
    1
  },
  {
    "*floathidf2_1",
    { 0, output_168, 0 },
    0,
    &operand_data[319],
    2,
    0,
    2,
    2
  },
  {
    "*floatsidf2_i387",
    { 0, output_169, 0 },
    0,
    &operand_data[321],
    2,
    0,
    4,
    2
  },
  {
    "*floatsidf2_sse",
    {
    "cvtsi2sd\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[323],
    2,
    0,
    2,
    1
  },
  {
    "*floatdidf2_i387_only",
    { 0, output_171, 0 },
    0,
    &operand_data[325],
    2,
    0,
    2,
    2
  },
  {
    "*floatdidf2_i387",
    { 0, output_172, 0 },
    0,
    &operand_data[327],
    2,
    0,
    4,
    2
  },
  {
    "*floatdidf2_sse",
    {
    "cvtsi2sd{q}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[329],
    2,
    0,
    2,
    1
  },
  {
    "floathixf2",
    { 0, output_174, 0 },
    (insn_gen_fn) gen_floathixf2,
    &operand_data[331],
    2,
    0,
    2,
    2
  },
  {
    "floatsixf2",
    { 0, output_175, 0 },
    (insn_gen_fn) gen_floatsixf2,
    &operand_data[333],
    2,
    0,
    2,
    2
  },
  {
    "floatdixf2",
    { 0, output_176, 0 },
    (insn_gen_fn) gen_floatdixf2,
    &operand_data[335],
    2,
    0,
    2,
    2
  },
  {
    "*adddi3_1",
    {
    "#",
    0, 0 },
    0,
    &operand_data[337],
    3,
    0,
    2,
    1
  },
  {
    "adddi3_carry_rex64",
    {
    "adc{q}\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_adddi3_carry_rex64,
    &operand_data[340],
    4,
    0,
    2,
    1
  },
  {
    "*adddi3_cc_rex64",
    {
    "add{q}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[340],
    3,
    2,
    2,
    1
  },
  {
    "addqi3_carry",
    {
    "adc{b}\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addqi3_carry,
    &operand_data[344],
    4,
    0,
    2,
    1
  },
  {
    "addhi3_carry",
    {
    "adc{w}\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addhi3_carry,
    &operand_data[348],
    4,
    0,
    2,
    1
  },
  {
    "addsi3_carry",
    {
    "adc{l}\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addsi3_carry,
    &operand_data[352],
    4,
    0,
    2,
    1
  },
  {
    "*addsi3_carry_zext",
    {
    "adc{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[356],
    4,
    0,
    1,
    1
  },
  {
    "*addsi3_cc",
    {
    "add{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[352],
    3,
    2,
    2,
    1
  },
  {
    "addqi3_cc",
    {
    "add{b}\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addqi3_cc,
    &operand_data[344],
    3,
    2,
    2,
    1
  },
  {
    "*lea_1",
    {
    "lea{l}\t{%a1, %0|%0, %a1}",
    0, 0 },
    0,
    &operand_data[360],
    2,
    0,
    1,
    1
  },
  {
    "*lea_1_rex64",
    {
    "lea{l}\t{%a1, %0|%0, %a1}",
    0, 0 },
    0,
    &operand_data[362],
    2,
    0,
    1,
    1
  },
  {
    "*lea_1_zext",
    {
    "lea{l}\t{%a1, %k0|%k0, %a1}",
    0, 0 },
    0,
    &operand_data[364],
    2,
    0,
    1,
    1
  },
  {
    "*lea_2_rex64",
    {
    "lea{q}\t{%a1, %0|%0, %a1}",
    0, 0 },
    0,
    &operand_data[364],
    2,
    0,
    1,
    1
  },
  {
    "*lea_general_1",
    {
    "#",
    0, 0 },
    0,
    &operand_data[366],
    4,
    0,
    1,
    1
  },
  {
    "*lea_general_1_zext",
    {
    "#",
    0, 0 },
    0,
    &operand_data[370],
    4,
    0,
    1,
    1
  },
  {
    "*lea_general_2",
    {
    "#",
    0, 0 },
    0,
    &operand_data[374],
    4,
    0,
    1,
    1
  },
  {
    "*lea_general_2_zext",
    {
    "#",
    0, 0 },
    0,
    &operand_data[378],
    4,
    0,
    1,
    1
  },
  {
    "*lea_general_3",
    {
    "#",
    0, 0 },
    0,
    &operand_data[382],
    5,
    0,
    1,
    1
  },
  {
    "*lea_general_3_zext",
    {
    "#",
    0, 0 },
    0,
    &operand_data[387],
    5,
    0,
    1,
    1
  },
  {
    "*adddi_1_rex64",
    { 0, 0, output_196 },
    0,
    &operand_data[392],
    3,
    0,
    3,
    3
  },
  {
    "*adddi_2_rex64",
    { 0, 0, output_197 },
    0,
    &operand_data[395],
    3,
    2,
    2,
    3
  },
  {
    "*adddi_3_rex64",
    { 0, 0, output_198 },
    0,
    &operand_data[398],
    3,
    0,
    1,
    3
  },
  {
    "*adddi_4_rex64",
    { 0, 0, output_199 },
    0,
    &operand_data[401],
    3,
    0,
    1,
    3
  },
  {
    "*adddi_5_rex64",
    { 0, 0, output_200 },
    0,
    &operand_data[404],
    3,
    0,
    1,
    3
  },
  {
    "*addsi_1",
    { 0, 0, output_201 },
    0,
    &operand_data[407],
    3,
    0,
    3,
    3
  },
  {
    "addsi_1_zext",
    { 0, 0, output_202 },
    (insn_gen_fn) gen_addsi_1_zext,
    &operand_data[410],
    3,
    0,
    2,
    3
  },
  {
    "*addsi_2",
    { 0, 0, output_203 },
    0,
    &operand_data[413],
    3,
    2,
    2,
    3
  },
  {
    "*addsi_2_zext",
    { 0, 0, output_204 },
    0,
    &operand_data[416],
    3,
    2,
    1,
    3
  },
  {
    "*addsi_3",
    { 0, 0, output_205 },
    0,
    &operand_data[419],
    3,
    0,
    1,
    3
  },
  {
    "*addsi_3_zext",
    { 0, 0, output_206 },
    0,
    &operand_data[416],
    3,
    2,
    1,
    3
  },
  {
    "*addsi_4",
    { 0, 0, output_207 },
    0,
    &operand_data[422],
    3,
    0,
    1,
    3
  },
  {
    "*addsi_5",
    { 0, 0, output_208 },
    0,
    &operand_data[419],
    3,
    0,
    1,
    3
  },
  {
    "*addhi_1_lea",
    { 0, 0, output_209 },
    0,
    &operand_data[425],
    3,
    0,
    3,
    3
  },
  {
    "*addhi_1",
    { 0, 0, output_210 },
    0,
    &operand_data[348],
    3,
    0,
    2,
    3
  },
  {
    "*addhi_2",
    { 0, 0, output_211 },
    0,
    &operand_data[428],
    3,
    2,
    2,
    3
  },
  {
    "*addhi_3",
    { 0, 0, output_212 },
    0,
    &operand_data[431],
    3,
    0,
    1,
    3
  },
  {
    "*addhi_4",
    { 0, 0, output_213 },
    0,
    &operand_data[434],
    3,
    0,
    1,
    3
  },
  {
    "*addhi_5",
    { 0, 0, output_214 },
    0,
    &operand_data[431],
    3,
    0,
    1,
    3
  },
  {
    "*addqi_1_lea",
    { 0, 0, output_215 },
    0,
    &operand_data[437],
    3,
    0,
    4,
    3
  },
  {
    "*addqi_1",
    { 0, 0, output_216 },
    0,
    &operand_data[440],
    3,
    0,
    3,
    3
  },
  {
    "*addqi_1_slp",
    { 0, 0, output_217 },
    0,
    &operand_data[443],
    2,
    1,
    2,
    3
  },
  {
    "*addqi_2",
    { 0, 0, output_218 },
    0,
    &operand_data[445],
    3,
    2,
    2,
    3
  },
  {
    "*addqi_3",
    { 0, 0, output_219 },
    0,
    &operand_data[448],
    3,
    0,
    1,
    3
  },
  {
    "*addqi_4",
    { 0, 0, output_220 },
    0,
    &operand_data[451],
    3,
    0,
    1,
    3
  },
  {
    "*addqi_5",
    { 0, 0, output_221 },
    0,
    &operand_data[448],
    3,
    0,
    1,
    3
  },
  {
    "addqi_ext_1",
    { 0, 0, output_222 },
    (insn_gen_fn) gen_addqi_ext_1,
    &operand_data[454],
    3,
    0,
    1,
    3
  },
  {
    "*addqi_ext_1_rex64",
    { 0, 0, output_223 },
    0,
    &operand_data[457],
    3,
    0,
    1,
    3
  },
  {
    "*addqi_ext_2",
    {
    "add{b}\t{%h2, %h0|%h0, %h2}",
    0, 0 },
    0,
    &operand_data[460],
    3,
    0,
    1,
    1
  },
  {
    "*subdi3_1",
    {
    "#",
    0, 0 },
    0,
    &operand_data[463],
    3,
    0,
    2,
    1
  },
  {
    "subdi3_carry_rex64",
    {
    "sbb{q}\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subdi3_carry_rex64,
    &operand_data[466],
    4,
    0,
    2,
    1
  },
  {
    "*subdi_1_rex64",
    {
    "sub{q}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[466],
    3,
    0,
    2,
    1
  },
  {
    "*subdi_2_rex64",
    {
    "sub{q}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[466],
    3,
    2,
    2,
    1
  },
  {
    "*subdi_3_rex63",
    {
    "sub{q}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[466],
    3,
    2,
    2,
    1
  },
  {
    "subqi3_carry",
    {
    "sbb{b}\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subqi3_carry,
    &operand_data[470],
    4,
    0,
    2,
    1
  },
  {
    "subhi3_carry",
    {
    "sbb{w}\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subhi3_carry,
    &operand_data[474],
    4,
    0,
    2,
    1
  },
  {
    "subsi3_carry",
    {
    "sbb{l}\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subsi3_carry,
    &operand_data[478],
    4,
    0,
    2,
    1
  },
  {
    "subsi3_carry_zext",
    {
    "sbb{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subsi3_carry_zext,
    &operand_data[482],
    4,
    0,
    2,
    1
  },
  {
    "*subsi_1",
    {
    "sub{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[478],
    3,
    0,
    2,
    1
  },
  {
    "*subsi_1_zext",
    {
    "sub{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[486],
    3,
    0,
    1,
    1
  },
  {
    "*subsi_2",
    {
    "sub{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[478],
    3,
    2,
    2,
    1
  },
  {
    "*subsi_2_zext",
    {
    "sub{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[486],
    3,
    2,
    1,
    1
  },
  {
    "*subsi_3",
    {
    "sub{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[478],
    3,
    2,
    2,
    1
  },
  {
    "*subsi_3_zext",
    {
    "sub{q}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[486],
    3,
    2,
    1,
    1
  },
  {
    "*subhi_1",
    {
    "sub{w}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[474],
    3,
    0,
    2,
    1
  },
  {
    "*subhi_2",
    {
    "sub{w}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[474],
    3,
    2,
    2,
    1
  },
  {
    "*subhi_3",
    {
    "sub{w}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[474],
    3,
    2,
    2,
    1
  },
  {
    "*subqi_1",
    {
    "sub{b}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[489],
    3,
    0,
    2,
    1
  },
  {
    "*subqi_1_slp",
    {
    "sub{b}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[492],
    2,
    1,
    2,
    1
  },
  {
    "*subqi_2",
    {
    "sub{b}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[494],
    3,
    2,
    2,
    1
  },
  {
    "*subqi_3",
    {
    "sub{b}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[494],
    3,
    2,
    2,
    1
  },
  {
    "*muldi3_1_rex64",
    { 0, output_247, 0 },
    0,
    &operand_data[497],
    3,
    0,
    3,
    2
  },
  {
    "*mulsi3_1",
    { 0, output_248, 0 },
    0,
    &operand_data[500],
    3,
    0,
    3,
    2
  },
  {
    "*mulsi3_1_zext",
    { 0, output_249, 0 },
    0,
    &operand_data[503],
    3,
    0,
    3,
    2
  },
  {
    "*mulhi3_1",
    { 0, output_250, 0 },
    0,
    &operand_data[506],
    3,
    0,
    3,
    2
  },
  {
    "*mulqi3_1",
    {
    "mul{b}\t%2",
    0, 0 },
    0,
    &operand_data[509],
    3,
    0,
    1,
    1
  },
  {
    "*umulqihi3_1",
    {
    "mul{b}\t%2",
    0, 0 },
    0,
    &operand_data[512],
    3,
    0,
    1,
    1
  },
  {
    "*mulqihi3_insn",
    {
    "imul{b}\t%2",
    0, 0 },
    0,
    &operand_data[512],
    3,
    0,
    1,
    1
  },
  {
    "*umulditi3_insn",
    {
    "mul{q}\t%2",
    0, 0 },
    0,
    &operand_data[515],
    3,
    0,
    1,
    1
  },
  {
    "*umulsidi3_insn",
    {
    "mul{l}\t%2",
    0, 0 },
    0,
    &operand_data[518],
    3,
    0,
    1,
    1
  },
  {
    "*mulditi3_insn",
    {
    "imul{q}\t%2",
    0, 0 },
    0,
    &operand_data[515],
    3,
    0,
    1,
    1
  },
  {
    "*mulsidi3_insn",
    {
    "imul{l}\t%2",
    0, 0 },
    0,
    &operand_data[518],
    3,
    0,
    1,
    1
  },
  {
    "*umuldi3_highpart_rex64",
    {
    "mul{q}\t%2",
    0, 0 },
    0,
    &operand_data[521],
    4,
    0,
    1,
    1
  },
  {
    "*umulsi3_highpart_insn",
    {
    "mul{l}\t%2",
    0, 0 },
    0,
    &operand_data[525],
    4,
    0,
    1,
    1
  },
  {
    "*umulsi3_highpart_zext",
    {
    "mul{l}\t%2",
    0, 0 },
    0,
    &operand_data[529],
    4,
    0,
    1,
    1
  },
  {
    "*smuldi3_highpart_rex64",
    {
    "imul{q}\t%2",
    0, 0 },
    0,
    &operand_data[521],
    4,
    0,
    1,
    1
  },
  {
    "*smulsi3_highpart_insn",
    {
    "imul{l}\t%2",
    0, 0 },
    0,
    &operand_data[525],
    4,
    0,
    1,
    1
  },
  {
    "*smulsi3_highpart_zext",
    {
    "imul{l}\t%2",
    0, 0 },
    0,
    &operand_data[529],
    4,
    0,
    1,
    1
  },
  {
    "divqi3",
    {
    "idiv{b}\t%2",
    0, 0 },
    (insn_gen_fn) gen_divqi3,
    &operand_data[533],
    3,
    0,
    1,
    1
  },
  {
    "udivqi3",
    {
    "div{b}\t%2",
    0, 0 },
    (insn_gen_fn) gen_udivqi3,
    &operand_data[533],
    3,
    0,
    1,
    1
  },
  {
    "*divmoddi4_nocltd_rex64",
    {
    "#",
    0, 0 },
    0,
    &operand_data[536],
    4,
    2,
    2,
    1
  },
  {
    "*divmoddi4_cltd_rex64",
    {
    "#",
    0, 0 },
    0,
    &operand_data[540],
    4,
    2,
    1,
    1
  },
  {
    "*divmoddi_noext_rex64",
    {
    "idiv{q}\t%2",
    0, 0 },
    0,
    &operand_data[544],
    5,
    2,
    1,
    1
  },
  {
    "*divmodsi4_nocltd",
    {
    "#",
    0, 0 },
    0,
    &operand_data[549],
    4,
    2,
    2,
    1
  },
  {
    "*divmodsi4_cltd",
    {
    "#",
    0, 0 },
    0,
    &operand_data[553],
    4,
    2,
    1,
    1
  },
  {
    "*divmodsi_noext",
    {
    "idiv{l}\t%2",
    0, 0 },
    0,
    &operand_data[557],
    5,
    2,
    1,
    1
  },
  {
    "divmodhi4",
    {
    "cwtd\n\tidiv{w}\t%2",
    0, 0 },
    (insn_gen_fn) gen_divmodhi4,
    &operand_data[562],
    4,
    2,
    1,
    1
  },
  {
    "udivmoddi4",
    {
    "xor{q}\t%3, %3\n\tdiv{q}\t%2",
    0, 0 },
    (insn_gen_fn) gen_udivmoddi4,
    &operand_data[566],
    4,
    2,
    1,
    1
  },
  {
    "*udivmoddi4_noext",
    {
    "div{q}\t%2",
    0, 0 },
    0,
    &operand_data[544],
    4,
    3,
    1,
    1
  },
  {
    "udivmodsi4",
    {
    "xor{l}\t%3, %3\n\tdiv{l}\t%2",
    0, 0 },
    (insn_gen_fn) gen_udivmodsi4,
    &operand_data[570],
    4,
    2,
    1,
    1
  },
  {
    "*udivmodsi4_noext",
    {
    "div{l}\t%2",
    0, 0 },
    0,
    &operand_data[557],
    4,
    3,
    1,
    1
  },
  {
    "*udivmodhi_noext",
    {
    "div{w}\t%2",
    0, 0 },
    0,
    &operand_data[574],
    5,
    2,
    1,
    1
  },
  {
    "*testdi_1_rex64",
    { 0, output_278, 0 },
    0,
    &operand_data[579],
    2,
    0,
    5,
    2
  },
  {
    "testsi_1",
    {
    "test{l}\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_testsi_1,
    &operand_data[581],
    2,
    0,
    3,
    1
  },
  {
    "*testhi_1",
    {
    "test{w}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[583],
    2,
    0,
    3,
    1
  },
  {
    "*testqi_1",
    { 0, 0, output_281 },
    0,
    &operand_data[585],
    2,
    0,
    4,
    3
  },
  {
    "*testqi_ext_0",
    {
    "test{b}\t{%1, %h0|%h0, %1}",
    0, 0 },
    0,
    &operand_data[587],
    2,
    0,
    1,
    1
  },
  {
    "*testqi_ext_1",
    {
    "test{b}\t{%1, %h0|%h0, %1}",
    0, 0 },
    0,
    &operand_data[589],
    2,
    0,
    1,
    1
  },
  {
    "*testqi_ext_1_rex64",
    {
    "test{b}\t{%1, %h0|%h0, %1}",
    0, 0 },
    0,
    &operand_data[20],
    2,
    0,
    1,
    1
  },
  {
    "*testqi_ext_2",
    {
    "test{b}\t{%h1, %h0|%h0, %h1}",
    0, 0 },
    0,
    &operand_data[28],
    2,
    0,
    1,
    1
  },
  {
    "*testqi_ext_3",
    {
    "#",
    0, 0 },
    0,
    &operand_data[591],
    3,
    0,
    1,
    1
  },
  {
    "*testqi_ext_3_rex64",
    {
    "#",
    0, 0 },
    0,
    &operand_data[594],
    3,
    0,
    1,
    1
  },
  {
    "*anddi_1_rex64",
    { 0, 0, output_288 },
    0,
    &operand_data[597],
    3,
    0,
    4,
    3
  },
  {
    "*anddi_2",
    { 0, output_289, 0 },
    0,
    &operand_data[600],
    3,
    2,
    3,
    2
  },
  {
    "*andsi_1",
    { 0, 0, output_290 },
    0,
    &operand_data[603],
    3,
    0,
    3,
    3
  },
  {
    "*andsi_1_zext",
    {
    "and{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[356],
    3,
    0,
    1,
    1
  },
  {
    "*andsi_2",
    {
    "and{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[606],
    3,
    2,
    2,
    1
  },
  {
    "*andsi_2_zext",
    {
    "and{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[356],
    3,
    2,
    1,
    1
  },
  {
    "*andhi_1",
    { 0, 0, output_294 },
    0,
    &operand_data[609],
    3,
    0,
    3,
    3
  },
  {
    "*andhi_2",
    {
    "and{w}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[612],
    3,
    2,
    2,
    1
  },
  {
    "*andqi_1",
    { 0, output_296, 0 },
    0,
    &operand_data[615],
    3,
    0,
    3,
    2
  },
  {
    "*andqi_1_slp",
    {
    "and{b}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[618],
    2,
    1,
    2,
    1
  },
  {
    "*andqi_2",
    { 0, 0, output_298 },
    0,
    &operand_data[620],
    3,
    2,
    3,
    3
  },
  {
    "*andqi_2_slp",
    {
    "and{b}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[623],
    2,
    3,
    2,
    1
  },
  {
    "andqi_ext_0",
    {
    "and{b}\t{%2, %h0|%h0, %2}",
    0, 0 },
    (insn_gen_fn) gen_andqi_ext_0,
    &operand_data[625],
    3,
    0,
    1,
    1
  },
  {
    "*andqi_ext_0_cc",
    {
    "and{b}\t{%2, %h0|%h0, %2}",
    0, 0 },
    0,
    &operand_data[625],
    3,
    2,
    1,
    1
  },
  {
    "*andqi_ext_1",
    {
    "and{b}\t{%2, %h0|%h0, %2}",
    0, 0 },
    0,
    &operand_data[628],
    3,
    0,
    1,
    1
  },
  {
    "*andqi_ext_1_rex64",
    {
    "and{b}\t{%2, %h0|%h0, %2}",
    0, 0 },
    0,
    &operand_data[631],
    3,
    0,
    1,
    1
  },
  {
    "*andqi_ext_2",
    {
    "and{b}\t{%h2, %h0|%h0, %h2}",
    0, 0 },
    0,
    &operand_data[460],
    3,
    0,
    1,
    1
  },
  {
    "*iordi_1_rex64",
    {
    "or{q}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[634],
    3,
    0,
    2,
    1
  },
  {
    "*iordi_2_rex64",
    {
    "or{q}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[637],
    3,
    2,
    2,
    1
  },
  {
    "*iordi_3_rex64",
    {
    "or{q}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[640],
    3,
    0,
    1,
    1
  },
  {
    "*iorsi_1",
    {
    "or{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[643],
    3,
    0,
    2,
    1
  },
  {
    "*iorsi_1_zext",
    {
    "or{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[646],
    3,
    0,
    1,
    1
  },
  {
    "*iorsi_1_zext_imm",
    {
    "or{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[649],
    3,
    0,
    1,
    1
  },
  {
    "*iorsi_2",
    {
    "or{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[606],
    3,
    2,
    2,
    1
  },
  {
    "*iorsi_2_zext",
    {
    "or{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[356],
    3,
    2,
    1,
    1
  },
  {
    "*iorsi_2_zext_imm",
    {
    "or{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[652],
    3,
    2,
    1,
    1
  },
  {
    "*iorsi_3",
    {
    "or{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[655],
    3,
    0,
    1,
    1
  },
  {
    "*iorhi_1",
    {
    "or{w}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[658],
    3,
    0,
    2,
    1
  },
  {
    "*iorhi_2",
    {
    "or{w}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[612],
    3,
    2,
    2,
    1
  },
  {
    "*iorhi_3",
    {
    "or{w}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[661],
    3,
    0,
    1,
    1
  },
  {
    "*iorqi_1",
    { 0, output_318, 0 },
    0,
    &operand_data[664],
    3,
    0,
    3,
    2
  },
  {
    "*iorqi_1_slp",
    {
    "or{b}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[667],
    2,
    1,
    2,
    1
  },
  {
    "*iorqi_2",
    {
    "or{b}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[669],
    3,
    2,
    2,
    1
  },
  {
    "*iorqi_2_slp",
    {
    "or{b}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[672],
    2,
    3,
    2,
    1
  },
  {
    "*iorqi_3",
    {
    "or{b}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[674],
    3,
    0,
    1,
    1
  },
  {
    "iorqi_ext_0",
    {
    "or{b}\t{%2, %h0|%h0, %2}",
    0, 0 },
    (insn_gen_fn) gen_iorqi_ext_0,
    &operand_data[625],
    3,
    0,
    1,
    1
  },
  {
    "*iorqi_ext_1",
    {
    "or{b}\t{%2, %h0|%h0, %2}",
    0, 0 },
    0,
    &operand_data[628],
    3,
    0,
    1,
    1
  },
  {
    "*iorqi_ext_1_rex64",
    {
    "or{b}\t{%2, %h0|%h0, %2}",
    0, 0 },
    0,
    &operand_data[631],
    3,
    0,
    1,
    1
  },
  {
    "*iorqi_ext_2",
    {
    "ior{b}\t{%h2, %h0|%h0, %h2}",
    0, 0 },
    0,
    &operand_data[631],
    3,
    0,
    1,
    1
  },
  {
    "*xordi_1_rex64",
    { 0, output_327, 0 },
    0,
    &operand_data[340],
    3,
    0,
    2,
    2
  },
  {
    "*xordi_2_rex64",
    { 0, output_328, 0 },
    0,
    &operand_data[637],
    3,
    2,
    2,
    2
  },
  {
    "*xordi_3_rex64",
    {
    "xor{q}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[640],
    3,
    0,
    1,
    1
  },
  {
    "*xorsi_1",
    {
    "xor{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[352],
    3,
    0,
    2,
    1
  },
  {
    "*xorsi_1_zext",
    {
    "xor{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[356],
    3,
    0,
    1,
    1
  },
  {
    "*xorsi_1_zext_imm",
    {
    "xor{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[677],
    3,
    0,
    1,
    1
  },
  {
    "*xorsi_2",
    {
    "xor{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[606],
    3,
    2,
    2,
    1
  },
  {
    "*xorsi_2_zext",
    {
    "xor{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[356],
    3,
    2,
    1,
    1
  },
  {
    "*xorsi_2_zext_imm",
    {
    "xor{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[652],
    3,
    2,
    1,
    1
  },
  {
    "*xorsi_3",
    {
    "xor{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[655],
    3,
    0,
    1,
    1
  },
  {
    "*xorhi_1",
    {
    "xor{w}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[658],
    3,
    0,
    2,
    1
  },
  {
    "*xorhi_2",
    {
    "xor{w}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[612],
    3,
    2,
    2,
    1
  },
  {
    "*xorhi_3",
    {
    "xor{w}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[661],
    3,
    0,
    1,
    1
  },
  {
    "*xorqi_1",
    { 0, output_340, 0 },
    0,
    &operand_data[664],
    3,
    0,
    3,
    2
  },
  {
    "*xorqi_1_slp",
    {
    "xor{b}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[618],
    2,
    1,
    2,
    1
  },
  {
    "xorqi_ext_0",
    {
    "xor{b}\t{%2, %h0|%h0, %2}",
    0, 0 },
    (insn_gen_fn) gen_xorqi_ext_0,
    &operand_data[625],
    3,
    0,
    1,
    1
  },
  {
    "*xorqi_ext_1",
    {
    "xor{b}\t{%2, %h0|%h0, %2}",
    0, 0 },
    0,
    &operand_data[628],
    3,
    0,
    1,
    1
  },
  {
    "*xorqi_ext_1_rex64",
    {
    "xor{b}\t{%2, %h0|%h0, %2}",
    0, 0 },
    0,
    &operand_data[631],
    3,
    0,
    1,
    1
  },
  {
    "*xorqi_ext_2",
    {
    "xor{b}\t{%h2, %h0|%h0, %h2}",
    0, 0 },
    0,
    &operand_data[631],
    3,
    0,
    1,
    1
  },
  {
    "*xorqi_cc_1",
    {
    "xor{b}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[669],
    3,
    2,
    2,
    1
  },
  {
    "*xorqi_2_slp",
    {
    "xor{b}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[672],
    2,
    3,
    2,
    1
  },
  {
    "*xorqi_cc_2",
    {
    "xor{b}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[674],
    3,
    0,
    1,
    1
  },
  {
    "*xorqi_cc_ext_1",
    {
    "xor{b}\t{%2, %h0|%h0, %2}",
    0, 0 },
    0,
    &operand_data[680],
    3,
    2,
    1,
    1
  },
  {
    "*xorqi_cc_ext_1_rex64",
    {
    "xor{b}\t{%2, %h0|%h0, %2}",
    0, 0 },
    0,
    &operand_data[457],
    3,
    2,
    1,
    1
  },
  {
    "*negdi2_1",
    {
    "#",
    0, 0 },
    0,
    &operand_data[683],
    2,
    0,
    1,
    1
  },
  {
    "*negdi2_1_rex64",
    {
    "neg{q}\t%0",
    0, 0 },
    0,
    &operand_data[685],
    2,
    0,
    1,
    1
  },
  {
    "*negdi2_cmpz_rex64",
    {
    "neg{q}\t%0",
    0, 0 },
    0,
    &operand_data[685],
    2,
    1,
    1,
    1
  },
  {
    "*negsi2_1",
    {
    "neg{l}\t%0",
    0, 0 },
    0,
    &operand_data[687],
    2,
    0,
    1,
    1
  },
  {
    "*negsi2_1_zext",
    {
    "neg{l}\t%k0",
    0, 0 },
    0,
    &operand_data[689],
    2,
    0,
    1,
    1
  },
  {
    "*negsi2_cmpz",
    {
    "neg{l}\t%0",
    0, 0 },
    0,
    &operand_data[687],
    2,
    1,
    1,
    1
  },
  {
    "*negsi2_cmpz_zext",
    {
    "neg{l}\t%k0",
    0, 0 },
    0,
    &operand_data[689],
    2,
    1,
    1,
    1
  },
  {
    "*neghi2_1",
    {
    "neg{w}\t%0",
    0, 0 },
    0,
    &operand_data[691],
    2,
    0,
    1,
    1
  },
  {
    "*neghi2_cmpz",
    {
    "neg{w}\t%0",
    0, 0 },
    0,
    &operand_data[691],
    2,
    1,
    1,
    1
  },
  {
    "*negqi2_1",
    {
    "neg{b}\t%0",
    0, 0 },
    0,
    &operand_data[693],
    2,
    0,
    1,
    1
  },
  {
    "*negqi2_cmpz",
    {
    "neg{b}\t%0",
    0, 0 },
    0,
    &operand_data[693],
    2,
    1,
    1,
    1
  },
  {
    "negsf2_memory",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_negsf2_memory,
    &operand_data[695],
    2,
    0,
    1,
    1
  },
  {
    "negsf2_ifs",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_negsf2_ifs,
    &operand_data[697],
    3,
    0,
    4,
    1
  },
  {
    "*negsf2_if",
    {
    "#",
    0, 0 },
    0,
    &operand_data[700],
    2,
    0,
    2,
    1
  },
  {
    "negdf2_memory",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_negdf2_memory,
    &operand_data[702],
    2,
    0,
    1,
    1
  },
  {
    "negdf2_ifs",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_negdf2_ifs,
    &operand_data[704],
    3,
    0,
    4,
    1
  },
  {
    "*negdf2_ifs_rex64",
    {
    "#",
    0, 0 },
    0,
    &operand_data[707],
    3,
    0,
    3,
    1
  },
  {
    "*negdf2_if",
    {
    "#",
    0, 0 },
    0,
    &operand_data[710],
    2,
    0,
    2,
    1
  },
  {
    "*negdf2_if_rex64",
    {
    "#",
    0, 0 },
    0,
    &operand_data[712],
    2,
    0,
    2,
    1
  },
  {
    "*negxf2_if",
    {
    "#",
    0, 0 },
    0,
    &operand_data[714],
    2,
    0,
    2,
    1
  },
  {
    "*negsf2_1",
    {
    "fchs",
    0, 0 },
    0,
    &operand_data[716],
    2,
    0,
    1,
    1
  },
  {
    "*negdf2_1",
    {
    "fchs",
    0, 0 },
    0,
    &operand_data[718],
    2,
    0,
    1,
    1
  },
  {
    "*negextendsfdf2",
    {
    "fchs",
    0, 0 },
    0,
    &operand_data[720],
    2,
    0,
    1,
    1
  },
  {
    "*negxf2_1",
    {
    "fchs",
    0, 0 },
    0,
    &operand_data[722],
    2,
    0,
    1,
    1
  },
  {
    "*negextenddfxf2",
    {
    "fchs",
    0, 0 },
    0,
    &operand_data[724],
    2,
    0,
    1,
    1
  },
  {
    "*negextendsfxf2",
    {
    "fchs",
    0, 0 },
    0,
    &operand_data[726],
    2,
    0,
    1,
    1
  },
  {
    "abssf2_memory",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_abssf2_memory,
    &operand_data[695],
    2,
    0,
    1,
    1
  },
  {
    "abssf2_ifs",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_abssf2_ifs,
    &operand_data[697],
    3,
    0,
    4,
    1
  },
  {
    "*abssf2_if",
    {
    "#",
    0, 0 },
    0,
    &operand_data[700],
    2,
    0,
    2,
    1
  },
  {
    "absdf2_memory",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_absdf2_memory,
    &operand_data[702],
    2,
    0,
    1,
    1
  },
  {
    "absdf2_ifs",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_absdf2_ifs,
    &operand_data[728],
    3,
    0,
    4,
    1
  },
  {
    "*absdf2_ifs_rex64",
    {
    "#",
    0, 0 },
    0,
    &operand_data[731],
    3,
    0,
    3,
    1
  },
  {
    "*absdf2_if",
    {
    "#",
    0, 0 },
    0,
    &operand_data[710],
    2,
    0,
    2,
    1
  },
  {
    "*absdf2_if_rex64",
    {
    "#",
    0, 0 },
    0,
    &operand_data[712],
    2,
    0,
    2,
    1
  },
  {
    "*absxf2_if",
    {
    "#",
    0, 0 },
    0,
    &operand_data[714],
    2,
    0,
    2,
    1
  },
  {
    "*abssf2_1",
    {
    "fabs",
    0, 0 },
    0,
    &operand_data[716],
    2,
    0,
    1,
    1
  },
  {
    "*absdf2_1",
    {
    "fabs",
    0, 0 },
    0,
    &operand_data[718],
    2,
    0,
    1,
    1
  },
  {
    "*absextendsfdf2",
    {
    "fabs",
    0, 0 },
    0,
    &operand_data[720],
    2,
    0,
    1,
    1
  },
  {
    "*absxf2_1",
    {
    "fabs",
    0, 0 },
    0,
    &operand_data[722],
    2,
    0,
    1,
    1
  },
  {
    "*absextenddfxf2",
    {
    "fabs",
    0, 0 },
    0,
    &operand_data[724],
    2,
    0,
    1,
    1
  },
  {
    "*absextendsfxf2",
    {
    "fabs",
    0, 0 },
    0,
    &operand_data[726],
    2,
    0,
    1,
    1
  },
  {
    "*one_cmpldi2_1_rex64",
    {
    "not{q}\t%0",
    0, 0 },
    0,
    &operand_data[685],
    2,
    0,
    1,
    1
  },
  {
    "*one_cmpldi2_2_rex64",
    {
    "#",
    0, 0 },
    0,
    &operand_data[685],
    2,
    1,
    1,
    1
  },
  {
    "*one_cmplsi2_1",
    {
    "not{l}\t%0",
    0, 0 },
    0,
    &operand_data[687],
    2,
    0,
    1,
    1
  },
  {
    "*one_cmplsi2_1_zext",
    {
    "not{l}\t%k0",
    0, 0 },
    0,
    &operand_data[486],
    2,
    0,
    1,
    1
  },
  {
    "*one_cmplsi2_2",
    {
    "#",
    0, 0 },
    0,
    &operand_data[687],
    2,
    1,
    1,
    1
  },
  {
    "*one_cmplsi2_2_zext",
    {
    "#",
    0, 0 },
    0,
    &operand_data[486],
    2,
    1,
    1,
    1
  },
  {
    "*one_cmplhi2_1",
    {
    "not{w}\t%0",
    0, 0 },
    0,
    &operand_data[691],
    2,
    0,
    1,
    1
  },
  {
    "*one_cmplhi2_2",
    {
    "#",
    0, 0 },
    0,
    &operand_data[691],
    2,
    1,
    1,
    1
  },
  {
    "*one_cmplqi2_1",
    { 0, output_400, 0 },
    0,
    &operand_data[734],
    2,
    0,
    2,
    2
  },
  {
    "*one_cmplqi2_2",
    {
    "#",
    0, 0 },
    0,
    &operand_data[693],
    2,
    1,
    1,
    1
  },
  {
    "*ashldi3_1_rex64",
    { 0, 0, output_402 },
    0,
    &operand_data[736],
    3,
    0,
    2,
    3
  },
  {
    "*ashldi3_cmp_rex64",
    { 0, 0, output_403 },
    0,
    &operand_data[739],
    3,
    2,
    1,
    3
  },
  {
    "ashldi3_1",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_ashldi3_1,
    &operand_data[742],
    4,
    0,
    1,
    1
  },
  {
    "*ashldi3_2",
    {
    "#",
    0, 0 },
    0,
    &operand_data[742],
    3,
    0,
    1,
    1
  },
  {
    "x86_shld_1",
    { 0, output_406, 0 },
    (insn_gen_fn) gen_x86_shld_1,
    &operand_data[746],
    3,
    2,
    2,
    2
  },
  {
    "*ashlsi3_1",
    { 0, 0, output_407 },
    0,
    &operand_data[749],
    3,
    0,
    2,
    3
  },
  {
    "*ashlsi3_1_zext",
    { 0, 0, output_408 },
    0,
    &operand_data[752],
    3,
    0,
    2,
    3
  },
  {
    "*ashlsi3_cmp",
    { 0, 0, output_409 },
    0,
    &operand_data[755],
    3,
    2,
    1,
    3
  },
  {
    "*ashlsi3_cmp_zext",
    { 0, 0, output_410 },
    0,
    &operand_data[758],
    3,
    2,
    1,
    3
  },
  {
    "*ashlhi3_1_lea",
    { 0, 0, output_411 },
    0,
    &operand_data[761],
    3,
    0,
    2,
    3
  },
  {
    "*ashlhi3_1",
    { 0, 0, output_412 },
    0,
    &operand_data[764],
    3,
    0,
    1,
    3
  },
  {
    "*ashlhi3_cmp",
    { 0, 0, output_413 },
    0,
    &operand_data[767],
    3,
    2,
    1,
    3
  },
  {
    "*ashlqi3_1_lea",
    { 0, 0, output_414 },
    0,
    &operand_data[770],
    3,
    0,
    3,
    3
  },
  {
    "*ashlqi3_1",
    { 0, 0, output_415 },
    0,
    &operand_data[773],
    3,
    0,
    2,
    3
  },
  {
    "*ashlqi3_cmp",
    { 0, 0, output_416 },
    0,
    &operand_data[776],
    3,
    2,
    1,
    3
  },
  {
    "ashrdi3_63_rex64",
    { 0, output_417, 0 },
    (insn_gen_fn) gen_ashrdi3_63_rex64,
    &operand_data[779],
    3,
    0,
    2,
    2
  },
  {
    "*ashrdi3_1_one_bit_rex64",
    {
    "sar{q}\t%0",
    0, 0 },
    0,
    &operand_data[782],
    3,
    0,
    1,
    1
  },
  {
    "*ashrdi3_1_rex64",
    { 0, output_419, 0 },
    0,
    &operand_data[785],
    3,
    0,
    2,
    2
  },
  {
    "*ashrdi3_one_bit_cmp_rex64",
    {
    "sar{q}\t%0",
    0, 0 },
    0,
    &operand_data[782],
    3,
    2,
    1,
    1
  },
  {
    "*ashrdi3_cmp_rex64",
    {
    "sar{q}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[788],
    3,
    2,
    1,
    1
  },
  {
    "ashrdi3_1",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_ashrdi3_1,
    &operand_data[742],
    4,
    0,
    1,
    1
  },
  {
    "*ashrdi3_2",
    {
    "#",
    0, 0 },
    0,
    &operand_data[742],
    3,
    0,
    1,
    1
  },
  {
    "x86_shrd_1",
    { 0, output_424, 0 },
    (insn_gen_fn) gen_x86_shrd_1,
    &operand_data[746],
    3,
    2,
    2,
    2
  },
  {
    "ashrsi3_31",
    { 0, output_425, 0 },
    (insn_gen_fn) gen_ashrsi3_31,
    &operand_data[791],
    3,
    0,
    2,
    2
  },
  {
    "*ashrsi3_31_zext",
    { 0, output_426, 0 },
    0,
    &operand_data[794],
    3,
    0,
    2,
    2
  },
  {
    "*ashrsi3_1_one_bit",
    {
    "sar{l}\t%0",
    0, 0 },
    0,
    &operand_data[797],
    3,
    0,
    1,
    1
  },
  {
    "*ashrsi3_1_one_bit_zext",
    {
    "sar{l}\t%k0",
    0, 0 },
    0,
    &operand_data[800],
    3,
    0,
    1,
    1
  },
  {
    "*ashrsi3_1",
    { 0, output_429, 0 },
    0,
    &operand_data[803],
    3,
    0,
    2,
    2
  },
  {
    "*ashrsi3_1_zext",
    { 0, output_430, 0 },
    0,
    &operand_data[806],
    3,
    0,
    2,
    2
  },
  {
    "*ashrsi3_one_bit_cmp",
    {
    "sar{l}\t%0",
    0, 0 },
    0,
    &operand_data[797],
    3,
    2,
    1,
    1
  },
  {
    "*ashrsi3_one_bit_cmp_zext",
    {
    "sar{l}\t%k0",
    0, 0 },
    0,
    &operand_data[800],
    3,
    2,
    1,
    1
  },
  {
    "*ashrsi3_cmp",
    {
    "sar{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[755],
    3,
    2,
    1,
    1
  },
  {
    "*ashrsi3_cmp_zext",
    {
    "sar{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[758],
    3,
    2,
    1,
    1
  },
  {
    "*ashrhi3_1_one_bit",
    {
    "sar{w}\t%0",
    0, 0 },
    0,
    &operand_data[809],
    3,
    0,
    1,
    1
  },
  {
    "*ashrhi3_1",
    { 0, output_436, 0 },
    0,
    &operand_data[812],
    3,
    0,
    2,
    2
  },
  {
    "*ashrhi3_one_bit_cmp",
    {
    "sar{w}\t%0",
    0, 0 },
    0,
    &operand_data[809],
    3,
    2,
    1,
    1
  },
  {
    "*ashrhi3_cmp",
    {
    "sar{w}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[767],
    3,
    2,
    1,
    1
  },
  {
    "*ashrqi3_1_one_bit",
    {
    "sar{b}\t%0",
    0, 0 },
    0,
    &operand_data[815],
    3,
    0,
    1,
    1
  },
  {
    "*ashrqi3_1_one_bit_slp",
    {
    "sar{b}\t%0",
    0, 0 },
    0,
    &operand_data[818],
    2,
    1,
    1,
    1
  },
  {
    "*ashrqi3_1",
    { 0, output_441, 0 },
    0,
    &operand_data[820],
    3,
    0,
    2,
    2
  },
  {
    "*ashrqi3_1_slp",
    { 0, output_442, 0 },
    0,
    &operand_data[823],
    2,
    1,
    2,
    2
  },
  {
    "*ashrqi3_one_bit_cmp",
    {
    "sar{b}\t%0",
    0, 0 },
    0,
    &operand_data[825],
    3,
    2,
    1,
    1
  },
  {
    "*ashrqi3_cmp",
    {
    "sar{b}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[776],
    3,
    2,
    1,
    1
  },
  {
    "*lshrdi3_1_one_bit_rex64",
    {
    "shr{q}\t%0",
    0, 0 },
    0,
    &operand_data[782],
    3,
    0,
    1,
    1
  },
  {
    "*lshrdi3_1_rex64",
    { 0, output_446, 0 },
    0,
    &operand_data[785],
    3,
    0,
    2,
    2
  },
  {
    "*lshrdi3_cmp_one_bit_rex64",
    {
    "shr{q}\t%0",
    0, 0 },
    0,
    &operand_data[782],
    3,
    2,
    1,
    1
  },
  {
    "*lshrdi3_cmp_rex64",
    {
    "shr{q}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[828],
    3,
    2,
    1,
    1
  },
  {
    "lshrdi3_1",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_lshrdi3_1,
    &operand_data[742],
    4,
    0,
    1,
    1
  },
  {
    "*lshrdi3_2",
    {
    "#",
    0, 0 },
    0,
    &operand_data[742],
    3,
    0,
    1,
    1
  },
  {
    "*lshrsi3_1_one_bit",
    {
    "shr{l}\t%0",
    0, 0 },
    0,
    &operand_data[797],
    3,
    0,
    1,
    1
  },
  {
    "*lshrsi3_1_one_bit_zext",
    {
    "shr{l}\t%k0",
    0, 0 },
    0,
    &operand_data[800],
    3,
    0,
    1,
    1
  },
  {
    "*lshrsi3_1",
    { 0, output_453, 0 },
    0,
    &operand_data[803],
    3,
    0,
    2,
    2
  },
  {
    "*lshrsi3_1_zext",
    { 0, output_454, 0 },
    0,
    &operand_data[831],
    3,
    0,
    2,
    2
  },
  {
    "*lshrsi3_one_bit_cmp",
    {
    "shr{l}\t%0",
    0, 0 },
    0,
    &operand_data[797],
    3,
    2,
    1,
    1
  },
  {
    "*lshrsi3_cmp_one_bit_zext",
    {
    "shr{l}\t%k0",
    0, 0 },
    0,
    &operand_data[800],
    3,
    2,
    1,
    1
  },
  {
    "*lshrsi3_cmp",
    {
    "shr{l}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[755],
    3,
    2,
    1,
    1
  },
  {
    "*lshrsi3_cmp_zext",
    {
    "shr{l}\t{%2, %k0|%k0, %2}",
    0, 0 },
    0,
    &operand_data[758],
    3,
    2,
    1,
    1
  },
  {
    "*lshrhi3_1_one_bit",
    {
    "shr{w}\t%0",
    0, 0 },
    0,
    &operand_data[809],
    3,
    0,
    1,
    1
  },
  {
    "*lshrhi3_1",
    { 0, output_460, 0 },
    0,
    &operand_data[812],
    3,
    0,
    2,
    2
  },
  {
    "*lshrhi3_one_bit_cmp",
    {
    "shr{w}\t%0",
    0, 0 },
    0,
    &operand_data[809],
    3,
    2,
    1,
    1
  },
  {
    "*lshrhi3_cmp",
    {
    "shr{w}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[767],
    3,
    2,
    1,
    1
  },
  {
    "*lshrqi3_1_one_bit",
    {
    "shr{b}\t%0",
    0, 0 },
    0,
    &operand_data[815],
    3,
    0,
    1,
    1
  },
  {
    "*lshrqi3_1_one_bit_slp",
    {
    "shr{b}\t%0",
    0, 0 },
    0,
    &operand_data[818],
    2,
    1,
    1,
    1
  },
  {
    "*lshrqi3_1",
    { 0, output_465, 0 },
    0,
    &operand_data[820],
    3,
    0,
    2,
    2
  },
  {
    "*lshrqi3_1_slp",
    { 0, output_466, 0 },
    0,
    &operand_data[823],
    2,
    1,
    2,
    2
  },
  {
    "*lshrqi2_one_bit_cmp",
    {
    "shr{b}\t%0",
    0, 0 },
    0,
    &operand_data[815],
    3,
    2,
    1,
    1
  },
  {
    "*lshrqi2_cmp",
    {
    "shr{b}\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[776],
    3,
    2,
    1,
    1
  },
  {
    "*rotlsi3_1_one_bit_rex64",
    {
    "rol{q}\t%0",
    0, 0 },
    0,
    &operand_data[782],
    3,
    0,
    1,
    1
  },
  {
    "*rotldi3_1_rex64",
    { 0, output_470, 0 },
    0,
    &operand_data[834],
    3,
    0,
    2,
    2
  },
  {
    "*rotlsi3_1_one_bit",
    {
    "rol{l}\t%0",
    0, 0 },
    0,
    &operand_data[797],
    3,
    0,
    1,
    1
  },
  {
    "*rotlsi3_1_one_bit_zext",
    {
    "rol{l}\t%k0",
    0, 0 },
    0,
    &operand_data[800],
    3,
    0,
    1,
    1
  },
  {
    "*rotlsi3_1",
    { 0, output_473, 0 },
    0,
    &operand_data[803],
    3,
    0,
    2,
    2
  },
  {
    "*rotlsi3_1_zext",
    { 0, output_474, 0 },
    0,
    &operand_data[806],
    3,
    0,
    2,
    2
  },
  {
    "*rotlhi3_1_one_bit",
    {
    "rol{w}\t%0",
    0, 0 },
    0,
    &operand_data[809],
    3,
    0,
    1,
    1
  },
  {
    "*rotlhi3_1",
    { 0, output_476, 0 },
    0,
    &operand_data[812],
    3,
    0,
    2,
    2
  },
  {
    "*rotlqi3_1_one_bit_slp",
    {
    "rol{b}\t%0",
    0, 0 },
    0,
    &operand_data[818],
    2,
    1,
    1,
    1
  },
  {
    "*rotlqi3_1_one_bit",
    {
    "rol{b}\t%0",
    0, 0 },
    0,
    &operand_data[815],
    3,
    0,
    1,
    1
  },
  {
    "*rotlqi3_1_slp",
    { 0, output_479, 0 },
    0,
    &operand_data[823],
    2,
    1,
    2,
    2
  },
  {
    "*rotlqi3_1",
    { 0, output_480, 0 },
    0,
    &operand_data[820],
    3,
    0,
    2,
    2
  },
  {
    "*rotrdi3_1_one_bit_rex64",
    {
    "ror{q}\t%0",
    0, 0 },
    0,
    &operand_data[782],
    3,
    0,
    1,
    1
  },
  {
    "*rotrdi3_1_rex64",
    { 0, output_482, 0 },
    0,
    &operand_data[785],
    3,
    0,
    2,
    2
  },
  {
    "*rotrsi3_1_one_bit",
    {
    "ror{l}\t%0",
    0, 0 },
    0,
    &operand_data[797],
    3,
    0,
    1,
    1
  },
  {
    "*rotrsi3_1_one_bit_zext",
    {
    "ror{l}\t%k0",
    0, 0 },
    0,
    &operand_data[800],
    3,
    0,
    1,
    1
  },
  {
    "*rotrsi3_1",
    { 0, output_485, 0 },
    0,
    &operand_data[803],
    3,
    0,
    2,
    2
  },
  {
    "*rotrsi3_1_zext",
    { 0, output_486, 0 },
    0,
    &operand_data[806],
    3,
    0,
    2,
    2
  },
  {
    "*rotrhi3_one_bit",
    {
    "ror{w}\t%0",
    0, 0 },
    0,
    &operand_data[809],
    3,
    0,
    1,
    1
  },
  {
    "*rotrhi3",
    { 0, output_488, 0 },
    0,
    &operand_data[812],
    3,
    0,
    2,
    2
  },
  {
    "*rotrqi3_1_one_bit",
    {
    "ror{b}\t%0",
    0, 0 },
    0,
    &operand_data[815],
    3,
    0,
    1,
    1
  },
  {
    "*rotrqi3_1_one_bit_slp",
    {
    "ror{b}\t%0",
    0, 0 },
    0,
    &operand_data[818],
    2,
    1,
    1,
    1
  },
  {
    "*rotrqi3_1",
    { 0, output_491, 0 },
    0,
    &operand_data[820],
    3,
    0,
    2,
    2
  },
  {
    "*rotrqi3_1_slp",
    { 0, output_492, 0 },
    0,
    &operand_data[823],
    2,
    1,
    2,
    2
  },
  {
    "*setcc_1",
    {
    "set%C1\t%0",
    0, 0 },
    0,
    &operand_data[837],
    2,
    0,
    1,
    1
  },
  {
    "setcc_2",
    {
    "set%C1\t%0",
    0, 0 },
    (insn_gen_fn) gen_setcc_2,
    &operand_data[839],
    2,
    0,
    1,
    1
  },
  {
    "*sse_setccsf",
    {
    "cmp%D1ss\t{%3, %0|%0, %3}",
    0, 0 },
    0,
    &operand_data[841],
    4,
    0,
    1,
    1
  },
  {
    "*sse_setccdf",
    {
    "cmp%D1sd\t{%3, %0|%0, %3}",
    0, 0 },
    0,
    &operand_data[845],
    4,
    0,
    1,
    1
  },
  {
    "*jcc_1",
    {
    "%+j%C1\t%l0",
    0, 0 },
    0,
    &operand_data[849],
    2,
    0,
    0,
    1
  },
  {
    "*jcc_2",
    {
    "%+j%c1\t%l0",
    0, 0 },
    0,
    &operand_data[849],
    2,
    0,
    0,
    1
  },
  {
    "*fp_jcc_1",
    {
    "#",
    0, 0 },
    0,
    &operand_data[851],
    4,
    0,
    1,
    1
  },
  {
    "*fp_jcc_1_sse",
    {
    "#",
    0, 0 },
    0,
    &operand_data[855],
    4,
    0,
    2,
    1
  },
  {
    "*fp_jcc_1_sse_only",
    {
    "#",
    0, 0 },
    0,
    &operand_data[859],
    4,
    0,
    1,
    1
  },
  {
    "*fp_jcc_2",
    {
    "#",
    0, 0 },
    0,
    &operand_data[851],
    4,
    0,
    1,
    1
  },
  {
    "*fp_jcc_2_sse",
    {
    "#",
    0, 0 },
    0,
    &operand_data[855],
    4,
    0,
    2,
    1
  },
  {
    "*fp_jcc_2_sse_only",
    {
    "#",
    0, 0 },
    0,
    &operand_data[859],
    4,
    0,
    1,
    1
  },
  {
    "*fp_jcc_3",
    {
    "#",
    0, 0 },
    0,
    &operand_data[863],
    5,
    0,
    1,
    1
  },
  {
    "*fp_jcc_4",
    {
    "#",
    0, 0 },
    0,
    &operand_data[863],
    5,
    0,
    1,
    1
  },
  {
    "*fp_jcc_5",
    {
    "#",
    0, 0 },
    0,
    &operand_data[868],
    5,
    0,
    1,
    1
  },
  {
    "*fp_jcc_6",
    {
    "#",
    0, 0 },
    0,
    &operand_data[868],
    5,
    0,
    1,
    1
  },
  {
    "jump",
    {
    "jmp\t%l0",
    0, 0 },
    (insn_gen_fn) gen_jump,
    &operand_data[849],
    1,
    0,
    0,
    1
  },
  {
    "*indirect_jump",
    {
    "jmp\t%A0",
    0, 0 },
    0,
    &operand_data[520],
    1,
    0,
    1,
    1
  },
  {
    "*indirect_jump_rtx64",
    {
    "jmp\t%A0",
    0, 0 },
    0,
    &operand_data[517],
    1,
    0,
    1,
    1
  },
  {
    "*tablejump_1",
    {
    "jmp\t%A0",
    0, 0 },
    0,
    &operand_data[873],
    2,
    0,
    1,
    1
  },
  {
    "*tablejump_1_rtx64",
    {
    "jmp\t%A0",
    0, 0 },
    0,
    &operand_data[875],
    2,
    0,
    1,
    1
  },
  {
    "doloop_end_internal",
    { 0, 0, output_514 },
    (insn_gen_fn) gen_doloop_end_internal,
    &operand_data[876],
    4,
    1,
    3,
    3
  },
  {
    "*call_pop_0",
    { 0, 0, output_515 },
    0,
    &operand_data[880],
    3,
    0,
    0,
    3
  },
  {
    "*call_pop_1",
    { 0, 0, output_516 },
    0,
    &operand_data[883],
    3,
    0,
    1,
    3
  },
  {
    "*call_0",
    { 0, 0, output_517 },
    0,
    &operand_data[886],
    2,
    0,
    0,
    3
  },
  {
    "*call_1",
    { 0, 0, output_518 },
    0,
    &operand_data[888],
    2,
    0,
    1,
    3
  },
  {
    "*sibcall_1",
    { 0, 0, output_519 },
    0,
    &operand_data[890],
    2,
    0,
    4,
    3
  },
  {
    "*call_1_rex64",
    { 0, 0, output_520 },
    0,
    &operand_data[892],
    2,
    0,
    1,
    3
  },
  {
    "*sibcall_1_rex64",
    {
    "jmp\t%P0",
    0, 0 },
    0,
    &operand_data[894],
    2,
    0,
    0,
    1
  },
  {
    "*sibcall_1_rex64_v",
    {
    "jmp\t*%%r11",
    0, 0 },
    0,
    &operand_data[849],
    1,
    0,
    0,
    1
  },
  {
    "blockage",
    {
    "",
    0, 0 },
    (insn_gen_fn) gen_blockage,
    &operand_data[849],
    1,
    0,
    0,
    1
  },
  {
    "return_internal",
    {
    "ret",
    0, 0 },
    (insn_gen_fn) gen_return_internal,
    &operand_data[0],
    0,
    0,
    0,
    1
  },
  {
    "return_internal_long",
    {
    "rep {;} ret",
    0, 0 },
    (insn_gen_fn) gen_return_internal_long,
    &operand_data[0],
    0,
    0,
    0,
    1
  },
  {
    "return_pop_internal",
    {
    "ret\t%0",
    0, 0 },
    (insn_gen_fn) gen_return_pop_internal,
    &operand_data[592],
    1,
    0,
    0,
    1
  },
  {
    "return_indirect_internal",
    {
    "jmp\t%A0",
    0, 0 },
    (insn_gen_fn) gen_return_indirect_internal,
    &operand_data[372],
    1,
    0,
    1,
    1
  },
  {
    "nop",
    {
    "nop",
    0, 0 },
    (insn_gen_fn) gen_nop,
    &operand_data[0],
    0,
    0,
    0,
    1
  },
  {
    "align",
    { 0, 0, output_529 },
    (insn_gen_fn) gen_align,
    &operand_data[849],
    1,
    0,
    0,
    3
  },
  {
    "set_got",
    { 0, 0, output_530 },
    (insn_gen_fn) gen_set_got,
    &operand_data[65],
    1,
    0,
    1,
    3
  },
  {
    "eh_return_si",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_eh_return_si,
    &operand_data[896],
    1,
    0,
    1,
    1
  },
  {
    "eh_return_di",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_eh_return_di,
    &operand_data[897],
    1,
    0,
    1,
    1
  },
  {
    "leave",
    {
    "leave",
    0, 0 },
    (insn_gen_fn) gen_leave,
    &operand_data[0],
    0,
    0,
    0,
    1
  },
  {
    "leave_rex64",
    {
    "leave",
    0, 0 },
    (insn_gen_fn) gen_leave_rex64,
    &operand_data[0],
    0,
    0,
    0,
    1
  },
  {
    "*ffs_cmove",
    {
    "#",
    0, 0 },
    0,
    &operand_data[898],
    3,
    0,
    1,
    1
  },
  {
    "*ffs_no_cmove",
    {
    "#",
    0, 0 },
    0,
    &operand_data[901],
    3,
    0,
    1,
    1
  },
  {
    "*ffssi_1",
    {
    "bsf{l}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[898],
    2,
    1,
    1,
    1
  },
  {
    "*ffs_rex64",
    {
    "#",
    0, 0 },
    0,
    &operand_data[904],
    3,
    0,
    1,
    1
  },
  {
    "*ffsdi_1",
    {
    "bsf{q}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[904],
    2,
    1,
    1,
    1
  },
  {
    "ctzsi2",
    {
    "bsf{l}\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_ctzsi2,
    &operand_data[898],
    2,
    0,
    1,
    1
  },
  {
    "ctzdi2",
    {
    "bsf{q}\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_ctzdi2,
    &operand_data[904],
    2,
    0,
    1,
    1
  },
  {
    "*bsr",
    {
    "bsr{l}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[898],
    2,
    0,
    1,
    1
  },
  {
    "*bsr_rex64",
    {
    "bsr{q}\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[904],
    2,
    0,
    1,
    1
  },
  {
    "*tls_global_dynamic_32_gnu",
    {
    "lea{l}\t{%a2@TLSGD(,%1,1), %0|%0, %a2@TLSGD[%1*1]}\n\tcall\t%P3",
    0, 0 },
    0,
    &operand_data[907],
    6,
    0,
    1,
    1
  },
  {
    "*tls_global_dynamic_32_sun",
    {
    "lea{l}\t{%a2@DTLNDX(%1), %4|%4, %a2@DTLNDX[%1]}\n	push{l}\t%4\n\tcall\t%a2@TLSPLT\n\tpop{l}\t%4\n\tnop",
    0, 0 },
    0,
    &operand_data[907],
    6,
    0,
    1,
    1
  },
  {
    "*tls_global_dynamic_64",
    {
    ".byte\t0x66\n\tlea{q}\t{%a1@TLSGD(%%rip), %%rdi|%%rdi, %a1@TLSGD[%%rip]}\n\t.word\t0x6666\n\trex64\n\tcall\t%P2",
    0, 0 },
    0,
    &operand_data[913],
    4,
    0,
    1,
    1
  },
  {
    "*tls_local_dynamic_base_32_gnu",
    {
    "lea{l}\t{%&@TLSLDM(%1), %0|%0, %&@TLSLDM[%1]}\n\tcall\t%P2",
    0, 0 },
    0,
    &operand_data[917],
    5,
    0,
    1,
    1
  },
  {
    "*tls_local_dynamic_base_32_sun",
    {
    "lea{l}\t{%&@TMDNX(%1), %3|%3, %&@TMDNX[%1]}\n	push{l}\t%3\n\tcall\t%&@TLSPLT\n\tpop{l}\t%3",
    0, 0 },
    0,
    &operand_data[917],
    5,
    0,
    1,
    1
  },
  {
    "*tls_local_dynamic_base_64",
    {
    "lea{q}\t{%&@TLSLD(%%rip), %%rdi|%%rdi, %&@TLSLD[%%rip]}\n\tcall\t%P1",
    0, 0 },
    0,
    &operand_data[922],
    3,
    0,
    1,
    1
  },
  {
    "*tls_local_dynamic_32_once",
    {
    "#",
    0, 0 },
    0,
    &operand_data[925],
    6,
    0,
    1,
    1
  },
  {
    "*load_tp_si",
    {
    "mov{l}\t{%%gs:0, %0|%0, DWORD PTR %%gs:0}",
    0, 0 },
    0,
    &operand_data[65],
    1,
    0,
    1,
    1
  },
  {
    "*add_tp_si",
    {
    "add{l}\t{%%gs:0, %0|%0, DWORD PTR %%gs:0}",
    0, 0 },
    0,
    &operand_data[931],
    2,
    0,
    1,
    1
  },
  {
    "*load_tp_di",
    {
    "mov{q}\t{%%fs:0, %0|%0, QWORD PTR %%fs:0}",
    0, 0 },
    0,
    &operand_data[134],
    1,
    0,
    1,
    1
  },
  {
    "*add_tp_di",
    {
    "add{q}\t{%%fs:0, %0|%0, QWORD PTR %%fs:0}",
    0, 0 },
    0,
    &operand_data[689],
    2,
    0,
    1,
    1
  },
  {
    "*fop_sf_comm_nosse",
    { 0, 0, output_555 },
    0,
    &operand_data[933],
    4,
    0,
    1,
    3
  },
  {
    "*fop_sf_comm",
    { 0, 0, output_556 },
    0,
    &operand_data[937],
    4,
    0,
    2,
    3
  },
  {
    "*fop_sf_comm_sse",
    { 0, 0, output_557 },
    0,
    &operand_data[941],
    4,
    0,
    1,
    3
  },
  {
    "*fop_df_comm_nosse",
    { 0, 0, output_558 },
    0,
    &operand_data[945],
    4,
    0,
    1,
    3
  },
  {
    "*fop_df_comm",
    { 0, 0, output_559 },
    0,
    &operand_data[949],
    4,
    0,
    2,
    3
  },
  {
    "*fop_df_comm_sse",
    { 0, 0, output_560 },
    0,
    &operand_data[953],
    4,
    0,
    1,
    3
  },
  {
    "*fop_xf_comm",
    { 0, 0, output_561 },
    0,
    &operand_data[957],
    4,
    0,
    1,
    3
  },
  {
    "*fop_sf_1_nosse",
    { 0, 0, output_562 },
    0,
    &operand_data[961],
    4,
    0,
    2,
    3
  },
  {
    "*fop_sf_1",
    { 0, 0, output_563 },
    0,
    &operand_data[965],
    4,
    0,
    3,
    3
  },
  {
    "*fop_sf_1_sse",
    { 0, 0, output_564 },
    0,
    &operand_data[969],
    4,
    0,
    1,
    3
  },
  {
    "*fop_sf_2",
    { 0, 0, output_565 },
    0,
    &operand_data[973],
    4,
    0,
    2,
    3
  },
  {
    "*fop_sf_3",
    { 0, 0, output_566 },
    0,
    &operand_data[977],
    4,
    0,
    2,
    3
  },
  {
    "*fop_df_1_nosse",
    { 0, 0, output_567 },
    0,
    &operand_data[981],
    4,
    0,
    2,
    3
  },
  {
    "*fop_df_1",
    { 0, 0, output_568 },
    0,
    &operand_data[985],
    4,
    0,
    3,
    3
  },
  {
    "*fop_df_1_sse",
    { 0, 0, output_569 },
    0,
    &operand_data[989],
    4,
    0,
    1,
    3
  },
  {
    "*fop_df_2",
    { 0, 0, output_570 },
    0,
    &operand_data[993],
    4,
    0,
    2,
    3
  },
  {
    "*fop_df_3",
    { 0, 0, output_571 },
    0,
    &operand_data[997],
    4,
    0,
    2,
    3
  },
  {
    "*fop_df_4",
    { 0, 0, output_572 },
    0,
    &operand_data[1001],
    4,
    0,
    2,
    3
  },
  {
    "*fop_df_5",
    { 0, 0, output_573 },
    0,
    &operand_data[1005],
    4,
    0,
    2,
    3
  },
  {
    "*fop_df_6",
    { 0, 0, output_574 },
    0,
    &operand_data[1009],
    4,
    0,
    2,
    3
  },
  {
    "*fop_xf_1",
    { 0, 0, output_575 },
    0,
    &operand_data[1013],
    4,
    0,
    2,
    3
  },
  {
    "*fop_xf_2",
    { 0, 0, output_576 },
    0,
    &operand_data[1017],
    4,
    0,
    2,
    3
  },
  {
    "*fop_xf_3",
    { 0, 0, output_577 },
    0,
    &operand_data[1021],
    4,
    0,
    2,
    3
  },
  {
    "*fop_xf_4",
    { 0, 0, output_578 },
    0,
    &operand_data[1025],
    4,
    0,
    2,
    3
  },
  {
    "*fop_xf_5",
    { 0, 0, output_579 },
    0,
    &operand_data[1029],
    4,
    0,
    2,
    3
  },
  {
    "*fop_xf_6",
    { 0, 0, output_580 },
    0,
    &operand_data[1033],
    4,
    0,
    2,
    3
  },
  {
    "sqrtsf2_1",
    { 0, output_581, 0 },
    (insn_gen_fn) gen_sqrtsf2_1,
    &operand_data[1037],
    2,
    0,
    2,
    2
  },
  {
    "sqrtsf2_1_sse_only",
    {
    "sqrtss\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sqrtsf2_1_sse_only,
    &operand_data[1039],
    2,
    0,
    1,
    1
  },
  {
    "sqrtsf2_i387",
    {
    "fsqrt",
    0, 0 },
    (insn_gen_fn) gen_sqrtsf2_i387,
    &operand_data[716],
    2,
    0,
    1,
    1
  },
  {
    "sqrtdf2_1",
    { 0, output_584, 0 },
    (insn_gen_fn) gen_sqrtdf2_1,
    &operand_data[1041],
    2,
    0,
    2,
    2
  },
  {
    "sqrtdf2_1_sse_only",
    {
    "sqrtsd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sqrtdf2_1_sse_only,
    &operand_data[1043],
    2,
    0,
    1,
    1
  },
  {
    "sqrtdf2_i387",
    {
    "fsqrt",
    0, 0 },
    (insn_gen_fn) gen_sqrtdf2_i387,
    &operand_data[718],
    2,
    0,
    1,
    1
  },
  {
    "*sqrtextendsfdf2",
    {
    "fsqrt",
    0, 0 },
    0,
    &operand_data[720],
    2,
    0,
    1,
    1
  },
  {
    "sqrtxf2",
    {
    "fsqrt",
    0, 0 },
    (insn_gen_fn) gen_sqrtxf2,
    &operand_data[722],
    2,
    0,
    1,
    1
  },
  {
    "*sqrtextenddfxf2",
    {
    "fsqrt",
    0, 0 },
    0,
    &operand_data[724],
    2,
    0,
    1,
    1
  },
  {
    "*sqrtextendsfxf2",
    {
    "fsqrt",
    0, 0 },
    0,
    &operand_data[726],
    2,
    0,
    1,
    1
  },
  {
    "fpremxf4",
    {
    "fprem",
    0, 0 },
    (insn_gen_fn) gen_fpremxf4,
    &operand_data[1045],
    4,
    2,
    1,
    1
  },
  {
    "fprem1xf4",
    {
    "fprem1",
    0, 0 },
    (insn_gen_fn) gen_fprem1xf4,
    &operand_data[1045],
    4,
    2,
    1,
    1
  },
  {
    "*sindf2",
    {
    "fsin",
    0, 0 },
    0,
    &operand_data[718],
    2,
    0,
    1,
    1
  },
  {
    "*sinsf2",
    {
    "fsin",
    0, 0 },
    0,
    &operand_data[716],
    2,
    0,
    1,
    1
  },
  {
    "*sinextendsfdf2",
    {
    "fsin",
    0, 0 },
    0,
    &operand_data[720],
    2,
    0,
    1,
    1
  },
  {
    "*sinxf2",
    {
    "fsin",
    0, 0 },
    0,
    &operand_data[722],
    2,
    0,
    1,
    1
  },
  {
    "*cosdf2",
    {
    "fcos",
    0, 0 },
    0,
    &operand_data[718],
    2,
    0,
    1,
    1
  },
  {
    "*cossf2",
    {
    "fcos",
    0, 0 },
    0,
    &operand_data[716],
    2,
    0,
    1,
    1
  },
  {
    "*cosextendsfdf2",
    {
    "fcos",
    0, 0 },
    0,
    &operand_data[720],
    2,
    0,
    1,
    1
  },
  {
    "*cosxf2",
    {
    "fcos",
    0, 0 },
    0,
    &operand_data[722],
    2,
    0,
    1,
    1
  },
  {
    "sincosdf3",
    {
    "fsincos",
    0, 0 },
    (insn_gen_fn) gen_sincosdf3,
    &operand_data[1049],
    3,
    1,
    1,
    1
  },
  {
    "sincossf3",
    {
    "fsincos",
    0, 0 },
    (insn_gen_fn) gen_sincossf3,
    &operand_data[1052],
    3,
    1,
    1,
    1
  },
  {
    "*sincosextendsfdf3",
    {
    "fsincos",
    0, 0 },
    0,
    &operand_data[1055],
    3,
    1,
    1,
    1
  },
  {
    "sincosxf3",
    {
    "fsincos",
    0, 0 },
    (insn_gen_fn) gen_sincosxf3,
    &operand_data[1045],
    3,
    1,
    1,
    1
  },
  {
    "*tandf3_1",
    {
    "fptan",
    0, 0 },
    0,
    &operand_data[1049],
    3,
    1,
    1,
    1
  },
  {
    "*tansf3_1",
    {
    "fptan",
    0, 0 },
    0,
    &operand_data[1052],
    3,
    1,
    1,
    1
  },
  {
    "*tanxf3_1",
    {
    "fptan",
    0, 0 },
    0,
    &operand_data[1045],
    3,
    1,
    1,
    1
  },
  {
    "atan2df3_1",
    {
    "fpatan",
    0, 0 },
    (insn_gen_fn) gen_atan2df3_1,
    &operand_data[1058],
    4,
    0,
    1,
    1
  },
  {
    "atan2sf3_1",
    {
    "fpatan",
    0, 0 },
    (insn_gen_fn) gen_atan2sf3_1,
    &operand_data[1062],
    4,
    0,
    1,
    1
  },
  {
    "atan2xf3_1",
    {
    "fpatan",
    0, 0 },
    (insn_gen_fn) gen_atan2xf3_1,
    &operand_data[1066],
    4,
    0,
    1,
    1
  },
  {
    "fyl2x_xf3",
    {
    "fyl2x",
    0, 0 },
    (insn_gen_fn) gen_fyl2x_xf3,
    &operand_data[1066],
    4,
    0,
    1,
    1
  },
  {
    "fyl2xp1_xf3",
    {
    "fyl2xp1",
    0, 0 },
    (insn_gen_fn) gen_fyl2xp1_xf3,
    &operand_data[1066],
    4,
    0,
    1,
    1
  },
  {
    "*fxtractxf3",
    {
    "fxtract",
    0, 0 },
    0,
    &operand_data[1045],
    3,
    1,
    1,
    1
  },
  {
    "*frndintxf2",
    {
    "frndint",
    0, 0 },
    0,
    &operand_data[722],
    2,
    0,
    1,
    1
  },
  {
    "*f2xm1xf2",
    {
    "f2xm1",
    0, 0 },
    0,
    &operand_data[722],
    2,
    0,
    1,
    1
  },
  {
    "*fscalexf4",
    {
    "fscale",
    0, 0 },
    0,
    &operand_data[1045],
    4,
    2,
    1,
    1
  },
  {
    "cld",
    {
    "cld",
    0, 0 },
    (insn_gen_fn) gen_cld,
    &operand_data[0],
    0,
    0,
    0,
    1
  },
  {
    "*strmovdi_rex_1",
    {
    "movsq",
    0, 0 },
    0,
    &operand_data[1070],
    4,
    2,
    1,
    1
  },
  {
    "*strmovsi_1",
    {
    "{movsl|movsd}",
    0, 0 },
    0,
    &operand_data[1074],
    4,
    2,
    1,
    1
  },
  {
    "*strmovsi_rex_1",
    {
    "{movsl|movsd}",
    0, 0 },
    0,
    &operand_data[1070],
    4,
    2,
    1,
    1
  },
  {
    "*strmovhi_1",
    {
    "movsw",
    0, 0 },
    0,
    &operand_data[1074],
    4,
    2,
    1,
    1
  },
  {
    "*strmovhi_rex_1",
    {
    "movsw",
    0, 0 },
    0,
    &operand_data[1070],
    4,
    2,
    1,
    1
  },
  {
    "*strmovqi_1",
    {
    "movsb",
    0, 0 },
    0,
    &operand_data[1074],
    4,
    2,
    1,
    1
  },
  {
    "*strmovqi_rex_1",
    {
    "movsb",
    0, 0 },
    0,
    &operand_data[1070],
    4,
    2,
    1,
    1
  },
  {
    "*rep_movdi_rex64",
    {
    "{rep\n\tmovsq|rep movsq}",
    0, 0 },
    0,
    &operand_data[1078],
    6,
    4,
    1,
    1
  },
  {
    "*rep_movsi",
    {
    "{rep\n\tmovsl|rep movsd}",
    0, 0 },
    0,
    &operand_data[1084],
    6,
    4,
    1,
    1
  },
  {
    "*rep_movsi_rex64",
    {
    "{rep\n\tmovsl|rep movsd}",
    0, 0 },
    0,
    &operand_data[1078],
    6,
    4,
    1,
    1
  },
  {
    "*rep_movqi",
    {
    "{rep\n\tmovsb|rep movsb}",
    0, 0 },
    0,
    &operand_data[1084],
    6,
    4,
    1,
    1
  },
  {
    "*rep_movqi_rex64",
    {
    "{rep\n\tmovsb|rep movsb}",
    0, 0 },
    0,
    &operand_data[1078],
    6,
    4,
    1,
    1
  },
  {
    "*strsetdi_rex_1",
    {
    "stosq",
    0, 0 },
    0,
    &operand_data[1090],
    3,
    1,
    1,
    1
  },
  {
    "*strsetsi_1",
    {
    "{stosl|stosd}",
    0, 0 },
    0,
    &operand_data[1093],
    3,
    1,
    1,
    1
  },
  {
    "*strsetsi_rex_1",
    {
    "{stosl|stosd}",
    0, 0 },
    0,
    &operand_data[1090],
    3,
    1,
    1,
    1
  },
  {
    "*strsethi_1",
    {
    "stosw",
    0, 0 },
    0,
    &operand_data[1096],
    3,
    1,
    1,
    1
  },
  {
    "*strsethi_rex_1",
    {
    "stosw",
    0, 0 },
    0,
    &operand_data[1099],
    3,
    1,
    1,
    1
  },
  {
    "*strsetqi_1",
    {
    "stosb",
    0, 0 },
    0,
    &operand_data[1102],
    3,
    1,
    1,
    1
  },
  {
    "*strsetqi_rex_1",
    {
    "stosb",
    0, 0 },
    0,
    &operand_data[1105],
    3,
    1,
    1,
    1
  },
  {
    "*rep_stosdi_rex64",
    {
    "{rep\n\tstosq|rep stosq}",
    0, 0 },
    0,
    &operand_data[1108],
    5,
    2,
    1,
    1
  },
  {
    "*rep_stossi",
    {
    "{rep\n\tstosl|rep stosd}",
    0, 0 },
    0,
    &operand_data[1113],
    5,
    2,
    1,
    1
  },
  {
    "*rep_stossi_rex64",
    {
    "{rep\n\tstosl|rep stosd}",
    0, 0 },
    0,
    &operand_data[1118],
    5,
    2,
    1,
    1
  },
  {
    "*rep_stosqi",
    {
    "{rep\n\tstosb|rep stosb}",
    0, 0 },
    0,
    &operand_data[1123],
    5,
    2,
    1,
    1
  },
  {
    "*rep_stosqi_rex64",
    {
    "{rep\n\tstosb|rep stosb}",
    0, 0 },
    0,
    &operand_data[1128],
    5,
    2,
    1,
    1
  },
  {
    "*cmpstrqi_nz_1",
    {
    "repz{\n\t| }cmpsb",
    0, 0 },
    0,
    &operand_data[1133],
    7,
    0,
    1,
    1
  },
  {
    "*cmpstrqi_nz_rex_1",
    {
    "repz{\n\t| }cmpsb",
    0, 0 },
    0,
    &operand_data[1140],
    7,
    0,
    1,
    1
  },
  {
    "*cmpstrqi_1",
    {
    "repz{\n\t| }cmpsb",
    0, 0 },
    0,
    &operand_data[1133],
    7,
    0,
    1,
    1
  },
  {
    "*cmpstrqi_rex_1",
    {
    "repz{\n\t| }cmpsb",
    0, 0 },
    0,
    &operand_data[1140],
    7,
    0,
    1,
    1
  },
  {
    "*strlenqi_1",
    {
    "repnz{\n\t| }scasb",
    0, 0 },
    0,
    &operand_data[1147],
    6,
    0,
    1,
    1
  },
  {
    "*strlenqi_rex_1",
    {
    "repnz{\n\t| }scasb",
    0, 0 },
    0,
    &operand_data[1153],
    6,
    0,
    1,
    1
  },
  {
    "x86_movdicc_0_m1_rex64",
    {
    "sbb{q}\t%0, %0",
    0, 0 },
    (insn_gen_fn) gen_x86_movdicc_0_m1_rex64,
    &operand_data[1159],
    2,
    0,
    1,
    1
  },
  {
    "movdicc_c_rex64",
    { 0, output_649, 0 },
    (insn_gen_fn) gen_movdicc_c_rex64,
    &operand_data[1161],
    4,
    0,
    2,
    2
  },
  {
    "x86_movsicc_0_m1",
    {
    "sbb{l}\t%0, %0",
    0, 0 },
    (insn_gen_fn) gen_x86_movsicc_0_m1,
    &operand_data[1165],
    2,
    0,
    1,
    1
  },
  {
    "*movsicc_noc",
    { 0, output_651, 0 },
    0,
    &operand_data[1167],
    4,
    0,
    2,
    2
  },
  {
    "*movhicc_noc",
    { 0, output_652, 0 },
    0,
    &operand_data[1171],
    4,
    0,
    2,
    2
  },
  {
    "*movqicc_noc",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1175],
    5,
    0,
    2,
    1
  },
  {
    "*movsfcc_1",
    { 0, output_654, 0 },
    0,
    &operand_data[1180],
    4,
    0,
    4,
    2
  },
  {
    "*movdfcc_1",
    { 0, output_655, 0 },
    0,
    &operand_data[1184],
    4,
    0,
    4,
    2
  },
  {
    "*movdfcc_1_rex64",
    { 0, output_656, 0 },
    0,
    &operand_data[1188],
    4,
    0,
    4,
    2
  },
  {
    "*movxfcc_1",
    { 0, output_657, 0 },
    0,
    &operand_data[1192],
    4,
    0,
    2,
    2
  },
  {
    "*minsf",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1196],
    3,
    2,
    3,
    1
  },
  {
    "*minsf_nonieee",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1199],
    3,
    2,
    2,
    1
  },
  {
    "*minsf_sse",
    {
    "minss\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[969],
    3,
    2,
    1,
    1
  },
  {
    "*mindf",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1202],
    3,
    2,
    3,
    1
  },
  {
    "*mindf_nonieee",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1205],
    3,
    2,
    2,
    1
  },
  {
    "*mindf_sse",
    {
    "minsd\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[989],
    3,
    2,
    1,
    1
  },
  {
    "*maxsf",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1196],
    3,
    2,
    3,
    1
  },
  {
    "*maxsf_nonieee",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1199],
    3,
    2,
    2,
    1
  },
  {
    "*maxsf_sse",
    {
    "maxss\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[969],
    3,
    2,
    1,
    1
  },
  {
    "*maxdf",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1202],
    3,
    2,
    3,
    1
  },
  {
    "*maxdf_nonieee",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1205],
    3,
    2,
    2,
    1
  },
  {
    "*maxdf_sse",
    {
    "maxsd\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[989],
    3,
    2,
    1,
    1
  },
  {
    "pro_epilogue_adjust_stack_1",
    { 0, 0, output_670 },
    (insn_gen_fn) gen_pro_epilogue_adjust_stack_1,
    &operand_data[1208],
    3,
    0,
    2,
    3
  },
  {
    "pro_epilogue_adjust_stack_rex64",
    { 0, 0, output_671 },
    (insn_gen_fn) gen_pro_epilogue_adjust_stack_rex64,
    &operand_data[1211],
    3,
    0,
    2,
    3
  },
  {
    "pro_epilogue_adjust_stack_rex64_2",
    { 0, 0, output_672 },
    (insn_gen_fn) gen_pro_epilogue_adjust_stack_rex64_2,
    &operand_data[1214],
    4,
    0,
    2,
    3
  },
  {
    "sse_movsfcc",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_sse_movsfcc,
    &operand_data[1218],
    7,
    0,
    10,
    1
  },
  {
    "sse_movsfcc_eq",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_sse_movsfcc_eq,
    &operand_data[1225],
    6,
    0,
    6,
    1
  },
  {
    "sse_movdfcc",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_sse_movdfcc,
    &operand_data[1231],
    7,
    0,
    10,
    1
  },
  {
    "sse_movdfcc_eq",
    {
    "#",
    0, 0 },
    (insn_gen_fn) gen_sse_movdfcc_eq,
    &operand_data[1238],
    6,
    0,
    6,
    1
  },
  {
    "*sse_movsfcc_const0_1",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1244],
    6,
    0,
    1,
    1
  },
  {
    "*sse_movsfcc_const0_2",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1250],
    6,
    0,
    1,
    1
  },
  {
    "*sse_movsfcc_const0_3",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1256],
    6,
    0,
    1,
    1
  },
  {
    "*sse_movsfcc_const0_4",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1262],
    6,
    0,
    1,
    1
  },
  {
    "*sse_movdfcc_const0_1",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1268],
    6,
    0,
    1,
    1
  },
  {
    "*sse_movdfcc_const0_2",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1274],
    6,
    0,
    1,
    1
  },
  {
    "*sse_movdfcc_const0_3",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1280],
    6,
    0,
    1,
    1
  },
  {
    "*sse_movdfcc_const0_4",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1286],
    6,
    0,
    1,
    1
  },
  {
    "allocate_stack_worker_1",
    {
    "call\t__alloca",
    0, 0 },
    (insn_gen_fn) gen_allocate_stack_worker_1,
    &operand_data[1292],
    2,
    1,
    1,
    1
  },
  {
    "allocate_stack_worker_rex64",
    {
    "call\t__alloca",
    0, 0 },
    (insn_gen_fn) gen_allocate_stack_worker_rex64,
    &operand_data[1294],
    2,
    1,
    1,
    1
  },
  {
    "*call_value_pop_0",
    { 0, 0, output_687 },
    0,
    &operand_data[1296],
    4,
    0,
    0,
    3
  },
  {
    "*call_value_pop_1",
    { 0, 0, output_688 },
    0,
    &operand_data[1300],
    4,
    0,
    1,
    3
  },
  {
    "*call_value_0",
    { 0, 0, output_689 },
    0,
    &operand_data[1296],
    3,
    0,
    0,
    3
  },
  {
    "*call_value_0_rex64",
    { 0, 0, output_690 },
    0,
    &operand_data[1304],
    3,
    0,
    0,
    3
  },
  {
    "*call_value_1",
    { 0, 0, output_691 },
    0,
    &operand_data[1300],
    3,
    0,
    1,
    3
  },
  {
    "*sibcall_value_1",
    { 0, 0, output_692 },
    0,
    &operand_data[1307],
    3,
    0,
    4,
    3
  },
  {
    "*call_value_1_rex64",
    { 0, 0, output_693 },
    0,
    &operand_data[1310],
    3,
    0,
    1,
    3
  },
  {
    "*sibcall_value_1_rex64",
    {
    "jmp\t%P1",
    0, 0 },
    0,
    &operand_data[1313],
    3,
    0,
    0,
    1
  },
  {
    "*sibcall_value_1_rex64_v",
    {
    "jmp\t*%%r11",
    0, 0 },
    0,
    &operand_data[1316],
    2,
    0,
    0,
    1
  },
  {
    "trap",
    {
    "int\t$5",
    0, 0 },
    (insn_gen_fn) gen_trap,
    &operand_data[0],
    0,
    0,
    0,
    1
  },
  {
    "*conditional_trap_1",
    { 0, 0, output_697 },
    0,
    &operand_data[1318],
    2,
    0,
    0,
    3
  },
  {
    "movv4sf_internal",
    { 0, output_698, 0 },
    (insn_gen_fn) gen_movv4sf_internal,
    &operand_data[1320],
    2,
    0,
    3,
    2
  },
  {
    "movv4si_internal",
    { 0, 0, output_699 },
    (insn_gen_fn) gen_movv4si_internal,
    &operand_data[1322],
    2,
    0,
    3,
    3
  },
  {
    "movv2di_internal",
    { 0, 0, output_700 },
    (insn_gen_fn) gen_movv2di_internal,
    &operand_data[1324],
    2,
    0,
    3,
    3
  },
  {
    "movv8qi_internal",
    { 0, output_701, 0 },
    (insn_gen_fn) gen_movv8qi_internal,
    &operand_data[1326],
    2,
    0,
    3,
    2
  },
  {
    "movv4hi_internal",
    { 0, output_702, 0 },
    (insn_gen_fn) gen_movv4hi_internal,
    &operand_data[1328],
    2,
    0,
    3,
    2
  },
  {
    "movv2si_internal",
    { 0, output_703, 0 },
    (insn_gen_fn) gen_movv2si_internal,
    &operand_data[1330],
    2,
    0,
    3,
    2
  },
  {
    "movv2sf_internal",
    { 0, output_704, 0 },
    (insn_gen_fn) gen_movv2sf_internal,
    &operand_data[1332],
    2,
    0,
    3,
    2
  },
  {
    "movv2df_internal",
    { 0, 0, output_705 },
    (insn_gen_fn) gen_movv2df_internal,
    &operand_data[1334],
    2,
    0,
    3,
    3
  },
  {
    "movv8hi_internal",
    { 0, 0, output_706 },
    (insn_gen_fn) gen_movv8hi_internal,
    &operand_data[1336],
    2,
    0,
    3,
    3
  },
  {
    "movv16qi_internal",
    { 0, 0, output_707 },
    (insn_gen_fn) gen_movv16qi_internal,
    &operand_data[1338],
    2,
    0,
    3,
    3
  },
  {
    "*pushti",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1340],
    2,
    0,
    1,
    1
  },
  {
    "*pushv2df",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1342],
    2,
    0,
    1,
    1
  },
  {
    "*pushv2di",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1344],
    2,
    0,
    1,
    1
  },
  {
    "*pushv8hi",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1346],
    2,
    0,
    1,
    1
  },
  {
    "*pushv16qi",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1348],
    2,
    0,
    1,
    1
  },
  {
    "*pushv4sf",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1350],
    2,
    0,
    1,
    1
  },
  {
    "*pushv4si",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1352],
    2,
    0,
    1,
    1
  },
  {
    "*pushv2si",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1354],
    2,
    0,
    1,
    1
  },
  {
    "*pushv4hi",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1356],
    2,
    0,
    1,
    1
  },
  {
    "*pushv8qi",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1358],
    2,
    0,
    1,
    1
  },
  {
    "*pushv2sf",
    {
    "#",
    0, 0 },
    0,
    &operand_data[1360],
    2,
    0,
    1,
    1
  },
  {
    "movti_internal",
    { 0, 0, output_719 },
    (insn_gen_fn) gen_movti_internal,
    &operand_data[1362],
    2,
    0,
    3,
    3
  },
  {
    "*movti_rex64",
    { 0, 0, output_720 },
    0,
    &operand_data[1364],
    2,
    0,
    5,
    3
  },
  {
    "*movtf_rex64",
    { 0, 0, output_721 },
    0,
    &operand_data[1366],
    2,
    0,
    5,
    3
  },
  {
    "*sse_movaps_1",
    {
    "movaps\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[1368],
    2,
    0,
    2,
    1
  },
  {
    "*sse_movups_1",
    {
    "movups\t{%1, %0|%0, %1}",
    0, 0 },
    0,
    &operand_data[1368],
    2,
    0,
    2,
    1
  },
  {
    "sse_movmskps",
    {
    "movmskps\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse_movmskps,
    &operand_data[1370],
    2,
    0,
    1,
    1
  },
  {
    "mmx_pmovmskb",
    {
    "pmovmskb\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_mmx_pmovmskb,
    &operand_data[1372],
    2,
    0,
    1,
    1
  },
  {
    "mmx_maskmovq",
    {
    "maskmovq\t{%2, %1|%1, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_maskmovq,
    &operand_data[1374],
    3,
    0,
    1,
    1
  },
  {
    "mmx_maskmovq_rex",
    {
    "maskmovq\t{%2, %1|%1, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_maskmovq_rex,
    &operand_data[1377],
    3,
    0,
    1,
    1
  },
  {
    "sse_movntv4sf",
    {
    "movntps\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse_movntv4sf,
    &operand_data[1380],
    2,
    0,
    1,
    1
  },
  {
    "sse_movntdi",
    {
    "movntq\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse_movntdi,
    &operand_data[1382],
    2,
    0,
    1,
    1
  },
  {
    "sse_movhlps",
    {
    "movhlps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse_movhlps,
    &operand_data[1384],
    3,
    0,
    1,
    1
  },
  {
    "sse_movlhps",
    {
    "movlhps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse_movlhps,
    &operand_data[1384],
    3,
    0,
    1,
    1
  },
  {
    "sse_movhps",
    {
    "movhps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse_movhps,
    &operand_data[1387],
    3,
    0,
    2,
    1
  },
  {
    "sse_movlps",
    {
    "movlps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse_movlps,
    &operand_data[1387],
    3,
    0,
    2,
    1
  },
  {
    "sse_loadss_1",
    {
    "movss\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse_loadss_1,
    &operand_data[1390],
    3,
    0,
    1,
    1
  },
  {
    "sse_movss",
    {
    "movss\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse_movss,
    &operand_data[1384],
    3,
    0,
    1,
    1
  },
  {
    "sse_storess",
    {
    "movss\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse_storess,
    &operand_data[1393],
    2,
    0,
    1,
    1
  },
  {
    "sse_shufps",
    {
    "shufps\t{%3, %2, %0|%0, %2, %3}",
    0, 0 },
    (insn_gen_fn) gen_sse_shufps,
    &operand_data[1395],
    4,
    0,
    1,
    1
  },
  {
    "addv4sf3",
    {
    "addps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addv4sf3,
    &operand_data[1395],
    3,
    0,
    1,
    1
  },
  {
    "vmaddv4sf3",
    {
    "addss\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmaddv4sf3,
    &operand_data[1395],
    3,
    1,
    1,
    1
  },
  {
    "subv4sf3",
    {
    "subps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subv4sf3,
    &operand_data[1395],
    3,
    0,
    1,
    1
  },
  {
    "vmsubv4sf3",
    {
    "subss\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmsubv4sf3,
    &operand_data[1395],
    3,
    1,
    1,
    1
  },
  {
    "mulv4sf3",
    {
    "mulps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mulv4sf3,
    &operand_data[1395],
    3,
    0,
    1,
    1
  },
  {
    "vmmulv4sf3",
    {
    "mulss\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmmulv4sf3,
    &operand_data[1395],
    3,
    1,
    1,
    1
  },
  {
    "divv4sf3",
    {
    "divps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_divv4sf3,
    &operand_data[1395],
    3,
    0,
    1,
    1
  },
  {
    "vmdivv4sf3",
    {
    "divss\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmdivv4sf3,
    &operand_data[1395],
    3,
    1,
    1,
    1
  },
  {
    "rcpv4sf2",
    {
    "rcpps\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_rcpv4sf2,
    &operand_data[1399],
    2,
    0,
    1,
    1
  },
  {
    "vmrcpv4sf2",
    {
    "rcpss\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_vmrcpv4sf2,
    &operand_data[1399],
    3,
    0,
    1,
    1
  },
  {
    "rsqrtv4sf2",
    {
    "rsqrtps\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_rsqrtv4sf2,
    &operand_data[1399],
    2,
    0,
    1,
    1
  },
  {
    "vmrsqrtv4sf2",
    {
    "rsqrtss\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_vmrsqrtv4sf2,
    &operand_data[1399],
    3,
    0,
    1,
    1
  },
  {
    "sqrtv4sf2",
    {
    "sqrtps\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sqrtv4sf2,
    &operand_data[1399],
    2,
    0,
    1,
    1
  },
  {
    "vmsqrtv4sf2",
    {
    "sqrtss\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_vmsqrtv4sf2,
    &operand_data[1399],
    3,
    0,
    1,
    1
  },
  {
    "*sse_andv4sf3",
    {
    "andps\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[1402],
    3,
    0,
    1,
    1
  },
  {
    "*sse_nandv4sf3",
    {
    "andnps\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[1395],
    3,
    0,
    1,
    1
  },
  {
    "*sse_iorv4sf3",
    {
    "orps\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[1402],
    3,
    0,
    1,
    1
  },
  {
    "*sse_xorv4sf3",
    {
    "xorps\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[1402],
    3,
    0,
    1,
    1
  },
  {
    "*sse2_andv2df3",
    {
    "andpd\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[1405],
    3,
    0,
    1,
    1
  },
  {
    "*sse2_nandv2df3",
    {
    "andnpd\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[1408],
    3,
    0,
    1,
    1
  },
  {
    "*sse2_iorv2df3",
    {
    "orpd\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[1405],
    3,
    0,
    1,
    1
  },
  {
    "*sse2_xorv2df3",
    {
    "xorpd\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[1405],
    3,
    0,
    1,
    1
  },
  {
    "*sse2_andti3",
    {
    "pand\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[1411],
    3,
    0,
    1,
    1
  },
  {
    "sse2_andv2di3",
    {
    "pand\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_andv2di3,
    &operand_data[1414],
    3,
    0,
    1,
    1
  },
  {
    "*sse2_nandti3",
    {
    "pandn\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[1417],
    3,
    0,
    1,
    1
  },
  {
    "sse2_nandv2di3",
    {
    "pandn\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_nandv2di3,
    &operand_data[1420],
    3,
    0,
    1,
    1
  },
  {
    "*sse2_iorti3",
    {
    "por\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[1411],
    3,
    0,
    1,
    1
  },
  {
    "sse2_iorv2di3",
    {
    "por\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_iorv2di3,
    &operand_data[1414],
    3,
    0,
    1,
    1
  },
  {
    "*sse2_xorti3",
    {
    "pxor\t{%2, %0|%0, %2}",
    0, 0 },
    0,
    &operand_data[1411],
    3,
    0,
    1,
    1
  },
  {
    "sse2_xorv2di3",
    {
    "pxor\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_xorv2di3,
    &operand_data[1414],
    3,
    0,
    1,
    1
  },
  {
    "sse_clrv4sf",
    { 0, 0, output_768 },
    (insn_gen_fn) gen_sse_clrv4sf,
    &operand_data[1423],
    2,
    0,
    1,
    3
  },
  {
    "sse_clrv2df",
    {
    "xorpd\t{%0, %0|%0, %0}",
    0, 0 },
    (insn_gen_fn) gen_sse_clrv2df,
    &operand_data[1405],
    1,
    0,
    1,
    1
  },
  {
    "maskcmpv4sf3",
    {
    "cmp%D3ps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_maskcmpv4sf3,
    &operand_data[1425],
    4,
    0,
    1,
    1
  },
  {
    "maskncmpv4sf3",
    { 0, 0, output_771 },
    (insn_gen_fn) gen_maskncmpv4sf3,
    &operand_data[1425],
    4,
    0,
    1,
    3
  },
  {
    "vmmaskcmpv4sf3",
    {
    "cmp%D3ss\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmmaskcmpv4sf3,
    &operand_data[1425],
    4,
    1,
    1,
    1
  },
  {
    "vmmaskncmpv4sf3",
    { 0, 0, output_773 },
    (insn_gen_fn) gen_vmmaskncmpv4sf3,
    &operand_data[1425],
    4,
    1,
    1,
    3
  },
  {
    "sse_comi",
    {
    "comiss\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse_comi,
    &operand_data[1429],
    2,
    0,
    1,
    1
  },
  {
    "sse_ucomi",
    {
    "ucomiss\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse_ucomi,
    &operand_data[1429],
    2,
    0,
    1,
    1
  },
  {
    "sse_unpckhps",
    {
    "unpckhps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse_unpckhps,
    &operand_data[1384],
    3,
    0,
    1,
    1
  },
  {
    "sse_unpcklps",
    {
    "unpcklps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse_unpcklps,
    &operand_data[1384],
    3,
    0,
    1,
    1
  },
  {
    "smaxv4sf3",
    {
    "maxps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_smaxv4sf3,
    &operand_data[1395],
    3,
    0,
    1,
    1
  },
  {
    "vmsmaxv4sf3",
    {
    "maxss\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmsmaxv4sf3,
    &operand_data[1395],
    3,
    1,
    1,
    1
  },
  {
    "sminv4sf3",
    {
    "minps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sminv4sf3,
    &operand_data[1395],
    3,
    0,
    1,
    1
  },
  {
    "vmsminv4sf3",
    {
    "minss\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmsminv4sf3,
    &operand_data[1395],
    3,
    1,
    1,
    1
  },
  {
    "cvtpi2ps",
    {
    "cvtpi2ps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_cvtpi2ps,
    &operand_data[1431],
    3,
    0,
    1,
    1
  },
  {
    "cvtps2pi",
    {
    "cvtps2pi\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtps2pi,
    &operand_data[1434],
    2,
    0,
    1,
    1
  },
  {
    "cvttps2pi",
    {
    "cvttps2pi\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvttps2pi,
    &operand_data[1434],
    2,
    0,
    1,
    1
  },
  {
    "cvtsi2ss",
    {
    "cvtsi2ss\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_cvtsi2ss,
    &operand_data[1436],
    3,
    0,
    2,
    1
  },
  {
    "cvtsi2ssq",
    {
    "cvtsi2ssq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_cvtsi2ssq,
    &operand_data[1439],
    3,
    0,
    2,
    1
  },
  {
    "cvtss2si",
    {
    "cvtss2si\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtss2si,
    &operand_data[1442],
    2,
    0,
    2,
    1
  },
  {
    "cvtss2siq",
    {
    "cvtss2siq\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtss2siq,
    &operand_data[1444],
    2,
    0,
    2,
    1
  },
  {
    "cvttss2si",
    {
    "cvttss2si\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvttss2si,
    &operand_data[1446],
    2,
    0,
    2,
    1
  },
  {
    "cvttss2siq",
    {
    "cvttss2siq\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvttss2siq,
    &operand_data[1448],
    2,
    0,
    2,
    1
  },
  {
    "addv8qi3",
    {
    "paddb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addv8qi3,
    &operand_data[1450],
    3,
    0,
    1,
    1
  },
  {
    "addv4hi3",
    {
    "paddw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addv4hi3,
    &operand_data[1453],
    3,
    0,
    1,
    1
  },
  {
    "addv2si3",
    {
    "paddd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addv2si3,
    &operand_data[1456],
    3,
    0,
    1,
    1
  },
  {
    "mmx_adddi3",
    {
    "paddq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_adddi3,
    &operand_data[1459],
    3,
    0,
    1,
    1
  },
  {
    "ssaddv8qi3",
    {
    "paddsb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ssaddv8qi3,
    &operand_data[1450],
    3,
    0,
    1,
    1
  },
  {
    "ssaddv4hi3",
    {
    "paddsw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ssaddv4hi3,
    &operand_data[1453],
    3,
    0,
    1,
    1
  },
  {
    "usaddv8qi3",
    {
    "paddusb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_usaddv8qi3,
    &operand_data[1450],
    3,
    0,
    1,
    1
  },
  {
    "usaddv4hi3",
    {
    "paddusw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_usaddv4hi3,
    &operand_data[1453],
    3,
    0,
    1,
    1
  },
  {
    "subv8qi3",
    {
    "psubb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subv8qi3,
    &operand_data[1462],
    3,
    0,
    1,
    1
  },
  {
    "subv4hi3",
    {
    "psubw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subv4hi3,
    &operand_data[1465],
    3,
    0,
    1,
    1
  },
  {
    "subv2si3",
    {
    "psubd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subv2si3,
    &operand_data[1468],
    3,
    0,
    1,
    1
  },
  {
    "mmx_subdi3",
    {
    "psubq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_subdi3,
    &operand_data[1471],
    3,
    0,
    1,
    1
  },
  {
    "sssubv8qi3",
    {
    "psubsb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sssubv8qi3,
    &operand_data[1462],
    3,
    0,
    1,
    1
  },
  {
    "sssubv4hi3",
    {
    "psubsw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sssubv4hi3,
    &operand_data[1465],
    3,
    0,
    1,
    1
  },
  {
    "ussubv8qi3",
    {
    "psubusb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ussubv8qi3,
    &operand_data[1462],
    3,
    0,
    1,
    1
  },
  {
    "ussubv4hi3",
    {
    "psubusw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ussubv4hi3,
    &operand_data[1465],
    3,
    0,
    1,
    1
  },
  {
    "mulv4hi3",
    {
    "pmullw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mulv4hi3,
    &operand_data[1465],
    3,
    0,
    1,
    1
  },
  {
    "smulv4hi3_highpart",
    {
    "pmulhw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_smulv4hi3_highpart,
    &operand_data[1465],
    3,
    0,
    1,
    1
  },
  {
    "umulv4hi3_highpart",
    {
    "pmulhuw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_umulv4hi3_highpart,
    &operand_data[1465],
    3,
    0,
    1,
    1
  },
  {
    "mmx_pmaddwd",
    {
    "pmaddwd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_pmaddwd,
    &operand_data[1474],
    3,
    2,
    1,
    1
  },
  {
    "mmx_iordi3",
    {
    "por\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_iordi3,
    &operand_data[1459],
    3,
    0,
    1,
    1
  },
  {
    "mmx_xordi3",
    {
    "pxor\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_xordi3,
    &operand_data[1459],
    3,
    0,
    1,
    1
  },
  {
    "mmx_clrdi",
    {
    "pxor\t{%0, %0|%0, %0}",
    0, 0 },
    (insn_gen_fn) gen_mmx_clrdi,
    &operand_data[1459],
    1,
    0,
    1,
    1
  },
  {
    "mmx_anddi3",
    {
    "pand\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_anddi3,
    &operand_data[1459],
    3,
    0,
    1,
    1
  },
  {
    "mmx_nanddi3",
    {
    "pandn\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_nanddi3,
    &operand_data[1471],
    3,
    0,
    1,
    1
  },
  {
    "mmx_uavgv8qi3",
    {
    "pavgb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_uavgv8qi3,
    &operand_data[1462],
    3,
    0,
    1,
    1
  },
  {
    "mmx_uavgv4hi3",
    {
    "pavgw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_uavgv4hi3,
    &operand_data[1465],
    3,
    0,
    1,
    1
  },
  {
    "mmx_psadbw",
    {
    "psadbw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_psadbw,
    &operand_data[1477],
    3,
    0,
    1,
    1
  },
  {
    "mmx_pinsrw",
    {
    "pinsrw\t{%3, %2, %0|%0, %2, %3}",
    0, 0 },
    (insn_gen_fn) gen_mmx_pinsrw,
    &operand_data[1480],
    4,
    0,
    1,
    1
  },
  {
    "mmx_pextrw",
    {
    "pextrw\t{%2, %1, %0|%0, %1, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_pextrw,
    &operand_data[1484],
    3,
    0,
    1,
    1
  },
  {
    "mmx_pshufw",
    {
    "pshufw\t{%2, %1, %0|%0, %1, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_pshufw,
    &operand_data[1487],
    3,
    0,
    1,
    1
  },
  {
    "eqv8qi3",
    {
    "pcmpeqb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_eqv8qi3,
    &operand_data[1462],
    3,
    0,
    1,
    1
  },
  {
    "eqv4hi3",
    {
    "pcmpeqw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_eqv4hi3,
    &operand_data[1465],
    3,
    0,
    1,
    1
  },
  {
    "eqv2si3",
    {
    "pcmpeqd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_eqv2si3,
    &operand_data[1468],
    3,
    0,
    1,
    1
  },
  {
    "gtv8qi3",
    {
    "pcmpgtb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_gtv8qi3,
    &operand_data[1462],
    3,
    0,
    1,
    1
  },
  {
    "gtv4hi3",
    {
    "pcmpgtw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_gtv4hi3,
    &operand_data[1465],
    3,
    0,
    1,
    1
  },
  {
    "gtv2si3",
    {
    "pcmpgtd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_gtv2si3,
    &operand_data[1468],
    3,
    0,
    1,
    1
  },
  {
    "umaxv8qi3",
    {
    "pmaxub\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_umaxv8qi3,
    &operand_data[1462],
    3,
    0,
    1,
    1
  },
  {
    "smaxv4hi3",
    {
    "pmaxsw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_smaxv4hi3,
    &operand_data[1465],
    3,
    0,
    1,
    1
  },
  {
    "uminv8qi3",
    {
    "pminub\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_uminv8qi3,
    &operand_data[1462],
    3,
    0,
    1,
    1
  },
  {
    "sminv4hi3",
    {
    "pminsw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sminv4hi3,
    &operand_data[1465],
    3,
    0,
    1,
    1
  },
  {
    "ashrv4hi3",
    {
    "psraw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashrv4hi3,
    &operand_data[1490],
    3,
    0,
    1,
    1
  },
  {
    "ashrv2si3",
    {
    "psrad\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashrv2si3,
    &operand_data[1493],
    3,
    0,
    1,
    1
  },
  {
    "lshrv4hi3",
    {
    "psrlw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_lshrv4hi3,
    &operand_data[1490],
    3,
    0,
    1,
    1
  },
  {
    "lshrv2si3",
    {
    "psrld\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_lshrv2si3,
    &operand_data[1493],
    3,
    0,
    1,
    1
  },
  {
    "mmx_lshrdi3",
    {
    "psrlq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_lshrdi3,
    &operand_data[1496],
    3,
    0,
    1,
    1
  },
  {
    "ashlv4hi3",
    {
    "psllw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashlv4hi3,
    &operand_data[1490],
    3,
    0,
    1,
    1
  },
  {
    "ashlv2si3",
    {
    "pslld\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashlv2si3,
    &operand_data[1493],
    3,
    0,
    1,
    1
  },
  {
    "mmx_ashldi3",
    {
    "psllq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_ashldi3,
    &operand_data[1496],
    3,
    0,
    1,
    1
  },
  {
    "mmx_packsswb",
    {
    "packsswb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_packsswb,
    &operand_data[1499],
    3,
    0,
    1,
    1
  },
  {
    "mmx_packssdw",
    {
    "packssdw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_packssdw,
    &operand_data[1502],
    3,
    0,
    1,
    1
  },
  {
    "mmx_packuswb",
    {
    "packuswb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_packuswb,
    &operand_data[1499],
    3,
    0,
    1,
    1
  },
  {
    "mmx_punpckhbw",
    {
    "punpckhbw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_punpckhbw,
    &operand_data[1505],
    3,
    0,
    1,
    1
  },
  {
    "mmx_punpckhwd",
    {
    "punpckhwd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_punpckhwd,
    &operand_data[1508],
    3,
    0,
    1,
    1
  },
  {
    "mmx_punpckhdq",
    {
    "punpckhdq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_punpckhdq,
    &operand_data[1511],
    3,
    0,
    1,
    1
  },
  {
    "mmx_punpcklbw",
    {
    "punpcklbw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_punpcklbw,
    &operand_data[1505],
    3,
    0,
    1,
    1
  },
  {
    "mmx_punpcklwd",
    {
    "punpcklwd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_punpcklwd,
    &operand_data[1508],
    3,
    0,
    1,
    1
  },
  {
    "mmx_punpckldq",
    {
    "punpckldq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mmx_punpckldq,
    &operand_data[1511],
    3,
    0,
    1,
    1
  },
  {
    "emms",
    {
    "emms",
    0, 0 },
    (insn_gen_fn) gen_emms,
    &operand_data[0],
    0,
    0,
    0,
    1
  },
  {
    "ldmxcsr",
    {
    "ldmxcsr\t%0",
    0, 0 },
    (insn_gen_fn) gen_ldmxcsr,
    &operand_data[1514],
    1,
    0,
    1,
    1
  },
  {
    "stmxcsr",
    {
    "stmxcsr\t%0",
    0, 0 },
    (insn_gen_fn) gen_stmxcsr,
    &operand_data[290],
    1,
    0,
    1,
    1
  },
  {
    "*sfence_insn",
    {
    "sfence",
    0, 0 },
    0,
    &operand_data[1515],
    1,
    1,
    0,
    1
  },
  {
    "*sse_prologue_save_insn",
    { 0, 0, output_853 },
    0,
    &operand_data[1516],
    5,
    0,
    1,
    3
  },
  {
    "addv2sf3",
    {
    "pfadd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addv2sf3,
    &operand_data[1521],
    3,
    0,
    1,
    1
  },
  {
    "subv2sf3",
    {
    "pfsub\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subv2sf3,
    &operand_data[1521],
    3,
    0,
    1,
    1
  },
  {
    "subrv2sf3",
    {
    "pfsubr\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subrv2sf3,
    &operand_data[1521],
    3,
    0,
    1,
    1
  },
  {
    "gtv2sf3",
    {
    "pfcmpgt\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_gtv2sf3,
    &operand_data[1524],
    3,
    0,
    1,
    1
  },
  {
    "gev2sf3",
    {
    "pfcmpge\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_gev2sf3,
    &operand_data[1524],
    3,
    0,
    1,
    1
  },
  {
    "eqv2sf3",
    {
    "pfcmpeq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_eqv2sf3,
    &operand_data[1524],
    3,
    0,
    1,
    1
  },
  {
    "pfmaxv2sf3",
    {
    "pfmax\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_pfmaxv2sf3,
    &operand_data[1521],
    3,
    0,
    1,
    1
  },
  {
    "pfminv2sf3",
    {
    "pfmin\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_pfminv2sf3,
    &operand_data[1521],
    3,
    0,
    1,
    1
  },
  {
    "mulv2sf3",
    {
    "pfmul\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mulv2sf3,
    &operand_data[1521],
    3,
    0,
    1,
    1
  },
  {
    "femms",
    {
    "femms",
    0, 0 },
    (insn_gen_fn) gen_femms,
    &operand_data[0],
    0,
    0,
    0,
    1
  },
  {
    "pf2id",
    {
    "pf2id\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_pf2id,
    &operand_data[1527],
    2,
    0,
    1,
    1
  },
  {
    "pf2iw",
    {
    "pf2iw\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_pf2iw,
    &operand_data[1527],
    2,
    0,
    1,
    1
  },
  {
    "pfacc",
    {
    "pfacc\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_pfacc,
    &operand_data[1529],
    3,
    2,
    1,
    1
  },
  {
    "pfnacc",
    {
    "pfnacc\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_pfnacc,
    &operand_data[1529],
    3,
    2,
    1,
    1
  },
  {
    "pfpnacc",
    {
    "pfpnacc\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_pfpnacc,
    &operand_data[1529],
    3,
    2,
    1,
    1
  },
  {
    "pi2fw",
    {
    "pi2fw\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_pi2fw,
    &operand_data[1532],
    2,
    1,
    1,
    1
  },
  {
    "floatv2si2",
    {
    "pi2fd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_floatv2si2,
    &operand_data[1532],
    2,
    0,
    1,
    1
  },
  {
    "pavgusb",
    {
    "pavgusb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_pavgusb,
    &operand_data[1462],
    3,
    0,
    1,
    1
  },
  {
    "pfrcpv2sf2",
    {
    "pfrcp\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_pfrcpv2sf2,
    &operand_data[1534],
    2,
    0,
    1,
    1
  },
  {
    "pfrcpit1v2sf3",
    {
    "pfrcpit1\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_pfrcpit1v2sf3,
    &operand_data[1521],
    3,
    0,
    1,
    1
  },
  {
    "pfrcpit2v2sf3",
    {
    "pfrcpit2\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_pfrcpit2v2sf3,
    &operand_data[1521],
    3,
    0,
    1,
    1
  },
  {
    "pfrsqrtv2sf2",
    {
    "pfrsqrt\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_pfrsqrtv2sf2,
    &operand_data[1534],
    2,
    0,
    1,
    1
  },
  {
    "pfrsqit1v2sf3",
    {
    "pfrsqit1\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_pfrsqit1v2sf3,
    &operand_data[1521],
    3,
    0,
    1,
    1
  },
  {
    "pmulhrwv4hi3",
    {
    "pmulhrw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_pmulhrwv4hi3,
    &operand_data[1465],
    3,
    0,
    1,
    1
  },
  {
    "pswapdv2si2",
    {
    "pswapd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_pswapdv2si2,
    &operand_data[1536],
    2,
    0,
    1,
    1
  },
  {
    "pswapdv2sf2",
    {
    "pswapd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_pswapdv2sf2,
    &operand_data[1534],
    2,
    0,
    1,
    1
  },
  {
    "*prefetch_sse",
    { 0, 0, output_880 },
    0,
    &operand_data[1538],
    2,
    0,
    1,
    3
  },
  {
    "*prefetch_sse_rex",
    { 0, 0, output_881 },
    0,
    &operand_data[1540],
    2,
    0,
    1,
    3
  },
  {
    "*prefetch_3dnow",
    { 0, 0, output_882 },
    0,
    &operand_data[1542],
    2,
    0,
    1,
    3
  },
  {
    "*prefetch_3dnow_rex",
    { 0, 0, output_883 },
    0,
    &operand_data[1544],
    2,
    0,
    1,
    3
  },
  {
    "addv2df3",
    {
    "addpd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addv2df3,
    &operand_data[1408],
    3,
    0,
    1,
    1
  },
  {
    "vmaddv2df3",
    {
    "addsd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmaddv2df3,
    &operand_data[1408],
    3,
    1,
    1,
    1
  },
  {
    "subv2df3",
    {
    "subpd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subv2df3,
    &operand_data[1408],
    3,
    0,
    1,
    1
  },
  {
    "vmsubv2df3",
    {
    "subsd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmsubv2df3,
    &operand_data[1408],
    3,
    1,
    1,
    1
  },
  {
    "mulv2df3",
    {
    "mulpd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mulv2df3,
    &operand_data[1408],
    3,
    0,
    1,
    1
  },
  {
    "vmmulv2df3",
    {
    "mulsd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmmulv2df3,
    &operand_data[1408],
    3,
    1,
    1,
    1
  },
  {
    "divv2df3",
    {
    "divpd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_divv2df3,
    &operand_data[1408],
    3,
    0,
    1,
    1
  },
  {
    "vmdivv2df3",
    {
    "divsd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmdivv2df3,
    &operand_data[1408],
    3,
    1,
    1,
    1
  },
  {
    "smaxv2df3",
    {
    "maxpd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_smaxv2df3,
    &operand_data[1408],
    3,
    0,
    1,
    1
  },
  {
    "vmsmaxv2df3",
    {
    "maxsd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmsmaxv2df3,
    &operand_data[1408],
    3,
    1,
    1,
    1
  },
  {
    "sminv2df3",
    {
    "minpd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sminv2df3,
    &operand_data[1408],
    3,
    0,
    1,
    1
  },
  {
    "vmsminv2df3",
    {
    "minsd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmsminv2df3,
    &operand_data[1408],
    3,
    1,
    1,
    1
  },
  {
    "sqrtv2df2",
    {
    "sqrtpd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sqrtv2df2,
    &operand_data[1546],
    2,
    0,
    1,
    1
  },
  {
    "vmsqrtv2df2",
    {
    "sqrtsd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_vmsqrtv2df2,
    &operand_data[1546],
    3,
    0,
    1,
    1
  },
  {
    "maskcmpv2df3",
    {
    "cmp%D3pd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_maskcmpv2df3,
    &operand_data[1549],
    4,
    0,
    1,
    1
  },
  {
    "maskncmpv2df3",
    { 0, 0, output_899 },
    (insn_gen_fn) gen_maskncmpv2df3,
    &operand_data[1549],
    4,
    0,
    1,
    3
  },
  {
    "vmmaskcmpv2df3",
    {
    "cmp%D3sd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_vmmaskcmpv2df3,
    &operand_data[1549],
    4,
    1,
    1,
    1
  },
  {
    "vmmaskncmpv2df3",
    { 0, 0, output_901 },
    (insn_gen_fn) gen_vmmaskncmpv2df3,
    &operand_data[1549],
    4,
    1,
    1,
    3
  },
  {
    "sse2_comi",
    {
    "comisd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_comi,
    &operand_data[1553],
    2,
    0,
    1,
    1
  },
  {
    "sse2_ucomi",
    {
    "ucomisd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_ucomi,
    &operand_data[1553],
    2,
    0,
    1,
    1
  },
  {
    "sse2_movmskpd",
    {
    "movmskpd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_movmskpd,
    &operand_data[1555],
    2,
    0,
    1,
    1
  },
  {
    "sse2_pmovmskb",
    {
    "pmovmskb\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_pmovmskb,
    &operand_data[1557],
    2,
    0,
    1,
    1
  },
  {
    "sse2_maskmovdqu",
    {
    "maskmovdqu\t{%2, %1|%1, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_maskmovdqu,
    &operand_data[1559],
    3,
    0,
    1,
    1
  },
  {
    "sse2_maskmovdqu_rex64",
    {
    "maskmovdqu\t{%2, %1|%1, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_maskmovdqu_rex64,
    &operand_data[1562],
    3,
    0,
    1,
    1
  },
  {
    "sse2_movntv2df",
    {
    "movntpd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_movntv2df,
    &operand_data[1565],
    2,
    0,
    1,
    1
  },
  {
    "sse2_movntv2di",
    {
    "movntdq\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_movntv2di,
    &operand_data[1567],
    2,
    0,
    1,
    1
  },
  {
    "sse2_movntsi",
    {
    "movnti\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_movntsi,
    &operand_data[1569],
    2,
    0,
    1,
    1
  },
  {
    "cvtdq2ps",
    {
    "cvtdq2ps\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtdq2ps,
    &operand_data[1571],
    2,
    0,
    1,
    1
  },
  {
    "cvtps2dq",
    {
    "cvtps2dq\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtps2dq,
    &operand_data[1573],
    2,
    0,
    1,
    1
  },
  {
    "cvttps2dq",
    {
    "cvttps2dq\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvttps2dq,
    &operand_data[1573],
    2,
    0,
    1,
    1
  },
  {
    "cvtdq2pd",
    {
    "cvtdq2pd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtdq2pd,
    &operand_data[1575],
    2,
    0,
    1,
    1
  },
  {
    "cvtpd2dq",
    {
    "cvtpd2dq\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtpd2dq,
    &operand_data[1577],
    2,
    0,
    1,
    1
  },
  {
    "cvttpd2dq",
    {
    "cvttpd2dq\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvttpd2dq,
    &operand_data[1577],
    2,
    0,
    1,
    1
  },
  {
    "cvtpd2pi",
    {
    "cvtpd2pi\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtpd2pi,
    &operand_data[1579],
    2,
    0,
    1,
    1
  },
  {
    "cvttpd2pi",
    {
    "cvttpd2pi\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvttpd2pi,
    &operand_data[1579],
    2,
    0,
    1,
    1
  },
  {
    "cvtpi2pd",
    {
    "cvtpi2pd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtpi2pd,
    &operand_data[1581],
    2,
    0,
    1,
    1
  },
  {
    "cvtsd2si",
    {
    "cvtsd2si\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtsd2si,
    &operand_data[1583],
    2,
    0,
    2,
    1
  },
  {
    "cvtsd2siq",
    {
    "cvtsd2siq\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtsd2siq,
    &operand_data[1585],
    2,
    0,
    2,
    1
  },
  {
    "cvttsd2si",
    {
    "cvttsd2si\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvttsd2si,
    &operand_data[1587],
    2,
    0,
    2,
    1
  },
  {
    "cvttsd2siq",
    {
    "cvttsd2siq\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvttsd2siq,
    &operand_data[1589],
    2,
    0,
    2,
    1
  },
  {
    "cvtsi2sd",
    {
    "cvtsi2sd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_cvtsi2sd,
    &operand_data[1591],
    3,
    0,
    2,
    1
  },
  {
    "cvtsi2sdq",
    {
    "cvtsi2sdq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_cvtsi2sdq,
    &operand_data[1594],
    3,
    0,
    2,
    1
  },
  {
    "cvtsd2ss",
    {
    "cvtsd2ss\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_cvtsd2ss,
    &operand_data[1597],
    3,
    0,
    2,
    1
  },
  {
    "cvtss2sd",
    {
    "cvtss2sd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_cvtss2sd,
    &operand_data[1600],
    3,
    0,
    1,
    1
  },
  {
    "cvtpd2ps",
    {
    "cvtpd2ps\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtpd2ps,
    &operand_data[1603],
    2,
    0,
    1,
    1
  },
  {
    "cvtps2pd",
    {
    "cvtps2pd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_cvtps2pd,
    &operand_data[1605],
    2,
    0,
    1,
    1
  },
  {
    "addv16qi3",
    {
    "paddb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addv16qi3,
    &operand_data[1607],
    3,
    0,
    1,
    1
  },
  {
    "addv8hi3",
    {
    "paddw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addv8hi3,
    &operand_data[1610],
    3,
    0,
    1,
    1
  },
  {
    "addv4si3",
    {
    "paddd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addv4si3,
    &operand_data[1613],
    3,
    0,
    1,
    1
  },
  {
    "addv2di3",
    {
    "paddq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addv2di3,
    &operand_data[1616],
    3,
    0,
    1,
    1
  },
  {
    "ssaddv16qi3",
    {
    "paddsb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ssaddv16qi3,
    &operand_data[1607],
    3,
    0,
    1,
    1
  },
  {
    "ssaddv8hi3",
    {
    "paddsw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ssaddv8hi3,
    &operand_data[1610],
    3,
    0,
    1,
    1
  },
  {
    "usaddv16qi3",
    {
    "paddusb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_usaddv16qi3,
    &operand_data[1607],
    3,
    0,
    1,
    1
  },
  {
    "usaddv8hi3",
    {
    "paddusw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_usaddv8hi3,
    &operand_data[1610],
    3,
    0,
    1,
    1
  },
  {
    "subv16qi3",
    {
    "psubb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subv16qi3,
    &operand_data[1619],
    3,
    0,
    1,
    1
  },
  {
    "subv8hi3",
    {
    "psubw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subv8hi3,
    &operand_data[1622],
    3,
    0,
    1,
    1
  },
  {
    "subv4si3",
    {
    "psubd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subv4si3,
    &operand_data[1625],
    3,
    0,
    1,
    1
  },
  {
    "subv2di3",
    {
    "psubq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_subv2di3,
    &operand_data[1420],
    3,
    0,
    1,
    1
  },
  {
    "sssubv16qi3",
    {
    "psubsb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sssubv16qi3,
    &operand_data[1619],
    3,
    0,
    1,
    1
  },
  {
    "sssubv8hi3",
    {
    "psubsw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sssubv8hi3,
    &operand_data[1622],
    3,
    0,
    1,
    1
  },
  {
    "ussubv16qi3",
    {
    "psubusb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ussubv16qi3,
    &operand_data[1619],
    3,
    0,
    1,
    1
  },
  {
    "ussubv8hi3",
    {
    "psubusw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ussubv8hi3,
    &operand_data[1622],
    3,
    0,
    1,
    1
  },
  {
    "mulv8hi3",
    {
    "pmullw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_mulv8hi3,
    &operand_data[1622],
    3,
    0,
    1,
    1
  },
  {
    "smulv8hi3_highpart",
    {
    "pmulhw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_smulv8hi3_highpart,
    &operand_data[1622],
    3,
    0,
    1,
    1
  },
  {
    "umulv8hi3_highpart",
    {
    "pmulhuw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_umulv8hi3_highpart,
    &operand_data[1622],
    3,
    0,
    1,
    1
  },
  {
    "sse2_umulsidi3",
    {
    "pmuludq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_umulsidi3,
    &operand_data[1628],
    3,
    0,
    1,
    1
  },
  {
    "sse2_umulv2siv2di3",
    {
    "pmuludq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_umulv2siv2di3,
    &operand_data[1631],
    3,
    0,
    1,
    1
  },
  {
    "sse2_pmaddwd",
    {
    "pmaddwd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_pmaddwd,
    &operand_data[1634],
    3,
    2,
    1,
    1
  },
  {
    "sse2_clrti",
    { 0, 0, output_952 },
    (insn_gen_fn) gen_sse2_clrti,
    &operand_data[1411],
    1,
    0,
    1,
    3
  },
  {
    "sse2_uavgv16qi3",
    {
    "pavgb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_uavgv16qi3,
    &operand_data[1619],
    3,
    0,
    1,
    1
  },
  {
    "sse2_uavgv8hi3",
    {
    "pavgw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_uavgv8hi3,
    &operand_data[1622],
    3,
    0,
    1,
    1
  },
  {
    "sse2_psadbw",
    {
    "psadbw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_psadbw,
    &operand_data[1637],
    3,
    0,
    1,
    1
  },
  {
    "sse2_pinsrw",
    {
    "pinsrw\t{%3, %2, %0|%0, %2, %3}",
    0, 0 },
    (insn_gen_fn) gen_sse2_pinsrw,
    &operand_data[1640],
    4,
    0,
    1,
    1
  },
  {
    "sse2_pextrw",
    {
    "pextrw\t{%2, %1, %0|%0, %1, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_pextrw,
    &operand_data[1644],
    3,
    0,
    1,
    1
  },
  {
    "sse2_pshufd",
    {
    "pshufd\t{%2, %1, %0|%0, %1, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_pshufd,
    &operand_data[1647],
    3,
    0,
    1,
    1
  },
  {
    "sse2_pshuflw",
    {
    "pshuflw\t{%2, %1, %0|%0, %1, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_pshuflw,
    &operand_data[1650],
    3,
    0,
    1,
    1
  },
  {
    "sse2_pshufhw",
    {
    "pshufhw\t{%2, %1, %0|%0, %1, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_pshufhw,
    &operand_data[1650],
    3,
    0,
    1,
    1
  },
  {
    "eqv16qi3",
    {
    "pcmpeqb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_eqv16qi3,
    &operand_data[1619],
    3,
    0,
    1,
    1
  },
  {
    "eqv8hi3",
    {
    "pcmpeqw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_eqv8hi3,
    &operand_data[1622],
    3,
    0,
    1,
    1
  },
  {
    "eqv4si3",
    {
    "pcmpeqd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_eqv4si3,
    &operand_data[1625],
    3,
    0,
    1,
    1
  },
  {
    "gtv16qi3",
    {
    "pcmpgtb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_gtv16qi3,
    &operand_data[1619],
    3,
    0,
    1,
    1
  },
  {
    "gtv8hi3",
    {
    "pcmpgtw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_gtv8hi3,
    &operand_data[1622],
    3,
    0,
    1,
    1
  },
  {
    "gtv4si3",
    {
    "pcmpgtd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_gtv4si3,
    &operand_data[1625],
    3,
    0,
    1,
    1
  },
  {
    "umaxv16qi3",
    {
    "pmaxub\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_umaxv16qi3,
    &operand_data[1619],
    3,
    0,
    1,
    1
  },
  {
    "smaxv8hi3",
    {
    "pmaxsw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_smaxv8hi3,
    &operand_data[1622],
    3,
    0,
    1,
    1
  },
  {
    "uminv16qi3",
    {
    "pminub\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_uminv16qi3,
    &operand_data[1619],
    3,
    0,
    1,
    1
  },
  {
    "sminv8hi3",
    {
    "pminsw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sminv8hi3,
    &operand_data[1622],
    3,
    0,
    1,
    1
  },
  {
    "ashrv8hi3",
    {
    "psraw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashrv8hi3,
    &operand_data[1653],
    3,
    0,
    1,
    1
  },
  {
    "ashrv4si3",
    {
    "psrad\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashrv4si3,
    &operand_data[1656],
    3,
    0,
    1,
    1
  },
  {
    "lshrv8hi3",
    {
    "psrlw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_lshrv8hi3,
    &operand_data[1653],
    3,
    0,
    1,
    1
  },
  {
    "lshrv4si3",
    {
    "psrld\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_lshrv4si3,
    &operand_data[1656],
    3,
    0,
    1,
    1
  },
  {
    "lshrv2di3",
    {
    "psrlq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_lshrv2di3,
    &operand_data[1659],
    3,
    0,
    1,
    1
  },
  {
    "ashlv8hi3",
    {
    "psllw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashlv8hi3,
    &operand_data[1653],
    3,
    0,
    1,
    1
  },
  {
    "ashlv4si3",
    {
    "pslld\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashlv4si3,
    &operand_data[1656],
    3,
    0,
    1,
    1
  },
  {
    "ashlv2di3",
    {
    "psllq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashlv2di3,
    &operand_data[1659],
    3,
    0,
    1,
    1
  },
  {
    "ashrv8hi3_ti",
    {
    "psraw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashrv8hi3_ti,
    &operand_data[1662],
    3,
    0,
    1,
    1
  },
  {
    "ashrv4si3_ti",
    {
    "psrad\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashrv4si3_ti,
    &operand_data[1665],
    3,
    0,
    1,
    1
  },
  {
    "lshrv8hi3_ti",
    {
    "psrlw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_lshrv8hi3_ti,
    &operand_data[1662],
    3,
    0,
    1,
    1
  },
  {
    "lshrv4si3_ti",
    {
    "psrld\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_lshrv4si3_ti,
    &operand_data[1665],
    3,
    0,
    1,
    1
  },
  {
    "lshrv2di3_ti",
    {
    "psrlq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_lshrv2di3_ti,
    &operand_data[1668],
    3,
    0,
    1,
    1
  },
  {
    "ashlv8hi3_ti",
    {
    "psllw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashlv8hi3_ti,
    &operand_data[1662],
    3,
    0,
    1,
    1
  },
  {
    "ashlv4si3_ti",
    {
    "pslld\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashlv4si3_ti,
    &operand_data[1665],
    3,
    0,
    1,
    1
  },
  {
    "ashlv2di3_ti",
    {
    "psllq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_ashlv2di3_ti,
    &operand_data[1668],
    3,
    0,
    1,
    1
  },
  {
    "sse2_ashlti3",
    {
    "pslldq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_ashlti3,
    &operand_data[1671],
    3,
    0,
    1,
    1
  },
  {
    "sse2_lshrti3",
    {
    "psrldq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_lshrti3,
    &operand_data[1671],
    3,
    0,
    1,
    1
  },
  {
    "sse2_unpckhpd",
    {
    "unpckhpd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_unpckhpd,
    &operand_data[1674],
    3,
    0,
    1,
    1
  },
  {
    "sse2_unpcklpd",
    {
    "unpcklpd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_unpcklpd,
    &operand_data[1674],
    3,
    0,
    1,
    1
  },
  {
    "sse2_packsswb",
    {
    "packsswb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_packsswb,
    &operand_data[1677],
    3,
    0,
    1,
    1
  },
  {
    "sse2_packssdw",
    {
    "packssdw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_packssdw,
    &operand_data[1680],
    3,
    0,
    1,
    1
  },
  {
    "sse2_packuswb",
    {
    "packuswb\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_packuswb,
    &operand_data[1677],
    3,
    0,
    1,
    1
  },
  {
    "sse2_punpckhbw",
    {
    "punpckhbw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_punpckhbw,
    &operand_data[1683],
    3,
    0,
    1,
    1
  },
  {
    "sse2_punpckhwd",
    {
    "punpckhwd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_punpckhwd,
    &operand_data[1686],
    3,
    0,
    1,
    1
  },
  {
    "sse2_punpckhdq",
    {
    "punpckhdq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_punpckhdq,
    &operand_data[1689],
    3,
    0,
    1,
    1
  },
  {
    "sse2_punpcklbw",
    {
    "punpcklbw\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_punpcklbw,
    &operand_data[1683],
    3,
    0,
    1,
    1
  },
  {
    "sse2_punpcklwd",
    {
    "punpcklwd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_punpcklwd,
    &operand_data[1686],
    3,
    0,
    1,
    1
  },
  {
    "sse2_punpckldq",
    {
    "punpckldq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_punpckldq,
    &operand_data[1689],
    3,
    0,
    1,
    1
  },
  {
    "sse2_punpcklqdq",
    {
    "punpcklqdq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_punpcklqdq,
    &operand_data[1692],
    3,
    0,
    1,
    1
  },
  {
    "sse2_punpckhqdq",
    {
    "punpckhqdq\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_punpckhqdq,
    &operand_data[1692],
    3,
    0,
    1,
    1
  },
  {
    "sse2_movapd",
    {
    "movapd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_movapd,
    &operand_data[1695],
    2,
    0,
    2,
    1
  },
  {
    "sse2_movupd",
    {
    "movupd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_movupd,
    &operand_data[1695],
    2,
    0,
    2,
    1
  },
  {
    "sse2_movdqa",
    {
    "movdqa\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_movdqa,
    &operand_data[1697],
    2,
    0,
    2,
    1
  },
  {
    "sse2_movdqu",
    {
    "movdqu\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_movdqu,
    &operand_data[1697],
    2,
    0,
    2,
    1
  },
  {
    "sse2_movdq2q",
    { 0, output_1006, 0 },
    (insn_gen_fn) gen_sse2_movdq2q,
    &operand_data[1699],
    2,
    0,
    2,
    2
  },
  {
    "sse2_movdq2q_rex64",
    { 0, output_1007, 0 },
    (insn_gen_fn) gen_sse2_movdq2q_rex64,
    &operand_data[1701],
    2,
    0,
    3,
    2
  },
  {
    "sse2_movq2dq",
    { 0, output_1008, 0 },
    (insn_gen_fn) gen_sse2_movq2dq,
    &operand_data[1703],
    2,
    0,
    2,
    2
  },
  {
    "sse2_movq2dq_rex64",
    { 0, output_1009, 0 },
    (insn_gen_fn) gen_sse2_movq2dq_rex64,
    &operand_data[1705],
    2,
    0,
    3,
    2
  },
  {
    "sse2_movq",
    {
    "movq\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_movq,
    &operand_data[1707],
    2,
    0,
    1,
    1
  },
  {
    "sse2_loadd",
    {
    "movd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_loadd,
    &operand_data[1709],
    2,
    0,
    1,
    1
  },
  {
    "sse2_stored",
    {
    "movd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_stored,
    &operand_data[1711],
    2,
    0,
    1,
    1
  },
  {
    "sse2_movhpd",
    {
    "movhpd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_sse2_movhpd,
    &operand_data[1713],
    3,
    0,
    2,
    1
  },
  {
    "sse2_loadsd_1",
    {
    "movsd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_loadsd_1,
    &operand_data[1716],
    3,
    0,
    1,
    1
  },
  {
    "sse2_movsd",
    { 0, output_1015, 0 },
    (insn_gen_fn) gen_sse2_movsd,
    &operand_data[1719],
    3,
    0,
    3,
    2
  },
  {
    "sse2_storesd",
    {
    "movsd\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_sse2_storesd,
    &operand_data[1722],
    2,
    0,
    1,
    1
  },
  {
    "sse2_shufpd",
    {
    "shufpd\t{%3, %2, %0|%0, %2, %3}",
    0, 0 },
    (insn_gen_fn) gen_sse2_shufpd,
    &operand_data[1724],
    4,
    0,
    1,
    1
  },
  {
    "sse2_clflush",
    {
    "clflush %0",
    0, 0 },
    (insn_gen_fn) gen_sse2_clflush,
    &operand_data[1728],
    1,
    0,
    1,
    1
  },
  {
    "*mfence_insn",
    {
    "mfence",
    0, 0 },
    0,
    &operand_data[1515],
    1,
    1,
    0,
    1
  },
  {
    "*lfence_insn",
    {
    "lfence",
    0, 0 },
    0,
    &operand_data[1515],
    1,
    1,
    0,
    1
  },
  {
    "mwait",
    {
    "mwait\t%0, %1",
    0, 0 },
    (insn_gen_fn) gen_mwait,
    &operand_data[1729],
    2,
    0,
    1,
    1
  },
  {
    "monitor",
    {
    "monitor\t%0, %1, %2",
    0, 0 },
    (insn_gen_fn) gen_monitor,
    &operand_data[1729],
    3,
    0,
    1,
    1
  },
  {
    "addsubv4sf3",
    {
    "addsubps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addsubv4sf3,
    &operand_data[1395],
    3,
    0,
    1,
    1
  },
  {
    "addsubv2df3",
    {
    "addsubpd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_addsubv2df3,
    &operand_data[1408],
    3,
    0,
    1,
    1
  },
  {
    "haddv4sf3",
    {
    "haddps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_haddv4sf3,
    &operand_data[1395],
    3,
    0,
    1,
    1
  },
  {
    "haddv2df3",
    {
    "haddpd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_haddv2df3,
    &operand_data[1408],
    3,
    0,
    1,
    1
  },
  {
    "hsubv4sf3",
    {
    "hsubps\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_hsubv4sf3,
    &operand_data[1395],
    3,
    0,
    1,
    1
  },
  {
    "hsubv2df3",
    {
    "hsubpd\t{%2, %0|%0, %2}",
    0, 0 },
    (insn_gen_fn) gen_hsubv2df3,
    &operand_data[1408],
    3,
    0,
    1,
    1
  },
  {
    "movshdup",
    {
    "movshdup\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_movshdup,
    &operand_data[1399],
    2,
    0,
    1,
    1
  },
  {
    "movsldup",
    {
    "movsldup\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_movsldup,
    &operand_data[1399],
    2,
    0,
    1,
    1
  },
  {
    "lddqu",
    {
    "lddqu\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_lddqu,
    &operand_data[1732],
    2,
    0,
    1,
    1
  },
  {
    "loadddup",
    {
    "movddup\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_loadddup,
    &operand_data[1716],
    2,
    0,
    1,
    1
  },
  {
    "movddup",
    {
    "movddup\t{%1, %0|%0, %1}",
    0, 0 },
    (insn_gen_fn) gen_movddup,
    &operand_data[1734],
    2,
    0,
    1,
    1
  },
  {
    "cmpdi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpdi,
    &operand_data[1736],
    2,
    0,
    0,
    0
  },
  {
    "cmpsi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpsi,
    &operand_data[1738],
    2,
    0,
    0,
    0
  },
  {
    "cmphi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmphi,
    &operand_data[1740],
    2,
    0,
    0,
    0
  },
  {
    "cmpqi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpqi,
    &operand_data[1742],
    2,
    0,
    0,
    0
  },
  {
    "cmpdi_1_rex64",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpdi_1_rex64,
    &operand_data[1744],
    2,
    0,
    0,
    0
  },
  {
    "cmpsi_1",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpsi_1,
    &operand_data[9],
    2,
    0,
    2,
    0
  },
  {
    "cmpqi_ext_3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpqi_ext_3,
    &operand_data[1746],
    2,
    0,
    0,
    0
  },
  {
    "cmpxf",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpxf,
    &operand_data[1748],
    2,
    0,
    0,
    0
  },
  {
    "cmpdf",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpdf,
    &operand_data[1750],
    2,
    0,
    0,
    0
  },
  {
    "cmpsf",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpsf,
    &operand_data[1752],
    2,
    0,
    0,
    0
  },
  {
    "cmpsf+1",
    { 0, 0, 0 },
    0,
    &operand_data[1754],
    2,
    0,
    0,
    0
  },
  {
    "movsi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movsi,
    &operand_data[1756],
    2,
    0,
    0,
    0
  },
  {
    "movhi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movhi,
    &operand_data[1740],
    2,
    0,
    0,
    0
  },
  {
    "movstricthi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movstricthi,
    &operand_data[1758],
    2,
    0,
    0,
    0
  },
  {
    "movqi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movqi,
    &operand_data[1742],
    2,
    0,
    0,
    0
  },
  {
    "reload_outqi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_reload_outqi,
    &operand_data[1760],
    3,
    0,
    1,
    0
  },
  {
    "movstrictqi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movstrictqi,
    &operand_data[1763],
    2,
    0,
    0,
    0
  },
  {
    "movdi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movdi,
    &operand_data[1744],
    2,
    0,
    0,
    0
  },
  {
    "movdi+1",
    { 0, 0, 0 },
    0,
    &operand_data[1765],
    3,
    0,
    0,
    0
  },
  {
    "movdi+2",
    { 0, 0, 0 },
    0,
    &operand_data[1765],
    2,
    0,
    0,
    0
  },
  {
    "movdi+3",
    { 0, 0, 0 },
    0,
    &operand_data[1765],
    2,
    0,
    0,
    0
  },
  {
    "movdi+4",
    { 0, 0, 0 },
    0,
    &operand_data[1768],
    2,
    0,
    0,
    0
  },
  {
    "movsf-4",
    { 0, 0, 0 },
    0,
    &operand_data[1744],
    2,
    0,
    0,
    0
  },
  {
    "movsf-3",
    { 0, 0, 0 },
    0,
    &operand_data[1770],
    3,
    0,
    0,
    0
  },
  {
    "movsf-2",
    { 0, 0, 0 },
    0,
    &operand_data[1770],
    2,
    0,
    0,
    0
  },
  {
    "movsf-1",
    { 0, 0, 0 },
    0,
    &operand_data[1770],
    2,
    0,
    0,
    0
  },
  {
    "movsf",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movsf,
    &operand_data[1773],
    2,
    0,
    0,
    0
  },
  {
    "movsf+1",
    { 0, 0, 0 },
    0,
    &operand_data[1775],
    2,
    0,
    0,
    0
  },
  {
    "movsf+2",
    { 0, 0, 0 },
    0,
    &operand_data[1777],
    2,
    0,
    0,
    0
  },
  {
    "movdf-1",
    { 0, 0, 0 },
    0,
    &operand_data[1777],
    2,
    0,
    0,
    0
  },
  {
    "movdf",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movdf,
    &operand_data[1779],
    2,
    0,
    0,
    0
  },
  {
    "movdf+1",
    { 0, 0, 0 },
    0,
    &operand_data[1781],
    2,
    0,
    0,
    0
  },
  {
    "movdf+2",
    { 0, 0, 0 },
    0,
    &operand_data[1781],
    2,
    0,
    0,
    0
  },
  {
    "movxf-2",
    { 0, 0, 0 },
    0,
    &operand_data[1783],
    2,
    0,
    0,
    0
  },
  {
    "movxf-1",
    { 0, 0, 0 },
    0,
    &operand_data[1779],
    2,
    0,
    0,
    0
  },
  {
    "movxf",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movxf,
    &operand_data[1785],
    2,
    0,
    0,
    0
  },
  {
    "movxf+1",
    { 0, 0, 0 },
    0,
    &operand_data[1787],
    2,
    0,
    0,
    0
  },
  {
    "movxf+2",
    { 0, 0, 0 },
    0,
    &operand_data[1789],
    2,
    0,
    0,
    0
  },
  {
    "movxf+3",
    { 0, 0, 0 },
    0,
    &operand_data[1789],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendhisi2-2",
    { 0, 0, 0 },
    0,
    &operand_data[1791],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendhisi2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1793],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendhisi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_zero_extendhisi2,
    &operand_data[1795],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendhisi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1797],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendqihi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_zero_extendqihi2,
    &operand_data[1798],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendqihi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1798],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendqihi2+2",
    { 0, 0, 0 },
    0,
    &operand_data[1798],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendqisi2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1800],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendqisi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_zero_extendqisi2,
    &operand_data[1802],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendqisi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1802],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendqisi2+2",
    { 0, 0, 0 },
    0,
    &operand_data[1802],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendsidi2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1804],
    2,
    0,
    0,
    0
  },
  {
    "zero_extendsidi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_zero_extendsidi2,
    &operand_data[1806],
    2,
    0,
    1,
    0
  },
  {
    "zero_extendsidi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1770],
    1,
    0,
    0,
    0
  },
  {
    "zero_extendsidi2+2",
    { 0, 0, 0 },
    0,
    &operand_data[1808],
    2,
    0,
    0,
    0
  },
  {
    "extendsidi2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1810],
    2,
    0,
    0,
    0
  },
  {
    "extendsidi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_extendsidi2,
    &operand_data[1812],
    3,
    0,
    0,
    0
  },
  {
    "extendsidi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1815],
    3,
    0,
    0,
    0
  },
  {
    "extendsidi2+2",
    { 0, 0, 0 },
    0,
    &operand_data[1815],
    3,
    0,
    0,
    0
  },
  {
    "extendsidi2+3",
    { 0, 0, 0 },
    0,
    &operand_data[1812],
    3,
    0,
    0,
    0
  },
  {
    "extendsidi2+4",
    { 0, 0, 0 },
    0,
    &operand_data[1818],
    2,
    0,
    0,
    0
  },
  {
    "extendsidi2+5",
    { 0, 0, 0 },
    0,
    &operand_data[1818],
    2,
    0,
    0,
    0
  },
  {
    "extendsfdf2-4",
    { 0, 0, 0 },
    0,
    &operand_data[1820],
    2,
    0,
    0,
    0
  },
  {
    "extendsfdf2-3",
    { 0, 0, 0 },
    0,
    &operand_data[1820],
    2,
    0,
    0,
    0
  },
  {
    "extendsfdf2-2",
    { 0, 0, 0 },
    0,
    &operand_data[1822],
    2,
    0,
    0,
    0
  },
  {
    "extendsfdf2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1822],
    2,
    0,
    0,
    0
  },
  {
    "extendsfdf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_extendsfdf2,
    &operand_data[1824],
    2,
    0,
    0,
    0
  },
  {
    "extendsfxf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_extendsfxf2,
    &operand_data[1826],
    2,
    0,
    0,
    0
  },
  {
    "extenddfxf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_extenddfxf2,
    &operand_data[1828],
    2,
    0,
    0,
    0
  },
  {
    "truncdfsf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_truncdfsf2,
    &operand_data[1830],
    2,
    1,
    0,
    0
  },
  {
    "truncdfsf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1832],
    3,
    0,
    0,
    0
  },
  {
    "truncdfsf2+2",
    { 0, 0, 0 },
    0,
    &operand_data[1835],
    3,
    0,
    0,
    0
  },
  {
    "truncxfsf2-2",
    { 0, 0, 0 },
    0,
    &operand_data[1835],
    2,
    0,
    0,
    0
  },
  {
    "truncxfsf2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1838],
    3,
    0,
    0,
    0
  },
  {
    "truncxfsf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_truncxfsf2,
    &operand_data[1841],
    2,
    1,
    0,
    0
  },
  {
    "truncxfsf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1843],
    3,
    0,
    0,
    0
  },
  {
    "truncxfdf2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1846],
    3,
    0,
    0,
    0
  },
  {
    "truncxfdf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_truncxfdf2,
    &operand_data[1849],
    2,
    1,
    0,
    0
  },
  {
    "truncxfdf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1851],
    3,
    0,
    0,
    0
  },
  {
    "fix_truncxfdi2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1854],
    3,
    0,
    0,
    0
  },
  {
    "fix_truncxfdi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_fix_truncxfdi2,
    &operand_data[1857],
    2,
    0,
    0,
    0
  },
  {
    "fix_truncdfdi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_fix_truncdfdi2,
    &operand_data[1859],
    2,
    0,
    0,
    0
  },
  {
    "fix_truncsfdi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_fix_truncsfdi2,
    &operand_data[1861],
    2,
    0,
    0,
    0
  },
  {
    "fix_truncsfdi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1863],
    2,
    0,
    0,
    0
  },
  {
    "fix_truncsfdi2+2",
    { 0, 0, 0 },
    0,
    &operand_data[1865],
    6,
    0,
    0,
    0
  },
  {
    "fix_truncsfdi2+3",
    { 0, 0, 0 },
    0,
    &operand_data[1871],
    6,
    0,
    0,
    0
  },
  {
    "fix_truncxfsi2-2",
    { 0, 0, 0 },
    0,
    &operand_data[1877],
    3,
    0,
    0,
    0
  },
  {
    "fix_truncxfsi2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1880],
    3,
    0,
    0,
    0
  },
  {
    "fix_truncxfsi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_fix_truncxfsi2,
    &operand_data[1883],
    2,
    0,
    0,
    0
  },
  {
    "fix_truncdfsi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_fix_truncdfsi2,
    &operand_data[1885],
    2,
    0,
    0,
    0
  },
  {
    "fix_truncsfsi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_fix_truncsfsi2,
    &operand_data[1887],
    2,
    0,
    0,
    0
  },
  {
    "fix_truncsfsi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1889],
    2,
    0,
    0,
    0
  },
  {
    "fix_truncsfsi2+2",
    { 0, 0, 0 },
    0,
    &operand_data[1891],
    3,
    0,
    0,
    0
  },
  {
    "fix_truncsfsi2+3",
    { 0, 0, 0 },
    0,
    &operand_data[1894],
    3,
    0,
    0,
    0
  },
  {
    "fix_truncxfhi2-2",
    { 0, 0, 0 },
    0,
    &operand_data[1897],
    5,
    0,
    0,
    0
  },
  {
    "fix_truncxfhi2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1901],
    5,
    0,
    0,
    0
  },
  {
    "fix_truncxfhi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_fix_truncxfhi2,
    &operand_data[1906],
    2,
    0,
    0,
    0
  },
  {
    "fix_truncdfhi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_fix_truncdfhi2,
    &operand_data[1908],
    2,
    0,
    0,
    0
  },
  {
    "fix_truncsfhi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_fix_truncsfhi2,
    &operand_data[1910],
    2,
    0,
    0,
    0
  },
  {
    "fix_truncsfhi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1912],
    2,
    0,
    0,
    0
  },
  {
    "fix_truncsfhi2+2",
    { 0, 0, 0 },
    0,
    &operand_data[1914],
    5,
    0,
    0,
    0
  },
  {
    "floathisf2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1919],
    5,
    0,
    0,
    0
  },
  {
    "floathisf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_floathisf2,
    &operand_data[1911],
    2,
    0,
    0,
    0
  },
  {
    "floatsisf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_floatsisf2,
    &operand_data[1888],
    2,
    0,
    0,
    0
  },
  {
    "floatsisf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1888],
    2,
    0,
    0,
    0
  },
  {
    "floatdisf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_floatdisf2,
    &operand_data[1862],
    2,
    0,
    0,
    0
  },
  {
    "floatdisf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1862],
    2,
    0,
    0,
    0
  },
  {
    "floathidf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_floathidf2,
    &operand_data[1909],
    2,
    0,
    0,
    0
  },
  {
    "floatsidf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_floatsidf2,
    &operand_data[1886],
    2,
    0,
    0,
    0
  },
  {
    "floatdidf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_floatdidf2,
    &operand_data[1860],
    2,
    0,
    0,
    0
  },
  {
    "floatdidf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1924],
    2,
    0,
    0,
    0
  },
  {
    "floatunssisf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_floatunssisf2,
    &operand_data[1754],
    2,
    0,
    0,
    0
  },
  {
    "floatunsdisf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_floatunsdisf2,
    &operand_data[1926],
    2,
    0,
    0,
    0
  },
  {
    "floatunsdidf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_floatunsdidf2,
    &operand_data[1928],
    2,
    0,
    0,
    0
  },
  {
    "vec_setv2df",
    { 0, 0, 0 },
    (insn_gen_fn) gen_vec_setv2df,
    &operand_data[1930],
    3,
    0,
    0,
    0
  },
  {
    "vec_extractv2df",
    { 0, 0, 0 },
    (insn_gen_fn) gen_vec_extractv2df,
    &operand_data[1933],
    3,
    0,
    0,
    0
  },
  {
    "vec_initv2df",
    { 0, 0, 0 },
    (insn_gen_fn) gen_vec_initv2df,
    &operand_data[1936],
    2,
    0,
    0,
    0
  },
  {
    "vec_setv4sf",
    { 0, 0, 0 },
    (insn_gen_fn) gen_vec_setv4sf,
    &operand_data[1938],
    3,
    0,
    0,
    0
  },
  {
    "vec_extractv4sf",
    { 0, 0, 0 },
    (insn_gen_fn) gen_vec_extractv4sf,
    &operand_data[1941],
    3,
    0,
    0,
    0
  },
  {
    "vec_initv4sf",
    { 0, 0, 0 },
    (insn_gen_fn) gen_vec_initv4sf,
    &operand_data[1944],
    2,
    0,
    0,
    0
  },
  {
    "adddi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_adddi3,
    &operand_data[1946],
    3,
    0,
    0,
    0
  },
  {
    "adddi3+1",
    { 0, 0, 0 },
    0,
    &operand_data[1949],
    3,
    0,
    0,
    0
  },
  {
    "addsi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_addsi3,
    &operand_data[1952],
    3,
    0,
    0,
    0
  },
  {
    "addsi3+1",
    { 0, 0, 0 },
    0,
    &operand_data[1955],
    4,
    0,
    0,
    0
  },
  {
    "addsi3+2",
    { 0, 0, 0 },
    0,
    &operand_data[1959],
    4,
    0,
    0,
    0
  },
  {
    "addsi3+3",
    { 0, 0, 0 },
    0,
    &operand_data[1963],
    4,
    0,
    0,
    0
  },
  {
    "addsi3+4",
    { 0, 0, 0 },
    0,
    &operand_data[1967],
    4,
    0,
    0,
    0
  },
  {
    "addsi3+5",
    { 0, 0, 0 },
    0,
    &operand_data[1971],
    5,
    0,
    0,
    0
  },
  {
    "addhi3-4",
    { 0, 0, 0 },
    0,
    &operand_data[1976],
    5,
    0,
    0,
    0
  },
  {
    "addhi3-3",
    { 0, 0, 0 },
    0,
    &operand_data[1981],
    3,
    0,
    0,
    0
  },
  {
    "addhi3-2",
    { 0, 0, 0 },
    0,
    &operand_data[1984],
    3,
    0,
    0,
    0
  },
  {
    "addhi3-1",
    { 0, 0, 0 },
    0,
    &operand_data[1987],
    3,
    0,
    0,
    0
  },
  {
    "addhi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_addhi3,
    &operand_data[1990],
    3,
    0,
    0,
    0
  },
  {
    "addqi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_addqi3,
    &operand_data[1993],
    3,
    0,
    0,
    0
  },
  {
    "addxf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_addxf3,
    &operand_data[1996],
    3,
    0,
    0,
    0
  },
  {
    "adddf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_adddf3,
    &operand_data[1999],
    3,
    0,
    0,
    0
  },
  {
    "addsf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_addsf3,
    &operand_data[2002],
    3,
    0,
    0,
    0
  },
  {
    "subdi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_subdi3,
    &operand_data[1946],
    3,
    0,
    0,
    0
  },
  {
    "subdi3+1",
    { 0, 0, 0 },
    0,
    &operand_data[1949],
    3,
    0,
    0,
    0
  },
  {
    "subsi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_subsi3,
    &operand_data[1952],
    3,
    0,
    0,
    0
  },
  {
    "subhi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_subhi3,
    &operand_data[1990],
    3,
    0,
    0,
    0
  },
  {
    "subqi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_subqi3,
    &operand_data[1993],
    3,
    0,
    0,
    0
  },
  {
    "subxf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_subxf3,
    &operand_data[1996],
    3,
    0,
    0,
    0
  },
  {
    "subdf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_subdf3,
    &operand_data[1999],
    3,
    0,
    0,
    0
  },
  {
    "subsf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_subsf3,
    &operand_data[2002],
    3,
    0,
    0,
    0
  },
  {
    "muldi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_muldi3,
    &operand_data[2005],
    3,
    0,
    0,
    0
  },
  {
    "mulsi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_mulsi3,
    &operand_data[2008],
    3,
    0,
    0,
    0
  },
  {
    "mulhi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_mulhi3,
    &operand_data[2011],
    3,
    0,
    0,
    0
  },
  {
    "mulqi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_mulqi3,
    &operand_data[2014],
    3,
    0,
    0,
    0
  },
  {
    "umulqihi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_umulqihi3,
    &operand_data[2017],
    3,
    0,
    0,
    0
  },
  {
    "mulqihi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_mulqihi3,
    &operand_data[2017],
    3,
    0,
    0,
    0
  },
  {
    "umulditi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_umulditi3,
    &operand_data[2020],
    3,
    0,
    0,
    0
  },
  {
    "umulsidi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_umulsidi3,
    &operand_data[2022],
    3,
    0,
    0,
    0
  },
  {
    "mulditi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_mulditi3,
    &operand_data[2020],
    3,
    0,
    0,
    0
  },
  {
    "mulsidi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_mulsidi3,
    &operand_data[2022],
    3,
    0,
    0,
    0
  },
  {
    "umuldi3_highpart",
    { 0, 0, 0 },
    (insn_gen_fn) gen_umuldi3_highpart,
    &operand_data[2025],
    4,
    0,
    0,
    0
  },
  {
    "umulsi3_highpart",
    { 0, 0, 0 },
    (insn_gen_fn) gen_umulsi3_highpart,
    &operand_data[2029],
    4,
    0,
    0,
    0
  },
  {
    "smuldi3_highpart",
    { 0, 0, 0 },
    (insn_gen_fn) gen_smuldi3_highpart,
    &operand_data[2033],
    4,
    0,
    1,
    0
  },
  {
    "smulsi3_highpart",
    { 0, 0, 0 },
    (insn_gen_fn) gen_smulsi3_highpart,
    &operand_data[2029],
    4,
    0,
    0,
    0
  },
  {
    "mulxf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_mulxf3,
    &operand_data[1996],
    3,
    0,
    0,
    0
  },
  {
    "muldf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_muldf3,
    &operand_data[1999],
    3,
    0,
    0,
    0
  },
  {
    "mulsf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_mulsf3,
    &operand_data[2002],
    3,
    0,
    0,
    0
  },
  {
    "divxf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_divxf3,
    &operand_data[1996],
    3,
    0,
    0,
    0
  },
  {
    "divdf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_divdf3,
    &operand_data[1999],
    3,
    0,
    0,
    0
  },
  {
    "divsf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_divsf3,
    &operand_data[2002],
    3,
    0,
    0,
    0
  },
  {
    "divmoddi4",
    { 0, 0, 0 },
    (insn_gen_fn) gen_divmoddi4,
    &operand_data[2037],
    4,
    2,
    0,
    0
  },
  {
    "divmoddi4+1",
    { 0, 0, 0 },
    0,
    &operand_data[2037],
    4,
    0,
    0,
    0
  },
  {
    "divmodsi4",
    { 0, 0, 0 },
    (insn_gen_fn) gen_divmodsi4,
    &operand_data[2041],
    4,
    2,
    0,
    0
  },
  {
    "divmodsi4+1",
    { 0, 0, 0 },
    0,
    &operand_data[2041],
    4,
    0,
    0,
    0
  },
  {
    "divmodsi4+2",
    { 0, 0, 0 },
    0,
    &operand_data[2037],
    4,
    0,
    0,
    0
  },
  {
    "udivmodhi4-1",
    { 0, 0, 0 },
    0,
    &operand_data[2041],
    4,
    0,
    0,
    0
  },
  {
    "udivmodhi4",
    { 0, 0, 0 },
    (insn_gen_fn) gen_udivmodhi4,
    &operand_data[2045],
    4,
    4,
    0,
    0
  },
  {
    "testsi_ccno_1",
    { 0, 0, 0 },
    (insn_gen_fn) gen_testsi_ccno_1,
    &operand_data[2049],
    2,
    0,
    0,
    0
  },
  {
    "testqi_ccz_1",
    { 0, 0, 0 },
    (insn_gen_fn) gen_testqi_ccz_1,
    &operand_data[2051],
    2,
    0,
    0,
    0
  },
  {
    "testqi_ext_ccno_0",
    { 0, 0, 0 },
    (insn_gen_fn) gen_testqi_ext_ccno_0,
    &operand_data[2053],
    2,
    0,
    0,
    0
  },
  {
    "testqi_ext_ccno_0+1",
    { 0, 0, 0 },
    0,
    &operand_data[2055],
    3,
    0,
    0,
    0
  },
  {
    "testqi_ext_ccno_0+2",
    { 0, 0, 0 },
    0,
    &operand_data[2058],
    2,
    0,
    0,
    0
  },
  {
    "anddi3-1",
    { 0, 0, 0 },
    0,
    &operand_data[2055],
    2,
    0,
    0,
    0
  },
  {
    "anddi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_anddi3,
    &operand_data[2060],
    3,
    0,
    0,
    0
  },
  {
    "andsi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_andsi3,
    &operand_data[1952],
    3,
    0,
    0,
    0
  },
  {
    "andsi3+1",
    { 0, 0, 0 },
    0,
    &operand_data[1793],
    1,
    0,
    0,
    0
  },
  {
    "andsi3+2",
    { 0, 0, 0 },
    0,
    &operand_data[1746],
    1,
    0,
    0,
    0
  },
  {
    "andhi3-1",
    { 0, 0, 0 },
    0,
    &operand_data[1746],
    1,
    0,
    0,
    0
  },
  {
    "andhi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_andhi3,
    &operand_data[1990],
    3,
    0,
    0,
    0
  },
  {
    "andqi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_andqi3,
    &operand_data[1993],
    3,
    0,
    0,
    0
  },
  {
    "andqi3+1",
    { 0, 0, 0 },
    0,
    &operand_data[2063],
    3,
    0,
    0,
    0
  },
  {
    "iordi3-1",
    { 0, 0, 0 },
    0,
    &operand_data[2066],
    3,
    0,
    0,
    0
  },
  {
    "iordi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_iordi3,
    &operand_data[1946],
    3,
    0,
    0,
    0
  },
  {
    "iorsi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_iorsi3,
    &operand_data[1952],
    3,
    0,
    0,
    0
  },
  {
    "iorhi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_iorhi3,
    &operand_data[1990],
    3,
    0,
    0,
    0
  },
  {
    "iorqi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_iorqi3,
    &operand_data[1993],
    3,
    0,
    0,
    0
  },
  {
    "iorqi3+1",
    { 0, 0, 0 },
    0,
    &operand_data[2063],
    3,
    0,
    0,
    0
  },
  {
    "xordi3-1",
    { 0, 0, 0 },
    0,
    &operand_data[2066],
    3,
    0,
    0,
    0
  },
  {
    "xordi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_xordi3,
    &operand_data[1946],
    3,
    0,
    0,
    0
  },
  {
    "xorsi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_xorsi3,
    &operand_data[1952],
    3,
    0,
    0,
    0
  },
  {
    "xorhi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_xorhi3,
    &operand_data[1990],
    3,
    0,
    0,
    0
  },
  {
    "xorqi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_xorqi3,
    &operand_data[1993],
    3,
    0,
    0,
    0
  },
  {
    "xorqi_cc_ext_1",
    { 0, 0, 0 },
    (insn_gen_fn) gen_xorqi_cc_ext_1,
    &operand_data[2069],
    3,
    2,
    0,
    0
  },
  {
    "xorqi_cc_ext_1+1",
    { 0, 0, 0 },
    0,
    &operand_data[2063],
    3,
    0,
    0,
    0
  },
  {
    "negdi2-1",
    { 0, 0, 0 },
    0,
    &operand_data[2066],
    3,
    0,
    0,
    0
  },
  {
    "negdi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_negdi2,
    &operand_data[1946],
    2,
    0,
    0,
    0
  },
  {
    "negdi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1744],
    2,
    0,
    0,
    0
  },
  {
    "negsi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_negsi2,
    &operand_data[1952],
    2,
    0,
    0,
    0
  },
  {
    "neghi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_neghi2,
    &operand_data[1990],
    2,
    0,
    0,
    0
  },
  {
    "negqi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_negqi2,
    &operand_data[1993],
    2,
    0,
    0,
    0
  },
  {
    "negsf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_negsf2,
    &operand_data[2072],
    2,
    0,
    0,
    0
  },
  {
    "negsf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[2074],
    3,
    0,
    0,
    0
  },
  {
    "negsf2+2",
    { 0, 0, 0 },
    0,
    &operand_data[2077],
    3,
    0,
    0,
    0
  },
  {
    "negsf2+3",
    { 0, 0, 0 },
    0,
    &operand_data[2080],
    3,
    0,
    0,
    0
  },
  {
    "negdf2-3",
    { 0, 0, 0 },
    0,
    &operand_data[2083],
    2,
    0,
    0,
    0
  },
  {
    "negdf2-2",
    { 0, 0, 0 },
    0,
    &operand_data[2085],
    2,
    0,
    0,
    0
  },
  {
    "negdf2-1",
    { 0, 0, 0 },
    0,
    &operand_data[2087],
    2,
    0,
    0,
    0
  },
  {
    "negdf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_negdf2,
    &operand_data[2089],
    2,
    0,
    0,
    0
  },
  {
    "negdf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[2091],
    3,
    0,
    0,
    0
  },
  {
    "negdf2+2",
    { 0, 0, 0 },
    0,
    &operand_data[2094],
    3,
    0,
    0,
    0
  },
  {
    "negdf2+3",
    { 0, 0, 0 },
    0,
    &operand_data[2094],
    3,
    0,
    0,
    0
  },
  {
    "negxf2-3",
    { 0, 0, 0 },
    0,
    &operand_data[2097],
    3,
    0,
    0,
    0
  },
  {
    "negxf2-2",
    { 0, 0, 0 },
    0,
    &operand_data[2100],
    2,
    0,
    0,
    0
  },
  {
    "negxf2-1",
    { 0, 0, 0 },
    0,
    &operand_data[2102],
    2,
    0,
    0,
    0
  },
  {
    "negxf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_negxf2,
    &operand_data[2104],
    2,
    0,
    0,
    0
  },
  {
    "negxf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[2106],
    2,
    0,
    0,
    0
  },
  {
    "abssf2-1",
    { 0, 0, 0 },
    0,
    &operand_data[2108],
    2,
    0,
    0,
    0
  },
  {
    "abssf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_abssf2,
    &operand_data[2072],
    2,
    0,
    0,
    0
  },
  {
    "abssf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[2110],
    3,
    0,
    0,
    0
  },
  {
    "abssf2+2",
    { 0, 0, 0 },
    0,
    &operand_data[2077],
    3,
    0,
    0,
    0
  },
  {
    "abssf2+3",
    { 0, 0, 0 },
    0,
    &operand_data[2080],
    3,
    0,
    0,
    0
  },
  {
    "absdf2-3",
    { 0, 0, 0 },
    0,
    &operand_data[2083],
    2,
    0,
    0,
    0
  },
  {
    "absdf2-2",
    { 0, 0, 0 },
    0,
    &operand_data[2085],
    2,
    0,
    0,
    0
  },
  {
    "absdf2-1",
    { 0, 0, 0 },
    0,
    &operand_data[2087],
    2,
    0,
    0,
    0
  },
  {
    "absdf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_absdf2,
    &operand_data[2089],
    2,
    0,
    0,
    0
  },
  {
    "absdf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[2091],
    3,
    0,
    0,
    0
  },
  {
    "absdf2+2",
    { 0, 0, 0 },
    0,
    &operand_data[2094],
    3,
    0,
    0,
    0
  },
  {
    "absdf2+3",
    { 0, 0, 0 },
    0,
    &operand_data[2097],
    3,
    0,
    0,
    0
  },
  {
    "absxf2-2",
    { 0, 0, 0 },
    0,
    &operand_data[2100],
    2,
    0,
    0,
    0
  },
  {
    "absxf2-1",
    { 0, 0, 0 },
    0,
    &operand_data[2102],
    2,
    0,
    0,
    0
  },
  {
    "absxf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_absxf2,
    &operand_data[2104],
    2,
    0,
    0,
    0
  },
  {
    "absxf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[2106],
    2,
    0,
    0,
    0
  },
  {
    "one_cmpldi2-1",
    { 0, 0, 0 },
    0,
    &operand_data[2108],
    2,
    0,
    0,
    0
  },
  {
    "one_cmpldi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_one_cmpldi2,
    &operand_data[1946],
    2,
    0,
    0,
    0
  },
  {
    "one_cmpldi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1946],
    2,
    0,
    0,
    0
  },
  {
    "one_cmplsi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_one_cmplsi2,
    &operand_data[1952],
    2,
    0,
    0,
    0
  },
  {
    "one_cmplsi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1952],
    2,
    0,
    0,
    0
  },
  {
    "one_cmplhi2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1808],
    2,
    0,
    0,
    0
  },
  {
    "one_cmplhi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_one_cmplhi2,
    &operand_data[1990],
    2,
    0,
    0,
    0
  },
  {
    "one_cmplhi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1990],
    2,
    0,
    0,
    0
  },
  {
    "one_cmplqi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_one_cmplqi2,
    &operand_data[1993],
    2,
    0,
    0,
    0
  },
  {
    "one_cmplqi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[1993],
    2,
    0,
    0,
    0
  },
  {
    "ashldi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_ashldi3,
    &operand_data[2113],
    3,
    0,
    0,
    0
  },
  {
    "ashldi3+1",
    { 0, 0, 0 },
    0,
    &operand_data[2116],
    3,
    0,
    0,
    0
  },
  {
    "ashldi3+2",
    { 0, 0, 0 },
    0,
    &operand_data[2119],
    4,
    0,
    0,
    0
  },
  {
    "x86_shift_adj_1-1",
    { 0, 0, 0 },
    0,
    &operand_data[2119],
    3,
    0,
    0,
    0
  },
  {
    "x86_shift_adj_1",
    { 0, 0, 0 },
    (insn_gen_fn) gen_x86_shift_adj_1,
    &operand_data[2123],
    4,
    3,
    1,
    0
  },
  {
    "x86_shift_adj_2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_x86_shift_adj_2,
    &operand_data[2123],
    3,
    0,
    0,
    0
  },
  {
    "ashlsi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_ashlsi3,
    &operand_data[2127],
    3,
    0,
    0,
    0
  },
  {
    "ashlsi3+1",
    { 0, 0, 0 },
    0,
    &operand_data[2130],
    3,
    0,
    0,
    0
  },
  {
    "ashlsi3+2",
    { 0, 0, 0 },
    0,
    &operand_data[2133],
    3,
    0,
    0,
    0
  },
  {
    "ashlhi3-1",
    { 0, 0, 0 },
    0,
    &operand_data[2136],
    3,
    0,
    0,
    0
  },
  {
    "ashlhi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_ashlhi3,
    &operand_data[2139],
    3,
    0,
    0,
    0
  },
  {
    "ashlqi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_ashlqi3,
    &operand_data[2142],
    3,
    0,
    0,
    0
  },
  {
    "ashrdi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_ashrdi3,
    &operand_data[2113],
    3,
    0,
    0,
    0
  },
  {
    "ashrdi3+1",
    { 0, 0, 0 },
    0,
    &operand_data[2119],
    4,
    0,
    0,
    0
  },
  {
    "x86_shift_adj_3-1",
    { 0, 0, 0 },
    0,
    &operand_data[2119],
    3,
    0,
    0,
    0
  },
  {
    "x86_shift_adj_3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_x86_shift_adj_3,
    &operand_data[2123],
    3,
    0,
    0,
    0
  },
  {
    "ashrsi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_ashrsi3,
    &operand_data[2127],
    3,
    0,
    0,
    0
  },
  {
    "ashrhi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_ashrhi3,
    &operand_data[2139],
    3,
    0,
    0,
    0
  },
  {
    "ashrqi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_ashrqi3,
    &operand_data[2142],
    3,
    0,
    0,
    0
  },
  {
    "lshrdi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_lshrdi3,
    &operand_data[2113],
    3,
    0,
    0,
    0
  },
  {
    "lshrdi3+1",
    { 0, 0, 0 },
    0,
    &operand_data[2119],
    4,
    0,
    0,
    0
  },
  {
    "lshrsi3-1",
    { 0, 0, 0 },
    0,
    &operand_data[2119],
    3,
    0,
    0,
    0
  },
  {
    "lshrsi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_lshrsi3,
    &operand_data[2127],
    3,
    0,
    0,
    0
  },
  {
    "lshrhi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_lshrhi3,
    &operand_data[2139],
    3,
    0,
    0,
    0
  },
  {
    "lshrqi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_lshrqi3,
    &operand_data[2142],
    3,
    0,
    0,
    0
  },
  {
    "rotldi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_rotldi3,
    &operand_data[2145],
    3,
    0,
    0,
    0
  },
  {
    "rotlsi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_rotlsi3,
    &operand_data[2127],
    3,
    0,
    0,
    0
  },
  {
    "rotlhi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_rotlhi3,
    &operand_data[2139],
    3,
    0,
    0,
    0
  },
  {
    "rotlqi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_rotlqi3,
    &operand_data[2142],
    3,
    0,
    0,
    0
  },
  {
    "rotrdi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_rotrdi3,
    &operand_data[2145],
    3,
    0,
    0,
    0
  },
  {
    "rotrsi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_rotrsi3,
    &operand_data[2127],
    3,
    0,
    0,
    0
  },
  {
    "rotrhi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_rotrhi3,
    &operand_data[2139],
    3,
    0,
    0,
    0
  },
  {
    "rotrqi3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_rotrqi3,
    &operand_data[2142],
    3,
    0,
    0,
    0
  },
  {
    "extv",
    { 0, 0, 0 },
    (insn_gen_fn) gen_extv,
    &operand_data[2148],
    4,
    0,
    0,
    0
  },
  {
    "extzv",
    { 0, 0, 0 },
    (insn_gen_fn) gen_extzv,
    &operand_data[2152],
    4,
    0,
    0,
    0
  },
  {
    "insv",
    { 0, 0, 0 },
    (insn_gen_fn) gen_insv,
    &operand_data[2156],
    4,
    0,
    0,
    0
  },
  {
    "seq",
    { 0, 0, 0 },
    (insn_gen_fn) gen_seq,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sne",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sne,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sgt",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sgt,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sgtu",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sgtu,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "slt",
    { 0, 0, 0 },
    (insn_gen_fn) gen_slt,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sltu",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sltu,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sge",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sge,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sgeu",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sgeu,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sle",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sle,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sleu",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sleu,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sunordered",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sunordered,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sordered",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sordered,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "suneq",
    { 0, 0, 0 },
    (insn_gen_fn) gen_suneq,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sunge",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sunge,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sungt",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sungt,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sunle",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sunle,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sunlt",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sunlt,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sltgt",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sltgt,
    &operand_data[1801],
    1,
    0,
    0,
    0
  },
  {
    "sltgt+1",
    { 0, 0, 0 },
    0,
    &operand_data[2160],
    2,
    0,
    0,
    0
  },
  {
    "sltgt+2",
    { 0, 0, 0 },
    0,
    &operand_data[2162],
    2,
    0,
    0,
    0
  },
  {
    "beq-2",
    { 0, 0, 0 },
    0,
    &operand_data[2160],
    2,
    0,
    0,
    0
  },
  {
    "beq-1",
    { 0, 0, 0 },
    0,
    &operand_data[2162],
    2,
    0,
    0,
    0
  },
  {
    "beq",
    { 0, 0, 0 },
    (insn_gen_fn) gen_beq,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bne",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bne,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bgt",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bgt,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bgtu",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bgtu,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "blt",
    { 0, 0, 0 },
    (insn_gen_fn) gen_blt,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bltu",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bltu,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bge",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bge,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bgeu",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bgeu,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "ble",
    { 0, 0, 0 },
    (insn_gen_fn) gen_ble,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bleu",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bleu,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bunordered",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bunordered,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bordered",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bordered,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "buneq",
    { 0, 0, 0 },
    (insn_gen_fn) gen_buneq,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bunge",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bunge,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bungt",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bungt,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bunle",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bunle,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bunlt",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bunlt,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bltgt",
    { 0, 0, 0 },
    (insn_gen_fn) gen_bltgt,
    &operand_data[849],
    1,
    1,
    0,
    0
  },
  {
    "bltgt+1",
    { 0, 0, 0 },
    0,
    &operand_data[2163],
    2,
    0,
    0,
    0
  },
  {
    "bltgt+2",
    { 0, 0, 0 },
    0,
    &operand_data[2163],
    2,
    0,
    0,
    0
  },
  {
    "indirect_jump-2",
    { 0, 0, 0 },
    0,
    &operand_data[2165],
    5,
    0,
    0,
    0
  },
  {
    "indirect_jump-1",
    { 0, 0, 0 },
    0,
    &operand_data[2165],
    6,
    0,
    0,
    0
  },
  {
    "indirect_jump",
    { 0, 0, 0 },
    (insn_gen_fn) gen_indirect_jump,
    &operand_data[591],
    1,
    0,
    1,
    0
  },
  {
    "tablejump",
    { 0, 0, 0 },
    (insn_gen_fn) gen_tablejump,
    &operand_data[2171],
    2,
    0,
    1,
    0
  },
  {
    "doloop_end",
    { 0, 0, 0 },
    (insn_gen_fn) gen_doloop_end,
    &operand_data[2172],
    5,
    0,
    0,
    0
  },
  {
    "doloop_end+1",
    { 0, 0, 0 },
    0,
    &operand_data[2176],
    3,
    0,
    0,
    0
  },
  {
    "doloop_end+2",
    { 0, 0, 0 },
    0,
    &operand_data[2179],
    4,
    0,
    0,
    0
  },
  {
    "call_pop-2",
    { 0, 0, 0 },
    0,
    &operand_data[2183],
    4,
    0,
    0,
    0
  },
  {
    "call_pop-1",
    { 0, 0, 0 },
    0,
    &operand_data[2183],
    4,
    0,
    0,
    0
  },
  {
    "call_pop",
    { 0, 0, 0 },
    (insn_gen_fn) gen_call_pop,
    &operand_data[2187],
    4,
    0,
    0,
    0
  },
  {
    "call",
    { 0, 0, 0 },
    (insn_gen_fn) gen_call,
    &operand_data[2191],
    3,
    0,
    0,
    0
  },
  {
    "sibcall",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sibcall,
    &operand_data[2191],
    3,
    0,
    0,
    0
  },
  {
    "call_value_pop",
    { 0, 0, 0 },
    (insn_gen_fn) gen_call_value_pop,
    &operand_data[2193],
    5,
    0,
    0,
    0
  },
  {
    "call_value",
    { 0, 0, 0 },
    (insn_gen_fn) gen_call_value,
    &operand_data[2198],
    4,
    0,
    0,
    0
  },
  {
    "sibcall_value",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sibcall_value,
    &operand_data[2198],
    4,
    0,
    0,
    0
  },
  {
    "untyped_call",
    { 0, 0, 0 },
    (insn_gen_fn) gen_untyped_call,
    &operand_data[2172],
    3,
    0,
    0,
    0
  },
  {
    "return",
    { 0, 0, 0 },
    (insn_gen_fn) gen_return,
    &operand_data[0],
    0,
    0,
    0,
    0
  },
  {
    "prologue",
    { 0, 0, 0 },
    (insn_gen_fn) gen_prologue,
    &operand_data[0],
    0,
    0,
    0,
    0
  },
  {
    "epilogue",
    { 0, 0, 0 },
    (insn_gen_fn) gen_epilogue,
    &operand_data[0],
    0,
    0,
    0,
    0
  },
  {
    "sibcall_epilogue",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sibcall_epilogue,
    &operand_data[0],
    0,
    0,
    0,
    0
  },
  {
    "eh_return",
    { 0, 0, 0 },
    (insn_gen_fn) gen_eh_return,
    &operand_data[1793],
    1,
    0,
    0,
    0
  },
  {
    "eh_return+1",
    { 0, 0, 0 },
    0,
    &operand_data[1755],
    1,
    0,
    0,
    0
  },
  {
    "ffssi2-1",
    { 0, 0, 0 },
    0,
    &operand_data[1808],
    1,
    0,
    0,
    0
  },
  {
    "ffssi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_ffssi2,
    &operand_data[2180],
    3,
    0,
    0,
    0
  },
  {
    "ffssi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[2180],
    3,
    0,
    0,
    0
  },
  {
    "ffsdi2-1",
    { 0, 0, 0 },
    0,
    &operand_data[2202],
    3,
    0,
    0,
    0
  },
  {
    "ffsdi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_ffsdi2,
    &operand_data[2205],
    3,
    0,
    0,
    0
  },
  {
    "ffsdi2+1",
    { 0, 0, 0 },
    0,
    &operand_data[2205],
    3,
    0,
    0,
    0
  },
  {
    "clzsi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_clzsi2,
    &operand_data[1755],
    2,
    2,
    0,
    0
  },
  {
    "clzdi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_clzdi2,
    &operand_data[2025],
    2,
    2,
    0,
    0
  },
  {
    "tls_global_dynamic_32",
    { 0, 0, 0 },
    (insn_gen_fn) gen_tls_global_dynamic_32,
    &operand_data[2208],
    6,
    2,
    0,
    0
  },
  {
    "tls_global_dynamic_64",
    { 0, 0, 0 },
    (insn_gen_fn) gen_tls_global_dynamic_64,
    &operand_data[2214],
    2,
    1,
    0,
    0
  },
  {
    "tls_local_dynamic_base_32",
    { 0, 0, 0 },
    (insn_gen_fn) gen_tls_local_dynamic_base_32,
    &operand_data[2216],
    5,
    2,
    0,
    0
  },
  {
    "tls_local_dynamic_base_64",
    { 0, 0, 0 },
    (insn_gen_fn) gen_tls_local_dynamic_base_64,
    &operand_data[1808],
    1,
    1,
    0,
    0
  },
  {
    "tls_local_dynamic_base_64+1",
    { 0, 0, 0 },
    0,
    &operand_data[2221],
    6,
    0,
    0,
    0
  },
  {
    "tls_local_dynamic_base_64+2",
    { 0, 0, 0 },
    0,
    &operand_data[2227],
    4,
    0,
    0,
    0
  },
  {
    "sqrtsf2-1",
    { 0, 0, 0 },
    0,
    &operand_data[2231],
    4,
    0,
    0,
    0
  },
  {
    "sqrtsf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sqrtsf2,
    &operand_data[2003],
    2,
    0,
    0,
    0
  },
  {
    "sqrtdf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sqrtdf2,
    &operand_data[2000],
    2,
    0,
    0,
    0
  },
  {
    "fmodsf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_fmodsf3,
    &operand_data[2235],
    3,
    0,
    0,
    0
  },
  {
    "fmoddf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_fmoddf3,
    &operand_data[2238],
    3,
    0,
    0,
    0
  },
  {
    "fmodxf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_fmodxf3,
    &operand_data[1996],
    3,
    0,
    0,
    0
  },
  {
    "dremsf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_dremsf3,
    &operand_data[2235],
    3,
    0,
    0,
    0
  },
  {
    "dremdf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_dremdf3,
    &operand_data[2238],
    3,
    0,
    0,
    0
  },
  {
    "dremxf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_dremxf3,
    &operand_data[1996],
    3,
    0,
    0,
    0
  },
  {
    "dremxf3+1",
    { 0, 0, 0 },
    0,
    &operand_data[2238],
    3,
    0,
    0,
    0
  },
  {
    "dremxf3+2",
    { 0, 0, 0 },
    0,
    &operand_data[2238],
    3,
    0,
    0,
    0
  },
  {
    "dremxf3+3",
    { 0, 0, 0 },
    0,
    &operand_data[2235],
    3,
    0,
    0,
    0
  },
  {
    "dremxf3+4",
    { 0, 0, 0 },
    0,
    &operand_data[2235],
    3,
    0,
    0,
    0
  },
  {
    "dremxf3+5",
    { 0, 0, 0 },
    0,
    &operand_data[2239],
    3,
    0,
    0,
    0
  },
  {
    "tandf2-4",
    { 0, 0, 0 },
    0,
    &operand_data[2239],
    3,
    0,
    0,
    0
  },
  {
    "tandf2-3",
    { 0, 0, 0 },
    0,
    &operand_data[1996],
    3,
    0,
    0,
    0
  },
  {
    "tandf2-2",
    { 0, 0, 0 },
    0,
    &operand_data[1996],
    3,
    0,
    0,
    0
  },
  {
    "tandf2-1",
    { 0, 0, 0 },
    0,
    &operand_data[2242],
    4,
    0,
    0,
    0
  },
  {
    "tandf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_tandf2,
    &operand_data[1999],
    2,
    2,
    0,
    0
  },
  {
    "tandf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[2246],
    4,
    0,
    0,
    0
  },
  {
    "tansf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_tansf2,
    &operand_data[2002],
    2,
    2,
    0,
    0
  },
  {
    "tansf2+1",
    { 0, 0, 0 },
    0,
    &operand_data[2250],
    4,
    0,
    0,
    0
  },
  {
    "tanxf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_tanxf2,
    &operand_data[1996],
    2,
    2,
    0,
    0
  },
  {
    "atan2df3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_atan2df3,
    &operand_data[1058],
    3,
    0,
    1,
    0
  },
  {
    "atandf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_atandf2,
    &operand_data[2254],
    4,
    1,
    0,
    0
  },
  {
    "atan2sf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_atan2sf3,
    &operand_data[1062],
    3,
    0,
    1,
    0
  },
  {
    "atansf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_atansf2,
    &operand_data[2258],
    4,
    1,
    0,
    0
  },
  {
    "atan2xf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_atan2xf3,
    &operand_data[1066],
    3,
    0,
    1,
    0
  },
  {
    "atanxf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_atanxf2,
    &operand_data[2262],
    4,
    1,
    0,
    0
  },
  {
    "asindf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_asindf2,
    &operand_data[2266],
    9,
    13,
    0,
    0
  },
  {
    "asinsf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_asinsf2,
    &operand_data[2275],
    9,
    13,
    0,
    0
  },
  {
    "asinxf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_asinxf2,
    &operand_data[2284],
    7,
    9,
    0,
    0
  },
  {
    "acosdf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_acosdf2,
    &operand_data[2266],
    9,
    13,
    0,
    0
  },
  {
    "acossf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_acossf2,
    &operand_data[2275],
    9,
    13,
    0,
    0
  },
  {
    "acosxf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_acosxf2,
    &operand_data[2284],
    7,
    9,
    0,
    0
  },
  {
    "logsf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_logsf2,
    &operand_data[2291],
    6,
    5,
    0,
    0
  },
  {
    "logdf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_logdf2,
    &operand_data[2297],
    6,
    5,
    0,
    0
  },
  {
    "logxf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_logxf2,
    &operand_data[2262],
    4,
    1,
    0,
    0
  },
  {
    "log10sf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_log10sf2,
    &operand_data[2291],
    6,
    5,
    0,
    0
  },
  {
    "log10df2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_log10df2,
    &operand_data[2297],
    6,
    5,
    0,
    0
  },
  {
    "log10xf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_log10xf2,
    &operand_data[2262],
    4,
    1,
    0,
    0
  },
  {
    "log2sf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_log2sf2,
    &operand_data[2291],
    6,
    5,
    0,
    0
  },
  {
    "log2df2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_log2df2,
    &operand_data[2297],
    6,
    5,
    0,
    0
  },
  {
    "log2xf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_log2xf2,
    &operand_data[2262],
    4,
    1,
    0,
    0
  },
  {
    "log1psf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_log1psf2,
    &operand_data[1996],
    2,
    0,
    0,
    0
  },
  {
    "log1pdf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_log1pdf2,
    &operand_data[1996],
    2,
    0,
    0,
    0
  },
  {
    "log1pxf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_log1pxf2,
    &operand_data[1996],
    2,
    0,
    0,
    0
  },
  {
    "logbsf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_logbsf2,
    &operand_data[2002],
    2,
    6,
    0,
    0
  },
  {
    "logbdf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_logbdf2,
    &operand_data[1999],
    2,
    6,
    0,
    0
  },
  {
    "logbxf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_logbxf2,
    &operand_data[1996],
    2,
    2,
    0,
    0
  },
  {
    "ilogbsi2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_ilogbsi2,
    &operand_data[2303],
    4,
    3,
    0,
    0
  },
  {
    "expsf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_expsf2,
    &operand_data[2002],
    2,
    21,
    0,
    0
  },
  {
    "expdf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_expdf2,
    &operand_data[1999],
    2,
    21,
    0,
    0
  },
  {
    "expxf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_expxf2,
    &operand_data[1996],
    2,
    17,
    0,
    0
  },
  {
    "exp10sf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_exp10sf2,
    &operand_data[2002],
    2,
    21,
    0,
    0
  },
  {
    "exp10df2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_exp10df2,
    &operand_data[1999],
    2,
    21,
    0,
    0
  },
  {
    "exp10xf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_exp10xf2,
    &operand_data[1996],
    2,
    17,
    0,
    0
  },
  {
    "exp2sf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_exp2sf2,
    &operand_data[2002],
    2,
    18,
    0,
    0
  },
  {
    "exp2df2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_exp2df2,
    &operand_data[1999],
    2,
    18,
    0,
    0
  },
  {
    "exp2xf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_exp2xf2,
    &operand_data[1996],
    2,
    16,
    0,
    0
  },
  {
    "expm1df2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_expm1df2,
    &operand_data[1999],
    2,
    30,
    0,
    0
  },
  {
    "expm1sf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_expm1sf2,
    &operand_data[2002],
    2,
    30,
    0,
    0
  },
  {
    "expm1xf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_expm1xf2,
    &operand_data[1996],
    2,
    26,
    0,
    0
  },
  {
    "movstrsi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movstrsi,
    &operand_data[2307],
    4,
    0,
    0,
    0
  },
  {
    "movstrdi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movstrdi,
    &operand_data[2311],
    4,
    0,
    0,
    0
  },
  {
    "strmov",
    { 0, 0, 0 },
    (insn_gen_fn) gen_strmov,
    &operand_data[2315],
    4,
    4,
    0,
    0
  },
  {
    "strmov_singleop",
    { 0, 0, 0 },
    (insn_gen_fn) gen_strmov_singleop,
    &operand_data[2315],
    6,
    0,
    0,
    0
  },
  {
    "rep_mov",
    { 0, 0, 0 },
    (insn_gen_fn) gen_rep_mov,
    &operand_data[2321],
    7,
    1,
    0,
    0
  },
  {
    "clrstrsi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_clrstrsi,
    &operand_data[2328],
    3,
    0,
    0,
    0
  },
  {
    "clrstrdi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_clrstrdi,
    &operand_data[2331],
    3,
    0,
    0,
    0
  },
  {
    "strset",
    { 0, 0, 0 },
    (insn_gen_fn) gen_strset,
    &operand_data[2315],
    3,
    1,
    0,
    0
  },
  {
    "strset_singleop",
    { 0, 0, 0 },
    (insn_gen_fn) gen_strset_singleop,
    &operand_data[2323],
    4,
    0,
    0,
    0
  },
  {
    "rep_stos",
    { 0, 0, 0 },
    (insn_gen_fn) gen_rep_stos,
    &operand_data[2334],
    5,
    1,
    0,
    0
  },
  {
    "cmpstrsi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpstrsi,
    &operand_data[2339],
    5,
    0,
    0,
    0
  },
  {
    "cmpintqi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpintqi,
    &operand_data[1801],
    1,
    4,
    0,
    0
  },
  {
    "cmpstrqi_nz_1",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpstrqi_nz_1,
    &operand_data[2344],
    6,
    1,
    0,
    0
  },
  {
    "cmpstrqi_1",
    { 0, 0, 0 },
    (insn_gen_fn) gen_cmpstrqi_1,
    &operand_data[2344],
    6,
    1,
    0,
    0
  },
  {
    "strlensi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_strlensi,
    &operand_data[2350],
    4,
    0,
    0,
    0
  },
  {
    "strlendi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_strlendi,
    &operand_data[2354],
    4,
    0,
    0,
    0
  },
  {
    "strlenqi_1",
    { 0, 0, 0 },
    (insn_gen_fn) gen_strlenqi_1,
    &operand_data[2358],
    3,
    0,
    0,
    0
  },
  {
    "strlenqi_1+1",
    { 0, 0, 0 },
    0,
    &operand_data[2361],
    9,
    0,
    0,
    0
  },
  {
    "movdicc-1",
    { 0, 0, 0 },
    0,
    &operand_data[2361],
    9,
    0,
    0,
    0
  },
  {
    "movdicc",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movdicc,
    &operand_data[2370],
    4,
    0,
    0,
    0
  },
  {
    "movsicc",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movsicc,
    &operand_data[2374],
    4,
    0,
    0,
    0
  },
  {
    "movhicc",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movhicc,
    &operand_data[2378],
    4,
    0,
    0,
    0
  },
  {
    "movqicc",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movqicc,
    &operand_data[2382],
    4,
    0,
    0,
    0
  },
  {
    "movqicc+1",
    { 0, 0, 0 },
    0,
    &operand_data[2386],
    5,
    0,
    0,
    0
  },
  {
    "movsfcc",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movsfcc,
    &operand_data[2391],
    4,
    0,
    0,
    0
  },
  {
    "movdfcc",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movdfcc,
    &operand_data[2395],
    4,
    0,
    0,
    0
  },
  {
    "movdfcc+1",
    { 0, 0, 0 },
    0,
    &operand_data[2399],
    5,
    0,
    0,
    0
  },
  {
    "movxfcc",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movxfcc,
    &operand_data[2404],
    4,
    0,
    0,
    0
  },
  {
    "minsf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_minsf3,
    &operand_data[2002],
    3,
    2,
    0,
    0
  },
  {
    "minsf3+1",
    { 0, 0, 0 },
    0,
    &operand_data[2408],
    5,
    0,
    0,
    0
  },
  {
    "addqicc",
    { 0, 0, 0 },
    (insn_gen_fn) gen_addqicc,
    &operand_data[2413],
    4,
    0,
    0,
    0
  },
  {
    "addhicc",
    { 0, 0, 0 },
    (insn_gen_fn) gen_addhicc,
    &operand_data[2417],
    4,
    0,
    0,
    0
  },
  {
    "addsicc",
    { 0, 0, 0 },
    (insn_gen_fn) gen_addsicc,
    &operand_data[2421],
    4,
    0,
    0,
    0
  },
  {
    "adddicc",
    { 0, 0, 0 },
    (insn_gen_fn) gen_adddicc,
    &operand_data[2425],
    4,
    0,
    0,
    0
  },
  {
    "adddicc+1",
    { 0, 0, 0 },
    0,
    &operand_data[2429],
    5,
    0,
    0,
    0
  },
  {
    "mindf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_mindf3,
    &operand_data[1999],
    3,
    2,
    0,
    0
  },
  {
    "mindf3+1",
    { 0, 0, 0 },
    0,
    &operand_data[2434],
    5,
    0,
    0,
    0
  },
  {
    "maxsf3-1",
    { 0, 0, 0 },
    0,
    &operand_data[2439],
    5,
    0,
    0,
    0
  },
  {
    "maxsf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_maxsf3,
    &operand_data[2002],
    3,
    2,
    0,
    0
  },
  {
    "maxsf3+1",
    { 0, 0, 0 },
    0,
    &operand_data[2408],
    5,
    0,
    0,
    0
  },
  {
    "maxdf3-1",
    { 0, 0, 0 },
    0,
    &operand_data[2429],
    5,
    0,
    0,
    0
  },
  {
    "maxdf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_maxdf3,
    &operand_data[1999],
    3,
    2,
    0,
    0
  },
  {
    "maxdf3+1",
    { 0, 0, 0 },
    0,
    &operand_data[2434],
    5,
    0,
    0,
    0
  },
  {
    "maxdf3+2",
    { 0, 0, 0 },
    0,
    &operand_data[2439],
    5,
    0,
    0,
    0
  },
  {
    "maxdf3+3",
    { 0, 0, 0 },
    0,
    &operand_data[2444],
    7,
    0,
    0,
    0
  },
  {
    "maxdf3+4",
    { 0, 0, 0 },
    0,
    &operand_data[2451],
    7,
    0,
    0,
    0
  },
  {
    "allocate_stack_worker-3",
    { 0, 0, 0 },
    0,
    &operand_data[2458],
    7,
    0,
    0,
    0
  },
  {
    "allocate_stack_worker-2",
    { 0, 0, 0 },
    0,
    &operand_data[2465],
    6,
    0,
    0,
    0
  },
  {
    "allocate_stack_worker-1",
    { 0, 0, 0 },
    0,
    &operand_data[2471],
    6,
    0,
    0,
    0
  },
  {
    "allocate_stack_worker",
    { 0, 0, 0 },
    (insn_gen_fn) gen_allocate_stack_worker,
    &operand_data[1755],
    1,
    0,
    0,
    0
  },
  {
    "allocate_stack_worker_postreload",
    { 0, 0, 0 },
    (insn_gen_fn) gen_allocate_stack_worker_postreload,
    &operand_data[555],
    1,
    2,
    1,
    0
  },
  {
    "allocate_stack_worker_rex64_postreload",
    { 0, 0, 0 },
    (insn_gen_fn) gen_allocate_stack_worker_rex64_postreload,
    &operand_data[542],
    1,
    2,
    1,
    0
  },
  {
    "allocate_stack",
    { 0, 0, 0 },
    (insn_gen_fn) gen_allocate_stack,
    &operand_data[2477],
    2,
    1,
    1,
    0
  },
  {
    "builtin_setjmp_receiver",
    { 0, 0, 0 },
    (insn_gen_fn) gen_builtin_setjmp_receiver,
    &operand_data[849],
    1,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+1",
    { 0, 0, 0 },
    0,
    &operand_data[2479],
    4,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+2",
    { 0, 0, 0 },
    0,
    &operand_data[2483],
    3,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+3",
    { 0, 0, 0 },
    0,
    &operand_data[2486],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+4",
    { 0, 0, 0 },
    0,
    &operand_data[1984],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+5",
    { 0, 0, 0 },
    0,
    &operand_data[1984],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+6",
    { 0, 0, 0 },
    0,
    &operand_data[2488],
    4,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+7",
    { 0, 0, 0 },
    0,
    &operand_data[2492],
    3,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+8",
    { 0, 0, 0 },
    0,
    &operand_data[2495],
    3,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+9",
    { 0, 0, 0 },
    0,
    &operand_data[2498],
    3,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+10",
    { 0, 0, 0 },
    0,
    &operand_data[2501],
    3,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+11",
    { 0, 0, 0 },
    0,
    &operand_data[2504],
    3,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+12",
    { 0, 0, 0 },
    0,
    &operand_data[2493],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+13",
    { 0, 0, 0 },
    0,
    &operand_data[2502],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+14",
    { 0, 0, 0 },
    0,
    &operand_data[2505],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+15",
    { 0, 0, 0 },
    0,
    &operand_data[2507],
    3,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+16",
    { 0, 0, 0 },
    0,
    &operand_data[2510],
    3,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+17",
    { 0, 0, 0 },
    0,
    &operand_data[2513],
    3,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+18",
    { 0, 0, 0 },
    0,
    &operand_data[2516],
    4,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+19",
    { 0, 0, 0 },
    0,
    &operand_data[1952],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+20",
    { 0, 0, 0 },
    0,
    &operand_data[1990],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+21",
    { 0, 0, 0 },
    0,
    &operand_data[1993],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+22",
    { 0, 0, 0 },
    0,
    &operand_data[1961],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+23",
    { 0, 0, 0 },
    0,
    &operand_data[2520],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+24",
    { 0, 0, 0 },
    0,
    &operand_data[2053],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+25",
    { 0, 0, 0 },
    0,
    &operand_data[2522],
    4,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+26",
    { 0, 0, 0 },
    0,
    &operand_data[2522],
    4,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+27",
    { 0, 0, 0 },
    0,
    &operand_data[2526],
    4,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+28",
    { 0, 0, 0 },
    0,
    &operand_data[2526],
    4,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+29",
    { 0, 0, 0 },
    0,
    &operand_data[1793],
    1,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+30",
    { 0, 0, 0 },
    0,
    &operand_data[2530],
    1,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+31",
    { 0, 0, 0 },
    0,
    &operand_data[1793],
    1,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+32",
    { 0, 0, 0 },
    0,
    &operand_data[1988],
    2,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+33",
    { 0, 0, 0 },
    0,
    &operand_data[2531],
    3,
    0,
    0,
    0
  },
  {
    "builtin_setjmp_receiver+34",
    { 0, 0, 0 },
    0,
    &operand_data[2006],
    2,
    0,
    0,
    0
  },
  {
    "conditional_trap-34",
    { 0, 0, 0 },
    0,
    &operand_data[2423],
    2,
    0,
    0,
    0
  },
  {
    "conditional_trap-33",
    { 0, 0, 0 },
    0,
    &operand_data[2427],
    2,
    0,
    0,
    0
  },
  {
    "conditional_trap-32",
    { 0, 0, 0 },
    0,
    &operand_data[2534],
    3,
    0,
    0,
    0
  },
  {
    "conditional_trap-31",
    { 0, 0, 0 },
    0,
    &operand_data[2494],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-30",
    { 0, 0, 0 },
    0,
    &operand_data[2494],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-29",
    { 0, 0, 0 },
    0,
    &operand_data[2494],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-28",
    { 0, 0, 0 },
    0,
    &operand_data[2494],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-27",
    { 0, 0, 0 },
    0,
    &operand_data[2494],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-26",
    { 0, 0, 0 },
    0,
    &operand_data[2537],
    2,
    0,
    0,
    0
  },
  {
    "conditional_trap-25",
    { 0, 0, 0 },
    0,
    &operand_data[2494],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-24",
    { 0, 0, 0 },
    0,
    &operand_data[2494],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-23",
    { 0, 0, 0 },
    0,
    &operand_data[2537],
    2,
    0,
    0,
    0
  },
  {
    "conditional_trap-22",
    { 0, 0, 0 },
    0,
    &operand_data[2494],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-21",
    { 0, 0, 0 },
    0,
    &operand_data[2539],
    2,
    0,
    0,
    0
  },
  {
    "conditional_trap-20",
    { 0, 0, 0 },
    0,
    &operand_data[2541],
    2,
    0,
    0,
    0
  },
  {
    "conditional_trap-19",
    { 0, 0, 0 },
    0,
    &operand_data[2543],
    2,
    0,
    0,
    0
  },
  {
    "conditional_trap-18",
    { 0, 0, 0 },
    0,
    &operand_data[1755],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-17",
    { 0, 0, 0 },
    0,
    &operand_data[1798],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-16",
    { 0, 0, 0 },
    0,
    &operand_data[1767],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-15",
    { 0, 0, 0 },
    0,
    &operand_data[1767],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-14",
    { 0, 0, 0 },
    0,
    &operand_data[1767],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-13",
    { 0, 0, 0 },
    0,
    &operand_data[1767],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-12",
    { 0, 0, 0 },
    0,
    &operand_data[1767],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-11",
    { 0, 0, 0 },
    0,
    &operand_data[2545],
    2,
    0,
    0,
    0
  },
  {
    "conditional_trap-10",
    { 0, 0, 0 },
    0,
    &operand_data[1767],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-9",
    { 0, 0, 0 },
    0,
    &operand_data[1767],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-8",
    { 0, 0, 0 },
    0,
    &operand_data[2545],
    2,
    0,
    0,
    0
  },
  {
    "conditional_trap-7",
    { 0, 0, 0 },
    0,
    &operand_data[1767],
    1,
    0,
    0,
    0
  },
  {
    "conditional_trap-6",
    { 0, 0, 0 },
    0,
    &operand_data[2547],
    4,
    0,
    0,
    0
  },
  {
    "conditional_trap-5",
    { 0, 0, 0 },
    0,
    &operand_data[2551],
    4,
    0,
    0,
    0
  },
  {
    "conditional_trap-4",
    { 0, 0, 0 },
    0,
    &operand_data[2555],
    4,
    0,
    0,
    0
  },
  {
    "conditional_trap-3",
    { 0, 0, 0 },
    0,
    &operand_data[2559],
    4,
    0,
    0,
    0
  },
  {
    "conditional_trap-2",
    { 0, 0, 0 },
    0,
    &operand_data[2563],
    4,
    0,
    0,
    0
  },
  {
    "conditional_trap-1",
    { 0, 0, 0 },
    0,
    &operand_data[2567],
    4,
    0,
    0,
    0
  },
  {
    "conditional_trap",
    { 0, 0, 0 },
    (insn_gen_fn) gen_conditional_trap,
    &operand_data[1318],
    2,
    1,
    0,
    0
  },
  {
    "conditional_trap+1",
    { 0, 0, 0 },
    0,
    &operand_data[2571],
    2,
    0,
    0,
    0
  },
  {
    "movti-1",
    { 0, 0, 0 },
    0,
    &operand_data[2573],
    2,
    0,
    0,
    0
  },
  {
    "movti",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movti,
    &operand_data[2575],
    2,
    0,
    0,
    0
  },
  {
    "movtf",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movtf,
    &operand_data[2577],
    2,
    0,
    0,
    0
  },
  {
    "movv2df",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movv2df,
    &operand_data[2579],
    2,
    0,
    0,
    0
  },
  {
    "movv8hi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movv8hi,
    &operand_data[2581],
    2,
    0,
    0,
    0
  },
  {
    "movv16qi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movv16qi,
    &operand_data[2583],
    2,
    0,
    0,
    0
  },
  {
    "movv4sf",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movv4sf,
    &operand_data[2585],
    2,
    0,
    0,
    0
  },
  {
    "movv4si",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movv4si,
    &operand_data[2587],
    2,
    0,
    0,
    0
  },
  {
    "movv2di",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movv2di,
    &operand_data[2589],
    2,
    0,
    0,
    0
  },
  {
    "movv2si",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movv2si,
    &operand_data[2591],
    2,
    0,
    0,
    0
  },
  {
    "movv4hi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movv4hi,
    &operand_data[2593],
    2,
    0,
    0,
    0
  },
  {
    "movv8qi",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movv8qi,
    &operand_data[2595],
    2,
    0,
    0,
    0
  },
  {
    "movv2sf",
    { 0, 0, 0 },
    (insn_gen_fn) gen_movv2sf,
    &operand_data[2597],
    2,
    0,
    0,
    0
  },
  {
    "movv2sf+1",
    { 0, 0, 0 },
    0,
    &operand_data[2599],
    2,
    0,
    0,
    0
  },
  {
    "movv2sf+2",
    { 0, 0, 0 },
    0,
    &operand_data[2599],
    2,
    0,
    0,
    0
  },
  {
    "sse_movaps-2",
    { 0, 0, 0 },
    0,
    &operand_data[2601],
    2,
    0,
    0,
    0
  },
  {
    "sse_movaps-1",
    { 0, 0, 0 },
    0,
    &operand_data[2603],
    2,
    0,
    0,
    0
  },
  {
    "sse_movaps",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse_movaps,
    &operand_data[2585],
    2,
    0,
    0,
    0
  },
  {
    "sse_movups",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse_movups,
    &operand_data[2585],
    2,
    0,
    0,
    0
  },
  {
    "sse_loadss",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse_loadss,
    &operand_data[2605],
    2,
    0,
    0,
    0
  },
  {
    "negv4sf2",
    { 0, 0, 0 },
    (insn_gen_fn) gen_negv4sf2,
    &operand_data[2607],
    2,
    1,
    0,
    0
  },
  {
    "sse_andv4sf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse_andv4sf3,
    &operand_data[2609],
    3,
    0,
    0,
    0
  },
  {
    "sse_nandv4sf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse_nandv4sf3,
    &operand_data[2609],
    3,
    0,
    0,
    0
  },
  {
    "sse_iorv4sf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse_iorv4sf3,
    &operand_data[2609],
    3,
    0,
    0,
    0
  },
  {
    "sse_xorv4sf3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse_xorv4sf3,
    &operand_data[2609],
    3,
    0,
    0,
    0
  },
  {
    "sse2_andv2df3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse2_andv2df3,
    &operand_data[2612],
    3,
    0,
    0,
    0
  },
  {
    "sse2_nandv2df3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse2_nandv2df3,
    &operand_data[2612],
    3,
    0,
    0,
    0
  },
  {
    "sse2_iorv2df3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse2_iorv2df3,
    &operand_data[2612],
    3,
    0,
    0,
    0
  },
  {
    "sse2_xorv2df3",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse2_xorv2df3,
    &operand_data[2613],
    3,
    0,
    0,
    0
  },
  {
    "sfence",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sfence,
    &operand_data[0],
    0,
    2,
    0,
    0
  },
  {
    "sse_prologue_save",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse_prologue_save,
    &operand_data[2616],
    4,
    0,
    0,
    0
  },
  {
    "prefetch",
    { 0, 0, 0 },
    (insn_gen_fn) gen_prefetch,
    &operand_data[2620],
    3,
    0,
    0,
    0
  },
  {
    "sse2_loadsd",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse2_loadsd,
    &operand_data[2623],
    2,
    0,
    0,
    0
  },
  {
    "sse2_mfence",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse2_mfence,
    &operand_data[0],
    0,
    2,
    0,
    0
  },
  {
    "sse2_lfence",
    { 0, 0, 0 },
    (insn_gen_fn) gen_sse2_lfence,
    &operand_data[0],
    0,
    2,
    0,
    0
  }
};
const char *
get_insn_name (int code)
{
  if (code == 2147483647)
    return "NOOP_MOVE";
  else
    return insn_data[code].name;
}
extern rtx gen_split_1044 (rtx, rtx *);
extern rtx gen_peephole2_1052 (rtx, rtx *);
extern rtx gen_peephole2_1053 (rtx, rtx *);
extern rtx gen_split_1054 (rtx, rtx *);
extern rtx gen_split_1055 (rtx, rtx *);
extern rtx gen_split_1056 (rtx, rtx *);
extern rtx gen_peephole2_1057 (rtx, rtx *);
extern rtx gen_peephole2_1058 (rtx, rtx *);
extern rtx gen_split_1059 (rtx, rtx *);
extern rtx gen_split_1061 (rtx, rtx *);
extern rtx gen_split_1062 (rtx, rtx *);
extern rtx gen_split_1063 (rtx, rtx *);
extern rtx gen_split_1065 (rtx, rtx *);
extern rtx gen_split_1066 (rtx, rtx *);
extern rtx gen_split_1067 (rtx, rtx *);
extern rtx gen_split_1068 (rtx, rtx *);
extern rtx gen_split_1070 (rtx, rtx *);
extern rtx gen_split_1071 (rtx, rtx *);
extern rtx gen_split_1072 (rtx, rtx *);
extern rtx gen_split_1073 (rtx, rtx *);
extern rtx gen_split_1074 (rtx, rtx *);
extern rtx gen_split_1076 (rtx, rtx *);
extern rtx gen_split_1078 (rtx, rtx *);
extern rtx gen_split_1079 (rtx, rtx *);
extern rtx gen_split_1080 (rtx, rtx *);
extern rtx gen_split_1082 (rtx, rtx *);
extern rtx gen_split_1083 (rtx, rtx *);
extern rtx gen_split_1084 (rtx, rtx *);
extern rtx gen_split_1086 (rtx, rtx *);
extern rtx gen_split_1087 (rtx, rtx *);
extern rtx gen_split_1088 (rtx, rtx *);
extern rtx gen_split_1090 (rtx, rtx *);
extern rtx gen_split_1091 (rtx, rtx *);
extern rtx gen_split_1092 (rtx, rtx *);
extern rtx gen_split_1093 (rtx, rtx *);
extern rtx gen_split_1094 (rtx, rtx *);
extern rtx gen_split_1095 (rtx, rtx *);
extern rtx gen_split_1096 (rtx, rtx *);
extern rtx gen_split_1097 (rtx, rtx *);
extern rtx gen_split_1098 (rtx, rtx *);
extern rtx gen_split_1103 (rtx, rtx *);
extern rtx gen_split_1104 (rtx, rtx *);
extern rtx gen_split_1105 (rtx, rtx *);
extern rtx gen_split_1106 (rtx, rtx *);
extern rtx gen_split_1108 (rtx, rtx *);
extern rtx gen_split_1109 (rtx, rtx *);
extern rtx gen_split_1111 (rtx, rtx *);
extern rtx gen_split_1112 (rtx, rtx *);
extern rtx gen_split_1116 (rtx, rtx *);
extern rtx gen_split_1117 (rtx, rtx *);
extern rtx gen_split_1118 (rtx, rtx *);
extern rtx gen_peephole2_1119 (rtx, rtx *);
extern rtx gen_peephole2_1120 (rtx, rtx *);
extern rtx gen_split_1124 (rtx, rtx *);
extern rtx gen_peephole2_1125 (rtx, rtx *);
extern rtx gen_peephole2_1126 (rtx, rtx *);
extern rtx gen_split_1127 (rtx, rtx *);
extern rtx gen_split_1128 (rtx, rtx *);
extern rtx gen_split_1132 (rtx, rtx *);
extern rtx gen_split_1133 (rtx, rtx *);
extern rtx gen_split_1134 (rtx, rtx *);
extern rtx gen_split_1137 (rtx, rtx *);
extern rtx gen_split_1139 (rtx, rtx *);
extern rtx gen_split_1143 (rtx, rtx *);
extern rtx gen_split_1154 (rtx, rtx *);
extern rtx gen_split_1156 (rtx, rtx *);
extern rtx gen_split_1157 (rtx, rtx *);
extern rtx gen_split_1158 (rtx, rtx *);
extern rtx gen_split_1159 (rtx, rtx *);
extern rtx gen_split_1160 (rtx, rtx *);
extern rtx gen_split_1161 (rtx, rtx *);
extern rtx gen_split_1162 (rtx, rtx *);
extern rtx gen_split_1163 (rtx, rtx *);
extern rtx gen_split_1164 (rtx, rtx *);
extern rtx gen_split_1171 (rtx, rtx *);
extern rtx gen_split_1199 (rtx, rtx *);
extern rtx gen_split_1201 (rtx, rtx *);
extern rtx gen_split_1202 (rtx, rtx *);
extern rtx gen_split_1203 (rtx, rtx *);
extern rtx gen_split_1208 (rtx, rtx *);
extern rtx gen_split_1209 (rtx, rtx *);
extern rtx gen_split_1210 (rtx, rtx *);
extern rtx gen_split_1213 (rtx, rtx *);
extern rtx gen_split_1214 (rtx, rtx *);
extern rtx gen_split_1215 (rtx, rtx *);
extern rtx gen_split_1218 (rtx, rtx *);
extern rtx gen_split_1219 (rtx, rtx *);
extern rtx gen_split_1224 (rtx, rtx *);
extern rtx gen_split_1225 (rtx, rtx *);
extern rtx gen_split_1231 (rtx, rtx *);
extern rtx gen_split_1232 (rtx, rtx *);
extern rtx gen_split_1234 (rtx, rtx *);
extern rtx gen_split_1239 (rtx, rtx *);
extern rtx gen_split_1240 (rtx, rtx *);
extern rtx gen_split_1241 (rtx, rtx *);
extern rtx gen_split_1242 (rtx, rtx *);
extern rtx gen_split_1243 (rtx, rtx *);
extern rtx gen_split_1244 (rtx, rtx *);
extern rtx gen_split_1246 (rtx, rtx *);
extern rtx gen_split_1247 (rtx, rtx *);
extern rtx gen_split_1248 (rtx, rtx *);
extern rtx gen_split_1249 (rtx, rtx *);
extern rtx gen_split_1250 (rtx, rtx *);
extern rtx gen_split_1251 (rtx, rtx *);
extern rtx gen_split_1253 (rtx, rtx *);
extern rtx gen_split_1254 (rtx, rtx *);
extern rtx gen_split_1256 (rtx, rtx *);
extern rtx gen_split_1257 (rtx, rtx *);
extern rtx gen_split_1258 (rtx, rtx *);
extern rtx gen_split_1259 (rtx, rtx *);
extern rtx gen_split_1260 (rtx, rtx *);
extern rtx gen_split_1261 (rtx, rtx *);
extern rtx gen_split_1263 (rtx, rtx *);
extern rtx gen_split_1264 (rtx, rtx *);
extern rtx gen_split_1265 (rtx, rtx *);
extern rtx gen_split_1266 (rtx, rtx *);
extern rtx gen_split_1267 (rtx, rtx *);
extern rtx gen_split_1269 (rtx, rtx *);
extern rtx gen_split_1270 (rtx, rtx *);
extern rtx gen_split_1272 (rtx, rtx *);
extern rtx gen_split_1274 (rtx, rtx *);
extern rtx gen_split_1275 (rtx, rtx *);
extern rtx gen_split_1277 (rtx, rtx *);
extern rtx gen_split_1279 (rtx, rtx *);
extern rtx gen_split_1281 (rtx, rtx *);
extern rtx gen_split_1282 (rtx, rtx *);
extern rtx gen_split_1283 (rtx, rtx *);
extern rtx gen_split_1287 (rtx, rtx *);
extern rtx gen_split_1288 (rtx, rtx *);
extern rtx gen_split_1289 (rtx, rtx *);
extern rtx gen_split_1293 (rtx, rtx *);
extern rtx gen_split_1294 (rtx, rtx *);
extern rtx gen_split_1300 (rtx, rtx *);
extern rtx gen_split_1301 (rtx, rtx *);
extern rtx gen_split_1334 (rtx, rtx *);
extern rtx gen_split_1335 (rtx, rtx *);
extern rtx gen_split_1336 (rtx, rtx *);
extern rtx gen_split_1337 (rtx, rtx *);
extern rtx gen_split_1356 (rtx, rtx *);
extern rtx gen_split_1357 (rtx, rtx *);
extern rtx gen_split_1358 (rtx, rtx *);
extern rtx gen_split_1359 (rtx, rtx *);
extern rtx gen_split_1363 (rtx, rtx *);
extern rtx gen_split_1364 (rtx, rtx *);
extern rtx gen_peephole2_1365 (rtx, rtx *);
extern rtx gen_peephole2_1366 (rtx, rtx *);
extern rtx gen_split_1379 (rtx, rtx *);
extern rtx gen_split_1380 (rtx, rtx *);
extern rtx gen_split_1382 (rtx, rtx *);
extern rtx gen_split_1383 (rtx, rtx *);
extern rtx gen_split_1385 (rtx, rtx *);
extern rtx gen_split_1392 (rtx, rtx *);
extern rtx gen_split_1393 (rtx, rtx *);
extern rtx gen_split_1394 (rtx, rtx *);
extern rtx gen_split_1403 (rtx, rtx *);
extern rtx gen_split_1404 (rtx, rtx *);
extern rtx gen_split_1405 (rtx, rtx *);
extern rtx gen_split_1406 (rtx, rtx *);
extern rtx gen_split_1407 (rtx, rtx *);
extern rtx gen_split_1408 (rtx, rtx *);
extern rtx gen_split_1409 (rtx, rtx *);
extern rtx gen_split_1410 (rtx, rtx *);
extern rtx gen_peephole2_1411 (rtx, rtx *);
extern rtx gen_peephole2_1413 (rtx, rtx *);
extern rtx gen_peephole2_1415 (rtx, rtx *);
extern rtx gen_peephole2_1474 (rtx, rtx *);
extern rtx gen_peephole2_1475 (rtx, rtx *);
extern rtx gen_split_1480 (rtx, rtx *);
extern rtx gen_split_1483 (rtx, rtx *);
extern rtx gen_split_1486 (rtx, rtx *);
extern rtx gen_split_1491 (rtx, rtx *);
extern rtx gen_split_1493 (rtx, rtx *);
extern rtx gen_split_1494 (rtx, rtx *);
extern rtx gen_split_1496 (rtx, rtx *);
extern rtx gen_split_1497 (rtx, rtx *);
extern rtx gen_split_1499 (rtx, rtx *);
extern rtx gen_split_1500 (rtx, rtx *);
extern rtx gen_split_1501 (rtx, rtx *);
extern rtx gen_split_1502 (rtx, rtx *);
extern rtx gen_split_1503 (rtx, rtx *);
extern rtx gen_split_1504 (rtx, rtx *);
extern rtx gen_split_1505 (rtx, rtx *);
extern rtx gen_split_1511 (rtx, rtx *);
extern rtx gen_split_1512 (rtx, rtx *);
extern rtx gen_split_1513 (rtx, rtx *);
extern rtx gen_split_1514 (rtx, rtx *);
extern rtx gen_split_1515 (rtx, rtx *);
extern rtx gen_split_1516 (rtx, rtx *);
extern rtx gen_peephole2_1517 (rtx, rtx *);
extern rtx gen_peephole2_1518 (rtx, rtx *);
extern rtx gen_peephole2_1519 (rtx, rtx *);
extern rtx gen_peephole2_1520 (rtx, rtx *);
extern rtx gen_peephole2_1521 (rtx, rtx *);
extern rtx gen_peephole2_1522 (rtx, rtx *);
extern rtx gen_peephole2_1523 (rtx, rtx *);
extern rtx gen_peephole2_1524 (rtx, rtx *);
extern rtx gen_peephole2_1525 (rtx, rtx *);
extern rtx gen_peephole2_1526 (rtx, rtx *);
extern rtx gen_peephole2_1527 (rtx, rtx *);
extern rtx gen_peephole2_1528 (rtx, rtx *);
extern rtx gen_peephole2_1529 (rtx, rtx *);
extern rtx gen_peephole2_1530 (rtx, rtx *);
extern rtx gen_peephole2_1531 (rtx, rtx *);
extern rtx gen_peephole2_1532 (rtx, rtx *);
extern rtx gen_peephole2_1533 (rtx, rtx *);
extern rtx gen_peephole2_1534 (rtx, rtx *);
extern rtx gen_peephole2_1535 (rtx, rtx *);
extern rtx gen_peephole2_1536 (rtx, rtx *);
extern rtx gen_peephole2_1537 (rtx, rtx *);
extern rtx gen_peephole2_1538 (rtx, rtx *);
extern rtx gen_peephole2_1539 (rtx, rtx *);
extern rtx gen_peephole2_1540 (rtx, rtx *);
extern rtx gen_peephole2_1541 (rtx, rtx *);
extern rtx gen_peephole2_1542 (rtx, rtx *);
extern rtx gen_peephole2_1543 (rtx, rtx *);
extern rtx gen_peephole2_1544 (rtx, rtx *);
extern rtx gen_peephole2_1545 (rtx, rtx *);
extern rtx gen_peephole2_1546 (rtx, rtx *);
extern rtx gen_peephole2_1547 (rtx, rtx *);
extern rtx gen_peephole2_1548 (rtx, rtx *);
extern rtx gen_peephole2_1549 (rtx, rtx *);
extern rtx gen_peephole2_1550 (rtx, rtx *);
extern rtx gen_peephole2_1551 (rtx, rtx *);
extern rtx gen_peephole2_1552 (rtx, rtx *);
extern rtx gen_peephole2_1553 (rtx, rtx *);
extern rtx gen_peephole2_1554 (rtx, rtx *);
extern rtx gen_peephole2_1555 (rtx, rtx *);
extern rtx gen_peephole2_1556 (rtx, rtx *);
extern rtx gen_peephole2_1557 (rtx, rtx *);
extern rtx gen_peephole2_1558 (rtx, rtx *);
extern rtx gen_peephole2_1559 (rtx, rtx *);
extern rtx gen_peephole2_1560 (rtx, rtx *);
extern rtx gen_peephole2_1561 (rtx, rtx *);
extern rtx gen_peephole2_1562 (rtx, rtx *);
extern rtx gen_peephole2_1563 (rtx, rtx *);
extern rtx gen_peephole2_1564 (rtx, rtx *);
extern rtx gen_peephole2_1565 (rtx, rtx *);
extern rtx gen_peephole2_1566 (rtx, rtx *);
extern rtx gen_peephole2_1567 (rtx, rtx *);
extern rtx gen_peephole2_1568 (rtx, rtx *);
extern rtx gen_peephole2_1569 (rtx, rtx *);
extern rtx gen_peephole2_1570 (rtx, rtx *);
extern rtx gen_peephole2_1571 (rtx, rtx *);
extern rtx gen_peephole2_1572 (rtx, rtx *);
extern rtx gen_peephole2_1573 (rtx, rtx *);
extern rtx gen_peephole2_1574 (rtx, rtx *);
extern rtx gen_peephole2_1575 (rtx, rtx *);
extern rtx gen_peephole2_1576 (rtx, rtx *);
extern rtx gen_peephole2_1577 (rtx, rtx *);
extern rtx gen_peephole2_1578 (rtx, rtx *);
extern rtx gen_split_1580 (rtx, rtx *);
extern rtx gen_split_1581 (rtx, rtx *);
extern rtx gen_split_1594 (rtx, rtx *);
extern rtx gen_split_1595 (rtx, rtx *);
extern rtx gen_split_1596 (rtx, rtx *);
extern rtx gen_split_1597 (rtx, rtx *);
static int
recog_1 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case MEM:
      goto L13230;
    case REG:
      goto L13231;
    default:
     break;
   }
 L13109:
  if (register_operand (x1, HImode))
    {
      operands[0] = x1;
      goto L139;
    }
 L13119:
  if (nonimmediate_operand (x1, HImode))
    {
      operands[0] = x1;
      goto L1068;
    }
 L13120:
  if (((enum rtx_code) (x1)->code) == MEM)
    goto L345;
  if (register_operand (x1, HImode))
    {
      operands[0] = x1;
      goto L350;
    }
 L13148:
  if (memory_operand (x1, HImode))
    {
      operands[0] = x1;
      goto L1095;
    }
  goto ret0;
 L13230:
  if (push_operand (x1, HImode))
    {
      operands[0] = x1;
      goto L333;
    }
  goto L13119;
 L333:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_no_elim_operand (x1, HImode))
    {
      operands[1] = x1;
      goto L334;
    }
 L337:
  if (nonmemory_no_elim_operand (x1, HImode))
    {
      operands[1] = x1;
      goto L338;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L334:
  if ((!0))
    {
      return 48;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L337;
 L338:
  if ((0))
    {
      return 49;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L13231:
  if ((((x1)->u.fld[0]).rtint) == 18)
    goto L1099;
  goto L13109;
 L1099:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == HImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 28)
    goto L1100;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13109;
 L1100:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (memory_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L1101;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13109;
 L1101:
  if (((target_flags & 0x00000001)))
    {
      return 161;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13109;
 L139:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == HImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 24)
    goto L140;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L140:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  switch (((enum machine_mode) (x2)->mode))
    {
    case CCFPmode:
      goto L13232;
    case CCFPUmode:
      goto L13233;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L13232:
  switch (((enum rtx_code) (x2)->code))
    {
    case COMPARE:
      goto L154;
    case REG:
      goto L13235;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L154:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case SFmode:
      goto L13236;
    case DFmode:
      goto L13237;
    case XFmode:
      goto L13238;
    default:
      break;
    }
 L141:
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L142;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L13236:
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L155;
    }
  goto L141;
 L155:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L156;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L141;
 L156:
  if (((target_flags & 0x00000001)))
    {
      return 20;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L141;
 L13237:
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L168;
    }
  goto L141;
 L168:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L169;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L141;
 L169:
  if (((target_flags & 0x00000001)))
    {
      return 22;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L141;
 L13238:
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L181;
    }
  goto L141;
 L181:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, XFmode))
    {
      operands[2] = x3;
      goto L182;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L141;
 L182:
  if (((target_flags & 0x00000001)))
    {
      return 24;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L141;
 L142:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const0_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L143;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L143:
  if (((target_flags & 0x00000001)
   && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)))
    {
      return 18;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L13235:
  if ((((x2)->u.fld[0]).rtint) == 18
      && ((target_flags & 0x00000001)))
    {
      return 28;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L13233:
  if (((enum rtx_code) (x2)->code) == COMPARE)
    goto L193;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L193:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L194;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L194:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L195;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L195:
  if (((target_flags & 0x00000001)
   && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)))
    {
      return 26;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13119;
 L1068:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == HImode)
    goto L13239;
 L341:
  if (general_operand (x1, HImode))
    {
      operands[1] = x1;
      goto L342;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13120;
 L13239:
  switch (((enum rtx_code) (x1)->code))
    {
    case FIX:
      goto L1069;
    case PLUS:
      goto L1251;
    case MINUS:
      goto L1969;
    case AND:
      goto L3041;
    case IOR:
      goto L3410;
    case XOR:
      goto L3793;
    case NEG:
      goto L4165;
    case NOT:
      goto L4566;
    case ASHIFT:
      goto L4745;
    case ASHIFTRT:
      goto L5094;
    case LSHIFTRT:
      goto L5432;
    case ROTATE:
      goto L5660;
    case ROTATERT:
      goto L5836;
    default:
     break;
   }
  goto L341;
 L1069:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L1070;
    }
  goto L341;
 L1070:
  if (((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && !reload_completed && !reload_in_progress
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 157;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L1251:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode)
    goto L13252;
  goto L341;
 L13252:
  if (((enum rtx_code) (x2)->code) == PLUS)
    goto L1252;
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L1599;
    }
  goto L341;
 L1252:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x3, HImode))
    {
      operands[3] = x3;
      goto L1253;
    }
  goto L341;
 L1253:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L1254;
    }
  goto L341;
 L1254:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L1255;
    }
  goto L341;
 L1255:
  if ((ix86_binary_operator_ok (PLUS, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 181;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L1599:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L1600;
    }
  goto L341;
 L1600:
  if ((!(x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (PLUS, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 209;
    }
 L1614:
  if (((x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (PLUS, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 210;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L1969:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L1970;
    }
  goto L341;
 L1970:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L1971;
  if (general_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L2105;
    }
  goto L341;
 L1971:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x3, HImode))
    {
      operands[3] = x3;
      goto L1972;
    }
  goto L341;
 L1972:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L1973;
    }
  goto L341;
 L1973:
  if ((ix86_binary_operator_ok (MINUS, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 231;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L2105:
  if ((ix86_binary_operator_ok (MINUS, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 240;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L3041:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L3042;
    }
  goto L341;
 L3042:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L3043;
    }
  goto L341;
 L3043:
  if ((ix86_binary_operator_ok (AND, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 294;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L3410:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L3411;
    }
  goto L341;
 L3411:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L3412;
    }
  goto L341;
 L3412:
  if ((ix86_binary_operator_ok (IOR, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 315;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L3793:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L3794;
    }
  goto L341;
 L3794:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L3795;
    }
  goto L341;
 L3795:
  if ((ix86_binary_operator_ok (XOR, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 337;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L4165:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L4166;
    }
  goto L341;
 L4166:
  if ((ix86_unary_operator_ok (NEG, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 358;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L4566:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L4567;
    }
  goto L341;
 L4567:
  if ((ix86_unary_operator_ok (NOT, HImode, operands)))
    {
      return 398;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L4745:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L4746;
    }
  goto L341;
 L4746:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L4747;
    }
  goto L341;
 L4747:
  if ((!(x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (ASHIFT, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 411;
    }
 L4761:
  if (((x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (ASHIFT, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 412;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L5094:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L5095;
    }
  goto L341;
 L5095:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5096;
    }
 L5109:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5110;
    }
  goto L341;
 L5096:
  if ((ix86_binary_operator_ok (ASHIFTRT, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 435;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5109;
 L5110:
  if ((ix86_binary_operator_ok (ASHIFTRT, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 436;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L5432:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L5433;
    }
  goto L341;
 L5433:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5434;
    }
 L5447:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5448;
    }
  goto L341;
 L5434:
  if ((ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 459;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5447;
 L5448:
  if ((ix86_binary_operator_ok (LSHIFTRT, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 460;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L5660:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L5661;
    }
  goto L341;
 L5661:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5662;
    }
 L5675:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5676;
    }
  goto L341;
 L5662:
  if ((ix86_binary_operator_ok (ROTATE, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 475;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5675;
 L5676:
  if ((ix86_binary_operator_ok (ROTATE, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 476;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L5836:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L5837;
    }
  goto L341;
 L5837:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5838;
    }
 L5851:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5852;
    }
  goto L341;
 L5838:
  if ((ix86_binary_operator_ok (ROTATERT, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 487;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5851;
 L5852:
  if ((ix86_binary_operator_ok (ROTATERT, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 488;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L341;
 L342:
  if ((((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM))
    {
      return 50;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13120;
 L345:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (x86_64_movabs_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L346;
    }
  goto L13148;
 L346:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (nonmemory_operand (x1, HImode))
    {
      operands[1] = x1;
      goto L347;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L347:
  if ((0 && ix86_check_movabs (insn, 0)))
    {
      return 51;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L350:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == HImode)
    goto L13254;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L13254:
  switch (((enum rtx_code) (x1)->code))
    {
    case MEM:
      goto L351;
    case SIGN_EXTRACT:
      goto L429;
    case ZERO_EXTEND:
      goto L679;
    case SIGN_EXTEND:
      goto L814;
    case MULT:
      goto L2239;
    case IF_THEN_ELSE:
      goto L7769;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L351:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (x86_64_movabs_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L352;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L352:
  if ((0 && ix86_check_movabs (insn, 1)))
    {
      return 52;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L429:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ext_register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L430;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L430:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    goto L431;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L431:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    {
      return 64;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L679:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L680;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L680:
  if (((x86_zero_extend_with_and & (1 << ix86_tune)) && !optimize_size)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 105;
    }
 L692:
  if ((!(x86_zero_extend_with_and & (1 << ix86_tune)) || optimize_size)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 106;
    }
 L697:
  if (((!(x86_zero_extend_with_and & (1 << ix86_tune)) || optimize_size) && reload_completed))
    {
      return 107;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L814:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      return 123;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L2239:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode)
    goto L13261;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L13261:
  switch (((enum rtx_code) (x2)->code))
    {
    case ZERO_EXTEND:
      goto L2270;
    case SIGN_EXTEND:
      goto L2288;
    case SUBREG:
    case REG:
    case MEM:
      goto L13260;
    default:
      x1 = (((x0)->u.fld[0]).rtx1);
      goto L13148;
   }
 L13260:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L2240;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L2270:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L2271;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L2271:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L2272;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L2272:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L2273;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L2273:
  if (((x86_qimode_math & (1 << ix86_tune))
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 252;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L2288:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L2289;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L2289:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == SIGN_EXTEND)
    goto L2290;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L2290:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L2291;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L2291:
  if (((x86_qimode_math & (1 << ix86_tune))
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 253;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L2240:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L2241;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L2241:
  if ((((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 250;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L7769:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ix86_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L7770;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L7770:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L7771;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L7771:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L7772;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L7772:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L7773;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L7773:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L7774;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L7774:
  if ((((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM)))
    {
      return 652;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13148;
 L1095:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == HImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 26)
    goto L1096;
  goto ret0;
 L1096:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18
      && ((target_flags & 0x00000001)))
    {
      return 160;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_2 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SImode)
    goto L13280;
 L1318:
  if (no_seg_address_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L1319;
    }
 L1322:
  if (((enum machine_mode) (x1)->mode) == SImode)
    goto L13295;
  goto ret0;
 L13280:
  switch (((enum rtx_code) (x1)->code))
    {
    case MEM:
      goto L322;
    case SIGN_EXTRACT:
      goto L423;
    case ZERO_EXTRACT:
      goto L457;
    case ZERO_EXTEND:
      goto L662;
    case SIGN_EXTEND:
      goto L804;
    case FIX:
      goto L1052;
    case TRUNCATE:
      goto L2407;
    case UNSPEC:
      goto L13298;
    case FFS:
      goto L6393;
    case CTZ:
      goto L6453;
    case MINUS:
      goto L6479;
    case IF_THEN_ELSE:
      goto L7754;
    default:
     break;
   }
  goto L1318;
 L322:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (x86_64_movabs_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L323;
    }
  goto L1318;
 L323:
  if ((0 && ix86_check_movabs (insn, 1)))
    {
      return 46;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L1318;
 L423:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ext_register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L424;
    }
  goto L1318;
 L424:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    goto L425;
  goto L1318;
 L425:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    {
      return 63;
    }
  goto L1318;
 L457:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ext_register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L458;
    }
  goto L1318;
 L458:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    goto L459;
  goto L1318;
 L459:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    {
      return 69;
    }
  goto L1318;
 L662:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case HImode:
      goto L13302;
    case QImode:
      goto L13304;
    default:
      break;
    }
  goto L1318;
 L13302:
  if (register_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L663;
    }
 L13303:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L668;
    }
  goto L1318;
 L663:
  if (((x86_zero_extend_with_and & (1 << ix86_tune)) && !optimize_size)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 103;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13303;
 L668:
  if ((!(x86_zero_extend_with_and & (1 << ix86_tune)) || optimize_size))
    {
      return 104;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L1318;
 L13304:
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L709;
    }
  goto L1318;
 L709:
  if (((x86_zero_extend_with_and & (1 << ix86_tune)) && !optimize_size)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 108;
    }
 L721:
  if ((!(x86_zero_extend_with_and & (1 << ix86_tune)) || optimize_size)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 109;
    }
 L726:
  if (((!(x86_zero_extend_with_and & (1 << ix86_tune)) || optimize_size) && reload_completed))
    {
      return 110;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L1318;
 L804:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case HImode:
      goto L13305;
    case QImode:
      goto L13306;
    default:
      break;
    }
  goto L1318;
 L13305:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      return 121;
    }
  goto L1318;
 L13306:
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      return 124;
    }
  goto L1318;
 L1052:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SFmode:
      goto L13307;
    case DFmode:
      goto L13308;
    default:
      break;
    }
  goto L1318;
 L13307:
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L1053;
    }
  goto L1318;
 L1053:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 155;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L1318;
 L13308:
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L1058;
    }
  goto L1318;
 L1058:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 156;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L1318;
 L2407:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L2408;
  goto L1318;
 L2408:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == MULT)
    goto L2409;
  goto L1318;
 L2409:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == DImode)
    goto L13309;
  goto L1318;
 L13309:
  switch (((enum rtx_code) (x4)->code))
    {
    case ZERO_EXTEND:
      goto L2410;
    case SIGN_EXTEND:
      goto L2487;
    default:
     break;
   }
  goto L1318;
 L2410:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, SImode))
    {
      operands[1] = x5;
      goto L2411;
    }
  goto L1318;
 L2411:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == DImode
      && ((enum rtx_code) (x4)->code) == ZERO_EXTEND)
    goto L2412;
  goto L1318;
 L2412:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, SImode))
    {
      operands[2] = x5;
      goto L2413;
    }
  goto L1318;
 L2413:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (32)]
      && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 259;
    }
  goto L1318;
 L2487:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, SImode))
    {
      operands[1] = x5;
      goto L2488;
    }
  goto L1318;
 L2488:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == DImode
      && ((enum rtx_code) (x4)->code) == SIGN_EXTEND)
    goto L2489;
  goto L1318;
 L2489:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, SImode))
    {
      operands[2] = x5;
      goto L2490;
    }
  goto L1318;
 L2490:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (32)]
      && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 262;
    }
  goto L1318;
 L13298:
  switch ((((((x1)->u.fld[0]).rtvec1))->num_elem))
    {
    case 1:
      goto L13311;
    case 3:
      goto L13312;
    case 2:
      goto L13313;
    default:
      break;
    }
  goto L1318;
 L13311:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 12L:
      goto L6344;
    case 15L:
      goto L6623;
    default:
      break;
    }
  goto L1318;
 L6344:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (x2 == const_int_rtx[64 + (0)]
      && (!0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 530;
    }
  goto L1318;
 L6623:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (x2 == const_int_rtx[64 + (0)]
      && (!0))
    {
      return 551;
    }
  goto L1318;
 L13312:
  if ((((x1)->u.fld[1]).rtint) == 16)
    goto L6515;
  goto L1318;
 L6515:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L6516;
    }
  goto L1318;
 L6516:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (tls_symbolic_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L6517;
    }
  goto L1318;
 L6517:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[2]);
  if (call_insn_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L6518;
    }
  goto L1318;
 L6518:
  if ((!0 && (ix86_tls_dialect == TLS_DIALECT_GNU))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 3;
      return 544;
    }
 L6538:
  if ((!0 && (ix86_tls_dialect == TLS_DIALECT_SUN))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 3;
      return 545;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L1318;
 L13313:
  if ((((x1)->u.fld[1]).rtint) == 17)
    goto L6564;
  goto L1318;
 L6564:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L6565;
    }
  goto L1318;
 L6565:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (call_insn_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L6566;
    }
  goto L1318;
 L6566:
  if ((!0 && (ix86_tls_dialect == TLS_DIALECT_GNU))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 3;
      return 547;
    }
 L6584:
  if ((!0 && (ix86_tls_dialect == TLS_DIALECT_SUN))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 3;
      return 548;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L1318;
 L6393:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L6394;
    }
  goto L1318;
 L6394:
  if ((((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 535;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L1318;
 L6453:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L6454;
    }
  goto L1318;
 L6454:
  if (pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 540;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L1318;
 L6479:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (x2 == const_int_rtx[64 + (31)])
    goto L6480;
  goto L1318;
 L6480:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == CLZ)
    goto L6481;
  goto L1318;
 L6481:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L6482;
    }
  goto L1318;
 L6482:
  if (pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 542;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L1318;
 L7754:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L7755;
    }
 L7760:
  if (ix86_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L7761;
    }
  goto L1318;
 L7755:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (-1)])
    goto L7756;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L7760;
 L7756:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 650;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L7760;
 L7761:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L7762;
  goto L1318;
 L7762:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L7763;
  goto L1318;
 L7763:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L7764;
    }
  goto L1318;
 L7764:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L7765;
    }
  goto L1318;
 L7765:
  if ((((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM)))
    {
      return 651;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L1318;
 L1319:
  if ((!0))
    {
      return 186;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L1322;
 L13295:
  switch (((enum rtx_code) (x1)->code))
    {
    case SUBREG:
      goto L13315;
    case MULT:
      goto L2209;
    case PLUS:
      goto L6613;
    default:
     break;
   }
  goto ret0;
 L13315:
  if ((((x1)->u.fld[1]).rtint) == 0)
    goto L1323;
  goto ret0;
 L1323:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (no_seg_address_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L1324;
    }
  goto ret0;
 L1324:
  if ((0))
    {
      return 187;
    }
  goto ret0;
 L2209:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L2210;
    }
  goto ret0;
 L2210:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L2211;
    }
  goto ret0;
 L2211:
  if ((((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 248;
    }
  goto ret0;
 L6613:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L13316;
  goto ret0;
 L13316:
  if (((enum rtx_code) (x2)->code) == UNSPEC)
    goto L13318;
  goto ret0;
 L13318:
  switch ((((((x2)->u.fld[0]).rtvec1))->num_elem))
    {
    case 2:
      goto L13320;
    case 1:
      goto L13321;
    default:
      break;
    }
  goto ret0;
 L13320:
  if ((((x2)->u.fld[1]).rtint) == 17)
    goto L6614;
  goto ret0;
 L6614:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L6615;
    }
  goto ret0;
 L6615:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (call_insn_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L6616;
    }
  goto ret0;
 L6616:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == CONST)
    goto L6617;
  goto ret0;
 L6617:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == UNSPEC
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x3)->u.fld[1]).rtint) == 6)
    goto L6618;
  goto ret0;
 L6618:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (tls_symbolic_operand (x4, SImode))
    {
      operands[3] = x4;
      goto L6619;
    }
  goto ret0;
 L6619:
  if (pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 3;
      return 550;
    }
  goto ret0;
 L13321:
  if ((((x2)->u.fld[1]).rtint) == 15)
    goto L6637;
  goto ret0;
 L6637:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)])
    goto L6638;
  goto ret0;
 L6638:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L6639;
    }
  goto ret0;
 L6639:
  if ((!0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 552;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_3 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case MEM:
      goto L13266;
    case ZERO_EXTRACT:
      goto L476;
    case SUBREG:
    case REG:
      goto L13114;
    default:
      goto L13115;
   }
 L13114:
  if (register_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L294;
    }
 L13115:
  if (nonimmediate_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L1024;
    }
 L13116:
  if (((enum rtx_code) (x1)->code) == MEM)
    goto L316;
  if (register_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L321;
    }
 L13159:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 19)
    goto L7127;
 L13152:
  if (nonimmediate_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L1477;
    }
  goto ret0;
 L13266:
  if (push_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L250;
    }
  goto L13115;
 L250:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_no_elim_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L251;
    }
 L254:
  if (nonmemory_no_elim_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L255;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13115;
 L251:
  if ((!0))
    {
      return 36;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L254;
 L255:
  if ((0))
    {
      return 37;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13115;
 L476:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ext_register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L477;
    }
  goto ret0;
 L477:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    goto L478;
  goto ret0;
 L478:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    goto L493;
  goto ret0;
 L493:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SImode)
    goto L13267;
 L479:
  if (general_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L480;
    }
  goto ret0;
 L13267:
  switch (((enum rtx_code) (x1)->code))
    {
    case LSHIFTRT:
      goto L494;
    case PLUS:
      goto L1805;
    case AND:
      goto L3134;
    case IOR:
      goto L3539;
    case XOR:
      goto L3877;
    default:
     break;
   }
  goto L479;
 L494:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L495;
    }
  goto L479;
 L495:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    {
      return 74;
    }
  goto L479;
 L1805:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTRACT)
    goto L1806;
  goto L479;
 L1806:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L1807;
    }
  goto L479;
 L1807:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L1808;
  goto L479;
 L1808:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L1864;
  goto L479;
 L1864:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTRACT)
    goto L1865;
  if (general_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L1810;
    }
 L1835:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L1836;
    }
  goto L479;
 L1865:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L1866;
    }
  goto L479;
 L1866:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L1867;
  goto L479;
 L1867:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)]
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 224;
    }
  goto L479;
 L1810:
  if ((!0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 222;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L1835;
 L1836:
  if ((0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 223;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L479;
 L3134:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTRACT)
    goto L3135;
  goto L479;
 L3135:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L3136;
    }
  goto L479;
 L3136:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L3137;
  goto L479;
 L3137:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L3187;
  goto L479;
 L3187:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L13272;
 L3138:
  if (const_int_operand (x2, VOIDmode))
    {
      operands[2] = x2;
      goto L3139;
    }
  goto L479;
 L13272:
  switch (((enum rtx_code) (x2)->code))
    {
    case ZERO_EXTEND:
      goto L3188;
    case ZERO_EXTRACT:
      goto L3246;
    default:
     break;
   }
  goto L3138;
 L3188:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L3189;
    }
 L3216:
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L3217;
    }
  goto L3138;
 L3189:
  if ((!0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 302;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L3216;
 L3217:
  if ((0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 303;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L3138;
 L3246:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L3247;
    }
  goto L3138;
 L3247:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L3248;
  goto L3138;
 L3248:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)]
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 304;
    }
  goto L3138;
 L3139:
  if (pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 300;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L479;
 L3539:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTRACT)
    goto L3540;
  goto L479;
 L3540:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L3541;
    }
  goto L479;
 L3541:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L3542;
  goto L479;
 L3542:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L3570;
  goto L479;
 L3570:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L13274;
 L3543:
  if (const_int_operand (x2, VOIDmode))
    {
      operands[2] = x2;
      goto L3544;
    }
  goto L479;
 L13274:
  switch (((enum rtx_code) (x2)->code))
    {
    case ZERO_EXTEND:
      goto L3571;
    case ZERO_EXTRACT:
      goto L3629;
    default:
     break;
   }
  goto L3543;
 L3571:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L3572;
    }
 L3599:
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L3600;
    }
  goto L3543;
 L3572:
  if ((!0
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 324;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L3599;
 L3600:
  if ((0
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 325;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L3543;
 L3629:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L3630;
    }
  goto L3543;
 L3630:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L3631;
  goto L3543;
 L3631:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)]
      && ((!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 326;
    }
  goto L3543;
 L3544:
  if (((!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 323;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L479;
 L3877:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTRACT)
    goto L3878;
  goto L479;
 L3878:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L3879;
    }
  goto L479;
 L3879:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L3880;
  goto L479;
 L3880:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L3908;
  goto L479;
 L3908:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L13276;
 L3881:
  if (const_int_operand (x2, VOIDmode))
    {
      operands[2] = x2;
      goto L3882;
    }
  goto L479;
 L13276:
  switch (((enum rtx_code) (x2)->code))
    {
    case ZERO_EXTEND:
      goto L3909;
    case ZERO_EXTRACT:
      goto L3967;
    default:
     break;
   }
  goto L3881;
 L3909:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L3910;
    }
 L3937:
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L3938;
    }
  goto L3881;
 L3910:
  if ((!0
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 343;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L3937;
 L3938:
  if ((0
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 344;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L3881;
 L3967:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L3968;
    }
  goto L3881;
 L3968:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L3969;
  goto L3881;
 L3969:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)]
      && ((!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 345;
    }
  goto L3881;
 L3882:
  if (((!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 342;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L479;
 L480:
  if ((!0))
    {
      return 72;
    }
  goto ret0;
 L294:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (const0_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L295;
    }
 L304:
  if (immediate_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L305;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13115;
 L295:
  if ((reload_completed && (!(x86_use_mov0 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 41;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L304;
 L305:
  if ((reload_completed
   && operands[1] == (const_int_rtx[64 -1])
   && ((ix86_tune == PROCESSOR_PENTIUM) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 42;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13115;
 L1024:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SImode)
    goto L13278;
 L308:
  if (general_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L309;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13116;
 L13278:
  switch (((enum rtx_code) (x1)->code))
    {
    case FIX:
      goto L1025;
    case PLUS:
      goto L1269;
    default:
     break;
   }
  goto L308;
 L1025:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L1026;
    }
  goto L308;
 L1026:
  if (((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && !reload_completed && !reload_in_progress
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 152;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L308;
 L1269:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L1270;
  goto L308;
 L1270:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x3, SImode))
    {
      operands[3] = x3;
      goto L1271;
    }
  goto L308;
 L1271:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L1272;
    }
  goto L308;
 L1272:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L1273;
    }
  goto L308;
 L1273:
  if ((ix86_binary_operator_ok (PLUS, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 182;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L308;
 L309:
  if ((((x86_inter_unit_moves & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 43;
    }
 L313:
  if (((!(x86_inter_unit_moves & (1 << ix86_tune)) && !optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 44;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13116;
 L316:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (x86_64_movabs_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L317;
    }
  goto L13152;
 L317:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (nonmemory_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L318;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13152;
 L318:
  if ((0 && ix86_check_movabs (insn, 0)))
    {
      return 45;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13152;
 L321:
  tem = recog_2 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13159;
 L7127:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (x1 == const_int_rtx[64 + (0)])
    {
      return 617;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13152;
 L1477:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SImode)
    goto L13322;
  goto ret0;
 L13322:
  switch (((enum rtx_code) (x1)->code))
    {
    case PLUS:
      goto L1478;
    case MINUS:
      goto L1987;
    case AND:
      goto L2984;
    case IOR:
      goto L3305;
    case XOR:
      goto L3688;
    case NEG:
      goto L4104;
    case NOT:
      goto L4532;
    case ASHIFT:
      goto L4688;
    case ASHIFTRT:
      goto L4950;
    case LSHIFTRT:
      goto L5318;
    case ROTATE:
      goto L5600;
    case ROTATERT:
      goto L5776;
    case FFS:
      goto L6407;
    default:
     break;
   }
  goto ret0;
 L1478:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L1479;
    }
  goto ret0;
 L1479:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L1480;
    }
  goto ret0;
 L1480:
  if ((ix86_binary_operator_ok (PLUS, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 201;
    }
  goto ret0;
 L1987:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L1988;
    }
  goto ret0;
 L1988:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L1989;
  if (general_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L2025;
    }
  goto ret0;
 L1989:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x3, SImode))
    {
      operands[3] = x3;
      goto L1990;
    }
  goto ret0;
 L1990:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L1991;
    }
  goto ret0;
 L1991:
  if ((ix86_binary_operator_ok (MINUS, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 232;
    }
  goto ret0;
 L2025:
  if ((ix86_binary_operator_ok (MINUS, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 234;
    }
  goto ret0;
 L2984:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L2985;
    }
  goto ret0;
 L2985:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L2986;
    }
  goto ret0;
 L2986:
  if ((ix86_binary_operator_ok (AND, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 290;
    }
  goto ret0;
 L3305:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L13336;
  goto ret0;
 L13336:
  switch (((enum rtx_code) (x2)->code))
    {
    case ASHIFT:
      goto L4670;
    case ASHIFTRT:
      goto L4932;
    case SUBREG:
    case REG:
    case MEM:
      goto L13335;
    default:
      goto ret0;
   }
 L13335:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L3306;
    }
  goto ret0;
 L4670:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L4671;
  goto ret0;
 L4671:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4672;
    }
  goto ret0;
 L4672:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L4673;
  goto ret0;
 L4673:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L4674;
    }
  goto ret0;
 L4674:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == QImode
      && ((enum rtx_code) (x3)->code) == MINUS)
    goto L4675;
  goto ret0;
 L4675:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (x4 == const_int_rtx[64 + (32)])
    goto L4676;
  goto ret0;
 L4676:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 406;
    }
  goto ret0;
 L4932:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L4933;
  goto ret0;
 L4933:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4934;
    }
  goto ret0;
 L4934:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ASHIFT)
    goto L4935;
  goto ret0;
 L4935:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L4936;
    }
  goto ret0;
 L4936:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == QImode
      && ((enum rtx_code) (x3)->code) == MINUS)
    goto L4937;
  goto ret0;
 L4937:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (x4 == const_int_rtx[64 + (32)])
    goto L4938;
  goto ret0;
 L4938:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 424;
    }
  goto ret0;
 L3306:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L3307;
    }
  goto ret0;
 L3307:
  if ((ix86_binary_operator_ok (IOR, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 308;
    }
  goto ret0;
 L3688:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L3689;
    }
  goto ret0;
 L3689:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L3690;
    }
  goto ret0;
 L3690:
  if ((ix86_binary_operator_ok (XOR, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 330;
    }
  goto ret0;
 L4104:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L4105;
    }
  goto ret0;
 L4105:
  if ((ix86_unary_operator_ok (NEG, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 354;
    }
  goto ret0;
 L4532:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L4533;
    }
  goto ret0;
 L4533:
  if ((ix86_unary_operator_ok (NOT, SImode, operands)))
    {
      return 394;
    }
  goto ret0;
 L4688:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L4689;
    }
  goto ret0;
 L4689:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L4690;
    }
  goto ret0;
 L4690:
  if ((ix86_binary_operator_ok (ASHIFT, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 407;
    }
  goto ret0;
 L4950:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L4951;
    }
  goto ret0;
 L4951:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT)
    goto L13338;
 L5011:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5012;
    }
  goto ret0;
 L13338:
  if (const_int_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L4952;
    }
 L13339:
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L4982;
    }
  goto L5011;
 L4952:
  if ((((operands[2])->u.hwint[0]) == 31 && ((x86_use_cltd & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 425;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L13339;
 L4982:
  if ((ix86_binary_operator_ok (ASHIFTRT, SImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 427;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5011;
 L5012:
  if ((ix86_binary_operator_ok (ASHIFTRT, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 429;
    }
  goto ret0;
 L5318:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L5319;
    }
  goto ret0;
 L5319:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5320;
    }
 L5349:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5350;
    }
  goto ret0;
 L5320:
  if ((ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 451;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5349;
 L5350:
  if ((ix86_binary_operator_ok (LSHIFTRT, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 453;
    }
  goto ret0;
 L5600:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L5601;
    }
  goto ret0;
 L5601:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5602;
    }
 L5631:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5632;
    }
  goto ret0;
 L5602:
  if ((ix86_binary_operator_ok (ROTATE, SImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 471;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5631;
 L5632:
  if ((ix86_binary_operator_ok (ROTATE, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 473;
    }
  goto ret0;
 L5776:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L5777;
    }
  goto ret0;
 L5777:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5778;
    }
 L5807:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5808;
    }
  goto ret0;
 L5778:
  if ((ix86_binary_operator_ok (ROTATERT, SImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 483;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5807;
 L5808:
  if ((ix86_binary_operator_ok (ROTATERT, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 485;
    }
  goto ret0;
 L6407:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L6408;
    }
  goto ret0;
 L6408:
  if (pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 536;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_4 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[0]).rtx1);
  if (push_operand (x1, QImode))
    {
      operands[0] = x1;
      goto L386;
    }
 L13123:
  if (nonimmediate_operand (x1, QImode))
    {
      operands[0] = x1;
      goto L434;
    }
 L13125:
  if (((enum rtx_code) (x1)->code) == MEM)
    goto L446;
  if (register_operand (x1, QImode))
    {
      operands[0] = x1;
      goto L440;
    }
 L13126:
  if (nonimmediate_operand (x1, QImode))
    {
      operands[0] = x1;
      goto L462;
    }
 L13127:
  if (register_operand (x1, QImode))
    {
      operands[0] = x1;
      goto L469;
    }
  goto ret0;
 L386:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (nonmemory_no_elim_operand (x1, QImode))
    {
      operands[1] = x1;
      goto L387;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13123;
 L387:
  if ((!0))
    {
      return 57;
    }
 L391:
  if ((0))
    {
      return 58;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13123;
 L434:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == QImode
      && ((enum rtx_code) (x1)->code) == SIGN_EXTRACT)
    goto L435;
  if (general_operand (x1, QImode))
    {
      operands[1] = x1;
      goto L395;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13125;
 L435:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ext_register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L436;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13125;
 L436:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    goto L437;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13125;
 L437:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (8)]
      && (!0))
    {
      return 65;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13125;
 L395:
  if ((((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM))
    {
      return 59;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13125;
 L446:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (x86_64_movabs_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L447;
    }
  goto L13126;
 L447:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (nonmemory_operand (x1, QImode))
    {
      operands[1] = x1;
      goto L448;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13126;
 L448:
  if ((0 && ix86_check_movabs (insn, 0)))
    {
      return 67;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13126;
 L440:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == QImode)
    goto L13340;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13126;
 L13340:
  switch (((enum rtx_code) (x1)->code))
    {
    case SIGN_EXTRACT:
      goto L441;
    case MEM:
      goto L452;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13126;
 L441:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ext_register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L442;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13126;
 L442:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    goto L443;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13126;
 L443:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (8)]
      && (0))
    {
      return 66;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13126;
 L452:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (x86_64_movabs_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L453;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13126;
 L453:
  if ((0 && ix86_check_movabs (insn, 1)))
    {
      return 68;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13126;
 L462:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == QImode)
    goto L13342;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L13342:
  switch (((enum rtx_code) (x1)->code))
    {
    case SUBREG:
      goto L13356;
    case PLUS:
      goto L1233;
    case MINUS:
      goto L1951;
    case AND:
      goto L3068;
    case IOR:
      goto L3455;
    case XOR:
      goto L3838;
    case NEG:
      goto L4188;
    case NOT:
      goto L4582;
    case ASHIFT:
      goto L4786;
    case ASHIFTRT:
      goto L5148;
    case LSHIFTRT:
      goto L5486;
    case ROTATE:
      goto L5704;
    case ROTATERT:
      goto L5864;
    case EQ:
    case NE:
    case LE:
    case LT:
    case GE:
    case GT:
    case LEU:
    case LTU:
    case GEU:
    case GTU:
    case UNORDERED:
    case ORDERED:
    case UNLE:
    case UNLT:
    case UNGE:
    case UNGT:
    case LTGT:
    case UNEQ:
      goto L13355;
    default:
      x1 = (((x0)->u.fld[0]).rtx1);
      goto L13127;
   }
 L13355:
  if (ix86_comparison_operator (x1, QImode))
    {
      operands[1] = x1;
      goto L5916;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L13356:
  if ((((x1)->u.fld[1]).rtint) == 0)
    goto L463;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L463:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTRACT)
    goto L464;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L464:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L465;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L465:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L466;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L466:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)]
      && (!0))
    {
      return 70;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L1233:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode)
    goto L13357;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L13357:
  if (((enum rtx_code) (x2)->code) == PLUS)
    goto L1234;
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L1690;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L1234:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x3, QImode))
    {
      operands[3] = x3;
      goto L1235;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L1235:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L1236;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L1236:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L1237;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L1237:
  if ((ix86_binary_operator_ok (PLUS, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 180;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L1690:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L1691;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L1691:
  if ((!(x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (PLUS, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 215;
    }
 L1705:
  if (((x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (PLUS, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 216;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L1951:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L1952;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L1952:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L1953;
  if (general_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L2143;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L1953:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x3, QImode))
    {
      operands[3] = x3;
      goto L1954;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L1954:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L1955;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L1955:
  if ((ix86_binary_operator_ok (MINUS, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 230;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L2143:
  if ((ix86_binary_operator_ok (MINUS, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 243;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L3068:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L3069;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L3069:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L3070;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L3070:
  if ((ix86_binary_operator_ok (AND, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 296;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L3455:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L3456;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L3456:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L3457;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L3457:
  if ((ix86_binary_operator_ok (IOR, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 318;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L3838:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L3839;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L3839:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L3840;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L3840:
  if ((ix86_binary_operator_ok (XOR, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 340;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L4188:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L4189;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L4189:
  if ((ix86_unary_operator_ok (NEG, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 360;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L4582:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L4583;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L4583:
  if ((ix86_unary_operator_ok (NOT, QImode, operands)))
    {
      return 400;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L4786:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L4787;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L4787:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L4788;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L4788:
  if ((!(x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (ASHIFT, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 414;
    }
 L4802:
  if (((x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (ASHIFT, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 415;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5148:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L5149;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5149:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5150;
    }
 L5179:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5180;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5150:
  if ((ix86_binary_operator_ok (ASHIFTRT, QImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 439;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5179;
 L5180:
  if ((ix86_binary_operator_ok (ASHIFTRT, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 441;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5486:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L5487;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5487:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5488;
    }
 L5517:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5518;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5488:
  if ((ix86_binary_operator_ok (LSHIFTRT, QImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 463;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5517;
 L5518:
  if ((ix86_binary_operator_ok (LSHIFTRT, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 465;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5704:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L5705;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5705:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5706;
    }
 L5735:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5736;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5706:
  if ((ix86_binary_operator_ok (ROTATE, QImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 478;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5735;
 L5736:
  if ((ix86_binary_operator_ok (ROTATE, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 480;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5864:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L5865;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5865:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5866;
    }
 L5895:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5896;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5866:
  if ((ix86_binary_operator_ok (ROTATERT, QImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 489;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5895;
 L5896:
  if ((ix86_binary_operator_ok (ROTATERT, QImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 491;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5916:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L5917;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L5917:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    {
      return 493;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13127;
 L469:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == QImode)
    goto L13359;
  goto ret0;
 L13359:
  switch (((enum rtx_code) (x1)->code))
    {
    case SUBREG:
      goto L13364;
    case MULT:
      goto L2253;
    case DIV:
      goto L2529;
    case UDIV:
      goto L2543;
    case IF_THEN_ELSE:
      goto L7778;
    default:
     break;
   }
  goto ret0;
 L13364:
  if ((((x1)->u.fld[1]).rtint) == 0)
    goto L470;
  goto ret0;
 L470:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTRACT)
    goto L471;
  goto ret0;
 L471:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L472;
    }
  goto ret0;
 L472:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L473;
  goto ret0;
 L473:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)]
      && (0))
    {
      return 71;
    }
  goto ret0;
 L2253:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L2254;
    }
  goto ret0;
 L2254:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L2255;
    }
  goto ret0;
 L2255:
  if (((x86_qimode_math & (1 << ix86_tune))
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 251;
    }
  goto ret0;
 L2529:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L2530;
    }
  goto ret0;
 L2530:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L2531;
    }
  goto ret0;
 L2531:
  if (((x86_qimode_math & (1 << ix86_tune)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 264;
    }
  goto ret0;
 L2543:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L2544;
    }
  goto ret0;
 L2544:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L2545;
    }
  goto ret0;
 L2545:
  if (((x86_qimode_math & (1 << ix86_tune)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 265;
    }
  goto ret0;
 L7778:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ix86_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L7779;
    }
  goto ret0;
 L7779:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (flags_reg_operand (x3, VOIDmode))
    {
      operands[4] = x3;
      goto L7780;
    }
  goto ret0;
 L7780:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L7781;
  goto ret0;
 L7781:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L7782;
    }
  goto ret0;
 L7782:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[3] = x2;
      goto L7783;
    }
  goto ret0;
 L7783:
  if ((((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && !(x86_partial_reg_stall & (1 << ix86_tune))))
    {
      return 653;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_5 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case MEM:
      goto L574;
    case ZERO_EXTEND:
      goto L764;
    case SIGN_EXTEND:
      goto L789;
    case FIX:
      goto L1008;
    case TRUNCATE:
      goto L2382;
    case IOR:
      goto L3336;
    case XOR:
      goto L3719;
    case LSHIFTRT:
      goto L4120;
    default:
     break;
   }
  goto ret0;
 L574:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (x86_64_movabs_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L575;
    }
  goto ret0;
 L575:
  if ((0 && ix86_check_movabs (insn, 1)))
    {
      return 86;
    }
  goto ret0;
 L764:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case HImode:
      goto L13380;
    case QImode:
      goto L13381;
    case SImode:
      goto L13382;
    default:
      break;
    }
  goto ret0;
 L13380:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L765;
    }
  goto ret0;
 L765:
  if ((0))
    {
      return 115;
    }
  goto ret0;
 L13381:
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L770;
    }
  goto ret0;
 L770:
  if ((0))
    {
      return 116;
    }
  goto ret0;
 L13382:
  switch (((enum rtx_code) (x2)->code))
    {
    case SIGN_EXTEND:
      goto L809;
    case PLUS:
      goto L1289;
    case SUBREG:
      goto L13392;
    case MINUS:
      goto L2007;
    case MULT:
      goto L2225;
    case TRUNCATE:
      goto L2434;
    case AND:
      goto L3000;
    case IOR:
      goto L3321;
    case XOR:
      goto L3704;
    case NOT:
      goto L4538;
    default:
     break;
   }
  goto ret0;
 L809:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case HImode:
      goto L13393;
    case QImode:
      goto L13394;
    default:
      break;
    }
  goto ret0;
 L13393:
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L810;
    }
  goto ret0;
 L810:
  if ((0))
    {
      return 122;
    }
  goto ret0;
 L13394:
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L824;
    }
  goto ret0;
 L824:
  if ((0))
    {
      return 125;
    }
  goto ret0;
 L1289:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L13395;
  goto ret0;
 L13395:
  switch (((enum rtx_code) (x3)->code))
    {
    case PLUS:
      goto L1290;
    case MULT:
      goto L1365;
    case SUBREG:
    case REG:
    case MEM:
      goto L13397;
    default:
      goto ret0;
   }
 L13397:
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L1495;
    }
  goto ret0;
 L1290:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode)
    goto L13400;
  goto ret0;
 L13400:
  if (((enum rtx_code) (x4)->code) == MULT)
    goto L1385;
  if (ix86_carry_flag_operator (x4, SImode))
    {
      operands[3] = x4;
      goto L1291;
    }
  if (index_register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L1349;
    }
  goto ret0;
 L1385:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (index_register_operand (x5, SImode))
    {
      operands[1] = x5;
      goto L1386;
    }
  goto ret0;
 L1386:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (const248_operand (x5, SImode))
    {
      operands[2] = x5;
      goto L1387;
    }
  goto ret0;
 L1387:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[3] = x4;
      goto L1388;
    }
  goto ret0;
 L1388:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, SImode))
    {
      operands[4] = x3;
      goto L1389;
    }
  goto ret0;
 L1389:
  if ((0))
    {
      return 195;
    }
  goto ret0;
 L1291:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L1292;
    }
  goto ret0;
 L1292:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L1293;
    }
  goto ret0;
 L1293:
  if ((0 && ix86_binary_operator_ok (PLUS, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 183;
    }
  goto ret0;
 L1349:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L1350;
    }
  goto ret0;
 L1350:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L1351;
    }
  goto ret0;
 L1351:
  if ((0))
    {
      return 191;
    }
  goto ret0;
 L1365:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (index_register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L1366;
    }
  goto ret0;
 L1366:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const248_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L1367;
    }
  goto ret0;
 L1367:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L1368;
    }
  goto ret0;
 L1368:
  if ((0))
    {
      return 193;
    }
  goto ret0;
 L1495:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L1496;
    }
  goto ret0;
 L1496:
  if ((0 && ix86_binary_operator_ok (PLUS, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 202;
    }
  goto ret0;
 L13392:
  if ((((x2)->u.fld[1]).rtint) == 0)
    goto L1329;
  goto ret0;
 L1329:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (no_seg_address_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L1330;
    }
  goto ret0;
 L1330:
  if ((0))
    {
      return 188;
    }
  goto ret0;
 L2007:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2008;
    }
  goto ret0;
 L2008:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L2009;
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2041;
    }
  goto ret0;
 L2009:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x4, SImode))
    {
      operands[3] = x4;
      goto L2010;
    }
  goto ret0;
 L2010:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L2011;
    }
  goto ret0;
 L2011:
  if ((0 && ix86_binary_operator_ok (MINUS, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 233;
    }
  goto ret0;
 L2041:
  if ((0 && ix86_binary_operator_ok (MINUS, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 235;
    }
  goto ret0;
 L2225:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2226;
    }
  goto ret0;
 L2226:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2227;
    }
  goto ret0;
 L2227:
  if ((0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 249;
    }
  goto ret0;
 L2434:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == LSHIFTRT)
    goto L2435;
  goto ret0;
 L2435:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == DImode
      && ((enum rtx_code) (x4)->code) == MULT)
    goto L2436;
  goto ret0;
 L2436:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x5)->mode) == DImode)
    goto L13401;
  goto ret0;
 L13401:
  switch (((enum rtx_code) (x5)->code))
    {
    case ZERO_EXTEND:
      goto L2437;
    case SIGN_EXTEND:
      goto L2514;
    default:
     break;
   }
  goto ret0;
 L2437:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, SImode))
    {
      operands[1] = x6;
      goto L2438;
    }
  goto ret0;
 L2438:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x5)->mode) == DImode
      && ((enum rtx_code) (x5)->code) == ZERO_EXTEND)
    goto L2439;
  goto ret0;
 L2439:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, SImode))
    {
      operands[2] = x6;
      goto L2440;
    }
  goto ret0;
 L2440:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (32)]
      && (0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 260;
    }
  goto ret0;
 L2514:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, SImode))
    {
      operands[1] = x6;
      goto L2515;
    }
  goto ret0;
 L2515:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x5)->mode) == DImode
      && ((enum rtx_code) (x5)->code) == SIGN_EXTEND)
    goto L2516;
  goto ret0;
 L2516:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, SImode))
    {
      operands[2] = x6;
      goto L2517;
    }
  goto ret0;
 L2517:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (32)]
      && (0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 263;
    }
  goto ret0;
 L3000:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L3001;
    }
  goto ret0;
 L3001:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L3002;
    }
  goto ret0;
 L3002:
  if ((0 && ix86_binary_operator_ok (AND, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 291;
    }
  goto ret0;
 L3321:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L3322;
    }
  goto ret0;
 L3322:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L3323;
    }
  goto ret0;
 L3323:
  if ((0 && ix86_binary_operator_ok (IOR, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 309;
    }
  goto ret0;
 L3704:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L3705;
    }
  goto ret0;
 L3705:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L3706;
    }
  goto ret0;
 L3706:
  if ((0 && ix86_binary_operator_ok (XOR, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 331;
    }
  goto ret0;
 L4538:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L4539;
    }
  goto ret0;
 L4539:
  if ((0 && ix86_unary_operator_ok (NOT, SImode, operands)))
    {
      return 395;
    }
  goto ret0;
 L789:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L13403;
    case HImode:
      goto L13404;
    case QImode:
      goto L13405;
    default:
      break;
    }
  goto ret0;
 L13403:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L790;
    }
  goto ret0;
 L790:
  if ((0))
    {
      return 118;
    }
  goto ret0;
 L13404:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L795;
    }
  goto ret0;
 L795:
  if ((0))
    {
      return 119;
    }
  goto ret0;
 L13405:
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L800;
    }
  goto ret0;
 L800:
  if ((0))
    {
      return 120;
    }
  goto ret0;
 L1008:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SFmode:
      goto L13406;
    case DFmode:
      goto L13407;
    default:
      break;
    }
  goto ret0;
 L13406:
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L1009;
    }
  goto ret0;
 L1009:
  if ((0 && ((target_flags & 0x00004000) != 0)))
    {
      return 150;
    }
  goto ret0;
 L13407:
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L1014;
    }
  goto ret0;
 L1014:
  if ((0 && ((target_flags & 0x00008000) != 0)))
    {
      return 151;
    }
  goto ret0;
 L2382:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == TImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L2383;
  goto ret0;
 L2383:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == TImode
      && ((enum rtx_code) (x3)->code) == MULT)
    goto L2384;
  goto ret0;
 L2384:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == TImode)
    goto L13408;
  goto ret0;
 L13408:
  switch (((enum rtx_code) (x4)->code))
    {
    case ZERO_EXTEND:
      goto L2385;
    case SIGN_EXTEND:
      goto L2462;
    default:
     break;
   }
  goto ret0;
 L2385:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, DImode))
    {
      operands[1] = x5;
      goto L2386;
    }
  goto ret0;
 L2386:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == TImode
      && ((enum rtx_code) (x4)->code) == ZERO_EXTEND)
    goto L2387;
  goto ret0;
 L2387:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, DImode))
    {
      operands[2] = x5;
      goto L2388;
    }
  goto ret0;
 L2388:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (64)]
      && (0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 258;
    }
  goto ret0;
 L2462:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, DImode))
    {
      operands[1] = x5;
      goto L2463;
    }
  goto ret0;
 L2463:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == TImode
      && ((enum rtx_code) (x4)->code) == SIGN_EXTEND)
    goto L2464;
  goto ret0;
 L2464:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, DImode))
    {
      operands[2] = x5;
      goto L2465;
    }
  goto ret0;
 L2465:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (64)]
      && (0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 261;
    }
  goto ret0;
 L3336:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L3337;
  goto ret0;
 L3337:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L3338;
    }
  goto ret0;
 L3338:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x86_64_zext_immediate_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L3339;
    }
  goto ret0;
 L3339:
  if ((0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 310;
    }
  goto ret0;
 L3719:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L3720;
  goto ret0;
 L3720:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L3721;
    }
  goto ret0;
 L3721:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x86_64_zext_immediate_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L3722;
    }
  goto ret0;
 L3722:
  if ((0 && ix86_binary_operator_ok (XOR, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 332;
    }
  goto ret0;
 L4120:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == NEG)
    goto L4121;
  goto ret0;
 L4121:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == ASHIFT)
    goto L4122;
  goto ret0;
 L4122:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L4123;
    }
  goto ret0;
 L4123:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (32)])
    goto L4124;
  goto ret0;
 L4124:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (32)]
      && (0 && ix86_unary_operator_ok (NEG, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 355;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_6 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case ZERO_EXTRACT:
      goto L483;
    case MEM:
      goto L13365;
    case SUBREG:
    case REG:
      goto L13131;
    default:
      goto L13132;
   }
 L13131:
  if (register_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L542;
    }
 L13132:
  if (nonimmediate_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L736;
    }
 L13133:
  if (((enum rtx_code) (x1)->code) == MEM)
    goto L568;
  if (register_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L573;
    }
 L13151:
  if (nonimmediate_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L1400;
    }
 L13158:
  if (register_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L4634;
    }
  goto ret0;
 L483:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ext_register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L484;
    }
  goto ret0;
 L484:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    goto L485;
  goto ret0;
 L485:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (8)])
    goto L486;
  goto ret0;
 L486:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (nonmemory_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L487;
    }
  goto ret0;
 L487:
  if ((0))
    {
      return 73;
    }
  goto ret0;
 L13365:
  if (push_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L498;
    }
  goto L13132;
 L498:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_no_elim_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L499;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13132;
 L499:
  if ((!0))
    {
      return 75;
    }
 L503:
  if ((0))
    {
      return 76;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13132;
 L542:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (const0_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L543;
    }
 L552:
  if (const_int_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L553;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13132;
 L543:
  if ((0 && (!(x86_use_mov0 & (1 << ix86_tune)) || optimize_size)
   && reload_completed)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 80;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L552;
 L553:
  if ((0 && ((ix86_tune == PROCESSOR_PENTIUM) || optimize_size)
   && reload_completed
   && operands[1] == (const_int_rtx[64 -1]))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 81;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13132;
 L736:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DImode)
    goto L13366;
 L556:
  if (general_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L557;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13133;
 L13366:
  switch (((enum rtx_code) (x1)->code))
    {
    case ZERO_EXTEND:
      goto L737;
    case SIGN_EXTEND:
      goto L784;
    case FIX:
      goto L955;
    case PLUS:
      goto L1188;
    default:
     break;
   }
  goto L556;
 L737:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L738;
    }
  goto L556;
 L738:
  if ((!0 && !(x86_inter_unit_moves & (1 << ix86_tune)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 111;
    }
 L750:
  if ((!0 && (x86_inter_unit_moves & (1 << ix86_tune)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 112;
    }
 L755:
  if ((0 && !(x86_inter_unit_moves & (1 << ix86_tune))))
    {
      return 113;
    }
 L760:
  if ((0 && (x86_inter_unit_moves & (1 << ix86_tune))))
    {
      return 114;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L556;
 L784:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L785;
    }
  goto L556;
 L785:
  if ((!0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 117;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L556;
 L955:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L956;
    }
  goto L556;
 L956:
  if (((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && !reload_completed && !reload_in_progress
   && (!((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode)) || !0))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 147;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L556;
 L1188:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L13371;
  goto L556;
 L13371:
  if (((enum rtx_code) (x2)->code) == PLUS)
    goto L1205;
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L1189;
    }
  goto L556;
 L1205:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x3, DImode))
    {
      operands[3] = x3;
      goto L1206;
    }
  goto L556;
 L1206:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L1207;
    }
  goto L556;
 L1207:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L1208;
    }
  goto L556;
 L1208:
  if ((0 && ix86_binary_operator_ok (PLUS, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 178;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L556;
 L1189:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L1190;
    }
  goto L556;
 L1190:
  if ((!0 && ix86_binary_operator_ok (PLUS, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 177;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L556;
 L557:
  if ((!0
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 82;
    }
 L561:
  if ((0
   && ((x86_inter_unit_moves & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 83;
    }
 L565:
  if ((0
   && (!(x86_inter_unit_moves & (1 << ix86_tune)) && !optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 84;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13133;
 L568:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (x86_64_movabs_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L569;
    }
  goto L13151;
 L569:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (nonmemory_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L570;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L570:
  if ((0 && ix86_check_movabs (insn, 0)))
    {
      return 85;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L573:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DImode)
    goto L13372;
 L1333:
  if (no_seg_address_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L1334;
    }
 L2194:
  if (((enum machine_mode) (x1)->mode) == DImode
      && ((enum rtx_code) (x1)->code) == MULT)
    goto L2195;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L13372:
  tem = recog_5 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L1333;
 L1334:
  if ((0))
    {
      return 189;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L2194;
 L2195:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L13411;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L13411:
  switch (((enum rtx_code) (x2)->code))
    {
    case ZERO_EXTEND:
      goto L2324;
    case SIGN_EXTEND:
      goto L2360;
    case SUBREG:
    case REG:
    case MEM:
      goto L13410;
    default:
      x1 = (((x0)->u.fld[0]).rtx1);
      goto L13151;
   }
 L13410:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L2196;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L2324:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2325;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L2325:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L2326;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L2326:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2327;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L2327:
  if ((!0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 255;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L2360:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2361;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L2361:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == SIGN_EXTEND)
    goto L2362;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L2362:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2363;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L2363:
  if ((!0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 257;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L2196:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L2197;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L2197:
  if ((0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 247;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13151;
 L1400:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DImode)
    goto L13413;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L13413:
  switch (((enum rtx_code) (x1)->code))
    {
    case PLUS:
      goto L1401;
    case MINUS:
      goto L1879;
    case AND:
      goto L2957;
    case IOR:
      goto L3260;
    case XOR:
      goto L3643;
    case NEG:
      goto L4069;
    case NOT:
      goto L4516;
    case ASHIFT:
      goto L4606;
    case ASHIFTRT:
      goto L4827;
    case LSHIFTRT:
      goto L5234;
    case ROTATE:
      goto L5572;
    case ROTATERT:
      goto L5748;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L1401:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L1402;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L1402:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L1403;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L1403:
  if ((0 && ix86_binary_operator_ok (PLUS, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 196;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L1879:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L1896;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L1896:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L1897;
  if (general_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L1881;
    }
 L1912:
  if (x86_64_general_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L1913;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L1897:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x3, DImode))
    {
      operands[3] = x3;
      goto L1898;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L1898:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L1899;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L1899:
  if ((0 && ix86_binary_operator_ok (MINUS, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 226;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L1881:
  if ((!0 && ix86_binary_operator_ok (MINUS, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 225;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L1912;
 L1913:
  if ((0 && ix86_binary_operator_ok (MINUS, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 227;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L2957:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L2958;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L2958:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x86_64_szext_general_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L2959;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L2959:
  if ((0 && ix86_binary_operator_ok (AND, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 288;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L3260:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L3261;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L3261:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L3262;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L3262:
  if ((0
   && ix86_binary_operator_ok (IOR, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 305;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L3643:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L3644;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L3644:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L3645;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L3645:
  if ((0
   && ix86_binary_operator_ok (XOR, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 327;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L4069:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (general_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L4070;
    }
 L4081:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L4082;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L4070:
  if ((!0
   && ix86_unary_operator_ok (NEG, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 351;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L4081;
 L4082:
  if ((0 && ix86_unary_operator_ok (NEG, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 352;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L4516:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L4517;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L4517:
  if ((0 && ix86_unary_operator_ok (NOT, DImode, operands)))
    {
      return 392;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L4606:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L4607;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L4607:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L4608;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L4608:
  if ((0 && ix86_binary_operator_ok (ASHIFT, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 402;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L4827:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L4828;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L4828:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT)
    goto L13425;
 L4856:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L4857;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L13425:
  if (const_int_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L4829;
    }
 L13426:
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L4843;
    }
  goto L4856;
 L4829:
  if ((0 && ((operands[2])->u.hwint[0]) == 63 && ((x86_use_cltd & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (ASHIFTRT, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 417;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L13426;
 L4843:
  if ((0 && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 418;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L4856;
 L4857:
  if ((0 && ix86_binary_operator_ok (ASHIFTRT, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 419;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L5234:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L5235;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L5235:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5236;
    }
 L5249:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5250;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L5236:
  if ((0 && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 445;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5249;
 L5250:
  if ((0 && ix86_binary_operator_ok (LSHIFTRT, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 446;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L5572:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L5573;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L5573:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5574;
    }
 L5587:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5588;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L5574:
  if ((0 && ix86_binary_operator_ok (ROTATE, DImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 469;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5587;
 L5588:
  if ((0 && ix86_binary_operator_ok (ROTATE, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 470;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L5748:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L5749;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L5749:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5750;
    }
 L5763:
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5764;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L5750:
  if ((0 && ix86_binary_operator_ok (ROTATERT, DImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 481;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5763;
 L5764:
  if ((0 && ix86_binary_operator_ok (ROTATERT, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 482;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13158;
 L4634:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DImode)
    goto L13427;
  goto ret0;
 L13427:
  switch (((enum rtx_code) (x1)->code))
    {
    case ASHIFT:
      goto L4635;
    case ZERO_EXTEND:
      goto L4703;
    case ASHIFTRT:
      goto L4897;
    case LSHIFTRT:
      goto L5290;
    case FFS:
      goto L6431;
    case CTZ:
      goto L6465;
    case MINUS:
      goto L6495;
    case UNSPEC:
      goto L13437;
    case PLUS:
      goto L6656;
    case IF_THEN_ELSE:
      goto L7730;
    default:
     break;
   }
  goto ret0;
 L4635:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L4636;
    }
  goto ret0;
 L4636:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L4637;
    }
  goto ret0;
 L4637:
  if ((!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 404;
    }
 L4651:
  if ((!0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 405;
    }
  goto ret0;
 L4703:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L13438;
  goto ret0;
 L13438:
  switch (((enum rtx_code) (x2)->code))
    {
    case ASHIFT:
      goto L4704;
    case ASHIFTRT:
      goto L4966;
    case LSHIFTRT:
      goto L5364;
    case ROTATE:
      goto L5616;
    case ROTATERT:
      goto L5792;
    default:
     break;
   }
  goto ret0;
 L4704:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L4705;
    }
  goto ret0;
 L4705:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4706;
    }
  goto ret0;
 L4706:
  if ((0 && ix86_binary_operator_ok (ASHIFT, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 408;
    }
  goto ret0;
 L4966:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L4967;
    }
  goto ret0;
 L4967:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == CONST_INT)
    goto L13443;
 L5027:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5028;
    }
  goto ret0;
 L13443:
  if (const_int_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L4968;
    }
 L13444:
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4998;
    }
  goto L5027;
 L4968:
  if ((0 && ((x86_use_cltd & (1 << ix86_tune)) || optimize_size)
   && ((operands[2])->u.hwint[0]) == 31
   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 426;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L13444;
 L4998:
  if ((0 && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 428;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5027;
 L5028:
  if ((0 && ix86_binary_operator_ok (ASHIFTRT, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 430;
    }
  goto ret0;
 L5364:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L5365;
    }
  goto ret0;
 L5365:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5366;
    }
  goto ret0;
 L5366:
  if ((0 && ix86_binary_operator_ok (LSHIFTRT, HImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 454;
    }
  goto ret0;
 L5616:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L5617;
    }
  goto ret0;
 L5617:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5618;
    }
 L5647:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5648;
    }
  goto ret0;
 L5618:
  if ((0 && ix86_binary_operator_ok (ROTATE, SImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 472;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5647;
 L5648:
  if ((0 && ix86_binary_operator_ok (ROTATE, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 474;
    }
  goto ret0;
 L5792:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L5793;
    }
  goto ret0;
 L5793:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5794;
    }
 L5823:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5824;
    }
  goto ret0;
 L5794:
  if ((0 && ix86_binary_operator_ok (ROTATERT, SImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 484;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5823;
 L5824:
  if ((0 && ix86_binary_operator_ok (ROTATERT, SImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 486;
    }
  goto ret0;
 L4897:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L4898;
    }
  goto ret0;
 L4898:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L4899;
    }
  goto ret0;
 L4899:
  if ((!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 422;
    }
 L4913:
  if ((!0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 423;
    }
  goto ret0;
 L5290:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L13446;
  goto ret0;
 L13446:
  if (((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L5334;
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L5291;
    }
  goto ret0;
 L5334:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L5335;
    }
  goto ret0;
 L5335:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5336;
    }
  goto ret0;
 L5336:
  if ((0 && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 452;
    }
  goto ret0;
 L5291:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L5292;
    }
  goto ret0;
 L5292:
  if ((!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 449;
    }
 L5306:
  if ((!0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 450;
    }
  goto ret0;
 L6431:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L6432;
    }
  goto ret0;
 L6432:
  if ((0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 538;
    }
  goto ret0;
 L6465:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L6466;
    }
  goto ret0;
 L6466:
  if ((0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 541;
    }
  goto ret0;
 L6495:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (x2 == const_int_rtx[64 + (63)])
    goto L6496;
  goto ret0;
 L6496:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == CLZ)
    goto L6497;
  goto ret0;
 L6497:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L6498;
    }
  goto ret0;
 L6498:
  if ((0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 543;
    }
  goto ret0;
 L13437:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 15)
    goto L6643;
  goto ret0;
 L6643:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (x2 == const_int_rtx[64 + (0)]
      && (0))
    {
      return 553;
    }
  goto ret0;
 L6656:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 15)
    goto L6657;
  goto ret0;
 L6657:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)])
    goto L6658;
  goto ret0;
 L6658:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L6659;
    }
  goto ret0;
 L6659:
  if ((0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 554;
    }
  goto ret0;
 L7730:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L7731;
    }
 L7736:
  if (ix86_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L7737;
    }
  goto ret0;
 L7731:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (-1)])
    goto L7732;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L7736;
 L7732:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 648;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L7736;
 L7737:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L7738;
  goto ret0;
 L7738:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L7739;
  goto ret0;
 L7739:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L7740;
    }
  goto ret0;
 L7740:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[3] = x2;
      goto L7741;
    }
  goto ret0;
 L7741:
  if ((0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM)))
    {
      return 649;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_7 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case NEG:
      goto L4327;
    case ABS:
      goto L4483;
    case SQRT:
      goto L6833;
    case UNSPEC:
      goto L13468;
    case IF_THEN_ELSE:
      goto L7834;
    case EQ:
    case LT:
    case LE:
    case UNORDERED:
    case NE:
    case UNGE:
    case UNGT:
    case ORDERED:
    case UNEQ:
    case UNLT:
    case UNLE:
    case LTGT:
    case GE:
    case GT:
      goto L13461;
    case PLUS:
    case MINUS:
    case MULT:
    case DIV:
      goto L13462;
    default:
      goto ret0;
   }
 L13461:
  if (sse_comparison_operator (x1, SFmode))
    {
      operands[1] = x1;
      goto L5927;
    }
 L13462:
  if (binary_fp_operator (x1, SFmode))
    {
      operands[3] = x1;
      goto L6663;
    }
  goto ret0;
 L4327:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L4328;
    }
  goto ret0;
 L4328:
  if (((target_flags & 0x00000001) && reload_completed))
    {
      return 371;
    }
  goto ret0;
 L4483:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L4484;
    }
  goto ret0;
 L4484:
  if (((target_flags & 0x00000001) && reload_completed))
    {
      return 386;
    }
  goto ret0;
 L6833:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L13471;
  goto ret0;
 L13471:
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L6834;
    }
 L13472:
  if (register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L6844;
    }
  goto ret0;
 L6834:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && (((ix86_fpmath & FPMATH_SSE) != 0) && ((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387)))))
    {
      return 581;
    }
 L6839:
  if ((((ix86_fpmath & FPMATH_SSE) != 0) && (!(target_flags & 0x00000001) || !((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387)))))
    {
      return 582;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13472;
 L6844:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && !((ix86_fpmath & FPMATH_SSE) != 0)))
    {
      return 583;
    }
  goto ret0;
 L13468:
  switch ((((((x1)->u.fld[0]).rtvec1))->num_elem))
    {
    case 1:
      goto L13473;
    case 2:
      goto L13475;
    default:
      break;
    }
  goto ret0;
 L13473:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 21L:
      goto L6921;
    case 22L:
      goto L6942;
    default:
      break;
    }
  goto ret0;
 L6921:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L6922;
    }
  goto ret0;
 L6922:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 594;
    }
  goto ret0;
 L6942:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L6943;
    }
  goto ret0;
 L6943:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 598;
    }
  goto ret0;
 L13475:
  if ((((x1)->u.fld[1]).rtint) == 65)
    goto L7047;
  goto ret0;
 L7047:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L7048;
    }
  goto ret0;
 L7048:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L7049;
    }
  goto ret0;
 L7049:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 609;
    }
  goto ret0;
 L7834:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case LT:
      goto L7835;
    case GT:
      goto L7927;
    default:
     break;
   }
 L7787:
  if (fcmov_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L7788;
    }
 L8055:
  if (sse_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L8056;
    }
 L8077:
  if (((enum rtx_code) (x2)->code) == EQ)
    goto L8078;
 L8148:
  if (fcmov_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L8149;
    }
  goto ret0;
 L7835:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode)
    goto L13476;
  goto L7787;
 L13476:
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L7836;
    }
 L13477:
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L7855;
    }
 L13478:
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L7863;
    }
  goto L7787;
 L7836:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L7837;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13477;
 L7837:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L7838;
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13477;
 L7838:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (rtx_equal_p (x2, operands[2])
      && (((target_flags & 0x00004000) != 0) && (target_flags & 0x00000010))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 658;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13477;
 L7855:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L7856;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13478;
 L7856:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L7857;
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13478;
 L7857:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (rtx_equal_p (x2, operands[2])
      && (((target_flags & 0x00004000) != 0) && !(target_flags & 0x00000010)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 659;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13478;
 L7863:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L7864;
    }
  goto L7787;
 L7864:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L7865;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L7787;
 L7865:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (rtx_equal_p (x2, operands[2])
      && (((target_flags & 0x00004000) != 0) && reload_completed))
    {
      return 660;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L7787;
 L7927:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode)
    goto L13479;
  goto L7787;
 L13479:
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L7928;
    }
 L13480:
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L7947;
    }
 L13481:
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L7955;
    }
  goto L7787;
 L7928:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L7929;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13480;
 L7929:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L7930;
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13480;
 L7930:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (rtx_equal_p (x2, operands[2])
      && (((target_flags & 0x00004000) != 0) && (target_flags & 0x00000010))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 664;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13480;
 L7947:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L7948;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13481;
 L7948:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L7949;
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13481;
 L7949:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (rtx_equal_p (x2, operands[2])
      && (((target_flags & 0x00004000) != 0) && !(target_flags & 0x00000010)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 665;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13481;
 L7955:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L7956;
    }
  goto L7787;
 L7956:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L7957;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L7787;
 L7957:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (rtx_equal_p (x2, operands[2])
      && (((target_flags & 0x00004000) != 0) && reload_completed))
    {
      return 666;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L7787;
 L7788:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L7789;
  goto L8055;
 L7789:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L7790;
  goto L8055;
 L7790:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L7791;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8055;
 L7791:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[3] = x2;
      goto L7792;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8055;
 L7792:
  if ((((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM)))
    {
      return 654;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8055;
 L8056:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode)
    goto L13482;
  goto L8077;
 L13482:
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[4] = x3;
      goto L8057;
    }
 L13483:
  if (register_operand (x3, SFmode))
    {
      operands[4] = x3;
      goto L8132;
    }
  goto L8077;
 L8057:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[5] = x3;
      goto L8058;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13483;
 L8058:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L8059;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13483;
 L8059:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[3] = x2;
      goto L8060;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13483;
 L8060:
  if ((((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM)
   && ((((enum rtx_code) (operands[1])->code) != LT && ((enum rtx_code) (operands[1])->code) != GT
 && ((enum rtx_code) (operands[1])->code) != UNLE && ((enum rtx_code) (operands[1])->code) != UNGE)
       || !rtx_equal_p (operands[4], operands[2])
       || !rtx_equal_p (operands[5], operands[3]))
   && (!(target_flags & 0x00000010)
       || (((enum rtx_code) (operands[1])->code) != EQ && ((enum rtx_code) (operands[1])->code) != NE)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 673;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13483;
 L8132:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[5] = x3;
      goto L8133;
    }
  goto L8077;
 L8133:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L8134;
    }
  if (const0_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L8143;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8077;
 L8134:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (const0_operand (x2, SFmode))
    {
      operands[3] = x2;
      goto L8135;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8077;
 L8135:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 677;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8077;
 L8143:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[3] = x2;
      goto L8144;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8077;
 L8144:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 678;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8077;
 L8078:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[3] = x3;
      goto L8079;
    }
  goto L8148;
 L8079:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[4] = x3;
      goto L8080;
    }
  goto L8148;
 L8080:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L8081;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8148;
 L8081:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L8082;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8148;
 L8082:
  if ((((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 674;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8148;
 L8149:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[4] = x3;
      goto L8150;
    }
  goto ret0;
 L8150:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[5] = x3;
      goto L8151;
    }
  goto ret0;
 L8151:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L8152;
    }
  if (const0_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L8161;
    }
  goto ret0;
 L8152:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (const0_operand (x2, SFmode))
    {
      operands[3] = x2;
      goto L8153;
    }
  goto ret0;
 L8153:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 679;
    }
  goto ret0;
 L8161:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[3] = x2;
      goto L8162;
    }
  goto ret0;
 L8162:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 680;
    }
  goto ret0;
 L5927:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L5928;
    }
  goto ret0;
 L5928:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[3] = x2;
      goto L5929;
    }
  goto ret0;
 L5929:
  if ((((target_flags & 0x00004000) != 0) && reload_completed))
    {
      return 495;
    }
  goto ret0;
 L6663:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L13486;
  goto ret0;
 L13486:
  if (((enum rtx_code) (x2)->code) == FLOAT)
    goto L6724;
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L6664;
    }
 L13485:
  if (register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L6718;
    }
  goto ret0;
 L6724:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L6725;
    }
  goto ret0;
 L6725:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L6726;
    }
  goto ret0;
 L6726:
  if (((target_flags & 0x00000001) && (x86_use_fiop & (1 << ix86_tune)) && !((ix86_fpmath & FPMATH_SSE) != 0)))
    {
      return 565;
    }
  goto ret0;
 L6664:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L6665;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13485;
 L6665:
  if (((target_flags & 0x00000001) && !((ix86_fpmath & FPMATH_SSE) != 0)
   && ((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 555;
    }
 L6671:
  if (((target_flags & 0x00000001) && ((ix86_fpmath & FPMATH_SSE) != 0) && ((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387))
   && ((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 556;
    }
 L6677:
  if ((((ix86_fpmath & FPMATH_SSE) != 0) && ((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 557;
    }
 L6707:
  if (((target_flags & 0x00000001) && !((ix86_fpmath & FPMATH_SSE) != 0)
   && !((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 562;
    }
 L6713:
  if (((target_flags & 0x00000001) && ((ix86_fpmath & FPMATH_SSE) != 0) && ((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387))
   && !((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 563;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13485;
 L6718:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L13488;
  goto ret0;
 L13488:
  if (((enum rtx_code) (x2)->code) == FLOAT)
    goto L6732;
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L6719;
    }
  goto ret0;
 L6732:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L6733;
    }
  goto ret0;
 L6733:
  if (((target_flags & 0x00000001) && (x86_use_fiop & (1 << ix86_tune)) && !((ix86_fpmath & FPMATH_SSE) != 0)))
    {
      return 566;
    }
  goto ret0;
 L6719:
  if ((((ix86_fpmath & FPMATH_SSE) != 0)
   && !((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)))
    {
      return 564;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_8 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case NEG:
      goto L4332;
    case ABS:
      goto L4488;
    case SQRT:
      goto L6848;
    case UNSPEC:
      goto L13509;
    case IF_THEN_ELSE:
      goto L7880;
    case EQ:
    case LT:
    case LE:
    case UNORDERED:
    case NE:
    case UNGE:
    case UNGT:
    case ORDERED:
    case UNEQ:
    case UNLT:
    case UNLE:
    case LTGT:
    case GE:
    case GT:
      goto L13502;
    case PLUS:
    case MINUS:
    case MULT:
    case DIV:
      goto L13503;
    default:
      goto ret0;
   }
 L13502:
  if (sse_comparison_operator (x1, DFmode))
    {
      operands[1] = x1;
      goto L5933;
    }
 L13503:
  if (binary_fp_operator (x1, DFmode))
    {
      operands[3] = x1;
      goto L6681;
    }
  goto ret0;
 L4332:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L13513;
  goto ret0;
 L13513:
  if (((enum rtx_code) (x2)->code) == FLOAT_EXTEND)
    goto L4338;
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L4333;
    }
  goto ret0;
 L4338:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L4339;
    }
  goto ret0;
 L4339:
  if (((target_flags & 0x00000001)))
    {
      return 373;
    }
  goto ret0;
 L4333:
  if (((target_flags & 0x00000001) && reload_completed))
    {
      return 372;
    }
  goto ret0;
 L4488:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L13515;
  goto ret0;
 L13515:
  if (((enum rtx_code) (x2)->code) == FLOAT_EXTEND)
    goto L4494;
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L4489;
    }
  goto ret0;
 L4494:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L4495;
    }
  goto ret0;
 L4495:
  if (((target_flags & 0x00000001)))
    {
      return 388;
    }
  goto ret0;
 L4489:
  if (((target_flags & 0x00000001) && reload_completed))
    {
      return 387;
    }
  goto ret0;
 L6848:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L13518;
  goto ret0;
 L13518:
  if (((enum rtx_code) (x2)->code) == FLOAT_EXTEND)
    goto L6864;
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L6849;
    }
 L13517:
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L6859;
    }
  goto ret0;
 L6864:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L6865;
    }
  goto ret0;
 L6865:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && !(((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0))))
    {
      return 587;
    }
  goto ret0;
 L6849:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && ((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387)))))
    {
      return 584;
    }
 L6854:
  if ((((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && (!(target_flags & 0x00000001) || !((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387)))))
    {
      return 585;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13517;
 L6859:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && (!((target_flags & 0x00008000) != 0) || !((ix86_fpmath & FPMATH_SSE) != 0))))
    {
      return 586;
    }
  goto ret0;
 L13509:
  switch ((((((x1)->u.fld[0]).rtvec1))->num_elem))
    {
    case 1:
      goto L13519;
    case 2:
      goto L13521;
    default:
      break;
    }
  goto ret0;
 L13519:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 21L:
      goto L6916;
    case 22L:
      goto L6937;
    default:
      break;
    }
  goto ret0;
 L6916:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L13523;
  goto ret0;
 L13523:
  if (((enum rtx_code) (x2)->code) == FLOAT_EXTEND)
    goto L6927;
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L6917;
    }
  goto ret0;
 L6927:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L6928;
    }
  goto ret0;
 L6928:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 595;
    }
  goto ret0;
 L6917:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 593;
    }
  goto ret0;
 L6937:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L13525;
  goto ret0;
 L13525:
  if (((enum rtx_code) (x2)->code) == FLOAT_EXTEND)
    goto L6948;
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L6938;
    }
  goto ret0;
 L6948:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L6949;
    }
  goto ret0;
 L6949:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 599;
    }
  goto ret0;
 L6938:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 597;
    }
  goto ret0;
 L13521:
  if ((((x1)->u.fld[1]).rtint) == 65)
    goto L7032;
  goto ret0;
 L7032:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L7033;
    }
  goto ret0;
 L7033:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L7034;
    }
  goto ret0;
 L7034:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 608;
    }
  goto ret0;
 L7880:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case LT:
      goto L7881;
    case GT:
      goto L7973;
    default:
     break;
   }
 L7796:
  if (fcmov_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L7797;
    }
 L8099:
  if (sse_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L8100;
    }
 L8121:
  if (((enum rtx_code) (x2)->code) == EQ)
    goto L8122;
 L8184:
  if (fcmov_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L8185;
    }
  goto ret0;
 L7881:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DFmode)
    goto L13526;
  goto L7796;
 L13526:
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L7882;
    }
 L13527:
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L7901;
    }
 L13528:
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L7909;
    }
  goto L7796;
 L7882:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L7883;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13527;
 L7883:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L7884;
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13527;
 L7884:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (rtx_equal_p (x2, operands[2])
      && (((target_flags & 0x00008000) != 0) && (target_flags & 0x00000010) && ((ix86_fpmath & FPMATH_SSE) != 0))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 661;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13527;
 L7901:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L7902;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13528;
 L7902:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L7903;
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13528;
 L7903:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (rtx_equal_p (x2, operands[2])
      && (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && !(target_flags & 0x00000010)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 662;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13528;
 L7909:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L7910;
    }
  goto L7796;
 L7910:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L7911;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L7796;
 L7911:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (rtx_equal_p (x2, operands[2])
      && (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && reload_completed))
    {
      return 663;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L7796;
 L7973:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DFmode)
    goto L13529;
  goto L7796;
 L13529:
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L7974;
    }
 L13530:
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L7993;
    }
 L13531:
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L8001;
    }
  goto L7796;
 L7974:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L7975;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13530;
 L7975:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L7976;
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13530;
 L7976:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (rtx_equal_p (x2, operands[2])
      && (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && (target_flags & 0x00000010))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 667;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13530;
 L7993:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L7994;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13531;
 L7994:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L7995;
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13531;
 L7995:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (rtx_equal_p (x2, operands[2])
      && (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && !(target_flags & 0x00000010)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 668;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13531;
 L8001:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L8002;
    }
  goto L7796;
 L8002:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L8003;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L7796;
 L8003:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (rtx_equal_p (x2, operands[2])
      && (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && reload_completed))
    {
      return 669;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L7796;
 L7797:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L7798;
  goto L8099;
 L7798:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L7799;
  goto L8099;
 L7799:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L7800;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8099;
 L7800:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[3] = x2;
      goto L7801;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8099;
 L7801:
  if ((!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM)))
    {
      return 655;
    }
 L7810:
  if ((0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM)))
    {
      return 656;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8099;
 L8100:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DFmode)
    goto L13532;
  goto L8121;
 L13532:
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[4] = x3;
      goto L8101;
    }
 L13533:
  if (register_operand (x3, DFmode))
    {
      operands[4] = x3;
      goto L8168;
    }
  goto L8121;
 L8101:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[5] = x3;
      goto L8102;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13533;
 L8102:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L8103;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13533;
 L8103:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[3] = x2;
      goto L8104;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13533;
 L8104:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM)
   && ((((enum rtx_code) (operands[1])->code) != LT && ((enum rtx_code) (operands[1])->code) != GT
 && ((enum rtx_code) (operands[1])->code) != UNLE && ((enum rtx_code) (operands[1])->code) != UNGE)
       || !rtx_equal_p (operands[4], operands[2])
       || !rtx_equal_p (operands[5], operands[3]))
   && (!(target_flags & 0x00000010)
       || (((enum rtx_code) (operands[1])->code) != EQ && ((enum rtx_code) (operands[1])->code) != NE)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 675;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13533;
 L8168:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[5] = x3;
      goto L8169;
    }
  goto L8121;
 L8169:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L8170;
    }
  if (const0_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L8179;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8121;
 L8170:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (const0_operand (x2, DFmode))
    {
      operands[3] = x2;
      goto L8171;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8121;
 L8171:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 681;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8121;
 L8179:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[3] = x2;
      goto L8180;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8121;
 L8180:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 682;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8121;
 L8122:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[3] = x3;
      goto L8123;
    }
  goto L8184;
 L8123:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[4] = x3;
      goto L8124;
    }
  goto L8184;
 L8124:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L8125;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8184;
 L8125:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L8126;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8184;
 L8126:
  if ((((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 676;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8184;
 L8185:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[4] = x3;
      goto L8186;
    }
  goto ret0;
 L8186:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[5] = x3;
      goto L8187;
    }
  goto ret0;
 L8187:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L8188;
    }
  if (const0_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L8197;
    }
  goto ret0;
 L8188:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (const0_operand (x2, DFmode))
    {
      operands[3] = x2;
      goto L8189;
    }
  goto ret0;
 L8189:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 683;
    }
  goto ret0;
 L8197:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[3] = x2;
      goto L8198;
    }
  goto ret0;
 L8198:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 684;
    }
  goto ret0;
 L5933:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L5934;
    }
  goto ret0;
 L5934:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[3] = x2;
      goto L5935;
    }
  goto ret0;
 L5935:
  if ((((target_flags & 0x00008000) != 0) && reload_completed))
    {
      return 496;
    }
  goto ret0;
 L6681:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L13536;
  goto ret0;
 L13536:
  switch (((enum rtx_code) (x2)->code))
    {
    case FLOAT:
      goto L6756;
    case FLOAT_EXTEND:
      goto L6770;
    case SUBREG:
    case REG:
    case MEM:
      goto L13534;
    default:
      goto L13535;
   }
 L13534:
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L6682;
    }
 L13535:
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L6750;
    }
  goto ret0;
 L6756:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L6757;
    }
  goto ret0;
 L6757:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L6758;
    }
  goto ret0;
 L6758:
  if (((target_flags & 0x00000001) && (x86_use_fiop & (1 << ix86_tune)) && !(((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0))))
    {
      return 570;
    }
  goto ret0;
 L6770:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode)
    goto L13538;
  goto ret0;
 L13538:
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L6771;
    }
 L13539:
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L6785;
    }
  goto ret0;
 L6771:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L6772;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13539;
 L6772:
  if (((target_flags & 0x00000001) && (!((target_flags & 0x00008000) != 0) || !((ix86_fpmath & FPMATH_SSE) != 0))
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 572;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13539;
 L6785:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == FLOAT_EXTEND)
    goto L6786;
  goto ret0;
 L6786:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L6787;
    }
  goto ret0;
 L6787:
  if (((target_flags & 0x00000001) && !(((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0))))
    {
      return 574;
    }
  goto ret0;
 L6682:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L6683;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13535;
 L6683:
  if (((target_flags & 0x00000001) && (!((target_flags & 0x00008000) != 0) || !((ix86_fpmath & FPMATH_SSE) != 0))
   && ((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 558;
    }
 L6689:
  if (((target_flags & 0x00000001) && ((ix86_fpmath & FPMATH_SSE) != 0) && ((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387))
   && ((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 559;
    }
 L6695:
  if ((((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0)
   && ((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 560;
    }
 L6739:
  if (((target_flags & 0x00000001) && (!((target_flags & 0x00008000) != 0) || !((ix86_fpmath & FPMATH_SSE) != 0))
   && !((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 567;
    }
 L6745:
  if (((target_flags & 0x00000001) && ((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && ((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387))
   && !((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 568;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13535;
 L6750:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L13541;
  goto ret0;
 L13541:
  switch (((enum rtx_code) (x2)->code))
    {
    case FLOAT:
      goto L6764;
    case FLOAT_EXTEND:
      goto L6778;
    case SUBREG:
    case REG:
    case MEM:
      goto L13540;
    default:
      goto ret0;
   }
 L13540:
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L6751;
    }
  goto ret0;
 L6764:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L6765;
    }
  goto ret0;
 L6765:
  if (((target_flags & 0x00000001) && (x86_use_fiop & (1 << ix86_tune)) && !(((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0))))
    {
      return 571;
    }
  goto ret0;
 L6778:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L6779;
    }
  goto ret0;
 L6779:
  if (((target_flags & 0x00000001) && !(((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0))))
    {
      return 573;
    }
  goto ret0;
 L6751:
  if ((((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0)
   && !((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)))
    {
      return 569;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_9 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case FLOAT:
      goto L1165;
    case NEG:
      goto L4343;
    case ABS:
      goto L4499;
    case SQRT:
      goto L6869;
    case UNSPEC:
      goto L13561;
    case IF_THEN_ELSE:
      goto L7814;
    case PLUS:
    case MINUS:
    case MULT:
    case DIV:
      goto L13551;
    default:
      goto ret0;
   }
 L13551:
  if (binary_fp_operator (x1, XFmode))
    {
      operands[3] = x1;
      goto L6699;
    }
  goto ret0;
 L1165:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case HImode:
      goto L13568;
    case SImode:
      goto L13569;
    case DImode:
      goto L13570;
    default:
      break;
    }
  goto ret0;
 L13568:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L1166;
    }
  goto ret0;
 L1166:
  if (((target_flags & 0x00000001)))
    {
      return 174;
    }
  goto ret0;
 L13569:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L1171;
    }
  goto ret0;
 L1171:
  if (((target_flags & 0x00000001)))
    {
      return 175;
    }
  goto ret0;
 L13570:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L1176;
    }
  goto ret0;
 L1176:
  if (((target_flags & 0x00000001)))
    {
      return 176;
    }
  goto ret0;
 L4343:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode)
    goto L13572;
  goto ret0;
 L13572:
  if (((enum rtx_code) (x2)->code) == FLOAT_EXTEND)
    goto L4349;
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L4344;
    }
  goto ret0;
 L4349:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case DFmode:
      goto L13573;
    case SFmode:
      goto L13574;
    default:
      break;
    }
  goto ret0;
 L13573:
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L4350;
    }
  goto ret0;
 L4350:
  if (((target_flags & 0x00000001)))
    {
      return 375;
    }
  goto ret0;
 L13574:
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L4356;
    }
  goto ret0;
 L4356:
  if (((target_flags & 0x00000001)))
    {
      return 376;
    }
  goto ret0;
 L4344:
  if (((target_flags & 0x00000001) && reload_completed))
    {
      return 374;
    }
  goto ret0;
 L4499:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode)
    goto L13576;
  goto ret0;
 L13576:
  if (((enum rtx_code) (x2)->code) == FLOAT_EXTEND)
    goto L4505;
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L4500;
    }
  goto ret0;
 L4505:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case DFmode:
      goto L13577;
    case SFmode:
      goto L13578;
    default:
      break;
    }
  goto ret0;
 L13577:
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L4506;
    }
  goto ret0;
 L4506:
  if (((target_flags & 0x00000001)))
    {
      return 390;
    }
  goto ret0;
 L13578:
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L4512;
    }
  goto ret0;
 L4512:
  if (((target_flags & 0x00000001)))
    {
      return 391;
    }
  goto ret0;
 L4500:
  if (((target_flags & 0x00000001) && reload_completed))
    {
      return 389;
    }
  goto ret0;
 L6869:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode)
    goto L13580;
  goto ret0;
 L13580:
  if (((enum rtx_code) (x2)->code) == FLOAT_EXTEND)
    goto L6875;
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L6870;
    }
  goto ret0;
 L6875:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case DFmode:
      goto L13581;
    case SFmode:
      goto L13582;
    default:
      break;
    }
  goto ret0;
 L13581:
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L6876;
    }
  goto ret0;
 L6876:
  if (((target_flags & 0x00000001) && !(target_flags & 0x00000040)))
    {
      return 589;
    }
  goto ret0;
 L13582:
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L6882;
    }
  goto ret0;
 L6882:
  if (((target_flags & 0x00000001) && !(target_flags & 0x00000040)))
    {
      return 590;
    }
  goto ret0;
 L6870:
  if (((target_flags & 0x00000001) && !(target_flags & 0x00000040)
   && ((target_flags & 0x00000010) || flag_unsafe_math_optimizations) ))
    {
      return 588;
    }
  goto ret0;
 L13561:
  switch ((((((x1)->u.fld[0]).rtvec1))->num_elem))
    {
    case 1:
      goto L13583;
    case 2:
      goto L13585;
    default:
      break;
    }
  goto ret0;
 L13583:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 21L:
      goto L6932;
    case 22L:
      goto L6953;
    case 68L:
      goto L7107;
    case 69L:
      goto L7112;
    default:
      break;
    }
  goto ret0;
 L6932:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L6933;
    }
  goto ret0;
 L6933:
  if (((target_flags & 0x00000001) && !(target_flags & 0x00000040)
   && flag_unsafe_math_optimizations))
    {
      return 596;
    }
  goto ret0;
 L6953:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L6954;
    }
  goto ret0;
 L6954:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 600;
    }
  goto ret0;
 L7107:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L7108;
    }
  goto ret0;
 L7108:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 614;
    }
  goto ret0;
 L7112:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L7113;
    }
  goto ret0;
 L7113:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 615;
    }
  goto ret0;
 L13585:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 65L:
      goto L7062;
    case 66L:
      goto L7077;
    case 67L:
      goto L7092;
    default:
      break;
    }
  goto ret0;
 L7062:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, XFmode))
    {
      operands[2] = x2;
      goto L7063;
    }
  goto ret0;
 L7063:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L7064;
    }
  goto ret0;
 L7064:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 610;
    }
  goto ret0;
 L7077:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, XFmode))
    {
      operands[2] = x2;
      goto L7078;
    }
  goto ret0;
 L7078:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L7079;
    }
  goto ret0;
 L7079:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 611;
    }
  goto ret0;
 L7092:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, XFmode))
    {
      operands[2] = x2;
      goto L7093;
    }
  goto ret0;
 L7093:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L7094;
    }
  goto ret0;
 L7094:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 612;
    }
  goto ret0;
 L7814:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (fcmov_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L7815;
    }
  goto ret0;
 L7815:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L7816;
  goto ret0;
 L7816:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L7817;
  goto ret0;
 L7817:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[2] = x2;
      goto L7818;
    }
  goto ret0;
 L7818:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[3] = x2;
      goto L7819;
    }
  goto ret0;
 L7819:
  if ((((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))))
    {
      return 657;
    }
  goto ret0;
 L6699:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode)
    goto L13591;
  goto ret0;
 L13591:
  switch (((enum rtx_code) (x2)->code))
    {
    case FLOAT:
      goto L6798;
    case FLOAT_EXTEND:
      goto L6812;
    case SUBREG:
    case REG:
      goto L13590;
    default:
      goto ret0;
   }
 L13590:
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L6700;
    }
  goto ret0;
 L6798:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L6799;
    }
  goto ret0;
 L6799:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[2] = x2;
      goto L6800;
    }
  goto ret0;
 L6800:
  if (((target_flags & 0x00000001) && (x86_use_fiop & (1 << ix86_tune))))
    {
      return 576;
    }
  goto ret0;
 L6812:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L6813;
    }
 L6826:
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L6827;
    }
  goto ret0;
 L6813:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[2] = x2;
      goto L6814;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6826;
 L6814:
  if (((target_flags & 0x00000001)))
    {
      return 578;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6826;
 L6827:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == FLOAT_EXTEND)
    goto L6828;
  goto ret0;
 L6828:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L6829;
    }
  goto ret0;
 L6829:
  if (((target_flags & 0x00000001)))
    {
      return 580;
    }
  goto ret0;
 L6700:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode)
    goto L13594;
  goto ret0;
 L13594:
  switch (((enum rtx_code) (x2)->code))
    {
    case FLOAT:
      goto L6806;
    case FLOAT_EXTEND:
      goto L6820;
    case SUBREG:
    case REG:
      goto L13593;
    default:
      goto ret0;
   }
 L13593:
  if (register_operand (x2, XFmode))
    {
      operands[2] = x2;
      goto L6701;
    }
  goto ret0;
 L6806:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L6807;
    }
  goto ret0;
 L6807:
  if (((target_flags & 0x00000001) && (x86_use_fiop & (1 << ix86_tune))))
    {
      return 577;
    }
  goto ret0;
 L6820:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L6821;
    }
  goto ret0;
 L6821:
  if (((target_flags & 0x00000001)))
    {
      return 579;
    }
  goto ret0;
 L6701:
  if (((target_flags & 0x00000001)
   && ((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)))
    {
      return 561;
    }
 L6793:
  if (((target_flags & 0x00000001)
   && !((rtx_class[(int) (((enum rtx_code) (operands[3])->code))]) == RTX_COMM_ARITH)))
    {
      return 575;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_10 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case DImode:
      goto L13625;
    case SImode:
      goto L13626;
    case HImode:
      goto L13629;
    case QImode:
      goto L13632;
    default:
      break;
    }
  goto ret0;
 L13625:
  switch (((enum rtx_code) (x2)->code))
    {
    case PLUS:
      goto L1464;
    case AND:
      goto L2861;
    case ZERO_EXTRACT:
      goto L2942;
    case IOR:
      goto L3291;
    case XOR:
      goto L3674;
    case SUBREG:
    case REG:
    case MEM:
      goto L13624;
    default:
      goto ret0;
   }
 L13624:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L1447;
    }
  goto ret0;
 L1464:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L1465;
    }
  goto ret0;
 L1465:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L1466;
    }
  goto ret0;
 L1466:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (0
   && ix86_match_ccmode (insn, CCGOCmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)
   && ! pic_symbolic_operand (operands[2], VOIDmode))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 200;
    }
  goto ret0;
 L2861:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[0] = x3;
      goto L2862;
    }
  goto ret0;
 L2862:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_szext_general_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L2863;
    }
  goto ret0;
 L2863:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (0 && ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 278;
    }
  goto ret0;
 L2942:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L2943;
    }
  goto ret0;
 L2943:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L2944;
    }
  goto ret0;
 L2944:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (const_int_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L2945;
    }
  goto ret0;
 L2945:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (0
   && ix86_match_ccmode (insn, CCNOmode)
   && ((operands[1])->u.hwint[0]) + ((operands[2])->u.hwint[0]) < (8 * 4)
   && (((operands[1])->u.hwint[0]) + ((operands[2])->u.hwint[0]) <= 32
       || (((operands[1])->u.hwint[0]) + ((operands[2])->u.hwint[0]) == 64
    && ((operands[1])->u.hwint[0]) > 32))
   && (((enum machine_mode) (operands[0])->mode) == SImode
       || ((enum machine_mode) (operands[0])->mode) == DImode
       || ((enum machine_mode) (operands[0])->mode) == HImode
       || ((enum machine_mode) (operands[0])->mode) == QImode)))
    {
      return 287;
    }
  goto ret0;
 L3291:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L3292;
    }
  goto ret0;
 L3292:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L3293;
    }
  goto ret0;
 L3293:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (0
   && ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (IOR, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 307;
    }
  goto ret0;
 L3674:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L3675;
    }
  goto ret0;
 L3675:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L3676;
    }
  goto ret0;
 L3676:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (0
   && ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (XOR, DImode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 329;
    }
  goto ret0;
 L1447:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x86_64_immediate_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L1448;
    }
  goto ret0;
 L1448:
  if ((0
   && ix86_match_ccmode (insn, CCGCmode))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 199;
    }
  goto ret0;
 L13626:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L1538;
    case PLUS:
      goto L1584;
    case AND:
      goto L2868;
    case ZERO_EXTRACT:
      goto L2934;
    case IOR:
      goto L3396;
    case XOR:
      goto L3779;
    case SUBREG:
    case REG:
    case MEM:
      goto L13627;
    default:
      goto ret0;
   }
 L13627:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L1567;
    }
  goto ret0;
 L1538:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L1539;
    }
  goto ret0;
 L1539:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L1540;
    }
  goto ret0;
 L1540:
  if ((ix86_match_ccmode (insn, CCZmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)
   && ! pic_symbolic_operand (operands[2], VOIDmode))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 205;
    }
  goto ret0;
 L1584:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L1585;
    }
  goto ret0;
 L1585:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L1586;
    }
  goto ret0;
 L1586:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCGOCmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)
   && ! pic_symbolic_operand (operands[2], VOIDmode))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 208;
    }
  goto ret0;
 L2868:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L13650;
  goto ret0;
 L13650:
  if (((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L2890;
  if (nonimmediate_operand (x3, SImode))
    {
      operands[0] = x3;
      goto L2869;
    }
  goto ret0;
 L2890:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[0] = x4;
      goto L2891;
    }
  goto ret0;
 L2891:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L2892;
  goto ret0;
 L2892:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L2903;
  goto ret0;
 L2903:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L13651;
 L2893:
  if (const_int_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L2894;
    }
  goto ret0;
 L13651:
  switch (((enum rtx_code) (x3)->code))
    {
    case ZERO_EXTEND:
      goto L2904;
    case ZERO_EXTRACT:
      goto L2926;
    default:
     break;
   }
  goto L2893;
 L2904:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L2905;
    }
 L2915:
  if (register_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L2916;
    }
  goto L2893;
 L2905:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (!0 && ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 283;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L2915;
 L2916:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (0 && ix86_match_ccmode (insn, CCNOmode)))
    {
      return 284;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L2893;
 L2926:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L2927;
    }
  goto L2893;
 L2927:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L2928;
  goto L2893;
 L2928:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L2929;
  goto L2893;
 L2929:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)))
    {
      return 285;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L2893;
 L2894:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)))
    {
      return 282;
    }
  goto ret0;
 L2869:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2870;
    }
  goto ret0;
 L2870:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 279;
    }
  goto ret0;
 L2934:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L2935;
    }
  goto ret0;
 L2935:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2936;
    }
  goto ret0;
 L2936:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (const_int_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2937;
    }
  goto ret0;
 L2937:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)
   && (((enum machine_mode) (operands[0])->mode) == SImode
       || (0 && ((enum machine_mode) (operands[0])->mode) == DImode)
       || ((enum machine_mode) (operands[0])->mode) == HImode
       || ((enum machine_mode) (operands[0])->mode) == QImode)))
    {
      return 286;
    }
  goto ret0;
 L3396:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L3397;
    }
  goto ret0;
 L3397:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L3398;
    }
  goto ret0;
 L3398:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 314;
    }
  goto ret0;
 L3779:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L3780;
    }
  goto ret0;
 L3780:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L3781;
    }
  goto ret0;
 L3781:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 336;
    }
  goto ret0;
 L1567:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const_int_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L1568;
    }
  goto ret0;
 L1568:
  if ((ix86_match_ccmode (insn, CCGCmode)
   && (((operands[2])->u.hwint[0]) & 0xffffffff) != 0x80000000)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 207;
    }
  goto ret0;
 L13629:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L1642;
    case PLUS:
      goto L1675;
    case AND:
      goto L2875;
    case IOR:
      goto L3441;
    case XOR:
      goto L3824;
    case SUBREG:
    case REG:
    case MEM:
      goto L13630;
    default:
      goto ret0;
   }
 L13630:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L1658;
    }
  goto ret0;
 L1642:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L1643;
    }
  goto ret0;
 L1643:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L1644;
    }
  goto ret0;
 L1644:
  if ((ix86_match_ccmode (insn, CCZmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 212;
    }
  goto ret0;
 L1675:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L1676;
    }
  goto ret0;
 L1676:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L1677;
    }
  goto ret0;
 L1677:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCGOCmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 214;
    }
  goto ret0;
 L2875:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[0] = x3;
      goto L2876;
    }
  goto ret0;
 L2876:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L2877;
    }
  goto ret0;
 L2877:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 280;
    }
  goto ret0;
 L3441:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L3442;
    }
  goto ret0;
 L3442:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L3443;
    }
  goto ret0;
 L3443:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 317;
    }
  goto ret0;
 L3824:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L3825;
    }
  goto ret0;
 L3825:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L3826;
    }
  goto ret0;
 L3826:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 339;
    }
  goto ret0;
 L1658:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const_int_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L1659;
    }
  goto ret0;
 L1659:
  if ((ix86_match_ccmode (insn, CCGCmode)
   && (((operands[2])->u.hwint[0]) & 0xffff) != 0x8000)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 213;
    }
  goto ret0;
 L13632:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L1749;
    case PLUS:
      goto L1782;
    case AND:
      goto L2882;
    case IOR:
      goto L3516;
    case XOR:
      goto L4012;
    case SUBREG:
    case REG:
    case MEM:
      goto L13633;
    default:
      goto ret0;
   }
 L13633:
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L1765;
    }
  goto ret0;
 L1749:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L1750;
    }
  goto ret0;
 L1750:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L1751;
    }
  goto ret0;
 L1751:
  if ((ix86_match_ccmode (insn, CCZmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 219;
    }
  goto ret0;
 L1782:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L1783;
    }
  goto ret0;
 L1783:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L1784;
    }
  goto ret0;
 L1784:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCGOCmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 221;
    }
  goto ret0;
 L2882:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[0] = x3;
      goto L2883;
    }
  goto ret0;
 L2883:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L2884;
    }
  goto ret0;
 L2884:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 281;
    }
  goto ret0;
 L3516:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L3517;
    }
  goto ret0;
 L3517:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L3518;
    }
  goto ret0;
 L3518:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 322;
    }
  goto ret0;
 L4012:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L4013;
    }
  goto ret0;
 L4013:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4014;
    }
  goto ret0;
 L4014:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 348;
    }
  goto ret0;
 L1765:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const_int_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L1766;
    }
  goto ret0;
 L1766:
  if ((ix86_match_ccmode (insn, CCGCmode)
   && (((operands[2])->u.hwint[0]) & 0xff) != 0x80)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 220;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_11 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case VEC_DUPLICATE:
      goto L8502;
    case PLUS:
      goto L8534;
    case MINUS:
      goto L8548;
    case MULT:
      goto L8562;
    case DIV:
      goto L8576;
    case UNSPEC:
      goto L13709;
    case SQRT:
      goto L8613;
    case VEC_SELECT:
      goto L8782;
    case SMAX:
      goto L8824;
    case SMIN:
      goto L8838;
    case SUBREG:
    case REG:
      goto L13697;
    default:
      goto ret0;
   }
 L13697:
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8466;
    }
  goto ret0;
 L8502:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (memory_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L8503;
    }
  goto ret0;
 L8503:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const0_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8504;
    }
  goto ret0;
 L8504:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 734;
    }
  goto ret0;
 L8534:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8535;
    }
  goto ret0;
 L8535:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[2] = x3;
      goto L8536;
    }
  goto ret0;
 L8536:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L8537;
  goto ret0;
 L8537:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 739;
    }
  goto ret0;
 L8548:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8549;
    }
  goto ret0;
 L8549:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[2] = x3;
      goto L8550;
    }
  goto ret0;
 L8550:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L8551;
  goto ret0;
 L8551:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 741;
    }
  goto ret0;
 L8562:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8563;
    }
  goto ret0;
 L8563:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[2] = x3;
      goto L8564;
    }
  goto ret0;
 L8564:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L8565;
  goto ret0;
 L8565:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 743;
    }
  goto ret0;
 L8576:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8577;
    }
  goto ret0;
 L8577:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[2] = x3;
      goto L8578;
    }
  goto ret0;
 L8578:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L8579;
  goto ret0;
 L8579:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 745;
    }
  goto ret0;
 L13709:
  if ((((((x2)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L13711;
  goto ret0;
 L13711:
  switch ((((x2)->u.fld[1]).rtint))
    {
    case 42L:
      goto L8589;
    case 43L:
      goto L8601;
    default:
      break;
    }
  goto ret0;
 L8589:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8590;
    }
  goto ret0;
 L8590:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8591;
    }
  goto ret0;
 L8591:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 747;
    }
  goto ret0;
 L8601:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8602;
    }
  goto ret0;
 L8602:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8603;
    }
  goto ret0;
 L8603:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 749;
    }
  goto ret0;
 L8613:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8614;
    }
  goto ret0;
 L8614:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8615;
    }
  goto ret0;
 L8615:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 751;
    }
  goto ret0;
 L8782:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8783;
    }
  goto ret0;
 L8783:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L8784;
  goto ret0;
 L8784:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L13713;
  goto ret0;
 L13713:
  if ((int) ((x4)->u.hwint[0]) == ((x4)->u.hwint[0]))
    switch ((int) ((x4)->u.hwint[0]))
      {
      case 2L:
        goto L8785;
      case 0L:
        goto L8803;
      default:
        break;
      }
  goto ret0;
 L8785:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L8786;
  goto ret0;
 L8786:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L8787;
  goto ret0;
 L8787:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L8788;
  goto ret0;
 L8788:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L8789;
  goto ret0;
 L8789:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[2] = x3;
      goto L8790;
    }
  goto ret0;
 L8790:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L8791;
  goto ret0;
 L8791:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L8792;
  goto ret0;
 L8792:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L8793;
  goto ret0;
 L8793:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L8794;
  goto ret0;
 L8794:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L8795;
  goto ret0;
 L8795:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (5)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 776;
    }
  goto ret0;
 L8803:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L8804;
  goto ret0;
 L8804:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L8805;
  goto ret0;
 L8805:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L8806;
  goto ret0;
 L8806:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L8807;
  goto ret0;
 L8807:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[2] = x3;
      goto L8808;
    }
  goto ret0;
 L8808:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L8809;
  goto ret0;
 L8809:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L8810;
  goto ret0;
 L8810:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L8811;
  goto ret0;
 L8811:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L8812;
  goto ret0;
 L8812:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L8813;
  goto ret0;
 L8813:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (5)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 777;
    }
  goto ret0;
 L8824:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8825;
    }
  goto ret0;
 L8825:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[2] = x3;
      goto L8826;
    }
  goto ret0;
 L8826:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L8827;
  goto ret0;
 L8827:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 779;
    }
  goto ret0;
 L8838:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8839;
    }
  goto ret0;
 L8839:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[2] = x3;
      goto L8840;
    }
  goto ret0;
 L8840:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L8841;
  goto ret0;
 L8841:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 781;
    }
  goto ret0;
 L8466:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SFmode)
    goto L13715;
  goto ret0;
 L13715:
  switch (((enum rtx_code) (x2)->code))
    {
    case VEC_SELECT:
      goto L8467;
    case VEC_DUPLICATE:
      goto L8847;
    case SUBREG:
    case REG:
      goto L13716;
    default:
      goto ret0;
   }
 L13716:
  if (register_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8510;
    }
  goto ret0;
 L8467:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[2] = x3;
      goto L8468;
    }
  goto ret0;
 L8468:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L8469;
  goto ret0;
 L8469:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L8470;
  goto ret0;
 L8470:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L8471;
  goto ret0;
 L8471:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L8472;
  goto ret0;
 L8472:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L8473;
  goto ret0;
 L8473:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT)
    goto L13718;
  goto ret0;
 L13718:
  if ((int) ((x2)->u.hwint[0]) == ((x2)->u.hwint[0]))
    switch ((int) ((x2)->u.hwint[0]))
      {
      case 3L:
        goto L13720;
      case 12L:
        goto L13721;
      default:
        break;
      }
  goto ret0;
 L13720:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 730;
    }
  goto ret0;
 L13721:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 731;
    }
  goto ret0;
 L8847:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case V2SFmode:
      goto L13722;
    case SFmode:
      goto L13723;
    default:
      break;
    }
  goto ret0;
 L13722:
  if (((enum rtx_code) (x3)->code) == FLOAT)
    goto L8848;
  goto ret0;
 L8848:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, V2SImode))
    {
      operands[2] = x4;
      goto L8849;
    }
  goto ret0;
 L8849:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (12)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 782;
    }
  goto ret0;
 L13723:
  if (((enum rtx_code) (x3)->code) == FLOAT)
    goto L8872;
  goto ret0;
 L8872:
  x4 = (((x3)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x4)->mode))
    {
    case SImode:
      goto L13724;
    case DImode:
      goto L13725;
    default:
      break;
    }
  goto ret0;
 L13724:
  if (nonimmediate_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L8873;
    }
  goto ret0;
 L8873:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (14)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 785;
    }
  goto ret0;
 L13725:
  if (nonimmediate_operand (x4, DImode))
    {
      operands[2] = x4;
      goto L8881;
    }
  goto ret0;
 L8881:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (14)]
      && (((target_flags & 0x00004000) != 0) && 0))
    {
      return 786;
    }
  goto ret0;
 L8510:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 735;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_12 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case PLUS:
      goto L8913;
    case SS_PLUS:
      goto L8938;
    case US_PLUS:
      goto L8950;
    case MINUS:
      goto L8962;
    case SS_MINUS:
      goto L8987;
    case US_MINUS:
      goto L8999;
    case ASHIFTRT:
      goto L9099;
    case EQ:
      goto L9158;
    case GT:
      goto L9176;
    case UMAX:
      goto L9194;
    case UMIN:
      goto L9206;
    case VEC_CONCAT:
      goto L9268;
    case VEC_MERGE:
      goto L9292;
    default:
     break;
   }
  goto ret0;
 L8913:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L8914;
    }
  goto ret0;
 L8914:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L8915;
    }
  goto ret0;
 L8915:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 791;
    }
  goto ret0;
 L8938:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L8939;
    }
  goto ret0;
 L8939:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L8940;
    }
  goto ret0;
 L8940:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 795;
    }
  goto ret0;
 L8950:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L8951;
    }
  goto ret0;
 L8951:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L8952;
    }
  goto ret0;
 L8952:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 797;
    }
  goto ret0;
 L8962:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L8963;
    }
  goto ret0;
 L8963:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L8964;
    }
  goto ret0;
 L8964:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 799;
    }
  goto ret0;
 L8987:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L8988;
    }
  goto ret0;
 L8988:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L8989;
    }
  goto ret0;
 L8989:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 803;
    }
  goto ret0;
 L8999:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L9000;
    }
  goto ret0;
 L9000:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L9001;
    }
  goto ret0;
 L9001:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 805;
    }
  goto ret0;
 L9099:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8QImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L9100;
  goto ret0;
 L9100:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V8QImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L9101;
  goto ret0;
 L9101:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, V8QImode))
    {
      operands[1] = x4;
      goto L9102;
    }
  goto ret0;
 L9102:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, V8QImode))
    {
      operands[2] = x4;
      goto L9103;
    }
  goto ret0;
 L9103:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V8QImode
      && ((enum rtx_code) (x3)->code) == CONST_VECTOR
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 8)
    goto L9104;
  goto ret0;
 L9104:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9105;
  goto ret0;
 L9105:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9106;
  goto ret0;
 L9106:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9107;
  goto ret0;
 L9107:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9108;
  goto ret0;
 L9108:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9109;
  goto ret0;
 L9109:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9110;
  goto ret0;
 L9110:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9111;
  goto ret0;
 L9111:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9112;
  goto ret0;
 L9112:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 816;
    }
  goto ret0;
 L9158:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L9159;
    }
  goto ret0;
 L9159:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L9160;
    }
  goto ret0;
 L9160:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 822;
    }
  goto ret0;
 L9176:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L9177;
    }
  goto ret0;
 L9177:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L9178;
    }
  goto ret0;
 L9178:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 825;
    }
  goto ret0;
 L9194:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L9195;
    }
  goto ret0;
 L9195:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L9196;
    }
  goto ret0;
 L9196:
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 828;
    }
  goto ret0;
 L9206:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L9207;
    }
  goto ret0;
 L9207:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L9208;
    }
  goto ret0;
 L9208:
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 830;
    }
  goto ret0;
 L9268:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4QImode)
    goto L13756;
  goto ret0;
 L13756:
  switch (((enum rtx_code) (x2)->code))
    {
    case SS_TRUNCATE:
      goto L9269;
    case US_TRUNCATE:
      goto L9285;
    default:
     break;
   }
  goto ret0;
 L9269:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4HImode))
    {
      operands[1] = x3;
      goto L9270;
    }
  goto ret0;
 L9270:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4QImode
      && ((enum rtx_code) (x2)->code) == SS_TRUNCATE)
    goto L9271;
  goto ret0;
 L9271:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4HImode))
    {
      operands[2] = x3;
      goto L9272;
    }
  goto ret0;
 L9272:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 840;
    }
  goto ret0;
 L9285:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4HImode))
    {
      operands[1] = x3;
      goto L9286;
    }
  goto ret0;
 L9286:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4QImode
      && ((enum rtx_code) (x2)->code) == US_TRUNCATE)
    goto L9287;
  goto ret0;
 L9287:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4HImode))
    {
      operands[2] = x3;
      goto L9288;
    }
  goto ret0;
 L9288:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 842;
    }
  goto ret0;
 L9292:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8QImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9293;
  goto ret0;
 L9293:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V8QImode))
    {
      operands[1] = x3;
      goto L9294;
    }
  goto ret0;
 L9294:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 8)
    goto L9295;
  goto ret0;
 L9295:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L13758;
  goto ret0;
 L13758:
  if ((int) ((x4)->u.hwint[0]) == ((x4)->u.hwint[0]))
    switch ((int) ((x4)->u.hwint[0]))
      {
      case 4L:
        goto L9296;
      case 0L:
        goto L9350;
      default:
        break;
      }
  goto ret0;
 L9296:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L9297;
  goto ret0;
 L9297:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (5)])
    goto L9298;
  goto ret0;
 L9298:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9299;
  goto ret0;
 L9299:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (6)])
    goto L9300;
  goto ret0;
 L9300:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L9301;
  goto ret0;
 L9301:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (7)])
    goto L9302;
  goto ret0;
 L9302:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L9303;
  goto ret0;
 L9303:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8QImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9304;
  goto ret0;
 L9304:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V8QImode))
    {
      operands[2] = x3;
      goto L9305;
    }
  goto ret0;
 L9305:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 8)
    goto L9306;
  goto ret0;
 L9306:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L9307;
  goto ret0;
 L9307:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (4)])
    goto L9308;
  goto ret0;
 L9308:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9309;
  goto ret0;
 L9309:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (5)])
    goto L9310;
  goto ret0;
 L9310:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L9311;
  goto ret0;
 L9311:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (6)])
    goto L9312;
  goto ret0;
 L9312:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L9313;
  goto ret0;
 L9313:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (7)])
    goto L9314;
  goto ret0;
 L9314:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT
      && ((x2)->u.hwint[0]) == 85L
      && (((target_flags & 0x00002000) != 0)))
    {
      return 843;
    }
  goto ret0;
 L9350:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (4)])
    goto L9351;
  goto ret0;
 L9351:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9352;
  goto ret0;
 L9352:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (5)])
    goto L9353;
  goto ret0;
 L9353:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L9354;
  goto ret0;
 L9354:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (6)])
    goto L9355;
  goto ret0;
 L9355:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L9356;
  goto ret0;
 L9356:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (7)])
    goto L9357;
  goto ret0;
 L9357:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8QImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9358;
  goto ret0;
 L9358:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V8QImode))
    {
      operands[2] = x3;
      goto L9359;
    }
  goto ret0;
 L9359:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 8)
    goto L9360;
  goto ret0;
 L9360:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (4)])
    goto L9361;
  goto ret0;
 L9361:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L9362;
  goto ret0;
 L9362:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (5)])
    goto L9363;
  goto ret0;
 L9363:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9364;
  goto ret0;
 L9364:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (6)])
    goto L9365;
  goto ret0;
 L9365:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L9366;
  goto ret0;
 L9366:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (7)])
    goto L9367;
  goto ret0;
 L9367:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L9368;
  goto ret0;
 L9368:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT
      && ((x2)->u.hwint[0]) == 85L
      && (((target_flags & 0x00002000) != 0)))
    {
      return 846;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_13 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case PLUS:
      goto L8919;
    case SS_PLUS:
      goto L8944;
    case US_PLUS:
      goto L8956;
    case MINUS:
      goto L8968;
    case SS_MINUS:
      goto L8993;
    case US_MINUS:
      goto L9005;
    case MULT:
      goto L9011;
    case TRUNCATE:
      goto L9017;
    case ASHIFTRT:
      goto L9116;
    case VEC_MERGE:
      goto L9135;
    case UNSPEC:
      goto L13778;
    case EQ:
      goto L9164;
    case GT:
      goto L9182;
    case SMAX:
      goto L9200;
    case SMIN:
      goto L9212;
    case LSHIFTRT:
      goto L9230;
    case ASHIFT:
      goto L9249;
    case VEC_CONCAT:
      goto L9276;
    default:
     break;
   }
  goto ret0;
 L8919:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L8920;
    }
  goto ret0;
 L8920:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4HImode))
    {
      operands[2] = x2;
      goto L8921;
    }
  goto ret0;
 L8921:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 792;
    }
  goto ret0;
 L8944:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L8945;
    }
  goto ret0;
 L8945:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4HImode))
    {
      operands[2] = x2;
      goto L8946;
    }
  goto ret0;
 L8946:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 796;
    }
  goto ret0;
 L8956:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L8957;
    }
  goto ret0;
 L8957:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4HImode))
    {
      operands[2] = x2;
      goto L8958;
    }
  goto ret0;
 L8958:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 798;
    }
  goto ret0;
 L8968:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L8969;
    }
  goto ret0;
 L8969:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4HImode))
    {
      operands[2] = x2;
      goto L8970;
    }
  goto ret0;
 L8970:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 800;
    }
  goto ret0;
 L8993:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L8994;
    }
  goto ret0;
 L8994:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4HImode))
    {
      operands[2] = x2;
      goto L8995;
    }
  goto ret0;
 L8995:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 804;
    }
  goto ret0;
 L9005:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L9006;
    }
  goto ret0;
 L9006:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4HImode))
    {
      operands[2] = x2;
      goto L9007;
    }
  goto ret0;
 L9007:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 806;
    }
  goto ret0;
 L9011:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L9012;
    }
  goto ret0;
 L9012:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4HImode))
    {
      operands[2] = x2;
      goto L9013;
    }
  goto ret0;
 L9013:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 807;
    }
  goto ret0;
 L9017:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L9018;
  goto ret0;
 L9018:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V4SImode
      && ((enum rtx_code) (x3)->code) == MULT)
    goto L9019;
  goto ret0;
 L9019:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V4SImode)
    goto L13779;
  goto ret0;
 L13779:
  switch (((enum rtx_code) (x4)->code))
    {
    case SIGN_EXTEND:
      goto L9020;
    case ZERO_EXTEND:
      goto L9030;
    default:
     break;
   }
  goto ret0;
 L9020:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, V4HImode))
    {
      operands[1] = x5;
      goto L9021;
    }
  goto ret0;
 L9021:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V4SImode
      && ((enum rtx_code) (x4)->code) == SIGN_EXTEND)
    goto L9022;
  goto ret0;
 L9022:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, V4HImode))
    {
      operands[2] = x5;
      goto L9023;
    }
  goto ret0;
 L9023:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (16)]
      && (((target_flags & 0x00002000) != 0)))
    {
      return 808;
    }
  goto ret0;
 L9030:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, V4HImode))
    {
      operands[1] = x5;
      goto L9031;
    }
  goto ret0;
 L9031:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V4SImode
      && ((enum rtx_code) (x4)->code) == ZERO_EXTEND)
    goto L9032;
  goto ret0;
 L9032:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, V4HImode))
    {
      operands[2] = x5;
      goto L9033;
    }
  goto ret0;
 L9033:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (16)]
      && (((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 809;
    }
  goto ret0;
 L9116:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4HImode)
    goto L13781;
  goto ret0;
 L13781:
  if (((enum rtx_code) (x2)->code) == PLUS)
    goto L9117;
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L9219;
    }
  goto ret0;
 L9117:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V4HImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L9118;
  goto ret0;
 L9118:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, V4HImode))
    {
      operands[1] = x4;
      goto L9119;
    }
  goto ret0;
 L9119:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, V4HImode))
    {
      operands[2] = x4;
      goto L9120;
    }
  goto ret0;
 L9120:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V4HImode
      && ((enum rtx_code) (x3)->code) == CONST_VECTOR
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L9121;
  goto ret0;
 L9121:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9122;
  goto ret0;
 L9122:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9123;
  goto ret0;
 L9123:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9124;
  goto ret0;
 L9124:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9125;
  goto ret0;
 L9125:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 817;
    }
  goto ret0;
 L9219:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L9220;
    }
  goto ret0;
 L9220:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 832;
    }
  goto ret0;
 L9135:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4HImode)
    goto L13784;
  goto ret0;
 L13784:
  if (((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9319;
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L9136;
    }
  goto ret0;
 L9319:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4HImode))
    {
      operands[1] = x3;
      goto L9320;
    }
  goto ret0;
 L9320:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L9321;
  goto ret0;
 L9321:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L13785;
  goto ret0;
 L13785:
  if ((int) ((x4)->u.hwint[0]) == ((x4)->u.hwint[0]))
    switch ((int) ((x4)->u.hwint[0]))
      {
      case 0L:
        goto L9322;
      case 2L:
        goto L9376;
      default:
        break;
      }
  goto ret0;
 L9322:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L9323;
  goto ret0;
 L9323:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9324;
  goto ret0;
 L9324:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L9325;
  goto ret0;
 L9325:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4HImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9326;
  goto ret0;
 L9326:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4HImode))
    {
      operands[2] = x3;
      goto L9327;
    }
  goto ret0;
 L9327:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L9328;
  goto ret0;
 L9328:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L9329;
  goto ret0;
 L9329:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L9330;
  goto ret0;
 L9330:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L9331;
  goto ret0;
 L9331:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9332;
  goto ret0;
 L9332:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (5)]
      && (((target_flags & 0x00002000) != 0)))
    {
      return 844;
    }
  goto ret0;
 L9376:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L9377;
  goto ret0;
 L9377:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L9378;
  goto ret0;
 L9378:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9379;
  goto ret0;
 L9379:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4HImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9380;
  goto ret0;
 L9380:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4HImode))
    {
      operands[2] = x3;
      goto L9381;
    }
  goto ret0;
 L9381:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L9382;
  goto ret0;
 L9382:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L9383;
  goto ret0;
 L9383:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L9384;
  goto ret0;
 L9384:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9385;
  goto ret0;
 L9385:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L9386;
  goto ret0;
 L9386:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (5)]
      && (((target_flags & 0x00002000) != 0)))
    {
      return 847;
    }
  goto ret0;
 L9136:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4HImode
      && ((enum rtx_code) (x2)->code) == VEC_DUPLICATE)
    goto L9137;
  goto ret0;
 L9137:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == HImode
      && ((enum rtx_code) (x3)->code) == TRUNCATE)
    goto L9138;
  goto ret0;
 L9138:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L9139;
    }
  goto ret0;
 L9139:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (const_0_to_15_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L9140;
    }
  goto ret0;
 L9140:
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 819;
    }
  goto ret0;
 L13778:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x1)->u.fld[1]).rtint) == 41)
    goto L9152;
  goto ret0;
 L9152:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L9153;
    }
  goto ret0;
 L9153:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (immediate_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L9154;
    }
  goto ret0;
 L9154:
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 821;
    }
  goto ret0;
 L9164:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L9165;
    }
  goto ret0;
 L9165:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4HImode))
    {
      operands[2] = x2;
      goto L9166;
    }
  goto ret0;
 L9166:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 823;
    }
  goto ret0;
 L9182:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L9183;
    }
  goto ret0;
 L9183:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4HImode))
    {
      operands[2] = x2;
      goto L9184;
    }
  goto ret0;
 L9184:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 826;
    }
  goto ret0;
 L9200:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L9201;
    }
  goto ret0;
 L9201:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4HImode))
    {
      operands[2] = x2;
      goto L9202;
    }
  goto ret0;
 L9202:
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 829;
    }
  goto ret0;
 L9212:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L9213;
    }
  goto ret0;
 L9213:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4HImode))
    {
      operands[2] = x2;
      goto L9214;
    }
  goto ret0;
 L9214:
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 831;
    }
  goto ret0;
 L9230:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L9231;
    }
  goto ret0;
 L9231:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L9232;
    }
  goto ret0;
 L9232:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 834;
    }
  goto ret0;
 L9249:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4HImode))
    {
      operands[1] = x2;
      goto L9250;
    }
  goto ret0;
 L9250:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L9251;
    }
  goto ret0;
 L9251:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 837;
    }
  goto ret0;
 L9276:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2HImode
      && ((enum rtx_code) (x2)->code) == SS_TRUNCATE)
    goto L9277;
  goto ret0;
 L9277:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2SImode))
    {
      operands[1] = x3;
      goto L9278;
    }
  goto ret0;
 L9278:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2HImode
      && ((enum rtx_code) (x2)->code) == SS_TRUNCATE)
    goto L9279;
  goto ret0;
 L9279:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2SImode))
    {
      operands[2] = x3;
      goto L9280;
    }
  goto ret0;
 L9280:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 841;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_14 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case PLUS:
      goto L9471;
    case MINUS:
      goto L9477;
    case SMAX:
      goto L9507;
    case SMIN:
      goto L9513;
    case MULT:
      goto L9519;
    case VEC_CONCAT:
      goto L9574;
    case FLOAT:
      goto L9637;
    case UNSPEC:
      goto L13856;
    case VEC_SELECT:
      goto L9715;
    default:
     break;
   }
  goto ret0;
 L9471:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9472;
    }
  goto ret0;
 L9472:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[2] = x2;
      goto L9473;
    }
  goto ret0;
 L9473:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 854;
    }
  goto ret0;
 L9477:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2SFmode)
    goto L13861;
  goto ret0;
 L13861:
  if (register_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9478;
    }
 L13862:
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[2] = x2;
      goto L9484;
    }
  goto ret0;
 L9478:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[2] = x2;
      goto L9479;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13862;
 L9479:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 855;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13862;
 L9484:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9485;
    }
  goto ret0;
 L9485:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 856;
    }
  goto ret0;
 L9507:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9508;
    }
  goto ret0;
 L9508:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[2] = x2;
      goto L9509;
    }
  goto ret0;
 L9509:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 860;
    }
  goto ret0;
 L9513:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9514;
    }
  goto ret0;
 L9514:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[2] = x2;
      goto L9515;
    }
  goto ret0;
 L9515:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 861;
    }
  goto ret0;
 L9519:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9520;
    }
  goto ret0;
 L9520:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[2] = x2;
      goto L9521;
    }
  goto ret0;
 L9521:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 862;
    }
  goto ret0;
 L9574:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L13863;
  goto ret0;
 L13863:
  switch (((enum rtx_code) (x2)->code))
    {
    case PLUS:
      goto L9575;
    case MINUS:
      goto L9596;
    default:
     break;
   }
  goto ret0;
 L9575:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L9576;
  goto ret0;
 L9576:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, V2SFmode))
    {
      operands[1] = x4;
      goto L9577;
    }
  goto ret0;
 L9577:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9578;
  goto ret0;
 L9578:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (0)])
    goto L9579;
  goto ret0;
 L9579:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L9580;
  goto ret0;
 L9580:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L9581;
  goto ret0;
 L9581:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9582;
  goto ret0;
 L9582:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (1)])
    goto L9583;
  goto ret0;
 L9583:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L9584;
  goto ret0;
 L9584:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L9585;
  goto ret0;
 L9585:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, V2SFmode))
    {
      operands[2] = x4;
      goto L9586;
    }
  goto ret0;
 L9586:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9587;
  goto ret0;
 L9587:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (0)])
    goto L9588;
  goto ret0;
 L9588:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L9589;
  goto ret0;
 L9589:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[2]))
    goto L9590;
  goto ret0;
 L9590:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9591;
  goto ret0;
 L9591:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00020000) != 0)))
    {
      return 866;
    }
  goto ret0;
 L9596:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L9597;
  goto ret0;
 L9597:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, V2SFmode))
    {
      operands[1] = x4;
      goto L9598;
    }
  goto ret0;
 L9598:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9599;
  goto ret0;
 L9599:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (0)])
    goto L9600;
  goto ret0;
 L9600:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L9601;
  goto ret0;
 L9601:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L9602;
  goto ret0;
 L9602:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9603;
  goto ret0;
 L9603:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (1)])
    goto L9604;
  goto ret0;
 L9604:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L13865;
  goto ret0;
 L13865:
  switch (((enum rtx_code) (x2)->code))
    {
    case MINUS:
      goto L9605;
    case PLUS:
      goto L9626;
    default:
     break;
   }
  goto ret0;
 L9605:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L9606;
  goto ret0;
 L9606:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, V2SFmode))
    {
      operands[2] = x4;
      goto L9607;
    }
  goto ret0;
 L9607:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9608;
  goto ret0;
 L9608:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (0)])
    goto L9609;
  goto ret0;
 L9609:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L9610;
  goto ret0;
 L9610:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[2]))
    goto L9611;
  goto ret0;
 L9611:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9612;
  goto ret0;
 L9612:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00040000) != 0)))
    {
      return 867;
    }
  goto ret0;
 L9626:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L9627;
  goto ret0;
 L9627:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, V2SFmode))
    {
      operands[2] = x4;
      goto L9628;
    }
  goto ret0;
 L9628:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9629;
  goto ret0;
 L9629:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (0)])
    goto L9630;
  goto ret0;
 L9630:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SFmode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L9631;
  goto ret0;
 L9631:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[2]))
    goto L9632;
  goto ret0;
 L9632:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9633;
  goto ret0;
 L9633:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00040000) != 0)))
    {
      return 868;
    }
  goto ret0;
 L9637:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2SImode)
    goto L13867;
  goto ret0;
 L13867:
  if (((enum rtx_code) (x2)->code) == VEC_CONCAT)
    goto L9638;
  if (nonimmediate_operand (x2, V2SImode))
    {
      operands[1] = x2;
      goto L9654;
    }
  goto ret0;
 L9638:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L9639;
  goto ret0;
 L9639:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == HImode
      && ((enum rtx_code) (x4)->code) == TRUNCATE)
    goto L9640;
  goto ret0;
 L9640:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x5)->mode) == SImode
      && ((enum rtx_code) (x5)->code) == VEC_SELECT)
    goto L9641;
  goto ret0;
 L9641:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, V2SImode))
    {
      operands[1] = x6;
      goto L9642;
    }
  goto ret0;
 L9642:
  x6 = (((x5)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x6)->code) == PARALLEL
      && (((((x6)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9643;
  goto ret0;
 L9643:
  x7 = (((((x6)->u.fld[0]).rtvec1))->elem[0]);
  if (x7 == const_int_rtx[64 + (0)])
    goto L9644;
  goto ret0;
 L9644:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L9645;
  goto ret0;
 L9645:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == HImode
      && ((enum rtx_code) (x4)->code) == TRUNCATE)
    goto L9646;
  goto ret0;
 L9646:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x5)->mode) == SImode
      && ((enum rtx_code) (x5)->code) == VEC_SELECT)
    goto L9647;
  goto ret0;
 L9647:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (rtx_equal_p (x6, operands[1]))
    goto L9648;
  goto ret0;
 L9648:
  x6 = (((x5)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x6)->code) == PARALLEL
      && (((((x6)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9649;
  goto ret0;
 L9649:
  x7 = (((((x6)->u.fld[0]).rtvec1))->elem[0]);
  if (x7 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00040000) != 0)))
    {
      return 869;
    }
  goto ret0;
 L9654:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 870;
    }
  goto ret0;
 L13856:
  switch ((((((x1)->u.fld[0]).rtvec1))->num_elem))
    {
    case 1:
      goto L13869;
    case 2:
      goto L13870;
    default:
      break;
    }
  goto ret0;
 L13869:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 50L:
      goto L9664;
    case 53L:
      goto L9681;
    default:
      break;
    }
  goto ret0;
 L9664:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9665;
    }
  goto ret0;
 L9665:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 872;
    }
  goto ret0;
 L9681:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9682;
    }
  goto ret0;
 L9682:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 875;
    }
  goto ret0;
 L13870:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 51L:
      goto L9669;
    case 52L:
      goto L9675;
    case 54L:
      goto L9686;
    default:
      break;
    }
  goto ret0;
 L9669:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9670;
    }
  goto ret0;
 L9670:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[2] = x2;
      goto L9671;
    }
  goto ret0;
 L9671:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 873;
    }
  goto ret0;
 L9675:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9676;
    }
  goto ret0;
 L9676:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[2] = x2;
      goto L9677;
    }
  goto ret0;
 L9677:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 874;
    }
  goto ret0;
 L9686:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9687;
    }
  goto ret0;
 L9687:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[2] = x2;
      goto L9688;
    }
  goto ret0;
 L9688:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 876;
    }
  goto ret0;
 L9715:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9716;
    }
  goto ret0;
 L9716:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == PARALLEL
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L9717;
  goto ret0;
 L9717:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (1)])
    goto L9718;
  goto ret0;
 L9718:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (x3 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00040000) != 0)))
    {
      return 879;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_15 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case PLUS:
      goto L9740;
    case VEC_MERGE:
      goto L9746;
    case MINUS:
      goto L9754;
    case MULT:
      goto L9768;
    case DIV:
      goto L9782;
    case SMAX:
      goto L9796;
    case SMIN:
      goto L9810;
    case SQRT:
      goto L9824;
    case FLOAT:
      goto L9944;
    case FLOAT_EXTEND:
      goto L10056;
    case VEC_CONCAT:
      goto L10517;
    case UNSPEC:
      goto L13896;
    default:
     break;
   }
  goto ret0;
 L9740:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L9741;
    }
  goto ret0;
 L9741:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L9742;
    }
  goto ret0;
 L9742:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 884;
    }
  goto ret0;
 L9746:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2DFmode)
    goto L13897;
  goto ret0;
 L13897:
  switch (((enum rtx_code) (x2)->code))
    {
    case PLUS:
      goto L9747;
    case MINUS:
      goto L9761;
    case MULT:
      goto L9775;
    case DIV:
      goto L9789;
    case SMAX:
      goto L9803;
    case SMIN:
      goto L9817;
    case SQRT:
      goto L9830;
    case VEC_DUPLICATE:
      goto L10829;
    case SUBREG:
    case REG:
      goto L13904;
    default:
      goto ret0;
   }
 L13904:
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L10012;
    }
  goto ret0;
 L9747:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9748;
    }
  goto ret0;
 L9748:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V2DFmode))
    {
      operands[2] = x3;
      goto L9749;
    }
  goto ret0;
 L9749:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L9750;
  goto ret0;
 L9750:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 885;
    }
  goto ret0;
 L9761:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9762;
    }
  goto ret0;
 L9762:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V2DFmode))
    {
      operands[2] = x3;
      goto L9763;
    }
  goto ret0;
 L9763:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L9764;
  goto ret0;
 L9764:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 887;
    }
  goto ret0;
 L9775:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9776;
    }
  goto ret0;
 L9776:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V2DFmode))
    {
      operands[2] = x3;
      goto L9777;
    }
  goto ret0;
 L9777:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L9778;
  goto ret0;
 L9778:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 889;
    }
  goto ret0;
 L9789:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9790;
    }
  goto ret0;
 L9790:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V2DFmode))
    {
      operands[2] = x3;
      goto L9791;
    }
  goto ret0;
 L9791:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L9792;
  goto ret0;
 L9792:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 891;
    }
  goto ret0;
 L9803:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9804;
    }
  goto ret0;
 L9804:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V2DFmode))
    {
      operands[2] = x3;
      goto L9805;
    }
  goto ret0;
 L9805:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L9806;
  goto ret0;
 L9806:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 893;
    }
  goto ret0;
 L9817:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9818;
    }
  goto ret0;
 L9818:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V2DFmode))
    {
      operands[2] = x3;
      goto L9819;
    }
  goto ret0;
 L9819:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L9820;
  goto ret0;
 L9820:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 895;
    }
  goto ret0;
 L9830:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9831;
    }
  goto ret0;
 L9831:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L9832;
    }
  goto ret0;
 L9832:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 897;
    }
  goto ret0;
 L10829:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (memory_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L10830;
    }
  goto ret0;
 L10830:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const0_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L10831;
    }
  goto ret0;
 L10831:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 1014;
    }
  goto ret0;
 L10012:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2DFmode)
    goto L13906;
  goto ret0;
 L13906:
  switch (((enum rtx_code) (x2)->code))
    {
    case VEC_DUPLICATE:
      goto L10013;
    case FLOAT_EXTEND:
      goto L10037;
    default:
     break;
   }
  goto ret0;
 L10013:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DFmode
      && ((enum rtx_code) (x3)->code) == FLOAT)
    goto L10014;
  goto ret0;
 L10014:
  x4 = (((x3)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x4)->mode))
    {
    case SImode:
      goto L13908;
    case DImode:
      goto L13909;
    default:
      break;
    }
  goto ret0;
 L13908:
  if (nonimmediate_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L10015;
    }
  goto ret0;
 L10015:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (2)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 924;
    }
  goto ret0;
 L13909:
  if (nonimmediate_operand (x4, DImode))
    {
      operands[2] = x4;
      goto L10023;
    }
  goto ret0;
 L10023:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (2)]
      && (((target_flags & 0x00008000) != 0) && 0))
    {
      return 925;
    }
  goto ret0;
 L10037:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V2SFmode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L10038;
  goto ret0;
 L10038:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, V4SFmode))
    {
      operands[2] = x4;
      goto L10039;
    }
  goto ret0;
 L10039:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L10040;
  goto ret0;
 L10040:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (0)])
    goto L10041;
  goto ret0;
 L10041:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[1]);
  if (x5 == const_int_rtx[64 + (1)])
    goto L10042;
  goto ret0;
 L10042:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (2)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 927;
    }
  goto ret0;
 L9754:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L9755;
    }
  goto ret0;
 L9755:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L9756;
    }
  goto ret0;
 L9756:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 886;
    }
  goto ret0;
 L9768:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L9769;
    }
  goto ret0;
 L9769:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L9770;
    }
  goto ret0;
 L9770:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 888;
    }
  goto ret0;
 L9782:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L9783;
    }
  goto ret0;
 L9783:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L9784;
    }
  goto ret0;
 L9784:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 890;
    }
  goto ret0;
 L9796:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L9797;
    }
  goto ret0;
 L9797:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L9798;
    }
  goto ret0;
 L9798:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 892;
    }
  goto ret0;
 L9810:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L9811;
    }
  goto ret0;
 L9811:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L9812;
    }
  goto ret0;
 L9812:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 894;
    }
  goto ret0;
 L9824:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L9825;
    }
  goto ret0;
 L9825:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 896;
    }
  goto ret0;
 L9944:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2SImode)
    goto L13910;
  goto ret0;
 L13910:
  if (((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9945;
  if (nonimmediate_operand (x2, V2SImode))
    {
      operands[1] = x2;
      goto L9979;
    }
  goto ret0;
 L9945:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, V4SImode))
    {
      operands[1] = x3;
      goto L9946;
    }
  goto ret0;
 L9946:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L9947;
  goto ret0;
 L9947:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L9948;
  goto ret0;
 L9948:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 914;
    }
  goto ret0;
 L9979:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 919;
    }
  goto ret0;
 L10056:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2SFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10057;
  goto ret0;
 L10057:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L10058;
    }
  goto ret0;
 L10058:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L10059;
  goto ret0;
 L10059:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10060;
  goto ret0;
 L10060:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 929;
    }
  goto ret0;
 L10517:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10518;
  goto ret0;
 L10518:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L10519;
    }
  goto ret0;
 L10519:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10520;
  goto ret0;
 L10520:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L13912;
  goto ret0;
 L13912:
  if ((int) ((x4)->u.hwint[0]) == ((x4)->u.hwint[0]))
    switch ((int) ((x4)->u.hwint[0]))
      {
      case 1L:
        goto L10521;
      case 0L:
        goto L10532;
      default:
        break;
      }
  goto ret0;
 L10521:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10522;
  goto ret0;
 L10522:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[2] = x3;
      goto L10523;
    }
  goto ret0;
 L10523:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10524;
  goto ret0;
 L10524:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 989;
    }
  goto ret0;
 L10532:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10533;
  goto ret0;
 L10533:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[2] = x3;
      goto L10534;
    }
  goto ret0;
 L10534:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10535;
  goto ret0;
 L10535:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 990;
    }
  goto ret0;
 L13896:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 3
      && (((x1)->u.fld[1]).rtint) == 41)
    goto L10847;
  goto ret0;
 L10847:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L10848;
    }
  goto ret0;
 L10848:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L10849;
    }
  goto ret0;
 L10849:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[2]);
  if (immediate_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L10850;
    }
  goto ret0;
 L10850:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 1017;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_16 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case PLUS:
      goto L10064;
    case SS_PLUS:
      goto L10088;
    case US_PLUS:
      goto L10100;
    case MINUS:
      goto L10112;
    case SS_MINUS:
      goto L10136;
    case US_MINUS:
      goto L10148;
    case ASHIFTRT:
      goto L10254;
    case EQ:
      goto L10337;
    case GT:
      goto L10355;
    case UMAX:
      goto L10373;
    case UMIN:
      goto L10385;
    case VEC_CONCAT:
      goto L10539;
    case VEC_MERGE:
      goto L10563;
    default:
     break;
   }
  goto ret0;
 L10064:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10065;
    }
  goto ret0;
 L10065:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L10066;
    }
  goto ret0;
 L10066:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 930;
    }
  goto ret0;
 L10088:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10089;
    }
  goto ret0;
 L10089:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L10090;
    }
  goto ret0;
 L10090:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 934;
    }
  goto ret0;
 L10100:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10101;
    }
  goto ret0;
 L10101:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L10102;
    }
  goto ret0;
 L10102:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 936;
    }
  goto ret0;
 L10112:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10113;
    }
  goto ret0;
 L10113:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L10114;
    }
  goto ret0;
 L10114:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 938;
    }
  goto ret0;
 L10136:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10137;
    }
  goto ret0;
 L10137:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L10138;
    }
  goto ret0;
 L10138:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 942;
    }
  goto ret0;
 L10148:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10149;
    }
  goto ret0;
 L10149:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L10150;
    }
  goto ret0;
 L10150:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 944;
    }
  goto ret0;
 L10254:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V16QImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L10255;
  goto ret0;
 L10255:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V16QImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L10256;
  goto ret0;
 L10256:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, V16QImode))
    {
      operands[1] = x4;
      goto L10257;
    }
  goto ret0;
 L10257:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, V16QImode))
    {
      operands[2] = x4;
      goto L10258;
    }
  goto ret0;
 L10258:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V16QImode
      && ((enum rtx_code) (x3)->code) == CONST_VECTOR
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 16)
    goto L10259;
  goto ret0;
 L10259:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10260;
  goto ret0;
 L10260:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10261;
  goto ret0;
 L10261:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10262;
  goto ret0;
 L10262:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10263;
  goto ret0;
 L10263:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10264;
  goto ret0;
 L10264:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10265;
  goto ret0;
 L10265:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10266;
  goto ret0;
 L10266:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10267;
  goto ret0;
 L10267:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[8]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10268;
  goto ret0;
 L10268:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[9]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10269;
  goto ret0;
 L10269:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[10]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10270;
  goto ret0;
 L10270:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[11]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10271;
  goto ret0;
 L10271:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[12]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10272;
  goto ret0;
 L10272:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[13]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10273;
  goto ret0;
 L10273:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[14]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10274;
  goto ret0;
 L10274:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[15]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10275;
  goto ret0;
 L10275:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 953;
    }
  goto ret0;
 L10337:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10338;
    }
  goto ret0;
 L10338:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L10339;
    }
  goto ret0;
 L10339:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 961;
    }
  goto ret0;
 L10355:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10356;
    }
  goto ret0;
 L10356:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L10357;
    }
  goto ret0;
 L10357:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 964;
    }
  goto ret0;
 L10373:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10374;
    }
  goto ret0;
 L10374:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L10375;
    }
  goto ret0;
 L10375:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 967;
    }
  goto ret0;
 L10385:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10386;
    }
  goto ret0;
 L10386:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L10387;
    }
  goto ret0;
 L10387:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 969;
    }
  goto ret0;
 L10539:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8QImode)
    goto L13971;
  goto ret0;
 L13971:
  switch (((enum rtx_code) (x2)->code))
    {
    case SS_TRUNCATE:
      goto L10540;
    case US_TRUNCATE:
      goto L10556;
    default:
     break;
   }
  goto ret0;
 L10540:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V8HImode))
    {
      operands[1] = x3;
      goto L10541;
    }
  goto ret0;
 L10541:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8QImode
      && ((enum rtx_code) (x2)->code) == SS_TRUNCATE)
    goto L10542;
  goto ret0;
 L10542:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V8HImode))
    {
      operands[2] = x3;
      goto L10543;
    }
  goto ret0;
 L10543:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 991;
    }
  goto ret0;
 L10556:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V8HImode))
    {
      operands[1] = x3;
      goto L10557;
    }
  goto ret0;
 L10557:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8QImode
      && ((enum rtx_code) (x2)->code) == US_TRUNCATE)
    goto L10558;
  goto ret0;
 L10558:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V8HImode))
    {
      operands[2] = x3;
      goto L10559;
    }
  goto ret0;
 L10559:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 993;
    }
  goto ret0;
 L10563:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V16QImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10564;
  goto ret0;
 L10564:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V16QImode))
    {
      operands[1] = x3;
      goto L10565;
    }
  goto ret0;
 L10565:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 16)
    goto L10566;
  goto ret0;
 L10566:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L13973;
  goto ret0;
 L13973:
  if ((int) ((x4)->u.hwint[0]) == ((x4)->u.hwint[0]))
    switch ((int) ((x4)->u.hwint[0]))
      {
      case 8L:
        goto L10567;
      case 0L:
        goto L10653;
      default:
        break;
      }
  goto ret0;
 L10567:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10568;
  goto ret0;
 L10568:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (9)])
    goto L10569;
  goto ret0;
 L10569:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10570;
  goto ret0;
 L10570:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (10)])
    goto L10571;
  goto ret0;
 L10571:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L10572;
  goto ret0;
 L10572:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (11)])
    goto L10573;
  goto ret0;
 L10573:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L10574;
  goto ret0;
 L10574:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[8]);
  if (x4 == const_int_rtx[64 + (12)])
    goto L10575;
  goto ret0;
 L10575:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[9]);
  if (x4 == const_int_rtx[64 + (4)])
    goto L10576;
  goto ret0;
 L10576:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[10]);
  if (x4 == const_int_rtx[64 + (13)])
    goto L10577;
  goto ret0;
 L10577:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[11]);
  if (x4 == const_int_rtx[64 + (5)])
    goto L10578;
  goto ret0;
 L10578:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[12]);
  if (x4 == const_int_rtx[64 + (14)])
    goto L10579;
  goto ret0;
 L10579:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[13]);
  if (x4 == const_int_rtx[64 + (6)])
    goto L10580;
  goto ret0;
 L10580:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[14]);
  if (x4 == const_int_rtx[64 + (15)])
    goto L10581;
  goto ret0;
 L10581:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[15]);
  if (x4 == const_int_rtx[64 + (7)])
    goto L10582;
  goto ret0;
 L10582:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V16QImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10583;
  goto ret0;
 L10583:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V16QImode))
    {
      operands[2] = x3;
      goto L10584;
    }
  goto ret0;
 L10584:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 16)
    goto L10585;
  goto ret0;
 L10585:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10586;
  goto ret0;
 L10586:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (8)])
    goto L10587;
  goto ret0;
 L10587:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10588;
  goto ret0;
 L10588:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (9)])
    goto L10589;
  goto ret0;
 L10589:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L10590;
  goto ret0;
 L10590:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (10)])
    goto L10591;
  goto ret0;
 L10591:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L10592;
  goto ret0;
 L10592:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (11)])
    goto L10593;
  goto ret0;
 L10593:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[8]);
  if (x4 == const_int_rtx[64 + (4)])
    goto L10594;
  goto ret0;
 L10594:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[9]);
  if (x4 == const_int_rtx[64 + (12)])
    goto L10595;
  goto ret0;
 L10595:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[10]);
  if (x4 == const_int_rtx[64 + (5)])
    goto L10596;
  goto ret0;
 L10596:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[11]);
  if (x4 == const_int_rtx[64 + (13)])
    goto L10597;
  goto ret0;
 L10597:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[12]);
  if (x4 == const_int_rtx[64 + (6)])
    goto L10598;
  goto ret0;
 L10598:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[13]);
  if (x4 == const_int_rtx[64 + (14)])
    goto L10599;
  goto ret0;
 L10599:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[14]);
  if (x4 == const_int_rtx[64 + (7)])
    goto L10600;
  goto ret0;
 L10600:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[15]);
  if (x4 == const_int_rtx[64 + (15)])
    goto L10601;
  goto ret0;
 L10601:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT
      && ((x2)->u.hwint[0]) == 21845L
      && (((target_flags & 0x00008000) != 0)))
    {
      return 994;
    }
  goto ret0;
 L10653:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (8)])
    goto L10654;
  goto ret0;
 L10654:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10655;
  goto ret0;
 L10655:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (9)])
    goto L10656;
  goto ret0;
 L10656:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L10657;
  goto ret0;
 L10657:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (10)])
    goto L10658;
  goto ret0;
 L10658:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L10659;
  goto ret0;
 L10659:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (11)])
    goto L10660;
  goto ret0;
 L10660:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[8]);
  if (x4 == const_int_rtx[64 + (4)])
    goto L10661;
  goto ret0;
 L10661:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[9]);
  if (x4 == const_int_rtx[64 + (12)])
    goto L10662;
  goto ret0;
 L10662:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[10]);
  if (x4 == const_int_rtx[64 + (5)])
    goto L10663;
  goto ret0;
 L10663:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[11]);
  if (x4 == const_int_rtx[64 + (13)])
    goto L10664;
  goto ret0;
 L10664:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[12]);
  if (x4 == const_int_rtx[64 + (6)])
    goto L10665;
  goto ret0;
 L10665:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[13]);
  if (x4 == const_int_rtx[64 + (14)])
    goto L10666;
  goto ret0;
 L10666:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[14]);
  if (x4 == const_int_rtx[64 + (7)])
    goto L10667;
  goto ret0;
 L10667:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[15]);
  if (x4 == const_int_rtx[64 + (15)])
    goto L10668;
  goto ret0;
 L10668:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V16QImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10669;
  goto ret0;
 L10669:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V16QImode))
    {
      operands[2] = x3;
      goto L10670;
    }
  goto ret0;
 L10670:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 16)
    goto L10671;
  goto ret0;
 L10671:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (8)])
    goto L10672;
  goto ret0;
 L10672:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10673;
  goto ret0;
 L10673:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (9)])
    goto L10674;
  goto ret0;
 L10674:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10675;
  goto ret0;
 L10675:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (10)])
    goto L10676;
  goto ret0;
 L10676:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L10677;
  goto ret0;
 L10677:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (11)])
    goto L10678;
  goto ret0;
 L10678:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L10679;
  goto ret0;
 L10679:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[8]);
  if (x4 == const_int_rtx[64 + (12)])
    goto L10680;
  goto ret0;
 L10680:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[9]);
  if (x4 == const_int_rtx[64 + (4)])
    goto L10681;
  goto ret0;
 L10681:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[10]);
  if (x4 == const_int_rtx[64 + (13)])
    goto L10682;
  goto ret0;
 L10682:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[11]);
  if (x4 == const_int_rtx[64 + (5)])
    goto L10683;
  goto ret0;
 L10683:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[12]);
  if (x4 == const_int_rtx[64 + (14)])
    goto L10684;
  goto ret0;
 L10684:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[13]);
  if (x4 == const_int_rtx[64 + (6)])
    goto L10685;
  goto ret0;
 L10685:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[14]);
  if (x4 == const_int_rtx[64 + (15)])
    goto L10686;
  goto ret0;
 L10686:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[15]);
  if (x4 == const_int_rtx[64 + (7)])
    goto L10687;
  goto ret0;
 L10687:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT
      && ((x2)->u.hwint[0]) == 21845L
      && (((target_flags & 0x00008000) != 0)))
    {
      return 997;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_17 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case FIX:
      goto L9934;
    case UNSPEC:
      goto L13997;
    case VEC_CONCAT:
      goto L9952;
    case PLUS:
      goto L10076;
    case MINUS:
      goto L10124;
    case EQ:
      goto L10349;
    case GT:
      goto L10367;
    case ASHIFTRT:
      goto L10403;
    case LSHIFTRT:
      goto L10415;
    case ASHIFT:
      goto L10433;
    case VEC_MERGE:
      goto L10631;
    default:
     break;
   }
  goto ret0;
 L9934:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L9935;
    }
  goto ret0;
 L9935:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 912;
    }
  goto ret0;
 L13997:
  switch ((((((x1)->u.fld[0]).rtvec1))->num_elem))
    {
    case 1:
      goto L13999;
    case 2:
      goto L14000;
    default:
      break;
    }
  goto ret0;
 L13999:
  if ((((x1)->u.fld[1]).rtint) == 30)
    goto L9939;
  goto ret0;
 L9939:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L9940;
    }
  goto ret0;
 L9940:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 913;
    }
  goto ret0;
 L14000:
  if ((((x1)->u.fld[1]).rtint) == 41)
    goto L10319;
  goto ret0;
 L10319:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V4SImode))
    {
      operands[1] = x2;
      goto L10320;
    }
  goto ret0;
 L10320:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (immediate_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L10321;
    }
  goto ret0;
 L10321:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 958;
    }
  goto ret0;
 L9952:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2SImode)
    goto L14001;
  goto ret0;
 L14001:
  switch (((enum rtx_code) (x2)->code))
    {
    case FIX:
      goto L9953;
    case UNSPEC:
      goto L14003;
    default:
     break;
   }
  goto ret0;
 L9953:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9954;
    }
  goto ret0;
 L9954:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2SImode
      && ((enum rtx_code) (x2)->code) == CONST_VECTOR
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L9955;
  goto ret0;
 L9955:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)])
    goto L9956;
  goto ret0;
 L9956:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (x3 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 915;
    }
  goto ret0;
 L14003:
  if ((((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 30)
    goto L9961;
  goto ret0;
 L9961:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9962;
    }
  goto ret0;
 L9962:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2SImode
      && ((enum rtx_code) (x2)->code) == CONST_VECTOR
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L9963;
  goto ret0;
 L9963:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)])
    goto L9964;
  goto ret0;
 L9964:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (x3 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 916;
    }
  goto ret0;
 L10076:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode)
    goto L14005;
  goto ret0;
 L14005:
  if (((enum rtx_code) (x2)->code) == MULT)
    goto L10215;
  if (register_operand (x2, V4SImode))
    {
      operands[1] = x2;
      goto L10077;
    }
  goto ret0;
 L10215:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V4SImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L10216;
  goto ret0;
 L10216:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V4HImode
      && ((enum rtx_code) (x4)->code) == VEC_SELECT)
    goto L10217;
  goto ret0;
 L10217:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, V8HImode))
    {
      operands[1] = x5;
      goto L10218;
    }
  goto ret0;
 L10218:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x5)->code) == PARALLEL
      && (((((x5)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L10219;
  goto ret0;
 L10219:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[0]);
  if (x6 == const_int_rtx[64 + (0)])
    goto L10220;
  goto ret0;
 L10220:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[1]);
  if (x6 == const_int_rtx[64 + (2)])
    goto L10221;
  goto ret0;
 L10221:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[2]);
  if (x6 == const_int_rtx[64 + (4)])
    goto L10222;
  goto ret0;
 L10222:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[3]);
  if (x6 == const_int_rtx[64 + (6)])
    goto L10223;
  goto ret0;
 L10223:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V4SImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L10224;
  goto ret0;
 L10224:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V4HImode
      && ((enum rtx_code) (x4)->code) == VEC_SELECT)
    goto L10225;
  goto ret0;
 L10225:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, V8HImode))
    {
      operands[2] = x5;
      goto L10226;
    }
  goto ret0;
 L10226:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x5)->code) == PARALLEL
      && (((((x5)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L10227;
  goto ret0;
 L10227:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[0]);
  if (x6 == const_int_rtx[64 + (0)])
    goto L10228;
  goto ret0;
 L10228:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[1]);
  if (x6 == const_int_rtx[64 + (2)])
    goto L10229;
  goto ret0;
 L10229:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[2]);
  if (x6 == const_int_rtx[64 + (4)])
    goto L10230;
  goto ret0;
 L10230:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[3]);
  if (x6 == const_int_rtx[64 + (6)])
    goto L10231;
  goto ret0;
 L10231:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode
      && ((enum rtx_code) (x2)->code) == MULT)
    goto L10232;
  goto ret0;
 L10232:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V4SImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L10233;
  goto ret0;
 L10233:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V4HImode
      && ((enum rtx_code) (x4)->code) == VEC_SELECT)
    goto L10234;
  goto ret0;
 L10234:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (rtx_equal_p (x5, operands[1]))
    goto L10235;
  goto ret0;
 L10235:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x5)->code) == PARALLEL
      && (((((x5)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L10236;
  goto ret0;
 L10236:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[0]);
  if (x6 == const_int_rtx[64 + (1)])
    goto L10237;
  goto ret0;
 L10237:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[1]);
  if (x6 == const_int_rtx[64 + (3)])
    goto L10238;
  goto ret0;
 L10238:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[2]);
  if (x6 == const_int_rtx[64 + (5)])
    goto L10239;
  goto ret0;
 L10239:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[3]);
  if (x6 == const_int_rtx[64 + (7)])
    goto L10240;
  goto ret0;
 L10240:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V4SImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L10241;
  goto ret0;
 L10241:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V4HImode
      && ((enum rtx_code) (x4)->code) == VEC_SELECT)
    goto L10242;
  goto ret0;
 L10242:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (rtx_equal_p (x5, operands[2]))
    goto L10243;
  goto ret0;
 L10243:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x5)->code) == PARALLEL
      && (((((x5)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L10244;
  goto ret0;
 L10244:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[0]);
  if (x6 == const_int_rtx[64 + (1)])
    goto L10245;
  goto ret0;
 L10245:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[1]);
  if (x6 == const_int_rtx[64 + (3)])
    goto L10246;
  goto ret0;
 L10246:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[2]);
  if (x6 == const_int_rtx[64 + (5)])
    goto L10247;
  goto ret0;
 L10247:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[3]);
  if (x6 == const_int_rtx[64 + (7)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 951;
    }
  goto ret0;
 L10077:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SImode))
    {
      operands[2] = x2;
      goto L10078;
    }
  goto ret0;
 L10078:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 932;
    }
  goto ret0;
 L10124:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SImode))
    {
      operands[1] = x2;
      goto L10125;
    }
  goto ret0;
 L10125:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SImode))
    {
      operands[2] = x2;
      goto L10126;
    }
  goto ret0;
 L10126:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 940;
    }
  goto ret0;
 L10349:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SImode))
    {
      operands[1] = x2;
      goto L10350;
    }
  goto ret0;
 L10350:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SImode))
    {
      operands[2] = x2;
      goto L10351;
    }
  goto ret0;
 L10351:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 963;
    }
  goto ret0;
 L10367:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SImode))
    {
      operands[1] = x2;
      goto L10368;
    }
  goto ret0;
 L10368:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SImode))
    {
      operands[2] = x2;
      goto L10369;
    }
  goto ret0;
 L10369:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 966;
    }
  goto ret0;
 L10403:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SImode))
    {
      operands[1] = x2;
      goto L10404;
    }
  goto ret0;
 L10404:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L10405;
    }
 L10453:
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L10454;
  goto ret0;
 L10405:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 972;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L10453;
 L10454:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonmemory_operand (x3, V2DImode))
    {
      operands[2] = x3;
      goto L10455;
    }
  goto ret0;
 L10455:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 980;
    }
  goto ret0;
 L10415:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SImode))
    {
      operands[1] = x2;
      goto L10416;
    }
  goto ret0;
 L10416:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L10417;
    }
 L10467:
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L10468;
  goto ret0;
 L10417:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 974;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L10467;
 L10468:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonmemory_operand (x3, V2DImode))
    {
      operands[2] = x3;
      goto L10469;
    }
  goto ret0;
 L10469:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 982;
    }
  goto ret0;
 L10433:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SImode))
    {
      operands[1] = x2;
      goto L10434;
    }
  goto ret0;
 L10434:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L10435;
    }
 L10488:
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L10489;
  goto ret0;
 L10435:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 977;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L10488;
 L10489:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonmemory_operand (x3, V2DImode))
    {
      operands[2] = x3;
      goto L10490;
    }
  goto ret0;
 L10490:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 985;
    }
  goto ret0;
 L10631:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode)
    goto L14006;
  goto ret0;
 L14006:
  switch (((enum rtx_code) (x2)->code))
    {
    case VEC_SELECT:
      goto L10632;
    case VEC_DUPLICATE:
      goto L10806;
    default:
     break;
   }
  goto ret0;
 L10632:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SImode))
    {
      operands[1] = x3;
      goto L10633;
    }
  goto ret0;
 L10633:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L10634;
  goto ret0;
 L10634:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14008;
  goto ret0;
 L14008:
  if ((int) ((x4)->u.hwint[0]) == ((x4)->u.hwint[0]))
    switch ((int) ((x4)->u.hwint[0]))
      {
      case 2L:
        goto L10635;
      case 0L:
        goto L10721;
      default:
        break;
      }
  goto ret0;
 L10635:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10636;
  goto ret0;
 L10636:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L10637;
  goto ret0;
 L10637:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10638;
  goto ret0;
 L10638:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10639;
  goto ret0;
 L10639:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SImode))
    {
      operands[2] = x3;
      goto L10640;
    }
  goto ret0;
 L10640:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L10641;
  goto ret0;
 L10641:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10642;
  goto ret0;
 L10642:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L10643;
  goto ret0;
 L10643:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10644;
  goto ret0;
 L10644:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L10645;
  goto ret0;
 L10645:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (5)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 996;
    }
  goto ret0;
 L10721:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L10722;
  goto ret0;
 L10722:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10723;
  goto ret0;
 L10723:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L10724;
  goto ret0;
 L10724:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10725;
  goto ret0;
 L10725:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SImode))
    {
      operands[2] = x3;
      goto L10726;
    }
  goto ret0;
 L10726:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L10727;
  goto ret0;
 L10727:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L10728;
  goto ret0;
 L10728:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10729;
  goto ret0;
 L10729:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L10730;
  goto ret0;
 L10730:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10731;
  goto ret0;
 L10731:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (5)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 999;
    }
  goto ret0;
 L10806:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L10807;
    }
  goto ret0;
 L10807:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode
      && ((enum rtx_code) (x2)->code) == CONST_VECTOR
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L10808;
  goto ret0;
 L10808:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)])
    goto L10809;
  goto ret0;
 L10809:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (x3 == const_int_rtx[64 + (0)])
    goto L10810;
  goto ret0;
 L10810:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[2]);
  if (x3 == const_int_rtx[64 + (0)])
    goto L10811;
  goto ret0;
 L10811:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[3]);
  if (x3 == const_int_rtx[64 + (0)])
    goto L10812;
  goto ret0;
 L10812:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 1011;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_18 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case PLUS:
      goto L10070;
    case SS_PLUS:
      goto L10094;
    case US_PLUS:
      goto L10106;
    case MINUS:
      goto L10118;
    case SS_MINUS:
      goto L10142;
    case US_MINUS:
      goto L10154;
    case MULT:
      goto L10160;
    case TRUNCATE:
      goto L10166;
    case ASHIFTRT:
      goto L10279;
    case VEC_MERGE:
      goto L10302;
    case UNSPEC:
      goto L14037;
    case EQ:
      goto L10343;
    case GT:
      goto L10361;
    case SMAX:
      goto L10379;
    case SMIN:
      goto L10391;
    case LSHIFTRT:
      goto L10409;
    case ASHIFT:
      goto L10427;
    case VEC_CONCAT:
      goto L10547;
    default:
     break;
   }
  goto ret0;
 L10070:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10071;
    }
  goto ret0;
 L10071:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[2] = x2;
      goto L10072;
    }
  goto ret0;
 L10072:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 931;
    }
  goto ret0;
 L10094:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10095;
    }
  goto ret0;
 L10095:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[2] = x2;
      goto L10096;
    }
  goto ret0;
 L10096:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 935;
    }
  goto ret0;
 L10106:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10107;
    }
  goto ret0;
 L10107:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[2] = x2;
      goto L10108;
    }
  goto ret0;
 L10108:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 937;
    }
  goto ret0;
 L10118:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10119;
    }
  goto ret0;
 L10119:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[2] = x2;
      goto L10120;
    }
  goto ret0;
 L10120:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 939;
    }
  goto ret0;
 L10142:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10143;
    }
  goto ret0;
 L10143:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[2] = x2;
      goto L10144;
    }
  goto ret0;
 L10144:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 943;
    }
  goto ret0;
 L10154:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10155;
    }
  goto ret0;
 L10155:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[2] = x2;
      goto L10156;
    }
  goto ret0;
 L10156:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 945;
    }
  goto ret0;
 L10160:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10161;
    }
  goto ret0;
 L10161:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[2] = x2;
      goto L10162;
    }
  goto ret0;
 L10162:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 946;
    }
  goto ret0;
 L10166:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8SImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L10167;
  goto ret0;
 L10167:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V8SImode
      && ((enum rtx_code) (x3)->code) == MULT)
    goto L10168;
  goto ret0;
 L10168:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V8SImode)
    goto L14039;
  goto ret0;
 L14039:
  switch (((enum rtx_code) (x4)->code))
    {
    case SIGN_EXTEND:
      goto L10169;
    case ZERO_EXTEND:
      goto L10179;
    default:
     break;
   }
  goto ret0;
 L10169:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, V8HImode))
    {
      operands[1] = x5;
      goto L10170;
    }
  goto ret0;
 L10170:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V8SImode
      && ((enum rtx_code) (x4)->code) == SIGN_EXTEND)
    goto L10171;
  goto ret0;
 L10171:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, V8HImode))
    {
      operands[2] = x5;
      goto L10172;
    }
  goto ret0;
 L10172:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (16)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 947;
    }
  goto ret0;
 L10179:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, V8HImode))
    {
      operands[1] = x5;
      goto L10180;
    }
  goto ret0;
 L10180:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V8SImode
      && ((enum rtx_code) (x4)->code) == ZERO_EXTEND)
    goto L10181;
  goto ret0;
 L10181:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, V8HImode))
    {
      operands[2] = x5;
      goto L10182;
    }
  goto ret0;
 L10182:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (16)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 948;
    }
  goto ret0;
 L10279:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8HImode)
    goto L14041;
  goto ret0;
 L14041:
  if (((enum rtx_code) (x2)->code) == PLUS)
    goto L10280;
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10398;
    }
  goto ret0;
 L10280:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V8HImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L10281;
  goto ret0;
 L10281:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, V8HImode))
    {
      operands[1] = x4;
      goto L10282;
    }
  goto ret0;
 L10282:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, V8HImode))
    {
      operands[2] = x4;
      goto L10283;
    }
  goto ret0;
 L10283:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V8HImode
      && ((enum rtx_code) (x3)->code) == CONST_VECTOR
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 8)
    goto L10284;
  goto ret0;
 L10284:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10285;
  goto ret0;
 L10285:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10286;
  goto ret0;
 L10286:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10287;
  goto ret0;
 L10287:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10288;
  goto ret0;
 L10288:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10289;
  goto ret0;
 L10289:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10290;
  goto ret0;
 L10290:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10291;
  goto ret0;
 L10291:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10292;
  goto ret0;
 L10292:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 954;
    }
  goto ret0;
 L10398:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L10399;
    }
 L10446:
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L10447;
  goto ret0;
 L10399:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 971;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L10446;
 L10447:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonmemory_operand (x3, V2DImode))
    {
      operands[2] = x3;
      goto L10448;
    }
  goto ret0;
 L10448:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 979;
    }
  goto ret0;
 L10302:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8HImode)
    goto L14044;
  goto ret0;
 L14044:
  if (((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10606;
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10303;
    }
  goto ret0;
 L10606:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V8HImode))
    {
      operands[1] = x3;
      goto L10607;
    }
  goto ret0;
 L10607:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 8)
    goto L10608;
  goto ret0;
 L10608:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14045;
  goto ret0;
 L14045:
  if ((int) ((x4)->u.hwint[0]) == ((x4)->u.hwint[0]))
    switch ((int) ((x4)->u.hwint[0]))
      {
      case 4L:
        goto L10609;
      case 0L:
        goto L10695;
      default:
        break;
      }
  goto ret0;
 L10609:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10610;
  goto ret0;
 L10610:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (5)])
    goto L10611;
  goto ret0;
 L10611:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10612;
  goto ret0;
 L10612:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (6)])
    goto L10613;
  goto ret0;
 L10613:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L10614;
  goto ret0;
 L10614:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (7)])
    goto L10615;
  goto ret0;
 L10615:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L10616;
  goto ret0;
 L10616:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8HImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10617;
  goto ret0;
 L10617:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V8HImode))
    {
      operands[2] = x3;
      goto L10618;
    }
  goto ret0;
 L10618:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 8)
    goto L10619;
  goto ret0;
 L10619:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10620;
  goto ret0;
 L10620:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (4)])
    goto L10621;
  goto ret0;
 L10621:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10622;
  goto ret0;
 L10622:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (5)])
    goto L10623;
  goto ret0;
 L10623:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L10624;
  goto ret0;
 L10624:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (6)])
    goto L10625;
  goto ret0;
 L10625:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L10626;
  goto ret0;
 L10626:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (7)])
    goto L10627;
  goto ret0;
 L10627:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT
      && ((x2)->u.hwint[0]) == 85L
      && (((target_flags & 0x00008000) != 0)))
    {
      return 995;
    }
  goto ret0;
 L10695:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (4)])
    goto L10696;
  goto ret0;
 L10696:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10697;
  goto ret0;
 L10697:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (5)])
    goto L10698;
  goto ret0;
 L10698:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L10699;
  goto ret0;
 L10699:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (6)])
    goto L10700;
  goto ret0;
 L10700:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L10701;
  goto ret0;
 L10701:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (7)])
    goto L10702;
  goto ret0;
 L10702:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8HImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10703;
  goto ret0;
 L10703:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V8HImode))
    {
      operands[2] = x3;
      goto L10704;
    }
  goto ret0;
 L10704:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 8)
    goto L10705;
  goto ret0;
 L10705:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (4)])
    goto L10706;
  goto ret0;
 L10706:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10707;
  goto ret0;
 L10707:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[2]);
  if (x4 == const_int_rtx[64 + (5)])
    goto L10708;
  goto ret0;
 L10708:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[3]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10709;
  goto ret0;
 L10709:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[4]);
  if (x4 == const_int_rtx[64 + (6)])
    goto L10710;
  goto ret0;
 L10710:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[5]);
  if (x4 == const_int_rtx[64 + (2)])
    goto L10711;
  goto ret0;
 L10711:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[6]);
  if (x4 == const_int_rtx[64 + (7)])
    goto L10712;
  goto ret0;
 L10712:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[7]);
  if (x4 == const_int_rtx[64 + (3)])
    goto L10713;
  goto ret0;
 L10713:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT
      && ((x2)->u.hwint[0]) == 85L
      && (((target_flags & 0x00008000) != 0)))
    {
      return 998;
    }
  goto ret0;
 L10303:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V8HImode
      && ((enum rtx_code) (x2)->code) == VEC_DUPLICATE)
    goto L10304;
  goto ret0;
 L10304:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == HImode
      && ((enum rtx_code) (x3)->code) == TRUNCATE)
    goto L10305;
  goto ret0;
 L10305:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L10306;
    }
  goto ret0;
 L10306:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (const_0_to_255_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L10307;
    }
  goto ret0;
 L10307:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 956;
    }
  goto ret0;
 L14037:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L14047;
  goto ret0;
 L14047:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 55L:
      goto L10325;
    case 56L:
      goto L10331;
    default:
      break;
    }
  goto ret0;
 L10325:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10326;
    }
  goto ret0;
 L10326:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (immediate_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L10327;
    }
  goto ret0;
 L10327:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 959;
    }
  goto ret0;
 L10331:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10332;
    }
  goto ret0;
 L10332:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (immediate_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L10333;
    }
  goto ret0;
 L10333:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 960;
    }
  goto ret0;
 L10343:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10344;
    }
  goto ret0;
 L10344:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[2] = x2;
      goto L10345;
    }
  goto ret0;
 L10345:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 962;
    }
  goto ret0;
 L10361:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10362;
    }
  goto ret0;
 L10362:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[2] = x2;
      goto L10363;
    }
  goto ret0;
 L10363:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 965;
    }
  goto ret0;
 L10379:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10380;
    }
  goto ret0;
 L10380:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[2] = x2;
      goto L10381;
    }
  goto ret0;
 L10381:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 968;
    }
  goto ret0;
 L10391:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10392;
    }
  goto ret0;
 L10392:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V8HImode))
    {
      operands[2] = x2;
      goto L10393;
    }
  goto ret0;
 L10393:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 970;
    }
  goto ret0;
 L10409:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10410;
    }
  goto ret0;
 L10410:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L10411;
    }
 L10460:
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L10461;
  goto ret0;
 L10411:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 973;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L10460;
 L10461:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonmemory_operand (x3, V2DImode))
    {
      operands[2] = x3;
      goto L10462;
    }
  goto ret0;
 L10462:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 981;
    }
  goto ret0;
 L10427:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V8HImode))
    {
      operands[1] = x2;
      goto L10428;
    }
  goto ret0;
 L10428:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L10429;
    }
 L10481:
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L10482;
  goto ret0;
 L10429:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 976;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L10481;
 L10482:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonmemory_operand (x3, V2DImode))
    {
      operands[2] = x3;
      goto L10483;
    }
  goto ret0;
 L10483:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 984;
    }
  goto ret0;
 L10547:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4HImode
      && ((enum rtx_code) (x2)->code) == SS_TRUNCATE)
    goto L10548;
  goto ret0;
 L10548:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SImode))
    {
      operands[1] = x3;
      goto L10549;
    }
  goto ret0;
 L10549:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4HImode
      && ((enum rtx_code) (x2)->code) == SS_TRUNCATE)
    goto L10550;
  goto ret0;
 L10550:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SImode))
    {
      operands[2] = x3;
      goto L10551;
    }
  goto ret0;
 L10551:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 992;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_19 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((x0)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x1)->mode))
    {
    case HImode:
      goto L13118;
    case CCFPmode:
      goto L13110;
    case CCFPUmode:
      goto L13111;
    case CCmode:
      goto L13112;
    case SImode:
      goto L13113;
    case QImode:
      goto L13122;
    case DImode:
      goto L13129;
    case SFmode:
      goto L13135;
    case DFmode:
      goto L13137;
    case XFmode:
      goto L13139;
    case TImode:
      goto L13153;
    default:
      break;
    }
 L1:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 17)
    goto L2;
 L213:
  switch (((enum machine_mode) (x1)->mode))
    {
    case CCFPmode:
      goto L13160;
    case CCFPUmode:
      goto L13161;
    default:
      break;
    }
 L368:
  switch (((enum rtx_code) (x1)->code))
    {
    case STRICT_LOW_PART:
      goto L369;
    case REG:
      goto L13162;
    case PC:
      goto L6207;
    default:
     break;
   }
 L1336:
  if (register_operand (x1, VOIDmode))
    {
      operands[0] = x1;
      goto L1337;
    }
 L8266:
  operands[0] = x1;
  goto L8267;
 L8323:
  switch (((enum machine_mode) (x1)->mode))
    {
    case V4SFmode:
      goto L13163;
    case V4SImode:
      goto L13164;
    case V2DImode:
      goto L13165;
    case V8QImode:
      goto L13187;
    case V4HImode:
      goto L13167;
    case V2SImode:
      goto L13168;
    case V2SFmode:
      goto L13169;
    case V2DFmode:
      goto L13170;
    case V8HImode:
      goto L13171;
    case V16QImode:
      goto L13172;
    case TImode:
      goto L13173;
    case TFmode:
      goto L13185;
    case SImode:
      goto L13186;
    case DImode:
      goto L13189;
    case SFmode:
      goto L13191;
    case CCFPmode:
      goto L13196;
    case CCFPUmode:
      goto L13197;
    default:
      break;
    }
 L9442:
  operands[0] = x1;
  goto L9443;
 L9469:
  switch (((enum machine_mode) (x1)->mode))
    {
    case V2SFmode:
      goto L13203;
    case V2SImode:
      goto L13204;
    case V8QImode:
      goto L13205;
    case V4HImode:
      goto L13206;
    case V2DFmode:
      goto L13207;
    case V2DImode:
      goto L13208;
    case CCFPmode:
      goto L13209;
    case CCFPUmode:
      goto L13210;
    case SImode:
      goto L13211;
    case V16QImode:
      goto L13212;
    case V4SFmode:
      goto L13216;
    case V4SImode:
      goto L13217;
    case DImode:
      goto L13218;
    case V8HImode:
      goto L13220;
    case TImode:
      goto L13221;
    case DFmode:
      goto L13226;
    default:
      break;
    }
 L10855:
  operands[0] = x1;
  goto L10856;
 L10872:
  switch (((enum machine_mode) (x1)->mode))
    {
    case V4SFmode:
      goto L13227;
    case V2DFmode:
      goto L13228;
    case V16QImode:
      goto L13229;
    default:
      break;
    }
  goto ret0;
 L13118:
  tem = recog_1 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L1;
 L13110:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 18)
    goto L146;
  goto L1;
 L146:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == CCFPmode
      && ((enum rtx_code) (x1)->code) == COMPARE)
    goto L147;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L147:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SFmode:
      goto L13263;
    case DFmode:
      goto L13264;
    case XFmode:
      goto L13265;
    default:
      break;
    }
 L199:
  if (register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L200;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L13263:
  if (register_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L148;
    }
  goto L199;
 L148:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L149;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L199;
 L149:
  if (((target_flags & 0x00000001)))
    {
      return 19;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L199;
 L13264:
  if (register_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L161;
    }
  goto L199;
 L161:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L162;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L199;
 L162:
  if (((target_flags & 0x00000001)))
    {
      return 21;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L199;
 L13265:
  if (register_operand (x2, XFmode))
    {
      operands[0] = x2;
      goto L174;
    }
  goto L199;
 L174:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L175;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L199;
 L175:
  if (((target_flags & 0x00000001)))
    {
      return 23;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L199;
 L200:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == FLOAT)
    goto L201;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L201:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L202;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L202:
  if ((0 && (target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) ((((((((((insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->mode) == ((enum machine_mode) (operands[0])->mode)))
    {
      return 27;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L13111:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 18)
    goto L185;
  goto L1;
 L185:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == CCFPUmode
      && ((enum rtx_code) (x1)->code) == COMPARE)
    goto L186;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L186:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L187;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L187:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L188;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L188:
  if (((target_flags & 0x00000001)
   && (mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[1])->mode)))
    {
      return 25;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L13112:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 17)
    goto L209;
  goto L1;
 L209:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == CCmode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 25)
    goto L210;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L210:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L211;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L211:
  if ((!0))
    {
      return 29;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L13113:
  tem = recog_3 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L1;
 L13122:
  tem = recog_4 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L1;
 L13129:
  tem = recog_6 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L1;
 L13135:
  if (push_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L585;
    }
 L13136:
  if (nonimmediate_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L593;
    }
 L13142:
  if (register_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L857;
    }
 L13143:
  if (nonimmediate_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L886;
    }
 L13144:
  if (memory_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L896;
    }
 L13145:
  if (register_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L901;
    }
 L13146:
  if (memory_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L924;
    }
 L13154:
  if (nonimmediate_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L4239;
    }
 L13156:
  if (register_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L4326;
    }
  goto L1;
 L585:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_no_elim_operand (x1, SFmode))
    {
      operands[1] = x1;
      goto L586;
    }
 L589:
  if (nonmemory_no_elim_operand (x1, SFmode))
    {
      operands[1] = x1;
      goto L590;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13136;
 L586:
  if ((!0))
    {
      return 88;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L589;
 L590:
  if ((0))
    {
      return 89;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13136;
 L593:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_operand (x1, SFmode))
    {
      operands[1] = x1;
      goto L594;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13142;
 L594:
  if ((((x86_inter_unit_moves & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)
   && (reload_in_progress || reload_completed
       || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
       || ((enum rtx_code) (operands[1])->code) != CONST_DOUBLE
       || memory_operand (operands[0], SFmode))))
    {
      return 90;
    }
 L598:
  if (((!(x86_inter_unit_moves & (1 << ix86_tune)) && !optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)
   && (reload_in_progress || reload_completed
       || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
       || ((enum rtx_code) (operands[1])->code) != CONST_DOUBLE
       || memory_operand (operands[0], SFmode))))
    {
      return 91;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13142;
 L857:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SFmode
      && ((enum rtx_code) (x1)->code) == FLOAT_TRUNCATE)
    goto L858;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13143;
 L858:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L859;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13143;
 L859:
  if (((target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    {
      return 132;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13143;
 L886:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SFmode
      && ((enum rtx_code) (x1)->code) == FLOAT_TRUNCATE)
    goto L887;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13144;
 L887:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L888;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13144;
 L888:
  if (((target_flags & 0x00000001) && ((target_flags & 0x00008000) != 0) && !(x86_sse_partial_regs_for_cvtsd2ss & (1 << ix86_tune))
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 136;
    }
 L893:
  if (((target_flags & 0x00000001) && ((target_flags & 0x00008000) != 0) && (x86_sse_partial_regs_for_cvtsd2ss & (1 << ix86_tune))
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 137;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13144;
 L896:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SFmode
      && ((enum rtx_code) (x1)->code) == FLOAT_TRUNCATE)
    goto L897;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13145;
 L897:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L898;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13145;
 L898:
  if (((target_flags & 0x00000001)))
    {
      return 138;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13145;
 L901:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SFmode)
    goto L13447;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L13447:
  switch (((enum rtx_code) (x1)->code))
    {
    case FLOAT_TRUNCATE:
      goto L902;
    case FLOAT:
      goto L1105;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L902:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case DFmode:
      goto L13449;
    case XFmode:
      goto L13450;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L13449:
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L903;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L903:
  if ((!(target_flags & 0x00000001) && ((target_flags & 0x00008000) != 0) && !(x86_sse_partial_regs_for_cvtsd2ss & (1 << ix86_tune))))
    {
      return 139;
    }
 L908:
  if ((!(target_flags & 0x00000001) && ((target_flags & 0x00008000) != 0) && (x86_sse_partial_regs_for_cvtsd2ss & (1 << ix86_tune))))
    {
      return 140;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L13450:
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L913;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L913:
  if (((target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    {
      return 141;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L1105:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case HImode:
      goto L13451;
    case SImode:
      goto L13452;
    case DImode:
      goto L13453;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L13451:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L1106;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L1106:
  if (((target_flags & 0x00000001) && (!((target_flags & 0x00004000) != 0) || !((ix86_fpmath & FPMATH_SSE) != 0))))
    {
      return 162;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L13452:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L1111;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L1111:
  if (((target_flags & 0x00000001) && (!((target_flags & 0x00004000) != 0) || ((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387)))))
    {
      return 163;
    }
 L1116:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 164;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L13453:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L1121;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L1121:
  if (((target_flags & 0x00000001) && (!((target_flags & 0x00004000) != 0) || !0 || ((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387)))))
    {
      return 165;
    }
 L1126:
  if ((0 && (target_flags & 0x00000001) && (!((target_flags & 0x00004000) != 0) || ((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387)))))
    {
      return 166;
    }
 L1131:
  if ((0 && ((target_flags & 0x00004000) != 0)))
    {
      return 167;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13146;
 L924:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SFmode)
    goto L13454;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13154;
 L13454:
  switch (((enum rtx_code) (x1)->code))
    {
    case FLOAT_TRUNCATE:
      goto L925;
    case NEG:
      goto L4211;
    case ABS:
      goto L4367;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13154;
 L925:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L926;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13154;
 L926:
  if (((target_flags & 0x00000001)))
    {
      return 143;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13154;
 L4211:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L4212;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13154;
 L4212:
  if ((ix86_unary_operator_ok (NEG, SFmode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 362;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13154;
 L4367:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L4368;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13154;
 L4368:
  if ((ix86_unary_operator_ok (ABS, SFmode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 377;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13154;
 L4239:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SFmode)
    goto L13457;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13156;
 L13457:
  switch (((enum rtx_code) (x1)->code))
    {
    case NEG:
      goto L4240;
    case ABS:
      goto L4396;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13156;
 L4240:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L4241;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13156;
 L4241:
  if (((target_flags & 0x00000001) && !((target_flags & 0x00004000) != 0)
   && ix86_unary_operator_ok (NEG, SFmode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 364;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13156;
 L4396:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L4397;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13156;
 L4397:
  if (((target_flags & 0x00000001) && ix86_unary_operator_ok (ABS, SFmode, operands) && !((target_flags & 0x00004000) != 0))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 379;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13156;
 L4326:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SFmode)
    goto L13459;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L13459:
  tem = recog_7 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L13137:
  if (push_operand (x1, DFmode))
    {
      operands[0] = x1;
      goto L827;
    }
 L13138:
  if (nonimmediate_operand (x1, DFmode))
    {
      operands[0] = x1;
      goto L837;
    }
 L13141:
  if (register_operand (x1, DFmode))
    {
      operands[0] = x1;
      goto L842;
    }
 L13147:
  if (memory_operand (x1, DFmode))
    {
      operands[0] = x1;
      goto L942;
    }
 L13155:
  if (nonimmediate_operand (x1, DFmode))
    {
      operands[0] = x1;
      goto L4297;
    }
 L13157:
  if (register_operand (x1, DFmode))
    {
      operands[0] = x1;
      goto L4331;
    }
  goto L1;
 L827:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DFmode
      && ((enum rtx_code) (x1)->code) == FLOAT_EXTEND)
    goto L828;
  if (general_no_elim_operand (x1, DFmode))
    {
      operands[1] = x1;
      goto L609;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13138;
 L828:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L829;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13138;
 L829:
  if ((0))
    {
      return 126;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13138;
 L609:
  if ((!0 && !(x86_integer_DFmode_moves & (1 << ix86_tune))))
    {
      return 93;
    }
 L613:
  if ((0 || (x86_integer_DFmode_moves & (1 << ix86_tune))))
    {
      return 94;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13138;
 L837:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DFmode
      && ((enum rtx_code) (x1)->code) == FLOAT_EXTEND)
    goto L838;
  if (general_operand (x1, DFmode))
    {
      operands[1] = x1;
      goto L617;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13141;
 L838:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L839;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13141;
 L839:
  if ((((target_flags & 0x00000001) || ((target_flags & 0x00008000) != 0))
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 128;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13141;
 L617:
  if (((((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)
   && ((optimize_size || !(x86_integer_DFmode_moves & (1 << ix86_tune))) && !0)
   && (reload_in_progress || reload_completed
       || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
       || ((enum rtx_code) (operands[1])->code) != CONST_DOUBLE
       || memory_operand (operands[0], DFmode))))
    {
      return 95;
    }
 L621:
  if (((((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)
   && ((!optimize_size && (x86_integer_DFmode_moves & (1 << ix86_tune))) || 0)
   && (reload_in_progress || reload_completed
       || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
       || ((enum rtx_code) (operands[1])->code) != CONST_DOUBLE
       || memory_operand (operands[0], DFmode))))
    {
      return 96;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13141;
 L842:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DFmode)
    goto L13489;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L13489:
  switch (((enum rtx_code) (x1)->code))
    {
    case FLOAT_EXTEND:
      goto L843;
    case FLOAT_TRUNCATE:
      goto L930;
    case FLOAT:
      goto L1135;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L843:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L844;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L844:
  if ((!(target_flags & 0x00000001) && ((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 129;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L930:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L931;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L931:
  if (((target_flags & 0x00000001) && flag_unsafe_math_optimizations))
    {
      return 144;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L1135:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case HImode:
      goto L13492;
    case SImode:
      goto L13493;
    case DImode:
      goto L13494;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L13492:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L1136;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L1136:
  if (((target_flags & 0x00000001) && (!((target_flags & 0x00008000) != 0) || !((ix86_fpmath & FPMATH_SSE) != 0))))
    {
      return 168;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L13493:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L1141;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L1141:
  if (((target_flags & 0x00000001) && (!((target_flags & 0x00008000) != 0) || ((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387)))))
    {
      return 169;
    }
 L1146:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 170;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L13494:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L1151;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L1151:
  if (((target_flags & 0x00000001) && (!((target_flags & 0x00008000) != 0) || !0)))
    {
      return 171;
    }
 L1156:
  if ((0 && (target_flags & 0x00000001) && (!((target_flags & 0x00008000) != 0) || ((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387)))))
    {
      return 172;
    }
 L1161:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 173;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13147;
 L942:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DFmode)
    goto L13495;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13155;
 L13495:
  switch (((enum rtx_code) (x1)->code))
    {
    case FLOAT_TRUNCATE:
      goto L943;
    case NEG:
      goto L4252;
    case ABS:
      goto L4408;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13155;
 L943:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L944;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13155;
 L944:
  if (((target_flags & 0x00000001)))
    {
      return 146;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13155;
 L4252:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L4253;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13155;
 L4253:
  if ((ix86_unary_operator_ok (NEG, DFmode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 365;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13155;
 L4408:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L4409;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13155;
 L4409:
  if ((ix86_unary_operator_ok (ABS, DFmode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 380;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13155;
 L4297:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DFmode)
    goto L13498;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13157;
 L13498:
  switch (((enum rtx_code) (x1)->code))
    {
    case NEG:
      goto L4298;
    case ABS:
      goto L4454;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13157;
 L4298:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L4299;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13157;
 L4299:
  if ((!0 && (target_flags & 0x00000001)
   && ix86_unary_operator_ok (NEG, DFmode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 368;
    }
 L4311:
  if ((0 && (target_flags & 0x00000001)
   && ix86_unary_operator_ok (NEG, DFmode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 369;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13157;
 L4454:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L4455;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13157;
 L4455:
  if ((!0 && (target_flags & 0x00000001)
   && ix86_unary_operator_ok (ABS, DFmode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 383;
    }
 L4467:
  if ((0 && (target_flags & 0x00000001)
   && ix86_unary_operator_ok (ABS, DFmode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 384;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13157;
 L4331:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DFmode)
    goto L13500;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L13500:
  tem = recog_8 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L13139:
  if (push_operand (x1, XFmode))
    {
      operands[0] = x1;
      goto L832;
    }
 L13140:
  if (nonimmediate_operand (x1, XFmode))
    {
      operands[0] = x1;
      goto L847;
    }
 L13150:
  if (register_operand (x1, XFmode))
    {
      operands[0] = x1;
      goto L1164;
    }
  goto L1;
 L832:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == XFmode
      && ((enum rtx_code) (x1)->code) == FLOAT_EXTEND)
    goto L833;
  if (general_no_elim_operand (x1, XFmode))
    {
      operands[1] = x1;
      goto L632;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13140;
 L833:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L834;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13140;
 L834:
  if ((0))
    {
      return 127;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13140;
 L632:
  if ((optimize_size))
    {
      return 98;
    }
 L636:
  if ((!optimize_size))
    {
      return 99;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13140;
 L847:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == XFmode)
    goto L13543;
 L639:
  if (general_operand (x1, XFmode))
    {
      operands[1] = x1;
      goto L640;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13150;
 L13543:
  switch (((enum rtx_code) (x1)->code))
    {
    case FLOAT_EXTEND:
      goto L848;
    case NEG:
      goto L4322;
    case ABS:
      goto L4478;
    default:
     break;
   }
  goto L639;
 L848:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SFmode:
      goto L13546;
    case DFmode:
      goto L13547;
    default:
      break;
    }
  goto L639;
 L13546:
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L849;
    }
  goto L639;
 L849:
  if (((target_flags & 0x00000001)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 130;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L639;
 L13547:
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L854;
    }
  goto L639;
 L854:
  if (((target_flags & 0x00000001)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 131;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L639;
 L4322:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L4323;
    }
  goto L639;
 L4323:
  if (((target_flags & 0x00000001)
   && ix86_unary_operator_ok (NEG, XFmode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 370;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L639;
 L4478:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L4479;
    }
  goto L639;
 L4479:
  if (((target_flags & 0x00000001)
   && ix86_unary_operator_ok (ABS, XFmode, operands))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 385;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L639;
 L640:
  if ((optimize_size
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)
   && (reload_in_progress || reload_completed
       || ((enum rtx_code) (operands[1])->code) != CONST_DOUBLE
       || memory_operand (operands[0], XFmode))))
    {
      return 100;
    }
 L644:
  if ((!optimize_size
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)
   && (reload_in_progress || reload_completed
       || ((enum rtx_code) (operands[1])->code) != CONST_DOUBLE
       || memory_operand (operands[0], XFmode))))
    {
      return 101;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13150;
 L1164:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == XFmode)
    goto L13548;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L13548:
  tem = recog_9 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L13153:
  if (register_operand (x1, TImode))
    {
      operands[0] = x1;
      goto L2304;
    }
  goto L1;
 L2304:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == TImode
      && ((enum rtx_code) (x1)->code) == MULT)
    goto L2305;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L2305:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == TImode)
    goto L13596;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L13596:
  switch (((enum rtx_code) (x2)->code))
    {
    case ZERO_EXTEND:
      goto L2306;
    case SIGN_EXTEND:
      goto L2342;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L2306:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L2307;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L2307:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == TImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L2308;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L2308:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L2309;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L2309:
  if ((0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 254;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L2342:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L2343;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L2343:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == TImode
      && ((enum rtx_code) (x2)->code) == SIGN_EXTEND)
    goto L2344;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L2344:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L2345;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L2345:
  if ((0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 256;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1;
 L2:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x1)->code) == COMPARE)
    goto L3;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L3:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case DImode:
      goto L13599;
    case SImode:
      goto L13601;
    case HImode:
      goto L13603;
    case QImode:
      goto L13605;
    default:
      break;
    }
 L79:
  if (general_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L80;
    }
 L88:
  if (((enum machine_mode) (x2)->mode) == QImode)
    goto L13608;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L13599:
  switch (((enum rtx_code) (x2)->code))
    {
    case MINUS:
      goto L10;
    case NEG:
      goto L1431;
    case SUBREG:
    case REG:
    case MEM:
      goto L13598;
    default:
      x1 = (((x0)->u.fld[0]).rtx1);
      goto L213;
   }
 L13598:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L4;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L10:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[0] = x3;
      goto L11;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L11:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L12;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L12:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (0 && ix86_match_ccmode (insn, CCGOCmode)))
    {
      return 1;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L1431:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L1432;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L1432:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L1433;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L1433:
  if ((0
   && ix86_match_ccmode (insn, CCZmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)
   && ! pic_symbolic_operand (operands[2], VOIDmode))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 198;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L4:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const0_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L5;
    }
 L17:
  if (x86_64_general_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L18;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L5:
  if ((0 && ix86_match_ccmode (insn, CCNOmode)))
    {
      return 0;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L17;
 L18:
  if ((0 && ix86_match_ccmode (insn, CCmode)))
    {
      return 2;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L13601:
  if (((enum rtx_code) (x2)->code) == MINUS)
    goto L29;
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L23;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L29:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[0] = x3;
      goto L30;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L30:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L31;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L31:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCGOCmode)))
    {
      return 4;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L23:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const0_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L24;
    }
 L36:
  if (general_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L37;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L24:
  if ((ix86_match_ccmode (insn, CCNOmode)))
    {
      return 3;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L36;
 L37:
  if (((((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)
    && ix86_match_ccmode (insn, CCmode)))
    {
      return 5;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L13603:
  if (((enum rtx_code) (x2)->code) == MINUS)
    goto L48;
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L42;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L48:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[0] = x3;
      goto L49;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L49:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L50;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L50:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCGOCmode)))
    {
      return 7;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L42:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const0_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L43;
    }
 L55:
  if (general_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L56;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L43:
  if ((ix86_match_ccmode (insn, CCNOmode)))
    {
      return 6;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L55;
 L56:
  if (((((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)
   && ix86_match_ccmode (insn, CCmode)))
    {
      return 8;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L13605:
  if (((enum rtx_code) (x2)->code) == MINUS)
    goto L73;
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L61;
    }
 L13606:
  if (((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L98;
  goto L79;
 L73:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[0] = x3;
      goto L74;
    }
  goto L79;
 L74:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L75;
    }
  goto L79;
 L75:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCGOCmode)))
    {
      return 11;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L79;
 L61:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const0_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L62;
    }
 L67:
  if (general_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L68;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13606;
 L62:
  if ((ix86_match_ccmode (insn, CCNOmode)))
    {
      return 9;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L67;
 L68:
  if (((((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)
    && ix86_match_ccmode (insn, CCmode)))
    {
      return 10;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13606;
 L98:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L99;
  goto L79;
 L99:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[0] = x4;
      goto L100;
    }
  goto L79;
 L100:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L101;
  goto L79;
 L101:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L102;
  goto L79;
 L102:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const0_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L103;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L79;
 L103:
  if ((ix86_match_ccmode (insn, CCNOmode)))
    {
      return 14;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L79;
 L80:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L81;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L88;
 L81:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L82;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L88;
 L82:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L83;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L88;
 L83:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L84;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L88;
 L84:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)]
      && (!0 && ix86_match_ccmode (insn, CCmode)))
    {
      return 12;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L88;
 L13608:
  if (register_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L89;
    }
 L13609:
  if (((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L108;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L89:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L90;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13609;
 L90:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L91;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13609;
 L91:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L92;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13609;
 L92:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L93;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13609;
 L93:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)]
      && (0 && ix86_match_ccmode (insn, CCmode)))
    {
      return 13;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13609;
 L108:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L109;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L109:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[0] = x4;
      goto L110;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L110:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L111;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L111:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L112;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L112:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L113;
    }
 L122:
  if (nonmemory_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L123;
    }
 L132:
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L133;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L113:
  if ((!0 && ix86_match_ccmode (insn, CCmode)))
    {
      return 15;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L122;
 L123:
  if ((0 && ix86_match_ccmode (insn, CCmode)))
    {
      return 16;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L132;
 L133:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L134;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L134:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L135;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L135:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L136;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L136:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)]
      && (ix86_match_ccmode (insn, CCmode)))
    {
      return 17;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L213;
 L13160:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 17)
    goto L214;
  goto L368;
 L214:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == CCFPmode
      && ((enum rtx_code) (x1)->code) == COMPARE)
    goto L215;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L368;
 L215:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L216;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L368;
 L216:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L217;
    }
 L222:
  if (nonimmediate_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L223;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L368;
 L217:
  if (((target_flags & 0x00000001) && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[0])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[0])->mode)) == DFmode))
   && (mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[0])->mode)))
    {
      return 30;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L222;
 L223:
  if (((target_flags & 0x00000001)
   && ((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[0])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[0])->mode)) == DFmode))
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[0])->mode)))
    {
      return 31;
    }
 L229:
  if ((((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[0])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[0])->mode)) == DFmode))
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[0])->mode)))
    {
      return 32;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L368;
 L13161:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 17)
    goto L232;
  goto L368;
 L232:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == CCFPUmode
      && ((enum rtx_code) (x1)->code) == COMPARE)
    goto L233;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L368;
 L233:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L234;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L368;
 L234:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L235;
    }
 L240:
  if (nonimmediate_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L241;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L368;
 L235:
  if (((target_flags & 0x00000001) && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[0])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[0])->mode)) == DFmode))
   && (mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[1])->mode)))
    {
      return 33;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L240;
 L241:
  if (((target_flags & 0x00000001)
   && ((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[0])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[0])->mode)) == DFmode))
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[1])->mode)))
    {
      return 34;
    }
 L247:
  if ((((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[0])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[0])->mode)) == DFmode))
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[1])->mode)))
    {
      return 35;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L368;
 L369:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case HImode:
      goto L13610;
    case QImode:
      goto L13612;
    default:
      break;
    }
  goto L8266;
 L13610:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L370;
    }
 L13611:
  if (register_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L382;
    }
  goto L8266;
 L370:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_operand (x1, HImode))
    {
      operands[1] = x1;
      goto L371;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13611;
 L371:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 55;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13611;
 L382:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (const0_operand (x1, HImode))
    {
      operands[1] = x1;
      goto L383;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L383:
  if ((reload_completed
   && ((!(x86_use_mov0 & (1 << ix86_tune)) && !(x86_partial_reg_stall & (1 << ix86_tune))) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 56;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L13612:
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L1718;
    }
 L13613:
  if (q_regs_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L418;
    }
  goto L8266;
 L1718:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == QImode)
    goto L13614;
 L406:
  if (general_operand (x1, QImode))
    {
      operands[1] = x1;
      goto L407;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13613;
 L13614:
  switch (((enum rtx_code) (x1)->code))
    {
    case PLUS:
      goto L1719;
    case MINUS:
      goto L2157;
    case AND:
      goto L3084;
    case IOR:
      goto L3471;
    case XOR:
      goto L3854;
    case ASHIFTRT:
      goto L5164;
    case LSHIFTRT:
      goto L5502;
    case ROTATE:
      goto L5690;
    case ROTATERT:
      goto L5880;
    case EQ:
    case NE:
    case LE:
    case LT:
    case GE:
    case GT:
    case LEU:
    case LTU:
    case GEU:
    case GTU:
    case UNORDERED:
    case ORDERED:
    case UNLE:
    case UNLT:
    case UNGE:
    case UNGT:
    case LTGT:
    case UNEQ:
      goto L13623;
    default:
      goto L406;
   }
 L13623:
  if (ix86_comparison_operator (x1, QImode))
    {
      operands[1] = x1;
      goto L5922;
    }
  goto L406;
 L1719:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L1720;
  goto L406;
 L1720:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L1721;
    }
  goto L406;
 L1721:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 217;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L406;
 L2157:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L2158;
  goto L406;
 L2158:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L2159;
    }
  goto L406;
 L2159:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 244;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L406;
 L3084:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L3085;
  goto L406;
 L3085:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L3086;
    }
  goto L406;
 L3086:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 297;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L406;
 L3471:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L3472;
  goto L406;
 L3472:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L3473;
    }
  goto L406;
 L3473:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 319;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L406;
 L3854:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L3855;
  goto L406;
 L3855:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L3856;
    }
  goto L406;
 L3856:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 341;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L406;
 L5164:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L5165;
  goto L406;
 L5165:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L5166;
    }
 L5195:
  if (nonmemory_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L5196;
    }
  goto L406;
 L5166:
  if ((ix86_binary_operator_ok (ASHIFTRT, QImode, operands)
   && (! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 440;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5195;
 L5196:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 442;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L406;
 L5502:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L5503;
  goto L406;
 L5503:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L5504;
    }
 L5533:
  if (nonmemory_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L5534;
    }
  goto L406;
 L5504:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 464;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5533;
 L5534:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 466;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L406;
 L5690:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L5691;
  goto L406;
 L5691:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L5692;
    }
 L5721:
  if (nonmemory_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L5722;
    }
  goto L406;
 L5692:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 477;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5721;
 L5722:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 479;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L406;
 L5880:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L5881;
  goto L406;
 L5881:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const1_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L5882;
    }
 L5911:
  if (nonmemory_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L5912;
    }
  goto L406;
 L5882:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 490;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L5911;
 L5912:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 492;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L406;
 L5922:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L5923;
  goto L406;
 L5923:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    {
      return 494;
    }
  goto L406;
 L407:
  if (((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 61;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L13613;
 L418:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (const0_operand (x1, QImode))
    {
      operands[1] = x1;
      goto L419;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L419:
  if ((reload_completed && (!(x86_use_mov0 & (1 << ix86_tune)) || optimize_size))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 62;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L13162:
  if ((((x1)->u.fld[0]).rtint) == 17)
    goto L1445;
  goto L1336;
 L1445:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x1)->code) == COMPARE)
    goto L1446;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1336;
 L1446:
  tem = recog_10 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L1336;
 L6207:
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum machine_mode) (x1)->mode))
    {
    case SImode:
      goto L13653;
    case DImode:
      goto L13654;
    default:
      break;
    }
 L5938:
  switch (((enum rtx_code) (x1)->code))
    {
    case IF_THEN_ELSE:
      goto L5939;
    case LABEL_REF:
      goto L6204;
    case UNSPEC:
      goto L13655;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L13653:
  if (nonimmediate_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L6208;
    }
  goto L5938;
 L6208:
  if ((!0))
    {
      return 510;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L5938;
 L13654:
  if (nonimmediate_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L6212;
    }
  goto L5938;
 L6212:
  if ((0))
    {
      return 511;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L5938;
 L5939:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ix86_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L5940;
    }
 L5971:
  if (comparison_operator (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L5972;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L5940:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L5941;
  goto L5971;
 L5941:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5942;
  goto L5971;
 L5942:
  x2 = (((x1)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case LABEL_REF:
      goto L5943;
    case PC:
      goto L5952;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5971;
 L5943:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[0] = x3;
  goto L5944;
 L5944:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == PC)
    {
      return 497;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5971;
 L5952:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == LABEL_REF)
    goto L5953;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5971;
 L5953:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[0] = x3;
  return 498;
 L5972:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L5973;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L5973:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L5974;
    }
 L5996:
  if (nonimmediate_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L5997;
    }
 L6170:
  if (register_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L6171;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L5974:
  x2 = (((x1)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case LABEL_REF:
      goto L5975;
    case PC:
      goto L6044;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5996;
 L5975:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[3] = x3;
  goto L5976;
 L5976:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == PC
      && (((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && (target_flags & 0x00000001)
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))
   && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 499;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5996;
 L6044:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == LABEL_REF)
    goto L6045;
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5996;
 L6045:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[3] = x3;
  goto L6046;
 L6046:
  if ((((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && (target_flags & 0x00000001)
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))
   && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 502;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5996;
 L5997:
  x2 = (((x1)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case LABEL_REF:
      goto L5998;
    case PC:
      goto L6068;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L6170;
 L5998:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[3] = x3;
  goto L5999;
 L5999:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == PC)
    goto L13656;
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L6170;
 L13656:
  if (((target_flags & 0x00000001)
   && ((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 500;
    }
 L13657:
  if ((((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 501;
    }
 L13658:
  if (((target_flags & 0x00000001)
   && (((enum machine_mode) (operands[1])->mode) == SFmode || ((enum machine_mode) (operands[1])->mode) == DFmode)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && !ix86_use_fcomi_compare (((enum rtx_code) (operands[0])->code))
   && ix86_cc_mode ((((enum rtx_code) (operands[0])->code)), (operands[1]), (operands[2]))
                                  == CCFPmode
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 3;
      return 505;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L6170;
 L6068:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == LABEL_REF)
    goto L6069;
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L6170;
 L6069:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[3] = x3;
  goto L6070;
 L6070:
  if (((target_flags & 0x00000001)
   && ((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 503;
    }
 L6094:
  if ((((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 504;
    }
 L6147:
  if (((target_flags & 0x00000001)
   && (((enum machine_mode) (operands[1])->mode) == SFmode || ((enum machine_mode) (operands[1])->mode) == DFmode)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && !ix86_use_fcomi_compare (((enum rtx_code) (operands[0])->code))
   && ix86_cc_mode ((((enum rtx_code) (operands[0])->code)), (operands[1]), (operands[2]))
                                  == CCFPmode
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 3;
      return 506;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L6170;
 L6171:
  x2 = (((x1)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case LABEL_REF:
      goto L6172;
    case PC:
      goto L6198;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L6172:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[3] = x3;
  goto L6173;
 L6173:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == PC
      && ((target_flags & 0x00000001)
   && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 3;
      return 507;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L6198:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == LABEL_REF)
    goto L6199;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L6199:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[3] = x3;
  goto L6200;
 L6200:
  if (((target_flags & 0x00000001)
   && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 3;
      return 508;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L6204:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[0] = x2;
  return 509;
 L13655:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 76)
    goto L6348;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L6348:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L13659;
    case DImode:
      goto L13660;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L13659:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L6349;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L6349:
  if ((!0))
    {
      return 531;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L13660:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L6354;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L6354:
  if ((0))
    {
      return 532;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1337:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x1)->code) == PLUS)
    goto L1338;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1338:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case PLUS:
      goto L1373;
    case MULT:
      goto L1356;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1373:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == MULT)
    goto L1374;
  if (index_register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L1340;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1374:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (index_register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L1375;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1375:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const248_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L1376;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1376:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[3] = x3;
      goto L1377;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1377:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (immediate_operand (x2, VOIDmode))
    {
      operands[4] = x2;
      goto L1378;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1378:
  if (((((enum machine_mode) (operands[0])->mode) == QImode || ((enum machine_mode) (operands[0])->mode) == HImode
    || (0 && ((enum machine_mode) (operands[0])->mode) == SImode))
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[1])->mode)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[3])->mode)))
    {
      return 194;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1340:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L1341;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1341:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (immediate_operand (x2, VOIDmode))
    {
      operands[3] = x2;
      goto L1342;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1342:
  if (((((enum machine_mode) (operands[0])->mode) == QImode || ((enum machine_mode) (operands[0])->mode) == HImode
    || (0 && ((enum machine_mode) (operands[0])->mode) == SImode))
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[1])->mode)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[2])->mode)
   && (((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[3])->mode)
       || ((enum machine_mode) (operands[3])->mode) == VOIDmode)))
    {
      return 190;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1356:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (index_register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L1357;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1357:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const248_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L1358;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1358:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, VOIDmode))
    {
      operands[3] = x2;
      goto L1359;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L1359:
  if (((((enum machine_mode) (operands[0])->mode) == QImode || ((enum machine_mode) (operands[0])->mode) == HImode
    || (0 && ((enum machine_mode) (operands[0])->mode) == SImode))
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[1])->mode)
   && (((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[3])->mode)
       || ((enum machine_mode) (operands[3])->mode) == VOIDmode)))
    {
      return 192;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8266;
 L8267:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x1)->code) == CALL)
    goto L8268;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8323;
 L8268:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L8269;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8323;
 L8269:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case SImode:
      goto L13661;
    case DImode:
      goto L13662;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8323;
 L13661:
  if (constant_call_address_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L8270;
    }
 L13663:
  if (call_insn_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L8284;
    }
 L13664:
  if (sibcall_insn_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L8291;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8323;
 L8270:
  x2 = (((x1)->u.fld[1]).rtx1);
  operands[2] = x2;
  goto L8271;
 L8271:
  if ((!0))
    {
      return 689;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13663;
 L8284:
  x2 = (((x1)->u.fld[1]).rtx1);
  operands[2] = x2;
  goto L8285;
 L8285:
  if ((!(((insn))->jump) && !0))
    {
      return 691;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13664;
 L8291:
  x2 = (((x1)->u.fld[1]).rtx1);
  operands[2] = x2;
  goto L8292;
 L8292:
  if (((((insn))->jump) && !0))
    {
      return 692;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8323;
 L13662:
  if (constant_call_address_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L8277;
    }
 L13665:
  if (call_insn_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L8298;
    }
 L13667:
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 40)
    goto L8312;
  if (constant_call_address_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L8305;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8323;
 L8277:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const_int_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L8278;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13665;
 L8278:
  if ((0))
    {
      return 690;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13665;
 L8298:
  x2 = (((x1)->u.fld[1]).rtx1);
  operands[2] = x2;
  goto L8299;
 L8299:
  if ((!(((insn))->jump) && 0))
    {
      return 693;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L13667;
 L8312:
  x2 = (((x1)->u.fld[1]).rtx1);
  operands[1] = x2;
  goto L8313;
 L8313:
  if (((((insn))->jump) && 0))
    {
      return 695;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8323;
 L8305:
  x2 = (((x1)->u.fld[1]).rtx1);
  operands[2] = x2;
  goto L8306;
 L8306:
  if (((((insn))->jump) && 0))
    {
      return 694;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L8323;
 L13163:
  if (nonimmediate_operand (x1, V4SFmode))
    {
      operands[0] = x1;
      goto L8324;
    }
 L13178:
  if (push_operand (x1, V4SFmode))
    {
      operands[0] = x1;
      goto L8384;
    }
 L13188:
  if (memory_operand (x1, V4SFmode))
    {
      operands[0] = x1;
      goto L8454;
    }
 L13190:
  if (register_operand (x1, V4SFmode))
    {
      operands[0] = x1;
      goto L8464;
    }
  goto L9442;
 L8324:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V4SFmode)
    goto L13669;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L13669:
  switch (((enum rtx_code) (x1)->code))
    {
    case UNSPEC:
      goto L13672;
    case VEC_MERGE:
      goto L8489;
    case CONST_VECTOR:
    case SUBREG:
    case REG:
    case MEM:
      goto L13668;
    default:
      x1 = (((x0)->u.fld[0]).rtx1);
      goto L13178;
   }
 L13668:
  if (vector_move_operand (x1, V4SFmode))
    {
      operands[1] = x1;
      goto L8325;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L13672:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L13674;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L13674:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 38L:
      goto L8421;
    case 39L:
      goto L8426;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L8421:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8422;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L8422:
  if ((((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 722;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L8426:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8427;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L8427:
  if ((((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 723;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L8489:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8490;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L8490:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8491;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L8491:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT)
    goto L13676;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L13676:
  if ((int) ((x2)->u.hwint[0]) == ((x2)->u.hwint[0]))
    switch ((int) ((x2)->u.hwint[0]))
      {
      case 12L:
        goto L13678;
      case 3L:
        goto L13679;
      default:
        break;
      }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L13678:
  if ((((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[1])->code) == MEM || ((enum rtx_code) (operands[2])->code) == MEM)))
    {
      return 732;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L13679:
  if ((((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[1])->code) == MEM || ((enum rtx_code) (operands[2])->code) == MEM)))
    {
      return 733;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L8325:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 698;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13178;
 L8384:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (register_operand (x1, V4SFmode))
    {
      operands[1] = x1;
      goto L8385;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13188;
 L8385:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 713;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13188;
 L8454:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V4SFmode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 34)
    goto L8455;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13190;
 L8455:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8456;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13190;
 L8456:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 728;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13190;
 L8464:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V4SFmode)
    goto L13680;
 L8718:
  if (const0_operand (x1, V4SFmode))
    {
      operands[1] = x1;
      goto L8719;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13680:
  switch (((enum rtx_code) (x1)->code))
    {
    case VEC_MERGE:
      goto L8465;
    case UNSPEC:
      goto L13694;
    case PLUS:
      goto L8527;
    case MINUS:
      goto L8541;
    case MULT:
      goto L8555;
    case DIV:
      goto L8569;
    case SQRT:
      goto L8607;
    case AND:
      goto L8619;
    case IOR:
      goto L8632;
    case XOR:
      goto L8638;
    case SMAX:
      goto L8817;
    case SMIN:
      goto L8831;
    default:
     break;
   }
  goto L8718;
 L8465:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SFmode)
    goto L13698;
  goto L8718;
 L13698:
  tem = recog_11 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L8718;
 L13694:
  switch ((((((x1)->u.fld[0]).rtvec1))->num_elem))
    {
    case 3:
      goto L13726;
    case 1:
      goto L13727;
    default:
      break;
    }
  goto L8718;
 L13726:
  if ((((x1)->u.fld[1]).rtint) == 41)
    goto L8520;
  goto L8718;
 L8520:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8521;
    }
  goto L8718;
 L8521:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8522;
    }
  goto L8718;
 L8522:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[2]);
  if (immediate_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L8523;
    }
  goto L8718;
 L8523:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 737;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L13727:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 42L:
      goto L8583;
    case 43L:
      goto L8595;
    default:
      break;
    }
  goto L8718;
 L8583:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8584;
    }
  goto L8718;
 L8584:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 746;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8595:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8596;
    }
  goto L8718;
 L8596:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 748;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8527:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8528;
    }
  goto L8718;
 L8528:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8529;
    }
  goto L8718;
 L8529:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 738;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8541:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8542;
    }
  goto L8718;
 L8542:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8543;
    }
  goto L8718;
 L8543:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 740;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8555:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8556;
    }
  goto L8718;
 L8556:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8557;
    }
  goto L8718;
 L8557:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 742;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8569:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8570;
    }
  goto L8718;
 L8570:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8571;
    }
  goto L8718;
 L8571:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 744;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8607:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8608;
    }
  goto L8718;
 L8608:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 750;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8619:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SFmode)
    goto L13730;
  goto L8718;
 L13730:
  if (((enum rtx_code) (x2)->code) == NOT)
    goto L8626;
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8620;
    }
  goto L8718;
 L8626:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8627;
    }
  goto L8718;
 L8627:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8628;
    }
  goto L8718;
 L8628:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 753;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8620:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8621;
    }
  goto L8718;
 L8621:
  if ((((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 752;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8632:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8633;
    }
  goto L8718;
 L8633:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8634;
    }
  goto L8718;
 L8634:
  if ((((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 754;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8638:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8639;
    }
  goto L8718;
 L8639:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8640;
    }
  goto L8718;
 L8640:
  if ((((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 755;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8817:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8818;
    }
  goto L8718;
 L8818:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8819;
    }
  goto L8718;
 L8819:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 778;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8831:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8832;
    }
  goto L8718;
 L8832:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8833;
    }
  goto L8718;
 L8833:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 780;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8718;
 L8719:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 768;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13164:
  if (nonimmediate_operand (x1, V4SImode))
    {
      operands[0] = x1;
      goto L8328;
    }
 L13179:
  if (push_operand (x1, V4SImode))
    {
      operands[0] = x1;
      goto L8388;
    }
  if (register_operand (x1, V4SImode))
    {
      operands[0] = x1;
      goto L8726;
    }
  goto L9442;
 L8328:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (vector_move_operand (x1, V4SImode))
    {
      operands[1] = x1;
      goto L8329;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13179;
 L8329:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 699;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13179;
 L8388:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (register_operand (x1, V4SImode))
    {
      operands[1] = x1;
      goto L8389;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8389:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 714;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8726:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V4SImode)
    goto L13732;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13732:
  switch (((enum rtx_code) (x1)->code))
    {
    case NOT:
      goto L8733;
    case VEC_MERGE:
      goto L8740;
    case EQ:
    case LT:
    case LE:
    case UNORDERED:
    case NE:
    case UNGE:
    case UNGT:
    case ORDERED:
    case UNEQ:
    case UNLT:
    case UNLE:
    case LTGT:
    case GE:
    case GT:
      goto L13731;
    default:
      x1 = (((x0)->u.fld[0]).rtx1);
      goto L9442;
   }
 L13731:
  if (sse_comparison_operator (x1, V4SImode))
    {
      operands[3] = x1;
      goto L8727;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8733:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (sse_comparison_operator (x2, V4SImode))
    {
      operands[3] = x2;
      goto L8734;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8734:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8735;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8735:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[2] = x3;
      goto L8736;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8736:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 771;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8740:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode)
    goto L13735;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13735:
  if (((enum rtx_code) (x2)->code) == NOT)
    goto L8750;
  if (sse_comparison_operator (x2, V4SImode))
    {
      operands[3] = x2;
      goto L8741;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8750:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (sse_comparison_operator (x3, V4SImode))
    {
      operands[3] = x3;
      goto L8751;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8751:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, V4SFmode))
    {
      operands[1] = x4;
      goto L8752;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8752:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (register_operand (x4, V4SFmode))
    {
      operands[2] = x4;
      goto L8753;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8753:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L8754;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8754:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L8755;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8755:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 773;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8741:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8742;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8742:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[2] = x3;
      goto L8743;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8743:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L8744;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8744:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L8745;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8745:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 772;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8727:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8728;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8728:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L8729;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8729:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 770;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13165:
  if (nonimmediate_operand (x1, V2DImode))
    {
      operands[0] = x1;
      goto L8332;
    }
 L13175:
  if (push_operand (x1, V2DImode))
    {
      operands[0] = x1;
      goto L8372;
    }
  if (register_operand (x1, V2DImode))
    {
      operands[0] = x1;
      goto L8674;
    }
  goto L9442;
 L8332:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (vector_move_operand (x1, V2DImode))
    {
      operands[1] = x1;
      goto L8333;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13175;
 L8333:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 700;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13175;
 L8372:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (register_operand (x1, V2DImode))
    {
      operands[1] = x1;
      goto L8373;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8373:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 710;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8674:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V2DImode)
    goto L13736;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13736:
  switch (((enum rtx_code) (x1)->code))
    {
    case AND:
      goto L8675;
    case IOR:
      goto L8701;
    case XOR:
      goto L8713;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8675:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2DImode)
    goto L13740;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13740:
  if (((enum rtx_code) (x2)->code) == NOT)
    goto L8689;
  if (nonimmediate_operand (x2, V2DImode))
    {
      operands[1] = x2;
      goto L8676;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8689:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DImode))
    {
      operands[1] = x3;
      goto L8690;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8690:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DImode))
    {
      operands[2] = x2;
      goto L8691;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8691:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 763;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8676:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DImode))
    {
      operands[2] = x2;
      goto L8677;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8677:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 761;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8701:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V2DImode))
    {
      operands[1] = x2;
      goto L8702;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8702:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DImode))
    {
      operands[2] = x2;
      goto L8703;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8703:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 765;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8713:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V2DImode))
    {
      operands[1] = x2;
      goto L8714;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8714:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DImode))
    {
      operands[2] = x2;
      goto L8715;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8715:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 767;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13187:
  if (((enum rtx_code) (x1)->code) == MEM)
    goto L8440;
 L13166:
  if (nonimmediate_operand (x1, V8QImode))
    {
      operands[0] = x1;
      goto L8336;
    }
 L13182:
  if (push_operand (x1, V8QImode))
    {
      operands[0] = x1;
      goto L8400;
    }
  if (register_operand (x1, V8QImode))
    {
      operands[0] = x1;
      goto L8912;
    }
  goto L9442;
 L8440:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L13741;
    case DImode:
      goto L13742;
    default:
      break;
    }
  goto L13166;
 L13741:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L8441;
    }
  goto L13166;
 L8441:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V8QImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x1)->u.fld[1]).rtint) == 32)
    goto L8442;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13166;
 L8442:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L8443;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13166;
 L8443:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L8444;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13166;
 L8444:
  if (((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)) && !0))
    {
      return 726;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13166;
 L13742:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L8448;
    }
  goto L13166;
 L8448:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V8QImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x1)->u.fld[1]).rtint) == 32)
    goto L8449;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13166;
 L8449:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L8450;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13166;
 L8450:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L8451;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13166;
 L8451:
  if (((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)) && 0))
    {
      return 727;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13166;
 L8336:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (vector_move_operand (x1, V8QImode))
    {
      operands[1] = x1;
      goto L8337;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13182;
 L8337:
  if ((((target_flags & 0x00002000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 701;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13182;
 L8400:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (register_operand (x1, V8QImode))
    {
      operands[1] = x1;
      goto L8401;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8401:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 717;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8912:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V8QImode)
    goto L13743;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13743:
  tem = recog_12 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13167:
  if (nonimmediate_operand (x1, V4HImode))
    {
      operands[0] = x1;
      goto L8340;
    }
 L13181:
  if (push_operand (x1, V4HImode))
    {
      operands[0] = x1;
      goto L8396;
    }
  if (register_operand (x1, V4HImode))
    {
      operands[0] = x1;
      goto L8918;
    }
  goto L9442;
 L8340:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (vector_move_operand (x1, V4HImode))
    {
      operands[1] = x1;
      goto L8341;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13181;
 L8341:
  if ((((target_flags & 0x00002000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 702;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13181;
 L8396:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (register_operand (x1, V4HImode))
    {
      operands[1] = x1;
      goto L8397;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8397:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 716;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8918:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V4HImode)
    goto L13760;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13760:
  tem = recog_13 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13168:
  if (nonimmediate_operand (x1, V2SImode))
    {
      operands[0] = x1;
      goto L8344;
    }
 L13180:
  if (push_operand (x1, V2SImode))
    {
      operands[0] = x1;
      goto L8392;
    }
  if (register_operand (x1, V2SImode))
    {
      operands[0] = x1;
      goto L8852;
    }
  goto L9442;
 L8344:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (vector_move_operand (x1, V2SImode))
    {
      operands[1] = x1;
      goto L8345;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13180;
 L8345:
  if ((((target_flags & 0x00002000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 703;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13180;
 L8392:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (register_operand (x1, V2SImode))
    {
      operands[1] = x1;
      goto L8393;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8393:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 715;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8852:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V2SImode)
    goto L13787;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13787:
  switch (((enum rtx_code) (x1)->code))
    {
    case VEC_SELECT:
      goto L8853;
    case PLUS:
      goto L8925;
    case MINUS:
      goto L8974;
    case EQ:
      goto L9170;
    case GT:
      goto L9188;
    case ASHIFTRT:
      goto L9224;
    case LSHIFTRT:
      goto L9236;
    case ASHIFT:
      goto L9255;
    case VEC_MERGE:
      goto L9336;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8853:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode)
    goto L13796;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13796:
  switch (((enum rtx_code) (x2)->code))
    {
    case FIX:
      goto L8854;
    case UNSPEC:
      goto L13798;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8854:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8855;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8855:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == PARALLEL
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L8856;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8856:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)])
    goto L8857;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8857:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (x3 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 783;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13798:
  if ((((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 30)
    goto L8862;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8862:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8863;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8863:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == PARALLEL
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L8864;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8864:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)])
    goto L8865;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8865:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (x3 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 784;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8925:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2SImode)
    goto L13800;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13800:
  if (((enum rtx_code) (x2)->code) == MULT)
    goto L9038;
  if (register_operand (x2, V2SImode))
    {
      operands[1] = x2;
      goto L8926;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9038:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V2SImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L9039;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9039:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V2HImode
      && ((enum rtx_code) (x4)->code) == VEC_SELECT)
    goto L9040;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9040:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, V4HImode))
    {
      operands[1] = x5;
      goto L9041;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9041:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x5)->code) == PARALLEL
      && (((((x5)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L9042;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9042:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[0]);
  if (x6 == const_int_rtx[64 + (0)])
    goto L9043;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9043:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[1]);
  if (x6 == const_int_rtx[64 + (2)])
    goto L9044;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9044:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V2SImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L9045;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9045:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V2HImode
      && ((enum rtx_code) (x4)->code) == VEC_SELECT)
    goto L9046;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9046:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, V4HImode))
    {
      operands[2] = x5;
      goto L9047;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9047:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x5)->code) == PARALLEL
      && (((((x5)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L9048;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9048:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[0]);
  if (x6 == const_int_rtx[64 + (0)])
    goto L9049;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9049:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[1]);
  if (x6 == const_int_rtx[64 + (2)])
    goto L9050;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9050:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2SImode
      && ((enum rtx_code) (x2)->code) == MULT)
    goto L9051;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9051:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V2SImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L9052;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9052:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V2HImode
      && ((enum rtx_code) (x4)->code) == VEC_SELECT)
    goto L9053;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9053:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (rtx_equal_p (x5, operands[1]))
    goto L9054;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9054:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x5)->code) == PARALLEL
      && (((((x5)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L9055;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9055:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[0]);
  if (x6 == const_int_rtx[64 + (1)])
    goto L9056;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9056:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[1]);
  if (x6 == const_int_rtx[64 + (3)])
    goto L9057;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9057:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V2SImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L9058;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9058:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V2HImode
      && ((enum rtx_code) (x4)->code) == VEC_SELECT)
    goto L9059;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9059:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (rtx_equal_p (x5, operands[2]))
    goto L9060;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9060:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x5)->code) == PARALLEL
      && (((((x5)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L9061;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9061:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[0]);
  if (x6 == const_int_rtx[64 + (1)])
    goto L9062;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9062:
  x6 = (((((x5)->u.fld[0]).rtvec1))->elem[1]);
  if (x6 == const_int_rtx[64 + (3)]
      && (((target_flags & 0x00002000) != 0)))
    {
      return 810;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8926:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2SImode))
    {
      operands[2] = x2;
      goto L8927;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8927:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 793;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8974:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SImode))
    {
      operands[1] = x2;
      goto L8975;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8975:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2SImode))
    {
      operands[2] = x2;
      goto L8976;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8976:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 801;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9170:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SImode))
    {
      operands[1] = x2;
      goto L9171;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9171:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2SImode))
    {
      operands[2] = x2;
      goto L9172;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9172:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 824;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9188:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SImode))
    {
      operands[1] = x2;
      goto L9189;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9189:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2SImode))
    {
      operands[2] = x2;
      goto L9190;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9190:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 827;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9224:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SImode))
    {
      operands[1] = x2;
      goto L9225;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9225:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L9226;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9226:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 833;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9236:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SImode))
    {
      operands[1] = x2;
      goto L9237;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9237:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L9238;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9238:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 835;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9255:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SImode))
    {
      operands[1] = x2;
      goto L9256;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9256:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L9257;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9257:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 838;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9336:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2SImode)
    goto L13802;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13802:
  if (((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9391;
  if (register_operand (x2, V2SImode))
    {
      operands[1] = x2;
      goto L9337;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9391:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2SImode))
    {
      operands[1] = x3;
      goto L9392;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9392:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L9393;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9393:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9394;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9394:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L9395;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9395:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, V2SImode))
    {
      operands[2] = x2;
      goto L9396;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9396:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00002000) != 0)))
    {
      return 848;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9337:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2SImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9338;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9338:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2SImode))
    {
      operands[2] = x3;
      goto L9339;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9339:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L9340;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9340:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L9341;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9341:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L9342;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9342:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00002000) != 0)))
    {
      return 845;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13169:
  if (nonimmediate_operand (x1, V2SFmode))
    {
      operands[0] = x1;
      goto L8348;
    }
 L13183:
  if (push_operand (x1, V2SFmode))
    {
      operands[0] = x1;
      goto L8404;
    }
  goto L9442;
 L8348:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (vector_move_operand (x1, V2SFmode))
    {
      operands[1] = x1;
      goto L8349;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13183;
 L8349:
  if ((((target_flags & 0x00020000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 704;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13183;
 L8404:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (register_operand (x1, V2SFmode))
    {
      operands[1] = x1;
      goto L8405;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8405:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 718;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13170:
  if (nonimmediate_operand (x1, V2DFmode))
    {
      operands[0] = x1;
      goto L8352;
    }
 L13174:
  if (push_operand (x1, V2DFmode))
    {
      operands[0] = x1;
      goto L8368;
    }
  if (register_operand (x1, V2DFmode))
    {
      operands[0] = x1;
      goto L8643;
    }
  goto L9442;
 L8352:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (vector_move_operand (x1, V2DFmode))
    {
      operands[1] = x1;
      goto L8353;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13174;
 L8353:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 705;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13174;
 L8368:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (register_operand (x1, V2DFmode))
    {
      operands[1] = x1;
      goto L8369;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8369:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 709;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8643:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V2DFmode)
    goto L13803;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13803:
  switch (((enum rtx_code) (x1)->code))
    {
    case AND:
      goto L8644;
    case IOR:
      goto L8657;
    case XOR:
      goto L8663;
    case UNSPEC:
      goto L13807;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8644:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2DFmode)
    goto L13809;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13809:
  if (((enum rtx_code) (x2)->code) == NOT)
    goto L8651;
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L8645;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8651:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L8652;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8652:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L8653;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8653:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 757;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8645:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L8646;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8646:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 756;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8657:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L8658;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8658:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L8659;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8659:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 758;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8663:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L8664;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8664:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L8665;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8665:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 759;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13807:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 45)
    goto L8723;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8723:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (x2 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 769;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13171:
  if (nonimmediate_operand (x1, V8HImode))
    {
      operands[0] = x1;
      goto L8356;
    }
 L13176:
  if (push_operand (x1, V8HImode))
    {
      operands[0] = x1;
      goto L8376;
    }
  goto L9442;
 L8356:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (vector_move_operand (x1, V8HImode))
    {
      operands[1] = x1;
      goto L8357;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13176;
 L8357:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 706;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13176;
 L8376:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (register_operand (x1, V8HImode))
    {
      operands[1] = x1;
      goto L8377;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8377:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 711;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13172:
  if (nonimmediate_operand (x1, V16QImode))
    {
      operands[0] = x1;
      goto L8360;
    }
 L13177:
  if (push_operand (x1, V16QImode))
    {
      operands[0] = x1;
      goto L8380;
    }
  goto L9442;
 L8360:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x1, V16QImode))
    {
      operands[1] = x1;
      goto L8361;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13177;
 L8361:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 707;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13177;
 L8380:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (register_operand (x1, V16QImode))
    {
      operands[1] = x1;
      goto L8381;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8381:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 712;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13173:
  if (push_operand (x1, TImode))
    {
      operands[0] = x1;
      goto L8364;
    }
 L13184:
  if (nonimmediate_operand (x1, TImode))
    {
      operands[0] = x1;
      goto L8408;
    }
 L13193:
  if (register_operand (x1, TImode))
    {
      operands[0] = x1;
      goto L8668;
    }
  goto L9442;
 L8364:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (register_operand (x1, TImode))
    {
      operands[1] = x1;
      goto L8365;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13184;
 L8365:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 708;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13184;
 L8408:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (vector_move_operand (x1, TImode))
    {
      operands[1] = x1;
      goto L8409;
    }
 L8412:
  if (general_operand (x1, TImode))
    {
      operands[1] = x1;
      goto L8413;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13193;
 L8409:
  if ((((target_flags & 0x00004000) != 0) && !0
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 719;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L8412;
 L8413:
  if ((0
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 720;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13193;
 L8668:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == TImode)
    goto L13810;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13810:
  switch (((enum rtx_code) (x1)->code))
    {
    case AND:
      goto L8669;
    case IOR:
      goto L8695;
    case XOR:
      goto L8707;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8669:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == TImode)
    goto L13814;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13814:
  if (((enum rtx_code) (x2)->code) == NOT)
    goto L8682;
  if (nonimmediate_operand (x2, TImode))
    {
      operands[1] = x2;
      goto L8670;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8682:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, TImode))
    {
      operands[1] = x3;
      goto L8683;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8683:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, TImode))
    {
      operands[2] = x2;
      goto L8684;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8684:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 762;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8670:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, TImode))
    {
      operands[2] = x2;
      goto L8671;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8671:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 760;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8695:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, TImode))
    {
      operands[1] = x2;
      goto L8696;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8696:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, TImode))
    {
      operands[2] = x2;
      goto L8697;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8697:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 764;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8707:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, TImode))
    {
      operands[1] = x2;
      goto L8708;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8708:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, TImode))
    {
      operands[2] = x2;
      goto L8709;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8709:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 766;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13185:
  if (nonimmediate_operand (x1, TFmode))
    {
      operands[0] = x1;
      goto L8416;
    }
  goto L9442;
 L8416:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_operand (x1, TFmode))
    {
      operands[1] = x1;
      goto L8417;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8417:
  if ((0
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 721;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13186:
  if (register_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L8430;
    }
 L13202:
  if (memory_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L9439;
    }
  goto L9442;
 L8430:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SImode)
    goto L13815;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L13815:
  switch (((enum rtx_code) (x1)->code))
    {
    case UNSPEC:
      goto L13818;
    case VEC_SELECT:
      goto L8885;
    case ZERO_EXTEND:
      goto L9144;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L13818:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 33)
    goto L8431;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L8431:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  switch (((enum machine_mode) (x2)->mode))
    {
    case V4SFmode:
      goto L13819;
    case V8QImode:
      goto L13820;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L13819:
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8432;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L8432:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 724;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L13820:
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L8437;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L8437:
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 725;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L8885:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode)
    goto L13821;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L13821:
  switch (((enum rtx_code) (x2)->code))
    {
    case FIX:
      goto L8886;
    case UNSPEC:
      goto L13823;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L8886:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8887;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L8887:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == PARALLEL
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L8888;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L8888:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 787;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L13823:
  if ((((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 30)
    goto L8900;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L8900:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8901;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L8901:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == PARALLEL
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L8902;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L8902:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 789;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L9144:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9145;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L9145:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4HImode))
    {
      operands[1] = x3;
      goto L9146;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L9146:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9147;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L9147:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (const_0_to_3_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L9148;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L9148:
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 820;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13202;
 L9439:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SImode
      && ((enum rtx_code) (x1)->code) == UNSPEC_VOLATILE
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 40)
    goto L9440;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9440:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (x2 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 851;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13189:
  if (memory_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L8459;
    }
 L13199:
  if (register_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L8891;
    }
  goto L9442;
 L8459:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 34)
    goto L8460;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13199;
 L8460:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L8461;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13199;
 L8461:
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 729;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13199;
 L8891:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DImode)
    goto L13824;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13824:
  switch (((enum rtx_code) (x1)->code))
    {
    case VEC_SELECT:
      goto L8892;
    case UNSPEC:
      goto L13827;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8892:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4DImode)
    goto L13829;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13829:
  switch (((enum rtx_code) (x2)->code))
    {
    case FIX:
      goto L8893;
    case UNSPEC:
      goto L13831;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8893:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8894;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8894:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == PARALLEL
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L8895;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8895:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 788;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13831:
  if ((((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 30)
    goto L8907;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8907:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8908;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8908:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == PARALLEL
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L8909;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8909:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00004000) != 0) && 0))
    {
      return 790;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13827:
  switch ((((((x1)->u.fld[0]).rtvec1))->num_elem))
    {
    case 1:
      goto L13832;
    case 2:
      goto L13833;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13832:
  if ((((x1)->u.fld[1]).rtint) == 45)
    goto L8931;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8931:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L13834;
 L9080:
  if (x2 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00002000) != 0)))
    {
      return 813;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13834:
  switch (((enum rtx_code) (x2)->code))
    {
    case PLUS:
      goto L8932;
    case MINUS:
      goto L8981;
    case IOR:
      goto L9067;
    case XOR:
      goto L9074;
    case AND:
      goto L9085;
    case LSHIFTRT:
      goto L9243;
    case ASHIFT:
      goto L9262;
    default:
     break;
   }
  goto L9080;
 L8932:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L8933;
    }
  goto L9080;
 L8933:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L8934;
    }
  goto L9080;
 L8934:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 794;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  goto L9080;
 L8981:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L8982;
    }
  goto L9080;
 L8982:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L8983;
    }
  goto L9080;
 L8983:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 802;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  goto L9080;
 L9067:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L9068;
    }
  goto L9080;
 L9068:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L9069;
    }
  goto L9080;
 L9069:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 811;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  goto L9080;
 L9074:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L9075;
    }
  goto L9080;
 L9075:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L9076;
    }
  goto L9080;
 L9076:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 812;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  goto L9080;
 L9085:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode)
    goto L13842;
  goto L9080;
 L13842:
  if (((enum rtx_code) (x3)->code) == NOT)
    goto L9093;
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L9086;
    }
  goto L9080;
 L9093:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L9094;
    }
  goto L9080;
 L9094:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L9095;
    }
  goto L9080;
 L9095:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 815;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  goto L9080;
 L9086:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L9087;
    }
  goto L9080;
 L9087:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 814;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  goto L9080;
 L9243:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L9244;
    }
  goto L9080;
 L9244:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L9245;
    }
  goto L9080;
 L9245:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 836;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  goto L9080;
 L9262:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L9263;
    }
  goto L9080;
 L9263:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L9264;
    }
  goto L9080;
 L9264:
  if ((((target_flags & 0x00002000) != 0)))
    {
      return 839;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  goto L9080;
 L13833:
  if ((((x1)->u.fld[1]).rtint) == 61)
    goto L9129;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9129:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L9130;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9130:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L9131;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9131:
  if ((((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 818;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13191:
  if (memory_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L8513;
    }
  goto L9442;
 L8513:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SFmode
      && ((enum rtx_code) (x1)->code) == VEC_SELECT)
    goto L8514;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8514:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L8515;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8515:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == PARALLEL
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L8516;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8516:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 736;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13196:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 17)
    goto L8758;
  goto L9442;
 L8758:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == CCFPmode
      && ((enum rtx_code) (x1)->code) == COMPARE)
    goto L8759;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8759:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L8760;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8760:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[0] = x3;
      goto L8761;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8761:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L8762;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8762:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L8763;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8763:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L8764;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8764:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8765;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8765:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L8766;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8766:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 774;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L13197:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 17)
    goto L8769;
  goto L9442;
 L8769:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == CCFPUmode
      && ((enum rtx_code) (x1)->code) == COMPARE)
    goto L8770;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8770:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L8771;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8771:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[0] = x3;
      goto L8772;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8772:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L8773;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8773:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L8774;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8774:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L8775;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8775:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V4SFmode))
    {
      operands[1] = x3;
      goto L8776;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8776:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L8777;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L8777:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00004000) != 0)))
    {
      return 775;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9442;
 L9443:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == BLKmode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 44)
    goto L9444;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9469;
 L9444:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x2, operands[0])
      && (((target_flags & 0x00004000) != 0) || ((target_flags & 0x00040000) != 0)))
    {
      return 852;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9469;
 L13203:
  if (register_operand (x1, V2SFmode))
    {
      operands[0] = x1;
      goto L9470;
    }
  goto L10855;
 L9470:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V2SFmode)
    goto L13843;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13843:
  tem = recog_14 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13204:
  if (register_operand (x1, V2SImode))
    {
      operands[0] = x1;
      goto L9488;
    }
  goto L10855;
 L9488:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V2SImode)
    goto L13874;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13874:
  switch (((enum rtx_code) (x1)->code))
    {
    case GT:
      goto L9489;
    case GE:
      goto L9495;
    case EQ:
      goto L9501;
    case FIX:
      goto L9562;
    case SIGN_EXTEND:
      goto L9567;
    case VEC_SELECT:
      goto L9708;
    case UNSPEC:
      goto L13881;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9489:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9490;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9490:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[2] = x2;
      goto L9491;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9491:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 857;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9495:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9496;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9496:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[2] = x2;
      goto L9497;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9497:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 858;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9501:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9502;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9502:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[2] = x2;
      goto L9503;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9503:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 859;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9562:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case V2SFmode:
      goto L13882;
    case V2DFmode:
      goto L13883;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13882:
  if (nonimmediate_operand (x2, V2SFmode))
    {
      operands[1] = x2;
      goto L9563;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9563:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 864;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13883:
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L9969;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9969:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 917;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9567:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2HImode
      && ((enum rtx_code) (x2)->code) == SS_TRUNCATE)
    goto L9568;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9568:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V2SImode
      && ((enum rtx_code) (x3)->code) == FIX)
    goto L9569;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9569:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, V2SFmode))
    {
      operands[1] = x4;
      goto L9570;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9570:
  if ((((target_flags & 0x00040000) != 0)))
    {
      return 865;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9708:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V2SImode))
    {
      operands[1] = x2;
      goto L9709;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9709:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == PARALLEL
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L9710;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9710:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (1)])
    goto L9711;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9711:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (x3 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00040000) != 0)))
    {
      return 878;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13881:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 30)
    goto L9973;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9973:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L9974;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9974:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 918;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13205:
  if (register_operand (x1, V8QImode))
    {
      operands[0] = x1;
      goto L9657;
    }
  goto L10855;
 L9657:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V8QImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x1)->u.fld[1]).rtint) == 49)
    goto L9658;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9658:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V8QImode))
    {
      operands[1] = x2;
      goto L9659;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9659:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V8QImode))
    {
      operands[2] = x2;
      goto L9660;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9660:
  if ((((target_flags & 0x00020000) != 0)))
    {
      return 871;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13206:
  if (register_operand (x1, V4HImode))
    {
      operands[0] = x1;
      goto L9691;
    }
  goto L10855;
 L9691:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V4HImode
      && ((enum rtx_code) (x1)->code) == TRUNCATE)
    goto L9692;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9692:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L9693;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9693:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V4SImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L9694;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9694:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V4SImode
      && ((enum rtx_code) (x4)->code) == MULT)
    goto L9695;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9695:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x5)->mode) == V4SImode
      && ((enum rtx_code) (x5)->code) == SIGN_EXTEND)
    goto L9696;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9696:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (register_operand (x6, V4HImode))
    {
      operands[1] = x6;
      goto L9697;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9697:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x5)->mode) == V4SImode
      && ((enum rtx_code) (x5)->code) == SIGN_EXTEND)
    goto L9698;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9698:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, V4HImode))
    {
      operands[2] = x6;
      goto L9699;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9699:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V4SImode
      && ((enum rtx_code) (x4)->code) == CONST_VECTOR
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 4)
    goto L9700;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9700:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x5)->code) == CONST_INT
      && ((x5)->u.hwint[0]) == 32768L)
    goto L9701;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9701:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x5)->code) == CONST_INT
      && ((x5)->u.hwint[0]) == 32768L)
    goto L9702;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9702:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x5)->code) == CONST_INT
      && ((x5)->u.hwint[0]) == 32768L)
    goto L9703;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9703:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x5)->code) == CONST_INT
      && ((x5)->u.hwint[0]) == 32768L)
    goto L9704;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9704:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (16)]
      && (((target_flags & 0x00020000) != 0)))
    {
      return 877;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13207:
  if (register_operand (x1, V2DFmode))
    {
      operands[0] = x1;
      goto L9739;
    }
 L13213:
  if (memory_operand (x1, V2DFmode))
    {
      operands[0] = x1;
      goto L9913;
    }
 L13222:
  if (nonimmediate_operand (x1, V2DFmode))
    {
      operands[0] = x1;
      goto L10754;
    }
  goto L10855;
 L9739:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V2DFmode)
    goto L13884;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13213;
 L13884:
  tem = recog_15 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13213;
 L9913:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V2DFmode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 34)
    goto L9914;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13222;
 L9914:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L9915;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13222;
 L9915:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 908;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13222;
 L10754:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V2DFmode)
    goto L13914;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13914:
  switch (((enum rtx_code) (x1)->code))
    {
    case UNSPEC:
      goto L13917;
    case VEC_MERGE:
      goto L10822;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13917:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L13919;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13919:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 38L:
      goto L10755;
    case 39L:
      goto L10760;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10755:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L10756;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10756:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 1002;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10760:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L10761;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10761:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 1003;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10822:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L10823;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10823:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L10824;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10824:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT)
    goto L13921;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13921:
  if ((int) ((x2)->u.hwint[0]) == ((x2)->u.hwint[0]))
    switch ((int) ((x2)->u.hwint[0]))
      {
      case 2L:
        goto L13923;
      case 1L:
        goto L13924;
      default:
        break;
      }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13923:
  if ((((target_flags & 0x00008000) != 0) && (((enum rtx_code) (operands[1])->code) == MEM || ((enum rtx_code) (operands[2])->code) == MEM)))
    {
      return 1013;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13924:
  if ((((target_flags & 0x00008000) != 0) && ix86_binary_operator_ok (UNKNOWN, V2DFmode, operands)))
    {
      return 1015;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13208:
  if (register_operand (x1, V2DImode))
    {
      operands[0] = x1;
      goto L9835;
    }
 L13214:
  if (memory_operand (x1, V2DImode))
    {
      operands[0] = x1;
      goto L9918;
    }
  goto L10855;
 L9835:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V2DImode)
    goto L13926;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L13926:
  switch (((enum rtx_code) (x1)->code))
    {
    case NOT:
      goto L9842;
    case VEC_MERGE:
      goto L9849;
    case PLUS:
      goto L10082;
    case MINUS:
      goto L10130;
    case MULT:
      goto L10199;
    case UNSPEC:
      goto L13935;
    case LSHIFTRT:
      goto L10421;
    case ASHIFT:
      goto L10439;
    case VEC_CONCAT:
      goto L10787;
    case EQ:
    case LT:
    case LE:
    case UNORDERED:
    case NE:
    case UNGE:
    case UNGT:
    case ORDERED:
    case UNEQ:
    case UNLT:
    case UNLE:
    case LTGT:
    case GE:
    case GT:
      goto L13925;
    default:
      x1 = (((x0)->u.fld[0]).rtx1);
      goto L13214;
   }
 L13925:
  if (sse_comparison_operator (x1, V2DImode))
    {
      operands[3] = x1;
      goto L9836;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9842:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (sse_comparison_operator (x2, V2DImode))
    {
      operands[3] = x2;
      goto L9843;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9843:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9844;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9844:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V2DFmode))
    {
      operands[2] = x3;
      goto L9845;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9845:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 899;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9849:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2DImode)
    goto L13937;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L13937:
  switch (((enum rtx_code) (x2)->code))
    {
    case NOT:
      goto L9859;
    case VEC_SELECT:
      goto L10736;
    case EQ:
    case LT:
    case LE:
    case UNORDERED:
    case NE:
    case UNGE:
    case UNGT:
    case ORDERED:
    case UNEQ:
    case UNLT:
    case UNLE:
    case LTGT:
    case GE:
    case GT:
      goto L13936;
    case SUBREG:
    case REG:
      goto L13939;
    default:
      x1 = (((x0)->u.fld[0]).rtx1);
      goto L13214;
   }
 L13936:
  if (sse_comparison_operator (x2, V2DImode))
    {
      operands[3] = x2;
      goto L9850;
    }
 L13939:
  if (register_operand (x2, V2DImode))
    {
      operands[1] = x2;
      goto L10746;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9859:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (sse_comparison_operator (x3, V2DImode))
    {
      operands[3] = x3;
      goto L9860;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9860:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, V2DFmode))
    {
      operands[1] = x4;
      goto L9861;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9861:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, V2DFmode))
    {
      operands[2] = x4;
      goto L9862;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9862:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2DImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L9863;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9863:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L9864;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9864:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 901;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10736:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DImode))
    {
      operands[2] = x3;
      goto L10737;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10737:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L10738;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10738:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10739;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10739:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10740;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10740:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, V2DImode))
    {
      operands[1] = x2;
      goto L10741;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10741:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 1000;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9850:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9851;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9851:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, V2DFmode))
    {
      operands[2] = x3;
      goto L9852;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9852:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2DImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L9853;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9853:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L9854;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9854:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 900;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10746:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2DImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10747;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10747:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DImode))
    {
      operands[2] = x3;
      goto L10748;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10748:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L10749;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10749:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (1)])
    goto L10750;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10750:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10751;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10751:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (1)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 1001;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10082:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DImode))
    {
      operands[1] = x2;
      goto L10083;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10083:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DImode))
    {
      operands[2] = x2;
      goto L10084;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10084:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 933;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10130:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DImode))
    {
      operands[1] = x2;
      goto L10131;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10131:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DImode))
    {
      operands[2] = x2;
      goto L10132;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10132:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 941;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10199:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L10200;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10200:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V2SImode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L10201;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10201:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, V4SImode))
    {
      operands[1] = x4;
      goto L10202;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10202:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L10203;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10203:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (0)])
    goto L10204;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10204:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[1]);
  if (x5 == const_int_rtx[64 + (2)])
    goto L10205;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10205:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V2DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L10206;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10206:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V2SImode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L10207;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10207:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, V4SImode))
    {
      operands[2] = x4;
      goto L10208;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10208:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L10209;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10209:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (0)])
    goto L10210;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10210:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[1]);
  if (x5 == const_int_rtx[64 + (2)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 950;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L13935:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x1)->u.fld[1]).rtint) == 61)
    goto L10296;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10296:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10297;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10297:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L10298;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10298:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 955;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10421:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DImode))
    {
      operands[1] = x2;
      goto L10422;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10422:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L10423;
    }
 L10474:
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L10475;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10423:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 975;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L10474;
 L10475:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonmemory_operand (x3, V2DImode))
    {
      operands[2] = x3;
      goto L10476;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10476:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 983;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10439:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DImode))
    {
      operands[1] = x2;
      goto L10440;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10440:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L10441;
    }
 L10495:
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == SUBREG
      && (((x2)->u.fld[1]).rtint) == 0)
    goto L10496;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10441:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 978;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L10495;
 L10496:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonmemory_operand (x3, V2DImode))
    {
      operands[2] = x3;
      goto L10497;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10497:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 986;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10787:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L13941;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L13941:
  if (((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10798;
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L10788;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10798:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, V2DImode))
    {
      operands[1] = x3;
      goto L10799;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10799:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10800;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10800:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10801;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10801:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 1010;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L10788:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT)
    goto L13942;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L13942:
  if (((x2)->u.hwint[0]) == 0L)
    goto L13944;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L13944:
  if ((((target_flags & 0x00008000) != 0) && !0))
    {
      return 1008;
    }
 L13945:
  if ((((target_flags & 0x00008000) != 0) && 0))
    {
      return 1009;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9836:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L9837;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9837:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L9838;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9838:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 898;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13214;
 L9918:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V2DImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 34)
    goto L9919;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9919:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V2DImode))
    {
      operands[1] = x2;
      goto L9920;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9920:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 909;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13209:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 17)
    goto L9867;
  goto L10855;
 L9867:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == CCFPmode
      && ((enum rtx_code) (x1)->code) == COMPARE)
    goto L9868;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9868:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9869;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9869:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[0] = x3;
      goto L9870;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9870:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9871;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9871:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L9872;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9872:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9873;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9873:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9874;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9874:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9875;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9875:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 902;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13210:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 17)
    goto L9878;
  goto L10855;
 L9878:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == CCFPUmode
      && ((enum rtx_code) (x1)->code) == COMPARE)
    goto L9879;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9879:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9880;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9880:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[0] = x3;
      goto L9881;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9881:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9882;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9882:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L9883;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9883:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9884;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9884:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9885;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9885:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9886;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9886:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 903;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13211:
  if (register_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L9889;
    }
 L13215:
  if (memory_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L9923;
    }
 L13225:
  if (nonimmediate_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L10815;
    }
  goto L10855;
 L9889:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SImode)
    goto L13946;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L13946:
  switch (((enum rtx_code) (x1)->code))
    {
    case UNSPEC:
      goto L13950;
    case FIX:
      goto L9983;
    case ZERO_EXTEND:
      goto L10311;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L13950:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L13952;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L13952:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 33L:
      goto L9890;
    case 30L:
      goto L9997;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L9890:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  switch (((enum machine_mode) (x2)->mode))
    {
    case V2DFmode:
      goto L13954;
    case V16QImode:
      goto L13955;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L13954:
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L9891;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L9891:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 904;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L13955:
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L9896;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L9896:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 905;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L9997:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9998;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L9998:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9999;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L9999:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10000;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L10000:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 922;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L9983:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9984;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L9984:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9985;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L9985:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9986;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L9986:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 920;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L10311:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10312;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L10312:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V8HImode))
    {
      operands[1] = x3;
      goto L10313;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L10313:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10314;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L10314:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (const_0_to_7_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L10315;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L10315:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 957;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13215;
 L9923:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 34)
    goto L9924;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13225;
 L9924:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L9925;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13225;
 L9925:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 910;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13225;
 L10815:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SImode
      && ((enum rtx_code) (x1)->code) == VEC_SELECT)
    goto L10816;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10816:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SImode))
    {
      operands[1] = x2;
      goto L10817;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10817:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == PARALLEL
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10818;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10818:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 1012;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13212:
  if (((enum rtx_code) (x1)->code) == MEM)
    goto L9899;
  if (register_operand (x1, V16QImode))
    {
      operands[0] = x1;
      goto L10063;
    }
 L13223:
  if (nonimmediate_operand (x1, V16QImode))
    {
      operands[0] = x1;
      goto L10764;
    }
  goto L10855;
 L9899:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L13956;
    case DImode:
      goto L13957;
    default:
      break;
    }
  goto L13223;
 L13956:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L9900;
    }
  goto L13223;
 L9900:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V16QImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x1)->u.fld[1]).rtint) == 32)
    goto L9901;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13223;
 L9901:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L9902;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13223;
 L9902:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L9903;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13223;
 L9903:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 906;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13223;
 L13957:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L9907;
    }
  goto L13223;
 L9907:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V16QImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x1)->u.fld[1]).rtint) == 32)
    goto L9908;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13223;
 L9908:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L9909;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13223;
 L9909:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x2, V16QImode))
    {
      operands[2] = x2;
      goto L9910;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13223;
 L9910:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 907;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13223;
 L10063:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V16QImode)
    goto L13958;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13223;
 L13958:
  tem = recog_16 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13223;
 L10764:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V16QImode)
    goto L13975;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13975:
  if (((enum rtx_code) (x1)->code) == UNSPEC)
    goto L13977;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13977:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L13979;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13979:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 38L:
      goto L10765;
    case 39L:
      goto L10770;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10765:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10766;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10766:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 1004;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10770:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10771;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10771:
  if ((((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 1005;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13216:
  if (register_operand (x1, V4SFmode))
    {
      operands[0] = x1;
      goto L9928;
    }
  goto L10855;
 L9928:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V4SFmode)
    goto L13981;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13981:
  switch (((enum rtx_code) (x1)->code))
    {
    case FLOAT:
      goto L9929;
    case VEC_MERGE:
      goto L10027;
    case SUBREG:
      goto L13984;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9929:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V4SImode))
    {
      operands[1] = x2;
      goto L9930;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L9930:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 911;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10027:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L10028;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10028:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SFmode
      && ((enum rtx_code) (x2)->code) == VEC_DUPLICATE)
    goto L10029;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10029:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V2SFmode
      && ((enum rtx_code) (x3)->code) == FLOAT_TRUNCATE)
    goto L10030;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10030:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, V2DFmode))
    {
      operands[2] = x4;
      goto L10031;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10031:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (x2 == const_int_rtx[64 + (14)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 926;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13984:
  if ((((x1)->u.fld[1]).rtint) == 0)
    goto L10046;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10046:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == V4SImode
      && ((enum rtx_code) (x2)->code) == VEC_CONCAT)
    goto L10047;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10047:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V2SImode
      && ((enum rtx_code) (x3)->code) == SUBREG
      && (((x3)->u.fld[1]).rtint) == 0)
    goto L10048;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10048:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == V2SFmode
      && ((enum rtx_code) (x4)->code) == FLOAT_TRUNCATE)
    goto L10049;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10049:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x5, V2DFmode))
    {
      operands[1] = x5;
      goto L10050;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10050:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == V2SImode
      && ((enum rtx_code) (x3)->code) == CONST_VECTOR
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L10051;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10051:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L10052;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10052:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (x4 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 928;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13217:
  if (register_operand (x1, V4SImode))
    {
      operands[0] = x1;
      goto L9933;
    }
  goto L10855;
 L9933:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V4SImode)
    goto L13985;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13985:
  tem = recog_17 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13218:
  if (register_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L9989;
    }
 L13224:
  if (nonimmediate_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L10774;
    }
  goto L10855;
 L9989:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DImode)
    goto L14010;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L14010:
  switch (((enum rtx_code) (x1)->code))
    {
    case FIX:
      goto L9990;
    case UNSPEC:
      goto L14013;
    case MULT:
      goto L10186;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L9990:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L9991;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L9991:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L9992;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L9992:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L9993;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L9993:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0) && 0))
    {
      return 921;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L14013:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 30)
    goto L10004;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10004:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10005;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10005:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L10006;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10006:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10007;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10007:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0) && 0))
    {
      return 923;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10186:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L10187;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10187:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L10188;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10188:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, V2SImode))
    {
      operands[1] = x4;
      goto L10189;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10189:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10190;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10190:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (0)])
    goto L10191;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10191:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L10192;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10192:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == VEC_SELECT)
    goto L10193;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10193:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, V2SImode))
    {
      operands[2] = x4;
      goto L10194;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10194:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == PARALLEL
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10195;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10195:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (x5 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 949;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13224;
 L10774:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DImode
      && ((enum rtx_code) (x1)->code) == VEC_SELECT)
    goto L10775;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10775:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DImode))
    {
      operands[1] = x2;
      goto L10776;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10776:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == PARALLEL
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10777;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10777:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x3)->code) == CONST_INT)
    goto L14014;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L14014:
  if (((x3)->u.hwint[0]) == 0L)
    goto L14016;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L14016:
  if ((((target_flags & 0x00008000) != 0) && !0))
    {
      return 1006;
    }
 L14017:
  if ((((target_flags & 0x00008000) != 0) && 0))
    {
      return 1007;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13220:
  if (register_operand (x1, V8HImode))
    {
      operands[0] = x1;
      goto L10069;
    }
  goto L10855;
 L10069:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V8HImode)
    goto L14018;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L14018:
  tem = recog_18 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13221:
  if (register_operand (x1, TImode))
    {
      operands[0] = x1;
      goto L10500;
    }
  goto L10855;
 L10500:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == TImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 45)
    goto L10501;
  if (x1 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 952;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10501:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x2)->mode) == TImode)
    goto L14049;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L14049:
  switch (((enum rtx_code) (x2)->code))
    {
    case ASHIFT:
      goto L10502;
    case LSHIFTRT:
      goto L10510;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10502:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, TImode))
    {
      operands[1] = x3;
      goto L10503;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10503:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == MULT)
    goto L10504;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10504:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (immediate_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L10505;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10505:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 987;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10510:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, TImode))
    {
      operands[1] = x3;
      goto L10511;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10511:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == MULT)
    goto L10512;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10512:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (immediate_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L10513;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10513:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 988;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L13226:
  if (memory_operand (x1, DFmode))
    {
      operands[0] = x1;
      goto L10840;
    }
  goto L10855;
 L10840:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DFmode
      && ((enum rtx_code) (x1)->code) == VEC_SELECT)
    goto L10841;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10841:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L10842;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10842:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == PARALLEL
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10843;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10843:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00008000) != 0)))
    {
      return 1016;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10855;
 L10856:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == BLKmode)
    goto L14051;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10872;
 L14051:
  if (((enum rtx_code) (x1)->code) == UNSPEC)
    goto L14053;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10872;
 L14053:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L14055;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10872;
 L14055:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 59L:
      goto L10857;
    case 60L:
      goto L10861;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10872;
 L10857:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x2, operands[0])
      && (((target_flags & 0x00008000) != 0)))
    {
      return 1019;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10872;
 L10861:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x2, operands[0])
      && (((target_flags & 0x00008000) != 0)))
    {
      return 1020;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L10872;
 L13227:
  if (register_operand (x1, V4SFmode))
    {
      operands[0] = x1;
      goto L10873;
    }
  goto ret0;
 L10873:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V4SFmode)
    goto L14057;
  goto ret0;
 L14057:
  if (((enum rtx_code) (x1)->code) == UNSPEC)
    goto L14062;
  goto ret0;
 L14062:
  switch ((((((x1)->u.fld[0]).rtvec1))->num_elem))
    {
    case 2:
      goto L14067;
    case 1:
      goto L14070;
    default:
      break;
    }
  goto ret0;
 L14067:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 71L:
      goto L10874;
    case 72L:
      goto L10886;
    case 73L:
      goto L10898;
    default:
      break;
    }
  goto ret0;
 L10874:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L10875;
    }
  goto ret0;
 L10875:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L10876;
    }
  goto ret0;
 L10876:
  if ((((target_flags & 0x00010000) != 0)))
    {
      return 1023;
    }
  goto ret0;
 L10886:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L10887;
    }
  goto ret0;
 L10887:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L10888;
    }
  goto ret0;
 L10888:
  if ((((target_flags & 0x00010000) != 0)))
    {
      return 1025;
    }
  goto ret0;
 L10898:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L10899;
    }
  goto ret0;
 L10899:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L10900;
    }
  goto ret0;
 L10900:
  if ((((target_flags & 0x00010000) != 0)))
    {
      return 1027;
    }
  goto ret0;
 L14070:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 74L:
      goto L10910;
    case 75L:
      goto L10915;
    default:
      break;
    }
  goto ret0;
 L10910:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L10911;
    }
  goto ret0;
 L10911:
  if ((((target_flags & 0x00010000) != 0)))
    {
      return 1029;
    }
  goto ret0;
 L10915:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[1] = x2;
      goto L10916;
    }
  goto ret0;
 L10916:
  if ((((target_flags & 0x00010000) != 0)))
    {
      return 1030;
    }
  goto ret0;
 L13228:
  if (register_operand (x1, V2DFmode))
    {
      operands[0] = x1;
      goto L10879;
    }
  goto ret0;
 L10879:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V2DFmode)
    goto L14072;
  goto ret0;
 L14072:
  switch (((enum rtx_code) (x1)->code))
    {
    case UNSPEC:
      goto L14076;
    case VEC_DUPLICATE:
      goto L10925;
    default:
     break;
   }
  goto ret0;
 L14076:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L14079;
  goto ret0;
 L14079:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 71L:
      goto L10880;
    case 72L:
      goto L10892;
    case 73L:
      goto L10904;
    default:
      break;
    }
  goto ret0;
 L10880:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L10881;
    }
  goto ret0;
 L10881:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L10882;
    }
  goto ret0;
 L10882:
  if ((((target_flags & 0x00010000) != 0)))
    {
      return 1024;
    }
  goto ret0;
 L10892:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L10893;
    }
  goto ret0;
 L10893:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L10894;
    }
  goto ret0;
 L10894:
  if ((((target_flags & 0x00010000) != 0)))
    {
      return 1026;
    }
  goto ret0;
 L10904:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, V2DFmode))
    {
      operands[1] = x2;
      goto L10905;
    }
  goto ret0;
 L10905:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L10906;
    }
  goto ret0;
 L10906:
  if ((((target_flags & 0x00010000) != 0)))
    {
      return 1028;
    }
  goto ret0;
 L10925:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L14083;
  goto ret0;
 L14083:
  if (((enum rtx_code) (x2)->code) == VEC_SELECT)
    goto L10931;
  if (memory_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L10926;
    }
  goto ret0;
 L10931:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, V2DFmode))
    {
      operands[1] = x3;
      goto L10932;
    }
  goto ret0;
 L10932:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == PARALLEL
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L10933;
  goto ret0;
 L10933:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00010000) != 0)))
    {
      return 1033;
    }
  goto ret0;
 L10926:
  if ((((target_flags & 0x00010000) != 0)))
    {
      return 1032;
    }
  goto ret0;
 L13229:
  if (register_operand (x1, V16QImode))
    {
      operands[0] = x1;
      goto L10919;
    }
  goto ret0;
 L10919:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == V16QImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 76)
    goto L10920;
  goto ret0;
 L10920:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (memory_operand (x2, V16QImode))
    {
      operands[1] = x2;
      goto L10921;
    }
  goto ret0;
 L10921:
  if ((((target_flags & 0x00010000) != 0)))
    {
      return 1031;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_20 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case MEM:
      goto L280;
    case FIX:
      goto L1019;
    case PLUS:
      goto L1260;
    case MINUS:
      goto L1978;
    case AND:
      goto L2977;
    case IOR:
      goto L3298;
    case XOR:
      goto L3681;
    case NEG:
      goto L4098;
    case ASHIFT:
      goto L4681;
    case ASHIFTRT:
      goto L4943;
    case LSHIFTRT:
      goto L5311;
    case ROTATE:
      goto L5593;
    case ROTATERT:
      goto L5769;
    default:
     break;
   }
  goto ret0;
 L280:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L281;
  goto ret0;
 L281:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L282;
  goto ret0;
 L282:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L283;
  goto ret0;
 L283:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L284;
  goto ret0;
 L284:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L285;
  goto ret0;
 L285:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (4)]
      && (!0))
    {
      return 40;
    }
  goto ret0;
 L1019:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L1020;
    }
  goto ret0;
 L1020:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1021;
  goto ret0;
 L1021:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && !reload_completed && !reload_in_progress
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))))
    {
      return 152;
    }
  goto ret0;
 L1260:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14135;
  goto ret0;
 L14135:
  if (((enum rtx_code) (x3)->code) == PLUS)
    goto L1261;
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L1472;
    }
  goto ret0;
 L1261:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x4, SImode))
    {
      operands[3] = x4;
      goto L1262;
    }
  goto ret0;
 L1262:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L1263;
    }
  goto ret0;
 L1263:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L1264;
    }
  goto ret0;
 L1264:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1265;
  goto ret0;
 L1265:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (PLUS, SImode, operands)))
    {
      return 182;
    }
  goto ret0;
 L1472:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L1473;
    }
  goto ret0;
 L1473:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1474;
  goto ret0;
 L1474:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (PLUS, SImode, operands)))
    {
      return 201;
    }
  goto ret0;
 L1978:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L1979;
    }
  goto ret0;
 L1979:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L1980;
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2018;
    }
  goto ret0;
 L1980:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x4, SImode))
    {
      operands[3] = x4;
      goto L1981;
    }
  goto ret0;
 L1981:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L1982;
    }
  goto ret0;
 L1982:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1983;
  goto ret0;
 L1983:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (MINUS, SImode, operands)))
    {
      return 232;
    }
  goto ret0;
 L2018:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2019;
  goto ret0;
 L2019:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (MINUS, SImode, operands)))
    {
      return 234;
    }
  goto ret0;
 L2977:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2978;
    }
  goto ret0;
 L2978:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2979;
    }
  goto ret0;
 L2979:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2980;
  goto ret0;
 L2980:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (AND, SImode, operands)))
    {
      return 290;
    }
  goto ret0;
 L3298:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14138;
  goto ret0;
 L14138:
  switch (((enum rtx_code) (x3)->code))
    {
    case ASHIFT:
      goto L4657;
    case ASHIFTRT:
      goto L4919;
    case SUBREG:
    case REG:
    case MEM:
      goto L14137;
    default:
      goto ret0;
   }
 L14137:
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L3299;
    }
  goto ret0;
 L4657:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[0]))
    goto L4658;
  goto ret0;
 L4658:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonmemory_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4659;
    }
  goto ret0;
 L4659:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == LSHIFTRT)
    goto L4660;
  goto ret0;
 L4660:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L4661;
    }
  goto ret0;
 L4661:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == QImode
      && ((enum rtx_code) (x4)->code) == MINUS)
    goto L4662;
  goto ret0;
 L4662:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (x5 == const_int_rtx[64 + (32)])
    goto L4663;
  goto ret0;
 L4663:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (rtx_equal_p (x5, operands[2]))
    goto L4664;
  goto ret0;
 L4664:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4665;
  goto ret0;
 L4665:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 406;
    }
  goto ret0;
 L4919:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[0]))
    goto L4920;
  goto ret0;
 L4920:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonmemory_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4921;
    }
  goto ret0;
 L4921:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ASHIFT)
    goto L4922;
  goto ret0;
 L4922:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L4923;
    }
  goto ret0;
 L4923:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == QImode
      && ((enum rtx_code) (x4)->code) == MINUS)
    goto L4924;
  goto ret0;
 L4924:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (x5 == const_int_rtx[64 + (32)])
    goto L4925;
  goto ret0;
 L4925:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (rtx_equal_p (x5, operands[2]))
    goto L4926;
  goto ret0;
 L4926:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4927;
  goto ret0;
 L4927:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 424;
    }
  goto ret0;
 L3299:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L3300;
    }
  goto ret0;
 L3300:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3301;
  goto ret0;
 L3301:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (IOR, SImode, operands)))
    {
      return 308;
    }
  goto ret0;
 L3681:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L3682;
    }
  goto ret0;
 L3682:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L3683;
    }
  goto ret0;
 L3683:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3684;
  goto ret0;
 L3684:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (XOR, SImode, operands)))
    {
      return 330;
    }
  goto ret0;
 L4098:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L4099;
    }
  goto ret0;
 L4099:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4100;
  goto ret0;
 L4100:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_unary_operator_ok (NEG, SImode, operands)))
    {
      return 354;
    }
  goto ret0;
 L4681:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L4682;
    }
  goto ret0;
 L4682:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4683;
    }
  goto ret0;
 L4683:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4684;
  goto ret0;
 L4684:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ASHIFT, SImode, operands)))
    {
      return 407;
    }
  goto ret0;
 L4943:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L4944;
    }
  goto ret0;
 L4944:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == CONST_INT)
    goto L14140;
 L5004:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5005;
    }
  goto ret0;
 L14140:
  if (const_int_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L4945;
    }
 L14141:
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4975;
    }
  goto L5004;
 L4945:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4946;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L14141;
 L4946:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((operands[2])->u.hwint[0]) == 31 && ((x86_use_cltd & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)))
    {
      return 425;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L14141;
 L4975:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4976;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5004;
 L4976:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ASHIFTRT, SImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 427;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5004;
 L5005:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5006;
  goto ret0;
 L5006:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ASHIFTRT, SImode, operands)))
    {
      return 429;
    }
  goto ret0;
 L5311:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L5312;
    }
  goto ret0;
 L5312:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5313;
    }
 L5342:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5343;
    }
  goto ret0;
 L5313:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5314;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5342;
 L5314:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 451;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5342;
 L5343:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5344;
  goto ret0;
 L5344:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (LSHIFTRT, HImode, operands)))
    {
      return 453;
    }
  goto ret0;
 L5593:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L5594;
    }
  goto ret0;
 L5594:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5595;
    }
 L5624:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5625;
    }
  goto ret0;
 L5595:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5596;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5624;
 L5596:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ROTATE, SImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 471;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5624;
 L5625:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5626;
  goto ret0;
 L5626:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ROTATE, SImode, operands)))
    {
      return 473;
    }
  goto ret0;
 L5769:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L5770;
    }
  goto ret0;
 L5770:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5771;
    }
 L5800:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5801;
    }
  goto ret0;
 L5771:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5772;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5800;
 L5772:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ROTATERT, SImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 483;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5800;
 L5801:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5802;
  goto ret0;
 L5802:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ROTATERT, SImode, operands)))
    {
      return 485;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_21 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case MEM:
      goto L14111;
    case ZERO_EXTRACT:
      goto L1788;
    default:
     break;
   }
 L14087:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L279;
    }
 L14088:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L327;
    }
  goto ret0;
 L14111:
  if (push_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L259;
    }
  goto L14087;
 L259:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_no_elim_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L260;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14087;
 L260:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L261;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14087;
 L261:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L262;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14087;
 L262:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (!0))
    {
      return 38;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14087;
 L1788:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L1789;
    }
  goto ret0;
 L1789:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L1790;
  goto ret0;
 L1790:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L1791;
  goto ret0;
 L1791:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L14112;
  goto ret0;
 L14112:
  switch (((enum rtx_code) (x2)->code))
    {
    case PLUS:
      goto L1792;
    case AND:
      goto L3121;
    case IOR:
      goto L3526;
    case XOR:
      goto L3864;
    default:
     break;
   }
  goto ret0;
 L1792:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L1793;
  goto ret0;
 L1793:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L1794;
    }
  goto ret0;
 L1794:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L1795;
  goto ret0;
 L1795:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L1848;
  goto ret0;
 L1848:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L1849;
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L1797;
    }
 L1822:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L1823;
    }
  goto ret0;
 L1849:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L1850;
    }
  goto ret0;
 L1850:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L1851;
  goto ret0;
 L1851:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L1852;
  goto ret0;
 L1852:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1853;
  goto ret0;
 L1853:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 224;
    }
  goto ret0;
 L1797:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1798;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L1822;
 L1798:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0))
    {
      return 222;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L1822;
 L1823:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1824;
  goto ret0;
 L1824:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0))
    {
      return 223;
    }
  goto ret0;
 L3121:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L3122;
  goto ret0;
 L3122:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L3123;
    }
  goto ret0;
 L3123:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3124;
  goto ret0;
 L3124:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3173;
  goto ret0;
 L3173:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14116;
 L3125:
  if (const_int_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L3126;
    }
  goto ret0;
 L14116:
  switch (((enum rtx_code) (x3)->code))
    {
    case ZERO_EXTEND:
      goto L3174;
    case ZERO_EXTRACT:
      goto L3230;
    default:
     break;
   }
  goto L3125;
 L3174:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L3175;
    }
 L3202:
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L3203;
    }
  goto L3125;
 L3175:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3176;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L3202;
 L3176:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0))
    {
      return 302;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L3202;
 L3203:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3204;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L3125;
 L3204:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0))
    {
      return 303;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L3125;
 L3230:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L3231;
    }
  goto L3125;
 L3231:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3232;
  goto L3125;
 L3232:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3233;
  goto L3125;
 L3233:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3234;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L3125;
 L3234:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 304;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L3125;
 L3126:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3127;
  goto ret0;
 L3127:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 300;
    }
  goto ret0;
 L3526:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L3527;
  goto ret0;
 L3527:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L3528;
    }
  goto ret0;
 L3528:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3529;
  goto ret0;
 L3529:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3556;
  goto ret0;
 L3556:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14118;
 L3530:
  if (const_int_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L3531;
    }
  goto ret0;
 L14118:
  switch (((enum rtx_code) (x3)->code))
    {
    case ZERO_EXTEND:
      goto L3557;
    case ZERO_EXTRACT:
      goto L3613;
    default:
     break;
   }
  goto L3530;
 L3557:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L3558;
    }
 L3585:
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L3586;
    }
  goto L3530;
 L3558:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3559;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L3585;
 L3559:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)))
    {
      return 324;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L3585;
 L3586:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3587;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L3530;
 L3587:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)))
    {
      return 325;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L3530;
 L3613:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L3614;
    }
  goto L3530;
 L3614:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3615;
  goto L3530;
 L3615:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3616;
  goto L3530;
 L3616:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3617;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L3530;
 L3617:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)))
    {
      return 326;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L3530;
 L3531:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3532;
  goto ret0;
 L3532:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)))
    {
      return 323;
    }
  goto ret0;
 L3864:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L3865;
  goto ret0;
 L3865:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L3866;
    }
  goto ret0;
 L3866:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3867;
  goto ret0;
 L3867:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3894;
  goto ret0;
 L3894:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14120;
 L3868:
  if (const_int_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L3869;
    }
  goto ret0;
 L14120:
  switch (((enum rtx_code) (x3)->code))
    {
    case ZERO_EXTEND:
      goto L3895;
    case ZERO_EXTRACT:
      goto L3951;
    default:
     break;
   }
  goto L3868;
 L3895:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L3896;
    }
 L3923:
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L3924;
    }
  goto L3868;
 L3896:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3897;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L3923;
 L3897:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)))
    {
      return 343;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L3923;
 L3924:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3925;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L3868;
 L3925:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)))
    {
      return 344;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L3868;
 L3951:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L3952;
    }
  goto L3868;
 L3952:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3953;
  goto L3868;
 L3953:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3954;
  goto L3868;
 L3954:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3955;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L3868;
 L3955:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)))
    {
      return 345;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L3868;
 L3869:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3870;
  goto ret0;
 L3870:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)))
    {
      return 342;
    }
  goto ret0;
 L279:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L14122;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14088;
 L14122:
  tem = recog_20 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14088;
 L327:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L14143;
 L289:
  if (const0_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L290;
    }
 L299:
  if (immediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L300;
    }
  goto ret0;
 L14143:
  switch (((enum rtx_code) (x2)->code))
    {
    case ZERO_EXTEND:
      goto L656;
    case MULT:
      goto L2202;
    case DIV:
      goto L2640;
    case UDIV:
      goto L2793;
    case UNSPEC:
      goto L14152;
    case CTZ:
      goto L6447;
    case MINUS:
      goto L6471;
    case PLUS:
      goto L6628;
    case IF_THEN_ELSE:
      goto L7746;
    case SUBREG:
    case REG:
      goto L14142;
    default:
      goto L289;
   }
 L14142:
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L328;
    }
  goto L289;
 L656:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case HImode:
      goto L14153;
    case QImode:
      goto L14154;
    default:
      break;
    }
  goto L289;
 L14153:
  if (register_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L657;
    }
  goto L289;
 L657:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L658;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L658:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((x86_zero_extend_with_and & (1 << ix86_tune)) && !optimize_size))
    {
      return 103;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L14154:
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L703;
    }
  goto L289;
 L703:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L704;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L704:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14155;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L14155:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14157;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L14157:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14159;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L14159:
  if (((x86_zero_extend_with_and & (1 << ix86_tune)) && !optimize_size))
    {
      return 108;
    }
 L14160:
  if ((!(x86_zero_extend_with_and & (1 << ix86_tune)) || optimize_size))
    {
      return 109;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L2202:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2203;
    }
  goto L289;
 L2203:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2204;
    }
  goto L289;
 L2204:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2205;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L2205:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
    {
      return 248;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L2640:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2641;
    }
  goto L289;
 L2641:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L2642;
    }
  goto L289;
 L2642:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2643;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L2643:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L2644;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L2644:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MOD)
    goto L2645;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L2645:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2646;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L2646:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[3])
      && (!optimize_size && !(x86_use_cltd & (1 << ix86_tune)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 269;
    }
 L2670:
  if (rtx_equal_p (x3, operands[3])
      && (optimize_size || (x86_use_cltd & (1 << ix86_tune)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 270;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L2793:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2794;
    }
  goto L289;
 L2794:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2795;
    }
  goto L289;
 L2795:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2796;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L2796:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L2797;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L2797:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == UMOD)
    goto L2798;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L2798:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2799;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L2799:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 275;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L14152:
  if ((((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 12)
    goto L6338;
  goto L289;
 L6338:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)])
    goto L6339;
  goto L289;
 L6339:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6340;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L6340:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0))
    {
      return 530;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L6447:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L6448;
    }
  goto L289;
 L6448:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6449;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L6449:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 540;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L6471:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (x3 == const_int_rtx[64 + (31)])
    goto L6472;
  goto L289;
 L6472:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == CLZ)
    goto L6473;
  goto L289;
 L6473:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L6474;
    }
  goto L289;
 L6474:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6475;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L6475:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 542;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L6628:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == UNSPEC
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x3)->u.fld[1]).rtint) == 15)
    goto L6629;
  goto L289;
 L6629:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L6630;
  goto L289;
 L6630:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L6631;
    }
  goto L289;
 L6631:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6632;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L6632:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0))
    {
      return 552;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L7746:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L7747;
    }
  goto L289;
 L7747:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (-1)])
    goto L7748;
  goto L289;
 L7748:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L7749;
  goto L289;
 L7749:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7750;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L7750:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 650;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L328:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L329;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L329:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L330;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L330:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    {
      return 47;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L289;
 L290:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L291;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L299;
 L291:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed && (!(x86_use_mov0 & (1 << ix86_tune)) || optimize_size)))
    {
      return 41;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L299;
 L300:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L301;
  goto ret0;
 L301:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
   && operands[1] == (const_int_rtx[64 -1])
   && ((ix86_tune == PROCESSOR_PENTIUM) || optimize_size)))
    {
      return 42;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_22 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L356;
    }
 L14099:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L1062;
    }
  goto ret0;
 L356:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode)
    goto L14162;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L14162:
  switch (((enum rtx_code) (x2)->code))
    {
    case ZERO_EXTEND:
      goto L673;
    case MULT:
      goto L2232;
    case DIV:
      goto L2717;
    case SUBREG:
    case REG:
      goto L14161;
    default:
      x2 = (((x1)->u.fld[0]).rtx1);
      goto L14099;
   }
 L14161:
  if (register_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L357;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L673:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L674;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L674:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L675;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L675:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14165;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L14165:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14167;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L14167:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14169;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L14169:
  if (((x86_zero_extend_with_and & (1 << ix86_tune)) && !optimize_size))
    {
      return 105;
    }
 L14170:
  if ((!(x86_zero_extend_with_and & (1 << ix86_tune)) || optimize_size))
    {
      return 106;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2232:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == HImode)
    goto L14172;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L14172:
  switch (((enum rtx_code) (x3)->code))
    {
    case ZERO_EXTEND:
      goto L2261;
    case SIGN_EXTEND:
      goto L2279;
    case SUBREG:
    case REG:
    case MEM:
      goto L14171;
    default:
      x2 = (((x1)->u.fld[0]).rtx1);
      goto L14099;
   }
 L14171:
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L2233;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2261:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L2262;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2262:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == HImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTEND)
    goto L2263;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2263:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L2264;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2264:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2265;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2265:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((x86_qimode_math & (1 << ix86_tune))
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 252;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2279:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L2280;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2280:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == HImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L2281;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2281:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L2282;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2282:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2283;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2283:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((x86_qimode_math & (1 << ix86_tune))
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 253;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2233:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L2234;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2234:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2235;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2235:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
    {
      return 250;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2717:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L2718;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2718:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L2719;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2719:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2720;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2720:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L2721;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2721:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == MOD)
    goto L2722;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2722:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2723;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L2723:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && ((x86_himode_math & (1 << ix86_tune)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 272;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L357:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L358;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L358:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L359;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L359:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[0])
      && ((x86_partial_reg_stall & (1 << ix86_tune))))
    {
      return 53;
    }
 L366:
  if (rtx_equal_p (x2, operands[0])
      && (! (x86_partial_reg_stall & (1 << ix86_tune))))
    {
      return 54;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14099;
 L1062:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode)
    goto L14174;
  goto ret0;
 L14174:
  switch (((enum rtx_code) (x2)->code))
    {
    case FIX:
      goto L1063;
    case PLUS:
      goto L1242;
    case MINUS:
      goto L1960;
    case AND:
      goto L3034;
    case IOR:
      goto L3403;
    case XOR:
      goto L3786;
    case NEG:
      goto L4159;
    case ASHIFT:
      goto L4738;
    case ASHIFTRT:
      goto L5087;
    case LSHIFTRT:
      goto L5425;
    case ROTATE:
      goto L5653;
    case ROTATERT:
      goto L5829;
    default:
     break;
   }
  goto ret0;
 L1063:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L1064;
    }
  goto ret0;
 L1064:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1065;
  goto ret0;
 L1065:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && !reload_completed && !reload_in_progress
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))))
    {
      return 157;
    }
  goto ret0;
 L1242:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == HImode)
    goto L14186;
  goto ret0;
 L14186:
  if (((enum rtx_code) (x3)->code) == PLUS)
    goto L1243;
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L1592;
    }
  goto ret0;
 L1243:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x4, HImode))
    {
      operands[3] = x4;
      goto L1244;
    }
  goto ret0;
 L1244:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, HImode))
    {
      operands[1] = x4;
      goto L1245;
    }
  goto ret0;
 L1245:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L1246;
    }
  goto ret0;
 L1246:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1247;
  goto ret0;
 L1247:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (PLUS, HImode, operands)))
    {
      return 181;
    }
  goto ret0;
 L1592:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L1593;
    }
  goto ret0;
 L1593:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1594;
  goto ret0;
 L1594:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14188;
  goto ret0;
 L14188:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14190;
  goto ret0;
 L14190:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14192;
  goto ret0;
 L14192:
  if ((!(x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (PLUS, HImode, operands)))
    {
      return 209;
    }
 L14193:
  if (((x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (PLUS, HImode, operands)))
    {
      return 210;
    }
  goto ret0;
 L1960:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L1961;
    }
  goto ret0;
 L1961:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == HImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L1962;
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L2098;
    }
  goto ret0;
 L1962:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x4, HImode))
    {
      operands[3] = x4;
      goto L1963;
    }
  goto ret0;
 L1963:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, HImode))
    {
      operands[2] = x4;
      goto L1964;
    }
  goto ret0;
 L1964:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1965;
  goto ret0;
 L1965:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (MINUS, HImode, operands)))
    {
      return 231;
    }
  goto ret0;
 L2098:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2099;
  goto ret0;
 L2099:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (MINUS, HImode, operands)))
    {
      return 240;
    }
  goto ret0;
 L3034:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L3035;
    }
  goto ret0;
 L3035:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L3036;
    }
  goto ret0;
 L3036:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3037;
  goto ret0;
 L3037:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (AND, HImode, operands)))
    {
      return 294;
    }
  goto ret0;
 L3403:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L3404;
    }
  goto ret0;
 L3404:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L3405;
    }
  goto ret0;
 L3405:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3406;
  goto ret0;
 L3406:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (IOR, HImode, operands)))
    {
      return 315;
    }
  goto ret0;
 L3786:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L3787;
    }
  goto ret0;
 L3787:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L3788;
    }
  goto ret0;
 L3788:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3789;
  goto ret0;
 L3789:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (XOR, HImode, operands)))
    {
      return 337;
    }
  goto ret0;
 L4159:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L4160;
    }
  goto ret0;
 L4160:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4161;
  goto ret0;
 L4161:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_unary_operator_ok (NEG, HImode, operands)))
    {
      return 358;
    }
  goto ret0;
 L4738:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L4739;
    }
  goto ret0;
 L4739:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4740;
    }
  goto ret0;
 L4740:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4741;
  goto ret0;
 L4741:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14194;
  goto ret0;
 L14194:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14196;
  goto ret0;
 L14196:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14198;
  goto ret0;
 L14198:
  if ((!(x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (ASHIFT, HImode, operands)))
    {
      return 411;
    }
 L14199:
  if (((x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (ASHIFT, HImode, operands)))
    {
      return 412;
    }
  goto ret0;
 L5087:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L5088;
    }
  goto ret0;
 L5088:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5089;
    }
 L5102:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5103;
    }
  goto ret0;
 L5089:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5090;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5102;
 L5090:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ASHIFTRT, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 435;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5102;
 L5103:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5104;
  goto ret0;
 L5104:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ASHIFTRT, HImode, operands)))
    {
      return 436;
    }
  goto ret0;
 L5425:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L5426;
    }
  goto ret0;
 L5426:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5427;
    }
 L5440:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5441;
    }
  goto ret0;
 L5427:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5428;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5440;
 L5428:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 459;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5440;
 L5441:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5442;
  goto ret0;
 L5442:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (LSHIFTRT, HImode, operands)))
    {
      return 460;
    }
  goto ret0;
 L5653:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L5654;
    }
  goto ret0;
 L5654:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5655;
    }
 L5668:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5669;
    }
  goto ret0;
 L5655:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5656;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5668;
 L5656:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ROTATE, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 475;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5668;
 L5669:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5670;
  goto ret0;
 L5670:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ROTATE, HImode, operands)))
    {
      return 476;
    }
  goto ret0;
 L5829:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L5830;
    }
  goto ret0;
 L5830:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5831;
    }
 L5844:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5845;
    }
  goto ret0;
 L5831:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5832;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5844;
 L5832:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ROTATERT, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 487;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5844;
 L5845:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5846;
  goto ret0;
 L5846:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ROTATERT, HImode, operands)))
    {
      return 488;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_23 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L399;
    }
 L14101:
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L1223;
    }
  goto ret0;
 L399:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode)
    goto L14201;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L14201:
  switch (((enum rtx_code) (x2)->code))
    {
    case MULT:
      goto L2246;
    case DIV:
      goto L2522;
    case UDIV:
      goto L2536;
    case SUBREG:
    case REG:
      goto L14200;
    default:
      x2 = (((x1)->u.fld[0]).rtx1);
      goto L14101;
   }
 L14200:
  if (register_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L400;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L2246:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L2247;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L2247:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L2248;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L2248:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2249;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L2249:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((x86_qimode_math & (1 << ix86_tune))
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 251;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L2522:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L2523;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L2523:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L2524;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L2524:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2525;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L2525:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((x86_qimode_math & (1 << ix86_tune))))
    {
      return 264;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L2536:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L2537;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L2537:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L2538;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L2538:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2539;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L2539:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((x86_qimode_math & (1 << ix86_tune))))
    {
      return 265;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L400:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L401;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L401:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L402;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L402:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    {
      return 60;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14101;
 L1223:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode)
    goto L14204;
  goto ret0;
 L14204:
  switch (((enum rtx_code) (x2)->code))
    {
    case PLUS:
      goto L1224;
    case MINUS:
      goto L1942;
    case AND:
      goto L3061;
    case IOR:
      goto L3448;
    case XOR:
      goto L3831;
    case NEG:
      goto L4182;
    case ASHIFT:
      goto L4779;
    case ASHIFTRT:
      goto L5141;
    case LSHIFTRT:
      goto L5479;
    case ROTATE:
      goto L5697;
    case ROTATERT:
      goto L5857;
    default:
     break;
   }
  goto ret0;
 L1224:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == QImode)
    goto L14215;
  goto ret0;
 L14215:
  if (((enum rtx_code) (x3)->code) == PLUS)
    goto L1225;
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L1683;
    }
  goto ret0;
 L1225:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x4, QImode))
    {
      operands[3] = x4;
      goto L1226;
    }
  goto ret0;
 L1226:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L1227;
    }
  goto ret0;
 L1227:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L1228;
    }
  goto ret0;
 L1228:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1229;
  goto ret0;
 L1229:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (PLUS, QImode, operands)))
    {
      return 180;
    }
  goto ret0;
 L1683:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L1684;
    }
  goto ret0;
 L1684:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1685;
  goto ret0;
 L1685:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14217;
  goto ret0;
 L14217:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14219;
  goto ret0;
 L14219:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14221;
  goto ret0;
 L14221:
  if ((!(x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (PLUS, QImode, operands)))
    {
      return 215;
    }
 L14222:
  if (((x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (PLUS, QImode, operands)))
    {
      return 216;
    }
  goto ret0;
 L1942:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L1943;
    }
  goto ret0;
 L1943:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == QImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L1944;
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L2136;
    }
  goto ret0;
 L1944:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x4, QImode))
    {
      operands[3] = x4;
      goto L1945;
    }
  goto ret0;
 L1945:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L1946;
    }
  goto ret0;
 L1946:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1947;
  goto ret0;
 L1947:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (MINUS, QImode, operands)))
    {
      return 230;
    }
  goto ret0;
 L2136:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2137;
  goto ret0;
 L2137:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (MINUS, QImode, operands)))
    {
      return 243;
    }
  goto ret0;
 L3061:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L3062;
    }
  goto ret0;
 L3062:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L3063;
    }
  goto ret0;
 L3063:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3064;
  goto ret0;
 L3064:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (AND, QImode, operands)))
    {
      return 296;
    }
  goto ret0;
 L3448:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L3449;
    }
  goto ret0;
 L3449:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L3450;
    }
  goto ret0;
 L3450:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3451;
  goto ret0;
 L3451:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (IOR, QImode, operands)))
    {
      return 318;
    }
  goto ret0;
 L3831:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L3832;
    }
  goto ret0;
 L3832:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L3833;
    }
  goto ret0;
 L3833:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3834;
  goto ret0;
 L3834:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (XOR, QImode, operands)))
    {
      return 340;
    }
  goto ret0;
 L4182:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L4183;
    }
  goto ret0;
 L4183:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4184;
  goto ret0;
 L4184:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_unary_operator_ok (NEG, QImode, operands)))
    {
      return 360;
    }
  goto ret0;
 L4779:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L4780;
    }
  goto ret0;
 L4780:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4781;
    }
  goto ret0;
 L4781:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4782;
  goto ret0;
 L4782:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14223;
  goto ret0;
 L14223:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14225;
  goto ret0;
 L14225:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14227;
  goto ret0;
 L14227:
  if ((!(x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (ASHIFT, QImode, operands)))
    {
      return 414;
    }
 L14228:
  if (((x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_binary_operator_ok (ASHIFT, QImode, operands)))
    {
      return 415;
    }
  goto ret0;
 L5141:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L5142;
    }
  goto ret0;
 L5142:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5143;
    }
 L5172:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5173;
    }
  goto ret0;
 L5143:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5144;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5172;
 L5144:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ASHIFTRT, QImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 439;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5172;
 L5173:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5174;
  goto ret0;
 L5174:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ASHIFTRT, QImode, operands)))
    {
      return 441;
    }
  goto ret0;
 L5479:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L5480;
    }
  goto ret0;
 L5480:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5481;
    }
 L5510:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5511;
    }
  goto ret0;
 L5481:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5482;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5510;
 L5482:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (LSHIFTRT, QImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 463;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5510;
 L5511:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5512;
  goto ret0;
 L5512:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (LSHIFTRT, QImode, operands)))
    {
      return 465;
    }
  goto ret0;
 L5697:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L5698;
    }
  goto ret0;
 L5698:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5699;
    }
 L5728:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5729;
    }
  goto ret0;
 L5699:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5700;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5728;
 L5700:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ROTATE, QImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 478;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5728;
 L5729:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5730;
  goto ret0;
 L5730:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ROTATE, QImode, operands)))
    {
      return 480;
    }
  goto ret0;
 L5857:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L5858;
    }
  goto ret0;
 L5858:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5859;
    }
 L5888:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5889;
    }
  goto ret0;
 L5859:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5860;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5888;
 L5860:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ROTATERT, QImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 489;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5888;
 L5889:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5890;
  goto ret0;
 L5890:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ROTATERT, QImode, operands)))
    {
      return 491;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_24 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case MEM:
      goto L528;
    case ZERO_EXTEND:
      goto L731;
    case FIX:
      goto L949;
    case PLUS:
      goto L1181;
    case MINUS:
      goto L1872;
    case AND:
      goto L2950;
    case IOR:
      goto L3253;
    case XOR:
      goto L3636;
    case NEG:
      goto L4063;
    case ASHIFT:
      goto L4599;
    case ASHIFTRT:
      goto L4820;
    case LSHIFTRT:
      goto L5227;
    case ROTATE:
      goto L5565;
    case ROTATERT:
      goto L5741;
    default:
     break;
   }
  goto ret0;
 L528:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L529;
  goto ret0;
 L529:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L530;
  goto ret0;
 L530:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L531;
  goto ret0;
 L531:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L532;
  goto ret0;
 L532:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L533;
  goto ret0;
 L533:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)]
      && (0))
    {
      return 79;
    }
  goto ret0;
 L731:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L732;
    }
  goto ret0;
 L732:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L733;
  goto ret0;
 L733:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14243;
  goto ret0;
 L14243:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14245;
  goto ret0;
 L14245:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14247;
  goto ret0;
 L14247:
  if ((!0 && !(x86_inter_unit_moves & (1 << ix86_tune))))
    {
      return 111;
    }
 L14248:
  if ((!0 && (x86_inter_unit_moves & (1 << ix86_tune))))
    {
      return 112;
    }
  goto ret0;
 L949:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L950;
    }
  goto ret0;
 L950:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L951;
  goto ret0;
 L951:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && !reload_completed && !reload_in_progress
   && (!((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode)) || !0)))
    {
      return 147;
    }
  goto ret0;
 L1181:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode)
    goto L14250;
  goto ret0;
 L14250:
  if (((enum rtx_code) (x3)->code) == PLUS)
    goto L1196;
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L1182;
    }
  goto ret0;
 L1196:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x4, DImode))
    {
      operands[3] = x4;
      goto L1197;
    }
  goto ret0;
 L1197:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L1198;
    }
  goto ret0;
 L1198:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L1199;
    }
  goto ret0;
 L1199:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1200;
  goto ret0;
 L1200:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (PLUS, DImode, operands)))
    {
      return 178;
    }
  goto ret0;
 L1182:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L1183;
    }
 L1395:
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L1396;
    }
  goto ret0;
 L1183:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1184;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L1395;
 L1184:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && ix86_binary_operator_ok (PLUS, DImode, operands)))
    {
      return 177;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L1395;
 L1396:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1397;
  goto ret0;
 L1397:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (PLUS, DImode, operands)))
    {
      return 196;
    }
  goto ret0;
 L1872:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L1887;
    }
  goto ret0;
 L1887:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L1888;
  if (general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L1874;
    }
 L1905:
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L1906;
    }
  goto ret0;
 L1888:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x4, DImode))
    {
      operands[3] = x4;
      goto L1889;
    }
  goto ret0;
 L1889:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x4, DImode))
    {
      operands[2] = x4;
      goto L1890;
    }
  goto ret0;
 L1890:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1891;
  goto ret0;
 L1891:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (MINUS, DImode, operands)))
    {
      return 226;
    }
  goto ret0;
 L1874:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1875;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L1905;
 L1875:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && ix86_binary_operator_ok (MINUS, DImode, operands)))
    {
      return 225;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L1905;
 L1906:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1907;
  goto ret0;
 L1907:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (MINUS, DImode, operands)))
    {
      return 227;
    }
  goto ret0;
 L2950:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L2951;
    }
  goto ret0;
 L2951:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_szext_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L2952;
    }
  goto ret0;
 L2952:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2953;
  goto ret0;
 L2953:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (AND, DImode, operands)))
    {
      return 288;
    }
  goto ret0;
 L3253:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L3254;
    }
  goto ret0;
 L3254:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L3255;
    }
  goto ret0;
 L3255:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3256;
  goto ret0;
 L3256:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0
   && ix86_binary_operator_ok (IOR, DImode, operands)))
    {
      return 305;
    }
  goto ret0;
 L3636:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L3637;
    }
  goto ret0;
 L3637:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L3638;
    }
  goto ret0;
 L3638:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3639;
  goto ret0;
 L3639:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0
   && ix86_binary_operator_ok (XOR, DImode, operands)))
    {
      return 327;
    }
  goto ret0;
 L4063:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (general_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L4064;
    }
 L4075:
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L4076;
    }
  goto ret0;
 L4064:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4065;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L4075;
 L4065:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0
   && ix86_unary_operator_ok (NEG, DImode, operands)))
    {
      return 351;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L4075;
 L4076:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4077;
  goto ret0;
 L4077:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_unary_operator_ok (NEG, DImode, operands)))
    {
      return 352;
    }
  goto ret0;
 L4599:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L4600;
    }
  goto ret0;
 L4600:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4601;
    }
  goto ret0;
 L4601:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4602;
  goto ret0;
 L4602:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ASHIFT, DImode, operands)))
    {
      return 402;
    }
  goto ret0;
 L4820:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L4821;
    }
  goto ret0;
 L4821:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == CONST_INT)
    goto L14251;
 L4849:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4850;
    }
  goto ret0;
 L14251:
  if (const_int_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L4822;
    }
 L14252:
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4836;
    }
  goto L4849;
 L4822:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4823;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L14252;
 L4823:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ((operands[2])->u.hwint[0]) == 63 && ((x86_use_cltd & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)))
    {
      return 417;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L14252;
 L4836:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4837;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L4849;
 L4837:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 418;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L4849;
 L4850:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4851;
  goto ret0;
 L4851:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)))
    {
      return 419;
    }
  goto ret0;
 L5227:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L5228;
    }
  goto ret0;
 L5228:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5229;
    }
 L5242:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5243;
    }
  goto ret0;
 L5229:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5230;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5242;
 L5230:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 445;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5242;
 L5243:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5244;
  goto ret0;
 L5244:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)))
    {
      return 446;
    }
  goto ret0;
 L5565:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L5566;
    }
  goto ret0;
 L5566:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5567;
    }
 L5580:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5581;
    }
  goto ret0;
 L5567:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5568;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5580;
 L5568:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ROTATE, DImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 469;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5580;
 L5581:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5582;
  goto ret0;
 L5582:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ROTATE, DImode, operands)))
    {
      return 470;
    }
  goto ret0;
 L5741:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L5742;
    }
  goto ret0;
 L5742:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5743;
    }
 L5756:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5757;
    }
  goto ret0;
 L5743:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5744;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5756;
 L5744:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ROTATERT, DImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 481;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5756;
 L5757:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5758;
  goto ret0;
 L5758:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ROTATERT, DImode, operands)))
    {
      return 482;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_25 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case ZERO_EXTEND:
      goto L1278;
    case MULT:
      goto L2188;
    case DIV:
      goto L2563;
    case UDIV:
      goto L2741;
    case IOR:
      goto L3328;
    case XOR:
      goto L3711;
    case LSHIFTRT:
      goto L4110;
    case ASHIFT:
      goto L4642;
    case ASHIFTRT:
      goto L4904;
    case CTZ:
      goto L6459;
    case MINUS:
      goto L6487;
    case PLUS:
      goto L6648;
    case IF_THEN_ELSE:
      goto L7722;
    case SUBREG:
    case REG:
      goto L14253;
    default:
      goto ret0;
   }
 L14253:
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L580;
    }
  goto ret0;
 L1278:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14267;
  goto ret0;
 L14267:
  switch (((enum rtx_code) (x3)->code))
    {
    case PLUS:
      goto L1279;
    case MINUS:
      goto L1997;
    case MULT:
      goto L2217;
    case AND:
      goto L2992;
    case IOR:
      goto L3313;
    case XOR:
      goto L3696;
    case ASHIFT:
      goto L4696;
    case ASHIFTRT:
      goto L4958;
    case LSHIFTRT:
      goto L5356;
    case ROTATE:
      goto L5608;
    case ROTATERT:
      goto L5784;
    default:
     break;
   }
  goto ret0;
 L1279:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode)
    goto L14278;
  goto ret0;
 L14278:
  if (((enum rtx_code) (x4)->code) == PLUS)
    goto L1280;
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L1487;
    }
  goto ret0;
 L1280:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x5, SImode))
    {
      operands[3] = x5;
      goto L1281;
    }
  goto ret0;
 L1281:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x5, SImode))
    {
      operands[1] = x5;
      goto L1282;
    }
  goto ret0;
 L1282:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L1283;
    }
  goto ret0;
 L1283:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1284;
  goto ret0;
 L1284:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (PLUS, SImode, operands)))
    {
      return 183;
    }
  goto ret0;
 L1487:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L1488;
    }
  goto ret0;
 L1488:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1489;
  goto ret0;
 L1489:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (PLUS, SImode, operands)))
    {
      return 202;
    }
  goto ret0;
 L1997:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L1998;
    }
  goto ret0;
 L1998:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode
      && ((enum rtx_code) (x4)->code) == PLUS)
    goto L1999;
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L2033;
    }
  goto ret0;
 L1999:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x5, SImode))
    {
      operands[3] = x5;
      goto L2000;
    }
  goto ret0;
 L2000:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (general_operand (x5, SImode))
    {
      operands[2] = x5;
      goto L2001;
    }
  goto ret0;
 L2001:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2002;
  goto ret0;
 L2002:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (MINUS, SImode, operands)))
    {
      return 233;
    }
  goto ret0;
 L2033:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2034;
  goto ret0;
 L2034:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (MINUS, SImode, operands)))
    {
      return 235;
    }
  goto ret0;
 L2217:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L2218;
    }
  goto ret0;
 L2218:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L2219;
    }
  goto ret0;
 L2219:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2220;
  goto ret0;
 L2220:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 249;
    }
  goto ret0;
 L2992:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L2993;
    }
  goto ret0;
 L2993:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L2994;
    }
  goto ret0;
 L2994:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2995;
  goto ret0;
 L2995:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (AND, SImode, operands)))
    {
      return 291;
    }
  goto ret0;
 L3313:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L3314;
    }
  goto ret0;
 L3314:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L3315;
    }
  goto ret0;
 L3315:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3316;
  goto ret0;
 L3316:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (IOR, SImode, operands)))
    {
      return 309;
    }
  goto ret0;
 L3696:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L3697;
    }
  goto ret0;
 L3697:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L3698;
    }
  goto ret0;
 L3698:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3699;
  goto ret0;
 L3699:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (XOR, SImode, operands)))
    {
      return 331;
    }
  goto ret0;
 L4696:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L4697;
    }
  goto ret0;
 L4697:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonmemory_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4698;
    }
  goto ret0;
 L4698:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4699;
  goto ret0;
 L4699:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ASHIFT, SImode, operands)))
    {
      return 408;
    }
  goto ret0;
 L4958:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L4959;
    }
  goto ret0;
 L4959:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14280;
 L5019:
  if (nonmemory_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5020;
    }
  goto ret0;
 L14280:
  if (const_int_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L4960;
    }
 L14281:
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4990;
    }
  goto L5019;
 L4960:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4961;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14281;
 L4961:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ((x86_use_cltd & (1 << ix86_tune)) || optimize_size)
   && ((operands[2])->u.hwint[0]) == 31
   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)))
    {
      return 426;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14281;
 L4990:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4991;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5019;
 L4991:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 428;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5019;
 L5020:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5021;
  goto ret0;
 L5021:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)))
    {
      return 430;
    }
  goto ret0;
 L5356:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L5357;
    }
  goto ret0;
 L5357:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonmemory_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5358;
    }
  goto ret0;
 L5358:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5359;
  goto ret0;
 L5359:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)))
    {
      return 454;
    }
  goto ret0;
 L5608:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L5609;
    }
  goto ret0;
 L5609:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5610;
    }
 L5639:
  if (nonmemory_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5640;
    }
  goto ret0;
 L5610:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5611;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5639;
 L5611:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ROTATE, SImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 472;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5639;
 L5640:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5641;
  goto ret0;
 L5641:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ROTATE, SImode, operands)))
    {
      return 474;
    }
  goto ret0;
 L5784:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L5785;
    }
  goto ret0;
 L5785:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5786;
    }
 L5815:
  if (nonmemory_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5816;
    }
  goto ret0;
 L5786:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5787;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5815;
 L5787:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ROTATERT, SImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 484;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5815;
 L5816:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5817;
  goto ret0;
 L5817:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (ROTATERT, SImode, operands)))
    {
      return 486;
    }
  goto ret0;
 L2188:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode)
    goto L14283;
  goto ret0;
 L14283:
  switch (((enum rtx_code) (x3)->code))
    {
    case ZERO_EXTEND:
      goto L2315;
    case SIGN_EXTEND:
      goto L2351;
    case SUBREG:
    case REG:
    case MEM:
      goto L14282;
    default:
      goto ret0;
   }
 L14282:
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L2189;
    }
  goto ret0;
 L2315:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L2316;
    }
  goto ret0;
 L2316:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTEND)
    goto L2317;
  goto ret0;
 L2317:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L2318;
    }
  goto ret0;
 L2318:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2319;
  goto ret0;
 L2319:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 255;
    }
  goto ret0;
 L2351:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L2352;
    }
  goto ret0;
 L2352:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L2353;
  goto ret0;
 L2353:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L2354;
    }
  goto ret0;
 L2354:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2355;
  goto ret0;
 L2355:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 257;
    }
  goto ret0;
 L2189:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L2190;
    }
  goto ret0;
 L2190:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2191;
  goto ret0;
 L2191:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 247;
    }
  goto ret0;
 L2563:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L2564;
    }
  goto ret0;
 L2564:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L2565;
    }
  goto ret0;
 L2565:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2566;
  goto ret0;
 L2566:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L2567;
    }
  goto ret0;
 L2567:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == MOD)
    goto L2568;
  goto ret0;
 L2568:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2569;
  goto ret0;
 L2569:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[3])
      && (0 && !optimize_size && !(x86_use_cltd & (1 << ix86_tune)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 266;
    }
 L2593:
  if (rtx_equal_p (x3, operands[3])
      && (0 && (optimize_size || (x86_use_cltd & (1 << ix86_tune))))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 267;
    }
  goto ret0;
 L2741:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L2742;
    }
  goto ret0;
 L2742:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L2743;
    }
  goto ret0;
 L2743:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2744;
  goto ret0;
 L2744:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[3] = x2;
      goto L2745;
    }
  goto ret0;
 L2745:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == UMOD)
    goto L2746;
  goto ret0;
 L2746:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2747;
  goto ret0;
 L2747:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 273;
    }
  goto ret0;
 L3328:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTEND)
    goto L3329;
  goto ret0;
 L3329:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L3330;
    }
  goto ret0;
 L3330:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_zext_immediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L3331;
    }
  goto ret0;
 L3331:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3332;
  goto ret0;
 L3332:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0))
    {
      return 310;
    }
  goto ret0;
 L3711:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTEND)
    goto L3712;
  goto ret0;
 L3712:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L3713;
    }
  goto ret0;
 L3713:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_zext_immediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L3714;
    }
  goto ret0;
 L3714:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3715;
  goto ret0;
 L3715:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (XOR, SImode, operands)))
    {
      return 332;
    }
  goto ret0;
 L4110:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode)
    goto L14285;
  goto ret0;
 L14285:
  switch (((enum rtx_code) (x3)->code))
    {
    case NEG:
      goto L4111;
    case ZERO_EXTEND:
      goto L5326;
    case SUBREG:
    case REG:
      goto L14286;
    default:
      goto ret0;
   }
 L14286:
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L5298;
    }
  goto ret0;
 L4111:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == DImode
      && ((enum rtx_code) (x4)->code) == ASHIFT)
    goto L4112;
  goto ret0;
 L4112:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, DImode))
    {
      operands[1] = x5;
      goto L4113;
    }
  goto ret0;
 L4113:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (x5 == const_int_rtx[64 + (32)])
    goto L4114;
  goto ret0;
 L4114:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (32)])
    goto L4115;
  goto ret0;
 L4115:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4116;
  goto ret0;
 L4116:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_unary_operator_ok (NEG, SImode, operands)))
    {
      return 355;
    }
  goto ret0;
 L5326:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L5327;
    }
  goto ret0;
 L5327:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5328;
    }
  goto ret0;
 L5328:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5329;
  goto ret0;
 L5329:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 452;
    }
  goto ret0;
 L5298:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5299;
    }
  goto ret0;
 L5299:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5300;
  goto ret0;
 L5300:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0))
    {
      return 450;
    }
  goto ret0;
 L4642:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L4643;
    }
  goto ret0;
 L4643:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4644;
    }
  goto ret0;
 L4644:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4645;
  goto ret0;
 L4645:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0))
    {
      return 405;
    }
  goto ret0;
 L4904:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L4905;
    }
  goto ret0;
 L4905:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4906;
    }
  goto ret0;
 L4906:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4907;
  goto ret0;
 L4907:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0))
    {
      return 423;
    }
  goto ret0;
 L6459:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L6460;
    }
  goto ret0;
 L6460:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6461;
  goto ret0;
 L6461:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0))
    {
      return 541;
    }
  goto ret0;
 L6487:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (x3 == const_int_rtx[64 + (63)])
    goto L6488;
  goto ret0;
 L6488:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == CLZ)
    goto L6489;
  goto ret0;
 L6489:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L6490;
    }
  goto ret0;
 L6490:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6491;
  goto ret0;
 L6491:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0))
    {
      return 543;
    }
  goto ret0;
 L6648:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == UNSPEC
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x3)->u.fld[1]).rtint) == 15)
    goto L6649;
  goto ret0;
 L6649:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (x4 == const_int_rtx[64 + (0)])
    goto L6650;
  goto ret0;
 L6650:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L6651;
    }
  goto ret0;
 L6651:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6652;
  goto ret0;
 L6652:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0))
    {
      return 554;
    }
  goto ret0;
 L7722:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ix86_carry_flag_operator (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L7723;
    }
  goto ret0;
 L7723:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (-1)])
    goto L7724;
  goto ret0;
 L7724:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L7725;
  goto ret0;
 L7725:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7726;
  goto ret0;
 L7726:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0))
    {
      return 648;
    }
  goto ret0;
 L580:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L581;
  goto ret0;
 L581:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L582;
  goto ret0;
 L582:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[0])
      && (0))
    {
      return 87;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_26 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L602;
    }
 L14097:
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L863;
    }
 L14105:
  if (memory_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L4204;
    }
 L14106:
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L4233;
    }
  goto ret0;
 L602:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L14291;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L14291:
  switch (((enum rtx_code) (x2)->code))
    {
    case UNSPEC:
      goto L14295;
    case IF_THEN_ELSE:
      goto L7824;
    case SUBREG:
    case REG:
      goto L14290;
    default:
      x2 = (((x1)->u.fld[0]).rtx1);
      goto L14097;
   }
 L14290:
  if (register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L603;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L14295:
  switch ((((((x2)->u.fld[0]).rtvec1))->num_elem))
    {
    case 1:
      goto L14298;
    case 2:
      goto L14300;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L14298:
  switch ((((x2)->u.fld[1]).rtint))
    {
    case 80L:
      goto L6968;
    case 82L:
      goto L7006;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L6968:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L6969;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L6969:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6970;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L6970:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L6971;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L6971:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 81)
    goto L6972;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L6972:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2])
      && (! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 602;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7006:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L7007;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7007:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7008;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7008:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L7009;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7009:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 83)
    goto L7010;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7010:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2])
      && (! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 606;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L14300:
  if ((((x2)->u.fld[1]).rtint) == 65)
    goto L7039;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7039:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L7040;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7040:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L7041;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7041:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7042;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7042:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SFmode))
    {
      operands[3] = x2;
      goto L7043;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7043:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 609;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7824:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case LT:
      goto L7825;
    case GT:
      goto L7917;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7825:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SFmode)
    goto L14301;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L14301:
  if (register_operand (x4, SFmode))
    {
      operands[1] = x4;
      goto L7826;
    }
 L14302:
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[1] = x4;
      goto L7845;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7826:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[2] = x4;
      goto L7827;
    }
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14302;
 L7827:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7828;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14302;
 L7828:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7829;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14302;
 L7829:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7830;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14302;
 L7830:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00004000) != 0) && (target_flags & 0x00000010)))
    {
      return 658;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14302;
 L7845:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[2] = x4;
      goto L7846;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7846:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7847;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7847:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7848;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7848:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7849;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7849:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00004000) != 0) && !(target_flags & 0x00000010)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 659;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7917:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SFmode)
    goto L14303;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L14303:
  if (register_operand (x4, SFmode))
    {
      operands[1] = x4;
      goto L7918;
    }
 L14304:
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[1] = x4;
      goto L7937;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7918:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[2] = x4;
      goto L7919;
    }
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14304;
 L7919:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7920;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14304;
 L7920:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7921;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14304;
 L7921:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7922;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14304;
 L7922:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00004000) != 0) && (target_flags & 0x00000010)))
    {
      return 664;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14304;
 L7937:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[2] = x4;
      goto L7938;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7938:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7939;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7939:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7940;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7940:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7941;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L7941:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00004000) != 0) && !(target_flags & 0x00000010)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 665;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L603:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L604;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L604:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L605;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L605:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[0])
      && (reload_completed || !((target_flags & 0x00004000) != 0)))
    {
      return 92;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14097;
 L863:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L14305;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L14305:
  switch (((enum rtx_code) (x2)->code))
    {
    case FLOAT_TRUNCATE:
      goto L864;
    case NEG:
      goto L4226;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L864:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case DFmode:
      goto L14307;
    case XFmode:
      goto L14309;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L14307:
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L865;
    }
 L14308:
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L873;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L865:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L866;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14308;
 L866:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L867;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14308;
 L867:
  if (((target_flags & 0x00000001) && !((target_flags & 0x00008000) != 0)))
    {
      return 133;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14308;
 L873:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L874;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L874:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L875;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L875:
  if (((target_flags & 0x00000001) && ((target_flags & 0x00008000) != 0) && !(x86_sse_partial_regs_for_cvtsd2ss & (1 << ix86_tune))))
    {
      return 134;
    }
 L883:
  if (((target_flags & 0x00000001) && ((target_flags & 0x00008000) != 0) && (x86_sse_partial_regs_for_cvtsd2ss & (1 << ix86_tune))))
    {
      return 135;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L14309:
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L919;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L919:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L920;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L920:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L921;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L921:
  if (((target_flags & 0x00000001)))
    {
      return 142;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L4226:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L4227;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L4227:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L4228;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L4228:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L4229;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L4229:
  if ((((target_flags & 0x00004000) != 0)
   && (reload_in_progress || reload_completed
       || (register_operand (operands[0], VOIDmode)
    && register_operand (operands[1], VOIDmode))))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 363;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14105;
 L4204:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L14310;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14106;
 L14310:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L4205;
    case ABS:
      goto L4361;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14106;
 L4205:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (memory_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L4206;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14106;
 L4206:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4207;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14106;
 L4207:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_unary_operator_ok (NEG, SFmode, operands)))
    {
      return 362;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14106;
 L4361:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (memory_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L4362;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14106;
 L4362:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4363;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14106;
 L4363:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_unary_operator_ok (ABS, SFmode, operands)))
    {
      return 377;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14106;
 L4233:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L14312;
  goto ret0;
 L14312:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L4234;
    case ABS:
      goto L4382;
    default:
     break;
   }
  goto ret0;
 L4234:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L4235;
    }
  goto ret0;
 L4235:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4236;
  goto ret0;
 L4236:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && !((target_flags & 0x00004000) != 0)
   && ix86_unary_operator_ok (NEG, SFmode, operands)))
    {
      return 364;
    }
  goto ret0;
 L4382:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L4383;
    }
  goto ret0;
 L4383:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case USE:
      goto L4384;
    case CLOBBER:
      goto L4392;
    default:
     break;
   }
  goto ret0;
 L4384:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L4385;
    }
  goto ret0;
 L4385:
  if ((((target_flags & 0x00004000) != 0)
   && (reload_in_progress || reload_completed
       || (register_operand (operands[0], VOIDmode)
     && register_operand (operands[1], VOIDmode))))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 378;
    }
  goto ret0;
 L4392:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && ix86_unary_operator_ok (ABS, SFmode, operands) && !((target_flags & 0x00004000) != 0)))
    {
      return 379;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_27 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L625;
    }
 L14098:
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L935;
    }
 L14107:
  if (memory_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L4245;
    }
 L14108:
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L4291;
    }
  goto ret0;
 L625:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L14315;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L14315:
  switch (((enum rtx_code) (x2)->code))
    {
    case UNSPEC:
      goto L14319;
    case IF_THEN_ELSE:
      goto L7870;
    case SUBREG:
    case REG:
      goto L14314;
    default:
      x2 = (((x1)->u.fld[0]).rtx1);
      goto L14098;
   }
 L14314:
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L626;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L14319:
  switch ((((((x2)->u.fld[0]).rtvec1))->num_elem))
    {
    case 1:
      goto L14322;
    case 2:
      goto L14324;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L14322:
  switch ((((x2)->u.fld[1]).rtint))
    {
    case 80L:
      goto L6959;
    case 82L:
      goto L6997;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6959:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x3)->mode) == DFmode)
    goto L14326;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L14326:
  if (((enum rtx_code) (x3)->code) == FLOAT_EXTEND)
    goto L6978;
  if (register_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L6960;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6978:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SFmode))
    {
      operands[2] = x4;
      goto L6979;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6979:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6980;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6980:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L6981;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6981:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 81)
    goto L6982;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6982:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x3)->mode) == DFmode
      && ((enum rtx_code) (x3)->code) == FLOAT_EXTEND)
    goto L6983;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6983:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && (! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 603;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6960:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6961;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6961:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L6962;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6962:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 81)
    goto L6963;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6963:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2])
      && (! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 601;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6997:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L6998;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6998:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6999;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L6999:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L7000;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7000:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 83)
    goto L7001;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7001:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2])
      && (! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 605;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L14324:
  if ((((x2)->u.fld[1]).rtint) == 65)
    goto L7024;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7024:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L7025;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7025:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L7026;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7026:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7027;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7027:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DFmode))
    {
      operands[3] = x2;
      goto L7028;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7028:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 608;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7870:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case LT:
      goto L7871;
    case GT:
      goto L7963;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7871:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == DFmode)
    goto L14327;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L14327:
  if (register_operand (x4, DFmode))
    {
      operands[1] = x4;
      goto L7872;
    }
 L14328:
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[1] = x4;
      goto L7891;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7872:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[2] = x4;
      goto L7873;
    }
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14328;
 L7873:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7874;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14328;
 L7874:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7875;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14328;
 L7875:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7876;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14328;
 L7876:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00008000) != 0) && (target_flags & 0x00000010) && ((ix86_fpmath & FPMATH_SSE) != 0)))
    {
      return 661;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14328;
 L7891:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[2] = x4;
      goto L7892;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7892:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7893;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7893:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7894;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7894:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7895;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7895:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && !(target_flags & 0x00000010)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 662;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7963:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == DFmode)
    goto L14329;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L14329:
  if (register_operand (x4, DFmode))
    {
      operands[1] = x4;
      goto L7964;
    }
 L14330:
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[1] = x4;
      goto L7983;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7964:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[2] = x4;
      goto L7965;
    }
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14330;
 L7965:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7966;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14330;
 L7966:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7967;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14330;
 L7967:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7968;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14330;
 L7968:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && (target_flags & 0x00000010)))
    {
      return 667;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14330;
 L7983:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[2] = x4;
      goto L7984;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7984:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7985;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7985:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7986;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7986:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7987;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L7987:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && !(target_flags & 0x00000010)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 668;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L626:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L627;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L627:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L628;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L628:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[0])
      && (reload_completed || !((target_flags & 0x00008000) != 0)))
    {
      return 97;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14098;
 L935:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L14331;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14107;
 L14331:
  switch (((enum rtx_code) (x2)->code))
    {
    case FLOAT_TRUNCATE:
      goto L936;
    case NEG:
      goto L4267;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14107;
 L936:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L937;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14107;
 L937:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L938;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14107;
 L938:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L939;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14107;
 L939:
  if (((target_flags & 0x00000001)))
    {
      return 145;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14107;
 L4267:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L4268;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14107;
 L4268:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L4269;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14107;
 L4269:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L4270;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14107;
 L4270:
  if ((!0 && ((target_flags & 0x00008000) != 0)
   && (reload_in_progress || reload_completed
       || (register_operand (operands[0], VOIDmode)
    && register_operand (operands[1], VOIDmode))))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 366;
    }
 L4287:
  if ((0 && ((target_flags & 0x00008000) != 0)
   && (reload_in_progress || reload_completed
       || (register_operand (operands[0], VOIDmode)
    && register_operand (operands[1], VOIDmode))))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 367;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14107;
 L4245:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L14333;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14108;
 L14333:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L4246;
    case ABS:
      goto L4402;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14108;
 L4246:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (memory_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L4247;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14108;
 L4247:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4248;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14108;
 L4248:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_unary_operator_ok (NEG, DFmode, operands)))
    {
      return 365;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14108;
 L4402:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (memory_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L4403;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14108;
 L4403:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4404;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14108;
 L4404:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_unary_operator_ok (ABS, DFmode, operands)))
    {
      return 380;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14108;
 L4291:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L14335;
  goto ret0;
 L14335:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L4292;
    case ABS:
      goto L4423;
    default:
     break;
   }
  goto ret0;
 L4292:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L4293;
    }
  goto ret0;
 L4293:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4294;
  goto ret0;
 L4294:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14337;
  goto ret0;
 L14337:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14339;
  goto ret0;
 L14339:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14341;
  goto ret0;
 L14341:
  if ((!0 && (target_flags & 0x00000001)
   && ix86_unary_operator_ok (NEG, DFmode, operands)))
    {
      return 368;
    }
 L14342:
  if ((0 && (target_flags & 0x00000001)
   && ix86_unary_operator_ok (NEG, DFmode, operands)))
    {
      return 369;
    }
  goto ret0;
 L4423:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L4424;
    }
  goto ret0;
 L4424:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case USE:
      goto L4425;
    case CLOBBER:
      goto L4450;
    default:
     break;
   }
  goto ret0;
 L4425:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L4426;
    }
  goto ret0;
 L4426:
  if ((!0 && ((target_flags & 0x00008000) != 0)
   && (reload_in_progress || reload_completed
       || (register_operand (operands[0], VOIDmode)
    && register_operand (operands[1], VOIDmode))))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 381;
    }
 L4443:
  if ((0 && ((target_flags & 0x00008000) != 0)
   && (reload_in_progress || reload_completed
       || (register_operand (operands[0], VOIDmode)
    && register_operand (operands[1], VOIDmode))))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 382;
    }
  goto ret0;
 L4450:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14343;
  goto ret0;
 L14343:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14345;
  goto ret0;
 L14345:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14347;
  goto ret0;
 L14347:
  if ((!0 && (target_flags & 0x00000001)
   && ix86_unary_operator_ok (ABS, DFmode, operands)))
    {
      return 383;
    }
 L14348:
  if ((0 && (target_flags & 0x00000001)
   && ix86_unary_operator_ok (ABS, DFmode, operands)))
    {
      return 384;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_28 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case PLUS:
      goto L1409;
    case NEG:
      goto L1422;
    case MINUS:
      goto L1919;
    case AND:
      goto L2965;
    case IOR:
      goto L3268;
    case XOR:
      goto L3651;
    case NOT:
      goto L4523;
    case ASHIFT:
      goto L4614;
    case ASHIFTRT:
      goto L4863;
    case LSHIFTRT:
      goto L5256;
    case SUBREG:
    case REG:
    case MEM:
      goto L14399;
    default:
      goto ret0;
   }
 L14399:
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L1439;
    }
  goto ret0;
 L1409:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L1410;
    }
  goto ret0;
 L1410:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x4, DImode))
    {
      operands[2] = x4;
      goto L1411;
    }
  goto ret0;
 L1411:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L1412;
  goto ret0;
 L1412:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L1413;
    case CLOBBER:
      goto L1458;
    default:
     break;
   }
  goto ret0;
 L1413:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L1414;
    }
  goto ret0;
 L1414:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L1415;
  goto ret0;
 L1415:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L1416;
  goto ret0;
 L1416:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (PLUS, DImode, operands)
   && ! pic_symbolic_operand (operands[2], VOIDmode)))
    {
      return 197;
    }
  goto ret0;
 L1458:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L1459;
    }
  goto ret0;
 L1459:
  if ((0
   && ix86_match_ccmode (insn, CCGOCmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)
   && ! pic_symbolic_operand (operands[2], VOIDmode)))
    {
      return 200;
    }
  goto ret0;
 L1422:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (x86_64_general_operand (x4, DImode))
    {
      operands[2] = x4;
      goto L1423;
    }
  goto ret0;
 L1423:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L1424;
    }
  goto ret0;
 L1424:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1425;
  goto ret0;
 L1425:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L1426;
    }
  goto ret0;
 L1426:
  if ((0
   && ix86_match_ccmode (insn, CCZmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)
   && ! pic_symbolic_operand (operands[2], VOIDmode)))
    {
      return 198;
    }
  goto ret0;
 L1919:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L1920;
    }
  goto ret0;
 L1920:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x4, DImode))
    {
      operands[2] = x4;
      goto L1921;
    }
  goto ret0;
 L1921:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L1922;
  goto ret0;
 L1922:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L1923;
  goto ret0;
 L1923:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L1924;
    }
  goto ret0;
 L1924:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == MINUS)
    goto L1925;
  goto ret0;
 L1925:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L1926;
  goto ret0;
 L1926:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (MINUS, DImode, operands)))
    {
      return 228;
    }
  goto ret0;
 L2965:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L2966;
    }
  goto ret0;
 L2966:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x86_64_szext_general_operand (x4, DImode))
    {
      operands[2] = x4;
      goto L2967;
    }
  goto ret0;
 L2967:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L2968;
  goto ret0;
 L2968:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2969;
  goto ret0;
 L2969:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L2970;
    }
  goto ret0;
 L2970:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == AND)
    goto L2971;
  goto ret0;
 L2971:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2972;
  goto ret0;
 L2972:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (AND, DImode, operands)))
    {
      return 289;
    }
  goto ret0;
 L3268:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L3269;
    }
  goto ret0;
 L3269:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x4, DImode))
    {
      operands[2] = x4;
      goto L3270;
    }
  goto ret0;
 L3270:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3271;
  goto ret0;
 L3271:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L3272;
    case CLOBBER:
      goto L3285;
    default:
     break;
   }
  goto ret0;
 L3272:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L3273;
    }
  goto ret0;
 L3273:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == IOR)
    goto L3274;
  goto ret0;
 L3274:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L3275;
  goto ret0;
 L3275:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0
   && ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (IOR, DImode, operands)))
    {
      return 306;
    }
  goto ret0;
 L3285:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L3286;
    }
  goto ret0;
 L3286:
  if ((0
   && ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (IOR, DImode, operands)))
    {
      return 307;
    }
  goto ret0;
 L3651:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L3652;
    }
  goto ret0;
 L3652:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x4, DImode))
    {
      operands[2] = x4;
      goto L3653;
    }
  goto ret0;
 L3653:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3654;
  goto ret0;
 L3654:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L3655;
    case CLOBBER:
      goto L3668;
    default:
     break;
   }
  goto ret0;
 L3655:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L3656;
    }
  goto ret0;
 L3656:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == XOR)
    goto L3657;
  goto ret0;
 L3657:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L3658;
  goto ret0;
 L3658:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0
   && ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (XOR, DImode, operands)))
    {
      return 328;
    }
  goto ret0;
 L3668:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L3669;
    }
  goto ret0;
 L3669:
  if ((0
   && ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (XOR, DImode, operands)))
    {
      return 329;
    }
  goto ret0;
 L4523:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L4524;
    }
  goto ret0;
 L4524:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4525;
  goto ret0;
 L4525:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4526;
  goto ret0;
 L4526:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L4527;
    }
  goto ret0;
 L4527:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == NOT)
    goto L4528;
  goto ret0;
 L4528:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (0 && ix86_match_ccmode (insn, CCNOmode)
   && ix86_unary_operator_ok (NOT, DImode, operands)))
    {
      return 393;
    }
  goto ret0;
 L4614:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L4615;
    }
  goto ret0;
 L4615:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (immediate_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4616;
    }
  goto ret0;
 L4616:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4617;
  goto ret0;
 L4617:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4618;
  goto ret0;
 L4618:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L4619;
    }
  goto ret0;
 L4619:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ASHIFT)
    goto L4620;
  goto ret0;
 L4620:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L4621;
  goto ret0;
 L4621:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (ASHIFT, DImode, operands)))
    {
      return 403;
    }
  goto ret0;
 L4863:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L4864;
    }
  goto ret0;
 L4864:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14442;
  goto ret0;
 L14442:
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4865;
    }
 L14443:
  if (const_int_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4878;
    }
  goto ret0;
 L4865:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4866;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14443;
 L4866:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4867;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14443;
 L4867:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L4868;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14443;
 L4868:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ASHIFTRT)
    goto L4869;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14443;
 L4869:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L4870;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14443;
 L4870:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)))
    {
      return 420;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14443;
 L4878:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4879;
  goto ret0;
 L4879:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4880;
  goto ret0;
 L4880:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L4881;
    }
  goto ret0;
 L4881:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ASHIFTRT)
    goto L4882;
  goto ret0;
 L4882:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L4883;
  goto ret0;
 L4883:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)))
    {
      return 421;
    }
  goto ret0;
 L5256:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L5257;
    }
  goto ret0;
 L5257:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14444;
  goto ret0;
 L14444:
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5258;
    }
 L14445:
  if (const_int_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5271;
    }
  goto ret0;
 L5258:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5259;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14445;
 L5259:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5260;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14445;
 L5260:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L5261;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14445;
 L5261:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L5262;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14445;
 L5262:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5263;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14445;
 L5263:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)))
    {
      return 447;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14445;
 L5271:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5272;
  goto ret0;
 L5272:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5273;
  goto ret0;
 L5273:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L5274;
    }
  goto ret0;
 L5274:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L5275;
  goto ret0;
 L5275:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5276;
  goto ret0;
 L5276:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)))
    {
      return 448;
    }
  goto ret0;
 L1439:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_immediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L1440;
    }
 L1932:
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L1933;
    }
  goto ret0;
 L1440:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1441;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L1932;
 L1441:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L1442;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L1932;
 L1442:
  if ((0
   && ix86_match_ccmode (insn, CCGCmode)))
    {
      return 199;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L1932;
 L1933:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L1934;
  goto ret0;
 L1934:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L1935;
    }
  goto ret0;
 L1935:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == MINUS)
    goto L1936;
  goto ret0;
 L1936:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L1937;
  goto ret0;
 L1937:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCmode)
   && ix86_binary_operator_ok (MINUS, SImode, operands)))
    {
      return 229;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_29 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case PLUS:
      goto L1502;
    case NEG:
      goto L1529;
    case MINUS:
      goto L2047;
    case AND:
      goto L3008;
    case IOR:
      goto L3345;
    case XOR:
      goto L3728;
    case NOT:
      goto L4545;
    case ASHIFT:
      goto L4712;
    case ASHIFTRT:
      goto L5034;
    case LSHIFTRT:
      goto L5372;
    case SUBREG:
    case REG:
    case MEM:
      goto L14402;
    default:
      goto L14411;
   }
 L14402:
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L1559;
    }
 L14411:
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2085;
    }
  goto ret0;
 L1502:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L1503;
    }
  goto ret0;
 L1503:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L1504;
    }
  goto ret0;
 L1504:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L1505;
  goto ret0;
 L1505:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L1506;
    case CLOBBER:
      goto L1578;
    default:
     break;
   }
  goto ret0;
 L1506:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14446;
    case DImode:
      goto L14447;
    default:
      break;
    }
  goto ret0;
 L14446:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L1507;
    }
  goto ret0;
 L1507:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L1508;
  goto ret0;
 L1508:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L1509;
  goto ret0;
 L1509:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (PLUS, SImode, operands)
   && ! pic_symbolic_operand (operands[2], VOIDmode)))
    {
      return 203;
    }
  goto ret0;
 L14447:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L1520;
    }
  goto ret0;
 L1520:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L1521;
  goto ret0;
 L1521:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L1522;
  goto ret0;
 L1522:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L1523;
  goto ret0;
 L1523:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (PLUS, SImode, operands)
   && ! pic_symbolic_operand (operands[2], VOIDmode)))
    {
      return 204;
    }
  goto ret0;
 L1578:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L1579;
    }
  goto ret0;
 L1579:
  if ((ix86_match_ccmode (insn, CCGOCmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)
   && ! pic_symbolic_operand (operands[2], VOIDmode)))
    {
      return 208;
    }
  goto ret0;
 L1529:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L1530;
    }
  goto ret0;
 L1530:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L1531;
    }
  goto ret0;
 L1531:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case CLOBBER:
      goto L1532;
    case SET:
      goto L1549;
    default:
     break;
   }
  goto ret0;
 L1532:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L1533;
    }
  goto ret0;
 L1533:
  if ((ix86_match_ccmode (insn, CCZmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)
   && ! pic_symbolic_operand (operands[2], VOIDmode)))
    {
      return 205;
    }
  goto ret0;
 L1549:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L1550;
    }
  goto ret0;
 L1550:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L1551;
  goto ret0;
 L1551:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L1552;
  goto ret0;
 L1552:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L1553;
  goto ret0;
 L1553:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && (0 && ix86_match_ccmode (insn, CCZmode)
   && ix86_binary_operator_ok (PLUS, SImode, operands)
   && ! pic_symbolic_operand (operands[2], VOIDmode)))
    {
      return 206;
    }
  goto ret0;
 L2047:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode)
    goto L14448;
  goto ret0;
 L14448:
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L2048;
    }
 L14449:
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L2061;
    }
  goto ret0;
 L2048:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L2049;
    }
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14449;
 L2049:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L2050;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14449;
 L2050:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2051;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14449;
 L2051:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L2052;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14449;
 L2052:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MINUS)
    goto L2053;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14449;
 L2053:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2054;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14449;
 L2054:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (MINUS, SImode, operands)))
    {
      return 236;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14449;
 L2061:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L2062;
    }
  goto ret0;
 L2062:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L2063;
  goto ret0;
 L2063:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2064;
  goto ret0;
 L2064:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L2065;
    }
  goto ret0;
 L2065:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L2066;
  goto ret0;
 L2066:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == MINUS)
    goto L2067;
  goto ret0;
 L2067:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L2068;
  goto ret0;
 L2068:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (MINUS, SImode, operands)))
    {
      return 237;
    }
  goto ret0;
 L3008:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode)
    goto L14451;
  goto ret0;
 L14451:
  if (((enum rtx_code) (x4)->code) == ZERO_EXTRACT)
    goto L3146;
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L3009;
    }
  goto ret0;
 L3146:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (ext_register_operand (x5, VOIDmode))
    {
      operands[1] = x5;
      goto L3147;
    }
  goto ret0;
 L3147:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (x5 == const_int_rtx[64 + (8)])
    goto L3148;
  goto ret0;
 L3148:
  x5 = (((x4)->u.fld[2]).rtx1);
  if (x5 == const_int_rtx[64 + (8)])
    goto L3149;
  goto ret0;
 L3149:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const_int_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L3150;
    }
  goto ret0;
 L3150:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3151;
  goto ret0;
 L3151:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L3152;
  goto ret0;
 L3152:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTRACT)
    goto L3153;
  goto ret0;
 L3153:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L3154;
    }
  goto ret0;
 L3154:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L3155;
  goto ret0;
 L3155:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L3156;
  goto ret0;
 L3156:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == AND)
    goto L3157;
  goto ret0;
 L3157:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L3158;
  goto ret0;
 L3158:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L3159;
  goto ret0;
 L3159:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3160;
  goto ret0;
 L3160:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L3161;
  goto ret0;
 L3161:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCNOmode)))
    {
      return 301;
    }
  goto ret0;
 L3009:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L3010;
    }
  goto ret0;
 L3010:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3011;
  goto ret0;
 L3011:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L3012;
  goto ret0;
 L3012:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14452;
    case DImode:
      goto L14453;
    default:
      break;
    }
  goto ret0;
 L14452:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L3013;
    }
  goto ret0;
 L3013:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == AND)
    goto L3014;
  goto ret0;
 L3014:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L3015;
  goto ret0;
 L3015:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (AND, SImode, operands)))
    {
      return 292;
    }
  goto ret0;
 L14453:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L3026;
    }
  goto ret0;
 L3026:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L3027;
  goto ret0;
 L3027:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == AND)
    goto L3028;
  goto ret0;
 L3028:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L3029;
  goto ret0;
 L3029:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && (0 && ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (AND, SImode, operands)))
    {
      return 293;
    }
  goto ret0;
 L3345:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L3346;
    }
  goto ret0;
 L3346:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L3347;
    }
 L3373:
  if (x86_64_zext_immediate_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L3374;
    }
  goto ret0;
 L3347:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3348;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L3348:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L3349;
    case CLOBBER:
      goto L3390;
    default:
     break;
   }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L3349:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14454;
    case DImode:
      goto L14455;
    default:
      break;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L14454:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L3350;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L3350:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == IOR)
    goto L3351;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L3351:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L3352;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L3352:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (IOR, SImode, operands)))
    {
      return 311;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L14455:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L3363;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L3363:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L3364;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L3364:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == IOR)
    goto L3365;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L3365:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L3366;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L3366:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && (0 && ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (IOR, SImode, operands)))
    {
      return 312;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L3390:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L3391;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L3391:
  if ((ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 314;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3373;
 L3374:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3375;
  goto ret0;
 L3375:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L3376;
  goto ret0;
 L3376:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L3377;
    }
  goto ret0;
 L3377:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == IOR)
    goto L3378;
  goto ret0;
 L3378:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTEND)
    goto L3379;
  goto ret0;
 L3379:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L3380;
  goto ret0;
 L3380:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (IOR, SImode, operands)))
    {
      return 313;
    }
  goto ret0;
 L3728:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode)
    goto L14457;
  goto ret0;
 L14457:
  if (((enum rtx_code) (x4)->code) == ZERO_EXTRACT)
    goto L4021;
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L3729;
    }
  goto ret0;
 L4021:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (ext_register_operand (x5, VOIDmode))
    {
      operands[1] = x5;
      goto L4022;
    }
  goto ret0;
 L4022:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (x5 == const_int_rtx[64 + (8)])
    goto L4023;
  goto ret0;
 L4023:
  x5 = (((x4)->u.fld[2]).rtx1);
  if (x5 == const_int_rtx[64 + (8)])
    goto L4024;
  goto ret0;
 L4024:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4025;
    }
 L4046:
  if (nonmemory_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4047;
    }
  goto ret0;
 L4025:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4026;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L4046;
 L4026:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4027;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L4046;
 L4027:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTRACT)
    goto L4028;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L4046;
 L4028:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L4029;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L4046;
 L4029:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L4030;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L4046;
 L4030:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L4031;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L4046;
 L4031:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == XOR)
    goto L4032;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L4046;
 L4032:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L4033;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L4046;
 L4033:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L4034;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L4046;
 L4034:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L4035;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L4046;
 L4035:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L4036;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L4046;
 L4036:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (!0 && ix86_match_ccmode (insn, CCNOmode)))
    {
      return 349;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L4046;
 L4047:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4048;
  goto ret0;
 L4048:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4049;
  goto ret0;
 L4049:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTRACT)
    goto L4050;
  goto ret0;
 L4050:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ext_register_operand (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L4051;
    }
  goto ret0;
 L4051:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L4052;
  goto ret0;
 L4052:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L4053;
  goto ret0;
 L4053:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == XOR)
    goto L4054;
  goto ret0;
 L4054:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L4055;
  goto ret0;
 L4055:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L4056;
  goto ret0;
 L4056:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L4057;
  goto ret0;
 L4057:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L4058;
  goto ret0;
 L4058:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCNOmode)))
    {
      return 350;
    }
  goto ret0;
 L3729:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L3730;
    }
 L3756:
  if (x86_64_zext_immediate_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L3757;
    }
  goto ret0;
 L3730:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3731;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L3731:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L3732;
    case CLOBBER:
      goto L3773;
    default:
     break;
   }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L3732:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14458;
    case DImode:
      goto L14459;
    default:
      break;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L14458:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L3733;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L3733:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == XOR)
    goto L3734;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L3734:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L3735;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L3735:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (XOR, SImode, operands)))
    {
      return 333;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L14459:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L3746;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L3746:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L3747;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L3747:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == XOR)
    goto L3748;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L3748:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L3749;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L3749:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && (0 && ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (XOR, SImode, operands)))
    {
      return 334;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L3773:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L3774;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L3774:
  if ((ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 336;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L3756;
 L3757:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3758;
  goto ret0;
 L3758:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L3759;
  goto ret0;
 L3759:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L3760;
    }
  goto ret0;
 L3760:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == XOR)
    goto L3761;
  goto ret0;
 L3761:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTEND)
    goto L3762;
  goto ret0;
 L3762:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L3763;
  goto ret0;
 L3763:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (XOR, SImode, operands)))
    {
      return 335;
    }
  goto ret0;
 L4545:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode)
    goto L14460;
  goto ret0;
 L14460:
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L4546;
    }
 L14461:
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L4557;
    }
  goto ret0;
 L4546:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4547;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14461;
 L4547:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4548;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14461;
 L4548:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L4549;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14461;
 L4549:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == NOT)
    goto L4550;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14461;
 L4550:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (ix86_match_ccmode (insn, CCNOmode)
   && ix86_unary_operator_ok (NOT, SImode, operands)))
    {
      return 396;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14461;
 L4557:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4558;
  goto ret0;
 L4558:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4559;
  goto ret0;
 L4559:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L4560;
    }
  goto ret0;
 L4560:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L4561;
  goto ret0;
 L4561:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == NOT)
    goto L4562;
  goto ret0;
 L4562:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1])
      && (0 && ix86_match_ccmode (insn, CCNOmode)
   && ix86_unary_operator_ok (NOT, SImode, operands)))
    {
      return 397;
    }
  goto ret0;
 L4712:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode)
    goto L14462;
  goto ret0;
 L14462:
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L4713;
    }
 L14463:
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L4726;
    }
  goto ret0;
 L4713:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const_int_1_31_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4714;
    }
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14463;
 L4714:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4715;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14463;
 L4715:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4716;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14463;
 L4716:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L4717;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14463;
 L4717:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ASHIFT)
    goto L4718;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14463;
 L4718:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L4719;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14463;
 L4719:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (ASHIFT, SImode, operands)))
    {
      return 409;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14463;
 L4726:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const_int_1_31_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4727;
    }
  goto ret0;
 L4727:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4728;
  goto ret0;
 L4728:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4729;
  goto ret0;
 L4729:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L4730;
    }
  goto ret0;
 L4730:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L4731;
  goto ret0;
 L4731:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ASHIFT)
    goto L4732;
  goto ret0;
 L4732:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L4733;
  goto ret0;
 L4733:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (ASHIFT, SImode, operands)))
    {
      return 410;
    }
  goto ret0;
 L5034:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode)
    goto L14464;
  goto ret0;
 L14464:
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L5035;
    }
 L14465:
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L5048;
    }
  goto ret0;
 L5035:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14466;
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14465;
 L14466:
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5036;
    }
 L14467:
  if (const_int_1_31_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5063;
    }
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14465;
 L5036:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5037;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14467;
 L5037:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5038;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14467;
 L5038:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L5039;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14467;
 L5039:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ASHIFTRT)
    goto L5040;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14467;
 L5040:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5041;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14467;
 L5041:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)))
    {
      return 431;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14467;
 L5063:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5064;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14465;
 L5064:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5065;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14465;
 L5065:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L5066;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14465;
 L5066:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ASHIFTRT)
    goto L5067;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14465;
 L5067:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5068;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14465;
 L5068:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)))
    {
      return 433;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14465;
 L5048:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14468;
  goto ret0;
 L14468:
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5049;
    }
 L14469:
  if (const_int_1_31_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5076;
    }
  goto ret0;
 L5049:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5050;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14469;
 L5050:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5051;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14469;
 L5051:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L5052;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14469;
 L5052:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L5053;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14469;
 L5053:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ASHIFTRT)
    goto L5054;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14469;
 L5054:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L5055;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14469;
 L5055:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && (0 && ix86_match_ccmode (insn, CCmode)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)))
    {
      return 432;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14469;
 L5076:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5077;
  goto ret0;
 L5077:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5078;
  goto ret0;
 L5078:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L5079;
    }
  goto ret0;
 L5079:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L5080;
  goto ret0;
 L5080:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ASHIFTRT)
    goto L5081;
  goto ret0;
 L5081:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L5082;
  goto ret0;
 L5082:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)))
    {
      return 434;
    }
  goto ret0;
 L5372:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode)
    goto L14470;
  goto ret0;
 L14470:
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L5373;
    }
 L14471:
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L5386;
    }
  goto ret0;
 L5373:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14472;
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14471;
 L14472:
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5374;
    }
 L14473:
  if (const_int_1_31_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5401;
    }
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14471;
 L5374:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5375;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14473;
 L5375:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5376;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14473;
 L5376:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L5377;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14473;
 L5377:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L5378;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14473;
 L5378:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5379;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14473;
 L5379:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)))
    {
      return 455;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14473;
 L5401:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5402;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14471;
 L5402:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5403;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14471;
 L5403:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L5404;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14471;
 L5404:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L5405;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14471;
 L5405:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5406;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14471;
 L5406:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)))
    {
      return 457;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14471;
 L5386:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14474;
  goto ret0;
 L14474:
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5387;
    }
 L14475:
  if (const_int_1_31_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5414;
    }
  goto ret0;
 L5387:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5388;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14475;
 L5388:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5389;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14475;
 L5389:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L5390;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14475;
 L5390:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L5391;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14475;
 L5391:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTEND)
    goto L5392;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14475;
 L5392:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L5393;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14475;
 L5393:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)))
    {
      return 456;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14475;
 L5414:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5415;
  goto ret0;
 L5415:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5416;
  goto ret0;
 L5416:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L5417;
    }
  goto ret0;
 L5417:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L5418;
  goto ret0;
 L5418:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTEND)
    goto L5419;
  goto ret0;
 L5419:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L5420;
  goto ret0;
 L5420:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)))
    {
      return 458;
    }
  goto ret0;
 L1559:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L1560;
    }
 L2074:
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2075;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14411;
 L1560:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1561;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L2074;
 L1561:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L1562;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L2074;
 L1562:
  if ((ix86_match_ccmode (insn, CCGCmode)
   && (((operands[2])->u.hwint[0]) & 0xffffffff) != 0x80000000))
    {
      return 207;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L2074;
 L2075:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2076;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14411;
 L2076:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L2077;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14411;
 L2077:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MINUS)
    goto L2078;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14411;
 L2078:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2079;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14411;
 L2079:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCmode)
   && ix86_binary_operator_ok (MINUS, SImode, operands)))
    {
      return 238;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14411;
 L2085:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2086;
    }
  goto ret0;
 L2086:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2087;
  goto ret0;
 L2087:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L2088;
    }
  goto ret0;
 L2088:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L2089;
  goto ret0;
 L2089:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == MINUS)
    goto L2090;
  goto ret0;
 L2090:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L2091;
  goto ret0;
 L2091:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && (0 && ix86_match_ccmode (insn, CCmode)
   && ix86_binary_operator_ok (MINUS, SImode, operands)))
    {
      return 239;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_30 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case PLUS:
      goto L1620;
    case NEG:
      goto L1633;
    case MINUS:
      goto L2111;
    case AND:
      goto L3049;
    case IOR:
      goto L3418;
    case XOR:
      goto L3801;
    case NOT:
      goto L4573;
    case ASHIFT:
      goto L4767;
    case ASHIFTRT:
      goto L5116;
    case LSHIFTRT:
      goto L5454;
    case SUBREG:
    case REG:
    case MEM:
      goto L14405;
    default:
      goto ret0;
   }
 L14405:
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L1650;
    }
  goto ret0;
 L1620:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, HImode))
    {
      operands[1] = x4;
      goto L1621;
    }
  goto ret0;
 L1621:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, HImode))
    {
      operands[2] = x4;
      goto L1622;
    }
  goto ret0;
 L1622:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L1623;
  goto ret0;
 L1623:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L1624;
    case CLOBBER:
      goto L1669;
    default:
     break;
   }
  goto ret0;
 L1624:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L1625;
    }
  goto ret0;
 L1625:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L1626;
  goto ret0;
 L1626:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L1627;
  goto ret0;
 L1627:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (PLUS, HImode, operands)))
    {
      return 211;
    }
  goto ret0;
 L1669:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L1670;
    }
  goto ret0;
 L1670:
  if ((ix86_match_ccmode (insn, CCGOCmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 214;
    }
  goto ret0;
 L1633:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (general_operand (x4, HImode))
    {
      operands[2] = x4;
      goto L1634;
    }
  goto ret0;
 L1634:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L1635;
    }
  goto ret0;
 L1635:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1636;
  goto ret0;
 L1636:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L1637;
    }
  goto ret0;
 L1637:
  if ((ix86_match_ccmode (insn, CCZmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 212;
    }
  goto ret0;
 L2111:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, HImode))
    {
      operands[1] = x4;
      goto L2112;
    }
  goto ret0;
 L2112:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, HImode))
    {
      operands[2] = x4;
      goto L2113;
    }
  goto ret0;
 L2113:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L2114;
  goto ret0;
 L2114:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2115;
  goto ret0;
 L2115:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L2116;
    }
  goto ret0;
 L2116:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == MINUS)
    goto L2117;
  goto ret0;
 L2117:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2118;
  goto ret0;
 L2118:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (MINUS, HImode, operands)))
    {
      return 241;
    }
  goto ret0;
 L3049:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, HImode))
    {
      operands[1] = x4;
      goto L3050;
    }
  goto ret0;
 L3050:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, HImode))
    {
      operands[2] = x4;
      goto L3051;
    }
  goto ret0;
 L3051:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3052;
  goto ret0;
 L3052:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L3053;
  goto ret0;
 L3053:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L3054;
    }
  goto ret0;
 L3054:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == AND)
    goto L3055;
  goto ret0;
 L3055:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L3056;
  goto ret0;
 L3056:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (AND, HImode, operands)))
    {
      return 295;
    }
  goto ret0;
 L3418:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, HImode))
    {
      operands[1] = x4;
      goto L3419;
    }
  goto ret0;
 L3419:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, HImode))
    {
      operands[2] = x4;
      goto L3420;
    }
  goto ret0;
 L3420:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3421;
  goto ret0;
 L3421:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L3422;
    case CLOBBER:
      goto L3435;
    default:
     break;
   }
  goto ret0;
 L3422:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L3423;
    }
  goto ret0;
 L3423:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == IOR)
    goto L3424;
  goto ret0;
 L3424:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L3425;
  goto ret0;
 L3425:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (IOR, HImode, operands)))
    {
      return 316;
    }
  goto ret0;
 L3435:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L3436;
    }
  goto ret0;
 L3436:
  if ((ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 317;
    }
  goto ret0;
 L3801:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, HImode))
    {
      operands[1] = x4;
      goto L3802;
    }
  goto ret0;
 L3802:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, HImode))
    {
      operands[2] = x4;
      goto L3803;
    }
  goto ret0;
 L3803:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3804;
  goto ret0;
 L3804:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L3805;
    case CLOBBER:
      goto L3818;
    default:
     break;
   }
  goto ret0;
 L3805:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L3806;
    }
  goto ret0;
 L3806:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == XOR)
    goto L3807;
  goto ret0;
 L3807:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L3808;
  goto ret0;
 L3808:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (XOR, HImode, operands)))
    {
      return 338;
    }
  goto ret0;
 L3818:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L3819;
    }
  goto ret0;
 L3819:
  if ((ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 339;
    }
  goto ret0;
 L4573:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, HImode))
    {
      operands[1] = x4;
      goto L4574;
    }
  goto ret0;
 L4574:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4575;
  goto ret0;
 L4575:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4576;
  goto ret0;
 L4576:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L4577;
    }
  goto ret0;
 L4577:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == NOT)
    goto L4578;
  goto ret0;
 L4578:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (ix86_match_ccmode (insn, CCNOmode)
   && ix86_unary_operator_ok (NEG, HImode, operands)))
    {
      return 399;
    }
  goto ret0;
 L4767:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, HImode))
    {
      operands[1] = x4;
      goto L4768;
    }
  goto ret0;
 L4768:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const_int_1_31_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4769;
    }
  goto ret0;
 L4769:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4770;
  goto ret0;
 L4770:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4771;
  goto ret0;
 L4771:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L4772;
    }
  goto ret0;
 L4772:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == ASHIFT)
    goto L4773;
  goto ret0;
 L4773:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L4774;
  goto ret0;
 L4774:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (ASHIFT, HImode, operands)))
    {
      return 413;
    }
  goto ret0;
 L5116:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, HImode))
    {
      operands[1] = x4;
      goto L5117;
    }
  goto ret0;
 L5117:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14476;
  goto ret0;
 L14476:
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5118;
    }
 L14477:
  if (const_int_1_31_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5131;
    }
  goto ret0;
 L5118:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5119;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14477;
 L5119:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5120;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14477;
 L5120:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L5121;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14477;
 L5121:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == ASHIFTRT)
    goto L5122;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14477;
 L5122:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5123;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14477;
 L5123:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)))
    {
      return 437;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14477;
 L5131:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5132;
  goto ret0;
 L5132:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5133;
  goto ret0;
 L5133:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L5134;
    }
  goto ret0;
 L5134:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == ASHIFTRT)
    goto L5135;
  goto ret0;
 L5135:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5136;
  goto ret0;
 L5136:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)))
    {
      return 438;
    }
  goto ret0;
 L5454:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, HImode))
    {
      operands[1] = x4;
      goto L5455;
    }
  goto ret0;
 L5455:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14478;
  goto ret0;
 L14478:
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5456;
    }
 L14479:
  if (const_int_1_31_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5469;
    }
  goto ret0;
 L5456:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5457;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14479;
 L5457:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5458;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14479;
 L5458:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L5459;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14479;
 L5459:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L5460;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14479;
 L5460:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5461;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14479;
 L5461:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)))
    {
      return 461;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14479;
 L5469:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5470;
  goto ret0;
 L5470:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5471;
  goto ret0;
 L5471:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L5472;
    }
  goto ret0;
 L5472:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L5473;
  goto ret0;
 L5473:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5474;
  goto ret0;
 L5474:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)))
    {
      return 462;
    }
  goto ret0;
 L1650:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L1651;
    }
 L2124:
  if (general_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L2125;
    }
  goto ret0;
 L1651:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1652;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L2124;
 L1652:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L1653;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L2124;
 L1653:
  if ((ix86_match_ccmode (insn, CCGCmode)
   && (((operands[2])->u.hwint[0]) & 0xffff) != 0x8000))
    {
      return 213;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L2124;
 L2125:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2126;
  goto ret0;
 L2126:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L2127;
    }
  goto ret0;
 L2127:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == MINUS)
    goto L2128;
  goto ret0;
 L2128:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2129;
  goto ret0;
 L2129:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCmode)
   && ix86_binary_operator_ok (MINUS, HImode, operands)))
    {
      return 242;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_31 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case PLUS:
      goto L1727;
    case NEG:
      goto L1740;
    case MINUS:
      goto L2165;
    case AND:
      goto L3092;
    case IOR:
      goto L3479;
    case XOR:
      goto L3975;
    case NOT:
      goto L4589;
    case ASHIFT:
      goto L4808;
    case ASHIFTRT:
      goto L5202;
    case LSHIFTRT:
      goto L5540;
    case SUBREG:
    case REG:
    case MEM:
      goto L14408;
    default:
      goto ret0;
   }
 L14408:
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L1757;
    }
  goto ret0;
 L1727:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L1728;
    }
  goto ret0;
 L1728:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L1729;
    }
  goto ret0;
 L1729:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L1730;
  goto ret0;
 L1730:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L1731;
    case CLOBBER:
      goto L1776;
    default:
     break;
   }
  goto ret0;
 L1731:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L1732;
    }
  goto ret0;
 L1732:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L1733;
  goto ret0;
 L1733:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L1734;
  goto ret0;
 L1734:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (PLUS, QImode, operands)))
    {
      return 218;
    }
  goto ret0;
 L1776:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L1777;
    }
  goto ret0;
 L1777:
  if ((ix86_match_ccmode (insn, CCGOCmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 221;
    }
  goto ret0;
 L1740:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L1741;
    }
  goto ret0;
 L1741:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L1742;
    }
  goto ret0;
 L1742:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1743;
  goto ret0;
 L1743:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L1744;
    }
  goto ret0;
 L1744:
  if ((ix86_match_ccmode (insn, CCZmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 219;
    }
  goto ret0;
 L2165:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L2166;
    }
  goto ret0;
 L2166:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L2167;
    }
  goto ret0;
 L2167:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L2168;
  goto ret0;
 L2168:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2169;
  goto ret0;
 L2169:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L2170;
    }
  goto ret0;
 L2170:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == MINUS)
    goto L2171;
  goto ret0;
 L2171:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2172;
  goto ret0;
 L2172:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (MINUS, QImode, operands)))
    {
      return 245;
    }
  goto ret0;
 L3092:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == QImode)
    goto L14480;
  goto ret0;
 L14480:
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L3093;
    }
 L14481:
  if (nonimmediate_operand (x4, QImode))
    {
      operands[0] = x4;
      goto L3106;
    }
  goto ret0;
 L3093:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L3094;
    }
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14481;
 L3094:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3095;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14481;
 L3095:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L3096;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14481;
 L3096:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L3097;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14481;
 L3097:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == AND)
    goto L3098;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14481;
 L3098:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L3099;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14481;
 L3099:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (AND, QImode, operands)))
    {
      return 298;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14481;
 L3106:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L3107;
    }
  goto ret0;
 L3107:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3108;
  goto ret0;
 L3108:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L3109;
  goto ret0;
 L3109:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x2)->code) == STRICT_LOW_PART)
    goto L3110;
  goto ret0;
 L3110:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L3111;
  goto ret0;
 L3111:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == AND)
    goto L3112;
  goto ret0;
 L3112:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L3113;
  goto ret0;
 L3113:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 299;
    }
  goto ret0;
 L3479:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == QImode)
    goto L14482;
  goto ret0;
 L14482:
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L3480;
    }
 L14483:
  if (nonimmediate_operand (x4, QImode))
    {
      operands[0] = x4;
      goto L3493;
    }
  goto ret0;
 L3480:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L3481;
    }
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14483;
 L3481:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3482;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14483;
 L3482:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L3483;
    case CLOBBER:
      goto L3510;
    default:
     break;
   }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14483;
 L3483:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L3484;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14483;
 L3484:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == IOR)
    goto L3485;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14483;
 L3485:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L3486;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14483;
 L3486:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (IOR, QImode, operands)))
    {
      return 320;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14483;
 L3510:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L3511;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14483;
 L3511:
  if ((ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 322;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14483;
 L3493:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L3494;
    }
  goto ret0;
 L3494:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3495;
  goto ret0;
 L3495:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L3496;
  goto ret0;
 L3496:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x2)->code) == STRICT_LOW_PART)
    goto L3497;
  goto ret0;
 L3497:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L3498;
  goto ret0;
 L3498:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == IOR)
    goto L3499;
  goto ret0;
 L3499:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L3500;
  goto ret0;
 L3500:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 321;
    }
  goto ret0;
 L3975:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == QImode)
    goto L14484;
  goto ret0;
 L14484:
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L3976;
    }
 L14485:
  if (nonimmediate_operand (x4, QImode))
    {
      operands[0] = x4;
      goto L3989;
    }
  goto ret0;
 L3976:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L3977;
    }
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14485;
 L3977:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3978;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14485;
 L3978:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L3979;
    case CLOBBER:
      goto L4006;
    default:
     break;
   }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14485;
 L3979:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L3980;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14485;
 L3980:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == XOR)
    goto L3981;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14485;
 L3981:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L3982;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14485;
 L3982:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCNOmode)
   && ix86_binary_operator_ok (XOR, QImode, operands)))
    {
      return 346;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14485;
 L4006:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L4007;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14485;
 L4007:
  if ((ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 348;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14485;
 L3989:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (general_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L3990;
    }
  goto ret0;
 L3990:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L3991;
  goto ret0;
 L3991:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L3992;
  goto ret0;
 L3992:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x2)->code) == STRICT_LOW_PART)
    goto L3993;
  goto ret0;
 L3993:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L3994;
  goto ret0;
 L3994:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == XOR)
    goto L3995;
  goto ret0;
 L3995:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L3996;
  goto ret0;
 L3996:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ix86_match_ccmode (insn, CCNOmode)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 347;
    }
  goto ret0;
 L4589:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L4590;
    }
  goto ret0;
 L4590:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4591;
  goto ret0;
 L4591:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4592;
  goto ret0;
 L4592:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L4593;
    }
  goto ret0;
 L4593:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == NOT)
    goto L4594;
  goto ret0;
 L4594:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (ix86_match_ccmode (insn, CCNOmode)
   && ix86_unary_operator_ok (NOT, QImode, operands)))
    {
      return 401;
    }
  goto ret0;
 L4808:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L4809;
    }
  goto ret0;
 L4809:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const_int_1_31_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L4810;
    }
  goto ret0;
 L4810:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4811;
  goto ret0;
 L4811:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4812;
  goto ret0;
 L4812:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L4813;
    }
  goto ret0;
 L4813:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == ASHIFT)
    goto L4814;
  goto ret0;
 L4814:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L4815;
  goto ret0;
 L4815:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (ASHIFT, QImode, operands)))
    {
      return 416;
    }
  goto ret0;
 L5202:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L5203;
    }
  goto ret0;
 L5203:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14486;
  goto ret0;
 L14486:
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5204;
    }
 L14487:
  if (const_int_1_31_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5217;
    }
  goto ret0;
 L5204:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5205;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14487;
 L5205:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5206;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14487;
 L5206:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L5207;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14487;
 L5207:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == ASHIFTRT)
    goto L5208;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14487;
 L5208:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5209;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14487;
 L5209:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)))
    {
      return 443;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14487;
 L5217:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5218;
  goto ret0;
 L5218:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5219;
  goto ret0;
 L5219:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L5220;
    }
  goto ret0;
 L5220:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == ASHIFTRT)
    goto L5221;
  goto ret0;
 L5221:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5222;
  goto ret0;
 L5222:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)))
    {
      return 444;
    }
  goto ret0;
 L5540:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L5541;
    }
  goto ret0;
 L5541:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14488;
  goto ret0;
 L14488:
  if (const1_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5542;
    }
 L14489:
  if (const_int_1_31_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L5555;
    }
  goto ret0;
 L5542:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5543;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14489;
 L5543:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5544;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14489;
 L5544:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L5545;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14489;
 L5545:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L5546;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14489;
 L5546:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5547;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14489;
 L5547:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)
   && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)))
    {
      return 467;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L14489;
 L5555:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L5556;
  goto ret0;
 L5556:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L5557;
  goto ret0;
 L5557:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L5558;
    }
  goto ret0;
 L5558:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L5559;
  goto ret0;
 L5559:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L5560;
  goto ret0;
 L5560:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)))
    {
      return 468;
    }
  goto ret0;
 L1757:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L1758;
    }
 L2178:
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L2179;
    }
  goto ret0;
 L1758:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1759;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L2178;
 L1759:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L1760;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L2178;
 L1760:
  if ((ix86_match_ccmode (insn, CCGCmode)
   && (((operands[2])->u.hwint[0]) & 0xff) != 0x80))
    {
      return 220;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L2178;
 L2179:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2180;
  goto ret0;
 L2180:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L2181;
    }
  goto ret0;
 L2181:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == MINUS)
    goto L2182;
  goto ret0;
 L2182:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2183;
  goto ret0;
 L2183:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_match_ccmode (insn, CCmode)
   && ix86_binary_operator_ok (MINUS, QImode, operands)))
    {
      return 246;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_32 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14086;
    case HImode:
      goto L14089;
    case QImode:
      goto L14090;
    case DImode:
      goto L14091;
    case SFmode:
      goto L14094;
    case DFmode:
      goto L14095;
    case XFmode:
      goto L14096;
    case CCmode:
      goto L14100;
    case TImode:
      goto L14103;
    case CCZmode:
      goto L14104;
    default:
      break;
    }
 L374:
  switch (((enum rtx_code) (x2)->code))
    {
    case STRICT_LOW_PART:
      goto L375;
    case REG:
      goto L14110;
    case PC:
      goto L6216;
    default:
     break;
   }
 L8241:
  operands[0] = x2;
  goto L8242;
 L14086:
  tem = recog_21 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L374;
 L14089:
  tem = recog_22 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L374;
 L14090:
  tem = recog_23 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L374;
 L14091:
  if (push_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L507;
    }
 L14092:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L527;
    }
 L14093:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L579;
    }
  goto L374;
 L507:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (general_no_elim_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L508;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14092;
 L508:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L509;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14092;
 L509:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L510;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14092;
 L510:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (0))
    {
      return 77;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14092;
 L527:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L14229;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14093;
 L14229:
  tem = recog_24 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14093;
 L579:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L14254;
 L6542:
  if (((enum rtx_code) (x2)->code) == CALL)
    goto L6543;
  if (const0_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L538;
    }
 L547:
  if (const_int_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L548;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14254:
  tem = recog_25 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L6542;
 L6543:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == QImode
      && ((enum rtx_code) (x3)->code) == MEM)
    goto L6544;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6544:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == DImode)
    goto L14288;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14288:
  if (call_insn_operand (x4, DImode))
    {
      operands[2] = x4;
      goto L6545;
    }
 L14289:
  if (call_insn_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L6591;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6545:
  x3 = (((x2)->u.fld[1]).rtx1);
  operands[3] = x3;
  goto L6546;
 L6546:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum machine_mode) (x1)->mode) == DImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 16)
    goto L6547;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14289;
 L6547:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (tls_symbolic_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L6548;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14289;
 L6548:
  if ((0))
    {
      return 546;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14289;
 L6591:
  x3 = (((x2)->u.fld[1]).rtx1);
  operands[2] = x3;
  goto L6592;
 L6592:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum machine_mode) (x1)->mode) == DImode
      && ((enum rtx_code) (x1)->code) == UNSPEC
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 17)
    goto L6593;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6593:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (x2 == const_int_rtx[64 + (0)]
      && (0))
    {
      return 549;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L538:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L539;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L547;
 L539:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && (!(x86_use_mov0 & (1 << ix86_tune)) || optimize_size)
   && reload_completed))
    {
      return 80;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L547;
 L548:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L549;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L549:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ((ix86_tune == PROCESSOR_PENTIUM) || optimize_size)
   && reload_completed
   && operands[1] == (const_int_rtx[64 -1])))
    {
      return 81;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14094:
  tem = recog_26 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L374;
 L14095:
  tem = recog_27 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L374;
 L14096:
  if (register_operand (x2, XFmode))
    {
      operands[0] = x2;
      goto L648;
    }
 L14109:
  if (nonimmediate_operand (x2, XFmode))
    {
      operands[0] = x2;
      goto L4315;
    }
  goto L374;
 L648:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode)
    goto L14350;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L14350:
  if (((enum rtx_code) (x2)->code) == UNSPEC)
    goto L14357;
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L649;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L14357:
  switch ((((((x2)->u.fld[0]).rtvec1))->num_elem))
    {
    case 1:
      goto L14364;
    case 2:
      goto L14366;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L14364:
  switch ((((x2)->u.fld[1]).rtint))
    {
    case 80L:
      goto L6988;
    case 82L:
      goto L7015;
    case 84L:
      goto L7099;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L6988:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, XFmode))
    {
      operands[2] = x3;
      goto L6989;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L6989:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6990;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L6990:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L6991;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L6991:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 81)
    goto L6992;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L6992:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2])
      && (! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 604;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7015:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, XFmode))
    {
      operands[2] = x3;
      goto L7016;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7016:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7017;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7017:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L7018;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7018:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 83)
    goto L7019;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7019:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2])
      && (! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 607;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7099:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, XFmode))
    {
      operands[2] = x3;
      goto L7100;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7100:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7101;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7101:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L7102;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7102:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 85)
    goto L7103;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7103:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2])
      && (! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 613;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L14366:
  switch ((((x2)->u.fld[1]).rtint))
    {
    case 65L:
      goto L7054;
    case 66L:
      goto L7069;
    case 67L:
      goto L7084;
    case 86L:
      goto L7118;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7054:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, XFmode))
    {
      operands[2] = x3;
      goto L7055;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7055:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L7056;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7056:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7057;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7057:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, XFmode))
    {
      operands[3] = x2;
      goto L7058;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7058:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 610;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7069:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, XFmode))
    {
      operands[2] = x3;
      goto L7070;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7070:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L7071;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7071:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7072;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7072:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, XFmode))
    {
      operands[3] = x2;
      goto L7073;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7073:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 611;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7084:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, XFmode))
    {
      operands[2] = x3;
      goto L7085;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7085:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L7086;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7086:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7087;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7087:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, XFmode))
    {
      operands[3] = x2;
      goto L7088;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7088:
  if ((! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 612;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7118:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, XFmode))
    {
      operands[2] = x3;
      goto L7119;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7119:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x3, XFmode))
    {
      operands[3] = x3;
      goto L7120;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7120:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7121;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7121:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L7122;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7122:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x2)->u.fld[1]).rtint) == 87)
    goto L7123;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7123:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2]))
    goto L7124;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L7124:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (rtx_equal_p (x3, operands[3])
      && (! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 616;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L649:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L650;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L650:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L651;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L651:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    {
      return 102;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14109;
 L4315:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode)
    goto L14371;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14371:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L4316;
    case ABS:
      goto L4472;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4316:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L4317;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4317:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4318;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4318:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001)
   && ix86_unary_operator_ok (NEG, XFmode, operands)))
    {
      return 370;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4472:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L4473;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4473:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4474;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4474:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001)
   && ix86_unary_operator_ok (ABS, XFmode, operands)))
    {
      return 385;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14100:
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L1212;
  goto L374;
 L1212:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x2)->u.fld[1]).rtint) == 27)
    goto L1213;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1213:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  switch (((enum machine_mode) (x3)->mode))
    {
    case DImode:
      goto L14373;
    case SImode:
      goto L14374;
    case QImode:
      goto L14375;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14373:
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L1214;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1214:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (x86_64_general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L1215;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1215:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L1216;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1216:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L1217;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1217:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L1218;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1218:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L1219;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1219:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (0 && ix86_binary_operator_ok (PLUS, DImode, operands)))
    {
      return 179;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14374:
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L1299;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1299:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (general_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L1300;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1300:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L1301;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1301:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L1302;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1302:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L1303;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1303:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L1304;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1304:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_binary_operator_ok (PLUS, SImode, operands)))
    {
      return 184;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14375:
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L1310;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1310:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (general_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L1311;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1311:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L1312;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1312:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L1313;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1313:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L1314;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1314:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L1315;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L1315:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (ix86_binary_operator_ok (PLUS, QImode, operands)))
    {
      return 185;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14103:
  if (register_operand (x2, TImode))
    {
      operands[0] = x2;
      goto L2295;
    }
  goto L374;
 L2295:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == TImode
      && ((enum rtx_code) (x2)->code) == MULT)
    goto L2296;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L2296:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == TImode)
    goto L14376;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14376:
  switch (((enum rtx_code) (x3)->code))
    {
    case ZERO_EXTEND:
      goto L2297;
    case SIGN_EXTEND:
      goto L2333;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L2297:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L2298;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L2298:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == TImode
      && ((enum rtx_code) (x3)->code) == ZERO_EXTEND)
    goto L2299;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L2299:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[2] = x4;
      goto L2300;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L2300:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2301;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L2301:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 254;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L2333:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L2334;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L2334:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == TImode
      && ((enum rtx_code) (x3)->code) == SIGN_EXTEND)
    goto L2335;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L2335:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[2] = x4;
      goto L2336;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L2336:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2337;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L2337:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 256;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14104:
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L4086;
  goto L374;
 L4086:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCZmode
      && ((enum rtx_code) (x2)->code) == COMPARE)
    goto L4087;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4087:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case DImode:
      goto L14378;
    case SImode:
      goto L14379;
    case HImode:
      goto L14381;
    case QImode:
      goto L14382;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14378:
  switch (((enum rtx_code) (x3)->code))
    {
    case NEG:
      goto L4088;
    case LSHIFTRT:
      goto L4141;
    case SUBREG:
    case REG:
    case MEM:
      goto L14384;
    default:
      x2 = (((x1)->u.fld[0]).rtx1);
      goto L374;
   }
 L14384:
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L6438;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4088:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L4089;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4089:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4090;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4090:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4091;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4091:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L4092;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4092:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == NEG)
    goto L4093;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4093:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (0 && ix86_unary_operator_ok (NEG, DImode, operands)))
    {
      return 353;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4141:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == DImode
      && ((enum rtx_code) (x4)->code) == NEG)
    goto L4142;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4142:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x5)->mode) == DImode
      && ((enum rtx_code) (x5)->code) == ASHIFT)
    goto L4143;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4143:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (register_operand (x6, DImode))
    {
      operands[1] = x6;
      goto L4144;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4144:
  x6 = (((x5)->u.fld[1]).rtx1);
  if (x6 == const_int_rtx[64 + (32)])
    goto L4145;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4145:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (32)])
    goto L4146;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4146:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4147;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4147:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4148;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4148:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L4149;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4149:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == LSHIFTRT)
    goto L4150;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4150:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == NEG)
    goto L4151;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4151:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == DImode
      && ((enum rtx_code) (x4)->code) == ASHIFT)
    goto L4152;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4152:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (rtx_equal_p (x5, operands[1]))
    goto L4153;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4153:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (x5 == const_int_rtx[64 + (32)])
    goto L4154;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4154:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (32)]
      && (0 && ix86_unary_operator_ok (NEG, SImode, operands)))
    {
      return 357;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6438:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L6439;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6439:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6440;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6440:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L6441;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6441:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == CTZ)
    goto L6442;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6442:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (0))
    {
      return 539;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14379:
  if (((enum rtx_code) (x3)->code) == NEG)
    goto L4130;
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L6414;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4130:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L4131;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4131:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4132;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4132:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4133;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4133:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L4134;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4134:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == NEG)
    goto L4135;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4135:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (ix86_unary_operator_ok (NEG, SImode, operands)))
    {
      return 356;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6414:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L6415;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6415:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6416;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6416:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L6417;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6417:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == CTZ)
    goto L6418;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L6418:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    {
      return 537;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14381:
  if (((enum rtx_code) (x3)->code) == NEG)
    goto L4172;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4172:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, HImode))
    {
      operands[1] = x4;
      goto L4173;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4173:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4174;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4174:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4175;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4175:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L4176;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4176:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == NEG)
    goto L4177;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4177:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (ix86_unary_operator_ok (NEG, HImode, operands)))
    {
      return 359;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L14382:
  if (((enum rtx_code) (x3)->code) == NEG)
    goto L4195;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4195:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L4196;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4196:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L4197;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4197:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L4198;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4198:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L4199;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4199:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == NEG)
    goto L4200;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L4200:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (ix86_unary_operator_ok (NEG, QImode, operands)))
    {
      return 361;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L374;
 L375:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case HImode:
      goto L14385;
    case QImode:
      goto L14386;
    default:
      break;
    }
  goto L8241;
 L14385:
  if (register_operand (x3, HImode))
    {
      operands[0] = x3;
      goto L376;
    }
  goto L8241;
 L376:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const0_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L377;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L377:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L378;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L378:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
   && ((!(x86_use_mov0 & (1 << ix86_tune)) && !(x86_partial_reg_stall & (1 << ix86_tune))) || optimize_size)))
    {
      return 56;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L14386:
  if (q_regs_operand (x3, QImode))
    {
      operands[0] = x3;
      goto L412;
    }
 L14387:
  if (nonimmediate_operand (x3, QImode))
    {
      operands[0] = x3;
      goto L1710;
    }
  goto L8241;
 L412:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const0_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L413;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14387;
 L413:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L414;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14387;
 L414:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed && (!(x86_use_mov0 & (1 << ix86_tune)) || optimize_size)))
    {
      return 62;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14387;
 L1710:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode)
    goto L14388;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L14388:
  switch (((enum rtx_code) (x2)->code))
    {
    case PLUS:
      goto L1711;
    case MINUS:
      goto L2149;
    case AND:
      goto L3076;
    case IOR:
      goto L3463;
    case XOR:
      goto L3846;
    case ASHIFTRT:
      goto L5156;
    case LSHIFTRT:
      goto L5494;
    case ROTATE:
      goto L5682;
    case ROTATERT:
      goto L5872;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L1711:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L1712;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L1712:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L1713;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L1713:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1714;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L1714:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 217;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L2149:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L2150;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L2150:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L2151;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L2151:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2152;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L2152:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 244;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L3076:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L3077;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L3077:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L3078;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L3078:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3079;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L3079:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 297;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L3463:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L3464;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L3464:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L3465;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L3465:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3466;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L3466:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 319;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L3846:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L3847;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L3847:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L3848;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L3848:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L3849;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L3849:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 341;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5156:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L5157;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5157:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L5158;
    }
 L5187:
  if (nonmemory_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L5188;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5158:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5159;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5187;
 L5159:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (ix86_binary_operator_ok (ASHIFTRT, QImode, operands)
   && (! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 440;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5187;
 L5188:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5189;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5189:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 442;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5494:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L5495;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5495:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L5496;
    }
 L5525:
  if (nonmemory_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L5526;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5496:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5497;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5525;
 L5497:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 464;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5525;
 L5526:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5527;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5527:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 466;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5682:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L5683;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5683:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L5684;
    }
 L5713:
  if (nonmemory_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L5714;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5684:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5685;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5713;
 L5685:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 477;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5713;
 L5714:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5715;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5715:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 479;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5872:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L5873;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5873:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const1_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L5874;
    }
 L5903:
  if (nonmemory_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L5904;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5874:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5875;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5903;
 L5875:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((x86_shift1 & (1 << ix86_tune)) || optimize_size)))
    {
      return 490;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L5903;
 L5904:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5905;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L5905:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((! (x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)))
    {
      return 492;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L14110:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L1407;
  goto L8241;
 L1407:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == COMPARE)
    goto L1408;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L1408:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case DImode:
      goto L14397;
    case SImode:
      goto L14400;
    case HImode:
      goto L14403;
    case QImode:
      goto L14406;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L14397:
  tem = recog_28 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L14400:
  tem = recog_29 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L14403:
  tem = recog_30 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L14406:
  tem = recog_31 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L6216:
  x2 = (((x1)->u.fld[1]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14490;
    case DImode:
      goto L14491;
    default:
      break;
    }
 L6251:
  if (((enum rtx_code) (x2)->code) == IF_THEN_ELSE)
    goto L6252;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L14490:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L6217;
    }
  goto L6251;
 L6217:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L6218;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L6251;
 L6218:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x2)->code) == LABEL_REF)
    goto L6219;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L6251;
 L6219:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[1] = x3;
  goto L6220;
 L6220:
  if ((!0))
    {
      return 512;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L6251;
 L14491:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L6225;
    }
  goto L6251;
 L6225:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L6226;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L6251;
 L6226:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x2)->code) == LABEL_REF)
    goto L6227;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L6251;
 L6227:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[1] = x3;
  goto L6228;
 L6228:
  if ((0))
    {
      return 513;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L6251;
 L6252:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == NE)
    goto L6253;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L6253:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L6254;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L6254:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (1)])
    goto L6255;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L6255:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == LABEL_REF)
    goto L6256;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L6256:
  x4 = (((x3)->u.fld[0]).rtx1);
  operands[0] = x4;
  goto L6257;
 L6257:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x3)->code) == PC)
    goto L6258;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L6258:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6259;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L6259:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L6260;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L6260:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L6261;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L6261:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L6262;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L6262:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (-1)]
      && (!0 && (x86_use_loop & (1 << ix86_tune))
   && (reload_in_progress || reload_completed
       || register_operand (operands[2], VOIDmode)))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 514;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L8241;
 L8242:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == CALL)
    goto L8243;
  goto ret0;
 L8243:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == QImode
      && ((enum rtx_code) (x3)->code) == MEM)
    goto L8244;
  goto ret0;
 L8244:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode)
    goto L14492;
  goto ret0;
 L14492:
  if (constant_call_address_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L8245;
    }
 L14493:
  if (call_insn_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L8258;
    }
  goto ret0;
 L8245:
  x3 = (((x2)->u.fld[1]).rtx1);
  operands[2] = x3;
  goto L8246;
 L8246:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L8247;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14493;
 L8247:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L8248;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14493;
 L8248:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L8249;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14493;
 L8249:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L8250;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14493;
 L8250:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L8251;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14493;
 L8251:
  if ((!0))
    {
      return 687;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14493;
 L8258:
  x3 = (((x2)->u.fld[1]).rtx1);
  operands[2] = x3;
  goto L8259;
 L8259:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L8260;
  goto ret0;
 L8260:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L8261;
  goto ret0;
 L8261:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L8262;
  goto ret0;
 L8262:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L8263;
  goto ret0;
 L8263:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L8264;
    }
  goto ret0;
 L8264:
  if ((!0))
    {
      return 688;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_33 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case REG:
      goto L14516;
    case MEM:
      goto L7384;
    default:
     break;
   }
 L14497:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L266;
    }
 L14500:
  if (memory_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L1042;
    }
 L14503:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L2392;
    }
 L14509:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L6398;
    }
  goto ret0;
 L14516:
  if ((((x2)->u.fld[0]).rtint) == 7)
    goto L6358;
  goto L14497;
 L6358:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L6359;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L6359:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 6)
    goto L6360;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L6360:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (4)])
    goto L6361;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L6361:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6362;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L6362:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 6)
    goto L6363;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L6363:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L6364;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L6364:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 6)
    goto L6365;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L6365:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6366;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L6366:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L6367;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L6367:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (!0))
    {
      return 533;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7384:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case DImode:
      goto L14517;
    case SImode:
      goto L14518;
    default:
      break;
    }
  goto L14497;
 L14517:
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L7385;
    }
  goto L14497;
 L7385:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L7386;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7386:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7387;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7387:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L7388;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7388:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7389;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7389:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7390;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7390:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == CONST_INT)
    goto L14519;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L14519:
  if ((int) ((x3)->u.hwint[0]) == ((x3)->u.hwint[0]))
    switch ((int) ((x3)->u.hwint[0]))
      {
      case 8L:
        goto L7391;
      case 4L:
        goto L7415;
      default:
        break;
      }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7391:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7392;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7392:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 630;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7415:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7416;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7416:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 632;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L14518:
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L7397;
    }
  goto L14497;
 L7397:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L7398;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7398:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7399;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7399:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L7400;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7400:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7401;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7401:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7402;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7402:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (4)])
    goto L7403;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7403:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7404;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L7404:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (!0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 631;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14497;
 L266:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L267;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14500;
 L267:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L268;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14500;
 L268:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L269;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14500;
 L269:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L270;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14500;
 L270:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L271;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14500;
 L271:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L272;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14500;
 L272:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (4)])
    goto L273;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14500;
 L273:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L274;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14500;
 L274:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L275;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14500;
 L275:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (!0))
    {
      return 39;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14500;
 L1042:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L1043;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14503;
 L1043:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L1044;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14503;
 L1044:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L1045;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14503;
 L1045:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L1046;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14503;
 L1046:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L1047;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14503;
 L1047:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L1048;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14503;
 L1048:
  if (((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))))
    {
      return 154;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14503;
 L2392:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L14521;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L14521:
  switch (((enum rtx_code) (x2)->code))
    {
    case TRUNCATE:
      goto L2393;
    case DIV:
      goto L2627;
    case UDIV:
      goto L2780;
    case FFS:
      goto L6385;
    case UNSPEC:
      goto L14527;
    case PLUS:
      goto L8008;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2393:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == LSHIFTRT)
    goto L2394;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2394:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == DImode
      && ((enum rtx_code) (x4)->code) == MULT)
    goto L2395;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2395:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x5)->mode) == DImode)
    goto L14528;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L14528:
  switch (((enum rtx_code) (x5)->code))
    {
    case ZERO_EXTEND:
      goto L2396;
    case SIGN_EXTEND:
      goto L2473;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2396:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, SImode))
    {
      operands[1] = x6;
      goto L2397;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2397:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x5)->mode) == DImode
      && ((enum rtx_code) (x5)->code) == ZERO_EXTEND)
    goto L2398;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2398:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, SImode))
    {
      operands[2] = x6;
      goto L2399;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2399:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (32)])
    goto L2400;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2400:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2401;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2401:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L2402;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2402:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2403;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2403:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
    {
      return 259;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2473:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, SImode))
    {
      operands[1] = x6;
      goto L2474;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2474:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x5)->mode) == DImode
      && ((enum rtx_code) (x5)->code) == SIGN_EXTEND)
    goto L2475;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2475:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, SImode))
    {
      operands[2] = x6;
      goto L2476;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2476:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (32)])
    goto L2477;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2477:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2478;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2478:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L2479;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2479:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2480;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2480:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM))
    {
      return 262;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2627:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14530;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L14530:
  if (register_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2628;
    }
 L14531:
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2691;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2628:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L2629;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14531;
 L2629:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2630;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14531;
 L2630:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L2631;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14531;
 L2631:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MOD)
    goto L2632;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14531;
 L2632:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2633;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14531;
 L2633:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L2634;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14531;
 L2634:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2635;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14531;
 L2635:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14532;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14531;
 L14532:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14534;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14531;
 L14534:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14536;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14531;
 L14536:
  if ((!optimize_size && !(x86_use_cltd & (1 << ix86_tune))))
    {
      return 269;
    }
 L14537:
  if ((optimize_size || (x86_use_cltd & (1 << ix86_tune))))
    {
      return 270;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14531;
 L2691:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2692;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2692:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2693;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2693:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L2694;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2694:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MOD)
    goto L2695;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2695:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2696;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2696:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2697;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2697:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L2698;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2698:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[4] = x2;
      goto L2699;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2699:
  if (pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 271;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2780:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2781;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2781:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2782;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2782:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2783;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2783:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L2784;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2784:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == UMOD)
    goto L2785;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2785:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2786;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2786:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2787;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2787:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  switch (((enum rtx_code) (x1)->code))
    {
    case CLOBBER:
      goto L2788;
    case USE:
      goto L2827;
    default:
     break;
   }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2788:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 275;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L2827:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[3])
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 276;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L6385:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L6386;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L6386:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6387;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L6387:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L6388;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L6388:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6389;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L6389:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))))
    {
      return 535;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L14527:
  if ((((((x2)->u.fld[0]).rtvec1))->num_elem) == 4
      && (((x2)->u.fld[1]).rtint) == 20)
    goto L7679;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L7679:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x3)->mode) == BLKmode
      && ((enum rtx_code) (x3)->code) == MEM)
    goto L7680;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L7680:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[5] = x4;
      goto L7681;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L7681:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L7682;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L7682:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[2]);
  if (immediate_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L7683;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L7683:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[3]);
  if (register_operand (x3, SImode))
    {
      operands[4] = x3;
      goto L7684;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L7684:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7685;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L7685:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19)
    goto L7686;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L7686:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7687;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L7687:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L7688;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L7688:
  if ((!0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 646;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L8008:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L8009;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L8009:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L8010;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L8010:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8011;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L8011:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L8012;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L8012:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8013;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L8013:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L8014;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L8014:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (!0))
    {
      return 670;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14509;
 L6398:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == FFS)
    goto L6399;
  goto ret0;
 L6399:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L6400;
    }
  goto ret0;
 L6400:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6401;
  goto ret0;
 L6401:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L6402;
    }
  goto ret0;
 L6402:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6403;
  goto ret0;
 L6403:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 536;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_34 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case TRUNCATE:
      goto L2368;
    case ZERO_EXTEND:
      goto L2418;
    case DIV:
      goto L2550;
    case UDIV:
      goto L2728;
    case ASHIFT:
      goto L4626;
    case ASHIFTRT:
      goto L4888;
    case LSHIFTRT:
      goto L5281;
    case FFS:
      goto L6423;
    case UNSPEC:
      goto L14550;
    case PLUS:
      goto L8019;
    default:
     break;
   }
  goto ret0;
 L2368:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == TImode
      && ((enum rtx_code) (x3)->code) == LSHIFTRT)
    goto L2369;
  goto ret0;
 L2369:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == TImode
      && ((enum rtx_code) (x4)->code) == MULT)
    goto L2370;
  goto ret0;
 L2370:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x5)->mode) == TImode)
    goto L14551;
  goto ret0;
 L14551:
  switch (((enum rtx_code) (x5)->code))
    {
    case ZERO_EXTEND:
      goto L2371;
    case SIGN_EXTEND:
      goto L2448;
    default:
     break;
   }
  goto ret0;
 L2371:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, DImode))
    {
      operands[1] = x6;
      goto L2372;
    }
  goto ret0;
 L2372:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x5)->mode) == TImode
      && ((enum rtx_code) (x5)->code) == ZERO_EXTEND)
    goto L2373;
  goto ret0;
 L2373:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, DImode))
    {
      operands[2] = x6;
      goto L2374;
    }
  goto ret0;
 L2374:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (64)])
    goto L2375;
  goto ret0;
 L2375:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2376;
  goto ret0;
 L2376:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DImode))
    {
      operands[3] = x2;
      goto L2377;
    }
  goto ret0;
 L2377:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2378;
  goto ret0;
 L2378:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 258;
    }
  goto ret0;
 L2448:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, DImode))
    {
      operands[1] = x6;
      goto L2449;
    }
  goto ret0;
 L2449:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x5)->mode) == TImode
      && ((enum rtx_code) (x5)->code) == SIGN_EXTEND)
    goto L2450;
  goto ret0;
 L2450:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x6, DImode))
    {
      operands[2] = x6;
      goto L2451;
    }
  goto ret0;
 L2451:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (64)])
    goto L2452;
  goto ret0;
 L2452:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2453;
  goto ret0;
 L2453:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DImode))
    {
      operands[3] = x2;
      goto L2454;
    }
  goto ret0;
 L2454:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2455;
  goto ret0;
 L2455:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 261;
    }
  goto ret0;
 L2418:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == TRUNCATE)
    goto L2419;
  goto ret0;
 L2419:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == DImode
      && ((enum rtx_code) (x4)->code) == LSHIFTRT)
    goto L2420;
  goto ret0;
 L2420:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x5)->mode) == DImode
      && ((enum rtx_code) (x5)->code) == MULT)
    goto L2421;
  goto ret0;
 L2421:
  x6 = (((x5)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x6)->mode) == DImode)
    goto L14553;
  goto ret0;
 L14553:
  switch (((enum rtx_code) (x6)->code))
    {
    case ZERO_EXTEND:
      goto L2422;
    case SIGN_EXTEND:
      goto L2499;
    default:
     break;
   }
  goto ret0;
 L2422:
  x7 = (((x6)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x7, SImode))
    {
      operands[1] = x7;
      goto L2423;
    }
  goto ret0;
 L2423:
  x6 = (((x5)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x6)->mode) == DImode
      && ((enum rtx_code) (x6)->code) == ZERO_EXTEND)
    goto L2424;
  goto ret0;
 L2424:
  x7 = (((x6)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x7, SImode))
    {
      operands[2] = x7;
      goto L2425;
    }
  goto ret0;
 L2425:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (x5 == const_int_rtx[64 + (32)])
    goto L2426;
  goto ret0;
 L2426:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2427;
  goto ret0;
 L2427:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L2428;
    }
  goto ret0;
 L2428:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2429;
  goto ret0;
 L2429:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 260;
    }
  goto ret0;
 L2499:
  x7 = (((x6)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x7, SImode))
    {
      operands[1] = x7;
      goto L2500;
    }
  goto ret0;
 L2500:
  x6 = (((x5)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x6)->mode) == DImode
      && ((enum rtx_code) (x6)->code) == SIGN_EXTEND)
    goto L2501;
  goto ret0;
 L2501:
  x7 = (((x6)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x7, SImode))
    {
      operands[2] = x7;
      goto L2502;
    }
  goto ret0;
 L2502:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (x5 == const_int_rtx[64 + (32)])
    goto L2503;
  goto ret0;
 L2503:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2504;
  goto ret0;
 L2504:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L2505;
    }
  goto ret0;
 L2505:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2506;
  goto ret0;
 L2506:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0
   && (((enum rtx_code) (operands[1])->code) != MEM || ((enum rtx_code) (operands[2])->code) != MEM)))
    {
      return 263;
    }
  goto ret0;
 L2550:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode)
    goto L14555;
  goto ret0;
 L14555:
  if (register_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L2551;
    }
 L14556:
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L2614;
    }
  goto ret0;
 L2551:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L2552;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14556;
 L2552:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2553;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14556;
 L2553:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L2554;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14556;
 L2554:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == MOD)
    goto L2555;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14556;
 L2555:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2556;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14556;
 L2556:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L2557;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14556;
 L2557:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2558;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14556;
 L2558:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14557;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14556;
 L14557:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14559;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14556;
 L14559:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14561;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14556;
 L14561:
  if ((0 && !optimize_size && !(x86_use_cltd & (1 << ix86_tune))))
    {
      return 266;
    }
 L14562:
  if ((0 && (optimize_size || (x86_use_cltd & (1 << ix86_tune)))))
    {
      return 267;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14556;
 L2614:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L2615;
    }
  goto ret0;
 L2615:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2616;
  goto ret0;
 L2616:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[3] = x2;
      goto L2617;
    }
  goto ret0;
 L2617:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == MOD)
    goto L2618;
  goto ret0;
 L2618:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2619;
  goto ret0;
 L2619:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2620;
  goto ret0;
 L2620:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L2621;
  goto ret0;
 L2621:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[4] = x2;
      goto L2622;
    }
  goto ret0;
 L2622:
  if ((0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 268;
    }
  goto ret0;
 L2728:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L2729;
    }
  goto ret0;
 L2729:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L2730;
    }
  goto ret0;
 L2730:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2731;
  goto ret0;
 L2731:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[3] = x2;
      goto L2732;
    }
  goto ret0;
 L2732:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == UMOD)
    goto L2733;
  goto ret0;
 L2733:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2734;
  goto ret0;
 L2734:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2735;
  goto ret0;
 L2735:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  switch (((enum rtx_code) (x1)->code))
    {
    case CLOBBER:
      goto L2736;
    case USE:
      goto L2775;
    default:
     break;
   }
  goto ret0;
 L2736:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0))
    {
      return 273;
    }
  goto ret0;
 L2775:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[3])
      && (0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 274;
    }
  goto ret0;
 L4626:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L4627;
    }
  goto ret0;
 L4627:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4628;
    }
  goto ret0;
 L4628:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4629;
  goto ret0;
 L4629:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L4630;
    }
  goto ret0;
 L4630:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4631;
  goto ret0;
 L4631:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))))
    {
      return 404;
    }
  goto ret0;
 L4888:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L4889;
    }
  goto ret0;
 L4889:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L4890;
    }
  goto ret0;
 L4890:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4891;
  goto ret0;
 L4891:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L4892;
    }
  goto ret0;
 L4892:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4893;
  goto ret0;
 L4893:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))))
    {
      return 422;
    }
  goto ret0;
 L5281:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L5282;
    }
  goto ret0;
 L5282:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L5283;
    }
  goto ret0;
 L5283:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5284;
  goto ret0;
 L5284:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L5285;
    }
  goto ret0;
 L5285:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5286;
  goto ret0;
 L5286:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))))
    {
      return 449;
    }
  goto ret0;
 L6423:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L6424;
    }
  goto ret0;
 L6424:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6425;
  goto ret0;
 L6425:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L6426;
    }
  goto ret0;
 L6426:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6427;
  goto ret0;
 L6427:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))))
    {
      return 538;
    }
  goto ret0;
 L14550:
  if ((((((x2)->u.fld[0]).rtvec1))->num_elem) == 4
      && (((x2)->u.fld[1]).rtint) == 20)
    goto L7708;
  goto ret0;
 L7708:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x3)->mode) == BLKmode
      && ((enum rtx_code) (x3)->code) == MEM)
    goto L7709;
  goto ret0;
 L7709:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DImode))
    {
      operands[5] = x4;
      goto L7710;
    }
  goto ret0;
 L7710:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L7711;
    }
  goto ret0;
 L7711:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[2]);
  if (immediate_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L7712;
    }
  goto ret0;
 L7712:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[3]);
  if (register_operand (x3, DImode))
    {
      operands[4] = x3;
      goto L7713;
    }
  goto ret0;
 L7713:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7714;
  goto ret0;
 L7714:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19)
    goto L7715;
  goto ret0;
 L7715:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7716;
  goto ret0;
 L7716:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L7717;
    }
  goto ret0;
 L7717:
  if ((0)
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 647;
    }
  goto ret0;
 L8019:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L8020;
    }
  goto ret0;
 L8020:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_immediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L8021;
    }
  goto ret0;
 L8021:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8022;
  goto ret0;
 L8022:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L8023;
  goto ret0;
 L8023:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8024;
  goto ret0;
 L8024:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L8025;
  goto ret0;
 L8025:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (0))
    {
      return 671;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_35 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14507;
    case DImode:
      goto L14508;
    case HImode:
      goto L14512;
    case SFmode:
      goto L14505;
    case DFmode:
      goto L14506;
    case XFmode:
      goto L14510;
    case QImode:
      goto L14513;
    default:
      break;
    }
 L5956:
  if (((enum rtx_code) (x2)->code) == PC)
    goto L5957;
  goto ret0;
 L14507:
  tem = recog_33 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L5956;
 L14508:
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L6371;
 L14498:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L514;
    }
 L14499:
  if (memory_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L998;
    }
 L14502:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L2367;
    }
  goto L5956;
 L6371:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L6372;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14498;
 L6372:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 6)
    goto L6373;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14498;
 L6373:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L6374;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14498;
 L6374:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6375;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14498;
 L6375:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 6)
    goto L6376;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14498;
 L6376:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L6377;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14498;
 L6377:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 6)
    goto L6378;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14498;
 L6378:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6379;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14498;
 L6379:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L6380;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14498;
 L6380:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (0))
    {
      return 534;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14498;
 L514:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L14538;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L14538:
  switch (((enum rtx_code) (x2)->code))
    {
    case MEM:
      goto L515;
    case SIGN_EXTEND:
      goto L775;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L515:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L516;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L516:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L517;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L517:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L518;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L518:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L519;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L519:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L520;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L520:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L521;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L521:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L522;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L522:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L523;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L523:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (0))
    {
      return 78;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L775:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L776;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L776:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L777;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L777:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L778;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L778:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L779;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L779:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L780;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L780:
  if ((!0))
    {
      return 117;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14499;
 L998:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L999;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14502;
 L999:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L1000;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14502;
 L1000:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L1001;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14502;
 L1001:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L1002;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14502;
 L1002:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L1003;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14502;
 L1003:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L1004;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14502;
 L1004:
  if (((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && (!((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode)) || !0))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 149;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14502;
 L2367:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L14540;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L14540:
  tem = recog_34 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L14512:
  if (((enum rtx_code) (x2)->code) == MEM)
    goto L7420;
 L14501:
  if (memory_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L1086;
    }
 L14504:
  if (register_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L2703;
    }
  goto L5956;
 L7420:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case SImode:
      goto L14563;
    case DImode:
      goto L14564;
    default:
      break;
    }
  goto L14501;
 L14563:
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L7421;
    }
  goto L14501;
 L7421:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L7422;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7422:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7423;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7423:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L7424;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7424:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7425;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7425:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7426;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7426:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (2)])
    goto L7427;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7427:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7428;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7428:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (!0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 633;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L14564:
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L7433;
    }
  goto L14501;
 L7433:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L7434;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7434:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7435;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7435:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L7436;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7436:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7437;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7437:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7438;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7438:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (2)])
    goto L7439;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7439:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7440;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L7440:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 634;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14501;
 L1086:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L1087;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14504;
 L1087:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L1088;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14504;
 L1088:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L1089;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14504;
 L1089:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L1090;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14504;
 L1090:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L1091;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14504;
 L1091:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L1092;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14504;
 L1092:
  if (((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))))
    {
      return 159;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14504;
 L2703:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode)
    goto L14565;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L14565:
  switch (((enum rtx_code) (x2)->code))
    {
    case DIV:
      goto L2704;
    case UDIV:
      goto L2847;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2704:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L2705;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2705:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L2706;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2706:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2707;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2707:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L2708;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2708:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == MOD)
    goto L2709;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2709:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2710;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2710:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2711;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2711:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2712;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2712:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((x86_himode_math & (1 << ix86_tune))))
    {
      return 272;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2847:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L2848;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2848:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L2849;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2849:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2850;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2850:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L2851;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2851:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == UMOD)
    goto L2852;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2852:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2853;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2853:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2854;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2854:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L2855;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2855:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, HImode))
    {
      operands[4] = x2;
      goto L2856;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L2856:
  if (pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 277;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L14505:
  if (nonimmediate_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L4216;
    }
 L14514:
  if (register_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L8042;
    }
  goto L5956;
 L4216:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L14567;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14514;
 L14567:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L4217;
    case ABS:
      goto L4373;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14514;
 L4217:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L4218;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14514;
 L4218:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L4219;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14514;
 L4219:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L4220;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14514;
 L4220:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4221;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14514;
 L4221:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00004000) != 0)
   && (reload_in_progress || reload_completed
       || (register_operand (operands[0], VOIDmode)
    && register_operand (operands[1], VOIDmode)))))
    {
      return 363;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14514;
 L4373:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L4374;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14514;
 L4374:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L4375;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14514;
 L4375:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L4376;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14514;
 L4376:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4377;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14514;
 L4377:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00004000) != 0)
   && (reload_in_progress || reload_completed
       || (register_operand (operands[0], VOIDmode)
     && register_operand (operands[1], VOIDmode)))))
    {
      return 378;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14514;
 L8042:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode
      && ((enum rtx_code) (x2)->code) == IF_THEN_ELSE)
    goto L8043;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8043:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (sse_comparison_operator (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L8044;
    }
 L8065:
  if (((enum rtx_code) (x3)->code) == EQ)
    goto L8066;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8044:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[4] = x4;
      goto L8045;
    }
  goto L8065;
 L8045:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[5] = x4;
      goto L8046;
    }
  goto L8065;
 L8046:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L8047;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L8065;
 L8047:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[3] = x3;
      goto L8048;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L8065;
 L8048:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8049;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L8065;
 L8049:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SFmode))
    {
      operands[6] = x2;
      goto L8050;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L8065;
 L8050:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8051;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L8065;
 L8051:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM)
   && ((((enum rtx_code) (operands[1])->code) != LT && ((enum rtx_code) (operands[1])->code) != GT
 && ((enum rtx_code) (operands[1])->code) != UNLE && ((enum rtx_code) (operands[1])->code) != UNGE)
       || !rtx_equal_p (operands[4], operands[2])
       || !rtx_equal_p (operands[5], operands[3]))
   && (!(target_flags & 0x00000010)
       || (((enum rtx_code) (operands[1])->code) != EQ && ((enum rtx_code) (operands[1])->code) != NE))))
    {
      return 673;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L8065;
 L8066:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[3] = x4;
      goto L8067;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8067:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[4] = x4;
      goto L8068;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8068:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L8069;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8069:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L8070;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8070:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8071;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8071:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SFmode))
    {
      operands[5] = x2;
      goto L8072;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8072:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8073;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8073:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM)))
    {
      return 674;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L14506:
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L4257;
    }
 L14515:
  if (register_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L8086;
    }
  goto L5956;
 L4257:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L14569;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L14569:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L4258;
    case ABS:
      goto L4414;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L4258:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L4259;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L4259:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L4260;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L4260:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L4261;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L4261:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4262;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L4262:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14571;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L14571:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14573;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L14573:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14575;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L14575:
  if ((!0 && ((target_flags & 0x00008000) != 0)
   && (reload_in_progress || reload_completed
       || (register_operand (operands[0], VOIDmode)
    && register_operand (operands[1], VOIDmode)))))
    {
      return 366;
    }
 L14576:
  if ((0 && ((target_flags & 0x00008000) != 0)
   && (reload_in_progress || reload_completed
       || (register_operand (operands[0], VOIDmode)
    && register_operand (operands[1], VOIDmode)))))
    {
      return 367;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L4414:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L4415;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L4415:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L4416;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L4416:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L4417;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L4417:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L4418;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L4418:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14577;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L14577:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14579;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L14579:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14581;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L14581:
  if ((!0 && ((target_flags & 0x00008000) != 0)
   && (reload_in_progress || reload_completed
       || (register_operand (operands[0], VOIDmode)
    && register_operand (operands[1], VOIDmode)))))
    {
      return 381;
    }
 L14582:
  if ((0 && ((target_flags & 0x00008000) != 0)
   && (reload_in_progress || reload_completed
       || (register_operand (operands[0], VOIDmode)
    && register_operand (operands[1], VOIDmode)))))
    {
      return 382;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14515;
 L8086:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == IF_THEN_ELSE)
    goto L8087;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8087:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (sse_comparison_operator (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L8088;
    }
 L8109:
  if (((enum rtx_code) (x3)->code) == EQ)
    goto L8110;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8088:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[4] = x4;
      goto L8089;
    }
  goto L8109;
 L8089:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[5] = x4;
      goto L8090;
    }
  goto L8109;
 L8090:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L8091;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L8109;
 L8091:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[3] = x3;
      goto L8092;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L8109;
 L8092:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8093;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L8109;
 L8093:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DFmode))
    {
      operands[6] = x2;
      goto L8094;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L8109;
 L8094:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8095;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L8109;
 L8095:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00008000) != 0)
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM)
   && ((((enum rtx_code) (operands[1])->code) != LT && ((enum rtx_code) (operands[1])->code) != GT
 && ((enum rtx_code) (operands[1])->code) != UNLE && ((enum rtx_code) (operands[1])->code) != UNGE)
       || !rtx_equal_p (operands[4], operands[2])
       || !rtx_equal_p (operands[5], operands[3]))
   && (!(target_flags & 0x00000010)
       || (((enum rtx_code) (operands[1])->code) != EQ && ((enum rtx_code) (operands[1])->code) != NE))))
    {
      return 675;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L8109;
 L8110:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[3] = x4;
      goto L8111;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8111:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[4] = x4;
      goto L8112;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8112:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L8113;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8113:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L8114;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8114:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8115;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8115:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DFmode))
    {
      operands[5] = x2;
      goto L8116;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8116:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8117;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L8117:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((target_flags & 0x00004000) != 0)
   && (((enum rtx_code) (operands[2])->code) != MEM || ((enum rtx_code) (operands[3])->code) != MEM)))
    {
      return 676;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L14510:
  if (register_operand (x2, XFmode))
    {
      operands[0] = x2;
      goto L6886;
    }
  goto L5956;
 L6886:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode)
    goto L14583;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L14583:
  if (((enum rtx_code) (x2)->code) == UNSPEC)
    goto L14585;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L14585:
  if ((((((x2)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L14587;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L14587:
  switch ((((x2)->u.fld[1]).rtint))
    {
    case 88L:
      goto L6887;
    case 90L:
      goto L6902;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6887:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, XFmode))
    {
      operands[2] = x3;
      goto L6888;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6888:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x3, XFmode))
    {
      operands[3] = x3;
      goto L6889;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6889:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6890;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6890:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L6891;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6891:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x2)->u.fld[1]).rtint) == 89)
    goto L6892;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6892:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2]))
    goto L6893;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6893:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (rtx_equal_p (x3, operands[3]))
    goto L6894;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6894:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6895;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6895:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18)
    goto L6896;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6896:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 45)
    goto L6897;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6897:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)]
      && (! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 591;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6902:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, XFmode))
    {
      operands[2] = x3;
      goto L6903;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6903:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x3, XFmode))
    {
      operands[3] = x3;
      goto L6904;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6904:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6905;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6905:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L6906;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6906:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x2)->u.fld[1]).rtint) == 91)
    goto L6907;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6907:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2]))
    goto L6908;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6908:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (rtx_equal_p (x3, operands[3]))
    goto L6909;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6909:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6910;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6910:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18)
    goto L6911;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6911:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 45)
    goto L6912;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L6912:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (x3 == const_int_rtx[64 + (0)]
      && (! (target_flags & 0x00000040) && (target_flags & 0x00000001)
   && flag_unsafe_math_optimizations))
    {
      return 592;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L14513:
  if (((enum rtx_code) (x2)->code) == MEM)
    goto L7444;
  goto L5956;
 L7444:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case SImode:
      goto L14589;
    case DImode:
      goto L14590;
    default:
      break;
    }
  goto L5956;
 L14589:
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L7445;
    }
  goto L5956;
 L7445:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L7446;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7446:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7447;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7447:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L7448;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7448:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7449;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7449:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7450;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7450:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (1)])
    goto L7451;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7451:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7452;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7452:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (!0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 635;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L14590:
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L7457;
    }
  goto L5956;
 L7457:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L7458;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7458:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7459;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7459:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L7460;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7460:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7461;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7461:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L7462;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7462:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (1)])
    goto L7463;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7463:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7464;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L7464:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 636;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L5956;
 L5957:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == IF_THEN_ELSE)
    goto L5958;
  goto ret0;
 L5958:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (comparison_operator (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L5959;
    }
  goto ret0;
 L5959:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L5960;
    }
  goto ret0;
 L5960:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (register_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L5961;
    }
 L5983:
  if (nonimmediate_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L5984;
    }
  goto ret0;
 L5961:
  x3 = (((x2)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case LABEL_REF:
      goto L5962;
    case PC:
      goto L6031;
    default:
     break;
   }
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5983;
 L5962:
  x4 = (((x3)->u.fld[0]).rtx1);
  operands[3] = x4;
  goto L5963;
 L5963:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x3)->code) == PC)
    goto L5964;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5983;
 L5964:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5965;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5983;
 L5965:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18)
    goto L5966;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5983;
 L5966:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5967;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5983;
 L5967:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && (target_flags & 0x00000001)
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))
   && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code))))
    {
      return 499;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5983;
 L6031:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x3)->code) == LABEL_REF)
    goto L6032;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5983;
 L6032:
  x4 = (((x3)->u.fld[0]).rtx1);
  operands[3] = x4;
  goto L6033;
 L6033:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6034;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5983;
 L6034:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18)
    goto L6035;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5983;
 L6035:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6036;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5983;
 L6036:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && (target_flags & 0x00000001)
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))
   && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code))))
    {
      return 502;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L5983;
 L5984:
  x3 = (((x2)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case LABEL_REF:
      goto L5985;
    case PC:
      goto L6055;
    default:
     break;
   }
  goto ret0;
 L5985:
  x4 = (((x3)->u.fld[0]).rtx1);
  operands[3] = x4;
  goto L5986;
 L5986:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x3)->code) == PC)
    goto L5987;
  goto ret0;
 L5987:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5988;
  goto ret0;
 L5988:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18)
    goto L5989;
  goto ret0;
 L5989:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L5990;
  goto ret0;
 L5990:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode)
    goto L14591;
  goto ret0;
 L14591:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14593;
  goto ret0;
 L14593:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14595;
  goto ret0;
 L14595:
  if (((target_flags & 0x00000001)
   && ((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code))))
    {
      return 500;
    }
 L14596:
  if ((((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code))))
    {
      return 501;
    }
  goto ret0;
 L6055:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x3)->code) == LABEL_REF)
    goto L6056;
  goto ret0;
 L6056:
  x4 = (((x3)->u.fld[0]).rtx1);
  operands[3] = x4;
  goto L6057;
 L6057:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6058;
  goto ret0;
 L6058:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18)
    goto L6059;
  goto ret0;
 L6059:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6060;
  goto ret0;
 L6060:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode)
    goto L14597;
  goto ret0;
 L14597:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14599;
  goto ret0;
 L14599:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14601;
  goto ret0;
 L14601:
  if (((target_flags & 0x00000001)
   && ((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code))))
    {
      return 503;
    }
 L14602:
  if ((((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code))))
    {
      return 504;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_36 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x2)->code) == MEM)
    goto L7149;
 L14607:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L1030;
    }
 L14610:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L2674;
    }
  goto ret0;
 L7149:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case SImode:
      goto L14622;
    case DImode:
      goto L14623;
    default:
      break;
    }
  goto L14607;
 L14622:
  if (register_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L7150;
    }
  goto L14607;
 L7150:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7151;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7151:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L7152;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7152:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7153;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7153:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L7154;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7154:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7155;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7155:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7156;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7156:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (4)])
    goto L7157;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7157:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7158;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7158:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L7159;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7159:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7160;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7160:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7161;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7161:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (4)])
    goto L7162;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7162:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7163;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7163:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (!0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 619;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L14623:
  if (register_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L7168;
    }
  goto L14607;
 L7168:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7169;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7169:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L7170;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7170:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7171;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7171:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L7172;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7172:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7173;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7173:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7174;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7174:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (4)])
    goto L7175;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7175:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7176;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7176:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L7177;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7177:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7178;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7178:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7179;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7179:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (4)])
    goto L7180;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7180:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7181;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L7181:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 620;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14607;
 L1030:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L1031;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14610;
 L1031:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L1032;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14610;
 L1032:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L1033;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14610;
 L1033:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L1034;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14610;
 L1034:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L1035;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14610;
 L1035:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L1036;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14610;
 L1036:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1037;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14610;
 L1037:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, SImode))
    {
      operands[4] = x2;
      goto L1038;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14610;
 L1038:
  if (((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))))
    {
      return 153;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14610;
 L2674:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L14624;
  goto ret0;
 L14624:
  switch (((enum rtx_code) (x2)->code))
    {
    case DIV:
      goto L2675;
    case UDIV:
      goto L2804;
    case UNSPEC:
      goto L14630;
    case PLUS:
      goto L6598;
    default:
     break;
   }
  goto ret0;
 L2675:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2676;
    }
  goto ret0;
 L2676:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2677;
    }
  goto ret0;
 L2677:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2678;
  goto ret0;
 L2678:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L2679;
    }
  goto ret0;
 L2679:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MOD)
    goto L2680;
  goto ret0;
 L2680:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2681;
  goto ret0;
 L2681:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2682;
  goto ret0;
 L2682:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L2683;
  goto ret0;
 L2683:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[4] = x2;
      goto L2684;
    }
  goto ret0;
 L2684:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2685;
  goto ret0;
 L2685:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 271;
    }
  goto ret0;
 L2804:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L2805;
    }
  goto ret0;
 L2805:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L2806;
    }
  goto ret0;
 L2806:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2807;
  goto ret0;
 L2807:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L2808;
    }
  goto ret0;
 L2808:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == UMOD)
    goto L2809;
  goto ret0;
 L2809:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2810;
  goto ret0;
 L2810:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2811;
  goto ret0;
 L2811:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L2812;
  goto ret0;
 L2812:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[3]))
    goto L2813;
  goto ret0;
 L2813:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2814;
  goto ret0;
 L2814:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 276;
    }
  goto ret0;
 L14630:
  switch ((((((x2)->u.fld[0]).rtvec1))->num_elem))
    {
    case 3:
      goto L14633;
    case 2:
      goto L14634;
    case 4:
      goto L14635;
    default:
      break;
    }
  goto ret0;
 L14633:
  if ((((x2)->u.fld[1]).rtint) == 16)
    goto L6503;
  goto ret0;
 L6503:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L6504;
    }
  goto ret0;
 L6504:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (tls_symbolic_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L6505;
    }
  goto ret0;
 L6505:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[2]);
  if (call_insn_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L6506;
    }
  goto ret0;
 L6506:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6507;
  goto ret0;
 L6507:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[4] = x2;
      goto L6508;
    }
  goto ret0;
 L6508:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6509;
  goto ret0;
 L6509:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[5] = x2;
      goto L6510;
    }
  goto ret0;
 L6510:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6511;
  goto ret0;
 L6511:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14636;
  goto ret0;
 L14636:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14638;
  goto ret0;
 L14638:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14640;
  goto ret0;
 L14640:
  if ((!0 && (ix86_tls_dialect == TLS_DIALECT_GNU)))
    {
      return 544;
    }
 L14641:
  if ((!0 && (ix86_tls_dialect == TLS_DIALECT_SUN)))
    {
      return 545;
    }
  goto ret0;
 L14634:
  if ((((x2)->u.fld[1]).rtint) == 17)
    goto L6553;
  goto ret0;
 L6553:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L6554;
    }
  goto ret0;
 L6554:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (call_insn_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L6555;
    }
  goto ret0;
 L6555:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6556;
  goto ret0;
 L6556:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L6557;
    }
  goto ret0;
 L6557:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6558;
  goto ret0;
 L6558:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[4] = x2;
      goto L6559;
    }
  goto ret0;
 L6559:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6560;
  goto ret0;
 L6560:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14642;
  goto ret0;
 L14642:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14644;
  goto ret0;
 L14644:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14646;
  goto ret0;
 L14646:
  if ((!0 && (ix86_tls_dialect == TLS_DIALECT_GNU)))
    {
      return 547;
    }
 L14647:
  if ((!0 && (ix86_tls_dialect == TLS_DIALECT_SUN)))
    {
      return 548;
    }
  goto ret0;
 L14635:
  if ((((x2)->u.fld[1]).rtint) == 20)
    goto L7664;
  goto ret0;
 L7664:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x3)->mode) == BLKmode
      && ((enum rtx_code) (x3)->code) == MEM)
    goto L7665;
  goto ret0;
 L7665:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[5] = x4;
      goto L7666;
    }
  goto ret0;
 L7666:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L7667;
    }
  goto ret0;
 L7667:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[2]);
  if (immediate_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L7668;
    }
  goto ret0;
 L7668:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[3]);
  if (register_operand (x3, SImode))
    {
      operands[4] = x3;
      goto L7669;
    }
  goto ret0;
 L7669:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7670;
  goto ret0;
 L7670:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19)
    goto L7671;
  goto ret0;
 L7671:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7672;
  goto ret0;
 L7672:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L7673;
    }
  goto ret0;
 L7673:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7674;
  goto ret0;
 L7674:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0))
    {
      return 646;
    }
  goto ret0;
 L6598:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == UNSPEC
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x3)->u.fld[1]).rtint) == 17)
    goto L6599;
  goto ret0;
 L6599:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L6600;
    }
  goto ret0;
 L6600:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (call_insn_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L6601;
    }
  goto ret0;
 L6601:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == CONST)
    goto L6602;
  goto ret0;
 L6602:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode
      && ((enum rtx_code) (x4)->code) == UNSPEC
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x4)->u.fld[1]).rtint) == 6)
    goto L6603;
  goto ret0;
 L6603:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (tls_symbolic_operand (x5, SImode))
    {
      operands[3] = x5;
      goto L6604;
    }
  goto ret0;
 L6604:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6605;
  goto ret0;
 L6605:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[4] = x2;
      goto L6606;
    }
  goto ret0;
 L6606:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6607;
  goto ret0;
 L6607:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[5] = x2;
      goto L6608;
    }
  goto ret0;
 L6608:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6609;
  goto ret0;
 L6609:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 550;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_37 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case DImode:
      goto L14612;
    case SImode:
      goto L14613;
    case HImode:
      goto L14614;
    case QImode:
      goto L14615;
    case BLKmode:
      goto L14616;
    default:
      break;
    }
 L6097:
  if (((enum rtx_code) (x2)->code) == PC)
    goto L6098;
  goto ret0;
 L14612:
  if (((enum rtx_code) (x2)->code) == MEM)
    goto L7131;
 L14605:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L974;
    }
 L14606:
  if (memory_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L986;
    }
 L14609:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L2597;
    }
  goto L6097;
 L7131:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L7132;
    }
  goto L14605;
 L7132:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7133;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7133:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L7134;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7134:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7135;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7135:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L7136;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7136:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7137;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7137:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7138;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7138:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L7139;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7139:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7140;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7140:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L7141;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7141:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7142;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7142:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7143;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7143:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (8)])
    goto L7144;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7144:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7145;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L7145:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 618;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14605;
 L974:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L975;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14606;
 L975:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L976;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14606;
 L976:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L977;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14606;
 L977:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L978;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14606;
 L978:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L979;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14606;
 L979:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L980;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14606;
 L980:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L981;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14606;
 L981:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, DImode))
    {
      operands[4] = x2;
      goto L982;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14606;
 L982:
  if (((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && (!((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode)) || !0))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 1;
      return 148;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14606;
 L986:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L987;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14609;
 L987:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L988;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14609;
 L988:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L989;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14609;
 L989:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L990;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14609;
 L990:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L991;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14609;
 L991:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L992;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14609;
 L992:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L993;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14609;
 L993:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DFmode))
    {
      operands[4] = x2;
      goto L994;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14609;
 L994:
  if (((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && (!((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode)) || !0)))
    {
      return 149;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14609;
 L2597:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L14617;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L14617:
  switch (((enum rtx_code) (x2)->code))
    {
    case DIV:
      goto L2598;
    case UDIV:
      goto L2752;
    case UNSPEC:
      goto L14621;
    case PLUS:
      goto L8030;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2598:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L2599;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2599:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L2600;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2600:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2601;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2601:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[3] = x2;
      goto L2602;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2602:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == MOD)
    goto L2603;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2603:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2604;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2604:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2605;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2605:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L2606;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2606:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[4] = x2;
      goto L2607;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2607:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2608;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2608:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0))
    {
      return 268;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2752:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L2753;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2753:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L2754;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2754:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2755;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2755:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[3] = x2;
      goto L2756;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2756:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == UMOD)
    goto L2757;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2757:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2758;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2758:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2759;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2759:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L2760;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2760:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[3]))
    goto L2761;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2761:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2762;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2762:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0))
    {
      return 274;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L14621:
  if ((((((x2)->u.fld[0]).rtvec1))->num_elem) == 4
      && (((x2)->u.fld[1]).rtint) == 20)
    goto L7693;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7693:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x3)->mode) == BLKmode
      && ((enum rtx_code) (x3)->code) == MEM)
    goto L7694;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7694:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DImode))
    {
      operands[5] = x4;
      goto L7695;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7695:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L7696;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7696:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[2]);
  if (immediate_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L7697;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7697:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[3]);
  if (register_operand (x3, DImode))
    {
      operands[4] = x3;
      goto L7698;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7698:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7699;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7699:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19)
    goto L7700;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7700:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7701;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7701:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L7702;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7702:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7703;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7703:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0))
    {
      return 647;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L8030:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L8031;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L8031:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L8032;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L8032:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L8033;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L8033:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L8034;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L8034:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8035;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L8035:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L8036;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L8036:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8037;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L8037:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L8038;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L8038:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (0))
    {
      return 672;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L14613:
  tem = recog_36 (x0, insn, pnum_clobbers);
  if (tem >= 0)
    return tem;
  goto L6097;
 L14614:
  if (((enum rtx_code) (x2)->code) == MEM)
    goto L7185;
 L14608:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L1074;
    }
 L14611:
  if (register_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L2831;
    }
  goto L6097;
 L7185:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case SImode:
      goto L14648;
    case DImode:
      goto L14649;
    default:
      break;
    }
  goto L14608;
 L14648:
  if (register_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L7186;
    }
  goto L14608;
 L7186:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7187;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7187:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L7188;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7188:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7189;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7189:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L7190;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7190:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7191;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7191:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7192;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7192:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (2)])
    goto L7193;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7193:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7194;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7194:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L7195;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7195:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7196;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7196:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7197;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7197:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (2)])
    goto L7198;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7198:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7199;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7199:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (!0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 621;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L14649:
  if (register_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L7204;
    }
  goto L14608;
 L7204:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7205;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7205:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L7206;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7206:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7207;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7207:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L7208;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7208:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7209;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7209:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7210;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7210:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (2)])
    goto L7211;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7211:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7212;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7212:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L7213;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7213:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7214;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7214:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7215;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7215:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (2)])
    goto L7216;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7216:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7217;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L7217:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 622;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14608;
 L1074:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L1075;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14611;
 L1075:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L1076;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14611;
 L1076:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L1077;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14611;
 L1077:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L1078;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14611;
 L1078:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L1079;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14611;
 L1079:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L1080;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14611;
 L1080:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L1081;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14611;
 L1081:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[4] = x2;
      goto L1082;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14611;
 L1082:
  if (((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))))
    {
      return 158;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14611;
 L2831:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == UDIV)
    goto L2832;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2832:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L2833;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2833:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L2834;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2834:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L2835;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2835:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L2836;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2836:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == UMOD)
    goto L2837;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2837:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L2838;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2838:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L2839;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2839:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L2840;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2840:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, HImode))
    {
      operands[4] = x2;
      goto L2841;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2841:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L2842;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L2842:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return 277;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L14615:
  if (((enum rtx_code) (x2)->code) == MEM)
    goto L7221;
  goto L6097;
 L7221:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case SImode:
      goto L14650;
    case DImode:
      goto L14651;
    default:
      break;
    }
  goto L6097;
 L14650:
  if (register_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L7222;
    }
  goto L6097;
 L7222:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7223;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7223:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L7224;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7224:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7225;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7225:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L7226;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7226:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7227;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7227:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7228;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7228:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (1)])
    goto L7229;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7229:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7230;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7230:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L7231;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7231:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7232;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7232:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7233;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7233:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (1)])
    goto L7234;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7234:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7235;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7235:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (!0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 623;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L14651:
  if (register_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L7240;
    }
  goto L6097;
 L7240:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7241;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7241:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L7242;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7242:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7243;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7243:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L7244;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7244:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7245;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7245:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L7246;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7246:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (1)])
    goto L7247;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7247:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7248;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7248:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L7249;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7249:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7250;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7250:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7251;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7251:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (1)])
    goto L7252;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7252:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7253;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L7253:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0 && ((x86_single_stringop & (1 << ix86_tune)) || optimize_size)))
    {
      return 624;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L14616:
  if (((enum rtx_code) (x2)->code) == MEM)
    goto L9448;
  goto L6097;
 L9448:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L9449;
  goto L6097;
 L9449:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DImode))
    {
      operands[0] = x4;
      goto L9450;
    }
  goto L6097;
 L9450:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const_int_operand (x4, DImode))
    {
      operands[4] = x4;
      goto L9451;
    }
  goto L6097;
 L9451:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 8
      && (((x2)->u.fld[1]).rtint) == 13)
    goto L9452;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9452:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 21)
    goto L9453;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9453:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 22)
    goto L9454;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9454:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 23)
    goto L9455;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9455:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 24)
    goto L9456;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9456:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 25)
    goto L9457;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9457:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 26)
    goto L9458;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9458:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[6]);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 27)
    goto L9459;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9459:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[7]);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 28)
    goto L9460;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9460:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L9461;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9461:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L9462;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9462:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L9463;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9463:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (const_int_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L9464;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9464:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L9465;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9465:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == LABEL_REF)
    goto L9466;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L9466:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[3] = x3;
  goto L9467;
 L9467:
  if ((0
   && ((operands[4])->u.hwint[0]) + (0 ? 8 : (((target_flags & 0x00004000) != 0) ? 3 : 0)) * 16 - 16 < 128
   && ((operands[4])->u.hwint[0]) + ((operands[2])->u.hwint[0]) * 16 >= -128))
    {
      return 853;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L6097;
 L6098:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == IF_THEN_ELSE)
    goto L6233;
  goto ret0;
 L6233:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == NE)
    goto L6234;
 L6099:
  if (comparison_operator (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L6100;
    }
  goto ret0;
 L6234:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L6235;
    }
  goto L6099;
 L6235:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (1)])
    goto L6236;
  goto L6099;
 L6236:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == LABEL_REF)
    goto L6237;
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6099;
 L6237:
  x4 = (((x3)->u.fld[0]).rtx1);
  operands[0] = x4;
  goto L6238;
 L6238:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x3)->code) == PC)
    goto L6239;
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6099;
 L6239:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6240;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6099;
 L6240:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L6241;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6099;
 L6241:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L6242;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6099;
 L6242:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L6243;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6099;
 L6243:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (-1)])
    goto L6244;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6099;
 L6244:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6245;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6099;
 L6245:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L6246;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6099;
 L6246:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6247;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6099;
 L6247:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && (x86_use_loop & (1 << ix86_tune))
   && (reload_in_progress || reload_completed
       || register_operand (operands[2], VOIDmode))))
    {
      return 514;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L6099;
 L6100:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L6101;
    }
  goto ret0;
 L6101:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L6102;
    }
 L6154:
  if (register_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L6155;
    }
  goto ret0;
 L6102:
  x3 = (((x2)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case LABEL_REF:
      goto L6103;
    case PC:
      goto L6129;
    default:
     break;
   }
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6103:
  x4 = (((x3)->u.fld[0]).rtx1);
  operands[3] = x4;
  goto L6104;
 L6104:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x3)->code) == PC)
    goto L6105;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6105:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6106;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6106:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18)
    goto L6107;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6107:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6108;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6108:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L6109;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6109:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6110;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6110:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, HImode))
    {
      operands[4] = x2;
      goto L6111;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6111:
  if (((target_flags & 0x00000001)
   && (((enum machine_mode) (operands[1])->mode) == SFmode || ((enum machine_mode) (operands[1])->mode) == DFmode)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && !ix86_use_fcomi_compare (((enum rtx_code) (operands[0])->code))
   && ix86_cc_mode ((((enum rtx_code) (operands[0])->code)), (operands[1]), (operands[2]))
                                  == CCFPmode
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code))))
    {
      return 505;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6129:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x3)->code) == LABEL_REF)
    goto L6130;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6130:
  x4 = (((x3)->u.fld[0]).rtx1);
  operands[3] = x4;
  goto L6131;
 L6131:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6132;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6132:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18)
    goto L6133;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6133:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6134;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6134:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L6135;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6135:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6136;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6136:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, HImode))
    {
      operands[4] = x2;
      goto L6137;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6137:
  if (((target_flags & 0x00000001)
   && (((enum machine_mode) (operands[1])->mode) == SFmode || ((enum machine_mode) (operands[1])->mode) == DFmode)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && !ix86_use_fcomi_compare (((enum rtx_code) (operands[0])->code))
   && ix86_cc_mode ((((enum rtx_code) (operands[0])->code)), (operands[1]), (operands[2]))
                                  == CCFPmode
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code))))
    {
      return 506;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[1]).rtx1);
  goto L6154;
 L6155:
  x3 = (((x2)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case LABEL_REF:
      goto L6156;
    case PC:
      goto L6182;
    default:
     break;
   }
  goto ret0;
 L6156:
  x4 = (((x3)->u.fld[0]).rtx1);
  operands[3] = x4;
  goto L6157;
 L6157:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x3)->code) == PC)
    goto L6158;
  goto ret0;
 L6158:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6159;
  goto ret0;
 L6159:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18)
    goto L6160;
  goto ret0;
 L6160:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6161;
  goto ret0;
 L6161:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L6162;
  goto ret0;
 L6162:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6163;
  goto ret0;
 L6163:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, HImode))
    {
      operands[4] = x2;
      goto L6164;
    }
  goto ret0;
 L6164:
  if (((target_flags & 0x00000001)
   && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code))))
    {
      return 507;
    }
  goto ret0;
 L6182:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x3)->code) == LABEL_REF)
    goto L6183;
  goto ret0;
 L6183:
  x4 = (((x3)->u.fld[0]).rtx1);
  operands[3] = x4;
  goto L6184;
 L6184:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6185;
  goto ret0;
 L6185:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18)
    goto L6186;
  goto ret0;
 L6186:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6187;
  goto ret0;
 L6187:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L6188;
  goto ret0;
 L6188:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L6189;
  goto ret0;
 L6189:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, HImode))
    {
      operands[4] = x2;
      goto L6190;
    }
  goto ret0;
 L6190:
  if (((target_flags & 0x00000001)
   && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && ((enum machine_mode) (operands[1])->mode) == ((enum machine_mode) (operands[2])->mode)
   && ix86_fp_jump_nontrivial_p (((enum rtx_code) (operands[0])->code))))
    {
      return 508;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_38 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L7257;
    }
 L14654:
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L7468;
    }
  goto ret0;
 L7257:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    goto L7258;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7258:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7259;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7259:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L7260;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7260:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7261;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7261:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode)
    goto L14656;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L14656:
  if (((enum rtx_code) (x3)->code) == ASHIFT)
    goto L7262;
  if (register_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L7366;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7262:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DImode))
    {
      operands[5] = x4;
      goto L7263;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7263:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14658;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L14658:
  if ((int) ((x4)->u.hwint[0]) == ((x4)->u.hwint[0]))
    switch ((int) ((x4)->u.hwint[0]))
      {
      case 3L:
        goto L7264;
      case 2L:
        goto L7318;
      default:
        break;
      }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7264:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L7265;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7265:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7266;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7266:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L7267;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7267:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7268;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7268:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == ASHIFT)
    goto L7269;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7269:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[5]))
    goto L7270;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7270:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (3)])
    goto L7271;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7271:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[4] = x3;
      goto L7272;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7272:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7273;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7273:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7274;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7274:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7275;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7275:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7276;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7276:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[4]))
    goto L7277;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7277:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7278;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7278:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[5]))
    goto L7279;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7279:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7280;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7280:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0))
    {
      return 625;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7318:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L7319;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7319:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7320;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7320:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L7321;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7321:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7322;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7322:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == ASHIFT)
    goto L7323;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7323:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[5]))
    goto L7324;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7324:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (2)])
    goto L7325;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7325:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[4] = x3;
      goto L7326;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7326:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7327;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7327:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7328;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7328:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7329;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7329:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7330;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7330:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[4]))
    goto L7331;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7331:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7332;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7332:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[5]))
    goto L7333;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7333:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7334;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7334:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0))
    {
      return 627;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7366:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[5] = x3;
      goto L7367;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7367:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7368;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7368:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L7369;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7369:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7370;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7370:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[4] = x3;
      goto L7371;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7371:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[5]))
    goto L7372;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7372:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7373;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7373:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7374;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7374:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7375;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7375:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7376;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7376:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[4]))
    goto L7377;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7377:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7378;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7378:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[5]))
    goto L7379;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7379:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7380;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7380:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0))
    {
      return 629;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14654;
 L7468:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    goto L7469;
  goto ret0;
 L7469:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7470;
  goto ret0;
 L7470:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L7471;
    }
  goto ret0;
 L7471:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7472;
  goto ret0;
 L7472:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode)
    goto L14660;
  goto ret0;
 L14660:
  if (((enum rtx_code) (x3)->code) == ASHIFT)
    goto L7473;
  if (register_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L7555;
    }
  goto ret0;
 L7473:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DImode))
    {
      operands[4] = x4;
      goto L7474;
    }
  goto ret0;
 L7474:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x4)->code) == CONST_INT)
    goto L14662;
  goto ret0;
 L14662:
  if ((int) ((x4)->u.hwint[0]) == ((x4)->u.hwint[0]))
    switch ((int) ((x4)->u.hwint[0]))
      {
      case 3L:
        goto L7475;
      case 2L:
        goto L7517;
      default:
        break;
      }
  goto ret0;
 L7475:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L7476;
    }
  goto ret0;
 L7476:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7477;
  goto ret0;
 L7477:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7478;
  goto ret0;
 L7478:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7479;
  goto ret0;
 L7479:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    goto L7480;
  goto ret0;
 L7480:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7481;
  goto ret0;
 L7481:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L7482;
    }
  goto ret0;
 L7482:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7483;
  goto ret0;
 L7483:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[4]))
    goto L7484;
  goto ret0;
 L7484:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7485;
  goto ret0;
 L7485:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0))
    {
      return 637;
    }
  goto ret0;
 L7517:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[3] = x3;
      goto L7518;
    }
  goto ret0;
 L7518:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7519;
  goto ret0;
 L7519:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7520;
  goto ret0;
 L7520:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7521;
  goto ret0;
 L7521:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    goto L7522;
  goto ret0;
 L7522:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7523;
  goto ret0;
 L7523:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L7524;
    }
  goto ret0;
 L7524:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7525;
  goto ret0;
 L7525:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[4]))
    goto L7526;
  goto ret0;
 L7526:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7527;
  goto ret0;
 L7527:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0))
    {
      return 639;
    }
  goto ret0;
 L7555:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[4] = x3;
      goto L7556;
    }
  goto ret0;
 L7556:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7557;
  goto ret0;
 L7557:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7558;
  goto ret0;
 L7558:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7559;
  goto ret0;
 L7559:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    goto L7560;
  goto ret0;
 L7560:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7561;
  goto ret0;
 L7561:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L7562;
    }
  goto ret0;
 L7562:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7563;
  goto ret0;
 L7563:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[4]))
    goto L7564;
  goto ret0;
 L7564:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7565;
  goto ret0;
 L7565:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (0))
    {
      return 641;
    }
  goto ret0;
 ret0:
  return -1;
}
static int
recog_39 (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  switch ((((((x0)->u.fld[0]).rtvec1))->num_elem))
    {
    case 2:
      goto L8212;
    case 3:
      goto L264;
    case 5:
      goto L958;
    case 4:
      goto L8200;
    case 6:
      goto L7255;
    case 7:
      goto L7567;
    case 17:
      goto L9398;
    default:
      break;
    }
  goto ret0;
 L8212:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  switch (((enum machine_mode) (x1)->mode))
    {
    case SImode:
      goto L14084;
    case DImode:
      goto L14085;
    default:
      break;
    }
 L257:
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L258;
    case CALL:
      goto L6265;
    case RETURN:
      goto L6319;
    default:
     break;
   }
  goto ret0;
 L14084:
  if (((enum rtx_code) (x1)->code) == UNSPEC_VOLATILE
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 10)
    goto L8213;
  goto L257;
 L8213:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L8214;
    }
  goto L257;
 L8214:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L8215;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L257;
 L8215:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L8216;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L257;
 L8216:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MINUS)
    goto L8217;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L257;
 L8217:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L8218;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L257;
 L8218:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[0])
      && (!0 && (target_flags & 0x00000100))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 685;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L257;
 L14085:
  if (((enum rtx_code) (x1)->code) == UNSPEC_VOLATILE
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 10)
    goto L8233;
  goto L257;
 L8233:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L8234;
    }
  goto L257;
 L8234:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L8235;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L257;
 L8235:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L8236;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L257;
 L8236:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == MINUS)
    goto L8237;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L257;
 L8237:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L8238;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L257;
 L8238:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[0])
      && (0 && (target_flags & 0x00000100))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 2;
      return 686;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L257;
 L258:
  return recog_32 (x0, insn, pnum_clobbers);
 L6265:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L6266;
  goto ret0;
 L6266:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14494;
  goto ret0;
 L14494:
  if (constant_call_address_operand (x3, SImode))
    {
      operands[0] = x3;
      goto L6267;
    }
 L14495:
  if (call_insn_operand (x3, SImode))
    {
      operands[0] = x3;
      goto L6278;
    }
  goto ret0;
 L6267:
  x2 = (((x1)->u.fld[1]).rtx1);
  operands[1] = x2;
  goto L6268;
 L6268:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6269;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14495;
 L6269:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L6270;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14495;
 L6270:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L6271;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14495;
 L6271:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L6272;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14495;
 L6272:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L6273;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14495;
 L6273:
  if ((!0))
    {
      return 515;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14495;
 L6278:
  x2 = (((x1)->u.fld[1]).rtx1);
  operands[1] = x2;
  goto L6279;
 L6279:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L6280;
  goto ret0;
 L6280:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L6281;
  goto ret0;
 L6281:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L6282;
  goto ret0;
 L6282:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L6283;
  goto ret0;
 L6283:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L6284;
    }
  goto ret0;
 L6284:
  if ((!0))
    {
      return 516;
    }
  goto ret0;
 L6319:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  switch (((enum rtx_code) (x1)->code))
    {
    case UNSPEC:
      goto L14496;
    case USE:
      goto L6329;
    default:
     break;
   }
  goto ret0;
 L14496:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 75)
    goto L6320;
  goto ret0;
 L6320:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (x2 == const_int_rtx[64 + (0)]
      && (reload_completed))
    {
      return 525;
    }
  goto ret0;
 L6329:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L6330;
    }
  if (const_int_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L6325;
    }
  goto ret0;
 L6330:
  if ((reload_completed))
    {
      return 527;
    }
  goto ret0;
 L6325:
  if ((reload_completed))
    {
      return 526;
    }
  goto ret0;
 L264:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L265;
  goto ret0;
 L265:
  return recog_35 (x0, insn, pnum_clobbers);
 L958:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L959;
  goto ret0;
 L959:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L960;
    }
  goto ret0;
 L960:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L961;
  goto ret0;
 L961:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L962;
    }
  goto ret0;
 L962:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L963;
  goto ret0;
 L963:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L964;
    }
  goto ret0;
 L964:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L965;
  goto ret0;
 L965:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L966;
    }
  goto ret0;
 L966:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L967;
  goto ret0;
 L967:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, DImode))
    {
      operands[4] = x2;
      goto L968;
    }
  goto ret0;
 L968:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L969;
  goto ret0;
 L969:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DFmode))
    {
      operands[5] = x2;
      goto L970;
    }
  goto ret0;
 L970:
  if (((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && (!((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode)) || !0)))
    {
      return 148;
    }
  goto ret0;
 L8200:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  switch (((enum machine_mode) (x1)->mode))
    {
    case SImode:
      goto L14603;
    case DImode:
      goto L14604;
    default:
      break;
    }
 L972:
  if (((enum rtx_code) (x1)->code) == SET)
    goto L973;
  goto ret0;
 L14603:
  if (((enum rtx_code) (x1)->code) == UNSPEC_VOLATILE
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 10)
    goto L8201;
  goto L972;
 L8201:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L8202;
    }
  goto L972;
 L8202:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L8203;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8203:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L8204;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8204:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MINUS)
    goto L8205;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8205:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L8206;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8206:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L8207;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8207:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8208;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8208:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L8209;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8209:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8210;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8210:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && (target_flags & 0x00000100)))
    {
      return 685;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L14604:
  if (((enum rtx_code) (x1)->code) == UNSPEC_VOLATILE
      && (((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 10)
    goto L8221;
  goto L972;
 L8221:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L8222;
    }
  goto L972;
 L8222:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L8223;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8223:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L8224;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8224:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == MINUS)
    goto L8225;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8225:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L8226;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8226:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L8227;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8227:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8228;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8228:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L8229;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8229:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L8230;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L8230:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && (target_flags & 0x00000100)))
    {
      return 686;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  goto L972;
 L973:
  return recog_37 (x0, insn, pnum_clobbers);
 L7255:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7256;
  goto ret0;
 L7256:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case DImode:
      goto L14652;
    case SImode:
      goto L14653;
    default:
      break;
    }
  goto ret0;
 L14652:
  return recog_38 (x0, insn, pnum_clobbers);
 L14653:
  if (register_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L7284;
    }
 L14655:
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L7489;
    }
  goto ret0;
 L7284:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    goto L7285;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7285:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7286;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7286:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L7287;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7287:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7288;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7288:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14664;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L14664:
  if (((enum rtx_code) (x3)->code) == ASHIFT)
    goto L7289;
  if (register_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L7343;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7289:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[5] = x4;
      goto L7290;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7290:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (2)])
    goto L7291;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7291:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L7292;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7292:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7293;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7293:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L7294;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7294:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7295;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7295:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == ASHIFT)
    goto L7296;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7296:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[5]))
    goto L7297;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7297:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (2)])
    goto L7298;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7298:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[4] = x3;
      goto L7299;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7299:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7300;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7300:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7301;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7301:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7302;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7302:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7303;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7303:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[4]))
    goto L7304;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7304:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7305;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7305:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[5]))
    goto L7306;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7306:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7307;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7307:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (!0))
    {
      return 626;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7343:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[5] = x3;
      goto L7344;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7344:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7345;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7345:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L7346;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7346:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7347;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7347:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[4] = x3;
      goto L7348;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7348:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[5]))
    goto L7349;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7349:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7350;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7350:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7351;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7351:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7352;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7352:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7353;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7353:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[4]))
    goto L7354;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7354:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7355;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7355:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[5]))
    goto L7356;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7356:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7357;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7357:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (!0))
    {
      return 628;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14655;
 L7489:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    goto L7490;
  goto ret0;
 L7490:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7491;
  goto ret0;
 L7491:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L7492;
    }
  goto ret0;
 L7492:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L7493;
  goto ret0;
 L7493:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14666;
  goto ret0;
 L14666:
  if (((enum rtx_code) (x3)->code) == ASHIFT)
    goto L7494;
  if (register_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L7536;
    }
  goto ret0;
 L7494:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[4] = x4;
      goto L7495;
    }
  goto ret0;
 L7495:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (2)])
    goto L7496;
  goto ret0;
 L7496:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L7497;
    }
  goto ret0;
 L7497:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7498;
  goto ret0;
 L7498:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7499;
  goto ret0;
 L7499:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7500;
  goto ret0;
 L7500:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    goto L7501;
  goto ret0;
 L7501:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7502;
  goto ret0;
 L7502:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L7503;
    }
  goto ret0;
 L7503:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7504;
  goto ret0;
 L7504:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[4]))
    goto L7505;
  goto ret0;
 L7505:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7506;
  goto ret0;
 L7506:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (!0))
    {
      return 638;
    }
  goto ret0;
 L7536:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[4] = x3;
      goto L7537;
    }
  goto ret0;
 L7537:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7538;
  goto ret0;
 L7538:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L7539;
  goto ret0;
 L7539:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[3]))
    goto L7540;
  goto ret0;
 L7540:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    goto L7541;
  goto ret0;
 L7541:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7542;
  goto ret0;
 L7542:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L7543;
    }
  goto ret0;
 L7543:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7544;
  goto ret0;
 L7544:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[4]))
    goto L7545;
  goto ret0;
 L7545:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7546;
  goto ret0;
 L7546:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19
      && (!0))
    {
      return 640;
    }
  goto ret0;
 L7567:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L7568;
  goto ret0;
 L7568:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L7569;
  goto ret0;
 L7569:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14668;
  goto ret0;
 L14668:
  switch (((enum rtx_code) (x2)->code))
    {
    case COMPARE:
      goto L7570;
    case IF_THEN_ELSE:
      goto L7612;
    default:
     break;
   }
  goto ret0;
 L7570:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == BLKmode
      && ((enum rtx_code) (x3)->code) == MEM)
    goto L7571;
  goto ret0;
 L7571:
  x4 = (((x3)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x4)->mode))
    {
    case SImode:
      goto L14670;
    case DImode:
      goto L14671;
    default:
      break;
    }
  goto ret0;
 L14670:
  if (register_operand (x4, SImode))
    {
      operands[4] = x4;
      goto L7572;
    }
  goto ret0;
 L7572:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == BLKmode
      && ((enum rtx_code) (x3)->code) == MEM)
    goto L7573;
  goto ret0;
 L7573:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[5] = x4;
      goto L7574;
    }
  goto ret0;
 L7574:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7575;
  goto ret0;
 L7575:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[6] = x2;
      goto L7576;
    }
  goto ret0;
 L7576:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7577;
  goto ret0;
 L7577:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (immediate_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L7578;
    }
  goto ret0;
 L7578:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7579;
  goto ret0;
 L7579:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19)
    goto L7580;
  goto ret0;
 L7580:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7581;
  goto ret0;
 L7581:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L7582;
    }
  goto ret0;
 L7582:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7583;
  goto ret0;
 L7583:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L7584;
    }
  goto ret0;
 L7584:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[6]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7585;
  goto ret0;
 L7585:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L7586;
    }
  goto ret0;
 L7586:
  if ((!0))
    {
      return 642;
    }
  goto ret0;
 L14671:
  if (register_operand (x4, DImode))
    {
      operands[4] = x4;
      goto L7593;
    }
  goto ret0;
 L7593:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == BLKmode
      && ((enum rtx_code) (x3)->code) == MEM)
    goto L7594;
  goto ret0;
 L7594:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DImode))
    {
      operands[5] = x4;
      goto L7595;
    }
  goto ret0;
 L7595:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7596;
  goto ret0;
 L7596:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[6] = x2;
      goto L7597;
    }
  goto ret0;
 L7597:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7598;
  goto ret0;
 L7598:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (immediate_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L7599;
    }
  goto ret0;
 L7599:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7600;
  goto ret0;
 L7600:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19)
    goto L7601;
  goto ret0;
 L7601:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7602;
  goto ret0;
 L7602:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L7603;
    }
  goto ret0;
 L7603:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7604;
  goto ret0;
 L7604:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L7605;
    }
  goto ret0;
 L7605:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[6]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7606;
  goto ret0;
 L7606:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L7607;
    }
  goto ret0;
 L7607:
  if ((0))
    {
      return 643;
    }
  goto ret0;
 L7612:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == NE)
    goto L7613;
  goto ret0;
 L7613:
  x4 = (((x3)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x4)->mode))
    {
    case SImode:
      goto L14672;
    case DImode:
      goto L14673;
    default:
      break;
    }
  goto ret0;
 L14672:
  if (register_operand (x4, SImode))
    {
      operands[6] = x4;
      goto L7614;
    }
  goto ret0;
 L7614:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (0)])
    goto L7615;
  goto ret0;
 L7615:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == CCmode
      && ((enum rtx_code) (x3)->code) == COMPARE)
    goto L7616;
  goto ret0;
 L7616:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == BLKmode
      && ((enum rtx_code) (x4)->code) == MEM)
    goto L7617;
  goto ret0;
 L7617:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, SImode))
    {
      operands[4] = x5;
      goto L7618;
    }
  goto ret0;
 L7618:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == BLKmode
      && ((enum rtx_code) (x4)->code) == MEM)
    goto L7619;
  goto ret0;
 L7619:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, SImode))
    {
      operands[5] = x5;
      goto L7620;
    }
  goto ret0;
 L7620:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L7621;
  goto ret0;
 L7621:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7622;
  goto ret0;
 L7622:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (immediate_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L7623;
    }
  goto ret0;
 L7623:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7624;
  goto ret0;
 L7624:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L7625;
  goto ret0;
 L7625:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7626;
  goto ret0;
 L7626:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19)
    goto L7627;
  goto ret0;
 L7627:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7628;
  goto ret0;
 L7628:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L7629;
    }
  goto ret0;
 L7629:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7630;
  goto ret0;
 L7630:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L7631;
    }
  goto ret0;
 L7631:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[6]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7632;
  goto ret0;
 L7632:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L7633;
    }
  goto ret0;
 L7633:
  if ((!0))
    {
      return 644;
    }
  goto ret0;
 L14673:
  if (register_operand (x4, DImode))
    {
      operands[6] = x4;
      goto L7640;
    }
  goto ret0;
 L7640:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (0)])
    goto L7641;
  goto ret0;
 L7641:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == CCmode
      && ((enum rtx_code) (x3)->code) == COMPARE)
    goto L7642;
  goto ret0;
 L7642:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == BLKmode
      && ((enum rtx_code) (x4)->code) == MEM)
    goto L7643;
  goto ret0;
 L7643:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, DImode))
    {
      operands[4] = x5;
      goto L7644;
    }
  goto ret0;
 L7644:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == BLKmode
      && ((enum rtx_code) (x4)->code) == MEM)
    goto L7645;
  goto ret0;
 L7645:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, DImode))
    {
      operands[5] = x5;
      goto L7646;
    }
  goto ret0;
 L7646:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L7647;
  goto ret0;
 L7647:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7648;
  goto ret0;
 L7648:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (immediate_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L7649;
    }
  goto ret0;
 L7649:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7650;
  goto ret0;
 L7650:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L7651;
  goto ret0;
 L7651:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L7652;
  goto ret0;
 L7652:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19)
    goto L7653;
  goto ret0;
 L7653:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7654;
  goto ret0;
 L7654:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L7655;
    }
  goto ret0;
 L7655:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7656;
  goto ret0;
 L7656:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L7657;
    }
  goto ret0;
 L7657:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[6]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L7658;
  goto ret0;
 L7658:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L7659;
    }
  goto ret0;
 L7659:
  if ((0))
    {
      return 645;
    }
  goto ret0;
 L9398:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x1)->code) == UNSPEC_VOLATILE)
    goto L14674;
  goto ret0;
 L14674:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1)
    goto L14676;
  goto ret0;
 L14676:
  switch ((((x1)->u.fld[1]).rtint))
    {
    case 31L:
      goto L9399;
    case 46L:
      goto L9524;
    default:
      break;
    }
  goto ret0;
 L9399:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (x2 == const_int_rtx[64 + (0)])
    goto L9400;
  goto ret0;
 L9400:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9401;
  goto ret0;
 L9401:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 8)
    goto L9402;
  goto ret0;
 L9402:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9403;
  goto ret0;
 L9403:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 9)
    goto L9404;
  goto ret0;
 L9404:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9405;
  goto ret0;
 L9405:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 10)
    goto L9406;
  goto ret0;
 L9406:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9407;
  goto ret0;
 L9407:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 11)
    goto L9408;
  goto ret0;
 L9408:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9409;
  goto ret0;
 L9409:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 12)
    goto L9410;
  goto ret0;
 L9410:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[6]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9411;
  goto ret0;
 L9411:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 13)
    goto L9412;
  goto ret0;
 L9412:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[7]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9413;
  goto ret0;
 L9413:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 14)
    goto L9414;
  goto ret0;
 L9414:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[8]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9415;
  goto ret0;
 L9415:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 15)
    goto L9416;
  goto ret0;
 L9416:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[9]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9417;
  goto ret0;
 L9417:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 29)
    goto L9418;
  goto ret0;
 L9418:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[10]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9419;
  goto ret0;
 L9419:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 30)
    goto L9420;
  goto ret0;
 L9420:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[11]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9421;
  goto ret0;
 L9421:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 31)
    goto L9422;
  goto ret0;
 L9422:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[12]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9423;
  goto ret0;
 L9423:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 32)
    goto L9424;
  goto ret0;
 L9424:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[13]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9425;
  goto ret0;
 L9425:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 33)
    goto L9426;
  goto ret0;
 L9426:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[14]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9427;
  goto ret0;
 L9427:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 34)
    goto L9428;
  goto ret0;
 L9428:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[15]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9429;
  goto ret0;
 L9429:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 35)
    goto L9430;
  goto ret0;
 L9430:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[16]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9431;
  goto ret0;
 L9431:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 36
      && (((target_flags & 0x00002000) != 0)))
    {
      return 849;
    }
  goto ret0;
 L9524:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (x2 == const_int_rtx[64 + (0)])
    goto L9525;
  goto ret0;
 L9525:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9526;
  goto ret0;
 L9526:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 8)
    goto L9527;
  goto ret0;
 L9527:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9528;
  goto ret0;
 L9528:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 9)
    goto L9529;
  goto ret0;
 L9529:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9530;
  goto ret0;
 L9530:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 10)
    goto L9531;
  goto ret0;
 L9531:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9532;
  goto ret0;
 L9532:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 11)
    goto L9533;
  goto ret0;
 L9533:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9534;
  goto ret0;
 L9534:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 12)
    goto L9535;
  goto ret0;
 L9535:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[6]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9536;
  goto ret0;
 L9536:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 13)
    goto L9537;
  goto ret0;
 L9537:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[7]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9538;
  goto ret0;
 L9538:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 14)
    goto L9539;
  goto ret0;
 L9539:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[8]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9540;
  goto ret0;
 L9540:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 15)
    goto L9541;
  goto ret0;
 L9541:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[9]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9542;
  goto ret0;
 L9542:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 29)
    goto L9543;
  goto ret0;
 L9543:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[10]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9544;
  goto ret0;
 L9544:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 30)
    goto L9545;
  goto ret0;
 L9545:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[11]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9546;
  goto ret0;
 L9546:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 31)
    goto L9547;
  goto ret0;
 L9547:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[12]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9548;
  goto ret0;
 L9548:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 32)
    goto L9549;
  goto ret0;
 L9549:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[13]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9550;
  goto ret0;
 L9550:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 33)
    goto L9551;
  goto ret0;
 L9551:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[14]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9552;
  goto ret0;
 L9552:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 34)
    goto L9553;
  goto ret0;
 L9553:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[15]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9554;
  goto ret0;
 L9554:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 35)
    goto L9555;
  goto ret0;
 L9555:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[16]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L9556;
  goto ret0;
 L9556:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 36
      && (((target_flags & 0x00020000) != 0)))
    {
      return 863;
    }
  goto ret0;
 ret0:
  return -1;
}
int
recog (rtx x0 ,
 rtx insn ,
 int *pnum_clobbers )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  int tem ;
  recog_data.insn = (rtx) 0;
  switch (((enum rtx_code) (x0)->code))
    {
    case SET:
      goto L138;
    case PARALLEL:
      goto L13092;
    case CALL:
      goto L6286;
    case UNSPEC_VOLATILE:
      goto L13096;
    case RETURN:
      goto L13097;
    case CONST_INT:
      goto L13098;
    case TRAP_IF:
      goto L8315;
    case PREFETCH:
      goto L9720;
    default:
     break;
   }
  goto ret0;
 L138:
  return recog_19 (x0, insn, pnum_clobbers);
 L13092:
  return recog_39 (x0, insn, pnum_clobbers);
 L6286:
  x1 = (((x0)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x1)->mode) == QImode
      && ((enum rtx_code) (x1)->code) == MEM)
    goto L6287;
  goto ret0;
 L6287:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (constant_call_address_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L6288;
    }
 L6291:
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14678;
    case DImode:
      goto L14680;
    default:
      break;
    }
  goto ret0;
 L6288:
  x1 = (((x0)->u.fld[1]).rtx1);
  operands[1] = x1;
  return 517;
 L14678:
  if (call_insn_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L6292;
    }
 L14679:
  if (sibcall_insn_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L6297;
    }
  goto ret0;
 L6292:
  x1 = (((x0)->u.fld[1]).rtx1);
  operands[1] = x1;
  goto L6293;
 L6293:
  if ((!(((insn))->jump) && !0))
    {
      return 518;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14679;
 L6297:
  x1 = (((x0)->u.fld[1]).rtx1);
  operands[1] = x1;
  goto L6298;
 L6298:
  if (((((insn))->jump) && !0))
    {
      return 519;
    }
  goto ret0;
 L14680:
  if (call_insn_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L6302;
    }
 L14682:
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 40)
    goto L6312;
  if (constant_call_address_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L6307;
    }
  goto ret0;
 L6302:
  x1 = (((x0)->u.fld[1]).rtx1);
  operands[1] = x1;
  goto L6303;
 L6303:
  if ((!(((insn))->jump) && 0))
    {
      return 520;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14682;
 L6312:
  x1 = (((x0)->u.fld[1]).rtx1);
  operands[0] = x1;
  goto L6313;
 L6313:
  if (((((insn))->jump) && 0))
    {
      return 522;
    }
  goto ret0;
 L6307:
  x1 = (((x0)->u.fld[1]).rtx1);
  operands[1] = x1;
  goto L6308;
 L6308:
  if (((((insn))->jump) && 0))
    {
      return 521;
    }
  goto ret0;
 L13096:
  switch ((((((x0)->u.fld[0]).rtvec1))->num_elem))
    {
    case 1:
      goto L14683;
    case 2:
      goto L14689;
    case 3:
      goto L14690;
    default:
      break;
    }
  goto ret0;
 L14683:
  switch ((((x0)->u.fld[1]).rtint))
    {
    case 0L:
      goto L6315;
    case 68L:
      goto L6333;
    case 31L:
      goto L9433;
    case 37L:
      goto L9435;
    case 46L:
      goto L9558;
    case 57L:
      goto L10852;
    default:
      break;
    }
  goto ret0;
 L6315:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  operands[0] = x1;
  return 523;
 L6333:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  operands[0] = x1;
  return 529;
 L9433:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (x1 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00002000) != 0))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 16;
      return 849;
    }
  goto ret0;
 L9435:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (memory_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L9436;
    }
  goto ret0;
 L9436:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return 850;
    }
  goto ret0;
 L9558:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (x1 == const_int_rtx[64 + (0)]
      && (((target_flags & 0x00020000) != 0))
      && pnum_clobbers != ((void *)0))
    {
      *pnum_clobbers = 16;
      return 863;
    }
  goto ret0;
 L10852:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (address_operand (x1, VOIDmode))
    {
      operands[0] = x1;
      goto L10853;
    }
  goto ret0;
 L10853:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return 1018;
    }
  goto ret0;
 L14689:
  if ((((x0)->u.fld[1]).rtint) == 70)
    goto L10863;
  goto ret0;
 L10863:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L10864;
    }
  goto ret0;
 L10864:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L10865;
    }
  goto ret0;
 L10865:
  if ((((target_flags & 0x00010000) != 0)))
    {
      return 1021;
    }
  goto ret0;
 L14690:
  if ((((x0)->u.fld[1]).rtint) == 69)
    goto L10867;
  goto ret0;
 L10867:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L10868;
    }
  goto ret0;
 L10868:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (register_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L10869;
    }
  goto ret0;
 L10869:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (register_operand (x1, SImode))
    {
      operands[2] = x1;
      goto L10870;
    }
  goto ret0;
 L10870:
  if ((((target_flags & 0x00010000) != 0)))
    {
      return 1022;
    }
  goto ret0;
 L13097:
  if ((reload_completed))
    {
      return 524;
    }
  goto ret0;
 L13098:
  if (((x0)->u.hwint[0]) == 0L)
    {
      return 528;
    }
  goto ret0;
 L8315:
  x1 = (((x0)->u.fld[0]).rtx1);
  if (x1 == const_int_rtx[64 + (1)])
    goto L8316;
  if (comparison_operator (x1, VOIDmode))
    {
      operands[0] = x1;
      goto L8319;
    }
  goto ret0;
 L8316:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (x1 == const_int_rtx[64 + (5)])
    {
      return 696;
    }
  goto ret0;
 L8319:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L8320;
  goto ret0;
 L8320:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    goto L8321;
  goto ret0;
 L8321:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (const_int_operand (x1, VOIDmode))
    {
      operands[1] = x1;
      return 697;
    }
  goto ret0;
 L9720:
  x1 = (((x0)->u.fld[0]).rtx1);
  if (address_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L9721;
    }
 L9725:
  if (address_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L9726;
    }
 L9730:
  if (address_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L9731;
    }
 L9734:
  if (address_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L9735;
    }
  goto ret0;
 L9721:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (x1 == const_int_rtx[64 + (0)])
    goto L9722;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9725;
 L9722:
  x1 = (((x0)->u.fld[2]).rtx1);
  if (const_int_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L9723;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9725;
 L9723:
  if (((x86_prefetch_sse) && !0))
    {
      return 880;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9725;
 L9726:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (x1 == const_int_rtx[64 + (0)])
    goto L9727;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9730;
 L9727:
  x1 = (((x0)->u.fld[2]).rtx1);
  if (const_int_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L9728;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9730;
 L9728:
  if (((x86_prefetch_sse) && 0))
    {
      return 881;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9730;
 L9731:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (const_int_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L9732;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9734;
 L9732:
  x1 = (((x0)->u.fld[2]).rtx1);
  if (x1 == const_int_rtx[64 + (3)]
      && (((target_flags & 0x00020000) != 0) && !0))
    {
      return 882;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L9734;
 L9735:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (const_int_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L9736;
    }
  goto ret0;
 L9736:
  x1 = (((x0)->u.fld[2]).rtx1);
  if (x1 == const_int_rtx[64 + (3)]
      && (((target_flags & 0x00020000) != 0) && 0))
    {
      return 883;
    }
  goto ret0;
 ret0:
  return -1;
}
static rtx
split_1 (rtx x0 , rtx insn )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  rtx tem ;
  x1 = (((x0)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x1)->mode))
    {
    case CCFPmode:
      goto L14695;
    case DImode:
      goto L14696;
    case SFmode:
      goto L14699;
    case DFmode:
      goto L14700;
    case QImode:
      goto L14704;
    default:
      break;
    }
 L11006:
  if (push_operand (x1, VOIDmode))
    {
      operands[0] = x1;
      goto L11007;
    }
 L11010:
  if (push_operand (x1, XFmode))
    {
      operands[0] = x1;
      goto L11011;
    }
  switch (((enum rtx_code) (x1)->code))
    {
    case REG:
      goto L14709;
    case STRICT_LOW_PART:
      goto L11963;
    case PC:
      goto L11986;
    default:
     break;
   }
 L11018:
  if (nonimmediate_operand (x1, VOIDmode))
    {
      operands[0] = x1;
      goto L11019;
    }
 L13077:
  if (push_operand (x1, VOIDmode))
    {
      operands[0] = x1;
      goto L13078;
    }
  if (register_operand (x1, VOIDmode))
    {
      operands[0] = x1;
      goto L11357;
    }
 L13069:
  switch (((enum machine_mode) (x1)->mode))
    {
    case V4SFmode:
      goto L14710;
    case V2DFmode:
      goto L14711;
    case TImode:
      goto L14712;
    case TFmode:
      goto L14713;
    default:
      break;
    }
  goto ret0;
 L14695:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 18)
    goto L10936;
  goto L11006;
 L10936:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == CCFPmode
      && ((enum rtx_code) (x1)->code) == COMPARE)
    goto L10937;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L10937:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L10938;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L10938:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == FLOAT)
    goto L10939;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L10939:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L10940;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L10940:
  if ((0 && (target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1044 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L14696:
  if (push_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L10953;
    }
 L14697:
  if (nonimmediate_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L10961;
    }
 L14698:
  if (memory_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L11076;
    }
 L14703:
  if (register_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L11365;
    }
  goto L11006;
 L10953:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (immediate_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L10954;
    }
 L10957:
  if (general_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L10958;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14697;
 L10954:
  if ((0 && (flow2_completed || (reload_completed && !flag_peephole2))
   && !symbolic_operand (operands[1], DImode)
   && !x86_64_immediate_operand (operands[1], DImode)))
    {
      return gen_split_1054 (insn, operands);
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L10957;
 L10958:
  if ((!0 && reload_completed
   && (! ((((enum rtx_code) (operands[1])->code) == REG) && (((((operands[1])->u.fld[0]).rtuint)) >= (((20 + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((20 + 1) + 7) + 1) + 7))) && !((((enum rtx_code) (operands[1])->code) == REG) && ((((((operands[1])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[1])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))))))
    {
      return gen_split_1055 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14697;
 L10961:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L10962;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14698;
 L10962:
  if ((!0 && reload_completed
   && (!((((enum rtx_code) (operands[0])->code) == REG) && (((((operands[0])->u.fld[0]).rtuint)) >= (((20 + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((20 + 1) + 7) + 1) + 7))) && !((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))))
   && (!((((enum rtx_code) (operands[1])->code) == REG) && (((((operands[1])->u.fld[0]).rtuint)) >= (((20 + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((20 + 1) + 7) + 1) + 7))) && !((((enum rtx_code) (operands[1])->code) == REG) && ((((((operands[1])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[1])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))))))
    {
      return gen_split_1056 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14698;
 L11076:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DImode
      && ((enum rtx_code) (x1)->code) == ZERO_EXTEND)
    goto L11077;
  if (immediate_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L10976;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14703;
 L11077:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0])
      && (0))
    {
      return gen_split_1086 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14703;
 L10976:
  if ((0 && (flow2_completed || (reload_completed && !flag_peephole2))
   && !symbolic_operand (operands[1], DImode)
   && !x86_64_immediate_operand (operands[1], DImode)))
    {
      return gen_split_1059 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14703;
 L11365:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DImode
      && ((enum rtx_code) (x1)->code) == ZERO_EXTEND)
    goto L11366;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11366:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L11367;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11367:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14714;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L14714:
  switch (((enum rtx_code) (x3)->code))
    {
    case PLUS:
      goto L11368;
    case MULT:
      goto L11385;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11368:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode)
    goto L14717;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L14717:
  if (((enum rtx_code) (x4)->code) == MULT)
    goto L11405;
  if (index_register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L11369;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11405:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (index_register_operand (x5, SImode))
    {
      operands[1] = x5;
      goto L11406;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11406:
  x5 = (((x4)->u.fld[1]).rtx1);
  if (const248_operand (x5, SImode))
    {
      operands[2] = x5;
      goto L11407;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11407:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[3] = x4;
      goto L11408;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11408:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, SImode))
    {
      operands[4] = x3;
      goto L11409;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11409:
  if ((0&& reload_completed))
    {
      return gen_split_1161 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11369:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L11370;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11370:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L11371;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11371:
  if ((0&& reload_completed))
    {
      return gen_split_1157 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11385:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (index_register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L11386;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11386:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const248_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L11387;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11387:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, SImode))
    {
      operands[3] = x3;
      goto L11388;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11388:
  if ((0&& reload_completed))
    {
      return gen_split_1159 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L14699:
  if (push_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L10979;
    }
  if (register_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L11168;
    }
  goto L11006;
 L10979:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SFmode)
    goto L14719;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L14719:
  if (any_fp_register_operand (x1, SFmode))
    {
      operands[1] = x1;
      goto L10984;
    }
  if (memory_operand (x1, SFmode))
    {
      operands[1] = x1;
      goto L10980;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L10984:
  if ((!0))
    {
      return gen_split_1062 (insn, operands);
    }
 L10988:
  if ((0))
    {
      return gen_split_1063 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L10980:
  if ((reload_completed
   && ((enum rtx_code) (operands[1])->code) == MEM
   && ((enum rtx_code) ((((operands[1])->u.fld[0]).rtx1))->code) == SYMBOL_REF
   && ((((((operands[1])->u.fld[0]).rtx1)))->unchanging)))
    {
      return gen_split_1061 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11168:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SFmode)
    goto L14720;
 L12509:
  if (((enum rtx_code) (x1)->code) == IF_THEN_ELSE)
    goto L12510;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L14720:
  switch (((enum rtx_code) (x1)->code))
    {
    case FLOAT_TRUNCATE:
      goto L11169;
    case FLOAT:
      goto L11335;
    default:
     break;
   }
  goto L12509;
 L11169:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L11170;
    }
  goto L12509;
 L11170:
  if (((target_flags & 0x00000001) && reload_completed
   && ((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) && (x86_sse_partial_regs_for_cvtsd2ss & (1 << ix86_tune))))
    {
      return gen_split_1105 (insn, operands);
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12509;
 L11335:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14722;
    case DImode:
      goto L14723;
    default:
      break;
    }
  goto L12509;
 L14722:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L11336;
    }
  goto L12509;
 L11336:
  if (((target_flags & 0x00000001) && reload_completed && (x86_sse_partial_regs & (1 << ix86_tune))
   && ((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1137 (insn, operands);
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12509;
 L14723:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L11341;
    }
  goto L12509;
 L11341:
  if (((target_flags & 0x00000001) && reload_completed && (x86_sse_partial_regs & (1 << ix86_tune))
   && ((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1139 (insn, operands);
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12509;
 L12510:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L12511;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12511:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[4] = x3;
      goto L12512;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12512:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[5] = x3;
      goto L12513;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12513:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L12514;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12514:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (nonmemory_operand (x2, SFmode))
    {
      operands[3] = x2;
      goto L12515;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12515:
  if ((((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) && reload_completed
   && (const0_operand (operands[2], ((enum machine_mode) (operands[0])->mode))
       || const0_operand (operands[3], ((enum machine_mode) (operands[0])->mode)))))
    {
      return gen_split_1504 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L14700:
  switch (((enum rtx_code) (x1)->code))
    {
    case MEM:
      goto L14724;
    case REG:
      goto L14725;
    default:
     break;
   }
 L14701:
  if (nonimmediate_operand (x1, DFmode))
    {
      operands[0] = x1;
      goto L11003;
    }
 L14707:
  if (register_operand (x1, DFmode))
    {
      operands[0] = x1;
      goto L12518;
    }
  goto L11006;
 L14724:
  if (push_operand (x1, DFmode))
    {
      operands[0] = x1;
      goto L10991;
    }
  goto L14701;
 L10991:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DFmode)
    goto L14726;
 L10999:
  if (general_operand (x1, DFmode))
    {
      operands[1] = x1;
      goto L11000;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14701;
 L14726:
  switch (((enum rtx_code) (x1)->code))
    {
    case REG:
      goto L14728;
    case FLOAT_EXTEND:
      goto L11125;
    default:
     break;
   }
  goto L10999;
 L14728:
  if (any_fp_register_operand (x1, DFmode))
    {
      operands[1] = x1;
      goto L10992;
    }
  goto L10999;
 L10992:
  if ((!0 && reload_completed))
    {
      return gen_split_1065 (insn, operands);
    }
 L10996:
  if ((0 && reload_completed))
    {
      return gen_split_1066 (insn, operands);
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L10999;
 L11125:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (fp_register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L11126;
    }
  goto L10999;
 L11126:
  if ((!0))
    {
      return gen_split_1093 (insn, operands);
    }
 L11131:
  if ((0))
    {
      return gen_split_1094 (insn, operands);
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L10999;
 L11000:
  if ((reload_completed))
    {
      return gen_split_1067 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14701;
 L14725:
  if (register_and_not_any_fp_reg_operand (x1, DFmode))
    {
      operands[0] = x1;
      goto L12373;
    }
  goto L14701;
 L12373:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DFmode
      && ((enum rtx_code) (x1)->code) == IF_THEN_ELSE)
    goto L12374;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14701;
 L12374:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (fcmov_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L12375;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14701;
 L12375:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (flags_reg_operand (x3, VOIDmode))
    {
      operands[4] = x3;
      goto L12376;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14701;
 L12376:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L12377;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14701;
 L12377:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L12378;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14701;
 L12378:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x2, DFmode))
    {
      operands[3] = x2;
      goto L12379;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14701;
 L12379:
  if ((!0 && reload_completed))
    {
      return gen_split_1483 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14701;
 L11003:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_operand (x1, DFmode))
    {
      operands[1] = x1;
      goto L11004;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14707;
 L11004:
  if ((reload_completed
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)
   && ! (((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= 8 && ((((operands[0])->u.fld[0]).rtuint)) <= (8 + 7)) || ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))) ||
  (((enum rtx_code) (operands[0])->code) == SUBREG
   && ((((enum rtx_code) ((((operands[0])->u.fld[0]).rtx1))->code) == REG) && (((((((((operands[0])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= 8 && (((((((operands[0])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= (8 + 7)) || (((((((((operands[0])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= (20 + 1) && (((((((operands[0])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || ((((((((operands[0])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (((((((operands[0])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))))))
   && ! (((((enum rtx_code) (operands[1])->code) == REG) && ((((((operands[1])->u.fld[0]).rtuint)) >= 8 && ((((operands[1])->u.fld[0]).rtuint)) <= (8 + 7)) || ((((((operands[1])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[1])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))) ||
  (((enum rtx_code) (operands[1])->code) == SUBREG
   && ((((enum rtx_code) ((((operands[1])->u.fld[0]).rtx1))->code) == REG) && (((((((((operands[1])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= 8 && (((((((operands[1])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= (8 + 7)) || (((((((((operands[1])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= (20 + 1) && (((((((operands[1])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || ((((((((operands[1])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (((((((operands[1])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))))))))
    {
      return gen_split_1068 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14707;
 L12518:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x1)->code) == IF_THEN_ELSE)
    goto L12519;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12519:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L12520;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12520:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[4] = x3;
      goto L12521;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12521:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[5] = x3;
      goto L12522;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12522:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L12523;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12523:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (nonmemory_operand (x2, DFmode))
    {
      operands[3] = x2;
      goto L12524;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12524:
  if ((((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) && reload_completed
   && (const0_operand (operands[2], ((enum machine_mode) (operands[0])->mode))
       || const0_operand (operands[3], ((enum machine_mode) (operands[0])->mode)))))
    {
      return gen_split_1505 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L14704:
  if (nonimmediate_operand (x1, QImode))
    {
      operands[0] = x1;
      goto L11956;
    }
 L14705:
  if (register_operand (x1, QImode))
    {
      operands[0] = x1;
      goto L12364;
    }
  goto L11006;
 L11956:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == QImode)
    goto L14729;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14705;
 L14729:
  switch (((enum rtx_code) (x1)->code))
    {
    case NE:
      goto L11957;
    case EQ:
      goto L11972;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14705;
 L11957:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ix86_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L11958;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14705;
 L11958:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L11959;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14705;
 L11959:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L11960;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14705;
 L11960:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    {
      return gen_split_1334 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14705;
 L11972:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ix86_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L11973;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14705;
 L11973:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L11974;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14705;
 L11974:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L11975;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14705;
 L11975:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    {
      return gen_split_1336 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14705;
 L12364:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == QImode
      && ((enum rtx_code) (x1)->code) == IF_THEN_ELSE)
    goto L12365;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12365:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ix86_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L12366;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12366:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (flags_reg_operand (x3, VOIDmode))
    {
      operands[4] = x3;
      goto L12367;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12367:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L12368;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12368:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[2] = x2;
      goto L12369;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12369:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[3] = x2;
      goto L12370;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L12370:
  if ((((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && !(x86_partial_reg_stall & (1 << ix86_tune))&& reload_completed))
    {
      return gen_split_1480 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11006;
 L11007:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_operand (x1, VOIDmode))
    {
      operands[1] = x1;
      goto L11008;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11010;
 L11008:
  if ((reload_completed
   && (((enum machine_mode) (operands[0])->mode) == XFmode
       || ((enum machine_mode) (operands[0])->mode) == DFmode)
   && !((((enum rtx_code) (operands[1])->code) == REG) && ((((((operands[1])->u.fld[0]).rtuint)) >= 8 && ((((operands[1])->u.fld[0]).rtuint)) <= (8 + 7)) || ((((((operands[1])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[1])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))))))
    {
      return gen_split_1070 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11010;
 L11011:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == XFmode)
    goto L14731;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L14731:
  switch (((enum rtx_code) (x1)->code))
    {
    case REG:
      goto L14733;
    case FLOAT_EXTEND:
      goto L11135;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L14733:
  if (any_fp_register_operand (x1, XFmode))
    {
      operands[1] = x1;
      goto L11012;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L11012:
  if ((!0))
    {
      return gen_split_1071 (insn, operands);
    }
 L11016:
  if ((0))
    {
      return gen_split_1072 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L11135:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SFmode:
      goto L14734;
    case DFmode:
      goto L14736;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L14734:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14738;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L14738:
  if (fp_register_operand (x2, SFmode))
    {
      operands[1] = x2;
      return gen_split_1095 (insn, operands);
    }
 L14739:
  if (fp_register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L11140;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L11140:
  if ((0))
    {
      return gen_split_1096 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L14736:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14740;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L14740:
  if (fp_register_operand (x2, DFmode))
    {
      operands[1] = x2;
      return gen_split_1097 (insn, operands);
    }
 L14741:
  if (fp_register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L11149;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L11149:
  if ((0))
    {
      return gen_split_1098 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L14709:
  if ((((x1)->u.fld[0]).rtint) == 17)
    goto L11497;
 L14708:
  if (fp_register_operand (x1, VOIDmode))
    {
      operands[0] = x1;
      goto L11344;
    }
  goto L11018;
 L11497:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x1)->code) == COMPARE)
    goto L11498;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14708;
 L11498:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case ZERO_EXTRACT:
      goto L11499;
    case AND:
      goto L11507;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14708;
 L11499:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L11500;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14708;
 L11500:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11501;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14708;
 L11501:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (const_int_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L11502;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14708;
 L11502:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)))
    {
      return gen_split_1208 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14708;
 L11507:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L11508;
    }
 L11514:
  if (nonimmediate_operand (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L11515;
    }
 L12550:
  if (aligned_operand (x3, HImode))
    {
      operands[0] = x3;
      goto L12551;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14708;
 L11508:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11509;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11514;
 L11509:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (reload_completed
    && ((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) < 4)
    && ((ix86_match_ccmode (insn, CCZmode)
      && !(((operands[1])->u.hwint[0]) & ~(255 << 8)))
 || (ix86_match_ccmode (insn, CCNOmode)
     && !(((operands[1])->u.hwint[0]) & ~(127 << 8))))
    && ((enum machine_mode) (operands[0])->mode) != QImode))
    {
      return gen_split_1209 (insn, operands);
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11514;
 L11515:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11516;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12550;
 L11516:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (reload_completed
    && (!(((enum rtx_code) (operands[0])->code) == REG) || (0 ? ((((enum rtx_code) (operands[0])->code) == REG) && (((((operands[0])->u.fld[0]).rtuint)) < 8 || (((((operands[0])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) < 4)))
    && ((ix86_match_ccmode (insn, CCZmode)
  && !(((operands[1])->u.hwint[0]) & ~255))
 || (ix86_match_ccmode (insn, CCNOmode)
     && !(((operands[1])->u.hwint[0]) & ~127)))
    && ((enum machine_mode) (operands[0])->mode) != QImode))
    {
      return gen_split_1210 (insn, operands);
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12550;
 L12551:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L12552;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14708;
 L12552:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (! (x86_partial_reg_stall & (1 << ix86_tune)) && reload_completed
   && ix86_match_ccmode (insn, ((operands[1])->u.hwint[0]) >= 0 ? CCNOmode : CCZmode)
   && ! (x86_fast_prefix & (1 << ix86_tune))
   && ! optimize_size))
    {
      return gen_split_1513 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14708;
 L11344:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x1)->code) == FLOAT)
    goto L11345;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L11345:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L11346;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L11346:
  if ((reload_completed && (mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_VECTOR_FLOAT)))
    {
      return gen_split_1143 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L11018;
 L11963:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L11964;
    }
  goto L13069;
 L11964:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == QImode)
    goto L14742;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L14742:
  switch (((enum rtx_code) (x1)->code))
    {
    case NE:
      goto L11965;
    case EQ:
      goto L11980;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11965:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ix86_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L11966;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11966:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L11967;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11967:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L11968;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11968:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    {
      return gen_split_1335 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11980:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (ix86_comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L11981;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11981:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L11982;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11982:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L11983;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11983:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)])
    {
      return gen_split_1337 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11986:
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case IF_THEN_ELSE:
      goto L11987;
    case UNSPEC:
      goto L14744;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11987:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case NE:
      goto L11988;
    case EQ:
      goto L11999;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11988:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ix86_comparison_operator (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L11989;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11989:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x4)->code) == REG
      && (((x4)->u.fld[0]).rtint) == 17)
    goto L11990;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11990:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (0)])
    goto L11991;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11991:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L11992;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11992:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == LABEL_REF)
    goto L11993;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11993:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[1] = x3;
  goto L11994;
 L11994:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == PC)
    {
      return gen_split_1356 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11999:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (ix86_comparison_operator (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L12000;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12000:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x4)->code) == REG
      && (((x4)->u.fld[0]).rtint) == 17)
    goto L12001;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12001:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (0)])
    goto L12002;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12002:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L12003;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12003:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == LABEL_REF)
    goto L12004;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12004:
  x3 = (((x2)->u.fld[0]).rtx1);
  operands[1] = x3;
  goto L12005;
 L12005:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x2)->code) == PC)
    {
      return gen_split_1357 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L14744:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x1)->u.fld[1]).rtint) == 76)
    goto L12103;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12103:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14745;
    case DImode:
      goto L14746;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L14745:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L12104;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12104:
  if ((reload_completed))
    {
      return gen_split_1379 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L14746:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L12109;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12109:
  if ((reload_completed))
    {
      return gen_split_1380 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11019:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_operand (x1, VOIDmode))
    {
      operands[1] = x1;
      goto L11020;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13077;
 L11020:
  if ((reload_completed
   && (((enum rtx_code) (operands[0])->code) != MEM || ((enum rtx_code) (operands[1])->code) != MEM)
   && ((enum machine_mode) (operands[0])->mode) == XFmode
   && ! (((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= 8 && ((((operands[0])->u.fld[0]).rtuint)) <= (8 + 7)) || ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))) ||
  (((enum rtx_code) (operands[0])->code) == SUBREG
   && ((((enum rtx_code) ((((operands[0])->u.fld[0]).rtx1))->code) == REG) && (((((((((operands[0])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= 8 && (((((((operands[0])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= (8 + 7)) || (((((((((operands[0])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= (20 + 1) && (((((((operands[0])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || ((((((((operands[0])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (((((((operands[0])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))))))
   && ! (((((enum rtx_code) (operands[1])->code) == REG) && ((((((operands[1])->u.fld[0]).rtuint)) >= 8 && ((((operands[1])->u.fld[0]).rtuint)) <= (8 + 7)) || ((((((operands[1])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[1])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))) ||
  (((enum rtx_code) (operands[1])->code) == SUBREG
   && ((((enum rtx_code) ((((operands[1])->u.fld[0]).rtx1))->code) == REG) && (((((((((operands[1])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= 8 && (((((((operands[1])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= (8 + 7)) || (((((((((operands[1])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= (20 + 1) && (((((((operands[1])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || ((((((((operands[1])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (((((((operands[1])->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))))))))
    {
      return gen_split_1073 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13077;
 L13078:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (register_operand (x1, VOIDmode))
    {
      operands[1] = x1;
      goto L13079;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L13079:
  if ((!0 && reload_completed
   && (((((enum rtx_code) (operands[1])->code) == REG) && ((((((operands[1])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[1])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) || ((((enum rtx_code) (operands[1])->code) == REG) && (((((operands[1])->u.fld[0]).rtuint)) >= (((20 + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((20 + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1594 (insn, operands);
    }
 L13083:
  if ((0 && reload_completed
   && (((((enum rtx_code) (operands[1])->code) == REG) && ((((((operands[1])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[1])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) || ((((enum rtx_code) (operands[1])->code) == REG) && (((((operands[1])->u.fld[0]).rtuint)) >= (((20 + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((20 + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1595 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11357:
  x1 = (((x0)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case PLUS:
      goto L11358;
    case NOT:
      goto L12563;
    case IF_THEN_ELSE:
      goto L12568;
    case SUBREG:
    case MEM:
      goto L11023;
    default:
      goto L12155;
   }
 L11023:
  if (memory_operand (x1, VOIDmode))
    {
      operands[1] = x1;
      goto L11024;
    }
 L12155:
  if (binary_fp_operator (x1, VOIDmode))
    {
      operands[3] = x1;
      goto L12156;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11358:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case PLUS:
      goto L11393;
    case MULT:
      goto L11376;
    default:
     break;
   }
  goto L12155;
 L11393:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == MULT)
    goto L11394;
  if (index_register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11360;
    }
  goto L12155;
 L11394:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (index_register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L11395;
    }
  goto L12155;
 L11395:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const248_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L11396;
    }
  goto L12155;
 L11396:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[3] = x3;
      goto L11397;
    }
  goto L12155;
 L11397:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (immediate_operand (x2, VOIDmode))
    {
      operands[4] = x2;
      goto L11398;
    }
  goto L12155;
 L11398:
  if (((((enum machine_mode) (operands[0])->mode) == QImode || ((enum machine_mode) (operands[0])->mode) == HImode
    || (0 && ((enum machine_mode) (operands[0])->mode) == SImode))
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[1])->mode)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[3])->mode)&& reload_completed))
    {
      return gen_split_1160 (insn, operands);
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12155;
 L11360:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L11361;
    }
  goto L12155;
 L11361:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (immediate_operand (x2, VOIDmode))
    {
      operands[3] = x2;
      goto L11362;
    }
  goto L12155;
 L11362:
  if (((((enum machine_mode) (operands[0])->mode) == QImode || ((enum machine_mode) (operands[0])->mode) == HImode
    || (0 && ((enum machine_mode) (operands[0])->mode) == SImode))
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[1])->mode)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[2])->mode)
   && (((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[3])->mode)
       || ((enum machine_mode) (operands[3])->mode) == VOIDmode)&& reload_completed))
    {
      return gen_split_1156 (insn, operands);
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12155;
 L11376:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (index_register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11377;
    }
  goto L12155;
 L11377:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const248_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L11378;
    }
  goto L12155;
 L11378:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, VOIDmode))
    {
      operands[3] = x2;
      goto L11379;
    }
  goto L12155;
 L11379:
  if (((((enum machine_mode) (operands[0])->mode) == QImode || ((enum machine_mode) (operands[0])->mode) == HImode
    || (0 && ((enum machine_mode) (operands[0])->mode) == SImode))
   && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
   && ((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[1])->mode)
   && (((enum machine_mode) (operands[0])->mode) == ((enum machine_mode) (operands[3])->mode)
       || ((enum machine_mode) (operands[3])->mode) == VOIDmode)&& reload_completed))
    {
      return gen_split_1158 (insn, operands);
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12155;
 L12563:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L12564;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12564:
  if ((! (x86_partial_reg_stall & (1 << ix86_tune)) && reload_completed
   && (((enum machine_mode) (operands[0])->mode) == HImode
       || (((enum machine_mode) (operands[0])->mode) == QImode
    && ((x86_promote_QImode & (1 << ix86_tune)) || optimize_size)))))
    {
      return gen_split_1515 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12568:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (comparison_operator (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L12569;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12569:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L12570;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12570:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L12571;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12571:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[2] = x2;
      goto L12572;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12572:
  x2 = (((x1)->u.fld[2]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[3] = x2;
      goto L12573;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12573:
  if ((! (x86_partial_reg_stall & (1 << ix86_tune)) && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))
   && (((enum machine_mode) (operands[0])->mode) == HImode
       || (((enum machine_mode) (operands[0])->mode) == QImode
    && ((x86_promote_QImode & (1 << ix86_tune)) || optimize_size)))))
    {
      return gen_split_1516 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L11024:
  if ((reload_completed
   && ((enum rtx_code) (operands[1])->code) == MEM
   && (((enum machine_mode) (operands[0])->mode) == XFmode
       || ((enum machine_mode) (operands[0])->mode) == SFmode || ((enum machine_mode) (operands[0])->mode) == DFmode)
   && ((enum rtx_code) ((((operands[1])->u.fld[0]).rtx1))->code) == SYMBOL_REF
   && ((((((operands[1])->u.fld[0]).rtx1)))->unchanging)))
    {
      return gen_split_1074 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12156:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x2)->code) == FLOAT)
    goto L12157;
  if (register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L12164;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12157:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L12158;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12158:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[2] = x2;
      goto L12159;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12159:
  if (((target_flags & 0x00000001) && reload_completed
   && (mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_VECTOR_FLOAT)))
    {
      return gen_split_1393 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12164:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == FLOAT)
    goto L12165;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12165:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L12166;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L12166:
  if (((target_flags & 0x00000001) && reload_completed
   && (mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_VECTOR_FLOAT)))
    {
      return gen_split_1394 (insn, operands);
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L13069;
 L14710:
  if (register_operand (x1, V4SFmode))
    {
      operands[0] = x1;
      goto L13070;
    }
  goto ret0;
 L13070:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (zero_extended_scalar_load_operand (x1, V4SFmode))
    {
      operands[1] = x1;
      goto L13071;
    }
  goto ret0;
 L13071:
  if ((((target_flags & 0x00004000) != 0)))
    {
      return gen_split_1580 (insn, operands);
    }
  goto ret0;
 L14711:
  if (register_operand (x1, V2DFmode))
    {
      operands[0] = x1;
      goto L13074;
    }
  goto ret0;
 L13074:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (zero_extended_scalar_load_operand (x1, V2DFmode))
    {
      operands[1] = x1;
      goto L13075;
    }
  goto ret0;
 L13075:
  if ((((target_flags & 0x00008000) != 0)))
    {
      return gen_split_1581 (insn, operands);
    }
  goto ret0;
 L14712:
  if (nonimmediate_operand (x1, TImode))
    {
      operands[0] = x1;
      goto L13086;
    }
  goto ret0;
 L13086:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_operand (x1, TImode))
    {
      operands[1] = x1;
      goto L13087;
    }
  goto ret0;
 L13087:
  if ((reload_completed && !((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))
   && !((((enum rtx_code) (operands[1])->code) == REG) && ((((((operands[1])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[1])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1596 (insn, operands);
    }
  goto ret0;
 L14713:
  if (nonimmediate_operand (x1, TFmode))
    {
      operands[0] = x1;
      goto L13090;
    }
  goto ret0;
 L13090:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (general_operand (x1, TFmode))
    {
      operands[1] = x1;
      goto L13091;
    }
  goto ret0;
 L13091:
  if ((reload_completed && !((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))
   && !((((enum rtx_code) (operands[1])->code) == REG) && ((((((operands[1])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[1])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1597 (insn, operands);
    }
  goto ret0;
 ret0:
  return 0;
}
static rtx
split_2 (rtx x0 , rtx insn )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  rtx tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14747;
    case HImode:
      goto L14748;
    case DImode:
      goto L14749;
    case SFmode:
      goto L14751;
    case DFmode:
      goto L14753;
    case XFmode:
      goto L14762;
    default:
      break;
    }
 L11813:
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L11814;
 L11420:
  if (register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L11421;
    }
 L11527:
  if (ext_register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L11528;
    }
 L11543:
  if (register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L11544;
    }
 L11639:
  if (memory_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L11640;
    }
 L12555:
  if (register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L12556;
    }
  goto ret0;
 L14747:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L11028;
    }
 L14755:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L11261;
    }
  goto L11813;
 L11028:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L11029;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14755;
 L11029:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case HImode:
      goto L14765;
    case QImode:
      goto L14766;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14755;
 L14765:
  if (register_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L11030;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14755;
 L11030:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11031;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14755;
 L11031:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed && (x86_zero_extend_with_and & (1 << ix86_tune)) && !optimize_size))
    {
      return gen_split_1076 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14755;
 L14766:
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L11058;
    }
 L14767:
  if (register_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L11072;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14755;
 L11058:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11059;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14767;
 L11059:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14768;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14767;
 L14768:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14770;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14767;
 L14770:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14772;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14767;
 L14772:
  if ((reload_completed
   && (!(x86_zero_extend_with_and & (1 << ix86_tune)) || optimize_size)
   && (!(((enum rtx_code) (operands[1])->code) == REG) || (0 ? ((((enum rtx_code) (operands[1])->code) == REG) && (((((operands[1])->u.fld[0]).rtuint)) < 8 || (((((operands[1])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (operands[1])->code) == REG) && (((operands[1])->u.fld[0]).rtuint) < 4)))))
    {
      return gen_split_1082 (insn, operands);
    }
 L14773:
  if ((reload_completed
   && (0 ? ((((enum rtx_code) (operands[0])->code) == REG) && (((((operands[0])->u.fld[0]).rtuint)) < 8 || (((((operands[0])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) < 4))
   && ((0 ? ((((enum rtx_code) (operands[1])->code) == REG) && (((((operands[1])->u.fld[0]).rtuint)) < 8 || (((((operands[1])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (operands[1])->code) == REG) && (((operands[1])->u.fld[0]).rtuint) < 4)) || ((enum rtx_code) (operands[1])->code) == MEM)
   && ((x86_zero_extend_with_and & (1 << ix86_tune)) && !optimize_size)
   && !reg_overlap_mentioned_p (operands[0], operands[1])))
    {
      return gen_split_1083 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14767;
 L11072:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11073;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14755;
 L11073:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
   && true_regnum (operands[0]) == true_regnum (operands[1])))
    {
      return gen_split_1084 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14755;
 L11261:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L11262;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11262:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11263;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11263:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11264;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11264:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && !reload_completed && !reload_in_progress
   && !((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode))&& 1))
    {
      return gen_split_1124 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L14748:
  if (register_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L11035;
    }
 L14756:
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L11304;
    }
  goto L11813;
 L11035:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L11036;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14756;
 L11036:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == QImode)
    goto L14774;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14756;
 L14774:
  if (nonimmediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L11037;
    }
 L14775:
  if (register_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L11051;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14756;
 L11037:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11038;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14775;
 L11038:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14776;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14775;
 L14776:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14778;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14775;
 L14778:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14780;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14775;
 L14780:
  if ((reload_completed
   && (!(x86_zero_extend_with_and & (1 << ix86_tune)) || optimize_size)
   && (!(((enum rtx_code) (operands[1])->code) == REG) || (0 ? ((((enum rtx_code) (operands[1])->code) == REG) && (((((operands[1])->u.fld[0]).rtuint)) < 8 || (((((operands[1])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (operands[1])->code) == REG) && (((operands[1])->u.fld[0]).rtuint) < 4)))))
    {
      return gen_split_1078 (insn, operands);
    }
 L14781:
  if ((reload_completed
   && (0 ? ((((enum rtx_code) (operands[0])->code) == REG) && (((((operands[0])->u.fld[0]).rtuint)) < 8 || (((((operands[0])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) < 4))
   && ((x86_zero_extend_with_and & (1 << ix86_tune)) && !optimize_size)
   && !reg_overlap_mentioned_p (operands[0], operands[1])))
    {
      return gen_split_1079 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14775;
 L11051:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11052;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14756;
 L11052:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
   && true_regnum (operands[0]) == true_regnum (operands[1])))
    {
      return gen_split_1080 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14756;
 L11304:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L11305;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11305:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11306;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11306:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11307;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11307:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return gen_split_1132 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L14749:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L11081;
    }
 L14750:
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L11088;
    }
 L14757:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L11413;
    }
  goto L11813;
 L11081:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L11082;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14750;
 L11082:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L11083;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14750;
 L11083:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11084;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14750;
 L11084:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && reload_completed
   && true_regnum (operands[0]) == true_regnum (operands[1])))
    {
      return gen_split_1087 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14750;
 L11088:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L14782;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L14782:
  switch (((enum rtx_code) (x2)->code))
    {
    case ZERO_EXTEND:
      goto L11089;
    case FIX:
      goto L11215;
    case PLUS:
      goto L11351;
    case MINUS:
      goto L11439;
    case NEG:
      goto L11593;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11089:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (general_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L11090;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11090:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11091;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11091:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && reload_completed
   && !((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) && !((((enum rtx_code) (operands[0])->code) == REG) && (((((operands[0])->u.fld[0]).rtuint)) >= (((20 + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((20 + 1) + 7) + 1) + 7)))))
    {
      return gen_split_1088 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11215:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11216;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11216:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11217;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11217:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_VECTOR_FLOAT)
   && !reload_completed && !reload_in_progress
   && (!((((target_flags & 0x00004000) != 0) && (((enum machine_mode) (operands[1])->mode)) == SFmode) || (((target_flags & 0x00008000) != 0) && (((enum machine_mode) (operands[1])->mode)) == DFmode)) || !0)&& 1))
    {
      return gen_split_1116 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11351:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L11352;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11352:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L11353;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11353:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11354;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11354:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && reload_completed))
    {
      return gen_split_1154 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11439:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L11440;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11440:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (general_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L11441;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11441:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11442;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11442:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && reload_completed))
    {
      return gen_split_1171 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11593:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (general_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L11594;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11594:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11595;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11595:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && reload_completed))
    {
      return gen_split_1234 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14757;
 L11413:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L14787;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L14787:
  switch (((enum rtx_code) (x2)->code))
    {
    case PLUS:
      goto L11414;
    case ZERO_EXTEND:
      goto L11430;
    case ASHIFT:
      goto L11871;
    case ASHIFTRT:
      goto L11932;
    case LSHIFTRT:
      goto L11950;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11414:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L11415;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11415:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x86_64_nonmemory_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L11416;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11416:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11417;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11417:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && reload_completed
   && true_regnum (operands[0]) != true_regnum (operands[1])))
    {
      return gen_split_1162 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11430:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == PLUS)
    goto L11431;
  if (((enum rtx_code) (x3)->code) == ASHIFT)
    goto L11914;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11431:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L11432;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11432:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonmemory_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L11433;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11433:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11434;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11434:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && reload_completed
   && true_regnum (operands[0]) != true_regnum (operands[1])))
    {
      return gen_split_1164 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11914:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L11915;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11915:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const_int_operand (x4, QImode))
    {
      operands[2] = x4;
      goto L11916;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11916:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11917;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11917:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && reload_completed
   && true_regnum (operands[0]) != true_regnum (operands[1])))
    {
      return gen_split_1289 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11871:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L11872;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11872:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L11873;
    }
 L11890:
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L11891;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11873:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11874;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L11890;
 L11874:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && reload_completed
   && true_regnum (operands[0]) != true_regnum (operands[1])))
    {
      return gen_split_1281 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[1]).rtx1);
  goto L11890;
 L11891:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11892;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11892:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && reload_completed))
    {
      return gen_split_1283 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11932:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L11933;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11933:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L11934;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11934:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11935;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11935:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && reload_completed))
    {
      return gen_split_1294 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11950:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L11951;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11951:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L11952;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11952:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11953;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11953:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && reload_completed))
    {
      return gen_split_1301 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L14751:
  if (memory_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L11153;
    }
 L14752:
  if (register_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L11161;
    }
 L14758:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14792;
  goto L11813;
 L11153:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode
      && ((enum rtx_code) (x2)->code) == FLOAT_TRUNCATE)
    goto L11154;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14752;
 L11154:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case DFmode:
      goto L14794;
    case XFmode:
      goto L14795;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14752;
 L14794:
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L11155;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14752;
 L11155:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11156;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14752;
 L11156:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L11157;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14752;
 L11157:
  if (((target_flags & 0x00000001)))
    {
      return gen_split_1103 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14752;
 L14795:
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L11184;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14752;
 L11184:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11185;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14752;
 L11185:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L11186;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14752;
 L11186:
  if (((target_flags & 0x00000001)))
    {
      return gen_split_1108 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14752;
 L11161:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L14796;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L14796:
  switch (((enum rtx_code) (x2)->code))
    {
    case FLOAT_TRUNCATE:
      goto L11162;
    case UNSPEC:
      goto L14799;
    case IF_THEN_ELSE:
      goto L12384;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L11162:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case DFmode:
      goto L14800;
    case XFmode:
      goto L14802;
    default:
      break;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L14800:
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L11163;
    }
 L14801:
  if (fp_register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L11176;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L11163:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11164;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14801;
 L11164:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[2] = x2;
  goto L11165;
 L11165:
  if (((target_flags & 0x00000001) && reload_completed
   && ((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))
   && !((((enum rtx_code) (operands[1])->code) == REG) && (((operands[1])->u.fld[0]).rtuint) >= 8 && (((operands[1])->u.fld[0]).rtuint) <= (8 + 7))))
    {
      return gen_split_1104 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14801;
 L11176:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11177;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L11177:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L11178;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L11178:
  if (((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1106 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L14802:
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L11192;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L11192:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11193;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L11193:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, SFmode))
    {
      operands[2] = x2;
      goto L11194;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L11194:
  if (((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1109 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L14799:
  if ((((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 80)
    goto L12189;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12189:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L12190;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12190:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12191;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12191:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L12192;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12192:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 81)
    goto L12193;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12193:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2])
      && (find_regno_note (insn, REG_UNUSED, (((operands[0])->u.fld[0]).rtuint))
   && !reload_completed && !reload_in_progress))
    {
      return gen_split_1405 (insn, operands);
    }
 L12202:
  if (rtx_equal_p (x3, operands[2])
      && (find_regno_note (insn, REG_UNUSED, (((operands[1])->u.fld[0]).rtuint))
   && !reload_completed && !reload_in_progress))
    {
      return gen_split_1406 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12384:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case LT:
      goto L12385;
    case GT:
      goto L12429;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12385:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SFmode))
    {
      operands[1] = x4;
      goto L12386;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12386:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[2] = x4;
      goto L12387;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12387:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[3] = x3;
      goto L12388;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12388:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[4] = x3;
      goto L12389;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12389:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12390;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12390:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) && reload_completed
   && ((operands_match_p (operands[1], operands[3])
 && operands_match_p (operands[2], operands[4]))
       || (operands_match_p (operands[1], operands[4])
    && operands_match_p (operands[2], operands[3])))))
    {
      return gen_split_1486 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12429:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SFmode))
    {
      operands[1] = x4;
      goto L12430;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12430:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[2] = x4;
      goto L12431;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12431:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[3] = x3;
      goto L12432;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12432:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x3, SFmode))
    {
      operands[4] = x3;
      goto L12433;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12433:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12434;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L12434:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) && reload_completed
   && ((operands_match_p (operands[1], operands[3])
 && operands_match_p (operands[2], operands[4]))
       || (operands_match_p (operands[1], operands[4])
    && operands_match_p (operands[2], operands[3])))))
    {
      return gen_split_1496 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14758;
 L14792:
  if (fp_register_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L11626;
    }
 L14793:
  if (register_and_not_fp_reg_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L11633;
    }
  goto L11813;
 L11626:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L14803;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L14803:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L11627;
    case ABS:
      goto L11739;
    case IF_THEN_ELSE:
      goto L12395;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L11627:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L11628;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L11628:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11629;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L11629:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1242 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L11739:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L11740;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L11740:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11741;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L11741:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1259 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12395:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case LT:
      goto L12396;
    case GT:
      goto L12440;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12396:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SFmode))
    {
      operands[1] = x4;
      goto L12397;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12397:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (register_operand (x4, SFmode))
    {
      operands[2] = x4;
      goto L12398;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12398:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[3] = x3;
      goto L12399;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12399:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[4] = x3;
      goto L12400;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12400:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12401;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12401:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
   && ((operands_match_p (operands[1], operands[3])
 && operands_match_p (operands[2], operands[4]))
       || (operands_match_p (operands[1], operands[4])
    && operands_match_p (operands[2], operands[3])))))
    {
      return gen_split_1491 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12440:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SFmode))
    {
      operands[1] = x4;
      goto L12441;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12441:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (register_operand (x4, SFmode))
    {
      operands[2] = x4;
      goto L12442;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12442:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[3] = x3;
      goto L12443;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12443:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[4] = x3;
      goto L12444;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12444:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12445;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L12445:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
   && ((operands_match_p (operands[1], operands[3])
 && operands_match_p (operands[2], operands[4]))
       || (operands_match_p (operands[1], operands[4])
    && operands_match_p (operands[2], operands[3])))))
    {
      return gen_split_1497 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14793;
 L11633:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L14806;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L14806:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L11634;
    case ABS:
      goto L11746;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11634:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L11635;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11635:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11636;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11636:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1243 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11746:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L11747;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11747:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11748;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11748:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1260 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L14753:
  if (memory_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L11198;
    }
 L14754:
  if (register_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L11206;
    }
 L14760:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14808;
  goto L11813;
 L11198:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == FLOAT_TRUNCATE)
    goto L11199;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14754;
 L11199:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L11200;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14754;
 L11200:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11201;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14754;
 L11201:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L11202;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14754;
 L11202:
  if (((target_flags & 0x00000001)))
    {
      return gen_split_1111 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14754;
 L11206:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L14810;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L14810:
  switch (((enum rtx_code) (x2)->code))
    {
    case FLOAT_TRUNCATE:
      goto L11207;
    case UNSPEC:
      goto L14813;
    case IF_THEN_ELSE:
      goto L12406;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L11207:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L11208;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L11208:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11209;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L11209:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, DFmode))
    {
      operands[2] = x2;
      goto L11210;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L11210:
  if (((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1112 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L14813:
  if ((((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 80)
    goto L12171;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12171:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x3)->mode) == DFmode)
    goto L14815;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L14815:
  if (((enum rtx_code) (x3)->code) == FLOAT_EXTEND)
    goto L12208;
  if (register_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L12172;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12208:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SFmode))
    {
      operands[2] = x4;
      goto L12209;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12209:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12210;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12210:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L12211;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12211:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 81)
    goto L12212;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12212:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum machine_mode) (x3)->mode) == DFmode
      && ((enum rtx_code) (x3)->code) == FLOAT_EXTEND)
    goto L12213;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12213:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[2])
      && (find_regno_note (insn, REG_UNUSED, (((operands[0])->u.fld[0]).rtuint))
   && !reload_completed && !reload_in_progress))
    {
      return gen_split_1407 (insn, operands);
    }
 L12224:
  if (rtx_equal_p (x4, operands[2])
      && (find_regno_note (insn, REG_UNUSED, (((operands[1])->u.fld[0]).rtuint))
   && !reload_completed && !reload_in_progress))
    {
      return gen_split_1408 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12172:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12173;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12173:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L12174;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12174:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 81)
    goto L12175;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12175:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2])
      && (find_regno_note (insn, REG_UNUSED, (((operands[0])->u.fld[0]).rtuint))
   && !reload_completed && !reload_in_progress))
    {
      return gen_split_1403 (insn, operands);
    }
 L12184:
  if (rtx_equal_p (x3, operands[2])
      && (find_regno_note (insn, REG_UNUSED, (((operands[1])->u.fld[0]).rtuint))
   && !reload_completed && !reload_in_progress))
    {
      return gen_split_1404 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12406:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case LT:
      goto L12407;
    case GT:
      goto L12451;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12407:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DFmode))
    {
      operands[1] = x4;
      goto L12408;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12408:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[2] = x4;
      goto L12409;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12409:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[3] = x3;
      goto L12410;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12410:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[4] = x3;
      goto L12411;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12411:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12412;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12412:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) && reload_completed
   && ((operands_match_p (operands[1], operands[3])
 && operands_match_p (operands[2], operands[4]))
       || (operands_match_p (operands[1], operands[4])
    && operands_match_p (operands[2], operands[3])))))
    {
      return gen_split_1493 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12451:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DFmode))
    {
      operands[1] = x4;
      goto L12452;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12452:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[2] = x4;
      goto L12453;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12453:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[3] = x3;
      goto L12454;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12454:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x3, DFmode))
    {
      operands[4] = x3;
      goto L12455;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12455:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12456;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L12456:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) && reload_completed
   && ((operands_match_p (operands[1], operands[3])
 && operands_match_p (operands[2], operands[4]))
       || (operands_match_p (operands[1], operands[4])
    && operands_match_p (operands[2], operands[3])))))
    {
      return gen_split_1499 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14760;
 L14808:
  if (fp_register_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L11683;
    }
 L14809:
  if (register_and_not_fp_reg_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L11690;
    }
  goto L11813;
 L11683:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L14816;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L14816:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L11684;
    case ABS:
      goto L11787;
    case IF_THEN_ELSE:
      goto L12417;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L11684:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L11685;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L11685:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11686;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L11686:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1250 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L11787:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L11788;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L11788:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11789;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L11789:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1266 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12417:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum rtx_code) (x3)->code))
    {
    case LT:
      goto L12418;
    case GT:
      goto L12462;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12418:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DFmode))
    {
      operands[1] = x4;
      goto L12419;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12419:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (register_operand (x4, DFmode))
    {
      operands[2] = x4;
      goto L12420;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12420:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[3] = x3;
      goto L12421;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12421:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[4] = x3;
      goto L12422;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12422:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12423;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12423:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
   && ((operands_match_p (operands[1], operands[3])
 && operands_match_p (operands[2], operands[4]))
       || (operands_match_p (operands[1], operands[4])
    && operands_match_p (operands[2], operands[3])))))
    {
      return gen_split_1494 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12462:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DFmode))
    {
      operands[1] = x4;
      goto L12463;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12463:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (register_operand (x4, DFmode))
    {
      operands[2] = x4;
      goto L12464;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12464:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[3] = x3;
      goto L12465;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12465:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[4] = x3;
      goto L12466;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12466:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12467;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L12467:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
   && ((operands_match_p (operands[1], operands[3])
 && operands_match_p (operands[2], operands[4]))
       || (operands_match_p (operands[1], operands[4])
    && operands_match_p (operands[2], operands[3])))))
    {
      return gen_split_1500 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14809;
 L11690:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L14819;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L14819:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L11691;
    case ABS:
      goto L11794;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11691:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L11692;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11692:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11693;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11693:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && (target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1251 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11794:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L11795;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11795:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11796;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11796:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && (target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1267 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L14762:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14821;
 L14764:
  if (register_operand (x2, XFmode))
    {
      operands[0] = x2;
      goto L12228;
    }
  goto L11813;
 L14821:
  if (fp_register_operand (x2, XFmode))
    {
      operands[0] = x2;
      goto L11697;
    }
 L14822:
  if (register_and_not_fp_reg_operand (x2, XFmode))
    {
      operands[0] = x2;
      goto L11704;
    }
  goto L14764;
 L11697:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode)
    goto L14823;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14822;
 L14823:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L11698;
    case ABS:
      goto L11801;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14822;
 L11698:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L11699;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14822;
 L11699:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11700;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14822;
 L11700:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1253 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14822;
 L11801:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L11802;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14822;
 L11802:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11803;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14822;
 L11803:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1269 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14822;
 L11704:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode)
    goto L14825;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14764;
 L14825:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L11705;
    case ABS:
      goto L11808;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14764;
 L11705:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L11706;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14764;
 L11706:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11707;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14764;
 L11707:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1254 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14764;
 L11808:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, XFmode))
    {
      operands[1] = x3;
      goto L11809;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14764;
 L11809:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11810;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14764;
 L11810:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && reload_completed))
    {
      return gen_split_1270 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14764;
 L12228:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 80)
    goto L12229;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L12229:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, XFmode))
    {
      operands[2] = x3;
      goto L12230;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L12230:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12231;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L12231:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L12232;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L12232:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 81)
    goto L12233;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L12233:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2])
      && (find_regno_note (insn, REG_UNUSED, (((operands[0])->u.fld[0]).rtuint))
   && !reload_completed && !reload_in_progress))
    {
      return gen_split_1409 (insn, operands);
    }
 L12242:
  if (rtx_equal_p (x3, operands[2])
      && (find_regno_note (insn, REG_UNUSED, (((operands[1])->u.fld[0]).rtuint))
   && !reload_completed && !reload_in_progress))
    {
      return gen_split_1410 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11813;
 L11814:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == COMPARE)
    goto L11815;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11420;
 L11815:
  x3 = (((x2)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x3)->mode))
    {
    case DImode:
      goto L14827;
    case SImode:
      goto L14828;
    case HImode:
      goto L14829;
    case QImode:
      goto L14830;
    default:
      break;
    }
 L12537:
  if (((enum rtx_code) (x3)->code) == AND)
    goto L12538;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11420;
 L14827:
  if (((enum rtx_code) (x3)->code) == NOT)
    goto L11816;
  goto L12537;
 L11816:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, DImode))
    {
      operands[1] = x4;
      goto L11817;
    }
  goto L12537;
 L11817:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L11818;
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11818:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11819;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11819:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L11820;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11820:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == NOT)
    goto L11821;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11821:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (0 && ix86_match_ccmode (insn, CCNOmode)))
    {
      return gen_split_1272 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L14828:
  if (((enum rtx_code) (x3)->code) == NOT)
    goto L11827;
  goto L12537;
 L11827:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode)
    goto L14831;
  goto L12537;
 L14831:
  if (nonimmediate_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L11828;
    }
 L14832:
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L11839;
    }
  goto L12537;
 L11828:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L11829;
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14832;
 L11829:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11830;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14832;
 L11830:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L11831;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14832;
 L11831:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == NOT)
    goto L11832;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14832;
 L11832:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (ix86_match_ccmode (insn, CCNOmode)))
    {
      return gen_split_1274 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  x4 = (((x3)->u.fld[0]).rtx1);
  goto L14832;
 L11839:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L11840;
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11840:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11841;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11841:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L11842;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11842:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L11843;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11843:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == NOT)
    goto L11844;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11844:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1])
      && (ix86_match_ccmode (insn, CCNOmode)))
    {
      return gen_split_1275 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L14829:
  if (((enum rtx_code) (x3)->code) == NOT)
    goto L11850;
  goto L12537;
 L11850:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, HImode))
    {
      operands[1] = x4;
      goto L11851;
    }
  goto L12537;
 L11851:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L11852;
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11852:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11853;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11853:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L11854;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11854:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == NOT)
    goto L11855;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11855:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (ix86_match_ccmode (insn, CCNOmode)))
    {
      return gen_split_1277 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L14830:
  if (((enum rtx_code) (x3)->code) == NOT)
    goto L11861;
  goto L12537;
 L11861:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, QImode))
    {
      operands[1] = x4;
      goto L11862;
    }
  goto L12537;
 L11862:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L11863;
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11863:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11864;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11864:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L11865;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11865:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == NOT)
    goto L11866;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L11866:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && (ix86_match_ccmode (insn, CCNOmode)))
    {
      return gen_split_1279 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12537;
 L12538:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (aligned_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L12539;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11420;
 L12539:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (const_int_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L12540;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11420;
 L12540:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L12541;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11420;
 L12541:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12542;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11420;
 L12542:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L12543;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11420;
 L12543:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == AND)
    goto L12544;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11420;
 L12544:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L12545;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11420;
 L12545:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2])
      && (! (x86_partial_reg_stall & (1 << ix86_tune)) && reload_completed
   && ix86_match_ccmode (insn, ((operands[2])->u.hwint[0]) >= 0 ? CCNOmode : CCZmode)
   && ! optimize_size
   && ((((enum machine_mode) (operands[0])->mode) == HImode && ! (x86_fast_prefix & (1 << ix86_tune)))
       || (((enum machine_mode) (operands[0])->mode) == QImode && (x86_promote_QImode & (1 << ix86_tune))))))
    {
      return gen_split_1512 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11420;
 L11421:
  x2 = (((x1)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case PLUS:
      goto L11422;
    case AND:
      goto L11521;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11527;
 L11422:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11423;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11527;
 L11423:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L11424;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11527;
 L11424:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11425;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11527;
 L11425:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
   && true_regnum (operands[0]) != true_regnum (operands[1])))
    {
      return gen_split_1163 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11527;
 L11521:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L11522;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11527;
 L11522:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == CONST_INT
      && ((x3)->u.hwint[0]) == -65536L)
    goto L11523;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11527;
 L11523:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11524;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11527;
 L11524:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (optimize_size || ((x86_fast_prefix & (1 << ix86_tune)) && !(x86_partial_reg_stall & (1 << ix86_tune)))))
    {
      return gen_split_1213 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11527;
 L11528:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == AND)
    goto L11529;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11543;
 L11529:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L11530;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11543;
 L11530:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == CONST_INT)
    goto L14833;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11543;
 L14833:
  if ((int) ((x3)->u.hwint[0]) == ((x3)->u.hwint[0]))
    switch ((int) ((x3)->u.hwint[0]))
      {
      case -256L:
        goto L11531;
      case -65281L:
        goto L11539;
      default:
        break;
      }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11543;
 L11531:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11532;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11543;
 L11532:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((optimize_size || !(x86_partial_reg_stall & (1 << ix86_tune))) && reload_completed))
    {
      return gen_split_1214 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11543;
 L11539:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11540;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11543;
 L11540:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((optimize_size || !(x86_partial_reg_stall & (1 << ix86_tune))) && reload_completed))
    {
      return gen_split_1215 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11543;
 L11544:
  x2 = (((x1)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case AND:
      goto L11545;
    case IOR:
      goto L11561;
    case XOR:
      goto L11577;
    case ASHIFT:
      goto L11897;
    default:
     break;
   }
 L12528:
  if (promotable_binary_operator (x2, VOIDmode))
    {
      operands[3] = x2;
      goto L12529;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11639;
 L11545:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11546;
    }
 L11553:
  if (general_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11554;
    }
  goto L12528;
 L11546:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L11547;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11553;
 L11547:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11548;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11553;
 L11548:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
    && ((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) < 4)
    && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
    && !(~((operands[2])->u.hwint[0]) & ~(255 << 8))
    && ((enum machine_mode) (operands[0])->mode) != QImode))
    {
      return gen_split_1218 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11553;
 L11554:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L11555;
    }
  goto L12528;
 L11555:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11556;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L12528;
 L11556:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
    && (0 ? ((((enum rtx_code) (operands[0])->code) == REG) && (((((operands[0])->u.fld[0]).rtuint)) < 8 || (((((operands[0])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) < 4))
    && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
    && !(~((operands[2])->u.hwint[0]) & ~255)
    && !(((operands[2])->u.hwint[0]) & 128)
    && ((enum machine_mode) (operands[0])->mode) != QImode))
    {
      return gen_split_1219 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L12528;
 L11561:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11562;
    }
 L11569:
  if (general_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11570;
    }
  goto L12528;
 L11562:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L11563;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11569;
 L11563:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11564;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11569;
 L11564:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
    && ((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) < 4)
    && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
    && !(((operands[2])->u.hwint[0]) & ~(255 << 8))
    && ((enum machine_mode) (operands[0])->mode) != QImode))
    {
      return gen_split_1224 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11569;
 L11570:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L11571;
    }
  goto L12528;
 L11571:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11572;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L12528;
 L11572:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
    && (0 ? ((((enum rtx_code) (operands[0])->code) == REG) && (((((operands[0])->u.fld[0]).rtuint)) < 8 || (((((operands[0])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) < 4))
    && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
    && !(((operands[2])->u.hwint[0]) & ~255)
    && (((operands[2])->u.hwint[0]) & 128)
    && ((enum machine_mode) (operands[0])->mode) != QImode))
    {
      return gen_split_1225 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L12528;
 L11577:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11578;
    }
 L11585:
  if (general_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11586;
    }
  goto L12528;
 L11578:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L11579;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11585;
 L11579:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11580;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11585;
 L11580:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
    && ((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) < 4)
    && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
    && !(((operands[2])->u.hwint[0]) & ~(255 << 8))
    && ((enum machine_mode) (operands[0])->mode) != QImode))
    {
      return gen_split_1231 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11585;
 L11586:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L11587;
    }
  goto L12528;
 L11587:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11588;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L12528;
 L11588:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
    && (0 ? ((((enum rtx_code) (operands[0])->code) == REG) && (((((operands[0])->u.fld[0]).rtuint)) < 8 || (((((operands[0])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) < 4))
    && (!(x86_partial_reg_stall & (1 << ix86_tune)) || optimize_size)
    && !(((operands[2])->u.hwint[0]) & ~255)
    && (((operands[2])->u.hwint[0]) & 128)
    && ((enum machine_mode) (operands[0])->mode) != QImode))
    {
      return gen_split_1232 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L12528;
 L11897:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (index_register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11898;
    }
 L11905:
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11906;
    }
  goto L12528;
 L11898:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L11899;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11905;
 L11899:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11900;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11905;
 L11900:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
   && true_regnum (operands[0]) != true_regnum (operands[1])))
    {
      return gen_split_1287 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L11905;
 L11906:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L11907;
    }
  goto L12528;
 L11907:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11908;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L12528;
 L11908:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed
   && true_regnum (operands[0]) != true_regnum (operands[1])))
    {
      return gen_split_1288 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L12528;
 L12529:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L12530;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11639;
 L12530:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (aligned_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L12531;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11639;
 L12531:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12532;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11639;
 L12532:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (! (x86_partial_reg_stall & (1 << ix86_tune)) && reload_completed
   && ((((enum machine_mode) (operands[0])->mode) == HImode
 && ((!optimize_size && !(x86_fast_prefix & (1 << ix86_tune)))
     || ((enum rtx_code) (operands[2])->code) != CONST_INT
     || (('K') == 'I' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 31 : ('K') == 'J' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 63 : ('K') == 'K' ? (((operands[2])->u.hwint[0])) >= -128 && (((operands[2])->u.hwint[0])) <= 127 : ('K') == 'L' ? (((operands[2])->u.hwint[0])) == 0xff || (((operands[2])->u.hwint[0])) == 0xffff : ('K') == 'M' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 3 : ('K') == 'N' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 255 : 0)))
       || (((enum machine_mode) (operands[0])->mode) == QImode
    && ((x86_promote_QImode & (1 << ix86_tune)) || optimize_size)))))
    {
      return gen_split_1511 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11639;
 L11640:
  x2 = (((x1)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L11641;
    case ABS:
      goto L11753;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12555;
 L11641:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (memory_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11642;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12555;
 L11642:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11643;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12555;
 L11643:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && reload_completed && (mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_VECTOR_FLOAT)))
    {
      return gen_split_1244 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12555;
 L11753:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (memory_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11754;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12555;
 L11754:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11755;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12555;
 L11755:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((target_flags & 0x00000001) && reload_completed && (mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (operands[0])->mode)] == MODE_VECTOR_FLOAT)))
    {
      return gen_split_1261 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12555;
 L12556:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == NEG)
    goto L12557;
  goto ret0;
 L12557:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L12558;
    }
  goto ret0;
 L12558:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12559;
  goto ret0;
 L12559:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (! (x86_partial_reg_stall & (1 << ix86_tune)) && reload_completed
   && (((enum machine_mode) (operands[0])->mode) == HImode
       || (((enum machine_mode) (operands[0])->mode) == QImode
    && ((x86_promote_QImode & (1 << ix86_tune)) || optimize_size)))))
    {
      return gen_split_1514 (insn, operands);
    }
  goto ret0;
 ret0:
  return 0;
}
static rtx
split_3 (rtx x0 , rtx insn )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  rtx tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case DImode:
      goto L14835;
    case SImode:
      goto L14837;
    case SFmode:
      goto L14838;
    case DFmode:
      goto L14840;
    default:
      break;
    }
 L12008:
  if (((enum rtx_code) (x2)->code) == PC)
    goto L12009;
  if (register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L12471;
    }
 L12483:
  switch (((enum machine_mode) (x2)->mode))
    {
    case SFmode:
      goto L14843;
    case DFmode:
      goto L14844;
    default:
      break;
    }
  goto ret0;
 L14835:
  if (memory_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L11095;
    }
 L14836:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L11115;
    }
  goto L12008;
 L11095:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == SIGN_EXTEND)
    goto L11096;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14836;
 L11096:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L11097;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14836;
 L11097:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11098;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14836;
 L11098:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L11099;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14836;
 L11099:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11100;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14836;
 L11100:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L11101;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14836;
 L11101:
  if (((reload_completed
    && dead_or_set_p (insn, operands[1])
    && !reg_mentioned_p (operands[1], operands[0]))))
    {
      return gen_split_1090 (insn, operands);
    }
 L11111:
  if ((reload_completed))
    {
      return gen_split_1091 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14836;
 L11115:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L14845;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L14845:
  switch (((enum rtx_code) (x2)->code))
    {
    case SIGN_EXTEND:
      goto L11116;
    case DIV:
      goto L11447;
    case UDIV:
      goto L11473;
    case ASHIFT:
      goto L11879;
    case ASHIFTRT:
      goto L11922;
    case LSHIFTRT:
      goto L11940;
    case FFS:
      goto L12132;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11116:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L11117;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11117:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11118;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11118:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L11119;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11119:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11120;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11120:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L11121;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11121:
  if ((reload_completed))
    {
      return gen_split_1092 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11447:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L11448;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11448:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L11449;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11449:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11450;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11450:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[3] = x2;
      goto L11451;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11451:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == MOD)
    goto L11452;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11452:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L11453;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11453:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L11454;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11454:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11455;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11455:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && reload_completed))
    {
      return gen_split_1199 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11473:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L11474;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11474:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L11475;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11475:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11476;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11476:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DImode))
    {
      operands[3] = x2;
      goto L11477;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11477:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == UMOD)
    goto L11478;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11478:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L11479;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11479:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L11480;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11480:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11481;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11481:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && reload_completed))
    {
      return gen_split_1202 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11879:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L11880;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11880:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L11881;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11881:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11882;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11882:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L11883;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11883:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11884;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11884:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && reload_completed))
    {
      return gen_split_1282 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11922:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L11923;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11923:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L11924;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11924:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11925;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11925:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L11926;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11926:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11927;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11927:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && reload_completed))
    {
      return gen_split_1293 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11940:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L11941;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11941:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, QImode))
    {
      operands[2] = x3;
      goto L11942;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11942:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11943;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11943:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L11944;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11944:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11945;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11945:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && reload_completed))
    {
      return gen_split_1300 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L12132:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L12133;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L12133:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12134;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L12134:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, DImode))
    {
      operands[2] = x2;
      goto L12135;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L12135:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12136;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L12136:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (0 && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))&& reload_completed))
    {
      return gen_split_1385 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L14837:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L11459;
    }
 L14842:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L12122;
    }
  goto L12008;
 L11459:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L14852;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L14852:
  switch (((enum rtx_code) (x2)->code))
    {
    case DIV:
      goto L11460;
    case UDIV:
      goto L11486;
    case FFS:
      goto L12114;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11460:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L11461;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11461:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L11462;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11462:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11463;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11463:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L11464;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11464:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MOD)
    goto L11465;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11465:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L11466;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11466:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L11467;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11467:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11468;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11468:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed))
    {
      return gen_split_1201 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11486:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L11487;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11487:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L11488;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11488:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11489;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11489:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L11490;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11490:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == UMOD)
    goto L11491;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11491:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L11492;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11492:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[2]))
    goto L11493;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11493:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11494;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L11494:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed))
    {
      return gen_split_1203 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L12114:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L12115;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L12115:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12116;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L12116:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L12117;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L12117:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12118;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L12118:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0))&& reload_completed))
    {
      return gen_split_1382 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14842;
 L12122:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == FFS)
    goto L12123;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L12123:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L12124;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L12124:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12125;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L12125:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L12126;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L12126:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12127;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L12127:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed))
    {
      return gen_split_1383 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L14838:
  if (memory_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L11599;
    }
 L14839:
  if (register_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L11608;
    }
  goto L12008;
 L11599:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L14855;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14839;
 L14855:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L11600;
    case ABS:
      goto L11712;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14839;
 L11600:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (memory_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L11601;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14839;
 L11601:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11602;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14839;
 L11602:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[2] = x2;
  goto L11603;
 L11603:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11604;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14839;
 L11604:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return gen_split_1239 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14839;
 L11712:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (memory_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L11713;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14839;
 L11713:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11714;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14839;
 L11714:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[2] = x2;
  goto L11715;
 L11715:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11716;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14839;
 L11716:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return gen_split_1256 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14839;
 L11608:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode)
    goto L14857;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L14857:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L11609;
    case ABS:
      goto L11721;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11609:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L11610;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11610:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11611;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11611:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[2] = x2;
  goto L11612;
 L11620:
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L11621;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11612:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11613;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11620;
 L11613:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed && !((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1240 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11620;
 L11621:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11622;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11622:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed && ((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1241 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11721:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[1] = x3;
      goto L11722;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11722:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11723;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11723:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[2] = x2;
  goto L11724;
 L11732:
  if (nonimmediate_operand (x2, V4SFmode))
    {
      operands[2] = x2;
      goto L11733;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11724:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11725;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11732;
 L11725:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed && !((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1257 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11732;
 L11733:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11734;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11734:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed && ((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1258 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L14840:
  if (memory_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L11647;
    }
 L14841:
  if (register_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L11656;
    }
  goto L12008;
 L11647:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L14859;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14841;
 L14859:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L11648;
    case ABS:
      goto L11760;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14841;
 L11648:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (memory_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L11649;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14841;
 L11649:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11650;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14841;
 L11650:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[2] = x2;
  goto L11651;
 L11651:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11652;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14841;
 L11652:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return gen_split_1246 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14841;
 L11760:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (memory_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L11761;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14841;
 L11761:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11762;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14841;
 L11762:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[2] = x2;
  goto L11763;
 L11763:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11764;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14841;
 L11764:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return gen_split_1263 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14841;
 L11656:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode)
    goto L14861;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L14861:
  switch (((enum rtx_code) (x2)->code))
    {
    case NEG:
      goto L11657;
    case ABS:
      goto L11769;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11657:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L11658;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11658:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11659;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11659:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[2] = x2;
  goto L11660;
 L11677:
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L11678;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11660:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11661;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11677;
 L11661:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14863;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11677;
 L14863:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14865;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11677;
 L14865:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14867;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11677;
 L14867:
  if ((reload_completed && !((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))
   && (!0 || ((((enum rtx_code) (operands[0])->code) == REG) && (((((operands[0])->u.fld[0]).rtuint)) >= 8 && ((((operands[0])->u.fld[0]).rtuint)) <= (8 + 7))))))
    {
      return gen_split_1247 (insn, operands);
    }
 L14868:
  if ((0 && reload_completed && ((((enum rtx_code) (operands[0])->code) == REG) && (((((operands[0])->u.fld[0]).rtuint)) < 8 || (((((operands[0])->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1248 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11677;
 L11678:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11679;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11679:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed && ((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1249 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11769:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[1] = x3;
      goto L11770;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11770:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11771;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11771:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[2] = x2;
  goto L11772;
 L11780:
  if (nonimmediate_operand (x2, V2DFmode))
    {
      operands[2] = x2;
      goto L11781;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11772:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11773;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11780;
 L11773:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed && !((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1264 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L11780;
 L11781:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11782;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L11782:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed && ((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))))
    {
      return gen_split_1265 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12008;
 L12009:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == IF_THEN_ELSE)
    goto L12010;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12010:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (comparison_operator (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L12011;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12011:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L12012;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12012:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L12013;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12013:
  x3 = (((x2)->u.fld[1]).rtx1);
  operands[3] = x3;
  goto L12014;
 L12014:
  x3 = (((x2)->u.fld[2]).rtx1);
  operands[4] = x3;
  goto L12015;
 L12015:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12016;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12016:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18)
    goto L12017;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12017:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12018;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12018:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (reload_completed))
    {
      return gen_split_1358 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12471:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == IF_THEN_ELSE)
    goto L12472;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12472:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (comparison_operator (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L12473;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12473:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x4, VOIDmode))
    {
      operands[4] = x4;
      goto L12474;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12474:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (register_operand (x4, VOIDmode))
    {
      operands[5] = x4;
      goto L12475;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12475:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x3, VOIDmode))
    {
      operands[2] = x3;
      goto L12476;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12476:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (nonimmediate_operand (x3, VOIDmode))
    {
      operands[3] = x3;
      goto L12477;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12477:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12478;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12478:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[6] = x2;
  goto L12479;
 L12479:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12480;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L12480:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) && reload_completed
   && ((((enum machine_mode) (operands[0])->mode)) == TImode || (((enum machine_mode) (operands[0])->mode)) == V4SFmode || (((enum machine_mode) (operands[0])->mode)) == V4SImode || (((enum machine_mode) (operands[0])->mode)) == SFmode || (((enum machine_mode) (operands[0])->mode)) == TFmode || ((((enum machine_mode) (operands[0])->mode)) == V16QImode || (((enum machine_mode) (operands[0])->mode)) == V8HImode || (((enum machine_mode) (operands[0])->mode)) == V2DFmode || (((enum machine_mode) (operands[0])->mode)) == V2DImode) || (((target_flags & 0x00008000) != 0) && ((((enum machine_mode) (operands[0])->mode)) == DFmode || ((((enum machine_mode) (operands[0])->mode)) == DImode || (((enum machine_mode) (operands[0])->mode)) == V8QImode || (((enum machine_mode) (operands[0])->mode)) == V4HImode || (((enum machine_mode) (operands[0])->mode)) == V2SImode || (((enum machine_mode) (operands[0])->mode)) == SImode))))))
    {
      return gen_split_1501 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12483;
 L14843:
  if (register_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L12484;
    }
  goto ret0;
 L12484:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == IF_THEN_ELSE)
    goto L12485;
  goto ret0;
 L12485:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (sse_comparison_operator (x3, SFmode))
    {
      operands[1] = x3;
      goto L12486;
    }
  goto ret0;
 L12486:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SFmode))
    {
      operands[4] = x4;
      goto L12487;
    }
  goto ret0;
 L12487:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, SFmode))
    {
      operands[5] = x4;
      goto L12488;
    }
  goto ret0;
 L12488:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L12489;
    }
  goto ret0;
 L12489:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (register_operand (x3, SFmode))
    {
      operands[3] = x3;
      goto L12490;
    }
  goto ret0;
 L12490:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12491;
  goto ret0;
 L12491:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[6] = x2;
  goto L12492;
 L12492:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12493;
  goto ret0;
 L12493:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) && reload_completed))
    {
      return gen_split_1502 (insn, operands);
    }
  goto ret0;
 L14844:
  if (register_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L12497;
    }
  goto ret0;
 L12497:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == IF_THEN_ELSE)
    goto L12498;
  goto ret0;
 L12498:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (sse_comparison_operator (x3, DFmode))
    {
      operands[1] = x3;
      goto L12499;
    }
  goto ret0;
 L12499:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, DFmode))
    {
      operands[4] = x4;
      goto L12500;
    }
  goto ret0;
 L12500:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, DFmode))
    {
      operands[5] = x4;
      goto L12501;
    }
  goto ret0;
 L12501:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L12502;
    }
  goto ret0;
 L12502:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (register_operand (x3, DFmode))
    {
      operands[3] = x3;
      goto L12503;
    }
  goto ret0;
 L12503:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12504;
  goto ret0;
 L12504:
  x2 = (((x1)->u.fld[0]).rtx1);
  operands[6] = x2;
  goto L12505;
 L12505:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12506;
  goto ret0;
 L12506:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) && reload_completed))
    {
      return gen_split_1503 (insn, operands);
    }
  goto ret0;
 ret0:
  return 0;
}
static rtx
split_4 (rtx x0 , rtx insn )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  rtx tem ;
  switch ((((((x0)->u.fld[0]).rtvec1))->num_elem))
    {
    case 2:
      goto L11026;
    case 3:
      goto L11093;
    case 5:
      goto L11219;
    case 4:
      goto L11278;
    default:
      break;
    }
  goto ret0;
 L11026:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11027;
  goto ret0;
 L11027:
  return split_2 (x0, insn);
 L11093:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11094;
  goto ret0;
 L11094:
  return split_3 (x0, insn);
 L11219:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11220;
  goto ret0;
 L11220:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L14869;
  goto ret0;
 L14869:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L11221;
    }
 L14870:
  if (memory_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L11235;
    }
  goto ret0;
 L11221:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L11222;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14870;
 L11222:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11223;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14870;
 L11223:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11224;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14870;
 L11224:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L11225;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14870;
 L11225:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11226;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14870;
 L11226:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L11227;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14870;
 L11227:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11228;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14870;
 L11228:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, DImode))
    {
      operands[4] = x2;
      goto L11229;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14870;
 L11229:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11230;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14870;
 L11230:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, VOIDmode))
    {
      operands[5] = x2;
      goto L11231;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14870;
 L11231:
  if ((reload_completed))
    {
      return gen_split_1117 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14870;
 L11235:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L11236;
  goto ret0;
 L11236:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11237;
    }
  goto ret0;
 L11237:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11238;
  goto ret0;
 L11238:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L11239;
    }
  goto ret0;
 L11239:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11240;
  goto ret0;
 L11240:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L11241;
    }
  goto ret0;
 L11241:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11242;
  goto ret0;
 L11242:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, DImode))
    {
      operands[4] = x2;
      goto L11243;
    }
  goto ret0;
 L11243:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11244;
  goto ret0;
 L11244:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, VOIDmode))
    {
      operands[5] = x2;
      goto L11245;
    }
  goto ret0;
 L11245:
  if ((reload_completed))
    {
      return gen_split_1118 (insn, operands);
    }
  goto ret0;
 L11278:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L11279;
  goto ret0;
 L11279:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14871;
    case HImode:
      goto L14873;
    default:
      break;
    }
 L12021:
  if (((enum rtx_code) (x2)->code) == PC)
    goto L12022;
  goto ret0;
 L14871:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L11280;
    }
 L14872:
  if (memory_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L11292;
    }
  goto L12021;
 L11280:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode)
    goto L14875;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L14875:
  switch (((enum rtx_code) (x2)->code))
    {
    case FIX:
      goto L11281;
    case PLUS:
      goto L12141;
    default:
     break;
   }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L11281:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11282;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L11282:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11283;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L11283:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L11284;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L11284:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11285;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L11285:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L11286;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L11286:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11287;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L11287:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, SImode))
    {
      operands[4] = x2;
      goto L11288;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L11288:
  if ((reload_completed))
    {
      return gen_split_1127 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L12141:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == UNSPEC
      && (((((x3)->u.fld[0]).rtvec1))->num_elem) == 2
      && (((x3)->u.fld[1]).rtint) == 17)
    goto L12142;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L12142:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L12143;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L12143:
  x4 = (((((x3)->u.fld[0]).rtvec1))->elem[1]);
  if (call_insn_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L12144;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L12144:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == CONST)
    goto L12145;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L12145:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == SImode
      && ((enum rtx_code) (x4)->code) == UNSPEC
      && (((((x4)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x4)->u.fld[1]).rtint) == 6)
    goto L12146;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L12146:
  x5 = (((((x4)->u.fld[0]).rtvec1))->elem[0]);
  if (tls_symbolic_operand (x5, SImode))
    {
      operands[3] = x5;
      goto L12147;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L12147:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12148;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L12148:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[4] = x2;
      goto L12149;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L12149:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12150;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L12150:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[5] = x2;
      goto L12151;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L12151:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12152;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L12152:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      return gen_split_1392 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14872;
 L11292:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L11293;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11293:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11294;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11294:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11295;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11295:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L11296;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11296:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11297;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11297:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L11298;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11298:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11299;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11299:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, SImode))
    {
      operands[4] = x2;
      goto L11300;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11300:
  if ((reload_completed))
    {
      return gen_split_1128 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L14873:
  if (memory_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L11311;
    }
 L14874:
  if (register_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L11323;
    }
  goto L12021;
 L11311:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L11312;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14874;
 L11312:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11313;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14874;
 L11313:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11314;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14874;
 L11314:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L11315;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14874;
 L11315:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11316;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14874;
 L11316:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L11317;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14874;
 L11317:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11318;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14874;
 L11318:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[4] = x2;
      goto L11319;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14874;
 L11319:
  if ((reload_completed))
    {
      return gen_split_1133 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14874;
 L11323:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == FIX)
    goto L11324;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11324:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L11325;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11325:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11326;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11326:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[2] = x2;
      goto L11327;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11327:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L11328;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11328:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[3] = x2;
      goto L11329;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11329:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L11330;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11330:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (memory_operand (x2, HImode))
    {
      operands[4] = x2;
      goto L11331;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L11331:
  if ((reload_completed))
    {
      return gen_split_1134 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12021;
 L12022:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == IF_THEN_ELSE)
    goto L12039;
  goto ret0;
 L12039:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == NE)
    goto L12040;
 L12023:
  if (comparison_operator (x3, VOIDmode))
    {
      operands[0] = x3;
      goto L12024;
    }
  goto ret0;
 L12040:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L12041;
    }
  goto L12023;
 L12041:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (1)])
    goto L12042;
  goto L12023;
 L12042:
  x3 = (((x2)->u.fld[1]).rtx1);
  operands[0] = x3;
  goto L12043;
 L12043:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (((enum rtx_code) (x3)->code) == PC)
    goto L12044;
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12023;
 L12044:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12045;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12023;
 L12045:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[1]))
    goto L12046;
 L12063:
  if (nonimmediate_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L12064;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12023;
 L12046:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L12047;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12063;
 L12047:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L12048;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12063;
 L12048:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (-1)])
    goto L12049;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12063;
 L12049:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12050;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12063;
 L12050:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[2] = x2;
      goto L12051;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12063;
 L12051:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12052;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12063;
 L12052:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && (x86_use_loop & (1 << ix86_tune))
   && reload_completed
   && (((operands[1])->u.fld[0]).rtuint) != 2))
    {
      return gen_split_1363 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L12063;
 L12064:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L12065;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12023;
 L12065:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1]))
    goto L12066;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12023;
 L12066:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (-1)])
    goto L12067;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12023;
 L12067:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12068;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12023;
 L12068:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L12069;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12023;
 L12069:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12070;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12023;
 L12070:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (!0 && (x86_use_loop & (1 << ix86_tune))
   && reload_completed
   && (! (((enum rtx_code) (operands[2])->code) == REG)
       || ! rtx_equal_p (operands[1], operands[2]))))
    {
      return gen_split_1364 (insn, operands);
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12023;
 L12024:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, VOIDmode))
    {
      operands[1] = x4;
      goto L12025;
    }
  goto ret0;
 L12025:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (nonimmediate_operand (x4, VOIDmode))
    {
      operands[2] = x4;
      goto L12026;
    }
  goto ret0;
 L12026:
  x3 = (((x2)->u.fld[1]).rtx1);
  operands[3] = x3;
  goto L12027;
 L12027:
  x3 = (((x2)->u.fld[2]).rtx1);
  operands[4] = x3;
  goto L12028;
 L12028:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12029;
  goto ret0;
 L12029:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 18)
    goto L12030;
  goto ret0;
 L12030:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12031;
  goto ret0;
 L12031:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCFPmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12032;
  goto ret0;
 L12032:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12033;
  goto ret0;
 L12033:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (scratch_operand (x2, HImode))
    {
      operands[5] = x2;
      goto L12034;
    }
  goto ret0;
 L12034:
  if ((reload_completed))
    {
      return gen_split_1359 (insn, operands);
    }
  goto ret0;
 ret0:
  return 0;
}
rtx
split_insns (rtx x0 , rtx insn )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  rtx tem ;
  recog_data.insn = (rtx) 0;
  switch (((enum rtx_code) (x0)->code))
    {
    case SET:
      goto L10935;
    case PARALLEL:
      goto L14691;
    default:
     break;
   }
  goto ret0;
 L10935:
  return split_1 (x0, insn);
 L14691:
  return split_4 (x0, insn);
 ret0:
  return 0;
}
static rtx
peephole2_1 (rtx x0 ,
 rtx insn ,
 int *_pmatch_len )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  rtx tem ;
  x1 = (((x0)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x1)->mode))
    {
    case DImode:
      goto L14880;
    case SImode:
      goto L14884;
    case SFmode:
      goto L14885;
    case HImode:
      goto L14886;
    case QImode:
      goto L14887;
    default:
      break;
    }
 L12073:
  if (((enum rtx_code) (x1)->code) == REG
      && (((x1)->u.fld[0]).rtint) == 17)
    goto L12074;
 L12634:
  switch (((enum machine_mode) (x1)->mode))
    {
    case SImode:
      goto L14891;
    case HImode:
      goto L14892;
    case QImode:
      goto L14893;
    case DImode:
      goto L14895;
    default:
      break;
    }
 L12719:
  if (((enum rtx_code) (x1)->code) == STRICT_LOW_PART)
    goto L12720;
  if (register_operand (x1, VOIDmode))
    {
      operands[0] = x1;
      goto L12716;
    }
  goto ret0;
 L14880:
  if (push_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L12582;
    }
 L14881:
  if (memory_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L10966;
    }
 L14882:
  if (register_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L11249;
    }
  goto L12073;
 L12582:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (memory_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L12583;
    }
  if (immediate_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L10945;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14881;
 L12583:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L14881;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((! optimize_size && ! (x86_push_memory & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1518 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14881;
 L10945:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L14881;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((0 && !symbolic_operand (operands[1], DImode)
   && !x86_64_immediate_operand (operands[1], DImode)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1052 (insn, operands);
      if (tem != 0)
        return tem;
    }
 L10950:
  if ((0 && !symbolic_operand (operands[1], DImode)
   && !x86_64_immediate_operand (operands[1], DImode) && 1))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1053 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14881;
 L10966:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (immediate_operand (x1, DImode))
    {
      operands[1] = x1;
      goto L10967;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14882;
 L10967:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L14882;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((0 && !symbolic_operand (operands[1], DImode)
   && !x86_64_immediate_operand (operands[1], DImode)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1057 (insn, operands);
      if (tem != 0)
        return tem;
    }
 L10972:
  if ((0 && !symbolic_operand (operands[1], DImode)
   && !x86_64_immediate_operand (operands[1], DImode) && 1))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1058 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14882;
 L11249:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DImode
      && ((enum rtx_code) (x1)->code) == FIX)
    goto L11250;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L11250:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SFmode:
      goto L14896;
    case DFmode:
      goto L14897;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L14896:
  if (memory_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L11251;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L11251:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12073;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((ix86_tune == PROCESSOR_K8) && !optimize_size))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1119 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L14897:
  if (memory_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L11257;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L11257:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12073;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((ix86_tune == PROCESSOR_K8) && !optimize_size))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1120 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L14884:
  if (push_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L12577;
    }
  if (register_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L11268;
    }
 L14888:
  if (memory_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L12602;
    }
  goto L12073;
 L12577:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (memory_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L12578;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14888;
 L12578:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L14888;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((! optimize_size && ! (x86_push_memory & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1517 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14888;
 L11268:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SImode
      && ((enum rtx_code) (x1)->code) == FIX)
    goto L11269;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14888;
 L11269:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SFmode:
      goto L14898;
    case DFmode:
      goto L14899;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14888;
 L14898:
  if (memory_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L11270;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14888;
 L11270:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L14888;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((ix86_tune == PROCESSOR_K8) && !optimize_size))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1125 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14888;
 L14899:
  if (memory_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L11276;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14888;
 L11276:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L14888;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((ix86_tune == PROCESSOR_K8) && !optimize_size))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1126 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14888;
 L12602:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (x1 == const_int_rtx[64 + (0)]
      && (! optimize_size
   && ! (x86_use_mov0 & (1 << ix86_tune))
   && (x86_split_long_moves & (1 << ix86_tune))
   && get_attr_length (insn) >= ix86_cost->large_insn
   && peep2_regno_dead_p (0, 17)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1522 (insn, operands);
      if (tem != 0)
        return tem;
    }
 L12614:
  if (immediate_operand (x1, SImode))
    {
      operands[1] = x1;
      goto L12615;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L12615:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12073;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((! optimize_size
   && get_attr_length (insn) >= ix86_cost->large_insn
   && (x86_split_long_moves & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1525 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L14885:
  if (push_operand (x1, SFmode))
    {
      operands[0] = x1;
      goto L12587;
    }
  goto L12073;
 L12587:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (memory_operand (x1, SFmode))
    {
      operands[1] = x1;
      goto L12588;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L12588:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12073;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((! optimize_size && ! (x86_push_memory & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1519 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L14886:
  if (push_operand (x1, HImode))
    {
      operands[0] = x1;
      goto L12592;
    }
 L14889:
  if (memory_operand (x1, HImode))
    {
      operands[0] = x1;
      goto L12606;
    }
  goto L12073;
 L12592:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (memory_operand (x1, HImode))
    {
      operands[1] = x1;
      goto L12593;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14889;
 L12593:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L14889;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((! optimize_size && ! (x86_push_memory & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1520 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14889;
 L12606:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (x1 == const_int_rtx[64 + (0)]
      && (! optimize_size
   && ! (x86_use_mov0 & (1 << ix86_tune))
   && (x86_split_long_moves & (1 << ix86_tune))
   && get_attr_length (insn) >= ix86_cost->large_insn
   && peep2_regno_dead_p (0, 17)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1523 (insn, operands);
      if (tem != 0)
        return tem;
    }
 L12619:
  if (immediate_operand (x1, HImode))
    {
      operands[1] = x1;
      goto L12620;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L12620:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12073;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((! optimize_size && get_attr_length (insn) >= ix86_cost->large_insn
  && (x86_split_long_moves & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1526 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L14887:
  if (push_operand (x1, QImode))
    {
      operands[0] = x1;
      goto L12597;
    }
 L14890:
  if (memory_operand (x1, QImode))
    {
      operands[0] = x1;
      goto L12610;
    }
  goto L12073;
 L12597:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (memory_operand (x1, QImode))
    {
      operands[1] = x1;
      goto L12598;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14890;
 L12598:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L14890;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((! optimize_size && ! (x86_push_memory & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1521 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14890;
 L12610:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (x1 == const_int_rtx[64 + (0)]
      && (! optimize_size
   && ! (x86_use_mov0 & (1 << ix86_tune))
   && (x86_split_long_moves & (1 << ix86_tune))
   && get_attr_length (insn) >= ix86_cost->large_insn
   && peep2_regno_dead_p (0, 17)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1524 (insn, operands);
      if (tem != 0)
        return tem;
    }
 L12624:
  if (immediate_operand (x1, QImode))
    {
      operands[1] = x1;
      goto L12625;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L12625:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12073;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((! optimize_size && get_attr_length (insn) >= ix86_cost->large_insn
  && (x86_split_long_moves & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1527 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12073;
 L12074:
  x1 = (((x0)->u.fld[1]).rtx1);
  operands[0] = x1;
  goto L12075;
 L12629:
  if (((enum rtx_code) (x1)->code) == COMPARE)
    goto L12630;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12075:
  tem = peep2_next_insn (1);
  if (tem == (rtx) 0)
    goto L12629;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12076;
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12076:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L12077;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12077:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (ix86_comparison_operator (x2, QImode))
    {
      operands[2] = x2;
      goto L12078;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12078:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L12079;
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12079:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L12080;
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12080:
  tem = peep2_next_insn (2);
  if (tem == (rtx) 0)
    goto L12629;
  x1 = (((tem)->u.fld[5]).rtx1);
  switch (((enum rtx_code) (x1)->code))
    {
    case SET:
      goto L12081;
    case PARALLEL:
      goto L14900;
    default:
     break;
   }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12081:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (q_regs_operand (x2, VOIDmode))
    {
      operands[3] = x2;
      goto L12082;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12082:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == ZERO_EXTEND)
    goto L12083;
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12083:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[1])
      && ((peep2_reg_dead_p (3, operands[1])
    || operands_match_p (operands[1], operands[3]))
   && ! reg_overlap_mentioned_p (operands[3], operands[0])))
    {
      *_pmatch_len = 2;
      tem = gen_peephole2_1365 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L14900:
  if ((((((x1)->u.fld[0]).rtvec1))->num_elem) == 2)
    goto L12094;
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12094:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x2)->code) == SET)
    goto L12095;
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12095:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (q_regs_operand (x3, VOIDmode))
    {
      operands[3] = x3;
      goto L12096;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12096:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == ZERO_EXTEND)
    goto L12097;
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12097:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (rtx_equal_p (x4, operands[1]))
    goto L12098;
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12098:
  x2 = (((((x1)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x2)->code) == CLOBBER)
    goto L12099;
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12099:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == CCmode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17
      && ((peep2_reg_dead_p (3, operands[1])
    || operands_match_p (operands[1], operands[3]))
   && ! reg_overlap_mentioned_p (operands[3], operands[0])))
    {
      *_pmatch_len = 2;
      tem = gen_peephole2_1366 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  goto L12629;
 L12630:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14902;
    case QImode:
      goto L14903;
    case HImode:
      goto L14905;
    default:
      break;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L14902:
  if (((enum rtx_code) (x2)->code) == AND)
    goto L12655;
  if (memory_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L12631;
    }
 L14904:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L12880;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12655:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14908;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L14908:
  if (((enum rtx_code) (x3)->code) == ZERO_EXTRACT)
    goto L12672;
  if (register_operand (x3, SImode))
    {
      operands[0] = x3;
      goto L12656;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12672:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (ext_register_operand (x4, VOIDmode))
    {
      operands[0] = x4;
      goto L12673;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12673:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L12674;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12674:
  x4 = (((x3)->u.fld[2]).rtx1);
  if (x4 == const_int_rtx[64 + (8)])
    goto L12675;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12675:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, VOIDmode))
    {
      operands[1] = x3;
      goto L12676;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12676:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (! (x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_match_ccmode (insn, CCNOmode)
   && true_regnum (operands[0]) != 0
   && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1534 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12656:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L12657;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12657:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode)
   && (true_regnum (operands[0]) != 0
       || (((enum rtx_code) (operands[1])->code) == CONST_INT
    && (('K') == 'I' ? (((operands[1])->u.hwint[0])) >= 0 && (((operands[1])->u.hwint[0])) <= 31 : ('K') == 'J' ? (((operands[1])->u.hwint[0])) >= 0 && (((operands[1])->u.hwint[0])) <= 63 : ('K') == 'K' ? (((operands[1])->u.hwint[0])) >= -128 && (((operands[1])->u.hwint[0])) <= 127 : ('K') == 'L' ? (((operands[1])->u.hwint[0])) == 0xff || (((operands[1])->u.hwint[0])) == 0xffff : ('K') == 'M' ? (((operands[1])->u.hwint[0])) >= 0 && (((operands[1])->u.hwint[0])) <= 3 : ('K') == 'N' ? (((operands[1])->u.hwint[0])) >= 0 && (((operands[1])->u.hwint[0])) <= 255 : 0)))
   && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1532 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12631:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (ix86_match_ccmode (insn, CCNOmode) && ! optimize_size))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1528 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14904;
 L12880:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT)
    goto L14909;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L14909:
  if (incdec_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L12881;
    }
 L14910:
  if (((x2)->u.hwint[0]) == 128L
      && (ix86_match_ccmode (insn, CCGCmode)
   && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1561 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12881:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L14910;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((ix86_match_ccmode (insn, CCGCmode)
   && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1558 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L14910;
 L14903:
  if (((enum rtx_code) (x2)->code) == AND)
    goto L12663;
  if (register_operand (x2, QImode))
    {
      operands[0] = x2;
      goto L12894;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12663:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, QImode))
    {
      operands[0] = x3;
      goto L12664;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12664:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, QImode))
    {
      operands[1] = x3;
      goto L12665;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12665:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x2 == const_int_rtx[64 + (0)]
      && (! (x86_partial_reg_stall & (1 << ix86_tune))
   && ix86_match_ccmode (insn, CCNOmode)
   && true_regnum (operands[0]) != 0
   && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1533 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12894:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (incdec_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L12895;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12895:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12634;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((ix86_match_ccmode (insn, CCGCmode)
   && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1560 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L14905:
  if (register_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L12887;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12887:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == CONST_INT)
    goto L14911;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L14911:
  if (incdec_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L12888;
    }
 L14912:
  if (((x2)->u.hwint[0]) == 128L
      && (ix86_match_ccmode (insn, CCGCmode)
   && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1562 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12634;
 L12888:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L14912;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((ix86_match_ccmode (insn, CCGCmode)
   && find_regno_note (insn, REG_DEAD, true_regnum (operands[0]))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1559 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[1]).rtx1);
  x2 = (((x1)->u.fld[1]).rtx1);
  goto L14912;
 L14891:
  if (nonimmediate_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L12635;
    }
 L14894:
  if (register_operand (x1, SImode))
    {
      operands[0] = x1;
      goto L12729;
    }
  goto L12719;
 L12635:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SImode
      && ((enum rtx_code) (x1)->code) == NOT)
    goto L12636;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14894;
 L12636:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L12637;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14894;
 L12637:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L14894;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((!optimize_size
   && peep2_regno_dead_p (0, 17)
   && (((ix86_tune == PROCESSOR_PENTIUM)
        && (((enum rtx_code) (operands[0])->code) != MEM
            || !memory_displacement_operand (operands[0], SImode)))
       || ((ix86_tune == PROCESSOR_K6) && long_memory_operand (operands[0], SImode)))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1529 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L14894;
 L12729:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == SImode)
    goto L14913;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L14913:
  switch (((enum rtx_code) (x1)->code))
    {
    case PLUS:
      goto L12730;
    case SUBREG:
      goto L14916;
    case MULT:
      goto L12752;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12730:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L12731;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12731:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (nonmemory_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L12732;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12732:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12719;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((peep2_regno_dead_p (0, 17)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1542 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L14916:
  if ((((x1)->u.fld[1]).rtint) == 0)
    goto L12737;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12737:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L14917;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L14917:
  switch (((enum rtx_code) (x2)->code))
    {
    case PLUS:
      goto L12738;
    case MULT:
      goto L12767;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12738:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L12739;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12739:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L12740;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12740:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12719;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((peep2_regno_dead_p (0, 17) && (((operands[0])->u.fld[0]).rtuint) == (((operands[1])->u.fld[0]).rtuint)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1543 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12767:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (register_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L12768;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12768:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L12769;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12769:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12719;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((exact_log2_wide ((unsigned long) (((operands[2])->u.hwint[0]))) >= 0
   && (((operands[0])->u.fld[0]).rtuint) == (((operands[1])->u.fld[0]).rtuint)
   && peep2_regno_dead_p (0, 17)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1547 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12752:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L12753;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12753:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const_int_operand (x2, SImode))
    {
      operands[1] = x2;
      goto L12754;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12754:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12719;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((exact_log2_wide ((unsigned long) (((operands[1])->u.hwint[0]))) >= 0
   && peep2_regno_dead_p (0, 17)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1545 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L14892:
  if (nonimmediate_operand (x1, HImode))
    {
      operands[0] = x1;
      goto L12641;
    }
  goto L12719;
 L12641:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == HImode
      && ((enum rtx_code) (x1)->code) == NOT)
    goto L12642;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12642:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, HImode))
    {
      operands[1] = x2;
      goto L12643;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12643:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12719;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((!optimize_size
   && peep2_regno_dead_p (0, 17)
   && (((ix86_tune == PROCESSOR_PENTIUM)
        && (((enum rtx_code) (operands[0])->code) != MEM
            || !memory_displacement_operand (operands[0], HImode)))
       || ((ix86_tune == PROCESSOR_K6) && long_memory_operand (operands[0], HImode)))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1530 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L14893:
  if (nonimmediate_operand (x1, QImode))
    {
      operands[0] = x1;
      goto L12647;
    }
  goto L12719;
 L12647:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == QImode
      && ((enum rtx_code) (x1)->code) == NOT)
    goto L12648;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12648:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x2, QImode))
    {
      operands[1] = x2;
      goto L12649;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12649:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12719;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((!optimize_size
   && peep2_regno_dead_p (0, 17)
   && (((ix86_tune == PROCESSOR_PENTIUM)
        && (((enum rtx_code) (operands[0])->code) != MEM
            || !memory_displacement_operand (operands[0], QImode)))
       || ((ix86_tune == PROCESSOR_K6) && long_memory_operand (operands[0], QImode)))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1531 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L14895:
  if (register_operand (x1, DImode))
    {
      operands[0] = x1;
      goto L12744;
    }
  goto L12719;
 L12744:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x1)->mode) == DImode)
    goto L14919;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L14919:
  switch (((enum rtx_code) (x1)->code))
    {
    case PLUS:
      goto L12745;
    case MULT:
      goto L12759;
    default:
     break;
   }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12745:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L12746;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12746:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (x86_64_general_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L12747;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12747:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12719;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((peep2_regno_dead_p (0, 17)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1544 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12759:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L12760;
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12760:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (const_int_operand (x2, DImode))
    {
      operands[1] = x2;
      goto L12761;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12761:
  tem = peep2_next_insn (0);
  if (tem == (rtx) 0)
    goto L12719;
  x1 = (((tem)->u.fld[5]).rtx1);
  if ((exact_log2_wide ((unsigned long) (((operands[1])->u.hwint[0]))) >= 0
   && peep2_regno_dead_p (0, 17)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1546 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((x0)->u.fld[0]).rtx1);
  goto L12719;
 L12720:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L12721;
    }
  goto ret0;
 L12721:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (x1 == const_int_rtx[64 + (0)]
      && ((((enum machine_mode) (operands[0])->mode) == QImode
    || ((enum machine_mode) (operands[0])->mode) == HImode)
   && (! (x86_use_mov0 & (1 << ix86_tune)) || optimize_size)
   && peep2_regno_dead_p (0, 17)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1540 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L12716:
  x1 = (((x0)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x1)->code) == CONST_INT)
    goto L14921;
  goto ret0;
 L14921:
  if ((int) ((x1)->u.hwint[0]) == ((x1)->u.hwint[0]))
    switch ((int) ((x1)->u.hwint[0]))
      {
      case 0L:
        goto L14923;
      case -1L:
        goto L14924;
      default:
        break;
      }
  goto ret0;
 L14923:
  if (((((enum machine_mode) (operands[0])->mode) == QImode
    || ((enum machine_mode) (operands[0])->mode) == HImode
    || ((enum machine_mode) (operands[0])->mode) == SImode
    || (((enum machine_mode) (operands[0])->mode) == DImode && 0))
   && (! (x86_use_mov0 & (1 << ix86_tune)) || optimize_size)
   && peep2_regno_dead_p (0, 17)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1539 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L14924:
  if (((((enum machine_mode) (operands[0])->mode) == HImode
    || ((enum machine_mode) (operands[0])->mode) == SImode
    || (((enum machine_mode) (operands[0])->mode) == DImode && 0))
   && (optimize_size || (ix86_tune == PROCESSOR_PENTIUM))
   && peep2_regno_dead_p (0, 17)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1541 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 ret0:
  return 0;
}
static rtx
peephole2_2 (rtx x0 ,
 rtx insn ,
 int *_pmatch_len )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  rtx tem ;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case DFmode:
      goto L14925;
    case SFmode:
      goto L14926;
    case XFmode:
      goto L14927;
    case SImode:
      goto L14930;
    case DImode:
      goto L14931;
    case HImode:
      goto L14934;
    default:
      break;
    }
  goto ret0;
 L14925:
  if (register_operand (x2, DFmode))
    {
      operands[0] = x2;
      goto L12247;
    }
  goto ret0;
 L12247:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 82)
    goto L12248;
  goto ret0;
 L12248:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, DFmode))
    {
      operands[2] = x3;
      goto L12249;
    }
  goto ret0;
 L12249:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12250;
  goto ret0;
 L12250:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, DFmode))
    {
      operands[1] = x2;
      goto L12251;
    }
  goto ret0;
 L12251:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 83)
    goto L12252;
  goto ret0;
 L12252:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2]))
    goto L12253;
  goto ret0;
 L12253:
  tem = peep2_next_insn (1);
  if (tem == (rtx) 0)
    goto ret0;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12254;
  goto ret0;
 L12254:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L12255;
  goto ret0;
 L12255:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (immediate_operand (x2, DFmode))
    {
      operands[3] = x2;
      goto L12256;
    }
  goto ret0;
 L12256:
  if ((standard_80387_constant_p (operands[3]) == 2))
    {
      *_pmatch_len = 1;
      tem = gen_peephole2_1411 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L14926:
  if (register_operand (x2, SFmode))
    {
      operands[0] = x2;
      goto L12261;
    }
  goto ret0;
 L12261:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 82)
    goto L12262;
  goto ret0;
 L12262:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, SFmode))
    {
      operands[2] = x3;
      goto L12263;
    }
  goto ret0;
 L12263:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12264;
  goto ret0;
 L12264:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, SFmode))
    {
      operands[1] = x2;
      goto L12265;
    }
  goto ret0;
 L12265:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 83)
    goto L12266;
  goto ret0;
 L12266:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2]))
    goto L12267;
  goto ret0;
 L12267:
  tem = peep2_next_insn (1);
  if (tem == (rtx) 0)
    goto ret0;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12268;
  goto ret0;
 L12268:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L12269;
  goto ret0;
 L12269:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (immediate_operand (x2, SFmode))
    {
      operands[3] = x2;
      goto L12270;
    }
  goto ret0;
 L12270:
  if ((standard_80387_constant_p (operands[3]) == 2))
    {
      *_pmatch_len = 1;
      tem = gen_peephole2_1413 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L14927:
  if (register_operand (x2, XFmode))
    {
      operands[0] = x2;
      goto L12275;
    }
  goto ret0;
 L12275:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 82)
    goto L12276;
  goto ret0;
 L12276:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (register_operand (x3, XFmode))
    {
      operands[2] = x3;
      goto L12277;
    }
  goto ret0;
 L12277:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12278;
  goto ret0;
 L12278:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, XFmode))
    {
      operands[1] = x2;
      goto L12279;
    }
  goto ret0;
 L12279:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == XFmode
      && ((enum rtx_code) (x2)->code) == UNSPEC
      && (((((x2)->u.fld[0]).rtvec1))->num_elem) == 1
      && (((x2)->u.fld[1]).rtint) == 83)
    goto L12280;
  goto ret0;
 L12280:
  x3 = (((((x2)->u.fld[0]).rtvec1))->elem[0]);
  if (rtx_equal_p (x3, operands[2]))
    goto L12281;
  goto ret0;
 L12281:
  tem = peep2_next_insn (1);
  if (tem == (rtx) 0)
    goto ret0;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12282;
  goto ret0;
 L12282:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (rtx_equal_p (x2, operands[0]))
    goto L12283;
  goto ret0;
 L12283:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (immediate_operand (x2, XFmode))
    {
      operands[3] = x2;
      goto L12284;
    }
  goto ret0;
 L12284:
  if ((standard_80387_constant_p (operands[3]) == 2))
    {
      *_pmatch_len = 1;
      tem = gen_peephole2_1415 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L14930:
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L12798;
 L14928:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L12681;
    }
 L14929:
  if (memory_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L12699;
    }
 L14933:
  if (register_operand (x2, SImode))
    {
      operands[0] = x2;
      goto L13026;
    }
  goto ret0;
 L12798:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L12799;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L12799:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L12800;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L12800:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == CONST_INT)
    goto L14935;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L14935:
  if ((int) ((x3)->u.hwint[0]) == ((x3)->u.hwint[0]))
    switch ((int) ((x3)->u.hwint[0]))
      {
      case -4L:
        goto L12801;
      case -8L:
        goto L12810;
      case 4L:
        goto L12855;
      case 8L:
        goto L12864;
      default:
        break;
      }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L12801:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12802;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L12802:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (optimize_size || !(x86_sub_esp_4 & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1550 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L12810:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12811;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L12811:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (optimize_size || !(x86_sub_esp_8 & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1551 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L12855:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12856;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L12856:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1555 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L12864:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12865;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L12865:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14939;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L14939:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14941;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L14941:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14943;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L14943:
  *_pmatch_len = 0;
  tem = gen_peephole2_1556 (insn, operands);
  if (tem != 0)
    return tem;
 L14944:
  if ((optimize_size))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1557 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14928;
 L12681:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (arith_or_logical_operator (x2, SImode))
    {
      operands[3] = x2;
      goto L12682;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14929;
 L12682:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L12683;
 L12691:
  if (memory_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L12692;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14929;
 L12683:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (memory_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L12684;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12691;
 L12684:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12685;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12691;
 L12685:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (! optimize_size && ! (x86_read_modify & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1535 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12691;
 L12692:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L12693;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14929;
 L12693:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12694;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14929;
 L12694:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (! optimize_size && ! (x86_read_modify & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1536 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14929;
 L12699:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (arith_or_logical_operator (x2, SImode))
    {
      operands[3] = x2;
      goto L12700;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14933;
 L12700:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L12701;
 L12709:
  if (nonmemory_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L12710;
    }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14933;
 L12701:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (nonmemory_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L12702;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12709;
 L12702:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12703;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12709;
 L12703:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (! optimize_size && ! (x86_read_modify_write & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1537 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L12709;
 L12710:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[0]))
    goto L12711;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14933;
 L12711:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12712;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14933;
 L12712:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (! optimize_size && ! (x86_read_modify_write & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1538 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14933;
 L13026:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == MULT)
    goto L13027;
  goto ret0;
 L13027:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode)
    goto L14945;
  goto ret0;
 L14945:
  if (memory_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L13028;
    }
 L14946:
  if (nonimmediate_operand (x3, SImode))
    {
      operands[1] = x3;
      goto L13056;
    }
  goto ret0;
 L13028:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L13029;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14946;
 L13029:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L13030;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14946;
 L13030:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((ix86_tune == PROCESSOR_K8) && !optimize_size
   && (((enum rtx_code) (operands[2])->code) != CONST_INT
       || !(('K') == 'I' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 31 : ('K') == 'J' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 63 : ('K') == 'K' ? (((operands[2])->u.hwint[0])) >= -128 && (((operands[2])->u.hwint[0])) <= 127 : ('K') == 'L' ? (((operands[2])->u.hwint[0])) == 0xff || (((operands[2])->u.hwint[0])) == 0xffff : ('K') == 'M' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 3 : ('K') == 'N' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 255 : 0))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1574 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14946;
 L13056:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, SImode))
    {
      operands[2] = x3;
      goto L13057;
    }
  goto ret0;
 L13057:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L13058;
  goto ret0;
 L13058:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((ix86_tune == PROCESSOR_K8) && !optimize_size
   && (('K') == 'I' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 31 : ('K') == 'J' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 63 : ('K') == 'K' ? (((operands[2])->u.hwint[0])) >= -128 && (((operands[2])->u.hwint[0])) <= 127 : ('K') == 'L' ? (((operands[2])->u.hwint[0])) == 0xff || (((operands[2])->u.hwint[0])) == 0xffff : ('K') == 'M' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 3 : ('K') == 'N' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 255 : 0)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1577 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L14931:
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L12936;
 L14932:
  if (register_operand (x2, DImode))
    {
      operands[0] = x2;
      goto L13017;
    }
  goto ret0;
 L12936:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L12937;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L12937:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L12938;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L12938:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == CONST_INT)
    goto L14947;
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L14947:
  if ((int) ((x3)->u.hwint[0]) == ((x3)->u.hwint[0]))
    switch ((int) ((x3)->u.hwint[0]))
      {
      case -8L:
        goto L12939;
      case -16L:
        goto L12948;
      case 8L:
        goto L12993;
      case 16L:
        goto L13002;
      default:
        break;
      }
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L12939:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12940;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L12940:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (optimize_size || !(x86_sub_esp_4 & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1565 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L12948:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12949;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L12949:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && (optimize_size || !(x86_sub_esp_8 & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1566 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L12993:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12994;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L12994:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1570 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L13002:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L13003;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L13003:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14951;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L14951:
  if (((enum rtx_code) (x2)->code) == REG)
    goto L14953;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L14953:
  if ((((x2)->u.fld[0]).rtint) == 17)
    goto L14955;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L14955:
  *_pmatch_len = 0;
  tem = gen_peephole2_1571 (insn, operands);
  if (tem != 0)
    return tem;
 L14956:
  if ((optimize_size))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1572 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[0]).rtx1);
  goto L14932;
 L13017:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode)
    goto L14957;
  goto ret0;
 L14957:
  switch (((enum rtx_code) (x2)->code))
    {
    case MULT:
      goto L13018;
    case ZERO_EXTEND:
      goto L13036;
    default:
     break;
   }
  goto ret0;
 L13018:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode)
    goto L14959;
  goto ret0;
 L14959:
  if (memory_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L13019;
    }
 L14960:
  if (nonimmediate_operand (x3, DImode))
    {
      operands[1] = x3;
      goto L13047;
    }
  goto ret0;
 L13019:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L13020;
    }
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14960;
 L13020:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L13021;
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14960;
 L13021:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((ix86_tune == PROCESSOR_K8) && !optimize_size
   && (((enum rtx_code) (operands[2])->code) != CONST_INT
       || !(('K') == 'I' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 31 : ('K') == 'J' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 63 : ('K') == 'K' ? (((operands[2])->u.hwint[0])) >= -128 && (((operands[2])->u.hwint[0])) <= 127 : ('K') == 'L' ? (((operands[2])->u.hwint[0])) == 0xff || (((operands[2])->u.hwint[0])) == 0xffff : ('K') == 'M' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 3 : ('K') == 'N' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 255 : 0))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1573 (insn, operands);
      if (tem != 0)
        return tem;
    }
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  x2 = (((x1)->u.fld[1]).rtx1);
  x3 = (((x2)->u.fld[0]).rtx1);
  goto L14960;
 L13047:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (const_int_operand (x3, DImode))
    {
      operands[2] = x3;
      goto L13048;
    }
  goto ret0;
 L13048:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L13049;
  goto ret0;
 L13049:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((ix86_tune == PROCESSOR_K8) && !optimize_size
   && (('K') == 'I' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 31 : ('K') == 'J' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 63 : ('K') == 'K' ? (((operands[2])->u.hwint[0])) >= -128 && (((operands[2])->u.hwint[0])) <= 127 : ('K') == 'L' ? (((operands[2])->u.hwint[0])) == 0xff || (((operands[2])->u.hwint[0])) == 0xffff : ('K') == 'M' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 3 : ('K') == 'N' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 255 : 0)))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1576 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L13036:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == MULT)
    goto L13037;
  goto ret0;
 L13037:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (memory_operand (x4, SImode))
    {
      operands[1] = x4;
      goto L13038;
    }
  goto ret0;
 L13038:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (immediate_operand (x4, SImode))
    {
      operands[2] = x4;
      goto L13039;
    }
  goto ret0;
 L13039:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L13040;
  goto ret0;
 L13040:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((ix86_tune == PROCESSOR_K8) && !optimize_size
   && (((enum rtx_code) (operands[2])->code) != CONST_INT
       || !(('K') == 'I' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 31 : ('K') == 'J' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 63 : ('K') == 'K' ? (((operands[2])->u.hwint[0])) >= -128 && (((operands[2])->u.hwint[0])) <= 127 : ('K') == 'L' ? (((operands[2])->u.hwint[0])) == 0xff || (((operands[2])->u.hwint[0])) == 0xffff : ('K') == 'M' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 3 : ('K') == 'N' ? (((operands[2])->u.hwint[0])) >= 0 && (((operands[2])->u.hwint[0])) <= 255 : 0))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1575 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L14934:
  if (register_operand (x2, HImode))
    {
      operands[0] = x2;
      goto L13063;
    }
  goto ret0;
 L13063:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == HImode
      && ((enum rtx_code) (x2)->code) == MULT)
    goto L13064;
  goto ret0;
 L13064:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (nonimmediate_operand (x3, HImode))
    {
      operands[1] = x3;
      goto L13065;
    }
  goto ret0;
 L13065:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (immediate_operand (x3, HImode))
    {
      operands[2] = x3;
      goto L13066;
    }
  goto ret0;
 L13066:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L13067;
  goto ret0;
 L13067:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17
      && ((ix86_tune == PROCESSOR_K8) && !optimize_size))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1578 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 ret0:
  return 0;
}
static rtx
peephole2_3 (rtx x0 ,
 rtx insn ,
 int *_pmatch_len )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  rtx tem ;
  switch ((((((x0)->u.fld[0]).rtvec1))->num_elem))
    {
    case 2:
      goto L12245;
    case 7:
      goto L12287;
    case 3:
      goto L12772;
    default:
      break;
    }
  goto ret0;
 L12245:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12246;
  goto ret0;
 L12246:
  return peephole2_2 (x0, insn, _pmatch_len);
 L12287:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12288;
  goto ret0;
 L12288:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12289;
  goto ret0;
 L12289:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode)
    goto L14961;
  goto ret0;
 L14961:
  switch (((enum rtx_code) (x2)->code))
    {
    case COMPARE:
      goto L12290;
    case IF_THEN_ELSE:
      goto L12326;
    default:
     break;
   }
  goto ret0;
 L12290:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == BLKmode
      && ((enum rtx_code) (x3)->code) == MEM)
    goto L12291;
  goto ret0;
 L12291:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, VOIDmode))
    {
      operands[4] = x4;
      goto L12292;
    }
  goto ret0;
 L12292:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == BLKmode
      && ((enum rtx_code) (x3)->code) == MEM)
    goto L12293;
  goto ret0;
 L12293:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, VOIDmode))
    {
      operands[5] = x4;
      goto L12294;
    }
  goto ret0;
 L12294:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L12295;
  goto ret0;
 L12295:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[6] = x2;
      goto L12296;
    }
  goto ret0;
 L12296:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L12297;
  goto ret0;
 L12297:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (immediate_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L12298;
    }
  goto ret0;
 L12298:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L12299;
  goto ret0;
 L12299:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19)
    goto L12300;
  goto ret0;
 L12300:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12301;
  goto ret0;
 L12301:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L12302;
    }
  goto ret0;
 L12302:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12303;
  goto ret0;
 L12303:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L12304;
    }
  goto ret0;
 L12304:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[6]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12305;
  goto ret0;
 L12305:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[2] = x2;
      goto L12306;
    }
  goto ret0;
 L12306:
  tem = peep2_next_insn (1);
  if (tem == (rtx) 0)
    goto ret0;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12307;
  goto ret0;
 L12307:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[7] = x2;
      goto L12308;
    }
  goto ret0;
 L12308:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == GTU)
    goto L12309;
  goto ret0;
 L12309:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == CCmode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L12310;
  goto ret0;
 L12310:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L12311;
  goto ret0;
 L12311:
  tem = peep2_next_insn (2);
  if (tem == (rtx) 0)
    goto ret0;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12312;
  goto ret0;
 L12312:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[8] = x2;
      goto L12313;
    }
  goto ret0;
 L12313:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == LTU)
    goto L12314;
  goto ret0;
 L12314:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == CCmode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L12315;
  goto ret0;
 L12315:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L12316;
  goto ret0;
 L12316:
  tem = peep2_next_insn (3);
  if (tem == (rtx) 0)
    goto ret0;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12317;
  goto ret0;
 L12317:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12318;
  goto ret0;
 L12318:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == COMPARE)
    goto L12319;
  goto ret0;
 L12319:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[7]))
    goto L12320;
  goto ret0;
 L12320:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[8])
      && (peep2_reg_dead_p (4, operands[7]) && peep2_reg_dead_p (4, operands[8])))
    {
      *_pmatch_len = 3;
      tem = gen_peephole2_1474 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L12326:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == NE)
    goto L12327;
  goto ret0;
 L12327:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (register_operand (x4, VOIDmode))
    {
      operands[6] = x4;
      goto L12328;
    }
  goto ret0;
 L12328:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (x4 == const_int_rtx[64 + (0)])
    goto L12329;
  goto ret0;
 L12329:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x3)->mode) == CCmode
      && ((enum rtx_code) (x3)->code) == COMPARE)
    goto L12330;
  goto ret0;
 L12330:
  x4 = (((x3)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x4)->mode) == BLKmode
      && ((enum rtx_code) (x4)->code) == MEM)
    goto L12331;
  goto ret0;
 L12331:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, VOIDmode))
    {
      operands[4] = x5;
      goto L12332;
    }
  goto ret0;
 L12332:
  x4 = (((x3)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x4)->mode) == BLKmode
      && ((enum rtx_code) (x4)->code) == MEM)
    goto L12333;
  goto ret0;
 L12333:
  x5 = (((x4)->u.fld[0]).rtx1);
  if (register_operand (x5, VOIDmode))
    {
      operands[5] = x5;
      goto L12334;
    }
  goto ret0;
 L12334:
  x3 = (((x2)->u.fld[2]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L12335;
  goto ret0;
 L12335:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L12336;
  goto ret0;
 L12336:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (immediate_operand (x2, SImode))
    {
      operands[3] = x2;
      goto L12337;
    }
  goto ret0;
 L12337:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L12338;
  goto ret0;
 L12338:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12339;
  goto ret0;
 L12339:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[3]);
  if (((enum rtx_code) (x1)->code) == USE)
    goto L12340;
  goto ret0;
 L12340:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 19)
    goto L12341;
  goto ret0;
 L12341:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[4]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12342;
  goto ret0;
 L12342:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[0] = x2;
      goto L12343;
    }
  goto ret0;
 L12343:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[5]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12344;
  goto ret0;
 L12344:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[1] = x2;
      goto L12345;
    }
  goto ret0;
 L12345:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[6]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12346;
  goto ret0;
 L12346:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, VOIDmode))
    {
      operands[2] = x2;
      goto L12347;
    }
  goto ret0;
 L12347:
  tem = peep2_next_insn (1);
  if (tem == (rtx) 0)
    goto ret0;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12348;
  goto ret0;
 L12348:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[7] = x2;
      goto L12349;
    }
  goto ret0;
 L12349:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == GTU)
    goto L12350;
  goto ret0;
 L12350:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == CCmode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L12351;
  goto ret0;
 L12351:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L12352;
  goto ret0;
 L12352:
  tem = peep2_next_insn (2);
  if (tem == (rtx) 0)
    goto ret0;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12353;
  goto ret0;
 L12353:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (register_operand (x2, QImode))
    {
      operands[8] = x2;
      goto L12354;
    }
  goto ret0;
 L12354:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == QImode
      && ((enum rtx_code) (x2)->code) == LTU)
    goto L12355;
  goto ret0;
 L12355:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == CCmode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 17)
    goto L12356;
  goto ret0;
 L12356:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (x3 == const_int_rtx[64 + (0)])
    goto L12357;
  goto ret0;
 L12357:
  tem = peep2_next_insn (3);
  if (tem == (rtx) 0)
    goto ret0;
  x1 = (((tem)->u.fld[5]).rtx1);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12358;
  goto ret0;
 L12358:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12359;
  goto ret0;
 L12359:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x2)->code) == COMPARE)
    goto L12360;
  goto ret0;
 L12360:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (rtx_equal_p (x3, operands[7]))
    goto L12361;
  goto ret0;
 L12361:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (rtx_equal_p (x3, operands[8])
      && (peep2_reg_dead_p (4, operands[7]) && peep2_reg_dead_p (4, operands[8])))
    {
      *_pmatch_len = 3;
      tem = gen_peephole2_1475 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L12772:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x1)->code) == SET)
    goto L12773;
  goto ret0;
 L12773:
  x2 = (((x1)->u.fld[0]).rtx1);
  switch (((enum machine_mode) (x2)->mode))
    {
    case SImode:
      goto L14963;
    case DImode:
      goto L14964;
    default:
      break;
    }
  goto ret0;
 L14963:
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L12774;
  goto ret0;
 L12774:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == SImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L12775;
  goto ret0;
 L12775:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == SImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L12776;
  goto ret0;
 L12776:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == CONST_INT)
    goto L14965;
  goto ret0;
 L14965:
  if ((int) ((x3)->u.hwint[0]) == ((x3)->u.hwint[0]))
    switch ((int) ((x3)->u.hwint[0]))
      {
      case -4L:
        goto L12777;
      case -8L:
        goto L12789;
      case 4L:
        goto L12819;
      case 8L:
        goto L12831;
      default:
        break;
      }
  goto ret0;
 L12777:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12778;
  goto ret0;
 L12778:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12779;
  goto ret0;
 L12779:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12780;
  goto ret0;
 L12780:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L12781;
  goto ret0;
 L12781:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (optimize_size || !(x86_sub_esp_4 & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1548 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L12789:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12790;
  goto ret0;
 L12790:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12791;
  goto ret0;
 L12791:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12792;
  goto ret0;
 L12792:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L12793;
  goto ret0;
 L12793:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (optimize_size || !(x86_sub_esp_8 & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1549 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L12819:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12820;
  goto ret0;
 L12820:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12821;
  goto ret0;
 L12821:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12822;
  goto ret0;
 L12822:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L12823;
  goto ret0;
 L12823:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (optimize_size || !(x86_add_esp_4 & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1552 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L12831:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12832;
  goto ret0;
 L12832:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12833;
  goto ret0;
 L12833:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12834;
  goto ret0;
 L12834:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L12835;
  goto ret0;
 L12835:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH)
    goto L14969;
  goto ret0;
 L14969:
  if ((optimize_size || !(x86_add_esp_8 & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1553 (insn, operands);
      if (tem != 0)
        return tem;
    }
 L14970:
  if ((optimize_size))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1554 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L14964:
  if (((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 7)
    goto L12912;
  goto ret0;
 L12912:
  x2 = (((x1)->u.fld[1]).rtx1);
  if (((enum machine_mode) (x2)->mode) == DImode
      && ((enum rtx_code) (x2)->code) == PLUS)
    goto L12913;
  goto ret0;
 L12913:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x3)->mode) == DImode
      && ((enum rtx_code) (x3)->code) == REG
      && (((x3)->u.fld[0]).rtint) == 7)
    goto L12914;
  goto ret0;
 L12914:
  x3 = (((x2)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x3)->code) == CONST_INT)
    goto L14971;
  goto ret0;
 L14971:
  if ((int) ((x3)->u.hwint[0]) == ((x3)->u.hwint[0]))
    switch ((int) ((x3)->u.hwint[0]))
      {
      case -8L:
        goto L12915;
      case -16L:
        goto L12927;
      case 8L:
        goto L12957;
      case 16L:
        goto L12969;
      default:
        break;
      }
  goto ret0;
 L12915:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12916;
  goto ret0;
 L12916:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12917;
  goto ret0;
 L12917:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12918;
  goto ret0;
 L12918:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L12919;
  goto ret0;
 L12919:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (optimize_size || !(x86_sub_esp_4 & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1563 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L12927:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12928;
  goto ret0;
 L12928:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12929;
  goto ret0;
 L12929:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12930;
  goto ret0;
 L12930:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L12931;
  goto ret0;
 L12931:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (optimize_size || !(x86_sub_esp_8 & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1564 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L12957:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12958;
  goto ret0;
 L12958:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12959;
  goto ret0;
 L12959:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12960;
  goto ret0;
 L12960:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L12961;
  goto ret0;
 L12961:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH
      && (optimize_size || !(x86_add_esp_4 & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1567 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 L12969:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12970;
  goto ret0;
 L12970:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == CCmode
      && ((enum rtx_code) (x2)->code) == REG
      && (((x2)->u.fld[0]).rtint) == 17)
    goto L12971;
  goto ret0;
 L12971:
  x1 = (((((x0)->u.fld[0]).rtvec1))->elem[2]);
  if (((enum rtx_code) (x1)->code) == CLOBBER)
    goto L12972;
  goto ret0;
 L12972:
  x2 = (((x1)->u.fld[0]).rtx1);
  if (((enum machine_mode) (x2)->mode) == BLKmode
      && ((enum rtx_code) (x2)->code) == MEM)
    goto L12973;
  goto ret0;
 L12973:
  x3 = (((x2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x3)->code) == SCRATCH)
    goto L14975;
  goto ret0;
 L14975:
  if ((optimize_size || !(x86_add_esp_8 & (1 << ix86_tune))))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1568 (insn, operands);
      if (tem != 0)
        return tem;
    }
 L14976:
  if ((optimize_size))
    {
      *_pmatch_len = 0;
      tem = gen_peephole2_1569 (insn, operands);
      if (tem != 0)
        return tem;
    }
  goto ret0;
 ret0:
  return 0;
}
rtx
peephole2_insns (rtx x0 ,
 rtx insn ,
 int *_pmatch_len )
{
  rtx * const operands = &recog_data.operand[0];
  rtx x1 ;
  rtx x2 ;
  rtx x3 ;
  rtx x4 ;
  rtx x5 ;
  rtx x6 ;
  rtx x7 ;
  rtx tem ;
  recog_data.insn = (rtx) 0;
  switch (((enum rtx_code) (x0)->code))
    {
    case SET:
      goto L10943;
    case PARALLEL:
      goto L14877;
    default:
     break;
   }
  goto ret0;
 L10943:
  return peephole2_1 (x0, insn, _pmatch_len);
 L14877:
  return peephole2_3 (x0, insn, _pmatch_len);
 ret0:
  return 0;
}
rtx
gen_rtx_fmt_s (enum rtx_code code, enum machine_mode mode,
 const char *arg0)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtstr) = arg0;
  return rt;
}
rtx
gen_rtx_fmt_ee (enum rtx_code code, enum machine_mode mode,
 rtx arg0,
 rtx arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = arg0;
  (((rt)->u.fld[1]).rtx1) = arg1;
  return rt;
}
rtx
gen_rtx_fmt_ue (enum rtx_code code, enum machine_mode mode,
 rtx arg0,
 rtx arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = arg0;
  (((rt)->u.fld[1]).rtx1) = arg1;
  return rt;
}
rtx
gen_rtx_fmt_iss (enum rtx_code code, enum machine_mode mode,
 int arg0,
 const char *arg1,
 const char *arg2)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  (((rt)->u.fld[1]).rtstr) = arg1;
  (((rt)->u.fld[2]).rtstr) = arg2;
  return rt;
}
rtx
gen_rtx_fmt_is (enum rtx_code code, enum machine_mode mode,
 int arg0,
 const char *arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  (((rt)->u.fld[1]).rtstr) = arg1;
  return rt;
}
rtx
gen_rtx_fmt_i (enum rtx_code code, enum machine_mode mode,
 int arg0)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  return rt;
}
rtx
gen_rtx_fmt_isE (enum rtx_code code, enum machine_mode mode,
 int arg0,
 const char *arg1,
 rtvec arg2)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  (((rt)->u.fld[1]).rtstr) = arg1;
  (((rt)->u.fld[2]).rtvec1) = arg2;
  return rt;
}
rtx
gen_rtx_fmt_iE (enum rtx_code code, enum machine_mode mode,
 int arg0,
 rtvec arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  (((rt)->u.fld[1]).rtvec1) = arg1;
  return rt;
}
rtx
gen_rtx_fmt_sEss (enum rtx_code code, enum machine_mode mode,
 const char *arg0,
 rtvec arg1,
 const char *arg2,
 const char *arg3)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtstr) = arg0;
  (((rt)->u.fld[1]).rtvec1) = arg1;
  (((rt)->u.fld[2]).rtstr) = arg2;
  (((rt)->u.fld[3]).rtstr) = arg3;
  return rt;
}
rtx
gen_rtx_fmt_eE (enum rtx_code code, enum machine_mode mode,
 rtx arg0,
 rtvec arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = arg0;
  (((rt)->u.fld[1]).rtvec1) = arg1;
  return rt;
}
rtx
gen_rtx_fmt_Ess (enum rtx_code code, enum machine_mode mode,
 rtvec arg0,
 const char *arg1,
 const char *arg2)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtvec1) = arg0;
  (((rt)->u.fld[1]).rtstr) = arg1;
  (((rt)->u.fld[2]).rtstr) = arg2;
  return rt;
}
rtx
gen_rtx_fmt_E (enum rtx_code code, enum machine_mode mode,
 rtvec arg0)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtvec1) = arg0;
  return rt;
}
rtx
gen_rtx_fmt_e (enum rtx_code code, enum machine_mode mode,
 rtx arg0)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = arg0;
  return rt;
}
rtx
gen_rtx_fmt_ss (enum rtx_code code, enum machine_mode mode,
 const char *arg0,
 const char *arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtstr) = arg0;
  (((rt)->u.fld[1]).rtstr) = arg1;
  return rt;
}
rtx
gen_rtx_fmt_sies (enum rtx_code code, enum machine_mode mode,
 const char *arg0,
 int arg1,
 rtx arg2,
 const char *arg3)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtstr) = arg0;
  (((rt)->u.fld[1]).rtint) = arg1;
  (((rt)->u.fld[2]).rtx1) = arg2;
  (((rt)->u.fld[3]).rtstr) = arg3;
  return rt;
}
rtx
gen_rtx_fmt_sse (enum rtx_code code, enum machine_mode mode,
 const char *arg0,
 const char *arg1,
 rtx arg2)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtstr) = arg0;
  (((rt)->u.fld[1]).rtstr) = arg1;
  (((rt)->u.fld[2]).rtx1) = arg2;
  return rt;
}
rtx
gen_rtx_fmt_sE (enum rtx_code code, enum machine_mode mode,
 const char *arg0,
 rtvec arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtstr) = arg0;
  (((rt)->u.fld[1]).rtvec1) = arg1;
  return rt;
}
rtx
gen_rtx_fmt_ii (enum rtx_code code, enum machine_mode mode,
 int arg0,
 int arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  (((rt)->u.fld[1]).rtint) = arg1;
  return rt;
}
rtx
gen_rtx_fmt_iuuBieiee (enum rtx_code code, enum machine_mode mode,
 int arg0,
 rtx arg1,
 rtx arg2,
 struct basic_block_def *arg3,
 int arg4,
 rtx arg5,
 int arg6,
 rtx arg7,
 rtx arg8)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  (((rt)->u.fld[1]).rtx1) = arg1;
  (((rt)->u.fld[2]).rtx1) = arg2;
  (((rt)->u.fld[3]).bb) = arg3;
  (((rt)->u.fld[4]).rtint) = arg4;
  (((rt)->u.fld[5]).rtx1) = arg5;
  (((rt)->u.fld[6]).rtint) = arg6;
  (((rt)->u.fld[7]).rtx1) = arg7;
  (((rt)->u.fld[8]).rtx1) = arg8;
  return rt;
}
rtx
gen_rtx_fmt_iuuBieiee0 (enum rtx_code code, enum machine_mode mode,
 int arg0,
 rtx arg1,
 rtx arg2,
 struct basic_block_def *arg3,
 int arg4,
 rtx arg5,
 int arg6,
 rtx arg7,
 rtx arg8)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  (((rt)->u.fld[1]).rtx1) = arg1;
  (((rt)->u.fld[2]).rtx1) = arg2;
  (((rt)->u.fld[3]).bb) = arg3;
  (((rt)->u.fld[4]).rtint) = arg4;
  (((rt)->u.fld[5]).rtx1) = arg5;
  (((rt)->u.fld[6]).rtint) = arg6;
  (((rt)->u.fld[7]).rtx1) = arg7;
  (((rt)->u.fld[8]).rtx1) = arg8;
  (((rt)->u.fld[9]).rtx1) = (rtx) 0;
  return rt;
}
rtx
gen_rtx_fmt_iuuBieieee (enum rtx_code code, enum machine_mode mode,
 int arg0,
 rtx arg1,
 rtx arg2,
 struct basic_block_def *arg3,
 int arg4,
 rtx arg5,
 int arg6,
 rtx arg7,
 rtx arg8,
 rtx arg9)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  (((rt)->u.fld[1]).rtx1) = arg1;
  (((rt)->u.fld[2]).rtx1) = arg2;
  (((rt)->u.fld[3]).bb) = arg3;
  (((rt)->u.fld[4]).rtint) = arg4;
  (((rt)->u.fld[5]).rtx1) = arg5;
  (((rt)->u.fld[6]).rtint) = arg6;
  (((rt)->u.fld[7]).rtx1) = arg7;
  (((rt)->u.fld[8]).rtx1) = arg8;
  (((rt)->u.fld[9]).rtx1) = arg9;
  return rt;
}
rtx
gen_rtx_fmt_iuu000000 (enum rtx_code code, enum machine_mode mode,
 int arg0,
 rtx arg1,
 rtx arg2)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  (((rt)->u.fld[1]).rtx1) = arg1;
  (((rt)->u.fld[2]).rtx1) = arg2;
  (((rt)->u.fld[3]).rtx1) = (rtx) 0;
  (((rt)->u.fld[4]).rtx1) = (rtx) 0;
  (((rt)->u.fld[5]).rtx1) = (rtx) 0;
  (((rt)->u.fld[6]).rtx1) = (rtx) 0;
  (((rt)->u.fld[7]).rtx1) = (rtx) 0;
  (((rt)->u.fld[8]).rtx1) = (rtx) 0;
  return rt;
}
rtx
gen_rtx_fmt_iuuB00is (enum rtx_code code, enum machine_mode mode,
 int arg0,
 rtx arg1,
 rtx arg2,
 struct basic_block_def *arg3,
 int arg4,
 const char *arg5)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  (((rt)->u.fld[1]).rtx1) = arg1;
  (((rt)->u.fld[2]).rtx1) = arg2;
  (((rt)->u.fld[3]).bb) = arg3;
  (((rt)->u.fld[4]).rtx1) = (rtx) 0;
  (((rt)->u.fld[5]).rtx1) = (rtx) 0;
  (((rt)->u.fld[6]).rtint) = arg4;
  (((rt)->u.fld[7]).rtstr) = arg5;
  return rt;
}
rtx
gen_rtx_fmt_ssiEEsi (enum rtx_code code, enum machine_mode mode,
 const char *arg0,
 const char *arg1,
 int arg2,
 rtvec arg3,
 rtvec arg4,
 const char *arg5,
 int arg6)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtstr) = arg0;
  (((rt)->u.fld[1]).rtstr) = arg1;
  (((rt)->u.fld[2]).rtint) = arg2;
  (((rt)->u.fld[3]).rtvec1) = arg3;
  (((rt)->u.fld[4]).rtvec1) = arg4;
  (((rt)->u.fld[5]).rtstr) = arg5;
  (((rt)->u.fld[6]).rtint) = arg6;
  return rt;
}
rtx
gen_rtx_fmt_Ei (enum rtx_code code, enum machine_mode mode,
 rtvec arg0,
 int arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtvec1) = arg0;
  (((rt)->u.fld[1]).rtint) = arg1;
  return rt;
}
rtx
gen_rtx_fmt_eEee0 (enum rtx_code code, enum machine_mode mode,
 rtx arg0,
 rtvec arg1,
 rtx arg2,
 rtx arg3)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = arg0;
  (((rt)->u.fld[1]).rtvec1) = arg1;
  (((rt)->u.fld[2]).rtx1) = arg2;
  (((rt)->u.fld[3]).rtx1) = arg3;
  (((rt)->u.fld[4]).rtx1) = (rtx) 0;
  return rt;
}
rtx
gen_rtx_fmt_eee (enum rtx_code code, enum machine_mode mode,
 rtx arg0,
 rtx arg1,
 rtx arg2)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = arg0;
  (((rt)->u.fld[1]).rtx1) = arg1;
  (((rt)->u.fld[2]).rtx1) = arg2;
  return rt;
}
rtx
gen_rtx_fmt_ (enum rtx_code code, enum machine_mode mode)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  return rt;
}
rtx
gen_rtx_fmt_w (enum rtx_code code, enum machine_mode mode,
 long arg0)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  ((rt)->u.hwint[0]) = arg0;
  return rt;
}
rtx
gen_rtx_fmt_0 (enum rtx_code code, enum machine_mode mode)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = (rtx) 0;
  return rt;
}
rtx
gen_rtx_fmt_i00 (enum rtx_code code, enum machine_mode mode,
 int arg0)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  (((rt)->u.fld[1]).rtx1) = (rtx) 0;
  (((rt)->u.fld[2]).rtx1) = (rtx) 0;
  return rt;
}
rtx
gen_rtx_fmt_ei (enum rtx_code code, enum machine_mode mode,
 rtx arg0,
 int arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = arg0;
  (((rt)->u.fld[1]).rtint) = arg1;
  return rt;
}
rtx
gen_rtx_fmt_e0 (enum rtx_code code, enum machine_mode mode,
 rtx arg0)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = arg0;
  (((rt)->u.fld[1]).rtx1) = (rtx) 0;
  return rt;
}
rtx
gen_rtx_fmt_u00 (enum rtx_code code, enum machine_mode mode,
 rtx arg0)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = arg0;
  (((rt)->u.fld[1]).rtx1) = (rtx) 0;
  (((rt)->u.fld[2]).rtx1) = (rtx) 0;
  return rt;
}
rtx
gen_rtx_fmt_s00 (enum rtx_code code, enum machine_mode mode,
 const char *arg0)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtstr) = arg0;
  (((rt)->u.fld[1]).rtx1) = (rtx) 0;
  (((rt)->u.fld[2]).rtx1) = (rtx) 0;
  return rt;
}
rtx
gen_rtx_fmt_eeeee (enum rtx_code code, enum machine_mode mode,
 rtx arg0,
 rtx arg1,
 rtx arg2,
 rtx arg3,
 rtx arg4)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = arg0;
  (((rt)->u.fld[1]).rtx1) = arg1;
  (((rt)->u.fld[2]).rtx1) = arg2;
  (((rt)->u.fld[3]).rtx1) = arg3;
  (((rt)->u.fld[4]).rtx1) = arg4;
  return rt;
}
rtx
gen_rtx_fmt_Ee (enum rtx_code code, enum machine_mode mode,
 rtvec arg0,
 rtx arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtvec1) = arg0;
  (((rt)->u.fld[1]).rtx1) = arg1;
  return rt;
}
rtx
gen_rtx_fmt_uuEiiiiiibbii (enum rtx_code code, enum machine_mode mode,
 rtx arg0,
 rtx arg1,
 rtvec arg2,
 int arg3,
 int arg4,
 int arg5,
 int arg6,
 int arg7,
 int arg8,
 struct bitmap_head_def *arg9,
 struct bitmap_head_def *arg10,
 int arg11,
 int arg12)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = arg0;
  (((rt)->u.fld[1]).rtx1) = arg1;
  (((rt)->u.fld[2]).rtvec1) = arg2;
  (((rt)->u.fld[3]).rtint) = arg3;
  (((rt)->u.fld[4]).rtint) = arg4;
  (((rt)->u.fld[5]).rtint) = arg5;
  (((rt)->u.fld[6]).rtint) = arg6;
  (((rt)->u.fld[7]).rtint) = arg7;
  (((rt)->u.fld[8]).rtint) = arg8;
  (((rt)->u.fld[9]).rtbit) = arg9;
  (((rt)->u.fld[10]).rtbit) = arg10;
  (((rt)->u.fld[11]).rtint) = arg11;
  (((rt)->u.fld[12]).rtint) = arg12;
  return rt;
}
rtx
gen_rtx_fmt_iiiiiiiitt (enum rtx_code code, enum machine_mode mode,
 int arg0,
 int arg1,
 int arg2,
 int arg3,
 int arg4,
 int arg5,
 int arg6,
 int arg7,
 union tree_node *arg8,
 union tree_node *arg9)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtint) = arg0;
  (((rt)->u.fld[1]).rtint) = arg1;
  (((rt)->u.fld[2]).rtint) = arg2;
  (((rt)->u.fld[3]).rtint) = arg3;
  (((rt)->u.fld[4]).rtint) = arg4;
  (((rt)->u.fld[5]).rtint) = arg5;
  (((rt)->u.fld[6]).rtint) = arg6;
  (((rt)->u.fld[7]).rtint) = arg7;
  (((rt)->u.fld[8]).rttree) = arg8;
  (((rt)->u.fld[9]).rttree) = arg9;
  return rt;
}
rtx
gen_rtx_fmt_eti (enum rtx_code code, enum machine_mode mode,
 rtx arg0,
 union tree_node *arg1,
 int arg2)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtx1) = arg0;
  (((rt)->u.fld[1]).rttree) = arg1;
  (((rt)->u.fld[2]).rtint) = arg2;
  return rt;
}
rtx
gen_rtx_fmt_bi (enum rtx_code code, enum machine_mode mode,
 struct bitmap_head_def *arg0,
 int arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rtbit) = arg0;
  (((rt)->u.fld[1]).rtint) = arg1;
  return rt;
}
rtx
gen_rtx_fmt_te (enum rtx_code code, enum machine_mode mode,
 union tree_node *arg0,
 rtx arg1)
{
  rtx rt;
  rt = ((rtx) ggc_alloc_typed_stat (gt_ggc_e_7rtx_def,rtx_size[code] ));
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  ((rt)->mode = (mode));
  (((rt)->u.fld[0]).rttree) = arg0;
  (((rt)->u.fld[1]).rtx1) = arg1;
  return rt;
}
typedef struct cselib_val_struct
{
  unsigned int value1;
  union cselib_val_u
  {
    rtx val_rtx;
    struct cselib_val_struct * next_free;
  } u;
  struct elt_loc_list *locs;
  struct elt_list *addr_list;
  struct cselib_val_struct *next_containing_mem;
} cselib_val;
struct elt_loc_list
{
  struct elt_loc_list *next;
  rtx loc;
  rtx setting_insn;
  unsigned char in_libcall;
};
struct elt_list
{
  struct elt_list *next;
  cselib_val *elt;
};
extern cselib_val *cselib_lookup (rtx, enum machine_mode, int);
extern void cselib_init (unsigned char record_memory);
extern void cselib_finish (void);
extern void cselib_process_insn (rtx);
extern enum machine_mode cselib_reg_set_mode (rtx);
extern int rtx_equal_for_cselib_p (rtx, rtx);
extern int references_value_p (rtx, int);
extern rtx cselib_subst_to_values (rtx);
enum libfunc_index
{
  LTI_abort,
  LTI_memcpy,
  LTI_memmove,
  LTI_memcmp,
  LTI_memset,
  LTI_setbits,
  LTI_unwind_resume,
  LTI_eh_personality,
  LTI_setjmp,
  LTI_longjmp,
  LTI_unwind_sjlj_register,
  LTI_unwind_sjlj_unregister,
  LTI_profile_function_entry,
  LTI_profile_function_exit,
  LTI_gcov_flush,
  LTI_MAX
};
extern rtx libfunc_table[LTI_MAX];
struct gcc_debug_hooks
{
  void (* init) (const char *main_filename);
  void (* finish) (const char *main_filename);
  void (* define) (unsigned int line, const char *text);
  void (* undef) (unsigned int line, const char *macro);
  void (* start_source_file) (unsigned int line, const char *file);
  void (* end_source_file) (unsigned int line);
  void (* begin_block) (unsigned int line, unsigned int n);
  void (* end_block) (unsigned int line, unsigned int n);
  unsigned char (* ignore_block) (tree);
  void (* source_line) (unsigned int line, const char *file);
  void (* begin_prologue) (unsigned int line, const char *file);
  void (* end_prologue) (unsigned int line, const char *file);
  void (* end_epilogue) (unsigned int line, const char *file);
  void (* begin_function) (tree decl);
  void (* end_function) (unsigned int line);
  void (* function_decl) (tree decl);
  void (* global_decl) (tree decl);
  void (* type_decl) (tree decl, int local);
  void (* imported_module_or_decl) (tree decl, tree context);
  void (* deferred_inline_function) (tree decl);
  void (* outlining_inline_function) (tree decl);
  void (* label) (rtx);
  void (* handle_pch) (unsigned int);
  void (* var_location) (rtx);
};
extern const struct gcc_debug_hooks *debug_hooks;
extern void debug_nothing_void (void);
extern void debug_nothing_charstar (const char *);
extern void debug_nothing_int_charstar (unsigned int, const char *);
extern void debug_nothing_int (unsigned int);
extern void debug_nothing_int_int (unsigned int, unsigned int);
extern void debug_nothing_tree (tree);
extern void debug_nothing_tree_int (tree, int);
extern void debug_nothing_tree_tree (tree, tree);
extern unsigned char debug_true_tree (tree);
extern void debug_nothing_rtx (rtx);
extern const struct gcc_debug_hooks do_nothing_debug_hooks;
extern const struct gcc_debug_hooks dbx_debug_hooks;
extern const struct gcc_debug_hooks sdb_debug_hooks;
extern const struct gcc_debug_hooks xcoff_debug_hooks;
extern const struct gcc_debug_hooks dwarf2_debug_hooks;
extern const struct gcc_debug_hooks vmsdbg_debug_hooks;
extern void dwarf2out_begin_prologue (unsigned int, const char *);
extern void dwarf2out_end_epilogue (unsigned int, const char *);
extern void dwarf2out_frame_init (void);
extern void dwarf2out_frame_finish (void);
extern int dwarf2out_do_frame (void);
extern void debug_flush_symbol_queue (void);
extern void debug_queue_symbol (tree);
extern void debug_free_queue (void);
extern int debug_nesting;
extern int symbol_queue_index;
void
gt_ggc_mx_edge_prediction (void *x_p)
{
  struct edge_prediction * x = (struct edge_prediction *)x_p;
  struct edge_prediction * xlimit = x;
  while (((xlimit) != ((void *)0) && ((void *) (xlimit)) != (void *) 1 && ! ggc_set_mark (xlimit)))
   xlimit = ((*xlimit).next);
  while (x != xlimit)
    {
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_edge_prediction ((*x).next); } while (0);
      do { if ((*x).edge1 != ((void *)0)) gt_ggc_mx_edge_def ((*x).edge1); } while (0);
      x = ((*x).next);
    }
}
void
gt_ggc_mx_v_must_def_optype_d (void *x_p)
{
  struct v_must_def_optype_d * const x = (struct v_must_def_optype_d *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_v_must_defs); i0++) {
          do { if ((*x).v_must_defs[i0] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).v_must_defs[i0]); } while (0);
        }
      }
    }
}
void
gt_ggc_mx_vuse_optype_d (void *x_p)
{
  struct vuse_optype_d * const x = (struct vuse_optype_d *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_vuses); i0++) {
          do { if ((*x).vuses[i0] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).vuses[i0]); } while (0);
        }
      }
    }
}
void
gt_ggc_mx_v_may_def_optype_d (void *x_p)
{
  struct v_may_def_optype_d * const x = (struct v_may_def_optype_d *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_v_may_defs * 2); i0++) {
          do { if ((*x).v_may_defs[i0] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).v_may_defs[i0]); } while (0);
        }
      }
    }
}
void
gt_ggc_mx_use_optype_d (void *x_p)
{
  struct use_optype_d * const x = (struct use_optype_d *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_uses); i0++) {
        }
      }
    }
}
void
gt_ggc_mx_def_optype_d (void *x_p)
{
  struct def_optype_d * const x = (struct def_optype_d *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_defs); i0++) {
        }
      }
    }
}
void
gt_ggc_mx_dataflow_d (void *x_p)
{
  struct dataflow_d * const x = (struct dataflow_d *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).immediate_uses != ((void *)0)) gt_ggc_mx_varray_head_tag ((*x).immediate_uses); } while (0);
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(2); i0++) {
          do { if ((*x).uses[i0] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).uses[i0]); } while (0);
        }
      }
    }
}
void
gt_ggc_mx_cgraph_varpool_node (void *x_p)
{
  struct cgraph_varpool_node * const x = (struct cgraph_varpool_node *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).decl != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).decl); } while (0);
      do { if ((*x).next_needed != ((void *)0)) gt_ggc_mx_cgraph_varpool_node ((*x).next_needed); } while (0);
    }
}
void
gt_ggc_mx_cgraph_edge (void *x_p)
{
  struct cgraph_edge * x = (struct cgraph_edge *)x_p;
  struct cgraph_edge * xlimit = x;
  while (((xlimit) != ((void *)0) && ((void *) (xlimit)) != (void *) 1 && ! ggc_set_mark (xlimit)))
   xlimit = ((*xlimit).next_caller);
  while (x != xlimit)
    {
      do { if ((*x).caller != ((void *)0)) gt_ggc_mx_cgraph_node ((*x).caller); } while (0);
      do { if ((*x).callee != ((void *)0)) gt_ggc_mx_cgraph_node ((*x).callee); } while (0);
      do { if ((*x).next_caller != ((void *)0)) gt_ggc_mx_cgraph_edge ((*x).next_caller); } while (0);
      do { if ((*x).next_callee != ((void *)0)) gt_ggc_mx_cgraph_edge ((*x).next_callee); } while (0);
      do { if ((*x).call_expr != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).call_expr); } while (0);
      x = ((*x).next_caller);
    }
}
void
gt_ggc_mx_cgraph_node (void *x_p)
{
  struct cgraph_node * x = (struct cgraph_node *)x_p;
  struct cgraph_node * xlimit = x;
  while (((xlimit) != ((void *)0) && ((void *) (xlimit)) != (void *) 1 && ! ggc_set_mark (xlimit)))
   xlimit = ((*xlimit).next);
  if (x != xlimit)
    for (;;)
      {
        struct cgraph_node * const xprev = ((*x).previous);
        if (xprev == ((void *)0)) break;
        x = xprev;
        (void) ((xprev) != ((void *)0) && ((void *) (xprev)) != (void *) 1 && ! ggc_set_mark (xprev));
      }
  while (x != xlimit)
    {
      do { if ((*x).decl != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).decl); } while (0);
      do { if ((*x).callees != ((void *)0)) gt_ggc_mx_cgraph_edge ((*x).callees); } while (0);
      do { if ((*x).callers != ((void *)0)) gt_ggc_mx_cgraph_edge ((*x).callers); } while (0);
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_cgraph_node ((*x).next); } while (0);
      do { if ((*x).previous != ((void *)0)) gt_ggc_mx_cgraph_node ((*x).previous); } while (0);
      do { if ((*x).origin != ((void *)0)) gt_ggc_mx_cgraph_node ((*x).origin); } while (0);
      do { if ((*x).nested != ((void *)0)) gt_ggc_mx_cgraph_node ((*x).nested); } while (0);
      do { if ((*x).next_nested != ((void *)0)) gt_ggc_mx_cgraph_node ((*x).next_nested); } while (0);
      do { if ((*x).next_needed != ((void *)0)) gt_ggc_mx_cgraph_node ((*x).next_needed); } while (0);
      do { if ((*x).next_clone != ((void *)0)) gt_ggc_mx_cgraph_node ((*x).next_clone); } while (0);
      do { if ((*x).global.inlined_to != ((void *)0)) gt_ggc_mx_cgraph_node ((*x).global.inlined_to); } while (0);
      x = ((*x).next);
    }
}
void
gt_ggc_mx_bb_ann_d (void *x_p)
{
  struct bb_ann_d * const x = (struct bb_ann_d *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).phi_nodes != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).phi_nodes); } while (0);
      do { if ((*x).predictions != ((void *)0)) gt_ggc_mx_edge_prediction ((*x).predictions); } while (0);
    }
}
void
gt_ggc_mx_elt_loc_list (void *x_p)
{
  struct elt_loc_list * const x = (struct elt_loc_list *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_elt_loc_list ((*x).next); } while (0);
      do { if ((*x).loc != ((void *)0)) gt_ggc_mx_rtx_def ((*x).loc); } while (0);
      do { if ((*x).setting_insn != ((void *)0)) gt_ggc_mx_rtx_def ((*x).setting_insn); } while (0);
    }
}
void
gt_ggc_mx_cselib_val_struct (void *x_p)
{
  struct cselib_val_struct * const x = (struct cselib_val_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      switch (1)
        {
        case 1:
          do { if ((*x).u.val_rtx != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.val_rtx); } while (0);
          break;
        default:
          break;
        }
      do { if ((*x).locs != ((void *)0)) gt_ggc_mx_elt_loc_list ((*x).locs); } while (0);
      do { if ((*x).addr_list != ((void *)0)) gt_ggc_mx_elt_list ((*x).addr_list); } while (0);
      do { if ((*x).next_containing_mem != ((void *)0)) gt_ggc_mx_cselib_val_struct ((*x).next_containing_mem); } while (0);
    }
}
void
gt_ggc_mx_elt_list (void *x_p)
{
  struct elt_list * const x = (struct elt_list *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_elt_list ((*x).next); } while (0);
      do { if ((*x).elt != ((void *)0)) gt_ggc_mx_cselib_val_struct ((*x).elt); } while (0);
    }
}
void
gt_ggc_mx_tree_statement_list_node (void *x_p)
{
  struct tree_statement_list_node * x = (struct tree_statement_list_node *)x_p;
  struct tree_statement_list_node * xlimit = x;
  while (((xlimit) != ((void *)0) && ((void *) (xlimit)) != (void *) 1 && ! ggc_set_mark (xlimit)))
   xlimit = ((*xlimit).next);
  if (x != xlimit)
    for (;;)
      {
        struct tree_statement_list_node * const xprev = ((*x).prev);
        if (xprev == ((void *)0)) break;
        x = xprev;
        (void) ((xprev) != ((void *)0) && ((void *) (xprev)) != (void *) 1 && ! ggc_set_mark (xprev));
      }
  while (x != xlimit)
    {
      do { if ((*x).prev != ((void *)0)) gt_ggc_mx_tree_statement_list_node ((*x).prev); } while (0);
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_tree_statement_list_node ((*x).next); } while (0);
      do { if ((*x).stmt != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).stmt); } while (0);
      x = ((*x).next);
    }
}
void
gt_ggc_mx_alias_var_def (void *x_p)
{
  union alias_var_def * const x = (union alias_var_def *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      switch ((*x).common.kind)
        {
        case -1:
          do { if ((*x).common.decl != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).common.decl); } while (0);
          break;
        case ATERM_AVAR:
          do { if ((*x).aterm.common.decl != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).aterm.common.decl); } while (0);
          break;
        default:
          break;
        }
    }
}
void
gt_ggc_mx_edge_def (void *x_p)
{
  struct edge_def * x = (struct edge_def *)x_p;
  struct edge_def * xlimit = x;
  while (((xlimit) != ((void *)0) && ((void *) (xlimit)) != (void *) 1 && ! ggc_set_mark (xlimit)))
   xlimit = ((*xlimit).pred_next);
  while (x != xlimit)
    {
      do { if ((*x).pred_next != ((void *)0)) gt_ggc_mx_edge_def ((*x).pred_next); } while (0);
      do { if ((*x).succ_next != ((void *)0)) gt_ggc_mx_edge_def ((*x).succ_next); } while (0);
      do { if ((*x).src != ((void *)0)) gt_ggc_mx_basic_block_def ((*x).src); } while (0);
      do { if ((*x).dest != ((void *)0)) gt_ggc_mx_basic_block_def ((*x).dest); } while (0);
      switch (ir_type ())
        {
        case 0:
          do { if ((*x).insns.r != ((void *)0)) gt_ggc_mx_rtx_def ((*x).insns.r); } while (0);
          break;
        case 1:
          do { if ((*x).insns.t != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).insns.t); } while (0);
          break;
        default:
          break;
        }
      do { if ((*x).goto_locus != ((void *)0)) gt_ggc_mx_location_s ((*x).goto_locus); } while (0);
      x = ((*x).pred_next);
    }
}
void
gt_ggc_mx_ptr_info_def (void *x_p)
{
  struct ptr_info_def * const x = (struct ptr_info_def *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).pt_vars != ((void *)0)) gt_ggc_mx_bitmap_head_def ((*x).pt_vars); } while (0);
      do { if ((*x).name_mem_tag != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).name_mem_tag); } while (0);
    }
}
void
gt_ggc_mx_real_value (void *x_p)
{
  struct real_value * const x = (struct real_value *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
    }
}
void
gt_ggc_mx_tree_ann_d (void *x_p)
{
  union tree_ann_d * const x = (union tree_ann_d *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      switch (ann_type ((tree_ann_t)&((*x))))
        {
        case TREE_ANN_COMMON:
          break;
        case VAR_ANN:
          do { if ((*x).decl.type_mem_tag != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).decl.type_mem_tag); } while (0);
          do { if ((*x).decl.may_aliases != ((void *)0)) gt_ggc_mx_varray_head_tag ((*x).decl.may_aliases); } while (0);
          do { if ((*x).decl.default_def != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).decl.default_def); } while (0);
          do { if ((*x).decl.current_def != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).decl.current_def); } while (0);
          break;
        case STMT_ANN:
          do { if ((*x).stmt.def_ops != ((void *)0)) gt_ggc_mx_def_optype_d ((*x).stmt.def_ops); } while (0);
          do { if ((*x).stmt.use_ops != ((void *)0)) gt_ggc_mx_use_optype_d ((*x).stmt.use_ops); } while (0);
          do { if ((*x).stmt.v_may_def_ops != ((void *)0)) gt_ggc_mx_v_may_def_optype_d ((*x).stmt.v_may_def_ops); } while (0);
          do { if ((*x).stmt.vuse_ops != ((void *)0)) gt_ggc_mx_vuse_optype_d ((*x).stmt.vuse_ops); } while (0);
          do { if ((*x).stmt.v_must_def_ops != ((void *)0)) gt_ggc_mx_v_must_def_optype_d ((*x).stmt.v_must_def_ops); } while (0);
          do { if ((*x).stmt.df != ((void *)0)) gt_ggc_mx_dataflow_d ((*x).stmt.df); } while (0);
          do { if ((*x).stmt.addresses_taken != ((void *)0)) gt_ggc_mx_bitmap_head_def ((*x).stmt.addresses_taken); } while (0);
          break;
        default:
          break;
        }
    }
}
void
gt_ggc_mx_convert_optab (void *x_p)
{
  struct convert_optab * const x = (struct convert_optab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(NUM_MACHINE_MODES); i0++) {
          {
            size_t i1;
            for (i1 = 0; i1 < (size_t)(NUM_MACHINE_MODES); i1++) {
              do { if ((*x).handlers[i0][i1].libfunc != ((void *)0)) gt_ggc_mx_rtx_def ((*x).handlers[i0][i1].libfunc); } while (0);
            }
          }
        }
      }
    }
}
void
gt_ggc_mx_optab (void *x_p)
{
  struct optab * const x = (struct optab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(NUM_MACHINE_MODES); i0++) {
          do { if ((*x).handlers[i0].libfunc != ((void *)0)) gt_ggc_mx_rtx_def ((*x).handlers[i0].libfunc); } while (0);
        }
      }
    }
}
void
gt_ggc_mx_basic_block_def (void *x_p)
{
  struct basic_block_def * x = (struct basic_block_def *)x_p;
  struct basic_block_def * xlimit = x;
  while (((xlimit) != ((void *)0) && ((void *) (xlimit)) != (void *) 1 && ! ggc_set_mark (xlimit)))
   xlimit = ((*xlimit).next_bb);
  if (x != xlimit)
    for (;;)
      {
        struct basic_block_def * const xprev = ((*x).prev_bb);
        if (xprev == ((void *)0)) break;
        x = xprev;
        (void) ((xprev) != ((void *)0) && ((void *) (xprev)) != (void *) 1 && ! ggc_set_mark (xprev));
      }
  while (x != xlimit)
    {
      do { if ((*x).head_ != ((void *)0)) gt_ggc_mx_rtx_def ((*x).head_); } while (0);
      do { if ((*x).end_ != ((void *)0)) gt_ggc_mx_rtx_def ((*x).end_); } while (0);
      do { if ((*x).stmt_list != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).stmt_list); } while (0);
      do { if ((*x).pred != ((void *)0)) gt_ggc_mx_edge_def ((*x).pred); } while (0);
      do { if ((*x).succ != ((void *)0)) gt_ggc_mx_edge_def ((*x).succ); } while (0);
      do { if ((*x).prev_bb != ((void *)0)) gt_ggc_mx_basic_block_def ((*x).prev_bb); } while (0);
      do { if ((*x).next_bb != ((void *)0)) gt_ggc_mx_basic_block_def ((*x).next_bb); } while (0);
      do { if ((*x).tree_annotations != ((void *)0)) gt_ggc_mx_bb_ann_d ((*x).tree_annotations); } while (0);
      x = ((*x).next_bb);
    }
}
void
gt_ggc_mx_reg_attrs (void *x_p)
{
  struct reg_attrs * const x = (struct reg_attrs *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).decl != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).decl); } while (0);
    }
}
void
gt_ggc_mx_mem_attrs (void *x_p)
{
  struct mem_attrs * const x = (struct mem_attrs *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).expr != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).expr); } while (0);
      do { if ((*x).offset != ((void *)0)) gt_ggc_mx_rtx_def ((*x).offset); } while (0);
      do { if ((*x).size != ((void *)0)) gt_ggc_mx_rtx_def ((*x).size); } while (0);
    }
}
void
gt_ggc_mx_varray_head_tag (void *x_p)
{
  struct varray_head_tag * const x = (struct varray_head_tag *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      switch ((*x).type)
        {
        case VARRAY_DATA_C:
          break;
        case VARRAY_DATA_UC:
          break;
        case VARRAY_DATA_S:
          break;
        case VARRAY_DATA_US:
          break;
        case VARRAY_DATA_I:
          break;
        case VARRAY_DATA_U:
          break;
        case VARRAY_DATA_L:
          break;
        case VARRAY_DATA_UL:
          break;
        case VARRAY_DATA_HINT:
          break;
        case VARRAY_DATA_UHINT:
          break;
        case VARRAY_DATA_GENERIC:
          fancy_abort ("gcc.c", 361966, "?");
          break;
        case VARRAY_DATA_CPTR:
          {
            size_t i10;
            for (i10 = 0; i10 < (size_t)((*x).num_elements); i10++) {
            }
          }
          break;
        case VARRAY_DATA_RTX:
          {
            size_t i11;
            for (i11 = 0; i11 < (size_t)((*x).num_elements); i11++) {
              do { if ((*x).data.rtx1[i11] != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.rtx1[i11]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_RTVEC:
          {
            size_t i12;
            for (i12 = 0; i12 < (size_t)((*x).num_elements); i12++) {
              do { if ((*x).data.rtvec1[i12] != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).data.rtvec1[i12]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TREE:
          {
            size_t i13;
            for (i13 = 0; i13 < (size_t)((*x).num_elements); i13++) {
              do { if ((*x).data.tree1[i13] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).data.tree1[i13]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_BITMAP:
          {
            size_t i14;
            for (i14 = 0; i14 < (size_t)((*x).num_elements); i14++) {
              do { if ((*x).data.bitmap1[i14] != ((void *)0)) gt_ggc_mx_bitmap_head_def ((*x).data.bitmap1[i14]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CONST_EQUIV:
          {
            size_t i15;
            for (i15 = 0; i15 < (size_t)((*x).num_elements); i15++) {
              do { if ((*x).data.const_equiv[i15].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.const_equiv[i15].rtx1); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TE:
          {
            size_t i16;
            for (i16 = 0; i16 < (size_t)((*x).num_elements); i16++) {
              do { if ((*x).data.te[i16] != ((void *)0)) gt_ggc_mx_elt_list ((*x).data.te[i16]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_EDGE:
          {
            size_t i17;
            for (i17 = 0; i17 < (size_t)((*x).num_elements); i17++) {
              do { if ((*x).data.e[i17] != ((void *)0)) gt_ggc_mx_edge_def ((*x).data.e[i17]); } while (0);
            }
          }
          break;
        default:
          break;
        }
    }
}
void
gt_ggc_mx_function (void *x_p)
{
  struct function * const x = (struct function *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).eh != ((void *)0)) gt_ggc_mx_eh_status ((*x).eh); } while (0);
      do { if ((*x).stmt != ((void *)0)) gt_ggc_mx_stmt_status ((*x).stmt); } while (0);
      do { if ((*x).expr != ((void *)0)) gt_ggc_mx_expr_status ((*x).expr); } while (0);
      do { if ((*x).emit != ((void *)0)) gt_ggc_mx_emit_status ((*x).emit); } while (0);
      do { if ((*x).varasm != ((void *)0)) gt_ggc_mx_varasm_status ((*x).varasm); } while (0);
      do { if ((*x).saved_tree != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).saved_tree); } while (0);
      do { if ((*x).saved_args != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).saved_args); } while (0);
      do { if ((*x).decl != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).decl); } while (0);
      do { if ((*x).outer != ((void *)0)) gt_ggc_mx_function ((*x).outer); } while (0);
      do { if ((*x).arg_offset_rtx != ((void *)0)) gt_ggc_mx_rtx_def ((*x).arg_offset_rtx); } while (0);
      do { if ((*x).return_rtx != ((void *)0)) gt_ggc_mx_rtx_def ((*x).return_rtx); } while (0);
      do { if ((*x).internal_arg_pointer != ((void *)0)) gt_ggc_mx_rtx_def ((*x).internal_arg_pointer); } while (0);
      do { if ((*x).hard_reg_initial_vals != ((void *)0)) gt_ggc_mx_initial_value_struct ((*x).hard_reg_initial_vals); } while (0);
      do { if ((*x).x_nonlocal_goto_handler_labels != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_nonlocal_goto_handler_labels); } while (0);
      do { if ((*x).x_return_label != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_return_label); } while (0);
      do { if ((*x).x_naked_return_label != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_naked_return_label); } while (0);
      do { if ((*x).x_stack_slot_list != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_stack_slot_list); } while (0);
      do { if ((*x).x_tail_recursion_reentry != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_tail_recursion_reentry); } while (0);
      do { if ((*x).x_arg_pointer_save_area != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_arg_pointer_save_area); } while (0);
      do { if ((*x).static_chain_decl != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).static_chain_decl); } while (0);
      do { if ((*x).nonlocal_goto_save_area != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).nonlocal_goto_save_area); } while (0);
      do { if ((*x).x_parm_birth_insn != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_parm_birth_insn); } while (0);
      gt_ggc_m_P9temp_slot15varray_head_tag ((*x).x_used_temp_slots);
      do { if ((*x).x_avail_temp_slots != ((void *)0)) gt_ggc_mx_temp_slot ((*x).x_avail_temp_slots); } while (0);
      do { if ((*x).fixup_var_refs_queue != ((void *)0)) gt_ggc_mx_var_refs_queue ((*x).fixup_var_refs_queue); } while (0);
      do { if ((*x).original_arg_vector != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).original_arg_vector); } while (0);
      do { if ((*x).original_decl_initial != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).original_decl_initial); } while (0);
      do { if ((*x).machine != ((void *)0)) gt_ggc_mx_machine_function ((*x).machine); } while (0);
      do { if ((*x).language != ((void *)0)) gt_ggc_mx_language_function ((*x).language); } while (0);
      do { if ((*x).epilogue_delay_list != ((void *)0)) gt_ggc_mx_rtx_def ((*x).epilogue_delay_list); } while (0);
      do { if ((*x).ib_boundaries_block != ((void *)0)) gt_ggc_mx_varray_head_tag ((*x).ib_boundaries_block); } while (0);
      do { if ((*x).unexpanded_var_list != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).unexpanded_var_list); } while (0);
    }
}
void
gt_ggc_mx_expr_status (void *x_p)
{
  struct expr_status * const x = (struct expr_status *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).x_saveregs_value != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_saveregs_value); } while (0);
      do { if ((*x).x_apply_args_value != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_apply_args_value); } while (0);
      do { if ((*x).x_forced_labels != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_forced_labels); } while (0);
      do { if ((*x).x_pending_chain != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_pending_chain); } while (0);
    }
}
void
gt_ggc_mx_emit_status (void *x_p)
{
  struct emit_status * const x = (struct emit_status *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).x_first_insn != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_first_insn); } while (0);
      do { if ((*x).x_last_insn != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_last_insn); } while (0);
      do { if ((*x).sequence_stack != ((void *)0)) gt_ggc_mx_sequence_stack ((*x).sequence_stack); } while (0);
      if ((*x).regno_pointer_align != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).x_reg_rtx_no); i0++) {
        }
        do { const void *const a__ = ((*x).regno_pointer_align); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
      if ((*x).x_regno_reg_rtx != ((void *)0)) {
        size_t i1;
        for (i1 = 0; i1 < (size_t)(((*x)).x_reg_rtx_no); i1++) {
          do { if ((*x).x_regno_reg_rtx[i1] != ((void *)0)) gt_ggc_mx_rtx_def ((*x).x_regno_reg_rtx[i1]); } while (0);
        }
        do { const void *const a__ = ((*x).x_regno_reg_rtx); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_ggc_mx_sequence_stack (void *x_p)
{
  struct sequence_stack * const x = (struct sequence_stack *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).first != ((void *)0)) gt_ggc_mx_rtx_def ((*x).first); } while (0);
      do { if ((*x).last != ((void *)0)) gt_ggc_mx_rtx_def ((*x).last); } while (0);
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_sequence_stack ((*x).next); } while (0);
    }
}
void
gt_ggc_mx_var_refs_queue (void *x_p)
{
  struct var_refs_queue * const x = (struct var_refs_queue *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).modified != ((void *)0)) gt_ggc_mx_rtx_def ((*x).modified); } while (0);
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_var_refs_queue ((*x).next); } while (0);
    }
}
void
gt_ggc_mx_bitmap_head_def (void *x_p)
{
  struct bitmap_head_def * const x = (struct bitmap_head_def *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).first != ((void *)0)) gt_ggc_mx_bitmap_element_def ((*x).first); } while (0);
      do { if ((*x).current != ((void *)0)) gt_ggc_mx_bitmap_element_def ((*x).current); } while (0);
    }
}
void
gt_ggc_mx_bitmap_element_def (void *x_p)
{
  struct bitmap_element_def * const x = (struct bitmap_element_def *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_bitmap_element_def ((*x).next); } while (0);
      do { if ((*x).prev != ((void *)0)) gt_ggc_mx_bitmap_element_def ((*x).prev); } while (0);
    }
}
void
gt_ggc_mx_machine_function (void *x_p)
{
  struct machine_function * const x = (struct machine_function *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).stack_locals != ((void *)0)) gt_ggc_mx_stack_local_entry ((*x).stack_locals); } while (0);
    }
}
void
gt_ggc_mx_answer (void *x_p)
{
  struct answer * const x = (struct answer *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_answer ((*x).next); } while (0);
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).count); i0++) {
          switch (cpp_token_val_index (&((*x).first[i0])))
            {
            case CPP_TOKEN_FLD_NODE:
              {
                union tree_node * const x1 =
                  ((*x).first[i0].val.node) ? ((tree) ((char *) (((ht_identifier *) (((*x).first[i0].val.node)))) - sizeof (struct tree_common))) : ((void *)0);
                do { if (x1 != ((void *)0)) gt_ggc_mx_lang_tree_node (x1); } while (0);
              }
              break;
            case CPP_TOKEN_FLD_SOURCE:
              do { if ((*x).first[i0].val.source != ((void *)0)) gt_ggc_mx_cpp_token ((*x).first[i0].val.source); } while (0);
              break;
            case CPP_TOKEN_FLD_STR:
              break;
            case CPP_TOKEN_FLD_ARG_NO:
              break;
            default:
              break;
            }
        }
      }
    }
}
void
gt_ggc_mx_cpp_macro (void *x_p)
{
  struct cpp_macro * const x = (struct cpp_macro *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).params != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).paramc); i0++) {
          {
            union tree_node * const x1 =
              ((*x).params[i0]) ? ((tree) ((char *) (((ht_identifier *) (((*x).params[i0])))) - sizeof (struct tree_common))) : ((void *)0);
            do { if (x1 != ((void *)0)) gt_ggc_mx_lang_tree_node (x1); } while (0);
          }
        }
        do { const void *const a__ = ((*x).params); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
      switch (((*x)).traditional)
        {
        case 0:
          if ((*x).exp.tokens != ((void *)0)) {
            size_t i2;
            for (i2 = 0; i2 < (size_t)((*x).count); i2++) {
              switch (cpp_token_val_index (&((*x).exp.tokens[i2])))
                {
                case CPP_TOKEN_FLD_NODE:
                  {
                    union tree_node * const x3 =
                      ((*x).exp.tokens[i2].val.node) ? ((tree) ((char *) (((ht_identifier *) (((*x).exp.tokens[i2].val.node)))) - sizeof (struct tree_common))) : ((void *)0);
                    do { if (x3 != ((void *)0)) gt_ggc_mx_lang_tree_node (x3); } while (0);
                  }
                  break;
                case CPP_TOKEN_FLD_SOURCE:
                  do { if ((*x).exp.tokens[i2].val.source != ((void *)0)) gt_ggc_mx_cpp_token ((*x).exp.tokens[i2].val.source); } while (0);
                  break;
                case CPP_TOKEN_FLD_STR:
                  break;
                case CPP_TOKEN_FLD_ARG_NO:
                  break;
                default:
                  break;
                }
            }
            do { const void *const a__ = ((*x).exp.tokens); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
          }
          break;
        case 1:
          break;
        default:
          break;
        }
    }
}
void
gt_ggc_mx_cpp_token (void *x_p)
{
  struct cpp_token * const x = (struct cpp_token *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      switch (cpp_token_val_index (&((*x))))
        {
        case CPP_TOKEN_FLD_NODE:
          {
            union tree_node * const x0 =
              ((*x).val.node) ? ((tree) ((char *) (((ht_identifier *) (((*x).val.node)))) - sizeof (struct tree_common))) : ((void *)0);
            do { if (x0 != ((void *)0)) gt_ggc_mx_lang_tree_node (x0); } while (0);
          }
          break;
        case CPP_TOKEN_FLD_SOURCE:
          do { if ((*x).val.source != ((void *)0)) gt_ggc_mx_cpp_token ((*x).val.source); } while (0);
          break;
        case CPP_TOKEN_FLD_STR:
          break;
        case CPP_TOKEN_FLD_ARG_NO:
          break;
        default:
          break;
        }
    }
}
void
gt_ggc_mx_rtvec_def (void *x_p)
{
  struct rtvec_def * const x = (struct rtvec_def *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_elem); i0++) {
          do { if ((*x).elem[i0] != ((void *)0)) gt_ggc_mx_rtx_def ((*x).elem[i0]); } while (0);
        }
      }
    }
}
void
gt_ggc_mx_rtx_def (void *x_p)
{
  struct rtx_def * x = (struct rtx_def *)x_p;
  struct rtx_def * xlimit = x;
  while (((xlimit) != ((void *)0) && ((void *) (xlimit)) != (void *) 1 && ! ggc_set_mark (xlimit)))
   xlimit = ((rtx_next[((enum rtx_code) (&(*xlimit))->code)] == 0 ? ((void *)0) : *(rtx *)(((char *)&(*xlimit)) + rtx_next[((enum rtx_code) (&(*xlimit))->code)])));
  if (x != xlimit)
    for (;;)
      {
        struct rtx_def * const xprev = (((((enum rtx_code) (&(*x))->code) == INSN || ((enum rtx_code) (&(*x))->code) == CALL_INSN || ((enum rtx_code) (&(*x))->code) == JUMP_INSN || ((enum rtx_code) (&(*x))->code) == NOTE || ((enum rtx_code) (&(*x))->code) == BARRIER || ((enum rtx_code) (&(*x))->code) == CODE_LABEL) && (((&(*x))->u.fld[1]).rtx1) != ((void *)0) && ((((((&(*x))->u.fld[1]).rtx1))->u.fld[2]).rtx1) == &(*x) ? (((&(*x))->u.fld[1]).rtx1) : ((void *)0)));
        if (xprev == ((void *)0)) break;
        x = xprev;
        (void) ((xprev) != ((void *)0) && ((void *) (xprev)) != (void *) 1 && ! ggc_set_mark (xprev));
      }
  while (x != xlimit)
    {
      switch (((enum rtx_code) (&(*x))->code))
        {
        case VAR_LOCATION:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rttree != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.fld[0].rttree); } while (0);
          break;
        case US_TRUNCATE:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SS_TRUNCATE:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case US_MINUS:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SS_MINUS:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case US_PLUS:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SS_PLUS:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case VEC_DUPLICATE:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case VEC_CONCAT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case VEC_SELECT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case VEC_MERGE:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case RANGE_LIVE:
          do { if ((*x).u.fld[0].rtbit != ((void *)0)) gt_ggc_mx_bitmap_element_def ((*x).u.fld[0].rtbit); } while (0);
          break;
        case RANGE_VAR:
          do { if ((*x).u.fld[1].rttree != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.fld[1].rttree); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case RANGE_REG:
          do { if ((*x).u.fld[9].rttree != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.fld[9].rttree); } while (0);
          do { if ((*x).u.fld[8].rttree != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.fld[8].rttree); } while (0);
          break;
        case RANGE_INFO:
          do { if ((*x).u.fld[10].rtbit != ((void *)0)) gt_ggc_mx_bitmap_element_def ((*x).u.fld[10].rtbit); } while (0);
          do { if ((*x).u.fld[9].rtbit != ((void *)0)) gt_ggc_mx_bitmap_element_def ((*x).u.fld[9].rtbit); } while (0);
          do { if ((*x).u.fld[2].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[2].rtvec1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LO_SUM:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case HIGH:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ZERO_EXTRACT:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SIGN_EXTRACT:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case PARITY:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case POPCOUNT:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case CTZ:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case CLZ:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case FFS:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SQRT:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ABS:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNSIGNED_FIX:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNSIGNED_FLOAT:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case FIX:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case FLOAT:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case FLOAT_TRUNCATE:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case FLOAT_EXTEND:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case TRUNCATE:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ZERO_EXTEND:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SIGN_EXTEND:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LTGT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNLT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNLE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNGT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNGE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNEQ:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ORDERED:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNORDERED:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LTU:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LEU:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case GTU:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case GEU:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case GT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case GE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case EQ:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case NE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case POST_MODIFY:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case PRE_MODIFY:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case POST_INC:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case POST_DEC:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case PRE_INC:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case PRE_DEC:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UMAX:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UMIN:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SMAX:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SMIN:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ROTATERT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LSHIFTRT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ASHIFTRT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ROTATE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ASHIFT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case NOT:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case XOR:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case IOR:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case AND:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UMOD:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UDIV:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case MOD:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case DIV:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case MULT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case NEG:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case MINUS:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case PLUS:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case COMPARE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case COND:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case IF_THEN_ELSE:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case QUEUED:
          do { if ((*x).u.fld[4].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[4].rtx1); } while (0);
          do { if ((*x).u.fld[3].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[3].rtx1); } while (0);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case CC0:
          break;
        case SYMBOL_REF:
          do { if ((*x).u.fld[2].rttree != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.fld[2].rttree); } while (0);
          break;
        case LABEL_REF:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case MEM:
          do { if ((*x).u.fld[1].rtmem != ((void *)0)) gt_ggc_mx_mem_attrs ((*x).u.fld[1].rtmem); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case CONCAT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case STRICT_LOW_PART:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SUBREG:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SCRATCH:
          break;
        case REG:
          do { if ((*x).u.fld[2].rtreg != ((void *)0)) gt_ggc_mx_reg_attrs ((*x).u.fld[2].rtreg); } while (0);
          break;
        case VALUE:
          break;
        case PC:
          break;
        case CONST:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case CONST_STRING:
          break;
        case CONST_VECTOR:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case CONST_DOUBLE:
          break;
        case CONST_INT:
          break;
        case RESX:
          break;
        case TRAP_IF:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case RETURN:
          break;
        case CALL:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case CLOBBER:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case USE:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SET:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case PREFETCH:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ADDR_DIFF_VEC:
          do { if ((*x).u.fld[3].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[3].rtx1); } while (0);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ADDR_VEC:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case UNSPEC_VOLATILE:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case UNSPEC:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case ASM_OPERANDS:
          do { if ((*x).u.fld[4].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[4].rtvec1); } while (0);
          do { if ((*x).u.fld[3].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[3].rtvec1); } while (0);
          break;
        case ASM_INPUT:
          break;
        case PARALLEL:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case COND_EXEC:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case NOTE:
          switch ((((&(*x))->u.fld[5]).rtint))
            {
            default:
              break;
            case -79:
              do { if ((*x).u.fld[4].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[4].rtx1); } while (0);
              break;
            case -80:
              break;
            case -81:
              break;
            case -82:
              do { if ((*x).u.fld[4].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[4].rtx1); } while (0);
              break;
            case -83:
              break;
            case -84:
              break;
            case -85:
              break;
            case -86:
              break;
            case -87:
              break;
            case -88:
              break;
            case -89:
              break;
            case -90:
              break;
            case -91:
              break;
            case -92:
              break;
            case -93:
              break;
            case -94:
              break;
            case -95:
              break;
            case -96:
              break;
            case -97:
              do { if ((*x).u.fld[4].rttree != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.fld[4].rttree); } while (0);
              break;
            case -98:
              do { if ((*x).u.fld[4].rttree != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.fld[4].rttree); } while (0);
              break;
            case -99:
              break;
            case -100:
              break;
            }
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          break;
        case CODE_LABEL:
          do { if ((*x).u.fld[5].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[5].rtx1); } while (0);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          break;
        case BARRIER:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          break;
        case CALL_INSN:
          do { if ((*x).u.fld[9].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[9].rtx1); } while (0);
          do { if ((*x).u.fld[8].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[8].rtx1); } while (0);
          do { if ((*x).u.fld[7].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[7].rtx1); } while (0);
          do { if ((*x).u.fld[5].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[5].rtx1); } while (0);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          break;
        case JUMP_INSN:
          do { if ((*x).u.fld[9].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[9].rtx1); } while (0);
          do { if ((*x).u.fld[8].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[8].rtx1); } while (0);
          do { if ((*x).u.fld[7].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[7].rtx1); } while (0);
          do { if ((*x).u.fld[5].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[5].rtx1); } while (0);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          break;
        case INSN:
          do { if ((*x).u.fld[8].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[8].rtx1); } while (0);
          do { if ((*x).u.fld[7].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[7].rtx1); } while (0);
          do { if ((*x).u.fld[5].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[5].rtx1); } while (0);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          break;
        case ATTR_FLAG:
          break;
        case EQ_ATTR_ALT:
          break;
        case EQ_ATTR:
          break;
        case SET_ATTR_ALTERNATIVE:
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          break;
        case SET_ATTR:
          break;
        case ATTR:
          break;
        case DEFINE_ATTR:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          break;
        case DEFINE_INSN_RESERVATION:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          break;
        case DEFINE_RESERVATION:
          break;
        case AUTOMATA_OPTION:
          break;
        case DEFINE_AUTOMATON:
          break;
        case DEFINE_BYPASS:
          break;
        case FINAL_ABSENCE_SET:
          break;
        case ABSENCE_SET:
          break;
        case FINAL_PRESENCE_SET:
          break;
        case PRESENCE_SET:
          break;
        case EXCLUSION_SET:
          break;
        case DEFINE_QUERY_CPU_UNIT:
          break;
        case DEFINE_CPU_UNIT:
          break;
        case ADDRESS:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SEQUENCE:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case DEFINE_COND_EXEC:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case DEFINE_ASM_ATTRIBUTES:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case DEFINE_FUNCTION_UNIT:
          do { if ((*x).u.fld[6].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[6].rtvec1); } while (0);
          do { if ((*x).u.fld[3].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[3].rtx1); } while (0);
          break;
        case DEFINE_DELAY:
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case DEFINE_EXPAND:
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          break;
        case DEFINE_PEEPHOLE2:
          do { if ((*x).u.fld[2].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[2].rtvec1); } while (0);
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case DEFINE_INSN_AND_SPLIT:
          do { if ((*x).u.fld[7].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[7].rtvec1); } while (0);
          do { if ((*x).u.fld[5].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[5].rtvec1); } while (0);
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          break;
        case DEFINE_SPLIT:
          do { if ((*x).u.fld[2].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[2].rtvec1); } while (0);
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case DEFINE_PEEPHOLE:
          do { if ((*x).u.fld[3].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[3].rtvec1); } while (0);
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case DEFINE_INSN:
          do { if ((*x).u.fld[4].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[4].rtvec1); } while (0);
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          break;
        case MATCH_PAR_DUP:
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          break;
        case MATCH_OP_DUP:
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          break;
        case MATCH_PARALLEL:
          do { if ((*x).u.fld[2].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[2].rtvec1); } while (0);
          break;
        case MATCH_OPERATOR:
          do { if ((*x).u.fld[2].rtvec1 != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).u.fld[2].rtvec1); } while (0);
          break;
        case MATCH_DUP:
          break;
        case MATCH_SCRATCH:
          break;
        case MATCH_OPERAND:
          break;
        case INSN_LIST:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case EXPR_LIST:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case INCLUDE:
          break;
        case NIL:
          break;
        case UNKNOWN:
          break;
        default:
          break;
        }
      x = ((rtx_next[((enum rtx_code) (&(*x))->code)] == 0 ? ((void *)0) : *(rtx *)(((char *)&(*x)) + rtx_next[((enum rtx_code) (&(*x))->code)])));
    }
}
void
gt_ggc_mx_location_s (void *x_p)
{
  struct location_s * const x = (struct location_s *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
    }
}
void
gt_ggc_m_II17splay_tree_node_s (void *x_p)
{
  struct splay_tree_node_s * const x = (struct splay_tree_node_s *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      gt_ggc_m_II17splay_tree_node_s ((*x).left);
      gt_ggc_m_II17splay_tree_node_s ((*x).right);
    }
}
void
gt_ggc_m_SP9tree_node17splay_tree_node_s (void *x_p)
{
  struct splay_tree_node_s * const x = (struct splay_tree_node_s *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((void *)(*x).value1 != ((void *)0)) gt_ggc_mx_lang_tree_node ((void *)(*x).value1); } while (0);
      gt_ggc_m_SP9tree_node17splay_tree_node_s ((*x).left);
      gt_ggc_m_SP9tree_node17splay_tree_node_s ((*x).right);
    }
}
void
gt_ggc_m_P13alias_var_def15varray_head_tag (void *x_p)
{
  struct varray_head_tag * const x = (struct varray_head_tag *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      switch ((*x).type)
        {
        case VARRAY_DATA_C:
          break;
        case VARRAY_DATA_UC:
          break;
        case VARRAY_DATA_S:
          break;
        case VARRAY_DATA_US:
          break;
        case VARRAY_DATA_I:
          break;
        case VARRAY_DATA_U:
          break;
        case VARRAY_DATA_L:
          break;
        case VARRAY_DATA_UL:
          break;
        case VARRAY_DATA_HINT:
          break;
        case VARRAY_DATA_UHINT:
          break;
        case VARRAY_DATA_GENERIC:
          {
            size_t i10;
            for (i10 = 0; i10 < (size_t)((*x).num_elements); i10++) {
              do { if ((*x).data.generic[i10] != ((void *)0)) gt_ggc_mx_alias_var_def ((*x).data.generic[i10]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CPTR:
          {
            size_t i11;
            for (i11 = 0; i11 < (size_t)((*x).num_elements); i11++) {
            }
          }
          break;
        case VARRAY_DATA_RTX:
          {
            size_t i12;
            for (i12 = 0; i12 < (size_t)((*x).num_elements); i12++) {
              do { if ((*x).data.rtx1[i12] != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.rtx1[i12]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_RTVEC:
          {
            size_t i13;
            for (i13 = 0; i13 < (size_t)((*x).num_elements); i13++) {
              do { if ((*x).data.rtvec1[i13] != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).data.rtvec1[i13]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TREE:
          {
            size_t i14;
            for (i14 = 0; i14 < (size_t)((*x).num_elements); i14++) {
              do { if ((*x).data.tree1[i14] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).data.tree1[i14]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_BITMAP:
          {
            size_t i15;
            for (i15 = 0; i15 < (size_t)((*x).num_elements); i15++) {
              do { if ((*x).data.bitmap1[i15] != ((void *)0)) gt_ggc_mx_bitmap_head_def ((*x).data.bitmap1[i15]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CONST_EQUIV:
          {
            size_t i16;
            for (i16 = 0; i16 < (size_t)((*x).num_elements); i16++) {
              do { if ((*x).data.const_equiv[i16].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.const_equiv[i16].rtx1); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TE:
          {
            size_t i17;
            for (i17 = 0; i17 < (size_t)((*x).num_elements); i17++) {
              do { if ((*x).data.te[i17] != ((void *)0)) gt_ggc_mx_elt_list ((*x).data.te[i17]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_EDGE:
          {
            size_t i18;
            for (i18 = 0; i18 < (size_t)((*x).num_elements); i18++) {
              do { if ((*x).data.e[i18] != ((void *)0)) gt_ggc_mx_edge_def ((*x).data.e[i18]); } while (0);
            }
          }
          break;
        default:
          break;
        }
    }
}
void
gt_ggc_m_P9tree_node4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_ggc_m_P9reg_attrs4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_reg_attrs ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_ggc_m_P9mem_attrs4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_mem_attrs ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_ggc_m_P7rtx_def4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_rtx_def ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_ggc_m_SP9tree_node12splay_tree_s (void *x_p)
{
  struct splay_tree_s * const x = (struct splay_tree_s *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      gt_ggc_m_SP9tree_node17splay_tree_node_s ((*x).root);
    }
}
void
gt_ggc_m_P19cgraph_varpool_node4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_cgraph_varpool_node ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_ggc_m_P11cgraph_node4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_cgraph_node ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_ggc_m_II12splay_tree_s (void *x_p)
{
  struct splay_tree_s * const x = (struct splay_tree_s *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      gt_ggc_m_II17splay_tree_node_s ((*x).root);
    }
}
void
gt_pch_nx_edge_prediction (void *x_p)
{
  struct edge_prediction * x = (struct edge_prediction *)x_p;
  struct edge_prediction * xlimit = x;
  while (gt_pch_note_object (xlimit, xlimit, gt_pch_p_15edge_prediction))
   xlimit = ((*xlimit).next);
  while (x != xlimit)
    {
      do { if ((*x).next != ((void *)0)) gt_pch_nx_edge_prediction ((*x).next); } while (0);
      do { if ((*x).edge1 != ((void *)0)) gt_pch_nx_edge_def ((*x).edge1); } while (0);
      x = ((*x).next);
    }
}
void
gt_pch_nx_v_must_def_optype_d (void *x_p)
{
  struct v_must_def_optype_d * const x = (struct v_must_def_optype_d *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_19v_must_def_optype_d))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_v_must_defs); i0++) {
          do { if ((*x).v_must_defs[i0] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).v_must_defs[i0]); } while (0);
        }
      }
    }
}
void
gt_pch_nx_vuse_optype_d (void *x_p)
{
  struct vuse_optype_d * const x = (struct vuse_optype_d *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_13vuse_optype_d))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_vuses); i0++) {
          do { if ((*x).vuses[i0] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).vuses[i0]); } while (0);
        }
      }
    }
}
void
gt_pch_nx_v_may_def_optype_d (void *x_p)
{
  struct v_may_def_optype_d * const x = (struct v_may_def_optype_d *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_18v_may_def_optype_d))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_v_may_defs * 2); i0++) {
          do { if ((*x).v_may_defs[i0] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).v_may_defs[i0]); } while (0);
        }
      }
    }
}
void
gt_pch_nx_use_optype_d (void *x_p)
{
  struct use_optype_d * const x = (struct use_optype_d *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_12use_optype_d))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_uses); i0++) {
        }
      }
    }
}
void
gt_pch_nx_def_optype_d (void *x_p)
{
  struct def_optype_d * const x = (struct def_optype_d *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_12def_optype_d))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_defs); i0++) {
        }
      }
    }
}
void
gt_pch_nx_dataflow_d (void *x_p)
{
  struct dataflow_d * const x = (struct dataflow_d *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_10dataflow_d))
    {
      do { if ((*x).immediate_uses != ((void *)0)) gt_pch_nx_varray_head_tag ((*x).immediate_uses); } while (0);
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(2); i0++) {
          do { if ((*x).uses[i0] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).uses[i0]); } while (0);
        }
      }
    }
}
void
gt_pch_nx_cgraph_varpool_node (void *x_p)
{
  struct cgraph_varpool_node * const x = (struct cgraph_varpool_node *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_19cgraph_varpool_node))
    {
      do { if ((*x).decl != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).decl); } while (0);
      do { if ((*x).next_needed != ((void *)0)) gt_pch_nx_cgraph_varpool_node ((*x).next_needed); } while (0);
    }
}
void
gt_pch_nx_cgraph_edge (void *x_p)
{
  struct cgraph_edge * x = (struct cgraph_edge *)x_p;
  struct cgraph_edge * xlimit = x;
  while (gt_pch_note_object (xlimit, xlimit, gt_pch_p_11cgraph_edge))
   xlimit = ((*xlimit).next_caller);
  while (x != xlimit)
    {
      do { if ((*x).caller != ((void *)0)) gt_pch_nx_cgraph_node ((*x).caller); } while (0);
      do { if ((*x).callee != ((void *)0)) gt_pch_nx_cgraph_node ((*x).callee); } while (0);
      do { if ((*x).next_caller != ((void *)0)) gt_pch_nx_cgraph_edge ((*x).next_caller); } while (0);
      do { if ((*x).next_callee != ((void *)0)) gt_pch_nx_cgraph_edge ((*x).next_callee); } while (0);
      do { if ((*x).call_expr != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).call_expr); } while (0);
      gt_pch_n_S ((*x).inline_failed);
      x = ((*x).next_caller);
    }
}
void
gt_pch_nx_cgraph_node (void *x_p)
{
  struct cgraph_node * x = (struct cgraph_node *)x_p;
  struct cgraph_node * xlimit = x;
  while (gt_pch_note_object (xlimit, xlimit, gt_pch_p_11cgraph_node))
   xlimit = ((*xlimit).next);
  if (x != xlimit)
    for (;;)
      {
        struct cgraph_node * const xprev = ((*x).previous);
        if (xprev == ((void *)0)) break;
        x = xprev;
        (void) gt_pch_note_object (xprev, xprev, gt_pch_p_11cgraph_node);
      }
  while (x != xlimit)
    {
      do { if ((*x).decl != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).decl); } while (0);
      do { if ((*x).callees != ((void *)0)) gt_pch_nx_cgraph_edge ((*x).callees); } while (0);
      do { if ((*x).callers != ((void *)0)) gt_pch_nx_cgraph_edge ((*x).callers); } while (0);
      do { if ((*x).next != ((void *)0)) gt_pch_nx_cgraph_node ((*x).next); } while (0);
      do { if ((*x).previous != ((void *)0)) gt_pch_nx_cgraph_node ((*x).previous); } while (0);
      do { if ((*x).origin != ((void *)0)) gt_pch_nx_cgraph_node ((*x).origin); } while (0);
      do { if ((*x).nested != ((void *)0)) gt_pch_nx_cgraph_node ((*x).nested); } while (0);
      do { if ((*x).next_nested != ((void *)0)) gt_pch_nx_cgraph_node ((*x).next_nested); } while (0);
      do { if ((*x).next_needed != ((void *)0)) gt_pch_nx_cgraph_node ((*x).next_needed); } while (0);
      do { if ((*x).next_clone != ((void *)0)) gt_pch_nx_cgraph_node ((*x).next_clone); } while (0);
      do { if ((*x).global.inlined_to != ((void *)0)) gt_pch_nx_cgraph_node ((*x).global.inlined_to); } while (0);
      x = ((*x).next);
    }
}
void
gt_pch_nx_bb_ann_d (void *x_p)
{
  struct bb_ann_d * const x = (struct bb_ann_d *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_8bb_ann_d))
    {
      do { if ((*x).phi_nodes != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).phi_nodes); } while (0);
      do { if ((*x).predictions != ((void *)0)) gt_pch_nx_edge_prediction ((*x).predictions); } while (0);
    }
}
void
gt_pch_nx_elt_loc_list (void *x_p)
{
  struct elt_loc_list * const x = (struct elt_loc_list *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_12elt_loc_list))
    {
      do { if ((*x).next != ((void *)0)) gt_pch_nx_elt_loc_list ((*x).next); } while (0);
      do { if ((*x).loc != ((void *)0)) gt_pch_nx_rtx_def ((*x).loc); } while (0);
      do { if ((*x).setting_insn != ((void *)0)) gt_pch_nx_rtx_def ((*x).setting_insn); } while (0);
    }
}
void
gt_pch_nx_cselib_val_struct (void *x_p)
{
  struct cselib_val_struct * const x = (struct cselib_val_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_17cselib_val_struct))
    {
      switch (1)
        {
        case 1:
          do { if ((*x).u.val_rtx != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.val_rtx); } while (0);
          break;
        default:
          break;
        }
      do { if ((*x).locs != ((void *)0)) gt_pch_nx_elt_loc_list ((*x).locs); } while (0);
      do { if ((*x).addr_list != ((void *)0)) gt_pch_nx_elt_list ((*x).addr_list); } while (0);
      do { if ((*x).next_containing_mem != ((void *)0)) gt_pch_nx_cselib_val_struct ((*x).next_containing_mem); } while (0);
    }
}
void
gt_pch_nx_elt_list (void *x_p)
{
  struct elt_list * const x = (struct elt_list *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_8elt_list))
    {
      do { if ((*x).next != ((void *)0)) gt_pch_nx_elt_list ((*x).next); } while (0);
      do { if ((*x).elt != ((void *)0)) gt_pch_nx_cselib_val_struct ((*x).elt); } while (0);
    }
}
void
gt_pch_nx_tree_statement_list_node (void *x_p)
{
  struct tree_statement_list_node * x = (struct tree_statement_list_node *)x_p;
  struct tree_statement_list_node * xlimit = x;
  while (gt_pch_note_object (xlimit, xlimit, gt_pch_p_24tree_statement_list_node))
   xlimit = ((*xlimit).next);
  if (x != xlimit)
    for (;;)
      {
        struct tree_statement_list_node * const xprev = ((*x).prev);
        if (xprev == ((void *)0)) break;
        x = xprev;
        (void) gt_pch_note_object (xprev, xprev, gt_pch_p_24tree_statement_list_node);
      }
  while (x != xlimit)
    {
      do { if ((*x).prev != ((void *)0)) gt_pch_nx_tree_statement_list_node ((*x).prev); } while (0);
      do { if ((*x).next != ((void *)0)) gt_pch_nx_tree_statement_list_node ((*x).next); } while (0);
      do { if ((*x).stmt != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).stmt); } while (0);
      x = ((*x).next);
    }
}
void
gt_pch_nx_alias_var_def (void *x_p)
{
  union alias_var_def * const x = (union alias_var_def *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_13alias_var_def))
    {
      switch ((*x).common.kind)
        {
        case -1:
          do { if ((*x).common.decl != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).common.decl); } while (0);
          break;
        case ATERM_AVAR:
          do { if ((*x).aterm.common.decl != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).aterm.common.decl); } while (0);
          break;
        default:
          break;
        }
    }
}
void
gt_pch_nx_edge_def (void *x_p)
{
  struct edge_def * x = (struct edge_def *)x_p;
  struct edge_def * xlimit = x;
  while (gt_pch_note_object (xlimit, xlimit, gt_pch_p_8edge_def))
   xlimit = ((*xlimit).pred_next);
  while (x != xlimit)
    {
      do { if ((*x).pred_next != ((void *)0)) gt_pch_nx_edge_def ((*x).pred_next); } while (0);
      do { if ((*x).succ_next != ((void *)0)) gt_pch_nx_edge_def ((*x).succ_next); } while (0);
      do { if ((*x).src != ((void *)0)) gt_pch_nx_basic_block_def ((*x).src); } while (0);
      do { if ((*x).dest != ((void *)0)) gt_pch_nx_basic_block_def ((*x).dest); } while (0);
      switch (ir_type ())
        {
        case 0:
          do { if ((*x).insns.r != ((void *)0)) gt_pch_nx_rtx_def ((*x).insns.r); } while (0);
          break;
        case 1:
          do { if ((*x).insns.t != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).insns.t); } while (0);
          break;
        default:
          break;
        }
      do { if ((*x).goto_locus != ((void *)0)) gt_pch_nx_location_s ((*x).goto_locus); } while (0);
      x = ((*x).pred_next);
    }
}
void
gt_pch_nx_ptr_info_def (void *x_p)
{
  struct ptr_info_def * const x = (struct ptr_info_def *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_12ptr_info_def))
    {
      do { if ((*x).pt_vars != ((void *)0)) gt_pch_nx_bitmap_head_def ((*x).pt_vars); } while (0);
      do { if ((*x).name_mem_tag != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).name_mem_tag); } while (0);
    }
}
void
gt_pch_nx_real_value (void *x_p)
{
  struct real_value * const x = (struct real_value *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_10real_value))
    {
    }
}
void
gt_pch_nx_tree_ann_d (void *x_p)
{
  union tree_ann_d * const x = (union tree_ann_d *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_10tree_ann_d))
    {
      switch (ann_type ((tree_ann_t)&((*x))))
        {
        case TREE_ANN_COMMON:
          break;
        case VAR_ANN:
          do { if ((*x).decl.type_mem_tag != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).decl.type_mem_tag); } while (0);
          do { if ((*x).decl.may_aliases != ((void *)0)) gt_pch_nx_varray_head_tag ((*x).decl.may_aliases); } while (0);
          do { if ((*x).decl.default_def != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).decl.default_def); } while (0);
          do { if ((*x).decl.current_def != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).decl.current_def); } while (0);
          break;
        case STMT_ANN:
          do { if ((*x).stmt.def_ops != ((void *)0)) gt_pch_nx_def_optype_d ((*x).stmt.def_ops); } while (0);
          do { if ((*x).stmt.use_ops != ((void *)0)) gt_pch_nx_use_optype_d ((*x).stmt.use_ops); } while (0);
          do { if ((*x).stmt.v_may_def_ops != ((void *)0)) gt_pch_nx_v_may_def_optype_d ((*x).stmt.v_may_def_ops); } while (0);
          do { if ((*x).stmt.vuse_ops != ((void *)0)) gt_pch_nx_vuse_optype_d ((*x).stmt.vuse_ops); } while (0);
          do { if ((*x).stmt.v_must_def_ops != ((void *)0)) gt_pch_nx_v_must_def_optype_d ((*x).stmt.v_must_def_ops); } while (0);
          do { if ((*x).stmt.df != ((void *)0)) gt_pch_nx_dataflow_d ((*x).stmt.df); } while (0);
          do { if ((*x).stmt.addresses_taken != ((void *)0)) gt_pch_nx_bitmap_head_def ((*x).stmt.addresses_taken); } while (0);
          break;
        default:
          break;
        }
    }
}
void
gt_pch_nx_convert_optab (void *x_p)
{
  struct convert_optab * const x = (struct convert_optab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_13convert_optab))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(NUM_MACHINE_MODES); i0++) {
          {
            size_t i1;
            for (i1 = 0; i1 < (size_t)(NUM_MACHINE_MODES); i1++) {
              do { if ((*x).handlers[i0][i1].libfunc != ((void *)0)) gt_pch_nx_rtx_def ((*x).handlers[i0][i1].libfunc); } while (0);
            }
          }
        }
      }
    }
}
void
gt_pch_nx_optab (void *x_p)
{
  struct optab * const x = (struct optab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_5optab))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(NUM_MACHINE_MODES); i0++) {
          do { if ((*x).handlers[i0].libfunc != ((void *)0)) gt_pch_nx_rtx_def ((*x).handlers[i0].libfunc); } while (0);
        }
      }
    }
}
void
gt_pch_nx_basic_block_def (void *x_p)
{
  struct basic_block_def * x = (struct basic_block_def *)x_p;
  struct basic_block_def * xlimit = x;
  while (gt_pch_note_object (xlimit, xlimit, gt_pch_p_15basic_block_def))
   xlimit = ((*xlimit).next_bb);
  if (x != xlimit)
    for (;;)
      {
        struct basic_block_def * const xprev = ((*x).prev_bb);
        if (xprev == ((void *)0)) break;
        x = xprev;
        (void) gt_pch_note_object (xprev, xprev, gt_pch_p_15basic_block_def);
      }
  while (x != xlimit)
    {
      do { if ((*x).head_ != ((void *)0)) gt_pch_nx_rtx_def ((*x).head_); } while (0);
      do { if ((*x).end_ != ((void *)0)) gt_pch_nx_rtx_def ((*x).end_); } while (0);
      do { if ((*x).stmt_list != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).stmt_list); } while (0);
      do { if ((*x).pred != ((void *)0)) gt_pch_nx_edge_def ((*x).pred); } while (0);
      do { if ((*x).succ != ((void *)0)) gt_pch_nx_edge_def ((*x).succ); } while (0);
      do { if ((*x).prev_bb != ((void *)0)) gt_pch_nx_basic_block_def ((*x).prev_bb); } while (0);
      do { if ((*x).next_bb != ((void *)0)) gt_pch_nx_basic_block_def ((*x).next_bb); } while (0);
      do { if ((*x).tree_annotations != ((void *)0)) gt_pch_nx_bb_ann_d ((*x).tree_annotations); } while (0);
      x = ((*x).next_bb);
    }
}
void
gt_pch_nx_reg_attrs (void *x_p)
{
  struct reg_attrs * const x = (struct reg_attrs *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_9reg_attrs))
    {
      do { if ((*x).decl != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).decl); } while (0);
    }
}
void
gt_pch_nx_mem_attrs (void *x_p)
{
  struct mem_attrs * const x = (struct mem_attrs *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_9mem_attrs))
    {
      do { if ((*x).expr != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).expr); } while (0);
      do { if ((*x).offset != ((void *)0)) gt_pch_nx_rtx_def ((*x).offset); } while (0);
      do { if ((*x).size != ((void *)0)) gt_pch_nx_rtx_def ((*x).size); } while (0);
    }
}
void
gt_pch_nx_varray_head_tag (void *x_p)
{
  struct varray_head_tag * const x = (struct varray_head_tag *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_15varray_head_tag))
    {
      gt_pch_n_S ((*x).name);
      switch ((*x).type)
        {
        case VARRAY_DATA_C:
          break;
        case VARRAY_DATA_UC:
          break;
        case VARRAY_DATA_S:
          break;
        case VARRAY_DATA_US:
          break;
        case VARRAY_DATA_I:
          break;
        case VARRAY_DATA_U:
          break;
        case VARRAY_DATA_L:
          break;
        case VARRAY_DATA_UL:
          break;
        case VARRAY_DATA_HINT:
          break;
        case VARRAY_DATA_UHINT:
          break;
        case VARRAY_DATA_GENERIC:
          fancy_abort ("gcc.c", 363666, "?");
          break;
        case VARRAY_DATA_CPTR:
          {
            size_t i10;
            for (i10 = 0; i10 < (size_t)((*x).num_elements); i10++) {
              gt_pch_n_S ((*x).data.cptr[i10]);
            }
          }
          break;
        case VARRAY_DATA_RTX:
          {
            size_t i11;
            for (i11 = 0; i11 < (size_t)((*x).num_elements); i11++) {
              do { if ((*x).data.rtx1[i11] != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.rtx1[i11]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_RTVEC:
          {
            size_t i12;
            for (i12 = 0; i12 < (size_t)((*x).num_elements); i12++) {
              do { if ((*x).data.rtvec1[i12] != ((void *)0)) gt_pch_nx_rtvec_def ((*x).data.rtvec1[i12]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TREE:
          {
            size_t i13;
            for (i13 = 0; i13 < (size_t)((*x).num_elements); i13++) {
              do { if ((*x).data.tree1[i13] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).data.tree1[i13]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_BITMAP:
          {
            size_t i14;
            for (i14 = 0; i14 < (size_t)((*x).num_elements); i14++) {
              do { if ((*x).data.bitmap1[i14] != ((void *)0)) gt_pch_nx_bitmap_head_def ((*x).data.bitmap1[i14]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CONST_EQUIV:
          {
            size_t i15;
            for (i15 = 0; i15 < (size_t)((*x).num_elements); i15++) {
              do { if ((*x).data.const_equiv[i15].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.const_equiv[i15].rtx1); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TE:
          {
            size_t i16;
            for (i16 = 0; i16 < (size_t)((*x).num_elements); i16++) {
              do { if ((*x).data.te[i16] != ((void *)0)) gt_pch_nx_elt_list ((*x).data.te[i16]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_EDGE:
          {
            size_t i17;
            for (i17 = 0; i17 < (size_t)((*x).num_elements); i17++) {
              do { if ((*x).data.e[i17] != ((void *)0)) gt_pch_nx_edge_def ((*x).data.e[i17]); } while (0);
            }
          }
          break;
        default:
          break;
        }
    }
}
void
gt_pch_nx_function (void *x_p)
{
  struct function * const x = (struct function *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_8function))
    {
      do { if ((*x).eh != ((void *)0)) gt_pch_nx_eh_status ((*x).eh); } while (0);
      do { if ((*x).stmt != ((void *)0)) gt_pch_nx_stmt_status ((*x).stmt); } while (0);
      do { if ((*x).expr != ((void *)0)) gt_pch_nx_expr_status ((*x).expr); } while (0);
      do { if ((*x).emit != ((void *)0)) gt_pch_nx_emit_status ((*x).emit); } while (0);
      do { if ((*x).varasm != ((void *)0)) gt_pch_nx_varasm_status ((*x).varasm); } while (0);
      do { if ((*x).saved_tree != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).saved_tree); } while (0);
      do { if ((*x).saved_args != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).saved_args); } while (0);
      do { if ((*x).decl != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).decl); } while (0);
      do { if ((*x).outer != ((void *)0)) gt_pch_nx_function ((*x).outer); } while (0);
      do { if ((*x).arg_offset_rtx != ((void *)0)) gt_pch_nx_rtx_def ((*x).arg_offset_rtx); } while (0);
      do { if ((*x).return_rtx != ((void *)0)) gt_pch_nx_rtx_def ((*x).return_rtx); } while (0);
      do { if ((*x).internal_arg_pointer != ((void *)0)) gt_pch_nx_rtx_def ((*x).internal_arg_pointer); } while (0);
      do { if ((*x).hard_reg_initial_vals != ((void *)0)) gt_pch_nx_initial_value_struct ((*x).hard_reg_initial_vals); } while (0);
      do { if ((*x).x_nonlocal_goto_handler_labels != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_nonlocal_goto_handler_labels); } while (0);
      do { if ((*x).x_return_label != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_return_label); } while (0);
      do { if ((*x).x_naked_return_label != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_naked_return_label); } while (0);
      do { if ((*x).x_stack_slot_list != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_stack_slot_list); } while (0);
      do { if ((*x).x_tail_recursion_reentry != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_tail_recursion_reentry); } while (0);
      do { if ((*x).x_arg_pointer_save_area != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_arg_pointer_save_area); } while (0);
      do { if ((*x).static_chain_decl != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).static_chain_decl); } while (0);
      do { if ((*x).nonlocal_goto_save_area != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).nonlocal_goto_save_area); } while (0);
      do { if ((*x).x_parm_birth_insn != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_parm_birth_insn); } while (0);
      gt_pch_n_P9temp_slot15varray_head_tag ((*x).x_used_temp_slots);
      do { if ((*x).x_avail_temp_slots != ((void *)0)) gt_pch_nx_temp_slot ((*x).x_avail_temp_slots); } while (0);
      do { if ((*x).fixup_var_refs_queue != ((void *)0)) gt_pch_nx_var_refs_queue ((*x).fixup_var_refs_queue); } while (0);
      do { if ((*x).original_arg_vector != ((void *)0)) gt_pch_nx_rtvec_def ((*x).original_arg_vector); } while (0);
      do { if ((*x).original_decl_initial != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).original_decl_initial); } while (0);
      do { if ((*x).machine != ((void *)0)) gt_pch_nx_machine_function ((*x).machine); } while (0);
      do { if ((*x).language != ((void *)0)) gt_pch_nx_language_function ((*x).language); } while (0);
      do { if ((*x).epilogue_delay_list != ((void *)0)) gt_pch_nx_rtx_def ((*x).epilogue_delay_list); } while (0);
      gt_pch_n_S ((*x).function_end_locus.file);
      do { if ((*x).ib_boundaries_block != ((void *)0)) gt_pch_nx_varray_head_tag ((*x).ib_boundaries_block); } while (0);
      do { if ((*x).unexpanded_var_list != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).unexpanded_var_list); } while (0);
    }
}
void
gt_pch_nx_expr_status (void *x_p)
{
  struct expr_status * const x = (struct expr_status *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_11expr_status))
    {
      do { if ((*x).x_saveregs_value != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_saveregs_value); } while (0);
      do { if ((*x).x_apply_args_value != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_apply_args_value); } while (0);
      do { if ((*x).x_forced_labels != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_forced_labels); } while (0);
      do { if ((*x).x_pending_chain != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_pending_chain); } while (0);
    }
}
void
gt_pch_nx_emit_status (void *x_p)
{
  struct emit_status * const x = (struct emit_status *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_11emit_status))
    {
      do { if ((*x).x_first_insn != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_first_insn); } while (0);
      do { if ((*x).x_last_insn != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_last_insn); } while (0);
      do { if ((*x).sequence_stack != ((void *)0)) gt_pch_nx_sequence_stack ((*x).sequence_stack); } while (0);
      gt_pch_n_S ((*x).x_last_location.file);
      if ((*x).regno_pointer_align != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).x_reg_rtx_no); i0++) {
        }
        gt_pch_note_object ((*x).regno_pointer_align, x, gt_pch_p_11emit_status);
      }
      if ((*x).x_regno_reg_rtx != ((void *)0)) {
        size_t i1;
        for (i1 = 0; i1 < (size_t)(((*x)).x_reg_rtx_no); i1++) {
          do { if ((*x).x_regno_reg_rtx[i1] != ((void *)0)) gt_pch_nx_rtx_def ((*x).x_regno_reg_rtx[i1]); } while (0);
        }
        gt_pch_note_object ((*x).x_regno_reg_rtx, x, gt_pch_p_11emit_status);
      }
    }
}
void
gt_pch_nx_sequence_stack (void *x_p)
{
  struct sequence_stack * const x = (struct sequence_stack *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_14sequence_stack))
    {
      do { if ((*x).first != ((void *)0)) gt_pch_nx_rtx_def ((*x).first); } while (0);
      do { if ((*x).last != ((void *)0)) gt_pch_nx_rtx_def ((*x).last); } while (0);
      do { if ((*x).next != ((void *)0)) gt_pch_nx_sequence_stack ((*x).next); } while (0);
    }
}
void
gt_pch_nx_var_refs_queue (void *x_p)
{
  struct var_refs_queue * const x = (struct var_refs_queue *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_14var_refs_queue))
    {
      do { if ((*x).modified != ((void *)0)) gt_pch_nx_rtx_def ((*x).modified); } while (0);
      do { if ((*x).next != ((void *)0)) gt_pch_nx_var_refs_queue ((*x).next); } while (0);
    }
}
void
gt_pch_nx_bitmap_head_def (void *x_p)
{
  struct bitmap_head_def * const x = (struct bitmap_head_def *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_15bitmap_head_def))
    {
      do { if ((*x).first != ((void *)0)) gt_pch_nx_bitmap_element_def ((*x).first); } while (0);
      do { if ((*x).current != ((void *)0)) gt_pch_nx_bitmap_element_def ((*x).current); } while (0);
    }
}
void
gt_pch_nx_bitmap_element_def (void *x_p)
{
  struct bitmap_element_def * const x = (struct bitmap_element_def *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_18bitmap_element_def))
    {
      do { if ((*x).next != ((void *)0)) gt_pch_nx_bitmap_element_def ((*x).next); } while (0);
      do { if ((*x).prev != ((void *)0)) gt_pch_nx_bitmap_element_def ((*x).prev); } while (0);
    }
}
void
gt_pch_nx_machine_function (void *x_p)
{
  struct machine_function * const x = (struct machine_function *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_16machine_function))
    {
      do { if ((*x).stack_locals != ((void *)0)) gt_pch_nx_stack_local_entry ((*x).stack_locals); } while (0);
      gt_pch_n_S ((*x).some_ld_name);
    }
}
void
gt_pch_nx_answer (void *x_p)
{
  struct answer * const x = (struct answer *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_6answer))
    {
      do { if ((*x).next != ((void *)0)) gt_pch_nx_answer ((*x).next); } while (0);
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).count); i0++) {
          switch (cpp_token_val_index (&((*x).first[i0])))
            {
            case CPP_TOKEN_FLD_NODE:
              {
                union tree_node * const x1 =
                  ((*x).first[i0].val.node) ? ((tree) ((char *) (((ht_identifier *) (((*x).first[i0].val.node)))) - sizeof (struct tree_common))) : ((void *)0);
                do { if (x1 != ((void *)0)) gt_pch_nx_lang_tree_node (x1); } while (0);
              }
              break;
            case CPP_TOKEN_FLD_SOURCE:
              do { if ((*x).first[i0].val.source != ((void *)0)) gt_pch_nx_cpp_token ((*x).first[i0].val.source); } while (0);
              break;
            case CPP_TOKEN_FLD_STR:
              gt_pch_n_S ((*x).first[i0].val.str.text);
              break;
            case CPP_TOKEN_FLD_ARG_NO:
              break;
            default:
              break;
            }
        }
      }
    }
}
void
gt_pch_nx_cpp_macro (void *x_p)
{
  struct cpp_macro * const x = (struct cpp_macro *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_9cpp_macro))
    {
      if ((*x).params != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).paramc); i0++) {
          {
            union tree_node * const x1 =
              ((*x).params[i0]) ? ((tree) ((char *) (((ht_identifier *) (((*x).params[i0])))) - sizeof (struct tree_common))) : ((void *)0);
            do { if (x1 != ((void *)0)) gt_pch_nx_lang_tree_node (x1); } while (0);
          }
        }
        gt_pch_note_object ((*x).params, x, gt_pch_p_9cpp_macro);
      }
      switch (((*x)).traditional)
        {
        case 0:
          if ((*x).exp.tokens != ((void *)0)) {
            size_t i2;
            for (i2 = 0; i2 < (size_t)((*x).count); i2++) {
              switch (cpp_token_val_index (&((*x).exp.tokens[i2])))
                {
                case CPP_TOKEN_FLD_NODE:
                  {
                    union tree_node * const x3 =
                      ((*x).exp.tokens[i2].val.node) ? ((tree) ((char *) (((ht_identifier *) (((*x).exp.tokens[i2].val.node)))) - sizeof (struct tree_common))) : ((void *)0);
                    do { if (x3 != ((void *)0)) gt_pch_nx_lang_tree_node (x3); } while (0);
                  }
                  break;
                case CPP_TOKEN_FLD_SOURCE:
                  do { if ((*x).exp.tokens[i2].val.source != ((void *)0)) gt_pch_nx_cpp_token ((*x).exp.tokens[i2].val.source); } while (0);
                  break;
                case CPP_TOKEN_FLD_STR:
                  gt_pch_n_S ((*x).exp.tokens[i2].val.str.text);
                  break;
                case CPP_TOKEN_FLD_ARG_NO:
                  break;
                default:
                  break;
                }
            }
            gt_pch_note_object ((*x).exp.tokens, x, gt_pch_p_9cpp_macro);
          }
          break;
        case 1:
          gt_pch_n_S ((*x).exp.text);
          break;
        default:
          break;
        }
    }
}
void
gt_pch_nx_cpp_token (void *x_p)
{
  struct cpp_token * const x = (struct cpp_token *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_9cpp_token))
    {
      switch (cpp_token_val_index (&((*x))))
        {
        case CPP_TOKEN_FLD_NODE:
          {
            union tree_node * const x0 =
              ((*x).val.node) ? ((tree) ((char *) (((ht_identifier *) (((*x).val.node)))) - sizeof (struct tree_common))) : ((void *)0);
            do { if (x0 != ((void *)0)) gt_pch_nx_lang_tree_node (x0); } while (0);
          }
          break;
        case CPP_TOKEN_FLD_SOURCE:
          do { if ((*x).val.source != ((void *)0)) gt_pch_nx_cpp_token ((*x).val.source); } while (0);
          break;
        case CPP_TOKEN_FLD_STR:
          gt_pch_n_S ((*x).val.str.text);
          break;
        case CPP_TOKEN_FLD_ARG_NO:
          break;
        default:
          break;
        }
    }
}
void
gt_pch_nx_rtvec_def (void *x_p)
{
  struct rtvec_def * const x = (struct rtvec_def *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_9rtvec_def))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_elem); i0++) {
          do { if ((*x).elem[i0] != ((void *)0)) gt_pch_nx_rtx_def ((*x).elem[i0]); } while (0);
        }
      }
    }
}
void
gt_pch_nx_rtx_def (void *x_p)
{
  struct rtx_def * x = (struct rtx_def *)x_p;
  struct rtx_def * xlimit = x;
  while (gt_pch_note_object (xlimit, xlimit, gt_pch_p_7rtx_def))
   xlimit = ((rtx_next[((enum rtx_code) (&(*xlimit))->code)] == 0 ? ((void *)0) : *(rtx *)(((char *)&(*xlimit)) + rtx_next[((enum rtx_code) (&(*xlimit))->code)])));
  if (x != xlimit)
    for (;;)
      {
        struct rtx_def * const xprev = (((((enum rtx_code) (&(*x))->code) == INSN || ((enum rtx_code) (&(*x))->code) == CALL_INSN || ((enum rtx_code) (&(*x))->code) == JUMP_INSN || ((enum rtx_code) (&(*x))->code) == NOTE || ((enum rtx_code) (&(*x))->code) == BARRIER || ((enum rtx_code) (&(*x))->code) == CODE_LABEL) && (((&(*x))->u.fld[1]).rtx1) != ((void *)0) && ((((((&(*x))->u.fld[1]).rtx1))->u.fld[2]).rtx1) == &(*x) ? (((&(*x))->u.fld[1]).rtx1) : ((void *)0)));
        if (xprev == ((void *)0)) break;
        x = xprev;
        (void) gt_pch_note_object (xprev, xprev, gt_pch_p_7rtx_def);
      }
  while (x != xlimit)
    {
      switch (((enum rtx_code) (&(*x))->code))
        {
        case VAR_LOCATION:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rttree != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.fld[0].rttree); } while (0);
          break;
        case US_TRUNCATE:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SS_TRUNCATE:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case US_MINUS:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SS_MINUS:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case US_PLUS:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SS_PLUS:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case VEC_DUPLICATE:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case VEC_CONCAT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case VEC_SELECT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case VEC_MERGE:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case RANGE_LIVE:
          do { if ((*x).u.fld[0].rtbit != ((void *)0)) gt_pch_nx_bitmap_element_def ((*x).u.fld[0].rtbit); } while (0);
          break;
        case RANGE_VAR:
          do { if ((*x).u.fld[1].rttree != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.fld[1].rttree); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case RANGE_REG:
          do { if ((*x).u.fld[9].rttree != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.fld[9].rttree); } while (0);
          do { if ((*x).u.fld[8].rttree != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.fld[8].rttree); } while (0);
          break;
        case RANGE_INFO:
          do { if ((*x).u.fld[10].rtbit != ((void *)0)) gt_pch_nx_bitmap_element_def ((*x).u.fld[10].rtbit); } while (0);
          do { if ((*x).u.fld[9].rtbit != ((void *)0)) gt_pch_nx_bitmap_element_def ((*x).u.fld[9].rtbit); } while (0);
          do { if ((*x).u.fld[2].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[2].rtvec1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LO_SUM:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case HIGH:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ZERO_EXTRACT:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SIGN_EXTRACT:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case PARITY:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case POPCOUNT:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case CTZ:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case CLZ:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case FFS:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SQRT:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ABS:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNSIGNED_FIX:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNSIGNED_FLOAT:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case FIX:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case FLOAT:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case FLOAT_TRUNCATE:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case FLOAT_EXTEND:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case TRUNCATE:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ZERO_EXTEND:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SIGN_EXTEND:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LTGT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNLT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNLE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNGT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNGE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNEQ:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ORDERED:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UNORDERED:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LTU:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LEU:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case GTU:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case GEU:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case GT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case GE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case EQ:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case NE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case POST_MODIFY:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case PRE_MODIFY:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case POST_INC:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case POST_DEC:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case PRE_INC:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case PRE_DEC:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UMAX:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UMIN:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SMAX:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SMIN:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ROTATERT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case LSHIFTRT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ASHIFTRT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ROTATE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ASHIFT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case NOT:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case XOR:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case IOR:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case AND:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UMOD:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case UDIV:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case MOD:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case DIV:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case MULT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case NEG:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case MINUS:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case PLUS:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case COMPARE:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case COND:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case IF_THEN_ELSE:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case QUEUED:
          do { if ((*x).u.fld[4].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[4].rtx1); } while (0);
          do { if ((*x).u.fld[3].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[3].rtx1); } while (0);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case CC0:
          break;
        case SYMBOL_REF:
          do { if ((*x).u.fld[2].rttree != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.fld[2].rttree); } while (0);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case LABEL_REF:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case MEM:
          do { if ((*x).u.fld[1].rtmem != ((void *)0)) gt_pch_nx_mem_attrs ((*x).u.fld[1].rtmem); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case CONCAT:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case STRICT_LOW_PART:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SUBREG:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SCRATCH:
          break;
        case REG:
          do { if ((*x).u.fld[2].rtreg != ((void *)0)) gt_pch_nx_reg_attrs ((*x).u.fld[2].rtreg); } while (0);
          break;
        case VALUE:
          break;
        case PC:
          break;
        case CONST:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case CONST_STRING:
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case CONST_VECTOR:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case CONST_DOUBLE:
          break;
        case CONST_INT:
          break;
        case RESX:
          break;
        case TRAP_IF:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case RETURN:
          break;
        case CALL:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case CLOBBER:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case USE:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SET:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case PREFETCH:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ADDR_DIFF_VEC:
          do { if ((*x).u.fld[3].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[3].rtx1); } while (0);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case ADDR_VEC:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case UNSPEC_VOLATILE:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case UNSPEC:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case ASM_OPERANDS:
          gt_pch_n_S ((*x).u.fld[5].rtstr);
          do { if ((*x).u.fld[4].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[4].rtvec1); } while (0);
          do { if ((*x).u.fld[3].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[3].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case ASM_INPUT:
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case PARALLEL:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case COND_EXEC:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case NOTE:
          switch ((((&(*x))->u.fld[5]).rtint))
            {
            default:
              gt_pch_n_S ((*x).u.fld[4].rtstr);
              break;
            case -79:
              do { if ((*x).u.fld[4].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[4].rtx1); } while (0);
              break;
            case -80:
              break;
            case -81:
              break;
            case -82:
              do { if ((*x).u.fld[4].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[4].rtx1); } while (0);
              break;
            case -83:
              break;
            case -84:
              break;
            case -85:
              break;
            case -86:
              break;
            case -87:
              break;
            case -88:
              break;
            case -89:
              break;
            case -90:
              break;
            case -91:
              break;
            case -92:
              break;
            case -93:
              break;
            case -94:
              break;
            case -95:
              break;
            case -96:
              break;
            case -97:
              do { if ((*x).u.fld[4].rttree != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.fld[4].rttree); } while (0);
              break;
            case -98:
              do { if ((*x).u.fld[4].rttree != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.fld[4].rttree); } while (0);
              break;
            case -99:
              break;
            case -100:
              break;
            }
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          break;
        case CODE_LABEL:
          gt_pch_n_S ((*x).u.fld[7].rtstr);
          do { if ((*x).u.fld[5].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[5].rtx1); } while (0);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          break;
        case BARRIER:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          break;
        case CALL_INSN:
          do { if ((*x).u.fld[9].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[9].rtx1); } while (0);
          do { if ((*x).u.fld[8].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[8].rtx1); } while (0);
          do { if ((*x).u.fld[7].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[7].rtx1); } while (0);
          do { if ((*x).u.fld[5].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[5].rtx1); } while (0);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          break;
        case JUMP_INSN:
          do { if ((*x).u.fld[9].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[9].rtx1); } while (0);
          do { if ((*x).u.fld[8].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[8].rtx1); } while (0);
          do { if ((*x).u.fld[7].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[7].rtx1); } while (0);
          do { if ((*x).u.fld[5].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[5].rtx1); } while (0);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          break;
        case INSN:
          do { if ((*x).u.fld[8].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[8].rtx1); } while (0);
          do { if ((*x).u.fld[7].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[7].rtx1); } while (0);
          do { if ((*x).u.fld[5].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[5].rtx1); } while (0);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          break;
        case ATTR_FLAG:
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case EQ_ATTR_ALT:
          break;
        case EQ_ATTR:
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case SET_ATTR_ALTERNATIVE:
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case SET_ATTR:
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case ATTR:
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case DEFINE_ATTR:
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case DEFINE_INSN_RESERVATION:
          gt_pch_n_S ((*x).u.fld[3].rtstr);
          do { if ((*x).u.fld[2].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[2].rtx1); } while (0);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case DEFINE_RESERVATION:
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case AUTOMATA_OPTION:
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case DEFINE_AUTOMATON:
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case DEFINE_BYPASS:
          gt_pch_n_S ((*x).u.fld[3].rtstr);
          gt_pch_n_S ((*x).u.fld[2].rtstr);
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          break;
        case FINAL_ABSENCE_SET:
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case ABSENCE_SET:
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case FINAL_PRESENCE_SET:
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case PRESENCE_SET:
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case EXCLUSION_SET:
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case DEFINE_QUERY_CPU_UNIT:
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case DEFINE_CPU_UNIT:
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case ADDRESS:
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case SEQUENCE:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case DEFINE_COND_EXEC:
          gt_pch_n_S ((*x).u.fld[2].rtstr);
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case DEFINE_ASM_ATTRIBUTES:
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case DEFINE_FUNCTION_UNIT:
          do { if ((*x).u.fld[6].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[6].rtvec1); } while (0);
          do { if ((*x).u.fld[3].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[3].rtx1); } while (0);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case DEFINE_DELAY:
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case DEFINE_EXPAND:
          gt_pch_n_S ((*x).u.fld[3].rtstr);
          gt_pch_n_S ((*x).u.fld[2].rtstr);
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case DEFINE_PEEPHOLE2:
          gt_pch_n_S ((*x).u.fld[3].rtstr);
          do { if ((*x).u.fld[2].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[2].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case DEFINE_INSN_AND_SPLIT:
          do { if ((*x).u.fld[7].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[7].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[6].rtstr);
          do { if ((*x).u.fld[5].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[5].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[4].rtstr);
          gt_pch_n_S ((*x).u.fld[3].rtstr);
          gt_pch_n_S ((*x).u.fld[2].rtstr);
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case DEFINE_SPLIT:
          gt_pch_n_S ((*x).u.fld[3].rtstr);
          do { if ((*x).u.fld[2].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[2].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case DEFINE_PEEPHOLE:
          do { if ((*x).u.fld[3].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[3].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[2].rtstr);
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          do { if ((*x).u.fld[0].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[0].rtvec1); } while (0);
          break;
        case DEFINE_INSN:
          do { if ((*x).u.fld[4].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[4].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[3].rtstr);
          gt_pch_n_S ((*x).u.fld[2].rtstr);
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case MATCH_PAR_DUP:
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          break;
        case MATCH_OP_DUP:
          do { if ((*x).u.fld[1].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[1].rtvec1); } while (0);
          break;
        case MATCH_PARALLEL:
          do { if ((*x).u.fld[2].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[2].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          break;
        case MATCH_OPERATOR:
          do { if ((*x).u.fld[2].rtvec1 != ((void *)0)) gt_pch_nx_rtvec_def ((*x).u.fld[2].rtvec1); } while (0);
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          break;
        case MATCH_DUP:
          break;
        case MATCH_SCRATCH:
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          break;
        case MATCH_OPERAND:
          gt_pch_n_S ((*x).u.fld[2].rtstr);
          gt_pch_n_S ((*x).u.fld[1].rtstr);
          break;
        case INSN_LIST:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case EXPR_LIST:
          do { if ((*x).u.fld[1].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[1].rtx1); } while (0);
          do { if ((*x).u.fld[0].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.fld[0].rtx1); } while (0);
          break;
        case INCLUDE:
          gt_pch_n_S ((*x).u.fld[0].rtstr);
          break;
        case NIL:
          break;
        case UNKNOWN:
          break;
        default:
          break;
        }
      x = ((rtx_next[((enum rtx_code) (&(*x))->code)] == 0 ? ((void *)0) : *(rtx *)(((char *)&(*x)) + rtx_next[((enum rtx_code) (&(*x))->code)])));
    }
}
void
gt_pch_nx_location_s (void *x_p)
{
  struct location_s * const x = (struct location_s *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_10location_s))
    {
      gt_pch_n_S ((*x).file);
    }
}
void
gt_pch_n_II17splay_tree_node_s (void *x_p)
{
  struct splay_tree_node_s * const x = (struct splay_tree_node_s *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_II17splay_tree_node_s))
    {
      gt_pch_n_II17splay_tree_node_s ((*x).left);
      gt_pch_n_II17splay_tree_node_s ((*x).right);
    }
}
void
gt_pch_n_SP9tree_node17splay_tree_node_s (void *x_p)
{
  struct splay_tree_node_s * const x = (struct splay_tree_node_s *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_SP9tree_node17splay_tree_node_s))
    {
      gt_pch_n_S ((void *)(*x).key);
      do { if ((void *)(*x).value1 != ((void *)0)) gt_pch_nx_lang_tree_node ((void *)(*x).value1); } while (0);
      gt_pch_n_SP9tree_node17splay_tree_node_s ((*x).left);
      gt_pch_n_SP9tree_node17splay_tree_node_s ((*x).right);
    }
}
void
gt_pch_n_P13alias_var_def15varray_head_tag (void *x_p)
{
  struct varray_head_tag * const x = (struct varray_head_tag *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P13alias_var_def15varray_head_tag))
    {
      gt_pch_n_S ((*x).name);
      switch ((*x).type)
        {
        case VARRAY_DATA_C:
          break;
        case VARRAY_DATA_UC:
          break;
        case VARRAY_DATA_S:
          break;
        case VARRAY_DATA_US:
          break;
        case VARRAY_DATA_I:
          break;
        case VARRAY_DATA_U:
          break;
        case VARRAY_DATA_L:
          break;
        case VARRAY_DATA_UL:
          break;
        case VARRAY_DATA_HINT:
          break;
        case VARRAY_DATA_UHINT:
          break;
        case VARRAY_DATA_GENERIC:
          {
            size_t i10;
            for (i10 = 0; i10 < (size_t)((*x).num_elements); i10++) {
              do { if ((*x).data.generic[i10] != ((void *)0)) gt_pch_nx_alias_var_def ((*x).data.generic[i10]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CPTR:
          {
            size_t i11;
            for (i11 = 0; i11 < (size_t)((*x).num_elements); i11++) {
              gt_pch_n_S ((*x).data.cptr[i11]);
            }
          }
          break;
        case VARRAY_DATA_RTX:
          {
            size_t i12;
            for (i12 = 0; i12 < (size_t)((*x).num_elements); i12++) {
              do { if ((*x).data.rtx1[i12] != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.rtx1[i12]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_RTVEC:
          {
            size_t i13;
            for (i13 = 0; i13 < (size_t)((*x).num_elements); i13++) {
              do { if ((*x).data.rtvec1[i13] != ((void *)0)) gt_pch_nx_rtvec_def ((*x).data.rtvec1[i13]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TREE:
          {
            size_t i14;
            for (i14 = 0; i14 < (size_t)((*x).num_elements); i14++) {
              do { if ((*x).data.tree1[i14] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).data.tree1[i14]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_BITMAP:
          {
            size_t i15;
            for (i15 = 0; i15 < (size_t)((*x).num_elements); i15++) {
              do { if ((*x).data.bitmap1[i15] != ((void *)0)) gt_pch_nx_bitmap_head_def ((*x).data.bitmap1[i15]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CONST_EQUIV:
          {
            size_t i16;
            for (i16 = 0; i16 < (size_t)((*x).num_elements); i16++) {
              do { if ((*x).data.const_equiv[i16].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.const_equiv[i16].rtx1); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TE:
          {
            size_t i17;
            for (i17 = 0; i17 < (size_t)((*x).num_elements); i17++) {
              do { if ((*x).data.te[i17] != ((void *)0)) gt_pch_nx_elt_list ((*x).data.te[i17]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_EDGE:
          {
            size_t i18;
            for (i18 = 0; i18 < (size_t)((*x).num_elements); i18++) {
              do { if ((*x).data.e[i18] != ((void *)0)) gt_pch_nx_edge_def ((*x).data.e[i18]); } while (0);
            }
          }
          break;
        default:
          break;
        }
    }
}
void
gt_pch_n_P9tree_node4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P9tree_node4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P9tree_node4htab);
      }
    }
}
void
gt_pch_n_P9reg_attrs4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P9reg_attrs4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_reg_attrs ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P9reg_attrs4htab);
      }
    }
}
void
gt_pch_n_P9mem_attrs4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P9mem_attrs4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_mem_attrs ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P9mem_attrs4htab);
      }
    }
}
void
gt_pch_n_P7rtx_def4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P7rtx_def4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_rtx_def ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P7rtx_def4htab);
      }
    }
}
void
gt_pch_n_SP9tree_node12splay_tree_s (void *x_p)
{
  struct splay_tree_s * const x = (struct splay_tree_s *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_SP9tree_node12splay_tree_s))
    {
      gt_pch_n_SP9tree_node17splay_tree_node_s ((*x).root);
    }
}
void
gt_pch_n_P19cgraph_varpool_node4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P19cgraph_varpool_node4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_cgraph_varpool_node ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P19cgraph_varpool_node4htab);
      }
    }
}
void
gt_pch_n_P11cgraph_node4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P11cgraph_node4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_cgraph_node ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P11cgraph_node4htab);
      }
    }
}
void
gt_pch_n_II12splay_tree_s (void *x_p)
{
  struct splay_tree_s * const x = (struct splay_tree_s *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_II12splay_tree_s))
    {
      gt_pch_n_II17splay_tree_node_s ((*x).root);
    }
}
void
gt_pch_p_15edge_prediction (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct edge_prediction * const x = (struct edge_prediction *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).edge1), cookie);
}
void
gt_pch_p_19v_must_def_optype_d (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct v_must_def_optype_d * const x = (struct v_must_def_optype_d *)x_p;
  {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).num_v_must_defs); i0++) {
      if ((void *)(x) == this_obj)
        op (&((*x).v_must_defs[i0]), cookie);
    }
  }
}
void
gt_pch_p_13vuse_optype_d (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct vuse_optype_d * const x = (struct vuse_optype_d *)x_p;
  {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).num_vuses); i0++) {
      if ((void *)(x) == this_obj)
        op (&((*x).vuses[i0]), cookie);
    }
  }
}
void
gt_pch_p_18v_may_def_optype_d (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct v_may_def_optype_d * const x = (struct v_may_def_optype_d *)x_p;
  {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).num_v_may_defs * 2); i0++) {
      if ((void *)(x) == this_obj)
        op (&((*x).v_may_defs[i0]), cookie);
    }
  }
}
void
gt_pch_p_12use_optype_d (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct use_optype_d * const x = (struct use_optype_d *)x_p;
  {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).num_uses); i0++) {
    }
  }
}
void
gt_pch_p_12def_optype_d (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct def_optype_d * const x = (struct def_optype_d *)x_p;
  {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).num_defs); i0++) {
    }
  }
}
void
gt_pch_p_10dataflow_d (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct dataflow_d * const x = (struct dataflow_d *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).immediate_uses), cookie);
  {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(2); i0++) {
      if ((void *)(x) == this_obj)
        op (&((*x).uses[i0]), cookie);
    }
  }
}
void
gt_pch_p_19cgraph_varpool_node (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct cgraph_varpool_node * const x = (struct cgraph_varpool_node *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).decl), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next_needed), cookie);
}
void
gt_pch_p_11cgraph_edge (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct cgraph_edge * const x = (struct cgraph_edge *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).caller), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).callee), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next_caller), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next_callee), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).call_expr), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).inline_failed), cookie);
}
void
gt_pch_p_11cgraph_node (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct cgraph_node * const x = (struct cgraph_node *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).decl), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).callees), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).callers), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).previous), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).origin), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).nested), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next_nested), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next_needed), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next_clone), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).global.inlined_to), cookie);
}
void
gt_pch_p_8bb_ann_d (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct bb_ann_d * const x = (struct bb_ann_d *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).phi_nodes), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).predictions), cookie);
}
void
gt_pch_p_12elt_loc_list (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct elt_loc_list * const x = (struct elt_loc_list *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).loc), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).setting_insn), cookie);
}
void
gt_pch_p_17cselib_val_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct cselib_val_struct * const x = (struct cselib_val_struct *)x_p;
  switch (1)
    {
    case 1:
      if ((void *)(x) == this_obj)
        op (&((*x).u.val_rtx), cookie);
      break;
    default:
      break;
    }
  if ((void *)(x) == this_obj)
    op (&((*x).locs), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).addr_list), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next_containing_mem), cookie);
}
void
gt_pch_p_8elt_list (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct elt_list * const x = (struct elt_list *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).elt), cookie);
}
void
gt_pch_p_24tree_statement_list_node (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct tree_statement_list_node * const x = (struct tree_statement_list_node *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).prev), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).stmt), cookie);
}
void
gt_pch_p_13alias_var_def (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  union alias_var_def * const x = (union alias_var_def *)x_p;
  switch ((*x).common.kind)
    {
    case -1:
      if ((void *)(x) == this_obj)
        op (&((*x).common.decl), cookie);
      break;
    case ATERM_AVAR:
      if ((void *)(x) == this_obj)
        op (&((*x).aterm.common.decl), cookie);
      break;
    default:
      break;
    }
}
void
gt_pch_p_8edge_def (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct edge_def * const x = (struct edge_def *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).pred_next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).succ_next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).src), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).dest), cookie);
  switch (ir_type ())
    {
    case 0:
      if ((void *)(x) == this_obj)
        op (&((*x).insns.r), cookie);
      break;
    case 1:
      if ((void *)(x) == this_obj)
        op (&((*x).insns.t), cookie);
      break;
    default:
      break;
    }
  if ((void *)(x) == this_obj)
    op (&((*x).goto_locus), cookie);
}
void
gt_pch_p_12ptr_info_def (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct ptr_info_def * const x = (struct ptr_info_def *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).pt_vars), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).name_mem_tag), cookie);
}
void
gt_pch_p_10real_value (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct real_value * const x = (struct real_value *)x_p;
}
void
gt_pch_p_10tree_ann_d (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  union tree_ann_d * const x = (union tree_ann_d *)x_p;
  switch (ann_type ((tree_ann_t)&((*x))))
    {
    case TREE_ANN_COMMON:
      break;
    case VAR_ANN:
      if ((void *)(x) == this_obj)
        op (&((*x).decl.type_mem_tag), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).decl.may_aliases), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).decl.default_def), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).decl.current_def), cookie);
      break;
    case STMT_ANN:
      if ((void *)(x) == this_obj)
        op (&((*x).stmt.def_ops), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).stmt.use_ops), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).stmt.v_may_def_ops), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).stmt.vuse_ops), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).stmt.v_must_def_ops), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).stmt.df), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).stmt.addresses_taken), cookie);
      break;
    default:
      break;
    }
}
void
gt_pch_p_13convert_optab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct convert_optab * const x = (struct convert_optab *)x_p;
  {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(NUM_MACHINE_MODES); i0++) {
      {
        size_t i1;
        for (i1 = 0; i1 < (size_t)(NUM_MACHINE_MODES); i1++) {
          if ((void *)(x) == this_obj)
            op (&((*x).handlers[i0][i1].libfunc), cookie);
        }
      }
    }
  }
}
void
gt_pch_p_5optab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct optab * const x = (struct optab *)x_p;
  {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(NUM_MACHINE_MODES); i0++) {
      if ((void *)(x) == this_obj)
        op (&((*x).handlers[i0].libfunc), cookie);
    }
  }
}
void
gt_pch_p_15basic_block_def (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct basic_block_def * const x = (struct basic_block_def *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).head_), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).end_), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).stmt_list), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).pred), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).succ), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).prev_bb), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next_bb), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).tree_annotations), cookie);
}
void
gt_pch_p_9reg_attrs (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct reg_attrs * const x = (struct reg_attrs *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).decl), cookie);
}
void
gt_pch_p_9mem_attrs (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct mem_attrs * const x = (struct mem_attrs *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).expr), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).offset), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).size), cookie);
}
void
gt_pch_p_15varray_head_tag (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct varray_head_tag * const x = (struct varray_head_tag *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).name), cookie);
  switch ((*x).type)
    {
    case VARRAY_DATA_C:
      break;
    case VARRAY_DATA_UC:
      break;
    case VARRAY_DATA_S:
      break;
    case VARRAY_DATA_US:
      break;
    case VARRAY_DATA_I:
      break;
    case VARRAY_DATA_U:
      break;
    case VARRAY_DATA_L:
      break;
    case VARRAY_DATA_UL:
      break;
    case VARRAY_DATA_HINT:
      break;
    case VARRAY_DATA_UHINT:
      break;
    case VARRAY_DATA_GENERIC:
      fancy_abort ("gcc.c", 365474, "?");
      break;
    case VARRAY_DATA_CPTR:
      {
        size_t i10;
        for (i10 = 0; i10 < (size_t)((*x).num_elements); i10++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.cptr[i10]), cookie);
        }
      }
      break;
    case VARRAY_DATA_RTX:
      {
        size_t i11;
        for (i11 = 0; i11 < (size_t)((*x).num_elements); i11++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.rtx1[i11]), cookie);
        }
      }
      break;
    case VARRAY_DATA_RTVEC:
      {
        size_t i12;
        for (i12 = 0; i12 < (size_t)((*x).num_elements); i12++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.rtvec1[i12]), cookie);
        }
      }
      break;
    case VARRAY_DATA_TREE:
      {
        size_t i13;
        for (i13 = 0; i13 < (size_t)((*x).num_elements); i13++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.tree1[i13]), cookie);
        }
      }
      break;
    case VARRAY_DATA_BITMAP:
      {
        size_t i14;
        for (i14 = 0; i14 < (size_t)((*x).num_elements); i14++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.bitmap1[i14]), cookie);
        }
      }
      break;
    case VARRAY_DATA_CONST_EQUIV:
      {
        size_t i15;
        for (i15 = 0; i15 < (size_t)((*x).num_elements); i15++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.const_equiv[i15].rtx1), cookie);
        }
      }
      break;
    case VARRAY_DATA_TE:
      {
        size_t i16;
        for (i16 = 0; i16 < (size_t)((*x).num_elements); i16++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.te[i16]), cookie);
        }
      }
      break;
    case VARRAY_DATA_EDGE:
      {
        size_t i17;
        for (i17 = 0; i17 < (size_t)((*x).num_elements); i17++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.e[i17]), cookie);
        }
      }
      break;
    default:
      break;
    }
}
void
gt_pch_p_8function (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct function * const x = (struct function *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).eh), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).stmt), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).expr), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).emit), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).varasm), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).saved_tree), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).saved_args), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).decl), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).outer), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).arg_offset_rtx), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).return_rtx), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).internal_arg_pointer), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).hard_reg_initial_vals), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_nonlocal_goto_handler_labels), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_return_label), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_naked_return_label), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_stack_slot_list), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_tail_recursion_reentry), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_arg_pointer_save_area), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).static_chain_decl), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).nonlocal_goto_save_area), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_parm_birth_insn), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_used_temp_slots), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_avail_temp_slots), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).fixup_var_refs_queue), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).original_arg_vector), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).original_decl_initial), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).machine), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).language), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).epilogue_delay_list), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).function_end_locus.file), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).ib_boundaries_block), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).unexpanded_var_list), cookie);
}
void
gt_pch_p_11expr_status (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct expr_status * const x = (struct expr_status *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).x_saveregs_value), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_apply_args_value), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_forced_labels), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_pending_chain), cookie);
}
void
gt_pch_p_11emit_status (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct emit_status * const x = (struct emit_status *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).x_first_insn), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_last_insn), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).sequence_stack), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_last_location.file), cookie);
  if ((*x).regno_pointer_align != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).x_reg_rtx_no); i0++) {
    }
    if ((void *)(x) == this_obj)
      op (&((*x).regno_pointer_align), cookie);
  }
  if ((*x).x_regno_reg_rtx != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)(((*x)).x_reg_rtx_no); i1++) {
      if ((void *)((*x).x_regno_reg_rtx) == this_obj)
        op (&((*x).x_regno_reg_rtx[i1]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).x_regno_reg_rtx), cookie);
  }
}
void
gt_pch_p_14sequence_stack (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct sequence_stack * const x = (struct sequence_stack *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).first), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).last), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
}
void
gt_pch_p_14var_refs_queue (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct var_refs_queue * const x = (struct var_refs_queue *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).modified), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
}
void
gt_pch_p_15bitmap_head_def (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct bitmap_head_def * const x = (struct bitmap_head_def *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).first), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).current), cookie);
}
void
gt_pch_p_18bitmap_element_def (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct bitmap_element_def * const x = (struct bitmap_element_def *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).prev), cookie);
}
void
gt_pch_p_16machine_function (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct machine_function * const x = (struct machine_function *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).stack_locals), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).some_ld_name), cookie);
}
void
gt_pch_p_6answer (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct answer * const x = (struct answer *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).count); i0++) {
      switch (cpp_token_val_index (&((*x).first[i0])))
        {
        case CPP_TOKEN_FLD_NODE:
          {
            union tree_node * x1 =
              ((*x).first[i0].val.node) ? ((tree) ((char *) (((ht_identifier *) (((*x).first[i0].val.node)))) - sizeof (struct tree_common))) : ((void *)0);
            if ((void *)(x) == this_obj)
              op (&(x1), cookie);
            (*x).first[i0].val.node = (x1) ? ((cpp_hashnode *) ((&((struct tree_identifier *) ((x1)))->id))) : ((void *)0);
          }
          break;
        case CPP_TOKEN_FLD_SOURCE:
          if ((void *)(x) == this_obj)
            op (&((*x).first[i0].val.source), cookie);
          break;
        case CPP_TOKEN_FLD_STR:
          if ((void *)(x) == this_obj)
            op (&((*x).first[i0].val.str.text), cookie);
          break;
        case CPP_TOKEN_FLD_ARG_NO:
          break;
        default:
          break;
        }
    }
  }
}
void
gt_pch_p_9cpp_macro (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct cpp_macro * const x = (struct cpp_macro *)x_p;
  if ((*x).params != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).paramc); i0++) {
      {
        union tree_node * x1 =
          ((*x).params[i0]) ? ((tree) ((char *) (((ht_identifier *) (((*x).params[i0])))) - sizeof (struct tree_common))) : ((void *)0);
        if ((void *)((*x).params) == this_obj)
          op (&(x1), cookie);
        (*x).params[i0] = (x1) ? ((cpp_hashnode *) ((&((struct tree_identifier *) ((x1)))->id))) : ((void *)0);
      }
    }
    if ((void *)(x) == this_obj)
      op (&((*x).params), cookie);
  }
  switch (((*x)).traditional)
    {
    case 0:
      if ((*x).exp.tokens != ((void *)0)) {
        size_t i2;
        for (i2 = 0; i2 < (size_t)((*x).count); i2++) {
          switch (cpp_token_val_index (&((*x).exp.tokens[i2])))
            {
            case CPP_TOKEN_FLD_NODE:
              {
                union tree_node * x3 =
                  ((*x).exp.tokens[i2].val.node) ? ((tree) ((char *) (((ht_identifier *) (((*x).exp.tokens[i2].val.node)))) - sizeof (struct tree_common))) : ((void *)0);
                if ((void *)((*x).exp.tokens) == this_obj)
                  op (&(x3), cookie);
                (*x).exp.tokens[i2].val.node = (x3) ? ((cpp_hashnode *) ((&((struct tree_identifier *) ((x3)))->id))) : ((void *)0);
              }
              break;
            case CPP_TOKEN_FLD_SOURCE:
              if ((void *)((*x).exp.tokens) == this_obj)
                op (&((*x).exp.tokens[i2].val.source), cookie);
              break;
            case CPP_TOKEN_FLD_STR:
              if ((void *)((*x).exp.tokens) == this_obj)
                op (&((*x).exp.tokens[i2].val.str.text), cookie);
              break;
            case CPP_TOKEN_FLD_ARG_NO:
              break;
            default:
              break;
            }
        }
        if ((void *)(x) == this_obj)
          op (&((*x).exp.tokens), cookie);
      }
      break;
    case 1:
      if ((void *)(x) == this_obj)
        op (&((*x).exp.text), cookie);
      break;
    default:
      break;
    }
}
void
gt_pch_p_9cpp_token (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct cpp_token * const x = (struct cpp_token *)x_p;
  switch (cpp_token_val_index (&((*x))))
    {
    case CPP_TOKEN_FLD_NODE:
      {
        union tree_node * x0 =
          ((*x).val.node) ? ((tree) ((char *) (((ht_identifier *) (((*x).val.node)))) - sizeof (struct tree_common))) : ((void *)0);
        if ((void *)(x) == this_obj)
          op (&(x0), cookie);
        (*x).val.node = (x0) ? ((cpp_hashnode *) ((&((struct tree_identifier *) ((x0)))->id))) : ((void *)0);
      }
      break;
    case CPP_TOKEN_FLD_SOURCE:
      if ((void *)(x) == this_obj)
        op (&((*x).val.source), cookie);
      break;
    case CPP_TOKEN_FLD_STR:
      if ((void *)(x) == this_obj)
        op (&((*x).val.str.text), cookie);
      break;
    case CPP_TOKEN_FLD_ARG_NO:
      break;
    default:
      break;
    }
}
void
gt_pch_p_9rtvec_def (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct rtvec_def * const x = (struct rtvec_def *)x_p;
  {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).num_elem); i0++) {
      if ((void *)(x) == this_obj)
        op (&((*x).elem[i0]), cookie);
    }
  }
}
void
gt_pch_p_7rtx_def (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct rtx_def * const x = (struct rtx_def *)x_p;
  switch (((enum rtx_code) (&(*x))->code))
    {
    case VAR_LOCATION:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rttree), cookie);
      break;
    case US_TRUNCATE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case SS_TRUNCATE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case US_MINUS:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case SS_MINUS:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case US_PLUS:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case SS_PLUS:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case VEC_DUPLICATE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case VEC_CONCAT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case VEC_SELECT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case VEC_MERGE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case RANGE_LIVE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtbit), cookie);
      break;
    case RANGE_VAR:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rttree), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case RANGE_REG:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[9].rttree), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[8].rttree), cookie);
      break;
    case RANGE_INFO:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[10].rtbit), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[9].rtbit), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case LO_SUM:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case HIGH:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case ZERO_EXTRACT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case SIGN_EXTRACT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case PARITY:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case POPCOUNT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case CTZ:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case CLZ:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case FFS:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case SQRT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case ABS:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case UNSIGNED_FIX:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case UNSIGNED_FLOAT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case FIX:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case FLOAT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case FLOAT_TRUNCATE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case FLOAT_EXTEND:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case TRUNCATE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case ZERO_EXTEND:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case SIGN_EXTEND:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case LTGT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case UNLT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case UNLE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case UNGT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case UNGE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case UNEQ:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case ORDERED:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case UNORDERED:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case LTU:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case LEU:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case GTU:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case GEU:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case LT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case LE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case GT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case GE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case EQ:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case NE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case POST_MODIFY:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case PRE_MODIFY:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case POST_INC:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case POST_DEC:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case PRE_INC:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case PRE_DEC:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case UMAX:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case UMIN:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case SMAX:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case SMIN:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case ROTATERT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case LSHIFTRT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case ASHIFTRT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case ROTATE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case ASHIFT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case NOT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case XOR:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case IOR:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case AND:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case UMOD:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case UDIV:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case MOD:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case DIV:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case MULT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case NEG:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case MINUS:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case PLUS:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case COMPARE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case COND:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtvec1), cookie);
      break;
    case IF_THEN_ELSE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case QUEUED:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[4].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[3].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case CC0:
      break;
    case SYMBOL_REF:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rttree), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case LABEL_REF:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case MEM:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtmem), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case CONCAT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case STRICT_LOW_PART:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case SUBREG:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case SCRATCH:
      break;
    case REG:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtreg), cookie);
      break;
    case VALUE:
      break;
    case PC:
      break;
    case CONST:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case CONST_STRING:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case CONST_VECTOR:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtvec1), cookie);
      break;
    case CONST_DOUBLE:
      break;
    case CONST_INT:
      break;
    case RESX:
      break;
    case TRAP_IF:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case RETURN:
      break;
    case CALL:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case CLOBBER:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case USE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case SET:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case PREFETCH:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case ADDR_DIFF_VEC:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[3].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case ADDR_VEC:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtvec1), cookie);
      break;
    case UNSPEC_VOLATILE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtvec1), cookie);
      break;
    case UNSPEC:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtvec1), cookie);
      break;
    case ASM_OPERANDS:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[5].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[4].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[3].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case ASM_INPUT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case PARALLEL:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtvec1), cookie);
      break;
    case COND_EXEC:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case NOTE:
      switch ((((&(*x))->u.fld[5]).rtint))
        {
        default:
          if ((void *)(x) == this_obj)
            op (&((*x).u.fld[4].rtstr), cookie);
          break;
        case -79:
          if ((void *)(x) == this_obj)
            op (&((*x).u.fld[4].rtx1), cookie);
          break;
        case -80:
          break;
        case -81:
          break;
        case -82:
          if ((void *)(x) == this_obj)
            op (&((*x).u.fld[4].rtx1), cookie);
          break;
        case -83:
          break;
        case -84:
          break;
        case -85:
          break;
        case -86:
          break;
        case -87:
          break;
        case -88:
          break;
        case -89:
          break;
        case -90:
          break;
        case -91:
          break;
        case -92:
          break;
        case -93:
          break;
        case -94:
          break;
        case -95:
          break;
        case -96:
          break;
        case -97:
          if ((void *)(x) == this_obj)
            op (&((*x).u.fld[4].rttree), cookie);
          break;
        case -98:
          if ((void *)(x) == this_obj)
            op (&((*x).u.fld[4].rttree), cookie);
          break;
        case -99:
          break;
        case -100:
          break;
        }
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      break;
    case CODE_LABEL:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[7].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[5].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      break;
    case BARRIER:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      break;
    case CALL_INSN:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[9].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[8].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[7].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[5].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      break;
    case JUMP_INSN:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[9].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[8].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[7].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[5].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      break;
    case INSN:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[8].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[7].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[5].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      break;
    case ATTR_FLAG:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case EQ_ATTR_ALT:
      break;
    case EQ_ATTR:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case SET_ATTR_ALTERNATIVE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case SET_ATTR:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case ATTR:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case DEFINE_ATTR:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case DEFINE_INSN_RESERVATION:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[3].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case DEFINE_RESERVATION:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case AUTOMATA_OPTION:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case DEFINE_AUTOMATON:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case DEFINE_BYPASS:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[3].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      break;
    case FINAL_ABSENCE_SET:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case ABSENCE_SET:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case FINAL_PRESENCE_SET:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case PRESENCE_SET:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case EXCLUSION_SET:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case DEFINE_QUERY_CPU_UNIT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case DEFINE_CPU_UNIT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case ADDRESS:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case SEQUENCE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtvec1), cookie);
      break;
    case DEFINE_COND_EXEC:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtvec1), cookie);
      break;
    case DEFINE_ASM_ATTRIBUTES:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtvec1), cookie);
      break;
    case DEFINE_FUNCTION_UNIT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[6].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[3].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case DEFINE_DELAY:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case DEFINE_EXPAND:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[3].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case DEFINE_PEEPHOLE2:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[3].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtvec1), cookie);
      break;
    case DEFINE_INSN_AND_SPLIT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[7].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[6].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[5].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[4].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[3].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case DEFINE_SPLIT:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[3].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtvec1), cookie);
      break;
    case DEFINE_PEEPHOLE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[3].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtvec1), cookie);
      break;
    case DEFINE_INSN:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[4].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[3].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case MATCH_PAR_DUP:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtvec1), cookie);
      break;
    case MATCH_OP_DUP:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtvec1), cookie);
      break;
    case MATCH_PARALLEL:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      break;
    case MATCH_OPERATOR:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtvec1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      break;
    case MATCH_DUP:
      break;
    case MATCH_SCRATCH:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      break;
    case MATCH_OPERAND:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[2].rtstr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtstr), cookie);
      break;
    case INSN_LIST:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case EXPR_LIST:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[1].rtx1), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtx1), cookie);
      break;
    case INCLUDE:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fld[0].rtstr), cookie);
      break;
    case NIL:
      break;
    case UNKNOWN:
      break;
    default:
      break;
    }
}
void
gt_pch_p_10location_s (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct location_s * const x = (struct location_s *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).file), cookie);
}
void
gt_pch_p_II17splay_tree_node_s (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct splay_tree_node_s * const x = (struct splay_tree_node_s *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).left), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).right), cookie);
}
void
gt_pch_p_SP9tree_node17splay_tree_node_s (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct splay_tree_node_s * const x = (struct splay_tree_node_s *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).key), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).value1), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).left), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).right), cookie);
}
void
gt_pch_p_P13alias_var_def15varray_head_tag (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct varray_head_tag * const x = (struct varray_head_tag *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).name), cookie);
  switch ((*x).type)
    {
    case VARRAY_DATA_C:
      break;
    case VARRAY_DATA_UC:
      break;
    case VARRAY_DATA_S:
      break;
    case VARRAY_DATA_US:
      break;
    case VARRAY_DATA_I:
      break;
    case VARRAY_DATA_U:
      break;
    case VARRAY_DATA_L:
      break;
    case VARRAY_DATA_UL:
      break;
    case VARRAY_DATA_HINT:
      break;
    case VARRAY_DATA_UHINT:
      break;
    case VARRAY_DATA_GENERIC:
      {
        size_t i10;
        for (i10 = 0; i10 < (size_t)((*x).num_elements); i10++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.generic[i10]), cookie);
        }
      }
      break;
    case VARRAY_DATA_CPTR:
      {
        size_t i11;
        for (i11 = 0; i11 < (size_t)((*x).num_elements); i11++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.cptr[i11]), cookie);
        }
      }
      break;
    case VARRAY_DATA_RTX:
      {
        size_t i12;
        for (i12 = 0; i12 < (size_t)((*x).num_elements); i12++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.rtx1[i12]), cookie);
        }
      }
      break;
    case VARRAY_DATA_RTVEC:
      {
        size_t i13;
        for (i13 = 0; i13 < (size_t)((*x).num_elements); i13++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.rtvec1[i13]), cookie);
        }
      }
      break;
    case VARRAY_DATA_TREE:
      {
        size_t i14;
        for (i14 = 0; i14 < (size_t)((*x).num_elements); i14++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.tree1[i14]), cookie);
        }
      }
      break;
    case VARRAY_DATA_BITMAP:
      {
        size_t i15;
        for (i15 = 0; i15 < (size_t)((*x).num_elements); i15++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.bitmap1[i15]), cookie);
        }
      }
      break;
    case VARRAY_DATA_CONST_EQUIV:
      {
        size_t i16;
        for (i16 = 0; i16 < (size_t)((*x).num_elements); i16++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.const_equiv[i16].rtx1), cookie);
        }
      }
      break;
    case VARRAY_DATA_TE:
      {
        size_t i17;
        for (i17 = 0; i17 < (size_t)((*x).num_elements); i17++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.te[i17]), cookie);
        }
      }
      break;
    case VARRAY_DATA_EDGE:
      {
        size_t i18;
        for (i18 = 0; i18 < (size_t)((*x).num_elements); i18++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.e[i18]), cookie);
        }
      }
      break;
    default:
      break;
    }
}
void
gt_pch_p_P9tree_node4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
void
gt_pch_p_P9reg_attrs4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
void
gt_pch_p_P9mem_attrs4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
void
gt_pch_p_P7rtx_def4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
void
gt_pch_p_SP9tree_node12splay_tree_s (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct splay_tree_s * const x = (struct splay_tree_s *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).root), cookie);
}
void
gt_pch_p_P19cgraph_varpool_node4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
void
gt_pch_p_P11cgraph_node4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
void
gt_pch_p_II12splay_tree_s (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct splay_tree_s * const x = (struct splay_tree_s *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).root), cookie);
}
const struct ggc_root_tab gt_ggc_r_gtype_desc_c[] = {
  {
    &chrec_known,
    1,
    sizeof (chrec_known),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &chrec_dont_know,
    1,
    sizeof (chrec_dont_know),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &global_var,
    1,
    sizeof (global_var),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &ssa_names,
    1,
    sizeof (ssa_names),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &referenced_vars,
    1,
    sizeof (referenced_vars),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &reg_equiv_memory_loc_varray,
    1,
    sizeof (reg_equiv_memory_loc_varray),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &cgraph_varpool_nodes_queue,
    1,
    sizeof (cgraph_varpool_nodes_queue),
    &gt_ggc_mx_cgraph_varpool_node,
    &gt_pch_nx_cgraph_varpool_node
  },
  {
    &cgraph_nodes_queue,
    1,
    sizeof (cgraph_nodes_queue),
    &gt_ggc_mx_cgraph_node,
    &gt_pch_nx_cgraph_node
  },
  {
    &cgraph_nodes,
    1,
    sizeof (cgraph_nodes),
    &gt_ggc_mx_cgraph_node,
    &gt_pch_nx_cgraph_node
  },
  {
    &EXIT_BLOCK_PTR,
    1,
    sizeof (EXIT_BLOCK_PTR),
    &gt_ggc_mx_basic_block_def,
    &gt_pch_nx_basic_block_def
  },
  {
    &ENTRY_BLOCK_PTR,
    1,
    sizeof (ENTRY_BLOCK_PTR),
    &gt_ggc_mx_basic_block_def,
    &gt_pch_nx_basic_block_def
  },
  {
    &label_value_list,
    1,
    sizeof (label_value_list),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &basic_block_info,
    1,
    sizeof (basic_block_info),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &insn_addresses_,
    1,
    sizeof (insn_addresses_),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &libfunc_table[0],
    1 * (LTI_MAX),
    sizeof (libfunc_table[0]),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &current_file_decl,
    1,
    sizeof (current_file_decl),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &current_function_func_begin_label,
    1,
    sizeof (current_function_func_begin_label),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &current_function_decl,
    1,
    sizeof (current_function_decl),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &sizetype_tab[0],
    1 * ((int) TYPE_KIND_LAST),
    sizeof (sizetype_tab[0]),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &frame_base_decl,
    1,
    sizeof (frame_base_decl),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &integer_types[0],
    1 * (itk_none),
    sizeof (integer_types[0]),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &global_trees[0],
    1 * (TI_MAX),
    sizeof (global_trees[0]),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &implicit_built_in_decls[0],
    1 * ((int) END_BUILTINS),
    sizeof (implicit_built_in_decls[0]),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &built_in_decls[0],
    1 * ((int) END_BUILTINS),
    sizeof (built_in_decls[0]),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &code_to_optab[0],
    1 * (((int) LAST_AND_UNUSED_RTX_CODE) + 1),
    sizeof (code_to_optab[0]),
    &gt_ggc_mx_optab,
    &gt_pch_nx_optab
  },
  {
    &convert_optab_table[0],
    1 * (CONVERT_OPTAB_MAX),
    sizeof (convert_optab_table[0]),
    &gt_ggc_mx_convert_optab,
    &gt_pch_nx_convert_optab
  },
  {
    &optab_table[0],
    1 * (OTI_MAX),
    sizeof (optab_table[0]),
    &gt_ggc_mx_optab,
    &gt_pch_nx_optab
  },
  {
    &stack_limit_rtx,
    1,
    sizeof (stack_limit_rtx),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &return_address_pointer_rtx,
    1,
    sizeof (return_address_pointer_rtx),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &static_chain_incoming_rtx,
    1,
    sizeof (static_chain_incoming_rtx),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &static_chain_rtx,
    1,
    sizeof (static_chain_rtx),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &pic_offset_table_rtx,
    1,
    sizeof (pic_offset_table_rtx),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &global_rtl[0],
    1 * (GR_MAX),
    sizeof (global_rtl[0]),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &const_tiny_rtx[0][0],
    1 * (3) * ((int) MAX_MACHINE_MODE),
    sizeof (const_tiny_rtx[0][0]),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &const_true_rtx,
    1,
    sizeof (const_true_rtx),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &const_int_rtx[0],
    1 * (64 * 2 + 1),
    sizeof (const_int_rtx[0]),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &outer_function_chain,
    1,
    sizeof (outer_function_chain),
    &gt_ggc_mx_function,
    &gt_pch_nx_function
  },
  {
    &cfun,
    1,
    sizeof (cfun),
    &gt_ggc_mx_function,
    &gt_pch_nx_function
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gtype_desc_c[] = {
  { &cgraph_varpool_n_nodes, 1, sizeof (cgraph_varpool_n_nodes), ((void *)0), ((void *)0) },
  { &cgraph_max_uid, 1, sizeof (cgraph_max_uid), ((void *)0), ((void *)0) },
  { &cgraph_n_nodes, 1, sizeof (cgraph_n_nodes), ((void *)0), ((void *)0) },
  { &binfo_lang_slots, 1, sizeof (binfo_lang_slots), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const unsigned char rtx_next[((int) LAST_AND_UNUSED_RTX_CODE)] = {
  0,
  0,
  0,
  __builtin_offsetof (rtx_def, u) + 1 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 1 * sizeof (rtunion),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 3 * sizeof (rtunion),
  0,
  0,
  0,
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  __builtin_offsetof (rtx_def, u) + 2 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 2 * sizeof (rtunion),
  0,
  0,
  0,
  0,
  0,
  0,
  __builtin_offsetof (rtx_def, u) + 2 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 2 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 2 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 2 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 2 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 2 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 1 * sizeof (rtunion),
  0,
  0,
  0,
  0,
  0,
  0,
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 1 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  0,
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  0,
  0,
  0,
  0,
  0,
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  0,
  0,
  0,
  0,
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  0,
  0,
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 1 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  0,
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  0,
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 0 * sizeof (rtunion),
  __builtin_offsetof (rtx_def, u) + 1 * sizeof (rtunion)
};
struct lconv
{
  char *decimal_point;
  char *thousands_sep;
  char *grouping;
  char *int_curr_symbol;
  char *currency_symbol;
  char *mon_decimal_point;
  char *mon_thousands_sep;
  char *mon_grouping;
  char *positive_sign;
  char *negative_sign;
  char int_frac_digits;
  char frac_digits;
  char p_cs_precedes;
  char p_sep_by_space;
  char n_cs_precedes;
  char n_sep_by_space;
  char p_sign_posn;
  char n_sign_posn;
  char int_p_cs_precedes;
  char int_p_sep_by_space;
  char int_n_cs_precedes;
  char int_n_sep_by_space;
  char int_p_sign_posn;
  char int_n_sign_posn;
};
extern char *setlocale (int __category, const char *__locale) ;
extern struct lconv *localeconv (void) ;
extern __locale_t newlocale (int __category_mask, const char *__locale,
        __locale_t __base) ;
extern __locale_t duplocale (__locale_t __dataset) ;
extern void freelocale (__locale_t __dataset) ;
extern __locale_t uselocale (__locale_t __dataset) ;
extern void gcc_init_libintl (void);
extern size_t gcc_gettext_width (const char *);
extern const char *open_quote;
extern const char *close_quote;
extern void decode_options (unsigned int argc, const char **argv);
extern void add_input_filename (const char *filename);
struct cl_option
{
  const char *opt_text;
  const char *help;
  unsigned short back_chain;
  unsigned char opt_len;
  unsigned int flags;
  int *flag_var;
  int has_set_value;
  int set_value;
};
extern const struct cl_option cl_options[];
extern const unsigned int cl_options_count;
extern const char *const lang_names[];
extern const char **in_fnames;
extern unsigned num_in_fnames;
extern unsigned cur_in_fname;
int warn_abi;
int warn_aggregate_return;
int warn_bad_function_cast;
int warn_cast_align;
int warn_cast_qual;
int warn_char_subscripts;
int warn_conversion;
int warn_ctor_dtor_privacy;
int warn_declaration_after_statement;
int warn_deprecated = 1;
int warn_deprecated_decl = 1;
int warn_disabled_optimization;
int warn_div_by_zero = 1;
int warn_ecpp;
int warnings_are_errors;
int flag_fatal_errors;
int warn_float_equal;
int warn_format_extra_args;
int warn_format_nonliteral;
int warn_format_security;
int warn_format_y2k;
int warn_format_zero_length;
int mesg_implicit_function_declaration = -1;
int warn_implicit_int;
int warn_init_self;
int warn_inline;
int warn_invalid_offsetof = 1;
int warn_long_long = 1;
int warn_missing_braces;
int warn_missing_declarations;
int warn_missing_format_attribute;
int warn_missing_noreturn;
int warn_missing_prototypes;
int warn_nested_externs;
int warn_nontemplate_friend = 1;
int warn_nonvdtor;
int warn_nonnull;
int warn_old_style_cast;
int warn_old_style_definition;
int warn_overloaded_virtual;
int warn_packed;
int warn_padded;
int warn_parentheses;
int warn_pmf2ptr = 1;
int warn_pointer_arith;
int warn_protocol = 1;
int warn_redundant_decls;
int warn_reorder;
int warn_selector;
int warn_sequence_point;
int warn_shadow;
int warn_sign_compare = -1;
int warn_sign_promo;
int warn_strict_prototypes;
int warn_switch;
int warn_switch_default;
int warn_switch_enum;
int warn_synth;
int warn_system_headers;
int warn_traditional;
int warn_undeclared_selector;
int warn_uninitialized;
int warn_notreached;
int warn_unused_function;
int warn_unused_label;
int warn_unused_parameter;
int warn_unused_value;
int warn_unused_variable;
int flag_pic;
int flag_pie;
int flag_abi_version = 2;
int align_functions;
int align_jumps;
int align_labels;
int align_loops;
int flag_argument_noalias;
int flag_asynchronous_unwind_tables;
int flag_bounds_check;
int flag_branch_on_count_reg = 1;
int flag_branch_probabilities;
int flag_branch_target_load_optimize;
int flag_branch_target_load_optimize2;
int flag_btr_bb_exclusive;
int flag_caller_saves;
int flag_no_common;
int flag_cprop_registers;
int flag_crossjumping;
int flag_cse_follow_jumps;
int flag_cse_skip_blocks;
int flag_data_sections;
int flag_defer_pop;
int flag_delayed_branch;
int flag_delete_null_pointer_checks;
int flag_eliminate_dwarf2_dups;
int flag_debug_only_used_symbols;
int flag_eliminate_unused_debug_types = 1;
int flag_exceptions;
int flag_expensive_optimizations;
int flag_finite_math_only;
int flag_float_store;
int flag_force_addr;
int flag_force_mem;
int flag_no_function_cse;
int flag_function_sections;
int flag_gcse;
int flag_gcse_after_reload;
int flag_gcse_las = 1;
int flag_gcse_lm = 1;
int flag_gcse_sm = 1;
int flag_guess_branch_prob;
int flag_no_ident;
int flag_if_conversion;
int flag_if_conversion2;
int flag_inhibit_size_directive;
int flag_no_inline = 2;
int flag_inline_functions;
int flag_instrument_function_entry_exit;
int flag_keep_inline_functions;
int flag_keep_static_consts = 1;
int flag_leading_underscore = -1;
int flag_loop_optimize;
int flag_loop_optimize2;
int flag_errno_math = 1;
int mem_report;
int flag_merge_constants = 1;
int flag_modulo_sched;
int flag_move_all_movables;
int flag_move_loop_invariants;
int flag_mudflap;
int flag_mudflap_ignore_reads;
int flag_mudflap_threads;
int flag_new_regalloc;
int flag_non_call_exceptions;
int flag_old_unroll_all_loops;
int flag_old_unroll_loops;
int flag_omit_frame_pointer;
int flag_regmove;
int flag_optimize_sibling_calls;
int flag_pack_struct;
int flag_peel_loops;
int flag_no_peephole;
int flag_peephole2;
int flag_prefetch_loop_arrays;
int profile_flag;
int profile_arc_flag;
int flag_profile_values;
int flag_reduce_all_givs;
int flag_regmove;
int flag_rename_registers;
int flag_reorder_blocks;
int flag_reorder_blocks_and_partition;
int flag_reorder_functions;
int flag_rerun_cse_after_loop;
int flag_rerun_loop_opt;
int flag_rounding_math;
int flag_schedule_interblock = 1;
int flag_schedule_speculative = 1;
int flag_schedule_speculative_load;
int flag_schedule_speculative_load_dangerous;
int flag_sched_stalled_insns;
int flag_sched_stalled_insns_dep = 1;
int flag_sched2_use_superblocks;
int flag_sched2_use_traces;
int flag_schedule_insns;
int flag_schedule_insns_after_reload;
int flag_shared_data;
int flag_signaling_nans;
int flag_single_precision_constant;
int flag_stack_check;
int flag_strength_reduce;
int flag_strict_aliasing;
int flag_syntax_only;
int flag_test_coverage;
int flag_thread_jumps;
int time_report;
int flag_tracer;
int flag_trapping_math;
int flag_trapv;
int flag_tree_based_profiling;
int flag_tree_ccp;
int flag_tree_ch;
int flag_tree_combine_temps;
int flag_tree_copyrename;
int flag_tree_dce;
int flag_tree_dom;
int flag_tree_dse;
int flag_tree_fre;
int flag_tree_loop_optimize = 1;
int flag_tree_live_range_split;
int flag_tree_pre;
int flag_tree_sra;
int flag_tree_ter;
int flag_unit_at_a_time;
int flag_unroll_all_loops;
int flag_unroll_loops;
int flag_unsafe_math_optimizations;
int flag_unswitch_loops;
int flag_unwind_tables;
int flag_verbose_asm;
int flag_value_profile_transformations;
int flag_wrapv;
int flag_zero_initialized_in_bss = 1;
int profile_flag;
int pedantic;
int quiet_flag;
int version_flag;
int inhibit_warnings;
const char * const lang_names[] =
{
  "C",
  "C++",
  "ObjC",
  "ObjC++",
  0
};
const unsigned int cl_options_count = N_OPTS;
const struct cl_option cl_options[] =
{
  { "--help",
    "Display this information",
    N_OPTS, 5, (1 << 29), 0, 0, 0 },
  { "--output-pch=",
    0,
    N_OPTS, 12, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "--param",
    "--param <param>=<value>	Set paramter <param> to value.  See below for a complete list of parameters",
    N_OPTS, 6, (1 << 29) | (1 << 25), 0, 0, 0 },
  { "--target-help",
    0,
    N_OPTS, 12, (1 << 29), 0, 0, 0 },
  { "--version",
    0,
    N_OPTS, 8, (1 << 29), 0, 0, 0 },
  { "-A",
    "-A<question>=<answer>	Assert the <answer> to <question>.  Putting '-' before <question> disables the <answer> to <question>",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-C",
    "Do not discard comments",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-CC",
    "Do not discard comments in macro expansions",
    N_OPTS, 2, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-D",
    "-D<macro>[=<val>]	Define a <macro> with <val> as its value.  If just <macro> is given, <val> is taken to be 1",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-E",
    0,
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 30), 0, 0, 0 },
  { "-F",
    "-F <dir>	Add <dir> to the end of the main framework include path  ",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-G",
    "-G<number>	Put global and static data smaller than <number> bytes into a special section (on some targets)",
    N_OPTS, 1, (1 << 29) | (1 << 24) | (1 << 25) | (1 << 28), 0, 0, 0 },
  { "-H",
    "Print the name of header files as they are used",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-I",
    "-I <dir>	Add <dir> to the end of the main include path",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-M",
    "Generate make dependencies",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-MD",
    "Generate make dependencies and compile",
    N_OPTS, 2, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 25), 0, 0, 0 },
  { "-MF",
    "-MF <file>	Write dependency output to the given file",
    N_OPTS, 2, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-MG",
    "Treat missing header files as generated files",
    N_OPTS, 2, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-MM",
    "Like -M but ignore system header files",
    N_OPTS, 2, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-MMD",
    "Like -MD but ignore system header files",
    N_OPTS, 3, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 25), 0, 0, 0 },
  { "-MP",
    "Generate phony targets for all headers",
    N_OPTS, 2, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-MQ",
    "-MQ <target>	Add a MAKE-quoted target",
    N_OPTS, 2, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-MT",
    "-MT <target>	Add an unquoted target",
    N_OPTS, 2, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-O",
    "-O<number>	Set optimization level to <number>",
    N_OPTS, 1, (1 << 29) | (1 << 24) | (1 << 27), 0, 0, 0 },
  { "-Os",
    "Optimize for space rather than speed",
    OPT_O, 2, (1 << 29), 0, 0, 0 },
  { "-P",
    "Do not generate #line directives",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-U",
    "-U<macro>	Undefine <macro>",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-W",
    "This switch is deprecated; use -Wextra instead",
    N_OPTS, 1, (1 << 29) | (1 << 26), 0, 0, 0 },
  { "-Wabi",
    "Warn about things that will change when compiling with an ABI-compliant compiler",
    N_OPTS, 4, (1 << 1) | (1 << 3), &warn_abi, 0, 0 },
  { "-Waggregate-return",
    "Warn about returning structures, unions or arrays",
    N_OPTS, 17, (1 << 29), &warn_aggregate_return, 0, 0 },
  { "-Wall",
    "Enable most warning messages",
    N_OPTS, 4, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wbad-function-cast",
    "Warn about casting functions to incompatible types",
    N_OPTS, 18, (1 << 0) | (1 << 2), &warn_bad_function_cast, 0, 0 },
  { "-Wcast-align",
    "Warn about pointer casts which increase alignment",
    N_OPTS, 11, (1 << 29), &warn_cast_align, 0, 0 },
  { "-Wcast-qual",
    "Warn about casts which discard qualifiers",
    N_OPTS, 10, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_cast_qual, 0, 0 },
  { "-Wchar-subscripts",
    "Warn about subscripts whose type is \"char\"",
    N_OPTS, 16, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_char_subscripts, 0, 0 },
  { "-Wcomment",
    "Warn about possibly nested block comments, and C++ comments spanning more than one physical line",
    N_OPTS, 8, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wcomments",
    "Synonym for -Wcomment",
    N_OPTS, 9, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wconversion",
    "Warn about possibly confusing type conversions",
    N_OPTS, 11, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_conversion, 0, 0 },
  { "-Wctor-dtor-privacy",
    "Warn when all constructors and destructors are private",
    N_OPTS, 18, (1 << 1) | (1 << 3), &warn_ctor_dtor_privacy, 0, 0 },
  { "-Wdeclaration-after-statement",
    "Warn when a declaration is found after a statement",
    N_OPTS, 28, (1 << 0) | (1 << 2), &warn_declaration_after_statement, 0, 0 },
  { "-Wdeprecated",
    "Warn about deprecated compiler features",
    N_OPTS, 11, (1 << 1) | (1 << 3), &warn_deprecated, 0, 0 },
  { "-Wdeprecated-declarations",
    "Warn about uses of __attribute__((deprecated)) declarations",
    N_OPTS, 24, (1 << 29), &warn_deprecated_decl, 0, 0 },
  { "-Wdisabled-optimization",
    "Warn when an optimization pass is disabled",
    N_OPTS, 22, (1 << 29), &warn_disabled_optimization, 0, 0 },
  { "-Wdiv-by-zero",
    "Warn about compile-time integer division by zero",
    N_OPTS, 12, (1 << 0) | (1 << 2), &warn_div_by_zero, 0, 0 },
  { "-Weffc++",
    "Warn about violations of Effective C++ style rules",
    N_OPTS, 7, (1 << 1) | (1 << 3), &warn_ecpp, 0, 0 },
  { "-Wendif-labels",
    "Warn about stray tokens after #elif and #endif",
    N_OPTS, 13, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Werror",
    "Treat all warnings as errors",
    N_OPTS, 6, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 29), &warnings_are_errors, 0, 0 },
  { "-Werror-implicit-function-declaration",
    "Make implicit function declarations an error",
    N_OPTS, 36, (1 << 0) | (1 << 2) | (1 << 26), 0, 0, 0 },
  { "-Wextra",
    "Print extra (possibly unwanted) warnings",
    N_OPTS, 6, (1 << 29), 0, 0, 0 },
  { "-Wfatal-errors",
    "Exit on the first error occurred",
    N_OPTS, 13, (1 << 29), &flag_fatal_errors, 0, 0 },
  { "-Wfloat-equal",
    "Warn if testing floating point numbers for equality",
    N_OPTS, 12, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_float_equal, 0, 0 },
  { "-Wformat",
    "Warn about printf/scanf/strftime/strfmon format string anomalies",
    N_OPTS, 7, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wformat-extra-args",
    "Warn if passing too many arguments to a function for its format string",
    N_OPTS, 18, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_format_extra_args, 0, 0 },
  { "-Wformat-nonliteral",
    "Warn about format strings that are not literals",
    N_OPTS, 18, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_format_nonliteral, 0, 0 },
  { "-Wformat-security",
    "Warn about possible security problems with format functions",
    N_OPTS, 16, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_format_security, 0, 0 },
  { "-Wformat-y2k",
    "Warn about strftime formats yielding 2-digit years",
    N_OPTS, 11, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_format_y2k, 0, 0 },
  { "-Wformat-zero-length",
    "Warn about zero-length formats",
    N_OPTS, 19, (1 << 0) | (1 << 2), &warn_format_zero_length, 0, 0 },
  { "-Wformat=",
    0,
    N_OPTS, 8, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24), 0, 0, 0 },
  { "-Wimplicit",
    0,
    N_OPTS, 9, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wimplicit-function-declaration",
    "Warn about implicit function declarations",
    N_OPTS, 30, (1 << 0) | (1 << 2), &mesg_implicit_function_declaration, 0, 0 },
  { "-Wimplicit-int",
    "Warn when a declaration does not specify a type",
    N_OPTS, 13, (1 << 0) | (1 << 2), &warn_implicit_int, 0, 0 },
  { "-Wimport",
    "Deprecated.  This switch has no effect.",
    N_OPTS, 7, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Winit-self",
    "Warn about variables which are initialized to themselves.",
    N_OPTS, 10, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_init_self, 0, 0 },
  { "-Winline",
    "Warn when an inlined function cannot be inlined",
    N_OPTS, 7, (1 << 29), &warn_inline, 0, 0 },
  { "-Winvalid-offsetof",
    "Warn about invalid uses of the \"offsetof\" macro",
    N_OPTS, 17, (1 << 1) | (1 << 3), &warn_invalid_offsetof, 0, 0 },
  { "-Winvalid-pch",
    "Warn about PCH files that are found but not used",
    N_OPTS, 12, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wlarger-than-",
    "-Wlarger-than-<number>	Warn if an object is larger than <number> bytes",
    N_OPTS, 13, (1 << 29) | (1 << 24) | (1 << 26) | (1 << 28), 0, 0, 0 },
  { "-Wlong-long",
    "Do not warn about using \"long long\" when -pedantic",
    N_OPTS, 10, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_long_long, 0, 0 },
  { "-Wmain",
    "Warn about suspicious declarations of \"main\"",
    N_OPTS, 5, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-Wmissing-braces",
    "Warn about possibly missing braces around initializers",
    N_OPTS, 15, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_missing_braces, 0, 0 },
  { "-Wmissing-declarations",
    "Warn about global functions without previous declarations",
    N_OPTS, 21, (1 << 0) | (1 << 2), &warn_missing_declarations, 0, 0 },
  { "-Wmissing-format-attribute",
    "Warn about functions which might be candidates for format attributes",
    N_OPTS, 25, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_missing_format_attribute, 0, 0 },
  { "-Wmissing-include-dirs",
    "Warn about user-specified include directories that do not exist",
    N_OPTS, 21, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wmissing-noreturn",
    "Warn about functions which might be candidates for __attribute__((noreturn))",
    N_OPTS, 17, (1 << 29), &warn_missing_noreturn, 0, 0 },
  { "-Wmissing-prototypes",
    "Warn about global functions without prototypes",
    N_OPTS, 19, (1 << 0) | (1 << 2), &warn_missing_prototypes, 0, 0 },
  { "-Wmultichar",
    "Warn about use of multi-character character constants",
    N_OPTS, 10, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wnested-externs",
    "Warn about \"extern\" declarations not at file scope",
    N_OPTS, 15, (1 << 0) | (1 << 2), &warn_nested_externs, 0, 0 },
  { "-Wnon-template-friend",
    "Warn when non-templatized friend functions are declared within a template",
    N_OPTS, 20, (1 << 1) | (1 << 3), &warn_nontemplate_friend, 0, 0 },
  { "-Wnon-virtual-dtor",
    "Warn about non-virtual destructors",
    N_OPTS, 17, (1 << 1) | (1 << 3), &warn_nonvdtor, 0, 0 },
  { "-Wnonnull",
    "Warn about NULL being passed to argument slots marked as requiring non-NULL",
    N_OPTS, 8, (1 << 0) | (1 << 2), &warn_nonnull, 0, 0 },
  { "-Wold-style-cast",
    "Warn if a C-style cast is used in a program",
    N_OPTS, 15, (1 << 1) | (1 << 3), &warn_old_style_cast, 0, 0 },
  { "-Wold-style-definition",
    "Warn if an old-style parameter definition is used",
    N_OPTS, 21, (1 << 0) | (1 << 2), &warn_old_style_definition, 0, 0 },
  { "-Woverloaded-virtual",
    "Warn about overloaded virtual function names",
    N_OPTS, 19, (1 << 1) | (1 << 3), &warn_overloaded_virtual, 0, 0 },
  { "-Wpacked",
    "Warn when the packed attribute has no effect on struct layout",
    N_OPTS, 7, (1 << 29), &warn_packed, 0, 0 },
  { "-Wpadded",
    "Warn when padding is required to align structure members",
    N_OPTS, 7, (1 << 29), &warn_padded, 0, 0 },
  { "-Wparentheses",
    "Warn about possibly missing parentheses",
    N_OPTS, 12, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_parentheses, 0, 0 },
  { "-Wpmf-conversions",
    "Warn when converting the type of pointers to member functions",
    N_OPTS, 16, (1 << 1) | (1 << 3), &warn_pmf2ptr, 0, 0 },
  { "-Wpointer-arith",
    "Warn about function pointer arithmetic",
    N_OPTS, 14, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_pointer_arith, 0, 0 },
  { "-Wprotocol",
    "Warn if inherited methods are unimplemented",
    N_OPTS, 9, (1 << 2) | (1 << 3), &warn_protocol, 0, 0 },
  { "-Wredundant-decls",
    "Warn about multiple declarations of the same object",
    N_OPTS, 16, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_redundant_decls, 0, 0 },
  { "-Wreorder",
    "Warn when the compiler reorders code",
    N_OPTS, 8, (1 << 1) | (1 << 3), &warn_reorder, 0, 0 },
  { "-Wreturn-type",
    "Warn whenever a function's return type defaults to \"int\" (C), or about inconsistent return types (C++)",
    N_OPTS, 12, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wselector",
    "Warn if a selector has multiple methods",
    N_OPTS, 9, (1 << 2) | (1 << 3), &warn_selector, 0, 0 },
  { "-Wsequence-point",
    "Warn about possible violations of sequence point rules",
    N_OPTS, 15, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_sequence_point, 0, 0 },
  { "-Wshadow",
    "Warn when one local variable shadows another",
    N_OPTS, 7, (1 << 29), &warn_shadow, 0, 0 },
  { "-Wsign-compare",
    "Warn about signed-unsigned comparisons",
    N_OPTS, 13, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), &warn_sign_compare, 0, 0 },
  { "-Wsign-promo",
    "Warn when overload promotes from unsigned to signed",
    N_OPTS, 11, (1 << 1) | (1 << 3), &warn_sign_promo, 0, 0 },
  { "-Wstrict-aliasing",
    "Warn about code which might break strict aliasing rules",
    N_OPTS, 16, (1 << 29), 0, 0, 0 },
  { "-Wstrict-aliasing=",
    "Warn about code which might break strict aliasing rules",
    N_OPTS, 17, (1 << 29) | (1 << 24) | (1 << 28), 0, 0, 0 },
  { "-Wstrict-prototypes",
    "Warn about unprototyped function declarations",
    N_OPTS, 18, (1 << 0) | (1 << 2), &warn_strict_prototypes, 0, 0 },
  { "-Wswitch",
    "Warn about enumerated switches, with no default, missing a case",
    N_OPTS, 7, (1 << 29), &warn_switch, 0, 0 },
  { "-Wswitch-default",
    "Warn about enumerated switches missing a \"default:\" statement",
    N_OPTS, 15, (1 << 29), &warn_switch_default, 0, 0 },
  { "-Wswitch-enum",
    "Warn about all enumerated switches missing a specific case",
    N_OPTS, 12, (1 << 29), &warn_switch_enum, 0, 0 },
  { "-Wsynth",
    "Warn when synthesis behavior differs from Cfront",
    N_OPTS, 6, (1 << 1) | (1 << 3), &warn_synth, 0, 0 },
  { "-Wsystem-headers",
    "Do not suppress warnings from system headers",
    N_OPTS, 15, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 29), &warn_system_headers, 0, 0 },
  { "-Wtraditional",
    "Warn about features not present in traditional C",
    N_OPTS, 12, (1 << 0) | (1 << 2), &warn_traditional, 0, 0 },
  { "-Wtrigraphs",
    "Warn if trigraphs are encountered that might affect the meaning of the program",
    N_OPTS, 10, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wundeclared-selector",
    "Warn about @selector()s without previously declared methods",
    N_OPTS, 20, (1 << 2) | (1 << 3), &warn_undeclared_selector, 0, 0 },
  { "-Wundef",
    "Warn if an undefined macro is used in an #if directive",
    N_OPTS, 6, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wuninitialized",
    "Warn about uninitialized automatic variables",
    N_OPTS, 14, (1 << 29), &warn_uninitialized, 0, 0 },
  { "-Wunknown-pragmas",
    "Warn about unrecognized pragmas",
    N_OPTS, 16, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wunreachable-code",
    "Warn about code that will never be executed",
    N_OPTS, 17, (1 << 29), &warn_notreached, 0, 0 },
  { "-Wunused",
    "Enable all -Wunused- warnings",
    N_OPTS, 7, (1 << 29), 0, 0, 0 },
  { "-Wunused-function",
    "Warn when a function is unused",
    N_OPTS, 16, (1 << 29), &warn_unused_function, 0, 0 },
  { "-Wunused-label",
    "Warn when a label is unused",
    N_OPTS, 13, (1 << 29), &warn_unused_label, 0, 0 },
  { "-Wunused-macros",
    "Warn about macros defined in the main file that are not used",
    N_OPTS, 14, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wunused-parameter",
    "Warn when a function parameter is unused",
    N_OPTS, 17, (1 << 29), &warn_unused_parameter, 0, 0 },
  { "-Wunused-value",
    "Warn when an expression value is unused",
    N_OPTS, 13, (1 << 29), &warn_unused_value, 0, 0 },
  { "-Wunused-variable",
    "Warn when a variable is unused",
    N_OPTS, 16, (1 << 29), &warn_unused_variable, 0, 0 },
  { "-Wvariadic-macros",
    "Do not warn about using variadic macros when -pedantic",
    N_OPTS, 16, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-Wwrite-strings",
    "Give strings the type \"array of char\"",
    N_OPTS, 14, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-ansi",
    "A synonym for -std=c89.  In a future version of GCC it will become synonymous with -std=c99 instead",
    N_OPTS, 4, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-aux-info",
    "-aux-info <file>	Emit declaration information into <file>",
    N_OPTS, 8, (1 << 29) | (1 << 25), 0, 0, 0 },
  { "-aux-info=",
    0,
    N_OPTS, 9, (1 << 29) | (1 << 24), 0, 0, 0 },
  { "-auxbase",
    0,
    N_OPTS, 7, (1 << 29) | (1 << 25), 0, 0, 0 },
  { "-auxbase-strip",
    0,
    N_OPTS, 13, (1 << 29) | (1 << 25), 0, 0, 0 },
  { "-d",
    "-d<letters>	Enable dumps from specific passes of the compiler",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 29) | (1 << 24), 0, 0, 0 },
  { "-dumpbase",
    "-dumpbase <file>	Set the file basename to be used for dumps",
    OPT_d, 8, (1 << 29) | (1 << 25), 0, 0, 0 },
  { "-fPIC",
    0,
    N_OPTS, 4, (1 << 29) | (1 << 23), &flag_pic, 1, 2 },
  { "-fPIE",
    0,
    N_OPTS, 4, (1 << 29) | (1 << 23), &flag_pie, 1, 2 },
  { "-fabi-version=",
    0,
    N_OPTS, 13, (1 << 29) | (1 << 24) | (1 << 28), &flag_abi_version, 0, 0 },
  { "-faccess-control",
    "Enforce class member access control semantics",
    N_OPTS, 15, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-falign-functions",
    "Align the start of functions",
    N_OPTS, 16, (1 << 29) | (1 << 23), &align_functions, 1, 0 },
  { "-falign-functions=",
    0,
    N_OPTS, 17, (1 << 29) | (1 << 24) | (1 << 26) | (1 << 28), 0, 0, 0 },
  { "-falign-jumps",
    "Align labels which are only reached by jumping",
    N_OPTS, 12, (1 << 29) | (1 << 23), &align_jumps, 1, 0 },
  { "-falign-jumps=",
    0,
    N_OPTS, 13, (1 << 29) | (1 << 24) | (1 << 26) | (1 << 28), 0, 0, 0 },
  { "-falign-labels",
    "Align all labels",
    N_OPTS, 13, (1 << 29) | (1 << 23), &align_labels, 1, 0 },
  { "-falign-labels=",
    0,
    N_OPTS, 14, (1 << 29) | (1 << 24) | (1 << 26) | (1 << 28), 0, 0, 0 },
  { "-falign-loops",
    "Align the start of loops",
    N_OPTS, 12, (1 << 29) | (1 << 23), &align_loops, 0, 0 },
  { "-falign-loops=",
    0,
    N_OPTS, 13, (1 << 29) | (1 << 24) | (1 << 26) | (1 << 28), 0, 0, 0 },
  { "-fall-virtual",
    0,
    N_OPTS, 12, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-falt-external-templates",
    "Change when template instances are emitted",
    N_OPTS, 23, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fargument-alias",
    "Specify that arguments may alias each other and globals",
    N_OPTS, 15, (1 << 29) | (1 << 23), &flag_argument_noalias, 1, 0 },
  { "-fargument-noalias",
    "Assume arguments may alias globals but not each other",
    N_OPTS, 17, (1 << 29) | (1 << 23), &flag_argument_noalias, 1, 1 },
  { "-fargument-noalias-global",
    "Assume arguments alias neither each other nor globals",
    N_OPTS, 24, (1 << 29) | (1 << 23), &flag_argument_noalias, 1, 2 },
  { "-fasm",
    "Recognize the \"asm\" keyword",
    N_OPTS, 4, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fasynchronous-unwind-tables",
    "Generate unwind tables that are exact at each instruction boundary",
    N_OPTS, 27, (1 << 29) | (1 << 23), &flag_asynchronous_unwind_tables, 0, 0 },
  { "-fbounds-check",
    "Generate code to check bounds before indexing arrays",
    N_OPTS, 13, (1 << 29) | (1 << 23), &flag_bounds_check, 0, 0 },
  { "-fbranch-count-reg",
    "Replace add, compare, branch with branch on count register",
    N_OPTS, 17, (1 << 29) | (1 << 23), &flag_branch_on_count_reg, 0, 0 },
  { "-fbranch-probabilities",
    "Use profiling information for branch probabilities",
    N_OPTS, 21, (1 << 29) | (1 << 23), &flag_branch_probabilities, 0, 0 },
  { "-fbranch-target-load-optimize",
    "Perform branch target load optimization before prologue / epilogue threading",
    N_OPTS, 28, (1 << 29) | (1 << 23), &flag_branch_target_load_optimize, 0, 0 },
  { "-fbranch-target-load-optimize2",
    "Perform branch target load optimization after prologue / epilogue threading",
    N_OPTS, 29, (1 << 29) | (1 << 23), &flag_branch_target_load_optimize2, 0, 0 },
  { "-fbtr-bb-exclusive",
    "Restrict target load migration not to re-use registers in any basic block",
    N_OPTS, 17, (1 << 29) | (1 << 23), &flag_btr_bb_exclusive, 0, 0 },
  { "-fbuiltin",
    "Recognize built-in functions",
    N_OPTS, 8, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fbuiltin-",
    0,
    N_OPTS, 9, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24), 0, 0, 0 },
  { "-fcall-saved-",
    "-fcall-saved-<register>	Mark <register> as being preserved across functions",
    N_OPTS, 12, (1 << 29) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-fcall-used-",
    "-fcall-used-<register>	Mark <register> as being corrupted by function calls",
    N_OPTS, 11, (1 << 29) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-fcaller-saves",
    "Save registers around function calls",
    N_OPTS, 13, (1 << 29) | (1 << 23), &flag_caller_saves, 0, 0 },
  { "-fcheck-new",
    "Check the return value of new",
    N_OPTS, 10, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fcommon",
    "Do not put uninitialized globals in the common section",
    N_OPTS, 7, (1 << 29) | (1 << 23), &flag_no_common, 1, 0 },
  { "-fcond-mismatch",
    "Allow the arguments of the '?' operator to have different types",
    N_OPTS, 14, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fconserve-space",
    "Reduce the size of object files",
    N_OPTS, 15, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fconst-strings",
    "Make string literals \"const char[]\" not \"char[]\"",
    N_OPTS, 14, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fconstant-string-class=",
    "-fconst-string-class=<name>	Use class <name> for constant strings",
    N_OPTS, 23, (1 << 2) | (1 << 3) | (1 << 24), 0, 0, 0 },
  { "-fcprop-registers",
    "Perform a register copy-propagation optimization pass",
    N_OPTS, 16, (1 << 29) | (1 << 23), &flag_cprop_registers, 0, 0 },
  { "-fcrossjumping",
    "Perform cross-jumping optimization",
    N_OPTS, 13, (1 << 29) | (1 << 23), &flag_crossjumping, 0, 0 },
  { "-fcse-follow-jumps",
    "When running CSE, follow jumps to their targets",
    N_OPTS, 17, (1 << 29) | (1 << 23), &flag_cse_follow_jumps, 0, 0 },
  { "-fcse-skip-blocks",
    "When running CSE, follow conditional jumps",
    N_OPTS, 16, (1 << 29) | (1 << 23), &flag_cse_skip_blocks, 0, 0 },
  { "-fdata-sections",
    "Place data items into their own section",
    N_OPTS, 14, (1 << 29) | (1 << 23), &flag_data_sections, 0, 0 },
  { "-fdefault-inline",
    "Inline member functions by default",
    N_OPTS, 15, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fdefer-pop",
    "Defer popping functions args from stack until later",
    N_OPTS, 10, (1 << 29) | (1 << 23), &flag_defer_pop, 0, 0 },
  { "-fdelayed-branch",
    "Attempt to fill delay slots of branch instructions",
    N_OPTS, 15, (1 << 29) | (1 << 23), &flag_delayed_branch, 0, 0 },
  { "-fdelete-null-pointer-checks",
    "Delete useless null pointer checks",
    N_OPTS, 27, (1 << 29) | (1 << 23), &flag_delete_null_pointer_checks, 0, 0 },
  { "-fdiagnostics-show-location=",
    "-fdiagnostics-show-location=[once|every-line]	How often to emit source location at the beginning of line-wrapped diagnostics",
    N_OPTS, 27, (1 << 29) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-fdollars-in-identifiers",
    "Permit '$' as an identifier character",
    N_OPTS, 23, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fdump-",
    "-fdump-<type>	Dump various compiler internals to a file",
    N_OPTS, 6, (1 << 29) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-fdump-unnumbered",
    "Suppress output of instruction numbers and line number notes in debugging dumps",
    OPT_fdump_, 16, (1 << 29) | (1 << 23), &flag_dump_unnumbered, 0, 0 },
  { "-felide-constructors",
    0,
    N_OPTS, 19, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-feliminate-dwarf2-dups",
    "Perform DWARF2 duplicate elimination",
    N_OPTS, 22, (1 << 29) | (1 << 23), &flag_eliminate_dwarf2_dups, 0, 0 },
  { "-feliminate-unused-debug-symbols",
    "Perform unused type elimination in debug info",
    N_OPTS, 31, (1 << 29) | (1 << 23), &flag_debug_only_used_symbols, 0, 0 },
  { "-feliminate-unused-debug-types",
    "Perform unused type elimination in debug info",
    N_OPTS, 29, (1 << 29) | (1 << 23), &flag_eliminate_unused_debug_types, 0, 0 },
  { "-fenforce-eh-specs",
    "Generate code to check exception specifications",
    N_OPTS, 17, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fenum-int-equiv",
    0,
    N_OPTS, 15, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fexceptions",
    "Enable exception handling",
    N_OPTS, 11, (1 << 29) | (1 << 23), &flag_exceptions, 0, 0 },
  { "-fexec-charset=",
    "-fexec-charset=<cset>	Convert all strings and character constants to character set <cset>",
    N_OPTS, 14, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-fexpensive-optimizations",
    "Perform a number of minor, expensive optimizations",
    N_OPTS, 24, (1 << 29) | (1 << 23), &flag_expensive_optimizations, 0, 0 },
  { "-fexternal-templates",
    0,
    N_OPTS, 19, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-ffast-math",
    0,
    N_OPTS, 10, (1 << 29), 0, 0, 0 },
  { "-ffinite-math-only",
    "Assume no NaNs or infinities are generated",
    N_OPTS, 17, (1 << 29) | (1 << 23), &flag_finite_math_only, 0, 0 },
  { "-ffixed-",
    "-ffixed-<register>	Mark <register> as being unavailable to the compiler",
    N_OPTS, 7, (1 << 29) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-ffixed-form",
    0,
    OPT_ffixed_, 11, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-ffixed-line-length-",
    0,
    OPT_ffixed_, 19, (1 << 0) | (1 << 2) | (1 << 24), 0, 0, 0 },
  { "-ffloat-store",
    "Do not store floats in registers",
    N_OPTS, 12, (1 << 29) | (1 << 23), &flag_float_store, 0, 0 },
  { "-ffor-scope",
    "Scope of for-init-statement variables is local to the loop",
    N_OPTS, 10, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fforce-addr",
    "Copy memory address constants into registers before use",
    N_OPTS, 11, (1 << 29) | (1 << 23), &flag_force_addr, 0, 0 },
  { "-fforce-mem",
    "Copy memory operands into registers before use",
    N_OPTS, 10, (1 << 29) | (1 << 23), &flag_force_mem, 0, 0 },
  { "-ffreestanding",
    "Do not assume that standard C libraries and \"main\" exist",
    N_OPTS, 13, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-ffunction-cse",
    "Allow function addresses to be held in registers",
    N_OPTS, 13, (1 << 29) | (1 << 23), &flag_no_function_cse, 1, 0 },
  { "-ffunction-sections",
    "Place each function into its own section",
    N_OPTS, 18, (1 << 29) | (1 << 23), &flag_function_sections, 0, 0 },
  { "-fgcse",
    "Perform global common subexpression elimination",
    N_OPTS, 5, (1 << 29) | (1 << 23), &flag_gcse, 0, 0 },
  { "-fgcse-after-reload",
    "Perform global common subexpression elimination after register allocation",
    N_OPTS, 18, (1 << 29) | (1 << 23), &flag_gcse_after_reload, 0, 0 },
  { "-fgcse-las",
    "Perform redundant load after store elimination in global common subexpression",
    N_OPTS, 9, (1 << 29) | (1 << 23), &flag_gcse_las, 0, 0 },
  { "-fgcse-lm",
    "Perform enhanced load motion during global common subexpression elimination",
    N_OPTS, 8, (1 << 29) | (1 << 23), &flag_gcse_lm, 0, 0 },
  { "-fgcse-sm",
    "Perform store motion after global common subexpression elimination",
    N_OPTS, 8, (1 << 29) | (1 << 23), &flag_gcse_sm, 0, 0 },
  { "-fgnu-keywords",
    "Recognize GNU-defined keywords",
    N_OPTS, 13, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fgnu-runtime",
    "Generate code for GNU runtime environment",
    N_OPTS, 12, (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fguess-branch-probability",
    "Enable guessing of branch probabilities",
    N_OPTS, 25, (1 << 29) | (1 << 23), &flag_guess_branch_prob, 0, 0 },
  { "-fguiding-decls",
    0,
    N_OPTS, 14, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fhandle-exceptions",
    0,
    N_OPTS, 18, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fhonor-std",
    0,
    N_OPTS, 10, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fhosted",
    "Assume normal C execution environment",
    N_OPTS, 7, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-fhuge-objects",
    "Enable support for huge objects",
    N_OPTS, 13, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fident",
    "Process #ident directives",
    N_OPTS, 6, (1 << 29) | (1 << 23), &flag_no_ident, 1, 0 },
  { "-fif-conversion",
    "Perform conversion of conditional jumps to branchless equivalents",
    N_OPTS, 14, (1 << 29) | (1 << 23), &flag_if_conversion, 0, 0 },
  { "-fif-conversion2",
    "Perform conversion of conditional jumps to conditional execution",
    N_OPTS, 15, (1 << 29) | (1 << 23), &flag_if_conversion2, 0, 0 },
  { "-fimplement-inlines",
    "Export functions even if they can be inlined",
    N_OPTS, 18, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fimplicit-inline-templates",
    "Emit implicit instantiations of inline templates",
    N_OPTS, 26, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fimplicit-templates",
    "Emit implicit instantiations of templates",
    N_OPTS, 19, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-finhibit-size-directive",
    "Do not generate .size directives",
    N_OPTS, 23, (1 << 29) | (1 << 23), &flag_inhibit_size_directive, 0, 0 },
  { "-finline",
    "Pay attention to the \"inline\" keyword",
    N_OPTS, 7, (1 << 29) | (1 << 23), &flag_no_inline, 1, 0 },
  { "-finline-functions",
    "Integrate simple functions into their callers",
    N_OPTS, 17, (1 << 29) | (1 << 23), &flag_inline_functions, 0, 0 },
  { "-finline-limit-",
    0,
    N_OPTS, 14, (1 << 29) | (1 << 24) | (1 << 26) | (1 << 28), 0, 0, 0 },
  { "-finline-limit=",
    "-finline-limit=<number>	Limit the size of inlined functions to <number>",
    N_OPTS, 14, (1 << 29) | (1 << 24) | (1 << 26) | (1 << 28), 0, 0, 0 },
  { "-finput-charset=",
    "-finput-charset=<cset>      Specify the default character set for source files.",
    N_OPTS, 15, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-finstrument-functions",
    "Instrument function entry and exit with profiling calls",
    N_OPTS, 21, (1 << 29) | (1 << 23), &flag_instrument_function_entry_exit, 0, 0 },
  { "-fkeep-inline-functions",
    "Generate code for functions even if they are fully inlined",
    N_OPTS, 22, (1 << 29) | (1 << 23), &flag_keep_inline_functions, 0, 0 },
  { "-fkeep-static-consts",
    "Emit static const variables even if they are not used",
    N_OPTS, 19, (1 << 29) | (1 << 23), &flag_keep_static_consts, 0, 0 },
  { "-flabels-ok",
    0,
    N_OPTS, 10, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fleading-underscore",
    "Give external symbols a leading underscore",
    N_OPTS, 19, (1 << 29) | (1 << 23), &flag_leading_underscore, 0, 0 },
  { "-floop-optimize",
    "Perform loop optimizations",
    N_OPTS, 14, (1 << 29) | (1 << 23), &flag_loop_optimize, 0, 0 },
  { "-floop-optimize2",
    "Perform loop optimizations using the new loop optimizer",
    N_OPTS, 15, (1 << 29) | (1 << 23), &flag_loop_optimize2, 0, 0 },
  { "-fmath-errno",
    "Set errno after built-in math functions",
    N_OPTS, 11, (1 << 29) | (1 << 23), &flag_errno_math, 0, 0 },
  { "-fmem-report",
    "Report on permanent memory allocation",
    N_OPTS, 11, (1 << 29) | (1 << 23), &mem_report, 0, 0 },
  { "-fmerge-all-constants",
    "Attempt to merge identical constants and constant variables",
    N_OPTS, 20, (1 << 29) | (1 << 23), &flag_merge_constants, 1, 2 },
  { "-fmerge-constants",
    "Attempt to merge identical constants across compilation units",
    N_OPTS, 16, (1 << 29) | (1 << 23), &flag_merge_constants, 1, 1 },
  { "-fmessage-length=",
    "-fmessage-length=<number>	Limit diagnostics to <number> characters per line.  0 suppresses line-wrapping",
    N_OPTS, 16, (1 << 29) | (1 << 24) | (1 << 26) | (1 << 28), 0, 0, 0 },
  { "-fmodulo-sched",
    "Perform SMS based modulo scheduling before the first scheduling pass",
    N_OPTS, 13, (1 << 29) | (1 << 23), &flag_modulo_sched, 0, 0 },
  { "-fmove-all-movables",
    "Force all loop invariant computations out of loops",
    N_OPTS, 18, (1 << 29) | (1 << 23), &flag_move_all_movables, 0, 0 },
  { "-fmove-loop-invariants",
    "Move loop invariant computations out of loops",
    N_OPTS, 21, (1 << 29) | (1 << 23), &flag_move_loop_invariants, 0, 0 },
  { "-fms-extensions",
    "Don't warn about uses of Microsoft extensions",
    N_OPTS, 14, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fmudflap",
    "Add mudflap bounds-checking instrumentation for single-threaded program.",
    N_OPTS, 8, (1 << 29) | (1 << 26) | (1 << 23), &flag_mudflap, 0, 0 },
  { "-fmudflapir",
    "Ignore read operations when inserting mudflap instrumentation.",
    N_OPTS, 10, (1 << 29) | (1 << 26) | (1 << 23), &flag_mudflap_ignore_reads, 0, 0 },
  { "-fmudflapth",
    "Add mudflap bounds-checking instrumentation for multi-threaded program.",
    N_OPTS, 10, (1 << 29) | (1 << 26) | (1 << 23), &flag_mudflap_threads, 0, 0 },
  { "-fname-mangling-version-",
    0,
    N_OPTS, 23, (1 << 1) | (1 << 3) | (1 << 24), 0, 0, 0 },
  { "-fnew-abi",
    0,
    N_OPTS, 8, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fnew-ra",
    "Use graph-coloring register allocation",
    N_OPTS, 7, (1 << 29) | (1 << 23), &flag_new_regalloc, 0, 0 },
  { "-fnext-runtime",
    "Generate code for NeXT (Apple Mac OS X) runtime environment",
    N_OPTS, 13, (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fnil-receivers",
    "Assume that receivers of Objective-C messages may be nil",
    N_OPTS, 14, (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fnon-call-exceptions",
    "Support synchronous non-call exceptions",
    N_OPTS, 20, (1 << 29) | (1 << 23), &flag_non_call_exceptions, 0, 0 },
  { "-fnonansi-builtins",
    0,
    N_OPTS, 17, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fnonnull-objects",
    0,
    N_OPTS, 16, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fobjc-exceptions",
    "Enable Objective-C exception and synchronization syntax",
    N_OPTS, 16, (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fobjc-sjlj-exceptions",
    "Enable Objective-C setjmp exception handling runtime",
    N_OPTS, 21, (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fold-unroll-all-loops",
    "Perform loop unrolling for all loops",
    N_OPTS, 21, (1 << 29) | (1 << 23), &flag_old_unroll_all_loops, 0, 0 },
  { "-fold-unroll-loops",
    "Perform loop unrolling when iteration count is known",
    N_OPTS, 17, (1 << 29) | (1 << 23), &flag_old_unroll_loops, 0, 0 },
  { "-fomit-frame-pointer",
    "When possible do not generate stack frames",
    N_OPTS, 19, (1 << 29) | (1 << 23), &flag_omit_frame_pointer, 0, 0 },
  { "-foperator-names",
    "Recognize C++ kewords like \"compl\" and \"xor\"",
    N_OPTS, 15, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-foptimize-register-move",
    "Do the full register move optimization pass",
    N_OPTS, 23, (1 << 29) | (1 << 23), &flag_regmove, 0, 0 },
  { "-foptimize-sibling-calls",
    "Optimize sibling and tail recursive calls",
    N_OPTS, 23, (1 << 29) | (1 << 23), &flag_optimize_sibling_calls, 0, 0 },
  { "-foptional-diags",
    "Enable optional diagnostics",
    N_OPTS, 15, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fpack-struct",
    "Pack structure members together without holes",
    N_OPTS, 12, (1 << 29) | (1 << 23), &flag_pack_struct, 0, 0 },
  { "-fpcc-struct-return",
    "Return small aggregates in memory, not registers",
    N_OPTS, 18, (1 << 29) | (1 << 23), &flag_pcc_struct_return, 1, 1 },
  { "-fpch-deps",
    0,
    N_OPTS, 9, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fpch-preprocess",
    "Look for and use PCH files even when preprocessing",
    N_OPTS, 15, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fpeel-loops",
    "Perform loop peeling",
    N_OPTS, 11, (1 << 29) | (1 << 23), &flag_peel_loops, 0, 0 },
  { "-fpeephole",
    "Enable machine specific peephole optimizations",
    N_OPTS, 9, (1 << 29) | (1 << 23), &flag_no_peephole, 1, 0 },
  { "-fpeephole2",
    "Enable an RTL peephole pass before sched2",
    N_OPTS, 10, (1 << 29) | (1 << 23), &flag_peephole2, 0, 0 },
  { "-fpermissive",
    "Downgrade conformance errors to warnings",
    N_OPTS, 11, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fpic",
    "Generate position-independent code if possible",
    N_OPTS, 4, (1 << 29) | (1 << 23), &flag_pic, 1, 1 },
  { "-fpie",
    "Generate position-independent code for executables if possible",
    N_OPTS, 4, (1 << 29) | (1 << 23), &flag_pie, 1, 1 },
  { "-fprefetch-loop-arrays",
    "Generate prefetch instructions, if available, for arrays in loops",
    N_OPTS, 21, (1 << 29) | (1 << 23), &flag_prefetch_loop_arrays, 0, 0 },
  { "-fpreprocessed",
    "Treat the input file as already preprocessed",
    N_OPTS, 13, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fprofile",
    "Enable basic program profiling code",
    N_OPTS, 8, (1 << 29) | (1 << 23), &profile_flag, 0, 0 },
  { "-fprofile-arcs",
    "Insert arc-based program profiling code",
    N_OPTS, 13, (1 << 29) | (1 << 23), &profile_arc_flag, 0, 0 },
  { "-fprofile-generate",
    "Enable common options for generating profile info for profile feedback directed optimizations",
    N_OPTS, 17, (1 << 29), 0, 0, 0 },
  { "-fprofile-use",
    "Enable common options for performing profile feedback directed optimizations",
    N_OPTS, 12, (1 << 29), 0, 0, 0 },
  { "-fprofile-values",
    "Insert code to profile values of expressions",
    N_OPTS, 15, (1 << 29) | (1 << 23), &flag_profile_values, 0, 0 },
  { "-frandom-seed",
    0,
    N_OPTS, 12, (1 << 29), 0, 0, 0 },
  { "-frandom-seed=",
    "-frandom-seed=<string>	Make compile reproducible using <string>",
    N_OPTS, 13, (1 << 29) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-freduce-all-givs",
    "Strength reduce all loop general induction variables",
    N_OPTS, 16, (1 << 29) | (1 << 23), &flag_reduce_all_givs, 0, 0 },
  { "-freg-struct-return",
    "Return small aggregates in registers",
    N_OPTS, 18, (1 << 29) | (1 << 23), &flag_pcc_struct_return, 1, 0 },
  { "-fregmove",
    "Enables a register move optimization",
    N_OPTS, 8, (1 << 29) | (1 << 23), &flag_regmove, 0, 0 },
  { "-frename-registers",
    "Perform a register renaming optimization pass",
    N_OPTS, 17, (1 << 29) | (1 << 23), &flag_rename_registers, 0, 0 },
  { "-freorder-blocks",
    "Reorder basic blocks to improve code placement",
    N_OPTS, 15, (1 << 29) | (1 << 23), &flag_reorder_blocks, 0, 0 },
  { "-freorder-blocks-and-partition",
    "Reorder basic blocks and partition into hot and cold sections",
    N_OPTS, 29, (1 << 29) | (1 << 23), &flag_reorder_blocks_and_partition, 0, 0 },
  { "-freorder-functions",
    "Reorder functions to improve code placement",
    N_OPTS, 18, (1 << 29) | (1 << 23), &flag_reorder_functions, 0, 0 },
  { "-freplace-objc-classes",
    "Used in Fix-and-Continue mode to indicate that object files may be swapped in at runtime",
    N_OPTS, 21, (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-frepo",
    "Enable automatic template instantiation",
    N_OPTS, 5, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-frerun-cse-after-loop",
    "Add a common subexpression elimination pass after loop optimizations",
    N_OPTS, 21, (1 << 29) | (1 << 23), &flag_rerun_cse_after_loop, 0, 0 },
  { "-frerun-loop-opt",
    "Run the loop optimizer twice",
    N_OPTS, 15, (1 << 29) | (1 << 23), &flag_rerun_loop_opt, 0, 0 },
  { "-frounding-math",
    "Disable optimizations that assume default FP rounding behavior",
    N_OPTS, 14, (1 << 29) | (1 << 23), &flag_rounding_math, 0, 0 },
  { "-frtti",
    "Generate run time type descriptor information",
    N_OPTS, 5, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fsched-interblock",
    "Enable scheduling across basic blocks",
    N_OPTS, 17, (1 << 29) | (1 << 23), &flag_schedule_interblock, 0, 0 },
  { "-fsched-spec",
    "Allow speculative motion of non-loads",
    N_OPTS, 11, (1 << 29) | (1 << 23), &flag_schedule_speculative, 0, 0 },
  { "-fsched-spec-load",
    "Allow speculative motion of some loads",
    N_OPTS, 16, (1 << 29) | (1 << 23), &flag_schedule_speculative_load, 0, 0 },
  { "-fsched-spec-load-dangerous",
    "Allow speculative motion of more loads",
    N_OPTS, 26, (1 << 29) | (1 << 23), &flag_schedule_speculative_load_dangerous, 0, 0 },
  { "-fsched-stalled-insns",
    "Allow premature scheduling of queued insns",
    N_OPTS, 20, (1 << 29) | (1 << 23), &flag_sched_stalled_insns, 0, 0 },
  { "-fsched-stalled-insns-dep",
    "Set dependence distance checking in premature scheduling of queued insns",
    N_OPTS, 24, (1 << 29) | (1 << 23), &flag_sched_stalled_insns_dep, 1, 1 },
  { "-fsched-stalled-insns-dep=",
    "-fsched-stalled-insns-dep=<number>   Set dependence distance checking in premature scheduling of queued insns",
    N_OPTS, 25, (1 << 29) | (1 << 24) | (1 << 26) | (1 << 28), 0, 0, 0 },
  { "-fsched-stalled-insns=",
    "-fsched-stalled-insns=<number>       Set number of queued insns that can be prematurely scheduled",
    N_OPTS, 21, (1 << 29) | (1 << 24) | (1 << 26) | (1 << 28), 0, 0, 0 },
  { "-fsched-verbose=",
    "-fsched-verbose=<number>	Set the verbosity level of the scheduler",
    N_OPTS, 15, (1 << 29) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-fsched2-use-superblocks",
    "If scheduling post reload, do superblock scheduling",
    N_OPTS, 23, (1 << 29) | (1 << 23), &flag_sched2_use_superblocks, 0, 0 },
  { "-fsched2-use-traces",
    "If scheduling post reload, do trace scheduling",
    N_OPTS, 18, (1 << 29) | (1 << 23), &flag_sched2_use_traces, 0, 0 },
  { "-fschedule-insns",
    "Reschedule instructions before register allocation",
    N_OPTS, 15, (1 << 29) | (1 << 23), &flag_schedule_insns, 0, 0 },
  { "-fschedule-insns2",
    "Reschedule instructions after register allocation",
    N_OPTS, 16, (1 << 29) | (1 << 23), &flag_schedule_insns_after_reload, 0, 0 },
  { "-fshared-data",
    "Mark data as shared rather than private",
    N_OPTS, 12, (1 << 29) | (1 << 23), &flag_shared_data, 0, 0 },
  { "-fshort-double",
    "Use the same size for double as for float",
    N_OPTS, 13, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fshort-enums",
    "Use the narrowest integer type possible for enumeration types",
    N_OPTS, 12, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fshort-wchar",
    "Force the underlying type for \"wchar_t\" to be \"unsigned short\"",
    N_OPTS, 12, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fshow-column",
    0,
    N_OPTS, 12, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fsignaling-nans",
    "Disable optimizations observable by IEEE signaling NaNs",
    N_OPTS, 15, (1 << 29) | (1 << 23), &flag_signaling_nans, 0, 0 },
  { "-fsigned-bitfields",
    "When \"signed\" or \"unsigned\" is not given make the bitfield signed",
    N_OPTS, 17, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fsigned-char",
    "Make \"char\" signed by default",
    N_OPTS, 12, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fsingle-precision-constant",
    "Convert floating point constants to single precision constants",
    N_OPTS, 26, (1 << 29) | (1 << 23), &flag_single_precision_constant, 0, 0 },
  { "-fsquangle",
    0,
    N_OPTS, 9, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fstack-check",
    "Insert stack checking code into the program",
    N_OPTS, 12, (1 << 29) | (1 << 23), &flag_stack_check, 0, 0 },
  { "-fstack-limit",
    0,
    N_OPTS, 12, (1 << 29), 0, 0, 0 },
  { "-fstack-limit-register=",
    "-fstack-limit-register=<register>	Trap if the stack goes past <register>",
    N_OPTS, 22, (1 << 29) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-fstack-limit-symbol=",
    "-fstack-limit-symbol=<name>	Trap if the stack goes past symbol <name>",
    N_OPTS, 20, (1 << 29) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-fstats",
    "Display statistics accumulated during compilation",
    N_OPTS, 6, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fstrength-reduce",
    "Perform strength reduction optimizations",
    N_OPTS, 16, (1 << 29) | (1 << 23), &flag_strength_reduce, 0, 0 },
  { "-fstrict-aliasing",
    "Assume strict aliasing rules apply",
    N_OPTS, 16, (1 << 29) | (1 << 23), &flag_strict_aliasing, 0, 0 },
  { "-fstrict-prototype",
    0,
    N_OPTS, 17, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fsyntax-only",
    "Check for syntax errors, then stop",
    N_OPTS, 12, (1 << 29) | (1 << 23), &flag_syntax_only, 0, 0 },
  { "-ftabstop=",
    "-ftabstop=<number>	Distance between tab stops for column reporting",
    N_OPTS, 9, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 26) | (1 << 28), 0, 0, 0 },
  { "-ftemplate-depth-",
    "-ftemplate-depth-<number>	Specify maximum template instantiation depth",
    N_OPTS, 16, (1 << 1) | (1 << 3) | (1 << 24) | (1 << 26) | (1 << 28), 0, 0, 0 },
  { "-ftest-coverage",
    "Create data files needed by \"gcov\"",
    N_OPTS, 14, (1 << 29) | (1 << 23), &flag_test_coverage, 0, 0 },
  { "-fthis-is-variable",
    0,
    N_OPTS, 17, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fthread-jumps",
    "Perform jump threading optimizations",
    N_OPTS, 13, (1 << 29) | (1 << 23), &flag_thread_jumps, 0, 0 },
  { "-ftime-report",
    "Report the time taken by each compiler pass",
    N_OPTS, 12, (1 << 29) | (1 << 23), &time_report, 0, 0 },
  { "-ftls-model=",
    "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]	Set the default thread-local storage code generation model",
    N_OPTS, 11, (1 << 29) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-ftracer",
    "Perform superblock formation via tail duplication",
    N_OPTS, 7, (1 << 29) | (1 << 23), &flag_tracer, 0, 0 },
  { "-ftrapping-math",
    "Assume floating-point operations can trap",
    N_OPTS, 14, (1 << 29) | (1 << 23), &flag_trapping_math, 0, 0 },
  { "-ftrapv",
    "Trap for signed overflow in addition, subtraction and multiplication",
    N_OPTS, 6, (1 << 29) | (1 << 23), &flag_trapv, 0, 0 },
  { "-ftree-based-profiling",
    "Use tree-ssa based implementation of profiling",
    N_OPTS, 21, (1 << 29) | (1 << 23), &flag_tree_based_profiling, 0, 0 },
  { "-ftree-ccp",
    "Enable SSA-CCP optimization on trees",
    N_OPTS, 9, (1 << 29) | (1 << 23), &flag_tree_ccp, 0, 0 },
  { "-ftree-ch",
    "Enable loop header copying on trees",
    N_OPTS, 8, (1 << 29) | (1 << 23), &flag_tree_ch, 0, 0 },
  { "-ftree-combine-temps",
    "Coalesce memory temporaries in the SSA->normal pass",
    N_OPTS, 19, (1 << 29) | (1 << 23), &flag_tree_combine_temps, 0, 0 },
  { "-ftree-copyrename",
    "Replace SSA temporaries with better names in copies.",
    N_OPTS, 16, (1 << 29) | (1 << 23), &flag_tree_copyrename, 0, 0 },
  { "-ftree-dce",
    "Enable SSA dead code elimination optimization on trees",
    N_OPTS, 9, (1 << 29) | (1 << 23), &flag_tree_dce, 0, 0 },
  { "-ftree-dominator-opts",
    "Enable dominator optimizations",
    N_OPTS, 20, (1 << 29) | (1 << 23), &flag_tree_dom, 0, 0 },
  { "-ftree-dse",
    "Enable dead store elimination",
    N_OPTS, 9, (1 << 29) | (1 << 23), &flag_tree_dse, 0, 0 },
  { "-ftree-fre",
    "Enable Full Redundancy Elimination (FRE) on trees",
    N_OPTS, 9, (1 << 29) | (1 << 23), &flag_tree_fre, 0, 0 },
  { "-ftree-loop-optimize",
    "Enable loop optimizations on tree level",
    N_OPTS, 19, (1 << 29) | (1 << 23), &flag_tree_loop_optimize, 0, 0 },
  { "-ftree-lrs",
    "Perform live range splitting during the SSA->normal pass.",
    N_OPTS, 9, (1 << 29) | (1 << 23), &flag_tree_live_range_split, 0, 0 },
  { "-ftree-points-to=",
    0,
    N_OPTS, 16, (1 << 29) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-ftree-pre",
    "Enable SSA-PRE optimization on trees",
    N_OPTS, 9, (1 << 29) | (1 << 23), &flag_tree_pre, 0, 0 },
  { "-ftree-sra",
    "Perform scalar replacement of aggregates",
    N_OPTS, 9, (1 << 29) | (1 << 23), &flag_tree_sra, 0, 0 },
  { "-ftree-ter",
    "Replace temporary expressions in the SSA->normal pass",
    N_OPTS, 9, (1 << 29) | (1 << 23), &flag_tree_ter, 0, 0 },
  { "-funit-at-a-time",
    "Compile whole compilation unit at a time",
    N_OPTS, 15, (1 << 29) | (1 << 23), &flag_unit_at_a_time, 0, 0 },
  { "-funroll-all-loops",
    "Perform loop unrolling for all loops",
    N_OPTS, 17, (1 << 29) | (1 << 23), &flag_unroll_all_loops, 0, 0 },
  { "-funroll-loops",
    "Perform loop unrolling when iteration count is known",
    N_OPTS, 13, (1 << 29) | (1 << 23), &flag_unroll_loops, 0, 0 },
  { "-funsafe-math-optimizations",
    "Allow math optimizations that may violate IEEE or ISO standards",
    N_OPTS, 26, (1 << 29) | (1 << 23), &flag_unsafe_math_optimizations, 0, 0 },
  { "-funsigned-bitfields",
    "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned",
    N_OPTS, 19, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-funsigned-char",
    "Make \"char\" unsigned by default",
    N_OPTS, 14, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-funswitch-loops",
    "Perform loop unswitching",
    N_OPTS, 15, (1 << 29) | (1 << 23), &flag_unswitch_loops, 0, 0 },
  { "-funwind-tables",
    "Just generate unwind tables for exception handling",
    N_OPTS, 14, (1 << 29) | (1 << 23), &flag_unwind_tables, 0, 0 },
  { "-fuse-cxa-atexit",
    "Use __cxa_atexit to register destructors",
    N_OPTS, 15, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fvar-tracking",
    "Perform variable tracking",
    N_OPTS, 13, (1 << 29) | (1 << 23), &flag_var_tracking, 0, 0 },
  { "-fverbose-asm",
    "Add extra commentary to assembler output",
    N_OPTS, 12, (1 << 29) | (1 << 23), &flag_verbose_asm, 0, 0 },
  { "-fvpt",
    "Use expression value profiles in optimizations",
    N_OPTS, 4, (1 << 29) | (1 << 23), &flag_value_profile_transformations, 0, 0 },
  { "-fvtable-gc",
    "Discard unused virtual functions",
    N_OPTS, 10, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fvtable-thunks",
    "Implement vtables using thunks",
    N_OPTS, 14, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fweak",
    "Emit common-like symbols as weak symbols",
    N_OPTS, 5, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fweb",
    "Construct webs and split unrelated uses of single variable",
    N_OPTS, 4, (1 << 29) | (1 << 23), &flag_web, 0, 0 },
  { "-fwide-exec-charset=",
    "-fwide-exec-charset=<cset>	Convert all wide strings and character constants to character set <cset>",
    N_OPTS, 19, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 26), 0, 0, 0 },
  { "-fworking-directory",
    "Generate a #line directive pointing at the current working directory",
    N_OPTS, 18, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-fwrapv",
    "Assume signed arithmetic overflow wraps around",
    N_OPTS, 6, (1 << 29) | (1 << 23), &flag_wrapv, 0, 0 },
  { "-fxref",
    "Emit cross referencing information",
    N_OPTS, 5, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-fzero-initialized-in-bss",
    "Put zero initialized data in the bss section",
    N_OPTS, 24, (1 << 29) | (1 << 23), &flag_zero_initialized_in_bss, 0, 0 },
  { "-fzero-link",
    "Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode",
    N_OPTS, 10, (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-g",
    "Generate debug information in default format",
    N_OPTS, 1, (1 << 29) | (1 << 24) | (1 << 27), 0, 0, 0 },
  { "-gcoff",
    "Generate debug information in COFF format",
    OPT_g, 5, (1 << 29) | (1 << 24) | (1 << 27), 0, 0, 0 },
  { "-gdwarf-2",
    "Generate debug information in DWARF v2 format",
    OPT_g, 8, (1 << 29) | (1 << 24) | (1 << 27), 0, 0, 0 },
  { "-gen-decls",
    "Dump declarations to a .decl file",
    OPT_g, 9, (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-ggdb",
    "Generate debug information in default extended format",
    OPT_g, 4, (1 << 29) | (1 << 24) | (1 << 27), 0, 0, 0 },
  { "-gstabs",
    "Generate debug information in STABS format",
    OPT_g, 6, (1 << 29) | (1 << 24) | (1 << 27), 0, 0, 0 },
  { "-gstabs+",
    "Generate debug information in extended STABS format",
    OPT_gstabs, 7, (1 << 29) | (1 << 24) | (1 << 27), 0, 0, 0 },
  { "-gvms",
    "Generate debug information in VMS format",
    OPT_g, 4, (1 << 29) | (1 << 24) | (1 << 27), 0, 0, 0 },
  { "-gxcoff",
    "Generate debug information in XCOFF format",
    OPT_g, 6, (1 << 29) | (1 << 24) | (1 << 27), 0, 0, 0 },
  { "-gxcoff+",
    "Generate debug information in extended XCOFF format",
    OPT_gxcoff, 7, (1 << 29) | (1 << 24) | (1 << 27), 0, 0, 0 },
  { "-idirafter",
    "-idirafter <dir>	Add <dir> to the end of the system include path",
    N_OPTS, 9, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-imacros",
    "-imacros <file>	Accept definition of macros in <file>",
    N_OPTS, 7, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-include",
    "-include <file>	Include the contents of <file> before other files",
    N_OPTS, 7, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-iprefix",
    "-iprefix <path>	Specify <path> as a prefix for next two options",
    N_OPTS, 7, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-iquote",
    "-iquote <dir>	Add <dir> to the end of the quote include path",
    N_OPTS, 6, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-isysroot",
    "-isysroot <dir>	Set <dir> to be the system root directory",
    N_OPTS, 8, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-isystem",
    "-isystem <dir>	Add <dir> to the start of the system include path",
    N_OPTS, 7, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-iwithprefix",
    "-iwithprefix <dir>	Add <dir> to the end of the system include path",
    N_OPTS, 11, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-iwithprefixbefore",
    "-iwithprefixbefore <dir>	Add <dir> to the end of the main include path",
    OPT_iwithprefix, 17, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-lang-asm",
    0,
    N_OPTS, 8, (1 << 0) | (1 << 30), 0, 0, 0 },
  { "-lang-objc",
    0,
    N_OPTS, 9, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 30), 0, 0, 0 },
  { "-m",
    0,
    N_OPTS, 1, (1 << 29) | (1 << 24), 0, 0, 0 },
  { "-nostdinc",
    "Do not search standard system include directories (those specified with -isystem will still be used)",
    N_OPTS, 8, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-nostdinc++",
    "Do not search standard system include directories for C++",
    N_OPTS, 10, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-o",
    "-o <file>	Place output into <file>",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 29) | (1 << 24) | (1 << 25), 0, 0, 0 },
  { "-p",
    "Enable function profiling",
    N_OPTS, 1, (1 << 29), &profile_flag, 0, 0 },
  { "-pedantic",
    "Issue warnings needed for strict compliance to the standard",
    N_OPTS, 8, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 29), &pedantic, 0, 0 },
  { "-pedantic-errors",
    "Like -pedantic but issue them as errors",
    N_OPTS, 15, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 29), 0, 0, 0 },
  { "-print-objc-runtime-info",
    "Generate C header of platform-specific features",
    N_OPTS, 23, (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-quiet",
    "Do not display functions compiled or elapsed time",
    N_OPTS, 5, (1 << 29), &quiet_flag, 0, 0 },
  { "-remap",
    "Remap file names when including files",
    N_OPTS, 5, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-std=c++98",
    "Conform to the ISO 1998 C++ standard",
    N_OPTS, 9, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-std=c89",
    "Conform to the ISO 1990 C standard",
    N_OPTS, 7, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-std=c99",
    "Conform to the ISO 1999 C standard",
    N_OPTS, 7, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-std=c9x",
    "Deprecated in favor of -std=c99",
    N_OPTS, 7, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-std=gnu++98",
    "Conform to the ISO 1998 C++ standard with GNU extensions",
    N_OPTS, 11, (1 << 1) | (1 << 3), 0, 0, 0 },
  { "-std=gnu89",
    "Conform to the ISO 1990 C standard with GNU extensions",
    N_OPTS, 9, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-std=gnu99",
    "Conform to the ISO 1999 C standard with GNU extensions",
    N_OPTS, 9, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-std=gnu9x",
    "Deprecated in favor of -std=gnu99",
    N_OPTS, 9, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-std=iso9899:1990",
    "Deprecated in favor of -std=c89",
    N_OPTS, 16, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-std=iso9899:199409",
    "Conform to the ISO 1990 C standard as amended in 1994",
    N_OPTS, 18, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-std=iso9899:1999",
    "Deprecated in favor of -std=c99",
    N_OPTS, 16, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-std=iso9899:199x",
    "Deprecated in favor of -std=c99",
    N_OPTS, 16, (1 << 0) | (1 << 2), 0, 0, 0 },
  { "-traditional-cpp",
    "Enable traditional preprocessing",
    N_OPTS, 15, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-trigraphs",
    "-trigraphs	Support ISO C trigraphs",
    N_OPTS, 9, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-undef",
    "Do not predefine system-specific and GCC-specific macros",
    N_OPTS, 5, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-v",
    "Enable verbose output",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0 },
  { "-version",
    "Display the compiler's version",
    N_OPTS, 7, (1 << 29), &version_flag, 0, 0 },
  { "-w",
    "Suppress warnings",
    N_OPTS, 1, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 29), &inhibit_warnings, 0, 0 }
};
struct alias_set_entry
{
  long alias_set;
  splay_tree children;
  int has_zero_child;
};
typedef struct alias_set_entry *alias_set_entry;
static int rtx_equal_for_memref_p (rtx, rtx);
static rtx find_symbolic_term (rtx);
static int memrefs_conflict_p (int, rtx, int, rtx, long);
static void record_set (rtx, rtx, void *);
static int base_alias_check (rtx, rtx, enum machine_mode,
        enum machine_mode);
static rtx find_base_value (rtx);
static int mems_in_disjoint_alias_sets_p (rtx, rtx);
static int insert_subset_children (splay_tree_node, void*);
static tree find_base_decl (tree);
static alias_set_entry get_alias_set_entry (long);
static rtx fixed_scalar_and_varying_struct_p (rtx, rtx, rtx, rtx,
           int (*) (rtx, int));
static int aliases_everything_p (rtx);
static unsigned char nonoverlapping_component_refs_p (tree, tree);
static tree decl_for_component_ref (tree);
static rtx adjust_offset_for_component_ref (tree, rtx);
static int nonoverlapping_memrefs_p (rtx, rtx);
static int write_dependence_p (rtx, rtx, int, int);
static int nonlocal_mentioned_p_1 (rtx *, void *);
static int nonlocal_mentioned_p (rtx);
static int nonlocal_referenced_p_1 (rtx *, void *);
static int nonlocal_referenced_p (rtx);
static int nonlocal_set_p_1 (rtx *, void *);
static int nonlocal_set_p (rtx);
static void memory_modified_1 (rtx, rtx, void *);
static varray_type reg_base_value;
static rtx *new_reg_base_value;
static varray_type old_reg_base_value;
static rtx static_reg_base_value[53];
static rtx *alias_invariant;
static unsigned int alias_invariant_size;
static rtx *reg_known_value;
static unsigned int reg_known_value_size;
static unsigned char *reg_known_equiv_p;
static unsigned char copying_arguments;
static varray_type alias_sets;
static alias_set_entry
get_alias_set_entry (long alias_set)
{
  return (alias_set_entry)((alias_sets)->data.generic[alias_set]);
}
static int
mems_in_disjoint_alias_sets_p (rtx mem1, rtx mem2)
{
  return ! alias_sets_conflict_p (((((mem1)->u.fld[1]).rtmem) == 0 ? 0 : (((mem1)->u.fld[1]).rtmem)->alias), ((((mem2)->u.fld[1]).rtmem) == 0 ? 0 : (((mem2)->u.fld[1]).rtmem)->alias));
}
static int
insert_subset_children (splay_tree_node node, void *data)
{
  splay_tree_insert ((splay_tree) data, node->key, node->value1);
  return 0;
}
int
alias_sets_conflict_p (long set1, long set2)
{
  alias_set_entry ase;
  if (set1 == 0 || set2 == 0
      || set1 == set2)
    return 1;
  ase = get_alias_set_entry (set1);
  if (ase != 0
      && (ase->has_zero_child
   || splay_tree_lookup (ase->children,
    (splay_tree_key) set2)))
    return 1;
  ase = get_alias_set_entry (set2);
  if (ase != 0
      && (ase->has_zero_child
   || splay_tree_lookup (ase->children,
    (splay_tree_key) set1)))
    return 1;
  return 0;
}
int
alias_sets_might_conflict_p (long set1, long set2)
{
  if (set1 == 0 || set2 == 0 || set1 == set2)
    return 1;
  return 0;
}
int
readonly_fields_p (tree type)
{
  tree field;
  if (((enum tree_code) (type)->common.code) != RECORD_TYPE && ((enum tree_code) (type)->common.code) != UNION_TYPE
      && ((enum tree_code) (type)->common.code) != QUAL_UNION_TYPE)
    return 0;
  for (field = ((type)->type.value1s); field != 0; field = ((field)->common.chain))
    if (((enum tree_code) (field)->common.code) == FIELD_DECL
 && (((field)->common.readonly_flag)
     || readonly_fields_p (((field)->common.type))))
      return 1;
  return 0;
}
int
objects_must_conflict_p (tree t1, tree t2)
{
  long set1, set2;
  if (t1 == 0 && t2 == 0)
    return 0;
  if ((t1 != 0 && readonly_fields_p (t1))
      || (t2 != 0 && readonly_fields_p (t2))
      || (t1 != 0 && lang_hooks.honor_readonly && ((t1)->common.readonly_flag))
      || (t2 != 0 && lang_hooks.honor_readonly && ((t2)->common.readonly_flag)))
    return 0;
  if (t1 == t2
      || (t1 != 0 && ((t1)->common.volatile_flag) && t2 != 0 && ((t2)->common.volatile_flag)))
    return 1;
  set1 = t1 ? get_alias_set (t1) : 0;
  set2 = t2 ? get_alias_set (t2) : 0;
  return set1 == 0 || set2 == 0 || set1 == set2;
}
static tree
find_base_decl (tree t)
{
  tree d0, d1, d2;
  if (t == 0 || t == global_trees[TI_ERROR_MARK] || ! (((enum tree_code) (((t)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((t)->common.type))->common.code) == REFERENCE_TYPE))
    return 0;
  if (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd')
    return t;
  switch (tree_code_type[(int) (((enum tree_code) (t)->common.code))])
    {
    case '1':
      return find_base_decl (((t)->exp.operands[0]));
    case '2':
      d0 = find_base_decl (((t)->exp.operands[0]));
      d1 = find_base_decl (((t)->exp.operands[1]));
      if (d0 == d1)
 return d0;
      else if (d0 == 0)
 return d1;
      else if (d1 == 0)
 return d0;
      else
 return 0;
    case '3':
      d0 = find_base_decl (((t)->exp.operands[0]));
      d1 = find_base_decl (((t)->exp.operands[1]));
      d2 = find_base_decl (((t)->exp.operands[2]));
      if (d1 == 0) d1 = d2;
      if (d0 == 0) d0 = d1;
      if (d1 == 0) d1 = d0;
      if (d2 == 0) d2 = d1;
      return (d0 == d1 && d1 == d2) ? d0 : 0;
    default:
      return 0;
    }
}
int
can_address_p (tree t)
{
  if (! handled_component_p (t))
    return 1;
  else if (((enum tree_code) (t)->common.code) == BIT_FIELD_REF)
    return 0;
  else if (((enum tree_code) (t)->common.code) == COMPONENT_REF
    && ! ((((t)->exp.operands[1]))->decl.non_addressable)
    && get_alias_set (((((t)->exp.operands[0]))->common.type)) != 0
    && can_address_p (((t)->exp.operands[0])))
    return 1;
  else if ((((enum tree_code) (t)->common.code) == ARRAY_REF || ((enum tree_code) (t)->common.code) == ARRAY_RANGE_REF)
    && ! ((((((t)->exp.operands[0]))->common.type))->type.transparent_union_flag)
    && get_alias_set (((((t)->exp.operands[0]))->common.type)) != 0
    && can_address_p (((t)->exp.operands[0])))
    return 1;
  return 0;
}
long
get_alias_set (tree t)
{
  long set;
  if (! flag_strict_aliasing || t == global_trees[TI_ERROR_MARK]
      || (! (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't')
   && (((t)->common.type) == 0 || ((t)->common.type) == global_trees[TI_ERROR_MARK])))
    return 0;
  if (! (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
    {
      tree inner = t;
      while ((((enum tree_code) (t)->common.code) == NOP_EXPR || ((enum tree_code) (t)->common.code) == CONVERT_EXPR || ((enum tree_code) (t)->common.code) == NON_LVALUE_EXPR) && ((t)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((t)->common.type))->type.mode) == ((((((t)->exp.operands[0]))->common.type))->type.mode))) (t) = ((t)->exp.operands[0]);
      set = lang_hooks.get_alias_set (t);
      if (set != -1)
 return set;
      while (handled_component_p (inner))
 {
   inner = ((inner)->exp.operands[0]);
   while ((((enum tree_code) (inner)->common.code) == NOP_EXPR || ((enum tree_code) (inner)->common.code) == CONVERT_EXPR || ((enum tree_code) (inner)->common.code) == NON_LVALUE_EXPR) && ((inner)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((inner)->common.type))->type.mode) == ((((((inner)->exp.operands[0]))->common.type))->type.mode))) (inner) = ((inner)->exp.operands[0]);
 }
      if (((enum tree_code) (inner)->common.code) == INDIRECT_REF)
 {
   tree decl = find_base_decl (((inner)->exp.operands[0]));
   if (decl && (((decl)->decl.pointer_alias_set) != - 1))
     {
       if (((decl)->decl.pointer_alias_set) == -2)
  {
    tree pointed_to_type = ((((decl)->common.type))->common.type);
    long pointed_to_alias_set
      = get_alias_set (pointed_to_type);
    if (pointed_to_alias_set == 0)
      ((decl)->decl.pointer_alias_set) = 0;
    else if ((((enum tree_code) (pointed_to_type)->common.code) == ARRAY_TYPE || ((enum tree_code) (pointed_to_type)->common.code) == RECORD_TYPE || ((enum tree_code) (pointed_to_type)->common.code) == UNION_TYPE || ((enum tree_code) (pointed_to_type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (pointed_to_type)->common.code) == SET_TYPE))
      ((decl)->decl.pointer_alias_set)
        = pointed_to_alias_set;
    else
      {
        ((decl)->decl.pointer_alias_set) = new_alias_set ();
        record_alias_subset (pointed_to_alias_set,
        ((decl)->decl.pointer_alias_set));
      }
  }
       return ((decl)->decl.pointer_alias_set);
     }
   else if (((enum tree_code) (((inner)->common.type))->common.code) == VOID_TYPE
     || (((((((inner)->exp.operands[0]))->common.type))->common.static_flag)
                                              ))
     return 0;
 }
      while (handled_component_p (t) && ! can_address_p (t))
 {
   t = ((t)->exp.operands[0]);
   while ((((enum tree_code) (t)->common.code) == NOP_EXPR || ((enum tree_code) (t)->common.code) == CONVERT_EXPR || ((enum tree_code) (t)->common.code) == NON_LVALUE_EXPR) && ((t)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((t)->common.type))->type.mode) == ((((((t)->exp.operands[0]))->common.type))->type.mode))) (t) = ((t)->exp.operands[0]);
 }
      if (((enum tree_code) (t)->common.code) == VAR_DECL
   && ((t)->decl.rtl != ((void *)0)) && (((enum rtx_code) (((t)->decl.rtl ? (t)->decl.rtl : (make_decl_rtl (t, ((void *)0)), (t)->decl.rtl)))->code) == MEM))
 return ((((((t)->decl.rtl ? (t)->decl.rtl : (make_decl_rtl (t, ((void *)0)), (t)->decl.rtl)))->u.fld[1]).rtmem) == 0 ? 0 : (((((t)->decl.rtl ? (t)->decl.rtl : (make_decl_rtl (t, ((void *)0)), (t)->decl.rtl)))->u.fld[1]).rtmem)->alias);
      t = ((t)->common.type);
    }
  t = ((t)->type.main_variant);
  if (((t)->type.alias_set != -1))
    return ((t)->type.alias_set);
  set = lang_hooks.get_alias_set (t);
  if (set != -1)
    return set;
  else if (((enum tree_code) (t)->common.code) == FUNCTION_TYPE)
    set = 0;
  else if (((enum tree_code) (t)->common.code) == VECTOR_TYPE)
    set = get_alias_set (((t)->common.type));
  else
    set = new_alias_set ();
  ((t)->type.alias_set) = set;
  if ((((enum tree_code) (t)->common.code) == ARRAY_TYPE || ((enum tree_code) (t)->common.code) == RECORD_TYPE || ((enum tree_code) (t)->common.code) == UNION_TYPE || ((enum tree_code) (t)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (t)->common.code) == SET_TYPE) || ((enum tree_code) (t)->common.code) == COMPLEX_TYPE)
    record_component_aliases (t);
  return set;
}
static long last_alias_set;
long
new_alias_set (void)
{
  if (flag_strict_aliasing)
    {
      if (!alias_sets)
 alias_sets = varray_init (10, VARRAY_DATA_GENERIC, "alias sets");
      else
 ((alias_sets) = varray_grow (alias_sets, last_alias_set + 2));
      return ++last_alias_set;
    }
  else
    return 0;
}
void
record_alias_subset (long superset, long subset)
{
  alias_set_entry superset_entry;
  alias_set_entry subset_entry;
  if (superset == subset)
    return;
  if (superset == 0)
    fancy_abort ("gcc.c", 370512, "?");
  superset_entry = get_alias_set_entry (superset);
  if (superset_entry == 0)
    {
      superset_entry = ggc_alloc_stat (sizeof (struct alias_set_entry) );
      superset_entry->alias_set = superset;
      superset_entry->children
 = splay_tree_new_with_allocator (splay_tree_compare_ints, ((void *)0), ((void *)0), &ggc_splay_alloc, &ggc_splay_dont_free, ((void *)0));
      superset_entry->has_zero_child = 0;
      ((alias_sets)->data.generic[superset]) = superset_entry;
    }
  if (subset == 0)
    superset_entry->has_zero_child = 1;
  else
    {
      subset_entry = get_alias_set_entry (subset);
      if (subset_entry)
 {
   if (subset_entry->has_zero_child)
     superset_entry->has_zero_child = 1;
   splay_tree_foreach (subset_entry->children, insert_subset_children,
         superset_entry->children);
 }
      splay_tree_insert (superset_entry->children,
    (splay_tree_key) subset, 0);
    }
}
void
record_component_aliases (tree type)
{
  long superset = get_alias_set (type);
  tree field;
  if (superset == 0)
    return;
  switch (((enum tree_code) (type)->common.code))
    {
    case ARRAY_TYPE:
      if (! ((type)->type.transparent_union_flag))
 record_alias_subset (superset, get_alias_set (((type)->common.type)));
      break;
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      if (((type)->type.binfo) != ((void *)0) && ((((type)->type.binfo))->binfo.base_types) != ((void *)0))
 {
   int i;
   for (i = 0; i < ((((((type)->type.binfo))->binfo.base_types))->vec.length); i++)
     {
       tree binfo = ((((((type)->type.binfo))->binfo.base_types))->vec.a[i]);
       record_alias_subset (superset,
       get_alias_set ((((binfo))->common.type)));
     }
 }
      for (field = ((type)->type.value1s); field != 0; field = ((field)->common.chain))
 if (((enum tree_code) (field)->common.code) == FIELD_DECL && ! ((field)->decl.non_addressable))
   record_alias_subset (superset, get_alias_set (((field)->common.type)));
      break;
    case COMPLEX_TYPE:
      record_alias_subset (superset, get_alias_set (((type)->common.type)));
      break;
    default:
      break;
    }
}
static long varargs_set = -1;
long
get_varargs_alias_set (void)
{
  return 0;
}
static long frame_set = -1;
long
get_frame_alias_set (void)
{
  if (frame_set == -1)
    frame_set = new_alias_set ();
  return frame_set;
}
static rtx
find_base_value (rtx src)
{
  unsigned int regno;
  switch (((enum rtx_code) (src)->code))
    {
    case SYMBOL_REF:
    case LABEL_REF:
      return src;
    case REG:
      regno = (((src)->u.fld[0]).rtuint);
      if (regno < 53 && copying_arguments)
 return new_reg_base_value[regno];
      if ((regno >= 53 || fixed_regs[regno])
   && regno < ((reg_base_value)->num_elements))
 {
   if (new_reg_base_value && new_reg_base_value[regno]
       && (((reg_n_info)->data.reg[regno])->sets) == 1)
     return new_reg_base_value[regno];
   if (((reg_base_value)->data.rtx1[regno]))
     return ((reg_base_value)->data.rtx1[regno]);
 }
      return 0;
    case MEM:
      if (copying_arguments
   && ((((src)->u.fld[0]).rtx1) == (global_rtl[GR_ARG_POINTER])
       || (((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == PLUS
    && ((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (global_rtl[GR_ARG_POINTER]))))
 return gen_rtx_fmt_e (ADDRESS, (VOIDmode), (src));
      return 0;
    case CONST:
      src = (((src)->u.fld[0]).rtx1);
      if (((enum rtx_code) (src)->code) != PLUS && ((enum rtx_code) (src)->code) != MINUS)
 break;
    case PLUS:
    case MINUS:
      {
 rtx temp, src_0 = (((src)->u.fld[0]).rtx1), src_1 = (((src)->u.fld[1]).rtx1);
 if ((((enum rtx_code) (src_0)->code) == REG) && (((src_0))->frame_related))
   return find_base_value (src_0);
 if ((((enum rtx_code) (src_1)->code) == REG) && (((src_1))->frame_related))
   return find_base_value (src_1);
 if ((((enum rtx_code) (src_0)->code) == REG))
   {
     temp = find_base_value (src_0);
     if (temp != 0)
       src_0 = temp;
   }
 if ((((enum rtx_code) (src_1)->code) == REG))
   {
     temp = find_base_value (src_1);
     if (temp!= 0)
       src_1 = temp;
   }
 if (src_0 != 0
     && (((enum rtx_code) (src_0)->code) == SYMBOL_REF
  || ((enum rtx_code) (src_0)->code) == LABEL_REF
  || (((enum rtx_code) (src_0)->code) == ADDRESS
      && ((enum machine_mode) (src_0)->mode) != VOIDmode)))
   return src_0;
 if (src_1 != 0
     && (((enum rtx_code) (src_1)->code) == SYMBOL_REF
  || ((enum rtx_code) (src_1)->code) == LABEL_REF
  || (((enum rtx_code) (src_1)->code) == ADDRESS
      && ((enum machine_mode) (src_1)->mode) != VOIDmode)))
   return src_1;
 if (((enum rtx_code) (src_1)->code) == CONST_INT || ((rtx_class[(int) (((enum rtx_code) (src_0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (src_0)->code) == CONST_VECTOR))
   return find_base_value (src_0);
 else if (((enum rtx_code) (src_0)->code) == CONST_INT || ((rtx_class[(int) (((enum rtx_code) (src_1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (src_1)->code) == CONST_VECTOR))
   return find_base_value (src_1);
 return 0;
      }
    case LO_SUM:
      return find_base_value ((((src)->u.fld[1]).rtx1));
    case AND:
      if (((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) == CONST_INT && (((((src)->u.fld[1]).rtx1))->u.hwint[0]) != 0)
 return find_base_value ((((src)->u.fld[0]).rtx1));
      return 0;
    case TRUNCATE:
      if (((unsigned short) mode_size[((enum machine_mode) (src)->mode)]) < ((unsigned short) mode_size[(0 ? DImode : SImode)]))
 break;
    case HIGH:
    case PRE_INC:
    case PRE_DEC:
    case POST_INC:
    case POST_DEC:
    case PRE_MODIFY:
    case POST_MODIFY:
      return find_base_value ((((src)->u.fld[0]).rtx1));
    case ZERO_EXTEND:
    case SIGN_EXTEND:
      {
 rtx temp = find_base_value ((((src)->u.fld[0]).rtx1));
 if (temp != 0 && ((rtx_class[(int) (((enum rtx_code) (temp)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (temp)->code) == CONST_VECTOR))
   temp = convert_memory_address ((0 ? DImode : SImode), temp);
 return temp;
      }
    default:
      break;
    }
  return 0;
}
static char *reg_seen;
static int unique_id;
static void
record_set (rtx dest, rtx set, void *data )
{
  unsigned regno;
  rtx src;
  int n;
  if (!(((enum rtx_code) (dest)->code) == REG))
    return;
  regno = (((dest)->u.fld[0]).rtuint);
  if (regno >= ((reg_base_value)->num_elements))
    fancy_abort ("gcc.c", 370818, "?");
  if (regno < 53)
    n = hard_regno_nregs[regno][((enum machine_mode) (dest)->mode)];
  else
    n = 1;
  if (n != 1)
    {
      while (--n >= 0)
 {
   reg_seen[regno + n] = 1;
   new_reg_base_value[regno + n] = 0;
 }
      return;
    }
  if (set)
    {
      if (((enum rtx_code) (set)->code) == CLOBBER)
 {
   new_reg_base_value[regno] = 0;
   return;
 }
      src = (((set)->u.fld[1]).rtx1);
    }
  else
    {
      if (reg_seen[regno])
 {
   new_reg_base_value[regno] = 0;
   return;
 }
      reg_seen[regno] = 1;
      new_reg_base_value[regno] = gen_rtx_fmt_e (ADDRESS, ((0 ? DImode : SImode)), (gen_rtx_CONST_INT (VOIDmode, (long) (unique_id++))))
                               ;
      return;
    }
  if (new_reg_base_value[regno] != 0
      && find_base_value (src) != new_reg_base_value[regno])
    switch (((enum rtx_code) (src)->code))
      {
      case LO_SUM:
      case MINUS:
 if ((((src)->u.fld[0]).rtx1) != dest && (((src)->u.fld[1]).rtx1) != dest)
   new_reg_base_value[regno] = 0;
 break;
      case PLUS:
 {
   rtx other = (rtx) 0;
   if ((((src)->u.fld[0]).rtx1) == dest)
     other = (((src)->u.fld[1]).rtx1);
   else if ((((src)->u.fld[1]).rtx1) == dest)
     other = (((src)->u.fld[0]).rtx1);
   if (! other || find_base_value (other))
     new_reg_base_value[regno] = 0;
   break;
 }
      case AND:
 if ((((src)->u.fld[0]).rtx1) != dest || ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) != CONST_INT)
   new_reg_base_value[regno] = 0;
 break;
      default:
 new_reg_base_value[regno] = 0;
 break;
      }
  else if ((regno >= 53 || ! fixed_regs[regno])
    && ! reg_seen[regno] && new_reg_base_value[regno] == 0)
    new_reg_base_value[regno] = find_base_value (src);
  reg_seen[regno] = 1;
}
void
record_base_value (unsigned int regno, rtx val, int invariant)
{
  if (invariant && alias_invariant && regno < alias_invariant_size)
    alias_invariant[regno] = val;
  if (regno >= ((reg_base_value)->num_elements))
    ((reg_base_value) = varray_grow (reg_base_value, max_reg_num ()));
  if ((((enum rtx_code) (val)->code) == REG))
    {
      ((reg_base_value)->data.rtx1[regno])
  = (reg_base_value && (((val)->u.fld[0]).rtuint) < ((reg_base_value)->num_elements) ? ((reg_base_value)->data.rtx1[(((val)->u.fld[0]).rtuint)]) : 0);
      return;
    }
  ((reg_base_value)->data.rtx1[regno])
     = find_base_value (val);
}
void
clear_reg_alias_info (rtx reg)
{
  unsigned int regno = (((reg)->u.fld[0]).rtuint);
  if (regno >= 53)
    {
      regno -= 53;
      if (regno < reg_known_value_size)
 {
   reg_known_value[regno] = reg;
   reg_known_equiv_p[regno] = 0;
 }
    }
}
rtx
get_reg_known_value (unsigned int regno)
{
  if (regno >= 53)
    {
      regno -= 53;
      if (regno < reg_known_value_size)
 return reg_known_value[regno];
    }
  return ((void *)0);
}
static void
set_reg_known_value (unsigned int regno, rtx val)
{
  if (regno >= 53)
    {
      regno -= 53;
      if (regno < reg_known_value_size)
 reg_known_value[regno] = val;
    }
}
unsigned char
get_reg_known_equiv_p (unsigned int regno)
{
  if (regno >= 53)
    {
      regno -= 53;
      if (regno < reg_known_value_size)
 return reg_known_equiv_p[regno];
    }
  return 0;
}
static void
set_reg_known_equiv_p (unsigned int regno, unsigned char val)
{
  if (regno >= 53)
    {
      regno -= 53;
      if (regno < reg_known_value_size)
 reg_known_equiv_p[regno] = val;
    }
}
rtx
canon_rtx (rtx x)
{
  if ((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) >= 53)
    {
      rtx t = get_reg_known_value ((((x)->u.fld[0]).rtuint));
      if (t == x)
 return x;
      if (t)
 return canon_rtx (t);
    }
  if (((enum rtx_code) (x)->code) == PLUS)
    {
      rtx x0 = canon_rtx ((((x)->u.fld[0]).rtx1));
      rtx x1 = canon_rtx ((((x)->u.fld[1]).rtx1));
      if (x0 != (((x)->u.fld[0]).rtx1) || x1 != (((x)->u.fld[1]).rtx1))
 {
   if (((enum rtx_code) (x0)->code) == CONST_INT)
     return plus_constant_wide ((x1), (long) (((x0)->u.hwint[0])));
   else if (((enum rtx_code) (x1)->code) == CONST_INT)
     return plus_constant_wide ((x0), (long) (((x1)->u.hwint[0])));
   return gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (x)->mode)), (x0), (x1));
 }
    }
  else if ((((enum rtx_code) (x)->code) == MEM))
    x = replace_equiv_address_nv (x, canon_rtx ((((x)->u.fld[0]).rtx1)));
  return x;
}
static int
rtx_equal_for_memref_p (rtx x, rtx y)
{
  int i;
  int j;
  enum rtx_code code;
  const char *fmt;
  if (x == 0 && y == 0)
    return 1;
  if (x == 0 || y == 0)
    return 0;
  if (x == y)
    return 1;
  code = ((enum rtx_code) (x)->code);
  if (code != ((enum rtx_code) (y)->code))
    return 0;
  if (((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode))
    return 0;
  switch (code)
    {
    case REG:
      return (((x)->u.fld[0]).rtuint) == (((y)->u.fld[0]).rtuint);
    case LABEL_REF:
      return (((x)->u.fld[0]).rtx1) == (((y)->u.fld[0]).rtx1);
    case SYMBOL_REF:
      return (((x)->u.fld[0]).rtstr) == (((y)->u.fld[0]).rtstr);
    case VALUE:
    case CONST_INT:
    case CONST_DOUBLE:
      return 0;
    default:
      break;
    }
  if (code == PLUS)
    return ((rtx_equal_for_memref_p ((((x)->u.fld[0]).rtx1), (((y)->u.fld[0]).rtx1))
      && rtx_equal_for_memref_p ((((x)->u.fld[1]).rtx1), (((y)->u.fld[1]).rtx1)))
     || (rtx_equal_for_memref_p ((((x)->u.fld[0]).rtx1), (((y)->u.fld[1]).rtx1))
  && rtx_equal_for_memref_p ((((x)->u.fld[1]).rtx1), (((y)->u.fld[0]).rtx1))));
  if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~2)) == (RTX_COMM_COMPARE & (~2))))
    {
      rtx xop0 = canon_rtx ((((x)->u.fld[0]).rtx1));
      rtx yop0 = canon_rtx ((((y)->u.fld[0]).rtx1));
      rtx yop1 = canon_rtx ((((y)->u.fld[1]).rtx1));
      return ((rtx_equal_for_memref_p (xop0, yop0)
        && rtx_equal_for_memref_p (canon_rtx ((((x)->u.fld[1]).rtx1)), yop1))
       || (rtx_equal_for_memref_p (xop0, yop1)
    && rtx_equal_for_memref_p (canon_rtx ((((x)->u.fld[1]).rtx1)), yop0)));
    }
  else if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~2)) == (RTX_COMPARE & (~2))))
    {
      return (rtx_equal_for_memref_p (canon_rtx ((((x)->u.fld[0]).rtx1)),
          canon_rtx ((((y)->u.fld[0]).rtx1)))
       && rtx_equal_for_memref_p (canon_rtx ((((x)->u.fld[1]).rtx1)),
      canon_rtx ((((y)->u.fld[1]).rtx1))));
    }
  else if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_UNARY))
    return rtx_equal_for_memref_p (canon_rtx ((((x)->u.fld[0]).rtx1)),
       canon_rtx ((((y)->u.fld[0]).rtx1)));
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      switch (fmt[i])
 {
 case 'i':
   if ((((x)->u.fld[i]).rtint) != (((y)->u.fld[i]).rtint))
     return 0;
   break;
 case 'E':
   if ((((((x)->u.fld[i]).rtvec1))->num_elem) != (((((y)->u.fld[i]).rtvec1))->num_elem))
     return 0;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     if (rtx_equal_for_memref_p (canon_rtx ((((((x)->u.fld[i]).rtvec1))->elem[j])),
     canon_rtx ((((((y)->u.fld[i]).rtvec1))->elem[j]))) == 0)
       return 0;
   break;
 case 'e':
   if (rtx_equal_for_memref_p (canon_rtx ((((x)->u.fld[i]).rtx1)),
          canon_rtx ((((y)->u.fld[i]).rtx1))) == 0)
     return 0;
   break;
 case 's':
   if (strcmp ((((x)->u.fld[i]).rtstr), (((y)->u.fld[i]).rtstr)))
     return 0;
   break;
 case '0':
   break;
 default:
   fancy_abort ("gcc.c", 371194, "?");
 }
    }
  return 1;
}
static rtx
find_symbolic_term (rtx x)
{
  int i;
  enum rtx_code code;
  const char *fmt;
  code = ((enum rtx_code) (x)->code);
  if (code == SYMBOL_REF || code == LABEL_REF)
    return x;
  if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_OBJ & (~1))))
    return 0;
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      rtx t;
      if (fmt[i] == 'e')
 {
   t = find_symbolic_term ((((x)->u.fld[i]).rtx1));
   if (t != 0)
     return t;
 }
      else if (fmt[i] == 'E')
 break;
    }
  return 0;
}
rtx
find_base_term (rtx x)
{
  cselib_val *val;
  struct elt_loc_list *l;
  x = ix86_find_base_term (x);
  switch (((enum rtx_code) (x)->code))
    {
    case REG:
      return (reg_base_value && (((x)->u.fld[0]).rtuint) < ((reg_base_value)->num_elements) ? ((reg_base_value)->data.rtx1[(((x)->u.fld[0]).rtuint)]) : 0);
    case TRUNCATE:
      if (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) < ((unsigned short) mode_size[(0 ? DImode : SImode)]))
 return 0;
    case HIGH:
    case PRE_INC:
    case PRE_DEC:
    case POST_INC:
    case POST_DEC:
    case PRE_MODIFY:
    case POST_MODIFY:
      return find_base_term ((((x)->u.fld[0]).rtx1));
    case ZERO_EXTEND:
    case SIGN_EXTEND:
      {
 rtx temp = find_base_term ((((x)->u.fld[0]).rtx1));
 if (temp != 0 && ((rtx_class[(int) (((enum rtx_code) (temp)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (temp)->code) == CONST_VECTOR))
   temp = convert_memory_address ((0 ? DImode : SImode), temp);
 return temp;
      }
    case VALUE:
      val = (((x)->u.fld[0]).rt_cselib);
      if (!val)
 return 0;
      for (l = val->locs; l; l = l->next)
 if ((x = find_base_term (l->loc)) != 0)
   return x;
      return 0;
    case CONST:
      x = (((x)->u.fld[0]).rtx1);
      if (((enum rtx_code) (x)->code) != PLUS && ((enum rtx_code) (x)->code) != MINUS)
 return 0;
    case LO_SUM:
    case PLUS:
    case MINUS:
      {
 rtx tmp1 = (((x)->u.fld[0]).rtx1);
 rtx tmp2 = (((x)->u.fld[1]).rtx1);
 if (tmp1 == pic_offset_table_rtx && ((rtx_class[(int) (((enum rtx_code) (tmp2)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (tmp2)->code) == CONST_VECTOR))
   return find_base_term (tmp2);
 if ((((enum rtx_code) (tmp1)->code) == REG) && (((tmp1))->frame_related))
   return find_base_term (tmp1);
 if ((((enum rtx_code) (tmp2)->code) == REG) && (((tmp2))->frame_related))
   return find_base_term (tmp2);
 tmp1 = find_base_term (tmp1);
 tmp2 = find_base_term (tmp2);
 if (tmp1 != 0
     && (((enum rtx_code) (tmp1)->code) == SYMBOL_REF
  || ((enum rtx_code) (tmp1)->code) == LABEL_REF
  || (((enum rtx_code) (tmp1)->code) == ADDRESS
      && ((enum machine_mode) (tmp1)->mode) != VOIDmode)))
   return tmp1;
 if (tmp2 != 0
     && (((enum rtx_code) (tmp2)->code) == SYMBOL_REF
  || ((enum rtx_code) (tmp2)->code) == LABEL_REF
  || (((enum rtx_code) (tmp2)->code) == ADDRESS
      && ((enum machine_mode) (tmp2)->mode) != VOIDmode)))
   return tmp2;
 return 0;
      }
    case AND:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) != 0)
 return find_base_term ((((x)->u.fld[0]).rtx1));
      return 0;
    case SYMBOL_REF:
    case LABEL_REF:
      return x;
    default:
      return 0;
    }
}
static int
base_alias_check (rtx x, rtx y, enum machine_mode x_mode,
    enum machine_mode y_mode)
{
  rtx x_base = find_base_term (x);
  rtx y_base = find_base_term (y);
  if (x_base == 0)
    {
      rtx x_c;
      if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
 return 1;
      x_base = find_base_term (x_c);
      if (x_base == 0)
 return 1;
    }
  if (y_base == 0)
    {
      rtx y_c;
      if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
 return 1;
      y_base = find_base_term (y_c);
      if (y_base == 0)
 return 1;
    }
  if (rtx_equal_p (x_base, y_base))
    return 1;
  if (((enum rtx_code) (x_base)->code) != ADDRESS && ((enum rtx_code) (y_base)->code) != ADDRESS)
    {
      if (((enum rtx_code) (x)->code) == AND && ((enum rtx_code) (y)->code) == AND)
 return 1;
      if (((enum rtx_code) (x)->code) == AND
   && (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != CONST_INT
       || (int) (mode_inner[y_mode] == VOIDmode ? ((unsigned short) mode_size[y_mode]) : ((unsigned short) mode_size[mode_inner[y_mode]])) < -(((((x)->u.fld[1]).rtx1))->u.hwint[0])))
 return 1;
      if (((enum rtx_code) (y)->code) == AND
   && (((enum rtx_code) ((((y)->u.fld[1]).rtx1))->code) != CONST_INT
       || (int) (mode_inner[x_mode] == VOIDmode ? ((unsigned short) mode_size[x_mode]) : ((unsigned short) mode_size[mode_inner[x_mode]])) < -(((((y)->u.fld[1]).rtx1))->u.hwint[0])))
 return 1;
      return 0;
    }
  if ((((enum rtx_code) (x_base)->code) == ADDRESS && ((enum machine_mode) (x_base)->mode) == (0 ? DImode : SImode))
      || (((enum rtx_code) (y_base)->code) == ADDRESS && ((enum machine_mode) (y_base)->mode) == (0 ? DImode : SImode)))
    return 0;
  if (! flag_argument_noalias)
    return 1;
  if (flag_argument_noalias > 1)
    return 0;
  return ! (((enum machine_mode) (x_base)->mode) == VOIDmode && ((enum machine_mode) (y_base)->mode) == VOIDmode);
}
rtx
get_addr (rtx x)
{
  cselib_val *v;
  struct elt_loc_list *l;
  if (((enum rtx_code) (x)->code) != VALUE)
    return x;
  v = (((x)->u.fld[0]).rt_cselib);
  if (v)
    {
      for (l = v->locs; l; l = l->next)
 if (((rtx_class[(int) (((enum rtx_code) (l->loc)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (l->loc)->code) == CONST_VECTOR))
   return l->loc;
      for (l = v->locs; l; l = l->next)
 if (!(((enum rtx_code) (l->loc)->code) == REG) && !(((enum rtx_code) (l->loc)->code) == MEM))
   return l->loc;
      if (v->locs)
 return v->locs->loc;
    }
  return x;
}
rtx
addr_side_effect_eval (rtx addr, int size, int n_refs)
{
  int offset = 0;
  switch (((enum rtx_code) (addr)->code))
    {
    case PRE_INC:
      offset = (n_refs + 1) * size;
      break;
    case PRE_DEC:
      offset = -(n_refs + 1) * size;
      break;
    case POST_INC:
      offset = n_refs * size;
      break;
    case POST_DEC:
      offset = -n_refs * size;
      break;
    default:
      return addr;
    }
  if (offset)
    addr = gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (addr)->mode)), ((((addr)->u.fld[0]).rtx1)), (gen_rtx_CONST_INT (VOIDmode, (long) (offset))))
                            ;
  else
    addr = (((addr)->u.fld[0]).rtx1);
  addr = canon_rtx (addr);
  return addr;
}
static int
memrefs_conflict_p (int xsize, rtx x, int ysize, rtx y, long c)
{
  if (((enum rtx_code) (x)->code) == VALUE)
    x = get_addr (x);
  if (((enum rtx_code) (y)->code) == VALUE)
    y = get_addr (y);
  if (((enum rtx_code) (x)->code) == HIGH)
    x = (((x)->u.fld[0]).rtx1);
  else if (((enum rtx_code) (x)->code) == LO_SUM)
    x = (((x)->u.fld[1]).rtx1);
  else
    x = addr_side_effect_eval (x, xsize, 0);
  if (((enum rtx_code) (y)->code) == HIGH)
    y = (((y)->u.fld[0]).rtx1);
  else if (((enum rtx_code) (y)->code) == LO_SUM)
    y = (((y)->u.fld[1]).rtx1);
  else
    y = addr_side_effect_eval (y, ysize, 0);
  if (rtx_equal_for_memref_p (x, y))
    {
      if (xsize <= 0 || ysize <= 0)
 return 1;
      if (c >= 0 && xsize > c)
 return 1;
      if (c < 0 && ysize+c > 0)
 return 1;
      return 0;
    }
  if (((enum rtx_code) (x)->code) == PLUS)
    {
      rtx x0 = (((x)->u.fld[0]).rtx1);
      rtx x1 = (((x)->u.fld[1]).rtx1);
      if (((enum rtx_code) (y)->code) == PLUS)
 {
   rtx y0 = (((y)->u.fld[0]).rtx1);
   rtx y1 = (((y)->u.fld[1]).rtx1);
   if (rtx_equal_for_memref_p (x1, y1))
     return memrefs_conflict_p (xsize, x0, ysize, y0, c);
   if (rtx_equal_for_memref_p (x0, y0))
     return memrefs_conflict_p (xsize, x1, ysize, y1, c);
   if (((enum rtx_code) (x1)->code) == CONST_INT)
     {
       if (((enum rtx_code) (y1)->code) == CONST_INT)
  return memrefs_conflict_p (xsize, x0, ysize, y0,
        c - ((x1)->u.hwint[0]) + ((y1)->u.hwint[0]));
       else
  return memrefs_conflict_p (xsize, x0, ysize, y,
        c - ((x1)->u.hwint[0]));
     }
   else if (((enum rtx_code) (y1)->code) == CONST_INT)
     return memrefs_conflict_p (xsize, x, ysize, y0, c + ((y1)->u.hwint[0]));
   return 1;
 }
      else if (((enum rtx_code) (x1)->code) == CONST_INT)
 return memrefs_conflict_p (xsize, x0, ysize, y, c - ((x1)->u.hwint[0]));
    }
  else if (((enum rtx_code) (y)->code) == PLUS)
    {
      rtx y0 = (((y)->u.fld[0]).rtx1);
      rtx y1 = (((y)->u.fld[1]).rtx1);
      if (((enum rtx_code) (y1)->code) == CONST_INT)
 return memrefs_conflict_p (xsize, x, ysize, y0, c + ((y1)->u.hwint[0]));
      else
 return 1;
    }
  if (((enum rtx_code) (x)->code) == ((enum rtx_code) (y)->code))
    switch (((enum rtx_code) (x)->code))
      {
      case MULT:
 {
   rtx x0, y0;
   rtx x1 = canon_rtx ((((x)->u.fld[1]).rtx1));
   rtx y1 = canon_rtx ((((y)->u.fld[1]).rtx1));
   if (! rtx_equal_for_memref_p (x1, y1))
     return 1;
   x0 = canon_rtx ((((x)->u.fld[0]).rtx1));
   y0 = canon_rtx ((((y)->u.fld[0]).rtx1));
   if (rtx_equal_for_memref_p (x0, y0))
     return (xsize == 0 || ysize == 0
      || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
   if (((enum rtx_code) (x1)->code) != CONST_INT)
     return 1;
   xsize /= ((x1)->u.hwint[0]);
   ysize /= ((x1)->u.hwint[0]);
   c /= ((x1)->u.hwint[0]);
   return memrefs_conflict_p (xsize, x0, ysize, y0, c);
 }
      case REG:
 if (alias_invariant)
   {
     unsigned int r_x = (((x)->u.fld[0]).rtuint), r_y = (((y)->u.fld[0]).rtuint);
     rtx i_x, i_y;
     i_x = r_x >= alias_invariant_size ? 0 : alias_invariant[r_x];
     i_y = r_y >= alias_invariant_size ? 0 : alias_invariant[r_y];
     if (i_x == 0 && i_y == 0)
       break;
     if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
          ysize, i_y ? i_y : y, c))
       return 0;
   }
 break;
      default:
 break;
      }
  if (((enum rtx_code) (x)->code) == AND && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
    {
      if (((enum rtx_code) (y)->code) == AND || ysize < -(((((x)->u.fld[1]).rtx1))->u.hwint[0]))
 xsize = -1;
      return memrefs_conflict_p (xsize, canon_rtx ((((x)->u.fld[0]).rtx1)), ysize, y, c);
    }
  if (((enum rtx_code) (y)->code) == AND && ((enum rtx_code) ((((y)->u.fld[1]).rtx1))->code) == CONST_INT)
    {
      if (((enum rtx_code) (x)->code) == AND || xsize < -(((((y)->u.fld[1]).rtx1))->u.hwint[0]))
 ysize = -1;
      return memrefs_conflict_p (xsize, x, ysize, canon_rtx ((((y)->u.fld[0]).rtx1)), c);
    }
  if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR))
    {
      if (((enum rtx_code) (x)->code) == CONST_INT && ((enum rtx_code) (y)->code) == CONST_INT)
 {
   c += (((y)->u.hwint[0]) - ((x)->u.hwint[0]));
   return (xsize <= 0 || ysize <= 0
    || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
 }
      if (((enum rtx_code) (x)->code) == CONST)
 {
   if (((enum rtx_code) (y)->code) == CONST)
     return memrefs_conflict_p (xsize, canon_rtx ((((x)->u.fld[0]).rtx1)),
           ysize, canon_rtx ((((y)->u.fld[0]).rtx1)), c);
   else
     return memrefs_conflict_p (xsize, canon_rtx ((((x)->u.fld[0]).rtx1)),
           ysize, y, c);
 }
      if (((enum rtx_code) (y)->code) == CONST)
 return memrefs_conflict_p (xsize, x, ysize,
       canon_rtx ((((y)->u.fld[0]).rtx1)), c);
      if (((rtx_class[(int) (((enum rtx_code) (y)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (y)->code) == CONST_VECTOR))
 return (xsize <= 0 || ysize <= 0
  || (rtx_equal_for_memref_p (x, y)
      && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
      return 1;
    }
  return 1;
}
int
read_dependence (rtx mem, rtx x)
{
  return (((x))->volatil) && (((mem))->volatil);
}
static rtx
fixed_scalar_and_varying_struct_p (rtx mem1, rtx mem2, rtx mem1_addr,
       rtx mem2_addr,
       int (*varies_p) (rtx, int))
{
  if (! flag_strict_aliasing)
    return (rtx) 0;
  if ((((mem1))->return_val) && (((mem2))->in_struct)
      && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
    return mem1;
  if ((((mem1))->in_struct) && (((mem2))->return_val)
      && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
    return mem2;
  return (rtx) 0;
}
static int
aliases_everything_p (rtx mem)
{
  if (((enum rtx_code) ((((mem)->u.fld[0]).rtx1))->code) == AND)
    return 1;
  return 0;
}
static unsigned char
nonoverlapping_component_refs_p (tree x, tree y)
{
  tree fieldx, fieldy, typex, typey, orig_y;
  do
    {
      orig_y = y;
      do
 {
   fieldx = ((x)->exp.operands[1]);
   typex = ((fieldx)->decl.context);
   y = orig_y;
   do
     {
       fieldy = ((y)->exp.operands[1]);
       typey = ((fieldy)->decl.context);
       if (typex == typey)
  goto found;
       y = ((y)->exp.operands[0]);
     }
   while (y && ((enum tree_code) (y)->common.code) == COMPONENT_REF);
   x = ((x)->exp.operands[0]);
 }
      while (x && ((enum tree_code) (x)->common.code) == COMPONENT_REF);
      return 0;
    found:
      if (((enum tree_code) (typex)->common.code) == RECORD_TYPE
   && fieldx != fieldy)
 return 1;
      x = ((x)->exp.operands[0]);
      y = ((y)->exp.operands[0]);
    }
  while (x && y
  && ((enum tree_code) (x)->common.code) == COMPONENT_REF
  && ((enum tree_code) (y)->common.code) == COMPONENT_REF);
  return 0;
}
static tree
decl_for_component_ref (tree x)
{
  do
    {
      x = ((x)->exp.operands[0]);
    }
  while (x && ((enum tree_code) (x)->common.code) == COMPONENT_REF);
  return x && (tree_code_type[(int) (((enum tree_code) (x)->common.code))] == 'd') ? x : (tree) ((void *)0);
}
static rtx
adjust_offset_for_component_ref (tree x, rtx offset)
{
  long ioffset;
  if (! offset)
    return (rtx) 0;
  ioffset = ((offset)->u.hwint[0]);
  do
    {
      tree offset = component_ref_field_offset (x);
      tree field = ((x)->exp.operands[1]);
      if (! host_integerp (offset, 1))
 return (rtx) 0;
      ioffset += (tree_low_cst (offset, 1)
    + (tree_low_cst (((field)->decl.u2.t), 1)
       / 8));
      x = ((x)->exp.operands[0]);
    }
  while (x && ((enum tree_code) (x)->common.code) == COMPONENT_REF);
  return gen_rtx_CONST_INT (VOIDmode, (long) (ioffset));
}
static int
nonoverlapping_memrefs_p (rtx x, rtx y)
{
  tree exprx = ((((x)->u.fld[1]).rtmem) == 0 ? 0 : (((x)->u.fld[1]).rtmem)->expr), expry = ((((y)->u.fld[1]).rtmem) == 0 ? 0 : (((y)->u.fld[1]).rtmem)->expr);
  rtx rtlx, rtly;
  rtx basex, basey;
  rtx moffsetx, moffsety;
  long offsetx = 0, offsety = 0, sizex, sizey, tem;
  if (exprx == 0 || expry == 0)
    return 0;
  if (((enum tree_code) (exprx)->common.code) == COMPONENT_REF
      && ((enum tree_code) (expry)->common.code) == COMPONENT_REF
      && nonoverlapping_component_refs_p (exprx, expry))
    return 1;
  moffsetx = ((((x)->u.fld[1]).rtmem) == 0 ? 0 : (((x)->u.fld[1]).rtmem)->offset);
  if (((enum tree_code) (exprx)->common.code) == COMPONENT_REF)
    {
      tree t = decl_for_component_ref (exprx);
      if (! t)
 return 0;
      moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
      exprx = t;
    }
  else if (((enum tree_code) (exprx)->common.code) == INDIRECT_REF)
    {
      exprx = ((exprx)->exp.operands[0]);
      if (flag_argument_noalias < 2
   || ((enum tree_code) (exprx)->common.code) != PARM_DECL)
 return 0;
    }
  moffsety = ((((y)->u.fld[1]).rtmem) == 0 ? 0 : (((y)->u.fld[1]).rtmem)->offset);
  if (((enum tree_code) (expry)->common.code) == COMPONENT_REF)
    {
      tree t = decl_for_component_ref (expry);
      if (! t)
 return 0;
      moffsety = adjust_offset_for_component_ref (expry, moffsety);
      expry = t;
    }
  else if (((enum tree_code) (expry)->common.code) == INDIRECT_REF)
    {
      expry = ((expry)->exp.operands[0]);
      if (flag_argument_noalias < 2
   || ((enum tree_code) (expry)->common.code) != PARM_DECL)
 return 0;
    }
  if (! (tree_code_type[(int) (((enum tree_code) (exprx)->common.code))] == 'd') || ! (tree_code_type[(int) (((enum tree_code) (expry)->common.code))] == 'd'))
    return 0;
  rtlx = ((exprx)->decl.rtl ? (exprx)->decl.rtl : (make_decl_rtl (exprx, ((void *)0)), (exprx)->decl.rtl));
  rtly = ((expry)->decl.rtl ? (expry)->decl.rtl : (make_decl_rtl (expry, ((void *)0)), (expry)->decl.rtl));
  if ((!(((enum rtx_code) (rtlx)->code) == MEM) || !(((enum rtx_code) (rtly)->code) == MEM))
      && ! rtx_equal_p (rtlx, rtly))
    return 1;
  basex = (((enum rtx_code) (rtlx)->code) == MEM) ? (((rtlx)->u.fld[0]).rtx1) : rtlx;
  if (((enum rtx_code) (basex)->code) == PLUS && ((enum rtx_code) ((((basex)->u.fld[1]).rtx1))->code) == CONST_INT)
    offsetx = (((((basex)->u.fld[1]).rtx1))->u.hwint[0]), basex = (((basex)->u.fld[0]).rtx1);
  basey = (((enum rtx_code) (rtly)->code) == MEM) ? (((rtly)->u.fld[0]).rtx1) : rtly;
  if (((enum rtx_code) (basey)->code) == PLUS && ((enum rtx_code) ((((basey)->u.fld[1]).rtx1))->code) == CONST_INT)
    offsety = (((((basey)->u.fld[1]).rtx1))->u.hwint[0]), basey = (((basey)->u.fld[0]).rtx1);
  if (! rtx_equal_p (basex, basey))
    return ((((rtx_class[(int) (((enum rtx_code) (basex)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (basex)->code) == CONST_VECTOR) && ((rtx_class[(int) (((enum rtx_code) (basey)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (basey)->code) == CONST_VECTOR))
     || (((rtx_class[(int) (((enum rtx_code) (basex)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (basex)->code) == CONST_VECTOR) && (((enum rtx_code) (basey)->code) == REG)
  && (((((basey)->u.fld[0]).rtuint)) == 7 || ((((basey)->u.fld[0]).rtuint)) == 20 || ((((basey)->u.fld[0]).rtuint)) == 6 || ((((basey)->u.fld[0]).rtuint)) == 16 || (((((basey)->u.fld[0]).rtuint)) >= (53) && ((((basey)->u.fld[0]).rtuint)) <= (((53)) + 4))))
     || (((rtx_class[(int) (((enum rtx_code) (basey)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (basey)->code) == CONST_VECTOR) && (((enum rtx_code) (basex)->code) == REG)
  && (((((basex)->u.fld[0]).rtuint)) == 7 || ((((basex)->u.fld[0]).rtuint)) == 20 || ((((basex)->u.fld[0]).rtuint)) == 6 || ((((basex)->u.fld[0]).rtuint)) == 16 || (((((basex)->u.fld[0]).rtuint)) >= (53) && ((((basex)->u.fld[0]).rtuint)) <= (((53)) + 4)))));
  sizex = (!(((enum rtx_code) (rtlx)->code) == MEM) ? (int) ((unsigned short) mode_size[((enum machine_mode) (rtlx)->mode)])
    : ((((rtlx)->u.fld[1]).rtmem) != 0 ? (((rtlx)->u.fld[1]).rtmem)->size : ((enum machine_mode) (rtlx)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (rtlx)->mode)]))) : 0) ? ((((((rtlx)->u.fld[1]).rtmem) != 0 ? (((rtlx)->u.fld[1]).rtmem)->size : ((enum machine_mode) (rtlx)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (rtlx)->mode)]))) : 0))->u.hwint[0])
    : -1);
  sizey = (!(((enum rtx_code) (rtly)->code) == MEM) ? (int) ((unsigned short) mode_size[((enum machine_mode) (rtly)->mode)])
    : ((((rtly)->u.fld[1]).rtmem) != 0 ? (((rtly)->u.fld[1]).rtmem)->size : ((enum machine_mode) (rtly)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (rtly)->mode)]))) : 0) ? ((((((rtly)->u.fld[1]).rtmem) != 0 ? (((rtly)->u.fld[1]).rtmem)->size : ((enum machine_mode) (rtly)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (rtly)->mode)]))) : 0))->u.hwint[0]) :
    -1);
  if (moffsetx)
    offsetx += ((moffsetx)->u.hwint[0]), sizex -= ((moffsetx)->u.hwint[0]);
  if (moffsety)
    offsety += ((moffsety)->u.hwint[0]), sizey -= ((moffsety)->u.hwint[0]);
  if (((((x)->u.fld[1]).rtmem) != 0 ? (((x)->u.fld[1]).rtmem)->size : ((enum machine_mode) (x)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]))) : 0) && moffsetx)
    sizex = ((((((x)->u.fld[1]).rtmem) != 0 ? (((x)->u.fld[1]).rtmem)->size : ((enum machine_mode) (x)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]))) : 0))->u.hwint[0]);
  if (((((y)->u.fld[1]).rtmem) != 0 ? (((y)->u.fld[1]).rtmem)->size : ((enum machine_mode) (y)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (y)->mode)]))) : 0) && moffsety)
    sizey = ((((((y)->u.fld[1]).rtmem) != 0 ? (((y)->u.fld[1]).rtmem)->size : ((enum machine_mode) (y)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (y)->mode)]))) : 0))->u.hwint[0]);
  if (offsetx > offsety)
    {
      tem = offsetx, offsetx = offsety, offsety = tem;
      tem = sizex, sizex = sizey, sizey = tem;
    }
  return sizex >= 0 && offsety >= offsetx + sizex;
}
int
true_dependence (rtx mem, enum machine_mode mem_mode, rtx x,
   int (*varies) (rtx, int))
{
  rtx x_addr, mem_addr;
  rtx base;
  if ((((x))->volatil) && (((mem))->volatil))
    return 1;
  if (((enum machine_mode) (x)->mode) == BLKmode && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SCRATCH)
    return 1;
  if (((enum machine_mode) (mem)->mode) == BLKmode && ((enum rtx_code) ((((mem)->u.fld[0]).rtx1))->code) == SCRATCH)
    return 1;
  if (mems_in_disjoint_alias_sets_p (x, mem))
    return 0;
  if ((((x))->unchanging) && ! (((mem))->unchanging))
    return 0;
  if (nonoverlapping_memrefs_p (mem, x))
    return 0;
  if (mem_mode == VOIDmode)
    mem_mode = ((enum machine_mode) (mem)->mode);
  x_addr = get_addr ((((x)->u.fld[0]).rtx1));
  mem_addr = get_addr ((((mem)->u.fld[0]).rtx1));
  base = find_base_term (x_addr);
  if (base && (((enum rtx_code) (base)->code) == LABEL_REF
        || (((enum rtx_code) (base)->code) == SYMBOL_REF
     && (((base))->unchanging))))
    return 0;
  if (! base_alias_check (x_addr, mem_addr, ((enum machine_mode) (x)->mode), mem_mode))
    return 0;
  x_addr = canon_rtx (x_addr);
  mem_addr = canon_rtx (mem_addr);
  if (! memrefs_conflict_p (((unsigned short) mode_size[mem_mode]), mem_addr,
       (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])), x_addr, 0))
    return 0;
  if (aliases_everything_p (x))
    return 1;
  if (mem_mode == QImode || ((enum rtx_code) (mem_addr)->code) == AND)
    return 1;
  if (mem_mode == BLKmode || ((enum machine_mode) (x)->mode) == BLKmode)
    return 1;
  return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
           varies);
}
int
canon_true_dependence (rtx mem, enum machine_mode mem_mode, rtx mem_addr,
         rtx x, int (*varies) (rtx, int))
{
  rtx x_addr;
  if ((((x))->volatil) && (((mem))->volatil))
    return 1;
  if (((enum machine_mode) (x)->mode) == BLKmode && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SCRATCH)
    return 1;
  if (((enum machine_mode) (mem)->mode) == BLKmode && ((enum rtx_code) ((((mem)->u.fld[0]).rtx1))->code) == SCRATCH)
    return 1;
  if (mems_in_disjoint_alias_sets_p (x, mem))
    return 0;
  if ((((x))->unchanging) && ! (((mem))->unchanging))
    return 0;
  if (nonoverlapping_memrefs_p (x, mem))
    return 0;
  x_addr = get_addr ((((x)->u.fld[0]).rtx1));
  if (! base_alias_check (x_addr, mem_addr, ((enum machine_mode) (x)->mode), mem_mode))
    return 0;
  x_addr = canon_rtx (x_addr);
  if (! memrefs_conflict_p (((unsigned short) mode_size[mem_mode]), mem_addr,
       (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])), x_addr, 0))
    return 0;
  if (aliases_everything_p (x))
    return 1;
  if (mem_mode == QImode || ((enum rtx_code) (mem_addr)->code) == AND)
    return 1;
  if (mem_mode == BLKmode || ((enum machine_mode) (x)->mode) == BLKmode)
    return 1;
  return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
           varies);
}
static int
write_dependence_p (rtx mem, rtx x, int writep, int constp)
{
  rtx x_addr, mem_addr;
  rtx fixed_scalar;
  rtx base;
  if ((((x))->volatil) && (((mem))->volatil))
    return 1;
  if (((enum machine_mode) (x)->mode) == BLKmode && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SCRATCH)
    return 1;
  if (((enum machine_mode) (mem)->mode) == BLKmode && ((enum rtx_code) ((((mem)->u.fld[0]).rtx1))->code) == SCRATCH)
    return 1;
  if (mems_in_disjoint_alias_sets_p (x, mem))
    return 0;
  if (constp)
    {
      if ((((x))->unchanging) != (((mem))->unchanging))
 return 0;
      if (! writep && (((mem))->unchanging))
 return 0;
    }
  if (nonoverlapping_memrefs_p (x, mem))
    return 0;
  x_addr = get_addr ((((x)->u.fld[0]).rtx1));
  mem_addr = get_addr ((((mem)->u.fld[0]).rtx1));
  if (! writep)
    {
      base = find_base_term (mem_addr);
      if (base && (((enum rtx_code) (base)->code) == LABEL_REF
     || (((enum rtx_code) (base)->code) == SYMBOL_REF
         && (((base))->unchanging))))
 return 0;
    }
  if (! base_alias_check (x_addr, mem_addr, ((enum machine_mode) (x)->mode),
     ((enum machine_mode) (mem)->mode)))
    return 0;
  x_addr = canon_rtx (x_addr);
  mem_addr = canon_rtx (mem_addr);
  if (!memrefs_conflict_p ((((unsigned short) mode_size[((enum machine_mode) (mem)->mode)])), mem_addr,
      (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])), x_addr, 0))
    return 0;
  fixed_scalar
    = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
      rtx_addr_varies_p);
  return (!(fixed_scalar == mem && !aliases_everything_p (x))
   && !(fixed_scalar == x && !aliases_everything_p (mem)));
}
int
anti_dependence (rtx mem, rtx x)
{
  return write_dependence_p (mem, x, 0, 1);
}
int
output_dependence (rtx mem, rtx x)
{
  return write_dependence_p (mem, x, 1, 1);
}
int
unchanging_anti_dependence (rtx mem, rtx x)
{
  return write_dependence_p (mem, x, 0, 0);
}
static int
nonlocal_mentioned_p_1 (rtx *loc, void *data )
{
  rtx x = *loc;
  rtx base;
  int regno;
  if (! x)
    return 0;
  switch (((enum rtx_code) (x)->code))
    {
    case SUBREG:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 {
   if (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
       && global_regs[subreg_regno (x)])
     return 1;
   return 0;
 }
      break;
    case REG:
      regno = (((x)->u.fld[0]).rtuint);
      if (regno < 53 && global_regs[regno])
 return 1;
      return 0;
    case SCRATCH:
    case PC:
    case CC0:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CONST:
    case LABEL_REF:
      return 0;
    case SYMBOL_REF:
      if ((((x))->unchanging))
 return 0;
      return 1;
    case CALL:
      return 1;
    case MEM:
      if ((((x))->volatil))
 return 1;
      base = find_base_term ((((x)->u.fld[0]).rtx1));
      if (base)
 {
   if (((enum rtx_code) (base)->code) == ADDRESS
       && ((enum machine_mode) (base)->mode) == (0 ? DImode : SImode)
       && ((((base)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER])
    || (((base)->u.fld[0]).rtx1) == (global_rtl[GR_ARG_POINTER])
    || (((base)->u.fld[0]).rtx1) == (global_rtl[GR_HARD_FRAME_POINTER])
    || (((base)->u.fld[0]).rtx1) == (global_rtl[GR_FRAME_POINTER])))
     return 0;
   if (((enum rtx_code) (base)->code) == SYMBOL_REF && (((base))->unchanging))
     return 0;
 }
      return 1;
    case UNSPEC_VOLATILE:
    case ASM_INPUT:
      return 1;
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 1;
    default:
      break;
    }
  return 0;
}
static int
nonlocal_mentioned_p (rtx x)
{
  if (((((enum rtx_code) (x)->code) == INSN) || (((enum rtx_code) (x)->code) == JUMP_INSN) || (((enum rtx_code) (x)->code) == CALL_INSN)))
    {
      if (((enum rtx_code) (x)->code) == CALL_INSN)
 {
   if (! (((x))->unchanging))
     return 1;
   x = (((x)->u.fld[9]).rtx1);
   if (x == 0)
     return 0;
 }
      else
 x = (((x)->u.fld[5]).rtx1);
    }
  return for_each_rtx (&x, nonlocal_mentioned_p_1, ((void *)0));
}
static int
nonlocal_referenced_p_1 (rtx *loc, void *data )
{
  rtx x = *loc;
  if (! x)
    return 0;
  switch (((enum rtx_code) (x)->code))
    {
    case MEM:
    case REG:
    case SYMBOL_REF:
    case SUBREG:
      return nonlocal_mentioned_p (x);
    case CALL:
      return 1;
    case SET:
      if (nonlocal_mentioned_p ((((x)->u.fld[1]).rtx1)))
 return 1;
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
 return nonlocal_mentioned_p (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) != CC0
   && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) != PC
   && !(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && ! (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
  && (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG)
  && (((((unsigned short) mode_size[((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)])
        + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4))
      == ((((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)])
    + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4)))))
 return nonlocal_mentioned_p ((((x)->u.fld[0]).rtx1));
      return 0;
    case CLOBBER:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
 return nonlocal_mentioned_p (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      return 0;
    case USE:
      return nonlocal_mentioned_p ((((x)->u.fld[0]).rtx1));
    case ASM_INPUT:
    case UNSPEC_VOLATILE:
      return 1;
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 1;
    default:
      break;
    }
  return 0;
}
static int
nonlocal_referenced_p (rtx x)
{
  if (((((enum rtx_code) (x)->code) == INSN) || (((enum rtx_code) (x)->code) == JUMP_INSN) || (((enum rtx_code) (x)->code) == CALL_INSN)))
    {
      if (((enum rtx_code) (x)->code) == CALL_INSN)
 {
   if (! (((x))->unchanging))
     return 1;
   x = (((x)->u.fld[9]).rtx1);
   if (x == 0)
     return 0;
 }
      else
 x = (((x)->u.fld[5]).rtx1);
    }
  return for_each_rtx (&x, nonlocal_referenced_p_1, ((void *)0));
}
static int
nonlocal_set_p_1 (rtx *loc, void *data )
{
  rtx x = *loc;
  if (! x)
    return 0;
  switch (((enum rtx_code) (x)->code))
    {
    case CALL:
      return 1;
    case PRE_INC:
    case PRE_DEC:
    case POST_INC:
    case POST_DEC:
    case PRE_MODIFY:
    case POST_MODIFY:
      return nonlocal_mentioned_p ((((x)->u.fld[0]).rtx1));
    case SET:
      if (nonlocal_mentioned_p ((((x)->u.fld[0]).rtx1)))
 return 1;
      return nonlocal_set_p ((((x)->u.fld[1]).rtx1));
    case CLOBBER:
      return nonlocal_mentioned_p ((((x)->u.fld[0]).rtx1));
    case USE:
      return 0;
    case ASM_INPUT:
    case UNSPEC_VOLATILE:
      return 1;
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 1;
    default:
      break;
    }
  return 0;
}
static int
nonlocal_set_p (rtx x)
{
  if (((((enum rtx_code) (x)->code) == INSN) || (((enum rtx_code) (x)->code) == JUMP_INSN) || (((enum rtx_code) (x)->code) == CALL_INSN)))
    {
      if (((enum rtx_code) (x)->code) == CALL_INSN)
 {
   if (! (((x))->unchanging))
     return 1;
   x = (((x)->u.fld[9]).rtx1);
   if (x == 0)
     return 0;
 }
      else
 x = (((x)->u.fld[5]).rtx1);
    }
  return for_each_rtx (&x, nonlocal_set_p_1, ((void *)0));
}
void
mark_constant_function (void)
{
  rtx insn;
  int nonlocal_memory_referenced;
  if (((current_function_decl)->common.readonly_flag)
      || ((current_function_decl)->decl.pure_flag)
      || ((current_function_decl)->common.volatile_flag)
      || (cfun->has_nonlocal_goto)
      || !targetm.binds_local_p (current_function_decl))
    return;
  if (mark_dfs_back_edges ())
    return;
  nonlocal_memory_referenced = 0;
  init_alias_analysis ();
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      if (nonlocal_set_p (insn) || global_reg_mentioned_p (insn)
   || volatile_refs_p ((((insn)->u.fld[5]).rtx1)))
 break;
      if (! nonlocal_memory_referenced)
 nonlocal_memory_referenced = nonlocal_referenced_p (insn);
    }
  end_alias_analysis ();
  if (insn)
    ;
  else if (nonlocal_memory_referenced)
    {
      cgraph_rtl_info (current_function_decl)->pure_function = 1;
      ((current_function_decl)->decl.pure_flag) = 1;
    }
  else
    {
      cgraph_rtl_info (current_function_decl)->const_function = 1;
      ((current_function_decl)->common.readonly_flag) = 1;
    }
}
void
init_alias_once (void)
{
  int i;
  for (i = 0; i < 53; i++)
    if (ix86_function_arg_regno_p ((i))
 && ix86_hard_regno_mode_ok ((i), ((0 ? DImode : SImode))))
      static_reg_base_value[i]
 = gen_rtx_fmt_e (ADDRESS, (VOIDmode), (gen_rtx_REG ((0 ? DImode : SImode), i)));
  static_reg_base_value[7]
    = gen_rtx_fmt_e (ADDRESS, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])));
  static_reg_base_value[16]
    = gen_rtx_fmt_e (ADDRESS, ((0 ? DImode : SImode)), ((global_rtl[GR_ARG_POINTER])));
  static_reg_base_value[20]
    = gen_rtx_fmt_e (ADDRESS, ((0 ? DImode : SImode)), ((global_rtl[GR_FRAME_POINTER])));
  static_reg_base_value[6]
    = gen_rtx_fmt_e (ADDRESS, ((0 ? DImode : SImode)), ((global_rtl[GR_HARD_FRAME_POINTER])));
}
static unsigned char memory_modified;
static void
memory_modified_1 (rtx x, rtx pat , void *data)
{
  if ((((enum rtx_code) (x)->code) == MEM))
    {
      if (anti_dependence (x, (rtx)data) || output_dependence (x, (rtx)data))
 memory_modified = 1;
    }
}
unsigned char
memory_modified_in_insn_p (rtx mem, rtx insn)
{
  if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return 0;
  memory_modified = 0;
  note_stores ((((insn)->u.fld[5]).rtx1), memory_modified_1, mem);
  return memory_modified;
}
void
init_alias_analysis (void)
{
  unsigned int maxreg = max_reg_num ();
  int changed, pass;
  int i;
  unsigned int ui;
  rtx insn;
  timevar_push (TV_ALIAS_ANALYSIS);
  reg_known_value_size = maxreg - 53;
  reg_known_value = ggc_calloc (reg_known_value_size, sizeof (rtx));
  reg_known_equiv_p = xcalloc (reg_known_value_size, sizeof (unsigned char));
  if (old_reg_base_value)
    {
      reg_base_value = old_reg_base_value;
      if (((reg_base_value)->num_elements) > 256
          && ((reg_base_value)->num_elements) > 4 * maxreg)
 ((reg_base_value) = varray_grow (reg_base_value, maxreg));
      varray_clear(reg_base_value);
      if (((reg_base_value)->num_elements) < maxreg)
 ((reg_base_value) = varray_grow (reg_base_value, maxreg));
    }
  else
    {
      reg_base_value = varray_init (maxreg, VARRAY_DATA_RTX, "reg_base_value");
    }
  new_reg_base_value = xmalloc (maxreg * sizeof (rtx));
  reg_seen = xmalloc (maxreg);
  if (! reload_completed && flag_old_unroll_loops)
    {
      alias_invariant = ggc_calloc (maxreg, sizeof (rtx));
      alias_invariant_size = maxreg;
    }
  pass = 0;
  do
    {
      changed = 0;
      unique_id = 0;
      copying_arguments = 1;
      memset (new_reg_base_value, 0, maxreg * sizeof (rtx));
      memset (reg_seen, 0, maxreg);
      memcpy (new_reg_base_value, static_reg_base_value,
       53 * sizeof (rtx));
      for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
 {
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       rtx note, set;
       if (reload_completed
    && prologue_epilogue_contains (insn))
  continue;
       if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET
    && (((insn)->u.fld[8]).rtx1) != 0
    && find_reg_note (insn, REG_NOALIAS, (rtx) 0))
  record_set (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1), (rtx) 0, ((void *)0));
       else
  note_stores ((((insn)->u.fld[5]).rtx1), record_set, ((void *)0));
       set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
       if (set != 0
    && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
    && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
  {
    unsigned int regno = ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
    rtx src = (((set)->u.fld[1]).rtx1);
    rtx t;
    if ((((insn)->u.fld[8]).rtx1) != 0
        && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
      && (((reg_n_info)->data.reg[regno])->sets) == 1)
     || (note = find_reg_note (insn, REG_EQUIV, (rtx) 0)) != 0)
        && ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) != EXPR_LIST
        && ! rtx_varies_p ((((note)->u.fld[0]).rtx1), 1)
        && ! reg_overlap_mentioned_p ((((set)->u.fld[0]).rtx1),
          (((note)->u.fld[0]).rtx1)))
      {
        set_reg_known_value (regno, (((note)->u.fld[0]).rtx1));
        set_reg_known_equiv_p (regno,
   ((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_EQUIV);
      }
    else if ((((reg_n_info)->data.reg[regno])->sets) == 1
      && ((enum rtx_code) (src)->code) == PLUS
      && (((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == REG)
      && (t = get_reg_known_value (((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))
      && ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) == CONST_INT)
      {
        t = plus_constant_wide ((t), (long) ((((((src)->u.fld[1]).rtx1))->u.hwint[0])));
        set_reg_known_value (regno, t);
        set_reg_known_equiv_p (regno, 0);
      }
    else if ((((reg_n_info)->data.reg[regno])->sets) == 1
      && ! rtx_varies_p (src, 1))
      {
        set_reg_known_value (regno, src);
        set_reg_known_equiv_p (regno, 0);
      }
  }
     }
   else if (((enum rtx_code) (insn)->code) == NOTE
     && (((insn)->u.fld[5]).rtint) == NOTE_INSN_FUNCTION_BEG)
     copying_arguments = 0;
 }
      if (maxreg != (unsigned int) max_reg_num())
 fancy_abort ("gcc.c", 372817, "?");
      for (ui = 0; ui < maxreg; ui++)
 {
   if (new_reg_base_value[ui]
       && new_reg_base_value[ui] != ((reg_base_value)->data.rtx1[ui])
       && ! rtx_equal_p (new_reg_base_value[ui],
    ((reg_base_value)->data.rtx1[ui])))
     {
       ((reg_base_value)->data.rtx1[ui]) = new_reg_base_value[ui];
       changed = 1;
     }
 }
    }
  while (changed && ++pass < 10);
  for (i = 0; i < (int)reg_known_value_size; i++)
    if (reg_known_value[i] == 0)
      reg_known_value[i] = (cfun->emit->x_regno_reg_rtx)[i + 53];
  pass = 0;
  do
    {
      changed = 0;
      pass++;
      for (ui = 0; ui < maxreg; ui++)
 {
   rtx base = ((reg_base_value)->data.rtx1[ui]);
   if (base && (((enum rtx_code) (base)->code) == REG))
     {
       unsigned int base_regno = (((base)->u.fld[0]).rtuint);
       if (base_regno == ui)
  ((reg_base_value)->data.rtx1[ui]) = 0;
       else
  ((reg_base_value)->data.rtx1[ui])
    = ((reg_base_value)->data.rtx1[base_regno]);
       changed = 1;
     }
 }
    }
  while (changed && pass < 10);
  free (new_reg_base_value);
  new_reg_base_value = 0;
  free (reg_seen);
  reg_seen = 0;
  timevar_pop (TV_ALIAS_ANALYSIS);
}
void
end_alias_analysis (void)
{
  old_reg_base_value = reg_base_value;
  ggc_free (reg_known_value);
  reg_known_value = 0;
  reg_known_value_size = 0;
  free (reg_known_equiv_p);
  reg_known_equiv_p = 0;
  if (alias_invariant)
    {
      ggc_free (alias_invariant);
      alias_invariant = 0;
      alias_invariant_size = 0;
    }
}
void
gt_ggc_mx_alias_set_entry (void *x_p)
{
  struct alias_set_entry * const x = (struct alias_set_entry *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      gt_ggc_m_II12splay_tree_s ((*x).children);
    }
}
void
gt_ggc_m_P15alias_set_entry15varray_head_tag (void *x_p)
{
  struct varray_head_tag * const x = (struct varray_head_tag *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      switch ((*x).type)
        {
        case VARRAY_DATA_C:
          break;
        case VARRAY_DATA_UC:
          break;
        case VARRAY_DATA_S:
          break;
        case VARRAY_DATA_US:
          break;
        case VARRAY_DATA_I:
          break;
        case VARRAY_DATA_U:
          break;
        case VARRAY_DATA_L:
          break;
        case VARRAY_DATA_UL:
          break;
        case VARRAY_DATA_HINT:
          break;
        case VARRAY_DATA_UHINT:
          break;
        case VARRAY_DATA_GENERIC:
          {
            size_t i10;
            for (i10 = 0; i10 < (size_t)((*x).num_elements); i10++) {
              do { if ((*x).data.generic[i10] != ((void *)0)) gt_ggc_mx_alias_set_entry ((*x).data.generic[i10]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CPTR:
          {
            size_t i11;
            for (i11 = 0; i11 < (size_t)((*x).num_elements); i11++) {
            }
          }
          break;
        case VARRAY_DATA_RTX:
          {
            size_t i12;
            for (i12 = 0; i12 < (size_t)((*x).num_elements); i12++) {
              do { if ((*x).data.rtx1[i12] != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.rtx1[i12]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_RTVEC:
          {
            size_t i13;
            for (i13 = 0; i13 < (size_t)((*x).num_elements); i13++) {
              do { if ((*x).data.rtvec1[i13] != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).data.rtvec1[i13]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TREE:
          {
            size_t i14;
            for (i14 = 0; i14 < (size_t)((*x).num_elements); i14++) {
              do { if ((*x).data.tree1[i14] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).data.tree1[i14]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_BITMAP:
          {
            size_t i15;
            for (i15 = 0; i15 < (size_t)((*x).num_elements); i15++) {
              do { if ((*x).data.bitmap1[i15] != ((void *)0)) gt_ggc_mx_bitmap_head_def ((*x).data.bitmap1[i15]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CONST_EQUIV:
          {
            size_t i16;
            for (i16 = 0; i16 < (size_t)((*x).num_elements); i16++) {
              do { if ((*x).data.const_equiv[i16].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.const_equiv[i16].rtx1); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TE:
          {
            size_t i17;
            for (i17 = 0; i17 < (size_t)((*x).num_elements); i17++) {
              do { if ((*x).data.te[i17] != ((void *)0)) gt_ggc_mx_elt_list ((*x).data.te[i17]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_EDGE:
          {
            size_t i18;
            for (i18 = 0; i18 < (size_t)((*x).num_elements); i18++) {
              do { if ((*x).data.e[i18] != ((void *)0)) gt_ggc_mx_edge_def ((*x).data.e[i18]); } while (0);
            }
          }
          break;
        default:
          break;
        }
    }
}
void
gt_pch_nx_alias_set_entry (void *x_p)
{
  struct alias_set_entry * const x = (struct alias_set_entry *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_15alias_set_entry))
    {
      gt_pch_n_II12splay_tree_s ((*x).children);
    }
}
void
gt_pch_n_P15alias_set_entry15varray_head_tag (void *x_p)
{
  struct varray_head_tag * const x = (struct varray_head_tag *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P15alias_set_entry15varray_head_tag))
    {
      gt_pch_n_S ((*x).name);
      switch ((*x).type)
        {
        case VARRAY_DATA_C:
          break;
        case VARRAY_DATA_UC:
          break;
        case VARRAY_DATA_S:
          break;
        case VARRAY_DATA_US:
          break;
        case VARRAY_DATA_I:
          break;
        case VARRAY_DATA_U:
          break;
        case VARRAY_DATA_L:
          break;
        case VARRAY_DATA_UL:
          break;
        case VARRAY_DATA_HINT:
          break;
        case VARRAY_DATA_UHINT:
          break;
        case VARRAY_DATA_GENERIC:
          {
            size_t i10;
            for (i10 = 0; i10 < (size_t)((*x).num_elements); i10++) {
              do { if ((*x).data.generic[i10] != ((void *)0)) gt_pch_nx_alias_set_entry ((*x).data.generic[i10]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CPTR:
          {
            size_t i11;
            for (i11 = 0; i11 < (size_t)((*x).num_elements); i11++) {
              gt_pch_n_S ((*x).data.cptr[i11]);
            }
          }
          break;
        case VARRAY_DATA_RTX:
          {
            size_t i12;
            for (i12 = 0; i12 < (size_t)((*x).num_elements); i12++) {
              do { if ((*x).data.rtx1[i12] != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.rtx1[i12]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_RTVEC:
          {
            size_t i13;
            for (i13 = 0; i13 < (size_t)((*x).num_elements); i13++) {
              do { if ((*x).data.rtvec1[i13] != ((void *)0)) gt_pch_nx_rtvec_def ((*x).data.rtvec1[i13]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TREE:
          {
            size_t i14;
            for (i14 = 0; i14 < (size_t)((*x).num_elements); i14++) {
              do { if ((*x).data.tree1[i14] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).data.tree1[i14]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_BITMAP:
          {
            size_t i15;
            for (i15 = 0; i15 < (size_t)((*x).num_elements); i15++) {
              do { if ((*x).data.bitmap1[i15] != ((void *)0)) gt_pch_nx_bitmap_head_def ((*x).data.bitmap1[i15]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CONST_EQUIV:
          {
            size_t i16;
            for (i16 = 0; i16 < (size_t)((*x).num_elements); i16++) {
              do { if ((*x).data.const_equiv[i16].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.const_equiv[i16].rtx1); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TE:
          {
            size_t i17;
            for (i17 = 0; i17 < (size_t)((*x).num_elements); i17++) {
              do { if ((*x).data.te[i17] != ((void *)0)) gt_pch_nx_elt_list ((*x).data.te[i17]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_EDGE:
          {
            size_t i18;
            for (i18 = 0; i18 < (size_t)((*x).num_elements); i18++) {
              do { if ((*x).data.e[i18] != ((void *)0)) gt_pch_nx_edge_def ((*x).data.e[i18]); } while (0);
            }
          }
          break;
        default:
          break;
        }
    }
}
void
gt_pch_p_15alias_set_entry (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct alias_set_entry * const x = (struct alias_set_entry *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).children), cookie);
}
void
gt_pch_p_P15alias_set_entry15varray_head_tag (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct varray_head_tag * const x = (struct varray_head_tag *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).name), cookie);
  switch ((*x).type)
    {
    case VARRAY_DATA_C:
      break;
    case VARRAY_DATA_UC:
      break;
    case VARRAY_DATA_S:
      break;
    case VARRAY_DATA_US:
      break;
    case VARRAY_DATA_I:
      break;
    case VARRAY_DATA_U:
      break;
    case VARRAY_DATA_L:
      break;
    case VARRAY_DATA_UL:
      break;
    case VARRAY_DATA_HINT:
      break;
    case VARRAY_DATA_UHINT:
      break;
    case VARRAY_DATA_GENERIC:
      {
        size_t i10;
        for (i10 = 0; i10 < (size_t)((*x).num_elements); i10++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.generic[i10]), cookie);
        }
      }
      break;
    case VARRAY_DATA_CPTR:
      {
        size_t i11;
        for (i11 = 0; i11 < (size_t)((*x).num_elements); i11++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.cptr[i11]), cookie);
        }
      }
      break;
    case VARRAY_DATA_RTX:
      {
        size_t i12;
        for (i12 = 0; i12 < (size_t)((*x).num_elements); i12++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.rtx1[i12]), cookie);
        }
      }
      break;
    case VARRAY_DATA_RTVEC:
      {
        size_t i13;
        for (i13 = 0; i13 < (size_t)((*x).num_elements); i13++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.rtvec1[i13]), cookie);
        }
      }
      break;
    case VARRAY_DATA_TREE:
      {
        size_t i14;
        for (i14 = 0; i14 < (size_t)((*x).num_elements); i14++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.tree1[i14]), cookie);
        }
      }
      break;
    case VARRAY_DATA_BITMAP:
      {
        size_t i15;
        for (i15 = 0; i15 < (size_t)((*x).num_elements); i15++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.bitmap1[i15]), cookie);
        }
      }
      break;
    case VARRAY_DATA_CONST_EQUIV:
      {
        size_t i16;
        for (i16 = 0; i16 < (size_t)((*x).num_elements); i16++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.const_equiv[i16].rtx1), cookie);
        }
      }
      break;
    case VARRAY_DATA_TE:
      {
        size_t i17;
        for (i17 = 0; i17 < (size_t)((*x).num_elements); i17++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.te[i17]), cookie);
        }
      }
      break;
    case VARRAY_DATA_EDGE:
      {
        size_t i18;
        for (i18 = 0; i18 < (size_t)((*x).num_elements); i18++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.e[i18]), cookie);
        }
      }
      break;
    default:
      break;
    }
}
static void gt_ggc_ma_reg_known_value (void *);
static void
gt_ggc_ma_reg_known_value (void *x_p )
{
  if (reg_known_value != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(reg_known_value_size); i0++) {
      do { if (reg_known_value[i0] != ((void *)0)) gt_ggc_mx_rtx_def (reg_known_value[i0]); } while (0);
    }
    do { const void *const a__ = (reg_known_value); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
  }
}
static void gt_pch_pa_reg_known_value
    (void *, void *, gt_pointer_operator, void *);
static void gt_pch_pa_reg_known_value (void *this_obj ,
      void *x_p ,
      gt_pointer_operator op ,
      void *cookie )
{
  if (reg_known_value != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(reg_known_value_size); i0++) {
      if ((void *)(reg_known_value) == this_obj)
        op (&(reg_known_value[i0]), cookie);
    }
    if ((void *)(&reg_known_value) == this_obj)
      op (&(reg_known_value), cookie);
  }
}
static void gt_pch_na_reg_known_value (void *);
static void
gt_pch_na_reg_known_value (void *x_p )
{
  if (reg_known_value != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)(reg_known_value_size); i1++) {
      do { if (reg_known_value[i1] != ((void *)0)) gt_pch_nx_rtx_def (reg_known_value[i1]); } while (0);
    }
    gt_pch_note_object (reg_known_value, &reg_known_value, gt_pch_pa_reg_known_value);
  }
}
static void gt_ggc_ma_alias_invariant (void *);
static void
gt_ggc_ma_alias_invariant (void *x_p )
{
  if (alias_invariant != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(alias_invariant_size); i0++) {
      do { if (alias_invariant[i0] != ((void *)0)) gt_ggc_mx_rtx_def (alias_invariant[i0]); } while (0);
    }
    do { const void *const a__ = (alias_invariant); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
  }
}
static void gt_pch_pa_alias_invariant
    (void *, void *, gt_pointer_operator, void *);
static void gt_pch_pa_alias_invariant (void *this_obj ,
      void *x_p ,
      gt_pointer_operator op ,
      void *cookie )
{
  if (alias_invariant != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(alias_invariant_size); i0++) {
      if ((void *)(alias_invariant) == this_obj)
        op (&(alias_invariant[i0]), cookie);
    }
    if ((void *)(&alias_invariant) == this_obj)
      op (&(alias_invariant), cookie);
  }
}
static void gt_pch_na_alias_invariant (void *);
static void
gt_pch_na_alias_invariant (void *x_p )
{
  if (alias_invariant != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)(alias_invariant_size); i1++) {
      do { if (alias_invariant[i1] != ((void *)0)) gt_pch_nx_rtx_def (alias_invariant[i1]); } while (0);
    }
    gt_pch_note_object (alias_invariant, &alias_invariant, gt_pch_pa_alias_invariant);
  }
}
const struct ggc_root_tab gt_ggc_r_gt_alias_h[] = {
  {
    &alias_sets,
    1,
    sizeof (alias_sets),
    &gt_ggc_m_P15alias_set_entry15varray_head_tag,
    &gt_pch_n_P15alias_set_entry15varray_head_tag
  },
  {
    &reg_known_value,
    1,
    sizeof (reg_known_value),
    &gt_ggc_ma_reg_known_value,
    &gt_pch_na_reg_known_value
  },
  {
    &alias_invariant,
    1,
    sizeof (alias_invariant),
    &gt_ggc_ma_alias_invariant,
    &gt_pch_na_alias_invariant
  },
  {
    &static_reg_base_value[0],
    1 * (53),
    sizeof (static_reg_base_value[0]),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &reg_base_value,
    1,
    sizeof (reg_base_value),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_ggc_rd_gt_alias_h[] = {
  { &old_reg_base_value, 1, sizeof (old_reg_base_value), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_alias_h[] = {
  { &frame_set, 1, sizeof (frame_set), ((void *)0), ((void *)0) },
  { &varargs_set, 1, sizeof (varargs_set), ((void *)0), ((void *)0) },
  { &last_alias_set, 1, sizeof (last_alias_set), ((void *)0), ((void *)0) },
  { &reg_known_value_size, 1, sizeof (reg_known_value_size), ((void *)0), ((void *)0) },
  { &alias_invariant_size, 1, sizeof (alias_invariant_size), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
extern rtx cfg_layout_function_footer;
extern void cfg_layout_initialize (void);
extern void cfg_layout_finalize (void);
extern void insn_locators_initialize (void);
extern void reemit_insn_block_notes (void);
extern unsigned char can_copy_bbs_p (basic_block *, unsigned);
extern void copy_bbs (basic_block *, unsigned, basic_block *,
        edge *, unsigned, edge *, struct loop *);
extern unsigned char scan_ahead_for_unlikely_executed_note (rtx);
extern rtx duplicate_insn_chain (rtx, rtx);
static int branch_threshold[5] = {400, 200, 100, 0, 0};
static int exec_threshold[5] = {500, 200, 50, 0, 0};
static int uncond_jump_length;
typedef struct bbro_basic_block_data_def
{
  int start_of_trace;
  int end_of_trace;
  fibheap_t heap;
  fibnode_t node;
} bbro_basic_block_data;
static int array_size;
static bbro_basic_block_data *bbd;
struct trace
{
  basic_block first, last;
  int round;
  int length;
};
int max_entry_frequency;
gcov_type max_entry_count;
static void find_traces (int *, struct trace *);
static basic_block rotate_loop (edge, struct trace *, int);
static void mark_bb_visited (basic_block, int);
static void find_traces_1_round (int, int, gcov_type, struct trace *, int *,
     int, fibheap_t *, int);
static basic_block copy_bb (basic_block, edge, basic_block, int);
static fibheapkey_t bb_to_key (basic_block);
static unsigned char better_edge_p (basic_block, edge, int, int, int, int, edge);
static void connect_traces (int, struct trace *);
static unsigned char copy_bb_p (basic_block, int);
static int get_uncond_jump_length (void);
static unsigned char push_to_next_round_p (basic_block, int, int, int, gcov_type);
static void add_unlikely_executed_notes (void);
static void find_rarely_executed_basic_blocks_and_crossing_edges (edge *,
          int *,
          int *);
static void mark_bb_for_unlikely_executed_section (basic_block);
static void add_labels_and_missing_jumps (edge *, int);
static void add_reg_crossing_jump_notes (void);
static void fix_up_fall_thru_edges (void);
static void fix_edges_for_rarely_executed_code (edge *, int);
static void fix_crossing_conditional_branches (void);
static void fix_crossing_unconditional_branches (void);
static unsigned char
push_to_next_round_p (basic_block bb, int round, int number_of_rounds,
        int exec_th, gcov_type count_th)
{
  unsigned char there_exists_another_round;
  unsigned char cold_block;
  unsigned char block_not_hot_enough;
  there_exists_another_round = round < number_of_rounds - 1;
  cold_block = (flag_reorder_blocks_and_partition
  && bb->partition1 == 2);
  block_not_hot_enough = (bb->frequency < exec_th
     || bb->count < count_th
     || probably_never_executed_bb_p (bb));
  if (there_exists_another_round
      && (cold_block || block_not_hot_enough))
    return 1;
  else
    return 0;
}
static void
find_traces (int *n_traces, struct trace *traces)
{
  int i;
  int number_of_rounds;
  edge e;
  fibheap_t heap;
  number_of_rounds = 5 - 1;
  if (flag_reorder_blocks_and_partition)
    number_of_rounds = 5;
  heap = fibheap_new ();
  max_entry_frequency = 0;
  max_entry_count = 0;
  for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
    {
      bbd[e->dest->index].heap = heap;
      bbd[e->dest->index].node = fibheap_insert (heap, bb_to_key (e->dest),
          e->dest);
      if (e->dest->frequency > max_entry_frequency)
 max_entry_frequency = e->dest->frequency;
      if (e->dest->count > max_entry_count)
 max_entry_count = e->dest->count;
    }
  for (i = 0; i < number_of_rounds; i++)
    {
      gcov_type count_threshold;
      if (dump_file)
 fprintf (dump_file, "STC - round %d\n", i + 1);
      if (max_entry_count < 2147483647 / 1000)
 count_threshold = max_entry_count * exec_threshold[i] / 1000;
      else
 count_threshold = max_entry_count / 1000 * exec_threshold[i];
      find_traces_1_round (10000 * branch_threshold[i] / 1000,
      max_entry_frequency * exec_threshold[i] / 1000,
      count_threshold, traces, n_traces, i, &heap,
      number_of_rounds);
    }
  fibheap_delete (heap);
  if (dump_file)
    {
      for (i = 0; i < *n_traces; i++)
 {
   basic_block bb;
   fprintf (dump_file, "Trace %d (round %d):  ", i + 1,
     traces[i].round + 1);
   for (bb = traces[i].first; bb != traces[i].last; bb = bb->rbi->next)
     fprintf (dump_file, "%d [%d] ", bb->index, bb->frequency);
   fprintf (dump_file, "%d [%d]\n", bb->index, bb->frequency);
 }
      fflush (dump_file);
    }
}
static basic_block
rotate_loop (edge back_edge, struct trace *trace, int trace_n)
{
  basic_block bb;
  basic_block best_bb = ((void *)0);
  edge best_edge = ((void *)0);
  int best_freq = -1;
  gcov_type best_count = -1;
  unsigned char is_preferred = 0;
  bb = back_edge->dest;
  do
    {
      edge e;
      for (e = bb->succ; e; e = e->succ_next)
 if (e->dest != EXIT_BLOCK_PTR
     && e->dest->rbi->visited != trace_n
     && (e->flags & 64)
     && !(e->flags & (2 | 4 | 8)))
 {
   if (is_preferred)
     {
       if (!e->dest->rbi->visited
    || bbd[e->dest->index].start_of_trace >= 0)
  {
    int freq = (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
    if (freq > best_freq || e->count > best_count)
      {
        best_freq = freq;
        best_count = e->count;
        best_edge = e;
        best_bb = bb;
      }
  }
     }
   else
     {
       if (!e->dest->rbi->visited
    || bbd[e->dest->index].start_of_trace >= 0)
  {
    is_preferred = 1;
    best_freq = (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
    best_count = e->count;
    best_edge = e;
    best_bb = bb;
  }
       else
  {
    int freq = (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
    if (!best_edge || freq > best_freq || e->count > best_count)
      {
        best_freq = freq;
        best_count = e->count;
        best_edge = e;
        best_bb = bb;
      }
  }
     }
 }
      bb = bb->rbi->next;
    }
  while (bb != back_edge->dest);
  if (best_bb)
    {
      if (back_edge->dest == trace->first)
 {
   trace->first = best_bb->rbi->next;
 }
      else
 {
   basic_block prev_bb;
   for (prev_bb = trace->first;
        prev_bb->rbi->next != back_edge->dest;
        prev_bb = prev_bb->rbi->next)
     ;
   prev_bb->rbi->next = best_bb->rbi->next;
   if (prev_bb->succ && !prev_bb->succ->succ_next)
     {
       basic_block header1 = prev_bb->succ->dest;
       if (any_condjump_p ((header1)->end_) && copy_bb_p (header1, 0))
  {
    copy_bb (header1, prev_bb->succ, prev_bb, trace_n);
  }
     }
 }
    }
  else
    {
      best_bb = back_edge->src;
    }
  best_bb->rbi->next = ((void *)0);
  return best_bb;
}
static void
mark_bb_visited (basic_block bb, int trace)
{
  bb->rbi->visited = trace;
  if (bbd[bb->index].heap)
    {
      fibheap_delete_node (bbd[bb->index].heap, bbd[bb->index].node);
      bbd[bb->index].heap = ((void *)0);
      bbd[bb->index].node = ((void *)0);
    }
}
static void
find_traces_1_round (int branch_th, int exec_th, gcov_type count_th,
       struct trace *traces, int *n_traces, int round,
       fibheap_t *heap, int number_of_rounds)
{
  int last_round = 5 - 1;
  fibheap_t new_heap = fibheap_new ();
  while (!fibheap_empty (*heap))
    {
      basic_block bb;
      struct trace *trace;
      edge best_edge, e;
      fibheapkey_t key;
      bb = fibheap_extract_min (*heap);
      bbd[bb->index].heap = ((void *)0);
      bbd[bb->index].node = ((void *)0);
      if (dump_file)
 fprintf (dump_file, "Getting bb %d\n", bb->index);
      if (push_to_next_round_p (bb, round, number_of_rounds, exec_th,
    count_th))
 {
   int key = bb_to_key (bb);
   bbd[bb->index].heap = new_heap;
   bbd[bb->index].node = fibheap_insert (new_heap, key, bb);
   if (dump_file)
     fprintf (dump_file,
       "  Possible start point of next round: %d (key: %d)\n",
       bb->index, key);
   continue;
 }
      trace = traces + *n_traces;
      trace->first = bb;
      trace->round = round;
      trace->length = 0;
      (*n_traces)++;
      do
 {
   int prob, freq;
   int best_prob = (-2147483647 - 1) / 2;
   int best_freq = (-2147483647 - 1) / 2;
   best_edge = ((void *)0);
   mark_bb_visited (bb, *n_traces);
   trace->length++;
   if (dump_file)
     fprintf (dump_file, "Basic block %d was visited in trace %d\n",
       bb->index, *n_traces - 1);
   for (e = bb->succ; e; e = e->succ_next)
     {
       if (e->dest == EXIT_BLOCK_PTR)
  continue;
       if (e->dest->rbi->visited
    && e->dest->rbi->visited != *n_traces)
  continue;
       if (e->dest->partition1 == 2
    && round < last_round)
  continue;
       prob = e->probability;
       freq = (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
       if (!(e->flags & 64) || (e->flags & (2 | 4 | 8))
    || prob < branch_th || freq < exec_th || e->count < count_th)
  continue;
       if (better_edge_p (bb, e, prob, freq, best_prob, best_freq,
     best_edge))
  {
    best_edge = e;
    best_prob = prob;
    best_freq = freq;
  }
     }
   if (best_edge && best_edge->dest->pred->pred_next
       && copy_bb_p (best_edge->dest, 0))
     best_edge = ((void *)0);
   for (e = bb->succ; e; e = e->succ_next)
     {
       if (e == best_edge
    || e->dest == EXIT_BLOCK_PTR
    || e->dest->rbi->visited)
  continue;
       key = bb_to_key (e->dest);
       if (bbd[e->dest->index].heap)
  {
    if (key != bbd[e->dest->index].node->key)
      {
        if (dump_file)
   {
     fprintf (dump_file,
       "Changing key for bb %d from %ld to %ld.\n",
       e->dest->index,
       (long) bbd[e->dest->index].node->key,
       key);
   }
        fibheap_replace_key (bbd[e->dest->index].heap,
        bbd[e->dest->index].node, key);
      }
  }
       else
  {
    fibheap_t which_heap = *heap;
    prob = e->probability;
    freq = (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
    if (!(e->flags & 64)
        || (e->flags & (2 | 4 | 8))
        || prob < branch_th || freq < exec_th
        || e->count < count_th)
      {
        if (push_to_next_round_p (e->dest, round,
      number_of_rounds,
      exec_th, count_th))
   which_heap = new_heap;
      }
    bbd[e->dest->index].heap = which_heap;
    bbd[e->dest->index].node = fibheap_insert (which_heap,
        key, e->dest);
    if (dump_file)
      {
        fprintf (dump_file,
          "  Possible start of %s round: %d (key: %ld)\n",
          (which_heap == new_heap) ? "next" : "this",
          e->dest->index, (long) key);
      }
  }
     }
   if (best_edge)
     {
       if (best_edge->dest->rbi->visited == *n_traces)
  {
    if (best_edge->dest != bb)
      {
        if ((((best_edge)->src->frequency * (best_edge)->probability + 10000 / 2) / 10000)
     > 4 * best_edge->dest->frequency / 5)
   {
     if (best_edge->dest != ENTRY_BLOCK_PTR->next_bb)
       {
         if (dump_file)
    {
      fprintf (dump_file,
        "Rotating loop %d - %d\n",
        best_edge->dest->index, bb->index);
    }
         bb->rbi->next = best_edge->dest;
         bb = rotate_loop (best_edge, trace, *n_traces);
       }
   }
        else
   {
     edge another_edge;
     for (another_edge = bb->succ;
          another_edge;
          another_edge = another_edge->succ_next)
       if (another_edge != best_edge)
         break;
     if (!another_edge && copy_bb_p (best_edge->dest,
         !optimize_size))
       {
         bb = copy_bb (best_edge->dest, best_edge, bb,
         *n_traces);
       }
   }
      }
    break;
  }
       else
  {
    for (e = bb->succ; e; e = e->succ_next)
      if (e != best_edge
   && (e->flags & 64)
   && !(e->flags & (2 | 4 | 8))
   && !e->dest->rbi->visited
   && !e->dest->pred->pred_next
   && !e->crossing_edge
   && e->dest->succ
   && (e->dest->succ->flags & 64)
   && !(e->dest->succ->flags & (2 | 4 | 8))
   && !e->dest->succ->succ_next
   && e->dest->succ->dest == best_edge->dest
   && 2 * e->dest->frequency >= (((best_edge)->src->frequency * (best_edge)->probability + 10000 / 2) / 10000))
        {
   best_edge = e;
   if (dump_file)
     fprintf (dump_file, "Selecting BB %d\n",
       best_edge->dest->index);
   break;
        }
    bb->rbi->next = best_edge->dest;
    bb = best_edge->dest;
  }
     }
 }
      while (best_edge);
      trace->last = bb;
      bbd[trace->first->index].start_of_trace = *n_traces - 1;
      bbd[trace->last->index].end_of_trace = *n_traces - 1;
      for (e = bb->succ; e; e = e->succ_next)
 {
   if (e->dest == EXIT_BLOCK_PTR
       || e->dest->rbi->visited)
     continue;
   if (bbd[e->dest->index].heap)
     {
       key = bb_to_key (e->dest);
       if (key != bbd[e->dest->index].node->key)
  {
    if (dump_file)
      {
        fprintf (dump_file,
          "Changing key for bb %d from %ld to %ld.\n",
          e->dest->index,
          (long) bbd[e->dest->index].node->key, key);
      }
    fibheap_replace_key (bbd[e->dest->index].heap,
           bbd[e->dest->index].node,
           key);
  }
     }
 }
    }
  fibheap_delete (*heap);
  *heap = new_heap;
}
static basic_block
copy_bb (basic_block old_bb, edge e, basic_block bb, int trace)
{
  basic_block new_bb;
  new_bb = duplicate_block (old_bb, e);
  if (e->dest != new_bb)
    fancy_abort ("gcc.c", 374192, "?");
  if (e->dest->rbi->visited)
    fancy_abort ("gcc.c", 374194, "?");
  if (dump_file)
    fprintf (dump_file,
      "Duplicated bb %d (created bb %d)\n",
      old_bb->index, new_bb->index);
  new_bb->rbi->visited = trace;
  new_bb->rbi->next = bb->rbi->next;
  bb->rbi->next = new_bb;
  if (new_bb->index >= array_size || last_basic_block > array_size)
    {
      int i;
      int new_size;
      new_size = ((last_basic_block) > (new_bb->index + 1) ? (last_basic_block) : (new_bb->index + 1));
      new_size = ((((new_size) / 4) + 1) * 5);
      bbd = xrealloc (bbd, new_size * sizeof (bbro_basic_block_data));
      for (i = array_size; i < new_size; i++)
 {
   bbd[i].start_of_trace = -1;
   bbd[i].end_of_trace = -1;
   bbd[i].heap = ((void *)0);
   bbd[i].node = ((void *)0);
 }
      array_size = new_size;
      if (dump_file)
 {
   fprintf (dump_file,
     "Growing the dynamic array to %d elements.\n",
     array_size);
 }
    }
  return new_bb;
}
static fibheapkey_t
bb_to_key (basic_block bb)
{
  edge e;
  int priority = 0;
  if (bb->partition1 == 2 || probably_never_executed_bb_p (bb))
    return 10000;
  for (e = bb->pred; e; e = e->pred_next)
    {
      if ((e->src != ENTRY_BLOCK_PTR && bbd[e->src->index].end_of_trace >= 0)
   || (e->flags & 32))
 {
   int edge_freq = (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
   if (edge_freq > priority)
     priority = edge_freq;
 }
    }
  if (priority)
    return -(100 * 10000 + 100 * priority + bb->frequency);
  return -bb->frequency;
}
static unsigned char
better_edge_p (basic_block bb, edge e, int prob, int freq, int best_prob,
        int best_freq, edge cur_best_edge)
{
  unsigned char is_better_edge;
  int diff_prob = best_prob / 10;
  int diff_freq = best_freq / 10;
  if (prob > best_prob + diff_prob)
    is_better_edge = 1;
  else if (prob < best_prob - diff_prob)
    is_better_edge = 0;
  else if (freq < best_freq - diff_freq)
    is_better_edge = 1;
  else if (freq > best_freq + diff_freq)
    is_better_edge = 0;
  else if (e->dest->prev_bb == bb)
    is_better_edge = 1;
  else
    is_better_edge = 0;
  if (!is_better_edge
      && flag_reorder_blocks_and_partition
      && cur_best_edge
      && cur_best_edge->crossing_edge
      && !e->crossing_edge)
    is_better_edge = 1;
  return is_better_edge;
}
static void
connect_traces (int n_traces, struct trace *traces)
{
  int i;
  int unconnected_hot_trace_count = 0;
  unsigned char cold_connected = 1;
  unsigned char *connected;
  unsigned char *cold_traces;
  int last_trace;
  int freq_threshold;
  gcov_type count_threshold;
  freq_threshold = max_entry_frequency * 100 / 1000;
  if (max_entry_count < 2147483647 / 1000)
    count_threshold = max_entry_count * 100 / 1000;
  else
    count_threshold = max_entry_count / 1000 * 100;
  connected = xcalloc (n_traces, sizeof (unsigned char));
  last_trace = -1;
  cold_traces = xcalloc (n_traces, sizeof (unsigned char));
  if (flag_reorder_blocks_and_partition)
    for (i = 0; i < n_traces; i++)
      {
 if (traces[i].first->partition1 == 2)
   {
     connected[i] = 1;
     cold_traces[i] = 1;
     cold_connected = 0;
   }
 else
   unconnected_hot_trace_count++;
      }
  for (i = 0; i < n_traces || !cold_connected ; i++)
    {
      int t = i;
      int t2;
      edge e, best;
      int best_len;
      if (flag_reorder_blocks_and_partition
   && (i >= n_traces || unconnected_hot_trace_count <= 0)
   && !cold_connected)
 {
   int j;
   int first_cold_trace = -1;
   for (j = 0; j < n_traces; j++)
     if (cold_traces[j])
       {
  connected[j] = 0;
  if (first_cold_trace == -1)
    first_cold_trace = j;
       }
   i = t = first_cold_trace;
   cold_connected = 1;
 }
      if (connected[t])
 continue;
      connected[t] = 1;
      if (unconnected_hot_trace_count > 0)
 unconnected_hot_trace_count--;
      for (t2 = t; t2 > 0;)
 {
   best = ((void *)0);
   best_len = 0;
   for (e = traces[t2].first->pred; e; e = e->pred_next)
     {
       int si = e->src->index;
       if (e->src != ENTRY_BLOCK_PTR
    && (e->flags & 64)
    && !(e->flags & (2 | 4 | 8))
    && bbd[si].end_of_trace >= 0
    && !connected[bbd[si].end_of_trace]
    && (!best
        || e->probability > best->probability
        || (e->probability == best->probability
     && traces[bbd[si].end_of_trace].length > best_len)))
  {
    best = e;
    best_len = traces[bbd[si].end_of_trace].length;
  }
     }
   if (best)
     {
       best->src->rbi->next = best->dest;
       t2 = bbd[best->src->index].end_of_trace;
       connected[t2] = 1;
       if (unconnected_hot_trace_count > 0)
  unconnected_hot_trace_count--;
       if (dump_file)
  {
    fprintf (dump_file, "Connection: %d %d\n",
      best->src->index, best->dest->index);
  }
     }
   else
     break;
 }
      if (last_trace >= 0)
 traces[last_trace].last->rbi->next = traces[t2].first;
      last_trace = t;
      while (1)
 {
   best = ((void *)0);
   best_len = 0;
   for (e = traces[t].last->succ; e; e = e->succ_next)
     {
       int di = e->dest->index;
       if (e->dest != EXIT_BLOCK_PTR
    && (e->flags & 64)
    && !(e->flags & (2 | 4 | 8))
    && bbd[di].start_of_trace >= 0
    && !connected[bbd[di].start_of_trace]
    && (!best
        || e->probability > best->probability
        || (e->probability == best->probability
     && traces[bbd[di].start_of_trace].length > best_len)))
  {
    best = e;
    best_len = traces[bbd[di].start_of_trace].length;
  }
     }
   if (best)
     {
       if (dump_file)
  {
    fprintf (dump_file, "Connection: %d %d\n",
      best->src->index, best->dest->index);
  }
       t = bbd[best->dest->index].start_of_trace;
       traces[last_trace].last->rbi->next = traces[t].first;
       connected[t] = 1;
       if (unconnected_hot_trace_count > 0)
  unconnected_hot_trace_count--;
       last_trace = t;
     }
   else
     {
       edge e2;
       basic_block next_bb = ((void *)0);
       unsigned char try_copy = 0;
       for (e = traces[t].last->succ; e; e = e->succ_next)
  if (e->dest != EXIT_BLOCK_PTR
      && (e->flags & 64)
      && !(e->flags & (2 | 4 | 8))
      && (!best || e->probability > best->probability))
    {
      edge best2 = ((void *)0);
      int best2_len = 0;
      if (bbd[e->dest->index].start_of_trace >= 0
   && traces[bbd[e->dest->index].start_of_trace].length
      == 1)
        {
   best = e;
   try_copy = 1;
   continue;
        }
      for (e2 = e->dest->succ; e2; e2 = e2->succ_next)
        {
   int di = e2->dest->index;
   if (e2->dest == EXIT_BLOCK_PTR
       || ((e2->flags & 64)
    && !(e2->flags & (2 | 4 | 8))
    && bbd[di].start_of_trace >= 0
    && !connected[bbd[di].start_of_trace]
    && ((((e2)->src->frequency * (e2)->probability + 10000 / 2) / 10000) >= freq_threshold)
    && (e2->count >= count_threshold)
    && (!best2
        || e2->probability > best2->probability
        || (e2->probability == best2->probability
     && traces[bbd[di].start_of_trace].length
        > best2_len))))
     {
       best = e;
       best2 = e2;
       if (e2->dest != EXIT_BLOCK_PTR)
         best2_len = traces[bbd[di].start_of_trace].length;
       else
         best2_len = 2147483647;
       next_bb = e2->dest;
       try_copy = 1;
     }
        }
    }
       if (flag_reorder_blocks_and_partition)
  try_copy = 0;
       if (try_copy
    && copy_bb_p (best->dest,
    !optimize_size
    && (((best)->src->frequency * (best)->probability + 10000 / 2) / 10000) >= freq_threshold
    && best->count >= count_threshold))
  {
    basic_block new_bb;
    if (dump_file)
      {
        fprintf (dump_file, "Connection: %d %d ",
          traces[t].last->index, best->dest->index);
        if (!next_bb)
   fputc_unlocked ('\n', dump_file);
        else if (next_bb == EXIT_BLOCK_PTR)
   fprintf (dump_file, "exit\n");
        else
   fprintf (dump_file, "%d\n", next_bb->index);
      }
    new_bb = copy_bb (best->dest, best, traces[t].last, t);
    traces[t].last = new_bb;
    if (next_bb && next_bb != EXIT_BLOCK_PTR)
      {
        t = bbd[next_bb->index].start_of_trace;
        traces[last_trace].last->rbi->next = traces[t].first;
        connected[t] = 1;
        if (unconnected_hot_trace_count > 0)
   unconnected_hot_trace_count--;
        last_trace = t;
      }
    else
      break;
  }
       else
  break;
     }
 }
    }
  if (dump_file)
    {
      basic_block bb;
      fprintf (dump_file, "Final order:\n");
      for (bb = traces[0].first; bb; bb = bb->rbi->next)
 fprintf (dump_file, "%d ", bb->index);
      fprintf (dump_file, "\n");
      fflush (dump_file);
    }
  do { if (connected) { free (connected); connected = 0; } else { fancy_abort ("gcc.c", 374599, "?"); } } while (0);
  do { if (cold_traces) { free (cold_traces); cold_traces = 0; } else { fancy_abort ("gcc.c", 374600, "?"); } } while (0);
}
static unsigned char
copy_bb_p (basic_block bb, int code_may_grow)
{
  int size = 0;
  int max_size = uncond_jump_length;
  rtx insn;
  int n_succ;
  edge e;
  if (!bb->frequency)
    return 0;
  if (!bb->pred || !bb->pred->pred_next)
    return 0;
  if (!can_duplicate_block_p (bb))
    return 0;
  n_succ = 0;
  for (e = bb->succ; e; e = e->succ_next)
    {
      n_succ++;
      if (n_succ > 8)
 return 0;
    }
  if (code_may_grow && maybe_hot_bb_p (bb))
    max_size *= 8;
  for (insn = (bb)->head_; insn != ((((bb)->end_)->u.fld[2]).rtx1);
       insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 size += get_attr_length (insn);
    }
  if (size <= max_size)
    return 1;
  if (dump_file)
    {
      fprintf (dump_file,
        "Block %d can't be copied because its size = %d.\n",
        bb->index, size);
    }
  return 0;
}
static int
get_uncond_jump_length (void)
{
  rtx label, jump;
  int length;
  label = emit_label_before (gen_label_rtx (), get_insns ());
  jump = emit_jump_insn (gen_jump (label));
  length = get_attr_length (jump);
  delete_insn (jump);
  delete_insn (label);
  return length;
}
static void
add_unlikely_executed_notes (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (bb->partition1 == 2)
      mark_bb_for_unlikely_executed_section (bb);
}
static void
find_rarely_executed_basic_blocks_and_crossing_edges (edge *crossing_edges,
            int *n_crossing_edges,
            int *max_idx)
{
  basic_block bb;
  edge e;
  int i;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      if (probably_never_executed_bb_p (bb))
 bb->partition1 = 2;
      else
 bb->partition1 = 1;
    }
  i = 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    for (e = bb->succ; e; e = e->succ_next)
      {
 if (e->src != ENTRY_BLOCK_PTR
     && e->dest != EXIT_BLOCK_PTR
     && e->src->partition1 != e->dest->partition1)
   {
     e->crossing_edge = 1;
     if (i == *max_idx)
       {
  *max_idx *= 2;
  crossing_edges = xrealloc (crossing_edges,
        (*max_idx) * sizeof (edge));
       }
     crossing_edges[i++] = e;
   }
 else
   e->crossing_edge = 0;
      }
  *n_crossing_edges = i;
}
static void
mark_bb_for_unlikely_executed_section (basic_block bb)
{
  rtx cur_insn;
  rtx insert_insn = ((void *)0);
  rtx new_note;
  for (cur_insn = (bb)->head_; cur_insn != ((((bb)->end_)->u.fld[2]).rtx1);
       cur_insn = (((cur_insn)->u.fld[2]).rtx1))
    if (((enum rtx_code) (cur_insn)->code) != NOTE
 && ((enum rtx_code) (cur_insn)->code) != CODE_LABEL)
      {
 insert_insn = cur_insn;
 break;
      }
  if (insert_insn)
    {
      new_note = emit_note_before (NOTE_INSN_UNLIKELY_EXECUTED_CODE,
        insert_insn);
      (((new_note)->u.fld[4]).bb) = bb;
    }
  else
    {
      new_note = emit_note_after (NOTE_INSN_UNLIKELY_EXECUTED_CODE,
      (bb)->end_);
      (((new_note)->u.fld[4]).bb) = bb;
    }
}
static void
add_labels_and_missing_jumps (edge *crossing_edges, int n_crossing_edges)
{
  int i;
  basic_block src;
  basic_block dest;
  rtx label;
  rtx barrier;
  rtx new_jump;
  for (i=0; i < n_crossing_edges; i++)
    {
      if (crossing_edges[i])
   {
     src = crossing_edges[i]->src;
     dest = crossing_edges[i]->dest;
     if (dest && (dest != EXIT_BLOCK_PTR))
       {
       label = block_label (dest);
        if (src && (src != ENTRY_BLOCK_PTR))
   {
    if (((enum rtx_code) ((src)->end_)->code) != JUMP_INSN)
       {
         if (src->succ && (src->succ->succ_next == ((void *)0)))
    {
     label = block_label (dest);
     new_jump = emit_jump_insn_after (gen_jump (label),
          (src)->end_);
     barrier = emit_barrier_after (new_jump);
     (((new_jump)->u.fld[9]).rtx1) = label;
     (((label)->u.fld[4]).rtint) += 1;
     src->rbi->footer = unlink_insn_chain (barrier,
        barrier);
     crossing_edges[i]->flags &= ~1;
   }
         else
    {
      fancy_abort ("gcc.c", 374825, "?");
    }
       }
   }
       }
   }
    }
}
static void
fix_up_fall_thru_edges (void)
{
  basic_block cur_bb;
  basic_block new_bb;
  edge succ1;
  edge succ2;
  edge fall_thru;
  edge cond_jump = ((void *)0);
  edge e;
  unsigned char cond_jump_crosses;
  int invert_worked;
  rtx old_jump;
  rtx fall_thru_label;
  rtx barrier;
  for (cur_bb = ENTRY_BLOCK_PTR->next_bb; cur_bb != EXIT_BLOCK_PTR; cur_bb = cur_bb->next_bb)
    {
      fall_thru = ((void *)0);
      succ1 = cur_bb->succ;
      if (succ1)
   succ2 = succ1->succ_next;
      else
   succ2 = ((void *)0);
      if (succ1
    && (succ1->flags & 1))
  {
    fall_thru = succ1;
    cond_jump = succ2;
  }
      else if (succ2
         && (succ2->flags & 1))
  {
    fall_thru = succ2;
    cond_jump = succ1;
  }
      if (fall_thru && (fall_thru->dest != EXIT_BLOCK_PTR))
   {
   if (fall_thru->crossing_edge)
       {
        cond_jump_crosses = 1;
        invert_worked = 0;
       old_jump = (cur_bb)->end_;
        if (cond_jump)
   {
    if (!cond_jump->crossing_edge)
       cond_jump_crosses = 0;
    if (!cond_jump_crosses
        && cur_bb->rbi->next == cond_jump->dest)
       {
         fall_thru_label = block_label (fall_thru->dest);
         if (old_jump && fall_thru_label)
    invert_worked = invert_jump (old_jump,
            fall_thru_label,0);
         if (invert_worked)
    {
      fall_thru->flags &= ~1;
      cond_jump->flags |= 1;
      update_br_prob_note (cur_bb);
      e = fall_thru;
      fall_thru = cond_jump;
      cond_jump = e;
     cond_jump->crossing_edge = 1;
     fall_thru->crossing_edge = 0;
    }
       }
   }
        if (cond_jump_crosses || !invert_worked)
   {
     new_bb = force_nonfallthru (fall_thru);
     if (new_bb)
       {
         new_bb->rbi->next = cur_bb->rbi->next;
         cur_bb->rbi->next = new_bb;
        new_bb->partition1 = cur_bb->partition1;
        new_bb->succ->crossing_edge = 1;
       }
     if (new_bb)
       {
         barrier = emit_barrier_after ((new_bb)->end_);
         new_bb->rbi->footer = unlink_insn_chain (barrier,
               barrier);
       }
     else
       {
         barrier = emit_barrier_after ((cur_bb)->end_);
         cur_bb->rbi->footer = unlink_insn_chain (barrier,
               barrier);
       }
   }
       }
   }
    }
}
static basic_block
find_jump_block (basic_block jump_dest)
{
  basic_block source_bb = ((void *)0);
  edge e;
  rtx insn;
  for (e = jump_dest->pred; e; e = e->pred_next)
    if (e->crossing_edge)
      {
 basic_block src = e->src;
 if (((enum rtx_code) ((src)->head_)->code) == CODE_LABEL)
   for (insn = (src)->head_;
        !((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && insn != ((((src)->end_)->u.fld[2]).rtx1);
        insn = (((insn)->u.fld[2]).rtx1))
     {
       if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
    && insn == (src)->end_
    && ((enum rtx_code) (insn)->code) == JUMP_INSN
    && !any_condjump_p (insn))
  {
    source_bb = src;
    break;
  }
     }
 if (source_bb)
   break;
      }
  return source_bb;
}
static void
fix_crossing_conditional_branches (void)
{
  basic_block cur_bb;
  basic_block new_bb;
  basic_block last_bb;
  basic_block dest;
  basic_block prev_bb;
  edge succ1;
  edge succ2;
  edge crossing_edge;
  edge new_edge;
  rtx old_jump;
  rtx set_src;
  rtx old_label = (rtx) 0;
  rtx new_label;
  rtx new_jump;
  rtx barrier;
 last_bb = EXIT_BLOCK_PTR->prev_bb;
  for (cur_bb = ENTRY_BLOCK_PTR->next_bb; cur_bb != EXIT_BLOCK_PTR; cur_bb = cur_bb->next_bb)
    {
      crossing_edge = ((void *)0);
      succ1 = cur_bb->succ;
      if (succ1)
  succ2 = succ1->succ_next;
      else
  succ2 = ((void *)0);
      if (succ1 && succ1->crossing_edge)
 crossing_edge = succ1;
      else if (succ2 && succ2->crossing_edge)
  crossing_edge = succ2;
      if (crossing_edge)
  {
   old_jump = (cur_bb)->end_;
   set_src = (rtx) 0;
   if (any_condjump_p (old_jump))
     {
       if (((enum rtx_code) ((((old_jump)->u.fld[5]).rtx1))->code) == SET)
  set_src = ((((((old_jump)->u.fld[5]).rtx1))->u.fld[1]).rtx1);
       else if (((enum rtx_code) ((((old_jump)->u.fld[5]).rtx1))->code) == PARALLEL)
  {
    set_src = ((((((((old_jump)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
    if (((enum rtx_code) (set_src)->code) == SET)
      set_src = (((set_src)->u.fld[1]).rtx1);
    else
      set_src = (rtx) 0;
  }
     }
   if (set_src && (((enum rtx_code) (set_src)->code) == IF_THEN_ELSE))
     {
       if (((enum rtx_code) ((((set_src)->u.fld[1]).rtx1))->code) == PC)
  old_label = (((set_src)->u.fld[2]).rtx1);
       else if (((enum rtx_code) ((((set_src)->u.fld[2]).rtx1))->code) == PC)
  old_label = (((set_src)->u.fld[1]).rtx1);
       new_bb = find_jump_block (crossing_edge->dest);
       if (new_bb)
  new_label = block_label (new_bb);
       else
  {
    new_bb = create_basic_block (((void *)0), ((void *)0), last_bb);
    new_bb->rbi->next = last_bb->rbi->next;
    last_bb->rbi->next = new_bb;
    prev_bb = last_bb;
    last_bb = new_bb;
    new_bb->global_live_at_start =
      bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
    new_bb->global_live_at_end =
      bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
    bitmap_copy (new_bb->global_live_at_end, prev_bb->global_live_at_end)
                                ;
    bitmap_copy (new_bb->global_live_at_start, prev_bb->global_live_at_end)
                                ;
    new_label = gen_label_rtx ();
    emit_label_before (new_label, (new_bb)->head_);
    (new_bb)->head_ = new_label;
    if (((enum rtx_code) (old_label)->code) == LABEL_REF)
      {
        old_label = (((old_jump)->u.fld[9]).rtx1);
        new_jump = emit_jump_insn_after (gen_jump
             (old_label),
             (new_bb)->end_);
      }
    else if ((ix86_can_use_return_insn_p ())
      && ((enum rtx_code) (old_label)->code) == RETURN)
      new_jump = emit_jump_insn_after (gen_return (),
           (new_bb)->end_);
    else
      fancy_abort ("gcc.c", 375141, "?");
    barrier = emit_barrier_after (new_jump);
    (((new_jump)->u.fld[9]).rtx1) = old_label;
    new_bb->rbi->footer = unlink_insn_chain (barrier,
          barrier);
    new_bb->partition1 = cur_bb->partition1;
  }
       redirect_jump (old_jump, new_label, 0);
       dest = crossing_edge->dest;
       redirect_edge_succ (crossing_edge, new_bb);
       if (!new_bb->succ)
  new_edge = make_edge (new_bb, dest, 0);
       else
  new_edge = new_bb->succ;
       crossing_edge->crossing_edge = 0;
       new_edge->crossing_edge = 1;
     }
  }
    }
}
static void
fix_crossing_unconditional_branches (void)
{
  basic_block cur_bb;
  rtx last_insn;
  rtx label;
  rtx label_addr;
  rtx indirect_jump_sequence;
  rtx jump_insn = (rtx) 0;
  rtx new_reg;
  rtx cur_insn;
  edge succ;
  for (cur_bb = ENTRY_BLOCK_PTR->next_bb; cur_bb != EXIT_BLOCK_PTR; cur_bb = cur_bb->next_bb)
    {
      last_insn = (cur_bb)->end_;
      succ = cur_bb->succ;
      if (((enum rtx_code) (last_insn)->code) == JUMP_INSN
   && succ->crossing_edge)
 {
   rtx label2, table;
   if (any_condjump_p (last_insn))
     fancy_abort ("gcc.c", 375210, "?");
   else if (!computed_jump_p (last_insn)
     && !tablejump_p (last_insn, &label2, &table))
     {
       label = (((last_insn)->u.fld[9]).rtx1);
       label_addr = gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (label));
       (((label)->u.fld[4]).rtint) += 1;
       new_reg = gen_reg_rtx ((0 ? DImode : SImode));
       start_sequence ();
       emit_move_insn (new_reg, label_addr);
       emit_indirect_jump (new_reg);
       indirect_jump_sequence = get_insns ();
       end_sequence ();
       for (cur_insn = indirect_jump_sequence; cur_insn;
     cur_insn = (((cur_insn)->u.fld[2]).rtx1))
  {
    (((cur_insn)->u.fld[3]).bb) = cur_bb;
    if (((enum rtx_code) (cur_insn)->code) == JUMP_INSN)
      jump_insn = cur_insn;
  }
       emit_insn_before (indirect_jump_sequence, last_insn);
       delete_insn (last_insn);
       (cur_bb)->end_ = jump_insn;
     }
 }
    }
}
static void
add_reg_crossing_jump_notes (void)
{
  basic_block bb;
  edge e;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    for (e = bb->succ; e; e = e->succ_next)
      if (e->crossing_edge
   && ((enum rtx_code) ((e->src)->end_)->code) == JUMP_INSN)
 ((((e->src)->end_)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_CROSSING_JUMP), ((rtx) 0), (((((e->src)->end_)->u.fld[8]).rtx1)))
                    ;
}
static void
fix_edges_for_rarely_executed_code (edge *crossing_edges,
        int n_crossing_edges)
{
  add_labels_and_missing_jumps (crossing_edges, n_crossing_edges);
  fix_up_fall_thru_edges ();
  if (!1)
    fix_crossing_conditional_branches ();
  if (!1)
    {
      fix_crossing_unconditional_branches ();
      reg_scan (get_insns(), max_reg_num (), 1);
    }
  add_reg_crossing_jump_notes ();
}
void
reorder_basic_blocks (void)
{
  int n_traces;
  int i;
  struct trace *traces;
  if (n_basic_blocks <= 1)
    return;
  if (targetm.cannot_modify_jumps_p ())
    return;
  timevar_push (TV_REORDER_BLOCKS);
  cfg_layout_initialize ();
  set_edge_can_fallthru_flag ();
  mark_dfs_back_edges ();
  if (uncond_jump_length == 0)
    uncond_jump_length = get_uncond_jump_length ();
  array_size = ((((last_basic_block) / 4) + 1) * 5);
  bbd = xmalloc (array_size * sizeof (bbro_basic_block_data));
  for (i = 0; i < array_size; i++)
    {
      bbd[i].start_of_trace = -1;
      bbd[i].end_of_trace = -1;
      bbd[i].heap = ((void *)0);
      bbd[i].node = ((void *)0);
    }
  traces = xmalloc (n_basic_blocks * sizeof (struct trace));
  n_traces = 0;
  find_traces (&n_traces, traces);
  connect_traces (n_traces, traces);
  do { if (traces) { free (traces); traces = 0; } else { fancy_abort ("gcc.c", 375391, "?"); } } while (0);
  do { if (bbd) { free (bbd); bbd = 0; } else { fancy_abort ("gcc.c", 375392, "?"); } } while (0);
  if (dump_file)
    dump_flow_info (dump_file);
  if (flag_reorder_blocks_and_partition)
    add_unlikely_executed_notes ();
  cfg_layout_finalize ();
  timevar_pop (TV_REORDER_BLOCKS);
}
void
partition_hot_cold_basic_blocks (void)
{
  basic_block cur_bb;
  edge *crossing_edges;
  int n_crossing_edges;
  int max_edges = 2 * last_basic_block;
  if (n_basic_blocks <= 1)
    return;
  crossing_edges = xcalloc (max_edges, sizeof (edge));
  cfg_layout_initialize ();
  for (cur_bb = ENTRY_BLOCK_PTR->next_bb; cur_bb != EXIT_BLOCK_PTR; cur_bb = cur_bb->next_bb)
    if (cur_bb->index >= 0
  && cur_bb->next_bb->index >= 0)
      cur_bb->rbi->next = cur_bb->next_bb;
  find_rarely_executed_basic_blocks_and_crossing_edges (crossing_edges,
       &n_crossing_edges,
       &max_edges);
  if (n_crossing_edges > 0)
    fix_edges_for_rarely_executed_code (crossing_edges, n_crossing_edges);
  free (crossing_edges);
  cfg_layout_finalize();
}
static struct obstack bitmap_obstack;
static int bitmap_obstack_init = 0;
bitmap_element bitmap_zero_bits;
static bitmap_element *bitmap_free;
static bitmap_element *bitmap_ggc_free;
static void bitmap_elem_to_freelist (bitmap, bitmap_element *);
static void bitmap_element_free (bitmap, bitmap_element *);
static bitmap_element *bitmap_element_allocate (bitmap);
static int bitmap_element_zerop (bitmap_element *);
static void bitmap_element_link (bitmap, bitmap_element *);
static bitmap_element *bitmap_find_bit (bitmap, unsigned int);
static void
bitmap_elem_to_freelist (bitmap head, bitmap_element *elt)
{
  if (head->using_obstack)
    {
      elt->next = bitmap_free;
      bitmap_free = elt;
    }
  else
    {
      elt->next = bitmap_ggc_free;
      bitmap_ggc_free = elt;
    }
}
static void
bitmap_element_free (bitmap head, bitmap_element *elt)
{
  bitmap_element *next = elt->next;
  bitmap_element *prev = elt->prev;
  if (prev)
    prev->next = next;
  if (next)
    next->prev = prev;
  if (head->first == elt)
    head->first = next;
  if (head->current == elt)
    {
      head->current = next != 0 ? next : prev;
      if (head->current)
 head->indx = head->current->indx;
    }
  bitmap_elem_to_freelist (head, elt);
}
static bitmap_element *
bitmap_element_allocate (bitmap head)
{
  bitmap_element *element;
  if (head->using_obstack)
    {
      if (bitmap_free != 0)
 {
   element = bitmap_free;
   bitmap_free = element->next;
 }
      else
 {
   if (!bitmap_obstack_init)
     {
       bitmap_obstack_init = 1;
       _obstack_begin ((&bitmap_obstack), (0), (0), (void *(*) (long)) (((void *(*) (long)) xmalloc)), (void (*) (void *)) (((void (*) (void *)) free)))
                          ;
     }
   element = (( ((&bitmap_obstack))->temp = ((sizeof (bitmap_element))), ((((&bitmap_obstack))->chunk_limit - ((&bitmap_obstack))->next_free < ((&bitmap_obstack))->temp) ? (_obstack_newchunk (((&bitmap_obstack)), ((&bitmap_obstack))->temp), 0) : 0), (((&bitmap_obstack))->next_free += (((&bitmap_obstack))->temp))), ( (((&bitmap_obstack))->next_free == ((&bitmap_obstack))->object_base ? ((((&bitmap_obstack))->maybe_empty_object = 1), 0) : 0), ((&bitmap_obstack))->temp = ((((&bitmap_obstack))->object_base) - (char *) 0), ((&bitmap_obstack))->next_free = (((((((&bitmap_obstack))->next_free) - (char *) 0)+((&bitmap_obstack))->alignment_mask) & ~ (((&bitmap_obstack))->alignment_mask)) + (char *) 0), ((((&bitmap_obstack))->next_free - (char *) ((&bitmap_obstack))->chunk > ((&bitmap_obstack))->chunk_limit - (char *) ((&bitmap_obstack))->chunk) ? (((&bitmap_obstack))->next_free = ((&bitmap_obstack))->chunk_limit) : 0), ((&bitmap_obstack))->object_base = ((&bitmap_obstack))->next_free, ((((&bitmap_obstack))->temp) + (char *) 0)));
 }
    }
  else
    {
      if (bitmap_ggc_free != ((void *)0))
 {
          element = bitmap_ggc_free;
          bitmap_ggc_free = element->next;
 }
      else
 element = ggc_alloc_stat (sizeof (bitmap_element) );
    }
  memset (element->bits, 0, sizeof (element->bits));
  return element;
}
void
bitmap_release_memory (void)
{
  bitmap_free = 0;
  if (bitmap_obstack_init)
    {
      bitmap_obstack_init = 0;
      ( (&bitmap_obstack)->temp = (char *) (((void *)0)) - (char *) (&bitmap_obstack)->chunk, (((&bitmap_obstack)->temp > 0 && (&bitmap_obstack)->temp < (&bitmap_obstack)->chunk_limit - (char *) (&bitmap_obstack)->chunk) ? (int) ((&bitmap_obstack)->next_free = (&bitmap_obstack)->object_base = (&bitmap_obstack)->temp + (char *) (&bitmap_obstack)->chunk) : (((obstack_free) ((&bitmap_obstack), (&bitmap_obstack)->temp + (char *) (&bitmap_obstack)->chunk), 0), 0)));
    }
}
static int
bitmap_element_zerop (bitmap_element *element)
{
  int i;
  for (i = 0; i < ((128 + (8 * 4) - 1) / (8 * 4)); i++)
    if (element->bits[i] != 0)
      return 0;
  return 1;
}
static void
bitmap_element_link (bitmap head, bitmap_element *element)
{
  unsigned int indx = element->indx;
  bitmap_element *ptr;
  if (head->first == 0)
    {
      element->next = element->prev = 0;
      head->first = element;
    }
  else if (indx < head->indx)
    {
      for (ptr = head->current;
    ptr->prev != 0 && ptr->prev->indx > indx;
    ptr = ptr->prev)
 ;
      if (ptr->prev)
 ptr->prev->next = element;
      else
 head->first = element;
      element->prev = ptr->prev;
      element->next = ptr;
      ptr->prev = element;
    }
  else
    {
      for (ptr = head->current;
    ptr->next != 0 && ptr->next->indx < indx;
    ptr = ptr->next)
 ;
      if (ptr->next)
 ptr->next->prev = element;
      element->next = ptr->next;
      element->prev = ptr;
      ptr->next = element;
    }
  head->current = element;
  head->indx = indx;
}
void
bitmap_clear (bitmap head)
{
  bitmap_element *element, *next;
  for (element = head->first; element != 0; element = next)
    {
      next = element->next;
      bitmap_elem_to_freelist (head, element);
    }
  head->first = head->current = 0;
}
void
bitmap_copy (bitmap to, bitmap from)
{
  bitmap_element *from_ptr, *to_ptr = 0;
  int i;
  bitmap_clear (to);
  for (from_ptr = from->first; from_ptr; from_ptr = from_ptr->next)
    {
      bitmap_element *to_elt = bitmap_element_allocate (to);
      to_elt->indx = from_ptr->indx;
      for (i = 0; i < ((128 + (8 * 4) - 1) / (8 * 4)); i++)
 to_elt->bits[i] = from_ptr->bits[i];
      if (to_ptr == 0)
 {
   to->first = to->current = to_elt;
   to->indx = from_ptr->indx;
   to_elt->next = to_elt->prev = 0;
 }
      else
 {
   to_elt->prev = to_ptr;
   to_elt->next = 0;
   to_ptr->next = to_elt;
 }
      to_ptr = to_elt;
    }
}
static bitmap_element *
bitmap_find_bit (bitmap head, unsigned int bit)
{
  bitmap_element *element;
  unsigned int indx = bit / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4)));
  if (head->current == 0
      || head->indx == indx)
    return head->current;
  if (head->indx > indx)
    for (element = head->current;
  element->prev != 0 && element->indx > indx;
  element = element->prev)
      ;
  else
    for (element = head->current;
  element->next != 0 && element->indx < indx;
  element = element->next)
      ;
  head->current = element;
  head->indx = element->indx;
  if (element != 0 && element->indx != indx)
    element = 0;
  return element;
}
void
bitmap_clear_bit (bitmap head, int bit)
{
  bitmap_element *ptr = bitmap_find_bit (head, bit);
  if (ptr != 0)
    {
      unsigned bit_num = bit % (unsigned) (8 * 4);
      unsigned word_num = bit / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4));
      ptr->bits[word_num] &= ~ (((BITMAP_WORD) 1) << bit_num);
      if (bitmap_element_zerop (ptr))
 bitmap_element_free (head, ptr);
    }
}
void
bitmap_set_bit (bitmap head, int bit)
{
  bitmap_element *ptr = bitmap_find_bit (head, bit);
  unsigned word_num = bit / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4));
  unsigned bit_num = bit % (unsigned) (8 * 4);
  BITMAP_WORD bit_val = ((BITMAP_WORD) 1) << bit_num;
  if (ptr == 0)
    {
      ptr = bitmap_element_allocate (head);
      ptr->indx = bit / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4)));
      ptr->bits[word_num] = bit_val;
      bitmap_element_link (head, ptr);
    }
  else
    ptr->bits[word_num] |= bit_val;
}
int
bitmap_bit_p (bitmap head, int bit)
{
  bitmap_element *ptr;
  unsigned bit_num;
  unsigned word_num;
  ptr = bitmap_find_bit (head, bit);
  if (ptr == 0)
    return 0;
  bit_num = bit % (unsigned) (8 * 4);
  word_num = bit / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4));
  return (ptr->bits[word_num] >> bit_num) & 1;
}
int
bitmap_first_set_bit (bitmap a)
{
  bitmap_element *ptr = a->first;
  BITMAP_WORD word;
  unsigned word_num, bit_num;
  if (ptr == ((void *)0))
    return -1;
  for (word_num = 0; word_num < ((128 + (8 * 4) - 1) / (8 * 4)); ++word_num)
    if ((word = ptr->bits[word_num]) != 0)
      goto word_found;
  fancy_abort ("gcc.c", 375866, "?");
 word_found:
  bit_num = 0;
  word = word & -word;
  if ((word & 0xffff) == 0)
    word >>= 16, bit_num += 16;
  if ((word & 0xff) == 0)
    word >>= 8, bit_num += 8;
  if (word & 0xf0)
    bit_num += 4;
  if (word & 0xcc)
    bit_num += 2;
  if (word & 0xaa)
    bit_num += 1;
  return (ptr->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4)))
   + word_num * (unsigned) (8 * 4)
   + bit_num);
}
int
bitmap_last_set_bit (bitmap a)
{
  bitmap_element *ptr = a->first;
  BITMAP_WORD word;
  unsigned word_num, bit_num;
  if (ptr == ((void *)0))
    return -1;
  while (ptr->next != ((void *)0))
    ptr = ptr->next;
  for (word_num = ((128 + (8 * 4) - 1) / (8 * 4)); word_num-- > 0; )
    if ((word = ptr->bits[word_num]) != 0)
      goto word_found;
  fancy_abort ("gcc.c", 375923, "?");
 word_found:
  bit_num = 0;
  if (word & 0xffff0000)
    word >>= 16, bit_num += 16;
  if (word & 0xff00)
    word >>= 8, bit_num += 8;
  if (word & 0xf0)
    word >>= 4, bit_num += 4;
  if (word & 0xc)
    word >>= 2, bit_num += 2;
  if (word & 0x2)
    bit_num += 1;
  return (ptr->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4)))
   + word_num * (unsigned) (8 * 4)
   + bit_num);
}
int
bitmap_operation (bitmap to, bitmap from1, bitmap from2,
    enum bitmap_bits operation)
{
  bitmap_element *from1_ptr = from1->first;
  bitmap_element *from2_ptr = from2->first;
  unsigned int indx1 = (from1_ptr) ? from1_ptr->indx : (unsigned int) ~0;
  unsigned int indx2 = (from2_ptr) ? from2_ptr->indx : (unsigned int) ~0;
  bitmap_element *to_ptr = to->first;
  bitmap_element *from1_tmp;
  bitmap_element *from2_tmp;
  bitmap_element *to_tmp;
  unsigned int indx;
  int changed = 0;
  to->first = to->current = 0;
  while (from1_ptr != 0 || from2_ptr != 0)
    {
      if (indx1 == indx2)
 {
   indx = indx1;
   from1_tmp = from1_ptr;
   from2_tmp = from2_ptr;
   from1_ptr = from1_ptr->next;
   indx1 = (from1_ptr) ? from1_ptr->indx : (unsigned int) ~0;
   from2_ptr = from2_ptr->next;
   indx2 = (from2_ptr) ? from2_ptr->indx : (unsigned int) ~0;
 }
      else if (indx1 < indx2)
 {
   indx = indx1;
   from1_tmp = from1_ptr;
   from2_tmp = &bitmap_zero_bits;
   from1_ptr = from1_ptr->next;
   indx1 = (from1_ptr) ? from1_ptr->indx : (unsigned int) ~0;
 }
      else
 {
   indx = indx2;
   from1_tmp = &bitmap_zero_bits;
   from2_tmp = from2_ptr;
   from2_ptr = from2_ptr->next;
   indx2 = (from2_ptr) ? from2_ptr->indx : (unsigned int) ~0;
 }
      while (to_ptr && to_ptr->indx < indx)
 {
   changed = 1;
   to_tmp = to_ptr;
   to_ptr = to_ptr->next;
   bitmap_elem_to_freelist (to, to_tmp);
 }
      if (to_ptr && to_ptr->indx == indx)
 {
   to_tmp = to_ptr;
   to_ptr = to_ptr->next;
 }
      else
 to_tmp = bitmap_element_allocate (to);
      switch (operation)
 {
 default:
   fancy_abort ("gcc.c", 376059, "?");
 case BITMAP_AND:
   do { BITMAP_WORD t, f1, f2; int i; for (i = 0; i < ((128 + (8 * 4) - 1) / (8 * 4)); ++i) { f1 = from1_tmp->bits[i]; f2 = from2_tmp->bits[i]; t = f1 & f2; changed |= (t != to_tmp->bits[i]); to_tmp->bits[i] = t; } } while (0);
   break;
 case BITMAP_AND_COMPL:
   do { BITMAP_WORD t, f1, f2; int i; for (i = 0; i < ((128 + (8 * 4) - 1) / (8 * 4)); ++i) { f1 = from1_tmp->bits[i]; f2 = from2_tmp->bits[i]; t = f1 &~ f2; changed |= (t != to_tmp->bits[i]); to_tmp->bits[i] = t; } } while (0);
   break;
 case BITMAP_IOR:
   do { BITMAP_WORD t, f1, f2; int i; for (i = 0; i < ((128 + (8 * 4) - 1) / (8 * 4)); ++i) { f1 = from1_tmp->bits[i]; f2 = from2_tmp->bits[i]; t = f1 | f2; changed |= (t != to_tmp->bits[i]); to_tmp->bits[i] = t; } } while (0);
   break;
 case BITMAP_IOR_COMPL:
   do { BITMAP_WORD t, f1, f2; int i; for (i = 0; i < ((128 + (8 * 4) - 1) / (8 * 4)); ++i) { f1 = from1_tmp->bits[i]; f2 = from2_tmp->bits[i]; t = f1 |~ f2; changed |= (t != to_tmp->bits[i]); to_tmp->bits[i] = t; } } while (0);
   break;
 case BITMAP_XOR:
   do { BITMAP_WORD t, f1, f2; int i; for (i = 0; i < ((128 + (8 * 4) - 1) / (8 * 4)); ++i) { f1 = from1_tmp->bits[i]; f2 = from2_tmp->bits[i]; t = f1 ^ f2; changed |= (t != to_tmp->bits[i]); to_tmp->bits[i] = t; } } while (0);
   break;
 }
      if (! bitmap_element_zerop (to_tmp))
 {
   to_tmp->indx = indx;
   bitmap_element_link (to, to_tmp);
 }
      else
 {
   bitmap_elem_to_freelist (to, to_tmp);
 }
    }
  if (to_ptr)
    {
      changed = 1;
      for (to_tmp = to_ptr; to_tmp->next ; to_tmp = to_tmp->next)
 continue;
      if (to->using_obstack)
 {
   to_tmp->next = bitmap_free;
   bitmap_free = to_ptr;
 }
      else
 {
   to_tmp->next = bitmap_ggc_free;
   bitmap_ggc_free = to_ptr;
 }
    }
  return changed;
}
int
bitmap_equal_p (bitmap a, bitmap b)
{
  bitmap_head c;
  int ret;
  memset (&c, 0, sizeof (c));
  ret = ! bitmap_operation (&c, a, b, BITMAP_XOR);
  bitmap_clear (&c);
  return ret;
}
void
bitmap_ior_and_compl (bitmap to, bitmap from1, bitmap from2)
{
  bitmap_head tmp;
  tmp.first = tmp.current = 0;
  tmp.using_obstack = 0;
  bitmap_operation (&tmp, from1, from2, BITMAP_AND_COMPL);
  bitmap_operation (to, to, &tmp, BITMAP_IOR);
  bitmap_clear (&tmp);
}
int
bitmap_union_of_diff (bitmap dst, bitmap a, bitmap b, bitmap c)
{
  bitmap_head tmp;
  int changed;
  tmp.first = tmp.current = 0;
  tmp.using_obstack = 0;
  bitmap_operation (&tmp, b, c, BITMAP_AND_COMPL);
  changed = bitmap_operation (dst, &tmp, a, BITMAP_IOR);
  bitmap_clear (&tmp);
  return changed;
}
bitmap
bitmap_initialize (bitmap head, int using_obstack)
{
  if (head == ((void *)0) && ! using_obstack)
    head = ggc_alloc_stat (sizeof (*head) );
  head->first = head->current = 0;
  head->using_obstack = using_obstack;
  return head;
}
void
debug_bitmap_file (FILE *file, bitmap head)
{
  bitmap_element *ptr;
  fprintf (file, "\nfirst = %p current = %p indx = %u\n",
    (void *) head->first, (void *) head->current, head->indx);
  for (ptr = head->first; ptr; ptr = ptr->next)
    {
      unsigned int i, j, col = 26;
      fprintf (file, "\t%p next = %p prev = %p indx = %u\n\t\tbits = {",
        (void*) ptr, (void*) ptr->next, (void*) ptr->prev, ptr->indx);
      for (i = 0; i < ((128 + (8 * 4) - 1) / (8 * 4)); i++)
 for (j = 0; j < (unsigned) (8 * 4); j++)
   if ((ptr->bits[i] >> j) & 1)
     {
       if (col > 70)
  {
    fprintf (file, "\n\t\t\t");
    col = 24;
  }
       fprintf (file, " %u", (ptr->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4)))
         + i * (unsigned) (8 * 4) + j));
       col += 4;
     }
      fprintf (file, " }\n");
    }
}
void
debug_bitmap (bitmap head)
{
  debug_bitmap_file (stdout, head);
}
void
bitmap_print (FILE *file, bitmap head, const char *prefix, const char *suffix)
{
  const char *comma = "";
  int i;
  fputs_unlocked (prefix, file);
  do { bitmap_element *ptr_ = (head)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { fprintf (file, "%s%d", comma, i); comma = ", "; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
         ;
  fputs_unlocked (suffix, file);
}
const struct ggc_root_tab gt_ggc_rd_gt_bitmap_h[] = {
  { &bitmap_ggc_free, 1, sizeof (bitmap_ggc_free), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
enum type_class
{
  no_type_class = -1,
  void_type_class, integer_type_class, char_type_class,
  enumeral_type_class, boolean_type_class,
  pointer_type_class, reference_type_class, offset_type_class,
  real_type_class, complex_type_class,
  function_type_class, method_type_class,
  record_type_class, union_type_class,
  array_type_class, string_type_class, set_type_class, file_type_class,
  lang_type_class
};
const char *const built_in_class_names[4]
  = {"NOT_BUILT_IN", "BUILT_IN_FRONTEND", "BUILT_IN_MD", "BUILT_IN_NORMAL"};
const char *const built_in_names[(int) END_BUILTINS] =
{
"BUILT_IN_ACOS",
"BUILT_IN_ACOSF",
"BUILT_IN_ACOSH",
"BUILT_IN_ACOSHF",
"BUILT_IN_ACOSHL",
"BUILT_IN_ACOSL",
"BUILT_IN_ASIN",
"BUILT_IN_ASINF",
"BUILT_IN_ASINH",
"BUILT_IN_ASINHF",
"BUILT_IN_ASINHL",
"BUILT_IN_ASINL",
"BUILT_IN_ATAN",
"BUILT_IN_ATAN2",
"BUILT_IN_ATAN2F",
"BUILT_IN_ATAN2L",
"BUILT_IN_ATANF",
"BUILT_IN_ATANH",
"BUILT_IN_ATANHF",
"BUILT_IN_ATANHL",
"BUILT_IN_ATANL",
"BUILT_IN_CBRT",
"BUILT_IN_CBRTF",
"BUILT_IN_CBRTL",
"BUILT_IN_CEIL",
"BUILT_IN_CEILF",
"BUILT_IN_CEILL",
"BUILT_IN_COPYSIGN",
"BUILT_IN_COPYSIGNF",
"BUILT_IN_COPYSIGNL",
"BUILT_IN_COS",
"BUILT_IN_COSF",
"BUILT_IN_COSH",
"BUILT_IN_COSHF",
"BUILT_IN_COSHL",
"BUILT_IN_COSL",
"BUILT_IN_DREM",
"BUILT_IN_DREMF",
"BUILT_IN_DREML",
"BUILT_IN_ERF",
"BUILT_IN_ERFC",
"BUILT_IN_ERFCF",
"BUILT_IN_ERFCL",
"BUILT_IN_ERFF",
"BUILT_IN_ERFL",
"BUILT_IN_EXP",
"BUILT_IN_EXP10",
"BUILT_IN_EXP10F",
"BUILT_IN_EXP10L",
"BUILT_IN_EXP2",
"BUILT_IN_EXP2F",
"BUILT_IN_EXP2L",
"BUILT_IN_EXPF",
"BUILT_IN_EXPL",
"BUILT_IN_EXPM1",
"BUILT_IN_EXPM1F",
"BUILT_IN_EXPM1L",
"BUILT_IN_FABS",
"BUILT_IN_FABSF",
"BUILT_IN_FABSL",
"BUILT_IN_FDIM",
"BUILT_IN_FDIMF",
"BUILT_IN_FDIML",
"BUILT_IN_FLOOR",
"BUILT_IN_FLOORF",
"BUILT_IN_FLOORL",
"BUILT_IN_FMA",
"BUILT_IN_FMAF",
"BUILT_IN_FMAL",
"BUILT_IN_FMAX",
"BUILT_IN_FMAXF",
"BUILT_IN_FMAXL",
"BUILT_IN_FMIN",
"BUILT_IN_FMINF",
"BUILT_IN_FMINL",
"BUILT_IN_FMOD",
"BUILT_IN_FMODF",
"BUILT_IN_FMODL",
"BUILT_IN_FREXP",
"BUILT_IN_FREXPF",
"BUILT_IN_FREXPL",
"BUILT_IN_GAMMA",
"BUILT_IN_GAMMAF",
"BUILT_IN_GAMMAL",
"BUILT_IN_HUGE_VAL",
"BUILT_IN_HUGE_VALF",
"BUILT_IN_HUGE_VALL",
"BUILT_IN_HYPOT",
"BUILT_IN_HYPOTF",
"BUILT_IN_HYPOTL",
"BUILT_IN_ILOGB",
"BUILT_IN_ILOGBF",
"BUILT_IN_ILOGBL",
"BUILT_IN_INF",
"BUILT_IN_INFF",
"BUILT_IN_INFL",
"BUILT_IN_J0",
"BUILT_IN_J0F",
"BUILT_IN_J0L",
"BUILT_IN_J1",
"BUILT_IN_J1F",
"BUILT_IN_J1L",
"BUILT_IN_JN",
"BUILT_IN_JNF",
"BUILT_IN_JNL",
"BUILT_IN_LDEXP",
"BUILT_IN_LDEXPF",
"BUILT_IN_LDEXPL",
"BUILT_IN_LGAMMA",
"BUILT_IN_LGAMMAF",
"BUILT_IN_LGAMMAL",
"BUILT_IN_LLRINT",
"BUILT_IN_LLRINTF",
"BUILT_IN_LLRINTL",
"BUILT_IN_LLROUND",
"BUILT_IN_LLROUNDF",
"BUILT_IN_LLROUNDL",
"BUILT_IN_LOG",
"BUILT_IN_LOG10",
"BUILT_IN_LOG10F",
"BUILT_IN_LOG10L",
"BUILT_IN_LOG1P",
"BUILT_IN_LOG1PF",
"BUILT_IN_LOG1PL",
"BUILT_IN_LOG2",
"BUILT_IN_LOG2F",
"BUILT_IN_LOG2L",
"BUILT_IN_LOGB",
"BUILT_IN_LOGBF",
"BUILT_IN_LOGBL",
"BUILT_IN_LOGF",
"BUILT_IN_LOGL",
"BUILT_IN_LRINT",
"BUILT_IN_LRINTF",
"BUILT_IN_LRINTL",
"BUILT_IN_LROUND",
"BUILT_IN_LROUNDF",
"BUILT_IN_LROUNDL",
"BUILT_IN_MODF",
"BUILT_IN_MODFF",
"BUILT_IN_MODFL",
"BUILT_IN_NAN",
"BUILT_IN_NANF",
"BUILT_IN_NANL",
"BUILT_IN_NANS",
"BUILT_IN_NANSF",
"BUILT_IN_NANSL",
"BUILT_IN_NEARBYINT",
"BUILT_IN_NEARBYINTF",
"BUILT_IN_NEARBYINTL",
"BUILT_IN_NEXTAFTER",
"BUILT_IN_NEXTAFTERF",
"BUILT_IN_NEXTAFTERL",
"BUILT_IN_NEXTTOWARD",
"BUILT_IN_NEXTTOWARDF",
"BUILT_IN_NEXTTOWARDL",
"BUILT_IN_POW",
"BUILT_IN_POW10",
"BUILT_IN_POW10F",
"BUILT_IN_POW10L",
"BUILT_IN_POWF",
"BUILT_IN_POWL",
"BUILT_IN_REMAINDER",
"BUILT_IN_REMAINDERF",
"BUILT_IN_REMAINDERL",
"BUILT_IN_REMQUO",
"BUILT_IN_REMQUOF",
"BUILT_IN_REMQUOL",
"BUILT_IN_RINT",
"BUILT_IN_RINTF",
"BUILT_IN_RINTL",
"BUILT_IN_ROUND",
"BUILT_IN_ROUNDF",
"BUILT_IN_ROUNDL",
"BUILT_IN_SCALB",
"BUILT_IN_SCALBF",
"BUILT_IN_SCALBL",
"BUILT_IN_SCALBLN",
"BUILT_IN_SCALBLNF",
"BUILT_IN_SCALBLNL",
"BUILT_IN_SCALBN",
"BUILT_IN_SCALBNF",
"BUILT_IN_SCALBNL",
"BUILT_IN_SIGNBIT",
"BUILT_IN_SIGNBITF",
"BUILT_IN_SIGNBITL",
"BUILT_IN_SIGNIFICAND",
"BUILT_IN_SIGNIFICANDF",
"BUILT_IN_SIGNIFICANDL",
"BUILT_IN_SIN",
"BUILT_IN_SINCOS",
"BUILT_IN_SINCOSF",
"BUILT_IN_SINCOSL",
"BUILT_IN_SINF",
"BUILT_IN_SINH",
"BUILT_IN_SINHF",
"BUILT_IN_SINHL",
"BUILT_IN_SINL",
"BUILT_IN_SQRT",
"BUILT_IN_SQRTF",
"BUILT_IN_SQRTL",
"BUILT_IN_TAN",
"BUILT_IN_TANF",
"BUILT_IN_TANH",
"BUILT_IN_TANHF",
"BUILT_IN_TANHL",
"BUILT_IN_TANL",
"BUILT_IN_TGAMMA",
"BUILT_IN_TGAMMAF",
"BUILT_IN_TGAMMAL",
"BUILT_IN_TRUNC",
"BUILT_IN_TRUNCF",
"BUILT_IN_TRUNCL",
"BUILT_IN_Y0",
"BUILT_IN_Y0F",
"BUILT_IN_Y0L",
"BUILT_IN_Y1",
"BUILT_IN_Y1F",
"BUILT_IN_Y1L",
"BUILT_IN_YN",
"BUILT_IN_YNF",
"BUILT_IN_YNL",
"BUILT_IN_CABS",
"BUILT_IN_CABSF",
"BUILT_IN_CABSL",
"BUILT_IN_CACOS",
"BUILT_IN_CACOSF",
"BUILT_IN_CACOSH",
"BUILT_IN_CACOSHF",
"BUILT_IN_CACOSHL",
"BUILT_IN_CACOSL",
"BUILT_IN_CARG",
"BUILT_IN_CARGF",
"BUILT_IN_CARGL",
"BUILT_IN_CASIN",
"BUILT_IN_CASINF",
"BUILT_IN_CASINH",
"BUILT_IN_CASINHF",
"BUILT_IN_CASINHL",
"BUILT_IN_CASINL",
"BUILT_IN_CATAN",
"BUILT_IN_CATANF",
"BUILT_IN_CATANH",
"BUILT_IN_CATANHF",
"BUILT_IN_CATANHL",
"BUILT_IN_CATANL",
"BUILT_IN_CCOS",
"BUILT_IN_CCOSF",
"BUILT_IN_CCOSH",
"BUILT_IN_CCOSHF",
"BUILT_IN_CCOSHL",
"BUILT_IN_CCOSL",
"BUILT_IN_CEXP",
"BUILT_IN_CEXPF",
"BUILT_IN_CEXPL",
"BUILT_IN_CIMAG",
"BUILT_IN_CIMAGF",
"BUILT_IN_CIMAGL",
"BUILT_IN_CONJ",
"BUILT_IN_CONJF",
"BUILT_IN_CONJL",
"BUILT_IN_CPOW",
"BUILT_IN_CPOWF",
"BUILT_IN_CPOWL",
"BUILT_IN_CPROJ",
"BUILT_IN_CPROJF",
"BUILT_IN_CPROJL",
"BUILT_IN_CREAL",
"BUILT_IN_CREALF",
"BUILT_IN_CREALL",
"BUILT_IN_CSIN",
"BUILT_IN_CSINF",
"BUILT_IN_CSINH",
"BUILT_IN_CSINHF",
"BUILT_IN_CSINHL",
"BUILT_IN_CSINL",
"BUILT_IN_CSQRT",
"BUILT_IN_CSQRTF",
"BUILT_IN_CSQRTL",
"BUILT_IN_CTAN",
"BUILT_IN_CTANF",
"BUILT_IN_CTANH",
"BUILT_IN_CTANHF",
"BUILT_IN_CTANHL",
"BUILT_IN_CTANL",
"BUILT_IN_BCMP",
"BUILT_IN_BCOPY",
"BUILT_IN_BZERO",
"BUILT_IN_FFS",
"BUILT_IN_FFSL",
"BUILT_IN_FFSLL",
"BUILT_IN_INDEX",
"BUILT_IN_MEMCMP",
"BUILT_IN_MEMCPY",
"BUILT_IN_MEMMOVE",
"BUILT_IN_MEMPCPY",
"BUILT_IN_MEMSET",
"BUILT_IN_RINDEX",
"BUILT_IN_STPCPY",
"BUILT_IN_STRCAT",
"BUILT_IN_STRCHR",
"BUILT_IN_STRCMP",
"BUILT_IN_STRCPY",
"BUILT_IN_STRCSPN",
"BUILT_IN_STRDUP",
"BUILT_IN_STRLEN",
"BUILT_IN_STRNCAT",
"BUILT_IN_STRNCMP",
"BUILT_IN_STRNCPY",
"BUILT_IN_STRPBRK",
"BUILT_IN_STRRCHR",
"BUILT_IN_STRSPN",
"BUILT_IN_STRSTR",
"BUILT_IN_FPRINTF",
"BUILT_IN_FPRINTF_UNLOCKED",
"BUILT_IN_FPUTC",
"BUILT_IN_FPUTC_UNLOCKED",
"BUILT_IN_FPUTS",
"BUILT_IN_FPUTS_UNLOCKED",
"BUILT_IN_FSCANF",
"BUILT_IN_FWRITE",
"BUILT_IN_FWRITE_UNLOCKED",
"BUILT_IN_PRINTF",
"BUILT_IN_PRINTF_UNLOCKED",
"BUILT_IN_PUTCHAR",
"BUILT_IN_PUTCHAR_UNLOCKED",
"BUILT_IN_PUTS",
"BUILT_IN_PUTS_UNLOCKED",
"BUILT_IN_SCANF",
"BUILT_IN_SNPRINTF",
"BUILT_IN_SPRINTF",
"BUILT_IN_SSCANF",
"BUILT_IN_VFPRINTF",
"BUILT_IN_VFSCANF",
"BUILT_IN_VPRINTF",
"BUILT_IN_VSCANF",
"BUILT_IN_VSNPRINTF",
"BUILT_IN_VSPRINTF",
"BUILT_IN_VSSCANF",
"BUILT_IN_ISALNUM",
"BUILT_IN_ISALPHA",
"BUILT_IN_ISASCII",
"BUILT_IN_ISBLANK",
"BUILT_IN_ISCNTRL",
"BUILT_IN_ISDIGIT",
"BUILT_IN_ISGRAPH",
"BUILT_IN_ISLOWER",
"BUILT_IN_ISPRINT",
"BUILT_IN_ISPUNCT",
"BUILT_IN_ISSPACE",
"BUILT_IN_ISUPPER",
"BUILT_IN_ISXDIGIT",
"BUILT_IN_TOASCII",
"BUILT_IN_TOLOWER",
"BUILT_IN_TOUPPER",
"BUILT_IN_ISWALNUM",
"BUILT_IN_ISWALPHA",
"BUILT_IN_ISWBLANK",
"BUILT_IN_ISWCNTRL",
"BUILT_IN_ISWDIGIT",
"BUILT_IN_ISWGRAPH",
"BUILT_IN_ISWLOWER",
"BUILT_IN_ISWPRINT",
"BUILT_IN_ISWPUNCT",
"BUILT_IN_ISWSPACE",
"BUILT_IN_ISWUPPER",
"BUILT_IN_ISWXDIGIT",
"BUILT_IN_TOWLOWER",
"BUILT_IN_TOWUPPER",
"BUILT_IN_ABORT",
"BUILT_IN_ABS",
"BUILT_IN_AGGREGATE_INCOMING_ADDRESS",
"BUILT_IN_ALLOCA",
"BUILT_IN_APPLY",
"BUILT_IN_APPLY_ARGS",
"BUILT_IN_ARGS_INFO",
"BUILT_IN_CALLOC",
"BUILT_IN_CLASSIFY_TYPE",
"BUILT_IN_CLZ",
"BUILT_IN_CLZL",
"BUILT_IN_CLZLL",
"BUILT_IN_CONSTANT_P",
"BUILT_IN_CTZ",
"BUILT_IN_CTZL",
"BUILT_IN_CTZLL",
"BUILT_IN_DCGETTEXT",
"BUILT_IN_DGETTEXT",
"BUILT_IN_DWARF_CFA",
"BUILT_IN_DWARF_SP_COLUMN",
"BUILT_IN_EH_RETURN",
"BUILT_IN_EH_RETURN_DATA_REGNO",
"BUILT_IN_EXECL",
"BUILT_IN_EXECLP",
"BUILT_IN_EXECLE",
"BUILT_IN_EXECV",
"BUILT_IN_EXECVP",
"BUILT_IN_EXECVE",
"BUILT_IN_EXIT",
"BUILT_IN_EXPECT",
"BUILT_IN_EXTEND_POINTER",
"BUILT_IN_EXTRACT_RETURN_ADDR",
"BUILT_IN_FORK",
"BUILT_IN_FRAME_ADDRESS",
"BUILT_IN_FROB_RETURN_ADDR",
"BUILT_IN_GETTEXT",
"BUILT_IN_IMAXABS",
"BUILT_IN_INIT_DWARF_REG_SIZES",
"BUILT_IN_FINITE",
"BUILT_IN_FINITEF",
"BUILT_IN_FINITEL",
"BUILT_IN_ISINF",
"BUILT_IN_ISINFF",
"BUILT_IN_ISINFL",
"BUILT_IN_ISNAN",
"BUILT_IN_ISNANF",
"BUILT_IN_ISNANL",
"BUILT_IN_ISGREATER",
"BUILT_IN_ISGREATEREQUAL",
"BUILT_IN_ISLESS",
"BUILT_IN_ISLESSEQUAL",
"BUILT_IN_ISLESSGREATER",
"BUILT_IN_ISUNORDERED",
"BUILT_IN_LABS",
"BUILT_IN_LLABS",
"BUILT_IN_LONGJMP",
"BUILT_IN_MALLOC",
"BUILT_IN_NEXT_ARG",
"BUILT_IN_PARITY",
"BUILT_IN_PARITYL",
"BUILT_IN_PARITYLL",
"BUILT_IN_POPCOUNT",
"BUILT_IN_POPCOUNTL",
"BUILT_IN_POPCOUNTLL",
"BUILT_IN_PREFETCH",
"BUILT_IN_RETURN",
"BUILT_IN_RETURN_ADDRESS",
"BUILT_IN_SAVEREGS",
"BUILT_IN_SETJMP",
"BUILT_IN_STACK_ALLOC",
"BUILT_IN_STACK_SAVE",
"BUILT_IN_STACK_RESTORE",
"BUILT_IN_STDARG_START",
"BUILT_IN_STRFMON",
"BUILT_IN_STRFTIME",
"BUILT_IN_TRAP",
"BUILT_IN_UNWIND_INIT",
"BUILT_IN_UPDATE_SETJMP_BUF",
"BUILT_IN_VA_COPY",
"BUILT_IN_VA_END",
"BUILT_IN_VA_START",
"BUILT_IN__EXIT",
"BUILT_IN__EXIT2",
"BUILT_IN_INIT_TRAMPOLINE",
"BUILT_IN_ADJUST_TRAMPOLINE",
"BUILT_IN_NONLOCAL_GOTO",
"BUILT_IN_PROFILE_FUNC_ENTER",
"BUILT_IN_PROFILE_FUNC_EXIT"
};
tree built_in_decls[(int) END_BUILTINS];
tree implicit_built_in_decls[(int) END_BUILTINS];
static int get_pointer_alignment (tree, unsigned int);
static const char *c_getstr (tree);
static rtx c_readstr (const char *, enum machine_mode);
static int target_char_cast (tree, char *);
static rtx get_memory_rtx (tree);
static tree build_string_literal (int, const char *);
static int apply_args_size (void);
static int apply_result_size (void);
static rtx result_vector (int, rtx);
static rtx expand_builtin_setjmp (tree, rtx);
static void expand_builtin_update_setjmp_buf (rtx);
static void expand_builtin_prefetch (tree);
static rtx expand_builtin_apply_args (void);
static rtx expand_builtin_apply_args_1 (void);
static rtx expand_builtin_apply (rtx, rtx, rtx);
static void expand_builtin_return (rtx);
static enum type_class type_to_class (tree);
static rtx expand_builtin_classify_type (tree);
static void expand_errno_check (tree, rtx);
static rtx expand_builtin_mathfn (tree, rtx, rtx);
static rtx expand_builtin_mathfn_2 (tree, rtx, rtx);
static rtx expand_builtin_mathfn_3 (tree, rtx, rtx);
static rtx expand_builtin_args_info (tree);
static rtx expand_builtin_next_arg (tree);
static rtx expand_builtin_va_start (tree);
static rtx expand_builtin_va_end (tree);
static rtx expand_builtin_va_copy (tree);
static rtx expand_builtin_memcmp (tree, tree, rtx, enum machine_mode);
static rtx expand_builtin_strcmp (tree, rtx, enum machine_mode);
static rtx expand_builtin_strncmp (tree, rtx, enum machine_mode);
static rtx builtin_memcpy_read_str (void *, long, enum machine_mode);
static rtx expand_builtin_strcat (tree, rtx, enum machine_mode);
static rtx expand_builtin_strncat (tree, rtx, enum machine_mode);
static rtx expand_builtin_strspn (tree, rtx, enum machine_mode);
static rtx expand_builtin_strcspn (tree, rtx, enum machine_mode);
static rtx expand_builtin_memcpy (tree, rtx, enum machine_mode);
static rtx expand_builtin_mempcpy (tree, rtx, enum machine_mode, int);
static rtx expand_builtin_memmove (tree, rtx, enum machine_mode);
static rtx expand_builtin_bcopy (tree);
static rtx expand_builtin_strcpy (tree, rtx, enum machine_mode);
static rtx expand_builtin_stpcpy (tree, rtx, enum machine_mode);
static rtx builtin_strncpy_read_str (void *, long, enum machine_mode);
static rtx expand_builtin_strncpy (tree, rtx, enum machine_mode);
static rtx builtin_memset_read_str (void *, long, enum machine_mode);
static rtx builtin_memset_gen_str (void *, long, enum machine_mode);
static rtx expand_builtin_memset (tree, rtx, enum machine_mode);
static rtx expand_builtin_bzero (tree);
static rtx expand_builtin_strlen (tree, rtx, enum machine_mode);
static rtx expand_builtin_strstr (tree, rtx, enum machine_mode);
static rtx expand_builtin_strpbrk (tree, rtx, enum machine_mode);
static rtx expand_builtin_strchr (tree, rtx, enum machine_mode);
static rtx expand_builtin_strrchr (tree, rtx, enum machine_mode);
static rtx expand_builtin_alloca (tree, rtx);
static rtx expand_builtin_unop (enum machine_mode, tree, rtx, rtx, optab);
static rtx expand_builtin_frame_address (tree, tree);
static rtx expand_builtin_fputs (tree, rtx, unsigned char);
static rtx expand_builtin_printf (tree, rtx, enum machine_mode, unsigned char);
static rtx expand_builtin_fprintf (tree, rtx, enum machine_mode, unsigned char);
static rtx expand_builtin_sprintf (tree, rtx, enum machine_mode);
static tree stabilize_va_list (tree, int);
static rtx expand_builtin_expect (tree, rtx);
static tree fold_builtin_constant_p (tree);
static tree fold_builtin_classify_type (tree);
static tree fold_builtin_inf (tree, int);
static tree fold_builtin_nan (tree, tree, int);
static int validate_arglist (tree, ...);
static unsigned char integer_valued_real_p (tree);
static tree fold_trunc_transparent_mathfn (tree);
static unsigned char readonly_data_expr (tree);
static rtx expand_builtin_fabs (tree, rtx, rtx);
static rtx expand_builtin_cabs (tree, rtx);
static rtx expand_builtin_signbit (tree, rtx);
static tree fold_builtin_cabs (tree, tree);
static tree fold_builtin_trunc (tree);
static tree fold_builtin_floor (tree);
static tree fold_builtin_ceil (tree);
static tree fold_builtin_round (tree);
static tree fold_builtin_bitop (tree);
static tree fold_builtin_memcpy (tree);
static tree fold_builtin_mempcpy (tree);
static tree fold_builtin_memmove (tree);
static tree fold_builtin_strcpy (tree);
static tree fold_builtin_strncpy (tree);
static tree fold_builtin_strchr (tree, unsigned char);
static tree fold_builtin_memcmp (tree);
static tree fold_builtin_strcmp (tree);
static tree fold_builtin_strncmp (tree);
static tree fold_builtin_signbit (tree);
static tree fold_builtin_copysign (tree, tree);
static tree fold_builtin_isascii (tree);
static tree fold_builtin_toascii (tree);
static tree fold_builtin_isdigit (tree);
static tree fold_builtin_fabs (tree, tree);
static tree fold_builtin_abs (tree, tree);
static tree fold_builtin_unordered_cmp (tree, enum tree_code, enum tree_code);
static tree simplify_builtin_memcmp (tree);
static tree simplify_builtin_strcmp (tree);
static tree simplify_builtin_strncmp (tree);
static tree simplify_builtin_strpbrk (tree);
static tree simplify_builtin_strstr (tree);
static tree simplify_builtin_strchr (tree);
static tree simplify_builtin_strrchr (tree);
static tree simplify_builtin_strcat (tree);
static tree simplify_builtin_strncat (tree);
static tree simplify_builtin_strspn (tree);
static tree simplify_builtin_strcspn (tree);
static void simplify_builtin_next_arg (tree);
static void simplify_builtin_va_start (tree);
static tree simplify_builtin_sprintf (tree, int);
static int
get_pointer_alignment (tree exp, unsigned int max_align)
{
  unsigned int align, inner;
  if (((enum tree_code) (((exp)->common.type))->common.code) != POINTER_TYPE)
    return 0;
  align = ((((((exp)->common.type))->common.type))->type.align);
  align = ((align) < (max_align) ? (align) : (max_align));
  while (1)
    {
      switch (((enum tree_code) (exp)->common.code))
 {
 case NOP_EXPR:
 case CONVERT_EXPR:
 case NON_LVALUE_EXPR:
   exp = ((exp)->exp.operands[0]);
   if (((enum tree_code) (((exp)->common.type))->common.code) != POINTER_TYPE)
     return align;
   inner = ((((((exp)->common.type))->common.type))->type.align);
   align = ((inner) < (max_align) ? (inner) : (max_align));
   break;
 case PLUS_EXPR:
   if (! host_integerp (((exp)->exp.operands[1]), 1))
     return align;
   while (((tree_low_cst (((exp)->exp.operands[1]), 1))
    & (max_align / 8 - 1))
   != 0)
     max_align >>= 1;
   exp = ((exp)->exp.operands[0]);
   break;
 case ADDR_EXPR:
   exp = ((exp)->exp.operands[0]);
   if (((enum tree_code) (exp)->common.code) == FUNCTION_DECL)
     align = 8;
   else if ((tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'd'))
     align = ((exp)->decl.u1.a.align);
   else if (tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'c')
     align = ix86_constant_alignment ((exp), (align));
   return ((align) < (max_align) ? (align) : (max_align));
 default:
   return align;
 }
    }
}
tree
c_strlen (tree src, int only_value)
{
  tree offset_node;
  long offset;
  int max;
  const char *ptr;
  while ((((enum tree_code) (src)->common.code) == NOP_EXPR || ((enum tree_code) (src)->common.code) == CONVERT_EXPR || ((enum tree_code) (src)->common.code) == NON_LVALUE_EXPR) && ((src)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((src)->common.type))->type.mode) == ((((((src)->exp.operands[0]))->common.type))->type.mode))) (src) = ((src)->exp.operands[0]);
  if (((enum tree_code) (src)->common.code) == COND_EXPR
      && (only_value || !((((src)->exp.operands[0]))->common.side_effects_flag)))
    {
      tree len1, len2;
      len1 = c_strlen (((src)->exp.operands[1]), only_value);
      len2 = c_strlen (((src)->exp.operands[2]), only_value);
      if (tree_int_cst_equal (len1, len2))
 return len1;
    }
  if (((enum tree_code) (src)->common.code) == COMPOUND_EXPR
      && (only_value || !((((src)->exp.operands[0]))->common.side_effects_flag)))
    return c_strlen (((src)->exp.operands[1]), only_value);
  src = string_constant (src, &offset_node);
  if (src == 0)
    return 0;
  max = ((src)->string1.length) - 1;
  ptr = ((src)->string1.pointer);
  if (offset_node && ((enum tree_code) (offset_node)->common.code) != INTEGER_CST)
    {
      int i;
      for (i = 0; i < max; i++)
 if (ptr[i] == 0)
   return 0;
      return size_diffop (size_int_wide ((long) (max), SIZETYPE), offset_node);
    }
  if (offset_node == 0)
    offset = 0;
  else if (! host_integerp (offset_node, 0))
    offset = -1;
  else
    offset = tree_low_cst (offset_node, 0);
  if (offset < 0 || offset > max)
    {
      warning ("offset outside bounds of constant string");
      return 0;
    }
  return size_int_wide ((long) (strlen (ptr + offset)), SSIZETYPE);
}
static const char *
c_getstr (tree src)
{
  tree offset_node;
  src = string_constant (src, &offset_node);
  if (src == 0)
    return 0;
  if (offset_node == 0)
    return ((src)->string1.pointer);
  else if (!host_integerp (offset_node, 1)
    || compare_tree_int (offset_node, ((src)->string1.length) - 1) > 0)
    return 0;
  return ((src)->string1.pointer) + tree_low_cst (offset_node, 1);
}
static rtx
c_readstr (const char *str, enum machine_mode mode)
{
  long c[2];
  long ch;
  unsigned int i, j;
  if (mode_class[mode] != MODE_INT)
    fancy_abort ("gcc.c", 377297, "?");
  c[0] = 0;
  c[1] = 0;
  ch = 1;
  for (i = 0; i < ((unsigned short) mode_size[mode]); i++)
    {
      j = i;
      if (0)
 j = ((unsigned short) mode_size[mode]) - i - 1;
      if (0 != 0
   && ((unsigned short) mode_size[mode]) > (0 ? 8 : 4))
 j = j + (0 ? 8 : 4) - 2 * (j % (0 ? 8 : 4)) - 1;
      j *= 8;
      if (j > 2 * (8 * 4))
 fancy_abort ("gcc.c", 377311, "?");
      if (ch)
 ch = (unsigned char) str[i];
      c[j / (8 * 4)] |= ch << (j % (8 * 4));
    }
  return immed_double_const (c[0], c[1], mode);
}
static int
target_char_cast (tree cst, char *p)
{
  unsigned long val, hostval;
  if (!host_integerp (cst, 1)
      || 8 > (8 * 4))
    return 1;
  val = tree_low_cst (cst, 1);
  if (8 < (8 * 4))
    val &= (((unsigned long) 1) << 8) - 1;
  hostval = val;
  if (8 < (8 * 4))
    hostval &= (((unsigned long) 1) << 8) - 1;
  if (val != hostval)
    return 1;
  *p = hostval;
  return 0;
}
static tree
builtin_save_expr (tree exp)
{
  if (((exp)->common.addressable_flag) == 0
      && (((enum tree_code) (exp)->common.code) == PARM_DECL
   || (((enum tree_code) (exp)->common.code) == VAR_DECL && !((exp)->common.static_flag))))
    return exp;
  return save_expr (exp);
}
rtx
expand_builtin_return_addr (enum built_in_function fndecl_code, int count,
       rtx tem)
{
  int i;
  if (count > 0)
    ix86_setup_frame_addresses ();
  for (i = 0; i < count; i++)
    {
      tem = memory_address ((0 ? DImode : SImode), tem);
      tem = gen_rtx_MEM ((0 ? DImode : SImode), tem);
      set_mem_alias_set (tem, get_frame_alias_set ());
      tem = copy_to_reg (tem);
    }
  if (fndecl_code == BUILT_IN_FRAME_ADDRESS)
    return tem;
  tem = ((count) == 0 ? gen_rtx_MEM ((0 ? DImode : SImode), plus_constant_wide (((global_rtl[GR_ARG_POINTER])), (long) (-(0 ? 8 : 4)))) : gen_rtx_MEM ((0 ? DImode : SImode), plus_constant_wide ((tem), (long) ((0 ? 8 : 4)))));
  return tem;
}
static long setjmp_alias_set = -1;
void
expand_builtin_setjmp_setup (rtx buf_addr, rtx receiver_label)
{
  enum machine_mode sa_mode = (0 ? DImode : SImode);
  rtx stack_save;
  rtx mem;
  if (setjmp_alias_set == -1)
    setjmp_alias_set = new_alias_set ();
  buf_addr = convert_memory_address ((0 ? DImode : SImode), buf_addr);
  buf_addr = force_reg ((0 ? DImode : SImode), force_operand (buf_addr, (rtx) 0));
  emit_queue ();
  mem = gen_rtx_MEM ((0 ? DImode : SImode), buf_addr);
  set_mem_alias_set (mem, setjmp_alias_set);
  emit_move_insn (mem, targetm.builtin_setjmp_frame_value ());
  mem = gen_rtx_MEM ((0 ? DImode : SImode), plus_constant_wide ((buf_addr), (long) (((unsigned short) mode_size[(0 ? DImode : SImode)])))),
  set_mem_alias_set (mem, setjmp_alias_set);
  emit_move_insn (validize_mem (mem),
    force_reg ((0 ? DImode : SImode), gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (receiver_label))));
  stack_save = gen_rtx_MEM (sa_mode,
       plus_constant_wide ((buf_addr), (long) (2 * ((unsigned short) mode_size[(0 ? DImode : SImode)])))
                                  );
  set_mem_alias_set (stack_save, setjmp_alias_set);
  emit_stack_save (SAVE_NONLOCAL, &stack_save, (rtx) 0);
  (cfun->calls_setjmp) = 1;
  (cfun->has_nonlocal_label) = 1;
}
void
expand_builtin_setjmp_receiver (rtx receiver_label )
{
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), ((global_rtl[GR_HARD_FRAME_POINTER]))));
  emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (static_chain_rtx)));
    emit_move_insn ((global_rtl[GR_VIRTUAL_STACK_ARGS]), (global_rtl[GR_HARD_FRAME_POINTER]));
  if (fixed_regs[16])
    {
      size_t i;
      static const struct elims {const int from, to;} elim_regs[] = {{ 16, 7}, { 16, 6}, { 20, 7}, { 20, 6}};
      for (i = 0; i < (sizeof (elim_regs) / sizeof ((elim_regs)[0])); i++)
 if (elim_regs[i].from == 16
     && elim_regs[i].to == 6)
   break;
      if (i == (sizeof (elim_regs) / sizeof ((elim_regs)[0])))
 {
   emit_move_insn ((global_rtl[GR_VIRTUAL_INCOMING_ARGS]),
     copy_to_reg (get_arg_pointer_save_area (cfun)));
 }
    }
  if ((!0 && flag_pic))
    emit_insn (gen_builtin_setjmp_receiver (receiver_label));
  else
      { }
  emit_insn (gen_rtx_fmt_s (ASM_INPUT, (VOIDmode), ("")));
}
static rtx
expand_builtin_setjmp (tree arglist, rtx target)
{
  rtx buf_addr, next_lab, cont_lab;
  if (!validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
    return (rtx) 0;
  if (target == 0 || !(((enum rtx_code) (target)->code) == REG)
      || (((target)->u.fld[0]).rtuint) < 53)
    target = gen_reg_rtx (((integer_types[itk_int])->type.mode));
  buf_addr = expand_expr (((arglist)->list.value1), (rtx) 0, VOIDmode, 0);
  next_lab = gen_label_rtx ();
  cont_lab = gen_label_rtx ();
  expand_builtin_setjmp_setup (buf_addr, next_lab);
  emit_move_insn (target, (const_int_rtx[64]));
  emit_jump (cont_lab);
  emit_label (next_lab);
  expand_builtin_setjmp_receiver (next_lab);
  emit_move_insn (target, (const_int_rtx[64 +1]));
  emit_label (cont_lab);
  (cfun->has_nonlocal_label) = 1;
  (cfun->x_nonlocal_goto_handler_labels)
    = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (next_lab), ((cfun->x_nonlocal_goto_handler_labels)));
  return target;
}
void
expand_builtin_longjmp (rtx buf_addr, rtx value1)
{
  rtx fp, lab, stack, insn, last;
  enum machine_mode sa_mode = (0 ? DImode : SImode);
  if (setjmp_alias_set == -1)
    setjmp_alias_set = new_alias_set ();
  buf_addr = convert_memory_address ((0 ? DImode : SImode), buf_addr);
  buf_addr = force_reg ((0 ? DImode : SImode), buf_addr);
  if (value1 != (const_int_rtx[64 +1]))
    fancy_abort ("gcc.c", 377624, "?");
  (cfun->calls_longjmp) = 1;
  last = get_last_insn ();
    {
      fp = gen_rtx_MEM ((0 ? DImode : SImode), buf_addr);
      lab = gen_rtx_MEM ((0 ? DImode : SImode), plus_constant_wide ((buf_addr), (long) (((unsigned short) mode_size[(0 ? DImode : SImode)])))
                                  );
      stack = gen_rtx_MEM (sa_mode, plus_constant_wide ((buf_addr), (long) (2 * ((unsigned short) mode_size[(0 ? DImode : SImode)])))
                                   );
      set_mem_alias_set (fp, setjmp_alias_set);
      set_mem_alias_set (lab, setjmp_alias_set);
      set_mem_alias_set (stack, setjmp_alias_set);
 {
   lab = copy_to_reg (lab);
   emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode)))))
                                     );
   emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, (global_rtl[GR_HARD_FRAME_POINTER]))))
                                 );
   emit_move_insn ((global_rtl[GR_HARD_FRAME_POINTER]), fp);
   emit_stack_restore (SAVE_NONLOCAL, stack, (rtx) 0);
   emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), ((global_rtl[GR_HARD_FRAME_POINTER]))));
   emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), ((global_rtl[GR_STACK_POINTER]))));
   emit_indirect_jump (lab);
 }
    }
  for (insn = get_last_insn (); insn; insn = (((insn)->u.fld[1]).rtx1))
    {
      if (insn == last)
 fancy_abort ("gcc.c", 377682, "?");
      if (((enum rtx_code) (insn)->code) == JUMP_INSN)
 {
   (((insn)->u.fld[8]).rtx1) = alloc_EXPR_LIST (REG_NON_LOCAL_GOTO, (const_int_rtx[64]),
           (((insn)->u.fld[8]).rtx1));
   break;
 }
      else if (((enum rtx_code) (insn)->code) == CALL_INSN)
 break;
    }
}
static rtx
expand_builtin_nonlocal_goto (tree arglist)
{
  tree t_label, t_save_area;
  rtx r_label, r_save_area, r_fp, r_sp, insn;
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return (rtx) 0;
  t_label = ((arglist)->list.value1);
  arglist = ((arglist)->common.chain);
  t_save_area = ((arglist)->list.value1);
  r_label = expand_expr (t_label, (rtx) 0, VOIDmode, 0);
  r_save_area = expand_expr (t_save_area, (rtx) 0, VOIDmode, 0);
  r_fp = gen_rtx_MEM ((0 ? DImode : SImode), r_save_area);
  r_sp = gen_rtx_MEM ((0 ? DImode : SImode),
        plus_constant_wide ((r_save_area), (long) (((unsigned short) mode_size[(0 ? DImode : SImode)]))));
  (cfun->has_nonlocal_goto) = 1;
    {
      r_label = copy_to_reg (r_label);
      emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode)))))
                                        );
      emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, (global_rtl[GR_HARD_FRAME_POINTER]))))
                                    );
      emit_move_insn ((global_rtl[GR_HARD_FRAME_POINTER]), r_fp);
      emit_stack_restore (SAVE_NONLOCAL, r_sp, (rtx) 0);
      emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), ((global_rtl[GR_HARD_FRAME_POINTER]))));
      emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), ((global_rtl[GR_STACK_POINTER]))));
      emit_indirect_jump (r_label);
    }
  for (insn = get_last_insn (); insn; insn = (((insn)->u.fld[1]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == JUMP_INSN)
 {
   (((insn)->u.fld[8]).rtx1) = alloc_EXPR_LIST (REG_NON_LOCAL_GOTO,
           (const_int_rtx[64]), (((insn)->u.fld[8]).rtx1));
   break;
 }
      else if (((enum rtx_code) (insn)->code) == CALL_INSN)
 break;
    }
  return (const_int_rtx[64]);
}
static void
expand_builtin_update_setjmp_buf (rtx buf_addr)
{
  enum machine_mode sa_mode = (0 ? DImode : SImode);
  rtx stack_save;
  sa_mode = (0 ? DImode : SImode);
  stack_save
    = gen_rtx_MEM (sa_mode,
     memory_address
     (sa_mode,
      plus_constant_wide ((buf_addr), (long) (2 * ((unsigned short) mode_size[(0 ? DImode : SImode)])))));
  emit_stack_save (SAVE_NONLOCAL, &stack_save, (rtx) 0);
}
static void
expand_builtin_prefetch (tree arglist)
{
  tree arg0, arg1, arg2;
  rtx op0, op1, op2;
  if (!validate_arglist (arglist, POINTER_TYPE, 0))
    return;
  arg0 = ((arglist)->list.value1);
  if (((arglist)->common.chain))
    {
      arg1 = ((((arglist)->common.chain))->list.value1);
      if (((((arglist)->common.chain))->common.chain))
 arg2 = ((((((arglist)->common.chain))->common.chain))->list.value1);
      else
 arg2 = build_int_2_wide ((unsigned long) (3), (long) (0));
    }
  else
    {
      arg1 = global_trees[TI_INTEGER_ZERO];
      arg2 = build_int_2_wide ((unsigned long) (3), (long) (0));
    }
  op0 = expand_expr (arg0, (rtx) 0, (0 ? DImode : SImode), EXPAND_NORMAL);
  if (((enum tree_code) (arg1)->common.code) != INTEGER_CST)
    {
      error ("second arg to `__builtin_prefetch' must be a constant");
      arg1 = global_trees[TI_INTEGER_ZERO];
    }
  op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
  if (((op1)->u.hwint[0]) != 0 && ((op1)->u.hwint[0]) != 1)
    {
      warning ("invalid second arg to __builtin_prefetch; using zero");
      op1 = (const_int_rtx[64]);
    }
  if (((enum tree_code) (arg2)->common.code) != INTEGER_CST)
    {
      error ("third arg to `__builtin_prefetch' must be a constant");
      arg2 = global_trees[TI_INTEGER_ZERO];
    }
  op2 = expand_expr (arg2, (rtx) 0, VOIDmode, 0);
  if (((op2)->u.hwint[0]) < 0 || ((op2)->u.hwint[0]) > 3)
    {
      warning ("invalid third arg to __builtin_prefetch; using zero");
      op2 = (const_int_rtx[64]);
    }
  if (((x86_prefetch_sse) || ((target_flags & 0x00020000) != 0)))
    {
      if ((! (*insn_data[(int) CODE_FOR_prefetch].operand[0].predicate)
      (op0,
       insn_data[(int) CODE_FOR_prefetch].operand[0].mode))
   || (((enum machine_mode) (op0)->mode) != (0 ? DImode : SImode)))
 {
   op0 = convert_memory_address ((0 ? DImode : SImode), op0);
   op0 = force_reg ((0 ? DImode : SImode), op0);
 }
      emit_insn (gen_prefetch (op0, op1, op2));
    }
  else
    op0 = protect_from_queue (op0, 0);
  if (!(((enum rtx_code) (op0)->code) == MEM) && side_effects_p (op0))
    emit_insn (op0);
}
static rtx
get_memory_rtx (tree exp)
{
  rtx addr = expand_expr (exp, (rtx) 0, ptr_mode, EXPAND_SUM);
  rtx mem;
  addr = convert_memory_address ((0 ? DImode : SImode), addr);
  mem = gen_rtx_MEM (BLKmode, memory_address (BLKmode, addr));
  while ((((enum tree_code) (exp)->common.code) == NOP_EXPR || ((enum tree_code) (exp)->common.code) == CONVERT_EXPR
   || ((enum tree_code) (exp)->common.code) == NON_LVALUE_EXPR)
  && (((enum tree_code) (((((exp)->exp.operands[0]))->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((((exp)->exp.operands[0]))->common.type))->common.code) == REFERENCE_TYPE))
    exp = ((exp)->exp.operands[0]);
  if (((enum tree_code) (exp)->common.code) == ADDR_EXPR)
    {
      exp = ((exp)->exp.operands[0]);
      set_mem_attributes (mem, exp, 0);
    }
  else if ((((enum tree_code) (((exp)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((exp)->common.type))->common.code) == REFERENCE_TYPE))
    {
      exp = build1_stat (INDIRECT_REF,((((exp)->common.type))->common.type),exp );
      set_mem_alias_set (mem, 0);
    }
  return mem;
}
static enum machine_mode apply_args_mode[53];
static enum machine_mode apply_result_mode[53];
static int apply_args_reg_offset[53];
static int
apply_args_size (void)
{
  static int size = -1;
  int align;
  unsigned int regno;
  enum machine_mode mode;
  if (size < 0)
    {
      size = ((unsigned short) mode_size[(0 ? DImode : SImode)]);
      if (targetm.calls.struct_value_rtx (cfun ? ((cfun->decl)->common.type) : 0, 0))
 size += ((unsigned short) mode_size[(0 ? DImode : SImode)]);
      for (regno = 0; regno < 53; regno++)
 if (ix86_function_arg_regno_p (regno))
   {
     mode = reg_raw_mode[regno];
     if (mode == VOIDmode)
       fancy_abort ("gcc.c", 377971, "?");
     align = get_mode_alignment (mode) / 8;
     if (size % align != 0)
       size = (((size) + (align) - 1) / (align)) * align;
     apply_args_reg_offset[regno] = size;
     size += ((unsigned short) mode_size[mode]);
     apply_args_mode[regno] = mode;
   }
 else
   {
     apply_args_mode[regno] = VOIDmode;
     apply_args_reg_offset[regno] = 0;
   }
    }
  return size;
}
static int
apply_result_size (void)
{
  static int size = -1;
  int align, regno;
  enum machine_mode mode;
  if (size < 0)
    {
      size = 0;
      for (regno = 0; regno < 53; regno++)
 if (ix86_function_value_regno_p (regno))
   {
     mode = reg_raw_mode[regno];
     if (mode == VOIDmode)
       fancy_abort ("gcc.c", 378010, "?");
     align = get_mode_alignment (mode) / 8;
     if (size % align != 0)
       size = (((size) + (align) - 1) / (align)) * align;
     size += ((unsigned short) mode_size[mode]);
     apply_result_mode[regno] = mode;
   }
 else
   apply_result_mode[regno] = VOIDmode;
      size = (8+108);
    }
  return size;
}
static rtx
result_vector (int savep, rtx result)
{
  int regno, size, align, nelts;
  enum machine_mode mode;
  rtx reg, mem;
  rtx *savevec = C_alloca(53 * sizeof (rtx));
  size = nelts = 0;
  for (regno = 0; regno < 53; regno++)
    if ((mode = apply_result_mode[regno]) != VOIDmode)
      {
 align = get_mode_alignment (mode) / 8;
 if (size % align != 0)
   size = (((size) + (align) - 1) / (align)) * align;
 reg = gen_rtx_REG (mode, savep ? regno : (regno));
 mem = adjust_address_1 (result, mode, size, 1, 1);
 savevec[nelts++] = (savep
       ? gen_rtx_fmt_ee (SET, (VOIDmode), (mem), (reg))
       : gen_rtx_fmt_ee (SET, (VOIDmode), (reg), (mem)));
 size += ((unsigned short) mode_size[mode]);
      }
  return gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec_v (nelts, savevec)));
}
static rtx
expand_builtin_apply_args_1 (void)
{
  rtx registers, tem;
  int size, align, regno;
  enum machine_mode mode;
  rtx struct_incoming_value = targetm.calls.struct_value_rtx (cfun ? ((cfun->decl)->common.type) : 0, 1);
  registers = assign_stack_local (BLKmode, apply_args_size (), -1);
  size = ((unsigned short) mode_size[(0 ? DImode : SImode)]);
  if (targetm.calls.struct_value_rtx (cfun ? ((cfun->decl)->common.type) : 0, 0))
    size += ((unsigned short) mode_size[(0 ? DImode : SImode)]);
  for (regno = 0; regno < 53; regno++)
    if ((mode = apply_args_mode[regno]) != VOIDmode)
      {
 align = get_mode_alignment (mode) / 8;
 if (size % align != 0)
   size = (((size) + (align) - 1) / (align)) * align;
 tem = gen_rtx_REG (mode, (regno));
 emit_move_insn (adjust_address_1 (registers, mode, size, 1, 1), tem);
 size += ((unsigned short) mode_size[mode]);
      }
  tem = copy_to_reg ((global_rtl[GR_VIRTUAL_INCOMING_ARGS]));
  tem
    = force_operand (plus_constant_wide ((tem), (long) ((cfun->pretend_args_size))),
       (rtx) 0);
  emit_move_insn (adjust_address_1 (registers, (0 ? DImode : SImode), 0, 1, 1), tem);
  size = ((unsigned short) mode_size[(0 ? DImode : SImode)]);
  if (struct_incoming_value)
    {
      emit_move_insn (adjust_address_1 (registers, (0 ? DImode : SImode), size, 1, 1),
        copy_to_reg (struct_incoming_value));
      size += ((unsigned short) mode_size[(0 ? DImode : SImode)]);
    }
  return copy_addr_to_reg ((((registers)->u.fld[0]).rtx1));
}
static rtx
expand_builtin_apply_args (void)
{
  if ((cfun->expr->x_apply_args_value) != 0)
    return (cfun->expr->x_apply_args_value);
  {
    rtx temp;
    rtx seq;
    start_sequence ();
    temp = expand_builtin_apply_args_1 ();
    seq = get_insns ();
    end_sequence ();
    (cfun->expr->x_apply_args_value) = temp;
    push_topmost_sequence ();
    emit_insn_before (seq, (((entry_of_function ())->u.fld[2]).rtx1));
    pop_topmost_sequence ();
    return temp;
  }
}
static rtx
expand_builtin_apply (rtx function, rtx arguments, rtx argsize)
{
  int size, align, regno;
  enum machine_mode mode;
  rtx incoming_args, result, reg, dest, src, call_insn;
  rtx old_stack_level = 0;
  rtx call_fusage = 0;
  rtx struct_value = targetm.calls.struct_value_rtx (cfun ? ((cfun->decl)->common.type) : 0, 0);
  arguments = convert_memory_address ((0 ? DImode : SImode), arguments);
  result = assign_stack_local (BLKmode, apply_result_size (), -1);
  incoming_args = gen_reg_rtx ((0 ? DImode : SImode));
  emit_move_insn (incoming_args, gen_rtx_MEM ((0 ? DImode : SImode), arguments));
  emit_queue ();
  do_pending_stack_adjust ();
  ((cfun->expr->x_inhibit_defer_pop) += 1);
    emit_stack_save (SAVE_BLOCK, &old_stack_level, (rtx) 0);
  allocate_dynamic_stack_space (argsize, 0, 8);
  dest = (global_rtl[GR_VIRTUAL_OUTGOING_ARGS]);
  dest = gen_rtx_MEM (BLKmode, dest);
  set_mem_align (dest, (8 * (0 ? 8 : 4)));
  src = gen_rtx_MEM (BLKmode, incoming_args);
  set_mem_align (src, (8 * (0 ? 8 : 4)));
  emit_block_move (dest, src, argsize, BLOCK_OP_NORMAL);
  apply_args_size ();
  arguments = gen_rtx_MEM (BLKmode, arguments);
  set_mem_align (arguments, (8 * (0 ? 8 : 4)));
  size = ((unsigned short) mode_size[(0 ? DImode : SImode)]);
  if (struct_value)
    size += ((unsigned short) mode_size[(0 ? DImode : SImode)]);
  for (regno = 0; regno < 53; regno++)
    if ((mode = apply_args_mode[regno]) != VOIDmode)
      {
 align = get_mode_alignment (mode) / 8;
 if (size % align != 0)
   size = (((size) + (align) - 1) / (align)) * align;
 reg = gen_rtx_REG (mode, regno);
 emit_move_insn (reg, adjust_address_1 (arguments, mode, size, 1, 1));
 use_reg (&call_fusage, reg);
 size += ((unsigned short) mode_size[mode]);
      }
  size = ((unsigned short) mode_size[(0 ? DImode : SImode)]);
  if (struct_value)
    {
      rtx value1 = gen_reg_rtx ((0 ? DImode : SImode));
      emit_move_insn (value1, adjust_address_1 (arguments, (0 ? DImode : SImode), size, 1, 1));
      emit_move_insn (struct_value, value1);
      if ((((enum rtx_code) (struct_value)->code) == REG))
 use_reg (&call_fusage, struct_value);
      size += ((unsigned short) mode_size[(0 ? DImode : SImode)]);
    }
  function = prepare_call_address (function, ((void *)0), &call_fusage, 0, 0);
  if (((enum rtx_code) (function)->code) != SYMBOL_REF)
    function = memory_address (QImode, function);
  if (1)
    emit_call_insn (gen_untyped_call (gen_rtx_MEM (QImode, function),
          result, result_vector (1, result)));
  else
  if (1)
    {
      rtx valreg = 0;
      for (regno = 0; regno < 53; regno++)
 if ((mode = apply_result_mode[regno]) != VOIDmode)
   {
     if (valreg)
       fancy_abort ("gcc.c", 378286, "?");
     valreg = gen_rtx_REG (mode, regno);
   }
      emit_call_insn (gen_call_value ((valreg), (gen_rtx_MEM (QImode, function)), ((const_int_rtx[64])), ((rtx) 0))
                                           );
      emit_move_insn (adjust_address_1 (result, ((enum machine_mode) (valreg)->mode), 0, 1, 1), valreg);
    }
  else
    fancy_abort ("gcc.c", 378298, "?");
  call_insn = last_call_insn ();
  add_function_usage_to (call_insn, call_fusage);
    emit_stack_restore (SAVE_BLOCK, old_stack_level, (rtx) 0);
  ((cfun->expr->x_inhibit_defer_pop) -= 1);
  result = copy_addr_to_reg ((((result)->u.fld[0]).rtx1));
  return convert_memory_address (ptr_mode, result);
}
static void
expand_builtin_return (rtx result)
{
  int size, align, regno;
  enum machine_mode mode;
  rtx reg;
  rtx call_fusage = 0;
  result = convert_memory_address ((0 ? DImode : SImode), result);
  apply_result_size ();
  result = gen_rtx_MEM (BLKmode, result);
  size = 0;
  for (regno = 0; regno < 53; regno++)
    if ((mode = apply_result_mode[regno]) != VOIDmode)
      {
 align = get_mode_alignment (mode) / 8;
 if (size % align != 0)
   size = (((size) + (align) - 1) / (align)) * align;
 reg = gen_rtx_REG (mode, (regno));
 emit_move_insn (reg, adjust_address_1 (result, mode, size, 1, 1));
 push_to_sequence (call_fusage);
 emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (reg)));
 call_fusage = get_insns ();
 end_sequence ();
 size += ((unsigned short) mode_size[mode]);
      }
  emit_insn (call_fusage);
  expand_naked_return ();
}
static enum type_class
type_to_class (tree type)
{
  switch (((enum tree_code) (type)->common.code))
    {
    case VOID_TYPE: return void_type_class;
    case INTEGER_TYPE: return integer_type_class;
    case CHAR_TYPE: return char_type_class;
    case ENUMERAL_TYPE: return enumeral_type_class;
    case BOOLEAN_TYPE: return boolean_type_class;
    case POINTER_TYPE: return pointer_type_class;
    case REFERENCE_TYPE: return reference_type_class;
    case OFFSET_TYPE: return offset_type_class;
    case REAL_TYPE: return real_type_class;
    case COMPLEX_TYPE: return complex_type_class;
    case FUNCTION_TYPE: return function_type_class;
    case METHOD_TYPE: return method_type_class;
    case RECORD_TYPE: return record_type_class;
    case UNION_TYPE:
    case QUAL_UNION_TYPE: return union_type_class;
    case ARRAY_TYPE: return (((type)->type.string1_flag)
       ? string_type_class : array_type_class);
    case SET_TYPE: return set_type_class;
    case FILE_TYPE: return file_type_class;
    case LANG_TYPE: return lang_type_class;
    default: return no_type_class;
    }
}
static rtx
expand_builtin_classify_type (tree arglist)
{
  if (arglist != 0)
    return gen_rtx_CONST_INT (VOIDmode, (long) (type_to_class (((((arglist)->list.value1))->common.type))));
  return gen_rtx_CONST_INT (VOIDmode, (long) (no_type_class));
}
tree
mathfn_built_in (tree type, enum built_in_function fn)
{
  enum built_in_function fcode, fcodef, fcodel;
  switch (fn)
    {
      case BUILT_IN_ACOS: case BUILT_IN_ACOSF: case BUILT_IN_ACOSL: fcode = BUILT_IN_ACOS; fcodef = BUILT_IN_ACOSF ; fcodel = BUILT_IN_ACOSL ; break;
      case BUILT_IN_ACOSH: case BUILT_IN_ACOSHF: case BUILT_IN_ACOSHL: fcode = BUILT_IN_ACOSH; fcodef = BUILT_IN_ACOSHF ; fcodel = BUILT_IN_ACOSHL ; break;
      case BUILT_IN_ASIN: case BUILT_IN_ASINF: case BUILT_IN_ASINL: fcode = BUILT_IN_ASIN; fcodef = BUILT_IN_ASINF ; fcodel = BUILT_IN_ASINL ; break;
      case BUILT_IN_ASINH: case BUILT_IN_ASINHF: case BUILT_IN_ASINHL: fcode = BUILT_IN_ASINH; fcodef = BUILT_IN_ASINHF ; fcodel = BUILT_IN_ASINHL ; break;
      case BUILT_IN_ATAN: case BUILT_IN_ATANF: case BUILT_IN_ATANL: fcode = BUILT_IN_ATAN; fcodef = BUILT_IN_ATANF ; fcodel = BUILT_IN_ATANL ; break;
      case BUILT_IN_ATAN2: case BUILT_IN_ATAN2F: case BUILT_IN_ATAN2L: fcode = BUILT_IN_ATAN2; fcodef = BUILT_IN_ATAN2F ; fcodel = BUILT_IN_ATAN2L ; break;
      case BUILT_IN_ATANH: case BUILT_IN_ATANHF: case BUILT_IN_ATANHL: fcode = BUILT_IN_ATANH; fcodef = BUILT_IN_ATANHF ; fcodel = BUILT_IN_ATANHL ; break;
      case BUILT_IN_CBRT: case BUILT_IN_CBRTF: case BUILT_IN_CBRTL: fcode = BUILT_IN_CBRT; fcodef = BUILT_IN_CBRTF ; fcodel = BUILT_IN_CBRTL ; break;
      case BUILT_IN_CEIL: case BUILT_IN_CEILF: case BUILT_IN_CEILL: fcode = BUILT_IN_CEIL; fcodef = BUILT_IN_CEILF ; fcodel = BUILT_IN_CEILL ; break;
      case BUILT_IN_COPYSIGN: case BUILT_IN_COPYSIGNF: case BUILT_IN_COPYSIGNL: fcode = BUILT_IN_COPYSIGN; fcodef = BUILT_IN_COPYSIGNF ; fcodel = BUILT_IN_COPYSIGNL ; break;
      case BUILT_IN_COS: case BUILT_IN_COSF: case BUILT_IN_COSL: fcode = BUILT_IN_COS; fcodef = BUILT_IN_COSF ; fcodel = BUILT_IN_COSL ; break;
      case BUILT_IN_COSH: case BUILT_IN_COSHF: case BUILT_IN_COSHL: fcode = BUILT_IN_COSH; fcodef = BUILT_IN_COSHF ; fcodel = BUILT_IN_COSHL ; break;
      case BUILT_IN_DREM: case BUILT_IN_DREMF: case BUILT_IN_DREML: fcode = BUILT_IN_DREM; fcodef = BUILT_IN_DREMF ; fcodel = BUILT_IN_DREML ; break;
      case BUILT_IN_ERF: case BUILT_IN_ERFF: case BUILT_IN_ERFL: fcode = BUILT_IN_ERF; fcodef = BUILT_IN_ERFF ; fcodel = BUILT_IN_ERFL ; break;
      case BUILT_IN_ERFC: case BUILT_IN_ERFCF: case BUILT_IN_ERFCL: fcode = BUILT_IN_ERFC; fcodef = BUILT_IN_ERFCF ; fcodel = BUILT_IN_ERFCL ; break;
      case BUILT_IN_EXP: case BUILT_IN_EXPF: case BUILT_IN_EXPL: fcode = BUILT_IN_EXP; fcodef = BUILT_IN_EXPF ; fcodel = BUILT_IN_EXPL ; break;
      case BUILT_IN_EXP10: case BUILT_IN_EXP10F: case BUILT_IN_EXP10L: fcode = BUILT_IN_EXP10; fcodef = BUILT_IN_EXP10F ; fcodel = BUILT_IN_EXP10L ; break;
      case BUILT_IN_EXP2: case BUILT_IN_EXP2F: case BUILT_IN_EXP2L: fcode = BUILT_IN_EXP2; fcodef = BUILT_IN_EXP2F ; fcodel = BUILT_IN_EXP2L ; break;
      case BUILT_IN_EXPM1: case BUILT_IN_EXPM1F: case BUILT_IN_EXPM1L: fcode = BUILT_IN_EXPM1; fcodef = BUILT_IN_EXPM1F ; fcodel = BUILT_IN_EXPM1L ; break;
      case BUILT_IN_FABS: case BUILT_IN_FABSF: case BUILT_IN_FABSL: fcode = BUILT_IN_FABS; fcodef = BUILT_IN_FABSF ; fcodel = BUILT_IN_FABSL ; break;
      case BUILT_IN_FDIM: case BUILT_IN_FDIMF: case BUILT_IN_FDIML: fcode = BUILT_IN_FDIM; fcodef = BUILT_IN_FDIMF ; fcodel = BUILT_IN_FDIML ; break;
      case BUILT_IN_FLOOR: case BUILT_IN_FLOORF: case BUILT_IN_FLOORL: fcode = BUILT_IN_FLOOR; fcodef = BUILT_IN_FLOORF ; fcodel = BUILT_IN_FLOORL ; break;
      case BUILT_IN_FMA: case BUILT_IN_FMAF: case BUILT_IN_FMAL: fcode = BUILT_IN_FMA; fcodef = BUILT_IN_FMAF ; fcodel = BUILT_IN_FMAL ; break;
      case BUILT_IN_FMAX: case BUILT_IN_FMAXF: case BUILT_IN_FMAXL: fcode = BUILT_IN_FMAX; fcodef = BUILT_IN_FMAXF ; fcodel = BUILT_IN_FMAXL ; break;
      case BUILT_IN_FMIN: case BUILT_IN_FMINF: case BUILT_IN_FMINL: fcode = BUILT_IN_FMIN; fcodef = BUILT_IN_FMINF ; fcodel = BUILT_IN_FMINL ; break;
      case BUILT_IN_FMOD: case BUILT_IN_FMODF: case BUILT_IN_FMODL: fcode = BUILT_IN_FMOD; fcodef = BUILT_IN_FMODF ; fcodel = BUILT_IN_FMODL ; break;
      case BUILT_IN_FREXP: case BUILT_IN_FREXPF: case BUILT_IN_FREXPL: fcode = BUILT_IN_FREXP; fcodef = BUILT_IN_FREXPF ; fcodel = BUILT_IN_FREXPL ; break;
      case BUILT_IN_GAMMA: case BUILT_IN_GAMMAF: case BUILT_IN_GAMMAL: fcode = BUILT_IN_GAMMA; fcodef = BUILT_IN_GAMMAF ; fcodel = BUILT_IN_GAMMAL ; break;
      case BUILT_IN_HUGE_VAL: case BUILT_IN_HUGE_VALF: case BUILT_IN_HUGE_VALL: fcode = BUILT_IN_HUGE_VAL; fcodef = BUILT_IN_HUGE_VALF ; fcodel = BUILT_IN_HUGE_VALL ; break;
      case BUILT_IN_HYPOT: case BUILT_IN_HYPOTF: case BUILT_IN_HYPOTL: fcode = BUILT_IN_HYPOT; fcodef = BUILT_IN_HYPOTF ; fcodel = BUILT_IN_HYPOTL ; break;
      case BUILT_IN_ILOGB: case BUILT_IN_ILOGBF: case BUILT_IN_ILOGBL: fcode = BUILT_IN_ILOGB; fcodef = BUILT_IN_ILOGBF ; fcodel = BUILT_IN_ILOGBL ; break;
      case BUILT_IN_INF: case BUILT_IN_INFF: case BUILT_IN_INFL: fcode = BUILT_IN_INF; fcodef = BUILT_IN_INFF ; fcodel = BUILT_IN_INFL ; break;
      case BUILT_IN_J0: case BUILT_IN_J0F: case BUILT_IN_J0L: fcode = BUILT_IN_J0; fcodef = BUILT_IN_J0F ; fcodel = BUILT_IN_J0L ; break;
      case BUILT_IN_J1: case BUILT_IN_J1F: case BUILT_IN_J1L: fcode = BUILT_IN_J1; fcodef = BUILT_IN_J1F ; fcodel = BUILT_IN_J1L ; break;
      case BUILT_IN_JN: case BUILT_IN_JNF: case BUILT_IN_JNL: fcode = BUILT_IN_JN; fcodef = BUILT_IN_JNF ; fcodel = BUILT_IN_JNL ; break;
      case BUILT_IN_LDEXP: case BUILT_IN_LDEXPF: case BUILT_IN_LDEXPL: fcode = BUILT_IN_LDEXP; fcodef = BUILT_IN_LDEXPF ; fcodel = BUILT_IN_LDEXPL ; break;
      case BUILT_IN_LGAMMA: case BUILT_IN_LGAMMAF: case BUILT_IN_LGAMMAL: fcode = BUILT_IN_LGAMMA; fcodef = BUILT_IN_LGAMMAF ; fcodel = BUILT_IN_LGAMMAL ; break;
      case BUILT_IN_LLRINT: case BUILT_IN_LLRINTF: case BUILT_IN_LLRINTL: fcode = BUILT_IN_LLRINT; fcodef = BUILT_IN_LLRINTF ; fcodel = BUILT_IN_LLRINTL ; break;
      case BUILT_IN_LLROUND: case BUILT_IN_LLROUNDF: case BUILT_IN_LLROUNDL: fcode = BUILT_IN_LLROUND; fcodef = BUILT_IN_LLROUNDF ; fcodel = BUILT_IN_LLROUNDL ; break;
      case BUILT_IN_LOG: case BUILT_IN_LOGF: case BUILT_IN_LOGL: fcode = BUILT_IN_LOG; fcodef = BUILT_IN_LOGF ; fcodel = BUILT_IN_LOGL ; break;
      case BUILT_IN_LOG10: case BUILT_IN_LOG10F: case BUILT_IN_LOG10L: fcode = BUILT_IN_LOG10; fcodef = BUILT_IN_LOG10F ; fcodel = BUILT_IN_LOG10L ; break;
      case BUILT_IN_LOG1P: case BUILT_IN_LOG1PF: case BUILT_IN_LOG1PL: fcode = BUILT_IN_LOG1P; fcodef = BUILT_IN_LOG1PF ; fcodel = BUILT_IN_LOG1PL ; break;
      case BUILT_IN_LOG2: case BUILT_IN_LOG2F: case BUILT_IN_LOG2L: fcode = BUILT_IN_LOG2; fcodef = BUILT_IN_LOG2F ; fcodel = BUILT_IN_LOG2L ; break;
      case BUILT_IN_LOGB: case BUILT_IN_LOGBF: case BUILT_IN_LOGBL: fcode = BUILT_IN_LOGB; fcodef = BUILT_IN_LOGBF ; fcodel = BUILT_IN_LOGBL ; break;
      case BUILT_IN_LRINT: case BUILT_IN_LRINTF: case BUILT_IN_LRINTL: fcode = BUILT_IN_LRINT; fcodef = BUILT_IN_LRINTF ; fcodel = BUILT_IN_LRINTL ; break;
      case BUILT_IN_LROUND: case BUILT_IN_LROUNDF: case BUILT_IN_LROUNDL: fcode = BUILT_IN_LROUND; fcodef = BUILT_IN_LROUNDF ; fcodel = BUILT_IN_LROUNDL ; break;
      case BUILT_IN_MODF: case BUILT_IN_MODFF: case BUILT_IN_MODFL: fcode = BUILT_IN_MODF; fcodef = BUILT_IN_MODFF ; fcodel = BUILT_IN_MODFL ; break;
      case BUILT_IN_NAN: case BUILT_IN_NANF: case BUILT_IN_NANL: fcode = BUILT_IN_NAN; fcodef = BUILT_IN_NANF ; fcodel = BUILT_IN_NANL ; break;
      case BUILT_IN_NANS: case BUILT_IN_NANSF: case BUILT_IN_NANSL: fcode = BUILT_IN_NANS; fcodef = BUILT_IN_NANSF ; fcodel = BUILT_IN_NANSL ; break;
      case BUILT_IN_NEARBYINT: case BUILT_IN_NEARBYINTF: case BUILT_IN_NEARBYINTL: fcode = BUILT_IN_NEARBYINT; fcodef = BUILT_IN_NEARBYINTF ; fcodel = BUILT_IN_NEARBYINTL ; break;
      case BUILT_IN_NEXTAFTER: case BUILT_IN_NEXTAFTERF: case BUILT_IN_NEXTAFTERL: fcode = BUILT_IN_NEXTAFTER; fcodef = BUILT_IN_NEXTAFTERF ; fcodel = BUILT_IN_NEXTAFTERL ; break;
      case BUILT_IN_NEXTTOWARD: case BUILT_IN_NEXTTOWARDF: case BUILT_IN_NEXTTOWARDL: fcode = BUILT_IN_NEXTTOWARD; fcodef = BUILT_IN_NEXTTOWARDF ; fcodel = BUILT_IN_NEXTTOWARDL ; break;
      case BUILT_IN_POW: case BUILT_IN_POWF: case BUILT_IN_POWL: fcode = BUILT_IN_POW; fcodef = BUILT_IN_POWF ; fcodel = BUILT_IN_POWL ; break;
      case BUILT_IN_POW10: case BUILT_IN_POW10F: case BUILT_IN_POW10L: fcode = BUILT_IN_POW10; fcodef = BUILT_IN_POW10F ; fcodel = BUILT_IN_POW10L ; break;
      case BUILT_IN_REMAINDER: case BUILT_IN_REMAINDERF: case BUILT_IN_REMAINDERL: fcode = BUILT_IN_REMAINDER; fcodef = BUILT_IN_REMAINDERF ; fcodel = BUILT_IN_REMAINDERL ; break;
      case BUILT_IN_REMQUO: case BUILT_IN_REMQUOF: case BUILT_IN_REMQUOL: fcode = BUILT_IN_REMQUO; fcodef = BUILT_IN_REMQUOF ; fcodel = BUILT_IN_REMQUOL ; break;
      case BUILT_IN_RINT: case BUILT_IN_RINTF: case BUILT_IN_RINTL: fcode = BUILT_IN_RINT; fcodef = BUILT_IN_RINTF ; fcodel = BUILT_IN_RINTL ; break;
      case BUILT_IN_ROUND: case BUILT_IN_ROUNDF: case BUILT_IN_ROUNDL: fcode = BUILT_IN_ROUND; fcodef = BUILT_IN_ROUNDF ; fcodel = BUILT_IN_ROUNDL ; break;
      case BUILT_IN_SCALB: case BUILT_IN_SCALBF: case BUILT_IN_SCALBL: fcode = BUILT_IN_SCALB; fcodef = BUILT_IN_SCALBF ; fcodel = BUILT_IN_SCALBL ; break;
      case BUILT_IN_SCALBLN: case BUILT_IN_SCALBLNF: case BUILT_IN_SCALBLNL: fcode = BUILT_IN_SCALBLN; fcodef = BUILT_IN_SCALBLNF ; fcodel = BUILT_IN_SCALBLNL ; break;
      case BUILT_IN_SCALBN: case BUILT_IN_SCALBNF: case BUILT_IN_SCALBNL: fcode = BUILT_IN_SCALBN; fcodef = BUILT_IN_SCALBNF ; fcodel = BUILT_IN_SCALBNL ; break;
      case BUILT_IN_SIGNIFICAND: case BUILT_IN_SIGNIFICANDF: case BUILT_IN_SIGNIFICANDL: fcode = BUILT_IN_SIGNIFICAND; fcodef = BUILT_IN_SIGNIFICANDF ; fcodel = BUILT_IN_SIGNIFICANDL ; break;
      case BUILT_IN_SIN: case BUILT_IN_SINF: case BUILT_IN_SINL: fcode = BUILT_IN_SIN; fcodef = BUILT_IN_SINF ; fcodel = BUILT_IN_SINL ; break;
      case BUILT_IN_SINCOS: case BUILT_IN_SINCOSF: case BUILT_IN_SINCOSL: fcode = BUILT_IN_SINCOS; fcodef = BUILT_IN_SINCOSF ; fcodel = BUILT_IN_SINCOSL ; break;
      case BUILT_IN_SINH: case BUILT_IN_SINHF: case BUILT_IN_SINHL: fcode = BUILT_IN_SINH; fcodef = BUILT_IN_SINHF ; fcodel = BUILT_IN_SINHL ; break;
      case BUILT_IN_SQRT: case BUILT_IN_SQRTF: case BUILT_IN_SQRTL: fcode = BUILT_IN_SQRT; fcodef = BUILT_IN_SQRTF ; fcodel = BUILT_IN_SQRTL ; break;
      case BUILT_IN_TAN: case BUILT_IN_TANF: case BUILT_IN_TANL: fcode = BUILT_IN_TAN; fcodef = BUILT_IN_TANF ; fcodel = BUILT_IN_TANL ; break;
      case BUILT_IN_TANH: case BUILT_IN_TANHF: case BUILT_IN_TANHL: fcode = BUILT_IN_TANH; fcodef = BUILT_IN_TANHF ; fcodel = BUILT_IN_TANHL ; break;
      case BUILT_IN_TGAMMA: case BUILT_IN_TGAMMAF: case BUILT_IN_TGAMMAL: fcode = BUILT_IN_TGAMMA; fcodef = BUILT_IN_TGAMMAF ; fcodel = BUILT_IN_TGAMMAL ; break;
      case BUILT_IN_TRUNC: case BUILT_IN_TRUNCF: case BUILT_IN_TRUNCL: fcode = BUILT_IN_TRUNC; fcodef = BUILT_IN_TRUNCF ; fcodel = BUILT_IN_TRUNCL ; break;
      case BUILT_IN_Y0: case BUILT_IN_Y0F: case BUILT_IN_Y0L: fcode = BUILT_IN_Y0; fcodef = BUILT_IN_Y0F ; fcodel = BUILT_IN_Y0L ; break;
      case BUILT_IN_Y1: case BUILT_IN_Y1F: case BUILT_IN_Y1L: fcode = BUILT_IN_Y1; fcodef = BUILT_IN_Y1F ; fcodel = BUILT_IN_Y1L ; break;
      case BUILT_IN_YN: case BUILT_IN_YNF: case BUILT_IN_YNL: fcode = BUILT_IN_YN; fcodef = BUILT_IN_YNF ; fcodel = BUILT_IN_YNL ; break;
      default:
 return 0;
      }
  if (((type)->type.main_variant) == global_trees[TI_DOUBLE_TYPE])
    return implicit_built_in_decls[fcode];
  else if (((type)->type.main_variant) == global_trees[TI_FLOAT_TYPE])
    return implicit_built_in_decls[fcodef];
  else if (((type)->type.main_variant) == global_trees[TI_LONG_DOUBLE_TYPE])
    return implicit_built_in_decls[fcodel];
  else
    return 0;
}
static void
expand_errno_check (tree exp, rtx target)
{
  rtx lab = gen_label_rtx ();
  emit_cmp_and_jump_insns (target, target, EQ, 0, ((enum machine_mode) (target)->mode),
      0, lab);
  ((cfun->expr->x_inhibit_defer_pop) += 1);
  expand_call (exp, target, 0);
  ((cfun->expr->x_inhibit_defer_pop) -= 1);
  emit_label (lab);
}
static rtx
expand_builtin_mathfn (tree exp, rtx target, rtx subtarget)
{
  optab builtin_optab;
  rtx op0, insns, before_call;
  tree fndecl = get_callee_fndecl (exp);
  tree arglist = ((exp)->exp.operands[1]);
  enum machine_mode mode;
  unsigned char errno_set = 0;
  tree arg, narg;
  if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  switch (((fndecl)->decl.u1.f))
    {
    case BUILT_IN_SQRT:
    case BUILT_IN_SQRTF:
    case BUILT_IN_SQRTL:
      errno_set = ! tree_expr_nonnegative_p (arg);
      builtin_optab = (optab_table[OTI_sqrt]);
      break;
    case BUILT_IN_EXP:
    case BUILT_IN_EXPF:
    case BUILT_IN_EXPL:
      errno_set = 1; builtin_optab = (optab_table[OTI_exp]); break;
    case BUILT_IN_EXP10:
    case BUILT_IN_EXP10F:
    case BUILT_IN_EXP10L:
    case BUILT_IN_POW10:
    case BUILT_IN_POW10F:
    case BUILT_IN_POW10L:
      errno_set = 1; builtin_optab = (optab_table[OTI_exp10]); break;
    case BUILT_IN_EXP2:
    case BUILT_IN_EXP2F:
    case BUILT_IN_EXP2L:
      errno_set = 1; builtin_optab = (optab_table[OTI_exp2]); break;
    case BUILT_IN_EXPM1:
    case BUILT_IN_EXPM1F:
    case BUILT_IN_EXPM1L:
      errno_set = 1; builtin_optab = (optab_table[OTI_expm1]); break;
    case BUILT_IN_LOGB:
    case BUILT_IN_LOGBF:
    case BUILT_IN_LOGBL:
      errno_set = 1; builtin_optab = (optab_table[OTI_logb]); break;
    case BUILT_IN_ILOGB:
    case BUILT_IN_ILOGBF:
    case BUILT_IN_ILOGBL:
      errno_set = 1; builtin_optab = (optab_table[OTI_ilogb]); break;
    case BUILT_IN_LOG:
    case BUILT_IN_LOGF:
    case BUILT_IN_LOGL:
      errno_set = 1; builtin_optab = (optab_table[OTI_log]); break;
    case BUILT_IN_LOG10:
    case BUILT_IN_LOG10F:
    case BUILT_IN_LOG10L:
      errno_set = 1; builtin_optab = (optab_table[OTI_log10]); break;
    case BUILT_IN_LOG2:
    case BUILT_IN_LOG2F:
    case BUILT_IN_LOG2L:
      errno_set = 1; builtin_optab = (optab_table[OTI_log2]); break;
    case BUILT_IN_LOG1P:
    case BUILT_IN_LOG1PF:
    case BUILT_IN_LOG1PL:
      errno_set = 1; builtin_optab = (optab_table[OTI_log1p]); break;
    case BUILT_IN_ASIN:
    case BUILT_IN_ASINF:
    case BUILT_IN_ASINL:
      builtin_optab = (optab_table[OTI_asin]); break;
    case BUILT_IN_ACOS:
    case BUILT_IN_ACOSF:
    case BUILT_IN_ACOSL:
      builtin_optab = (optab_table[OTI_acos]); break;
    case BUILT_IN_TAN:
    case BUILT_IN_TANF:
    case BUILT_IN_TANL:
      builtin_optab = (optab_table[OTI_tan]); break;
    case BUILT_IN_ATAN:
    case BUILT_IN_ATANF:
    case BUILT_IN_ATANL:
      builtin_optab = (optab_table[OTI_atan]); break;
    case BUILT_IN_FLOOR:
    case BUILT_IN_FLOORF:
    case BUILT_IN_FLOORL:
      builtin_optab = (optab_table[OTI_floor]); break;
    case BUILT_IN_CEIL:
    case BUILT_IN_CEILF:
    case BUILT_IN_CEILL:
      builtin_optab = (optab_table[OTI_ceil]); break;
    case BUILT_IN_TRUNC:
    case BUILT_IN_TRUNCF:
    case BUILT_IN_TRUNCL:
      builtin_optab = (optab_table[OTI_trunc]); break;
    case BUILT_IN_ROUND:
    case BUILT_IN_ROUNDF:
    case BUILT_IN_ROUNDL:
      builtin_optab = (optab_table[OTI_round]); break;
    case BUILT_IN_NEARBYINT:
    case BUILT_IN_NEARBYINTF:
    case BUILT_IN_NEARBYINTL:
      builtin_optab = (optab_table[OTI_nearbyint]); break;
    default:
      fancy_abort ("gcc.c", 378668, "?");
    }
  mode = ((((exp)->common.type))->type.mode);
  if (! flag_errno_math || ! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
    errno_set = 0;
  if (builtin_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
    {
      target = gen_reg_rtx (mode);
      narg = builtin_save_expr (arg);
      if (narg != arg)
 {
   arglist = build_tree_list_stat((tree) ((void *)0),arg );
   exp = build_function_call_expr (fndecl, arglist);
 }
      op0 = expand_expr (arg, subtarget, VOIDmode, 0);
      emit_queue ();
      start_sequence ();
      target = expand_unop (mode, builtin_optab, op0, target, 0);
      if (target != 0)
 {
   if (errno_set)
     expand_errno_check (exp, target);
   insns = get_insns ();
   end_sequence ();
   emit_insn (insns);
   return target;
 }
      end_sequence ();
    }
  before_call = get_last_insn ();
  target = expand_call (exp, target, target == (const_int_rtx[64]));
  if (builtin_optab == (optab_table[OTI_sqrt]) && !errno_set)
    {
      rtx last = get_last_insn ();
      while (last != before_call)
 {
   if (find_reg_note (last, REG_RETVAL, ((void *)0)))
     {
       rtx note = find_reg_note (last, REG_EQUAL, ((void *)0));
       if (note
    && ((enum rtx_code) (note)->code) == EXPR_LIST
    && ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == EXPR_LIST
    && ((((((note)->u.fld[0]).rtx1))->u.fld[1]).rtx1) != (rtx) 0
    && (((((((((note)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1) == (rtx) 0)
  {
    rtx operand = (((((((((note)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
    if (operand
        && (((enum rtx_code) (operand)->code) == REG)
        && ((enum machine_mode) (operand)->mode) == mode)
      {
        rtx equiv = gen_rtx_fmt_e (SQRT, (mode), (operand));
        set_unique_reg_note (last, REG_EQUAL, equiv);
      }
  }
       break;
     }
   last = (((last)->u.fld[1]).rtx1);
 }
    }
  return target;
}
static rtx
expand_builtin_mathfn_2 (tree exp, rtx target, rtx subtarget)
{
  optab builtin_optab;
  rtx op0, op1, insns;
  tree fndecl = get_callee_fndecl (exp);
  tree arglist = ((exp)->exp.operands[1]);
  tree arg0, arg1, temp, narg;
  enum machine_mode mode;
  unsigned char errno_set = 1;
  unsigned char stable = 1;
  if (!validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE))
    return 0;
  arg0 = ((arglist)->list.value1);
  arg1 = ((((arglist)->common.chain))->list.value1);
  switch (((fndecl)->decl.u1.f))
    {
    case BUILT_IN_POW:
    case BUILT_IN_POWF:
    case BUILT_IN_POWL:
      builtin_optab = (optab_table[OTI_pow]); break;
    case BUILT_IN_ATAN2:
    case BUILT_IN_ATAN2F:
    case BUILT_IN_ATAN2L:
      builtin_optab = (optab_table[OTI_atan2]); break;
    case BUILT_IN_FMOD:
    case BUILT_IN_FMODF:
    case BUILT_IN_FMODL:
      builtin_optab = (optab_table[OTI_fmod]); break;
    case BUILT_IN_DREM:
    case BUILT_IN_DREMF:
    case BUILT_IN_DREML:
      builtin_optab = (optab_table[OTI_drem]); break;
    default:
      fancy_abort ("gcc.c", 378809, "?");
    }
  mode = ((((exp)->common.type))->type.mode);
  if (builtin_optab->handlers[(int) mode].insn_code == CODE_FOR_nothing)
    return 0;
  target = gen_reg_rtx (mode);
  if (! flag_errno_math || ! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
    errno_set = 0;
  narg = builtin_save_expr (arg1);
  if (narg != arg1)
    {
      temp = build_tree_list_stat((tree) ((void *)0),narg );
      stable = 0;
    }
  else
    temp = ((arglist)->common.chain);
  narg = builtin_save_expr (arg0);
  if (narg != arg0)
    {
      arglist = tree_cons_stat ((tree) ((void *)0),narg,temp );
      stable = 0;
    }
  else if (! stable)
    arglist = tree_cons_stat ((tree) ((void *)0),arg0,temp );
  if (! stable)
    exp = build_function_call_expr (fndecl, arglist);
  op0 = expand_expr (arg0, subtarget, VOIDmode, 0);
  op1 = expand_expr (arg1, 0, VOIDmode, 0);
  emit_queue ();
  start_sequence ();
  target = expand_binop (mode, builtin_optab, op0, op1,
    target, 0, OPTAB_DIRECT);
  if (target == 0)
    {
      end_sequence ();
      return expand_call (exp, target, target == (const_int_rtx[64]));
    }
  if (errno_set)
    expand_errno_check (exp, target);
  insns = get_insns ();
  end_sequence ();
  emit_insn (insns);
  return target;
}
static rtx
expand_builtin_mathfn_3 (tree exp, rtx target, rtx subtarget)
{
  optab builtin_optab;
  rtx op0, insns, before_call;
  tree fndecl = get_callee_fndecl (exp);
  tree arglist = ((exp)->exp.operands[1]);
  enum machine_mode mode;
  unsigned char errno_set = 0;
  tree arg, narg;
  if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  switch (((fndecl)->decl.u1.f))
    {
    case BUILT_IN_SIN:
    case BUILT_IN_SINF:
    case BUILT_IN_SINL:
    case BUILT_IN_COS:
    case BUILT_IN_COSF:
    case BUILT_IN_COSL:
      builtin_optab = (optab_table[OTI_sincos]); break;
    default:
      fancy_abort ("gcc.c", 378910, "?");
    }
  mode = ((((exp)->common.type))->type.mode);
  if (! flag_errno_math || ! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
    errno_set = 0;
  if (builtin_optab->handlers[(int) mode].insn_code == CODE_FOR_nothing) {
    switch (((fndecl)->decl.u1.f))
      {
      case BUILT_IN_SIN:
      case BUILT_IN_SINF:
      case BUILT_IN_SINL:
 builtin_optab = (optab_table[OTI_sin]); break;
      case BUILT_IN_COS:
      case BUILT_IN_COSF:
      case BUILT_IN_COSL:
 builtin_optab = (optab_table[OTI_cos]); break;
      default:
 fancy_abort ("gcc.c", 378933, "?");
      }
  }
  if (builtin_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
    {
      target = gen_reg_rtx (mode);
      narg = save_expr (arg);
      if (narg != arg)
 {
   arglist = build_tree_list_stat((tree) ((void *)0),arg );
   exp = build_function_call_expr (fndecl, arglist);
 }
      op0 = expand_expr (arg, subtarget, VOIDmode, 0);
      emit_queue ();
      start_sequence ();
      if (builtin_optab == (optab_table[OTI_sincos]))
 {
   switch (((fndecl)->decl.u1.f))
     {
     case BUILT_IN_SIN:
     case BUILT_IN_SINF:
     case BUILT_IN_SINL:
       if (!expand_twoval_unop (builtin_optab, op0, 0, target, 0))
  fancy_abort ("gcc.c", 378967, "?");
       break;
     case BUILT_IN_COS:
     case BUILT_IN_COSF:
     case BUILT_IN_COSL:
       if (!expand_twoval_unop (builtin_optab, op0, target, 0, 0))
  fancy_abort ("gcc.c", 378973, "?");
       break;
     default:
       fancy_abort ("gcc.c", 378976, "?");
     }
 }
      else
 {
   target = expand_unop (mode, builtin_optab, op0, target, 0);
 }
      if (target != 0)
 {
   if (errno_set)
     expand_errno_check (exp, target);
   insns = get_insns ();
   end_sequence ();
   emit_insn (insns);
   return target;
 }
      end_sequence ();
    }
  before_call = get_last_insn ();
  target = expand_call (exp, target, target == (const_int_rtx[64]));
  return target;
}
static const unsigned char powi_table[256] =
  {
      0, 1, 1, 2, 2, 3, 3, 4,
      4, 6, 5, 6, 6, 10, 7, 9,
      8, 16, 9, 16, 10, 12, 11, 13,
     12, 17, 13, 18, 14, 24, 15, 26,
     16, 17, 17, 19, 18, 33, 19, 26,
     20, 25, 21, 40, 22, 27, 23, 44,
     24, 32, 25, 34, 26, 29, 27, 44,
     28, 31, 29, 34, 30, 60, 31, 36,
     32, 64, 33, 34, 34, 46, 35, 37,
     36, 65, 37, 50, 38, 48, 39, 69,
     40, 49, 41, 43, 42, 51, 43, 58,
     44, 64, 45, 47, 46, 59, 47, 76,
     48, 65, 49, 66, 50, 67, 51, 66,
     52, 70, 53, 74, 54, 104, 55, 74,
     56, 64, 57, 69, 58, 78, 59, 68,
     60, 61, 61, 80, 62, 75, 63, 68,
     64, 65, 65, 128, 66, 129, 67, 90,
     68, 73, 69, 131, 70, 94, 71, 88,
     72, 128, 73, 98, 74, 132, 75, 121,
     76, 102, 77, 124, 78, 132, 79, 106,
     80, 97, 81, 160, 82, 99, 83, 134,
     84, 86, 85, 95, 86, 160, 87, 100,
     88, 113, 89, 98, 90, 107, 91, 122,
     92, 111, 93, 102, 94, 126, 95, 150,
     96, 128, 97, 130, 98, 133, 99, 195,
    100, 128, 101, 123, 102, 164, 103, 138,
    104, 145, 105, 146, 106, 109, 107, 149,
    108, 200, 109, 146, 110, 170, 111, 157,
    112, 128, 113, 130, 114, 182, 115, 132,
    116, 200, 117, 132, 118, 158, 119, 206,
    120, 240, 121, 162, 122, 147, 123, 152,
    124, 166, 125, 214, 126, 138, 127, 153,
  };
static int
powi_lookup_cost (unsigned long n, unsigned char *cache)
{
  if (cache[n])
    return 0;
  cache[n] = 1;
  return powi_lookup_cost (n - powi_table[n], cache)
  + powi_lookup_cost (powi_table[n], cache) + 1;
}
static int
powi_cost (long n)
{
  unsigned char cache[256];
  unsigned long digit;
  unsigned long val;
  int result;
  if (n == 0)
    return 0;
  val = (n < 0) ? -n : n;
  memset (cache, 0, 256 * sizeof (unsigned char));
  cache[1] = 1;
  result = 0;
  while (val >= 256)
    {
      if (val & 1)
 {
   digit = val & ((1 << 3) - 1);
   result += powi_lookup_cost (digit, cache)
      + 3 + 1;
   val >>= 3;
 }
      else
 {
   val >>= 1;
   result++;
 }
    }
  return result + powi_lookup_cost (val, cache);
}
static rtx
expand_powi_1 (enum machine_mode mode, unsigned long n, rtx *cache)
{
  unsigned long digit;
  rtx target, result;
  rtx op0, op1;
  if (n < 256)
    {
      if (cache[n])
        return cache[n];
      target = gen_reg_rtx (mode);
      cache[n] = target;
      op0 = expand_powi_1 (mode, n - powi_table[n], cache);
      op1 = expand_powi_1 (mode, powi_table[n], cache);
    }
  else if (n & 1)
    {
      target = gen_reg_rtx (mode);
      digit = n & ((1 << 3) - 1);
      op0 = expand_powi_1 (mode, n - digit, cache);
      op1 = expand_powi_1 (mode, digit, cache);
    }
  else
    {
      target = gen_reg_rtx (mode);
      op0 = expand_powi_1 (mode, n >> 1, cache);
      op1 = op0;
    }
  result = expand_mult (mode, op0, op1, target, 0);
  if (result != target)
    emit_move_insn (target, result);
  return target;
}
static rtx
expand_powi (rtx x, enum machine_mode mode, long n)
{
  unsigned long val;
  rtx cache[256];
  rtx result;
  if (n == 0)
    return (const_tiny_rtx[1][(int) (mode)]);
  val = (n < 0) ? -n : n;
  memset (cache, 0, sizeof (cache));
  cache[1] = x;
  result = expand_powi_1 (mode, (n < 0) ? -n : n, cache);
  if (n < 0)
    result = expand_binop (mode, (optab_table[OTI_sdiv]), (const_tiny_rtx[1][(int) (mode)]),
      result, (rtx) 0, 0, OPTAB_LIB_WIDEN);
  return result;
}
static rtx
expand_builtin_pow (tree exp, rtx target, rtx subtarget)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg0, arg1;
  if (! validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE))
    return 0;
  arg0 = ((arglist)->list.value1);
  arg1 = ((((arglist)->common.chain))->list.value1);
  if (((enum tree_code) (arg1)->common.code) == REAL_CST
      && ! ((arg1)->common.static_flag))
    {
      struct real_value cint;
      struct real_value c;
      long n;
      c = (*((arg1)->real_cst.real_cst_ptr));
      n = real_to_integer (&c);
      real_from_integer (&cint, VOIDmode, n, n < 0 ? -1 : 0, 0);
      if (real_identical (&c, &cint))
 {
   if ((n >= -1 && n <= 2)
       || (flag_unsafe_math_optimizations
    && ! optimize_size
    && powi_cost (n) <= (2*(8 * 4)-2)))
     {
       enum machine_mode mode = ((((exp)->common.type))->type.mode);
       rtx op = expand_expr (arg0, subtarget, VOIDmode, 0);
       op = force_reg (mode, op);
       return expand_powi (op, mode, n);
     }
 }
    }
  if (! flag_unsafe_math_optimizations)
    return (rtx) 0;
  return expand_builtin_mathfn_2 (exp, target, subtarget);
}
static rtx
expand_builtin_strlen (tree arglist, rtx target,
         enum machine_mode target_mode)
{
  if (!validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      rtx pat;
      tree len, src = ((arglist)->list.value1);
      rtx result, src_reg, char_rtx, before_strlen;
      enum machine_mode insn_mode = target_mode, char_mode;
      enum insn_code icode = CODE_FOR_nothing;
      int align;
      len = c_strlen (src, 0);
      if (len)
 return expand_expr (len, target, target_mode, EXPAND_NORMAL);
      len = c_strlen (src, 1);
      if (len && ((enum tree_code) (len)->common.code) == INTEGER_CST)
 {
   expand_expr (src, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   return expand_expr (len, target, target_mode, EXPAND_NORMAL);
 }
      align = get_pointer_alignment (src, 128) / 8;
      if (align == 0)
 return 0;
      while (insn_mode != VOIDmode)
 {
   icode = (optab_table[OTI_strlen])->handlers[(int) insn_mode].insn_code;
   if (icode != CODE_FOR_nothing)
     break;
   insn_mode = mode_wider[insn_mode];
 }
      if (insn_mode == VOIDmode)
 return 0;
      result = target;
      if (! (result != 0
      && (((enum rtx_code) (result)->code) == REG)
      && ((enum machine_mode) (result)->mode) == insn_mode
      && (((result)->u.fld[0]).rtuint) >= 53))
 result = gen_reg_rtx (insn_mode);
      src_reg = gen_reg_rtx ((0 ? DImode : SImode));
      before_strlen = get_last_insn ();
      char_rtx = (const_int_rtx[64]);
      char_mode = insn_data[(int) icode].operand[2].mode;
      if (! (*insn_data[(int) icode].operand[2].predicate) (char_rtx,
           char_mode))
 char_rtx = copy_to_mode_reg (char_mode, char_rtx);
      pat = (insn_data[icode].genfun) (result, gen_rtx_MEM (BLKmode, src_reg),
        char_rtx, gen_rtx_CONST_INT (VOIDmode, (long) (align)));
      if (! pat)
 return 0;
      emit_insn (pat);
      start_sequence ();
      pat = memory_address (BLKmode,
       expand_expr (src, src_reg, ptr_mode, EXPAND_SUM));
      if (pat != src_reg)
 emit_move_insn (src_reg, pat);
      pat = get_insns ();
      end_sequence ();
      if (before_strlen)
 emit_insn_after (pat, before_strlen);
      else
 emit_insn_before (pat, get_insns ());
      if (((enum machine_mode) (result)->mode) == target_mode)
 target = result;
      else if (target != 0)
 convert_move (target, result, 0);
      else
 target = convert_to_mode (target_mode, result, 0);
      return target;
    }
}
static rtx
expand_builtin_strstr (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      tree fn, tmp;
      const char *p1, *p2;
      p2 = c_getstr (s2);
      if (p2 == ((void *)0))
 return 0;
      p1 = c_getstr (s1);
      if (p1 != ((void *)0))
 {
   const char *r = strstr (p1, p2);
   if (r == ((void *)0))
     return (const_int_rtx[64]);
   tmp = fold (build2_stat (PLUS_EXPR,((s1)->common.type),s1,fold_convert (((s1)->common.type), size_int_wide ((long) (r - p1), SSIZETYPE)) )
                             );
   return expand_expr (tmp, target, mode, EXPAND_NORMAL);
 }
      if (p2[0] == '\0')
 return expand_expr (s1, target, mode, EXPAND_NORMAL);
      if (p2[1] != '\0')
 return 0;
      fn = implicit_built_in_decls[BUILT_IN_STRCHR];
      if (!fn)
 return 0;
      arglist =
 build_tree_list_stat((tree) ((void *)0),build_int_2_wide ((unsigned long) (p2[0]), (long) (0)) );
      arglist = tree_cons_stat ((tree) ((void *)0),s1,arglist );
      return expand_expr (build_function_call_expr (fn, arglist),
     target, mode, EXPAND_NORMAL);
    }
}
static rtx
expand_builtin_strchr (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      const char *p1;
      if (((enum tree_code) (s2)->common.code) != INTEGER_CST)
 return 0;
      p1 = c_getstr (s1);
      if (p1 != ((void *)0))
 {
   char c;
   const char *r;
   tree tmp;
   if (target_char_cast (s2, &c))
     return 0;
   r = strchr (p1, c);
   if (r == ((void *)0))
     return (const_int_rtx[64]);
   tmp = fold (build2_stat (PLUS_EXPR,((s1)->common.type),s1,fold_convert (((s1)->common.type), size_int_wide ((long) (r - p1), SSIZETYPE)) )
                             );
   return expand_expr (tmp, target, mode, EXPAND_NORMAL);
 }
      return 0;
    }
}
static rtx
expand_builtin_strrchr (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      tree fn, tmp;
      const char *p1;
      if (((enum tree_code) (s2)->common.code) != INTEGER_CST)
 return 0;
      p1 = c_getstr (s1);
      if (p1 != ((void *)0))
 {
   char c;
   const char *r;
   if (target_char_cast (s2, &c))
     return 0;
   r = strrchr (p1, c);
   if (r == ((void *)0))
     return (const_int_rtx[64]);
   tmp = fold (build2_stat (PLUS_EXPR,((s1)->common.type),s1,fold_convert (((s1)->common.type), size_int_wide ((long) (r - p1), SSIZETYPE)) )
                             );
   return expand_expr (tmp, target, mode, EXPAND_NORMAL);
 }
      if (! integer_zerop (s2))
 return 0;
      fn = implicit_built_in_decls[BUILT_IN_STRCHR];
      if (!fn)
 return 0;
      return expand_expr (build_function_call_expr (fn, arglist),
     target, mode, EXPAND_NORMAL);
    }
}
static rtx
expand_builtin_strpbrk (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      tree fn, tmp;
      const char *p1, *p2;
      p2 = c_getstr (s2);
      if (p2 == ((void *)0))
 return 0;
      p1 = c_getstr (s1);
      if (p1 != ((void *)0))
 {
   const char *r = strpbrk (p1, p2);
   if (r == ((void *)0))
     return (const_int_rtx[64]);
   tmp = fold (build2_stat (PLUS_EXPR,((s1)->common.type),s1,fold_convert (((s1)->common.type), size_int_wide ((long) (r - p1), SSIZETYPE)) )
                             );
   return expand_expr (tmp, target, mode, EXPAND_NORMAL);
 }
      if (p2[0] == '\0')
 {
   expand_expr (s1, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   return (const_int_rtx[64]);
 }
      if (p2[1] != '\0')
 return 0;
      fn = implicit_built_in_decls[BUILT_IN_STRCHR];
      if (!fn)
 return 0;
      arglist =
 build_tree_list_stat((tree) ((void *)0),build_int_2_wide ((unsigned long) (p2[0]), (long) (0)) );
      arglist = tree_cons_stat ((tree) ((void *)0),s1,arglist );
      return expand_expr (build_function_call_expr (fn, arglist),
     target, mode, EXPAND_NORMAL);
    }
}
static rtx
builtin_memcpy_read_str (void *data, long offset,
    enum machine_mode mode)
{
  const char *str = (const char *) data;
  if (offset < 0
      || ((unsigned long) offset + ((unsigned short) mode_size[mode])
   > strlen (str) + 1))
    fancy_abort ("gcc.c", 379597, "?");
  return c_readstr (str + offset, mode);
}
static rtx
expand_builtin_memcpy (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree dest = ((arglist)->list.value1);
      tree src = ((((arglist)->common.chain))->list.value1);
      tree len = ((((((arglist)->common.chain))->common.chain))->list.value1);
      const char *src_str;
      unsigned int src_align = get_pointer_alignment (src, 128);
      unsigned int dest_align
 = get_pointer_alignment (dest, 128);
      rtx dest_mem, src_mem, dest_addr, len_rtx;
      if (dest_align == 0)
 return 0;
      if (integer_zerop (len))
 {
   expand_expr (src, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   return expand_expr (dest, target, mode, EXPAND_NORMAL);
 }
      if (operand_equal_p (src, dest, 0))
 {
   expand_expr (len, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   return expand_expr (dest, target, mode, EXPAND_NORMAL);
 }
      if (src_align == 0)
 return 0;
      dest_mem = get_memory_rtx (dest);
      set_mem_align (dest_mem, dest_align);
      len_rtx = expand_expr (len, (rtx) 0, VOIDmode, 0);
      src_str = c_getstr (src);
      if (src_str
   && ((enum rtx_code) (len_rtx)->code) == CONST_INT
   && (unsigned long) ((len_rtx)->u.hwint[0]) <= strlen (src_str) + 1
   && can_store_by_pieces (((len_rtx)->u.hwint[0]), builtin_memcpy_read_str,
      (void *) src_str, dest_align))
 {
   dest_mem = store_by_pieces (dest_mem, ((len_rtx)->u.hwint[0]),
          builtin_memcpy_read_str,
          (void *) src_str, dest_align, 0);
   dest_mem = force_operand ((((dest_mem)->u.fld[0]).rtx1), (rtx) 0);
   dest_mem = convert_memory_address (ptr_mode, dest_mem);
   return dest_mem;
 }
      src_mem = get_memory_rtx (src);
      set_mem_align (src_mem, src_align);
      dest_addr = emit_block_move (dest_mem, src_mem, len_rtx,
       BLOCK_OP_NORMAL);
      if (dest_addr == 0)
 {
   dest_addr = force_operand ((((dest_mem)->u.fld[0]).rtx1), (rtx) 0);
   dest_addr = convert_memory_address (ptr_mode, dest_addr);
 }
      return dest_addr;
    }
}
static rtx
expand_builtin_mempcpy (tree arglist, rtx target, enum machine_mode mode,
   int endp)
{
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else if (target == (const_int_rtx[64]))
    {
      tree fn = implicit_built_in_decls[BUILT_IN_MEMCPY];
      if (!fn)
 return 0;
      return expand_expr (build_function_call_expr (fn, arglist),
     target, mode, EXPAND_NORMAL);
    }
  else
    {
      tree dest = ((arglist)->list.value1);
      tree src = ((((arglist)->common.chain))->list.value1);
      tree len = ((((((arglist)->common.chain))->common.chain))->list.value1);
      const char *src_str;
      unsigned int src_align = get_pointer_alignment (src, 128);
      unsigned int dest_align
 = get_pointer_alignment (dest, 128);
      rtx dest_mem, src_mem, len_rtx;
      if (dest_align == 0)
 return 0;
      if (operand_equal_p (src, dest, 0))
 {
   tree expr;
   if (endp == 0)
     {
       expand_expr (len, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
       return expand_expr (dest, target, mode, EXPAND_NORMAL);
     }
   if (endp == 2)
     len = fold (build2_stat (MINUS_EXPR,((len)->common.type),len,global_trees[TI_INTEGER_ONE] )
                     );
   len = fold_convert (((dest)->common.type), len);
   expr = fold (build2_stat (PLUS_EXPR,((dest)->common.type),dest,len ));
   return expand_expr (expr, target, mode, EXPAND_NORMAL);
 }
      if (! host_integerp (len, 1))
 return 0;
      if (tree_low_cst (len, 1) == 0)
 {
   expand_expr (src, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   return expand_expr (dest, target, mode, EXPAND_NORMAL);
 }
      if (src_align == 0)
 return 0;
      len_rtx = expand_expr (len, (rtx) 0, VOIDmode, 0);
      src_str = c_getstr (src);
      if (src_str
   && ((enum rtx_code) (len_rtx)->code) == CONST_INT
   && (unsigned long) ((len_rtx)->u.hwint[0]) <= strlen (src_str) + 1
   && can_store_by_pieces (((len_rtx)->u.hwint[0]), builtin_memcpy_read_str,
      (void *) src_str, dest_align))
 {
   dest_mem = get_memory_rtx (dest);
   set_mem_align (dest_mem, dest_align);
   dest_mem = store_by_pieces (dest_mem, ((len_rtx)->u.hwint[0]),
          builtin_memcpy_read_str,
          (void *) src_str, dest_align, endp);
   dest_mem = force_operand ((((dest_mem)->u.fld[0]).rtx1), (rtx) 0);
   dest_mem = convert_memory_address (ptr_mode, dest_mem);
   return dest_mem;
 }
      if (((enum rtx_code) (len_rtx)->code) == CONST_INT
   && can_move_by_pieces (((len_rtx)->u.hwint[0]),
     ((dest_align) < (src_align) ? (dest_align) : (src_align))))
 {
   dest_mem = get_memory_rtx (dest);
   set_mem_align (dest_mem, dest_align);
   src_mem = get_memory_rtx (src);
   set_mem_align (src_mem, src_align);
   dest_mem = move_by_pieces (dest_mem, src_mem, ((len_rtx)->u.hwint[0]),
         ((dest_align) < (src_align) ? (dest_align) : (src_align)), endp);
   dest_mem = force_operand ((((dest_mem)->u.fld[0]).rtx1), (rtx) 0);
   dest_mem = convert_memory_address (ptr_mode, dest_mem);
   return dest_mem;
 }
      return 0;
    }
}
static rtx
expand_builtin_memmove (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree dest = ((arglist)->list.value1);
      tree src = ((((arglist)->common.chain))->list.value1);
      tree len = ((((((arglist)->common.chain))->common.chain))->list.value1);
      unsigned int src_align = get_pointer_alignment (src, 128);
      unsigned int dest_align
 = get_pointer_alignment (dest, 128);
      if (dest_align == 0)
 return 0;
      if (integer_zerop (len))
 {
   expand_expr (src, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   return expand_expr (dest, target, mode, EXPAND_NORMAL);
 }
      if (operand_equal_p (src, dest, 0))
 {
   expand_expr (len, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   return expand_expr (dest, target, mode, EXPAND_NORMAL);
 }
      if (src_align == 0)
 return 0;
      if (readonly_data_expr (src))
        {
   tree const fn = implicit_built_in_decls[BUILT_IN_MEMCPY];
   if (!fn)
     return 0;
   return expand_expr (build_function_call_expr (fn, arglist),
         target, mode, EXPAND_NORMAL);
 }
      return 0;
   }
}
static rtx
expand_builtin_bcopy (tree arglist)
{
  tree src, dest, size, newarglist;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return (rtx) 0;
  src = ((arglist)->list.value1);
  dest = ((((arglist)->common.chain))->list.value1);
  size = ((((((arglist)->common.chain))->common.chain))->list.value1);
  newarglist = build_tree_list_stat((tree) ((void *)0),fold_convert (sizetype_tab[(int) SIZETYPE], size) );
  newarglist = tree_cons_stat ((tree) ((void *)0),src,newarglist );
  newarglist = tree_cons_stat ((tree) ((void *)0),dest,newarglist );
  return expand_builtin_memmove (newarglist, (const_int_rtx[64]), VOIDmode);
}
static rtx
expand_builtin_strcpy (tree arglist, rtx target, enum machine_mode mode)
{
  tree fn, len, src, dst;
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  src = ((((arglist)->common.chain))->list.value1);
  dst = ((arglist)->list.value1);
  if (operand_equal_p (src, dst, 0))
    return expand_expr (dst, target, mode, EXPAND_NORMAL);
  fn = implicit_built_in_decls[BUILT_IN_MEMCPY];
  if (!fn)
    return 0;
  len = c_strlen (src, 1);
  if (len == 0 || ((len)->common.side_effects_flag))
    return 0;
  len = size_binop (PLUS_EXPR, len, size_int_wide ((long) (1), SSIZETYPE));
  arglist = build_tree_list_stat((tree) ((void *)0),len );
  arglist = tree_cons_stat ((tree) ((void *)0),src,arglist );
  arglist = tree_cons_stat ((tree) ((void *)0),dst,arglist );
  return expand_expr (build_function_call_expr (fn, arglist),
        target, mode, EXPAND_NORMAL);
}
static rtx
expand_builtin_stpcpy (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree dst, src, len;
      if (target == (const_int_rtx[64]))
 {
   tree fn = implicit_built_in_decls[BUILT_IN_STRCPY];
   if (!fn)
     return 0;
   return expand_expr (build_function_call_expr (fn, arglist),
         target, mode, EXPAND_NORMAL);
 }
      src = ((((arglist)->common.chain))->list.value1);
      if (! c_getstr (src) || ! (len = c_strlen (src, 0)))
 return 0;
      dst = ((arglist)->list.value1);
      len = fold (size_binop (PLUS_EXPR, len, size_int_wide ((long) (1), SSIZETYPE)));
      arglist = build_tree_list_stat((tree) ((void *)0),len );
      arglist = tree_cons_stat ((tree) ((void *)0),src,arglist );
      arglist = tree_cons_stat ((tree) ((void *)0),dst,arglist );
      return expand_builtin_mempcpy (arglist, target, mode, 2);
    }
}
static rtx
builtin_strncpy_read_str (void *data, long offset,
     enum machine_mode mode)
{
  const char *str = (const char *) data;
  if ((unsigned long) offset > strlen (str))
    return (const_int_rtx[64]);
  return c_readstr (str + offset, mode);
}
static rtx
expand_builtin_strncpy (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree slen = c_strlen (((((arglist)->common.chain))->list.value1), 1);
      tree len = ((((((arglist)->common.chain))->common.chain))->list.value1);
      tree fn;
      if (((enum tree_code) (len)->common.code) != INTEGER_CST)
 return 0;
      if (integer_zerop (len))
 {
   expand_expr (((((arglist)->common.chain))->list.value1), (const_int_rtx[64]),
         VOIDmode, EXPAND_NORMAL);
   return expand_expr (((arglist)->list.value1), target, mode,
         EXPAND_NORMAL);
 }
      if (slen == 0 || ((enum tree_code) (slen)->common.code) != INTEGER_CST)
 return 0;
      slen = size_binop (PLUS_EXPR, slen, size_int_wide ((long) (1), SSIZETYPE));
      if (tree_int_cst_lt (slen, len))
 {
   tree dest = ((arglist)->list.value1);
   unsigned int dest_align
     = get_pointer_alignment (dest, 128);
   const char *p = c_getstr (((((arglist)->common.chain))->list.value1));
   rtx dest_mem;
   if (!p || dest_align == 0 || !host_integerp (len, 1)
       || !can_store_by_pieces (tree_low_cst (len, 1),
           builtin_strncpy_read_str,
           (void *) p, dest_align))
     return 0;
   dest_mem = get_memory_rtx (dest);
   store_by_pieces (dest_mem, tree_low_cst (len, 1),
      builtin_strncpy_read_str,
      (void *) p, dest_align, 0);
   dest_mem = force_operand ((((dest_mem)->u.fld[0]).rtx1), (rtx) 0);
   dest_mem = convert_memory_address (ptr_mode, dest_mem);
   return dest_mem;
 }
      fn = implicit_built_in_decls[BUILT_IN_MEMCPY];
      if (!fn)
 return 0;
      return expand_expr (build_function_call_expr (fn, arglist),
     target, mode, EXPAND_NORMAL);
    }
}
static rtx
builtin_memset_read_str (void *data, long offset ,
    enum machine_mode mode)
{
  const char *c = (const char *) data;
  char *p = C_alloca(((unsigned short) mode_size[mode]));
  memset (p, *c, ((unsigned short) mode_size[mode]));
  return c_readstr (p, mode);
}
static rtx
builtin_memset_gen_str (void *data, long offset ,
   enum machine_mode mode)
{
  rtx target, coeff;
  size_t size;
  char *p;
  size = ((unsigned short) mode_size[mode]);
  if (size == 1)
    return (rtx) data;
  p = C_alloca(size);
  memset (p, 1, size);
  coeff = c_readstr (p, mode);
  target = convert_to_mode (mode, (rtx) data, 1);
  target = expand_mult (mode, target, coeff, (rtx) 0, 1);
  return force_reg (mode, target);
}
static rtx
expand_builtin_memset (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist,
    POINTER_TYPE, INTEGER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree dest = ((arglist)->list.value1);
      tree val = ((((arglist)->common.chain))->list.value1);
      tree len = ((((((arglist)->common.chain))->common.chain))->list.value1);
      char c;
      unsigned int dest_align
 = get_pointer_alignment (dest, 128);
      rtx dest_mem, dest_addr, len_rtx;
      if (dest_align == 0)
 return 0;
      if (integer_zerop (len))
 {
   expand_expr (val, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   return expand_expr (dest, target, mode, EXPAND_NORMAL);
 }
      if (((enum tree_code) (val)->common.code) != INTEGER_CST)
 {
   rtx val_rtx;
   if (!host_integerp (len, 1))
     return 0;
   if (optimize_size && tree_low_cst (len, 1) > 1)
     return 0;
   c = 1;
   if (!can_store_by_pieces (tree_low_cst (len, 1),
        builtin_memset_read_str,
        &c, dest_align))
     return 0;
   val = fold (build1_stat (CONVERT_EXPR,integer_types[itk_unsigned_char],val ));
   val_rtx = expand_expr (val, (rtx) 0, VOIDmode, 0);
   val_rtx = force_reg (((integer_types[itk_unsigned_char])->type.mode),
          val_rtx);
   dest_mem = get_memory_rtx (dest);
   store_by_pieces (dest_mem, tree_low_cst (len, 1),
      builtin_memset_gen_str,
      val_rtx, dest_align, 0);
   dest_mem = force_operand ((((dest_mem)->u.fld[0]).rtx1), (rtx) 0);
   dest_mem = convert_memory_address (ptr_mode, dest_mem);
   return dest_mem;
 }
      if (target_char_cast (val, &c))
 return 0;
      if (c)
 {
   if (!host_integerp (len, 1))
     return 0;
   if (!can_store_by_pieces (tree_low_cst (len, 1),
        builtin_memset_read_str, &c,
        dest_align))
     return 0;
   dest_mem = get_memory_rtx (dest);
   store_by_pieces (dest_mem, tree_low_cst (len, 1),
      builtin_memset_read_str,
      &c, dest_align, 0);
   dest_mem = force_operand ((((dest_mem)->u.fld[0]).rtx1), (rtx) 0);
   dest_mem = convert_memory_address (ptr_mode, dest_mem);
   return dest_mem;
 }
      len_rtx = expand_expr (len, (rtx) 0, VOIDmode, 0);
      dest_mem = get_memory_rtx (dest);
      set_mem_align (dest_mem, dest_align);
      dest_addr = clear_storage (dest_mem, len_rtx);
      if (dest_addr == 0)
 {
   dest_addr = force_operand ((((dest_mem)->u.fld[0]).rtx1), (rtx) 0);
   dest_addr = convert_memory_address (ptr_mode, dest_addr);
 }
      return dest_addr;
    }
}
static rtx
expand_builtin_bzero (tree arglist)
{
  tree dest, size, newarglist;
  if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return (rtx) 0;
  dest = ((arglist)->list.value1);
  size = ((((arglist)->common.chain))->list.value1);
  newarglist = build_tree_list_stat((tree) ((void *)0),fold_convert (sizetype_tab[(int) SIZETYPE], size) );
  newarglist = tree_cons_stat ((tree) ((void *)0),global_trees[TI_INTEGER_ZERO],newarglist );
  newarglist = tree_cons_stat ((tree) ((void *)0),dest,newarglist );
  return expand_builtin_memset (newarglist, (const_int_rtx[64]), VOIDmode);
}
static rtx
expand_builtin_memcmp (tree exp , tree arglist, rtx target,
         enum machine_mode mode)
{
  tree arg1, arg2, len;
  const char *p1, *p2;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  arg1 = ((arglist)->list.value1);
  arg2 = ((((arglist)->common.chain))->list.value1);
  len = ((((((arglist)->common.chain))->common.chain))->list.value1);
  if (integer_zerop (len))
    {
      expand_expr (arg1, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
      expand_expr (arg2, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
      return (const_int_rtx[64]);
    }
  if (operand_equal_p (arg1, arg2, 0))
    {
      expand_expr (len, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
      return (const_int_rtx[64]);
    }
  p1 = c_getstr (arg1);
  p2 = c_getstr (arg2);
  if (host_integerp (len, 1) && p1 && p2
      && compare_tree_int (len, strlen (p1) + 1) <= 0
      && compare_tree_int (len, strlen (p2) + 1) <= 0)
    {
      const int r = memcmp (p1, p2, tree_low_cst (len, 1));
      return (r < 0 ? (const_int_rtx[64 -1]) : (r > 0 ? (const_int_rtx[64 +1]) : (const_int_rtx[64])));
    }
  if (integer_onep (len))
    {
      tree cst_uchar_node = build_qualified_type ((integer_types[itk_unsigned_char]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0));
      tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
      tree ind1 =
      fold (build1_stat (CONVERT_EXPR,integer_types[itk_int],build1_stat (INDIRECT_REF,cst_uchar_node,fold_convert (cst_uchar_ptr_node, arg1) ) )
                                                );
      tree ind2 =
      fold (build1_stat (CONVERT_EXPR,integer_types[itk_int],build1_stat (INDIRECT_REF,cst_uchar_node,fold_convert (cst_uchar_ptr_node, arg2) ) )
                                                );
      tree result = fold (build2_stat (MINUS_EXPR,integer_types[itk_int],ind1,ind2 ));
      return expand_expr (result, target, mode, EXPAND_NORMAL);
    }
  {
    rtx arg1_rtx, arg2_rtx, arg3_rtx;
    rtx result;
    rtx insn;
    int arg1_align
      = get_pointer_alignment (arg1, 128) / 8;
    int arg2_align
      = get_pointer_alignment (arg2, 128) / 8;
    enum machine_mode insn_mode;
    if ((! optimize_size || (target_flags & 0x00000400)))
      insn_mode = insn_data[(int) CODE_FOR_cmpstrsi].operand[0].mode;
    else
      return 0;
    if (arg1_align == 0 || arg2_align == 0)
      return 0;
    result = target;
    if (! (result != 0
    && (((enum rtx_code) (result)->code) == REG) && ((enum machine_mode) (result)->mode) == insn_mode
    && (((result)->u.fld[0]).rtuint) >= 53))
      result = gen_reg_rtx (insn_mode);
    arg1_rtx = get_memory_rtx (arg1);
    arg2_rtx = get_memory_rtx (arg2);
    arg3_rtx = expand_expr (len, (rtx) 0, VOIDmode, 0);
    if ((! optimize_size || (target_flags & 0x00000400)))
      insn = gen_cmpstrsi (result, arg1_rtx, arg2_rtx, arg3_rtx,
      gen_rtx_CONST_INT (VOIDmode, (long) (((arg1_align) < (arg2_align) ? (arg1_align) : (arg2_align)))));
    else
      fancy_abort ("gcc.c", 380351, "?");
    if (insn)
      emit_insn (insn);
    else
      emit_library_call_value ((libfunc_table[LTI_memcmp]), result, LCT_PURE_MAKE_BLOCK,
          ((integer_types[itk_int])->type.mode), 3,
          (((arg1_rtx)->u.fld[0]).rtx1), (0 ? DImode : SImode),
          (((arg2_rtx)->u.fld[0]).rtx1), (0 ? DImode : SImode),
          convert_to_mode (((sizetype_tab[(int) SIZETYPE])->type.mode), arg3_rtx,
      ((sizetype_tab[(int) SIZETYPE])->common.unsigned_flag)),
          ((sizetype_tab[(int) SIZETYPE])->type.mode));
    mode = ((((exp)->common.type))->type.mode);
    if (((enum machine_mode) (result)->mode) == mode)
      return result;
    else if (target != 0)
      {
 convert_move (target, result, 0);
 return target;
      }
    else
      return convert_to_mode (mode, result, 0);
  }
  return 0;
}
static rtx
expand_builtin_strcmp (tree exp, rtx target, enum machine_mode mode)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg1, arg2;
  const char *p1, *p2;
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  arg1 = ((arglist)->list.value1);
  arg2 = ((((arglist)->common.chain))->list.value1);
  if (operand_equal_p (arg1, arg2, 0))
    return (const_int_rtx[64]);
  p1 = c_getstr (arg1);
  p2 = c_getstr (arg2);
  if (p1 && p2)
    {
      const int i = strcmp (p1, p2);
      return (i < 0 ? (const_int_rtx[64 -1]) : (i > 0 ? (const_int_rtx[64 +1]) : (const_int_rtx[64])));
    }
  if ((p1 && *p1 == '\0') || (p2 && *p2 == '\0'))
    {
      tree cst_uchar_node = build_qualified_type ((integer_types[itk_unsigned_char]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0));
      tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
      tree ind1 =
 fold (build1_stat (CONVERT_EXPR,integer_types[itk_int],build1_stat (INDIRECT_REF,cst_uchar_node,fold_convert (cst_uchar_ptr_node, arg1) ) )
                                                  );
      tree ind2 =
 fold (build1_stat (CONVERT_EXPR,integer_types[itk_int],build1_stat (INDIRECT_REF,cst_uchar_node,fold_convert (cst_uchar_ptr_node, arg2) ) )
                                                  );
      tree result = fold (build2_stat (MINUS_EXPR,integer_types[itk_int],ind1,ind2 ));
      return expand_expr (result, target, mode, EXPAND_NORMAL);
    }
  if ((! optimize_size || (target_flags & 0x00000400)))
  {
    tree len, len1, len2;
    rtx arg1_rtx, arg2_rtx, arg3_rtx;
    rtx result, insn;
    tree fndecl;
    int arg1_align
      = get_pointer_alignment (arg1, 128) / 8;
    int arg2_align
      = get_pointer_alignment (arg2, 128) / 8;
    enum machine_mode insn_mode
      = insn_data[(int) CODE_FOR_cmpstrsi].operand[0].mode;
    len1 = c_strlen (arg1, 1);
    len2 = c_strlen (arg2, 1);
    if (len1)
      len1 = size_binop (PLUS_EXPR, size_int_wide ((long) (1), SSIZETYPE), len1);
    if (len2)
      len2 = size_binop (PLUS_EXPR, size_int_wide ((long) (1), SSIZETYPE), len2);
    if (!len1)
      len = len2;
    else if (!len2)
      len = len1;
    else if (((len1)->common.side_effects_flag))
      len = len2;
    else if (((len2)->common.side_effects_flag))
      len = len1;
    else if (((enum tree_code) (len1)->common.code) != INTEGER_CST)
      len = len2;
    else if (((enum tree_code) (len2)->common.code) != INTEGER_CST)
      len = len1;
    else if (tree_int_cst_lt (len1, len2))
      len = len1;
    else
      len = len2;
    if (!len || ((len)->common.side_effects_flag))
      return 0;
    if (arg1_align == 0 || arg2_align == 0)
      return 0;
    result = target;
    if (! (result != 0
    && (((enum rtx_code) (result)->code) == REG) && ((enum machine_mode) (result)->mode) == insn_mode
    && (((result)->u.fld[0]).rtuint) >= 53))
      result = gen_reg_rtx (insn_mode);
    arg1 = builtin_save_expr (arg1);
    arg2 = builtin_save_expr (arg2);
    arg1_rtx = get_memory_rtx (arg1);
    arg2_rtx = get_memory_rtx (arg2);
    arg3_rtx = expand_expr (len, (rtx) 0, VOIDmode, 0);
    insn = gen_cmpstrsi (result, arg1_rtx, arg2_rtx, arg3_rtx,
    gen_rtx_CONST_INT (VOIDmode, (long) (((arg1_align) < (arg2_align) ? (arg1_align) : (arg2_align)))));
    if (insn)
      {
 emit_insn (insn);
 mode = ((((exp)->common.type))->type.mode);
 if (((enum machine_mode) (result)->mode) == mode)
   return result;
 if (target == 0)
   return convert_to_mode (mode, result, 0);
 convert_move (target, result, 0);
 return target;
      }
    arglist = build_tree_list_stat((tree) ((void *)0),arg2 );
    arglist = tree_cons_stat ((tree) ((void *)0),arg1,arglist );
    fndecl = get_callee_fndecl (exp);
    exp = build_function_call_expr (fndecl, arglist);
    return expand_call (exp, target, target == (const_int_rtx[64]));
  }
  return 0;
}
static rtx
expand_builtin_strncmp (tree exp, rtx target, enum machine_mode mode)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg1, arg2, arg3;
  const char *p1, *p2;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  arg1 = ((arglist)->list.value1);
  arg2 = ((((arglist)->common.chain))->list.value1);
  arg3 = ((((((arglist)->common.chain))->common.chain))->list.value1);
  if (integer_zerop (arg3))
    {
      expand_expr (arg1, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
      expand_expr (arg2, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
      return (const_int_rtx[64]);
    }
  if (operand_equal_p (arg1, arg2, 0))
    {
      expand_expr (arg3, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
      return (const_int_rtx[64]);
    }
  p1 = c_getstr (arg1);
  p2 = c_getstr (arg2);
  if (host_integerp (arg3, 1) && p1 && p2)
    {
      const int r = strncmp (p1, p2, tree_low_cst (arg3, 1));
      return (r < 0 ? (const_int_rtx[64 -1]) : (r > 0 ? (const_int_rtx[64 +1]) : (const_int_rtx[64])));
    }
  if (host_integerp (arg3, 1)
      && (tree_low_cst (arg3, 1) == 1
   || (tree_low_cst (arg3, 1) > 1
       && ((p1 && *p1 == '\0') || (p2 && *p2 == '\0')))))
    {
      tree cst_uchar_node = build_qualified_type ((integer_types[itk_unsigned_char]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0));
      tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
      tree ind1 =
 fold (build1_stat (CONVERT_EXPR,integer_types[itk_int],build1_stat (INDIRECT_REF,cst_uchar_node,fold_convert (cst_uchar_ptr_node, arg1) ) )
                                                  );
      tree ind2 =
 fold (build1_stat (CONVERT_EXPR,integer_types[itk_int],build1_stat (INDIRECT_REF,cst_uchar_node,fold_convert (cst_uchar_ptr_node, arg2) ) )
                                                  );
      tree result = fold (build2_stat (MINUS_EXPR,integer_types[itk_int],ind1,ind2 ));
      return expand_expr (result, target, mode, EXPAND_NORMAL);
    }
  if ((! optimize_size || (target_flags & 0x00000400)))
  {
    tree len, len1, len2;
    rtx arg1_rtx, arg2_rtx, arg3_rtx;
    rtx result, insn;
    tree fndecl;
    int arg1_align
      = get_pointer_alignment (arg1, 128) / 8;
    int arg2_align
      = get_pointer_alignment (arg2, 128) / 8;
    enum machine_mode insn_mode
      = insn_data[(int) CODE_FOR_cmpstrsi].operand[0].mode;
    len1 = c_strlen (arg1, 1);
    len2 = c_strlen (arg2, 1);
    if (len1)
      len1 = size_binop (PLUS_EXPR, size_int_wide ((long) (1), SSIZETYPE), len1);
    if (len2)
      len2 = size_binop (PLUS_EXPR, size_int_wide ((long) (1), SSIZETYPE), len2);
    if (!len1)
      len = len2;
    else if (!len2)
      len = len1;
    else if (((len1)->common.side_effects_flag))
      len = len2;
    else if (((len2)->common.side_effects_flag))
      len = len1;
    else if (((enum tree_code) (len1)->common.code) != INTEGER_CST)
      len = len2;
    else if (((enum tree_code) (len2)->common.code) != INTEGER_CST)
      len = len1;
    else if (tree_int_cst_lt (len1, len2))
      len = len1;
    else
      len = len2;
    if (!len || ((len)->common.side_effects_flag))
      return 0;
    len = fold (build2_stat (MIN_EXPR,((len)->common.type),len,arg3 ));
    if (arg1_align == 0 || arg2_align == 0)
      return 0;
    result = target;
    if (! (result != 0
    && (((enum rtx_code) (result)->code) == REG) && ((enum machine_mode) (result)->mode) == insn_mode
    && (((result)->u.fld[0]).rtuint) >= 53))
      result = gen_reg_rtx (insn_mode);
    arg1 = builtin_save_expr (arg1);
    arg2 = builtin_save_expr (arg2);
    len = builtin_save_expr (len);
    arg1_rtx = get_memory_rtx (arg1);
    arg2_rtx = get_memory_rtx (arg2);
    arg3_rtx = expand_expr (len, (rtx) 0, VOIDmode, 0);
    insn = gen_cmpstrsi (result, arg1_rtx, arg2_rtx, arg3_rtx,
    gen_rtx_CONST_INT (VOIDmode, (long) (((arg1_align) < (arg2_align) ? (arg1_align) : (arg2_align)))));
    if (insn)
      {
 emit_insn (insn);
 mode = ((((exp)->common.type))->type.mode);
 if (((enum machine_mode) (result)->mode) == mode)
   return result;
 if (target == 0)
   return convert_to_mode (mode, result, 0);
 convert_move (target, result, 0);
 return target;
      }
    arglist = build_tree_list_stat((tree) ((void *)0),len );
    arglist = tree_cons_stat ((tree) ((void *)0),arg2,arglist );
    arglist = tree_cons_stat ((tree) ((void *)0),arg1,arglist );
    fndecl = get_callee_fndecl (exp);
    exp = build_function_call_expr (fndecl, arglist);
    return expand_call (exp, target, target == (const_int_rtx[64]));
  }
  return 0;
}
static rtx
expand_builtin_strcat (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree dst = ((arglist)->list.value1),
 src = ((((arglist)->common.chain))->list.value1);
      const char *p = c_getstr (src);
      if (p)
 {
   if (*p == '\0')
     return expand_expr (dst, target, mode, EXPAND_NORMAL);
   else if (!optimize_size)
     {
       tree newdst, arglist,
  strlen_fn = implicit_built_in_decls[BUILT_IN_STRLEN];
       arglist = build_tree_list_stat((tree) ((void *)0),fold (size_binop (PLUS_EXPR, c_strlen (src, 0), size_int_wide ((long) (1), SSIZETYPE))) )
                          ;
       arglist = tree_cons_stat ((tree) ((void *)0),src,arglist );
       dst = builtin_save_expr (dst);
       newdst =
  fold (build_function_call_expr (strlen_fn,
      build_tree_list_stat((tree) ((void *)0),dst )
             ));
       newdst = fold (build2_stat (PLUS_EXPR,((dst)->common.type),dst,newdst ));
       arglist = tree_cons_stat ((tree) ((void *)0),newdst,arglist );
       if (expand_builtin_mempcpy (arglist, 0, mode, 0))
  return expand_expr (dst, target, mode, EXPAND_NORMAL);
       else
  return 0;
     }
 }
      return 0;
    }
}
static rtx
expand_builtin_strncat (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree dst = ((arglist)->list.value1),
 src = ((((arglist)->common.chain))->list.value1),
 len = ((((((arglist)->common.chain))->common.chain))->list.value1);
      const char *p = c_getstr (src);
      if (integer_zerop (len) || (p && *p == '\0'))
 {
   expand_expr (src, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   expand_expr (len, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   return expand_expr (dst, target, mode, EXPAND_NORMAL);
 }
      if (((enum tree_code) (len)->common.code) == INTEGER_CST && p
   && compare_tree_int (len, strlen (p)) >= 0)
 {
   tree newarglist
     = tree_cons_stat ((tree) ((void *)0),dst,build_tree_list_stat((tree) ((void *)0),src ) );
   tree fn = implicit_built_in_decls[BUILT_IN_STRCAT];
   if (!fn)
     return 0;
   return expand_expr (build_function_call_expr (fn, newarglist),
         target, mode, EXPAND_NORMAL);
 }
      return 0;
    }
}
static rtx
expand_builtin_strspn (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      const char *p1 = c_getstr (s1), *p2 = c_getstr (s2);
      if (p1 && p2)
 {
   const size_t r = strspn (p1, p2);
   return expand_expr (size_int_wide ((long) (r), SIZETYPE), target, mode, EXPAND_NORMAL);
 }
      if ((p1 && *p1 == '\0') || (p2 && *p2 == '\0'))
 {
   expand_expr (s1, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   expand_expr (s2, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   return (const_int_rtx[64]);
 }
      return 0;
    }
}
static rtx
expand_builtin_strcspn (tree arglist, rtx target, enum machine_mode mode)
{
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      const char *p1 = c_getstr (s1), *p2 = c_getstr (s2);
      if (p1 && p2)
 {
   const size_t r = strcspn (p1, p2);
   return expand_expr (size_int_wide ((long) (r), SIZETYPE), target, mode, EXPAND_NORMAL);
 }
      if (p1 && *p1 == '\0')
 {
   expand_expr (s2, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   return (const_int_rtx[64]);
 }
      if (p2 && *p2 == '\0')
 {
   tree newarglist = build_tree_list_stat((tree) ((void *)0),s1 ),
     fn = implicit_built_in_decls[BUILT_IN_STRLEN];
   if (!fn)
     return 0;
   return expand_expr (build_function_call_expr (fn, newarglist),
         target, mode, EXPAND_NORMAL);
 }
      return 0;
    }
}
rtx
expand_builtin_saveregs (void)
{
  rtx val, seq;
  if ((cfun->expr->x_saveregs_value) != 0)
    return (cfun->expr->x_saveregs_value);
  start_sequence ();
  val = targetm.calls.expand_builtin_saveregs ();
  seq = get_insns ();
  end_sequence ();
  (cfun->expr->x_saveregs_value) = val;
  push_topmost_sequence ();
  emit_insn_after (seq, entry_of_function ());
  pop_topmost_sequence ();
  return val;
}
static rtx
expand_builtin_args_info (tree arglist)
{
  int nwords = sizeof (CUMULATIVE_ARGS) / sizeof (int);
  int *word_ptr = (int *) &(cfun->args_info);
  if (sizeof (CUMULATIVE_ARGS) % sizeof (int) != 0)
    fancy_abort ("gcc.c", 380944, "?");
  if (arglist != 0)
    {
      if (!host_integerp (((arglist)->list.value1), 0))
 error ("argument of `__builtin_args_info' must be constant");
      else
 {
   long wordnum = tree_low_cst (((arglist)->list.value1), 0);
   if (wordnum < 0 || wordnum >= nwords)
     error ("argument of `__builtin_args_info' out of range");
   else
     return gen_rtx_CONST_INT (VOIDmode, (long) (word_ptr[wordnum]));
 }
    }
  else
    error ("missing argument in `__builtin_args_info'");
  return (const_int_rtx[64]);
}
static rtx
expand_builtin_next_arg (tree arglist)
{
  tree fntype = ((current_function_decl)->common.type);
  if (((fntype)->type.value1s) == 0
      || (((tree_last (((fntype)->type.value1s)))->list.value1)
   == global_trees[TI_VOID_TYPE]))
    {
      error ("`va_start' used in function with fixed args");
      return (const_int_rtx[64]);
    }
  if (arglist)
    {
      tree last_parm = tree_last (((current_function_decl)->decl.arguments));
      tree arg = ((arglist)->list.value1);
      while (((enum tree_code) (arg)->common.code) == NOP_EXPR
      || ((enum tree_code) (arg)->common.code) == CONVERT_EXPR
      || ((enum tree_code) (arg)->common.code) == NON_LVALUE_EXPR
      || ((enum tree_code) (arg)->common.code) == INDIRECT_REF)
 arg = ((arg)->exp.operands[0]);
      if (arg != last_parm)
 warning ("second parameter of `va_start' not last named argument");
    }
  else
    warning ("`__builtin_next_arg' called without an argument");
  return expand_binop ((0 ? DImode : SImode), (optab_table[OTI_add]),
         (cfun->internal_arg_pointer),
         (cfun->arg_offset_rtx),
         (rtx) 0, 0, OPTAB_LIB_WIDEN);
}
static tree
stabilize_va_list (tree valist, int needs_lvalue)
{
  if (((enum tree_code) (global_trees[TI_VA_LIST_TYPE])->common.code) == ARRAY_TYPE)
    {
      if (((valist)->common.side_effects_flag))
 valist = save_expr (valist);
      if (((enum tree_code) (((valist)->common.type))->common.code) == ARRAY_TYPE)
 {
   tree p1 = build_pointer_type (((global_trees[TI_VA_LIST_TYPE])->common.type));
   valist = build_fold_addr_expr_with_type (valist, p1);
 }
    }
  else
    {
      tree pt;
      if (! needs_lvalue)
 {
   if (! ((valist)->common.side_effects_flag))
     return valist;
   pt = build_pointer_type (global_trees[TI_VA_LIST_TYPE]);
   valist = fold (build1_stat (ADDR_EXPR,pt,valist ));
   ((valist)->common.side_effects_flag) = 1;
 }
      if (((valist)->common.side_effects_flag))
 valist = save_expr (valist);
      valist = build_fold_indirect_ref (valist);
    }
  return valist;
}
tree
std_build_builtin_va_list (void)
{
  return global_trees[TI_PTR_TYPE];
}
void
std_expand_builtin_va_start (tree valist, rtx nextarg)
{
  tree t;
  t = build2_stat (MODIFY_EXPR,((valist)->common.type),valist,make_tree (global_trees[TI_PTR_TYPE], nextarg) )
                                          ;
  ((t)->common.side_effects_flag) = 1;
  expand_expr (t, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
}
static rtx
expand_builtin_va_start (tree arglist)
{
  rtx nextarg;
  tree chain, valist;
  chain = ((arglist)->common.chain);
  if (((chain)->common.chain))
    error ("too many arguments to function `va_start'");
  nextarg = expand_builtin_next_arg (chain);
  valist = stabilize_va_list (((arglist)->list.value1), 1);
  ix86_va_start (valist, nextarg);
  return (const_int_rtx[64]);
}
rtx
std_expand_builtin_va_arg (tree valist, tree type)
{
  tree addr_tree, t, type_size = ((void *)0);
  tree align, alignm1;
  tree rounded_size;
  rtx addr;
  long boundary;
  align = size_int_wide ((long) ((8 * (0 ? 8 : 4)) / 8), SIZETYPE);
  alignm1 = size_int_wide ((long) ((8 * (0 ? 8 : 4)) / 8 - 1), SIZETYPE);
  boundary = ix86_function_arg_boundary ((((type)->type.mode)), (type));
  if (boundary > (8 * (0 ? 8 : 4)))
    {
      if (!0)
 {
   t = build2_stat (MODIFY_EXPR,((valist)->common.type),valist,build2_stat (PLUS_EXPR,((valist)->common.type),valist,build_int_2_wide ((unsigned long) (boundary / 8 - 1), (long) (0)) ) )
                                                        ;
   ((t)->common.side_effects_flag) = 1;
   expand_expr (t, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
 }
      t = build2_stat (MODIFY_EXPR,((valist)->common.type),valist,build2_stat (BIT_AND_EXPR,((valist)->common.type),valist,build_int_2_wide ((unsigned long) (~(boundary / 8 - 1)), (long) (-1)) ) )
                                                        ;
      ((t)->common.side_effects_flag) = 1;
      expand_expr (t, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
    }
  if (type == global_trees[TI_ERROR_MARK]
      || (type_size = ((((type)->type.main_variant))->type.size_unit)) == ((void *)0)
      || ((type_size)->common.public_flag))
    rounded_size = global_trees[TI_SIZE_ZERO];
  else
    {
      rounded_size = fold (build2_stat (PLUS_EXPR,sizetype_tab[(int) SIZETYPE],type_size,alignm1 ));
      rounded_size = fold (build2_stat (TRUNC_DIV_EXPR,sizetype_tab[(int) SIZETYPE],rounded_size,align )
                           );
      rounded_size = fold (build2_stat (MULT_EXPR,sizetype_tab[(int) SIZETYPE],rounded_size,align )
                           );
    }
  addr_tree = valist;
  if (0 && ! integer_zerop (rounded_size))
    {
      addr_tree = fold (build2_stat (PLUS_EXPR,((addr_tree)->common.type),addr_tree,fold (build3_stat (COND_EXPR,sizetype_tab[(int) SIZETYPE],fold (build2_stat (GT_EXPR,sizetype_tab[(int) SIZETYPE],rounded_size,align )),global_trees[TI_SIZE_ZERO],fold (build2_stat (MINUS_EXPR,sizetype_tab[(int) SIZETYPE],rounded_size,type_size )) )) )
                         );
    }
  addr = expand_expr (addr_tree, (rtx) 0, (0 ? DImode : SImode), EXPAND_NORMAL);
  addr = copy_to_reg (addr);
  if (! integer_zerop (rounded_size))
    {
      t = build2_stat (MODIFY_EXPR,((valist)->common.type),valist,build2_stat (PLUS_EXPR,((valist)->common.type),valist,rounded_size ) )
                   ;
      ((t)->common.side_effects_flag) = 1;
      expand_expr (t, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
    }
  return addr;
}
rtx
expand_builtin_va_arg (tree valist, tree type)
{
  rtx addr, result;
  tree promoted_type, want_va_type, have_va_type;
  want_va_type = global_trees[TI_VA_LIST_TYPE];
  have_va_type = ((valist)->common.type);
  if (((enum tree_code) (want_va_type)->common.code) == ARRAY_TYPE)
    {
      if (((enum tree_code) (have_va_type)->common.code) == ARRAY_TYPE
   || ((enum tree_code) (have_va_type)->common.code) == POINTER_TYPE)
 {
   want_va_type = ((want_va_type)->common.type);
   have_va_type = ((have_va_type)->common.type);
 }
    }
  if (((want_va_type)->type.main_variant) != ((have_va_type)->type.main_variant))
    {
      error ("first argument to `va_arg' not of type `va_list'");
      addr = (const_int_rtx[64]);
    }
  else if ((promoted_type = lang_hooks.types.type_promotes_to (type))
    != type)
    {
      const char *name = "<anonymous type>", *pname = 0;
      static unsigned char gave_help;
      if (((type)->type.name))
 {
   if (((enum tree_code) (((type)->type.name))->common.code) == IDENTIFIER_NODE)
     name = ((const char *) (((type)->type.name))->identifier.id.str);
   else if (((enum tree_code) (((type)->type.name))->common.code) == TYPE_DECL
     && ((((type)->type.name))->decl.name))
     name = ((const char *) (((((type)->type.name))->decl.name))->identifier.id.str);
 }
      if (((promoted_type)->type.name))
 {
   if (((enum tree_code) (((promoted_type)->type.name))->common.code) == IDENTIFIER_NODE)
     pname = ((const char *) (((promoted_type)->type.name))->identifier.id.str);
   else if (((enum tree_code) (((promoted_type)->type.name))->common.code) == TYPE_DECL
     && ((((promoted_type)->type.name))->decl.name))
     pname = ((const char *) (((((promoted_type)->type.name))->decl.name))->identifier.id.str);
 }
      warning ("`%s' is promoted to `%s' when passed through `...'",
        name, pname);
      if (! gave_help)
 {
   gave_help = 1;
   warning ("(so you should pass `%s' not `%s' to `va_arg')",
     pname, name);
 }
      inform ("if this code is reached, the program will abort");
      expand_builtin_trap ();
      addr = (const_int_rtx[64]);
    }
  else
    {
      valist = stabilize_va_list (valist, 0);
      addr = (fancy_abort ("gcc.c", 381267, "?"), (rtx) 0);
    }
  addr = convert_memory_address ((0 ? DImode : SImode), addr);
  result = gen_rtx_MEM (((type)->type.mode), addr);
  set_mem_alias_set (result, get_varargs_alias_set ());
  return result;
}
tree
std_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
{
  tree addr, t, type_size = ((void *)0);
  tree align, alignm1;
  tree rounded_size;
  long boundary;
  align = size_int_wide ((long) ((8 * (0 ? 8 : 4)) / 8), SIZETYPE);
  alignm1 = size_int_wide ((long) ((8 * (0 ? 8 : 4)) / 8 - 1), SIZETYPE);
  boundary = ix86_function_arg_boundary ((((type)->type.mode)), (type));
  if (boundary > (8 * (0 ? 8 : 4)))
    {
      if (!0)
 {
   t = build2_stat (MODIFY_EXPR,((valist)->common.type),valist,build2_stat (PLUS_EXPR,((valist)->common.type),valist,build_int_2_wide ((unsigned long) (boundary / 8 - 1), (long) (0)) ) )
                                                        ;
   gimplify_stmt (&t);
   append_to_statement_list (t, pre_p);
 }
      t = build2_stat (MODIFY_EXPR,((valist)->common.type),valist,build2_stat (BIT_AND_EXPR,((valist)->common.type),valist,build_int_2_wide ((unsigned long) (~(boundary / 8 - 1)), (long) (-1)) ) )
                                                        ;
      gimplify_stmt (&t);
      append_to_statement_list (t, pre_p);
    }
  if (type == global_trees[TI_ERROR_MARK]
      || (type_size = ((((type)->type.main_variant))->type.size_unit)) == ((void *)0)
      || ((type_size)->common.public_flag))
    rounded_size = global_trees[TI_SIZE_ZERO];
  else
    {
      rounded_size = fold (build2_stat (PLUS_EXPR,sizetype_tab[(int) SIZETYPE],type_size,alignm1 ));
      rounded_size = fold (build2_stat (TRUNC_DIV_EXPR,sizetype_tab[(int) SIZETYPE],rounded_size,align )
                           );
      rounded_size = fold (build2_stat (MULT_EXPR,sizetype_tab[(int) SIZETYPE],rounded_size,align )
                           );
    }
  gimplify_expr (&rounded_size, pre_p, post_p, is_gimple_val, fb_rvalue);
  addr = valist;
  if (0 && ! integer_zerop (rounded_size))
    {
      addr = fold (build2_stat (PLUS_EXPR,((addr)->common.type),addr,fold (build3_stat (COND_EXPR,sizetype_tab[(int) SIZETYPE],fold (build2_stat (GT_EXPR,sizetype_tab[(int) SIZETYPE],rounded_size,align )),global_trees[TI_SIZE_ZERO],fold (build2_stat (MINUS_EXPR,sizetype_tab[(int) SIZETYPE],rounded_size,type_size )) )) )
                         );
    }
  if (! integer_zerop (rounded_size))
    {
      t = build2_stat (MODIFY_EXPR,((valist)->common.type),valist,build2_stat (PLUS_EXPR,((valist)->common.type),valist,rounded_size ) )
                   ;
      gimplify_stmt (&t);
      append_to_statement_list (t, post_p);
    }
  addr = fold_convert (build_pointer_type (type), addr);
  return build_fold_indirect_ref (addr);
}
static tree
dummy_object (tree type)
{
  tree t = convert (build_pointer_type (type), global_trees[TI_NULL_POINTER]);
  return build1_stat (INDIRECT_REF,type,t );
}
enum gimplify_status
gimplify_va_arg_expr (tree *expr_p, tree *pre_p, tree *post_p)
{
  tree promoted_type, want_va_type, have_va_type;
  tree valist = ((*expr_p)->exp.operands[0]);
  tree type = ((*expr_p)->common.type);
  tree t;
  want_va_type = global_trees[TI_VA_LIST_TYPE];
  have_va_type = ((valist)->common.type);
  if (have_va_type == global_trees[TI_ERROR_MARK])
    return GS_ERROR;
  if (((enum tree_code) (want_va_type)->common.code) == ARRAY_TYPE)
    {
      if (((enum tree_code) (have_va_type)->common.code) == ARRAY_TYPE
   || ((enum tree_code) (have_va_type)->common.code) == POINTER_TYPE)
 {
   want_va_type = ((want_va_type)->common.type);
   have_va_type = ((have_va_type)->common.type);
 }
    }
  if (((want_va_type)->type.main_variant) != ((have_va_type)->type.main_variant))
    {
      error ("first argument to `va_arg' not of type `va_list'");
      return GS_ERROR;
    }
  else if ((promoted_type = lang_hooks.types.type_promotes_to (type))
    != type)
    {
      static unsigned char gave_help;
      warning ("`%T' is promoted to `%T' when passed through `...'",
        type, promoted_type);
      if (! gave_help)
 {
   gave_help = 1;
   warning ("(so you should pass `%T' not `%T' to `va_arg')",
     promoted_type, type);
 }
      inform ("if this code is reached, the program will abort");
      t = build_function_call_expr (implicit_built_in_decls[BUILT_IN_TRAP],
        ((void *)0));
      append_to_statement_list (t, pre_p);
      *expr_p = dummy_object (type);
      return GS_ALL_DONE;
    }
  else
    {
      if (((enum tree_code) (global_trees[TI_VA_LIST_TYPE])->common.code) == ARRAY_TYPE)
 {
   if (((enum tree_code) (((valist)->common.type))->common.code) == ARRAY_TYPE)
     {
       tree p1 = build_pointer_type (((global_trees[TI_VA_LIST_TYPE])->common.type));
       valist = build_fold_addr_expr_with_type (valist, p1);
     }
   gimplify_expr (&valist, pre_p, post_p, is_gimple_val, fb_rvalue);
 }
      else
 gimplify_expr (&valist, pre_p, post_p, is_gimple_min_lval, fb_lvalue);
      if (!targetm.calls.gimplify_va_arg_expr)
 return GS_ALL_DONE;
      *expr_p = targetm.calls.gimplify_va_arg_expr (valist, type, pre_p, post_p);
      return GS_OK;
    }
}
static rtx
expand_builtin_va_end (tree arglist)
{
  tree valist = ((arglist)->list.value1);
  if (((valist)->common.side_effects_flag))
    expand_expr (valist, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
  return (const_int_rtx[64]);
}
static rtx
expand_builtin_va_copy (tree arglist)
{
  tree dst, src, t;
  dst = ((arglist)->list.value1);
  src = ((((arglist)->common.chain))->list.value1);
  dst = stabilize_va_list (dst, 1);
  src = stabilize_va_list (src, 0);
  if (((enum tree_code) (global_trees[TI_VA_LIST_TYPE])->common.code) != ARRAY_TYPE)
    {
      t = build2_stat (MODIFY_EXPR,global_trees[TI_VA_LIST_TYPE],dst,src );
      ((t)->common.side_effects_flag) = 1;
      expand_expr (t, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
    }
  else
    {
      rtx dstb, srcb, size;
      dstb = expand_expr (dst, (rtx) 0, (0 ? DImode : SImode), EXPAND_NORMAL);
      srcb = expand_expr (src, (rtx) 0, (0 ? DImode : SImode), EXPAND_NORMAL);
      size = expand_expr (((global_trees[TI_VA_LIST_TYPE])->type.size_unit), (rtx) 0,
     VOIDmode, EXPAND_NORMAL);
      dstb = convert_memory_address ((0 ? DImode : SImode), dstb);
      srcb = convert_memory_address ((0 ? DImode : SImode), srcb);
      dstb = gen_rtx_MEM (BLKmode, dstb);
      set_mem_alias_set (dstb, get_alias_set (((((dst)->common.type))->common.type)));
      set_mem_align (dstb, ((global_trees[TI_VA_LIST_TYPE])->type.align));
      srcb = gen_rtx_MEM (BLKmode, srcb);
      set_mem_alias_set (srcb, get_alias_set (((((src)->common.type))->common.type)));
      set_mem_align (srcb, ((global_trees[TI_VA_LIST_TYPE])->type.align));
      emit_block_move (dstb, srcb, size, BLOCK_OP_NORMAL);
    }
  return (const_int_rtx[64]);
}
static rtx
expand_builtin_frame_address (tree fndecl, tree arglist)
{
  if (arglist == 0)
    return (const_int_rtx[64]);
  else if (! host_integerp (((arglist)->list.value1), 1))
    {
      if (((fndecl)->decl.u1.f) == BUILT_IN_FRAME_ADDRESS)
 error ("invalid arg to `__builtin_frame_address'");
      else
 error ("invalid arg to `__builtin_return_address'");
      return (const_int_rtx[64]);
    }
  else
    {
      rtx tem
 = expand_builtin_return_addr (((fndecl)->decl.u1.f),
          tree_low_cst (((arglist)->list.value1), 1),
          (global_rtl[GR_HARD_FRAME_POINTER]));
      if (tem == ((void *)0))
 {
   if (((fndecl)->decl.u1.f) == BUILT_IN_FRAME_ADDRESS)
     warning ("unsupported arg to `__builtin_frame_address'");
   else
     warning ("unsupported arg to `__builtin_return_address'");
   return (const_int_rtx[64]);
 }
      if (((fndecl)->decl.u1.f) == BUILT_IN_FRAME_ADDRESS)
 return tem;
      if (!(((enum rtx_code) (tem)->code) == REG)
   && ! ((rtx_class[(int) (((enum rtx_code) (tem)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (tem)->code) == CONST_VECTOR))
 tem = copy_to_mode_reg ((0 ? DImode : SImode), tem);
      return tem;
    }
}
static rtx
expand_builtin_alloca (tree arglist, rtx target)
{
  rtx op0;
  rtx result;
  if (flag_mudflap)
    return 0;
  if (!validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE))
    return 0;
  op0 = expand_expr (((arglist)->list.value1), (rtx) 0, VOIDmode, 0);
  result = allocate_dynamic_stack_space (op0, target, 8);
  result = convert_memory_address (ptr_mode, result);
  return result;
}
static rtx
expand_builtin_unop (enum machine_mode target_mode, tree arglist, rtx target,
       rtx subtarget, optab op_optab)
{
  rtx op0;
  if (!validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE))
    return 0;
  op0 = expand_expr (((arglist)->list.value1), subtarget, VOIDmode, 0);
  target = expand_unop (((((((arglist)->list.value1))->common.type))->type.mode),
   op_optab, op0, target, 1);
  if (target == 0)
    fancy_abort ("gcc.c", 381630, "?");
  return convert_to_mode (target_mode, target, 0);
}
static rtx
expand_builtin_fputs (tree arglist, rtx target, unsigned char unlocked)
{
  tree len, fn;
  tree fn_fputc = unlocked ? implicit_built_in_decls[BUILT_IN_FPUTC_UNLOCKED]
    : implicit_built_in_decls[BUILT_IN_FPUTC];
  tree fn_fwrite = unlocked ? implicit_built_in_decls[BUILT_IN_FWRITE_UNLOCKED]
    : implicit_built_in_decls[BUILT_IN_FWRITE];
  if (target != (const_int_rtx[64]) || !fn_fputc || !fn_fwrite)
    return 0;
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  if (!(len = c_strlen (((arglist)->list.value1), 1))
      || ((enum tree_code) (len)->common.code) != INTEGER_CST)
    return 0;
  switch (compare_tree_int (len, 1))
    {
    case -1:
      {
 expand_expr (((((arglist)->common.chain))->list.value1), (const_int_rtx[64]),
       VOIDmode, EXPAND_NORMAL);
 return (const_int_rtx[64]);
      }
    case 0:
      {
 const char *p = c_getstr (((arglist)->list.value1));
 if (p != ((void *)0))
   {
     arglist =
       build_tree_list_stat((tree) ((void *)0),((((arglist)->common.chain))->list.value1) );
     arglist =
       tree_cons_stat ((tree) ((void *)0),build_int_2_wide ((unsigned long) (p[0]), (long) (0)),arglist );
     fn = fn_fputc;
     break;
   }
      }
    case 1:
      {
 tree string_arg;
 if (optimize_size)
   return 0;
 string_arg = ((arglist)->list.value1);
 arglist = build_tree_list_stat((tree) ((void *)0),((((arglist)->common.chain))->list.value1) );
 arglist = tree_cons_stat ((tree) ((void *)0),len,arglist );
 arglist = tree_cons_stat ((tree) ((void *)0),global_trees[TI_SIZE_ONE],arglist );
 arglist = tree_cons_stat ((tree) ((void *)0),string_arg,arglist );
 fn = fn_fwrite;
 break;
      }
    default:
      fancy_abort ("gcc.c", 381707, "?");
    }
  return expand_expr (build_function_call_expr (fn, arglist),
        (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
}
static rtx
expand_builtin_expect (tree arglist, rtx target)
{
  tree exp, c;
  rtx note, rtx_c;
  if (arglist == (tree) ((void *)0)
      || ((arglist)->common.chain) == (tree) ((void *)0))
    return (const_int_rtx[64]);
  exp = ((arglist)->list.value1);
  c = ((((arglist)->common.chain))->list.value1);
  if (((enum tree_code) (c)->common.code) != INTEGER_CST)
    {
      error ("second arg to `__builtin_expect' must be a constant");
      c = global_trees[TI_INTEGER_ZERO];
    }
  target = expand_expr (exp, target, VOIDmode, EXPAND_NORMAL);
  if (flag_guess_branch_prob && ((enum rtx_code) (target)->code) != CONST_INT)
    {
      target = force_reg (((enum machine_mode) (target)->mode), target);
      rtx_c = expand_expr (c, (rtx) 0, ((enum machine_mode) (target)->mode), EXPAND_NORMAL);
      note = emit_note (NOTE_INSN_EXPECTED_VALUE);
      (((note)->u.fld[4]).rtx1) = gen_rtx_fmt_ee (EQ, (VOIDmode), (target), (rtx_c));
    }
  return target;
}
rtx
expand_builtin_expect_jump (tree exp, rtx if_false_label, rtx if_true_label)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg0 = ((arglist)->list.value1);
  tree arg1 = ((((arglist)->common.chain))->list.value1);
  rtx ret = (rtx) 0;
  if (((enum tree_code) (((arg1)->common.type))->common.code) == INTEGER_TYPE
      && (integer_zerop (arg1) || integer_onep (arg1)))
    {
      rtx insn, drop_through_label, temp;
      start_sequence ();
      do_jump (arg0, if_false_label, if_true_label);
      ret = get_insns ();
      drop_through_label = get_last_insn ();
      if (drop_through_label && ((enum rtx_code) (drop_through_label)->code) == NOTE)
 drop_through_label = prev_nonnote_insn (drop_through_label);
      if (drop_through_label && ((enum rtx_code) (drop_through_label)->code) != CODE_LABEL)
 drop_through_label = (rtx) 0;
      end_sequence ();
      if (! if_true_label)
 if_true_label = drop_through_label;
      if (! if_false_label)
 if_false_label = drop_through_label;
      insn = ret;
      while (insn != (rtx) 0)
 {
   rtx next = (((insn)->u.fld[2]).rtx1);
   if (((enum rtx_code) (insn)->code) == JUMP_INSN && any_condjump_p (insn))
     {
       rtx ifelse = (((pc_set (insn))->u.fld[1]).rtx1);
       rtx then_dest = (((ifelse)->u.fld[1]).rtx1);
       rtx else_dest = (((ifelse)->u.fld[2]).rtx1);
       int taken = -1;
       if (((enum rtx_code) (then_dest)->code) == LABEL_REF
    && (((then_dest)->u.fld[0]).rtx1) == if_true_label)
  taken = 1;
       else if (((enum rtx_code) (then_dest)->code) == LABEL_REF
         && (((then_dest)->u.fld[0]).rtx1) == if_false_label)
  taken = 0;
       else if (((enum rtx_code) (else_dest)->code) == LABEL_REF
         && (((else_dest)->u.fld[0]).rtx1) == if_false_label)
  taken = 1;
       else if (((enum rtx_code) (else_dest)->code) == LABEL_REF
         && (((else_dest)->u.fld[0]).rtx1) == if_true_label)
  taken = 0;
       else if (else_dest == (global_rtl[GR_PC]))
  {
    if (next && ((enum rtx_code) (next)->code) == NOTE)
      next = next_nonnote_insn (next);
    if (next && ((enum rtx_code) (next)->code) == JUMP_INSN
        && any_uncondjump_p (next))
      temp = ((((((pc_set (next))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
    else
      temp = next;
    if (temp == if_false_label)
      taken = 1;
    else if (temp == if_true_label)
      taken = 0;
  }
       else if (then_dest == (global_rtl[GR_PC]))
  {
    if (next && ((enum rtx_code) (next)->code) == NOTE)
      next = next_nonnote_insn (next);
    if (next && ((enum rtx_code) (next)->code) == JUMP_INSN
        && any_uncondjump_p (next))
      temp = ((((((pc_set (next))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
    else
      temp = next;
    if (temp == if_false_label)
      taken = 0;
    else if (temp == if_true_label)
      taken = 1;
  }
       if (taken != -1)
  {
    if (integer_zerop (arg1))
      taken = 1 - taken;
           predict_insn_def (insn, PRED_BUILTIN_EXPECT, taken);
  }
     }
   insn = next;
 }
    }
  return ret;
}
void
expand_builtin_trap (void)
{
  if (1)
    emit_insn (gen_trap ());
  else
    emit_library_call ((libfunc_table[LTI_abort]), LCT_NORETURN, VOIDmode, 0);
  emit_barrier ();
}
static rtx
expand_builtin_fabs (tree arglist, rtx target, rtx subtarget)
{
  enum machine_mode mode;
  tree arg;
  rtx op0;
  if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  mode = ((((arg)->common.type))->type.mode);
  op0 = expand_expr (arg, subtarget, VOIDmode, 0);
  return expand_abs (mode, op0, target, 0, safe_from_p (target, arg, 1));
}
static rtx
expand_builtin_cabs (tree arglist, rtx target)
{
  enum machine_mode mode;
  tree arg;
  rtx op0;
  if (arglist == 0 || ((arglist)->common.chain))
    return 0;
  arg = ((arglist)->list.value1);
  if (((enum tree_code) (((arg)->common.type))->common.code) != COMPLEX_TYPE
      || ((enum tree_code) (((((arg)->common.type))->common.type))->common.code) != REAL_TYPE)
    return 0;
  mode = ((((arg)->common.type))->type.mode);
  op0 = expand_expr (arg, (rtx) 0, VOIDmode, 0);
  return expand_complex_abs (mode, op0, target, 0);
}
static tree
build_string_literal (int len, const char *str)
{
  tree t, elem, index, type;
  t = build_string (len, str);
  elem = build_qualified_type ((integer_types[itk_char]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0));
  index = build_index_type (build_int_2_wide ((unsigned long) (len - 1), (long) (0)));
  type = build_array_type (elem, index);
  ((t)->common.type) = type;
  ((t)->common.constant_flag) = 1;
  ((t)->common.invariant_flag) = 1;
  ((t)->common.readonly_flag) = 1;
  ((t)->common.static_flag) = 1;
  type = build_pointer_type (type);
  t = build1_stat (ADDR_EXPR,type,t );
  type = build_pointer_type (elem);
  t = build1_stat (NOP_EXPR,type,t );
  return t;
}
static rtx
expand_builtin_printf (tree arglist, rtx target, enum machine_mode mode,
         unsigned char unlocked)
{
  tree fn_putchar = unlocked
      ? implicit_built_in_decls[BUILT_IN_PUTCHAR_UNLOCKED]
      : implicit_built_in_decls[BUILT_IN_PUTCHAR];
  tree fn_puts = unlocked ? implicit_built_in_decls[BUILT_IN_PUTS_UNLOCKED]
     : implicit_built_in_decls[BUILT_IN_PUTS];
  const char *fmt_str;
  tree fn, fmt, arg;
  if (target != (const_int_rtx[64]))
    return 0;
  if (! arglist)
    return 0;
  fmt = ((arglist)->list.value1);
  if (((enum tree_code) (((fmt)->common.type))->common.code) != POINTER_TYPE)
    return 0;
  arglist = ((arglist)->common.chain);
  fmt_str = c_getstr (fmt);
  if (fmt_str == ((void *)0))
    return 0;
  if (strcmp (fmt_str, "%s\n") == 0)
    {
      if (! arglist
          || ((enum tree_code) (((((arglist)->list.value1))->common.type))->common.code) != POINTER_TYPE
   || ((arglist)->common.chain))
 return 0;
      fn = fn_puts;
    }
  else if (strcmp (fmt_str, "%c") == 0)
    {
      if (! arglist
   || ((enum tree_code) (((((arglist)->list.value1))->common.type))->common.code) != INTEGER_TYPE
   || ((arglist)->common.chain))
 return 0;
      fn = fn_putchar;
    }
  else
    {
      if (strchr (fmt_str, '%'))
        return 0;
      if (arglist)
 return 0;
      if (fmt_str[0] == '\0')
 return (const_int_rtx[64]);
      if (fmt_str[1] == '\0')
 {
   arg = build_int_2_wide ((unsigned long) (fmt_str[0]), (long) (0));
   arglist = build_tree_list_stat((tree) ((void *)0),arg );
   fn = fn_putchar;
 }
      else
 {
   size_t len = strlen (fmt_str);
   if (fmt_str[len - 1] == '\n')
     {
       char *newstr = C_alloca(len);
       memcpy (newstr, fmt_str, len - 1);
       newstr[len - 1] = 0;
       arg = build_string_literal (len, newstr);
       arglist = build_tree_list_stat((tree) ((void *)0),arg );
       fn = fn_puts;
     }
   else
     return 0;
 }
    }
  if (!fn)
    return 0;
  return expand_expr (build_function_call_expr (fn, arglist),
        target, mode, EXPAND_NORMAL);
}
static rtx
expand_builtin_fprintf (tree arglist, rtx target, enum machine_mode mode,
          unsigned char unlocked)
{
  tree fn_fputc = unlocked ? implicit_built_in_decls[BUILT_IN_FPUTC_UNLOCKED]
      : implicit_built_in_decls[BUILT_IN_FPUTC];
  tree fn_fputs = unlocked ? implicit_built_in_decls[BUILT_IN_FPUTS_UNLOCKED]
      : implicit_built_in_decls[BUILT_IN_FPUTS];
  const char *fmt_str;
  tree fn, fmt, fp, arg;
  if (target != (const_int_rtx[64]))
    return 0;
  if (! arglist)
    return 0;
  fp = ((arglist)->list.value1);
  if (((enum tree_code) (((fp)->common.type))->common.code) != POINTER_TYPE)
    return 0;
  arglist = ((arglist)->common.chain);
  if (! arglist)
    return 0;
  fmt = ((arglist)->list.value1);
  if (((enum tree_code) (((fmt)->common.type))->common.code) != POINTER_TYPE)
    return 0;
  arglist = ((arglist)->common.chain);
  fmt_str = c_getstr (fmt);
  if (fmt_str == ((void *)0))
    return 0;
  if (strcmp (fmt_str, "%s") == 0)
    {
      if (! arglist
          || ((enum tree_code) (((((arglist)->list.value1))->common.type))->common.code) != POINTER_TYPE
   || ((arglist)->common.chain))
 return 0;
      arg = ((arglist)->list.value1);
      arglist = build_tree_list_stat((tree) ((void *)0),fp );
      arglist = tree_cons_stat ((tree) ((void *)0),arg,arglist );
      fn = fn_fputs;
    }
  else if (strcmp (fmt_str, "%c") == 0)
    {
      if (! arglist
   || ((enum tree_code) (((((arglist)->list.value1))->common.type))->common.code) != INTEGER_TYPE
   || ((arglist)->common.chain))
 return 0;
      arg = ((arglist)->list.value1);
      arglist = build_tree_list_stat((tree) ((void *)0),fp );
      arglist = tree_cons_stat ((tree) ((void *)0),arg,arglist );
      fn = fn_fputc;
    }
  else
    {
      if (strchr (fmt_str, '%'))
        return 0;
      if (arglist)
 return 0;
      if (fmt_str[0] == '\0')
 {
   expand_expr (fp, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
   return (const_int_rtx[64]);
 }
      arglist = build_tree_list_stat((tree) ((void *)0),fp );
      arglist = tree_cons_stat ((tree) ((void *)0),fmt,arglist );
      fn = fn_fputs;
    }
  if (!fn)
    return 0;
  return expand_expr (build_function_call_expr (fn, arglist),
        target, mode, EXPAND_NORMAL);
}
static rtx
expand_builtin_sprintf (tree arglist, rtx target, enum machine_mode mode)
{
  tree orig_arglist, dest, fmt;
  const char *fmt_str;
  orig_arglist = arglist;
  if (! arglist)
    return 0;
  dest = ((arglist)->list.value1);
  if (((enum tree_code) (((dest)->common.type))->common.code) != POINTER_TYPE)
    return 0;
  arglist = ((arglist)->common.chain);
  if (! arglist)
    return 0;
  fmt = ((arglist)->list.value1);
  if (((enum tree_code) (((fmt)->common.type))->common.code) != POINTER_TYPE)
    return 0;
  arglist = ((arglist)->common.chain);
  fmt_str = c_getstr (fmt);
  if (fmt_str == ((void *)0))
    return 0;
  if (strchr (fmt_str, '%') == 0)
    {
      tree fn = implicit_built_in_decls[BUILT_IN_STRCPY];
      tree exp;
      if (arglist || ! fn)
 return 0;
      expand_expr (build_function_call_expr (fn, orig_arglist),
     (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
      if (target == (const_int_rtx[64]))
 return (const_int_rtx[64]);
      exp = build_int_2_wide ((unsigned long) (strlen (fmt_str)), (long) (0));
      exp = fold_convert (integer_types[itk_int], exp);
      return expand_expr (exp, target, mode, EXPAND_NORMAL);
    }
  else if (strcmp (fmt_str, "%s") == 0)
    {
      tree fn, arg, len;
      fn = implicit_built_in_decls[BUILT_IN_STRCPY];
      if (! fn)
 return 0;
      if (! arglist || ((arglist)->common.chain))
 return 0;
      arg = ((arglist)->list.value1);
      if (((enum tree_code) (((arg)->common.type))->common.code) != POINTER_TYPE)
 return 0;
      if (target != (const_int_rtx[64]))
 {
   len = c_strlen (arg, 1);
   if (! len || ((enum tree_code) (len)->common.code) != INTEGER_CST)
     return 0;
 }
      else
 len = (tree) ((void *)0);
      arglist = build_tree_list_stat((tree) ((void *)0),arg );
      arglist = tree_cons_stat ((tree) ((void *)0),dest,arglist );
      expand_expr (build_function_call_expr (fn, arglist),
     (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
      if (target == (const_int_rtx[64]))
 return (const_int_rtx[64]);
      return expand_expr (len, target, mode, EXPAND_NORMAL);
    }
  return 0;
}
static rtx
expand_builtin_profile_func (unsigned char exitp)
{
  rtx this, which;
  this = ((current_function_decl)->decl.rtl ? (current_function_decl)->decl.rtl : (make_decl_rtl (current_function_decl, ((void *)0)), (current_function_decl)->decl.rtl));
  if ((((enum rtx_code) (this)->code) == MEM))
    this = (((this)->u.fld[0]).rtx1);
  else
    fancy_abort ("gcc.c", 382249, "?");
  if (exitp)
    which = (libfunc_table[LTI_profile_function_exit]);
  else
    which = (libfunc_table[LTI_profile_function_entry]);
  emit_library_call (which, LCT_NORMAL, VOIDmode, 2, this, (0 ? DImode : SImode),
       expand_builtin_return_addr (BUILT_IN_RETURN_ADDRESS,
       0, (global_rtl[GR_HARD_FRAME_POINTER])),
       (0 ? DImode : SImode));
  return (const_int_rtx[64]);
}
static rtx
round_trampoline_addr (rtx tramp)
{
  rtx temp, addend, mask;
  if (8 <= (8 * (0 ? 8 : 4)))
    return tramp;
  temp = gen_reg_rtx ((0 ? DImode : SImode));
  addend = gen_rtx_CONST_INT (VOIDmode, (long) (8 / 8 - 1));
  mask = gen_rtx_CONST_INT (VOIDmode, (long) (-8 / 8));
  temp = expand_simple_binop ((0 ? DImode : SImode), PLUS, tramp, addend,
          temp, 0, OPTAB_LIB_WIDEN);
  tramp = expand_simple_binop ((0 ? DImode : SImode), AND, temp, mask,
          temp, 0, OPTAB_LIB_WIDEN);
  return tramp;
}
static rtx
expand_builtin_init_trampoline (tree arglist)
{
  tree t_tramp, t_func, t_chain;
  rtx r_tramp, r_func, r_chain;
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE,
    POINTER_TYPE, VOID_TYPE))
    return (rtx) 0;
  t_tramp = ((arglist)->list.value1);
  arglist = ((arglist)->common.chain);
  t_func = ((arglist)->list.value1);
  arglist = ((arglist)->common.chain);
  t_chain = ((arglist)->list.value1);
  r_tramp = expand_expr (t_tramp, (rtx) 0, VOIDmode, 0);
  r_func = expand_expr (t_func, (rtx) 0, VOIDmode, 0);
  r_chain = expand_expr (t_chain, (rtx) 0, VOIDmode, 0);
  r_tramp = round_trampoline_addr (r_tramp);
  trampolines_created = 1;
  x86_initialize_trampoline ((r_tramp), (r_func), (r_chain));
  return (const_int_rtx[64]);
}
static rtx
expand_builtin_adjust_trampoline (tree arglist)
{
  rtx tramp;
  if (!validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
    return (rtx) 0;
  tramp = expand_expr (((arglist)->list.value1), (rtx) 0, VOIDmode, 0);
  tramp = round_trampoline_addr (tramp);
  return tramp;
}
static rtx
expand_builtin_signbit (tree exp, rtx target)
{
  const struct real_format *fmt;
  enum machine_mode fmode, imode, rmode;
  long hi, lo;
  tree arg, arglist;
  int bitpos;
  rtx temp;
  arglist = ((exp)->exp.operands[1]);
  if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  fmode = ((((arg)->common.type))->type.mode);
  rmode = ((((exp)->common.type))->type.mode);
  fmt = (real_format_for_mode[(fmode) - MIN_MODE_FLOAT]);
  if (fmt->signbit < 0)
  {
    if (fmt->has_signed_zero && (((mode_class[fmode] == MODE_FLOAT || mode_class[fmode] == MODE_COMPLEX_FLOAT || mode_class[fmode] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations))
      return 0;
    arg = fold (build2_stat (LT_EXPR,((exp)->common.type),arg,build_real (((arg)->common.type), dconst0) )
                                         );
    return expand_expr (arg, target, VOIDmode, EXPAND_NORMAL);
  }
  imode = int_mode_for_mode (fmode);
  if (imode == BLKmode)
    return 0;
  bitpos = fmt->signbit;
  if (0 != 0)
    {
      int nwords = ((unsigned short) (((unsigned short) mode_size[fmode]) * 8)) / (8 * (0 ? 8 : 4));
      int word = nwords - (bitpos / (8 * (0 ? 8 : 4))) - 1;
      bitpos = word * (8 * (0 ? 8 : 4)) + bitpos % (8 * (0 ? 8 : 4));
    }
  if (bitpos >= ((unsigned short) (((unsigned short) mode_size[rmode]) * 8))
      && ((unsigned short) (((unsigned short) mode_size[imode]) * 8)) != 2 * ((unsigned short) (((unsigned short) mode_size[rmode]) * 8)))
    return 0;
  temp = expand_expr (arg, (rtx) 0, VOIDmode, 0);
  temp = rtl_hooks.gen_lowpart (imode, temp);
  if (((unsigned short) (((unsigned short) mode_size[imode]) * 8)) > ((unsigned short) (((unsigned short) mode_size[rmode]) * 8)))
    {
      if (0)
 bitpos = ((unsigned short) (((unsigned short) mode_size[imode]) * 8)) - 1 - bitpos;
      temp = copy_to_mode_reg (imode, temp);
      temp = extract_bit_field (temp, 1, bitpos, 1,
    (rtx) 0, rmode, rmode,
    ((unsigned short) mode_size[imode]));
    }
  else
    {
      if (((unsigned short) (((unsigned short) mode_size[imode]) * 8)) < ((unsigned short) (((unsigned short) mode_size[rmode]) * 8)))
 temp = rtl_hooks.gen_lowpart (rmode, temp);
      if (bitpos < (8 * 4))
 {
   hi = 0;
   lo = (long) 1 << bitpos;
 }
      else
 {
   hi = (long) 1 << (bitpos - (8 * 4));
   lo = 0;
 }
      temp = force_reg (rmode, temp);
      temp = expand_binop (rmode, (optab_table[OTI_and]), temp,
      immed_double_const (lo, hi, rmode),
      target, 1, OPTAB_LIB_WIDEN);
    }
  return temp;
}
static rtx
expand_builtin_fork_or_exec (tree fn, tree arglist, rtx target, int ignore)
{
  tree id, decl;
  tree call;
  if (!profile_arc_flag)
    return (rtx) 0;
  switch (((fn)->decl.u1.f))
    {
    case BUILT_IN_FORK:
      id = get_identifier ("__gcov_fork");
      break;
    case BUILT_IN_EXECL:
      id = get_identifier ("__gcov_execl");
      break;
    case BUILT_IN_EXECV:
      id = get_identifier ("__gcov_execv");
      break;
    case BUILT_IN_EXECLP:
      id = get_identifier ("__gcov_execlp");
      break;
    case BUILT_IN_EXECLE:
      id = get_identifier ("__gcov_execle");
      break;
    case BUILT_IN_EXECVP:
      id = get_identifier ("__gcov_execvp");
      break;
    case BUILT_IN_EXECVE:
      id = get_identifier ("__gcov_execve");
      break;
    default:
      fancy_abort ("gcc.c", 382485, "?");
    }
  decl = build_decl_stat (FUNCTION_DECL,id,((fn)->common.type) );
  ((decl)->decl.external_flag) = 1;
  ((decl)->common.public_flag) = 1;
  ((decl)->decl.artificial_flag) = 1;
  ((decl)->common.nothrow_flag) = 1;
  call = build_function_call_expr (decl, arglist);
  return expand_call (call, target, ignore);
}
rtx
expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode,
  int ignore)
{
  tree fndecl = get_callee_fndecl (exp);
  tree arglist = ((exp)->exp.operands[1]);
  enum built_in_function fcode = ((fndecl)->decl.u1.f);
  enum machine_mode target_mode = ((((exp)->common.type))->type.mode);
  emit_queue ();
  if (((fndecl)->decl.built_in_class) == BUILT_IN_MD)
    return targetm.expand_builtin (exp, target, subtarget, mode, ignore);
  if (!optimize
      && !(!strncmp (((const char *) (((fndecl)->decl.name))->identifier.id.str), "__builtin_", 10))
      && ((fndecl)->decl.assembler_name != (tree) ((void *)0))
      && fcode != BUILT_IN_ALLOCA)
    return expand_call (exp, target, ignore);
  if (ignore)
    target = (const_int_rtx[64]);
  if (target == (const_int_rtx[64])
      && (((fndecl)->decl.pure_flag) || ((fndecl)->common.readonly_flag)))
    {
      unsigned char volatilep = 0;
      tree arg;
      for (arg = arglist; arg; arg = ((arg)->common.chain))
 if (((((arg)->list.value1))->common.volatile_flag))
   {
     volatilep = 1;
     break;
   }
      if (! volatilep)
 {
   for (arg = arglist; arg; arg = ((arg)->common.chain))
     expand_expr (((arg)->list.value1), (const_int_rtx[64]),
    VOIDmode, EXPAND_NORMAL);
   return (const_int_rtx[64]);
 }
    }
  switch (fcode)
    {
    case BUILT_IN_FABS:
    case BUILT_IN_FABSF:
    case BUILT_IN_FABSL:
      target = expand_builtin_fabs (arglist, target, subtarget);
      if (target)
        return target;
      break;
    case BUILT_IN_CABS:
    case BUILT_IN_CABSF:
    case BUILT_IN_CABSL:
      if (flag_unsafe_math_optimizations)
 {
   target = expand_builtin_cabs (arglist, target);
   if (target)
     return target;
 }
      break;
    case BUILT_IN_EXP:
    case BUILT_IN_EXPF:
    case BUILT_IN_EXPL:
    case BUILT_IN_EXP10:
    case BUILT_IN_EXP10F:
    case BUILT_IN_EXP10L:
    case BUILT_IN_POW10:
    case BUILT_IN_POW10F:
    case BUILT_IN_POW10L:
    case BUILT_IN_EXP2:
    case BUILT_IN_EXP2F:
    case BUILT_IN_EXP2L:
    case BUILT_IN_EXPM1:
    case BUILT_IN_EXPM1F:
    case BUILT_IN_EXPM1L:
    case BUILT_IN_LOGB:
    case BUILT_IN_LOGBF:
    case BUILT_IN_LOGBL:
    case BUILT_IN_ILOGB:
    case BUILT_IN_ILOGBF:
    case BUILT_IN_ILOGBL:
    case BUILT_IN_LOG:
    case BUILT_IN_LOGF:
    case BUILT_IN_LOGL:
    case BUILT_IN_LOG10:
    case BUILT_IN_LOG10F:
    case BUILT_IN_LOG10L:
    case BUILT_IN_LOG2:
    case BUILT_IN_LOG2F:
    case BUILT_IN_LOG2L:
    case BUILT_IN_LOG1P:
    case BUILT_IN_LOG1PF:
    case BUILT_IN_LOG1PL:
    case BUILT_IN_TAN:
    case BUILT_IN_TANF:
    case BUILT_IN_TANL:
    case BUILT_IN_ASIN:
    case BUILT_IN_ASINF:
    case BUILT_IN_ASINL:
    case BUILT_IN_ACOS:
    case BUILT_IN_ACOSF:
    case BUILT_IN_ACOSL:
    case BUILT_IN_ATAN:
    case BUILT_IN_ATANF:
    case BUILT_IN_ATANL:
      if (! flag_unsafe_math_optimizations)
 break;
    case BUILT_IN_SQRT:
    case BUILT_IN_SQRTF:
    case BUILT_IN_SQRTL:
    case BUILT_IN_FLOOR:
    case BUILT_IN_FLOORF:
    case BUILT_IN_FLOORL:
    case BUILT_IN_CEIL:
    case BUILT_IN_CEILF:
    case BUILT_IN_CEILL:
    case BUILT_IN_TRUNC:
    case BUILT_IN_TRUNCF:
    case BUILT_IN_TRUNCL:
    case BUILT_IN_ROUND:
    case BUILT_IN_ROUNDF:
    case BUILT_IN_ROUNDL:
    case BUILT_IN_NEARBYINT:
    case BUILT_IN_NEARBYINTF:
    case BUILT_IN_NEARBYINTL:
      target = expand_builtin_mathfn (exp, target, subtarget);
      if (target)
 return target;
      break;
    case BUILT_IN_POW:
    case BUILT_IN_POWF:
    case BUILT_IN_POWL:
      target = expand_builtin_pow (exp, target, subtarget);
      if (target)
 return target;
      break;
    case BUILT_IN_ATAN2:
    case BUILT_IN_ATAN2F:
    case BUILT_IN_ATAN2L:
    case BUILT_IN_FMOD:
    case BUILT_IN_FMODF:
    case BUILT_IN_FMODL:
    case BUILT_IN_DREM:
    case BUILT_IN_DREMF:
    case BUILT_IN_DREML:
      if (! flag_unsafe_math_optimizations)
 break;
      target = expand_builtin_mathfn_2 (exp, target, subtarget);
      if (target)
 return target;
      break;
    case BUILT_IN_SIN:
    case BUILT_IN_SINF:
    case BUILT_IN_SINL:
    case BUILT_IN_COS:
    case BUILT_IN_COSF:
    case BUILT_IN_COSL:
      if (! flag_unsafe_math_optimizations)
 break;
      target = expand_builtin_mathfn_3 (exp, target, subtarget);
      if (target)
 return target;
      break;
    case BUILT_IN_APPLY_ARGS:
      return expand_builtin_apply_args ();
    case BUILT_IN_APPLY:
      if (!validate_arglist (arglist, POINTER_TYPE,
        POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)
   && !validate_arglist (arglist, REFERENCE_TYPE,
    POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
 return (const_int_rtx[64]);
      else
 {
   int i;
   tree t;
   rtx ops[3];
   for (t = arglist, i = 0; t; t = ((t)->common.chain), i++)
     ops[i] = expand_expr (((t)->list.value1), (rtx) 0, VOIDmode, 0);
   return expand_builtin_apply (ops[0], ops[1], ops[2]);
 }
    case BUILT_IN_RETURN:
      if (validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
 expand_builtin_return (expand_expr (((arglist)->list.value1),
         (rtx) 0, VOIDmode, 0));
      return (const_int_rtx[64]);
    case BUILT_IN_SAVEREGS:
      return expand_builtin_saveregs ();
    case BUILT_IN_ARGS_INFO:
      return expand_builtin_args_info (arglist);
    case BUILT_IN_NEXT_ARG:
      simplify_builtin_next_arg (arglist);
      return expand_builtin_next_arg (arglist);
    case BUILT_IN_CLASSIFY_TYPE:
      return expand_builtin_classify_type (arglist);
    case BUILT_IN_CONSTANT_P:
      return (const_int_rtx[64]);
    case BUILT_IN_FRAME_ADDRESS:
    case BUILT_IN_RETURN_ADDRESS:
      return expand_builtin_frame_address (fndecl, arglist);
    case BUILT_IN_AGGREGATE_INCOMING_ADDRESS:
      if (arglist != 0
   || ! (((enum tree_code) (((((current_function_decl)->common.type))->common.type))->common.code) == ARRAY_TYPE || ((enum tree_code) (((((current_function_decl)->common.type))->common.type))->common.code) == RECORD_TYPE || ((enum tree_code) (((((current_function_decl)->common.type))->common.type))->common.code) == UNION_TYPE || ((enum tree_code) (((((current_function_decl)->common.type))->common.type))->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (((((current_function_decl)->common.type))->common.type))->common.code) == SET_TYPE)
   || !(((enum rtx_code) (((((current_function_decl)->decl.result))->decl.rtl ? (((current_function_decl)->decl.result))->decl.rtl : (make_decl_rtl (((current_function_decl)->decl.result), ((void *)0)), (((current_function_decl)->decl.result))->decl.rtl)))->code) == MEM))
 return (const_int_rtx[64]);
      else
 return (((((((current_function_decl)->decl.result))->decl.rtl ? (((current_function_decl)->decl.result))->decl.rtl : (make_decl_rtl (((current_function_decl)->decl.result), ((void *)0)), (((current_function_decl)->decl.result))->decl.rtl)))->u.fld[0]).rtx1);
    case BUILT_IN_ALLOCA:
      target = expand_builtin_alloca (arglist, target);
      if (target)
 return target;
      break;
    case BUILT_IN_STACK_ALLOC:
      expand_stack_alloc (((arglist)->list.value1),
     ((((arglist)->common.chain))->list.value1));
      return (const_int_rtx[64]);
    case BUILT_IN_STACK_SAVE:
      return expand_stack_save ();
    case BUILT_IN_STACK_RESTORE:
      expand_stack_restore (((arglist)->list.value1));
      return (const_int_rtx[64]);
    case BUILT_IN_FFS:
    case BUILT_IN_FFSL:
    case BUILT_IN_FFSLL:
      target = expand_builtin_unop (target_mode, arglist, target,
        subtarget, (optab_table[OTI_ffs]));
      if (target)
 return target;
      break;
    case BUILT_IN_CLZ:
    case BUILT_IN_CLZL:
    case BUILT_IN_CLZLL:
      target = expand_builtin_unop (target_mode, arglist, target,
        subtarget, (optab_table[OTI_clz]));
      if (target)
 return target;
      break;
    case BUILT_IN_CTZ:
    case BUILT_IN_CTZL:
    case BUILT_IN_CTZLL:
      target = expand_builtin_unop (target_mode, arglist, target,
        subtarget, (optab_table[OTI_ctz]));
      if (target)
 return target;
      break;
    case BUILT_IN_POPCOUNT:
    case BUILT_IN_POPCOUNTL:
    case BUILT_IN_POPCOUNTLL:
      target = expand_builtin_unop (target_mode, arglist, target,
        subtarget, (optab_table[OTI_popcount]));
      if (target)
 return target;
      break;
    case BUILT_IN_PARITY:
    case BUILT_IN_PARITYL:
    case BUILT_IN_PARITYLL:
      target = expand_builtin_unop (target_mode, arglist, target,
        subtarget, (optab_table[OTI_parity]));
      if (target)
 return target;
      break;
    case BUILT_IN_STRLEN:
      target = expand_builtin_strlen (arglist, target, target_mode);
      if (target)
 return target;
      break;
    case BUILT_IN_STRCPY:
      target = expand_builtin_strcpy (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_STRNCPY:
      target = expand_builtin_strncpy (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_STPCPY:
      target = expand_builtin_stpcpy (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_STRCAT:
      target = expand_builtin_strcat (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_STRNCAT:
      target = expand_builtin_strncat (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_STRSPN:
      target = expand_builtin_strspn (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_STRCSPN:
      target = expand_builtin_strcspn (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_STRSTR:
      target = expand_builtin_strstr (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_STRPBRK:
      target = expand_builtin_strpbrk (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_INDEX:
    case BUILT_IN_STRCHR:
      target = expand_builtin_strchr (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_RINDEX:
    case BUILT_IN_STRRCHR:
      target = expand_builtin_strrchr (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_MEMCPY:
      target = expand_builtin_memcpy (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_MEMPCPY:
      target = expand_builtin_mempcpy (arglist, target, mode, 1);
      if (target)
 return target;
      break;
    case BUILT_IN_MEMMOVE:
      target = expand_builtin_memmove (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_BCOPY:
      target = expand_builtin_bcopy (arglist);
      if (target)
 return target;
      break;
    case BUILT_IN_MEMSET:
      target = expand_builtin_memset (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_BZERO:
      target = expand_builtin_bzero (arglist);
      if (target)
 return target;
      break;
    case BUILT_IN_STRCMP:
      target = expand_builtin_strcmp (exp, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_STRNCMP:
      target = expand_builtin_strncmp (exp, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_BCMP:
    case BUILT_IN_MEMCMP:
      target = expand_builtin_memcmp (exp, arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_SETJMP:
      target = expand_builtin_setjmp (arglist, target);
      if (target)
 return target;
      break;
    case BUILT_IN_LONGJMP:
      if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
 break;
      else
 {
   rtx buf_addr = expand_expr (((arglist)->list.value1), subtarget,
          VOIDmode, 0);
   rtx value1 = expand_expr (((((arglist)->common.chain))->list.value1),
       (rtx) 0, VOIDmode, 0);
   if (value1 != (const_int_rtx[64 +1]))
     {
       error ("__builtin_longjmp second argument must be 1");
       return (const_int_rtx[64]);
     }
   expand_builtin_longjmp (buf_addr, value1);
   return (const_int_rtx[64]);
 }
    case BUILT_IN_NONLOCAL_GOTO:
      target = expand_builtin_nonlocal_goto (arglist);
      if (target)
 return target;
      break;
    case BUILT_IN_UPDATE_SETJMP_BUF:
      if (validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
 {
   rtx buf_addr
     = expand_expr (((arglist)->list.value1), (rtx) 0, VOIDmode, 0);
   expand_builtin_update_setjmp_buf (buf_addr);
   return (const_int_rtx[64]);
 }
      break;
    case BUILT_IN_TRAP:
      expand_builtin_trap ();
      return (const_int_rtx[64]);
    case BUILT_IN_PRINTF:
      target = expand_builtin_printf (arglist, target, mode, 0);
      if (target)
 return target;
      break;
    case BUILT_IN_PRINTF_UNLOCKED:
      target = expand_builtin_printf (arglist, target, mode, 1);
      if (target)
 return target;
      break;
    case BUILT_IN_FPUTS:
      target = expand_builtin_fputs (arglist, target, 0);
      if (target)
 return target;
      break;
    case BUILT_IN_FPUTS_UNLOCKED:
      target = expand_builtin_fputs (arglist, target, 1);
      if (target)
 return target;
      break;
    case BUILT_IN_FPRINTF:
      target = expand_builtin_fprintf (arglist, target, mode, 0);
      if (target)
 return target;
      break;
    case BUILT_IN_FPRINTF_UNLOCKED:
      target = expand_builtin_fprintf (arglist, target, mode, 1);
      if (target)
 return target;
      break;
    case BUILT_IN_SPRINTF:
      target = expand_builtin_sprintf (arglist, target, mode);
      if (target)
 return target;
      break;
    case BUILT_IN_SIGNBIT:
    case BUILT_IN_SIGNBITF:
    case BUILT_IN_SIGNBITL:
      target = expand_builtin_signbit (exp, target);
      if (target)
 return target;
      break;
    case BUILT_IN_UNWIND_INIT:
      expand_builtin_unwind_init ();
      return (const_int_rtx[64]);
    case BUILT_IN_DWARF_CFA:
      return (global_rtl[GR_VIRTUAL_CFA]);
    case BUILT_IN_DWARF_SP_COLUMN:
      return expand_builtin_dwarf_sp_column ();
    case BUILT_IN_INIT_DWARF_REG_SIZES:
      expand_builtin_init_dwarf_reg_sizes (((arglist)->list.value1));
      return (const_int_rtx[64]);
    case BUILT_IN_FROB_RETURN_ADDR:
      return expand_builtin_frob_return_addr (((arglist)->list.value1));
    case BUILT_IN_EXTRACT_RETURN_ADDR:
      return expand_builtin_extract_return_addr (((arglist)->list.value1));
    case BUILT_IN_EH_RETURN:
      expand_builtin_eh_return (((arglist)->list.value1),
    ((((arglist)->common.chain))->list.value1));
      return (const_int_rtx[64]);
    case BUILT_IN_EH_RETURN_DATA_REGNO:
      return expand_builtin_eh_return_data_regno (arglist);
    case BUILT_IN_EXTEND_POINTER:
      return expand_builtin_extend_pointer (((arglist)->list.value1));
    case BUILT_IN_VA_START:
    case BUILT_IN_STDARG_START:
      return expand_builtin_va_start (arglist);
    case BUILT_IN_VA_END:
      return expand_builtin_va_end (arglist);
    case BUILT_IN_VA_COPY:
      return expand_builtin_va_copy (arglist);
    case BUILT_IN_EXPECT:
      return expand_builtin_expect (arglist, target);
    case BUILT_IN_PREFETCH:
      expand_builtin_prefetch (arglist);
      return (const_int_rtx[64]);
    case BUILT_IN_PROFILE_FUNC_ENTER:
      return expand_builtin_profile_func (0);
    case BUILT_IN_PROFILE_FUNC_EXIT:
      return expand_builtin_profile_func (1);
    case BUILT_IN_INIT_TRAMPOLINE:
      return expand_builtin_init_trampoline (arglist);
    case BUILT_IN_ADJUST_TRAMPOLINE:
      return expand_builtin_adjust_trampoline (arglist);
    case BUILT_IN_FORK:
    case BUILT_IN_EXECL:
    case BUILT_IN_EXECV:
    case BUILT_IN_EXECLP:
    case BUILT_IN_EXECLE:
    case BUILT_IN_EXECVP:
    case BUILT_IN_EXECVE:
      target = expand_builtin_fork_or_exec (fndecl, arglist, target, ignore);
      if (target)
 return target;
      break;
    default:
      break;
    }
  return expand_call (exp, target, ignore);
}
enum built_in_function
builtin_mathfn_code (tree t)
{
  tree fndecl, arglist, parmlist;
  tree argtype, parmtype;
  if (((enum tree_code) (t)->common.code) != CALL_EXPR
      || ((enum tree_code) (((t)->exp.operands[0]))->common.code) != ADDR_EXPR)
    return END_BUILTINS;
  fndecl = get_callee_fndecl (t);
  if (fndecl == (tree) ((void *)0)
      || ((enum tree_code) (fndecl)->common.code) != FUNCTION_DECL
      || ! (((fndecl)->decl.built_in_class) != NOT_BUILT_IN)
      || ((fndecl)->decl.built_in_class) == BUILT_IN_MD)
    return END_BUILTINS;
  arglist = ((t)->exp.operands[1]);
  parmlist = ((((fndecl)->common.type))->type.value1s);
  for (; parmlist; parmlist = ((parmlist)->common.chain))
    {
      parmtype = ((parmlist)->list.value1);
      if ((((enum tree_code) (parmtype)->common.code) == VOID_TYPE))
 {
   if (arglist)
     return END_BUILTINS;
   return ((fndecl)->decl.u1.f);
 }
      if (! arglist)
 return END_BUILTINS;
      argtype = ((((arglist)->list.value1))->common.type);
      if ((((enum tree_code) (parmtype)->common.code) == REAL_TYPE))
 {
   if (! (((enum tree_code) (argtype)->common.code) == REAL_TYPE))
     return END_BUILTINS;
 }
      else if ((((enum tree_code) (parmtype)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((parmtype)->common.type))->common.code) == REAL_TYPE))
 {
   if (! (((enum tree_code) (argtype)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((argtype)->common.type))->common.code) == REAL_TYPE))
     return END_BUILTINS;
 }
      else if ((((enum tree_code) (parmtype)->common.code) == POINTER_TYPE || ((enum tree_code) (parmtype)->common.code) == REFERENCE_TYPE))
 {
   if (! (((enum tree_code) (argtype)->common.code) == POINTER_TYPE || ((enum tree_code) (argtype)->common.code) == REFERENCE_TYPE))
     return END_BUILTINS;
 }
      else if ((((enum tree_code) (parmtype)->common.code) == INTEGER_TYPE || ((enum tree_code) (parmtype)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (parmtype)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (parmtype)->common.code) == CHAR_TYPE))
 {
   if (! (((enum tree_code) (argtype)->common.code) == INTEGER_TYPE || ((enum tree_code) (argtype)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (argtype)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (argtype)->common.code) == CHAR_TYPE))
     return END_BUILTINS;
 }
      else
 return END_BUILTINS;
      arglist = ((arglist)->common.chain);
    }
  return ((fndecl)->decl.u1.f);
}
static tree
fold_builtin_constant_p (tree arglist)
{
  if (arglist == 0)
    return 0;
  arglist = ((arglist)->list.value1);
  while ((((enum tree_code) (arglist)->common.code) == NOP_EXPR || ((enum tree_code) (arglist)->common.code) == CONVERT_EXPR || ((enum tree_code) (arglist)->common.code) == NON_LVALUE_EXPR) && ((arglist)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arglist)->common.type))->type.mode) == ((((((arglist)->exp.operands[0]))->common.type))->type.mode))) (arglist) = ((arglist)->exp.operands[0]);
  if (tree_code_type[(int) (((enum tree_code) (arglist)->common.code))] == 'c'
      || (((enum tree_code) (arglist)->common.code) == CONSTRUCTOR
   && ((arglist)->common.constant_flag))
      || (((enum tree_code) (arglist)->common.code) == ADDR_EXPR
   && ((enum tree_code) (((arglist)->exp.operands[0]))->common.code) == STRING_CST))
    return global_trees[TI_INTEGER_ONE];
  if (((arglist)->common.side_effects_flag)
      || (((enum tree_code) (((arglist)->common.type))->common.code) == ARRAY_TYPE || ((enum tree_code) (((arglist)->common.type))->common.code) == RECORD_TYPE || ((enum tree_code) (((arglist)->common.type))->common.code) == UNION_TYPE || ((enum tree_code) (((arglist)->common.type))->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (((arglist)->common.type))->common.code) == SET_TYPE)
      || (((enum tree_code) (((arglist)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((arglist)->common.type))->common.code) == REFERENCE_TYPE)
      || cfun == 0)
    return global_trees[TI_INTEGER_ZERO];
  return 0;
}
static tree
fold_builtin_expect (tree arglist)
{
  tree arg, inner;
  if (arglist == 0)
    return 0;
  arg = ((arglist)->list.value1);
  if (!((arg)->common.invariant_flag))
    return 0;
  inner = arg;
  while ((((enum tree_code) (inner)->common.code) == NOP_EXPR || ((enum tree_code) (inner)->common.code) == CONVERT_EXPR || ((enum tree_code) (inner)->common.code) == NON_LVALUE_EXPR) && ((inner)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((inner)->common.type))->type.mode) == ((((((inner)->exp.operands[0]))->common.type))->type.mode))) (inner) = ((inner)->exp.operands[0]);
  if (((enum tree_code) (inner)->common.code) == ADDR_EXPR)
    {
      do
 {
   inner = ((inner)->exp.operands[0]);
 }
      while (((enum tree_code) (inner)->common.code) == COMPONENT_REF
      || ((enum tree_code) (inner)->common.code) == ARRAY_REF);
      if ((tree_code_type[(int) (((enum tree_code) (inner)->common.code))] == 'd') && ((inner)->decl.weak_flag))
 return 0;
    }
  return arg;
}
static tree
fold_builtin_classify_type (tree arglist)
{
  if (arglist == 0)
    return build_int_2_wide ((unsigned long) (no_type_class), (long) (0));
  return build_int_2_wide ((unsigned long) (type_to_class (((((arglist)->list.value1))->common.type))), (long) (0));
}
static tree
fold_builtin_inf (tree type, int warn)
{
  struct real_value real;
  if (!((mode_class[((type)->type.mode)] == MODE_FLOAT || mode_class[((type)->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((type)->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && warn)
    warning ("target format does not support infinity");
  real_inf (&real);
  return build_real (type, real);
}
static tree
fold_builtin_nan (tree arglist, tree type, int quiet)
{
  struct real_value real;
  const char *str;
  if (!validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
    return 0;
  str = c_getstr (((arglist)->list.value1));
  if (!str)
    return 0;
  if (!real_nan (&real, str, quiet, ((type)->type.mode)))
    return 0;
  return build_real (type, real);
}
static unsigned char
integer_valued_real_p (tree t)
{
  switch (((enum tree_code) (t)->common.code))
    {
    case FLOAT_EXPR:
      return 1;
    case ABS_EXPR:
    case SAVE_EXPR:
    case NON_LVALUE_EXPR:
      return integer_valued_real_p (((t)->exp.operands[0]));
    case COMPOUND_EXPR:
    case MODIFY_EXPR:
    case BIND_EXPR:
      return integer_valued_real_p (((t)->exp.operands[1]));
    case PLUS_EXPR:
    case MINUS_EXPR:
    case MULT_EXPR:
    case MIN_EXPR:
    case MAX_EXPR:
      return integer_valued_real_p (((t)->exp.operands[0]))
      && integer_valued_real_p (((t)->exp.operands[1]));
    case COND_EXPR:
      return integer_valued_real_p (((t)->exp.operands[1]))
      && integer_valued_real_p (((t)->exp.operands[2]));
    case REAL_CST:
      if (! ((t)->common.static_flag))
      {
        struct real_value c, cint;
 c = (*((t)->real_cst.real_cst_ptr));
 real_trunc (&cint, ((((t)->common.type))->type.mode), &c);
 return real_identical (&c, &cint);
      }
    case NOP_EXPR:
      {
 tree type = ((((t)->exp.operands[0]))->common.type);
 if (((enum tree_code) (type)->common.code) == INTEGER_TYPE)
   return 1;
 if (((enum tree_code) (type)->common.code) == REAL_TYPE)
   return integer_valued_real_p (((t)->exp.operands[0]));
 break;
      }
    case CALL_EXPR:
      switch (builtin_mathfn_code (t))
 {
 case BUILT_IN_CEIL:
 case BUILT_IN_CEILF:
 case BUILT_IN_CEILL:
 case BUILT_IN_FLOOR:
 case BUILT_IN_FLOORF:
 case BUILT_IN_FLOORL:
 case BUILT_IN_NEARBYINT:
 case BUILT_IN_NEARBYINTF:
 case BUILT_IN_NEARBYINTL:
 case BUILT_IN_RINT:
 case BUILT_IN_RINTF:
 case BUILT_IN_RINTL:
 case BUILT_IN_ROUND:
 case BUILT_IN_ROUNDF:
 case BUILT_IN_ROUNDL:
 case BUILT_IN_TRUNC:
 case BUILT_IN_TRUNCF:
 case BUILT_IN_TRUNCL:
   return 1;
 default:
   break;
 }
      break;
    default:
      break;
    }
  return 0;
}
static tree
fold_trunc_transparent_mathfn (tree exp)
{
  tree fndecl = get_callee_fndecl (exp);
  tree arglist = ((exp)->exp.operands[1]);
  enum built_in_function fcode = ((fndecl)->decl.u1.f);
  tree arg;
  if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  if (fcode == builtin_mathfn_code (arg))
    return arg;
  if (! flag_errno_math && integer_valued_real_p (arg))
    return arg;
  if (optimize)
    {
      tree arg0 = strip_float_extensions (arg);
      tree ftype = ((exp)->common.type);
      tree newtype = ((arg0)->common.type);
      tree decl;
      if (((newtype)->type.precision) < ((ftype)->type.precision)
   && (decl = mathfn_built_in (newtype, fcode)))
 {
   arglist =
     build_tree_list_stat((tree) ((void *)0),fold_convert (newtype, arg0) );
   return fold_convert (ftype,
          build_function_call_expr (decl, arglist));
 }
    }
  return 0;
}
static tree
fold_fixed_mathfn (tree exp)
{
  tree fndecl = get_callee_fndecl (exp);
  tree arglist = ((exp)->exp.operands[1]);
  enum built_in_function fcode = ((fndecl)->decl.u1.f);
  tree arg;
  if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  if (! flag_errno_math && integer_valued_real_p (arg))
    return fold (build1_stat (FIX_TRUNC_EXPR,((exp)->common.type),arg ));
  if (optimize)
    {
      tree ftype = ((arg)->common.type);
      tree arg0 = strip_float_extensions (arg);
      tree newtype = ((arg0)->common.type);
      tree decl;
      if (((newtype)->type.precision) < ((ftype)->type.precision)
   && (decl = mathfn_built_in (newtype, fcode)))
 {
   arglist =
     build_tree_list_stat((tree) ((void *)0),fold_convert (newtype, arg0) );
   return build_function_call_expr (decl, arglist);
 }
    }
  return 0;
}
static tree
fold_builtin_cabs (tree arglist, tree type)
{
  tree arg;
  if (!arglist || ((arglist)->common.chain))
    return (tree) ((void *)0);
  arg = ((arglist)->list.value1);
  if (((enum tree_code) (((arg)->common.type))->common.code) != COMPLEX_TYPE
      || ((enum tree_code) (((((arg)->common.type))->common.type))->common.code) != REAL_TYPE)
    return (tree) ((void *)0);
  if (flag_unsafe_math_optimizations
      && ((enum tree_code) (arg)->common.code) == COMPLEX_CST
      && ((enum tree_code) (((arg)->complex.real))->common.code) == REAL_CST
      && ((enum tree_code) (((arg)->complex.imag))->common.code) == REAL_CST
      && ! ((((arg)->complex.real))->common.static_flag)
      && ! ((((arg)->complex.imag))->common.static_flag))
    {
      struct real_value r, i;
      r = (*((((arg)->complex.real))->real_cst.real_cst_ptr));
      i = (*((((arg)->complex.imag))->real_cst.real_cst_ptr));
      real_arithmetic (&r, MULT_EXPR, &r, &r);
      real_arithmetic (&i, MULT_EXPR, &i, &i);
      real_arithmetic (&r, PLUS_EXPR, &r, &i);
      if (real_sqrt (&r, ((type)->type.mode), &r)
   || ! flag_trapping_math)
 return build_real (type, r);
    }
  if (((enum tree_code) (arg)->common.code) == COMPLEX_EXPR
      && real_zerop (((arg)->exp.operands[0])))
    return fold (build1_stat (ABS_EXPR,type,((arg)->exp.operands[1]) ));
  if (((enum tree_code) (arg)->common.code) == COMPLEX_EXPR
      && real_zerop (((arg)->exp.operands[1])))
    return fold (build1_stat (ABS_EXPR,type,((arg)->exp.operands[0]) ));
  if (flag_unsafe_math_optimizations)
    {
      tree sqrtfn = mathfn_built_in (type, BUILT_IN_SQRT);
      if (sqrtfn != (tree) ((void *)0))
 {
   tree rpart, ipart, result, arglist;
   arg = builtin_save_expr (arg);
   rpart = fold (build1_stat (REALPART_EXPR,type,arg ));
   ipart = fold (build1_stat (IMAGPART_EXPR,type,arg ));
   rpart = builtin_save_expr (rpart);
   ipart = builtin_save_expr (ipart);
   result = fold (build2_stat (PLUS_EXPR,type,fold (build2_stat (MULT_EXPR,type,rpart,rpart )),fold (build2_stat (MULT_EXPR,type,ipart,ipart )) )
                           );
   arglist = build_tree_list_stat((tree) ((void *)0),result );
   return build_function_call_expr (sqrtfn, arglist);
 }
    }
  return (tree) ((void *)0);
}
static tree
fold_builtin_trunc (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg;
  if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  if (((enum tree_code) (arg)->common.code) == REAL_CST && ! ((arg)->common.static_flag))
    {
      struct real_value r, x;
      tree type = ((exp)->common.type);
      x = (*((arg)->real_cst.real_cst_ptr));
      real_trunc (&r, ((type)->type.mode), &x);
      return build_real (type, r);
    }
  return fold_trunc_transparent_mathfn (exp);
}
static tree
fold_builtin_floor (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg;
  if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  if (((enum tree_code) (arg)->common.code) == REAL_CST && ! ((arg)->common.static_flag))
    {
      struct real_value x;
      x = (*((arg)->real_cst.real_cst_ptr));
      if (! real_isnan (&(x)) || ! flag_errno_math)
 {
   tree type = ((exp)->common.type);
   struct real_value r;
   real_floor (&r, ((type)->type.mode), &x);
   return build_real (type, r);
 }
    }
  return fold_trunc_transparent_mathfn (exp);
}
static tree
fold_builtin_ceil (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg;
  if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  if (((enum tree_code) (arg)->common.code) == REAL_CST && ! ((arg)->common.static_flag))
    {
      struct real_value x;
      x = (*((arg)->real_cst.real_cst_ptr));
      if (! real_isnan (&(x)) || ! flag_errno_math)
 {
   tree type = ((exp)->common.type);
   struct real_value r;
   real_ceil (&r, ((type)->type.mode), &x);
   return build_real (type, r);
 }
    }
  return fold_trunc_transparent_mathfn (exp);
}
static tree
fold_builtin_round (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg;
  if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  if (((enum tree_code) (arg)->common.code) == REAL_CST && ! ((arg)->common.static_flag))
    {
      struct real_value x;
      x = (*((arg)->real_cst.real_cst_ptr));
      if (! real_isnan (&(x)) || ! flag_errno_math)
 {
   tree type = ((exp)->common.type);
   struct real_value r;
   real_round (&r, ((type)->type.mode), &x);
   return build_real (type, r);
 }
    }
  return fold_trunc_transparent_mathfn (exp);
}
static tree
fold_builtin_lround (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg;
  if (! validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  if (((enum tree_code) (arg)->common.code) == REAL_CST && ! ((arg)->common.static_flag))
    {
      const struct real_value x = (*((arg)->real_cst.real_cst_ptr));
      if (! real_isnan (&(x)) && ! real_isinf (&(x)))
 {
   tree itype = ((exp)->common.type), ftype = ((arg)->common.type), result;
   long hi, lo;
   struct real_value r;
   real_round (&r, ((ftype)->type.mode), &x);
   real_to_integer2 (&lo, &hi, &(r));
   result = build_int_2_wide ((unsigned long) (lo), (long) (hi));
   if (int_fits_type_p (result, itype))
     return fold_convert (itype, result);
 }
    }
  return fold_fixed_mathfn (exp);
}
static tree
fold_builtin_bitop (tree exp)
{
  tree fndecl = get_callee_fndecl (exp);
  tree arglist = ((exp)->exp.operands[1]);
  tree arg;
  if (! validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE))
    return (tree) ((void *)0);
  arg = ((arglist)->list.value1);
  if (((enum tree_code) (arg)->common.code) == INTEGER_CST && ! ((arg)->common.static_flag))
    {
      long hi, width, result;
      unsigned long lo;
      tree type, t;
      type = ((arg)->common.type);
      width = ((type)->type.precision);
      lo = (((arg)->int_cst.int_cst).low);
      if (width > (8 * 4))
 {
   hi = (((arg)->int_cst.int_cst).high);
   if (width < 2 * (8 * 4))
     hi &= ~((long) (-1) >> (width - (8 * 4)));
 }
      else
 {
   hi = 0;
   if (width < (8 * 4))
     lo &= ~((unsigned long) (-1) << width);
 }
      switch (((fndecl)->decl.u1.f))
 {
 case BUILT_IN_FFS:
 case BUILT_IN_FFSL:
 case BUILT_IN_FFSLL:
   if (lo != 0)
     result = exact_log2_wide ((unsigned long) (lo & -lo)) + 1;
   else if (hi != 0)
     result = (8 * 4) + exact_log2_wide ((unsigned long) (hi & -hi)) + 1;
   else
     result = 0;
   break;
 case BUILT_IN_CLZ:
 case BUILT_IN_CLZL:
 case BUILT_IN_CLZLL:
   if (hi != 0)
     result = width - floor_log2_wide ((unsigned long) (hi)) - 1 - (8 * 4);
   else if (lo != 0)
     result = width - floor_log2_wide ((unsigned long) (lo)) - 1;
   else if (! 0)
     result = width;
   break;
 case BUILT_IN_CTZ:
 case BUILT_IN_CTZL:
 case BUILT_IN_CTZLL:
   if (lo != 0)
     result = exact_log2_wide ((unsigned long) (lo & -lo));
   else if (hi != 0)
     result = (8 * 4) + exact_log2_wide ((unsigned long) (hi & -hi));
   else if (! 0)
     result = width;
   break;
 case BUILT_IN_POPCOUNT:
 case BUILT_IN_POPCOUNTL:
 case BUILT_IN_POPCOUNTLL:
   result = 0;
   while (lo)
     result++, lo &= lo - 1;
   while (hi)
     result++, hi &= hi - 1;
   break;
 case BUILT_IN_PARITY:
 case BUILT_IN_PARITYL:
 case BUILT_IN_PARITYLL:
   result = 0;
   while (lo)
     result++, lo &= lo - 1;
   while (hi)
     result++, hi &= hi - 1;
   result &= 1;
   break;
 default:
   fancy_abort ("gcc.c", 383820, "?");
 }
      t = build_int_2_wide ((unsigned long) (result), (long) (0));
      ((t)->common.type) = ((exp)->common.type);
      return t;
    }
  return (tree) ((void *)0);
}
static unsigned char
real_dconstp (tree expr, const struct real_value *value)
{
  while ((((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR) && ((expr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((expr)->common.type))->type.mode) == ((((((expr)->exp.operands[0]))->common.type))->type.mode))) (expr) = ((expr)->exp.operands[0]);
  return ((((enum tree_code) (expr)->common.code) == REAL_CST
           && ! ((expr)->common.static_flag)
           && real_compare (EQ_EXPR, &((*((expr)->real_cst.real_cst_ptr))), &(*value1)))
          || (((enum tree_code) (expr)->common.code) == COMPLEX_CST
              && real_dconstp (((expr)->complex.real), value1)
              && real_zerop (((expr)->complex.imag))));
}
static tree
fold_builtin_logarithm (tree exp, const struct real_value *value1)
{
  tree arglist = ((exp)->exp.operands[1]);
  if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    {
      tree fndecl = get_callee_fndecl (exp);
      tree type = ((((fndecl)->common.type))->common.type);
      tree arg = ((arglist)->list.value1);
      const enum built_in_function fcode = builtin_mathfn_code (arg);
      if (real_onep (arg))
 return build_real (type, dconst0);
      if (exact_real_truncate (((type)->type.mode), value1)
   || flag_unsafe_math_optimizations)
        {
   const struct real_value value_truncate =
     real_value_truncate (((type)->type.mode), *value1);
   if (real_dconstp (arg, &value_truncate))
     return build_real (type, dconst1);
 }
      if (flag_unsafe_math_optimizations
   && ((value1 == &dconste
        && (fcode == BUILT_IN_EXP
     || fcode == BUILT_IN_EXPF
     || fcode == BUILT_IN_EXPL))
       || (value1 == &dconst2
    && (fcode == BUILT_IN_EXP2
        || fcode == BUILT_IN_EXP2F
        || fcode == BUILT_IN_EXP2L))
       || (value1 == &dconst10 && (((fcode) == BUILT_IN_EXP10 || (fcode) == BUILT_IN_EXP10F || (fcode) == BUILT_IN_EXP10L || (fcode) == BUILT_IN_POW10 || (fcode) == BUILT_IN_POW10F || (fcode) == BUILT_IN_POW10L)))))
 return fold_convert (type, ((((arg)->exp.operands[1]))->list.value1));
      if (flag_unsafe_math_optimizations)
        {
   tree exponent = 0, x = 0;
   switch (fcode)
   {
   case BUILT_IN_EXP:
   case BUILT_IN_EXPF:
   case BUILT_IN_EXPL:
     x = build_real (type,
       real_value_truncate (((type)->type.mode), dconste));
     exponent = ((((arg)->exp.operands[1]))->list.value1);
     break;
   case BUILT_IN_EXP2:
   case BUILT_IN_EXP2F:
   case BUILT_IN_EXP2L:
     x = build_real (type, dconst2);
     exponent = ((((arg)->exp.operands[1]))->list.value1);
     break;
   case BUILT_IN_EXP10:
   case BUILT_IN_EXP10F:
   case BUILT_IN_EXP10L:
   case BUILT_IN_POW10:
   case BUILT_IN_POW10F:
   case BUILT_IN_POW10L:
     x = build_real (type, dconst10);
     exponent = ((((arg)->exp.operands[1]))->list.value1);
     break;
   case BUILT_IN_SQRT:
   case BUILT_IN_SQRTF:
   case BUILT_IN_SQRTL:
     x = ((((arg)->exp.operands[1]))->list.value1);
     exponent = build_real (type, dconsthalf);
     break;
   case BUILT_IN_CBRT:
   case BUILT_IN_CBRTF:
   case BUILT_IN_CBRTL:
     x = ((((arg)->exp.operands[1]))->list.value1);
     exponent = build_real (type, real_value_truncate (((type)->type.mode),
             dconstthird));
     break;
   case BUILT_IN_POW:
   case BUILT_IN_POWF:
   case BUILT_IN_POWL:
     x = ((((arg)->exp.operands[1]))->list.value1);
     exponent = ((((((arg)->exp.operands[1]))->common.chain))->list.value1);
     break;
   default:
     break;
   }
   if (x && exponent)
     {
       tree logfn;
       arglist = build_tree_list_stat((tree) ((void *)0),x );
       logfn = build_function_call_expr (fndecl, arglist);
       return fold (build2_stat (MULT_EXPR,type,exponent,logfn ));
     }
 }
    }
  return 0;
}
static tree
fold_builtin_exponent (tree exp, const struct real_value *value1)
{
  tree arglist = ((exp)->exp.operands[1]);
  if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    {
      tree fndecl = get_callee_fndecl (exp);
      tree type = ((((fndecl)->common.type))->common.type);
      tree arg = ((arglist)->list.value1);
      if (real_zerop (arg))
 return build_real (type, dconst1);
      if (real_onep (arg))
        {
   struct real_value cst;
   real_convert (&cst, ((type)->type.mode), value1);
   return build_real (type, cst);
 }
      if (flag_unsafe_math_optimizations
   && ((enum tree_code) (arg)->common.code) == REAL_CST
   && ! ((arg)->common.static_flag))
        {
   struct real_value cint;
   struct real_value c;
   long n;
   c = (*((arg)->real_cst.real_cst_ptr));
   n = real_to_integer (&c);
   real_from_integer (&cint, VOIDmode, n,
        n < 0 ? -1 : 0, 0);
   if (real_identical (&c, &cint))
     {
       struct real_value x;
       real_powi (&x, ((type)->type.mode), value1, n);
       return build_real (type, x);
     }
 }
      if (flag_unsafe_math_optimizations)
        {
   const enum built_in_function fcode = builtin_mathfn_code (arg);
   if ((value1 == &dconste
        && (fcode == BUILT_IN_LOG
     || fcode == BUILT_IN_LOGF
     || fcode == BUILT_IN_LOGL))
       || (value1 == &dconst2
    && (fcode == BUILT_IN_LOG2
        || fcode == BUILT_IN_LOG2F
        || fcode == BUILT_IN_LOG2L))
       || (value1 == &dconst10
    && (fcode == BUILT_IN_LOG10
        || fcode == BUILT_IN_LOG10F
        || fcode == BUILT_IN_LOG10L)))
     return fold_convert (type, ((((arg)->exp.operands[1]))->list.value1));
 }
    }
  return 0;
}
static tree
fold_builtin_memcpy (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree dest, src, len;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  dest = ((arglist)->list.value1);
  src = ((((arglist)->common.chain))->list.value1);
  len = ((((((arglist)->common.chain))->common.chain))->list.value1);
  if (integer_zerop (len))
    return omit_one_operand (((exp)->common.type), dest, src);
  if (operand_equal_p (src, dest, 0))
    return omit_one_operand (((exp)->common.type), dest, len);
  return 0;
}
static tree
fold_builtin_mempcpy (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree dest, src, len;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  dest = ((arglist)->list.value1);
  src = ((((arglist)->common.chain))->list.value1);
  len = ((((((arglist)->common.chain))->common.chain))->list.value1);
  if (integer_zerop (len))
    return omit_one_operand (((exp)->common.type), dest, src);
  if (operand_equal_p (src, dest, 0))
    {
      tree temp = fold_convert (((dest)->common.type), len);
      temp = fold (build2_stat (PLUS_EXPR,((dest)->common.type),dest,temp ));
      return fold_convert (((exp)->common.type), temp);
    }
  return 0;
}
static tree
fold_builtin_memmove (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree dest, src, len;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  dest = ((arglist)->list.value1);
  src = ((((arglist)->common.chain))->list.value1);
  len = ((((((arglist)->common.chain))->common.chain))->list.value1);
  if (integer_zerop (len))
    return omit_one_operand (((exp)->common.type), dest, src);
  if (operand_equal_p (src, dest, 0))
    return omit_one_operand (((exp)->common.type), dest, len);
  return 0;
}
static tree
fold_builtin_strcpy (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree dest, src;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  dest = ((arglist)->list.value1);
  src = ((((arglist)->common.chain))->list.value1);
  if (operand_equal_p (src, dest, 0))
    return fold_convert (((exp)->common.type), dest);
  return 0;
}
static tree
fold_builtin_strncpy (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree dest, src, len;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  dest = ((arglist)->list.value1);
  src = ((((arglist)->common.chain))->list.value1);
  len = ((((((arglist)->common.chain))->common.chain))->list.value1);
  if (integer_zerop (len))
    return omit_one_operand (((exp)->common.type), dest, src);
  return 0;
}
static tree
fold_builtin_strchr (tree exp, unsigned char actually_strrchr)
{
  tree arglist = ((exp)->exp.operands[1]);
  if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      const char *p1;
      if (((enum tree_code) (s2)->common.code) != INTEGER_CST)
 return 0;
      p1 = c_getstr (s1);
      if (p1 != ((void *)0))
 {
   char c;
   const char *r;
   if (target_char_cast (s2, &c))
     return 0;
   r = actually_strrchr ? strrchr (p1, c) : strchr (p1, c);
   if (r == ((void *)0))
     return fold_convert (((s1)->common.type), global_trees[TI_INTEGER_ZERO]);
   return fold (build2_stat (PLUS_EXPR,((s1)->common.type),s1,fold_convert (((s1)->common.type), size_int_wide ((long) (r - p1), SSIZETYPE)) )
                           );
 }
      if (actually_strrchr)
 {
   tree fn;
   if (!integer_zerop (s2))
     return 0;
   fn = implicit_built_in_decls[BUILT_IN_STRCHR];
   if (!fn)
     return 0;
   return build_function_call_expr (fn, arglist);
 }
      return 0;
    }
}
static tree
fold_builtin_memcmp (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg1, arg2, len;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  arg1 = ((arglist)->list.value1);
  arg2 = ((((arglist)->common.chain))->list.value1);
  len = ((((((arglist)->common.chain))->common.chain))->list.value1);
  if (integer_zerop (len))
    {
      tree temp = omit_one_operand (((exp)->common.type), global_trees[TI_INTEGER_ZERO], arg2);
      return omit_one_operand (((exp)->common.type), temp, arg1);
    }
  if (operand_equal_p (arg1, arg2, 0))
    return omit_one_operand (((exp)->common.type), global_trees[TI_INTEGER_ZERO], len);
  return 0;
}
static tree
fold_builtin_strcmp (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg1, arg2;
  const char *p1, *p2;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  arg1 = ((arglist)->list.value1);
  arg2 = ((((arglist)->common.chain))->list.value1);
  if (operand_equal_p (arg1, arg2, 0))
    return fold_convert (((exp)->common.type), global_trees[TI_INTEGER_ZERO]);
  p1 = c_getstr (arg1);
  p2 = c_getstr (arg2);
  if (p1 && p2)
    {
      tree temp;
      const int i = strcmp (p1, p2);
      if (i < 0)
 temp = global_trees[TI_INTEGER_MINUS_ONE];
      else if (i > 0)
 temp = global_trees[TI_INTEGER_ONE];
      else
 temp = global_trees[TI_INTEGER_ZERO];
      return fold_convert (((exp)->common.type), temp);
    }
  return 0;
}
static tree
fold_builtin_strncmp (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg1, arg2, len;
  const char *p1, *p2;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  arg1 = ((arglist)->list.value1);
  arg2 = ((((arglist)->common.chain))->list.value1);
  len = ((((((arglist)->common.chain))->common.chain))->list.value1);
  if (integer_zerop (len))
    {
      tree temp = omit_one_operand (((exp)->common.type), global_trees[TI_INTEGER_ZERO], arg2);
      return omit_one_operand (((exp)->common.type), temp, arg1);
    }
  if (operand_equal_p (arg1, arg2, 0))
    return omit_one_operand (((exp)->common.type), global_trees[TI_INTEGER_ZERO], len);
  p1 = c_getstr (arg1);
  p2 = c_getstr (arg2);
  if (host_integerp (len, 1) && p1 && p2)
    {
      tree temp;
      const int i = strncmp (p1, p2, tree_low_cst (len, 1));
      if (i < 0)
 temp = global_trees[TI_INTEGER_MINUS_ONE];
      else if (i > 0)
 temp = global_trees[TI_INTEGER_ONE];
      else
 temp = global_trees[TI_INTEGER_ZERO];
      return fold_convert (((exp)->common.type), temp);
    }
  return 0;
}
static tree
fold_builtin_signbit (tree exp)
{
  tree arglist = ((exp)->exp.operands[1]);
  tree arg, temp;
  if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return (tree) ((void *)0);
  arg = ((arglist)->list.value1);
  if (((enum tree_code) (arg)->common.code) == REAL_CST
      && !((arg)->common.static_flag))
    {
      struct real_value c;
      c = (*((arg)->real_cst.real_cst_ptr));
      temp = real_isneg (&(c)) ? global_trees[TI_INTEGER_ONE] : global_trees[TI_INTEGER_ZERO];
      return fold_convert (((exp)->common.type), temp);
    }
  if (tree_expr_nonnegative_p (arg))
    return omit_one_operand (((exp)->common.type), global_trees[TI_INTEGER_ZERO], arg);
  if (!(((mode_class[((((arg)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations))
    return fold (build2_stat (LT_EXPR,((exp)->common.type),arg,build_real (((arg)->common.type), dconst0) )
                                          );
  return (tree) ((void *)0);
}
static tree
fold_builtin_copysign (tree arglist, tree type)
{
  tree arg1, arg2;
  if (!validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE))
    return (tree) ((void *)0);
  arg1 = ((arglist)->list.value1);
  arg2 = ((((arglist)->common.chain))->list.value1);
  if (operand_equal_p (arg1, arg2, 0))
    return fold_convert (type, arg1);
  if (((enum tree_code) (arg1)->common.code) == REAL_CST
      && ((enum tree_code) (arg2)->common.code) == REAL_CST
      && !((arg1)->common.static_flag)
      && !((arg2)->common.static_flag))
    {
      struct real_value c1, c2;
      c1 = (*((arg1)->real_cst.real_cst_ptr));
      c2 = (*((arg2)->real_cst.real_cst_ptr));
      real_copysign (&c1, &c2);
      return build_real (type, c1);
      c1.sign = c2.sign;
    }
  if (tree_expr_nonnegative_p (arg2))
    return omit_one_operand (type,
        fold (build1_stat (ABS_EXPR,type,arg1 )),
        arg2);
  return (tree) ((void *)0);
}
static tree
fold_builtin_isascii (tree arglist)
{
  if (! validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree arg = ((arglist)->list.value1);
      arg = fold (build2_stat (EQ_EXPR,integer_types[itk_int],build2_stat (BIT_AND_EXPR,integer_types[itk_int],arg,build_int_2_wide ((unsigned long) (~ (unsigned long) 0x7f), (long) (~ (long) 0)) ),global_trees[TI_INTEGER_ZERO] )
                       );
      if (in_gimple_form && !((arg)->common.constant_flag))
        return (tree) ((void *)0);
      else
        return arg;
    }
}
static tree
fold_builtin_toascii (tree arglist)
{
  if (! validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree arg = ((arglist)->list.value1);
      return fold (build2_stat (BIT_AND_EXPR,integer_types[itk_int],arg,build_int_2_wide ((unsigned long) (0x7f), (long) (0)) )
                            );
    }
}
static tree
fold_builtin_isdigit (tree arglist)
{
  if (! validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree arg = ((arglist)->list.value1);
      arg = fold_convert (integer_types[itk_unsigned_int], arg);
      arg = build2_stat (MINUS_EXPR,integer_types[itk_unsigned_int],arg,fold_convert (integer_types[itk_unsigned_int], build_int_2_wide ((unsigned long) (060), (long) (0))) )
                                      ;
      arg = build2_stat (LE_EXPR,integer_types[itk_int],arg,fold_convert (integer_types[itk_unsigned_int], build_int_2_wide ((unsigned long) (9), (long) (0))) )
                                                            ;
      arg = fold (arg);
      if (in_gimple_form && !((arg)->common.constant_flag))
        return (tree) ((void *)0);
      else
        return arg;
    }
}
static tree
fold_builtin_fabs (tree arglist, tree type)
{
  tree arg;
  if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  if (((enum tree_code) (arg)->common.code) == REAL_CST)
    return fold_abs_const (arg, type);
  return fold (build1_stat (ABS_EXPR,type,arg ));
}
static tree
fold_builtin_abs (tree arglist, tree type)
{
  tree arg;
  if (!validate_arglist (arglist, INTEGER_TYPE, VOID_TYPE))
    return 0;
  arg = ((arglist)->list.value1);
  if (((enum tree_code) (arg)->common.code) == INTEGER_CST)
    return fold_abs_const (arg, type);
  return fold (build1_stat (ABS_EXPR,type,arg ));
}
static tree
fold_builtin_classify (tree exp, int builtin_index)
{
  tree fndecl = get_callee_fndecl (exp);
  tree arglist = ((exp)->exp.operands[1]);
  tree type = ((((fndecl)->common.type))->common.type);
  tree arg;
  struct real_value r;
  if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
    {
      if (arglist == 0)
 {
   error ("too few arguments to function `%s'",
   ((const char *) (((fndecl)->decl.name))->identifier.id.str));
   return global_trees[TI_ERROR_MARK];
 }
      else if (((arglist)->common.chain) != 0)
 {
   error ("too many arguments to function `%s'",
   ((const char *) (((fndecl)->decl.name))->identifier.id.str));
   return global_trees[TI_ERROR_MARK];
 }
      else
 {
   error ("non-floating-point argument to function `%s'",
   ((const char *) (((fndecl)->decl.name))->identifier.id.str));
   return global_trees[TI_ERROR_MARK];
 }
    }
  arg = ((arglist)->list.value1);
  switch (builtin_index)
    {
    case BUILT_IN_ISINF:
      if (!((mode_class[((((arg)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0))
        return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg);
      if (((enum tree_code) (arg)->common.code) == REAL_CST)
 {
   r = (*((arg)->real_cst.real_cst_ptr));
   if (real_isinf (&r))
     return real_compare (GT_EXPR, &r, &dconst0)
     ? global_trees[TI_INTEGER_ONE] : global_trees[TI_INTEGER_MINUS_ONE];
   else
     return global_trees[TI_INTEGER_ZERO];
 }
      return (tree) ((void *)0);
    case BUILT_IN_FINITE:
      if (!((mode_class[((((arg)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0)
          && !((mode_class[((((arg)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0))
        return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg);
      if (((enum tree_code) (arg)->common.code) == REAL_CST)
 {
   r = (*((arg)->real_cst.real_cst_ptr));
   return real_isinf (&r) || real_isnan (&r)
   ? global_trees[TI_INTEGER_ZERO] : global_trees[TI_INTEGER_ONE];
 }
      return (tree) ((void *)0);
    case BUILT_IN_ISNAN:
      if (!((mode_class[((((arg)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0))
        return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg);
      if (((enum tree_code) (arg)->common.code) == REAL_CST)
 {
   r = (*((arg)->real_cst.real_cst_ptr));
   return real_isnan (&r) ? global_trees[TI_INTEGER_ONE] : global_trees[TI_INTEGER_ZERO];
 }
      arg = builtin_save_expr (arg);
      return fold (build2_stat (UNORDERED_EXPR,type,arg,arg ));
    default:
      fancy_abort ("gcc.c", 384610, "?");
    }
}
static tree
fold_builtin_unordered_cmp (tree exp,
       enum tree_code unordered_code,
       enum tree_code ordered_code)
{
  tree fndecl = get_callee_fndecl (exp);
  tree arglist = ((exp)->exp.operands[1]);
  tree type = ((((fndecl)->common.type))->common.type);
  enum tree_code code;
  tree arg0, arg1;
  if (!validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE))
    {
      enum tree_code code0, code1;
      tree type0, type1;
      tree cmp_type = 0;
      if (arglist == 0 || ((arglist)->common.chain) == 0)
 {
   error ("too few arguments to function `%s'",
   ((const char *) (((fndecl)->decl.name))->identifier.id.str));
   return global_trees[TI_ERROR_MARK];
 }
      else if (((((arglist)->common.chain))->common.chain) != 0)
 {
   error ("too many arguments to function `%s'",
   ((const char *) (((fndecl)->decl.name))->identifier.id.str));
   return global_trees[TI_ERROR_MARK];
 }
      arg0 = ((arglist)->list.value1);
      arg1 = ((((arglist)->common.chain))->list.value1);
      type0 = ((arg0)->common.type);
      type1 = ((arg1)->common.type);
      code0 = ((enum tree_code) (type0)->common.code);
      code1 = ((enum tree_code) (type1)->common.code);
      if (code0 == REAL_TYPE && code1 == REAL_TYPE)
        cmp_type = ((type0)->type.precision) >= ((type1)->type.precision)
     ? type0 : type1;
      else if (code0 == REAL_TYPE && code1 == INTEGER_TYPE)
 cmp_type = type0;
      else if (code0 == INTEGER_TYPE && code1 == REAL_TYPE)
 cmp_type = type1;
      else
 {
   error ("non-floating-point argument to function `%s'",
   ((const char *) (((fndecl)->decl.name))->identifier.id.str));
   return global_trees[TI_ERROR_MARK];
 }
      arg0 = fold_convert (cmp_type, arg0);
      arg1 = fold_convert (cmp_type, arg1);
    }
  else
    {
      arg0 = ((arglist)->list.value1);
      arg1 = ((((arglist)->common.chain))->list.value1);
    }
  if (unordered_code == UNORDERED_EXPR)
    {
      if (!((mode_class[((((arg0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0))
 return omit_two_operands (type, global_trees[TI_INTEGER_ZERO], arg0, arg1);
      return fold (build2_stat (UNORDERED_EXPR,type,arg0,arg1 ));
    }
  code = ((mode_class[((((arg0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) ? unordered_code
            : ordered_code;
  return fold (build1_stat (TRUTH_NOT_EXPR,type,fold (build2_stat (code,type,arg0,arg1 )) )
                                                );
}
static tree
fold_builtin_1 (tree exp)
{
  tree fndecl = get_callee_fndecl (exp);
  tree arglist = ((exp)->exp.operands[1]);
  tree type = ((((fndecl)->common.type))->common.type);
  if (((fndecl)->decl.built_in_class) == BUILT_IN_MD)
    return 0;
  switch (((fndecl)->decl.u1.f))
    {
    case BUILT_IN_CONSTANT_P:
      return fold_builtin_constant_p (arglist);
    case BUILT_IN_EXPECT:
      return fold_builtin_expect (arglist);
    case BUILT_IN_CLASSIFY_TYPE:
      return fold_builtin_classify_type (arglist);
    case BUILT_IN_STRLEN:
      if (validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
 {
   tree len = c_strlen (((arglist)->list.value1), 0);
   if (len)
     {
       if (global_trees[TI_SIZE_TYPE])
  len = fold_convert (global_trees[TI_SIZE_TYPE], len);
       return len;
     }
 }
      break;
    case BUILT_IN_FABS:
    case BUILT_IN_FABSF:
    case BUILT_IN_FABSL:
      return fold_builtin_fabs (arglist, type);
    case BUILT_IN_ABS:
    case BUILT_IN_LABS:
    case BUILT_IN_LLABS:
    case BUILT_IN_IMAXABS:
      return fold_builtin_abs (arglist, type);
    case BUILT_IN_CONJ:
    case BUILT_IN_CONJF:
    case BUILT_IN_CONJL:
      if (validate_arglist (arglist, COMPLEX_TYPE, VOID_TYPE))
 return fold (build1_stat (CONJ_EXPR,type,((arglist)->list.value1) ));
      break;
    case BUILT_IN_CREAL:
    case BUILT_IN_CREALF:
    case BUILT_IN_CREALL:
      if (validate_arglist (arglist, COMPLEX_TYPE, VOID_TYPE))
        return non_lvalue (fold (build1_stat (REALPART_EXPR,type,((arglist)->list.value1) )
                           ));
      break;
    case BUILT_IN_CIMAG:
    case BUILT_IN_CIMAGF:
    case BUILT_IN_CIMAGL:
      if (validate_arglist (arglist, COMPLEX_TYPE, VOID_TYPE))
        return non_lvalue (fold (build1_stat (IMAGPART_EXPR,type,((arglist)->list.value1) )
                           ));
      break;
    case BUILT_IN_CABS:
    case BUILT_IN_CABSF:
    case BUILT_IN_CABSL:
      return fold_builtin_cabs (arglist, type);
    case BUILT_IN_SQRT:
    case BUILT_IN_SQRTF:
    case BUILT_IN_SQRTL:
      if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
 {
   enum built_in_function fcode;
   tree arg = ((arglist)->list.value1);
   if (((enum tree_code) (arg)->common.code) == REAL_CST
       && ! ((arg)->common.static_flag))
     {
       struct real_value r, x;
       x = (*((arg)->real_cst.real_cst_ptr));
       if (real_sqrt (&r, ((type)->type.mode), &x)
    || (!flag_trapping_math && !flag_errno_math))
  return build_real (type, r);
     }
   fcode = builtin_mathfn_code (arg);
   if (flag_unsafe_math_optimizations && (((fcode) == BUILT_IN_EXP10 || (fcode) == BUILT_IN_EXP10F || (fcode) == BUILT_IN_EXP10L || (fcode) == BUILT_IN_POW10 || (fcode) == BUILT_IN_POW10F || (fcode) == BUILT_IN_POW10L) || (fcode) == BUILT_IN_EXP || (fcode) == BUILT_IN_EXPF || (fcode) == BUILT_IN_EXPL || (fcode) == BUILT_IN_EXP2 || (fcode) == BUILT_IN_EXP2F || (fcode) == BUILT_IN_EXP2L))
     {
       tree expfn = ((((arg)->exp.operands[0]))->exp.operands[0]);
       arg = fold (build2_stat (MULT_EXPR,type,((((arg)->exp.operands[1]))->list.value1),build_real (type, dconsthalf) )
                                    );
       arglist = build_tree_list_stat((tree) ((void *)0),arg );
       return build_function_call_expr (expfn, arglist);
     }
   if (flag_unsafe_math_optimizations && (((fcode) == BUILT_IN_SQRT || (fcode) == BUILT_IN_SQRTF || (fcode) == BUILT_IN_SQRTL) || ((fcode) == BUILT_IN_CBRT || (fcode) == BUILT_IN_CBRTF || (fcode) == BUILT_IN_CBRTL)))
     {
       tree powfn = mathfn_built_in (type, BUILT_IN_POW);
       if (powfn)
         {
    tree arg0 = ((((arg)->exp.operands[1]))->list.value1);
    tree tree_root;
    struct real_value dconstroot =
      ((fcode) == BUILT_IN_SQRT || (fcode) == BUILT_IN_SQRTF || (fcode) == BUILT_IN_SQRTL) ? dconsthalf : dconstthird;
    ((&dconstroot)->uexp = ((unsigned int)(((int)((&dconstroot)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) - 1) & (unsigned int)((1 << (32 - 5)) - 1)));
    dconstroot = real_value_truncate (((type)->type.mode), dconstroot);
    tree_root = build_real (type, dconstroot);
    arglist = tree_cons_stat ((tree) ((void *)0),arg0,build_tree_list_stat((tree) ((void *)0),tree_root ) )
                                                  ;
    return build_function_call_expr (powfn, arglist);
  }
     }
   if (flag_unsafe_math_optimizations
       && (fcode == BUILT_IN_POW
    || fcode == BUILT_IN_POWF
    || fcode == BUILT_IN_POWL))
     {
       tree powfn = ((((arg)->exp.operands[0]))->exp.operands[0]);
       tree arg0 = ((((arg)->exp.operands[1]))->list.value1);
       tree arg1 = ((((((arg)->exp.operands[1]))->common.chain))->list.value1);
       tree narg1 = fold (build2_stat (MULT_EXPR,type,arg1,build_real (type, dconsthalf) )
                                    );
       arglist = tree_cons_stat ((tree) ((void *)0),arg0,build_tree_list_stat((tree) ((void *)0),narg1 ) )
                                          ;
       return build_function_call_expr (powfn, arglist);
     }
 }
      break;
    case BUILT_IN_CBRT:
    case BUILT_IN_CBRTF:
    case BUILT_IN_CBRTL:
      if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
 {
   tree arg = ((arglist)->list.value1);
   const enum built_in_function fcode = builtin_mathfn_code (arg);
   if (real_zerop (arg) || real_onep (arg) || real_minus_onep (arg))
     return arg;
   if (flag_unsafe_math_optimizations && (((fcode) == BUILT_IN_EXP10 || (fcode) == BUILT_IN_EXP10F || (fcode) == BUILT_IN_EXP10L || (fcode) == BUILT_IN_POW10 || (fcode) == BUILT_IN_POW10F || (fcode) == BUILT_IN_POW10L) || (fcode) == BUILT_IN_EXP || (fcode) == BUILT_IN_EXPF || (fcode) == BUILT_IN_EXPL || (fcode) == BUILT_IN_EXP2 || (fcode) == BUILT_IN_EXP2F || (fcode) == BUILT_IN_EXP2L))
     {
       tree expfn = ((((arg)->exp.operands[0]))->exp.operands[0]);
       const struct real_value third_trunc =
  real_value_truncate (((type)->type.mode), dconstthird);
       arg = fold (build2_stat (MULT_EXPR,type,((((arg)->exp.operands[1]))->list.value1),build_real (type, third_trunc) )
                                     );
       arglist = build_tree_list_stat((tree) ((void *)0),arg );
       return build_function_call_expr (expfn, arglist);
     }
   if (flag_unsafe_math_optimizations && ((fcode) == BUILT_IN_SQRT || (fcode) == BUILT_IN_SQRTF || (fcode) == BUILT_IN_SQRTL))
     {
       tree powfn = mathfn_built_in (type, BUILT_IN_POW);
       if (powfn)
         {
    tree arg0 = ((((arg)->exp.operands[1]))->list.value1);
    tree tree_root;
    struct real_value dconstroot = dconstthird;
    ((&dconstroot)->uexp = ((unsigned int)(((int)((&dconstroot)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) - 1) & (unsigned int)((1 << (32 - 5)) - 1)));
    dconstroot = real_value_truncate (((type)->type.mode), dconstroot);
    tree_root = build_real (type, dconstroot);
    arglist = tree_cons_stat ((tree) ((void *)0),arg0,build_tree_list_stat((tree) ((void *)0),tree_root ) )
                                                  ;
    return build_function_call_expr (powfn, arglist);
  }
     }
 }
      break;
    case BUILT_IN_SIN:
    case BUILT_IN_SINF:
    case BUILT_IN_SINL:
      if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
 {
   tree arg = ((arglist)->list.value1);
   if (real_zerop (arg))
     return arg;
 }
      break;
    case BUILT_IN_COS:
    case BUILT_IN_COSF:
    case BUILT_IN_COSL:
      if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
 {
   tree arg = ((arglist)->list.value1);
   if (real_zerop (arg))
     return build_real (type, dconst1);
   if (((enum tree_code) (arg)->common.code) == NEGATE_EXPR)
     {
       tree arglist = build_tree_list_stat((tree) ((void *)0),((arg)->exp.operands[0]) )
                                 ;
       return build_function_call_expr (fndecl, arglist);
     }
 }
      break;
    case BUILT_IN_EXP:
    case BUILT_IN_EXPF:
    case BUILT_IN_EXPL:
      return fold_builtin_exponent (exp, &dconste);
    case BUILT_IN_EXP2:
    case BUILT_IN_EXP2F:
    case BUILT_IN_EXP2L:
      return fold_builtin_exponent (exp, &dconst2);
    case BUILT_IN_EXP10:
    case BUILT_IN_EXP10F:
    case BUILT_IN_EXP10L:
    case BUILT_IN_POW10:
    case BUILT_IN_POW10F:
    case BUILT_IN_POW10L:
      return fold_builtin_exponent (exp, &dconst10);
    case BUILT_IN_LOG:
    case BUILT_IN_LOGF:
    case BUILT_IN_LOGL:
      return fold_builtin_logarithm (exp, &dconste);
    case BUILT_IN_LOG2:
    case BUILT_IN_LOG2F:
    case BUILT_IN_LOG2L:
      return fold_builtin_logarithm (exp, &dconst2);
    case BUILT_IN_LOG10:
    case BUILT_IN_LOG10F:
    case BUILT_IN_LOG10L:
      return fold_builtin_logarithm (exp, &dconst10);
    case BUILT_IN_TAN:
    case BUILT_IN_TANF:
    case BUILT_IN_TANL:
      if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
 {
   enum built_in_function fcode;
   tree arg = ((arglist)->list.value1);
   if (real_zerop (arg))
     return arg;
   fcode = builtin_mathfn_code (arg);
   if (flag_unsafe_math_optimizations
       && (fcode == BUILT_IN_ATAN
    || fcode == BUILT_IN_ATANF
    || fcode == BUILT_IN_ATANL))
     return ((((arg)->exp.operands[1]))->list.value1);
 }
      break;
    case BUILT_IN_ATAN:
    case BUILT_IN_ATANF:
    case BUILT_IN_ATANL:
      if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
 {
   tree arg = ((arglist)->list.value1);
   if (real_zerop (arg))
     return arg;
   if (real_onep (arg))
     {
       struct real_value cst;
       real_convert (&cst, ((type)->type.mode), &dconstpi);
       ((&cst)->uexp = ((unsigned int)(((int)((&cst)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) - 2) & (unsigned int)((1 << (32 - 5)) - 1)));
       return build_real (type, cst);
     }
 }
      break;
    case BUILT_IN_POW:
    case BUILT_IN_POWF:
    case BUILT_IN_POWL:
      if (validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE))
 {
   enum built_in_function fcode;
   tree arg0 = ((arglist)->list.value1);
   tree arg1 = ((((arglist)->common.chain))->list.value1);
   if (real_onep (arg0))
     return omit_one_operand (type, build_real (type, dconst1), arg1);
   if (((enum tree_code) (arg1)->common.code) == REAL_CST
       && ! ((arg1)->common.static_flag))
     {
       struct real_value c;
       c = (*((arg1)->real_cst.real_cst_ptr));
       if (real_compare (EQ_EXPR, &(c), &(dconst0)))
  return omit_one_operand (type, build_real (type, dconst1),
      arg0);
       if (real_compare (EQ_EXPR, &(c), &(dconst1)))
  return arg0;
       if (real_compare (EQ_EXPR, &(c), &(dconstm1)))
  return fold (build2_stat (RDIV_EXPR,type,build_real (type, dconst1),arg0 )
                                          );
       if (flag_unsafe_math_optimizations
    && real_compare (EQ_EXPR, &(c), &(dconsthalf)))
  {
    tree sqrtfn = mathfn_built_in (type, BUILT_IN_SQRT);
    if (sqrtfn != (tree) ((void *)0))
      {
        tree arglist = build_tree_list_stat((tree) ((void *)0),arg0 );
        return build_function_call_expr (sqrtfn, arglist);
      }
  }
       if (((enum tree_code) (arg0)->common.code) == REAL_CST
    && ! ((arg0)->common.static_flag))
  {
    struct real_value cint;
    long n;
    n = real_to_integer (&c);
    real_from_integer (&cint, VOIDmode, n,
         n < 0 ? -1 : 0, 0);
    if (real_identical (&c, &cint))
      {
        struct real_value x;
        unsigned char inexact;
        x = (*((arg0)->real_cst.real_cst_ptr));
        inexact = real_powi (&x, ((type)->type.mode), &x, n);
        if (flag_unsafe_math_optimizations || !inexact)
   return build_real (type, x);
      }
  }
     }
   fcode = builtin_mathfn_code (arg0);
   if (flag_unsafe_math_optimizations && (((fcode) == BUILT_IN_EXP10 || (fcode) == BUILT_IN_EXP10F || (fcode) == BUILT_IN_EXP10L || (fcode) == BUILT_IN_POW10 || (fcode) == BUILT_IN_POW10F || (fcode) == BUILT_IN_POW10L) || (fcode) == BUILT_IN_EXP || (fcode) == BUILT_IN_EXPF || (fcode) == BUILT_IN_EXPL || (fcode) == BUILT_IN_EXP2 || (fcode) == BUILT_IN_EXP2F || (fcode) == BUILT_IN_EXP2L))
     {
       tree expfn = ((((arg0)->exp.operands[0]))->exp.operands[0]);
       tree arg = ((((arg0)->exp.operands[1]))->list.value1);
       arg = fold (build2_stat (MULT_EXPR,type,arg,arg1 ));
       arglist = build_tree_list_stat((tree) ((void *)0),arg );
       return build_function_call_expr (expfn, arglist);
     }
   if (flag_unsafe_math_optimizations && ((fcode) == BUILT_IN_SQRT || (fcode) == BUILT_IN_SQRTF || (fcode) == BUILT_IN_SQRTL))
     {
       tree narg0 = ((((arg0)->exp.operands[1]))->list.value1);
       tree narg1 = fold (build2_stat (MULT_EXPR,type,arg1,build_real (type, dconsthalf) )
                                    );
       arglist = tree_cons_stat ((tree) ((void *)0),narg0,build_tree_list_stat((tree) ((void *)0),narg1 ) )
                                          ;
       return build_function_call_expr (fndecl, arglist);
     }
   if (flag_unsafe_math_optimizations
       && (fcode == BUILT_IN_POW
    || fcode == BUILT_IN_POWF
    || fcode == BUILT_IN_POWL))
     {
       tree arg00 = ((((arg0)->exp.operands[1]))->list.value1);
       tree arg01 = ((((((arg0)->exp.operands[1]))->common.chain))->list.value1);
       tree narg1 = fold (build2_stat (MULT_EXPR,type,arg01,arg1 ));
       arglist = tree_cons_stat ((tree) ((void *)0),arg00,build_tree_list_stat((tree) ((void *)0),narg1 ) )
                                          ;
       return build_function_call_expr (fndecl, arglist);
     }
 }
      break;
    case BUILT_IN_INF:
    case BUILT_IN_INFF:
    case BUILT_IN_INFL:
      return fold_builtin_inf (type, 1);
    case BUILT_IN_HUGE_VAL:
    case BUILT_IN_HUGE_VALF:
    case BUILT_IN_HUGE_VALL:
      return fold_builtin_inf (type, 0);
    case BUILT_IN_NAN:
    case BUILT_IN_NANF:
    case BUILT_IN_NANL:
      return fold_builtin_nan (arglist, type, 1);
    case BUILT_IN_NANS:
    case BUILT_IN_NANSF:
    case BUILT_IN_NANSL:
      return fold_builtin_nan (arglist, type, 0);
    case BUILT_IN_FLOOR:
    case BUILT_IN_FLOORF:
    case BUILT_IN_FLOORL:
      return fold_builtin_floor (exp);
    case BUILT_IN_CEIL:
    case BUILT_IN_CEILF:
    case BUILT_IN_CEILL:
      return fold_builtin_ceil (exp);
    case BUILT_IN_TRUNC:
    case BUILT_IN_TRUNCF:
    case BUILT_IN_TRUNCL:
      return fold_builtin_trunc (exp);
    case BUILT_IN_ROUND:
    case BUILT_IN_ROUNDF:
    case BUILT_IN_ROUNDL:
      return fold_builtin_round (exp);
    case BUILT_IN_NEARBYINT:
    case BUILT_IN_NEARBYINTF:
    case BUILT_IN_NEARBYINTL:
    case BUILT_IN_RINT:
    case BUILT_IN_RINTF:
    case BUILT_IN_RINTL:
      return fold_trunc_transparent_mathfn (exp);
    case BUILT_IN_LROUND:
    case BUILT_IN_LROUNDF:
    case BUILT_IN_LROUNDL:
    case BUILT_IN_LLROUND:
    case BUILT_IN_LLROUNDF:
    case BUILT_IN_LLROUNDL:
      return fold_builtin_lround (exp);
    case BUILT_IN_LRINT:
    case BUILT_IN_LRINTF:
    case BUILT_IN_LRINTL:
    case BUILT_IN_LLRINT:
    case BUILT_IN_LLRINTF:
    case BUILT_IN_LLRINTL:
      return fold_fixed_mathfn (exp);
    case BUILT_IN_FFS:
    case BUILT_IN_FFSL:
    case BUILT_IN_FFSLL:
    case BUILT_IN_CLZ:
    case BUILT_IN_CLZL:
    case BUILT_IN_CLZLL:
    case BUILT_IN_CTZ:
    case BUILT_IN_CTZL:
    case BUILT_IN_CTZLL:
    case BUILT_IN_POPCOUNT:
    case BUILT_IN_POPCOUNTL:
    case BUILT_IN_POPCOUNTLL:
    case BUILT_IN_PARITY:
    case BUILT_IN_PARITYL:
    case BUILT_IN_PARITYLL:
      return fold_builtin_bitop (exp);
    case BUILT_IN_MEMCPY:
      return fold_builtin_memcpy (exp);
    case BUILT_IN_MEMPCPY:
      return fold_builtin_mempcpy (exp);
    case BUILT_IN_MEMMOVE:
      return fold_builtin_memmove (exp);
    case BUILT_IN_STRCPY:
      return fold_builtin_strcpy (exp);
    case BUILT_IN_STRNCPY:
      return fold_builtin_strncpy (exp);
    case BUILT_IN_INDEX:
    case BUILT_IN_STRCHR:
      return fold_builtin_strchr (exp, 0);
    case BUILT_IN_RINDEX:
    case BUILT_IN_STRRCHR:
      return fold_builtin_strchr (exp, 1);
    case BUILT_IN_MEMCMP:
      return fold_builtin_memcmp (exp);
    case BUILT_IN_STRCMP:
      return fold_builtin_strcmp (exp);
    case BUILT_IN_STRNCMP:
      return fold_builtin_strncmp (exp);
    case BUILT_IN_SIGNBIT:
    case BUILT_IN_SIGNBITF:
    case BUILT_IN_SIGNBITL:
      return fold_builtin_signbit (exp);
    case BUILT_IN_ISASCII:
      return fold_builtin_isascii (arglist);
    case BUILT_IN_TOASCII:
      return fold_builtin_toascii (arglist);
    case BUILT_IN_ISDIGIT:
      return fold_builtin_isdigit (arglist);
    case BUILT_IN_COPYSIGN:
    case BUILT_IN_COPYSIGNF:
    case BUILT_IN_COPYSIGNL:
      return fold_builtin_copysign (arglist, type);
    case BUILT_IN_FINITE:
    case BUILT_IN_FINITEF:
    case BUILT_IN_FINITEL:
      return fold_builtin_classify (exp, BUILT_IN_FINITE);
    case BUILT_IN_ISINF:
    case BUILT_IN_ISINFF:
    case BUILT_IN_ISINFL:
      return fold_builtin_classify (exp, BUILT_IN_ISINF);
    case BUILT_IN_ISNAN:
    case BUILT_IN_ISNANF:
    case BUILT_IN_ISNANL:
      return fold_builtin_classify (exp, BUILT_IN_ISNAN);
    case BUILT_IN_ISGREATER:
      return fold_builtin_unordered_cmp (exp, UNLE_EXPR, LE_EXPR);
    case BUILT_IN_ISGREATEREQUAL:
      return fold_builtin_unordered_cmp (exp, UNLT_EXPR, LT_EXPR);
    case BUILT_IN_ISLESS:
      return fold_builtin_unordered_cmp (exp, UNGE_EXPR, GE_EXPR);
    case BUILT_IN_ISLESSEQUAL:
      return fold_builtin_unordered_cmp (exp, UNGT_EXPR, GT_EXPR);
    case BUILT_IN_ISLESSGREATER:
      return fold_builtin_unordered_cmp (exp, UNEQ_EXPR, EQ_EXPR);
    case BUILT_IN_ISUNORDERED:
      return fold_builtin_unordered_cmp (exp, UNORDERED_EXPR, NOP_EXPR);
    default:
      break;
    }
  return 0;
}
tree
fold_builtin (tree exp)
{
  exp = fold_builtin_1 (exp);
  if (exp)
    {
      if (tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'c')
 exp = build1_stat (NOP_EXPR,((exp)->common.type),exp );
      ((exp)->common.nowarning_flag) = 1;
    }
  return exp;
}
tree
build_function_call_expr (tree fn, tree arglist)
{
  tree call_expr;
  call_expr = build1_stat (ADDR_EXPR,build_pointer_type (((fn)->common.type)),fn );
  call_expr = build3_stat (CALL_EXPR,((((fn)->common.type))->common.type),call_expr,arglist,(tree) ((void *)0) )
                                      ;
  return fold (call_expr);
}
static int
validate_arglist (tree arglist, ...)
{
  enum tree_code code;
  int res = 0;
  va_list ap;
  __builtin_va_start(ap,arglist);
  do
    {
      code = __builtin_va_arg(ap,tree_code);
      switch (code)
 {
 case 0:
   res = 1;
   goto end;
 case VOID_TYPE:
   res = arglist == 0;
   goto end;
 default:
   if (arglist == 0
       || code != ((enum tree_code) (((((arglist)->list.value1))->common.type))->common.code))
     goto end;
   break;
 }
      arglist = ((arglist)->common.chain);
    }
  while (1);
 end: ;
  __builtin_va_end(ap);
  return res;
}
rtx
default_expand_builtin (tree exp ,
   rtx target ,
   rtx subtarget ,
   enum machine_mode mode ,
   int ignore )
{
  return (rtx) 0;
}
static unsigned char
readonly_data_expr (tree exp)
{
  while ((((enum tree_code) (exp)->common.code) == NOP_EXPR || ((enum tree_code) (exp)->common.code) == CONVERT_EXPR || ((enum tree_code) (exp)->common.code) == NON_LVALUE_EXPR) && ((exp)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((exp)->common.type))->type.mode) == ((((((exp)->exp.operands[0]))->common.type))->type.mode))) (exp) = ((exp)->exp.operands[0]);
  if (((enum tree_code) (exp)->common.code) != ADDR_EXPR)
    return 0;
  exp = get_base_address (((exp)->exp.operands[0]));
  if (!exp)
    return 0;
  if (((enum tree_code) (exp)->common.code) == STRING_CST
      || ((enum tree_code) (exp)->common.code) == CONSTRUCTOR
      || (((enum tree_code) (exp)->common.code) == VAR_DECL && ((exp)->common.static_flag)))
    return decl_readonly_section (exp, 0);
  else
    return 0;
}
tree
simplify_builtin (tree exp, int ignore)
{
  tree fndecl = ((((exp)->exp.operands[0]))->exp.operands[0]);
  tree arglist = ((exp)->exp.operands[1]);
  enum built_in_function fcode = ((fndecl)->decl.u1.f);
  tree val;
  switch (fcode)
    {
    case BUILT_IN_FPUTS:
      val = simplify_builtin_fputs (arglist, ignore, 0, (tree) ((void *)0));
      break;
    case BUILT_IN_FPUTS_UNLOCKED:
      val = simplify_builtin_fputs (arglist, ignore, 1, (tree) ((void *)0));
      break;
    case BUILT_IN_STRSTR:
      val = simplify_builtin_strstr (arglist);
      break;
    case BUILT_IN_STRCAT:
      val = simplify_builtin_strcat (arglist);
      break;
    case BUILT_IN_STRNCAT:
      val = simplify_builtin_strncat (arglist);
      break;
    case BUILT_IN_STRSPN:
      val = simplify_builtin_strspn (arglist);
      break;
    case BUILT_IN_STRCSPN:
      val = simplify_builtin_strcspn (arglist);
      break;
    case BUILT_IN_STRCHR:
    case BUILT_IN_INDEX:
      val = simplify_builtin_strchr (arglist);
      break;
    case BUILT_IN_STRRCHR:
    case BUILT_IN_RINDEX:
      val = simplify_builtin_strrchr (arglist);
      break;
    case BUILT_IN_STRCPY:
      val = simplify_builtin_strcpy (arglist, (tree) ((void *)0));
      break;
    case BUILT_IN_STRNCPY:
      val = simplify_builtin_strncpy (arglist, (tree) ((void *)0));
      break;
    case BUILT_IN_STRCMP:
      val = simplify_builtin_strcmp (arglist);
      break;
    case BUILT_IN_STRNCMP:
      val = simplify_builtin_strncmp (arglist);
      break;
    case BUILT_IN_STRPBRK:
      val = simplify_builtin_strpbrk (arglist);
      break;
    case BUILT_IN_BCMP:
    case BUILT_IN_MEMCMP:
      val = simplify_builtin_memcmp (arglist);
      break;
    case BUILT_IN_VA_START:
      simplify_builtin_va_start (arglist);
      val = (tree) ((void *)0);
      break;
    case BUILT_IN_SPRINTF:
      val = simplify_builtin_sprintf (arglist, ignore);
      break;
    case BUILT_IN_CONSTANT_P:
      val = fold_builtin_constant_p (arglist);
      if (!val && !optimize)
 val = global_trees[TI_INTEGER_ZERO];
      break;
    default:
      val = (tree) ((void *)0);
      break;
    }
  if (val)
    val = fold_convert (((exp)->common.type), val);
  return val;
}
static tree
simplify_builtin_strstr (tree arglist)
{
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      tree fn;
      const char *p1, *p2;
      p2 = c_getstr (s2);
      if (p2 == ((void *)0))
 return 0;
      p1 = c_getstr (s1);
      if (p1 != ((void *)0))
 {
   const char *r = strstr (p1, p2);
   if (r == ((void *)0))
     return fold_convert (((s1)->common.type), global_trees[TI_INTEGER_ZERO]);
   return fold (build2_stat (PLUS_EXPR,((s1)->common.type),s1,fold_convert (((s1)->common.type), size_int_wide ((long) (r - p1), SSIZETYPE)) )
                           );
 }
      if (p2[0] == '\0')
 return s1;
      if (p2[1] != '\0')
 return 0;
      fn = implicit_built_in_decls[BUILT_IN_STRCHR];
      if (!fn)
 return 0;
      arglist = build_tree_list_stat((tree) ((void *)0),build_int_2_wide ((unsigned long) (p2[0]), (long) (0)) );
      arglist = tree_cons_stat ((tree) ((void *)0),s1,arglist );
      return build_function_call_expr (fn, arglist);
    }
}
static tree
simplify_builtin_strchr (tree arglist)
{
  if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      const char *p1;
      if (((enum tree_code) (s2)->common.code) != INTEGER_CST)
 return 0;
      p1 = c_getstr (s1);
      if (p1 != ((void *)0))
 {
   char c;
   const char *r;
   if (target_char_cast (s2, &c))
     return 0;
   r = strchr (p1, c);
   if (r == ((void *)0))
     return fold_convert (((s1)->common.type), global_trees[TI_INTEGER_ZERO]);
   return fold (build2_stat (PLUS_EXPR,((s1)->common.type),s1,fold_convert (((s1)->common.type), size_int_wide ((long) (r - p1), SSIZETYPE)) )
                           );
 }
      return 0;
    }
}
static tree
simplify_builtin_strrchr (tree arglist)
{
  if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      tree fn;
      const char *p1;
      if (((enum tree_code) (s2)->common.code) != INTEGER_CST)
 return 0;
      p1 = c_getstr (s1);
      if (p1 != ((void *)0))
 {
   char c;
   const char *r;
   if (target_char_cast (s2, &c))
     return 0;
   r = strrchr (p1, c);
   if (r == ((void *)0))
     return fold_convert (((s1)->common.type), global_trees[TI_INTEGER_ZERO]);
   return fold (build2_stat (PLUS_EXPR,((s1)->common.type),s1,fold_convert (((s1)->common.type), size_int_wide ((long) (r - p1), SSIZETYPE)) )
                           );
 }
      if (! integer_zerop (s2))
 return 0;
      fn = implicit_built_in_decls[BUILT_IN_STRCHR];
      if (!fn)
 return 0;
      return build_function_call_expr (fn, arglist);
    }
}
static tree
simplify_builtin_strpbrk (tree arglist)
{
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      tree fn;
      const char *p1, *p2;
      p2 = c_getstr (s2);
      if (p2 == ((void *)0))
 return 0;
      p1 = c_getstr (s1);
      if (p1 != ((void *)0))
 {
   const char *r = strpbrk (p1, p2);
   if (r == ((void *)0))
     return fold_convert (((s1)->common.type), global_trees[TI_INTEGER_ZERO]);
   return fold (build2_stat (PLUS_EXPR,((s1)->common.type),s1,fold_convert (((s1)->common.type), size_int_wide ((long) (r - p1), SSIZETYPE)) )
                           );
 }
      if (p2[0] == '\0')
 return omit_one_operand (((s1)->common.type), global_trees[TI_INTEGER_ZERO], s1);
      if (p2[1] != '\0')
 return 0;
      fn = implicit_built_in_decls[BUILT_IN_STRCHR];
      if (!fn)
 return 0;
      arglist =
 build_tree_list_stat((tree) ((void *)0),build_int_2_wide ((unsigned long) (p2[0]), (long) (0)) );
      arglist = tree_cons_stat ((tree) ((void *)0),s1,arglist );
      return build_function_call_expr (fn, arglist);
    }
}
tree
simplify_builtin_strcpy (tree arglist, tree len)
{
  tree fn, src, dst;
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  fn = implicit_built_in_decls[BUILT_IN_MEMCPY];
  if (!fn)
    return 0;
  src = ((((arglist)->common.chain))->list.value1);
  dst = ((arglist)->list.value1);
  if (!len)
    {
      len = c_strlen (src, 1);
      if (!len || ((len)->common.side_effects_flag))
 return 0;
    }
  len = size_binop (PLUS_EXPR, len, size_int_wide ((long) (1), SSIZETYPE));
  arglist = build_tree_list_stat((tree) ((void *)0),len );
  arglist = tree_cons_stat ((tree) ((void *)0),src,arglist );
  arglist = tree_cons_stat ((tree) ((void *)0),dst,arglist );
  return build_function_call_expr (fn, arglist);
}
tree
simplify_builtin_strncpy (tree arglist, tree slen)
{
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree len = ((((((arglist)->common.chain))->common.chain))->list.value1);
      tree fn;
      if (((enum tree_code) (len)->common.code) != INTEGER_CST)
 return 0;
      if (integer_zerop (len))
 return omit_one_operand (((((arglist)->list.value1))->common.type),
     ((arglist)->list.value1),
     ((((arglist)->common.chain))->list.value1));
      if (!slen)
        slen = c_strlen (((((arglist)->common.chain))->list.value1), 0);
      if (slen == 0 || ((enum tree_code) (slen)->common.code) != INTEGER_CST)
 return 0;
      slen = size_binop (PLUS_EXPR, slen, size_int_wide ((long) (1), SSIZETYPE));
      if (tree_int_cst_lt (slen, len))
 return 0;
      fn = implicit_built_in_decls[BUILT_IN_MEMCPY];
      if (!fn)
 return 0;
      return build_function_call_expr (fn, arglist);
    }
}
static tree
simplify_builtin_memcmp (tree arglist)
{
  tree arg1, arg2, len;
  const char *p1, *p2;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  arg1 = ((arglist)->list.value1);
  arg2 = ((((arglist)->common.chain))->list.value1);
  len = ((((((arglist)->common.chain))->common.chain))->list.value1);
  if (host_integerp (len, 1) && tree_low_cst (len, 1) == 0)
    return omit_two_operands (integer_types[itk_int], global_trees[TI_INTEGER_ZERO],
         arg1, arg2);
  p1 = c_getstr (arg1);
  p2 = c_getstr (arg2);
  if (host_integerp (len, 1) && p1 && p2
      && compare_tree_int (len, strlen (p1) + 1) <= 0
      && compare_tree_int (len, strlen (p2) + 1) <= 0)
    {
      const int r = memcmp (p1, p2, tree_low_cst (len, 1));
      return (r < 0
       ? global_trees[TI_INTEGER_MINUS_ONE]
       : (r > 0 ? global_trees[TI_INTEGER_ONE] : global_trees[TI_INTEGER_ZERO]));
    }
  if (host_integerp (len, 1) && tree_low_cst (len, 1) == 1)
    {
      tree cst_uchar_node = build_qualified_type ((integer_types[itk_unsigned_char]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0));
      tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
      tree ind1 =
      fold (build1_stat (CONVERT_EXPR,integer_types[itk_int],build1_stat (INDIRECT_REF,cst_uchar_node,build1_stat (NOP_EXPR,cst_uchar_ptr_node,arg1 ) ) )
                                                    );
      tree ind2 =
      fold (build1_stat (CONVERT_EXPR,integer_types[itk_int],build1_stat (INDIRECT_REF,cst_uchar_node,build1_stat (NOP_EXPR,cst_uchar_ptr_node,arg2 ) ) )
                                                    );
      return fold (build2_stat (MINUS_EXPR,integer_types[itk_int],ind1,ind2 ));
    }
  return 0;
}
static tree
simplify_builtin_strcmp (tree arglist)
{
  tree arg1, arg2;
  const char *p1, *p2;
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  arg1 = ((arglist)->list.value1);
  arg2 = ((((arglist)->common.chain))->list.value1);
  if (operand_equal_p (arg1, arg2, 0))
    return global_trees[TI_INTEGER_ZERO];
  p1 = c_getstr (arg1);
  p2 = c_getstr (arg2);
  if (p1 && p2)
    {
      const int i = strcmp (p1, p2);
      return (i < 0
       ? global_trees[TI_INTEGER_MINUS_ONE]
       : (i > 0 ? global_trees[TI_INTEGER_ONE] : global_trees[TI_INTEGER_ZERO]));
    }
  if ((p1 && *p1 == '\0') || (p2 && *p2 == '\0'))
    {
      tree cst_uchar_node = build_qualified_type ((integer_types[itk_unsigned_char]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0));
      tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
      tree ind1 =
 fold (build1_stat (CONVERT_EXPR,integer_types[itk_int],build1_stat (INDIRECT_REF,cst_uchar_node,build1_stat (NOP_EXPR,cst_uchar_ptr_node,arg1 ) ) )
                                                      );
      tree ind2 =
 fold (build1_stat (CONVERT_EXPR,integer_types[itk_int],build1_stat (INDIRECT_REF,cst_uchar_node,build1_stat (NOP_EXPR,cst_uchar_ptr_node,arg2 ) ) )
                                                      );
      return fold (build2_stat (MINUS_EXPR,integer_types[itk_int],ind1,ind2 ));
    }
  return 0;
}
static tree
simplify_builtin_strncmp (tree arglist)
{
  tree arg1, arg2, arg3;
  const char *p1, *p2;
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  arg1 = ((arglist)->list.value1);
  arg2 = ((((arglist)->common.chain))->list.value1);
  arg3 = ((((((arglist)->common.chain))->common.chain))->list.value1);
  if (integer_zerop (arg3))
    return omit_two_operands (integer_types[itk_int], global_trees[TI_INTEGER_ZERO],
         arg1, arg2);
  if (operand_equal_p (arg1, arg2, 0))
    return omit_one_operand (integer_types[itk_int], global_trees[TI_INTEGER_ZERO], arg3);
  p1 = c_getstr (arg1);
  p2 = c_getstr (arg2);
  if (host_integerp (arg3, 1) && p1 && p2)
    {
      const int r = strncmp (p1, p2, tree_low_cst (arg3, 1));
      return (r < 0
       ? global_trees[TI_INTEGER_MINUS_ONE]
       : (r > 0 ? global_trees[TI_INTEGER_ONE] : global_trees[TI_INTEGER_ZERO]));
    }
  if (host_integerp (arg3, 1)
      && (tree_low_cst (arg3, 1) == 1
   || (tree_low_cst (arg3, 1) > 1
       && ((p1 && *p1 == '\0') || (p2 && *p2 == '\0')))))
    {
      tree cst_uchar_node = build_qualified_type ((integer_types[itk_unsigned_char]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0));
      tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
      tree ind1 =
 fold (build1_stat (CONVERT_EXPR,integer_types[itk_int],build1_stat (INDIRECT_REF,cst_uchar_node,build1_stat (NOP_EXPR,cst_uchar_ptr_node,arg1 ) ) )
                                                      );
      tree ind2 =
 fold (build1_stat (CONVERT_EXPR,integer_types[itk_int],build1_stat (INDIRECT_REF,cst_uchar_node,build1_stat (NOP_EXPR,cst_uchar_ptr_node,arg2 ) ) )
                                                      );
      return fold (build2_stat (MINUS_EXPR,integer_types[itk_int],ind1,ind2 ));
    }
  return 0;
}
static tree
simplify_builtin_strcat (tree arglist)
{
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree dst = ((arglist)->list.value1),
 src = ((((arglist)->common.chain))->list.value1);
      const char *p = c_getstr (src);
      if (p && *p == '\0')
 return dst;
      return 0;
    }
}
static tree
simplify_builtin_strncat (tree arglist)
{
  if (!validate_arglist (arglist,
    POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree dst = ((arglist)->list.value1);
      tree src = ((((arglist)->common.chain))->list.value1);
      tree len = ((((((arglist)->common.chain))->common.chain))->list.value1);
      const char *p = c_getstr (src);
      if (integer_zerop (len) || (p && *p == '\0'))
        return omit_two_operands (((dst)->common.type), dst, src, len);
      if (((enum tree_code) (len)->common.code) == INTEGER_CST && p
   && compare_tree_int (len, strlen (p)) >= 0)
 {
   tree newarglist
     = tree_cons_stat ((tree) ((void *)0),dst,build_tree_list_stat((tree) ((void *)0),src ) );
   tree fn = implicit_built_in_decls[BUILT_IN_STRCAT];
   if (!fn)
     return 0;
   return build_function_call_expr (fn, newarglist);
 }
      return 0;
    }
}
static tree
simplify_builtin_strspn (tree arglist)
{
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      const char *p1 = c_getstr (s1), *p2 = c_getstr (s2);
      if (p1 && p2)
 {
   const size_t r = strspn (p1, p2);
   return size_int_wide ((long) (r), SIZETYPE);
 }
      if ((p1 && *p1 == '\0') || (p2 && *p2 == '\0'))
 return omit_two_operands (integer_types[itk_int], global_trees[TI_INTEGER_ZERO],
      s1, s2);
      return 0;
    }
}
static tree
simplify_builtin_strcspn (tree arglist)
{
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  else
    {
      tree s1 = ((arglist)->list.value1), s2 = ((((arglist)->common.chain))->list.value1);
      const char *p1 = c_getstr (s1), *p2 = c_getstr (s2);
      if (p1 && p2)
 {
   const size_t r = strcspn (p1, p2);
   return size_int_wide ((long) (r), SIZETYPE);
 }
      if (p1 && *p1 == '\0')
 {
   return omit_one_operand (integer_types[itk_int],
       global_trees[TI_INTEGER_ZERO], s2);
 }
      if (p2 && *p2 == '\0')
 {
   tree newarglist = build_tree_list_stat((tree) ((void *)0),s1 ),
     fn = implicit_built_in_decls[BUILT_IN_STRLEN];
   if (!fn)
     return 0;
   return build_function_call_expr (fn, newarglist);
 }
      return 0;
    }
}
tree
simplify_builtin_fputs (tree arglist, int ignore, int unlocked, tree known_len)
{
  tree len, fn;
  tree fn_fputc = unlocked ? implicit_built_in_decls[BUILT_IN_FPUTC_UNLOCKED]
    : implicit_built_in_decls[BUILT_IN_FPUTC];
  tree fn_fwrite = unlocked ? implicit_built_in_decls[BUILT_IN_FWRITE_UNLOCKED]
    : implicit_built_in_decls[BUILT_IN_FWRITE];
  if (!ignore || !fn_fputc || !fn_fwrite)
    return 0;
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
    return 0;
  len = (known_len) ? known_len : c_strlen (((arglist)->list.value1), 0);
  if (!len
      || ((enum tree_code) (len)->common.code) != INTEGER_CST)
    return 0;
  switch (compare_tree_int (len, 1))
    {
    case -1:
      return omit_one_operand (integer_types[itk_int], global_trees[TI_INTEGER_ZERO],
          ((((arglist)->common.chain))->list.value1));
    case 0:
      {
 const char *p = c_getstr (((arglist)->list.value1));
 if (p != ((void *)0))
   {
     arglist =
       build_tree_list_stat((tree) ((void *)0),((((arglist)->common.chain))->list.value1) );
     arglist =
       tree_cons_stat ((tree) ((void *)0),build_int_2_wide ((unsigned long) (p[0]), (long) (0)),arglist );
     fn = fn_fputc;
     break;
   }
      }
    case 1:
      {
 tree string_arg;
 if (optimize_size)
   return 0;
 string_arg = ((arglist)->list.value1);
 arglist = build_tree_list_stat((tree) ((void *)0),((((arglist)->common.chain))->list.value1) );
 arglist = tree_cons_stat ((tree) ((void *)0),len,arglist );
 arglist = tree_cons_stat ((tree) ((void *)0),global_trees[TI_SIZE_ONE],arglist );
 arglist = tree_cons_stat ((tree) ((void *)0),string_arg,arglist );
 fn = fn_fwrite;
 break;
      }
    default:
      fancy_abort ("gcc.c", 386354, "?");
    }
  return build_function_call_expr (fn, arglist);
}
static void
simplify_builtin_va_start (tree arglist)
{
  tree chain = ((arglist)->common.chain);
  if (((chain)->common.chain))
    error ("too many arguments to function `va_start'");
  simplify_builtin_next_arg (chain);
}
static void
simplify_builtin_next_arg (tree arglist)
{
  tree fntype = ((current_function_decl)->common.type);
  if (((fntype)->type.value1s) == 0
      || (((tree_last (((fntype)->type.value1s)))->list.value1)
   == global_trees[TI_VOID_TYPE]))
    error ("`va_start' used in function with fixed args");
  else if (arglist)
    {
      tree last_parm = tree_last (((current_function_decl)->decl.arguments));
      tree arg = ((arglist)->list.value1);
      while (((enum tree_code) (arg)->common.code) == NOP_EXPR
      || ((enum tree_code) (arg)->common.code) == CONVERT_EXPR
      || ((enum tree_code) (arg)->common.code) == NON_LVALUE_EXPR
      || ((enum tree_code) (arg)->common.code) == INDIRECT_REF)
 arg = ((arg)->exp.operands[0]);
      if (arg != last_parm)
 warning ("second parameter of `va_start' not last named argument");
      ((arglist)->list.value1) = arg;
    }
  else
    warning ("`__builtin_next_arg' called without an argument");
}
static tree
simplify_builtin_sprintf (tree arglist, int ignored)
{
  tree call, retval, dest, fmt;
  const char *fmt_str = ((void *)0);
  if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)
      && !validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, POINTER_TYPE,
                     VOID_TYPE))
    return (tree) ((void *)0);
  dest = ((arglist)->list.value1);
  fmt = ((((arglist)->common.chain))->list.value1);
  fmt_str = c_getstr (fmt);
  if (fmt_str == ((void *)0))
    return (tree) ((void *)0);
  call = (tree) ((void *)0);
  retval = (tree) ((void *)0);
  if (strchr (fmt_str, '%') == ((void *)0))
    {
      tree fn = implicit_built_in_decls[BUILT_IN_STRCPY];
      if (!fn)
 return (tree) ((void *)0);
      arglist = build_tree_list_stat((tree) ((void *)0),fmt );
      arglist = tree_cons_stat ((tree) ((void *)0),dest,arglist );
      call = build_function_call_expr (fn, arglist);
      if (!ignored)
 retval = build_int_2_wide ((unsigned long) (strlen (fmt_str)), (long) (0));
    }
  else if (fmt_str && strcmp (fmt_str, "%s") == 0)
    {
      tree fn, orig;
      fn = implicit_built_in_decls[BUILT_IN_STRCPY];
      if (!fn)
 return (tree) ((void *)0);
      orig = ((((((arglist)->common.chain))->common.chain))->list.value1);
      arglist = build_tree_list_stat((tree) ((void *)0),orig );
      arglist = tree_cons_stat ((tree) ((void *)0),dest,arglist );
      if (!ignored)
 {
   retval = c_strlen (orig, 1);
   if (!retval || ((enum tree_code) (retval)->common.code) != INTEGER_CST)
     return (tree) ((void *)0);
 }
      call = build_function_call_expr (fn, arglist);
    }
  if (call && retval)
    {
      retval = convert
 (((((implicit_built_in_decls[BUILT_IN_SPRINTF])->common.type))->common.type),
  retval);
      return build2_stat (COMPOUND_EXPR,((retval)->common.type),call,retval );
    }
  else
    return call;
}
static enum machine_mode
  regno_save_mode[53][16 / 4 + 1];
static rtx
  regno_save_mem[53][16 / 4 + 1];
static int
  reg_save_code[53][MAX_MACHINE_MODE];
static int
  reg_restore_code[53][MAX_MACHINE_MODE];
static HARD_REG_SET hard_regs_saved;
static int n_regs_saved;
static HARD_REG_SET referenced_regs;
static HARD_REG_SET this_insn_sets;
static void mark_set_regs_cs (rtx, rtx, void *);
static void mark_referenced_regs (rtx);
static int insert_save (struct insn_chain *, int, int, HARD_REG_SET *,
   enum machine_mode *);
static int insert_restore (struct insn_chain *, int, int, int,
      enum machine_mode *);
static struct insn_chain *insert_one_insn (struct insn_chain *, int, int,
        rtx);
static void add_stored_regs (rtx, rtx, void *);
void
init_caller_save (void)
{
  rtx addr_reg;
  int offset;
  rtx address;
  int i, j;
  enum machine_mode mode;
  rtx savepat, restpat;
  rtx test_reg, test_mem;
  rtx saveinsn, restinsn;
  for (i = 0; i < 53; i++)
    {
      if (call_used_regs[i] && ! call_fixed_regs[i])
 {
   for (j = 1; j <= (16 / (0 ? 8 : 4)); j++)
     {
       regno_save_mode[i][j] = (((i) == 17 || (i) == 18) ? VOIDmode : (VOIDmode) == VOIDmode && (j) != 1 ? VOIDmode : (VOIDmode) == VOIDmode ? choose_hard_reg_mode ((i), (j), 0) : (VOIDmode) == HImode && !(x86_partial_reg_stall & (1 << ix86_tune)) ? SImode : (VOIDmode) == QImode && (i) >= 4 && !0 ? SImode : (VOIDmode))
                    ;
       if (regno_save_mode[i][j] == VOIDmode && j == 1)
  {
    call_fixed_regs[i] = 1;
    ((call_fixed_reg_set)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
  }
     }
 }
      else
 regno_save_mode[i][1] = VOIDmode;
    }
  for (i = 0; i < 53; i++)
    if ((!!((reg_class_contents [(int) GENERAL_REGS])[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
                                                          )
      break;
  if (i == 53)
    fancy_abort ("gcc.c", 386633, "?");
  addr_reg = gen_rtx_REG ((0 ? DImode : SImode), i);
  for (offset = 1 << ((8 * 4) / 2); offset; offset >>= 1)
    {
      address = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (addr_reg), (gen_rtx_CONST_INT (VOIDmode, (long) (offset))));
      for (i = 0; i < 53; i++)
 if (regno_save_mode[i][1] != VOIDmode
   && ! strict_memory_address_p (regno_save_mode[i][1], address))
   break;
      if (i == 53)
 break;
    }
  if (offset == 0)
    address = addr_reg;
  test_reg = gen_rtx_REG (VOIDmode, 0);
  test_mem = gen_rtx_MEM (VOIDmode, address);
  savepat = gen_rtx_fmt_ee (SET, (VOIDmode), (test_mem), (test_reg));
  restpat = gen_rtx_fmt_ee (SET, (VOIDmode), (test_reg), (test_mem));
  saveinsn = gen_rtx_fmt_iuuBieiee (INSN, (VOIDmode), (0), (0), (0), (0), (0), (savepat), (-1), (0), (0));
  restinsn = gen_rtx_fmt_iuuBieiee (INSN, (VOIDmode), (0), (0), (0), (0), (0), (restpat), (-1), (0), (0));
  for (i = 0; i < 53; i++)
    for (mode = 0 ; mode < MAX_MACHINE_MODE; mode++)
      if (ix86_hard_regno_mode_ok ((i), (mode)))
        {
   int ok;
   (((test_reg)->u.fld[0]).rtuint) = i;
   ((test_reg)->mode = (mode));
   ((test_mem)->mode = (mode));
   (((saveinsn)->u.fld[6]).rtint) = -1;
   (((restinsn)->u.fld[6]).rtint) = -1;
   reg_save_code[i][mode] = ((((saveinsn)->u.fld[6]).rtint) >= 0 ? (((saveinsn)->u.fld[6]).rtint) : recog_memoized_1 (saveinsn));
   reg_restore_code[i][mode] = ((((restinsn)->u.fld[6]).rtint) >= 0 ? (((restinsn)->u.fld[6]).rtint) : recog_memoized_1 (restinsn));
   ok = (reg_save_code[i][mode] != -1
  && reg_restore_code[i][mode] != -1);
   if (ok)
     {
       extract_insn (saveinsn);
       ok = constrain_operands (1);
       extract_insn (restinsn);
       ok &= constrain_operands (1);
     }
   if (! ok)
     {
       reg_save_code[i][mode] = -1;
       reg_restore_code[i][mode] = -1;
     }
        }
      else
 {
   reg_save_code[i][mode] = -1;
   reg_restore_code[i][mode] = -1;
 }
  for (i = 0; i < 53; i++)
    for (j = 1; j <= (16 / (0 ? 8 : 4)); j++)
      if (reg_save_code [i][regno_save_mode[i][j]] == -1)
 {
   regno_save_mode[i][j] = VOIDmode;
   if (j == 1)
     {
       call_fixed_regs[i] = 1;
       ((call_fixed_reg_set)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
     }
 }
}
void
init_save_areas (void)
{
  int i, j;
  for (i = 0; i < 53; i++)
    for (j = 1; j <= (16 / (0 ? 8 : 4)); j++)
      regno_save_mem[i][j] = 0;
}
void
setup_save_areas (void)
{
  int i, j, k;
  unsigned int r;
  HARD_REG_SET hard_regs_used;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (hard_regs_used); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (i = 53; i < max_regno; i++)
    if (reg_renumber[i] >= 0 && (((reg_n_info)->data.reg[i])->calls_crossed) > 0)
      {
 unsigned int regno = reg_renumber[i];
 unsigned int endregno
   = regno + hard_regno_nregs[regno][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode)];
 for (r = regno; r < endregno; r++)
   if (call_used_regs[r])
     ((hard_regs_used)[(r) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((r) % ((unsigned) (8 * 4))));
      }
  for (i = 0; i < 53; i++)
    for (j = (16 / (0 ? 8 : 4)); j > 0; j--)
      {
 int do_save = 1;
 if (regno_save_mode[i][j] == VOIDmode || regno_save_mem[i][1] != 0)
   continue;
 for (k = 0; k < j; k++)
   if (regno_save_mem[i + k][1])
     {
       do_save = 0;
       break;
     }
 if (! do_save)
   continue;
 for (k = 0; k < j; k++)
   if (! (!!((hard_regs_used)[(i + k) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i + k) % ((unsigned) (8 * 4)))))))
     {
       do_save = 0;
       break;
     }
 if (! do_save)
   continue;
 regno_save_mem[i][j]
   = assign_stack_local (regno_save_mode[i][j],
    ((unsigned short) mode_size[regno_save_mode[i][j]]), 0);
 for (k = 0; k < j; k++)
   regno_save_mem[i + k][1]
     = adjust_address_1 (regno_save_mem[i][j], regno_save_mode[i + k][1], k * (0 ? 8 : 4), 0, 1)
                        ;
      }
  for (i = 0; i < 53; i++)
    for (j = (16 / (0 ? 8 : 4)); j > 0; j--)
      if (regno_save_mem[i][j] != 0)
 set_mem_alias_set (regno_save_mem[i][j], get_frame_alias_set ());
}
void
save_call_clobbered_regs (void)
{
  struct insn_chain *chain, *next;
  enum machine_mode save_mode [53];
  do { HARD_REG_ELT_TYPE *scan_tp_ = (hard_regs_saved); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  n_regs_saved = 0;
  for (chain = reload_insn_chain; chain != 0; chain = next)
    {
      rtx insn = chain->insn;
      enum rtx_code code = ((enum rtx_code) (insn)->code);
      next = chain->next;
      if (chain->is_caller_save_insn)
 fancy_abort ("gcc.c", 386854, "?");
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   if (n_regs_saved)
     {
       int regno;
       if (code == JUMP_INSN)
  do { HARD_REG_ELT_TYPE *scan_tp_ = (referenced_regs), *scan_fp_ = (hard_regs_saved); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
       else
  {
    do { HARD_REG_ELT_TYPE *scan_tp_ = (referenced_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
    mark_referenced_regs ((((insn)->u.fld[5]).rtx1));
    do { HARD_REG_ELT_TYPE *scan_tp_ = (referenced_regs), *scan_fp_ = (hard_regs_saved); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0);
  }
       for (regno = 0; regno < 53; regno++)
  if ((!!((referenced_regs)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
    regno += insert_restore (chain, 1, regno, (16 / (0 ? 8 : 4)), save_mode);
     }
   if (code == CALL_INSN && ! find_reg_note (insn, REG_NORETURN, ((void *)0)))
     {
       int regno;
       HARD_REG_SET hard_regs_to_save;
       do { do { HARD_REG_ELT_TYPE *scan_tp_ = (hard_regs_to_save); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&hard_regs_to_save, &chain->live_throughout); } while (0)
                                   ;
       for (regno = 0; regno < 53; regno++)
  if ((!!((hard_regs_to_save)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
    save_mode [regno] = regno_save_mode [regno][1];
  else
    save_mode [regno] = VOIDmode;
       do { bitmap_element *ptr_ = (&chain->live_throughout)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (regno) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { int r = reg_renumber[regno]; int nregs; if (r >= 0) { enum machine_mode mode; nregs = hard_regno_nregs[r][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[regno])->mode)]; mode = (((r) == 17 || (r) == 18) ? VOIDmode : (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[regno])->mode)) == VOIDmode && (nregs) != 1 ? VOIDmode : (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[regno])->mode)) == VOIDmode ? choose_hard_reg_mode ((r), (nregs), 0) : (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[regno])->mode)) == HImode && !(x86_partial_reg_stall & (1 << ix86_tune)) ? SImode : (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[regno])->mode)) == QImode && (r) >= 4 && !0 ? SImode : (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[regno])->mode))); if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) > ((unsigned short) (((unsigned short) mode_size[save_mode[r]]) * 8))) save_mode[r] = mode; while (nregs-- > 0) ((hard_regs_to_save)[(r + nregs) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((r + nregs) % ((unsigned) (8 * 4)))); } else fancy_abort ("gcc.c", 386919, "?"); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
     ;
       do { HARD_REG_ELT_TYPE *scan_tp_ = (this_insn_sets); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
       note_stores ((((insn)->u.fld[5]).rtx1), mark_set_regs_cs, ((void *)0));
       do { HARD_REG_ELT_TYPE *scan_tp_ = (hard_regs_to_save), *scan_fp_ = (call_fixed_reg_set); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
       do { HARD_REG_ELT_TYPE *scan_tp_ = (hard_regs_to_save), *scan_fp_ = (this_insn_sets); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
       do { HARD_REG_ELT_TYPE *scan_tp_ = (hard_regs_to_save), *scan_fp_ = (hard_regs_saved); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
       do { HARD_REG_ELT_TYPE *scan_tp_ = (hard_regs_to_save), *scan_fp_ = (call_used_reg_set); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0);
       for (regno = 0; regno < 53; regno++)
  if ((!!((hard_regs_to_save)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
    regno += insert_save (chain, 1, regno, &hard_regs_to_save, save_mode);
       n_regs_saved = 0;
       for (regno = 0; regno < 53; regno++)
  if ((!!((hard_regs_saved)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
    n_regs_saved++;
     }
 }
      if (chain->next == 0 || chain->next->block > chain->block)
 {
   int regno;
   if (n_regs_saved)
     for (regno = 0; regno < 53; regno++)
       if ((!!((hard_regs_saved)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
  regno += insert_restore (chain, ((enum rtx_code) (insn)->code) == JUMP_INSN,
      regno, (16 / (0 ? 8 : 4)), save_mode);
 }
    }
}
static void
mark_set_regs_cs (rtx reg, rtx setter ,
        void *data )
{
  int regno, endregno, i;
  enum machine_mode mode = ((enum machine_mode) (reg)->mode);
  if (((enum rtx_code) (reg)->code) == SUBREG)
    {
      rtx inner = (((reg)->u.fld[0]).rtx1);
      if (!(((enum rtx_code) (inner)->code) == REG) || (((inner)->u.fld[0]).rtuint) >= 53)
 return;
      regno = subreg_hard_regno (reg, 1);
    }
  else if ((((enum rtx_code) (reg)->code) == REG)
    && (((reg)->u.fld[0]).rtuint) < 53)
    regno = (((reg)->u.fld[0]).rtuint);
  else
    return;
  endregno = regno + hard_regno_nregs[regno][mode];
  for (i = regno; i < endregno; i++)
    ((this_insn_sets)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
}
static void
add_stored_regs (rtx reg, rtx setter, void *data)
{
  int regno, endregno, i;
  enum machine_mode mode = ((enum machine_mode) (reg)->mode);
  int offset = 0;
  if (((enum rtx_code) (setter)->code) == CLOBBER)
    return;
  if (((enum rtx_code) (reg)->code) == SUBREG && (((enum rtx_code) ((((reg)->u.fld[0]).rtx1))->code) == REG))
    {
      offset = subreg_regno_offset (((((((reg)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
        ((enum machine_mode) ((((reg)->u.fld[0]).rtx1))->mode),
        (((reg)->u.fld[1]).rtuint),
        ((enum machine_mode) (reg)->mode));
      reg = (((reg)->u.fld[0]).rtx1);
    }
  if (!(((enum rtx_code) (reg)->code) == REG) || (((reg)->u.fld[0]).rtuint) >= 53)
    return;
  regno = (((reg)->u.fld[0]).rtuint) + offset;
  endregno = regno + hard_regno_nregs[regno][mode];
  for (i = regno; i < endregno; i++)
    bitmap_set_bit ((regset) data, i);
}
static void
mark_referenced_regs (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt;
  int i, j;
  if (code == SET)
    mark_referenced_regs ((((x)->u.fld[1]).rtx1));
  if (code == SET || code == CLOBBER)
    {
      x = (((x)->u.fld[0]).rtx1);
      code = ((enum rtx_code) (x)->code);
      if ((code == REG && (((x)->u.fld[0]).rtuint) < 53)
   || code == PC || code == CC0
   || (code == SUBREG && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
       && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
       && ((((unsigned short) mode_size[((enum machine_mode) (x)->mode)])
     >= ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]))
    || (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)])
        <= (0 ? 8 : 4)))))
 return;
    }
  if (code == MEM || code == SUBREG)
    {
      x = (((x)->u.fld[0]).rtx1);
      code = ((enum rtx_code) (x)->code);
    }
  if (code == REG)
    {
      int regno = (((x)->u.fld[0]).rtuint);
      int hardregno = (regno < 53 ? regno
         : reg_renumber[regno]);
      if (hardregno >= 0)
 {
   int nregs = hard_regno_nregs[hardregno][((enum machine_mode) (x)->mode)];
   while (nregs-- > 0)
     ((referenced_regs)[(hardregno + nregs) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((hardregno + nregs) % ((unsigned) (8 * 4))));
 }
      else if (reg_equiv_mem[regno] != 0)
 mark_referenced_regs ((((reg_equiv_mem[regno])->u.fld[0]).rtx1));
      else if (reg_equiv_address[regno] != 0)
 mark_referenced_regs (reg_equiv_address[regno]);
      return;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 mark_referenced_regs ((((x)->u.fld[i]).rtx1));
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   mark_referenced_regs ((((((x)->u.fld[i]).rtvec1))->elem[j]));
    }
}
static int
insert_restore (struct insn_chain *chain, int before_p, int regno,
  int maxrestore, enum machine_mode *save_mode)
{
  int i, k;
  rtx pat = (rtx) 0;
  int code;
  unsigned int numregs = 0;
  struct insn_chain *new;
  rtx mem;
  if (regno_save_mem[regno][1] == 0)
    fancy_abort ("gcc.c", 387124, "?");
  for (i = maxrestore; i > 0; i--)
    {
      int j;
      int ok = 1;
      if (regno_save_mem[regno][i] == 0)
 continue;
      for (j = 0; j < i; j++)
 if (! (!!((hard_regs_saved)[(regno + j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + j) % ((unsigned) (8 * 4)))))))
   {
     ok = 0;
     break;
   }
      if (! ok)
 continue;
      numregs = i;
      break;
    }
  mem = regno_save_mem [regno][numregs];
  if (save_mode [regno] != VOIDmode
      && save_mode [regno] != ((enum machine_mode) (mem)->mode)
      && numregs == (unsigned int) hard_regno_nregs[regno][save_mode [regno]])
    mem = adjust_address_1 (mem, save_mode[regno], 0, 1, 1);
  else
    mem = copy_rtx (mem);
  pat = gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (((enum machine_mode) (mem)->mode), regno)), (mem))
                  ;
  code = reg_restore_code[regno][((enum machine_mode) (mem)->mode)];
  new = insert_one_insn (chain, before_p, code, pat);
  for (k = 0; k < i; k++)
    {
      ((hard_regs_saved)[(regno + k) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((regno + k) % ((unsigned) (8 * 4)))));
      bitmap_set_bit (&new->dead_or_set, regno + k);
      n_regs_saved--;
    }
  return numregs - 1;
}
static int
insert_save (struct insn_chain *chain, int before_p, int regno,
      HARD_REG_SET (*to_save), enum machine_mode *save_mode)
{
  int i;
  unsigned int k;
  rtx pat = (rtx) 0;
  int code;
  unsigned int numregs = 0;
  struct insn_chain *new;
  rtx mem;
  if (regno_save_mem[regno][1] == 0)
    fancy_abort ("gcc.c", 387199, "?");
  for (i = (16 / (0 ? 8 : 4)); i > 0; i--)
    {
      int j;
      int ok = 1;
      if (regno_save_mem[regno][i] == 0)
 continue;
      for (j = 0; j < i; j++)
 if (! (!!((*to_save)[(regno + j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + j) % ((unsigned) (8 * 4)))))))
   {
     ok = 0;
     break;
   }
      if (! ok)
 continue;
      numregs = i;
      break;
    }
  mem = regno_save_mem [regno][numregs];
  if (save_mode [regno] != VOIDmode
      && save_mode [regno] != ((enum machine_mode) (mem)->mode)
      && numregs == (unsigned int) hard_regno_nregs[regno][save_mode [regno]])
    mem = adjust_address_1 (mem, save_mode[regno], 0, 1, 1);
  else
    mem = copy_rtx (mem);
  pat = gen_rtx_fmt_ee (SET, (VOIDmode), (mem), (gen_rtx_REG (((enum machine_mode) (mem)->mode), regno)))
             ;
  code = reg_save_code[regno][((enum machine_mode) (mem)->mode)];
  new = insert_one_insn (chain, before_p, code, pat);
  for (k = 0; k < numregs; k++)
    {
      ((hard_regs_saved)[(regno + k) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno + k) % ((unsigned) (8 * 4))));
      bitmap_set_bit (&new->dead_or_set, regno + k);
      n_regs_saved++;
    }
  return numregs - 1;
}
static struct insn_chain *
insert_one_insn (struct insn_chain *chain, int before_p, int code, rtx pat)
{
  rtx insn = chain->insn;
  struct insn_chain *new;
  new = new_insn_chain ();
  if (before_p)
    {
      rtx link;
      new->prev = chain->prev;
      if (new->prev != 0)
 new->prev->next = new;
      else
 reload_insn_chain = new;
      chain->prev = new;
      new->next = chain;
      new->insn = emit_insn_before (pat, insn);
      bitmap_copy (&new->live_throughout, &chain->live_throughout);
      for (link = (((chain->insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
 {
   if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEAD)
     {
       rtx reg = (((link)->u.fld[0]).rtx1);
       int regno, i;
       if (!(((enum rtx_code) (reg)->code) == REG))
  fancy_abort ("gcc.c", 387297, "?");
       regno = (((reg)->u.fld[0]).rtuint);
       if (regno >= 53)
  regno = reg_renumber[regno];
       if (regno < 0)
  continue;
       for (i = hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)] - 1;
     i >= 0; i--)
  bitmap_set_bit (&new->live_throughout, regno + i);
     }
 }
      bitmap_clear (&new->dead_or_set);
      if (chain->insn == ((((basic_block_info)->data.bb[(chain->block)])))->head_)
 ((((basic_block_info)->data.bb[(chain->block)])))->head_ = new->insn;
    }
  else
    {
      new->next = chain->next;
      if (new->next != 0)
 new->next->prev = new;
      chain->next = new;
      new->prev = chain;
      new->insn = emit_insn_after (pat, insn);
      bitmap_copy (&new->live_throughout, &chain->live_throughout);
      note_stores ((((chain->insn)->u.fld[5]).rtx1), add_stored_regs,
     &new->live_throughout);
      bitmap_clear (&new->dead_or_set);
      if (chain->insn == ((((basic_block_info)->data.bb[(chain->block)])))->end_)
 ((((basic_block_info)->data.bb[(chain->block)])))->end_ = new->insn;
    }
  new->block = chain->block;
  new->is_caller_save_insn = 1;
  (((new->insn)->u.fld[6]).rtint) = code;
  return new;
}
struct arg_data
{
  tree tree_value;
  enum machine_mode mode;
  rtx value1;
  rtx initial_value;
  rtx reg;
  rtx tail_call_reg;
  int unsignedp;
  int partial;
  int pass_on_stack;
  struct locate_and_pad_arg_data locate;
  rtx stack;
  rtx stack_slot;
  rtx save_area;
  rtx *aligned_regs;
  int n_aligned_regs;
};
static char *stack_usage_map;
static int highest_outgoing_arg_in_use;
static sbitmap stored_args_map;
int stack_arg_under_construction;
static void emit_call_1 (rtx, tree, tree, tree, long, long,
    long, rtx, rtx, int, rtx, int,
    CUMULATIVE_ARGS *);
static void precompute_register_parameters (int, struct arg_data *, int *);
static int store_one_arg (struct arg_data *, rtx, int, int, int);
static void store_unaligned_arguments_into_pseudos (struct arg_data *, int);
static int finalize_must_preallocate (int, int, struct arg_data *,
          struct args_size *);
static void precompute_arguments (int, int, struct arg_data *);
static int compute_argument_block_size (int, struct args_size *, int);
static void initialize_argument_information (int, struct arg_data *,
          struct args_size *, int, tree,
          tree, CUMULATIVE_ARGS *, int,
          rtx *, int *, int *, int *,
          unsigned char *, unsigned char);
static void compute_argument_addresses (struct arg_data *, rtx, int);
static rtx rtx_for_function_call (tree, tree);
static void load_register_parameters (struct arg_data *, int, rtx *, int,
          int, int *);
static rtx emit_library_call_value_1 (int, rtx, rtx, enum libcall_type,
          enum machine_mode, int, va_list);
static int special_function_p (tree, int);
static int check_sibcall_argument_overlap_1 (rtx);
static int check_sibcall_argument_overlap (rtx, struct arg_data *, int);
static int combine_pending_stack_adjustment_and_call (int, struct args_size *,
            int);
static tree fix_unsafe_tree (tree);
static unsigned char shift_returned_value (tree, rtx *);
static rtx save_fixed_argument_area (int, rtx, int *, int *);
static void restore_fixed_argument_area (rtx, rtx, int, int);
rtx
prepare_call_address (rtx funexp, rtx static_chain_value,
        rtx *call_fusage, int reg_parm_seen, int sibcallp)
{
  funexp = protect_from_queue (funexp, 0);
  if (((enum rtx_code) (funexp)->code) != SYMBOL_REF)
    funexp = ((1 && reg_parm_seen)
       ? force_not_mem (memory_address (QImode, funexp))
       : memory_address (QImode, funexp));
  else if (! sibcallp)
    {
    }
  if (static_chain_value != 0)
    {
      emit_move_insn (static_chain_rtx, static_chain_value);
      if ((((enum rtx_code) (static_chain_rtx)->code) == REG))
 use_reg (call_fusage, static_chain_rtx);
    }
  return funexp;
}
static void
emit_call_1 (rtx funexp, tree fntree, tree fndecl ,
      tree funtype ,
      long stack_size ,
      long rounded_stack_size,
      long struct_value_size ,
      rtx next_arg_reg , rtx valreg,
      int old_inhibit_defer_pop, rtx call_fusage, int ecf_flags,
      CUMULATIVE_ARGS *args_so_far )
{
  rtx rounded_stack_size_rtx = gen_rtx_CONST_INT (VOIDmode, (long) (rounded_stack_size));
  rtx call_insn;
  int already_popped = 0;
  long n_popped = ix86_return_pops_args ((fndecl), (funtype), (stack_size));
  rtx struct_value_size_rtx;
  struct_value_size_rtx = gen_rtx_CONST_INT (VOIDmode, (long) (struct_value_size));
  if (((enum rtx_code) (funexp)->code) != SYMBOL_REF)
    funexp = memory_address (QImode, funexp);
  if (1 && 1 && (!0) && (!0)
      && n_popped > 0 && ! (ecf_flags & 512))
    {
      rtx n_pop = gen_rtx_CONST_INT (VOIDmode, (long) (n_popped));
      rtx pat;
      if (valreg)
 pat = gen_call_value_pop ((valreg), (gen_rtx_MEM (QImode, funexp)), (rounded_stack_size_rtx), (next_arg_reg), (n_pop))
                                                  ;
      else
 pat = gen_call_pop ((gen_rtx_MEM (QImode, funexp)), (rounded_stack_size_rtx), (next_arg_reg), (n_pop))
                                                   ;
      emit_call_insn (pat);
      already_popped = 1;
    }
  else
  if ((ecf_flags & 128)
      && 1 && 1)
    {
      if (valreg)
 emit_call_insn (gen_sibcall_value ((valreg), (gen_rtx_MEM (QImode, funexp)), (rounded_stack_size_rtx), (next_arg_reg))
                               );
      else
 emit_call_insn (gen_sibcall ((gen_rtx_MEM (QImode, funexp)), (rounded_stack_size_rtx), (next_arg_reg))
                               );
    }
  else
  if (1 && 1)
    {
      if (valreg)
 emit_call_insn (gen_call_value ((valreg), (gen_rtx_MEM (QImode, funexp)), (rounded_stack_size_rtx), (next_arg_reg))
              );
      else
 emit_call_insn (gen_call ((gen_rtx_MEM (QImode, funexp)), (rounded_stack_size_rtx), (next_arg_reg))
                            );
    }
  else
    fancy_abort ("gcc.c", 387671, "?");
  call_insn = last_call_insn ();
  if (ecf_flags & 256)
    call_fusage
      = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode)))))), (call_fusage))
              ;
  add_function_usage_to (call_insn, call_fusage);
  if (ecf_flags & (1 | 256))
    (((call_insn))->unchanging) = 1;
  if (ecf_flags & 16)
    (((call_insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_EH_REGION), ((const_int_rtx[64])), ((((call_insn)->u.fld[8]).rtx1)))
                                  ;
  else
    {
      int rn = lookup_stmt_eh_region (fntree);
      if (rn > 0)
 (((call_insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_EH_REGION), (gen_rtx_CONST_INT (VOIDmode, (long) (rn))), ((((call_insn)->u.fld[8]).rtx1)))
                               ;
      note_current_region_may_contain_throw ();
    }
  if (ecf_flags & 2)
    (((call_insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_NORETURN), ((const_int_rtx[64])), ((((call_insn)->u.fld[8]).rtx1)))
                                  ;
  if (ecf_flags & 1024)
    (((call_insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_ALWAYS_RETURN), ((const_int_rtx[64])), ((((call_insn)->u.fld[8]).rtx1)))
                                  ;
  if (ecf_flags & 32)
    {
      (((call_insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_SETJMP), ((const_int_rtx[64])), ((((call_insn)->u.fld[8]).rtx1)))
                                    ;
      (cfun->calls_setjmp) = 1;
    }
  (((call_insn))->jump) = ((ecf_flags & 128) != 0);
  (cfun->expr->x_inhibit_defer_pop) = old_inhibit_defer_pop;
  if (n_popped > 0)
    {
      if (!already_popped)
 (((call_insn)->u.fld[9]).rtx1)
   = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_fmt_e (CLOBBER, (VOIDmode), ((global_rtl[GR_STACK_POINTER])))), ((((call_insn)->u.fld[9]).rtx1)))
                                               ;
      rounded_stack_size -= n_popped;
      rounded_stack_size_rtx = gen_rtx_CONST_INT (VOIDmode, (long) (rounded_stack_size));
      (cfun->expr->x_stack_pointer_delta) -= n_popped;
    }
  if (!(target_flags & 0x00001000))
    {
      if (rounded_stack_size != 0)
 {
   if (ecf_flags & (512 | 2 | 64))
     (cfun->expr->x_stack_pointer_delta) -= rounded_stack_size;
   else if (flag_defer_pop && (cfun->expr->x_inhibit_defer_pop) == 0
       && ! (ecf_flags & (1 | 256)))
     (cfun->expr->x_pending_stack_adjust) += rounded_stack_size;
   else
     adjust_stack (rounded_stack_size_rtx);
 }
    }
  else if (n_popped)
    anti_adjust_stack (gen_rtx_CONST_INT (VOIDmode, (long) (n_popped)));
}
static int
special_function_p (tree fndecl, int flags)
{
  if (fndecl && ((fndecl)->decl.name)
      && ((((fndecl)->decl.name))->identifier.id.len) <= 17
      && (((fndecl)->decl.context) == (tree) ((void *)0)
   || ((enum tree_code) (((fndecl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL)
      && ((fndecl)->common.public_flag))
    {
      const char *name = ((const char *) (((fndecl)->decl.name))->identifier.id.str);
      const char *tname = name;
      if (((((((fndecl)->decl.name))->identifier.id.len) == 6
     && name[0] == 'a'
     && ! strcmp (name, "alloca"))
    || (((((fndecl)->decl.name))->identifier.id.len) == 16
        && name[0] == '_'
        && ! strcmp (name, "__builtin_alloca"))))
 flags |= 8;
      if (name[0] == '_')
 {
   if (name[1] == '_' && name[2] == 'x')
     tname += 3;
   else if (name[1] == '_')
     tname += 2;
   else
     tname += 1;
 }
      if (tname[0] == 's')
 {
   if ((tname[1] == 'e'
        && (! strcmp (tname, "setjmp")
     || ! strcmp (tname, "setjmp_syscall")))
       || (tname[1] == 'i'
    && ! strcmp (tname, "sigsetjmp"))
       || (tname[1] == 'a'
    && ! strcmp (tname, "savectx")))
     flags |= 32;
   if (tname[1] == 'i'
       && ! strcmp (tname, "siglongjmp"))
     flags |= 64;
 }
      else if ((tname[0] == 'q' && tname[1] == 's'
  && ! strcmp (tname, "qsetjmp"))
        || (tname[0] == 'v' && tname[1] == 'f'
     && ! strcmp (tname, "vfork")))
 flags |= 32;
      else if (tname[0] == 'l' && tname[1] == 'o'
        && ! strcmp (tname, "longjmp"))
 flags |= 64;
    }
  return flags;
}
int
setjmp_call_p (tree fndecl)
{
  return special_function_p (fndecl, 0) & 32;
}
unsigned char
alloca_call_p (tree exp)
{
  if (((enum tree_code) (exp)->common.code) == CALL_EXPR
      && ((enum tree_code) (((exp)->exp.operands[0]))->common.code) == ADDR_EXPR
      && (((enum tree_code) (((((exp)->exp.operands[0]))->exp.operands[0]))->common.code)
   == FUNCTION_DECL)
      && (special_function_p (((((exp)->exp.operands[0]))->exp.operands[0]),
         0) & 8))
    return 1;
  return 0;
}
int
flags_from_decl_or_type (tree exp)
{
  int flags = 0;
  tree type = exp;
  if ((tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'd'))
    {
      struct cgraph_rtl_info *i = cgraph_rtl_info (exp);
      type = ((exp)->common.type);
      if (i)
 {
   if (i->pure_function)
     flags |= 256 | 2048;
   if (i->const_function)
     flags |= 1 | 2048;
 }
      if (((exp)->decl.malloc_flag))
 flags |= 4;
      if (((exp)->decl.pure_flag))
 flags |= 256 | 2048;
      if (((exp)->common.nothrow_flag))
 flags |= 16;
      if (((exp)->common.readonly_flag) && ! ((exp)->common.volatile_flag))
 flags |= 2048 | 1;
      flags = special_function_p (exp, flags);
    }
  else if ((tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 't') && ((exp)->common.readonly_flag) && ! ((exp)->common.volatile_flag))
    flags |= 1;
  if (((exp)->common.volatile_flag))
    flags |= 2;
  if (((enum tree_code) (type)->common.code) == FUNCTION_TYPE && ((type)->type.no_force_blk_flag))
    {
      flags |= 512;
      flags &= ~(256 | 1 | 2048);
    }
  return flags;
}
int
call_expr_flags (tree t)
{
  int flags;
  tree decl = get_callee_fndecl (t);
  if (decl)
    flags = flags_from_decl_or_type (decl);
  else
    {
      t = ((((t)->exp.operands[0]))->common.type);
      if (t && ((enum tree_code) (t)->common.code) == POINTER_TYPE)
 flags = flags_from_decl_or_type (((t)->common.type));
      else
 flags = 0;
    }
  return flags;
}
static void
precompute_register_parameters (int num_actuals, struct arg_data *args, int *reg_parm_seen)
{
  int i;
  *reg_parm_seen = 0;
  for (i = 0; i < num_actuals; i++)
    if (args[i].reg != 0 && ! args[i].pass_on_stack)
      {
 *reg_parm_seen = 1;
 if (args[i].value1 == 0)
   {
     push_temp_slots ();
     args[i].value1 = expand_expr (args[i].tree_value, (rtx) 0,
      VOIDmode, 0);
     preserve_temp_slots (args[i].value1);
     pop_temp_slots ();
     emit_queue ();
   }
 if (((rtx_class[(int) (((enum rtx_code) (args[i].value1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (args[i].value1)->code) == CONST_VECTOR)
     && !legitimate_constant_p (args[i].value1))
   args[i].value1 = force_reg (args[i].mode, args[i].value1);
 if (args[i].mode != ((((args[i].tree_value)->common.type))->type.mode))
   args[i].value1
     = convert_modes (args[i].mode,
        ((((args[i].tree_value)->common.type))->type.mode),
        args[i].value1, args[i].unsignedp);
 if ((! ((((enum rtx_code) (args[i].value1)->code) == REG)
  || (((enum rtx_code) (args[i].value1)->code) == SUBREG
      && (((enum rtx_code) ((((args[i].value1)->u.fld[0]).rtx1))->code) == REG))))
     && args[i].mode != BLKmode
     && rtx_cost (args[i].value1, SET) > ((1) * 4)
     && ((1 && *reg_parm_seen)
  || preserve_subexpressions_p ()))
   args[i].value1 = copy_to_mode_reg (args[i].mode, args[i].value1);
      }
}
static rtx
save_fixed_argument_area (int reg_parm_stack_space, rtx argblock, int *low_to_save, int *high_to_save)
{
  int low;
  int high;
  high = reg_parm_stack_space;
  if (high > highest_outgoing_arg_in_use)
    high = highest_outgoing_arg_in_use;
  for (low = 0; low < high; low++)
    if (stack_usage_map[low] != 0)
      {
 int num_to_save;
 enum machine_mode save_mode;
 int delta;
 rtx stack_area;
 rtx save_area;
 while (stack_usage_map[--high] == 0)
   ;
 *low_to_save = low;
 *high_to_save = high;
 num_to_save = high - low + 1;
 save_mode = mode_for_size (num_to_save * 8, MODE_INT, 1);
 if ((low & (((((unsigned short) mode_size[save_mode])) < (128 / (0 ? 8 : 4)) ? (((unsigned short) mode_size[save_mode])) : (128 / (0 ? 8 : 4)))
                                        - 1)))
   save_mode = BLKmode;
 delta = low;
 stack_area = gen_rtx_MEM (save_mode,
      memory_address (save_mode,
        plus_constant_wide ((argblock), (long) (delta))
               ));
 set_mem_align (stack_area, (8 * (0 ? 8 : 4)));
 if (save_mode == BLKmode)
   {
     save_area = assign_stack_temp (BLKmode, num_to_save, 0);
     emit_block_move (validize_mem (save_area), stack_area,
        gen_rtx_CONST_INT (VOIDmode, (long) (num_to_save)), BLOCK_OP_CALL_PARM);
   }
 else
   {
     save_area = gen_reg_rtx (save_mode);
     emit_move_insn (save_area, stack_area);
   }
 return save_area;
      }
  return (rtx) 0;
}
static void
restore_fixed_argument_area (rtx save_area, rtx argblock, int high_to_save, int low_to_save)
{
  enum machine_mode save_mode = ((enum machine_mode) (save_area)->mode);
  int delta;
  rtx stack_area;
  delta = low_to_save;
  stack_area = gen_rtx_MEM (save_mode,
       memory_address (save_mode,
         plus_constant_wide ((argblock), (long) (delta))));
  set_mem_align (stack_area, (8 * (0 ? 8 : 4)));
  if (save_mode != BLKmode)
    emit_move_insn (stack_area, save_area);
  else
    emit_block_move (stack_area, validize_mem (save_area),
       gen_rtx_CONST_INT (VOIDmode, (long) (high_to_save - low_to_save + 1)),
       BLOCK_OP_CALL_PARM);
}
static void
store_unaligned_arguments_into_pseudos (struct arg_data *args, int num_actuals)
{
  int i, j;
  for (i = 0; i < num_actuals; i++)
    if (args[i].reg != 0 && ! args[i].pass_on_stack
 && args[i].mode == BLKmode
 && (((((args[i].tree_value)->common.type))->type.align)
     < (unsigned int) ((128) < ((8 * (0 ? 8 : 4))) ? (128) : ((8 * (0 ? 8 : 4))))))
      {
 int bytes = int_size_in_bytes (((args[i].tree_value)->common.type));
 int nregs = (bytes + (0 ? 8 : 4) - 1) / (0 ? 8 : 4);
 int endian_correction = 0;
 args[i].n_aligned_regs = args[i].partial ? args[i].partial : nregs;
 args[i].aligned_regs = xmalloc (sizeof (rtx) * args[i].n_aligned_regs);
 if (bytes < (0 ? 8 : 4)
     && 0
     )
   endian_correction = (8 * (0 ? 8 : 4)) - bytes * 8;
 for (j = 0; j < args[i].n_aligned_regs; j++)
   {
     rtx reg = gen_reg_rtx (word_mode);
     rtx word = operand_subword_force (args[i].value1, j, BLKmode);
     int bitsize = ((bytes * 8) < ((8 * (0 ? 8 : 4))) ? (bytes * 8) : ((8 * (0 ? 8 : 4))));
     args[i].aligned_regs[j] = reg;
     word = extract_bit_field (word, bitsize, 0, 1, (rtx) 0,
          word_mode, word_mode, (8 * (0 ? 8 : 4)));
     emit_move_insn (reg, (const_int_rtx[64]));
     bytes -= bitsize / 8;
     store_bit_field (reg, bitsize, endian_correction, word_mode,
        word, (8 * (0 ? 8 : 4)));
   }
      }
}
static void
initialize_argument_information (int num_actuals ,
     struct arg_data *args,
     struct args_size *args_size,
     int n_named_args ,
     tree actparms, tree fndecl,
     CUMULATIVE_ARGS *args_so_far,
     int reg_parm_stack_space,
     rtx *old_stack_level, int *old_pending_adj,
     int *must_preallocate, int *ecf_flags,
     unsigned char *may_tailcall, unsigned char call_from_thunk_p)
{
  int inc;
  int argpos;
  int i;
  tree p;
  args_size->constant = 0;
  args_size->var = 0;
  if (1)
    {
      i = num_actuals - 1, inc = -1;
    }
  else
    {
      i = 0, inc = 1;
    }
  for (p = actparms, argpos = 0; p; p = ((p)->common.chain), i += inc, argpos++)
    {
      tree type = ((((p)->list.value1))->common.type);
      int unsignedp;
      enum machine_mode mode;
      args[i].tree_value = ((p)->list.value1);
      if (type == global_trees[TI_ERROR_MARK] || !(((type)->type.size) != (tree) ((void *)0)))
 args[i].tree_value = global_trees[TI_INTEGER_ZERO], type = integer_types[itk_int];
      if (((enum tree_code) (type)->common.code) == UNION_TYPE && ((type)->type.transparent_union_flag))
 type = ((((type)->type.value1s))->common.type);
      if (((((type)->type.size)) != 0 && ! ((((type)->type.size))->common.constant_flag) && contains_placeholder_p (((type)->type.size)))
   || ((type)->common.addressable_flag)
   || function_arg_pass_by_reference(&*args_so_far, ((type)->type.mode), type, argpos < n_named_args)
   )
 {
   if (call_from_thunk_p
       )
     {
       if (((enum tree_code) (args[i].tree_value)->common.code) == TARGET_EXPR
    && ((tree_code_type[(int) (((enum tree_code) (((args[i].tree_value)->exp.operands[1]))->common.code))] == 'd'))
    && ! (((enum rtx_code) (((((args[i].tree_value)->exp.operands[1]))->decl.rtl ? (((args[i].tree_value)->exp.operands[1]))->decl.rtl : (make_decl_rtl (((args[i].tree_value)->exp.operands[1]), ((void *)0)), (((args[i].tree_value)->exp.operands[1]))->decl.rtl)))->code) == REG))
  args[i].tree_value = ((args[i].tree_value)->exp.operands[1]);
       if (!call_from_thunk_p
    && (!(tree_code_type[(int) (((enum tree_code) (args[i].tree_value)->common.code))] == 'd')
        || !((args[i].tree_value)->common.static_flag)))
  *may_tailcall = 0;
       args[i].tree_value = build1_stat (ADDR_EXPR,build_pointer_type (type),args[i].tree_value )
                           ;
       type = build_pointer_type (type);
     }
   else if (((enum tree_code) (args[i].tree_value)->common.code) == TARGET_EXPR)
     {
       args[i].tree_value = build1_stat (ADDR_EXPR,build_pointer_type (type),args[i].tree_value )
                           ;
       type = build_pointer_type (type);
       *may_tailcall = 0;
     }
   else
     {
       rtx copy;
       if (!(((type)->type.size) != (tree) ((void *)0))
    || ((enum tree_code) (((type)->type.size))->common.code) != INTEGER_CST
    || (flag_stack_check && ! 0
        && (0 < compare_tree_int (((type)->type.size_unit),
      ((4096 - (0 ? 8 : 4)) / 100)))))
  {
    rtx size_rtx = expr_size (((p)->list.value1));
    if (*old_stack_level == 0)
      {
        emit_stack_save (SAVE_BLOCK, old_stack_level, (rtx) 0);
        *old_pending_adj = (cfun->expr->x_pending_stack_adjust);
        (cfun->expr->x_pending_stack_adjust) = 0;
      }
    copy = gen_rtx_MEM (BLKmode,
          allocate_dynamic_stack_space
          (size_rtx, (rtx) 0, ((type)->type.align)));
    set_mem_attributes (copy, type, 1);
  }
       else
  copy = assign_temp (type, 0, 1, 0);
       store_expr (args[i].tree_value, copy, 0);
       *ecf_flags &= ~(1 | 256 | 2048);
       args[i].tree_value = build1_stat (ADDR_EXPR,build_pointer_type (type),make_tree (type, copy) )
                               ;
       type = build_pointer_type (type);
       *may_tailcall = 0;
     }
 }
      mode = ((type)->type.mode);
      unsignedp = ((type)->common.unsigned_flag);
      if (targetm.calls.promote_function_args (fndecl ? ((fndecl)->common.type) : 0))
 mode = promote_mode (type, mode, &unsignedp, 1);
      args[i].unsignedp = unsignedp;
      args[i].mode = mode;
      args[i].reg = function_arg (&(*args_so_far), (mode), (type), (argpos < n_named_args))
                            ;
      args[i].tail_call_reg = args[i].reg;
      if (args[i].reg)
 args[i].partial
   = 0
                           ;
      args[i].pass_on_stack = ix86_must_pass_in_stack ((mode), (type));
      if (args[i].reg && ((enum rtx_code) (args[i].reg)->code) == PARALLEL
   && ((((((((args[i].reg)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1) == 0)
 args[i].pass_on_stack = 1;
      if (((type)->common.addressable_flag)
   || (args[i].pass_on_stack && args[i].reg != 0))
 *must_preallocate = 1;
      if (((type)->common.addressable_flag))
 *ecf_flags &= ~2048;
      if (args[i].reg == 0 || args[i].partial != 0
   || reg_parm_stack_space > 0
   || args[i].pass_on_stack)
 locate_and_pad_parm (mode, type,
        args[i].reg != 0,
        args[i].pass_on_stack ? 0 : args[i].partial,
        fndecl, args_size, &args[i].locate);
      args_size->constant += args[i].locate.size.constant;
      if (args[i].locate.size.var)
 do { tree inc = (args[i].locate.size.var); if (host_integerp (inc, 0)) (*args_size).constant += tree_low_cst (inc, 0); else if ((*args_size).var == 0) (*args_size).var = convert (sizetype_tab[(int) SSIZETYPE], inc); else (*args_size).var = size_binop (PLUS_EXPR, (*args_size).var, convert (sizetype_tab[(int) SSIZETYPE], inc)); } while (0);
      function_arg_advance (&(*args_so_far), (((type)->type.mode)), (type), (argpos < n_named_args))
                             ;
    }
}
static int
compute_argument_block_size (int reg_parm_stack_space,
        struct args_size *args_size,
        int preferred_stack_boundary )
{
  int unadjusted_args_size = args_size->constant;
  if ((target_flags & 0x00001000) && preferred_stack_boundary > (8 * (0 ? 8 : 4)))
    preferred_stack_boundary = (8 * (0 ? 8 : 4));
  if (args_size->var)
    {
      args_size->var = ((*args_size).var == 0 ? size_int_wide ((long) ((*args_size).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (*args_size).var), size_int_wide ((long) ((*args_size).constant), SSIZETYPE)));
      args_size->constant = 0;
      preferred_stack_boundary /= 8;
      if (preferred_stack_boundary > 1)
 {
   if ((cfun->expr->x_stack_pointer_delta) & (preferred_stack_boundary - 1))
     fancy_abort ("gcc.c", 388515, "?");
   args_size->var = round_up (args_size->var, preferred_stack_boundary);
 }
      if (reg_parm_stack_space > 0)
 {
   args_size->var
     = size_binop (MAX_EXPR, args_size->var,
     size_int_wide ((long) (reg_parm_stack_space), SSIZETYPE));
   args_size->var
     = size_binop (MINUS_EXPR, args_size->var,
     size_int_wide ((long) (reg_parm_stack_space), SSIZETYPE));
 }
    }
  else
    {
      preferred_stack_boundary /= 8;
      if (preferred_stack_boundary < 1)
 preferred_stack_boundary = 1;
      args_size->constant = (((args_size->constant
          + (cfun->expr->x_stack_pointer_delta)
          + preferred_stack_boundary - 1)
         / preferred_stack_boundary
         * preferred_stack_boundary)
        - (cfun->expr->x_stack_pointer_delta));
      args_size->constant = ((args_size->constant) > (reg_parm_stack_space) ? (args_size->constant) : (reg_parm_stack_space))
                          ;
      args_size->constant -= reg_parm_stack_space;
    }
  return unadjusted_args_size;
}
static void
precompute_arguments (int flags, int num_actuals, struct arg_data *args)
{
  int i;
  if ((flags & 2048) == 0)
    return;
  for (i = 0; i < num_actuals; i++)
    {
      enum machine_mode mode;
      if (((((args[i].tree_value)->common.type))->common.addressable_flag))
 fancy_abort ("gcc.c", 388582, "?");
      args[i].value1
 = expand_expr (args[i].tree_value, (rtx) 0, VOIDmode, 0);
      emit_queue ();
      args[i].initial_value = args[i].value1
 = protect_from_queue (args[i].value1, 0);
      mode = ((((args[i].tree_value)->common.type))->type.mode);
      if (mode != args[i].mode)
 {
   args[i].value1
     = convert_modes (args[i].mode, mode,
        args[i].value1, args[i].unsignedp);
 }
    }
}
static int
finalize_must_preallocate (int must_preallocate, int num_actuals, struct arg_data *args, struct args_size *args_size)
{
  if (! must_preallocate)
    {
      int partial_seen = 0;
      int copy_to_evaluate_size = 0;
      int i;
      for (i = 0; i < num_actuals && ! must_preallocate; i++)
 {
   if (args[i].partial > 0 && ! args[i].pass_on_stack)
     partial_seen = 1;
   else if (partial_seen && args[i].reg == 0)
     must_preallocate = 1;
   if (((((args[i].tree_value)->common.type))->type.mode) == BLKmode
       && (((enum tree_code) (args[i].tree_value)->common.code) == CALL_EXPR
    || ((enum tree_code) (args[i].tree_value)->common.code) == TARGET_EXPR
    || ((enum tree_code) (args[i].tree_value)->common.code) == COND_EXPR
    || ((((args[i].tree_value)->common.type))->common.addressable_flag)))
     copy_to_evaluate_size
       += int_size_in_bytes (((args[i].tree_value)->common.type));
 }
      if (copy_to_evaluate_size * 2 >= args_size->constant
   && args_size->constant > 0)
 must_preallocate = 1;
    }
  return must_preallocate;
}
static void
compute_argument_addresses (struct arg_data *args, rtx argblock, int num_actuals)
{
  if (argblock)
    {
      rtx arg_reg = argblock;
      int i, arg_offset = 0;
      if (((enum rtx_code) (argblock)->code) == PLUS)
 arg_reg = (((argblock)->u.fld[0]).rtx1), arg_offset = (((((argblock)->u.fld[1]).rtx1))->u.hwint[0]);
      for (i = 0; i < num_actuals; i++)
 {
   rtx offset = ((args[i].locate.offset).var == 0 ? gen_rtx_CONST_INT (VOIDmode, (long) ((args[i].locate.offset).constant)) : expand_expr (((args[i].locate.offset).var == 0 ? size_int_wide ((long) ((args[i].locate.offset).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (args[i].locate.offset).var), size_int_wide ((long) ((args[i].locate.offset).constant), SSIZETYPE))), (rtx) 0, VOIDmode, 0));
   rtx slot_offset = ((args[i].locate.slot_offset).var == 0 ? gen_rtx_CONST_INT (VOIDmode, (long) ((args[i].locate.slot_offset).constant)) : expand_expr (((args[i].locate.slot_offset).var == 0 ? size_int_wide ((long) ((args[i].locate.slot_offset).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (args[i].locate.slot_offset).var), size_int_wide ((long) ((args[i].locate.slot_offset).constant), SSIZETYPE))), (rtx) 0, VOIDmode, 0));
   rtx addr;
   if (! args[i].pass_on_stack && args[i].reg != 0)
     continue;
   if (((enum rtx_code) (offset)->code) == CONST_INT)
     addr = plus_constant_wide ((arg_reg), (long) (((offset)->u.hwint[0])));
   else
     addr = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (arg_reg), (offset));
   addr = plus_constant_wide ((addr), (long) (arg_offset));
   args[i].stack = gen_rtx_MEM (args[i].mode, addr);
   set_mem_align (args[i].stack, (8 * (0 ? 8 : 4)));
   set_mem_attributes (args[i].stack,
         ((args[i].tree_value)->common.type), 1);
   if (((enum rtx_code) (slot_offset)->code) == CONST_INT)
     addr = plus_constant_wide ((arg_reg), (long) (((slot_offset)->u.hwint[0])));
   else
     addr = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (arg_reg), (slot_offset));
   addr = plus_constant_wide ((addr), (long) (arg_offset));
   args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr);
   set_mem_align (args[i].stack_slot, (8 * (0 ? 8 : 4)));
   set_mem_attributes (args[i].stack_slot,
         ((args[i].tree_value)->common.type), 1);
   set_mem_alias_set (args[i].stack, 0);
   set_mem_alias_set (args[i].stack_slot, 0);
 }
    }
}
static rtx
rtx_for_function_call (tree fndecl, tree addr)
{
  rtx funexp;
  if (fndecl)
    {
      if (! ((fndecl)->common.used_flag))
 {
   assemble_external (fndecl);
   ((fndecl)->common.used_flag) = 1;
 }
      funexp = (((((fndecl)->decl.rtl ? (fndecl)->decl.rtl : (make_decl_rtl (fndecl, ((void *)0)), (fndecl)->decl.rtl)))->u.fld[0]).rtx1);
    }
  else
    {
      push_temp_slots ();
      funexp = expand_expr (addr, (rtx) 0, VOIDmode, 0);
      pop_temp_slots ();
      emit_queue ();
    }
  return funexp;
}
static void
load_register_parameters (struct arg_data *args, int num_actuals,
     rtx *call_fusage, int flags, int is_sibcall,
     int *sibcall_failure)
{
  int i, j;
  for (i = 0; i < num_actuals; i++)
    {
      rtx reg = ((flags & 128)
   ? args[i].tail_call_reg : args[i].reg);
      if (reg)
 {
   int partial = args[i].partial;
   int nregs;
   int size = 0;
   rtx before_arg = get_last_insn ();
   nregs = -1;
   if (partial)
     nregs = partial;
   else if (((((args[i].tree_value)->common.type))->type.mode) == BLKmode)
     {
       size = int_size_in_bytes (((args[i].tree_value)->common.type));
       nregs = (size + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4);
     }
   else
     size = ((unsigned short) mode_size[args[i].mode]);
   if (((enum rtx_code) (reg)->code) == PARALLEL)
     {
       tree type = ((args[i].tree_value)->common.type);
       emit_group_load (reg, args[i].value1, type,
          int_size_in_bytes (type));
     }
   else if (nregs == -1)
     {
       emit_move_insn (reg, args[i].value1);
     }
   else if (args[i].n_aligned_regs != 0)
     for (j = 0; j < args[i].n_aligned_regs; j++)
       emit_move_insn (gen_rtx_REG (word_mode, (((reg)->u.fld[0]).rtuint) + j),
         args[i].aligned_regs[j]);
   else if (partial == 0 || args[i].pass_on_stack)
     {
       rtx mem = validize_mem (args[i].value1);
       if (nregs == 1 && size < (0 ? 8 : 4)
    && 0
   )
  {
    rtx tem = operand_subword_force (mem, 0, args[i].mode);
    rtx ri = gen_rtx_REG (word_mode, (((reg)->u.fld[0]).rtuint));
    rtx x = gen_reg_rtx (word_mode);
    int shift = ((0 ? 8 : 4) - size) * 8;
    enum tree_code dir = 0 ? RSHIFT_EXPR
       : LSHIFT_EXPR;
    emit_move_insn (x, tem);
    x = expand_shift (dir, word_mode, x,
        build_int_2_wide ((unsigned long) (shift), (long) (0)), ri, 1);
    if (x != ri)
      emit_move_insn (ri, x);
  }
       else
  move_block_to_reg ((((reg)->u.fld[0]).rtuint), mem, nregs, args[i].mode);
     }
   if (is_sibcall
       && check_sibcall_argument_overlap (before_arg, &args[i], 0))
     *sibcall_failure = 1;
   if (((enum rtx_code) (reg)->code) == PARALLEL)
     use_group_regs (call_fusage, reg);
   else if (nregs == -1)
     use_reg (call_fusage, reg);
   else
     use_regs (call_fusage, (((reg)->u.fld[0]).rtuint), nregs == 0 ? 1 : nregs);
 }
    }
}
static int
combine_pending_stack_adjustment_and_call (int unadjusted_args_size,
        struct args_size *args_size,
        int preferred_unit_stack_boundary)
{
  long adjustment;
  long unadjusted_alignment;
  unadjusted_alignment
    = (((cfun->expr->x_stack_pointer_delta) + unadjusted_args_size)
       % preferred_unit_stack_boundary);
  unadjusted_alignment
    = (unadjusted_alignment
       - ((cfun->expr->x_pending_stack_adjust) % preferred_unit_stack_boundary));
  adjustment = (cfun->expr->x_pending_stack_adjust);
  if (preferred_unit_stack_boundary > 1)
    {
      if (unadjusted_alignment > 0)
 adjustment -= preferred_unit_stack_boundary - unadjusted_alignment;
      else
 adjustment += unadjusted_alignment;
    }
  args_size->constant
    = (cfun->expr->x_pending_stack_adjust) - adjustment + unadjusted_args_size;
  return adjustment;
}
static int
check_sibcall_argument_overlap_1 (rtx x)
{
  enum rtx_code code;
  int i, j;
  unsigned int k;
  const char *fmt;
  if (x == (rtx) 0)
    return 0;
  code = ((enum rtx_code) (x)->code);
  if (code == MEM)
    {
      if ((((x)->u.fld[0]).rtx1) == (cfun->internal_arg_pointer))
 i = 0;
      else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
        && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1) ==
    (cfun->internal_arg_pointer)
        && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
 i = ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
      else
 return 0;
      for (k = 0; k < ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]); k++)
 if (i + k < stored_args_map->n_bits
     && ((stored_args_map)->elms [(i + k) / ((unsigned) (8 * 4))] >> (i + k) % ((unsigned) (8 * 4)) & 1))
   return 1;
      return 0;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++, fmt++)
    {
      if (*fmt == 'e')
 {
   if (check_sibcall_argument_overlap_1 ((((x)->u.fld[i]).rtx1)))
     return 1;
 }
      else if (*fmt == 'E')
 {
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     if (check_sibcall_argument_overlap_1 ((((((x)->u.fld[i]).rtvec1))->elem[j])))
       return 1;
 }
    }
  return 0;
}
static int
check_sibcall_argument_overlap (rtx insn, struct arg_data *arg, int mark_stored_args_map)
{
  int low, high;
  if (insn == (rtx) 0)
    insn = get_insns ();
  else
    insn = (((insn)->u.fld[2]).rtx1);
  for (; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
 && check_sibcall_argument_overlap_1 ((((insn)->u.fld[5]).rtx1)))
      break;
  if (mark_stored_args_map)
    {
      low = arg->locate.slot_offset.constant;
      for (high = low + arg->locate.size.constant; low < high; low++)
 ((stored_args_map)->elms [(low) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (low) % ((unsigned) (8 * 4)));
    }
  return insn != (rtx) 0;
}
static tree
fix_unsafe_tree (tree t)
{
  switch (unsafe_for_reeval (t))
    {
    case 0:
      break;
    case 1:
      t = unsave_expr (t);
      break;
    case 2:
      {
 tree var = build_decl_stat (VAR_DECL,(tree) ((void *)0),((t)->common.type) )
                        ;
 set_decl_rtl (var, expand_expr (t, (rtx) 0, VOIDmode, EXPAND_NORMAL))
                                                           ;
 t = var;
      }
      break;
    default:
      fancy_abort ("gcc.c", 389089, "?");
    }
  return t;
}
static unsigned char
shift_returned_value (tree type, rtx *value1)
{
  if (targetm.calls.return_in_msb (type))
    {
      long shift;
      shift = (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (*value1)->mode)]) * 8))
        - 8 * int_size_in_bytes (type));
      if (shift > 0)
 {
   *value1 = expand_binop (((enum machine_mode) (*value1)->mode), (optab_table[OTI_lshr]), *value1,
     gen_rtx_CONST_INT (VOIDmode, (long) (shift)), 0, 1, OPTAB_WIDEN);
   *value1 = convert_to_mode (int_mode_for_mode (((type)->type.mode)),
        *value1, 0);
   *value1 = rtl_hooks.gen_lowpart (((type)->type.mode), *value1);
   return 1;
 }
    }
  return 0;
}
static void
purge_reg_equiv_notes (void)
{
  rtx insn;
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      while (1)
 {
   rtx note = find_reg_note (insn, REG_EQUIV, 0);
   if (note)
     {
       remove_note (insn, note);
       continue;
     }
   break;
 }
    }
}
static void
purge_mem_unchanging_flag (rtx x)
{
  enum rtx_code code;
  int i, j;
  const char *fmt;
  if (x == (rtx) 0)
    return;
  code = ((enum rtx_code) (x)->code);
  if (code == MEM)
    {
      if ((((x))->unchanging)
   && ((((x)->u.fld[0]).rtx1) == (cfun->internal_arg_pointer)
       || (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
    && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1) ==
       (cfun->internal_arg_pointer)
    && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)))
 (((x))->unchanging) = 0;
      return;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++, fmt++)
    {
      if (*fmt == 'e')
 purge_mem_unchanging_flag ((((x)->u.fld[i]).rtx1));
      else if (*fmt == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   purge_mem_unchanging_flag ((((((x)->u.fld[i]).rtvec1))->elem[j]));
    }
}
rtx
expand_call (tree exp, rtx target, int ignore)
{
  static int currently_expanding_call = 0;
  tree actparms = ((exp)->exp.operands[1]);
  rtx funexp;
  rtx normal_call_insns = (rtx) 0;
  rtx tail_call_insns = (rtx) 0;
  tree funtype;
  tree type_arg_types;
  tree fndecl = 0;
  tree fntype;
  unsigned char try_tail_call = ((exp)->common.addressable_flag);
  int pass;
  rtx valreg;
  rtx structure_value_addr = 0;
  int structure_value_addr_parm = 0;
  long struct_value_size = 0;
  int pcc_struct_value = 0;
  rtx struct_value = 0;
  int num_actuals;
  int n_named_args;
  struct arg_data *args;
  struct args_size args_size;
  struct args_size adjusted_args_size;
  int unadjusted_args_size;
  CUMULATIVE_ARGS args_so_far;
  int reg_parm_seen;
  int must_preallocate = !((!(target_flags & 0x00000800)) && !(target_flags & 0x00001000));
  int reg_parm_stack_space = 0;
  rtx argblock = 0;
  int flags = 0;
  int low_to_save, high_to_save;
  rtx save_area = 0;
  int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
  char *initial_stack_usage_map = stack_usage_map;
  int old_stack_allocated;
  rtx old_stack_level = 0;
  int old_stack_arg_under_construction = 0;
  int old_pending_adj = 0;
  int old_inhibit_defer_pop = (cfun->expr->x_inhibit_defer_pop);
  int old_stack_pointer_delta = 0;
  rtx call_fusage;
  tree p = ((exp)->exp.operands[0]);
  tree addr = ((exp)->exp.operands[0]);
  int i;
  long preferred_stack_boundary;
  long preferred_unit_stack_boundary;
  rtx static_chain_value;
  if (((exp)->common.nothrow_flag))
    flags |= 16;
  fndecl = get_callee_fndecl (exp);
  if (fndecl)
    {
      fntype = ((fndecl)->common.type);
      flags |= flags_from_decl_or_type (fndecl);
    }
  else
    {
      fntype = ((((p)->common.type))->common.type);
      flags |= flags_from_decl_or_type (fntype);
    }
  struct_value = targetm.calls.struct_value_rtx (fntype, 0);
  if (warn_aggregate_return && (((enum tree_code) (((exp)->common.type))->common.code) == ARRAY_TYPE || ((enum tree_code) (((exp)->common.type))->common.code) == RECORD_TYPE || ((enum tree_code) (((exp)->common.type))->common.code) == UNION_TYPE || ((enum tree_code) (((exp)->common.type))->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (((exp)->common.type))->common.code) == SET_TYPE))
    warning ("function call has aggregate value");
  if ((flags & (1 | 256))
      && (ignore || target == (const_int_rtx[64])
   || ((((exp)->common.type))->type.mode) == VOIDmode))
    {
      unsigned char volatilep = 0;
      tree arg;
      for (arg = actparms; arg; arg = ((arg)->common.chain))
 if (((((arg)->list.value1))->common.volatile_flag))
   {
     volatilep = 1;
     break;
   }
      if (! volatilep)
 {
   for (arg = actparms; arg; arg = ((arg)->common.chain))
     expand_expr (((arg)->list.value1), (const_int_rtx[64]),
    VOIDmode, EXPAND_NORMAL);
   return (const_int_rtx[64]);
 }
    }
  reg_parm_stack_space = 0;
  if (reg_parm_stack_space > 0 && ((!(target_flags & 0x00000800)) && !(target_flags & 0x00001000)))
    must_preallocate = 1;
  if (aggregate_value_p (exp, fndecl))
    {
      flags &= ~(1 | 256 | 2048);
      {
 struct_value_size = int_size_in_bytes (((exp)->common.type));
 if (((exp)->common.private_flag))
   {
     tree return_arg = ((actparms)->list.value1);
     actparms = ((actparms)->common.chain);
     structure_value_addr = expand_expr (return_arg, (rtx) 0,
      VOIDmode, EXPAND_NORMAL);
   }
 else if (target && (((enum rtx_code) (target)->code) == MEM))
   structure_value_addr = (((target)->u.fld[0]).rtx1);
 else
   {
     rtx d = assign_temp (((exp)->common.type), 1, 1, 1);
     mark_temp_addr_taken (d);
     structure_value_addr = (((d)->u.fld[0]).rtx1);
     target = 0;
   }
      }
    }
  preferred_stack_boundary = ix86_preferred_stack_boundary;
  if (fndecl)
    {
      struct cgraph_rtl_info *i = cgraph_rtl_info (fndecl);
      if (i && i->preferred_incoming_stack_boundary)
 preferred_stack_boundary = i->preferred_incoming_stack_boundary;
    }
  funtype = ((addr)->common.type);
  if (! (((enum tree_code) (funtype)->common.code) == POINTER_TYPE || ((enum tree_code) (funtype)->common.code) == REFERENCE_TYPE))
    fancy_abort ("gcc.c", 389430, "?");
  funtype = ((funtype)->common.type);
  if (targetm.calls.split_complex_arg)
    {
      type_arg_types = split_complex_types (((funtype)->type.value1s));
      actparms = split_complex_values (actparms);
    }
  else
    type_arg_types = ((funtype)->type.value1s);
  if (flags & 8)
    (cfun->calls_alloca) = 1;
  if (structure_value_addr && struct_value == 0)
    {
      rtx temp = (!(((enum rtx_code) (structure_value_addr)->code) == REG)
    || ((target_flags & 0x00001000)
        && stack_arg_under_construction
        && structure_value_addr == (global_rtl[GR_VIRTUAL_OUTGOING_ARGS]))
    ? copy_addr_to_reg (convert_memory_address
          ((0 ? DImode : SImode), structure_value_addr))
    : structure_value_addr);
      actparms
 = tree_cons_stat (global_trees[TI_ERROR_MARK],make_tree (build_pointer_type (((funtype)->common.type)), temp),actparms )
                ;
      structure_value_addr_parm = 1;
    }
  for (p = actparms, num_actuals = 0; p; p = ((p)->common.chain))
    num_actuals++;
  if (type_arg_types != 0)
    n_named_args
      = (list_length (type_arg_types)
  + structure_value_addr_parm);
  else
    n_named_args = num_actuals;
  init_cumulative_args (&(args_so_far), (funtype), ((rtx) 0), (fndecl));
  if (type_arg_types != 0
      && targetm.calls.strict_argument_naming (&args_so_far))
    ;
  else if (type_arg_types != 0
    && ! targetm.calls.pretend_outgoing_varargs_named (&args_so_far))
    --n_named_args;
  else
    n_named_args = num_actuals;
  args = C_alloca(num_actuals * sizeof (struct arg_data));
  memset (args, 0, num_actuals * sizeof (struct arg_data));
  initialize_argument_information (num_actuals, args, &args_size,
       n_named_args, actparms, fndecl,
       &args_so_far, reg_parm_stack_space,
       &old_stack_level, &old_pending_adj,
       &must_preallocate, &flags,
       &try_tail_call, ((exp)->common.protected_flag));
  if (args_size.var)
    {
      flags &= ~2048;
      must_preallocate = 1;
    }
  must_preallocate = finalize_must_preallocate (must_preallocate,
      num_actuals, args,
      &args_size);
  if (structure_value_addr
      && (reg_mentioned_p ((global_rtl[GR_VIRTUAL_STACK_DYNAMIC]), structure_value_addr)
   || reg_mentioned_p ((global_rtl[GR_VIRTUAL_OUTGOING_ARGS]),
         structure_value_addr))
      && (args_size.var
   || (!(target_flags & 0x00001000) && args_size.constant)))
    structure_value_addr = copy_to_reg (structure_value_addr);
  if (currently_expanding_call++ != 0
      || !flag_optimize_sibling_calls
      || !rtx_equal_function_value_matters
      || current_nesting_level () == 0
      || any_pending_cleanups ()
      || args_size.var
      || lookup_stmt_eh_region (exp) >= 0)
    try_tail_call = 0;
  if (
      !1
      || !try_tail_call
      || structure_value_addr != (rtx) 0
      || !targetm.function_ok_for_sibcall (fndecl, exp)
      || (flags & (32 | 64 | 2))
      || ((((((addr)->common.type))->common.type))->common.volatile_flag)
      || (fndecl && decl_function_context (fndecl) == current_function_decl)
      || args_size.constant > (cfun->args_size)
      || (ix86_return_pops_args ((fndecl), (funtype), (args_size.constant))
   != ix86_return_pops_args ((current_function_decl), (((current_function_decl)->common.type)), ((cfun->args_size)))
                                     )
      || !lang_hooks.decls.ok_for_sibcall (fndecl))
    try_tail_call = 0;
  if (try_tail_call)
    {
      int end, inc;
      actparms = (tree) ((void *)0);
      if (1)
 {
   inc = 1;
   i = 0;
   end = num_actuals;
 }
      else
 {
   inc = -1;
   i = num_actuals - 1;
   end = -1;
 }
      for (; i != end; i += inc)
 {
          args[i].tree_value = fix_unsafe_tree (args[i].tree_value);
 }
      if (!fndecl)
        addr = fix_unsafe_tree (addr);
      if (any_pending_cleanups ())
 try_tail_call = 0;
    }
  if (cfun->preferred_stack_boundary < preferred_stack_boundary
      && fndecl != current_function_decl)
    cfun->preferred_stack_boundary = preferred_stack_boundary;
  if (fndecl == current_function_decl)
    cfun->recursive_call_emit = 1;
  preferred_unit_stack_boundary = preferred_stack_boundary / 8;
  for (pass = try_tail_call ? 0 : 1; pass < 2; pass++)
    {
      int sibcall_failure = 0;
      int save_pending_stack_adjust = 0;
      int save_stack_pointer_delta = 0;
      rtx insns;
      rtx before_call, next_arg_reg;
      if (pass == 0)
 {
   emit_queue ();
   save_pending_stack_adjust = (cfun->expr->x_pending_stack_adjust);
   save_stack_pointer_delta = (cfun->expr->x_stack_pointer_delta);
 }
      if (pass)
 flags &= ~128;
      else
 flags |= 128;
      argblock = 0;
      call_fusage = 0;
      start_sequence ();
      if (pass == 0)
 {
   expand_start_target_temps ();
 }
      if ((cfun->expr->x_pending_stack_adjust) >= 32
   || ((cfun->expr->x_pending_stack_adjust) > 0
       && (flags & (8 | 512)))
   || pass == 0)
 do_pending_stack_adjust ();
      if (pass && (flags & 2048))
 ((cfun->expr->x_inhibit_defer_pop) += 1);
      if (pass)
 precompute_arguments (flags, num_actuals, args);
      if (pass && (flags & (2048 | 4)))
 start_sequence ();
      adjusted_args_size = args_size;
      unadjusted_args_size
 = compute_argument_block_size (reg_parm_stack_space,
           &adjusted_args_size,
           (pass == 0 ? 0
     : preferred_stack_boundary));
      old_stack_allocated = (cfun->expr->x_stack_pointer_delta) - (cfun->expr->x_pending_stack_adjust);
      if (pass == 0)
 {
   argblock = (global_rtl[GR_VIRTUAL_INCOMING_ARGS]);
   argblock
     = plus_constant_wide ((argblock), (long) ((cfun->pretend_args_size)));
   stored_args_map = sbitmap_alloc (args_size.constant);
   sbitmap_zero (stored_args_map);
 }
      else if (adjusted_args_size.var != 0)
 {
   if (old_stack_level == 0)
     {
       emit_stack_save (SAVE_BLOCK, &old_stack_level, (rtx) 0);
       old_stack_pointer_delta = (cfun->expr->x_stack_pointer_delta);
       old_pending_adj = (cfun->expr->x_pending_stack_adjust);
       (cfun->expr->x_pending_stack_adjust) = 0;
       old_stack_arg_under_construction = stack_arg_under_construction;
       stack_arg_under_construction = 0;
     }
   argblock = push_block (((adjusted_args_size).var == 0 ? gen_rtx_CONST_INT (VOIDmode, (long) ((adjusted_args_size).constant)) : expand_expr (((adjusted_args_size).var == 0 ? size_int_wide ((long) ((adjusted_args_size).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (adjusted_args_size).var), size_int_wide ((long) ((adjusted_args_size).constant), SSIZETYPE))), (rtx) 0, VOIDmode, 0)), 0, 0);
 }
      else
 {
   int needed = adjusted_args_size.constant;
   if (needed > (cfun->outgoing_args_size))
     (cfun->outgoing_args_size) = needed;
   if (must_preallocate)
     {
       if ((target_flags & 0x00001000))
  {
    needed += reg_parm_stack_space;
    highest_outgoing_arg_in_use = ((initial_highest_arg_in_use) > (needed) ? (initial_highest_arg_in_use) : (needed))
                  ;
    stack_usage_map = C_alloca(highest_outgoing_arg_in_use);
    if (initial_highest_arg_in_use)
      memcpy (stack_usage_map, initial_stack_usage_map,
       initial_highest_arg_in_use);
    if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
      memset (&stack_usage_map[initial_highest_arg_in_use], 0,
      (highest_outgoing_arg_in_use
       - initial_highest_arg_in_use));
    needed = 0;
    argblock = (global_rtl[GR_VIRTUAL_OUTGOING_ARGS]);
  }
       else
  {
    if ((cfun->expr->x_inhibit_defer_pop) == 0)
      {
        needed
   = (combine_pending_stack_adjustment_and_call
      (unadjusted_args_size,
       &adjusted_args_size,
       preferred_unit_stack_boundary));
        needed = unadjusted_args_size - needed;
        if (needed < 0)
   {
     (cfun->expr->x_pending_stack_adjust) = -needed;
     do_pending_stack_adjust ();
     needed = 0;
   }
        else
   (cfun->expr->x_pending_stack_adjust) = 0;
      }
    if (needed == 0)
      argblock = (global_rtl[GR_VIRTUAL_OUTGOING_ARGS]);
    else
      {
        argblock = push_block (gen_rtx_CONST_INT (VOIDmode, (long) (needed)), 0, 0);
      }
    argblock = copy_to_reg (argblock);
  }
     }
 }
      if ((target_flags & 0x00001000))
 {
   if (stack_arg_under_construction)
     {
       rtx push_size = gen_rtx_CONST_INT (VOIDmode, (long) (reg_parm_stack_space + adjusted_args_size.constant))
                                         ;
       if (old_stack_level == 0)
  {
    emit_stack_save (SAVE_BLOCK, &old_stack_level,
       (rtx) 0);
    old_stack_pointer_delta = (cfun->expr->x_stack_pointer_delta);
    old_pending_adj = (cfun->expr->x_pending_stack_adjust);
    (cfun->expr->x_pending_stack_adjust) = 0;
    old_stack_arg_under_construction
      = stack_arg_under_construction;
    stack_arg_under_construction = 0;
    stack_usage_map = C_alloca(highest_outgoing_arg_in_use);
    memset (stack_usage_map, 0, highest_outgoing_arg_in_use);
    highest_outgoing_arg_in_use = 0;
  }
       allocate_dynamic_stack_space (push_size, (rtx) 0,
         8);
     }
   for (i = 0; i < num_actuals; i++)
     if (args[i].pass_on_stack)
       {
  argblock = copy_addr_to_reg (argblock);
  break;
       }
 }
      compute_argument_addresses (args, argblock, num_actuals);
      if (1 && argblock == 0
   && adjusted_args_size.constant != unadjusted_args_size)
 {
   if ((cfun->expr->x_pending_stack_adjust)
       && ! (flags & 2048)
       && ! (cfun->expr->x_inhibit_defer_pop))
     {
       (cfun->expr->x_pending_stack_adjust)
  = (combine_pending_stack_adjustment_and_call
     (unadjusted_args_size,
      &adjusted_args_size,
      preferred_unit_stack_boundary));
       do_pending_stack_adjust ();
     }
   else if (argblock == 0)
     anti_adjust_stack (gen_rtx_CONST_INT (VOIDmode, (long) (adjusted_args_size.constant - unadjusted_args_size))
                            );
 }
      ((cfun->expr->x_inhibit_defer_pop) += 1);
      funexp = rtx_for_function_call (fndecl, addr);
      valreg = 0;
      if (((((exp)->common.type))->type.mode) != VOIDmode
   && ! structure_value_addr)
 {
   if (pcc_struct_value)
     valreg = hard_function_value (build_pointer_type (((exp)->common.type)),
       fndecl, (pass == 0));
   else
     valreg = hard_function_value (((exp)->common.type), fndecl, (pass == 0));
 }
      precompute_register_parameters (num_actuals, args, &reg_parm_seen);
      if (((exp)->exp.operands[2]))
 static_chain_value = expand_expr (((exp)->exp.operands[2]),
       (rtx) 0, VOIDmode, 0);
      else
 static_chain_value = 0;
      if ((target_flags & 0x00001000) && pass)
 save_area = save_fixed_argument_area (reg_parm_stack_space, argblock,
           &low_to_save, &high_to_save);
      for (i = 0; i < num_actuals; i++)
 if (args[i].reg == 0 || args[i].pass_on_stack)
   {
     rtx before_arg = get_last_insn ();
     if (store_one_arg (&args[i], argblock, flags,
          adjusted_args_size.var != 0,
          reg_parm_stack_space)
  || (pass == 0
      && check_sibcall_argument_overlap (before_arg,
             &args[i], 1)))
       sibcall_failure = 1;
     if (flags & 1
  && args[i].stack
  && args[i].value1 == args[i].stack)
       call_fusage = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_fmt_e (USE, (VOIDmode), (args[i].value1))), (call_fusage))
                        ;
   }
      if (0)
 store_unaligned_arguments_into_pseudos (args, num_actuals);
      if (reg_parm_seen)
 for (i = 0; i < num_actuals; i++)
   if (args[i].partial != 0 && ! args[i].pass_on_stack)
     {
       rtx before_arg = get_last_insn ();
       if (store_one_arg (&args[i], argblock, flags,
     adjusted_args_size.var != 0,
     reg_parm_stack_space)
    || (pass == 0
        && check_sibcall_argument_overlap (before_arg,
        &args[i], 1)))
  sibcall_failure = 1;
     }
      if (!1 && argblock == 0)
 anti_adjust_stack (gen_rtx_CONST_INT (VOIDmode, (long) (adjusted_args_size.constant - unadjusted_args_size))
                               );
      if (pass != 0 && structure_value_addr && ! structure_value_addr_parm)
 {
   structure_value_addr
     = convert_memory_address ((0 ? DImode : SImode), structure_value_addr);
   emit_move_insn (struct_value,
     force_reg ((0 ? DImode : SImode),
         force_operand (structure_value_addr,
          (rtx) 0)));
   if ((((enum rtx_code) (struct_value)->code) == REG))
     use_reg (&call_fusage, struct_value);
 }
      funexp = prepare_call_address (funexp, static_chain_value,
         &call_fusage, reg_parm_seen, pass == 0);
      load_register_parameters (args, num_actuals, &call_fusage, flags,
    pass == 0, &sibcall_failure);
      emit_queue ();
      before_call = get_last_insn ();
 next_arg_reg = function_arg (&(args_so_far), (VOIDmode), (global_trees[TI_VOID_TYPE]), (1))
                           ;
      if (pass && (cfun->expr->x_stack_pointer_delta) % preferred_unit_stack_boundary)
 fancy_abort ("gcc.c", 390146, "?");
      emit_call_1 (funexp, exp, fndecl, funtype, unadjusted_args_size,
     adjusted_args_size.constant, struct_value_size,
     next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage,
     flags, & args_so_far);
      if (pass && (flags & 2048))
 {
   rtx insns;
   rtx insn;
   unsigned char failed = valreg == 0 || ((enum rtx_code) (valreg)->code) == PARALLEL;
          insns = get_insns ();
   for (insn = insns; insn; insn = (((insn)->u.fld[2]).rtx1))
     if (((enum rtx_code) (insn)->code) == JUMP_INSN)
       failed = 1;
   if (failed)
     {
       end_sequence ();
       emit_insn (insns);
     }
   else
     {
       rtx note = 0;
       rtx temp = gen_reg_rtx (((enum machine_mode) (valreg)->mode));
       if (((enum tree_code) (((exp)->common.type))->common.code) == POINTER_TYPE)
  mark_reg_pointer (temp,
      ((((((exp)->common.type))->common.type))->type.align));
       end_sequence ();
       if (flag_unsafe_math_optimizations
    && fndecl
    && (((fndecl)->decl.built_in_class) != NOT_BUILT_IN)
    && (((fndecl)->decl.u1.f) == BUILT_IN_SQRT
        || ((fndecl)->decl.u1.f) == BUILT_IN_SQRTF
        || ((fndecl)->decl.u1.f) == BUILT_IN_SQRTL))
  note = gen_rtx_fmt_e (SQRT,
          ((enum machine_mode) (temp)->mode),
          args[0].initial_value);
       else
  {
    for (i = 0; i < num_actuals; i++)
      note = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (args[i].initial_value), (note))
                                       ;
    note = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (funexp), (note));
    if (flags & 256)
      note = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode)))))), (note))
        ;
  }
       emit_libcall_block (insns, temp, valreg, note);
       valreg = temp;
     }
 }
      else if (pass && (flags & 4))
 {
   rtx temp = gen_reg_rtx (((enum machine_mode) (valreg)->mode));
   rtx last, insns;
   if (((enum tree_code) (((exp)->common.type))->common.code) == POINTER_TYPE)
     mark_reg_pointer (temp, 128);
   emit_move_insn (temp, valreg);
   last = get_last_insn ();
   (((last)->u.fld[8]).rtx1) =
     gen_rtx_fmt_ee (EXPR_LIST, (REG_NOALIAS), (temp), ((((last)->u.fld[8]).rtx1)));
   insns = get_insns ();
   end_sequence ();
   emit_insn (insns);
   valreg = temp;
 }
      if ((flags & (2 | 64)) || pass == 0)
 {
   rtx last = get_last_insn ();
   while (((enum rtx_code) (last)->code) != CALL_INSN)
     {
       last = (((last)->u.fld[1]).rtx1);
       if (last == before_call)
  fancy_abort ("gcc.c", 390259, "?");
     }
   emit_barrier_after (last);
   if ((cfun->expr->x_inhibit_defer_pop) == 0)
     {
       (cfun->expr->x_stack_pointer_delta) = old_stack_allocated;
       (cfun->expr->x_pending_stack_adjust) = 0;
     }
 }
      if (flags & 64)
 (cfun->calls_longjmp) = 1;
      if (any_pending_cleanups ())
 {
   if (target && (((enum rtx_code) (target)->code) == REG)
       && (((target)->u.fld[0]).rtuint) < 53)
     target = 0;
   sibcall_failure = 1;
 }
      if (((((exp)->common.type))->type.mode) == VOIDmode
   || ignore)
 target = (const_int_rtx[64]);
      else if (structure_value_addr)
 {
   if (target == 0 || !(((enum rtx_code) (target)->code) == MEM))
     {
       target
  = gen_rtx_MEM (((((exp)->common.type))->type.mode),
          memory_address (((((exp)->common.type))->type.mode),
            structure_value_addr));
       set_mem_attributes (target, exp, 1);
     }
 }
      else if (pcc_struct_value)
 {
   target = gen_rtx_MEM (((((exp)->common.type))->type.mode),
    copy_to_reg (valreg));
   set_mem_attributes (target, exp, 1);
 }
      else if (((enum rtx_code) (valreg)->code) == PARALLEL)
 {
   if (target == 0)
     {
       tree nt = build_qualified_type (((exp)->common.type),
           (((((((exp)->common.type))->common.readonly_flag) * 0x1) | (((((exp)->common.type))->common.volatile_flag) * 0x2) | (((((exp)->common.type))->type.restrict_flag) * 0x4))
            | 0x1));
       target = assign_temp (nt, 0, 1, 1);
       preserve_temp_slots (target);
     }
   if (! rtx_equal_p (target, valreg))
     emit_group_store (target, valreg, ((exp)->common.type),
         int_size_in_bytes (((exp)->common.type)));
   sibcall_failure = 1;
 }
      else if (target
        && ((enum machine_mode) (target)->mode) == ((((exp)->common.type))->type.mode)
        && ((enum machine_mode) (target)->mode) == ((enum machine_mode) (valreg)->mode))
 {
   emit_move_insn (target, valreg);
   if ((((enum rtx_code) (target)->code) == MEM))
     sibcall_failure = 1;
 }
      else if (((((exp)->common.type))->type.mode) == BLKmode)
 {
   target = copy_blkmode_from_reg (target, valreg, ((exp)->common.type));
   sibcall_failure = 1;
 }
      else
 {
   if (shift_returned_value (((exp)->common.type), &valreg))
     sibcall_failure = 1;
   target = copy_to_reg (valreg);
 }
      if (targetm.calls.promote_function_return(funtype))
 {
      if ((((enum rtx_code) (target)->code) == REG)
   && ((((exp)->common.type))->type.mode) != BLKmode
   && ((enum machine_mode) (target)->mode) != ((((exp)->common.type))->type.mode))
 {
   tree type = ((exp)->common.type);
   int unsignedp = ((type)->common.unsigned_flag);
   int offset = 0;
   if (((enum machine_mode) (target)->mode)
       != promote_mode (type, ((type)->type.mode), &unsignedp, 1))
     fancy_abort ("gcc.c", 390382, "?");
 if ((0 || 0)
     && ((unsigned short) mode_size[((enum machine_mode) (target)->mode)])
        > ((unsigned short) mode_size[((type)->type.mode)]))
   {
     offset = ((unsigned short) mode_size[((enum machine_mode) (target)->mode)])
       - ((unsigned short) mode_size[((type)->type.mode)]);
     if (! 0)
       offset = (offset / (0 ? 8 : 4)) * (0 ? 8 : 4);
     else if (! 0)
       offset %= (0 ? 8 : 4);
   }
   target = gen_rtx_SUBREG (((type)->type.mode), target, offset);
   (((target))->in_struct) = 1;
   do { rtx const _rtx = ((target)); if ((unsignedp) < 0) _rtx->volatil = 1; else { _rtx->volatil = 0; _rtx->unchanging = (unsignedp); } } while (0);
 }
 }
      if (old_stack_level && ! (flags & 512))
 {
   emit_stack_restore (SAVE_BLOCK, old_stack_level, (rtx) 0);
   (cfun->expr->x_stack_pointer_delta) = old_stack_pointer_delta;
   (cfun->expr->x_pending_stack_adjust) = old_pending_adj;
   stack_arg_under_construction = old_stack_arg_under_construction;
   highest_outgoing_arg_in_use = initial_highest_arg_in_use;
   stack_usage_map = initial_stack_usage_map;
   sibcall_failure = 1;
 }
      else if ((target_flags & 0x00001000) && pass)
 {
   if (save_area)
     restore_fixed_argument_area (save_area, argblock,
      high_to_save, low_to_save);
   for (i = 0; i < num_actuals; i++)
     if (args[i].save_area)
       {
  enum machine_mode save_mode = ((enum machine_mode) (args[i].save_area)->mode);
  rtx stack_area
    = gen_rtx_MEM (save_mode,
     memory_address (save_mode,
       (((args[i].stack_slot)->u.fld[0]).rtx1)));
  if (save_mode != BLKmode)
    emit_move_insn (stack_area, args[i].save_area);
  else
    emit_block_move (stack_area, args[i].save_area,
       gen_rtx_CONST_INT (VOIDmode, (long) (args[i].locate.size.constant)),
       BLOCK_OP_CALL_PARM);
       }
   highest_outgoing_arg_in_use = initial_highest_arg_in_use;
   stack_usage_map = initial_stack_usage_map;
 }
      if ((flags & 8) && cfun->nonlocal_goto_save_area != 0)
 update_nonlocal_goto_save_area ();
      for (i = 0; i < num_actuals; ++i)
 if (args[i].aligned_regs)
   free (args[i].aligned_regs);
      if (pass == 0)
 {
   expand_end_target_temps ();
 }
      if (structure_value_addr != 0 && target != 0
   && (((enum rtx_code) (target)->code) == MEM) && (((target))->unchanging))
 add_function_usage_to
   (last_call_insn (),
    gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (target))), ((rtx) 0))
                  );
      insns = get_insns ();
      end_sequence ();
      if (pass == 0)
 {
   tail_call_insns = insns;
   (cfun->expr->x_pending_stack_adjust) = save_pending_stack_adjust;
   (cfun->expr->x_stack_pointer_delta) = save_stack_pointer_delta;
   for (i = 0; i < num_actuals; i++)
     {
       args[i].value1 = 0;
       args[i].aligned_regs = 0;
       args[i].stack = 0;
     }
   free(stored_args_map);
 }
      else
 {
   normal_call_insns = insns;
   if (! (flags & (2 | 64))
       && old_stack_allocated != (cfun->expr->x_stack_pointer_delta)
     - (cfun->expr->x_pending_stack_adjust))
     fancy_abort ("gcc.c", 390511, "?");
 }
      if (sibcall_failure)
 tail_call_insns = (rtx) 0;
      else
 break;
    }
  if (tail_call_insns)
    {
      emit_insn (tail_call_insns);
      cfun->tail_call_emit = 1;
    }
  else
    emit_insn (normal_call_insns);
  currently_expanding_call--;
  if (flags & 512)
    {
      clear_pending_stack_adjust ();
      emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), ((global_rtl[GR_STACK_POINTER]))));
      emit_move_insn ((global_rtl[GR_VIRTUAL_STACK_DYNAMIC]), (global_rtl[GR_STACK_POINTER]));
      save_stack_pointer ();
    }
  return target;
}
void
fixup_tail_calls (void)
{
  rtx insn;
  tree arg;
  purge_reg_equiv_notes ();
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 purge_mem_unchanging_flag ((((insn)->u.fld[5]).rtx1));
    }
  for (arg = ((current_function_decl)->decl.arguments);
       arg;
       arg = ((arg)->common.chain))
    {
      if ((((enum rtx_code) (((arg)->decl.rtl ? (arg)->decl.rtl : (make_decl_rtl (arg, ((void *)0)), (arg)->decl.rtl)))->code) == REG))
 (((((arg)->decl.rtl ? (arg)->decl.rtl : (make_decl_rtl (arg, ((void *)0)), (arg)->decl.rtl))))->unchanging) = 0;
    }
}
tree
split_complex_values (tree value1s)
{
  tree p;
  for (p = values; p; p = ((p)->common.chain))
    {
      tree type = ((((p)->list.value1))->common.type);
      if (type && ((enum tree_code) (type)->common.code) == COMPLEX_TYPE
   && targetm.calls.split_complex_arg (type))
        goto found;
    }
  return values;
 found:
  values = copy_list (values);
  for (p = values; p; p = ((p)->common.chain))
    {
      tree complex_value = ((p)->list.value1);
      tree complex_type;
      complex_type = ((complex_value)->common.type);
      if (!complex_type)
 continue;
      if (((enum tree_code) (complex_type)->common.code) == COMPLEX_TYPE
   && targetm.calls.split_complex_arg (complex_type))
 {
   tree subtype;
   tree real, imag, next;
   subtype = ((complex_type)->common.type);
   complex_value = save_expr (complex_value);
   real = build1_stat (REALPART_EXPR,subtype,complex_value );
   imag = build1_stat (IMAGPART_EXPR,subtype,complex_value );
   ((p)->list.value1) = real;
   next = ((p)->common.chain);
   imag = build_tree_list_stat((tree) ((void *)0),imag );
   ((p)->common.chain) = imag;
   ((imag)->common.chain) = next;
   p = ((p)->common.chain);
 }
    }
  return values;
}
tree
split_complex_types (tree types)
{
  tree p;
  for (p = types; p; p = ((p)->common.chain))
    {
      tree type = ((p)->list.value1);
      if (((enum tree_code) (type)->common.code) == COMPLEX_TYPE
   && targetm.calls.split_complex_arg (type))
        goto found;
    }
  return types;
 found:
  types = copy_list (types);
  for (p = types; p; p = ((p)->common.chain))
    {
      tree complex_type = ((p)->list.value1);
      if (((enum tree_code) (complex_type)->common.code) == COMPLEX_TYPE
   && targetm.calls.split_complex_arg (complex_type))
 {
   tree next, imag;
   ((p)->list.value1) = ((complex_type)->common.type);
   next = ((p)->common.chain);
   imag = build_tree_list_stat((tree) ((void *)0),((p)->list.value1) );
   ((p)->common.chain) = imag;
   ((imag)->common.chain) = next;
   p = ((p)->common.chain);
 }
    }
  return types;
}
static rtx
emit_library_call_value_1 (int retval, rtx orgfun, rtx value1,
      enum libcall_type fn_type,
      enum machine_mode outmode, int nargs, va_list p)
{
  struct args_size args_size;
  struct args_size original_args_size;
  int argnum;
  rtx fun;
  int inc;
  int count;
  rtx argblock = 0;
  CUMULATIVE_ARGS args_so_far;
  struct arg
  {
    rtx value1;
    enum machine_mode mode;
    rtx reg;
    int partial;
    struct locate_and_pad_arg_data locate;
    rtx save_area;
  };
  struct arg *argvec;
  int old_inhibit_defer_pop = (cfun->expr->x_inhibit_defer_pop);
  rtx call_fusage = 0;
  rtx mem_value = 0;
  rtx valreg;
  int pcc_struct_value = 0;
  int struct_value_size = 0;
  int flags;
  int reg_parm_stack_space = 0;
  int needed;
  rtx before_call;
  tree tfom;
  int low_to_save, high_to_save;
  rtx save_area = 0;
  int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
  char *initial_stack_usage_map = stack_usage_map;
  rtx struct_value = targetm.calls.struct_value_rtx (0, 0);
  reg_parm_stack_space = 0;
  flags = 16;
  switch (fn_type)
    {
    case LCT_NORMAL:
      break;
    case LCT_CONST:
      flags |= 1;
      break;
    case LCT_PURE:
      flags |= 256;
      break;
    case LCT_CONST_MAKE_BLOCK:
      flags |= 1 | 2048;
      break;
    case LCT_PURE_MAKE_BLOCK:
      flags |= 256 | 2048;
      break;
    case LCT_NORETURN:
      flags |= 2;
      break;
    case LCT_THROW:
      flags = 2;
      break;
    case LCT_ALWAYS_RETURN:
      flags = 1024;
      break;
    case LCT_RETURNS_TWICE:
      flags = 32;
      break;
    }
  fun = orgfun;
  if (cfun->preferred_stack_boundary < ix86_preferred_stack_boundary)
    cfun->preferred_stack_boundary = ix86_preferred_stack_boundary;
  if (outmode != VOIDmode)
    {
      tfom = lang_hooks.types.type_for_mode (outmode, 0);
      if (aggregate_value_p (tfom, 0))
 {
   struct_value_size = ((unsigned short) mode_size[outmode]);
   if (value1 != 0 && (((enum rtx_code) (value1)->code) == MEM))
     mem_value = value1;
   else
     mem_value = assign_temp (tfom, 0, 1, 1);
   flags &= ~(1 | 256 | 2048);
 }
    }
  else
    tfom = global_trees[TI_VOID_TYPE];
  argvec = C_alloca((nargs + 1) * sizeof (struct arg));
  memset (argvec, 0, (nargs + 1) * sizeof (struct arg));
  init_cumulative_args (&(args_so_far), ((tree) ((void *)0)), (fun), (0));
  args_size.constant = 0;
  args_size.var = 0;
  count = 0;
  if (flags & 2048)
    start_sequence ();
  push_temp_slots ();
  if (mem_value && struct_value == 0 && ! pcc_struct_value)
    {
      rtx addr = (((mem_value)->u.fld[0]).rtx1);
      nargs++;
      if (!(((enum rtx_code) (addr)->code) == REG) && !(((enum rtx_code) (addr)->code) == MEM)
   && ! (((rtx_class[(int) (((enum rtx_code) (addr)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (addr)->code) == CONST_VECTOR) && legitimate_constant_p (addr)))
 addr = force_operand (addr, (rtx) 0);
      argvec[count].value1 = addr;
      argvec[count].mode = (0 ? DImode : SImode);
      argvec[count].partial = 0;
      argvec[count].reg = function_arg (&(args_so_far), ((0 ? DImode : SImode)), ((tree) ((void *)0)), (1));
      if (0)
 fancy_abort ("gcc.c", 390863, "?");
      locate_and_pad_parm ((0 ? DImode : SImode), (tree) ((void *)0),
      argvec[count].reg != 0,
      0, (tree) ((void *)0), &args_size, &argvec[count].locate);
      if (argvec[count].reg == 0 || argvec[count].partial != 0
   || reg_parm_stack_space > 0)
 args_size.constant += argvec[count].locate.size.constant;
      function_arg_advance (&(args_so_far), ((0 ? DImode : SImode)), ((tree) 0), (1));
      count++;
    }
  for (; count < nargs; count++)
    {
      rtx val = __builtin_va_arg(p,rtx1);
      enum machine_mode mode = __builtin_va_arg(p,machine_mode);
      if (mode == BLKmode
   || (((enum machine_mode) (val)->mode) != mode && ((enum machine_mode) (val)->mode) != VOIDmode))
 fancy_abort ("gcc.c", 390892, "?");
      if (!(((enum rtx_code) (val)->code) == REG) && !(((enum rtx_code) (val)->code) == MEM)
   && ! (((rtx_class[(int) (((enum rtx_code) (val)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (val)->code) == CONST_VECTOR) && legitimate_constant_p (val)))
 val = force_operand (val, (rtx) 0);
      if (function_arg_pass_by_reference(&args_so_far, mode, (tree) ((void *)0), 1))
 {
   rtx slot;
   int must_copy = 1
     ;
   if (flags & 2048)
     {
       rtx insns = get_insns ();
       end_sequence ();
       emit_insn (insns);
     }
   flags &= ~(1 | 256 | 2048);
   if (flags & 1)
     {
       flags &= ~1;
       flags |= 256;
     }
   if (((enum machine_mode) (val)->mode) == MEM && ! must_copy)
     slot = val;
   else if (must_copy)
     {
       slot = assign_temp (lang_hooks.types.type_for_mode (mode, 0),
      0, 1, 1);
       emit_move_insn (slot, val);
     }
   else
     {
       tree type = lang_hooks.types.type_for_mode (mode, 0);
       slot
  = gen_rtx_MEM (mode,
          expand_expr (build1_stat (ADDR_EXPR,build_pointer_type (type),make_tree (type, val) )
                                ,
         (rtx) 0, VOIDmode, 0));
     }
   call_fusage = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_fmt_e (USE, (VOIDmode), (slot))), (call_fusage))
                    ;
   if (must_copy)
     call_fusage = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (slot))), (call_fusage))
                      ;
   mode = (0 ? DImode : SImode);
   val = force_operand ((((slot)->u.fld[0]).rtx1), (rtx) 0);
 }
      argvec[count].value1 = val;
      argvec[count].mode = mode;
      argvec[count].reg = function_arg (&(args_so_far), (mode), ((tree) ((void *)0)), (1));
      argvec[count].partial
 = 0;
      locate_and_pad_parm (mode, (tree) ((void *)0),
      argvec[count].reg != 0,
      argvec[count].partial,
      (tree) ((void *)0), &args_size, &argvec[count].locate);
      if (argvec[count].locate.size.var)
 fancy_abort ("gcc.c", 390987, "?");
      if (argvec[count].reg == 0 || argvec[count].partial != 0
   || reg_parm_stack_space > 0)
 args_size.constant += argvec[count].locate.size.constant;
      function_arg_advance (&(args_so_far), (mode), ((tree) 0), (1));
    }
  assemble_external_libcall (fun);
  original_args_size = args_size;
  args_size.constant = (((args_size.constant
     + (cfun->expr->x_stack_pointer_delta)
     + (ix86_preferred_stack_boundary / 8) - 1)
     / (ix86_preferred_stack_boundary / 8)
     * (ix86_preferred_stack_boundary / 8))
    - (cfun->expr->x_stack_pointer_delta));
  args_size.constant = ((args_size.constant) > (reg_parm_stack_space) ? (args_size.constant) : (reg_parm_stack_space))
                            ;
  args_size.constant -= reg_parm_stack_space;
  if (args_size.constant > (cfun->outgoing_args_size))
    (cfun->outgoing_args_size) = args_size.constant;
  if ((target_flags & 0x00001000))
    {
      needed = args_size.constant;
      needed += reg_parm_stack_space;
      highest_outgoing_arg_in_use = ((initial_highest_arg_in_use) > (needed) ? (initial_highest_arg_in_use) : (needed))
             ;
      stack_usage_map = C_alloca(highest_outgoing_arg_in_use);
      if (initial_highest_arg_in_use)
 memcpy (stack_usage_map, initial_stack_usage_map,
  initial_highest_arg_in_use);
      if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
 memset (&stack_usage_map[initial_highest_arg_in_use], 0,
        highest_outgoing_arg_in_use - initial_highest_arg_in_use);
      needed = 0;
      if (virtuals_instantiated)
 argblock = plus_constant_wide (((global_rtl[GR_STACK_POINTER])), (long) (0));
      else
 argblock = (global_rtl[GR_VIRTUAL_OUTGOING_ARGS]);
    }
  else
    {
      if (!((!(target_flags & 0x00000800)) && !(target_flags & 0x00001000)))
 argblock = push_block (gen_rtx_CONST_INT (VOIDmode, (long) (args_size.constant)), 0, 0);
    }
  if (argblock == 0 && 1)
    anti_adjust_stack (gen_rtx_CONST_INT (VOIDmode, (long) (args_size.constant - original_args_size.constant))
                                  );
  if (1)
    {
      inc = -1;
      argnum = nargs - 1;
    }
  else
    {
      inc = 1;
      argnum = 0;
    }
  if ((target_flags & 0x00001000))
    {
      save_area = save_fixed_argument_area (reg_parm_stack_space, argblock,
         &low_to_save, &high_to_save);
    }
  for (count = 0; count < nargs; count++, argnum += inc)
    {
      enum machine_mode mode = argvec[argnum].mode;
      rtx val = argvec[argnum].value1;
      rtx reg = argvec[argnum].reg;
      int partial = argvec[argnum].partial;
      int lower_bound = 0, upper_bound = 0, i;
      if (! (reg != 0 && partial == 0))
 {
   if ((target_flags & 0x00001000))
     {
       lower_bound = argvec[argnum].locate.offset.constant;
       upper_bound = lower_bound + argvec[argnum].locate.size.constant;
       i = lower_bound;
       if (i < reg_parm_stack_space)
  i = reg_parm_stack_space;
       while (i < upper_bound && stack_usage_map[i] == 0)
  i++;
       if (i < upper_bound)
  {
    unsigned int size
      = argvec[argnum].locate.size.constant * 8;
    enum machine_mode save_mode
      = mode_for_size (size, MODE_INT, 1);
    rtx adr
      = plus_constant_wide ((argblock), (long) (argvec[argnum].locate.offset.constant))
                                               ;
    rtx stack_area
      = gen_rtx_MEM (save_mode, memory_address (save_mode, adr));
    if (save_mode == BLKmode)
      {
        argvec[argnum].save_area
   = assign_stack_temp (BLKmode,
                 argvec[argnum].locate.size.constant,
          0);
        emit_block_move (validize_mem (argvec[argnum].save_area),
             stack_area,
           gen_rtx_CONST_INT (VOIDmode, (long) (argvec[argnum].locate.size.constant)),
           BLOCK_OP_CALL_PARM);
      }
    else
      {
        argvec[argnum].save_area = gen_reg_rtx (save_mode);
        emit_move_insn (argvec[argnum].save_area, stack_area);
      }
  }
     }
   emit_push_insn (val, mode, (tree) ((void *)0), (rtx) 0, (8 * (0 ? 8 : 4)),
     partial, reg, 0, argblock,
     gen_rtx_CONST_INT (VOIDmode, (long) (argvec[argnum].locate.offset.constant)),
     reg_parm_stack_space,
     ((argvec[argnum].locate.alignment_pad).var == 0 ? gen_rtx_CONST_INT (VOIDmode, (long) ((argvec[argnum].locate.alignment_pad).constant)) : expand_expr (((argvec[argnum].locate.alignment_pad).var == 0 ? size_int_wide ((long) ((argvec[argnum].locate.alignment_pad).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (argvec[argnum].locate.alignment_pad).var), size_int_wide ((long) ((argvec[argnum].locate.alignment_pad).constant), SSIZETYPE))), (rtx) 0, VOIDmode, 0)));
   if ((target_flags & 0x00001000))
     for (i = lower_bound; i < upper_bound; i++)
       stack_usage_map[i] = 1;
   ((cfun->expr->x_inhibit_defer_pop) += 1);
 }
    }
  if (argblock == 0 && !1)
    anti_adjust_stack (gen_rtx_CONST_INT (VOIDmode, (long) (args_size.constant - original_args_size.constant))
                                  );
  if (1)
    argnum = nargs - 1;
  else
    argnum = 0;
  fun = prepare_call_address (fun, ((void *)0), &call_fusage, 0, 0);
  for (count = 0; count < nargs; count++, argnum += inc)
    {
      rtx val = argvec[argnum].value1;
      rtx reg = argvec[argnum].reg;
      int partial = argvec[argnum].partial;
      if (reg != 0 && ((enum rtx_code) (reg)->code) == PARALLEL)
 emit_group_load (reg, val, (tree) ((void *)0), ((unsigned short) mode_size[((enum machine_mode) (val)->mode)]));
      else if (reg != 0 && partial == 0)
 emit_move_insn (reg, val);
      ((cfun->expr->x_inhibit_defer_pop) += 1);
    }
  for (count = 0; count < nargs; count++)
    {
      rtx reg = argvec[count].reg;
      if (reg != 0 && ((enum rtx_code) (reg)->code) == PARALLEL)
 use_group_regs (&call_fusage, reg);
      else if (reg != 0)
 use_reg (&call_fusage, reg);
    }
  if (mem_value != 0 && struct_value != 0 && ! pcc_struct_value)
    {
      emit_move_insn (struct_value,
        force_reg ((0 ? DImode : SImode),
     force_operand ((((mem_value)->u.fld[0]).rtx1),
      (rtx) 0)));
      if ((((enum rtx_code) (struct_value)->code) == REG))
 use_reg (&call_fusage, struct_value);
    }
  ((cfun->expr->x_inhibit_defer_pop) += 1);
  valreg = (mem_value == 0 && outmode != VOIDmode
     ? hard_libcall_value (outmode) : (rtx) 0);
  if ((cfun->expr->x_stack_pointer_delta) & (ix86_preferred_stack_boundary / 8 - 1))
    fancy_abort ("gcc.c", 391251, "?");
  before_call = get_last_insn ();
  emit_call_1 (fun, ((void *)0),
        get_identifier ((((orgfun)->u.fld[0]).rtstr)),
        build_function_type (tfom, (tree) ((void *)0)),
        original_args_size.constant, args_size.constant,
        struct_value_size,
        function_arg (&(args_so_far), (VOIDmode), (global_trees[TI_VOID_TYPE]), (1)),
        valreg,
        old_inhibit_defer_pop + 1, call_fusage, flags, & args_so_far);
  if (flags & (2 | 64))
    {
      rtx last = get_last_insn ();
      while (((enum rtx_code) (last)->code) != CALL_INSN)
 {
   last = (((last)->u.fld[1]).rtx1);
   if (last == before_call)
     fancy_abort ("gcc.c", 391287, "?");
 }
      emit_barrier_after (last);
    }
  ((cfun->expr->x_inhibit_defer_pop) -= 1);
  if (flags & 2048)
    {
      rtx insns;
      if (valreg == 0)
 {
   insns = get_insns ();
   end_sequence ();
   emit_insn (insns);
 }
      else
 {
   rtx note = 0;
   rtx temp;
   int i;
   if (((enum rtx_code) (valreg)->code) == PARALLEL)
     {
       temp = gen_reg_rtx (outmode);
       emit_group_store (temp, valreg, (tree) ((void *)0),
    ((unsigned short) mode_size[outmode]));
       valreg = temp;
     }
   temp = gen_reg_rtx (((enum machine_mode) (valreg)->mode));
   for (i = 0; i < nargs; i++)
     note = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (argvec[i].value1), (note));
   note = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (fun), (note));
   insns = get_insns ();
   end_sequence ();
   if (flags & 256)
     note = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_fmt_e (USE, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode)))))), (note))
        ;
   emit_libcall_block (insns, temp, valreg, note);
   valreg = temp;
 }
    }
  pop_temp_slots ();
  if (outmode != VOIDmode && retval)
    {
      if (mem_value)
 {
   if (value1 == 0)
     value1 = mem_value;
   if (value1 != mem_value)
     emit_move_insn (value1, mem_value);
 }
      else if (((enum rtx_code) (valreg)->code) == PARALLEL)
 {
   if (value1 == 0)
     value1 = gen_reg_rtx (outmode);
   emit_group_store (value1, valreg, (tree) ((void *)0), ((unsigned short) mode_size[outmode]));
 }
      else if (value1 != 0)
 emit_move_insn (value1, valreg);
      else
 value1 = valreg;
    }
  if ((target_flags & 0x00001000))
    {
      if (save_area)
 restore_fixed_argument_area (save_area, argblock,
         high_to_save, low_to_save);
      for (count = 0; count < nargs; count++)
 if (argvec[count].save_area)
   {
     enum machine_mode save_mode = ((enum machine_mode) (argvec[count].save_area)->mode);
     rtx adr = plus_constant_wide ((argblock), (long) (argvec[count].locate.offset.constant))
                                              ;
     rtx stack_area = gen_rtx_MEM (save_mode,
       memory_address (save_mode, adr));
     if (save_mode == BLKmode)
       emit_block_move (stack_area,
            validize_mem (argvec[count].save_area),
          gen_rtx_CONST_INT (VOIDmode, (long) (argvec[count].locate.size.constant)),
          BLOCK_OP_CALL_PARM);
     else
       emit_move_insn (stack_area, argvec[count].save_area);
   }
      highest_outgoing_arg_in_use = initial_highest_arg_in_use;
      stack_usage_map = initial_stack_usage_map;
    }
  return value1;
}
void
emit_library_call (rtx orgfun, enum libcall_type fn_type,
     enum machine_mode outmode, int nargs, ...)
{
  va_list p;
  __builtin_va_start(p,nargs);
  emit_library_call_value_1 (0, orgfun, (rtx) 0, fn_type, outmode, nargs, p);
  __builtin_va_end(p);
}
rtx
emit_library_call_value (rtx orgfun, rtx value1,
    enum libcall_type fn_type,
    enum machine_mode outmode, int nargs, ...)
{
  rtx result;
  va_list p;
  __builtin_va_start(p,nargs);
  result = emit_library_call_value_1 (1, orgfun, value1, fn_type, outmode,
          nargs, p);
  __builtin_va_end(p);
  return result;
}
static int
store_one_arg (struct arg_data *arg, rtx argblock, int flags,
        int variable_size , int reg_parm_stack_space)
{
  tree pval = arg->tree_value;
  rtx reg = 0;
  int partial = 0;
  int used = 0;
  int i, lower_bound = 0, upper_bound = 0;
  int sibcall_failure = 0;
  if (((enum tree_code) (pval)->common.code) == ERROR_MARK)
    return 1;
  push_temp_slots ();
  if ((target_flags & 0x00001000) && !(flags & 128))
    {
      if (argblock && ! variable_size && arg->stack)
 {
   if (((enum rtx_code) ((((arg->stack_slot)->u.fld[0]).rtx1))->code) == PLUS)
     lower_bound = ((((((((arg->stack_slot)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
   else
     lower_bound = 0;
   upper_bound = lower_bound + arg->locate.size.constant;
   i = lower_bound;
   if (i < reg_parm_stack_space)
     i = reg_parm_stack_space;
   while (i < upper_bound && stack_usage_map[i] == 0)
     i++;
   if (i < upper_bound)
     {
       unsigned int size = arg->locate.size.constant * 8;
       enum machine_mode save_mode = mode_for_size (size, MODE_INT, 1);
       rtx adr = memory_address (save_mode, (((arg->stack_slot)->u.fld[0]).rtx1));
       rtx stack_area = gen_rtx_MEM (save_mode, adr);
       if (save_mode == BLKmode)
  {
    tree ot = ((arg->tree_value)->common.type);
    tree nt = build_qualified_type (ot, (((((ot)->common.readonly_flag) * 0x1) | (((ot)->common.volatile_flag) * 0x2) | (((ot)->type.restrict_flag) * 0x4))
             | 0x1));
    arg->save_area = assign_temp (nt, 0, 1, 1);
    preserve_temp_slots (arg->save_area);
    emit_block_move (validize_mem (arg->save_area), stack_area,
       expr_size (arg->tree_value),
       BLOCK_OP_CALL_PARM);
  }
       else
  {
    arg->save_area = gen_reg_rtx (save_mode);
    emit_move_insn (arg->save_area, stack_area);
  }
     }
 }
    }
  if (! arg->pass_on_stack)
    {
      if (flags & 128)
 reg = arg->tail_call_reg;
      else
 reg = arg->reg;
      partial = arg->partial;
    }
  if (reg != 0 && partial == 0)
    fancy_abort ("gcc.c", 391567, "?");
  if (arg->n_aligned_regs != 0)
    reg = 0;
  if (arg->value1 == 0)
    {
      if (arg->pass_on_stack)
 stack_arg_under_construction++;
      arg->value1 = expand_expr (pval,
    (partial
     || ((((pval)->common.type))->type.mode) != arg->mode)
    ? (rtx) 0 : arg->stack,
    VOIDmode, EXPAND_STACK_PARM);
      if (arg->mode != ((((pval)->common.type))->type.mode))
 arg->value1 = convert_modes (arg->mode, ((((pval)->common.type))->type.mode),
        arg->value1, arg->unsignedp);
      if (arg->pass_on_stack)
 stack_arg_under_construction--;
    }
  if (flags & 8)
    do_pending_stack_adjust ();
  if (arg->value1 == arg->stack)
    ;
  else if (arg->mode != BLKmode)
    {
      int size;
      size = ((unsigned short) mode_size[arg->mode]);
      size = (0 ? (((size) + 7) & (-8)) : (((size) + 1) & (-2)));
      used = size;
      if (none != (! 0 ? upward : ((((arg->mode)) == BLKmode ? (((((pval)->common.type))) && ((enum tree_code) ((((((pval)->common.type)))->type.size))->common.code) == INTEGER_CST && int_size_in_bytes ((((pval)->common.type))) < ((8 * (0 ? 8 : 4)) / 8)) : ((unsigned short) (((unsigned short) mode_size[(arg->mode)]) * 8)) < (8 * (0 ? 8 : 4))) ? downward : upward)))
 used = (((size + (8 * (0 ? 8 : 4)) / 8 - 1)
   / ((8 * (0 ? 8 : 4)) / 8))
  * ((8 * (0 ? 8 : 4)) / 8));
      emit_push_insn (arg->value1, arg->mode, ((pval)->common.type), (rtx) 0,
        (8 * (0 ? 8 : 4)), partial, reg, used - size, argblock,
        ((arg->locate.offset).var == 0 ? gen_rtx_CONST_INT (VOIDmode, (long) ((arg->locate.offset).constant)) : expand_expr (((arg->locate.offset).var == 0 ? size_int_wide ((long) ((arg->locate.offset).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (arg->locate.offset).var), size_int_wide ((long) ((arg->locate.offset).constant), SSIZETYPE))), (rtx) 0, VOIDmode, 0)), reg_parm_stack_space,
        ((arg->locate.alignment_pad).var == 0 ? gen_rtx_CONST_INT (VOIDmode, (long) ((arg->locate.alignment_pad).constant)) : expand_expr (((arg->locate.alignment_pad).var == 0 ? size_int_wide ((long) ((arg->locate.alignment_pad).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (arg->locate.alignment_pad).var), size_int_wide ((long) ((arg->locate.alignment_pad).constant), SSIZETYPE))), (rtx) 0, VOIDmode, 0)));
      if (partial == 0)
 arg->value1 = arg->stack;
    }
  else
    {
      unsigned int parm_align;
      int excess;
      rtx size_rtx;
      if (arg->locate.size.var != 0)
 {
   excess = 0;
   size_rtx = ((arg->locate.size).var == 0 ? gen_rtx_CONST_INT (VOIDmode, (long) ((arg->locate.size).constant)) : expand_expr (((arg->locate.size).var == 0 ? size_int_wide ((long) ((arg->locate.size).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (arg->locate.size).var), size_int_wide ((long) ((arg->locate.size).constant), SSIZETYPE))), (rtx) 0, VOIDmode, 0));
 }
      else
 {
   if (reg && ((enum rtx_code) (reg)->code) == PARALLEL)
   {
     rtx elt = ((((((((reg)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1);
     excess = (arg->locate.size.constant
        - int_size_in_bytes (((pval)->common.type))
        + partial * ((unsigned short) mode_size[((enum machine_mode) (elt)->mode)]));
   }
   else
     excess = (arg->locate.size.constant
        - int_size_in_bytes (((pval)->common.type))
        + partial * (0 ? 8 : 4));
   size_rtx = expand_expr (size_in_bytes (((pval)->common.type)),
      (rtx) 0, ((sizetype_tab[(int) SIZETYPE])->type.mode), 0);
 }
      parm_align = (((8 * (0 ? 8 : 4))) > (((((pval)->common.type))->type.align)) ? ((8 * (0 ? 8 : 4))) : (((((pval)->common.type))->type.align)));
      if ((! 0 ? upward : ((((arg->mode)) == BLKmode ? (((((pval)->common.type))) && ((enum tree_code) ((((((pval)->common.type)))->type.size))->common.code) == INTEGER_CST && int_size_in_bytes ((((pval)->common.type))) < ((8 * (0 ? 8 : 4)) / 8)) : ((unsigned short) (((unsigned short) mode_size[(arg->mode)]) * 8)) < (8 * (0 ? 8 : 4))) ? downward : upward)) == downward)
 {
   if (arg->locate.size.var)
     parm_align = 8;
   else if (excess)
     {
       unsigned int excess_align = (excess & -excess) * 8;
       parm_align = ((parm_align) < (excess_align) ? (parm_align) : (excess_align));
     }
 }
      if ((flags & 128) && (((enum rtx_code) (arg->value1)->code) == MEM))
 {
   rtx x = arg->value1;
   int i = 0;
   if ((((x)->u.fld[0]).rtx1) == (cfun->internal_arg_pointer)
       || (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
    && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1) ==
       (cfun->internal_arg_pointer)
    && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT))
     {
       if ((((x)->u.fld[0]).rtx1) != (cfun->internal_arg_pointer))
  i = ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
       if (arg->locate.offset.var || ((enum rtx_code) (size_rtx)->code) != CONST_INT)
  fancy_abort ("gcc.c", 391741, "?");
       if (arg->locate.offset.constant > i)
  {
    if (arg->locate.offset.constant < i + ((size_rtx)->u.hwint[0]))
      sibcall_failure = 1;
  }
       else if (arg->locate.offset.constant < i)
  {
    if (i < arg->locate.offset.constant + ((size_rtx)->u.hwint[0]))
      sibcall_failure = 1;
  }
     }
 }
      emit_push_insn (arg->value1, arg->mode, ((pval)->common.type), size_rtx,
        parm_align, partial, reg, excess, argblock,
        ((arg->locate.offset).var == 0 ? gen_rtx_CONST_INT (VOIDmode, (long) ((arg->locate.offset).constant)) : expand_expr (((arg->locate.offset).var == 0 ? size_int_wide ((long) ((arg->locate.offset).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (arg->locate.offset).var), size_int_wide ((long) ((arg->locate.offset).constant), SSIZETYPE))), (rtx) 0, VOIDmode, 0)), reg_parm_stack_space,
        ((arg->locate.alignment_pad).var == 0 ? gen_rtx_CONST_INT (VOIDmode, (long) ((arg->locate.alignment_pad).constant)) : expand_expr (((arg->locate.alignment_pad).var == 0 ? size_int_wide ((long) ((arg->locate.alignment_pad).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (arg->locate.alignment_pad).var), size_int_wide ((long) ((arg->locate.alignment_pad).constant), SSIZETYPE))), (rtx) 0, VOIDmode, 0)));
      if (partial == 0)
 arg->value1 = arg->stack_slot;
    }
  if ((target_flags & 0x00001000) && !(flags & 128)
      && argblock && ! variable_size && arg->stack)
    for (i = lower_bound; i < upper_bound; i++)
      stack_usage_map[i] = 1;
  ((cfun->expr->x_inhibit_defer_pop) += 1);
  emit_queue ();
  preserve_temp_slots ((rtx) 0);
  free_temp_slots ();
  pop_temp_slots ();
  return sibcall_failure;
}
unsigned char
default_must_pass_in_stack (enum machine_mode mode, tree type)
{
  if (!type)
    return 0;
  if (((enum tree_code) (((type)->type.size))->common.code) != INTEGER_CST)
    return 1;
  if (((type)->common.addressable_flag))
    return 1;
  if (mode == BLKmode
      && int_size_in_bytes (type) % ((8 * (0 ? 8 : 4)) / 8)
      && ((! 0 ? upward : ((((mode)) == BLKmode ? (((type)) && ((enum tree_code) ((((type))->type.size))->common.code) == INTEGER_CST && int_size_in_bytes ((type)) < ((8 * (0 ? 8 : 4)) / 8)) : ((unsigned short) (((unsigned short) mode_size[(mode)]) * 8)) < (8 * (0 ? 8 : 4))) ? downward : upward))
   == (0 ? upward : downward)))
    return 1;
  return 0;
}
struct obstack flow_obstack;
static char *flow_firstobj;
int n_basic_blocks;
int last_basic_block;
int n_edges;
varray_type basic_block_info;
basic_block ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR;
alloc_pool rbi_pool;
void debug_flow_info (void);
static void free_edge (edge);
void
init_flow (void)
{
  static int initialized;
  n_edges = 0;
  if (!initialized)
    {
      _obstack_begin ((&flow_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
      flow_firstobj = (( ((&flow_obstack))->temp = ((0)), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0)));
      initialized = 1;
    }
  else
    {
      ( (&flow_obstack)->temp = (char *) (flow_firstobj) - (char *) (&flow_obstack)->chunk, (((&flow_obstack)->temp > 0 && (&flow_obstack)->temp < (&flow_obstack)->chunk_limit - (char *) (&flow_obstack)->chunk) ? (int) ((&flow_obstack)->next_free = (&flow_obstack)->object_base = (&flow_obstack)->temp + (char *) (&flow_obstack)->chunk) : (((obstack_free) ((&flow_obstack), (&flow_obstack)->temp + (char *) (&flow_obstack)->chunk), 0), 0)));
      flow_firstobj = (( ((&flow_obstack))->temp = ((0)), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0)));
    }
  ENTRY_BLOCK_PTR = ggc_alloc_cleared_stat (sizeof (*ENTRY_BLOCK_PTR) );
  ENTRY_BLOCK_PTR->index = (-1);
  EXIT_BLOCK_PTR = ggc_alloc_cleared_stat (sizeof (*EXIT_BLOCK_PTR) );
  EXIT_BLOCK_PTR->index = (-2);
  ENTRY_BLOCK_PTR->next_bb = EXIT_BLOCK_PTR;
  EXIT_BLOCK_PTR->prev_bb = ENTRY_BLOCK_PTR;
}
static void
free_edge (edge e )
{
  n_edges--;
}
void
clear_edges (void)
{
  basic_block bb;
  edge e;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e = bb->succ;
      while (e)
 {
   edge next = e->succ_next;
   free_edge (e);
   e = next;
 }
      bb->succ = ((void *)0);
      bb->pred = ((void *)0);
    }
  e = ENTRY_BLOCK_PTR->succ;
  while (e)
    {
      edge next = e->succ_next;
      free_edge (e);
      e = next;
    }
  EXIT_BLOCK_PTR->pred = ((void *)0);
  ENTRY_BLOCK_PTR->succ = ((void *)0);
  if (n_edges)
    fancy_abort ("gcc.c", 391992, "?");
}
basic_block
alloc_block (void)
{
  basic_block bb;
  bb = ggc_alloc_cleared_stat (sizeof (*bb) );
  return bb;
}
void
alloc_rbi_pool (void)
{
  rbi_pool = create_alloc_pool ("rbi pool",
    sizeof (struct reorder_block_def),
    n_basic_blocks + 2);
}
void
free_rbi_pool (void)
{
  free_alloc_pool (rbi_pool);
}
void
initialize_bb_rbi (basic_block bb)
{
  if (bb->rbi)
    fancy_abort ("gcc.c", 392030, "?");
  bb->rbi = pool_alloc (rbi_pool);
  memset (bb->rbi, 0, sizeof (struct reorder_block_def));
}
void
link_block (basic_block b, basic_block after)
{
  b->next_bb = after->next_bb;
  b->prev_bb = after;
  after->next_bb = b;
  b->next_bb->prev_bb = b;
}
void
unlink_block (basic_block b)
{
  b->next_bb->prev_bb = b->prev_bb;
  b->prev_bb->next_bb = b->next_bb;
  b->prev_bb = ((void *)0);
  b->next_bb = ((void *)0);
}
void
compact_blocks (void)
{
  int i;
  basic_block bb;
  i = 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      (((basic_block_info)->data.bb[(i)])) = bb;
      bb->index = i;
      i++;
    }
  if (i != n_basic_blocks)
    fancy_abort ("gcc.c", 392071, "?");
  for (; i < last_basic_block; i++)
    (((basic_block_info)->data.bb[(i)])) = ((void *)0);
  last_basic_block = n_basic_blocks;
}
void
expunge_block (basic_block b)
{
  unlink_block (b);
  (((basic_block_info)->data.bb[(b->index)])) = ((void *)0);
  n_basic_blocks--;
}
edge
unchecked_make_edge (basic_block src, basic_block dst, int flags)
{
  edge e;
  e = ggc_alloc_cleared_stat (sizeof (*e) );
  n_edges++;
  e->succ_next = src->succ;
  e->pred_next = dst->pred;
  e->src = src;
  e->dest = dst;
  e->flags = flags;
  src->succ = e;
  dst->pred = e;
  return e;
}
edge
cached_make_edge (sbitmap *edge_cache, basic_block src, basic_block dst, int flags)
{
  int use_edge_cache;
  edge e;
  use_edge_cache = (edge_cache
      && src != ENTRY_BLOCK_PTR && dst != EXIT_BLOCK_PTR);
  switch (use_edge_cache)
    {
    default:
      if (! ((edge_cache[src->index])->elms [(dst->index) / ((unsigned) (8 * 4))] >> (dst->index) % ((unsigned) (8 * 4)) & 1))
 break;
      if (flags == 0)
 return ((void *)0);
    case 0:
      for (e = src->succ; e; e = e->succ_next)
 if (e->dest == dst)
   {
     e->flags |= flags;
     return ((void *)0);
   }
      break;
    }
  e = unchecked_make_edge (src, dst, flags);
  if (use_edge_cache)
    ((edge_cache[src->index])->elms [(dst->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (dst->index) % ((unsigned) (8 * 4)));
  return e;
}
edge
make_edge (basic_block src, basic_block dest, int flags)
{
  return cached_make_edge (((void *)0), src, dest, flags);
}
edge
make_single_succ_edge (basic_block src, basic_block dest, int flags)
{
  edge e = make_edge (src, dest, flags);
  e->probability = 10000;
  e->count = src->count;
  return e;
}
void
remove_edge (edge e)
{
  edge last_pred = ((void *)0);
  edge last_succ = ((void *)0);
  edge tmp;
  basic_block src, dest;
  src = e->src;
  dest = e->dest;
  for (tmp = src->succ; tmp && tmp != e; tmp = tmp->succ_next)
    last_succ = tmp;
  if (!tmp)
    fancy_abort ("gcc.c", 392196, "?");
  if (last_succ)
    last_succ->succ_next = e->succ_next;
  else
    src->succ = e->succ_next;
  for (tmp = dest->pred; tmp && tmp != e; tmp = tmp->pred_next)
    last_pred = tmp;
  if (!tmp)
    fancy_abort ("gcc.c", 392206, "?");
  if (last_pred)
    last_pred->pred_next = e->pred_next;
  else
    dest->pred = e->pred_next;
  free_edge (e);
}
void
redirect_edge_succ (edge e, basic_block new_succ)
{
  edge *pe;
  for (pe = &e->dest->pred; *pe != e; pe = &(*pe)->pred_next)
    continue;
  *pe = (*pe)->pred_next;
  e->pred_next = new_succ->pred;
  new_succ->pred = e;
  e->dest = new_succ;
}
edge
redirect_edge_succ_nodup (edge e, basic_block new_succ)
{
  edge s;
  for (s = e->src->succ; s; s = s->succ_next)
    if (s->dest == new_succ && s != e)
      break;
  if (s)
    {
      s->flags |= e->flags;
      s->probability += e->probability;
      if (s->probability > 10000)
 s->probability = 10000;
      s->count += e->count;
      remove_edge (e);
      e = s;
    }
  else
    redirect_edge_succ (e, new_succ);
  return e;
}
void
redirect_edge_pred (edge e, basic_block new_pred)
{
  edge *pe;
  for (pe = &e->src->succ; *pe != e; pe = &(*pe)->succ_next)
    continue;
  *pe = (*pe)->succ_next;
  e->succ_next = new_pred->succ;
  new_pred->succ = e;
  e->src = new_pred;
}
void
clear_bb_flags (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    bb->flags = 0;
}
void
dump_flow_info (FILE *file)
{
  int i;
  basic_block bb;
  static const char * const reg_class_names[] = { "NO_REGS", "AREG", "DREG", "CREG", "BREG", "SIREG", "DIREG", "AD_REGS", "Q_REGS", "NON_Q_REGS", "INDEX_REGS", "LEGACY_REGS", "GENERAL_REGS", "FP_TOP_REG", "FP_SECOND_REG", "FLOAT_REGS", "SSE_REGS", "MMX_REGS", "FP_TOP_SSE_REGS", "FP_SECOND_SSE_REGS", "FLOAT_SSE_REGS", "FLOAT_INT_REGS", "INT_SSE_REGS", "FLOAT_INT_SSE_REGS", "ALL_REGS" };
  if (reg_n_info)
    {
      int max_regno = max_reg_num ();
      fprintf (file, "%d registers.\n", max_regno);
      for (i = 53; i < max_regno; i++)
 if ((((reg_n_info)->data.reg[i])->refs))
   {
     enum reg_class class, altclass;
     fprintf (file, "\nRegister %d used %d times across %d insns",
       i, (((reg_n_info)->data.reg[i])->refs), (((reg_n_info)->data.reg[i])->live_length));
     if ((((reg_n_info)->data.reg[i])->basic_block1) >= 0)
       fprintf (file, " in block %d", (((reg_n_info)->data.reg[i])->basic_block1));
     if ((((reg_n_info)->data.reg[i])->sets))
       fprintf (file, "; set %d time%s", (((reg_n_info)->data.reg[i])->sets),
         ((((reg_n_info)->data.reg[i])->sets) == 1) ? "" : "s");
     if ((cfun->emit->x_regno_reg_rtx)[i] != ((void *)0) && ((((cfun->emit->x_regno_reg_rtx)[i]))->volatil))
       fprintf (file, "; user var");
     if ((((reg_n_info)->data.reg[i])->deaths) != 1)
       fprintf (file, "; dies in %d places", (((reg_n_info)->data.reg[i])->deaths));
     if ((((reg_n_info)->data.reg[i])->calls_crossed) == 1)
       fprintf (file, "; crosses 1 call");
     else if ((((reg_n_info)->data.reg[i])->calls_crossed))
       fprintf (file, "; crosses %d calls", (((reg_n_info)->data.reg[i])->calls_crossed));
     if ((cfun->emit->x_regno_reg_rtx)[i] != ((void *)0)
  && ((unsigned short) mode_size[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode)]) != (0 ? 8 : 4))
       fprintf (file, "; %d bytes", ((unsigned short) mode_size[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode)]));
     class = reg_preferred_class (i);
     altclass = reg_alternate_class (i);
     if (class != GENERAL_REGS || altclass != ALL_REGS)
       {
  if (altclass == ALL_REGS || class == ALL_REGS)
    fprintf (file, "; pref %s", reg_class_names[(int) class]);
  else if (altclass == NO_REGS)
    fprintf (file, "; %s or none", reg_class_names[(int) class]);
  else
    fprintf (file, "; pref %s, else %s",
      reg_class_names[(int) class],
      reg_class_names[(int) altclass]);
       }
     if ((cfun->emit->x_regno_reg_rtx)[i] != ((void *)0) && ((((cfun->emit->x_regno_reg_rtx)[i]))->frame_related))
       fprintf (file, "; pointer");
     fprintf (file, ".\n");
   }
    }
  fprintf (file, "\n%d basic blocks, %d edges.\n", n_basic_blocks, n_edges);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e;
      int sum;
      gcov_type lsum;
      fprintf (file, "\nBasic block %d ", bb->index);
      fprintf (file, "prev %d, next %d, ",
        bb->prev_bb->index, bb->next_bb->index);
      fprintf (file, "loop_depth %d, count ", bb->loop_depth);
      fprintf (file, "%lld", bb->count);
      fprintf (file, ", freq %i", bb->frequency);
      if (maybe_hot_bb_p (bb))
 fprintf (file, ", maybe hot");
      if (probably_never_executed_bb_p (bb))
 fprintf (file, ", probably never executed");
      fprintf (file, ".\n");
      fprintf (file, "Predecessors: ");
      for (e = bb->pred; e; e = e->pred_next)
 dump_edge_info (file, e, 0);
      fprintf (file, "\nSuccessors: ");
      for (e = bb->succ; e; e = e->succ_next)
 dump_edge_info (file, e, 1);
      fprintf (file, "\nRegisters live at start:");
      dump_regset (bb->global_live_at_start, file);
      fprintf (file, "\nRegisters live at end:");
      dump_regset (bb->global_live_at_end, file);
      putc_unlocked ('\n', file);
      sum = 0;
      for (e = bb->succ; e; e = e->succ_next)
 sum += e->probability;
      if (bb->succ && abs (sum - 10000) > 100)
 fprintf (file, "Invalid sum of outgoing probabilities %.1f%%\n",
   sum * 100.0 / 10000);
      sum = 0;
      for (e = bb->pred; e; e = e->pred_next)
 sum += (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
      if (abs (sum - bb->frequency) > 100)
 fprintf (file,
   "Invalid sum of incomming frequencies %i, should be %i\n",
   sum, bb->frequency);
      lsum = 0;
      for (e = bb->pred; e; e = e->pred_next)
 lsum += e->count;
      if (lsum - bb->count > 100 || lsum - bb->count < -100)
 fprintf (file, "Invalid sum of incomming counts %i, should be %i\n",
   (int)lsum, (int)bb->count);
      lsum = 0;
      for (e = bb->succ; e; e = e->succ_next)
 lsum += e->count;
      if (bb->succ && (lsum - bb->count > 100 || lsum - bb->count < -100))
 fprintf (file, "Invalid sum of incomming counts %i, should be %i\n",
   (int)lsum, (int)bb->count);
    }
  putc_unlocked ('\n', file);
}
void
debug_flow_info (void)
{
  dump_flow_info (stderr);
}
void
dump_edge_info (FILE *file, edge e, int do_succ)
{
  basic_block side = (do_succ ? e->dest : e->src);
  if (side == ENTRY_BLOCK_PTR)
    fputs_unlocked (" ENTRY", file);
  else if (side == EXIT_BLOCK_PTR)
    fputs_unlocked (" EXIT", file);
  else
    fprintf (file, " %d", side->index);
  if (e->probability)
    fprintf (file, " [%.1f%%] ", e->probability * 100.0 / 10000);
  if (e->count)
    {
      fprintf (file, " count:");
      fprintf (file, "%lld", e->count);
    }
  if (e->flags)
    {
      static const char * const bitnames[] = {
 "fallthru", "ab", "abcall", "eh", "fake", "dfs_back",
 "can_fallthru", "irreducible", "sibcall", "loop_exit",
 "true", "false", "exec"
      };
      int comma = 0;
      int i, flags = e->flags;
      fputs_unlocked (" (", file);
      for (i = 0; flags; i++)
 if (flags & (1 << i))
   {
     flags &= ~(1 << i);
     if (comma)
       fputc_unlocked (',', file);
     if (i < (int) (sizeof (bitnames) / sizeof ((bitnames)[0])))
       fputs_unlocked (bitnames[i], file);
     else
       fprintf (file, "%d", i);
     comma = 1;
   }
      fputc_unlocked (')', file);
    }
}
static struct obstack block_aux_obstack;
static void *first_block_aux_obj = 0;
static struct obstack edge_aux_obstack;
static void *first_edge_aux_obj = 0;
 void
alloc_aux_for_block (basic_block bb, int size)
{
  if (bb->aux || !first_block_aux_obj)
    fancy_abort ("gcc.c", 392485, "?");
  bb->aux = (( ((&block_aux_obstack))->temp = ((size)), ((((&block_aux_obstack))->chunk_limit - ((&block_aux_obstack))->next_free < ((&block_aux_obstack))->temp) ? (_obstack_newchunk (((&block_aux_obstack)), ((&block_aux_obstack))->temp), 0) : 0), (((&block_aux_obstack))->next_free += (((&block_aux_obstack))->temp))), ( (((&block_aux_obstack))->next_free == ((&block_aux_obstack))->object_base ? ((((&block_aux_obstack))->maybe_empty_object = 1), 0) : 0), ((&block_aux_obstack))->temp = ((((&block_aux_obstack))->object_base) - (char *) 0), ((&block_aux_obstack))->next_free = (((((((&block_aux_obstack))->next_free) - (char *) 0)+((&block_aux_obstack))->alignment_mask) & ~ (((&block_aux_obstack))->alignment_mask)) + (char *) 0), ((((&block_aux_obstack))->next_free - (char *) ((&block_aux_obstack))->chunk > ((&block_aux_obstack))->chunk_limit - (char *) ((&block_aux_obstack))->chunk) ? (((&block_aux_obstack))->next_free = ((&block_aux_obstack))->chunk_limit) : 0), ((&block_aux_obstack))->object_base = ((&block_aux_obstack))->next_free, ((((&block_aux_obstack))->temp) + (char *) 0)));
  memset (bb->aux, 0, size);
}
void
alloc_aux_for_blocks (int size)
{
  static int initialized;
  if (!initialized)
    {
      _obstack_begin ((&block_aux_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
      initialized = 1;
    }
  else if (first_block_aux_obj)
    fancy_abort ("gcc.c", 392506, "?");
  first_block_aux_obj = (( ((&block_aux_obstack))->temp = ((0)), ((((&block_aux_obstack))->chunk_limit - ((&block_aux_obstack))->next_free < ((&block_aux_obstack))->temp) ? (_obstack_newchunk (((&block_aux_obstack)), ((&block_aux_obstack))->temp), 0) : 0), (((&block_aux_obstack))->next_free += (((&block_aux_obstack))->temp))), ( (((&block_aux_obstack))->next_free == ((&block_aux_obstack))->object_base ? ((((&block_aux_obstack))->maybe_empty_object = 1), 0) : 0), ((&block_aux_obstack))->temp = ((((&block_aux_obstack))->object_base) - (char *) 0), ((&block_aux_obstack))->next_free = (((((((&block_aux_obstack))->next_free) - (char *) 0)+((&block_aux_obstack))->alignment_mask) & ~ (((&block_aux_obstack))->alignment_mask)) + (char *) 0), ((((&block_aux_obstack))->next_free - (char *) ((&block_aux_obstack))->chunk > ((&block_aux_obstack))->chunk_limit - (char *) ((&block_aux_obstack))->chunk) ? (((&block_aux_obstack))->next_free = ((&block_aux_obstack))->chunk_limit) : 0), ((&block_aux_obstack))->object_base = ((&block_aux_obstack))->next_free, ((((&block_aux_obstack))->temp) + (char *) 0)));
  if (size)
    {
      basic_block bb;
      for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
 alloc_aux_for_block (bb, size);
    }
}
void
clear_aux_for_blocks (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    bb->aux = ((void *)0);
}
void
free_aux_for_blocks (void)
{
  if (!first_block_aux_obj)
    fancy_abort ("gcc.c", 392535, "?");
  ( (&block_aux_obstack)->temp = (char *) (first_block_aux_obj) - (char *) (&block_aux_obstack)->chunk, (((&block_aux_obstack)->temp > 0 && (&block_aux_obstack)->temp < (&block_aux_obstack)->chunk_limit - (char *) (&block_aux_obstack)->chunk) ? (int) ((&block_aux_obstack)->next_free = (&block_aux_obstack)->object_base = (&block_aux_obstack)->temp + (char *) (&block_aux_obstack)->chunk) : (((obstack_free) ((&block_aux_obstack), (&block_aux_obstack)->temp + (char *) (&block_aux_obstack)->chunk), 0), 0)));
  first_block_aux_obj = ((void *)0);
  clear_aux_for_blocks ();
}
 void
alloc_aux_for_edge (edge e, int size)
{
  if (e->aux || !first_edge_aux_obj)
    fancy_abort ("gcc.c", 392550, "?");
  e->aux = (( ((&edge_aux_obstack))->temp = ((size)), ((((&edge_aux_obstack))->chunk_limit - ((&edge_aux_obstack))->next_free < ((&edge_aux_obstack))->temp) ? (_obstack_newchunk (((&edge_aux_obstack)), ((&edge_aux_obstack))->temp), 0) : 0), (((&edge_aux_obstack))->next_free += (((&edge_aux_obstack))->temp))), ( (((&edge_aux_obstack))->next_free == ((&edge_aux_obstack))->object_base ? ((((&edge_aux_obstack))->maybe_empty_object = 1), 0) : 0), ((&edge_aux_obstack))->temp = ((((&edge_aux_obstack))->object_base) - (char *) 0), ((&edge_aux_obstack))->next_free = (((((((&edge_aux_obstack))->next_free) - (char *) 0)+((&edge_aux_obstack))->alignment_mask) & ~ (((&edge_aux_obstack))->alignment_mask)) + (char *) 0), ((((&edge_aux_obstack))->next_free - (char *) ((&edge_aux_obstack))->chunk > ((&edge_aux_obstack))->chunk_limit - (char *) ((&edge_aux_obstack))->chunk) ? (((&edge_aux_obstack))->next_free = ((&edge_aux_obstack))->chunk_limit) : 0), ((&edge_aux_obstack))->object_base = ((&edge_aux_obstack))->next_free, ((((&edge_aux_obstack))->temp) + (char *) 0)));
  memset (e->aux, 0, size);
}
void
alloc_aux_for_edges (int size)
{
  static int initialized;
  if (!initialized)
    {
      _obstack_begin ((&edge_aux_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
      initialized = 1;
    }
  else if (first_edge_aux_obj)
    fancy_abort ("gcc.c", 392571, "?");
  first_edge_aux_obj = (( ((&edge_aux_obstack))->temp = ((0)), ((((&edge_aux_obstack))->chunk_limit - ((&edge_aux_obstack))->next_free < ((&edge_aux_obstack))->temp) ? (_obstack_newchunk (((&edge_aux_obstack)), ((&edge_aux_obstack))->temp), 0) : 0), (((&edge_aux_obstack))->next_free += (((&edge_aux_obstack))->temp))), ( (((&edge_aux_obstack))->next_free == ((&edge_aux_obstack))->object_base ? ((((&edge_aux_obstack))->maybe_empty_object = 1), 0) : 0), ((&edge_aux_obstack))->temp = ((((&edge_aux_obstack))->object_base) - (char *) 0), ((&edge_aux_obstack))->next_free = (((((((&edge_aux_obstack))->next_free) - (char *) 0)+((&edge_aux_obstack))->alignment_mask) & ~ (((&edge_aux_obstack))->alignment_mask)) + (char *) 0), ((((&edge_aux_obstack))->next_free - (char *) ((&edge_aux_obstack))->chunk > ((&edge_aux_obstack))->chunk_limit - (char *) ((&edge_aux_obstack))->chunk) ? (((&edge_aux_obstack))->next_free = ((&edge_aux_obstack))->chunk_limit) : 0), ((&edge_aux_obstack))->object_base = ((&edge_aux_obstack))->next_free, ((((&edge_aux_obstack))->temp) + (char *) 0)));
  if (size)
    {
      basic_block bb;
      for (bb = ENTRY_BLOCK_PTR; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   edge e;
   for (e = bb->succ; e; e = e->succ_next)
     alloc_aux_for_edge (e, size);
 }
    }
}
void
clear_aux_for_edges (void)
{
  basic_block bb;
  edge e;
  for (bb = ENTRY_BLOCK_PTR; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (e = bb->succ; e; e = e->succ_next)
 e->aux = ((void *)0);
    }
}
void
free_aux_for_edges (void)
{
  if (!first_edge_aux_obj)
    fancy_abort ("gcc.c", 392610, "?");
  ( (&edge_aux_obstack)->temp = (char *) (first_edge_aux_obj) - (char *) (&edge_aux_obstack)->chunk, (((&edge_aux_obstack)->temp > 0 && (&edge_aux_obstack)->temp < (&edge_aux_obstack)->chunk_limit - (char *) (&edge_aux_obstack)->chunk) ? (int) ((&edge_aux_obstack)->next_free = (&edge_aux_obstack)->object_base = (&edge_aux_obstack)->temp + (char *) (&edge_aux_obstack)->chunk) : (((obstack_free) ((&edge_aux_obstack), (&edge_aux_obstack)->temp + (char *) (&edge_aux_obstack)->chunk), 0), 0)));
  first_edge_aux_obj = ((void *)0);
  clear_aux_for_edges ();
}
void
debug_bb (basic_block bb)
{
  dump_bb (bb, stderr, 0);
}
basic_block
debug_bb_n (int n)
{
  basic_block bb = (((basic_block_info)->data.bb[(n)]));
  dump_bb (bb, stderr, 0);
  return bb;
}
static void
dump_cfg_bb_info (FILE *file, basic_block bb)
{
  unsigned i;
  unsigned char first = 1;
  static const char * const bb_bitnames[] =
    {
      "dirty", "new", "reachable", "visited", "irreducible_loop", "superblock"
    };
  const unsigned n_bitnames = sizeof (bb_bitnames) / sizeof (char *);
  edge e;
  fprintf (file, "Basic block %d", bb->index);
  for (i = 0; i < n_bitnames; i++)
    if (bb->flags & (1 << i))
      {
 if (first)
   fprintf (file, " (");
 else
   fprintf (file, ", ");
 first = 0;
 fprintf (file, bb_bitnames[i]);
      }
  if (!first)
    fprintf (file, ")");
  fprintf (file, "\n");
  fprintf (file, "Predecessors: ");
  for (e = bb->pred; e; e = e->pred_next)
    dump_edge_info (file, e, 0);
  fprintf (file, "\nSuccessors: ");
  for (e = bb->succ; e; e = e->succ_next)
    dump_edge_info (file, e, 1);
  fprintf (file, "\n\n");
}
void
brief_dump_cfg (FILE *file)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      dump_cfg_bb_info (file, bb);
    }
}
struct depth_first_search_dsS {
  basic_block *stack;
  unsigned int sp;
  sbitmap visited_blocks;
};
typedef struct depth_first_search_dsS *depth_first_search_ds;
static void flow_dfs_compute_reverse_init (depth_first_search_ds);
static void flow_dfs_compute_reverse_add_bb (depth_first_search_ds,
          basic_block);
static basic_block flow_dfs_compute_reverse_execute (depth_first_search_ds);
static void flow_dfs_compute_reverse_finish (depth_first_search_ds);
static void remove_fake_successors (basic_block);
static unsigned char flow_active_insn_p (rtx);
static unsigned char
flow_active_insn_p (rtx insn)
{
  if (active_insn_p (insn))
    return 1;
  if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER
      && (((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == REG)
      && (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1)))->return_val))
    return 1;
  return 0;
}
unsigned char
forwarder_block_p (basic_block bb)
{
  rtx insn;
  if (bb == EXIT_BLOCK_PTR || bb == ENTRY_BLOCK_PTR
      || !bb->succ || bb->succ->succ_next)
    return 0;
  for (insn = (bb)->head_; insn != (bb)->end_; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && flow_active_insn_p (insn))
      return 0;
  return (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
   || (((enum rtx_code) (insn)->code) == JUMP_INSN && simplejump_p (insn))
   || !flow_active_insn_p (insn));
}
unsigned char
can_fallthru (basic_block src, basic_block target)
{
  rtx insn = (src)->end_;
  rtx insn2;
  edge e;
  if (target == EXIT_BLOCK_PTR)
    return 1;
  if (src->next_bb != target)
    return 0;
  for (e = src->succ; e; e = e->succ_next)
    if (e->dest == EXIT_BLOCK_PTR
 && e->flags & 1)
    return 0;
  insn2 = (target)->head_;
  if (insn2 && !active_insn_p (insn2))
    insn2 = next_active_insn (insn2);
  return next_active_insn (insn) == insn2;
}
unsigned char
could_fall_through (basic_block src, basic_block target)
{
  edge e;
  if (target == EXIT_BLOCK_PTR)
    return 1;
  for (e = src->succ; e; e = e->succ_next)
    if (e->dest == EXIT_BLOCK_PTR
 && e->flags & 1)
    return 0;
  return 1;
}
unsigned char
mark_dfs_back_edges (void)
{
  edge *stack;
  int *pre;
  int *post;
  int sp;
  int prenum = 1;
  int postnum = 1;
  sbitmap visited;
  unsigned char found = 0;
  pre = xcalloc (last_basic_block, sizeof (int));
  post = xcalloc (last_basic_block, sizeof (int));
  stack = xmalloc ((n_basic_blocks + 1) * sizeof (edge));
  sp = 0;
  visited = sbitmap_alloc (last_basic_block);
  sbitmap_zero (visited);
  stack[sp++] = ENTRY_BLOCK_PTR->succ;
  while (sp)
    {
      edge e;
      basic_block src;
      basic_block dest;
      e = stack[sp - 1];
      src = e->src;
      dest = e->dest;
      e->flags &= ~32;
      if (dest != EXIT_BLOCK_PTR && ! ((visited)->elms [(dest->index) / ((unsigned) (8 * 4))] >> (dest->index) % ((unsigned) (8 * 4)) & 1))
 {
   ((visited)->elms [(dest->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (dest->index) % ((unsigned) (8 * 4)));
   pre[dest->index] = prenum++;
   if (dest->succ)
     {
       stack[sp++] = dest->succ;
     }
   else
     post[dest->index] = postnum++;
 }
      else
 {
   if (dest != EXIT_BLOCK_PTR && src != ENTRY_BLOCK_PTR
       && pre[src->index] >= pre[dest->index]
       && post[dest->index] == 0)
     e->flags |= 32, found = 1;
   if (! e->succ_next && src != ENTRY_BLOCK_PTR)
     post[src->index] = postnum++;
   if (e->succ_next)
     stack[sp - 1] = e->succ_next;
   else
     sp--;
 }
    }
  free (pre);
  free (post);
  free (stack);
  free(visited);
  return found;
}
void
set_edge_can_fallthru_flag (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e;
      for (e = bb->succ; e; e = e->succ_next)
 {
   e->flags &= ~64;
   if (e->flags & 1)
     e->flags |= 64;
 }
      if (!bb->succ || !bb->succ->succ_next || bb->succ->succ_next->succ_next)
 continue;
      if (!any_condjump_p ((bb)->end_))
 continue;
      if (!invert_jump ((bb)->end_, ((((bb)->end_)->u.fld[9]).rtx1), 0))
 continue;
      invert_jump ((bb)->end_, ((((bb)->end_)->u.fld[9]).rtx1), 0);
      bb->succ->flags |= 64;
      bb->succ->succ_next->flags |= 64;
    }
}
void
find_unreachable_blocks (void)
{
  edge e;
  basic_block *tos, *worklist, bb;
  tos = worklist = xmalloc (sizeof (basic_block) * n_basic_blocks);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    bb->flags &= ~4;
  for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
    {
      *tos++ = e->dest;
      e->dest->flags |= 4;
    }
  while (tos != worklist)
    {
      basic_block b = *--tos;
      for (e = b->succ; e; e = e->succ_next)
 if (!(e->dest->flags & 4))
   {
     *tos++ = e->dest;
     e->dest->flags |= 4;
   }
    }
  free (worklist);
}
struct edge_list *
create_edge_list (void)
{
  struct edge_list *elist;
  edge e;
  int num_edges;
  int block_count;
  basic_block bb;
  block_count = n_basic_blocks + 2;
  num_edges = 0;
  for (bb = ENTRY_BLOCK_PTR; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (e = bb->succ; e; e = e->succ_next)
 num_edges++;
    }
  elist = xmalloc (sizeof (struct edge_list));
  elist->num_blocks = block_count;
  elist->num_edges = num_edges;
  elist->index_to_edge = xmalloc (sizeof (edge) * num_edges);
  num_edges = 0;
  for (bb = ENTRY_BLOCK_PTR; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    for (e = bb->succ; e; e = e->succ_next)
      elist->index_to_edge[num_edges++] = e;
  return elist;
}
void
free_edge_list (struct edge_list *elist)
{
  if (elist)
    {
      free (elist->index_to_edge);
      free (elist);
    }
}
void
print_edge_list (FILE *f, struct edge_list *elist)
{
  int x;
  fprintf (f, "Compressed edge list, %d BBs + entry & exit, and %d edges\n",
    elist->num_blocks - 2, elist->num_edges);
  for (x = 0; x < elist->num_edges; x++)
    {
      fprintf (f, " %-4d - edge(", x);
      if (((elist)->index_to_edge[(x)]->src) == ENTRY_BLOCK_PTR)
 fprintf (f, "entry,");
      else
 fprintf (f, "%d,", ((elist)->index_to_edge[(x)]->src)->index);
      if (((elist)->index_to_edge[(x)]->dest) == EXIT_BLOCK_PTR)
 fprintf (f, "exit)\n");
      else
 fprintf (f, "%d)\n", ((elist)->index_to_edge[(x)]->dest)->index);
    }
}
void
verify_edge_list (FILE *f, struct edge_list *elist)
{
  int pred, succ, index;
  edge e;
  basic_block bb, p, s;
  for (bb = ENTRY_BLOCK_PTR; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (e = bb->succ; e; e = e->succ_next)
 {
   pred = e->src->index;
   succ = e->dest->index;
   index = (find_edge_index ((elist), (e->src), (e->dest)));
   if (index == -1)
     {
       fprintf (f, "*p* No index for edge from %d to %d\n", pred, succ);
       continue;
     }
   if (((elist)->index_to_edge[(index)]->src)->index != pred)
     fprintf (f, "*p* Pred for index %d should be %d not %d\n",
       index, pred, ((elist)->index_to_edge[(index)]->src)->index);
   if (((elist)->index_to_edge[(index)]->dest)->index != succ)
     fprintf (f, "*p* Succ for index %d should be %d not %d\n",
       index, succ, ((elist)->index_to_edge[(index)]->dest)->index);
 }
    }
  for (p = ENTRY_BLOCK_PTR; p != EXIT_BLOCK_PTR; p = p->next_bb)
    for (s = ENTRY_BLOCK_PTR->next_bb; s != ((void *)0); s = s->next_bb)
      {
 int found_edge = 0;
 for (e = p->succ; e; e = e->succ_next)
   if (e->dest == s)
     {
       found_edge = 1;
       break;
     }
 for (e = s->pred; e; e = e->pred_next)
   if (e->src == p)
     {
       found_edge = 1;
       break;
     }
 if ((find_edge_index ((elist), (p), (s)))
     == -1 && found_edge != 0)
   fprintf (f, "*** Edge (%d, %d) appears to not have an index\n",
     p->index, s->index);
 if ((find_edge_index ((elist), (p), (s)))
     != -1 && found_edge == 0)
   fprintf (f, "*** Edge (%d, %d) has index %d, but there is no edge\n",
     p->index, s->index, (find_edge_index ((elist), (p), (s))));
      }
}
edge
find_edge (basic_block pred, basic_block succ)
{
  edge e;
  for (e = pred->succ; e; e = e->succ_next)
    if (e->dest == succ)
      return e;
  return ((void *)0);
}
int
find_edge_index (struct edge_list *edge_list, basic_block pred, basic_block succ)
{
  int x;
  for (x = 0; x < ((edge_list)->num_edges); x++)
    if (((edge_list)->index_to_edge[(x)]->src) == pred
 && ((edge_list)->index_to_edge[(x)]->dest) == succ)
      return x;
  return (-1);
}
void
flow_nodes_print (const char *str, const sbitmap nodes, FILE *file)
{
  int node;
  if (! nodes)
    return;
  fprintf (file, "%s { ", str);
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (nodes)->size; unsigned long *ptr_ = (nodes)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (node) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; {fprintf (file, "%d ", node);}; if (word_ == 0) break; } } } } while (0);
  fputs_unlocked ("}\n", file);
}
void
flow_edge_list_print (const char *str, const edge *edge_list, int num_edges, FILE *file)
{
  int i;
  if (! edge_list)
    return;
  fprintf (file, "%s { ", str);
  for (i = 0; i < num_edges; i++)
    fprintf (file, "%d->%d ", edge_list[i]->src->index,
      edge_list[i]->dest->index);
  fputs_unlocked ("}\n", file);
}
static void
remove_fake_successors (basic_block bb)
{
  edge e;
  for (e = bb->succ; e;)
    {
      edge tmp = e;
      e = e->succ_next;
      if ((tmp->flags & 16) == 16)
 remove_edge (tmp);
    }
}
void
remove_fake_edges (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    remove_fake_successors (bb);
}
void
add_noreturn_fake_exit_edges (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (bb->succ == ((void *)0))
      make_single_succ_edge (bb, EXIT_BLOCK_PTR, 16);
}
void
connect_infinite_loops_to_exit (void)
{
  basic_block unvisited_block;
  struct depth_first_search_dsS dfs_ds;
  flow_dfs_compute_reverse_init (&dfs_ds);
  flow_dfs_compute_reverse_add_bb (&dfs_ds, EXIT_BLOCK_PTR);
  while (1)
    {
      unvisited_block = flow_dfs_compute_reverse_execute (&dfs_ds);
      if (!unvisited_block)
 break;
      make_edge (unvisited_block, EXIT_BLOCK_PTR, 16);
      flow_dfs_compute_reverse_add_bb (&dfs_ds, unvisited_block);
    }
  flow_dfs_compute_reverse_finish (&dfs_ds);
  return;
}
void
flow_reverse_top_sort_order_compute (int *rts_order)
{
  edge *stack;
  int sp;
  int postnum = 0;
  sbitmap visited;
  stack = xmalloc ((n_basic_blocks + 1) * sizeof (edge));
  sp = 0;
  visited = sbitmap_alloc (last_basic_block);
  sbitmap_zero (visited);
  stack[sp++] = ENTRY_BLOCK_PTR->succ;
  while (sp)
    {
      edge e;
      basic_block src;
      basic_block dest;
      e = stack[sp - 1];
      src = e->src;
      dest = e->dest;
      if (dest != EXIT_BLOCK_PTR && ! ((visited)->elms [(dest->index) / ((unsigned) (8 * 4))] >> (dest->index) % ((unsigned) (8 * 4)) & 1))
 {
   ((visited)->elms [(dest->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (dest->index) % ((unsigned) (8 * 4)));
   if (dest->succ)
     stack[sp++] = dest->succ;
   else
     rts_order[postnum++] = dest->index;
 }
      else
 {
   if (! e->succ_next && src != ENTRY_BLOCK_PTR)
    rts_order[postnum++] = src->index;
   if (e->succ_next)
     stack[sp - 1] = e->succ_next;
   else
     sp--;
 }
    }
  free (stack);
  free(visited);
}
int
flow_depth_first_order_compute (int *dfs_order, int *rc_order)
{
  edge *stack;
  int sp;
  int dfsnum = 0;
  int rcnum = n_basic_blocks - 1;
  sbitmap visited;
  stack = xmalloc ((n_basic_blocks + 1) * sizeof (edge));
  sp = 0;
  visited = sbitmap_alloc (last_basic_block);
  sbitmap_zero (visited);
  stack[sp++] = ENTRY_BLOCK_PTR->succ;
  while (sp)
    {
      edge e;
      basic_block src;
      basic_block dest;
      e = stack[sp - 1];
      src = e->src;
      dest = e->dest;
      if (dest != EXIT_BLOCK_PTR && ! ((visited)->elms [(dest->index) / ((unsigned) (8 * 4))] >> (dest->index) % ((unsigned) (8 * 4)) & 1))
 {
   ((visited)->elms [(dest->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (dest->index) % ((unsigned) (8 * 4)));
   if (dfs_order)
     dfs_order[dfsnum] = dest->index;
   dfsnum++;
   if (dest->succ)
     stack[sp++] = dest->succ;
   else if (rc_order)
     rc_order[rcnum--] = dest->index;
 }
      else
 {
   if (! e->succ_next && src != ENTRY_BLOCK_PTR
       && rc_order)
     rc_order[rcnum--] = src->index;
   if (e->succ_next)
     stack[sp - 1] = e->succ_next;
   else
     sp--;
 }
    }
  free (stack);
  free(visited);
  if (dfsnum > n_basic_blocks)
    fancy_abort ("gcc.c", 393429, "?");
  if (dfsnum < n_basic_blocks)
    fancy_abort ("gcc.c", 393433, "?");
  return dfsnum;
}
struct dfst_node
{
    unsigned nnodes;
    struct dfst_node **node;
    struct dfst_node *up;
};
void
flow_preorder_transversal_compute (int *pot_order)
{
  edge e;
  edge *stack;
  int i;
  int max_successors;
  int sp;
  sbitmap visited;
  struct dfst_node *node;
  struct dfst_node *dfst;
  basic_block bb;
  stack = xmalloc ((n_basic_blocks + 1) * sizeof (edge));
  sp = 0;
  dfst = xcalloc (last_basic_block, sizeof (struct dfst_node));
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      max_successors = 0;
      for (e = bb->succ; e; e = e->succ_next)
 max_successors++;
      dfst[bb->index].node
 = (max_successors
    ? xcalloc (max_successors, sizeof (struct dfst_node *)) : ((void *)0));
    }
  visited = sbitmap_alloc (last_basic_block);
  sbitmap_zero (visited);
  stack[sp++] = ENTRY_BLOCK_PTR->succ;
  while (sp)
    {
      basic_block src;
      basic_block dest;
      e = stack[sp - 1];
      src = e->src;
      dest = e->dest;
      if (dest != EXIT_BLOCK_PTR && ! ((visited)->elms [(dest->index) / ((unsigned) (8 * 4))] >> (dest->index) % ((unsigned) (8 * 4)) & 1))
 {
   ((visited)->elms [(dest->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (dest->index) % ((unsigned) (8 * 4)));
   if (src != ENTRY_BLOCK_PTR)
     {
       dfst[src->index].node[dfst[src->index].nnodes++]
  = &dfst[dest->index];
       dfst[dest->index].up = &dfst[src->index];
     }
   if (dest->succ)
     stack[sp++] = dest->succ;
 }
      else if (e->succ_next)
 stack[sp - 1] = e->succ_next;
      else
 sp--;
    }
  free (stack);
  free(visited);
  i = 0;
  node = &dfst[ENTRY_BLOCK_PTR->next_bb->index];
  pot_order[i++] = 0;
  while (node)
    {
      if (node->nnodes)
 {
   node = node->node[--node->nnodes];
   pot_order[i++] = node - dfst;
 }
      else
 node = node->up;
    }
  for (i = 0; i < last_basic_block; i++)
    if (dfst[i].node)
      free (dfst[i].node);
  free (dfst);
}
static void
flow_dfs_compute_reverse_init (depth_first_search_ds data)
{
  data->stack = xmalloc ((n_basic_blocks - ((-3) + 1))
    * sizeof (basic_block));
  data->sp = 0;
  data->visited_blocks = sbitmap_alloc (last_basic_block - ((-3) + 1));
  sbitmap_zero (data->visited_blocks);
  return;
}
static void
flow_dfs_compute_reverse_add_bb (depth_first_search_ds data, basic_block bb)
{
  data->stack[data->sp++] = bb;
  ((data->visited_blocks)->elms [(bb->index - ((-3) + 1)) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index - ((-3) + 1)) % ((unsigned) (8 * 4)));
}
static basic_block
flow_dfs_compute_reverse_execute (depth_first_search_ds data)
{
  basic_block bb;
  edge e;
  while (data->sp > 0)
    {
      bb = data->stack[--data->sp];
      for (e = bb->pred; e; e = e->pred_next)
 if (!((data->visited_blocks)->elms [(e->src->index - ((-3) + 1)) / ((unsigned) (8 * 4))] >> (e->src->index - ((-3) + 1)) % ((unsigned) (8 * 4)) & 1)
                                             )
   flow_dfs_compute_reverse_add_bb (data, e->src);
    }
  for (bb = EXIT_BLOCK_PTR; bb != ((void *)0); bb = bb->prev_bb)
    if (!((data->visited_blocks)->elms [(bb->index - ((-3) + 1)) / ((unsigned) (8 * 4))] >> (bb->index - ((-3) + 1)) % ((unsigned) (8 * 4)) & 1))
      return bb;
  return ((void *)0);
}
static void
flow_dfs_compute_reverse_finish (depth_first_search_ds data)
{
  free (data->stack);
  free(data->visited_blocks);
}
int
dfs_enumerate_from (basic_block bb, int reverse,
      unsigned char (*predicate) (basic_block, void *),
      basic_block *rslt, int rslt_max, void *data)
{
  basic_block *st, lbb;
  int sp = 0, tv = 0;
  st = xcalloc (rslt_max, sizeof (basic_block));
  rslt[tv++] = st[sp++] = bb;
  bb->flags |= 8;
  while (sp)
    {
      edge e;
      lbb = st[--sp];
      if (reverse)
        {
          for (e = lbb->pred; e; e = e->pred_next)
     if (!(e->src->flags & 8) && predicate (e->src, data))
       {
         if (tv == rslt_max)
           fancy_abort ("gcc.c", 393684, "?");
         rslt[tv++] = st[sp++] = e->src;
         e->src->flags |= 8;
       }
        }
      else
        {
          for (e = lbb->succ; e; e = e->succ_next)
     if (!(e->dest->flags & 8) && predicate (e->dest, data))
       {
         if (tv == rslt_max)
           fancy_abort ("gcc.c", 393695, "?");
         rslt[tv++] = st[sp++] = e->dest;
         e->dest->flags |= 8;
       }
 }
    }
  free (st);
  for (sp = 0; sp < tv; sp++)
    rslt[sp]->flags &= ~8;
  return tv;
}
static int count_basic_blocks (rtx);
static void find_basic_blocks_1 (rtx);
static void make_edges (basic_block, basic_block, int);
static void make_label_edge (sbitmap *, basic_block, rtx, int);
static void find_bb_boundaries (basic_block);
static void compute_outgoing_frequencies (basic_block);
unsigned char
inside_basic_block_p (rtx insn)
{
  switch (((enum rtx_code) (insn)->code))
    {
    case CODE_LABEL:
      return ((((insn)->u.fld[2]).rtx1) == 0
       || ((enum rtx_code) ((((insn)->u.fld[2]).rtx1))->code) != JUMP_INSN
       || (((enum rtx_code) (((((((insn)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->code) != ADDR_VEC
    && ((enum rtx_code) (((((((insn)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->code) != ADDR_DIFF_VEC));
    case JUMP_INSN:
      return (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ADDR_VEC
       && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ADDR_DIFF_VEC);
    case CALL_INSN:
    case INSN:
      return 1;
    case BARRIER:
    case NOTE:
      return 0;
    default:
      fancy_abort ("gcc.c", 393776, "?");
    }
}
unsigned char
control_flow_insn_p (rtx insn)
{
  rtx note;
  switch (((enum rtx_code) (insn)->code))
    {
    case NOTE:
    case CODE_LABEL:
      return 0;
    case JUMP_INSN:
      return (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ADDR_VEC
       && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ADDR_DIFF_VEC);
    case CALL_INSN:
      if (((((insn))->jump)
    || find_reg_note (insn, REG_NORETURN, 0))
   && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != COND_EXEC)
 return 1;
      return (((cfun->x_nonlocal_goto_handler_labels)
        && (0 == (note = find_reg_note (insn, REG_EH_REGION,
            (rtx) 0))
     || (((((note)->u.fld[0]).rtx1))->u.hwint[0]) >= 0))
       || can_throw_internal (insn));
    case INSN:
      return (flag_non_call_exceptions && can_throw_internal (insn));
    case BARRIER:
      return 0;
    default:
      fancy_abort ("gcc.c", 393824, "?");
    }
}
static int
count_basic_blocks (rtx f)
{
  int count = 0;
  unsigned char saw_insn = 0;
  rtx insn;
  for (insn = f; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if ((((enum rtx_code) (insn)->code) == CODE_LABEL || ((enum rtx_code) (insn)->code) == BARRIER)
   && saw_insn)
 count++, saw_insn = 0;
      if (!saw_insn && inside_basic_block_p (insn))
 saw_insn = 1;
      if (saw_insn && control_flow_insn_p (insn))
 count++, saw_insn = 0;
    }
  if (saw_insn)
    count++;
  if (count == 0)
    {
      emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), ((const_int_rtx[64]))));
      count = 1;
    }
  return count;
}
static void
make_label_edge (sbitmap *edge_cache, basic_block src, rtx label, int flags)
{
  if (((enum rtx_code) (label)->code) != CODE_LABEL)
    fancy_abort ("gcc.c", 393877, "?");
  if ((((label)->u.fld[0]).rtint) == 0)
    return;
  cached_make_edge (edge_cache, src, (((label)->u.fld[3]).bb), flags);
}
void
rtl_make_eh_edge (sbitmap *edge_cache, basic_block src, rtx insn)
{
  int is_call = ((enum rtx_code) (insn)->code) == CALL_INSN ? 4 : 0;
  rtx handlers, i;
  handlers = reachable_handlers (insn);
  for (i = handlers; i; i = (((i)->u.fld[1]).rtx1))
    make_label_edge (edge_cache, src, (((i)->u.fld[0]).rtx1),
       2 | 8 | is_call);
  free_INSN_LIST_list (&handlers);
}
static void
make_edges (basic_block min, basic_block max, int update_p)
{
  basic_block bb;
  sbitmap *edge_cache = ((void *)0);
  (cfun->has_computed_jump) = 0;
  if (flag_reorder_blocks_and_partition)
    (cfun->has_computed_jump) = 1;
  if ((cfun->expr->x_forced_labels) || cfun->max_jumptable_ents > 100)
    {
      edge_cache = sbitmap_vector_alloc (last_basic_block, last_basic_block);
      sbitmap_vector_zero (edge_cache, last_basic_block);
      if (update_p)
        for (bb = min; bb != max->next_bb; bb = bb->next_bb)
   {
     edge e;
     for (e = bb->succ; e ; e = e->succ_next)
       if (e->dest != EXIT_BLOCK_PTR)
  ((edge_cache[bb->index])->elms [(e->dest->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (e->dest->index) % ((unsigned) (8 * 4)));
   }
    }
  if (min == ENTRY_BLOCK_PTR->next_bb)
    cached_make_edge (edge_cache, ENTRY_BLOCK_PTR, min,
        1);
  for (bb = min; bb != max->next_bb; bb = bb->next_bb)
    {
      rtx insn, x;
      enum rtx_code code;
      int force_fallthru = 0;
      edge e;
      if (((enum rtx_code) ((bb)->head_)->code) == CODE_LABEL
   && (((enum label_kind) ((((bb)->head_)->jump << 1) | ((bb)->head_)->call)) != LABEL_NORMAL))
 cached_make_edge (((void *)0), ENTRY_BLOCK_PTR, bb, 0);
      insn = (bb)->end_;
      code = ((enum rtx_code) (insn)->code);
      if (code == JUMP_INSN)
 {
   rtx tmp;
   if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == RESX)
     rtl_make_eh_edge (edge_cache, bb, insn);
   else if (find_reg_note (insn, REG_NON_LOCAL_GOTO, (rtx) 0))
     ;
   else if (tablejump_p (insn, ((void *)0), &tmp))
     {
       rtvec vec;
       int j;
       if (((enum rtx_code) ((((tmp)->u.fld[5]).rtx1))->code) == ADDR_VEC)
  vec = ((((((tmp)->u.fld[5]).rtx1))->u.fld[0]).rtvec1);
       else
  vec = ((((((tmp)->u.fld[5]).rtx1))->u.fld[1]).rtvec1);
       for (j = ((vec)->num_elem) - 1; j >= 0; --j)
  make_label_edge (edge_cache, bb,
     (((((vec)->elem[j]))->u.fld[0]).rtx1), 0);
       if ((tmp = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != ((void *)0)
    && (((tmp)->u.fld[0]).rtx1) == (global_rtl[GR_PC])
    && ((enum rtx_code) ((((tmp)->u.fld[1]).rtx1))->code) == IF_THEN_ELSE
    && ((enum rtx_code) (((((((tmp)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->code) == LABEL_REF)
  make_label_edge (edge_cache, bb,
     (((((((((tmp)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->u.fld[0]).rtx1), 0);
     }
   else if (computed_jump_p (insn))
     {
       (cfun->has_computed_jump) = 1;
       for (x = (cfun->expr->x_forced_labels); x; x = (((x)->u.fld[1]).rtx1))
  make_label_edge (edge_cache, bb, (((x)->u.fld[0]).rtx1), 2);
     }
   else if (returnjump_p (insn))
     cached_make_edge (edge_cache, bb, EXIT_BLOCK_PTR, 0);
   else
     {
       if (! (((insn)->u.fld[9]).rtx1))
  fancy_abort ("gcc.c", 394036, "?");
       make_label_edge (edge_cache, bb, (((insn)->u.fld[9]).rtx1), 0);
     }
 }
      if (code == CALL_INSN && (((insn))->jump))
 cached_make_edge (edge_cache, bb, EXIT_BLOCK_PTR,
     256 | 2);
      else if (code == CALL_INSN || flag_non_call_exceptions)
 {
   rtl_make_eh_edge (edge_cache, bb, insn);
   if (code == CALL_INSN && (cfun->x_nonlocal_goto_handler_labels))
     {
       rtx note = find_reg_note (insn, REG_EH_REGION, (rtx) 0);
       if (!note || (((((note)->u.fld[0]).rtx1))->u.hwint[0]) >= 0)
  for (x = (cfun->x_nonlocal_goto_handler_labels); x; x = (((x)->u.fld[1]).rtx1))
    make_label_edge (edge_cache, bb, (((x)->u.fld[0]).rtx1),
       2 | 4);
     }
 }
      insn = (((insn)->u.fld[2]).rtx1);
      for (e = bb->succ; e; e = e->succ_next)
 if (e->dest == EXIT_BLOCK_PTR && e->flags & 1)
   {
     insn = 0;
     break;
   }
      while (insn
      && ((enum rtx_code) (insn)->code) == NOTE
      && (((insn)->u.fld[5]).rtint) != NOTE_INSN_BASIC_BLOCK)
 insn = (((insn)->u.fld[2]).rtx1);
      if (!insn || (bb->next_bb == EXIT_BLOCK_PTR && force_fallthru))
 cached_make_edge (edge_cache, bb, EXIT_BLOCK_PTR, 1);
      else if (bb->next_bb != EXIT_BLOCK_PTR)
 {
   if (force_fallthru || insn == (bb->next_bb)->head_)
     cached_make_edge (edge_cache, bb, bb->next_bb, 1);
 }
    }
  if (edge_cache)
    free(edge_cache);
}
static void
find_basic_blocks_1 (rtx f)
{
  rtx insn, next;
  rtx bb_note = (rtx) 0;
  rtx head = (rtx) 0;
  rtx end = (rtx) 0;
  basic_block prev = ENTRY_BLOCK_PTR;
  for (insn = f; insn; insn = next)
    {
      enum rtx_code code = ((enum rtx_code) (insn)->code);
      next = (((insn)->u.fld[2]).rtx1);
      if ((((enum rtx_code) (insn)->code) == CODE_LABEL || ((enum rtx_code) (insn)->code) == BARRIER)
   && head)
 {
   prev = create_basic_block_structure (head, end, bb_note, prev);
   head = end = (rtx) 0;
   bb_note = (rtx) 0;
 }
      if (inside_basic_block_p (insn))
 {
   if (head == (rtx) 0)
     head = insn;
   end = insn;
 }
      if (head && control_flow_insn_p (insn))
 {
   prev = create_basic_block_structure (head, end, bb_note, prev);
   head = end = (rtx) 0;
   bb_note = (rtx) 0;
 }
      switch (code)
 {
 case NOTE:
   {
     int kind = (((insn)->u.fld[5]).rtint);
     if (kind == NOTE_INSN_BASIC_BLOCK)
       {
  if (bb_note == (rtx) 0)
    bb_note = insn;
  else
    next = delete_insn (insn);
       }
     break;
   }
 case CODE_LABEL:
 case JUMP_INSN:
 case CALL_INSN:
 case INSN:
 case BARRIER:
   break;
 default:
   fancy_abort ("gcc.c", 394180, "?");
 }
    }
  if (head != (rtx) 0)
    create_basic_block_structure (head, end, bb_note, prev);
  else if (bb_note)
    delete_insn (bb_note);
  if (last_basic_block != n_basic_blocks)
    fancy_abort ("gcc.c", 394190, "?");
  clear_aux_for_blocks ();
}
void
find_basic_blocks (rtx f, int nregs ,
     FILE *file )
{
  basic_block bb;
  timevar_push (TV_CFG);
  if (basic_block_info != ((void *)0))
    {
      clear_edges ();
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 bb->aux = ((void *)0);
      basic_block_info = ((void *)0);
    }
  n_basic_blocks = count_basic_blocks (f);
  last_basic_block = 0;
  ENTRY_BLOCK_PTR->next_bb = EXIT_BLOCK_PTR;
  EXIT_BLOCK_PTR->prev_bb = ENTRY_BLOCK_PTR;
  basic_block_info = varray_init (n_basic_blocks, VARRAY_DATA_BB, "basic_block_info");
  find_basic_blocks_1 (f);
  make_edges (ENTRY_BLOCK_PTR->next_bb, EXIT_BLOCK_PTR->prev_bb, 0);
  tidy_fallthru_edges ();
  timevar_pop (TV_CFG);
}
enum state {BLOCK_NEW = 0, BLOCK_ORIGINAL, BLOCK_TO_SPLIT};
static void
find_bb_boundaries (basic_block bb)
{
  rtx insn = (bb)->head_;
  rtx end = (bb)->end_;
  rtx flow_transfer_insn = (rtx) 0;
  edge fallthru = ((void *)0);
  if (insn == (bb)->end_)
    return;
  if (((enum rtx_code) (insn)->code) == CODE_LABEL)
    insn = (((insn)->u.fld[2]).rtx1);
  while (1)
    {
      enum rtx_code code = ((enum rtx_code) (insn)->code);
      if (code == CODE_LABEL)
 {
   fallthru = split_block (bb, (((insn)->u.fld[1]).rtx1));
   if (flow_transfer_insn)
     (bb)->end_ = flow_transfer_insn;
   bb = fallthru->dest;
   remove_edge (fallthru);
   flow_transfer_insn = (rtx) 0;
   if ((((enum label_kind) (((insn)->jump << 1) | (insn)->call)) != LABEL_NORMAL))
     make_edge (ENTRY_BLOCK_PTR, bb, 0);
 }
      if (flow_transfer_insn && inside_basic_block_p (insn))
 {
   fallthru = split_block (bb, (((insn)->u.fld[1]).rtx1));
   (bb)->end_ = flow_transfer_insn;
   bb = fallthru->dest;
   remove_edge (fallthru);
   flow_transfer_insn = (rtx) 0;
 }
      if (control_flow_insn_p (insn))
 flow_transfer_insn = insn;
      if (insn == end)
 break;
      insn = (((insn)->u.fld[2]).rtx1);
    }
  if (flow_transfer_insn)
    (bb)->end_ = flow_transfer_insn;
  purge_dead_edges (bb);
}
static void
compute_outgoing_frequencies (basic_block b)
{
  edge e, f;
  if (b->succ && b->succ->succ_next && !b->succ->succ_next->succ_next)
    {
      rtx note = find_reg_note ((b)->end_, REG_BR_PROB, ((void *)0));
      int probability;
      if (!note)
 return;
      probability = (((((note)->u.fld[0]).rtx1))->u.hwint[0]);
      e = ((b)->succ->flags & 1 ? (b)->succ->succ_next : (b)->succ);
      e->probability = probability;
      e->count = ((b->count * probability + 10000 / 2)
    / 10000);
      f = ((b)->succ->flags & 1 ? (b)->succ : (b)->succ->succ_next);
      f->probability = 10000 - probability;
      f->count = b->count - e->count;
    }
  if (b->succ && !b->succ->succ_next)
    {
      e = b->succ;
      e->probability = 10000;
      e->count = b->count;
    }
}
void
find_many_sub_basic_blocks (sbitmap blocks)
{
  basic_block bb, min, max;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    ((bb)->aux = (void *) (size_t) (((blocks)->elms [(bb->index) / ((unsigned) (8 * 4))] >> (bb->index) % ((unsigned) (8 * 4)) & 1) ? BLOCK_TO_SPLIT : BLOCK_ORIGINAL))
                                                                       ;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if ((enum state) ((size_t) (bb)->aux) == BLOCK_TO_SPLIT)
      find_bb_boundaries (bb);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if ((enum state) ((size_t) (bb)->aux) != BLOCK_ORIGINAL)
      break;
  min = max = bb;
  for (; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if ((enum state) ((size_t) (bb)->aux) != BLOCK_ORIGINAL)
      max = bb;
  make_edges (min, max, 1);
  for (bb = min; bb != max->next_bb; bb = bb->next_bb)
    {
      edge e;
      if ((enum state) ((size_t) (bb)->aux) == BLOCK_ORIGINAL)
 continue;
      if ((enum state) ((size_t) (bb)->aux) == BLOCK_NEW)
 {
   bb->count = 0;
   bb->frequency = 0;
   for (e = bb->pred; e; e = e->pred_next)
     {
       bb->count += e->count;
       bb->frequency += (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
     }
 }
      compute_outgoing_frequencies (bb);
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    ((bb)->aux = (void *) (size_t) (0));
}
void
find_sub_basic_blocks (basic_block bb)
{
  basic_block min, max, b;
  basic_block next = bb->next_bb;
  min = bb;
  find_bb_boundaries (bb);
  max = next->prev_bb;
  make_edges (min, max, 1);
  for (b = min; b != max->next_bb; b = b->next_bb)
    {
      edge e;
      if (b != min)
 {
   b->count = 0;
   b->frequency = 0;
   for (e = b->pred; e; e = e->pred_next)
     {
       b->count += e->count;
       b->frequency += (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
     }
 }
      compute_outgoing_frequencies (b);
    }
}
enum bb_flags
{
    BB_FORWARDER_BLOCK = 1,
    BB_NONTHREADABLE_BLOCK = 2
};
static unsigned char first_pass;
static unsigned char try_crossjump_to_edge (int, edge, edge);
static unsigned char try_crossjump_bb (int, basic_block);
static unsigned char outgoing_edges_match (int, basic_block, basic_block);
static int flow_find_cross_jump (int, basic_block, basic_block, rtx *, rtx *);
static unsigned char insns_match_p (int, rtx, rtx);
static void merge_blocks_move_predecessor_nojumps (basic_block, basic_block);
static void merge_blocks_move_successor_nojumps (basic_block, basic_block);
static unsigned char try_optimize_cfg (int);
static unsigned char try_simplify_condjump (basic_block);
static unsigned char try_forward_edges (int, basic_block);
static edge thread_jump (int, edge, basic_block);
static unsigned char mark_effect (rtx, bitmap);
static void notice_new_block (basic_block);
static void update_forwarder_flag (basic_block);
static int mentions_nonequal_regs (rtx *, void *);
static void merge_memattrs (rtx, rtx);
static void
notice_new_block (basic_block bb)
{
  if (!bb)
    return;
  if (forwarder_block_p (bb))
    (bb)->aux = (void *) (long) ((enum bb_flags) (bb)->aux | (BB_FORWARDER_BLOCK));
}
static void
update_forwarder_flag (basic_block bb)
{
  if (forwarder_block_p (bb))
    (bb)->aux = (void *) (long) ((enum bb_flags) (bb)->aux | (BB_FORWARDER_BLOCK));
  else
    (bb)->aux = (void *) (long) ((enum bb_flags) (bb)->aux & ~(BB_FORWARDER_BLOCK));
}
static unsigned char
try_simplify_condjump (basic_block cbranch_block)
{
  basic_block jump_block, jump_dest_block, cbranch_dest_block;
  edge cbranch_jump_edge, cbranch_fallthru_edge;
  rtx cbranch_insn;
  rtx insn, next;
  rtx end;
  if (!cbranch_block->succ
      || !cbranch_block->succ->succ_next
      || cbranch_block->succ->succ_next->succ_next)
    return 0;
  cbranch_insn = (cbranch_block)->end_;
  if (!any_condjump_p (cbranch_insn))
    return 0;
  cbranch_fallthru_edge = ((cbranch_block)->succ->flags & 1 ? (cbranch_block)->succ : (cbranch_block)->succ->succ_next);
  cbranch_jump_edge = ((cbranch_block)->succ->flags & 1 ? (cbranch_block)->succ->succ_next : (cbranch_block)->succ);
  jump_block = cbranch_fallthru_edge->dest;
  if (jump_block->pred->pred_next
      || jump_block->next_bb == EXIT_BLOCK_PTR
      || !((enum bb_flags) (jump_block)->aux & BB_FORWARDER_BLOCK))
    return 0;
  jump_dest_block = jump_block->succ->dest;
  if (flag_reorder_blocks_and_partition
      && (jump_block->partition1 != jump_dest_block->partition1
   || cbranch_jump_edge->crossing_edge))
    return 0;
  cbranch_dest_block = cbranch_jump_edge->dest;
  if (cbranch_dest_block == EXIT_BLOCK_PTR
      || !can_fallthru (jump_block, cbranch_dest_block))
    return 0;
  if (!invert_jump (cbranch_insn, block_label (jump_dest_block), 0))
    return 0;
  if (dump_file)
    fprintf (dump_file, "Simplifying condjump %i around jump %i\n",
      (((cbranch_insn)->u.fld[0]).rtint), ((((jump_block)->end_)->u.fld[0]).rtint));
  cbranch_jump_edge = redirect_edge_succ_nodup (cbranch_jump_edge,
      cbranch_dest_block);
  cbranch_fallthru_edge = redirect_edge_succ_nodup (cbranch_fallthru_edge,
          jump_dest_block);
  cbranch_jump_edge->flags |= 1;
  cbranch_fallthru_edge->flags &= ~1;
  update_br_prob_note (cbranch_block);
  end = (jump_block)->end_;
  for (insn = (jump_block)->head_; insn != ((((jump_block)->end_)->u.fld[2]).rtx1);
       insn = next)
    {
      next = (((insn)->u.fld[2]).rtx1);
      if (((enum rtx_code) (insn)->code) == NOTE && (((insn)->u.fld[5]).rtint) > 0)
 {
   if (insn == (jump_block)->end_)
     {
       (jump_block)->end_ = (((insn)->u.fld[1]).rtx1);
       if (insn == end)
         break;
     }
   reorder_insns_nobb (insn, insn, end);
   end = insn;
 }
    }
  delete_basic_block (jump_block);
  tidy_fallthru_edge (cbranch_jump_edge);
  return 1;
}
static unsigned char
mark_effect (rtx exp, regset nonequal)
{
  int regno;
  rtx dest;
  switch (((enum rtx_code) (exp)->code))
    {
    case CLOBBER:
      if ((((enum rtx_code) ((((exp)->u.fld[0]).rtx1))->code) == REG))
 {
   dest = (((exp)->u.fld[0]).rtx1);
   regno = (((dest)->u.fld[0]).rtuint);
   bitmap_clear_bit (nonequal, regno);
   if (regno < 53)
     {
       int n = hard_regno_nregs[regno][((enum machine_mode) (dest)->mode)];
       while (--n > 0)
  bitmap_clear_bit (nonequal, regno + n);
     }
 }
      return 0;
    case SET:
      if (rtx_equal_for_cselib_p ((((exp)->u.fld[0]).rtx1), (((exp)->u.fld[1]).rtx1)))
 return 0;
      dest = (((exp)->u.fld[0]).rtx1);
      if (dest == (global_rtl[GR_PC]))
 return 0;
      if (!(((enum rtx_code) (dest)->code) == REG))
 return 1;
      regno = (((dest)->u.fld[0]).rtuint);
      bitmap_set_bit (nonequal, regno);
      if (regno < 53)
 {
   int n = hard_regno_nregs[regno][((enum machine_mode) (dest)->mode)];
   while (--n > 0)
     bitmap_set_bit (nonequal, regno + n);
 }
      return 0;
    default:
      return 0;
    }
}
static int
mentions_nonequal_regs (rtx *x, void *data)
{
  regset nonequal = (regset) data;
  if ((((enum rtx_code) (*x)->code) == REG))
    {
      int regno;
      regno = (((*x)->u.fld[0]).rtuint);
      if (bitmap_bit_p (nonequal, regno))
 return 1;
      if (regno < 53)
 {
   int n = hard_regno_nregs[regno][((enum machine_mode) (*x)->mode)];
   while (--n > 0)
     if (bitmap_bit_p (nonequal, regno + n))
       return 1;
 }
    }
  return 0;
}
static edge
thread_jump (int mode, edge e, basic_block b)
{
  rtx set1, set2, cond1, cond2, insn;
  enum rtx_code code1, code2, reversed_code2;
  unsigned char reverse1 = 0;
  int i;
  regset nonequal;
  unsigned char failed = 0;
  if ((enum bb_flags) (b)->aux & BB_NONTHREADABLE_BLOCK)
    return ((void *)0);
  if (!e->src->succ->succ_next || e->src->succ->succ_next->succ_next)
    return ((void *)0);
  if (!b->succ || !b->succ->succ_next || b->succ->succ_next->succ_next)
    {
      (b)->aux = (void *) (long) ((enum bb_flags) (b)->aux | (BB_NONTHREADABLE_BLOCK));
      return ((void *)0);
    }
  if (!any_condjump_p ((e->src)->end_))
    return ((void *)0);
  if (!any_condjump_p ((b)->end_) || !onlyjump_p ((b)->end_))
    {
      (b)->aux = (void *) (long) ((enum bb_flags) (b)->aux | (BB_NONTHREADABLE_BLOCK));
      return ((void *)0);
    }
  set1 = pc_set ((e->src)->end_);
  set2 = pc_set ((b)->end_);
  if (((e->flags & 1) != 0)
      != (((((((set1)->u.fld[1]).rtx1))->u.fld[1]).rtx1) == (global_rtl[GR_PC])))
    reverse1 = 1;
  cond1 = ((((((set1)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
  cond2 = ((((((set2)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
  if (reverse1)
    code1 = reversed_comparison_code (cond1, (e->src)->end_);
  else
    code1 = ((enum rtx_code) (cond1)->code);
  code2 = ((enum rtx_code) (cond2)->code);
  reversed_code2 = reversed_comparison_code (cond2, (b)->end_);
  if (!comparison_dominates_p (code1, code2)
      && !comparison_dominates_p (code1, reversed_code2))
    return ((void *)0);
  if (!rtx_equal_p ((((cond1)->u.fld[0]).rtx1), (((cond2)->u.fld[0]).rtx1))
      || !rtx_equal_p ((((cond1)->u.fld[1]).rtx1), (((cond2)->u.fld[1]).rtx1)))
    return ((void *)0);
  for (insn = ((((b)->head_)->u.fld[2]).rtx1); insn != ((((b)->end_)->u.fld[2]).rtx1);
       insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && side_effects_p ((((insn)->u.fld[5]).rtx1)))
      {
 (b)->aux = (void *) (long) ((enum bb_flags) (b)->aux | (BB_NONTHREADABLE_BLOCK));
 return ((void *)0);
      }
  cselib_init (0);
  for (insn = ((((e->src)->head_)->u.fld[2]).rtx1); insn != ((((e->src)->end_)->u.fld[2]).rtx1);
       insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      cselib_process_insn (insn);
  nonequal = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  bitmap_clear (nonequal);
  for (insn = ((((b)->head_)->u.fld[2]).rtx1); insn != ((((b)->end_)->u.fld[2]).rtx1) && !failed;
       insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   rtx pat = (((insn)->u.fld[5]).rtx1);
   if (((enum rtx_code) (pat)->code) == PARALLEL)
     {
       for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
  failed |= mark_effect ((((((pat)->u.fld[0]).rtvec1))->elem[i]), nonequal);
     }
   else
     failed |= mark_effect (pat, nonequal);
 }
      cselib_process_insn (insn);
    }
  if (failed)
    {
      (b)->aux = (void *) (long) ((enum bb_flags) (b)->aux | (BB_NONTHREADABLE_BLOCK));
      goto failed_exit;
    }
  if (for_each_rtx (&cond2, mentions_nonequal_regs, nonequal))
    goto failed_exit;
  if (mode & 16)
    bitmap_operation (nonequal, nonequal, b->global_live_at_end, BITMAP_AND);
  do { bitmap_element *ptr_ = (nonequal)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); goto failed_exit;; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0);
  do { if (nonequal) { bitmap_clear (nonequal); free (nonequal); (nonequal) = 0; } } while (0);
  cselib_finish ();
  if ((comparison_dominates_p (code1, code2) != 0)
      != (((((((set2)->u.fld[1]).rtx1))->u.fld[1]).rtx1) == (global_rtl[GR_PC])))
    return ((b)->succ->flags & 1 ? (b)->succ->succ_next : (b)->succ);
  else
    return ((b)->succ->flags & 1 ? (b)->succ : (b)->succ->succ_next);
failed_exit:
  do { if (nonequal) { bitmap_clear (nonequal); free (nonequal); (nonequal) = 0; } } while (0);
  cselib_finish ();
  return ((void *)0);
}
static unsigned char
try_forward_edges (int mode, basic_block b)
{
  unsigned char changed = 0;
  edge e, next, *threaded_edges = ((void *)0);
  if (flag_reorder_blocks_and_partition
      && find_reg_note ((b)->end_, REG_CROSSING_JUMP, (rtx) 0))
    return 0;
  for (e = b->succ; e; e = next)
    {
      basic_block target, first;
      int counter;
      unsigned char threaded = 0;
      int nthreaded_edges = 0;
      unsigned char may_thread = first_pass | (b->flags & 1);
      next = e->succ_next;
      if (e->flags & (2 | 4 | 8))
 continue;
      target = first = e->dest;
      counter = 0;
      while (counter < n_basic_blocks)
 {
   basic_block new_target = ((void *)0);
   unsigned char new_target_threaded = 0;
   may_thread |= target->flags & 1;
   if (((enum bb_flags) (target)->aux & BB_FORWARDER_BLOCK)
       && target->succ->dest != EXIT_BLOCK_PTR)
     {
       if (target == target->succ->dest)
  counter = n_basic_blocks;
       new_target = target->succ->dest;
     }
   else if ((mode & 32) && may_thread)
     {
       edge t = thread_jump (mode, e, target);
       if (t)
  {
    if (!threaded_edges)
      threaded_edges = xmalloc (sizeof (*threaded_edges)
           * n_basic_blocks);
    else
      {
        int i;
        for (i = 0; i < nthreaded_edges; ++i)
   if (threaded_edges[i] == t)
     break;
        if (i < nthreaded_edges)
   {
     counter = n_basic_blocks;
     break;
   }
      }
    if (t->dest == b)
      break;
    if (nthreaded_edges >= n_basic_blocks)
      fancy_abort ("gcc.c", 394944, "?");
    threaded_edges[nthreaded_edges++] = t;
    new_target = t->dest;
    new_target_threaded = 1;
  }
     }
   if (!new_target)
     break;
   if ((mode & 8) && optimize)
     {
       rtx insn = (target->succ->flags & 1
     ? (target)->head_ : prev_nonnote_insn ((target)->end_));
       if (((enum rtx_code) (insn)->code) != NOTE)
  insn = (((insn)->u.fld[2]).rtx1);
       for (; insn && ((enum rtx_code) (insn)->code) != CODE_LABEL && !((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN));
     insn = (((insn)->u.fld[2]).rtx1))
  if (((enum rtx_code) (insn)->code) == NOTE
      && (((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_BEG)
    break;
       if (((enum rtx_code) (insn)->code) == NOTE)
  break;
       insn = ((((target)->head_)->u.fld[1]).rtx1);
       if (insn && ((enum rtx_code) (insn)->code) == NOTE
      && (((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_END)
  break;
     }
   counter++;
   target = new_target;
   threaded |= new_target_threaded;
 }
      if (counter >= n_basic_blocks)
 {
   if (dump_file)
     fprintf (dump_file, "Infinite loop in BB %i.\n",
       target->index);
 }
      else if (target == first)
 ;
      else
 {
   gcov_type edge_count = e->count;
   int edge_probability = e->probability;
   int edge_frequency;
   int n = 0;
   if (threaded && target != EXIT_BLOCK_PTR)
     {
       notice_new_block (redirect_edge_and_branch_force (e, target));
       if (dump_file)
  fprintf (dump_file, "Conditionals threaded.\n");
     }
   else if (!redirect_edge_and_branch (e, target))
     {
       if (dump_file)
  fprintf (dump_file,
    "Forwarding edge %i->%i to %i failed.\n",
    b->index, e->dest->index, target->index);
       continue;
     }
   edge_frequency = ((edge_probability * b->frequency
        + 10000 / 2)
       / 10000);
   if (!((enum bb_flags) (b)->aux & BB_FORWARDER_BLOCK) && forwarder_block_p (b))
     (b)->aux = (void *) (long) ((enum bb_flags) (b)->aux | (BB_FORWARDER_BLOCK));
   do
     {
       edge t;
       first->count -= edge_count;
       if (first->count < 0)
  first->count = 0;
       first->frequency -= edge_frequency;
       if (first->frequency < 0)
  first->frequency = 0;
       if (first->succ->succ_next)
  {
    edge e;
    int prob;
    if (n >= nthreaded_edges)
      fancy_abort ("gcc.c", 395050, "?");
    t = threaded_edges [n++];
    if (t->src != first)
      fancy_abort ("gcc.c", 395053, "?");
    if (first->frequency)
      prob = edge_frequency * 10000 / first->frequency;
    else
      prob = 0;
    if (prob > t->probability)
      prob = t->probability;
    t->probability -= prob;
    prob = 10000 - prob;
    if (prob <= 0)
      {
        first->succ->probability = 10000;
        first->succ->succ_next->probability = 0;
      }
    else
      for (e = first->succ; e; e = e->succ_next)
        e->probability = ((e->probability * 10000)
     / (double) prob);
    update_br_prob_note (first);
  }
       else
  {
    if (n < nthreaded_edges
        && first == threaded_edges [n]->src)
      n++;
    t = first->succ;
  }
       t->count -= edge_count;
       if (t->count < 0)
  t->count = 0;
       first = t->dest;
     }
   while (first != target);
   changed = 1;
 }
    }
  if (threaded_edges)
    free (threaded_edges);
  return changed;
}
static void
merge_blocks_move_predecessor_nojumps (basic_block a, basic_block b)
{
  rtx barrier;
  if (flag_reorder_blocks_and_partition
      && (a->partition1 != b->partition1
   || find_reg_note ((a)->end_, REG_CROSSING_JUMP, (rtx) 0)))
    return;
  barrier = next_nonnote_insn ((a)->end_);
  if (((enum rtx_code) (barrier)->code) != BARRIER)
    fancy_abort ("gcc.c", 395122, "?");
  delete_insn (barrier);
  if (squeeze_notes (&(a)->head_, &(a)->end_))
    fancy_abort ("gcc.c", 395133, "?");
  if ((a)->end_ != ((((b)->head_)->u.fld[1]).rtx1))
    reorder_insns_nobb ((a)->head_, (a)->end_, ((((b)->head_)->u.fld[1]).rtx1));
  a->flags |= 1;
  if (dump_file)
    fprintf (dump_file, "Moved block %d before %d and merged.\n",
      a->index, b->index);
  unlink_block (a);
  link_block (a, b->prev_bb);
  merge_blocks (a, b);
}
static void
merge_blocks_move_successor_nojumps (basic_block a, basic_block b)
{
  rtx barrier, real_b_end;
  rtx label, table;
  if (flag_reorder_blocks_and_partition
      && (find_reg_note ((a)->end_, REG_CROSSING_JUMP, (rtx) 0)
   || a->partition1 != b->partition1))
    return;
  real_b_end = (b)->end_;
  if (tablejump_p ((b)->end_, &label, &table)
      && prev_active_insn (label) == (b)->end_)
    {
      (b)->end_ = table;
    }
  barrier = ((((b)->end_)->u.fld[2]).rtx1);
  if (barrier && ((enum rtx_code) (barrier)->code) == BARRIER)
    delete_insn (barrier);
  if (squeeze_notes (&(b)->head_, &(b)->end_))
    fancy_abort ("gcc.c", 395195, "?");
  reorder_insns_nobb ((b)->head_, (b)->end_, (a)->end_);
  (b)->end_ = real_b_end;
  if (dump_file)
    fprintf (dump_file, "Moved block %d after %d and merged.\n",
      b->index, a->index);
  merge_blocks (a, b);
}
static basic_block
merge_blocks_move (edge e, basic_block b, basic_block c, int mode)
{
  basic_block next;
  if (flag_reorder_blocks_and_partition
      && (find_reg_note ((b)->end_, REG_CROSSING_JUMP, (rtx) 0)
   || find_reg_note ((c)->end_, REG_CROSSING_JUMP, (rtx) 0)
   || b->partition1 != c->partition1))
    return ((void *)0);
  if (e->flags & 1)
    {
      int b_index = b->index, c_index = c->index;
      merge_blocks (b, c);
      update_forwarder_flag (b);
      if (dump_file)
 fprintf (dump_file, "Merged %d and %d without moving.\n",
   b_index, c_index);
      return b->prev_bb == ENTRY_BLOCK_PTR ? b : b->prev_bb;
    }
  else if (mode & 1)
    {
      edge tmp_edge, b_fallthru_edge;
      unsigned char c_has_outgoing_fallthru;
      unsigned char b_has_incoming_fallthru;
      if (((enum bb_flags) (b)->aux & BB_FORWARDER_BLOCK) || ((enum bb_flags) (c)->aux & BB_FORWARDER_BLOCK))
 return ((void *)0);
      for (tmp_edge = c->succ; tmp_edge; tmp_edge = tmp_edge->succ_next)
 if (tmp_edge->flags & 1)
   break;
      c_has_outgoing_fallthru = (tmp_edge != ((void *)0));
      for (tmp_edge = b->pred; tmp_edge; tmp_edge = tmp_edge->pred_next)
 if (tmp_edge->flags & 1)
   break;
      b_has_incoming_fallthru = (tmp_edge != ((void *)0));
      b_fallthru_edge = tmp_edge;
      next = b->prev_bb;
      if (next == c)
 next = next->prev_bb;
      if (! c_has_outgoing_fallthru)
 {
   merge_blocks_move_successor_nojumps (b, c);
          return next == ENTRY_BLOCK_PTR ? next->next_bb : next;
 }
      if (b_has_incoming_fallthru)
 {
   basic_block bb;
   if (b_fallthru_edge->src == ENTRY_BLOCK_PTR)
     return ((void *)0);
   bb = force_nonfallthru (b_fallthru_edge);
   if (bb)
     notice_new_block (bb);
 }
      merge_blocks_move_predecessor_nojumps (b, c);
      return next == ENTRY_BLOCK_PTR ? next->next_bb : next;
    }
  return ((void *)0);
}
void
merge_memattrs (rtx x, rtx y)
{
  int i;
  int j;
  enum rtx_code code;
  const char *fmt;
  if (x == y)
    return;
  if (x == 0 || y == 0)
    return;
  code = ((enum rtx_code) (x)->code);
  if (code != ((enum rtx_code) (y)->code))
    return;
  if (((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode))
    return;
  if (code == MEM && (((x)->u.fld[1]).rtmem) != (((y)->u.fld[1]).rtmem))
    {
      if (! (((x)->u.fld[1]).rtmem))
 (((y)->u.fld[1]).rtmem) = 0;
      else if (! (((y)->u.fld[1]).rtmem))
 (((x)->u.fld[1]).rtmem) = 0;
      else
 {
   if (((((x)->u.fld[1]).rtmem) == 0 ? 0 : (((x)->u.fld[1]).rtmem)->alias) != ((((y)->u.fld[1]).rtmem) == 0 ? 0 : (((y)->u.fld[1]).rtmem)->alias))
     {
       set_mem_alias_set (x, 0);
       set_mem_alias_set (y, 0);
     }
   if (! mem_expr_equal_p (((((x)->u.fld[1]).rtmem) == 0 ? 0 : (((x)->u.fld[1]).rtmem)->expr), ((((y)->u.fld[1]).rtmem) == 0 ? 0 : (((y)->u.fld[1]).rtmem)->expr)))
     {
       set_mem_expr (x, 0);
       set_mem_expr (y, 0);
       set_mem_offset (x, 0);
       set_mem_offset (y, 0);
     }
   else if (((((x)->u.fld[1]).rtmem) == 0 ? 0 : (((x)->u.fld[1]).rtmem)->offset) != ((((y)->u.fld[1]).rtmem) == 0 ? 0 : (((y)->u.fld[1]).rtmem)->offset))
     {
       set_mem_offset (x, 0);
       set_mem_offset (y, 0);
     }
   set_mem_size (x, ((((((x)->u.fld[1]).rtmem) != 0 ? (((x)->u.fld[1]).rtmem)->size : ((enum machine_mode) (x)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]))) : 0)) > (((((y)->u.fld[1]).rtmem) != 0 ? (((y)->u.fld[1]).rtmem)->size : ((enum machine_mode) (y)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (y)->mode)]))) : 0)) ? (((((x)->u.fld[1]).rtmem) != 0 ? (((x)->u.fld[1]).rtmem)->size : ((enum machine_mode) (x)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]))) : 0)) : (((((y)->u.fld[1]).rtmem) != 0 ? (((y)->u.fld[1]).rtmem)->size : ((enum machine_mode) (y)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (y)->mode)]))) : 0))));
   set_mem_size (y, ((((x)->u.fld[1]).rtmem) != 0 ? (((x)->u.fld[1]).rtmem)->size : ((enum machine_mode) (x)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]))) : 0));
   set_mem_align (x, ((((((x)->u.fld[1]).rtmem) != 0 ? (((x)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (x)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (x)->mode)) : 8))) < (((((y)->u.fld[1]).rtmem) != 0 ? (((y)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (y)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (y)->mode)) : 8))) ? (((((x)->u.fld[1]).rtmem) != 0 ? (((x)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (x)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (x)->mode)) : 8))) : (((((y)->u.fld[1]).rtmem) != 0 ? (((y)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (y)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (y)->mode)) : 8)))));
   set_mem_align (y, ((((x)->u.fld[1]).rtmem) != 0 ? (((x)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (x)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (x)->mode)) : 8)));
 }
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      switch (fmt[i])
 {
 case 'E':
   if ((((((x)->u.fld[i]).rtvec1))->num_elem) != (((((y)->u.fld[i]).rtvec1))->num_elem))
     return;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     merge_memattrs ((((((x)->u.fld[i]).rtvec1))->elem[j]), (((((y)->u.fld[i]).rtvec1))->elem[j]));
   break;
 case 'e':
   merge_memattrs ((((x)->u.fld[i]).rtx1), (((y)->u.fld[i]).rtx1));
 }
    }
  return;
}
static unsigned char
insns_match_p (int mode , rtx i1, rtx i2)
{
  rtx p1, p2;
  if (((enum rtx_code) (i1)->code) != ((enum rtx_code) (i2)->code))
    return 0;
  p1 = (((i1)->u.fld[5]).rtx1);
  p2 = (((i2)->u.fld[5]).rtx1);
  if (((enum rtx_code) (p1)->code) != ((enum rtx_code) (p2)->code))
    return 0;
  if (((enum rtx_code) (i1)->code) == CALL_INSN
      && (!rtx_equal_p ((((i1)->u.fld[9]).rtx1),
          (((i2)->u.fld[9]).rtx1))
   || (((i1))->jump) != (((i2))->jump)))
    return 0;
  if ((mode & 4) && stack_regs_mentioned (i1))
    {
      rtx note;
      HARD_REG_SET i1_regset, i2_regset;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (i1_regset); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (i2_regset); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      for (note = (((i1)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
 if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD && ((((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG) && ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 8 && ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint) <= (8 + 7)))
   ((i1_regset)[(((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
      for (note = (((i2)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
 if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD && ((((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG) && ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 8 && ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint) <= (8 + 7)))
   ((i2_regset)[(((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
      do { HARD_REG_ELT_TYPE *scan_xp_ = (i1_regset), *scan_yp_ = (i2_regset); if ((scan_xp_[0] == scan_yp_[0]) && (scan_xp_[1] == scan_yp_[1])) goto done; } while (0);
      return 0;
    done:
      ;
    }
  if (reload_completed
      ? rtx_renumbered_equal_p (p1, p2) : rtx_equal_p (p1, p2))
    return 1;
  if (!reload_completed)
    {
      rtx equiv1 = find_reg_equal_equiv_note (i1);
      rtx equiv2 = find_reg_equal_equiv_note (i2);
      if (equiv1 && equiv2
   && (! reload_completed
       || (((rtx_class[(int) (((enum rtx_code) ((((equiv1)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((equiv1)->u.fld[0]).rtx1))->code) == CONST_VECTOR)
    && rtx_equal_p ((((equiv1)->u.fld[0]).rtx1), (((equiv2)->u.fld[0]).rtx1)))))
 {
   rtx s1 = (((((enum rtx_code) (i1)->code) == INSN) || (((enum rtx_code) (i1)->code) == JUMP_INSN) || (((enum rtx_code) (i1)->code) == CALL_INSN)) ? (((enum rtx_code) ((((i1)->u.fld[5]).rtx1))->code) == SET ? (((i1)->u.fld[5]).rtx1) : single_set_2 (i1, (((i1)->u.fld[5]).rtx1))) : (rtx) 0);
   rtx s2 = (((((enum rtx_code) (i2)->code) == INSN) || (((enum rtx_code) (i2)->code) == JUMP_INSN) || (((enum rtx_code) (i2)->code) == CALL_INSN)) ? (((enum rtx_code) ((((i2)->u.fld[5]).rtx1))->code) == SET ? (((i2)->u.fld[5]).rtx1) : single_set_2 (i2, (((i2)->u.fld[5]).rtx1))) : (rtx) 0);
   if (s1 != 0 && s2 != 0
       && rtx_renumbered_equal_p ((((s1)->u.fld[0]).rtx1), (((s2)->u.fld[0]).rtx1)))
     {
       validate_change (i1, &(((s1)->u.fld[1]).rtx1), (((equiv1)->u.fld[0]).rtx1), 1);
       validate_change (i2, &(((s2)->u.fld[1]).rtx1), (((equiv2)->u.fld[0]).rtx1), 1);
       if (! rtx_renumbered_equal_p (p1, p2))
  cancel_changes (0);
       else if (apply_change_group ())
  return 1;
     }
 }
    }
  return 0;
}
static int
flow_find_cross_jump (int mode , basic_block bb1,
        basic_block bb2, rtx *f1, rtx *f2)
{
  rtx i1, i2, last1, last2, afterlast1, afterlast2;
  int ninsns = 0;
  i1 = (bb1)->end_;
  last1 = afterlast1 = last2 = afterlast2 = (rtx) 0;
  if (onlyjump_p (i1)
      || (returnjump_p (i1) && !side_effects_p ((((i1)->u.fld[5]).rtx1))))
    {
      last1 = i1;
      i1 = (((i1)->u.fld[1]).rtx1);
    }
  i2 = (bb2)->end_;
  if (onlyjump_p (i2)
      || (returnjump_p (i2) && !side_effects_p ((((i2)->u.fld[5]).rtx1))))
    {
      last2 = i2;
      if (!simplejump_p (i2) && !returnjump_p (i2) && last1)
 ninsns++;
      i2 = (((i2)->u.fld[1]).rtx1);
    }
  while (1)
    {
      while (!((((enum rtx_code) (i1)->code) == INSN) || (((enum rtx_code) (i1)->code) == JUMP_INSN) || (((enum rtx_code) (i1)->code) == CALL_INSN)) && i1 != (bb1)->head_)
 i1 = (((i1)->u.fld[1]).rtx1);
      while (!((((enum rtx_code) (i2)->code) == INSN) || (((enum rtx_code) (i2)->code) == JUMP_INSN) || (((enum rtx_code) (i2)->code) == CALL_INSN)) && i2 != (bb2)->head_)
 i2 = (((i2)->u.fld[1]).rtx1);
      if (i1 == (bb1)->head_ || i2 == (bb2)->head_)
 break;
      if (!insns_match_p (mode, i1, i2))
 break;
      merge_memattrs (i1, i2);
      if (((((enum rtx_code) (i1)->code) == INSN) || (((enum rtx_code) (i1)->code) == JUMP_INSN) || (((enum rtx_code) (i1)->code) == CALL_INSN)))
 {
   rtx equiv1 = find_reg_equal_equiv_note (i1);
   rtx equiv2 = find_reg_equal_equiv_note (i2);
   if (equiv1 && !equiv2)
     remove_note (i1, equiv1);
   else if (!equiv1 && equiv2)
     remove_note (i2, equiv2);
   else if (equiv1 && equiv2
     && !rtx_equal_p ((((equiv1)->u.fld[0]).rtx1), (((equiv2)->u.fld[0]).rtx1)))
     {
       remove_note (i1, equiv1);
       remove_note (i2, equiv2);
     }
   afterlast1 = last1, afterlast2 = last2;
   last1 = i1, last2 = i2;
   ninsns++;
 }
      i1 = (((i1)->u.fld[1]).rtx1);
      i2 = (((i2)->u.fld[1]).rtx1);
    }
  if (ninsns)
    {
      while (last1 != (bb1)->head_ && !((((enum rtx_code) ((((last1)->u.fld[1]).rtx1))->code) == INSN) || (((enum rtx_code) ((((last1)->u.fld[1]).rtx1))->code) == JUMP_INSN) || (((enum rtx_code) ((((last1)->u.fld[1]).rtx1))->code) == CALL_INSN)))
 last1 = (((last1)->u.fld[1]).rtx1);
      if (last1 != (bb1)->head_ && ((enum rtx_code) ((((last1)->u.fld[1]).rtx1))->code) == CODE_LABEL)
 last1 = (((last1)->u.fld[1]).rtx1);
      while (last2 != (bb2)->head_ && !((((enum rtx_code) ((((last2)->u.fld[1]).rtx1))->code) == INSN) || (((enum rtx_code) ((((last2)->u.fld[1]).rtx1))->code) == JUMP_INSN) || (((enum rtx_code) ((((last2)->u.fld[1]).rtx1))->code) == CALL_INSN)))
 last2 = (((last2)->u.fld[1]).rtx1);
      if (last2 != (bb2)->head_ && ((enum rtx_code) ((((last2)->u.fld[1]).rtx1))->code) == CODE_LABEL)
 last2 = (((last2)->u.fld[1]).rtx1);
      *f1 = last1;
      *f2 = last2;
    }
  return ninsns;
}
static unsigned char
outgoing_edges_match (int mode, basic_block bb1, basic_block bb2)
{
  int nehedges1 = 0, nehedges2 = 0;
  edge fallthru1 = 0, fallthru2 = 0;
  edge e1, e2;
  if (bb1->succ && !bb1->succ->succ_next
      && (bb1->succ->flags & ((2 | 4 | 8) | 16)) == 0
      && (((enum rtx_code) ((bb1)->end_)->code) != JUMP_INSN || simplejump_p ((bb1)->end_)))
    return (bb2->succ && !bb2->succ->succ_next
     && (bb2->succ->flags & ((2 | 4 | 8) | 16)) == 0
     && (((enum rtx_code) ((bb2)->end_)->code) != JUMP_INSN || simplejump_p ((bb2)->end_)));
  if (bb1->succ
      && bb1->succ->succ_next
      && !bb1->succ->succ_next->succ_next
      && any_condjump_p ((bb1)->end_)
      && onlyjump_p ((bb1)->end_))
    {
      edge b1, f1, b2, f2;
      unsigned char reverse, match;
      rtx set1, set2, cond1, cond2;
      enum rtx_code code1, code2;
      if (!bb2->succ
   || !bb2->succ->succ_next
   || bb2->succ->succ_next->succ_next
   || !any_condjump_p ((bb2)->end_)
   || !onlyjump_p ((bb2)->end_))
 return 0;
      b1 = ((bb1)->succ->flags & 1 ? (bb1)->succ->succ_next : (bb1)->succ);
      b2 = ((bb2)->succ->flags & 1 ? (bb2)->succ->succ_next : (bb2)->succ);
      f1 = ((bb1)->succ->flags & 1 ? (bb1)->succ : (bb1)->succ->succ_next);
      f2 = ((bb2)->succ->flags & 1 ? (bb2)->succ : (bb2)->succ->succ_next);
      if (((enum bb_flags) (f1->dest)->aux & BB_FORWARDER_BLOCK))
 f1 = f1->dest->succ;
      if (((enum bb_flags) (f2->dest)->aux & BB_FORWARDER_BLOCK))
 f2 = f2->dest->succ;
      if (((enum bb_flags) (f1->dest)->aux & BB_FORWARDER_BLOCK)
   || ((enum bb_flags) (f2->dest)->aux & BB_FORWARDER_BLOCK)
   || ((enum bb_flags) (b1->dest)->aux & BB_FORWARDER_BLOCK)
   || ((enum bb_flags) (b2->dest)->aux & BB_FORWARDER_BLOCK))
 return 0;
      if (f1->dest == f2->dest && b1->dest == b2->dest)
 reverse = 0;
      else if (f1->dest == b2->dest && b1->dest == f2->dest)
 reverse = 1;
      else
 return 0;
      set1 = pc_set ((bb1)->end_);
      set2 = pc_set ((bb2)->end_);
      if ((((((((set1)->u.fld[1]).rtx1))->u.fld[1]).rtx1) == (global_rtl[GR_PC]))
   != (((((((set2)->u.fld[1]).rtx1))->u.fld[1]).rtx1) == (global_rtl[GR_PC])))
 reverse = !reverse;
      cond1 = ((((((set1)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      cond2 = ((((((set2)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      code1 = ((enum rtx_code) (cond1)->code);
      if (reverse)
 code2 = reversed_comparison_code (cond2, (bb2)->end_);
      else
 code2 = ((enum rtx_code) (cond2)->code);
      if (code2 == UNKNOWN)
 return 0;
      match = ((code1 == code2
  && rtx_renumbered_equal_p ((((cond1)->u.fld[0]).rtx1), (((cond2)->u.fld[0]).rtx1))
  && rtx_renumbered_equal_p ((((cond1)->u.fld[1]).rtx1), (((cond2)->u.fld[1]).rtx1)))
        || (code1 == swap_condition (code2)
     && rtx_renumbered_equal_p ((((cond1)->u.fld[1]).rtx1),
           (((cond2)->u.fld[0]).rtx1))
     && rtx_renumbered_equal_p ((((cond1)->u.fld[0]).rtx1),
           (((cond2)->u.fld[1]).rtx1))));
      if (match
   && !optimize_size
   && maybe_hot_bb_p (bb1)
   && maybe_hot_bb_p (bb2))
 {
   int prob2;
   if (b1->dest == b2->dest)
     prob2 = b2->probability;
   else
     prob2 = 10000 - b2->probability;
   if (abs (b1->probability - prob2) > 10000 / 2)
     {
       if (dump_file)
  fprintf (dump_file,
    "Outcomes of branch in bb %i and %i differs to much (%i %i)\n",
    bb1->index, bb2->index, b1->probability, prob2);
       return 0;
     }
 }
      if (dump_file && match)
 fprintf (dump_file, "Conditionals in bb %i and %i match.\n",
   bb1->index, bb2->index);
      return match;
    }
    {
      rtx label1, label2;
      rtx table1, table2;
      if (tablejump_p ((bb1)->end_, &label1, &table1)
   && tablejump_p ((bb2)->end_, &label2, &table2)
   && ((enum rtx_code) ((((table1)->u.fld[5]).rtx1))->code) == ((enum rtx_code) ((((table2)->u.fld[5]).rtx1))->code))
 {
   if (label1 != label2 && !rtx_referenced_p (label2, (bb1)->end_))
     {
       unsigned char identical = 0;
       rtx p1, p2;
       p1 = (((table1)->u.fld[5]).rtx1);
       p2 = (((table2)->u.fld[5]).rtx1);
       if (((enum rtx_code) (p1)->code) == ADDR_VEC && rtx_equal_p (p1, p2))
  {
    identical = 1;
  }
       else if (((enum rtx_code) (p1)->code) == ADDR_DIFF_VEC
         && ((((((p1)->u.fld[1]).rtvec1))->num_elem) == (((((p2)->u.fld[1]).rtvec1))->num_elem))
         && rtx_equal_p ((((p1)->u.fld[2]).rtx1), (((p2)->u.fld[2]).rtx1))
         && rtx_equal_p ((((p1)->u.fld[3]).rtx1), (((p2)->u.fld[3]).rtx1)))
  {
    int i;
    identical = 1;
    for (i = (((((p1)->u.fld[1]).rtvec1))->num_elem) - 1; i >= 0 && identical; i--)
      if (!rtx_equal_p ((((((p1)->u.fld[1]).rtvec1))->elem[i]), (((((p2)->u.fld[1]).rtvec1))->elem[i])))
        identical = 0;
  }
       if (identical)
  {
    replace_label_data rr;
    unsigned char match;
    rr.r1 = label1;
    rr.r2 = label2;
    rr.update_label_nuses = 0;
    for_each_rtx (&(bb1)->end_, replace_label, &rr);
    match = insns_match_p (mode, (bb1)->end_, (bb2)->end_);
    if (dump_file && match)
      fprintf (dump_file,
        "Tablejumps in bb %i and %i match.\n",
        bb1->index, bb2->index);
    rr.r1 = label2;
    rr.r2 = label1;
    for_each_rtx (&(bb1)->end_, replace_label, &rr);
    return match;
  }
     }
   return 0;
 }
    }
  if (!insns_match_p (mode, (bb1)->end_, (bb2)->end_))
    return 0;
  for (e1 = bb1->succ, e2 = bb2->succ; e1 && e2;
       e1 = e1->succ_next, e2 = e2->succ_next)
    {
      if (e1->flags & 8)
 nehedges1++;
      if (e2->flags & 8)
 nehedges2++;
      if (e1->flags & 1)
 fallthru1 = e1;
      if (e2->flags & 1)
 fallthru2 = e2;
    }
  if (e1 || e2
      || nehedges1 != nehedges2
      || (fallthru1 != 0) != (fallthru2 != 0))
    return 0;
  if (fallthru1)
    {
      basic_block d1 = (forwarder_block_p (fallthru1->dest)
   ? fallthru1->dest->succ->dest: fallthru1->dest);
      basic_block d2 = (forwarder_block_p (fallthru2->dest)
   ? fallthru2->dest->succ->dest: fallthru2->dest);
      if (d1 != d2)
 return 0;
    }
  {
    rtx n1 = find_reg_note ((bb1)->end_, REG_EH_REGION, 0);
    rtx n2 = find_reg_note ((bb2)->end_, REG_EH_REGION, 0);
    if (!n1 && n2)
      return 0;
    if (n1 && (!n2 || (((n1)->u.fld[0]).rtx1) != (((n2)->u.fld[0]).rtx1)))
      return 0;
  }
  return 1;
}
static unsigned char
try_crossjump_to_edge (int mode, edge e1, edge e2)
{
  int nmatch;
  basic_block src1 = e1->src, src2 = e2->src;
  basic_block redirect_to, redirect_from, to_remove;
  rtx newpos1, newpos2;
  edge s;
  newpos1 = newpos2 = (rtx) 0;
  if (flag_reorder_blocks_and_partition && no_new_pseudos)
    return 0;
  if (src1->pred
      && !src1->pred->pred_next
      && ((enum bb_flags) (src1)->aux & BB_FORWARDER_BLOCK))
    e1 = src1->pred, src1 = e1->src;
  if (src2->pred
      && !src2->pred->pred_next
      && ((enum bb_flags) (src2)->aux & BB_FORWARDER_BLOCK))
    e2 = src2->pred, src2 = e2->src;
  if (src1 == ENTRY_BLOCK_PTR || src2 == ENTRY_BLOCK_PTR)
    return 0;
  if (src1 == src2)
    return 0;
  if (((enum bb_flags) (e1->dest)->aux & BB_FORWARDER_BLOCK)
      && ((enum bb_flags) (e1->dest->succ->dest)->aux & BB_FORWARDER_BLOCK))
    return 0;
  if (((enum bb_flags) (e2->dest)->aux & BB_FORWARDER_BLOCK)
      && ((enum bb_flags) (e2->dest->succ->dest)->aux & BB_FORWARDER_BLOCK))
    return 0;
  if (!src1->pred || !src2->pred)
    return 0;
  if (!outgoing_edges_match (mode, src1, src2))
    return 0;
  nmatch = flow_find_cross_jump (mode, src1, src2, &newpos1, &newpos2);
  if (!nmatch)
    return 0;
    {
      rtx label1, label2;
      rtx table1, table2;
      if (tablejump_p ((src1)->end_, &label1, &table1)
   && tablejump_p ((src2)->end_, &label2, &table2)
   && label1 != label2)
 {
   replace_label_data rr;
   rtx insn;
   rr.r1 = label1;
   rr.r2 = label2;
   rr.update_label_nuses = 1;
   for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
     {
       if (insn != (src1)->end_)
  for_each_rtx (&insn, replace_label, &rr);
     }
 }
    }
  if (newpos2 == (src2)->head_)
    redirect_to = src2;
  else
    {
      if (dump_file)
 fprintf (dump_file, "Splitting bb %i before %i insns\n",
   src2->index, nmatch);
      redirect_to = split_block (src2, (((newpos2)->u.fld[1]).rtx1))->dest;
    }
  if (dump_file)
    fprintf (dump_file,
      "Cross jumping from bb %i to bb %i; %i common insns\n",
      src1->index, src2->index, nmatch);
  redirect_to->count += src1->count;
  redirect_to->frequency += src1->frequency;
  redirect_to->flags |= 1;
  for (s = redirect_to->succ; s; s = s->succ_next)
    {
      edge s2;
      basic_block d = s->dest;
      if (((enum bb_flags) (d)->aux & BB_FORWARDER_BLOCK))
 d = d->succ->dest;
      for (s2 = src1->succ; ; s2 = s2->succ_next)
 {
   basic_block d2 = s2->dest;
   if (((enum bb_flags) (d2)->aux & BB_FORWARDER_BLOCK))
     d2 = d2->succ->dest;
   if (d == d2)
     break;
 }
      s->count += s2->count;
      if (((enum bb_flags) (s->dest)->aux & BB_FORWARDER_BLOCK))
 {
   s->dest->succ->count += s2->count;
   s->dest->count += s2->count;
   s->dest->frequency += (((s)->src->frequency * (s)->probability + 10000 / 2) / 10000);
 }
      if (((enum bb_flags) (s2->dest)->aux & BB_FORWARDER_BLOCK))
 {
   s2->dest->succ->count -= s2->count;
   if (s2->dest->succ->count < 0)
     s2->dest->succ->count = 0;
   s2->dest->count -= s2->count;
   s2->dest->frequency -= (((s)->src->frequency * (s)->probability + 10000 / 2) / 10000);
   if (s2->dest->frequency < 0)
     s2->dest->frequency = 0;
   if (s2->dest->count < 0)
     s2->dest->count = 0;
 }
      if (!redirect_to->frequency && !src1->frequency)
 s->probability = (s->probability + s2->probability) / 2;
      else
 s->probability
   = ((s->probability * redirect_to->frequency +
       s2->probability * src1->frequency)
      / (redirect_to->frequency + src1->frequency));
    }
  update_br_prob_note (redirect_to);
  if (((enum rtx_code) (newpos1)->code) == CODE_LABEL)
    newpos1 = (((newpos1)->u.fld[2]).rtx1);
  if (((enum rtx_code) (newpos1)->code) == NOTE)
    newpos1 = (((newpos1)->u.fld[2]).rtx1);
  redirect_from = split_block (src1, (((newpos1)->u.fld[1]).rtx1))->src;
  to_remove = redirect_from->succ->dest;
  redirect_edge_and_branch_force (redirect_from->succ, redirect_to);
  delete_basic_block (to_remove);
  update_forwarder_flag (redirect_from);
  return 1;
}
static unsigned char
try_crossjump_bb (int mode, basic_block bb)
{
  edge e, e2, nexte2, nexte, fallthru;
  unsigned char changed;
  int n = 0, max;
  if (!bb->pred || !bb->pred->pred_next)
    return 0;
  if (flag_reorder_blocks_and_partition
      && (bb->pred->src->partition1 != bb->pred->pred_next->src->partition1
   || bb->pred->crossing_edge))
    return 0;
  fallthru = ((void *)0);
  max = (compiler_params[(int) PARAM_MAX_CROSSJUMP_EDGES].value1);
  for (e = bb->pred; e ; e = e->pred_next, n++)
    {
      if (e->flags & 1)
 fallthru = e;
      if (n > max)
 return 0;
    }
  changed = 0;
  for (e = bb->pred; e; e = nexte)
    {
      nexte = e->pred_next;
      if (fallthru)
 {
   if (e == fallthru)
     continue;
   if (!first_pass
       && (!(e->src->flags & 1)
    && !(fallthru->src->flags & 1)))
     continue;
   if (try_crossjump_to_edge (mode, e, fallthru))
     {
       changed = 1;
       nexte = bb->pred;
       continue;
     }
 }
      if (e->src->succ != e)
 continue;
      for (e2 = bb->pred; e2; e2 = nexte2)
 {
   nexte2 = e2->pred_next;
   if (e2 == e)
     continue;
   if (e2 == fallthru)
     continue;
   if (e->src->index > e2->src->index)
     continue;
   if (!first_pass
       && (!(e->src->flags & 1)
    && !(e2->src->flags & 1)))
     continue;
   if (try_crossjump_to_edge (mode, e, e2))
     {
       changed = 1;
       nexte = bb->pred;
       break;
     }
 }
    }
  return changed;
}
static unsigned char
try_optimize_cfg (int mode)
{
  unsigned char changed_overall = 0;
  unsigned char changed;
  int iterations = 0;
  basic_block bb, b, next;
  if (mode & 2)
    add_noreturn_fake_exit_edges ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    update_forwarder_flag (bb);
  if (mode & (16 | 2 | 32))
    clear_bb_flags ();
  if (! targetm.cannot_modify_jumps_p ())
    {
      first_pass = 1;
      do
 {
   changed = 0;
   iterations++;
   if (dump_file)
     fprintf (dump_file,
       "\n\ntry_optimize_cfg iteration %i\n\n",
       iterations);
   for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR;)
     {
       basic_block c;
       edge s;
       unsigned char changed_here = 0;
       while (b->pred == ((void *)0))
  {
    c = b->prev_bb;
    if (dump_file)
      fprintf (dump_file, "Deleting block %i.\n",
        b->index);
    delete_basic_block (b);
    if (!(mode & 128))
      changed = 1;
    b = c;
  }
       if (b->pred->pred_next == ((void *)0)
    && (b->pred->flags & 1)
    && !(b->pred->flags & (2 | 4 | 8))
    && ((enum rtx_code) ((b)->head_)->code) == CODE_LABEL
    && (b->pred->src == ENTRY_BLOCK_PTR
        || ((enum rtx_code) ((b->pred->src)->end_)->code) != JUMP_INSN
        || ! label_is_jump_target_p ((b)->head_,
         (b->pred->src)->end_)))
  {
    rtx label = (b)->head_;
    delete_insn_chain (label, label);
    if (((((b)->head_)->u.fld[5]).rtint) == NOTE_INSN_DELETED_LABEL)
      {
        rtx bb_note = ((((b)->head_)->u.fld[2]).rtx1);
        reorder_insns_nobb (label, label, bb_note);
        (b)->head_ = bb_note;
      }
    if (dump_file)
      fprintf (dump_file, "Deleted label in block %i.\n",
        b->index);
  }
       if (!(mode & 128)
    && b->pred->pred_next == ((void *)0)
    && (b->pred->flags & 1)
    && ((enum rtx_code) ((b)->head_)->code) != CODE_LABEL
    && ((enum bb_flags) (b)->aux & BB_FORWARDER_BLOCK)
    && (b->succ->flags & 1)
    && n_basic_blocks > 1)
  {
    if (dump_file)
      fprintf (dump_file,
        "Deleting fallthru block %i.\n",
        b->index);
    c = b->prev_bb == ENTRY_BLOCK_PTR ? b->next_bb : b->prev_bb;
    redirect_edge_succ_nodup (b->pred, b->succ->dest);
    delete_basic_block (b);
    changed = 1;
    b = c;
  }
       if ((s = b->succ) != ((void *)0)
    && s->succ_next == ((void *)0)
    && !(s->flags & (2 | 4 | 8))
    && (c = s->dest) != EXIT_BLOCK_PTR
    && c->pred->pred_next == ((void *)0)
    && b != c)
  {
    if ((mode & 128)
        && can_merge_blocks_p (b, c))
      {
        merge_blocks (b, c);
        update_forwarder_flag (b);
        changed_here = 1;
      }
    else if (!(mode & 128)
      && (((enum rtx_code) ((b)->end_)->code) != JUMP_INSN
          || (reload_completed
       ? simplejump_p ((b)->end_)
       : (onlyjump_p ((b)->end_)
          && !tablejump_p ((b)->end_,
             ((void *)0), ((void *)0)))))
      && (next = merge_blocks_move (s, b, c, mode)))
        {
   b = next;
   changed_here = 1;
        }
  }
       if ((mode & 1)
     && !(mode & 128)
     && try_simplify_condjump (b))
  changed_here = 1;
       if (b->succ
    && ! b->succ->succ_next
    && b->succ->dest != EXIT_BLOCK_PTR
    && onlyjump_p ((b)->end_)
    && !find_reg_note ((b)->end_, REG_CROSSING_JUMP, (rtx) 0)
    && try_redirect_by_replacing_jump (b->succ, b->succ->dest,
           (mode & 128) != 0))
  {
    update_forwarder_flag (b);
    changed_here = 1;
  }
       if (try_forward_edges (mode, b))
  changed_here = 1;
       if ((mode & 2)
    && try_crossjump_bb (mode, b))
  changed_here = 1;
       if (!changed_here)
  b = b->next_bb;
       else
  changed = 1;
     }
   if ((mode & 2)
       && try_crossjump_bb (mode, EXIT_BLOCK_PTR))
     changed = 1;
   changed_overall |= changed;
   first_pass = 0;
 }
      while (changed);
    }
  if (mode & 2)
    remove_fake_edges ();
  clear_aux_for_blocks ();
  return changed_overall;
}
unsigned char
delete_unreachable_blocks (void)
{
  unsigned char changed = 0;
  basic_block b, next_bb;
  find_unreachable_blocks ();
  for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = next_bb)
    {
      next_bb = b->next_bb;
      if (!(b->flags & 4))
 {
   delete_basic_block (b);
   changed = 1;
 }
    }
  if (changed)
    tidy_fallthru_edges ();
  return changed;
}
unsigned char
merge_seq_blocks (void)
{
  basic_block bb;
  unsigned char changed = 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; )
    {
      if (bb->succ
   && !bb->succ->succ_next
   && can_merge_blocks_p (bb, bb->succ->dest))
 {
   merge_blocks (bb, bb->succ->dest);
   changed = 1;
   continue;
 }
      bb = bb->next_bb;
    }
  return changed;
}
unsigned char
cleanup_cfg (int mode)
{
  unsigned char changed = 0;
  timevar_push (TV_CLEANUP_CFG);
  if (delete_unreachable_blocks ())
    {
      changed = 1;
      if (!(mode & (64 | 16))
   && !reload_completed)
 delete_trivially_dead_insns (get_insns(), max_reg_num ());
    }
  compact_blocks ();
  while (try_optimize_cfg (mode))
    {
      delete_unreachable_blocks (), changed = 1;
      if (mode & 16)
 {
   if (!update_life_info_in_dirty_blocks (UPDATE_LIFE_GLOBAL_RM_NOTES,
       1
       | 16
       | 8
         | ((mode & 256)
          ? 2 : 0)))
     break;
 }
      else if (!(mode & 64)
        && (mode & 1)
        && !reload_completed)
 {
   if (!delete_trivially_dead_insns (get_insns(), max_reg_num ()))
     break;
 }
      else
 break;
      delete_dead_jumptables ();
    }
  free_EXPR_LIST_list (&label_value_list);
  timevar_pop (TV_CLEANUP_CFG);
  return changed;
}
extern struct obstack flow_obstack;
rtx cfg_layout_function_footer, cfg_layout_function_header;
static rtx skip_insns_after_block (basic_block);
static void record_effective_endpoints (void);
static rtx get_label_for_bb (basic_block);
static void fixup_reorder_chain (void);
static void set_block_levels (tree, int);
static void change_scope (rtx, tree, tree);
void verify_insn_chain (void);
static void fixup_fallthru_exit_predecessor (void);
static tree insn_scope (rtx);
static void update_unlikely_executed_notes (basic_block);
rtx
unlink_insn_chain (rtx first, rtx last)
{
  rtx prevfirst = (((first)->u.fld[1]).rtx1);
  rtx nextlast = (((last)->u.fld[2]).rtx1);
  (((first)->u.fld[1]).rtx1) = ((void *)0);
  (((last)->u.fld[2]).rtx1) = ((void *)0);
  if (prevfirst)
    (((prevfirst)->u.fld[2]).rtx1) = nextlast;
  if (nextlast)
    (((nextlast)->u.fld[1]).rtx1) = prevfirst;
  else
    set_last_insn (prevfirst);
  if (!prevfirst)
    set_first_insn (nextlast);
  return first;
}
static rtx
skip_insns_after_block (basic_block bb)
{
  rtx insn, last_insn, next_head, prev;
  next_head = (rtx) 0;
  if (bb->next_bb != EXIT_BLOCK_PTR)
    next_head = (bb->next_bb)->head_;
  for (last_insn = insn = (bb)->end_; (insn = (((insn)->u.fld[2]).rtx1)) != 0; )
    {
      if (insn == next_head)
 break;
      switch (((enum rtx_code) (insn)->code))
 {
 case BARRIER:
   last_insn = insn;
   continue;
 case NOTE:
   switch ((((insn)->u.fld[5]).rtint))
     {
     case NOTE_INSN_LOOP_END:
     case NOTE_INSN_BLOCK_END:
       last_insn = insn;
       continue;
     case NOTE_INSN_DELETED:
     case NOTE_INSN_DELETED_LABEL:
       continue;
     default:
       continue;
       break;
     }
   break;
 case CODE_LABEL:
   if ((((insn)->u.fld[2]).rtx1)
       && ((enum rtx_code) ((((insn)->u.fld[2]).rtx1))->code) == JUMP_INSN
       && (((enum rtx_code) (((((((insn)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->code) == ADDR_VEC
           || ((enum rtx_code) (((((((insn)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC))
     {
       insn = (((insn)->u.fld[2]).rtx1);
       last_insn = insn;
       continue;
     }
   break;
 default:
   break;
 }
      break;
    }
  for (insn = last_insn; insn != (bb)->end_; insn = prev)
    {
      prev = (((insn)->u.fld[1]).rtx1);
      if (((enum rtx_code) (insn)->code) == NOTE)
 switch ((((insn)->u.fld[5]).rtint))
   {
   case NOTE_INSN_LOOP_END:
   case NOTE_INSN_BLOCK_END:
   case NOTE_INSN_DELETED:
   case NOTE_INSN_DELETED_LABEL:
     continue;
   default:
     reorder_insns (insn, insn, last_insn);
   }
    }
  return last_insn;
}
static rtx
get_label_for_bb (basic_block bb)
{
  rtx label = (bb)->head_;
  if (((enum rtx_code) (label)->code) != CODE_LABEL)
    {
      if (dump_file)
 fprintf (dump_file, "Emitting label for block %d\n", bb->index);
      label = block_label (bb);
    }
  return label;
}
static void
record_effective_endpoints (void)
{
  rtx next_insn;
  basic_block bb;
  rtx insn;
  for (insn = get_insns ();
       insn
       && ((enum rtx_code) (insn)->code) == NOTE
       && (((insn)->u.fld[5]).rtint) != NOTE_INSN_BASIC_BLOCK;
       insn = (((insn)->u.fld[2]).rtx1))
    continue;
  if (!insn)
    fancy_abort ("gcc.c", 396708, "?");
  if ((((insn)->u.fld[1]).rtx1))
    cfg_layout_function_header =
     unlink_insn_chain (get_insns (), (((insn)->u.fld[1]).rtx1));
  else
    cfg_layout_function_header = (rtx) 0;
  next_insn = get_insns ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      rtx end;
      if (((((bb)->head_)->u.fld[1]).rtx1) && next_insn != (bb)->head_)
 bb->rbi->header1 = unlink_insn_chain (next_insn,
           ((((bb)->head_)->u.fld[1]).rtx1));
      end = skip_insns_after_block (bb);
      if (((((bb)->end_)->u.fld[2]).rtx1) && (bb)->end_ != end)
 bb->rbi->footer = unlink_insn_chain (((((bb)->end_)->u.fld[2]).rtx1), end);
      next_insn = ((((bb)->end_)->u.fld[2]).rtx1);
    }
  cfg_layout_function_footer = next_insn;
  if (cfg_layout_function_footer)
    cfg_layout_function_footer = unlink_insn_chain (cfg_layout_function_footer, get_last_insn ());
}
static varray_type block_locators_locs;
static varray_type block_locators_blocks;
static varray_type line_locators_locs;
static varray_type line_locators_lines;
static varray_type file_locators_locs;
static varray_type file_locators_files;
int prologue_locator;
int epilogue_locator;
void
insn_locators_initialize (void)
{
  tree block = ((void *)0);
  tree last_block = ((void *)0);
  rtx insn, next;
  int loc = 0;
  int line_number = 0, last_line_number = 0;
  const char *file_name = ((void *)0), *last_file_name = ((void *)0);
  prologue_locator = epilogue_locator = 0;
  block_locators_locs = varray_init (32, VARRAY_DATA_I, "block_locators_locs");
  block_locators_blocks = varray_init (32, VARRAY_DATA_TREE, "block_locators_blocks");
  line_locators_locs = varray_init (32, VARRAY_DATA_I, "line_locators_locs");
  line_locators_lines = varray_init (32, VARRAY_DATA_I, "line_locators_lines");
  file_locators_locs = varray_init (32, VARRAY_DATA_I, "file_locators_locs");
  file_locators_files = varray_init (32, VARRAY_DATA_CPTR, "file_locators_files");
  for (insn = get_insns (); insn; insn = next)
    {
      next = (((insn)->u.fld[2]).rtx1);
      if ((active_insn_p (insn)
    && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ADDR_VEC
    && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ADDR_DIFF_VEC)
   || !(((insn)->u.fld[2]).rtx1)
   || (!prologue_locator && file_name))
 {
   if (last_block != block)
     {
       loc++;
       do { if ((block_locators_locs)->elements_used >= (block_locators_locs)->num_elements) (((block_locators_locs)) = varray_grow ((block_locators_locs), 2 * (block_locators_locs)->num_elements)); (block_locators_locs)->data.i[(block_locators_locs)->elements_used++] = (loc); } while (0);
       do { if ((block_locators_blocks)->elements_used >= (block_locators_blocks)->num_elements) (((block_locators_blocks)) = varray_grow ((block_locators_blocks), 2 * (block_locators_blocks)->num_elements)); (block_locators_blocks)->data.tree1[(block_locators_blocks)->elements_used++] = (block); } while (0);
       last_block = block;
     }
   if (last_line_number != line_number)
     {
       loc++;
       do { if ((line_locators_locs)->elements_used >= (line_locators_locs)->num_elements) (((line_locators_locs)) = varray_grow ((line_locators_locs), 2 * (line_locators_locs)->num_elements)); (line_locators_locs)->data.i[(line_locators_locs)->elements_used++] = (loc); } while (0);
       do { if ((line_locators_lines)->elements_used >= (line_locators_lines)->num_elements) (((line_locators_lines)) = varray_grow ((line_locators_lines), 2 * (line_locators_lines)->num_elements)); (line_locators_lines)->data.i[(line_locators_lines)->elements_used++] = (line_number); } while (0);
       last_line_number = line_number;
     }
   if (last_file_name != file_name)
     {
       loc++;
       do { if ((file_locators_locs)->elements_used >= (file_locators_locs)->num_elements) (((file_locators_locs)) = varray_grow ((file_locators_locs), 2 * (file_locators_locs)->num_elements)); (file_locators_locs)->data.i[(file_locators_locs)->elements_used++] = (loc); } while (0);
       do { if ((file_locators_files)->elements_used >= (file_locators_files)->num_elements) (((file_locators_files)) = varray_grow ((file_locators_files), 2 * (file_locators_files)->num_elements)); (file_locators_files)->data.cptr[(file_locators_files)->elements_used++] = ((char *) file_name); } while (0);
       last_file_name = file_name;
     }
 }
      if (!prologue_locator && file_name)
 prologue_locator = loc;
      if (!(((insn)->u.fld[2]).rtx1))
 epilogue_locator = loc;
      if (active_insn_p (insn))
        (((insn)->u.fld[4]).rtint) = loc;
      else if (((enum rtx_code) (insn)->code) == NOTE)
 {
   switch ((((insn)->u.fld[5]).rtint))
     {
     case NOTE_INSN_BLOCK_BEG:
     case NOTE_INSN_BLOCK_END:
       fancy_abort ("gcc.c", 396817, "?");
     default:
       if ((((insn)->u.fld[5]).rtint) > 0)
  {
    expanded_location xloc;
    ((xloc).file = (((insn)->u.fld[4]).rtstr), (xloc).line = (((insn)->u.fld[5]).rtint));
    line_number = xloc.line;
    file_name = xloc.file;
  }
       break;
     }
 }
      check_block_change (insn, &block);
    }
  set_block_levels (((cfun->decl)->decl.initial), 0);
  free_block_changes ();
}
static void
set_block_levels (tree block, int level)
{
  while (block)
    {
      ((block)->block.block_num) = level;
      set_block_levels (((block)->block.subblocks), level + 1);
      block = (((block))->common.chain);
    }
}
tree
choose_inner_scope (tree s1, tree s2)
{
   if (!s1)
     return s2;
   if (!s2)
     return s1;
   if (((s1)->block.block_num) > ((s2)->block.block_num))
     return s1;
   return s2;
}
static void
change_scope (rtx orig_insn, tree s1, tree s2)
{
  rtx insn = orig_insn;
  tree com = (tree) ((void *)0);
  tree ts1 = s1, ts2 = s2;
  tree s;
  while (ts1 != ts2)
    {
      if (ts1 == ((void *)0) || ts2 == ((void *)0))
 fancy_abort ("gcc.c", 396881, "?");
      if (((ts1)->block.block_num) > ((ts2)->block.block_num))
 ts1 = ((ts1)->block.supercontext);
      else if (((ts1)->block.block_num) < ((ts2)->block.block_num))
 ts2 = ((ts2)->block.supercontext);
      else
 {
   ts1 = ((ts1)->block.supercontext);
   ts2 = ((ts2)->block.supercontext);
 }
    }
  com = ts1;
  s = s1;
  while (s != com)
    {
      rtx note = emit_note_before (NOTE_INSN_BLOCK_END, insn);
      (((note)->u.fld[4]).rttree) = s;
      s = ((s)->block.supercontext);
    }
  s = s2;
  while (s != com)
    {
      insn = emit_note_before (NOTE_INSN_BLOCK_BEG, insn);
      (((insn)->u.fld[4]).rttree) = s;
      s = ((s)->block.supercontext);
    }
}
static tree
insn_scope (rtx insn)
{
  int max = ((block_locators_locs)->elements_used);
  int min = 0;
  int loc = (((insn)->u.fld[4]).rtint);
  if (loc == prologue_locator || loc == epilogue_locator)
    return ((cfun->decl)->decl.initial);
  if (!max || !loc)
    return ((void *)0);
  while (1)
    {
      int pos = (min + max) / 2;
      int tmp = ((block_locators_locs)->data.i[pos]);
      if (tmp <= loc && min != pos)
 min = pos;
      else if (tmp > loc && max != pos)
 max = pos;
      else
 {
   min = pos;
   break;
 }
    }
   return ((block_locators_blocks)->data.tree1[min]);
}
int
locator_line (int loc)
{
  int max = ((line_locators_locs)->elements_used);
  int min = 0;
  if (!max || !loc)
    return 0;
  while (1)
    {
      int pos = (min + max) / 2;
      int tmp = ((line_locators_locs)->data.i[pos]);
      if (tmp <= loc && min != pos)
 min = pos;
      else if (tmp > loc && max != pos)
 max = pos;
      else
 {
   min = pos;
   break;
 }
    }
   return ((line_locators_lines)->data.i[min]);
}
int
insn_line (rtx insn)
{
  return locator_line ((((insn)->u.fld[4]).rtint));
}
const char *
locator_file (int loc)
{
  int max = ((file_locators_locs)->elements_used);
  int min = 0;
  if (!max || !loc)
    return ((void *)0);
  while (1)
    {
      int pos = (min + max) / 2;
      int tmp = ((file_locators_locs)->data.i[pos]);
      if (tmp <= loc && min != pos)
 min = pos;
      else if (tmp > loc && max != pos)
 max = pos;
      else
 {
   min = pos;
   break;
 }
    }
   return ((file_locators_files)->data.cptr[min]);
}
const char *
insn_file (rtx insn)
{
  return locator_file ((((insn)->u.fld[4]).rtint));
}
void
reemit_insn_block_notes (void)
{
  tree cur_block = ((cfun->decl)->decl.initial);
  rtx insn, note;
  insn = get_insns ();
  if (!active_insn_p (insn))
    insn = next_active_insn (insn);
  for (; insn; insn = next_active_insn (insn))
    {
      tree this_block;
      this_block = insn_scope (insn);
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
 {
   int i;
   rtx body = (((insn)->u.fld[5]).rtx1);
   this_block = ((void *)0);
   for (i = 0; i < (((((body)->u.fld[0]).rtvec1))->num_elem); i++)
     this_block = choose_inner_scope (this_block,
      insn_scope ((((((body)->u.fld[0]).rtvec1))->elem[i])));
 }
      if (! this_block)
 continue;
      if (this_block != cur_block)
 {
   change_scope (insn, cur_block, this_block);
   cur_block = this_block;
 }
    }
  note = emit_note (NOTE_INSN_DELETED);
  change_scope (note, cur_block, ((cfun->decl)->decl.initial));
  delete_insn (note);
  reorder_blocks ();
}
static void
fixup_reorder_chain (void)
{
  basic_block bb, prev_bb;
  int index;
  rtx insn = ((void *)0);
  if (cfg_layout_function_header)
    {
      set_first_insn (cfg_layout_function_header);
      insn = cfg_layout_function_header;
      while ((((insn)->u.fld[2]).rtx1))
 insn = (((insn)->u.fld[2]).rtx1);
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb, index = 0;
       bb != 0;
       bb = bb->rbi->next, index++)
    {
      if (bb->rbi->header1)
 {
   if (insn)
     (((insn)->u.fld[2]).rtx1) = bb->rbi->header1;
   else
     set_first_insn (bb->rbi->header1);
   (((bb->rbi->header1)->u.fld[1]).rtx1) = insn;
   insn = bb->rbi->header1;
   while ((((insn)->u.fld[2]).rtx1))
     insn = (((insn)->u.fld[2]).rtx1);
 }
      if (insn)
 (((insn)->u.fld[2]).rtx1) = (bb)->head_;
      else
 set_first_insn ((bb)->head_);
      ((((bb)->head_)->u.fld[1]).rtx1) = insn;
      insn = (bb)->end_;
      if (bb->rbi->footer)
 {
   (((insn)->u.fld[2]).rtx1) = bb->rbi->footer;
   (((bb->rbi->footer)->u.fld[1]).rtx1) = insn;
   while ((((insn)->u.fld[2]).rtx1))
     insn = (((insn)->u.fld[2]).rtx1);
 }
    }
  if (index != n_basic_blocks)
    fancy_abort ("gcc.c", 397119, "?");
  (((insn)->u.fld[2]).rtx1) = cfg_layout_function_footer;
  if (cfg_layout_function_footer)
    (((cfg_layout_function_footer)->u.fld[1]).rtx1) = insn;
  while ((((insn)->u.fld[2]).rtx1))
    insn = (((insn)->u.fld[2]).rtx1);
  set_last_insn (insn);
  delete_dead_jumptables ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb ; bb = bb->rbi->next)
    {
      edge e_fall, e_taken, e;
      rtx bb_end_insn;
      basic_block nb;
      basic_block old_bb;
      if (bb->succ == ((void *)0))
 continue;
      e_taken = e_fall = ((void *)0);
      for (e = bb->succ; e ; e = e->succ_next)
 if (e->flags & 1)
   e_fall = e;
 else if (! (e->flags & 8))
   e_taken = e;
      bb_end_insn = (bb)->end_;
      if (((enum rtx_code) (bb_end_insn)->code) == JUMP_INSN)
 {
   if (any_condjump_p (bb_end_insn))
     {
       if (bb->rbi->next == e_fall->dest
           || e_fall->dest == EXIT_BLOCK_PTR)
  continue;
       if (!e_taken)
  {
    rtx note;
    edge e_fake;
    e_fake = unchecked_make_edge (bb, e_fall->dest, 0);
    if (!redirect_jump ((bb)->end_, block_label (bb), 0))
      fancy_abort ("gcc.c", 397182, "?");
    note = find_reg_note ((bb)->end_, REG_BR_PROB, (rtx) 0);
    if (note)
      {
        int prob = (((((note)->u.fld[0]).rtx1))->u.hwint[0]);
        e_fake->probability = prob;
        e_fake->count = e_fall->count * prob / 10000;
        e_fall->probability -= e_fall->probability;
        e_fall->count -= e_fake->count;
        if (e_fall->probability < 0)
   e_fall->probability = 0;
        if (e_fall->count < 0)
   e_fall->count = 0;
      }
  }
       else if (bb->rbi->next != e_taken->dest)
  {
    rtx note = find_reg_note (bb_end_insn, REG_BR_PROB, 0);
    if (note
        && (((((note)->u.fld[0]).rtx1))->u.hwint[0]) < 10000 / 2
        && invert_jump (bb_end_insn,
          (e_fall->dest == EXIT_BLOCK_PTR
           ? (rtx) 0
           : get_label_for_bb (e_fall->dest)), 0))
      {
        e_fall->flags &= ~1;
        e_taken->flags |= 1;
        update_br_prob_note (bb);
        e = e_fall, e_fall = e_taken, e_taken = e;
      }
  }
       else if (e_taken->crossing_edge && !e_fall->crossing_edge)
  continue;
       else if (invert_jump (bb_end_insn,
        (e_fall->dest == EXIT_BLOCK_PTR
         ? (rtx) 0
         : get_label_for_bb (e_fall->dest)), 0))
  {
    e_fall->flags &= ~1;
    e_taken->flags |= 1;
    update_br_prob_note (bb);
    continue;
  }
     }
   else if (returnjump_p (bb_end_insn))
     continue;
   else
     {
       if (! e_fall)
  continue;
       fancy_abort ("gcc.c", 397262, "?");
     }
 }
      else
 {
   if (! e_fall)
     continue;
   if (bb->rbi->next == e_fall->dest)
     continue;
   if (e_fall->dest == EXIT_BLOCK_PTR)
     continue;
 }
      nb = force_nonfallthru (e_fall);
      if (nb)
 {
   initialize_bb_rbi (nb);
   nb->rbi->visited = 1;
   nb->rbi->next = bb->rbi->next;
   bb->rbi->next = nb;
   old_bb = bb;
   bb = nb;
   e_fall->src->partition1 = bb->pred->src->partition1;
   if (flag_reorder_blocks_and_partition)
     {
       if (bb->pred->src->partition1 == 2)
  {
    rtx new_note;
    rtx note = (e_fall->src)->head_;
    while (!((((enum rtx_code) (note)->code) == INSN) || (((enum rtx_code) (note)->code) == JUMP_INSN) || (((enum rtx_code) (note)->code) == CALL_INSN))
    && note != (e_fall->src)->end_)
      note = (((note)->u.fld[2]).rtx1);
    new_note = emit_note_before
                                          (NOTE_INSN_UNLIKELY_EXECUTED_CODE,
        note);
    (((new_note)->u.fld[4]).bb) = bb;
  }
       if (((enum rtx_code) ((bb)->end_)->code) == JUMP_INSN
    && !any_condjump_p ((bb)->end_)
    && bb->succ->crossing_edge )
  ((((bb)->end_)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_CROSSING_JUMP), ((rtx) 0), (((((bb)->end_)->u.fld[8]).rtx1)))
                                                          ;
     }
 }
    }
  if (dump_file)
    {
      fprintf (dump_file, "Reordered sequence:\n");
      for (bb = ENTRY_BLOCK_PTR->next_bb, index = 0;
    bb;
    bb = bb->rbi->next, index++)
 {
   fprintf (dump_file, " %i ", index);
   if (bb->rbi->original)
     fprintf (dump_file, "duplicate of %i ",
       bb->rbi->original->index);
   else if (forwarder_block_p (bb)
     && ((enum rtx_code) ((bb)->head_)->code) != CODE_LABEL)
     fprintf (dump_file, "compensation ");
   else
     fprintf (dump_file, "bb %i ", bb->index);
   fprintf (dump_file, " [%i]\n", bb->frequency);
 }
    }
  prev_bb = ENTRY_BLOCK_PTR;
  bb = ENTRY_BLOCK_PTR->next_bb;
  index = 0;
  for (; bb; prev_bb = bb, bb = bb->rbi->next, index ++)
    {
      bb->index = index;
      (((basic_block_info)->data.bb[(index)])) = bb;
      update_unlikely_executed_notes (bb);
      bb->prev_bb = prev_bb;
      prev_bb->next_bb = bb;
    }
  prev_bb->next_bb = EXIT_BLOCK_PTR;
  EXIT_BLOCK_PTR->prev_bb = prev_bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e;
      for (e = bb->succ; e && !(e->flags & 1); e = e->succ_next)
 continue;
      if (e && !can_fallthru (e->src, e->dest))
 force_nonfallthru (e);
    }
}
static void
update_unlikely_executed_notes (basic_block bb)
{
  rtx cur_insn;
  for (cur_insn = (bb)->head_; cur_insn != (bb)->end_;
       cur_insn = (((cur_insn)->u.fld[2]).rtx1))
    if (((enum rtx_code) (cur_insn)->code) == NOTE
 && (((cur_insn)->u.fld[5]).rtint) == NOTE_INSN_UNLIKELY_EXECUTED_CODE)
      (((cur_insn)->u.fld[4]).bb) = bb;
}
void
verify_insn_chain (void)
{
  rtx x, prevx, nextx;
  int insn_cnt1, insn_cnt2;
  for (prevx = ((void *)0), insn_cnt1 = 1, x = get_insns ();
       x != 0;
       prevx = x, insn_cnt1++, x = (((x)->u.fld[2]).rtx1))
    if ((((x)->u.fld[1]).rtx1) != prevx)
      fancy_abort ("gcc.c", 397404, "?");
  if (prevx != get_last_insn ())
    fancy_abort ("gcc.c", 397407, "?");
  for (nextx = ((void *)0), insn_cnt2 = 1, x = get_last_insn ();
       x != 0;
       nextx = x, insn_cnt2++, x = (((x)->u.fld[1]).rtx1))
    if ((((x)->u.fld[2]).rtx1) != nextx)
      fancy_abort ("gcc.c", 397413, "?");
  if (insn_cnt1 != insn_cnt2)
    fancy_abort ("gcc.c", 397416, "?");
}
static void
fixup_fallthru_exit_predecessor (void)
{
  edge e;
  basic_block bb = ((void *)0);
  if (! reload_completed)
    fancy_abort ("gcc.c", 397431, "?");
  for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
    if (e->flags & 1)
      bb = e->src;
  if (bb && bb->rbi->next)
    {
      basic_block c = ENTRY_BLOCK_PTR->next_bb;
      if (c == bb)
 {
   bb = split_block (bb, ((void *)0))->dest;
   initialize_bb_rbi (bb);
   bb->rbi->next = c->rbi->next;
   c->rbi->next = bb;
   bb->rbi->footer = c->rbi->footer;
   c->rbi->footer = ((void *)0);
 }
      while (c->rbi->next != bb)
 c = c->rbi->next;
      c->rbi->next = bb->rbi->next;
      while (c->rbi->next)
 c = c->rbi->next;
      c->rbi->next = bb;
      bb->rbi->next = ((void *)0);
    }
}
extern unsigned char cfg_layout_can_duplicate_bb_p (basic_block);
unsigned char
cfg_layout_can_duplicate_bb_p (basic_block bb)
{
  if (tablejump_p ((bb)->end_, ((void *)0), ((void *)0)))
    return 0;
  if (targetm.cannot_copy_insn_p)
    {
      rtx insn = (bb)->head_;
      while (1)
 {
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && targetm.cannot_copy_insn_p (insn))
     return 0;
   if (insn == (bb)->end_)
     break;
   insn = (((insn)->u.fld[2]).rtx1);
 }
    }
  return 1;
}
rtx
duplicate_insn_chain (rtx from, rtx to)
{
  rtx insn, last;
  last = emit_note (NOTE_INSN_DELETED);
  for (insn = from; insn != (((to)->u.fld[2]).rtx1); insn = (((insn)->u.fld[2]).rtx1))
    {
      switch (((enum rtx_code) (insn)->code))
 {
 case INSN:
 case CALL_INSN:
 case JUMP_INSN:
   if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_VEC
       || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC)
     break;
   emit_copy_of_insn_after (insn, get_last_insn ());
   break;
 case CODE_LABEL:
   break;
 case BARRIER:
   emit_barrier ();
   break;
 case NOTE:
   switch ((((insn)->u.fld[5]).rtint))
     {
     case NOTE_INSN_PROLOGUE_END:
     case NOTE_INSN_LOOP_VTOP:
     case NOTE_INSN_LOOP_CONT:
     case NOTE_INSN_LOOP_BEG:
     case NOTE_INSN_LOOP_END:
     case NOTE_INSN_DELETED:
     case NOTE_INSN_DELETED_LABEL:
     case NOTE_INSN_EPILOGUE_BEG:
     case NOTE_INSN_FUNCTION_END:
     case NOTE_INSN_FUNCTION_BEG:
     case NOTE_INSN_BASIC_BLOCK:
       break;
     case NOTE_INSN_BLOCK_BEG:
     case NOTE_INSN_BLOCK_END:
     case NOTE_INSN_EH_REGION_BEG:
     case NOTE_INSN_EH_REGION_END:
       fancy_abort ("gcc.c", 397568, "?");
       break;
     case NOTE_INSN_REPEATED_LINE_NUMBER:
     case NOTE_INSN_UNLIKELY_EXECUTED_CODE:
       emit_note_copy (insn);
       break;
     default:
       if ((((insn)->u.fld[5]).rtint) < 0)
  fancy_abort ("gcc.c", 397577, "?");
       emit_note_copy (insn);
     }
   break;
 default:
   fancy_abort ("gcc.c", 397584, "?");
 }
    }
  insn = (((last)->u.fld[2]).rtx1);
  delete_insn (last);
  return insn;
}
extern basic_block cfg_layout_duplicate_bb (basic_block);
basic_block
cfg_layout_duplicate_bb (basic_block bb)
{
  rtx insn;
  basic_block new_bb;
  insn = duplicate_insn_chain ((bb)->head_, (bb)->end_);
  new_bb = create_basic_block (insn,
          insn ? get_last_insn () : ((void *)0),
          EXIT_BLOCK_PTR->prev_bb);
  if (bb->rbi->header1)
    {
      insn = bb->rbi->header1;
      while ((((insn)->u.fld[2]).rtx1))
 insn = (((insn)->u.fld[2]).rtx1);
      insn = duplicate_insn_chain (bb->rbi->header1, insn);
      if (insn)
 new_bb->rbi->header1 = unlink_insn_chain (insn, get_last_insn ());
    }
  if (bb->rbi->footer)
    {
      insn = bb->rbi->footer;
      while ((((insn)->u.fld[2]).rtx1))
 insn = (((insn)->u.fld[2]).rtx1);
      insn = duplicate_insn_chain (bb->rbi->footer, insn);
      if (insn)
 new_bb->rbi->footer = unlink_insn_chain (insn, get_last_insn ());
    }
  if (bb->global_live_at_start)
    {
      new_bb->global_live_at_start = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
      new_bb->global_live_at_end = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
      bitmap_copy (new_bb->global_live_at_start, bb->global_live_at_start);
      bitmap_copy (new_bb->global_live_at_end, bb->global_live_at_end);
    }
  return new_bb;
}
void
cfg_layout_initialize (void)
{
  basic_block bb;
  alloc_rbi_pool ();
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    initialize_bb_rbi (bb);
  cfg_layout_rtl_register_cfg_hooks ();
  record_effective_endpoints ();
  cleanup_cfg (128);
}
void
break_superblocks (void)
{
  sbitmap superblocks;
  unsigned char need = 0;
  basic_block bb;
  superblocks = sbitmap_alloc (last_basic_block);
  sbitmap_zero (superblocks);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (bb->flags & 32)
      {
 bb->flags &= ~32;
 ((superblocks)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
 need = 1;
      }
  if (need)
    {
      rebuild_jump_labels (get_insns ());
      find_many_sub_basic_blocks (superblocks);
    }
  free (superblocks);
}
void
cfg_layout_finalize (void)
{
  basic_block bb;
  rtl_register_cfg_hooks ();
  if (reload_completed
      && !1
      )
    fixup_fallthru_exit_predecessor ();
  fixup_reorder_chain ();
  free_rbi_pool ();
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    bb->rbi = ((void *)0);
  break_superblocks ();
}
unsigned char
can_copy_bbs_p (basic_block *bbs, unsigned n)
{
  unsigned i;
  edge e;
  int ret = 1;
  for (i = 0; i < n; i++)
    bbs[i]->rbi->duplicated = 1;
  for (i = 0; i < n; i++)
    {
      for (e = bbs[i]->succ; e; e = e->succ_next)
 if ((e->flags & 2)
     && e->dest->rbi->duplicated)
   {
     ret = 0;
     goto end;
   }
      if (!can_duplicate_block_p (bbs[i]))
 {
   ret = 0;
   break;
 }
    }
end:
  for (i = 0; i < n; i++)
    bbs[i]->rbi->duplicated = 0;
  return ret;
}
void
copy_bbs (basic_block *bbs, unsigned n, basic_block *new_bbs,
   edge *edges, unsigned n_edges, edge *new_edges,
   struct loop *base)
{
  unsigned i, j;
  basic_block bb, new_bb, dom_bb;
  edge e;
  for (i = 0; i < n; i++)
    {
      bb = bbs[i];
      new_bb = new_bbs[i] = duplicate_block (bb, ((void *)0));
      bb->rbi->duplicated = 1;
      add_bb_to_loop (new_bb, bb->loop_father->copy);
      if (bb->loop_father->header1 == bb && bb->loop_father != base)
 new_bb->loop_father->header1 = new_bb;
      if (bb->loop_father->latch == bb && bb->loop_father != base)
 new_bb->loop_father->latch = new_bb;
    }
  for (i = 0; i < n; i++)
    {
      bb = bbs[i];
      new_bb = new_bbs[i];
      dom_bb = get_immediate_dominator (CDI_DOMINATORS, bb);
      if (dom_bb->rbi->duplicated)
 {
   dom_bb = dom_bb->rbi->copy;
   set_immediate_dominator (CDI_DOMINATORS, new_bb, dom_bb);
 }
    }
  for (j = 0; j < n_edges; j++)
    new_edges[j] = ((void *)0);
  for (i = 0; i < n; i++)
    {
      new_bb = new_bbs[i];
      bb = bbs[i];
      for (e = new_bb->succ; e; e = e->succ_next)
 {
   for (j = 0; j < n_edges; j++)
     if (edges[j] && edges[j]->src == bb && edges[j]->dest == e->dest)
       new_edges[j] = e;
   if (!e->dest->rbi->duplicated)
     continue;
   redirect_edge_and_branch_force (e, e->dest->rbi->copy);
 }
    }
  for (i = 0; i < n; i++)
    bbs[i]->rbi->duplicated = 0;
}
const struct ggc_root_tab gt_ggc_r_gt_cfglayout_h[] = {
  {
    &file_locators_files,
    1,
    sizeof (file_locators_files),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &file_locators_locs,
    1,
    sizeof (file_locators_locs),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &line_locators_lines,
    1,
    sizeof (line_locators_lines),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &line_locators_locs,
    1,
    sizeof (line_locators_locs),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &block_locators_blocks,
    1,
    sizeof (block_locators_blocks),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &block_locators_locs,
    1,
    sizeof (block_locators_locs),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static void flow_loops_cfg_dump (const struct loops *, FILE *);
static void flow_loop_entry_edges_find (struct loop *);
static void flow_loop_exit_edges_find (struct loop *);
static int flow_loop_nodes_find (basic_block, struct loop *);
static void flow_loop_pre_header_scan (struct loop *);
static basic_block flow_loop_pre_header_find (basic_block);
static int flow_loop_level_compute (struct loop *);
static int flow_loops_level_compute (struct loops *);
static void establish_preds (struct loop *);
static void canonicalize_loop_headers (void);
static unsigned char glb_enum_p (basic_block, void *);
static void
flow_loops_cfg_dump (const struct loops *loops, FILE *file)
{
  int i;
  basic_block bb;
  if (! loops->num || ! file)
    return;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge succ;
      fprintf (file, ";; %d succs { ", bb->index);
      for (succ = bb->succ; succ; succ = succ->succ_next)
 fprintf (file, "%d ", succ->dest->index);
      fprintf (file, "}\n");
    }
  if (loops->cfg.dfs_order)
    {
      fputs_unlocked (";; DFS order: ", file);
      for (i = 0; i < n_basic_blocks; i++)
 fprintf (file, "%d ", loops->cfg.dfs_order[i]);
      fputs_unlocked ("\n", file);
    }
  if (loops->cfg.rc_order)
    {
      fputs_unlocked (";; RC order: ", file);
      for (i = 0; i < n_basic_blocks; i++)
 fprintf (file, "%d ", loops->cfg.rc_order[i]);
      fputs_unlocked ("\n", file);
    }
}
unsigned char
flow_loop_nested_p (const struct loop *outer, const struct loop *loop)
{
  return loop->depth > outer->depth
  && loop->pred[outer->depth] == outer;
}
void
flow_loop_dump (const struct loop *loop, FILE *file,
  void (*loop_dump_aux) (const struct loop *, FILE *, int),
  int verbose)
{
  basic_block *bbs;
  unsigned i;
  if (! loop || ! loop->header1)
    return;
  fprintf (file, ";;\n;; Loop %d:%s\n", loop->num,
      loop->invalid ? " invalid" : "");
  fprintf (file, ";;  header %d, latch %d, pre-header %d\n",
    loop->header1->index, loop->latch->index,
    loop->pre_header ? loop->pre_header->index : -1);
  fprintf (file, ";;  depth %d, level %d, outer %ld\n",
    loop->depth, loop->level,
    (long) (loop->outer ? loop->outer->num : -1));
  if (loop->pre_header_edges)
    flow_edge_list_print (";;  pre-header edges", loop->pre_header_edges,
     loop->num_pre_header_edges, file);
  flow_edge_list_print (";;  entry edges", loop->entry_edges,
   loop->num_entries, file);
  fprintf (file, ";;  nodes:");
  bbs = get_loop_body (loop);
  for (i = 0; i < loop->num_nodes; i++)
    fprintf (file, " %d", bbs[i]->index);
  free (bbs);
  fprintf (file, "\n");
  flow_edge_list_print (";;  exit edges", loop->exit_edges,
   loop->num_exits, file);
  if (loop_dump_aux)
    loop_dump_aux (loop, file, verbose);
}
void
flow_loops_dump (const struct loops *loops, FILE *file, void (*loop_dump_aux) (const struct loop *, FILE *, int), int verbose)
{
  int i;
  int num_loops;
  num_loops = loops->num;
  if (! num_loops || ! file)
    return;
  fprintf (file, ";; %d loops found, %d levels\n",
    num_loops, loops->levels);
  for (i = 0; i < num_loops; i++)
    {
      struct loop *loop = loops->parray[i];
      if (!loop)
 continue;
      flow_loop_dump (loop, file, loop_dump_aux, verbose);
    }
  if (verbose)
    flow_loops_cfg_dump (loops, file);
}
void
flow_loop_free (struct loop *loop)
{
  if (loop->pre_header_edges)
    free (loop->pre_header_edges);
  if (loop->entry_edges)
    free (loop->entry_edges);
  if (loop->exit_edges)
    free (loop->exit_edges);
  if (loop->pred)
    free (loop->pred);
  free (loop);
}
void
flow_loops_free (struct loops *loops)
{
  if (loops->parray)
    {
      unsigned i;
      if (! loops->num)
 fancy_abort ("gcc.c", 398101, "?");
      for (i = 0; i < loops->num; i++)
 {
   struct loop *loop = loops->parray[i];
   if (!loop)
     continue;
   flow_loop_free (loop);
 }
      free (loops->parray);
      loops->parray = ((void *)0);
      if (loops->cfg.dfs_order)
 free (loops->cfg.dfs_order);
      if (loops->cfg.rc_order)
 free (loops->cfg.rc_order);
    }
}
static void
flow_loop_entry_edges_find (struct loop *loop)
{
  edge e;
  int num_entries;
  num_entries = 0;
  for (e = loop->header1->pred; e; e = e->pred_next)
    {
      if (flow_loop_outside_edge_p (loop, e))
 num_entries++;
    }
  if (! num_entries)
    fancy_abort ("gcc.c", 398141, "?");
  loop->entry_edges = xmalloc (num_entries * sizeof (edge *));
  num_entries = 0;
  for (e = loop->header1->pred; e; e = e->pred_next)
    {
      if (flow_loop_outside_edge_p (loop, e))
 loop->entry_edges[num_entries++] = e;
    }
  loop->num_entries = num_entries;
}
static void
flow_loop_exit_edges_find (struct loop *loop)
{
  edge e;
  basic_block node, *bbs;
  unsigned num_exits, i;
  loop->exit_edges = ((void *)0);
  loop->num_exits = 0;
  num_exits = 0;
  bbs = get_loop_body (loop);
  for (i = 0; i < loop->num_nodes; i++)
    {
      node = bbs[i];
      for (e = node->succ; e; e = e->succ_next)
 {
   basic_block dest = e->dest;
   if (!flow_bb_inside_loop_p (loop, dest))
     num_exits++;
 }
    }
  if (! num_exits)
    {
      free (bbs);
      return;
    }
  loop->exit_edges = xmalloc (num_exits * sizeof (edge *));
  num_exits = 0;
  for (i = 0; i < loop->num_nodes; i++)
    {
      node = bbs[i];
      for (e = node->succ; e; e = e->succ_next)
 {
   basic_block dest = e->dest;
   if (!flow_bb_inside_loop_p (loop, dest))
     loop->exit_edges[num_exits++] = e;
      }
    }
  free (bbs);
  loop->num_exits = num_exits;
}
static int
flow_loop_nodes_find (basic_block header, struct loop *loop)
{
  basic_block *stack;
  int sp;
  int num_nodes = 1;
  header1->loop_father = loop;
  header1->loop_depth = loop->depth;
  if (loop->latch->loop_father != loop)
    {
      stack = xmalloc (n_basic_blocks * sizeof (basic_block));
      sp = 0;
      num_nodes++;
      stack[sp++] = loop->latch;
      loop->latch->loop_father = loop;
      loop->latch->loop_depth = loop->depth;
      while (sp)
 {
   basic_block node;
   edge e;
   node = stack[--sp];
   for (e = node->pred; e; e = e->pred_next)
     {
       basic_block ancestor = e->src;
       if (ancestor != ENTRY_BLOCK_PTR
    && ancestor->loop_father != loop)
  {
    ancestor->loop_father = loop;
    ancestor->loop_depth = loop->depth;
    num_nodes++;
    stack[sp++] = ancestor;
  }
     }
 }
      free (stack);
    }
  return num_nodes;
}
static void
flow_loop_pre_header_scan (struct loop *loop)
{
  int num;
  basic_block ebb;
  edge e;
  loop->num_pre_header_edges = 0;
  if (loop->num_entries != 1)
    return;
  ebb = loop->entry_edges[0]->src;
  if (ebb == ENTRY_BLOCK_PTR)
    return;
  for (num = 1; ebb->pred->src != ENTRY_BLOCK_PTR && ! ebb->pred->pred_next;
       num++)
    ebb = ebb->pred->src;
  loop->pre_header_edges = xmalloc (num * sizeof (edge));
  loop->num_pre_header_edges = num;
  for (e = loop->entry_edges[0]; num; e = e->src->pred)
    loop->pre_header_edges[--num] = e;
}
static basic_block
flow_loop_pre_header_find (basic_block header)
{
  basic_block pre_header;
  edge e;
  pre_header = ((void *)0);
  for (e = header1->pred; e; e = e->pred_next)
    {
      basic_block node = e->src;
      if (node != ENTRY_BLOCK_PTR
   && ! dominated_by_p (CDI_DOMINATORS, node, header1))
 {
   if (pre_header == ((void *)0))
     pre_header = node;
   else
     {
       pre_header = ((void *)0);
       break;
     }
 }
    }
  return pre_header;
}
static void
establish_preds (struct loop *loop)
{
  struct loop *ploop, *father = loop->outer;
  loop->depth = father->depth + 1;
  if (loop->pred)
    free (loop->pred);
  loop->pred = xmalloc (sizeof (struct loop *) * loop->depth);
  memcpy (loop->pred, father->pred, sizeof (struct loop *) * father->depth);
  loop->pred[father->depth] = father;
  for (ploop = loop->inner; ploop; ploop = ploop->next)
    establish_preds (ploop);
}
void
flow_loop_tree_node_add (struct loop *father, struct loop *loop)
{
  loop->next = father->inner;
  father->inner = loop;
  loop->outer = father;
  establish_preds (loop);
}
void
flow_loop_tree_node_remove (struct loop *loop)
{
  struct loop *prev, *father;
  father = loop->outer;
  loop->outer = ((void *)0);
  if (father->inner == loop)
    father->inner = loop->next;
  else
    {
      for (prev = father->inner; prev->next != loop; prev = prev->next);
      prev->next = loop->next;
    }
  loop->depth = -1;
  free (loop->pred);
  loop->pred = ((void *)0);
}
static int
flow_loop_level_compute (struct loop *loop)
{
  struct loop *inner;
  int level = 1;
  if (! loop)
    return 0;
  for (inner = loop->inner; inner; inner = inner->next)
    {
      int ilevel = flow_loop_level_compute (inner) + 1;
      if (ilevel > level)
 level = ilevel;
    }
  loop->level = level;
  return level;
}
static int
flow_loops_level_compute (struct loops *loops)
{
  return flow_loop_level_compute (loops->tree_root);
}
int
flow_loop_scan (struct loop *loop, int flags)
{
  if (flags & 4)
    {
      flow_loop_entry_edges_find (loop);
    }
  if (flags & 8)
    {
      flow_loop_exit_edges_find (loop);
    }
  if (flags & 2)
    {
      loop->pre_header = flow_loop_pre_header_find (loop->header1);
      flow_loop_pre_header_scan (loop);
    }
  return 1;
}
static void
update_latch_info (basic_block jump)
{
  alloc_aux_for_block (jump, sizeof (int));
  (* (int *) (jump)->aux) = 0;
  alloc_aux_for_edge (jump->pred, sizeof (int));
  (*(int *) (jump->pred)->aux) = 0;
}
static edge mfb_kj_edge;
static unsigned char
mfb_keep_just (edge e)
{
  return e != mfb_kj_edge;
}
static unsigned char
mfb_keep_nonlatch (edge e)
{
  return (*(int *) (e)->aux);
}
static void
canonicalize_loop_headers (void)
{
  basic_block header1;
  edge e;
  calculate_dominance_info (CDI_DOMINATORS);
  alloc_aux_for_blocks (sizeof (int));
  alloc_aux_for_edges (sizeof (int));
  for (header1 = ENTRY_BLOCK_PTR->next_bb; header1 != EXIT_BLOCK_PTR; header1 = header1->next_bb)
    {
      int num_latches = 0;
      int have_abnormal_edge = 0;
      for (e = header1->pred; e; e = e->pred_next)
 {
   basic_block latch = e->src;
   if (e->flags & 2)
     have_abnormal_edge = 1;
   if (latch != ENTRY_BLOCK_PTR
       && dominated_by_p (CDI_DOMINATORS, latch, header1))
     {
       num_latches++;
       (*(int *) (e)->aux) = 1;
     }
 }
      if (have_abnormal_edge)
 (* (int *) (header1)->aux) = 0;
      else
 (* (int *) (header1)->aux) = num_latches;
    }
  free_dominance_info (CDI_DOMINATORS);
  if ((* (int *) (ENTRY_BLOCK_PTR->succ->dest)->aux))
    {
      basic_block bb;
      bb = split_edge (ENTRY_BLOCK_PTR->succ);
      alloc_aux_for_edge (bb->succ, sizeof (int));
      (*(int *) (bb->succ)->aux) = 0;
      alloc_aux_for_block (bb, sizeof (int));
      (* (int *) (bb)->aux) = 0;
    }
  for (header1 = ENTRY_BLOCK_PTR->next_bb; header1 != EXIT_BLOCK_PTR; header1 = header1->next_bb)
    {
      int max_freq, is_heavy;
      edge heavy, tmp_edge;
      if ((* (int *) (header1)->aux) <= 1)
 continue;
      is_heavy = 1;
      heavy = ((void *)0);
      max_freq = 0;
      for (e = header1->pred; e; e = e->pred_next)
 if ((*(int *) (e)->aux) &&
     (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000) > max_freq)
   max_freq = (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
      for (e = header1->pred; e; e = e->pred_next)
 if ((*(int *) (e)->aux) &&
     (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000) >= max_freq / 8)
   {
     if (heavy)
       {
  is_heavy = 0;
  break;
       }
     else
       heavy = e;
   }
      if (is_heavy)
 {
   mfb_kj_edge = heavy;
   tmp_edge = make_forwarder_block (header1, mfb_keep_just,
        update_latch_info);
   alloc_aux_for_block (tmp_edge->dest, sizeof (int));
   (* (int *) (tmp_edge->dest)->aux) = 1;
   alloc_aux_for_edge (tmp_edge, sizeof (int));
   (*(int *) (tmp_edge)->aux) = 0;
   (* (int *) (header1)->aux)--;
 }
      if ((* (int *) (header1)->aux) > 1)
 {
   tmp_edge = make_forwarder_block (header1, mfb_keep_nonlatch,
        update_latch_info);
   alloc_aux_for_block (tmp_edge->dest, sizeof (int));
   (* (int *) (tmp_edge->src)->aux) = 0;
   (* (int *) (tmp_edge->dest)->aux) = 1;
   alloc_aux_for_edge (tmp_edge, sizeof (int));
   (*(int *) (tmp_edge)->aux) = 1;
 }
    }
  free_aux_for_blocks ();
  free_aux_for_edges ();
}
int
flow_loops_find (struct loops *loops, int flags)
{
  int i;
  int b;
  int num_loops;
  edge e;
  sbitmap headers;
  int *dfs_order;
  int *rc_order;
  basic_block header1;
  basic_block bb;
  if (! (flags & 1))
    fancy_abort ("gcc.c", 398622, "?");
  memset (loops, 0, sizeof *loops);
  if (n_basic_blocks == 0)
    return 0;
  dfs_order = ((void *)0);
  rc_order = ((void *)0);
  canonicalize_loop_headers ();
  calculate_dominance_info (CDI_DOMINATORS);
  headers = sbitmap_alloc (last_basic_block);
  sbitmap_zero (headers);
  num_loops = 0;
  for (header1 = ENTRY_BLOCK_PTR->next_bb; header1 != EXIT_BLOCK_PTR; header1 = header1->next_bb)
    {
      int more_latches = 0;
      header1->loop_depth = 0;
      for (e = header1->pred; e; e = e->pred_next)
 if (e->flags & 2)
   break;
      if (e)
 continue;
      for (e = header1->pred; e; e = e->pred_next)
 {
   basic_block latch = e->src;
   if (e->flags & 2)
     fancy_abort ("gcc.c", 398665, "?");
   if (latch != ENTRY_BLOCK_PTR
       && dominated_by_p (CDI_DOMINATORS, latch, header1))
     {
       if (more_latches)
  fancy_abort ("gcc.c", 398677, "?");
       more_latches = 1;
       ((headers)->elms [(header1->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (header1->index) % ((unsigned) (8 * 4)));
       num_loops++;
     }
 }
    }
  loops->parray = xcalloc (num_loops + 1, sizeof (struct loop *));
  loops->parray[0] = xcalloc (1, sizeof (struct loop));
  loops->parray[0]->next = ((void *)0);
  loops->parray[0]->inner = ((void *)0);
  loops->parray[0]->outer = ((void *)0);
  loops->parray[0]->depth = 0;
  loops->parray[0]->pred = ((void *)0);
  loops->parray[0]->num_nodes = n_basic_blocks + 2;
  loops->parray[0]->latch = EXIT_BLOCK_PTR;
  loops->parray[0]->header1 = ENTRY_BLOCK_PTR;
  ENTRY_BLOCK_PTR->loop_father = loops->parray[0];
  EXIT_BLOCK_PTR->loop_father = loops->parray[0];
  loops->tree_root = loops->parray[0];
  loops->num = 1;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    bb->loop_father = loops->tree_root;
  if (num_loops)
    {
      dfs_order = xmalloc (n_basic_blocks * sizeof (int));
      rc_order = xmalloc (n_basic_blocks * sizeof (int));
      flow_depth_first_order_compute (dfs_order, rc_order);
      loops->cfg.dfs_order = dfs_order;
      loops->cfg.rc_order = rc_order;
      num_loops = 1;
      for (b = 0; b < n_basic_blocks; b++)
 {
   struct loop *loop;
   if (!((headers)->elms [(rc_order[b]) / ((unsigned) (8 * 4))] >> (rc_order[b]) % ((unsigned) (8 * 4)) & 1))
     continue;
   header1 = (((basic_block_info)->data.bb[(rc_order[b])]));
   loop = loops->parray[num_loops] = xcalloc (1, sizeof (struct loop));
   loop->header1 = header1;
   loop->num = num_loops;
   num_loops++;
   for (e = header1->pred; e; e = e->pred_next)
     {
       basic_block latch = e->src;
       if (latch != ENTRY_BLOCK_PTR
    && dominated_by_p (CDI_DOMINATORS, latch, header1))
  {
    loop->latch = latch;
    break;
  }
     }
   flow_loop_tree_node_add (header1->loop_father, loop);
   loop->num_nodes = flow_loop_nodes_find (loop->header1, loop);
 }
      loops->levels = flow_loops_level_compute (loops);
      for (i = 1; i < num_loops; i++)
 flow_loop_scan (loops->parray[i], flags);
      loops->num = num_loops;
    }
  else
    {
      free_dominance_info (CDI_DOMINATORS);
    }
  free(headers);
  loops->state = 0;
  return loops->num;
}
int
flow_loops_update (struct loops *loops, int flags)
{
  if (loops->parray)
    flow_loops_free (loops);
  return flow_loops_find (loops, flags);
}
unsigned char
flow_bb_inside_loop_p (const struct loop *loop, const basic_block bb)
{
  struct loop *source_loop;
  if (bb == ENTRY_BLOCK_PTR || bb == EXIT_BLOCK_PTR)
    return 0;
  source_loop = bb->loop_father;
  return loop == source_loop || flow_loop_nested_p (loop, source_loop);
}
unsigned char
flow_loop_outside_edge_p (const struct loop *loop, edge e)
{
  if (e->dest != loop->header1)
    fancy_abort ("gcc.c", 398816, "?");
  return !flow_bb_inside_loop_p (loop, e->src);
}
static unsigned char
glb_enum_p (basic_block bb, void *glb_header)
{
  return bb != (basic_block) glb_header;
}
basic_block *
get_loop_body (const struct loop *loop)
{
  basic_block *tovisit, bb;
  unsigned tv = 0;
  if (!loop->num_nodes)
    fancy_abort ("gcc.c", 398837, "?");
  tovisit = xcalloc (loop->num_nodes, sizeof (basic_block));
  tovisit[tv++] = loop->header1;
  if (loop->latch == EXIT_BLOCK_PTR)
    {
      if (loop->num_nodes != (unsigned) n_basic_blocks + 2)
 fancy_abort ("gcc.c", 398846, "?");
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 tovisit[tv++] = bb;
      tovisit[tv++] = EXIT_BLOCK_PTR;
    }
  else if (loop->latch != loop->header1)
    {
      tv = dfs_enumerate_from (loop->latch, 1, glb_enum_p,
          tovisit + 1, loop->num_nodes - 1,
          loop->header1) + 1;
    }
  if (tv != loop->num_nodes)
    fancy_abort ("gcc.c", 398859, "?");
  return tovisit;
}
static void
fill_sons_in_loop (const struct loop *loop, basic_block bb,
     basic_block *tovisit, int *tv)
{
  basic_block son, postpone = ((void *)0);
  tovisit[(*tv)++] = bb;
  for (son = first_dom_son (CDI_DOMINATORS, bb);
       son;
       son = next_dom_son (CDI_DOMINATORS, son))
    {
      if (!flow_bb_inside_loop_p (loop, son))
 continue;
      if (dominated_by_p (CDI_DOMINATORS, loop->latch, son))
 {
   postpone = son;
   continue;
 }
      fill_sons_in_loop (loop, son, tovisit, tv);
    }
  if (postpone)
    fill_sons_in_loop (loop, postpone, tovisit, tv);
}
basic_block *
get_loop_body_in_dom_order (const struct loop *loop)
{
  basic_block *tovisit;
  int tv;
  if (!loop->num_nodes)
    fancy_abort ("gcc.c", 398903, "?");
  tovisit = xcalloc (loop->num_nodes, sizeof (basic_block));
  if (loop->latch == EXIT_BLOCK_PTR)
    fancy_abort ("gcc.c", 398908, "?");
  tv = 0;
  fill_sons_in_loop (loop, loop->header1, tovisit, &tv);
  if (tv != (int) loop->num_nodes)
    fancy_abort ("gcc.c", 398914, "?");
  return tovisit;
}
edge *
get_loop_exit_edges (const struct loop *loop, unsigned int *n_edges)
{
  edge *edges, e;
  unsigned i, n;
  basic_block * body;
  if (loop->latch == EXIT_BLOCK_PTR)
    fancy_abort ("gcc.c", 398928, "?");
  body = get_loop_body (loop);
  n = 0;
  for (i = 0; i < loop->num_nodes; i++)
    for (e = body[i]->succ; e; e = e->succ_next)
      if (!flow_bb_inside_loop_p (loop, e->dest))
 n++;
  edges = xmalloc (n * sizeof (edge));
  *n_edges = n;
  n = 0;
  for (i = 0; i < loop->num_nodes; i++)
    for (e = body[i]->succ; e; e = e->succ_next)
      if (!flow_bb_inside_loop_p (loop, e->dest))
 edges[n++] = e;
  free (body);
  return edges;
}
unsigned
num_loop_branches (const struct loop *loop)
{
  unsigned i, n;
  basic_block * body;
  if (loop->latch == EXIT_BLOCK_PTR)
    fancy_abort ("gcc.c", 398957, "?");
  body = get_loop_body (loop);
  n = 0;
  for (i = 0; i < loop->num_nodes; i++)
    if (body[i]->succ && body[i]->succ->succ_next)
      n++;
  free (body);
  return n;
}
void
add_bb_to_loop (basic_block bb, struct loop *loop)
{
   int i;
   bb->loop_father = loop;
   bb->loop_depth = loop->depth;
   loop->num_nodes++;
   for (i = 0; i < loop->depth; i++)
     loop->pred[i]->num_nodes++;
 }
void
remove_bb_from_loops (basic_block bb)
{
   int i;
   struct loop *loop = bb->loop_father;
   loop->num_nodes--;
   for (i = 0; i < loop->depth; i++)
     loop->pred[i]->num_nodes--;
   bb->loop_father = ((void *)0);
   bb->loop_depth = 0;
 }
struct loop *
find_common_loop (struct loop *loop_s, struct loop *loop_d)
{
  if (!loop_s) return loop_d;
  if (!loop_d) return loop_s;
  if (loop_s->depth < loop_d->depth)
    loop_d = loop_d->pred[loop_s->depth];
  else if (loop_s->depth > loop_d->depth)
    loop_s = loop_s->pred[loop_d->depth];
  while (loop_s != loop_d)
    {
      loop_s = loop_s->outer;
      loop_d = loop_d->outer;
    }
  return loop_s;
}
void
cancel_loop (struct loops *loops, struct loop *loop)
{
  basic_block *bbs;
  unsigned i;
  if (loop->inner)
    fancy_abort ("gcc.c", 399024, "?");
  bbs = get_loop_body (loop);
  for (i = 0; i < loop->num_nodes; i++)
    bbs[i]->loop_father = loop->outer;
  flow_loop_tree_node_remove (loop);
  loops->parray[loop->num] = ((void *)0);
  flow_loop_free (loop);
}
void
cancel_loop_tree (struct loops *loops, struct loop *loop)
{
  while (loop->inner)
    cancel_loop_tree (loops, loop->inner);
  cancel_loop (loops, loop);
}
void
verify_loop_structure (struct loops *loops)
{
  unsigned *sizes, i, j;
  sbitmap irreds;
  basic_block *bbs, bb;
  struct loop *loop;
  int err = 0;
  edge e;
  sizes = xcalloc (loops->num, sizeof (int));
  sizes[0] = 2;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    for (loop = bb->loop_father; loop; loop = loop->outer)
      sizes[loop->num]++;
  for (i = 0; i < loops->num; i++)
    {
      if (!loops->parray[i])
        continue;
      if (loops->parray[i]->num_nodes != sizes[i])
 {
   error ("Size of loop %d should be %d, not %d.",
     i, sizes[i], loops->parray[i]->num_nodes);
   err = 1;
 }
    }
  free (sizes);
  for (i = 1; i < loops->num; i++)
    {
      loop = loops->parray[i];
      if (!loop)
 continue;
      bbs = get_loop_body (loop);
      for (j = 0; j < loop->num_nodes; j++)
 if (!flow_bb_inside_loop_p (loop, bbs[j]))
   {
     error ("Bb %d do not belong to loop %d.",
      bbs[j]->index, i);
     err = 1;
   }
      free (bbs);
    }
  for (i = 1; i < loops->num; i++)
    {
      loop = loops->parray[i];
      if (!loop)
 continue;
      if ((loops->state & LOOPS_HAVE_PREHEADERS)
   && (!loop->header1->pred->pred_next
       || loop->header1->pred->pred_next->pred_next))
 {
   error ("Loop %d's header does not have exactly 2 entries.", i);
   err = 1;
 }
      if (loops->state & LOOPS_HAVE_SIMPLE_LATCHES)
 {
   if (!loop->latch->succ
       || loop->latch->succ->succ_next)
     {
       error ("Loop %d's latch does not have exactly 1 successor.", i);
       err = 1;
     }
   if (loop->latch->succ->dest != loop->header1)
     {
       error ("Loop %d's latch does not have header as successor.", i);
       err = 1;
     }
   if (loop->latch->loop_father != loop)
     {
       error ("Loop %d's latch does not belong directly to it.", i);
       err = 1;
     }
 }
      if (loop->header1->loop_father != loop)
 {
   error ("Loop %d's header does not belong directly to it.", i);
   err = 1;
 }
      if ((loops->state & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
   && (loop_latch_edge (loop)->flags & 128))
 {
   error ("Loop %d's latch is marked as part of irreducible region.", i);
   err = 1;
 }
    }
  if (loops->state & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
    {
      irreds = sbitmap_alloc (last_basic_block);
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   if (bb->flags & 16)
     ((irreds)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
   else
     ((irreds)->elms [(bb->index) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4))));
   for (e = bb->succ; e; e = e->succ_next)
     if (e->flags & 128)
       e->flags |= 8191 + 1;
 }
      mark_irreducible_loops (loops);
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   if ((bb->flags & 16)
       && !((irreds)->elms [(bb->index) / ((unsigned) (8 * 4))] >> (bb->index) % ((unsigned) (8 * 4)) & 1))
     {
       error ("Basic block %d should be marked irreducible.", bb->index);
       err = 1;
     }
   else if (!(bb->flags & 16)
       && ((irreds)->elms [(bb->index) / ((unsigned) (8 * 4))] >> (bb->index) % ((unsigned) (8 * 4)) & 1))
     {
       error ("Basic block %d should not be marked irreducible.", bb->index);
       err = 1;
     }
   for (e = bb->succ; e; e = e->succ_next)
     {
       if ((e->flags & 128)
    && !(e->flags & (8191 + 1)))
  {
    error ("Edge from %d to %d should be marked irreducible.",
    e->src->index, e->dest->index);
    err = 1;
  }
       else if (!(e->flags & 128)
         && (e->flags & (8191 + 1)))
  {
    error ("Edge from %d to %d should not be marked irreducible.",
    e->src->index, e->dest->index);
    err = 1;
  }
       e->flags &= ~(8191 + 1);
     }
 }
      free (irreds);
    }
  if (err)
    fancy_abort ("gcc.c", 399211, "?");
}
edge
loop_latch_edge (const struct loop *loop)
{
  edge e;
  for (e = loop->header1->pred; e->src != loop->latch; e = e->pred_next)
    continue;
  return e;
}
edge
loop_preheader_edge (const struct loop *loop)
{
  edge e;
  for (e = loop->header1->pred; e->src == loop->latch; e = e->pred_next)
    continue;
  return e;
}
unsigned char
just_once_each_iteration_p (struct loop *loop, basic_block bb)
{
  if (!dominated_by_p (CDI_DOMINATORS, loop->latch, bb))
    return 0;
  if (bb->loop_father != loop)
    return 0;
  if (bb->flags & 16)
    return 0;
  return 1;
}
struct edge
{
  int src, dest;
  struct edge *pred_next, *succ_next;
  void *data;
};
struct vertex
{
  struct edge *pred, *succ;
  int component;
  int post;
};
struct graph
{
  int n_vertices;
  struct vertex *vertices;
};
extern void dump_graph (FILE *, struct graph *);
void dump_graph (FILE *f, struct graph *g)
{
  int i;
  struct edge *e;
  for (i = 0; i < g->n_vertices; i++)
    {
      if (!g->vertices[i].pred
   && !g->vertices[i].succ)
 continue;
      fprintf (f, "%d (%d)\t<-", i, g->vertices[i].component);
      for (e = g->vertices[i].pred; e; e = e->pred_next)
 fprintf (f, " %d", e->src);
      fprintf (f, "\n");
      fprintf (f, "\t->");
      for (e = g->vertices[i].succ; e; e = e->succ_next)
 fprintf (f, " %d", e->dest);
      fprintf (f, "\n");
    }
}
static struct graph *
new_graph (int n_vertices)
{
  struct graph *g = xmalloc (sizeof (struct graph));
  g->n_vertices = n_vertices;
  g->vertices = xcalloc (n_vertices, sizeof (struct vertex));
  return g;
}
static void
add_edge (struct graph *g, int f, int t, void *data)
{
  struct edge *e = xmalloc (sizeof (struct edge));
  e->src = f;
  e->dest = t;
  e->data = data;
  e->pred_next = g->vertices[t].pred;
  g->vertices[t].pred = e;
  e->succ_next = g->vertices[f].succ;
  g->vertices[f].succ = e;
}
static void
dfs (struct graph *g, int *qs, int nq, int *qt, unsigned char forward)
{
  int i, tick = 0, v, comp = 0, top;
  struct edge *e;
  struct edge **stack = xmalloc (sizeof (struct edge *) * g->n_vertices);
  for (i = 0; i < g->n_vertices; i++)
    {
      g->vertices[i].component = -1;
      g->vertices[i].post = -1;
    }
  for (i = 0; i < nq; i++)
    {
      v = qs[i];
      if (g->vertices[v].post != -1)
 continue;
      g->vertices[v].component = comp++;
      e = (forward ? g->vertices[(v)].succ : g->vertices[(v)].pred);
      top = 0;
      while (1)
 {
   while (e && g->vertices[(forward ? (e)->dest : (e)->src)].component != -1)
     e = (forward ? (e)->succ_next : (e)->pred_next);
   if (!e)
     {
       if (qt)
  qt[tick] = v;
        g->vertices[v].post = tick++;
       if (!top)
  break;
       e = stack[--top];
       v = (forward ? (e)->src : (e)->dest);
       e = (forward ? (e)->succ_next : (e)->pred_next);
       continue;
     }
   stack[top++] = e;
   v = (forward ? (e)->dest : (e)->src);
   e = (forward ? g->vertices[(v)].succ : g->vertices[(v)].pred);
   g->vertices[v].component = comp - 1;
 }
    }
  free (stack);
}
static void
check_irred (struct graph *g, struct edge *e)
{
  edge real = e->data;
  if (g->vertices[e->src].component < g->vertices[e->dest].component)
    fancy_abort ("gcc.c", 399438, "?");
  if (g->vertices[e->src].component != g->vertices[e->dest].component)
    return;
  real->flags |= 128;
  if (flow_bb_inside_loop_p (real->src->loop_father, real->dest))
    real->src->flags |= 16;
}
static void
for_each_edge (struct graph *g,
        void (callback) (struct graph *, struct edge *))
{
  struct edge *e;
  int i;
  for (i = 0; i < g->n_vertices; i++)
    for (e = g->vertices[i].succ; e; e = e->succ_next)
      callback (g, e);
}
static void
free_graph (struct graph *g)
{
  struct edge *e, *n;
  int i;
  for (i = 0; i < g->n_vertices; i++)
    for (e = g->vertices[i].succ; e; e = n)
      {
 n = e->succ_next;
 free (e);
      }
  free (g->vertices);
  free (g);
}
void
mark_irreducible_loops (struct loops *loops)
{
  basic_block act;
  edge e;
  int i, src, dest;
  struct graph *g;
  int *queue1 = xmalloc ((last_basic_block + loops->num) * sizeof (int));
  int *queue2 = xmalloc ((last_basic_block + loops->num) * sizeof (int));
  int nq, depth;
  struct loop *cloop;
  for (act = ENTRY_BLOCK_PTR; act != EXIT_BLOCK_PTR; act = act->next_bb)
    {
      act->flags &= ~16;
      for (e = act->succ; e; e = e->succ_next)
 e->flags &= ~128;
    }
  g = new_graph (last_basic_block + loops->num);
  for (act = ENTRY_BLOCK_PTR; act != EXIT_BLOCK_PTR; act = act->next_bb)
    for (e = act->succ; e; e = e->succ_next)
      {
        if (e->dest == EXIT_BLOCK_PTR)
   continue;
 if (e->dest->loop_father->header1 == e->dest
     && e->dest->loop_father->latch == act)
   continue;
 src = ((act)->index + 1);
 dest = ((e->dest)->index + 1);
 if (e->dest->loop_father->header1 == e->dest)
   dest = ((e->dest->loop_father)->num + last_basic_block);
 if (!flow_bb_inside_loop_p (act->loop_father, e->dest))
   {
     depth = find_common_loop (act->loop_father,
          e->dest->loop_father)->depth + 1;
     if (depth == act->loop_father->depth)
       cloop = act->loop_father;
     else
       cloop = act->loop_father->pred[depth];
     src = ((cloop)->num + last_basic_block);
   }
 add_edge (g, src, dest, e);
      }
  nq = 0;
  for (act = ENTRY_BLOCK_PTR; act != EXIT_BLOCK_PTR; act = act->next_bb)
    {
      queue1[nq++] = ((act)->index + 1);
    }
  for (i = 1; i < (int) loops->num; i++)
    if (loops->parray[i])
      queue1[nq++] = ((loops->parray[i])->num + last_basic_block);
  dfs (g, queue1, nq, queue2, 0);
  for (i = 0; i < nq; i++)
    queue1[i] = queue2[nq - i - 1];
  dfs (g, queue1, nq, ((void *)0), 1);
  for_each_edge (g, check_irred);
  free_graph (g);
  free (queue1);
  free (queue2);
  loops->state |= LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS;
}
int
num_loop_insns (struct loop *loop)
{
  basic_block *bbs, bb;
  unsigned i, ninsns = 0;
  rtx insn;
  bbs = get_loop_body (loop);
  for (i = 0; i < loop->num_nodes; i++)
    {
      bb = bbs[i];
      ninsns++;
      for (insn = (bb)->head_; insn != (bb)->end_; insn = (((insn)->u.fld[2]).rtx1))
 if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
   ninsns++;
    }
  free(bbs);
  return ninsns;
}
int
average_num_loop_insns (struct loop *loop)
{
  basic_block *bbs, bb;
  unsigned i, binsns, ninsns, ratio;
  rtx insn;
  ninsns = 0;
  bbs = get_loop_body (loop);
  for (i = 0; i < loop->num_nodes; i++)
    {
      bb = bbs[i];
      binsns = 1;
      for (insn = (bb)->head_; insn != (bb)->end_; insn = (((insn)->u.fld[2]).rtx1))
 if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
   binsns++;
      ratio = loop->header1->frequency == 0
       ? 10000
       : (bb->frequency * 10000) / loop->header1->frequency;
      ninsns += binsns * ratio;
    }
  free(bbs);
  ninsns /= 10000;
  if (!ninsns)
    ninsns = 1;
  return ninsns;
}
unsigned
expected_loop_iterations (const struct loop *loop)
{
  edge e;
  if (loop->header1->count)
    {
      gcov_type count_in, count_latch, expected;
      count_in = 0;
      count_latch = 0;
      for (e = loop->header1->pred; e; e = e->pred_next)
 if (e->src == loop->latch)
   count_latch = e->count;
 else
   count_in += e->count;
      if (count_in == 0)
        expected = count_latch * 2;
      else
        expected = (count_latch + count_in - 1) / count_in;
      return (expected > 10000 ? 10000 : expected);
    }
  else
    {
      int freq_in, freq_latch;
      freq_in = 0;
      freq_latch = 0;
      for (e = loop->header1->pred; e; e = e->pred_next)
 if (e->src == loop->latch)
   freq_latch = (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
 else
   freq_in += (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
      if (freq_in == 0)
 return freq_latch * 2;
      return (freq_latch + freq_in - 1) / freq_in;
    }
}
unsigned
get_loop_level (const struct loop *loop)
{
  const struct loop *ploop;
  unsigned mx = 0, l;
  for (ploop = loop->inner; ploop; ploop = ploop->next)
    {
      l = get_loop_level (ploop);
      if (l >= mx)
 mx = l + 1;
    }
  return mx;
}
static unsigned
seq_cost (rtx seq)
{
  unsigned cost = 0;
  rtx set;
  for (; seq; seq = (((seq)->u.fld[2]).rtx1))
    {
      set = (((((enum rtx_code) (seq)->code) == INSN) || (((enum rtx_code) (seq)->code) == JUMP_INSN) || (((enum rtx_code) (seq)->code) == CALL_INSN)) ? (((enum rtx_code) ((((seq)->u.fld[5]).rtx1))->code) == SET ? (((seq)->u.fld[5]).rtx1) : single_set_2 (seq, (((seq)->u.fld[5]).rtx1))) : (rtx) 0);
      if (set)
 cost += rtx_cost (set, SET);
      else
 cost++;
    }
  return cost;
}
static unsigned avail_regs;
static unsigned res_regs;
static unsigned small_cost;
static unsigned pres_cost;
static unsigned spill_cost_cfg;
void
init_set_costs (void)
{
  rtx seq;
  rtx reg1 = gen_raw_REG (SImode, 53);
  rtx reg2 = gen_raw_REG (SImode, 53 + 1);
  rtx addr = gen_raw_REG ((0 ? DImode : SImode), 53 + 2);
  rtx mem = validize_mem (gen_rtx_MEM (SImode, addr));
  unsigned i;
  for (i = 0; i < 53; i++)
    if ((!!((reg_class_contents[GENERAL_REGS])[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
 && !fixed_regs[i])
      avail_regs++;
  res_regs = 3;
  start_sequence ();
  emit_move_insn (reg1, reg2);
  seq = get_insns ();
  end_sequence ();
  small_cost = seq_cost (seq);
  pres_cost = 2 * small_cost;
  start_sequence ();
  emit_move_insn (mem, reg1);
  emit_move_insn (reg2, mem);
  seq = get_insns ();
  end_sequence ();
  spill_cost_cfg = seq_cost (seq);
}
unsigned
global_cost_for_size (unsigned size, unsigned regs_used, unsigned n_uses)
{
  unsigned regs_needed = regs_used + size;
  unsigned cost = 0;
  if (regs_needed + res_regs <= avail_regs)
    cost += small_cost * size;
  else if (regs_needed <= avail_regs)
    cost += pres_cost * size;
  else
    {
      cost += pres_cost * size;
      cost += spill_cost_cfg * n_uses * (regs_needed - avail_regs) / regs_needed;
    }
  return cost;
}
static struct loop * duplicate_loop (struct loops *, struct loop *,
         struct loop *);
static void duplicate_subloops (struct loops *, struct loop *, struct loop *);
static void copy_loops_to (struct loops *, struct loop **, int,
      struct loop *);
static void loop_redirect_edge (edge, basic_block);
static unsigned char loop_delete_branch_edge (edge, int);
static void remove_bbs (basic_block *, int);
static unsigned char rpe_enum_p (basic_block, void *);
static int find_path (edge, basic_block **);
static unsigned char alp_enum_p (basic_block, void *);
static void add_loop (struct loops *, struct loop *);
static void fix_loop_placements (struct loops *, struct loop *);
static unsigned char fix_bb_placement (struct loops *, basic_block);
static void fix_bb_placements (struct loops *, basic_block);
static void place_new_loop (struct loops *, struct loop *);
static void scale_loop_frequencies (struct loop *, int, int);
static void scale_bbs_frequencies (basic_block *, int, int, int);
static basic_block create_preheader (struct loop *, int);
static void fix_irreducible_loops (basic_block);
edge
split_loop_bb (basic_block bb, rtx insn)
{
  edge e;
  e = split_block (bb, insn);
  add_bb_to_loop (e->dest, e->src->loop_father);
  return e;
}
static unsigned char
rpe_enum_p (basic_block bb, void *data)
{
  return dominated_by_p (CDI_DOMINATORS, bb, data);
}
static void
remove_bbs (basic_block *bbs, int nbbs)
{
  int i;
  for (i = 0; i < nbbs; i++)
    {
      remove_bb_from_loops (bbs[i]);
      delete_basic_block (bbs[i]);
    }
}
static int
find_path (edge e, basic_block **bbs)
{
  if (e->dest->pred->pred_next)
    fancy_abort ("gcc.c", 399883, "?");
  *bbs = xcalloc (n_basic_blocks, sizeof (basic_block));
  return dfs_enumerate_from (e->dest, 0, rpe_enum_p, *bbs,
        n_basic_blocks, e->dest);
}
static unsigned char
fix_bb_placement (struct loops *loops, basic_block bb)
{
  edge e;
  struct loop *loop = loops->tree_root, *act;
  for (e = bb->succ; e; e = e->succ_next)
    {
      if (e->dest == EXIT_BLOCK_PTR)
 continue;
      act = e->dest->loop_father;
      if (act->header1 == e->dest)
 act = act->outer;
      if (flow_loop_nested_p (loop, act))
 loop = act;
    }
  if (loop == bb->loop_father)
    return 0;
  remove_bb_from_loops (bb);
  add_bb_to_loop (bb, loop);
  return 1;
}
static void
fix_bb_placements (struct loops *loops, basic_block from)
{
  sbitmap in_queue;
  basic_block *queue, *qtop, *qbeg, *qend;
  struct loop *base_loop;
  edge e;
  base_loop = from->loop_father;
  if (base_loop == loops->tree_root)
    return;
  in_queue = sbitmap_alloc (last_basic_block);
  sbitmap_zero (in_queue);
  ((in_queue)->elms [(from->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (from->index) % ((unsigned) (8 * 4)));
  ((in_queue)->elms [(base_loop->header1->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (base_loop->header1->index) % ((unsigned) (8 * 4)));
  queue = xmalloc ((base_loop->num_nodes + 1) * sizeof (basic_block));
  qtop = queue + base_loop->num_nodes + 1;
  qbeg = queue;
  qend = queue + 1;
  *qbeg = from;
  while (qbeg != qend)
    {
      from = *qbeg;
      qbeg++;
      if (qbeg == qtop)
 qbeg = queue;
      ((in_queue)->elms [(from->index) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (from->index) % ((unsigned) (8 * 4))));
      if (from->loop_father->header1 == from)
 {
   if (!fix_loop_placement (from->loop_father))
     continue;
 }
      else
 {
   if (!fix_bb_placement (loops, from))
     continue;
 }
      for (e = from->pred; e; e = e->pred_next)
 {
   basic_block pred = e->src;
   struct loop *nca;
   if (((in_queue)->elms [(pred->index) / ((unsigned) (8 * 4))] >> (pred->index) % ((unsigned) (8 * 4)) & 1))
     continue;
   nca = find_common_loop (pred->loop_father, base_loop);
   if (pred->loop_father != base_loop
       && (nca == base_loop
    || nca != pred->loop_father))
     pred = pred->loop_father->header1;
   else if (!flow_loop_nested_p (from->loop_father, pred->loop_father))
     {
       continue;
     }
   if (((in_queue)->elms [(pred->index) / ((unsigned) (8 * 4))] >> (pred->index) % ((unsigned) (8 * 4)) & 1))
     continue;
   *qend = pred;
   qend++;
   if (qend == qtop)
     qend = queue;
   ((in_queue)->elms [(pred->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (pred->index) % ((unsigned) (8 * 4)));
 }
    }
  free (in_queue);
  free (queue);
}
static void
fix_irreducible_loops (basic_block from)
{
  basic_block bb;
  basic_block *stack;
  int stack_top;
  sbitmap on_stack;
  edge *edges, e;
  unsigned n_edges, i;
  if (!(from->flags & 16))
    return;
  on_stack = sbitmap_alloc (last_basic_block);
  sbitmap_zero (on_stack);
  ((on_stack)->elms [(from->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (from->index) % ((unsigned) (8 * 4)));
  stack = xmalloc (from->loop_father->num_nodes * sizeof (basic_block));
  stack[0] = from;
  stack_top = 1;
  while (stack_top)
    {
      bb = stack[--stack_top];
      ((on_stack)->elms [(bb->index) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4))));
      for (e = bb->pred; e; e = e->pred_next)
 if (e->flags & 128)
   break;
      if (e)
 continue;
      bb->flags &= ~16;
      if (bb->loop_father->header1 == bb)
 edges = get_loop_exit_edges (bb->loop_father, &n_edges);
      else
 {
   n_edges = 0;
   for (e = bb->succ; e; e = e->succ_next)
     n_edges++;
   edges = xmalloc (n_edges * sizeof (edge));
   n_edges = 0;
   for (e = bb->succ; e; e = e->succ_next)
     edges[n_edges++] = e;
 }
      for (i = 0; i < n_edges; i++)
 {
   e = edges[i];
   if (e->flags & 128)
     {
       if (!flow_bb_inside_loop_p (from->loop_father, e->dest))
  continue;
       e->flags &= ~128;
       if (((on_stack)->elms [(e->dest->index) / ((unsigned) (8 * 4))] >> (e->dest->index) % ((unsigned) (8 * 4)) & 1))
  continue;
       ((on_stack)->elms [(e->dest->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (e->dest->index) % ((unsigned) (8 * 4)));
       stack[stack_top++] = e->dest;
     }
 }
      free (edges);
    }
  free (on_stack);
  free (stack);
}
unsigned char
remove_path (struct loops *loops, edge e)
{
  edge ae;
  basic_block *rem_bbs, *bord_bbs, *dom_bbs, from, bb;
  int i, nrem, n_bord_bbs, n_dom_bbs;
  sbitmap seen;
  if (!loop_delete_branch_edge (e, 0))
    return 0;
  if (e->dest->pred->pred_next)
    e = loop_split_edge_with (e, (rtx) 0)->pred;
  while (e->src->loop_father->outer
  && dominated_by_p (CDI_DOMINATORS,
       e->src->loop_father->latch, e->dest))
    unloop (loops, e->src->loop_father);
  nrem = find_path (e, &rem_bbs);
  n_bord_bbs = 0;
  bord_bbs = xcalloc (n_basic_blocks, sizeof (basic_block));
  seen = sbitmap_alloc (last_basic_block);
  sbitmap_zero (seen);
  for (i = 0; i < nrem; i++)
    ((seen)->elms [(rem_bbs[i]->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (rem_bbs[i]->index) % ((unsigned) (8 * 4)));
  for (i = 0; i < nrem; i++)
    {
      bb = rem_bbs[i];
      for (ae = rem_bbs[i]->succ; ae; ae = ae->succ_next)
 if (ae->dest != EXIT_BLOCK_PTR && !((seen)->elms [(ae->dest->index) / ((unsigned) (8 * 4))] >> (ae->dest->index) % ((unsigned) (8 * 4)) & 1))
   {
     ((seen)->elms [(ae->dest->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (ae->dest->index) % ((unsigned) (8 * 4)));
     bord_bbs[n_bord_bbs++] = ae->dest;
   }
    }
  from = e->src;
  if (!loop_delete_branch_edge (e, 1))
    fancy_abort ("gcc.c", 400152, "?");
  dom_bbs = xcalloc (n_basic_blocks, sizeof (basic_block));
  for (i = 0; i < nrem; i++)
    if (rem_bbs[i]->loop_father->header1 == rem_bbs[i])
      cancel_loop_tree (loops, rem_bbs[i]->loop_father);
  remove_bbs (rem_bbs, nrem);
  free (rem_bbs);
  n_dom_bbs = 0;
  sbitmap_zero (seen);
  for (i = 0; i < n_bord_bbs; i++)
    {
      basic_block ldom;
      bb = get_immediate_dominator (CDI_DOMINATORS, bord_bbs[i]);
      if (((seen)->elms [(bb->index) / ((unsigned) (8 * 4))] >> (bb->index) % ((unsigned) (8 * 4)) & 1))
 continue;
      ((seen)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
      for (ldom = first_dom_son (CDI_DOMINATORS, bb);
    ldom;
    ldom = next_dom_son (CDI_DOMINATORS, ldom))
 if (!dominated_by_p (CDI_DOMINATORS, from, ldom))
   dom_bbs[n_dom_bbs++] = ldom;
    }
  free (seen);
  iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, n_dom_bbs);
  free (dom_bbs);
  for (i = 0; i < n_bord_bbs; i++)
    fix_irreducible_loops (bord_bbs[i]);
  free (bord_bbs);
  fix_bb_placements (loops, from);
  fix_loop_placements (loops, from->loop_father);
  return 1;
}
static unsigned char
alp_enum_p (basic_block bb, void *alp_header)
{
  return bb != (basic_block) alp_header;
}
static void
add_loop (struct loops *loops, struct loop *loop)
{
  basic_block *bbs;
  int i, n;
  place_new_loop (loops, loop);
  loop->level = 1;
  bbs = xcalloc (n_basic_blocks, sizeof (basic_block));
  n = dfs_enumerate_from (loop->latch, 1, alp_enum_p,
     bbs, n_basic_blocks, loop->header1);
  for (i = 0; i < n; i++)
    add_bb_to_loop (bbs[i], loop);
  add_bb_to_loop (loop->header1, loop);
  free (bbs);
}
static void
scale_bbs_frequencies (basic_block *bbs, int nbbs, int num, int den)
{
  int i;
  edge e;
  for (i = 0; i < nbbs; i++)
    {
      bbs[i]->frequency = (bbs[i]->frequency * num) / den;
      bbs[i]->count = (((bbs[i]->count * num) + (den) / 2) / (den));
      for (e = bbs[i]->succ; e; e = e->succ_next)
 e->count = (e->count * num) /den;
    }
}
static void
scale_loop_frequencies (struct loop *loop, int num, int den)
{
  basic_block *bbs;
  bbs = get_loop_body (loop);
  scale_bbs_frequencies (bbs, loop->num_nodes, num, den);
  free (bbs);
}
struct loop *
loopify (struct loops *loops, edge latch_edge, edge header_edge,
  basic_block switch_bb)
{
  basic_block succ_bb = latch_edge->dest;
  basic_block pred_bb = header_edge->src;
  basic_block *dom_bbs, *body;
  unsigned n_dom_bbs, i;
  sbitmap seen;
  struct loop *loop = xcalloc (1, sizeof (struct loop));
  struct loop *outer = succ_bb->loop_father->outer;
  int freq, prob, tot_prob;
  gcov_type cnt;
  edge e;
  loop->header1 = header_edge->dest;
  loop->latch = latch_edge->src;
  freq = (((header_edge)->src->frequency * (header_edge)->probability + 10000 / 2) / 10000);
  cnt = header_edge->count;
  prob = switch_bb->succ->probability;
  tot_prob = prob + switch_bb->succ->succ_next->probability;
  if (tot_prob == 0)
    tot_prob = 1;
  loop_redirect_edge (latch_edge, loop->header1);
  loop_redirect_edge (((switch_bb)->succ->flags & 1 ? (switch_bb)->succ->succ_next : (switch_bb)->succ), succ_bb);
  loop_redirect_edge (header_edge, switch_bb);
  loop_redirect_edge (((switch_bb)->succ->flags & 1 ? (switch_bb)->succ : (switch_bb)->succ->succ_next), loop->header1);
  set_immediate_dominator (CDI_DOMINATORS, switch_bb, pred_bb);
  set_immediate_dominator (CDI_DOMINATORS, loop->header1, switch_bb);
  set_immediate_dominator (CDI_DOMINATORS, succ_bb, switch_bb);
  add_loop (loops, loop);
  flow_loop_tree_node_add (outer, loop);
  add_bb_to_loop (switch_bb, outer);
  switch_bb->frequency = freq;
  switch_bb->count = cnt;
  for (e = switch_bb->succ; e; e = e->succ_next)
    e->count = (switch_bb->count * e->probability) / 10000;
  scale_loop_frequencies (loop, prob, tot_prob);
  scale_loop_frequencies (succ_bb->loop_father, tot_prob - prob, tot_prob);
  dom_bbs = xcalloc (n_basic_blocks, sizeof (basic_block));
  n_dom_bbs = 0;
  seen = sbitmap_alloc (last_basic_block);
  sbitmap_zero (seen);
  body = get_loop_body (loop);
  for (i = 0; i < loop->num_nodes; i++)
    ((seen)->elms [(body[i]->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (body[i]->index) % ((unsigned) (8 * 4)));
  for (i = 0; i < loop->num_nodes; i++)
    {
      basic_block ldom;
      for (ldom = first_dom_son (CDI_DOMINATORS, body[i]);
    ldom;
    ldom = next_dom_son (CDI_DOMINATORS, ldom))
 if (!((seen)->elms [(ldom->index) / ((unsigned) (8 * 4))] >> (ldom->index) % ((unsigned) (8 * 4)) & 1))
   {
     ((seen)->elms [(ldom->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (ldom->index) % ((unsigned) (8 * 4)));
     dom_bbs[n_dom_bbs++] = ldom;
   }
    }
  iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, n_dom_bbs);
  free (body);
  free (seen);
  free (dom_bbs);
  return loop;
}
void
unloop (struct loops *loops, struct loop *loop)
{
  basic_block *body;
  struct loop *ploop;
  unsigned i, n;
  basic_block latch = loop->latch;
  edge *edges;
  unsigned n_edges;
  body = get_loop_body (loop);
  edges = get_loop_exit_edges (loop, &n_edges);
  n = loop->num_nodes;
  for (i = 0; i < n; i++)
    if (body[i]->loop_father == loop)
      {
 remove_bb_from_loops (body[i]);
 add_bb_to_loop (body[i], loop->outer);
      }
  free(body);
  while (loop->inner)
    {
      ploop = loop->inner;
      flow_loop_tree_node_remove (ploop);
      flow_loop_tree_node_add (loop->outer, ploop);
    }
  flow_loop_tree_node_remove (loop);
  loops->parray[loop->num] = ((void *)0);
  flow_loop_free (loop);
  remove_edge (latch->succ);
  fix_bb_placements (loops, latch);
  for (i = 0; i < n_edges; i++)
    if (edges[i]->flags & 128)
      break;
  if (i != n_edges)
    mark_irreducible_loops (loops);
  free (edges);
}
int
fix_loop_placement (struct loop *loop)
{
  basic_block *body;
  unsigned i;
  edge e;
  struct loop *father = loop->pred[0], *act;
  body = get_loop_body (loop);
  for (i = 0; i < loop->num_nodes; i++)
    for (e = body[i]->succ; e; e = e->succ_next)
      if (!flow_bb_inside_loop_p (loop, e->dest))
 {
   act = find_common_loop (loop, e->dest->loop_father);
   if (flow_loop_nested_p (father, act))
     father = act;
 }
  free (body);
  if (father != loop->outer)
    {
      for (act = loop->outer; act != father; act = act->outer)
 act->num_nodes -= loop->num_nodes;
      flow_loop_tree_node_remove (loop);
      flow_loop_tree_node_add (father, loop);
      return 1;
    }
  return 0;
}
static void
fix_loop_placements (struct loops *loops, struct loop *loop)
{
  struct loop *outer;
  while (loop->outer)
    {
      outer = loop->outer;
      if (!fix_loop_placement (loop))
        break;
      fix_bb_placements (loops, loop_preheader_edge (loop)->src);
      loop = outer;
    }
}
static void
place_new_loop (struct loops *loops, struct loop *loop)
{
  loops->parray =
    xrealloc (loops->parray, (loops->num + 1) * sizeof (struct loop *));
  loops->parray[loops->num] = loop;
  loop->num = loops->num++;
}
static struct loop *
duplicate_loop (struct loops *loops, struct loop *loop, struct loop *target)
{
  struct loop *cloop;
  cloop = xcalloc (1, sizeof (struct loop));
  place_new_loop (loops, cloop);
  cloop->level = loop->level;
  loop->copy = cloop;
  flow_loop_tree_node_add (target, cloop);
  return cloop;
}
static void
duplicate_subloops (struct loops *loops, struct loop *loop, struct loop *target)
{
  struct loop *aloop, *cloop;
  for (aloop = loop->inner; aloop; aloop = aloop->next)
    {
      cloop = duplicate_loop (loops, aloop, target);
      duplicate_subloops (loops, aloop, cloop);
    }
}
static void
copy_loops_to (struct loops *loops, struct loop **copied_loops, int n, struct loop *target)
{
  struct loop *aloop;
  int i;
  for (i = 0; i < n; i++)
    {
      aloop = duplicate_loop (loops, copied_loops[i], target);
      duplicate_subloops (loops, copied_loops[i], aloop);
    }
}
static void
loop_redirect_edge (edge e, basic_block dest)
{
  if (e->dest == dest)
    return;
  redirect_edge_and_branch_force (e, dest);
}
static unsigned char
loop_delete_branch_edge (edge e, int really_delete)
{
  basic_block src = e->src;
  int irr;
  edge snd;
  if (src->succ->succ_next)
    {
      basic_block newdest;
      if (src->succ->succ_next->succ_next)
 return 0;
      if (!any_condjump_p ((src)->end_))
 return 0;
      snd = e == src->succ ? src->succ->succ_next : src->succ;
      newdest = snd->dest;
      if (newdest == EXIT_BLOCK_PTR)
 return 0;
      if (!really_delete)
 return 1;
      irr = snd->flags & 128;
      if (!redirect_edge_and_branch (e, newdest))
 return 0;
      src->succ->flags &= ~128;
      src->succ->flags |= irr;
      return 1;
    }
  else
    {
      fancy_abort ("gcc.c", 400586, "?");
    }
  return 0;
}
unsigned char
can_duplicate_loop_p (struct loop *loop)
{
  int ret;
  basic_block *bbs = get_loop_body (loop);
  ret = can_copy_bbs_p (bbs, loop->num_nodes);
  free (bbs);
  return ret;
}
int
duplicate_loop_to_header_edge (struct loop *loop, edge e, struct loops *loops,
          unsigned int ndupl, sbitmap wont_exit,
          edge orig, edge *to_remove,
          unsigned int *n_to_remove, int flags)
{
  struct loop *target, *aloop;
  struct loop **orig_loops;
  unsigned n_orig_loops;
  basic_block header1 = loop->header1, latch = loop->latch;
  basic_block *new_bbs, *bbs, *first_active;
  basic_block new_bb, bb, first_active_latch = ((void *)0);
  edge ae, latch_edge;
  edge spec_edges[2], new_spec_edges[2];
  unsigned i, j, n;
  int is_latch = (latch == e->src);
  int scale_act = 0, *scale_step = ((void *)0), scale_main = 0;
  int p, freq_in, freq_le, freq_out_orig;
  int prob_pass_thru, prob_pass_wont_exit, prob_pass_main;
  int add_irreducible_flag;
  if (e->dest != loop->header1)
    fancy_abort ("gcc.c", 400640, "?");
  if (ndupl <= 0)
    fancy_abort ("gcc.c", 400642, "?");
  if (orig)
    {
      if (!flow_bb_inside_loop_p (loop, orig->src))
 fancy_abort ("gcc.c", 400648, "?");
      if (flow_bb_inside_loop_p (loop, orig->dest))
 fancy_abort ("gcc.c", 400650, "?");
    }
  bbs = get_loop_body (loop);
  if (!can_copy_bbs_p (bbs, loop->num_nodes))
    {
      free (bbs);
      return 0;
    }
  new_bbs = xmalloc (sizeof (basic_block) * loop->num_nodes);
  add_irreducible_flag = e->flags & 128;
  if (is_latch && add_irreducible_flag)
    fancy_abort ("gcc.c", 400667, "?");
  latch_edge = loop_latch_edge (loop);
  if (flags & 1)
    {
      freq_in = header1->frequency;
      freq_le = (((latch_edge)->src->frequency * (latch_edge)->probability + 10000 / 2) / 10000);
      if (freq_in == 0)
 freq_in = 1;
      if (freq_in < freq_le)
 freq_in = freq_le;
      freq_out_orig = orig ? (((orig)->src->frequency * (orig)->probability + 10000 / 2) / 10000) : freq_in - freq_le;
      if (freq_out_orig > freq_in - freq_le)
 freq_out_orig = freq_in - freq_le;
      prob_pass_thru = (((10000 * freq_le) + (freq_in) / 2) / (freq_in));
      prob_pass_wont_exit =
       (((10000 * (freq_le + freq_out_orig)) + (freq_in) / 2) / (freq_in));
      scale_step = xmalloc (ndupl * sizeof (int));
 for (i = 1; i <= ndupl; i++)
   scale_step[i - 1] = ((wont_exit)->elms [(i) / ((unsigned) (8 * 4))] >> (i) % ((unsigned) (8 * 4)) & 1)
    ? prob_pass_wont_exit
    : prob_pass_thru;
      if (is_latch)
 {
   prob_pass_main = ((wont_exit)->elms [(0) / ((unsigned) (8 * 4))] >> (0) % ((unsigned) (8 * 4)) & 1)
    ? prob_pass_wont_exit
    : prob_pass_thru;
   p = prob_pass_main;
   scale_main = 10000;
   for (i = 0; i < ndupl; i++)
     {
       scale_main += p;
       p = (((p * scale_step[i]) + (10000) / 2) / (10000));
     }
   scale_main = (((10000 * 10000) + (scale_main) / 2) / (scale_main));
   scale_act = (((scale_main * prob_pass_main) + (10000) / 2) / (10000));
 }
      else
 {
   scale_main = 10000;
   for (i = 0; i < ndupl; i++)
     scale_main = (((scale_main * scale_step[i]) + (10000) / 2) / (10000));
   scale_act = 10000 - prob_pass_thru;
 }
      for (i = 0; i < ndupl; i++)
 if (scale_step[i] < 0 || scale_step[i] > 10000)
   fancy_abort ("gcc.c", 400720, "?");
      if (scale_main < 0 || scale_main > 10000
   || scale_act < 0 || scale_act > 10000)
 fancy_abort ("gcc.c", 400723, "?");
    }
  target = e->src->loop_father;
  n_orig_loops = 0;
  for (aloop = loop->inner; aloop; aloop = aloop->next)
    n_orig_loops++;
  orig_loops = xcalloc (n_orig_loops, sizeof (struct loop *));
  for (aloop = loop->inner, i = 0; aloop; aloop = aloop->next, i++)
    orig_loops[i] = aloop;
  loop->copy = target;
  n = loop->num_nodes;
  first_active = xmalloc (n * sizeof (basic_block));
  if (is_latch)
    {
      memcpy (first_active, bbs, n * sizeof (basic_block));
      first_active_latch = latch;
    }
  if (orig && ((wont_exit)->elms [(0) / ((unsigned) (8 * 4))] >> (0) % ((unsigned) (8 * 4)) & 1))
    to_remove[(*n_to_remove)++] = orig;
  spec_edges[1] = orig;
  spec_edges[0] = latch_edge;
  for (j = 0; j < ndupl; j++)
    {
      copy_loops_to (loops, orig_loops, n_orig_loops, target);
      copy_bbs (bbs, n, new_bbs, spec_edges, 2, new_spec_edges, loop);
      if (add_irreducible_flag)
 {
   for (i = 0; i < n; i++)
     new_bbs[i]->rbi->duplicated = 1;
   for (i = 0; i < n; i++)
     {
       new_bb = new_bbs[i];
       if (new_bb->loop_father == target)
  new_bb->flags |= 16;
       for (ae = new_bb->succ; ae; ae = ae->succ_next)
  if (ae->dest->rbi->duplicated
      && (ae->src->loop_father == target
   || ae->dest->loop_father == target))
    ae->flags |= 128;
     }
   for (i = 0; i < n; i++)
     new_bbs[i]->rbi->duplicated = 0;
 }
      if (is_latch)
 {
   redirect_edge_and_branch_force (latch_edge, new_bbs[0]);
   redirect_edge_and_branch_force (new_spec_edges[0],
       loop->header1);
   set_immediate_dominator (CDI_DOMINATORS, new_bbs[0], latch);
   latch = loop->latch = new_bbs[1];
   e = latch_edge = new_spec_edges[0];
 }
      else
 {
   redirect_edge_and_branch_force (new_spec_edges[0],
       loop->header1);
   redirect_edge_and_branch_force (e, new_bbs[0]);
   set_immediate_dominator (CDI_DOMINATORS, new_bbs[0], e->src);
   e = new_spec_edges[0];
 }
      if (orig && ((wont_exit)->elms [(j + 1) / ((unsigned) (8 * 4))] >> (j + 1) % ((unsigned) (8 * 4)) & 1))
 to_remove[(*n_to_remove)++] = new_spec_edges[1];
      if (!first_active_latch)
 {
   memcpy (first_active, new_bbs, n * sizeof (basic_block));
   first_active_latch = new_bbs[1];
 }
      if (flags & 1)
 {
   scale_bbs_frequencies (new_bbs, n, scale_act, 10000);
   scale_act = (((scale_act * scale_step[j]) + (10000) / 2) / (10000));
 }
    }
  free (new_bbs);
  free (orig_loops);
  if (!is_latch)
    set_immediate_dominator (CDI_DOMINATORS, e->dest, e->src);
  if (flags & 1)
    {
      scale_bbs_frequencies (bbs, n, scale_main, 10000);
      free (scale_step);
    }
  for (i = 0; i < n; i++)
    {
      basic_block dominated, dom_bb, *dom_bbs;
      int n_dom_bbs,j;
      bb = bbs[i];
      n_dom_bbs = get_dominated_by (CDI_DOMINATORS, bb, &dom_bbs);
      for (j = 0; j < n_dom_bbs; j++)
 {
   dominated = dom_bbs[j];
   if (flow_bb_inside_loop_p (loop, dominated))
     continue;
   dom_bb = nearest_common_dominator (
   CDI_DOMINATORS, first_active[i], first_active_latch);
          set_immediate_dominator (CDI_DOMINATORS, dominated, dom_bb);
 }
      free (dom_bbs);
    }
  free (first_active);
  free (bbs);
  return 1;
}
static edge mfb_kj_edge2;
static unsigned char
mfb_keep_just2 (edge e)
{
  return e != mfb_kj_edge2;
}
static void
mfb_update_loops (basic_block jump)
{
  struct loop *loop = jump->succ->dest->loop_father;
  if (dom_computed[CDI_DOMINATORS])
    set_immediate_dominator (CDI_DOMINATORS, jump, jump->pred->src);
  add_bb_to_loop (jump, loop);
  loop->latch = jump;
}
static basic_block
create_preheader (struct loop *loop, int flags)
{
  edge e, fallthru;
  basic_block dummy;
  struct loop *cloop, *ploop;
  int nentry = 0;
  unsigned char irred = 0;
  cloop = loop->outer;
  for (e = loop->header1->pred; e; e = e->pred_next)
    {
      if (e->src == loop->latch)
 continue;
      irred |= (e->flags & 128) != 0;
      nentry++;
    }
  if (!nentry)
    fancy_abort ("gcc.c", 400911, "?");
  if (nentry == 1)
    {
      for (e = loop->header1->pred; e->src == loop->latch; e = e->pred_next);
      if (!(flags & CP_SIMPLE_PREHEADERS)
   || !e->src->succ->succ_next)
 return ((void *)0);
    }
  mfb_kj_edge2 = loop_latch_edge (loop);
  fallthru = make_forwarder_block (loop->header1, mfb_keep_just2,
       mfb_update_loops);
  dummy = fallthru->src;
  loop->header1 = fallthru->dest;
  for (ploop = loop; ploop; ploop = ploop->outer)
    if (ploop->latch == dummy)
      ploop->latch = fallthru->dest;
  for (e = dummy->pred; e; e = e->pred_next)
    if (e->src != loop->latch)
      break;
  move_block_after (dummy, e->src);
  loop->header1->loop_father = loop;
  add_bb_to_loop (dummy, cloop);
  if (irred)
    {
      dummy->flags |= 16;
      dummy->succ->flags |= 128;
    }
  if (dump_file)
    fprintf (dump_file, "Created preheader block for loop %i\n",
      loop->num);
  return dummy;
}
void
create_preheaders (struct loops *loops, int flags)
{
  unsigned i;
  for (i = 1; i < loops->num; i++)
    create_preheader (loops->parray[i], flags);
  loops->state |= LOOPS_HAVE_PREHEADERS;
}
void
force_single_succ_latches (struct loops *loops)
{
  unsigned i;
  struct loop *loop;
  edge e;
  for (i = 1; i < loops->num; i++)
    {
      loop = loops->parray[i];
      if (loop->latch != loop->header1
   && !loop->latch->succ->succ_next)
 continue;
      for (e = loop->header1->pred; e->src != loop->latch; e = e->pred_next)
 continue;
      loop_split_edge_with (e, (rtx) 0);
    }
  loops->state |= LOOPS_HAVE_SIMPLE_LATCHES;
}
basic_block
loop_split_edge_with (edge e, rtx insns)
{
  basic_block src, dest, new_bb;
  struct loop *loop_c;
  edge new_e;
  src = e->src;
  dest = e->dest;
  loop_c = find_common_loop (src->loop_father, dest->loop_father);
  new_bb = split_edge (e);
  add_bb_to_loop (new_bb, loop_c);
  new_bb->flags = insns ? 32 : 0;
  new_e = new_bb->succ;
  if (e->flags & 128)
    {
      new_bb->flags |= 16;
      new_e->flags |= 128;
    }
  if (insns)
    emit_insn_after (insns, (new_bb)->end_);
  if (dest->loop_father->latch == src)
    dest->loop_father->latch = new_bb;
  return new_bb;
}
void
create_loop_notes (void)
{
  rtx insn, head, end;
  struct loops loops;
  struct loop *loop;
  basic_block *first, *last, bb, pbb;
  struct loop **stack, **top;
  flow_loops_find (&loops, 1);
  free_dominance_info (CDI_DOMINATORS);
  if (loops.num > 1)
    {
      last = xcalloc (loops.num, sizeof (basic_block));
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   for (loop = bb->loop_father; loop->outer; loop = loop->outer)
     last[loop->num] = bb;
 }
      first = xcalloc (loops.num, sizeof (basic_block));
      stack = xcalloc (loops.num, sizeof (struct loop *));
      top = stack;
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   for (loop = bb->loop_father; loop->outer; loop = loop->outer)
     {
       if (!first[loop->num])
  {
    *top++ = loop;
    first[loop->num] = bb;
  }
       if (bb == last[loop->num])
  {
    while (*--top != loop)
      last[(*top)->num] = EXIT_BLOCK_PTR;
    insn = ((((first[loop->num])->head_)->u.fld[1]).rtx1);
    if (insn
        && ((enum rtx_code) (insn)->code) == BARRIER)
      insn = (((insn)->u.fld[1]).rtx1);
    if (insn
        && ((enum rtx_code) (insn)->code) == JUMP_INSN
        && any_uncondjump_p (insn)
        && onlyjump_p (insn))
      {
        pbb = (((insn)->u.fld[3]).bb);
        if (!pbb || !pbb->succ || pbb->succ->succ_next)
   fancy_abort ("gcc.c", 401092, "?");
        if (!flow_bb_inside_loop_p (loop, pbb->succ->dest))
   insn = (first[loop->num])->head_;
      }
    else
      insn = (first[loop->num])->head_;
    head = (first[loop->num])->head_;
    emit_note_before (NOTE_INSN_LOOP_BEG, insn);
    (first[loop->num])->head_ = head;
    insn = (last[loop->num])->end_;
    if ((((insn)->u.fld[2]).rtx1)
        && ((enum rtx_code) ((((insn)->u.fld[2]).rtx1))->code) == BARRIER)
      insn = (((insn)->u.fld[2]).rtx1);
    end = (last[loop->num])->end_;
    emit_note_after (NOTE_INSN_LOOP_END, insn);
    (last[loop->num])->end_ = end;
  }
     }
 }
      free (first);
      free (last);
      free (stack);
    }
  flow_loops_free (&loops);
}
struct loops *
loop_optimizer_init (FILE *dumpfile)
{
  struct loops *loops = xcalloc (1, sizeof (struct loops));
  edge e;
  static unsigned char first_time = 1;
  if (first_time)
    {
      first_time = 0;
      init_set_costs ();
    }
  for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
    if ((e->flags & 1) && e->src->succ->succ_next)
      split_edge (e);
  if (flow_loops_find (loops, 1) <= 1)
    {
      flow_loops_free (loops);
      free_dominance_info (CDI_DOMINATORS);
      free (loops);
      return ((void *)0);
    }
  free (loops->cfg.rc_order);
  loops->cfg.rc_order = ((void *)0);
  free (loops->cfg.dfs_order);
  loops->cfg.dfs_order = ((void *)0);
  create_preheaders (loops, CP_SIMPLE_PREHEADERS);
  force_single_succ_latches (loops);
  mark_irreducible_loops (loops);
  flow_loops_dump (loops, dumpfile, ((void *)0), 1);
  return loops;
}
void
loop_optimizer_finalize (struct loops *loops, FILE *dumpfile)
{
  unsigned i;
  if (!loops)
    return;
  for (i = 1; i < loops->num; i++)
    if (loops->parray[i])
      free_simple_loop_desc (loops->parray[i]);
  flow_loops_dump (loops, dumpfile, ((void *)0), 1);
  flow_loops_free (loops);
  free_dominance_info (CDI_DOMINATORS);
  free (loops);
}
static struct loop *unswitch_loop (struct loops *, struct loop *,
       basic_block, rtx, rtx);
static void unswitch_single_loop (struct loops *, struct loop *, rtx, int);
static rtx may_unswitch_on (basic_block, struct loop *, rtx *);
rtx
compare_and_jump_seq (rtx op0, rtx op1, enum rtx_code comp, rtx label, int prob,
        rtx cinsn)
{
  rtx seq, jump, cond;
  enum machine_mode mode;
  mode = ((enum machine_mode) (op0)->mode);
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (op1)->mode);
  start_sequence ();
  if (mode_class[mode] == MODE_CC)
    {
      if (!cinsn)
 fancy_abort ("gcc.c", 401323, "?");
      cond = ((((((pc_set (cinsn))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      if (((enum rtx_code) (cond)->code) != comp
   || !rtx_equal_p (op0, (((cond)->u.fld[0]).rtx1))
   || !rtx_equal_p (op1, (((cond)->u.fld[1]).rtx1)))
 fancy_abort ("gcc.c", 401328, "?");
      emit_jump_insn (copy_insn ((((cinsn)->u.fld[5]).rtx1)));
      jump = get_last_insn ();
      (((jump)->u.fld[9]).rtx1) = (((cinsn)->u.fld[9]).rtx1);
      ((((((jump)->u.fld[9]).rtx1))->u.fld[4]).rtint)++;
      redirect_jump (jump, label, 0);
    }
  else
    {
      if (cinsn)
 fancy_abort ("gcc.c", 401338, "?");
      op0 = force_operand (op0, (rtx) 0);
      op1 = force_operand (op1, (rtx) 0);
      do_compare_rtx_and_jump (op0, op1, comp, 0,
          mode, (rtx) 0, (rtx) 0, label);
      jump = get_last_insn ();
      (((jump)->u.fld[9]).rtx1) = label;
      (((label)->u.fld[4]).rtint)++;
    }
  (((jump)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PROB), (gen_rtx_CONST_INT (VOIDmode, (long) (prob))), ((((jump)->u.fld[8]).rtx1)))
                      ;
  seq = get_insns ();
  end_sequence ();
  return seq;
}
void
unswitch_loops (struct loops *loops)
{
  int i, num;
  struct loop *loop;
  num = loops->num;
  for (i = 1; i < num; i++)
    {
      loop = loops->parray[i];
      if (!loop)
 continue;
      if (loop->inner)
 continue;
      unswitch_single_loop (loops, loop, (rtx) 0, 0);
    }
  iv_analysis_done ();
}
static rtx
may_unswitch_on (basic_block bb, struct loop *loop, rtx *cinsn)
{
  rtx test, at, insn, op[2], stest;
  struct rtx_iv iv;
  unsigned i;
  enum machine_mode mode;
  if (!bb->succ || !bb->succ->succ_next || bb->succ->succ_next->succ_next)
    return (rtx) 0;
  if (!any_condjump_p ((bb)->end_))
    return (rtx) 0;
  if (!flow_bb_inside_loop_p (loop, bb->succ->dest)
      || !flow_bb_inside_loop_p (loop, bb->succ->succ_next->dest))
    return (rtx) 0;
  if (!just_once_each_iteration_p (loop, bb))
    return (rtx) 0;
  test = get_condition ((bb)->end_, &at, 1);
  if (!test)
    return (rtx) 0;
  for (i = 0; i < 2; i++)
    {
      op[i] = (((test)->u.fld[i]).rtx1);
      if (((rtx_class[(int) (((enum rtx_code) (op[i])->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op[i])->code) == CONST_VECTOR))
 continue;
      insn = iv_get_reaching_def (at, op[i]);
      if (!iv_analyze (insn, op[i], &iv))
 return (rtx) 0;
      if (iv.step != (const_int_rtx[64])
   || iv.first_special)
 return (rtx) 0;
      op[i] = get_iv_value (&iv, (const_int_rtx[64]));
    }
  mode = ((enum machine_mode) (op[0])->mode);
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (op[1])->mode);
  if (mode_class[mode] == MODE_CC)
    {
      if (at != (bb)->end_)
 return (rtx) 0;
      *cinsn = (bb)->end_;
      if (!rtx_equal_p (op[0], (((test)->u.fld[0]).rtx1))
   || !rtx_equal_p (op[1], (((test)->u.fld[1]).rtx1)))
 return (rtx) 0;
      return test;
    }
  stest = simplify_gen_relational (((enum rtx_code) (test)->code), SImode,
       mode, op[0], op[1]);
  if (stest == (const_int_rtx[64])
      || stest == const_true_rtx)
    return stest;
  return canon_condition (gen_rtx_fmt_ee (((enum rtx_code) (test)->code), SImode,
       op[0], op[1]));
}
rtx
reversed_condition (rtx cond)
{
  enum rtx_code reversed;
  reversed = reversed_comparison_code (cond, ((void *)0));
  if (reversed == UNKNOWN)
    return (rtx) 0;
  else
    return gen_rtx_fmt_ee (reversed,
      ((enum machine_mode) (cond)->mode), (((cond)->u.fld[0]).rtx1),
      (((cond)->u.fld[1]).rtx1));
}
static void
unswitch_single_loop (struct loops *loops, struct loop *loop,
        rtx cond_checked, int num)
{
  basic_block *bbs;
  struct loop *nloop;
  unsigned i;
  rtx cond, rcond = (rtx) 0, conds, rconds, acond, cinsn = (rtx) 0;
  int repeat;
  edge e;
  if (num > (compiler_params[(int) PARAM_MAX_UNSWITCH_LEVEL].value1))
    {
      if (dump_file)
 fprintf (dump_file, ";; Not unswitching anymore, hit max level\n");
      return;
    }
  if (loop->inner)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not unswitching, not innermost loop\n");
      return;
    }
  if (!can_duplicate_loop_p (loop))
    {
      if (dump_file)
 fprintf (dump_file, ";; Not unswitching, can't duplicate loop\n");
      return;
    }
  if (num_loop_insns (loop) > (compiler_params[(int) PARAM_MAX_UNSWITCH_INSNS].value1))
    {
      if (dump_file)
 fprintf (dump_file, ";; Not unswitching, loop too big\n");
      return;
    }
  if (!maybe_hot_bb_p (loop->header1))
    {
      if (dump_file)
 fprintf (dump_file, ";; Not unswitching, not hot area\n");
      return;
    }
  if (expected_loop_iterations (loop) < 1)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not unswitching, loop iterations < 1\n");
      return;
    }
  do
    {
      repeat = 0;
      bbs = get_loop_body (loop);
      iv_analysis_loop_init (loop);
      for (i = 0; i < loop->num_nodes; i++)
 if ((cond = may_unswitch_on (bbs[i], loop, &cinsn)))
   break;
      if (i == loop->num_nodes)
 {
   free (bbs);
   return;
 }
      if (cond != (const_int_rtx[64])
   && cond != const_true_rtx)
 {
   rcond = reversed_condition (cond);
   if (rcond)
     rcond = canon_condition (rcond);
   for (acond = cond_checked; acond; acond = (((acond)->u.fld[1]).rtx1))
     simplify_using_condition ((((acond)->u.fld[0]).rtx1), &cond, ((void *)0));
 }
      if (cond == const_true_rtx)
 {
   e = ((bbs[i])->succ->flags & 1 ? (bbs[i])->succ : (bbs[i])->succ->succ_next);
   remove_path (loops, e);
   free (bbs);
   repeat = 1;
 }
      else if (cond == (const_int_rtx[64]))
 {
   e = ((bbs[i])->succ->flags & 1 ? (bbs[i])->succ->succ_next : (bbs[i])->succ);
   remove_path (loops, e);
   free (bbs);
   repeat = 1;
 }
    } while (repeat);
  conds = alloc_EXPR_LIST (0, cond, cond_checked);
  if (rcond)
    rconds = alloc_EXPR_LIST (0, rcond, cond_checked);
  else
    rconds = cond_checked;
  if (dump_file)
    fprintf (dump_file, ";; Unswitching loop\n");
  nloop = unswitch_loop (loops, loop, bbs[i], cond, cinsn);
  if (!nloop)
  fancy_abort ("gcc.c", 401599, "?");
  unswitch_single_loop (loops, nloop, rconds, num + 1);
  unswitch_single_loop (loops, loop, conds, num + 1);
  free_EXPR_LIST_node (conds);
  if (rcond)
    free_EXPR_LIST_node (rconds);
  free (bbs);
}
static struct loop *
unswitch_loop (struct loops *loops, struct loop *loop, basic_block unswitch_on,
        rtx cond, rtx cinsn)
{
  edge entry, latch_edge, true_edge, false_edge, e;
  basic_block switch_bb, unswitch_on_alt, src;
  struct loop *nloop;
  sbitmap zero_bitmap;
  int irred_flag, prob;
  rtx seq;
  if (!flow_bb_inside_loop_p (loop, unswitch_on))
    fancy_abort ("gcc.c", 401632, "?");
  if (!unswitch_on->succ || !unswitch_on->succ->succ_next ||
      unswitch_on->succ->succ_next->succ_next)
    fancy_abort ("gcc.c", 401635, "?");
  if (!just_once_each_iteration_p (loop, unswitch_on))
    fancy_abort ("gcc.c", 401637, "?");
  if (loop->inner)
    fancy_abort ("gcc.c", 401639, "?");
  if (!flow_bb_inside_loop_p (loop, unswitch_on->succ->dest))
    fancy_abort ("gcc.c", 401641, "?");
  if (!flow_bb_inside_loop_p (loop, unswitch_on->succ->succ_next->dest))
    fancy_abort ("gcc.c", 401643, "?");
  entry = loop_preheader_edge (loop);
  src = entry->src;
  irred_flag = entry->flags & 128;
  entry->flags &= ~128;
  zero_bitmap = sbitmap_alloc (2);
  sbitmap_zero (zero_bitmap);
  if (!duplicate_loop_to_header_edge (loop, entry, loops, 1,
 zero_bitmap, ((void *)0), ((void *)0), ((void *)0), 0))
    return ((void *)0);
  free (zero_bitmap);
  entry->flags |= irred_flag;
  unswitch_on_alt = unswitch_on->rbi->copy;
  true_edge = ((unswitch_on_alt)->succ->flags & 1 ? (unswitch_on_alt)->succ->succ_next : (unswitch_on_alt)->succ);
  false_edge = ((unswitch_on)->succ->flags & 1 ? (unswitch_on)->succ : (unswitch_on)->succ->succ_next);
  latch_edge = loop->latch->rbi->copy->succ;
  prob = true_edge->probability;
  switch_bb = create_empty_bb (EXIT_BLOCK_PTR->prev_bb);
  seq = compare_and_jump_seq ((((cond)->u.fld[0]).rtx1), (((cond)->u.fld[1]).rtx1), ((enum rtx_code) (cond)->code),
         block_label (true_edge->dest),
         prob, cinsn);
  emit_insn_after (seq, (switch_bb)->end_);
  e = make_edge (switch_bb, true_edge->dest, 0);
  e->probability = prob;
  e->count = latch_edge->count * prob / 10000;
  e = make_edge (switch_bb, ((unswitch_on)->succ->flags & 1 ? (unswitch_on)->succ : (unswitch_on)->succ->succ_next)->dest, 1);
  e->probability = false_edge->probability;
  e->count = latch_edge->count * (false_edge->probability) / 10000;
  if (irred_flag)
    {
      switch_bb->flags |= 16;
      switch_bb->succ->flags |= 128;
      switch_bb->succ->succ_next->flags |= 128;
    }
  else
    {
      switch_bb->flags &= ~16;
      switch_bb->succ->flags &= ~128;
      switch_bb->succ->succ_next->flags &= ~128;
    }
  nloop = loopify (loops, latch_edge,
     loop->header1->rbi->copy->pred, switch_bb);
  remove_path (loops, true_edge);
  remove_path (loops, false_edge);
  fix_loop_placement (loop);
  fix_loop_placement (nloop);
  loop_split_edge_with (loop_preheader_edge (loop), (rtx) 0);
  loop_split_edge_with (loop_preheader_edge (nloop), (rtx) 0);
  return nloop;
}
static void decide_unrolling_and_peeling (struct loops *, int);
static void peel_loops_completely (struct loops *, int);
static void decide_peel_simple (struct loop *, int);
static void decide_peel_once_rolling (struct loop *, int);
static void decide_peel_completely (struct loop *, int);
static void decide_unroll_stupid (struct loop *, int);
static void decide_unroll_constant_iterations (struct loop *, int);
static void decide_unroll_runtime_iterations (struct loop *, int);
static void peel_loop_simple (struct loops *, struct loop *);
static void peel_loop_completely (struct loops *, struct loop *);
static void unroll_loop_stupid (struct loops *, struct loop *);
static void unroll_loop_constant_iterations (struct loops *, struct loop *);
static void unroll_loop_runtime_iterations (struct loops *, struct loop *);
void
unroll_and_peel_loops (struct loops *loops, int flags)
{
  struct loop *loop, *next;
  unsigned char check;
  peel_loops_completely (loops, flags);
  decide_unrolling_and_peeling (loops, flags);
  loop = loops->tree_root;
  while (loop->inner)
    loop = loop->inner;
  while (loop != loops->tree_root)
    {
      if (loop->next)
 {
   next = loop->next;
   while (next->inner)
     next = next->inner;
 }
      else
 next = loop->outer;
      check = 1;
      switch (loop->lpt_decision.decision)
 {
 case LPT_PEEL_COMPLETELY:
   fancy_abort ("gcc.c", 401817, "?");
 case LPT_PEEL_SIMPLE:
   peel_loop_simple (loops, loop);
   break;
 case LPT_UNROLL_CONSTANT:
   unroll_loop_constant_iterations (loops, loop);
   break;
 case LPT_UNROLL_RUNTIME:
   unroll_loop_runtime_iterations (loops, loop);
   break;
 case LPT_UNROLL_STUPID:
   unroll_loop_stupid (loops, loop);
   break;
 case LPT_NONE:
   check = 0;
   break;
 default:
   fancy_abort ("gcc.c", 401834, "?");
 }
      if (check)
 {
 }
      loop = next;
    }
  iv_analysis_done ();
}
static unsigned char
loop_exit_at_end_p (struct loop *loop)
{
  struct niter_desc *desc = get_simple_loop_desc (loop);
  rtx insn;
  if (desc->in_edge->dest != loop->latch)
    return 0;
  for ((insn) = (loop->latch)->head_; (insn) != ((((loop->latch)->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 return 0;
    }
  return 1;
}
static void
peel_loops_completely (struct loops *loops, int flags)
{
  struct loop *loop, *next;
  loop = loops->tree_root;
  while (loop->inner)
    loop = loop->inner;
  while (loop != loops->tree_root)
    {
      if (loop->next)
 {
   next = loop->next;
   while (next->inner)
     next = next->inner;
 }
      else
 next = loop->outer;
      loop->lpt_decision.decision = LPT_NONE;
      if (dump_file)
 fprintf (dump_file,
   "\n;; *** Considering loop %d for complete peeling ***\n",
   loop->num);
      loop->ninsns = num_loop_insns (loop);
      decide_peel_once_rolling (loop, flags);
      if (loop->lpt_decision.decision == LPT_NONE)
 decide_peel_completely (loop, flags);
      if (loop->lpt_decision.decision == LPT_PEEL_COMPLETELY)
 {
   peel_loop_completely (loops, loop);
 }
      loop = next;
    }
}
static void
decide_unrolling_and_peeling (struct loops *loops, int flags)
{
  struct loop *loop = loops->tree_root, *next;
  while (loop->inner)
    loop = loop->inner;
  while (loop != loops->tree_root)
    {
      if (loop->next)
 {
   next = loop->next;
   while (next->inner)
     next = next->inner;
 }
      else
 next = loop->outer;
      loop->lpt_decision.decision = LPT_NONE;
      if (dump_file)
 fprintf (dump_file, "\n;; *** Considering loop %d ***\n", loop->num);
      if (!maybe_hot_bb_p (loop->header1))
 {
   if (dump_file)
     fprintf (dump_file, ";; Not considering loop, cold area\n");
   loop = next;
   continue;
 }
      if (!can_duplicate_loop_p (loop))
 {
   if (dump_file)
     fprintf (dump_file,
       ";; Not considering loop, cannot duplicate\n");
   loop = next;
   continue;
 }
      if (loop->inner)
 {
   if (dump_file)
     fprintf (dump_file, ";; Not considering loop, is not innermost\n");
   loop = next;
   continue;
 }
      loop->ninsns = num_loop_insns (loop);
      loop->av_ninsns = average_num_loop_insns (loop);
      decide_unroll_constant_iterations (loop, flags);
      if (loop->lpt_decision.decision == LPT_NONE)
 decide_unroll_runtime_iterations (loop, flags);
      if (loop->lpt_decision.decision == LPT_NONE)
 decide_unroll_stupid (loop, flags);
      if (loop->lpt_decision.decision == LPT_NONE)
 decide_peel_simple (loop, flags);
      loop = next;
    }
}
static void
decide_peel_once_rolling (struct loop *loop, int flags )
{
  struct niter_desc *desc;
  if (dump_file)
    fprintf (dump_file, "\n;; Considering peeling once rolling loop\n");
  if ((unsigned) (compiler_params[(int) PARAM_MAX_ONCE_PEELED_INSNS].value1) < loop->ninsns)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not considering loop, is too big\n");
      return;
    }
  desc = get_simple_loop_desc (loop);
  if (!desc->simple_p
      || desc->assumptions
      || !desc->const_iter
      || desc->niter != 0)
    {
      if (dump_file)
 fprintf (dump_file,
   ";; Unable to prove that the loop rolls exactly once\n");
      return;
    }
  if (dump_file)
    fprintf (dump_file, ";; Decided to peel exactly once rolling loop\n");
  loop->lpt_decision.decision = LPT_PEEL_COMPLETELY;
}
static void
decide_peel_completely (struct loop *loop, int flags )
{
  unsigned npeel;
  struct niter_desc *desc;
  if (dump_file)
    fprintf (dump_file, "\n;; Considering peeling completely\n");
  if (loop->inner)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not considering loop, is not innermost\n");
      return;
    }
  if (!maybe_hot_bb_p (loop->header1))
    {
      if (dump_file)
 fprintf (dump_file, ";; Not considering loop, cold area\n");
      return;
    }
  if (!can_duplicate_loop_p (loop))
    {
      if (dump_file)
 fprintf (dump_file,
   ";; Not considering loop, cannot duplicate\n");
      return;
    }
  npeel = (compiler_params[(int) PARAM_MAX_COMPLETELY_PEELED_INSNS].value1) / loop->ninsns;
  if (npeel > (unsigned) (compiler_params[(int) PARAM_MAX_COMPLETELY_PEEL_TIMES].value1))
    npeel = (compiler_params[(int) PARAM_MAX_COMPLETELY_PEEL_TIMES].value1);
  if (!npeel)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not considering loop, is too big\n");
      return;
    }
  desc = get_simple_loop_desc (loop);
  if (!desc->simple_p
      || desc->assumptions
      || !desc->const_iter)
    {
      if (dump_file)
 fprintf (dump_file,
   ";; Unable to prove that the loop iterates constant times\n");
      return;
    }
  if (desc->niter > npeel - 1)
    {
      if (dump_file)
 {
   fprintf (dump_file,
     ";; Not peeling loop completely, rolls too much (");
   fprintf (dump_file, "%lld", desc->niter);
   fprintf (dump_file, " iterations > %d [maximum peelings])\n", npeel);
 }
      return;
    }
  if (dump_file)
    fprintf (dump_file, ";; Decided to peel loop completely\n");
  loop->lpt_decision.decision = LPT_PEEL_COMPLETELY;
}
static void
peel_loop_completely (struct loops *loops, struct loop *loop)
{
  sbitmap wont_exit;
  unsigned long npeel;
  unsigned n_remove_edges, i;
  edge *remove_edges, ei;
  struct niter_desc *desc = get_simple_loop_desc (loop);
  npeel = desc->niter;
  if (npeel)
    {
      wont_exit = sbitmap_alloc (npeel + 1);
      sbitmap_ones (wont_exit);
      ((wont_exit)->elms [(0) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (0) % ((unsigned) (8 * 4))));
      if (desc->noloop_assumptions)
 ((wont_exit)->elms [(1) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (1) % ((unsigned) (8 * 4))));
      remove_edges = xcalloc (npeel, sizeof (edge));
      n_remove_edges = 0;
      if (!duplicate_loop_to_header_edge (loop, loop_preheader_edge (loop),
  loops, npeel,
  wont_exit, desc->out_edge, remove_edges, &n_remove_edges,
  1))
 fancy_abort ("gcc.c", 402147, "?");
      free (wont_exit);
      for (i = 0; i < n_remove_edges; i++)
 remove_path (loops, remove_edges[i]);
      free (remove_edges);
    }
  ei = desc->in_edge;
  free_simple_loop_desc (loop);
  remove_path (loops, ei);
  if (dump_file)
    fprintf (dump_file, ";; Peeled loop completely, %d times\n", (int) npeel);
}
static void
decide_unroll_constant_iterations (struct loop *loop, int flags)
{
  unsigned nunroll, nunroll_by_av, best_copies, best_unroll = 0, n_copies, i;
  struct niter_desc *desc;
  if (!(flags & UAP_UNROLL))
    {
      return;
    }
  if (dump_file)
    fprintf (dump_file,
      "\n;; Considering unrolling loop with constant number of iterations\n");
  nunroll = (compiler_params[(int) PARAM_MAX_UNROLLED_INSNS].value1) / loop->ninsns;
  nunroll_by_av
    = (compiler_params[(int) PARAM_MAX_AVERAGE_UNROLLED_INSNS].value1) / loop->av_ninsns;
  if (nunroll > nunroll_by_av)
    nunroll = nunroll_by_av;
  if (nunroll > (unsigned) (compiler_params[(int) PARAM_MAX_UNROLL_TIMES].value1))
    nunroll = (compiler_params[(int) PARAM_MAX_UNROLL_TIMES].value1);
  if (nunroll <= 1)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not considering loop, is too big\n");
      return;
    }
  desc = get_simple_loop_desc (loop);
  if (!desc->simple_p || !desc->const_iter || desc->assumptions)
    {
      if (dump_file)
 fprintf (dump_file,
   ";; Unable to prove that the loop iterates constant times\n");
      return;
    }
  if (desc->niter < 2 * nunroll)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not unrolling loop, doesn't roll\n");
      return;
    }
  best_copies = 2 * nunroll + 10;
  i = 2 * nunroll + 2;
  if (i - 1 >= desc->niter)
    i = desc->niter - 2;
  for (; i >= nunroll - 1; i--)
    {
      unsigned exit_mod = desc->niter % (i + 1);
      if (!loop_exit_at_end_p (loop))
 n_copies = exit_mod + i + 1;
      else if (exit_mod != (unsigned) i
        || desc->noloop_assumptions != (rtx) 0)
 n_copies = exit_mod + i + 2;
      else
 n_copies = i + 1;
      if (n_copies < best_copies)
 {
   best_copies = n_copies;
   best_unroll = i;
 }
    }
  if (dump_file)
    fprintf (dump_file, ";; max_unroll %d (%d copies, initial %d).\n",
      best_unroll + 1, best_copies, nunroll);
  loop->lpt_decision.decision = LPT_UNROLL_CONSTANT;
  loop->lpt_decision.times = best_unroll;
  if (dump_file)
    fprintf (dump_file,
      ";; Decided to unroll the constant times rolling loop, %d times.\n",
      loop->lpt_decision.times);
}
static void
unroll_loop_constant_iterations (struct loops *loops, struct loop *loop)
{
  unsigned long niter;
  unsigned exit_mod;
  sbitmap wont_exit;
  unsigned n_remove_edges, i;
  edge *remove_edges;
  unsigned max_unroll = loop->lpt_decision.times;
  struct niter_desc *desc = get_simple_loop_desc (loop);
  unsigned char exit_at_end = loop_exit_at_end_p (loop);
  niter = desc->niter;
  if (niter <= max_unroll + 1)
    fancy_abort ("gcc.c", 402302, "?");
  exit_mod = niter % (max_unroll + 1);
  wont_exit = sbitmap_alloc (max_unroll + 1);
  sbitmap_ones (wont_exit);
  remove_edges = xcalloc (max_unroll + exit_mod + 1, sizeof (edge));
  n_remove_edges = 0;
  if (!exit_at_end)
    {
      if (dump_file)
 fprintf (dump_file, ";; Condition on beginning of loop.\n");
      ((wont_exit)->elms [(0) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (0) % ((unsigned) (8 * 4))));
      if (desc->noloop_assumptions)
 ((wont_exit)->elms [(1) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (1) % ((unsigned) (8 * 4))));
      if (exit_mod)
 {
   if (!duplicate_loop_to_header_edge (loop, loop_preheader_edge (loop),
           loops, exit_mod,
           wont_exit, desc->out_edge,
           remove_edges, &n_remove_edges,
           1))
     fancy_abort ("gcc.c", 402333, "?");
   desc->noloop_assumptions = (rtx) 0;
   desc->niter -= exit_mod;
   desc->niter_max -= exit_mod;
 }
      ((wont_exit)->elms [(1) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (1) % ((unsigned) (8 * 4)));
    }
  else
    {
      if (dump_file)
 fprintf (dump_file, ";; Condition on end of loop.\n");
      if (exit_mod != max_unroll
   || desc->noloop_assumptions)
 {
   ((wont_exit)->elms [(0) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (0) % ((unsigned) (8 * 4))));
   if (desc->noloop_assumptions)
     ((wont_exit)->elms [(1) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (1) % ((unsigned) (8 * 4))));
   if (!duplicate_loop_to_header_edge (loop, loop_preheader_edge (loop),
  loops, exit_mod + 1,
  wont_exit, desc->out_edge, remove_edges, &n_remove_edges,
  1))
     fancy_abort ("gcc.c", 402364, "?");
   desc->niter -= exit_mod + 1;
   desc->niter_max -= exit_mod + 1;
   desc->noloop_assumptions = (rtx) 0;
   ((wont_exit)->elms [(0) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (0) % ((unsigned) (8 * 4)));
   ((wont_exit)->elms [(1) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (1) % ((unsigned) (8 * 4)));
 }
      ((wont_exit)->elms [(max_unroll) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (max_unroll) % ((unsigned) (8 * 4))));
    }
  if (!duplicate_loop_to_header_edge (loop, loop_latch_edge (loop),
  loops, max_unroll,
  wont_exit, desc->out_edge, remove_edges, &n_remove_edges,
  1))
    fancy_abort ("gcc.c", 402382, "?");
  free (wont_exit);
  if (exit_at_end)
    {
      basic_block exit_block = desc->in_edge->src->rbi->copy;
      if (exit_block->succ->dest == desc->out_edge->dest)
 {
   desc->out_edge = exit_block->succ;
   desc->in_edge = exit_block->succ->succ_next;
 }
      else
 {
   desc->out_edge = exit_block->succ->succ_next;
   desc->in_edge = exit_block->succ;
 }
    }
  desc->niter /= max_unroll + 1;
  desc->niter_max /= max_unroll + 1;
  desc->niter_expr = gen_rtx_CONST_INT (VOIDmode, (long) (desc->niter));
  for (i = 0; i < n_remove_edges; i++)
    remove_path (loops, remove_edges[i]);
  free (remove_edges);
  if (dump_file)
    fprintf (dump_file,
      ";; Unrolled loop %d times, constant # of iterations %i insns\n",
      max_unroll, num_loop_insns (loop));
}
static void
decide_unroll_runtime_iterations (struct loop *loop, int flags)
{
  unsigned nunroll, nunroll_by_av, i;
  struct niter_desc *desc;
  if (!(flags & UAP_UNROLL))
    {
      return;
    }
  if (dump_file)
    fprintf (dump_file,
      "\n;; Considering unrolling loop with runtime computable number of iterations\n");
  nunroll = (compiler_params[(int) PARAM_MAX_UNROLLED_INSNS].value1) / loop->ninsns;
  nunroll_by_av = (compiler_params[(int) PARAM_MAX_AVERAGE_UNROLLED_INSNS].value1) / loop->av_ninsns;
  if (nunroll > nunroll_by_av)
    nunroll = nunroll_by_av;
  if (nunroll > (unsigned) (compiler_params[(int) PARAM_MAX_UNROLL_TIMES].value1))
    nunroll = (compiler_params[(int) PARAM_MAX_UNROLL_TIMES].value1);
  if (nunroll <= 1)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not considering loop, is too big\n");
      return;
    }
  desc = get_simple_loop_desc (loop);
  if (!desc->simple_p || desc->assumptions)
    {
      if (dump_file)
 fprintf (dump_file,
   ";; Unable to prove that the number of iterations can be counted in runtime\n");
      return;
    }
  if (desc->const_iter)
    {
      if (dump_file)
 fprintf (dump_file, ";; Loop iterates constant times\n");
      return;
    }
  if (loop->header1->count && expected_loop_iterations (loop) < 2 * nunroll)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not unrolling loop, doesn't roll\n");
      return;
    }
  for (i = 1; 2 * i <= nunroll; i *= 2)
    continue;
  loop->lpt_decision.decision = LPT_UNROLL_RUNTIME;
  loop->lpt_decision.times = i - 1;
  if (dump_file)
    fprintf (dump_file,
      ";; Decided to unroll the runtime computable times rolling loop, %d times.\n",
      loop->lpt_decision.times);
}
static void
unroll_loop_runtime_iterations (struct loops *loops, struct loop *loop)
{
  rtx old_niter, niter, init_code, branch_code, tmp;
  unsigned i, j, p;
  basic_block preheader, *body, *dom_bbs, swtch, ezc_swtch;
  unsigned n_dom_bbs;
  sbitmap wont_exit;
  int may_exit_copy;
  unsigned n_peel, n_remove_edges;
  edge *remove_edges, e;
  unsigned char extra_zero_check, last_may_exit;
  unsigned max_unroll = loop->lpt_decision.times;
  struct niter_desc *desc = get_simple_loop_desc (loop);
  unsigned char exit_at_end = loop_exit_at_end_p (loop);
  dom_bbs = xcalloc (n_basic_blocks, sizeof (basic_block));
  n_dom_bbs = 0;
  body = get_loop_body (loop);
  for (i = 0; i < loop->num_nodes; i++)
    {
      unsigned nldom;
      basic_block *ldom;
      nldom = get_dominated_by (CDI_DOMINATORS, body[i], &ldom);
      for (j = 0; j < nldom; j++)
 if (!flow_bb_inside_loop_p (loop, ldom[j]))
   dom_bbs[n_dom_bbs++] = ldom[j];
      free (ldom);
    }
  free (body);
  if (!exit_at_end)
    {
      may_exit_copy = 0;
      n_peel = max_unroll - 1;
      extra_zero_check = 1;
      last_may_exit = 0;
    }
  else
    {
      may_exit_copy = max_unroll;
      n_peel = max_unroll;
      extra_zero_check = 0;
      last_may_exit = 1;
    }
  start_sequence ();
  old_niter = niter = gen_reg_rtx (desc->mode);
  tmp = force_operand (copy_rtx (desc->niter_expr), niter);
  if (tmp != niter)
    emit_move_insn (niter, tmp);
  niter = expand_simple_binop (desc->mode, AND,
          niter,
          gen_rtx_CONST_INT (VOIDmode, (long) (max_unroll)),
          (rtx) 0, 0, OPTAB_LIB_WIDEN);
  init_code = get_insns ();
  end_sequence ();
  loop_split_edge_with (loop_preheader_edge (loop), init_code);
  remove_edges = xcalloc (max_unroll + n_peel + 1, sizeof (edge));
  n_remove_edges = 0;
  wont_exit = sbitmap_alloc (max_unroll + 2);
  sbitmap_zero (wont_exit);
  if (extra_zero_check
      && !desc->noloop_assumptions)
    ((wont_exit)->elms [(1) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (1) % ((unsigned) (8 * 4)));
  ezc_swtch = loop_preheader_edge (loop)->src;
  if (!duplicate_loop_to_header_edge (loop, loop_preheader_edge (loop),
  loops, 1,
  wont_exit, desc->out_edge, remove_edges, &n_remove_edges,
  1))
    fancy_abort ("gcc.c", 402621, "?");
  swtch = loop_split_edge_with (loop_preheader_edge (loop),
    (rtx) 0);
  for (i = 0; i < n_peel; i++)
    {
      sbitmap_zero (wont_exit);
      if (i != n_peel - 1 || !last_may_exit)
 ((wont_exit)->elms [(1) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (1) % ((unsigned) (8 * 4)));
      if (!duplicate_loop_to_header_edge (loop, loop_preheader_edge (loop),
  loops, 1,
  wont_exit, desc->out_edge, remove_edges, &n_remove_edges,
  1))
 fancy_abort ("gcc.c", 402637, "?");
      j = n_peel - i - (extra_zero_check ? 0 : 1);
      p = 10000 / (i + 2);
      preheader = loop_split_edge_with (loop_preheader_edge (loop), (rtx) 0);
      branch_code = compare_and_jump_seq (copy_rtx (niter), gen_rtx_CONST_INT (VOIDmode, (long) (j)), EQ,
       block_label (preheader), p, (rtx) 0);
      swtch = loop_split_edge_with (swtch->pred, branch_code);
      set_immediate_dominator (CDI_DOMINATORS, preheader, swtch);
      swtch->succ->probability = 10000 - p;
      e = make_edge (swtch, preheader,
       swtch->succ->flags & 128);
      e->probability = p;
    }
  if (extra_zero_check)
    {
      p = 10000 / (max_unroll + 1);
      swtch = ezc_swtch;
      preheader = loop_split_edge_with (loop_preheader_edge (loop), (rtx) 0);
      branch_code = compare_and_jump_seq (copy_rtx (niter), (const_int_rtx[64]), EQ,
       block_label (preheader), p, (rtx) 0);
      swtch = loop_split_edge_with (swtch->succ, branch_code);
      set_immediate_dominator (CDI_DOMINATORS, preheader, swtch);
      swtch->succ->probability = 10000 - p;
      e = make_edge (swtch, preheader,
       swtch->succ->flags & 128);
      e->probability = p;
    }
  iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, n_dom_bbs);
  sbitmap_ones (wont_exit);
  ((wont_exit)->elms [(may_exit_copy) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (may_exit_copy) % ((unsigned) (8 * 4))));
  if (!duplicate_loop_to_header_edge (loop, loop_latch_edge (loop),
  loops, max_unroll,
  wont_exit, desc->out_edge, remove_edges, &n_remove_edges,
  1))
    fancy_abort ("gcc.c", 402684, "?");
  free (wont_exit);
  if (exit_at_end)
    {
      basic_block exit_block = desc->in_edge->src->rbi->copy;
      if (exit_block->succ->dest == desc->out_edge->dest)
 {
   desc->out_edge = exit_block->succ;
   desc->in_edge = exit_block->succ->succ_next;
 }
      else
 {
   desc->out_edge = exit_block->succ->succ_next;
   desc->in_edge = exit_block->succ;
 }
    }
  for (i = 0; i < n_remove_edges; i++)
    remove_path (loops, remove_edges[i]);
  free (remove_edges);
  if (desc->const_iter)
    fancy_abort ("gcc.c", 402715, "?");
  desc->niter_expr =
    simplify_gen_binary (UDIV, desc->mode, old_niter, gen_rtx_CONST_INT (VOIDmode, (long) (max_unroll + 1)));
  desc->niter_max /= max_unroll + 1;
  if (exit_at_end)
    {
      desc->niter_expr =
 simplify_gen_binary (MINUS, desc->mode, desc->niter_expr, (const_int_rtx[64 +1]));
      desc->noloop_assumptions = (rtx) 0;
      desc->niter_max--;
    }
  if (dump_file)
    fprintf (dump_file,
      ";; Unrolled loop %d times, counting # of iterations in runtime, %i insns\n",
      max_unroll, num_loop_insns (loop));
}
static void
decide_peel_simple (struct loop *loop, int flags)
{
  unsigned npeel;
  struct niter_desc *desc;
  if (!(flags & UAP_PEEL))
    {
      return;
    }
  if (dump_file)
    fprintf (dump_file, "\n;; Considering simply peeling loop\n");
  npeel = (compiler_params[(int) PARAM_MAX_PEELED_INSNS].value1) / loop->ninsns;
  if (npeel > (unsigned) (compiler_params[(int) PARAM_MAX_PEEL_TIMES].value1))
    npeel = (compiler_params[(int) PARAM_MAX_PEEL_TIMES].value1);
  if (!npeel)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not considering loop, is too big\n");
      return;
    }
  desc = get_simple_loop_desc (loop);
  if (desc->simple_p && !desc->assumptions && desc->const_iter)
    {
      if (dump_file)
 fprintf (dump_file, ";; Loop iterates constant times\n");
      return;
    }
  if (num_loop_branches (loop) > 1)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not peeling, contains branches\n");
      return;
    }
  if (loop->header1->count)
    {
      unsigned niter = expected_loop_iterations (loop);
      if (niter + 1 > npeel)
 {
   if (dump_file)
     {
       fprintf (dump_file, ";; Not peeling loop, rolls too much (");
       fprintf (dump_file, "%lld",
         (long long) (niter + 1));
       fprintf (dump_file, " iterations > %d [maximum peelings])\n",
         npeel);
     }
   return;
 }
      npeel = niter + 1;
    }
  else
    {
      if (dump_file)
 fprintf (dump_file,
   ";; Not peeling loop, no evidence it will be profitable\n");
      return;
    }
  loop->lpt_decision.decision = LPT_PEEL_SIMPLE;
  loop->lpt_decision.times = npeel;
  if (dump_file)
    fprintf (dump_file, ";; Decided to simply peel the loop, %d times.\n",
      loop->lpt_decision.times);
}
static void
peel_loop_simple (struct loops *loops, struct loop *loop)
{
  sbitmap wont_exit;
  unsigned npeel = loop->lpt_decision.times;
  struct niter_desc *desc = get_simple_loop_desc (loop);
  wont_exit = sbitmap_alloc (npeel + 1);
  sbitmap_zero (wont_exit);
  if (!duplicate_loop_to_header_edge (loop, loop_preheader_edge (loop),
  loops, npeel, wont_exit, ((void *)0), ((void *)0), ((void *)0),
  1))
    fancy_abort ("gcc.c", 402846, "?");
  free (wont_exit);
  if (desc->simple_p)
    {
      if (desc->const_iter)
 {
   desc->niter -= npeel;
   desc->niter_expr = gen_rtx_CONST_INT (VOIDmode, (long) (desc->niter));
   desc->noloop_assumptions = (rtx) 0;
 }
      else
 {
   free_simple_loop_desc (loop);
 }
    }
  if (dump_file)
    fprintf (dump_file, ";; Peeling loop %d times\n", npeel);
}
static void
decide_unroll_stupid (struct loop *loop, int flags)
{
  unsigned nunroll, nunroll_by_av, i;
  struct niter_desc *desc;
  if (!(flags & UAP_UNROLL_ALL))
    {
      return;
    }
  if (dump_file)
    fprintf (dump_file, "\n;; Considering unrolling loop stupidly\n");
  nunroll = (compiler_params[(int) PARAM_MAX_UNROLLED_INSNS].value1) / loop->ninsns;
  nunroll_by_av
    = (compiler_params[(int) PARAM_MAX_AVERAGE_UNROLLED_INSNS].value1) / loop->av_ninsns;
  if (nunroll > nunroll_by_av)
    nunroll = nunroll_by_av;
  if (nunroll > (unsigned) (compiler_params[(int) PARAM_MAX_UNROLL_TIMES].value1))
    nunroll = (compiler_params[(int) PARAM_MAX_UNROLL_TIMES].value1);
  if (nunroll <= 1)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not considering loop, is too big\n");
      return;
    }
  desc = get_simple_loop_desc (loop);
  if (desc->simple_p && !desc->assumptions)
    {
      if (dump_file)
 fprintf (dump_file, ";; The loop is simple\n");
      return;
    }
  if (num_loop_branches (loop) > 1)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not unrolling, contains branches\n");
      return;
    }
  if (loop->header1->count
      && expected_loop_iterations (loop) < 2 * nunroll)
    {
      if (dump_file)
 fprintf (dump_file, ";; Not unrolling loop, doesn't roll\n");
      return;
    }
  for (i = 1; 2 * i <= nunroll; i *= 2)
    continue;
  loop->lpt_decision.decision = LPT_UNROLL_STUPID;
  loop->lpt_decision.times = i - 1;
  if (dump_file)
    fprintf (dump_file,
      ";; Decided to unroll the loop stupidly, %d times.\n",
      loop->lpt_decision.times);
}
static void
unroll_loop_stupid (struct loops *loops, struct loop *loop)
{
  sbitmap wont_exit;
  unsigned nunroll = loop->lpt_decision.times;
  struct niter_desc *desc = get_simple_loop_desc (loop);
  wont_exit = sbitmap_alloc (nunroll + 1);
  sbitmap_zero (wont_exit);
  if (!duplicate_loop_to_header_edge (loop, loop_latch_edge (loop),
  loops, nunroll, wont_exit, ((void *)0), ((void *)0), ((void *)0),
  1))
    fancy_abort ("gcc.c", 402979, "?");
  free (wont_exit);
  if (desc->simple_p)
    {
      desc->simple_p = 0;
    }
  if (dump_file)
    fprintf (dump_file, ";; Unrolled loop %d times, %i insns\n",
      nunroll, num_loop_insns (loop));
}
rtx label_value_list;
static int can_delete_note_p (rtx);
static int can_delete_label_p (rtx);
static void commit_one_edge_insertion (edge, int);
static rtx last_loop_beg_note (rtx);
static unsigned char back_edge_of_syntactic_loop_p (basic_block, basic_block);
basic_block force_nonfallthru_and_redirect (edge, basic_block);
static basic_block rtl_split_edge (edge);
static unsigned char rtl_move_block_after (basic_block, basic_block);
static int rtl_verify_flow_info (void);
static basic_block cfg_layout_split_block (basic_block, void *);
static edge cfg_layout_redirect_edge_and_branch (edge, basic_block);
static basic_block cfg_layout_redirect_edge_and_branch_force (edge, basic_block);
static void cfg_layout_delete_block (basic_block);
static void rtl_delete_block (basic_block);
static basic_block rtl_redirect_edge_and_branch_force (edge, basic_block);
static edge rtl_redirect_edge_and_branch (edge, basic_block);
static basic_block rtl_split_block (basic_block, void *);
static void rtl_dump_bb (basic_block, FILE *, int);
static int rtl_verify_flow_info_1 (void);
static void mark_killed_regs (rtx, rtx, void *);
static void rtl_make_forwarder_block (edge);
static int
can_delete_note_p (rtx note)
{
  return ((((note)->u.fld[5]).rtint) == NOTE_INSN_DELETED
   || (((note)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK
   || (((note)->u.fld[5]).rtint) == NOTE_INSN_UNLIKELY_EXECUTED_CODE
   || (((note)->u.fld[5]).rtint) == NOTE_INSN_PREDICTION);
}
static int
can_delete_label_p (rtx label)
{
  return (!(((label))->in_struct)
   && (((label)->u.fld[7]).rtstr) == 0
   && !in_expr_list_p ((cfun->expr->x_forced_labels), label)
   && !in_expr_list_p (label_value_list, label));
}
rtx
delete_insn (rtx insn)
{
  rtx next = (((insn)->u.fld[2]).rtx1);
  rtx note;
  unsigned char really_delete = 1;
  if (((enum rtx_code) (insn)->code) == CODE_LABEL)
    {
      if (! can_delete_label_p (insn))
 {
   const char *name = (((insn)->u.fld[7]).rtstr);
   really_delete = 0;
   ((insn)->code = (NOTE));
   (((insn)->u.fld[5]).rtint) = NOTE_INSN_DELETED_LABEL;
   (((insn)->u.fld[4]).rtstr) = name;
 }
      remove_node_from_expr_list (insn, &(cfun->x_nonlocal_goto_handler_labels));
    }
  if (really_delete)
    {
      if ((((insn))->volatil))
 fancy_abort ("gcc.c", 403121, "?");
      remove_insn (insn);
      (((insn))->volatil) = 1;
    }
  if (((enum rtx_code) (insn)->code) == JUMP_INSN
      && (((insn)->u.fld[9]).rtx1)
      && ((enum rtx_code) ((((insn)->u.fld[9]).rtx1))->code) == CODE_LABEL)
    ((((((insn)->u.fld[9]).rtx1))->u.fld[4]).rtint)--;
  else
    {
      while ((note = find_reg_note (insn, REG_LABEL, (rtx) 0)) != (rtx) 0
      && ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == CODE_LABEL)
 {
   ((((((note)->u.fld[0]).rtx1))->u.fld[4]).rtint)--;
   remove_note (insn, note);
 }
    }
  if (((enum rtx_code) (insn)->code) == JUMP_INSN
      && (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_VEC
   || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC))
    {
      rtx pat = (((insn)->u.fld[5]).rtx1);
      int diff_vec_p = ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC;
      int len = (((((pat)->u.fld[diff_vec_p]).rtvec1))->num_elem);
      int i;
      for (i = 0; i < len; i++)
 {
   rtx label = ((((((((pat)->u.fld[diff_vec_p]).rtvec1))->elem[i]))->u.fld[0]).rtx1);
   if (((enum rtx_code) (label)->code) != NOTE)
     (((label)->u.fld[4]).rtint)--;
 }
    }
  return next;
}
rtx
delete_insn_and_edges (rtx insn)
{
  rtx x;
  unsigned char purge = 0;
  if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
      && (((insn)->u.fld[3]).bb)
      && ((((insn)->u.fld[3]).bb))->end_ == insn)
    purge = 1;
  x = delete_insn (insn);
  if (purge)
    purge_dead_edges ((((insn)->u.fld[3]).bb));
  return x;
}
void
delete_insn_chain (rtx start, rtx finish)
{
  rtx next;
  while (1)
    {
      next = (((start)->u.fld[2]).rtx1);
      if (((enum rtx_code) (start)->code) == NOTE && !can_delete_note_p (start))
 ;
      else
 next = delete_insn (start);
      if (start == finish)
 break;
      start = next;
    }
}
void
delete_insn_chain_and_edges (rtx first, rtx last)
{
  unsigned char purge = 0;
  if (((((enum rtx_code) (last)->code) == INSN) || (((enum rtx_code) (last)->code) == JUMP_INSN) || (((enum rtx_code) (last)->code) == CALL_INSN))
      && (((last)->u.fld[3]).bb)
      && ((((last)->u.fld[3]).bb))->end_ == last)
    purge = 1;
  delete_insn_chain (first, last);
  if (purge)
    purge_dead_edges ((((last)->u.fld[3]).bb));
}
basic_block
create_basic_block_structure (rtx head, rtx end, rtx bb_note, basic_block after)
{
  basic_block bb;
  if (bb_note
      && (bb = (((bb_note)->u.fld[4]).bb)) != ((void *)0)
      && bb->aux == ((void *)0))
    {
      rtx after;
      if (((enum rtx_code) (head)->code) == CODE_LABEL)
 after = head;
      else
 {
   after = (((head)->u.fld[1]).rtx1);
   head = bb_note;
 }
      if (after != bb_note && (((after)->u.fld[2]).rtx1) != bb_note)
 reorder_insns_nobb (bb_note, bb_note, after);
    }
  else
    {
      bb = alloc_block ();
      if (!head && !end)
 head = end = bb_note
   = emit_note_after (NOTE_INSN_BASIC_BLOCK, get_last_insn ());
      else if (((enum rtx_code) (head)->code) == CODE_LABEL && end)
 {
   bb_note = emit_note_after (NOTE_INSN_BASIC_BLOCK, head);
   if (head == end)
     end = bb_note;
 }
      else
 {
   bb_note = emit_note_before (NOTE_INSN_BASIC_BLOCK, head);
   head = bb_note;
   if (!end)
     end = head;
 }
      (((bb_note)->u.fld[4]).bb) = bb;
    }
  if ((((end)->u.fld[2]).rtx1) == bb_note)
    end = bb_note;
  (bb)->head_ = head;
  (bb)->end_ = end;
  bb->index = last_basic_block++;
  bb->flags = 2;
  link_block (bb, after);
  (((basic_block_info)->data.bb[(bb->index)])) = bb;
  update_bb_for_insn (bb);
  bb->partition1 = 0;
  bb->aux = bb;
  return bb;
}
static basic_block
rtl_create_basic_block (void *headp, void *endp, basic_block after)
{
  rtx head = headp, end = endp;
  basic_block bb;
  if ((size_t) last_basic_block >= ((basic_block_info)->num_elements))
    {
      size_t new_size = last_basic_block + (last_basic_block + 3) / 4;
      ((basic_block_info) = varray_grow (basic_block_info, new_size));
    }
  n_basic_blocks++;
  bb = create_basic_block_structure (head, end, ((void *)0), after);
  bb->aux = ((void *)0);
  return bb;
}
static basic_block
cfg_layout_create_basic_block (void *head, void *end, basic_block after)
{
  basic_block newbb = rtl_create_basic_block (head, end, after);
  initialize_bb_rbi (newbb);
  return newbb;
}
static void
rtl_delete_block (basic_block b)
{
  rtx insn, end, tmp;
  for (insn = ((((b)->head_)->u.fld[1]).rtx1); insn; insn = (((insn)->u.fld[1]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) != NOTE)
 break;
      if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_PREDICTION
   || (((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_CONT)
 (((insn)->u.fld[5]).rtint) = NOTE_INSN_DELETED;
    }
  insn = (b)->head_;
  if (((enum rtx_code) (insn)->code) == CODE_LABEL)
    maybe_remove_eh_handler (insn);
  end = (b)->end_;
  if (tablejump_p (end, ((void *)0), &tmp))
    end = tmp;
  tmp = next_nonnote_insn (end);
  if (tmp && ((enum rtx_code) (tmp)->code) == BARRIER)
    end = tmp;
  (b)->head_ = ((void *)0);
  delete_insn_chain (insn, end);
}
void
compute_bb_for_insn (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      rtx end = (bb)->end_;
      rtx insn;
      for (insn = (bb)->head_; ; insn = (((insn)->u.fld[2]).rtx1))
 {
   (((insn)->u.fld[3]).bb) = bb;
   if (insn == end)
     break;
 }
    }
}
void
free_bb_for_insn (void)
{
  rtx insn;
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((enum rtx_code) (insn)->code) != BARRIER)
      (((insn)->u.fld[3]).bb) = ((void *)0);
}
rtx
entry_of_function (void)
{
  return (n_basic_blocks ? (ENTRY_BLOCK_PTR->next_bb)->head_ : get_insns ());
}
void
update_bb_for_insn (basic_block bb)
{
  rtx insn;
  for (insn = (bb)->head_; ; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) != BARRIER)
 ((((insn)->u.fld[3]).bb) = bb);
      if (insn == (bb)->end_)
 break;
    }
}
static basic_block
rtl_split_block (basic_block bb, void *insnp)
{
  basic_block new_bb;
  rtx insn = insnp;
  edge e;
  if (!insn)
    {
      insn = first_insn_after_basic_block_note (bb);
      if (insn)
 insn = (((insn)->u.fld[1]).rtx1);
      else
 insn = get_last_insn ();
    }
  if (insn == (bb)->end_)
    emit_note_after (NOTE_INSN_DELETED, insn);
  new_bb = create_basic_block ((((insn)->u.fld[2]).rtx1), (bb)->end_, bb);
  (bb)->end_ = insn;
  new_bb->succ = bb->succ;
  bb->succ = ((void *)0);
  for (e = new_bb->succ; e; e = e->succ_next)
    e->src = new_bb;
  if (bb->global_live_at_start)
    {
      new_bb->global_live_at_start = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
      new_bb->global_live_at_end = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
      bitmap_copy (new_bb->global_live_at_end, bb->global_live_at_end);
      bitmap_copy (new_bb->global_live_at_start, bb->global_live_at_end);
      propagate_block (new_bb, new_bb->global_live_at_start, ((void *)0), ((void *)0), 0);
      bitmap_copy (bb->global_live_at_end, new_bb->global_live_at_start)
                                   ;
    }
  return new_bb;
}
static void
rtl_merge_blocks (basic_block a, basic_block b)
{
  rtx b_head = (b)->head_, b_end = (b)->end_, a_end = (a)->end_;
  rtx del_first = (rtx) 0, del_last = (rtx) 0;
  int b_empty = 0;
  if (((enum rtx_code) (b_head)->code) == CODE_LABEL)
    {
      if (b_head == b_end)
 b_empty = 1;
      del_first = del_last = b_head;
      b_head = (((b_head)->u.fld[2]).rtx1);
    }
  if ((((enum rtx_code) (b_head)->code) == NOTE && (((b_head)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK))
    {
      if (b_head == b_end)
 b_empty = 1;
      if (! del_last)
 del_first = b_head;
      del_last = b_head;
      b_head = (((b_head)->u.fld[2]).rtx1);
    }
  if (((enum rtx_code) (a_end)->code) == JUMP_INSN)
    {
      rtx prev;
      for (prev = (((a_end)->u.fld[1]).rtx1); ; prev = (((prev)->u.fld[1]).rtx1))
 if (((enum rtx_code) (prev)->code) != NOTE
     || (((prev)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK
     || prev == (a)->head_)
   break;
      del_first = a_end;
      a_end = (((del_first)->u.fld[1]).rtx1);
    }
  else if (((enum rtx_code) ((((a_end)->u.fld[2]).rtx1))->code) == BARRIER)
    del_first = (((a_end)->u.fld[2]).rtx1);
  (b)->head_ = ((void *)0);
  delete_insn_chain (del_first, del_last);
  if (!b_empty)
    {
      rtx x;
      for (x = a_end; x != b_end; x = (((x)->u.fld[2]).rtx1))
 ((((x)->u.fld[3]).bb) = a);
      ((((b_end)->u.fld[3]).bb) = a);
      a_end = b_end;
    }
  (a)->end_ = a_end;
}
static unsigned char
rtl_can_merge_blocks (basic_block a,basic_block b)
{
  unsigned char partitions_ok = 1;
  if (flag_reorder_blocks_and_partition
      && (find_reg_note ((a)->end_, REG_CROSSING_JUMP, (rtx) 0)
   || find_reg_note ((b)->end_, REG_CROSSING_JUMP, (rtx) 0)
   || a->partition1 != b->partition1))
    partitions_ok = 0;
  return (a->succ && !a->succ->succ_next && a->succ->dest == b
   && !b->pred->pred_next && a != b
   && !(a->succ->flags & (2 | 4 | 8))
   && partitions_ok
   && a->next_bb == b
   && a != ENTRY_BLOCK_PTR && b != EXIT_BLOCK_PTR
   && (((enum rtx_code) ((a)->end_)->code) != JUMP_INSN
       || (reload_completed
    ? simplejump_p ((a)->end_) : onlyjump_p ((a)->end_))));
}
rtx
block_label (basic_block block)
{
  if (block == EXIT_BLOCK_PTR)
    return (rtx) 0;
  if (((enum rtx_code) ((block)->head_)->code) != CODE_LABEL)
    {
      (block)->head_ = emit_label_before (gen_label_rtx (), (block)->head_);
    }
  return (block)->head_;
}
edge
try_redirect_by_replacing_jump (edge e, basic_block target, unsigned char in_cfglayout)
{
  basic_block src = e->src;
  rtx insn = (src)->end_, kill_from;
  edge tmp;
  rtx set;
  int fallthru = 0;
  if (flag_reorder_blocks_and_partition
      && find_reg_note (insn, REG_CROSSING_JUMP, (rtx) 0))
    return ((void *)0);
  for (tmp = src->succ; tmp; tmp = tmp->succ_next)
    if (tmp->dest != target && tmp != e)
      break;
  if (tmp || !onlyjump_p (insn))
    return ((void *)0);
  if ((!optimize || reload_completed) && tablejump_p (insn, ((void *)0), ((void *)0)))
    return ((void *)0);
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (!set || side_effects_p (set))
    return ((void *)0);
  kill_from = insn;
  if (in_cfglayout || can_fallthru (src, target))
    {
      if (dump_file)
 fprintf (dump_file, "Removing jump %i.\n", (((insn)->u.fld[0]).rtint));
      fallthru = 1;
      if (in_cfglayout)
 {
   rtx insn = src->rbi->footer;
          delete_insn_chain (kill_from, (src)->end_);
   while (insn)
     {
       if (((enum rtx_code) (insn)->code) == BARRIER)
  {
    if ((((insn)->u.fld[1]).rtx1))
      ((((((insn)->u.fld[1]).rtx1))->u.fld[2]).rtx1) = (((insn)->u.fld[2]).rtx1);
    else
      src->rbi->footer = (((insn)->u.fld[2]).rtx1);
    if ((((insn)->u.fld[2]).rtx1))
      ((((((insn)->u.fld[2]).rtx1))->u.fld[1]).rtx1) = (((insn)->u.fld[1]).rtx1);
  }
       if (((enum rtx_code) (insn)->code) == CODE_LABEL)
  break;
       insn = (((insn)->u.fld[2]).rtx1);
     }
 }
      else
        delete_insn_chain (kill_from, ((((target)->head_)->u.fld[1]).rtx1));
    }
  else if (simplejump_p (insn))
    {
      if (e->dest == target)
 return ((void *)0);
      if (dump_file)
 fprintf (dump_file, "Redirecting jump %i from %i to %i.\n",
   (((insn)->u.fld[0]).rtint), e->dest->index, target->index);
      if (!redirect_jump (insn, block_label (target), 0))
 {
   if (target == EXIT_BLOCK_PTR)
     return ((void *)0);
   fancy_abort ("gcc.c", 403738, "?");
 }
    }
  else if (target == EXIT_BLOCK_PTR)
    return ((void *)0);
  else
    {
      rtx target_label = block_label (target);
      rtx barrier, label, table;
      emit_jump_insn_after (gen_jump (target_label), insn);
      ((((src)->end_)->u.fld[9]).rtx1) = target_label;
      (((target_label)->u.fld[4]).rtint)++;
      if (dump_file)
 fprintf (dump_file, "Replacing insn %i by jump %i\n",
   (((insn)->u.fld[0]).rtint), ((((src)->end_)->u.fld[0]).rtint));
      delete_insn_chain (kill_from, insn);
      if (tablejump_p (insn, &label, &table))
 delete_insn_chain (label, table);
      barrier = next_nonnote_insn ((src)->end_);
      if (!barrier || ((enum rtx_code) (barrier)->code) != BARRIER)
 emit_barrier_after ((src)->end_);
      else
 {
   if (barrier != ((((src)->end_)->u.fld[2]).rtx1))
     {
       rtx new_insn = (src)->end_;
       rtx tmp;
       for (tmp = ((((src)->end_)->u.fld[2]).rtx1); tmp != barrier;
     tmp = (((tmp)->u.fld[2]).rtx1))
  ((((tmp)->u.fld[3]).bb) = src);
       ((((((new_insn)->u.fld[1]).rtx1))->u.fld[2]).rtx1) = (((new_insn)->u.fld[2]).rtx1);
       ((((((new_insn)->u.fld[2]).rtx1))->u.fld[1]).rtx1) = (((new_insn)->u.fld[1]).rtx1);
       (((new_insn)->u.fld[2]).rtx1) = barrier;
       ((((((barrier)->u.fld[1]).rtx1))->u.fld[2]).rtx1) = new_insn;
       (((new_insn)->u.fld[1]).rtx1) = (((barrier)->u.fld[1]).rtx1);
       (((barrier)->u.fld[1]).rtx1) = new_insn;
     }
 }
    }
  while (src->succ->succ_next)
    remove_edge (src->succ);
  e = src->succ;
  if (fallthru)
    e->flags = 1;
  else
    e->flags = 0;
  e->probability = 10000;
  e->count = src->count;
  while (((enum rtx_code) ((e->src)->end_)->code) == NOTE
  && ((((e->src)->end_)->u.fld[5]).rtint) >= 0)
    delete_insn ((e->src)->end_);
  if (e->dest != target)
    redirect_edge_succ (e, target);
  return e;
}
static rtx
last_loop_beg_note (rtx insn)
{
  rtx last = insn;
  for (insn = (((insn)->u.fld[2]).rtx1); insn && ((enum rtx_code) (insn)->code) == NOTE
       && (((insn)->u.fld[5]).rtint) != NOTE_INSN_BASIC_BLOCK;
       insn = (((insn)->u.fld[2]).rtx1))
    if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_BEG)
      last = insn;
  return last;
}
static edge
redirect_branch_edge (edge e, basic_block target)
{
  rtx tmp;
  rtx old_label = (e->dest)->head_;
  basic_block src = e->src;
  rtx insn = (src)->end_;
  if (e->flags & 1)
    return ((void *)0);
  else if (((enum rtx_code) (insn)->code) != JUMP_INSN)
    return ((void *)0);
  if (tablejump_p (insn, ((void *)0), &tmp))
    {
      rtvec vec;
      int j;
      rtx new_label = block_label (target);
      if (target == EXIT_BLOCK_PTR)
 return ((void *)0);
      if (((enum rtx_code) ((((tmp)->u.fld[5]).rtx1))->code) == ADDR_VEC)
 vec = ((((((tmp)->u.fld[5]).rtx1))->u.fld[0]).rtvec1);
      else
 vec = ((((((tmp)->u.fld[5]).rtx1))->u.fld[1]).rtvec1);
      for (j = ((vec)->num_elem) - 1; j >= 0; --j)
 if ((((((vec)->elem[j]))->u.fld[0]).rtx1) == old_label)
   {
     ((vec)->elem[j]) = gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (new_label));
     --(((old_label)->u.fld[4]).rtint);
     ++(((new_label)->u.fld[4]).rtint);
   }
      if ((tmp = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != ((void *)0)
   && (((tmp)->u.fld[0]).rtx1) == (global_rtl[GR_PC])
   && ((enum rtx_code) ((((tmp)->u.fld[1]).rtx1))->code) == IF_THEN_ELSE
   && ((enum rtx_code) (((((((tmp)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->code) == LABEL_REF
   && (((((((((tmp)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->u.fld[0]).rtx1) == old_label)
 {
   ((((((tmp)->u.fld[1]).rtx1))->u.fld[2]).rtx1) = gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (new_label))
                       ;
   --(((old_label)->u.fld[4]).rtint);
   ++(((new_label)->u.fld[4]).rtint);
 }
    }
  else
    {
      if (computed_jump_p (insn)
   || returnjump_p (insn))
 return ((void *)0);
      if ((((insn)->u.fld[9]).rtx1) != old_label)
 fancy_abort ("gcc.c", 403906, "?");
      if (!redirect_jump (insn, block_label (target), 0))
 {
   if (target == EXIT_BLOCK_PTR)
     return ((void *)0);
   fancy_abort ("gcc.c", 403915, "?");
 }
    }
  if (dump_file)
    fprintf (dump_file, "Edge %i->%i redirected to %i\n",
      e->src->index, e->dest->index, target->index);
  if (e->dest != target)
    e = redirect_edge_succ_nodup (e, target);
  return e;
}
static edge
rtl_redirect_edge_and_branch (edge e, basic_block target)
{
  edge ret;
  basic_block src = e->src;
  if (e->flags & (4 | 8))
    return ((void *)0);
  if (e->dest == target)
    return e;
  if ((ret = try_redirect_by_replacing_jump (e, target, 0)) != ((void *)0))
    {
      src->flags |= 1;
      return ret;
    }
  ret = redirect_branch_edge (e, target);
  if (!ret)
    return ((void *)0);
  src->flags |= 1;
  return ret;
}
basic_block
force_nonfallthru_and_redirect (edge e, basic_block target)
{
  basic_block jump_block, new_bb = ((void *)0), src = e->src;
  rtx note;
  edge new_edge;
  int abnormal_edge_flags = 0;
  if (e->src != ENTRY_BLOCK_PTR && e->dest != EXIT_BLOCK_PTR
      && any_condjump_p ((e->src)->end_)
      && e->src->next_bb == e->dest
      && ((((e->src)->end_)->u.fld[9]).rtx1) == (e->dest)->head_)
    {
      rtx note;
      edge b = unchecked_make_edge (e->src, target, 0);
      if (!redirect_jump ((e->src)->end_, block_label (target), 0))
 fancy_abort ("gcc.c", 403990, "?");
      note = find_reg_note ((e->src)->end_, REG_BR_PROB, (rtx) 0);
      if (note)
 {
   int prob = (((((note)->u.fld[0]).rtx1))->u.hwint[0]);
   b->probability = prob;
   b->count = e->count * prob / 10000;
   e->probability -= e->probability;
   e->count -= b->count;
   if (e->probability < 0)
     e->probability = 0;
   if (e->count < 0)
     e->count = 0;
 }
    }
  if (e->flags & 2)
    {
      if (e->dest != target)
 fancy_abort ("gcc.c", 404015, "?");
      abnormal_edge_flags = e->flags & ~(1 | 64);
      e->flags &= 1 | 64;
    }
  else if (!(e->flags & 1))
    fancy_abort ("gcc.c", 404020, "?");
  else if (e->src == ENTRY_BLOCK_PTR)
    {
      edge *pe1;
      basic_block bb = create_basic_block ((e->dest)->head_, ((void *)0), ENTRY_BLOCK_PTR);
      e->src = bb;
      for (pe1 = &ENTRY_BLOCK_PTR->succ; *pe1; pe1 = &(*pe1)->succ_next)
 if (*pe1 == e)
   {
     *pe1 = e->succ_next;
     break;
   }
      e->succ_next = 0;
      bb->succ = e;
      make_single_succ_edge (ENTRY_BLOCK_PTR, bb, 1);
    }
  if (e->src->succ->succ_next || abnormal_edge_flags)
    {
      if (!tablejump_p ((e->src)->end_, ((void *)0), &note))
 note = (e->src)->end_;
      note = last_loop_beg_note (note);
      note = (((note)->u.fld[2]).rtx1);
      jump_block = create_basic_block (note, ((void *)0), e->src);
      jump_block->count = e->count;
      jump_block->frequency = (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
      jump_block->loop_depth = target->loop_depth;
      if (target->global_live_at_start)
 {
   jump_block->global_live_at_start
     = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
   jump_block->global_live_at_end
     = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
   bitmap_copy (jump_block->global_live_at_start, target->global_live_at_start)
                                ;
   bitmap_copy (jump_block->global_live_at_end, target->global_live_at_start)
                                ;
 }
      jump_block->partition1 = e->src->partition1;
      if (flag_reorder_blocks_and_partition)
 {
   if (e->src->partition1 == 2)
     {
       rtx bb_note, new_note;
       for (bb_note = (jump_block)->head_;
     bb_note && bb_note != ((((jump_block)->end_)->u.fld[2]).rtx1);
     bb_note = (((bb_note)->u.fld[2]).rtx1))
  if (((enum rtx_code) (bb_note)->code) == NOTE
      && (((bb_note)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK)
    break;
       new_note = emit_note_after (NOTE_INSN_UNLIKELY_EXECUTED_CODE,
       bb_note);
       (((new_note)->u.fld[4]).bb) = jump_block;
       jump_block->partition1 = 2;
     }
   if (((enum rtx_code) ((jump_block)->end_)->code) == JUMP_INSN
       && !any_condjump_p ((jump_block)->end_)
       && jump_block->succ->crossing_edge )
     ((((jump_block)->end_)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_CROSSING_JUMP), ((rtx) 0), (((((jump_block)->end_)->u.fld[8]).rtx1)))
                                        ;
 }
      new_edge = make_edge (e->src, jump_block, 1);
      new_edge->probability = e->probability;
      new_edge->count = e->count;
      redirect_edge_pred (e, jump_block);
      e->probability = 10000;
      new_bb = jump_block;
    }
  else
    jump_block = e->src;
  e->flags &= ~1;
  if (target == EXIT_BLOCK_PTR)
    {
 emit_jump_insn_after (gen_return (), (jump_block)->end_);
    }
  else
    {
      rtx label = block_label (target);
      emit_jump_insn_after (gen_jump (label), (jump_block)->end_);
      ((((jump_block)->end_)->u.fld[9]).rtx1) = label;
      (((label)->u.fld[4]).rtint)++;
    }
  emit_barrier_after ((jump_block)->end_);
  redirect_edge_succ_nodup (e, target);
  if (abnormal_edge_flags)
    make_edge (src, target, abnormal_edge_flags);
  return new_bb;
}
basic_block
force_nonfallthru (edge e)
{
  return force_nonfallthru_and_redirect (e, e->dest);
}
static basic_block
rtl_redirect_edge_and_branch_force (edge e, basic_block target)
{
  if (redirect_edge_and_branch (e, target)
      || e->dest == target)
    return ((void *)0);
  return force_nonfallthru_and_redirect (e, target);
}
static void
rtl_tidy_fallthru_edge (edge e)
{
  rtx q;
  basic_block b = e->src, c = b->next_bb;
  for (q = ((((b)->end_)->u.fld[2]).rtx1); q != (c)->head_; q = (((q)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (q)->code) == INSN) || (((enum rtx_code) (q)->code) == JUMP_INSN) || (((enum rtx_code) (q)->code) == CALL_INSN)))
      return;
  q = (b)->end_;
  if (((enum rtx_code) (q)->code) == JUMP_INSN
      && onlyjump_p (q)
      && (any_uncondjump_p (q)
   || (b->succ == e && e->succ_next == ((void *)0))))
    {
      q = (((q)->u.fld[1]).rtx1);
      while (((enum rtx_code) (q)->code) == NOTE && (((q)->u.fld[5]).rtint) >= 0)
 q = (((q)->u.fld[1]).rtx1);
    }
  if (q != ((((c)->head_)->u.fld[1]).rtx1))
    delete_insn_chain ((((q)->u.fld[2]).rtx1), ((((c)->head_)->u.fld[1]).rtx1));
  e->flags |= 1;
}
static unsigned char
back_edge_of_syntactic_loop_p (basic_block bb1, basic_block bb2)
{
  rtx insn;
  int count = 0;
  basic_block bb;
  if (bb1 == bb2)
    return 1;
  for (bb = bb1; bb && bb != bb2; bb = bb->next_bb)
    continue;
  if (!bb)
    return 0;
  for (insn = (bb1)->end_; insn != (bb2)->head_ && count >= 0;
       insn = (((insn)->u.fld[2]).rtx1))
    if (((enum rtx_code) (insn)->code) == NOTE)
      {
 if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_BEG)
   count++;
 else if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_END)
   count--;
      }
  return count >= 0;
}
static unsigned char
rtl_move_block_after (basic_block bb ,
        basic_block after )
{
  return 0;
}
static basic_block
rtl_split_edge (edge edge_in)
{
  basic_block bb;
  rtx before;
  if ((edge_in->flags & 2) != 0)
    fancy_abort ("gcc.c", 404278, "?");
  if ((edge_in->flags & 1) == 0)
    {
      edge e;
      for (e = edge_in->dest->pred; e; e = e->pred_next)
 if (e->flags & 1)
   break;
      if (e)
 force_nonfallthru (e);
    }
  if (edge_in->dest != EXIT_BLOCK_PTR
      && ((((edge_in->dest)->head_)->u.fld[1]).rtx1)
      && ((enum rtx_code) (((((edge_in->dest)->head_)->u.fld[1]).rtx1))->code) == NOTE
      && ((((((((edge_in->dest)->head_)->u.fld[1]).rtx1))->u.fld[5]).rtint)
   == NOTE_INSN_LOOP_BEG)
      && !back_edge_of_syntactic_loop_p (edge_in->dest, edge_in->src))
    before = ((((edge_in->dest)->head_)->u.fld[1]).rtx1);
  else if (edge_in->dest != EXIT_BLOCK_PTR)
    before = (edge_in->dest)->head_;
  else
    before = (rtx) 0;
  if (edge_in->flags & 1 && edge_in->dest == EXIT_BLOCK_PTR)
    {
      before = ((((edge_in->src)->end_)->u.fld[2]).rtx1);
      if (before
   && ((enum rtx_code) (before)->code) == NOTE
   && (((before)->u.fld[5]).rtint) == NOTE_INSN_LOOP_END)
 before = (((before)->u.fld[2]).rtx1);
      bb = create_basic_block (before, ((void *)0), edge_in->src);
    }
  else
    bb = create_basic_block (before, ((void *)0), edge_in->dest->prev_bb);
  if (edge_in->dest->global_live_at_start)
    {
      bb->global_live_at_start = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
      bb->global_live_at_end = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
      bitmap_copy (bb->global_live_at_start, edge_in->dest->global_live_at_start)
                                          ;
      bitmap_copy (bb->global_live_at_end, edge_in->dest->global_live_at_start)
                                          ;
    }
  make_single_succ_edge (bb, edge_in->dest, 1);
  if ((edge_in->flags & 1) == 0)
    {
      if (!redirect_edge_and_branch (edge_in, bb))
 fancy_abort ("gcc.c", 404356, "?");
    }
  else
    redirect_edge_succ (edge_in, bb);
  return bb;
}
void
insert_insn_on_edge (rtx pattern, edge e)
{
  if ((e->flags & 2) && ((e)->src->succ->succ_next && (e)->dest->pred->pred_next))
    fancy_abort ("gcc.c", 404374, "?");
  if (e->insns.r == (rtx) 0)
    start_sequence ();
  else
    push_to_sequence (e->insns.r);
  emit_insn (pattern);
  e->insns.r = get_insns ();
  end_sequence ();
}
static void
mark_killed_regs (rtx reg, rtx set , void *data)
{
  regset killed = data;
  int regno, i;
  if (((enum rtx_code) (reg)->code) == SUBREG)
    reg = (((reg)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (reg)->code) == REG))
    return;
  regno = (((reg)->u.fld[0]).rtuint);
  if (regno >= 53)
    bitmap_set_bit (killed, regno);
  else
    {
      for (i = 0; i < (int) hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)]; i++)
 bitmap_set_bit (killed, regno + i);
    }
}
unsigned char
safe_insert_insn_on_edge (rtx insn, edge e)
{
  rtx x;
  regset_head killed_head;
  regset killed = bitmap_initialize (&killed_head, 1);
  rtx save_regs = (rtx) 0;
  int regno, noccmode;
  enum machine_mode mode;
  noccmode = 1;
  for (x = insn; x; x = (((x)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (x)->code) == INSN) || (((enum rtx_code) (x)->code) == JUMP_INSN) || (((enum rtx_code) (x)->code) == CALL_INSN)))
      note_stores ((((x)->u.fld[5]).rtx1), mark_killed_regs, killed);
  bitmap_operation (killed, killed, e->dest->global_live_at_start,
      BITMAP_AND);
  do { bitmap_element *ptr_ = (killed)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (regno) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { mode = regno < 53 ? reg_raw_mode[regno] : ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[regno])->mode); if (mode == VOIDmode) return 0; if (noccmode && mode == CCmode) return 0; save_regs = alloc_EXPR_LIST (0, alloc_EXPR_LIST (0, gen_reg_rtx (mode), gen_raw_REG (mode, regno)), save_regs); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
  if (save_regs)
    {
      rtx from, to;
      start_sequence ();
      for (x = save_regs; x; x = (((x)->u.fld[1]).rtx1))
 {
   from = ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
   to = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   emit_move_insn (to, from);
 }
      emit_insn (insn);
      for (x = save_regs; x; x = (((x)->u.fld[1]).rtx1))
 {
   from = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   to = ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
   emit_move_insn (to, from);
 }
      insn = get_insns ();
      end_sequence ();
      free_EXPR_LIST_list (&save_regs);
    }
  insert_insn_on_edge (insn, e);
  do { if (killed) { bitmap_clear (killed); (killed) = 0; } } while (0);
  return 1;
}
static void
commit_one_edge_insertion (edge e, int watch_calls)
{
  rtx before = (rtx) 0, after = (rtx) 0, insns, tmp, last;
  basic_block bb = ((void *)0);
  insns = e->insns.r;
  e->insns.r = (rtx) 0;
  if (watch_calls && (e->flags & 1) && !e->dest->pred->pred_next
      && e->src != ENTRY_BLOCK_PTR
      && ((enum rtx_code) ((e->src)->end_)->code) == CALL_INSN)
    {
      rtx next = next_nonnote_insn ((e->src)->end_);
      after = (e->dest)->head_;
      while (next
      && keep_with_call_p (next))
 {
   after = next;
   next = next_nonnote_insn (next);
 }
      bb = e->dest;
    }
  if (!before && !after)
    {
      if (e->dest->pred->pred_next == ((void *)0) && e->dest != EXIT_BLOCK_PTR)
 {
   bb = e->dest;
   tmp = (bb)->head_;
   if (((enum rtx_code) (tmp)->code) == CODE_LABEL)
     tmp = (((tmp)->u.fld[2]).rtx1);
   if ((((enum rtx_code) (tmp)->code) == NOTE && (((tmp)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK))
     tmp = (((tmp)->u.fld[2]).rtx1);
   if (tmp
       && ((enum rtx_code) (tmp)->code) == NOTE
       && (((tmp)->u.fld[5]).rtint) == NOTE_INSN_UNLIKELY_EXECUTED_CODE)
     tmp = (((tmp)->u.fld[2]).rtx1);
   if (tmp == (bb)->head_)
     before = tmp;
   else if (tmp)
     after = (((tmp)->u.fld[1]).rtx1);
   else
     after = get_last_insn ();
 }
      else if ((e->flags & 2) == 0
        && e->src->succ->succ_next == ((void *)0)
        && e->src != ENTRY_BLOCK_PTR)
 {
   bb = e->src;
   if (((enum rtx_code) ((bb)->end_)->code) == JUMP_INSN)
     for (before = (bb)->end_;
   ((enum rtx_code) ((((before)->u.fld[1]).rtx1))->code) == NOTE
   && ((((((before)->u.fld[1]).rtx1))->u.fld[5]).rtint) ==
   NOTE_INSN_LOOP_BEG; before = (((before)->u.fld[1]).rtx1))
       ;
   else
     {
       if ((e->flags & 1) == 0)
  fancy_abort ("gcc.c", 404563, "?");
       after = (bb)->end_;
     }
 }
      else
 {
   bb = split_edge (e);
   after = (bb)->end_;
   bb->partition1 = e->src->partition1;
   if (flag_reorder_blocks_and_partition
       && e->src != ENTRY_BLOCK_PTR
       && e->src->partition1 == 2)
     {
       rtx bb_note, new_note, cur_insn;
       bb_note = (rtx) 0;
       for (cur_insn = (bb)->head_; cur_insn != ((((bb)->end_)->u.fld[2]).rtx1);
     cur_insn = (((cur_insn)->u.fld[2]).rtx1))
  if (((enum rtx_code) (cur_insn)->code) == NOTE
      && (((cur_insn)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK)
    {
      bb_note = cur_insn;
      break;
    }
       new_note = emit_note_after (NOTE_INSN_UNLIKELY_EXECUTED_CODE,
       bb_note);
       (((new_note)->u.fld[4]).bb) = bb;
       if (((enum rtx_code) ((bb)->end_)->code) == JUMP_INSN
    && !any_condjump_p ((bb)->end_)
    && bb->succ->crossing_edge )
  ((((bb)->end_)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_CROSSING_JUMP), ((rtx) 0), (((((bb)->end_)->u.fld[8]).rtx1)))
                                                          ;
       if (after == bb_note)
  after = new_note;
     }
 }
    }
  if (before)
    {
      emit_insn_before (insns, before);
      last = prev_nonnote_insn (before);
    }
  else
    last = emit_insn_after (insns, after);
  if (returnjump_p (last))
    {
      e = bb->succ;
      if (e->dest != EXIT_BLOCK_PTR
   || e->succ_next != ((void *)0) || (e->flags & 1) == 0)
 fancy_abort ("gcc.c", 404628, "?");
      e->flags &= ~1;
      emit_barrier_after (last);
      if (before)
 delete_insn (before);
    }
  else if (((enum rtx_code) (last)->code) == JUMP_INSN)
    fancy_abort ("gcc.c", 404637, "?");
  bb->aux = &bb->aux;
}
void
commit_edge_insertions (void)
{
  basic_block bb;
  sbitmap blocks;
  unsigned char changed = 0;
  for (bb = ENTRY_BLOCK_PTR; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e, next;
      for (e = bb->succ; e; e = next)
 {
   next = e->succ_next;
   if (e->insns.r)
     {
       changed = 1;
       commit_one_edge_insertion (e, 0);
     }
 }
    }
  if (!changed)
    return;
  blocks = sbitmap_alloc (last_basic_block);
  sbitmap_zero (blocks);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (bb->aux)
      {
        ((blocks)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
 if (bb->aux != &bb->aux)
   fancy_abort ("gcc.c", 404683, "?");
 bb->aux = ((void *)0);
      }
  find_many_sub_basic_blocks (blocks);
  free(blocks);
}
void
commit_edge_insertions_watch_calls (void)
{
  basic_block bb;
  sbitmap blocks;
  unsigned char changed = 0;
  for (bb = ENTRY_BLOCK_PTR; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e, next;
      for (e = bb->succ; e; e = next)
 {
   next = e->succ_next;
   if (e->insns.r)
     {
       changed = 1;
       commit_one_edge_insertion (e, 1);
     }
 }
    }
  if (!changed)
    return;
  blocks = sbitmap_alloc (last_basic_block);
  sbitmap_zero (blocks);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (bb->aux)
      {
        ((blocks)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
 if (bb->aux != &bb->aux)
   fancy_abort ("gcc.c", 404731, "?");
 bb->aux = ((void *)0);
      }
  find_many_sub_basic_blocks (blocks);
  free(blocks);
}
static void
rtl_dump_bb (basic_block bb, FILE *outf, int indent1)
{
  rtx insn;
  rtx last;
  char *s_indent1;
  s_indent1 = C_alloca((size_t) indent1 + 1);
  memset (s_indent1, ' ', (size_t) indent1);
  s_indent1[indent1] = '\0';
  fprintf (outf, ";;%s Registers live at start: ", s_indent1);
  dump_regset (bb->global_live_at_start, outf);
  putc_unlocked ('\n', outf);
  for (insn = (bb)->head_, last = ((((bb)->end_)->u.fld[2]).rtx1); insn != last;
       insn = (((insn)->u.fld[2]).rtx1))
    print_rtl_single (outf, insn);
  fprintf (outf, ";;%s Registers live at end: ", s_indent1);
  dump_regset (bb->global_live_at_end, outf);
  putc_unlocked ('\n', outf);
}
void
print_rtl_with_bb (FILE *outf, rtx rtx_first)
{
  rtx tmp_rtx;
  if (rtx_first == 0)
    fprintf (outf, "(nil)\n");
  else
    {
      enum bb_state { NOT_IN_BB, IN_ONE_BB, IN_MULTIPLE_BB };
      int max_uid = get_max_uid ();
      basic_block *start = xcalloc (max_uid, sizeof (basic_block));
      basic_block *end = xcalloc (max_uid, sizeof (basic_block));
      enum bb_state *in_bb_p = xcalloc (max_uid, sizeof (enum bb_state));
      basic_block bb;
      for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
 {
   rtx x;
   start[((((bb)->head_)->u.fld[0]).rtint)] = bb;
   end[((((bb)->end_)->u.fld[0]).rtint)] = bb;
   for (x = (bb)->head_; x != (rtx) 0; x = (((x)->u.fld[2]).rtx1))
     {
       enum bb_state state = IN_MULTIPLE_BB;
       if (in_bb_p[(((x)->u.fld[0]).rtint)] == NOT_IN_BB)
  state = IN_ONE_BB;
       in_bb_p[(((x)->u.fld[0]).rtint)] = state;
       if (x == (bb)->end_)
  break;
     }
 }
      for (tmp_rtx = rtx_first; ((void *)0) != tmp_rtx; tmp_rtx = (((tmp_rtx)->u.fld[2]).rtx1))
 {
   int did_output;
   if ((bb = start[(((tmp_rtx)->u.fld[0]).rtint)]) != ((void *)0))
     {
       fprintf (outf, ";; Start of basic block %d, registers live:",
         bb->index);
       dump_regset (bb->global_live_at_start, outf);
       putc_unlocked ('\n', outf);
     }
   if (in_bb_p[(((tmp_rtx)->u.fld[0]).rtint)] == NOT_IN_BB
       && ((enum rtx_code) (tmp_rtx)->code) != NOTE
       && ((enum rtx_code) (tmp_rtx)->code) != BARRIER)
     fprintf (outf, ";; Insn is not within a basic block\n");
   else if (in_bb_p[(((tmp_rtx)->u.fld[0]).rtint)] == IN_MULTIPLE_BB)
     fprintf (outf, ";; Insn is in multiple basic blocks\n");
   did_output = print_rtl_single (outf, tmp_rtx);
   if ((bb = end[(((tmp_rtx)->u.fld[0]).rtint)]) != ((void *)0))
     {
       fprintf (outf, ";; End of basic block %d, registers live:\n",
         bb->index);
       dump_regset (bb->global_live_at_end, outf);
       putc_unlocked ('\n', outf);
     }
   if (did_output)
     putc_unlocked ('\n', outf);
 }
      free (start);
      free (end);
      free (in_bb_p);
    }
  if ((cfun->epilogue_delay_list) != 0)
    {
      fprintf (outf, "\n;; Insns in epilogue delay list:\n\n");
      for (tmp_rtx = (cfun->epilogue_delay_list); tmp_rtx != 0;
    tmp_rtx = (((tmp_rtx)->u.fld[1]).rtx1))
 print_rtl_single (outf, (((tmp_rtx)->u.fld[0]).rtx1));
    }
}
void
update_br_prob_note (basic_block bb)
{
  rtx note;
  if (((enum rtx_code) ((bb)->end_)->code) != JUMP_INSN)
    return;
  note = find_reg_note ((bb)->end_, REG_BR_PROB, (rtx) 0);
  if (!note || (((((note)->u.fld[0]).rtx1))->u.hwint[0]) == ((bb)->succ->flags & 1 ? (bb)->succ->succ_next : (bb)->succ)->probability)
    return;
  (((note)->u.fld[0]).rtx1) = gen_rtx_CONST_INT (VOIDmode, (long) (((bb)->succ->flags & 1 ? (bb)->succ->succ_next : (bb)->succ)->probability));
}
static int
rtl_verify_flow_info_1 (void)
{
  const int max_uid = get_max_uid ();
  rtx last_head = get_last_insn ();
  basic_block *bb_info;
  rtx x;
  int err = 0;
  basic_block bb, last_bb_seen;
  bb_info = xcalloc (max_uid, sizeof (basic_block));
  last_bb_seen = ENTRY_BLOCK_PTR;
  for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
    {
      rtx head = (bb)->head_;
      rtx end = (bb)->end_;
      for (x = last_head; x != (rtx) 0; x = (((x)->u.fld[1]).rtx1))
 if (x == end)
   break;
      if (!x)
 {
   error ("end insn %d for block %d not found in the insn stream",
   (((end)->u.fld[0]).rtint), bb->index);
   err = 1;
 }
      for (; x != (rtx) 0; x = (((x)->u.fld[1]).rtx1))
 {
   if (bb_info[(((x)->u.fld[0]).rtint)] != ((void *)0))
     {
       error ("insn %d is in multiple basic blocks (%d and %d)",
       (((x)->u.fld[0]).rtint), bb->index, bb_info[(((x)->u.fld[0]).rtint)]->index);
       err = 1;
     }
   bb_info[(((x)->u.fld[0]).rtint)] = bb;
   if (x == head)
     break;
 }
      if (!x)
 {
   error ("head insn %d for block %d not found in the insn stream",
   (((head)->u.fld[0]).rtint), bb->index);
   err = 1;
 }
      last_head = x;
    }
  for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
    {
      int n_fallthru = 0, n_eh = 0, n_call = 0, n_abnormal = 0, n_branch = 0;
      edge e, fallthru = ((void *)0);
      rtx note;
      if (((((enum rtx_code) ((bb)->end_)->code) == INSN) || (((enum rtx_code) ((bb)->end_)->code) == JUMP_INSN) || (((enum rtx_code) ((bb)->end_)->code) == CALL_INSN))
   && (note = find_reg_note ((bb)->end_, REG_BR_PROB, (rtx) 0))
   && bb->succ && bb->succ->succ_next
   && any_condjump_p ((bb)->end_))
 {
   if ((((((note)->u.fld[0]).rtx1))->u.hwint[0]) != ((bb)->succ->flags & 1 ? (bb)->succ->succ_next : (bb)->succ)->probability)
     {
       error ("verify_flow_info: REG_BR_PROB does not match cfg %wi %i",
       (((((note)->u.fld[0]).rtx1))->u.hwint[0]), ((bb)->succ->flags & 1 ? (bb)->succ->succ_next : (bb)->succ)->probability);
       err = 1;
     }
 }
      for (e = bb->succ; e; e = e->succ_next)
 {
   if (e->flags & 1)
     {
       n_fallthru++, fallthru = e;
       if (e->crossing_edge)
  {
    error ("Fallthru edge crosses section boundary (bb %i)",
    e->src->index);
    err = 1;
  }
     }
   if ((e->flags & ~(32
       | 64
       | 128
       | 512)) == 0)
     n_branch++;
   if (e->flags & 4)
     n_call++;
   if (e->flags & 8)
     n_eh++;
   else if (e->flags & 2)
     n_abnormal++;
 }
      if (n_eh && ((enum rtx_code) (((((bb)->end_)->u.fld[5]).rtx1))->code) != RESX
   && !find_reg_note ((bb)->end_, REG_EH_REGION, (rtx) 0))
 {
   error ("Missing REG_EH_REGION note in the end of bb %i", bb->index);
   err = 1;
 }
      if (n_branch
   && (((enum rtx_code) ((bb)->end_)->code) != JUMP_INSN
       || (n_branch > 1 && (any_uncondjump_p ((bb)->end_)
       || any_condjump_p ((bb)->end_)))))
 {
   error ("Too many outgoing branch edges from bb %i", bb->index);
   err = 1;
 }
      if (n_fallthru && any_uncondjump_p ((bb)->end_))
 {
   error ("Fallthru edge after unconditional jump %i", bb->index);
   err = 1;
 }
      if (n_branch != 1 && any_uncondjump_p ((bb)->end_))
 {
   error ("Wrong amount of branch edges after unconditional jump %i", bb->index);
   err = 1;
 }
      if (n_branch != 1 && any_condjump_p ((bb)->end_)
   && ((((bb)->end_)->u.fld[9]).rtx1) != (fallthru->dest)->head_)
 {
   error ("Wrong amount of branch edges after conditional jump %i", bb->index);
   err = 1;
 }
      if (n_call && ((enum rtx_code) ((bb)->end_)->code) != CALL_INSN)
 {
   error ("Call edges for non-call insn in bb %i", bb->index);
   err = 1;
 }
      if (n_abnormal
   && (((enum rtx_code) ((bb)->end_)->code) != CALL_INSN && n_call != n_abnormal)
   && (((enum rtx_code) ((bb)->end_)->code) != JUMP_INSN
       || any_condjump_p ((bb)->end_)
       || any_uncondjump_p ((bb)->end_)))
 {
   error ("Abnormal edges for no purpose in bb %i", bb->index);
   err = 1;
 }
      for (x = (bb)->head_; x != ((((bb)->end_)->u.fld[2]).rtx1); x = (((x)->u.fld[2]).rtx1))
 if ((((x)->u.fld[3]).bb) != bb)
   {
     debug_rtx (x);
     if (! (((x)->u.fld[3]).bb))
       error
  ("insn %d inside basic block %d but block_for_insn is NULL",
   (((x)->u.fld[0]).rtint), bb->index);
     else
       error
  ("insn %d inside basic block %d but block_for_insn is %i",
   (((x)->u.fld[0]).rtint), bb->index, (((x)->u.fld[3]).bb)->index);
     err = 1;
   }
      x = (bb)->head_;
      if (((enum rtx_code) (x)->code) == CODE_LABEL)
 {
   if ((bb)->end_ == x)
     {
       error ("NOTE_INSN_BASIC_BLOCK is missing for block %d",
       bb->index);
       err = 1;
     }
   x = (((x)->u.fld[2]).rtx1);
 }
      if (!(((enum rtx_code) (x)->code) == NOTE && (((x)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK) || (((x)->u.fld[4]).bb) != bb)
 {
   error ("NOTE_INSN_BASIC_BLOCK is missing for block %d",
   bb->index);
   err = 1;
 }
      if ((bb)->end_ == x)
 ;
      else
 for (x = (((x)->u.fld[2]).rtx1); x; x = (((x)->u.fld[2]).rtx1))
   {
     if ((((enum rtx_code) (x)->code) == NOTE && (((x)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK))
       {
  error ("NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d",
         (((x)->u.fld[0]).rtint), bb->index);
  err = 1;
       }
     if (x == (bb)->end_)
       break;
     if (control_flow_insn_p (x))
       {
  error ("in basic block %d:", bb->index);
  _fatal_insn ("flow control insn inside a basic block", x, "gcc.c", 405090, "?");
       }
   }
    }
  free (bb_info);
  return err;
}
static int
rtl_verify_flow_info (void)
{
  basic_block bb;
  int err = rtl_verify_flow_info_1 ();
  rtx x;
  int num_bb_notes;
  const rtx rtx_first = get_insns ();
  basic_block last_bb_seen = ENTRY_BLOCK_PTR, curr_bb = ((void *)0);
  for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
    {
      edge e;
      for (e = bb->succ; e; e = e->succ_next)
 if (e->flags & 1)
   break;
      if (!e)
 {
   rtx insn;
   for (insn = (bb)->end_; !insn || ((enum rtx_code) (insn)->code) != BARRIER;
        insn = (((insn)->u.fld[2]).rtx1))
     if (!insn
  || (((enum rtx_code) (insn)->code) == NOTE
      && (((insn)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK))
  {
    error ("missing barrier after block %i", bb->index);
    err = 1;
    break;
  }
 }
      else if (e->src != ENTRY_BLOCK_PTR
        && e->dest != EXIT_BLOCK_PTR)
        {
   rtx insn;
   if (e->src->next_bb != e->dest)
     {
       error
  ("verify_flow_info: Incorrect blocks for fallthru %i->%i",
   e->src->index, e->dest->index);
       err = 1;
     }
   else
     for (insn = ((((e->src)->end_)->u.fld[2]).rtx1); insn != (e->dest)->head_;
   insn = (((insn)->u.fld[2]).rtx1))
       if (((enum rtx_code) (insn)->code) == BARRIER
    || ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
    )
  {
    error ("verify_flow_info: Incorrect fallthru %i->%i",
    e->src->index, e->dest->index);
    _fatal_insn ("wrong insn in the fallthru edge", insn, "gcc.c", 405166, "?");
    err = 1;
  }
        }
    }
  num_bb_notes = 0;
  last_bb_seen = ENTRY_BLOCK_PTR;
  for (x = rtx_first; x; x = (((x)->u.fld[2]).rtx1))
    {
      if ((((enum rtx_code) (x)->code) == NOTE && (((x)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK))
 {
   bb = (((x)->u.fld[4]).bb);
   num_bb_notes++;
   if (bb != last_bb_seen->next_bb)
     internal_error ("basic blocks not laid down consecutively");
   curr_bb = last_bb_seen = bb;
 }
      if (!curr_bb)
 {
   switch (((enum rtx_code) (x)->code))
     {
     case BARRIER:
     case NOTE:
       break;
     case CODE_LABEL:
       if ((((x)->u.fld[2]).rtx1)
    && ((enum rtx_code) ((((x)->u.fld[2]).rtx1))->code) == JUMP_INSN
    && (((enum rtx_code) (((((((x)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC
        || ((enum rtx_code) (((((((x)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->code) == ADDR_VEC))
  x = (((x)->u.fld[2]).rtx1);
       break;
     default:
       _fatal_insn ("insn outside basic block", x, "gcc.c", 405208, "?");
     }
 }
      if (((((enum rtx_code) (x)->code) == INSN) || (((enum rtx_code) (x)->code) == JUMP_INSN) || (((enum rtx_code) (x)->code) == CALL_INSN))
   && ((enum rtx_code) (x)->code) == JUMP_INSN
   && returnjump_p (x) && ! condjump_p (x)
   && ! ((((x)->u.fld[2]).rtx1) && ((enum rtx_code) ((((x)->u.fld[2]).rtx1))->code) == BARRIER))
     _fatal_insn ("return not followed by barrier", x, "gcc.c", 405216, "?");
      if (curr_bb && x == (curr_bb)->end_)
 curr_bb = ((void *)0);
    }
  if (num_bb_notes != n_basic_blocks)
    internal_error
      ("number of bb notes in insn chain (%d) != n_basic_blocks (%d)",
       num_bb_notes, n_basic_blocks);
   return err;
}
unsigned char
purge_dead_edges (basic_block bb)
{
  edge e, next;
  rtx insn = (bb)->end_, note;
  unsigned char purged = 0;
  if (((enum rtx_code) (insn)->code) == INSN
      && (note = find_reg_note (insn, REG_EH_REGION, ((void *)0))))
    {
      rtx eqnote;
      if (! may_trap_p ((((insn)->u.fld[5]).rtx1))
   || ((eqnote = find_reg_equal_equiv_note (insn))
       && ! may_trap_p ((((eqnote)->u.fld[0]).rtx1))))
 remove_note (insn, note);
    }
  for (e = bb->succ; e; e = next)
    {
      next = e->succ_next;
      if (e->flags & 8)
 {
   if (can_throw_internal ((bb)->end_))
     continue;
 }
      else if (e->flags & 4)
 {
   if (((enum rtx_code) ((bb)->end_)->code) == CALL_INSN
       && (! (note = find_reg_note (insn, REG_EH_REGION, ((void *)0)))
    || (((((note)->u.fld[0]).rtx1))->u.hwint[0]) >= 0))
     continue;
 }
      else
 continue;
      remove_edge (e);
      bb->flags |= 1;
      purged = 1;
    }
  if (((enum rtx_code) (insn)->code) == JUMP_INSN)
    {
      rtx note;
      edge b,f;
      if (!any_condjump_p (insn)
   && !returnjump_p (insn)
   && !simplejump_p (insn))
 return purged;
      if (simplejump_p (insn))
 {
   note = find_reg_note (insn, REG_BR_PROB, ((void *)0));
   if (note)
     remove_note (insn, note);
   while ((note = find_reg_note (insn, REG_BR_PRED, ((void *)0))))
     remove_note (insn, note);
 }
      for (e = bb->succ; e; e = next)
 {
   next = e->succ_next;
   e->flags &= ~2;
   if ((e->flags & 1) && any_condjump_p (insn))
     continue;
   else if (e->dest != EXIT_BLOCK_PTR
     && (e->dest)->head_ == (((insn)->u.fld[9]).rtx1))
     continue;
   else if (e->dest == EXIT_BLOCK_PTR && returnjump_p (insn))
     continue;
   else if ((e->flags & 8) && can_throw_internal (insn))
     {
       e->flags |= 2;
       continue;
     }
   bb->flags |= 1;
   purged = 1;
   remove_edge (e);
 }
      if (!bb->succ || !purged)
 return purged;
      if (dump_file)
 fprintf (dump_file, "Purged edges from bb %i\n", bb->index);
      if (!optimize)
 return purged;
      if (!bb->succ->succ_next)
 {
   bb->succ->probability = 10000;
   bb->succ->count = bb->count;
 }
      else
 {
   note = find_reg_note (insn, REG_BR_PROB, ((void *)0));
   if (!note)
     return purged;
   b = ((bb)->succ->flags & 1 ? (bb)->succ->succ_next : (bb)->succ);
   f = ((bb)->succ->flags & 1 ? (bb)->succ : (bb)->succ->succ_next);
   b->probability = (((((note)->u.fld[0]).rtx1))->u.hwint[0]);
   f->probability = 10000 - b->probability;
   b->count = bb->count * b->probability / 10000;
   f->count = bb->count * f->probability / 10000;
 }
      return purged;
    }
  else if (((enum rtx_code) (insn)->code) == CALL_INSN && (((insn))->jump))
    {
      if (!bb->succ || bb->succ->succ_next)
 fancy_abort ("gcc.c", 405374, "?");
      if (bb->succ->flags != (256 | 2))
 fancy_abort ("gcc.c", 405376, "?");
      return 0;
    }
  for (e = bb->succ; e && (e->flags & ((2 | 4 | 8) | 1));
       e = e->succ_next)
    ;
  if (!e)
    return purged;
  for (e = bb->succ; e; e = next)
    {
      next = e->succ_next;
      if (!(e->flags & 1))
 {
   bb->flags |= 1;
   remove_edge (e);
   purged = 1;
 }
    }
  if (!bb->succ || bb->succ->succ_next)
    fancy_abort ("gcc.c", 405405, "?");
  bb->succ->probability = 10000;
  bb->succ->count = bb->count;
  if (dump_file)
    fprintf (dump_file, "Purged non-fallthru edges from bb %i\n",
      bb->index);
  return purged;
}
unsigned char
purge_all_dead_edges (int update_life_p)
{
  int purged = 0;
  sbitmap blocks = 0;
  basic_block bb;
  if (update_life_p)
    {
      blocks = sbitmap_alloc (last_basic_block);
      sbitmap_zero (blocks);
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      unsigned char purged_here = purge_dead_edges (bb);
      purged |= purged_here;
      if (purged_here && update_life_p)
 ((blocks)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
    }
  if (update_life_p && purged)
    update_life_info (blocks, UPDATE_LIFE_GLOBAL,
        1 | 16
        | 8);
  if (update_life_p)
    free(blocks);
  return purged;
}
static basic_block
cfg_layout_split_block (basic_block bb, void *insnp)
{
  rtx insn = insnp;
  basic_block new_bb = rtl_split_block (bb, insn);
  new_bb->rbi->footer = bb->rbi->footer;
  bb->rbi->footer = ((void *)0);
  return new_bb;
}
static edge
cfg_layout_redirect_edge_and_branch (edge e, basic_block dest)
{
  basic_block src = e->src;
  edge ret;
  if (e->flags & (4 | 8))
    return ((void *)0);
  if (e->dest == dest)
    return e;
  if (e->src != ENTRY_BLOCK_PTR
      && (ret = try_redirect_by_replacing_jump (e, dest, 1)))
    {
      src->flags |= 1;
      return ret;
    }
  if (e->src == ENTRY_BLOCK_PTR
      && (e->flags & 1) && !(e->flags & (2 | 4 | 8)))
    {
      if (dump_file)
 fprintf (dump_file, "Redirecting entry edge from bb %i to %i\n",
   e->src->index, dest->index);
      e->src->flags |= 1;
      redirect_edge_succ (e, dest);
      return e;
    }
  if (e->flags & 1)
    {
      if (((enum rtx_code) ((src)->end_)->code) == JUMP_INSN
   && label_is_jump_target_p ((e->dest)->head_,
         (src)->end_))
 {
   if (dump_file)
     fprintf (dump_file, "Fallthru edge unified with branch %i->%i redirected to %i\n",
       e->src->index, e->dest->index, dest->index);
   e->flags &= ~1;
   if (!redirect_branch_edge (e, dest))
     fancy_abort ("gcc.c", 405515, "?");
   e->flags |= 1;
          e->src->flags |= 1;
   return e;
 }
      if (src->succ->succ_next
   && !src->succ->succ_next->succ_next)
 {
   edge s = e->succ_next ? e->succ_next : src->succ;
   if (s->dest == dest
       && any_condjump_p ((src)->end_)
       && onlyjump_p ((src)->end_))
     delete_insn ((src)->end_);
 }
      ret = redirect_edge_succ_nodup (e, dest);
      if (dump_file)
 fprintf (dump_file, "Fallthru edge %i->%i redirected to %i\n",
   e->src->index, e->dest->index, dest->index);
    }
  else
    ret = redirect_branch_edge (e, dest);
  if (simplejump_p ((src)->end_))
    fancy_abort ("gcc.c", 405541, "?");
  src->flags |= 1;
  return ret;
}
static basic_block
cfg_layout_redirect_edge_and_branch_force (edge e, basic_block dest)
{
  if (!cfg_layout_redirect_edge_and_branch (e, dest))
    fancy_abort ("gcc.c", 405552, "?");
  return ((void *)0);
}
static void
cfg_layout_delete_block (basic_block bb)
{
  rtx insn, next, prev = ((((bb)->head_)->u.fld[1]).rtx1), *to, remaints;
  if (bb->rbi->header1)
    {
      next = (bb)->head_;
      if (prev)
 (((prev)->u.fld[2]).rtx1) = bb->rbi->header1;
      else
 set_first_insn (bb->rbi->header1);
      (((bb->rbi->header1)->u.fld[1]).rtx1) = prev;
      insn = bb->rbi->header1;
      while ((((insn)->u.fld[2]).rtx1))
 insn = (((insn)->u.fld[2]).rtx1);
      (((insn)->u.fld[2]).rtx1) = next;
      (((next)->u.fld[1]).rtx1) = insn;
    }
  next = ((((bb)->end_)->u.fld[2]).rtx1);
  if (bb->rbi->footer)
    {
      insn = bb->rbi->footer;
      while (insn)
 {
   if (((enum rtx_code) (insn)->code) == BARRIER)
     {
       if ((((insn)->u.fld[1]).rtx1))
  ((((((insn)->u.fld[1]).rtx1))->u.fld[2]).rtx1) = (((insn)->u.fld[2]).rtx1);
       else
  bb->rbi->footer = (((insn)->u.fld[2]).rtx1);
       if ((((insn)->u.fld[2]).rtx1))
  ((((((insn)->u.fld[2]).rtx1))->u.fld[1]).rtx1) = (((insn)->u.fld[1]).rtx1);
     }
   if (((enum rtx_code) (insn)->code) == CODE_LABEL)
     break;
   insn = (((insn)->u.fld[2]).rtx1);
 }
      if (bb->rbi->footer)
 {
   insn = (bb)->end_;
   (((insn)->u.fld[2]).rtx1) = bb->rbi->footer;
   (((bb->rbi->footer)->u.fld[1]).rtx1) = insn;
   while ((((insn)->u.fld[2]).rtx1))
     insn = (((insn)->u.fld[2]).rtx1);
   (((insn)->u.fld[2]).rtx1) = next;
   if (next)
     (((next)->u.fld[1]).rtx1) = insn;
   else
     set_last_insn (insn);
 }
    }
  if (bb->next_bb != EXIT_BLOCK_PTR)
    to = &bb->next_bb->rbi->header1;
  else
    to = &cfg_layout_function_footer;
  rtl_delete_block (bb);
  if (prev)
    prev = (((prev)->u.fld[2]).rtx1);
  else
    prev = get_insns ();
  if (next)
    next = (((next)->u.fld[1]).rtx1);
  else
    next = get_last_insn ();
  if (next && (((next)->u.fld[2]).rtx1) != prev)
    {
      remaints = unlink_insn_chain (prev, next);
      insn = remaints;
      while ((((insn)->u.fld[2]).rtx1))
 insn = (((insn)->u.fld[2]).rtx1);
      (((insn)->u.fld[2]).rtx1) = *to;
      if (*to)
 (((*to)->u.fld[1]).rtx1) = insn;
      *to = remaints;
    }
}
static unsigned char
cfg_layout_can_merge_blocks_p (basic_block a, basic_block b)
{
  unsigned char partitions_ok = 1;
  if (flag_reorder_blocks_and_partition
      && (find_reg_note ((a)->end_, REG_CROSSING_JUMP, (rtx) 0)
   || find_reg_note ((b)->end_, REG_CROSSING_JUMP, (rtx) 0)
   || a->partition1 != b->partition1))
    partitions_ok = 0;
  return (a->succ && !a->succ->succ_next && a->succ->dest == b
   && !b->pred->pred_next && a != b
   && !(a->succ->flags & (2 | 4 | 8))
   && partitions_ok
   && a != ENTRY_BLOCK_PTR && b != EXIT_BLOCK_PTR
   && (((enum rtx_code) ((a)->end_)->code) != JUMP_INSN
       || (reload_completed
    ? simplejump_p ((a)->end_) : onlyjump_p ((a)->end_))));
}
static void
cfg_layout_merge_blocks (basic_block a, basic_block b)
{
  if (((enum rtx_code) ((b)->head_)->code) == CODE_LABEL)
    delete_insn ((b)->head_);
  if (((enum rtx_code) ((a)->end_)->code) == JUMP_INSN)
    try_redirect_by_replacing_jump (a->succ, b, 1);
  if (((enum rtx_code) ((a)->end_)->code) == JUMP_INSN)
    fancy_abort ("gcc.c", 405686, "?");
  if (b->rbi->header1)
    {
      rtx first = (a)->end_, last;
      last = emit_insn_after (b->rbi->header1, (a)->end_);
      delete_insn_chain ((((first)->u.fld[2]).rtx1), last);
      b->rbi->header1 = ((void *)0);
    }
  if (((((a)->end_)->u.fld[2]).rtx1) != (b)->head_)
    {
      rtx first = unlink_insn_chain ((b)->head_, (b)->end_);
      emit_insn_after (first, (a)->end_);
      if (!(((enum rtx_code) (first)->code) == NOTE && (((first)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK))
 first = (((first)->u.fld[2]).rtx1);
      if (!(((enum rtx_code) (first)->code) == NOTE && (((first)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK))
 fancy_abort ("gcc.c", 405708, "?");
      (b)->head_ = ((void *)0);
      delete_insn (first);
    }
  else
    {
      rtx insn;
      for (insn = (b)->head_;
    insn != ((((b)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 ((((insn)->u.fld[3]).bb) = a);
      insn = (b)->head_;
      if (!(((enum rtx_code) (insn)->code) == NOTE && (((insn)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK))
 insn = (((insn)->u.fld[2]).rtx1);
      if (!(((enum rtx_code) (insn)->code) == NOTE && (((insn)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK))
 fancy_abort ("gcc.c", 405726, "?");
      (b)->head_ = ((void *)0);
      (a)->end_ = (b)->end_;
      delete_insn (insn);
    }
  if (b->rbi->footer)
    {
      if (!a->rbi->footer)
 a->rbi->footer = b->rbi->footer;
      else
 {
   rtx last = a->rbi->footer;
   while ((((last)->u.fld[2]).rtx1))
     last = (((last)->u.fld[2]).rtx1);
   (((last)->u.fld[2]).rtx1) = b->rbi->footer;
   (((b->rbi->footer)->u.fld[1]).rtx1) = last;
 }
      b->rbi->footer = ((void *)0);
    }
  if (dump_file)
    fprintf (dump_file, "Merged blocks %d and %d.\n",
      a->index, b->index);
}
static basic_block
cfg_layout_split_edge (edge e)
{
  edge new_e;
  basic_block new_bb =
    create_basic_block (e->src != ENTRY_BLOCK_PTR
   ? ((((e->src)->end_)->u.fld[2]).rtx1) : get_insns (),
   (rtx) 0, e->src);
  new_e = make_edge (new_bb, e->dest, 1);
  redirect_edge_and_branch_force (e, new_bb);
  return new_bb;
}
static void
rtl_make_forwarder_block (edge fallthru )
{
}
static unsigned char
rtl_block_ends_with_call_p (basic_block bb)
{
  rtx insn = (bb)->end_;
  while (((enum rtx_code) (insn)->code) != CALL_INSN
  && insn != (bb)->head_
  && keep_with_call_p (insn))
    insn = (((insn)->u.fld[1]).rtx1);
  return (((enum rtx_code) (insn)->code) == CALL_INSN);
}
static unsigned char
rtl_block_ends_with_condjump_p (basic_block bb)
{
  return any_condjump_p ((bb)->end_);
}
static unsigned char
need_fake_rtl_edge_p (rtx insn)
{
  if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return 0;
  if ((((enum rtx_code) (insn)->code) == CALL_INSN
       && !(((insn))->jump)
       && !find_reg_note (insn, REG_NORETURN, ((void *)0))
       && !find_reg_note (insn, REG_ALWAYS_RETURN, ((void *)0))
       && !(((insn))->unchanging)))
    return 1;
  return ((((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ASM_OPERANDS
    && ((((((insn)->u.fld[5]).rtx1)))->volatil))
   || (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL
       && asm_noperands (insn) != -1
       && (((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0])))->volatil))
   || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ASM_INPUT);
}
static int
rtl_flow_call_edges_add (sbitmap blocks)
{
  int i;
  int blocks_split = 0;
  int last_bb = last_basic_block;
  unsigned char check_last_block = 0;
  if (n_basic_blocks == 0)
    return 0;
  if (! blocks)
    check_last_block = 1;
  else
    check_last_block = ((blocks)->elms [(EXIT_BLOCK_PTR->prev_bb->index) / ((unsigned) (8 * 4))] >> (EXIT_BLOCK_PTR->prev_bb->index) % ((unsigned) (8 * 4)) & 1);
  if (check_last_block)
    {
      basic_block bb = EXIT_BLOCK_PTR->prev_bb;
      rtx insn = (bb)->end_;
      while (insn != (bb)->head_
      && keep_with_call_p (insn))
 insn = (((insn)->u.fld[1]).rtx1);
      if (need_fake_rtl_edge_p (insn))
 {
   edge e;
   for (e = bb->succ; e; e = e->succ_next)
     if (e->dest == EXIT_BLOCK_PTR)
       {
  insert_insn_on_edge (gen_rtx_fmt_e (USE, (VOIDmode), ((const_int_rtx[64]))), e);
  commit_edge_insertions ();
  break;
       }
 }
    }
  for (i = 0; i < last_bb; i++)
    {
      basic_block bb = (((basic_block_info)->data.bb[(i)]));
      rtx insn;
      rtx prev_insn;
      if (!bb)
 continue;
      if (blocks && !((blocks)->elms [(i) / ((unsigned) (8 * 4))] >> (i) % ((unsigned) (8 * 4)) & 1))
 continue;
      for (insn = (bb)->end_; ; insn = prev_insn)
 {
   prev_insn = (((insn)->u.fld[1]).rtx1);
   if (need_fake_rtl_edge_p (insn))
     {
       edge e;
       rtx split_at_insn = insn;
       if (((enum rtx_code) (insn)->code) == CALL_INSN)
  while (split_at_insn != (bb)->end_
         && keep_with_call_p ((((split_at_insn)->u.fld[2]).rtx1)))
    split_at_insn = (((split_at_insn)->u.fld[2]).rtx1);
       if (split_at_insn != (bb)->end_)
  {
    e = split_block (bb, split_at_insn);
    if (e)
      blocks_split++;
  }
       make_edge (bb, EXIT_BLOCK_PTR, 16);
     }
   if (insn == (bb)->head_)
     break;
 }
    }
  if (blocks_split)
    verify_flow_info ();
  return blocks_split;
}
struct cfg_hooks rtl_cfg_hooks = {
  "rtl",
  rtl_verify_flow_info,
  rtl_dump_bb,
  rtl_create_basic_block,
  rtl_redirect_edge_and_branch,
  rtl_redirect_edge_and_branch_force,
  rtl_delete_block,
  rtl_split_block,
  rtl_move_block_after,
  rtl_can_merge_blocks,
  rtl_merge_blocks,
  rtl_predict_edge,
  rtl_predicted_by_p,
  ((void *)0),
  ((void *)0),
  rtl_split_edge,
  rtl_make_forwarder_block,
  rtl_tidy_fallthru_edge,
  rtl_block_ends_with_call_p,
  rtl_block_ends_with_condjump_p,
  rtl_flow_call_edges_add
};
extern unsigned char cfg_layout_can_duplicate_bb_p (basic_block);
extern basic_block cfg_layout_duplicate_bb (basic_block);
struct cfg_hooks cfg_layout_rtl_cfg_hooks = {
  "cfglayout mode",
  rtl_verify_flow_info_1,
  rtl_dump_bb,
  cfg_layout_create_basic_block,
  cfg_layout_redirect_edge_and_branch,
  cfg_layout_redirect_edge_and_branch_force,
  cfg_layout_delete_block,
  cfg_layout_split_block,
  rtl_move_block_after,
  cfg_layout_can_merge_blocks_p,
  cfg_layout_merge_blocks,
  rtl_predict_edge,
  rtl_predicted_by_p,
  cfg_layout_can_duplicate_bb_p,
  cfg_layout_duplicate_bb,
  cfg_layout_split_edge,
  rtl_make_forwarder_block,
  ((void *)0),
  rtl_block_ends_with_call_p,
  rtl_block_ends_with_condjump_p,
  rtl_flow_call_edges_add
};
extern rtx gen_lowpart_general (enum machine_mode, rtx);
extern rtx reg_nonzero_bits_general (rtx, enum machine_mode, rtx,
         enum machine_mode,
         unsigned long,
         unsigned long *);
extern rtx reg_num_sign_bit_copies_general (rtx, enum machine_mode, rtx,
         enum machine_mode,
         unsigned int, unsigned int *);
static int combine_attempts;
static int combine_merges;
static int combine_extras;
static int combine_successes;
static int total_attempts, total_merges, total_extras, total_successes;
static int *uid_cuid;
static int max_uid_cuid;
static unsigned int combine_max_regno;
struct reg_stat {
  rtx last_death;
  rtx last_set;
  rtx last_set_value;
  int last_set_table_tick;
  int last_set_label;
  unsigned long last_set_nonzero_bits;
  char last_set_sign_bit_copies;
  unsigned int last_set_mode : 8;
  char last_set_invalid;
  unsigned char sign_bit_copies;
  unsigned long nonzero_bits;
};
static struct reg_stat *reg_stat;
static int mem_last_set;
static int last_call_cuid;
static rtx subst_insn;
static int subst_low_cuid;
static HARD_REG_SET newpat_used_regs;
static rtx added_links_insn;
static basic_block this_basic_block;
static sbitmap refresh_blocks;
static int *uid_insn_cost;
static int last_insn_cost;
static int label_tick;
static enum machine_mode nonzero_bits_mode;
static int nonzero_sign_valid;
struct undo
{
  struct undo *next;
  int is_int;
  union {rtx r; int i;} old_contents;
  union {rtx *r; int *i;} where;
};
struct undobuf
{
  struct undo *undos;
  struct undo *frees;
  rtx other_insn;
};
static struct undobuf undobuf;
static int n_pseudo_occurrences;
static rtx reg_nonzero_bits_for_combine (rtx, enum machine_mode, rtx,
      enum machine_mode,
      unsigned long,
      unsigned long *);
static rtx reg_num_sign_bit_copies_for_combine (rtx, enum machine_mode, rtx,
      enum machine_mode,
      unsigned int, unsigned int *);
static void do_SUBST (rtx *, rtx);
static void do_SUBST_INT (int *, int);
static void init_reg_last (void);
static void setup_incoming_promotions (void);
static void set_nonzero_bits_and_sign_copies (rtx, rtx, void *);
static int cant_combine_insn_p (rtx);
static int can_combine_p (rtx, rtx, rtx, rtx, rtx *, rtx *);
static int combinable_i3pat (rtx, rtx *, rtx, rtx, int, rtx *);
static int contains_muldiv (rtx);
static rtx try_combine (rtx, rtx, rtx, int *);
static void undo_all (void);
static void undo_commit (void);
static rtx *find_split_point (rtx *, rtx);
static rtx subst (rtx, rtx, rtx, int, int);
static rtx combine_simplify_rtx (rtx, enum machine_mode, int);
static rtx simplify_if_then_else (rtx);
static rtx simplify_set (rtx);
static rtx simplify_logical (rtx);
static rtx expand_compound_operation (rtx);
static rtx expand_field_assignment (rtx);
static rtx make_extraction (enum machine_mode, rtx, long,
       rtx, unsigned long, int, int, int);
static rtx extract_left_shift (rtx, int);
static rtx make_compound_operation (rtx, enum rtx_code);
static int get_pos_from_mask (unsigned long,
         unsigned long *);
static rtx force_to_mode (rtx, enum machine_mode,
     unsigned long, rtx, int);
static rtx if_then_else_cond (rtx, rtx *, rtx *);
static rtx known_cond (rtx, enum rtx_code, rtx, rtx);
static int rtx_equal_for_field_assignment_p (rtx, rtx);
static rtx make_field_assignment (rtx);
static rtx apply_distributive_law (rtx);
static rtx simplify_and_const_int (rtx, enum machine_mode, rtx,
       unsigned long);
static int merge_outer_ops (enum rtx_code *, long *, enum rtx_code,
       long, enum machine_mode, int *);
static rtx simplify_shift_const (rtx, enum rtx_code, enum machine_mode, rtx,
     int);
static int recog_for_combine (rtx *, rtx, rtx *);
static rtx gen_lowpart_for_combine (enum machine_mode, rtx);
static rtx gen_binary (enum rtx_code, enum machine_mode, rtx, rtx);
static enum rtx_code simplify_comparison (enum rtx_code, rtx *, rtx *);
static void update_table_tick (rtx);
static void record_value_for_reg (rtx, rtx, rtx);
static void check_promoted_subreg (rtx, rtx);
static void record_dead_and_set_regs_1 (rtx, rtx, void *);
static void record_dead_and_set_regs (rtx);
static int get_last_value_validate (rtx *, rtx, int, int);
static rtx get_last_value (rtx);
static int use_crosses_set_p (rtx, int);
static void reg_dead_at_p_1 (rtx, rtx, void *);
static int reg_dead_at_p (rtx, rtx);
static void move_deaths (rtx, rtx, int, rtx, rtx *);
static int reg_bitfield_target_p (rtx, rtx);
static void distribute_notes (rtx, rtx, rtx, rtx);
static void distribute_links (rtx);
static void mark_used_regs_combine (rtx);
static int insn_cuid (rtx);
static void record_promoted_value (rtx, rtx);
static rtx reversed_comparison (rtx, enum machine_mode, rtx, rtx);
static enum rtx_code combine_reversed_comparison_code (rtx);
static int unmentioned_reg_p_1 (rtx *, void *);
static unsigned char unmentioned_reg_p (rtx, rtx);
static const struct rtl_hooks combine_rtl_hooks = { gen_lowpart_for_combine, reg_nonzero_bits_for_combine, reg_num_sign_bit_copies_for_combine, };
static void
do_SUBST (rtx *into, rtx newval)
{
  struct undo *buf;
  rtx oldval = *into;
  if (oldval == newval)
    return;
  if (mode_class[((enum machine_mode) (oldval)->mode)] == MODE_INT
      && ((enum rtx_code) (newval)->code) == CONST_INT)
    {
      if (((newval)->u.hwint[0]) != trunc_int_for_mode (((newval)->u.hwint[0]),
       ((enum machine_mode) (oldval)->mode)))
 fancy_abort ("gcc.c", 406496, "?");
      if ((((enum rtx_code) (oldval)->code) == SUBREG
    && ((enum rtx_code) ((((oldval)->u.fld[0]).rtx1))->code) == CONST_INT)
   || (((enum rtx_code) (oldval)->code) == ZERO_EXTEND
       && ((enum rtx_code) ((((oldval)->u.fld[0]).rtx1))->code) == CONST_INT))
 fancy_abort ("gcc.c", 406508, "?");
    }
  if (undobuf.frees)
    buf = undobuf.frees, undobuf.frees = buf->next;
  else
    buf = xmalloc (sizeof (struct undo));
  buf->is_int = 0;
  buf->where.r = into;
  buf->old_contents.r = oldval;
  *into = newval;
  buf->next = undobuf.undos, undobuf.undos = buf;
}
static void
do_SUBST_INT (int *into, int newval)
{
  struct undo *buf;
  int oldval = *into;
  if (oldval == newval)
    return;
  if (undobuf.frees)
    buf = undobuf.frees, undobuf.frees = buf->next;
  else
    buf = xmalloc (sizeof (struct undo));
  buf->is_int = 1;
  buf->where.i = into;
  buf->old_contents.i = oldval;
  *into = newval;
  buf->next = undobuf.undos, undobuf.undos = buf;
}
static int
combine_insn_cost (rtx pat)
{
  int i, cost;
  rtx set;
  if (((enum rtx_code) (pat)->code) == SET)
    set = pat;
  else if (((enum rtx_code) (pat)->code) == PARALLEL)
    {
      set = (rtx) 0;
      for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx x = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (x)->code) == SET)
     {
       if (set)
  return 0;
       set = x;
     }
 }
      if (!set)
 return 0;
    }
  else
    return 0;
  cost = rtx_cost ((((set)->u.fld[1]).rtx1), SET);
  return cost > 0 ? cost : ((1) * 4);
}
static unsigned char
combine_validate_cost (rtx i1, rtx i2, rtx i3, rtx newpat, rtx newi2pat)
{
  int i1_cost, i2_cost, i3_cost;
  int new_i2_cost, new_i3_cost;
  int old_cost, new_cost;
  i2_cost = (((i2)->u.fld[0]).rtint) <= last_insn_cost
     ? uid_insn_cost[(((i2)->u.fld[0]).rtint)] : 0;
  i3_cost = (((i3)->u.fld[0]).rtint) <= last_insn_cost
     ? uid_insn_cost[(((i3)->u.fld[0]).rtint)] : 0;
  if (i1)
    {
      i1_cost = (((i1)->u.fld[0]).rtint) <= last_insn_cost
  ? uid_insn_cost[(((i1)->u.fld[0]).rtint)] : 0;
      old_cost = (i1_cost > 0 && i2_cost > 0 && i3_cost > 0)
   ? i1_cost + i2_cost + i3_cost : 0;
    }
  else
    {
      old_cost = (i2_cost > 0 && i3_cost > 0) ? i2_cost + i3_cost : 0;
      i1_cost = 0;
    }
  new_i3_cost = combine_insn_cost (newpat);
  if (newi2pat)
    {
      new_i2_cost = combine_insn_cost (newi2pat);
      new_cost = (new_i2_cost > 0 && new_i3_cost > 0)
   ? new_i2_cost + new_i3_cost : 0;
    }
  else
    {
      new_cost = new_i3_cost;
      new_i2_cost = 0;
    }
  if (!undobuf.other_insn
      && old_cost > 0
      && new_cost > old_cost)
    {
      if (dump_file)
 {
   if (i1)
     {
       fprintf (dump_file,
         "rejecting combination of insns %d, %d and %d\n",
         (((i1)->u.fld[0]).rtint), (((i2)->u.fld[0]).rtint), (((i3)->u.fld[0]).rtint));
       fprintf (dump_file, "original costs %d + %d + %d = %d\n",
         i1_cost, i2_cost, i3_cost, old_cost);
     }
   else
     {
       fprintf (dump_file,
         "rejecting combination of insns %d and %d\n",
         (((i2)->u.fld[0]).rtint), (((i3)->u.fld[0]).rtint));
       fprintf (dump_file, "original costs %d + %d = %d\n",
         i2_cost, i3_cost, old_cost);
     }
   if (newi2pat)
     {
       fprintf (dump_file, "replacement costs %d + %d = %d\n",
         new_i2_cost, new_i3_cost, new_cost);
     }
   else
     fprintf (dump_file, "replacement cost %d\n", new_cost);
 }
      return 0;
    }
  uid_insn_cost[(((i2)->u.fld[0]).rtint)] = new_i2_cost;
  uid_insn_cost[(((i3)->u.fld[0]).rtint)] = new_i3_cost;
  if (i1)
    uid_insn_cost[(((i1)->u.fld[0]).rtint)] = 0;
  return 1;
}
int
combine_instructions (rtx f, unsigned int nregs)
{
  rtx insn, next;
  int i;
  rtx links, nextlinks;
  int new_direct_jump_p = 0;
  combine_attempts = 0;
  combine_merges = 0;
  combine_extras = 0;
  combine_successes = 0;
  combine_max_regno = nregs;
  rtl_hooks = combine_rtl_hooks;
  reg_stat = xcalloc (nregs, sizeof (struct reg_stat));
  init_recog_no_volatile ();
  for (insn = f, i = 0; insn; insn = (((insn)->u.fld[2]).rtx1))
    if ((((insn)->u.fld[0]).rtint) > i)
      i = (((insn)->u.fld[0]).rtint);
  uid_cuid = xmalloc ((i + 1) * sizeof (int));
  max_uid_cuid = i;
  nonzero_bits_mode = mode_for_size ((8 * 4), MODE_INT, 0);
  nonzero_sign_valid = 0;
  label_tick = 1;
  setup_incoming_promotions ();
  refresh_blocks = sbitmap_alloc (last_basic_block);
  sbitmap_zero (refresh_blocks);
  uid_insn_cost = xcalloc (max_uid_cuid + 1, sizeof (int));
  last_insn_cost = max_uid_cuid;
  for (insn = f, i = 0; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      uid_cuid[(((insn)->u.fld[0]).rtint)] = ++i;
      subst_low_cuid = i;
      subst_insn = insn;
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   note_stores ((((insn)->u.fld[5]).rtx1), set_nonzero_bits_and_sign_copies,
         ((void *)0));
   record_dead_and_set_regs (insn);
   uid_insn_cost[(((insn)->u.fld[0]).rtint)] = combine_insn_cost ((((insn)->u.fld[5]).rtx1));
   if (dump_file)
     fprintf(dump_file, "insn_cost %d: %d\n",
      (((insn)->u.fld[0]).rtint), uid_insn_cost[(((insn)->u.fld[0]).rtint)]);
 }
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 label_tick++;
    }
  nonzero_sign_valid = 1;
  label_tick = 1;
  last_call_cuid = 0;
  mem_last_set = 0;
  init_reg_last ();
  setup_incoming_promotions ();
  for (this_basic_block = ENTRY_BLOCK_PTR->next_bb; this_basic_block != EXIT_BLOCK_PTR; this_basic_block = this_basic_block->next_bb)
    {
      for (insn = (this_basic_block)->head_;
           insn != ((((this_basic_block)->end_)->u.fld[2]).rtx1);
    insn = next ? next : (((insn)->u.fld[2]).rtx1))
 {
   next = 0;
   if (((enum rtx_code) (insn)->code) == CODE_LABEL)
     label_tick++;
   else if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       check_promoted_subreg (insn, (((insn)->u.fld[5]).rtx1));
       for (links = (((insn)->u.fld[7]).rtx1); links; links = (((links)->u.fld[1]).rtx1))
  if ((next = try_combine (insn, (((links)->u.fld[0]).rtx1),
      (rtx) 0, &new_direct_jump_p)) != 0)
    goto retry;
       for (links = (((insn)->u.fld[7]).rtx1); links; links = (((links)->u.fld[1]).rtx1))
  {
    rtx link = (((links)->u.fld[0]).rtx1);
    if (((enum rtx_code) (link)->code) == NOTE)
      continue;
    for (nextlinks = (((link)->u.fld[7]).rtx1);
         nextlinks;
         nextlinks = (((nextlinks)->u.fld[1]).rtx1))
      if ((next = try_combine (insn, link,
          (((nextlinks)->u.fld[0]).rtx1),
          &new_direct_jump_p)) != 0)
        goto retry;
  }
       for (links = (((insn)->u.fld[7]).rtx1); links; links = (((links)->u.fld[1]).rtx1))
  for (nextlinks = (((links)->u.fld[1]).rtx1); nextlinks;
       nextlinks = (((nextlinks)->u.fld[1]).rtx1))
    if ((next = try_combine (insn, (((links)->u.fld[0]).rtx1),
        (((nextlinks)->u.fld[0]).rtx1),
        &new_direct_jump_p)) != 0)
      goto retry;
       for (links = (((insn)->u.fld[7]).rtx1); links; links = (((links)->u.fld[1]).rtx1))
  {
    rtx set, note;
    rtx temp = (((links)->u.fld[0]).rtx1);
    if ((set = (((((enum rtx_code) (temp)->code) == INSN) || (((enum rtx_code) (temp)->code) == JUMP_INSN) || (((enum rtx_code) (temp)->code) == CALL_INSN)) ? (((enum rtx_code) ((((temp)->u.fld[5]).rtx1))->code) == SET ? (((temp)->u.fld[5]).rtx1) : single_set_2 (temp, (((temp)->u.fld[5]).rtx1))) : (rtx) 0)) != 0
        && (note = find_reg_equal_equiv_note (temp)) != 0
        && ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) != EXPR_LIST
        && ! unmentioned_reg_p ((((note)->u.fld[0]).rtx1), (((set)->u.fld[1]).rtx1)))
      {
        rtx orig = (((set)->u.fld[1]).rtx1);
        (((set)->u.fld[1]).rtx1) = (((note)->u.fld[0]).rtx1);
        next = try_combine (insn, temp, (rtx) 0,
       &new_direct_jump_p);
        if (next)
   goto retry;
        (((set)->u.fld[1]).rtx1) = orig;
      }
  }
       if (((enum rtx_code) (insn)->code) != NOTE)
  record_dead_and_set_regs (insn);
     retry:
       ;
     }
 }
    }
  clear_bb_flags ();
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (refresh_blocks)->size; unsigned long *ptr_ = (refresh_blocks)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (i) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; (((basic_block_info)->data.bb[(i)]))->flags |= 1; if (word_ == 0) break; } } } } while (0)
                                           ;
  new_direct_jump_p |= purge_all_dead_edges (0);
  delete_noop_moves ();
  update_life_info_in_dirty_blocks (UPDATE_LIFE_GLOBAL_RM_NOTES,
        1 | 16
        | 8);
  free(refresh_blocks);
  free (uid_insn_cost);
  free (reg_stat);
  free (uid_cuid);
  {
    struct undo *undo, *next;
    for (undo = undobuf.frees; undo; undo = next)
      {
 next = undo->next;
 free (undo);
      }
    undobuf.frees = 0;
  }
  total_attempts += combine_attempts;
  total_merges += combine_merges;
  total_extras += combine_extras;
  total_successes += combine_successes;
  nonzero_sign_valid = 0;
  rtl_hooks = general_rtl_hooks;
  init_recog ();
  return new_direct_jump_p;
}
static void
init_reg_last (void)
{
  unsigned int i;
  for (i = 0; i < combine_max_regno; i++)
    memset (reg_stat + i, 0, __builtin_offsetof (reg_stat, sign_bit_copies));
}
static void
setup_incoming_promotions (void)
{
  unsigned int regno;
  rtx reg;
  enum machine_mode mode;
  int unsignedp;
  rtx first = get_insns ();
  if (targetm.calls.promote_function_args (((cfun->decl)->common.type)))
    {
      for (regno = 0; regno < 53; regno++)
 if (ix86_function_arg_regno_p ((regno))
     && (reg = promoted_input_arg (regno, &mode, &unsignedp)) != 0)
   {
     record_value_for_reg
       (reg, first, gen_rtx_fmt_e ((unsignedp ? ZERO_EXTEND
        : SIGN_EXTEND),
       ((enum machine_mode) (reg)->mode),
       gen_rtx_fmt_e (CLOBBER, (mode), ((const_int_rtx[64])))));
   }
    }
}
static void
set_nonzero_bits_and_sign_copies (rtx x, rtx set,
      void *data )
{
  unsigned int num;
  if ((((enum rtx_code) (x)->code) == REG)
      && (((x)->u.fld[0]).rtuint) >= 53
      && ! bitmap_bit_p (ENTRY_BLOCK_PTR->next_bb->global_live_at_start, (((x)->u.fld[0]).rtuint))
      && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) <= (8 * 4))
    {
      if (set == 0 || ((enum rtx_code) (set)->code) == CLOBBER)
 {
   reg_stat[(((x)->u.fld[0]).rtuint)].nonzero_bits = mode_mask_array[((enum machine_mode) (x)->mode)];
   reg_stat[(((x)->u.fld[0]).rtuint)].sign_bit_copies = 1;
   return;
 }
      set = expand_field_assignment (set);
      if ((((set)->u.fld[0]).rtx1) == x
   || (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == SUBREG
       && (((unsigned short) mode_size[((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode)])
    > ((unsigned short) mode_size[((enum machine_mode) (((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)]))
       && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == x))
 {
   rtx src = (((set)->u.fld[1]).rtx1);
   if (reg_stat[(((x)->u.fld[0]).rtuint)].nonzero_bits != ~(unsigned long) 0)
     reg_stat[(((x)->u.fld[0]).rtuint)].nonzero_bits
       |= nonzero_bits (src, nonzero_bits_mode);
   num = num_sign_bit_copies ((((set)->u.fld[1]).rtx1), ((enum machine_mode) (x)->mode));
   if (reg_stat[(((x)->u.fld[0]).rtuint)].sign_bit_copies == 0
       || reg_stat[(((x)->u.fld[0]).rtuint)].sign_bit_copies > num)
     reg_stat[(((x)->u.fld[0]).rtuint)].sign_bit_copies = num;
 }
      else
 {
   reg_stat[(((x)->u.fld[0]).rtuint)].nonzero_bits = mode_mask_array[((enum machine_mode) (x)->mode)];
   reg_stat[(((x)->u.fld[0]).rtuint)].sign_bit_copies = 1;
 }
    }
}
static int
can_combine_p (rtx insn, rtx i3, rtx pred , rtx succ,
        rtx *pdest, rtx *psrc)
{
  int i;
  rtx set = 0, src, dest;
  rtx p;
  int all_adjacent = (succ ? (next_active_insn (insn) == succ
         && next_active_insn (succ) == i3)
        : next_active_insn (insn) == i3);
  if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET)
    set = (((insn)->u.fld[5]).rtx1);
  else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL
    && ((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->code) == SET)
    {
      for (i = 0; i < ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx elt = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]);
   rtx note;
   switch (((enum rtx_code) (elt)->code))
     {
     case USE:
       if ((((enum rtx_code) ((((elt)->u.fld[0]).rtx1))->code) == REG)
    && ((enum rtx_code) ((((i3)->u.fld[5]).rtx1))->code) == PARALLEL)
  {
    rtx i3pat = (((i3)->u.fld[5]).rtx1);
    int i = (((((i3pat)->u.fld[0]).rtvec1))->num_elem) - 1;
    unsigned int regno = ((((((elt)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
    do
      {
        rtx i3elt = (((((i3pat)->u.fld[0]).rtvec1))->elem[i]);
        if (((enum rtx_code) (i3elt)->code) == USE
     && (((enum rtx_code) ((((i3elt)->u.fld[0]).rtx1))->code) == REG)
     && (((((((i3elt)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == regno
         ? reg_set_between_p ((((elt)->u.fld[0]).rtx1),
         (((insn)->u.fld[1]).rtx1), i3)
         : regno >= 53))
   return 0;
      }
    while (--i >= 0);
  }
       break;
     case CLOBBER:
       break;
     case SET:
       if (find_reg_note (insn, REG_UNUSED, (((elt)->u.fld[0]).rtx1))
    && (!(note = find_reg_note (insn, REG_EH_REGION, (rtx) 0))
        || (((((note)->u.fld[0]).rtx1))->u.hwint[0]) <= 0)
    && ! side_effects_p (elt))
  break;
       if (set)
  return 0;
       set = elt;
       break;
     default:
       return 0;
     }
 }
      if (set == 0
   || ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
 return 0;
    }
  else
    return 0;
  if (set == 0)
    return 0;
  set = expand_field_assignment (set);
  src = (((set)->u.fld[1]).rtx1), dest = (((set)->u.fld[0]).rtx1);
  if (dest == (global_rtl[GR_STACK_POINTER])
      || (rtx_equal_p (src, dest) && find_reg_note (insn, REG_EQUAL, (rtx) 0))
      || ((enum rtx_code) (src)->code) == ASM_OPERANDS
      || ((enum rtx_code) (src)->code) == CALL
      || (((enum rtx_code) (i3)->code) == CALL_INSN
   && (find_reg_fusage (i3, USE, dest)
       || ((((enum rtx_code) (dest)->code) == REG)
    && (((dest)->u.fld[0]).rtuint) < 53
    && global_regs[(((dest)->u.fld[0]).rtuint)])))
      || 0
      || (succ && 0)
      || (succ && ! all_adjacent
   && reg_used_between_p (dest, succ, i3))
      || (! all_adjacent
   && (((!(((enum rtx_code) (src)->code) == MEM)
  || ! find_reg_note (insn, REG_EQUIV, src))
        && use_crosses_set_p (src, ((((insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (insn) : uid_cuid[(((insn)->u.fld[0]).rtint)])))
       || (((enum rtx_code) (src)->code) == ASM_OPERANDS && (((src))->volatil))
       || ((enum rtx_code) (src)->code) == UNSPEC_VOLATILE))
      || find_reg_note (i3, REG_NO_CONFLICT, dest)
      || (succ && find_reg_note (succ, REG_NO_CONFLICT, dest))
      || (((((insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (insn) : uid_cuid[(((insn)->u.fld[0]).rtint)]) < last_call_cuid && ! ((rtx_class[(int) (((enum rtx_code) (src)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (src)->code) == CONST_VECTOR)))
    return 0;
  if ((((enum rtx_code) (dest)->code) == REG))
    {
      if ((((enum rtx_code) (src)->code) == REG)
   && (((((dest)->u.fld[0]).rtuint) < 53
        && ! ix86_hard_regno_mode_ok (((((dest)->u.fld[0]).rtuint)), (((enum machine_mode) (dest)->mode))))
       || ((((src)->u.fld[0]).rtuint) < 53
    && ! ix86_hard_regno_mode_ok (((((src)->u.fld[0]).rtuint)), (((enum machine_mode) (src)->mode))))))
 return 0;
    }
  else if (((enum rtx_code) (dest)->code) != CC0)
    return 0;
  if (((enum rtx_code) ((((i3)->u.fld[5]).rtx1))->code) == PARALLEL)
    for (i = ((((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
      if (((enum rtx_code) (((((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->code) == CLOBBER)
 {
   rtx reg = (((((((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1);
   if (rtx_equal_p (reg, dest))
     return 0;
   if (!(((enum rtx_code) (reg)->code) == REG)
       || (((reg)->u.fld[0]).rtuint) >= 53
       || !fixed_regs[(((reg)->u.fld[0]).rtuint)])
     if (reg_overlap_mentioned_p (reg, src))
       return 0;
 }
  if (((enum rtx_code) (src)->code) == ASM_OPERANDS || volatile_refs_p (src))
    {
      if (succ != 0 && volatile_refs_p ((((succ)->u.fld[5]).rtx1)))
        return 0;
      for (p = (((insn)->u.fld[2]).rtx1); p != i3; p = (((p)->u.fld[2]).rtx1))
        if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) && p != succ && volatile_refs_p ((((p)->u.fld[5]).rtx1)))
   return 0;
    }
  if (((enum rtx_code) (src)->code) == ASM_OPERANDS
      && (((enum rtx_code) (dest)->code) == REG) && (((dest)->u.fld[0]).rtuint) < 53)
    return 0;
  for (p = (((insn)->u.fld[2]).rtx1); p != i3; p = (((p)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) && p != succ && volatile_insn_p ((((p)->u.fld[5]).rtx1)))
      return 0;
  *pdest = dest;
  *psrc = src;
  return 1;
}
static int
combinable_i3pat (rtx i3, rtx *loc, rtx i2dest, rtx i1dest,
    int i1_not_in_src, rtx *pi3dest_killed)
{
  rtx x = *loc;
  if (((enum rtx_code) (x)->code) == SET)
    {
      rtx set = x ;
      rtx dest = (((set)->u.fld[0]).rtx1);
      rtx src = (((set)->u.fld[1]).rtx1);
      rtx inner_dest = dest;
      while (((enum rtx_code) (inner_dest)->code) == STRICT_LOW_PART
      || ((enum rtx_code) (inner_dest)->code) == SUBREG
      || ((enum rtx_code) (inner_dest)->code) == ZERO_EXTRACT)
 inner_dest = (((inner_dest)->u.fld[0]).rtx1);
      if ((inner_dest != dest &&
    (!(((enum rtx_code) (inner_dest)->code) == MEM)
     || rtx_equal_p (i2dest, inner_dest)
     || (i1dest && rtx_equal_p (i1dest, inner_dest)))
    && (reg_overlap_mentioned_p (i2dest, inner_dest)
        || (i1dest && reg_overlap_mentioned_p (i1dest, inner_dest))))
   || ((((enum rtx_code) (inner_dest)->code) == REG)
       && (((inner_dest)->u.fld[0]).rtuint) < 53
       && (! ix86_hard_regno_mode_ok (((((inner_dest)->u.fld[0]).rtuint)), (((enum machine_mode) (inner_dest)->mode)))
                           ))
   || (i1_not_in_src && reg_overlap_mentioned_p (i1dest, src)))
 return 0;
      if (pi3dest_killed && (((enum rtx_code) (dest)->code) == REG)
   && reg_referenced_p (dest, (((i3)->u.fld[5]).rtx1))
   && (((dest)->u.fld[0]).rtuint) != 20
   && (((dest)->u.fld[0]).rtuint) != 6
   && ((((dest)->u.fld[0]).rtuint) != 16
       || ! fixed_regs [(((dest)->u.fld[0]).rtuint)])
   && (((dest)->u.fld[0]).rtuint) != 7)
 {
   if (*pi3dest_killed)
     return 0;
   *pi3dest_killed = dest;
 }
    }
  else if (((enum rtx_code) (x)->code) == PARALLEL)
    {
      int i;
      for (i = 0; i < (((((x)->u.fld[0]).rtvec1))->num_elem); i++)
 if (! combinable_i3pat (i3, &(((((x)->u.fld[0]).rtvec1))->elem[i]), i2dest, i1dest,
    i1_not_in_src, pi3dest_killed))
   return 0;
    }
  return 1;
}
static int
contains_muldiv (rtx x)
{
  switch (((enum rtx_code) (x)->code))
    {
    case MOD: case DIV: case UMOD: case UDIV:
      return 1;
    case MULT:
      return ! (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
  && exact_log2_wide ((unsigned long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0]))) >= 0);
    default:
      if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~3)) == (RTX_COMPARE & (~3))))
 return contains_muldiv ((((x)->u.fld[0]).rtx1))
     || contains_muldiv ((((x)->u.fld[1]).rtx1));
      if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_UNARY))
 return contains_muldiv ((((x)->u.fld[0]).rtx1));
      return 0;
    }
}
static int
cant_combine_insn_p (rtx insn)
{
  rtx set;
  rtx src, dest;
  if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return 1;
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (! set)
    return 0;
  src = (((set)->u.fld[1]).rtx1);
  dest = (((set)->u.fld[0]).rtx1);
  if (((enum rtx_code) (src)->code) == SUBREG)
    src = (((src)->u.fld[0]).rtx1);
  if (((enum rtx_code) (dest)->code) == SUBREG)
    dest = (((dest)->u.fld[0]).rtx1);
  if ((((enum rtx_code) (src)->code) == REG) && (((enum rtx_code) (dest)->code) == REG)
      && (((((src)->u.fld[0]).rtuint) < 53
    && ! fixed_regs[(((src)->u.fld[0]).rtuint)]
    && ((((regclass_map[(((src)->u.fld[0]).rtuint)])) == AREG) || (((regclass_map[(((src)->u.fld[0]).rtuint)])) == DREG) || (((regclass_map[(((src)->u.fld[0]).rtuint)])) == CREG) || (((regclass_map[(((src)->u.fld[0]).rtuint)])) == BREG) || (((regclass_map[(((src)->u.fld[0]).rtuint)])) == AD_REGS) || (((regclass_map[(((src)->u.fld[0]).rtuint)])) == SIREG) || (((regclass_map[(((src)->u.fld[0]).rtuint)])) == DIREG) || (((regclass_map[(((src)->u.fld[0]).rtuint)])) == FP_TOP_REG) || (((regclass_map[(((src)->u.fld[0]).rtuint)])) == FP_SECOND_REG)))
   || ((((dest)->u.fld[0]).rtuint) < 53
       && ! fixed_regs[(((dest)->u.fld[0]).rtuint)]
       && ((((regclass_map[(((dest)->u.fld[0]).rtuint)])) == AREG) || (((regclass_map[(((dest)->u.fld[0]).rtuint)])) == DREG) || (((regclass_map[(((dest)->u.fld[0]).rtuint)])) == CREG) || (((regclass_map[(((dest)->u.fld[0]).rtuint)])) == BREG) || (((regclass_map[(((dest)->u.fld[0]).rtuint)])) == AD_REGS) || (((regclass_map[(((dest)->u.fld[0]).rtuint)])) == SIREG) || (((regclass_map[(((dest)->u.fld[0]).rtuint)])) == DIREG) || (((regclass_map[(((dest)->u.fld[0]).rtuint)])) == FP_TOP_REG) || (((regclass_map[(((dest)->u.fld[0]).rtuint)])) == FP_SECOND_REG)))))
    return 1;
  return 0;
}
static void
adjust_for_new_dest (rtx insn)
{
  rtx *loc;
  loc = &(((insn)->u.fld[8]).rtx1);
  while (*loc)
    {
      enum reg_note kind = ((enum reg_note) ((enum machine_mode) (*loc)->mode));
      if (kind == REG_EQUAL || kind == REG_EQUIV)
 *loc = (((*loc)->u.fld[1]).rtx1);
      else
 loc = &(((*loc)->u.fld[1]).rtx1);
    }
  distribute_links (gen_rtx_fmt_ue (INSN_LIST, (VOIDmode), (insn), ((rtx) 0)));
}
static rtx
try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p)
{
  rtx newpat, newi2pat = 0;
  int substed_i2 = 0, substed_i1 = 0;
  int added_sets_1, added_sets_2;
  int total_sets;
  int i2_is_used;
  int insn_code_number, i2_code_number = 0, other_code_number = 0;
  rtx i3dest_killed = 0;
  rtx i2dest, i2src, i1dest = 0, i1src = 0;
  rtx i2pat;
  int i2dest_in_i2src = 0, i1dest_in_i1src = 0, i2dest_in_i1src = 0;
  int i1_feeds_i3 = 0;
  rtx new_i3_notes, new_i2_notes;
  int i3_subst_into_i2 = 0;
  int have_mult = 0;
  int maxreg;
  rtx temp;
  rtx link;
  int i;
  if (cant_combine_insn_p (i3)
      || cant_combine_insn_p (i2)
      || (i1 && cant_combine_insn_p (i1))
      )
    return 0;
  combine_attempts++;
  undobuf.other_insn = 0;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (newpat_used_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if (i1 && ((((i1)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i1) : uid_cuid[(((i1)->u.fld[0]).rtint)]) > ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)]))
    temp = i1, i1 = i2, i2 = temp;
  added_links_insn = 0;
  if (i1 == 0 && ((enum rtx_code) (i3)->code) == INSN && ((enum rtx_code) ((((i3)->u.fld[5]).rtx1))->code) == SET
      && (((enum rtx_code) (((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->code) == REG)
      && (((((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint) >= 53
      && find_reg_note (i3, REG_DEAD, ((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1))
      && ((enum rtx_code) ((((i2)->u.fld[5]).rtx1))->code) == PARALLEL
      && ! side_effects_p (((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtx1))
      && ((enum rtx_code) (((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) != ZERO_EXTRACT
      && ((enum rtx_code) (((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) != STRICT_LOW_PART
      && ! reg_overlap_mentioned_p (((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1),
        ((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtx1))
      && next_real_insn (i2) == i3)
    {
      rtx p2 = (((i2)->u.fld[5]).rtx1);
      for (i = 0; i < (((((p2)->u.fld[0]).rtvec1))->num_elem); i++)
 if ((((enum rtx_code) ((((((p2)->u.fld[0]).rtvec1))->elem[i]))->code) == SET
      || ((enum rtx_code) ((((((p2)->u.fld[0]).rtvec1))->elem[i]))->code) == CLOBBER)
     && reg_overlap_mentioned_p (((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtx1),
     ((((((((p2)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1)))
   break;
      if (i == (((((p2)->u.fld[0]).rtvec1))->num_elem))
 for (i = 0; i < (((((p2)->u.fld[0]).rtvec1))->num_elem); i++)
   if ((((enum rtx_code) ((((((p2)->u.fld[0]).rtvec1))->elem[i]))->code) == SET
        || ((enum rtx_code) ((((((p2)->u.fld[0]).rtvec1))->elem[i]))->code) == CLOBBER)
       && ((((((((p2)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1) == ((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1))
     {
       combine_merges++;
       subst_insn = i3;
       subst_low_cuid = ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)]);
       added_sets_2 = added_sets_1 = 0;
       i2dest = ((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1);
       do_SUBST(&(((((((((p2)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1)), (((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtx1)))
                               ;
       newpat = p2;
       i3_subst_into_i2 = 1;
       goto validate_replacement;
     }
    }
  if (i1 == 0
      && (temp = (((((enum rtx_code) (i2)->code) == INSN) || (((enum rtx_code) (i2)->code) == JUMP_INSN) || (((enum rtx_code) (i2)->code) == CALL_INSN)) ? (((enum rtx_code) ((((i2)->u.fld[5]).rtx1))->code) == SET ? (((i2)->u.fld[5]).rtx1) : single_set_2 (i2, (((i2)->u.fld[5]).rtx1))) : (rtx) 0)) != 0
      && (((enum rtx_code) ((((temp)->u.fld[1]).rtx1))->code) == CONST_INT
   || ((enum rtx_code) ((((temp)->u.fld[1]).rtx1))->code) == CONST_DOUBLE)
      && (((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code) == REG)
      && mode_class[((enum machine_mode) ((((temp)->u.fld[0]).rtx1))->mode)] == MODE_INT
      && ((unsigned short) mode_size[((enum machine_mode) ((((temp)->u.fld[0]).rtx1))->mode)]) == 2 * (0 ? 8 : 4)
      && ((enum rtx_code) ((((i3)->u.fld[5]).rtx1))->code) == SET
      && ((enum rtx_code) (((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == SUBREG
      && (((((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (((temp)->u.fld[0]).rtx1)
      && mode_class[((enum machine_mode) (((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->mode)] == MODE_INT
      && ((unsigned short) mode_size[((enum machine_mode) (((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->mode)]) == (0 ? 8 : 4)
      && ((enum rtx_code) (((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
    {
      long lo, hi;
      if (((enum rtx_code) ((((temp)->u.fld[1]).rtx1))->code) == CONST_INT)
 lo = (((((temp)->u.fld[1]).rtx1))->u.hwint[0]), hi = lo < 0 ? -1 : 0;
      else
 {
   lo = (((((temp)->u.fld[1]).rtx1))->u.hwint[0]);
   hi = (((((temp)->u.fld[1]).rtx1))->u.hwint[1]);
 }
      if (subreg_lowpart_p (((((((i3)->u.fld[5]).rtx1))->u.fld[0]).rtx1)))
 {
   if ((8 * 4) < (8 * (0 ? 8 : 4)))
     fancy_abort ("gcc.c", 407820, "?");
   lo &= ~((((unsigned long) (1) << ((8 * (0 ? 8 : 4)) - 1)) << 1) - 1);
   lo |= (((((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])
   & ((((unsigned long) (1) << ((8 * (0 ? 8 : 4)) - 1)) << 1) - 1));
 }
      else if ((8 * 4) == (8 * (0 ? 8 : 4)))
 hi = ((((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
      else if ((8 * 4) >= 2 * (8 * (0 ? 8 : 4)))
 {
   int sign = -(int) ((unsigned long) lo
        >> ((8 * 4) - 1));
   lo &= ~ ((((unsigned long) ((((unsigned long) (1) << ((8 * (0 ? 8 : 4)) - 1)) << 1) - 1) << ((8 * (0 ? 8 : 4)) - 1)) << 1)
                                                );
   lo |= ((((unsigned long) (((((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])) << ((8 * (0 ? 8 : 4)) - 1)) << 1)
                                    );
   if (hi == sign)
     hi = lo < 0 ? -1 : 0;
 }
      else
 fancy_abort ("gcc.c", 407843, "?");
      combine_merges++;
      subst_insn = i3;
      subst_low_cuid = ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)]);
      added_sets_2 = added_sets_1 = 0;
      i2dest = (((temp)->u.fld[0]).rtx1);
      do_SUBST(&((((temp)->u.fld[1]).rtx1)), (immed_double_const (lo, hi, ((enum machine_mode) ((((temp)->u.fld[0]).rtx1))->mode))))
                                                              ;
      newpat = (((i2)->u.fld[5]).rtx1);
      goto validate_replacement;
    }
  if (i1 == 0 && ((enum rtx_code) ((((i2)->u.fld[5]).rtx1))->code) == PARALLEL
      && ((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) >= 2
      && ((enum rtx_code) (((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->code) == SET
      && (mode_class[((enum machine_mode) ((((((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->mode)]
   == MODE_CC)
      && ((enum rtx_code) ((((((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->code) == COMPARE
      && ((((((((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[1]).rtx1) == (const_int_rtx[64])
      && ((enum rtx_code) (((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[1]))->code) == SET
      && (((enum rtx_code) ((((((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1))->code) == REG)
      && rtx_equal_p (((((((((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1),
        (((((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1)))
    {
      for (i = ((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; i >= 2; i--)
 if (((enum rtx_code) (((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->code) != CLOBBER)
   break;
      if (i == 1)
 {
   i1 = gen_rtx_fmt_iuuBieiee (INSN, (VOIDmode), ((((i2)->u.fld[0]).rtint)), ((rtx) 0), (i2), ((((i2)->u.fld[3]).bb)), ((((i2)->u.fld[4]).rtint)), (((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[1])), (-1), ((rtx) 0), ((rtx) 0))
                 ;
   do_SUBST(&((((i2)->u.fld[5]).rtx1)), (((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0])));
   do_SUBST(&((((((((((i2)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1)), (((((((i1)->u.fld[5]).rtx1))->u.fld[0]).rtx1)))
                           ;
 }
    }
  if (! can_combine_p (i2, i3, i1, (rtx) 0, &i2dest, &i2src)
      || (i1 && ! can_combine_p (i1, i3, (rtx) 0, i2, &i1dest, &i1src)))
    {
      undo_all ();
      return 0;
    }
  i2dest_in_i2src = reg_overlap_mentioned_p (i2dest, i2src);
  i1dest_in_i1src = i1 && reg_overlap_mentioned_p (i1dest, i1src);
  i2dest_in_i1src = i1 && reg_overlap_mentioned_p (i2dest, i1src);
  i1_feeds_i3 = i1 && ! reg_overlap_mentioned_p (i1dest, i2src);
  if (! combinable_i3pat (i3, &(((i3)->u.fld[5]).rtx1), i2dest, i1dest,
     i1 && i2dest_in_i1src && i1_feeds_i3,
     &i3dest_killed))
    {
      undo_all ();
      return 0;
    }
  if (((enum rtx_code) (i2src)->code) == MULT
      || (i1 != 0 && ((enum rtx_code) (i1src)->code) == MULT)
      || (((enum rtx_code) ((((i3)->u.fld[5]).rtx1))->code) == SET
   && ((enum rtx_code) (((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->code) == MULT))
    have_mult = 1;
  added_sets_2 = ! dead_or_set_p (i3, i2dest);
  added_sets_1
    = i1 && ! (i1_feeds_i3 ? dead_or_set_p (i3, i1dest)
        : (dead_or_set_p (i3, i1dest) || dead_or_set_p (i2, i1dest)));
  i2pat = (((enum rtx_code) ((((i2)->u.fld[5]).rtx1))->code) == PARALLEL
    ? gen_rtx_fmt_ee (SET, (VOIDmode), (i2dest), (i2src))
    : (((i2)->u.fld[5]).rtx1));
  if (added_sets_2)
    i2pat = copy_rtx (i2pat);
  combine_merges++;
  maxreg = max_reg_num ();
  subst_insn = i3;
  if (flag_expensive_optimizations)
    {
      if (i1)
 {
   subst_low_cuid = ((((i1)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i1) : uid_cuid[(((i1)->u.fld[0]).rtint)]);
   i1src = subst (i1src, (global_rtl[GR_PC]), (global_rtl[GR_PC]), 0, 0);
 }
      else
 {
   subst_low_cuid = ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)]);
   i2src = subst (i2src, (global_rtl[GR_PC]), (global_rtl[GR_PC]), 0, 0);
 }
    }
  if (i1 == 0 && added_sets_2 && ((enum rtx_code) ((((i3)->u.fld[5]).rtx1))->code) == SET
      && ((enum rtx_code) (((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->code) == COMPARE
      && (((((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1) == (const_int_rtx[64])
      && rtx_equal_p ((((((((((i3)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1), i2dest))
    {
      rtx *cc_use;
      enum machine_mode compare_mode;
      newpat = (((i3)->u.fld[5]).rtx1);
      do_SUBST(&(((((((newpat)->u.fld[1]).rtx1))->u.fld[0]).rtx1)), (i2src));
      i2_is_used = 1;
      if (undobuf.other_insn == 0
   && (cc_use = find_single_use ((((newpat)->u.fld[0]).rtx1), i3,
     &undobuf.other_insn))
   && ((compare_mode = ix86_cc_mode ((((enum rtx_code) (*cc_use)->code)), (i2src), ((const_int_rtx[64])))
                             )
       != ((enum machine_mode) ((((newpat)->u.fld[0]).rtx1))->mode)))
 {
   unsigned int regno = ((((((newpat)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
   rtx new_dest = gen_rtx_REG (compare_mode, regno);
   if (regno < 53
       || ((((reg_n_info)->data.reg[regno])->sets) == 1 && ! added_sets_2
    && ! ((((((newpat)->u.fld[0]).rtx1)))->volatil)))
     {
       if (regno >= 53)
  do_SUBST(&((cfun->emit->x_regno_reg_rtx)[regno]), (new_dest));
       do_SUBST(&((((newpat)->u.fld[0]).rtx1)), (new_dest));
       do_SUBST(&((((*cc_use)->u.fld[0]).rtx1)), (new_dest));
       do_SUBST(&((((newpat)->u.fld[1]).rtx1)), (gen_rtx_fmt_ee (COMPARE, (compare_mode), (i2src), ((const_int_rtx[64])))))
                                                         ;
     }
   else
     undobuf.other_insn = 0;
 }
    }
  else
    {
      n_pseudo_occurrences = 0;
      subst_low_cuid = ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)]);
      newpat = subst ((((i3)->u.fld[5]).rtx1), i2dest, i2src, 0,
        ! i1_feeds_i3 && i1dest_in_i1src);
      substed_i2 = 1;
      i2_is_used = n_pseudo_occurrences;
    }
  if (i1 && ((enum rtx_code) (newpat)->code) != CLOBBER)
    {
      if (! combinable_i3pat ((rtx) 0, &newpat, i1dest, (rtx) 0,
         0, (rtx*) 0))
 {
   undo_all ();
   return 0;
 }
      n_pseudo_occurrences = 0;
      subst_low_cuid = ((((i1)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i1) : uid_cuid[(((i1)->u.fld[0]).rtint)]);
      newpat = subst (newpat, i1dest, i1src, 0, 0);
      substed_i1 = 1;
    }
  if ((0 != 0
       && i2_is_used + added_sets_2 > 1)
      || (i1 != 0 && 0 != 0
   && (n_pseudo_occurrences + added_sets_1 + (added_sets_2 && ! i1_feeds_i3)
       > 1))
      || max_reg_num () != maxreg
      || ((enum rtx_code) (newpat)->code) == CLOBBER
      || (((enum rtx_code) (newpat)->code) == SET && ((enum rtx_code) ((((newpat)->u.fld[1]).rtx1))->code) == MULT
   && ! have_mult))
    {
      undo_all ();
      return 0;
    }
  if (added_sets_1 || added_sets_2)
    {
      combine_extras++;
      if (((enum rtx_code) (newpat)->code) == PARALLEL)
 {
   rtvec old = (((newpat)->u.fld[0]).rtvec1);
   total_sets = (((((newpat)->u.fld[0]).rtvec1))->num_elem) + added_sets_1 + added_sets_2;
   newpat = gen_rtx_fmt_E (PARALLEL, (VOIDmode), (rtvec_alloc (total_sets)));
   memcpy ((((newpat)->u.fld[0]).rtvec1)->elem, &old->elem[0],
    sizeof (old->elem[0]) * old->num_elem);
 }
      else
 {
   rtx old = newpat;
   total_sets = 1 + added_sets_1 + added_sets_2;
   newpat = gen_rtx_fmt_E (PARALLEL, (VOIDmode), (rtvec_alloc (total_sets)));
   (((((newpat)->u.fld[0]).rtvec1))->elem[0]) = old;
 }
      if (added_sets_1)
 (((((newpat)->u.fld[0]).rtvec1))->elem[--total_sets])
   = (((enum rtx_code) ((((i1)->u.fld[5]).rtx1))->code) == PARALLEL
      ? gen_rtx_fmt_ee (SET, (VOIDmode), (i1dest), (i1src)) : (((i1)->u.fld[5]).rtx1));
      if (added_sets_2)
 {
   if (i1 == 0)
     (((((newpat)->u.fld[0]).rtvec1))->elem[--total_sets]) = i2pat;
   else
     (((((newpat)->u.fld[0]).rtvec1))->elem[--total_sets])
       = subst (i2pat, i1dest, i1src, 0, 0);
 }
    }
 validate_replacement:
  mark_used_regs_combine (newpat);
  insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
  if (insn_code_number < 0
      && !(added_sets_2 && i1 == 0)
      && ((enum rtx_code) (newpat)->code) == PARALLEL
      && (((((newpat)->u.fld[0]).rtvec1))->num_elem) == 2
      && ((enum rtx_code) ((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->code) == SET
      && ((enum rtx_code) ((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->code) == SET
      && asm_noperands (newpat) < 0)
    {
      rtx set0 = (((((newpat)->u.fld[0]).rtvec1))->elem[0]);
      rtx set1 = (((((newpat)->u.fld[0]).rtvec1))->elem[1]);
      rtx note;
      if ((((((enum rtx_code) ((((set1)->u.fld[0]).rtx1))->code) == REG)
     && find_reg_note (i3, REG_UNUSED, (((set1)->u.fld[0]).rtx1)))
    || (((enum rtx_code) ((((set1)->u.fld[0]).rtx1))->code) == SUBREG
        && find_reg_note (i3, REG_UNUSED, ((((((set1)->u.fld[0]).rtx1))->u.fld[0]).rtx1))))
   && (!(note = find_reg_note (i3, REG_EH_REGION, (rtx) 0))
       || (((((note)->u.fld[0]).rtx1))->u.hwint[0]) <= 0)
   && ! side_effects_p ((((set1)->u.fld[1]).rtx1)))
 {
   newpat = set0;
   insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
 }
      else if ((((((enum rtx_code) ((((set0)->u.fld[0]).rtx1))->code) == REG)
   && find_reg_note (i3, REG_UNUSED, (((set0)->u.fld[0]).rtx1)))
  || (((enum rtx_code) ((((set0)->u.fld[0]).rtx1))->code) == SUBREG
      && find_reg_note (i3, REG_UNUSED,
          ((((((set0)->u.fld[0]).rtx1))->u.fld[0]).rtx1))))
        && (!(note = find_reg_note (i3, REG_EH_REGION, (rtx) 0))
     || (((((note)->u.fld[0]).rtx1))->u.hwint[0]) <= 0)
        && ! side_effects_p ((((set0)->u.fld[1]).rtx1)))
 {
   newpat = set1;
   insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
   if (insn_code_number >= 0)
     {
       (((i3)->u.fld[5]).rtx1) = newpat;
       adjust_for_new_dest (i3);
     }
 }
    }
  if (i1 && insn_code_number < 0 && ((enum rtx_code) (newpat)->code) == SET
      && asm_noperands (newpat) < 0)
    {
      rtx m_split, *split;
      rtx ni2dest = i2dest;
      m_split = split_insns (newpat, i3);
      if (m_split == 0 && ! reg_overlap_mentioned_p (ni2dest, newpat))
 {
   if (((enum machine_mode) ((((newpat)->u.fld[0]).rtx1))->mode) != ((enum machine_mode) (i2dest)->mode)
       && ((enum machine_mode) ((((newpat)->u.fld[0]).rtx1))->mode) != VOIDmode
       && (((enum rtx_code) (i2dest)->code) == REG)
       && ((((i2dest)->u.fld[0]).rtuint) < 53
    || ((((reg_n_info)->data.reg[(((i2dest)->u.fld[0]).rtuint)])->sets) == 1 && ! added_sets_2
        && ! (((i2dest))->volatil))))
     ni2dest = gen_rtx_REG (((enum machine_mode) ((((newpat)->u.fld[0]).rtx1))->mode),
       (((i2dest)->u.fld[0]).rtuint));
   m_split = split_insns (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, newpat, gen_rtx_fmt_e (CLOBBER, (VOIDmode), (ni2dest)))))
                       ,
     i3);
   if (! m_split && ni2dest != i2dest)
     {
       ni2dest = i2dest;
       m_split = split_insns (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, newpat, gen_rtx_fmt_e (CLOBBER, (VOIDmode), (i2dest)))))
                   ,
         i3);
     }
 }
      if (m_split && (((m_split)->u.fld[2]).rtx1) == (rtx) 0)
 {
   m_split = (((m_split)->u.fld[5]).rtx1);
   insn_code_number = recog_for_combine (&m_split, i3, &new_i3_notes);
   if (insn_code_number >= 0)
     newpat = m_split;
 }
      else if (m_split && ((((((m_split)->u.fld[2]).rtx1))->u.fld[2]).rtx1) == (rtx) 0
        && (next_real_insn (i2) == i3
     || ! use_crosses_set_p ((((m_split)->u.fld[5]).rtx1), ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)]))))
 {
   rtx i2set, i3set;
   rtx newi3pat = ((((((m_split)->u.fld[2]).rtx1))->u.fld[5]).rtx1);
   newi2pat = (((m_split)->u.fld[5]).rtx1);
   i3set = (((((enum rtx_code) ((((m_split)->u.fld[2]).rtx1))->code) == INSN) || (((enum rtx_code) ((((m_split)->u.fld[2]).rtx1))->code) == JUMP_INSN) || (((enum rtx_code) ((((m_split)->u.fld[2]).rtx1))->code) == CALL_INSN)) ? (((enum rtx_code) (((((((m_split)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->code) == SET ? ((((((m_split)->u.fld[2]).rtx1))->u.fld[5]).rtx1) : single_set_2 ((((m_split)->u.fld[2]).rtx1), ((((((m_split)->u.fld[2]).rtx1))->u.fld[5]).rtx1))) : (rtx) 0);
   i2set = (((((enum rtx_code) (m_split)->code) == INSN) || (((enum rtx_code) (m_split)->code) == JUMP_INSN) || (((enum rtx_code) (m_split)->code) == CALL_INSN)) ? (((enum rtx_code) ((((m_split)->u.fld[5]).rtx1))->code) == SET ? (((m_split)->u.fld[5]).rtx1) : single_set_2 (m_split, (((m_split)->u.fld[5]).rtx1))) : (rtx) 0);
   if ((((i2dest)->u.fld[0]).rtuint) >= 53)
     do_SUBST(&((cfun->emit->x_regno_reg_rtx)[(((i2dest)->u.fld[0]).rtuint)]), (ni2dest));
   i2_code_number = recog_for_combine (&newi2pat, i2, &new_i2_notes);
   if (i2_code_number >= 0 && i2set && i3set
       && (next_real_insn (i2) == i3
    || ! reg_used_between_p ((((i2set)->u.fld[0]).rtx1), i2, i3)))
     insn_code_number = recog_for_combine (&newi3pat, i3,
        &new_i3_notes);
   if (insn_code_number >= 0)
     newpat = newi3pat;
   if (insn_code_number >= 0)
     {
       rtx new_i3_dest = (((i3set)->u.fld[0]).rtx1);
       rtx new_i2_dest = (((i2set)->u.fld[0]).rtx1);
       while (((enum rtx_code) (new_i3_dest)->code) == ZERO_EXTRACT
       || ((enum rtx_code) (new_i3_dest)->code) == STRICT_LOW_PART
       || ((enum rtx_code) (new_i3_dest)->code) == SUBREG)
  new_i3_dest = (((new_i3_dest)->u.fld[0]).rtx1);
       while (((enum rtx_code) (new_i2_dest)->code) == ZERO_EXTRACT
       || ((enum rtx_code) (new_i2_dest)->code) == STRICT_LOW_PART
       || ((enum rtx_code) (new_i2_dest)->code) == SUBREG)
  new_i2_dest = (((new_i2_dest)->u.fld[0]).rtx1);
       if ((((enum rtx_code) (new_i3_dest)->code) == REG)
    && (((enum rtx_code) (new_i2_dest)->code) == REG)
    && (((new_i3_dest)->u.fld[0]).rtuint) == (((new_i2_dest)->u.fld[0]).rtuint))
  (((reg_n_info)->data.reg[(((new_i2_dest)->u.fld[0]).rtuint)])->sets)++;
     }
 }
      if (insn_code_number < 0 && (split = find_split_point (&newpat, i3)) != 0
   && (((enum machine_mode) (*split)->mode) == ((enum machine_mode) (i2dest)->mode)
       || ((enum machine_mode) (*split)->mode) == VOIDmode
       || (((i2dest)->u.fld[0]).rtuint) < 53
       || ((((reg_n_info)->data.reg[(((i2dest)->u.fld[0]).rtuint)])->sets) == 1 && ! added_sets_2
    && ! (((i2dest))->volatil)))
   && (next_real_insn (i2) == i3
       || ! use_crosses_set_p (*split, ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)])))
   && ! reg_referenced_p (i2dest, newpat))
 {
   rtx newdest = i2dest;
   enum rtx_code split_code = ((enum rtx_code) (*split)->code);
   enum machine_mode split_mode = ((enum machine_mode) (*split)->mode);
   if (((enum machine_mode) (i2dest)->mode) != split_mode && split_mode != VOIDmode)
     {
       newdest = gen_rtx_REG (split_mode, (((i2dest)->u.fld[0]).rtuint));
       if ((((i2dest)->u.fld[0]).rtuint) >= 53)
  do_SUBST(&((cfun->emit->x_regno_reg_rtx)[(((i2dest)->u.fld[0]).rtuint)]), (newdest));
     }
   if (split_code == MULT
       && ((enum rtx_code) ((((*split)->u.fld[1]).rtx1))->code) == CONST_INT
       && (((((*split)->u.fld[1]).rtx1))->u.hwint[0]) > 0
       && (i = exact_log2_wide ((unsigned long) ((((((*split)->u.fld[1]).rtx1))->u.hwint[0])))) >= 0)
     {
       do_SUBST(&(*split), (gen_rtx_fmt_ee (ASHIFT, (split_mode), ((((*split)->u.fld[0]).rtx1)), (gen_rtx_CONST_INT (VOIDmode, (long) (i))))))
                                         ;
       split_code = ((enum rtx_code) (*split)->code);
     }
   if (split_code == SUBREG && (((enum rtx_code) ((((*split)->u.fld[0]).rtx1))->code) == MEM))
     {
  do_SUBST(&(*split), (gen_rtx_fmt_e (ZERO_EXTEND, (split_mode), ((((*split)->u.fld[0]).rtx1)))))
                               ;
     }
   newi2pat = gen_rtx_fmt_ee (SET, (VOIDmode), (newdest), (*split));
   do_SUBST(&(*split), (newdest));
   i2_code_number = recog_for_combine (&newi2pat, i2, &new_i2_notes);
   if (i2_code_number >= 0 && ! (split_code == MULT && ! have_mult))
     insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
 }
    }
  else if (i1 && insn_code_number < 0 && asm_noperands (newpat) < 0
    && ((enum rtx_code) (newpat)->code) == PARALLEL
    && (((((newpat)->u.fld[0]).rtvec1))->num_elem) == 2
    && ((enum rtx_code) ((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->code) == SET
    && ((enum rtx_code) (((((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->code) == SIGN_EXTEND
    && (((enum machine_mode) (((((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->mode)
        == ((enum machine_mode) (((((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->mode))
    && ((enum rtx_code) ((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->code) == SET
    && rtx_equal_p (((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1),
      (((((((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[0]).rtx1))
    && ! use_crosses_set_p (((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1),
       ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)]))
    && ((enum rtx_code) (((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1))->code) != ZERO_EXTRACT
    && ((enum rtx_code) (((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1))->code) != STRICT_LOW_PART
    && ! (temp = ((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1),
   ((((enum rtx_code) (temp)->code) == REG)
    && reg_stat[(((temp)->u.fld[0]).rtuint)].nonzero_bits != 0
    && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (temp)->mode)]) * 8)) < (8 * (0 ? 8 : 4))
    && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (temp)->mode)]) * 8)) < (8 * 4)
    && (reg_stat[(((temp)->u.fld[0]).rtuint)].nonzero_bits
        != mode_mask_array[word_mode])))
    && ! (((enum rtx_code) (((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1))->code) == SUBREG
   && (temp = (((((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1))->u.fld[0]).rtx1),
       ((((enum rtx_code) (temp)->code) == REG)
        && reg_stat[(((temp)->u.fld[0]).rtuint)].nonzero_bits != 0
        && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (temp)->mode)]) * 8)) < (8 * (0 ? 8 : 4))
        && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (temp)->mode)]) * 8)) < (8 * 4)
        && (reg_stat[(((temp)->u.fld[0]).rtuint)].nonzero_bits
     != mode_mask_array[word_mode]))))
    && ! reg_overlap_mentioned_p (((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1),
      ((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))
    && ! find_reg_note (i3, REG_UNUSED,
          ((((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1)))
    {
      rtx ni2dest;
      newi2pat = (((((newpat)->u.fld[0]).rtvec1))->elem[0]);
      ni2dest = ((((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1);
      newpat = (((((newpat)->u.fld[0]).rtvec1))->elem[1]);
      do_SUBST(&((((newpat)->u.fld[1]).rtx1)), (rtl_hooks.gen_lowpart (((enum machine_mode) ((((newpat)->u.fld[1]).rtx1))->mode), ni2dest)))
                                                         ;
      i2_code_number = recog_for_combine (&newi2pat, i2, &new_i2_notes);
      if (i2_code_number >= 0)
 insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
      if (insn_code_number >= 0)
 {
   rtx insn;
   rtx link;
   (((i3)->u.fld[5]).rtx1) = newpat;
   adjust_for_new_dest (i3);
   for (insn = (((i3)->u.fld[2]).rtx1);
        insn && (this_basic_block->next_bb == EXIT_BLOCK_PTR
   || insn != (this_basic_block->next_bb)->head_);
        insn = (((insn)->u.fld[2]).rtx1))
     {
       if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && reg_referenced_p (ni2dest, (((insn)->u.fld[5]).rtx1)))
  {
    for (link = (((insn)->u.fld[7]).rtx1); link;
         link = (((link)->u.fld[1]).rtx1))
      if ((((link)->u.fld[0]).rtx1) == i3)
        (((link)->u.fld[0]).rtx1) = i1;
    break;
  }
     }
 }
    }
  else if (i1 && insn_code_number < 0 && asm_noperands (newpat) < 0
    && ((enum rtx_code) (newpat)->code) == PARALLEL
    && (((((newpat)->u.fld[0]).rtvec1))->num_elem) == 2
    && ((enum rtx_code) ((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->code) == SET
    && ((enum rtx_code) (((((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->code) != ZERO_EXTRACT
    && ((enum rtx_code) (((((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->code) != STRICT_LOW_PART
    && ((enum rtx_code) ((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->code) == SET
    && ((enum rtx_code) (((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1))->code) != ZERO_EXTRACT
    && ((enum rtx_code) (((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1))->code) != STRICT_LOW_PART
    && ! use_crosses_set_p (((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1),
       ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)]))
    && ((enum rtx_code) (((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1))->code) != USE
    && ((enum rtx_code) (((((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->code) != USE
    && ! reg_referenced_p (((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[0]).rtx1),
      (((((newpat)->u.fld[0]).rtvec1))->elem[0]))
    && ! reg_referenced_p (((((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1),
      (((((newpat)->u.fld[0]).rtvec1))->elem[1]))
    && ! (contains_muldiv (((((((((newpat)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))
   && contains_muldiv (((((((((newpat)->u.fld[0]).rtvec1))->elem[1]))->u.fld[1]).rtx1))))
    {
 {
   newi2pat = (((((newpat)->u.fld[0]).rtvec1))->elem[1]);
   newpat = (((((newpat)->u.fld[0]).rtvec1))->elem[0]);
 }
      i2_code_number = recog_for_combine (&newi2pat, i2, &new_i2_notes);
      if (i2_code_number >= 0)
 insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
    }
  if ((insn_code_number < 0
       && (! check_asm_operands (newpat) || added_sets_1 || added_sets_2)))
    {
      undo_all ();
      return 0;
    }
  if (undobuf.other_insn)
    {
      rtx other_pat = (((undobuf.other_insn)->u.fld[5]).rtx1);
      rtx new_other_notes;
      rtx note, next;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (newpat_used_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      other_code_number = recog_for_combine (&other_pat, undobuf.other_insn,
          &new_other_notes);
      if (other_code_number < 0 && ! check_asm_operands (other_pat))
 {
   undo_all ();
   return 0;
 }
      (((undobuf.other_insn)->u.fld[5]).rtx1) = other_pat;
      for (note = (((undobuf.other_insn)->u.fld[8]).rtx1); note; note = next)
 {
   next = (((note)->u.fld[1]).rtx1);
   if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_UNUSED
       && ! reg_set_p ((((note)->u.fld[0]).rtx1), (((undobuf.other_insn)->u.fld[5]).rtx1)))
     {
       if ((((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG))
  (((reg_n_info)->data.reg[((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])->deaths)--;
       remove_note (undobuf.other_insn, note);
     }
 }
      for (note = new_other_notes; note; note = (((note)->u.fld[1]).rtx1))
 if ((((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG))
   (((reg_n_info)->data.reg[((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])->deaths)++;
      distribute_notes (new_other_notes, undobuf.other_insn,
   undobuf.other_insn, (rtx) 0);
    }
  if (!combine_validate_cost (i1, i2, i3, newpat, newi2pat))
    {
      undo_all ();
      return 0;
    }
  {
    rtx i3notes, i2notes, i1notes = 0;
    rtx i3links, i2links, i1links = 0;
    rtx midnotes = 0;
    unsigned int regno;
    i3notes = (((i3)->u.fld[8]).rtx1), i3links = (((i3)->u.fld[7]).rtx1);
    i2notes = (((i2)->u.fld[8]).rtx1), i2links = (((i2)->u.fld[7]).rtx1);
    if (i1)
      i1notes = (((i1)->u.fld[8]).rtx1), i1links = (((i1)->u.fld[7]).rtx1);
    reset_used_flags (i3notes);
    reset_used_flags (i2notes);
    reset_used_flags (i1notes);
    reset_used_flags (newpat);
    reset_used_flags (newi2pat);
    if (undobuf.other_insn)
      reset_used_flags ((((undobuf.other_insn)->u.fld[5]).rtx1));
    i3notes = copy_rtx_if_shared (i3notes);
    i2notes = copy_rtx_if_shared (i2notes);
    i1notes = copy_rtx_if_shared (i1notes);
    newpat = copy_rtx_if_shared (newpat);
    newi2pat = copy_rtx_if_shared (newi2pat);
    if (undobuf.other_insn)
      reset_used_flags ((((undobuf.other_insn)->u.fld[5]).rtx1));
    (((i3)->u.fld[6]).rtint) = insn_code_number;
    (((i3)->u.fld[5]).rtx1) = newpat;
    if (((enum rtx_code) (i3)->code) == CALL_INSN && (((i3)->u.fld[9]).rtx1))
      {
 rtx call_usage = (((i3)->u.fld[9]).rtx1);
 reset_used_flags (call_usage);
 call_usage = copy_rtx (call_usage);
 if (substed_i2)
   replace_rtx (call_usage, i2dest, i2src);
 if (substed_i1)
   replace_rtx (call_usage, i1dest, i1src);
 (((i3)->u.fld[9]).rtx1) = call_usage;
      }
    if (undobuf.other_insn)
      (((undobuf.other_insn)->u.fld[6]).rtint) = other_code_number;
    if (i3_subst_into_i2)
      {
 for (i = 0; i < ((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem); i++)
   if (((enum rtx_code) (((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->code) != USE
       && (((enum rtx_code) ((((((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1))->code) == REG)
       && (((((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1) != i2dest
       && ! find_reg_note (i2, REG_UNUSED,
      (((((((((((i2)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1)))
     for (temp = (((i2)->u.fld[2]).rtx1);
   temp && (this_basic_block->next_bb == EXIT_BLOCK_PTR
     || (this_basic_block)->head_ != temp);
   temp = (((temp)->u.fld[2]).rtx1))
       if (temp != i3 && ((((enum rtx_code) (temp)->code) == INSN) || (((enum rtx_code) (temp)->code) == JUMP_INSN) || (((enum rtx_code) (temp)->code) == CALL_INSN)))
  for (link = (((temp)->u.fld[7]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
    if ((((link)->u.fld[0]).rtx1) == i2)
      (((link)->u.fld[0]).rtx1) = i3;
 if (i3notes)
   {
     rtx link = i3notes;
     while ((((link)->u.fld[1]).rtx1))
       link = (((link)->u.fld[1]).rtx1);
     (((link)->u.fld[1]).rtx1) = i2notes;
   }
 else
   i3notes = i2notes;
 i2notes = 0;
      }
    (((i3)->u.fld[7]).rtx1) = 0;
    (((i3)->u.fld[8]).rtx1) = 0;
    (((i2)->u.fld[7]).rtx1) = 0;
    (((i2)->u.fld[8]).rtx1) = 0;
    if (newi2pat)
      {
 (((i2)->u.fld[6]).rtint) = i2_code_number;
 (((i2)->u.fld[5]).rtx1) = newi2pat;
      }
    else
      (((i2)->code = (NOTE)), (((i2)->u.fld[4]).rtstr) = 0, (((i2)->u.fld[5]).rtint) = NOTE_INSN_DELETED);
    if (i1)
      {
 (((i1)->u.fld[7]).rtx1) = 0;
 (((i1)->u.fld[8]).rtx1) = 0;
 (((i1)->code = (NOTE)), (((i1)->u.fld[4]).rtstr) = 0, (((i1)->u.fld[5]).rtint) = NOTE_INSN_DELETED);
      }
    if (newi2pat)
      {
 move_deaths (newi2pat, (rtx) 0, ((((i1)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i1) : uid_cuid[(((i1)->u.fld[0]).rtint)]), i2, &midnotes);
 move_deaths (newpat, newi2pat, ((((i1)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i1) : uid_cuid[(((i1)->u.fld[0]).rtint)]), i3, &midnotes);
      }
    else
      move_deaths (newpat, (rtx) 0, i1 ? ((((i1)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i1) : uid_cuid[(((i1)->u.fld[0]).rtint)]) : ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)]),
     i3, &midnotes);
    if (i3notes)
      distribute_notes (i3notes, i3, i3, newi2pat ? i2 : (rtx) 0);
    if (i2notes)
      distribute_notes (i2notes, i2, i3, newi2pat ? i2 : (rtx) 0);
    if (i1notes)
      distribute_notes (i1notes, i1, i3, newi2pat ? i2 : (rtx) 0);
    if (midnotes)
      distribute_notes (midnotes, (rtx) 0, i3, newi2pat ? i2 : (rtx) 0);
    if (newi2pat && new_i2_notes)
      {
 for (temp = new_i2_notes; temp; temp = (((temp)->u.fld[1]).rtx1))
   if ((((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code) == REG))
     (((reg_n_info)->data.reg[((((((temp)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])->deaths)++;
 distribute_notes (new_i2_notes, i2, i2, (rtx) 0);
      }
    if (new_i3_notes)
      {
 for (temp = new_i3_notes; temp; temp = (((temp)->u.fld[1]).rtx1))
   if ((((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code) == REG))
     (((reg_n_info)->data.reg[((((((temp)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])->deaths)++;
 distribute_notes (new_i3_notes, i3, i3, (rtx) 0);
      }
    if (i3dest_killed)
      {
 if ((((enum rtx_code) (i3dest_killed)->code) == REG))
   (((reg_n_info)->data.reg[(((i3dest_killed)->u.fld[0]).rtuint)])->deaths)++;
 if (newi2pat && reg_set_p (i3dest_killed, newi2pat))
   distribute_notes (gen_rtx_fmt_ee (EXPR_LIST, (REG_DEAD), (i3dest_killed), ((rtx) 0))
                     ,
       (rtx) 0, i2, (rtx) 0);
 else
   distribute_notes (gen_rtx_fmt_ee (EXPR_LIST, (REG_DEAD), (i3dest_killed), ((rtx) 0))
                     ,
       (rtx) 0, i3, newi2pat ? i2 : (rtx) 0);
      }
    if (i2dest_in_i2src)
      {
 if ((((enum rtx_code) (i2dest)->code) == REG))
   (((reg_n_info)->data.reg[(((i2dest)->u.fld[0]).rtuint)])->deaths)++;
 if (newi2pat && reg_set_p (i2dest, newi2pat))
   distribute_notes (gen_rtx_fmt_ee (EXPR_LIST, (REG_DEAD), (i2dest), ((rtx) 0)),
       (rtx) 0, i2, (rtx) 0);
 else
   distribute_notes (gen_rtx_fmt_ee (EXPR_LIST, (REG_DEAD), (i2dest), ((rtx) 0)),
       (rtx) 0, i3, newi2pat ? i2 : (rtx) 0);
      }
    if (i1dest_in_i1src)
      {
 if ((((enum rtx_code) (i1dest)->code) == REG))
   (((reg_n_info)->data.reg[(((i1dest)->u.fld[0]).rtuint)])->deaths)++;
 if (newi2pat && reg_set_p (i1dest, newi2pat))
   distribute_notes (gen_rtx_fmt_ee (EXPR_LIST, (REG_DEAD), (i1dest), ((rtx) 0)),
       (rtx) 0, i2, (rtx) 0);
 else
   distribute_notes (gen_rtx_fmt_ee (EXPR_LIST, (REG_DEAD), (i1dest), ((rtx) 0)),
       (rtx) 0, i3, newi2pat ? i2 : (rtx) 0);
      }
    distribute_links (i3links);
    distribute_links (i2links);
    distribute_links (i1links);
    if ((((enum rtx_code) (i2dest)->code) == REG))
      {
 rtx link;
 rtx i2_insn = 0, i2_val = 0, set;
 for (link = (((i3)->u.fld[7]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
   if ((set = (((((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == INSN) || (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == JUMP_INSN) || (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == CALL_INSN)) ? (((enum rtx_code) (((((((link)->u.fld[0]).rtx1))->u.fld[5]).rtx1))->code) == SET ? ((((((link)->u.fld[0]).rtx1))->u.fld[5]).rtx1) : single_set_2 ((((link)->u.fld[0]).rtx1), ((((((link)->u.fld[0]).rtx1))->u.fld[5]).rtx1))) : (rtx) 0)) != 0
       && rtx_equal_p (i2dest, (((set)->u.fld[0]).rtx1)))
     i2_insn = (((link)->u.fld[0]).rtx1), i2_val = (((set)->u.fld[1]).rtx1);
 record_value_for_reg (i2dest, i2_insn, i2_val);
 if (! added_sets_2
     && (newi2pat == 0 || ! reg_mentioned_p (i2dest, newi2pat))
     && ! i2dest_in_i2src)
   {
     regno = (((i2dest)->u.fld[0]).rtuint);
     (((reg_n_info)->data.reg[regno])->sets)--;
   }
      }
    if (i1 && (((enum rtx_code) (i1dest)->code) == REG))
      {
 rtx link;
 rtx i1_insn = 0, i1_val = 0, set;
 for (link = (((i3)->u.fld[7]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
   if ((set = (((((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == INSN) || (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == JUMP_INSN) || (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == CALL_INSN)) ? (((enum rtx_code) (((((((link)->u.fld[0]).rtx1))->u.fld[5]).rtx1))->code) == SET ? ((((((link)->u.fld[0]).rtx1))->u.fld[5]).rtx1) : single_set_2 ((((link)->u.fld[0]).rtx1), ((((((link)->u.fld[0]).rtx1))->u.fld[5]).rtx1))) : (rtx) 0)) != 0
       && rtx_equal_p (i1dest, (((set)->u.fld[0]).rtx1)))
     i1_insn = (((link)->u.fld[0]).rtx1), i1_val = (((set)->u.fld[1]).rtx1);
 record_value_for_reg (i1dest, i1_insn, i1_val);
 regno = (((i1dest)->u.fld[0]).rtuint);
 if (! added_sets_1 && ! i1dest_in_i1src)
   (((reg_n_info)->data.reg[regno])->sets)--;
      }
    if (newi2pat)
      note_stores (newi2pat, set_nonzero_bits_and_sign_copies, ((void *)0));
    note_stores (newpat, set_nonzero_bits_and_sign_copies, ((void *)0));
    if (returnjump_p (i3) || any_uncondjump_p (i3))
      {
 *new_direct_jump_p = 1;
 mark_jump_label ((((i3)->u.fld[5]).rtx1), i3, 0);
 if ((temp = next_nonnote_insn (i3)) == (rtx) 0
     || ((enum rtx_code) (temp)->code) != BARRIER)
   emit_barrier_after (i3);
      }
    if (undobuf.other_insn != (rtx) 0
 && (returnjump_p (undobuf.other_insn)
     || any_uncondjump_p (undobuf.other_insn)))
      {
 *new_direct_jump_p = 1;
 if ((temp = next_nonnote_insn (undobuf.other_insn)) == (rtx) 0
     || ((enum rtx_code) (temp)->code) != BARRIER)
   emit_barrier_after (undobuf.other_insn);
      }
    if (((enum rtx_code) (newpat)->code) == SET
 && (((newpat)->u.fld[1]).rtx1) == (global_rtl[GR_PC])
 && (((newpat)->u.fld[0]).rtx1) == (global_rtl[GR_PC]))
      *new_direct_jump_p = 1;
  }
  combine_successes++;
  undo_commit ();
  if (added_links_insn
      && (newi2pat == 0 || ((((added_links_insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (added_links_insn) : uid_cuid[(((added_links_insn)->u.fld[0]).rtint)]) < ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)]))
      && ((((added_links_insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (added_links_insn) : uid_cuid[(((added_links_insn)->u.fld[0]).rtint)]) < ((((i3)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i3) : uid_cuid[(((i3)->u.fld[0]).rtint)]))
    return added_links_insn;
  else
    return newi2pat ? i2 : i3;
}
static void
undo_all (void)
{
  struct undo *undo, *next;
  for (undo = undobuf.undos; undo; undo = next)
    {
      next = undo->next;
      if (undo->is_int)
 *undo->where.i = undo->old_contents.i;
      else
 *undo->where.r = undo->old_contents.r;
      undo->next = undobuf.frees;
      undobuf.frees = undo;
    }
  undobuf.undos = 0;
}
static void
undo_commit (void)
{
  struct undo *undo, *next;
  for (undo = undobuf.undos; undo; undo = next)
    {
      next = undo->next;
      undo->next = undobuf.frees;
      undobuf.frees = undo;
    }
  undobuf.undos = 0;
}
static rtx *
find_split_point (rtx *loc, rtx insn)
{
  rtx x = *loc;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  rtx *split;
  unsigned long len = 0;
  long pos = 0;
  int unsignedp = 0;
  rtx inner = (rtx) 0;
  switch (code)
    {
    case SUBREG:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
 return loc;
      return find_split_point (&(((x)->u.fld[0]).rtx1), insn);
    case MEM:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
   && ! memory_address_p (((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1)))
 {
   rtx reg = (cfun->emit->x_regno_reg_rtx)[53];
   rtx seq = split_insns (gen_rtx_fmt_ee (SET, (VOIDmode), (reg), ((((x)->u.fld[0]).rtx1))),
     subst_insn);
   if (seq
       && (((seq)->u.fld[2]).rtx1) != (rtx) 0
       && ((((((seq)->u.fld[2]).rtx1))->u.fld[2]).rtx1) == (rtx) 0
       && ((enum rtx_code) (seq)->code) == INSN
       && ((enum rtx_code) ((((seq)->u.fld[5]).rtx1))->code) == SET
       && ((((((seq)->u.fld[5]).rtx1))->u.fld[0]).rtx1) == reg
       && ! reg_mentioned_p (reg,
        ((((((seq)->u.fld[5]).rtx1))->u.fld[1]).rtx1))
       && ((enum rtx_code) ((((seq)->u.fld[2]).rtx1))->code) == INSN
       && ((enum rtx_code) (((((((seq)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->code) == SET
       && (((((((((seq)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->u.fld[0]).rtx1) == reg
       && memory_address_p (((enum machine_mode) (x)->mode),
       (((((((((seq)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->u.fld[1]).rtx1)))
     {
       rtx src1 = ((((((seq)->u.fld[5]).rtx1))->u.fld[1]).rtx1);
       rtx src2 = (((((((((seq)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->u.fld[1]).rtx1);
       src2 = replace_rtx (src2, reg, src1);
       split = 0;
       if ((((src2)->u.fld[0]).rtx1) == src1)
  split = &(((src2)->u.fld[0]).rtx1);
       else if ((rtx_format[(int) (((enum rtx_code) ((((src2)->u.fld[0]).rtx1))->code))])[0] == 'e'
         && ((((((src2)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == src1)
  split = &((((((src2)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
       if (split)
  {
    do_SUBST(&((((x)->u.fld[0]).rtx1)), (src2));
    return split;
  }
     }
   else if (!(((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1)))
     && ! (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SUBREG
    && (((rtx_class[(int) (((enum rtx_code) ((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1)))))
     return &((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
 }
      break;
    case SET:
      split = find_split_point (&(((x)->u.fld[1]).rtx1), insn);
      if (split && split != &(((x)->u.fld[1]).rtx1))
 return split;
      split = find_split_point (&(((x)->u.fld[0]).rtx1), insn);
      if (split && split != &(((x)->u.fld[0]).rtx1))
 return split;
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ZERO_EXTRACT
   && (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)]) * 8))
       <= (8 * 4))
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[2]).rtx1))->code) == CONST_INT
   && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && ((((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])
        + ((((((((x)->u.fld[0]).rtx1))->u.fld[2]).rtx1))->u.hwint[0]))
       <= ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)]) * 8)))
   && ! side_effects_p (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1)))
 {
   long pos = ((((((((x)->u.fld[0]).rtx1))->u.fld[2]).rtx1))->u.hwint[0]);
   unsigned long len = ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
   unsigned long src = (((((x)->u.fld[1]).rtx1))->u.hwint[0]);
   rtx dest = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   enum machine_mode mode = ((enum machine_mode) (dest)->mode);
   unsigned long mask = ((long) 1 << len) - 1;
   if (0)
     pos = ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - len - pos;
   if (src == mask)
     do_SUBST(&((((x)->u.fld[1]).rtx1)), (gen_binary (IOR, mode, dest, gen_rtx_CONST_INT (VOIDmode, (long) (src << pos)))))
                                                        ;
   else
     do_SUBST(&((((x)->u.fld[1]).rtx1)), (gen_binary (IOR, mode, gen_binary (AND, mode, dest, gen_int_mode (~(mask << pos), mode)), gen_rtx_CONST_INT (VOIDmode, (long) (src << pos)))))
                                ;
   do_SUBST(&((((x)->u.fld[0]).rtx1)), (dest));
   split = find_split_point (&(((x)->u.fld[1]).rtx1), insn);
   if (split && split != &(((x)->u.fld[1]).rtx1))
     return split;
 }
      code = ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code);
      switch (code)
 {
 case AND:
   if (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
       && (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code) == REG)
       && (pos = exact_log2_wide ((unsigned long) (((((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])))) >= 7
       && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
       && (split = find_single_use ((((x)->u.fld[0]).rtx1), insn, (rtx*) 0)) != 0
       && (((enum rtx_code) (*split)->code) == EQ || ((enum rtx_code) (*split)->code) == NE)
       && (((*split)->u.fld[0]).rtx1) == (((x)->u.fld[0]).rtx1)
       && (((*split)->u.fld[1]).rtx1) == (const_int_rtx[64]))
     {
       rtx extraction = make_extraction (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
      ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1),
      pos, (rtx) 0, 1, 1, 0, 0);
       if (extraction != 0)
  {
    do_SUBST(&((((x)->u.fld[1]).rtx1)), (extraction));
    return find_split_point (loc, insn);
  }
     }
   break;
 case NE:
   if (1 == -1 && ((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1) == (const_int_rtx[64])
       && ((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode) == ((enum machine_mode) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->mode)
       && 1 <= (pos = exact_log2_wide ((unsigned long) (nonzero_bits (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1), ((enum machine_mode) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->mode))))
                                            ))
     {
       enum machine_mode mode = ((enum machine_mode) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->mode);
       do_SUBST(&((((x)->u.fld[1]).rtx1)), (gen_rtx_fmt_e (NEG, (mode), (gen_rtx_fmt_ee (LSHIFTRT, (mode), (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1)), (gen_rtx_CONST_INT (VOIDmode, (long) (pos))))))))
                          ;
       split = find_split_point (&(((x)->u.fld[1]).rtx1), insn);
       if (split && split != &(((x)->u.fld[1]).rtx1))
  return split;
     }
   break;
 case SIGN_EXTEND:
   inner = ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
   if (mode_class[((enum machine_mode) (inner)->mode)] == MODE_PARTIAL_INT
       || mode_class[((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode)] == MODE_PARTIAL_INT)
     break;
   pos = 0;
   len = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (inner)->mode)]) * 8));
   unsignedp = 0;
   break;
 case SIGN_EXTRACT:
 case ZERO_EXTRACT:
   if (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
       && ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->code) == CONST_INT)
     {
       inner = ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
       len = ((((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
       pos = ((((((((x)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->u.hwint[0]);
       if (0)
  pos = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (inner)->mode)]) * 8)) - len - pos;
       unsignedp = (code == ZERO_EXTRACT);
     }
   break;
 default:
   break;
 }
      if (len && pos >= 0 && pos + len <= ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (inner)->mode)]) * 8)))
 {
   enum machine_mode mode = ((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode);
   if (unsignedp && len <= 8)
     {
       do_SUBST(&((((x)->u.fld[1]).rtx1)), (gen_rtx_fmt_ee (AND, (mode), (gen_rtx_fmt_ee (LSHIFTRT, (mode), (rtl_hooks.gen_lowpart (mode, inner)), (gen_rtx_CONST_INT (VOIDmode, (long) (pos))))), (gen_rtx_CONST_INT (VOIDmode, (long) (((long) 1 << len) - 1))))))
                                                ;
       split = find_split_point (&(((x)->u.fld[1]).rtx1), insn);
       if (split && split != &(((x)->u.fld[1]).rtx1))
  return split;
     }
   else
     {
       do_SUBST(&((((x)->u.fld[1]).rtx1)), (gen_rtx_fmt_ee (unsignedp ? LSHIFTRT : ASHIFTRT, mode, gen_rtx_fmt_ee (ASHIFT, (mode), (rtl_hooks.gen_lowpart (mode, inner)), (gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - len - pos)))), gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - len)))))
                                                 ;
       split = find_split_point (&(((x)->u.fld[1]).rtx1), insn);
       if (split && split != &(((x)->u.fld[1]).rtx1))
  return split;
     }
 }
      if ((((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) & (~3)) == (RTX_COMPARE & (~3)))
   && ((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_VECTOR)
   && ((((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1)))
       || (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code) == SUBREG
    && (((rtx_class[(int) (((enum rtx_code) ((((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1))))))
 return &((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      if (((((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) & (~3)) == (RTX_COMPARE & (~3))) || ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_UNARY))
   && ! register_operand (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1), VOIDmode))
 return &((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      return 0;
    case AND:
    case IOR:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == NOT && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == NOT)
 {
   do_SUBST(&(*loc), (gen_rtx_fmt_e (NOT, (((enum machine_mode) (x)->mode)), (gen_rtx_fmt_ee (code == IOR ? AND : IOR, ((enum machine_mode) (x)->mode), ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))))))
                                   ;
   return find_split_point (loc, insn);
 }
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == NOT)
 {
   rtx tem = (((x)->u.fld[0]).rtx1);
   do_SUBST(&((((x)->u.fld[0]).rtx1)), ((((x)->u.fld[1]).rtx1)));
   do_SUBST(&((((x)->u.fld[1]).rtx1)), (tem));
 }
      break;
    default:
      break;
    }
  switch ((rtx_class[(int) (code)]))
    {
    case RTX_BITFIELD_OPS:
    case RTX_TERNARY:
      split = find_split_point (&(((x)->u.fld[2]).rtx1), insn);
      if (split)
 return split;
    case RTX_BIN_ARITH:
    case RTX_COMM_ARITH:
    case RTX_COMPARE:
    case RTX_COMM_COMPARE:
      split = find_split_point (&(((x)->u.fld[1]).rtx1), insn);
      if (split)
 return split;
    case RTX_UNARY:
      if (((enum rtx_code) (x)->code) != AND && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == AND)
 return &(((x)->u.fld[0]).rtx1);
      split = find_split_point (&(((x)->u.fld[0]).rtx1), insn);
      if (split)
 return split;
      return loc;
    default:
      return 0;
    }
}
static rtx
subst (rtx x, rtx from, rtx to, int in_dest, int unique_copy)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  enum machine_mode op0_mode = VOIDmode;
  const char *fmt;
  int len, i;
  rtx new;
  if (! in_dest && ((x) == (from) || ((((enum rtx_code) (x)->code) == REG) && (((enum rtx_code) (from)->code) == REG) && (((x)->u.fld[0]).rtuint) == (((from)->u.fld[0]).rtuint) && ((enum machine_mode) (x)->mode) == ((enum machine_mode) (from)->mode))))
    {
      n_pseudo_occurrences++;
      return (unique_copy && n_pseudo_occurrences > 1 ? copy_rtx (to) : to);
    }
  if (! in_dest && code == REG && (((enum rtx_code) (from)->code) == REG)
      && (((x)->u.fld[0]).rtuint) == (((from)->u.fld[0]).rtuint))
    return gen_rtx_fmt_e (CLOBBER, (((enum machine_mode) (x)->mode)), ((const_int_rtx[64])));
  if (code != MEM && code != LO_SUM && (((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_OBJ & (~1))))
    return x;
  if (((x) == (to) || ((((enum rtx_code) (x)->code) == REG) && (((enum rtx_code) (to)->code) == REG) && (((x)->u.fld[0]).rtuint) == (((to)->u.fld[0]).rtuint) && ((enum machine_mode) (x)->mode) == ((enum machine_mode) (to)->mode))))
    return to;
  if (code == PARALLEL
      && ((enum rtx_code) ((((((x)->u.fld[0]).rtvec1))->elem[0]))->code) == SET
      && ((enum rtx_code) (((((((((x)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
    {
      new = subst ((((((x)->u.fld[0]).rtvec1))->elem[0]), from, to, 0, unique_copy);
      if (((enum rtx_code) (new)->code) == CLOBBER
   && (((new)->u.fld[0]).rtx1) == (const_int_rtx[64]))
 return new;
      do_SUBST(&((((((x)->u.fld[0]).rtvec1))->elem[0])), (new));
      for (i = (((((x)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 1; i--)
 {
   rtx dest = ((((((((x)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1);
   if (!(((enum rtx_code) (dest)->code) == REG)
       && ((enum rtx_code) (dest)->code) != CC0
       && ((enum rtx_code) (dest)->code) != PC)
     {
       new = subst (dest, from, to, 0, unique_copy);
       if (((enum rtx_code) (new)->code) == CLOBBER
    && (((new)->u.fld[0]).rtx1) == (const_int_rtx[64]))
  return new;
       do_SUBST(&(((((((((x)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1)), (new));
     }
 }
    }
  else
    {
      len = (rtx_length[(int) (code)]);
      fmt = (rtx_format[(int) (code)]);
      if (code == SET
   && ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
       || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CC0
       || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PC))
 fmt = "ie";
      if (fmt[0] == 'e')
 op0_mode = ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode);
      for (i = 0; i < len; i++)
 {
   if (fmt[i] == 'E')
     {
       int j;
       for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
  {
    if ((((((((x)->u.fld[i]).rtvec1))->elem[j])) == (from) || ((((enum rtx_code) ((((((x)->u.fld[i]).rtvec1))->elem[j]))->code) == REG) && (((enum rtx_code) (from)->code) == REG) && ((((((((x)->u.fld[i]).rtvec1))->elem[j]))->u.fld[0]).rtuint) == (((from)->u.fld[0]).rtuint) && ((enum machine_mode) ((((((x)->u.fld[i]).rtvec1))->elem[j]))->mode) == ((enum machine_mode) (from)->mode))))
      {
        new = (unique_copy && n_pseudo_occurrences
        ? copy_rtx (to) : to);
        n_pseudo_occurrences++;
      }
    else
      {
        new = subst ((((((x)->u.fld[i]).rtvec1))->elem[j]), from, to, 0,
       unique_copy);
        if (((enum rtx_code) (new)->code) == CLOBBER
     && (((new)->u.fld[0]).rtx1) == (const_int_rtx[64]))
   return new;
      }
    do_SUBST(&((((((x)->u.fld[i]).rtvec1))->elem[j])), (new));
  }
     }
   else if (fmt[i] == 'e')
     {
       new = (((x)->u.fld[i]).rtx1);
       if (in_dest
    && (code == SUBREG || code == STRICT_LOW_PART
        || code == ZERO_EXTRACT)
    && i == 0
    && (((enum rtx_code) (new)->code) == REG))
  ;
       else if ((((((x)->u.fld[i]).rtx1)) == (from) || ((((enum rtx_code) ((((x)->u.fld[i]).rtx1))->code) == REG) && (((enum rtx_code) (from)->code) == REG) && ((((((x)->u.fld[i]).rtx1))->u.fld[0]).rtuint) == (((from)->u.fld[0]).rtuint) && ((enum machine_mode) ((((x)->u.fld[i]).rtx1))->mode) == ((enum machine_mode) (from)->mode))))
  {
    if (((enum rtx_code) (to)->code) == SUBREG
        && ! ((((enum machine_mode) (to)->mode)) == (((enum machine_mode) ((((to)->u.fld[0]).rtx1))->mode)) || (((((enum machine_mode) (to)->mode)) == HImode || (((enum machine_mode) (to)->mode)) == SImode || ((((enum machine_mode) (to)->mode)) == QImode && (0 || !(x86_partial_reg_stall & (1 << ix86_tune)))) || ((((enum machine_mode) (to)->mode)) == DImode && 0)) && ((((enum machine_mode) ((((to)->u.fld[0]).rtx1))->mode)) == HImode || (((enum machine_mode) ((((to)->u.fld[0]).rtx1))->mode)) == SImode || ((((enum machine_mode) ((((to)->u.fld[0]).rtx1))->mode)) == QImode && (0 || !(x86_partial_reg_stall & (1 << ix86_tune)))) || ((((enum machine_mode) ((((to)->u.fld[0]).rtx1))->mode)) == DImode && 0))))
        && ! (code == SUBREG
       && ((((enum machine_mode) (x)->mode)) == (((enum machine_mode) ((((to)->u.fld[0]).rtx1))->mode)) || (((((enum machine_mode) (x)->mode)) == HImode || (((enum machine_mode) (x)->mode)) == SImode || ((((enum machine_mode) (x)->mode)) == QImode && (0 || !(x86_partial_reg_stall & (1 << ix86_tune)))) || ((((enum machine_mode) (x)->mode)) == DImode && 0)) && ((((enum machine_mode) ((((to)->u.fld[0]).rtx1))->mode)) == HImode || (((enum machine_mode) ((((to)->u.fld[0]).rtx1))->mode)) == SImode || ((((enum machine_mode) ((((to)->u.fld[0]).rtx1))->mode)) == QImode && (0 || !(x86_partial_reg_stall & (1 << ix86_tune)))) || ((((enum machine_mode) ((((to)->u.fld[0]).rtx1))->mode)) == DImode && 0))))
                                 )
        )
      return gen_rtx_fmt_e (CLOBBER, (VOIDmode), ((const_int_rtx[64])));
    if (code == SUBREG
        && (((enum rtx_code) (to)->code) == REG)
        && (((to)->u.fld[0]).rtuint) < 53
        && (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) < ((unsigned short) mode_size[((enum machine_mode) (to)->mode)]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, ((regclass_map[(((to)->u.fld[0]).rtuint)]))) || reg_classes_intersect_p (MMX_REGS, ((regclass_map[(((to)->u.fld[0]).rtuint)]))) : ((unsigned short) mode_size[((enum machine_mode) (to)->mode)]) != ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) ? reg_classes_intersect_p (FLOAT_REGS, ((regclass_map[(((to)->u.fld[0]).rtuint)]))) : 0)
                      )
      return gen_rtx_fmt_e (CLOBBER, (VOIDmode), ((const_int_rtx[64])));
    new = (unique_copy && n_pseudo_occurrences ? copy_rtx (to) : to);
    n_pseudo_occurrences++;
  }
       else
  new = subst ((((x)->u.fld[i]).rtx1), from, to,
        (((in_dest
    && (code == SUBREG || code == STRICT_LOW_PART
        || code == ZERO_EXTRACT))
          || code == SET)
         && i == 0), unique_copy);
       if (((enum rtx_code) (new)->code) == CLOBBER && (((new)->u.fld[0]).rtx1) == (const_int_rtx[64]))
  return new;
       if (((enum rtx_code) (x)->code) == SUBREG
    && (((enum rtx_code) (new)->code) == CONST_INT
        || ((enum rtx_code) (new)->code) == CONST_DOUBLE))
  {
    enum machine_mode mode = ((enum machine_mode) (x)->mode);
    x = simplify_subreg (((enum machine_mode) (x)->mode), new,
           ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
           (((x)->u.fld[1]).rtuint));
    if (! x)
      x = gen_rtx_fmt_e (CLOBBER, (mode), ((const_int_rtx[64])));
  }
       else if (((enum rtx_code) (new)->code) == CONST_INT
         && ((enum rtx_code) (x)->code) == ZERO_EXTEND)
  {
    x = simplify_unary_operation (ZERO_EXTEND, ((enum machine_mode) (x)->mode),
      new, ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode));
    if (! x)
      fancy_abort ("gcc.c", 409709, "?");
  }
       else
  do_SUBST(&((((x)->u.fld[i]).rtx1)), (new));
     }
 }
    }
  for (i = 0; i < 4; i++)
    {
      if (code != CONST_INT && code != REG && code != CLOBBER)
 x = combine_simplify_rtx (x, op0_mode, in_dest);
      if (((enum rtx_code) (x)->code) == code)
 break;
      code = ((enum rtx_code) (x)->code);
      op0_mode = VOIDmode;
    }
  return x;
}
static rtx
combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  rtx temp;
  rtx reversed;
  int i;
  if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_COMM_ARITH)
      && swap_commutative_operands_p ((((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1)))
    {
      temp = (((x)->u.fld[0]).rtx1);
      do_SUBST(&((((x)->u.fld[0]).rtx1)), ((((x)->u.fld[1]).rtx1)));
      do_SUBST(&((((x)->u.fld[1]).rtx1)), (temp));
    }
  if ((code == PLUS || code == MINUS || code == MULT)
      && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ASHIFTRT
      && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == PLUS
      && ((enum rtx_code) ((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == ASHIFT
      && ((enum rtx_code) (((((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
      && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
      && ((((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1) == ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1)
      && ((enum rtx_code) ((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
      && (temp = simplify_binary_operation (ASHIFTRT, mode,
         (((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1),
         ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))) != 0)
    {
      rtx new
 = simplify_shift_const ((rtx) 0, ASHIFT, mode,
    ((((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1),
    ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]));
      new = simplify_shift_const ((rtx) 0, ASHIFTRT, mode, new,
      ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]));
      do_SUBST(&((((x)->u.fld[0]).rtx1)), (gen_binary (PLUS, mode, new, temp)));
    }
  if (((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~3)) == (RTX_COMPARE & (~3)))
       && ((!(((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1)))
     && ! (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
    && (((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1)))))
    || (!(((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1)))
        && ! (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == SUBREG
       && (((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1)))))))
      || (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_UNARY)
          && (!(((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1)))
        && ! (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
       && (((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1)))))))
    {
      rtx cond, true_rtx, false_rtx;
      cond = if_then_else_cond (x, &true_rtx, &false_rtx);
      if (cond != 0
   && ! ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
  && ((((rtx_class[(int) (((enum rtx_code) (true_rtx)->code))]) & (~1)) == (RTX_COMPARE & (~1))) || (((rtx_class[(int) (((enum rtx_code) (false_rtx)->code))]) & (~1)) == (RTX_COMPARE & (~1))))))
 {
   rtx cop1 = (const_int_rtx[64]);
   enum rtx_code cond_code = simplify_comparison (NE, &cond, &cop1);
   if (cond_code == NE && (((rtx_class[(int) (((enum rtx_code) (cond)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
     return x;
   true_rtx = subst (copy_rtx (true_rtx), (global_rtl[GR_PC]), (global_rtl[GR_PC]), 0, 0);
   false_rtx = subst (copy_rtx (false_rtx), (global_rtl[GR_PC]), (global_rtl[GR_PC]), 0, 0);
   if (general_operand (true_rtx, VOIDmode)
       && general_operand (false_rtx, VOIDmode))
     {
       enum rtx_code reversed;
       if (true_rtx == const_true_rtx && false_rtx == (const_int_rtx[64]))
  x = gen_binary (cond_code, mode, cond, cop1);
       else if (true_rtx == (const_int_rtx[64]) && false_rtx == const_true_rtx
         && ((reversed = reversed_comparison_code_parts
     (cond_code, cond, cop1, ((void *)0)))
             != UNKNOWN))
  x = gen_binary (reversed, mode, cond, cop1);
       else if (((enum rtx_code) (true_rtx)->code) == CONST_INT
         && ((true_rtx)->u.hwint[0]) == - 1
         && false_rtx == (const_int_rtx[64]))
  x = simplify_gen_unary (NEG, mode,
     gen_binary (cond_code, mode, cond,
          cop1),
     mode);
       else if (((enum rtx_code) (false_rtx)->code) == CONST_INT
         && ((false_rtx)->u.hwint[0]) == - 1
         && true_rtx == (const_int_rtx[64])
         && ((reversed = reversed_comparison_code_parts
     (cond_code, cond, cop1, ((void *)0)))
             != UNKNOWN))
  x = simplify_gen_unary (NEG, mode,
     gen_binary (reversed, mode,
          cond, cop1),
     mode);
       else
  return gen_rtx_fmt_eee (IF_THEN_ELSE, (mode), (gen_binary (cond_code, VOIDmode, cond, cop1)), (true_rtx), (false_rtx))
                              ;
       code = ((enum rtx_code) (x)->code);
       op0_mode = VOIDmode;
     }
 }
    }
  temp = 0;
  switch ((rtx_class[(int) (code)]))
    {
    case RTX_UNARY:
      if (op0_mode == VOIDmode)
 op0_mode = ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode);
      temp = simplify_unary_operation (code, mode, (((x)->u.fld[0]).rtx1), op0_mode);
      break;
    case RTX_COMPARE:
    case RTX_COMM_COMPARE:
      {
 enum machine_mode cmp_mode = ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode);
 if (cmp_mode == VOIDmode)
   {
     cmp_mode = ((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode);
     if (cmp_mode == VOIDmode)
       cmp_mode = op0_mode;
   }
 temp = simplify_relational_operation (code, mode, cmp_mode,
           (((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1));
      }
      break;
    case RTX_COMM_ARITH:
    case RTX_BIN_ARITH:
      temp = simplify_binary_operation (code, mode, (((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1));
      break;
    case RTX_BITFIELD_OPS:
    case RTX_TERNARY:
      temp = simplify_ternary_operation (code, mode, op0_mode, (((x)->u.fld[0]).rtx1),
      (((x)->u.fld[1]).rtx1), (((x)->u.fld[2]).rtx1));
      break;
    default:
      break;
    }
  if (temp)
    {
      x = temp;
      code = ((enum rtx_code) (temp)->code);
      op0_mode = VOIDmode;
      mode = ((enum machine_mode) (temp)->mode);
    }
  if (code == PLUS || code == MINUS
      || code == AND || code == IOR || code == XOR)
    {
      x = apply_distributive_law (x);
      code = ((enum rtx_code) (x)->code);
      op0_mode = VOIDmode;
    }
  if ((code == PLUS || code == MINUS || code == MULT || code == DIV
       || code == AND || code == IOR || code == XOR
       || code == SMAX || code == SMIN || code == UMAX || code == UMIN)
      && (((mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT || mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_VECTOR_INT) && code != DIV)
   || (flag_unsafe_math_optimizations && (mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))))
    {
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == code)
 {
   rtx other = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   rtx inner_op0 = ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
   rtx inner_op1 = (((x)->u.fld[1]).rtx1);
   rtx inner;
   if (((rtx_class[(int) (((enum rtx_code) (inner_op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (inner_op0)->code) == CONST_VECTOR) && ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_COMM_ARITH))
     {
       rtx tem = inner_op0;
       inner_op0 = inner_op1;
       inner_op1 = tem;
     }
   inner = simplify_binary_operation (code == MINUS ? PLUS
          : code == DIV ? MULT
          : code,
          mode, inner_op0, inner_op1);
   if (inner == 0 && ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_COMM_ARITH))
     {
       other = ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
       inner = simplify_binary_operation (code, mode,
       ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
       (((x)->u.fld[1]).rtx1));
     }
   if (inner)
     return gen_binary (code, mode, other, inner);
 }
    }
  switch (code)
    {
    case MEM:
      temp = make_compound_operation ((((x)->u.fld[0]).rtx1), MEM);
      do_SUBST(&((((x)->u.fld[0]).rtx1)), (temp));
      break;
    case SUBREG:
      if (op0_mode == VOIDmode)
 op0_mode = ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode);
      if (((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_VECTOR)
   && subreg_lowpart_offset (mode, op0_mode) == (((x)->u.fld[1]).rtuint)
   && (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) != VOIDmode
       || gen_lowpart_common (mode, (((x)->u.fld[0]).rtx1))))
 return rtl_hooks.gen_lowpart (mode, (((x)->u.fld[0]).rtx1));
      if (mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_CC)
        break;
      {
 rtx temp;
 temp = simplify_subreg (mode, (((x)->u.fld[0]).rtx1), op0_mode,
    (((x)->u.fld[1]).rtuint));
 if (temp)
   return temp;
      }
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM)
   && (((((((x)->u.fld[0]).rtx1)))->volatil)
       || mode_dependent_address_p (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))))
 return gen_rtx_fmt_e (CLOBBER, (mode), ((const_int_rtx[64])));
      break;
    case NOT:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
   && subreg_lowpart_p ((((x)->u.fld[0]).rtx1))
   && (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)])
       < ((unsigned short) mode_size[((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)]))
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == ASHIFT
   && (((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (const_int_rtx[64 +1]))
 {
   enum machine_mode inner_mode = ((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode);
   x = gen_rtx_fmt_ee (ROTATE, (inner_mode), (simplify_gen_unary (NOT, inner_mode, (const_int_rtx[64 +1]), inner_mode)), ((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1)))
                                            ;
   return rtl_hooks.gen_lowpart (mode, x);
 }
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == IOR || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == AND)
 {
   rtx in1 = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), in2 = ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
   enum machine_mode op_mode;
   op_mode = ((enum machine_mode) (in1)->mode);
   in1 = simplify_gen_unary (NOT, op_mode, in1, op_mode);
   op_mode = ((enum machine_mode) (in2)->mode);
   if (op_mode == VOIDmode)
     op_mode = mode;
   in2 = simplify_gen_unary (NOT, op_mode, in2, op_mode);
   if (((enum rtx_code) (in2)->code) == NOT && ((enum rtx_code) (in1)->code) != NOT)
     {
       rtx tem = in2;
       in2 = in1; in1 = tem;
     }
   return gen_rtx_fmt_ee (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == IOR ? AND : IOR,
     mode, in1, in2);
 }
      break;
    case NEG:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == XOR
   && ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1) == (const_int_rtx[64 +1])
   && nonzero_bits (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), mode) == 1)
 return gen_binary (PLUS, mode, ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), (const_int_rtx[64 -1]));
      temp = expand_compound_operation ((((x)->u.fld[0]).rtx1));
      if (((enum rtx_code) (temp)->code) == ASHIFTRT
   && ((enum rtx_code) ((((temp)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((temp)->u.fld[1]).rtx1))->u.hwint[0]) == ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1)
 return simplify_shift_const (temp, LSHIFTRT, mode, (((temp)->u.fld[0]).rtx1),
         (((((temp)->u.fld[1]).rtx1))->u.hwint[0]));
      if (!(((enum rtx_code) (temp)->code) == REG)
   && ! (((enum rtx_code) (temp)->code) == SUBREG
  && (((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code) == REG))
   && (i = exact_log2_wide ((unsigned long) (nonzero_bits (temp, mode)))) >= 0)
 {
   rtx temp1 = simplify_shift_const
     ((rtx) 0, ASHIFTRT, mode,
      simplify_shift_const ((rtx) 0, ASHIFT, mode, temp,
       ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1 - i),
      ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1 - i);
   if (((enum rtx_code) (temp1)->code) != ASHIFTRT
       || ((enum rtx_code) ((((temp1)->u.fld[0]).rtx1))->code) != ASHIFT
       || ((((((temp1)->u.fld[0]).rtx1))->u.fld[0]).rtx1) != temp)
     return temp1;
 }
      break;
    case TRUNCATE:
      if (mode_class[mode] == MODE_PARTIAL_INT)
 break;
      if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
   && 1
                                                  )
 do_SUBST(&((((x)->u.fld[0]).rtx1)), (force_to_mode ((((x)->u.fld[0]).rtx1), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode), mode_mask_array[mode], (rtx) 0, 0)))
                                            ;
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SIGN_EXTEND
    || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ZERO_EXTEND)
   && ((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode) == mode)
 return ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ABS
    || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == NEG)
   && (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SIGN_EXTEND
       || ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == ZERO_EXTEND)
   && ((enum machine_mode) ((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode) == mode)
 return simplify_gen_unary (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code), mode,
       (((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1), mode);
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == TRUNCATE
   && subreg_lowpart_p ((((x)->u.fld[0]).rtx1)))
 return ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      if (1
   && num_sign_bit_copies ((((x)->u.fld[0]).rtx1), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode))
      >= (unsigned int) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) + 1)
   && ! (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == LSHIFTRT
  && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == MULT))
 return rtl_hooks.gen_lowpart (mode, (((x)->u.fld[0]).rtx1));
      if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
   && (((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_COMPARE & (~1)))
   && ((long) 1 & ~mode_mask_array[mode]) == 0)
 return rtl_hooks.gen_lowpart (mode, (((x)->u.fld[0]).rtx1));
      if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
   && ((long) 1 & ~mode_mask_array[mode]) == 0
   && (temp = get_last_value ((((x)->u.fld[0]).rtx1)))
   && (((rtx_class[(int) (((enum rtx_code) (temp)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
 return rtl_hooks.gen_lowpart (mode, (((x)->u.fld[0]).rtx1));
      break;
    case FLOAT_TRUNCATE:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == FLOAT_EXTEND
   && ((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode) == mode)
 return ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == FLOAT_TRUNCATE
    && flag_unsafe_math_optimizations)
   || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == FLOAT_EXTEND)
 return simplify_gen_unary (((unsigned short) mode_size[((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)])
       > ((unsigned short) mode_size[mode])
       ? FLOAT_TRUNCATE : FLOAT_EXTEND,
       mode,
       ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), mode);
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == FLOAT
   && (flag_unsafe_math_optimizations
       || ((unsigned)significand_size (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode))
    >= (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)]) * 8))
        - num_sign_bit_copies (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
          ((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode))))))
 return simplify_gen_unary (FLOAT, mode,
       ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
       ((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode));
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ABS
    || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == NEG)
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == FLOAT_EXTEND
   && ((enum machine_mode) ((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode) == mode)
 return simplify_gen_unary (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code), mode,
       (((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1), mode);
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
   && subreg_lowpart_p ((((x)->u.fld[0]).rtx1))
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == FLOAT_TRUNCATE)
 return ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      break;
    case FLOAT_EXTEND:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == FLOAT_EXTEND
   || (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == FLOAT
       && ((unsigned)significand_size (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode))
    >= (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)]) * 8))
        - num_sign_bit_copies (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
          ((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode))))))
 return simplify_gen_unary (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code), mode,
       ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
       ((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode));
      break;
    case CONST:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST)
 do_SUBST(&((((x)->u.fld[0]).rtx1)), (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1)));
      break;
    case PLUS:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MULT
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == NEG)
 {
   rtx in1, in2;
   in1 = (((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   in2 = ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
   return gen_binary (MINUS, mode, (((x)->u.fld[1]).rtx1),
        gen_binary (MULT, mode, in1, in2));
 }
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
   && constant_address_p (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1)))
 return gen_binary (PLUS, mode,
      gen_binary (PLUS, mode, ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
           (((x)->u.fld[1]).rtx1)),
      ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1));
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == XOR
   && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) == -((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])
   && ((i = exact_log2_wide ((unsigned long) (((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])))) >= 0
       || (i = exact_log2_wide ((unsigned long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0])))) >= 0)
   && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
   && ((((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == AND
        && ((enum rtx_code) ((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
        && ((((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])
     == ((long) 1 << (i + 1)) - 1))
       || (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == ZERO_EXTEND
    && (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)]) * 8))
        == (unsigned int) i + 1))))
 return simplify_shift_const
   ((rtx) 0, ASHIFTRT, mode,
    simplify_shift_const ((rtx) 0, ASHIFT, mode,
     (((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1),
     ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - (i + 1)),
    ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - (i + 1));
      if ((((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_COMPARE & (~1)))
   && ((1 == -1 && (((x)->u.fld[1]).rtx1) == (const_int_rtx[64 +1]))
       || (1 == 1 && (((x)->u.fld[1]).rtx1) == (const_int_rtx[64 -1])))
   && (reversed = reversed_comparison ((((x)->u.fld[0]).rtx1), mode,
           ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
           ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))))
 return
   simplify_gen_unary (NEG, mode, reversed, mode);
      if ((((x)->u.fld[1]).rtx1) == (const_int_rtx[64 -1])
   && !(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && ! (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
  && (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG))
   && nonzero_bits ((((x)->u.fld[0]).rtx1), mode) == 1)
 return simplify_shift_const ((rtx) 0, ASHIFTRT, mode,
    simplify_shift_const ((rtx) 0, ASHIFT, mode,
     gen_rtx_fmt_ee (XOR, (mode), ((((x)->u.fld[0]).rtx1)), ((const_int_rtx[64 +1]))),
     ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1),
    ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1);
      if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
   && (nonzero_bits ((((x)->u.fld[0]).rtx1), mode)
       & nonzero_bits ((((x)->u.fld[1]).rtx1), mode)) == 0)
 {
   rtx tor = gen_binary (IOR, mode, (((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1));
   temp = combine_simplify_rtx (tor, mode, in_dest);
   if (((enum rtx_code) (temp)->code) != CLOBBER && temp != tor)
     return temp;
 }
      break;
    case MINUS:
      if (1 == 1
   && (((x)->u.fld[0]).rtx1) == (const_int_rtx[64 +1])
   && (((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) & (~1)) == (RTX_COMPARE & (~1)))
   && (reversed = reversed_comparison ((((x)->u.fld[1]).rtx1), mode,
           ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1),
           ((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))))
 return reversed;
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == AND
   && ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
   && exact_log2_wide ((unsigned long) (-((((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]))) >= 0
   && rtx_equal_p (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1), (((x)->u.fld[0]).rtx1)))
 return simplify_and_const_int ((rtx) 0, mode, (((x)->u.fld[0]).rtx1),
           -((((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) - 1);
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == MULT
   && ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code) == NEG)
 {
   rtx in1, in2;
   in1 = (((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   in2 = ((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
   return gen_binary (PLUS, mode, gen_binary (MULT, mode, in1, in2),
        (((x)->u.fld[0]).rtx1));
 }
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == MULT
   && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == NEG)
 {
   rtx in1, in2;
   in1 = simplify_gen_unary (NEG, mode, ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1), mode);
   in2 = ((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
   return gen_binary (MINUS, mode, gen_binary (MULT, mode, in1, in2),
        ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1));
 }
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == PLUS && (mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT || mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_VECTOR_INT))
 return gen_binary (MINUS, mode,
      gen_binary (MINUS, mode, (((x)->u.fld[0]).rtx1),
           ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1)),
      ((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1));
      break;
    case MULT:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS)
 {
   x = apply_distributive_law
     (gen_binary (PLUS, mode,
    gen_binary (MULT, mode,
         ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1)),
    gen_binary (MULT, mode,
         ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1),
         copy_rtx ((((x)->u.fld[1]).rtx1)))));
   if (((enum rtx_code) (x)->code) != MULT)
     return x;
 }
      if ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && flag_unsafe_math_optimizations
   && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == DIV)
 {
   rtx tem = simplify_binary_operation (MULT, mode,
            ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
            (((x)->u.fld[1]).rtx1));
   if (tem)
     return gen_binary (DIV, mode, tem, ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1));
 }
      break;
    case UDIV:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (i = exact_log2_wide ((unsigned long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0])))) >= 0
   && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ASHIFT
       || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == LSHIFTRT
       || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ASHIFTRT
       || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ROTATE
       || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ROTATERT))
 return simplify_shift_const ((rtx) 0, LSHIFTRT, mode, (((x)->u.fld[0]).rtx1), i);
      break;
    case EQ: case NE:
    case GT: case GTU: case GE: case GEU:
    case LT: case LTU: case LE: case LEU:
    case UNEQ: case LTGT:
    case UNGT: case UNGE:
    case UNLT: case UNLE:
    case UNORDERED: case ORDERED:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == COMPARE
   || (mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] != MODE_CC
       && ! (((((x)->u.fld[0]).rtx1)) ? 0 : 0)))
 {
   rtx op0 = (((x)->u.fld[0]).rtx1);
   rtx op1 = (((x)->u.fld[1]).rtx1);
   enum rtx_code new_code;
   if (((enum rtx_code) (op0)->code) == COMPARE)
     op1 = (((op0)->u.fld[1]).rtx1), op0 = (((op0)->u.fld[0]).rtx1);
   new_code = simplify_comparison (code, &op0, &op1);
   if (1 == 1
       && new_code == NE && mode_class[mode] == MODE_INT
       && op1 == (const_int_rtx[64])
       && mode == ((enum machine_mode) (op0)->mode)
       && nonzero_bits (op0, mode) == 1)
     return rtl_hooks.gen_lowpart (mode,
    expand_compound_operation (op0));
   else if (1 == 1
     && new_code == NE && mode_class[mode] == MODE_INT
     && op1 == (const_int_rtx[64])
     && mode == ((enum machine_mode) (op0)->mode)
     && (num_sign_bit_copies (op0, mode)
         == ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))
     {
       op0 = expand_compound_operation (op0);
       return simplify_gen_unary (NEG, mode,
      rtl_hooks.gen_lowpart (mode, op0),
      mode);
     }
   else if (1 == 1
     && new_code == EQ && mode_class[mode] == MODE_INT
     && op1 == (const_int_rtx[64])
     && mode == ((enum machine_mode) (op0)->mode)
     && nonzero_bits (op0, mode) == 1)
     {
       op0 = expand_compound_operation (op0);
       return gen_binary (XOR, mode,
     rtl_hooks.gen_lowpart (mode, op0),
     (const_int_rtx[64 +1]));
     }
   else if (1 == 1
     && new_code == EQ && mode_class[mode] == MODE_INT
     && op1 == (const_int_rtx[64])
     && mode == ((enum machine_mode) (op0)->mode)
     && (num_sign_bit_copies (op0, mode)
         == ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))
     {
       op0 = expand_compound_operation (op0);
       return plus_constant_wide ((rtl_hooks.gen_lowpart (mode, op0)), (long) (1));
     }
   if (1 == -1
       && new_code == NE && mode_class[mode] == MODE_INT
       && op1 == (const_int_rtx[64])
       && (num_sign_bit_copies (op0, mode)
    == ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))
     return rtl_hooks.gen_lowpart (mode,
    expand_compound_operation (op0));
   else if (1 == -1
     && new_code == NE && mode_class[mode] == MODE_INT
     && op1 == (const_int_rtx[64])
     && mode == ((enum machine_mode) (op0)->mode)
     && nonzero_bits (op0, mode) == 1)
     {
       op0 = expand_compound_operation (op0);
       return simplify_gen_unary (NEG, mode,
      rtl_hooks.gen_lowpart (mode, op0),
      mode);
     }
   else if (1 == -1
     && new_code == EQ && mode_class[mode] == MODE_INT
     && op1 == (const_int_rtx[64])
     && mode == ((enum machine_mode) (op0)->mode)
     && (num_sign_bit_copies (op0, mode)
         == ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))
     {
       op0 = expand_compound_operation (op0);
       return simplify_gen_unary (NOT, mode,
      rtl_hooks.gen_lowpart (mode, op0),
      mode);
     }
   else if (1 == -1
     && new_code == EQ && mode_class[mode] == MODE_INT
     && op1 == (const_int_rtx[64])
     && mode == ((enum machine_mode) (op0)->mode)
     && nonzero_bits (op0, mode) == 1)
     {
       op0 = expand_compound_operation (op0);
       return plus_constant_wide ((rtl_hooks.gen_lowpart (mode, op0)), (long) (-1));
     }
   if (new_code == NE && mode_class[mode] == MODE_INT
       && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
       && ((1 & mode_mask_array[mode])
    == (unsigned long) 1 << (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1))
       && op1 == (const_int_rtx[64])
       && mode == ((enum machine_mode) (op0)->mode)
       && (i = exact_log2_wide ((unsigned long) (nonzero_bits (op0, mode)))) >= 0)
     {
       x = simplify_shift_const ((rtx) 0, ASHIFT, mode,
     expand_compound_operation (op0),
     ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1 - i);
       if (((enum rtx_code) (x)->code) == AND && (((x)->u.fld[1]).rtx1) == const_true_rtx)
  return (((x)->u.fld[0]).rtx1);
       else
  return x;
     }
   if (new_code != code)
     return gen_rtx_fmt_ee (new_code, mode, op0, op1);
   do_SUBST(&((((x)->u.fld[0]).rtx1)), (op0));
   do_SUBST(&((((x)->u.fld[1]).rtx1)), (op1));
 }
      break;
    case IF_THEN_ELSE:
      return simplify_if_then_else (x);
    case ZERO_EXTRACT:
    case SIGN_EXTRACT:
    case ZERO_EXTEND:
    case SIGN_EXTEND:
      if (in_dest)
 return x;
      return expand_compound_operation (x);
    case SET:
      return simplify_set (x);
    case AND:
    case IOR:
    case XOR:
      return simplify_logical (x);
    case ABS:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == NEG)
 do_SUBST(&((((x)->u.fld[0]).rtx1)), (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1)));
      if (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) == VOIDmode)
 break;
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == FFS || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ABS
   || ((((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8))
        <= (8 * 4))
       && ((nonzero_bits ((((x)->u.fld[0]).rtx1), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode))
     & ((long) 1
        << (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8)) - 1)))
    == 0)))
 return (((x)->u.fld[0]).rtx1);
      if (num_sign_bit_copies ((((x)->u.fld[0]).rtx1), mode) == ((unsigned short) (((unsigned short) mode_size[mode]) * 8)))
 return gen_rtx_fmt_e (NEG, (mode), ((((x)->u.fld[0]).rtx1)));
      break;
    case FFS:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SIGN_EXTEND
   || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ZERO_EXTEND)
 do_SUBST(&((((x)->u.fld[0]).rtx1)), (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1)));
      break;
    case POPCOUNT:
    case PARITY:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ZERO_EXTEND)
 do_SUBST(&((((x)->u.fld[0]).rtx1)), (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1)));
      break;
    case FLOAT:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SIGN_EXTEND)
 do_SUBST(&((((x)->u.fld[0]).rtx1)), (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1)));
      break;
    case ASHIFT:
    case LSHIFTRT:
    case ASHIFTRT:
    case ROTATE:
    case ROTATERT:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
 return simplify_shift_const (x, code, mode, (((x)->u.fld[0]).rtx1),
         (((((x)->u.fld[1]).rtx1))->u.hwint[0]));
      else if (0 && !(((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG))
 do_SUBST(&((((x)->u.fld[1]).rtx1)), (force_to_mode ((((x)->u.fld[1]).rtx1), ((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode), ((long) 1 << exact_log2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8))))) - 1, (rtx) 0, 0)))
                      ;
      break;
    case VEC_SELECT:
      {
 rtx op0 = (((x)->u.fld[0]).rtx1);
 rtx op1 = (((x)->u.fld[1]).rtx1);
 int len;
 if (((enum rtx_code) (op1)->code) != PARALLEL)
   fancy_abort ("gcc.c", 410763, "?");
 len = (((((op1)->u.fld[0]).rtvec1))->num_elem);
 if (len == 1
     && ((enum rtx_code) ((((((op1)->u.fld[0]).rtvec1))->elem[0]))->code) == CONST_INT
     && ((enum rtx_code) (op0)->code) == VEC_CONCAT)
   {
     int offset = (((((((op1)->u.fld[0]).rtvec1))->elem[0]))->u.hwint[0]) * ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]);
     for (;;)
       {
  if (((enum machine_mode) (op0)->mode) == ((enum machine_mode) (x)->mode))
    return op0;
  if (((enum rtx_code) (op0)->code) == VEC_CONCAT)
    {
      long op0_size = ((unsigned short) mode_size[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)]);
      if (op0_size < offset)
        op0 = (((op0)->u.fld[0]).rtx1);
      else
        {
   offset -= op0_size;
   op0 = (((op0)->u.fld[1]).rtx1);
        }
    }
  else
    break;
       }
   }
      }
      break;
    default:
      break;
    }
  return x;
}
static rtx
simplify_if_then_else (rtx x)
{
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  rtx cond = (((x)->u.fld[0]).rtx1);
  rtx true_rtx = (((x)->u.fld[1]).rtx1);
  rtx false_rtx = (((x)->u.fld[2]).rtx1);
  enum rtx_code true_code = ((enum rtx_code) (cond)->code);
  int comparison_p = (((rtx_class[(int) (((enum rtx_code) (cond)->code))]) & (~1)) == (RTX_COMPARE & (~1)));
  rtx temp;
  int i;
  enum rtx_code false_code;
  rtx reversed;
  if (comparison_p && true_rtx == const_true_rtx && false_rtx == (const_int_rtx[64]))
    return gen_binary (true_code, mode, (((cond)->u.fld[0]).rtx1), (((cond)->u.fld[1]).rtx1));
  if (comparison_p
      && true_rtx == (const_int_rtx[64]) && false_rtx == const_true_rtx
      && (reversed = reversed_comparison (cond, mode, (((cond)->u.fld[0]).rtx1),
       (((cond)->u.fld[1]).rtx1))))
    return reversed;
  if (comparison_p
      && ((false_code = combine_reversed_comparison_code (cond))
   != UNKNOWN)
      && (((enum rtx_code) ((((cond)->u.fld[0]).rtx1))->code) == REG))
    {
      long nzb;
      rtx from = (((cond)->u.fld[0]).rtx1);
      rtx true_val = (((cond)->u.fld[1]).rtx1);
      rtx false_val = true_val;
      int swapped = 0;
      if (false_code == EQ)
 {
   swapped = 1, true_code = EQ, false_code = NE;
   temp = true_rtx, true_rtx = false_rtx, false_rtx = temp;
 }
      if (true_code == EQ && true_val == (const_int_rtx[64])
   && exact_log2_wide ((unsigned long) (nzb = nonzero_bits (from, ((enum machine_mode) (from)->mode)))) >= 0)
 false_code = EQ, false_val = gen_rtx_CONST_INT (VOIDmode, (long) (nzb));
      else if (true_code == EQ && true_val == (const_int_rtx[64])
        && (num_sign_bit_copies (from, ((enum machine_mode) (from)->mode))
     == ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (from)->mode)]) * 8))))
 false_code = EQ, false_val = (const_int_rtx[64 -1]);
      if (reg_mentioned_p (from, true_rtx))
 true_rtx = subst (known_cond (copy_rtx (true_rtx), true_code,
          from, true_val),
        (global_rtl[GR_PC]), (global_rtl[GR_PC]), 0, 0);
      if (reg_mentioned_p (from, false_rtx))
 false_rtx = subst (known_cond (copy_rtx (false_rtx), false_code,
       from, false_val),
         (global_rtl[GR_PC]), (global_rtl[GR_PC]), 0, 0);
      do_SUBST(&((((x)->u.fld[1]).rtx1)), (swapped ? false_rtx : true_rtx));
      do_SUBST(&((((x)->u.fld[2]).rtx1)), (swapped ? true_rtx : false_rtx));
      true_rtx = (((x)->u.fld[1]).rtx1);
      false_rtx = (((x)->u.fld[2]).rtx1);
      true_code = ((enum rtx_code) (cond)->code);
    }
  if (comparison_p
      && combine_reversed_comparison_code (cond) != UNKNOWN
      && (true_rtx == (global_rtl[GR_PC])
   || (((rtx_class[(int) (((enum rtx_code) (true_rtx)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (true_rtx)->code) == CONST_VECTOR)
       && ((enum rtx_code) (false_rtx)->code) != CONST_INT && false_rtx != (global_rtl[GR_PC]))
   || true_rtx == (const_int_rtx[64])
   || ((((rtx_class[(int) (((enum rtx_code) (true_rtx)->code))]) & (~1)) == (RTX_OBJ & (~1))) && !(((rtx_class[(int) (((enum rtx_code) (false_rtx)->code))]) & (~1)) == (RTX_OBJ & (~1))))
   || (((enum rtx_code) (true_rtx)->code) == SUBREG && (((rtx_class[(int) (((enum rtx_code) ((((true_rtx)->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1)))
       && !(((rtx_class[(int) (((enum rtx_code) (false_rtx)->code))]) & (~1)) == (RTX_OBJ & (~1))))
   || reg_mentioned_p (true_rtx, false_rtx)
   || rtx_equal_p (false_rtx, (((cond)->u.fld[0]).rtx1))))
    {
      true_code = reversed_comparison_code (cond, ((void *)0));
      do_SUBST(&((((x)->u.fld[0]).rtx1)), (reversed_comparison (cond, ((enum machine_mode) (cond)->mode), (((cond)->u.fld[0]).rtx1), (((cond)->u.fld[1]).rtx1))))
                      ;
      do_SUBST(&((((x)->u.fld[1]).rtx1)), (false_rtx));
      do_SUBST(&((((x)->u.fld[2]).rtx1)), (true_rtx));
      temp = true_rtx, true_rtx = false_rtx, false_rtx = temp;
      cond = (((x)->u.fld[0]).rtx1);
      true_code = ((enum rtx_code) (cond)->code);
      comparison_p = (((rtx_class[(int) (((enum rtx_code) (cond)->code))]) & (~1)) == (RTX_COMPARE & (~1)));
    }
  if (rtx_equal_p (true_rtx, false_rtx) && ! side_effects_p (cond))
    return true_rtx;
  if (true_code == EQ && ! side_effects_p (cond)
      && !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
      && rtx_equal_p ((((cond)->u.fld[0]).rtx1), false_rtx)
      && rtx_equal_p ((((cond)->u.fld[1]).rtx1), true_rtx))
    return false_rtx;
  else if (true_code == NE && ! side_effects_p (cond)
    && !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
    && rtx_equal_p ((((cond)->u.fld[0]).rtx1), true_rtx)
    && rtx_equal_p ((((cond)->u.fld[1]).rtx1), false_rtx))
    return true_rtx;
  if (mode_class[mode] == MODE_INT
      && ((enum rtx_code) (false_rtx)->code) == NEG
      && rtx_equal_p (true_rtx, (((false_rtx)->u.fld[0]).rtx1))
      && comparison_p
      && rtx_equal_p (true_rtx, (((cond)->u.fld[0]).rtx1))
      && ! side_effects_p (true_rtx))
    switch (true_code)
      {
      case GT:
      case GE:
 return simplify_gen_unary (ABS, mode, true_rtx, mode);
      case LT:
      case LE:
 return
   simplify_gen_unary (NEG, mode,
         simplify_gen_unary (ABS, mode, true_rtx, mode),
         mode);
      default:
 break;
      }
  if ((! (mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) || flag_unsafe_math_optimizations)
      && comparison_p
      && rtx_equal_p ((((cond)->u.fld[0]).rtx1), true_rtx)
      && rtx_equal_p ((((cond)->u.fld[1]).rtx1), false_rtx)
      && ! side_effects_p (cond))
    switch (true_code)
      {
      case GE:
      case GT:
 return gen_binary (SMAX, mode, true_rtx, false_rtx);
      case LE:
      case LT:
 return gen_binary (SMIN, mode, true_rtx, false_rtx);
      case GEU:
      case GTU:
 return gen_binary (UMAX, mode, true_rtx, false_rtx);
      case LEU:
      case LTU:
 return gen_binary (UMIN, mode, true_rtx, false_rtx);
      default:
 break;
      }
  if ((1 == 1 || 1 == -1)
      && comparison_p
      && mode_class[mode] == MODE_INT
      && ! side_effects_p (x))
    {
      rtx t = make_compound_operation (true_rtx, SET);
      rtx f = make_compound_operation (false_rtx, SET);
      rtx cond_op0 = (((cond)->u.fld[0]).rtx1);
      rtx cond_op1 = (((cond)->u.fld[1]).rtx1);
      enum rtx_code op = NIL, extend_op = NIL;
      enum machine_mode m = mode;
      rtx z = 0, c1 = (rtx) 0;
      if ((((enum rtx_code) (t)->code) == PLUS || ((enum rtx_code) (t)->code) == MINUS
    || ((enum rtx_code) (t)->code) == IOR || ((enum rtx_code) (t)->code) == XOR
    || ((enum rtx_code) (t)->code) == ASHIFT
    || ((enum rtx_code) (t)->code) == LSHIFTRT || ((enum rtx_code) (t)->code) == ASHIFTRT)
   && rtx_equal_p ((((t)->u.fld[0]).rtx1), f))
 c1 = (((t)->u.fld[1]).rtx1), op = ((enum rtx_code) (t)->code), z = f;
      else if ((((enum rtx_code) (t)->code) == PLUS || ((enum rtx_code) (t)->code) == IOR
  || ((enum rtx_code) (t)->code) == XOR)
        && rtx_equal_p ((((t)->u.fld[1]).rtx1), f))
 c1 = (((t)->u.fld[0]).rtx1), op = ((enum rtx_code) (t)->code), z = f;
      else if (((enum rtx_code) (t)->code) == SIGN_EXTEND
        && (((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == PLUS
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == MINUS
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == IOR
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == XOR
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == ASHIFT
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == LSHIFTRT
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == ASHIFTRT)
        && ((enum rtx_code) (((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SUBREG
        && subreg_lowpart_p (((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtx1))
        && rtx_equal_p ((((((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1), f)
        && (num_sign_bit_copies (f, ((enum machine_mode) (f)->mode))
     > (unsigned int)
       (((unsigned short) (((unsigned short) mode_size[mode]) * 8))
        - ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)]) * 8)))))
 {
   c1 = ((((((t)->u.fld[0]).rtx1))->u.fld[1]).rtx1); z = f; op = ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code);
   extend_op = SIGN_EXTEND;
   m = ((enum machine_mode) ((((t)->u.fld[0]).rtx1))->mode);
 }
      else if (((enum rtx_code) (t)->code) == SIGN_EXTEND
        && (((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == PLUS
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == IOR
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == XOR)
        && ((enum rtx_code) (((((((t)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == SUBREG
        && subreg_lowpart_p (((((((t)->u.fld[0]).rtx1))->u.fld[1]).rtx1))
        && rtx_equal_p ((((((((((t)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1), f)
        && (num_sign_bit_copies (f, ((enum machine_mode) (f)->mode))
     > (unsigned int)
       (((unsigned short) (((unsigned short) mode_size[mode]) * 8))
        - ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (((((((t)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->mode)]) * 8)))))
 {
   c1 = ((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtx1); z = f; op = ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code);
   extend_op = SIGN_EXTEND;
   m = ((enum machine_mode) ((((t)->u.fld[0]).rtx1))->mode);
 }
      else if (((enum rtx_code) (t)->code) == ZERO_EXTEND
        && (((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == PLUS
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == MINUS
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == IOR
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == XOR
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == ASHIFT
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == LSHIFTRT
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == ASHIFTRT)
        && ((enum rtx_code) (((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SUBREG
        && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
        && subreg_lowpart_p (((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtx1))
        && rtx_equal_p ((((((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1), f)
        && ((nonzero_bits (f, ((enum machine_mode) (f)->mode))
      & ~mode_mask_array[((enum machine_mode) (((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)])
     == 0))
 {
   c1 = ((((((t)->u.fld[0]).rtx1))->u.fld[1]).rtx1); z = f; op = ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code);
   extend_op = ZERO_EXTEND;
   m = ((enum machine_mode) ((((t)->u.fld[0]).rtx1))->mode);
 }
      else if (((enum rtx_code) (t)->code) == ZERO_EXTEND
        && (((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == PLUS
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == IOR
     || ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == XOR)
        && ((enum rtx_code) (((((((t)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == SUBREG
        && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
        && subreg_lowpart_p (((((((t)->u.fld[0]).rtx1))->u.fld[1]).rtx1))
        && rtx_equal_p ((((((((((t)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1), f)
        && ((nonzero_bits (f, ((enum machine_mode) (f)->mode))
      & ~mode_mask_array[((enum machine_mode) (((((((t)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->mode)])
     == 0))
 {
   c1 = ((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtx1); z = f; op = ((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code);
   extend_op = ZERO_EXTEND;
   m = ((enum machine_mode) ((((t)->u.fld[0]).rtx1))->mode);
 }
      if (z)
 {
   temp = subst (gen_binary (true_code, m, cond_op0, cond_op1),
   (global_rtl[GR_PC]), (global_rtl[GR_PC]), 0, 0);
   temp = gen_binary (MULT, m, temp,
        gen_binary (MULT, m, c1, const_true_rtx));
   temp = subst (temp, (global_rtl[GR_PC]), (global_rtl[GR_PC]), 0, 0);
   temp = gen_binary (op, m, rtl_hooks.gen_lowpart (m, z), temp);
   if (extend_op != NIL)
     temp = simplify_gen_unary (extend_op, mode, temp, m);
   return temp;
 }
    }
  if (true_code == NE && (((cond)->u.fld[1]).rtx1) == (const_int_rtx[64])
      && false_rtx == (const_int_rtx[64]) && ((enum rtx_code) (true_rtx)->code) == CONST_INT
      && ((1 == nonzero_bits ((((cond)->u.fld[0]).rtx1), mode)
    && (i = exact_log2_wide ((unsigned long) (((true_rtx)->u.hwint[0])))) >= 0)
   || ((num_sign_bit_copies ((((cond)->u.fld[0]).rtx1), mode)
        == ((unsigned short) (((unsigned short) mode_size[mode]) * 8)))
       && (i = exact_log2_wide ((unsigned long) (-((true_rtx)->u.hwint[0])))) >= 0)))
    return
      simplify_shift_const ((rtx) 0, ASHIFT, mode,
       rtl_hooks.gen_lowpart (mode, (((cond)->u.fld[0]).rtx1)), i);
  if (true_code == NE && (((cond)->u.fld[1]).rtx1) == (const_int_rtx[64])
      && false_rtx == (const_int_rtx[64]) && ((enum rtx_code) (true_rtx)->code) == CONST_INT
      && ((enum machine_mode) ((((cond)->u.fld[0]).rtx1))->mode) == mode
      && (((true_rtx)->u.hwint[0]) & mode_mask_array[mode])
   == nonzero_bits ((((cond)->u.fld[0]).rtx1), mode)
      && (i = exact_log2_wide ((unsigned long) (((true_rtx)->u.hwint[0]) & mode_mask_array[mode]))) >= 0)
    return (((cond)->u.fld[0]).rtx1);
  return x;
}
static rtx
simplify_set (rtx x)
{
  rtx src = (((x)->u.fld[1]).rtx1);
  rtx dest = (((x)->u.fld[0]).rtx1);
  enum machine_mode mode
    = ((enum machine_mode) (src)->mode) != VOIDmode ? ((enum machine_mode) (src)->mode) : ((enum machine_mode) (dest)->mode);
  rtx other_insn;
  rtx *cc_use;
  if (((enum rtx_code) (dest)->code) == PC && ((enum rtx_code) (src)->code) == RETURN)
    return src;
  if (mode_class[mode] == MODE_INT
      && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4))
    {
      src = force_to_mode (src, mode, ~(long) 0, (rtx) 0, 0);
      do_SUBST(&((((x)->u.fld[1]).rtx1)), (src));
    }
  if ((mode_class[mode] == MODE_CC
       || ((enum rtx_code) (src)->code) == COMPARE
       || ((dest) ? 0 : 0))
      && (cc_use = find_single_use (dest, subst_insn, &other_insn)) != 0
      && (undobuf.other_insn == 0 || other_insn == undobuf.other_insn)
      && (((rtx_class[(int) (((enum rtx_code) (*cc_use)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
      && rtx_equal_p ((((*cc_use)->u.fld[0]).rtx1), dest))
    {
      enum rtx_code old_code = ((enum rtx_code) (*cc_use)->code);
      enum rtx_code new_code;
      rtx op0, op1, tmp;
      int other_changed = 0;
      enum machine_mode compare_mode = ((enum machine_mode) (dest)->mode);
      if (((enum rtx_code) (src)->code) == COMPARE)
 op0 = (((src)->u.fld[0]).rtx1), op1 = (((src)->u.fld[1]).rtx1);
      else
 op0 = src, op1 = (const_int_rtx[64]);
      tmp = simplify_relational_operation (old_code, compare_mode, VOIDmode,
        op0, op1);
      if (!tmp)
        new_code = old_code;
      else if (!((rtx_class[(int) (((enum rtx_code) (tmp)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (tmp)->code) == CONST_VECTOR))
        {
          new_code = ((enum rtx_code) (tmp)->code);
          op0 = (((tmp)->u.fld[0]).rtx1);
          op1 = (((tmp)->u.fld[1]).rtx1);
        }
      else
 {
   rtx pat = (((other_insn)->u.fld[5]).rtx1);
   undobuf.other_insn = other_insn;
   do_SUBST(&(*cc_use), (tmp));
   if (((enum rtx_code) (pat)->code) == SET)
     {
       rtx new = simplify_rtx ((((pat)->u.fld[1]).rtx1));
       if (new != (rtx) 0)
  do_SUBST(&((((pat)->u.fld[1]).rtx1)), (new));
     }
   do_SUBST(&((((x)->u.fld[0]).rtx1)), ((global_rtl[GR_PC])));
   do_SUBST(&((((x)->u.fld[1]).rtx1)), ((global_rtl[GR_PC])));
   return x;
 }
      new_code = simplify_comparison (new_code, &op0, &op1);
      if (mode_class[((enum machine_mode) (op0)->mode)] == MODE_CC)
 compare_mode = ((enum machine_mode) (op0)->mode);
      else
 compare_mode = ix86_cc_mode ((new_code), (op0), (op1));
      if (compare_mode != ((enum machine_mode) (dest)->mode))
 {
   unsigned int regno = (((dest)->u.fld[0]).rtuint);
   rtx new_dest = gen_rtx_REG (compare_mode, regno);
   if (regno < 53
       || ((((reg_n_info)->data.reg[regno])->sets) == 1 && ! (((dest))->volatil)))
     {
       if (regno >= 53)
  do_SUBST(&((cfun->emit->x_regno_reg_rtx)[regno]), (new_dest));
       do_SUBST(&((((x)->u.fld[0]).rtx1)), (new_dest));
       do_SUBST(&((((*cc_use)->u.fld[0]).rtx1)), (new_dest));
       other_changed = 1;
       dest = new_dest;
     }
 }
      if (new_code != old_code)
 {
   int other_changed_previously = other_changed;
   unsigned long mask;
   do_SUBST(&(*cc_use), (gen_rtx_fmt_ee (new_code, ((enum machine_mode) (*cc_use)->mode), dest, (const_int_rtx[64]))))
                         ;
   other_changed = 1;
   if (((old_code == NE && new_code == EQ)
        || (old_code == EQ && new_code == NE))
       && ! other_changed_previously && op1 == (const_int_rtx[64])
       && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)) <= (8 * 4)
       && exact_log2_wide ((unsigned long) (mask = nonzero_bits (op0, ((enum machine_mode) (op0)->mode)))) >= 0)
     {
       rtx pat = (((other_insn)->u.fld[5]).rtx1), note = 0;
       if ((recog_for_combine (&pat, other_insn, &note) < 0
     && ! check_asm_operands (pat)))
  {
    ((*cc_use)->code = (old_code));
    other_changed = 0;
    op0 = gen_binary (XOR, ((enum machine_mode) (op0)->mode), op0, gen_rtx_CONST_INT (VOIDmode, (long) (mask)));
  }
     }
 }
      if (other_changed)
 undobuf.other_insn = other_insn;
      if (((enum rtx_code) (src)->code) != COMPARE || ((enum machine_mode) (src)->mode) != compare_mode)
 {
   do_SUBST(&((((x)->u.fld[1]).rtx1)), (gen_rtx_fmt_ee (COMPARE, (compare_mode), (op0), (op1))));
   src = (((x)->u.fld[1]).rtx1);
 }
      else
 {
   do_SUBST(&((((src)->u.fld[0]).rtx1)), (op0));
   do_SUBST(&((((src)->u.fld[1]).rtx1)), (op1));
 }
    }
  else
    {
      src = make_compound_operation (src, SET);
      do_SUBST(&((((x)->u.fld[1]).rtx1)), (src));
    }
  if (((enum rtx_code) (src)->code) == SUBREG && subreg_lowpart_p (src)
      && !(((rtx_class[(int) (((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1)))
      && (((((unsigned short) mode_size[((enum machine_mode) (src)->mode)]) + ((0 ? 8 : 4) - 1))
    / (0 ? 8 : 4))
   == ((((unsigned short) mode_size[((enum machine_mode) ((((src)->u.fld[0]).rtx1))->mode)])
        + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4)))
      && (((unsigned short) mode_size[((enum machine_mode) (src)->mode)])
        < ((unsigned short) mode_size[((enum machine_mode) ((((src)->u.fld[0]).rtx1))->mode)]))
      && ! ((((enum rtx_code) (dest)->code) == REG) && (((dest)->u.fld[0]).rtuint) < 53
     && (((unsigned short) mode_size[((enum machine_mode) (src)->mode)]) < ((unsigned short) mode_size[((enum machine_mode) ((((src)->u.fld[0]).rtx1))->mode)]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, ((regclass_map[(((dest)->u.fld[0]).rtuint)]))) || reg_classes_intersect_p (MMX_REGS, ((regclass_map[(((dest)->u.fld[0]).rtuint)]))) : ((unsigned short) mode_size[((enum machine_mode) ((((src)->u.fld[0]).rtx1))->mode)]) != ((unsigned short) mode_size[((enum machine_mode) (src)->mode)]) ? reg_classes_intersect_p (FLOAT_REGS, ((regclass_map[(((dest)->u.fld[0]).rtuint)]))) : 0)
                     )
      && ((((enum rtx_code) (dest)->code) == REG)
   || (((enum rtx_code) (dest)->code) == SUBREG
       && (((enum rtx_code) ((((dest)->u.fld[0]).rtx1))->code) == REG))))
    {
      do_SUBST(&((((x)->u.fld[0]).rtx1)), (rtl_hooks.gen_lowpart (((enum machine_mode) ((((src)->u.fld[0]).rtx1))->mode), dest)))
                ;
      do_SUBST(&((((x)->u.fld[1]).rtx1)), ((((src)->u.fld[0]).rtx1)));
      src = (((x)->u.fld[1]).rtx1), dest = (((x)->u.fld[0]).rtx1);
    }
  if (((enum rtx_code) (dest)->code) != PC
      && ((enum rtx_code) (src)->code) == IF_THEN_ELSE
      && mode_class[((enum machine_mode) (src)->mode)] == MODE_INT
      && (((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == EQ || ((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == NE)
      && ((((((src)->u.fld[0]).rtx1))->u.fld[1]).rtx1) == (const_int_rtx[64])
      && ((enum machine_mode) (src)->mode) == ((enum machine_mode) (((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)
      && ! can_conditionally_move_p (((enum machine_mode) (src)->mode))
      && (num_sign_bit_copies (((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
          ((enum machine_mode) (((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode))
   == ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)]) * 8)))
      && ! side_effects_p (src))
    {
      rtx true_rtx = (((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == NE
        ? (((src)->u.fld[1]).rtx1) : (((src)->u.fld[2]).rtx1));
      rtx false_rtx = (((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == NE
     ? (((src)->u.fld[2]).rtx1) : (((src)->u.fld[1]).rtx1));
      rtx term1 = (const_int_rtx[64]), term2, term3;
      if (((enum rtx_code) (true_rtx)->code) == IOR
   && rtx_equal_p ((((true_rtx)->u.fld[0]).rtx1), false_rtx))
 term1 = false_rtx, true_rtx = (((true_rtx)->u.fld[1]).rtx1), false_rtx = (const_int_rtx[64]);
      else if (((enum rtx_code) (true_rtx)->code) == IOR
        && rtx_equal_p ((((true_rtx)->u.fld[1]).rtx1), false_rtx))
 term1 = false_rtx, true_rtx = (((true_rtx)->u.fld[0]).rtx1), false_rtx = (const_int_rtx[64]);
      else if (((enum rtx_code) (false_rtx)->code) == IOR
        && rtx_equal_p ((((false_rtx)->u.fld[0]).rtx1), true_rtx))
 term1 = true_rtx, false_rtx = (((false_rtx)->u.fld[1]).rtx1), true_rtx = (const_int_rtx[64]);
      else if (((enum rtx_code) (false_rtx)->code) == IOR
        && rtx_equal_p ((((false_rtx)->u.fld[1]).rtx1), true_rtx))
 term1 = true_rtx, false_rtx = (((false_rtx)->u.fld[0]).rtx1), true_rtx = (const_int_rtx[64]);
      term2 = gen_binary (AND, ((enum machine_mode) (src)->mode),
     ((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1), true_rtx);
      term3 = gen_binary (AND, ((enum machine_mode) (src)->mode),
     simplify_gen_unary (NOT, ((enum machine_mode) (src)->mode),
           ((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
           ((enum machine_mode) (src)->mode)),
     false_rtx);
      do_SUBST(&((((x)->u.fld[1]).rtx1)), (gen_binary (IOR, ((enum machine_mode) (src)->mode), gen_binary (IOR, ((enum machine_mode) (src)->mode), term1, term2), term3)))
           ;
      src = (((x)->u.fld[1]).rtx1);
    }
  if (((enum rtx_code) (src)->code) == CLOBBER && (((src)->u.fld[0]).rtx1) == (const_int_rtx[64]))
    return src;
  else if (((enum rtx_code) (dest)->code) == CLOBBER && (((dest)->u.fld[0]).rtx1) == (const_int_rtx[64]))
    return dest;
  else
    return make_field_assignment (x);
}
static rtx
simplify_logical (rtx x)
{
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  rtx op0 = (((x)->u.fld[0]).rtx1);
  rtx op1 = (((x)->u.fld[1]).rtx1);
  rtx reversed;
  switch (((enum rtx_code) (x)->code))
    {
    case AND:
      if (((enum rtx_code) (op0)->code) == XOR
   && rtx_equal_p ((((op0)->u.fld[0]).rtx1), op1)
   && ! side_effects_p (op1))
 x = gen_binary (AND, mode,
   simplify_gen_unary (NOT, mode, (((op0)->u.fld[1]).rtx1), mode),
   op1);
      if (((enum rtx_code) (op0)->code) == XOR
   && rtx_equal_p ((((op0)->u.fld[1]).rtx1), op1)
   && ! side_effects_p (op1))
 x = gen_binary (AND, mode,
   simplify_gen_unary (NOT, mode, (((op0)->u.fld[0]).rtx1), mode),
   op1);
      if (((enum rtx_code) (op0)->code) == NOT
   && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == XOR
   && rtx_equal_p (((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1), op1)
   && ! side_effects_p (op1))
 x = gen_binary (AND, mode, ((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1), op1);
      if (((enum rtx_code) (op0)->code) == NOT
   && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == XOR
   && rtx_equal_p (((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1), op1)
   && ! side_effects_p (op1))
 x = gen_binary (AND, mode, ((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1), op1);
      if (((enum rtx_code) (op1)->code) == CONST_INT
   && (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
       || ((op1)->u.hwint[0]) > 0))
 {
   x = simplify_and_const_int (x, mode, op0, ((op1)->u.hwint[0]));
   if (((enum rtx_code) (x)->code) == IOR && ((enum rtx_code) (op0)->code) == AND
       && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && ((enum rtx_code) (op1)->code) == CONST_INT
       && ((((((op0)->u.fld[1]).rtx1))->u.hwint[0]) & ((op1)->u.hwint[0])) != 0)
     return gen_binary (IOR, mode,
          gen_binary (AND, mode, (((op0)->u.fld[0]).rtx1),
        gen_rtx_CONST_INT (VOIDmode, (long) ((((((op0)->u.fld[1]).rtx1))->u.hwint[0]) & ~((op1)->u.hwint[0])))
                          ), op1);
   if (((enum rtx_code) (x)->code) != AND)
     return x;
   op0 = (((x)->u.fld[0]).rtx1);
   op1 = (((x)->u.fld[1]).rtx1);
 }
      if (((enum rtx_code) (op0)->code) == IOR
   && (rtx_equal_p ((((op0)->u.fld[0]).rtx1), op1)
       || rtx_equal_p ((((op0)->u.fld[1]).rtx1), op1))
   && ! side_effects_p ((((op0)->u.fld[0]).rtx1))
   && ! side_effects_p ((((op0)->u.fld[1]).rtx1)))
 return op1;
      if (((enum rtx_code) (op0)->code) == IOR || ((enum rtx_code) (op0)->code) == XOR)
 {
   x = apply_distributive_law
     (gen_binary (((enum rtx_code) (op0)->code), mode,
    gen_binary (AND, mode, (((op0)->u.fld[0]).rtx1), op1),
    gen_binary (AND, mode, (((op0)->u.fld[1]).rtx1),
         copy_rtx (op1))));
   if (((enum rtx_code) (x)->code) != AND)
     return x;
 }
      if (((enum rtx_code) (op1)->code) == IOR || ((enum rtx_code) (op1)->code) == XOR)
 return apply_distributive_law
   (gen_binary (((enum rtx_code) (op1)->code), mode,
         gen_binary (AND, mode, (((op1)->u.fld[0]).rtx1), op0),
         gen_binary (AND, mode, (((op1)->u.fld[1]).rtx1),
       copy_rtx (op0))));
      if (((enum rtx_code) (op0)->code) == NOT && ((enum rtx_code) (op1)->code) == XOR)
 return apply_distributive_law
   (gen_binary (XOR, mode,
         gen_binary (IOR, mode, (((op0)->u.fld[0]).rtx1), (((op1)->u.fld[0]).rtx1)),
         gen_binary (IOR, mode, copy_rtx ((((op0)->u.fld[0]).rtx1)),
       (((op1)->u.fld[1]).rtx1))));
      else if (((enum rtx_code) (op1)->code) == NOT && ((enum rtx_code) (op0)->code) == XOR)
 return apply_distributive_law
   (gen_binary (XOR, mode,
         gen_binary (IOR, mode, (((op1)->u.fld[0]).rtx1), (((op0)->u.fld[0]).rtx1)),
         gen_binary (IOR, mode, copy_rtx ((((op1)->u.fld[0]).rtx1)), (((op0)->u.fld[1]).rtx1))));
      break;
    case IOR:
      if (((enum rtx_code) (op1)->code) == CONST_INT
   && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
   && (nonzero_bits (op0, mode) & ~((op1)->u.hwint[0])) == 0)
 return op1;
      if (((enum rtx_code) (op0)->code) == AND
   && (rtx_equal_p ((((op0)->u.fld[0]).rtx1), op1)
       || rtx_equal_p ((((op0)->u.fld[1]).rtx1), op1))
   && ! side_effects_p ((((op0)->u.fld[0]).rtx1))
   && ! side_effects_p ((((op0)->u.fld[1]).rtx1)))
 return op1;
      if (((enum rtx_code) (op0)->code) == AND)
 {
   x = apply_distributive_law
     (gen_binary (AND, mode,
    gen_binary (IOR, mode, (((op0)->u.fld[0]).rtx1), op1),
    gen_binary (IOR, mode, (((op0)->u.fld[1]).rtx1),
         copy_rtx (op1))));
   if (((enum rtx_code) (x)->code) != IOR)
     return x;
 }
      if (((enum rtx_code) (op1)->code) == AND)
 {
   x = apply_distributive_law
     (gen_binary (AND, mode,
    gen_binary (IOR, mode, (((op1)->u.fld[0]).rtx1), op0),
    gen_binary (IOR, mode, (((op1)->u.fld[1]).rtx1),
         copy_rtx (op0))));
   if (((enum rtx_code) (x)->code) != IOR)
     return x;
 }
      if (((((enum rtx_code) (op0)->code) == ASHIFT && ((enum rtx_code) (op1)->code) == LSHIFTRT)
    || (((enum rtx_code) (op1)->code) == ASHIFT && ((enum rtx_code) (op0)->code) == LSHIFTRT))
   && rtx_equal_p ((((op0)->u.fld[0]).rtx1), (((op1)->u.fld[0]).rtx1))
   && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
   && ((enum rtx_code) ((((op1)->u.fld[1]).rtx1))->code) == CONST_INT
   && ((((((op0)->u.fld[1]).rtx1))->u.hwint[0]) + (((((op1)->u.fld[1]).rtx1))->u.hwint[0])
       == ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))
 return gen_rtx_fmt_ee (ROTATE, (mode), ((((op0)->u.fld[0]).rtx1)), ((((enum rtx_code) (op0)->code) == ASHIFT ? (((op0)->u.fld[1]).rtx1) : (((op1)->u.fld[1]).rtx1))))
                                     ;
      if (((enum rtx_code) (op1)->code) == CONST_INT && ((enum rtx_code) (op0)->code) == ASHIFTRT
   && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == PLUS
   && ((enum rtx_code) (((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
   && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((op0)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4))
 {
   int count = (((((op0)->u.fld[1]).rtx1))->u.hwint[0]);
   long mask = ((op1)->u.hwint[0]) << count;
   if (mask >> count == ((op1)->u.hwint[0])
       && (mask & nonzero_bits ((((op0)->u.fld[0]).rtx1), mode)) == 0)
     {
       do_SUBST(&(((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1)), (gen_rtx_CONST_INT (VOIDmode, (long) (((((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) | mask))))
                                                         ;
       return op0;
     }
 }
      break;
    case XOR:
      if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
   && (nonzero_bits (op0, mode)
       & nonzero_bits (op1, mode)) == 0)
 return (gen_binary (IOR, mode, op0, op1));
      {
 int num_negated = 0;
 if (((enum rtx_code) (op0)->code) == NOT)
   num_negated++, op0 = (((op0)->u.fld[0]).rtx1);
 if (((enum rtx_code) (op1)->code) == NOT)
   num_negated++, op1 = (((op1)->u.fld[0]).rtx1);
 if (num_negated == 2)
   {
     do_SUBST(&((((x)->u.fld[0]).rtx1)), (op0));
     do_SUBST(&((((x)->u.fld[1]).rtx1)), (op1));
   }
 else if (num_negated == 1)
   return
     simplify_gen_unary (NOT, mode, gen_binary (XOR, mode, op0, op1),
    mode);
      }
      if (((enum rtx_code) (op0)->code) == AND
   && rtx_equal_p ((((op0)->u.fld[1]).rtx1), op1)
   && ! side_effects_p (op1))
 return gen_binary (AND, mode,
      simplify_gen_unary (NOT, mode, (((op0)->u.fld[0]).rtx1), mode),
      op1);
      else if (((enum rtx_code) (op0)->code) == AND
        && rtx_equal_p ((((op0)->u.fld[0]).rtx1), op1)
        && ! side_effects_p (op1))
 return gen_binary (AND, mode,
      simplify_gen_unary (NOT, mode, (((op0)->u.fld[1]).rtx1), mode),
      op1);
      if (1 == 1
   && op1 == (const_int_rtx[64 +1])
   && (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
   && (reversed = reversed_comparison (op0, mode, (((op0)->u.fld[0]).rtx1),
           (((op0)->u.fld[1]).rtx1))))
 return reversed;
      if (1 == 1
   && op1 == (const_int_rtx[64 +1])
   && ((enum rtx_code) (op0)->code) == LSHIFTRT
   && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((op0)->u.fld[1]).rtx1))->u.hwint[0]) == ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1)
 return gen_rtx_fmt_ee (GE, (mode), ((((op0)->u.fld[0]).rtx1)), ((const_int_rtx[64])));
      if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
   && ((1 & mode_mask_array[mode])
       == (unsigned long) 1 << (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1))
   && op1 == const_true_rtx
   && (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
   && (reversed = reversed_comparison (op0, mode, (((op0)->u.fld[0]).rtx1),
           (((op0)->u.fld[1]).rtx1))))
 return reversed;
      break;
    default:
      fancy_abort ("gcc.c", 411768, "?");
    }
  return x;
}
static rtx
expand_compound_operation (rtx x)
{
  unsigned long pos = 0, len;
  int unsignedp = 0;
  unsigned int modewidth;
  rtx tem;
  switch (((enum rtx_code) (x)->code))
    {
    case ZERO_EXTEND:
      unsignedp = 1;
    case SIGN_EXTEND:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_INT)
 return x;
      if (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) > (0 ? 8 : 4))
 return x;
      if (! (mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_INT || mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_PARTIAL_INT))
 return x;
      len = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8));
      if (len == 0)
 return x;
      break;
    case ZERO_EXTRACT:
      unsignedp = 1;
    case SIGN_EXTRACT:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CLOBBER)
 return (((x)->u.fld[0]).rtx1);
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != CONST_INT
   || ((enum rtx_code) ((((x)->u.fld[2]).rtx1))->code) != CONST_INT
   || ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) == VOIDmode)
 return x;
      if (! (mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_INT || mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_PARTIAL_INT))
 return x;
      len = (((((x)->u.fld[1]).rtx1))->u.hwint[0]);
      pos = (((((x)->u.fld[2]).rtx1))->u.hwint[0]);
      if (len + pos > ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8)))
 do_SUBST(&((((x)->u.fld[0]).rtx1)), (gen_rtx_fmt_e (USE, (((enum machine_mode) (x)->mode)), ((((x)->u.fld[0]).rtx1)))));
      if (0)
 pos = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8)) - len - pos;
      break;
    default:
      return x;
    }
  if (((enum rtx_code) (x)->code) == SIGN_EXTEND
      && (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) <= (8 * 4)
   && ((nonzero_bits ((((x)->u.fld[0]).rtx1), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode))
  & ~(((unsigned long)
        mode_mask_array[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)])
       >> 1))
        == 0)))
    {
      rtx temp = gen_rtx_fmt_e (ZERO_EXTEND, (((enum machine_mode) (x)->mode)), ((((x)->u.fld[0]).rtx1)));
      rtx temp2 = expand_compound_operation (temp);
      if (rtx_cost (x, SET) > rtx_cost (temp2, SET))
       return temp2;
      else if (rtx_cost (x, SET) > rtx_cost (temp, SET))
       return temp;
      else
       return x;
    }
  if (((enum rtx_code) (x)->code) == ZERO_EXTEND)
    {
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == TRUNCATE
   && ((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode) == ((enum machine_mode) (x)->mode)
   && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) <= (8 * 4)
   && (nonzero_bits (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), ((enum machine_mode) (x)->mode))
       & ~mode_mask_array[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) == 0)
 return ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
   && ((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode) == ((enum machine_mode) (x)->mode)
   && subreg_lowpart_p ((((x)->u.fld[0]).rtx1))
   && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) <= (8 * 4)
   && (nonzero_bits (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), ((enum machine_mode) (x)->mode))
       & ~mode_mask_array[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) == 0)
 return ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == TRUNCATE
   && ((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode) == ((enum machine_mode) (x)->mode)
   && (((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_COMPARE & (~1)))
   && (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8))
       <= (8 * 4))
   && ((long) 1
       & ~mode_mask_array[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) == 0)
 return ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
   && ((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode) == ((enum machine_mode) (x)->mode)
   && subreg_lowpart_p ((((x)->u.fld[0]).rtx1))
   && (((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_COMPARE & (~1)))
   && (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8))
       <= (8 * 4))
   && ((long) 1
       & ~mode_mask_array[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) == 0)
 return ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
    }
  modewidth = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8));
  if (modewidth + len >= pos)
    tem = simplify_shift_const ((rtx) 0, unsignedp ? LSHIFTRT : ASHIFTRT,
    ((enum machine_mode) (x)->mode),
    simplify_shift_const ((rtx) 0, ASHIFT,
            ((enum machine_mode) (x)->mode),
            (((x)->u.fld[0]).rtx1),
            modewidth - pos - len),
    modewidth - len);
  else if (unsignedp && len < (8 * 4))
    tem = simplify_and_const_int ((rtx) 0, ((enum machine_mode) (x)->mode),
      simplify_shift_const ((rtx) 0, LSHIFTRT,
       ((enum machine_mode) (x)->mode),
       (((x)->u.fld[0]).rtx1), pos),
      ((long) 1 << len) - 1);
  else
    return x;
  if (((enum rtx_code) (tem)->code) == CLOBBER)
    return x;
  return tem;
}
static rtx
expand_field_assignment (rtx x)
{
  rtx inner;
  rtx pos;
  int len;
  rtx mask;
  enum machine_mode compute_mode;
  while (1)
    {
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == STRICT_LOW_PART
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SUBREG)
 {
   inner = (((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   len = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)]) * 8));
   pos = gen_rtx_CONST_INT (VOIDmode, (long) (subreg_lsb (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))));
 }
      else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ZERO_EXTRACT
        && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
 {
   inner = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   len = ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
   pos = ((((((x)->u.fld[0]).rtx1))->u.fld[2]).rtx1);
   if (((enum rtx_code) (pos)->code) == CONST_INT
       && ((pos)->u.hwint[0]) + len > ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (inner)->mode)]) * 8)))
     inner = gen_rtx_fmt_e (USE, (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)), (inner));
   if (0)
     {
       if (((enum rtx_code) (pos)->code) == CONST_INT)
  pos = gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (inner)->mode)]) * 8)) - len - ((pos)->u.hwint[0])))
                         ;
       else if (((enum rtx_code) (pos)->code) == MINUS
         && ((enum rtx_code) ((((pos)->u.fld[1]).rtx1))->code) == CONST_INT
         && ((((((pos)->u.fld[1]).rtx1))->u.hwint[0])
      == ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (inner)->mode)]) * 8)) - len))
  pos = (((pos)->u.fld[0]).rtx1);
       else
  pos = gen_binary (MINUS, ((enum machine_mode) (pos)->mode),
      gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (inner)->mode)]) * 8)) - len))
              ,
      pos);
     }
 }
      else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
        && nonzero_sign_valid
        && (((((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)])
       + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4))
     == ((((unsigned short) mode_size[((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)])
   + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4))))
 {
   x = gen_rtx_fmt_ee (SET, (VOIDmode), (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1)), (rtl_hooks.gen_lowpart (((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode), (((x)->u.fld[1]).rtx1))))
                    ;
   continue;
 }
      else
 break;
      while (((enum rtx_code) (inner)->code) == SUBREG && subreg_lowpart_p (inner))
 inner = (((inner)->u.fld[0]).rtx1);
      compute_mode = ((enum machine_mode) (inner)->mode);
      if (! (mode_class[compute_mode] == MODE_INT || mode_class[compute_mode] == MODE_PARTIAL_INT))
 {
   enum machine_mode imode;
   if (! (mode_class[compute_mode] == MODE_FLOAT || mode_class[compute_mode] == MODE_COMPLEX_FLOAT || mode_class[compute_mode] == MODE_VECTOR_FLOAT))
     break;
   imode = mode_for_size (((unsigned short) (((unsigned short) mode_size[compute_mode]) * 8)), MODE_INT, 0);
   if (imode == BLKmode)
     break;
   compute_mode = imode;
   inner = rtl_hooks.gen_lowpart (imode, inner);
 }
      if (len < (8 * 4))
 mask = gen_rtx_CONST_INT (VOIDmode, (long) (((long) 1 << len) - 1));
      else
 break;
      x = gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (inner)), (gen_binary (IOR, compute_mode, gen_binary (AND, compute_mode, simplify_gen_unary (NOT, compute_mode, gen_binary (ASHIFT, compute_mode, mask, pos), compute_mode), inner), gen_binary (ASHIFT, compute_mode, gen_binary (AND, compute_mode, rtl_hooks.gen_lowpart (compute_mode, (((x)->u.fld[1]).rtx1)), mask), pos))))
           ;
    }
  return x;
}
static rtx
make_extraction (enum machine_mode mode, rtx inner, long pos,
   rtx pos_rtx, unsigned long len, int unsignedp,
   int in_dest, int in_compare)
{
  enum machine_mode is_mode = ((enum machine_mode) (inner)->mode);
  enum machine_mode inner_mode;
  enum machine_mode wanted_inner_mode = byte_mode;
  enum machine_mode wanted_inner_reg_mode = word_mode;
  enum machine_mode pos_mode = word_mode;
  enum machine_mode extraction_mode = word_mode;
  enum machine_mode tmode = mode_for_size (len, MODE_INT, 1);
  int spans_byte = 0;
  rtx new = 0;
  rtx orig_pos_rtx = pos_rtx;
  long orig_pos;
  if (((enum rtx_code) (inner)->code) == USE)
    spans_byte = 1, inner = (((inner)->u.fld[0]).rtx1);
  else if (((enum rtx_code) (inner)->code) == SUBREG && subreg_lowpart_p (inner))
    {
      if ((((enum rtx_code) ((((inner)->u.fld[0]).rtx1))->code) == MEM))
 is_mode = ((enum machine_mode) ((((inner)->u.fld[0]).rtx1))->mode);
      inner = (((inner)->u.fld[0]).rtx1);
    }
  else if (((enum rtx_code) (inner)->code) == ASHIFT
    && ((enum rtx_code) ((((inner)->u.fld[1]).rtx1))->code) == CONST_INT
    && pos_rtx == 0 && pos == 0
    && len > (unsigned long) (((((inner)->u.fld[1]).rtx1))->u.hwint[0]))
    {
      new = make_extraction (mode, (((inner)->u.fld[0]).rtx1),
        0, 0, len - (((((inner)->u.fld[1]).rtx1))->u.hwint[0]),
        unsignedp, in_dest, in_compare);
      if (new != 0)
 return gen_rtx_fmt_ee (ASHIFT, (mode), (new), ((((inner)->u.fld[1]).rtx1)));
    }
  inner_mode = ((enum machine_mode) (inner)->mode);
  if (pos_rtx && ((enum rtx_code) (pos_rtx)->code) == CONST_INT)
    pos = ((pos_rtx)->u.hwint[0]), pos_rtx = 0;
  if (tmode != BLKmode
      && ! (spans_byte && inner_mode != tmode)
      && ((pos_rtx == 0 && (pos % (8 * (0 ? 8 : 4))) == 0
    && !(((enum rtx_code) (inner)->code) == MEM)
    && (! in_dest
        || ((((enum rtx_code) (inner)->code) == REG)
     && have_insn_for (STRICT_LOW_PART, tmode))))
   || ((((enum rtx_code) (inner)->code) == MEM) && pos_rtx == 0
       && (pos
    % (0 ? get_mode_alignment (tmode)
       : 8)) == 0
       && ((unsigned short) (((unsigned short) mode_size[inner_mode]) * 8)) >= ((unsigned short) (((unsigned short) mode_size[tmode]) * 8))
       && (inner_mode == tmode
    || (! mode_dependent_address_p ((((inner)->u.fld[0]).rtx1))
        && ! (((inner))->volatil))))))
    {
      if ((((enum rtx_code) (inner)->code) == MEM))
 {
   long offset;
   if (0)
     offset = (((unsigned short) (((unsigned short) mode_size[is_mode]) * 8)) - len - pos) / 8;
   else
     offset = pos / 8;
   new = adjust_address_1 (inner, tmode, offset, 0, 1);
 }
      else if ((((enum rtx_code) (inner)->code) == REG))
 {
   if (tmode != inner_mode)
     {
       if (pos || in_dest)
  {
    long final_word = pos / (8 * (0 ? 8 : 4));
    if (0
        && ((unsigned short) mode_size[inner_mode]) > (0 ? 8 : 4))
      final_word = ((((unsigned short) mode_size[inner_mode])
       - ((unsigned short) mode_size[tmode]))
      / (0 ? 8 : 4)) - final_word;
    final_word *= (0 ? 8 : 4);
    if (0 &&
        ((unsigned short) mode_size[inner_mode]) > ((unsigned short) mode_size[tmode]))
      final_word += (((unsigned short) mode_size[inner_mode])
       - ((unsigned short) mode_size[tmode])) % (0 ? 8 : 4);
    if (final_word >= ((unsigned short) mode_size[inner_mode]))
      return (rtx) 0;
    new = gen_rtx_SUBREG (tmode, inner, final_word);
  }
       else
  new = rtl_hooks.gen_lowpart (tmode, inner);
     }
   else
     new = inner;
 }
      else
 new = force_to_mode (inner, tmode,
        len >= (8 * 4)
        ? ~(unsigned long) 0
        : ((unsigned long) 1 << len) - 1,
        (rtx) 0, 0);
      if (in_dest)
 return ((((enum rtx_code) (new)->code) == MEM) ? new
  : (((enum rtx_code) (new)->code) != SUBREG
     ? gen_rtx_fmt_e (CLOBBER, (tmode), ((const_int_rtx[64])))
     : gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (new))));
      if (mode == tmode)
 return new;
      if (((enum rtx_code) (new)->code) == CONST_INT)
 return gen_int_mode (((new)->u.hwint[0]), mode);
      if (flag_expensive_optimizations
   && (((unsigned short) (((unsigned short) mode_size[tmode]) * 8)) <= (8 * 4)
       && ((nonzero_bits (new, tmode)
     & ~(((unsigned long)
   mode_mask_array[tmode])
         >> 1))
    == 0)))
 {
   rtx temp = gen_rtx_fmt_e (ZERO_EXTEND, (mode), (new));
   rtx temp1 = gen_rtx_fmt_e (SIGN_EXTEND, (mode), (new));
   if (rtx_cost (temp, SET) <= rtx_cost (temp1, SET))
     return temp;
   return temp1;
 }
      return (gen_rtx_fmt_e (unsignedp ? ZERO_EXTEND : SIGN_EXTEND,
        mode, new));
    }
  if (pos_rtx == 0 && pos == 0 && ! in_dest
      && ! in_compare && ! spans_byte && unsignedp)
    return 0;
  if (! spans_byte && (((enum rtx_code) (inner)->code) == MEM)
      && ((pos_rtx == 0 && pos + len > ((unsigned short) (((unsigned short) mode_size[is_mode]) * 8)))
   || (pos_rtx != 0 && len != 1)))
    return 0;
  if (in_dest && mode_for_extraction (EP_insv, -1) != MAX_MACHINE_MODE)
    {
      wanted_inner_reg_mode = mode_for_extraction (EP_insv, 0);
      pos_mode = mode_for_extraction (EP_insv, 2);
      extraction_mode = mode_for_extraction (EP_insv, 3);
    }
  if (! in_dest && unsignedp
      && mode_for_extraction (EP_extzv, -1) != MAX_MACHINE_MODE)
    {
      wanted_inner_reg_mode = mode_for_extraction (EP_extzv, 1);
      pos_mode = mode_for_extraction (EP_extzv, 3);
      extraction_mode = mode_for_extraction (EP_extzv, 0);
    }
  if (! in_dest && ! unsignedp
      && mode_for_extraction (EP_extv, -1) != MAX_MACHINE_MODE)
    {
      wanted_inner_reg_mode = mode_for_extraction (EP_extv, 1);
      pos_mode = mode_for_extraction (EP_extv, 3);
      extraction_mode = mode_for_extraction (EP_extv, 0);
    }
  if (mode != VOIDmode
      && ((unsigned short) mode_size[extraction_mode]) < ((unsigned short) mode_size[mode]))
    extraction_mode = mode;
  if (pos_rtx && ((enum machine_mode) (pos_rtx)->mode) != VOIDmode
      && ((unsigned short) mode_size[pos_mode]) < ((unsigned short) mode_size[((enum machine_mode) (pos_rtx)->mode)]))
    pos_mode = ((enum machine_mode) (pos_rtx)->mode);
  if (!(((enum rtx_code) (inner)->code) == MEM))
    wanted_inner_mode = wanted_inner_reg_mode;
  else if (inner_mode != wanted_inner_mode
    && (mode_dependent_address_p ((((inner)->u.fld[0]).rtx1))
        || (((inner))->volatil)))
    wanted_inner_mode = extraction_mode;
  orig_pos = pos;
  if (0)
    {
      int width = ((((enum rtx_code) (inner)->code) == MEM)
     ? ((unsigned short) (((unsigned short) mode_size[is_mode]) * 8))
     : ((unsigned short) (((unsigned short) mode_size[wanted_inner_mode]) * 8)));
      if (pos_rtx == 0)
 pos = width - len - pos;
      else
 pos_rtx
   = gen_rtx_fmt_ee (MINUS, (((enum machine_mode) (pos_rtx)->mode)), (gen_rtx_CONST_INT (VOIDmode, (long) (width - len))), (pos_rtx));
    }
  if (wanted_inner_mode != VOIDmode
      && ((unsigned short) mode_size[wanted_inner_mode]) < ((unsigned short) mode_size[is_mode])
      && (((((enum rtx_code) (inner)->code) == MEM)
    && (inner_mode == wanted_inner_mode
        || (! mode_dependent_address_p ((((inner)->u.fld[0]).rtx1))
     && ! (((inner))->volatil))))))
    {
      int offset = 0;
      if (0
   && ! spans_byte
   && ((unsigned short) mode_size[inner_mode]) < ((unsigned short) mode_size[is_mode]))
 offset -= ((unsigned short) mode_size[is_mode]) - ((unsigned short) mode_size[inner_mode]);
      if (pos_rtx == 0)
 {
   offset += pos / 8;
   pos %= ((unsigned short) (((unsigned short) mode_size[wanted_inner_mode]) * 8));
 }
      if (0 != 0
   && ! spans_byte
   && is_mode != wanted_inner_mode)
 offset = (((unsigned short) mode_size[is_mode])
    - ((unsigned short) mode_size[wanted_inner_mode]) - offset);
      if (offset != 0 || inner_mode != wanted_inner_mode)
 inner = adjust_address_1 (inner, wanted_inner_mode, offset, 0, 1);
    }
  else if (!(((enum rtx_code) (inner)->code) == MEM))
    {
      if (((enum machine_mode) (inner)->mode) != wanted_inner_mode
   && (pos_rtx != 0
       || orig_pos + len > ((unsigned short) (((unsigned short) mode_size[wanted_inner_mode]) * 8))))
 return 0;
      inner = force_to_mode (inner, wanted_inner_mode,
        pos_rtx
        || len + orig_pos >= (8 * 4)
        ? ~(unsigned long) 0
        : ((((unsigned long) 1 << len) - 1)
    << orig_pos),
        (rtx) 0, 0);
    }
  if (pos_rtx != 0
      && ((unsigned short) mode_size[pos_mode]) > ((unsigned short) mode_size[((enum machine_mode) (pos_rtx)->mode)]))
    {
      rtx temp = gen_rtx_fmt_e (ZERO_EXTEND, (pos_mode), (pos_rtx));
      if (flag_expensive_optimizations
   && (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (pos_rtx)->mode)]) * 8)) <= (8 * 4)
       && ((nonzero_bits (pos_rtx, ((enum machine_mode) (pos_rtx)->mode))
     & ~(((unsigned long)
   mode_mask_array[((enum machine_mode) (pos_rtx)->mode)])
         >> 1))
    == 0)))
 {
   rtx temp1 = gen_rtx_fmt_e (SIGN_EXTEND, (pos_mode), (pos_rtx));
   if (rtx_cost (temp1, SET) < rtx_cost (temp, SET))
     temp = temp1;
 }
      pos_rtx = temp;
    }
  else if (pos_rtx != 0
    && ((unsigned short) mode_size[pos_mode]) < ((unsigned short) mode_size[((enum machine_mode) (pos_rtx)->mode)]))
    pos_rtx = rtl_hooks.gen_lowpart (pos_mode, pos_rtx);
  if (pos_rtx == 0 && orig_pos_rtx != 0 && ((orig_pos_rtx)->u.hwint[0]) == pos)
    pos_rtx = orig_pos_rtx;
  else if (pos_rtx == 0)
    pos_rtx = gen_rtx_CONST_INT (VOIDmode, (long) (pos));
  new = gen_rtx_fmt_eee (unsignedp ? ZERO_EXTRACT : SIGN_EXTRACT,
    extraction_mode, inner, gen_rtx_CONST_INT (VOIDmode, (long) (len)), pos_rtx);
  if (! in_dest)
    new = rtl_hooks.gen_lowpart (mode, new);
  return new;
}
static rtx
extract_left_shift (rtx x, int count)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  rtx tem;
  switch (code)
    {
    case ASHIFT:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= count)
 return simplify_shift_const ((rtx) 0, ASHIFT, mode, (((x)->u.fld[0]).rtx1),
         (((((x)->u.fld[1]).rtx1))->u.hwint[0]) - count);
      break;
    case NEG: case NOT:
      if ((tem = extract_left_shift ((((x)->u.fld[0]).rtx1), count)) != 0)
 return simplify_gen_unary (code, mode, tem, mode);
      break;
    case PLUS: case IOR: case XOR: case AND:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && ((((((x)->u.fld[1]).rtx1))->u.hwint[0]) & ((((long) 1 << count)) - 1)) == 0
   && (tem = extract_left_shift ((((x)->u.fld[0]).rtx1), count)) != 0)
 return gen_binary (code, mode, tem,
      gen_rtx_CONST_INT (VOIDmode, (long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0]) >> count)));
      break;
    default:
      break;
    }
  return 0;
}
static rtx
make_compound_operation (rtx x, enum rtx_code in_code)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  int mode_width = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  rtx rhs, lhs;
  enum rtx_code next_code;
  int i;
  rtx new = 0;
  rtx tem;
  const char *fmt;
  next_code = (code == MEM || code == PLUS || code == MINUS ? MEM
        : ((code == COMPARE || (((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
    && (((x)->u.fld[1]).rtx1) == (const_int_rtx[64])) ? COMPARE
        : in_code == COMPARE ? SET : in_code);
  switch (code)
    {
    case ASHIFT:
      if (in_code == MEM && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4)
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= 0)
 {
   new = make_compound_operation ((((x)->u.fld[0]).rtx1), next_code);
   new = gen_rtx_fmt_ee (MULT, (mode), (new), (gen_rtx_CONST_INT (VOIDmode, (long) ((long) 1 << (((((x)->u.fld[1]).rtx1))->u.hwint[0])))))
                                    ;
 }
      break;
    case AND:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != CONST_INT)
 break;
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == LSHIFTRT
   && (i = exact_log2_wide ((unsigned long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0]) + 1))) >= 0)
 {
   new = make_compound_operation (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), next_code);
   new = make_extraction (mode, new, 0, ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1), i, 1,
     0, in_code == COMPARE);
 }
      else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
        && subreg_lowpart_p ((((x)->u.fld[0]).rtx1))
        && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == LSHIFTRT
        && (i = exact_log2_wide ((unsigned long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0]) + 1))) >= 0)
 {
   new = make_compound_operation ((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1),
      next_code);
   new = make_extraction (((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode), new, 0,
     (((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1), i, 1,
     0, in_code == COMPARE);
 }
      else if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == XOR
  || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == IOR)
        && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == LSHIFTRT
        && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == LSHIFTRT
        && (i = exact_log2_wide ((unsigned long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0]) + 1))) >= 0)
 {
   new = gen_rtx_fmt_ee (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code), mode,
    gen_rtx_fmt_ee (AND, (mode), (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1)), ((((x)->u.fld[1]).rtx1)))
                      ,
    gen_rtx_fmt_ee (AND, (mode), (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1)), ((((x)->u.fld[1]).rtx1)))
                      );
   new = make_compound_operation (new, in_code);
 }
      else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ROTATE
        && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
        && (i = exact_log2_wide ((unsigned long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0]) + 1))) >= 0
        && i <= ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]))
 {
   new = make_compound_operation (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), next_code);
   new = make_extraction (mode, new,
     (((unsigned short) (((unsigned short) mode_size[mode]) * 8))
      - ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])),
     (rtx) 0, i, 1, 0, in_code == COMPARE);
 }
      else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == LSHIFTRT
        && !have_insn_for (LSHIFTRT, mode)
        && have_insn_for (ASHIFTRT, mode)
        && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
        && ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) >= 0
        && ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4)
        && mode_width <= (8 * 4))
 {
   unsigned long mask = mode_mask_array[mode];
   mask >>= ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
   if (((((((x)->u.fld[1]).rtx1))->u.hwint[0]) & ~mask) == 0)
     do_SUBST(&((((x)->u.fld[0]).rtx1)), (gen_rtx_fmt_ee (ASHIFTRT, (mode), (make_compound_operation (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), next_code)), (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1)))))
                                ;
 }
      else if ((i = exact_log2_wide ((unsigned long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0]) + 1))) >= 0)
 new = make_extraction (mode,
          make_compound_operation ((((x)->u.fld[0]).rtx1),
       next_code),
          0, (rtx) 0, i, 1, 0, in_code == COMPARE);
      else if (in_code == COMPARE
        && (i = exact_log2_wide ((unsigned long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0])))) >= 0)
 new = make_extraction (mode,
          make_compound_operation ((((x)->u.fld[0]).rtx1),
       next_code),
          i, (rtx) 0, 1, 1, 0, 1);
      break;
    case LSHIFTRT:
      if (have_insn_for (ASHIFTRT, mode)
   && ! have_insn_for (LSHIFTRT, mode)
   && mode_width <= (8 * 4)
   && (nonzero_bits ((((x)->u.fld[0]).rtx1), mode) & (1 << (mode_width - 1))) == 0)
 {
   new = gen_rtx_fmt_ee (ASHIFTRT, (mode), (make_compound_operation ((((x)->u.fld[0]).rtx1), next_code)), ((((x)->u.fld[1]).rtx1)))
                  ;
   break;
 }
    case ASHIFTRT:
      lhs = (((x)->u.fld[0]).rtx1);
      rhs = (((x)->u.fld[1]).rtx1);
      if (((enum rtx_code) (rhs)->code) == CONST_INT
   && ((enum rtx_code) (lhs)->code) == ASHIFT
   && ((enum rtx_code) ((((lhs)->u.fld[1]).rtx1))->code) == CONST_INT
   && ((rhs)->u.hwint[0]) >= (((((lhs)->u.fld[1]).rtx1))->u.hwint[0]))
 {
   new = make_compound_operation ((((lhs)->u.fld[0]).rtx1), next_code);
   new = make_extraction (mode, new,
     ((rhs)->u.hwint[0]) - (((((lhs)->u.fld[1]).rtx1))->u.hwint[0]),
     (rtx) 0, mode_width - ((rhs)->u.hwint[0]),
     code == LSHIFTRT, 0, in_code == COMPARE);
   break;
 }
      if (!(((rtx_class[(int) (((enum rtx_code) (lhs)->code))]) & (~1)) == (RTX_OBJ & (~1)))
   && ! (((enum rtx_code) (lhs)->code) == SUBREG
  && ((((rtx_class[(int) (((enum rtx_code) ((((lhs)->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1)))))
   && ((enum rtx_code) (rhs)->code) == CONST_INT
   && ((rhs)->u.hwint[0]) < (8 * 4)
   && (new = extract_left_shift (lhs, ((rhs)->u.hwint[0]))) != 0)
 new = make_extraction (mode, make_compound_operation (new, next_code),
          0, (rtx) 0, mode_width - ((rhs)->u.hwint[0]),
          code == LSHIFTRT, 0, in_code == COMPARE);
      break;
    case SUBREG:
      tem = make_compound_operation ((((x)->u.fld[0]).rtx1), in_code);
      if (((enum rtx_code) (tem)->code) != ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code)
   && ((unsigned short) mode_size[mode]) < ((unsigned short) mode_size[((enum machine_mode) (tem)->mode)])
   && subreg_lowpart_p (x))
 {
   rtx newer = force_to_mode (tem, mode, ~(long) 0,
         (rtx) 0, 0);
   if (((enum rtx_code) (newer)->code) != SUBREG)
     newer = make_compound_operation (newer, in_code);
   return newer;
 }
      if ((((enum rtx_code) (tem)->code) == SIGN_EXTEND
    || ((enum rtx_code) (tem)->code) == ZERO_EXTEND)
   && subreg_lowpart_p (x))
 {
   if (((unsigned short) mode_size[mode]) > ((unsigned short) mode_size[((enum machine_mode) (tem)->mode)])
       || (((unsigned short) mode_size[mode]) >
    ((unsigned short) mode_size[((enum machine_mode) ((((tem)->u.fld[0]).rtx1))->mode)])))
     {
       if (! (mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT))
  break;
       tem = gen_rtx_fmt_e (((enum rtx_code) (tem)->code), mode, (((tem)->u.fld[0]).rtx1));
     }
   else
     tem = rtl_hooks.gen_lowpart (mode, (((tem)->u.fld[0]).rtx1));
   return tem;
 }
      break;
    default:
      break;
    }
  if (new)
    {
      x = rtl_hooks.gen_lowpart (mode, new);
      code = ((enum rtx_code) (x)->code);
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++)
    if (fmt[i] == 'e')
      {
 new = make_compound_operation ((((x)->u.fld[i]).rtx1), next_code);
 do_SUBST(&((((x)->u.fld[i]).rtx1)), (new));
      }
  return x;
}
static int
get_pos_from_mask (unsigned long m, unsigned long *plen)
{
  int pos = exact_log2_wide ((unsigned long) (m & -m));
  int len = 0;
  if (pos >= 0)
    len = exact_log2_wide ((unsigned long) ((m >> pos) + 1));
  if (len <= 0)
    pos = -1;
  *plen = len;
  return pos;
}
static rtx
force_to_mode (rtx x, enum machine_mode mode, unsigned long mask,
        rtx reg, int just_select)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  int next_select = just_select || code == XOR || code == NOT || code == NEG;
  enum machine_mode op_mode;
  unsigned long fuller_mask, nonzero;
  rtx op0, op1, temp;
  if (code == CALL || code == ASM_OPERANDS || code == CLOBBER)
    return x;
  op_mode = ((mode_class[mode] == mode_class[((enum machine_mode) (x)->mode)]
       && have_insn_for (code, mode))
      ? mode : ((enum machine_mode) (x)->mode));
  if ((code == LSHIFTRT || code == ASHIFTRT)
      && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) < ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)))
    op_mode = ((enum machine_mode) (x)->mode);
  if (op_mode)
    mask &= mode_mask_array[op_mode];
  if (mask & ((unsigned long) 1 << ((8 * 4) - 1)))
    fuller_mask = ~(unsigned long) 0;
  else
    fuller_mask = (((unsigned long) 1 << (floor_log2_wide ((unsigned long) (mask)) + 1))
     - 1);
  nonzero = nonzero_bits (x, mode);
  if (! just_select && (nonzero & mask) == 0)
    x = (const_int_rtx[64]);
  if (((enum rtx_code) (x)->code) == CONST_INT)
    {
      if ((mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT))
        return gen_int_mode (((x)->u.hwint[0]) & mask, mode);
      else
 {
   x = gen_rtx_CONST_INT (VOIDmode, (long) (((x)->u.hwint[0]) & mask));
   return gen_lowpart_common (mode, x);
 }
    }
  if (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) < ((unsigned short) mode_size[mode])
      && (mode_mask_array[((enum machine_mode) (x)->mode)] & ~mask) == 0)
    return rtl_hooks.gen_lowpart (mode, x);
  if (((enum machine_mode) (x)->mode) == mode && code != SUBREG && (~mask & nonzero) == 0)
    return x;
  switch (code)
    {
    case CLOBBER:
      return x;
    case USE:
      if (! 0
   && (mask & ~mode_mask_array[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) == 0)
 return force_to_mode ((((x)->u.fld[0]).rtx1), mode, mask, reg, next_select);
      break;
    case SIGN_EXTEND:
    case ZERO_EXTEND:
    case ZERO_EXTRACT:
    case SIGN_EXTRACT:
      x = expand_compound_operation (x);
      if (((enum rtx_code) (x)->code) != code)
 return force_to_mode (x, mode, mask, reg, next_select);
      break;
    case REG:
      if (reg != 0 && (rtx_equal_p (get_last_value (reg), x)
         || rtx_equal_p (reg, get_last_value (x))))
 x = reg;
      break;
    case SUBREG:
      if (subreg_lowpart_p (x)
   && ((((unsigned short) mode_size[((enum machine_mode) (x)->mode)])
        < ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]))
       || (0 == (mask
   & mode_mask_array[((enum machine_mode) (x)->mode)]
   & ~mode_mask_array[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]))))
 return force_to_mode ((((x)->u.fld[0]).rtx1), mode, mask, reg, next_select);
      break;
    case AND:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
 {
   x = simplify_and_const_int (x, op_mode, (((x)->u.fld[0]).rtx1),
          mask & (((((x)->u.fld[1]).rtx1))->u.hwint[0]));
   if (((enum rtx_code) (x)->code) == AND && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
       && (((((((x)->u.fld[1]).rtx1))->u.hwint[0]) & mode_mask_array[((enum machine_mode) (x)->mode)])
    == mask))
     x = (((x)->u.fld[0]).rtx1);
   if (((enum rtx_code) (x)->code) == AND && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
       && mode_mask_array[((enum machine_mode) (x)->mode)] != mask
       && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) <= (8 * 4))
     {
       long cval = ((((((x)->u.fld[1]).rtx1))->u.hwint[0])
        | (mode_mask_array[((enum machine_mode) (x)->mode)] & ~mask));
       int width = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8));
       rtx y;
       if (width > 0 && width < (8 * 4)
    && (cval & ((long) 1 << (width - 1))) != 0)
  cval |= (long) -1 << width;
       y = gen_binary (AND, ((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1), gen_rtx_CONST_INT (VOIDmode, (long) (cval)));
       if (rtx_cost (y, SET) < rtx_cost (x, SET))
  x = y;
     }
   break;
 }
      goto binop;
    case PLUS:
      {
 unsigned int width = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
 unsigned long smask = mask;
 if (width < (8 * 4)
     && (smask & ((long) 1 << (width - 1))) != 0)
   smask |= (long) -1 << width;
 if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
     && exact_log2_wide ((unsigned long) (- smask)) >= 0
     && (nonzero_bits ((((x)->u.fld[0]).rtx1), mode) & ~smask) == 0
     && ((((((x)->u.fld[1]).rtx1))->u.hwint[0]) & ~smask) != 0)
   return force_to_mode (plus_constant_wide (((((x)->u.fld[0]).rtx1)), (long) (((((((x)->u.fld[1]).rtx1))->u.hwint[0]) & smask)))
                                           ,
    mode, smask, reg, next_select);
      }
    case MULT:
      mask = fuller_mask;
      goto binop;
    case MINUS:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_INT
   && (((unsigned long) ((((((x)->u.fld[0]).rtx1))->u.hwint[0])
     & -(((((x)->u.fld[0]).rtx1))->u.hwint[0])))
       > mask))
 {
   x = simplify_gen_unary (NEG, ((enum machine_mode) (x)->mode), (((x)->u.fld[1]).rtx1),
      ((enum machine_mode) (x)->mode));
   return force_to_mode (x, mode, mask, reg, next_select);
 }
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_INT
   && (((((((x)->u.fld[0]).rtx1))->u.hwint[0]) | (long) fuller_mask)
       == (((((x)->u.fld[0]).rtx1))->u.hwint[0])))
 {
   x = simplify_gen_unary (NOT, ((enum machine_mode) (x)->mode),
      (((x)->u.fld[1]).rtx1), ((enum machine_mode) (x)->mode));
   return force_to_mode (x, mode, mask, reg, next_select);
 }
      mask = fuller_mask;
      goto binop;
    case IOR:
    case XOR:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == LSHIFTRT
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
   && ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) >= 0
   && ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4)
   && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && ((((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])
        + floor_log2_wide ((unsigned long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0]))))
       < ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)))
   && ((((((x)->u.fld[1]).rtx1))->u.hwint[0])
       & ~nonzero_bits ((((x)->u.fld[0]).rtx1), ((enum machine_mode) (x)->mode))) == 0)
 {
   temp = gen_rtx_CONST_INT (VOIDmode, (long) (((((((x)->u.fld[1]).rtx1))->u.hwint[0]) & mask) << ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])))
                                       ;
   temp = gen_binary (((enum rtx_code) (x)->code), ((enum machine_mode) (x)->mode),
        ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), temp);
   x = gen_binary (LSHIFTRT, ((enum machine_mode) (x)->mode), temp,
     ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1));
   return force_to_mode (x, mode, mask, reg, next_select);
 }
    binop:
      op0 = rtl_hooks.gen_lowpart (op_mode,
    force_to_mode ((((x)->u.fld[0]).rtx1), mode, mask,
     reg, next_select));
      op1 = rtl_hooks.gen_lowpart (op_mode,
    force_to_mode ((((x)->u.fld[1]).rtx1), mode, mask,
     reg, next_select));
      if (op_mode != ((enum machine_mode) (x)->mode) || op0 != (((x)->u.fld[0]).rtx1) || op1 != (((x)->u.fld[1]).rtx1))
 x = gen_binary (code, op_mode, op0, op1);
      break;
    case ASHIFT:
      if (! (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
      && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
      && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) < ((unsigned short) (((unsigned short) mode_size[mode]) * 8)))
   && ! (((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode) != VOIDmode
  && (nonzero_bits ((((x)->u.fld[1]).rtx1), ((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode))
      < (unsigned long) ((unsigned short) (((unsigned short) mode_size[mode]) * 8)))))
 break;
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) < ((unsigned short) (((unsigned short) mode_size[op_mode]) * 8))
   && ((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) <= (8 * 4))
 mask >>= (((((x)->u.fld[1]).rtx1))->u.hwint[0]);
      else
 mask = fuller_mask;
      op0 = rtl_hooks.gen_lowpart (op_mode,
    force_to_mode ((((x)->u.fld[0]).rtx1), op_mode,
     mask, reg, next_select));
      if (op_mode != ((enum machine_mode) (x)->mode) || op0 != (((x)->u.fld[0]).rtx1))
 x = gen_binary (code, op_mode, op0, (((x)->u.fld[1]).rtx1));
      break;
    case LSHIFTRT:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4)
   && ((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) <= (8 * 4))
 {
   rtx inner = (((x)->u.fld[0]).rtx1);
   unsigned long inner_mask;
   inner_mask = mask << (((((x)->u.fld[1]).rtx1))->u.hwint[0]);
   if (((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) > (8 * 4)
       || (inner_mask & ~mode_mask_array[op_mode]) != 0)
     op_mode = ((enum machine_mode) (x)->mode);
   inner = force_to_mode (inner, op_mode, inner_mask, reg, next_select);
   if (((enum machine_mode) (x)->mode) != op_mode || inner != (((x)->u.fld[0]).rtx1))
     x = gen_binary (LSHIFTRT, op_mode, inner, (((x)->u.fld[1]).rtx1));
 }
      if (((enum rtx_code) (x)->code) == LSHIFTRT
   && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((((x)->u.fld[1]).rtx1))->u.hwint[0])
        + num_sign_bit_copies ((((x)->u.fld[0]).rtx1), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)))
       >= ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)))
   && exact_log2_wide ((unsigned long) (mask + 1)) >= 0
   && (((((((x)->u.fld[1]).rtx1))->u.hwint[0]) + exact_log2_wide ((unsigned long) (mask + 1)))
       <= ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)))
   && ((int) num_sign_bit_copies ((((x)->u.fld[0]).rtx1), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode))
       >= exact_log2_wide ((unsigned long) (mask + 1))))
 x = gen_binary (LSHIFTRT, ((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1),
   gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) - exact_log2_wide ((unsigned long) (mask + 1))))
                             );
      goto shiftrt;
    case ASHIFTRT:
      if (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) <= (8 * 4)
   && (mask == ((unsigned long) 1
         << (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) - 1))))
 return force_to_mode ((((x)->u.fld[0]).rtx1), mode, mask, reg, next_select);
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4))
 {
   int i = -1;
   if (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) > (8 * 4))
     {
       nonzero = ~(long) 0;
       if (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) - (((((x)->u.fld[1]).rtx1))->u.hwint[0])
    < (8 * 4))
  nonzero >>= (((((x)->u.fld[1]).rtx1))->u.hwint[0])
       + (8 * 4)
       - ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) ;
     }
   else
     {
       nonzero = mode_mask_array[((enum machine_mode) (x)->mode)];
       nonzero >>= (((((x)->u.fld[1]).rtx1))->u.hwint[0]);
     }
   if ((mask & ~nonzero) == 0
       || (i = exact_log2_wide ((unsigned long) (mask))) >= 0)
     {
       x = simplify_shift_const
  (x, LSHIFTRT, ((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1),
   i < 0 ? (((((x)->u.fld[1]).rtx1))->u.hwint[0])
   : ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) - 1 - i);
       if (((enum rtx_code) (x)->code) != ASHIFTRT)
  return force_to_mode (x, mode, mask, reg, next_select);
     }
 }
      if (mask == 1)
 x = gen_binary (LSHIFTRT, ((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1));
    shiftrt:
      if ((((enum rtx_code) (x)->code) == LSHIFTRT || ((enum rtx_code) (x)->code) == ASHIFTRT)
   && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
   && ((((((x)->u.fld[1]).rtx1))->u.hwint[0])
       <= ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) - (floor_log2_wide ((unsigned long) (mask)) + 1))
   && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ASHIFT
   && ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1) == (((x)->u.fld[1]).rtx1))
 return force_to_mode (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), mode, mask,
         reg, next_select);
      break;
    case ROTATE:
    case ROTATERT:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= 0)
 {
   temp = simplify_binary_operation (code == ROTATE ? ROTATERT : ROTATE,
         ((enum machine_mode) (x)->mode), gen_rtx_CONST_INT (VOIDmode, (long) (mask)),
         (((x)->u.fld[1]).rtx1));
   if (temp && ((enum rtx_code) (temp)->code) == CONST_INT)
     do_SUBST(&((((x)->u.fld[0]).rtx1)), (force_to_mode ((((x)->u.fld[0]).rtx1), ((enum machine_mode) (x)->mode), ((temp)->u.hwint[0]), reg, next_select)))
                                       ;
 }
      break;
    case NEG:
      if (mask == 1)
 return force_to_mode ((((x)->u.fld[0]).rtx1), mode, mask, reg, just_select);
      mask = fuller_mask;
      goto unop;
    case NOT:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == LSHIFTRT
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
   && ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) >= 0
   && (((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) + floor_log2_wide ((unsigned long) (mask))
       < ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)))
   && ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4))
 {
   temp = gen_int_mode (mask << ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]),
          ((enum machine_mode) (x)->mode));
   temp = gen_binary (XOR, ((enum machine_mode) (x)->mode), ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), temp);
   x = gen_binary (LSHIFTRT, ((enum machine_mode) (x)->mode), temp, ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1));
   return force_to_mode (x, mode, mask, reg, next_select);
 }
      mask = fuller_mask;
    unop:
      op0 = rtl_hooks.gen_lowpart (op_mode,
    force_to_mode ((((x)->u.fld[0]).rtx1), mode, mask,
     reg, next_select));
      if (op_mode != ((enum machine_mode) (x)->mode) || op0 != (((x)->u.fld[0]).rtx1))
 x = simplify_gen_unary (code, op_mode, op0, op_mode);
      break;
    case NE:
      if ((mask & ~1) == 0 && (((x)->u.fld[1]).rtx1) == (const_int_rtx[64])
   && exact_log2_wide ((unsigned long) (nonzero_bits ((((x)->u.fld[0]).rtx1), mode))) >= 0
   && (nonzero_bits ((((x)->u.fld[0]).rtx1), mode)
       == (unsigned long) 1))
 return force_to_mode ((((x)->u.fld[0]).rtx1), mode, mask, reg, next_select);
      break;
    case IF_THEN_ELSE:
      do_SUBST(&((((x)->u.fld[1]).rtx1)), (rtl_hooks.gen_lowpart (((enum machine_mode) (x)->mode), force_to_mode ((((x)->u.fld[1]).rtx1), mode, mask, reg, next_select))))
                                    ;
      do_SUBST(&((((x)->u.fld[2]).rtx1)), (rtl_hooks.gen_lowpart (((enum machine_mode) (x)->mode), force_to_mode ((((x)->u.fld[2]).rtx1), mode, mask, reg, next_select))))
                                    ;
      break;
    default:
      break;
    }
  return rtl_hooks.gen_lowpart (mode, x);
}
static rtx
if_then_else_cond (rtx x, rtx *ptrue, rtx *pfalse)
{
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  enum rtx_code code = ((enum rtx_code) (x)->code);
  rtx cond0, cond1, true0, true1, false0, false1;
  unsigned long nz;
  if ((code == NE || code == EQ)
      && (((x)->u.fld[1]).rtx1) == (const_int_rtx[64]))
    {
      *ptrue = (code == NE) ? const_true_rtx : (const_int_rtx[64]);
      *pfalse = (code == NE) ? (const_int_rtx[64]) : const_true_rtx;
      return (((x)->u.fld[0]).rtx1);
    }
  else if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_UNARY)
    && (cond0 = if_then_else_cond ((((x)->u.fld[0]).rtx1), &true0, &false0)) != 0)
    {
      *ptrue = simplify_gen_unary (code, mode, true0, ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode));
      *pfalse = simplify_gen_unary (code, mode, false0,
        ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode));
      return cond0;
    }
  else if (code == COMPARE)
    ;
  else if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~3)) == (RTX_COMPARE & (~3))))
    {
      cond0 = if_then_else_cond ((((x)->u.fld[0]).rtx1), &true0, &false0);
      cond1 = if_then_else_cond ((((x)->u.fld[1]).rtx1), &true1, &false1);
      if ((cond0 != 0 || cond1 != 0)
   && ! (cond0 != 0 && cond1 != 0 && ! rtx_equal_p (cond0, cond1)))
 {
   if (cond0 == 0)
     true0 = copy_rtx (true0);
   else if (cond1 == 0)
     true1 = copy_rtx (true1);
   *ptrue = gen_binary (code, mode, true0, true1);
   *pfalse = gen_binary (code, mode, false0, false1);
   return cond0 ? cond0 : cond1;
 }
      if ((1 == 1 || 1 == -1)
   && (code == PLUS || code == IOR || code == XOR || code == MINUS
       || code == UMAX)
   && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MULT && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == MULT)
 {
   rtx op0 = ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
   rtx op1 = ((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
   cond0 = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   cond1 = ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
   if ((((rtx_class[(int) (((enum rtx_code) (cond0)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
       && (((rtx_class[(int) (((enum rtx_code) (cond1)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
       && ((((enum rtx_code) (cond0)->code) == combine_reversed_comparison_code (cond1)
     && rtx_equal_p ((((cond0)->u.fld[0]).rtx1), (((cond1)->u.fld[0]).rtx1))
     && rtx_equal_p ((((cond0)->u.fld[1]).rtx1), (((cond1)->u.fld[1]).rtx1)))
    || ((swap_condition (((enum rtx_code) (cond0)->code))
         == combine_reversed_comparison_code (cond1))
        && rtx_equal_p ((((cond0)->u.fld[0]).rtx1), (((cond1)->u.fld[1]).rtx1))
        && rtx_equal_p ((((cond0)->u.fld[1]).rtx1), (((cond1)->u.fld[0]).rtx1))))
       && ! side_effects_p (x))
     {
       *ptrue = gen_binary (MULT, mode, op0, const_true_rtx);
       *pfalse = gen_binary (MULT, mode,
        (code == MINUS
         ? simplify_gen_unary (NEG, mode, op1,
          mode)
         : op1),
        const_true_rtx);
       return cond0;
     }
 }
      if ((1 == 1 || 1 == -1)
   && (code == MULT || code == AND || code == UMIN)
   && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MULT && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == MULT)
 {
   cond0 = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   cond1 = ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
   if ((((rtx_class[(int) (((enum rtx_code) (cond0)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
       && (((rtx_class[(int) (((enum rtx_code) (cond1)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
       && ((((enum rtx_code) (cond0)->code) == combine_reversed_comparison_code (cond1)
     && rtx_equal_p ((((cond0)->u.fld[0]).rtx1), (((cond1)->u.fld[0]).rtx1))
     && rtx_equal_p ((((cond0)->u.fld[1]).rtx1), (((cond1)->u.fld[1]).rtx1)))
    || ((swap_condition (((enum rtx_code) (cond0)->code))
         == combine_reversed_comparison_code (cond1))
        && rtx_equal_p ((((cond0)->u.fld[0]).rtx1), (((cond1)->u.fld[1]).rtx1))
        && rtx_equal_p ((((cond0)->u.fld[1]).rtx1), (((cond1)->u.fld[0]).rtx1))))
       && ! side_effects_p (x))
     {
       *ptrue = *pfalse = (const_int_rtx[64]);
       return cond0;
     }
 }
    }
  else if (code == IF_THEN_ELSE)
    {
      cond0 = (((x)->u.fld[0]).rtx1);
      *ptrue = (((x)->u.fld[1]).rtx1), *pfalse = (((x)->u.fld[2]).rtx1);
      if (((enum rtx_code) (cond0)->code) == NE && (((cond0)->u.fld[1]).rtx1) == (const_int_rtx[64]))
 return (((cond0)->u.fld[0]).rtx1);
      else if (((enum rtx_code) (cond0)->code) == EQ && (((cond0)->u.fld[1]).rtx1) == (const_int_rtx[64]))
 {
   *ptrue = (((x)->u.fld[2]).rtx1), *pfalse = (((x)->u.fld[1]).rtx1);
   return (((cond0)->u.fld[0]).rtx1);
 }
      else
 return cond0;
    }
  else if (code == SUBREG
    && 0 != (cond0 = if_then_else_cond ((((x)->u.fld[0]).rtx1),
            &true0, &false0)))
    {
      true0 = simplify_gen_subreg (mode, true0,
       ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode), (((x)->u.fld[1]).rtuint));
      false0 = simplify_gen_subreg (mode, false0,
        ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode), (((x)->u.fld[1]).rtuint));
      if (true0 && false0)
 {
   *ptrue = true0;
   *pfalse = false0;
   return cond0;
 }
    }
  else if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR)
    || ((cond0 = get_last_value (x)) != 0 && ((rtx_class[(int) (((enum rtx_code) (cond0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (cond0)->code) == CONST_VECTOR)))
    ;
  else if (mode == BImode)
    {
      *ptrue = gen_rtx_CONST_INT (VOIDmode, (long) (1)), *pfalse = (const_int_rtx[64]);
      return x;
    }
  else if (x == (const_int_rtx[64 -1]) || x == (const_int_rtx[64])
    || (mode != VOIDmode
        && num_sign_bit_copies (x, mode) == ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))
    {
      *ptrue = (const_int_rtx[64 -1]), *pfalse = (const_int_rtx[64]);
      return x;
    }
  else if ((mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT)
    && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
    && exact_log2_wide ((unsigned long) (nz = nonzero_bits (x, mode))) >= 0)
    {
      *ptrue = gen_int_mode (nz, mode), *pfalse = (const_int_rtx[64]);
      return x;
    }
  *ptrue = *pfalse = x;
  return 0;
}
static rtx
known_cond (rtx x, enum rtx_code cond, rtx reg, rtx val)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  rtx temp;
  const char *fmt;
  int i, j;
  if (side_effects_p (x))
    return x;
  if (cond == EQ
      && rtx_equal_p (x, reg)
      && ! (mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_VECTOR_FLOAT)
      && ! (mode_class[((enum machine_mode) (val)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (val)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (val)->mode)] == MODE_VECTOR_FLOAT))
    return val;
  if (cond == UNEQ && rtx_equal_p (x, reg))
    return val;
  if (code == ABS && rtx_equal_p ((((x)->u.fld[0]).rtx1), reg) && val == (const_int_rtx[64]))
    switch (cond)
      {
      case GE: case GT: case EQ:
 return (((x)->u.fld[0]).rtx1);
      case LT: case LE:
 return simplify_gen_unary (NEG, ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
       (((x)->u.fld[0]).rtx1),
       ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode));
      default:
 break;
      }
  else if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMPARE & (~1))) || ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_COMM_ARITH))
    {
      if (rtx_equal_p ((((x)->u.fld[0]).rtx1), val))
 cond = swap_condition (cond), temp = val, val = reg, reg = temp;
      if (rtx_equal_p ((((x)->u.fld[0]).rtx1), reg) && rtx_equal_p ((((x)->u.fld[1]).rtx1), val))
 {
   if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
     {
       if (comparison_dominates_p (cond, code))
  return const_true_rtx;
       code = combine_reversed_comparison_code (x);
       if (code != UNKNOWN
    && comparison_dominates_p (cond, code))
  return (const_int_rtx[64]);
       else
  return x;
     }
   else if (code == SMAX || code == SMIN
     || code == UMIN || code == UMAX)
     {
       int unsignedp = (code == UMIN || code == UMAX);
       if ((code == SMAX || code == UMAX)
    && ! (cond == EQ || cond == NE))
  cond = reverse_condition (cond);
       switch (cond)
  {
  case GE: case GT:
    return unsignedp ? x : (((x)->u.fld[1]).rtx1);
  case LE: case LT:
    return unsignedp ? x : (((x)->u.fld[0]).rtx1);
  case GEU: case GTU:
    return unsignedp ? (((x)->u.fld[1]).rtx1) : x;
  case LEU: case LTU:
    return unsignedp ? (((x)->u.fld[0]).rtx1) : x;
  default:
    break;
  }
     }
 }
    }
  else if (code == SUBREG)
    {
      enum machine_mode inner_mode = ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode);
      rtx new, r = known_cond ((((x)->u.fld[0]).rtx1), cond, reg, val);
      if ((((x)->u.fld[0]).rtx1) != r)
 {
   new = simplify_subreg (((enum machine_mode) (x)->mode), r,
     inner_mode, (((x)->u.fld[1]).rtuint));
   if (new)
     return new;
   else
     do_SUBST(&((((x)->u.fld[0]).rtx1)), (r));
 }
      return x;
    }
  else if (code == ZERO_EXTEND)
    {
      enum machine_mode inner_mode = ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode);
      rtx new, r = known_cond ((((x)->u.fld[0]).rtx1), cond, reg, val);
      if ((((x)->u.fld[0]).rtx1) != r)
 {
   new = simplify_unary_operation (ZERO_EXTEND, ((enum machine_mode) (x)->mode),
       r, inner_mode);
   if (new)
     return new;
   else
     do_SUBST(&((((x)->u.fld[0]).rtx1)), (r));
 }
      return x;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 do_SUBST(&((((x)->u.fld[i]).rtx1)), (known_cond ((((x)->u.fld[i]).rtx1), cond, reg, val)));
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   do_SUBST(&((((((x)->u.fld[i]).rtvec1))->elem[j])), (known_cond ((((((x)->u.fld[i]).rtvec1))->elem[j]), cond, reg, val)))
                      ;
    }
  return x;
}
static int
rtx_equal_for_field_assignment_p (rtx x, rtx y)
{
  if (x == y || rtx_equal_p (x, y))
    return 1;
  if (x == 0 || y == 0 || ((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode))
    return 0;
  if ((((enum rtx_code) (x)->code) == MEM) && ((enum rtx_code) (y)->code) == SUBREG
      && (((enum rtx_code) ((((y)->u.fld[0]).rtx1))->code) == MEM)
      && rtx_equal_p ((((y)->u.fld[0]).rtx1),
        rtl_hooks.gen_lowpart (((enum machine_mode) ((((y)->u.fld[0]).rtx1))->mode), x)))
    return 1;
  if ((((enum rtx_code) (y)->code) == MEM) && ((enum rtx_code) (x)->code) == SUBREG
      && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM)
      && rtx_equal_p ((((x)->u.fld[0]).rtx1),
        rtl_hooks.gen_lowpart (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode), y)))
    return 1;
  return 0;
}
static rtx
make_field_assignment (rtx x)
{
  rtx dest = (((x)->u.fld[0]).rtx1);
  rtx src = (((x)->u.fld[1]).rtx1);
  rtx assign;
  rtx rhs, lhs;
  long c1;
  long pos;
  unsigned long len;
  rtx other;
  enum machine_mode mode;
  if (((enum rtx_code) (src)->code) == AND && ((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == ROTATE
      && ((enum rtx_code) (((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == CONST_INT
      && ((((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.hwint[0]) == -2
      && rtx_equal_for_field_assignment_p (dest, (((src)->u.fld[1]).rtx1)))
    {
      assign = make_extraction (VOIDmode, dest, 0, ((((((src)->u.fld[0]).rtx1))->u.fld[1]).rtx1),
    1, 1, 1, 0);
      if (assign != 0)
 return gen_rtx_fmt_ee (SET, (VOIDmode), (assign), ((const_int_rtx[64])));
      return x;
    }
  else if (((enum rtx_code) (src)->code) == AND && ((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == SUBREG
    && subreg_lowpart_p ((((src)->u.fld[0]).rtx1))
    && (((unsigned short) mode_size[((enum machine_mode) ((((src)->u.fld[0]).rtx1))->mode)])
        < ((unsigned short) mode_size[((enum machine_mode) (((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)]))
    && ((enum rtx_code) (((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == ROTATE
    && ((enum rtx_code) ((((((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == CONST_INT
    && (((((((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.hwint[0]) == -2
    && rtx_equal_for_field_assignment_p (dest, (((src)->u.fld[1]).rtx1)))
    {
      assign = make_extraction (VOIDmode, dest, 0,
    (((((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1),
    1, 1, 1, 0);
      if (assign != 0)
 return gen_rtx_fmt_ee (SET, (VOIDmode), (assign), ((const_int_rtx[64])));
      return x;
    }
  else if (((enum rtx_code) (src)->code) == IOR && ((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == ASHIFT
    && ((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (const_int_rtx[64 +1])
    && rtx_equal_for_field_assignment_p (dest, (((src)->u.fld[1]).rtx1)))
    {
      assign = make_extraction (VOIDmode, dest, 0, ((((((src)->u.fld[0]).rtx1))->u.fld[1]).rtx1),
    1, 1, 1, 0);
      if (assign != 0)
 return gen_rtx_fmt_ee (SET, (VOIDmode), (assign), ((const_int_rtx[64 +1])));
      return x;
    }
  if (((enum rtx_code) (src)->code) != IOR && ((enum rtx_code) (src)->code) != XOR)
    return x;
  rhs = expand_compound_operation ((((src)->u.fld[0]).rtx1));
  lhs = expand_compound_operation ((((src)->u.fld[1]).rtx1));
  if (((enum rtx_code) (rhs)->code) == AND
      && ((enum rtx_code) ((((rhs)->u.fld[1]).rtx1))->code) == CONST_INT
      && rtx_equal_for_field_assignment_p ((((rhs)->u.fld[0]).rtx1), dest))
    c1 = (((((rhs)->u.fld[1]).rtx1))->u.hwint[0]), other = lhs;
  else if (((enum rtx_code) (lhs)->code) == AND
    && ((enum rtx_code) ((((lhs)->u.fld[1]).rtx1))->code) == CONST_INT
    && rtx_equal_for_field_assignment_p ((((lhs)->u.fld[0]).rtx1), dest))
    c1 = (((((lhs)->u.fld[1]).rtx1))->u.hwint[0]), other = rhs;
  else
    return x;
  pos = get_pos_from_mask ((~c1) & mode_mask_array[((enum machine_mode) (dest)->mode)], &len);
  if (pos < 0 || pos + len > ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]) * 8))
      || ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]) * 8)) > (8 * 4)
      || (c1 & nonzero_bits (other, ((enum machine_mode) (dest)->mode))) != 0)
    return x;
  assign = make_extraction (VOIDmode, dest, pos, (rtx) 0, len, 1, 1, 0);
  if (assign == 0)
    return x;
  mode = (((enum rtx_code) (assign)->code) == STRICT_LOW_PART
   ? ((enum machine_mode) ((((assign)->u.fld[0]).rtx1))->mode) : ((enum machine_mode) (assign)->mode));
  src = force_to_mode (simplify_shift_const ((rtx) 0, LSHIFTRT,
          ((enum machine_mode) (src)->mode), other, pos),
         mode,
         ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) >= (8 * 4)
         ? ~(unsigned long) 0
         : ((unsigned long) 1 << len) - 1,
         dest, 0);
  if (((enum rtx_code) (assign)->code) == ZERO_EXTRACT
      && ((enum rtx_code) ((((assign)->u.fld[1]).rtx1))->code) == CONST_INT
      && (((((assign)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4)
      && ((enum rtx_code) (src)->code) == AND
      && ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) == CONST_INT
      && ((unsigned long) (((((src)->u.fld[1]).rtx1))->u.hwint[0])
   == ((unsigned long) 1 << (((((assign)->u.fld[1]).rtx1))->u.hwint[0])) - 1))
    src = (((src)->u.fld[0]).rtx1);
  return gen_rtx_fmt_ee (SET, (VOIDmode), (assign), (src));
}
static rtx
apply_distributive_law (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  enum rtx_code inner_code;
  rtx lhs, rhs, other;
  rtx tem;
  if ((mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_VECTOR_FLOAT)
      && ! flag_unsafe_math_optimizations)
    return x;
  if (code != IOR && code != AND && code != XOR
      && code != PLUS && code != MINUS)
    return x;
  lhs = (((x)->u.fld[0]).rtx1);
  rhs = (((x)->u.fld[1]).rtx1);
  if ((((rtx_class[(int) (((enum rtx_code) (lhs)->code))]) & (~1)) == (RTX_OBJ & (~1))) || (((rtx_class[(int) (((enum rtx_code) (rhs)->code))]) & (~1)) == (RTX_OBJ & (~1))))
    return x;
  lhs = expand_compound_operation (lhs);
  rhs = expand_compound_operation (rhs);
  inner_code = ((enum rtx_code) (lhs)->code);
  if (inner_code != ((enum rtx_code) (rhs)->code))
    return x;
  switch (inner_code)
    {
    case LSHIFTRT:
    case ASHIFTRT:
    case AND:
    case IOR:
      if (code == PLUS || code == MINUS)
 return x;
      break;
    case MULT:
      if (code != PLUS && code != MINUS)
 return x;
      break;
    case ASHIFT:
      break;
    case SUBREG:
      if (((enum machine_mode) ((((lhs)->u.fld[0]).rtx1))->mode) != ((enum machine_mode) ((((rhs)->u.fld[0]).rtx1))->mode)
   || (((lhs)->u.fld[1]).rtuint) != (((rhs)->u.fld[1]).rtuint)
   || ! subreg_lowpart_p (lhs)
   || (mode_class[((enum machine_mode) (lhs)->mode)]
       != mode_class[((enum machine_mode) ((((lhs)->u.fld[0]).rtx1))->mode)])
   || (((unsigned short) mode_size[((enum machine_mode) (lhs)->mode)])
       > ((unsigned short) mode_size[((enum machine_mode) ((((lhs)->u.fld[0]).rtx1))->mode)]))
   || ((unsigned short) mode_size[((enum machine_mode) ((((lhs)->u.fld[0]).rtx1))->mode)]) > (0 ? 8 : 4))
 return x;
      tem = gen_binary (code, ((enum machine_mode) ((((lhs)->u.fld[0]).rtx1))->mode),
   (((lhs)->u.fld[0]).rtx1), (((rhs)->u.fld[0]).rtx1));
      return rtl_hooks.gen_lowpart (((enum machine_mode) (x)->mode), tem);
    default:
      return x;
    }
  if (((rtx_class[(int) (((enum rtx_code) (lhs)->code))]) == RTX_COMM_ARITH)
      && rtx_equal_p ((((lhs)->u.fld[0]).rtx1), (((rhs)->u.fld[0]).rtx1)))
    other = (((lhs)->u.fld[0]).rtx1), lhs = (((lhs)->u.fld[1]).rtx1), rhs = (((rhs)->u.fld[1]).rtx1);
  else if (((rtx_class[(int) (((enum rtx_code) (lhs)->code))]) == RTX_COMM_ARITH)
    && rtx_equal_p ((((lhs)->u.fld[0]).rtx1), (((rhs)->u.fld[1]).rtx1)))
    other = (((lhs)->u.fld[0]).rtx1), lhs = (((lhs)->u.fld[1]).rtx1), rhs = (((rhs)->u.fld[0]).rtx1);
  else if (((rtx_class[(int) (((enum rtx_code) (lhs)->code))]) == RTX_COMM_ARITH)
    && rtx_equal_p ((((lhs)->u.fld[1]).rtx1), (((rhs)->u.fld[0]).rtx1)))
    other = (((lhs)->u.fld[1]).rtx1), lhs = (((lhs)->u.fld[0]).rtx1), rhs = (((rhs)->u.fld[1]).rtx1);
  else if (rtx_equal_p ((((lhs)->u.fld[1]).rtx1), (((rhs)->u.fld[1]).rtx1)))
    other = (((lhs)->u.fld[1]).rtx1), lhs = (((lhs)->u.fld[0]).rtx1), rhs = (((rhs)->u.fld[0]).rtx1);
  else
    return x;
  tem = gen_binary (code, ((enum machine_mode) (x)->mode), lhs, rhs);
  if (code == XOR && inner_code == IOR)
    {
      inner_code = AND;
      other = simplify_gen_unary (NOT, ((enum machine_mode) (x)->mode), other, ((enum machine_mode) (x)->mode));
    }
  return gen_binary (inner_code, ((enum machine_mode) (x)->mode),
       apply_distributive_law (tem), other);
}
static rtx
simplify_and_const_int (rtx x, enum machine_mode mode, rtx varop,
   unsigned long constop)
{
  unsigned long nonzero;
  int i;
  varop = force_to_mode (varop, mode, constop, (rtx) 0, 0);
  if (((enum rtx_code) (varop)->code) == CLOBBER)
    return varop;
  if (((enum rtx_code) (varop)->code) == CONST_INT)
    return gen_rtx_CONST_INT (VOIDmode, (long) (trunc_int_for_mode (((varop)->u.hwint[0]) & constop, mode)));
  nonzero = nonzero_bits (varop, mode) & mode_mask_array[mode];
  constop &= nonzero;
  if (constop == 0)
    return (const_int_rtx[64]);
  if (((enum rtx_code) (varop)->code) == NEG && nonzero_bits ((((varop)->u.fld[0]).rtx1), mode) == 1
      && (i = exact_log2_wide ((unsigned long) (constop))) >= 0)
    return simplify_shift_const ((rtx) 0, ASHIFT, mode, (((varop)->u.fld[0]).rtx1), i);
  if (((enum rtx_code) (varop)->code) == IOR || ((enum rtx_code) (varop)->code) == XOR)
    return
      rtl_hooks.gen_lowpart
 (mode,
  apply_distributive_law
  (gen_binary (((enum rtx_code) (varop)->code), ((enum machine_mode) (varop)->mode),
        simplify_and_const_int ((rtx) 0, ((enum machine_mode) (varop)->mode),
           (((varop)->u.fld[0]).rtx1), constop),
        simplify_and_const_int ((rtx) 0, ((enum machine_mode) (varop)->mode),
           (((varop)->u.fld[1]).rtx1), constop))));
  if (((enum rtx_code) (varop)->code) == PLUS
      && exact_log2_wide ((unsigned long) (constop + 1)) >= 0)
    {
      rtx o0, o1;
      o0 = simplify_and_const_int ((rtx) 0, mode, (((varop)->u.fld[0]).rtx1), constop);
      o1 = simplify_and_const_int ((rtx) 0, mode, (((varop)->u.fld[1]).rtx1), constop);
      if (o0 == (const_int_rtx[64]))
 return o1;
      if (o1 == (const_int_rtx[64]))
 return o0;
    }
  if (x && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
      && ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) == mode
      && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == varop)
    varop = (((x)->u.fld[0]).rtx1);
  else
    varop = rtl_hooks.gen_lowpart (mode, varop);
  if (((enum rtx_code) (varop)->code) == CLOBBER)
    return x ? x : varop;
  if (constop == nonzero)
    x = varop;
  else
    {
      constop = trunc_int_for_mode (constop, mode);
      if (x == 0 || ((enum rtx_code) (x)->code) != AND || ((enum machine_mode) (x)->mode) != mode)
 x = gen_binary (AND, mode, varop, gen_rtx_CONST_INT (VOIDmode, (long) (constop)));
      else
 {
   if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != CONST_INT
       || (unsigned long) (((((x)->u.fld[1]).rtx1))->u.hwint[0]) != constop)
     do_SUBST(&((((x)->u.fld[1]).rtx1)), (gen_rtx_CONST_INT (VOIDmode, (long) (constop))));
   do_SUBST(&((((x)->u.fld[0]).rtx1)), (varop));
 }
    }
  return x;
}
static rtx
reg_nonzero_bits_for_combine (rtx x, enum machine_mode mode,
         rtx known_x ,
         enum machine_mode known_mode ,
         unsigned long known_ret ,
         unsigned long *nonzero)
{
  rtx tem;
  if (reg_stat[(((x)->u.fld[0]).rtuint)].last_set_value != 0
      && (reg_stat[(((x)->u.fld[0]).rtuint)].last_set_mode == mode
          || (mode_class[reg_stat[(((x)->u.fld[0]).rtuint)].last_set_mode] == MODE_INT
       && mode_class[mode] == MODE_INT))
      && (reg_stat[(((x)->u.fld[0]).rtuint)].last_set_label == label_tick
   || ((((x)->u.fld[0]).rtuint) >= 53
       && (((reg_n_info)->data.reg[(((x)->u.fld[0]).rtuint)])->sets) == 1
       && ! bitmap_bit_p (ENTRY_BLOCK_PTR->next_bb->global_live_at_start, (((x)->u.fld[0]).rtuint))
                  ))
      && ((((reg_stat[(((x)->u.fld[0]).rtuint)].last_set)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (reg_stat[(((x)->u.fld[0]).rtuint)].last_set) : uid_cuid[(((reg_stat[(((x)->u.fld[0]).rtuint)].last_set)->u.fld[0]).rtint)]) < subst_low_cuid)
    {
      *nonzero &= reg_stat[(((x)->u.fld[0]).rtuint)].last_set_nonzero_bits;
      return ((void *)0);
    }
  tem = get_last_value (x);
  if (tem)
    {
      return tem;
    }
  else if (nonzero_sign_valid && reg_stat[(((x)->u.fld[0]).rtuint)].nonzero_bits)
    {
      unsigned long mask = reg_stat[(((x)->u.fld[0]).rtuint)].nonzero_bits;
      if (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) < ((unsigned short) (((unsigned short) mode_size[mode]) * 8)))
        mask |= mode_mask_array[mode] ^ mode_mask_array[((enum machine_mode) (x)->mode)];
      *nonzero &= mask;
    }
  return ((void *)0);
}
static rtx
reg_num_sign_bit_copies_for_combine (rtx x, enum machine_mode mode,
         rtx known_x ,
         enum machine_mode known_mode
         ,
         unsigned int known_ret ,
         unsigned int *result)
{
  rtx tem;
  if (reg_stat[(((x)->u.fld[0]).rtuint)].last_set_value != 0
      && reg_stat[(((x)->u.fld[0]).rtuint)].last_set_mode == mode
      && (reg_stat[(((x)->u.fld[0]).rtuint)].last_set_label == label_tick
          || ((((x)->u.fld[0]).rtuint) >= 53
       && (((reg_n_info)->data.reg[(((x)->u.fld[0]).rtuint)])->sets) == 1
       && ! bitmap_bit_p (ENTRY_BLOCK_PTR->next_bb->global_live_at_start, (((x)->u.fld[0]).rtuint))
                  ))
      && ((((reg_stat[(((x)->u.fld[0]).rtuint)].last_set)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (reg_stat[(((x)->u.fld[0]).rtuint)].last_set) : uid_cuid[(((reg_stat[(((x)->u.fld[0]).rtuint)].last_set)->u.fld[0]).rtint)]) < subst_low_cuid)
    {
      *result = reg_stat[(((x)->u.fld[0]).rtuint)].last_set_sign_bit_copies;
      return ((void *)0);
    }
  tem = get_last_value (x);
  if (tem != 0)
    return tem;
  if (nonzero_sign_valid && reg_stat[(((x)->u.fld[0]).rtuint)].sign_bit_copies != 0
      && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) == ((unsigned short) (((unsigned short) mode_size[mode]) * 8)))
    *result = reg_stat[(((x)->u.fld[0]).rtuint)].sign_bit_copies;
  return ((void *)0);
}
unsigned int
extended_count (rtx x, enum machine_mode mode, int unsignedp)
{
  if (nonzero_sign_valid == 0)
    return 0;
  return (unsignedp
   ? (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
      ? (unsigned int) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1
          - floor_log2_wide ((unsigned long) (nonzero_bits (x, mode))))
      : 0)
   : num_sign_bit_copies (x, mode) - 1);
}
static int
merge_outer_ops (enum rtx_code *pop0, long *pconst0, enum rtx_code op1, long const1, enum machine_mode mode, int *pcomp_p)
{
  enum rtx_code op0 = *pop0;
  long const0 = *pconst0;
  const0 &= mode_mask_array[mode];
  const1 &= mode_mask_array[mode];
  if (op0 == AND)
    const1 &= const0;
  if (op1 == NIL || op0 == SET)
    return 1;
  else if (op0 == NIL)
    op0 = op1, const0 = const1;
  else if (op0 == op1)
    {
      switch (op0)
 {
 case AND:
   const0 &= const1;
   break;
 case IOR:
   const0 |= const1;
   break;
 case XOR:
   const0 ^= const1;
   break;
 case PLUS:
   const0 += const1;
   break;
 case NEG:
   op0 = NIL;
   break;
 default:
   break;
 }
    }
  else if (op0 == PLUS || op1 == PLUS || op0 == NEG || op1 == NEG)
    return 0;
  else if (const0 != const1)
    return 0;
  else
    switch (op0)
      {
      case IOR:
 if (op1 == AND)
   op0 = SET;
 else
   {;}
 break;
      case XOR:
 if (op1 == AND)
   op0 = AND, *pcomp_p = 1;
 else
   op0 = AND, const0 = ~const0;
 break;
      case AND:
 if (op1 == IOR)
 op0 = SET;
 else
   *pcomp_p = 1;
 break;
      default:
 break;
      }
  const0 &= mode_mask_array[mode];
  if (const0 == 0
      && (op0 == IOR || op0 == XOR || op0 == PLUS))
    op0 = NIL;
  else if (const0 == 0 && op0 == AND)
    op0 = SET;
  else if ((unsigned long) const0 == mode_mask_array[mode]
    && op0 == AND)
    op0 = NIL;
  const0 = trunc_int_for_mode (const0, mode);
  *pop0 = op0;
  *pconst0 = const0;
  return 1;
}
static rtx
simplify_shift_const (rtx x, enum rtx_code code,
        enum machine_mode result_mode, rtx varop,
        int orig_count)
{
  enum rtx_code orig_code = code;
  unsigned int count;
  int signed_count;
  enum machine_mode mode = result_mode;
  enum machine_mode shift_mode, tmode;
  unsigned int mode_words
    = (((unsigned short) mode_size[mode]) + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4);
  enum rtx_code outer_op = NIL;
  long outer_const = 0;
  rtx const_rtx;
  int complement_p = 0;
  rtx new;
  if (0)
    orig_count &= ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1;
  if (orig_count < 0 || orig_count >= (int) ((unsigned short) (((unsigned short) mode_size[mode]) * 8)))
    {
      if (x)
 return x;
      return gen_rtx_fmt_ee (code, mode, varop, gen_rtx_CONST_INT (VOIDmode, (long) (orig_count)));
    }
  count = orig_count;
  while (count != 0)
    {
      if (((enum rtx_code) (varop)->code) == CLOBBER)
 return varop;
      if (complement_p)
 break;
      if (code == ROTATERT)
 {
   unsigned int bitsize = ((unsigned short) (((unsigned short) mode_size[result_mode]) * 8));;
   code = ROTATE;
   if ((mode_class[result_mode] == MODE_VECTOR_INT || mode_class[result_mode] == MODE_VECTOR_FLOAT))
     count = bitsize / mode_nunits[result_mode] - count;
   else
     count = bitsize - count;
 }
      shift_mode
 = (code == ASHIFTRT || code == LSHIFTRT || code == ROTATE
    ? result_mode : mode);
      if (count > (unsigned int) (((unsigned short) (((unsigned short) mode_size[shift_mode]) * 8)) - 1))
 {
   if (code == ASHIFTRT)
     count = ((unsigned short) (((unsigned short) mode_size[shift_mode]) * 8)) - 1;
   else if (code == ROTATE || code == ROTATERT)
     count %= ((unsigned short) (((unsigned short) mode_size[shift_mode]) * 8));
   else
     {
       varop = (const_int_rtx[64]);
       count = 0;
       break;
     }
 }
      if (code == ASHIFTRT
   && (num_sign_bit_copies (varop, shift_mode)
       == ((unsigned short) (((unsigned short) mode_size[shift_mode]) * 8))))
 {
   count = 0;
   break;
 }
      if (code == ASHIFTRT
   && (count + num_sign_bit_copies (varop, shift_mode)
       >= ((unsigned short) (((unsigned short) mode_size[shift_mode]) * 8))))
 count = ((unsigned short) (((unsigned short) mode_size[shift_mode]) * 8)) - 1;
      if (((unsigned short) (((unsigned short) mode_size[shift_mode]) * 8)) <= (8 * 4)
   && code == ASHIFTRT
   && ((nonzero_bits (varop, shift_mode)
        & ((long) 1 << (((unsigned short) (((unsigned short) mode_size[shift_mode]) * 8)) - 1)))
       == 0))
 code = LSHIFTRT;
      if (code == LSHIFTRT
   && ((unsigned short) (((unsigned short) mode_size[shift_mode]) * 8)) <= (8 * 4)
   && !(nonzero_bits (varop, shift_mode) >> count))
 varop = (const_int_rtx[64]);
      if (code == ASHIFT
   && ((unsigned short) (((unsigned short) mode_size[shift_mode]) * 8)) <= (8 * 4)
   && !((nonzero_bits (varop, shift_mode) << count)
        & mode_mask_array[shift_mode]))
 varop = (const_int_rtx[64]);
      switch (((enum rtx_code) (varop)->code))
 {
 case SIGN_EXTEND:
 case ZERO_EXTEND:
 case SIGN_EXTRACT:
 case ZERO_EXTRACT:
   new = expand_compound_operation (varop);
   if (new != varop)
     {
       varop = new;
       continue;
     }
   break;
 case MEM:
   if ((code == ASHIFTRT || code == LSHIFTRT)
       && ! mode_dependent_address_p ((((varop)->u.fld[0]).rtx1))
       && ! (((varop))->volatil)
       && (tmode = mode_for_size (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - count,
      MODE_INT, 1)) != BLKmode)
     {
       new = adjust_address_1 (varop, tmode, 0 ? 0 : count / 8, 0, 1)
                                   ;
       varop = gen_rtx_fmt_e (code == ASHIFTRT ? SIGN_EXTEND
         : ZERO_EXTEND, mode, new);
       count = 0;
       continue;
     }
   break;
 case USE:
   if ((code == ASHIFTRT || code == LSHIFTRT)
       && (tmode = mode_for_size (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - count,
      MODE_INT, 1)) != BLKmode
       && tmode == ((enum machine_mode) ((((varop)->u.fld[0]).rtx1))->mode))
     {
       if (0)
  new = (((varop)->u.fld[0]).rtx1);
       else
  {
    new = copy_rtx ((((varop)->u.fld[0]).rtx1));
    do_SUBST(&((((new)->u.fld[0]).rtx1)), (plus_constant_wide (((((new)->u.fld[0]).rtx1)), (long) (count / 8))))
                            ;
  }
       varop = gen_rtx_fmt_e (code == ASHIFTRT ? SIGN_EXTEND
         : ZERO_EXTEND, mode, new);
       count = 0;
       continue;
     }
   break;
 case SUBREG:
   if (subreg_lowpart_p (varop)
       && (((unsigned short) mode_size[((enum machine_mode) ((((varop)->u.fld[0]).rtx1))->mode)])
    > ((unsigned short) mode_size[((enum machine_mode) (varop)->mode)]))
       && (unsigned int) ((((unsigned short) mode_size[((enum machine_mode) ((((varop)->u.fld[0]).rtx1))->mode)])
      + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4))
   == mode_words)
     {
       varop = (((varop)->u.fld[0]).rtx1);
       if (((unsigned short) mode_size[((enum machine_mode) (varop)->mode)]) > ((unsigned short) mode_size[mode]))
  mode = ((enum machine_mode) (varop)->mode);
       continue;
     }
   break;
 case MULT:
   if (((enum rtx_code) ((((varop)->u.fld[1]).rtx1))->code) == CONST_INT
       && exact_log2_wide ((unsigned long) ((((((varop)->u.fld[1]).rtx1))->u.hwint[0]))) >= 0)
     {
       varop
  = gen_binary (ASHIFT, ((enum machine_mode) (varop)->mode), (((varop)->u.fld[0]).rtx1),
         gen_rtx_CONST_INT (VOIDmode, (long) (exact_log2_wide ((unsigned long) ((((((varop)->u.fld[1]).rtx1))->u.hwint[0]))))));
       continue;
     }
   break;
 case UDIV:
   if (((enum rtx_code) ((((varop)->u.fld[1]).rtx1))->code) == CONST_INT
       && exact_log2_wide ((unsigned long) ((((((varop)->u.fld[1]).rtx1))->u.hwint[0]))) >= 0)
     {
       varop
  = gen_binary (LSHIFTRT, ((enum machine_mode) (varop)->mode), (((varop)->u.fld[0]).rtx1),
         gen_rtx_CONST_INT (VOIDmode, (long) (exact_log2_wide ((unsigned long) ((((((varop)->u.fld[1]).rtx1))->u.hwint[0]))))));
       continue;
     }
   break;
 case ASHIFTRT:
   if (code == LSHIFTRT
       && count == (unsigned int) (((unsigned short) (((unsigned short) mode_size[result_mode]) * 8)) - 1)
       && (((unsigned short) (((unsigned short) mode_size[result_mode]) * 8))
    >= ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (varop)->mode)]) * 8))))
     {
       varop = (((varop)->u.fld[0]).rtx1);
       continue;
     }
 case LSHIFTRT:
 case ASHIFT:
 case ROTATE:
   if (((enum rtx_code) ((((varop)->u.fld[1]).rtx1))->code) == CONST_INT
       && (((((varop)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
       && (((((varop)->u.fld[1]).rtx1))->u.hwint[0]) < ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (varop)->mode)]) * 8))
       && ((unsigned short) (((unsigned short) mode_size[result_mode]) * 8)) <= (8 * 4)
       && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4))
     {
       enum rtx_code first_code = ((enum rtx_code) (varop)->code);
       unsigned int first_count = (((((varop)->u.fld[1]).rtx1))->u.hwint[0]);
       unsigned long mask;
       rtx mask_rtx;
       if (code == ASHIFT && first_code == ASHIFTRT
    && count == (unsigned int)
         (((unsigned short) (((unsigned short) mode_size[result_mode]) * 8))
          - ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (varop)->mode)]) * 8))))
  {
    mask = (mode_mask_array[mode]
     & ~(((long) 1 << first_count) - 1));
    varop = simplify_and_const_int ((rtx) 0, result_mode,
        (((varop)->u.fld[0]).rtx1), mask);
    varop = simplify_shift_const ((rtx) 0, ASHIFT, result_mode,
      varop, count);
    count = first_count;
    code = ASHIFTRT;
    continue;
  }
       if (code == ASHIFTRT && first_code == ASHIFT
    && ((enum machine_mode) (varop)->mode) == shift_mode
    && (num_sign_bit_copies ((((varop)->u.fld[0]).rtx1), shift_mode)
        > first_count))
  {
    varop = (((varop)->u.fld[0]).rtx1);
    signed_count = count - first_count;
    if (signed_count < 0)
      count = -signed_count, code = ASHIFT;
    else
      count = signed_count;
    continue;
  }
       if (code == first_code)
  {
    if (((enum machine_mode) (varop)->mode) != result_mode
        && (code == ASHIFTRT || code == LSHIFTRT
     || code == ROTATE))
      break;
    count += first_count;
    varop = (((varop)->u.fld[0]).rtx1);
    continue;
  }
       if (code == ASHIFTRT
    || (code == ROTATE && first_code == ASHIFTRT)
    || ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) > (8 * 4)
    || (((enum machine_mode) (varop)->mode) != result_mode
        && (first_code == ASHIFTRT || first_code == LSHIFTRT
     || first_code == ROTATE
     || code == ROTATE)))
  break;
       mask_rtx = gen_rtx_CONST_INT (VOIDmode, (long) (nonzero_bits (varop, ((enum machine_mode) (varop)->mode))));
       mask_rtx
  = simplify_binary_operation (code, result_mode, mask_rtx,
          gen_rtx_CONST_INT (VOIDmode, (long) (count)));
       if (mask_rtx == 0
    || ((enum rtx_code) (mask_rtx)->code) != CONST_INT
    || ! merge_outer_ops (&outer_op, &outer_const, AND,
     ((mask_rtx)->u.hwint[0]),
     result_mode, &complement_p))
  break;
       signed_count = count;
       if ((code == ASHIFTRT || code == LSHIFTRT)
    == (first_code == ASHIFTRT || first_code == LSHIFTRT))
  signed_count += first_count;
       else
  signed_count -= first_count;
       if (signed_count > 0
    && ((first_code == ROTATE && code == ASHIFT)
        || (first_code == ASHIFTRT && code == LSHIFTRT)))
  code = first_code, count = signed_count;
       else if (signed_count < 0)
  code = first_code, count = -signed_count;
       else
  count = signed_count;
       varop = (((varop)->u.fld[0]).rtx1);
       continue;
     }
   else if (((enum rtx_code) (varop)->code) == code
     && ((enum rtx_code) ((((varop)->u.fld[1]).rtx1))->code) != CONST_INT
     && 0 != (new
       = simplify_binary_operation (code, mode,
        (((varop)->u.fld[0]).rtx1),
        gen_rtx_CONST_INT (VOIDmode, (long) (count)))))
     {
       varop = gen_rtx_fmt_ee (code, mode, new, (((varop)->u.fld[1]).rtx1));
       count = 0;
       continue;
     }
   break;
 case NOT:
   varop = gen_rtx_fmt_ee (XOR, (mode), ((((varop)->u.fld[0]).rtx1)), (gen_rtx_CONST_INT (VOIDmode, (long) (mode_mask_array[mode]))))
                                         ;
   continue;
 case IOR:
 case AND:
 case XOR:
   if (((enum rtx_code) (varop)->code) == IOR && ((enum rtx_code) ((((varop)->u.fld[0]).rtx1))->code) == PLUS
       && ((((((varop)->u.fld[0]).rtx1))->u.fld[1]).rtx1) == (const_int_rtx[64 -1])
       && (1 == 1 || 1 == -1)
       && (code == LSHIFTRT || code == ASHIFTRT)
       && count == (unsigned int)
     (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (varop)->mode)]) * 8)) - 1)
       && rtx_equal_p (((((((varop)->u.fld[0]).rtx1))->u.fld[0]).rtx1), (((varop)->u.fld[1]).rtx1)))
     {
       count = 0;
       varop = gen_rtx_fmt_ee (LE, (((enum machine_mode) (varop)->mode)), ((((varop)->u.fld[1]).rtx1)), ((const_int_rtx[64])))
                 ;
       if (1 == 1 ? code == ASHIFTRT : code == LSHIFTRT)
  varop = gen_rtx_fmt_e (NEG, (((enum machine_mode) (varop)->mode)), (varop));
       continue;
     }
   if (((enum rtx_code) ((((varop)->u.fld[1]).rtx1))->code) == CONST_INT
       && !(code == ASHIFTRT && ((enum rtx_code) (varop)->code) == XOR
     && 0 > trunc_int_for_mode ((((((varop)->u.fld[1]).rtx1))->u.hwint[0]),
           shift_mode))
       && (new = simplify_binary_operation (code, result_mode,
         (((varop)->u.fld[1]).rtx1),
         gen_rtx_CONST_INT (VOIDmode, (long) (count)))) != 0
       && ((enum rtx_code) (new)->code) == CONST_INT
       && merge_outer_ops (&outer_op, &outer_const, ((enum rtx_code) (varop)->code),
      ((new)->u.hwint[0]), result_mode, &complement_p))
     {
       varop = (((varop)->u.fld[0]).rtx1);
       continue;
     }
   if (((enum rtx_code) ((((varop)->u.fld[1]).rtx1))->code) == CONST_INT
      && !(code == ASHIFTRT && ((enum rtx_code) (varop)->code) == XOR
           && 0 > trunc_int_for_mode ((((((varop)->u.fld[1]).rtx1))->u.hwint[0]),
          shift_mode)))
     {
       rtx lhs = simplify_shift_const ((rtx) 0, code, shift_mode,
           (((varop)->u.fld[0]).rtx1), count);
       rtx rhs = simplify_shift_const ((rtx) 0, code, shift_mode,
           (((varop)->u.fld[1]).rtx1), count);
       varop = gen_binary (((enum rtx_code) (varop)->code), shift_mode, lhs, rhs);
       varop = apply_distributive_law (varop);
       count = 0;
       continue;
     }
   break;
 case EQ:
   if (code == LSHIFTRT
       && (((varop)->u.fld[1]).rtx1) == (const_int_rtx[64])
       && ((enum machine_mode) ((((varop)->u.fld[0]).rtx1))->mode) == result_mode
       && count == (unsigned int) (((unsigned short) (((unsigned short) mode_size[result_mode]) * 8)) - 1)
       && ((unsigned short) (((unsigned short) mode_size[result_mode]) * 8)) <= (8 * 4)
       && ((1
     & ((long) 1
        < (((unsigned short) (((unsigned short) mode_size[result_mode]) * 8)) - 1))))
       && nonzero_bits ((((varop)->u.fld[0]).rtx1), result_mode) == 1
       && merge_outer_ops (&outer_op, &outer_const, XOR,
      (long) 1, result_mode,
      &complement_p))
     {
       varop = (((varop)->u.fld[0]).rtx1);
       count = 0;
       continue;
     }
   break;
 case NEG:
   if (code == LSHIFTRT
       && count == (unsigned int) (((unsigned short) (((unsigned short) mode_size[result_mode]) * 8)) - 1)
       && nonzero_bits ((((varop)->u.fld[0]).rtx1), result_mode) == 1)
     {
       varop = (((varop)->u.fld[0]).rtx1);
       count = 0;
       continue;
     }
   if (code == ASHIFT
       && merge_outer_ops (&outer_op, &outer_const, NEG,
      (long) 0, result_mode,
      &complement_p))
     {
       varop = (((varop)->u.fld[0]).rtx1);
       continue;
     }
   break;
 case PLUS:
   if (code == LSHIFTRT
       && count == (unsigned int) (((unsigned short) (((unsigned short) mode_size[result_mode]) * 8)) - 1)
       && (((varop)->u.fld[1]).rtx1) == (const_int_rtx[64 -1])
       && nonzero_bits ((((varop)->u.fld[0]).rtx1), result_mode) == 1
       && merge_outer_ops (&outer_op, &outer_const, XOR,
      (long) 1, result_mode,
      &complement_p))
     {
       count = 0;
       varop = (((varop)->u.fld[0]).rtx1);
       continue;
     }
   if ((code == ASHIFTRT || code == LSHIFTRT)
       && count < (8 * 4)
       && nonzero_bits ((((varop)->u.fld[1]).rtx1), result_mode) >> count == 0
       && (nonzero_bits ((((varop)->u.fld[1]).rtx1), result_mode)
    & nonzero_bits ((((varop)->u.fld[0]).rtx1), result_mode)) == 0)
     {
       varop = (((varop)->u.fld[0]).rtx1);
       continue;
     }
   else if ((code == ASHIFTRT || code == LSHIFTRT)
     && count < (8 * 4)
     && ((unsigned short) (((unsigned short) mode_size[result_mode]) * 8)) <= (8 * 4)
     && 0 == (nonzero_bits ((((varop)->u.fld[0]).rtx1), result_mode)
       >> count)
     && 0 == (nonzero_bits ((((varop)->u.fld[0]).rtx1), result_mode)
       & nonzero_bits ((((varop)->u.fld[1]).rtx1),
       result_mode)))
     {
       varop = (((varop)->u.fld[1]).rtx1);
       continue;
     }
   if (code == ASHIFT
       && ((enum rtx_code) ((((varop)->u.fld[1]).rtx1))->code) == CONST_INT
       && (new = simplify_binary_operation (ASHIFT, result_mode,
         (((varop)->u.fld[1]).rtx1),
         gen_rtx_CONST_INT (VOIDmode, (long) (count)))) != 0
       && ((enum rtx_code) (new)->code) == CONST_INT
       && merge_outer_ops (&outer_op, &outer_const, PLUS,
      ((new)->u.hwint[0]), result_mode, &complement_p))
     {
       varop = (((varop)->u.fld[0]).rtx1);
       continue;
     }
   break;
 case MINUS:
   if ((1 == 1 || 1 == -1)
       && ((enum rtx_code) ((((varop)->u.fld[0]).rtx1))->code) == ASHIFTRT
       && count == (unsigned int)
     (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (varop)->mode)]) * 8)) - 1)
       && (code == LSHIFTRT || code == ASHIFTRT)
       && ((enum rtx_code) (((((((varop)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
       && (unsigned long) ((((((((varop)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])
   == count
       && rtx_equal_p (((((((varop)->u.fld[0]).rtx1))->u.fld[0]).rtx1), (((varop)->u.fld[1]).rtx1)))
     {
       count = 0;
       varop = gen_rtx_fmt_ee (GT, (((enum machine_mode) (varop)->mode)), ((((varop)->u.fld[1]).rtx1)), ((const_int_rtx[64])))
                 ;
       if (1 == 1 ? code == ASHIFTRT : code == LSHIFTRT)
  varop = gen_rtx_fmt_e (NEG, (((enum machine_mode) (varop)->mode)), (varop));
       continue;
     }
   break;
 case TRUNCATE:
   if (code == LSHIFTRT
       && ((enum rtx_code) ((((varop)->u.fld[0]).rtx1))->code) == LSHIFTRT
       && ((enum rtx_code) (((((((varop)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
       && (((((((((varop)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])
    >= (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((varop)->u.fld[0]).rtx1))->mode)]) * 8))
        - ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (varop)->mode)]) * 8)))))
     {
       rtx varop_inner = (((varop)->u.fld[0]).rtx1);
       varop_inner
  = gen_rtx_fmt_ee (LSHIFTRT, (((enum machine_mode) (varop_inner)->mode)), ((((varop_inner)->u.fld[0]).rtx1)), (gen_rtx_CONST_INT (VOIDmode, (long) (count + (((((varop_inner)->u.fld[1]).rtx1))->u.hwint[0])))))
                                                 ;
       varop = gen_rtx_fmt_e (TRUNCATE, (((enum machine_mode) (varop)->mode)), (varop_inner));
       count = 0;
       continue;
     }
   break;
 default:
   break;
 }
      break;
    }
  shift_mode
    = (code == ASHIFTRT || code == LSHIFTRT || code == ROTATE
       ? result_mode : mode);
  if (x && (rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_BIN_ARITH
      && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
      && (unsigned long) (((((x)->u.fld[1]).rtx1))->u.hwint[0]) == count)
    const_rtx = (((x)->u.fld[1]).rtx1);
  else
    const_rtx = gen_rtx_CONST_INT (VOIDmode, (long) (count));
  if (x && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
      && ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) == shift_mode
      && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == varop)
    varop = (((x)->u.fld[0]).rtx1);
  else if (((enum machine_mode) (varop)->mode) != shift_mode)
    varop = rtl_hooks.gen_lowpart (shift_mode, varop);
  if (((enum rtx_code) (varop)->code) == CLOBBER)
    return x ? x : varop;
  new = simplify_binary_operation (code, shift_mode, varop, const_rtx);
  if (new != 0)
    x = new;
  else
    x = gen_rtx_fmt_ee (code, shift_mode, varop, const_rtx);
  if (outer_op != NIL && ((enum rtx_code) (x)->code) == code
      && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
    x = simplify_shift_const (x, code, shift_mode, (((x)->u.fld[0]).rtx1),
         (((((x)->u.fld[1]).rtx1))->u.hwint[0]));
  if (orig_code == LSHIFTRT && result_mode != shift_mode)
    x = simplify_and_const_int ((rtx) 0, shift_mode, x,
    mode_mask_array[result_mode] >> orig_count);
  x = rtl_hooks.gen_lowpart (result_mode, x);
  if (complement_p)
    x = simplify_gen_unary (NOT, result_mode, x, result_mode);
  if (outer_op != NIL)
    {
      if (((unsigned short) (((unsigned short) mode_size[result_mode]) * 8)) < (8 * 4))
 outer_const = trunc_int_for_mode (outer_const, result_mode);
      if (outer_op == AND)
 x = simplify_and_const_int ((rtx) 0, result_mode, x, outer_const);
      else if (outer_op == SET)
 x = gen_rtx_CONST_INT (VOIDmode, (long) (outer_const));
      else if ((rtx_class[(int) (outer_op)]) == RTX_UNARY)
 x = simplify_gen_unary (outer_op, result_mode, x, result_mode);
      else
 x = gen_binary (outer_op, result_mode, x, gen_rtx_CONST_INT (VOIDmode, (long) (outer_const)));
    }
  return x;
}
static int
recog_for_combine (rtx *pnewpat, rtx insn, rtx *pnotes)
{
  rtx pat = *pnewpat;
  int insn_code_number;
  int num_clobbers_to_add = 0;
  int i;
  rtx notes = 0;
  rtx old_notes, old_pat;
  if (((enum rtx_code) (pat)->code) == PARALLEL)
    for (i = (((((pat)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
      if (((enum rtx_code) ((((((pat)->u.fld[0]).rtvec1))->elem[i]))->code) == CLOBBER
   && ((((((((pat)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1) == (const_int_rtx[64]))
 return -1;
  old_pat = (((insn)->u.fld[5]).rtx1);
  old_notes = (((insn)->u.fld[8]).rtx1);
  (((insn)->u.fld[5]).rtx1) = pat;
  (((insn)->u.fld[8]).rtx1) = 0;
  insn_code_number = recog (pat, insn, &num_clobbers_to_add);
  if (insn_code_number < 0 && ! check_asm_operands (pat)
      && ((enum rtx_code) (pat)->code) == PARALLEL)
    {
      int pos;
      for (pos = 0, i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
 if (((enum rtx_code) ((((((pat)->u.fld[0]).rtvec1))->elem[i]))->code) != CLOBBER)
   {
     if (i != pos)
       do_SUBST(&((((((pat)->u.fld[0]).rtvec1))->elem[pos])), ((((((pat)->u.fld[0]).rtvec1))->elem[i])));
     pos++;
   }
      do_SUBST_INT(&((((((pat)->u.fld[0]).rtvec1))->num_elem)), (pos));
      if (pos == 1)
 pat = (((((pat)->u.fld[0]).rtvec1))->elem[0]);
      (((insn)->u.fld[5]).rtx1) = pat;
      insn_code_number = recog (pat, insn, &num_clobbers_to_add);
    }
  (((insn)->u.fld[5]).rtx1) = old_pat;
  (((insn)->u.fld[8]).rtx1) = old_notes;
  if (insn_code_number < 0 && ((enum rtx_code) (pat)->code) == SET && set_noop_p (pat))
    insn_code_number = 2147483647, num_clobbers_to_add = 0;
  if (num_clobbers_to_add)
    {
      rtx newpat = gen_rtx_fmt_E (PARALLEL, (VOIDmode), (rtvec_alloc (((enum rtx_code) (pat)->code) == PARALLEL ? ((((((pat)->u.fld[0]).rtvec1))->num_elem) + num_clobbers_to_add) : num_clobbers_to_add + 1)))
                                   ;
      if (((enum rtx_code) (pat)->code) == PARALLEL)
 for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
   (((((newpat)->u.fld[0]).rtvec1))->elem[i]) = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
      else
 (((((newpat)->u.fld[0]).rtvec1))->elem[0]) = pat;
      add_clobbers (newpat, insn_code_number);
      for (i = (((((newpat)->u.fld[0]).rtvec1))->num_elem) - num_clobbers_to_add;
    i < (((((newpat)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   if ((((enum rtx_code) (((((((((newpat)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1))->code) == REG)
       && ! reg_dead_at_p (((((((((newpat)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1), insn))
     return -1;
   notes = gen_rtx_fmt_ee (EXPR_LIST, (REG_UNUSED), (((((((((newpat)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1)), (notes))
                                                 ;
 }
      pat = newpat;
    }
  *pnewpat = pat;
  *pnotes = notes;
  return insn_code_number;
}
static rtx
gen_lowpart_for_combine (enum machine_mode mode, rtx x)
{
  rtx result;
  if (((enum machine_mode) (x)->mode) == mode)
    return x;
  if (mode == (0 ? DImode : SImode)
      && (((enum rtx_code) (x)->code) == CONST
   || ((enum rtx_code) (x)->code) == SYMBOL_REF
   || ((enum rtx_code) (x)->code) == LABEL_REF))
    return x;
  if (((unsigned short) mode_size[mode]) > (0 ? 8 : 4)
      && ! ((((enum machine_mode) (x)->mode) == VOIDmode
      && (((enum rtx_code) (x)->code) == CONST_INT
   || ((enum rtx_code) (x)->code) == CONST_DOUBLE))
     || ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) == ((unsigned short) mode_size[mode])))
    return gen_rtx_fmt_e (CLOBBER, (((enum machine_mode) (x)->mode)), ((const_int_rtx[64])));
  if (((enum rtx_code) (x)->code) == SUBREG && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
    {
      x = (((x)->u.fld[0]).rtx1);
      if (((enum machine_mode) (x)->mode) == mode)
 return x;
    }
  result = gen_lowpart_common (mode, x);
  if (result != 0
      && ((enum rtx_code) (result)->code) == SUBREG
      && (((enum rtx_code) ((((result)->u.fld[0]).rtx1))->code) == REG)
      && ((((((result)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
    bitmap_set_bit (&subregs_of_mode, ((((((result)->u.fld[0]).rtx1))->u.fld[0]).rtuint)
          * MAX_MACHINE_MODE
          + ((enum machine_mode) (result)->mode));
  if (result)
    return result;
  if ((((enum rtx_code) (x)->code) == MEM))
    {
      int offset = 0;
      if ((((x))->volatil) || mode_dependent_address_p ((((x)->u.fld[0]).rtx1)))
 return gen_rtx_fmt_e (CLOBBER, (((enum machine_mode) (x)->mode)), ((const_int_rtx[64])));
      if (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) < ((unsigned short) mode_size[mode]))
 return gen_rtx_SUBREG (mode, x, 0);
      if (0)
 offset = (((((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) > ((0 ? 8 : 4)) ? (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) : ((0 ? 8 : 4)))
    - ((((unsigned short) mode_size[mode])) > ((0 ? 8 : 4)) ? (((unsigned short) mode_size[mode])) : ((0 ? 8 : 4))));
      if (0)
 {
   offset -= ((((0 ? 8 : 4)) < (((unsigned short) mode_size[mode])) ? ((0 ? 8 : 4)) : (((unsigned short) mode_size[mode])))
       - (((0 ? 8 : 4)) < (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) ? ((0 ? 8 : 4)) : (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]))));
 }
      return adjust_address_1 (x, mode, offset, 0, 1);
    }
  else if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
    return gen_rtx_fmt_ee (((enum rtx_code) (x)->code), mode, (((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1));
  else
    {
      int offset = 0;
      rtx res;
      enum machine_mode sub_mode = ((enum machine_mode) (x)->mode);
      offset = subreg_lowpart_offset (mode, sub_mode);
      if (sub_mode == VOIDmode)
 {
   sub_mode = int_mode_for_mode (mode);
   x = gen_lowpart_common (sub_mode, x);
   if (x == 0)
     return gen_rtx_fmt_e (CLOBBER, (VOIDmode), ((const_int_rtx[64])));
 }
      res = simplify_gen_subreg (mode, x, sub_mode, offset);
      if (res)
 return res;
      return gen_rtx_fmt_e (CLOBBER, (((enum machine_mode) (x)->mode)), ((const_int_rtx[64])));
    }
}
static rtx
gen_binary (enum rtx_code code, enum machine_mode mode, rtx op0, rtx op1)
{
  rtx result;
  rtx tem;
  if (((enum rtx_code) (op0)->code) == CLOBBER)
    return op0;
  else if (((enum rtx_code) (op1)->code) == CLOBBER)
    return op1;
  if ((rtx_class[(int) (code)]) == RTX_COMM_ARITH
      && swap_commutative_operands_p (op0, op1))
    tem = op0, op0 = op1, op1 = tem;
  if ((rtx_class[(int) (code)]) == RTX_COMPARE
      || (rtx_class[(int) (code)]) == RTX_COMM_COMPARE)
    {
      enum machine_mode op_mode = ((enum machine_mode) (op0)->mode);
      if (((enum rtx_code) (op0)->code) == COMPARE && op1 == (const_int_rtx[64]))
 {
   op1 = (((op0)->u.fld[1]).rtx1);
   op0 = (((op0)->u.fld[0]).rtx1);
   op_mode = ((enum machine_mode) (op0)->mode);
 }
      if (op_mode == VOIDmode)
 op_mode = ((enum machine_mode) (op1)->mode);
      result = simplify_relational_operation (code, mode, op_mode, op0, op1);
    }
  else
    result = simplify_binary_operation (code, mode, op0, op1);
  if (result)
    return result;
  if ((rtx_class[(int) (code)]) == RTX_COMM_ARITH
      && swap_commutative_operands_p (op0, op1))
    return gen_rtx_fmt_ee (code, mode, op1, op0);
  else if (code == AND && ((enum rtx_code) (op1)->code) == CONST_INT
    && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
    && (nonzero_bits (op0, mode) & ~((op1)->u.hwint[0])) == 0)
    return op0;
  return gen_rtx_fmt_ee (code, mode, op0, op1);
}
static enum rtx_code
simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1)
{
  rtx op0 = *pop0;
  rtx op1 = *pop1;
  rtx tem, tem1;
  int i;
  enum machine_mode mode, tmode;
  while (1)
    {
      if (code != GTU && code != GEU && code != LTU && code != LEU
   && ((enum rtx_code) (op0)->code) == ASHIFTRT && ((enum rtx_code) (op1)->code) == ASHIFTRT
   && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == ASHIFT
   && ((enum rtx_code) ((((op1)->u.fld[0]).rtx1))->code) == ASHIFT
   && ((enum rtx_code) (((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SUBREG
   && ((enum rtx_code) (((((((op1)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SUBREG
   && (((enum machine_mode) ((((((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)
       == ((enum machine_mode) ((((((((((op1)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode))
   && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((op0)->u.fld[1]).rtx1) == (((op1)->u.fld[1]).rtx1)
   && (((op0)->u.fld[1]).rtx1) == ((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1)
   && (((op0)->u.fld[1]).rtx1) == ((((((op1)->u.fld[0]).rtx1))->u.fld[1]).rtx1)
   && ((((((op0)->u.fld[1]).rtx1))->u.hwint[0])
       == (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8))
    - (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)]) * 8))
                                                        ))))
 {
   op0 = (((((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   op1 = (((((((((op1)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
 }
      if (((enum rtx_code) (op0)->code) == ((enum rtx_code) (op1)->code)
   && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)) <= (8 * 4)
   && ((((enum rtx_code) (op0)->code) == ROTATE && (code == NE || code == EQ))
       || ((((enum rtx_code) (op0)->code) == LSHIFTRT || ((enum rtx_code) (op0)->code) == ASHIFT)
    && (code != GT && code != LT && code != GE && code != LE))
       || (((enum rtx_code) (op0)->code) == ASHIFTRT
    && (code != GTU && code != LTU
        && code != GEU && code != LEU)))
   && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((op0)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
   && (((((op0)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4)
   && (((op0)->u.fld[1]).rtx1) == (((op1)->u.fld[1]).rtx1))
 {
   enum machine_mode mode = ((enum machine_mode) (op0)->mode);
   unsigned long mask = mode_mask_array[mode];
   int shift_count = (((((op0)->u.fld[1]).rtx1))->u.hwint[0]);
   if (((enum rtx_code) (op0)->code) == LSHIFTRT || ((enum rtx_code) (op0)->code) == ASHIFTRT)
     mask &= (mask >> shift_count) << shift_count;
   else if (((enum rtx_code) (op0)->code) == ASHIFT)
     mask = (mask & (mask << shift_count)) >> shift_count;
   if ((nonzero_bits ((((op0)->u.fld[0]).rtx1), mode) & ~mask) == 0
       && (nonzero_bits ((((op1)->u.fld[0]).rtx1), mode) & ~mask) == 0)
     op0 = (((op0)->u.fld[0]).rtx1), op1 = (((op1)->u.fld[0]).rtx1);
   else
     break;
 }
      else if (((enum rtx_code) (op0)->code) == AND && ((enum rtx_code) (op1)->code) == AND
        && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
        && ((enum rtx_code) ((((op1)->u.fld[1]).rtx1))->code) == CONST_INT)
 {
   rtx inner_op0 = (((op0)->u.fld[0]).rtx1);
   rtx inner_op1 = (((op1)->u.fld[0]).rtx1);
   long c0 = (((((op0)->u.fld[1]).rtx1))->u.hwint[0]);
   long c1 = (((((op1)->u.fld[1]).rtx1))->u.hwint[0]);
   int changed = 0;
   if (((enum rtx_code) (inner_op0)->code) == SUBREG && ((enum rtx_code) (inner_op1)->code) == SUBREG
       && (((unsigned short) mode_size[((enum machine_mode) (inner_op0)->mode)])
    > ((unsigned short) mode_size[((enum machine_mode) ((((inner_op0)->u.fld[0]).rtx1))->mode)]))
       && (((enum machine_mode) ((((inner_op0)->u.fld[0]).rtx1))->mode)
    == ((enum machine_mode) ((((inner_op1)->u.fld[0]).rtx1))->mode))
       && (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((inner_op0)->u.fld[0]).rtx1))->mode)]) * 8))
    <= (8 * 4))
       && (0 == ((~c0) & nonzero_bits ((((inner_op0)->u.fld[0]).rtx1),
          ((enum machine_mode) ((((inner_op0)->u.fld[0]).rtx1))->mode))))
       && (0 == ((~c1) & nonzero_bits ((((inner_op1)->u.fld[0]).rtx1),
          ((enum machine_mode) ((((inner_op1)->u.fld[0]).rtx1))->mode)))))
     {
       op0 = (((inner_op0)->u.fld[0]).rtx1);
       op1 = (((inner_op1)->u.fld[0]).rtx1);
       code = unsigned_condition (code);
       changed = 1;
     }
   else if (c0 == c1)
     for (tmode = class_narrowest_mode[mode_class[((enum machine_mode) (op0)->mode)]]
                                    ;
   tmode != ((enum machine_mode) (op0)->mode); tmode = mode_wider[tmode])
       if ((unsigned long) c0 == mode_mask_array[tmode])
  {
    op0 = rtl_hooks.gen_lowpart (tmode, inner_op0);
    op1 = rtl_hooks.gen_lowpart (tmode, inner_op1);
    code = unsigned_condition (code);
    changed = 1;
    break;
  }
   if (! changed)
     break;
 }
      else if ((((enum rtx_code) (op0)->code) == NOT && ((enum rtx_code) (op1)->code) == NOT)
        || (((enum rtx_code) (op0)->code) == NEG && ((enum rtx_code) (op1)->code) == NEG
     && (code == EQ || code == NE)))
 op0 = (((op0)->u.fld[0]).rtx1), op1 = (((op1)->u.fld[0]).rtx1), code = swap_condition (code);
      else
 break;
    }
  if (swap_commutative_operands_p (op0, op1))
    {
      tem = op0, op0 = op1, op1 = tem;
      code = swap_condition (code);
    }
  while (((enum rtx_code) (op1)->code) == CONST_INT)
    {
      enum machine_mode mode = ((enum machine_mode) (op0)->mode);
      unsigned int mode_width = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
      unsigned long mask = mode_mask_array[mode];
      int equality_comparison_p;
      int sign_bit_comparison_p;
      int unsigned_comparison_p;
      long const_op;
      if (mode_class[mode] != MODE_INT
   && ! (mode == VOIDmode
  && (((enum rtx_code) (op0)->code) == COMPARE || (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) & (~1)) == (RTX_COMPARE & (~1))))))
 break;
      const_op = ((op1)->u.hwint[0]);
      if (mode != VOIDmode)
 const_op = trunc_int_for_mode (const_op, mode);
      op1 = gen_rtx_CONST_INT (VOIDmode, (long) (const_op));
      if (const_op
   && (code == EQ || code == NE || code == GE || code == GEU
       || code == LT || code == LTU)
   && mode_width <= (8 * 4)
   && exact_log2_wide ((unsigned long) (const_op)) >= 0
   && nonzero_bits (op0, mode) == (unsigned long) const_op)
 {
   code = (code == EQ || code == GE || code == GEU ? NE : EQ);
   op1 = (const_int_rtx[64]), const_op = 0;
 }
      if (const_op == -1
   && (code == EQ || code == NE || code == GT || code == LE
       || code == GEU || code == LTU)
   && num_sign_bit_copies (op0, mode) == mode_width)
 {
   code = (code == EQ || code == LE || code == GEU ? NE : EQ);
   op1 = (const_int_rtx[64]), const_op = 0;
 }
      switch (code)
 {
 case LT:
   if (const_op > 0)
     {
       const_op -= 1;
       op1 = gen_rtx_CONST_INT (VOIDmode, (long) (const_op));
       code = LE;
     }
   else
     break;
 case LE:
   if (const_op < 0)
     {
       const_op += 1;
       op1 = gen_rtx_CONST_INT (VOIDmode, (long) (const_op));
       code = LT;
     }
   else if (const_op == 0
     && mode_width <= (8 * 4)
     && (nonzero_bits (op0, mode)
         & ((long) 1 << (mode_width - 1))) == 0)
     code = EQ;
   break;
 case GE:
   if (const_op > 0)
     {
       const_op -= 1;
       op1 = gen_rtx_CONST_INT (VOIDmode, (long) (const_op));
       code = GT;
     }
   else
     break;
 case GT:
   if (const_op < 0)
     {
       const_op += 1;
       op1 = gen_rtx_CONST_INT (VOIDmode, (long) (const_op));
       code = GE;
     }
   else if (const_op == 0
     && mode_width <= (8 * 4)
     && (nonzero_bits (op0, mode)
         & ((long) 1 << (mode_width - 1))) == 0)
     code = NE;
   break;
 case LTU:
   if (const_op > 0)
     {
       const_op -= 1;
       op1 = gen_rtx_CONST_INT (VOIDmode, (long) (const_op));
       code = LEU;
     }
   else if ((mode_width <= (8 * 4))
     && (const_op == (long) 1 << (mode_width - 1)))
     {
       const_op = 0, op1 = (const_int_rtx[64]);
       code = GE;
       break;
     }
   else
     break;
 case LEU:
   if (const_op == 0)
     code = EQ;
   else if ((mode_width <= (8 * 4))
     && (const_op == ((long) 1 << (mode_width - 1)) - 1))
     {
       const_op = 0, op1 = (const_int_rtx[64]);
       code = GE;
     }
   break;
 case GEU:
   if (const_op > 1)
     {
       const_op -= 1;
       op1 = gen_rtx_CONST_INT (VOIDmode, (long) (const_op));
       code = GTU;
     }
   else if ((mode_width <= (8 * 4))
     && (const_op == (long) 1 << (mode_width - 1)))
     {
       const_op = 0, op1 = (const_int_rtx[64]);
       code = LT;
       break;
     }
   else
     break;
 case GTU:
   if (const_op == 0)
     code = NE;
   else if ((mode_width <= (8 * 4))
     && (const_op == ((long) 1 << (mode_width - 1)) - 1))
     {
       const_op = 0, op1 = (const_int_rtx[64]);
       code = LT;
     }
   break;
 default:
   break;
 }
      equality_comparison_p = (code == EQ || code == NE);
      sign_bit_comparison_p = ((code == LT || code == GE) && const_op == 0);
      unsigned_comparison_p = (code == LTU || code == LEU || code == GTU
          || code == GEU);
      if (sign_bit_comparison_p
   && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4))
 op0 = force_to_mode (op0, mode,
        ((long) 1
         << (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1)),
        (rtx) 0, 0);
      switch (((enum rtx_code) (op0)->code))
 {
 case ZERO_EXTRACT:
   if (!0
       && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == CONST_INT
       && (((op0)->u.fld[1]).rtx1) == (const_int_rtx[64 +1])
       && equality_comparison_p && const_op == 0
       && (i = exact_log2_wide ((unsigned long) ((((((op0)->u.fld[0]).rtx1))->u.hwint[0])))) >= 0)
     {
       if (0)
  {
    enum machine_mode new_mode
      = mode_for_extraction (EP_extzv, 1);
    if (new_mode == MAX_MACHINE_MODE)
      i = (8 * (0 ? 8 : 4)) - 1 - i;
    else
      {
        mode = new_mode;
        i = (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1 - i);
      }
  }
       op0 = (((op0)->u.fld[2]).rtx1);
       op1 = gen_rtx_CONST_INT (VOIDmode, (long) (i));
       const_op = i;
       code = reverse_condition (code);
       continue;
     }
 case SIGN_EXTRACT:
   tem = expand_compound_operation (op0);
   if (tem != op0)
     {
       op0 = tem;
       continue;
     }
   break;
 case NOT:
   if (equality_comparison_p
       && (tem = simplify_unary_operation (NOT, mode, op1, mode)) != 0)
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       op1 = tem;
       continue;
     }
   if (sign_bit_comparison_p)
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       code = (code == GE ? LT : GE);
       continue;
     }
   break;
 case NEG:
   if (equality_comparison_p
       && (tem = simplify_unary_operation (NEG, mode, op1, mode)) != 0)
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       op1 = tem;
       continue;
     }
   if (const_op != 0)
     break;
   if (sign_bit_comparison_p
       && (((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == ABS
    || (mode_width <= (8 * 4)
        && (nonzero_bits ((((op0)->u.fld[0]).rtx1), mode)
     & ((long) 1 << (mode_width - 1))) == 0)))
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       code = (code == LT ? NE : EQ);
       continue;
     }
   if (num_sign_bit_copies (op0, mode) >= 2)
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       code = swap_condition (code);
       continue;
     }
   break;
 case ROTATE:
   if (equality_comparison_p && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && (tem = simplify_binary_operation (ROTATERT, mode,
         op1, (((op0)->u.fld[1]).rtx1))) != 0)
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       op1 = tem;
       continue;
     }
   if (const_op == 0 && sign_bit_comparison_p
       && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && mode_width <= (8 * 4))
     {
       op0 = simplify_and_const_int ((rtx) 0, mode, (((op0)->u.fld[0]).rtx1),
         ((long) 1
          << (mode_width - 1
       - (((((op0)->u.fld[1]).rtx1))->u.hwint[0]))));
       code = (code == LT ? NE : EQ);
       continue;
     }
 case ABS:
   if (const_op == 0 && equality_comparison_p)
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       continue;
     }
   break;
 case SIGN_EXTEND:
   if (! unsigned_comparison_p
       && (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)]) * 8))
    <= (8 * 4))
       && ((unsigned long) const_op
    < (((unsigned long) 1
        << (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)]) * 8)) - 1)))))
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       continue;
     }
   break;
 case SUBREG:
   if (mode_width <= (8 * 4)
       && subreg_lowpart_p (op0)
       && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == PLUS
       && ((enum rtx_code) (((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
       && ((((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) < 0
       && (-((((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])
    < (long) (mode_mask_array[mode] / 2))
       && (unsigned long) const_op < mode_mask_array[mode] / 2
       && (0 == (nonzero_bits (((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
          ((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode))
   & ~mode_mask_array[mode])
    || (num_sign_bit_copies (((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
        ((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode))
        > (unsigned int)
   (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)]) * 8))
    - ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))))
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       continue;
     }
   if (subreg_lowpart_p (op0)
       && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)]) * 8)) < mode_width)
                        ;
   else
     break;
 case ZERO_EXTEND:
   if ((unsigned_comparison_p || equality_comparison_p)
       && (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)]) * 8))
    <= (8 * 4))
       && ((unsigned long) const_op
    < mode_mask_array[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)]))
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       continue;
     }
   break;
 case PLUS:
   if (equality_comparison_p
       && 0 != (tem = simplify_binary_operation (MINUS, mode,
       op1, (((op0)->u.fld[1]).rtx1))))
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       op1 = tem;
       continue;
     }
   if (const_op == 0 && (((op0)->u.fld[1]).rtx1) == (const_int_rtx[64 -1])
       && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == ABS && sign_bit_comparison_p)
     {
       op0 = ((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
       code = (code == LT ? EQ : NE);
       continue;
     }
   break;
 case MINUS:
   if (equality_comparison_p
       && 0 != (tem = simplify_binary_operation (PLUS, mode,
       (((op0)->u.fld[1]).rtx1), op1)))
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       op1 = tem;
       continue;
     }
   if (equality_comparison_p
       && 0 != (tem = simplify_binary_operation (MINUS, mode,
       (((op0)->u.fld[0]).rtx1), op1)))
     {
       op0 = (((op0)->u.fld[1]).rtx1);
       op1 = tem;
       continue;
     }
   if (sign_bit_comparison_p && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == ASHIFTRT
       && ((enum rtx_code) (((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
       && (unsigned long) ((((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])
   == mode_width - 1
       && rtx_equal_p (((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1), (((op0)->u.fld[1]).rtx1)))
     {
       op0 = (((op0)->u.fld[1]).rtx1);
       code = (code == GE ? LE : GT);
       continue;
     }
   break;
 case XOR:
   if (equality_comparison_p
       && 0 != (tem = simplify_binary_operation (XOR, mode,
       (((op0)->u.fld[1]).rtx1), op1)))
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       op1 = tem;
       continue;
     }
   break;
 case EQ: case NE:
 case UNEQ: case LTGT:
 case LT: case LTU: case UNLT: case LE: case LEU: case UNLE:
 case GT: case GTU: case UNGT: case GE: case GEU: case UNGE:
        case UNORDERED: case ORDERED:
   if (const_op != 0
       || (((((op0)->u.fld[0]).rtx1)) ? 0 : 0)
       || mode_class[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)] == MODE_CC)
     break;
   if (((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == COMPARE)
     tem = ((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1), tem1 = ((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
   else
     tem = (((op0)->u.fld[0]).rtx1), tem1 = (((op0)->u.fld[1]).rtx1);
   if (code == NE || code == EQ
       || (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)) <= (8 * 4)
    && mode_class[((enum machine_mode) (op0)->mode)] == MODE_INT
    && (1
        & (((long) 1
     << (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)) - 1))))
    && (code == LT || code == GE)))
     {
       enum rtx_code new_code;
       if (code == LT || code == NE)
  new_code = ((enum rtx_code) (op0)->code);
       else
  new_code = combine_reversed_comparison_code (op0);
       if (new_code != UNKNOWN)
  {
    code = new_code;
    op0 = tem;
    op1 = tem1;
    continue;
  }
     }
   break;
 case IOR:
   if (sign_bit_comparison_p && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == PLUS
       && ((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1) == (const_int_rtx[64 -1])
       && rtx_equal_p (((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1), (((op0)->u.fld[1]).rtx1)))
     {
       op0 = (((op0)->u.fld[1]).rtx1);
       code = (code == GE ? GT : LE);
       continue;
     }
   break;
 case AND:
   if (const_op == 0 && equality_comparison_p
       && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == ASHIFT
       && ((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (const_int_rtx[64 +1]))
     {
       op0 = simplify_and_const_int
  (op0, mode, gen_rtx_fmt_ee (LSHIFTRT, (mode), ((((op0)->u.fld[1]).rtx1)), (((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1)))
                                   ,
   (long) 1);
       continue;
     }
   if (const_op == 0 && equality_comparison_p
       && mode_width <= (8 * 4)
       && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == LSHIFTRT
       && ((enum rtx_code) (((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
       && ((((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) >= 0
       && ((((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4))
     {
       mask = (((((((op0)->u.fld[1]).rtx1))->u.hwint[0]) & mode_mask_array[mode])
        << ((((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]));
       if ((~1 & mask) == 0
    && ((((rtx_class[(int) (((enum rtx_code) (((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_COMPARE & (~1)))
        || ((tem = get_last_value (((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1))) != 0
     && (((rtx_class[(int) (((enum rtx_code) (tem)->code))]) & (~1)) == (RTX_COMPARE & (~1))))))
  {
    op0 = ((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
    continue;
  }
     }
   if (equality_comparison_p
       && const_op == 0
       && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && mode_width <= (8 * 4)
       && (((((((op0)->u.fld[1]).rtx1))->u.hwint[0]) & mode_mask_array[mode])
    == (unsigned long) 1 << (mode_width - 1)))
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       code = (code == EQ ? GE : LT);
       continue;
     }
   if ((equality_comparison_p || unsigned_comparison_p)
       && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && (i = exact_log2_wide ((unsigned long) (((((((op0)->u.fld[1]).rtx1))->u.hwint[0]) & mode_mask_array[mode]) + 1))
          ) >= 0
       && const_op >> i == 0
       && (tmode = mode_for_size (i, MODE_INT, 1)) != BLKmode)
     {
       op0 = rtl_hooks.gen_lowpart (tmode, (((op0)->u.fld[0]).rtx1));
       continue;
     }
   if (((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == SUBREG)
     {
       unsigned long c1;
       tmode = ((enum machine_mode) (((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode);
       if ((mode_class[tmode] == MODE_INT || mode_class[tmode] == MODE_PARTIAL_INT)
    && (0
        || (mode_width <= ((unsigned short) (((unsigned short) mode_size[tmode]) * 8))
     && subreg_lowpart_p ((((op0)->u.fld[0]).rtx1))))
    && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
    && mode_width <= (8 * 4)
    && ((unsigned short) (((unsigned short) mode_size[tmode]) * 8)) <= (8 * 4)
    && ((c1 = (((((op0)->u.fld[1]).rtx1))->u.hwint[0])) & ~mask) == 0
    && (c1 & ~mode_mask_array[tmode]) == 0
    && c1 != mask
    && c1 != mode_mask_array[tmode])
  {
    op0 = gen_binary (AND, tmode,
        ((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
        gen_int_mode (c1, tmode));
    op0 = rtl_hooks.gen_lowpart (mode, op0);
    continue;
  }
     }
   if (const_op == 0 && equality_comparison_p
       && (((op0)->u.fld[1]).rtx1) == (const_int_rtx[64 +1])
       && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == NOT)
     {
       op0 = simplify_and_const_int
  ((rtx) 0, mode, ((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1), (long) 1);
       code = (code == NE ? EQ : NE);
       continue;
     }
   if (const_op == 0 && equality_comparison_p
       && (((op0)->u.fld[1]).rtx1) == (const_int_rtx[64 +1])
       && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == LSHIFTRT)
     {
       rtx shift_op = ((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
       rtx shift_count = ((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
       if (((enum rtx_code) (shift_op)->code) == NOT
    || (((enum rtx_code) (shift_op)->code) == XOR
        && ((enum rtx_code) ((((shift_op)->u.fld[1]).rtx1))->code) == CONST_INT
        && ((enum rtx_code) (shift_count)->code) == CONST_INT
        && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
        && ((((((shift_op)->u.fld[1]).rtx1))->u.hwint[0])
     == (long) 1 << ((shift_count)->u.hwint[0]))))
  {
    op0 = simplify_and_const_int
      ((rtx) 0, mode,
       gen_rtx_fmt_ee (LSHIFTRT, (mode), ((((shift_op)->u.fld[0]).rtx1)), (shift_count)),
       (long) 1);
    code = (code == NE ? EQ : NE);
    continue;
  }
     }
   break;
 case ASHIFT:
   if (((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && (((((op0)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
       && (((((((op0)->u.fld[1]).rtx1))->u.hwint[0]) + ! equality_comparison_p)
    < (8 * 4))
       && ((const_op
     & (((long) 1 << (((((op0)->u.fld[1]).rtx1))->u.hwint[0])) - 1)) == 0)
       && mode_width <= (8 * 4)
       && (nonzero_bits ((((op0)->u.fld[0]).rtx1), mode)
    & ~(mask >> ((((((op0)->u.fld[1]).rtx1))->u.hwint[0])
          + ! equality_comparison_p))) == 0)
     {
       unsigned long temp = const_op & mode_mask_array[mode];
       temp >>= (((((op0)->u.fld[1]).rtx1))->u.hwint[0]);
       op1 = gen_int_mode (temp, mode);
       op0 = (((op0)->u.fld[0]).rtx1);
       continue;
     }
   if (sign_bit_comparison_p && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && mode_width <= (8 * 4))
     {
       op0 = simplify_and_const_int ((rtx) 0, mode, (((op0)->u.fld[0]).rtx1),
         ((long) 1
          << (mode_width - 1
       - (((((op0)->u.fld[1]).rtx1))->u.hwint[0]))));
       code = (code == LT ? NE : EQ);
       continue;
     }
   if (const_op == 0 && equality_comparison_p
       && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && (unsigned long) (((((op0)->u.fld[1]).rtx1))->u.hwint[0])
   == mode_width - 1)
     {
       op0 = simplify_and_const_int ((rtx) 0, mode, (((op0)->u.fld[0]).rtx1),
         (long) 1);
       continue;
     }
   break;
 case ASHIFTRT:
   if (equality_comparison_p && const_op == 0
       && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT)
     {
       op0 = simplify_shift_const ((rtx) 0, LSHIFTRT, mode,
       (((op0)->u.fld[0]).rtx1),
       (((((op0)->u.fld[1]).rtx1))->u.hwint[0]));
       continue;
     }
   if (! unsigned_comparison_p
       && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == ASHIFT
       && (((op0)->u.fld[1]).rtx1) == ((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1)
       && (tmode = mode_for_size (mode_width - (((((op0)->u.fld[1]).rtx1))->u.hwint[0]),
      MODE_INT, 1)) != BLKmode
       && (((unsigned long) const_op
     + (mode_mask_array[tmode] >> 1) + 1)
    <= mode_mask_array[tmode]))
     {
       op0 = rtl_hooks.gen_lowpart (tmode, ((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1));
       continue;
     }
   if (! unsigned_comparison_p
       && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == PLUS
       && ((enum rtx_code) (((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
       && ((enum rtx_code) (((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == ASHIFT
       && (((op0)->u.fld[1]).rtx1) == (((((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1)
       && (tmode = mode_for_size (mode_width - (((((op0)->u.fld[1]).rtx1))->u.hwint[0]),
      MODE_INT, 1)) != BLKmode
       && (((unsigned long) const_op
     + (mode_mask_array[tmode] >> 1) + 1)
    <= mode_mask_array[tmode]))
     {
       rtx inner = (((((((((op0)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1);
       rtx add_const = ((((((op0)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
       rtx new_const = gen_binary (ASHIFTRT, ((enum machine_mode) (op0)->mode), add_const,
       (((op0)->u.fld[1]).rtx1));
       op0 = gen_binary (PLUS, tmode,
    rtl_hooks.gen_lowpart (tmode, inner),
    new_const);
       continue;
     }
 case LSHIFTRT:
   if (((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && (((((op0)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
       && (((((op0)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4)
       && mode_width <= (8 * 4)
       && (nonzero_bits ((((op0)->u.fld[0]).rtx1), mode)
    & (((long) 1 << (((((op0)->u.fld[1]).rtx1))->u.hwint[0])) - 1)) == 0
       && (((unsigned long) const_op
     + (((enum rtx_code) (op0)->code) != LSHIFTRT
        ? ((mode_mask_array[mode] >> (((((op0)->u.fld[1]).rtx1))->u.hwint[0]) >> 1)
    + 1)
        : 0))
    <= mode_mask_array[mode] >> (((((op0)->u.fld[1]).rtx1))->u.hwint[0])))
     {
       if (((enum rtx_code) (op0)->code) == LSHIFTRT)
  code = unsigned_condition (code);
       const_op <<= (((((op0)->u.fld[1]).rtx1))->u.hwint[0]);
       op1 = gen_rtx_CONST_INT (VOIDmode, (long) (const_op));
       op0 = (((op0)->u.fld[0]).rtx1);
       continue;
     }
   if (const_op == 0
       && (equality_comparison_p || sign_bit_comparison_p)
       && ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
       && (unsigned long) (((((op0)->u.fld[1]).rtx1))->u.hwint[0])
   == mode_width - 1)
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       code = (code == NE || code == GT ? LT : GE);
       continue;
     }
   break;
 default:
   break;
 }
      break;
    }
  op0 = make_compound_operation (op0, op1 == (const_int_rtx[64]) ? COMPARE : SET);
  op1 = make_compound_operation (op1, SET);
  if (((enum rtx_code) (op0)->code) == SUBREG && subreg_lowpart_p (op0)
      && mode_class[((enum machine_mode) (op0)->mode)] == MODE_INT
      && mode_class[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)] == MODE_INT
      && (code == NE || code == EQ))
    {
      if (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)])
   > ((unsigned short) mode_size[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)]))
 {
          if ((((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == REG))
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       op1 = rtl_hooks.gen_lowpart (((enum machine_mode) (op0)->mode), op1);
     }
 }
      else if ((((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)]) * 8))
  <= (8 * 4))
        && (nonzero_bits ((((op0)->u.fld[0]).rtx1),
     ((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode))
     & ~mode_mask_array[((enum machine_mode) (op0)->mode)]) == 0)
 {
   tem = rtl_hooks.gen_lowpart (((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode), op1);
   if ((nonzero_bits (tem, ((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode))
        & ~mode_mask_array[((enum machine_mode) (op0)->mode)]) == 0)
     op0 = (((op0)->u.fld[0]).rtx1), op1 = tem;
 }
    }
  mode = ((enum machine_mode) (op0)->mode);
  if (mode != VOIDmode && mode_class[mode] == MODE_INT
      && ((unsigned short) mode_size[mode]) < (0 ? 8 : 4)
      && ! have_insn_for (COMPARE, mode))
    for (tmode = mode_wider[mode];
  (tmode != VOIDmode
   && ((unsigned short) (((unsigned short) mode_size[tmode]) * 8)) <= (8 * 4));
  tmode = mode_wider[tmode])
      if (have_insn_for (COMPARE, tmode))
 {
   int zero_extended;
   zero_extended = ((code == EQ || code == NE
       || code == GEU || code == GTU
       || code == LEU || code == LTU)
      && (nonzero_bits (op0, tmode)
          & ~mode_mask_array[mode]) == 0
      && ((((enum rtx_code) (op1)->code) == CONST_INT
    || (nonzero_bits (op1, tmode)
        & ~mode_mask_array[mode]) == 0)));
   if (zero_extended
       || ((num_sign_bit_copies (op0, tmode)
     > (unsigned int) (((unsigned short) (((unsigned short) mode_size[tmode]) * 8))
         - ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))
    && (num_sign_bit_copies (op1, tmode)
        > (unsigned int) (((unsigned short) (((unsigned short) mode_size[tmode]) * 8))
     - ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))))
     {
       if (((enum rtx_code) (op0)->code) == AND
    && !have_insn_for (AND, mode))
  op0 = gen_binary (AND, tmode,
      rtl_hooks.gen_lowpart (tmode,
            (((op0)->u.fld[0]).rtx1)),
      rtl_hooks.gen_lowpart (tmode,
            (((op0)->u.fld[1]).rtx1)));
       op0 = rtl_hooks.gen_lowpart (tmode, op0);
       if (zero_extended && ((enum rtx_code) (op1)->code) == CONST_INT)
  op1 = gen_rtx_CONST_INT (VOIDmode, (long) (((op1)->u.hwint[0]) & mode_mask_array[mode]));
       op1 = rtl_hooks.gen_lowpart (tmode, op1);
       break;
     }
   if (op1 == (const_int_rtx[64]) && (code == LT || code == GE)
       && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4))
     {
       op0 = gen_binary (AND, tmode,
    rtl_hooks.gen_lowpart (tmode, op0),
    gen_rtx_CONST_INT (VOIDmode, (long) ((long) 1 << (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1)))
                                       );
       code = (code == LT) ? NE : EQ;
       break;
     }
 }
  *pop0 = op0;
  *pop1 = op1;
  return code;
}
static enum rtx_code
combine_reversed_comparison_code (rtx exp)
{
  enum rtx_code code1 = reversed_comparison_code (exp, ((void *)0));
  rtx x;
  if (code1 != UNKNOWN
      || mode_class[((enum machine_mode) ((((exp)->u.fld[0]).rtx1))->mode)] != MODE_CC)
    return code1;
  x = get_last_value ((((exp)->u.fld[0]).rtx1));
  if (!x || ((enum rtx_code) (x)->code) != COMPARE)
    return UNKNOWN;
  return reversed_comparison_code_parts (((enum rtx_code) (exp)->code),
      (((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1), ((void *)0));
}
static rtx
reversed_comparison (rtx exp, enum machine_mode mode, rtx op0, rtx op1)
{
  enum rtx_code reversed_code = combine_reversed_comparison_code (exp);
  if (reversed_code == UNKNOWN)
    return (rtx) 0;
  else
    return gen_binary (reversed_code, mode, op0, op1);
}
static void
update_table_tick (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt = (rtx_format[(int) (code)]);
  int i;
  if (code == REG)
    {
      unsigned int regno = (((x)->u.fld[0]).rtuint);
      unsigned int endregno
 = regno + (regno < 53
     ? hard_regno_nregs[regno][((enum machine_mode) (x)->mode)] : 1);
      unsigned int r;
      for (r = regno; r < endregno; r++)
 reg_stat[r].last_set_table_tick = label_tick;
      return;
    }
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    if (fmt[i] == 'e')
      {
 if (i == 0 && (((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1))))
   {
     rtx x0 = (((x)->u.fld[0]).rtx1);
     rtx x1 = (((x)->u.fld[1]).rtx1);
     if (x0 == x1)
       break;
     if ((((rtx_class[(int) (((enum rtx_code) (x1)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1)))
  && (x0 == (((x1)->u.fld[0]).rtx1) || x0 == (((x1)->u.fld[1]).rtx1)))
       break;
     if ((((rtx_class[(int) (((enum rtx_code) (x0)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1)))
  && (x1 == (((x0)->u.fld[0]).rtx1) || x1 == (((x0)->u.fld[1]).rtx1)))
       {
  update_table_tick ((((x0)->u.fld[x1 == (((x0)->u.fld[0]).rtx1) ? 1 : 0]).rtx1));
  break;
       }
   }
 update_table_tick ((((x)->u.fld[i]).rtx1));
      }
}
static void
record_value_for_reg (rtx reg, rtx insn, rtx value1)
{
  unsigned int regno = (((reg)->u.fld[0]).rtuint);
  unsigned int endregno
    = regno + (regno < 53
        ? hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)] : 1);
  unsigned int i;
  if (value1 && insn && reg_overlap_mentioned_p (reg, value1))
    {
      rtx tem;
      subst_low_cuid = ((((insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (insn) : uid_cuid[(((insn)->u.fld[0]).rtint)]);
      tem = get_last_value (reg);
      if (tem)
 {
   if ((((rtx_class[(int) (((enum rtx_code) (tem)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1)))
       && ((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == CLOBBER
       && ((enum rtx_code) ((((tem)->u.fld[1]).rtx1))->code) == CLOBBER)
     tem = (((tem)->u.fld[0]).rtx1);
   value1 = replace_rtx (copy_rtx (value1), reg, tem);
 }
    }
  for (i = regno; i < endregno; i++)
    {
      if (insn)
 reg_stat[i].last_set = insn;
      reg_stat[i].last_set_value = 0;
      reg_stat[i].last_set_mode = 0;
      reg_stat[i].last_set_nonzero_bits = 0;
      reg_stat[i].last_set_sign_bit_copies = 0;
      reg_stat[i].last_death = 0;
    }
  if (value1)
    update_table_tick (value1);
  for (i = regno; i < endregno; i++)
    {
      reg_stat[i].last_set_label = label_tick;
      if (value1 && reg_stat[i].last_set_table_tick == label_tick)
 reg_stat[i].last_set_invalid = 1;
      else
 reg_stat[i].last_set_invalid = 0;
    }
  if (value1 && ! get_last_value_validate (&value1, insn,
       reg_stat[regno].last_set_label, 0))
    {
      value1 = copy_rtx (value1);
      if (! get_last_value_validate (&value1, insn,
         reg_stat[regno].last_set_label, 1))
 value1 = 0;
    }
  reg_stat[regno].last_set_value = value1;
  if (value1)
    {
      enum machine_mode mode = ((enum machine_mode) (reg)->mode);
      subst_low_cuid = ((((insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (insn) : uid_cuid[(((insn)->u.fld[0]).rtint)]);
      reg_stat[regno].last_set_mode = mode;
      if (mode_class[mode] == MODE_INT
   && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4))
 mode = nonzero_bits_mode;
      reg_stat[regno].last_set_nonzero_bits = nonzero_bits (value1, mode);
      reg_stat[regno].last_set_sign_bit_copies
 = num_sign_bit_copies (value1, ((enum machine_mode) (reg)->mode));
    }
}
static void
record_dead_and_set_regs_1 (rtx dest, rtx setter, void *data)
{
  rtx record_dead_insn = (rtx) data;
  if (((enum rtx_code) (dest)->code) == SUBREG)
    dest = (((dest)->u.fld[0]).rtx1);
  if ((((enum rtx_code) (dest)->code) == REG))
    {
      if (((enum rtx_code) (setter)->code) == SET && dest == (((setter)->u.fld[0]).rtx1))
 record_value_for_reg (dest, record_dead_insn, (((setter)->u.fld[1]).rtx1));
      else if (((enum rtx_code) (setter)->code) == SET
        && ((enum rtx_code) ((((setter)->u.fld[0]).rtx1))->code) == SUBREG
        && ((((((setter)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == dest
        && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]) * 8)) <= (8 * (0 ? 8 : 4))
        && subreg_lowpart_p ((((setter)->u.fld[0]).rtx1)))
 record_value_for_reg (dest, record_dead_insn,
         rtl_hooks.gen_lowpart (((enum machine_mode) (dest)->mode),
             (((setter)->u.fld[1]).rtx1)));
      else
 record_value_for_reg (dest, record_dead_insn, (rtx) 0);
    }
  else if ((((enum rtx_code) (dest)->code) == MEM)
    && ! push_operand (dest, ((enum machine_mode) (dest)->mode)))
    mem_last_set = ((((record_dead_insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (record_dead_insn) : uid_cuid[(((record_dead_insn)->u.fld[0]).rtint)]);
}
static void
record_dead_and_set_regs (rtx insn)
{
  rtx link;
  unsigned int i;
  for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
    {
      if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEAD
   && (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == REG))
 {
   unsigned int regno = ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
   unsigned int endregno
     = regno + (regno < 53
         ? hard_regno_nregs[regno][((enum machine_mode) ((((link)->u.fld[0]).rtx1))->mode)]
         : 1);
   for (i = regno; i < endregno; i++)
     reg_stat[i].last_death = insn;
 }
      else if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_INC)
 record_value_for_reg ((((link)->u.fld[0]).rtx1), insn, (rtx) 0);
    }
  if (((enum rtx_code) (insn)->code) == CALL_INSN)
    {
      for (i = 0; i < 53; i++)
 if ((!!((regs_invalidated_by_call)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
   {
     reg_stat[i].last_set_value = 0;
     reg_stat[i].last_set_mode = 0;
     reg_stat[i].last_set_nonzero_bits = 0;
     reg_stat[i].last_set_sign_bit_copies = 0;
     reg_stat[i].last_death = 0;
   }
      last_call_cuid = mem_last_set = ((((insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (insn) : uid_cuid[(((insn)->u.fld[0]).rtint)]);
      return;
    }
  note_stores ((((insn)->u.fld[5]).rtx1), record_dead_and_set_regs_1, insn);
}
static void
record_promoted_value (rtx insn, rtx subreg)
{
  rtx links, set;
  unsigned int regno = ((((((subreg)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
  enum machine_mode mode = ((enum machine_mode) (subreg)->mode);
  if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) > (8 * 4))
    return;
  for (links = (((insn)->u.fld[7]).rtx1); links;)
    {
      insn = (((links)->u.fld[0]).rtx1);
      set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
      if (! set || !(((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
   || ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != regno
   || ((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode) != ((enum machine_mode) ((((subreg)->u.fld[0]).rtx1))->mode))
 {
   links = (((links)->u.fld[1]).rtx1);
   continue;
 }
      if (reg_stat[regno].last_set == insn)
 {
   if (((((subreg))->volatil) ? -1 : (subreg)->unchanging) > 0)
     reg_stat[regno].last_set_nonzero_bits &= mode_mask_array[mode];
 }
      if ((((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == REG))
 {
   regno = ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint);
   links = (((insn)->u.fld[7]).rtx1);
 }
      else
 break;
    }
}
static void
check_promoted_subreg (rtx insn, rtx x)
{
  if (((enum rtx_code) (x)->code) == SUBREG && (((x))->in_struct)
      && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
    record_promoted_value (insn, x);
  else
    {
      const char *format = (rtx_format[(int) (((enum rtx_code) (x)->code))]);
      int i, j;
      for (i = 0; i < (rtx_length[(int) (((enum rtx_code) (x)->code))]); i++)
 switch (format[i])
   {
   case 'e':
     check_promoted_subreg (insn, (((x)->u.fld[i]).rtx1));
     break;
   case 'V':
   case 'E':
     if ((((x)->u.fld[i]).rtvec1) != 0)
       for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
  check_promoted_subreg (insn, (((((x)->u.fld[i]).rtvec1))->elem[j]));
     break;
   }
    }
}
static int
get_last_value_validate (rtx *loc, rtx insn, int tick, int replace)
{
  rtx x = *loc;
  const char *fmt = (rtx_format[(int) (((enum rtx_code) (x)->code))]);
  int len = (rtx_length[(int) (((enum rtx_code) (x)->code))]);
  int i;
  if ((((enum rtx_code) (x)->code) == REG))
    {
      unsigned int regno = (((x)->u.fld[0]).rtuint);
      unsigned int endregno
 = regno + (regno < 53
     ? hard_regno_nregs[regno][((enum machine_mode) (x)->mode)] : 1);
      unsigned int j;
      for (j = regno; j < endregno; j++)
 if (reg_stat[j].last_set_invalid
     || (! (regno >= 53
     && (((reg_n_info)->data.reg[regno])->sets) == 1
     && (! bitmap_bit_p (ENTRY_BLOCK_PTR->next_bb->global_live_at_start, regno)
                                                                ))
  && reg_stat[j].last_set_label > tick))
   {
     if (replace)
       *loc = gen_rtx_fmt_e (CLOBBER, (((enum machine_mode) (x)->mode)), ((const_int_rtx[64])));
     return replace;
   }
      return 1;
    }
  else if ((((enum rtx_code) (x)->code) == MEM) && ! (((x))->unchanging)
    && ((((insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (insn) : uid_cuid[(((insn)->u.fld[0]).rtint)]) <= mem_last_set)
    {
      if (replace)
 *loc = gen_rtx_fmt_e (CLOBBER, (((enum machine_mode) (x)->mode)), ((const_int_rtx[64])));
      return replace;
    }
  for (i = 0; i < len; i++)
    {
      if (fmt[i] == 'e')
 {
   if (i == 1 && (((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1))))
     {
       rtx x0 = (((x)->u.fld[0]).rtx1);
       rtx x1 = (((x)->u.fld[1]).rtx1);
       if (x0 == x1)
  return 1;
       if ((((rtx_class[(int) (((enum rtx_code) (x0)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1)))
    && (x1 == (((x0)->u.fld[0]).rtx1) || x1 == (((x0)->u.fld[1]).rtx1)))
  return 1;
       if ((((rtx_class[(int) (((enum rtx_code) (x1)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1)))
    && (x0 == (((x1)->u.fld[0]).rtx1) || x0 == (((x1)->u.fld[1]).rtx1)))
  return
    get_last_value_validate (&(((x1)->u.fld[x0 == (((x1)->u.fld[0]).rtx1) ? 1 : 0]).rtx1)
                                   ,
        insn, tick, replace);
     }
   if (get_last_value_validate (&(((x)->u.fld[i]).rtx1), insn, tick,
           replace) == 0)
     return 0;
 }
      else if (fmt[i] == 'E')
 return 0;
    }
  return 1;
}
static rtx
get_last_value (rtx x)
{
  unsigned int regno;
  rtx value1;
  if (((enum rtx_code) (x)->code) == SUBREG
      && subreg_lowpart_p (x)
      && (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])
   <= ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]))
      && (value1 = get_last_value ((((x)->u.fld[0]).rtx1))) != 0)
    return rtl_hooks.gen_lowpart (((enum machine_mode) (x)->mode), value1);
  if (!(((enum rtx_code) (x)->code) == REG))
    return 0;
  regno = (((x)->u.fld[0]).rtuint);
  value1 = reg_stat[regno].last_set_value;
  if (value1 == 0
      || (reg_stat[regno].last_set_label != label_tick
   && (regno < 53
       || (((reg_n_info)->data.reg[regno])->sets) != 1
       || (bitmap_bit_p (ENTRY_BLOCK_PTR->next_bb->global_live_at_start, regno)
                                                           ))))
    return 0;
  if (((((reg_stat[regno].last_set)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (reg_stat[regno].last_set) : uid_cuid[(((reg_stat[regno].last_set)->u.fld[0]).rtint)]) >= subst_low_cuid)
    return 0;
  if (get_last_value_validate (&value1, reg_stat[regno].last_set,
          reg_stat[regno].last_set_label, 0))
    return value1;
  value1 = copy_rtx (value1);
  if (get_last_value_validate (&value1, reg_stat[regno].last_set,
          reg_stat[regno].last_set_label, 1))
    return value1;
  return 0;
}
static int
use_crosses_set_p (rtx x, int from_cuid)
{
  const char *fmt;
  int i;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  if (code == REG)
    {
      unsigned int regno = (((x)->u.fld[0]).rtuint);
      unsigned endreg = regno + (regno < 53
     ? hard_regno_nregs[regno][((enum machine_mode) (x)->mode)] : 1);
      if (regno == 7 && ((!(target_flags & 0x00000800)) && !(target_flags & 0x00001000)))
 return 1;
      for (; regno < endreg; regno++)
 if (reg_stat[regno].last_set
     && ((((reg_stat[regno].last_set)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (reg_stat[regno].last_set) : uid_cuid[(((reg_stat[regno].last_set)->u.fld[0]).rtint)]) > from_cuid)
   return 1;
      return 0;
    }
  if (code == MEM && mem_last_set > from_cuid)
    return 1;
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'E')
 {
   int j;
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     if (use_crosses_set_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), from_cuid))
       return 1;
 }
      else if (fmt[i] == 'e'
        && use_crosses_set_p ((((x)->u.fld[i]).rtx1), from_cuid))
 return 1;
    }
  return 0;
}
static unsigned int reg_dead_regno, reg_dead_endregno;
static int reg_dead_flag;
static void
reg_dead_at_p_1 (rtx dest, rtx x, void *data )
{
  unsigned int regno, endregno;
  if (!(((enum rtx_code) (dest)->code) == REG))
    return;
  regno = (((dest)->u.fld[0]).rtuint);
  endregno = regno + (regno < 53
        ? hard_regno_nregs[regno][((enum machine_mode) (dest)->mode)] : 1);
  if (reg_dead_endregno > regno && reg_dead_regno < endregno)
    reg_dead_flag = (((enum rtx_code) (x)->code) == CLOBBER) ? 1 : -1;
}
static int
reg_dead_at_p (rtx reg, rtx insn)
{
  basic_block block;
  unsigned int i;
  reg_dead_regno = (((reg)->u.fld[0]).rtuint);
  reg_dead_endregno = reg_dead_regno + (reg_dead_regno < 53
     ? hard_regno_nregs[reg_dead_regno]
         [((enum machine_mode) (reg)->mode)]
     : 1);
  reg_dead_flag = 0;
  if (reg_dead_regno < 53)
    {
      for (i = reg_dead_regno; i < reg_dead_endregno; i++)
 if (!fixed_regs[i] && (!!((newpat_used_regs)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
   return 0;
    }
  for (; insn && ((enum rtx_code) (insn)->code) != CODE_LABEL && ((enum rtx_code) (insn)->code) != BARRIER;
       insn = prev_nonnote_insn (insn))
    {
      note_stores ((((insn)->u.fld[5]).rtx1), reg_dead_at_p_1, ((void *)0));
      if (reg_dead_flag)
 return reg_dead_flag == 1 ? 1 : 0;
      if (find_regno_note (insn, REG_DEAD, reg_dead_regno))
 return 1;
    }
  if (insn == 0)
    block = ENTRY_BLOCK_PTR->next_bb;
  else
    {
      for (block = ENTRY_BLOCK_PTR->next_bb; block != EXIT_BLOCK_PTR; block = block->next_bb)
 if (insn == (block)->head_)
   break;
      if (block == EXIT_BLOCK_PTR)
 return 0;
    }
  for (i = reg_dead_regno; i < reg_dead_endregno; i++)
    if (bitmap_bit_p (block->global_live_at_start, i))
      return 0;
  return 1;
}
static void
mark_used_regs_combine (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  unsigned int regno;
  int i;
  switch (code)
    {
    case LABEL_REF:
    case SYMBOL_REF:
    case CONST_INT:
    case CONST:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case PC:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
    case ASM_INPUT:
      return;
    case CLOBBER:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
 mark_used_regs_combine (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      return;
    case REG:
      regno = (((x)->u.fld[0]).rtuint);
      if (regno < 53)
 {
   unsigned int endregno, r;
   if (regno == 7
       || regno == 6
       || (regno == 16 && fixed_regs[regno])
       || regno == 20)
     return;
   endregno = regno + hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
   for (r = regno; r < endregno; r++)
     ((newpat_used_regs)[(r) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((r) % ((unsigned) (8 * 4))));
 }
      return;
    case SET:
      {
 rtx testreg = (((x)->u.fld[0]).rtx1);
 while (((enum rtx_code) (testreg)->code) == SUBREG
        || ((enum rtx_code) (testreg)->code) == ZERO_EXTRACT
        || ((enum rtx_code) (testreg)->code) == SIGN_EXTRACT
        || ((enum rtx_code) (testreg)->code) == STRICT_LOW_PART)
   testreg = (((testreg)->u.fld[0]).rtx1);
 if ((((enum rtx_code) (testreg)->code) == MEM))
   mark_used_regs_combine ((((testreg)->u.fld[0]).rtx1));
 mark_used_regs_combine ((((x)->u.fld[1]).rtx1));
      }
      return;
    default:
      break;
    }
  {
    const char *fmt = (rtx_format[(int) (code)]);
    for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
      {
 if (fmt[i] == 'e')
   mark_used_regs_combine ((((x)->u.fld[i]).rtx1));
 else if (fmt[i] == 'E')
   {
     int j;
     for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
       mark_used_regs_combine ((((((x)->u.fld[i]).rtvec1))->elem[j]));
   }
      }
  }
}
rtx
remove_death (unsigned int regno, rtx insn)
{
  rtx note = find_regno_note (insn, REG_DEAD, regno);
  if (note)
    {
      (((reg_n_info)->data.reg[regno])->deaths)--;
      remove_note (insn, note);
    }
  return note;
}
static void
move_deaths (rtx x, rtx maybe_kill_insn, int from_cuid, rtx to_insn,
      rtx *pnotes)
{
  const char *fmt;
  int len, i;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  if (code == REG)
    {
      unsigned int regno = (((x)->u.fld[0]).rtuint);
      rtx where_dead = reg_stat[regno].last_death;
      rtx before_dead, after_dead;
      if (maybe_kill_insn && reg_set_p (x, maybe_kill_insn)
   && ! reg_referenced_p (x, maybe_kill_insn))
 return;
      before_dead = where_dead;
      while (before_dead && (((before_dead)->u.fld[0]).rtint) > max_uid_cuid)
 before_dead = (((before_dead)->u.fld[1]).rtx1);
      after_dead = where_dead;
      while (after_dead && (((after_dead)->u.fld[0]).rtint) > max_uid_cuid)
 after_dead = (((after_dead)->u.fld[2]).rtx1);
      if (before_dead && after_dead
   && ((((before_dead)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (before_dead) : uid_cuid[(((before_dead)->u.fld[0]).rtint)]) >= from_cuid
   && (((((after_dead)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (after_dead) : uid_cuid[(((after_dead)->u.fld[0]).rtint)]) < ((((to_insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (to_insn) : uid_cuid[(((to_insn)->u.fld[0]).rtint)])
       || (where_dead != after_dead
    && ((((after_dead)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (after_dead) : uid_cuid[(((after_dead)->u.fld[0]).rtint)]) == ((((to_insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (to_insn) : uid_cuid[(((to_insn)->u.fld[0]).rtint)]))))
 {
   rtx note = remove_death (regno, where_dead);
   if (note != 0 && regno < 53
       && (((unsigned short) mode_size[((enum machine_mode) ((((note)->u.fld[0]).rtx1))->mode)])
    > ((unsigned short) mode_size[((enum machine_mode) (x)->mode)])))
     {
       unsigned int deadregno = ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
       unsigned int deadend
  = (deadregno + hard_regno_nregs[deadregno]
            [((enum machine_mode) ((((note)->u.fld[0]).rtx1))->mode)]);
       unsigned int ourend
  = regno + hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
       unsigned int i;
       for (i = deadregno; i < deadend; i++)
  if (i < regno || i >= ourend)
    (((where_dead)->u.fld[8]).rtx1)
      = gen_rtx_fmt_ee (EXPR_LIST, (REG_DEAD), ((cfun->emit->x_regno_reg_rtx)[i]), ((((where_dead)->u.fld[8]).rtx1)))
                             ;
     }
   else if ((note == 0
      || (note != 0
   && (((unsigned short) mode_size[((enum machine_mode) ((((note)->u.fld[0]).rtx1))->mode)])
       < ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]))))
     && regno < 53
     && hard_regno_nregs[regno][((enum machine_mode) (x)->mode)] > 1)
     {
       unsigned int ourend
  = regno + hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
       unsigned int i, offset;
       rtx oldnotes = 0;
       if (note)
  offset = hard_regno_nregs[regno][((enum machine_mode) ((((note)->u.fld[0]).rtx1))->mode)];
       else
  offset = 1;
       for (i = regno + offset; i < ourend; i++)
  move_deaths ((cfun->emit->x_regno_reg_rtx)[i],
        maybe_kill_insn, from_cuid, to_insn, &oldnotes);
     }
   if (note != 0 && ((enum machine_mode) ((((note)->u.fld[0]).rtx1))->mode) == ((enum machine_mode) (x)->mode))
     {
       (((note)->u.fld[1]).rtx1) = *pnotes;
       *pnotes = note;
     }
   else
     *pnotes = gen_rtx_fmt_ee (EXPR_LIST, (REG_DEAD), (x), (*pnotes));
   (((reg_n_info)->data.reg[regno])->deaths)++;
 }
      return;
    }
  else if (((enum rtx_code) (x)->code) == SET)
    {
      rtx dest = (((x)->u.fld[0]).rtx1);
      move_deaths ((((x)->u.fld[1]).rtx1), maybe_kill_insn, from_cuid, to_insn, pnotes);
      if (((enum rtx_code) (dest)->code) == ZERO_EXTRACT
   || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART
   || (((enum rtx_code) (dest)->code) == SUBREG
       && (((((unsigned short) mode_size[((enum machine_mode) (dest)->mode)])
      + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))
    == ((((unsigned short) mode_size[((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode)])
         + (0 ? 8 : 4) - 1) / (0 ? 8 : 4)))))
 {
   move_deaths (dest, maybe_kill_insn, from_cuid, to_insn, pnotes);
   return;
 }
      if (((enum rtx_code) (dest)->code) == SUBREG)
 dest = (((dest)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (dest)->code) == MEM))
 move_deaths ((((dest)->u.fld[0]).rtx1), maybe_kill_insn, from_cuid,
       to_insn, pnotes);
      return;
    }
  else if (((enum rtx_code) (x)->code) == CLOBBER)
    return;
  len = (rtx_length[(int) (code)]);
  fmt = (rtx_format[(int) (code)]);
  for (i = 0; i < len; i++)
    {
      if (fmt[i] == 'E')
 {
   int j;
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     move_deaths ((((((x)->u.fld[i]).rtvec1))->elem[j]), maybe_kill_insn, from_cuid,
    to_insn, pnotes);
 }
      else if (fmt[i] == 'e')
 move_deaths ((((x)->u.fld[i]).rtx1), maybe_kill_insn, from_cuid, to_insn, pnotes);
    }
}
static int
reg_bitfield_target_p (rtx x, rtx body)
{
  int i;
  if (((enum rtx_code) (body)->code) == SET)
    {
      rtx dest = (((body)->u.fld[0]).rtx1);
      rtx target;
      unsigned int regno, tregno, endregno, endtregno;
      if (((enum rtx_code) (dest)->code) == ZERO_EXTRACT)
 target = (((dest)->u.fld[0]).rtx1);
      else if (((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
 target = ((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      else
 return 0;
      if (((enum rtx_code) (target)->code) == SUBREG)
 target = (((target)->u.fld[0]).rtx1);
      if (!(((enum rtx_code) (target)->code) == REG))
 return 0;
      tregno = (((target)->u.fld[0]).rtuint), regno = (((x)->u.fld[0]).rtuint);
      if (tregno >= 53 || regno >= 53)
 return target == x;
      endtregno = tregno + hard_regno_nregs[tregno][((enum machine_mode) (target)->mode)];
      endregno = regno + hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
      return endregno > tregno && regno < endtregno;
    }
  else if (((enum rtx_code) (body)->code) == PARALLEL)
    for (i = (((((body)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
      if (reg_bitfield_target_p (x, (((((body)->u.fld[0]).rtvec1))->elem[i])))
 return 1;
  return 0;
}
static void
distribute_notes (rtx notes, rtx from_insn, rtx i3, rtx i2)
{
  rtx note, next_note;
  rtx tem;
  for (note = notes; note; note = next_note)
    {
      rtx place = 0, place2 = 0;
      if ((((note)->u.fld[0]).rtx1) && (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG)
   && ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
 (((note)->u.fld[0]).rtx1) = (cfun->emit->x_regno_reg_rtx)[((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)];
      next_note = (((note)->u.fld[1]).rtx1);
      switch (((enum reg_note) ((enum machine_mode) (note)->mode)))
 {
 case REG_BR_PROB:
 case REG_BR_PRED:
   place = i3;
   break;
 case REG_VALUE_PROFILE:
   break;
 case REG_VTABLE_REF:
   place = i3;
   break;
 case REG_NON_LOCAL_GOTO:
   if (((enum rtx_code) (i3)->code) == JUMP_INSN)
     place = i3;
   else if (i2 && ((enum rtx_code) (i2)->code) == JUMP_INSN)
     place = i2;
   else
     fancy_abort ("gcc.c", 417784, "?");
   break;
 case REG_EH_REGION:
   if (((enum rtx_code) (i3)->code) == CALL_INSN)
     place = i3;
   else if (i2 && ((enum rtx_code) (i2)->code) == CALL_INSN)
     place = i2;
   else if (flag_non_call_exceptions)
     {
       if (may_trap_p (i3))
  place = i3;
       else if (i2 && may_trap_p (i2))
  place = i2;
     }
   else
     fancy_abort ("gcc.c", 417804, "?");
   break;
 case REG_ALWAYS_RETURN:
 case REG_NORETURN:
 case REG_SETJMP:
   if (((enum rtx_code) (i3)->code) == CALL_INSN)
     place = i3;
   else if (i2 && ((enum rtx_code) (i2)->code) == CALL_INSN)
     place = i2;
   else
     fancy_abort ("gcc.c", 417817, "?");
   break;
 case REG_UNUSED:
   if (reg_set_p ((((note)->u.fld[0]).rtx1), (((i3)->u.fld[5]).rtx1)))
     {
       if (from_insn != i3)
  break;
       if (! ((((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG)
       ? find_regno_note (i3, REG_UNUSED, ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint))
       : find_reg_note (i3, REG_UNUSED, (((note)->u.fld[0]).rtx1))))
  place = i3;
     }
   else if (reg_referenced_p ((((note)->u.fld[0]).rtx1), (((i3)->u.fld[5]).rtx1))
     && ! ((((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG)
    ? find_regno_note (i3, REG_DEAD,
         ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint))
    : find_reg_note (i3, REG_DEAD, (((note)->u.fld[0]).rtx1))))
     {
       ((note)->mode = ((enum machine_mode) (REG_DEAD)));
       place = i3;
     }
   break;
 case REG_EQUAL:
 case REG_EQUIV:
 case REG_NOALIAS:
   if (from_insn == i3
       && ((((note)->u.fld[0]).rtx1) == 0 || ((rtx_class[(int) (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == CONST_VECTOR)))
     place = i3;
   break;
 case REG_INC:
 case REG_NO_CONFLICT:
   if (reg_mentioned_p ((((note)->u.fld[0]).rtx1), (((i3)->u.fld[5]).rtx1)))
     place = i3;
   if (i2 && reg_mentioned_p ((((note)->u.fld[0]).rtx1), (((i2)->u.fld[5]).rtx1)))
     {
       if (place)
  place2 = i2;
       else
  place = i2;
     }
   break;
 case REG_LABEL:
   if (reg_mentioned_p ((((note)->u.fld[0]).rtx1), (((i3)->u.fld[5]).rtx1))
       || ((tem = find_reg_note (i3, REG_EQUAL, (rtx) 0))
    && ((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == LABEL_REF
    && ((((((tem)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (((note)->u.fld[0]).rtx1)))
     place = i3;
   if (i2
       && (reg_mentioned_p ((((note)->u.fld[0]).rtx1), (((i2)->u.fld[5]).rtx1))
    || ((tem = find_reg_note (i2, REG_EQUAL, (rtx) 0))
        && ((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == LABEL_REF
        && ((((((tem)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (((note)->u.fld[0]).rtx1))))
     {
       if (place)
  place2 = i2;
       else
  place = i2;
     }
   if (place && ((enum rtx_code) (place)->code) == JUMP_INSN && (((place)->u.fld[9]).rtx1))
     {
       if ((((place)->u.fld[9]).rtx1) != (((note)->u.fld[0]).rtx1))
  fancy_abort ("gcc.c", 417925, "?");
       if (((enum rtx_code) ((((place)->u.fld[9]).rtx1))->code) == CODE_LABEL)
  ((((((place)->u.fld[9]).rtx1))->u.fld[4]).rtint)--;
       place = 0;
     }
   if (place2 && ((enum rtx_code) (place2)->code) == JUMP_INSN && (((place2)->u.fld[9]).rtx1))
     {
       if ((((place2)->u.fld[9]).rtx1) != (((note)->u.fld[0]).rtx1))
  fancy_abort ("gcc.c", 417933, "?");
       if (((enum rtx_code) ((((place2)->u.fld[9]).rtx1))->code) == CODE_LABEL)
  ((((((place2)->u.fld[9]).rtx1))->u.fld[4]).rtint)--;
       place2 = 0;
     }
   break;
 case REG_NONNEG:
   break;
 case REG_RETVAL:
   if (((enum rtx_code) (from_insn)->code) != NOTE)
     place = from_insn;
   else
     {
       tem = find_reg_note ((((note)->u.fld[0]).rtx1), REG_LIBCALL, (rtx) 0);
       place = prev_real_insn (from_insn);
       if (tem && place)
  (((tem)->u.fld[0]).rtx1) = place;
       else if ((((note)->u.fld[0]).rtx1) == from_insn)
  tem = place = 0;
       else if (! tem)
  place = 0;
     }
   break;
 case REG_LIBCALL:
   if (((enum rtx_code) (from_insn)->code) != NOTE)
     place = from_insn;
   else
     {
       tem = find_reg_note ((((note)->u.fld[0]).rtx1), REG_RETVAL, (rtx) 0);
       place = next_real_insn (from_insn);
       if (tem && place)
  (((tem)->u.fld[0]).rtx1) = place;
       else if ((((note)->u.fld[0]).rtx1) == from_insn)
  tem = place = 0;
       else if (! tem)
  place = 0;
     }
   break;
 case REG_DEAD:
   if (from_insn
       && ((enum rtx_code) (from_insn)->code) == CALL_INSN
       && find_reg_fusage (from_insn, USE, (((note)->u.fld[0]).rtx1)))
     place = from_insn;
   else if (reg_referenced_p ((((note)->u.fld[0]).rtx1), (((i3)->u.fld[5]).rtx1)))
     place = i3;
   else if (i2 != 0 && next_nonnote_insn (i2) == i3
     && reg_referenced_p ((((note)->u.fld[0]).rtx1), (((i2)->u.fld[5]).rtx1)))
     place = i2;
   if (place == 0)
     {
       basic_block bb = this_basic_block;
       for (tem = (((i3)->u.fld[1]).rtx1); place == 0; tem = (((tem)->u.fld[1]).rtx1))
  {
    if (! ((((enum rtx_code) (tem)->code) == INSN) || (((enum rtx_code) (tem)->code) == JUMP_INSN) || (((enum rtx_code) (tem)->code) == CALL_INSN)))
      {
        if (tem == (bb)->head_)
   break;
        continue;
      }
    if ((((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53
         || !global_regs[((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])
        && reg_set_p ((((note)->u.fld[0]).rtx1), (((tem)->u.fld[5]).rtx1)))
      {
        rtx set = (((((enum rtx_code) (tem)->code) == INSN) || (((enum rtx_code) (tem)->code) == JUMP_INSN) || (((enum rtx_code) (tem)->code) == CALL_INSN)) ? (((enum rtx_code) ((((tem)->u.fld[5]).rtx1))->code) == SET ? (((tem)->u.fld[5]).rtx1) : single_set_2 (tem, (((tem)->u.fld[5]).rtx1))) : (rtx) 0);
        rtx inner_dest = 0;
        if (set != 0)
   for (inner_dest = (((set)->u.fld[0]).rtx1);
        (((enum rtx_code) (inner_dest)->code) == STRICT_LOW_PART
         || ((enum rtx_code) (inner_dest)->code) == SUBREG
         || ((enum rtx_code) (inner_dest)->code) == ZERO_EXTRACT);
        inner_dest = (((inner_dest)->u.fld[0]).rtx1))
     ;
        if (set != 0 && ! side_effects_p ((((set)->u.fld[1]).rtx1))
     && rtx_equal_p ((((note)->u.fld[0]).rtx1), inner_dest)
     )
   {
     rtx old_notes = (((tem)->u.fld[8]).rtx1);
     (((tem)->u.fld[5]).rtx1) = (global_rtl[GR_PC]);
     (((tem)->u.fld[8]).rtx1) = ((void *)0);
     distribute_notes (old_notes, tem, tem, (rtx) 0);
     distribute_links ((((tem)->u.fld[7]).rtx1));
     (((tem)->code = (NOTE)), (((tem)->u.fld[4]).rtstr) = 0, (((tem)->u.fld[5]).rtint) = NOTE_INSN_DELETED);
   }
        else
   {
     ((note)->mode = ((enum machine_mode) (REG_UNUSED)));
     if (! find_regno_note (tem, REG_UNUSED,
       ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))
       place = tem;
     break;
   }
      }
    else if (reg_referenced_p ((((note)->u.fld[0]).rtx1), (((tem)->u.fld[5]).rtx1))
      || (((enum rtx_code) (tem)->code) == CALL_INSN
          && find_reg_fusage (tem, USE, (((note)->u.fld[0]).rtx1))))
      {
        place = tem;
        if (i2 && (((place)->u.fld[0]).rtint) <= max_uid_cuid
     && ((((place)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (place) : uid_cuid[(((place)->u.fld[0]).rtint)]) > ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)])
     && from_insn
     && ((((from_insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (from_insn) : uid_cuid[(((from_insn)->u.fld[0]).rtint)]) > ((((i2)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (i2) : uid_cuid[(((i2)->u.fld[0]).rtint)])
     && reg_referenced_p ((((note)->u.fld[0]).rtx1), (((i2)->u.fld[5]).rtx1)))
   {
     rtx links = (((place)->u.fld[7]).rtx1);
     (((place)->u.fld[7]).rtx1) = 0;
     distribute_links (links);
   }
        break;
      }
    if (tem == (bb)->head_)
      break;
  }
       if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD && place == 0
    && bitmap_bit_p (bb->global_live_at_start, ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint))
                                 )
  ((refresh_blocks)->elms [(this_basic_block->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (this_basic_block->index) % ((unsigned) (8 * 4)));
     }
   if (place && ((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD)
     {
       unsigned int regno = ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
       if (noop_move_p (place))
  ((refresh_blocks)->elms [(this_basic_block->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (this_basic_block->index) % ((unsigned) (8 * 4)));
       if (dead_or_set_p (place, (((note)->u.fld[0]).rtx1))
    || reg_bitfield_target_p ((((note)->u.fld[0]).rtx1), (((place)->u.fld[5]).rtx1)))
  {
    if (reg_stat[regno].last_death != place)
      reg_stat[regno].last_death = 0;
    place = 0;
  }
       else
  reg_stat[regno].last_death = place;
       if (place && regno < 53
    && hard_regno_nregs[regno][((enum machine_mode) ((((note)->u.fld[0]).rtx1))->mode)] > 1)
  {
    unsigned int endregno
      = regno + hard_regno_nregs[regno]
           [((enum machine_mode) ((((note)->u.fld[0]).rtx1))->mode)];
    int all_used = 1;
    unsigned int i;
    for (i = regno; i < endregno; i++)
      if ((! refers_to_regno_p (i, i + 1, (((place)->u.fld[5]).rtx1), 0)
    && ! find_regno_fusage (place, USE, i))
   || dead_or_set_regno_p (place, i))
        all_used = 0;
    if (! all_used)
      {
        for (i = regno; i < endregno;
      i += hard_regno_nregs[i][reg_raw_mode[i]])
   {
     rtx piece = (cfun->emit->x_regno_reg_rtx)[i];
     basic_block bb = this_basic_block;
     if (! dead_or_set_p (place, piece)
         && ! reg_bitfield_target_p (piece,
         (((place)->u.fld[5]).rtx1)))
       {
         rtx new_note
    = gen_rtx_fmt_ee (EXPR_LIST, (REG_DEAD), (piece), ((rtx) 0));
         distribute_notes (new_note, place, place,
      (rtx) 0);
       }
     else if (! refers_to_regno_p (i, i + 1,
       (((place)->u.fld[5]).rtx1), 0)
       && ! find_regno_fusage (place, USE, i))
       for (tem = (((place)->u.fld[1]).rtx1); ;
     tem = (((tem)->u.fld[1]).rtx1))
         {
    if (! ((((enum rtx_code) (tem)->code) == INSN) || (((enum rtx_code) (tem)->code) == JUMP_INSN) || (((enum rtx_code) (tem)->code) == CALL_INSN)))
      {
        if (tem == (bb)->head_)
          {
     ((refresh_blocks)->elms [(this_basic_block->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (this_basic_block->index) % ((unsigned) (8 * 4)))
                               ;
     break;
          }
        continue;
      }
    if (dead_or_set_p (tem, piece)
        || reg_bitfield_target_p (piece,
             (((tem)->u.fld[5]).rtx1)))
      {
        (((tem)->u.fld[8]).rtx1)
          = gen_rtx_fmt_ee (EXPR_LIST, (REG_UNUSED), (piece), ((((tem)->u.fld[8]).rtx1)))
                          ;
        break;
      }
         }
   }
        place = 0;
      }
  }
     }
   break;
 default:
   fancy_abort ("gcc.c", 418264, "?");
 }
      if (place)
 {
   (((note)->u.fld[1]).rtx1) = (((place)->u.fld[8]).rtx1);
   (((place)->u.fld[8]).rtx1) = note;
 }
      else if ((((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD
  || ((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_UNUSED)
        && (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG))
 (((reg_n_info)->data.reg[((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])->deaths)--;
      if (place2)
 {
   if ((((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD
        || ((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_UNUSED)
       && (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG))
     (((reg_n_info)->data.reg[((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])->deaths)++;
   (((place2)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (((enum rtx_code) (note)->code),
            ((enum reg_note) ((enum machine_mode) (note)->mode)),
            (((note)->u.fld[0]).rtx1),
            (((place2)->u.fld[8]).rtx1));
 }
    }
}
static void
distribute_links (rtx links)
{
  rtx link, next_link;
  for (link = links; link; link = next_link)
    {
      rtx place = 0;
      rtx insn;
      rtx set, reg;
      next_link = (((link)->u.fld[1]).rtx1);
      if (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == NOTE
   || (set = (((((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == INSN) || (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == JUMP_INSN) || (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == CALL_INSN)) ? (((enum rtx_code) (((((((link)->u.fld[0]).rtx1))->u.fld[5]).rtx1))->code) == SET ? ((((((link)->u.fld[0]).rtx1))->u.fld[5]).rtx1) : single_set_2 ((((link)->u.fld[0]).rtx1), ((((((link)->u.fld[0]).rtx1))->u.fld[5]).rtx1))) : (rtx) 0)) == 0)
 continue;
      reg = (((set)->u.fld[0]).rtx1);
      while (((enum rtx_code) (reg)->code) == SUBREG || ((enum rtx_code) (reg)->code) == ZERO_EXTRACT
      || ((enum rtx_code) (reg)->code) == SIGN_EXTRACT
      || ((enum rtx_code) (reg)->code) == STRICT_LOW_PART)
 reg = (((reg)->u.fld[0]).rtx1);
      for (insn = ((((((link)->u.fld[0]).rtx1))->u.fld[2]).rtx1);
    (insn && (this_basic_block->next_bb == EXIT_BLOCK_PTR
       || (this_basic_block->next_bb)->head_ != insn));
    insn = (((insn)->u.fld[2]).rtx1))
 if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && reg_overlap_mentioned_p (reg, (((insn)->u.fld[5]).rtx1)))
   {
     if (reg_referenced_p (reg, (((insn)->u.fld[5]).rtx1)))
       place = insn;
     break;
   }
 else if (((enum rtx_code) (insn)->code) == CALL_INSN
   && find_reg_fusage (insn, USE, reg))
   {
     place = insn;
     break;
   }
 else if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && reg_set_p (reg, insn))
   break;
      if (place)
 {
   rtx link2;
   for (link2 = (((place)->u.fld[7]).rtx1); link2; link2 = (((link2)->u.fld[1]).rtx1))
     if ((((link2)->u.fld[0]).rtx1) == (((link)->u.fld[0]).rtx1))
       break;
   if (link2 == 0)
     {
       (((link)->u.fld[1]).rtx1) = (((place)->u.fld[7]).rtx1);
       (((place)->u.fld[7]).rtx1) = link;
       if (added_links_insn == 0
    || ((((added_links_insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (added_links_insn) : uid_cuid[(((added_links_insn)->u.fld[0]).rtint)]) > ((((place)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (place) : uid_cuid[(((place)->u.fld[0]).rtint)]))
  added_links_insn = place;
     }
 }
    }
}
static int
unmentioned_reg_p_1 (rtx *loc, void *expr)
{
  rtx x = *loc;
  if (x != (rtx) 0
      && ((((enum rtx_code) (x)->code) == REG) || (((enum rtx_code) (x)->code) == MEM))
      && ! reg_mentioned_p (x, (rtx) expr))
    return 1;
  return 0;
}
static unsigned char
unmentioned_reg_p (rtx equiv, rtx expr)
{
  return for_each_rtx (&equiv, unmentioned_reg_p_1, expr);
}
static int
insn_cuid (rtx insn)
{
  while (insn != 0 && (((insn)->u.fld[0]).rtint) > max_uid_cuid
  && ((enum rtx_code) (insn)->code) == INSN && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE)
    insn = (((insn)->u.fld[2]).rtx1);
  if ((((insn)->u.fld[0]).rtint) > max_uid_cuid)
    fancy_abort ("gcc.c", 418421, "?");
  return ((((insn)->u.fld[0]).rtint) > max_uid_cuid ? insn_cuid (insn) : uid_cuid[(((insn)->u.fld[0]).rtint)]);
}
void
dump_combine_stats (FILE *file)
{
  fnotice
    (file,
     ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n;; %d successes.\n\n",
     combine_attempts, combine_merges, combine_extras, combine_successes);
}
void
dump_combine_total_stats (FILE *file)
{
  fnotice
    (file,
     "\n;; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n;; %d successes.\n",
     total_attempts, total_merges, total_extras, total_successes);
}
struct conflict_graph_arc_def
{
  struct conflict_graph_arc_def *smaller_next;
  struct conflict_graph_arc_def *larger_next;
  int smaller;
  int larger;
};
typedef struct conflict_graph_arc_def *conflict_graph_arc;
typedef const struct conflict_graph_arc_def *const_conflict_graph_arc;
struct conflict_graph_def
{
  htab_t arc_hash_table;
  int num_regs;
  conflict_graph_arc *neighbor_heads;
  struct obstack arc_obstack;
};
static hashval_t arc_hash (const void *);
static int arc_eq (const void *, const void *);
static int print_conflict (int, int, void *);
static void mark_reg_conflict (rtx, rtx, void *);
static hashval_t
arc_hash (const void *arcp)
{
  const_conflict_graph_arc arc = (const_conflict_graph_arc) arcp;
  return ((arc->larger) * ((arc->larger) - 1) / 2 + (arc->smaller));
}
static int
arc_eq (const void *arcp1, const void *arcp2)
{
  const_conflict_graph_arc arc1 = (const_conflict_graph_arc) arcp1;
  const_conflict_graph_arc arc2 = (const_conflict_graph_arc) arcp2;
  return arc1->smaller == arc2->smaller && arc1->larger == arc2->larger;
}
conflict_graph
conflict_graph_new (int num_regs)
{
  conflict_graph graph = xmalloc (sizeof (struct conflict_graph_def));
  graph->num_regs = num_regs;
  graph->arc_hash_table
    = htab_create (64, &arc_hash, &arc_eq, ((void *)0));
  _obstack_begin ((&graph->arc_obstack), 0, 0, (void *(*) (long)) ((void *(*) (long)) xmalloc), (void (*) (void *)) ((void (*) (void *)) free));
  graph->neighbor_heads = xcalloc (num_regs, sizeof (conflict_graph_arc));
  return graph;
}
void
conflict_graph_delete (conflict_graph graph)
{
  ( (&graph->arc_obstack)->temp = (char *) (((void *)0)) - (char *) (&graph->arc_obstack)->chunk, (((&graph->arc_obstack)->temp > 0 && (&graph->arc_obstack)->temp < (&graph->arc_obstack)->chunk_limit - (char *) (&graph->arc_obstack)->chunk) ? (int) ((&graph->arc_obstack)->next_free = (&graph->arc_obstack)->object_base = (&graph->arc_obstack)->temp + (char *) (&graph->arc_obstack)->chunk) : (((obstack_free) ((&graph->arc_obstack), (&graph->arc_obstack)->temp + (char *) (&graph->arc_obstack)->chunk), 0), 0)));
  htab_delete (graph->arc_hash_table);
  free (graph->neighbor_heads);
  free (graph);
}
int
conflict_graph_add (conflict_graph graph, int reg1, int reg2)
{
  int smaller = ((reg1) < (reg2) ? (reg1) : (reg2));
  int larger = ((reg1) > (reg2) ? (reg1) : (reg2));
  struct conflict_graph_arc_def dummy;
  conflict_graph_arc arc;
  void **slot;
  if (reg1 == reg2)
    fancy_abort ("gcc.c", 418627, "?");
  dummy.smaller = smaller;
  dummy.larger = larger;
  slot = htab_find_slot (graph->arc_hash_table, (void *) &dummy, INSERT);
  if (*slot != ((void *)0))
    return 0;
  arc
    = (( ((&graph->arc_obstack))->temp = ((sizeof (struct conflict_graph_arc_def))), ((((&graph->arc_obstack))->chunk_limit - ((&graph->arc_obstack))->next_free < ((&graph->arc_obstack))->temp) ? (_obstack_newchunk (((&graph->arc_obstack)), ((&graph->arc_obstack))->temp), 0) : 0), (((&graph->arc_obstack))->next_free += (((&graph->arc_obstack))->temp))), ( (((&graph->arc_obstack))->next_free == ((&graph->arc_obstack))->object_base ? ((((&graph->arc_obstack))->maybe_empty_object = 1), 0) : 0), ((&graph->arc_obstack))->temp = ((((&graph->arc_obstack))->object_base) - (char *) 0), ((&graph->arc_obstack))->next_free = (((((((&graph->arc_obstack))->next_free) - (char *) 0)+((&graph->arc_obstack))->alignment_mask) & ~ (((&graph->arc_obstack))->alignment_mask)) + (char *) 0), ((((&graph->arc_obstack))->next_free - (char *) ((&graph->arc_obstack))->chunk > ((&graph->arc_obstack))->chunk_limit - (char *) ((&graph->arc_obstack))->chunk) ? (((&graph->arc_obstack))->next_free = ((&graph->arc_obstack))->chunk_limit) : 0), ((&graph->arc_obstack))->object_base = ((&graph->arc_obstack))->next_free, ((((&graph->arc_obstack))->temp) + (char *) 0)))
                                              ;
  arc->smaller = smaller;
  arc->larger = larger;
  arc->smaller_next = graph->neighbor_heads[smaller];
  graph->neighbor_heads[smaller] = arc;
  arc->larger_next = graph->neighbor_heads[larger];
  graph->neighbor_heads[larger] = arc;
  *slot = (void *) arc;
  return 1;
}
int
conflict_graph_conflict_p (conflict_graph graph, int reg1, int reg2)
{
  struct conflict_graph_arc_def arc;
  arc.smaller = ((reg1) < (reg2) ? (reg1) : (reg2));
  arc.larger = ((reg1) > (reg2) ? (reg1) : (reg2));
  return htab_find (graph->arc_hash_table, (void *) &arc) != ((void *)0);
}
void
conflict_graph_enum (conflict_graph graph, int reg,
       conflict_graph_enum_fn enum_fn, void *extra)
{
  conflict_graph_arc arc = graph->neighbor_heads[reg];
  while (arc != ((void *)0))
    {
      if ((*enum_fn) (arc->smaller, arc->larger, extra))
 break;
      if (reg < arc->larger)
 arc = arc->smaller_next;
      else
 arc = arc->larger_next;
    }
}
void
conflict_graph_merge_regs (conflict_graph graph, int target, int src)
{
  conflict_graph_arc arc = graph->neighbor_heads[src];
  if (target == src)
    return;
  while (arc != ((void *)0))
    {
      int other = arc->smaller;
      if (other == src)
 other = arc->larger;
      conflict_graph_add (graph, target, other);
      if (src < arc->larger)
 arc = arc->smaller_next;
      else
 arc = arc->larger_next;
    }
}
struct print_context
{
  FILE *fp;
  int reg;
  int started;
};
static int
print_conflict (int reg1, int reg2, void *contextp)
{
  struct print_context *context = (struct print_context *) contextp;
  int reg;
  if (! context->started)
    {
      fprintf (context->fp, " %d:", context->reg);
      context->started = 1;
    }
  if (reg1 == context->reg)
    reg = reg2;
  else if (reg2 == context->reg)
    reg = reg1;
  else
    fancy_abort ("gcc.c", 418763, "?");
  fprintf (context->fp, " %d", reg);
  return 0;
}
void
conflict_graph_print (conflict_graph graph, FILE *fp)
{
  int reg;
  struct print_context context;
  context.fp = fp;
  fprintf (fp, "Conflicts:\n");
  for (reg = 0; reg < graph->num_regs; ++reg)
    {
      context.reg = reg;
      context.started = 0;
      conflict_graph_enum (graph, reg, &print_conflict, &context);
      if (context.started)
 fputc_unlocked ('\n', fp);
    }
}
static void
mark_reg_conflict (rtx reg, rtx setter , void *data)
{
  regset set = (regset) data;
  if (((enum rtx_code) (reg)->code) == SUBREG)
    reg = (((reg)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (reg)->code) == REG))
    return;
  bitmap_set_bit (set, (((reg)->u.fld[0]).rtuint));
}
conflict_graph
conflict_graph_compute (regset regs, partition p)
{
  conflict_graph graph = conflict_graph_new (max_reg_num ());
  regset_head live_head;
  regset live = &live_head;
  regset_head born_head;
  regset born = &born_head;
  basic_block bb;
  bitmap_initialize (live, 1);
  bitmap_initialize (born, 1);
  for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
    {
      rtx insn;
      rtx head;
      bitmap_copy (live, bb->global_live_at_end);
      bitmap_operation (live, live, regs, BITMAP_AND);
      head = (bb)->head_;
      insn = (bb)->end_;
      for (insn = (bb)->end_; insn != head; insn = (((insn)->u.fld[1]).rtx1))
 {
   int born_reg;
   int live_reg;
   rtx link;
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       bitmap_clear (born);
       note_stores ((((insn)->u.fld[5]).rtx1), mark_reg_conflict, born);
       bitmap_operation (born, born, regs, BITMAP_AND);
       bitmap_operation (live, live, born, BITMAP_AND_COMPL);
       do { bitmap_element *ptr_ = (born)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (born_reg) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { do { bitmap_element *ptr_ = (live)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (live_reg) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { int b = ((p)->elements[(born_reg)].class_element); int l = ((p)->elements[(live_reg)].class_element); if (b != l) conflict_graph_add (graph, b, l); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
     ;
       for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
  if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEAD)
    {
      unsigned int regno = ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      if (bitmap_bit_p (regs, regno))
        bitmap_set_bit (live, regno);
    }
     }
 }
    }
  do { if (live) { bitmap_clear (live); (live) = 0; } } while (0);
  do { if (born) { bitmap_clear (born); (born) = 0; } } while (0);
  return graph;
}
tree
convert_to_pointer (tree type, tree expr)
{
  if (integer_zerop (expr))
    {
      expr = build_int_2_wide ((unsigned long) (0), (long) (0));
      ((expr)->common.type) = type;
      return expr;
    }
  switch (((enum tree_code) (((expr)->common.type))->common.code))
    {
    case POINTER_TYPE:
    case REFERENCE_TYPE:
      return build1_stat (NOP_EXPR,type,expr );
    case INTEGER_TYPE:
    case ENUMERAL_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
      if (((((expr)->common.type))->type.precision) == (8 * (0 ? 8 : 4)))
 return build1_stat (CONVERT_EXPR,type,expr );
      return
 convert_to_pointer (type,
       convert (lang_hooks.types.type_for_size
         ((8 * (0 ? 8 : 4)), 0), expr));
    default:
      error ("cannot convert to a pointer type");
      return convert_to_pointer (type, global_trees[TI_INTEGER_ZERO]);
    }
}
tree
strip_float_extensions (tree exp)
{
  tree sub, expt, subt;
  if (((enum tree_code) (exp)->common.code) == REAL_CST)
    {
      struct real_value orig;
      tree type = ((void *)0);
      orig = (*((exp)->real_cst.real_cst_ptr));
      if (((((exp)->common.type))->type.precision) > ((global_trees[TI_FLOAT_TYPE])->type.precision)
   && exact_real_truncate (((global_trees[TI_FLOAT_TYPE])->type.mode), &orig))
 type = global_trees[TI_FLOAT_TYPE];
      else if (((((exp)->common.type))->type.precision)
        > ((global_trees[TI_DOUBLE_TYPE])->type.precision)
        && exact_real_truncate (((global_trees[TI_DOUBLE_TYPE])->type.mode), &orig))
 type = global_trees[TI_DOUBLE_TYPE];
      if (type)
 return build_real (type, real_value_truncate (((type)->type.mode), orig));
    }
  if (((enum tree_code) (exp)->common.code) != NOP_EXPR
      && ((enum tree_code) (exp)->common.code) != CONVERT_EXPR)
    return exp;
  sub = ((exp)->exp.operands[0]);
  subt = ((sub)->common.type);
  expt = ((exp)->common.type);
  if (!((((enum tree_code) (subt)->common.code) == REAL_TYPE) || (((enum tree_code) (subt)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((subt)->common.type))->common.code) == REAL_TYPE)))
    return exp;
  if (((subt)->type.precision) > ((expt)->type.precision))
    return exp;
  return strip_float_extensions (sub);
}
tree
convert_to_real (tree type, tree expr)
{
  enum built_in_function fcode = builtin_mathfn_code (expr);
  tree itype = ((expr)->common.type);
  if (optimize
      && (((type)->type.mode) == ((global_trees[TI_DOUBLE_TYPE])->type.mode)
          || ((type)->type.mode) == ((global_trees[TI_FLOAT_TYPE])->type.mode)))
    {
      switch (fcode)
        {
   case BUILT_IN_ACOS: case BUILT_IN_ACOSL:
   case BUILT_IN_ACOSH: case BUILT_IN_ACOSHL:
   case BUILT_IN_ASIN: case BUILT_IN_ASINL:
   case BUILT_IN_ASINH: case BUILT_IN_ASINHL:
   case BUILT_IN_ATAN: case BUILT_IN_ATANL:
   case BUILT_IN_ATANH: case BUILT_IN_ATANHL:
   case BUILT_IN_CBRT: case BUILT_IN_CBRTL:
   case BUILT_IN_COS: case BUILT_IN_COSL:
   case BUILT_IN_COSH: case BUILT_IN_COSHL:
   case BUILT_IN_ERF: case BUILT_IN_ERFL:
   case BUILT_IN_ERFC: case BUILT_IN_ERFCL:
   case BUILT_IN_EXP: case BUILT_IN_EXPL:
   case BUILT_IN_EXP10: case BUILT_IN_EXP10L:
   case BUILT_IN_EXP2: case BUILT_IN_EXP2L:
   case BUILT_IN_EXPM1: case BUILT_IN_EXPM1L:
   case BUILT_IN_FABS: case BUILT_IN_FABSL:
   case BUILT_IN_GAMMA: case BUILT_IN_GAMMAL:
   case BUILT_IN_J0: case BUILT_IN_J0L:
   case BUILT_IN_J1: case BUILT_IN_J1L:
   case BUILT_IN_LGAMMA: case BUILT_IN_LGAMMAL:
   case BUILT_IN_LOG: case BUILT_IN_LOGL:
   case BUILT_IN_LOG10: case BUILT_IN_LOG10L:
   case BUILT_IN_LOG1P: case BUILT_IN_LOG1PL:
   case BUILT_IN_LOG2: case BUILT_IN_LOG2L:
   case BUILT_IN_LOGB: case BUILT_IN_LOGBL:
   case BUILT_IN_POW10: case BUILT_IN_POW10L:
   case BUILT_IN_SIN: case BUILT_IN_SINL:
   case BUILT_IN_SINH: case BUILT_IN_SINHL:
   case BUILT_IN_SQRT: case BUILT_IN_SQRTL:
   case BUILT_IN_TAN: case BUILT_IN_TANL:
   case BUILT_IN_TANH: case BUILT_IN_TANHL:
   case BUILT_IN_TGAMMA: case BUILT_IN_TGAMMAL:
   case BUILT_IN_Y0: case BUILT_IN_Y0L:
   case BUILT_IN_Y1: case BUILT_IN_Y1L:
     {
       tree arg0 = strip_float_extensions (((((expr)->exp.operands[1]))->list.value1));
       tree newtype = type;
       if (((((arg0)->common.type))->type.precision) > ((type)->type.precision))
  newtype = ((arg0)->common.type);
       if (((((enum tree_code) (((arg0)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((arg0)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((arg0)->common.type))->common.type))->common.code) == REAL_TYPE))
    && ((newtype)->type.precision) < ((itype)->type.precision)
    && (((newtype)->type.mode) == ((global_trees[TI_DOUBLE_TYPE])->type.mode)
        || ((newtype)->type.mode) == ((global_trees[TI_FLOAT_TYPE])->type.mode)))
         {
    tree arglist;
    tree fn = mathfn_built_in (newtype, fcode);
    if (fn)
    {
      arglist = build_tree_list_stat((tree) ((void *)0),fold (convert_to_real (newtype, arg0)) );
      expr = build_function_call_expr (fn, arglist);
      if (newtype == type)
        return expr;
    }
  }
     }
 default:
   break;
 }
    }
  if (optimize
      && (((fcode == BUILT_IN_FLOORL
    || fcode == BUILT_IN_CEILL
    || fcode == BUILT_IN_ROUNDL
    || fcode == BUILT_IN_RINTL
    || fcode == BUILT_IN_TRUNCL
    || fcode == BUILT_IN_NEARBYINTL)
   && (((type)->type.mode) == ((global_trees[TI_DOUBLE_TYPE])->type.mode)
       || ((type)->type.mode) == ((global_trees[TI_FLOAT_TYPE])->type.mode)))
   || ((fcode == BUILT_IN_FLOOR
        || fcode == BUILT_IN_CEIL
        || fcode == BUILT_IN_ROUND
        || fcode == BUILT_IN_RINT
        || fcode == BUILT_IN_TRUNC
        || fcode == BUILT_IN_NEARBYINT)
       && (((type)->type.mode) == ((global_trees[TI_FLOAT_TYPE])->type.mode)))))
    {
      tree fn = mathfn_built_in (type, fcode);
      if (fn)
 {
   tree arg0 = strip_float_extensions (((((expr)->exp.operands[1]))->list.value1)
            );
   tree arglist = build_tree_list_stat((tree) ((void *)0),fold (convert_to_real (type, arg0)) )
                                           ;
   return build_function_call_expr (fn, arglist);
 }
    }
  if (itype != type && ((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)))
    switch (((enum tree_code) (expr)->common.code))
      {
 case ABS_EXPR:
 case NEGATE_EXPR:
   if (((type)->type.precision) < ((((expr)->common.type))->type.precision))
     return build1_stat (((enum tree_code) (expr)->common.code),type,fold (convert_to_real (type, ((expr)->exp.operands[0]))) )
                                 ;
   break;
 case PLUS_EXPR:
 case MINUS_EXPR:
 case MULT_EXPR:
 case RDIV_EXPR:
    {
      tree arg0 = strip_float_extensions (((expr)->exp.operands[0]));
      tree arg1 = strip_float_extensions (((expr)->exp.operands[1]));
      if (((((enum tree_code) (((arg0)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((arg0)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((arg0)->common.type))->common.type))->common.code) == REAL_TYPE))
   && ((((enum tree_code) (((arg1)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((arg1)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((arg1)->common.type))->common.type))->common.code) == REAL_TYPE)))
        {
    tree newtype = type;
    if (((((arg0)->common.type))->type.precision) > ((newtype)->type.precision))
      newtype = ((arg0)->common.type);
    if (((((arg1)->common.type))->type.precision) > ((newtype)->type.precision))
      newtype = ((arg1)->common.type);
    if (((newtype)->type.precision) < ((itype)->type.precision))
      {
        expr = build (((enum tree_code) (expr)->common.code), newtype,
        fold (convert_to_real (newtype, arg0)),
        fold (convert_to_real (newtype, arg1)));
        if (newtype == type)
   return expr;
      }
        }
    }
   break;
 default:
   break;
      }
  switch (((enum tree_code) (((expr)->common.type))->common.code))
    {
    case REAL_TYPE:
      return build1_stat (flag_float_store ? CONVERT_EXPR : NOP_EXPR,type,expr )
                  ;
    case INTEGER_TYPE:
    case ENUMERAL_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
      return build1_stat (FLOAT_EXPR,type,expr );
    case COMPLEX_TYPE:
      return convert (type,
        fold (build1_stat (REALPART_EXPR,((((expr)->common.type))->common.type),expr )
                                           ));
    case POINTER_TYPE:
    case REFERENCE_TYPE:
      error ("pointer value used where a floating point value1 was expected");
      return convert_to_real (type, global_trees[TI_INTEGER_ZERO]);
    default:
      error ("aggregate value used where a float was expected");
      return convert_to_real (type, global_trees[TI_INTEGER_ZERO]);
    }
}
tree
convert_to_integer (tree type, tree expr)
{
  enum tree_code ex_form = ((enum tree_code) (expr)->common.code);
  tree intype = ((expr)->common.type);
  unsigned int inprec = ((intype)->type.precision);
  unsigned int outprec = ((type)->type.precision);
  if (!(((type)->type.size) != (tree) ((void *)0)))
    {
      error ("conversion to incomplete type");
      return global_trees[TI_ERROR_MARK];
    }
  if (optimize
      && (flag_unsafe_math_optimizations
   || (integer_types[itk_long]
       && outprec >= ((integer_types[itk_long])->type.precision))))
    {
      tree s_expr = strip_float_extensions (expr);
      tree s_intype = ((s_expr)->common.type);
      const enum built_in_function fcode = builtin_mathfn_code (s_expr);
      tree fn = 0;
      switch (fcode)
        {
 case BUILT_IN_ROUND: case BUILT_IN_ROUNDF: case BUILT_IN_ROUNDL:
   if (((type)->type.main_variant) == ((integer_types[itk_long_long])->type.main_variant))
     fn = mathfn_built_in (s_intype, BUILT_IN_LLROUND);
   else
     fn = mathfn_built_in (s_intype, BUILT_IN_LROUND);
   break;
 case BUILT_IN_RINT: case BUILT_IN_RINTF: case BUILT_IN_RINTL:
   if (flag_trapping_math)
     break;
 case BUILT_IN_NEARBYINT: case BUILT_IN_NEARBYINTF: case BUILT_IN_NEARBYINTL:
   if (((type)->type.main_variant) == ((integer_types[itk_long_long])->type.main_variant))
            fn = mathfn_built_in (s_intype, BUILT_IN_LLRINT);
   else
            fn = mathfn_built_in (s_intype, BUILT_IN_LRINT);
   break;
 default:
   break;
 }
      if (fn)
        {
   tree arglist = ((s_expr)->exp.operands[1]);
   tree newexpr = build_function_call_expr (fn, arglist);
   return convert_to_integer (type, newexpr);
 }
    }
  switch (((enum tree_code) (intype)->common.code))
    {
    case POINTER_TYPE:
    case REFERENCE_TYPE:
      if (integer_zerop (expr))
 expr = global_trees[TI_INTEGER_ZERO];
      else
 expr = fold (build1_stat (CONVERT_EXPR,lang_hooks.types.type_for_size ((8 * (0 ? 8 : 4)), 0),expr )
             );
      return convert_to_integer (type, expr);
    case INTEGER_TYPE:
    case ENUMERAL_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
      if (tree_code_type[(int) (ex_form)] == '<')
 {
   expr = copy_node_stat (expr );
   ((expr)->common.type) = type;
   return expr;
 }
      else if (ex_form == TRUTH_AND_EXPR || ex_form == TRUTH_ANDIF_EXPR
        || ex_form == TRUTH_OR_EXPR || ex_form == TRUTH_ORIF_EXPR
        || ex_form == TRUTH_XOR_EXPR)
 {
   expr = copy_node_stat (expr );
   ((expr)->exp.operands[0]) = convert (type, ((expr)->exp.operands[0]));
   ((expr)->exp.operands[1]) = convert (type, ((expr)->exp.operands[1]));
   ((expr)->common.type) = type;
   return expr;
 }
      else if (ex_form == TRUTH_NOT_EXPR)
 {
   expr = copy_node_stat (expr );
   ((expr)->exp.operands[0]) = convert (type, ((expr)->exp.operands[0]));
   ((expr)->common.type) = type;
   return expr;
 }
      else if (outprec >= inprec)
 {
   enum tree_code code;
   if (((type)->common.unsigned_flag) != ((((expr)->common.type))->common.unsigned_flag)
       && (((((expr)->common.type))->type.precision)
    != ((unsigned short) (((unsigned short) mode_size[((((expr)->common.type))->type.mode)]) * 8))))
     code = CONVERT_EXPR;
   else
     code = NOP_EXPR;
   return build1_stat (code,type,expr );
 }
      else if (((enum tree_code) (type)->common.code) == ENUMERAL_TYPE
        || outprec != ((unsigned short) (((unsigned short) mode_size[((type)->type.mode)]) * 8)))
 return build1_stat (NOP_EXPR,type,convert (lang_hooks.types.type_for_mode (((type)->type.mode), ((type)->common.unsigned_flag)), expr) )
          ;
      switch (ex_form)
 {
 case RSHIFT_EXPR:
   if (((enum tree_code) (((expr)->exp.operands[1]))->common.code) == INTEGER_CST
       && tree_int_cst_lt (((expr)->exp.operands[1]),
      convert (((((expr)->exp.operands[1]))->common.type),
        global_trees[TI_INTEGER_ONE])))
     goto trunc1;
   break;
 case LSHIFT_EXPR:
   if (((enum tree_code) (((expr)->exp.operands[1]))->common.code) == INTEGER_CST
       && tree_int_cst_sgn (((expr)->exp.operands[1])) >= 0
       && ((type)->common.unsigned_flag)
       && ((enum tree_code) (((type)->type.size))->common.code) == INTEGER_CST)
     {
       if (tree_int_cst_lt (((expr)->exp.operands[1]), ((type)->type.size)))
  goto trunc1;
       else
  {
    tree t = convert_to_integer (type, global_trees[TI_INTEGER_ZERO]);
    if (((expr)->common.side_effects_flag))
      return build (COMPOUND_EXPR, type, expr, t);
    else
      return t;
  }
     }
   break;
 case MAX_EXPR:
 case MIN_EXPR:
 case MULT_EXPR:
   {
     tree arg0 = get_unwidened (((expr)->exp.operands[0]), type);
     tree arg1 = get_unwidened (((expr)->exp.operands[1]), type);
     if (outprec >= ((((arg0)->common.type))->type.precision)
  && outprec >= ((((arg1)->common.type))->type.precision)
  && (((((arg0)->common.type))->common.unsigned_flag)
      == ((((arg1)->common.type))->common.unsigned_flag)))
       goto trunc1;
     break;
   }
 case PLUS_EXPR:
 case MINUS_EXPR:
 case BIT_AND_EXPR:
 case BIT_IOR_EXPR:
 case BIT_XOR_EXPR:
 trunc1:
   {
     tree arg0 = get_unwidened (((expr)->exp.operands[0]), type);
     tree arg1 = get_unwidened (((expr)->exp.operands[1]), type);
     if (outprec >= (8 * (0 ? 8 : 4))
  || 1
  || inprec > ((((arg0)->common.type))->type.precision)
  || inprec > ((((arg1)->common.type))->type.precision))
       {
  tree typex = type;
  if (((enum tree_code) (typex)->common.code) == ENUMERAL_TYPE)
    typex = lang_hooks.types.type_for_size
      (((typex)->type.precision), ((typex)->common.unsigned_flag));
  if (((typex)->type.precision) != inprec)
    {
      if (((((expr)->common.type))->common.unsigned_flag)
   || (((((arg0)->common.type))->common.unsigned_flag)
       && (((((arg1)->common.type))->common.unsigned_flag)
    || ex_form == LSHIFT_EXPR
    || ex_form == RSHIFT_EXPR
    || ex_form == LROTATE_EXPR
    || ex_form == RROTATE_EXPR))
   || ex_form == LSHIFT_EXPR)
        typex = lang_hooks.types.unsigned_type (typex);
      else
        typex = lang_hooks.types.signed_type (typex);
      return convert (type,
        fold (build (ex_form, typex,
       convert (typex, arg0),
       convert (typex, arg1))));
    }
       }
   }
   break;
 case NEGATE_EXPR:
 case BIT_NOT_EXPR:
   {
     tree typex = type;
     if (((enum tree_code) (typex)->common.code) == ENUMERAL_TYPE)
       typex = lang_hooks.types.type_for_size
  (((typex)->type.precision), ((typex)->common.unsigned_flag));
     if (((typex)->type.precision) != inprec)
       {
  if (((((expr)->common.type))->common.unsigned_flag))
    typex = lang_hooks.types.unsigned_type (typex);
  else
    typex = lang_hooks.types.signed_type (typex);
  return convert (type,
    fold (build1_stat (ex_form,typex,convert (typex, ((expr)->exp.operands[0])) )
                                     ));
       }
   }
 case NOP_EXPR:
   if (((enum tree_code) (((((expr)->exp.operands[0]))->common.type))->common.code) == VECTOR_TYPE
       && (((unsigned short) mode_size[((((((expr)->exp.operands[0]))->common.type))->type.mode)])
    != ((unsigned short) mode_size[((type)->type.mode)])))
     break;
   return convert (type, get_unwidened (((expr)->exp.operands[0]), type));
 case COND_EXPR:
   return fold (build (COND_EXPR, type, ((expr)->exp.operands[0]),
         convert (type, ((expr)->exp.operands[1])),
         convert (type, ((expr)->exp.operands[2]))));
 default:
   break;
 }
      return build1_stat (CONVERT_EXPR,type,expr );
    case REAL_TYPE:
      return build1_stat (FIX_TRUNC_EXPR,type,expr );
    case COMPLEX_TYPE:
      return convert (type,
        fold (build1_stat (REALPART_EXPR,((((expr)->common.type))->common.type),expr )
                                           ));
    case VECTOR_TYPE:
      if (((unsigned short) mode_size[((type)->type.mode)])
   != ((unsigned short) mode_size[((((expr)->common.type))->type.mode)]))
 {
   error ("can't convert between vector values of different size");
   return global_trees[TI_ERROR_MARK];
 }
      return build1_stat (NOP_EXPR,type,expr );
    default:
      error ("aggregate value used where an integer was expected");
      return convert (type, global_trees[TI_INTEGER_ZERO]);
    }
}
tree
convert_to_complex (tree type, tree expr)
{
  tree subtype = ((type)->common.type);
  switch (((enum tree_code) (((expr)->common.type))->common.code))
    {
    case REAL_TYPE:
    case INTEGER_TYPE:
    case ENUMERAL_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
      return build (COMPLEX_EXPR, type, convert (subtype, expr),
      convert (subtype, global_trees[TI_INTEGER_ZERO]));
    case COMPLEX_TYPE:
      {
 tree elt_type = ((((expr)->common.type))->common.type);
 if (((elt_type)->type.main_variant) == ((subtype)->type.main_variant))
   return expr;
 else if (((enum tree_code) (expr)->common.code) == COMPLEX_EXPR)
   return fold (build (COMPLEX_EXPR,
         type,
         convert (subtype, ((expr)->exp.operands[0])),
         convert (subtype, ((expr)->exp.operands[1]))));
 else
   {
     expr = save_expr (expr);
     return
       fold (build (COMPLEX_EXPR,
      type, convert (subtype,
       fold (build1_stat (REALPART_EXPR,((((expr)->common.type))->common.type),expr )
            )),
      convert (subtype,
        fold (build1_stat (IMAGPART_EXPR,((((expr)->common.type))->common.type),expr )
             ))));
   }
      }
    case POINTER_TYPE:
    case REFERENCE_TYPE:
      error ("pointer value used where a complex was expected");
      return convert_to_complex (type, global_trees[TI_INTEGER_ZERO]);
    default:
      error ("aggregate value used where a complex was expected");
      return convert_to_complex (type, global_trees[TI_INTEGER_ZERO]);
    }
}
tree
convert_to_vector (tree type, tree expr)
{
  switch (((enum tree_code) (((expr)->common.type))->common.code))
    {
    case INTEGER_TYPE:
    case VECTOR_TYPE:
      if (((unsigned short) mode_size[((type)->type.mode)])
   != ((unsigned short) mode_size[((((expr)->common.type))->type.mode)]))
 {
   error ("can't convert between vector values of different size");
   return global_trees[TI_ERROR_MARK];
 }
      return build1_stat (NOP_EXPR,type,expr );
    default:
      error ("can't convert value to a vector");
      return convert_to_vector (type, global_trees[TI_INTEGER_ZERO]);
    }
}
typedef unsigned gcov_unsigned_t;
typedef unsigned gcov_position_t;
struct gcov_ctr_summary
{
  gcov_unsigned_t num;
  gcov_unsigned_t runs;
  gcov_type sum_all;
  gcov_type run_max;
  gcov_type sum_max;
};
struct gcov_summary
{
  gcov_unsigned_t checksum;
  struct gcov_ctr_summary ctrs[1];
};
 struct gcov_var
{
  FILE *file;
  gcov_position_t start;
  unsigned offset;
  unsigned length;
  unsigned overread;
  int error;
  int mode;
  int endian;
  size_t alloc;
  gcov_unsigned_t *buffer;
} gcov_var;
 int gcov_open (const char * , int );
 int gcov_magic (gcov_unsigned_t, gcov_unsigned_t);
 int gcov_close (void);
static gcov_position_t gcov_position (void);
static int gcov_is_error (void);
static int gcov_is_eof (void);
 gcov_unsigned_t gcov_read_unsigned (void);
 gcov_type gcov_read_counter (void);
 void gcov_read_summary (struct gcov_summary *);
 const char *gcov_read_string (void);
 void gcov_sync (gcov_position_t ,
        gcov_unsigned_t );
 void gcov_write_unsigned (gcov_unsigned_t);
 void gcov_write_string (const char *);
 gcov_position_t gcov_write_tag (gcov_unsigned_t);
 void gcov_write_length (gcov_position_t );
static gcov_position_t
gcov_position (void)
{
  ;
  return gcov_var.start + gcov_var.offset;
}
static int
gcov_is_eof (void)
{
  return !gcov_var.overread;
}
static int
gcov_is_error (void)
{
  return gcov_var.file ? gcov_var.error : 1;
}
extern void coverage_init (const char *);
extern void coverage_finish (void);
extern void coverage_read_counts_file (void);
extern void coverage_end_function (void);
extern int coverage_begin_output (void);
extern int coverage_counter_alloc (unsigned , unsigned );
extern rtx rtl_coverage_counter_ref (unsigned , unsigned );
extern tree tree_coverage_counter_ref (unsigned , unsigned );
extern gcov_type *get_coverage_counts (unsigned ,
           unsigned ,
           const struct gcov_ctr_summary **);
static void gcov_write_block (unsigned);
static gcov_unsigned_t *gcov_write_words (unsigned);
static const gcov_unsigned_t *gcov_read_words (unsigned);
static void gcov_allocate (unsigned);
static gcov_unsigned_t from_file (gcov_unsigned_t value1)
{
  if (gcov_var.endian)
    {
      value1 = (value1 >> 16) | (value1 << 16);
      value1 = ((value1 & 0xff00ff) << 8) | ((value1 >> 8) & 0xff00ff);
    }
  return value1;
}
 int
gcov_open (const char *name, int mode)
{
  if (gcov_var.file)
    fancy_abort ("gcc.c", 420460, "?");
  gcov_var.start = 0;
  gcov_var.offset = gcov_var.length = 0;
  gcov_var.overread = -1u;
  gcov_var.error = 0;
  gcov_var.endian = 0;
  if (mode >= 0)
    gcov_var.file = fopen (name, "r+b");
  if (gcov_var.file)
    gcov_var.mode = 1;
  else if (mode <= 0)
    {
      gcov_var.file = fopen (name, "w+b");
      if (gcov_var.file)
 gcov_var.mode = mode * 2 + 1;
    }
  if (!gcov_var.file)
    return 0;
  setbuf (gcov_var.file, (char *)0);
  return 1;
}
 int
gcov_close (void)
{
  if (gcov_var.file)
    {
      if (gcov_var.offset && gcov_var.mode < 0)
 gcov_write_block (gcov_var.offset);
      fclose (gcov_var.file);
      gcov_var.file = 0;
      gcov_var.length = 0;
    }
  free (gcov_var.buffer);
  gcov_var.alloc = 0;
  gcov_var.buffer = 0;
  gcov_var.mode = 0;
  return gcov_var.error;
}
 int
gcov_magic (gcov_unsigned_t magic, gcov_unsigned_t expected)
{
  if (magic == expected)
    return 1;
  magic = (magic >> 16) | (magic << 16);
  magic = ((magic & 0xff00ff) << 8) | ((magic >> 8) & 0xff00ff);
  if (magic == expected)
    {
      gcov_var.endian = 1;
      return -1;
    }
  return 0;
}
static void
gcov_allocate (unsigned length)
{
  size_t new_size = gcov_var.alloc;
  if (!new_size)
    new_size = (1 << 10);
  new_size += length;
  new_size *= 2;
  gcov_var.alloc = new_size;
  gcov_var.buffer = xrealloc (gcov_var.buffer, new_size << 2);
}
static void
gcov_write_block (unsigned size)
{
  if (fwrite_unlocked (gcov_var.buffer, size << 2, 1, gcov_var.file) != 1)
    gcov_var.error = 1;
  gcov_var.start += size;
  gcov_var.offset -= size;
}
static gcov_unsigned_t *
gcov_write_words (unsigned words)
{
  gcov_unsigned_t *result;
  ;
  if (gcov_var.offset + words > gcov_var.alloc)
    gcov_allocate (gcov_var.offset + words);
  result = &gcov_var.buffer[gcov_var.offset];
  gcov_var.offset += words;
  return result;
}
 void
gcov_write_unsigned (gcov_unsigned_t value1)
{
  gcov_unsigned_t *buffer = gcov_write_words (1);
  buffer[0] = value1;
}
 void
gcov_write_string (const char *string1)
{
  unsigned length = 0;
  unsigned alloc = 0;
  gcov_unsigned_t *buffer;
  if (string1)
    {
      length = strlen (string1);
      alloc = (length + 4) >> 2;
    }
  buffer = gcov_write_words (1 + alloc);
  buffer[0] = alloc;
  buffer[alloc] = 0;
  memcpy (&buffer[1], string1, length);
}
 gcov_position_t
gcov_write_tag (gcov_unsigned_t tag)
{
  gcov_position_t result = gcov_var.start + gcov_var.offset;
  gcov_unsigned_t *buffer = gcov_write_words (2);
  buffer[0] = tag;
  buffer[1] = 0;
  return result;
}
 void
gcov_write_length (gcov_position_t position)
{
  unsigned offset;
  gcov_unsigned_t length;
  gcov_unsigned_t *buffer;
  ;
  ;
  ;
  offset = position - gcov_var.start;
  length = gcov_var.offset - offset - 2;
  buffer = (gcov_unsigned_t *) &gcov_var.buffer[offset];
  buffer[1] = length;
  if (gcov_var.offset >= (1 << 10))
    gcov_write_block (gcov_var.offset);
}
static const gcov_unsigned_t *
gcov_read_words (unsigned words)
{
  const gcov_unsigned_t *result;
  unsigned excess = gcov_var.length - gcov_var.offset;
  ;
  if (excess < words)
    {
      gcov_var.start += gcov_var.offset;
      memmove (gcov_var.buffer, gcov_var.buffer + gcov_var.offset, excess * 4);
      gcov_var.offset = 0;
      gcov_var.length = excess;
      if (gcov_var.length + words > gcov_var.alloc)
 gcov_allocate (gcov_var.length + words);
      excess = gcov_var.alloc - gcov_var.length;
      excess = fread (gcov_var.buffer + gcov_var.length,
        1, excess << 2, gcov_var.file) >> 2;
      gcov_var.length += excess;
      if (gcov_var.length < words)
 {
   gcov_var.overread += words - gcov_var.length;
   gcov_var.length = 0;
   return 0;
 }
    }
  result = &gcov_var.buffer[gcov_var.offset];
  gcov_var.offset += words;
  return result;
}
 gcov_unsigned_t
gcov_read_unsigned (void)
{
  gcov_unsigned_t value1;
  const gcov_unsigned_t *buffer = gcov_read_words (1);
  if (!buffer)
    return 0;
  value1 = from_file (buffer[0]);
  return value1;
}
 gcov_type
gcov_read_counter (void)
{
  gcov_type value1;
  const gcov_unsigned_t *buffer = gcov_read_words (2);
  if (!buffer)
    return 0;
  value1 = from_file (buffer[0]);
  if (sizeof (value1) > sizeof (gcov_unsigned_t))
    value1 |= ((gcov_type) from_file (buffer[1])) << 32;
  else if (buffer[1])
    gcov_var.error = -1;
  if (value1 < 0)
    gcov_var.error = -1;
  return value1;
}
 const char *
gcov_read_string (void)
{
  unsigned length = gcov_read_unsigned ();
  if (!length)
    return 0;
  return (const char *) gcov_read_words (length);
}
 void
gcov_read_summary (struct gcov_summary *summary)
{
  unsigned ix;
  struct gcov_ctr_summary *csum;
  summary->checksum = gcov_read_unsigned ();
  for (csum = summary->ctrs, ix = 1; ix--; csum++)
    {
      csum->num = gcov_read_unsigned ();
      csum->runs = gcov_read_unsigned ();
      csum->sum_all = gcov_read_counter ();
      csum->run_max = gcov_read_counter ();
      csum->sum_max = gcov_read_counter ();
    }
}
 void
gcov_sync (gcov_position_t base, gcov_unsigned_t length)
{
  ;
  base += length;
  if (base - gcov_var.start <= gcov_var.length)
    gcov_var.offset = base - gcov_var.start;
  else
    {
      gcov_var.offset = gcov_var.length = 0;
      fseek (gcov_var.file, base << 2, 0);
      gcov_var.start = ftell (gcov_var.file) >> 2;
    }
}
struct function_list
{
  struct function_list *next;
  unsigned ident;
  unsigned checksum;
  unsigned n_ctrs[5];
};
typedef struct counts_entry
{
  unsigned ident;
  unsigned ctr;
  unsigned checksum;
  gcov_type *counts;
  struct gcov_ctr_summary summary;
  struct counts_entry *chain;
} counts_entry_t;
static struct function_list *functions_head = 0;
static struct function_list **functions_tail = &functions_head;
static unsigned no_coverage = 0;
static unsigned prg_ctr_mask;
static unsigned prg_n_ctrs[5];
static unsigned fn_ctr_mask;
static unsigned fn_n_ctrs[5];
static unsigned fn_b_ctrs[5];
static char *bbg_file_name;
static unsigned bbg_file_opened;
static int bbg_function_announced;
static char *da_file_name;
static htab_t counts_hash = ((void *)0);
static tree tree_ctr_tables[5];
static rtx ctr_labels[5];
static const char *const ctr_merge_functions[5] = {"__gcov_merge_add", "__gcov_merge_add", "__gcov_merge_add", "__gcov_merge_single", "__gcov_merge_delta"};
static const char *const ctr_names[5] = {"arcs", "interval", "pow2", "single", "delta"};
static hashval_t htab_counts_entry_hash (const void *);
static int htab_counts_entry_eq (const void *, const void *);
static void htab_counts_entry_del (void *);
static void read_counts_file (void);
static unsigned compute_checksum (void);
static unsigned coverage_checksum_string (unsigned, const char *);
static tree build_fn_info_type (unsigned);
static tree build_fn_info_value (const struct function_list *, tree);
static tree build_ctr_info_type (void);
static tree build_ctr_info_value (unsigned, tree);
static tree build_gcov_info (void);
static void create_coverage (void);
static hashval_t
htab_counts_entry_hash (const void *of)
{
  const counts_entry_t *entry = of;
  return entry->ident * 5 + entry->ctr;
}
static int
htab_counts_entry_eq (const void *of1, const void *of2)
{
  const counts_entry_t *entry1 = of1;
  const counts_entry_t *entry2 = of2;
  return entry1->ident == entry2->ident && entry1->ctr == entry2->ctr;
}
static void
htab_counts_entry_del (void *of)
{
  counts_entry_t *entry = of;
  free (entry->counts);
  free (entry);
}
static void
read_counts_file (void)
{
  gcov_unsigned_t fn_ident = 0;
  gcov_unsigned_t checksum = -1;
  counts_entry_t *summaried = ((void *)0);
  unsigned seen_summary = 0;
  gcov_unsigned_t tag;
  int is_error = 0;
  if (!gcov_open (da_file_name, 1))
    return;
  if (!gcov_magic (gcov_read_unsigned (), ((gcov_unsigned_t)0x67636461)))
    {
      warning ("`%s' is not a gcov data file", da_file_name);
      gcov_close ();
      return;
    }
  else if ((tag = gcov_read_unsigned ()) != ((gcov_unsigned_t)0x33303565))
    {
      char v[4], e[4];
      ((v)[0] = (char)((tag) >> 24), (v)[1] = (char)((tag) >> 16), (v)[2] = (char)((tag) >> 8), (v)[3] = (char)((tag) >> 0));
      ((e)[0] = (char)((((gcov_unsigned_t)0x33303565)) >> 24), (e)[1] = (char)((((gcov_unsigned_t)0x33303565)) >> 16), (e)[2] = (char)((((gcov_unsigned_t)0x33303565)) >> 8), (e)[3] = (char)((((gcov_unsigned_t)0x33303565)) >> 0));
      warning ("`%s' is version `%.*s', expected version `%.*s'",
         da_file_name, 4, v, 4, e);
      gcov_close ();
      return;
    }
  gcov_read_unsigned ();
  counts_hash = htab_create (10,
        htab_counts_entry_hash, htab_counts_entry_eq,
        htab_counts_entry_del);
  while ((tag = gcov_read_unsigned ()))
    {
      gcov_unsigned_t length;
      gcov_position_t offset;
      length = gcov_read_unsigned ();
      offset = gcov_position ();
      if (tag == ((gcov_unsigned_t)0x01000000))
 {
   fn_ident = gcov_read_unsigned ();
   checksum = gcov_read_unsigned ();
   if (seen_summary)
     {
       counts_entry_t *entry, *chain;
       for (entry = summaried; entry; entry = chain)
  {
    chain = entry->chain;
    entry->chain = ((void *)0);
  }
       summaried = ((void *)0);
       seen_summary = 0;
     }
 }
      else if (tag == ((gcov_unsigned_t)0xa3000000))
 {
   counts_entry_t *entry;
   struct gcov_summary summary;
   gcov_read_summary (&summary);
   seen_summary = 1;
   for (entry = summaried; entry; entry = entry->chain)
     {
       struct gcov_ctr_summary *csum = &summary.ctrs[entry->ctr];
       entry->summary.runs += csum->runs;
       entry->summary.sum_all += csum->sum_all;
       if (entry->summary.run_max < csum->run_max)
  entry->summary.run_max = csum->run_max;
       entry->summary.sum_max += csum->sum_max;
     }
 }
      else if ((!((tag) & 0xFFFF) && ((unsigned)(((tag) - ((gcov_unsigned_t)0x01a10000)) >> 17)) < 5) && fn_ident)
 {
   counts_entry_t **slot, *entry, elt;
   unsigned n_counts = ((length) / 2);
   unsigned ix;
   elt.ident = fn_ident;
   elt.ctr = ((unsigned)(((tag) - ((gcov_unsigned_t)0x01a10000)) >> 17));
   slot = (counts_entry_t **) htab_find_slot
     (counts_hash, &elt, INSERT);
   entry = *slot;
   if (!entry)
     {
       *slot = entry = xcalloc (1, sizeof (counts_entry_t));
       entry->ident = elt.ident;
       entry->ctr = elt.ctr;
       entry->checksum = checksum;
       entry->summary.num = n_counts;
       entry->counts = xcalloc (n_counts, sizeof (gcov_type));
     }
   else if (entry->checksum != checksum)
     {
       error ("coverage mismatch for function %u while reading execution counters.",
       fn_ident);
       error ("checksum is %x instead of %x", entry->checksum, checksum);
       htab_delete (counts_hash);
       break;
     }
   else if (entry->summary.num != n_counts)
     {
       error ("coverage mismatch for function %u while reading execution counters.",
       fn_ident);
       error ("number of counters is %d instead of %d", entry->summary.num, n_counts);
       htab_delete (counts_hash);
       break;
     }
   else if (elt.ctr >= 1)
     {
       error ("cannot merge separate %s counters for function %u",
       ctr_names[elt.ctr], fn_ident);
       goto skip_merge;
     }
   if (elt.ctr < 1
       && (!entry->chain || summaried != entry))
     {
       entry->chain = summaried;
       summaried = entry;
     }
   for (ix = 0; ix != n_counts; ix++)
     entry->counts[ix] += gcov_read_counter ();
 skip_merge:;
 }
      gcov_sync (offset, length);
      if ((is_error = gcov_is_error ()))
 break;
    }
  if (!gcov_is_eof ())
    {
      error (is_error < 0 ? "`%s' has overflowed" : "`%s' is corrupted",
      da_file_name);
      htab_delete (counts_hash);
    }
  gcov_close ();
}
gcov_type *
get_coverage_counts (unsigned counter, unsigned expected,
       const struct gcov_ctr_summary **summary)
{
  counts_entry_t *entry, elt;
  gcov_unsigned_t checksum = -1;
  if (!counts_hash)
    {
      static int warned = 0;
      if (!warned++)
 inform ((flag_guess_branch_prob
   ? "file %s not found, execution counts estimated"
   : "file %s not found, execution counts assumed to be zero"),
  da_file_name);
      return ((void *)0);
    }
  elt.ident = (cfun->funcdef_no) + 1;
  elt.ctr = counter;
  entry = htab_find (counts_hash, &elt);
  if (!entry)
    {
      warning ("no coverage for function '%s' found.", ((const char *) (decl_assembler_name (current_function_decl))->identifier.id.str)
                                                     );
      return 0;
    }
  checksum = compute_checksum ();
  if (entry->checksum != checksum)
    {
      error ("coverage mismatch for function '%s' while reading counter '%s'.",
      ((const char *) (decl_assembler_name (current_function_decl))->identifier.id.str),
      ctr_names[counter]);
      error ("checksum is %x instead of %x", entry->checksum, checksum);
      return 0;
    }
  else if (entry->summary.num != expected)
    {
      error ("coverage mismatch for function '%s' while reading counter '%s'.",
      ((const char *) (decl_assembler_name (current_function_decl))->identifier.id.str),
      ctr_names[counter]);
      error ("number of counters is %d instead of %d", entry->summary.num, expected);
      return 0;
    }
  if (summary)
    *summary = &entry->summary;
  return entry->counts;
}
int
coverage_counter_alloc (unsigned counter, unsigned num)
{
  if (no_coverage)
    return 0;
  if (!num)
    return 1;
  if (!tree_ctr_tables[counter])
    {
      char buf[20];
      tree domain_tree
        = build_index_type (build_int_2_wide ((unsigned long) (1000), (long) (0)));
      tree gcov_type_array_type
        = build_array_type (global_trees[TI_INTDI_TYPE], domain_tree);
      tree_ctr_tables[counter]
        = build_decl_stat (VAR_DECL,(tree) ((void *)0),gcov_type_array_type );
      ((tree_ctr_tables[counter])->common.static_flag) = 1;
      do { sprintf (buf, "*.%s%u", "LPBX", (unsigned) (counter + 1)); } while (0);
      ((tree_ctr_tables[counter])->decl.name) = get_identifier (buf);
      ((tree_ctr_tables[counter])->decl.u1.a.align) = ((global_trees[TI_INTDI_TYPE])->type.align);
    }
  fn_b_ctrs[counter] = fn_n_ctrs[counter];
  fn_n_ctrs[counter] += num;
  fn_ctr_mask |= 1 << counter;
  return 1;
}
rtx
rtl_coverage_counter_ref (unsigned counter, unsigned no)
{
  unsigned gcov_size = tree_low_cst (((global_trees[TI_INTDI_TYPE])->type.size), 1);
  enum machine_mode mode = mode_for_size (gcov_size, MODE_INT, 0);
  rtx ref;
  if (no >= fn_n_ctrs[counter] - fn_b_ctrs[counter])
    fancy_abort ("gcc.c", 421287, "?");
  no += prg_n_ctrs[counter] + fn_b_ctrs[counter];
  if (!ctr_labels[counter])
      {
        ctr_labels[counter] = gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (ggc_alloc_string((((const char *) (((tree_ctr_tables[counter])->decl.name))->identifier.id.str)), -1)))
                                       ;
        ((((ctr_labels[counter]))->u.fld[1]).rtint) = (1 << 1);
      }
  ref = plus_constant_wide ((ctr_labels[counter]), (long) (gcov_size / 8 * no));
  ref = gen_rtx_MEM (mode, ref);
  set_mem_alias_set (ref, new_alias_set ());
  (((ref))->call) = 1;
  return ref;
}
tree
tree_coverage_counter_ref (unsigned counter, unsigned no)
{
  tree domain_type = ((((tree_ctr_tables[counter])->common.type))->type.value1);
  if (no >= fn_n_ctrs[counter] - fn_b_ctrs[counter])
    fancy_abort ("gcc.c", 421312, "?");
  no += prg_n_ctrs[counter] + fn_b_ctrs[counter];
  return build (ARRAY_REF, global_trees[TI_INTDI_TYPE], tree_ctr_tables[counter],
  fold_convert (domain_type, build_int_2_wide ((unsigned long) (no), (long) (0))),
  ((domain_type)->type.minval),
  size_binop (EXACT_DIV_EXPR, ((global_trees[TI_INTDI_TYPE])->type.size_unit),
       size_int_wide ((long) (((global_trees[TI_INTDI_TYPE])->type.align)), SIZETYPE)));
}
static unsigned
coverage_checksum_string (unsigned chksum, const char *string1)
{
  int i;
  char *dup = ((void *)0);
  for (i = 0; string1[i]; i++)
    {
      if (!strncmp (string1 + i, "_GLOBAL__", 9))
 for (i = i + 9; string1[i]; i++)
   if (string1[i]=='_')
     {
       int y;
       unsigned seed;
       for (y = 1; y < 9; y++)
  if (!(string1[i + y] >= '0' && string1[i + y] <= '9')
      && !(string1[i + y] >= 'A' && string1[i + y] <= 'F'))
    break;
       if (y != 9 || string1[i + 9] != '_')
  continue;
       for (y = 10; y < 18; y++)
  if (!(string1[i + y] >= '0' && string1[i + y] <= '9')
      && !(string1[i + y] >= 'A' && string1[i + y] <= 'F'))
    break;
       if (y != 18)
  continue;
       if (!sscanf (string1 + i + 10, "%X", &seed))
  fancy_abort ("gcc.c", 421358, "?");
       if (seed != crc32_string (0, flag_random_seed))
  continue;
       string1 = dup = xstrdup (string1);
       for (y = 10; y < 18; y++)
  dup[i + y] = '0';
       break;
     }
      break;
    }
  chksum = crc32_string (chksum, string1);
  if (dup)
    free (dup);
  return chksum;
}
static unsigned
compute_checksum (void)
{
  expanded_location xloc
    = (((current_function_decl)->decl.locus));
  unsigned chksum = xloc.line;
  chksum = coverage_checksum_string (chksum, xloc.file);
  chksum = coverage_checksum_string
    (chksum, ((const char *) (decl_assembler_name (current_function_decl))->identifier.id.str));
  return chksum;
}
int
coverage_begin_output (void)
{
  if (no_coverage)
    return 0;
  if (!bbg_function_announced)
    {
      expanded_location xloc
 = (((current_function_decl)->decl.locus));
      unsigned long offset;
      if (!bbg_file_opened)
 {
   if (!gcov_open (bbg_file_name, -1))
     error ("cannot open %s", bbg_file_name);
   else
     {
       gcov_write_unsigned (((gcov_unsigned_t)0x67636e6f));
       gcov_write_unsigned (((gcov_unsigned_t)0x33303565));
       gcov_write_unsigned (local_tick);
     }
   bbg_file_opened = 1;
 }
      offset = gcov_write_tag (((gcov_unsigned_t)0x01000000));
      gcov_write_unsigned ((cfun->funcdef_no) + 1);
      gcov_write_unsigned (compute_checksum ());
      gcov_write_string (((const char *) (decl_assembler_name (current_function_decl))->identifier.id.str)
                                                 );
      gcov_write_string (xloc.file);
      gcov_write_unsigned (xloc.line);
      gcov_write_length (offset);
      bbg_function_announced = 1;
    }
  return !gcov_is_error ();
}
void
coverage_end_function (void)
{
  unsigned i;
  if (bbg_file_opened > 1 && gcov_is_error ())
    {
      warning ("error writing `%s'", bbg_file_name);
      bbg_file_opened = -1;
    }
  if (fn_ctr_mask)
    {
      struct function_list *item;
      item = xmalloc (sizeof (struct function_list));
      *functions_tail = item;
      functions_tail = &item->next;
      item->next = 0;
      item->ident = (cfun->funcdef_no) + 1;
      item->checksum = compute_checksum ();
      for (i = 0; i != 5; i++)
 {
   item->n_ctrs[i] = fn_n_ctrs[i];
   prg_n_ctrs[i] += fn_n_ctrs[i];
   fn_n_ctrs[i] = fn_b_ctrs[i] = 0;
 }
      prg_ctr_mask |= fn_ctr_mask;
      fn_ctr_mask = 0;
    }
  bbg_function_announced = 0;
}
static tree
build_fn_info_type (unsigned int counters)
{
  tree type = lang_hooks.types.make_type (RECORD_TYPE);
  tree field, fields;
  tree array_type;
  fields = build_decl_stat (FIELD_DECL,(tree) ((void *)0),global_trees[TI_UINTSI_TYPE] );
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),global_trees[TI_UINTSI_TYPE] );
  ((field)->common.chain) = fields;
  fields = field;
  array_type = build_index_type (build_int_2_wide ((unsigned long) (counters - 1), (long) (0)));
  array_type = build_array_type (integer_types[itk_unsigned_int], array_type);
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),array_type );
  ((field)->common.chain) = fields;
  fields = field;
  finish_builtin_struct (type, "__gcov_fn_info", fields, (tree) ((void *)0));
  return type;
}
static tree
build_fn_info_value (const struct function_list *function, tree type)
{
  tree value1 = (tree) ((void *)0);
  tree fields = ((type)->type.value1s);
  unsigned ix;
  tree array_value = (tree) ((void *)0);
  value1 = tree_cons_stat (fields,convert (global_trees[TI_UINTSI_TYPE], build_int_2_wide ((unsigned long) (function->ident), (long) (0))),value1 )
             ;
  fields = ((fields)->common.chain);
  value1 = tree_cons_stat (fields,convert (global_trees[TI_UINTSI_TYPE], build_int_2_wide ((unsigned long) (function->checksum), (long) (0))),value1 )
             ;
  fields = ((fields)->common.chain);
  for (ix = 0; ix != 5; ix++)
    if (prg_ctr_mask & (1 << ix))
      {
 tree counters = convert (integer_types[itk_unsigned_int],
     build_int_2_wide ((unsigned long) (function->n_ctrs[ix]), (long) (0)));
 array_value = tree_cons_stat ((tree) ((void *)0),counters,array_value );
      }
  array_value = build_constructor (((fields)->common.type), nreverse (array_value));
  value1 = tree_cons_stat (fields,array_value,value1 );
  value1 = build_constructor (type, nreverse (value1));
  return value1;
}
static tree
build_ctr_info_type (void)
{
  tree type = lang_hooks.types.make_type (RECORD_TYPE);
  tree field, fields = (tree) ((void *)0);
  tree gcov_ptr_type = build_pointer_type (global_trees[TI_INTDI_TYPE]);
  tree gcov_merge_fn_type;
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),global_trees[TI_UINTSI_TYPE] );
  ((field)->common.chain) = fields;
  fields = field;
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),gcov_ptr_type );
  ((field)->common.chain) = fields;
  fields = field;
  gcov_merge_fn_type =
    build_function_type_list (global_trees[TI_VOID_TYPE],
         gcov_ptr_type, integer_types[itk_unsigned_int],
         (tree) ((void *)0));
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),build_pointer_type (gcov_merge_fn_type) )
                                                ;
  ((field)->common.chain) = fields;
  fields = field;
  finish_builtin_struct (type, "__gcov_ctr_info", fields, (tree) ((void *)0));
  return type;
}
static tree
build_ctr_info_value (unsigned int counter, tree type)
{
  tree value1 = (tree) ((void *)0);
  tree fields = ((type)->type.value1s);
  tree fn;
  value1 = tree_cons_stat (fields,convert (global_trees[TI_UINTSI_TYPE], build_int_2_wide ((unsigned long) (prg_n_ctrs[counter]), (long) (0))),value1 )
             ;
  fields = ((fields)->common.chain);
  if (prg_n_ctrs[counter])
    {
      tree array_type;
      array_type = build_index_type (build_int_2_wide ((unsigned long) (prg_n_ctrs[counter] - 1), (long) (0)));
      array_type = build_array_type (((((fields)->common.type))->common.type),
         array_type);
      ((tree_ctr_tables[counter])->common.type) = array_type;
      ((tree_ctr_tables[counter])->decl.size) = ((array_type)->type.size);
      ((tree_ctr_tables[counter])->decl.size_unit) = ((array_type)->type.size_unit);
      assemble_variable (tree_ctr_tables[counter], 0, 0, 0);
      value1 = tree_cons_stat (fields,build1_stat (ADDR_EXPR,((fields)->common.type),tree_ctr_tables[counter] ),value1 )
          ;
    }
  else
    value1 = tree_cons_stat (fields,global_trees[TI_NULL_POINTER],value1 );
  fields = ((fields)->common.chain);
  fn = build_decl_stat (FUNCTION_DECL,get_identifier (ctr_merge_functions[counter]),((((fields)->common.type))->common.type) )
                                    ;
  ((fn)->decl.external_flag) = 1;
  ((fn)->common.public_flag) = 1;
  ((fn)->decl.artificial_flag) = 1;
  ((fn)->common.nothrow_flag) = 1;
  value1 = tree_cons_stat (fields,build1_stat (ADDR_EXPR,((fields)->common.type),fn ),value1 )
             ;
  value1 = build_constructor (type, nreverse (value1));
  return value1;
}
static tree
build_gcov_info (void)
{
  unsigned n_ctr_types, ix;
  tree type, const_type;
  tree fn_info_type, fn_info_value = (tree) ((void *)0);
  tree fn_info_ptr_type;
  tree ctr_info_type, ctr_info_ary_type, ctr_info_value = (tree) ((void *)0);
  tree field, fields = (tree) ((void *)0);
  tree value1 = (tree) ((void *)0);
  tree filename_string;
  char *filename;
  int filename_len;
  unsigned n_fns;
  const struct function_list *fn;
  tree string_type;
  for (n_ctr_types = 0, ix = 0; ix != 5; ix++)
    if (prg_ctr_mask & (1 << ix))
      n_ctr_types++;
  type = lang_hooks.types.make_type (RECORD_TYPE);
  const_type = build_qualified_type (type, 0x1);
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),global_trees[TI_UINTSI_TYPE] );
  ((field)->common.chain) = fields;
  fields = field;
  value1 = tree_cons_stat (field,convert (global_trees[TI_UINTSI_TYPE], build_int_2_wide ((unsigned long) (((gcov_unsigned_t)0x33303565)), (long) (0))),value1 )
             ;
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),build_pointer_type (const_type) );
  ((field)->common.chain) = fields;
  fields = field;
  value1 = tree_cons_stat (field,global_trees[TI_NULL_POINTER],value1 );
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),global_trees[TI_UINTSI_TYPE] );
  ((field)->common.chain) = fields;
  fields = field;
  value1 = tree_cons_stat (field,convert (global_trees[TI_UINTSI_TYPE], build_int_2_wide ((unsigned long) (local_tick), (long) (0))),value1 )
             ;
  string_type = build_pointer_type (build_qualified_type (integer_types[itk_char],
          0x1));
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),string_type );
  ((field)->common.chain) = fields;
  fields = field;
  filename = getpwd ();
  filename = (filename && da_file_name[0] != '/'
       ? concat (filename, "/", da_file_name, ((void *)0))
       : da_file_name);
  filename_len = strlen (filename);
  filename_string = build_string (filename_len + 1, filename);
  if (filename != da_file_name)
    free (filename);
  ((filename_string)->common.type) =
   build_array_type (integer_types[itk_char],
       build_index_type (build_int_2_wide ((unsigned long) (filename_len), (long) (0))));
  value1 = tree_cons_stat (field,build1_stat (ADDR_EXPR,string_type,filename_string ),value1 )
             ;
  fn_info_type = build_fn_info_type (n_ctr_types);
  fn_info_ptr_type = build_pointer_type (build_qualified_type
      (fn_info_type, 0x1));
  for (fn = functions_head, n_fns = 0; fn; fn = fn->next, n_fns++)
    fn_info_value = tree_cons_stat ((tree) ((void *)0),build_fn_info_value (fn, fn_info_type),fn_info_value )
                        ;
  if (n_fns)
    {
      tree array_type;
      array_type = build_index_type (build_int_2_wide ((unsigned long) (n_fns - 1), (long) (0)));
      array_type = build_array_type (fn_info_type, array_type);
      fn_info_value = build_constructor (array_type, nreverse (fn_info_value));
      fn_info_value = build1_stat (ADDR_EXPR,fn_info_ptr_type,fn_info_value );
    }
  else
    fn_info_value = global_trees[TI_NULL_POINTER];
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),integer_types[itk_unsigned_int] );
  ((field)->common.chain) = fields;
  fields = field;
  value1 = tree_cons_stat (field,convert (integer_types[itk_unsigned_int], build_int_2_wide ((unsigned long) (n_fns), (long) (0))),value1 )
             ;
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),fn_info_ptr_type );
  ((field)->common.chain) = fields;
  fields = field;
  value1 = tree_cons_stat (field,fn_info_value,value1 );
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),integer_types[itk_unsigned_int] );
  ((field)->common.chain) = fields;
  fields = field;
  value1 = tree_cons_stat (field,convert (integer_types[itk_unsigned_int], build_int_2_wide ((unsigned long) (prg_ctr_mask), (long) (0))),value1 )
             ;
  ctr_info_type = build_ctr_info_type ();
  ctr_info_ary_type = build_index_type (build_int_2_wide ((unsigned long) (n_ctr_types), (long) (0)));
  ctr_info_ary_type = build_array_type (ctr_info_type, ctr_info_ary_type);
  for (ix = 0; ix != 5; ix++)
    if (prg_ctr_mask & (1 << ix))
      ctr_info_value = tree_cons_stat ((tree) ((void *)0),build_ctr_info_value (ix, ctr_info_type),ctr_info_value )
                     ;
  ctr_info_value = build_constructor (ctr_info_ary_type,
          nreverse (ctr_info_value));
  field = build_decl_stat (FIELD_DECL,(tree) ((void *)0),ctr_info_ary_type );
  ((field)->common.chain) = fields;
  fields = field;
  value1 = tree_cons_stat (field,ctr_info_value,value1 );
  finish_builtin_struct (type, "__gcov_info", fields, (tree) ((void *)0));
  value1 = build_constructor (type, nreverse (value1));
  return value1;
}
static void
create_coverage (void)
{
  tree gcov_info, gcov_init, body, t;
  char name_buf[32];
  no_coverage = 1;
  if (!prg_ctr_mask)
    return;
  t = build_gcov_info ();
  gcov_info = build_decl_stat (VAR_DECL,(tree) ((void *)0),((t)->common.type) );
  ((gcov_info)->common.static_flag) = 1;
  do { sprintf (name_buf, "*.%s%u", "LPBX", (unsigned) (0)); } while (0);
  ((gcov_info)->decl.name) = get_identifier (name_buf);
  ((gcov_info)->decl.initial) = t;
  assemble_variable (gcov_info, 0, 0, 0);
  t = build_pointer_type (((gcov_info)->common.type));
  t = build_function_type_list (global_trees[TI_VOID_TYPE], t, ((void *)0));
  t = build_decl_stat (FUNCTION_DECL,get_identifier ("__gcov_init"),t );
  ((t)->common.public_flag) = 1;
  ((t)->decl.external_flag) = 1;
  gcov_init = t;
  body = ((void *)0);
  t = build_fold_addr_expr (gcov_info);
  t = tree_cons_stat (((void *)0),t,((void *)0) );
  t = build_function_call_expr (gcov_init, t);
  append_to_statement_list (t, &body);
  cgraph_build_static_cdtor ('I', body);
}
void
coverage_init (const char *filename)
{
  int len = strlen (filename);
  da_file_name = xmalloc (len + strlen (".gcda") + 1);
  strcpy (da_file_name, filename);
  strcat (da_file_name, ".gcda");
  bbg_file_name = xmalloc (len + strlen (".gcno") + 1);
  strcpy (bbg_file_name, filename);
  strcat (bbg_file_name, ".gcno");
  read_counts_file ();
}
void
coverage_finish (void)
{
  create_coverage ();
  if (bbg_file_opened)
    {
      int error = gcov_close ();
      if (error)
 unlink (bbg_file_name);
      if (!local_tick)
 unlink (da_file_name);
    }
}
const struct ggc_root_tab gt_ggc_r_gt_coverage_h[] = {
  {
    &ctr_labels[0],
    1 * (5),
    sizeof (ctr_labels[0]),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &tree_ctr_tables[0],
    1 * (5),
    sizeof (tree_ctr_tables[0]),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static int max_reg;
static int max_insn_uid;
static int max_qty;
static int next_qty;
struct qty_table_elem
{
  rtx const_rtx;
  rtx const_insn;
  rtx comparison_const;
  int comparison_qty;
  unsigned int first_reg, last_reg;
  unsigned int comparison_code : 16;
  unsigned int mode : 8;
};
static struct qty_table_elem *qty_table;
static rtx this_insn;
struct reg_eqv_elem
{
  int next, prev;
};
static struct reg_eqv_elem *reg_eqv_table;
struct cse_reg_info
{
  struct cse_reg_info *hash_next;
  struct cse_reg_info *next;
  unsigned int regno;
  int reg_qty;
  int reg_tick;
  int reg_in_table;
  unsigned int subreg_ticked;
};
static struct cse_reg_info *cse_reg_info_free_list;
static struct cse_reg_info *cse_reg_info_used_list;
static struct cse_reg_info *cse_reg_info_used_list_end;
static struct cse_reg_info *reg_hash[(1 << 7)];
static unsigned int cached_regno;
static struct cse_reg_info *cached_cse_reg_info;
static HARD_REG_SET hard_regs_in_table;
static int cse_basic_block_start;
static int cse_basic_block_end;
static int *uid_cuid;
static int max_uid;
static int cse_altered;
static int cse_jumps_altered;
static int recorded_label_ref;
static int do_not_record;
static int hash_arg_in_memory;
struct table_elt
{
  rtx exp;
  rtx canon_exp;
  struct table_elt *next_same_hash;
  struct table_elt *prev_same_hash;
  struct table_elt *next_same_value;
  struct table_elt *prev_same_value;
  struct table_elt *first_same_value;
  struct table_elt *related_value;
  int cost;
  int regcost;
  unsigned int mode : 8;
  char in_memory;
  char is_const;
  char flag;
};
static struct table_elt *equiv_table[(1 << 5)];
static struct table_elt *free_element_chain;
static int n_elements_made;
static int max_elements_made;
static struct table_elt *last_jump_equiv_class;
static int constant_pool_entries_cost;
static int constant_pool_entries_regcost;
struct cse_basic_block_data
{
  int low_cuid;
  int high_cuid;
  int nsets;
  rtx last;
  int path_size;
  struct branch_path
    {
      rtx branch;
      enum taken {PATH_TAKEN, PATH_NOT_TAKEN, PATH_AROUND} status;
    } *path;
};
static unsigned char fixed_base_plus_p (rtx x);
static int notreg_cost (rtx, enum rtx_code);
static int approx_reg_cost_1 (rtx *, void *);
static int approx_reg_cost (rtx);
static int preferable (int, int, int, int);
static void new_basic_block (void);
static void make_new_qty (unsigned int, enum machine_mode);
static void make_regs_eqv (unsigned int, unsigned int);
static void delete_reg_equiv (unsigned int);
static int mention_regs (rtx);
static int insert_regs (rtx, struct table_elt *, int);
static void remove_from_table (struct table_elt *, unsigned);
static struct table_elt *lookup (rtx, unsigned, enum machine_mode);
static struct table_elt *lookup_for_remove (rtx, unsigned, enum machine_mode);
static rtx lookup_as_function (rtx, enum rtx_code);
static struct table_elt *hash_insert (rtx, struct table_elt *, unsigned,
          enum machine_mode);
static void merge_equiv_classes (struct table_elt *, struct table_elt *);
static void invalidate (rtx, enum machine_mode);
static int cse_rtx_varies_p (rtx, int);
static void remove_invalid_refs (unsigned int);
static void remove_invalid_subreg_refs (unsigned int, unsigned int,
     enum machine_mode);
static void rehash_using_reg (rtx);
static void invalidate_memory (void);
static void invalidate_for_call (void);
static rtx use_related_value (rtx, struct table_elt *);
static unsigned canon_hash (rtx, enum machine_mode);
static unsigned canon_hash_string (const char *);
static unsigned safe_hash (rtx, enum machine_mode);
static int exp_equiv_p (rtx, rtx, int, int);
static rtx canon_reg (rtx, rtx);
static void find_best_addr (rtx, rtx *, enum machine_mode);
static enum rtx_code find_comparison_args (enum rtx_code, rtx *, rtx *,
        enum machine_mode *,
        enum machine_mode *);
static rtx fold_rtx (rtx, rtx);
static rtx equiv_constant (rtx);
static void record_jump_equiv (rtx, int);
static void record_jump_cond (enum rtx_code, enum machine_mode, rtx, rtx,
         int);
static void cse_insn (rtx, rtx);
static void cse_end_of_basic_block (rtx, struct cse_basic_block_data *,
        int, int, int);
static int addr_affects_sp_p (rtx);
static void invalidate_from_clobbers (rtx);
static rtx cse_process_notes (rtx, rtx);
static void cse_around_loop (rtx);
static void invalidate_skipped_set (rtx, rtx, void *);
static void invalidate_skipped_block (rtx);
static void cse_check_loop_start (rtx, rtx, void *);
static void cse_set_around_loop (rtx, rtx, rtx);
static rtx cse_basic_block (rtx, rtx, struct branch_path *, int);
static void count_reg_usage (rtx, int *, int);
static int check_for_label_ref (rtx *, void *);
extern void dump_class (struct table_elt*);
static struct cse_reg_info * get_cse_reg_info (unsigned int);
static int check_dependence (rtx *, void *);
static void flush_hash_table (void);
static unsigned char insn_live_p (rtx, int *);
static unsigned char set_live_p (rtx, rtx, int *);
static unsigned char dead_libcall_p (rtx, int *);
static int cse_change_cc_mode (rtx *, void *);
static void cse_change_cc_mode_insns (rtx, rtx, rtx);
static enum machine_mode cse_cc_succs (basic_block, rtx, rtx, unsigned char);
static const struct rtl_hooks cse_rtl_hooks = { gen_lowpart_if_possible, reg_nonzero_bits_for_combine, reg_num_sign_bit_copies_for_combine, };
static unsigned char
fixed_base_plus_p (rtx x)
{
  switch (((enum rtx_code) (x)->code))
    {
    case REG:
      if (x == (global_rtl[GR_FRAME_POINTER]) || x == (global_rtl[GR_HARD_FRAME_POINTER]))
 return 1;
      if (x == (global_rtl[GR_ARG_POINTER]) && fixed_regs[16])
 return 1;
      if ((((x)->u.fld[0]).rtuint) >= (53)
   && (((x)->u.fld[0]).rtuint) <= (((53)) + 4))
 return 1;
      return 0;
    case PLUS:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != CONST_INT)
 return 0;
      return fixed_base_plus_p ((((x)->u.fld[0]).rtx1));
    default:
      return 0;
    }
}
void
dump_class (struct table_elt *classp)
{
  struct table_elt *elt;
  fprintf (stderr, "Equivalence chain for ");
  print_rtl (stderr, classp->exp);
  fprintf (stderr, ": \n");
  for (elt = classp->first_same_value; elt; elt = elt->next_same_value)
    {
      print_rtl (stderr, elt->exp);
      fprintf (stderr, "\n");
    }
}
static int
approx_reg_cost_1 (rtx *xp, void *data)
{
  rtx x = *xp;
  int *cost_p = data;
  if (x && (((enum rtx_code) (x)->code) == REG))
    {
      unsigned int regno = (((x)->u.fld[0]).rtuint);
      if (! ((regno) == 20 || (regno) == 6 || (regno) == 7 || (regno) == 16 || ((regno) >= (53) && (regno) <= (((53)) + 4)) || ((regno) < 53 && ((regno) == 20 || (regno) == 6 || fixed_regs[regno] || global_regs[regno]) && (regclass_map[regno]) != NO_REGS)))
 {
   if (regno < 53)
     {
       if (1)
  return 1;
       *cost_p += 2;
     }
   else
     *cost_p += 1;
 }
    }
  return 0;
}
static int
approx_reg_cost (rtx x)
{
  int cost = 0;
  if (for_each_rtx (&x, approx_reg_cost_1, (void *) &cost))
    return 2147483647;
  return cost;
}
static int
preferable (int cost_a, int regcost_a, int cost_b, int regcost_b)
{
  if (cost_a != cost_b)
    {
      if (cost_a == 2147483647)
 return 1;
      if (cost_b == 2147483647)
 return -1;
    }
  if (regcost_a != regcost_b)
    {
      if (regcost_a == 2147483647)
 return 1;
      if (regcost_b == 2147483647)
 return -1;
    }
  if (cost_a != cost_b)
    return cost_a - cost_b;
  if (regcost_a != regcost_b)
    return regcost_a - regcost_b;
  return 0;
}
static int
notreg_cost (rtx x, enum rtx_code outer)
{
  return ((((enum rtx_code) (x)->code) == SUBREG
    && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
    && mode_class[((enum machine_mode) (x)->mode)] == MODE_INT
    && mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_INT
    && (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])
        < ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]))
    && subreg_lowpart_p (x)
    && 1
                                                      )
   ? 0
   : rtx_cost (x, outer) * 2);
}
static struct cse_reg_info *
get_cse_reg_info (unsigned int regno)
{
  struct cse_reg_info **hash_head = &reg_hash[(((regno) ^ ((regno) >> 7)) & ((1 << 7) - 1))];
  struct cse_reg_info *p;
  for (p = *hash_head; p != ((void *)0); p = p->hash_next)
    if (p->regno == regno)
      break;
  if (p == ((void *)0))
    {
      if (cse_reg_info_free_list)
 {
   p = cse_reg_info_free_list;
   cse_reg_info_free_list = p->next;
 }
      else
 p = xmalloc (sizeof (struct cse_reg_info));
      p->hash_next = *hash_head;
      *hash_head = p;
      p->reg_tick = 1;
      p->reg_in_table = -1;
      p->subreg_ticked = -1;
      p->reg_qty = regno;
      p->regno = regno;
      p->next = cse_reg_info_used_list;
      cse_reg_info_used_list = p;
      if (!cse_reg_info_used_list_end)
 cse_reg_info_used_list_end = p;
    }
  cached_regno = regno;
  cached_cse_reg_info = p;
  return p;
}
static void
new_basic_block (void)
{
  int i;
  next_qty = max_reg;
  memset (reg_hash, 0, sizeof reg_hash);
  if (cse_reg_info_used_list)
    {
      cse_reg_info_used_list_end->next = cse_reg_info_free_list;
      cse_reg_info_free_list = cse_reg_info_used_list;
      cse_reg_info_used_list = cse_reg_info_used_list_end = 0;
    }
  cached_cse_reg_info = 0;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (hard_regs_in_table); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (i = 0; i < (1 << 5); i++)
    {
      struct table_elt *first;
      first = equiv_table[i];
      if (first != ((void *)0))
 {
   struct table_elt *last = first;
   equiv_table[i] = ((void *)0);
   while (last->next_same_hash != ((void *)0))
     last = last->next_same_hash;
   last->next_same_hash = free_element_chain;
   free_element_chain = first;
 }
    }
}
static void
make_new_qty (unsigned int reg, enum machine_mode mode)
{
  int q;
  struct qty_table_elem *ent;
  struct reg_eqv_elem *eqv;
  if (next_qty >= max_qty)
    fancy_abort ("gcc.c", 422814, "?");
  q = (((((reg) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((reg))))->reg_qty) = next_qty++;
  ent = &qty_table[q];
  ent->first_reg = reg;
  ent->last_reg = reg;
  ent->mode = mode;
  ent->const_rtx = ent->const_insn = (rtx) 0;
  ent->comparison_code = UNKNOWN;
  eqv = &reg_eqv_table[reg];
  eqv->next = eqv->prev = -1;
}
static void
make_regs_eqv (unsigned int new, unsigned int old)
{
  unsigned int lastr, firstr;
  int q = (((((old) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((old))))->reg_qty);
  struct qty_table_elem *ent;
  ent = &qty_table[q];
  if (! ((((((old) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((old))))->reg_qty) != (int) (old)))
    fancy_abort ("gcc.c", 422842, "?");
  (((((new) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((new))))->reg_qty) = q;
  firstr = ent->first_reg;
  lastr = ent->last_reg;
  if (! (firstr < 53 && ((firstr) == 20 || (firstr) == 6 || fixed_regs[firstr] || global_regs[firstr]))
      && (new >= 53 || (regclass_map[new]) != NO_REGS)
      && ((new < 53 && ((new) == 20 || (new) == 6 || fixed_regs[new] || global_regs[new]))
   || (new >= 53
       && (firstr < 53
    || ((uid_cuid[(((reg_n_info)->data.reg[new])->last_uid)] > cse_basic_block_end
         || (uid_cuid[(((reg_n_info)->data.reg[new])->first_uid)]
      < cse_basic_block_start))
        && (uid_cuid[(((reg_n_info)->data.reg[new])->last_uid)]
     > uid_cuid[(((reg_n_info)->data.reg[firstr])->last_uid)]))))))
    {
      reg_eqv_table[firstr].prev = new;
      reg_eqv_table[new].next = firstr;
      reg_eqv_table[new].prev = -1;
      ent->first_reg = new;
    }
  else
    {
      while (lastr < 53 && reg_eqv_table[lastr].prev >= 0
      && ((regclass_map[lastr]) == NO_REGS || ! ((lastr) == 20 || (lastr) == 6 || fixed_regs[lastr] || global_regs[lastr]))
      && new >= 53)
 lastr = reg_eqv_table[lastr].prev;
      reg_eqv_table[new].next = reg_eqv_table[lastr].next;
      if (reg_eqv_table[lastr].next >= 0)
 reg_eqv_table[reg_eqv_table[lastr].next].prev = new;
      else
 qty_table[q].last_reg = new;
      reg_eqv_table[lastr].next = new;
      reg_eqv_table[new].prev = lastr;
    }
}
static void
delete_reg_equiv (unsigned int reg)
{
  struct qty_table_elem *ent;
  int q = (((((reg) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((reg))))->reg_qty);
  int p, n;
  if (q == (int) reg)
    return;
  ent = &qty_table[q];
  p = reg_eqv_table[reg].prev;
  n = reg_eqv_table[reg].next;
  if (n != -1)
    reg_eqv_table[n].prev = p;
  else
    ent->last_reg = p;
  if (p != -1)
    reg_eqv_table[p].next = n;
  else
    ent->first_reg = n;
  (((((reg) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((reg))))->reg_qty) = reg;
}
static int
mention_regs (rtx x)
{
  enum rtx_code code;
  int i, j;
  const char *fmt;
  int changed = 0;
  if (x == 0)
    return 0;
  code = ((enum rtx_code) (x)->code);
  if (code == REG)
    {
      unsigned int regno = (((x)->u.fld[0]).rtuint);
      unsigned int endregno
 = regno + (regno >= 53 ? 1
     : hard_regno_nregs[regno][((enum machine_mode) (x)->mode)]);
      unsigned int i;
      for (i = regno; i < endregno; i++)
 {
   if ((((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_in_table) >= 0 && (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_in_table) != (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_tick))
     remove_invalid_refs (i);
   (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_in_table) = (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_tick);
   (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->subreg_ticked) = -1;
 }
      return 0;
    }
  if (code == SUBREG && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
      && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
    {
      unsigned int i = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      if ((((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_in_table) >= 0 && (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_in_table) != (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_tick))
 {
   if ((((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_tick) - (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_in_table) > 1
       || (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->subreg_ticked) != ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint))
     remove_invalid_refs (i);
   else
     remove_invalid_subreg_refs (i, (((x)->u.fld[1]).rtuint), ((enum machine_mode) (x)->mode));
 }
      (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_in_table) = (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_tick);
      (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->subreg_ticked) = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      return 0;
    }
  if (code == COMPARE || (((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
    {
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && ! ((((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))))->reg_qty) != (int) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint))))
 if (insert_regs ((((x)->u.fld[0]).rtx1), ((void *)0), 0))
   {
     rehash_using_reg ((((x)->u.fld[0]).rtx1));
     changed = 1;
   }
      if ((((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG)
   && ! ((((((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtuint)))))->reg_qty) != (int) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtuint))))
 if (insert_regs ((((x)->u.fld[1]).rtx1), ((void *)0), 0))
   {
     rehash_using_reg ((((x)->u.fld[1]).rtx1));
     changed = 1;
   }
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    if (fmt[i] == 'e')
      changed |= mention_regs ((((x)->u.fld[i]).rtx1));
    else if (fmt[i] == 'E')
      for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
 changed |= mention_regs ((((((x)->u.fld[i]).rtvec1))->elem[j]));
  return changed;
}
static int
insert_regs (rtx x, struct table_elt *classp, int modified)
{
  if ((((enum rtx_code) (x)->code) == REG))
    {
      unsigned int regno = (((x)->u.fld[0]).rtuint);
      int qty_valid;
      qty_valid = ((((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->reg_qty) != (int) (regno));
      if (qty_valid)
 {
   struct qty_table_elem *ent = &qty_table[(((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->reg_qty)];
   if (ent->mode != ((enum machine_mode) (x)->mode))
     return 0;
 }
      if (modified || ! qty_valid)
 {
   if (classp)
     for (classp = classp->first_same_value;
   classp != 0;
   classp = classp->next_same_value)
       if ((((enum rtx_code) (classp->exp)->code) == REG)
    && ((enum machine_mode) (classp->exp)->mode) == ((enum machine_mode) (x)->mode))
  {
    make_regs_eqv (regno, (((classp->exp)->u.fld[0]).rtuint));
    return 1;
  }
   if (! modified
       && (((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->reg_in_table) >= 0
       && (((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->reg_tick) == (((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->reg_in_table) + 1)
     (((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->reg_tick)++;
   make_new_qty (regno, ((enum machine_mode) (x)->mode));
   return 1;
 }
      return 0;
    }
  else if (((enum rtx_code) (x)->code) == SUBREG && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
    && ! ((((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))))->reg_qty) != (int) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint))))
    {
      insert_regs ((((x)->u.fld[0]).rtx1), ((void *)0), 0);
      mention_regs (x);
      return 1;
    }
  else
    return mention_regs (x);
}
static void
remove_from_table (struct table_elt *elt, unsigned int hash)
{
  if (elt == 0)
    return;
  elt->first_same_value = 0;
  {
    struct table_elt *prev = elt->prev_same_value;
    struct table_elt *next = elt->next_same_value;
    if (next)
      next->prev_same_value = prev;
    if (prev)
      prev->next_same_value = next;
    else
      {
 struct table_elt *newfirst = next;
 while (next)
   {
     next->first_same_value = newfirst;
     next = next->next_same_value;
   }
      }
  }
  {
    struct table_elt *prev = elt->prev_same_hash;
    struct table_elt *next = elt->next_same_hash;
    if (next)
      next->prev_same_hash = prev;
    if (prev)
      prev->next_same_hash = next;
    else if (equiv_table[hash] == elt)
      equiv_table[hash] = next;
    else
      {
 for (hash = 0; hash < (1 << 5); hash++)
   if (equiv_table[hash] == elt)
     equiv_table[hash] = next;
      }
  }
  if (elt->related_value != 0 && elt->related_value != elt)
    {
      struct table_elt *p = elt->related_value;
      while (p->related_value != elt)
 p = p->related_value;
      p->related_value = elt->related_value;
      if (p->related_value == p)
 p->related_value = 0;
    }
  elt->next_same_hash = free_element_chain;
  free_element_chain = elt;
}
static struct table_elt *
lookup (rtx x, unsigned int hash, enum machine_mode mode)
{
  struct table_elt *p;
  for (p = equiv_table[hash]; p; p = p->next_same_hash)
    if (mode == p->mode && ((x == p->exp && (((enum rtx_code) (x)->code) == REG))
       || exp_equiv_p (x, p->exp, !(((enum rtx_code) (x)->code) == REG), 0)))
      return p;
  return 0;
}
static struct table_elt *
lookup_for_remove (rtx x, unsigned int hash, enum machine_mode mode)
{
  struct table_elt *p;
  if ((((enum rtx_code) (x)->code) == REG))
    {
      unsigned int regno = (((x)->u.fld[0]).rtuint);
      for (p = equiv_table[hash]; p; p = p->next_same_hash)
 if ((((enum rtx_code) (p->exp)->code) == REG)
     && (((p->exp)->u.fld[0]).rtuint) == regno)
   return p;
    }
  else
    {
      for (p = equiv_table[hash]; p; p = p->next_same_hash)
 if (mode == p->mode && (x == p->exp || exp_equiv_p (x, p->exp, 0, 0)))
   return p;
    }
  return 0;
}
static rtx
lookup_as_function (rtx x, enum rtx_code code)
{
  struct table_elt *p
    = lookup (x, safe_hash (x, VOIDmode) & ((1 << 5) - 1), ((enum machine_mode) (x)->mode));
  if (p == 0 && code == CONST_INT
      && ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) < ((unsigned short) mode_size[word_mode]))
    {
      x = copy_rtx (x);
      ((x)->mode = (word_mode));
      p = lookup (x, safe_hash (x, VOIDmode) & ((1 << 5) - 1), word_mode);
    }
  if (p == 0)
    return 0;
  for (p = p->first_same_value; p; p = p->next_same_value)
    if (((enum rtx_code) (p->exp)->code) == code
 && exp_equiv_p (p->exp, p->exp, 1, 0))
      return p->exp;
  return 0;
}
static struct table_elt *
hash_insert (rtx x, struct table_elt *classp, unsigned int hash,
      enum machine_mode mode)
{
  struct table_elt *elt;
  if ((((enum rtx_code) (x)->code) == REG) && ! (((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty) != (int) ((((x)->u.fld[0]).rtuint))))
    fancy_abort ("gcc.c", 423313, "?");
  if ((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) < 53)
    {
      unsigned int regno = (((x)->u.fld[0]).rtuint);
      unsigned int endregno = regno + hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
      unsigned int i;
      for (i = regno; i < endregno; i++)
 ((hard_regs_in_table)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
    }
  elt = free_element_chain;
  if (elt)
    free_element_chain = elt->next_same_hash;
  else
    {
      n_elements_made++;
      elt = xmalloc (sizeof (struct table_elt));
    }
  elt->exp = x;
  elt->canon_exp = (rtx) 0;
  elt->cost = ((((enum rtx_code) (x)->code) == REG) ? 0 : notreg_cost (x, SET));
  elt->regcost = approx_reg_cost (x);
  elt->next_same_value = 0;
  elt->prev_same_value = 0;
  elt->next_same_hash = equiv_table[hash];
  elt->prev_same_hash = 0;
  elt->related_value = 0;
  elt->in_memory = 0;
  elt->mode = mode;
  elt->is_const = (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR)
     || ((((enum rtx_code) (x)->code) == REG)
         && (((x))->unchanging)
         && (((x)->u.fld[0]).rtuint) >= 53)
     || fixed_base_plus_p (x));
  if (equiv_table[hash])
    equiv_table[hash]->prev_same_hash = elt;
  equiv_table[hash] = elt;
  if (classp)
    {
      classp = classp->first_same_value;
      if ((preferable ((elt)->cost, (elt)->regcost, (classp)->cost, (classp)->regcost) < 0))
 {
   struct table_elt *p;
   elt->next_same_value = classp;
   classp->prev_same_value = elt;
   elt->first_same_value = elt;
   for (p = classp; p; p = p->next_same_value)
     p->first_same_value = elt;
 }
      else
 {
   struct table_elt *p, *next;
   for (p = classp; (next = p->next_same_value) && (preferable ((next)->cost, (next)->regcost, (elt)->cost, (elt)->regcost) < 0);
        p = next);
   elt->next_same_value = next;
   if (next)
     next->prev_same_value = elt;
   elt->prev_same_value = p;
   p->next_same_value = elt;
   elt->first_same_value = classp;
 }
    }
  else
    elt->first_same_value = elt;
  if (elt->is_const && classp && (((enum rtx_code) (classp->exp)->code) == REG)
      && !(((enum rtx_code) (x)->code) == REG))
    {
      int exp_q = ((((((((classp->exp)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((classp->exp)->u.fld[0]).rtuint)))))->reg_qty);
      struct qty_table_elem *exp_ent = &qty_table[exp_q];
      exp_ent->const_rtx = rtl_hooks.gen_lowpart (exp_ent->mode, x);
      exp_ent->const_insn = this_insn;
    }
  else if ((((enum rtx_code) (x)->code) == REG)
    && classp
    && ! qty_table[((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty)].const_rtx
    && ! elt->is_const)
    {
      struct table_elt *p;
      for (p = classp; p != 0; p = p->next_same_value)
 {
   if (p->is_const && !(((enum rtx_code) (p->exp)->code) == REG))
     {
       int x_q = ((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty);
       struct qty_table_elem *x_ent = &qty_table[x_q];
       x_ent->const_rtx
  = rtl_hooks.gen_lowpart (((enum machine_mode) (x)->mode), p->exp);
       x_ent->const_insn = this_insn;
       break;
     }
 }
    }
  else if ((((enum rtx_code) (x)->code) == REG)
    && qty_table[((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty)].const_rtx
    && ((enum machine_mode) (x)->mode) == qty_table[((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty)].mode)
    qty_table[((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty)].const_insn = this_insn;
  if (((enum rtx_code) (x)->code) == CONST)
    {
      rtx subexp = get_related_value (x);
      unsigned subhash;
      struct table_elt *subelt, *subelt_prev;
      if (subexp != 0)
 {
   subhash = safe_hash (subexp, mode) & ((1 << 5) - 1);
   subelt = lookup (subexp, subhash, mode);
   if (subelt == 0)
     subelt = hash_insert (subexp, ((void *)0), subhash, mode);
   if (subelt->related_value == 0)
     subelt->related_value = subelt;
   subelt_prev = subelt;
   while (subelt_prev->related_value != subelt)
     subelt_prev = subelt_prev->related_value;
   elt->related_value = subelt_prev->related_value;
   subelt_prev->related_value = elt;
 }
    }
  return elt;
}
static void
merge_equiv_classes (struct table_elt *class1, struct table_elt *class2)
{
  struct table_elt *elt, *next, *new;
  class1 = class1->first_same_value;
  class2 = class2->first_same_value;
  if (class1 == class2)
    return;
  for (elt = class2; elt; elt = next)
    {
      unsigned int hash;
      rtx exp = elt->exp;
      enum machine_mode mode = elt->mode;
      next = elt->next_same_value;
      if ((((enum rtx_code) (exp)->code) == REG) || exp_equiv_p (exp, exp, 1, 0))
 {
   unsigned char need_rehash = 0;
   hash_arg_in_memory = 0;
   hash = (((((enum rtx_code) (exp)->code) == REG) && (((exp)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((exp)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((exp)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (exp, mode)) & ((1 << 5) - 1));
   if ((((enum rtx_code) (exp)->code) == REG))
     {
       need_rehash = (unsigned) ((((((((exp)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((exp)->u.fld[0]).rtuint)))))->reg_qty) != (((exp)->u.fld[0]).rtuint);
       delete_reg_equiv ((((exp)->u.fld[0]).rtuint));
     }
   remove_from_table (elt, hash);
   if (insert_regs (exp, class1, 0) || need_rehash)
     {
       rehash_using_reg (exp);
       hash = (((((enum rtx_code) (exp)->code) == REG) && (((exp)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((exp)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((exp)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (exp, mode)) & ((1 << 5) - 1));
     }
   new = hash_insert (exp, class1, hash, mode);
   new->in_memory = hash_arg_in_memory;
 }
    }
}
static void
flush_hash_table (void)
{
  int i;
  struct table_elt *p;
  for (i = 0; i < (1 << 5); i++)
    for (p = equiv_table[i]; p; p = equiv_table[i])
      {
 if ((((enum rtx_code) (p->exp)->code) == REG))
   invalidate (p->exp, p->mode);
 else
   remove_from_table (p, i);
      }
}
struct check_dependence_data
{
  enum machine_mode mode;
  rtx exp;
  rtx addr;
};
static int
check_dependence (rtx *x, void *data)
{
  struct check_dependence_data *d = (struct check_dependence_data *) data;
  if (*x && (((enum rtx_code) (*x)->code) == MEM))
    return canon_true_dependence (d->exp, d->mode, d->addr, *x,
          cse_rtx_varies_p);
  else
    return 0;
}
static void
invalidate (rtx x, enum machine_mode full_mode)
{
  int i;
  struct table_elt *p;
  rtx addr;
  switch (((enum rtx_code) (x)->code))
    {
    case REG:
      {
 unsigned int regno = (((x)->u.fld[0]).rtuint);
 unsigned int hash = (((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (x, ((enum machine_mode) (x)->mode))) & ((1 << 5) - 1));
 delete_reg_equiv (regno);
 (((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->reg_tick)++;
 (((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->subreg_ticked) = -1;
 if (regno >= 53)
   {
     struct table_elt *elt;
     while ((elt = lookup_for_remove (x, hash, ((enum machine_mode) (x)->mode))))
       remove_from_table (elt, hash);
   }
 else
   {
     long in_table
       = (!!((hard_regs_in_table)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))));
     unsigned int endregno
       = regno + hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
     unsigned int tregno, tendregno, rn;
     struct table_elt *p, *next;
     ((hard_regs_in_table)[(regno) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))));
     for (rn = regno + 1; rn < endregno; rn++)
       {
  in_table |= (!!((hard_regs_in_table)[(rn) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((rn) % ((unsigned) (8 * 4))))));
  ((hard_regs_in_table)[(rn) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((rn) % ((unsigned) (8 * 4)))));
  delete_reg_equiv (rn);
  (((((rn) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((rn))))->reg_tick)++;
  (((((rn) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((rn))))->subreg_ticked) = -1;
       }
     if (in_table)
       for (hash = 0; hash < (1 << 5); hash++)
  for (p = equiv_table[hash]; p; p = next)
    {
      next = p->next_same_hash;
      if (!(((enum rtx_code) (p->exp)->code) == REG)
   || (((p->exp)->u.fld[0]).rtuint) >= 53)
        continue;
      tregno = (((p->exp)->u.fld[0]).rtuint);
      tendregno
        = tregno + hard_regno_nregs[tregno][((enum machine_mode) (p->exp)->mode)];
      if (tendregno > regno && tregno < endregno)
        remove_from_table (p, hash);
    }
   }
      }
      return;
    case SUBREG:
      invalidate ((((x)->u.fld[0]).rtx1), VOIDmode);
      return;
    case PARALLEL:
      for (i = (((((x)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; --i)
 invalidate ((((((x)->u.fld[0]).rtvec1))->elem[i]), VOIDmode);
      return;
    case EXPR_LIST:
      invalidate ((((x)->u.fld[0]).rtx1), VOIDmode);
      return;
    case MEM:
      addr = canon_rtx (get_addr ((((x)->u.fld[0]).rtx1)));
      x = canon_rtx (x);
      if (full_mode == VOIDmode)
 full_mode = ((enum machine_mode) (x)->mode);
      for (i = 0; i < (1 << 5); i++)
 {
   struct table_elt *next;
   for (p = equiv_table[i]; p; p = next)
     {
       next = p->next_same_hash;
       if (p->in_memory)
  {
    struct check_dependence_data d;
    if (!p->canon_exp)
      p->canon_exp = canon_rtx (p->exp);
    d.exp = x;
    d.addr = addr;
    d.mode = full_mode;
    if (for_each_rtx (&p->canon_exp, check_dependence, &d))
      remove_from_table (p, i);
  }
     }
 }
      return;
    default:
      fancy_abort ("gcc.c", 423726, "?");
    }
}
static void
remove_invalid_refs (unsigned int regno)
{
  unsigned int i;
  struct table_elt *p, *next;
  for (i = 0; i < (1 << 5); i++)
    for (p = equiv_table[i]; p; p = next)
      {
 next = p->next_same_hash;
 if (!(((enum rtx_code) (p->exp)->code) == REG)
     && refers_to_regno_p (regno, regno + 1, p->exp, (rtx *) 0))
   remove_from_table (p, i);
      }
}
static void
remove_invalid_subreg_refs (unsigned int regno, unsigned int offset,
       enum machine_mode mode)
{
  unsigned int i;
  struct table_elt *p, *next;
  unsigned int end = offset + (((unsigned short) mode_size[mode]) - 1);
  for (i = 0; i < (1 << 5); i++)
    for (p = equiv_table[i]; p; p = next)
      {
 rtx exp = p->exp;
 next = p->next_same_hash;
 if (!(((enum rtx_code) (exp)->code) == REG)
     && (((enum rtx_code) (exp)->code) != SUBREG
  || !(((enum rtx_code) ((((exp)->u.fld[0]).rtx1))->code) == REG)
  || ((((((exp)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != regno
  || ((((((exp)->u.fld[1]).rtuint)
        + (((unsigned short) mode_size[((enum machine_mode) (exp)->mode)]) - 1)) >= offset)
      && (((exp)->u.fld[1]).rtuint) <= end))
     && refers_to_regno_p (regno, regno + 1, p->exp, (rtx *) 0))
   remove_from_table (p, i);
      }
}
static void
rehash_using_reg (rtx x)
{
  unsigned int i;
  struct table_elt *p, *next;
  unsigned hash;
  if (((enum rtx_code) (x)->code) == SUBREG)
    x = (((x)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (x)->code) == REG)
      || ((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_in_table) < 0
      || ((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_in_table) != ((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_tick))
    return;
  for (i = 0; i < (1 << 5); i++)
    for (p = equiv_table[i]; p; p = next)
      {
 next = p->next_same_hash;
 if (reg_mentioned_p (x, p->exp)
     && exp_equiv_p (p->exp, p->exp, 1, 0)
     && i != (hash = safe_hash (p->exp, p->mode) & ((1 << 5) - 1)))
   {
     if (p->next_same_hash)
       p->next_same_hash->prev_same_hash = p->prev_same_hash;
     if (p->prev_same_hash)
       p->prev_same_hash->next_same_hash = p->next_same_hash;
     else
       equiv_table[i] = p->next_same_hash;
     p->next_same_hash = equiv_table[hash];
     p->prev_same_hash = 0;
     if (equiv_table[hash])
       equiv_table[hash]->prev_same_hash = p;
     equiv_table[hash] = p;
   }
      }
}
static void
invalidate_for_call (void)
{
  unsigned int regno, endregno;
  unsigned int i;
  unsigned hash;
  struct table_elt *p, *next;
  int in_table = 0;
  for (regno = 0; regno < 53; regno++)
    if ((!!((regs_invalidated_by_call)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
      {
 delete_reg_equiv (regno);
 if ((((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->reg_tick) >= 0)
   {
     (((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->reg_tick)++;
     (((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->subreg_ticked) = -1;
   }
 in_table |= ((!!((hard_regs_in_table)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))) != 0);
      }
  if (in_table)
    for (hash = 0; hash < (1 << 5); hash++)
      for (p = equiv_table[hash]; p; p = next)
 {
   next = p->next_same_hash;
   if (!(((enum rtx_code) (p->exp)->code) == REG)
       || (((p->exp)->u.fld[0]).rtuint) >= 53)
     continue;
   regno = (((p->exp)->u.fld[0]).rtuint);
   endregno = regno + hard_regno_nregs[regno][((enum machine_mode) (p->exp)->mode)];
   for (i = regno; i < endregno; i++)
     if ((!!((regs_invalidated_by_call)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
       {
  remove_from_table (p, hash);
  break;
       }
 }
}
static rtx
use_related_value (rtx x, struct table_elt *elt)
{
  struct table_elt *relt = 0;
  struct table_elt *p, *q;
  long offset;
  if (elt != 0 && elt->related_value != 0)
    relt = elt;
  else if (elt == 0 && ((enum rtx_code) (x)->code) == CONST)
    {
      rtx subexp = get_related_value (x);
      if (subexp != 0)
 relt = lookup (subexp,
         safe_hash (subexp, ((enum machine_mode) (subexp)->mode)) & ((1 << 5) - 1),
         ((enum machine_mode) (subexp)->mode));
    }
  if (relt == 0)
    return 0;
  p = relt;
  while (1)
    {
      if (rtx_equal_p (x, p->exp))
 q = 0;
      else
 for (q = p->first_same_value; q; q = q->next_same_value)
   if ((((enum rtx_code) (q->exp)->code) == REG))
     break;
      if (q)
 break;
      p = p->related_value;
      if (p == relt || p == 0)
 break;
    }
  if (q == 0)
    return 0;
  offset = (get_integer_term (x) - get_integer_term (p->exp));
  return plus_constant_wide ((q->exp), (long) (offset));
}
static unsigned
canon_hash_string (const char *ps)
{
  unsigned hash = 0;
  const unsigned char *p = (const unsigned char *) ps;
  if (p)
    while (*p)
      hash += *p++;
  return hash;
}
static unsigned
canon_hash (rtx x, enum machine_mode mode)
{
  int i, j;
  unsigned hash = 0;
  enum rtx_code code;
  const char *fmt;
 repeat:
  if (x == 0)
    return hash;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
      {
 unsigned int regno = (((x)->u.fld[0]).rtuint);
 unsigned char record;
 if (regno >= 53)
   record = 1;
 else if (x == (global_rtl[GR_FRAME_POINTER])
   || x == (global_rtl[GR_HARD_FRAME_POINTER])
   || x == (global_rtl[GR_ARG_POINTER])
   || x == (global_rtl[GR_STACK_POINTER])
   || x == pic_offset_table_rtx)
   record = 1;
 else if (global_regs[regno])
   record = 0;
 else if (fixed_regs[regno])
   record = 1;
 else if (mode_class[((enum machine_mode) (x)->mode)] == MODE_CC)
   record = 1;
 else if (1)
   record = 0;
 else if (((((regclass_map[regno])) == AREG) || (((regclass_map[regno])) == DREG) || (((regclass_map[regno])) == CREG) || (((regclass_map[regno])) == BREG) || (((regclass_map[regno])) == AD_REGS) || (((regclass_map[regno])) == SIREG) || (((regclass_map[regno])) == DIREG) || (((regclass_map[regno])) == FP_TOP_REG) || (((regclass_map[regno])) == FP_SECOND_REG)))
   record = 0;
 else
   record = 1;
 if (!record)
   {
     do_not_record = 1;
     return 0;
   }
 hash += ((unsigned) REG << 7) + (unsigned) (((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->reg_qty);
 return hash;
      }
    case SUBREG:
      {
 if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
   {
     hash += (((unsigned) SUBREG << 7)
       + ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)
       + ((((x)->u.fld[1]).rtuint) / (0 ? 8 : 4)));
     return hash;
   }
 break;
      }
    case CONST_INT:
      {
 unsigned long tem = ((x)->u.hwint[0]);
 hash += ((unsigned) CONST_INT << 7) + (unsigned) mode + tem;
 return hash;
      }
    case CONST_DOUBLE:
      hash += (unsigned) code + (unsigned) ((enum machine_mode) (x)->mode);
      if (((enum machine_mode) (x)->mode) != VOIDmode)
 hash += real_hash (((struct real_value *)&((x)->u.hwint[0])));
      else
 hash += ((unsigned) ((x)->u.hwint[0])
   + (unsigned) ((x)->u.hwint[1]));
      return hash;
    case CONST_VECTOR:
      {
 int units;
 rtx elt;
 units = (((((x)->u.fld[0]).rtvec1))->num_elem);
 for (i = 0; i < units; ++i)
   {
     elt = (((((x)->u.fld[0]).rtvec1))->elem[i]);
     hash += canon_hash (elt, ((enum machine_mode) (elt)->mode));
   }
 return hash;
      }
    case LABEL_REF:
      hash += ((unsigned) LABEL_REF << 7) + (unsigned long) (((x)->u.fld[0]).rtx1);
      return hash;
    case SYMBOL_REF:
      hash += ((unsigned) SYMBOL_REF << 7) + (unsigned long) (((x)->u.fld[0]).rtstr);
      return hash;
    case MEM:
      if ((((x))->volatil) || ((enum machine_mode) (x)->mode) == BLKmode)
 {
   do_not_record = 1;
   return 0;
 }
      if (! (((x))->unchanging) || fixed_base_plus_p ((((x)->u.fld[0]).rtx1)))
 hash_arg_in_memory = 1;
      hash += (unsigned) MEM;
      x = (((x)->u.fld[0]).rtx1);
      goto repeat;
    case USE:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM)
   && ! ((((((x)->u.fld[0]).rtx1)))->volatil))
 {
   hash += (unsigned) USE;
   x = (((x)->u.fld[0]).rtx1);
   if (! (((x))->unchanging) || fixed_base_plus_p ((((x)->u.fld[0]).rtx1)))
     hash_arg_in_memory = 1;
   hash += (unsigned) MEM;
   x = (((x)->u.fld[0]).rtx1);
   goto repeat;
 }
      break;
    case PRE_DEC:
    case PRE_INC:
    case POST_DEC:
    case POST_INC:
    case PRE_MODIFY:
    case POST_MODIFY:
    case PC:
    case CC0:
    case CALL:
    case UNSPEC_VOLATILE:
      do_not_record = 1;
      return 0;
    case ASM_OPERANDS:
      if ((((x))->volatil))
 {
   do_not_record = 1;
   return 0;
 }
      else
 {
   hash += (unsigned) code + (unsigned) ((enum machine_mode) (x)->mode)
     + canon_hash_string ((((x)->u.fld[0]).rtstr))
     + canon_hash_string ((((x)->u.fld[1]).rtstr))
     + (unsigned) (((x)->u.fld[2]).rtint);
   if ((((((x)->u.fld[3]).rtvec1))->num_elem))
     {
       for (i = 1; i < (((((x)->u.fld[3]).rtvec1))->num_elem); i++)
  {
    hash += (canon_hash ((((((x)->u.fld[3]).rtvec1))->elem[i]),
           ((enum machine_mode) ((((((x)->u.fld[3]).rtvec1))->elem[i]))->mode))
      + canon_hash_string (((((((((x)->u.fld[4]).rtvec1))->elem[i]))->u.fld[0]).rtstr)
            ));
  }
       hash += canon_hash_string (((((((((x)->u.fld[4]).rtvec1))->elem[0]))->u.fld[0]).rtstr));
       x = (((((x)->u.fld[3]).rtvec1))->elem[0]);
       mode = ((enum machine_mode) (x)->mode);
       goto repeat;
     }
   return hash;
 }
      break;
    default:
      break;
    }
  i = (rtx_length[(int) (code)]) - 1;
  hash += (unsigned) code + (unsigned) ((enum machine_mode) (x)->mode);
  fmt = (rtx_format[(int) (code)]);
  for (; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   rtx tem = (((x)->u.fld[i]).rtx1);
   if (i == 0)
     {
       x = tem;
       goto repeat;
     }
   hash += canon_hash (tem, 0);
 }
      else if (fmt[i] == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   hash += canon_hash ((((((x)->u.fld[i]).rtvec1))->elem[j]), 0);
      else if (fmt[i] == 's')
 hash += canon_hash_string ((((x)->u.fld[i]).rtstr));
      else if (fmt[i] == 'i')
 {
   unsigned tem = (((x)->u.fld[i]).rtint);
   hash += tem;
 }
      else if (fmt[i] == '0' || fmt[i] == 't')
 ;
      else
 fancy_abort ("gcc.c", 424231, "?");
    }
  return hash;
}
static unsigned
safe_hash (rtx x, enum machine_mode mode)
{
  int save_do_not_record = do_not_record;
  int save_hash_arg_in_memory = hash_arg_in_memory;
  unsigned hash = canon_hash (x, mode);
  hash_arg_in_memory = save_hash_arg_in_memory;
  do_not_record = save_do_not_record;
  return hash;
}
static int
exp_equiv_p (rtx x, rtx y, int validate, int equal_values)
{
  int i, j;
  enum rtx_code code;
  const char *fmt;
  if (x == y && !validate)
    return 1;
  if (x == 0 || y == 0)
    return x == y;
  code = ((enum rtx_code) (x)->code);
  if (code != ((enum rtx_code) (y)->code))
    {
      if (!equal_values)
 return 0;
      if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR) && (((enum rtx_code) (y)->code) == REG)
   && (((((((((y)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((y)->u.fld[0]).rtuint)))))->reg_qty) != (int) ((((y)->u.fld[0]).rtuint))))
 {
   int y_q = ((((((((y)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((y)->u.fld[0]).rtuint)))))->reg_qty);
   struct qty_table_elem *y_ent = &qty_table[y_q];
   if (((enum machine_mode) (y)->mode) == y_ent->mode
       && rtx_equal_p (x, y_ent->const_rtx)
       && (! validate || ((((((((y)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((y)->u.fld[0]).rtuint)))))->reg_in_table) == ((((((((y)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((y)->u.fld[0]).rtuint)))))->reg_tick)))
     return 1;
 }
      if (((rtx_class[(int) (((enum rtx_code) (y)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (y)->code) == CONST_VECTOR) && code == REG
   && (((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty) != (int) ((((x)->u.fld[0]).rtuint))))
 {
   int x_q = ((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty);
   struct qty_table_elem *x_ent = &qty_table[x_q];
   if (((enum machine_mode) (x)->mode) == x_ent->mode
       && rtx_equal_p (y, x_ent->const_rtx))
     return 1;
 }
      return 0;
    }
  if (((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode))
    return 0;
  switch (code)
    {
    case PC:
    case CC0:
    case CONST_INT:
      return x == y;
    case LABEL_REF:
      return (((x)->u.fld[0]).rtx1) == (((y)->u.fld[0]).rtx1);
    case SYMBOL_REF:
      return (((x)->u.fld[0]).rtstr) == (((y)->u.fld[0]).rtstr);
    case REG:
      {
 unsigned int regno = (((y)->u.fld[0]).rtuint);
 unsigned int endregno
   = regno + (regno >= 53 ? 1
       : hard_regno_nregs[regno][((enum machine_mode) (y)->mode)]);
 unsigned int i;
 if (((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty) != (((((regno) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((regno))))->reg_qty))
   return 0;
 if (! validate)
   return 1;
 for (i = regno; i < endregno; i++)
   if ((((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_in_table) != (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_tick))
     return 0;
 return 1;
      }
    case PLUS:
    case MULT:
    case AND:
    case IOR:
    case XOR:
    case NE:
    case EQ:
      return ((exp_equiv_p ((((x)->u.fld[0]).rtx1), (((y)->u.fld[0]).rtx1), validate, equal_values)
        && exp_equiv_p ((((x)->u.fld[1]).rtx1), (((y)->u.fld[1]).rtx1),
          validate, equal_values))
       || (exp_equiv_p ((((x)->u.fld[0]).rtx1), (((y)->u.fld[1]).rtx1),
          validate, equal_values)
    && exp_equiv_p ((((x)->u.fld[1]).rtx1), (((y)->u.fld[0]).rtx1),
      validate, equal_values)));
    case ASM_OPERANDS:
      if ((((x))->volatil) || (((y))->volatil))
 return 0;
      if (((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode)
   || strcmp ((((x)->u.fld[0]).rtstr), (((y)->u.fld[0]).rtstr))
   || strcmp ((((x)->u.fld[1]).rtstr),
       (((y)->u.fld[1]).rtstr))
   || (((x)->u.fld[2]).rtint) != (((y)->u.fld[2]).rtint)
   || (((((x)->u.fld[3]).rtvec1))->num_elem) != (((((y)->u.fld[3]).rtvec1))->num_elem))
 return 0;
      if ((((((x)->u.fld[3]).rtvec1))->num_elem))
 {
   for (i = (((((x)->u.fld[3]).rtvec1))->num_elem) - 1; i >= 0; i--)
     if (! exp_equiv_p ((((((x)->u.fld[3]).rtvec1))->elem[i]),
          (((((y)->u.fld[3]).rtvec1))->elem[i]),
          validate, equal_values)
  || strcmp (((((((((x)->u.fld[4]).rtvec1))->elem[i]))->u.fld[0]).rtstr),
      ((((((((y)->u.fld[4]).rtvec1))->elem[i]))->u.fld[0]).rtstr)))
       return 0;
 }
      return 1;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      switch (fmt[i])
 {
 case 'e':
   if (! exp_equiv_p ((((x)->u.fld[i]).rtx1), (((y)->u.fld[i]).rtx1), validate, equal_values))
     return 0;
   break;
 case 'E':
   if ((((((x)->u.fld[i]).rtvec1))->num_elem) != (((((y)->u.fld[i]).rtvec1))->num_elem))
     return 0;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     if (! exp_equiv_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), (((((y)->u.fld[i]).rtvec1))->elem[j]),
          validate, equal_values))
       return 0;
   break;
 case 's':
   if (strcmp ((((x)->u.fld[i]).rtstr), (((y)->u.fld[i]).rtstr)))
     return 0;
   break;
 case 'i':
   if ((((x)->u.fld[i]).rtint) != (((y)->u.fld[i]).rtint))
     return 0;
   break;
 case 'w':
   if (((x)->u.hwint[i]) != ((y)->u.hwint[i]))
     return 0;
   break;
 case '0':
 case 't':
   break;
 default:
   fancy_abort ("gcc.c", 424445, "?");
 }
    }
  return 1;
}
static int
cse_rtx_varies_p (rtx x, int from_alias)
{
  if ((((enum rtx_code) (x)->code) == REG)
      && (((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty) != (int) ((((x)->u.fld[0]).rtuint))))
    {
      int x_q = ((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty);
      struct qty_table_elem *x_ent = &qty_table[x_q];
      if (((enum machine_mode) (x)->mode) == x_ent->mode
   && x_ent->const_rtx != (rtx) 0)
 return 0;
    }
  if (((enum rtx_code) (x)->code) == PLUS
      && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
      && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
      && ((((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))))->reg_qty) != (int) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint))))
    {
      int x0_q = (((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))))->reg_qty);
      struct qty_table_elem *x0_ent = &qty_table[x0_q];
      if ((((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) == x0_ent->mode)
   && x0_ent->const_rtx != (rtx) 0)
 return 0;
    }
  if (((enum rtx_code) (x)->code) == PLUS
      && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
      && (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG)
      && ((((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))))->reg_qty) != (int) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))
      && ((((((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtuint)))))->reg_qty) != (int) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtuint))))
    {
      int x0_q = (((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))))->reg_qty);
      int x1_q = (((((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtuint)))))->reg_qty);
      struct qty_table_elem *x0_ent = &qty_table[x0_q];
      struct qty_table_elem *x1_ent = &qty_table[x1_q];
      if ((((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) == x0_ent->mode)
   && x0_ent->const_rtx != (rtx) 0
   && (((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode) == x1_ent->mode)
   && x1_ent->const_rtx != (rtx) 0)
 return 0;
    }
  return rtx_varies_p (x, from_alias);
}
static rtx
canon_reg (rtx x, rtx insn)
{
  int i;
  enum rtx_code code;
  const char *fmt;
  if (x == 0)
    return x;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case PC:
    case CC0:
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      return x;
    case REG:
      {
 int first;
 int q;
 struct qty_table_elem *ent;
 if ((((x)->u.fld[0]).rtuint) < 53
     || ! (((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty) != (int) ((((x)->u.fld[0]).rtuint))))
   return x;
 q = ((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty);
 ent = &qty_table[q];
 first = ent->first_reg;
 return (first >= 53 ? (cfun->emit->x_regno_reg_rtx)[first]
  : (regclass_map[first]) == NO_REGS ? x
  : gen_rtx_REG (ent->mode, first));
      }
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      int j;
      if (fmt[i] == 'e')
 {
   rtx new = canon_reg ((((x)->u.fld[i]).rtx1), insn);
   int insn_code;
   if (insn != 0 && new != 0
       && (((enum rtx_code) (new)->code) == REG) && (((enum rtx_code) ((((x)->u.fld[i]).rtx1))->code) == REG)
       && ((((((new)->u.fld[0]).rtuint) < 53)
     != (((((((x)->u.fld[i]).rtx1))->u.fld[0]).rtuint) < 53))
    || (insn_code = ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn))) < 0
    || insn_data[insn_code].n_dups > 0))
     validate_change (insn, &(((x)->u.fld[i]).rtx1), new, 1);
   else
     (((x)->u.fld[i]).rtx1) = new;
 }
      else if (fmt[i] == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   (((((x)->u.fld[i]).rtvec1))->elem[j]) = canon_reg ((((((x)->u.fld[i]).rtvec1))->elem[j]), insn);
    }
  return x;
}
static void
find_best_addr (rtx insn, rtx *loc, enum machine_mode mode)
{
  struct table_elt *elt;
  rtx addr = *loc;
  struct table_elt *p;
  int found_better = 1;
  int save_do_not_record = do_not_record;
  int save_hash_arg_in_memory = hash_arg_in_memory;
  int addr_volatile;
  int regno;
  unsigned hash;
  if ((((enum rtx_code) (addr)->code) == PLUS
       && (((enum rtx_code) ((((addr)->u.fld[0]).rtx1))->code) == REG)
       && ((enum rtx_code) ((((addr)->u.fld[1]).rtx1))->code) == CONST_INT
       && (regno = ((((((addr)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
    regno == 20 || regno == 6
    || regno == 16))
      || ((((enum rtx_code) (addr)->code) == REG)
   && (regno = (((addr)->u.fld[0]).rtuint), regno == 20
       || regno == 6
       || regno == 16))
      || constant_address_p (addr))
    return;
  if (!(((enum rtx_code) (addr)->code) == REG))
    {
      rtx folded = fold_rtx (copy_rtx (addr), (rtx) 0);
      int addr_folded_cost = address_cost (folded, mode);
      int addr_cost = address_cost (addr, mode);
      if ((addr_folded_cost < addr_cost
    || (addr_folded_cost == addr_cost
        && (rtx_cost (folded, MEM) > rtx_cost (addr, MEM)
     || approx_reg_cost (folded) < approx_reg_cost (addr))))
   && validate_change (insn, loc, folded, 0))
 addr = folded;
    }
  do_not_record = 0;
  hash = (((((enum rtx_code) (addr)->code) == REG) && (((addr)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((addr)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((addr)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (addr, (0 ? DImode : SImode))) & ((1 << 5) - 1));
  addr_volatile = do_not_record;
  do_not_record = save_do_not_record;
  hash_arg_in_memory = save_hash_arg_in_memory;
  if (addr_volatile)
    return;
  elt = lookup (addr, hash, (0 ? DImode : SImode));
  if (elt)
    {
      for (p = elt->first_same_value; p; p = p->next_same_value)
 p->flag = 0;
      while (found_better)
 {
   int best_addr_cost = address_cost (*loc, mode);
   int best_rtx_cost = (elt->cost + 1) >> 1;
   int exp_cost;
   struct table_elt *best_elt = elt;
   found_better = 0;
   for (p = elt->first_same_value; p; p = p->next_same_value)
     if (! p->flag)
       {
  if (((((enum rtx_code) (p->exp)->code) == REG)
       || exp_equiv_p (p->exp, p->exp, 1, 0))
      && ((exp_cost = address_cost (p->exp, mode)) < best_addr_cost
   || (exp_cost == best_addr_cost
       && ((p->cost + 1) >> 1) > best_rtx_cost)))
    {
      found_better = 1;
      best_addr_cost = exp_cost;
      best_rtx_cost = (p->cost + 1) >> 1;
      best_elt = p;
    }
       }
   if (found_better)
     {
       if (validate_change (insn, loc,
       canon_reg (copy_rtx (best_elt->exp),
           (rtx) 0), 0))
  return;
       else
  best_elt->flag = 1;
     }
 }
    }
  if (flag_expensive_optimizations
      && (((rtx_class[(int) (((enum rtx_code) (*loc)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1)))
      && (((enum rtx_code) ((((*loc)->u.fld[0]).rtx1))->code) == REG))
    {
      rtx op1 = (((*loc)->u.fld[1]).rtx1);
      do_not_record = 0;
      hash = (((((enum rtx_code) ((((*loc)->u.fld[0]).rtx1))->code) == REG) && ((((((*loc)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) (((((((((((*loc)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((*loc)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash ((((*loc)->u.fld[0]).rtx1), (0 ? DImode : SImode))) & ((1 << 5) - 1));
      do_not_record = save_do_not_record;
      hash_arg_in_memory = save_hash_arg_in_memory;
      elt = lookup ((((*loc)->u.fld[0]).rtx1), hash, (0 ? DImode : SImode));
      if (elt == 0)
 return;
      for (p = elt->first_same_value; p; p = p->next_same_value)
 p->flag = 0;
      while (found_better)
 {
   int best_addr_cost = address_cost (*loc, mode);
   int best_rtx_cost = (((((enum rtx_code) (*loc)->code) == REG) ? 0 : notreg_cost (*loc, SET)) + 1) >> 1;
   struct table_elt *best_elt = elt;
   rtx best_rtx = *loc;
   int count;
   found_better = 0;
   for (p = elt->first_same_value, count = 0;
        p && count < 32;
        p = p->next_same_value, count++)
     if (! p->flag
  && ((((enum rtx_code) (p->exp)->code) == REG)
      || exp_equiv_p (p->exp, p->exp, 1, 0)))
       {
  rtx new = simplify_gen_binary (((enum rtx_code) (*loc)->code), (0 ? DImode : SImode),
            p->exp, op1);
  int new_cost;
  new_cost = address_cost (new, mode);
  if (new_cost < best_addr_cost
      || (new_cost == best_addr_cost
   && (((((enum rtx_code) (new)->code) == REG) ? 0 : notreg_cost (new, SET)) + 1) >> 1 > best_rtx_cost))
    {
      found_better = 1;
      best_addr_cost = new_cost;
      best_rtx_cost = (((((enum rtx_code) (new)->code) == REG) ? 0 : notreg_cost (new, SET)) + 1) >> 1;
      best_elt = p;
      best_rtx = new;
    }
       }
   if (found_better)
     {
       if (validate_change (insn, loc,
       canon_reg (copy_rtx (best_rtx),
           (rtx) 0), 0))
  return;
       else
  best_elt->flag = 1;
     }
 }
    }
}
static enum rtx_code
find_comparison_args (enum rtx_code code, rtx *parg1, rtx *parg2,
        enum machine_mode *pmode1, enum machine_mode *pmode2)
{
  rtx arg1, arg2;
  arg1 = *parg1, arg2 = *parg2;
  while (arg2 == (const_tiny_rtx[0][(int) (((enum machine_mode) (arg1)->mode))]))
    {
      rtx x = 0;
      int reverse_code = 0;
      struct table_elt *p = 0;
      if (((enum rtx_code) (arg1)->code) == COMPARE && arg2 == (const_int_rtx[64]))
 x = arg1;
      else if ((((rtx_class[(int) (((enum rtx_code) (arg1)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
 {
   if (code == NE
       || (mode_class[((enum machine_mode) (arg1)->mode)] == MODE_INT
    && code == LT && 1 == -1)
       )
     x = arg1;
   else if (code == EQ
     || (mode_class[((enum machine_mode) (arg1)->mode)] == MODE_INT
         && code == GE && 1 == -1)
     )
     x = arg1, reverse_code = 1;
 }
      if (x == 0)
 p = lookup (arg1, safe_hash (arg1, ((enum machine_mode) (arg1)->mode)) & ((1 << 5) - 1),
      ((enum machine_mode) (arg1)->mode));
      if (p)
 {
   p = p->first_same_value;
   if (p->is_const)
     break;
 }
      for (; p; p = p->next_same_value)
 {
   enum machine_mode inner_mode = ((enum machine_mode) (p->exp)->mode);
   if (! exp_equiv_p (p->exp, p->exp, 1, 0))
     continue;
   if (((enum rtx_code) (p->exp)->code) == COMPARE
       || ((code == NE
     || (code == LT
         && mode_class[inner_mode] == MODE_INT
         && (((unsigned short) (((unsigned short) mode_size[inner_mode]) * 8))
      <= (8 * 4))
         && (1
      & ((long) 1
         << (((unsigned short) (((unsigned short) mode_size[inner_mode]) * 8)) - 1))))
     )
    && (((rtx_class[(int) (((enum rtx_code) (p->exp)->code))]) & (~1)) == (RTX_COMPARE & (~1)))))
     {
       x = p->exp;
       break;
     }
   else if ((code == EQ
      || (code == GE
   && mode_class[inner_mode] == MODE_INT
   && (((unsigned short) (((unsigned short) mode_size[inner_mode]) * 8))
       <= (8 * 4))
   && (1
       & ((long) 1
          << (((unsigned short) (((unsigned short) mode_size[inner_mode]) * 8)) - 1))))
      )
     && (((rtx_class[(int) (((enum rtx_code) (p->exp)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
     {
       reverse_code = 1;
       x = p->exp;
       break;
     }
   else if (!rtx_addr_can_trap_p (p->exp))
     {
       arg1 = p->exp;
       continue;
     }
 }
      if (x == 0)
 break;
      if (reverse_code)
 {
   enum rtx_code reversed = reversed_comparison_code (x, (rtx) 0);
   if (reversed == UNKNOWN)
     break;
   else
     code = reversed;
 }
      else if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
 code = ((enum rtx_code) (x)->code);
      arg1 = (((x)->u.fld[0]).rtx1), arg2 = (((x)->u.fld[1]).rtx1);
    }
  *pmode1 = ((enum machine_mode) (arg1)->mode), *pmode2 = ((enum machine_mode) (arg2)->mode);
  *parg1 = fold_rtx (arg1, 0), *parg2 = fold_rtx (arg2, 0);
  return code;
}
static rtx
fold_rtx (rtx x, rtx insn)
{
  enum rtx_code code;
  enum machine_mode mode;
  const char *fmt;
  int i;
  rtx new = 0;
  int copied = 0;
  int must_swap = 0;
  rtx folded_arg0;
  rtx folded_arg1;
  rtx const_arg0;
  rtx const_arg1;
  rtx const_arg2;
  enum machine_mode mode_arg0;
  if (x == 0)
    return x;
  mode = ((enum machine_mode) (x)->mode);
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
    case REG:
    case EXPR_LIST:
      return x;
    case PC:
      {
 rtx next;
 if (insn && tablejump_p (insn, &next, ((void *)0)))
   return gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (next));
      }
      break;
    case SUBREG:
      if ((new = lookup_as_function (x, CONST_INT)) != 0
   || (new = lookup_as_function (x, CONST_DOUBLE)) != 0)
 return new;
      if (((unsigned short) mode_size[mode]) > ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]))
 {
   enum machine_mode imode = ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode);
   struct table_elt *elt;
   if (((unsigned short) mode_size[mode]) <= (0 ? 8 : 4)
       && ((unsigned short) mode_size[imode]) <= (0 ? 8 : 4)
       && (elt = lookup ((((x)->u.fld[0]).rtx1), (((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG) && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) (((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash ((((x)->u.fld[0]).rtx1), imode)) & ((1 << 5) - 1)),
    imode)) != 0)
     for (elt = elt->first_same_value; elt; elt = elt->next_same_value)
       {
  if (((rtx_class[(int) (((enum rtx_code) (elt->exp)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (elt->exp)->code) == CONST_VECTOR)
      && ((enum machine_mode) (elt->exp)->mode) == VOIDmode)
    return elt->exp;
  if (((enum rtx_code) (elt->exp)->code) == SUBREG
      && ((enum machine_mode) ((((elt->exp)->u.fld[0]).rtx1))->mode) == mode
      && exp_equiv_p (elt->exp, elt->exp, 1, 0))
    return copy_rtx ((((elt->exp)->u.fld[0]).rtx1));
       }
   return x;
 }
      folded_arg0 = fold_rtx ((((x)->u.fld[0]).rtx1), insn);
      const_arg0 = equiv_constant (folded_arg0);
      if (const_arg0)
 folded_arg0 = const_arg0;
      if (folded_arg0 != (((x)->u.fld[0]).rtx1))
 {
   new = simplify_subreg (mode, folded_arg0,
     ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode), (((x)->u.fld[1]).rtuint));
   if (new)
     return new;
 }
      if ((((enum rtx_code) (folded_arg0)->code) == REG)
   && ((unsigned short) mode_size[mode]) < ((unsigned short) mode_size[((enum machine_mode) (folded_arg0)->mode)]))
 {
   struct table_elt *elt;
   elt = lookup (folded_arg0,
   (((((enum rtx_code) (folded_arg0)->code) == REG) && (((folded_arg0)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((folded_arg0)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((folded_arg0)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (folded_arg0, ((enum machine_mode) (folded_arg0)->mode))) & ((1 << 5) - 1)),
   ((enum machine_mode) (folded_arg0)->mode));
   if (elt)
     elt = elt->first_same_value;
   if (subreg_lowpart_p (x))
     for (; elt; elt = elt->next_same_value)
       {
  enum rtx_code eltcode = ((enum rtx_code) (elt->exp)->code);
         if (((rtx_class[(int) (((enum rtx_code) (elt->exp)->code))]) == RTX_UNARY)
      && eltcode != SIGN_EXTEND
      && eltcode != ZERO_EXTEND
      && ((enum rtx_code) ((((elt->exp)->u.fld[0]).rtx1))->code) == SUBREG
      && ((enum machine_mode) (((((((elt->exp)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode) == mode
      && (mode_class[mode]
          == mode_class[((enum machine_mode) ((((elt->exp)->u.fld[0]).rtx1))->mode)]))
    {
      rtx op0 = ((((((elt->exp)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
      if (!(((enum rtx_code) (op0)->code) == REG) && ! ((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
        op0 = fold_rtx (op0, (rtx) 0);
      op0 = equiv_constant (op0);
      if (op0)
        new = simplify_unary_operation (((enum rtx_code) (elt->exp)->code), mode,
            op0, mode);
    }
         else if ((((rtx_class[(int) (((enum rtx_code) (elt->exp)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1)))
           && eltcode != DIV && eltcode != MOD
           && eltcode != UDIV && eltcode != UMOD
           && eltcode != ASHIFTRT && eltcode != LSHIFTRT
           && eltcode != ROTATE && eltcode != ROTATERT
           && ((((enum rtx_code) ((((elt->exp)->u.fld[0]).rtx1))->code) == SUBREG
         && (((enum machine_mode) (((((((elt->exp)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)
      == mode))
        || ((rtx_class[(int) (((enum rtx_code) ((((elt->exp)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((elt->exp)->u.fld[0]).rtx1))->code) == CONST_VECTOR))
           && ((((enum rtx_code) ((((elt->exp)->u.fld[1]).rtx1))->code) == SUBREG
         && (((enum machine_mode) (((((((elt->exp)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->mode)
      == mode))
        || ((rtx_class[(int) (((enum rtx_code) ((((elt->exp)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((elt->exp)->u.fld[1]).rtx1))->code) == CONST_VECTOR)))
    {
      rtx op0 = gen_lowpart_common (mode, (((elt->exp)->u.fld[0]).rtx1));
      rtx op1 = gen_lowpart_common (mode, (((elt->exp)->u.fld[1]).rtx1));
      if (op0 && !(((enum rtx_code) (op0)->code) == REG) && ! ((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
        op0 = fold_rtx (op0, (rtx) 0);
      if (op0)
        op0 = equiv_constant (op0);
      if (op1 && !(((enum rtx_code) (op1)->code) == REG) && ! ((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op1)->code) == CONST_VECTOR))
        op1 = fold_rtx (op1, (rtx) 0);
      if (op1)
        op1 = equiv_constant (op1);
      if (op0 && op1
          && ((enum rtx_code) (elt->exp)->code) == ASHIFT
          && ((enum rtx_code) (op1)->code) == CONST_INT
          && ((op1)->u.hwint[0]) >= ((unsigned short) (((unsigned short) mode_size[mode]) * 8)))
        {
          if (((op1)->u.hwint[0])
       < ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (elt->exp)->mode)]) * 8)))
     new = (const_tiny_rtx[0][(int) (mode)]);
          else
     new = 0;
        }
      else if (op0 && op1)
        new = simplify_binary_operation (((enum rtx_code) (elt->exp)->code), mode, op0, op1);
    }
         else if (((enum rtx_code) (elt->exp)->code) == SUBREG
           && ((enum machine_mode) ((((elt->exp)->u.fld[0]).rtx1))->mode) == mode
           && (((unsigned short) mode_size[((enum machine_mode) (folded_arg0)->mode)])
        <= (0 ? 8 : 4))
           && exp_equiv_p (elt->exp, elt->exp, 1, 0))
    new = copy_rtx ((((elt->exp)->u.fld[0]).rtx1));
         if (new)
    return new;
       }
   else
     for (; elt; elt = elt->next_same_value)
       {
        if (((enum rtx_code) (elt->exp)->code) == ZERO_EXTEND
      && subreg_lsb (x)
         >= ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((elt->exp)->u.fld[0]).rtx1))->mode)]) * 8)))
    return (const_tiny_rtx[0][(int) (mode)]);
       }
 }
      return x;
    case NOT:
    case NEG:
      new = lookup_as_function ((((x)->u.fld[0]).rtx1), code);
      if (new)
 return fold_rtx (copy_rtx ((((new)->u.fld[0]).rtx1)), insn);
      break;
    case MEM:
      if (insn != 0)
 find_best_addr (insn, &(((x)->u.fld[0]).rtx1), ((enum machine_mode) (x)->mode));
      {
 rtx addr = fold_rtx ((((x)->u.fld[0]).rtx1), (rtx) 0);
 rtx base = 0;
 long offset = 0;
 if ((((enum rtx_code) (addr)->code) == REG)
     && (((((((((addr)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((addr)->u.fld[0]).rtuint)))))->reg_qty) != (int) ((((addr)->u.fld[0]).rtuint))))
   {
     int addr_q = ((((((((addr)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((addr)->u.fld[0]).rtuint)))))->reg_qty);
     struct qty_table_elem *addr_ent = &qty_table[addr_q];
     if (((enum machine_mode) (addr)->mode) == addr_ent->mode
  && addr_ent->const_rtx != (rtx) 0)
       addr = addr_ent->const_rtx;
   }
 if (((enum rtx_code) (addr)->code) == SYMBOL_REF || ((enum rtx_code) (addr)->code) == LABEL_REF)
   base = addr;
 else if (((enum rtx_code) (addr)->code) == CONST && ((enum rtx_code) ((((addr)->u.fld[0]).rtx1))->code) == PLUS
   && ((enum rtx_code) (((((((addr)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
   {
     base = ((((((addr)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
     offset = ((((((((addr)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
   }
 else if (((enum rtx_code) (addr)->code) == LO_SUM
   && ((enum rtx_code) ((((addr)->u.fld[1]).rtx1))->code) == SYMBOL_REF)
   base = (((addr)->u.fld[1]).rtx1);
 if (base && ((enum rtx_code) (base)->code) == SYMBOL_REF
     && (((base))->unchanging))
   {
     rtx constant = get_pool_constant (base);
     enum machine_mode const_mode = get_pool_mode (base);
     rtx new;
     if (((rtx_class[(int) (((enum rtx_code) (constant)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (constant)->code) == CONST_VECTOR) && ((enum rtx_code) (constant)->code) != CONST_INT)
       {
  constant_pool_entries_cost = ((((enum rtx_code) (constant)->code) == REG) ? 0 : notreg_cost (constant, SET));
  constant_pool_entries_regcost = approx_reg_cost (constant);
       }
     if (offset == 0 && mode == const_mode)
       return constant;
     if (! ((rtx_class[(int) (((enum rtx_code) (constant)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (constant)->code) == CONST_VECTOR))
       return x;
     if (mode_class[mode] == MODE_INT
  && ((unsigned short) mode_size[mode]) == (0 ? 8 : 4)
  && offset % (0 ? 8 : 4) == 0
  && (new = operand_subword (constant,
        offset / (0 ? 8 : 4),
        0, const_mode)) != 0)
       return new;
     if (((0
    && offset == ((unsigned short) mode_size[((enum machine_mode) (constant)->mode)]) - 1)
   || (! 0 && offset == 0))
  && (new = rtl_hooks.gen_lowpart (mode, constant)) != 0)
       return new;
   }
 if (base && ((enum rtx_code) (base)->code) == LABEL_REF)
   {
     rtx label = (((base)->u.fld[0]).rtx1);
     rtx table_insn = (((label)->u.fld[2]).rtx1);
     if (table_insn && ((enum rtx_code) (table_insn)->code) == JUMP_INSN
  && ((enum rtx_code) ((((table_insn)->u.fld[5]).rtx1))->code) == ADDR_VEC)
       {
  rtx table = (((table_insn)->u.fld[5]).rtx1);
  if (offset >= 0
      && (offset / ((unsigned short) mode_size[((enum machine_mode) (table)->mode)])
   < (((((table)->u.fld[0]).rtvec1))->num_elem)))
    return (((((table)->u.fld[0]).rtvec1))->elem[offset / ((unsigned short) mode_size[((enum machine_mode) (table)->mode)])])
                                                ;
       }
     if (table_insn && ((enum rtx_code) (table_insn)->code) == JUMP_INSN
  && ((enum rtx_code) ((((table_insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC)
       {
  rtx table = (((table_insn)->u.fld[5]).rtx1);
  if (offset >= 0
      && (offset / ((unsigned short) mode_size[((enum machine_mode) (table)->mode)])
   < (((((table)->u.fld[1]).rtvec1))->num_elem)))
    {
      offset /= ((unsigned short) mode_size[((enum machine_mode) (table)->mode)]);
      new = gen_rtx_fmt_ee (MINUS, ((0 ? DImode : SImode)), ((((((table)->u.fld[1]).rtvec1))->elem[offset])), ((((table)->u.fld[0]).rtx1)))
                      ;
      if (((enum machine_mode) (table)->mode) != (0 ? DImode : SImode))
        new = gen_rtx_fmt_e (TRUNCATE, (((enum machine_mode) (table)->mode)), (new));
      return gen_rtx_fmt_e (CONST, (((enum machine_mode) (new)->mode)), (new));
    }
       }
   }
 return x;
      }
    case CALL:
      if (((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == CONST_VECTOR))
 return x;
      break;
    case ASM_OPERANDS:
      for (i = (((((x)->u.fld[3]).rtvec1))->num_elem) - 1; i >= 0; i--)
 validate_change (insn, &(((((x)->u.fld[3]).rtvec1))->elem[i]),
    fold_rtx ((((((x)->u.fld[3]).rtvec1))->elem[i]), insn), 0);
      break;
    default:
      break;
    }
  const_arg0 = 0;
  const_arg1 = 0;
  const_arg2 = 0;
  mode_arg0 = VOIDmode;
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    if (fmt[i] == 'e')
      {
 rtx arg = (((x)->u.fld[i]).rtx1);
 rtx folded_arg = arg, const_arg = 0;
 enum machine_mode mode_arg = ((enum machine_mode) (arg)->mode);
 rtx cheap_arg, expensive_arg;
 rtx replacements[2];
 int j;
 int old_cost = ((((enum rtx_code) ((((x)->u.fld[i]).rtx1))->code) == REG) ? 0 : notreg_cost ((((x)->u.fld[i]).rtx1), code));
 switch (((enum rtx_code) (arg)->code))
   {
   case REG:
     if ((((((((((arg)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((arg)->u.fld[0]).rtuint)))))->reg_qty) != (int) ((((arg)->u.fld[0]).rtuint))))
       {
  int arg_q = ((((((((arg)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((arg)->u.fld[0]).rtuint)))))->reg_qty);
  struct qty_table_elem *arg_ent = &qty_table[arg_q];
  if (arg_ent->const_rtx != (rtx) 0
      && !(((enum rtx_code) (arg_ent->const_rtx)->code) == REG)
      && ((enum rtx_code) (arg_ent->const_rtx)->code) != PLUS)
    const_arg
      = rtl_hooks.gen_lowpart (((enum machine_mode) (arg)->mode),
            arg_ent->const_rtx);
       }
     break;
   case CONST:
   case CONST_INT:
   case SYMBOL_REF:
   case LABEL_REF:
   case CONST_DOUBLE:
   case CONST_VECTOR:
     const_arg = arg;
     break;
   default:
     folded_arg = fold_rtx (arg, insn);
     const_arg = equiv_constant (folded_arg);
   }
 switch (i)
   {
   case 0:
     folded_arg0 = folded_arg;
     const_arg0 = const_arg;
     mode_arg0 = mode_arg;
     break;
   case 1:
     folded_arg1 = folded_arg;
     const_arg1 = const_arg;
     break;
   case 2:
     const_arg2 = const_arg;
     break;
   }
 if (const_arg == 0 || const_arg == folded_arg
     || ((((enum rtx_code) (const_arg)->code) == REG) ? 0 : notreg_cost (const_arg, code)) > ((((enum rtx_code) (folded_arg)->code) == REG) ? 0 : notreg_cost (folded_arg, code)))
   cheap_arg = folded_arg, expensive_arg = const_arg;
 else
   cheap_arg = const_arg, expensive_arg = folded_arg;
 if (cheap_arg == (((x)->u.fld[i]).rtx1))
   continue;
 if (insn == 0 && ! copied)
   {
     x = copy_rtx (x);
     copied = 1;
   }
 replacements[0] = cheap_arg;
 replacements[1] = expensive_arg;
 for (j = 0; j < 2 && replacements[j]; j++)
   {
     int new_cost = ((((enum rtx_code) (replacements[j])->code) == REG) ? 0 : notreg_cost (replacements[j], code));
     if (new_cost > old_cost
  || (new_cost == old_cost && ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[i]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[i]).rtx1))->code) == CONST_VECTOR)))
       break;
     if ((rtx_class[(int) (code)]) == RTX_UNARY
  && ((enum machine_mode) (replacements[j])->mode) != mode_arg0
  && (code == ZERO_EXTEND
      || code == SIGN_EXTEND
      || code == TRUNCATE
      || code == FLOAT_TRUNCATE
      || code == FLOAT_EXTEND
      || code == FLOAT
      || code == FIX
      || code == UNSIGNED_FLOAT
      || code == UNSIGNED_FIX))
       continue;
     if (validate_change (insn, &(((x)->u.fld[i]).rtx1), replacements[j], 0))
       break;
     if ((rtx_class[(int) (code)]) == RTX_COMM_COMPARE
  || (rtx_class[(int) (code)]) == RTX_COMM_ARITH)
       {
  validate_change (insn, &(((x)->u.fld[i]).rtx1), (((x)->u.fld[1 - i]).rtx1), 1);
  validate_change (insn, &(((x)->u.fld[1 - i]).rtx1), replacements[j], 1);
  if (apply_change_group ())
    {
      rtx tem;
      tem = (((x)->u.fld[0]).rtx1); (((x)->u.fld[0]).rtx1) = (((x)->u.fld[1]).rtx1);
           (((x)->u.fld[1]).rtx1) = tem;
      must_swap = 1;
      break;
    }
       }
   }
      }
    else
      {
 if (fmt[i] == 'E')
   {;}
      }
  if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~2)) == (RTX_COMM_COMPARE & (~2))))
    {
      if (must_swap
   || swap_commutative_operands_p (const_arg0 ? const_arg0
           : (((x)->u.fld[0]).rtx1),
       const_arg1 ? const_arg1
           : (((x)->u.fld[1]).rtx1)))
 {
   rtx tem = (((x)->u.fld[0]).rtx1);
   if (insn == 0 && ! copied)
     {
       x = copy_rtx (x);
       copied = 1;
     }
   validate_change (insn, &(((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1), 1);
   validate_change (insn, &(((x)->u.fld[1]).rtx1), tem, 1);
   if (apply_change_group ())
     {
       tem = const_arg0, const_arg0 = const_arg1, const_arg1 = tem;
       tem = folded_arg0, folded_arg0 = folded_arg1, folded_arg1 = tem;
     }
 }
    }
  switch ((rtx_class[(int) (code)]))
    {
    case RTX_UNARY:
      {
 int is_const = 0;
 if ((code == ZERO_EXTEND || code == SIGN_EXTEND)
     && mode_arg0 == VOIDmode)
   break;
 if (const_arg0 != 0 && ((enum rtx_code) (const_arg0)->code) == CONST)
   is_const = 1, const_arg0 = (((const_arg0)->u.fld[0]).rtx1);
 new = simplify_unary_operation (code, mode,
     const_arg0 ? const_arg0 : folded_arg0,
     mode_arg0);
 if (new != 0 && is_const)
   new = gen_rtx_fmt_e (CONST, (mode), (new));
      }
      break;
    case RTX_COMPARE:
    case RTX_COMM_COMPARE:
      if (const_arg0 == 0 || const_arg1 == 0)
 {
   struct table_elt *p0, *p1;
   rtx true_rtx = const_true_rtx, false_rtx = (const_int_rtx[64]);
   enum machine_mode mode_arg1;
   code = find_comparison_args (code, &folded_arg0, &folded_arg1,
           &mode_arg0, &mode_arg1);
   const_arg0 = equiv_constant (folded_arg0);
   const_arg1 = equiv_constant (folded_arg1);
   if (mode_arg0 == VOIDmode || mode_class[mode_arg0] == MODE_CC)
     break;
   if (const_arg0 == 0 || const_arg1 == 0)
     {
       if (const_arg1 == (const_int_rtx[64])
    && nonzero_address_p (folded_arg0))
  {
    if (code == EQ)
      return false_rtx;
    else if (code == NE)
      return true_rtx;
  }
       if (folded_arg0 == folded_arg1
    || ((((enum rtx_code) (folded_arg0)->code) == REG)
        && (((enum rtx_code) (folded_arg1)->code) == REG)
        && (((((((((folded_arg0)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((folded_arg0)->u.fld[0]).rtuint)))))->reg_qty)
     == ((((((((folded_arg1)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((folded_arg1)->u.fld[0]).rtuint)))))->reg_qty)))
    || ((p0 = lookup (folded_arg0,
        (safe_hash (folded_arg0, mode_arg0)
         & ((1 << 5) - 1)), mode_arg0))
        && (p1 = lookup (folded_arg1,
           (safe_hash (folded_arg1, mode_arg0)
     & ((1 << 5) - 1)), mode_arg0))
        && p0->first_same_value == p1->first_same_value))
  {
    if (!(((mode_class[mode_arg0] == MODE_FLOAT || mode_class[mode_arg0] == MODE_COMPLEX_FLOAT || mode_class[mode_arg0] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
      return ((code == EQ || code == LE || code == GE
        || code == LEU || code == GEU || code == UNEQ
        || code == UNLE || code == UNGE
        || code == ORDERED)
       ? true_rtx : false_rtx);
    if (code == UNEQ || code == UNLE || code == UNGE)
      return true_rtx;
    if (code == LTGT || code == LT || code == GT)
      return false_rtx;
  }
       else if ((((enum rtx_code) (folded_arg0)->code) == REG))
  {
    int qty = ((((((((folded_arg0)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((folded_arg0)->u.fld[0]).rtuint)))))->reg_qty);
    if ((((((((((folded_arg0)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((folded_arg0)->u.fld[0]).rtuint)))))->reg_qty) != (int) ((((folded_arg0)->u.fld[0]).rtuint))))
      {
        struct qty_table_elem *ent = &qty_table[qty];
        if ((comparison_dominates_p (ent->comparison_code, code)
      || (! (mode_class[mode_arg0] == MODE_FLOAT || mode_class[mode_arg0] == MODE_COMPLEX_FLOAT || mode_class[mode_arg0] == MODE_VECTOR_FLOAT)
          && comparison_dominates_p (ent->comparison_code,
                reverse_condition (code))))
     && (rtx_equal_p (ent->comparison_const, folded_arg1)
         || (const_arg1
      && rtx_equal_p (ent->comparison_const,
        const_arg1))
         || ((((enum rtx_code) (folded_arg1)->code) == REG)
      && (((((((((folded_arg1)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((folded_arg1)->u.fld[0]).rtuint)))))->reg_qty) == ent->comparison_qty))))
   return (comparison_dominates_p (ent->comparison_code, code)
    ? true_rtx : false_rtx);
      }
  }
     }
 }
      if (const_arg1 == (const_int_rtx[64]))
 {
   rtx y = lookup_as_function (folded_arg0, IOR);
   rtx inner_const;
   if (y != 0
       && (inner_const = equiv_constant ((((y)->u.fld[1]).rtx1))) != 0
       && ((enum rtx_code) (inner_const)->code) == CONST_INT
       && ((inner_const)->u.hwint[0]) != 0)
     {
       int sign_bitnum = ((unsigned short) (((unsigned short) mode_size[mode_arg0]) * 8)) - 1;
       int has_sign = ((8 * 4) >= sign_bitnum
         && (((inner_const)->u.hwint[0])
      & ((long) 1 << sign_bitnum)));
       rtx true_rtx = const_true_rtx, false_rtx = (const_int_rtx[64]);
       switch (code)
  {
  case EQ:
    return false_rtx;
  case NE:
    return true_rtx;
  case LT: case LE:
    if (has_sign)
      return true_rtx;
    break;
  case GT: case GE:
    if (has_sign)
      return false_rtx;
    break;
  default:
    break;
  }
     }
 }
      {
 rtx op0 = const_arg0 ? const_arg0 : folded_arg0;
 rtx op1 = const_arg1 ? const_arg1 : folded_arg1;
        new = simplify_relational_operation (code, mode, mode_arg0, op0, op1);
      }
      break;
    case RTX_BIN_ARITH:
    case RTX_COMM_ARITH:
      switch (code)
 {
 case PLUS:
   if (const_arg1 && ((enum rtx_code) (const_arg1)->code) == LABEL_REF)
     {
       rtx y
  = ((enum rtx_code) (folded_arg0)->code) == MINUS ? folded_arg0
  : lookup_as_function (folded_arg0, MINUS);
       if (y != 0 && ((enum rtx_code) ((((y)->u.fld[1]).rtx1))->code) == LABEL_REF
    && ((((((y)->u.fld[1]).rtx1))->u.fld[0]).rtx1) == (((const_arg1)->u.fld[0]).rtx1))
  return (((y)->u.fld[0]).rtx1);
       if ((y = (((enum rtx_code) (folded_arg0)->code) == CONST ? folded_arg0
   : lookup_as_function (folded_arg0, CONST))) != 0
    && ((enum rtx_code) ((((y)->u.fld[0]).rtx1))->code) == MINUS
    && ((enum rtx_code) (((((((y)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == LABEL_REF
    && (((((((((y)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1) == (((const_arg1)->u.fld[0]).rtx1))
  return ((((((y)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
     }
   if (const_arg0 && ((enum rtx_code) (const_arg0)->code) == LABEL_REF)
     {
       rtx y
  = ((enum rtx_code) (folded_arg1)->code) == MINUS ? folded_arg1
  : lookup_as_function (folded_arg1, MINUS);
       if (y != 0 && ((enum rtx_code) ((((y)->u.fld[1]).rtx1))->code) == LABEL_REF
    && ((((((y)->u.fld[1]).rtx1))->u.fld[0]).rtx1) == (((const_arg0)->u.fld[0]).rtx1))
  return (((y)->u.fld[0]).rtx1);
       if ((y = (((enum rtx_code) (folded_arg1)->code) == CONST ? folded_arg1
   : lookup_as_function (folded_arg1, CONST))) != 0
    && ((enum rtx_code) ((((y)->u.fld[0]).rtx1))->code) == MINUS
    && ((enum rtx_code) (((((((y)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == LABEL_REF
    && (((((((((y)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1) == (((const_arg0)->u.fld[0]).rtx1))
  return ((((((y)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
     }
   if (const_arg1 != 0 && ((enum rtx_code) (const_arg1)->code) == CONST_INT
       && ((const_arg1)->u.hwint[0]) < 0
       && ((const_arg1)->u.hwint[0]) !=
         ((long) 1 << ((8 * 4) - 1))
       && (((enum rtx_code) (folded_arg1)->code) == REG))
     {
       rtx new_const = gen_rtx_CONST_INT (VOIDmode, (long) (-((const_arg1)->u.hwint[0])));
       struct table_elt *p
  = lookup (new_const, safe_hash (new_const, mode) & ((1 << 5) - 1),
     mode);
       if (p)
  for (p = p->first_same_value; p; p = p->next_same_value)
    if ((((enum rtx_code) (p->exp)->code) == REG))
      return simplify_gen_binary (MINUS, mode, folded_arg0,
      canon_reg (p->exp, (rtx) 0));
     }
   goto from_plus;
 case MINUS:
   if (const_arg1 != 0 && ((enum rtx_code) (const_arg1)->code) == CONST_INT)
     {
       rtx y = lookup_as_function ((((x)->u.fld[0]).rtx1), PLUS);
       if (y && ((enum rtx_code) ((((y)->u.fld[1]).rtx1))->code) == CONST_INT)
  return fold_rtx (plus_constant_wide ((copy_rtx (y)), (long) (-((const_arg1)->u.hwint[0])))
                           ,
     (rtx) 0);
     }
 from_plus:
 case SMIN: case SMAX: case UMIN: case UMAX:
 case IOR: case AND: case XOR:
 case MULT:
 case ASHIFT: case LSHIFTRT: case ASHIFTRT:
   if ((((enum rtx_code) (folded_arg0)->code) == REG)
       && const_arg1 && ((enum rtx_code) (const_arg1)->code) == CONST_INT)
     {
       int is_shift
  = (code == ASHIFT || code == ASHIFTRT || code == LSHIFTRT);
       rtx y = lookup_as_function (folded_arg0, code);
       rtx inner_const;
       enum rtx_code associate_code;
       rtx new_const;
       if (y == 0
    || 0 == (inner_const
      = equiv_constant (fold_rtx ((((y)->u.fld[1]).rtx1), 0)))
    || ((enum rtx_code) (inner_const)->code) != CONST_INT
    || (((y)->u.fld[0]).rtx1) == folded_arg0)
  break;
       if (code == PLUS && const_arg1 == inner_const
    && ((0
     && exact_log2_wide ((unsigned long) (((const_arg1)->u.hwint[0]))) >= 0)
        || (0
     && exact_log2_wide ((unsigned long) (((const_arg1)->u.hwint[0]))) >= 0)
        || (0
     && exact_log2_wide ((unsigned long) (- ((const_arg1)->u.hwint[0]))) >= 0)
        || (0
     && exact_log2_wide ((unsigned long) (- ((const_arg1)->u.hwint[0]))) >= 0)))
  break;
       associate_code = (is_shift || code == MINUS ? PLUS : code);
       new_const = simplify_binary_operation (associate_code, mode,
           const_arg1, inner_const);
       if (new_const == 0)
  break;
       if (is_shift && ((enum rtx_code) (new_const)->code) == CONST_INT
    && ((new_const)->u.hwint[0]) >= ((unsigned short) (((unsigned short) mode_size[mode]) * 8)))
  {
    if (code == ASHIFTRT)
      new_const = gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1));
    else
      break;
  }
       y = copy_rtx ((((y)->u.fld[0]).rtx1));
       if (! reg_mentioned_p (folded_arg0, y))
  y = fold_rtx (y, insn);
       return simplify_gen_binary (code, mode, y, new_const);
     }
   break;
 case DIV: case UDIV:
   break;
 default:
   break;
 }
      new = simplify_binary_operation (code, mode,
           const_arg0 ? const_arg0 : folded_arg0,
           const_arg1 ? const_arg1 : folded_arg1);
      break;
    case RTX_OBJ:
      if (code == LO_SUM && const_arg0 != 0
   && ((enum rtx_code) (const_arg0)->code) == HIGH
   && rtx_equal_p ((((const_arg0)->u.fld[0]).rtx1), const_arg1))
 return const_arg1;
      break;
    case RTX_TERNARY:
    case RTX_BITFIELD_OPS:
      new = simplify_ternary_operation (code, mode, mode_arg0,
     const_arg0 ? const_arg0 : folded_arg0,
     const_arg1 ? const_arg1 : folded_arg1,
     const_arg2 ? const_arg2 : (((x)->u.fld[2]).rtx1));
      break;
    default:
      break;
    }
  return new ? new : x;
}
static rtx
equiv_constant (rtx x)
{
  if ((((enum rtx_code) (x)->code) == REG)
      && (((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty) != (int) ((((x)->u.fld[0]).rtuint))))
    {
      int x_q = ((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty);
      struct qty_table_elem *x_ent = &qty_table[x_q];
      if (x_ent->const_rtx)
 x = rtl_hooks.gen_lowpart (((enum machine_mode) (x)->mode), x_ent->const_rtx);
    }
  if (x == 0 || ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR))
    return x;
  if ((((enum rtx_code) (x)->code) == MEM))
    {
      struct table_elt *elt;
      x = fold_rtx (x, (rtx) 0);
      if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR))
 return x;
      elt = lookup (x, safe_hash (x, ((enum machine_mode) (x)->mode)) & ((1 << 5) - 1), ((enum machine_mode) (x)->mode));
      if (elt == 0)
 return 0;
      for (elt = elt->first_same_value; elt; elt = elt->next_same_value)
 if (elt->is_const && ((rtx_class[(int) (((enum rtx_code) (elt->exp)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (elt->exp)->code) == CONST_VECTOR))
   return elt->exp;
    }
  return 0;
}
rtx
gen_lowpart_if_possible (enum machine_mode mode, rtx x)
{
  rtx result = gen_lowpart_common (mode, x);
  if (result)
    return result;
  else if ((((enum rtx_code) (x)->code) == MEM))
    {
      int offset = 0;
      rtx new;
      if (0)
 offset = (((((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) > ((0 ? 8 : 4)) ? (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) : ((0 ? 8 : 4)))
    - ((((unsigned short) mode_size[mode])) > ((0 ? 8 : 4)) ? (((unsigned short) mode_size[mode])) : ((0 ? 8 : 4))));
      if (0)
 offset -= ((((0 ? 8 : 4)) < (((unsigned short) mode_size[mode])) ? ((0 ? 8 : 4)) : (((unsigned short) mode_size[mode])))
     - (((0 ? 8 : 4)) < (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) ? ((0 ? 8 : 4)) : (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]))));
      new = adjust_address_1 (x, mode, offset, 0, 1);
      if (! memory_address_p (mode, (((new)->u.fld[0]).rtx1)))
 return 0;
      return new;
    }
  else
    return 0;
}
static void
record_jump_equiv (rtx insn, int taken)
{
  int cond_known_true;
  rtx op0, op1;
  rtx set;
  enum machine_mode mode, mode0, mode1;
  int reversed_nonequality = 0;
  enum rtx_code code;
  if (! any_condjump_p (insn))
    return;
  set = pc_set (insn);
  if (taken)
    cond_known_true = (((((((set)->u.fld[1]).rtx1))->u.fld[2]).rtx1) == (global_rtl[GR_PC]));
  else
    cond_known_true = (((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1) == (global_rtl[GR_PC]));
  code = ((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code);
  op0 = fold_rtx ((((((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1), insn);
  op1 = fold_rtx ((((((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1), insn);
  code = find_comparison_args (code, &op0, &op1, &mode0, &mode1);
  if (! cond_known_true)
    {
      code = reversed_comparison_code_parts (code, op0, op1, insn);
      if (code == UNKNOWN)
 return;
    }
  mode = mode0;
  if (mode1 != VOIDmode)
    mode = mode1;
  record_jump_cond (code, mode, op0, op1, reversed_nonequality);
}
static void
record_jump_cond (enum rtx_code code, enum machine_mode mode, rtx op0,
    rtx op1, int reversed_nonequality)
{
  unsigned op0_hash, op1_hash;
  int op0_in_memory, op1_in_memory;
  struct table_elt *op0_elt, *op1_elt;
  if (code == EQ && ((enum rtx_code) (op0)->code) == SUBREG
      && (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)])
   > ((unsigned short) mode_size[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)])))
    {
      enum machine_mode inner_mode = ((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode);
      rtx tem = rtl_hooks.gen_lowpart (inner_mode, op1);
      record_jump_cond (code, mode, (((op0)->u.fld[0]).rtx1),
   tem ? tem : gen_rtx_SUBREG (inner_mode, op1, 0),
   reversed_nonequality);
    }
  if (code == EQ && ((enum rtx_code) (op1)->code) == SUBREG
      && (((unsigned short) mode_size[((enum machine_mode) (op1)->mode)])
   > ((unsigned short) mode_size[((enum machine_mode) ((((op1)->u.fld[0]).rtx1))->mode)])))
    {
      enum machine_mode inner_mode = ((enum machine_mode) ((((op1)->u.fld[0]).rtx1))->mode);
      rtx tem = rtl_hooks.gen_lowpart (inner_mode, op0);
      record_jump_cond (code, mode, (((op1)->u.fld[0]).rtx1),
   tem ? tem : gen_rtx_SUBREG (inner_mode, op0, 0),
   reversed_nonequality);
    }
  if (code == NE && ((enum rtx_code) (op0)->code) == SUBREG
      && subreg_lowpart_p (op0)
      && (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)])
   < ((unsigned short) mode_size[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)])))
    {
      enum machine_mode inner_mode = ((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode);
      rtx tem = rtl_hooks.gen_lowpart (inner_mode, op1);
      record_jump_cond (code, mode, (((op0)->u.fld[0]).rtx1),
   tem ? tem : gen_rtx_SUBREG (inner_mode, op1, 0),
   reversed_nonequality);
    }
  if (code == NE && ((enum rtx_code) (op1)->code) == SUBREG
      && subreg_lowpart_p (op1)
      && (((unsigned short) mode_size[((enum machine_mode) (op1)->mode)])
   < ((unsigned short) mode_size[((enum machine_mode) ((((op1)->u.fld[0]).rtx1))->mode)])))
    {
      enum machine_mode inner_mode = ((enum machine_mode) ((((op1)->u.fld[0]).rtx1))->mode);
      rtx tem = rtl_hooks.gen_lowpart (inner_mode, op0);
      record_jump_cond (code, mode, (((op1)->u.fld[0]).rtx1),
   tem ? tem : gen_rtx_SUBREG (inner_mode, op0, 0),
   reversed_nonequality);
    }
  do_not_record = 0;
  hash_arg_in_memory = 0;
  op0_hash = (((((enum rtx_code) (op0)->code) == REG) && (((op0)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((op0)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((op0)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (op0, mode)) & ((1 << 5) - 1));
  op0_in_memory = hash_arg_in_memory;
  if (do_not_record)
    return;
  do_not_record = 0;
  hash_arg_in_memory = 0;
  op1_hash = (((((enum rtx_code) (op1)->code) == REG) && (((op1)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((op1)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((op1)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (op1, mode)) & ((1 << 5) - 1));
  op1_in_memory = hash_arg_in_memory;
  if (do_not_record)
    return;
  op0_elt = lookup (op0, op0_hash, mode);
  op1_elt = lookup (op1, op1_hash, mode);
  if ((op0_elt != 0 && op1_elt != 0
       && op0_elt->first_same_value == op1_elt->first_same_value)
      || op0 == op1 || rtx_equal_p (op0, op1))
    return;
  if (code != EQ || (mode_class[((enum machine_mode) (op0)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (op0)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (op0)->mode)] == MODE_VECTOR_FLOAT))
    {
      struct qty_table_elem *ent;
      int qty;
      if (!(((enum rtx_code) (op1)->code) == REG))
 op1 = equiv_constant (op1);
      if ((reversed_nonequality && (mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
   || !(((enum rtx_code) (op0)->code) == REG) || op1 == 0)
 return;
      if (op0_elt == 0)
 {
   if (insert_regs (op0, ((void *)0), 0))
     {
       rehash_using_reg (op0);
       op0_hash = (((((enum rtx_code) (op0)->code) == REG) && (((op0)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((op0)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((op0)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (op0, mode)) & ((1 << 5) - 1));
       if (! ((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op1)->code) == CONST_VECTOR))
  op1_hash = (((((enum rtx_code) (op1)->code) == REG) && (((op1)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((op1)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((op1)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (op1, mode)) & ((1 << 5) - 1));
     }
   op0_elt = hash_insert (op0, ((void *)0), op0_hash, mode);
   op0_elt->in_memory = op0_in_memory;
 }
      qty = ((((((((op0)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((op0)->u.fld[0]).rtuint)))))->reg_qty);
      ent = &qty_table[qty];
      ent->comparison_code = code;
      if ((((enum rtx_code) (op1)->code) == REG))
 {
   op1_elt = lookup (op1, op1_hash, mode);
   if (op1_elt == 0)
     {
       if (insert_regs (op1, ((void *)0), 0))
  {
    rehash_using_reg (op1);
    op1_hash = (((((enum rtx_code) (op1)->code) == REG) && (((op1)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((op1)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((op1)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (op1, mode)) & ((1 << 5) - 1));
  }
       op1_elt = hash_insert (op1, ((void *)0), op1_hash, mode);
       op1_elt->in_memory = op1_in_memory;
     }
   ent->comparison_const = (rtx) 0;
   ent->comparison_qty = ((((((((op1)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((op1)->u.fld[0]).rtuint)))))->reg_qty);
 }
      else
 {
   ent->comparison_const = op1;
   ent->comparison_qty = -1;
 }
      return;
    }
  if (op0_elt == 0)
    {
      if (insert_regs (op0, ((void *)0), 0))
 {
   rehash_using_reg (op0);
   op0_hash = (((((enum rtx_code) (op0)->code) == REG) && (((op0)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((op0)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((op0)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (op0, mode)) & ((1 << 5) - 1));
 }
      op0_elt = hash_insert (op0, ((void *)0), op0_hash, mode);
      op0_elt->in_memory = op0_in_memory;
    }
  if (op1_elt == 0)
    {
      if (insert_regs (op1, ((void *)0), 0))
 {
   rehash_using_reg (op1);
   op1_hash = (((((enum rtx_code) (op1)->code) == REG) && (((op1)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((op1)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((op1)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (op1, mode)) & ((1 << 5) - 1));
 }
      op1_elt = hash_insert (op1, ((void *)0), op1_hash, mode);
      op1_elt->in_memory = op1_in_memory;
    }
  merge_equiv_classes (op0_elt, op1_elt);
  last_jump_equiv_class = op0_elt;
}
struct set
{
  rtx rtl;
  rtx src;
  struct table_elt *src_elt;
  unsigned src_hash;
  unsigned dest_hash;
  rtx inner_dest;
  char src_in_memory;
  char src_volatile;
  unsigned int mode : 8;
  rtx src_const;
  rtx orig_src;
  unsigned src_const_hash;
  struct table_elt *src_const_elt;
};
static void
cse_insn (rtx insn, rtx libcall_insn)
{
  rtx x = (((insn)->u.fld[5]).rtx1);
  int i;
  rtx tem;
  int n_sets = 0;
  rtx src_eqv = 0;
  struct table_elt *src_eqv_elt = 0;
  int src_eqv_volatile = 0;
  int src_eqv_in_memory = 0;
  unsigned src_eqv_hash = 0;
  struct set *sets = (struct set *) 0;
  this_insn = insn;
  if (((enum rtx_code) (insn)->code) == CALL_INSN)
    {
      for (tem = (((insn)->u.fld[9]).rtx1); tem; tem = (((tem)->u.fld[1]).rtx1))
 {
   if (((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == CLOBBER)
     invalidate (((((((tem)->u.fld[0]).rtx1))->u.fld[0]).rtx1), VOIDmode);
   (((tem)->u.fld[0]).rtx1) = canon_reg ((((tem)->u.fld[0]).rtx1), insn);
 }
    }
  if (((enum rtx_code) (x)->code) == SET)
    {
      sets = C_alloca(sizeof (struct set));
      sets[0].rtl = x;
      if ((((x)->u.fld[0]).rtx1) == (global_rtl[GR_PC])
   && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == LABEL_REF)
 ;
      else if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CALL)
 {
   canon_reg ((((x)->u.fld[1]).rtx1), insn);
   apply_change_group ();
   fold_rtx ((((x)->u.fld[1]).rtx1), insn);
   invalidate ((((x)->u.fld[0]).rtx1), VOIDmode);
 }
      else
 n_sets = 1;
    }
  else if (((enum rtx_code) (x)->code) == PARALLEL)
    {
      int lim = (((((x)->u.fld[0]).rtvec1))->num_elem);
      sets = C_alloca(lim * sizeof (struct set));
      for (i = 0; i < lim; i++)
 {
   rtx y = (((((x)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (y)->code) == CLOBBER)
     {
       rtx clobbered = (((y)->u.fld[0]).rtx1);
       if ((((enum rtx_code) (clobbered)->code) == REG)
    || ((enum rtx_code) (clobbered)->code) == SUBREG)
  invalidate (clobbered, VOIDmode);
       else if (((enum rtx_code) (clobbered)->code) == STRICT_LOW_PART
         || ((enum rtx_code) (clobbered)->code) == ZERO_EXTRACT)
  invalidate ((((clobbered)->u.fld[0]).rtx1), ((enum machine_mode) (clobbered)->mode));
     }
 }
      for (i = 0; i < lim; i++)
 {
   rtx y = (((((x)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (y)->code) == SET)
     {
       if (((enum rtx_code) ((((y)->u.fld[1]).rtx1))->code) == CALL)
  {
    canon_reg ((((y)->u.fld[1]).rtx1), insn);
    apply_change_group ();
    fold_rtx ((((y)->u.fld[1]).rtx1), insn);
    invalidate ((((y)->u.fld[0]).rtx1), VOIDmode);
  }
       else if ((((y)->u.fld[0]).rtx1) == (global_rtl[GR_PC])
         && ((enum rtx_code) ((((y)->u.fld[1]).rtx1))->code) == LABEL_REF)
  ;
       else
  sets[n_sets++].rtl = y;
     }
   else if (((enum rtx_code) (y)->code) == CLOBBER)
     {
       if ((((enum rtx_code) ((((y)->u.fld[0]).rtx1))->code) == MEM))
  canon_reg ((((y)->u.fld[0]).rtx1), (rtx) 0);
     }
   else if (((enum rtx_code) (y)->code) == USE
     && ! ((((enum rtx_code) ((((y)->u.fld[0]).rtx1))->code) == REG)
    && ((((((y)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53))
     canon_reg (y, (rtx) 0);
   else if (((enum rtx_code) (y)->code) == CALL)
     {
       canon_reg (y, insn);
       apply_change_group ();
       fold_rtx (y, insn);
     }
 }
    }
  else if (((enum rtx_code) (x)->code) == CLOBBER)
    {
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
 canon_reg ((((x)->u.fld[0]).rtx1), (rtx) 0);
    }
  else if (((enum rtx_code) (x)->code) == USE
    && ! ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53))
    canon_reg ((((x)->u.fld[0]).rtx1), (rtx) 0);
  else if (((enum rtx_code) (x)->code) == CALL)
    {
      canon_reg (x, insn);
      apply_change_group ();
      fold_rtx (x, insn);
    }
  if (n_sets == 1 && (((insn)->u.fld[8]).rtx1) != 0
      && (tem = find_reg_note (insn, REG_EQUAL, (rtx) 0)) != 0
      && (! rtx_equal_p ((((tem)->u.fld[0]).rtx1), (((sets[0].rtl)->u.fld[1]).rtx1))
   || ((enum rtx_code) ((((sets[0].rtl)->u.fld[0]).rtx1))->code) == STRICT_LOW_PART))
    {
      src_eqv = fold_rtx (canon_reg ((((tem)->u.fld[0]).rtx1), (rtx) 0), insn);
      (((tem)->u.fld[0]).rtx1) = src_eqv;
    }
  for (i = 0; i < n_sets; i++)
    {
      rtx dest = (((sets[i].rtl)->u.fld[0]).rtx1);
      rtx src = (((sets[i].rtl)->u.fld[1]).rtx1);
      rtx new = canon_reg (src, insn);
      int insn_code;
      sets[i].orig_src = src;
      if (((((enum rtx_code) (new)->code) == REG) && (((enum rtx_code) (src)->code) == REG)
    && (((((new)->u.fld[0]).rtuint) < 53)
        != ((((src)->u.fld[0]).rtuint) < 53)))
   || (insn_code = ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn))) < 0
   || insn_data[insn_code].n_dups > 0)
 validate_change (insn, &(((sets[i].rtl)->u.fld[1]).rtx1), new, 1);
      else
 (((sets[i].rtl)->u.fld[1]).rtx1) = new;
      if (((enum rtx_code) (dest)->code) == ZERO_EXTRACT || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT)
 {
   validate_change (insn, &(((dest)->u.fld[1]).rtx1),
      canon_reg ((((dest)->u.fld[1]).rtx1), insn), 1);
   validate_change (insn, &(((dest)->u.fld[2]).rtx1),
      canon_reg ((((dest)->u.fld[2]).rtx1), insn), 1);
 }
      while (((enum rtx_code) (dest)->code) == SUBREG || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART
      || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT
      || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT)
 dest = (((dest)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (dest)->code) == MEM))
 canon_reg (dest, insn);
    }
  apply_change_group ();
  for (i = 0; i < n_sets; i++)
    {
      rtx src, dest;
      rtx src_folded;
      struct table_elt *elt = 0, *p;
      enum machine_mode mode;
      rtx src_eqv_here;
      rtx src_const = 0;
      rtx src_related = 0;
      struct table_elt *src_const_elt = 0;
      int src_cost = 2147483647;
      int src_eqv_cost = 2147483647;
      int src_folded_cost = 2147483647;
      int src_related_cost = 2147483647;
      int src_elt_cost = 2147483647;
      int src_regcost = 2147483647;
      int src_eqv_regcost = 2147483647;
      int src_folded_regcost = 2147483647;
      int src_related_regcost = 2147483647;
      int src_elt_regcost = 2147483647;
      int src_folded_force_flag = 0;
      dest = (((sets[i].rtl)->u.fld[0]).rtx1);
      src = (((sets[i].rtl)->u.fld[1]).rtx1);
      mode = ((enum machine_mode) (src)->mode) == VOIDmode ? ((enum machine_mode) (dest)->mode) : ((enum machine_mode) (src)->mode);
      sets[i].mode = mode;
      if (src_eqv)
 {
   enum machine_mode eqvmode = mode;
   if (((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
     eqvmode = ((enum machine_mode) (((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode);
   do_not_record = 0;
   hash_arg_in_memory = 0;
   src_eqv_hash = (((((enum rtx_code) (src_eqv)->code) == REG) && (((src_eqv)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((src_eqv)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((src_eqv)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (src_eqv, eqvmode)) & ((1 << 5) - 1));
   if (!do_not_record)
     src_eqv_elt = lookup (src_eqv, src_eqv_hash, eqvmode);
   src_eqv_volatile = do_not_record;
   src_eqv_in_memory = hash_arg_in_memory;
 }
      if (((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
 src_eqv_here = 0;
      else
 src_eqv_here = src_eqv;
      src_folded = fold_rtx (src, insn);
      do_not_record = 0;
      hash_arg_in_memory = 0;
      sets[i].src = src;
      sets[i].src_hash = (((((enum rtx_code) (src)->code) == REG) && (((src)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((src)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((src)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (src, mode)) & ((1 << 5) - 1));
      sets[i].src_volatile = do_not_record;
      sets[i].src_in_memory = hash_arg_in_memory;
      if ((((enum rtx_code) (src)->code) == MEM)
   && find_reg_note (insn, REG_EQUIV, (rtx) 0) != 0
   && (((enum rtx_code) (dest)->code) == REG)
   && (((dest)->u.fld[0]).rtuint) >= 53)
 sets[i].src_volatile = 1;
      if (!sets[i].src_volatile)
 elt = lookup (src, sets[i].src_hash, mode);
      sets[i].src_elt = elt;
      if (elt && src_eqv_here && src_eqv_elt)
 {
   if (elt->first_same_value != src_eqv_elt->first_same_value)
     {
       merge_equiv_classes (elt, src_eqv_elt);
       src_eqv_hash = (((((enum rtx_code) (src_eqv)->code) == REG) && (((src_eqv)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((src_eqv)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((src_eqv)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (src_eqv, elt->mode)) & ((1 << 5) - 1));
       src_eqv_elt = lookup (src_eqv, src_eqv_hash, elt->mode);
     }
   src_eqv_here = 0;
 }
      else if (src_eqv_elt)
 elt = src_eqv_elt;
      if (elt)
 for (p = elt->first_same_value; p; p = p->next_same_value)
   if (p->is_const)
     {
       src_const = p->exp;
       src_const_elt = elt;
       break;
     }
      if (src_const == 0
   && (((rtx_class[(int) (((enum rtx_code) (src_folded)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (src_folded)->code) == CONST_VECTOR)
       || (((enum rtx_code) (src_folded)->code) == MINUS
    && ((enum rtx_code) ((((src_folded)->u.fld[0]).rtx1))->code) == LABEL_REF
    && ((enum rtx_code) ((((src_folded)->u.fld[1]).rtx1))->code) == LABEL_REF)))
 src_const = src_folded, src_const_elt = elt;
      else if (src_const == 0 && src_eqv_here && ((rtx_class[(int) (((enum rtx_code) (src_eqv_here)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (src_eqv_here)->code) == CONST_VECTOR))
 src_const = src_eqv_here, src_const_elt = src_eqv_elt;
      if (src_const && src_const_elt == 0)
 {
   sets[i].src_const_hash = (((((enum rtx_code) (src_const)->code) == REG) && (((src_const)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((src_const)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((src_const)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (src_const, mode)) & ((1 << 5) - 1));
   src_const_elt = lookup (src_const, sets[i].src_const_hash, mode);
 }
      sets[i].src_const = src_const;
      sets[i].src_const_elt = src_const_elt;
      if (src_const_elt && elt
   && src_const_elt->first_same_value != elt->first_same_value)
 merge_equiv_classes (elt, src_const_elt);
      else if (src_const_elt && elt == 0)
 elt = src_const_elt;
      if (src_const
   && (((enum rtx_code) (src_const)->code) == CONST
       || (src_const_elt && src_const_elt->related_value != 0)))
 {
   src_related = use_related_value (src_const, src_const_elt);
   if (src_related)
     {
       struct table_elt *src_related_elt
  = lookup (src_related, (((((enum rtx_code) (src_related)->code) == REG) && (((src_related)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((src_related)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((src_related)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (src_related, mode)) & ((1 << 5) - 1)), mode);
       if (src_related_elt && elt)
  {
    if (elt->first_same_value
        != src_related_elt->first_same_value)
      merge_equiv_classes (elt, src_related_elt);
    src_related = 0;
    src_related_elt = 0;
  }
       else if (src_related_elt && elt == 0)
  elt = src_related_elt;
     }
 }
      if (src_const && src_related == 0 && ((enum rtx_code) (src_const)->code) == CONST_INT
   && mode_class[mode] == MODE_INT
   && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) < (8 * (0 ? 8 : 4)))
 {
   enum machine_mode wider_mode;
   for (wider_mode = mode_wider[mode];
        ((unsigned short) (((unsigned short) mode_size[wider_mode]) * 8)) <= (8 * (0 ? 8 : 4))
        && src_related == 0;
        wider_mode = mode_wider[wider_mode])
     {
       struct table_elt *const_elt
  = lookup (src_const, (((((enum rtx_code) (src_const)->code) == REG) && (((src_const)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((src_const)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((src_const)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (src_const, wider_mode)) & ((1 << 5) - 1)), wider_mode);
       if (const_elt == 0)
  continue;
       for (const_elt = const_elt->first_same_value;
     const_elt; const_elt = const_elt->next_same_value)
  if ((((enum rtx_code) (const_elt->exp)->code) == REG))
    {
      src_related = rtl_hooks.gen_lowpart (mode,
          const_elt->exp);
      break;
    }
     }
 }
      if (flag_expensive_optimizations && ! src_related
   && ((enum rtx_code) (src)->code) == AND && ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) == CONST_INT
   && ((unsigned short) mode_size[mode]) < (0 ? 8 : 4))
 {
   enum machine_mode tmode;
   rtx new_and = gen_rtx_fmt_ee (AND, (VOIDmode), ((rtx) 0), ((((src)->u.fld[1]).rtx1)));
   for (tmode = mode_wider[mode];
        ((unsigned short) mode_size[tmode]) <= (0 ? 8 : 4);
        tmode = mode_wider[tmode])
     {
       rtx inner = rtl_hooks.gen_lowpart (tmode, (((src)->u.fld[0]).rtx1));
       struct table_elt *larger_elt;
       if (inner)
  {
    ((new_and)->mode = (tmode));
    (((new_and)->u.fld[0]).rtx1) = inner;
    larger_elt = lookup (new_and, (((((enum rtx_code) (new_and)->code) == REG) && (((new_and)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((new_and)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((new_and)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (new_and, tmode)) & ((1 << 5) - 1)), tmode);
    if (larger_elt == 0)
      continue;
    for (larger_elt = larger_elt->first_same_value;
         larger_elt; larger_elt = larger_elt->next_same_value)
      if ((((enum rtx_code) (larger_elt->exp)->code) == REG))
        {
   src_related
     = rtl_hooks.gen_lowpart (mode, larger_elt->exp);
   break;
        }
    if (src_related)
      break;
  }
     }
 }
      if (src == src_folded)
 src_folded = 0;
      if (elt)
 elt = elt->first_same_value;
      for (p = elt; p; p = p->next_same_value)
 {
   enum rtx_code code = ((enum rtx_code) (p->exp)->code);
   if (code != REG && ! exp_equiv_p (p->exp, p->exp, 1, 0))
     continue;
   if (code == SUBREG
       && (((unsigned short) mode_size[((enum machine_mode) (p->exp)->mode)])
    > ((unsigned short) mode_size[((enum machine_mode) ((((p->exp)->u.fld[0]).rtx1))->mode)]))
       && ! (src != 0
      && ((enum rtx_code) (src)->code) == SUBREG
      && ((enum machine_mode) (src)->mode) == ((enum machine_mode) (p->exp)->mode)
      && (((unsigned short) mode_size[((enum machine_mode) ((((src)->u.fld[0]).rtx1))->mode)])
   < ((unsigned short) mode_size[((enum machine_mode) ((((p->exp)->u.fld[0]).rtx1))->mode)]))))
     continue;
   if (src && ((enum rtx_code) (src)->code) == code && rtx_equal_p (src, p->exp))
     src = 0;
   else if (src_folded && ((enum rtx_code) (src_folded)->code) == code
     && rtx_equal_p (src_folded, p->exp))
     src_folded = 0;
   else if (src_eqv_here && ((enum rtx_code) (src_eqv_here)->code) == code
     && rtx_equal_p (src_eqv_here, p->exp))
     src_eqv_here = 0;
   else if (src_related && ((enum rtx_code) (src_related)->code) == code
     && rtx_equal_p (src_related, p->exp))
     src_related = 0;
   if (((enum rtx_code) (dest)->code) == code && rtx_equal_p (p->exp, dest))
     src_related = dest;
 }
      if (src)
 {
   if (rtx_equal_p (src, dest))
     src_cost = src_regcost = -1;
   else
     {
       src_cost = ((((enum rtx_code) (src)->code) == REG) ? 0 : notreg_cost (src, SET));
       src_regcost = approx_reg_cost (src);
     }
 }
      if (src_eqv_here)
 {
   if (rtx_equal_p (src_eqv_here, dest))
     src_eqv_cost = src_eqv_regcost = -1;
   else
     {
       src_eqv_cost = ((((enum rtx_code) (src_eqv_here)->code) == REG) ? 0 : notreg_cost (src_eqv_here, SET));
       src_eqv_regcost = approx_reg_cost (src_eqv_here);
     }
 }
      if (src_folded)
 {
   if (rtx_equal_p (src_folded, dest))
     src_folded_cost = src_folded_regcost = -1;
   else
     {
       src_folded_cost = ((((enum rtx_code) (src_folded)->code) == REG) ? 0 : notreg_cost (src_folded, SET));
       src_folded_regcost = approx_reg_cost (src_folded);
     }
 }
      if (src_related)
 {
   if (rtx_equal_p (src_related, dest))
     src_related_cost = src_related_regcost = -1;
   else
     {
       src_related_cost = ((((enum rtx_code) (src_related)->code) == REG) ? 0 : notreg_cost (src_related, SET));
       src_related_regcost = approx_reg_cost (src_related);
     }
 }
      if (dest == (global_rtl[GR_PC]) && src_const && ((enum rtx_code) (src_const)->code) == LABEL_REF)
 src_folded = src_const, src_folded_cost = src_folded_regcost = -1;
      while (1)
 {
   rtx trial;
   while (elt && !(((enum rtx_code) (elt->exp)->code) == REG)
   && ! exp_equiv_p (elt->exp, elt->exp, 1, 0))
     elt = elt->next_same_value;
   if (elt != 0
       && ((enum rtx_code) (elt->exp)->code) == SUBREG
       && (((unsigned short) mode_size[((enum machine_mode) (elt->exp)->mode)])
    > ((unsigned short) mode_size[((enum machine_mode) ((((elt->exp)->u.fld[0]).rtx1))->mode)]))
       && ! (src != 0
      && ((enum rtx_code) (src)->code) == SUBREG
      && ((enum machine_mode) (src)->mode) == ((enum machine_mode) (elt->exp)->mode)
      && (((unsigned short) mode_size[((enum machine_mode) ((((src)->u.fld[0]).rtx1))->mode)])
   < ((unsigned short) mode_size[((enum machine_mode) ((((elt->exp)->u.fld[0]).rtx1))->mode)]))))
     {
       elt = elt->next_same_value;
       continue;
     }
   if (elt)
     {
       src_elt_cost = elt->cost;
       src_elt_regcost = elt->regcost;
     }
   if (src_folded
       && preferable (src_folded_cost, src_folded_regcost,
        src_cost, src_regcost) <= 0
       && preferable (src_folded_cost, src_folded_regcost,
        src_eqv_cost, src_eqv_regcost) <= 0
       && preferable (src_folded_cost, src_folded_regcost,
        src_related_cost, src_related_regcost) <= 0
       && preferable (src_folded_cost, src_folded_regcost,
        src_elt_cost, src_elt_regcost) <= 0)
     {
       trial = src_folded, src_folded_cost = 2147483647;
       if (src_folded_force_flag)
  {
    rtx forced = force_const_mem (mode, trial);
    if (forced)
      trial = forced;
  }
     }
   else if (src
     && preferable (src_cost, src_regcost,
      src_eqv_cost, src_eqv_regcost) <= 0
     && preferable (src_cost, src_regcost,
      src_related_cost, src_related_regcost) <= 0
     && preferable (src_cost, src_regcost,
      src_elt_cost, src_elt_regcost) <= 0)
     trial = src, src_cost = 2147483647;
   else if (src_eqv_here
     && preferable (src_eqv_cost, src_eqv_regcost,
      src_related_cost, src_related_regcost) <= 0
     && preferable (src_eqv_cost, src_eqv_regcost,
      src_elt_cost, src_elt_regcost) <= 0)
     trial = copy_rtx (src_eqv_here), src_eqv_cost = 2147483647;
   else if (src_related
     && preferable (src_related_cost, src_related_regcost,
      src_elt_cost, src_elt_regcost) <= 0)
     trial = copy_rtx (src_related), src_related_cost = 2147483647;
   else
     {
       trial = copy_rtx (elt->exp);
       elt = elt->next_same_value;
       src_elt_cost = 2147483647;
     }
   if (n_sets == 1 && dest == (global_rtl[GR_PC])
       && (trial == (global_rtl[GR_PC])
    || (((enum rtx_code) (trial)->code) == LABEL_REF
        && ! condjump_p (insn))))
     {
       (((sets[i].rtl)->u.fld[1]).rtx1) = trial;
       cse_jumps_altered = 1;
       break;
     }
   else if (validate_change (insn, &(((sets[i].rtl)->u.fld[1]).rtx1), trial, 0))
     {
       rtx new = canon_reg ((((sets[i].rtl)->u.fld[1]).rtx1), insn);
       if (libcall_insn
    && ((((enum rtx_code) (sets[i].orig_src)->code) == REG)
        || ((enum rtx_code) (sets[i].orig_src)->code) == SUBREG
        || (((enum rtx_code) (sets[i].orig_src)->code) == MEM)))
  {
           rtx note = find_reg_equal_equiv_note (libcall_insn);
    if (note != 0)
      (((note)->u.fld[0]).rtx1) = simplify_replace_rtx ((((note)->u.fld[0]).rtx1),
          sets[i].orig_src,
          copy_rtx (new));
  }
       validate_change (insn, &(((sets[i].rtl)->u.fld[1]).rtx1), new, 1);
       apply_change_group ();
       break;
     }
   else if (constant_pool_entries_cost
     && ((rtx_class[(int) (((enum rtx_code) (trial)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (trial)->code) == CONST_VECTOR)
     && ! (((enum rtx_code) (trial)->code) == CONST
    && ((enum rtx_code) ((((trial)->u.fld[0]).rtx1))->code) == TRUNCATE)
     && ! (((enum rtx_code) (trial)->code) == CONST
    && ((enum rtx_code) ((((trial)->u.fld[0]).rtx1))->code) == MINUS
    && ((enum rtx_code) (((((((trial)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == LABEL_REF
    && ((enum rtx_code) (((((((trial)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == LABEL_REF)
     && (src_folded == 0
         || (!(((enum rtx_code) (src_folded)->code) == MEM)
      && ! src_folded_force_flag))
     && mode_class[mode] != MODE_CC
     && mode != VOIDmode)
     {
       src_folded_force_flag = 1;
       src_folded = trial;
       src_folded_cost = constant_pool_entries_cost;
       src_folded_regcost = constant_pool_entries_regcost;
     }
 }
      src = (((sets[i].rtl)->u.fld[1]).rtx1);
      if ((((enum rtx_code) (dest)->code) == REG)
   && (((((((((dest)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((dest)->u.fld[0]).rtuint)))))->reg_qty) != (int) ((((dest)->u.fld[0]).rtuint))))
 {
   int dest_q = ((((((((dest)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((dest)->u.fld[0]).rtuint)))))->reg_qty);
   struct qty_table_elem *dest_ent = &qty_table[dest_q];
   if (dest_ent->mode == ((enum machine_mode) (dest)->mode)
       && dest_ent->first_reg != (((dest)->u.fld[0]).rtuint)
       && (((enum rtx_code) (src)->code) == REG) && (((src)->u.fld[0]).rtuint) == (((dest)->u.fld[0]).rtuint)
       && (!(((enum rtx_code) (sets[i].src)->code) == REG)
    || (((sets[i].src)->u.fld[0]).rtuint) >= 53)
       && (!(((enum rtx_code) (dest)->code) == REG) || (((dest)->u.fld[0]).rtuint) >= 53))
     {
       int src_q = ((((((((src)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((src)->u.fld[0]).rtuint)))))->reg_qty);
       struct qty_table_elem *src_ent = &qty_table[src_q];
       int first = src_ent->first_reg;
       rtx new_src
  = (first >= 53
     ? (cfun->emit->x_regno_reg_rtx)[first] : gen_rtx_REG (((enum machine_mode) (src)->mode), first));
       if (validate_change (insn, &(((sets[i].rtl)->u.fld[1]).rtx1), new_src, 0))
  {
    src = new_src;
    if (src_const && ((((enum rtx_code) (src_const)->code) == REG) ? 0 : notreg_cost (src_const, SET)) < ((((enum rtx_code) (src)->code) == REG) ? 0 : notreg_cost (src, SET))
        && validate_change (insn, &(((sets[i].rtl)->u.fld[1]).rtx1),
       src_const, 0))
      src = src_const;
  }
     }
 }
      if (src != sets[i].src)
 {
   cse_altered = 1;
   do_not_record = 0;
   hash_arg_in_memory = 0;
   sets[i].src = src;
   sets[i].src_hash = (((((enum rtx_code) (src)->code) == REG) && (((src)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((src)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((src)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (src, mode)) & ((1 << 5) - 1));
   sets[i].src_volatile = do_not_record;
   sets[i].src_in_memory = hash_arg_in_memory;
   sets[i].src_elt = lookup (src, sets[i].src_hash, mode);
 }
      if (n_sets == 1 && src_const && (((enum rtx_code) (dest)->code) == REG)
   && !(((enum rtx_code) (src_const)->code) == REG)
   && ! (((enum rtx_code) (src_const)->code) == CONST
  && ((enum rtx_code) ((((src_const)->u.fld[0]).rtx1))->code) == MINUS
  && ((enum rtx_code) (((((((src_const)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == LABEL_REF
  && ((enum rtx_code) (((((((src_const)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == LABEL_REF))
 {
   if (! rtx_equal_p (src, src_const))
     {
       src_const = copy_rtx (src_const);
       set_unique_reg_note (insn, REG_EQUAL, src_const);
     }
 }
      do_not_record = 0;
      while (((enum rtx_code) (dest)->code) == SIGN_EXTRACT
      || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT
      || ((enum rtx_code) (dest)->code) == SUBREG
      || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
 dest = (((dest)->u.fld[0]).rtx1);
      sets[i].inner_dest = dest;
      if ((((enum rtx_code) (dest)->code) == MEM))
 {
   rtx addr = (((dest)->u.fld[0]).rtx1);
   if ((rtx_class[(int) (((enum rtx_code) (addr)->code))]) == RTX_AUTOINC
       && (((addr)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]))
     invalidate ((global_rtl[GR_STACK_POINTER]), (0 ? DImode : SImode));
   dest = fold_rtx (dest, insn);
 }
      sets[i].dest_hash = (((((enum rtx_code) (dest)->code) == REG) && (((dest)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((dest)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((dest)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (dest, mode)) & ((1 << 5) - 1));
      if (((enum rtx_code) ((((sets[i].rtl)->u.fld[0]).rtx1))->code) == ZERO_EXTRACT
   || ((enum rtx_code) ((((sets[i].rtl)->u.fld[0]).rtx1))->code) == SIGN_EXTRACT)
 {
   rtx width = ((((((sets[i].rtl)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
   if (src_const != 0 && ((enum rtx_code) (src_const)->code) == CONST_INT
       && ((enum rtx_code) (width)->code) == CONST_INT
       && ((width)->u.hwint[0]) < (8 * 4)
       && ! (((src_const)->u.hwint[0])
      & ((long) (-1) << ((width)->u.hwint[0]))))
     ;
   else
     {
       sets[i].src_elt = 0;
       sets[i].src_volatile = 1;
       src_eqv = 0;
       src_eqv_elt = 0;
     }
 }
      else if (n_sets == 1 && dest == (global_rtl[GR_PC]) && src == (global_rtl[GR_PC]))
 {
   delete_insn (insn);
   cse_jumps_altered = 1;
   sets[i].rtl = 0;
 }
      else if (dest == (global_rtl[GR_PC]) && ((enum rtx_code) (src)->code) == LABEL_REF)
 {
   if ((((insn)->u.fld[2]).rtx1) == 0
       || ((enum rtx_code) ((((insn)->u.fld[2]).rtx1))->code) != BARRIER)
     emit_barrier_after (insn);
   if (n_sets == 1)
     {
       rtx new, note;
       new = emit_jump_insn_after (gen_jump ((((src)->u.fld[0]).rtx1)), insn);
       (((new)->u.fld[9]).rtx1) = (((src)->u.fld[0]).rtx1);
       ((((((src)->u.fld[0]).rtx1))->u.fld[4]).rtint)++;
       note = find_reg_note (insn, REG_NON_LOCAL_GOTO, 0);
       if (note)
  {
    (((note)->u.fld[1]).rtx1) = (rtx) 0;
    (((new)->u.fld[8]).rtx1) = note;
  }
       delete_insn (insn);
       insn = new;
       if ((((insn)->u.fld[2]).rtx1) == 0
    || ((enum rtx_code) ((((insn)->u.fld[2]).rtx1))->code) != BARRIER)
  emit_barrier_after (insn);
     }
   else
     (((insn)->u.fld[6]).rtint) = -1;
   cse_jumps_altered = 1;
   sets[i].rtl = 0;
 }
      else if (do_not_record)
 {
   if ((((enum rtx_code) (dest)->code) == REG) || ((enum rtx_code) (dest)->code) == SUBREG)
     invalidate (dest, VOIDmode);
   else if ((((enum rtx_code) (dest)->code) == MEM))
     {
       if (! libcall_insn || insn == libcall_insn)
  invalidate (dest, VOIDmode);
     }
   else if (((enum rtx_code) (dest)->code) == STRICT_LOW_PART
     || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT)
     invalidate ((((dest)->u.fld[0]).rtx1), ((enum machine_mode) (dest)->mode));
   sets[i].rtl = 0;
 }
      if (sets[i].rtl != 0 && dest != (((sets[i].rtl)->u.fld[0]).rtx1))
 sets[i].dest_hash = (((((enum rtx_code) ((((sets[i].rtl)->u.fld[0]).rtx1))->code) == REG) && ((((((sets[i].rtl)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) (((((((((((sets[i].rtl)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((sets[i].rtl)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash ((((sets[i].rtl)->u.fld[0]).rtx1), mode)) & ((1 << 5) - 1));
    }
  if (src_eqv && src_eqv_elt == 0 && sets[0].rtl != 0 && ! src_eqv_volatile
      && ! rtx_equal_p (src_eqv, (((sets[0].rtl)->u.fld[0]).rtx1)))
    {
      struct table_elt *elt;
      struct table_elt *classp = sets[0].src_elt;
      rtx dest = (((sets[0].rtl)->u.fld[0]).rtx1);
      enum machine_mode eqvmode = ((enum machine_mode) (dest)->mode);
      if (((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
 {
   eqvmode = ((enum machine_mode) (((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode);
   classp = 0;
 }
      if (insert_regs (src_eqv, classp, 0))
 {
   rehash_using_reg (src_eqv);
   src_eqv_hash = (((((enum rtx_code) (src_eqv)->code) == REG) && (((src_eqv)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((src_eqv)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((src_eqv)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (src_eqv, eqvmode)) & ((1 << 5) - 1));
 }
      elt = hash_insert (src_eqv, classp, src_eqv_hash, eqvmode);
      elt->in_memory = src_eqv_in_memory;
      src_eqv_elt = elt;
      for (i = 0; i < n_sets; i++)
 if (sets[i].rtl && sets[i].src_elt == 0
     && rtx_equal_p ((((sets[i].rtl)->u.fld[1]).rtx1), src_eqv))
   sets[i].src_elt = src_eqv_elt;
    }
  for (i = 0; i < n_sets; i++)
    if (sets[i].rtl && ! sets[i].src_volatile
 && ! rtx_equal_p ((((sets[i].rtl)->u.fld[1]).rtx1), (((sets[i].rtl)->u.fld[0]).rtx1)))
      {
 if (((enum rtx_code) ((((sets[i].rtl)->u.fld[0]).rtx1))->code) == STRICT_LOW_PART)
   {
     sets[i].src_elt = src_eqv_elt;
     sets[i].src_hash = src_eqv_hash;
   }
 else
   {
     struct table_elt *classp = src_eqv_elt;
     rtx src = sets[i].src;
     rtx dest = (((sets[i].rtl)->u.fld[0]).rtx1);
     enum machine_mode mode
       = ((enum machine_mode) (src)->mode) == VOIDmode ? ((enum machine_mode) (dest)->mode) : ((enum machine_mode) (src)->mode);
     if (!classp)
       classp = sets[i].src_const_elt;
     if (sets[i].src_elt == 0)
       {
  if (! find_reg_note (insn, REG_RETVAL, (rtx) 0))
    {
      struct table_elt *elt;
      if (insert_regs (src, classp, 0))
        {
   rehash_using_reg (src);
   sets[i].src_hash = (((((enum rtx_code) (src)->code) == REG) && (((src)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((src)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((src)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (src, mode)) & ((1 << 5) - 1));
        }
      elt = hash_insert (src, classp, sets[i].src_hash, mode);
      elt->in_memory = sets[i].src_in_memory;
      sets[i].src_elt = classp = elt;
    }
  else
    sets[i].src_elt = classp;
       }
     if (sets[i].src_const && sets[i].src_const_elt == 0
  && src != sets[i].src_const
  && ! rtx_equal_p (sets[i].src_const, src))
       sets[i].src_elt = hash_insert (sets[i].src_const, classp,
          sets[i].src_const_hash, mode);
   }
      }
    else if (sets[i].src_elt == 0)
      sets[i].src_elt = src_eqv_elt;
  invalidate_from_clobbers (x);
  if (((enum rtx_code) (insn)->code) == CALL_INSN)
    {
      if (! (((insn))->unchanging))
 invalidate_memory ();
      invalidate_for_call ();
    }
  for (i = 0; i < n_sets; i++)
    if (sets[i].rtl)
      {
 rtx dest = (((sets[i].rtl)->u.fld[0]).rtx1);
 if ((((enum rtx_code) (dest)->code) == REG) || ((enum rtx_code) (dest)->code) == SUBREG)
   invalidate (dest, VOIDmode);
 else if ((((enum rtx_code) (dest)->code) == MEM))
   {
     if (! libcall_insn || insn == libcall_insn)
       invalidate (dest, VOIDmode);
   }
 else if (((enum rtx_code) (dest)->code) == STRICT_LOW_PART
   || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT)
   invalidate ((((dest)->u.fld[0]).rtx1), ((enum machine_mode) (dest)->mode));
      }
  if (((enum rtx_code) (insn)->code) == INSN
      && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ASM_OPERANDS
      && ((((((insn)->u.fld[5]).rtx1)))->volatil))
    flush_hash_table ();
  for (i = 0; i < n_sets; i++)
    {
      if (sets[i].rtl)
 {
   rtx x = (((sets[i].rtl)->u.fld[0]).rtx1);
   if (!(((enum rtx_code) (x)->code) == REG))
     mention_regs (x);
   else
     {
       unsigned int regno = (((x)->u.fld[0]).rtuint);
       unsigned int endregno
  = regno + (regno >= 53 ? 1
      : hard_regno_nregs[regno][((enum machine_mode) (x)->mode)]);
       unsigned int i;
       for (i = regno; i < endregno; i++)
  {
    if ((((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_in_table) >= 0)
      {
        remove_invalid_refs (i);
        (((((i) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((i))))->reg_in_table) = -1;
      }
  }
     }
 }
    }
  for (i = 0; i < n_sets; i++)
    if (sets[i].rtl)
      {
 if (sets[i].src_elt && sets[i].src_elt->first_same_value == 0)
   {
     struct table_elt *elt = sets[i].src_elt;
     while (elt && elt->prev_same_value)
       elt = elt->prev_same_value;
     while (elt && elt->first_same_value == 0)
       elt = elt->next_same_value;
     sets[i].src_elt = elt ? elt->first_same_value : 0;
   }
      }
  for (i = 0; i < n_sets; i++)
    if (sets[i].rtl)
      {
 rtx dest = (((sets[i].rtl)->u.fld[0]).rtx1);
 struct table_elt *elt;
 if ((flag_float_store
      && (((enum rtx_code) (dest)->code) == MEM)
      && (mode_class[((enum machine_mode) (dest)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (dest)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (dest)->mode)] == MODE_VECTOR_FLOAT))
     || ((enum machine_mode) (dest)->mode) == BLKmode
     || libcall_insn
     || sets[i].src_elt == 0
     || (((enum rtx_code) (dest)->code) == SUBREG
  && (((unsigned short) mode_size[((enum machine_mode) (dest)->mode)])
      > ((unsigned short) mode_size[((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode)]))
  && (((enum rtx_code) (sets[i].src)->code) == SIGN_EXTEND
      || ((enum rtx_code) (sets[i].src)->code) == ZERO_EXTEND)))
   continue;
 if (((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
   dest = ((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
 if ((((enum rtx_code) (dest)->code) == REG) || ((enum rtx_code) (dest)->code) == SUBREG)
   if (insert_regs (dest, sets[i].src_elt, 1))
     {
       rehash_using_reg (dest);
       sets[i].dest_hash = (((((enum rtx_code) (dest)->code) == REG) && (((dest)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((dest)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((dest)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (dest, ((enum machine_mode) (dest)->mode))) & ((1 << 5) - 1));
     }
 elt = hash_insert (dest, sets[i].src_elt,
      sets[i].dest_hash, ((enum machine_mode) (dest)->mode));
 elt->in_memory = ((((enum rtx_code) (sets[i].inner_dest)->code) == MEM)
     && (! (((sets[i].inner_dest))->unchanging)
         || fixed_base_plus_p ((((sets[i].inner_dest)->u.fld[0]).rtx1)
           )));
 if (((enum rtx_code) (dest)->code) == SUBREG
     && (((((unsigned short) mode_size[((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode)]) - 1)
   / (0 ? 8 : 4))
  == (((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]) - 1) / (0 ? 8 : 4))
     && (((unsigned short) mode_size[((enum machine_mode) (dest)->mode)])
  >= ((unsigned short) mode_size[((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode)]))
     && sets[i].src_elt != 0)
   {
     enum machine_mode new_mode = ((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode);
     struct table_elt *elt, *classp = 0;
     for (elt = sets[i].src_elt->first_same_value; elt;
   elt = elt->next_same_value)
       {
  rtx new_src = 0;
  unsigned src_hash;
  struct table_elt *src_elt;
  int byte = 0;
  if (!(((enum rtx_code) (elt->exp)->code) == REG)
      && ! exp_equiv_p (elt->exp, elt->exp, 1, 0))
    continue;
  if (((enum machine_mode) (elt->exp)->mode) == new_mode)
    new_src = elt->exp;
  else
    {
      if (0)
        byte = (((unsigned short) mode_size[((enum machine_mode) (dest)->mode)])
         - ((unsigned short) mode_size[new_mode]));
      new_src = simplify_gen_subreg (new_mode, elt->exp,
                ((enum machine_mode) (dest)->mode), byte);
    }
  if (! new_src)
    continue;
  src_hash = (((((enum rtx_code) (new_src)->code) == REG) && (((new_src)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((new_src)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((new_src)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (new_src, new_mode)) & ((1 << 5) - 1));
  src_elt = lookup (new_src, src_hash, new_mode);
  if (src_elt == 0)
    {
      if (insert_regs (new_src, classp, 0))
        {
   rehash_using_reg (new_src);
   src_hash = (((((enum rtx_code) (new_src)->code) == REG) && (((new_src)->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) ((((((((new_src)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((new_src)->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash (new_src, new_mode)) & ((1 << 5) - 1));
        }
      src_elt = hash_insert (new_src, classp, src_hash, new_mode);
      src_elt->in_memory = elt->in_memory;
    }
  else if (classp && classp != src_elt->first_same_value)
    merge_equiv_classes (src_elt, classp);
  classp = src_elt->first_same_value;
  while (classp
         && !(((enum rtx_code) (classp->exp)->code) == REG)
         && ! exp_equiv_p (classp->exp, classp->exp, 1, 0))
    classp = classp->next_same_value;
       }
   }
      }
  if (n_sets == 1 && sets[0].rtl && (((enum rtx_code) ((((sets[0].rtl)->u.fld[0]).rtx1))->code) == REG)
      && ((((((insn)->u.fld[1]).rtx1))->u.fld[2]).rtx1) == insn
      && (((enum rtx_code) ((((sets[0].rtl)->u.fld[1]).rtx1))->code) == REG)
      && ((((((sets[0].rtl)->u.fld[1]).rtx1))->u.fld[0]).rtuint) >= 53
      && ((((((((((((sets[0].rtl)->u.fld[1]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((sets[0].rtl)->u.fld[1]).rtx1))->u.fld[0]).rtuint)))))->reg_qty) != (int) (((((((sets[0].rtl)->u.fld[1]).rtx1))->u.fld[0]).rtuint))))
    {
      int src_q = (((((((((((sets[0].rtl)->u.fld[1]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((sets[0].rtl)->u.fld[1]).rtx1))->u.fld[0]).rtuint)))))->reg_qty);
      struct qty_table_elem *src_ent = &qty_table[src_q];
      if ((src_ent->first_reg == ((((((sets[0].rtl)->u.fld[0]).rtx1))->u.fld[0]).rtuint))
   && ! find_reg_note (insn, REG_RETVAL, (rtx) 0))
 {
   rtx prev = insn;
   do
     {
       prev = (((prev)->u.fld[1]).rtx1);
     }
   while (prev && ((enum rtx_code) (prev)->code) == NOTE
   && (((prev)->u.fld[5]).rtint) != NOTE_INSN_BASIC_BLOCK);
   if (prev != 0 && ((enum rtx_code) (prev)->code) == INSN
       && ((enum rtx_code) ((((prev)->u.fld[5]).rtx1))->code) == SET
       && ((((((prev)->u.fld[5]).rtx1))->u.fld[0]).rtx1) == (((sets[0].rtl)->u.fld[1]).rtx1)
       && ! find_reg_note (prev, REG_EQUIV, (rtx) 0))
     {
       rtx dest = (((sets[0].rtl)->u.fld[0]).rtx1);
       rtx src = (((sets[0].rtl)->u.fld[1]).rtx1);
       rtx note;
       validate_change (prev, &((((((prev)->u.fld[5]).rtx1))->u.fld[0]).rtx1), dest, 1);
       validate_change (insn, &(((sets[0].rtl)->u.fld[0]).rtx1), src, 1);
       validate_change (insn, &(((sets[0].rtl)->u.fld[1]).rtx1), dest, 1);
       apply_change_group ();
       note = find_reg_note (insn, REG_EQUAL, (rtx) 0);
       if (note != 0
    && (reg_mentioned_p (dest, (((note)->u.fld[0]).rtx1))
        || rtx_equal_p (src, (((note)->u.fld[0]).rtx1))))
  remove_note (insn, note);
     }
 }
    }
  last_jump_equiv_class = 0;
  if (((enum rtx_code) (insn)->code) == JUMP_INSN
      && n_sets == 1 && ((enum rtx_code) (x)->code) == SET
      && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == IF_THEN_ELSE)
    record_jump_equiv (insn, 0);
}
static void
invalidate_memory (void)
{
  int i;
  struct table_elt *p, *next;
  for (i = 0; i < (1 << 5); i++)
    for (p = equiv_table[i]; p; p = next)
      {
 next = p->next_same_hash;
 if (p->in_memory)
   remove_from_table (p, i);
      }
}
static int
addr_affects_sp_p (rtx addr)
{
  if ((rtx_class[(int) (((enum rtx_code) (addr)->code))]) == RTX_AUTOINC
      && (((enum rtx_code) ((((addr)->u.fld[0]).rtx1))->code) == REG)
      && ((((((addr)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == 7)
    {
      if ((((((7) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((7))))->reg_tick) >= 0)
 {
   (((((7) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((7))))->reg_tick)++;
   (((((7) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((7))))->subreg_ticked) = -1;
 }
      if ((!!((hard_regs_in_table)[(7) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((7) % ((unsigned) (8 * 4)))))))
 invalidate ((global_rtl[GR_STACK_POINTER]), VOIDmode);
      return 1;
    }
  return 0;
}
static void
invalidate_from_clobbers (rtx x)
{
  if (((enum rtx_code) (x)->code) == CLOBBER)
    {
      rtx ref = (((x)->u.fld[0]).rtx1);
      if (ref)
 {
   if ((((enum rtx_code) (ref)->code) == REG) || ((enum rtx_code) (ref)->code) == SUBREG
       || (((enum rtx_code) (ref)->code) == MEM))
     invalidate (ref, VOIDmode);
   else if (((enum rtx_code) (ref)->code) == STRICT_LOW_PART
     || ((enum rtx_code) (ref)->code) == ZERO_EXTRACT)
     invalidate ((((ref)->u.fld[0]).rtx1), ((enum machine_mode) (ref)->mode));
 }
    }
  else if (((enum rtx_code) (x)->code) == PARALLEL)
    {
      int i;
      for (i = (((((x)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 {
   rtx y = (((((x)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (y)->code) == CLOBBER)
     {
       rtx ref = (((y)->u.fld[0]).rtx1);
       if ((((enum rtx_code) (ref)->code) == REG) || ((enum rtx_code) (ref)->code) == SUBREG
    || (((enum rtx_code) (ref)->code) == MEM))
  invalidate (ref, VOIDmode);
       else if (((enum rtx_code) (ref)->code) == STRICT_LOW_PART
         || ((enum rtx_code) (ref)->code) == ZERO_EXTRACT)
  invalidate ((((ref)->u.fld[0]).rtx1), ((enum machine_mode) (ref)->mode));
     }
 }
    }
}
static rtx
cse_process_notes (rtx x, rtx object)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt = (rtx_format[(int) (code)]);
  int i;
  switch (code)
    {
    case CONST_INT:
    case CONST:
    case SYMBOL_REF:
    case LABEL_REF:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case PC:
    case CC0:
    case LO_SUM:
      return x;
    case MEM:
      validate_change (x, &(((x)->u.fld[0]).rtx1),
         cse_process_notes ((((x)->u.fld[0]).rtx1), x), 0);
      return x;
    case EXPR_LIST:
    case INSN_LIST:
      if (((enum reg_note) ((enum machine_mode) (x)->mode)) == REG_EQUAL)
 (((x)->u.fld[0]).rtx1) = cse_process_notes ((((x)->u.fld[0]).rtx1), (rtx) 0);
      if ((((x)->u.fld[1]).rtx1))
 (((x)->u.fld[1]).rtx1) = cse_process_notes ((((x)->u.fld[1]).rtx1), (rtx) 0);
      return x;
    case SIGN_EXTEND:
    case ZERO_EXTEND:
    case SUBREG:
      {
 rtx new = cse_process_notes ((((x)->u.fld[0]).rtx1), object);
 if (((enum machine_mode) (new)->mode) != VOIDmode)
   validate_change (object, &(((x)->u.fld[0]).rtx1), new, 0);
 return x;
      }
    case REG:
      i = ((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty);
      if ((((((((((x)->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info (((((x)->u.fld[0]).rtuint)))))->reg_qty) != (int) ((((x)->u.fld[0]).rtuint))))
 {
   struct qty_table_elem *ent = &qty_table[i];
   if (ent->const_rtx != (rtx) 0
       && (((rtx_class[(int) (((enum rtx_code) (ent->const_rtx)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (ent->const_rtx)->code) == CONST_VECTOR)
    || (((enum rtx_code) (ent->const_rtx)->code) == REG)))
     {
       rtx new = rtl_hooks.gen_lowpart (((enum machine_mode) (x)->mode), ent->const_rtx);
       if (new)
  return new;
     }
 }
      return canon_reg (x, (rtx) 0);
    default:
      break;
    }
  for (i = 0; i < (rtx_length[(int) (code)]); i++)
    if (fmt[i] == 'e')
      validate_change (object, &(((x)->u.fld[i]).rtx1),
         cse_process_notes ((((x)->u.fld[i]).rtx1), object), 0);
  return x;
}
static void
cse_around_loop (rtx loop_start)
{
  rtx insn;
  int i;
  struct table_elt *p;
  for (insn = (((loop_start)->u.fld[1]).rtx1);
       insn && (((enum rtx_code) (insn)->code) == NOTE && (((insn)->u.fld[5]).rtint) >= 0);
       insn = (((insn)->u.fld[1]).rtx1))
    ;
  if (insn == 0
      || ((enum rtx_code) (insn)->code) != NOTE
      || (((insn)->u.fld[5]).rtint) != NOTE_INSN_LOOP_BEG)
    return;
  if (last_jump_equiv_class)
    for (p = last_jump_equiv_class->first_same_value; p;
  p = p->next_same_value)
      {
 if ((((enum rtx_code) (p->exp)->code) == MEM) || (((enum rtx_code) (p->exp)->code) == REG)
     || (((enum rtx_code) (p->exp)->code) == SUBREG
  && (((enum rtx_code) ((((p->exp)->u.fld[0]).rtx1))->code) == REG)))
   invalidate (p->exp, VOIDmode);
 else if (((enum rtx_code) (p->exp)->code) == STRICT_LOW_PART
   || ((enum rtx_code) (p->exp)->code) == ZERO_EXTRACT)
   invalidate ((((p->exp)->u.fld[0]).rtx1), ((enum machine_mode) (p->exp)->mode));
      }
  for (insn = (((loop_start)->u.fld[2]).rtx1);
       ((enum rtx_code) (insn)->code) != CALL_INSN && ((enum rtx_code) (insn)->code) != CODE_LABEL
       && (((insn)->u.fld[0]).rtint) < max_insn_uid
       && ! (((enum rtx_code) (insn)->code) == NOTE
      && (((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_END);
       insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
   && (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET
       || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER))
 cse_set_around_loop ((((insn)->u.fld[5]).rtx1), insn, loop_start);
      else if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL)
 for (i = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
   if (((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->code) == SET
       || ((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->code) == CLOBBER)
     cse_set_around_loop (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]), insn,
     loop_start);
    }
}
static void
invalidate_skipped_set (rtx dest, rtx set, void *data )
{
  enum rtx_code code = ((enum rtx_code) (dest)->code);
  if (code == MEM
      && ! addr_affects_sp_p (dest)
      && ((((dest))->in_struct) || ((enum machine_mode) (dest)->mode) == BLKmode
   || cse_rtx_varies_p ((((dest)->u.fld[0]).rtx1), 0)))
    {
      invalidate_memory ();
      return;
    }
  if (((enum rtx_code) (set)->code) == CLOBBER
      || ((dest) ? 0 : 0)
      || dest == (global_rtl[GR_PC]))
    return;
  if (code == STRICT_LOW_PART || code == ZERO_EXTRACT)
    invalidate ((((dest)->u.fld[0]).rtx1), ((enum machine_mode) (dest)->mode));
  else if (code == REG || code == SUBREG || code == MEM)
    invalidate (dest, VOIDmode);
}
static void
invalidate_skipped_block (rtx start)
{
  rtx insn;
  for (insn = start; insn && ((enum rtx_code) (insn)->code) != CODE_LABEL;
       insn = (((insn)->u.fld[2]).rtx1))
    {
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 {
   if (! (((insn))->unchanging))
     invalidate_memory ();
   invalidate_for_call ();
 }
      invalidate_from_clobbers ((((insn)->u.fld[5]).rtx1));
      note_stores ((((insn)->u.fld[5]).rtx1), invalidate_skipped_set, ((void *)0));
    }
}
static void
cse_check_loop_start (rtx x, rtx set , void *data)
{
  rtx *cse_check_loop_start_value = (rtx *) data;
  if (*cse_check_loop_start_value == (rtx) 0
      || ((enum rtx_code) (x)->code) == CC0 || ((enum rtx_code) (x)->code) == PC)
    return;
  if (((((enum rtx_code) (x)->code) == MEM) && (((enum rtx_code) (*cse_check_loop_start_value)->code) == MEM))
      || reg_overlap_mentioned_p (x, *cse_check_loop_start_value))
    *cse_check_loop_start_value = (rtx) 0;
}
static void
cse_set_around_loop (rtx x, rtx insn, rtx loop_start)
{
  struct table_elt *src_elt;
  if (((enum rtx_code) (x)->code) == SET
      && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) != PC && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) != CC0
      && !(((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG))
    {
      src_elt = lookup ((((x)->u.fld[1]).rtx1),
   (((((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG) && ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtuint) >= 53 ? (((unsigned) REG << 7) + (unsigned) (((((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtuint)) == cached_regno && cached_cse_reg_info) ? cached_cse_reg_info : get_cse_reg_info ((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtuint)))))->reg_qty)) : canon_hash ((((x)->u.fld[1]).rtx1), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode))) & ((1 << 5) - 1)),
   ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode));
      if (src_elt)
 for (src_elt = src_elt->first_same_value; src_elt;
      src_elt = src_elt->next_same_value)
   if ((((enum rtx_code) (src_elt->exp)->code) == REG) && (((src_elt->exp))->in_struct)
       && ((((enum rtx_code) (src_elt->exp)->code) == REG) ? 0 : notreg_cost (src_elt->exp, SET)) < ((((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG) ? 0 : notreg_cost ((((x)->u.fld[1]).rtx1), SET)))
     {
       rtx p, set;
       for (p = prev_nonnote_insn (loop_start);
     p && ((enum rtx_code) (p)->code) != CALL_INSN
     && ((enum rtx_code) (p)->code) != CODE_LABEL;
     p = prev_nonnote_insn (p))
  if ((set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0)) != 0
      && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
      && ((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode) == src_elt->mode
      && rtx_equal_p ((((set)->u.fld[1]).rtx1), (((x)->u.fld[1]).rtx1)))
    {
      rtx q;
      rtx cse_check_loop_start_value = (((x)->u.fld[1]).rtx1);
      for (q = p; q != loop_start; q = (((q)->u.fld[2]).rtx1))
        if (((((enum rtx_code) (q)->code) == INSN) || (((enum rtx_code) (q)->code) == JUMP_INSN) || (((enum rtx_code) (q)->code) == CALL_INSN)))
   note_stores ((((q)->u.fld[5]).rtx1),
         cse_check_loop_start,
         &cse_check_loop_start_value);
      if (cse_check_loop_start_value
   && (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0)
   && !can_throw_internal (insn)
   && validate_change (insn, &(((x)->u.fld[1]).rtx1),
         src_elt->exp, 0))
        {
   int nregs = max_reg_num ();
   rtx move
     = gen_move_insn (src_elt->exp, (((set)->u.fld[0]).rtx1));
   if (nregs != max_reg_num ())
     {
       if (! validate_change (insn, &(((x)->u.fld[1]).rtx1),
         (((set)->u.fld[1]).rtx1), 0))
         fancy_abort ("gcc.c", 428476, "?");
     }
   else
     {
       if (((rtx_class[(int) (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == CONST_VECTOR)
    && ! find_reg_equal_equiv_note (insn))
         set_unique_reg_note (insn, REG_EQUAL,
         (((set)->u.fld[1]).rtx1));
       if (control_flow_insn_p (p))
         emit_insn_before (move, next_nonnote_insn (p));
       else
         emit_insn_after (move, p);
     }
        }
      break;
    }
     }
    }
  addr_affects_sp_p ((((x)->u.fld[0]).rtx1));
  if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG) || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
      || (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
    invalidate ((((x)->u.fld[0]).rtx1), VOIDmode);
  else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == STRICT_LOW_PART
    || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ZERO_EXTRACT)
    invalidate (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode));
}
static void
cse_end_of_basic_block (rtx insn, struct cse_basic_block_data *data,
   int follow_jumps, int after_loop, int skip_blocks)
{
  rtx p = insn, q;
  int nsets = 0;
  int low_cuid = (uid_cuid[(((insn)->u.fld[0]).rtint)]), high_cuid = (uid_cuid[(((insn)->u.fld[0]).rtint)]);
  rtx next = ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? insn : next_real_insn (insn);
  int path_size = data->path_size;
  int path_entry = 0;
  int i;
  while (path_size > 0)
    {
      if (data->path[path_size - 1].status != PATH_NOT_TAKEN)
 {
   data->path[path_size - 1].status = PATH_NOT_TAKEN;
   break;
 }
      else
 path_size--;
    }
  if (((enum machine_mode) (insn)->mode) == QImode)
    follow_jumps = skip_blocks = 0;
  while (p && ((enum rtx_code) (p)->code) != CODE_LABEL)
    {
      if (! after_loop && ((enum rtx_code) (p)->code) == NOTE
   && (((p)->u.fld[5]).rtint) == NOTE_INSN_LOOP_END)
 break;
      if ((((p)->u.fld[1]).rtx1) && ((enum rtx_code) ((((p)->u.fld[1]).rtx1))->code) == CALL_INSN
   && find_reg_note ((((p)->u.fld[1]).rtx1), REG_SETJMP, ((void *)0)))
 break;
      if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) && ((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == PARALLEL)
 nsets += ((((((((p)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem);
      else if (((enum rtx_code) (p)->code) != NOTE)
 nsets += 1;
      if ((((p)->u.fld[0]).rtint) <= max_uid && (uid_cuid[(((p)->u.fld[0]).rtint)]) > high_cuid)
 high_cuid = (uid_cuid[(((p)->u.fld[0]).rtint)]);
      if ((((p)->u.fld[0]).rtint) <= max_uid && (uid_cuid[(((p)->u.fld[0]).rtint)]) < low_cuid)
 low_cuid = (uid_cuid[(((p)->u.fld[0]).rtint)]);
      if (path_entry < path_size && data->path[path_entry].branch == p)
 {
   if (data->path[path_entry].status != PATH_NOT_TAKEN)
     p = (((p)->u.fld[9]).rtx1);
   path_entry++;
 }
      else if ((follow_jumps || skip_blocks) && path_size < (compiler_params[(int) PARAM_MAX_CSE_PATH_LENGTH].value1) - 1
        && ((enum rtx_code) (p)->code) == JUMP_INSN
        && ((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET
        && ((enum rtx_code) (((((((p)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->code) == IF_THEN_ELSE
        && (((p)->u.fld[9]).rtx1) != 0
        && ((((((p)->u.fld[9]).rtx1))->u.fld[4]).rtint) == 1
        && ((((((p)->u.fld[9]).rtx1))->u.fld[2]).rtx1) != 0)
 {
   for (q = ((((((p)->u.fld[9]).rtx1))->u.fld[1]).rtx1); q; q = (((q)->u.fld[1]).rtx1))
     if ((((enum rtx_code) (q)->code) != NOTE
   || (((q)->u.fld[5]).rtint) == NOTE_INSN_LOOP_END
   || ((((q)->u.fld[1]).rtx1) && ((enum rtx_code) ((((q)->u.fld[1]).rtx1))->code) == CALL_INSN
       && find_reg_note ((((q)->u.fld[1]).rtx1), REG_SETJMP, ((void *)0))))
  && (((enum rtx_code) (q)->code) != CODE_LABEL || (((q)->u.fld[4]).rtint) != 0))
       break;
   if (follow_jumps && q != 0 && ((enum rtx_code) (q)->code) == BARRIER)
     {
       if (next_real_insn (q) == next)
  {
    p = (((p)->u.fld[2]).rtx1);
    continue;
  }
       for (i = 0; i < path_entry; i++)
  if (data->path[i].branch == p)
    break;
       if (i != path_entry)
  break;
       data->path[path_entry].branch = p;
       data->path[path_entry++].status = PATH_TAKEN;
       path_size = path_entry;
       p = (((p)->u.fld[9]).rtx1);
       (((((p)->u.fld[2]).rtx1))->mode = (QImode));
     }
   else if (skip_blocks && q != 0 && ((enum rtx_code) (q)->code) != CODE_LABEL)
     {
       rtx tmp;
       if (next_real_insn (q) == next)
  {
    p = (((p)->u.fld[2]).rtx1);
    continue;
  }
       for (i = 0; i < path_entry; i++)
  if (data->path[i].branch == p)
    break;
       if (i != path_entry)
  break;
       for (tmp = (((p)->u.fld[2]).rtx1); tmp && tmp != q; tmp = (((tmp)->u.fld[2]).rtx1))
  if (((enum rtx_code) (tmp)->code) == CODE_LABEL)
    break;
       if (tmp == q)
  {
    data->path[path_entry].branch = p;
    data->path[path_entry++].status = PATH_AROUND;
    path_size = path_entry;
    p = (((p)->u.fld[9]).rtx1);
    (((((p)->u.fld[2]).rtx1))->mode = (QImode));
  }
     }
 }
      p = (((p)->u.fld[2]).rtx1);
    }
  data->low_cuid = low_cuid;
  data->high_cuid = high_cuid;
  data->nsets = nsets;
  data->last = p;
  for (i = path_size - 1; i >= 0; i--)
    if (data->path[i].status != PATH_NOT_TAKEN)
      break;
  if (i == -1)
    data->path_size = 0;
  else
    data->path_size = path_size;
  data->path[path_size].branch = 0;
}
int
cse_main (rtx f, int nregs, int after_loop, FILE *file)
{
  struct cse_basic_block_data val;
  rtx insn = f;
  int i;
  val.path = xmalloc (sizeof (struct branch_path)
        * (compiler_params[(int) PARAM_MAX_CSE_PATH_LENGTH].value1));
  cse_jumps_altered = 0;
  recorded_label_ref = 0;
  constant_pool_entries_cost = 0;
  constant_pool_entries_regcost = 0;
  val.path_size = 0;
  rtl_hooks = cse_rtl_hooks;
  init_recog ();
  init_alias_analysis ();
  max_reg = nregs;
  max_insn_uid = get_max_uid ();
  reg_eqv_table = xmalloc (nregs * sizeof (struct reg_eqv_elem));
  n_elements_made = 0;
  max_uid = get_max_uid ();
  uid_cuid = xcalloc (max_uid + 1, sizeof (int));
  for (insn = f, i = 0; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) != NOTE
   || (((insn)->u.fld[5]).rtint) < 0)
 (uid_cuid[(((insn)->u.fld[0]).rtint)]) = ++i;
      else
 (uid_cuid[(((insn)->u.fld[0]).rtint)]) = i;
    }
  ggc_push_context ();
  insn = f;
  while (insn)
    {
      cse_altered = 0;
      cse_end_of_basic_block (insn, &val, flag_cse_follow_jumps, after_loop,
         flag_cse_skip_blocks);
      if (val.nsets == 0 || ((enum machine_mode) (insn)->mode) == QImode)
 {
   ((insn)->mode = (VOIDmode));
   insn = (val.last ? (((val.last)->u.fld[2]).rtx1) : 0);
   val.path_size = 0;
   continue;
 }
      cse_basic_block_start = val.low_cuid;
      cse_basic_block_end = val.high_cuid;
      max_qty = val.nsets * 2;
      if (file)
 fnotice (file, ";; Processing block from %d to %d, %d sets.\n",
   (((insn)->u.fld[0]).rtint), val.last ? (((val.last)->u.fld[0]).rtint) : 0,
   val.nsets);
      if (max_qty < 500)
 max_qty = 500;
      max_qty += max_reg;
      if (val.path_size > 0)
 cse_basic_block (insn, val.last, val.path, 0);
      else
 {
   int old_cse_jumps_altered = cse_jumps_altered;
   rtx temp;
   cse_jumps_altered = 0;
   temp = cse_basic_block (insn, val.last, val.path, ! after_loop);
   if (cse_jumps_altered == 0
       || (flag_cse_follow_jumps == 0 && flag_cse_skip_blocks == 0))
     insn = temp;
   cse_jumps_altered |= old_cse_jumps_altered;
 }
      if (cse_altered)
 ggc_collect ();
      C_alloca(0);
    }
  ggc_pop_context ();
  if (max_elements_made < n_elements_made)
    max_elements_made = n_elements_made;
  end_alias_analysis ();
  free (uid_cuid);
  free (reg_eqv_table);
  free (val.path);
  rtl_hooks = general_rtl_hooks;
  return cse_jumps_altered || recorded_label_ref;
}
static rtx
cse_basic_block (rtx from, rtx to, struct branch_path *next_branch,
   int around_loop)
{
  rtx insn;
  int to_usage = 0;
  rtx libcall_insn = (rtx) 0;
  int num_insns = 0;
  int no_conflict = 0;
  qty_table = xmalloc ((max_qty - max_reg) * sizeof (struct qty_table_elem));
  qty_table -= max_reg;
  new_basic_block ();
  if (to != 0 && ((enum rtx_code) (to)->code) == CODE_LABEL)
    ++(((to)->u.fld[4]).rtint);
  for (insn = from; insn != to; insn = (((insn)->u.fld[2]).rtx1))
    {
      enum rtx_code code = ((enum rtx_code) (insn)->code);
      if (code != NOTE && num_insns++ > 1000)
 {
   flush_hash_table ();
   num_insns = 0;
 }
      if (next_branch->branch == insn)
 {
   enum taken status = next_branch++->status;
   if (status != PATH_NOT_TAKEN)
     {
       if (status == PATH_TAKEN)
  record_jump_equiv (insn, 1);
       else
  invalidate_skipped_block ((((insn)->u.fld[2]).rtx1));
       insn = (((insn)->u.fld[9]).rtx1);
       continue;
     }
 }
      if (((enum machine_mode) (insn)->mode) == QImode)
 ((insn)->mode = (VOIDmode));
      if ((rtx_class[(int) (code)]) == RTX_INSN)
 {
   rtx p;
   if ((((insn)->u.fld[8]).rtx1))
     (((insn)->u.fld[8]).rtx1) = cse_process_notes ((((insn)->u.fld[8]).rtx1), (rtx) 0);
   if ((((insn)->u.fld[8]).rtx1) != 0)
     {
       if ((p = find_reg_note (insn, REG_LIBCALL, (rtx) 0)))
  libcall_insn = (((p)->u.fld[0]).rtx1);
       else if (find_reg_note (insn, REG_RETVAL, (rtx) 0))
  {
    if (! no_conflict)
      libcall_insn = 0;
    else
      no_conflict = -1;
  }
       else if (find_reg_note (insn, REG_NO_CONFLICT, (rtx) 0))
  no_conflict = 1;
     }
   cse_insn (insn, libcall_insn);
   if (no_conflict == -1)
     {
       libcall_insn = 0;
       no_conflict = 0;
     }
   if (((enum rtx_code) (insn)->code) == INSN && ! recorded_label_ref
       && for_each_rtx (&(((insn)->u.fld[5]).rtx1), check_for_label_ref,
          (void *) insn))
     recorded_label_ref = 1;
 }
      if (any_uncondjump_p (insn))
 {
   if (to == 0)
     {
       free (qty_table + max_reg);
       return 0;
     }
   if ((((insn)->u.fld[9]).rtx1) == to)
     to_usage = 1;
   if ((((to))->volatil))
     break;
   insn = (((to)->u.fld[1]).rtx1);
 }
      if (to != 0 && (((insn)->u.fld[2]).rtx1) == to
   && ((enum rtx_code) (to)->code) == CODE_LABEL && --(((to)->u.fld[4]).rtint) == to_usage)
 {
   struct cse_basic_block_data val;
   rtx prev;
   insn = (((to)->u.fld[2]).rtx1);
   if (insn == 0)
     {
       free (qty_table + max_reg);
       return 0;
     }
   prev = prev_nonnote_insn (to);
   if (prev && ((enum rtx_code) (prev)->code) == BARRIER)
     {
       free (qty_table + max_reg);
       return insn;
     }
   to_usage = 0;
   val.path_size = 0;
   val.path = xmalloc (sizeof (struct branch_path)
         * (compiler_params[(int) PARAM_MAX_CSE_PATH_LENGTH].value1));
   cse_end_of_basic_block (insn, &val, 0, 0, 0);
   free (val.path);
   if (val.nsets * 2 + next_qty > max_qty)
     break;
   cse_basic_block_start = val.low_cuid;
   cse_basic_block_end = val.high_cuid;
   to = val.last;
   if (to != 0 && ((enum rtx_code) (to)->code) == CODE_LABEL)
     ++(((to)->u.fld[4]).rtint);
   insn = (((insn)->u.fld[1]).rtx1);
 }
    }
  if (next_qty > max_qty)
    fancy_abort ("gcc.c", 429095, "?");
  insn = prev_nonnote_insn (to);
  if ((cse_jumps_altered == 0
       || (flag_cse_follow_jumps == 0 && flag_cse_skip_blocks == 0))
      && around_loop && to != 0
      && ((enum rtx_code) (to)->code) == NOTE && (((to)->u.fld[5]).rtint) == NOTE_INSN_LOOP_END
      && ((enum rtx_code) (insn)->code) == JUMP_INSN
      && (((insn)->u.fld[9]).rtx1) != 0
      && ((((((insn)->u.fld[9]).rtx1))->u.fld[4]).rtint) == 1)
    cse_around_loop ((((insn)->u.fld[9]).rtx1));
  free (qty_table + max_reg);
  return to ? (((to)->u.fld[2]).rtx1) : 0;
}
static int
check_for_label_ref (rtx *rtl, void *data)
{
  rtx insn = (rtx) data;
  return (((enum rtx_code) (*rtl)->code) == LABEL_REF
   && ! (((*rtl))->volatil)
   && (((enum rtx_code) ((((*rtl)->u.fld[0]).rtx1))->code) == CODE_LABEL)
   && ((((((*rtl)->u.fld[0]).rtx1))->u.fld[0]).rtint) != 0
   && ! find_reg_note (insn, REG_LABEL, (((*rtl)->u.fld[0]).rtx1)));
}
static void
count_reg_usage (rtx x, int *counts, int incr)
{
  enum rtx_code code;
  rtx note;
  const char *fmt;
  int i, j;
  if (x == 0)
    return;
  switch (code = ((enum rtx_code) (x)->code))
    {
    case REG:
      counts[(((x)->u.fld[0]).rtuint)] += incr;
      return;
    case PC:
    case CC0:
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
      return;
    case CLOBBER:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
 count_reg_usage (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), counts, incr);
      return;
    case SET:
      if (!(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 count_reg_usage ((((x)->u.fld[0]).rtx1), counts, incr);
      count_reg_usage ((((x)->u.fld[1]).rtx1), counts, incr);
      return;
    case CALL_INSN:
      count_reg_usage ((((x)->u.fld[9]).rtx1), counts, incr);
    case INSN:
    case JUMP_INSN:
      count_reg_usage ((((x)->u.fld[5]).rtx1), counts, incr);
      note = find_reg_equal_equiv_note (x);
      if (note)
 {
   rtx eqv = (((note)->u.fld[0]).rtx1);
   if (((enum rtx_code) (eqv)->code) == EXPR_LIST)
     do
       {
  count_reg_usage ((((eqv)->u.fld[0]).rtx1), counts, incr);
  eqv = (((eqv)->u.fld[1]).rtx1);
       }
     while (eqv && ((enum rtx_code) (eqv)->code) == EXPR_LIST);
   else
     count_reg_usage (eqv, counts, incr);
 }
      return;
    case EXPR_LIST:
      if (((enum reg_note) ((enum machine_mode) (x)->mode)) == REG_EQUAL
   || (((enum reg_note) ((enum machine_mode) (x)->mode)) != REG_NONNEG && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == USE)
   || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CLOBBER)
 count_reg_usage ((((x)->u.fld[0]).rtx1), counts, incr);
      count_reg_usage ((((x)->u.fld[1]).rtx1), counts, incr);
      return;
    case ASM_OPERANDS:
      for (i = (((((x)->u.fld[3]).rtvec1))->num_elem) - 1; i >= 0; i--)
 count_reg_usage ((((((x)->u.fld[3]).rtvec1))->elem[i]), counts, incr);
      return;
    case INSN_LIST:
      fancy_abort ("gcc.c", 429229, "?");
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 count_reg_usage ((((x)->u.fld[i]).rtx1), counts, incr);
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   count_reg_usage ((((((x)->u.fld[i]).rtvec1))->elem[j]), counts, incr);
    }
}
static unsigned char
set_live_p (rtx set, rtx insn ,
     int *counts)
{
  if (set_noop_p (set))
    ;
  else if (!(((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
    || ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
    || counts[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] != 0
    || side_effects_p ((((set)->u.fld[1]).rtx1)))
    return 1;
  return 0;
}
static unsigned char
insn_live_p (rtx insn, int *counts)
{
  int i;
  if (flag_non_call_exceptions && may_trap_p ((((insn)->u.fld[5]).rtx1)))
    return 1;
  else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET)
    return set_live_p ((((insn)->u.fld[5]).rtx1), insn, counts);
  else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL)
    {
      for (i = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 {
   rtx elt = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (elt)->code) == SET)
     {
       if (set_live_p (elt, insn, counts))
  return 1;
     }
   else if (((enum rtx_code) (elt)->code) != CLOBBER && ((enum rtx_code) (elt)->code) != USE)
     return 1;
 }
      return 0;
    }
  else
    return 1;
}
static unsigned char
dead_libcall_p (rtx insn, int *counts)
{
  rtx note, set, new;
  note = find_reg_note (insn, REG_EQUAL, (rtx) 0);
  if (!note)
    return 0;
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (!set)
    return 0;
  new = simplify_rtx ((((note)->u.fld[0]).rtx1));
  if (!new)
    new = (((note)->u.fld[0]).rtx1);
  count_reg_usage (insn, counts, -1);
  if (validate_change (insn, &(((set)->u.fld[1]).rtx1), new, 0))
    {
      count_reg_usage (insn, counts, 1);
      remove_note (insn, find_reg_note (insn, REG_RETVAL, (rtx) 0));
      remove_note (insn, note);
      return 1;
    }
  if (((rtx_class[(int) (((enum rtx_code) (new)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (new)->code) == CONST_VECTOR))
    {
      new = force_const_mem (((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode), new);
      if (new && validate_change (insn, &(((set)->u.fld[1]).rtx1), new, 0))
 {
   count_reg_usage (insn, counts, 1);
   remove_note (insn, find_reg_note (insn, REG_RETVAL, (rtx) 0));
   remove_note (insn, note);
   return 1;
 }
    }
  count_reg_usage (insn, counts, 1);
  return 0;
}
int
delete_trivially_dead_insns (rtx insns, int nreg)
{
  int *counts;
  rtx insn, prev;
  int in_libcall = 0, dead_libcall = 0;
  int ndead = 0, nlastdead, niterations = 0;
  timevar_push (TV_DELETE_TRIVIALLY_DEAD);
  counts = xcalloc (nreg, sizeof (int));
  for (insn = next_real_insn (insns); insn; insn = next_real_insn (insn))
    count_reg_usage (insn, counts, 1);
  do
    {
      nlastdead = ndead;
      niterations++;
      insn = get_last_insn ();
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 insn = prev_real_insn (insn);
      for (; insn; insn = prev)
 {
   int live_insn = 0;
   prev = prev_real_insn (insn);
   if (find_reg_note (insn, REG_RETVAL, (rtx) 0))
     {
       in_libcall = 1;
       live_insn = 1;
       dead_libcall = dead_libcall_p (insn, counts);
     }
   else if (in_libcall)
     live_insn = ! dead_libcall;
   else
     live_insn = insn_live_p (insn, counts);
   if (! live_insn)
     {
       count_reg_usage (insn, counts, -1);
       delete_insn_and_edges (insn);
       ndead++;
     }
   if (find_reg_note (insn, REG_LIBCALL, (rtx) 0))
     {
       in_libcall = 0;
       dead_libcall = 0;
     }
 }
    }
  while (ndead != nlastdead);
  if (dump_file && ndead)
    fprintf (dump_file, "Deleted %i trivially dead insns; %i iterations\n",
      ndead, niterations);
  free (counts);
  timevar_pop (TV_DELETE_TRIVIALLY_DEAD);
  return ndead;
}
static int
cse_change_cc_mode (rtx *loc, void *data)
{
  rtx newreg = (rtx) data;
  if (*loc
      && (((enum rtx_code) (*loc)->code) == REG)
      && (((*loc)->u.fld[0]).rtuint) == (((newreg)->u.fld[0]).rtuint)
      && ((enum machine_mode) (*loc)->mode) != ((enum machine_mode) (newreg)->mode))
    {
      *loc = newreg;
      return -1;
    }
  return 0;
}
static void
cse_change_cc_mode_insns (rtx start, rtx end, rtx newreg)
{
  rtx insn;
  for (insn = start; insn != end; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      if (reg_set_p (newreg, insn))
 return;
      for_each_rtx (&(((insn)->u.fld[5]).rtx1), cse_change_cc_mode, newreg);
      for_each_rtx (&(((insn)->u.fld[8]).rtx1), cse_change_cc_mode, newreg);
    }
}
static enum machine_mode
cse_cc_succs (basic_block bb, rtx cc_reg, rtx cc_src, unsigned char can_change_mode)
{
  unsigned char found_equiv;
  enum machine_mode mode;
  unsigned int insn_count;
  edge e;
  rtx insns[2];
  enum machine_mode modes[2];
  rtx last_insns[2];
  unsigned int i;
  rtx newreg;
  found_equiv = 0;
  mode = ((enum machine_mode) (cc_src)->mode);
  insn_count = 0;
  for (e = bb->succ; e; e = e->succ_next)
    {
      rtx insn;
      rtx end;
      if (e->flags & (2 | 4 | 8))
 continue;
      if (! e->dest->pred
   || e->dest->pred->pred_next
   || e->dest == EXIT_BLOCK_PTR)
 continue;
      end = ((((e->dest)->end_)->u.fld[2]).rtx1);
      for (insn = (e->dest)->head_; insn != end; insn = (((insn)->u.fld[2]).rtx1))
 {
   rtx set;
   if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     continue;
   if (modified_in_p (cc_src, insn))
     break;
   set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
   if (set
       && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
       && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == (((cc_reg)->u.fld[0]).rtuint))
     {
       unsigned char found;
       enum machine_mode set_mode;
       enum machine_mode comp_mode;
       found = 0;
       set_mode = ((enum machine_mode) ((((set)->u.fld[1]).rtx1))->mode);
       comp_mode = set_mode;
       if (rtx_equal_p (cc_src, (((set)->u.fld[1]).rtx1)))
  found = 1;
       else if (((enum rtx_code) (cc_src)->code) == COMPARE
         && ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == COMPARE
         && mode != set_mode
         && rtx_equal_p ((((cc_src)->u.fld[0]).rtx1),
           ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1))
         && rtx_equal_p ((((cc_src)->u.fld[1]).rtx1),
           ((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1)))
  {
    comp_mode = targetm.cc_modes_compatible (mode, set_mode);
    if (comp_mode != VOIDmode
        && (can_change_mode || comp_mode == mode))
      found = 1;
  }
       if (found)
  {
    found_equiv = 1;
    if (insn_count < (sizeof (insns) / sizeof ((insns)[0])))
      {
        insns[insn_count] = insn;
        modes[insn_count] = set_mode;
        last_insns[insn_count] = end;
        ++insn_count;
        if (mode != comp_mode)
   {
     if (! can_change_mode)
       fancy_abort ("gcc.c", 429589, "?");
     mode = comp_mode;
     ((cc_src)->mode = (mode));
   }
      }
    else
      {
        if (set_mode != mode)
   {
     break;
   }
        delete_insn (insn);
      }
    continue;
  }
       break;
     }
   if (reg_set_p (cc_reg, insn))
     break;
 }
      if (insn == end)
 {
   enum machine_mode submode;
   submode = cse_cc_succs (e->dest, cc_reg, cc_src, 0);
   if (submode != VOIDmode)
     {
       if (submode != mode)
  fancy_abort ("gcc.c", 429638, "?");
       found_equiv = 1;
       can_change_mode = 0;
     }
 }
    }
  if (! found_equiv)
    return VOIDmode;
  newreg = (rtx) 0;
  for (i = 0; i < insn_count; ++i)
    {
      if (modes[i] != mode)
 {
   if (! newreg)
     {
       if (((enum machine_mode) (cc_reg)->mode) == mode)
  newreg = cc_reg;
       else
  newreg = gen_rtx_REG (mode, (((cc_reg)->u.fld[0]).rtuint));
     }
   cse_change_cc_mode_insns ((((insns[i])->u.fld[2]).rtx1), last_insns[i],
        newreg);
 }
      delete_insn (insns[i]);
    }
  return mode;
}
void
cse_condition_code_reg (void)
{
  unsigned int cc_regno_1;
  unsigned int cc_regno_2;
  rtx cc_reg_1;
  rtx cc_reg_2;
  basic_block bb;
  if (! targetm.fixed_condition_code_regs (&cc_regno_1, &cc_regno_2))
    return;
  cc_reg_1 = gen_rtx_REG (CCmode, cc_regno_1);
  if (cc_regno_2 != (~(unsigned int) 0))
    cc_reg_2 = gen_rtx_REG (CCmode, cc_regno_2);
  else
    cc_reg_2 = (rtx) 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      rtx last_insn;
      rtx cc_reg;
      rtx insn;
      rtx cc_src_insn;
      rtx cc_src;
      enum machine_mode mode;
      enum machine_mode orig_mode;
      last_insn = (bb)->end_;
      if (((enum rtx_code) (last_insn)->code) != JUMP_INSN)
 continue;
      if (reg_referenced_p (cc_reg_1, (((last_insn)->u.fld[5]).rtx1)))
 cc_reg = cc_reg_1;
      else if (cc_reg_2 && reg_referenced_p (cc_reg_2, (((last_insn)->u.fld[5]).rtx1)))
 cc_reg = cc_reg_2;
      else
 continue;
      cc_src_insn = (rtx) 0;
      cc_src = (rtx) 0;
      for (insn = (((last_insn)->u.fld[1]).rtx1);
    insn && insn != ((((bb)->head_)->u.fld[1]).rtx1);
    insn = (((insn)->u.fld[1]).rtx1))
 {
   rtx set;
   if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     continue;
   set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
   if (set
       && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
       && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == (((cc_reg)->u.fld[0]).rtuint))
     {
       cc_src_insn = insn;
       cc_src = (((set)->u.fld[1]).rtx1);
       break;
     }
   else if (reg_set_p (cc_reg, insn))
     break;
 }
      if (! cc_src_insn)
 continue;
      if (modified_between_p (cc_src, cc_src_insn, (((last_insn)->u.fld[2]).rtx1)))
 continue;
      orig_mode = ((enum machine_mode) (cc_src)->mode);
      mode = cse_cc_succs (bb, cc_reg, cc_src, 1);
      if (mode != VOIDmode)
 {
   if (mode != ((enum machine_mode) (cc_src)->mode))
     fancy_abort ("gcc.c", 429767, "?");
   if (mode != orig_mode)
     {
       rtx newreg = gen_rtx_REG (mode, (((cc_reg)->u.fld[0]).rtuint));
       for_each_rtx (&(((cc_src_insn)->u.fld[5]).rtx1), cse_change_cc_mode,
       newreg);
       for_each_rtx (&(((cc_src_insn)->u.fld[8]).rtx1), cse_change_cc_mode,
       newreg);
       cse_change_cc_mode_insns ((((cc_src_insn)->u.fld[2]).rtx1),
     (((last_insn)->u.fld[2]).rtx1),
     newreg);
     }
 }
    }
}
static unsigned char cselib_record_memory;
static int entry_and_rtx_equal_p (const void *, const void *);
static hashval_t get_value_hash (const void *);
static struct elt_list *new_elt_list (struct elt_list *, cselib_val *);
static struct elt_loc_list *new_elt_loc_list (struct elt_loc_list *, rtx);
static void unchain_one_value (cselib_val *);
static void unchain_one_elt_list (struct elt_list **);
static void unchain_one_elt_loc_list (struct elt_loc_list **);
static void clear_table (void);
static int discard_useless_locs (void **, void *);
static int discard_useless_values (void **, void *);
static void remove_useless_values (void);
static rtx wrap_constant (enum machine_mode, rtx);
static unsigned int hash_rtx (rtx, enum machine_mode, int);
static cselib_val *new_cselib_val (unsigned int, enum machine_mode);
static void add_mem_for_addr (cselib_val *, cselib_val *, rtx);
static cselib_val *cselib_lookup_mem (rtx, int);
static void cselib_invalidate_regno (unsigned int, enum machine_mode);
static void cselib_invalidate_mem (rtx);
static void cselib_invalidate_rtx (rtx, rtx, void *);
static void cselib_record_set (rtx, cselib_val *, cselib_val *);
static void cselib_record_sets (rtx);
static htab_t elt_hash_table;
static rtx cselib_current_insn;
static unsigned char cselib_current_insn_in_libcall;
static unsigned int next_unknown_value;
static unsigned int cselib_nregs;
static int n_useless_values;
struct elt_list **reg_values;
unsigned int reg_values_size;
static unsigned int max_value_regs;
static unsigned int *used_regs;
static unsigned int n_used_regs;
static rtx callmem;
static int value1s_became_useless;
static cselib_val dummy_val;
static cselib_val *first_containing_mem = &dummy_val;
static alloc_pool elt_loc_list_pool, elt_list_pool, cselib_val_pool, value_pool;
static struct elt_list *
new_elt_list (struct elt_list *next, cselib_val *elt)
{
  struct elt_list *el;
  el = pool_alloc (elt_list_pool);
  el->next = next;
  el->elt = elt;
  return el;
}
static struct elt_loc_list *
new_elt_loc_list (struct elt_loc_list *next, rtx loc)
{
  struct elt_loc_list *el;
  el = pool_alloc (elt_loc_list_pool);
  el->next = next;
  el->loc = loc;
  el->setting_insn = cselib_current_insn;
  el->in_libcall = cselib_current_insn_in_libcall;
  return el;
}
static void
unchain_one_elt_list (struct elt_list **pl)
{
  struct elt_list *l = *pl;
  *pl = l->next;
  pool_free (elt_list_pool, l);
}
static void
unchain_one_elt_loc_list (struct elt_loc_list **pl)
{
  struct elt_loc_list *l = *pl;
  *pl = l->next;
  pool_free (elt_loc_list_pool, l);
}
static void
unchain_one_value (cselib_val *v)
{
  while (v->addr_list)
    unchain_one_elt_list (&v->addr_list);
  pool_free (cselib_val_pool, v);
}
static void
clear_table (void)
{
  unsigned int i;
  for (i = 0; i < n_used_regs; i++)
    reg_values[used_regs[i]] = 0;
  max_value_regs = 0;
  n_used_regs = 0;
  htab_empty (elt_hash_table);
  n_useless_values = 0;
  next_unknown_value = 0;
  first_containing_mem = &dummy_val;
}
static int
entry_and_rtx_equal_p (const void *entry, const void *x_arg)
{
  struct elt_loc_list *l;
  const cselib_val *v = (const cselib_val *) entry;
  rtx x = (rtx) x_arg;
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  if (((enum rtx_code) (x)->code) == CONST_INT
      || (mode == VOIDmode && ((enum rtx_code) (x)->code) == CONST_DOUBLE))
    fancy_abort ("gcc.c", 430006, "?");
  if (mode != ((enum machine_mode) (v->u.val_rtx)->mode))
    return 0;
  if (((enum rtx_code) (x)->code) == CONST
      && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_INT
   || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_DOUBLE))
    x = (((x)->u.fld[0]).rtx1);
  for (l = v->locs; l; l = l->next)
    if (rtx_equal_for_cselib_p (l->loc, x))
      return 1;
  return 0;
}
static hashval_t
get_value_hash (const void *entry)
{
  const cselib_val *v = (const cselib_val *) entry;
  return v->value1;
}
int
references_value_p (rtx x, int only_useless)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt = (rtx_format[(int) (code)]);
  int i, j;
  if (((enum rtx_code) (x)->code) == VALUE
      && (! only_useless || (((x)->u.fld[0]).rt_cselib)->locs == 0))
    return 1;
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e' && references_value_p ((((x)->u.fld[i]).rtx1), only_useless))
 return 1;
      else if (fmt[i] == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   if (references_value_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), only_useless))
     return 1;
    }
  return 0;
}
static int
discard_useless_locs (void **x, void *info )
{
  cselib_val *v = (cselib_val *)*x;
  struct elt_loc_list **p = &v->locs;
  int had_locs = v->locs != 0;
  while (*p)
    {
      if (references_value_p ((*p)->loc, 1))
 unchain_one_elt_loc_list (p);
      else
 p = &(*p)->next;
    }
  if (had_locs && v->locs == 0)
    {
      n_useless_values++;
      values_became_useless = 1;
    }
  return 1;
}
static int
discard_useless_values (void **x, void *info )
{
  cselib_val *v = (cselib_val *)*x;
  if (v->locs == 0)
    {
      (((v->u.val_rtx)->u.fld[0]).rt_cselib) = ((void *)0);
      htab_clear_slot (elt_hash_table, x);
      unchain_one_value (v);
      n_useless_values--;
    }
  return 1;
}
static void
remove_useless_values (void)
{
  cselib_val **p, *v;
  do
    {
      values_became_useless = 0;
      htab_traverse (elt_hash_table, discard_useless_locs, 0);
    }
  while (values_became_useless);
  p = &first_containing_mem;
  for (v = *p; v != &dummy_val; v = v->next_containing_mem)
    if (v->locs)
      {
 *p = v;
 p = &(*p)->next_containing_mem;
      }
  *p = &dummy_val;
  htab_traverse (elt_hash_table, discard_useless_values, 0);
  if (n_useless_values != 0)
    fancy_abort ("gcc.c", 430140, "?");
}
enum machine_mode
cselib_reg_set_mode (rtx x)
{
  if (!(((enum rtx_code) (x)->code) == REG))
    return ((enum machine_mode) (x)->mode);
  if (reg_values[(((x)->u.fld[0]).rtuint)] == ((void *)0)
      || reg_values[(((x)->u.fld[0]).rtuint)]->elt == ((void *)0))
    return VOIDmode;
  return ((enum machine_mode) (reg_values[(((x)->u.fld[0]).rtuint)]->elt->u.val_rtx)->mode);
}
int
rtx_equal_for_cselib_p (rtx x, rtx y)
{
  enum rtx_code code;
  const char *fmt;
  int i;
  if ((((enum rtx_code) (x)->code) == REG) || (((enum rtx_code) (x)->code) == MEM))
    {
      cselib_val *e = cselib_lookup (x, ((enum machine_mode) (x)->mode), 0);
      if (e)
 x = e->u.val_rtx;
    }
  if ((((enum rtx_code) (y)->code) == REG) || (((enum rtx_code) (y)->code) == MEM))
    {
      cselib_val *e = cselib_lookup (y, ((enum machine_mode) (y)->mode), 0);
      if (e)
 y = e->u.val_rtx;
    }
  if (x == y)
    return 1;
  if (((enum rtx_code) (x)->code) == VALUE && ((enum rtx_code) (y)->code) == VALUE)
    return (((x)->u.fld[0]).rt_cselib) == (((y)->u.fld[0]).rt_cselib);
  if (((enum rtx_code) (x)->code) == VALUE)
    {
      cselib_val *e = (((x)->u.fld[0]).rt_cselib);
      struct elt_loc_list *l;
      for (l = e->locs; l; l = l->next)
 {
   rtx t = l->loc;
   if ((((enum rtx_code) (t)->code) == REG) || (((enum rtx_code) (t)->code) == MEM))
     continue;
   else if (rtx_equal_for_cselib_p (t, y))
     return 1;
 }
      return 0;
    }
  if (((enum rtx_code) (y)->code) == VALUE)
    {
      cselib_val *e = (((y)->u.fld[0]).rt_cselib);
      struct elt_loc_list *l;
      for (l = e->locs; l; l = l->next)
 {
   rtx t = l->loc;
   if ((((enum rtx_code) (t)->code) == REG) || (((enum rtx_code) (t)->code) == MEM))
     continue;
   else if (rtx_equal_for_cselib_p (x, t))
     return 1;
 }
      return 0;
    }
  if (((enum rtx_code) (x)->code) != ((enum rtx_code) (y)->code) || ((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode))
    return 0;
  if (((enum rtx_code) (x)->code) == LABEL_REF)
    return (((x)->u.fld[0]).rtx1) == (((y)->u.fld[0]).rtx1);
  code = ((enum rtx_code) (x)->code);
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      int j;
      switch (fmt[i])
 {
 case 'w':
   if (((x)->u.hwint[i]) != ((y)->u.hwint[i]))
     return 0;
   break;
 case 'n':
 case 'i':
   if ((((x)->u.fld[i]).rtint) != (((y)->u.fld[i]).rtint))
     return 0;
   break;
 case 'V':
 case 'E':
   if ((((((x)->u.fld[i]).rtvec1))->num_elem) != (((((y)->u.fld[i]).rtvec1))->num_elem))
     return 0;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     if (! rtx_equal_for_cselib_p ((((((x)->u.fld[i]).rtvec1))->elem[j]),
       (((((y)->u.fld[i]).rtvec1))->elem[j])))
       return 0;
   break;
 case 'e':
   if (! rtx_equal_for_cselib_p ((((x)->u.fld[i]).rtx1), (((y)->u.fld[i]).rtx1)))
     return 0;
   break;
 case 'S':
 case 's':
   if (strcmp ((((x)->u.fld[i]).rtstr), (((y)->u.fld[i]).rtstr)))
     return 0;
   break;
 case 'u':
   break;
 case '0':
 case 't':
   break;
 default:
   fancy_abort ("gcc.c", 430293, "?");
 }
    }
  return 1;
}
static rtx
wrap_constant (enum machine_mode mode, rtx x)
{
  if (((enum rtx_code) (x)->code) != CONST_INT
      && (((enum rtx_code) (x)->code) != CONST_DOUBLE || ((enum machine_mode) (x)->mode) != VOIDmode))
    return x;
  if (mode == VOIDmode)
    fancy_abort ("gcc.c", 430309, "?");
  return gen_rtx_fmt_e (CONST, (mode), (x));
}
static unsigned int
hash_rtx (rtx x, enum machine_mode mode, int create)
{
  cselib_val *e;
  int i, j;
  enum rtx_code code;
  const char *fmt;
  unsigned int hash = 0;
  code = ((enum rtx_code) (x)->code);
  hash += (unsigned) code + (unsigned) ((enum machine_mode) (x)->mode);
  switch (code)
    {
    case MEM:
    case REG:
      e = cselib_lookup (x, ((enum machine_mode) (x)->mode), create);
      if (! e)
 return 0;
      return e->value1;
    case CONST_INT:
      hash += ((unsigned) CONST_INT << 7) + (unsigned) mode + ((x)->u.hwint[0]);
      return hash ? hash : (unsigned int) CONST_INT;
    case CONST_DOUBLE:
      hash += (unsigned) code + (unsigned) ((enum machine_mode) (x)->mode);
      if (((enum machine_mode) (x)->mode) != VOIDmode)
 hash += real_hash (((struct real_value *)&((x)->u.hwint[0])));
      else
 hash += ((unsigned) ((x)->u.hwint[0])
   + (unsigned) ((x)->u.hwint[1]));
      return hash ? hash : (unsigned int) CONST_DOUBLE;
    case CONST_VECTOR:
      {
 int units;
 rtx elt;
 units = (((((x)->u.fld[0]).rtvec1))->num_elem);
 for (i = 0; i < units; ++i)
   {
     elt = (((((x)->u.fld[0]).rtvec1))->elem[i]);
     hash += hash_rtx (elt, ((enum machine_mode) (elt)->mode), 0);
   }
 return hash;
      }
    case LABEL_REF:
      hash
 += ((unsigned) LABEL_REF << 7) + (unsigned long) (((x)->u.fld[0]).rtx1);
      return hash ? hash : (unsigned int) LABEL_REF;
    case SYMBOL_REF:
      hash
 += ((unsigned) SYMBOL_REF << 7) + (unsigned long) (((x)->u.fld[0]).rtstr);
      return hash ? hash : (unsigned int) SYMBOL_REF;
    case PRE_DEC:
    case PRE_INC:
    case POST_DEC:
    case POST_INC:
    case POST_MODIFY:
    case PRE_MODIFY:
    case PC:
    case CC0:
    case CALL:
    case UNSPEC_VOLATILE:
      return 0;
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 0;
      break;
    default:
      break;
    }
  i = (rtx_length[(int) (code)]) - 1;
  fmt = (rtx_format[(int) (code)]);
  for (; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   rtx tem = (((x)->u.fld[i]).rtx1);
   unsigned int tem_hash = hash_rtx (tem, 0, create);
   if (tem_hash == 0)
     return 0;
   hash += tem_hash;
 }
      else if (fmt[i] == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   {
     unsigned int tem_hash = hash_rtx ((((((x)->u.fld[i]).rtvec1))->elem[j]), 0, create);
     if (tem_hash == 0)
       return 0;
     hash += tem_hash;
   }
      else if (fmt[i] == 's')
 {
   const unsigned char *p = (const unsigned char *) (((x)->u.fld[i]).rtstr);
   if (p)
     while (*p)
       hash += *p++;
 }
      else if (fmt[i] == 'i')
 hash += (((x)->u.fld[i]).rtint);
      else if (fmt[i] == '0' || fmt[i] == 't')
             ;
      else
 fancy_abort ("gcc.c", 430445, "?");
    }
  return hash ? hash : 1 + (unsigned int) ((enum rtx_code) (x)->code);
}
static cselib_val *
new_cselib_val (unsigned int value1, enum machine_mode mode)
{
  cselib_val *e = pool_alloc (cselib_val_pool);
  e->value1 = value1;
  e->u.val_rtx = pool_alloc (value_pool);
  memset (e->u.val_rtx, 0, __builtin_offsetof (rtx_def, u));
  ((e->u.val_rtx)->code = (VALUE));
  ((e->u.val_rtx)->mode = (mode));
  (((e->u.val_rtx)->u.fld[0]).rt_cselib) = e;
  e->addr_list = 0;
  e->locs = 0;
  e->next_containing_mem = 0;
  return e;
}
static void
add_mem_for_addr (cselib_val *addr_elt, cselib_val *mem_elt, rtx x)
{
  struct elt_loc_list *l;
  for (l = mem_elt->locs; l; l = l->next)
    if ((((enum rtx_code) (l->loc)->code) == MEM)
 && ((((((l->loc)->u.fld[0]).rtx1))->u.fld[0]).rt_cselib) == addr_elt)
      return;
  addr_elt->addr_list = new_elt_list (addr_elt->addr_list, mem_elt);
  mem_elt->locs
    = new_elt_loc_list (mem_elt->locs,
   replace_equiv_address_nv (x, addr_elt->u.val_rtx));
  if (mem_elt->next_containing_mem == ((void *)0))
    {
      mem_elt->next_containing_mem = first_containing_mem;
      first_containing_mem = mem_elt;
    }
}
static cselib_val *
cselib_lookup_mem (rtx x, int create)
{
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  void **slot;
  cselib_val *addr;
  cselib_val *mem_elt;
  struct elt_list *l;
  if ((((x))->volatil) || mode == BLKmode
      || !cselib_record_memory
      || ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && flag_float_store))
    return 0;
  addr = cselib_lookup ((((x)->u.fld[0]).rtx1), mode, create);
  if (! addr)
    return 0;
  for (l = addr->addr_list; l; l = l->next)
    if (((enum machine_mode) (l->elt->u.val_rtx)->mode) == mode)
      return l->elt;
  if (! create)
    return 0;
  mem_elt = new_cselib_val (++next_unknown_value, mode);
  add_mem_for_addr (addr, mem_elt, x);
  slot = htab_find_slot_with_hash (elt_hash_table, wrap_constant (mode, x),
       mem_elt->value1, INSERT);
  *slot = mem_elt;
  return mem_elt;
}
rtx
cselib_subst_to_values (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt = (rtx_format[(int) (code)]);
  cselib_val *e;
  struct elt_list *l;
  rtx copy = x;
  int i;
  switch (code)
    {
    case REG:
      l = reg_values[(((x)->u.fld[0]).rtuint)];
      if (l && l->elt == ((void *)0))
 l = l->next;
      for (; l; l = l->next)
 if (((enum machine_mode) (l->elt->u.val_rtx)->mode) == ((enum machine_mode) (x)->mode))
   return l->elt->u.val_rtx;
      fancy_abort ("gcc.c", 430568, "?");
    case MEM:
      e = cselib_lookup_mem (x, 0);
      if (! e)
 {
   e = new_cselib_val (++next_unknown_value, ((enum machine_mode) (x)->mode));
 }
      return e->u.val_rtx;
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CONST_INT:
      return x;
    case POST_INC:
    case PRE_INC:
    case POST_DEC:
    case PRE_DEC:
    case POST_MODIFY:
    case PRE_MODIFY:
      e = new_cselib_val (++next_unknown_value, ((enum machine_mode) (x)->mode));
      return e->u.val_rtx;
    default:
      break;
    }
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   rtx t = cselib_subst_to_values ((((x)->u.fld[i]).rtx1));
   if (t != (((x)->u.fld[i]).rtx1) && x == copy)
     copy = shallow_copy_rtx_stat (x );
   (((copy)->u.fld[i]).rtx1) = t;
 }
      else if (fmt[i] == 'E')
 {
   int j, k;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     {
       rtx t = cselib_subst_to_values ((((((x)->u.fld[i]).rtvec1))->elem[j]));
       if (t != (((((x)->u.fld[i]).rtvec1))->elem[j]) && (((x)->u.fld[i]).rtvec1) == (((copy)->u.fld[i]).rtvec1))
  {
    if (x == copy)
      copy = shallow_copy_rtx_stat (x );
    (((copy)->u.fld[i]).rtvec1) = rtvec_alloc ((((((x)->u.fld[i]).rtvec1))->num_elem));
    for (k = 0; k < j; k++)
      (((((copy)->u.fld[i]).rtvec1))->elem[k]) = (((((x)->u.fld[i]).rtvec1))->elem[k]);
  }
       (((((copy)->u.fld[i]).rtvec1))->elem[j]) = t;
     }
 }
    }
  return copy;
}
cselib_val *
cselib_lookup (rtx x, enum machine_mode mode, int create)
{
  void **slot;
  cselib_val *e;
  unsigned int hashval;
  if (((enum machine_mode) (x)->mode) != VOIDmode)
    mode = ((enum machine_mode) (x)->mode);
  if (((enum rtx_code) (x)->code) == VALUE)
    return (((x)->u.fld[0]).rt_cselib);
  if ((((enum rtx_code) (x)->code) == REG))
    {
      struct elt_list *l;
      unsigned int i = (((x)->u.fld[0]).rtuint);
      l = reg_values[i];
      if (l && l->elt == ((void *)0))
 l = l->next;
      for (; l; l = l->next)
 if (mode == ((enum machine_mode) (l->elt->u.val_rtx)->mode))
   return l->elt;
      if (! create)
 return 0;
      if (i < 53)
 {
   unsigned int n = hard_regno_nregs[i][mode];
   if (n > max_value_regs)
     max_value_regs = n;
 }
      e = new_cselib_val (++next_unknown_value, ((enum machine_mode) (x)->mode));
      e->locs = new_elt_loc_list (e->locs, x);
      if (reg_values[i] == 0)
 {
   used_regs[n_used_regs++] = i;
   reg_values[i] = new_elt_list (reg_values[i], ((void *)0));
 }
      reg_values[i]->next = new_elt_list (reg_values[i]->next, e);
      slot = htab_find_slot_with_hash (elt_hash_table, x, e->value1, INSERT);
      *slot = e;
      return e;
    }
  if ((((enum rtx_code) (x)->code) == MEM))
    return cselib_lookup_mem (x, create);
  hashval = hash_rtx (x, mode, create);
  if (! hashval)
    return 0;
  slot = htab_find_slot_with_hash (elt_hash_table, wrap_constant (mode, x),
       hashval, create ? INSERT : NO_INSERT);
  if (slot == 0)
    return 0;
  e = (cselib_val *) *slot;
  if (e)
    return e;
  e = new_cselib_val (hashval, mode);
  *slot = (void *) e;
  e->locs = new_elt_loc_list (e->locs, cselib_subst_to_values (x));
  return e;
}
static void
cselib_invalidate_regno (unsigned int regno, enum machine_mode mode)
{
  unsigned int endregno;
  unsigned int i;
  if (reload_completed && regno >= 53
      && reg_renumber[regno] >= 0)
    fancy_abort ("gcc.c", 430734, "?");
  if (regno < 53)
    {
      if (mode == VOIDmode)
 fancy_abort ("gcc.c", 430743, "?");
      if (regno < max_value_regs)
 i = 0;
      else
 i = regno - max_value_regs;
      endregno = regno + hard_regno_nregs[regno][mode];
    }
  else
    {
      i = regno;
      endregno = regno + 1;
    }
  for (; i < endregno; i++)
    {
      struct elt_list **l = &reg_values[i];
      while (*l)
 {
   cselib_val *v = (*l)->elt;
   struct elt_loc_list **p;
   unsigned int this_last = i;
   if (i < 53 && v != ((void *)0))
     this_last += hard_regno_nregs[i][((enum machine_mode) (v->u.val_rtx)->mode)] - 1;
   if (this_last < regno || v == ((void *)0))
     {
       l = &(*l)->next;
       continue;
     }
   if (*l == reg_values[i])
     {
       (*l)->elt = ((void *)0);
       l = &(*l)->next;
     }
   else
     unchain_one_elt_list (l);
   for (p = &v->locs; ; p = &(*p)->next)
     {
       rtx x = (*p)->loc;
       if ((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) == i)
  {
    unchain_one_elt_loc_list (p);
    break;
  }
     }
   if (v->locs == 0)
     n_useless_values++;
 }
    }
}
static int
cselib_rtx_varies_p (rtx x , int from_alias )
{
  return 0;
}
static void
cselib_invalidate_mem (rtx mem_rtx)
{
  cselib_val **vp, *v, *next;
  int num_mems = 0;
  rtx mem_addr;
  mem_addr = canon_rtx (get_addr ((((mem_rtx)->u.fld[0]).rtx1)));
  mem_rtx = canon_rtx (mem_rtx);
  vp = &first_containing_mem;
  for (v = *vp; v != &dummy_val; v = next)
    {
      unsigned char has_mem = 0;
      struct elt_loc_list **p = &v->locs;
      int had_locs = v->locs != 0;
      while (*p)
 {
   rtx x = (*p)->loc;
   cselib_val *addr;
   struct elt_list **mem_chain;
   if (!(((enum rtx_code) (x)->code) == MEM))
     {
       p = &(*p)->next;
       continue;
     }
   if (num_mems < (compiler_params[(int) PARAM_MAX_CSELIB_MEMORY_LOCATIONS].value1)
       && ! canon_true_dependence (mem_rtx, ((enum machine_mode) (mem_rtx)->mode), mem_addr,
             x, cselib_rtx_varies_p))
     {
       has_mem = 1;
       num_mems++;
       p = &(*p)->next;
       continue;
     }
   addr = cselib_lookup ((((x)->u.fld[0]).rtx1), VOIDmode, 0);
   mem_chain = &addr->addr_list;
   for (;;)
     {
       if ((*mem_chain)->elt == v)
  {
    unchain_one_elt_list (mem_chain);
    break;
  }
       mem_chain = &(*mem_chain)->next;
     }
   unchain_one_elt_loc_list (p);
 }
      if (had_locs && v->locs == 0)
 n_useless_values++;
      next = v->next_containing_mem;
      if (has_mem)
 {
   *vp = v;
   vp = &(*vp)->next_containing_mem;
 }
      else
 v->next_containing_mem = ((void *)0);
    }
  *vp = &dummy_val;
}
static void
cselib_invalidate_rtx (rtx dest, rtx ignore ,
         void *data )
{
  while (((enum rtx_code) (dest)->code) == STRICT_LOW_PART || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT
  || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT || ((enum rtx_code) (dest)->code) == SUBREG)
    dest = (((dest)->u.fld[0]).rtx1);
  if ((((enum rtx_code) (dest)->code) == REG))
    cselib_invalidate_regno ((((dest)->u.fld[0]).rtuint), ((enum machine_mode) (dest)->mode));
  else if ((((enum rtx_code) (dest)->code) == MEM))
    cselib_invalidate_mem (dest);
  if (push_operand (dest, ((enum machine_mode) (dest)->mode)))
    cselib_invalidate_rtx ((global_rtl[GR_STACK_POINTER]), (rtx) 0, ((void *)0));
}
static void
cselib_record_set (rtx dest, cselib_val *src_elt, cselib_val *dest_addr_elt)
{
  int dreg = (((enum rtx_code) (dest)->code) == REG) ? (int) (((dest)->u.fld[0]).rtuint) : -1;
  if (src_elt == 0 || side_effects_p (dest))
    return;
  if (dreg >= 0)
    {
      if (dreg < 53)
 {
   unsigned int n = hard_regno_nregs[dreg][((enum machine_mode) (dest)->mode)];
   if (n > max_value_regs)
     max_value_regs = n;
 }
      if (reg_values[dreg] == 0)
 {
   used_regs[n_used_regs++] = dreg;
   reg_values[dreg] = new_elt_list (reg_values[dreg], src_elt);
 }
      else
 {
   if (reg_values[dreg]->elt == 0)
     reg_values[dreg]->elt = src_elt;
   else
     fancy_abort ("gcc.c", 430961, "?");
 }
      if (src_elt->locs == 0)
 n_useless_values--;
      src_elt->locs = new_elt_loc_list (src_elt->locs, dest);
    }
  else if ((((enum rtx_code) (dest)->code) == MEM) && dest_addr_elt != 0
    && cselib_record_memory)
    {
      if (src_elt->locs == 0)
 n_useless_values--;
      add_mem_for_addr (dest_addr_elt, src_elt, dest);
    }
}
struct single_set
{
  rtx src;
  rtx dest;
  cselib_val *src_elt;
  cselib_val *dest_addr_elt;
};
static void
cselib_record_sets (rtx insn)
{
  int n_sets = 0;
  int i;
  struct single_set sets[(53 * 2)];
  rtx body = (((insn)->u.fld[5]).rtx1);
  rtx cond = 0;
  body = (((insn)->u.fld[5]).rtx1);
  if (((enum rtx_code) (body)->code) == COND_EXEC)
    {
      cond = (((body)->u.fld[0]).rtx1);
      body = (((body)->u.fld[1]).rtx1);
    }
  if (((enum rtx_code) (body)->code) == SET)
    {
      sets[0].src = (((body)->u.fld[1]).rtx1);
      sets[0].dest = (((body)->u.fld[0]).rtx1);
      n_sets = 1;
    }
  else if (((enum rtx_code) (body)->code) == PARALLEL)
    {
      for (i = (((((body)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; --i)
 {
   rtx x = (((((body)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (x)->code) == SET)
     {
       sets[n_sets].src = (((x)->u.fld[1]).rtx1);
       sets[n_sets].dest = (((x)->u.fld[0]).rtx1);
       n_sets++;
     }
 }
    }
  for (i = 0; i < n_sets; i++)
    {
      rtx dest = sets[i].dest;
      if (((enum rtx_code) (sets[i].dest)->code) == STRICT_LOW_PART)
 sets[i].dest = dest = (((dest)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (dest)->code) == REG)
   || ((((enum rtx_code) (dest)->code) == MEM) && cselib_record_memory))
        {
   rtx src = sets[i].src;
   if (cond)
     src = gen_rtx_fmt_eee (IF_THEN_ELSE, (((enum machine_mode) (src)->mode)), (cond), (src), (dest));
   sets[i].src_elt = cselib_lookup (src, ((enum machine_mode) (dest)->mode), 1);
   if ((((enum rtx_code) (dest)->code) == MEM))
     sets[i].dest_addr_elt = cselib_lookup ((((dest)->u.fld[0]).rtx1), (0 ? DImode : SImode), 1);
   else
     sets[i].dest_addr_elt = 0;
 }
    }
  note_stores (body, cselib_invalidate_rtx, ((void *)0));
  if (n_sets >= 2 && asm_noperands (body) >= 0)
    {
      for (i = 0; i < n_sets; i++)
 {
   rtx dest = sets[i].dest;
   if ((((enum rtx_code) (dest)->code) == REG) || (((enum rtx_code) (dest)->code) == MEM))
     {
       int j;
       for (j = i + 1; j < n_sets; j++)
  if (rtx_equal_p (dest, sets[j].dest))
    {
      sets[i].dest = (global_rtl[GR_PC]);
      sets[j].dest = (global_rtl[GR_PC]);
    }
     }
 }
    }
  for (i = 0; i < n_sets; i++)
    {
      rtx dest = sets[i].dest;
      if ((((enum rtx_code) (dest)->code) == REG)
   || ((((enum rtx_code) (dest)->code) == MEM) && cselib_record_memory))
 cselib_record_set (dest, sets[i].src_elt, sets[i].dest_addr_elt);
    }
}
void
cselib_process_insn (rtx insn)
{
  int i;
  rtx x;
  if (find_reg_note (insn, REG_LIBCALL, ((void *)0)))
    cselib_current_insn_in_libcall = 1;
  if (find_reg_note (insn, REG_RETVAL, ((void *)0)))
    cselib_current_insn_in_libcall = 0;
  cselib_current_insn = insn;
  if (((enum rtx_code) (insn)->code) == CODE_LABEL
      || (((enum rtx_code) (insn)->code) == CALL_INSN
   && find_reg_note (insn, REG_SETJMP, ((void *)0)))
      || (((enum rtx_code) (insn)->code) == INSN
   && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ASM_OPERANDS
   && ((((((insn)->u.fld[5]).rtx1)))->volatil)))
    {
      clear_table ();
      return;
    }
  if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    {
      cselib_current_insn = 0;
      return;
    }
  if (((enum rtx_code) (insn)->code) == CALL_INSN)
    {
      for (i = 0; i < 53; i++)
 if (call_used_regs[i])
   cselib_invalidate_regno (i, reg_raw_mode[i]);
      if (! (((insn))->unchanging))
 cselib_invalidate_mem (callmem);
    }
  cselib_record_sets (insn);
  if (((enum rtx_code) (insn)->code) == CALL_INSN)
    for (x = (((insn)->u.fld[9]).rtx1); x; x = (((x)->u.fld[1]).rtx1))
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CLOBBER)
 cselib_invalidate_rtx (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), (rtx) 0, ((void *)0));
  cselib_current_insn = 0;
  if (n_useless_values > 32)
    remove_useless_values ();
}
void
cselib_init (unsigned char record_memory)
{
  elt_list_pool = create_alloc_pool ("elt_list",
         sizeof (struct elt_list), 10);
  elt_loc_list_pool = create_alloc_pool ("elt_loc_list",
             sizeof (struct elt_loc_list), 10);
  cselib_val_pool = create_alloc_pool ("cselib_val_list",
           sizeof (cselib_val), 10);
  value_pool = create_alloc_pool ("value",
      rtx_size[VALUE], 100);
  cselib_record_memory = record_memory;
  if (! callmem)
    callmem = gen_rtx_MEM (BLKmode, (const_int_rtx[64]));
  cselib_nregs = max_reg_num ();
  if (!reg_values || reg_values_size < cselib_nregs
      || (reg_values_size > 10 && reg_values_size > cselib_nregs * 4))
    {
      if (reg_values)
 free (reg_values);
      reg_values_size = cselib_nregs + (63 + cselib_nregs) / 16;
      reg_values = xcalloc (reg_values_size, sizeof (reg_values));
    }
  used_regs = xmalloc (sizeof (*used_regs) * cselib_nregs);
  n_used_regs = 0;
  elt_hash_table = htab_create (31, get_value_hash,
    entry_and_rtx_equal_p, ((void *)0));
  cselib_current_insn_in_libcall = 0;
}
void
cselib_finish (void)
{
  free_alloc_pool (elt_list_pool);
  free_alloc_pool (elt_loc_list_pool);
  free_alloc_pool (cselib_val_pool);
  free_alloc_pool (value_pool);
  clear_table ();
  htab_delete (elt_hash_table);
  free (used_regs);
  used_regs = 0;
  elt_hash_table = 0;
  n_useless_values = 0;
  next_unknown_value = 0;
}
const struct ggc_root_tab gt_ggc_r_gt_cselib_h[] = {
  {
    &callmem,
    1,
    sizeof (callmem),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
extern int dbxout_symbol (tree, int);
extern void dbxout_parms (tree);
extern void dbxout_reg_parms (tree);
extern int dbxout_syms (tree);
enum typestatus {TYPE_UNSEEN, TYPE_XREF, TYPE_DEFINED};
struct typeinfo
{
  enum typestatus status;
  int file_number;
  int type_number;
};
static struct typeinfo *typevec;
static int typevec_len;
static int next_type_number;
static tree preinit_symbols;
enum binclstatus {BINCL_NOT_REQUIRED, BINCL_PENDING, BINCL_PROCESSED};
struct dbx_file
{
  struct dbx_file *next;
  int file_number;
  int next_type_number;
  enum binclstatus bincl_status;
  const char *pending_bincl_name;
  struct dbx_file *prev;
};
static struct dbx_file *current_file;
static int next_file_number;
static int scope_labelno;
static int dbxout_source_line_counter;
static int have_used_extensions = 0;
static int source_label_number = 1;
static const char *lastfile;
static int lastfile_is_base;
static int pending_bincls = 0;
static const char *base_input_file;
static const char *cwd;
enum __stab_debug_code
{
N_GSYM=0x20,
N_FNAME=0x22,
N_FUN=0x24,
N_STSYM=0x26,
N_LCSYM=0x28,
N_MAIN=0x2a,
N_PC=0x30,
N_NSYMS=0x32,
N_NOMAP=0x34,
N_OBJ=0x38,
N_OPT=0x3c,
N_RSYM=0x40,
N_M2C=0x42,
N_SLINE=0x44,
N_DSLINE=0x46,
N_BSLINE=0x48,
N_BROWS=0x48,
N_DEFD=0x4a,
N_EHDECL=0x50,
N_MOD2=0x50,
N_CATCH=0x54,
N_SSYM=0x60,
N_SO=0x64,
N_LSYM=0x80,
N_BINCL=0x82,
N_SOL=0x84,
N_PSYM=0xa0,
N_EINCL=0xa2,
N_ENTRY=0xa4,
N_LBRAC=0xc0,
N_EXCL=0xc2,
N_SCOPE=0xc4,
N_RBRAC=0xe0,
N_BCOMM=0xe2,
N_ECOMM=0xe4,
N_ECOML=0xe8,
N_NBTEXT=0xF0,
N_NBDATA=0xF2,
N_NBBSS=0xF4,
N_NBSTS=0xF6,
N_NBLCS=0xF8,
N_LENG=0xfe,
LAST_UNUSED_STAB_CODE
};
static FILE *asmfile;
static enum __stab_debug_code current_sym_code;
static int current_sym_value;
static rtx current_sym_addr;
static int current_sym_nchars;
static void emit_bincl_stab (const char *c);
static void emit_pending_bincls (void);
static void emit_pending_bincls_if_required (void);
static void dbxout_init (const char *);
static void dbxout_finish (const char *);
static void dbxout_start_source_file (unsigned, const char *);
static void dbxout_end_source_file (unsigned);
static void dbxout_typedefs (tree);
static void dbxout_type_index (tree);
static void dbxout_args (tree);
static void dbxout_type_fields (tree);
static void dbxout_type_method_1 (tree, const char *);
static void dbxout_type_methods (tree);
static void dbxout_range_type (tree);
static void dbxout_type (tree, int);
static unsigned char print_int_cst_bounds_in_octal_p (tree);
static void print_int_cst_octal (tree);
static void print_octal (unsigned long, int);
static void print_wide_int (long);
static void dbxout_type_name (tree);
static void dbxout_class_name_qualifiers (tree);
static int dbxout_symbol_location (tree, tree, const char *, rtx);
static void dbxout_symbol_name (tree, const char *, int);
static void dbxout_prepare_symbol (tree);
static void dbxout_finish_symbol (tree);
static void dbxout_block (tree, int, tree);
static void dbxout_global_decl (tree);
static void dbxout_type_decl (tree, int);
static void dbxout_handle_pch (unsigned);
static void dbxout_source_line (unsigned int, const char *);
static void dbxout_source_file (FILE *, const char *);
static void dbxout_function_end (void);
static void dbxout_begin_function (tree);
static void dbxout_begin_block (unsigned, unsigned);
static void dbxout_end_block (unsigned, unsigned);
static void dbxout_function_decl (tree);
const struct gcc_debug_hooks dbx_debug_hooks =
{
  dbxout_init,
  dbxout_finish,
  debug_nothing_int_charstar,
  debug_nothing_int_charstar,
  dbxout_start_source_file,
  dbxout_end_source_file,
  dbxout_begin_block,
  dbxout_end_block,
  debug_true_tree,
  dbxout_source_line,
  dbxout_source_line,
  debug_nothing_int_charstar,
  debug_nothing_int_charstar,
  dbxout_begin_function,
  debug_nothing_int,
  dbxout_function_decl,
  dbxout_global_decl,
  dbxout_type_decl,
  debug_nothing_tree_tree,
  debug_nothing_tree,
  debug_nothing_tree,
  debug_nothing_rtx,
  dbxout_handle_pch,
  debug_nothing_rtx
};
static void
dbxout_function_end (void)
{
  char lscope_label_name[100];
  function_section (current_function_decl);
  do { sprintf (lscope_label_name, "*.%s%u", "Lscope", (unsigned) (scope_labelno)); } while (0);
  targetm.asm_out.internal_label (asmfile, "Lscope", scope_labelno);
  scope_labelno++;
  fprintf (asmfile, "%s\"\",%d,0,0,", "\t.stabs\t", N_FUN);
  assemble_name (asmfile, lscope_label_name);
  putc_unlocked ('-', asmfile);
  assemble_name (asmfile, ((((((((current_function_decl)->decl.rtl ? (current_function_decl)->decl.rtl : (make_decl_rtl (current_function_decl, ((void *)0)), (current_function_decl)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[0]).rtstr));
  fprintf (asmfile, "\n");
}
static void
dbxout_init (const char *input_file_name)
{
  char ltext_label_name[100];
  tree syms = lang_hooks.decls.getdecls ();
  asmfile = asm_out_file;
  typevec_len = 100;
  typevec = ggc_calloc (typevec_len, sizeof typevec[0]);
  do { sprintf (ltext_label_name, "*.%s%u", "Ltext", (unsigned) (0)); } while (0);
  if (use_gnu_debug_info_extensions)
    {
      if (!cwd && (cwd = get_src_pwd ())
   && (!*cwd || cwd[strlen (cwd) - 1] != '/'))
 cwd = concat (cwd, "/", ((void *)0));
      if (cwd)
 {
   fprintf (asmfile, "%s", "\t.stabs\t");
   output_quoted_string (asmfile, cwd);
   fprintf (asmfile, ",%d,0,0,", N_SO);
   assemble_name (asmfile, ltext_label_name);
   fputc_unlocked ('\n', asmfile);
 }
    }
  fprintf (asmfile, "%s", "\t.stabs\t");
  output_quoted_string (asmfile, input_file_name);
  fprintf (asmfile, ",%d,0,0,", N_SO);
  assemble_name (asmfile, ltext_label_name);
  fputc_unlocked ('\n', asmfile);
  text_section ();
  targetm.asm_out.internal_label (asmfile, "Ltext", 0);
  fprintf (asmfile, "%s\"%s\",%d,0,0,0\n",
    "\t.stabs\t", "gcc2_compiled.", N_OPT);
  base_input_file = lastfile = input_file_name;
  next_type_number = 1;
  current_file = xmalloc (sizeof *current_file);
  current_file->next = ((void *)0);
  current_file->file_number = 0;
  current_file->next_type_number = 1;
  next_file_number = 1;
  current_file->prev = ((void *)0);
  current_file->bincl_status = BINCL_NOT_REQUIRED;
  current_file->pending_bincl_name = ((void *)0);
  dbxout_typedefs (syms);
  if (preinit_symbols)
    {
      tree t;
      for (t = nreverse (preinit_symbols); t; t = ((t)->common.chain))
 dbxout_symbol (((t)->list.value1), 0);
      preinit_symbols = 0;
    }
}
static void
dbxout_typedefs (tree syms)
{
  for (; syms != (tree) ((void *)0); syms = ((syms)->common.chain))
    {
      if (((enum tree_code) (syms)->common.code) == TYPE_DECL)
 {
   tree type = ((syms)->common.type);
   if (((type)->type.name)
       && ((enum tree_code) (((type)->type.name))->common.code) == TYPE_DECL
       && ((((type)->type.size) != (tree) ((void *)0)) || (((enum tree_code) (type)->common.code) == VOID_TYPE))
       && ! ((((type)->type.name))->common.asm_written_flag))
     dbxout_symbol (((type)->type.name), 0);
 }
    }
}
static void
emit_bincl_stab (const char *name)
{
  fprintf (asmfile, "%s", "\t.stabs\t");
  output_quoted_string (asmfile, name);
  fprintf (asmfile, ",%d,0,0,0\n", N_BINCL);
}
static void
emit_pending_bincls_if_required (void)
{
  if (pending_bincls)
    emit_pending_bincls ();
}
static void
emit_pending_bincls (void)
{
  struct dbx_file *f = current_file;
  while (f->bincl_status == BINCL_PENDING)
    f = f->next;
  f = f->prev;
  while (f)
    {
      if (f->bincl_status == BINCL_PENDING)
        {
          emit_bincl_stab (f->pending_bincl_name);
          f->file_number = next_file_number++;
          f->bincl_status = BINCL_PROCESSED;
        }
      if (f == current_file)
        break;
      f = f->prev;
    }
  pending_bincls = 0;
}
static void
dbxout_start_source_file (unsigned int line ,
     const char *filename )
{
  struct dbx_file *n = xmalloc (sizeof *n);
  n->next = current_file;
  n->next_type_number = 1;
  n->file_number = 0;
  n->prev = ((void *)0);
  current_file->prev = n;
  n->bincl_status = BINCL_PENDING;
  n->pending_bincl_name = filename;
  pending_bincls = 1;
  current_file = n;
}
static void
dbxout_end_source_file (unsigned int line )
{
  if (current_file->bincl_status == BINCL_PROCESSED)
    fprintf (asmfile, "%s%d,0,0,0\n", "\t.stabn\t", N_EINCL);
  current_file->bincl_status = BINCL_NOT_REQUIRED;
  current_file = current_file->next;
}
static void
dbxout_handle_pch (unsigned at_end)
{
  if (! at_end)
    {
      dbxout_start_source_file (0, lastfile);
      lastfile = ((void *)0);
    }
  else
    {
      dbxout_end_source_file (0);
      lastfile_is_base = lastfile == ((void *)0);
    }
}
static void
dbxout_source_file (FILE *file, const char *filename)
{
  if (lastfile == 0 && lastfile_is_base)
    {
      lastfile = base_input_file;
      lastfile_is_base = 0;
    }
  if (filename && (lastfile == 0 || strcmp (filename, lastfile)))
    {
      char ltext_label_name[100];
      do { sprintf (ltext_label_name, "*.%s%u", "Ltext", (unsigned) (source_label_number)); } while (0)
                           ;
      fprintf (file, "%s", "\t.stabs\t");
      output_quoted_string (file, filename);
      fprintf (asmfile, ",%d,0,0,", N_SOL);
      assemble_name (asmfile, ltext_label_name);
      fputc_unlocked ('\n', asmfile);
      if (current_function_decl != (tree) ((void *)0)
   && ((current_function_decl)->decl.section_name) != (tree) ((void *)0))
 ;
      else
 {
   if (!in_text_section () && !in_unlikely_text_section ())
     text_section ();
 }
      targetm.asm_out.internal_label (file, "Ltext", source_label_number);
      source_label_number++;
      lastfile = filename;
    }
}
static void
dbxout_source_line (unsigned int lineno, const char *filename)
{
  dbxout_source_file (asmfile, filename);
  dbxout_source_line_counter += 1;
  do { char temp[256]; do { sprintf (temp, "*.%s%u", "LM", (unsigned) (dbxout_source_line_counter)); } while (0); fprintf (asmfile, "\t.stabn 68,0,%d,", lineno); assemble_name (asmfile, temp); putc_unlocked ('-', asmfile); assemble_name (asmfile, ((((((((current_function_decl)->decl.rtl ? (current_function_decl)->decl.rtl : (make_decl_rtl (current_function_decl, ((void *)0)), (current_function_decl)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[0]).rtstr)); putc_unlocked ('\n', asmfile); (*targetm.asm_out.internal_label) (asmfile, "LM", dbxout_source_line_counter); } while (0);
}
static void
dbxout_begin_block (unsigned int line , unsigned int n)
{
  emit_pending_bincls_if_required ();
  targetm.asm_out.internal_label (asmfile, "LBB", n);
}
static void
dbxout_end_block (unsigned int line , unsigned int n)
{
  emit_pending_bincls_if_required ();
  targetm.asm_out.internal_label (asmfile, "LBE", n);
}
static void
dbxout_function_decl (tree decl)
{
  emit_pending_bincls_if_required ();
  dbxout_block (((decl)->decl.initial), 0, ((decl)->decl.arguments));
  if (use_gnu_debug_info_extensions
      && targetm.have_named_sections)
    dbxout_function_end ();
}
static void
dbxout_global_decl (tree decl)
{
  if (((enum tree_code) (decl)->common.code) == VAR_DECL
      && ! ((decl)->decl.external_flag)
      && ((decl)->decl.rtl != ((void *)0)))
    {
      int saved_tree_used = ((decl)->common.used_flag);
      ((decl)->common.used_flag) = 1;
      dbxout_symbol (decl, 0);
      ((decl)->common.used_flag) = saved_tree_used;
    }
}
static void
dbxout_type_decl (tree decl, int local)
{
  dbxout_symbol (decl, local);
}
static void
dbxout_finish (const char *filename )
{
  asm_fprintf (asmfile, "\t.text\n\t.stabs \"\",%d,0,0,%LLetext\n%LLetext:\n", N_SO);
  debug_free_queue ();
}
static void
dbxout_type_index (tree type)
{
  struct typeinfo *t = &typevec[((type)->type.symtab.address)];
  fprintf (asmfile, "(%d,%d)", t->file_number, t->type_number);
  (current_sym_nchars += (9));
}
static void
dbxout_type_fields (tree type)
{
  tree tem;
  for (tem = ((type)->type.value1s); tem; tem = ((tem)->common.chain))
    {
      if (tem == global_trees[TI_ERROR_MARK] || ((tem)->common.type) == global_trees[TI_ERROR_MARK])
 return;
      if (((enum tree_code) (tem)->common.code) == TYPE_DECL
   || (((enum tree_code) (tem)->common.code) == FIELD_DECL
       && (! host_integerp (bit_position (tem), 0)
    || ! ((tem)->decl.size)
    || ! host_integerp (((tem)->decl.size), 1)))
    || ((tem)->decl.ignored_flag))
 continue;
      else if (((enum tree_code) (tem)->common.code) != CONST_DECL)
 {
   if (tem != ((type)->type.value1s))
     do { } while (0);
   if (((tem)->decl.name))
     {
       fprintf (asmfile, "%s:", ((const char *) (((tem)->decl.name))->identifier.id.str));
       (current_sym_nchars += (2 + ((((tem)->decl.name))->identifier.id.len)));
     }
   else
     {
       fprintf (asmfile, ":");
       (current_sym_nchars += (1));
     }
   if (use_gnu_debug_info_extensions
       && (((tem)->common.private_flag) || ((tem)->common.protected_flag)
    || ((enum tree_code) (tem)->common.code) != FIELD_DECL))
     {
       have_used_extensions = 1;
       putc_unlocked ('/', asmfile);
       putc_unlocked ((((tem)->common.private_flag) ? '0' : ((tem)->common.protected_flag) ? '1' : '2'), asmfile)
              ;
       (current_sym_nchars += (2));
     }
   dbxout_type ((((enum tree_code) (tem)->common.code) == FIELD_DECL
   && ((tem)->decl.result))
         ? ((tem)->decl.result) : ((tem)->common.type), 0);
   if (((enum tree_code) (tem)->common.code) == VAR_DECL)
     {
       if (((tem)->common.static_flag) && use_gnu_debug_info_extensions)
  {
    tree name = decl_assembler_name (tem);
    have_used_extensions = 1;
    fprintf (asmfile, ":%s;", ((const char *) (name)->identifier.id.str));
    (current_sym_nchars += (((name)->identifier.id.len) + 2));
  }
       else
  {
    fprintf (asmfile, ",0,0;");
    (current_sym_nchars += (5));
  }
     }
   else
     {
       putc_unlocked (',', asmfile);
       print_wide_int (int_bit_position (tem));
       putc_unlocked (',', asmfile);
       print_wide_int (tree_low_cst (((tem)->decl.size), 1));
       putc_unlocked (';', asmfile);
       (current_sym_nchars += (3));
     }
 }
    }
}
static void
dbxout_type_method_1 (tree decl, const char *debug_name)
{
  char c1 = 'A', c2;
  if (((enum tree_code) (((decl)->common.type))->common.code) == FUNCTION_TYPE)
    c2 = '?';
  else
    {
      tree firstarg = ((((((decl)->common.type))->type.value1s))->list.value1);
      if (((((firstarg)->common.type))->common.readonly_flag))
 c1 += 1;
      if (((((firstarg)->common.type))->common.volatile_flag))
 c1 += 2;
      if (((decl)->decl.vindex))
 c2 = '*';
      else
 c2 = '.';
    }
  fprintf (asmfile, ":%s;%c%c%c", debug_name,
    ((decl)->common.private_flag) ? '0'
    : ((decl)->common.protected_flag) ? '1' : '2', c1, c2);
  (current_sym_nchars += (((decl_assembler_name (decl))->identifier.id.len) + 6 - (debug_name - ((const char *) (decl_assembler_name (decl))->identifier.id.str))))
                                                                   ;
  if (((decl)->decl.vindex) && host_integerp (((decl)->decl.vindex), 0))
    {
      print_wide_int (tree_low_cst (((decl)->decl.vindex), 0));
      putc_unlocked (';', asmfile);
      (current_sym_nchars += (1));
      dbxout_type (((decl)->decl.context), 0);
      fprintf (asmfile, ";");
      (current_sym_nchars += (1));
    }
}
static void
dbxout_type_methods (tree type)
{
  tree methods = ((type)->type.maxval);
  tree type_encoding;
  tree fndecl;
  tree last;
  char formatted_type_identifier_length[16];
  int type_identifier_length;
  if (methods == (tree) ((void *)0))
    return;
  type_encoding = ((((type)->type.name))->decl.name);
  type_identifier_length = ((type_encoding)->identifier.id.len);
  sprintf (formatted_type_identifier_length, "%d", type_identifier_length);
  if (((enum tree_code) (methods)->common.code) != TREE_VEC)
    fndecl = methods;
  else if (((methods)->vec.a[0]) != (tree) ((void *)0))
    fndecl = ((methods)->vec.a[0]);
  else
    fndecl = ((methods)->vec.a[1]);
  while (fndecl)
    {
      int need_prefix = 1;
      for (last = (tree) ((void *)0);
    fndecl && (last == (tree) ((void *)0) || ((fndecl)->decl.name) == ((last)->decl.name));
    fndecl = ((fndecl)->common.chain))
 {
   const char *debug_name;
   if (((enum tree_code) (fndecl)->common.code) != FUNCTION_DECL)
     continue;
   debug_name = ((const char *) (decl_assembler_name (fndecl))->identifier.id.str);
   do { } while (0);
   last = fndecl;
   if (((fndecl)->decl.ignored_flag) || ((fndecl)->decl.abstract_flag))
     continue;
   if (need_prefix)
     {
       tree name = ((fndecl)->decl.name);
       fprintf (asmfile, "%s::", ((const char *) (name)->identifier.id.str));
       (current_sym_nchars += (((name)->identifier.id.len) + 2));
       need_prefix = 0;
     }
   dbxout_type (((fndecl)->common.type), 0);
   dbxout_type_method_1 (fndecl, debug_name);
 }
      if (!need_prefix)
 {
   putc_unlocked (';', asmfile);
   (current_sym_nchars += (1));
 }
    }
}
static void
dbxout_range_type (tree type)
{
  fprintf (asmfile, "r");
  if (((type)->common.type))
    dbxout_type (((type)->common.type), 0);
  else if (((enum tree_code) (type)->common.code) != INTEGER_TYPE)
    dbxout_type (type, 0);
  else
    {
      if (((type)->type.symtab.address) != 0)
 dbxout_type_index (type);
      else
 dbxout_type_index (integer_types[itk_int]);
    }
  if (((type)->type.minval) != 0
      && host_integerp (((type)->type.minval), 0))
    {
      putc_unlocked (';', asmfile);
      (current_sym_nchars += (1));
      if (print_int_cst_bounds_in_octal_p (type))
        print_int_cst_octal (((type)->type.minval));
      else
        print_wide_int (tree_low_cst (((type)->type.minval), 0));
    }
  else
    {
      fprintf (asmfile, ";0");
      (current_sym_nchars += (2));
    }
  if (((type)->type.maxval) != 0
      && host_integerp (((type)->type.maxval), 0))
    {
      putc_unlocked (';', asmfile);
      (current_sym_nchars += (1));
      if (print_int_cst_bounds_in_octal_p (type))
        print_int_cst_octal (((type)->type.maxval));
      else
        print_wide_int (tree_low_cst (((type)->type.maxval), 0));
      putc_unlocked (';', asmfile);
      (current_sym_nchars += (1));
    }
  else
    {
      fprintf (asmfile, ";-1;");
      (current_sym_nchars += (4));
    }
}
static void
dbxout_type (tree type, int full)
{
  tree tem;
  tree main_variant;
  static int anonymous_type_number = 0;
  if (((enum tree_code) (type)->common.code) == VECTOR_TYPE)
    type = ((((((type)->type.value1s))->type.value1s))->common.type);
  if (type == global_trees[TI_ERROR_MARK])
    type = integer_types[itk_int];
  else
    {
      if (((type)->type.name)
   && ((enum tree_code) (((type)->type.name))->common.code) == TYPE_DECL
   && ((((type)->type.name))->decl.external_flag))
 full = 0;
    }
  if (((type)->type.name) && ((enum tree_code) (((type)->type.name))->common.code) == TYPE_DECL
      && ((((type)->type.name))->decl.result))
    main_variant = ((((type)->type.name))->common.type);
  else
    main_variant = ((type)->type.main_variant);
  if (!use_gnu_debug_info_extensions)
    type = main_variant;
  if (((type)->type.symtab.address) == 0)
    {
      ((type)->type.symtab.address) = next_type_number++;
      if (next_type_number == typevec_len)
 {
   typevec
     = ggc_realloc_stat (typevec,(typevec_len * 2 * sizeof typevec[0]) );
   memset (typevec + typevec_len, 0, typevec_len * sizeof typevec[0]);
   typevec_len *= 2;
 }
      emit_pending_bincls_if_required ();
      typevec[((type)->type.symtab.address)].file_number
 = current_file->file_number;
      typevec[((type)->type.symtab.address)].type_number
 = current_file->next_type_number++;
    }
  if (flag_debug_only_used_symbols)
    {
      if ((((enum tree_code) (type)->common.code) == RECORD_TYPE
    || ((enum tree_code) (type)->common.code) == UNION_TYPE
    || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE
    || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE)
   && ((type)->common.chain)
   && tree_code_type[(int) (((enum tree_code) (((type)->common.chain))->common.code))] == 'd'
   && ! ((((type)->common.chain))->decl.ignored_flag))
 debug_queue_symbol (((type)->common.chain));
      else if (((type)->type.name)
        && ((enum tree_code) (((type)->type.name))->common.code) == TYPE_DECL)
 debug_queue_symbol (((type)->type.name));
    }
  dbxout_type_index (type);
  switch (typevec[((type)->type.symtab.address)].status)
    {
    case TYPE_UNSEEN:
      break;
    case TYPE_XREF:
      if (! full || !(((type)->type.size) != (tree) ((void *)0))
   || ! host_integerp (((type)->type.size), 1))
 return;
      break;
    case TYPE_DEFINED:
      return;
    }
  fprintf (asmfile, "=");
  (current_sym_nchars += (1));
  typevec[((type)->type.symtab.address)].status = TYPE_DEFINED;
  if (((type)->common.readonly_flag) > ((main_variant)->common.readonly_flag))
    {
      putc_unlocked ('k', asmfile);
      (current_sym_nchars += (1));
      dbxout_type (build_qualified_type ((type), ((0) ? 0x1 : 0) | ((((type)->common.volatile_flag)) ? 0x2 : 0)), 0);
      return;
    }
  else if (((type)->common.volatile_flag) > ((main_variant)->common.volatile_flag))
    {
      putc_unlocked ('B', asmfile);
      (current_sym_nchars += (1));
      dbxout_type (build_qualified_type ((type), ((((type)->common.readonly_flag)) ? 0x1 : 0) | ((0) ? 0x2 : 0)), 0);
      return;
    }
  else if (main_variant != ((type)->type.main_variant))
    {
      if (flag_debug_only_used_symbols)
        {
          tree orig_type = ((((type)->type.name))->decl.result);
          if ((((enum tree_code) (orig_type)->common.code) == RECORD_TYPE
               || ((enum tree_code) (orig_type)->common.code) == UNION_TYPE
               || ((enum tree_code) (orig_type)->common.code) == QUAL_UNION_TYPE
               || ((enum tree_code) (orig_type)->common.code) == ENUMERAL_TYPE)
              && ((orig_type)->common.chain)
              && ! ((((orig_type)->common.chain))->decl.ignored_flag))
            debug_queue_symbol (((orig_type)->common.chain));
        }
      dbxout_type (((((type)->type.name))->decl.result), 0);
      return;
    }
  switch (((enum tree_code) (type)->common.code))
    {
    case VOID_TYPE:
    case LANG_TYPE:
      dbxout_type_index (type);
      break;
    case INTEGER_TYPE:
      if (type == integer_types[itk_char] && ! ((type)->common.unsigned_flag))
 {
   fprintf (asmfile, "r");
   (current_sym_nchars += (1));
   dbxout_type_index (type);
   fprintf (asmfile, ";0;127;");
   (current_sym_nchars += (7));
 }
      else if (((type)->common.type) != 0
        && ((enum tree_code) (((type)->common.type))->common.code) == INTEGER_TYPE)
 {
   if (use_gnu_debug_info_extensions
       && ((type)->type.precision) != ((integer_types[itk_int])->type.precision))
     {
       have_used_extensions = 1;
       fprintf (asmfile, "@s%d;", ((type)->type.precision));
       (current_sym_nchars += (5));
     }
   dbxout_range_type (type);
 }
      else
 {
   if (use_gnu_debug_info_extensions
       && ((type)->type.precision) != ((integer_types[itk_int])->type.precision))
     {
       have_used_extensions = 1;
       fprintf (asmfile, "@s%d;", ((type)->type.precision));
       (current_sym_nchars += (5));
     }
   if (print_int_cst_bounds_in_octal_p (type))
     {
       fprintf (asmfile, "r");
       (current_sym_nchars += (1));
              if (((type)->common.type) != 0)
                dbxout_type_index (((type)->common.type));
              else
                dbxout_type_index (type);
       fprintf (asmfile, ";");
       (current_sym_nchars += (1));
       print_int_cst_octal (((type)->type.minval));
       fprintf (asmfile, ";");
       (current_sym_nchars += (1));
       print_int_cst_octal (((type)->type.maxval));
       fprintf (asmfile, ";");
       (current_sym_nchars += (1));
     }
   else
     dbxout_range_type (type);
 }
      break;
    case REAL_TYPE:
      fprintf (asmfile, "r");
      (current_sym_nchars += (1));
      dbxout_type_index (integer_types[itk_int]);
      putc_unlocked (';', asmfile);
      (current_sym_nchars += (1));
      print_wide_int (int_size_in_bytes (type));
      fputs_unlocked (";0;", asmfile);
      (current_sym_nchars += (3));
      break;
    case CHAR_TYPE:
      if (use_gnu_debug_info_extensions)
 {
   have_used_extensions = 1;
   fputs_unlocked ("@s", asmfile);
   (current_sym_nchars += (2));
   print_wide_int (8 * int_size_in_bytes (type));
   fputs_unlocked (";-20;", asmfile);
   (current_sym_nchars += (4));
 }
      else
 {
   fprintf (asmfile, "r");
   (current_sym_nchars += (1));
   dbxout_type_index (integer_types[itk_char]);
   fprintf (asmfile, ";0;%d;", ((type)->common.unsigned_flag) ? 255 : 127);
   (current_sym_nchars += (7));
 }
      break;
    case BOOLEAN_TYPE:
      if (use_gnu_debug_info_extensions)
 {
   have_used_extensions = 1;
   fputs_unlocked ("@s", asmfile);
   (current_sym_nchars += (2));
   print_wide_int (8 * int_size_in_bytes (type));
   fputs_unlocked (";-16;", asmfile);
   (current_sym_nchars += (4));
 }
      else
 {
   fprintf (asmfile, "eFalse:0,True:1,;");
   (current_sym_nchars += (17));
 }
      break;
    case FILE_TYPE:
      putc_unlocked ('d', asmfile);
      (current_sym_nchars += (1));
      dbxout_type (((type)->common.type), 0);
      break;
    case COMPLEX_TYPE:
      if (((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)
 {
   fputs_unlocked ("R3;", asmfile);
   (current_sym_nchars += (3));
   print_wide_int (2 * int_size_in_bytes (((type)->common.type)));
   fputs_unlocked (";0;", asmfile);
   (current_sym_nchars += (3));
 }
      else
 {
   putc_unlocked ('s', asmfile);
   (current_sym_nchars += (1));
   print_wide_int (int_size_in_bytes (type));
   fprintf (asmfile, "real:");
   (current_sym_nchars += (5));
   dbxout_type (((type)->common.type), 0);
   fprintf (asmfile, ",0,%d;", ((((type)->common.type))->type.precision));
   (current_sym_nchars += (7));
   fprintf (asmfile, "imag:");
   (current_sym_nchars += (5));
   dbxout_type (((type)->common.type), 0);
   fprintf (asmfile, ",%d,%d;;", ((((type)->common.type))->type.precision),
     ((((type)->common.type))->type.precision));
   (current_sym_nchars += (10));
 }
      break;
    case SET_TYPE:
      if (use_gnu_debug_info_extensions)
 {
   have_used_extensions = 1;
   fputs_unlocked ("@s", asmfile);
   (current_sym_nchars += (2));
   print_wide_int (8 * int_size_in_bytes (type));
   putc_unlocked (';', asmfile);
   (current_sym_nchars += (1));
   if (((type)->type.string1_flag))
     {
       fprintf (asmfile, "@S;");
       (current_sym_nchars += (3));
     }
 }
      putc_unlocked ('S', asmfile);
      (current_sym_nchars += (1));
      dbxout_type (((type)->type.value1s), 0);
      break;
    case ARRAY_TYPE:
      if (((type)->type.packed_flag) && use_gnu_debug_info_extensions)
 {
   have_used_extensions = 1;
   fputs_unlocked ("@s", asmfile);
   (current_sym_nchars += (2));
   print_wide_int (8 * int_size_in_bytes (type));
   fprintf (asmfile, ";@S;S");
   (current_sym_nchars += (5));
   dbxout_type (((type)->type.value1s), 0);
   break;
 }
      if (((type)->type.string1_flag) && use_gnu_debug_info_extensions)
 {
   have_used_extensions = 1;
   fprintf (asmfile, "@S;");
   (current_sym_nchars += (3));
 }
      tem = ((type)->type.value1s);
      if (tem == ((void *)0))
 {
   fprintf (asmfile, "ar");
   (current_sym_nchars += (2));
   dbxout_type_index (integer_types[itk_int]);
   fprintf (asmfile, ";0;-1;");
   (current_sym_nchars += (6));
 }
      else
 {
   fprintf (asmfile, "a");
   (current_sym_nchars += (1));
   dbxout_range_type (tem);
 }
      dbxout_type (((type)->common.type), 0);
      break;
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      {
 int i, n_baseclasses = 0;
 if (((type)->type.binfo) != 0
     && ((((type)->type.binfo))->binfo.base_types) != 0)
   n_baseclasses = ((((((type)->type.binfo))->binfo.base_types))->vec.length);
 if ((((type)->type.name) != 0
      && ! (((enum tree_code) (((type)->type.name))->common.code) == TYPE_DECL
     && ((((type)->type.name))->decl.ignored_flag))
      && !full)
     || !(((type)->type.size) != (tree) ((void *)0))
     || ! host_integerp (((type)->type.size), 1))
   {
     fputs_unlocked ((((enum tree_code) (type)->common.code) == RECORD_TYPE) ? "xs" : "xu", asmfile);
     (current_sym_nchars += (2));
     if (((type)->type.name) != 0)
       dbxout_type_name (type);
     else
       {
  fprintf (asmfile, "$$%d", anonymous_type_number++);
  (current_sym_nchars += (5));
       }
     fprintf (asmfile, ":");
     (current_sym_nchars += (1));
     typevec[((type)->type.symtab.address)].status = TYPE_XREF;
     break;
   }
 putc_unlocked (((((enum tree_code) (type)->common.code) == RECORD_TYPE) ? 's' : 'u'), asmfile);
 (current_sym_nchars += (1));
 print_wide_int (int_size_in_bytes (type));
 if (use_gnu_debug_info_extensions)
   {
     if (n_baseclasses)
       {
  have_used_extensions = 1;
  fprintf (asmfile, "!%d,", n_baseclasses);
  (current_sym_nchars += (8));
       }
   }
 for (i = 0; i < n_baseclasses; i++)
   {
     tree binfo = ((type)->type.binfo);
     tree child = ((((binfo)->binfo.base_types))->vec.a[(i)]);
     tree access = (((binfo)->binfo.base_accesses)
      ? ((((binfo)->binfo.base_accesses))->vec.a[(i)]) : global_trees[TI_PUBLIC]);
     if (use_gnu_debug_info_extensions)
       {
  have_used_extensions = 1;
                putc_unlocked (((child)->common.static_flag) ? '1' : '0', asmfile);
                putc_unlocked (access == global_trees[TI_PUBLIC] ? '2' : (access == global_trees[TI_PROTECTED] ? '1' :'0'), asmfile)
                              ;
  (current_sym_nchars += (2));
  if (((child)->common.static_flag)
      && strcmp (lang_hooks.name, "GNU C++") == 0)
    print_wide_int (tree_low_cst (((child)->binfo.vptr_field), 0)
      * 8);
  else
    print_wide_int (tree_low_cst (((child)->binfo.offset), 0)
      * 8);
  putc_unlocked (',', asmfile);
  (current_sym_nchars += (1));
  dbxout_type ((((child))->common.type), 0);
  putc_unlocked (';', asmfile);
  (current_sym_nchars += (1));
       }
     else
       {
  dbxout_type_name ((((child))->common.type));
  putc_unlocked (':', asmfile);
  (current_sym_nchars += (1));
  dbxout_type ((((child))->common.type), full);
  putc_unlocked (',', asmfile);
  (current_sym_nchars += (1));
  print_wide_int (tree_low_cst (((child)->binfo.offset), 0)
    * 8);
  putc_unlocked (',', asmfile);
  (current_sym_nchars += (1));
  print_wide_int (tree_low_cst ((((((child))->common.type))->type.size),
           0)
    * 8);
  putc_unlocked (';', asmfile);
  (current_sym_nchars += (1));
       }
   }
      }
      dbxout_type_fields (type);
      if (use_gnu_debug_info_extensions && ((type)->type.maxval) != (tree) ((void *)0))
 {
   have_used_extensions = 1;
   dbxout_type_methods (type);
 }
      putc_unlocked (';', asmfile);
      (current_sym_nchars += (1));
      if (use_gnu_debug_info_extensions && ((enum tree_code) (type)->common.code) == RECORD_TYPE
   && ((type)->type.minval))
 {
   have_used_extensions = 1;
   putc_unlocked ('~', asmfile);
   (current_sym_nchars += (1));
   if (((type)->type.minval))
     {
       putc_unlocked ('%', asmfile);
       (current_sym_nchars += (1));
       dbxout_type (((((type)->type.minval))->decl.vindex), 0);
     }
   putc_unlocked (';', asmfile);
   (current_sym_nchars += (1));
 }
      break;
    case ENUMERAL_TYPE:
      if ((((type)->type.name) != 0
    && ! (((enum tree_code) (((type)->type.name))->common.code) == TYPE_DECL
   && ((((type)->type.name))->decl.ignored_flag))
    && !full)
   || !(((type)->type.size) != (tree) ((void *)0)))
 {
   fprintf (asmfile, "xe");
   (current_sym_nchars += (2));
   dbxout_type_name (type);
   typevec[((type)->type.symtab.address)].status = TYPE_XREF;
   putc_unlocked (':', asmfile);
   (current_sym_nchars += (1));
   return;
 }
      if (use_gnu_debug_info_extensions
   && ((type)->type.precision) != ((integer_types[itk_int])->type.precision))
 {
   fprintf (asmfile, "@s%d;", ((type)->type.precision));
   (current_sym_nchars += (5));
 }
      putc_unlocked ('e', asmfile);
      (current_sym_nchars += (1));
      for (tem = ((type)->type.value1s); tem; tem = ((tem)->common.chain))
 {
   fprintf (asmfile, "%s:", ((const char *) (((tem)->list.purpose))->identifier.id.str));
   (current_sym_nchars += (((((tem)->list.purpose))->identifier.id.len) + 1));
   if ((((((tem)->list.value1))->int_cst.int_cst).high) == 0)
     print_wide_int ((((((tem)->list.value1))->int_cst.int_cst).low));
   else if ((((((tem)->list.value1))->int_cst.int_cst).high) == -1
     && (long) (((((tem)->list.value1))->int_cst.int_cst).low) < 0)
     print_wide_int ((((((tem)->list.value1))->int_cst.int_cst).low));
   else
     print_int_cst_octal (((tem)->list.value1));
   putc_unlocked (',', asmfile);
   (current_sym_nchars += (1));
   if (((tem)->common.chain) != 0)
     do { } while (0);
 }
      putc_unlocked (';', asmfile);
      (current_sym_nchars += (1));
      break;
    case POINTER_TYPE:
      putc_unlocked ('*', asmfile);
      (current_sym_nchars += (1));
      dbxout_type (((type)->common.type), 0);
      break;
    case METHOD_TYPE:
      if (use_gnu_debug_info_extensions)
 {
   have_used_extensions = 1;
   putc_unlocked ('#', asmfile);
   (current_sym_nchars += (1));
   dbxout_type (((type)->type.maxval), 0);
   putc_unlocked (',', asmfile);
   (current_sym_nchars += (1));
   dbxout_type (((type)->common.type), 0);
   dbxout_args (((type)->type.value1s));
   putc_unlocked (';', asmfile);
   (current_sym_nchars += (1));
 }
      else
 dbxout_type (((type)->common.type), 0);
      break;
    case OFFSET_TYPE:
      if (use_gnu_debug_info_extensions)
 {
   have_used_extensions = 1;
   putc_unlocked ('@', asmfile);
   (current_sym_nchars += (1));
   dbxout_type (((type)->type.maxval), 0);
   putc_unlocked (',', asmfile);
   (current_sym_nchars += (1));
   dbxout_type (((type)->common.type), 0);
 }
      else
 dbxout_type (integer_types[itk_int], 0);
      break;
    case REFERENCE_TYPE:
      if (use_gnu_debug_info_extensions)
 have_used_extensions = 1;
      putc_unlocked (use_gnu_debug_info_extensions ? '&' : '*', asmfile);
      (current_sym_nchars += (1));
      dbxout_type (((type)->common.type), 0);
      break;
    case FUNCTION_TYPE:
      putc_unlocked ('f', asmfile);
      (current_sym_nchars += (1));
      dbxout_type (((type)->common.type), 0);
      break;
    default:
      fancy_abort ("gcc.c", 433592, "?");
    }
}
static unsigned char
print_int_cst_bounds_in_octal_p (tree type)
{
  if (use_gnu_debug_info_extensions
      && ((type)->type.minval) != 0
      && ((enum tree_code) (((type)->type.minval))->common.code) == INTEGER_CST
      && ((type)->type.maxval) != 0
      && ((enum tree_code) (((type)->type.maxval))->common.code) == INTEGER_CST
      && (((type)->type.precision) > ((integer_types[itk_int])->type.precision)
   || ((((type)->type.precision) == ((integer_types[itk_int])->type.precision))
       && ((type)->common.unsigned_flag))
   || ((type)->type.precision) > (8 * 4)
   || (((type)->type.precision) == (8 * 4)
       && ((type)->common.unsigned_flag))))
    return 1;
  else
    return 0;
}
static void
print_int_cst_octal (tree c)
{
  unsigned long high = (((c)->int_cst.int_cst).high);
  unsigned long low = (((c)->int_cst.int_cst).low);
  int excess = (3 - ((8 * 4) % 3));
  unsigned int width = ((((c)->common.type))->type.precision);
  if (width == (8 * 4) * 2)
    ;
  else if (width > (8 * 4))
    high &= (((long) 1 << (width - (8 * 4))) - 1);
  else if (width == (8 * 4))
    high = 0;
  else
    high = 0, low &= (((long) 1 << width) - 1);
  fprintf (asmfile, "0");
  (current_sym_nchars += (1));
  if (excess == 3)
    {
      print_octal (high, (8 * 4) / 3);
      print_octal (low, (8 * 4) / 3);
    }
  else
    {
      unsigned long beg = high >> excess;
      unsigned long middle
 = ((high & (((long) 1 << excess) - 1)) << (3 - excess)
    | (low >> ((8 * 4) / 3 * 3)));
      unsigned long end
 = low & (((unsigned long) 1
    << ((8 * 4) / 3 * 3))
   - 1);
      fprintf (asmfile, "%o%01o", (int) beg, (int) middle);
      (current_sym_nchars += (2));
      print_octal (end, (8 * 4) / 3);
    }
}
static void
print_octal (unsigned long value1, int digits)
{
  int i;
  for (i = digits - 1; i >= 0; i--)
    fprintf (asmfile, "%01o", (int) ((value1 >> (3 * i)) & 7));
  (current_sym_nchars += (digits));
}
static void
print_wide_int (long c)
{
  int digs = 0;
  fprintf (asmfile, "%ld", c);
  if (c < 0)
    digs++, c = -c;
  while (c > 0)
    c /= 10; digs++;
  (current_sym_nchars += (digs));
}
static void
dbxout_type_name (tree type)
{
  tree t;
  if (((type)->type.name) == 0)
    fancy_abort ("gcc.c", 433715, "?");
  if (((enum tree_code) (((type)->type.name))->common.code) == IDENTIFIER_NODE)
    {
      t = ((type)->type.name);
    }
  else if (((enum tree_code) (((type)->type.name))->common.code) == TYPE_DECL)
    {
      t = ((((type)->type.name))->decl.name);
    }
  else
    fancy_abort ("gcc.c", 433725, "?");
  fprintf (asmfile, "%s", ((const char *) (t)->identifier.id.str));
  (current_sym_nchars += (((t)->identifier.id.len)));
}
static void
dbxout_class_name_qualifiers (tree decl)
{
  tree context = decl_type_context (decl);
  if (context != (tree) ((void *)0)
      && ((enum tree_code) (context)->common.code) == RECORD_TYPE
      && ((context)->type.name) != 0
      && (((enum tree_code) (((context)->type.name))->common.code) == IDENTIFIER_NODE
          || (((((context)->type.name))->decl.name) != 0)))
    {
      tree name = ((context)->type.name);
      emit_pending_bincls_if_required ();
      if (((enum tree_code) (name)->common.code) == TYPE_DECL)
 {
   dbxout_class_name_qualifiers (name);
   name = ((name)->decl.name);
 }
      fprintf (asmfile, "%s::", ((const char *) (name)->identifier.id.str));
      (current_sym_nchars += (((name)->identifier.id.len) + 2));
    }
}
int
dbxout_symbol (tree decl, int local )
{
  tree type = ((decl)->common.type);
  tree context = (tree) ((void *)0);
  int result = 0;
  ++debug_nesting;
  if ((((decl)->decl.name) == 0 && ((enum tree_code) (decl)->common.code) != TYPE_DECL)
      || ((decl)->decl.ignored_flag))
    do {--debug_nesting; return (0);} while (0);
  if (flag_debug_only_used_symbols
      && (!((decl)->common.used_flag)
          && (((enum tree_code) (decl)->common.code) != VAR_DECL || !((decl)->decl.initial))))
    do {--debug_nesting; return (0);} while (0);
  if (!typevec)
    {
      preinit_symbols = tree_cons_stat (0,decl,preinit_symbols );
      do {--debug_nesting; return (0);} while (0);
    }
  if (flag_debug_only_used_symbols)
    {
      tree t;
      t = type;
      while ((((enum tree_code) (t)->common.code) == POINTER_TYPE || ((enum tree_code) (t)->common.code) == REFERENCE_TYPE))
        t = ((t)->common.type);
      if ((((enum tree_code) (t)->common.code) == RECORD_TYPE
           || ((enum tree_code) (t)->common.code) == UNION_TYPE
           || ((enum tree_code) (t)->common.code) == QUAL_UNION_TYPE
           || ((enum tree_code) (t)->common.code) == ENUMERAL_TYPE)
          && ((t)->common.chain)
          && ((t)->common.chain) != decl
          && tree_code_type[(int) (((enum tree_code) (((t)->common.chain))->common.code))] == 'd'
          && ! ((((t)->common.chain))->decl.ignored_flag))
        {
          debug_queue_symbol (((t)->common.chain));
          if (((t)->type.name)
              && ((t)->type.name) != ((t)->common.chain)
              && ((t)->type.name) != decl
              && tree_code_type[(int) (((enum tree_code) (((t)->type.name))->common.code))] == 'd')
            debug_queue_symbol (((t)->type.name));
        }
      else if (((t)->type.name)
        && ((t)->type.name) != decl
        && tree_code_type[(int) (((enum tree_code) (((t)->type.name))->common.code))] == 'd')
        debug_queue_symbol (((t)->type.name));
    }
  emit_pending_bincls_if_required ();
  dbxout_prepare_symbol (decl);
  if (((decl)->decl.name) != 0)
    current_sym_nchars = 2 + ((((decl)->decl.name))->identifier.id.len);
  switch (((enum tree_code) (decl)->common.code))
    {
    case CONST_DECL:
      break;
    case FUNCTION_DECL:
      if (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)) == 0)
 do {--debug_nesting; return (0);} while (0);
      if (((decl)->decl.external_flag))
 break;
      context = decl_function_context (decl);
      if (context == current_function_decl)
 break;
      if (!(((enum rtx_code) (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->code) == MEM)
   || ((enum rtx_code) ((((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1))->code) != SYMBOL_REF)
 break;
      ;
      fprintf (asmfile, "%s\"%s:%c", "\t.stabs\t",
        ((const char *) (decl_assembler_name (decl))->identifier.id.str),
        ((decl)->common.public_flag) ? 'F' : 'f');
      result = 1;
      current_sym_code = N_FUN;
      current_sym_addr = (((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1);
      if (((type)->common.type))
 dbxout_type (((type)->common.type), 0);
      else
 dbxout_type (global_trees[TI_VOID_TYPE], 0);
      if (context != 0)
 fprintf (asmfile, ",%s,%s",
   ((const char *) (decl_assembler_name (decl))->identifier.id.str),
   ((const char *) (((context)->decl.name))->identifier.id.str));
      dbxout_finish_symbol (decl);
      break;
    case TYPE_DECL:
      if (((decl)->common.asm_written_flag) || ((decl)->decl.external_flag))
 do {--debug_nesting; return (0);} while (0);
      ;
      result = 1;
      {
 int tag_needed = 1;
 int did_output = 0;
 if (((decl)->decl.name))
   {
     tag_needed = 0;
     if ((((enum tree_code) (type)->common.code) == RECORD_TYPE
   || ((enum tree_code) (type)->common.code) == UNION_TYPE
   || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE)
  && ((type)->type.name) == decl
  && !(use_gnu_debug_info_extensions && have_used_extensions)
  && !((((type)->type.name))->common.asm_written_flag)
  && ((decl)->decl.artificial_flag)
                && (((type)->type.size) != (tree) ((void *)0))
  && host_integerp (((type)->type.size), 1))
       {
  tree name = ((type)->type.name);
  if (((enum tree_code) (name)->common.code) == TYPE_DECL)
    name = ((name)->decl.name);
  current_sym_code = N_LSYM;
  current_sym_value = 0;
  current_sym_addr = 0;
  current_sym_nchars = 2 + ((name)->identifier.id.len);
  fprintf (asmfile, "%s\"%s:T", "\t.stabs\t",
    ((const char *) (name)->identifier.id.str));
  dbxout_type (type, 1);
  dbxout_finish_symbol ((tree) ((void *)0));
       }
     fprintf (asmfile, "%s\"", "\t.stabs\t");
     if (use_gnu_debug_info_extensions)
       {
  dbxout_class_name_qualifiers (decl);
       }
     fprintf (asmfile, "%s:", ((const char *) (((decl)->decl.name))->identifier.id.str));
     if ((((enum tree_code) (type)->common.code) == RECORD_TYPE
   || ((enum tree_code) (type)->common.code) == UNION_TYPE
   || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE)
  && ((type)->type.name) == decl
  && ((decl)->decl.artificial_flag))
       {
  if (use_gnu_debug_info_extensions && have_used_extensions)
    {
      putc_unlocked ('T', asmfile);
      ((((type)->type.name))->common.asm_written_flag) = 1;
    }
       }
     putc_unlocked ('t', asmfile);
     current_sym_code = N_LSYM;
     dbxout_type (type, 1);
     dbxout_finish_symbol (decl);
     did_output = 1;
   }
 if (tag_needed && ((type)->type.name) != 0
     && (((enum tree_code) (((type)->type.name))->common.code) == IDENTIFIER_NODE
  || (((((type)->type.name))->decl.name) != 0))
     && (((type)->type.size) != (tree) ((void *)0))
     && !((((type)->type.name))->common.asm_written_flag))
   {
     tree name = ((type)->type.name);
     if (((enum tree_code) (name)->common.code) == TYPE_DECL)
       name = ((name)->decl.name);
     current_sym_code = N_LSYM;
     current_sym_value = 0;
     current_sym_addr = 0;
     current_sym_nchars = 2 + ((name)->identifier.id.len);
     fprintf (asmfile, "%s\"%s:T", "\t.stabs\t",
       ((const char *) (name)->identifier.id.str));
     dbxout_type (type, 1);
     dbxout_finish_symbol ((tree) ((void *)0));
     did_output = 1;
   }
 if (!did_output && ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE)
   {
     current_sym_code = N_LSYM;
     current_sym_value = 0;
     current_sym_addr = 0;
     current_sym_nchars = 2;
     fprintf (asmfile, "%s\" :T", "\t.stabs\t");
     dbxout_type (type, 1);
     dbxout_finish_symbol ((tree) ((void *)0));
   }
 ((decl)->common.asm_written_flag) = 1;
 break;
      }
    case PARM_DECL:
      fancy_abort ("gcc.c", 434059, "?");
    case RESULT_DECL:
    case VAR_DECL:
      if (! ((decl)->decl.rtl != ((void *)0)))
 do {--debug_nesting; return (0);} while (0);
      if (((decl)->decl.external_flag))
 break;
      if (((decl)->common.static_flag) && ((decl)->common.readonly_flag)
   && ((decl)->decl.initial) != 0
   && host_integerp (((decl)->decl.initial), 0)
   && ! ((decl)->common.asm_written_flag)
   && (((decl)->decl.context) == (tree) ((void *)0)
       || ((enum tree_code) (((decl)->decl.context))->common.code) == BLOCK))
 {
   if (((decl)->common.public_flag) == 0)
     {
       const char *name = ((const char *) (((decl)->decl.name))->identifier.id.str);
       if (((enum tree_code) (((decl)->common.type))->common.code) == INTEGER_TYPE
    || ((enum tree_code) (((decl)->common.type))->common.code) == ENUMERAL_TYPE)
  {
    long ival = tree_low_cst (((decl)->decl.initial), 0);
    fprintf (asmfile, "%s\"%s:c=i%ld\",0x%x,0,0,0\n",
      "\t.stabs\t", name, ival, N_LSYM);
    if (--debug_nesting == 0 && symbol_queue_index > 0) { emit_pending_bincls_if_required (); debug_flush_symbol_queue (); };
    return 1;
  }
       else if (((enum tree_code) (((decl)->common.type))->common.code) == REAL_TYPE)
  {
  }
       break;
     }
 }
      set_decl_rtl (decl, eliminate_regs (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)), 0, (rtx) 0));
      result = dbxout_symbol_location (decl, type, 0, ((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)));
      break;
    default:
      break;
    }
  if (--debug_nesting == 0 && symbol_queue_index > 0) { emit_pending_bincls_if_required (); debug_flush_symbol_queue (); };
  return result;
}
static int
dbxout_symbol_location (tree decl, tree type, const char *suffix, rtx home)
{
  int letter = 0;
  int regno = -1;
  emit_pending_bincls_if_required ();
  if (((enum rtx_code) (home)->code) == SUBREG)
    {
      rtx value1 = home;
      while (((enum rtx_code) (value1)->code) == SUBREG)
 value1 = (((value1)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (value1)->code) == REG))
 {
   if ((((value1)->u.fld[0]).rtuint) >= 53)
     return 0;
 }
      home = alter_subreg (&home);
    }
  if ((((enum rtx_code) (home)->code) == REG))
    {
      regno = (((home)->u.fld[0]).rtuint);
      if (regno >= 53)
 return 0;
    }
  if ((((enum rtx_code) (home)->code) == MEM)
      && ((enum rtx_code) ((((home)->u.fld[0]).rtx1))->code) == SYMBOL_REF)
    {
      if (((decl)->common.public_flag))
 {
   letter = 'G';
   current_sym_code = N_GSYM;
 }
      else
 {
   current_sym_addr = (((home)->u.fld[0]).rtx1);
   letter = decl_function_context (decl) ? 'V' : 'S';
   if (((decl)->decl.initial) == 0
       || (!strcmp (lang_hooks.name, "GNU C++")
    && ((decl)->decl.initial) == global_trees[TI_ERROR_MARK]))
     current_sym_code = N_LCSYM;
   else if (((decl)->decl.bit_field_flag))
     current_sym_code = N_FUN;
   else
     {
       if (((enum rtx_code) (current_sym_addr)->code) == SYMBOL_REF
    && (((current_sym_addr))->unchanging))
  {
    unsigned char marked;
    rtx tmp = get_pool_constant_mark (current_sym_addr, &marked);
    if (((enum rtx_code) (tmp)->code) == SYMBOL_REF)
      {
        current_sym_addr = tmp;
        if ((((current_sym_addr))->unchanging))
          get_pool_constant_mark (current_sym_addr, &marked);
        else
   marked = 1;
      }
    else if (((enum rtx_code) (tmp)->code) == LABEL_REF)
      {
        current_sym_addr = tmp;
        marked = 1;
      }
    if (!marked)
      return 0;
  }
       current_sym_code = N_STSYM;
     }
 }
    }
  else if (regno >= 0)
    {
      letter = 'r';
      current_sym_code = N_RSYM;
      current_sym_value = (0 ? dbx64_register_map[regno] : svr4_dbx_register_map[regno]);
    }
  else if ((((enum rtx_code) (home)->code) == MEM)
    && ((((enum rtx_code) ((((home)->u.fld[0]).rtx1))->code) == MEM)
        || ((((enum rtx_code) ((((home)->u.fld[0]).rtx1))->code) == REG)
     && ((((((home)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != 6
     && ((((((home)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != 7
     && ((((((home)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != 16
     )))
    {
      if ((((enum rtx_code) ((((home)->u.fld[0]).rtx1))->code) == REG))
 {
   letter = 'r';
   current_sym_code = N_RSYM;
   if (((((((home)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
     return 0;
   current_sym_value = (0 ? dbx64_register_map[((((((home)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] : svr4_dbx_register_map[((((((home)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]);
 }
      else
 {
   current_sym_code = N_LSYM;
   current_sym_value
     = (((enum rtx_code) (((((((home)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == PLUS ? (((((((((((home)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) : 0);
 }
      type = make_node_stat (POINTER_TYPE );
      ((type)->common.type) = ((decl)->common.type);
    }
  else if ((((enum rtx_code) (home)->code) == MEM)
    && (((enum rtx_code) ((((home)->u.fld[0]).rtx1))->code) == REG))
    {
      current_sym_code = N_LSYM;
      current_sym_value = (((enum rtx_code) ((((home)->u.fld[0]).rtx1))->code) == PLUS ? ((((((((home)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) : 0);
    }
  else if ((((enum rtx_code) (home)->code) == MEM)
    && ((enum rtx_code) ((((home)->u.fld[0]).rtx1))->code) == PLUS
    && ((enum rtx_code) (((((((home)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
    {
      current_sym_code = N_LSYM;
      current_sym_value = (((enum rtx_code) ((((home)->u.fld[0]).rtx1))->code) == PLUS ? ((((((((home)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) : 0);
    }
  else if ((((enum rtx_code) (home)->code) == MEM)
    && ((enum rtx_code) ((((home)->u.fld[0]).rtx1))->code) == CONST)
    {
      current_sym_code = N_LCSYM;
      letter = 'V';
      current_sym_addr = ((((((home)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
    }
  else if (((enum rtx_code) (home)->code) == CONCAT)
    {
      tree subtype;
      if (((enum tree_code) (type)->common.code) != COMPLEX_TYPE)
 return 0;
      subtype = ((type)->common.type);
      if (0)
 dbxout_symbol_location (decl, subtype, "$imag", (((home)->u.fld[0]).rtx1));
      else
 dbxout_symbol_location (decl, subtype, "$real", (((home)->u.fld[0]).rtx1));
      dbxout_prepare_symbol (decl);
      if (0)
 dbxout_symbol_location (decl, subtype, "$real", (((home)->u.fld[1]).rtx1));
      else
 dbxout_symbol_location (decl, subtype, "$imag", (((home)->u.fld[1]).rtx1));
      return 1;
    }
  else
    return 0;
  ;
  dbxout_symbol_name (decl, suffix, letter);
  dbxout_type (type, 0);
  dbxout_finish_symbol (decl);
  return 1;
}
static void
dbxout_symbol_name (tree decl, const char *suffix, int letter)
{
  const char *name;
  if (((decl)->decl.context)
      && ((tree_code_type[(int) (((enum tree_code) (((decl)->decl.context))->common.code))] == 't')
   || ((enum tree_code) (((decl)->decl.context))->common.code) == NAMESPACE_DECL))
    name = ((const char *) (decl_assembler_name (decl))->identifier.id.str);
  else
    name = ((const char *) (((decl)->decl.name))->identifier.id.str);
  if (name == 0)
    name = "(anon)";
  fprintf (asmfile, "%s\"%s%s:", "\t.stabs\t", name,
    (suffix ? suffix : ""));
  if (letter)
    putc_unlocked (letter, asmfile);
}
static void
dbxout_prepare_symbol (tree decl )
{
  current_sym_code = (enum __stab_debug_code) 0;
  current_sym_value = 0;
  current_sym_addr = 0;
}
static void
dbxout_finish_symbol (tree sym)
{
  int line = 0;
  if (use_gnu_debug_info_extensions && sym != 0)
    line = (((((sym)->decl.locus))).line);
  fprintf (asmfile, "\",%d,0,%d,", current_sym_code, line);
  if (current_sym_addr)
    output_addr_const (asmfile, current_sym_addr);
  else
    fprintf (asmfile, "%d", current_sym_value);
  putc_unlocked ('\n', asmfile);
}
int
dbxout_syms (tree syms)
{
  int result = 0;
  while (syms)
    {
      result += dbxout_symbol (syms, 1);
      syms = ((syms)->common.chain);
    }
  return result;
}
void
dbxout_parms (tree parms)
{
  ++debug_nesting;
  emit_pending_bincls_if_required ();
  for (; parms; parms = ((parms)->common.chain))
    if (((parms)->decl.name)
 && ((parms)->common.type) != global_trees[TI_ERROR_MARK]
 && ((parms)->decl.rtl != ((void *)0))
 && ((parms)->decl.u2.r))
      {
 dbxout_prepare_symbol (parms);
 ((parms)->decl.u2.r)
   = eliminate_regs (((parms)->decl.u2.r), 0, (rtx) 0);
 set_decl_rtl (parms, eliminate_regs (((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)), 0, (rtx) 0));
 if (((((enum rtx_code) (((parms)->decl.u2.r))->code) == MEM)))
   {
     rtx addr = (((((parms)->decl.u2.r))->u.fld[0]).rtx1);
     if (((enum rtx_code) (addr)->code) == PLUS
  && ((enum rtx_code) ((((addr)->u.fld[1]).rtx1))->code) == CONST_INT)
       current_sym_value = (((((addr)->u.fld[1]).rtx1))->u.hwint[0]);
     else
       current_sym_value = 0;
     current_sym_code = N_PSYM;
     current_sym_addr = 0;
     ;
     if (((parms)->decl.name))
       {
  current_sym_nchars = 2 + ((((parms)->decl.name))->identifier.id.len);
  fprintf (asmfile, "%s\"%s:%c", "\t.stabs\t",
    ((const char *) (((parms)->decl.name))->identifier.id.str),
    'p');
       }
     else
       {
  current_sym_nchars = 8;
  fprintf (asmfile, "%s\"(anon):%c", "\t.stabs\t",
    'p');
       }
     dbxout_type (((parms)->decl.initial), 0);
     current_sym_value = (current_sym_value);
     dbxout_finish_symbol (parms);
   }
 else if ((((enum rtx_code) (((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->code) == REG))
   {
     rtx best_rtl;
     char regparm_letter;
     tree parm_type;
     current_sym_code = N_RSYM;
     regparm_letter = 'P';
     current_sym_addr = 0;
     if ((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtuint) < 53)
       {
  best_rtl = ((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl));
  parm_type = ((parms)->common.type);
       }
     else
       {
  best_rtl = ((parms)->decl.u2.r);
  parm_type = ((parms)->common.type);
       }
     current_sym_value = (0 ? dbx64_register_map[(((best_rtl)->u.fld[0]).rtuint)] : svr4_dbx_register_map[(((best_rtl)->u.fld[0]).rtuint)]);
     ;
     if (((parms)->decl.name))
       {
  current_sym_nchars = 2 + ((((parms)->decl.name))->identifier.id.len);
  fprintf (asmfile, "%s\"%s:%c", "\t.stabs\t",
    ((const char *) (((parms)->decl.name))->identifier.id.str),
    regparm_letter);
       }
     else
       {
  current_sym_nchars = 8;
  fprintf (asmfile, "%s\"(anon):%c", "\t.stabs\t",
    regparm_letter);
       }
     dbxout_type (parm_type, 0);
     dbxout_finish_symbol (parms);
   }
 else if ((((enum rtx_code) (((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->code) == MEM)
   && (((enum rtx_code) ((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->code) == REG)
   && ((((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[0]).rtuint) != 6
   && ((((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[0]).rtuint) != 7
   && ((((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[0]).rtuint) != 16
   )
   {
     char regparm_letter;
     current_sym_code = N_RSYM;
     if (use_gnu_debug_info_extensions)
       regparm_letter = 'a';
     else
       regparm_letter = 'P';
     if (((((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
       current_sym_value = ((((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[0]).rtuint);
     else
       current_sym_value = (((((parms)->decl.u2.r))->u.fld[0]).rtuint);
     current_sym_addr = 0;
     ;
     if (((parms)->decl.name))
       {
  current_sym_nchars
    = 2 + strlen (((const char *) (((parms)->decl.name))->identifier.id.str));
  fprintf (asmfile, "%s\"%s:%c", "\t.stabs\t",
    ((const char *) (((parms)->decl.name))->identifier.id.str),
    regparm_letter);
       }
     else
       {
  current_sym_nchars = 8;
  fprintf (asmfile, "%s\"(anon):%c", "\t.stabs\t",
    regparm_letter);
       }
     dbxout_type (((parms)->common.type), 0);
     dbxout_finish_symbol (parms);
   }
 else if ((((enum rtx_code) (((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->code) == MEM)
   && (((enum rtx_code) ((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->code) == MEM))
   {
     const char *const decl_name = (((parms)->decl.name)
         ? ((const char *) (((parms)->decl.name))->identifier.id.str)
         : "(anon)");
     if ((((enum rtx_code) (((((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG))
       current_sym_value = 0;
     else
       current_sym_value
         = (((((((((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
     current_sym_addr = 0;
     current_sym_code = N_PSYM;
     ;
     fprintf (asmfile, "%s\"%s:v", "\t.stabs\t", decl_name);
     current_sym_value
       = (current_sym_value)
                                              ;
     dbxout_type (((parms)->common.type), 0);
     dbxout_finish_symbol (parms);
   }
 else if ((((enum rtx_code) (((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->code) == MEM)
   && (((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1) != (const_int_rtx[64])
   && ! ((rtx_class[(int) (((enum rtx_code) ((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->code) == CONST_VECTOR))
   {
     current_sym_code = N_PSYM;
     if ((((enum rtx_code) ((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->code) == REG))
       current_sym_value = 0;
     else
  current_sym_value
    = ((((((((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
     current_sym_addr = 0;
     if (0
  && ((((parms)->common.type))->type.mode) != ((enum machine_mode) (((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->mode)
  && ((unsigned short) mode_size[((((parms)->common.type))->type.mode)]) < (0 ? 8 : 4))
       {
  current_sym_value +=
      ((unsigned short) mode_size[((enum machine_mode) (((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->mode)])
      - ((unsigned short) mode_size[((((parms)->common.type))->type.mode)]);
       }
     ;
     if (((parms)->decl.name))
       {
  current_sym_nchars
    = 2 + strlen (((const char *) (((parms)->decl.name))->identifier.id.str));
  fprintf (asmfile, "%s\"%s:%c", "\t.stabs\t",
    ((const char *) (((parms)->decl.name))->identifier.id.str),
    'p');
       }
     else
       {
  current_sym_nchars = 8;
  fprintf (asmfile, "%s\"(anon):%c", "\t.stabs\t",
  'p');
       }
     current_sym_value
       = (current_sym_value)
                                    ;
     dbxout_type (((parms)->common.type), 0);
     dbxout_finish_symbol (parms);
   }
      }
  if (--debug_nesting == 0 && symbol_queue_index > 0) { emit_pending_bincls_if_required (); debug_flush_symbol_queue (); };
}
void
dbxout_reg_parms (tree parms)
{
  ++debug_nesting;
  for (; parms; parms = ((parms)->common.chain))
    if (((parms)->decl.name) && ((((enum rtx_code) (((parms)->decl.u2.r))->code) == MEM)))
      {
 dbxout_prepare_symbol (parms);
 if ((((enum rtx_code) (((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->code) == REG)
     && (((((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->u.fld[0]).rtuint) < 53)
   dbxout_symbol_location (parms, ((parms)->common.type),
      0, ((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)));
 else if (((enum rtx_code) (((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->code) == CONCAT)
   dbxout_symbol_location (parms, ((parms)->common.type),
      0, ((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)));
 else if ((((enum rtx_code) (((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)))->code) == MEM)
   && ! rtx_equal_p (((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)), ((parms)->decl.u2.r)))
   dbxout_symbol_location (parms, ((parms)->common.type),
      0, ((parms)->decl.rtl ? (parms)->decl.rtl : (make_decl_rtl (parms, ((void *)0)), (parms)->decl.rtl)));
      }
  if (--debug_nesting == 0 && symbol_queue_index > 0) { emit_pending_bincls_if_required (); debug_flush_symbol_queue (); };
}
static void
dbxout_args (tree args)
{
  while (args)
    {
      putc_unlocked (',', asmfile);
      dbxout_type (((args)->list.value1), 0);
      (current_sym_nchars += (1));
      args = ((args)->common.chain);
    }
}
static void
dbxout_block (tree block, int depth, tree args)
{
  int blocknum = -1;
  const char *begin_label;
  if (current_function_func_begin_label != (tree) ((void *)0))
    begin_label = ((const char *) (current_function_func_begin_label)->identifier.id.str);
  else
    begin_label = ((((((((current_function_decl)->decl.rtl ? (current_function_decl)->decl.rtl : (make_decl_rtl (current_function_decl, ((void *)0)), (current_function_decl)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[0]).rtstr);
  while (block)
    {
      if (((block)->common.used_flag) && ((block)->common.asm_written_flag))
 {
   int did_output;
   did_output = 0;
   if (debug_info_level != DINFO_LEVEL_TERSE || depth == 0)
     did_output = dbxout_syms (((block)->block.vars));
   if (args)
     dbxout_reg_parms (args);
   if (depth > 0 && did_output)
     {
       char buf[20];
       blocknum = ((block)->block.block_num);
       do { sprintf (buf, "*.%s%u", "LBB", (unsigned) (blocknum)); } while (0);
       if (((block)->block.handler_block_flag))
  {
    tree decl = ((block)->block.vars);
    while (decl)
      {
        fprintf (asmfile, "%s\"%s:C1\",%d,0,0,", "\t.stabs\t",
          ((const char *) (((decl)->decl.name))->identifier.id.str), N_CATCH);
        assemble_name (asmfile, buf);
        fprintf (asmfile, "\n");
        decl = ((decl)->common.chain);
      }
  }
       fprintf (asmfile, "%s%d,0,0,", "\t.stabn\t", N_LBRAC);
       assemble_name (asmfile, buf);
       putc_unlocked ('-', asmfile);
       assemble_name (asmfile, begin_label);
       fprintf (asmfile, "\n");
     }
   dbxout_block (((block)->block.subblocks), depth + 1, (tree) ((void *)0));
   if (depth > 0 && did_output)
     {
       char buf[20];
       do { sprintf (buf, "*.%s%u", "LBE", (unsigned) (blocknum)); } while (0);
       fprintf (asmfile, "%s%d,0,0,", "\t.stabn\t", N_RBRAC);
       assemble_name (asmfile, buf);
       putc_unlocked ('-', asmfile);
       assemble_name (asmfile, begin_label);
       fprintf (asmfile, "\n");
     }
 }
      block = (((block))->common.chain);
    }
}
static void
dbxout_begin_function (tree decl)
{
  int saved_tree_used1 = ((decl)->common.used_flag);
  ((decl)->common.used_flag) = 1;
  if (((((decl)->decl.result))->decl.name) != 0)
    {
      int saved_tree_used2 = ((((decl)->decl.result))->common.used_flag);
      ((((decl)->decl.result))->common.used_flag) = 1;
      dbxout_symbol (decl, 0);
      ((((decl)->decl.result))->common.used_flag) = saved_tree_used2;
    }
  else
    dbxout_symbol (decl, 0);
  ((decl)->common.used_flag) = saved_tree_used1;
  dbxout_parms (((decl)->decl.arguments));
  if (((((decl)->decl.result))->decl.name) != 0)
    dbxout_symbol (((decl)->decl.result), 1);
}
void
gt_ggc_mx_typeinfo (void *x_p)
{
  struct typeinfo * const x = (struct typeinfo *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
    }
}
void
gt_pch_nx_typeinfo (void *x_p)
{
  struct typeinfo * const x = (struct typeinfo *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_8typeinfo))
    {
    }
}
void
gt_pch_p_8typeinfo (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct typeinfo * const x = (struct typeinfo *)x_p;
}
static void gt_ggc_ma_typevec (void *);
static void
gt_ggc_ma_typevec (void *x_p )
{
  if (typevec != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(typevec_len); i0++) {
    }
    do { const void *const a__ = (typevec); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
  }
}
static void gt_pch_pa_typevec
    (void *, void *, gt_pointer_operator, void *);
static void gt_pch_pa_typevec (void *this_obj ,
      void *x_p ,
      gt_pointer_operator op ,
      void *cookie )
{
  if (typevec != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(typevec_len); i0++) {
    }
    if ((void *)(&typevec) == this_obj)
      op (&(typevec), cookie);
  }
}
static void gt_pch_na_typevec (void *);
static void
gt_pch_na_typevec (void *x_p )
{
  if (typevec != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)(typevec_len); i1++) {
    }
    gt_pch_note_object (typevec, &typevec, gt_pch_pa_typevec);
  }
}
const struct ggc_root_tab gt_ggc_r_gt_dbxout_h[] = {
  {
    &lastfile,
    1,
    sizeof (lastfile),
    &gt_ggc_m_S,
    (gt_pointer_walker) &gt_pch_n_S
  },
  {
    &preinit_symbols,
    1,
    sizeof (preinit_symbols),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &typevec,
    1,
    sizeof (typevec),
    &gt_ggc_ma_typevec,
    &gt_pch_na_typevec
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_dbxout_h[] = {
  { &lastfile_is_base, 1, sizeof (lastfile_is_base), ((void *)0), ((void *)0) },
  { &source_label_number, 1, sizeof (source_label_number), ((void *)0), ((void *)0) },
  { &have_used_extensions, 1, sizeof (have_used_extensions), ((void *)0), ((void *)0) },
  { &dbxout_source_line_counter, 1, sizeof (dbxout_source_line_counter), ((void *)0), ((void *)0) },
  { &scope_labelno, 1, sizeof (scope_labelno), ((void *)0), ((void *)0) },
  { &next_file_number, 1, sizeof (next_file_number), ((void *)0), ((void *)0) },
  { &next_type_number, 1, sizeof (next_type_number), ((void *)0), ((void *)0) },
  { &typevec_len, 1, sizeof (typevec_len), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
extern state_t curr_state;
struct ready_list;
struct deps
{
  rtx pending_read_insns;
  rtx pending_read_mems;
  rtx pending_write_insns;
  rtx pending_write_mems;
  int pending_lists_length;
  int pending_flush_length;
  rtx last_pending_memory_flush;
  rtx last_function_call;
  rtx sched_before_next_call;
  enum { not_post_call, post_call, post_call_initial } in_post_call_group_p;
  rtx libcall_block_tail_insn;
  int max_reg;
  struct deps_reg
    {
      rtx uses;
      rtx sets;
      rtx clobbers;
      int uses_length;
      int clobbers_length;
    } *reg_last;
  regset_head reg_last_in_use;
  regset_head reg_conditional_sets;
};
struct sched_info
{
  void (*init_ready_list) (struct ready_list *);
  int (*can_schedule_ready_p) (rtx);
  int (*schedule_more_p) (void);
  int (*new_ready) (rtx);
  int (*rank) (rtx, rtx);
  const char *(*print_insn) (rtx, int);
  int (*contributes_to_priority) (rtx, rtx);
  void (*compute_jump_reg_dependencies) (rtx, regset, regset, regset);
  rtx prev_head, next_tail;
  rtx head, tail;
  unsigned int queue_must_finish_empty:1;
  unsigned int use_cselib:1;
  int sched_max_insns_priority;
};
extern struct sched_info *current_sched_info;
struct haifa_insn_data
{
  rtx depend;
  rtx line_note;
  int luid;
  int priority;
  int dep_count;
  unsigned int blockage;
  int ref_count;
  int tick;
  short cost;
  short units;
  short reg_weight;
  unsigned int cant_move : 1;
  unsigned int fed_by_spec_load : 1;
  unsigned int is_load_insn : 1;
  unsigned int priority_known : 1;
};
extern struct haifa_insn_data *h_i_d;
extern FILE *sched_dump;
extern int sched_verbose;
enum INSN_TRAP_CLASS
{
  TRAP_FREE = 0, IFREE = 1, PFREE_CANDIDATE = 2,
  PRISKY_CANDIDATE = 3, IRISKY = 4, TRAP_RISKY = 5
};
extern void init_target_units (void);
extern void insn_print_units (rtx);
extern void init_block_visualization (void);
extern void print_block_visualization (const char *);
extern void visualize_scheduled_insns (int);
extern void visualize_no_unit (rtx);
extern void visualize_stall_cycles (int);
extern void visualize_alloc (void);
extern void visualize_free (void);
extern int add_dependence (rtx, rtx, enum reg_note);
extern void add_insn_mem_dependence (struct deps *, rtx *, rtx *, rtx, rtx);
extern void sched_analyze (struct deps *, rtx, rtx);
extern void init_deps (struct deps *);
extern void free_deps (struct deps *);
extern void init_deps_global (void);
extern void finish_deps_global (void);
extern void add_forward_dependence (rtx, rtx, enum reg_note);
extern void compute_forward_dependences (rtx, rtx);
extern rtx find_insn_list (rtx, rtx);
extern void init_dependency_caches (int);
extern void free_dependency_caches (void);
extern int haifa_classify_insn (rtx);
extern void get_block_head_tail (int, rtx *, rtx *);
extern int no_real_insns_p (rtx, rtx);
extern void rm_line_notes (rtx, rtx);
extern void save_line_notes (int, rtx, rtx);
extern void restore_line_notes (rtx, rtx);
extern void rm_redundant_line_notes (void);
extern void rm_other_notes (rtx, rtx);
extern int insn_issue_delay (rtx);
extern int set_priorities (rtx, rtx);
extern void schedule_block (int, int);
extern void sched_init (FILE *);
extern void sched_finish (void);
extern void ready_add (struct ready_list *, rtx);
extern int insn_unit (rtx);
extern int insn_cost (rtx, rtx, rtx);
extern rtx get_unit_last_insn (int);
extern int actual_hazard_this_instance (int, int, rtx, int, int);
extern void print_insn (char *, rtx, int);
enum df_ref_type {DF_REF_REG_DEF, DF_REF_REG_USE, DF_REF_REG_MEM_LOAD,
    DF_REF_REG_MEM_STORE};
struct df_link
{
  struct df_link *next;
  struct ref *ref;
};
enum df_ref_flags
  {
    DF_REF_READ_WRITE = 1,
    DF_REF_MODE_CHANGE = 2,
    DF_REF_STRIPPED = 4,
    DF_REF_MEM_OK = 8
  };
struct ref
{
  rtx reg;
  rtx insn;
  rtx *loc;
  struct df_link *chain;
  unsigned int id;
  enum df_ref_type type;
  enum df_ref_flags flags;
  void *data;
};
struct insn_df_info
{
  struct df_link *defs;
  struct df_link *uses;
  int luid;
};
struct reg_info
{
  struct df_link *defs;
  struct df_link *uses;
  int lifetime;
  int n_defs;
  int n_uses;
};
struct bb_df_info
{
  bitmap rd_kill;
  bitmap rd_gen;
  bitmap rd_in;
  bitmap rd_out;
  bitmap ru_kill;
  bitmap ru_gen;
  bitmap ru_in;
  bitmap ru_out;
  bitmap lr_def;
  bitmap lr_use;
  bitmap lr_in;
  bitmap lr_out;
  int rd_valid;
  int ru_valid;
  int lr_valid;
};
struct df
{
  int flags;
  struct bb_df_info *bbs;
  struct ref **defs;
  struct ref **uses;
  struct ref **reg_def_last;
  struct reg_info *regs;
  unsigned int reg_size;
  struct insn_df_info *insns;
  unsigned int insn_size;
  unsigned int def_id;
  unsigned int def_size;
  unsigned int n_defs;
  unsigned int use_id;
  unsigned int use_size;
  unsigned int n_uses;
  unsigned int n_bbs;
  unsigned int n_regs;
  unsigned int def_id_save;
  unsigned int use_id_save;
  bitmap insns_modified;
  bitmap bbs_modified;
  bitmap all_blocks;
  int *dfs_order;
  int *rc_order;
  int *rts_order;
  int *inverse_rc_map;
  int *inverse_dfs_map;
  int *inverse_rts_map;
};
struct df_map
{
  rtx old;
  rtx new;
};
extern struct df *df_init (void);
extern int df_analyze (struct df *, bitmap, int);
extern void df_analyze_subcfg (struct df *, bitmap, int);
extern void df_finish (struct df *);
extern void df_dump (struct df *, int, FILE *);
extern void df_insn_modify (struct df *, basic_block, rtx);
extern rtx df_insn_delete (struct df *, basic_block, rtx);
extern rtx df_pattern_emit_before (struct df *, rtx, basic_block, rtx);
extern rtx df_jump_pattern_emit_after (struct df *, rtx, basic_block, rtx);
extern rtx df_pattern_emit_after (struct df *, rtx, basic_block, rtx);
extern rtx df_insn_move_before (struct df *, basic_block, rtx, basic_block,
    rtx);
extern int df_reg_replace (struct df *, bitmap, rtx, rtx);
extern int df_ref_reg_replace (struct df *, struct ref *, rtx, rtx);
extern int df_ref_remove (struct df *, struct ref *);
extern int df_insn_reg_replace (struct df *, basic_block, rtx, rtx, rtx);
extern int df_insn_mem_replace (struct df *, basic_block, rtx, rtx, rtx);
extern struct ref *df_bb_def_use_swap (struct df *, basic_block, rtx, rtx,
           unsigned int);
extern basic_block df_regno_bb (struct df *, unsigned int);
extern int df_reg_lifetime (struct df *, rtx);
extern int df_reg_global_p (struct df *, rtx);
extern int df_insn_regno_def_p (struct df *, basic_block, rtx, unsigned int);
extern int df_insn_dominates_all_uses_p (struct df *, basic_block, rtx);
extern int df_insn_dominates_uses_p (struct df *, basic_block, rtx, bitmap);
extern int df_bb_reg_live_start_p (struct df *, basic_block, rtx);
extern int df_bb_reg_live_end_p (struct df *, basic_block, rtx);
extern int df_bb_regs_lives_compare (struct df *, basic_block, rtx, rtx);
extern rtx df_bb_single_def_use_insn_find (struct df *, basic_block, rtx,
        rtx);
extern struct ref *df_bb_regno_last_use_find (struct df *, basic_block, unsigned int);
extern struct ref *df_bb_regno_first_def_find (struct df *, basic_block, unsigned int);
extern struct ref *df_bb_regno_last_def_find (struct df *, basic_block, unsigned int);
extern struct ref *df_find_def (struct df *, rtx, rtx);
extern int df_reg_used (struct df *, rtx, rtx);
extern void debug_df_insn (rtx);
extern void debug_df_regno (unsigned int);
extern void debug_df_reg (rtx);
extern void debug_df_defno (unsigned int);
extern void debug_df_useno (unsigned int);
extern void debug_df_ref (struct ref *);
extern void debug_df_chain (struct df_link *);
extern void df_insn_debug (struct df *, rtx, FILE *);
extern void df_insn_debug_regno (struct df *, rtx, FILE *);
enum df_confluence_op
  {
    DF_UNION,
    DF_INTERSECTION
  };
enum df_flow_dir
  {
    DF_FORWARD,
    DF_BACKWARD
  };
typedef void (*transfer_function) (int, int *, void *, void *,
       void *, void *, void *);
enum set_representation
{
  SR_SBITMAP,
  SR_BITMAP
};
struct dataflow
{
  enum set_representation repr;
  void **gen, **kill;
  void **in, **out;
  enum df_flow_dir dir;
  enum df_confluence_op conf_op;
  unsigned n_blocks;
  int *order;
  transfer_function transfun;
  void *data;
};
extern void iterative_dataflow (struct dataflow *);
extern unsigned char read_modify_subreg_p (rtx);
typedef struct ddg_node *ddg_node_ptr;
typedef struct ddg_edge *ddg_edge_ptr;
typedef struct ddg *ddg_ptr;
typedef struct ddg_scc *ddg_scc_ptr;
typedef struct ddg_all_sccs *ddg_all_sccs_ptr;
typedef enum {TRUE_DEP, OUTPUT_DEP, ANTI_DEP} dep_type;
typedef enum {REG_OR_MEM_DEP, REG_DEP, MEM_DEP, REG_AND_MEM_DEP}
      dep_data_type;
struct ddg_node
{
  int cuid;
  rtx insn;
  rtx first_note;
  ddg_edge_ptr in;
  ddg_edge_ptr out;
  sbitmap successors;
  sbitmap predecessors;
  union {
    int count;
    void *info;
  } aux;
};
struct ddg_edge
{
  ddg_node_ptr src;
  ddg_node_ptr dest;
  dep_type type;
  dep_data_type data_type;
  int latency;
  int distance;
  ddg_edge_ptr next_in;
  ddg_edge_ptr next_out;
  union {
    int count;
    void *info;
  } aux;
};
struct ddg
{
  basic_block bb;
  int num_nodes;
  int num_loads;
  int num_stores;
  ddg_node_ptr nodes;
  ddg_node_ptr closing_branch;
  int closing_branch_deps;
  ddg_edge_ptr *backarcs;
  int num_backarcs;
};
struct ddg_scc
{
  sbitmap nodes;
  ddg_edge_ptr *backarcs;
  int num_backarcs;
  int recurrence_length;
};
struct ddg_all_sccs
{
  ddg_scc_ptr *sccs;
  int num_sccs;
  ddg_ptr ddg;
};
ddg_ptr create_ddg (basic_block, struct df *, int closing_branch_deps);
void free_ddg (ddg_ptr);
void print_ddg (FILE *, ddg_ptr);
void vcg_print_ddg (FILE *, ddg_ptr);
void print_ddg_edge (FILE *, ddg_edge_ptr);
ddg_node_ptr get_node_of_insn (ddg_ptr, rtx);
void find_successors (sbitmap result, ddg_ptr, sbitmap);
void find_predecessors (sbitmap result, ddg_ptr, sbitmap);
ddg_all_sccs_ptr create_ddg_all_sccs (ddg_ptr);
void free_ddg_all_sccs (ddg_all_sccs_ptr);
int find_nodes_on_paths (sbitmap result, ddg_ptr, sbitmap from, sbitmap to);
int longest_simple_path (ddg_ptr, int from, int to, sbitmap via);
enum edge_flag {NOT_IN_SCC = 0, IN_SCC};
static void add_backarc_to_ddg (ddg_ptr, ddg_edge_ptr);
static void add_backarc_to_scc (ddg_scc_ptr, ddg_edge_ptr);
static void add_scc_to_ddg (ddg_all_sccs_ptr, ddg_scc_ptr);
static void create_ddg_dependence (ddg_ptr, ddg_node_ptr, ddg_node_ptr, rtx);
static void create_ddg_dep_no_link (ddg_ptr, ddg_node_ptr, ddg_node_ptr,
         dep_type, dep_data_type, int);
static ddg_edge_ptr create_ddg_edge (ddg_node_ptr, ddg_node_ptr, dep_type,
         dep_data_type, int, int);
static void add_edge_to_ddg (ddg_ptr g, ddg_edge_ptr);
static unsigned char mem_ref_p;
static int
mark_mem_use (rtx *x, void *data )
{
  if ((((enum rtx_code) (*x)->code) == MEM))
    mem_ref_p = 1;
  return 0;
}
static void
mark_mem_use_1 (rtx *x, void *data)
{
  for_each_rtx (x, mark_mem_use, data);
}
static unsigned char
mem_read_insn_p (rtx insn)
{
  mem_ref_p = 0;
  note_uses (&(((insn)->u.fld[5]).rtx1), mark_mem_use_1, ((void *)0));
  return mem_ref_p;
}
static void
mark_mem_store (rtx loc, rtx setter , void *data )
{
  if ((((enum rtx_code) (loc)->code) == MEM))
    mem_ref_p = 1;
}
static unsigned char
mem_write_insn_p (rtx insn)
{
  mem_ref_p = 0;
  note_stores ((((insn)->u.fld[5]).rtx1), mark_mem_store, ((void *)0));
  return mem_ref_p;
}
static unsigned char
rtx_mem_access_p (rtx x)
{
  int i, j;
  const char *fmt;
  enum rtx_code code;
  if (x == 0)
    return 0;
  if ((((enum rtx_code) (x)->code) == MEM))
    return 1;
  code = ((enum rtx_code) (x)->code);
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   if (rtx_mem_access_p ((((x)->u.fld[i]).rtx1)))
            return 1;
        }
      else if (fmt[i] == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   {
     if (rtx_mem_access_p ((((((x)->u.fld[i]).rtvec1))->elem[j])))
              return 1;
          }
    }
  return 0;
}
static unsigned char
mem_access_insn_p (rtx insn)
{
  return rtx_mem_access_p ((((insn)->u.fld[5]).rtx1));
}
static void
create_ddg_dependence (ddg_ptr g, ddg_node_ptr src_node,
         ddg_node_ptr dest_node, rtx link)
{
  ddg_edge_ptr e;
  int latency, distance = 0;
  int interloop = (src_node->cuid >= dest_node->cuid);
  dep_type t = TRUE_DEP;
  dep_data_type dt = (mem_access_insn_p (src_node->insn)
        && mem_access_insn_p (dest_node->insn) ? MEM_DEP
            : REG_DEP);
  if (interloop)
     distance = 1;
  if (!link)
    fancy_abort ("gcc.c", 436162, "?");
  if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEP_ANTI)
    t = ANTI_DEP;
  else if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEP_OUTPUT)
    t = OUTPUT_DEP;
  latency = insn_cost (src_node->insn, link, dest_node->insn);
  e = create_ddg_edge (src_node, dest_node, t, dt, latency, distance);
  if (interloop)
    {
      if (!(t == OUTPUT_DEP && src_node == dest_node)
   && !(t == ANTI_DEP && dt == REG_DEP))
 add_backarc_to_ddg (g, e);
      else
 free (e);
    }
  else
    add_edge_to_ddg (g, e);
}
static void
create_ddg_dep_no_link (ddg_ptr g, ddg_node_ptr from, ddg_node_ptr to,
   dep_type d_t, dep_data_type d_dt, int distance)
{
  ddg_edge_ptr e;
  int l;
  rtx link = alloc_INSN_LIST (to->insn, (rtx) 0);
  if (d_t == ANTI_DEP)
    ((link)->mode = ((enum machine_mode) (REG_DEP_ANTI)));
  else if (d_t == OUTPUT_DEP)
    ((link)->mode = ((enum machine_mode) (REG_DEP_OUTPUT)));
  l = insn_cost (from->insn, link, to->insn);
  free_INSN_LIST_node (link);
  e = create_ddg_edge (from, to, d_t, d_dt, l, distance);
  if (distance > 0)
    add_backarc_to_ddg (g, e);
  else
    add_edge_to_ddg (g, e);
}
static void
add_deps_for_def (ddg_ptr g, struct df *df, struct ref *rd)
{
  int regno = ((((((enum rtx_code) ((rd)->reg)->code) == SUBREG ? ((((rd)->reg)->u.fld[0]).rtx1) : ((rd)->reg)))->u.fld[0]).rtuint);
  struct bb_df_info *bb_info = (&df->bbs[(g->bb)->index]);
  struct df_link *r_use;
  int use_before_def = 0;
  rtx def_insn = ((rd)->insn);
  ddg_node_ptr src_node = get_node_of_insn (g, def_insn);
  for (r_use = ((rd)->chain); r_use != ((void *)0); r_use = r_use->next)
    {
      if (bitmap_bit_p (bb_info->ru_gen, r_use->ref->id))
 {
   rtx use_insn = ((r_use->ref)->insn);
   ddg_node_ptr dest_node = get_node_of_insn (g, use_insn);
   if (!src_node || !dest_node)
     fancy_abort ("gcc.c", 436238, "?");
   use_before_def = 1;
   create_ddg_dep_no_link (g, src_node, dest_node, TRUE_DEP,
      REG_DEP, 1);
 }
    }
  if (! use_before_def)
    {
      struct ref *def = df_bb_regno_first_def_find (df, g->bb, regno);
      int i;
      ddg_node_ptr dest_node;
      if (!def || rd->id == def->id)
 return;
      for (i = src_node->cuid + 1; i < g->num_nodes; i++)
  if (df_reg_used (df, g->nodes[i].insn, rd->reg))
    return;
      dest_node = get_node_of_insn (g, def->insn);
      create_ddg_dep_no_link (g, src_node, dest_node, OUTPUT_DEP, REG_DEP, 1);
    }
}
static void
add_deps_for_use (ddg_ptr g, struct df *df, struct ref *use)
{
  int i;
  int regno = ((((((enum rtx_code) ((use)->reg)->code) == SUBREG ? ((((use)->reg)->u.fld[0]).rtx1) : ((use)->reg)))->u.fld[0]).rtuint);
  struct ref *first_def = df_bb_regno_first_def_find (df, g->bb, regno);
  ddg_node_ptr use_node;
  ddg_node_ptr def_node;
  struct bb_df_info *bb_info;
  bb_info = (&df->bbs[(g->bb)->index]);
  if (!first_def)
    return;
  use_node = get_node_of_insn (g, use->insn);
  def_node = get_node_of_insn (g, first_def->insn);
  if (!use_node || !def_node)
    fancy_abort ("gcc.c", 436294, "?");
  for (i = use_node->cuid + 1; i < g->num_nodes; i++)
     if (df_find_def (df, g->nodes[i].insn, use->reg))
       return;
  if (! bitmap_bit_p (bb_info->rd_gen, first_def->id))
    create_ddg_dep_no_link (g, use_node, def_node, ANTI_DEP, REG_DEP, 1);
}
static void
build_inter_loop_deps (ddg_ptr g, struct df *df)
{
  int rd_num, u_num;
  struct bb_df_info *bb_info;
  bb_info = (&df->bbs[(g->bb)->index]);
  do { bitmap_element *ptr_ = (bb_info->rd_gen)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (rd_num) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct ref *rd = df->defs[rd_num]; add_deps_for_def (g, df, rd); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
  do { bitmap_element *ptr_ = (bb_info->ru_kill)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (u_num) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct ref *use = df->uses[u_num]; if ((((use->insn)->u.fld[3]).bb) == g->bb) add_deps_for_use (g, df,use); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
}
static void
add_inter_loop_mem_dep (ddg_ptr g, ddg_node_ptr from, ddg_node_ptr to)
{
  if (mem_write_insn_p (from->insn))
    {
      if (mem_read_insn_p (to->insn))
   create_ddg_dep_no_link (g, from, to, TRUE_DEP, MEM_DEP, 1);
      else if (from->cuid != to->cuid)
   create_ddg_dep_no_link (g, from, to, OUTPUT_DEP, MEM_DEP, 1);
    }
  else
    {
      if (mem_read_insn_p (to->insn))
 return;
      else if (from->cuid != to->cuid)
 {
     create_ddg_dep_no_link (g, from, to, ANTI_DEP, MEM_DEP, 1);
     create_ddg_dep_no_link (g, to, from, TRUE_DEP, MEM_DEP, 1);
 }
    }
}
static void
build_intra_loop_deps (ddg_ptr g)
{
  int i;
  struct deps tmp_deps;
  rtx head, tail, link;
  init_deps_global ();
  init_deps (&tmp_deps);
  get_block_head_tail (g->bb->index, &head, &tail);
  sched_analyze (&tmp_deps, head, tail);
  for (i = 0; i < g->num_nodes; i++)
    {
      ddg_node_ptr dest_node = &g->nodes[i];
      if (! ((((enum rtx_code) (dest_node->insn)->code) == INSN) || (((enum rtx_code) (dest_node->insn)->code) == JUMP_INSN) || (((enum rtx_code) (dest_node->insn)->code) == CALL_INSN)))
 continue;
      for (link = (((dest_node->insn)->u.fld[7]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
 {
   ddg_node_ptr src_node = get_node_of_insn (g, (((link)->u.fld[0]).rtx1));
   if (!src_node)
     continue;
         add_forward_dependence ((((link)->u.fld[0]).rtx1), dest_node->insn,
      ((enum reg_note) ((enum machine_mode) (link)->mode)));
   create_ddg_dependence (g, src_node, dest_node,
     (h_i_d[(((src_node->insn)->u.fld[0]).rtint)].depend));
 }
      if (mem_access_insn_p (dest_node->insn))
 {
   int j;
   for (j = 0; j <= i; j++)
     {
       ddg_node_ptr j_node = &g->nodes[j];
       if (mem_access_insn_p (j_node->insn))
          if (! ((dest_node->successors)->elms [(j) / ((unsigned) (8 * 4))] >> (j) % ((unsigned) (8 * 4)) & 1))
      add_inter_loop_mem_dep (g, dest_node, j_node);
            }
        }
    }
  finish_deps_global ();
  free_deps (&tmp_deps);
}
ddg_ptr
create_ddg (basic_block bb, struct df *df, int closing_branch_deps)
{
  ddg_ptr g;
  rtx insn, first_note;
  int i;
  int num_nodes = 0;
  g = (ddg_ptr) xcalloc (1, sizeof (struct ddg));
  g->bb = bb;
  g->closing_branch_deps = closing_branch_deps;
  for (insn = (bb)->head_; insn != ((((bb)->end_)->u.fld[2]).rtx1);
       insn = (((insn)->u.fld[2]).rtx1))
    {
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE)
 continue;
      if (mem_read_insn_p (insn))
 g->num_loads++;
      if (mem_write_insn_p (insn))
 g->num_stores++;
      num_nodes++;
    }
  if (num_nodes <= 1)
    {
      free (g);
      return ((void *)0);
    }
  g->num_nodes = num_nodes;
  g->nodes = (ddg_node_ptr) xcalloc (num_nodes, sizeof (struct ddg_node));
  g->closing_branch = ((void *)0);
  i = 0;
  first_note = (rtx) 0;
  for (insn = (bb)->head_; insn != ((((bb)->end_)->u.fld[2]).rtx1);
       insn = (((insn)->u.fld[2]).rtx1))
    {
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   if (! first_note && ((enum rtx_code) (insn)->code) == NOTE
       && (((insn)->u.fld[5]).rtint) != NOTE_INSN_BASIC_BLOCK)
     first_note = insn;
   continue;
 }
      if (((enum rtx_code) (insn)->code) == JUMP_INSN)
 {
   if (g->closing_branch)
     fancy_abort ("gcc.c", 436482, "?");
   else
     g->closing_branch = &g->nodes[i];
 }
      else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE)
 {
   if (! first_note)
     first_note = insn;
   continue;
 }
      g->nodes[i].cuid = i;
      g->nodes[i].successors = sbitmap_alloc (num_nodes);
      sbitmap_zero (g->nodes[i].successors);
      g->nodes[i].predecessors = sbitmap_alloc (num_nodes);
      sbitmap_zero (g->nodes[i].predecessors);
      g->nodes[i].first_note = (first_note ? first_note : insn);
      g->nodes[i++].insn = insn;
      first_note = (rtx) 0;
    }
  if (!g->closing_branch)
    fancy_abort ("gcc.c", 436504, "?");
  build_intra_loop_deps (g);
  build_inter_loop_deps (g, df);
  return g;
}
void
free_ddg (ddg_ptr g)
{
  int i;
  if (!g)
    return;
  for (i = 0; i < g->num_nodes; i++)
    {
      ddg_edge_ptr e = g->nodes[i].out;
      while (e)
 {
   ddg_edge_ptr next = e->next_out;
   free (e);
   e = next;
 }
      free(g->nodes[i].successors);
      free(g->nodes[i].predecessors);
    }
  if (g->num_backarcs > 0)
    free (g->backarcs);
  free (g->nodes);
  free (g);
}
void
print_ddg_edge (FILE *dump_file, ddg_edge_ptr e)
{
  char dep_c;
  switch (e->type) {
    case OUTPUT_DEP :
      dep_c = 'O';
      break;
    case ANTI_DEP :
      dep_c = 'A';
      break;
    default:
      dep_c = 'T';
  }
  fprintf (dump_file, " [%d -(%c,%d,%d)-> %d] ", (((e->src->insn)->u.fld[0]).rtint),
    dep_c, e->latency, e->distance, (((e->dest->insn)->u.fld[0]).rtint));
}
void
print_ddg (FILE *dump_file, ddg_ptr g)
{
  int i;
  for (i = 0; i < g->num_nodes; i++)
    {
      ddg_edge_ptr e;
      print_rtl_single (dump_file, g->nodes[i].insn);
      fprintf (dump_file, "OUT ARCS: ");
      for (e = g->nodes[i].out; e; e = e->next_out)
 print_ddg_edge (dump_file, e);
      fprintf (dump_file, "\nIN ARCS: ");
      for (e = g->nodes[i].in; e; e = e->next_in)
 print_ddg_edge (dump_file, e);
      fprintf (dump_file, "\n");
    }
}
void
vcg_print_ddg (FILE *dump_file, ddg_ptr g)
{
  int src_cuid;
  fprintf (dump_file, "graph: {\n");
  for (src_cuid = 0; src_cuid < g->num_nodes; src_cuid++)
    {
      ddg_edge_ptr e;
      int src_uid = (((g->nodes[src_cuid].insn)->u.fld[0]).rtint);
      fprintf (dump_file, "node: {title: \"%d_%d\" info1: \"", src_cuid, src_uid);
      print_rtl_single (dump_file, g->nodes[src_cuid].insn);
      fprintf (dump_file, "\"}\n");
      for (e = g->nodes[src_cuid].out; e; e = e->next_out)
 {
   int dst_uid = (((e->dest->insn)->u.fld[0]).rtint);
   int dst_cuid = e->dest->cuid;
   if (e->distance > 0)
     fprintf (dump_file, "backedge: {color: red ");
   else
     fprintf (dump_file, "edge: { ");
   fprintf (dump_file, "sourcename: \"%d_%d\"", src_cuid, src_uid);
   fprintf (dump_file, "targetname: \"%d_%d\"", dst_cuid, dst_uid);
   fprintf (dump_file, "label: \"%d_%d\"}\n", e->latency, e->distance);
 }
    }
  fprintf (dump_file, "}\n");
}
static ddg_edge_ptr
create_ddg_edge (ddg_node_ptr src, ddg_node_ptr dest,
   dep_type t, dep_data_type dt, int l, int d)
{
  ddg_edge_ptr e = (ddg_edge_ptr) xmalloc (sizeof (struct ddg_edge));
  e->src = src;
  e->dest = dest;
  e->type = t;
  e->data_type = dt;
  e->latency = l;
  e->distance = d;
  e->next_in = e->next_out = ((void *)0);
  e->aux.info = 0;
  return e;
}
static void
add_edge_to_ddg (ddg_ptr g , ddg_edge_ptr e)
{
  ddg_node_ptr src = e->src;
  ddg_node_ptr dest = e->dest;
  if (!src->successors || !dest->predecessors)
    fancy_abort ("gcc.c", 436644, "?");
  ((src->successors)->elms [(dest->cuid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (dest->cuid) % ((unsigned) (8 * 4)));
  ((dest->predecessors)->elms [(src->cuid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (src->cuid) % ((unsigned) (8 * 4)));
  e->next_in = dest->in;
  dest->in = e;
  e->next_out = src->out;
  src->out = e;
}
static void
set_recurrence_length (ddg_scc_ptr scc, ddg_ptr g)
{
  int j;
  int result = -1;
  for (j = 0; j < scc->num_backarcs; j++)
    {
      ddg_edge_ptr backarc = scc->backarcs[j];
      int length;
      int distance = backarc->distance;
      ddg_node_ptr src = backarc->dest;
      ddg_node_ptr dest = backarc->src;
      length = longest_simple_path (g, src->cuid, dest->cuid, scc->nodes);
      if (length < 0 )
 {
   continue;
 }
      length += backarc->latency;
      result = ((result) > ((length / distance)) ? (result) : ((length / distance)));
    }
  scc->recurrence_length = result;
}
static ddg_scc_ptr
create_scc (ddg_ptr g, sbitmap nodes)
{
  ddg_scc_ptr scc;
  int u;
  scc = (ddg_scc_ptr) xmalloc (sizeof (struct ddg_scc));
  scc->backarcs = ((void *)0);
  scc->num_backarcs = 0;
  scc->nodes = sbitmap_alloc (g->num_nodes);
  sbitmap_copy (scc->nodes, nodes);
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (nodes)->size; unsigned long *ptr_ = (nodes)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (u) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { ddg_edge_ptr e; ddg_node_ptr n = &g->nodes[u]; for (e = n->out; e; e = e->next_out) if (((nodes)->elms [(e->dest->cuid) / ((unsigned) (8 * 4))] >> (e->dest->cuid) % ((unsigned) (8 * 4)) & 1)) { e->aux.count = IN_SCC; if (e->distance > 0) add_backarc_to_scc (scc, e); } }; if (word_ == 0) break; } } } } while (0)
      ;
  set_recurrence_length (scc, g);
  return scc;
}
static void
free_scc (ddg_scc_ptr scc)
{
  if (!scc)
    return;
  free(scc->nodes);
  if (scc->num_backarcs > 0)
    free (scc->backarcs);
  free (scc);
}
static void
add_backarc_to_ddg (ddg_ptr g, ddg_edge_ptr e)
{
  int size = (g->num_backarcs + 1) * sizeof (ddg_edge_ptr);
  add_edge_to_ddg (g, e);
  g->backarcs = (ddg_edge_ptr *) xrealloc (g->backarcs, size);
  g->backarcs[g->num_backarcs++] = e;
}
static void
add_backarc_to_scc (ddg_scc_ptr scc, ddg_edge_ptr e)
{
  int size = (scc->num_backarcs + 1) * sizeof (ddg_edge_ptr);
  scc->backarcs = (ddg_edge_ptr *) xrealloc (scc->backarcs, size);
  scc->backarcs[scc->num_backarcs++] = e;
}
static void
add_scc_to_ddg (ddg_all_sccs_ptr g, ddg_scc_ptr scc)
{
  int size = (g->num_sccs + 1) * sizeof (ddg_scc_ptr);
  g->sccs = (ddg_scc_ptr *) xrealloc (g->sccs, size);
  g->sccs[g->num_sccs++] = scc;
}
ddg_node_ptr
get_node_of_insn (ddg_ptr g, rtx insn)
{
  int i;
  for (i = 0; i < g->num_nodes; i++)
    if (insn == g->nodes[i].insn)
      return &g->nodes[i];
  return ((void *)0);
}
void
find_successors (sbitmap succ, ddg_ptr g, sbitmap ops)
{
  int i;
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (ops)->size; unsigned long *ptr_ = (ops)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (i) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { const sbitmap node_succ = ((&g->nodes[i])->successors); sbitmap_a_or_b (succ, succ, node_succ); }; if (word_ == 0) break; } } } } while (0)
      ;
  sbitmap_difference (succ, succ, ops);
}
void
find_predecessors (sbitmap preds, ddg_ptr g, sbitmap ops)
{
  int i;
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (ops)->size; unsigned long *ptr_ = (ops)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (i) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { const sbitmap node_preds = ((&g->nodes[i])->predecessors); sbitmap_a_or_b (preds, preds, node_preds); }; if (word_ == 0) break; } } } } while (0)
      ;
  sbitmap_difference (preds, preds, ops);
}
static int
compare_sccs (const void *s1, const void *s2)
{
  int rec_l1 = (*(ddg_scc_ptr *)s1)->recurrence_length;
  int rec_l2 = (*(ddg_scc_ptr *)s2)->recurrence_length;
  return ((rec_l2 > rec_l1) - (rec_l2 < rec_l1));
}
static void
order_sccs (ddg_all_sccs_ptr g)
{
  qsort (g->sccs, g->num_sccs, sizeof (ddg_scc_ptr),
  (int (*) (const void *, const void *)) compare_sccs);
}
ddg_all_sccs_ptr
create_ddg_all_sccs (ddg_ptr g)
{
  int i;
  int num_nodes = g->num_nodes;
  sbitmap from = sbitmap_alloc (num_nodes);
  sbitmap to = sbitmap_alloc (num_nodes);
  sbitmap scc_nodes = sbitmap_alloc (num_nodes);
  ddg_all_sccs_ptr sccs = (ddg_all_sccs_ptr)
     xmalloc (sizeof (struct ddg_all_sccs));
  sccs->ddg = g;
  sccs->sccs = ((void *)0);
  sccs->num_sccs = 0;
  for (i = 0; i < g->num_backarcs; i++)
    {
      ddg_scc_ptr scc;
      ddg_edge_ptr backarc = g->backarcs[i];
      ddg_node_ptr src = backarc->src;
      ddg_node_ptr dest = backarc->dest;
      if (backarc->aux.count == IN_SCC)
 continue;
      sbitmap_zero (from);
      sbitmap_zero (to);
      ((from)->elms [(dest->cuid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (dest->cuid) % ((unsigned) (8 * 4)));
      ((to)->elms [(src->cuid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (src->cuid) % ((unsigned) (8 * 4)));
      if (find_nodes_on_paths (scc_nodes, g, from, to))
 {
   scc = create_scc (g, scc_nodes);
   add_scc_to_ddg (sccs, scc);
 }
    }
  order_sccs (sccs);
  free(from);
  free(to);
  free(scc_nodes);
  return sccs;
}
void
free_ddg_all_sccs (ddg_all_sccs_ptr all_sccs)
{
  int i;
  if (!all_sccs)
    return;
  for (i = 0; i < all_sccs->num_sccs; i++)
    free_scc (all_sccs->sccs[i]);
  free (all_sccs);
}
int
find_nodes_on_paths (sbitmap result, ddg_ptr g, sbitmap from, sbitmap to)
{
  int answer;
  int change, u;
  int num_nodes = g->num_nodes;
  sbitmap workset = sbitmap_alloc (num_nodes);
  sbitmap reachable_from = sbitmap_alloc (num_nodes);
  sbitmap reach_to = sbitmap_alloc (num_nodes);
  sbitmap tmp = sbitmap_alloc (num_nodes);
  sbitmap_copy (reachable_from, from);
  sbitmap_copy (tmp, from);
  change = 1;
  while (change)
    {
      change = 0;
      sbitmap_copy (workset, tmp);
      sbitmap_zero (tmp);
      do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (workset)->size; unsigned long *ptr_ = (workset)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (u) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { ddg_edge_ptr e; ddg_node_ptr u_node = &g->nodes[u]; for (e = u_node->out; e != (ddg_edge_ptr) 0; e = e->next_out) { ddg_node_ptr v_node = e->dest; int v = v_node->cuid; if (!((reachable_from)->elms [(v) / ((unsigned) (8 * 4))] >> (v) % ((unsigned) (8 * 4)) & 1)) { ((reachable_from)->elms [(v) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (v) % ((unsigned) (8 * 4))); ((tmp)->elms [(v) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (v) % ((unsigned) (8 * 4))); change = 1; } } }; if (word_ == 0) break; } } } } while (0)
   ;
    }
  sbitmap_copy (reach_to, to);
  sbitmap_copy (tmp, to);
  change = 1;
  while (change)
    {
      change = 0;
      sbitmap_copy (workset, tmp);
      sbitmap_zero (tmp);
      do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (workset)->size; unsigned long *ptr_ = (workset)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (u) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { ddg_edge_ptr e; ddg_node_ptr u_node = &g->nodes[u]; for (e = u_node->in; e != (ddg_edge_ptr) 0; e = e->next_in) { ddg_node_ptr v_node = e->src; int v = v_node->cuid; if (!((reach_to)->elms [(v) / ((unsigned) (8 * 4))] >> (v) % ((unsigned) (8 * 4)) & 1)) { ((reach_to)->elms [(v) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (v) % ((unsigned) (8 * 4))); ((tmp)->elms [(v) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (v) % ((unsigned) (8 * 4))); change = 1; } } }; if (word_ == 0) break; } } } } while (0)
   ;
    }
  answer = sbitmap_a_and_b_cg (result, reachable_from, reach_to);
  free(workset);
  free(reachable_from);
  free(reach_to);
  free(tmp);
  return answer;
}
static int
update_dist_to_successors (ddg_node_ptr u_node, sbitmap nodes, sbitmap tmp)
{
  ddg_edge_ptr e;
  int result = 0;
  for (e = u_node->out; e; e = e->next_out)
    {
      ddg_node_ptr v_node = e->dest;
      int v = v_node->cuid;
      if (((nodes)->elms [(v) / ((unsigned) (8 * 4))] >> (v) % ((unsigned) (8 * 4)) & 1)
   && (e->distance == 0)
   && (v_node->aux.count < u_node->aux.count + e->latency))
 {
   v_node->aux.count = u_node->aux.count + e->latency;
   ((tmp)->elms [(v) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (v) % ((unsigned) (8 * 4)));
   result = 1;
 }
    }
  return result;
}
int
longest_simple_path (struct ddg * g, int src, int dest, sbitmap nodes)
{
  int i, u;
  int change = 1;
  int result;
  int num_nodes = g->num_nodes;
  sbitmap workset = sbitmap_alloc (num_nodes);
  sbitmap tmp = sbitmap_alloc (num_nodes);
  for (i = 0; i < g->num_nodes; i++)
    g->nodes[i].aux.count = -1;
  g->nodes[src].aux.count = 0;
  sbitmap_zero (tmp);
  ((tmp)->elms [(src) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (src) % ((unsigned) (8 * 4)));
  while (change)
    {
      change = 0;
      sbitmap_copy (workset, tmp);
      sbitmap_zero (tmp);
      do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (workset)->size; unsigned long *ptr_ = (workset)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (u) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { ddg_node_ptr u_node = &g->nodes[u]; change |= update_dist_to_successors (u_node, nodes, tmp); }; if (word_ == 0) break; } } } } while (0)
   ;
    }
  result = g->nodes[dest].aux.count;
  free(workset);
  free(tmp);
  return result;
}
static unsigned char
should_duplicate_loop_header_p (basic_block header, struct loop *loop,
    int *limit)
{
  block_stmt_iterator bsi;
  tree last;
  if (header1->aux)
    return 0;
  if (!header1->succ)
    fancy_abort ("gcc.c", 437084, "?");
  if (!header1->succ->succ_next)
    return 0;
  if (header1->succ->succ_next->succ_next)
    return 0;
  if (flow_bb_inside_loop_p (loop, header1->succ->dest)
      && flow_bb_inside_loop_p (loop, header1->succ->succ_next->dest))
    return 0;
  if (header1 != loop->header1
      && header1->pred->pred_next)
    return 0;
  last = last_stmt (header1);
  if (((enum tree_code) (last)->common.code) != COND_EXPR)
    return 0;
  for (bsi = bsi_start (header1); !bsi_end_p (bsi); bsi_next (&bsi))
    {
      last = bsi_stmt (bsi);
      if (((enum tree_code) (last)->common.code) == LABEL_EXPR)
 continue;
      if (get_call_expr_in (last))
 return 0;
      *limit -= estimate_num_insns (last);
      if (*limit < 0)
 return 0;
    }
  return 1;
}
static void
mark_defs_for_rewrite (basic_block bb)
{
  tree stmt, var;
  block_stmt_iterator bsi;
  stmt_ann_t ann;
  def_optype defs;
  v_may_def_optype v_may_defs;
  v_must_def_optype v_must_defs;
  unsigned i;
  for (stmt = phi_nodes (bb); stmt; stmt = ((stmt)->common.chain))
    {
      var = get_def_from_ptr (get_phi_result_ptr (stmt));
      bitmap_set_bit (vars_to_rename, (var)->ssa_name.version);
    }
  for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
    {
      stmt = bsi_stmt (bsi);
      get_stmt_operands (stmt);
      ann = stmt_ann (stmt);
      defs = get_def_ops (ann);
      for (i = 0; i < ((defs) ? (defs)->num_defs : 0); i++)
 {
   var = (get_def_from_ptr (get_def_op_ptr (((defs)), ((i)))));
   bitmap_set_bit (vars_to_rename, (var)->ssa_name.version);
 }
      v_may_defs = get_v_may_def_ops (ann);
      for (i = 0; i < ((v_may_defs) ? (v_may_defs)->num_v_may_defs : 0); i++)
 {
   var = (get_def_from_ptr (get_v_may_def_result_ptr (((v_may_defs)), ((i)))));
   bitmap_set_bit (vars_to_rename, (var)->ssa_name.version);
 }
      v_must_defs = get_v_must_def_ops (ann);
      for (i = 0; i < ((v_must_defs) ? (v_must_defs)->num_v_must_defs : 0); i++)
 {
   var = (get_def_from_ptr (get_v_must_def_op_ptr (((v_must_defs)), ((i)))));
   bitmap_set_bit (vars_to_rename, (var)->ssa_name.version);
 }
    }
}
static void
duplicate_blocks (varray_type bbs_to_duplicate)
{
  unsigned i;
  edge preheader_edge, e, e1;
  basic_block header1, new_header;
  tree phi, new_phi, var;
  free_dominance_info (CDI_DOMINATORS);
  for (i = 0; i < ((bbs_to_duplicate)->elements_used); i++)
    {
      preheader_edge = ((bbs_to_duplicate)->data.generic_nogc[i]);
      header1 = preheader_edge->dest;
      mark_defs_for_rewrite (header1);
    }
  for (i = 0; i < ((bbs_to_duplicate)->elements_used); i++)
    {
      preheader_edge = ((bbs_to_duplicate)->data.generic_nogc[i]);
      header1 = preheader_edge->dest;
      if (!header1->aux)
 fancy_abort ("gcc.c", 437203, "?");
      header1->aux = ((void *)0);
      new_header = duplicate_block (header1, preheader_edge);
      for (phi = phi_nodes (header1), var = ((preheader_edge)->insns.t);
    phi;
    phi = ((phi)->common.chain), var = ((var)->common.chain))
 {
   new_phi = create_phi_node (get_def_from_ptr (get_phi_result_ptr (phi)), new_header);
   add_phi_arg (&new_phi, ((var)->list.value1), preheader_edge);
 }
      ((preheader_edge)->insns.t) = ((void *)0);
      for (e = header1->succ; e; e = e->succ_next)
 {
   for (e1 = new_header1->succ; e1->dest != e->dest; e1 = e1->succ_next)
     continue;
   for (phi = phi_nodes (e->dest); phi; phi = ((phi)->common.chain))
     {
       tree def = get_use_from_ptr (get_phi_arg_def_ptr ((((phi))), ((phi_arg_from_edge ((phi),(e))))));
       add_phi_arg (&phi, def, e1);
     }
 }
    }
  calculate_dominance_info (CDI_DOMINATORS);
  rewrite_ssa_into_ssa (vars_to_rename);
  bitmap_clear (vars_to_rename);
}
static unsigned char
do_while_loop_p (struct loop *loop)
{
  tree stmt = last_stmt (loop->latch);
  if (stmt
      && ((enum tree_code) (stmt)->common.code) != LABEL_EXPR)
    return 0;
  stmt = last_and_only_stmt (loop->header1);
  if (stmt
      && ((enum tree_code) (stmt)->common.code) == COND_EXPR)
    return 0;
  return 1;
}
static void
copy_loop_headers (void)
{
  struct loops *loops;
  unsigned i;
  struct loop *loop;
  basic_block header1;
  edge preheader_edge;
  varray_type bbs_to_duplicate = ((void *)0);
  loops = loop_optimizer_init (dump_file);
  if (!loops)
    return;
  loops->state &= ~LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS;
  for (i = 1; i < loops->num; i++)
    {
      int limit = 20;
      loop = loops->parray[i];
      preheader_edge = loop_preheader_edge (loop);
      header1 = preheader_edge->dest;
      if (do_while_loop_p (loop))
 continue;
      while (should_duplicate_loop_header_p (header1, loop, &limit))
 {
   if (!bbs_to_duplicate)
     bbs_to_duplicate = varray_init (10, VARRAY_DATA_GENERIC_NOGC, "bbs_to_duplicate")
                          ;
   do { if ((bbs_to_duplicate)->elements_used >= (bbs_to_duplicate)->num_elements) (((bbs_to_duplicate)) = varray_grow ((bbs_to_duplicate), 2 * (bbs_to_duplicate)->num_elements)); (bbs_to_duplicate)->data.generic_nogc[(bbs_to_duplicate)->elements_used++] = (preheader_edge); } while (0);
   header1->aux = &header1->aux;
   if (dump_file && (dump_flags & (1 << 3)))
     fprintf (dump_file,
       "Scheduled basic block %d for duplication.\n",
       header1->index);
   if (flow_bb_inside_loop_p (loop, header1->succ->dest))
     preheader_edge = header1->succ;
   else
     preheader_edge = header1->succ->succ_next;
   header1 = preheader_edge->dest;
 }
    }
  loop_optimizer_finalize (loops, ((void *)0));
  if (bbs_to_duplicate)
    {
      duplicate_blocks (bbs_to_duplicate);
      do { if (bbs_to_duplicate) { free (bbs_to_duplicate); bbs_to_duplicate = (varray_type) 0; } } while (0);
    }
  cleanup_tree_cfg ();
}
static unsigned char
gate_ch (void)
{
  return flag_tree_ch != 0;
}
struct tree_opt_pass pass_ch =
{
  "ch",
  gate_ch,
  copy_loop_headers,
  ((void *)0),
  ((void *)0),
  0,
  TV_TREE_CH,
  (1 << 3) | (1 << 6),
  0,
  0,
  0,
  ((1 << 0)
   | (1 << 3))
};
struct loop_data
{
  struct loop *outermost_exit;
  unsigned char has_call;
};
struct use
{
  rtx *pos;
  rtx insn;
  struct use *next;
};
struct def
{
  struct use *uses;
  unsigned n_uses;
  unsigned invno;
};
struct invariant
{
  unsigned invno;
  unsigned char processed;
  struct def *def;
  rtx insn;
  unsigned char always_executed;
  unsigned char move;
  unsigned cost;
  bitmap depends_on;
  unsigned stamp;
};
static unsigned actual_stamp;
static varray_type invariants;
static unsigned char
check_maybe_invariant (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  int i, j;
  const char *fmt;
  switch (code)
    {
    case CONST_INT:
    case CONST_DOUBLE:
    case SYMBOL_REF:
    case CONST:
    case LABEL_REF:
      return 1;
    case PC:
    case CC0:
    case UNSPEC_VOLATILE:
    case CALL:
      return 0;
    case REG:
      return 1;
    case MEM:
      if ((((x))->unchanging))
 break;
      return 0;
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 0;
      break;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   if (!check_maybe_invariant ((((x)->u.fld[i]).rtx1)))
     return 0;
 }
      else if (fmt[i] == 'E')
 {
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     if (!check_maybe_invariant ((((((x)->u.fld[i]).rtvec1))->elem[j])))
       return 0;
 }
    }
  return 1;
}
static void
compute_always_reached (struct loop *loop, basic_block *body,
   bitmap may_exit, bitmap always_reached)
{
  unsigned i;
  for (i = 0; i < loop->num_nodes; i++)
    {
      if (dominated_by_p (CDI_DOMINATORS, loop->latch, body[i]))
 bitmap_set_bit (always_reached, i);
      if (bitmap_bit_p (may_exit, i))
 return;
    }
}
static void
find_exits (struct loop *loop, basic_block *body,
     bitmap may_exit, bitmap has_exit)
{
  unsigned i;
  edge e;
  struct loop *outermost_exit = loop, *aexit;
  unsigned char has_call = 0;
  rtx insn;
  for (i = 0; i < loop->num_nodes; i++)
    {
      if (body[i]->loop_father == loop)
 {
   for ((insn) = (body[i])->head_; (insn) != ((((body[i])->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1))
     {
       if (((enum rtx_code) (insn)->code) == CALL_INSN
    && !(((insn))->unchanging))
  {
    has_call = 1;
    bitmap_set_bit (may_exit, i);
    break;
  }
     }
   for (e = body[i]->succ; e; e = e->succ_next)
     {
       if (flow_bb_inside_loop_p (loop, e->dest))
  continue;
       bitmap_set_bit (may_exit, i);
       bitmap_set_bit (has_exit, i);
       outermost_exit = find_common_loop (outermost_exit,
       e->dest->loop_father);
     }
   continue;
 }
      if (body[i]->loop_father->header1 != body[i])
 continue;
      if (((struct loop_data *) (body[i]->loop_father)->aux)->has_call)
 {
   has_call = 1;
   bitmap_set_bit (may_exit, i);
 }
      aexit = ((struct loop_data *) (body[i]->loop_father)->aux)->outermost_exit;
      if (aexit != loop)
 {
   bitmap_set_bit (may_exit, i);
   bitmap_set_bit (has_exit, i);
   if (flow_loop_nested_p (aexit, outermost_exit))
     outermost_exit = aexit;
 }
    }
  loop->aux = xcalloc (1, sizeof (struct loop_data));
  ((struct loop_data *) (loop)->aux)->outermost_exit = outermost_exit;
  ((struct loop_data *) (loop)->aux)->has_call = has_call;
}
static unsigned char
may_assign_reg_p (rtx x)
{
  return can_copy_p (((enum machine_mode) (x)->mode));
}
static void
find_defs (struct loop *loop, basic_block *body, struct df *df)
{
  unsigned i;
  bitmap blocks = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (i = 0; i < loop->num_nodes; i++)
    bitmap_set_bit (blocks, body[i]->index);
  df_analyze_subcfg (df, blocks, 16 | 1024 | 2048);
  do { if (blocks) { bitmap_clear (blocks); free (blocks); (blocks) = 0; } } while (0);
}
static void
create_new_invariant (struct def *def, rtx insn, bitmap depends_on,
        unsigned char always_executed)
{
  struct invariant *inv = xmalloc (sizeof (struct invariant));
  rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  inv->def = def;
  inv->always_executed = always_executed;
  inv->depends_on = depends_on;
  if (def)
    inv->cost = rtx_cost (set, SET);
  else
    inv->cost = rtx_cost ((((set)->u.fld[1]).rtx1), SET);
  inv->move = 0;
  inv->processed = 0;
  inv->stamp = 0;
  inv->insn = insn;
  inv->invno = ((invariants)->elements_used);
  if (def)
    def->invno = inv->invno;
  do { if ((invariants)->elements_used >= (invariants)->num_elements) (((invariants)) = varray_grow ((invariants), 2 * (invariants)->num_elements)); (invariants)->data.generic_nogc[(invariants)->elements_used++] = (inv); } while (0);
  if (dump_file)
    {
      fprintf (dump_file,
        "Set in insn %d is invariant (%d), cost %d, depends on ",
        (((insn)->u.fld[0]).rtint), inv->invno, inv->cost);
      bitmap_print (dump_file, inv->depends_on, "", "\n");
    }
}
static void
record_use (struct def *def, rtx *use, rtx insn)
{
  struct use *u = xmalloc (sizeof (struct use));
  if (((enum rtx_code) (*use)->code) == SUBREG)
    use = &(((*use)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (*use)->code) == REG))
    fancy_abort ("gcc.c", 437714, "?");
  u->pos = use;
  u->insn = insn;
  u->next = def->uses;
  def->uses = u;
  def->n_uses++;
}
static unsigned char
check_dependencies (rtx insn, struct df *df, bitmap depends_on)
{
  struct df_link *uses, *defs;
  struct ref *use, *def;
  basic_block bb = (((insn)->u.fld[3]).bb), def_bb;
  struct def *def_data;
  for (uses = ((df)->insns[(((insn)->u.fld[0]).rtint)].uses); uses; uses = uses->next)
    {
      use = uses->ref;
      defs = ((use)->chain);
      if (!defs)
 continue;
      if (defs->next)
 return 0;
      def = defs->ref;
      def_data = ((def)->data);
      if (!def_data)
 return 0;
      def_bb = (((((def)->insn)->u.fld[3]).bb));
      if (!dominated_by_p (CDI_DOMINATORS, bb, def_bb))
 return 0;
      bitmap_set_bit (depends_on, def_data->invno);
    }
  return 1;
}
static void
find_invariant_insn (rtx insn, unsigned char always_reached, unsigned char always_executed,
       struct df *df)
{
  struct ref *ref;
  struct def *def;
  bitmap depends_on;
  rtx set, dest;
  unsigned char simple = 1;
  if (find_reg_note (insn, REG_RETVAL, (rtx) 0)
      || find_reg_note (insn, REG_LIBCALL, (rtx) 0)
      || find_reg_note (insn, REG_NO_CONFLICT, (rtx) 0))
    return;
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (!set)
    return;
  dest = (((set)->u.fld[0]).rtx1);
  if (((enum rtx_code) (dest)->code) != REG
      || ((((((dest)->u.fld[0]).rtuint)) < 53)))
    simple = 0;
  if (!check_maybe_invariant ((((set)->u.fld[1]).rtx1))
      || !may_assign_reg_p ((((set)->u.fld[0]).rtx1)))
    return;
  if (may_trap_p ((((insn)->u.fld[5]).rtx1)))
    {
      if (!always_reached)
 return;
      if (flag_non_call_exceptions)
 return;
    }
  depends_on = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  if (!check_dependencies (insn, df, depends_on))
    {
      do { if (depends_on) { bitmap_clear (depends_on); free (depends_on); (depends_on) = 0; } } while (0);
      return;
    }
  if (simple)
    {
      ref = df_find_def (df, insn, dest);
      def = xcalloc (1, sizeof (struct def));
      ((ref)->data) = def;
    }
  else
    def = ((void *)0);
  create_new_invariant (def, insn, depends_on, always_executed);
}
static void
record_uses (rtx insn, struct df *df)
{
  struct df_link *uses, *defs;
  struct ref *use, *def;
  basic_block bb = (((insn)->u.fld[3]).bb), def_bb;
  for (uses = ((df)->insns[(((insn)->u.fld[0]).rtint)].uses); uses; uses = uses->next)
    {
      use = uses->ref;
      defs = ((use)->chain);
      if (!defs || defs->next)
 continue;
      def = defs->ref;
      if (!((def)->data))
 continue;
      def_bb = (((((def)->insn)->u.fld[3]).bb));
      if (!dominated_by_p (CDI_DOMINATORS, bb, def_bb))
 continue;
      record_use (((def)->data), ((use)->loc), ((use)->insn));
    }
}
static void
find_invariants_insn (rtx insn, unsigned char always_reached, unsigned char always_executed,
        struct df *df)
{
  find_invariant_insn (insn, always_reached, always_executed, df);
  record_uses (insn, df);
}
static void
find_invariants_bb (basic_block bb, unsigned char always_reached, unsigned char always_executed,
      struct df *df)
{
  rtx insn;
  for ((insn) = (bb)->head_; (insn) != ((((bb)->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1))
    {
      if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      find_invariants_insn (insn, always_reached, always_executed, df);
      if (always_reached
   && ((enum rtx_code) (insn)->code) == CALL_INSN
   && !(((insn))->unchanging))
 always_reached = 0;
    }
}
static void
find_invariants_body (struct loop *loop, basic_block *body,
        bitmap always_reached, bitmap always_executed,
        struct df *df)
{
  unsigned i;
  for (i = 0; i < loop->num_nodes; i++)
    find_invariants_bb (body[i],
   bitmap_bit_p (always_reached, i),
   bitmap_bit_p (always_executed, i),
   df);
}
static void
find_invariants (struct loop *loop, struct df *df)
{
  bitmap may_exit = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  bitmap always_reached = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  bitmap has_exit = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  bitmap always_executed = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  basic_block *body = get_loop_body_in_dom_order (loop);
  find_exits (loop, body, may_exit, has_exit);
  compute_always_reached (loop, body, may_exit, always_reached);
  compute_always_reached (loop, body, has_exit, always_executed);
  find_defs (loop, body, df);
  find_invariants_body (loop, body, always_reached, always_executed, df);
  do { if (always_reached) { bitmap_clear (always_reached); free (always_reached); (always_reached) = 0; } } while (0);
  do { if (always_executed) { bitmap_clear (always_executed); free (always_executed); (always_executed) = 0; } } while (0);
  do { if (may_exit) { bitmap_clear (may_exit); free (may_exit); (may_exit) = 0; } } while (0);
  do { if (has_exit) { bitmap_clear (has_exit); free (has_exit); (has_exit) = 0; } } while (0);
  free (body);
}
static void
free_use_list (struct use *use)
{
  struct use *next;
  for (; use; use = next)
    {
      next = use->next;
      free (use);
    }
}
static void
get_inv_cost (struct invariant *inv, int *comp_cost, unsigned *regs_needed)
{
  int acomp_cost;
  unsigned aregs_needed;
  unsigned depno;
  struct invariant *dep;
  *comp_cost = 0;
  *regs_needed = 0;
  if (inv->move
      || inv->stamp == actual_stamp)
    return;
  inv->stamp = actual_stamp;
  (*regs_needed)++;
  (*comp_cost) += inv->cost;
  do { bitmap_element *ptr_ = (inv->depends_on)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (depno) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { dep = ((invariants)->data.generic_nogc[depno]); get_inv_cost (dep, &acomp_cost, &aregs_needed); if (aregs_needed && dep->always_executed && !dep->def->uses->next) { aregs_needed--; } (*regs_needed) += aregs_needed; (*comp_cost) += acomp_cost; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
}
static int
gain_for_invariant (struct invariant *inv, unsigned *regs_needed,
      unsigned new_regs, unsigned regs_used, unsigned n_inv_uses)
{
  int comp_cost, size_cost;
  get_inv_cost (inv, &comp_cost, regs_needed);
  actual_stamp++;
  size_cost = (global_cost_for_size (new_regs + *regs_needed,
         regs_used, n_inv_uses)
        - global_cost_for_size (new_regs, regs_used, n_inv_uses));
  return comp_cost - size_cost;
}
static int
best_gain_for_invariant (struct invariant **best, unsigned *regs_needed,
    unsigned new_regs, unsigned regs_used,
    unsigned n_inv_uses)
{
  struct invariant *inv;
  int gain = 0, again;
  unsigned aregs_needed, invno;
  for (invno = 0; invno < ((invariants)->elements_used); invno++)
    {
      inv = ((invariants)->data.generic_nogc[invno]);
      if (inv->move)
 continue;
      again = gain_for_invariant (inv, &aregs_needed,
      new_regs, regs_used, n_inv_uses);
      if (again > gain)
 {
   gain = again;
   *best = inv;
   *regs_needed = aregs_needed;
 }
    }
  return gain;
}
static void
set_move_mark (unsigned invno)
{
  struct invariant *inv = ((invariants)->data.generic_nogc[invno]);
  if (inv->move)
    return;
  inv->move = 1;
  if (dump_file)
    fprintf (dump_file, "Decided to move invariant %d\n", invno);
  do { bitmap_element *ptr_ = (inv->depends_on)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (invno) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); set_move_mark (invno); if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0);
}
static void
find_invariants_to_move (struct df *df)
{
  unsigned i, regs_used, n_inv_uses, regs_needed = 0, new_regs;
  struct invariant *inv = ((void *)0);
  if (flag_move_all_movables)
    {
      for (i = 0; i < ((invariants)->elements_used); i++)
 {
   inv = ((invariants)->data.generic_nogc[i]);
   inv->move = 1;
 }
      return;
    }
  if (!((invariants)->elements_used))
    return;
  n_inv_uses = 0;
  regs_used = 2;
  for (i = 0; i < df->n_regs; i++)
    {
      if (!((df)->regs[i].defs ? (df)->regs[i].defs->ref : 0) && ((df)->regs[i].uses ? (df)->regs[i].uses->ref : 0))
 {
   regs_used++;
 }
    }
  for (i = 0; i < ((invariants)->elements_used); i++)
    {
      inv = ((invariants)->data.generic_nogc[i]);
      if (inv->def)
 n_inv_uses += inv->def->n_uses;
    }
  new_regs = 0;
  while (best_gain_for_invariant (&inv, &regs_needed,
      new_regs, regs_used, n_inv_uses) > 0)
    {
      set_move_mark (inv->invno);
      new_regs += regs_needed;
    }
}
static void
move_invariant_reg (struct loop *loop, unsigned invno, struct df *df)
{
  struct invariant *inv = ((invariants)->data.generic_nogc[invno]);
  unsigned i;
  basic_block preheader = loop_preheader_edge (loop)->src;
  rtx reg, set;
  struct use *use;
  if (inv->processed)
    return;
  inv->processed = 1;
  if (inv->depends_on)
    {
      do { bitmap_element *ptr_ = (inv->depends_on)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { move_invariant_reg (loop, i, df); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
    }
  set = (((((enum rtx_code) (inv->insn)->code) == INSN) || (((enum rtx_code) (inv->insn)->code) == JUMP_INSN) || (((enum rtx_code) (inv->insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((inv->insn)->u.fld[5]).rtx1))->code) == SET ? (((inv->insn)->u.fld[5]).rtx1) : single_set_2 (inv->insn, (((inv->insn)->u.fld[5]).rtx1))) : (rtx) 0);
  reg = gen_reg_rtx (((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode));
  df_pattern_emit_after (df, gen_move_insn ((((set)->u.fld[0]).rtx1), reg),
    (((inv->insn)->u.fld[3]).bb), inv->insn);
  (((set)->u.fld[0]).rtx1) = reg;
  reorder_insns (inv->insn, inv->insn, (preheader)->end_);
  df_insn_modify (df, preheader, inv->insn);
  if (inv->def)
    {
      for (use = inv->def->uses; use; use = use->next)
 {
   *use->pos = reg;
   df_insn_modify (df, (((use->insn)->u.fld[3]).bb), use->insn);
 }
    }
}
static void
move_invariants (struct loop *loop, struct df *df)
{
  struct invariant *inv;
  unsigned i;
  for (i = 0; i < ((invariants)->elements_used); i++)
    {
      inv = ((invariants)->data.generic_nogc[i]);
      if (inv->move)
 move_invariant_reg (loop, i, df);
    }
}
static void
init_inv_motion_data (void)
{
  actual_stamp = 1;
  if (!invariants)
    invariants = varray_init (100, VARRAY_DATA_GENERIC_NOGC, "invariants");
}
static void
free_inv_motion_data (struct df *df)
{
  unsigned i;
  struct def *def;
  struct invariant *inv;
  for (i = 0; i < df->n_defs; i++)
    {
      if (!df->defs[i])
 continue;
      def = ((df->defs[i])->data);
      if (!def)
 continue;
      free_use_list (def->uses);
      free (def);
      ((df->defs[i])->data) = ((void *)0);
    }
  for (i = 0; i < ((invariants)->elements_used); i++)
    {
      inv = ((invariants)->data.generic_nogc[i]);
      do { if (inv->depends_on) { bitmap_clear (inv->depends_on); free (inv->depends_on); (inv->depends_on) = 0; } } while (0);
      free (inv);
    }
  ((invariants)->elements_used = 0);
}
static void
move_single_loop_invariants (struct loop *loop, struct df *df)
{
  init_inv_motion_data ();
  find_invariants (loop, df);
  find_invariants_to_move (df);
  move_invariants (loop, df);
  free_inv_motion_data (df);
}
static void
free_loop_data (struct loop *loop)
{
  struct loop_data *data = ((struct loop_data *) (loop)->aux);
  free (data);
  loop->aux = ((void *)0);
}
void
move_loop_invariants (struct loops *loops)
{
  struct loop *loop;
  unsigned i;
  struct df *df = df_init ();
  loop = loops->tree_root;
  while (loop->inner)
    loop = loop->inner;
  while (loop != loops->tree_root)
    {
      move_single_loop_invariants (loop, df);
      if (loop->next)
 {
   loop = loop->next;
   while (loop->inner)
     loop = loop->inner;
 }
      else
 loop = loop->outer;
    }
  for (i = 1; i < loops->num; i++)
    if (loops->parray[i])
      free_loop_data (loops->parray[i]);
  df_finish (df);
}
const struct gcc_debug_hooks do_nothing_debug_hooks =
{
  debug_nothing_charstar,
  debug_nothing_charstar,
  debug_nothing_int_charstar,
  debug_nothing_int_charstar,
  debug_nothing_int_charstar,
  debug_nothing_int,
  debug_nothing_int_int,
  debug_nothing_int_int,
  debug_true_tree,
  debug_nothing_int_charstar,
  debug_nothing_int_charstar,
  debug_nothing_int_charstar,
  debug_nothing_int_charstar,
  debug_nothing_tree,
  debug_nothing_int,
  debug_nothing_tree,
  debug_nothing_tree,
  debug_nothing_tree_int,
  debug_nothing_tree_tree,
  debug_nothing_tree,
  debug_nothing_tree,
  debug_nothing_rtx,
  debug_nothing_int,
  debug_nothing_rtx
};
void
debug_nothing_void (void)
{
}
void
debug_nothing_tree (tree decl )
{
}
void
debug_nothing_tree_tree (tree t1 ,
    tree t2 )
{
}
unsigned char
debug_true_tree (tree block )
{
  return 1;
}
void
debug_nothing_rtx (rtx insn )
{
}
void
debug_nothing_charstar (const char *main_filename )
{
}
void
debug_nothing_int_charstar (unsigned int line ,
       const char *text )
{
}
void
debug_nothing_int (unsigned int line )
{
}
void
debug_nothing_int_int (unsigned int line ,
         unsigned int n )
{
}
void
debug_nothing_tree_int (tree decl ,
   int local )
{
}
static alloc_pool df_ref_pool;
static alloc_pool df_link_pool;
static struct df *ddf;
static void df_reg_table_realloc (struct df *, int);
static void df_insn_table_realloc (struct df *, unsigned int);
static void df_bb_table_realloc (struct df *, unsigned int);
static void df_bitmaps_alloc (struct df *, bitmap, int);
static void df_bitmaps_free (struct df *, int);
static void df_free (struct df *);
static void df_alloc (struct df *, int);
static rtx df_reg_use_gen (unsigned int);
static struct df_link *df_link_create (struct ref *, struct df_link *);
static struct df_link *df_ref_unlink (struct df_link **, struct ref *);
static void df_def_unlink (struct df *, struct ref *);
static void df_use_unlink (struct df *, struct ref *);
static void df_insn_refs_unlink (struct df *, basic_block, rtx);
static struct ref *df_ref_create (struct df *, rtx, rtx *, rtx,
      enum df_ref_type, enum df_ref_flags);
static void df_ref_record_1 (struct df *, rtx, rtx *, rtx, enum df_ref_type,
        enum df_ref_flags);
static void df_ref_record (struct df *, rtx, rtx *, rtx, enum df_ref_type,
      enum df_ref_flags);
static void df_def_record_1 (struct df *, rtx, basic_block, rtx);
static void df_defs_record (struct df *, rtx, basic_block, rtx);
static void df_uses_record (struct df *, rtx *, enum df_ref_type,
       basic_block, rtx, enum df_ref_flags);
static void df_insn_refs_record (struct df *, basic_block, rtx);
static void df_bb_refs_record (struct df *, basic_block);
static void df_refs_record (struct df *, bitmap);
static void df_bb_reg_def_chain_create (struct df *, basic_block);
static void df_reg_def_chain_create (struct df *, bitmap, unsigned char);
static void df_bb_reg_use_chain_create (struct df *, basic_block);
static void df_reg_use_chain_create (struct df *, bitmap, unsigned char);
static void df_bb_du_chain_create (struct df *, basic_block, bitmap);
static void df_du_chain_create (struct df *, bitmap);
static void df_bb_ud_chain_create (struct df *, basic_block);
static void df_ud_chain_create (struct df *, bitmap);
static void df_bb_rd_local_compute (struct df *, basic_block, bitmap);
static void df_rd_local_compute (struct df *, bitmap);
static void df_bb_ru_local_compute (struct df *, basic_block);
static void df_ru_local_compute (struct df *, bitmap);
static void df_bb_lr_local_compute (struct df *, basic_block);
static void df_lr_local_compute (struct df *, bitmap);
static void df_bb_reg_info_compute (struct df *, basic_block, bitmap);
static void df_reg_info_compute (struct df *, bitmap);
static int df_bb_luids_set (struct df *df, basic_block);
static int df_luids_set (struct df *df, bitmap);
static int df_modified_p (struct df *, bitmap);
static int df_refs_queue (struct df *);
static int df_refs_process (struct df *);
static int df_bb_refs_update (struct df *, basic_block);
static int df_refs_update (struct df *, bitmap);
static void df_analyze_1 (struct df *, bitmap, int, int);
static void df_insns_modify (struct df *, basic_block, rtx, rtx);
static int df_rtx_mem_replace (rtx *, void *);
static int df_rtx_reg_replace (rtx *, void *);
void df_refs_reg_replace (struct df *, bitmap, struct df_link *, rtx, rtx);
static int df_def_dominates_all_uses_p (struct df *, struct ref *def);
static int df_def_dominates_uses_p (struct df *, struct ref *def, bitmap);
static struct ref *df_bb_insn_regno_last_use_find (struct df *, basic_block,
         rtx, unsigned int);
static struct ref *df_bb_insn_regno_first_def_find (struct df *, basic_block,
          rtx, unsigned int);
static void df_chain_dump (struct df_link *, FILE *file);
static void df_chain_dump_regno (struct df_link *, FILE *file);
static void df_regno_debug (struct df *, unsigned int, FILE *);
static void df_ref_debug (struct df *, struct ref *, FILE *);
static void df_rd_transfer_function (int, int *, void *, void *, void *,
         void *, void *);
static void df_ru_transfer_function (int, int *, void *, void *, void *,
         void *, void *);
static void df_lr_transfer_function (int, int *, void *, void *, void *,
         void *, void *);
static void hybrid_search (basic_block, struct dataflow *,
      sbitmap, sbitmap, sbitmap);
static void
df_insn_table_realloc (struct df *df, unsigned int size)
{
  size++;
  if (size <= df->insn_size)
    return;
  size += df->insn_size / 4;
  df->insns = xrealloc (df->insns, size * sizeof (struct insn_df_info));
  memset (df->insns + df->insn_size, 0,
   (size - df->insn_size) * sizeof (struct insn_df_info));
  df->insn_size = size;
  if (! df->insns_modified)
    {
      df->insns_modified = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      bitmap_clear (df->insns_modified);
    }
}
static void
df_bb_table_realloc (struct df *df, unsigned int size)
{
  size++;
  if (size <= df->n_bbs)
    return;
  size += df->n_bbs / 4;
  df->bbs = xrealloc (df->bbs, size * sizeof (struct bb_df_info));
  memset (df->bbs + df->n_bbs, 0, (size - df->n_bbs) * sizeof (struct bb_df_info));
  df->n_bbs = size;
}
static void
df_reg_table_realloc (struct df *df, int size)
{
  if (! size)
    size = df->reg_size / 4;
  size += df->reg_size;
  if (size < max_reg_num ())
    size = max_reg_num ();
  df->regs = xrealloc (df->regs, size * sizeof (struct reg_info));
  df->reg_def_last = xrealloc (df->reg_def_last,
          size * sizeof (struct ref *));
  memset (df->regs + df->reg_size, 0,
   (size - df->reg_size) * sizeof (struct reg_info));
  df->reg_size = size;
}
static void
df_bitmaps_alloc (struct df *df, bitmap blocks, int flags)
{
  basic_block bb;
  df->n_defs = df->def_id;
  df->n_uses = df->use_id;
  if (!blocks)
    blocks = df->all_blocks;
  do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { struct bb_df_info *bb_info = (&df->bbs[(bb)->index]); if (flags & 1) { if (!bb_info->rd_in) { bb_info->rd_kill = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1); bb_info->rd_gen = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1); bb_info->rd_in = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1); bb_info->rd_out = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1); } else { bitmap_clear (bb_info->rd_kill); bitmap_clear (bb_info->rd_gen); bitmap_clear (bb_info->rd_in); bitmap_clear (bb_info->rd_out); } } if (flags & 2) { if (!bb_info->ru_in) { bb_info->ru_kill = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1); bb_info->ru_gen = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1); bb_info->ru_in = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1); bb_info->ru_out = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1); } else { bitmap_clear (bb_info->ru_kill); bitmap_clear (bb_info->ru_gen); bitmap_clear (bb_info->ru_in); bitmap_clear (bb_info->ru_out); } } if (flags & 4) { if (!bb_info->lr_in) { bb_info->lr_def = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1); bb_info->lr_use = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1); bb_info->lr_in = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1); bb_info->lr_out = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1); } else { bitmap_clear (bb_info->lr_def); bitmap_clear (bb_info->lr_use); bitmap_clear (bb_info->lr_in); bitmap_clear (bb_info->lr_out); } } };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
      ;
}
static void
df_bitmaps_free (struct df *df, int flags)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      struct bb_df_info *bb_info = (&df->bbs[(bb)->index]);
      if (!bb_info)
 continue;
      if ((flags & 1) && bb_info->rd_in)
 {
   do { if (bb_info->rd_kill) { bitmap_clear (bb_info->rd_kill); free (bb_info->rd_kill); (bb_info->rd_kill) = 0; } } while (0);
   bb_info->rd_kill = ((void *)0);
   do { if (bb_info->rd_gen) { bitmap_clear (bb_info->rd_gen); free (bb_info->rd_gen); (bb_info->rd_gen) = 0; } } while (0);
   bb_info->rd_gen = ((void *)0);
   do { if (bb_info->rd_in) { bitmap_clear (bb_info->rd_in); free (bb_info->rd_in); (bb_info->rd_in) = 0; } } while (0);
   bb_info->rd_in = ((void *)0);
   do { if (bb_info->rd_out) { bitmap_clear (bb_info->rd_out); free (bb_info->rd_out); (bb_info->rd_out) = 0; } } while (0);
   bb_info->rd_out = ((void *)0);
 }
      if ((flags & 2) && bb_info->ru_in)
 {
   do { if (bb_info->ru_kill) { bitmap_clear (bb_info->ru_kill); free (bb_info->ru_kill); (bb_info->ru_kill) = 0; } } while (0);
   bb_info->ru_kill = ((void *)0);
   do { if (bb_info->ru_gen) { bitmap_clear (bb_info->ru_gen); free (bb_info->ru_gen); (bb_info->ru_gen) = 0; } } while (0);
   bb_info->ru_gen = ((void *)0);
   do { if (bb_info->ru_in) { bitmap_clear (bb_info->ru_in); free (bb_info->ru_in); (bb_info->ru_in) = 0; } } while (0);
   bb_info->ru_in = ((void *)0);
   do { if (bb_info->ru_out) { bitmap_clear (bb_info->ru_out); free (bb_info->ru_out); (bb_info->ru_out) = 0; } } while (0);
   bb_info->ru_out = ((void *)0);
 }
      if ((flags & 4) && bb_info->lr_in)
 {
   do { if (bb_info->lr_def) { bitmap_clear (bb_info->lr_def); free (bb_info->lr_def); (bb_info->lr_def) = 0; } } while (0);
   bb_info->lr_def = ((void *)0);
   do { if (bb_info->lr_use) { bitmap_clear (bb_info->lr_use); free (bb_info->lr_use); (bb_info->lr_use) = 0; } } while (0);
   bb_info->lr_use = ((void *)0);
   do { if (bb_info->lr_in) { bitmap_clear (bb_info->lr_in); free (bb_info->lr_in); (bb_info->lr_in) = 0; } } while (0);
   bb_info->lr_in = ((void *)0);
   do { if (bb_info->lr_out) { bitmap_clear (bb_info->lr_out); free (bb_info->lr_out); (bb_info->lr_out) = 0; } } while (0);
   bb_info->lr_out = ((void *)0);
 }
    }
  df->flags &= ~(flags & (1 | 2 | 4));
}
static void
df_alloc (struct df *df, int n_regs)
{
  int n_insns;
  basic_block bb;
  df_link_pool = create_alloc_pool ("df_link pool", sizeof (struct df_link),
        100);
  df_ref_pool = create_alloc_pool ("df_ref pool", sizeof (struct ref), 100);
  n_insns = get_max_uid () + 1;
  df->def_id = 0;
  df->n_defs = 0;
  df->def_size = n_insns;
  df->defs = xmalloc (df->def_size * sizeof (*df->defs));
  df->use_id = 0;
  df->n_uses = 0;
  df->use_size = n_insns * 2;
  df->uses = xmalloc (df->use_size * sizeof (*df->uses));
  df->n_regs = n_regs;
  df->n_bbs = last_basic_block;
  df_insn_table_realloc (df, n_insns);
  df_reg_table_realloc (df, df->n_regs);
  df->bbs_modified = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  bitmap_clear (df->bbs_modified);
  df->flags = 0;
  df->bbs = xcalloc (last_basic_block, sizeof (struct bb_df_info));
  df->all_blocks = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    bitmap_set_bit (df->all_blocks, bb->index);
}
static void
df_free (struct df *df)
{
  df_bitmaps_free (df, 255);
  if (df->bbs)
    free (df->bbs);
  df->bbs = 0;
  if (df->insns)
    free (df->insns);
  df->insns = 0;
  df->insn_size = 0;
  if (df->defs)
    free (df->defs);
  df->defs = 0;
  df->def_size = 0;
  df->def_id = 0;
  if (df->uses)
    free (df->uses);
  df->uses = 0;
  df->use_size = 0;
  df->use_id = 0;
  if (df->regs)
    free (df->regs);
  df->regs = 0;
  df->reg_size = 0;
  if (df->bbs_modified)
    do { if (df->bbs_modified) { bitmap_clear (df->bbs_modified); free (df->bbs_modified); (df->bbs_modified) = 0; } } while (0);
  df->bbs_modified = 0;
  if (df->insns_modified)
    do { if (df->insns_modified) { bitmap_clear (df->insns_modified); free (df->insns_modified); (df->insns_modified) = 0; } } while (0);
  df->insns_modified = 0;
  do { if (df->all_blocks) { bitmap_clear (df->all_blocks); free (df->all_blocks); (df->all_blocks) = 0; } } while (0);
  df->all_blocks = 0;
  free_alloc_pool (df_ref_pool);
  free_alloc_pool (df_link_pool);
}
static rtx df_reg_use_gen (unsigned int regno)
{
  rtx reg;
  rtx use;
  reg = (cfun->emit->x_regno_reg_rtx)[regno];
  use = gen_rtx_fmt_e (USE, (((enum machine_mode) (reg)->mode)), (reg));
  return use;
}
static struct df_link *
df_link_create (struct ref *ref, struct df_link *next)
{
  struct df_link *link;
  link = pool_alloc (df_link_pool);
  link->next = next;
  link->ref = ref;
  return link;
}
static void
free_reg_ref_chain (struct df_link **chain)
{
  struct df_link *act, *next;
  for (act = *chain; act; act = next)
    {
      next = act->next;
      pool_free (df_link_pool, act);
    }
  *chain = ((void *)0);
}
static struct df_link *
df_ref_unlink (struct df_link **phead, struct ref *ref)
{
  struct df_link *link = *phead;
  if (link)
    {
      if (! link->next)
 {
   if (link->ref != ref)
     fancy_abort ("gcc.c", 439030, "?");
   *phead = ((void *)0);
 }
      else
 {
   if (link->ref == ref)
     *phead = link->next;
   else
     {
       for (; link->next; link = link->next)
  {
    if (link->next->ref == ref)
      {
        link->next = link->next->next;
        return link->next;
      }
  }
     }
 }
    }
  return link;
}
int
df_ref_remove (struct df *df, struct ref *ref)
{
  if ((((ref)->type) == DF_REF_REG_DEF))
    {
      df_def_unlink (df, ref);
      df_ref_unlink (&df->insns[(((((ref)->insn)->u.fld[0]).rtint))].defs, ref);
    }
  else
    {
      df_use_unlink (df, ref);
      df_ref_unlink (&df->insns[(((((ref)->insn)->u.fld[0]).rtint))].uses, ref);
    }
  return 1;
}
static void
df_def_unlink (struct df *df , struct ref *def)
{
  struct df_link *du_link;
  unsigned int dregno = ((((((enum rtx_code) ((def)->reg)->code) == SUBREG ? ((((def)->reg)->u.fld[0]).rtx1) : ((def)->reg)))->u.fld[0]).rtuint);
  for (du_link = ((def)->chain); du_link; du_link = du_link->next)
    {
      struct ref *use = du_link->ref;
      df_ref_unlink (&((use)->chain), def);
    }
  ((def)->chain) = 0;
  df_ref_unlink (&df->regs[dregno].defs, def);
  df->defs[((def)->id)] = 0;
}
static void
df_use_unlink (struct df *df , struct ref *use)
{
  struct df_link *ud_link;
  unsigned int uregno = ((((((enum rtx_code) ((use)->reg)->code) == SUBREG ? ((((use)->reg)->u.fld[0]).rtx1) : ((use)->reg)))->u.fld[0]).rtuint);
  for (ud_link = ((use)->chain); ud_link; ud_link = ud_link->next)
    {
      struct ref *def = ud_link->ref;
      df_ref_unlink (&((def)->chain), use);
    }
  ((use)->chain) = 0;
  df_ref_unlink (&df->regs[uregno].uses, use);
  df->uses[((use)->id)] = 0;
}
static struct ref *
df_ref_create (struct df *df, rtx reg, rtx *loc, rtx insn,
        enum df_ref_type ref_type, enum df_ref_flags ref_flags)
{
  struct ref *this_ref;
  this_ref = pool_alloc (df_ref_pool);
  ((this_ref)->reg) = reg;
  ((this_ref)->loc) = loc;
  ((this_ref)->insn) = insn;
  ((this_ref)->chain) = 0;
  ((this_ref)->type) = ref_type;
  ((this_ref)->flags) = ref_flags;
  ((this_ref)->data) = ((void *)0);
  if (ref_type == DF_REF_REG_DEF)
    {
      if (df->def_id >= df->def_size)
 {
   df->def_size += (df->def_size / 4);
   df->defs = xrealloc (df->defs,
          df->def_size * sizeof (*df->defs));
 }
      ((this_ref)->id) = df->def_id;
      df->defs[df->def_id++] = this_ref;
    }
  else
    {
      if (df->use_id >= df->use_size)
 {
   df->use_size += (df->use_size / 4);
   df->uses = xrealloc (df->uses,
          df->use_size * sizeof (*df->uses));
 }
      ((this_ref)->id) = df->use_id;
      df->uses[df->use_id++] = this_ref;
    }
  return this_ref;
}
static void
df_ref_record_1 (struct df *df, rtx reg, rtx *loc, rtx insn,
   enum df_ref_type ref_type, enum df_ref_flags ref_flags)
{
  df_ref_create (df, reg, loc, insn, ref_type, ref_flags);
}
static void
df_ref_record (struct df *df, rtx reg, rtx *loc, rtx insn,
        enum df_ref_type ref_type, enum df_ref_flags ref_flags)
{
  unsigned int regno;
  if (!(((enum rtx_code) (reg)->code) == REG) && ((enum rtx_code) (reg)->code) != SUBREG)
    fancy_abort ("gcc.c", 439190, "?");
  if (((enum rtx_code) (reg)->code) == SUBREG
      && (((unsigned short) mode_size[((enum machine_mode) (reg)->mode)]) < ((unsigned short) mode_size[word_mode])
   || ((unsigned short) mode_size[((enum machine_mode) (reg)->mode)])
        >= ((unsigned short) mode_size[((enum machine_mode) ((((reg)->u.fld[0]).rtx1))->mode)])))
    {
      loc = &(((reg)->u.fld[0]).rtx1);
      reg = *loc;
      ref_flags |= DF_REF_STRIPPED;
    }
  regno = (((((enum rtx_code) (reg)->code) == SUBREG ? (((reg)->u.fld[0]).rtx1) : reg)->u.fld[0]).rtuint);
  if (regno < 53)
    {
      int i;
      int endregno;
      if (! (df->flags & 1024))
 return;
      endregno = hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)];
      if (((enum rtx_code) (reg)->code) == SUBREG)
        regno += subreg_regno_offset (regno, ((enum machine_mode) ((((reg)->u.fld[0]).rtx1))->mode),
          (((reg)->u.fld[1]).rtuint), ((enum machine_mode) (reg)->mode));
      endregno += regno;
      for (i = regno; i < endregno; i++)
 df_ref_record_1 (df, (cfun->emit->x_regno_reg_rtx)[i],
    loc, insn, ref_type, ref_flags);
    }
  else
    {
      df_ref_record_1 (df, reg, loc, insn, ref_type, ref_flags);
    }
}
unsigned char
read_modify_subreg_p (rtx x)
{
  unsigned int isize, osize;
  if (((enum rtx_code) (x)->code) != SUBREG)
    return 0;
  isize = ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]);
  osize = ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]);
  return (isize > osize && isize > (0 ? 8 : 4));
}
static void
df_def_record_1 (struct df *df, rtx x, basic_block bb, rtx insn)
{
  rtx *loc;
  rtx dst;
  enum df_ref_flags flags = 0;
  if (((enum rtx_code) (x)->code) == EXPR_LIST || ((enum rtx_code) (x)->code) == CLOBBER)
    loc = &(((x)->u.fld[0]).rtx1);
  else
    loc = &(((x)->u.fld[0]).rtx1);
  dst = *loc;
  if (((enum rtx_code) (dst)->code) == PARALLEL && ((enum machine_mode) (dst)->mode) == BLKmode)
    {
      int i;
      for (i = (((((dst)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 {
   rtx temp = (((((dst)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (temp)->code) == EXPR_LIST || ((enum rtx_code) (temp)->code) == CLOBBER
       || ((enum rtx_code) (temp)->code) == SET)
     df_def_record_1 (df, temp, bb, insn);
 }
      return;
    }
  while (((enum rtx_code) (dst)->code) == STRICT_LOW_PART
  || ((enum rtx_code) (dst)->code) == ZERO_EXTRACT
  || ((enum rtx_code) (dst)->code) == SIGN_EXTRACT
  || ((df->flags & 4096) == 0
             && read_modify_subreg_p (dst)))
    {
      if (((enum rtx_code) (dst)->code) == STRICT_LOW_PART)
 {
   loc = &(((dst)->u.fld[0]).rtx1);
   dst = *loc;
 }
      loc = &(((dst)->u.fld[0]).rtx1);
      dst = *loc;
      flags |= DF_REF_READ_WRITE;
    }
  if ((((enum rtx_code) (dst)->code) == REG)
      || (((enum rtx_code) (dst)->code) == SUBREG && (((enum rtx_code) ((((dst)->u.fld[0]).rtx1))->code) == REG)))
    df_ref_record (df, dst, loc, insn, DF_REF_REG_DEF, flags);
}
static void
df_defs_record (struct df *df, rtx x, basic_block bb, rtx insn)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  if (code == SET || code == CLOBBER)
    {
      df_def_record_1 (df, x, bb, insn);
    }
  else if (code == PARALLEL)
    {
      int i;
      for (i = (((((x)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 {
   code = ((enum rtx_code) ((((((x)->u.fld[0]).rtvec1))->elem[i]))->code);
   if (code == SET || code == CLOBBER)
     df_def_record_1 (df, (((((x)->u.fld[0]).rtvec1))->elem[i]), bb, insn);
 }
    }
}
static void
df_uses_record (struct df *df, rtx *loc, enum df_ref_type ref_type,
  basic_block bb, rtx insn, enum df_ref_flags flags)
{
  enum rtx_code code;
  rtx x;
 retry:
  x = *loc;
  if (!x)
    return;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case LABEL_REF:
    case SYMBOL_REF:
    case CONST_INT:
    case CONST:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case PC:
    case CC0:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      return;
    case CLOBBER:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
 df_uses_record (df, &((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
   DF_REF_REG_MEM_STORE, bb, insn, flags);
      return;
    case MEM:
      df_uses_record (df, &(((x)->u.fld[0]).rtx1), DF_REF_REG_MEM_LOAD, bb, insn, 0);
      return;
    case SUBREG:
      if (!(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 {
   loc = &(((x)->u.fld[0]).rtx1);
   df_uses_record (df, loc, ref_type, bb, insn, flags);
   return;
 }
    case REG:
      df_ref_record (df, x, loc, insn, ref_type, flags);
      return;
    case SET:
      {
 rtx dst = (((x)->u.fld[0]).rtx1);
 df_uses_record (df, &(((x)->u.fld[1]).rtx1), DF_REF_REG_USE, bb, insn, 0);
 switch (((enum rtx_code) (dst)->code))
   {
     case SUBREG:
       if ((df->flags & 4096) == 0
                  && read_modify_subreg_p (dst))
  {
    df_uses_record (df, &(((dst)->u.fld[0]).rtx1), DF_REF_REG_USE, bb,
      insn, DF_REF_READ_WRITE);
    break;
  }
     case REG:
     case PARALLEL:
     case PC:
     case CC0:
  break;
     case MEM:
       df_uses_record (df, &(((dst)->u.fld[0]).rtx1),
         DF_REF_REG_MEM_STORE,
         bb, insn, 0);
       break;
     case STRICT_LOW_PART:
       dst = (((dst)->u.fld[0]).rtx1);
       if (((enum rtx_code) (dst)->code) != SUBREG)
  fancy_abort ("gcc.c", 439424, "?");
       df_uses_record (df, &(((dst)->u.fld[0]).rtx1), DF_REF_REG_USE, bb,
        insn, DF_REF_READ_WRITE);
       break;
     case ZERO_EXTRACT:
     case SIGN_EXTRACT:
       df_uses_record (df, &(((dst)->u.fld[0]).rtx1), DF_REF_REG_USE, bb, insn,
         DF_REF_READ_WRITE);
       df_uses_record (df, &(((dst)->u.fld[1]).rtx1), DF_REF_REG_USE, bb, insn, 0);
       df_uses_record (df, &(((dst)->u.fld[2]).rtx1), DF_REF_REG_USE, bb, insn, 0);
       dst = (((dst)->u.fld[0]).rtx1);
       break;
     default:
       fancy_abort ("gcc.c", 439437, "?");
   }
 return;
      }
    case RETURN:
      break;
    case ASM_OPERANDS:
    case UNSPEC_VOLATILE:
    case TRAP_IF:
    case ASM_INPUT:
      {
 if (code == ASM_OPERANDS)
   {
     int j;
     for (j = 0; j < (((((x)->u.fld[3]).rtvec1))->num_elem); j++)
       df_uses_record (df, &(((((x)->u.fld[3]).rtvec1))->elem[j]),
         DF_REF_REG_USE, bb, insn, 0);
     return;
   }
 break;
      }
    case PRE_DEC:
    case POST_DEC:
    case PRE_INC:
    case POST_INC:
    case PRE_MODIFY:
    case POST_MODIFY:
      df_ref_record (df, (((x)->u.fld[0]).rtx1), &(((x)->u.fld[0]).rtx1), insn, DF_REF_REG_DEF, DF_REF_READ_WRITE);
    default:
      break;
    }
  {
    const char *fmt = (rtx_format[(int) (code)]);
    int i;
    for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
      {
 if (fmt[i] == 'e')
   {
     if (i == 0)
       {
  loc = &(((x)->u.fld[0]).rtx1);
  goto retry;
       }
     df_uses_record (df, &(((x)->u.fld[i]).rtx1), ref_type, bb, insn, flags);
   }
 else if (fmt[i] == 'E')
   {
     int j;
     for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
       df_uses_record (df, &(((((x)->u.fld[i]).rtvec1))->elem[j]), ref_type,
         bb, insn, flags);
   }
      }
  }
}
static void
df_insn_refs_record (struct df *df, basic_block bb, rtx insn)
{
  int i;
  if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    {
      rtx note;
      df_defs_record (df, (((insn)->u.fld[5]).rtx1), bb, insn);
      if (df->flags & 2048)
 for (note = (((insn)->u.fld[8]).rtx1); note;
      note = (((note)->u.fld[1]).rtx1))
   {
     switch (((enum reg_note) ((enum machine_mode) (note)->mode)))
       {
       case REG_EQUIV:
       case REG_EQUAL:
  df_uses_record (df, &(((note)->u.fld[0]).rtx1), DF_REF_REG_USE,
    bb, insn, 0);
       default:
  break;
       }
   }
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 {
   rtx note;
   rtx x;
   for (note = (((insn)->u.fld[9]).rtx1); note;
        note = (((note)->u.fld[1]).rtx1))
     {
       if (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == USE)
  df_uses_record (df, &((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtx1), DF_REF_REG_USE,
    bb, insn, 0);
     }
   x = df_reg_use_gen (7);
   df_uses_record (df, &(((x)->u.fld[0]).rtx1), DF_REF_REG_USE, bb, insn, 0);
   if (df->flags & 1024)
     {
       for (i = 0; i < 53; i++)
  if (global_regs[i])
    {
      x = df_reg_use_gen (i);
      df_uses_record (df, &(((x)->u.fld[0]).rtx1),
        DF_REF_REG_USE, bb, insn, 0);
    }
     }
 }
      df_uses_record (df, &(((insn)->u.fld[5]).rtx1),
        DF_REF_REG_USE, bb, insn, 0);
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 {
   rtx note;
   for (note = (((insn)->u.fld[9]).rtx1);
        note;
        note = (((note)->u.fld[1]).rtx1))
     if (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == CLOBBER)
       df_defs_record (df, (((note)->u.fld[0]).rtx1), bb, insn);
 }
    }
}
static void
df_bb_refs_record (struct df *df, basic_block bb)
{
  rtx insn;
  for ((insn) = (bb)->head_; (insn) != ((((bb)->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   df_insn_refs_record (df, bb, insn);
 }
    }
}
static void
df_refs_record (struct df *df, bitmap blocks)
{
  basic_block bb;
  do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { df_bb_refs_record (df, bb); };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
      ;
}
static void
df_bb_reg_def_chain_create (struct df *df, basic_block bb)
{
  rtx insn;
  for ((insn) = (bb)->end_; (insn) != ((((bb)->head_)->u.fld[1]).rtx1); (insn) = (((insn)->u.fld[1]).rtx1))
    {
      struct df_link *link;
      unsigned int uid = (((insn)->u.fld[0]).rtint);
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      for (link = df->insns[uid].defs; link; link = link->next)
 {
   struct ref *def = link->ref;
   unsigned int dregno = ((((((enum rtx_code) ((def)->reg)->code) == SUBREG ? ((((def)->reg)->u.fld[0]).rtx1) : ((def)->reg)))->u.fld[0]).rtuint);
          if (((def)->id) < df->def_id_save)
            continue;
   df->regs[dregno].defs = df_link_create (def, df->regs[dregno].defs);
 }
    }
}
static void
df_reg_def_chain_create (struct df *df, bitmap blocks, unsigned char redo)
{
  basic_block bb;
  unsigned old_def_id_save = df->def_id_save;
  if (redo)
    {
      df->def_id_save = 0;
    }
  do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { df_bb_reg_def_chain_create (df, bb); };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
      ;
  df->def_id_save = old_def_id_save;
}
static void
df_reg_def_chain_clean (struct df *df)
{
  unsigned regno;
  for (regno = 0; regno < df->n_regs; regno++)
    free_reg_ref_chain (&df->regs[regno].defs);
}
static void
df_bb_reg_use_chain_create (struct df *df, basic_block bb)
{
  rtx insn;
  for ((insn) = (bb)->head_; (insn) != ((((bb)->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1))
    {
      struct df_link *link;
      unsigned int uid = (((insn)->u.fld[0]).rtint);
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      for (link = df->insns[uid].uses; link; link = link->next)
 {
   struct ref *use = link->ref;
   unsigned int uregno = ((((((enum rtx_code) ((use)->reg)->code) == SUBREG ? ((((use)->reg)->u.fld[0]).rtx1) : ((use)->reg)))->u.fld[0]).rtuint);
          if (((use)->id) < df->use_id_save)
            continue;
   df->regs[uregno].uses
     = df_link_create (use, df->regs[uregno].uses);
 }
    }
}
static void
df_reg_use_chain_create (struct df *df, bitmap blocks, unsigned char redo)
{
  basic_block bb;
  unsigned old_use_id_save = df->use_id_save;
  if (redo)
    {
      df->use_id_save = 0;
    }
  do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { df_bb_reg_use_chain_create (df, bb); };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
      ;
  df->use_id_save = old_use_id_save;
}
static void
df_reg_use_chain_clean (struct df *df)
{
  unsigned regno;
  for (regno = 0; regno < df->n_regs; regno++)
    free_reg_ref_chain (&df->regs[regno].uses);
}
static void
df_bb_du_chain_create (struct df *df, basic_block bb, bitmap ru)
{
  struct bb_df_info *bb_info = (&df->bbs[(bb)->index]);
  rtx insn;
  bitmap_copy (ru, bb_info->ru_out);
  for ((insn) = (bb)->end_; (insn) != ((((bb)->head_)->u.fld[1]).rtx1); (insn) = (((insn)->u.fld[1]).rtx1))
    {
      struct df_link *def_link;
      struct df_link *use_link;
      unsigned int uid = (((insn)->u.fld[0]).rtint);
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      for (def_link = df->insns[uid].defs; def_link; def_link = def_link->next)
 {
   struct ref *def = def_link->ref;
   unsigned int dregno = ((((((enum rtx_code) ((def)->reg)->code) == SUBREG ? ((((def)->reg)->u.fld[0]).rtx1) : ((def)->reg)))->u.fld[0]).rtuint);
   ((def)->chain) = 0;
   for (use_link = df->regs[dregno].uses; use_link;
        use_link = use_link->next)
     {
       struct ref *use = use_link->ref;
       if (bitmap_bit_p (ru, ((use)->id)))
  {
    ((def)->chain)
      = df_link_create (use, ((def)->chain));
    bitmap_clear_bit (ru, ((use)->id));
  }
     }
 }
      for (use_link = df->insns[uid].uses; use_link; use_link = use_link->next)
 {
   struct ref *use = use_link->ref;
   bitmap_set_bit (ru, ((use)->id));
 }
    }
}
static void
df_du_chain_create (struct df *df, bitmap blocks)
{
  bitmap ru;
  basic_block bb;
  ru = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { df_bb_du_chain_create (df, bb, ru); };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
      ;
  do { if (ru) { bitmap_clear (ru); free (ru); (ru) = 0; } } while (0);
}
static void
df_bb_ud_chain_create (struct df *df, basic_block bb)
{
  struct bb_df_info *bb_info = (&df->bbs[(bb)->index]);
  struct ref **reg_def_last = df->reg_def_last;
  rtx insn;
  memset (reg_def_last, 0, df->n_regs * sizeof (struct ref *));
  for ((insn) = (bb)->head_; (insn) != ((((bb)->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1))
    {
      unsigned int uid = (((insn)->u.fld[0]).rtint);
      struct df_link *use_link;
      struct df_link *def_link;
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      for (use_link = df->insns[uid].uses; use_link; use_link = use_link->next)
 {
   struct ref *use = use_link->ref;
   unsigned int regno = ((((((enum rtx_code) ((use)->reg)->code) == SUBREG ? ((((use)->reg)->u.fld[0]).rtx1) : ((use)->reg)))->u.fld[0]).rtuint);
   ((use)->chain) = 0;
   if (reg_def_last[regno])
     {
       ((use)->chain)
  = df_link_create (reg_def_last[regno], 0);
     }
   else
     {
       for (def_link = df->regs[regno].defs; def_link;
     def_link = def_link->next)
  {
    struct ref *def = def_link->ref;
    if (bitmap_bit_p (bb_info->rd_in, ((def)->id)))
      {
        ((use)->chain)
   = df_link_create (def, ((use)->chain));
      }
  }
     }
 }
      for (def_link = df->insns[uid].defs; def_link; def_link = def_link->next)
 {
   struct ref *def = def_link->ref;
   int dregno = ((((((enum rtx_code) ((def)->reg)->code) == SUBREG ? ((((def)->reg)->u.fld[0]).rtx1) : ((def)->reg)))->u.fld[0]).rtuint);
   reg_def_last[dregno] = def;
 }
    }
}
static void
df_ud_chain_create (struct df *df, bitmap blocks)
{
  basic_block bb;
  do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { df_bb_ud_chain_create (df, bb); };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
      ;
}
static void
df_rd_transfer_function (int bb , int *changed, void *in,
    void *out, void *gen, void *kill,
    void *data )
{
  *changed = bitmap_union_of_diff (out, gen, in, kill);
}
static void
df_ru_transfer_function (int bb , int *changed, void *in,
    void *out, void *gen, void *kill,
    void *data )
{
  *changed = bitmap_union_of_diff (in, gen, out, kill);
}
static void
df_lr_transfer_function (int bb , int *changed, void *in,
    void *out, void *use, void *def,
    void *data )
{
  *changed = bitmap_union_of_diff (in, use, out, def);
}
static void
df_bb_rd_local_compute (struct df *df, basic_block bb, bitmap call_killed_defs)
{
  struct bb_df_info *bb_info = (&df->bbs[(bb)->index]);
  rtx insn;
  bitmap seen = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  unsigned char call_seen = 0;
  for ((insn) = (bb)->end_; (insn) != ((((bb)->head_)->u.fld[1]).rtx1); (insn) = (((insn)->u.fld[1]).rtx1))
    {
      unsigned int uid = (((insn)->u.fld[0]).rtint);
      struct df_link *def_link;
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      for (def_link = df->insns[uid].defs; def_link; def_link = def_link->next)
 {
   struct ref *def = def_link->ref;
   unsigned int regno = ((((((enum rtx_code) ((def)->reg)->code) == SUBREG ? ((((def)->reg)->u.fld[0]).rtx1) : ((def)->reg)))->u.fld[0]).rtuint);
   struct df_link *def2_link;
   if (bitmap_bit_p (seen, regno)
       || (call_seen
    && regno < 53
    && (!!((regs_invalidated_by_call)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))))
     continue;
   for (def2_link = df->regs[regno].defs; def2_link;
        def2_link = def2_link->next)
     {
       struct ref *def2 = def2_link->ref;
       bitmap_set_bit (bb_info->rd_kill, ((def2)->id));
     }
   bitmap_set_bit (bb_info->rd_gen, ((def)->id));
   bitmap_set_bit (seen, regno);
 }
      if (((enum rtx_code) (insn)->code) == CALL_INSN && (df->flags & 1024))
 {
   bitmap_operation (bb_info->rd_kill, bb_info->rd_kill,
       call_killed_defs, BITMAP_IOR);
   call_seen = 1;
 }
    }
  do { if (seen) { bitmap_clear (seen); free (seen); (seen) = 0; } } while (0);
}
static void
df_rd_local_compute (struct df *df, bitmap blocks)
{
  basic_block bb;
  bitmap killed_by_call = ((void *)0);
  unsigned regno;
  struct df_link *def_link;
  if (df->flags & 1024)
    {
      killed_by_call = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      for (regno = 0; regno < 53; regno++)
 {
   if (!(!!((regs_invalidated_by_call)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
     continue;
   for (def_link = df->regs[regno].defs;
        def_link;
        def_link = def_link->next)
     bitmap_set_bit (killed_by_call, ((def_link->ref)->id));
 }
    }
  do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { df_bb_rd_local_compute (df, bb, killed_by_call); };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
    ;
  if (df->flags & 1024)
    do { if (killed_by_call) { bitmap_clear (killed_by_call); free (killed_by_call); (killed_by_call) = 0; } } while (0);
}
static void
df_bb_ru_local_compute (struct df *df, basic_block bb)
{
  struct bb_df_info *bb_info = (&df->bbs[(bb)->index]);
  rtx insn;
  for ((insn) = (bb)->end_; (insn) != ((((bb)->head_)->u.fld[1]).rtx1); (insn) = (((insn)->u.fld[1]).rtx1))
    {
      unsigned int uid = (((insn)->u.fld[0]).rtint);
      struct df_link *def_link;
      struct df_link *use_link;
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      for (def_link = df->insns[uid].defs; def_link; def_link = def_link->next)
 {
   struct ref *def = def_link->ref;
   unsigned int dregno = ((((((enum rtx_code) ((def)->reg)->code) == SUBREG ? ((((def)->reg)->u.fld[0]).rtx1) : ((def)->reg)))->u.fld[0]).rtuint);
   for (use_link = df->regs[dregno].uses; use_link;
        use_link = use_link->next)
     {
       struct ref *use = use_link->ref;
       bitmap_set_bit (bb_info->ru_kill, ((use)->id));
       bitmap_clear_bit (bb_info->ru_gen, ((use)->id));
     }
 }
      for (use_link = df->insns[uid].uses; use_link; use_link = use_link->next)
 {
   struct ref *use = use_link->ref;
   bitmap_set_bit (bb_info->ru_gen, ((use)->id));
 }
    }
}
static void
df_ru_local_compute (struct df *df, bitmap blocks)
{
  basic_block bb;
  do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { df_bb_ru_local_compute (df, bb); };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
    ;
}
static void
df_bb_lr_local_compute (struct df *df, basic_block bb)
{
  struct bb_df_info *bb_info = (&df->bbs[(bb)->index]);
  rtx insn;
  for ((insn) = (bb)->end_; (insn) != ((((bb)->head_)->u.fld[1]).rtx1); (insn) = (((insn)->u.fld[1]).rtx1))
    {
      unsigned int uid = (((insn)->u.fld[0]).rtint);
      struct df_link *link;
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      for (link = df->insns[uid].defs; link; link = link->next)
 {
   struct ref *def = link->ref;
   unsigned int dregno = ((((((enum rtx_code) ((def)->reg)->code) == SUBREG ? ((((def)->reg)->u.fld[0]).rtx1) : ((def)->reg)))->u.fld[0]).rtuint);
   bitmap_set_bit (bb_info->lr_def, dregno);
   bitmap_clear_bit (bb_info->lr_use, dregno);
 }
      for (link = df->insns[uid].uses; link; link = link->next)
 {
   struct ref *use = link->ref;
   bitmap_set_bit (bb_info->lr_use, ((((((enum rtx_code) ((use)->reg)->code) == SUBREG ? ((((use)->reg)->u.fld[0]).rtx1) : ((use)->reg)))->u.fld[0]).rtuint));
 }
    }
}
static void
df_lr_local_compute (struct df *df, bitmap blocks)
{
  basic_block bb;
  do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { df_bb_lr_local_compute (df, bb); };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
    ;
}
static void
df_bb_reg_info_compute (struct df *df, basic_block bb, bitmap live)
{
  struct reg_info *reg_info1 = df->regs;
  struct bb_df_info *bb_info = (&df->bbs[(bb)->index]);
  rtx insn;
  bitmap_copy (live, bb_info->lr_out);
  for ((insn) = (bb)->end_; (insn) != ((((bb)->head_)->u.fld[1]).rtx1); (insn) = (((insn)->u.fld[1]).rtx1))
    {
      unsigned int uid = (((insn)->u.fld[0]).rtint);
      unsigned int regno;
      struct df_link *link;
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      for (link = df->insns[uid].defs; link; link = link->next)
 {
   struct ref *def = link->ref;
   unsigned int dregno = ((((((enum rtx_code) ((def)->reg)->code) == SUBREG ? ((((def)->reg)->u.fld[0]).rtx1) : ((def)->reg)))->u.fld[0]).rtuint);
   bitmap_clear_bit (live, dregno);
   reg_info1[dregno].n_defs++;
 }
      for (link = df->insns[uid].uses; link; link = link->next)
 {
   struct ref *use = link->ref;
   unsigned int uregno = ((((((enum rtx_code) ((use)->reg)->code) == SUBREG ? ((((use)->reg)->u.fld[0]).rtx1) : ((use)->reg)))->u.fld[0]).rtuint);
   bitmap_set_bit (live, uregno);
   reg_info1[uregno].n_uses++;
 }
      do { bitmap_element *ptr_ = (live)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (regno) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { reg_info1[regno].lifetime++; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
        ;
    }
}
static void
df_reg_info_compute (struct df *df, bitmap blocks)
{
  basic_block bb;
  bitmap live;
  live = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { df_bb_reg_info_compute (df, bb, live); };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
    ;
  do { if (live) { bitmap_clear (live); free (live); (live) = 0; } } while (0);
}
static int
df_bb_luids_set (struct df *df, basic_block bb)
{
  rtx insn;
  int luid = 0;
  for ((insn) = (bb)->head_; (insn) != ((((bb)->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 ((df)->insns[(((insn)->u.fld[0]).rtint)].luid) = luid++;
      ((df)->insns[(((insn)->u.fld[0]).rtint)].luid) = luid;
    }
  return luid;
}
static int
df_luids_set (struct df *df, bitmap blocks)
{
  basic_block bb;
  int total = 0;
  do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { total += df_bb_luids_set (df, bb); };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
      ;
  return total;
}
static void
df_analyze_1 (struct df *df, bitmap blocks, int flags, int update)
{
  int aflags;
  int dflags;
  int i;
  basic_block bb;
  struct dataflow dflow;
  dflags = 0;
  aflags = flags;
  if (flags & 16)
    aflags |= 1 | 64;
  if (flags & 8)
    aflags |= 2;
  if (flags & 2)
    aflags |= 128;
  if (flags & 32)
    aflags |= 4;
  if (! blocks)
    blocks = df->all_blocks;
  df->flags = flags;
  if (update)
    {
      df_refs_update (df, ((void *)0));
    }
  else
    {
      df_refs_queue (df);
      df_refs_record (df, blocks);
      df_refs_process (df);
    }
  df_bitmaps_alloc (df, ((void *)0), aflags);
  df_luids_set (df, blocks);
  if (aflags & 64)
    {
      df_reg_def_chain_create (df, blocks, 0);
    }
  if (aflags & 128)
    {
      df_reg_use_chain_create (df, blocks, 0);
    }
  df->dfs_order = xmalloc (sizeof (int) * n_basic_blocks);
  df->rc_order = xmalloc (sizeof (int) * n_basic_blocks);
  df->rts_order = xmalloc (sizeof (int) * n_basic_blocks);
  df->inverse_dfs_map = xmalloc (sizeof (int) * last_basic_block);
  df->inverse_rc_map = xmalloc (sizeof (int) * last_basic_block);
  df->inverse_rts_map = xmalloc (sizeof (int) * last_basic_block);
  flow_depth_first_order_compute (df->dfs_order, df->rc_order);
  flow_reverse_top_sort_order_compute (df->rts_order);
  for (i = 0; i < n_basic_blocks; i++)
    {
      df->inverse_dfs_map[df->dfs_order[i]] = i;
      df->inverse_rc_map[df->rc_order[i]] = i;
      df->inverse_rts_map[df->rts_order[i]] = i;
    }
  if (aflags & 1)
    {
      dflow.in = xmalloc (sizeof (bitmap) * last_basic_block);
      dflow.out = xmalloc (sizeof (bitmap) * last_basic_block);
      dflow.gen = xmalloc (sizeof (bitmap) * last_basic_block);
      dflow.kill = xmalloc (sizeof (bitmap) * last_basic_block);
      df_rd_local_compute (df, df->flags & 1 ? blocks : df->all_blocks);
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   dflow.in[bb->index] = (&df->bbs[(bb)->index])->rd_in;
   dflow.out[bb->index] = (&df->bbs[(bb)->index])->rd_out;
   dflow.gen[bb->index] = (&df->bbs[(bb)->index])->rd_gen;
   dflow.kill[bb->index] = (&df->bbs[(bb)->index])->rd_kill;
 }
      dflow.repr = SR_BITMAP;
      dflow.dir = DF_FORWARD;
      dflow.conf_op = DF_UNION;
      dflow.transfun = df_rd_transfer_function;
      dflow.n_blocks = n_basic_blocks;
      dflow.order = df->rc_order;
      dflow.data = ((void *)0);
      iterative_dataflow (&dflow);
      free (dflow.in);
      free (dflow.out);
      free (dflow.gen);
      free (dflow.kill);
    }
  if (aflags & 16)
    {
      df_ud_chain_create (df, df->all_blocks);
      if (! (flags & 1))
 dflags |= 1;
    }
  if (aflags & 2)
    {
      dflow.in = xmalloc (sizeof (bitmap) * last_basic_block);
      dflow.out = xmalloc (sizeof (bitmap) * last_basic_block);
      dflow.gen = xmalloc (sizeof (bitmap) * last_basic_block);
      dflow.kill = xmalloc (sizeof (bitmap) * last_basic_block);
      df_ru_local_compute (df, df->flags & 2 ? blocks : df->all_blocks);
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   dflow.in[bb->index] = (&df->bbs[(bb)->index])->ru_in;
   dflow.out[bb->index] = (&df->bbs[(bb)->index])->ru_out;
   dflow.gen[bb->index] = (&df->bbs[(bb)->index])->ru_gen;
   dflow.kill[bb->index] = (&df->bbs[(bb)->index])->ru_kill;
 }
      dflow.repr = SR_BITMAP;
      dflow.dir = DF_BACKWARD;
      dflow.conf_op = DF_UNION;
      dflow.transfun = df_ru_transfer_function;
      dflow.n_blocks = n_basic_blocks;
      dflow.order = df->rts_order;
      dflow.data = ((void *)0);
      iterative_dataflow (&dflow);
      free (dflow.in);
      free (dflow.out);
      free (dflow.gen);
      free (dflow.kill);
    }
  if (aflags & 8)
    {
      df_du_chain_create (df, df->all_blocks);
      if (! (flags & 2))
 dflags |= 2;
    }
  if (dflags)
    df_bitmaps_free (df, dflags);
  if (aflags & 4)
    {
      dflow.in = xmalloc (sizeof (bitmap) * last_basic_block);
      dflow.out = xmalloc (sizeof (bitmap) * last_basic_block);
      dflow.gen = xmalloc (sizeof (bitmap) * last_basic_block);
      dflow.kill = xmalloc (sizeof (bitmap) * last_basic_block);
      df_lr_local_compute (df, df->flags & 4 ? blocks : df->all_blocks);
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   dflow.in[bb->index] = (&df->bbs[(bb)->index])->lr_in;
   dflow.out[bb->index] = (&df->bbs[(bb)->index])->lr_out;
   dflow.gen[bb->index] = (&df->bbs[(bb)->index])->lr_use;
   dflow.kill[bb->index] = (&df->bbs[(bb)->index])->lr_def;
 }
      dflow.repr = SR_BITMAP;
      dflow.dir = DF_BACKWARD;
      dflow.conf_op = DF_UNION;
      dflow.transfun = df_lr_transfer_function;
      dflow.n_blocks = n_basic_blocks;
      dflow.order = df->rts_order;
      dflow.data = ((void *)0);
      iterative_dataflow (&dflow);
      free (dflow.in);
      free (dflow.out);
      free (dflow.gen);
      free (dflow.kill);
    }
  if (aflags & 32)
    {
      df_reg_info_compute (df, df->all_blocks);
    }
  free (df->dfs_order);
  free (df->rc_order);
  free (df->rts_order);
  free (df->inverse_rc_map);
  free (df->inverse_dfs_map);
  free (df->inverse_rts_map);
}
struct df *
df_init (void)
{
  struct df *df;
  df = xcalloc (1, sizeof (struct df));
  ddf = df;
  return df;
}
static int
df_refs_queue (struct df *df)
{
  df->def_id_save = df->def_id;
  df->use_id_save = df->use_id;
  return 0;
}
static int
df_refs_process (struct df *df)
{
  unsigned int i;
  for (i = df->def_id_save; i != df->def_id; i++)
    {
      struct ref *def = df->defs[i];
      unsigned int uid = (((((def)->insn)->u.fld[0]).rtint));
      df->insns[uid].defs
 = df_link_create (def, df->insns[uid].defs);
    }
  for (i = df->use_id_save; i != df->use_id; i++)
    {
      struct ref *use = df->uses[i];
      unsigned int uid = (((((use)->insn)->u.fld[0]).rtint));
      df->insns[uid].uses
 = df_link_create (use, df->insns[uid].uses);
    }
  return 0;
}
static int
df_bb_refs_update (struct df *df, basic_block bb)
{
  rtx insn;
  int count = 0;
  for ((insn) = (bb)->head_; (insn) != ((((bb)->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1))
    {
      unsigned int uid;
      uid = (((insn)->u.fld[0]).rtint);
      if (bitmap_bit_p (df->insns_modified, uid))
 {
   df_insn_refs_unlink (df, bb, insn);
   df_insn_refs_record (df, bb, insn);
   count++;
 }
    }
  return count;
}
static int
df_refs_update (struct df *df, bitmap blocks)
{
  basic_block bb;
  int count = 0, bbno;
  df->n_regs = max_reg_num ();
  if (df->n_regs >= df->reg_size)
    df_reg_table_realloc (df, 0);
  df_refs_queue (df);
  if (!blocks)
    {
      do { unsigned int node_; do { bitmap_element *ptr_ = (df->bbs_modified)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { count += df_bb_refs_update (df, bb); };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
   ;
    }
  else
    {
      do { bitmap_element *ptr1_ = (df->bbs_modified)->first; bitmap_element *ptr2_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr1_ != 0 && ptr1_->indx < indx_) ptr1_ = ptr1_->next; if (ptr1_ != 0 && ptr1_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr1_ != 0 ; ptr1_ = ptr1_->next) { while (ptr2_ != 0 && ptr2_->indx < ptr1_->indx) ptr2_ = ptr2_->next; if (ptr2_ == 0) { ptr1_ = (bitmap_element *)0; break; } else if (ptr2_->indx > ptr1_->indx) { bit_num_ = word_num_ = 0; continue; } for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = (ptr1_->bits[word_num_] & ptr2_->bits[word_num_]); if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (bbno) = (ptr1_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { count += df_bb_refs_update (df, (((basic_block_info)->data.bb[(bbno)]))); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
    }
  df_refs_process (df);
  return count;
}
static int
df_modified_p (struct df *df, bitmap blocks)
{
  int update = 0;
  basic_block bb;
  if (!df->n_bbs)
    return 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (bitmap_bit_p (df->bbs_modified, bb->index)
 && (! blocks || (blocks == (bitmap) -1) || bitmap_bit_p (blocks, bb->index)))
    {
      update = 1;
      break;
    }
  return update;
}
int
df_analyze (struct df *df, bitmap blocks, int flags)
{
  int update;
  if (df->n_bbs && df->n_bbs != (unsigned int) last_basic_block)
    fancy_abort ("gcc.c", 440680, "?");
  update = df_modified_p (df, blocks);
  if (update || (flags != df->flags))
    {
      if (! blocks)
 {
   if (df->n_bbs)
     {
       df_free (df);
     }
   df_alloc (df, max_reg_num ());
   df_analyze_1 (df, 0, flags, 0);
   update = 1;
 }
      else
 {
   if (blocks == (bitmap) -1)
     blocks = df->bbs_modified;
   if (! df->n_bbs)
     fancy_abort ("gcc.c", 440703, "?");
   df_analyze_1 (df, blocks, flags, 1);
   bitmap_clear (df->bbs_modified);
   bitmap_clear (df->insns_modified);
 }
    }
  return update;
}
static unsigned
prune_to_subcfg (int list[], unsigned len, bitmap blocks)
{
  unsigned act, last;
  for (act = 0, last = 0; act < len; act++)
    if (bitmap_bit_p (blocks, list[act]))
      list[last++] = list[act];
  return last;
}
void
df_analyze_subcfg (struct df *df, bitmap blocks, int flags)
{
  rtx insn;
  basic_block bb;
  struct dataflow dflow;
  unsigned n_blocks;
  if (flags & 16)
    flags |= 1 | 64;
  if (flags & 8)
    flags |= 2;
  if (flags & 2)
    flags |= 128;
  if (flags & 32)
    flags |= 4;
  if (!df->n_bbs)
    {
      df_alloc (df, max_reg_num ());
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   for ((insn) = (bb)->head_; (insn) != ((((bb)->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1))
     {
       df_insn_modify (df, bb, insn);
     }
 }
    }
  df->flags = flags;
  df_reg_def_chain_clean (df);
  df_reg_use_chain_clean (df);
  df_refs_update (df, blocks);
  do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { if (bitmap_bit_p (df->bbs_modified, bb->index)) { for ((insn) = (bb)->head_; (insn) != ((((bb)->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1)) { bitmap_clear_bit (df->insns_modified, (((insn)->u.fld[0]).rtint)); } bitmap_clear_bit (df->bbs_modified, bb->index); } };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
      ;
  df_bitmaps_alloc (df, blocks, flags);
  df_luids_set (df, blocks);
  if (flags & 64)
    {
      df_reg_def_chain_create (df, blocks, 1);
    }
  if (flags & 128)
    {
      df_reg_use_chain_create (df, blocks, 1);
    }
  df->dfs_order = xmalloc (sizeof (int) * n_basic_blocks);
  df->rc_order = xmalloc (sizeof (int) * n_basic_blocks);
  df->rts_order = xmalloc (sizeof (int) * n_basic_blocks);
  flow_depth_first_order_compute (df->dfs_order, df->rc_order);
  flow_reverse_top_sort_order_compute (df->rts_order);
  n_blocks = prune_to_subcfg (df->dfs_order, n_basic_blocks, blocks);
  prune_to_subcfg (df->rc_order, n_basic_blocks, blocks);
  prune_to_subcfg (df->rts_order, n_basic_blocks, blocks);
  dflow.in = xmalloc (sizeof (bitmap) * last_basic_block);
  dflow.out = xmalloc (sizeof (bitmap) * last_basic_block);
  dflow.gen = xmalloc (sizeof (bitmap) * last_basic_block);
  dflow.kill = xmalloc (sizeof (bitmap) * last_basic_block);
  if (flags & 1)
    {
      df_rd_local_compute (df, blocks);
      do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { dflow.in[bb->index] = (&df->bbs[(bb)->index])->rd_in; dflow.out[bb->index] = (&df->bbs[(bb)->index])->rd_out; dflow.gen[bb->index] = (&df->bbs[(bb)->index])->rd_gen; dflow.kill[bb->index] = (&df->bbs[(bb)->index])->rd_kill; };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
   ;
      dflow.repr = SR_BITMAP;
      dflow.dir = DF_FORWARD;
      dflow.conf_op = DF_UNION;
      dflow.transfun = df_rd_transfer_function;
      dflow.n_blocks = n_blocks;
      dflow.order = df->rc_order;
      dflow.data = ((void *)0);
      iterative_dataflow (&dflow);
    }
  if (flags & 16)
    {
      df_ud_chain_create (df, blocks);
    }
  if (flags & 2)
    {
      df_ru_local_compute (df, blocks);
      do { unsigned int node_; do { bitmap_element *ptr_ = (blocks)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (node_) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); {(bb) = (((basic_block_info)->data.bb[(node_)])); { dflow.in[bb->index] = (&df->bbs[(bb)->index])->ru_in; dflow.out[bb->index] = (&df->bbs[(bb)->index])->ru_out; dflow.gen[bb->index] = (&df->bbs[(bb)->index])->ru_gen; dflow.kill[bb->index] = (&df->bbs[(bb)->index])->ru_kill; };}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0); } while (0)
   ;
      dflow.repr = SR_BITMAP;
      dflow.dir = DF_BACKWARD;
      dflow.conf_op = DF_UNION;
      dflow.transfun = df_ru_transfer_function;
      dflow.n_blocks = n_blocks;
      dflow.order = df->rts_order;
      dflow.data = ((void *)0);
      iterative_dataflow (&dflow);
    }
  if (flags & 8)
    {
      df_du_chain_create (df, blocks);
    }
  if (flags & 4)
    {
      df_lr_local_compute (df, blocks);
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   dflow.in[bb->index] = (&df->bbs[(bb)->index])->lr_in;
   dflow.out[bb->index] = (&df->bbs[(bb)->index])->lr_out;
   dflow.gen[bb->index] = (&df->bbs[(bb)->index])->lr_use;
   dflow.kill[bb->index] = (&df->bbs[(bb)->index])->lr_def;
 }
      dflow.repr = SR_BITMAP;
      dflow.dir = DF_BACKWARD;
      dflow.conf_op = DF_UNION;
      dflow.transfun = df_lr_transfer_function;
      dflow.n_blocks = n_blocks;
      dflow.order = df->rts_order;
      dflow.data = ((void *)0);
      iterative_dataflow (&dflow);
    }
  if (flags & 32)
    {
      df_reg_info_compute (df, blocks);
    }
  free (dflow.in);
  free (dflow.out);
  free (dflow.gen);
  free (dflow.kill);
  free (df->dfs_order);
  free (df->rc_order);
  free (df->rts_order);
}
void
df_finish (struct df *df)
{
  df_free (df);
  free (df);
}
static void
df_insn_refs_unlink (struct df *df, basic_block bb , rtx insn)
{
  struct df_link *link;
  unsigned int uid;
  uid = (((insn)->u.fld[0]).rtint);
  for (link = df->insns[uid].defs; link; link = link->next)
    df_def_unlink (df, link->ref);
  for (link = df->insns[uid].uses; link; link = link->next)
    df_use_unlink (df, link->ref);
  df->insns[uid].defs = 0;
  df->insns[uid].uses = 0;
}
rtx
df_insn_delete (struct df *df, basic_block bb , rtx insn)
{
  if (insn == (bb)->head_)
    fancy_abort ("gcc.c", 441013, "?");
  delete_insn (insn);
  df_insn_modify (df, bb, insn);
  return (((insn)->u.fld[2]).rtx1);
}
static void
df_bb_modify (struct df *df, basic_block bb)
{
  if ((unsigned) bb->index >= df->n_bbs)
    df_bb_table_realloc (df, df->n_bbs);
  bitmap_set_bit (df->bbs_modified, bb->index);
}
void
df_insn_modify (struct df *df, basic_block bb, rtx insn)
{
  unsigned int uid;
  uid = (((insn)->u.fld[0]).rtint);
  if (uid >= df->insn_size)
    df_insn_table_realloc (df, uid);
  df_bb_modify (df, bb);
  bitmap_set_bit (df->insns_modified, uid);
}
typedef struct replace_args
{
  rtx match;
  rtx replacement;
  rtx insn;
  int modified;
} replace_args;
static int
df_rtx_mem_replace (rtx *px, void *data)
{
  replace_args *args = (replace_args *) data;
  rtx mem = *px;
  if (mem == (rtx) 0)
    return 0;
  switch (((enum rtx_code) (mem)->code))
    {
    case MEM:
      break;
    case CONST_DOUBLE:
      return -1;
    default:
      return 0;
    }
  if (!rtx_equal_p (args->match, mem))
    return 0;
  validate_change (args->insn, px, args->replacement, 1);
  args->modified++;
  return 0;
}
int
df_insn_mem_replace (struct df *df, basic_block bb, rtx insn, rtx mem, rtx reg)
{
  replace_args args;
  args.insn = insn;
  args.match = mem;
  args.replacement = reg;
  args.modified = 0;
  for_each_rtx (&insn, df_rtx_mem_replace, &args);
  if (args.modified)
    df_insn_modify (df, bb, insn);
  return args.modified;
}
static int
df_rtx_reg_replace (rtx *px, void *data)
{
  rtx x = *px;
  replace_args *args = (replace_args *) data;
  if (x == (rtx) 0)
    return 0;
  if (x == args->match)
    {
      validate_change (args->insn, px, args->replacement, 1);
      args->modified++;
    }
  return 0;
}
void
df_refs_reg_replace (struct df *df, bitmap blocks, struct df_link *chain, rtx oldreg, rtx newreg)
{
  struct df_link *link;
  replace_args args;
  if (! blocks)
    blocks = df->all_blocks;
  args.match = oldreg;
  args.replacement = newreg;
  args.modified = 0;
  for (link = chain; link; link = link->next)
    {
      struct ref *ref = link->ref;
      rtx insn = ((ref)->insn);
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      if (bitmap_bit_p (blocks, (((((ref)->insn)->u.fld[3]).bb)->index)))
 {
   df_ref_reg_replace (df, ref, oldreg, newreg);
   if ((! link->next || ((ref)->insn)
       != ((link->next->ref)->insn))
       && (((insn)->u.fld[8]).rtx1))
     {
       args.insn = insn;
       for_each_rtx (&(((insn)->u.fld[8]).rtx1), df_rtx_reg_replace, &args);
     }
 }
      else
 {
   fancy_abort ("gcc.c", 441194, "?");
 }
    }
}
int
df_reg_replace (struct df *df, bitmap blocks, rtx oldreg, rtx newreg)
{
  unsigned int oldregno = (((oldreg)->u.fld[0]).rtuint);
  df_refs_reg_replace (df, blocks, df->regs[oldregno].defs, oldreg, newreg);
  df_refs_reg_replace (df, blocks, df->regs[oldregno].uses, oldreg, newreg);
  return 1;
}
int
df_ref_reg_replace (struct df *df, struct ref *ref, rtx oldreg, rtx newreg)
{
  if (! ((((enum rtx_code) (((ref)->insn))->code) == INSN) || (((enum rtx_code) (((ref)->insn))->code) == JUMP_INSN) || (((enum rtx_code) (((ref)->insn))->code) == CALL_INSN)))
    return 0;
  if (oldreg && oldreg != ((ref)->reg))
    fancy_abort ("gcc.c", 441226, "?");
  if (! validate_change (((ref)->insn), ((ref)->loc), newreg, 1))
    return 0;
  df_insn_modify (df, (((((ref)->insn)->u.fld[3]).bb)), ((ref)->insn));
  return 1;
}
struct ref*
df_bb_def_use_swap (struct df *df, basic_block bb, rtx def_insn, rtx use_insn, unsigned int regno)
{
  struct ref *def;
  struct ref *use;
  int def_uid;
  int use_uid;
  struct df_link *link;
  def = df_bb_insn_regno_first_def_find (df, bb, def_insn, regno);
  if (! def)
    return 0;
  use = df_bb_insn_regno_last_use_find (df, bb, use_insn, regno);
  if (! use)
    return 0;
  use_uid = (((use_insn)->u.fld[0]).rtint);
  df_use_unlink (df, use);
  df_ref_unlink (&df->insns[use_uid].uses, use);
  def_uid = (((def_insn)->u.fld[0]).rtint);
  link = df_ref_unlink (&df->insns[def_uid].defs, def);
  link->ref = def;
  link->next = df->insns[use_uid].defs;
  df->insns[use_uid].defs = link;
  ((def)->insn) = use_insn;
  return def;
}
static void
df_insns_modify (struct df *df, basic_block bb, rtx first_insn, rtx last_insn)
{
  rtx insn;
  for (insn = first_insn; ; insn = (((insn)->u.fld[2]).rtx1))
    {
      unsigned int uid;
      if ((((enum rtx_code) (insn)->code) == CALL_INSN
    && ! (((insn))->unchanging))
   || ((enum rtx_code) (insn)->code) == CODE_LABEL)
 fancy_abort ("gcc.c", 441295, "?");
      uid = (((insn)->u.fld[0]).rtint);
      if (uid >= df->insn_size)
 df_insn_table_realloc (df, uid);
      df_insn_modify (df, bb, insn);
      if (insn == last_insn)
 break;
    }
}
rtx
df_pattern_emit_before (struct df *df, rtx pattern, basic_block bb, rtx insn)
{
  rtx ret_insn;
  rtx prev_insn = (((insn)->u.fld[1]).rtx1);
  if (insn == (bb)->head_)
    fancy_abort ("gcc.c", 441319, "?");
  ret_insn = emit_insn_before (pattern, insn);
  if (ret_insn == insn)
    return ret_insn;
  df_insns_modify (df, bb, (((prev_insn)->u.fld[2]).rtx1), ret_insn);
  return ret_insn;
}
rtx
df_pattern_emit_after (struct df *df, rtx pattern, basic_block bb, rtx insn)
{
  rtx ret_insn;
  ret_insn = emit_insn_after (pattern, insn);
  if (ret_insn == insn)
    return ret_insn;
  df_insns_modify (df, bb, (((insn)->u.fld[2]).rtx1), ret_insn);
  return ret_insn;
}
rtx
df_jump_pattern_emit_after (struct df *df, rtx pattern, basic_block bb, rtx insn)
{
  rtx ret_insn;
  ret_insn = emit_jump_insn_after (pattern, insn);
  if (ret_insn == insn)
    return ret_insn;
  df_insns_modify (df, bb, (((insn)->u.fld[2]).rtx1), ret_insn);
  return ret_insn;
}
rtx
df_insn_move_before (struct df *df, basic_block bb, rtx insn, basic_block before_bb, rtx before_insn)
{
  struct df_link *link;
  unsigned int uid;
  if (! bb)
    return df_pattern_emit_before (df, insn, before_bb, before_insn);
  uid = (((insn)->u.fld[0]).rtint);
  for (link = df->insns[uid].defs; link; link = link->next)
    (((((link->ref)->insn)->u.fld[3]).bb)) = before_bb;
  for (link = df->insns[uid].uses; link; link = link->next)
    (((((link->ref)->insn)->u.fld[3]).bb)) = before_bb;
  return emit_insn_before (insn, before_insn);
}
int
df_insn_regno_def_p (struct df *df, basic_block bb ,
       rtx insn, unsigned int regno)
{
  unsigned int uid;
  struct df_link *link;
  uid = (((insn)->u.fld[0]).rtint);
  for (link = df->insns[uid].defs; link; link = link->next)
    {
      struct ref *def = link->ref;
      if (((((((enum rtx_code) ((def)->reg)->code) == SUBREG ? ((((def)->reg)->u.fld[0]).rtx1) : ((def)->reg)))->u.fld[0]).rtuint) == regno)
 return 1;
    }
  return 0;
}
struct ref *
df_find_def (struct df *df, rtx insn, rtx reg)
{
  struct df_link *defs;
  for (defs = ((df)->insns[(((insn)->u.fld[0]).rtint)].defs); defs; defs = defs->next)
    if (rtx_equal_p (((defs->ref)->reg), reg))
      return defs->ref;
  return ((void *)0);
}
int
df_reg_used (struct df *df, rtx insn, rtx reg)
{
  struct df_link *uses;
  for (uses = ((df)->insns[(((insn)->u.fld[0]).rtint)].uses); uses; uses = uses->next)
    if (rtx_equal_p (((uses->ref)->reg), reg))
      return 1;
  return 0;
}
static int
df_def_dominates_all_uses_p (struct df *df , struct ref *def)
{
  struct df_link *du_link;
  for (du_link = ((def)->chain); du_link; du_link = du_link->next)
    {
      struct ref *use = du_link->ref;
      struct df_link *ud_link;
      for (ud_link = ((use)->chain); ud_link; ud_link = ud_link->next)
 if (ud_link->ref != def)
   return 0;
    }
  return 1;
}
int
df_insn_dominates_all_uses_p (struct df *df, basic_block bb ,
         rtx insn)
{
  unsigned int uid;
  struct df_link *link;
  uid = (((insn)->u.fld[0]).rtint);
  for (link = df->insns[uid].defs; link; link = link->next)
    {
      struct ref *def = link->ref;
      if (! df_def_dominates_all_uses_p (df, def))
 return 0;
    }
  return 1;
}
static int
df_def_dominates_uses_p (struct df *df , struct ref *def,
    bitmap blocks)
{
  struct df_link *du_link;
  for (du_link = ((def)->chain); du_link; du_link = du_link->next)
    {
      struct ref *use = du_link->ref;
      struct df_link *ud_link;
      if (bitmap_bit_p (blocks, (((((use)->insn)->u.fld[3]).bb)->index)))
 {
   for (ud_link = ((use)->chain); ud_link; ud_link = ud_link->next)
     if (ud_link->ref != def)
       return 0;
 }
    }
  return 1;
}
int
df_insn_dominates_uses_p (struct df *df, basic_block bb ,
     rtx insn, bitmap blocks)
{
  unsigned int uid;
  struct df_link *link;
  uid = (((insn)->u.fld[0]).rtint);
  for (link = df->insns[uid].defs; link; link = link->next)
    {
      struct ref *def = link->ref;
      if (bitmap_bit_p (blocks, (((((def)->insn)->u.fld[3]).bb)->index))
   && ! df_def_dominates_uses_p (df, def, blocks))
 return 0;
    }
  return 1;
}
basic_block
df_regno_bb (struct df *df, unsigned int regno)
{
  struct df_link *defs = df->regs[regno].defs;
  struct df_link *uses = df->regs[regno].uses;
  struct ref *def = defs ? defs->ref : 0;
  struct ref *use = uses ? uses->ref : 0;
  basic_block bb_def = def ? (((((def)->insn)->u.fld[3]).bb)) : 0;
  basic_block bb_use = use ? (((((use)->insn)->u.fld[3]).bb)) : 0;
  return bb_def == bb_use ? bb_def : 0;
}
int
df_reg_global_p (struct df *df, rtx reg)
{
  return df_regno_bb (df, (((reg)->u.fld[0]).rtuint)) != 0;
}
int
df_reg_lifetime (struct df *df, rtx reg)
{
  return df->regs[(((reg)->u.fld[0]).rtuint)].lifetime;
}
int
df_bb_reg_live_start_p (struct df *df, basic_block bb, rtx reg)
{
  struct bb_df_info *bb_info = (&df->bbs[(bb)->index]);
  return bitmap_bit_p (bb_info->lr_in, (((reg)->u.fld[0]).rtuint));
}
int
df_bb_reg_live_end_p (struct df *df, basic_block bb, rtx reg)
{
  struct bb_df_info *bb_info = (&df->bbs[(bb)->index]);
  return bitmap_bit_p (bb_info->lr_out, (((reg)->u.fld[0]).rtuint));
}
int
df_bb_regs_lives_compare (struct df *df, basic_block bb, rtx reg1, rtx reg2)
{
  unsigned int regno1 = (((reg1)->u.fld[0]).rtuint);
  unsigned int regno2 = (((reg2)->u.fld[0]).rtuint);
  struct ref *def1;
  struct ref *use1;
  struct ref *def2;
  struct ref *use2;
  if (df_regno_bb (df, regno1) != bb
      || df_regno_bb (df, regno2) != bb)
    fancy_abort ("gcc.c", 441617, "?");
  def2 = df_bb_regno_first_def_find (df, bb, regno2);
  use1 = df_bb_regno_last_use_find (df, bb, regno1);
  if (((df)->insns[(((((def2)->insn))->u.fld[0]).rtint)].luid)
      > ((df)->insns[(((((use1)->insn))->u.fld[0]).rtint)].luid))
    return -1;
  def1 = df_bb_regno_first_def_find (df, bb, regno1);
  use2 = df_bb_regno_last_use_find (df, bb, regno2);
  if (((df)->insns[(((((def1)->insn))->u.fld[0]).rtint)].luid)
      > ((df)->insns[(((((use2)->insn))->u.fld[0]).rtint)].luid))
    return 1;
  return 0;
}
struct ref *
df_bb_regno_last_use_find (struct df *df, basic_block bb, unsigned int regno)
{
  struct df_link *link;
  for (link = df->regs[regno].uses; link; link = link->next)
    {
      struct ref *use = link->ref;
      if ((((((use)->insn)->u.fld[3]).bb)) == bb)
 return use;
    }
  return 0;
}
struct ref *
df_bb_regno_first_def_find (struct df *df, basic_block bb, unsigned int regno)
{
  struct df_link *link;
  for (link = df->regs[regno].defs; link; link = link->next)
    {
      struct ref *def = link->ref;
      if ((((((def)->insn)->u.fld[3]).bb)) == bb)
 return def;
    }
  return 0;
}
struct ref *
df_bb_regno_last_def_find (struct df *df, basic_block bb, unsigned int regno)
{
  struct df_link *link;
  struct ref *last_def = ((void *)0);
  int in_bb = 0;
  for (link = df->regs[regno].defs; link; link = link->next)
    {
      struct ref *def = link->ref;
      if ((((((def)->insn)->u.fld[3]).bb)) == bb)
   in_bb = 1;
      else if (in_bb)
        return last_def;
      last_def = def;
    }
  return last_def;
}
static struct ref *
df_bb_insn_regno_last_use_find (struct df *df,
    basic_block bb , rtx insn,
    unsigned int regno)
{
  unsigned int uid;
  struct df_link *link;
  uid = (((insn)->u.fld[0]).rtint);
  for (link = df->insns[uid].uses; link; link = link->next)
    {
      struct ref *use = link->ref;
      if (((((((enum rtx_code) ((use)->reg)->code) == SUBREG ? ((((use)->reg)->u.fld[0]).rtx1) : ((use)->reg)))->u.fld[0]).rtuint) == regno)
 return use;
    }
  return 0;
}
static struct ref *
df_bb_insn_regno_first_def_find (struct df *df,
     basic_block bb , rtx insn,
     unsigned int regno)
{
  unsigned int uid;
  struct df_link *link;
  uid = (((insn)->u.fld[0]).rtint);
  for (link = df->insns[uid].defs; link; link = link->next)
    {
      struct ref *def = link->ref;
      if (((((((enum rtx_code) ((def)->reg)->code) == SUBREG ? ((((def)->reg)->u.fld[0]).rtx1) : ((def)->reg)))->u.fld[0]).rtuint) == regno)
 return def;
    }
  return 0;
}
rtx
df_bb_single_def_use_insn_find (struct df *df, basic_block bb, rtx insn, rtx reg)
{
  struct ref *def;
  struct ref *use;
  struct df_link *du_link;
  def = df_bb_insn_regno_first_def_find (df, bb, insn, (((reg)->u.fld[0]).rtuint));
  if (! def)
    fancy_abort ("gcc.c", 441762, "?");
  du_link = ((def)->chain);
  if (! du_link)
    return (rtx) 0;
  use = du_link->ref;
  if (! use)
    return (rtx) 0;
  if (du_link->next)
    return (rtx) 0;
  return ((use)->insn);
}
static void
df_chain_dump (struct df_link *link, FILE *file)
{
  fprintf (file, "{ ");
  for (; link; link = link->next)
    {
      fprintf (file, "%c%d ",
        (((link->ref)->type) == DF_REF_REG_DEF) ? 'd' : 'u',
        ((link->ref)->id));
    }
  fprintf (file, "}");
}
static void
df_chain_dump_regno (struct df_link *link, FILE *file)
{
  fprintf (file, "{ ");
  for (; link; link = link->next)
    {
      fprintf (file, "%c%d(%d) ",
        (((link->ref)->type) == DF_REF_REG_DEF) ? 'd' : 'u',
        ((link->ref)->id),
        ((((((enum rtx_code) ((link->ref)->reg)->code) == SUBREG ? ((((link->ref)->reg)->u.fld[0]).rtx1) : ((link->ref)->reg)))->u.fld[0]).rtuint));
    }
  fprintf (file, "}");
}
void
df_dump (struct df *df, int flags, FILE *file)
{
  unsigned int j;
  basic_block bb;
  if (! df || ! file)
    return;
  fprintf (file, "\nDataflow summary:\n");
  fprintf (file, "n_regs = %d, n_defs = %d, n_uses = %d, n_bbs = %d\n",
    df->n_regs, df->n_defs, df->n_uses, df->n_bbs);
  if (flags & 1)
    {
      basic_block bb;
      fprintf (file, "Reaching defs:\n");
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   struct bb_df_info *bb_info = (&df->bbs[(bb)->index]);
   if (! bb_info->rd_in)
     continue;
   fprintf (file, "bb %d in  \t", bb->index);
   bitmap_print (file, bb_info->rd_in, "", "\n");
   fprintf (file, "bb %d gen \t", bb->index);
   bitmap_print (file, bb_info->rd_gen, "", "\n");
   fprintf (file, "bb %d kill\t", bb->index);
   bitmap_print (file, bb_info->rd_kill, "", "\n");
   fprintf (file, "bb %d out \t", bb->index);
   bitmap_print (file, bb_info->rd_out, "", "\n");
 }
    }
  if (flags & 16)
    {
      fprintf (file, "Use-def chains:\n");
      for (j = 0; j < df->n_defs; j++)
 {
   if (df->defs[j])
     {
       fprintf (file, "d%d bb %d luid %d insn %d reg %d ",
         j, (((((df->defs[j])->insn)->u.fld[3]).bb)->index),
         ((df)->insns[(((((df->defs[j])->insn))->u.fld[0]).rtint)].luid),
         (((((df->defs[j])->insn)->u.fld[0]).rtint)),
         ((((((enum rtx_code) ((df->defs[j])->reg)->code) == SUBREG ? ((((df->defs[j])->reg)->u.fld[0]).rtx1) : ((df->defs[j])->reg)))->u.fld[0]).rtuint));
       if (df->defs[j]->flags & DF_REF_READ_WRITE)
  fprintf (file, "read/write ");
       df_chain_dump (((df->defs[j])->chain), file);
       fprintf (file, "\n");
     }
 }
    }
  if (flags & 2)
    {
      fprintf (file, "Reaching uses:\n");
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   struct bb_df_info *bb_info = (&df->bbs[(bb)->index]);
   if (! bb_info->ru_in)
     continue;
   fprintf (file, "bb %d in  \t", bb->index);
   bitmap_print (file, bb_info->ru_in, "", "\n");
   fprintf (file, "bb %d gen \t", bb->index);
   bitmap_print (file, bb_info->ru_gen, "", "\n");
   fprintf (file, "bb %d kill\t", bb->index);
   bitmap_print (file, bb_info->ru_kill, "", "\n");
   fprintf (file, "bb %d out \t", bb->index);
   bitmap_print (file, bb_info->ru_out, "", "\n");
 }
    }
  if (flags & 8)
    {
      fprintf (file, "Def-use chains:\n");
      for (j = 0; j < df->n_uses; j++)
 {
   if (df->uses[j])
     {
       fprintf (file, "u%d bb %d luid %d insn %d reg %d ",
         j, (((((df->uses[j])->insn)->u.fld[3]).bb)->index),
         ((df)->insns[(((((df->uses[j])->insn))->u.fld[0]).rtint)].luid),
         (((((df->uses[j])->insn)->u.fld[0]).rtint)),
         ((((((enum rtx_code) ((df->uses[j])->reg)->code) == SUBREG ? ((((df->uses[j])->reg)->u.fld[0]).rtx1) : ((df->uses[j])->reg)))->u.fld[0]).rtuint));
       if (df->uses[j]->flags & DF_REF_READ_WRITE)
  fprintf (file, "read/write ");
       df_chain_dump (((df->uses[j])->chain), file);
       fprintf (file, "\n");
     }
 }
    }
  if (flags & 4)
    {
      fprintf (file, "Live regs:\n");
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   struct bb_df_info *bb_info = (&df->bbs[(bb)->index]);
   if (! bb_info->lr_in)
     continue;
   fprintf (file, "bb %d in  \t", bb->index);
   bitmap_print (file, bb_info->lr_in, "", "\n");
   fprintf (file, "bb %d use \t", bb->index);
   bitmap_print (file, bb_info->lr_use, "", "\n");
   fprintf (file, "bb %d def \t", bb->index);
   bitmap_print (file, bb_info->lr_def, "", "\n");
   fprintf (file, "bb %d out \t", bb->index);
   bitmap_print (file, bb_info->lr_out, "", "\n");
 }
    }
  if (flags & (32 | 64 | 128))
    {
      struct reg_info *reg_info1 = df->regs;
      fprintf (file, "Register info:\n");
      for (j = 0; j < df->n_regs; j++)
 {
   if (((flags & 32)
        && (reg_info1[j].n_uses || reg_info1[j].n_defs))
       || ((flags & 64) && reg_info1[j].defs)
       || ((flags & 128) && reg_info1[j].uses))
     {
       fprintf (file, "reg %d", j);
       if ((flags & 64) && (flags & 128))
  {
    basic_block bb = df_regno_bb (df, j);
    if (bb)
      fprintf (file, " bb %d", bb->index);
    else
      fprintf (file, " bb ?");
  }
       if (flags & 32)
  {
    fprintf (file, " life %d", reg_info1[j].lifetime);
  }
       if ((flags & 32) || (flags & 64))
  {
    fprintf (file, " defs ");
    if (flags & 32)
      fprintf (file, "%d ", reg_info1[j].n_defs);
    if (flags & 64)
      df_chain_dump (reg_info1[j].defs, file);
  }
       if ((flags & 32) || (flags & 128))
  {
    fprintf (file, " uses ");
    if (flags & 32)
      fprintf (file, "%d ", reg_info1[j].n_uses);
    if (flags & 128)
      df_chain_dump (reg_info1[j].uses, file);
  }
       fprintf (file, "\n");
     }
 }
    }
  fprintf (file, "\n");
}
void
df_insn_debug (struct df *df, rtx insn, FILE *file)
{
  unsigned int uid;
  int bbi;
  uid = (((insn)->u.fld[0]).rtint);
  if (uid >= df->insn_size)
    return;
  if (df->insns[uid].defs)
    bbi = (((((df->insns[uid].defs->ref)->insn)->u.fld[3]).bb)->index);
  else if (df->insns[uid].uses)
    bbi = (((((df->insns[uid].uses->ref)->insn)->u.fld[3]).bb)->index);
  else
    bbi = -1;
  fprintf (file, "insn %d bb %d luid %d defs ",
    uid, bbi, ((df)->insns[(((insn)->u.fld[0]).rtint)].luid));
  df_chain_dump (df->insns[uid].defs, file);
  fprintf (file, " uses ");
  df_chain_dump (df->insns[uid].uses, file);
  fprintf (file, "\n");
}
void
df_insn_debug_regno (struct df *df, rtx insn, FILE *file)
{
  unsigned int uid;
  int bbi;
  uid = (((insn)->u.fld[0]).rtint);
  if (uid >= df->insn_size)
    return;
  if (df->insns[uid].defs)
    bbi = (((((df->insns[uid].defs->ref)->insn)->u.fld[3]).bb)->index);
  else if (df->insns[uid].uses)
    bbi = (((((df->insns[uid].uses->ref)->insn)->u.fld[3]).bb)->index);
  else
    bbi = -1;
  fprintf (file, "insn %d bb %d luid %d defs ",
    uid, bbi, ((df)->insns[(((insn)->u.fld[0]).rtint)].luid));
  df_chain_dump_regno (df->insns[uid].defs, file);
  fprintf (file, " uses ");
  df_chain_dump_regno (df->insns[uid].uses, file);
  fprintf (file, "\n");
}
static void
df_regno_debug (struct df *df, unsigned int regno, FILE *file)
{
  if (regno >= df->reg_size)
    return;
  fprintf (file, "reg %d life %d defs ",
    regno, df->regs[regno].lifetime);
  df_chain_dump (df->regs[regno].defs, file);
  fprintf (file, " uses ");
  df_chain_dump (df->regs[regno].uses, file);
  fprintf (file, "\n");
}
static void
df_ref_debug (struct df *df, struct ref *ref, FILE *file)
{
  fprintf (file, "%c%d ",
    (((ref)->type) == DF_REF_REG_DEF) ? 'd' : 'u',
    ((ref)->id));
  fprintf (file, "reg %d bb %d luid %d insn %d chain ",
    ((((((enum rtx_code) ((ref)->reg)->code) == SUBREG ? ((((ref)->reg)->u.fld[0]).rtx1) : ((ref)->reg)))->u.fld[0]).rtuint),
    (((((ref)->insn)->u.fld[3]).bb)->index),
    ((df)->insns[(((((ref)->insn))->u.fld[0]).rtint)].luid),
    (((((ref)->insn))->u.fld[0]).rtint));
  df_chain_dump (((ref)->chain), file);
  fprintf (file, "\n");
}
void
debug_df_insn (rtx insn)
{
  df_insn_debug (ddf, insn, stderr);
  debug_rtx (insn);
}
void
debug_df_reg (rtx reg)
{
  df_regno_debug (ddf, (((reg)->u.fld[0]).rtuint), stderr);
}
void
debug_df_regno (unsigned int regno)
{
  df_regno_debug (ddf, regno, stderr);
}
void
debug_df_ref (struct ref *ref)
{
  df_ref_debug (ddf, ref, stderr);
}
void
debug_df_defno (unsigned int defno)
{
  df_ref_debug (ddf, ddf->defs[defno], stderr);
}
void
debug_df_useno (unsigned int defno)
{
  df_ref_debug (ddf, ddf->uses[defno], stderr);
}
void
debug_df_chain (struct df_link *link)
{
  df_chain_dump (link, stderr);
  fputc_unlocked ('\n', stderr);
}
static void
dataflow_set_a_op_b (enum set_representation repr,
       enum df_confluence_op op,
       void *rslt, void *op1, void *op2)
{
  switch (repr)
    {
    case SR_SBITMAP:
      switch (op)
 {
 case DF_UNION:
   sbitmap_a_or_b (rslt, op1, op2);
   break;
 case DF_INTERSECTION:
   sbitmap_a_and_b (rslt, op1, op2);
   break;
     default:
   fancy_abort ("gcc.c", 442142, "?");
 }
      break;
    case SR_BITMAP:
      switch (op)
 {
 case DF_UNION:
   bitmap_operation (rslt, op1, op2, BITMAP_IOR);
   break;
 case DF_INTERSECTION:
   bitmap_operation (rslt, op1, op2, BITMAP_AND);
   break;
     default:
   fancy_abort ("gcc.c", 442158, "?");
 }
      break;
    default:
      fancy_abort ("gcc.c", 442163, "?");
    }
}
static void
dataflow_set_copy_df (enum set_representation repr, void *dest, void *src)
{
  switch (repr)
    {
    case SR_SBITMAP:
      sbitmap_copy (dest, src);
      break;
    case SR_BITMAP:
      bitmap_copy (dest, src);
      break;
    default:
      fancy_abort ("gcc.c", 442181, "?");
    }
}
static void
hybrid_search (basic_block bb, struct dataflow *dataflow,
        sbitmap visited, sbitmap pending, sbitmap considered)
{
  int changed;
  int i = bb->index;
  edge e;
  ((visited)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
  if (!((pending)->elms [(bb->index) / ((unsigned) (8 * 4))] >> (bb->index) % ((unsigned) (8 * 4)) & 1))
    fancy_abort ("gcc.c", 442198, "?");
  ((pending)->elms [(i) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (i) % ((unsigned) (8 * 4))));
  if (dataflow->dir == DF_FORWARD)
    do { bitmap_clear (dataflow->in[i]); for (e = bb->pred; e; e = e->pred_next) { if (e->src == ENTRY_BLOCK_PTR) continue; if (!((considered)->elms [(e->src->index) / ((unsigned) (8 * 4))] >> (e->src->index) % ((unsigned) (8 * 4)) & 1)) continue; dataflow_set_a_op_b (dataflow->repr, dataflow->conf_op, dataflow->in[i], dataflow->in[i], dataflow->out[e->src->index]); } (*dataflow->transfun)(i, &changed, dataflow->in[i], dataflow->out[i], dataflow->gen[i], dataflow->kill[i], dataflow->data); if (!changed) break; for (e = bb->succ; e; e = e->succ_next) { if (e->dest == EXIT_BLOCK_PTR || e->dest->index == i) continue; if (!((considered)->elms [(e->dest->index) / ((unsigned) (8 * 4))] >> (e->dest->index) % ((unsigned) (8 * 4)) & 1)) continue; ((pending)->elms [(e->dest->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (e->dest->index) % ((unsigned) (8 * 4))); } for (e = bb->succ; e; e = e->succ_next) { if (e->dest == EXIT_BLOCK_PTR || e->dest->index == i) continue; if (!((considered)->elms [(e->dest->index) / ((unsigned) (8 * 4))] >> (e->dest->index) % ((unsigned) (8 * 4)) & 1)) continue; if (!((visited)->elms [(e->dest->index) / ((unsigned) (8 * 4))] >> (e->dest->index) % ((unsigned) (8 * 4)) & 1)) hybrid_search (e->dest, dataflow, visited, pending, considered); } } while (0)
                                                      ;
  else
    do { bitmap_clear (dataflow->out[i]); for (e = bb->succ; e; e = e->succ_next) { if (e->dest == EXIT_BLOCK_PTR) continue; if (!((considered)->elms [(e->dest->index) / ((unsigned) (8 * 4))] >> (e->dest->index) % ((unsigned) (8 * 4)) & 1)) continue; dataflow_set_a_op_b (dataflow->repr, dataflow->conf_op, dataflow->out[i], dataflow->out[i], dataflow->in[e->dest->index]); } (*dataflow->transfun)(i, &changed, dataflow->in[i], dataflow->out[i], dataflow->gen[i], dataflow->kill[i], dataflow->data); if (!changed) break; for (e = bb->pred; e; e = e->pred_next) { if (e->src == ENTRY_BLOCK_PTR || e->src->index == i) continue; if (!((considered)->elms [(e->src->index) / ((unsigned) (8 * 4))] >> (e->src->index) % ((unsigned) (8 * 4)) & 1)) continue; ((pending)->elms [(e->src->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (e->src->index) % ((unsigned) (8 * 4))); } for (e = bb->pred; e; e = e->pred_next) { if (e->src == ENTRY_BLOCK_PTR || e->src->index == i) continue; if (!((considered)->elms [(e->src->index) / ((unsigned) (8 * 4))] >> (e->src->index) % ((unsigned) (8 * 4)) & 1)) continue; if (!((visited)->elms [(e->src->index) / ((unsigned) (8 * 4))] >> (e->src->index) % ((unsigned) (8 * 4)) & 1)) hybrid_search (e->src, dataflow, visited, pending, considered); } } while (0)
                                                     ;
}
void
iterative_dataflow (struct dataflow *dataflow)
{
  unsigned i, idx;
  sbitmap visited, pending, considered;
  pending = sbitmap_alloc (last_basic_block);
  visited = sbitmap_alloc (last_basic_block);
  considered = sbitmap_alloc (last_basic_block);
  sbitmap_zero (pending);
  sbitmap_zero (visited);
  sbitmap_zero (considered);
  for (i = 0; i < dataflow->n_blocks; i++)
    {
      idx = dataflow->order[i];
      ((pending)->elms [(idx) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (idx) % ((unsigned) (8 * 4)));
      ((considered)->elms [(idx) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (idx) % ((unsigned) (8 * 4)));
      if (dataflow->dir == DF_FORWARD)
 dataflow_set_copy_df (dataflow->repr,
         dataflow->out[idx], dataflow->gen[idx]);
      else
 dataflow_set_copy_df (dataflow->repr,
         dataflow->in[idx], dataflow->gen[idx]);
    };
  while (1)
    {
      for (i = 0; i < dataflow->n_blocks; i++)
 {
   idx = dataflow->order[i];
   if (((pending)->elms [(idx) / ((unsigned) (8 * 4))] >> (idx) % ((unsigned) (8 * 4)) & 1) && !((visited)->elms [(idx) / ((unsigned) (8 * 4))] >> (idx) % ((unsigned) (8 * 4)) & 1))
     hybrid_search ((((basic_block_info)->data.bb[(idx)])), dataflow,
      visited, pending, considered);
 }
      if (sbitmap_first_set_bit (pending) == -1)
 break;
      sbitmap_zero (visited);
    }
  free(pending);
  free(visited);
  free(considered);
}
extern const char version_string[];
extern const char bug_report_url[];
static char *build_message_string (const char *, ...) ;
static void default_diagnostic_starter (diagnostic_context *,
     diagnostic_info *);
static void default_diagnostic_finalizer (diagnostic_context *,
       diagnostic_info *);
static void error_recursion (diagnostic_context *) ;
static unsigned char text_specifies_location (text_info *, location_t *);
static unsigned char diagnostic_count_diagnostic (diagnostic_context *,
      diagnostic_info *);
static void diagnostic_action_after_output (diagnostic_context *,
         diagnostic_info *);
static void real_abort (void) ;
static diagnostic_context global_diagnostic_context;
diagnostic_context *global_dc = &global_diagnostic_context;
static char *
build_message_string (const char *msg, ...)
{
  char *str;
  va_list ap;
  __builtin_va_start(ap,msg);
  vasprintf (&str, msg, ap);
  __builtin_va_end(ap);
  return str;
}
char *
file_name_as_prefix (const char *f)
{
  return build_message_string ("%s: ", f);
}
void
diagnostic_initialize (diagnostic_context *context)
{
  context->printer = xmalloc (sizeof (pretty_printer));
  pp_construct (context->printer, ((void *)0), 0);
  context->printer->buffer->stream = stderr;
  context->printer->prefixing_rule = DIAGNOSTICS_SHOW_PREFIX_ONCE;
  memset (context->diagnostic_count, 0, sizeof context->diagnostic_count);
  context->warnings_are_errors_message = warnings_are_errors;
  context->abort_on_error = 0;
  context->internal_error = ((void *)0);
  (context)->begin_diagnostic = default_diagnostic_starter;
  (context)->end_diagnostic = default_diagnostic_finalizer;
  context->last_module = 0;
  context->last_function = ((void *)0);
  context->lock = 0;
  context->x_data = ((void *)0);
}
static unsigned char
text_specifies_location (text_info *text, location_t *locus)
{
  const char *p;
  for (p = text->format_spec; *p && *p != '%'; ++p)
    ;
  if (p[0] == '%' && p[1] == 'H')
    {
      *locus = *__builtin_va_arg(*text->args_ptr,location_t1);
      text->format_spec = p + 2;
      return 1;
    }
  else if (p[0] == '%' && p[1] == 'J')
    {
      tree t = __builtin_va_arg(*text->args_ptr,tree1);
      *locus = ((t)->decl.locus);
      text->format_spec = p + 2;
      return 1;
    }
  return 0;
}
void
diagnostic_set_info (diagnostic_info *diagnostic, const char *msgid,
       va_list *args, location_t location,
       diagnostic_t kind)
{
  diagnostic->message.err_no = (*__errno_location ());
  diagnostic->message.args_ptr = args;
  diagnostic->message.format_spec = msgid;
  if (!text_specifies_location (&diagnostic->message, &diagnostic->location))
    diagnostic->location = location;
  diagnostic->kind = kind;
}
char *
diagnostic_build_prefix (diagnostic_info *diagnostic)
{
  static const char *const diagnostic_kind_text[] = {
("fatal error: "),
("internal compiler error: "),
("error: "),
("sorry, unimplemented: "),
("warning: "),
("anachronism: "),
("note: "),
("debug: "),
    "must-not-happen"
  };
  expanded_location s = (diagnostic->location);
  if (diagnostic->kind >= DK_LAST_DIAGNOSTIC_KIND)
    fancy_abort ("gcc.c", 442489, "?");
  return s.file
    ? build_message_string ("%s:%d: %s",
                            s.file, s.line,
                            diagnostic_kind_text[diagnostic->kind])
    : build_message_string ("%s: %s", progname,
                            diagnostic_kind_text[diagnostic->kind]);
}
static unsigned char
diagnostic_count_diagnostic (diagnostic_context *context,
        diagnostic_info *diagnostic)
{
  diagnostic_t kind = diagnostic->kind;
  switch (kind)
    {
    default:
      fancy_abort ("gcc.c", 442508, "?");
      break;
    case DK_ICE:
      if (((context)->diagnostic_count[(int) (DK_ERROR)] > 0
    || (context)->diagnostic_count[(int) (DK_SORRY)] > 0)
   && !context->abort_on_error)
 {
   expanded_location s = (diagnostic->location);
   fnotice (stderr, "%s:%d: confused by earlier errors, bailing out\n",
     s.file, s.line);
   exit (1);
 }
      if (context->internal_error)
 (*context->internal_error) (diagnostic->message.format_spec,
        diagnostic->message.args_ptr);
    case DK_FATAL: case DK_SORRY:
    case DK_ANACHRONISM: case DK_NOTE:
      ++(context)->diagnostic_count[(int) (kind)];
      break;
    case DK_WARNING:
      if (!(!inhibit_warnings && !(in_system_header && !warn_system_headers)))
        return 0;
      if (!warnings_are_errors)
        {
          ++(context)->diagnostic_count[(int) (DK_WARNING)];
          break;
        }
      if (context->warnings_are_errors_message)
        {
   pp_verbatim (context->printer,
                       "%s: warnings being treated as errors\n", progname);
          context->warnings_are_errors_message = 0;
        }
    case DK_ERROR:
      ++(context)->diagnostic_count[(int) (DK_ERROR)];
      break;
    }
  return 1;
}
static void
diagnostic_action_after_output (diagnostic_context *context,
    diagnostic_info *diagnostic)
{
  switch (diagnostic->kind)
    {
    case DK_DEBUG:
    case DK_NOTE:
    case DK_ANACHRONISM:
    case DK_WARNING:
      break;
    case DK_ERROR:
    case DK_SORRY:
      if (context->abort_on_error)
 real_abort ();
      if (flag_fatal_errors)
 {
   fnotice (stderr, "compilation terminated due to -Wfatal-errors.\n");
   exit (1);
 }
      break;
    case DK_ICE:
      if (context->abort_on_error)
 real_abort ();
      fnotice (stderr, "Please submit a full bug report,\nwith preprocessed source if appropriate.\nSee %s for instructions.\n", bug_report_url);
      exit (1);
    case DK_FATAL:
      if (context->abort_on_error)
 real_abort ();
      fnotice (stderr, "compilation terminated.\n");
      exit (1);
    default:
      real_abort ();
    }
}
void
diagnostic_report_current_function (diagnostic_context *context)
{
  diagnostic_report_current_module (context);
  lang_hooks.print_error_function (context, (((input_location)).file));
}
void
diagnostic_report_current_module (diagnostic_context *context)
{
  struct file_stack *p;
  if ((context->printer)->need_newline)
    {
      pp_base_newline ((context->printer));
      (context->printer)->need_newline = 0;
    }
  p = input_file_stack;
  if (p && ((context)->last_module != input_file_stack_tick))
    {
      expanded_location xloc = (p->location);
      pp_verbatim (context->printer,
                   "In file included from %s:%d",
     xloc.file, xloc.line);
      while ((p = p->next) != ((void *)0))
 {
   xloc = (p->location);
   pp_verbatim (context->printer,
         ",\n                 from %s:%d",
         xloc.file, xloc.line);
 }
      pp_verbatim (context->printer, ":\n");
      (context)->last_module = input_file_stack_tick;
    }
}
static void
default_diagnostic_starter (diagnostic_context *context,
       diagnostic_info *diagnostic)
{
  diagnostic_report_current_function (context);
  pp_base_set_prefix ((context->printer), diagnostic_build_prefix (diagnostic));
}
static void
default_diagnostic_finalizer (diagnostic_context *context,
         diagnostic_info *diagnostic )
{
  pp_base_destroy_prefix ((context->printer));
}
void
diagnostic_report_diagnostic (diagnostic_context *context,
         diagnostic_info *diagnostic)
{
  if (context->lock++ && diagnostic->kind < DK_SORRY)
    error_recursion (context);
  if (diagnostic_count_diagnostic (context, diagnostic))
    {
      (*(context)->begin_diagnostic) (context, diagnostic);
      pp_base_format_text ((context->printer), &diagnostic->message);
      (*(context)->end_diagnostic) (context, diagnostic);
      pp_base_flush ((context->printer));
      diagnostic_action_after_output (context, diagnostic);
    }
  context->lock--;
}
const char *
trim_filename (const char *name)
{
  static const char this_file[] = "gcc.c";
  const char *p = name, *q = this_file;
  while (p[0] == '.' && p[1] == '.'
  && (p[2] == '/'
      ))
    p += 3;
  while (q[0] == '.' && q[1] == '.'
  && (q[2] == '/'
      ))
    q += 3;
  while (*p == *q && *p != 0 && *q != 0)
    p++, q++;
  while (p > name && p[-1] != '/'
  )
    p--;
  return p;
}
void
verbatim (const char *msgid, ...)
{
  text_info text;
  va_list ap;
  __builtin_va_start(ap,msgid);
  text.err_no = (*__errno_location ());
  text.args_ptr = &ap;
  text.format_spec = msgid;
  pp_base_format_verbatim ((global_dc->printer), &text);
  pp_base_flush ((global_dc->printer));
  __builtin_va_end(ap);
}
void
inform (const char *msgid, ...)
{
  diagnostic_info diagnostic;
  va_list ap;
  __builtin_va_start(ap,msgid);
  diagnostic_set_info (&diagnostic, msgid, &ap, input_location, DK_NOTE);
  diagnostic_report_diagnostic (global_dc, &diagnostic);
  __builtin_va_end(ap);
}
void
warning (const char *msgid, ...)
{
  diagnostic_info diagnostic;
  va_list ap;
  __builtin_va_start(ap,msgid);
  diagnostic_set_info (&diagnostic, msgid, &ap, input_location, DK_WARNING);
  diagnostic_report_diagnostic (global_dc, &diagnostic);
  __builtin_va_end(ap);
}
void
pedwarn (const char *msgid, ...)
{
  diagnostic_info diagnostic;
  va_list ap;
  __builtin_va_start(ap,msgid);
  diagnostic_set_info (&diagnostic, msgid, &ap, input_location,
         (flag_pedantic_errors ? DK_ERROR : DK_WARNING));
  diagnostic_report_diagnostic (global_dc, &diagnostic);
  __builtin_va_end(ap);
}
void
error (const char *msgid, ...)
{
  diagnostic_info diagnostic;
  va_list ap;
  __builtin_va_start(ap,msgid);
  diagnostic_set_info (&diagnostic, msgid, &ap, input_location, DK_ERROR);
  diagnostic_report_diagnostic (global_dc, &diagnostic);
  __builtin_va_end(ap);
}
void
sorry (const char *msgid, ...)
{
  diagnostic_info diagnostic;
  va_list ap;
  __builtin_va_start(ap,msgid);
  diagnostic_set_info (&diagnostic, msgid, &ap, input_location, DK_SORRY);
  diagnostic_report_diagnostic (global_dc, &diagnostic);
  __builtin_va_end(ap);
}
void
fatal_error (const char *msgid, ...)
{
  diagnostic_info diagnostic;
  va_list ap;
  __builtin_va_start(ap,msgid);
  diagnostic_set_info (&diagnostic, msgid, &ap, input_location, DK_FATAL);
  diagnostic_report_diagnostic (global_dc, &diagnostic);
  __builtin_va_end(ap);
  real_abort ();
}
void
internal_error (const char *msgid, ...)
{
  diagnostic_info diagnostic;
  va_list ap;
  __builtin_va_start(ap,msgid);
  diagnostic_set_info (&diagnostic, msgid, &ap, input_location, DK_ICE);
  diagnostic_report_diagnostic (global_dc, &diagnostic);
  __builtin_va_end(ap);
  real_abort ();
}
void
fnotice (FILE *file, const char *msgid, ...)
{
  va_list ap;
  __builtin_va_start(ap,msgid);
  vfprintf (file, msgid, ap);
  __builtin_va_end(ap);
}
static void
error_recursion (diagnostic_context *context)
{
  if (context->lock < 3)
    pp_base_flush ((context->printer));
  fnotice (stderr,
    "Internal compiler error: Error reporting routines re-entered.\n");
  fnotice (stderr, "Please submit a full bug report,\nwith preprocessed source if appropriate.\nSee %s for instructions.\n", bug_report_url);
  exit (1);
}
void
fancy_abort (const char *file, int line, const char *function)
{
  internal_error ("in %s, at %s:%d", function, trim_filename (file), line);
}
static void
real_abort (void)
{
  abort ();
}
static unsigned char prefer_and_bit_test (enum machine_mode, int);
static void do_jump_by_parts_greater (tree, int, rtx, rtx);
static void do_jump_by_parts_equality (tree, rtx, rtx);
static void do_compare_and_jump (tree, enum rtx_code, enum rtx_code, rtx,
     rtx);
void
init_pending_stack_adjust (void)
{
  (cfun->expr->x_pending_stack_adjust) = 0;
}
void
clear_pending_stack_adjust (void)
{
  if (optimize > 0
      && (! flag_omit_frame_pointer || (cfun->calls_alloca))
      && 1
      && ! (((current_function_decl)->decl.inline_flag) && ! flag_no_inline)
      && ! flag_inline_functions)
    {
      (cfun->expr->x_stack_pointer_delta) -= (cfun->expr->x_pending_stack_adjust),
      (cfun->expr->x_pending_stack_adjust) = 0;
    }
}
void
do_pending_stack_adjust (void)
{
  if ((cfun->expr->x_inhibit_defer_pop) == 0)
    {
      if ((cfun->expr->x_pending_stack_adjust) != 0)
        adjust_stack (gen_rtx_CONST_INT (VOIDmode, (long) ((cfun->expr->x_pending_stack_adjust))));
      (cfun->expr->x_pending_stack_adjust) = 0;
    }
}
void
jumpifnot (tree exp, rtx label)
{
  do_jump (exp, label, (rtx) 0);
}
void
jumpif (tree exp, rtx label)
{
  do_jump (exp, (rtx) 0, label);
}
static rtx and_reg;
static rtx and_test;
static rtx shift_test;
static unsigned char
prefer_and_bit_test (enum machine_mode mode, int bitnum)
{
  if (and_test == 0)
    {
      and_reg = gen_rtx_REG (mode, 53);
      and_test = gen_rtx_fmt_ee (AND, (mode), (and_reg), (((void *)0)));
      shift_test = gen_rtx_fmt_ee (AND, (mode), (gen_rtx_fmt_ee (ASHIFTRT, (mode), (and_reg), (((void *)0)))), ((const_int_rtx[64 +1])))
               ;
    }
  else
    {
      ((and_reg)->mode = (mode));
      ((and_test)->mode = (mode));
      ((shift_test)->mode = (mode));
      (((((shift_test)->u.fld[0]).rtx1))->mode = (mode));
    }
  (((and_test)->u.fld[1]).rtx1) = gen_rtx_CONST_INT (VOIDmode, (long) ((unsigned long) 1 << bitnum));
  ((((((shift_test)->u.fld[0]).rtx1))->u.fld[1]).rtx1) = gen_rtx_CONST_INT (VOIDmode, (long) (bitnum));
  return (rtx_cost (and_test, IF_THEN_ELSE)
   <= rtx_cost (shift_test, IF_THEN_ELSE));
}
void
do_jump (tree exp, rtx if_false_label, rtx if_true_label)
{
  enum tree_code code = ((enum tree_code) (exp)->common.code);
  rtx drop_through_label = 0;
  rtx temp;
  int i;
  tree type;
  enum machine_mode mode;
  emit_queue ();
  switch (code)
    {
    case ERROR_MARK:
      break;
    case INTEGER_CST:
      temp = integer_zerop (exp) ? if_false_label : if_true_label;
      if (temp)
        emit_jump (temp);
      break;
    case UNSAVE_EXPR:
      do_jump (((exp)->exp.operands[0]), if_false_label, if_true_label);
      ((exp)->exp.operands[0])
 = lang_hooks.unsave_expr_now (((exp)->exp.operands[0]));
      break;
    case NOP_EXPR:
      if (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == COMPONENT_REF
          || ((enum tree_code) (((exp)->exp.operands[0]))->common.code) == BIT_FIELD_REF
          || ((enum tree_code) (((exp)->exp.operands[0]))->common.code) == ARRAY_REF
          || ((enum tree_code) (((exp)->exp.operands[0]))->common.code) == ARRAY_RANGE_REF)
        goto normal;
    case CONVERT_EXPR:
      if ((((((exp)->common.type))->type.precision)
           < ((((((exp)->exp.operands[0]))->common.type))->type.precision)))
        goto normal;
    case NON_LVALUE_EXPR:
    case REFERENCE_EXPR:
    case ABS_EXPR:
    case NEGATE_EXPR:
    case LROTATE_EXPR:
    case RROTATE_EXPR:
      do_jump (((exp)->exp.operands[0]), if_false_label, if_true_label);
      break;
    case MINUS_EXPR:
      do_compare_and_jump (build (NE_EXPR, ((exp)->common.type),
                                  ((exp)->exp.operands[0]),
                                  ((exp)->exp.operands[1])),
                           NE, NE, if_false_label, if_true_label);
      break;
    case BIT_AND_EXPR:
      if (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == RSHIFT_EXPR
   && integer_onep (((exp)->exp.operands[1])))
 {
   tree arg = ((((exp)->exp.operands[0]))->exp.operands[0]);
   tree shift = ((((exp)->exp.operands[0]))->exp.operands[1]);
   tree one = ((exp)->exp.operands[1]);
   tree argtype = ((arg)->common.type);
   if (((enum tree_code) (shift)->common.code) == INTEGER_CST
       && compare_tree_int (shift, 0) > 0
       && compare_tree_int (shift, (8 * 4)) < 0
       && prefer_and_bit_test (((argtype)->type.mode),
          (((shift)->int_cst.int_cst).low)))
     {
       do_jump (build (BIT_AND_EXPR, argtype, arg,
         fold (build (LSHIFT_EXPR, argtype, one, shift))),
         if_false_label, if_true_label);
       break;
     }
 }
      if (! 0
          && ((enum tree_code) (((exp)->exp.operands[1]))->common.code) == INTEGER_CST
          && ((((exp)->common.type))->type.precision) <= (8 * 4)
          && (i = tree_floor_log2 (((exp)->exp.operands[1]))) >= 0
          && (mode = mode_for_size (i + 1, MODE_INT, 0)) != BLKmode
          && (type = lang_hooks.types.type_for_mode (mode, 1)) != 0
          && ((type)->type.precision) < ((((exp)->common.type))->type.precision)
          && ((optab_table[OTI_cmp])->handlers[(int) ((type)->type.mode)].insn_code
              != CODE_FOR_nothing))
        {
          do_jump (convert (type, exp), if_false_label, if_true_label);
          break;
        }
      goto normal;
    case TRUTH_NOT_EXPR:
      do_jump (((exp)->exp.operands[0]), if_true_label, if_false_label);
      break;
    case TRUTH_ANDIF_EXPR:
      if (if_false_label == 0)
        if_false_label = drop_through_label = gen_label_rtx ();
      do_jump (((exp)->exp.operands[0]), if_false_label, (rtx) 0);
      start_cleanup_deferral ();
      do_jump (((exp)->exp.operands[1]), if_false_label, if_true_label);
      end_cleanup_deferral ();
      break;
    case TRUTH_ORIF_EXPR:
      if (if_true_label == 0)
        if_true_label = drop_through_label = gen_label_rtx ();
      do_jump (((exp)->exp.operands[0]), (rtx) 0, if_true_label);
      start_cleanup_deferral ();
      do_jump (((exp)->exp.operands[1]), if_false_label, if_true_label);
      end_cleanup_deferral ();
      break;
    case COMPOUND_EXPR:
      push_temp_slots ();
      expand_expr (((exp)->exp.operands[0]), (const_int_rtx[64]), VOIDmode, 0);
      preserve_temp_slots ((rtx) 0);
      free_temp_slots ();
      pop_temp_slots ();
      emit_queue ();
      do_pending_stack_adjust ();
      do_jump (((exp)->exp.operands[1]), if_false_label, if_true_label);
      break;
    case COMPONENT_REF:
    case BIT_FIELD_REF:
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
      {
        long bitsize, bitpos;
        int unsignedp;
        enum machine_mode mode;
        tree type;
        tree offset;
        int volatilep = 0;
        get_inner_reference (exp, &bitsize, &bitpos, &offset, &mode,
                             &unsignedp, &volatilep);
        type = lang_hooks.types.type_for_size (bitsize, unsignedp);
        if (! 0
            && type != 0 && bitsize >= 0
            && ((type)->type.precision) < ((((exp)->common.type))->type.precision)
            && ((optab_table[OTI_cmp])->handlers[(int) ((type)->type.mode)].insn_code
  != CODE_FOR_nothing))
          {
            do_jump (convert (type, exp), if_false_label, if_true_label);
            break;
          }
        goto normal;
      }
    case COND_EXPR:
      if (integer_onep (((exp)->exp.operands[1]))
          && integer_zerop (((exp)->exp.operands[2])))
        do_jump (((exp)->exp.operands[0]), if_false_label, if_true_label);
      else if (integer_zerop (((exp)->exp.operands[1]))
               && integer_onep (((exp)->exp.operands[2])))
        do_jump (((exp)->exp.operands[0]), if_true_label, if_false_label);
      else
      {
        rtx label1 = gen_label_rtx ();
        drop_through_label = gen_label_rtx ();
        do_jump (((exp)->exp.operands[0]), label1, (rtx) 0);
        start_cleanup_deferral ();
        do_jump (((exp)->exp.operands[1]),
                 if_false_label ? if_false_label : drop_through_label,
                 if_true_label ? if_true_label : drop_through_label);
        do_pending_stack_adjust ();
        emit_label (label1);
        do_jump (((exp)->exp.operands[2]),
           if_false_label ? if_false_label : drop_through_label,
           if_true_label ? if_true_label : drop_through_label);
        end_cleanup_deferral ();
      }
      break;
    case EQ_EXPR:
      {
        tree inner_type = ((((exp)->exp.operands[0]))->common.type);
        if (mode_class[((inner_type)->type.mode)] == MODE_COMPLEX_FLOAT
            || mode_class[((inner_type)->type.mode)] == MODE_COMPLEX_INT)
          {
            tree exp0 = save_expr (((exp)->exp.operands[0]));
            tree exp1 = save_expr (((exp)->exp.operands[1]));
            do_jump
              (fold
               (build (TRUTH_ANDIF_EXPR, ((exp)->common.type),
                 fold (build (EQ_EXPR, ((exp)->common.type),
                  fold (build1_stat (REALPART_EXPR,((inner_type)->common.type),exp0 )
                         ),
                  fold (build1_stat (REALPART_EXPR,((inner_type)->common.type),exp1 )
                         ))),
                 fold (build (EQ_EXPR, ((exp)->common.type),
                  fold (build1_stat (IMAGPART_EXPR,((inner_type)->common.type),exp0 )
                         ),
                  fold (build1_stat (IMAGPART_EXPR,((inner_type)->common.type),exp1 )
                         ))))),
               if_false_label, if_true_label);
          }
        else if (integer_zerop (((exp)->exp.operands[1])))
          do_jump (((exp)->exp.operands[0]), if_true_label, if_false_label);
        else if (mode_class[((inner_type)->type.mode)] == MODE_INT
                 && !can_compare_p (EQ, ((inner_type)->type.mode), ccp_jump))
          do_jump_by_parts_equality (exp, if_false_label, if_true_label);
        else
          do_compare_and_jump (exp, EQ, EQ, if_false_label, if_true_label);
        break;
      }
    case NE_EXPR:
      {
        tree inner_type = ((((exp)->exp.operands[0]))->common.type);
        if (mode_class[((inner_type)->type.mode)] == MODE_COMPLEX_FLOAT
            || mode_class[((inner_type)->type.mode)] == MODE_COMPLEX_INT)
          {
            tree exp0 = save_expr (((exp)->exp.operands[0]));
            tree exp1 = save_expr (((exp)->exp.operands[1]));
            do_jump
              (fold
               (build (TRUTH_ORIF_EXPR, ((exp)->common.type),
                 fold (build (NE_EXPR, ((exp)->common.type),
                  fold (build1_stat (REALPART_EXPR,((inner_type)->common.type),exp0 )
                         ),
                  fold (build1_stat (REALPART_EXPR,((inner_type)->common.type),exp1 )
                         ))),
                 fold (build (NE_EXPR, ((exp)->common.type),
                    fold (build1_stat (IMAGPART_EXPR,((inner_type)->common.type),exp0 )
                           ),
                    fold (build1_stat (IMAGPART_EXPR,((inner_type)->common.type),exp1 )
                           ))))),
               if_false_label, if_true_label);
          }
        else if (integer_zerop (((exp)->exp.operands[1])))
          do_jump (((exp)->exp.operands[0]), if_false_label, if_true_label);
        else if (mode_class[((inner_type)->type.mode)] == MODE_INT
           && !can_compare_p (NE, ((inner_type)->type.mode), ccp_jump))
          do_jump_by_parts_equality (exp, if_true_label, if_false_label);
        else
          do_compare_and_jump (exp, NE, NE, if_false_label, if_true_label);
        break;
      }
    case LT_EXPR:
      mode = ((((((exp)->exp.operands[0]))->common.type))->type.mode);
      if (mode_class[mode] == MODE_INT
          && ! can_compare_p (LT, mode, ccp_jump))
        do_jump_by_parts_greater (exp, 1, if_false_label, if_true_label);
      else
        do_compare_and_jump (exp, LT, LTU, if_false_label, if_true_label);
      break;
    case LE_EXPR:
      mode = ((((((exp)->exp.operands[0]))->common.type))->type.mode);
      if (mode_class[mode] == MODE_INT
          && ! can_compare_p (LE, mode, ccp_jump))
        do_jump_by_parts_greater (exp, 0, if_true_label, if_false_label);
      else
        do_compare_and_jump (exp, LE, LEU, if_false_label, if_true_label);
      break;
    case GT_EXPR:
      mode = ((((((exp)->exp.operands[0]))->common.type))->type.mode);
      if (mode_class[mode] == MODE_INT
          && ! can_compare_p (GT, mode, ccp_jump))
        do_jump_by_parts_greater (exp, 0, if_false_label, if_true_label);
      else
        do_compare_and_jump (exp, GT, GTU, if_false_label, if_true_label);
      break;
    case GE_EXPR:
      mode = ((((((exp)->exp.operands[0]))->common.type))->type.mode);
      if (mode_class[mode] == MODE_INT
          && ! can_compare_p (GE, mode, ccp_jump))
        do_jump_by_parts_greater (exp, 1, if_true_label, if_false_label);
      else
        do_compare_and_jump (exp, GE, GEU, if_false_label, if_true_label);
      break;
    case UNORDERED_EXPR:
    case ORDERED_EXPR:
      {
        enum rtx_code cmp, rcmp;
        int do_rev;
        if (code == UNORDERED_EXPR)
          cmp = UNORDERED, rcmp = ORDERED;
        else
          cmp = ORDERED, rcmp = UNORDERED;
        mode = ((((((exp)->exp.operands[0]))->common.type))->type.mode);
        do_rev = 0;
        if (! can_compare_p (cmp, mode, ccp_jump)
            && (can_compare_p (rcmp, mode, ccp_jump)
          || rcmp == UNORDERED))
          do_rev = 1;
        if (! do_rev)
          do_compare_and_jump (exp, cmp, cmp, if_false_label, if_true_label);
        else
          do_compare_and_jump (exp, rcmp, rcmp, if_true_label, if_false_label);
      }
      break;
    {
      enum rtx_code rcode1;
      enum tree_code tcode1, tcode2;
      case UNLT_EXPR:
        rcode1 = UNLT;
        tcode1 = UNORDERED_EXPR;
        tcode2 = LT_EXPR;
        goto unordered_bcc;
      case UNLE_EXPR:
        rcode1 = UNLE;
        tcode1 = UNORDERED_EXPR;
        tcode2 = LE_EXPR;
        goto unordered_bcc;
      case UNGT_EXPR:
        rcode1 = UNGT;
        tcode1 = UNORDERED_EXPR;
        tcode2 = GT_EXPR;
        goto unordered_bcc;
      case UNGE_EXPR:
        rcode1 = UNGE;
        tcode1 = UNORDERED_EXPR;
        tcode2 = GE_EXPR;
        goto unordered_bcc;
      case UNEQ_EXPR:
        rcode1 = UNEQ;
        tcode1 = UNORDERED_EXPR;
        tcode2 = EQ_EXPR;
        goto unordered_bcc;
      case LTGT_EXPR:
        rcode1 = LTGT;
        tcode1 = LT_EXPR;
        tcode2 = GT_EXPR;
        goto unordered_bcc;
      unordered_bcc:
        mode = ((((((exp)->exp.operands[0]))->common.type))->type.mode);
        if (can_compare_p (rcode1, mode, ccp_jump))
          do_compare_and_jump (exp, rcode1, rcode1, if_false_label,
                               if_true_label);
        else
          {
            tree op0 = save_expr (((exp)->exp.operands[0]));
            tree op1 = save_expr (((exp)->exp.operands[1]));
            tree cmp0, cmp1;
            cmp0 = fold (build (tcode1, ((exp)->common.type), op0, op1));
            cmp1 = fold (build (tcode2, ((exp)->common.type), op0, op1));
            exp = build (TRUTH_ORIF_EXPR, ((exp)->common.type), cmp0, cmp1);
            do_jump (exp, if_false_label, if_true_label);
          }
      }
      break;
    case CALL_EXPR:
      {
 tree fndecl = get_callee_fndecl (exp);
 tree arglist = ((exp)->exp.operands[1]);
 if (fndecl
     && (((fndecl)->decl.built_in_class) != NOT_BUILT_IN)
     && ((fndecl)->decl.u1.f) == BUILT_IN_EXPECT
     && arglist != (tree) ((void *)0)
     && ((arglist)->common.chain) != (tree) ((void *)0))
   {
     rtx seq = expand_builtin_expect_jump (exp, if_false_label,
        if_true_label);
     if (seq != (rtx) 0)
       {
  emit_insn (seq);
  return;
       }
   }
      }
    default:
    normal:
      temp = expand_expr (exp, (rtx) 0, VOIDmode, 0);
      do_pending_stack_adjust ();
      emit_queue ();
      if (((enum rtx_code) (temp)->code) == CONST_INT
          || (((enum rtx_code) (temp)->code) == CONST_DOUBLE && ((enum machine_mode) (temp)->mode) == VOIDmode)
          || ((enum rtx_code) (temp)->code) == LABEL_REF)
        {
          rtx target = temp == (const_int_rtx[64]) ? if_false_label : if_true_label;
          if (target)
            emit_jump (target);
        }
      else if (mode_class[((enum machine_mode) (temp)->mode)] == MODE_INT
               && ! can_compare_p (NE, ((enum machine_mode) (temp)->mode), ccp_jump))
        do_jump_by_parts_equality_rtx (temp, if_true_label, if_false_label);
      else if (((enum machine_mode) (temp)->mode) != VOIDmode)
 {
   if (((enum rtx_code) (temp)->code) == SUBREG)
     {
       if ((((temp))->in_struct)
    && (((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code) == REG))
  temp = (((temp)->u.fld[0]).rtx1);
       else
  temp = copy_to_reg (temp);
     }
   do_compare_rtx_and_jump (temp, (const_tiny_rtx[0][(int) (((enum machine_mode) (temp)->mode))]),
       NE, ((((exp)->common.type))->common.unsigned_flag),
       ((enum machine_mode) (temp)->mode), (rtx) 0,
       if_false_label, if_true_label);
 }
      else
        abort ();
    }
  if (drop_through_label)
    {
      do_pending_stack_adjust ();
      emit_label (drop_through_label);
    }
}
static void
do_jump_by_parts_greater (tree exp, int swap, rtx if_false_label,
     rtx if_true_label)
{
  rtx op0 = expand_expr (((exp)->exp.operands[swap]), (rtx) 0, VOIDmode, 0);
  rtx op1 = expand_expr (((exp)->exp.operands[!swap]), (rtx) 0, VOIDmode, 0);
  enum machine_mode mode = ((((((exp)->exp.operands[0]))->common.type))->type.mode);
  int unsignedp = ((((((exp)->exp.operands[0]))->common.type))->common.unsigned_flag);
  do_jump_by_parts_greater_rtx (mode, unsignedp, op0, op1, if_false_label,
    if_true_label);
}
void
do_jump_by_parts_greater_rtx (enum machine_mode mode, int unsignedp, rtx op0,
         rtx op1, rtx if_false_label, rtx if_true_label)
{
  int nwords = (((unsigned short) mode_size[mode]) / (0 ? 8 : 4));
  rtx drop_through_label = 0;
  int i;
  if (! if_true_label || ! if_false_label)
    drop_through_label = gen_label_rtx ();
  if (! if_true_label)
    if_true_label = drop_through_label;
  if (! if_false_label)
    if_false_label = drop_through_label;
  for (i = 0; i < nwords; i++)
    {
      rtx op0_word, op1_word;
      if (0)
        {
          op0_word = operand_subword_force (op0, i, mode);
          op1_word = operand_subword_force (op1, i, mode);
        }
      else
        {
          op0_word = operand_subword_force (op0, nwords - 1 - i, mode);
          op1_word = operand_subword_force (op1, nwords - 1 - i, mode);
        }
      do_compare_rtx_and_jump (op0_word, op1_word, GT,
                               (unsignedp || i > 0), word_mode, (rtx) 0,
                               (rtx) 0, if_true_label);
      do_compare_rtx_and_jump (op0_word, op1_word, NE, unsignedp, word_mode,
                               (rtx) 0, (rtx) 0, if_false_label);
    }
  if (if_false_label)
    emit_jump (if_false_label);
  if (drop_through_label)
    emit_label (drop_through_label);
}
static void
do_jump_by_parts_equality (tree exp, rtx if_false_label, rtx if_true_label)
{
  rtx op0 = expand_expr (((exp)->exp.operands[0]), (rtx) 0, VOIDmode, 0);
  rtx op1 = expand_expr (((exp)->exp.operands[1]), (rtx) 0, VOIDmode, 0);
  enum machine_mode mode = ((((((exp)->exp.operands[0]))->common.type))->type.mode);
  int nwords = (((unsigned short) mode_size[mode]) / (0 ? 8 : 4));
  int i;
  rtx drop_through_label = 0;
  if (! if_false_label)
    drop_through_label = if_false_label = gen_label_rtx ();
  for (i = 0; i < nwords; i++)
    do_compare_rtx_and_jump (operand_subword_force (op0, i, mode),
                             operand_subword_force (op1, i, mode),
                             EQ, ((((exp)->common.type))->common.unsigned_flag),
                             word_mode, (rtx) 0, if_false_label, (rtx) 0);
  if (if_true_label)
    emit_jump (if_true_label);
  if (drop_through_label)
    emit_label (drop_through_label);
}
void
do_jump_by_parts_equality_rtx (rtx op0, rtx if_false_label, rtx if_true_label)
{
  int nwords = ((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) / (0 ? 8 : 4);
  rtx part;
  int i;
  rtx drop_through_label = 0;
  part = gen_reg_rtx (word_mode);
  emit_move_insn (part, operand_subword_force (op0, 0, ((enum machine_mode) (op0)->mode)));
  for (i = 1; i < nwords && part != 0; i++)
    part = expand_binop (word_mode, (optab_table[OTI_ior]), part,
                         operand_subword_force (op0, i, ((enum machine_mode) (op0)->mode)),
                         part, 1, OPTAB_WIDEN);
  if (part != 0)
    {
      do_compare_rtx_and_jump (part, (const_int_rtx[64]), EQ, 1, word_mode,
                               (rtx) 0, if_false_label, if_true_label);
      return;
    }
  if (! if_false_label)
    drop_through_label = if_false_label = gen_label_rtx ();
  for (i = 0; i < nwords; i++)
    do_compare_rtx_and_jump (operand_subword_force (op0, i, ((enum machine_mode) (op0)->mode)),
                             (const_int_rtx[64]), EQ, 1, word_mode, (rtx) 0,
                             if_false_label, (rtx) 0);
  if (if_true_label)
    emit_jump (if_true_label);
  if (drop_through_label)
    emit_label (drop_through_label);
}
rtx
compare_from_rtx (rtx op0, rtx op1, enum rtx_code code, int unsignedp,
    enum machine_mode mode, rtx size)
{
  rtx tem;
  if (swap_commutative_operands_p (op0, op1))
    {
      tem = op0;
      op0 = op1;
      op1 = tem;
      code = swap_condition (code);
    }
  if (flag_force_mem)
    {
      op0 = force_not_mem (op0);
      op1 = force_not_mem (op1);
    }
  do_pending_stack_adjust ();
  code = unsignedp ? unsigned_condition (code) : code;
  if (0 != (tem = simplify_relational_operation (code, mode, VOIDmode,
       op0, op1)))
    {
      if (((rtx_class[(int) (((enum rtx_code) (tem)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (tem)->code) == CONST_VECTOR))
 return tem;
      code = ((enum rtx_code) (tem)->code);
      mode = ((enum machine_mode) (tem)->mode);
      op0 = (((tem)->u.fld[0]).rtx1);
      op1 = (((tem)->u.fld[1]).rtx1);
      unsignedp = (code == GTU || code == LTU || code == GEU || code == LEU);
    }
  emit_cmp_insn (op0, op1, code, size, mode, unsignedp);
  return gen_rtx_fmt_ee (code, VOIDmode, op0, op1);
}
void
do_compare_rtx_and_jump (rtx op0, rtx op1, enum rtx_code code, int unsignedp,
    enum machine_mode mode, rtx size, rtx if_false_label,
    rtx if_true_label)
{
  rtx tem;
  int dummy_true_label = 0;
  if (! if_true_label && ! (mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
    {
      if_true_label = if_false_label;
      if_false_label = 0;
      code = reverse_condition (code);
    }
  if (swap_commutative_operands_p (op0, op1))
    {
      tem = op0;
      op0 = op1;
      op1 = tem;
      code = swap_condition (code);
    }
  if (flag_force_mem)
    {
      op0 = force_not_mem (op0);
      op1 = force_not_mem (op1);
    }
  do_pending_stack_adjust ();
  code = unsignedp ? unsigned_condition (code) : code;
  if (0 != (tem = simplify_relational_operation (code, mode, VOIDmode,
       op0, op1)))
    {
      if (((rtx_class[(int) (((enum rtx_code) (tem)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (tem)->code) == CONST_VECTOR))
 {
   rtx label = (tem == (const_int_rtx[64]) || tem == (const_tiny_rtx[0][(int) (mode)]))
        ? if_false_label : if_true_label;
   if (label)
     emit_jump (label);
   return;
 }
      code = ((enum rtx_code) (tem)->code);
      mode = ((enum machine_mode) (tem)->mode);
      op0 = (((tem)->u.fld[0]).rtx1);
      op1 = (((tem)->u.fld[1]).rtx1);
      unsignedp = (code == GTU || code == LTU || code == GEU || code == LEU);
    }
  if (! if_true_label)
    {
      dummy_true_label = 1;
      if_true_label = gen_label_rtx ();
    }
  emit_cmp_and_jump_insns (op0, op1, code, size, mode, unsignedp,
                           if_true_label);
  if (if_false_label)
    emit_jump (if_false_label);
  if (dummy_true_label)
    emit_label (if_true_label);
}
static void
do_compare_and_jump (tree exp, enum rtx_code signed_code,
       enum rtx_code unsigned_code, rtx if_false_label,
       rtx if_true_label)
{
  rtx op0, op1;
  tree type;
  enum machine_mode mode;
  int unsignedp;
  enum rtx_code code;
  op0 = expand_expr (((exp)->exp.operands[0]), (rtx) 0, VOIDmode, 0);
  if (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == ERROR_MARK)
    return;
  op1 = expand_expr (((exp)->exp.operands[1]), (rtx) 0, VOIDmode, 0);
  if (((enum tree_code) (((exp)->exp.operands[1]))->common.code) == ERROR_MARK)
    return;
  type = ((((exp)->exp.operands[0]))->common.type);
  mode = ((type)->type.mode);
  if (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == INTEGER_CST
      && (((enum tree_code) (((exp)->exp.operands[1]))->common.code) != INTEGER_CST
          || (((unsigned short) (((unsigned short) mode_size[mode]) * 8))
              > ((unsigned short) (((unsigned short) mode_size[((((((exp)->exp.operands[1]))->common.type))->type.mode)]) * 8))
                                                                           )))
    {
      type = ((((exp)->exp.operands[1]))->common.type);
      mode = ((type)->type.mode);
    }
  unsignedp = ((type)->common.unsigned_flag);
  code = unsignedp ? unsigned_code : signed_code;
  emit_queue ();
  do_compare_rtx_and_jump (op0, op1, code, unsignedp, mode,
                           ((mode == BLKmode)
                            ? expr_size (((exp)->exp.operands[0])) : (rtx) 0),
                           if_false_label, if_true_label);
}
const struct ggc_root_tab gt_ggc_r_gt_dojump_h[] = {
  {
    &shift_test,
    1,
    sizeof (shift_test),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &and_test,
    1,
    sizeof (and_test),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &and_reg,
    1,
    sizeof (and_reg),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
struct et_node
{
  void *data;
  int dfs_num_in, dfs_num_out;
  struct et_node *father;
  struct et_node *son;
  struct et_node *left;
  struct et_node *right;
  struct et_occ *rightmost_occ;
  struct et_occ *parent_occ;
};
struct et_node *et_new_tree (void *data);
void et_free_tree (struct et_node *);
void et_set_father (struct et_node *, struct et_node *);
void et_split (struct et_node *);
struct et_node *et_nca (struct et_node *, struct et_node *);
unsigned char et_below (struct et_node *, struct et_node *);
enum dom_state dom_computed[2];
typedef unsigned int TBB;
struct dom_info
{
  TBB *dfs_parent;
  TBB *key;
  TBB *path_min;
  TBB *bucket;
  TBB *next_bucket;
  TBB *dom;
  TBB *set_chain;
  unsigned int *set_size;
  TBB *set_child;
  TBB *dfs_order;
  basic_block *dfs_to_bb;
  unsigned int dfsnum;
  unsigned int nodes;
};
static void init_dom_info (struct dom_info *);
static void free_dom_info (struct dom_info *);
static void calc_dfs_tree_nonrec (struct dom_info *, basic_block,
      enum cdi_direction);
static void calc_dfs_tree (struct dom_info *, enum cdi_direction);
static void compress (struct dom_info *, TBB);
static TBB eval (struct dom_info *, TBB);
static void link_roots (struct dom_info *, TBB, TBB);
static void calc_idoms (struct dom_info *, enum cdi_direction);
void debug_dominance_info (enum cdi_direction);
static unsigned n_bbs_in_dom_tree[2];
static void
init_dom_info (struct dom_info *di)
{
  unsigned int num = n_basic_blocks + 1 + 1;
  do { unsigned int i = 1; if (! (0)) (di->dfs_parent) = xcalloc ((num), sizeof (TBB)); else { (di->dfs_parent) = xmalloc ((num) * sizeof (TBB)); for (i = 0; i < num; i++) (di->dfs_parent)[i] = (0); } } while (0);
  do { unsigned int i = 1; if (! (i)) (di->path_min) = xcalloc ((num), sizeof (TBB)); else { (di->path_min) = xmalloc ((num) * sizeof (TBB)); for (i = 0; i < num; i++) (di->path_min)[i] = (i); } } while (0);
  do { unsigned int i = 1; if (! (i)) (di->key) = xcalloc ((num), sizeof (TBB)); else { (di->key) = xmalloc ((num) * sizeof (TBB)); for (i = 0; i < num; i++) (di->key)[i] = (i); } } while (0);
  do { unsigned int i = 1; if (! (0)) (di->dom) = xcalloc ((num), sizeof (TBB)); else { (di->dom) = xmalloc ((num) * sizeof (TBB)); for (i = 0; i < num; i++) (di->dom)[i] = (0); } } while (0);
  do { unsigned int i = 1; if (! (0)) (di->bucket) = xcalloc ((num), sizeof (TBB)); else { (di->bucket) = xmalloc ((num) * sizeof (TBB)); for (i = 0; i < num; i++) (di->bucket)[i] = (0); } } while (0);
  do { unsigned int i = 1; if (! (0)) (di->next_bucket) = xcalloc ((num), sizeof (TBB)); else { (di->next_bucket) = xmalloc ((num) * sizeof (TBB)); for (i = 0; i < num; i++) (di->next_bucket)[i] = (0); } } while (0);
  do { unsigned int i = 1; if (! (0)) (di->set_chain) = xcalloc ((num), sizeof (TBB)); else { (di->set_chain) = xmalloc ((num) * sizeof (TBB)); for (i = 0; i < num; i++) (di->set_chain)[i] = (0); } } while (0);
  do { unsigned int i = 1; if (! (1)) (di->set_size) = xcalloc ((num), sizeof (unsigned int)); else { (di->set_size) = xmalloc ((num) * sizeof (unsigned int)); for (i = 0; i < num; i++) (di->set_size)[i] = (1); } } while (0);
  do { unsigned int i = 1; if (! (0)) (di->set_child) = xcalloc ((num), sizeof (TBB)); else { (di->set_child) = xmalloc ((num) * sizeof (TBB)); for (i = 0; i < num; i++) (di->set_child)[i] = (0); } } while (0);
  do { unsigned int i = 1; if (! (0)) (di->dfs_order) = xcalloc (((unsigned int) last_basic_block + 1), sizeof (TBB)); else { (di->dfs_order) = xmalloc (((unsigned int) last_basic_block + 1) * sizeof (TBB)); for (i = 0; i < (unsigned int) last_basic_block + 1; i++) (di->dfs_order)[i] = (0); } } while (0);
  do { unsigned int i = 1; if (! (0)) (di->dfs_to_bb) = xcalloc ((num), sizeof (basic_block)); else { (di->dfs_to_bb) = xmalloc ((num) * sizeof (basic_block)); for (i = 0; i < num; i++) (di->dfs_to_bb)[i] = (0); } } while (0);
  di->dfsnum = 1;
  di->nodes = 0;
}
static void
free_dom_info (struct dom_info *di)
{
  free (di->dfs_parent);
  free (di->path_min);
  free (di->key);
  free (di->dom);
  free (di->bucket);
  free (di->next_bucket);
  free (di->set_chain);
  free (di->set_size);
  free (di->set_child);
  free (di->dfs_order);
  free (di->dfs_to_bb);
}
static void
calc_dfs_tree_nonrec (struct dom_info *di, basic_block bb, enum cdi_direction reverse)
{
  edge e;
  TBB child_i, my_i = 0;
  edge *stack;
  int sp;
  basic_block en_block;
  basic_block ex_block;
  stack = xmalloc ((n_basic_blocks + 3) * sizeof (edge));
  sp = 0;
  if (reverse)
    {
      e = bb->pred;
      en_block = EXIT_BLOCK_PTR;
      ex_block = ENTRY_BLOCK_PTR;
    }
  else
    {
      e = bb->succ;
      en_block = ENTRY_BLOCK_PTR;
      ex_block = EXIT_BLOCK_PTR;
    }
  while (1)
    {
      basic_block bn;
      while (e)
 {
   edge e_next;
   if (reverse)
     {
       bn = e->src;
       if (bn == ex_block || di->dfs_order[bn->index])
  {
    e = e->pred_next;
    continue;
  }
       bb = e->dest;
       e_next = bn->pred;
     }
   else
     {
       bn = e->dest;
       if (bn == ex_block || di->dfs_order[bn->index])
  {
    e = e->succ_next;
    continue;
  }
       bb = e->src;
       e_next = bn->succ;
     }
   if (bn == en_block)
     abort ();
   if (bb != en_block)
     my_i = di->dfs_order[bb->index];
   else
     my_i = di->dfs_order[last_basic_block];
   child_i = di->dfs_order[bn->index] = di->dfsnum++;
   di->dfs_to_bb[child_i] = bn;
   di->dfs_parent[child_i] = my_i;
   stack[sp++] = e;
   e = e_next;
 }
      if (!sp)
 break;
      e = stack[--sp];
      if (reverse)
 e = e->pred_next;
      else
 e = e->succ_next;
    }
  free (stack);
}
static void
calc_dfs_tree (struct dom_info *di, enum cdi_direction reverse)
{
  basic_block begin = reverse ? EXIT_BLOCK_PTR : ENTRY_BLOCK_PTR;
  di->dfs_order[last_basic_block] = di->dfsnum;
  di->dfs_to_bb[di->dfsnum] = begin;
  di->dfsnum++;
  calc_dfs_tree_nonrec (di, begin, reverse);
  if (reverse)
    {
      basic_block b;
      for (b = EXIT_BLOCK_PTR->prev_bb; b != ENTRY_BLOCK_PTR; b = b->prev_bb)
 {
   if (di->dfs_order[b->index])
     continue;
   di->dfs_order[b->index] = di->dfsnum;
   di->dfs_to_bb[di->dfsnum] = b;
   di->dfsnum++;
   calc_dfs_tree_nonrec (di, b, reverse);
 }
    }
  di->nodes = di->dfsnum - 1;
  if (di->nodes != (unsigned int) n_basic_blocks + 1)
    abort ();
}
static void
compress (struct dom_info *di, TBB v)
{
  TBB parent = di->set_chain[v];
  if (di->set_chain[parent])
    {
      compress (di, parent);
      if (di->key[di->path_min[parent]] < di->key[di->path_min[v]])
 di->path_min[v] = di->path_min[parent];
      di->set_chain[v] = di->set_chain[parent];
    }
}
static TBB
eval (struct dom_info *di, TBB v)
{
  TBB rep = di->set_chain[v];
  if (!rep)
    return di->path_min[v];
  if (di->set_chain[rep])
    {
      compress (di, v);
      rep = di->set_chain[v];
    }
  if (di->key[di->path_min[rep]] >= di->key[di->path_min[v]])
    return di->path_min[v];
  else
    return di->path_min[rep];
}
static void
link_roots (struct dom_info *di, TBB v, TBB w)
{
  TBB s = w;
  while (di->key[di->path_min[w]] < di->key[di->path_min[di->set_child[s]]])
    {
      if (di->set_size[s] + di->set_size[di->set_child[di->set_child[s]]]
   >= 2 * di->set_size[di->set_child[s]])
 {
   di->set_chain[di->set_child[s]] = s;
   di->set_child[s] = di->set_child[di->set_child[s]];
 }
      else
 {
   di->set_size[di->set_child[s]] = di->set_size[s];
   s = di->set_chain[s] = di->set_child[s];
 }
    }
  di->path_min[s] = di->path_min[w];
  di->set_size[v] += di->set_size[w];
  if (di->set_size[v] < 2 * di->set_size[w])
    {
      TBB tmp = s;
      s = di->set_child[v];
      di->set_child[v] = tmp;
    }
  while (s)
    {
      di->set_chain[s] = v;
      s = di->set_child[s];
    }
}
static void
calc_idoms (struct dom_info *di, enum cdi_direction reverse)
{
  TBB v, w, k, par;
  basic_block en_block;
  if (reverse)
    en_block = EXIT_BLOCK_PTR;
  else
    en_block = ENTRY_BLOCK_PTR;
  v = di->nodes;
  while (v > 1)
    {
      basic_block bb = di->dfs_to_bb[v];
      edge e, e_next;
      par = di->dfs_parent[v];
      k = v;
      if (reverse)
 e = bb->succ;
      else
 e = bb->pred;
      for (; e; e = e_next)
 {
   TBB k1;
   basic_block b;
   if (reverse)
     {
       b = e->dest;
       e_next = e->succ_next;
     }
   else
     {
       b = e->src;
       e_next = e->pred_next;
     }
   if (b == en_block)
     k1 = di->dfs_order[last_basic_block];
   else
     k1 = di->dfs_order[b->index];
   if (k1 > v)
     k1 = di->key[eval (di, k1)];
   if (k1 < k)
     k = k1;
 }
      di->key[v] = k;
      link_roots (di, par, v);
      di->next_bucket[v] = di->bucket[k];
      di->bucket[k] = v;
      for (w = di->bucket[par]; w; w = di->next_bucket[w])
 {
   k = eval (di, w);
   if (di->key[k] < di->key[w])
     di->dom[w] = k;
   else
     di->dom[w] = par;
 }
      di->bucket[par] = 0;
      v--;
    }
  di->dom[1] = 0;
  for (v = 2; v <= di->nodes; v++)
    if (di->dom[v] != di->key[v])
      di->dom[v] = di->dom[di->dom[v]];
}
static void
assign_dfs_numbers (struct et_node *node, int *num)
{
  struct et_node *son;
  node->dfs_num_in = (*num)++;
  if (node->son)
    {
      assign_dfs_numbers (node->son, num);
      for (son = node->son->right; son != node->son; son = son->right)
 assign_dfs_numbers (son, num);
    }
  node->dfs_num_out = (*num)++;
}
static void
compute_dom_fast_query (enum cdi_direction dir)
{
  int num = 0;
  basic_block bb;
  if (dom_computed[dir] < DOM_NO_FAST_QUERY)
    abort ();
  if (dom_computed[dir] == DOM_OK)
    return;
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    {
      if (!bb->dom[dir]->father)
 assign_dfs_numbers (bb->dom[dir], &num);
    }
  dom_computed[dir] = DOM_OK;
}
void
calculate_dominance_info (enum cdi_direction dir)
{
  struct dom_info di;
  basic_block b;
  if (dom_computed[dir] == DOM_OK)
    return;
  if (dom_computed[dir] != DOM_NO_FAST_QUERY)
    {
      if (dom_computed[dir] != DOM_NONE)
 free_dominance_info (dir);
      if (n_bbs_in_dom_tree[dir])
 abort ();
      for (b = ENTRY_BLOCK_PTR; b; b = b->next_bb)
 {
   b->dom[dir] = et_new_tree (b);
 }
      n_bbs_in_dom_tree[dir] = n_basic_blocks + 2;
      init_dom_info (&di);
      calc_dfs_tree (&di, dir);
      calc_idoms (&di, dir);
      for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = b->next_bb)
 {
   TBB d = di.dom[di.dfs_order[b->index]];
   if (di.dfs_to_bb[d])
     et_set_father (b->dom[dir], di.dfs_to_bb[d]->dom[dir]);
 }
      free_dom_info (&di);
      dom_computed[dir] = DOM_NO_FAST_QUERY;
    }
  compute_dom_fast_query (dir);
}
void
free_dominance_info (enum cdi_direction dir)
{
  basic_block bb;
  if (!dom_computed[dir])
    return;
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    {
      delete_from_dominance_info (dir, bb);
    }
  if (n_bbs_in_dom_tree[dir])
    abort ();
  dom_computed[dir] = DOM_NONE;
}
basic_block
get_immediate_dominator (enum cdi_direction dir, basic_block bb)
{
  struct et_node *node = bb->dom[dir];
  if (!dom_computed[dir])
    abort ();
  if (!node->father)
    return ((void *)0);
  return node->father->data;
}
void
set_immediate_dominator (enum cdi_direction dir, basic_block bb,
    basic_block dominated_by)
{
  struct et_node *node = bb->dom[dir];
  if (!dom_computed[dir])
    abort ();
  if (node->father)
    {
      if (node->father->data == dominated_by)
 return;
      et_split (node);
    }
  if (dominated_by)
    et_set_father (node, dominated_by->dom[dir]);
  if (dom_computed[dir] == DOM_OK)
    dom_computed[dir] = DOM_NO_FAST_QUERY;
}
int
get_dominated_by (enum cdi_direction dir, basic_block bb, basic_block **bbs)
{
  int n;
  struct et_node *node = bb->dom[dir], *son = node->son, *ason;
  if (!dom_computed[dir])
    abort ();
  if (!son)
    {
      *bbs = ((void *)0);
      return 0;
    }
  for (ason = son->right, n = 1; ason != son; ason = ason->right)
    n++;
  *bbs = xmalloc (n * sizeof (basic_block));
  (*bbs)[0] = son->data;
  for (ason = son->right, n = 1; ason != son; ason = ason->right)
    (*bbs)[n++] = ason->data;
  return n;
}
void
redirect_immediate_dominators (enum cdi_direction dir, basic_block bb,
          basic_block to)
{
  struct et_node *bb_node = bb->dom[dir], *to_node = to->dom[dir], *son;
  if (!dom_computed[dir])
    abort ();
  if (!bb_node->son)
    return;
  while (bb_node->son)
    {
      son = bb_node->son;
      et_split (son);
      et_set_father (son, to_node);
    }
  if (dom_computed[dir] == DOM_OK)
    dom_computed[dir] = DOM_NO_FAST_QUERY;
}
basic_block
nearest_common_dominator (enum cdi_direction dir, basic_block bb1, basic_block bb2)
{
  if (!dom_computed[dir])
    abort ();
  if (!bb1)
    return bb2;
  if (!bb2)
    return bb1;
  return et_nca (bb1->dom[dir], bb2->dom[dir])->data;
}
unsigned char
dominated_by_p (enum cdi_direction dir, basic_block bb1, basic_block bb2)
{
  struct et_node *n1 = bb1->dom[dir], *n2 = bb2->dom[dir];
  if (!dom_computed[dir])
    abort ();
  if (dom_computed[dir] == DOM_OK)
    return (n1->dfs_num_in >= n2->dfs_num_in
       && n1->dfs_num_out <= n2->dfs_num_out);
  return et_below (n1, n2);
}
void
verify_dominators (enum cdi_direction dir)
{
  int err = 0;
  basic_block bb;
  if (!dom_computed[dir])
    abort ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      basic_block dom_bb;
      dom_bb = recount_dominator (dir, bb);
      if (dom_bb != get_immediate_dominator (dir, bb))
 {
   error ("dominator of %d should be %d, not %d",
    bb->index, dom_bb->index, get_immediate_dominator(dir, bb)->index);
   err = 1;
 }
    }
  if (err)
    abort ();
}
basic_block
recount_dominator (enum cdi_direction dir, basic_block bb)
{
  basic_block dom_bb = ((void *)0);
  edge e;
  if (!dom_computed[dir])
    abort ();
  if (dir == CDI_DOMINATORS)
    {
      for (e = bb->pred; e; e = e->pred_next)
 {
   if (!dominated_by_p (dir, e->src, bb))
     dom_bb = nearest_common_dominator (dir, dom_bb, e->src);
 }
    }
  else
    {
      for (e = bb->succ; e; e = e->succ_next)
 {
   if (!dominated_by_p (dir, e->dest, bb))
     dom_bb = nearest_common_dominator (dir, dom_bb, e->dest);
 }
    }
  return dom_bb;
}
void
iterate_fix_dominators (enum cdi_direction dir, basic_block *bbs, int n)
{
  int i, changed = 1;
  basic_block old_dom, new_dom;
  if (!dom_computed[dir])
    abort ();
  while (changed)
    {
      changed = 0;
      for (i = 0; i < n; i++)
 {
   old_dom = get_immediate_dominator (dir, bbs[i]);
   new_dom = recount_dominator (dir, bbs[i]);
   if (old_dom != new_dom)
     {
       changed = 1;
       set_immediate_dominator (dir, bbs[i], new_dom);
     }
 }
    }
}
void
add_to_dominance_info (enum cdi_direction dir, basic_block bb)
{
  if (!dom_computed[dir])
    abort ();
  if (bb->dom[dir])
    abort ();
  n_bbs_in_dom_tree[dir]++;
  bb->dom[dir] = et_new_tree (bb);
  if (dom_computed[dir] == DOM_OK)
    dom_computed[dir] = DOM_NO_FAST_QUERY;
}
void
delete_from_dominance_info (enum cdi_direction dir, basic_block bb)
{
  if (!dom_computed[dir])
    abort ();
  et_free_tree (bb->dom[dir]);
  bb->dom[dir] = ((void *)0);
  n_bbs_in_dom_tree[dir]--;
  if (dom_computed[dir] == DOM_OK)
    dom_computed[dir] = DOM_NO_FAST_QUERY;
}
basic_block
first_dom_son (enum cdi_direction dir, basic_block bb)
{
  struct et_node *son = bb->dom[dir]->son;
  return son ? son->data : ((void *)0);
}
basic_block
next_dom_son (enum cdi_direction dir, basic_block bb)
{
  struct et_node *next = bb->dom[dir]->right;
  return next->father->son == next ? ((void *)0) : next->data;
}
void
debug_dominance_info (enum cdi_direction dir)
{
  basic_block bb, bb2;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if ((bb2 = get_immediate_dominator (dir, bb)))
      fprintf (stderr, "%i %i\n", bb->index, bb2->index);
}
static rtx
doloop_condition_get (rtx pattern)
{
  rtx cmp;
  rtx inc;
  rtx reg;
  rtx condition;
  if (((enum rtx_code) (pattern)->code) != PARALLEL)
    return 0;
  cmp = (((((pattern)->u.fld[0]).rtvec1))->elem[0]);
  inc = (((((pattern)->u.fld[0]).rtvec1))->elem[1]);
  if (((enum rtx_code) (inc)->code) != SET || ! (((enum rtx_code) ((((inc)->u.fld[0]).rtx1))->code) == REG))
    return 0;
  reg = (((inc)->u.fld[0]).rtx1);
  if (((enum rtx_code) (cmp)->code) != SET
      || (((cmp)->u.fld[0]).rtx1) != (global_rtl[GR_PC])
      || ((enum rtx_code) ((((cmp)->u.fld[1]).rtx1))->code) != IF_THEN_ELSE
      || ((enum rtx_code) (((((((cmp)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) != LABEL_REF
      || ((((((cmp)->u.fld[1]).rtx1))->u.fld[2]).rtx1) != (global_rtl[GR_PC]))
    return 0;
  condition = ((((((cmp)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
  if ((((enum rtx_code) (condition)->code) != GE && ((enum rtx_code) (condition)->code) != NE)
      || ((enum rtx_code) ((((condition)->u.fld[1]).rtx1))->code) != CONST_INT)
    return 0;
  if ((((condition)->u.fld[0]).rtx1) == reg)
    return condition;
  if (((enum rtx_code) ((((condition)->u.fld[0]).rtx1))->code) == PLUS
      && ((((((condition)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == reg)
    return condition;
  return 0;
}
static unsigned char
doloop_valid_p (struct loop *loop, struct niter_desc *desc)
{
  basic_block *body = get_loop_body (loop), bb;
  rtx insn;
  unsigned i;
  unsigned char result = 1;
  if (!desc->simple_p
      || desc->assumptions
      || desc->infinite)
    {
      if (dump_file)
 fprintf (dump_file, "Doloop: Possible infinite iteration case.\n");
      result = 0;
      goto cleanup;
    }
  for (i = 0; i < loop->num_nodes; i++)
    {
      bb = body[i];
      for (insn = (bb)->head_;
    insn != ((((bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 {
   if (((enum rtx_code) (insn)->code) == CALL_INSN)
     {
       if (dump_file)
  fprintf (dump_file, "Doloop: Function call in loop.\n");
       result = 0;
       goto cleanup;
     }
   if (((enum rtx_code) (insn)->code) == JUMP_INSN
       && (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC
    || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_VEC))
     {
       if (dump_file)
  fprintf (dump_file, "Doloop: Computed branch in the loop.\n");
       result = 0;
       goto cleanup;
     }
 }
    }
  result = 1;
cleanup:
  free (body);
  return result;
}
static void
add_test (rtx cond, basic_block bb, basic_block dest)
{
  rtx seq, jump, label;
  enum machine_mode mode;
  rtx op0 = (((cond)->u.fld[0]).rtx1), op1 = (((cond)->u.fld[1]).rtx1);
  enum rtx_code code = ((enum rtx_code) (cond)->code);
  mode = ((enum machine_mode) ((((cond)->u.fld[0]).rtx1))->mode);
  if (mode == VOIDmode)
    mode = ((enum machine_mode) ((((cond)->u.fld[1]).rtx1))->mode);
  start_sequence ();
  op0 = force_operand (op0, (rtx) 0);
  op1 = force_operand (op1, (rtx) 0);
  label = block_label (dest);
  do_compare_rtx_and_jump (op0, op1, code, 0, mode, (rtx) 0, (rtx) 0, label);
  jump = get_last_insn ();
  (((jump)->u.fld[9]).rtx1) = label;
  (((jump)->u.fld[8]).rtx1)
   = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PROB), ((const_int_rtx[64])), ((((jump)->u.fld[8]).rtx1)))
                                       ;
  (((label)->u.fld[4]).rtint)++;
  seq = get_insns ();
  end_sequence ();
  emit_insn_after (seq, (bb)->end_);
}
static void
doloop_modify (struct loop *loop, struct niter_desc *desc,
        rtx doloop_seq, rtx condition)
{
  rtx counter_reg;
  rtx count, tmp, noloop = (rtx) 0;
  rtx sequence;
  rtx jump_insn;
  rtx jump_label;
  int nonneg = 0, irr;
  unsigned char increment_count;
  basic_block loop_end = desc->out_edge->src;
  jump_insn = (loop_end)->end_;
  if (dump_file)
    {
      fprintf (dump_file, "Doloop: Inserting doloop pattern (");
      if (desc->const_iter)
 fprintf (dump_file, "%lld", desc->niter);
      else
 fputs_unlocked ("runtime", dump_file);
      fputs_unlocked (" iterations).\n", dump_file);
    }
  delete_insn (jump_insn);
  counter_reg = (((condition)->u.fld[0]).rtx1);
  if (((enum rtx_code) (counter_reg)->code) == PLUS)
    counter_reg = (((counter_reg)->u.fld[0]).rtx1);
  count = desc->niter_expr;
  increment_count = 0;
  switch (((enum rtx_code) (condition)->code))
    {
    case NE:
      if ((((condition)->u.fld[1]).rtx1) == (const_int_rtx[64 +1]))
 {
   increment_count = 1;
   noloop = (const_int_rtx[64 +1]);
 }
      else if ((((condition)->u.fld[1]).rtx1) == (const_int_rtx[64]))
        noloop = (const_int_rtx[64]);
      else
 abort ();
      break;
    case GE:
      if ((((condition)->u.fld[1]).rtx1) != (const_int_rtx[64]))
 abort ();
      noloop = (const_int_rtx[64 -1]);
      increment_count = 0;
      if (desc->niter_max
   <= ((unsigned long long) 1
       << (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (counter_reg)->mode)]) * 8)) - 1)))
 nonneg = 1;
      break;
    default:
      abort ();
    }
  if (increment_count)
    count = simplify_gen_binary (PLUS, desc->mode, count, (const_int_rtx[64 +1]));
  start_sequence ();
  tmp = force_operand (count, counter_reg);
  convert_move (counter_reg, tmp, 1);
  sequence = get_insns ();
  end_sequence ();
  emit_insn_after (sequence, (loop_preheader_edge (loop)->src)->end_);
  if (desc->noloop_assumptions)
    {
      rtx ass = desc->noloop_assumptions;
      basic_block preheader = loop_preheader_edge (loop)->src;
      basic_block set_zero
       = loop_split_edge_with (loop_preheader_edge (loop), (rtx) 0);
      basic_block new_preheader
       = loop_split_edge_with (loop_preheader_edge (loop), (rtx) 0);
      basic_block bb;
      edge te;
      gcov_type cnt;
      add_test ((((ass)->u.fld[0]).rtx1), preheader, set_zero);
      preheader1->succ->flags &= ~1;
      cnt = preheader1->succ->count;
      preheader1->succ->probability = 0;
      preheader1->succ->count = 0;
      irr = preheader1->succ->flags & 128;
      te = make_edge (preheader, new_preheader, 1 | irr);
      te->probability = 10000;
      te->count = cnt;
      set_immediate_dominator (CDI_DOMINATORS, new_preheader, preheader);
      set_zero->count = 0;
      set_zero->frequency = 0;
      for (ass = (((ass)->u.fld[1]).rtx1); ass; ass = (((ass)->u.fld[1]).rtx1))
 {
   bb = loop_split_edge_with (te, (rtx) 0);
   te = bb->succ;
   add_test ((((ass)->u.fld[0]).rtx1), bb, set_zero);
   make_edge (bb, set_zero, irr);
 }
      start_sequence ();
      convert_move (counter_reg, noloop, 0);
      sequence = get_insns ();
      end_sequence ();
      emit_insn_after (sequence, (set_zero)->end_);
    }
  emit_jump_insn_after (doloop_seq, (loop_end)->end_);
  jump_insn = (loop_end)->end_;
  jump_label = block_label (desc->in_edge->dest);
  (((jump_insn)->u.fld[9]).rtx1) = jump_label;
  (((jump_label)->u.fld[4]).rtint)++;
  desc->in_edge->flags &= ~1;
  desc->out_edge->flags |= 1;
  if (nonneg)
    {
      (((jump_insn)->u.fld[8]).rtx1)
 = gen_rtx_fmt_ee (EXPR_LIST, (REG_NONNEG), ((rtx) 0), ((((jump_insn)->u.fld[8]).rtx1)));
    }
}
static unsigned char
doloop_optimize (struct loop *loop)
{
  enum machine_mode mode;
  rtx doloop_seq, doloop_pat, doloop_reg;
  rtx iterations;
  rtx iterations_max;
  rtx start_label;
  rtx condition;
  unsigned level, est_niter;
  struct niter_desc *desc;
  if (dump_file)
    fprintf (dump_file, "Doloop: Processing loop %d.\n", loop->num);
  iv_analysis_loop_init (loop);
  desc = get_simple_loop_desc (loop);
  if (!doloop_valid_p (loop, desc))
    {
      if (dump_file)
 fprintf (dump_file,
   "Doloop: The loop is not suitable.\n");
      return 0;
    }
  mode = desc->mode;
  est_niter = 3;
  if (desc->const_iter)
    est_niter = desc->niter;
  if (loop->header1->count)
    est_niter = expected_loop_iterations (loop);
  if (est_niter < 3)
    {
      if (dump_file)
 fprintf (dump_file,
   "Doloop: Too few iterations (%u) to be profitable.\n",
   est_niter);
      return 0;
    }
  iterations = desc->const_iter ? desc->niter_expr : (const_int_rtx[64]);
  iterations_max = gen_rtx_CONST_INT (VOIDmode, (long) (desc->niter_max));
  level = get_loop_level (loop) + 1;
  start_label = block_label (desc->in_edge->dest);
  doloop_reg = gen_reg_rtx (mode);
  doloop_seq = gen_doloop_end (doloop_reg, iterations, iterations_max,
          gen_rtx_CONST_INT (VOIDmode, (long) (level)), start_label);
  if (! doloop_seq && mode != word_mode)
    {
      ((doloop_reg)->mode = (word_mode));
      doloop_seq = gen_doloop_end (doloop_reg, iterations, iterations_max,
       gen_rtx_CONST_INT (VOIDmode, (long) (level)), start_label);
    }
  if (! doloop_seq)
    {
      if (dump_file)
 fprintf (dump_file,
   "Doloop: Target unwilling to use doloop pattern!\n");
      return 0;
    }
  doloop_pat = doloop_seq;
  if (((((enum rtx_code) (doloop_pat)->code) == INSN) || (((enum rtx_code) (doloop_pat)->code) == JUMP_INSN) || (((enum rtx_code) (doloop_pat)->code) == CALL_INSN)))
    {
      while ((((doloop_pat)->u.fld[2]).rtx1) != (rtx) 0)
 doloop_pat = (((doloop_pat)->u.fld[2]).rtx1);
      if (((enum rtx_code) (doloop_pat)->code) == JUMP_INSN)
 doloop_pat = (((doloop_pat)->u.fld[5]).rtx1);
      else
 doloop_pat = (rtx) 0;
    }
  if (! doloop_pat
      || ! (condition = doloop_condition_get (doloop_pat)))
    {
      if (dump_file)
 fprintf (dump_file, "Doloop: Unrecognizable doloop pattern!\n");
      return 0;
    }
  doloop_modify (loop, desc, doloop_seq, condition);
  return 1;
}
void
doloop_optimize_loops (struct loops *loops)
{
  unsigned i;
  struct loop *loop;
  for (i = 1; i < loops->num; i++)
    {
      loop = loops->parray[i];
      if (!loop)
 continue;
      doloop_optimize (loop);
    }
  iv_analysis_done ();
}
extern void dw2_assemble_integer (int, rtx);
extern void dw2_asm_output_data (int, unsigned long,
     const char *, ...)
     ;
extern void dw2_asm_output_delta (int, const char *, const char *,
      const char *, ...)
     ;
extern void dw2_asm_output_offset (int, const char *, const char *, ...)
     ;
extern void dw2_asm_output_pcrel (int, const char *, const char *, ...)
     ;
extern void dw2_asm_output_addr (int, const char *, const char *, ...)
     ;
extern void dw2_asm_output_addr_rtx (int, rtx, const char *, ...)
     ;
extern void dw2_asm_output_encoded_addr_rtx (int, rtx,
          const char *, ...)
     ;
extern void dw2_asm_output_nstring (const char *, size_t,
        const char *, ...)
     ;
extern void dw2_asm_output_data_uleb128 (unsigned long,
      const char *, ...)
     ;
extern void dw2_asm_output_data_sleb128 (long,
      const char *, ...)
     ;
extern void dw2_asm_output_delta_uleb128 (const char *, const char *,
       const char *, ...)
     ;
extern void dw2_asm_output_delta_sleb128 (const char *, const char *,
       const char *, ...)
     ;
extern int size_of_uleb128 (unsigned long);
extern int size_of_sleb128 (long);
extern int size_of_encoded_value (int);
extern const char *eh_data_format_name (int);
extern void dw2_output_indirect_constants (void);
enum dwarf_tag
  {
    DW_TAG_padding = 0x00,
    DW_TAG_array_type = 0x01,
    DW_TAG_class_type = 0x02,
    DW_TAG_entry_point = 0x03,
    DW_TAG_enumeration_type = 0x04,
    DW_TAG_formal_parameter = 0x05,
    DW_TAG_imported_declaration = 0x08,
    DW_TAG_label = 0x0a,
    DW_TAG_lexical_block = 0x0b,
    DW_TAG_member = 0x0d,
    DW_TAG_pointer_type = 0x0f,
    DW_TAG_reference_type = 0x10,
    DW_TAG_compile_unit = 0x11,
    DW_TAG_string_type = 0x12,
    DW_TAG_structure_type = 0x13,
    DW_TAG_subroutine_type = 0x15,
    DW_TAG_typedef = 0x16,
    DW_TAG_union_type = 0x17,
    DW_TAG_unspecified_parameters = 0x18,
    DW_TAG_variant = 0x19,
    DW_TAG_common_block = 0x1a,
    DW_TAG_common_inclusion = 0x1b,
    DW_TAG_inheritance = 0x1c,
    DW_TAG_inlined_subroutine = 0x1d,
    DW_TAG_module = 0x1e,
    DW_TAG_ptr_to_member_type = 0x1f,
    DW_TAG_set_type = 0x20,
    DW_TAG_subrange_type = 0x21,
    DW_TAG_with_stmt = 0x22,
    DW_TAG_access_declaration = 0x23,
    DW_TAG_base_type = 0x24,
    DW_TAG_catch_block = 0x25,
    DW_TAG_const_type = 0x26,
    DW_TAG_constant = 0x27,
    DW_TAG_enumerator = 0x28,
    DW_TAG_file_type = 0x29,
    DW_TAG_friend = 0x2a,
    DW_TAG_namelist = 0x2b,
    DW_TAG_namelist_item = 0x2c,
    DW_TAG_packed_type = 0x2d,
    DW_TAG_subprogram = 0x2e,
    DW_TAG_template_type_param = 0x2f,
    DW_TAG_template_value_param = 0x30,
    DW_TAG_thrown_type = 0x31,
    DW_TAG_try_block = 0x32,
    DW_TAG_variant_part = 0x33,
    DW_TAG_variable = 0x34,
    DW_TAG_volatile_type = 0x35,
    DW_TAG_dwarf_procedure = 0x36,
    DW_TAG_restrict_type = 0x37,
    DW_TAG_interface_type = 0x38,
    DW_TAG_namespace = 0x39,
    DW_TAG_imported_module = 0x3a,
    DW_TAG_unspecified_type = 0x3b,
    DW_TAG_partial_unit = 0x3c,
    DW_TAG_imported_unit = 0x3d,
    DW_TAG_MIPS_loop = 0x4081,
    DW_TAG_format_label = 0x4101,
    DW_TAG_function_template = 0x4102,
    DW_TAG_class_template = 0x4103,
    DW_TAG_GNU_BINCL = 0x4104,
    DW_TAG_GNU_EINCL = 0x4105
  };
enum dwarf_form
  {
    DW_FORM_addr = 0x01,
    DW_FORM_block2 = 0x03,
    DW_FORM_block4 = 0x04,
    DW_FORM_data2 = 0x05,
    DW_FORM_data4 = 0x06,
    DW_FORM_data8 = 0x07,
    DW_FORM_string = 0x08,
    DW_FORM_block = 0x09,
    DW_FORM_block1 = 0x0a,
    DW_FORM_data1 = 0x0b,
    DW_FORM_flag = 0x0c,
    DW_FORM_sdata = 0x0d,
    DW_FORM_strp = 0x0e,
    DW_FORM_udata = 0x0f,
    DW_FORM_ref_addr = 0x10,
    DW_FORM_ref1 = 0x11,
    DW_FORM_ref2 = 0x12,
    DW_FORM_ref4 = 0x13,
    DW_FORM_ref8 = 0x14,
    DW_FORM_ref_udata = 0x15,
    DW_FORM_indirect = 0x16
  };
enum dwarf_attribute
  {
    DW_AT_sibling = 0x01,
    DW_AT_location = 0x02,
    DW_AT_name = 0x03,
    DW_AT_ordering = 0x09,
    DW_AT_subscr_data = 0x0a,
    DW_AT_byte_size = 0x0b,
    DW_AT_bit_offset = 0x0c,
    DW_AT_bit_size = 0x0d,
    DW_AT_element_list = 0x0f,
    DW_AT_stmt_list = 0x10,
    DW_AT_low_pc = 0x11,
    DW_AT_high_pc = 0x12,
    DW_AT_language = 0x13,
    DW_AT_member = 0x14,
    DW_AT_discr = 0x15,
    DW_AT_discr_value = 0x16,
    DW_AT_visibility = 0x17,
    DW_AT_import = 0x18,
    DW_AT_string_length = 0x19,
    DW_AT_common_reference = 0x1a,
    DW_AT_comp_dir = 0x1b,
    DW_AT_const_value = 0x1c,
    DW_AT_containing_type = 0x1d,
    DW_AT_default_value = 0x1e,
    DW_AT_inline = 0x20,
    DW_AT_is_optional = 0x21,
    DW_AT_lower_bound = 0x22,
    DW_AT_producer = 0x25,
    DW_AT_prototyped = 0x27,
    DW_AT_return_addr = 0x2a,
    DW_AT_start_scope = 0x2c,
    DW_AT_stride_size = 0x2e,
    DW_AT_upper_bound = 0x2f,
    DW_AT_abstract_origin = 0x31,
    DW_AT_accessibility = 0x32,
    DW_AT_address_class = 0x33,
    DW_AT_artificial = 0x34,
    DW_AT_base_types = 0x35,
    DW_AT_calling_convention = 0x36,
    DW_AT_count = 0x37,
    DW_AT_data_member_location = 0x38,
    DW_AT_decl_column = 0x39,
    DW_AT_decl_file = 0x3a,
    DW_AT_decl_line = 0x3b,
    DW_AT_declaration = 0x3c,
    DW_AT_discr_list = 0x3d,
    DW_AT_encoding = 0x3e,
    DW_AT_external = 0x3f,
    DW_AT_frame_base = 0x40,
    DW_AT_friend = 0x41,
    DW_AT_identifier_case = 0x42,
    DW_AT_macro_info = 0x43,
    DW_AT_namelist_items = 0x44,
    DW_AT_priority = 0x45,
    DW_AT_segment = 0x46,
    DW_AT_specification = 0x47,
    DW_AT_static_link = 0x48,
    DW_AT_type = 0x49,
    DW_AT_use_location = 0x4a,
    DW_AT_variable_parameter = 0x4b,
    DW_AT_virtuality = 0x4c,
    DW_AT_vtable_elem_location = 0x4d,
    DW_AT_allocated = 0x4e,
    DW_AT_associated = 0x4f,
    DW_AT_data_location = 0x50,
    DW_AT_stride = 0x51,
    DW_AT_entry_pc = 0x52,
    DW_AT_use_UTF8 = 0x53,
    DW_AT_extension = 0x54,
    DW_AT_ranges = 0x55,
    DW_AT_trampoline = 0x56,
    DW_AT_call_column = 0x57,
    DW_AT_call_file = 0x58,
    DW_AT_call_line = 0x59,
    DW_AT_MIPS_fde = 0x2001,
    DW_AT_MIPS_loop_begin = 0x2002,
    DW_AT_MIPS_tail_loop_begin = 0x2003,
    DW_AT_MIPS_epilog_begin = 0x2004,
    DW_AT_MIPS_loop_unroll_factor = 0x2005,
    DW_AT_MIPS_software_pipeline_depth = 0x2006,
    DW_AT_MIPS_linkage_name = 0x2007,
    DW_AT_MIPS_stride = 0x2008,
    DW_AT_MIPS_abstract_name = 0x2009,
    DW_AT_MIPS_clone_origin = 0x200a,
    DW_AT_MIPS_has_inlines = 0x200b,
    DW_AT_sf_names = 0x2101,
    DW_AT_src_info = 0x2102,
    DW_AT_mac_info = 0x2103,
    DW_AT_src_coords = 0x2104,
    DW_AT_body_begin = 0x2105,
    DW_AT_body_end = 0x2106,
    DW_AT_GNU_vector = 0x2107,
    DW_AT_VMS_rtnbeg_pd_address = 0x2201
  };
enum dwarf_location_atom
  {
    DW_OP_addr = 0x03,
    DW_OP_deref = 0x06,
    DW_OP_const1u = 0x08,
    DW_OP_const1s = 0x09,
    DW_OP_const2u = 0x0a,
    DW_OP_const2s = 0x0b,
    DW_OP_const4u = 0x0c,
    DW_OP_const4s = 0x0d,
    DW_OP_const8u = 0x0e,
    DW_OP_const8s = 0x0f,
    DW_OP_constu = 0x10,
    DW_OP_consts = 0x11,
    DW_OP_dup = 0x12,
    DW_OP_drop = 0x13,
    DW_OP_over = 0x14,
    DW_OP_pick = 0x15,
    DW_OP_swap = 0x16,
    DW_OP_rot = 0x17,
    DW_OP_xderef = 0x18,
    DW_OP_abs = 0x19,
    DW_OP_and = 0x1a,
    DW_OP_div = 0x1b,
    DW_OP_minus = 0x1c,
    DW_OP_mod = 0x1d,
    DW_OP_mul = 0x1e,
    DW_OP_neg = 0x1f,
    DW_OP_not = 0x20,
    DW_OP_or = 0x21,
    DW_OP_plus = 0x22,
    DW_OP_plus_uconst = 0x23,
    DW_OP_shl = 0x24,
    DW_OP_shr = 0x25,
    DW_OP_shra = 0x26,
    DW_OP_xor = 0x27,
    DW_OP_bra = 0x28,
    DW_OP_eq = 0x29,
    DW_OP_ge = 0x2a,
    DW_OP_gt = 0x2b,
    DW_OP_le = 0x2c,
    DW_OP_lt = 0x2d,
    DW_OP_ne = 0x2e,
    DW_OP_skip = 0x2f,
    DW_OP_lit0 = 0x30,
    DW_OP_lit1 = 0x31,
    DW_OP_lit2 = 0x32,
    DW_OP_lit3 = 0x33,
    DW_OP_lit4 = 0x34,
    DW_OP_lit5 = 0x35,
    DW_OP_lit6 = 0x36,
    DW_OP_lit7 = 0x37,
    DW_OP_lit8 = 0x38,
    DW_OP_lit9 = 0x39,
    DW_OP_lit10 = 0x3a,
    DW_OP_lit11 = 0x3b,
    DW_OP_lit12 = 0x3c,
    DW_OP_lit13 = 0x3d,
    DW_OP_lit14 = 0x3e,
    DW_OP_lit15 = 0x3f,
    DW_OP_lit16 = 0x40,
    DW_OP_lit17 = 0x41,
    DW_OP_lit18 = 0x42,
    DW_OP_lit19 = 0x43,
    DW_OP_lit20 = 0x44,
    DW_OP_lit21 = 0x45,
    DW_OP_lit22 = 0x46,
    DW_OP_lit23 = 0x47,
    DW_OP_lit24 = 0x48,
    DW_OP_lit25 = 0x49,
    DW_OP_lit26 = 0x4a,
    DW_OP_lit27 = 0x4b,
    DW_OP_lit28 = 0x4c,
    DW_OP_lit29 = 0x4d,
    DW_OP_lit30 = 0x4e,
    DW_OP_lit31 = 0x4f,
    DW_OP_reg0 = 0x50,
    DW_OP_reg1 = 0x51,
    DW_OP_reg2 = 0x52,
    DW_OP_reg3 = 0x53,
    DW_OP_reg4 = 0x54,
    DW_OP_reg5 = 0x55,
    DW_OP_reg6 = 0x56,
    DW_OP_reg7 = 0x57,
    DW_OP_reg8 = 0x58,
    DW_OP_reg9 = 0x59,
    DW_OP_reg10 = 0x5a,
    DW_OP_reg11 = 0x5b,
    DW_OP_reg12 = 0x5c,
    DW_OP_reg13 = 0x5d,
    DW_OP_reg14 = 0x5e,
    DW_OP_reg15 = 0x5f,
    DW_OP_reg16 = 0x60,
    DW_OP_reg17 = 0x61,
    DW_OP_reg18 = 0x62,
    DW_OP_reg19 = 0x63,
    DW_OP_reg20 = 0x64,
    DW_OP_reg21 = 0x65,
    DW_OP_reg22 = 0x66,
    DW_OP_reg23 = 0x67,
    DW_OP_reg24 = 0x68,
    DW_OP_reg25 = 0x69,
    DW_OP_reg26 = 0x6a,
    DW_OP_reg27 = 0x6b,
    DW_OP_reg28 = 0x6c,
    DW_OP_reg29 = 0x6d,
    DW_OP_reg30 = 0x6e,
    DW_OP_reg31 = 0x6f,
    DW_OP_breg0 = 0x70,
    DW_OP_breg1 = 0x71,
    DW_OP_breg2 = 0x72,
    DW_OP_breg3 = 0x73,
    DW_OP_breg4 = 0x74,
    DW_OP_breg5 = 0x75,
    DW_OP_breg6 = 0x76,
    DW_OP_breg7 = 0x77,
    DW_OP_breg8 = 0x78,
    DW_OP_breg9 = 0x79,
    DW_OP_breg10 = 0x7a,
    DW_OP_breg11 = 0x7b,
    DW_OP_breg12 = 0x7c,
    DW_OP_breg13 = 0x7d,
    DW_OP_breg14 = 0x7e,
    DW_OP_breg15 = 0x7f,
    DW_OP_breg16 = 0x80,
    DW_OP_breg17 = 0x81,
    DW_OP_breg18 = 0x82,
    DW_OP_breg19 = 0x83,
    DW_OP_breg20 = 0x84,
    DW_OP_breg21 = 0x85,
    DW_OP_breg22 = 0x86,
    DW_OP_breg23 = 0x87,
    DW_OP_breg24 = 0x88,
    DW_OP_breg25 = 0x89,
    DW_OP_breg26 = 0x8a,
    DW_OP_breg27 = 0x8b,
    DW_OP_breg28 = 0x8c,
    DW_OP_breg29 = 0x8d,
    DW_OP_breg30 = 0x8e,
    DW_OP_breg31 = 0x8f,
    DW_OP_regx = 0x90,
    DW_OP_fbreg = 0x91,
    DW_OP_bregx = 0x92,
    DW_OP_piece = 0x93,
    DW_OP_deref_size = 0x94,
    DW_OP_xderef_size = 0x95,
    DW_OP_nop = 0x96,
    DW_OP_push_object_address = 0x97,
    DW_OP_call2 = 0x98,
    DW_OP_call4 = 0x99,
    DW_OP_call_ref = 0x9a,
    DW_OP_GNU_push_tls_address = 0xe0
  };
enum dwarf_type
  {
    DW_ATE_void = 0x0,
    DW_ATE_address = 0x1,
    DW_ATE_boolean = 0x2,
    DW_ATE_complex_float = 0x3,
    DW_ATE_float = 0x4,
    DW_ATE_signed = 0x5,
    DW_ATE_signed_char = 0x6,
    DW_ATE_unsigned = 0x7,
    DW_ATE_unsigned_char = 0x8,
    DW_ATE_imaginary_float = 0x9
  };
enum dwarf_array_dim_ordering
  {
    DW_ORD_row_major = 0,
    DW_ORD_col_major = 1
  };
enum dwarf_access_attribute
  {
    DW_ACCESS_public = 1,
    DW_ACCESS_protected = 2,
    DW_ACCESS_private = 3
  };
enum dwarf_visibility_attribute
  {
    DW_VIS_local = 1,
    DW_VIS_exported = 2,
    DW_VIS_qualified = 3
  };
enum dwarf_virtuality_attribute
  {
    DW_VIRTUALITY_none = 0,
    DW_VIRTUALITY_virtual = 1,
    DW_VIRTUALITY_pure_virtual = 2
  };
enum dwarf_id_case
  {
    DW_ID_case_sensitive = 0,
    DW_ID_up_case = 1,
    DW_ID_down_case = 2,
    DW_ID_case_insensitive = 3
  };
enum dwarf_calling_convention
  {
    DW_CC_normal = 0x1,
    DW_CC_program = 0x2,
    DW_CC_nocall = 0x3
  };
enum dwarf_inline_attribute
  {
    DW_INL_not_inlined = 0,
    DW_INL_inlined = 1,
    DW_INL_declared_not_inlined = 2,
    DW_INL_declared_inlined = 3
  };
enum dwarf_discrim_list
  {
    DW_DSC_label = 0,
    DW_DSC_range = 1
  };
enum dwarf_line_number_ops
  {
    DW_LNS_extended_op = 0,
    DW_LNS_copy = 1,
    DW_LNS_advance_pc = 2,
    DW_LNS_advance_line = 3,
    DW_LNS_set_file = 4,
    DW_LNS_set_column = 5,
    DW_LNS_negate_stmt = 6,
    DW_LNS_set_basic_block = 7,
    DW_LNS_const_add_pc = 8,
    DW_LNS_fixed_advance_pc = 9,
    DW_LNS_set_prologue_end = 10,
    DW_LNS_set_epilogue_begin = 11,
    DW_LNS_set_isa = 12
  };
enum dwarf_line_number_x_ops
  {
    DW_LNE_end_sequence = 1,
    DW_LNE_set_address = 2,
    DW_LNE_define_file = 3
  };
enum dwarf_call_frame_info
  {
    DW_CFA_advance_loc = 0x40,
    DW_CFA_offset = 0x80,
    DW_CFA_restore = 0xc0,
    DW_CFA_nop = 0x00,
    DW_CFA_set_loc = 0x01,
    DW_CFA_advance_loc1 = 0x02,
    DW_CFA_advance_loc2 = 0x03,
    DW_CFA_advance_loc4 = 0x04,
    DW_CFA_offset_extended = 0x05,
    DW_CFA_restore_extended = 0x06,
    DW_CFA_undefined = 0x07,
    DW_CFA_same_value = 0x08,
    DW_CFA_register = 0x09,
    DW_CFA_remember_state = 0x0a,
    DW_CFA_restore_state = 0x0b,
    DW_CFA_def_cfa = 0x0c,
    DW_CFA_def_cfa_register = 0x0d,
    DW_CFA_def_cfa_offset = 0x0e,
    DW_CFA_def_cfa_expression = 0x0f,
    DW_CFA_expression = 0x10,
    DW_CFA_offset_extended_sf = 0x11,
    DW_CFA_def_cfa_sf = 0x12,
    DW_CFA_def_cfa_offset_sf = 0x13,
    DW_CFA_MIPS_advance_loc8 = 0x1d,
    DW_CFA_GNU_window_save = 0x2d,
    DW_CFA_GNU_args_size = 0x2e,
    DW_CFA_GNU_negative_offset_extended = 0x2f
  };
enum dwarf_source_language
  {
    DW_LANG_C89 = 0x0001,
    DW_LANG_C = 0x0002,
    DW_LANG_Ada83 = 0x0003,
    DW_LANG_C_plus_plus = 0x0004,
    DW_LANG_Cobol74 = 0x0005,
    DW_LANG_Cobol85 = 0x0006,
    DW_LANG_Fortran77 = 0x0007,
    DW_LANG_Fortran90 = 0x0008,
    DW_LANG_Pascal83 = 0x0009,
    DW_LANG_Modula2 = 0x000a,
    DW_LANG_Java = 0x000b,
    DW_LANG_C99 = 0x000c,
    DW_LANG_Ada95 = 0x000d,
    DW_LANG_Fortran95 = 0x000e,
    DW_LANG_Mips_Assembler = 0x8001
  };
enum dwarf_macinfo_record_type
  {
    DW_MACINFO_define = 1,
    DW_MACINFO_undef = 2,
    DW_MACINFO_start_file = 3,
    DW_MACINFO_end_file = 4,
    DW_MACINFO_vendor_ext = 255
  };
void
dw2_assemble_integer (int size, rtx x)
{
  const char *op = integer_asm_op (size, 0);
  if (op)
    {
      fputs_unlocked (op, asm_out_file);
      if (((enum rtx_code) (x)->code) == CONST_INT)
 fprintf (asm_out_file, "0x%lx", ((x)->u.hwint[0]));
      else
 output_addr_const (asm_out_file, x);
    }
  else
    assemble_integer (x, size, 8, 1);
}
void
dw2_asm_output_data (int size, unsigned long value1,
       const char *comment, ...)
{
  va_list ap;
  __builtin_va_start(ap,comment);
  if (size * 8 < (8 * 4))
    value1 &= ~(~(unsigned long) 0 << (size * 8));
  dw2_assemble_integer (size, gen_rtx_CONST_INT (VOIDmode, (long) (value1)));
  if (flag_debug_asm && comment)
    {
      fprintf (asm_out_file, "\t%s ", "#");
      vfprintf (asm_out_file, comment, ap);
    }
  fputc_unlocked ('\n', asm_out_file);
  __builtin_va_end(ap);
}
void
dw2_asm_output_delta (int size, const char *lab1, const char *lab2,
        const char *comment, ...)
{
  va_list ap;
  __builtin_va_start(ap,comment);
  dw2_assemble_integer (size,
   gen_rtx_fmt_ee (MINUS, ((0 ? DImode : SImode)), (gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (lab1))), (gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (lab2))))
                                            );
  if (flag_debug_asm && comment)
    {
      fprintf (asm_out_file, "\t%s ", "#");
      vfprintf (asm_out_file, comment, ap);
    }
  fputc_unlocked ('\n', asm_out_file);
  __builtin_va_end(ap);
}
void
dw2_asm_output_offset (int size, const char *label,
         const char *comment, ...)
{
  va_list ap;
  __builtin_va_start(ap,comment);
  dw2_assemble_integer (size, gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (label)));
  if (flag_debug_asm && comment)
    {
      fprintf (asm_out_file, "\t%s ", "#");
      vfprintf (asm_out_file, comment, ap);
    }
  fputc_unlocked ('\n', asm_out_file);
  __builtin_va_end(ap);
}
void
dw2_asm_output_pcrel (int size ,
        const char *label ,
        const char *comment, ...)
{
  va_list ap;
  __builtin_va_start(ap,comment);
  dw2_assemble_integer (size,
   gen_rtx_fmt_ee (MINUS, ((0 ? DImode : SImode)), (gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (label))), ((global_rtl[GR_PC])))
                  );
  if (flag_debug_asm && comment)
    {
      fprintf (asm_out_file, "\t%s ", "#");
      vfprintf (asm_out_file, comment, ap);
    }
  fputc_unlocked ('\n', asm_out_file);
  __builtin_va_end(ap);
}
void
dw2_asm_output_addr (int size, const char *label,
       const char *comment, ...)
{
  va_list ap;
  __builtin_va_start(ap,comment);
  dw2_assemble_integer (size, gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (label)));
  if (flag_debug_asm && comment)
    {
      fprintf (asm_out_file, "\t%s ", "#");
      vfprintf (asm_out_file, comment, ap);
    }
  fputc_unlocked ('\n', asm_out_file);
  __builtin_va_end(ap);
}
void
dw2_asm_output_addr_rtx (int size, rtx addr,
    const char *comment, ...)
{
  va_list ap;
  __builtin_va_start(ap,comment);
  dw2_assemble_integer (size, addr);
  if (flag_debug_asm && comment)
    {
      fprintf (asm_out_file, "\t%s ", "#");
      vfprintf (asm_out_file, comment, ap);
    }
  fputc_unlocked ('\n', asm_out_file);
  __builtin_va_end(ap);
}
void
dw2_asm_output_nstring (const char *str, size_t orig_len,
   const char *comment, ...)
{
  size_t i, len;
  va_list ap;
  __builtin_va_start(ap,comment);
  len = orig_len;
  if (len == (size_t) -1)
    len = strlen (str);
  if (flag_debug_asm && comment)
    {
      fputs_unlocked ("\t.ascii \"", asm_out_file);
      for (i = 0; i < len; i++)
 {
   int c = str[i];
   if (c == '\"' || c == '\\')
     fputc_unlocked ('\\', asm_out_file);
   if ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isprint)))
     fputc_unlocked (c, asm_out_file);
   else
     fprintf (asm_out_file, "\\%o", c);
 }
      fprintf (asm_out_file, "\\0\"\t%s ", "#");
      vfprintf (asm_out_file, comment, ap);
      fputc_unlocked ('\n', asm_out_file);
    }
  else
    {
      if (orig_len == (size_t) -1)
 len += 1;
      do { register const unsigned char *_ascii_bytes = (const unsigned char *) (str); register const unsigned char *limit = _ascii_bytes + (len); register unsigned bytes_in_chunk = 0; for (; _ascii_bytes < limit; _ascii_bytes++) { register const unsigned char *p; if (bytes_in_chunk >= 60) { fprintf ((asm_out_file), "\"\n"); bytes_in_chunk = 0; } for (p = _ascii_bytes; p < limit && *p != '\0'; p++) continue; if (p < limit && (p - _ascii_bytes) <= (long)((unsigned) 256)) { if (bytes_in_chunk > 0) { fprintf ((asm_out_file), "\"\n"); bytes_in_chunk = 0; } do { register const unsigned char *_limited_str = (const unsigned char *) (_ascii_bytes); register unsigned ch; fprintf (((asm_out_file)), "%s\"", "\t.string1\t"); for (; (ch = *_limited_str); _limited_str++) { register int escape; switch (escape = "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"[ch]) { case 0: putc_unlocked (ch, ((asm_out_file))); break; case 1: fprintf (((asm_out_file)), "\\%03o", ch); break; default: putc_unlocked ('\\', ((asm_out_file))); putc_unlocked (escape, ((asm_out_file))); break; } } fprintf (((asm_out_file)), "\"\n"); } while (0); _ascii_bytes = p; } else { register int escape; register unsigned ch; if (bytes_in_chunk == 0) fprintf ((asm_out_file), "%s\"", "\t.ascii\t"); switch (escape = "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"[ch = *_ascii_bytes]) { case 0: putc_unlocked (ch, (asm_out_file)); bytes_in_chunk++; break; case 1: fprintf ((asm_out_file), "\\%03o", ch); bytes_in_chunk += 4; break; default: putc_unlocked ('\\', (asm_out_file)); putc_unlocked (escape, (asm_out_file)); bytes_in_chunk += 2; break; } } } if (bytes_in_chunk > 0) fprintf ((asm_out_file), "\"\n"); } while (0);
      if (orig_len != (size_t) -1)
 assemble_integer ((const_int_rtx[64]), 1, 8, 1);
    }
  __builtin_va_end(ap);
}
int
size_of_uleb128 (unsigned long value1)
{
  int size = 0;
  do
    {
      value1 >>= 7;
      size += 1;
    }
  while (value1 != 0);
  return size;
}
int
size_of_sleb128 (long value1)
{
  int size = 0, byte;
  do
    {
      byte = (value1 & 0x7f);
      value1 >>= 7;
      size += 1;
    }
  while (!((value1 == 0 && (byte & 0x40) == 0)
    || (value1 == -1 && (byte & 0x40) != 0)));
  return size;
}
int
size_of_encoded_value (int encoding)
{
  if (encoding == 0xff)
    return 0;
  switch (encoding & 0x07)
    {
    case 0x00:
      return (8 * (0 ? 8 : 4)) / 8;
    case 0x02:
      return 2;
    case 0x03:
      return 4;
    case 0x04:
      return 8;
    }
  abort ();
}
const char *
eh_data_format_name (int format)
{
  switch (format) {
  case 0x00: return "absolute";
  case 0xff: return "omit";
  case 0x50: return "aligned absolute";
  case 0x01: return "uleb128";
  case 0x02: return "udata2";
  case 0x03: return "udata4";
  case 0x04: return "udata8";
  case 0x09: return "sleb128";
  case 0x0A: return "sdata2";
  case 0x0B: return "sdata4";
  case 0x0C: return "sdata8";
  case 0x00 | 0x10: return "pcrel";
  case 0x01 | 0x10: return "pcrel uleb128";
  case 0x02 | 0x10: return "pcrel udata2";
  case 0x03 | 0x10: return "pcrel udata4";
  case 0x04 | 0x10: return "pcrel udata8";
  case 0x09 | 0x10: return "pcrel sleb128";
  case 0x0A | 0x10: return "pcrel sdata2";
  case 0x0B | 0x10: return "pcrel sdata4";
  case 0x0C | 0x10: return "pcrel sdata8";
  case 0x00 | 0x20: return "textrel";
  case 0x01 | 0x20: return "textrel uleb128";
  case 0x02 | 0x20: return "textrel udata2";
  case 0x03 | 0x20: return "textrel udata4";
  case 0x04 | 0x20: return "textrel udata8";
  case 0x09 | 0x20: return "textrel sleb128";
  case 0x0A | 0x20: return "textrel sdata2";
  case 0x0B | 0x20: return "textrel sdata4";
  case 0x0C | 0x20: return "textrel sdata8";
  case 0x00 | 0x30: return "datarel";
  case 0x01 | 0x30: return "datarel uleb128";
  case 0x02 | 0x30: return "datarel udata2";
  case 0x03 | 0x30: return "datarel udata4";
  case 0x04 | 0x30: return "datarel udata8";
  case 0x09 | 0x30: return "datarel sleb128";
  case 0x0A | 0x30: return "datarel sdata2";
  case 0x0B | 0x30: return "datarel sdata4";
  case 0x0C | 0x30: return "datarel sdata8";
  case 0x00 | 0x40: return "funcrel";
  case 0x01 | 0x40: return "funcrel uleb128";
  case 0x02 | 0x40: return "funcrel udata2";
  case 0x03 | 0x40: return "funcrel udata4";
  case 0x04 | 0x40: return "funcrel udata8";
  case 0x09 | 0x40: return "funcrel sleb128";
  case 0x0A | 0x40: return "funcrel sdata2";
  case 0x0B | 0x40: return "funcrel sdata4";
  case 0x0C | 0x40: return "funcrel sdata8";
  case 0x80 | 0x00 | 0x10: return "indirect pcrel";
  case 0x80 | 0x01 | 0x10: return "indirect pcrel uleb128";
  case 0x80 | 0x02 | 0x10: return "indirect pcrel udata2";
  case 0x80 | 0x03 | 0x10: return "indirect pcrel udata4";
  case 0x80 | 0x04 | 0x10: return "indirect pcrel udata8";
  case 0x80 | 0x09 | 0x10: return "indirect pcrel sleb128";
  case 0x80 | 0x0A | 0x10: return "indirect pcrel sdata2";
  case 0x80 | 0x0B | 0x10: return "indirect pcrel sdata4";
  case 0x80 | 0x0C | 0x10: return "indirect pcrel sdata8";
  case 0x80 | 0x00 | 0x20: return "indirect textrel";
  case 0x80 | 0x01 | 0x20: return "indirect textrel uleb128";
  case 0x80 | 0x02 | 0x20: return "indirect textrel udata2";
  case 0x80 | 0x03 | 0x20: return "indirect textrel udata4";
  case 0x80 | 0x04 | 0x20: return "indirect textrel udata8";
  case 0x80 | 0x09 | 0x20: return "indirect textrel sleb128";
  case 0x80 | 0x0A | 0x20: return "indirect textrel sdata2";
  case 0x80 | 0x0B | 0x20: return "indirect textrel sdata4";
  case 0x80 | 0x0C | 0x20: return "indirect textrel sdata8";
  case 0x80 | 0x00 | 0x30: return "indirect datarel";
  case 0x80 | 0x01 | 0x30: return "indirect datarel uleb128";
  case 0x80 | 0x02 | 0x30: return "indirect datarel udata2";
  case 0x80 | 0x03 | 0x30: return "indirect datarel udata4";
  case 0x80 | 0x04 | 0x30: return "indirect datarel udata8";
  case 0x80 | 0x09 | 0x30: return "indirect datarel sleb128";
  case 0x80 | 0x0A | 0x30: return "indirect datarel sdata2";
  case 0x80 | 0x0B | 0x30: return "indirect datarel sdata4";
  case 0x80 | 0x0C | 0x30: return "indirect datarel sdata8";
  case 0x80 | 0x00 | 0x40: return "indirect funcrel";
  case 0x80 | 0x01 | 0x40: return "indirect funcrel uleb128";
  case 0x80 | 0x02 | 0x40: return "indirect funcrel udata2";
  case 0x80 | 0x03 | 0x40: return "indirect funcrel udata4";
  case 0x80 | 0x04 | 0x40: return "indirect funcrel udata8";
  case 0x80 | 0x09 | 0x40: return "indirect funcrel sleb128";
  case 0x80 | 0x0A | 0x40: return "indirect funcrel sdata2";
  case 0x80 | 0x0B | 0x40: return "indirect funcrel sdata4";
  case 0x80 | 0x0C | 0x40: return "indirect funcrel sdata8";
  }
  abort ();
}
void
dw2_asm_output_data_uleb128 (unsigned long value1,
        const char *comment, ...)
{
  va_list ap;
  __builtin_va_start(ap,comment);
  fprintf (asm_out_file, "\t.uleb128 0x%lx" , value1);
  if (flag_debug_asm && comment)
    {
      fprintf (asm_out_file, "\t%s ", "#");
      vfprintf (asm_out_file, comment, ap);
    }
  fputc_unlocked ('\n', asm_out_file);
  __builtin_va_end(ap);
}
void
dw2_asm_output_data_sleb128 (long value1,
        const char *comment, ...)
{
  va_list ap;
  __builtin_va_start(ap,comment);
  fprintf (asm_out_file, "\t.sleb128 %ld", value1);
  if (flag_debug_asm && comment)
    {
      fprintf (asm_out_file, "\t%s ", "#");
      vfprintf (asm_out_file, comment, ap);
    }
  fputc_unlocked ('\n', asm_out_file);
  __builtin_va_end(ap);
}
void
dw2_asm_output_delta_uleb128 (const char *lab1 ,
         const char *lab2 ,
         const char *comment, ...)
{
  va_list ap;
  __builtin_va_start(ap,comment);
  fputs_unlocked ("\t.uleb128 ", asm_out_file);
  assemble_name (asm_out_file, lab1);
  fputc_unlocked ('-', asm_out_file);
  assemble_name (asm_out_file, lab2);
  if (flag_debug_asm && comment)
    {
      fprintf (asm_out_file, "\t%s ", "#");
      vfprintf (asm_out_file, comment, ap);
    }
  fputc_unlocked ('\n', asm_out_file);
  __builtin_va_end(ap);
}
void
dw2_asm_output_delta_sleb128 (const char *lab1 ,
         const char *lab2 ,
         const char *comment, ...)
{
  va_list ap;
  __builtin_va_start(ap,comment);
  fputs_unlocked ("\t.sleb128 ", asm_out_file);
  assemble_name (asm_out_file, lab1);
  fputc_unlocked ('-', asm_out_file);
  assemble_name (asm_out_file, lab2);
  if (flag_debug_asm && comment)
    {
      fprintf (asm_out_file, "\t%s ", "#");
      vfprintf (asm_out_file, comment, ap);
    }
  fputc_unlocked ('\n', asm_out_file);
  __builtin_va_end(ap);
}
static rtx dw2_force_const_mem (rtx);
static int dw2_output_indirect_constant_1 (splay_tree_node, void *);
static splay_tree indirect_pool;
static int dw2_const_labelno;
static rtx
dw2_force_const_mem (rtx x)
{
  splay_tree_node node;
  const char *str;
  tree decl;
  if (! indirect_pool)
    indirect_pool = splay_tree_new_with_allocator (splay_tree_compare_pointers, ((void *)0), ((void *)0), &ggc_splay_alloc, &ggc_splay_dont_free, ((void *)0));
  if (((enum rtx_code) (x)->code) != SYMBOL_REF)
    abort ();
  str = targetm.strip_name_encoding ((((x)->u.fld[0]).rtstr));
  node = splay_tree_lookup (indirect_pool, (splay_tree_key) str);
  if (node)
    decl = (tree) node->value1;
  else
    {
      tree id;
      if (0)
 {
   char *ref_name = C_alloca(strlen (str) + sizeof "DW.ref.");
   sprintf (ref_name, "DW.ref.%s", str);
   id = get_identifier (ref_name);
   decl = build_decl_stat (VAR_DECL,id,global_trees[TI_PTR_TYPE] );
   ((decl)->decl.artificial_flag) = 1;
   ((decl)->common.public_flag) = 1;
   ((decl)->decl.initial) = decl;
   make_decl_one_only (decl);
 }
      else
 {
   char label[32];
   do { sprintf (label, "*.%s%u", "LDFCM", (unsigned) (dw2_const_labelno)); } while (0);
   ++dw2_const_labelno;
   id = get_identifier (label);
   decl = build_decl_stat (VAR_DECL,id,global_trees[TI_PTR_TYPE] );
   ((decl)->decl.artificial_flag) = 1;
   ((decl)->common.static_flag) = 1;
   ((decl)->decl.initial) = decl;
 }
      id = maybe_get_identifier (str);
      if (id)
 ((id)->common.static_flag) = 1;
      splay_tree_insert (indirect_pool, (splay_tree_key) str,
    (splay_tree_value) decl);
    }
  return (((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1);
}
static int
dw2_output_indirect_constant_1 (splay_tree_node node,
    void *data )
{
  const char *sym;
  rtx sym_ref;
  sym = (const char *) node->key;
  sym_ref = gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (sym));
  if (0)
    fprintf (asm_out_file, "\t.hidden %sDW.ref.%s\n", user_label_prefix, sym);
  assemble_variable ((tree) node->value1, 1, 1, 1);
  assemble_integer (sym_ref, (8 * (0 ? 8 : 4)) / 8, (8 * (0 ? 8 : 4)), 1);
  return 0;
}
void
dw2_output_indirect_constants (void)
{
  if (indirect_pool)
    splay_tree_foreach (indirect_pool, dw2_output_indirect_constant_1, ((void *)0));
}
void
dw2_asm_output_encoded_addr_rtx (int encoding, rtx addr,
     const char *comment, ...)
{
  int size;
  va_list ap;
  __builtin_va_start(ap,comment);
  size = size_of_encoded_value (encoding);
  if (encoding == 0x50)
    {
      assemble_align ((8 * (0 ? 8 : 4)));
      assemble_integer (addr, size, (8 * (0 ? 8 : 4)), 1);
      return;
    }
  if (addr == (const_int_rtx[64]) || addr == (const_int_rtx[64 +1]))
    assemble_integer (addr, size, 8, 1);
  else
    {
    restart:
      do { if ((size) == 4 && ((encoding) & 0x70) == 0x30) { fputs_unlocked ("\t.long\t", asm_out_file); assemble_name (asm_out_file, (((addr)->u.fld[0]).rtstr)); fputs_unlocked (((encoding) & 0x80 ? "@GOT" : "@GOTOFF"), asm_out_file); goto done; } } while (0)
                 ;
      if (encoding & 0x80)
 {
   addr = dw2_force_const_mem (addr);
   encoding &= ~0x80;
   goto restart;
 }
      switch (encoding & 0xF0)
 {
 case 0x00:
   dw2_assemble_integer (size, addr);
   break;
 case 0x10:
   if (((enum rtx_code) (addr)->code) != SYMBOL_REF)
     abort ();
   dw2_assemble_integer (size, gen_rtx_fmt_ee (MINUS, ((0 ? DImode : SImode)), (addr), ((global_rtl[GR_PC]))));
   break;
 default:
   abort ();
 }
    done:;
    }
  if (flag_debug_asm && comment)
    {
      fprintf (asm_out_file, "\t%s ", "#");
      vfprintf (asm_out_file, comment, ap);
    }
  fputc_unlocked ('\n', asm_out_file);
  __builtin_va_end(ap);
}
const struct ggc_root_tab gt_ggc_r_gt_dwarf2asm_h[] = {
  {
    &indirect_pool,
    1,
    sizeof (indirect_pool),
    &gt_ggc_m_SP9tree_node12splay_tree_s,
    &gt_pch_n_SP9tree_node12splay_tree_s
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_dwarf2asm_h[] = {
  { &dw2_const_labelno, 1, sizeof (dw2_const_labelno), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
extern void dwarf2out_decl (tree);
extern void dwarf2out_frame_debug (rtx);
extern void debug_dwarf (void);
struct die_struct;
extern void debug_dwarf_die (struct die_struct *);
extern void dwarf2out_set_demangle_name_func (const char *(*) (const char *));
extern void dwarf2out_add_library_unit_info (const char *, const char *);
static void dwarf2out_source_line (unsigned int, const char *);
int
dwarf2out_do_frame (void)
{
  return (write_symbols == DWARF2_DEBUG
   || write_symbols == VMS_AND_DWARF2_DEBUG
   || flag_unwind_tables
   || (flag_exceptions && ! 0)
   );
}
void
named_section_eh_frame_section (void)
{
  int fde_encoding = (flag_pic ? ((0) ? 0x80 : 0) | 0x10 | 0x0B : 0x00);
  int per_encoding = (flag_pic ? ((1) ? 0x80 : 0) | 0x10 | 0x0B : 0x00);
  int lsda_encoding = (flag_pic ? ((0) ? 0x80 : 0) | 0x10 | 0x0B : 0x00);
  int flags;
  flags = (! flag_pic
    || ((fde_encoding & 0x70) != 0x00
        && (fde_encoding & 0x70) != 0x50
        && (per_encoding & 0x70) != 0x00
        && (per_encoding & 0x70) != 0x50
        && (lsda_encoding & 0x70) != 0x00
        && (lsda_encoding & 0x70) != 0x50))
   ? 0 : 0x00200;
  named_section_flags (".eh_frame", flags);
}
void
collect2_eh_frame_section (void)
{
  tree label = get_file_function_name ('F');
  data_section ();
  if ((floor_log2_wide ((unsigned long) (((8 * (0 ? 8 : 4)) / 8))))!=0) fprintf ((asm_out_file), "\t.align %d\n", 1<<(floor_log2_wide ((unsigned long) (((8 * (0 ? 8 : 4)) / 8)))));
  targetm.asm_out.globalize_label (asm_out_file, ((const char *) (label)->identifier.id.str));
  do { assemble_name ((asm_out_file), (((const char *) (label)->identifier.id.str))); fputs_unlocked (":\n", (asm_out_file)); } while (0);
}
void
default_eh_frame_section (void)
{
  named_section_eh_frame_section ();
}
static varray_type used_rtx_varray;
static varray_type incomplete_types;
static varray_type decl_scope_table;
typedef struct dw_cfi_struct *dw_cfi_ref;
typedef struct dw_fde_struct *dw_fde_ref;
typedef union dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
enum dw_cfi_oprnd_type {
  dw_cfi_oprnd_unused,
  dw_cfi_oprnd_reg_num,
  dw_cfi_oprnd_offset,
  dw_cfi_oprnd_addr,
  dw_cfi_oprnd_loc
};
typedef union dw_cfi_oprnd_struct
{
  unsigned long dw_cfi_reg_num;
  long dw_cfi_offset;
  const char * dw_cfi_addr;
  struct dw_loc_descr_struct * dw_cfi_loc;
}
dw_cfi_oprnd;
typedef struct dw_cfi_struct
{
  dw_cfi_ref dw_cfi_next;
  enum dwarf_call_frame_info dw_cfi_opc;
  dw_cfi_oprnd
    dw_cfi_oprnd1;
  dw_cfi_oprnd
    dw_cfi_oprnd2;
}
dw_cfi_node;
typedef struct cfa_loc
{
  unsigned long reg;
  long offset;
  long base_offset;
  int indirect;
} dw_cfa_location;
typedef struct dw_fde_struct
{
  tree decl;
  const char *dw_fde_begin;
  const char *dw_fde_current_label;
  const char *dw_fde_end;
  dw_cfi_ref dw_fde_cfi;
  unsigned funcdef_number;
  unsigned all_throwers_are_sibcalls : 1;
  unsigned nothrow : 1;
  unsigned uses_eh_lsda : 1;
}
dw_fde_node;
static dw_fde_ref fde_table;
static unsigned fde_table_allocated;
static unsigned fde_table_in_use;
static dw_cfi_ref cie_cfi_head;
static unsigned current_funcdef_fde;
struct indirect_string_node
{
  const char *str;
  unsigned int refcount;
  unsigned int form;
  char *label;
};
static htab_t debug_str_hash;
static int dw2_string_counter;
static unsigned long dwarf2out_cfi_label_num;
static char *stripattributes (const char *);
static const char *dwarf_cfi_name (unsigned);
static dw_cfi_ref new_cfi (void);
static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
static void add_fde_cfi (const char *, dw_cfi_ref);
static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *);
static void lookup_cfa (dw_cfa_location *);
static void reg_save (const char *, unsigned, unsigned, long);
static void initial_return_save (rtx);
static long stack_adjust_offset (rtx);
static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
static void output_call_frame_info (int);
static void dwarf2out_stack_adjust (rtx);
static void flush_queued_reg_saves (void);
static unsigned char clobbers_queued_reg_save (rtx);
static void dwarf2out_frame_debug_expr (rtx, const char *);
static void output_cfa_loc (dw_cfi_ref);
static void get_cfa_from_loc_descr (dw_cfa_location *,
        struct dw_loc_descr_struct *);
static struct dw_loc_descr_struct *build_cfa_loc
 (dw_cfa_location *);
static void def_cfa_1 (const char *, dw_cfa_location *);
rtx
expand_builtin_dwarf_sp_column (void)
{
  return gen_rtx_CONST_INT (VOIDmode, (long) ((0 ? dbx64_register_map[7] : svr4_dbx_register_map[7])));
}
static char *
stripattributes (const char *s)
{
  char *stripped = xmalloc (strlen (s) + 2);
  char *p = stripped;
  *p++ = '*';
  while (*s && *s != ',')
    *p++ = *s++;
  *p = '\0';
  return stripped;
}
void
expand_builtin_init_dwarf_reg_sizes (tree address)
{
  int i;
  enum machine_mode mode = ((integer_types[itk_char])->type.mode);
  rtx addr = expand_expr (address, (rtx) 0, VOIDmode, 0);
  rtx mem = gen_rtx_MEM (BLKmode, addr);
  unsigned char wrote_return_column = 0;
  for (i = 0; i < 53; i++)
    if ((0 ? dbx64_register_map[i] : svr4_dbx_register_map[i]) < 17)
      {
 long offset = (0 ? dbx64_register_map[i] : svr4_dbx_register_map[i]) * ((unsigned short) mode_size[mode]);
 enum machine_mode save_mode = reg_raw_mode[i];
 long size;
 if (0)
   save_mode = choose_hard_reg_mode (i, 1, 1);
 if ((0 ? dbx64_register_map[i] : svr4_dbx_register_map[i]) == (0 ? 16 : 8))
   {
     if (save_mode == VOIDmode)
       continue;
     wrote_return_column = 1;
   }
 size = ((unsigned short) mode_size[save_mode]);
 if (offset < 0)
   continue;
 emit_move_insn (adjust_address_1 (mem, mode, offset, 1, 1), gen_rtx_CONST_INT (VOIDmode, (long) (size)));
      }
  i = (0 ? 16 : 8);
  if (! wrote_return_column)
    {
      enum machine_mode save_mode = (0 ? DImode : SImode);
      long offset = i * ((unsigned short) mode_size[mode]);
      long size = ((unsigned short) mode_size[save_mode]);
      emit_move_insn (adjust_address_1 (mem, mode, offset, 1, 1), gen_rtx_CONST_INT (VOIDmode, (long) (size)));
    }
}
static const char *
dwarf_cfi_name (unsigned int cfi_opc)
{
  switch (cfi_opc)
    {
    case DW_CFA_advance_loc:
      return "DW_CFA_advance_loc";
    case DW_CFA_offset:
      return "DW_CFA_offset";
    case DW_CFA_restore:
      return "DW_CFA_restore";
    case DW_CFA_nop:
      return "DW_CFA_nop";
    case DW_CFA_set_loc:
      return "DW_CFA_set_loc";
    case DW_CFA_advance_loc1:
      return "DW_CFA_advance_loc1";
    case DW_CFA_advance_loc2:
      return "DW_CFA_advance_loc2";
    case DW_CFA_advance_loc4:
      return "DW_CFA_advance_loc4";
    case DW_CFA_offset_extended:
      return "DW_CFA_offset_extended";
    case DW_CFA_restore_extended:
      return "DW_CFA_restore_extended";
    case DW_CFA_undefined:
      return "DW_CFA_undefined";
    case DW_CFA_same_value:
      return "DW_CFA_same_value";
    case DW_CFA_register:
      return "DW_CFA_register";
    case DW_CFA_remember_state:
      return "DW_CFA_remember_state";
    case DW_CFA_restore_state:
      return "DW_CFA_restore_state";
    case DW_CFA_def_cfa:
      return "DW_CFA_def_cfa";
    case DW_CFA_def_cfa_register:
      return "DW_CFA_def_cfa_register";
    case DW_CFA_def_cfa_offset:
      return "DW_CFA_def_cfa_offset";
    case DW_CFA_def_cfa_expression:
      return "DW_CFA_def_cfa_expression";
    case DW_CFA_expression:
      return "DW_CFA_expression";
    case DW_CFA_offset_extended_sf:
      return "DW_CFA_offset_extended_sf";
    case DW_CFA_def_cfa_sf:
      return "DW_CFA_def_cfa_sf";
    case DW_CFA_def_cfa_offset_sf:
      return "DW_CFA_def_cfa_offset_sf";
    case DW_CFA_MIPS_advance_loc8:
      return "DW_CFA_MIPS_advance_loc8";
    case DW_CFA_GNU_window_save:
      return "DW_CFA_GNU_window_save";
    case DW_CFA_GNU_args_size:
      return "DW_CFA_GNU_args_size";
    case DW_CFA_GNU_negative_offset_extended:
      return "DW_CFA_GNU_negative_offset_extended";
    default:
      return "DW_CFA_<unknown>";
    }
}
static dw_cfi_ref
new_cfi (void)
{
  dw_cfi_ref cfi = ggc_alloc_stat (sizeof (dw_cfi_node) );
  cfi->dw_cfi_next = ((void *)0);
  cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
  cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
  return cfi;
}
static void
add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
{
  dw_cfi_ref *p;
  for (p = list_head; (*p) != ((void *)0); p = &(*p)->dw_cfi_next)
    ;
  *p = cfi;
}
char *
dwarf2out_cfi_label (void)
{
  static char label[20];
  do { sprintf (label, "*.%s%u", "LCFI", (unsigned) (dwarf2out_cfi_label_num++)); } while (0);
  do { assemble_name ((asm_out_file), (label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  return label;
}
static void
add_fde_cfi (const char *label, dw_cfi_ref cfi)
{
  if (label)
    {
      dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
      if (*label == 0)
 label = dwarf2out_cfi_label ();
      if (fde->dw_fde_current_label == ((void *)0)
   || strcmp (label, fde->dw_fde_current_label) != 0)
 {
   dw_cfi_ref xcfi;
   fde->dw_fde_current_label = label = xstrdup (label);
   xcfi = new_cfi ();
   xcfi->dw_cfi_opc = DW_CFA_advance_loc4;
   xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
   add_cfi (&fde->dw_fde_cfi, xcfi);
 }
      add_cfi (&fde->dw_fde_cfi, cfi);
    }
  else
    add_cfi (&cie_cfi_head, cfi);
}
static void
lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc)
{
  switch (cfi->dw_cfi_opc)
    {
    case DW_CFA_def_cfa_offset:
      loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
      break;
    case DW_CFA_def_cfa_register:
      loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
      break;
    case DW_CFA_def_cfa:
      loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
      loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
      break;
    case DW_CFA_def_cfa_expression:
      get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
      break;
    default:
      break;
    }
}
static void
lookup_cfa (dw_cfa_location *loc)
{
  dw_cfi_ref cfi;
  loc->reg = (unsigned long) -1;
  loc->offset = 0;
  loc->indirect = 0;
  loc->base_offset = 0;
  for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
    lookup_cfa_1 (cfi, loc);
  if (fde_table_in_use)
    {
      dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
      for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
 lookup_cfa_1 (cfi, loc);
    }
}
static dw_cfa_location cfa;
static dw_cfa_location cfa_store;
static long args_size;
static long old_args_size;
void
dwarf2out_def_cfa (const char *label, unsigned int reg, long offset)
{
  dw_cfa_location loc;
  loc.indirect = 0;
  loc.base_offset = 0;
  loc.reg = reg;
  loc.offset = offset;
  def_cfa_1 (label, &loc);
}
static void
def_cfa_1 (const char *label, dw_cfa_location *loc_p)
{
  dw_cfi_ref cfi;
  dw_cfa_location old_cfa, loc;
  cfa = *loc_p;
  loc = *loc_p;
  if (cfa_store.reg == loc.reg && loc.indirect == 0)
    cfa_store.offset = loc.offset;
  loc.reg = (0 ? dbx64_register_map[loc.reg] : svr4_dbx_register_map[loc.reg]);
  lookup_cfa (&old_cfa);
  if (loc.reg == old_cfa.reg && loc.offset == old_cfa.offset
      && loc.indirect == old_cfa.indirect
      && (loc.indirect == 0 || loc.base_offset == old_cfa.base_offset))
    return;
  cfi = new_cfi ();
  if (loc.reg == old_cfa.reg && !loc.indirect)
    {
      cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
      cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
    }
  else if (loc.offset == old_cfa.offset && old_cfa.reg != (unsigned long) -1
    && !loc.indirect)
    {
      cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
      cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
    }
  else if (loc.indirect == 0)
    {
      cfi->dw_cfi_opc = DW_CFA_def_cfa;
      cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
      cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
    }
  else
    {
      struct dw_loc_descr_struct *loc_list;
      cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
      loc_list = build_cfa_loc (&loc);
      cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
    }
  add_fde_cfi (label, cfi);
}
static void
reg_save (const char *label, unsigned int reg, unsigned int sreg, long offset)
{
  dw_cfi_ref cfi = new_cfi ();
  cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
  if (sreg == (~(unsigned int) 0))
    {
      if (reg & ~0x3f)
 cfi->dw_cfi_opc = DW_CFA_offset_extended;
      else
 cfi->dw_cfi_opc = DW_CFA_offset;
      offset /= (-((int) (0 ? 8 : 4)));
      if (offset < 0)
 cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
      cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
    }
  else if (sreg == reg)
    cfi->dw_cfi_opc = DW_CFA_same_value;
  else
    {
      cfi->dw_cfi_opc = DW_CFA_register;
      cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
    }
  add_fde_cfi (label, cfi);
}
void
dwarf2out_window_save (const char *label)
{
  dw_cfi_ref cfi = new_cfi ();
  cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
  add_fde_cfi (label, cfi);
}
void
dwarf2out_args_size (const char *label, long size)
{
  dw_cfi_ref cfi;
  if (size == old_args_size)
    return;
  old_args_size = size;
  cfi = new_cfi ();
  cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
  cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
  add_fde_cfi (label, cfi);
}
void
dwarf2out_reg_save (const char *label, unsigned int reg, long offset)
{
  reg_save (label, (0 ? dbx64_register_map[reg] : svr4_dbx_register_map[reg]), (~(unsigned int) 0), offset);
}
void
dwarf2out_return_save (const char *label, long offset)
{
  reg_save (label, (0 ? 16 : 8), (~(unsigned int) 0), offset);
}
void
dwarf2out_return_reg (const char *label, unsigned int sreg)
{
  reg_save (label, (0 ? 16 : 8), (0 ? dbx64_register_map[sreg] : svr4_dbx_register_map[sreg]), 0);
}
static void
initial_return_save (rtx rtl)
{
  unsigned int reg = (~(unsigned int) 0);
  long offset = 0;
  switch (((enum rtx_code) (rtl)->code))
    {
    case REG:
      reg = (0 ? dbx64_register_map[(((rtl)->u.fld[0]).rtuint)] : svr4_dbx_register_map[(((rtl)->u.fld[0]).rtuint)]);
      break;
    case MEM:
      rtl = (((rtl)->u.fld[0]).rtx1);
      switch (((enum rtx_code) (rtl)->code))
 {
 case REG:
   if ((((rtl)->u.fld[0]).rtuint) != 7)
     abort ();
   offset = 0;
   break;
 case PLUS:
   if (((((((rtl)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != 7)
     abort ();
   offset = (((((rtl)->u.fld[1]).rtx1))->u.hwint[0]);
   break;
 case MINUS:
   if (((((((rtl)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != 7)
     abort ();
   offset = -(((((rtl)->u.fld[1]).rtx1))->u.hwint[0]);
   break;
 default:
   abort ();
 }
      break;
    case PLUS:
      if (((enum rtx_code) ((((rtl)->u.fld[1]).rtx1))->code) != CONST_INT)
 abort ();
      initial_return_save ((((rtl)->u.fld[0]).rtx1));
      return;
    default:
      abort ();
    }
  if (reg != (0 ? 16 : 8))
    reg_save (((void *)0), (0 ? 16 : 8), reg, offset - cfa.offset);
}
static long
stack_adjust_offset (rtx pattern)
{
  rtx src = (((pattern)->u.fld[1]).rtx1);
  rtx dest = (((pattern)->u.fld[0]).rtx1);
  long offset = 0;
  enum rtx_code code;
  if (dest == (global_rtl[GR_STACK_POINTER]))
    {
      code = ((enum rtx_code) (src)->code);
      if (! (code == PLUS || code == MINUS)
   || (((src)->u.fld[0]).rtx1) != (global_rtl[GR_STACK_POINTER])
   || ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) != CONST_INT)
 return 0;
      offset = (((((src)->u.fld[1]).rtx1))->u.hwint[0]);
      if (code == PLUS)
 offset = -offset;
    }
  else if ((((enum rtx_code) (dest)->code) == MEM))
    {
      src = (((dest)->u.fld[0]).rtx1);
      code = ((enum rtx_code) (src)->code);
      switch (code)
 {
 case PRE_MODIFY:
 case POST_MODIFY:
   if ((((src)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]))
     {
       rtx val = ((((((src)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
       if (((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) != PLUS ||
    ((enum rtx_code) (val)->code) != CONST_INT)
  abort ();
       offset = -((val)->u.hwint[0]);
       break;
     }
   return 0;
 case PRE_DEC:
 case POST_DEC:
   if ((((src)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]))
     {
       offset = ((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]);
       break;
     }
   return 0;
 case PRE_INC:
 case POST_INC:
   if ((((src)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]))
     {
       offset = -((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]);
       break;
     }
   return 0;
 default:
   return 0;
 }
    }
  else
    return 0;
  return offset;
}
static void
dwarf2out_stack_adjust (rtx insn)
{
  long offset;
  const char *label;
  int i;
  if (prologue_epilogue_contains (insn) || sibcall_epilogue_contains (insn))
    return;
  if (!flag_asynchronous_unwind_tables && ((enum rtx_code) (insn)->code) == CALL_INSN)
    {
      insn = (((insn)->u.fld[5]).rtx1);
      if (((enum rtx_code) (insn)->code) == PARALLEL)
 insn = (((((insn)->u.fld[0]).rtvec1))->elem[0]);
      if (((enum rtx_code) (insn)->code) == SET)
 insn = (((insn)->u.fld[1]).rtx1);
      if (((enum rtx_code) (insn)->code) != CALL)
 abort ();
      dwarf2out_args_size ("", (((((insn)->u.fld[1]).rtx1))->u.hwint[0]));
      return;
    }
  else if (!flag_asynchronous_unwind_tables && cfa.reg != 7)
    return;
  if (((enum rtx_code) (insn)->code) == BARRIER)
    {
      offset = -args_size;
    }
  else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET)
    offset = stack_adjust_offset ((((insn)->u.fld[5]).rtx1));
  else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL
    || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
    {
      for (offset = 0, i = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 if (((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->code) == SET)
   offset += stack_adjust_offset (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]));
    }
  else
    return;
  if (offset == 0)
    return;
  if (cfa.reg == 7)
    cfa.offset += offset;
  args_size += offset;
  if (args_size < 0)
    args_size = 0;
  label = dwarf2out_cfi_label ();
  def_cfa_1 (label, &cfa);
  dwarf2out_args_size (label, args_size);
}
struct queued_reg_save
{
  struct queued_reg_save *next;
  rtx reg;
  long cfa_offset;
  rtx saved_reg;
};
static struct queued_reg_save *queued_reg_saves;
struct reg_saved_in_data {
  rtx orig_reg;
  rtx saved_in_reg;
};
static struct reg_saved_in_data regs_saved_in_regs[4];
static size_t num_regs_saved_in_regs;
static const char *last_reg_save_label;
static void
queue_reg_save (const char *label, rtx reg, rtx sreg, long offset)
{
  struct queued_reg_save *q;
  for (q = queued_reg_saves; q != ((void *)0); q = q->next)
    if ((((q->reg)->u.fld[0]).rtuint) == (((reg)->u.fld[0]).rtuint))
      break;
  if (q == ((void *)0))
    {
      q = ggc_alloc_stat (sizeof (*q) );
      q->next = queued_reg_saves;
      queued_reg_saves = q;
    }
  q->reg = reg;
  q->cfa_offset = offset;
  q->saved_reg = sreg;
  last_reg_save_label = label;
}
static void
flush_queued_reg_saves (void)
{
  struct queued_reg_save *q;
  for (q = queued_reg_saves; q; q = q->next)
    {
      size_t i;
      unsigned int reg, sreg;
      for (i = 0; i < num_regs_saved_in_regs; i++)
 if ((((regs_saved_in_regs[i].orig_reg)->u.fld[0]).rtuint) == (((q->reg)->u.fld[0]).rtuint))
   break;
      if (q->saved_reg && i == num_regs_saved_in_regs)
 {
   if (i == (sizeof (regs_saved_in_regs) / sizeof ((regs_saved_in_regs)[0])))
     abort ();
   num_regs_saved_in_regs++;
 }
      if (i != num_regs_saved_in_regs)
 {
   regs_saved_in_regs[i].orig_reg = q->reg;
   regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
 }
      reg = (0 ? dbx64_register_map[(((q->reg)->u.fld[0]).rtuint)] : svr4_dbx_register_map[(((q->reg)->u.fld[0]).rtuint)]);
      if (q->saved_reg)
 sreg = (0 ? dbx64_register_map[(((q->saved_reg)->u.fld[0]).rtuint)] : svr4_dbx_register_map[(((q->saved_reg)->u.fld[0]).rtuint)]);
      else
 sreg = (~(unsigned int) 0);
      reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
    }
  queued_reg_saves = ((void *)0);
  last_reg_save_label = ((void *)0);
}
static unsigned char
clobbers_queued_reg_save (rtx insn)
{
  struct queued_reg_save *q;
  for (q = queued_reg_saves; q; q = q->next)
    {
      size_t i;
      if (modified_in_p (q->reg, insn))
 return 1;
      for (i = 0; i < num_regs_saved_in_regs; i++)
 if ((((q->reg)->u.fld[0]).rtuint) == (((regs_saved_in_regs[i].orig_reg)->u.fld[0]).rtuint)
     && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
   return 1;
    }
  return 0;
}
static rtx
reg_saved_in (rtx reg)
{
  unsigned int regn = (((reg)->u.fld[0]).rtuint);
  size_t i;
  struct queued_reg_save *q;
  for (q = queued_reg_saves; q; q = q->next)
    if (q->saved_reg && regn == (((q->saved_reg)->u.fld[0]).rtuint))
      return q->reg;
  for (i = 0; i < num_regs_saved_in_regs; i++)
    if (regs_saved_in_regs[i].saved_in_reg
 && regn == (((regs_saved_in_regs[i].saved_in_reg)->u.fld[0]).rtuint))
      return regs_saved_in_regs[i].orig_reg;
  return (rtx) 0;
}
static dw_cfa_location cfa_temp;
static void
dwarf2out_frame_debug_expr (rtx expr, const char *label)
{
  rtx src, dest;
  long offset;
  if (((enum rtx_code) (expr)->code) == PARALLEL || ((enum rtx_code) (expr)->code) == SEQUENCE)
    {
      int par_index;
      int limit = (((((expr)->u.fld[0]).rtvec1))->num_elem);
      for (par_index = 0; par_index < limit; par_index++)
 if (((enum rtx_code) ((((((expr)->u.fld[0]).rtvec1))->elem[par_index]))->code) == SET
     && (((((((((expr)->u.fld[0]).rtvec1))->elem[par_index])))->frame_related)
  || par_index == 0))
   dwarf2out_frame_debug_expr ((((((expr)->u.fld[0]).rtvec1))->elem[par_index]), label);
      return;
    }
  if (((enum rtx_code) (expr)->code) != SET)
    abort ();
  src = (((expr)->u.fld[1]).rtx1);
  dest = (((expr)->u.fld[0]).rtx1);
  if (((enum rtx_code) (src)->code) == REG)
    {
      rtx rsi = reg_saved_in (src);
      if (rsi)
 src = rsi;
    }
  switch (((enum rtx_code) (dest)->code))
    {
    case REG:
      switch (((enum rtx_code) (src)->code))
 {
 case REG:
   if (cfa.reg == (unsigned) (((src)->u.fld[0]).rtuint))
     {
       cfa.reg = (((dest)->u.fld[0]).rtuint);
       cfa_temp.reg = cfa.reg;
       cfa_temp.offset = cfa.offset;
     }
   else if (call_used_regs [(((dest)->u.fld[0]).rtuint)]
     && ! fixed_regs [(((dest)->u.fld[0]).rtuint)])
     {
       queue_reg_save (label, src, dest, 0);
     }
   else
     abort ();
   break;
 case PLUS:
 case MINUS:
 case LO_SUM:
   if (dest == (global_rtl[GR_STACK_POINTER]))
     {
       switch (((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code))
  {
  case CONST_INT:
    offset = (((((src)->u.fld[1]).rtx1))->u.hwint[0]);
    break;
  case REG:
    if ((unsigned) ((((((src)->u.fld[1]).rtx1))->u.fld[0]).rtuint) != cfa_temp.reg)
      abort ();
    offset = cfa_temp.offset;
    break;
  default:
    abort ();
  }
       if ((((src)->u.fld[0]).rtx1) == (global_rtl[GR_HARD_FRAME_POINTER]))
  {
    if (cfa.reg != (unsigned) 6)
      abort ();
    cfa.reg = 7;
  }
       else if (((enum rtx_code) (src)->code) == LO_SUM)
  ;
       else if ((((src)->u.fld[0]).rtx1) != (global_rtl[GR_STACK_POINTER]))
  abort ();
       if (((enum rtx_code) (src)->code) != MINUS)
  offset = -offset;
       if (cfa.reg == 7)
  cfa.offset += offset;
       if (cfa_store.reg == 7)
  cfa_store.offset += offset;
     }
   else if (dest == (global_rtl[GR_HARD_FRAME_POINTER]))
     {
       if (! frame_pointer_needed)
  abort ();
       if ((((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == REG)
    && (unsigned) ((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == cfa.reg
    && ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) == CONST_INT)
  {
    offset = (((((src)->u.fld[1]).rtx1))->u.hwint[0]);
    if (((enum rtx_code) (src)->code) != MINUS)
      offset = -offset;
    cfa.offset += offset;
    cfa.reg = 6;
  }
       else
  abort ();
     }
   else
     {
       if (((enum rtx_code) (src)->code) == MINUS)
  abort ();
       if ((((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == REG)
    && ((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == cfa.reg
    && ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) == CONST_INT)
  {
    offset = - (((((src)->u.fld[1]).rtx1))->u.hwint[0]);
    cfa.offset += offset;
    cfa.reg = (((dest)->u.fld[0]).rtuint);
    cfa_temp.reg = cfa.reg;
    cfa_temp.offset = cfa.offset;
  }
       else if ((((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == REG)
         && ((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == cfa_temp.reg
         && (((src)->u.fld[1]).rtx1) == (global_rtl[GR_STACK_POINTER]))
  {
    if (cfa.reg != 7)
      abort ();
    cfa_store.reg = (((dest)->u.fld[0]).rtuint);
    cfa_store.offset = cfa.offset - cfa_temp.offset;
  }
       else if (((enum rtx_code) (src)->code) == LO_SUM
         && ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) == CONST_INT)
  {
    cfa_temp.reg = (((dest)->u.fld[0]).rtuint);
    cfa_temp.offset = (((((src)->u.fld[1]).rtx1))->u.hwint[0]);
  }
       else
  abort ();
     }
   break;
 case CONST_INT:
   cfa_temp.reg = (((dest)->u.fld[0]).rtuint);
   cfa_temp.offset = ((src)->u.hwint[0]);
   break;
 case IOR:
   if (!(((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == REG)
       || (unsigned) ((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != cfa_temp.reg
       || ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) != CONST_INT)
     abort ();
   if ((unsigned) (((dest)->u.fld[0]).rtuint) != cfa_temp.reg)
     cfa_temp.reg = (((dest)->u.fld[0]).rtuint);
   cfa_temp.offset |= (((((src)->u.fld[1]).rtx1))->u.hwint[0]);
   break;
 case HIGH:
   break;
 default:
   abort ();
 }
      def_cfa_1 (label, &cfa);
      break;
    case MEM:
      if (!(((enum rtx_code) (src)->code) == REG))
 abort ();
      switch (((enum rtx_code) ((((dest)->u.fld[0]).rtx1))->code))
 {
 case PRE_MODIFY:
   if (((enum rtx_code) ((((((((((dest)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) != CONST_INT)
     abort ();
   offset = -(((((((((((dest)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
   if ((((((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) != 7
       || cfa_store.reg != 7)
     abort ();
   cfa_store.offset += offset;
   if (cfa.reg == 7)
     cfa.offset = cfa_store.offset;
   offset = -cfa_store.offset;
   break;
 case PRE_INC:
 case PRE_DEC:
   offset = ((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]);
   if (((enum rtx_code) ((((dest)->u.fld[0]).rtx1))->code) == PRE_INC)
     offset = -offset;
   if ((((((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) != 7
       || cfa_store.reg != 7)
     abort ();
   cfa_store.offset += offset;
   if (cfa.reg == 7)
     cfa.offset = cfa_store.offset;
   offset = -cfa_store.offset;
   break;
 case PLUS:
 case MINUS:
 case LO_SUM:
   if (((enum rtx_code) (((((((dest)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) != CONST_INT)
     abort ();
   offset = ((((((((dest)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
   if (((enum rtx_code) ((((dest)->u.fld[0]).rtx1))->code) == MINUS)
     offset = -offset;
   if (cfa_store.reg == (unsigned) (((((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint))
     offset -= cfa_store.offset;
   else if (cfa_temp.reg == (unsigned) (((((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint))
     offset -= cfa_temp.offset;
   else
     abort ();
   break;
 case REG:
   if (cfa_store.reg == (unsigned) ((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtuint))
     offset = -cfa_store.offset;
   else if (cfa_temp.reg == (unsigned) ((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtuint))
     offset = -cfa_temp.offset;
   else
     abort ();
   break;
 case POST_INC:
   if (cfa_temp.reg != (unsigned) (((((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint))
     abort ();
   offset = -cfa_temp.offset;
   cfa_temp.offset -= ((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]);
   break;
 default:
   abort ();
 }
      if ((((src)->u.fld[0]).rtuint) != 7
   && (((src)->u.fld[0]).rtuint) != 6
   && (unsigned) (((src)->u.fld[0]).rtuint) == cfa.reg)
 {
   if (cfa.offset == 0)
     {
       def_cfa_1 (label, &cfa);
       queue_reg_save (label, (global_rtl[GR_STACK_POINTER]), (rtx) 0, offset);
       break;
     }
   else
     {
       rtx x = (((dest)->u.fld[0]).rtx1);
       if (!(((enum rtx_code) (x)->code) == REG))
  x = (((x)->u.fld[0]).rtx1);
       if (!(((enum rtx_code) (x)->code) == REG))
  abort ();
       cfa.reg = (((x)->u.fld[0]).rtuint);
       cfa.base_offset = offset;
       cfa.indirect = 1;
       def_cfa_1 (label, &cfa);
       break;
     }
 }
      def_cfa_1 (label, &cfa);
      queue_reg_save (label, src, (rtx) 0, offset);
      break;
    default:
      abort ();
    }
}
void
dwarf2out_frame_debug (rtx insn)
{
  const char *label;
  rtx src;
  if (insn == (rtx) 0)
    {
      size_t i;
      flush_queued_reg_saves ();
      lookup_cfa (&cfa);
      if (cfa.reg != (unsigned long) (0 ? dbx64_register_map[7] : svr4_dbx_register_map[7]))
 abort ();
      cfa.reg = 7;
      cfa_store = cfa;
      cfa_temp.reg = -1;
      cfa_temp.offset = 0;
      for (i = 0; i < num_regs_saved_in_regs; i++)
 {
   regs_saved_in_regs[i].orig_reg = (rtx) 0;
   regs_saved_in_regs[i].saved_in_reg = (rtx) 0;
 }
      num_regs_saved_in_regs = 0;
      return;
    }
  if (((enum rtx_code) (insn)->code) != INSN || clobbers_queued_reg_save (insn))
    flush_queued_reg_saves ();
  if (! (((insn))->frame_related))
    {
      if (!(target_flags & 0x00001000))
 dwarf2out_stack_adjust (insn);
      return;
    }
  label = dwarf2out_cfi_label ();
  src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, (rtx) 0);
  if (src)
    insn = (((src)->u.fld[0]).rtx1);
  else
    insn = (((insn)->u.fld[5]).rtx1);
  dwarf2out_frame_debug_expr (insn, label);
}
static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
 (enum dwarf_call_frame_info cfi);
static enum dw_cfi_oprnd_type
dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
{
  switch (cfi)
    {
    case DW_CFA_nop:
    case DW_CFA_GNU_window_save:
      return dw_cfi_oprnd_unused;
    case DW_CFA_set_loc:
    case DW_CFA_advance_loc1:
    case DW_CFA_advance_loc2:
    case DW_CFA_advance_loc4:
    case DW_CFA_MIPS_advance_loc8:
      return dw_cfi_oprnd_addr;
    case DW_CFA_offset:
    case DW_CFA_offset_extended:
    case DW_CFA_def_cfa:
    case DW_CFA_offset_extended_sf:
    case DW_CFA_def_cfa_sf:
    case DW_CFA_restore_extended:
    case DW_CFA_undefined:
    case DW_CFA_same_value:
    case DW_CFA_def_cfa_register:
    case DW_CFA_register:
      return dw_cfi_oprnd_reg_num;
    case DW_CFA_def_cfa_offset:
    case DW_CFA_GNU_args_size:
    case DW_CFA_def_cfa_offset_sf:
      return dw_cfi_oprnd_offset;
    case DW_CFA_def_cfa_expression:
    case DW_CFA_expression:
      return dw_cfi_oprnd_loc;
    default:
      abort ();
    }
}
static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
 (enum dwarf_call_frame_info cfi);
static enum dw_cfi_oprnd_type
dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
{
  switch (cfi)
    {
    case DW_CFA_def_cfa:
    case DW_CFA_def_cfa_sf:
    case DW_CFA_offset:
    case DW_CFA_offset_extended_sf:
    case DW_CFA_offset_extended:
      return dw_cfi_oprnd_offset;
    case DW_CFA_register:
      return dw_cfi_oprnd_reg_num;
    default:
      return dw_cfi_oprnd_unused;
    }
}
static void
output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
{
  unsigned long r;
  if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
    dw2_asm_output_data (1, (cfi->dw_cfi_opc
        | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
    "DW_CFA_advance_loc 0x%lx",
    cfi->dw_cfi_oprnd1.dw_cfi_offset);
  else if (cfi->dw_cfi_opc == DW_CFA_offset)
    {
      r = (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
      dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
      "DW_CFA_offset, column 0x%lx", r);
      dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, ((void *)0));
    }
  else if (cfi->dw_cfi_opc == DW_CFA_restore)
    {
      r = (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
      dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
      "DW_CFA_restore, column 0x%lx", r);
    }
  else
    {
      dw2_asm_output_data (1, cfi->dw_cfi_opc,
      "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
      switch (cfi->dw_cfi_opc)
 {
 case DW_CFA_set_loc:
   if (for_eh)
     dw2_asm_output_encoded_addr_rtx (
  (flag_pic ? ((0) ? 0x80 : 0) | 0x10 | 0x0B : 0x00),
  gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (cfi->dw_cfi_oprnd1.dw_cfi_addr)),
  ((void *)0));
   else
     dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8),
     cfi->dw_cfi_oprnd1.dw_cfi_addr, ((void *)0));
   break;
 case DW_CFA_advance_loc1:
   dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
    fde->dw_fde_current_label, ((void *)0));
   fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
   break;
 case DW_CFA_advance_loc2:
   dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
    fde->dw_fde_current_label, ((void *)0));
   fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
   break;
 case DW_CFA_advance_loc4:
   dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
    fde->dw_fde_current_label, ((void *)0));
   fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
   break;
 case DW_CFA_MIPS_advance_loc8:
   dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
    fde->dw_fde_current_label, ((void *)0));
   fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
   break;
 case DW_CFA_offset_extended:
 case DW_CFA_def_cfa:
   r = (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
   dw2_asm_output_data_uleb128 (r, ((void *)0));
   dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, ((void *)0));
   break;
 case DW_CFA_offset_extended_sf:
 case DW_CFA_def_cfa_sf:
   r = (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
   dw2_asm_output_data_uleb128 (r, ((void *)0));
   dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, ((void *)0));
   break;
 case DW_CFA_restore_extended:
 case DW_CFA_undefined:
 case DW_CFA_same_value:
 case DW_CFA_def_cfa_register:
   r = (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
   dw2_asm_output_data_uleb128 (r, ((void *)0));
   break;
 case DW_CFA_register:
   r = (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
   dw2_asm_output_data_uleb128 (r, ((void *)0));
   r = (cfi->dw_cfi_oprnd2.dw_cfi_reg_num);
   dw2_asm_output_data_uleb128 (r, ((void *)0));
   break;
 case DW_CFA_def_cfa_offset:
 case DW_CFA_GNU_args_size:
   dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, ((void *)0));
   break;
 case DW_CFA_def_cfa_offset_sf:
   dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, ((void *)0));
   break;
 case DW_CFA_GNU_window_save:
   break;
 case DW_CFA_def_cfa_expression:
 case DW_CFA_expression:
   output_cfa_loc (cfi);
   break;
 case DW_CFA_GNU_negative_offset_extended:
   abort ();
 default:
   break;
 }
    }
}
static void
output_call_frame_info (int for_eh)
{
  unsigned int i;
  dw_fde_ref fde;
  dw_cfi_ref cfi;
  char l1[20], l2[20], section_start_label[20];
  unsigned char any_lsda_needed = 0;
  char augmentation[6];
  int augmentation_size;
  int fde_encoding = 0x00;
  int per_encoding = 0x00;
  int lsda_encoding = 0x00;
  if (fde_table_in_use == 0)
    return;
  if (0
      && ! flag_asynchronous_unwind_tables
      && for_eh)
    for (i = 0; i < fde_table_in_use; i++)
      if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
          && !fde_table[i].uses_eh_lsda
   && ! ((fde_table[i].decl)->decl.transparent_union))
 targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
          for_eh, 1);
  if (for_eh)
    {
      unsigned char any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
      for (i = 0; i < fde_table_in_use; i++)
 if (fde_table[i].uses_eh_lsda)
   any_eh_needed = any_lsda_needed = 1;
        else if (0
   && ((fde_table[i].decl)->decl.transparent_union))
   any_eh_needed = 1;
 else if (! fde_table[i].nothrow
   && ! fde_table[i].all_throwers_are_sibcalls)
   any_eh_needed = 1;
      if (! any_eh_needed)
 return;
    }
  if (flag_debug_asm)
    app_enable ();
  if (for_eh)
    targetm.asm_out.eh_frame_section ();
  else
    named_section_flags (".debug_frame", 0x00400);
  do { sprintf (section_start_label, "*.%s%u", "Lframe", (unsigned) (for_eh)); } while (0);
  do { assemble_name ((asm_out_file), (section_start_label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  do { sprintf (l1, "*.%s%u", "LSCIE", (unsigned) (for_eh)); } while (0);
  do { sprintf (l2, "*.%s%u", "LECIE", (unsigned) (for_eh)); } while (0);
  dw2_asm_output_delta (for_eh ? 4 : 4, l2, l1,
   "Length of Common Information Entry");
  do { assemble_name ((asm_out_file), (l1)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  dw2_asm_output_data ((for_eh ? 4 : 4),
         (for_eh ? 0 : 0xffffffff),
         "CIE Identifier Tag");
  dw2_asm_output_data (1, 1, "CIE Version");
  augmentation[0] = 0;
  augmentation_size = 0;
  if (for_eh)
    {
      char *p;
      fde_encoding = 0
 ? (flag_pic ? ((1) ? 0x80 : 0) | 0x10 | 0x0B : 0x00)
 : (flag_pic ? ((0) ? 0x80 : 0) | 0x10 | 0x0B : 0x00);
      per_encoding = (flag_pic ? ((1) ? 0x80 : 0) | 0x10 | 0x0B : 0x00);
      lsda_encoding = (flag_pic ? ((0) ? 0x80 : 0) | 0x10 | 0x0B : 0x00);
      p = augmentation + 1;
      if ((libfunc_table[LTI_eh_personality]))
 {
   *p++ = 'P';
   augmentation_size += 1 + size_of_encoded_value (per_encoding);
 }
      if (any_lsda_needed)
 {
   *p++ = 'L';
   augmentation_size += 1;
 }
      if (fde_encoding != 0x00)
 {
   *p++ = 'R';
   augmentation_size += 1;
 }
      if (p > augmentation + 1)
 {
   augmentation[0] = 'z';
   *p = '\0';
 }
      if ((libfunc_table[LTI_eh_personality]) && per_encoding == 0x50)
 {
   int offset = ( 4
   + 4
   + 1
   + strlen (augmentation) + 1
   + size_of_uleb128 (1)
   + size_of_sleb128 ((-((int) (0 ? 8 : 4))))
   + 1
   + 1
   + 1 );
   int pad = -offset & (((8 * (0 ? 8 : 4)) / 8) - 1);
   augmentation_size += pad;
   if (size_of_uleb128 (augmentation_size) != 1)
     abort ();
 }
    }
  dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
  dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
  dw2_asm_output_data_sleb128 ((-((int) (0 ? 8 : 4))),
          "CIE Data Alignment Factor");
  if (1 == 1)
    dw2_asm_output_data (1, (0 ? 16 : 8), "CIE RA Column");
  else
    dw2_asm_output_data_uleb128 ((0 ? 16 : 8), "CIE RA Column");
  if (augmentation[0])
    {
      dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
      if ((libfunc_table[LTI_eh_personality]))
 {
   dw2_asm_output_data (1, per_encoding, "Personality (%s)",
          eh_data_format_name (per_encoding));
   dw2_asm_output_encoded_addr_rtx (per_encoding,
        (libfunc_table[LTI_eh_personality]), ((void *)0));
 }
      if (any_lsda_needed)
 dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
        eh_data_format_name (lsda_encoding));
      if (fde_encoding != 0x00)
 dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
        eh_data_format_name (fde_encoding));
    }
  for (cfi = cie_cfi_head; cfi != ((void *)0); cfi = cfi->dw_cfi_next)
    output_cfi (cfi, ((void *)0), for_eh);
  if ((floor_log2_wide ((unsigned long) (for_eh ? ((8 * (0 ? 8 : 4)) / 8) : ((8 * (0 ? 8 : 4)) / 8))))!=0) fprintf ((asm_out_file), "\t.align %d\n", 1<<(floor_log2_wide ((unsigned long) (for_eh ? ((8 * (0 ? 8 : 4)) / 8) : ((8 * (0 ? 8 : 4)) / 8)))))
                                                        ;
  do { assemble_name ((asm_out_file), (l2)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  for (i = 0; i < fde_table_in_use; i++)
    {
      fde = &fde_table[i];
      if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
   && (fde->nothrow || fde->all_throwers_are_sibcalls)
   && (! 0 || ! ((fde->decl)->decl.transparent_union))
   && !fde->uses_eh_lsda)
 continue;
      targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh, 0);
      targetm.asm_out.internal_label (asm_out_file, "LSFDE", for_eh + i * 2);
      do { sprintf (l1, "*.%s%u", "LASFDE", (unsigned) (for_eh + i * 2)); } while (0);
      do { sprintf (l2, "*.%s%u", "LEFDE", (unsigned) (for_eh + i * 2)); } while (0);
      dw2_asm_output_delta (for_eh ? 4 : 4, l2, l1,
       "FDE Length");
      do { assemble_name ((asm_out_file), (l1)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
      if (for_eh)
 dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
      else
 dw2_asm_output_offset (4, section_start_label,
          "FDE CIE offset");
      if (for_eh)
 {
   if (0
       && ((fde->decl)->decl.transparent_union))
     dw2_asm_output_encoded_addr_rtx (fde_encoding,
       gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (((const char *) (decl_assembler_name (fde->decl))->identifier.id.str)))
                                                 ,
       "FDE initial location");
   else
     dw2_asm_output_encoded_addr_rtx (fde_encoding,
       gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (fde->dw_fde_begin)),
       "FDE initial location");
   dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
    fde->dw_fde_end, fde->dw_fde_begin,
    "FDE address range");
 }
      else
 {
   dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), fde->dw_fde_begin,
          "FDE initial location");
   dw2_asm_output_delta (((8 * (0 ? 8 : 4)) / 8),
    fde->dw_fde_end, fde->dw_fde_begin,
    "FDE address range");
 }
      if (augmentation[0])
 {
   if (any_lsda_needed)
     {
       int size = size_of_encoded_value (lsda_encoding);
       if (lsda_encoding == 0x50)
  {
    int offset = ( 4
    + 4
    + 2 * size_of_encoded_value (fde_encoding)
    + 1 );
    int pad = -offset & (((8 * (0 ? 8 : 4)) / 8) - 1);
    size += pad;
    if (size_of_uleb128 (size) != 1)
      abort ();
  }
       dw2_asm_output_data_uleb128 (size, "Augmentation size");
       if (fde->uses_eh_lsda)
  {
    do { sprintf (l1, "*.%s%u", "LLSDA", (unsigned) (fde->funcdef_number)); } while (0)
                                ;
    dw2_asm_output_encoded_addr_rtx (
   lsda_encoding, gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (l1)),
   "Language Specific Data Area");
  }
       else
  {
    if (lsda_encoding == 0x50)
      if ((floor_log2_wide ((unsigned long) (((8 * (0 ? 8 : 4)) / 8))))!=0) fprintf ((asm_out_file), "\t.align %d\n", 1<<(floor_log2_wide ((unsigned long) (((8 * (0 ? 8 : 4)) / 8)))));
    dw2_asm_output_data
      (size_of_encoded_value (lsda_encoding), 0,
       "Language Specific Data Area (none)");
  }
     }
   else
     dw2_asm_output_data_uleb128 (0, "Augmentation size");
 }
      fde->dw_fde_current_label = fde->dw_fde_begin;
      for (cfi = fde->dw_fde_cfi; cfi != ((void *)0); cfi = cfi->dw_cfi_next)
 output_cfi (cfi, fde, for_eh);
      if ((floor_log2_wide ((unsigned long) ((for_eh ? ((8 * (0 ? 8 : 4)) / 8) : ((8 * (0 ? 8 : 4)) / 8)))))!=0) fprintf ((asm_out_file), "\t.align %d\n", 1<<(floor_log2_wide ((unsigned long) ((for_eh ? ((8 * (0 ? 8 : 4)) / 8) : ((8 * (0 ? 8 : 4)) / 8))))))
                                                       ;
      do { assemble_name ((asm_out_file), (l2)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
    }
  if (for_eh && targetm.terminate_dw2_eh_frame_info)
    dw2_asm_output_data (4, 0, "End of Table");
  if (flag_debug_asm)
    app_disable ();
}
void
dwarf2out_begin_prologue (unsigned int line ,
     const char *file )
{
  char label[30];
  dw_fde_ref fde;
  current_function_func_begin_label = 0;
  if (! dwarf2out_do_frame ())
    return;
  function_section (current_function_decl);
  do { sprintf (label, "*.%s%u", "LFB", (unsigned) ((cfun->funcdef_no))); } while (0)
                                      ;
  (*targetm.asm_out.internal_label) (asm_out_file, "LFB", (cfun->funcdef_no))
                                 ;
  current_function_func_begin_label = get_identifier (label);
  if (fde_table_in_use == fde_table_allocated)
    {
      fde_table_allocated += 256;
      fde_table = ggc_realloc_stat (fde_table,fde_table_allocated * sizeof (dw_fde_node) )
                                                     ;
      memset (fde_table + fde_table_in_use, 0,
       256 * sizeof (dw_fde_node));
    }
  current_funcdef_fde = fde_table_in_use;
  fde = &fde_table[fde_table_in_use++];
  fde->decl = current_function_decl;
  fde->dw_fde_begin = xstrdup (label);
  fde->dw_fde_current_label = ((void *)0);
  fde->dw_fde_end = ((void *)0);
  fde->dw_fde_cfi = ((void *)0);
  fde->funcdef_number = (cfun->funcdef_no);
  fde->nothrow = current_function_nothrow;
  fde->uses_eh_lsda = cfun->uses_eh_lsda;
  fde->all_throwers_are_sibcalls = cfun->all_throwers_are_sibcalls;
  args_size = old_args_size = 0;
  if (file)
    dwarf2out_source_line (line, file);
}
void
dwarf2out_end_epilogue (unsigned int line ,
   const char *file )
{
  dw_fde_ref fde;
  char label[30];
  do { sprintf (label, "*.%s%u", "LFE", (unsigned) ((cfun->funcdef_no))); } while (0)
                                      ;
  do { assemble_name ((asm_out_file), (label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  fde = &fde_table[fde_table_in_use - 1];
  fde->dw_fde_end = xstrdup (label);
}
void
dwarf2out_frame_init (void)
{
  fde_table = ggc_alloc_cleared_stat (256 * sizeof (dw_fde_node) );
  fde_table_allocated = 256;
  fde_table_in_use = 0;
  dwarf2out_def_cfa (((void *)0), 7, (0 ? 8 : 4));
  initial_return_save (gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, 7)));
}
void
dwarf2out_frame_finish (void)
{
  if (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
    output_call_frame_info (0);
  if (! 0 && (flag_unwind_tables || flag_exceptions))
    output_call_frame_info (1);
}
typedef struct dw_val_struct *dw_val_ref;
typedef struct die_struct *dw_die_ref;
typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
typedef struct dw_loc_list_struct *dw_loc_list_ref;
enum dw_val_class
{
  dw_val_class_addr,
  dw_val_class_offset,
  dw_val_class_loc,
  dw_val_class_loc_list,
  dw_val_class_range_list,
  dw_val_class_const,
  dw_val_class_unsigned_const,
  dw_val_class_long_long,
  dw_val_class_vec,
  dw_val_class_flag,
  dw_val_class_die_ref,
  dw_val_class_fde_ref,
  dw_val_class_lbl_id,
  dw_val_class_lbl_offset,
  dw_val_class_str
};
typedef struct dw_long_long_struct
{
  unsigned long hi;
  unsigned long low;
}
dw_long_long_const;
typedef struct dw_vec_struct
{
  unsigned char * array;
  unsigned length;
  unsigned elt_size;
}
dw_vec_const;
typedef struct dw_val_struct
{
  enum dw_val_class val_class;
  union dw_val_struct_union
    {
      rtx val_addr;
      unsigned long val_offset;
      dw_loc_list_ref val_loc_list;
      dw_loc_descr_ref val_loc;
      long val_int;
      unsigned long val_unsigned;
      dw_long_long_const val_long_long;
      dw_vec_const val_vec;
      struct dw_val_die_union
 {
   dw_die_ref die;
   int external;
 } val_die_ref;
      unsigned val_fde_index;
      struct indirect_string_node * val_str;
      char * val_lbl_id;
      unsigned char val_flag;
    }
  v;
}
dw_val_node;
typedef struct dw_loc_descr_struct
{
  dw_loc_descr_ref dw_loc_next;
  enum dwarf_location_atom dw_loc_opc;
  dw_val_node dw_loc_oprnd1;
  dw_val_node dw_loc_oprnd2;
  int dw_loc_addr;
}
dw_loc_descr_node;
typedef struct dw_loc_list_struct
{
  dw_loc_list_ref dw_loc_next;
  const char *begin;
  const char *end;
  char *ll_symbol;
  const char *section;
  dw_loc_descr_ref expr;
} dw_loc_list_node;
static const char *dwarf_stack_op_name (unsigned);
static dw_loc_descr_ref new_loc_descr (enum dwarf_location_atom,
           unsigned long, unsigned long);
static void add_loc_descr (dw_loc_descr_ref *, dw_loc_descr_ref);
static unsigned long size_of_loc_descr (dw_loc_descr_ref);
static unsigned long size_of_locs (dw_loc_descr_ref);
static void output_loc_operands (dw_loc_descr_ref);
static void output_loc_sequence (dw_loc_descr_ref);
static const char *
dwarf_stack_op_name (unsigned int op)
{
  switch (op)
    {
    case DW_OP_addr:
    case (0x100 + DW_OP_addr):
      return "DW_OP_addr";
    case DW_OP_deref:
      return "DW_OP_deref";
    case DW_OP_const1u:
      return "DW_OP_const1u";
    case DW_OP_const1s:
      return "DW_OP_const1s";
    case DW_OP_const2u:
      return "DW_OP_const2u";
    case DW_OP_const2s:
      return "DW_OP_const2s";
    case DW_OP_const4u:
      return "DW_OP_const4u";
    case DW_OP_const4s:
      return "DW_OP_const4s";
    case DW_OP_const8u:
      return "DW_OP_const8u";
    case DW_OP_const8s:
      return "DW_OP_const8s";
    case DW_OP_constu:
      return "DW_OP_constu";
    case DW_OP_consts:
      return "DW_OP_consts";
    case DW_OP_dup:
      return "DW_OP_dup";
    case DW_OP_drop:
      return "DW_OP_drop";
    case DW_OP_over:
      return "DW_OP_over";
    case DW_OP_pick:
      return "DW_OP_pick";
    case DW_OP_swap:
      return "DW_OP_swap";
    case DW_OP_rot:
      return "DW_OP_rot";
    case DW_OP_xderef:
      return "DW_OP_xderef";
    case DW_OP_abs:
      return "DW_OP_abs";
    case DW_OP_and:
      return "DW_OP_and";
    case DW_OP_div:
      return "DW_OP_div";
    case DW_OP_minus:
      return "DW_OP_minus";
    case DW_OP_mod:
      return "DW_OP_mod";
    case DW_OP_mul:
      return "DW_OP_mul";
    case DW_OP_neg:
      return "DW_OP_neg";
    case DW_OP_not:
      return "DW_OP_not";
    case DW_OP_or:
      return "DW_OP_or";
    case DW_OP_plus:
      return "DW_OP_plus";
    case DW_OP_plus_uconst:
      return "DW_OP_plus_uconst";
    case DW_OP_shl:
      return "DW_OP_shl";
    case DW_OP_shr:
      return "DW_OP_shr";
    case DW_OP_shra:
      return "DW_OP_shra";
    case DW_OP_xor:
      return "DW_OP_xor";
    case DW_OP_bra:
      return "DW_OP_bra";
    case DW_OP_eq:
      return "DW_OP_eq";
    case DW_OP_ge:
      return "DW_OP_ge";
    case DW_OP_gt:
      return "DW_OP_gt";
    case DW_OP_le:
      return "DW_OP_le";
    case DW_OP_lt:
      return "DW_OP_lt";
    case DW_OP_ne:
      return "DW_OP_ne";
    case DW_OP_skip:
      return "DW_OP_skip";
    case DW_OP_lit0:
      return "DW_OP_lit0";
    case DW_OP_lit1:
      return "DW_OP_lit1";
    case DW_OP_lit2:
      return "DW_OP_lit2";
    case DW_OP_lit3:
      return "DW_OP_lit3";
    case DW_OP_lit4:
      return "DW_OP_lit4";
    case DW_OP_lit5:
      return "DW_OP_lit5";
    case DW_OP_lit6:
      return "DW_OP_lit6";
    case DW_OP_lit7:
      return "DW_OP_lit7";
    case DW_OP_lit8:
      return "DW_OP_lit8";
    case DW_OP_lit9:
      return "DW_OP_lit9";
    case DW_OP_lit10:
      return "DW_OP_lit10";
    case DW_OP_lit11:
      return "DW_OP_lit11";
    case DW_OP_lit12:
      return "DW_OP_lit12";
    case DW_OP_lit13:
      return "DW_OP_lit13";
    case DW_OP_lit14:
      return "DW_OP_lit14";
    case DW_OP_lit15:
      return "DW_OP_lit15";
    case DW_OP_lit16:
      return "DW_OP_lit16";
    case DW_OP_lit17:
      return "DW_OP_lit17";
    case DW_OP_lit18:
      return "DW_OP_lit18";
    case DW_OP_lit19:
      return "DW_OP_lit19";
    case DW_OP_lit20:
      return "DW_OP_lit20";
    case DW_OP_lit21:
      return "DW_OP_lit21";
    case DW_OP_lit22:
      return "DW_OP_lit22";
    case DW_OP_lit23:
      return "DW_OP_lit23";
    case DW_OP_lit24:
      return "DW_OP_lit24";
    case DW_OP_lit25:
      return "DW_OP_lit25";
    case DW_OP_lit26:
      return "DW_OP_lit26";
    case DW_OP_lit27:
      return "DW_OP_lit27";
    case DW_OP_lit28:
      return "DW_OP_lit28";
    case DW_OP_lit29:
      return "DW_OP_lit29";
    case DW_OP_lit30:
      return "DW_OP_lit30";
    case DW_OP_lit31:
      return "DW_OP_lit31";
    case DW_OP_reg0:
      return "DW_OP_reg0";
    case DW_OP_reg1:
      return "DW_OP_reg1";
    case DW_OP_reg2:
      return "DW_OP_reg2";
    case DW_OP_reg3:
      return "DW_OP_reg3";
    case DW_OP_reg4:
      return "DW_OP_reg4";
    case DW_OP_reg5:
      return "DW_OP_reg5";
    case DW_OP_reg6:
      return "DW_OP_reg6";
    case DW_OP_reg7:
      return "DW_OP_reg7";
    case DW_OP_reg8:
      return "DW_OP_reg8";
    case DW_OP_reg9:
      return "DW_OP_reg9";
    case DW_OP_reg10:
      return "DW_OP_reg10";
    case DW_OP_reg11:
      return "DW_OP_reg11";
    case DW_OP_reg12:
      return "DW_OP_reg12";
    case DW_OP_reg13:
      return "DW_OP_reg13";
    case DW_OP_reg14:
      return "DW_OP_reg14";
    case DW_OP_reg15:
      return "DW_OP_reg15";
    case DW_OP_reg16:
      return "DW_OP_reg16";
    case DW_OP_reg17:
      return "DW_OP_reg17";
    case DW_OP_reg18:
      return "DW_OP_reg18";
    case DW_OP_reg19:
      return "DW_OP_reg19";
    case DW_OP_reg20:
      return "DW_OP_reg20";
    case DW_OP_reg21:
      return "DW_OP_reg21";
    case DW_OP_reg22:
      return "DW_OP_reg22";
    case DW_OP_reg23:
      return "DW_OP_reg23";
    case DW_OP_reg24:
      return "DW_OP_reg24";
    case DW_OP_reg25:
      return "DW_OP_reg25";
    case DW_OP_reg26:
      return "DW_OP_reg26";
    case DW_OP_reg27:
      return "DW_OP_reg27";
    case DW_OP_reg28:
      return "DW_OP_reg28";
    case DW_OP_reg29:
      return "DW_OP_reg29";
    case DW_OP_reg30:
      return "DW_OP_reg30";
    case DW_OP_reg31:
      return "DW_OP_reg31";
    case DW_OP_breg0:
      return "DW_OP_breg0";
    case DW_OP_breg1:
      return "DW_OP_breg1";
    case DW_OP_breg2:
      return "DW_OP_breg2";
    case DW_OP_breg3:
      return "DW_OP_breg3";
    case DW_OP_breg4:
      return "DW_OP_breg4";
    case DW_OP_breg5:
      return "DW_OP_breg5";
    case DW_OP_breg6:
      return "DW_OP_breg6";
    case DW_OP_breg7:
      return "DW_OP_breg7";
    case DW_OP_breg8:
      return "DW_OP_breg8";
    case DW_OP_breg9:
      return "DW_OP_breg9";
    case DW_OP_breg10:
      return "DW_OP_breg10";
    case DW_OP_breg11:
      return "DW_OP_breg11";
    case DW_OP_breg12:
      return "DW_OP_breg12";
    case DW_OP_breg13:
      return "DW_OP_breg13";
    case DW_OP_breg14:
      return "DW_OP_breg14";
    case DW_OP_breg15:
      return "DW_OP_breg15";
    case DW_OP_breg16:
      return "DW_OP_breg16";
    case DW_OP_breg17:
      return "DW_OP_breg17";
    case DW_OP_breg18:
      return "DW_OP_breg18";
    case DW_OP_breg19:
      return "DW_OP_breg19";
    case DW_OP_breg20:
      return "DW_OP_breg20";
    case DW_OP_breg21:
      return "DW_OP_breg21";
    case DW_OP_breg22:
      return "DW_OP_breg22";
    case DW_OP_breg23:
      return "DW_OP_breg23";
    case DW_OP_breg24:
      return "DW_OP_breg24";
    case DW_OP_breg25:
      return "DW_OP_breg25";
    case DW_OP_breg26:
      return "DW_OP_breg26";
    case DW_OP_breg27:
      return "DW_OP_breg27";
    case DW_OP_breg28:
      return "DW_OP_breg28";
    case DW_OP_breg29:
      return "DW_OP_breg29";
    case DW_OP_breg30:
      return "DW_OP_breg30";
    case DW_OP_breg31:
      return "DW_OP_breg31";
    case DW_OP_regx:
      return "DW_OP_regx";
    case DW_OP_fbreg:
      return "DW_OP_fbreg";
    case DW_OP_bregx:
      return "DW_OP_bregx";
    case DW_OP_piece:
      return "DW_OP_piece";
    case DW_OP_deref_size:
      return "DW_OP_deref_size";
    case DW_OP_xderef_size:
      return "DW_OP_xderef_size";
    case DW_OP_nop:
      return "DW_OP_nop";
    case DW_OP_push_object_address:
      return "DW_OP_push_object_address";
    case DW_OP_call2:
      return "DW_OP_call2";
    case DW_OP_call4:
      return "DW_OP_call4";
    case DW_OP_call_ref:
      return "DW_OP_call_ref";
    case DW_OP_GNU_push_tls_address:
      return "DW_OP_GNU_push_tls_address";
    default:
      return "OP_<unknown>";
    }
}
static dw_loc_descr_ref
new_loc_descr (enum dwarf_location_atom op, unsigned long oprnd1,
        unsigned long oprnd2)
{
  dw_loc_descr_ref descr = ggc_alloc_cleared_stat (sizeof (dw_loc_descr_node) );
  descr->dw_loc_opc = op;
  descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
  descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
  descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
  descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
  return descr;
}
static void
add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
{
  dw_loc_descr_ref *d;
  for (d = list_head; (*d) != ((void *)0); d = &(*d)->dw_loc_next)
    ;
  *d = descr;
}
static unsigned long
size_of_loc_descr (dw_loc_descr_ref loc)
{
  unsigned long size = 1;
  switch (loc->dw_loc_opc)
    {
    case DW_OP_addr:
    case (0x100 + DW_OP_addr):
      size += ((8 * (0 ? 8 : 4)) / 8);
      break;
    case DW_OP_const1u:
    case DW_OP_const1s:
      size += 1;
      break;
    case DW_OP_const2u:
    case DW_OP_const2s:
      size += 2;
      break;
    case DW_OP_const4u:
    case DW_OP_const4s:
      size += 4;
      break;
    case DW_OP_const8u:
    case DW_OP_const8s:
      size += 8;
      break;
    case DW_OP_constu:
      size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
      break;
    case DW_OP_consts:
      size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
      break;
    case DW_OP_pick:
      size += 1;
      break;
    case DW_OP_plus_uconst:
      size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
      break;
    case DW_OP_skip:
    case DW_OP_bra:
      size += 2;
      break;
    case DW_OP_breg0:
    case DW_OP_breg1:
    case DW_OP_breg2:
    case DW_OP_breg3:
    case DW_OP_breg4:
    case DW_OP_breg5:
    case DW_OP_breg6:
    case DW_OP_breg7:
    case DW_OP_breg8:
    case DW_OP_breg9:
    case DW_OP_breg10:
    case DW_OP_breg11:
    case DW_OP_breg12:
    case DW_OP_breg13:
    case DW_OP_breg14:
    case DW_OP_breg15:
    case DW_OP_breg16:
    case DW_OP_breg17:
    case DW_OP_breg18:
    case DW_OP_breg19:
    case DW_OP_breg20:
    case DW_OP_breg21:
    case DW_OP_breg22:
    case DW_OP_breg23:
    case DW_OP_breg24:
    case DW_OP_breg25:
    case DW_OP_breg26:
    case DW_OP_breg27:
    case DW_OP_breg28:
    case DW_OP_breg29:
    case DW_OP_breg30:
    case DW_OP_breg31:
      size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
      break;
    case DW_OP_regx:
      size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
      break;
    case DW_OP_fbreg:
      size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
      break;
    case DW_OP_bregx:
      size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
      size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
      break;
    case DW_OP_piece:
      size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
      break;
    case DW_OP_deref_size:
    case DW_OP_xderef_size:
      size += 1;
      break;
    case DW_OP_call2:
      size += 2;
      break;
    case DW_OP_call4:
      size += 4;
      break;
    case DW_OP_call_ref:
      size += ((8 * (0 ? 8 : 4)) / 8);
      break;
    default:
      break;
    }
  return size;
}
static unsigned long
size_of_locs (dw_loc_descr_ref loc)
{
  unsigned long size;
  for (size = 0; loc != ((void *)0); loc = loc->dw_loc_next)
    {
      loc->dw_loc_addr = size;
      size += size_of_loc_descr (loc);
    }
  return size;
}
static void
output_loc_operands (dw_loc_descr_ref loc)
{
  dw_val_ref val1 = &loc->dw_loc_oprnd1;
  dw_val_ref val2 = &loc->dw_loc_oprnd2;
  switch (loc->dw_loc_opc)
    {
    case DW_OP_addr:
      dw2_asm_output_addr_rtx (((8 * (0 ? 8 : 4)) / 8), val1->v.val_addr, ((void *)0));
      break;
    case DW_OP_const2u:
    case DW_OP_const2s:
      dw2_asm_output_data (2, val1->v.val_int, ((void *)0));
      break;
    case DW_OP_const4u:
    case DW_OP_const4s:
      dw2_asm_output_data (4, val1->v.val_int, ((void *)0));
      break;
    case DW_OP_const8u:
    case DW_OP_const8s:
      if ((8 * 4) < 64)
 abort ();
      dw2_asm_output_data (8, val1->v.val_int, ((void *)0));
      break;
    case DW_OP_skip:
    case DW_OP_bra:
      {
 int offset;
 if (val1->val_class == dw_val_class_loc)
   offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
 else
   abort ();
 dw2_asm_output_data (2, offset, ((void *)0));
      }
      break;
    case DW_OP_const1u:
    case DW_OP_const1s:
      dw2_asm_output_data (1, val1->v.val_int, ((void *)0));
      break;
    case DW_OP_constu:
      dw2_asm_output_data_uleb128 (val1->v.val_unsigned, ((void *)0));
      break;
    case DW_OP_consts:
      dw2_asm_output_data_sleb128 (val1->v.val_int, ((void *)0));
      break;
    case DW_OP_pick:
      dw2_asm_output_data (1, val1->v.val_int, ((void *)0));
      break;
    case DW_OP_plus_uconst:
      dw2_asm_output_data_uleb128 (val1->v.val_unsigned, ((void *)0));
      break;
    case DW_OP_breg0:
    case DW_OP_breg1:
    case DW_OP_breg2:
    case DW_OP_breg3:
    case DW_OP_breg4:
    case DW_OP_breg5:
    case DW_OP_breg6:
    case DW_OP_breg7:
    case DW_OP_breg8:
    case DW_OP_breg9:
    case DW_OP_breg10:
    case DW_OP_breg11:
    case DW_OP_breg12:
    case DW_OP_breg13:
    case DW_OP_breg14:
    case DW_OP_breg15:
    case DW_OP_breg16:
    case DW_OP_breg17:
    case DW_OP_breg18:
    case DW_OP_breg19:
    case DW_OP_breg20:
    case DW_OP_breg21:
    case DW_OP_breg22:
    case DW_OP_breg23:
    case DW_OP_breg24:
    case DW_OP_breg25:
    case DW_OP_breg26:
    case DW_OP_breg27:
    case DW_OP_breg28:
    case DW_OP_breg29:
    case DW_OP_breg30:
    case DW_OP_breg31:
      dw2_asm_output_data_sleb128 (val1->v.val_int, ((void *)0));
      break;
    case DW_OP_regx:
      dw2_asm_output_data_uleb128 (val1->v.val_unsigned, ((void *)0));
      break;
    case DW_OP_fbreg:
      dw2_asm_output_data_sleb128 (val1->v.val_int, ((void *)0));
      break;
    case DW_OP_bregx:
      dw2_asm_output_data_uleb128 (val1->v.val_unsigned, ((void *)0));
      dw2_asm_output_data_sleb128 (val2->v.val_int, ((void *)0));
      break;
    case DW_OP_piece:
      dw2_asm_output_data_uleb128 (val1->v.val_unsigned, ((void *)0));
      break;
    case DW_OP_deref_size:
    case DW_OP_xderef_size:
      dw2_asm_output_data (1, val1->v.val_int, ((void *)0));
      break;
    case (0x100 + DW_OP_addr):
      abort ();
      break;
    default:
      break;
    }
}
static void
output_loc_sequence (dw_loc_descr_ref loc)
{
  for (; loc != ((void *)0); loc = loc->dw_loc_next)
    {
      dw2_asm_output_data (1, loc->dw_loc_opc,
      "%s", dwarf_stack_op_name (loc->dw_loc_opc));
      output_loc_operands (loc);
    }
}
static void
output_cfa_loc (dw_cfi_ref cfi)
{
  dw_loc_descr_ref loc;
  unsigned long size;
  loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
  size = size_of_locs (loc);
  dw2_asm_output_data_uleb128 (size, ((void *)0));
  output_loc_sequence (loc);
}
static struct dw_loc_descr_struct *
build_cfa_loc (dw_cfa_location *cfa)
{
  struct dw_loc_descr_struct *head, *tmp;
  if (cfa->indirect == 0)
    abort ();
  if (cfa->base_offset)
    {
      if (cfa->reg <= 31)
 head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->base_offset, 0);
      else
 head = new_loc_descr (DW_OP_bregx, cfa->reg, cfa->base_offset);
    }
  else if (cfa->reg <= 31)
    head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
  else
    head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
  head->dw_loc_oprnd1.val_class = dw_val_class_const;
  tmp = new_loc_descr (DW_OP_deref, 0, 0);
  add_loc_descr (&head, tmp);
  if (cfa->offset != 0)
    {
      tmp = new_loc_descr (DW_OP_plus_uconst, cfa->offset, 0);
      add_loc_descr (&head, tmp);
    }
  return head;
}
static void
get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
{
  struct dw_loc_descr_struct *ptr;
  cfa->offset = 0;
  cfa->base_offset = 0;
  cfa->indirect = 0;
  cfa->reg = -1;
  for (ptr = loc; ptr != ((void *)0); ptr = ptr->dw_loc_next)
    {
      enum dwarf_location_atom op = ptr->dw_loc_opc;
      switch (op)
 {
 case DW_OP_reg0:
 case DW_OP_reg1:
 case DW_OP_reg2:
 case DW_OP_reg3:
 case DW_OP_reg4:
 case DW_OP_reg5:
 case DW_OP_reg6:
 case DW_OP_reg7:
 case DW_OP_reg8:
 case DW_OP_reg9:
 case DW_OP_reg10:
 case DW_OP_reg11:
 case DW_OP_reg12:
 case DW_OP_reg13:
 case DW_OP_reg14:
 case DW_OP_reg15:
 case DW_OP_reg16:
 case DW_OP_reg17:
 case DW_OP_reg18:
 case DW_OP_reg19:
 case DW_OP_reg20:
 case DW_OP_reg21:
 case DW_OP_reg22:
 case DW_OP_reg23:
 case DW_OP_reg24:
 case DW_OP_reg25:
 case DW_OP_reg26:
 case DW_OP_reg27:
 case DW_OP_reg28:
 case DW_OP_reg29:
 case DW_OP_reg30:
 case DW_OP_reg31:
   cfa->reg = op - DW_OP_reg0;
   break;
 case DW_OP_regx:
   cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
   break;
 case DW_OP_breg0:
 case DW_OP_breg1:
 case DW_OP_breg2:
 case DW_OP_breg3:
 case DW_OP_breg4:
 case DW_OP_breg5:
 case DW_OP_breg6:
 case DW_OP_breg7:
 case DW_OP_breg8:
 case DW_OP_breg9:
 case DW_OP_breg10:
 case DW_OP_breg11:
 case DW_OP_breg12:
 case DW_OP_breg13:
 case DW_OP_breg14:
 case DW_OP_breg15:
 case DW_OP_breg16:
 case DW_OP_breg17:
 case DW_OP_breg18:
 case DW_OP_breg19:
 case DW_OP_breg20:
 case DW_OP_breg21:
 case DW_OP_breg22:
 case DW_OP_breg23:
 case DW_OP_breg24:
 case DW_OP_breg25:
 case DW_OP_breg26:
 case DW_OP_breg27:
 case DW_OP_breg28:
 case DW_OP_breg29:
 case DW_OP_breg30:
 case DW_OP_breg31:
   cfa->reg = op - DW_OP_breg0;
   cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
   break;
 case DW_OP_bregx:
   cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
   cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
   break;
 case DW_OP_deref:
   cfa->indirect = 1;
   break;
 case DW_OP_plus_uconst:
   cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
   break;
 default:
   internal_error ("DW_LOC_OP %s not implemented\n",
     dwarf_stack_op_name (ptr->dw_loc_opc));
 }
    }
}
static int output_indirect_string (void **, void *);
static void dwarf2out_init (const char *);
static void dwarf2out_finish (const char *);
static void dwarf2out_define (unsigned int, const char *);
static void dwarf2out_undef (unsigned int, const char *);
static void dwarf2out_start_source_file (unsigned, const char *);
static void dwarf2out_end_source_file (unsigned);
static void dwarf2out_begin_block (unsigned, unsigned);
static void dwarf2out_end_block (unsigned, unsigned);
static unsigned char dwarf2out_ignore_block (tree);
static void dwarf2out_global_decl (tree);
static void dwarf2out_type_decl (tree, int);
static void dwarf2out_imported_module_or_decl (tree, tree);
static void dwarf2out_abstract_function (tree);
static void dwarf2out_var_location (rtx);
static void dwarf2out_begin_function (tree);
const struct gcc_debug_hooks dwarf2_debug_hooks =
{
  dwarf2out_init,
  dwarf2out_finish,
  dwarf2out_define,
  dwarf2out_undef,
  dwarf2out_start_source_file,
  dwarf2out_end_source_file,
  dwarf2out_begin_block,
  dwarf2out_end_block,
  dwarf2out_ignore_block,
  dwarf2out_source_line,
  dwarf2out_begin_prologue,
  debug_nothing_int_charstar,
  dwarf2out_end_epilogue,
  dwarf2out_begin_function,
  debug_nothing_int,
  dwarf2out_decl,
  dwarf2out_global_decl,
  dwarf2out_type_decl,
  dwarf2out_imported_module_or_decl,
  debug_nothing_tree,
  dwarf2out_abstract_function,
  debug_nothing_rtx,
  debug_nothing_int,
  dwarf2out_var_location
};
typedef long int dw_offset;
typedef struct dw_attr_struct *dw_attr_ref;
typedef struct dw_line_info_struct *dw_line_info_ref;
typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
typedef struct pubname_struct *pubname_ref;
typedef struct dw_ranges_struct *dw_ranges_ref;
typedef struct dw_line_info_struct
{
  unsigned long dw_file_num;
  unsigned long dw_line_num;
}
dw_line_info_entry;
typedef struct dw_separate_line_info_struct
{
  unsigned long dw_file_num;
  unsigned long dw_line_num;
  unsigned long function;
}
dw_separate_line_info_entry;
typedef struct dw_attr_struct
{
  enum dwarf_attribute dw_attr;
  dw_attr_ref dw_attr_next;
  dw_val_node dw_attr_val;
}
dw_attr_node;
typedef struct die_struct
{
  enum dwarf_tag die_tag;
  char *die_symbol;
  dw_attr_ref die_attr;
  dw_die_ref die_parent;
  dw_die_ref die_child;
  dw_die_ref die_sib;
  dw_die_ref die_definition;
  dw_offset die_offset;
  unsigned long die_abbrev;
  int die_mark;
  unsigned int decl_id;
}
die_node;
typedef struct pubname_struct
{
  dw_die_ref die;
  char *name;
}
pubname_entry;
struct dw_ranges_struct
{
  int block_num;
};
typedef struct limbo_die_struct
{
  dw_die_ref die;
  tree created_for;
  struct limbo_die_struct *next;
}
limbo_die_node;
static unsigned long next_die_offset;
static dw_die_ref comp_unit_die;
static limbo_die_node *limbo_die_list;
static varray_type file_table;
static varray_type file_table_emitted;
static size_t file_table_last_lookup_index;
static htab_t decl_die_table;
struct var_loc_node
{
  rtx var_loc_note;
  const char * label;
  struct var_loc_node * next;
};
struct var_loc_list_def
{
  struct var_loc_node * first;
  struct var_loc_node * last;
  unsigned int decl_id;
};
typedef struct var_loc_list_def var_loc_list;
static htab_t decl_loc_table;
static
  dw_die_ref *abbrev_die_table;
static unsigned abbrev_die_table_allocated;
static unsigned abbrev_die_table_in_use;
static
     dw_line_info_ref line_info_table;
static unsigned line_info_table_allocated;
static unsigned line_info_table_in_use;
static
     dw_separate_line_info_ref separate_line_info_table;
static unsigned separate_line_info_table_allocated;
static unsigned separate_line_info_table_in_use;
static pubname_ref pubname_table;
static unsigned pubname_table_allocated;
static unsigned pubname_table_in_use;
static dw_die_ref *arange_table;
static unsigned arange_table_allocated;
static unsigned arange_table_in_use;
static dw_ranges_ref ranges_table;
static unsigned ranges_table_allocated;
static unsigned ranges_table_in_use;
static unsigned have_location_lists;
static unsigned int loclabel_num;
static int current_function_has_inlines;
static int emitcount = 0;
static int label_num;
static int is_pseudo_reg (rtx);
static tree type_main_variant (tree);
static int is_tagged_type (tree);
static const char *dwarf_tag_name (unsigned);
static const char *dwarf_attr_name (unsigned);
static const char *dwarf_form_name (unsigned);
static tree decl_ultimate_origin (tree);
static tree block_ultimate_origin (tree);
static tree decl_class_context (tree);
static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
static enum dw_val_class AT_class (dw_attr_ref);
static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
static unsigned AT_flag (dw_attr_ref);
static void add_AT_int (dw_die_ref, enum dwarf_attribute, long);
static long AT_int (dw_attr_ref);
static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned long);
static unsigned long AT_unsigned (dw_attr_ref);
static void add_AT_long_long (dw_die_ref, enum dwarf_attribute, unsigned long,
         unsigned long);
static void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
          unsigned int, unsigned char *);
static hashval_t debug_str_do_hash (const void *);
static int debug_str_eq (const void *, const void *);
static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
static const char *AT_string (dw_attr_ref);
static int AT_string_form (dw_attr_ref);
static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
static void add_AT_specification (dw_die_ref, dw_die_ref);
static dw_die_ref AT_ref (dw_attr_ref);
static int AT_ref_external (dw_attr_ref);
static void set_AT_ref_external (dw_attr_ref, int);
static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
static dw_loc_descr_ref AT_loc (dw_attr_ref);
static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
        dw_loc_list_ref);
static dw_loc_list_ref AT_loc_list (dw_attr_ref);
static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
static rtx AT_addr (dw_attr_ref);
static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
static void add_AT_lbl_offset (dw_die_ref, enum dwarf_attribute, const char *);
static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
      unsigned long);
static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
          unsigned long);
static const char *AT_lbl (dw_attr_ref);
static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
static const char *get_AT_low_pc (dw_die_ref);
static const char *get_AT_hi_pc (dw_die_ref);
static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
static dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
static unsigned char is_c_family (void);
static unsigned char is_cxx (void);
static unsigned char is_java (void);
static unsigned char is_fortran (void);
static unsigned char is_ada (void);
static void remove_AT (dw_die_ref, enum dwarf_attribute);
static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
static void free_die (dw_die_ref);
static void remove_children (dw_die_ref);
static void add_child_die (dw_die_ref, dw_die_ref);
static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
static dw_die_ref lookup_type_die (tree);
static void equate_type_number_to_die (tree, dw_die_ref);
static hashval_t decl_die_table_hash (const void *);
static int decl_die_table_eq (const void *, const void *);
static dw_die_ref lookup_decl_die (tree);
static hashval_t decl_loc_table_hash (const void *);
static int decl_loc_table_eq (const void *, const void *);
static var_loc_list *lookup_decl_loc (tree);
static void equate_decl_number_to_die (tree, dw_die_ref);
static void add_var_loc_to_decl (tree, struct var_loc_node *);
static void print_spaces (FILE *);
static void print_die (dw_die_ref, FILE *);
static void print_dwarf_line_table (FILE *);
static void reverse_die_lists (dw_die_ref);
static void reverse_all_dies (dw_die_ref);
static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
static dw_die_ref pop_compile_unit (dw_die_ref);
static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
static int same_dw_val_p (dw_val_node *, dw_val_node *, int *);
static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
static int same_die_p (dw_die_ref, dw_die_ref, int *);
static int same_die_p_wrap (dw_die_ref, dw_die_ref);
static void compute_section_prefix (dw_die_ref);
static int is_type_die (dw_die_ref);
static int is_comdat_die (dw_die_ref);
static int is_symbol_die (dw_die_ref);
static void assign_symbol_names (dw_die_ref);
static void break_out_includes (dw_die_ref);
static hashval_t htab_cu_hash (const void *);
static int htab_cu_eq (const void *, const void *);
static void htab_cu_del (void *);
static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
static void add_sibling_attributes (dw_die_ref);
static void build_abbrev_table (dw_die_ref);
static void output_location_lists (dw_die_ref);
static int constant_size (long unsigned);
static unsigned long size_of_die (dw_die_ref);
static void calc_die_sizes (dw_die_ref);
static void mark_dies (dw_die_ref);
static void unmark_dies (dw_die_ref);
static void unmark_all_dies (dw_die_ref);
static unsigned long size_of_pubnames (void);
static unsigned long size_of_aranges (void);
static enum dwarf_form value_format (dw_attr_ref);
static void output_value_format (dw_attr_ref);
static void output_abbrev_section (void);
static void output_die_symbol (dw_die_ref);
static void output_die (dw_die_ref);
static void output_compilation_unit_header (void);
static void output_comp_unit (dw_die_ref, int);
static const char *dwarf2_name (tree, int);
static void add_pubname (tree, dw_die_ref);
static void output_pubnames (void);
static void add_arange (tree, dw_die_ref);
static void output_aranges (void);
static unsigned int add_ranges (tree);
static void output_ranges (void);
static void output_line_info (void);
static void output_file_names (void);
static dw_die_ref base_type_die (tree);
static tree root_type (tree);
static int is_base_type (tree);
static unsigned char is_subrange_type (tree);
static dw_die_ref subrange_type_die (tree, dw_die_ref);
static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
static int type_is_enum (tree);
static unsigned int dbx_reg_number (rtx);
static dw_loc_descr_ref reg_loc_descriptor (rtx);
static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int);
static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx);
static dw_loc_descr_ref int_loc_descriptor (long);
static dw_loc_descr_ref based_loc_descr (unsigned, long, unsigned char);
static int is_based_loc (rtx);
static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode, unsigned char);
static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx);
static dw_loc_descr_ref loc_descriptor (rtx, unsigned char);
static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
static long ceiling (long, unsigned int);
static tree field_type (tree);
static unsigned int simple_type_align_in_bits (tree);
static unsigned int simple_decl_align_in_bits (tree);
static unsigned long simple_type_size_in_bits (tree);
static long field_byte_offset (tree);
static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
      dw_loc_descr_ref);
static void add_data_member_location_attribute (dw_die_ref, tree);
static void add_const_value_attribute (dw_die_ref, rtx);
static void insert_int (long, unsigned, unsigned char *);
static long extract_int (const unsigned char *, unsigned);
static void insert_float (rtx, unsigned char *);
static rtx rtl_for_decl_location (tree);
static void add_location_or_const_value_attribute (dw_die_ref, tree,
         enum dwarf_attribute);
static void tree_add_const_value_attribute (dw_die_ref, tree);
static void add_name_attribute (dw_die_ref, const char *);
static void add_comp_dir_attribute (dw_die_ref);
static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
static void add_subscript_info (dw_die_ref, tree);
static void add_byte_size_attribute (dw_die_ref, tree);
static void add_bit_offset_attribute (dw_die_ref, tree);
static void add_bit_size_attribute (dw_die_ref, tree);
static void add_prototyped_attribute (dw_die_ref, tree);
static void add_abstract_origin_attribute (dw_die_ref, tree);
static void add_pure_or_virtual_attribute (dw_die_ref, tree);
static void add_src_coords_attributes (dw_die_ref, tree);
static void add_name_and_src_coords_attributes (dw_die_ref, tree);
static void push_decl_scope (tree);
static void pop_decl_scope (void);
static dw_die_ref scope_die_for (tree, dw_die_ref);
static int local_scope_p (dw_die_ref);
static int class_or_namespace_scope_p (dw_die_ref);
static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
static const char *type_tag (tree);
static tree member_declared_type (tree);
static void gen_array_type_die (tree, dw_die_ref);
static void gen_set_type_die (tree, dw_die_ref);
static void gen_inlined_enumeration_type_die (tree, dw_die_ref);
static void gen_inlined_structure_type_die (tree, dw_die_ref);
static void gen_inlined_union_type_die (tree, dw_die_ref);
static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
static dw_die_ref gen_formal_parameter_die (tree, dw_die_ref);
static void gen_unspecified_parameters_die (tree, dw_die_ref);
static void gen_formal_types_die (tree, dw_die_ref);
static void gen_subprogram_die (tree, dw_die_ref);
static void gen_variable_die (tree, dw_die_ref);
static void gen_label_die (tree, dw_die_ref);
static void gen_lexical_block_die (tree, dw_die_ref, int);
static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
static void gen_field_die (tree, dw_die_ref);
static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
static dw_die_ref gen_compile_unit_die (const char *);
static void gen_string_type_die (tree, dw_die_ref);
static void gen_inheritance_die (tree, tree, dw_die_ref);
static void gen_member_die (tree, dw_die_ref);
static void gen_struct_or_union_type_die (tree, dw_die_ref);
static void gen_subroutine_type_die (tree, dw_die_ref);
static void gen_typedef_die (tree, dw_die_ref);
static void gen_type_die (tree, dw_die_ref);
static void gen_tagged_type_instantiation_die (tree, dw_die_ref);
static void gen_block_die (tree, dw_die_ref, int);
static void decls_for_scope (tree, dw_die_ref, int);
static int is_redundant_typedef (tree);
static void gen_namespace_die (tree);
static void gen_decl_die (tree, dw_die_ref);
static dw_die_ref force_decl_die (tree);
static dw_die_ref force_type_die (tree);
static dw_die_ref setup_namespace_context (tree, dw_die_ref);
static void declare_in_namespace (tree, dw_die_ref);
static unsigned lookup_filename (const char *);
static void init_file_table (void);
static void retry_incomplete_types (void);
static void gen_type_die_for_member (tree, tree, dw_die_ref);
static void splice_child_die (dw_die_ref, dw_die_ref);
static int file_info_cmp (const void *, const void *);
static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
         const char *, const char *, unsigned);
static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
           const char *, const char *,
           const char *);
static void output_loc_list (dw_loc_list_ref);
static char *gen_internal_sym (const char *);
static void prune_unmark_dies (dw_die_ref);
static void prune_unused_types_mark (dw_die_ref, int);
static void prune_unused_types_walk (dw_die_ref);
static void prune_unused_types_walk_attribs (dw_die_ref);
static void prune_unused_types_prune (dw_die_ref);
static void prune_unused_types (void);
static int maybe_emit_file (int);
static char text_end_label[30];
static char text_section_label[30];
static char abbrev_section_label[30];
static char debug_info_section_label[30];
static char debug_line_section_label[30];
static char macinfo_section_label[30];
static char loc_section_label[30];
static char ranges_section_label[2 * 30];
static const char *(*demangle_name_func) (const char *);
void
dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
{
  demangle_name_func = func;
}
static int
is_pseudo_reg (rtx rtl)
{
  return (((((enum rtx_code) (rtl)->code) == REG) && (((rtl)->u.fld[0]).rtuint) >= 53)
   || (((enum rtx_code) (rtl)->code) == SUBREG
       && ((((((rtl)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53));
}
static tree
type_main_variant (tree type)
{
  type = ((type)->type.main_variant);
  if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
    while (type != ((type)->type.main_variant))
      type = ((type)->type.main_variant);
  return type;
}
static int
is_tagged_type (tree type)
{
  enum tree_code code = ((enum tree_code) (type)->common.code);
  return (code == RECORD_TYPE || code == UNION_TYPE
   || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
}
static const char *
dwarf_tag_name (unsigned int tag)
{
  switch (tag)
    {
    case DW_TAG_padding:
      return "DW_TAG_padding";
    case DW_TAG_array_type:
      return "DW_TAG_array_type";
    case DW_TAG_class_type:
      return "DW_TAG_class_type";
    case DW_TAG_entry_point:
      return "DW_TAG_entry_point";
    case DW_TAG_enumeration_type:
      return "DW_TAG_enumeration_type";
    case DW_TAG_formal_parameter:
      return "DW_TAG_formal_parameter";
    case DW_TAG_imported_declaration:
      return "DW_TAG_imported_declaration";
    case DW_TAG_label:
      return "DW_TAG_label";
    case DW_TAG_lexical_block:
      return "DW_TAG_lexical_block";
    case DW_TAG_member:
      return "DW_TAG_member";
    case DW_TAG_pointer_type:
      return "DW_TAG_pointer_type";
    case DW_TAG_reference_type:
      return "DW_TAG_reference_type";
    case DW_TAG_compile_unit:
      return "DW_TAG_compile_unit";
    case DW_TAG_string_type:
      return "DW_TAG_string_type";
    case DW_TAG_structure_type:
      return "DW_TAG_structure_type";
    case DW_TAG_subroutine_type:
      return "DW_TAG_subroutine_type";
    case DW_TAG_typedef:
      return "DW_TAG_typedef";
    case DW_TAG_union_type:
      return "DW_TAG_union_type";
    case DW_TAG_unspecified_parameters:
      return "DW_TAG_unspecified_parameters";
    case DW_TAG_variant:
      return "DW_TAG_variant";
    case DW_TAG_common_block:
      return "DW_TAG_common_block";
    case DW_TAG_common_inclusion:
      return "DW_TAG_common_inclusion";
    case DW_TAG_inheritance:
      return "DW_TAG_inheritance";
    case DW_TAG_inlined_subroutine:
      return "DW_TAG_inlined_subroutine";
    case DW_TAG_module:
      return "DW_TAG_module";
    case DW_TAG_ptr_to_member_type:
      return "DW_TAG_ptr_to_member_type";
    case DW_TAG_set_type:
      return "DW_TAG_set_type";
    case DW_TAG_subrange_type:
      return "DW_TAG_subrange_type";
    case DW_TAG_with_stmt:
      return "DW_TAG_with_stmt";
    case DW_TAG_access_declaration:
      return "DW_TAG_access_declaration";
    case DW_TAG_base_type:
      return "DW_TAG_base_type";
    case DW_TAG_catch_block:
      return "DW_TAG_catch_block";
    case DW_TAG_const_type:
      return "DW_TAG_const_type";
    case DW_TAG_constant:
      return "DW_TAG_constant";
    case DW_TAG_enumerator:
      return "DW_TAG_enumerator";
    case DW_TAG_file_type:
      return "DW_TAG_file_type";
    case DW_TAG_friend:
      return "DW_TAG_friend";
    case DW_TAG_namelist:
      return "DW_TAG_namelist";
    case DW_TAG_namelist_item:
      return "DW_TAG_namelist_item";
    case DW_TAG_namespace:
      return "DW_TAG_namespace";
    case DW_TAG_packed_type:
      return "DW_TAG_packed_type";
    case DW_TAG_subprogram:
      return "DW_TAG_subprogram";
    case DW_TAG_template_type_param:
      return "DW_TAG_template_type_param";
    case DW_TAG_template_value_param:
      return "DW_TAG_template_value_param";
    case DW_TAG_thrown_type:
      return "DW_TAG_thrown_type";
    case DW_TAG_try_block:
      return "DW_TAG_try_block";
    case DW_TAG_variant_part:
      return "DW_TAG_variant_part";
    case DW_TAG_variable:
      return "DW_TAG_variable";
    case DW_TAG_volatile_type:
      return "DW_TAG_volatile_type";
    case DW_TAG_imported_module:
      return "DW_TAG_imported_module";
    case DW_TAG_MIPS_loop:
      return "DW_TAG_MIPS_loop";
    case DW_TAG_format_label:
      return "DW_TAG_format_label";
    case DW_TAG_function_template:
      return "DW_TAG_function_template";
    case DW_TAG_class_template:
      return "DW_TAG_class_template";
    case DW_TAG_GNU_BINCL:
      return "DW_TAG_GNU_BINCL";
    case DW_TAG_GNU_EINCL:
      return "DW_TAG_GNU_EINCL";
    default:
      return "DW_TAG_<unknown>";
    }
}
static const char *
dwarf_attr_name (unsigned int attr)
{
  switch (attr)
    {
    case DW_AT_sibling:
      return "DW_AT_sibling";
    case DW_AT_location:
      return "DW_AT_location";
    case DW_AT_name:
      return "DW_AT_name";
    case DW_AT_ordering:
      return "DW_AT_ordering";
    case DW_AT_subscr_data:
      return "DW_AT_subscr_data";
    case DW_AT_byte_size:
      return "DW_AT_byte_size";
    case DW_AT_bit_offset:
      return "DW_AT_bit_offset";
    case DW_AT_bit_size:
      return "DW_AT_bit_size";
    case DW_AT_element_list:
      return "DW_AT_element_list";
    case DW_AT_stmt_list:
      return "DW_AT_stmt_list";
    case DW_AT_low_pc:
      return "DW_AT_low_pc";
    case DW_AT_high_pc:
      return "DW_AT_high_pc";
    case DW_AT_language:
      return "DW_AT_language";
    case DW_AT_member:
      return "DW_AT_member";
    case DW_AT_discr:
      return "DW_AT_discr";
    case DW_AT_discr_value:
      return "DW_AT_discr_value";
    case DW_AT_visibility:
      return "DW_AT_visibility";
    case DW_AT_import:
      return "DW_AT_import";
    case DW_AT_string_length:
      return "DW_AT_string_length";
    case DW_AT_common_reference:
      return "DW_AT_common_reference";
    case DW_AT_comp_dir:
      return "DW_AT_comp_dir";
    case DW_AT_const_value:
      return "DW_AT_const_value";
    case DW_AT_containing_type:
      return "DW_AT_containing_type";
    case DW_AT_default_value:
      return "DW_AT_default_value";
    case DW_AT_inline:
      return "DW_AT_inline";
    case DW_AT_is_optional:
      return "DW_AT_is_optional";
    case DW_AT_lower_bound:
      return "DW_AT_lower_bound";
    case DW_AT_producer:
      return "DW_AT_producer";
    case DW_AT_prototyped:
      return "DW_AT_prototyped";
    case DW_AT_return_addr:
      return "DW_AT_return_addr";
    case DW_AT_start_scope:
      return "DW_AT_start_scope";
    case DW_AT_stride_size:
      return "DW_AT_stride_size";
    case DW_AT_upper_bound:
      return "DW_AT_upper_bound";
    case DW_AT_abstract_origin:
      return "DW_AT_abstract_origin";
    case DW_AT_accessibility:
      return "DW_AT_accessibility";
    case DW_AT_address_class:
      return "DW_AT_address_class";
    case DW_AT_artificial:
      return "DW_AT_artificial";
    case DW_AT_base_types:
      return "DW_AT_base_types";
    case DW_AT_calling_convention:
      return "DW_AT_calling_convention";
    case DW_AT_count:
      return "DW_AT_count";
    case DW_AT_data_member_location:
      return "DW_AT_data_member_location";
    case DW_AT_decl_column:
      return "DW_AT_decl_column";
    case DW_AT_decl_file:
      return "DW_AT_decl_file";
    case DW_AT_decl_line:
      return "DW_AT_decl_line";
    case DW_AT_declaration:
      return "DW_AT_declaration";
    case DW_AT_discr_list:
      return "DW_AT_discr_list";
    case DW_AT_encoding:
      return "DW_AT_encoding";
    case DW_AT_external:
      return "DW_AT_external";
    case DW_AT_frame_base:
      return "DW_AT_frame_base";
    case DW_AT_friend:
      return "DW_AT_friend";
    case DW_AT_identifier_case:
      return "DW_AT_identifier_case";
    case DW_AT_macro_info:
      return "DW_AT_macro_info";
    case DW_AT_namelist_items:
      return "DW_AT_namelist_items";
    case DW_AT_priority:
      return "DW_AT_priority";
    case DW_AT_segment:
      return "DW_AT_segment";
    case DW_AT_specification:
      return "DW_AT_specification";
    case DW_AT_static_link:
      return "DW_AT_static_link";
    case DW_AT_type:
      return "DW_AT_type";
    case DW_AT_use_location:
      return "DW_AT_use_location";
    case DW_AT_variable_parameter:
      return "DW_AT_variable_parameter";
    case DW_AT_virtuality:
      return "DW_AT_virtuality";
    case DW_AT_vtable_elem_location:
      return "DW_AT_vtable_elem_location";
    case DW_AT_allocated:
      return "DW_AT_allocated";
    case DW_AT_associated:
      return "DW_AT_associated";
    case DW_AT_data_location:
      return "DW_AT_data_location";
    case DW_AT_stride:
      return "DW_AT_stride";
    case DW_AT_entry_pc:
      return "DW_AT_entry_pc";
    case DW_AT_use_UTF8:
      return "DW_AT_use_UTF8";
    case DW_AT_extension:
      return "DW_AT_extension";
    case DW_AT_ranges:
      return "DW_AT_ranges";
    case DW_AT_trampoline:
      return "DW_AT_trampoline";
    case DW_AT_call_column:
      return "DW_AT_call_column";
    case DW_AT_call_file:
      return "DW_AT_call_file";
    case DW_AT_call_line:
      return "DW_AT_call_line";
    case DW_AT_MIPS_fde:
      return "DW_AT_MIPS_fde";
    case DW_AT_MIPS_loop_begin:
      return "DW_AT_MIPS_loop_begin";
    case DW_AT_MIPS_tail_loop_begin:
      return "DW_AT_MIPS_tail_loop_begin";
    case DW_AT_MIPS_epilog_begin:
      return "DW_AT_MIPS_epilog_begin";
    case DW_AT_MIPS_loop_unroll_factor:
      return "DW_AT_MIPS_loop_unroll_factor";
    case DW_AT_MIPS_software_pipeline_depth:
      return "DW_AT_MIPS_software_pipeline_depth";
    case DW_AT_MIPS_linkage_name:
      return "DW_AT_MIPS_linkage_name";
    case DW_AT_MIPS_stride:
      return "DW_AT_MIPS_stride";
    case DW_AT_MIPS_abstract_name:
      return "DW_AT_MIPS_abstract_name";
    case DW_AT_MIPS_clone_origin:
      return "DW_AT_MIPS_clone_origin";
    case DW_AT_MIPS_has_inlines:
      return "DW_AT_MIPS_has_inlines";
    case DW_AT_sf_names:
      return "DW_AT_sf_names";
    case DW_AT_src_info:
      return "DW_AT_src_info";
    case DW_AT_mac_info:
      return "DW_AT_mac_info";
    case DW_AT_src_coords:
      return "DW_AT_src_coords";
    case DW_AT_body_begin:
      return "DW_AT_body_begin";
    case DW_AT_body_end:
      return "DW_AT_body_end";
    case DW_AT_GNU_vector:
      return "DW_AT_GNU_vector";
    case DW_AT_VMS_rtnbeg_pd_address:
      return "DW_AT_VMS_rtnbeg_pd_address";
    default:
      return "DW_AT_<unknown>";
    }
}
static const char *
dwarf_form_name (unsigned int form)
{
  switch (form)
    {
    case DW_FORM_addr:
      return "DW_FORM_addr";
    case DW_FORM_block2:
      return "DW_FORM_block2";
    case DW_FORM_block4:
      return "DW_FORM_block4";
    case DW_FORM_data2:
      return "DW_FORM_data2";
    case DW_FORM_data4:
      return "DW_FORM_data4";
    case DW_FORM_data8:
      return "DW_FORM_data8";
    case DW_FORM_string:
      return "DW_FORM_string";
    case DW_FORM_block:
      return "DW_FORM_block";
    case DW_FORM_block1:
      return "DW_FORM_block1";
    case DW_FORM_data1:
      return "DW_FORM_data1";
    case DW_FORM_flag:
      return "DW_FORM_flag";
    case DW_FORM_sdata:
      return "DW_FORM_sdata";
    case DW_FORM_strp:
      return "DW_FORM_strp";
    case DW_FORM_udata:
      return "DW_FORM_udata";
    case DW_FORM_ref_addr:
      return "DW_FORM_ref_addr";
    case DW_FORM_ref1:
      return "DW_FORM_ref1";
    case DW_FORM_ref2:
      return "DW_FORM_ref2";
    case DW_FORM_ref4:
      return "DW_FORM_ref4";
    case DW_FORM_ref8:
      return "DW_FORM_ref8";
    case DW_FORM_ref_udata:
      return "DW_FORM_ref_udata";
    case DW_FORM_indirect:
      return "DW_FORM_indirect";
    default:
      return "DW_FORM_<unknown>";
    }
}
static tree
decl_ultimate_origin (tree decl)
{
  if (((decl)->decl.abstract_flag) && ((decl)->decl.abstract_origin) == decl)
    return (tree) ((void *)0);
  return ((decl)->decl.abstract_origin);
}
static tree
block_ultimate_origin (tree block)
{
  tree immediate_origin = ((block)->block.abstract_origin);
  if (((block)->block.abstract_flag) && immediate_origin == block)
    return (tree) ((void *)0);
  if (immediate_origin == (tree) ((void *)0))
    return (tree) ((void *)0);
  else
    {
      tree ret_val;
      tree lookahead = immediate_origin;
      do
 {
   ret_val = lookahead;
   lookahead = (((enum tree_code) (ret_val)->common.code) == BLOCK
         ? ((ret_val)->block.abstract_origin) : ((void *)0));
 }
      while (lookahead != ((void *)0) && lookahead != ret_val);
      return ret_val;
    }
}
static tree
decl_class_context (tree decl)
{
  tree context = (tree) ((void *)0);
  if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL || ! ((decl)->decl.vindex))
    context = ((decl)->decl.context);
  else
    context = ((((((((((decl)->common.type))->type.value1s))->list.value1))->common.type))->type.main_variant)
                                                                  ;
  if (context && !(tree_code_type[(int) (((enum tree_code) (context)->common.code))] == 't'))
    context = (tree) ((void *)0);
  return context;
}
static void
add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
{
  if (die != ((void *)0) && attr != ((void *)0))
    {
      attr->dw_attr_next = die->die_attr;
      die->die_attr = attr;
    }
}
static enum dw_val_class
AT_class (dw_attr_ref a)
{
  return a->dw_attr_val.val_class;
}
static void
add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_flag;
  attr->dw_attr_val.v.val_flag = flag;
  add_dwarf_attr (die, attr);
}
static unsigned
AT_flag (dw_attr_ref a)
{
  if (a && AT_class (a) == dw_val_class_flag)
    return a->dw_attr_val.v.val_flag;
  abort ();
}
static void
add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, long int_val)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_const;
  attr->dw_attr_val.v.val_int = int_val;
  add_dwarf_attr (die, attr);
}
static long
AT_int (dw_attr_ref a)
{
  if (a && AT_class (a) == dw_val_class_const)
    return a->dw_attr_val.v.val_int;
  abort ();
}
static void
add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
   unsigned long unsigned_val)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_unsigned_const;
  attr->dw_attr_val.v.val_unsigned = unsigned_val;
  add_dwarf_attr (die, attr);
}
static unsigned long
AT_unsigned (dw_attr_ref a)
{
  if (a && AT_class (a) == dw_val_class_unsigned_const)
    return a->dw_attr_val.v.val_unsigned;
  abort ();
}
static void
add_AT_long_long (dw_die_ref die, enum dwarf_attribute attr_kind,
    long unsigned int val_hi, long unsigned int val_low)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_long_long;
  attr->dw_attr_val.v.val_long_long.hi = val_hi;
  attr->dw_attr_val.v.val_long_long.low = val_low;
  add_dwarf_attr (die, attr);
}
static void
add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
     unsigned int length, unsigned int elt_size, unsigned char *array)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_vec;
  attr->dw_attr_val.v.val_vec.length = length;
  attr->dw_attr_val.v.val_vec.elt_size = elt_size;
  attr->dw_attr_val.v.val_vec.array = array;
  add_dwarf_attr (die, attr);
}
static hashval_t
debug_str_do_hash (const void *x)
{
  return htab_hash_string (((const struct indirect_string_node *)x)->str);
}
static int
debug_str_eq (const void *x1, const void *x2)
{
  return strcmp ((((const struct indirect_string_node *)x1)->str),
   (const char *)x2) == 0;
}
static void
add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  struct indirect_string_node *node;
  void **slot;
  if (! debug_str_hash)
    debug_str_hash = htab_create_alloc (10, debug_str_do_hash, debug_str_eq, ((void *)0), ggc_calloc, ((void *)0))
                             ;
  slot = htab_find_slot_with_hash (debug_str_hash, str,
       htab_hash_string (str), INSERT);
  if (*slot == ((void *)0))
    *slot = ggc_alloc_cleared_stat (sizeof (struct indirect_string_node) );
  node = (struct indirect_string_node *) *slot;
  node->str = ggc_alloc_string((str), -1);
  node->refcount++;
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_str;
  attr->dw_attr_val.v.val_str = node;
  add_dwarf_attr (die, attr);
}
static const char *
AT_string (dw_attr_ref a)
{
  if (a && AT_class (a) == dw_val_class_str)
    return a->dw_attr_val.v.val_str->str;
  abort ();
}
static int
AT_string_form (dw_attr_ref a)
{
  if (a && AT_class (a) == dw_val_class_str)
    {
      struct indirect_string_node *node;
      unsigned int len;
      char label[32];
      node = a->dw_attr_val.v.val_str;
      if (node->form)
 return node->form;
      len = strlen (node->str) + 1;
      if (len <= 4 || node->refcount == 0)
 return node->form = DW_FORM_string;
      if (((1 && flag_merge_constants ? 0x00400 | 0x08000 | 0x10000 | 1 : 0x00400) & 0x08000) == 0
   && (len - 4) * node->refcount <= len)
 return node->form = DW_FORM_string;
      do { sprintf (label, "*.%s%u", "LASF", (unsigned) (dw2_string_counter)); } while (0);
      ++dw2_string_counter;
      node->label = xstrdup (label);
      return node->form = DW_FORM_strp;
    }
  abort ();
}
static void
add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_die_ref;
  attr->dw_attr_val.v.val_die_ref.die = targ_die;
  attr->dw_attr_val.v.val_die_ref.external = 0;
  add_dwarf_attr (die, attr);
}
static void
add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
{
  add_AT_die_ref (die, DW_AT_specification, targ_die);
  if (targ_die->die_definition)
    abort ();
  targ_die->die_definition = die;
}
static dw_die_ref
AT_ref (dw_attr_ref a)
{
  if (a && AT_class (a) == dw_val_class_die_ref)
    return a->dw_attr_val.v.val_die_ref.die;
  abort ();
}
static int
AT_ref_external (dw_attr_ref a)
{
  if (a && AT_class (a) == dw_val_class_die_ref)
    return a->dw_attr_val.v.val_die_ref.external;
  return 0;
}
static void
set_AT_ref_external (dw_attr_ref a, int i)
{
  if (a && AT_class (a) == dw_val_class_die_ref)
    a->dw_attr_val.v.val_die_ref.external = i;
  else
    abort ();
}
static void
add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_fde_ref;
  attr->dw_attr_val.v.val_fde_index = targ_fde;
  add_dwarf_attr (die, attr);
}
static void
add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_loc;
  attr->dw_attr_val.v.val_loc = loc;
  add_dwarf_attr (die, attr);
}
static dw_loc_descr_ref
AT_loc (dw_attr_ref a)
{
  if (a && AT_class (a) == dw_val_class_loc)
    return a->dw_attr_val.v.val_loc;
  abort ();
}
static void
add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_loc_list;
  attr->dw_attr_val.v.val_loc_list = loc_list;
  add_dwarf_attr (die, attr);
  have_location_lists = 1;
}
static dw_loc_list_ref
AT_loc_list (dw_attr_ref a)
{
  if (a && AT_class (a) == dw_val_class_loc_list)
    return a->dw_attr_val.v.val_loc_list;
  abort ();
}
static void
add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_addr;
  attr->dw_attr_val.v.val_addr = addr;
  add_dwarf_attr (die, attr);
}
static rtx
AT_addr (dw_attr_ref a)
{
  if (a && AT_class (a) == dw_val_class_addr)
    return a->dw_attr_val.v.val_addr;
  abort ();
}
static void
add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_lbl_id;
  attr->dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
  add_dwarf_attr (die, attr);
}
static void
add_AT_lbl_offset (dw_die_ref die, enum dwarf_attribute attr_kind, const char *label)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_lbl_offset;
  attr->dw_attr_val.v.val_lbl_id = xstrdup (label);
  add_dwarf_attr (die, attr);
}
static void
add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
        unsigned long offset)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_offset;
  attr->dw_attr_val.v.val_offset = offset;
  add_dwarf_attr (die, attr);
}
static void
add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
     long unsigned int offset)
{
  dw_attr_ref attr = ggc_alloc_stat (sizeof (dw_attr_node) );
  attr->dw_attr_next = ((void *)0);
  attr->dw_attr = attr_kind;
  attr->dw_attr_val.val_class = dw_val_class_range_list;
  attr->dw_attr_val.v.val_offset = offset;
  add_dwarf_attr (die, attr);
}
static const char *
AT_lbl (dw_attr_ref a)
{
  if (a && (AT_class (a) == dw_val_class_lbl_id
     || AT_class (a) == dw_val_class_lbl_offset))
    return a->dw_attr_val.v.val_lbl_id;
  abort ();
}
static dw_attr_ref
get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
{
  dw_attr_ref a;
  dw_die_ref spec = ((void *)0);
  if (die != ((void *)0))
    {
      for (a = die->die_attr; a != ((void *)0); a = a->dw_attr_next)
 if (a->dw_attr == attr_kind)
   return a;
 else if (a->dw_attr == DW_AT_specification
   || a->dw_attr == DW_AT_abstract_origin)
   spec = AT_ref (a);
      if (spec)
 return get_AT (spec, attr_kind);
    }
  return ((void *)0);
}
static const char *
get_AT_low_pc (dw_die_ref die)
{
  dw_attr_ref a = get_AT (die, DW_AT_low_pc);
  return a ? AT_lbl (a) : ((void *)0);
}
static const char *
get_AT_hi_pc (dw_die_ref die)
{
  dw_attr_ref a = get_AT (die, DW_AT_high_pc);
  return a ? AT_lbl (a) : ((void *)0);
}
static const char *
get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
{
  dw_attr_ref a = get_AT (die, attr_kind);
  return a ? AT_string (a) : ((void *)0);
}
static int
get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
{
  dw_attr_ref a = get_AT (die, attr_kind);
  return a ? AT_flag (a) : 0;
}
static unsigned
get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
{
  dw_attr_ref a = get_AT (die, attr_kind);
  return a ? AT_unsigned (a) : 0;
}
static dw_die_ref
get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
{
  dw_attr_ref a = get_AT (die, attr_kind);
  return a ? AT_ref (a) : ((void *)0);
}
static unsigned char
is_c_family (void)
{
  unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
  return (lang == DW_LANG_C || lang == DW_LANG_C89
   || lang == DW_LANG_C_plus_plus);
}
static unsigned char
is_cxx (void)
{
  return (get_AT_unsigned (comp_unit_die, DW_AT_language)
   == DW_LANG_C_plus_plus);
}
static unsigned char
is_fortran (void)
{
  unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
  return (lang == DW_LANG_Fortran77
   || lang == DW_LANG_Fortran90
   || lang == DW_LANG_Fortran95);
}
static unsigned char
is_java (void)
{
  unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
  return lang == DW_LANG_Java;
}
static unsigned char
is_ada (void)
{
  unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
  return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
}
static void free_AT (dw_attr_ref);
static void
free_AT (dw_attr_ref a)
{
  if (AT_class (a) == dw_val_class_str)
    if (a->dw_attr_val.v.val_str->refcount)
      a->dw_attr_val.v.val_str->refcount--;
}
static void
remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
{
  dw_attr_ref *p;
  dw_attr_ref removed = ((void *)0);
  if (die != ((void *)0))
    {
      for (p = &(die->die_attr); *p; p = &((*p)->dw_attr_next))
 if ((*p)->dw_attr == attr_kind)
   {
     removed = *p;
     *p = (*p)->dw_attr_next;
     break;
   }
      if (removed != 0)
 free_AT (removed);
    }
}
static void
remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
{
  dw_die_ref current, prev, next;
  current = die->die_child;
  prev = ((void *)0);
  while (current != ((void *)0))
    {
      if (current->die_tag == tag)
 {
   next = current->die_sib;
   if (prev == ((void *)0))
     die->die_child = next;
   else
     prev->die_sib = next;
   free_die (current);
   current = next;
 }
      else
 {
   prev = current;
   current = current->die_sib;
 }
    }
}
static void
free_die (dw_die_ref die)
{
  remove_children (die);
}
static void
remove_children (dw_die_ref die)
{
  dw_die_ref child_die = die->die_child;
  die->die_child = ((void *)0);
  while (child_die != ((void *)0))
    {
      dw_die_ref tmp_die = child_die;
      dw_attr_ref a;
      child_die = child_die->die_sib;
      for (a = tmp_die->die_attr; a != ((void *)0);)
 {
   dw_attr_ref tmp_a = a;
   a = a->dw_attr_next;
   free_AT (tmp_a);
 }
      free_die (tmp_die);
    }
}
static void
add_child_die (dw_die_ref die, dw_die_ref child_die)
{
  if (die != ((void *)0) && child_die != ((void *)0))
    {
      if (die == child_die)
 abort ();
      child_die->die_parent = die;
      child_die->die_sib = die->die_child;
      die->die_child = child_die;
    }
}
static void
splice_child_die (dw_die_ref parent, dw_die_ref child)
{
  dw_die_ref *p;
  if (child->die_parent != parent)
    {
      dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
      if (tmp)
 child = tmp;
    }
  if (child->die_parent != parent
      && child->die_parent != get_AT_ref (parent, DW_AT_specification))
    abort ();
  for (p = &(child->die_parent->die_child); *p; p = &((*p)->die_sib))
    if (*p == child)
      {
 *p = child->die_sib;
 break;
      }
  child->die_parent = parent;
  child->die_sib = parent->die_child;
  parent->die_child = child;
}
static dw_die_ref
new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
{
  dw_die_ref die = ggc_alloc_cleared_stat (sizeof (die_node) );
  die->die_tag = tag_value;
  if (parent_die != ((void *)0))
    add_child_die (parent_die, die);
  else
    {
      limbo_die_node *limbo_node;
      limbo_node = ggc_alloc_cleared_stat (sizeof (limbo_die_node) );
      limbo_node->die = die;
      limbo_node->created_for = t;
      limbo_node->next = limbo_die_list;
      limbo_die_list = limbo_node;
    }
  return die;
}
static dw_die_ref
lookup_type_die (tree type)
{
  return ((type)->type.symtab.die);
}
static void
equate_type_number_to_die (tree type, dw_die_ref type_die)
{
  ((type)->type.symtab.die) = type_die;
}
static hashval_t
decl_die_table_hash (const void *x)
{
  return (hashval_t) ((const dw_die_ref) x)->decl_id;
}
static int
decl_die_table_eq (const void *x, const void *y)
{
  return (((const dw_die_ref) x)->decl_id == (((const tree) y)->decl.uid));
}
static dw_die_ref
lookup_decl_die (tree decl)
{
  return htab_find_with_hash (decl_die_table, decl, ((decl)->decl.uid));
}
static hashval_t
decl_loc_table_hash (const void *x)
{
  return (hashval_t) ((const var_loc_list *) x)->decl_id;
}
static int
decl_loc_table_eq (const void *x, const void *y)
{
  return (((const var_loc_list *) x)->decl_id == (((const tree) y)->decl.uid));
}
static var_loc_list *
lookup_decl_loc (tree decl)
{
  return htab_find_with_hash (decl_loc_table, decl, ((decl)->decl.uid));
}
static void
equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
{
  unsigned int decl_id = ((decl)->decl.uid);
  void **slot;
  slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
  *slot = decl_die;
  decl_die->decl_id = decl_id;
}
static void
add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
{
  unsigned int decl_id = ((decl)->decl.uid);
  var_loc_list *temp;
  void **slot;
  slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
  if (*slot == ((void *)0))
    {
      temp = ggc_alloc_cleared_stat (sizeof (var_loc_list) );
      temp->decl_id = decl_id;
      *slot = temp;
    }
  else
    temp = *slot;
  if (temp->last)
    {
      if (!rtx_equal_p ((((((((temp->last->var_loc_note)->u.fld[4]).rtx1))->u.fld[1]).rtx1)),
   (((((((loc->var_loc_note)->u.fld[4]).rtx1))->u.fld[1]).rtx1))))
 {
   temp->last->next = loc;
   temp->last = loc;
 }
    }
  else if ((((((((loc->var_loc_note)->u.fld[4]).rtx1))->u.fld[1]).rtx1)) != (rtx) 0)
    {
      temp->first = loc;
      temp->last = loc;
    }
}
static int print_indent1;
static void
print_spaces (FILE *outfile)
{
  fprintf (outfile, "%*s", print_indent1, "");
}
static void
print_die (dw_die_ref die, FILE *outfile)
{
  dw_attr_ref a;
  dw_die_ref c;
  print_spaces (outfile);
  fprintf (outfile, "DIE %4lu: %s\n",
    die->die_offset, dwarf_tag_name (die->die_tag));
  print_spaces (outfile);
  fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
  fprintf (outfile, " offset: %lu\n", die->die_offset);
  for (a = die->die_attr; a != ((void *)0); a = a->dw_attr_next)
    {
      print_spaces (outfile);
      fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
      switch (AT_class (a))
 {
 case dw_val_class_addr:
   fprintf (outfile, "address");
   break;
 case dw_val_class_offset:
   fprintf (outfile, "offset");
   break;
 case dw_val_class_loc:
   fprintf (outfile, "location descriptor");
   break;
 case dw_val_class_loc_list:
   fprintf (outfile, "location list -> label:%s",
     AT_loc_list (a)->ll_symbol);
   break;
 case dw_val_class_range_list:
   fprintf (outfile, "range list");
   break;
 case dw_val_class_const:
   fprintf (outfile, "%ld", AT_int (a));
   break;
 case dw_val_class_unsigned_const:
   fprintf (outfile, "%lu", AT_unsigned (a));
   break;
 case dw_val_class_long_long:
   fprintf (outfile, "constant (%lu,%lu)",
     a->dw_attr_val.v.val_long_long.hi,
     a->dw_attr_val.v.val_long_long.low);
   break;
 case dw_val_class_vec:
   fprintf (outfile, "floating-point or vector constant");
   break;
 case dw_val_class_flag:
   fprintf (outfile, "%u", AT_flag (a));
   break;
 case dw_val_class_die_ref:
   if (AT_ref (a) != ((void *)0))
     {
       if (AT_ref (a)->die_symbol)
  fprintf (outfile, "die -> label: %s", AT_ref (a)->die_symbol);
       else
  fprintf (outfile, "die -> %lu", AT_ref (a)->die_offset);
     }
   else
     fprintf (outfile, "die -> <null>");
   break;
 case dw_val_class_lbl_id:
 case dw_val_class_lbl_offset:
   fprintf (outfile, "label: %s", AT_lbl (a));
   break;
 case dw_val_class_str:
   if (AT_string (a) != ((void *)0))
     fprintf (outfile, "\"%s\"", AT_string (a));
   else
     fprintf (outfile, "<null>");
   break;
 default:
   break;
 }
      fprintf (outfile, "\n");
    }
  if (die->die_child != ((void *)0))
    {
      print_indent1 += 4;
      for (c = die->die_child; c != ((void *)0); c = c->die_sib)
 print_die (c, outfile);
      print_indent1 -= 4;
    }
  if (print_indent1 == 0)
    fprintf (outfile, "\n");
}
static void
print_dwarf_line_table (FILE *outfile)
{
  unsigned i;
  dw_line_info_ref line_info;
  fprintf (outfile, "\n\nDWARF source line information\n");
  for (i = 1; i < line_info_table_in_use; i++)
    {
      line_info = &line_info_table[i];
      fprintf (outfile, "%5d: ", i);
      fprintf (outfile, "%-20s",
        ((file_table)->data.cptr[line_info->dw_file_num]));
      fprintf (outfile, "%6ld", line_info->dw_line_num);
      fprintf (outfile, "\n");
    }
  fprintf (outfile, "\n\n");
}
void
debug_dwarf_die (dw_die_ref die)
{
  print_die (die, stderr);
}
void
debug_dwarf (void)
{
  print_indent1 = 0;
  print_die (comp_unit_die, stderr);
  if (! 1)
    print_dwarf_line_table (stderr);
}
static void
reverse_die_lists (dw_die_ref die)
{
  dw_die_ref c, cp, cn;
  dw_attr_ref a, ap, an;
  for (a = die->die_attr, ap = 0; a; a = an)
    {
      an = a->dw_attr_next;
      a->dw_attr_next = ap;
      ap = a;
    }
  die->die_attr = ap;
  for (c = die->die_child, cp = 0; c; c = cn)
    {
      cn = c->die_sib;
      c->die_sib = cp;
      cp = c;
    }
  die->die_child = cp;
}
static void
reverse_all_dies (dw_die_ref die)
{
  dw_die_ref c;
  reverse_die_lists (die);
  for (c = die->die_child; c; c = c->die_sib)
    reverse_all_dies (c);
}
static dw_die_ref
push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
{
  const char *filename = get_AT_string (bincl_die, DW_AT_name);
  dw_die_ref new_unit = gen_compile_unit_die (filename);
  new_unit->die_sib = old_unit;
  return new_unit;
}
static dw_die_ref
pop_compile_unit (dw_die_ref old_unit)
{
  dw_die_ref new_unit = old_unit->die_sib;
  old_unit->die_sib = ((void *)0);
  return new_unit;
}
static void
loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
{
  md5_process_bytes (&(loc->dw_loc_opc), sizeof (loc->dw_loc_opc), ctx);
  md5_process_bytes (&(loc->dw_loc_oprnd1), sizeof (loc->dw_loc_oprnd1), ctx);
  md5_process_bytes (&(loc->dw_loc_oprnd2), sizeof (loc->dw_loc_oprnd2), ctx);
}
static void
attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
{
  dw_loc_descr_ref loc;
  rtx r;
  md5_process_bytes (&(at->dw_attr), sizeof (at->dw_attr), ctx);
  if (at->dw_attr == DW_AT_decl_file
      || at->dw_attr == DW_AT_producer)
    return;
  switch (AT_class (at))
    {
    case dw_val_class_const:
      md5_process_bytes (&(at->dw_attr_val.v.val_int), sizeof (at->dw_attr_val.v.val_int), ctx);
      break;
    case dw_val_class_unsigned_const:
      md5_process_bytes (&(at->dw_attr_val.v.val_unsigned), sizeof (at->dw_attr_val.v.val_unsigned), ctx);
      break;
    case dw_val_class_long_long:
      md5_process_bytes (&(at->dw_attr_val.v.val_long_long), sizeof (at->dw_attr_val.v.val_long_long), ctx);
      break;
    case dw_val_class_vec:
      md5_process_bytes (&(at->dw_attr_val.v.val_vec), sizeof (at->dw_attr_val.v.val_vec), ctx);
      break;
    case dw_val_class_flag:
      md5_process_bytes (&(at->dw_attr_val.v.val_flag), sizeof (at->dw_attr_val.v.val_flag), ctx);
      break;
    case dw_val_class_str:
      md5_process_bytes ((AT_string (at)), strlen (AT_string (at)), ctx);
      break;
    case dw_val_class_addr:
      r = AT_addr (at);
      switch (((enum rtx_code) (r)->code))
 {
 case SYMBOL_REF:
   md5_process_bytes (((((r)->u.fld[0]).rtstr)), strlen ((((r)->u.fld[0]).rtstr)), ctx);
   break;
 default:
   abort ();
 }
      break;
    case dw_val_class_offset:
      md5_process_bytes (&(at->dw_attr_val.v.val_offset), sizeof (at->dw_attr_val.v.val_offset), ctx);
      break;
    case dw_val_class_loc:
      for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
 loc_checksum (loc, ctx);
      break;
    case dw_val_class_die_ref:
      die_checksum (AT_ref (at), ctx, mark);
      break;
    case dw_val_class_fde_ref:
    case dw_val_class_lbl_id:
    case dw_val_class_lbl_offset:
      break;
    default:
      break;
    }
}
static void
die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
{
  dw_die_ref c;
  dw_attr_ref a;
  if (die->die_mark)
    {
      md5_process_bytes (&(die->die_mark), sizeof (die->die_mark), ctx);
      return;
    }
  die->die_mark = ++(*mark);
  md5_process_bytes (&(die->die_tag), sizeof (die->die_tag), ctx);
  for (a = die->die_attr; a; a = a->dw_attr_next)
    attr_checksum (a, ctx, mark);
  for (c = die->die_child; c; c = c->die_sib)
    die_checksum (c, ctx, mark);
}
static int
same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
{
  return loc1->dw_loc_opc == loc2->dw_loc_opc
  && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
  && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
}
static int
same_dw_val_p (dw_val_node *v1, dw_val_node *v2, int *mark)
{
  dw_loc_descr_ref loc1, loc2;
  rtx r1, r2;
  if (v1->val_class != v2->val_class)
    return 0;
  switch (v1->val_class)
    {
    case dw_val_class_const:
      return v1->v.val_int == v2->v.val_int;
    case dw_val_class_unsigned_const:
      return v1->v.val_unsigned == v2->v.val_unsigned;
    case dw_val_class_long_long:
      return v1->v.val_long_long.hi == v2->v.val_long_long.hi
      && v1->v.val_long_long.low == v2->v.val_long_long.low;
    case dw_val_class_vec:
      if (v1->v.val_vec.length != v2->v.val_vec.length
   || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
 return 0;
      if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
    v1->v.val_vec.length * v1->v.val_vec.elt_size))
 return 0;
      return 1;
    case dw_val_class_flag:
      return v1->v.val_flag == v2->v.val_flag;
    case dw_val_class_str:
      return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
    case dw_val_class_addr:
      r1 = v1->v.val_addr;
      r2 = v2->v.val_addr;
      if (((enum rtx_code) (r1)->code) != ((enum rtx_code) (r2)->code))
 return 0;
      switch (((enum rtx_code) (r1)->code))
 {
 case SYMBOL_REF:
   return !strcmp ((((r1)->u.fld[0]).rtstr), (((r2)->u.fld[0]).rtstr));
 default:
   abort ();
 }
    case dw_val_class_offset:
      return v1->v.val_offset == v2->v.val_offset;
    case dw_val_class_loc:
      for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
    loc1 && loc2;
    loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
 if (!same_loc_p (loc1, loc2, mark))
   return 0;
      return !loc1 && !loc2;
    case dw_val_class_die_ref:
      return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
    case dw_val_class_fde_ref:
    case dw_val_class_lbl_id:
    case dw_val_class_lbl_offset:
      return 1;
    default:
      return 1;
    }
}
static int
same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
{
  if (at1->dw_attr != at2->dw_attr)
    return 0;
  if (at1->dw_attr == DW_AT_decl_file
      || at1->dw_attr == DW_AT_producer)
    return 1;
  return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
}
static int
same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
{
  dw_die_ref c1, c2;
  dw_attr_ref a1, a2;
  if (die1->die_mark)
    return die1->die_mark == die2->die_mark;
  die1->die_mark = die2->die_mark = ++(*mark);
  if (die1->die_tag != die2->die_tag)
    return 0;
  for (a1 = die1->die_attr, a2 = die2->die_attr;
       a1 && a2;
       a1 = a1->dw_attr_next, a2 = a2->dw_attr_next)
    if (!same_attr_p (a1, a2, mark))
      return 0;
  if (a1 || a2)
    return 0;
  for (c1 = die1->die_child, c2 = die2->die_child;
       c1 && c2;
       c1 = c1->die_sib, c2 = c2->die_sib)
    if (!same_die_p (c1, c2, mark))
      return 0;
  if (c1 || c2)
    return 0;
  return 1;
}
static int
same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
{
  int mark = 0;
  int ret = same_die_p (die1, die2, &mark);
  unmark_all_dies (die1);
  unmark_all_dies (die2);
  return ret;
}
static char *comdat_symbol_id;
static unsigned int comdat_symbol_number;
static void
compute_section_prefix (dw_die_ref unit_die)
{
  const char *die_name = get_AT_string (unit_die, DW_AT_name);
  const char *base = die_name ? lbasename (die_name) : "anonymous";
  char *name = C_alloca(strlen (base) + 64);
  char *p;
  int i, mark;
  unsigned char checksum[16];
  struct md5_ctx ctx;
  md5_init_ctx (&ctx);
  mark = 0;
  die_checksum (unit_die, &ctx, &mark);
  unmark_all_dies (unit_die);
  md5_finish_ctx (&ctx, checksum);
  sprintf (name, "%s.", base);
  clean_symbol_name (name);
  p = name + strlen (name);
  for (i = 0; i < 4; i++)
    {
      sprintf (p, "%.2x", checksum[i]);
      p += 2;
    }
  comdat_symbol_id = unit_die->die_symbol = xstrdup (name);
  comdat_symbol_number = 0;
}
static int
is_type_die (dw_die_ref die)
{
  switch (die->die_tag)
    {
    case DW_TAG_array_type:
    case DW_TAG_class_type:
    case DW_TAG_enumeration_type:
    case DW_TAG_pointer_type:
    case DW_TAG_reference_type:
    case DW_TAG_string_type:
    case DW_TAG_structure_type:
    case DW_TAG_subroutine_type:
    case DW_TAG_union_type:
    case DW_TAG_ptr_to_member_type:
    case DW_TAG_set_type:
    case DW_TAG_subrange_type:
    case DW_TAG_base_type:
    case DW_TAG_const_type:
    case DW_TAG_file_type:
    case DW_TAG_packed_type:
    case DW_TAG_volatile_type:
    case DW_TAG_typedef:
      return 1;
    default:
      return 0;
    }
}
static int
is_comdat_die (dw_die_ref c)
{
  if (c->die_tag == DW_TAG_base_type)
    return 0;
  if (c->die_tag == DW_TAG_pointer_type
      || c->die_tag == DW_TAG_reference_type
      || c->die_tag == DW_TAG_const_type
      || c->die_tag == DW_TAG_volatile_type)
    {
      dw_die_ref t = get_AT_ref (c, DW_AT_type);
      return t ? is_comdat_die (t) : 0;
    }
  return is_type_die (c);
}
static int
is_symbol_die (dw_die_ref c)
{
  return (is_type_die (c)
   || (get_AT (c, DW_AT_declaration)
       && !get_AT (c, DW_AT_specification)));
}
static char *
gen_internal_sym (const char *prefix)
{
  char buf[256];
  do { sprintf (buf, "*.%s%u", prefix, (unsigned) (label_num++)); } while (0);
  return xstrdup (buf);
}
static void
assign_symbol_names (dw_die_ref die)
{
  dw_die_ref c;
  if (is_symbol_die (die))
    {
      if (comdat_symbol_id)
 {
   char *p = C_alloca(strlen (comdat_symbol_id) + 64);
   sprintf (p, "%s.%s.%x", "DW",
     comdat_symbol_id, comdat_symbol_number++);
   die->die_symbol = xstrdup (p);
 }
      else
 die->die_symbol = gen_internal_sym ("LDIE");
    }
  for (c = die->die_child; c != ((void *)0); c = c->die_sib)
    assign_symbol_names (c);
}
struct cu_hash_table_entry
{
  dw_die_ref cu;
  unsigned min_comdat_num, max_comdat_num;
  struct cu_hash_table_entry *next;
};
static hashval_t
htab_cu_hash (const void *of)
{
  const struct cu_hash_table_entry *entry = of;
  return htab_hash_string (entry->cu->die_symbol);
}
static int
htab_cu_eq (const void *of1, const void *of2)
{
  const struct cu_hash_table_entry *entry1 = of1;
  const struct die_struct *entry2 = of2;
  return !strcmp (entry1->cu->die_symbol, entry2->die_symbol);
}
static void
htab_cu_del (void *what)
{
  struct cu_hash_table_entry *next, *entry = what;
  while (entry)
    {
      next = entry->next;
      free (entry);
      entry = next;
    }
}
static int
check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
{
  struct cu_hash_table_entry dummy;
  struct cu_hash_table_entry **slot, *entry, *last = &dummy;
  dummy.max_comdat_num = 0;
  slot = (struct cu_hash_table_entry **)
    htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
 INSERT);
  entry = *slot;
  for (; entry; last = entry, entry = entry->next)
    {
      if (same_die_p_wrap (cu, entry->cu))
 break;
    }
  if (entry)
    {
      *sym_num = entry->min_comdat_num;
      return 1;
    }
  entry = xcalloc (1, sizeof (struct cu_hash_table_entry));
  entry->cu = cu;
  entry->min_comdat_num = *sym_num = last->max_comdat_num;
  entry->next = *slot;
  *slot = entry;
  return 0;
}
static void
record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
{
  struct cu_hash_table_entry **slot, *entry;
  slot = (struct cu_hash_table_entry **)
    htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
 NO_INSERT);
  entry = *slot;
  entry->max_comdat_num = sym_num;
}
static void
break_out_includes (dw_die_ref die)
{
  dw_die_ref *ptr;
  dw_die_ref unit = ((void *)0);
  limbo_die_node *node, **pnode;
  htab_t cu_hash_table;
  for (ptr = &(die->die_child); *ptr;)
    {
      dw_die_ref c = *ptr;
      if (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
   || (unit && is_comdat_die (c)))
 {
   *ptr = c->die_sib;
   if (c->die_tag == DW_TAG_GNU_BINCL)
     {
       unit = push_new_compile_unit (unit, c);
       free_die (c);
     }
   else if (c->die_tag == DW_TAG_GNU_EINCL)
     {
       unit = pop_compile_unit (unit);
       free_die (c);
     }
   else
     add_child_die (unit, c);
 }
      else
 {
   ptr = &(c->die_sib);
   continue;
 }
    }
  assign_symbol_names (die);
  cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
  for (node = limbo_die_list, pnode = &limbo_die_list;
       node;
       node = node->next)
    {
      int is_dupl;
      compute_section_prefix (node->die);
      is_dupl = check_duplicate_cu (node->die, cu_hash_table,
   &comdat_symbol_number);
      assign_symbol_names (node->die);
      if (is_dupl)
 *pnode = node->next;
      else
 {
   pnode = &node->next;
   record_comdat_symbol_number (node->die, cu_hash_table,
  comdat_symbol_number);
 }
    }
  htab_delete (cu_hash_table);
}
static void
add_sibling_attributes (dw_die_ref die)
{
  dw_die_ref c;
  if (die->die_tag != DW_TAG_compile_unit
      && die->die_sib && die->die_child != ((void *)0))
    add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
  for (c = die->die_child; c != ((void *)0); c = c->die_sib)
    add_sibling_attributes (c);
}
static void
output_location_lists (dw_die_ref die)
{
  dw_die_ref c;
  dw_attr_ref d_attr;
  for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
    if (AT_class (d_attr) == dw_val_class_loc_list)
      output_loc_list (AT_loc_list (d_attr));
  for (c = die->die_child; c != ((void *)0); c = c->die_sib)
    output_location_lists (c);
}
static void
build_abbrev_table (dw_die_ref die)
{
  unsigned long abbrev_id;
  unsigned int n_alloc;
  dw_die_ref c;
  dw_attr_ref d_attr, a_attr;
  for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
    if (AT_class (d_attr) == dw_val_class_die_ref
 && AT_ref (d_attr)->die_mark == 0)
      {
 if (AT_ref (d_attr)->die_symbol == 0)
   abort ();
 set_AT_ref_external (d_attr, 1);
      }
  for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
    {
      dw_die_ref abbrev = abbrev_die_table[abbrev_id];
      if (abbrev->die_tag == die->die_tag)
 {
   if ((abbrev->die_child != ((void *)0)) == (die->die_child != ((void *)0)))
     {
       a_attr = abbrev->die_attr;
       d_attr = die->die_attr;
       while (a_attr != ((void *)0) && d_attr != ((void *)0))
  {
    if ((a_attr->dw_attr != d_attr->dw_attr)
        || (value_format (a_attr) != value_format (d_attr)))
      break;
    a_attr = a_attr->dw_attr_next;
    d_attr = d_attr->dw_attr_next;
  }
       if (a_attr == ((void *)0) && d_attr == ((void *)0))
  break;
     }
 }
    }
  if (abbrev_id >= abbrev_die_table_in_use)
    {
      if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
 {
   n_alloc = abbrev_die_table_allocated + 256;
   abbrev_die_table = ggc_realloc_stat (abbrev_die_table,sizeof (dw_die_ref) * n_alloc )
                                     ;
   memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
   (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
   abbrev_die_table_allocated = n_alloc;
 }
      ++abbrev_die_table_in_use;
      abbrev_die_table[abbrev_id] = die;
    }
  die->die_abbrev = abbrev_id;
  for (c = die->die_child; c != ((void *)0); c = c->die_sib)
    build_abbrev_table (c);
}
static int
constant_size (long unsigned int value1)
{
  int log;
  if (value1 == 0)
    log = 0;
  else
    log = floor_log2_wide ((unsigned long) (value1));
  log = log / 8;
  log = 1 << (floor_log2_wide ((unsigned long) (log)) + 1);
  return log;
}
static unsigned long
size_of_die (dw_die_ref die)
{
  unsigned long size = 0;
  dw_attr_ref a;
  size += size_of_uleb128 (die->die_abbrev);
  for (a = die->die_attr; a != ((void *)0); a = a->dw_attr_next)
    {
      switch (AT_class (a))
 {
 case dw_val_class_addr:
   size += ((8 * (0 ? 8 : 4)) / 8);
   break;
 case dw_val_class_offset:
   size += 4;
   break;
 case dw_val_class_loc:
   {
     unsigned long lsize = size_of_locs (AT_loc (a));
     size += constant_size (lsize);
     size += lsize;
   }
   break;
 case dw_val_class_loc_list:
   size += 4;
   break;
 case dw_val_class_range_list:
   size += 4;
   break;
 case dw_val_class_const:
   size += size_of_sleb128 (AT_int (a));
   break;
 case dw_val_class_unsigned_const:
   size += constant_size (AT_unsigned (a));
   break;
 case dw_val_class_long_long:
   size += 1 + 2*(8 * 4)/8;
   break;
 case dw_val_class_vec:
   size += 1 + (a->dw_attr_val.v.val_vec.length
         * a->dw_attr_val.v.val_vec.elt_size);
   break;
 case dw_val_class_flag:
   size += 1;
   break;
 case dw_val_class_die_ref:
   if (AT_ref_external (a))
     size += ((8 * (0 ? 8 : 4)) / 8);
   else
     size += 4;
   break;
 case dw_val_class_fde_ref:
   size += 4;
   break;
 case dw_val_class_lbl_id:
   size += ((8 * (0 ? 8 : 4)) / 8);
   break;
 case dw_val_class_lbl_offset:
   size += 4;
   break;
 case dw_val_class_str:
   if (AT_string_form (a) == DW_FORM_strp)
     size += 4;
   else
     size += strlen (a->dw_attr_val.v.val_str->str) + 1;
   break;
 default:
   abort ();
 }
    }
  return size;
}
static void
calc_die_sizes (dw_die_ref die)
{
  dw_die_ref c;
  die->die_offset = next_die_offset;
  next_die_offset += size_of_die (die);
  for (c = die->die_child; c != ((void *)0); c = c->die_sib)
    calc_die_sizes (c);
  if (die->die_child != ((void *)0))
    next_die_offset += 1;
}
static void
mark_dies (dw_die_ref die)
{
  dw_die_ref c;
  if (die->die_mark)
    abort ();
  die->die_mark = 1;
  for (c = die->die_child; c; c = c->die_sib)
    mark_dies (c);
}
static void
unmark_dies (dw_die_ref die)
{
  dw_die_ref c;
  if (!die->die_mark)
    abort ();
  die->die_mark = 0;
  for (c = die->die_child; c; c = c->die_sib)
    unmark_dies (c);
}
static void
unmark_all_dies (dw_die_ref die)
{
  dw_die_ref c;
  dw_attr_ref a;
  if (!die->die_mark)
    return;
  die->die_mark = 0;
  for (c = die->die_child; c; c = c->die_sib)
    unmark_all_dies (c);
  for (a = die->die_attr; a; a = a->dw_attr_next)
    if (AT_class (a) == dw_val_class_die_ref)
      unmark_all_dies (AT_ref (a));
}
static unsigned long
size_of_pubnames (void)
{
  unsigned long size;
  unsigned i;
  size = (2 * 4 + 2);
  for (i = 0; i < pubname_table_in_use; i++)
    {
      pubname_ref p = &pubname_table[i];
      size += 4 + strlen (p->name) + 1;
    }
  size += 4;
  return size;
}
static unsigned long
size_of_aranges (void)
{
  unsigned long size;
  size = ((((((4 == 4 ? 4 : 12) + 4 + 4) + (((8 * (0 ? 8 : 4)) / 8) * 2) - 1) / (((8 * (0 ? 8 : 4)) / 8) * 2)) * (((8 * (0 ? 8 : 4)) / 8) * 2)) - (4 == 4 ? 4 : 12));
  size += 2 * ((8 * (0 ? 8 : 4)) / 8);
  size += 2 * ((8 * (0 ? 8 : 4)) / 8) * arange_table_in_use;
  size += 2 * ((8 * (0 ? 8 : 4)) / 8);
  return size;
}
static enum dwarf_form
value_format (dw_attr_ref a)
{
  switch (a->dw_attr_val.val_class)
    {
    case dw_val_class_addr:
      return DW_FORM_addr;
    case dw_val_class_range_list:
    case dw_val_class_offset:
      if (4 == 4)
 return DW_FORM_data4;
      if (4 == 8)
 return DW_FORM_data8;
      abort ();
    case dw_val_class_loc_list:
      return DW_FORM_data4;
    case dw_val_class_loc:
      switch (constant_size (size_of_locs (AT_loc (a))))
 {
 case 1:
   return DW_FORM_block1;
 case 2:
   return DW_FORM_block2;
 default:
   abort ();
 }
    case dw_val_class_const:
      return DW_FORM_sdata;
    case dw_val_class_unsigned_const:
      switch (constant_size (AT_unsigned (a)))
 {
 case 1:
   return DW_FORM_data1;
 case 2:
   return DW_FORM_data2;
 case 4:
   return DW_FORM_data4;
 case 8:
   return DW_FORM_data8;
 default:
   abort ();
 }
    case dw_val_class_long_long:
      return DW_FORM_block1;
    case dw_val_class_vec:
      return DW_FORM_block1;
    case dw_val_class_flag:
      return DW_FORM_flag;
    case dw_val_class_die_ref:
      if (AT_ref_external (a))
 return DW_FORM_ref_addr;
      else
 return (4 == 8 ? DW_FORM_ref8 : DW_FORM_ref4);
    case dw_val_class_fde_ref:
      return (4 == 8 ? DW_FORM_data8 : DW_FORM_data4);
    case dw_val_class_lbl_id:
      return DW_FORM_addr;
    case dw_val_class_lbl_offset:
      return (4 == 8 ? DW_FORM_data8 : DW_FORM_data4);
    case dw_val_class_str:
      return AT_string_form (a);
    default:
      abort ();
    }
}
static void
output_value_format (dw_attr_ref a)
{
  enum dwarf_form form = value_format (a);
  dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
}
static void
output_abbrev_section (void)
{
  unsigned long abbrev_id;
  dw_attr_ref a_attr;
  for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
    {
      dw_die_ref abbrev = abbrev_die_table[abbrev_id];
      dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
      dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
       dwarf_tag_name (abbrev->die_tag));
      if (abbrev->die_child != ((void *)0))
 dw2_asm_output_data (1, 1, "DW_children_yes");
      else
 dw2_asm_output_data (1, 0, "DW_children_no");
      for (a_attr = abbrev->die_attr; a_attr != ((void *)0);
    a_attr = a_attr->dw_attr_next)
 {
   dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
           dwarf_attr_name (a_attr->dw_attr));
   output_value_format (a_attr);
 }
      dw2_asm_output_data (1, 0, ((void *)0));
      dw2_asm_output_data (1, 0, ((void *)0));
    }
  dw2_asm_output_data (1, 0, ((void *)0));
}
static void
output_die_symbol (dw_die_ref die)
{
  char *sym = die->die_symbol;
  if (sym == 0)
    return;
  if (strncmp (sym, "DW", sizeof ("DW") - 1) == 0)
    targetm.asm_out.globalize_label (asm_out_file, sym);
  do { assemble_name ((asm_out_file), (sym)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
}
static dw_loc_list_ref
new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
       const char *section, unsigned int gensym)
{
  dw_loc_list_ref retlist = ggc_alloc_cleared_stat (sizeof (dw_loc_list_node) );
  retlist->begin = begin;
  retlist->end = end;
  retlist->expr = expr;
  retlist->section = section;
  if (gensym)
    retlist->ll_symbol = gen_internal_sym ("LLST");
  return retlist;
}
static void
add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
      const char *begin, const char *end,
      const char *section)
{
  dw_loc_list_ref *d;
  for (d = list_head; (*d) != ((void *)0); d = &(*d)->dw_loc_next)
    ;
  *d = new_loc_list (descr, begin, end, section, 0);
}
static void
output_loc_list (dw_loc_list_ref list_head)
{
  dw_loc_list_ref curr = list_head;
  do { assemble_name ((asm_out_file), (list_head->ll_symbol)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  for (curr = list_head; curr != ((void *)0); curr = curr->dw_loc_next)
    {
      unsigned long size;
      if (separate_line_info_table_in_use == 0)
 {
   dw2_asm_output_delta (((8 * (0 ? 8 : 4)) / 8), curr->begin, curr->section,
    "Location list begin address (%s)",
    list_head->ll_symbol);
   dw2_asm_output_delta (((8 * (0 ? 8 : 4)) / 8), curr->end, curr->section,
    "Location list end address (%s)",
    list_head->ll_symbol);
 }
      else
 {
   dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), curr->begin,
          "Location list begin address (%s)",
          list_head->ll_symbol);
   dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), curr->end,
          "Location list end address (%s)",
          list_head->ll_symbol);
 }
      size = size_of_locs (curr->expr);
      if (size > 0xffff)
 abort ();
      dw2_asm_output_data (2, size, "%s", "Location expression size");
      output_loc_sequence (curr->expr);
    }
  dw2_asm_output_data (((8 * (0 ? 8 : 4)) / 8), 0,
         "Location list terminator begin (%s)",
         list_head->ll_symbol);
  dw2_asm_output_data (((8 * (0 ? 8 : 4)) / 8), 0,
         "Location list terminator end (%s)",
         list_head->ll_symbol);
}
static void
output_die (dw_die_ref die)
{
  dw_attr_ref a;
  dw_die_ref c;
  unsigned long size;
  if (die->die_symbol)
    output_die_symbol (die);
  dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
          die->die_offset, dwarf_tag_name (die->die_tag));
  for (a = die->die_attr; a != ((void *)0); a = a->dw_attr_next)
    {
      const char *name = dwarf_attr_name (a->dw_attr);
      switch (AT_class (a))
 {
 case dw_val_class_addr:
   dw2_asm_output_addr_rtx (((8 * (0 ? 8 : 4)) / 8), AT_addr (a), "%s", name);
   break;
 case dw_val_class_offset:
   dw2_asm_output_data (4, a->dw_attr_val.v.val_offset,
          "%s", name);
   break;
 case dw_val_class_range_list:
   {
     char *p = strchr (ranges_section_label, '\0');
     sprintf (p, "+0x%lx",
       a->dw_attr_val.v.val_offset);
     dw2_asm_output_offset (4, ranges_section_label,
       "%s", name);
     *p = '\0';
   }
   break;
 case dw_val_class_loc:
   size = size_of_locs (AT_loc (a));
   dw2_asm_output_data (constant_size (size), size, "%s", name);
   output_loc_sequence (AT_loc (a));
   break;
 case dw_val_class_const:
   dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
   break;
 case dw_val_class_unsigned_const:
   dw2_asm_output_data (constant_size (AT_unsigned (a)),
          AT_unsigned (a), "%s", name);
   break;
 case dw_val_class_long_long:
   {
     unsigned long first, second;
     dw2_asm_output_data (1,
     2 * (8 * 4) / 8,
     "%s", name);
     if (0)
       {
  first = a->dw_attr_val.v.val_long_long.hi;
  second = a->dw_attr_val.v.val_long_long.low;
       }
     else
       {
  first = a->dw_attr_val.v.val_long_long.low;
  second = a->dw_attr_val.v.val_long_long.hi;
       }
     dw2_asm_output_data ((8 * 4) / 8,
     first, "long long constant");
     dw2_asm_output_data ((8 * 4) / 8,
     second, ((void *)0));
   }
   break;
 case dw_val_class_vec:
   {
     unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
     unsigned int len = a->dw_attr_val.v.val_vec.length;
     unsigned int i;
     unsigned char *p;
     dw2_asm_output_data (1, len * elt_size, "%s", name);
     if (elt_size > sizeof (long))
       {
  elt_size /= 2;
  len *= 2;
       }
     for (i = 0, p = a->dw_attr_val.v.val_vec.array;
   i < len;
   i++, p += elt_size)
       dw2_asm_output_data (elt_size, extract_int (p, elt_size),
       "fp or vector constant word %u", i);
     break;
   }
 case dw_val_class_flag:
   dw2_asm_output_data (1, AT_flag (a), "%s", name);
   break;
 case dw_val_class_loc_list:
   {
     char *sym = AT_loc_list (a)->ll_symbol;
     if (sym == 0)
       abort ();
     dw2_asm_output_offset (4, sym, "%s", name);
   }
   break;
 case dw_val_class_die_ref:
   if (AT_ref_external (a))
     {
       char *sym = AT_ref (a)->die_symbol;
       if (sym == 0)
  abort ();
       dw2_asm_output_offset (((8 * (0 ? 8 : 4)) / 8), sym, "%s", name);
     }
   else if (AT_ref (a)->die_offset == 0)
     abort ();
   else
     dw2_asm_output_data (4, AT_ref (a)->die_offset,
     "%s", name);
   break;
 case dw_val_class_fde_ref:
   {
     char l1[20];
     do { sprintf (l1, "*.%s%u", "LSFDE", (unsigned) (a->dw_attr_val.v.val_fde_index * 2)); } while (0)
                                         ;
     dw2_asm_output_offset (4, l1, "%s", name);
   }
   break;
 case dw_val_class_lbl_id:
   dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), AT_lbl (a), "%s", name);
   break;
 case dw_val_class_lbl_offset:
   dw2_asm_output_offset (4, AT_lbl (a), "%s", name);
   break;
 case dw_val_class_str:
   if (AT_string_form (a) == DW_FORM_strp)
     dw2_asm_output_offset (4,
       a->dw_attr_val.v.val_str->label,
       "%s: \"%s\"", name, AT_string (a));
   else
     dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
   break;
 default:
   abort ();
 }
    }
  for (c = die->die_child; c != ((void *)0); c = c->die_sib)
    output_die (c);
  if (die->die_child != ((void *)0))
    dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
    die->die_offset);
}
static void
output_compilation_unit_header (void)
{
  if ((4 == 4 ? 4 : 12) - 4 == 4)
    dw2_asm_output_data (4, 0xffffffff,
      "Initial length escape value indicating 64-bit DWARF extension");
  dw2_asm_output_data (4,
                       next_die_offset - (4 == 4 ? 4 : 12),
         "Length of Compilation Unit Info");
  dw2_asm_output_data (2, 2, "DWARF version number");
  dw2_asm_output_offset (4, abbrev_section_label,
    "Offset Into Abbrev. Section");
  dw2_asm_output_data (1, ((8 * (0 ? 8 : 4)) / 8), "Pointer Size (in bytes)");
}
static void
output_comp_unit (dw_die_ref die, int output_if_empty)
{
  const char *secname;
  char *oldsym, *tmp;
  if (!output_if_empty && die->die_child == ((void *)0))
    return;
  mark_dies (die);
  build_abbrev_table (die);
  next_die_offset = ((4 == 4 ? 4 : 12) + 4 + 3);
  calc_die_sizes (die);
  oldsym = die->die_symbol;
  if (oldsym)
    {
      tmp = C_alloca(strlen (oldsym) + 24);
      sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
      secname = tmp;
      die->die_symbol = ((void *)0);
    }
  else
    secname = (const char *) ".debug_info";
  named_section_flags (secname, 0x00400);
  output_compilation_unit_header ();
  output_die (die);
  if (oldsym)
    {
      unmark_dies (die);
      die->die_symbol = oldsym;
    }
}
static const char *
dwarf2_name (tree decl, int scope)
{
  return lang_hooks.decl_printable_name (decl, scope ? 1 : 0);
}
static void
add_pubname (tree decl, dw_die_ref die)
{
  pubname_ref p;
  if (! ((decl)->common.public_flag))
    return;
  if (pubname_table_in_use == pubname_table_allocated)
    {
      pubname_table_allocated += 64;
      pubname_table
 = ggc_realloc_stat (pubname_table,(pubname_table_allocated * sizeof (pubname_entry)) )
                                                            ;
      memset (pubname_table + pubname_table_in_use, 0,
       64 * sizeof (pubname_entry));
    }
  p = &pubname_table[pubname_table_in_use++];
  p->die = die;
  p->name = xstrdup (dwarf2_name (decl, 1));
}
static void
output_pubnames (void)
{
  unsigned i;
  unsigned long pubnames_length = size_of_pubnames ();
  if ((4 == 4 ? 4 : 12) - 4 == 4)
    dw2_asm_output_data (4, 0xffffffff,
      "Initial length escape value indicating 64-bit DWARF extension");
  dw2_asm_output_data (4, pubnames_length,
         "Length of Public Names Info");
  dw2_asm_output_data (2, 2, "DWARF Version");
  dw2_asm_output_offset (4, debug_info_section_label,
    "Offset of Compilation Unit Info");
  dw2_asm_output_data (4, next_die_offset,
         "Compilation Unit Length");
  for (i = 0; i < pubname_table_in_use; i++)
    {
      pubname_ref pub = &pubname_table[i];
      if (pub->die->die_mark == 0)
 abort ();
      dw2_asm_output_data (4, pub->die->die_offset,
      "DIE offset");
      dw2_asm_output_nstring (pub->name, -1, "external name");
    }
  dw2_asm_output_data (4, 0, ((void *)0));
}
static void
add_arange (tree decl, dw_die_ref die)
{
  if (! ((decl)->decl.section_name))
    return;
  if (arange_table_in_use == arange_table_allocated)
    {
      arange_table_allocated += 64;
      arange_table = ggc_realloc_stat (arange_table,(arange_table_allocated * sizeof (dw_die_ref)) )
                              ;
      memset (arange_table + arange_table_in_use, 0,
       64 * sizeof (dw_die_ref));
    }
  arange_table[arange_table_in_use++] = die;
}
static void
output_aranges (void)
{
  unsigned i;
  unsigned long aranges_length = size_of_aranges ();
  if ((4 == 4 ? 4 : 12) - 4 == 4)
    dw2_asm_output_data (4, 0xffffffff,
      "Initial length escape value indicating 64-bit DWARF extension");
  dw2_asm_output_data (4, aranges_length,
         "Length of Address Ranges Info");
  dw2_asm_output_data (2, 2, "DWARF Version");
  dw2_asm_output_offset (4, debug_info_section_label,
    "Offset of Compilation Unit Info");
  dw2_asm_output_data (1, ((8 * (0 ? 8 : 4)) / 8), "Size of Address");
  dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
  if (((((((4 == 4 ? 4 : 12) + 4 + 4) + (((8 * (0 ? 8 : 4)) / 8) * 2) - 1) / (((8 * (0 ? 8 : 4)) / 8) * 2)) * (((8 * (0 ? 8 : 4)) / 8) * 2)) - ((4 == 4 ? 4 : 12) + 4 + 4)))
    {
      dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
      2 * ((8 * (0 ? 8 : 4)) / 8));
      for (i = 2; i < (unsigned) ((((((4 == 4 ? 4 : 12) + 4 + 4) + (((8 * (0 ? 8 : 4)) / 8) * 2) - 1) / (((8 * (0 ? 8 : 4)) / 8) * 2)) * (((8 * (0 ? 8 : 4)) / 8) * 2)) - ((4 == 4 ? 4 : 12) + 4 + 4)); i += 2)
 dw2_asm_output_data (2, 0, ((void *)0));
    }
  dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), text_section_label, "Address");
  dw2_asm_output_delta (((8 * (0 ? 8 : 4)) / 8), text_end_label,
   text_section_label, "Length");
  for (i = 0; i < arange_table_in_use; i++)
    {
      dw_die_ref die = arange_table[i];
      if (die->die_mark == 0)
 abort ();
      if (die->die_tag == DW_TAG_subprogram)
 {
   dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), get_AT_low_pc (die),
          "Address");
   dw2_asm_output_delta (((8 * (0 ? 8 : 4)) / 8), get_AT_hi_pc (die),
    get_AT_low_pc (die), "Length");
 }
      else
 {
   dw_attr_ref a = get_AT (die, DW_AT_location);
   dw_loc_descr_ref loc;
   if (! a || AT_class (a) != dw_val_class_loc)
     abort ();
   loc = AT_loc (a);
   if (loc->dw_loc_opc != DW_OP_addr)
     abort ();
   dw2_asm_output_addr_rtx (((8 * (0 ? 8 : 4)) / 8),
       loc->dw_loc_oprnd1.v.val_addr, "Address");
   dw2_asm_output_data (((8 * (0 ? 8 : 4)) / 8),
          get_AT_unsigned (die, DW_AT_byte_size),
          "Length");
 }
    }
  dw2_asm_output_data (((8 * (0 ? 8 : 4)) / 8), 0, ((void *)0));
  dw2_asm_output_data (((8 * (0 ? 8 : 4)) / 8), 0, ((void *)0));
}
static unsigned int
add_ranges (tree block)
{
  unsigned int in_use = ranges_table_in_use;
  if (in_use == ranges_table_allocated)
    {
      ranges_table_allocated += 64;
      ranges_table
 = ggc_realloc_stat (ranges_table,(ranges_table_allocated * sizeof (struct dw_ranges_struct)) )
                                              ;
      memset (ranges_table + ranges_table_in_use, 0,
       64 * sizeof (struct dw_ranges_struct));
    }
  ranges_table[in_use].block_num = (block ? ((block)->block.block_num) : 0);
  ranges_table_in_use = in_use + 1;
  return in_use * 2 * ((8 * (0 ? 8 : 4)) / 8);
}
static void
output_ranges (void)
{
  unsigned i;
  static const char *const start_fmt = "Offset 0x%x";
  const char *fmt = start_fmt;
  for (i = 0; i < ranges_table_in_use; i++)
    {
      int block_num = ranges_table[i].block_num;
      if (block_num)
 {
   char blabel[30];
   char elabel[30];
   do { sprintf (blabel, "*.%s%u", "LBB", (unsigned) (block_num)); } while (0);
   do { sprintf (elabel, "*.%s%u", "LBE", (unsigned) (block_num)); } while (0);
   if (separate_line_info_table_in_use == 0)
     {
       dw2_asm_output_delta (((8 * (0 ? 8 : 4)) / 8), blabel,
        text_section_label,
        fmt, i * 2 * ((8 * (0 ? 8 : 4)) / 8));
       dw2_asm_output_delta (((8 * (0 ? 8 : 4)) / 8), elabel,
        text_section_label, ((void *)0));
     }
   else
     {
       dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), blabel,
       fmt, i * 2 * ((8 * (0 ? 8 : 4)) / 8));
       dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), elabel, ((void *)0));
     }
   fmt = ((void *)0);
 }
      else
 {
   dw2_asm_output_data (((8 * (0 ? 8 : 4)) / 8), 0, ((void *)0));
   dw2_asm_output_data (((8 * (0 ? 8 : 4)) / 8), 0, ((void *)0));
   fmt = start_fmt;
 }
    }
}
struct file_info
{
  char *path;
  char *fname;
  int length;
  int file_idx;
  int dir_idx;
};
struct dir_info
{
  char *path;
  int length;
  int prefix;
  int count;
  int dir_idx;
  int used;
};
static int
file_info_cmp (const void *p1, const void *p2)
{
  const struct file_info *s1 = p1;
  const struct file_info *s2 = p2;
  unsigned char *cp1;
  unsigned char *cp2;
  if ((s1->path == s1->fname || s2->path == s2->fname))
    return (s2->path == s2->fname) - (s1->path == s1->fname);
  cp1 = (unsigned char *) s1->path;
  cp2 = (unsigned char *) s2->path;
  while (1)
    {
      ++cp1;
      ++cp2;
      if ((cp1 == (unsigned char *) s1->fname)
   || (cp2 == (unsigned char *) s2->fname))
 return ((cp2 == (unsigned char *) s2->fname)
  - (cp1 == (unsigned char *) s1->fname));
      else if (*cp1 != *cp2)
 return *cp1 - *cp2;
    }
}
static void
output_file_names (void)
{
  struct file_info *files;
  struct dir_info *dirs;
  int *saved;
  int *savehere;
  int *backmap;
  size_t ndirs;
  int idx_offset;
  size_t i;
  int idx;
  if (((file_table)->elements_used) <= 1)
    {
      dw2_asm_output_data (1, 0, "End directory table");
      dw2_asm_output_data (1, 0, "End file name table");
      return;
    }
  files = C_alloca(((file_table)->elements_used) * sizeof (struct file_info));
  dirs = C_alloca(((file_table)->elements_used) * sizeof (struct dir_info));
  for (i = 1; i < ((file_table)->elements_used); i++)
    {
      char *f;
      f = ((file_table)->data.cptr[i]);
      while (f[0] == '.' && f[1] == '/')
 f += 2;
      files[i].path = f;
      files[i].length = strlen (f);
      files[i].file_idx = i;
      f = strrchr (f, '/');
      files[i].fname = f == ((void *)0) ? files[i].path : f + 1;
    }
  qsort (files + 1, ((file_table)->elements_used) - 1,
  sizeof (files[0]), file_info_cmp);
  dirs[0].path = files[1].path;
  dirs[0].length = files[1].fname - files[1].path;
  dirs[0].prefix = -1;
  dirs[0].count = 1;
  dirs[0].dir_idx = 0;
  dirs[0].used = 0;
  files[1].dir_idx = 0;
  ndirs = 1;
  for (i = 2; i < ((file_table)->elements_used); i++)
    if (files[i].fname - files[i].path == dirs[ndirs - 1].length
 && memcmp (dirs[ndirs - 1].path, files[i].path,
     dirs[ndirs - 1].length) == 0)
      {
 files[i].dir_idx = ndirs - 1;
 ++dirs[ndirs - 1].count;
      }
    else
      {
 size_t j;
 dirs[ndirs].path = files[i].path;
 dirs[ndirs].length = files[i].fname - files[i].path;
 dirs[ndirs].count = 1;
 dirs[ndirs].dir_idx = ndirs;
 dirs[ndirs].used = 0;
 files[i].dir_idx = ndirs;
 dirs[ndirs].prefix = -1;
 for (j = 0; j < ndirs; j++)
   if (dirs[j].length < dirs[ndirs].length
       && dirs[j].length > 1
       && (dirs[ndirs].prefix == -1
    || dirs[j].length > dirs[dirs[ndirs].prefix].length)
       && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
     dirs[ndirs].prefix = j;
 ++ndirs;
      }
  saved = C_alloca(ndirs * sizeof (int));
  savehere = C_alloca(ndirs * sizeof (int));
  memset (saved, '\0', ndirs * sizeof (saved[0]));
  for (i = 0; i < ndirs; i++)
    {
      size_t j;
      int total;
      savehere[i] = dirs[i].length;
      total = (savehere[i] - saved[i]) * dirs[i].count;
      for (j = i + 1; j < ndirs; j++)
 {
   savehere[j] = 0;
   if (saved[j] < dirs[i].length)
     {
       int k;
       k = dirs[j].prefix;
       while (k != -1 && k != (int) i)
  k = dirs[k].prefix;
       if (k == (int) i)
  {
    savehere[j] = dirs[i].length;
    total += (savehere[j] - saved[j]) * dirs[j].count;
  }
     }
 }
      if (total > dirs[i].length + 1)
 {
   for (j = i; j < ndirs; j++)
     if (savehere[j] > 0)
       {
  saved[j] = savehere[j];
  dirs[j].dir_idx = i;
       }
 }
    }
  backmap = C_alloca(((file_table)->elements_used) * sizeof (int));
  for (i = 1; i < ((file_table)->elements_used); i++)
    {
      backmap[files[i].file_idx] = i;
      dirs[dirs[files[i].dir_idx].dir_idx].used = 1;
    }
  idx = 1;
  idx_offset = dirs[0].length > 0 ? 1 : 0;
  for (i = 1 - idx_offset; i < ndirs; i++)
    if (dirs[i].used != 0)
      {
 dirs[i].used = idx++;
 dw2_asm_output_nstring (dirs[i].path, dirs[i].length - 1,
    "Directory Entry: 0x%x", dirs[i].used);
      }
  dw2_asm_output_data (1, 0, "End directory table");
  if (idx_offset == 0)
    dirs[0].used = 0;
  for (i = 1; i < ((file_table)->elements_used); i++)
    {
      int file_idx = backmap[i];
      int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
      dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
         "File Entry: 0x%lx", (unsigned long) i);
      dw2_asm_output_data_uleb128 (dirs[dir_idx].used, ((void *)0));
      dw2_asm_output_data_uleb128 (0, ((void *)0));
      dw2_asm_output_data_uleb128 (0, ((void *)0));
    }
  dw2_asm_output_data (1, 0, "End file name table");
}
static void
output_line_info (void)
{
  char l1[20], l2[20], p1[20], p2[20];
  char line_label[30];
  char prev_line_label[30];
  unsigned opc;
  unsigned n_op_args;
  unsigned long lt_index;
  unsigned long current_line;
  long line_offset;
  long line_delta;
  unsigned long current_file;
  unsigned long function;
  do { sprintf (l1, "*.%s%u", "LSLT", (unsigned) (0)); } while (0);
  do { sprintf (l2, "*.%s%u", "LELT", (unsigned) (0)); } while (0);
  do { sprintf (p1, "*.%s%u", "LASLTP", (unsigned) (0)); } while (0);
  do { sprintf (p2, "*.%s%u", "LELTP", (unsigned) (0)); } while (0);
  if ((4 == 4 ? 4 : 12) - 4 == 4)
    dw2_asm_output_data (4, 0xffffffff,
      "Initial length escape value indicating 64-bit DWARF extension");
  dw2_asm_output_delta (4, l2, l1,
   "Length of Source Line Info");
  do { assemble_name ((asm_out_file), (l1)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  dw2_asm_output_data (2, 2, "DWARF Version");
  dw2_asm_output_delta (4, p2, p1, "Prolog Length");
  do { assemble_name ((asm_out_file), (p1)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  dw2_asm_output_data (1, 1,
         "Minimum Instruction Length");
  dw2_asm_output_data (1, 1,
         "Default is_stmt_start flag");
  dw2_asm_output_data (1, -10,
         "Line Base Value (Special Opcodes)");
  dw2_asm_output_data (1, (254-10 +1),
         "Line Range Value (Special Opcodes)");
  dw2_asm_output_data (1, 10,
         "Special Opcode Base");
  for (opc = 1; opc < 10; opc++)
    {
      switch (opc)
 {
 case DW_LNS_advance_pc:
 case DW_LNS_advance_line:
 case DW_LNS_set_file:
 case DW_LNS_set_column:
 case DW_LNS_fixed_advance_pc:
   n_op_args = 1;
   break;
 default:
   n_op_args = 0;
   break;
 }
      dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
      opc, n_op_args);
    }
  output_file_names ();
  do { assemble_name ((asm_out_file), (p2)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  current_file = 1;
  current_line = 1;
  strcpy (prev_line_label, text_section_label);
  for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
    {
      dw_line_info_ref line_info = &line_info_table[lt_index];
      do { sprintf (line_label, "*.%s%u", "LM", (unsigned) (lt_index)); } while (0);
      if (0)
 {
   dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
          "DW_LNS_fixed_advance_pc");
   dw2_asm_output_delta (2, line_label, prev_line_label, ((void *)0));
 }
      else
 {
   dw2_asm_output_data (1, 0, "DW_LNE_set_address");
   dw2_asm_output_data_uleb128 (1 + ((8 * (0 ? 8 : 4)) / 8), ((void *)0));
   dw2_asm_output_data (1, DW_LNE_set_address, ((void *)0));
   dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), line_label, ((void *)0));
 }
      strcpy (prev_line_label, line_label);
      if (line_info->dw_file_num != current_file)
 {
   current_file = line_info->dw_file_num;
   dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
   dw2_asm_output_data_uleb128 (current_file, "(\"%s\")",
           ((file_table)->data.cptr[current_file])
                    );
 }
      if (line_info->dw_line_num != current_line)
 {
   line_offset = line_info->dw_line_num - current_line;
   line_delta = line_offset - -10;
   current_line = line_info->dw_line_num;
   if (line_delta >= 0 && line_delta < ((254-10 +1) - 1))
     dw2_asm_output_data (1, 10 + line_delta,
     "line %lu", current_line);
   else
     {
       dw2_asm_output_data (1, DW_LNS_advance_line,
       "advance to line %lu", current_line);
       dw2_asm_output_data_sleb128 (line_offset, ((void *)0));
       dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
     }
 }
      else
 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
    }
  if (0)
    {
      dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
      "DW_LNS_fixed_advance_pc");
      dw2_asm_output_delta (2, text_end_label, prev_line_label, ((void *)0));
    }
  else
    {
      dw2_asm_output_data (1, 0, "DW_LNE_set_address");
      dw2_asm_output_data_uleb128 (1 + ((8 * (0 ? 8 : 4)) / 8), ((void *)0));
      dw2_asm_output_data (1, DW_LNE_set_address, ((void *)0));
      dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), text_end_label, ((void *)0));
    }
  dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
  dw2_asm_output_data_uleb128 (1, ((void *)0));
  dw2_asm_output_data (1, DW_LNE_end_sequence, ((void *)0));
  function = 0;
  current_file = 1;
  current_line = 1;
  for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
    {
      dw_separate_line_info_ref line_info
 = &separate_line_info_table[lt_index];
      do { sprintf (line_label, "*.%s%u", "LSM", (unsigned) (lt_index)); } while (0)
                ;
      if (function != line_info->function)
 {
   function = line_info->function;
   dw2_asm_output_data (1, 0, "DW_LNE_set_address");
   dw2_asm_output_data_uleb128 (1 + ((8 * (0 ? 8 : 4)) / 8), ((void *)0));
   dw2_asm_output_data (1, DW_LNE_set_address, ((void *)0));
   dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), line_label, ((void *)0));
 }
      else
 {
   if (0)
     {
       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
       "DW_LNS_fixed_advance_pc");
       dw2_asm_output_delta (2, line_label, prev_line_label, ((void *)0));
     }
   else
     {
       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
       dw2_asm_output_data_uleb128 (1 + ((8 * (0 ? 8 : 4)) / 8), ((void *)0));
       dw2_asm_output_data (1, DW_LNE_set_address, ((void *)0));
       dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), line_label, ((void *)0));
     }
 }
      strcpy (prev_line_label, line_label);
      if (line_info->dw_file_num != current_file)
 {
   current_file = line_info->dw_file_num;
   dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
   dw2_asm_output_data_uleb128 (current_file, "(\"%s\")",
           ((file_table)->data.cptr[current_file])
                    );
 }
      if (line_info->dw_line_num != current_line)
 {
   line_offset = line_info->dw_line_num - current_line;
   line_delta = line_offset - -10;
   current_line = line_info->dw_line_num;
   if (line_delta >= 0 && line_delta < ((254-10 +1) - 1))
     dw2_asm_output_data (1, 10 + line_delta,
     "line %lu", current_line);
   else
     {
       dw2_asm_output_data (1, DW_LNS_advance_line,
       "advance to line %lu", current_line);
       dw2_asm_output_data_sleb128 (line_offset, ((void *)0));
       dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
     }
 }
      else
 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
      lt_index++;
      if (lt_index == separate_line_info_table_in_use
   || separate_line_info_table[lt_index].function != function)
 {
   current_file = 1;
   current_line = 1;
   do { sprintf (line_label, "*.%s%u", "LFE", (unsigned) (function)); } while (0);
   if (0)
     {
       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
       "DW_LNS_fixed_advance_pc");
       dw2_asm_output_delta (2, line_label, prev_line_label, ((void *)0));
     }
   else
     {
       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
       dw2_asm_output_data_uleb128 (1 + ((8 * (0 ? 8 : 4)) / 8), ((void *)0));
       dw2_asm_output_data (1, DW_LNE_set_address, ((void *)0));
       dw2_asm_output_addr (((8 * (0 ? 8 : 4)) / 8), line_label, ((void *)0));
     }
   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
   dw2_asm_output_data_uleb128 (1, ((void *)0));
   dw2_asm_output_data (1, DW_LNE_end_sequence, ((void *)0));
 }
    }
  do { assemble_name ((asm_out_file), (l2)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
}
static dw_die_ref
base_type_die (tree type)
{
  dw_die_ref base_type_result;
  const char *type_name;
  enum dwarf_type encoding;
  tree name = ((type)->type.name);
  if (((enum tree_code) (type)->common.code) == ERROR_MARK || ((enum tree_code) (type)->common.code) == VOID_TYPE)
    return 0;
  if (name)
    {
      if (((enum tree_code) (name)->common.code) == TYPE_DECL)
 name = ((name)->decl.name);
      type_name = ((const char *) (name)->identifier.id.str);
    }
  else
    type_name = "__unknown__";
  switch (((enum tree_code) (type)->common.code))
    {
    case INTEGER_TYPE:
      if (! (((type)->type.precision) == 8
      && (type == integer_types[itk_char]
   || ! strcmp (type_name, "signed char")
   || ! strcmp (type_name, "unsigned char"))))
 {
   if (((type)->common.unsigned_flag))
     encoding = DW_ATE_unsigned;
   else
     encoding = DW_ATE_signed;
   break;
 }
    case CHAR_TYPE:
      if (((type)->common.unsigned_flag))
 encoding = DW_ATE_unsigned_char;
      else
 encoding = DW_ATE_signed_char;
      break;
    case REAL_TYPE:
      encoding = DW_ATE_float;
      break;
    case COMPLEX_TYPE:
      if (((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)
 encoding = DW_ATE_complex_float;
      else
 encoding = 0x80;
      break;
    case BOOLEAN_TYPE:
      encoding = DW_ATE_boolean;
      break;
    default:
      abort ();
    }
  base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
  if (demangle_name_func)
    type_name = (*demangle_name_func) (type_name);
  add_AT_string (base_type_result, DW_AT_name, type_name);
  add_AT_unsigned (base_type_result, DW_AT_byte_size,
     int_size_in_bytes (type));
  add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
  return base_type_result;
}
static tree
root_type (tree type)
{
  if (((enum tree_code) (type)->common.code) == ERROR_MARK)
    return global_trees[TI_ERROR_MARK];
  switch (((enum tree_code) (type)->common.code))
    {
    case ERROR_MARK:
      return global_trees[TI_ERROR_MARK];
    case POINTER_TYPE:
    case REFERENCE_TYPE:
      return type_main_variant (root_type (((type)->common.type)));
    default:
      return type_main_variant (type);
    }
}
static int
is_base_type (tree type)
{
  switch (((enum tree_code) (type)->common.code))
    {
    case ERROR_MARK:
    case VOID_TYPE:
    case INTEGER_TYPE:
    case REAL_TYPE:
    case COMPLEX_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
      return 1;
    case SET_TYPE:
    case ARRAY_TYPE:
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
    case ENUMERAL_TYPE:
    case FUNCTION_TYPE:
    case METHOD_TYPE:
    case POINTER_TYPE:
    case REFERENCE_TYPE:
    case FILE_TYPE:
    case OFFSET_TYPE:
    case LANG_TYPE:
    case VECTOR_TYPE:
      return 0;
    default:
      abort ();
    }
  return 0;
}
static unsigned long
simple_type_size_in_bits (tree type)
{
  if (((enum tree_code) (type)->common.code) == ERROR_MARK)
    return (8 * (0 ? 8 : 4));
  else if (((type)->type.size) == (tree) ((void *)0))
    return 0;
  else if (host_integerp (((type)->type.size), 1))
    return tree_low_cst (((type)->type.size), 1);
  else
    return ((type)->type.align);
}
static unsigned char
is_subrange_type (tree type)
{
  tree subtype = ((type)->common.type);
  if (((enum tree_code) (type)->common.code) != INTEGER_TYPE
      || subtype == (tree) ((void *)0))
    return 0;
  if (((enum tree_code) (subtype)->common.code) != INTEGER_TYPE
      && ((enum tree_code) (subtype)->common.code) != ENUMERAL_TYPE)
    return 0;
  if (((enum tree_code) (type)->common.code) == ((enum tree_code) (subtype)->common.code)
      && int_size_in_bytes (type) == int_size_in_bytes (subtype)
      && ((type)->type.minval) != ((void *)0)
      && ((subtype)->type.minval) != ((void *)0)
      && tree_int_cst_equal (((type)->type.minval), ((subtype)->type.minval))
      && ((type)->type.maxval) != ((void *)0)
      && ((subtype)->type.maxval) != ((void *)0)
      && tree_int_cst_equal (((type)->type.maxval), ((subtype)->type.maxval)))
    {
      tree type_name = ((type)->type.name);
      tree subtype_name = ((subtype)->type.name);
      if (type_name != ((void *)0) && ((enum tree_code) (type_name)->common.code) == TYPE_DECL)
        type_name = ((type_name)->decl.name);
      if (subtype_name != ((void *)0) && ((enum tree_code) (subtype_name)->common.code) == TYPE_DECL)
        subtype_name = ((subtype_name)->decl.name);
      if (type_name == subtype_name)
        return 0;
    }
  return 1;
}
static dw_die_ref
subrange_type_die (tree type, dw_die_ref context_die)
{
  dw_die_ref subtype_die;
  dw_die_ref subrange_die;
  tree name = ((type)->type.name);
  const long size_in_bytes = int_size_in_bytes (type);
  tree subtype = ((type)->common.type);
  if (context_die == ((void *)0))
    context_die = comp_unit_die;
  if (((enum tree_code) (subtype)->common.code) == ENUMERAL_TYPE)
    subtype_die = gen_enumeration_type_die (subtype, context_die);
  else
    subtype_die = base_type_die (subtype);
  subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
  if (name != ((void *)0))
    {
      if (((enum tree_code) (name)->common.code) == TYPE_DECL)
        name = ((name)->decl.name);
      add_name_attribute (subrange_die, ((const char *) (name)->identifier.id.str));
    }
  if (int_size_in_bytes (subtype) != size_in_bytes)
    {
      add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
    }
  if (((type)->type.minval) != ((void *)0))
    add_bound_info (subrange_die, DW_AT_lower_bound,
                    ((type)->type.minval));
  if (((type)->type.maxval) != ((void *)0))
    add_bound_info (subrange_die, DW_AT_upper_bound,
                    ((type)->type.maxval));
  add_AT_die_ref (subrange_die, DW_AT_type, subtype_die);
  return subrange_die;
}
static dw_die_ref
modified_type_die (tree type, int is_const_type, int is_volatile_type,
     dw_die_ref context_die)
{
  enum tree_code code = ((enum tree_code) (type)->common.code);
  dw_die_ref mod_type_die = ((void *)0);
  dw_die_ref sub_die = ((void *)0);
  tree item_type = ((void *)0);
  if (code != ERROR_MARK)
    {
      tree qualified_type;
      qualified_type
 = get_qualified_type (type,
         ((is_const_type ? 0x1 : 0)
          | (is_volatile_type
      ? 0x2 : 0)));
      if (qualified_type)
 {
   mod_type_die = lookup_type_die (qualified_type);
   if (mod_type_die)
     return mod_type_die;
 }
      if (qualified_type && ((qualified_type)->type.name)
   && ((enum tree_code) (((qualified_type)->type.name))->common.code) == TYPE_DECL
   && ((((qualified_type)->type.name))->decl.result))
 {
   tree type_name = ((qualified_type)->type.name);
   tree dtype = ((type_name)->common.type);
   if (qualified_type == dtype)
     {
       gen_type_die (qualified_type, context_die);
       mod_type_die = lookup_type_die (qualified_type);
     }
   else if (is_const_type < ((dtype)->common.readonly_flag)
     || is_volatile_type < ((dtype)->common.volatile_flag))
     mod_type_die
       = modified_type_die (((type_name)->decl.result),
       is_const_type, is_volatile_type,
       context_die);
 }
      if (mod_type_die)
 ;
      else if (is_const_type)
 {
   mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
   sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
 }
      else if (is_volatile_type)
 {
   mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
   sub_die = modified_type_die (type, 0, 0, context_die);
 }
      else if (code == POINTER_TYPE)
 {
   mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
   add_AT_unsigned (mod_type_die, DW_AT_byte_size,
      simple_type_size_in_bits (type) / 8);
   item_type = ((type)->common.type);
 }
      else if (code == REFERENCE_TYPE)
 {
   mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
   add_AT_unsigned (mod_type_die, DW_AT_byte_size,
      simple_type_size_in_bits (type) / 8);
   item_type = ((type)->common.type);
 }
      else if (is_subrange_type (type))
        mod_type_die = subrange_type_die (type, context_die);
      else if (is_base_type (type))
 mod_type_die = base_type_die (type);
      else
 {
   gen_type_die (type, context_die);
   if (((enum tree_code) (type)->common.code) != VECTOR_TYPE)
     mod_type_die = lookup_type_die (type_main_variant (type));
   else
     mod_type_die = lookup_type_die (type);
   if (mod_type_die == ((void *)0))
     abort ();
 }
      type = qualified_type;
    }
  if (type)
    equate_type_number_to_die (type, mod_type_die);
  if (item_type)
    sub_die = modified_type_die (item_type,
     ((item_type)->common.readonly_flag),
     ((item_type)->common.volatile_flag),
     context_die);
  if (sub_die != ((void *)0))
    add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
  return mod_type_die;
}
static int
type_is_enum (tree type)
{
  return ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE;
}
static unsigned int
dbx_reg_number (rtx rtl)
{
  unsigned regno = (((rtl)->u.fld[0]).rtuint);
  if (regno >= 53)
    abort ();
  return (0 ? dbx64_register_map[regno] : svr4_dbx_register_map[regno]);
}
static dw_loc_descr_ref
reg_loc_descriptor (rtx rtl)
{
  unsigned reg;
  rtx regs;
  if ((((rtl)->u.fld[0]).rtuint) >= 53)
    return 0;
  reg = dbx_reg_number (rtl);
  regs = targetm.dwarf_register_span (rtl);
  if (hard_regno_nregs[(((rtl)->u.fld[0]).rtuint)][((enum machine_mode) (rtl)->mode)] > 1
      || regs)
    return multiple_reg_loc_descriptor (rtl, regs);
  else
    return one_reg_loc_descriptor (reg);
}
static dw_loc_descr_ref
one_reg_loc_descriptor (unsigned int regno)
{
  if (regno <= 31)
    return new_loc_descr (DW_OP_reg0 + regno, 0, 0);
  else
    return new_loc_descr (DW_OP_regx, regno, 0);
}
static dw_loc_descr_ref
multiple_reg_loc_descriptor (rtx rtl, rtx regs)
{
  int nregs, size, i;
  unsigned reg;
  dw_loc_descr_ref loc_result = ((void *)0);
  reg = dbx_reg_number (rtl);
  nregs = hard_regno_nregs[(((rtl)->u.fld[0]).rtuint)][((enum machine_mode) (rtl)->mode)];
  if (regs == (rtx) 0)
    {
      size = ((unsigned short) mode_size[((enum machine_mode) (rtl)->mode)]) / nregs;
      loc_result = ((void *)0);
      while (nregs--)
 {
   dw_loc_descr_ref t;
   t = one_reg_loc_descriptor (reg);
   add_loc_descr (&loc_result, t);
   add_loc_descr (&loc_result, new_loc_descr (DW_OP_piece, size, 0));
   ++reg;
 }
      return loc_result;
    }
  if (((enum rtx_code) (regs)->code) != PARALLEL)
    abort ();
  size = ((unsigned short) mode_size[((enum machine_mode) ((((((regs)->u.fld[0]).rtvec1))->elem[0]))->mode)]);
  loc_result = ((void *)0);
  for (i = 0; i < (((((regs)->u.fld[0]).rtvec1))->num_elem); ++i)
    {
      dw_loc_descr_ref t;
      t = one_reg_loc_descriptor (((((((((regs)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtuint));
      add_loc_descr (&loc_result, t);
      size = ((unsigned short) mode_size[((enum machine_mode) ((((((regs)->u.fld[0]).rtvec1))->elem[0]))->mode)]);
      add_loc_descr (&loc_result, new_loc_descr (DW_OP_piece, size, 0));
    }
  return loc_result;
}
static dw_loc_descr_ref
int_loc_descriptor (long i)
{
  enum dwarf_location_atom op;
  if (i >= 0)
    {
      if (i <= 31)
 op = DW_OP_lit0 + i;
      else if (i <= 0xff)
 op = DW_OP_const1u;
      else if (i <= 0xffff)
 op = DW_OP_const2u;
      else if ((8 * 4) == 32
        || i <= 0xffffffff)
 op = DW_OP_const4u;
      else
 op = DW_OP_constu;
    }
  else
    {
      if (i >= -0x80)
 op = DW_OP_const1s;
      else if (i >= -0x8000)
 op = DW_OP_const2s;
      else if ((8 * 4) == 32
        || i >= -0x80000000)
 op = DW_OP_const4s;
      else
 op = DW_OP_consts;
    }
  return new_loc_descr (op, i, 0);
}
static dw_loc_descr_ref
based_loc_descr (unsigned int reg, long offset, unsigned char can_use_fbreg)
{
  dw_loc_descr_ref loc_result;
  unsigned fp_reg = (0 ? dbx64_register_map[frame_pointer_needed ? 6 : 7] : svr4_dbx_register_map[frame_pointer_needed ? 6 : 7])
                             ;
  if (reg == fp_reg && can_use_fbreg)
    loc_result = new_loc_descr (DW_OP_fbreg, offset, 0);
  else if (reg <= 31)
    loc_result = new_loc_descr (DW_OP_breg0 + reg, offset, 0);
  else
    loc_result = new_loc_descr (DW_OP_bregx, reg, offset);
  return loc_result;
}
static int
is_based_loc (rtx rtl)
{
  return (((enum rtx_code) (rtl)->code) == PLUS
   && (((((enum rtx_code) ((((rtl)->u.fld[0]).rtx1))->code) == REG)
        && ((((((rtl)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
        && ((enum rtx_code) ((((rtl)->u.fld[1]).rtx1))->code) == CONST_INT)));
}
static dw_loc_descr_ref
mem_loc_descriptor (rtx rtl, enum machine_mode mode, unsigned char can_use_fbreg)
{
  dw_loc_descr_ref mem_loc_result = ((void *)0);
  enum dwarf_location_atom op;
  rtl = targetm.delegitimize_address (rtl);
  switch (((enum rtx_code) (rtl)->code))
    {
    case POST_INC:
    case POST_DEC:
    case POST_MODIFY:
    case SUBREG:
      rtl = (((rtl)->u.fld[0]).rtx1);
    case REG:
      if ((((rtl)->u.fld[0]).rtuint) < 53)
 mem_loc_result = based_loc_descr (dbx_reg_number (rtl), 0,
       can_use_fbreg);
      break;
    case MEM:
      mem_loc_result = mem_loc_descriptor ((((rtl)->u.fld[0]).rtx1), ((enum machine_mode) (rtl)->mode),
        can_use_fbreg);
      if (mem_loc_result != 0)
 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
      break;
    case LO_SUM:
  rtl = (((rtl)->u.fld[1]).rtx1);
    case LABEL_REF:
    case CONST:
    case SYMBOL_REF:
      if (((enum rtx_code) (rtl)->code) == SYMBOL_REF && (((rtl))->unchanging))
 {
   unsigned char marked;
   rtx tmp = get_pool_constant_mark (rtl, &marked);
   if (((enum rtx_code) (tmp)->code) == SYMBOL_REF)
     {
       rtl = tmp;
       if ((((tmp))->unchanging))
  get_pool_constant_mark (tmp, &marked);
       else
  marked = 1;
     }
   if (!marked)
     return 0;
 }
      mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
      mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
      mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
      do { if ((used_rtx_varray)->elements_used >= (used_rtx_varray)->num_elements) (((used_rtx_varray)) = varray_grow ((used_rtx_varray), 2 * (used_rtx_varray)->num_elements)); (used_rtx_varray)->data.rtx1[(used_rtx_varray)->elements_used++] = (rtl); } while (0);
      break;
    case PRE_MODIFY:
      rtl = (((rtl)->u.fld[1]).rtx1);
      goto plus;
    case PRE_INC:
    case PRE_DEC:
      rtl = gen_rtx_fmt_ee (PLUS, (word_mode), ((((rtl)->u.fld[0]).rtx1)), (gen_rtx_CONST_INT (VOIDmode, (long) (((enum rtx_code) (rtl)->code) == PRE_INC ? (mode_inner[mode] == VOIDmode ? ((unsigned short) mode_size[mode]) : ((unsigned short) mode_size[mode_inner[mode]])) : -(mode_inner[mode] == VOIDmode ? ((unsigned short) mode_size[mode]) : ((unsigned short) mode_size[mode_inner[mode]]))))))
                                     ;
    case PLUS:
    plus:
      if (is_based_loc (rtl))
 mem_loc_result = based_loc_descr (dbx_reg_number ((((rtl)->u.fld[0]).rtx1)),
       (((((rtl)->u.fld[1]).rtx1))->u.hwint[0]),
       can_use_fbreg);
      else
 {
   mem_loc_result = mem_loc_descriptor ((((rtl)->u.fld[0]).rtx1), mode,
            can_use_fbreg);
   if (mem_loc_result == 0)
     break;
   if (((enum rtx_code) ((((rtl)->u.fld[1]).rtx1))->code) == CONST_INT
       && (((((rtl)->u.fld[1]).rtx1))->u.hwint[0]) >= 0)
     add_loc_descr (&mem_loc_result,
      new_loc_descr (DW_OP_plus_uconst,
       (((((rtl)->u.fld[1]).rtx1))->u.hwint[0]), 0));
   else
     {
       add_loc_descr (&mem_loc_result,
        mem_loc_descriptor ((((rtl)->u.fld[1]).rtx1), mode,
       can_use_fbreg));
       add_loc_descr (&mem_loc_result,
        new_loc_descr (DW_OP_plus, 0, 0));
     }
 }
      break;
    case MULT:
      op = DW_OP_mul;
      goto do_binop;
    case ASHIFT:
      op = DW_OP_shl;
      goto do_binop;
    case ASHIFTRT:
      op = DW_OP_shra;
      goto do_binop;
    case LSHIFTRT:
      op = DW_OP_shr;
      goto do_binop;
    do_binop:
      {
 dw_loc_descr_ref op0 = mem_loc_descriptor ((((rtl)->u.fld[0]).rtx1), mode,
         can_use_fbreg);
 dw_loc_descr_ref op1 = mem_loc_descriptor ((((rtl)->u.fld[1]).rtx1), mode,
         can_use_fbreg);
 if (op0 == 0 || op1 == 0)
   break;
 mem_loc_result = op0;
 add_loc_descr (&mem_loc_result, op1);
 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
 break;
      }
    case CONST_INT:
      mem_loc_result = int_loc_descriptor (((rtl)->u.hwint[0]));
      break;
    default:
      abort ();
    }
  return mem_loc_result;
}
static dw_loc_descr_ref
concat_loc_descriptor (rtx x0, rtx x1)
{
  dw_loc_descr_ref cc_loc_result = ((void *)0);
  dw_loc_descr_ref x0_ref = loc_descriptor (x0, 1);
  dw_loc_descr_ref x1_ref = loc_descriptor (x1, 1);
  if (x0_ref == 0 || x1_ref == 0)
    return 0;
  cc_loc_result = x0_ref;
  add_loc_descr (&cc_loc_result,
   new_loc_descr (DW_OP_piece,
    ((unsigned short) mode_size[((enum machine_mode) (x0)->mode)]), 0));
  add_loc_descr (&cc_loc_result, x1_ref);
  add_loc_descr (&cc_loc_result,
   new_loc_descr (DW_OP_piece,
    ((unsigned short) mode_size[((enum machine_mode) (x1)->mode)]), 0));
  return cc_loc_result;
}
static dw_loc_descr_ref
loc_descriptor (rtx rtl, unsigned char can_use_fbreg)
{
  dw_loc_descr_ref loc_result = ((void *)0);
  switch (((enum rtx_code) (rtl)->code))
    {
    case SUBREG:
      rtl = (((rtl)->u.fld[0]).rtx1);
    case REG:
      loc_result = reg_loc_descriptor (rtl);
      break;
    case MEM:
      loc_result = mem_loc_descriptor ((((rtl)->u.fld[0]).rtx1), ((enum machine_mode) (rtl)->mode),
           can_use_fbreg);
      break;
    case CONCAT:
      loc_result = concat_loc_descriptor ((((rtl)->u.fld[0]).rtx1), (((rtl)->u.fld[1]).rtx1));
      break;
    case VAR_LOCATION:
      if (((enum rtx_code) ((((rtl)->u.fld[1]).rtx1))->code) != PARALLEL)
 {
   loc_result = loc_descriptor (((((((rtl)->u.fld[1]).rtx1))->u.fld[0]).rtx1), can_use_fbreg);
 }
      else
 {
   rtvec par_elems = ((((((rtl)->u.fld[1]).rtx1))->u.fld[0]).rtvec1);
   int num_elem = ((par_elems)->num_elem);
   enum machine_mode mode;
   int i;
   loc_result = loc_descriptor ((((((par_elems)->elem[0]))->u.fld[0]).rtx1),
           can_use_fbreg);
   mode = ((enum machine_mode) ((((((par_elems)->elem[0]))->u.fld[0]).rtx1))->mode);
   add_loc_descr (&loc_result,
    new_loc_descr (DW_OP_piece, ((unsigned short) mode_size[mode]), 0));
   for (i = 1; i < num_elem; i++)
     {
       dw_loc_descr_ref temp;
       temp = loc_descriptor ((((((par_elems)->elem[i]))->u.fld[0]).rtx1),
         can_use_fbreg);
       add_loc_descr (&loc_result, temp);
       mode = ((enum machine_mode) ((((((par_elems)->elem[i]))->u.fld[0]).rtx1))->mode);
       add_loc_descr (&loc_result,
        new_loc_descr (DW_OP_piece,
         ((unsigned short) mode_size[mode]), 0));
     }
 }
      break;
    default:
      abort ();
    }
  return loc_result;
}
static dw_loc_descr_ref
loc_descriptor_from_tree (tree loc, int addressp)
{
  dw_loc_descr_ref ret, ret1;
  int indirect_p = 0;
  int unsignedp = ((((loc)->common.type))->common.unsigned_flag);
  enum dwarf_location_atom op;
  switch (((enum tree_code) (loc)->common.code))
    {
    case ERROR_MARK:
      return 0;
    case PLACEHOLDER_EXPR:
      return 0;
    case CALL_EXPR:
      return 0;
    case PREINCREMENT_EXPR:
    case PREDECREMENT_EXPR:
    case POSTINCREMENT_EXPR:
    case POSTDECREMENT_EXPR:
      return 0;
    case ADDR_EXPR:
      for (loc = ((loc)->exp.operands[0]);
    ((enum tree_code) (loc)->common.code) == CONVERT_EXPR || ((enum tree_code) (loc)->common.code) == NOP_EXPR
    || ((enum tree_code) (loc)->common.code) == NON_LVALUE_EXPR
    || ((enum tree_code) (loc)->common.code) == VIEW_CONVERT_EXPR
    || ((enum tree_code) (loc)->common.code) == SAVE_EXPR;
    loc = ((loc)->exp.operands[0]))
 ;
       return (((enum tree_code) (loc)->common.code) == INDIRECT_REF
        ? loc_descriptor_from_tree (((loc)->exp.operands[0]), addressp)
        : 0);
    case VAR_DECL:
      if (((loc)->decl.thread_local_flag))
 {
   rtx rtl;
   return 0;
   if (((loc)->decl.external_flag))
     return 0;
   rtl = rtl_for_decl_location (loc);
   if (rtl == (rtx) 0)
     return 0;
   if (!(((enum rtx_code) (rtl)->code) == MEM))
     return 0;
   rtl = (((rtl)->u.fld[0]).rtx1);
   if (! ((rtx_class[(int) (((enum rtx_code) (rtl)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (rtl)->code) == CONST_VECTOR))
     return 0;
   ret = new_loc_descr ((0x100 + DW_OP_addr), 0, 0);
   ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
   ret->dw_loc_oprnd1.v.val_addr = rtl;
   ret1 = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
   add_loc_descr (&ret, ret1);
   indirect_p = 1;
   break;
 }
    case PARM_DECL:
    case RESULT_DECL:
      {
 rtx rtl = rtl_for_decl_location (loc);
 if (rtl == (rtx) 0)
   return 0;
 else if (((rtx_class[(int) (((enum rtx_code) (rtl)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (rtl)->code) == CONST_VECTOR))
   {
     ret = new_loc_descr (DW_OP_addr, 0, 0);
     ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
     ret->dw_loc_oprnd1.v.val_addr = rtl;
     indirect_p = 1;
   }
 else
   {
     enum machine_mode mode = ((enum machine_mode) (rtl)->mode);
     if ((((enum rtx_code) (rtl)->code) == MEM))
       {
  indirect_p = 1;
  rtl = (((rtl)->u.fld[0]).rtx1);
       }
     ret = mem_loc_descriptor (rtl, mode, 1);
   }
      }
      break;
    case INDIRECT_REF:
      ret = loc_descriptor_from_tree (((loc)->exp.operands[0]), 0);
      indirect_p = 1;
      break;
    case COMPOUND_EXPR:
      return loc_descriptor_from_tree (((loc)->exp.operands[1]), addressp);
    case NOP_EXPR:
    case CONVERT_EXPR:
    case NON_LVALUE_EXPR:
    case VIEW_CONVERT_EXPR:
    case SAVE_EXPR:
    case MODIFY_EXPR:
      return loc_descriptor_from_tree (((loc)->exp.operands[0]), addressp);
    case COMPONENT_REF:
    case BIT_FIELD_REF:
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
      {
 tree obj, offset;
 long bitsize, bitpos, bytepos;
 enum machine_mode mode;
 int volatilep;
 obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
       &unsignedp, &volatilep);
 if (obj == loc)
   return 0;
 ret = loc_descriptor_from_tree (obj, 1);
 if (ret == 0
     || bitpos % 8 != 0 || bitsize % 8 != 0)
   return 0;
 if (offset != (tree) ((void *)0))
   {
     add_loc_descr (&ret, loc_descriptor_from_tree (offset, 0));
     add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
   }
 if (!addressp)
   indirect_p = 1;
 bytepos = bitpos / 8;
 if (bytepos > 0)
   add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
 else if (bytepos < 0)
   {
     add_loc_descr (&ret, int_loc_descriptor (bytepos));
     add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
   }
 break;
      }
    case INTEGER_CST:
      if (host_integerp (loc, 0))
 ret = int_loc_descriptor (tree_low_cst (loc, 0));
      else
 return 0;
      break;
    case CONSTRUCTOR:
      {
 rtx rtl = lookup_constant_def (loc);
 enum machine_mode mode;
 if (!(((enum rtx_code) (rtl)->code) == MEM))
   return 0;
 mode = ((enum machine_mode) (rtl)->mode);
 rtl = (((rtl)->u.fld[0]).rtx1);
 rtl = targetm.delegitimize_address (rtl);
 indirect_p = 1;
 ret = mem_loc_descriptor (rtl, mode, 1);
 break;
      }
    case TRUTH_AND_EXPR:
    case TRUTH_ANDIF_EXPR:
    case BIT_AND_EXPR:
      op = DW_OP_and;
      goto do_binop;
    case TRUTH_XOR_EXPR:
    case BIT_XOR_EXPR:
      op = DW_OP_xor;
      goto do_binop;
    case TRUTH_OR_EXPR:
    case TRUTH_ORIF_EXPR:
    case BIT_IOR_EXPR:
      op = DW_OP_or;
      goto do_binop;
    case FLOOR_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case TRUNC_DIV_EXPR:
      op = DW_OP_div;
      goto do_binop;
    case MINUS_EXPR:
      op = DW_OP_minus;
      goto do_binop;
    case FLOOR_MOD_EXPR:
    case CEIL_MOD_EXPR:
    case ROUND_MOD_EXPR:
    case TRUNC_MOD_EXPR:
      op = DW_OP_mod;
      goto do_binop;
    case MULT_EXPR:
      op = DW_OP_mul;
      goto do_binop;
    case LSHIFT_EXPR:
      op = DW_OP_shl;
      goto do_binop;
    case RSHIFT_EXPR:
      op = (unsignedp ? DW_OP_shr : DW_OP_shra);
      goto do_binop;
    case PLUS_EXPR:
      if (((enum tree_code) (((loc)->exp.operands[1]))->common.code) == INTEGER_CST
   && host_integerp (((loc)->exp.operands[1]), 0))
 {
   ret = loc_descriptor_from_tree (((loc)->exp.operands[0]), 0);
   if (ret == 0)
     return 0;
   add_loc_descr (&ret,
    new_loc_descr (DW_OP_plus_uconst,
     tree_low_cst (((loc)->exp.operands[1]),
            0),
     0));
   break;
 }
      op = DW_OP_plus;
      goto do_binop;
    case LE_EXPR:
      if (((((((loc)->exp.operands[0]))->common.type))->common.unsigned_flag))
 return 0;
      op = DW_OP_le;
      goto do_binop;
    case GE_EXPR:
      if (((((((loc)->exp.operands[0]))->common.type))->common.unsigned_flag))
 return 0;
      op = DW_OP_ge;
      goto do_binop;
    case LT_EXPR:
      if (((((((loc)->exp.operands[0]))->common.type))->common.unsigned_flag))
 return 0;
      op = DW_OP_lt;
      goto do_binop;
    case GT_EXPR:
      if (((((((loc)->exp.operands[0]))->common.type))->common.unsigned_flag))
 return 0;
      op = DW_OP_gt;
      goto do_binop;
    case EQ_EXPR:
      op = DW_OP_eq;
      goto do_binop;
    case NE_EXPR:
      op = DW_OP_ne;
      goto do_binop;
    do_binop:
      ret = loc_descriptor_from_tree (((loc)->exp.operands[0]), 0);
      ret1 = loc_descriptor_from_tree (((loc)->exp.operands[1]), 0);
      if (ret == 0 || ret1 == 0)
 return 0;
      add_loc_descr (&ret, ret1);
      add_loc_descr (&ret, new_loc_descr (op, 0, 0));
      break;
    case TRUTH_NOT_EXPR:
    case BIT_NOT_EXPR:
      op = DW_OP_not;
      goto do_unop;
    case ABS_EXPR:
      op = DW_OP_abs;
      goto do_unop;
    case NEGATE_EXPR:
      op = DW_OP_neg;
      goto do_unop;
    do_unop:
      ret = loc_descriptor_from_tree (((loc)->exp.operands[0]), 0);
      if (ret == 0)
 return 0;
      add_loc_descr (&ret, new_loc_descr (op, 0, 0));
      break;
    case MIN_EXPR:
    case MAX_EXPR:
      {
        const enum tree_code code =
          ((enum tree_code) (loc)->common.code) == MIN_EXPR ? GT_EXPR : LT_EXPR;
        loc = build (COND_EXPR, ((loc)->common.type),
                     build (code, integer_types[itk_int],
                            ((loc)->exp.operands[0]), ((loc)->exp.operands[1])),
                     ((loc)->exp.operands[1]), ((loc)->exp.operands[0]));
      }
    case COND_EXPR:
      {
 dw_loc_descr_ref lhs
   = loc_descriptor_from_tree (((loc)->exp.operands[1]), 0);
 dw_loc_descr_ref rhs
   = loc_descriptor_from_tree (((loc)->exp.operands[2]), 0);
 dw_loc_descr_ref bra_node, jump_node, tmp;
 ret = loc_descriptor_from_tree (((loc)->exp.operands[0]), 0);
 if (ret == 0 || lhs == 0 || rhs == 0)
   return 0;
 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
 add_loc_descr (&ret, bra_node);
 add_loc_descr (&ret, rhs);
 jump_node = new_loc_descr (DW_OP_skip, 0, 0);
 add_loc_descr (&ret, jump_node);
 add_loc_descr (&ret, lhs);
 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
 bra_node->dw_loc_oprnd1.v.val_loc = lhs;
 tmp = new_loc_descr (DW_OP_nop, 0, 0);
 add_loc_descr (&ret, tmp);
 jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
 jump_node->dw_loc_oprnd1.v.val_loc = tmp;
      }
      break;
    default:
      if ((unsigned int) ((enum tree_code) (loc)->common.code)
          >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
 return 0;
      abort ();
    }
  if (addressp && indirect_p == 0)
    return 0;
  if (!addressp && indirect_p > 0)
    {
      long size = int_size_in_bytes (((loc)->common.type));
      if (size > ((8 * (0 ? 8 : 4)) / 8) || size == -1)
 return 0;
      else if (size == ((8 * (0 ? 8 : 4)) / 8))
 op = DW_OP_deref;
      else
 op = DW_OP_deref_size;
      add_loc_descr (&ret, new_loc_descr (op, size, 0));
    }
  return ret;
}
static long
ceiling (long value1, unsigned int boundary)
{
  return (((value1 + boundary - 1) / boundary) * boundary);
}
static tree
field_type (tree decl)
{
  tree type;
  if (((enum tree_code) (decl)->common.code) == ERROR_MARK)
    return integer_types[itk_int];
  type = ((decl)->decl.result);
  if (type == (tree) ((void *)0))
    type = ((decl)->common.type);
  return type;
}
static unsigned
simple_type_align_in_bits (tree type)
{
  return (((enum tree_code) (type)->common.code) != ERROR_MARK) ? ((type)->type.align) : (8 * (0 ? 8 : 4));
}
static unsigned
simple_decl_align_in_bits (tree decl)
{
  return (((enum tree_code) (decl)->common.code) != ERROR_MARK) ? ((decl)->decl.u1.a.align) : (8 * (0 ? 8 : 4));
}
static long
field_byte_offset (tree decl)
{
  unsigned int type_align_in_bits;
  unsigned int decl_align_in_bits;
  unsigned long type_size_in_bits;
  long object_offset_in_bits;
  tree type;
  tree field_size_tree;
  long bitpos_int;
  long deepest_bitpos;
  unsigned long field_size_in_bits;
  if (((enum tree_code) (decl)->common.code) == ERROR_MARK)
    return 0;
  else if (((enum tree_code) (decl)->common.code) != FIELD_DECL)
    abort ();
  type = field_type (decl);
  field_size_tree = ((decl)->decl.size);
  if (! field_size_tree)
    field_size_tree = global_trees[TI_BITSIZE_ZERO];
  if (! host_integerp (bit_position (decl), 0))
    return 0;
  bitpos_int = int_bit_position (decl);
  if (host_integerp (field_size_tree, 1))
    field_size_in_bits = tree_low_cst (field_size_tree, 1);
  else
    field_size_in_bits = (8 * (0 ? 8 : 4));
  type_size_in_bits = simple_type_size_in_bits (type);
  type_align_in_bits = simple_type_align_in_bits (type);
  decl_align_in_bits = simple_decl_align_in_bits (decl);
  deepest_bitpos = bitpos_int + field_size_in_bits;
  object_offset_in_bits = deepest_bitpos - type_size_in_bits;
  object_offset_in_bits += type_align_in_bits - 1;
  object_offset_in_bits /= type_align_in_bits;
  object_offset_in_bits *= type_align_in_bits;
  if (object_offset_in_bits > bitpos_int)
    {
      object_offset_in_bits = deepest_bitpos - type_size_in_bits;
      object_offset_in_bits += decl_align_in_bits - 1;
      object_offset_in_bits /= decl_align_in_bits;
      object_offset_in_bits *= decl_align_in_bits;
    }
  return object_offset_in_bits / 8;
}
static void
add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
        dw_loc_descr_ref descr)
{
  if (descr != 0)
    add_AT_loc (die, attr_kind, descr);
}
static void
add_data_member_location_attribute (dw_die_ref die, tree decl)
{
  long offset;
  dw_loc_descr_ref loc_descr = 0;
  if (((enum tree_code) (decl)->common.code) == TREE_BINFO)
    {
      if (((decl)->common.static_flag) && is_cxx ())
 {
   dw_loc_descr_ref tmp;
   tmp = new_loc_descr (DW_OP_dup, 0, 0);
   add_loc_descr (&loc_descr, tmp);
   tmp = new_loc_descr (DW_OP_deref, 0, 0);
   add_loc_descr (&loc_descr, tmp);
   offset = tree_low_cst (((decl)->binfo.vptr_field), 0);
   if (offset >= 0)
     abort ();
   tmp = int_loc_descriptor (-offset);
   add_loc_descr (&loc_descr, tmp);
   tmp = new_loc_descr (DW_OP_minus, 0, 0);
   add_loc_descr (&loc_descr, tmp);
   tmp = new_loc_descr (DW_OP_deref, 0, 0);
   add_loc_descr (&loc_descr, tmp);
   tmp = new_loc_descr (DW_OP_plus, 0, 0);
   add_loc_descr (&loc_descr, tmp);
 }
      else
 offset = tree_low_cst (((decl)->binfo.offset), 0);
    }
  else
    offset = field_byte_offset (decl);
  if (! loc_descr)
    {
      enum dwarf_location_atom op;
      op = DW_OP_plus_uconst;
      loc_descr = new_loc_descr (op, offset, 0);
    }
  add_AT_loc (die, DW_AT_data_member_location, loc_descr);
}
static void
insert_int (long val, unsigned int size, unsigned char *dest)
{
  while (size != 0)
    {
      *dest++ = val & 0xff;
      val >>= 8;
      --size;
    }
}
static long
extract_int (const unsigned char *src, unsigned int size)
{
  long val = 0;
  src += size;
  while (size != 0)
    {
      val <<= 8;
      val |= *--src & 0xff;
      --size;
    }
  return val;
}
static void
insert_float (rtx rtl, unsigned char *array)
{
  struct real_value rv;
  long val[4];
  int i;
  memcpy (&(rv), &(((rtl))->u.hwint[0]), sizeof (struct real_value));
  real_to_target (val, &rv, ((enum machine_mode) (rtl)->mode));
  for (i = 0; i < ((unsigned short) mode_size[((enum machine_mode) (rtl)->mode)]) / 4; i++)
    {
      insert_int (val[i], 4, array);
      array += 4;
    }
}
static void
add_const_value_attribute (dw_die_ref die, rtx rtl)
{
  switch (((enum rtx_code) (rtl)->code))
    {
    case CONST_INT:
      {
 long val = ((rtl)->u.hwint[0]);
 if (val < 0)
   add_AT_int (die, DW_AT_const_value, val);
 else
   add_AT_unsigned (die, DW_AT_const_value, (unsigned long) val);
      }
      break;
    case CONST_DOUBLE:
      {
 enum machine_mode mode = ((enum machine_mode) (rtl)->mode);
 if (mode_class[mode] == MODE_FLOAT)
   {
     unsigned int length = ((unsigned short) mode_size[mode]);
     unsigned char *array = ggc_alloc_stat (length );
     insert_float (rtl, array);
     add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
   }
 else
   {
     if ((8 * 4) != (8 * 4))
       abort ();
     add_AT_long_long (die, DW_AT_const_value,
         ((rtl)->u.hwint[1]), ((rtl)->u.hwint[0]));
   }
      }
      break;
    case CONST_VECTOR:
      {
 enum machine_mode mode = ((enum machine_mode) (rtl)->mode);
 unsigned int elt_size = (mode_inner[mode] == VOIDmode ? ((unsigned short) mode_size[mode]) : ((unsigned short) mode_size[mode_inner[mode]]));
 unsigned int length = (((((rtl)->u.fld[0]).rtvec1))->num_elem);
 unsigned char *array = ggc_alloc_stat (length * elt_size );
 unsigned int i;
 unsigned char *p;
 if (mode_class[mode] == MODE_VECTOR_INT)
   {
     for (i = 0, p = array; i < length; i++, p += elt_size)
       {
  rtx elt = (((((rtl)->u.fld[0]).rtvec1))->elem[i]);
  long lo, hi;
  if (((enum rtx_code) (elt)->code) == CONST_INT)
    {
      lo = ((elt)->u.hwint[0]);
      hi = -(lo < 0);
    }
  else if (((enum rtx_code) (elt)->code) == CONST_DOUBLE)
    {
      lo = ((elt)->u.hwint[0]);
      hi = ((elt)->u.hwint[1]);
    }
  else
    abort ();
  if (elt_size <= sizeof (long))
    insert_int (lo, elt_size, p);
  else if (elt_size == 2 * sizeof (long))
    {
      unsigned char *p0 = p;
      unsigned char *p1 = p + sizeof (long);
      if (0)
        {
   p0 = p1;
   p1 = p;
        }
      insert_int (lo, sizeof (long), p0);
      insert_int (hi, sizeof (long), p1);
    }
  else
    abort ();
       }
   }
 else if (mode_class[mode] == MODE_VECTOR_FLOAT)
   {
     for (i = 0, p = array; i < length; i++, p += elt_size)
       {
  rtx elt = (((((rtl)->u.fld[0]).rtvec1))->elem[i]);
  insert_float (elt, p);
       }
   }
 else
   abort ();
 add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
      }
      break;
    case CONST_STRING:
      add_AT_string (die, DW_AT_const_value, (((rtl)->u.fld[0]).rtstr));
      break;
    case SYMBOL_REF:
    case LABEL_REF:
    case CONST:
      add_AT_addr (die, DW_AT_const_value, rtl);
      do { if ((used_rtx_varray)->elements_used >= (used_rtx_varray)->num_elements) (((used_rtx_varray)) = varray_grow ((used_rtx_varray), 2 * (used_rtx_varray)->num_elements)); (used_rtx_varray)->data.rtx1[(used_rtx_varray)->elements_used++] = (rtl); } while (0);
      break;
    case PLUS:
      break;
    default:
      abort ();
    }
}
static rtx
rtl_for_decl_location (tree decl)
{
  rtx rtl;
  rtl = (((decl)->decl.rtl != ((void *)0)) ? ((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)) : ((void *)0));
  if (! reload_completed)
    {
      if (rtl
   && (((rtx_class[(int) (((enum rtx_code) (rtl)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (rtl)->code) == CONST_VECTOR)
       || ((((enum rtx_code) (rtl)->code) == MEM)
           && ((rtx_class[(int) (((enum rtx_code) ((((rtl)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((rtl)->u.fld[0]).rtx1))->code) == CONST_VECTOR))
       || ((((enum rtx_code) (rtl)->code) == REG)
           && ((enum tree_code) (decl)->common.code) == VAR_DECL
    && ((decl)->common.static_flag))))
 {
   rtl = targetm.delegitimize_address (rtl);
   return rtl;
 }
      rtl = (rtx) 0;
    }
  else if (((enum tree_code) (decl)->common.code) == PARM_DECL)
    {
      if (rtl == (rtx) 0 || is_pseudo_reg (rtl))
 {
   tree declared_type = type_main_variant (((decl)->common.type));
   tree passed_type = type_main_variant (((decl)->decl.initial));
   if (declared_type == passed_type)
     rtl = ((decl)->decl.u2.r);
   else if (! 0
     && ((enum tree_code) (declared_type)->common.code) == INTEGER_TYPE
     && (((unsigned short) mode_size[((declared_type)->type.mode)])
         <= ((unsigned short) mode_size[((passed_type)->type.mode)])))
     rtl = ((decl)->decl.u2.r);
 }
      else if ((((enum rtx_code) (rtl)->code) == MEM)
        && (((rtl)->u.fld[0]).rtx1) != (const_int_rtx[64])
        && ! ((rtx_class[(int) (((enum rtx_code) ((((rtl)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((rtl)->u.fld[0]).rtx1))->code) == CONST_VECTOR)
        && !(((enum rtx_code) (((decl)->decl.u2.r))->code) == MEM)
        && (!(((enum rtx_code) ((((rtl)->u.fld[0]).rtx1))->code) == REG)
     || ((((((rtl)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == 6
     || ((((((rtl)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == 7
     || ((((((rtl)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == 16
       )
        && 0
        && ((((decl)->common.type))->type.mode) != ((enum machine_mode) (rtl)->mode)
        && (((unsigned short) mode_size[((((decl)->common.type))->type.mode)])
     < (0 ? 8 : 4)))
 {
   int offset = ((0 ? 8 : 4)
   - ((unsigned short) mode_size[((((decl)->common.type))->type.mode)]));
   rtl = gen_rtx_MEM (((((decl)->common.type))->type.mode),
        plus_constant_wide (((((rtl)->u.fld[0]).rtx1)), (long) (offset)));
 }
    }
  else if (((enum tree_code) (decl)->common.code) == VAR_DECL
    && rtl
    && (((enum rtx_code) (rtl)->code) == MEM)
    && ((enum machine_mode) (rtl)->mode) != ((((decl)->common.type))->type.mode)
    && 0)
    {
      int rsize = ((unsigned short) mode_size[((enum machine_mode) (rtl)->mode)]);
      int dsize = ((unsigned short) mode_size[((((decl)->common.type))->type.mode)]);
      if (rsize > dsize)
 rtl = gen_rtx_MEM (((((decl)->common.type))->type.mode),
      plus_constant_wide (((((rtl)->u.fld[0]).rtx1)), (long) (rsize-dsize)));
    }
  if (rtl != (rtx) 0)
    {
      rtl = eliminate_regs (rtl, 0, (rtx) 0);
    }
  else if (((enum tree_code) (decl)->common.code) == VAR_DECL && ((decl)->decl.initial))
    {
      if (((enum tree_code) (((decl)->decl.initial))->common.code) == STRING_CST
   && ((enum tree_code) (((decl)->common.type))->common.code) == ARRAY_TYPE)
 {
   tree arrtype = ((decl)->common.type);
   tree enttype = ((arrtype)->common.type);
   tree domain = ((arrtype)->type.value1s);
   tree init = ((decl)->decl.initial);
   enum machine_mode mode = ((enttype)->type.mode);
   if (mode_class[mode] == MODE_INT && ((unsigned short) mode_size[mode]) == 1
       && domain
       && integer_zerop (((domain)->type.minval))
       && compare_tree_int (((domain)->type.maxval),
       ((init)->string1.length) - 1) == 0
       && ((size_t) ((init)->string1.length)
    == strlen (((init)->string1.pointer)) + 1))
     rtl = gen_rtx_fmt_s (CONST_STRING, (VOIDmode), (((init)->string1.pointer)));
 }
      else if (((enum tree_code) (((decl)->decl.initial))->common.code) == INTEGER_CST
        || ((enum tree_code) (((decl)->decl.initial))->common.code) == REAL_CST)
 {
   rtl = expand_expr (((decl)->decl.initial), (rtx) 0, VOIDmode,
        EXPAND_INITIALIZER);
   if (rtl && (((enum rtx_code) (rtl)->code) == MEM))
     abort ();
 }
    }
  if (rtl)
    rtl = targetm.delegitimize_address (rtl);
  if (rtl)
    rtl = avoid_constant_pool_reference (rtl);
  return rtl;
}
static void
add_location_or_const_value_attribute (dw_die_ref die, tree decl,
           enum dwarf_attribute attr)
{
  rtx rtl;
  dw_loc_descr_ref descr;
  var_loc_list *loc_list;
  if (((enum tree_code) (decl)->common.code) == ERROR_MARK)
    return;
  else if (((enum tree_code) (decl)->common.code) != VAR_DECL && ((enum tree_code) (decl)->common.code) != PARM_DECL
    && ((enum tree_code) (decl)->common.code) != RESULT_DECL)
    abort ();
  loc_list = lookup_decl_loc (decl);
  if (loc_list && loc_list->first != loc_list->last)
    {
      const char *secname;
      const char *endname;
      dw_loc_list_ref list;
      rtx varloc;
      struct var_loc_node *node;
      if (((decl)->decl.section_name))
 {
   tree sectree = ((decl)->decl.section_name);
   secname = ((sectree)->string1.pointer);
 }
      else if (current_function_decl
        && ((current_function_decl)->decl.section_name))
 {
   tree sectree = ((current_function_decl)->decl.section_name);
   secname = ((sectree)->string1.pointer);
 }
      else
 secname = text_section_label;
      node = loc_list->first;
      varloc = (((node->var_loc_note)->u.fld[4]).rtx1);
      list = new_loc_list (loc_descriptor (varloc, attr != DW_AT_frame_base),
      node->label, node->next->label, secname, 1);
      node = node->next;
      for (; node->next; node = node->next)
 if ((((((((node->var_loc_note)->u.fld[4]).rtx1))->u.fld[1]).rtx1)) != (rtx) 0)
   {
     varloc = (((node->var_loc_note)->u.fld[4]).rtx1);
     add_loc_descr_to_loc_list (&list,
           loc_descriptor (varloc,
             attr != DW_AT_frame_base),
           node->label, node->next->label, secname);
   }
      if ((((((((node->var_loc_note)->u.fld[4]).rtx1))->u.fld[1]).rtx1)) != (rtx) 0)
 {
   char label_id[30];
   varloc = (((node->var_loc_note)->u.fld[4]).rtx1);
   if (!current_function_decl)
     endname = text_end_label;
   else
     {
       do { sprintf (label_id, "*.%s%u", "LFE", (unsigned) ((cfun->funcdef_no))); } while (0)
                                    ;
       endname = ggc_alloc_string((label_id), -1);
     }
   add_loc_descr_to_loc_list (&list,
         loc_descriptor (varloc,
           attr != DW_AT_frame_base),
         node->label, endname, secname);
 }
      add_AT_loc_list (die, attr, list);
      return;
    }
  rtl = rtl_for_decl_location (decl);
  if (rtl == (rtx) 0)
    return;
  switch (((enum rtx_code) (rtl)->code))
    {
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CONST_STRING:
    case SYMBOL_REF:
    case LABEL_REF:
    case CONST:
    case PLUS:
      add_const_value_attribute (die, rtl);
      break;
    case MEM:
      if (((enum tree_code) (decl)->common.code) == VAR_DECL && ((decl)->decl.thread_local_flag))
 {
   descr = loc_descriptor_from_tree (decl, 1);
 }
      else
 {
 case REG:
 case SUBREG:
 case CONCAT:
   descr = loc_descriptor (rtl, 1);
 }
      add_AT_location_description (die, attr, descr);
      break;
    case PARALLEL:
      {
 rtvec par_elems = (((rtl)->u.fld[0]).rtvec1);
 int num_elem = ((par_elems)->num_elem);
 enum machine_mode mode;
 int i;
 descr = loc_descriptor ((((((par_elems)->elem[0]))->u.fld[0]).rtx1), 1);
 mode = ((enum machine_mode) ((((((par_elems)->elem[0]))->u.fld[0]).rtx1))->mode);
 add_loc_descr (&descr,
         new_loc_descr (DW_OP_piece, ((unsigned short) mode_size[mode]), 0));
 for (i = 1; i < num_elem; i++)
   {
     dw_loc_descr_ref temp;
     temp = loc_descriptor ((((((par_elems)->elem[i]))->u.fld[0]).rtx1), 1);
     add_loc_descr (&descr, temp);
     mode = ((enum machine_mode) ((((((par_elems)->elem[i]))->u.fld[0]).rtx1))->mode);
     add_loc_descr (&descr,
      new_loc_descr (DW_OP_piece,
       ((unsigned short) mode_size[mode]), 0));
   }
      }
      add_AT_location_description (die, DW_AT_location, descr);
      break;
    default:
      abort ();
    }
}
static void
tree_add_const_value_attribute (dw_die_ref var_die, tree decl)
{
  tree init = ((decl)->decl.initial);
  tree type = ((decl)->common.type);
  if (((decl)->common.readonly_flag) && ! ((decl)->common.volatile_flag) && init
      && initializer_constant_valid_p (init, type) == global_trees[TI_NULL_POINTER])
            ;
  else
    return;
  switch (((enum tree_code) (type)->common.code))
    {
    case INTEGER_TYPE:
      if (host_integerp (init, 0))
 add_AT_unsigned (var_die, DW_AT_const_value,
    tree_low_cst (init, 0));
      else
 add_AT_long_long (var_die, DW_AT_const_value,
     (((init)->int_cst.int_cst).high),
     (((init)->int_cst.int_cst).low));
      break;
    default:;
    }
}
static void
add_name_attribute (dw_die_ref die, const char *name_string)
{
  if (name_string != ((void *)0) && *name_string != 0)
    {
      if (demangle_name_func)
 name_string = (*demangle_name_func) (name_string);
      add_AT_string (die, DW_AT_name, name_string);
    }
}
static void
add_comp_dir_attribute (dw_die_ref die)
{
  const char *wd = get_src_pwd ();
  if (wd != ((void *)0))
    add_AT_string (die, DW_AT_comp_dir, wd);
}
static void
add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
{
  switch (((enum tree_code) (bound)->common.code))
    {
    case ERROR_MARK:
      return;
    case INTEGER_CST:
      if (! host_integerp (bound, 0)
   || (bound_attr == DW_AT_lower_bound
       && (((is_c_family () || is_java ()) && integer_zerop (bound))
    || (is_fortran () && integer_onep (bound)))))
 ;
      else
 add_AT_unsigned (subrange_die, bound_attr, tree_low_cst (bound, 0));
      break;
    case CONVERT_EXPR:
    case NOP_EXPR:
    case NON_LVALUE_EXPR:
    case VIEW_CONVERT_EXPR:
      add_bound_info (subrange_die, bound_attr, ((bound)->exp.operands[0]));
      break;
    case SAVE_EXPR:
      break;
    case VAR_DECL:
    case PARM_DECL:
    case RESULT_DECL:
      {
 dw_die_ref decl_die = lookup_decl_die (bound);
 if (decl_die != ((void *)0))
   add_AT_die_ref (subrange_die, bound_attr, decl_die);
 break;
      }
    default:
      {
 dw_die_ref ctx, decl_die;
 dw_loc_descr_ref loc;
 loc = loc_descriptor_from_tree (bound, 0);
 if (loc == ((void *)0))
   break;
 if (current_function_decl == 0)
   ctx = comp_unit_die;
 else
   ctx = lookup_decl_die (current_function_decl);
 decl_die = new_die (DW_TAG_variable, ctx, bound);
 add_AT_flag (decl_die, DW_AT_artificial, 1);
 add_type_attribute (decl_die, ((bound)->common.type), 1, 0, ctx);
 add_AT_loc (decl_die, DW_AT_location, loc);
 add_AT_die_ref (subrange_die, bound_attr, decl_die);
 break;
      }
    }
}
static void
add_subscript_info (dw_die_ref type_die, tree type)
{
  unsigned dimension_number;
  tree lower, upper;
  dw_die_ref subrange_die;
  for (dimension_number = 0;
       ((enum tree_code) (type)->common.code) == ARRAY_TYPE;
       type = ((type)->common.type), dimension_number++)
    {
      tree domain = ((type)->type.value1s);
      subrange_die = new_die (DW_TAG_subrange_type, type_die, ((void *)0));
      if (domain)
 {
   lower = ((domain)->type.minval);
   upper = ((domain)->type.maxval);
   if (((domain)->common.type))
     {
       if (((enum tree_code) (domain)->common.code) == INTEGER_TYPE
    && ((domain)->type.name) == (tree) ((void *)0)
    && ((enum tree_code) (((domain)->common.type))->common.code) == INTEGER_TYPE
    && ((((domain)->common.type))->type.name) == (tree) ((void *)0))
  ;
       else
  add_type_attribute (subrange_die, ((domain)->common.type), 0, 0,
        type_die);
     }
   add_bound_info (subrange_die, DW_AT_lower_bound, lower);
   if (upper)
     add_bound_info (subrange_die, DW_AT_upper_bound, upper);
 }
    }
}
static void
add_byte_size_attribute (dw_die_ref die, tree tree_node)
{
  unsigned size;
  switch (((enum tree_code) (tree_node)->common.code))
    {
    case ERROR_MARK:
      size = 0;
      break;
    case ENUMERAL_TYPE:
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      size = int_size_in_bytes (tree_node);
      break;
    case FIELD_DECL:
      size = simple_type_size_in_bits (field_type (tree_node)) / 8;
      break;
    default:
      abort ();
    }
  add_AT_unsigned (die, DW_AT_byte_size, size);
}
static void
add_bit_offset_attribute (dw_die_ref die, tree decl)
{
  long object_offset_in_bytes = field_byte_offset (decl);
  tree type = ((decl)->decl.result);
  long bitpos_int;
  long highest_order_object_bit_offset;
  long highest_order_field_bit_offset;
  long unsigned bit_offset;
  if (!type
      || ((enum tree_code) (decl)->common.code) != FIELD_DECL)
    abort ();
  if (! host_integerp (bit_position (decl), 0)
      || ! host_integerp (((decl)->decl.size), 1))
    return;
  bitpos_int = int_bit_position (decl);
  highest_order_object_bit_offset = object_offset_in_bytes * 8;
  highest_order_field_bit_offset = bitpos_int;
  if (! 0)
    {
      highest_order_field_bit_offset += tree_low_cst (((decl)->decl.size), 0);
      highest_order_object_bit_offset += simple_type_size_in_bits (type);
    }
  bit_offset
    = (! 0
       ? highest_order_object_bit_offset - highest_order_field_bit_offset
       : highest_order_field_bit_offset - highest_order_object_bit_offset);
  add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
}
static void
add_bit_size_attribute (dw_die_ref die, tree decl)
{
  if (((enum tree_code) (decl)->common.code) != FIELD_DECL
      || ! ((decl)->decl.result))
    abort ();
  if (host_integerp (((decl)->decl.size), 1))
    add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (((decl)->decl.size), 1));
}
static void
add_prototyped_attribute (dw_die_ref die, tree func_type)
{
  if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
      && ((func_type)->type.value1s) != ((void *)0))
    add_AT_flag (die, DW_AT_prototyped, 1);
}
static void
add_abstract_origin_attribute (dw_die_ref die, tree origin)
{
  dw_die_ref origin_die = ((void *)0);
  if (((enum tree_code) (origin)->common.code) != FUNCTION_DECL)
    {
      tree fn = origin;
      if ((tree_code_type[(int) (((enum tree_code) (fn)->common.code))] == 't'))
 fn = ((fn)->common.chain);
      fn = decl_function_context (fn);
      if (fn)
 dwarf2out_abstract_function (fn);
    }
  if ((tree_code_type[(int) (((enum tree_code) (origin)->common.code))] == 'd'))
    origin_die = lookup_decl_die (origin);
  else if ((tree_code_type[(int) (((enum tree_code) (origin)->common.code))] == 't'))
    origin_die = lookup_type_die (origin);
  if (origin_die == ((void *)0))
    abort ();
  add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
}
static void
add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
{
  if (((func_decl)->decl.vindex))
    {
      add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
      if (host_integerp (((func_decl)->decl.vindex), 0))
 add_AT_loc (die, DW_AT_vtable_elem_location,
      new_loc_descr (DW_OP_constu,
       tree_low_cst (((func_decl)->decl.vindex), 0),
       0));
      if (debug_info_level > DINFO_LEVEL_TERSE)
 add_AT_die_ref (die, DW_AT_containing_type,
   lookup_type_die (((func_decl)->decl.context)));
    }
}
static void
add_src_coords_attributes (dw_die_ref die, tree decl)
{
  expanded_location s = (((decl)->decl.locus));
  unsigned file_index = lookup_filename (s.file);
  add_AT_unsigned (die, DW_AT_decl_file, file_index);
  add_AT_unsigned (die, DW_AT_decl_line, s.line);
}
static void
add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
{
  tree decl_name;
  decl_name = ((decl)->decl.name);
  if (decl_name != ((void *)0) && ((const char *) (decl_name)->identifier.id.str) != ((void *)0))
    {
      add_name_attribute (die, dwarf2_name (decl, 0));
      if (! ((decl)->decl.artificial_flag))
 add_src_coords_attributes (die, decl);
      if ((((enum tree_code) (decl)->common.code) == FUNCTION_DECL || ((enum tree_code) (decl)->common.code) == VAR_DECL)
   && ((decl)->common.public_flag)
   && decl_assembler_name (decl) != ((decl)->decl.name)
   && !((decl)->decl.abstract_flag))
 add_AT_string (die, DW_AT_MIPS_linkage_name,
         ((const char *) (decl_assembler_name (decl))->identifier.id.str));
    }
}
static void
push_decl_scope (tree scope)
{
  do { if ((decl_scope_table)->elements_used >= (decl_scope_table)->num_elements) (((decl_scope_table)) = varray_grow ((decl_scope_table), 2 * (decl_scope_table)->num_elements)); (decl_scope_table)->data.tree1[(decl_scope_table)->elements_used++] = (scope); } while (0);
}
static void
pop_decl_scope (void)
{
  if (((decl_scope_table)->elements_used) <= 0)
    abort ();
  do { ((decl_scope_table)->elements_used--); } while (0);
}
static dw_die_ref
scope_die_for (tree t, dw_die_ref context_die)
{
  dw_die_ref scope_die = ((void *)0);
  tree containing_scope;
  int i;
  if (! (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
    abort ();
  containing_scope = ((t)->type.context);
  if (containing_scope && ((enum tree_code) (containing_scope)->common.code) == NAMESPACE_DECL)
    {
      if (context_die == lookup_decl_die (containing_scope))
         ;
      else
 containing_scope = (tree) ((void *)0);
    }
  if (containing_scope && ((enum tree_code) (containing_scope)->common.code) == FUNCTION_TYPE)
    containing_scope = (tree) ((void *)0);
  if (containing_scope == (tree) ((void *)0))
    scope_die = comp_unit_die;
  else if ((tree_code_type[(int) (((enum tree_code) (containing_scope)->common.code))] == 't'))
    {
      for (i = ((decl_scope_table)->elements_used) - 1; i >= 0; --i)
 if (((decl_scope_table)->data.tree1[i]) == containing_scope)
   break;
      if (i < 0)
 {
   if (debug_info_level > DINFO_LEVEL_TERSE
       && !((containing_scope)->common.asm_written_flag))
     abort ();
   scope_die = comp_unit_die;
 }
      else
 scope_die = lookup_type_die (containing_scope);
    }
  else
    scope_die = context_die;
  return scope_die;
}
static int
local_scope_p (dw_die_ref context_die)
{
  for (; context_die; context_die = context_die->die_parent)
    if (context_die->die_tag == DW_TAG_inlined_subroutine
 || context_die->die_tag == DW_TAG_subprogram)
      return 1;
  return 0;
}
static int
class_or_namespace_scope_p (dw_die_ref context_die)
{
  return (context_die
   && (context_die->die_tag == DW_TAG_structure_type
       || context_die->die_tag == DW_TAG_union_type
       || context_die->die_tag == DW_TAG_namespace));
}
static void
add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
      int decl_volatile, dw_die_ref context_die)
{
  enum tree_code code = ((enum tree_code) (type)->common.code);
  dw_die_ref type_die = ((void *)0);
  if ((code == INTEGER_TYPE || code == REAL_TYPE)
      && ((type)->common.type) != 0 && ((type)->type.name) == 0)
    type = ((type)->common.type), code = ((enum tree_code) (type)->common.code);
  if (code == ERROR_MARK
      || code == VOID_TYPE)
    return;
  type_die = modified_type_die (type,
    decl_const || ((type)->common.readonly_flag),
    decl_volatile || ((type)->common.volatile_flag),
    context_die);
  if (type_die != ((void *)0))
    add_AT_die_ref (object_die, DW_AT_type, type_die);
}
static const char *
type_tag (tree type)
{
  const char *name = 0;
  if (((type)->type.name) != 0)
    {
      tree t = 0;
      if (((enum tree_code) (((type)->type.name))->common.code) == IDENTIFIER_NODE)
 t = ((type)->type.name);
      else if (((enum tree_code) (((type)->type.name))->common.code) == TYPE_DECL
        && ! ((((type)->type.name))->decl.ignored_flag))
 t = ((((type)->type.name))->decl.name);
      if (t != 0)
 name = ((const char *) (t)->identifier.id.str);
    }
  return (name == 0 || *name == '\0') ? 0 : name;
}
static tree
member_declared_type (tree member)
{
  return (((member)->decl.result)
   ? ((member)->decl.result) : ((member)->common.type));
}
static void
gen_array_type_die (tree type, dw_die_ref context_die)
{
  dw_die_ref scope_die = scope_die_for (type, context_die);
  dw_die_ref array_die;
  tree element_type;
  array_die = new_die (DW_TAG_array_type, scope_die, type);
  add_name_attribute (array_die, type_tag (type));
  equate_type_number_to_die (type, array_die);
  if (((enum tree_code) (type)->common.code) == VECTOR_TYPE)
    {
      type = ((((((type)->type.value1s))->type.value1s))->common.type);
      add_AT_flag (array_die, DW_AT_GNU_vector, 1);
    }
    add_subscript_info (array_die, type);
  element_type = ((type)->common.type);
  while (((enum tree_code) (element_type)->common.code) == ARRAY_TYPE)
    element_type = ((element_type)->common.type);
  gen_type_die (element_type, context_die);
  add_type_attribute (array_die, element_type, 0, 0, context_die);
}
static void
gen_set_type_die (tree type, dw_die_ref context_die)
{
  dw_die_ref type_die
    = new_die (DW_TAG_set_type, scope_die_for (type, context_die), type);
  equate_type_number_to_die (type, type_die);
  add_type_attribute (type_die, ((type)->common.type), 0, 0, context_die);
}
static void
retry_incomplete_types (void)
{
  int i;
  for (i = ((incomplete_types)->elements_used) - 1; i >= 0; i--)
    gen_type_die (((incomplete_types)->data.tree1[i]), comp_unit_die);
}
static void
gen_inlined_enumeration_type_die (tree type, dw_die_ref context_die)
{
  dw_die_ref type_die = new_die (DW_TAG_enumeration_type, context_die, type);
  add_abstract_origin_attribute (type_die, type);
}
static void
gen_inlined_structure_type_die (tree type, dw_die_ref context_die)
{
  dw_die_ref type_die = new_die (DW_TAG_structure_type, context_die, type);
  add_abstract_origin_attribute (type_die, type);
}
static void
gen_inlined_union_type_die (tree type, dw_die_ref context_die)
{
  dw_die_ref type_die = new_die (DW_TAG_union_type, context_die, type);
  add_abstract_origin_attribute (type_die, type);
}
static dw_die_ref
gen_enumeration_type_die (tree type, dw_die_ref context_die)
{
  dw_die_ref type_die = lookup_type_die (type);
  if (type_die == ((void *)0))
    {
      type_die = new_die (DW_TAG_enumeration_type,
     scope_die_for (type, context_die), type);
      equate_type_number_to_die (type, type_die);
      add_name_attribute (type_die, type_tag (type));
    }
  else if (! ((type)->type.size))
    return type_die;
  else
    remove_AT (type_die, DW_AT_declaration);
  if (((type)->type.size))
    {
      tree link;
      ((type)->common.asm_written_flag) = 1;
      add_byte_size_attribute (type_die, type);
      if (((type)->common.chain) != (tree) ((void *)0))
 add_src_coords_attributes (type_die, ((type)->common.chain));
      if (type_die->die_parent == ((void *)0))
 add_child_die (scope_die_for (type, context_die), type_die);
      for (link = ((type)->type.value1s);
    link != ((void *)0); link = ((link)->common.chain))
 {
   dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
   tree value1 = ((link)->list.value1);
   add_name_attribute (enum_die,
         ((const char *) (((link)->list.purpose))->identifier.id.str));
   if (host_integerp (value1, ((((value1)->common.type))->common.unsigned_flag)))
     add_AT_int (enum_die, DW_AT_const_value,
   tree_low_cst (value1, tree_int_cst_sgn (value1) > 0));
 }
    }
  else
    add_AT_flag (type_die, DW_AT_declaration, 1);
  return type_die;
}
static dw_die_ref
gen_formal_parameter_die (tree node, dw_die_ref context_die)
{
  dw_die_ref parm_die
    = new_die (DW_TAG_formal_parameter, context_die, node);
  tree origin;
  switch (tree_code_type[(int) (((enum tree_code) (node)->common.code))])
    {
    case 'd':
      origin = decl_ultimate_origin (node);
      if (origin != ((void *)0))
 add_abstract_origin_attribute (parm_die, origin);
      else
 {
   add_name_and_src_coords_attributes (parm_die, node);
   add_type_attribute (parm_die, ((node)->common.type),
         ((node)->common.readonly_flag),
         ((node)->common.volatile_flag),
         context_die);
   if (((node)->decl.artificial_flag))
     add_AT_flag (parm_die, DW_AT_artificial, 1);
 }
      equate_decl_number_to_die (node, parm_die);
      if (! ((node)->decl.abstract_flag))
 add_location_or_const_value_attribute (parm_die, node, DW_AT_location);
      break;
    case 't':
      add_type_attribute (parm_die, node, 0, 0, context_die);
      break;
    default:
      abort ();
    }
  return parm_die;
}
static void
gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
{
  new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
}
static void
gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
{
  tree link;
  tree formal_type = ((void *)0);
  tree first_parm_type;
  tree arg;
  if (((enum tree_code) (function_or_method_type)->common.code) == FUNCTION_DECL)
    {
      arg = ((function_or_method_type)->decl.arguments);
      function_or_method_type = ((function_or_method_type)->common.type);
    }
  else
    arg = (tree) ((void *)0);
  first_parm_type = ((function_or_method_type)->type.value1s);
  for (link = first_parm_type; link; )
    {
      dw_die_ref parm_die;
      formal_type = ((link)->list.value1);
      if (formal_type == global_trees[TI_VOID_TYPE])
 break;
      parm_die = gen_formal_parameter_die (formal_type, context_die);
      if ((((enum tree_code) (function_or_method_type)->common.code) == METHOD_TYPE
    && link == first_parm_type)
   || (arg && ((arg)->decl.artificial_flag)))
 add_AT_flag (parm_die, DW_AT_artificial, 1);
      link = ((link)->common.chain);
      if (arg)
 arg = ((arg)->common.chain);
    }
  if (formal_type != global_trees[TI_VOID_TYPE])
    gen_unspecified_parameters_die (function_or_method_type, context_die);
  for (link = ((function_or_method_type)->type.value1s);
       link && ((link)->list.value1);
       link = ((link)->common.chain))
    gen_type_die (((link)->list.value1), context_die);
}
static void
gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
{
  gen_type_die (type, context_die);
  if (((((type)->common.chain))->decl.external_flag)
      && ! lookup_decl_die (member))
    {
      if (decl_ultimate_origin (member))
 abort ();
      push_decl_scope (type);
      if (((enum tree_code) (member)->common.code) == FUNCTION_DECL)
 gen_subprogram_die (member, lookup_type_die (type));
      else
 gen_variable_die (member, lookup_type_die (type));
      pop_decl_scope ();
    }
}
static void
dwarf2out_abstract_function (tree decl)
{
  dw_die_ref old_die;
  tree save_fn;
  tree context;
  int was_abstract = ((decl)->decl.abstract_flag);
  decl = (((decl)->decl.abstract_origin) ? ((decl)->decl.abstract_origin) : (decl));
  old_die = lookup_decl_die (decl);
  if (old_die && get_AT (old_die, DW_AT_inline))
    return;
  if (debug_info_level > DINFO_LEVEL_TERSE)
    {
      context = decl_class_context (decl);
      if (context)
 gen_type_die_for_member
   (context, decl, decl_function_context (decl) ? ((void *)0) : comp_unit_die);
    }
  save_fn = current_function_decl;
  current_function_decl = decl;
  set_decl_abstract_flags (decl, 1);
  dwarf2out_decl (decl);
  if (! was_abstract)
    set_decl_abstract_flags (decl, 0);
  current_function_decl = save_fn;
}
static void
gen_subprogram_die (tree decl, dw_die_ref context_die)
{
  char label_id[30];
  tree origin = decl_ultimate_origin (decl);
  dw_die_ref subr_die;
  rtx fp_reg;
  tree fn_arg_types;
  tree outer_scope;
  dw_die_ref old_die = lookup_decl_die (decl);
  int declaration = (current_function_decl != decl
       || class_or_namespace_scope_p (context_die));
  if (origin && declaration && class_or_namespace_scope_p (context_die))
    {
      origin = ((void *)0);
      if (old_die)
 abort ();
    }
  if (origin != ((void *)0))
    {
      if (declaration && ! local_scope_p (context_die))
 abort ();
      if (old_die && old_die->die_parent == ((void *)0))
 add_child_die (context_die, old_die);
      subr_die = new_die (DW_TAG_subprogram, context_die, decl);
      add_abstract_origin_attribute (subr_die, origin);
    }
  else if (old_die)
    {
      expanded_location s = (((decl)->decl.locus));
      unsigned file_index = lookup_filename (s.file);
      if (!get_AT_flag (old_die, DW_AT_declaration)
   && !get_AT (old_die, DW_AT_inline))
 {
   if ((global_dc)->diagnostic_count[(int) (DK_ERROR)])
     return;
   abort ();
 }
      if ((old_die->die_parent == comp_unit_die || context_die == ((void *)0))
   && (((decl)->decl.artificial_flag)
       || (get_AT_unsigned (old_die, DW_AT_decl_file) == file_index
    && (get_AT_unsigned (old_die, DW_AT_decl_line)
        == (unsigned) s.line))))
 {
   subr_die = old_die;
   remove_AT (subr_die, DW_AT_declaration);
   remove_child_TAG (subr_die, DW_TAG_formal_parameter);
 }
      else
 {
   subr_die = new_die (DW_TAG_subprogram, context_die, decl);
   add_AT_specification (subr_die, old_die);
   if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
     add_AT_unsigned (subr_die, DW_AT_decl_file, file_index);
   if (get_AT_unsigned (old_die, DW_AT_decl_line)
       != (unsigned) s.line)
     add_AT_unsigned
       (subr_die, DW_AT_decl_line, s.line);
 }
    }
  else
    {
      subr_die = new_die (DW_TAG_subprogram, context_die, decl);
      if (((decl)->common.public_flag))
 add_AT_flag (subr_die, DW_AT_external, 1);
      add_name_and_src_coords_attributes (subr_die, decl);
      if (debug_info_level > DINFO_LEVEL_TERSE)
 {
   add_prototyped_attribute (subr_die, ((decl)->common.type));
   add_type_attribute (subr_die, ((((decl)->common.type))->common.type),
         0, 0, context_die);
 }
      add_pure_or_virtual_attribute (subr_die, decl);
      if (((decl)->decl.artificial_flag))
 add_AT_flag (subr_die, DW_AT_artificial, 1);
      if (((decl)->common.protected_flag))
 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
      else if (((decl)->common.private_flag))
 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
    }
  if (declaration)
    {
      if (!old_die || !get_AT (old_die, DW_AT_inline))
 {
   add_AT_flag (subr_die, DW_AT_declaration, 1);
     equate_decl_number_to_die (decl, subr_die);
 }
    }
  else if (((decl)->decl.abstract_flag))
    {
      if (((decl)->decl.declared_inline_flag))
 {
          if (cgraph_function_possibly_inlined_p (decl))
     add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
   else
     add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
 }
      else
 {
   if (cgraph_function_possibly_inlined_p (decl))
            add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
   else
            add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
 }
      equate_decl_number_to_die (decl, subr_die);
    }
  else if (!((decl)->decl.external_flag))
    {
      if (!old_die || !get_AT (old_die, DW_AT_inline))
 equate_decl_number_to_die (decl, subr_die);
      do { sprintf (label_id, "*.%s%u", "LFB", (unsigned) ((cfun->funcdef_no))); } while (0)
                                   ;
      add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
      do { sprintf (label_id, "*.%s%u", "LFE", (unsigned) ((cfun->funcdef_no))); } while (0)
                                   ;
      add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
      add_pubname (decl, subr_die);
      add_arange (decl, subr_die);
      if (frame_base_decl && lookup_decl_loc (frame_base_decl) != ((void *)0))
 {
   add_location_or_const_value_attribute (subr_die, frame_base_decl,
       DW_AT_frame_base);
 }
      else
 {
   fp_reg
     = frame_pointer_needed ? (global_rtl[GR_HARD_FRAME_POINTER]) : (global_rtl[GR_STACK_POINTER]);
   add_AT_loc (subr_die, DW_AT_frame_base, reg_loc_descriptor (fp_reg));
 }
      if (cfun->static_chain_decl)
 add_AT_location_description (subr_die, DW_AT_static_link,
   loc_descriptor_from_tree (cfun->static_chain_decl, 0));
    }
  if (debug_info_level <= DINFO_LEVEL_TERSE)
    ;
  else if (declaration)
    gen_formal_types_die (decl, subr_die);
  else
    {
      tree arg_decls = ((decl)->decl.arguments);
      tree parm;
      for (parm = arg_decls; parm; parm = ((parm)->common.chain))
 if (((enum tree_code) (parm)->common.code) == PARM_DECL)
   {
     if (((parm)->decl.name)
  && !strcmp (((const char *) (((parm)->decl.name))->identifier.id.str),
       "__builtin_va_alist"))
       gen_unspecified_parameters_die (parm, subr_die);
     else
       gen_decl_die (parm, subr_die);
   }
      fn_arg_types = ((((decl)->common.type))->type.value1s);
      if (fn_arg_types != ((void *)0))
 {
   if (((tree_last (fn_arg_types))->list.value1) != global_trees[TI_VOID_TYPE])
     gen_unspecified_parameters_die (decl, subr_die);
 }
      else if (((decl)->decl.initial) == (tree) ((void *)0))
 gen_unspecified_parameters_die (decl, subr_die);
    }
  outer_scope = ((decl)->decl.initial);
  if (! declaration && ((enum tree_code) (outer_scope)->common.code) != ERROR_MARK)
    {
      if (((((decl)->decl.result))->decl.name))
 gen_decl_die (((decl)->decl.result), subr_die);
      current_function_has_inlines = 0;
      decls_for_scope (outer_scope, subr_die, 0);
    }
}
static void
gen_variable_die (tree decl, dw_die_ref context_die)
{
  tree origin = decl_ultimate_origin (decl);
  dw_die_ref var_die = new_die (DW_TAG_variable, context_die, decl);
  dw_die_ref old_die = lookup_decl_die (decl);
  int declaration = (((decl)->decl.external_flag)
       || class_or_namespace_scope_p (context_die));
  if (origin != ((void *)0))
    add_abstract_origin_attribute (var_die, origin);
  else if (old_die && ((decl)->common.static_flag)
    && get_AT_flag (old_die, DW_AT_declaration) == 1)
    {
      add_AT_specification (var_die, old_die);
      if (((decl)->decl.name))
 {
   expanded_location s = (((decl)->decl.locus));
   unsigned file_index = lookup_filename (s.file);
   if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
     add_AT_unsigned (var_die, DW_AT_decl_file, file_index);
   if (get_AT_unsigned (old_die, DW_AT_decl_line)
       != (unsigned) s.line)
     add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
 }
    }
  else
    {
      add_name_and_src_coords_attributes (var_die, decl);
      add_type_attribute (var_die, ((decl)->common.type), ((decl)->common.readonly_flag),
     ((decl)->common.volatile_flag), context_die);
      if (((decl)->common.public_flag))
 add_AT_flag (var_die, DW_AT_external, 1);
      if (((decl)->decl.artificial_flag))
 add_AT_flag (var_die, DW_AT_artificial, 1);
      if (((decl)->common.protected_flag))
 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
      else if (((decl)->common.private_flag))
 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
    }
  if (declaration)
    add_AT_flag (var_die, DW_AT_declaration, 1);
  if (((decl)->decl.abstract_flag) || declaration)
    equate_decl_number_to_die (decl, var_die);
  if (! declaration && ! ((decl)->decl.abstract_flag))
    {
      add_location_or_const_value_attribute (var_die, decl, DW_AT_location);
      add_pubname (decl, var_die);
    }
  else
    tree_add_const_value_attribute (var_die, decl);
}
static void
gen_label_die (tree decl, dw_die_ref context_die)
{
  tree origin = decl_ultimate_origin (decl);
  dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
  rtx insn;
  char label[30];
  if (origin != ((void *)0))
    add_abstract_origin_attribute (lbl_die, origin);
  else
    add_name_and_src_coords_attributes (lbl_die, decl);
  if (((decl)->decl.abstract_flag))
    equate_decl_number_to_die (decl, lbl_die);
  else
    {
      insn = (((decl)->decl.rtl != ((void *)0)) ? ((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)) : ((void *)0));
      if (insn
   && (((enum rtx_code) (insn)->code) == CODE_LABEL
       || ((((enum rtx_code) (insn)->code) == NOTE
            && (((insn)->u.fld[5]).rtint) == NOTE_INSN_DELETED_LABEL))))
 {
   if ((((insn))->volatil))
     abort ();
   do { sprintf (label, "*.%s%u", "L", (unsigned) ((((insn)->u.fld[6]).rtint))); } while (0);
   add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
 }
    }
}
static void
gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
{
  dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
  char label[30];
  if (! ((stmt)->block.abstract_flag))
    {
      if (((stmt)->block.fragment_chain))
 {
   tree chain;
   add_AT_range_list (stmt_die, DW_AT_ranges, add_ranges (stmt));
   chain = ((stmt)->block.fragment_chain);
   do
     {
       add_ranges (chain);
       chain = ((chain)->block.fragment_chain);
     }
   while (chain);
   add_ranges (((void *)0));
 }
      else
 {
   do { sprintf (label, "*.%s%u", "LBB", (unsigned) (((stmt)->block.block_num))); } while (0)
                               ;
   add_AT_lbl_id (stmt_die, DW_AT_low_pc, label);
   do { sprintf (label, "*.%s%u", "LBE", (unsigned) (((stmt)->block.block_num))); } while (0)
                               ;
   add_AT_lbl_id (stmt_die, DW_AT_high_pc, label);
 }
    }
  decls_for_scope (stmt, stmt_die, depth);
}
static void
gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
{
  tree decl = block_ultimate_origin (stmt);
  dwarf2out_abstract_function (decl);
  if (! ((stmt)->block.abstract_flag))
    {
      dw_die_ref subr_die
 = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
      char label[30];
      add_abstract_origin_attribute (subr_die, decl);
      do { sprintf (label, "*.%s%u", "LBB", (unsigned) (((stmt)->block.block_num))); } while (0)
                           ;
      add_AT_lbl_id (subr_die, DW_AT_low_pc, label);
      do { sprintf (label, "*.%s%u", "LBE", (unsigned) (((stmt)->block.block_num))); } while (0)
                           ;
      add_AT_lbl_id (subr_die, DW_AT_high_pc, label);
      decls_for_scope (stmt, subr_die, depth);
      current_function_has_inlines = 1;
    }
  else
    gen_lexical_block_die (stmt, context_die, depth);
}
static void
gen_field_die (tree decl, dw_die_ref context_die)
{
  dw_die_ref decl_die;
  if (((decl)->common.type) == global_trees[TI_ERROR_MARK])
    return;
  decl_die = new_die (DW_TAG_member, context_die, decl);
  add_name_and_src_coords_attributes (decl_die, decl);
  add_type_attribute (decl_die, member_declared_type (decl),
        ((decl)->common.readonly_flag), ((decl)->common.volatile_flag),
        context_die);
  if (((decl)->decl.result))
    {
      add_byte_size_attribute (decl_die, decl);
      add_bit_size_attribute (decl_die, decl);
      add_bit_offset_attribute (decl_die, decl);
    }
  if (((enum tree_code) (((decl)->decl.context))->common.code) != UNION_TYPE)
    add_data_member_location_attribute (decl_die, decl);
  if (((decl)->decl.artificial_flag))
    add_AT_flag (decl_die, DW_AT_artificial, 1);
  if (((decl)->common.protected_flag))
    add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
  else if (((decl)->common.private_flag))
    add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
}
static void
gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
{
  dw_die_ref ptr_die
    = new_die (DW_TAG_ptr_to_member_type,
        scope_die_for (type, context_die), type);
  equate_type_number_to_die (type, ptr_die);
  add_AT_die_ref (ptr_die, DW_AT_containing_type,
    lookup_type_die (((type)->type.maxval)));
  add_type_attribute (ptr_die, ((type)->common.type), 0, 0, context_die);
}
static dw_die_ref
gen_compile_unit_die (const char *filename)
{
  dw_die_ref die;
  char producer[250];
  const char *language_string = lang_hooks.name;
  int language;
  die = new_die (DW_TAG_compile_unit, ((void *)0), ((void *)0));
  if (filename)
    {
      add_name_attribute (die, filename);
      if (filename[0] != '/' && filename[0] != '<')
 add_comp_dir_attribute (die);
    }
  sprintf (producer, "%s %s", language_string, version_string);
  add_AT_string (die, DW_AT_producer, producer);
  if (strcmp (language_string, "GNU C++") == 0)
    language = DW_LANG_C_plus_plus;
  else if (strcmp (language_string, "GNU Ada") == 0)
    language = DW_LANG_Ada95;
  else if (strcmp (language_string, "GNU F77") == 0)
    language = DW_LANG_Fortran77;
  else if (strcmp (language_string, "GNU F95") == 0)
    language = DW_LANG_Fortran95;
  else if (strcmp (language_string, "GNU Pascal") == 0)
    language = DW_LANG_Pascal83;
  else if (strcmp (language_string, "GNU Java") == 0)
    language = DW_LANG_Java;
  else
    language = DW_LANG_C89;
  add_AT_unsigned (die, DW_AT_language, language);
  return die;
}
static void
gen_string_type_die (tree type, dw_die_ref context_die)
{
  dw_die_ref type_die
    = new_die (DW_TAG_string_type, scope_die_for (type, context_die), type);
  equate_type_number_to_die (type, type_die);
}
static void
gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
{
  dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
  add_type_attribute (die, (((binfo))->common.type), 0, 0, context_die);
  add_data_member_location_attribute (die, binfo);
  if (((binfo)->common.static_flag))
    add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
  if (access == global_trees[TI_PUBLIC])
    add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
  else if (access == global_trees[TI_PROTECTED])
    add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
}
static void
gen_member_die (tree type, dw_die_ref context_die)
{
  tree member;
  tree binfo = ((type)->type.binfo);
  dw_die_ref child;
  if (binfo && ((binfo)->binfo.base_types))
    {
      tree bases = ((binfo)->binfo.base_types);
      tree accesses = ((binfo)->binfo.base_accesses);
      int n_bases = ((bases)->vec.length);
      int i;
      for (i = 0; i < n_bases; i++)
 gen_inheritance_die (((bases)->vec.a[i]),
        (accesses ? ((accesses)->vec.a[i])
         : global_trees[TI_PUBLIC]), context_die);
    }
  for (member = ((type)->type.value1s); member; member = ((member)->common.chain))
    {
      child = lookup_decl_die (member);
      if (child)
 splice_child_die (context_die, child);
      else
 gen_decl_die (member, context_die);
    }
  for (member = ((type)->type.maxval); member; member = ((member)->common.chain))
    {
      if (((member)->decl.abstract_origin))
 continue;
      child = lookup_decl_die (member);
      if (child)
 splice_child_die (context_die, child);
      else
 gen_decl_die (member, context_die);
    }
}
static void
gen_struct_or_union_type_die (tree type, dw_die_ref context_die)
{
  dw_die_ref type_die = lookup_type_die (type);
  dw_die_ref scope_die = 0;
  int nested = 0;
  int complete = (((type)->type.size)
    && (! ((type)->common.chain)
        || ! ((((type)->common.chain))->decl.external_flag)));
  int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
  if (type_die && ! complete)
    return;
  if (((type)->type.context) != (tree) ((void *)0)
      && ((((enum tree_code) (((type)->type.context))->common.code) == ARRAY_TYPE || ((enum tree_code) (((type)->type.context))->common.code) == RECORD_TYPE || ((enum tree_code) (((type)->type.context))->common.code) == UNION_TYPE || ((enum tree_code) (((type)->type.context))->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (((type)->type.context))->common.code) == SET_TYPE)
   || ((enum tree_code) (((type)->type.context))->common.code) == NAMESPACE_DECL))
    nested = 1;
  scope_die = scope_die_for (type, context_die);
  if (! type_die || (nested && scope_die == comp_unit_die))
    {
      dw_die_ref old_die = type_die;
      type_die = new_die (((enum tree_code) (type)->common.code) == RECORD_TYPE
     ? DW_TAG_structure_type : DW_TAG_union_type,
     scope_die, type);
      equate_type_number_to_die (type, type_die);
      if (old_die)
 add_AT_specification (type_die, old_die);
      else
 add_name_attribute (type_die, type_tag (type));
    }
  else
    remove_AT (type_die, DW_AT_declaration);
  if (complete && !ns_decl)
    {
      ((type)->common.asm_written_flag) = 1;
      add_byte_size_attribute (type_die, type);
      if (((type)->common.chain) != (tree) ((void *)0))
 add_src_coords_attributes (type_die, ((type)->common.chain));
      if (type_die->die_parent == ((void *)0))
 add_child_die (scope_die, type_die);
      push_decl_scope (type);
      gen_member_die (type, type_die);
      pop_decl_scope ();
      if (((type)->type.minval))
 {
   tree vtype = ((((type)->type.minval))->decl.vindex);
   gen_type_die (vtype, context_die);
   add_AT_die_ref (type_die, DW_AT_containing_type,
     lookup_type_die (vtype));
 }
    }
  else
    {
      add_AT_flag (type_die, DW_AT_declaration, 1);
      if (((type)->common.chain)
   && ! decl_function_context (((type)->common.chain)))
 do { if ((incomplete_types)->elements_used >= (incomplete_types)->num_elements) (((incomplete_types)) = varray_grow ((incomplete_types), 2 * (incomplete_types)->num_elements)); (incomplete_types)->data.tree1[(incomplete_types)->elements_used++] = (type); } while (0);
    }
}
static void
gen_subroutine_type_die (tree type, dw_die_ref context_die)
{
  tree return_type = ((type)->common.type);
  dw_die_ref subr_die
    = new_die (DW_TAG_subroutine_type,
        scope_die_for (type, context_die), type);
  equate_type_number_to_die (type, subr_die);
  add_prototyped_attribute (subr_die, type);
  add_type_attribute (subr_die, return_type, 0, 0, context_die);
  gen_formal_types_die (type, subr_die);
}
static void
gen_typedef_die (tree decl, dw_die_ref context_die)
{
  dw_die_ref type_die;
  tree origin;
  if (((decl)->common.asm_written_flag))
    return;
  ((decl)->common.asm_written_flag) = 1;
  type_die = new_die (DW_TAG_typedef, context_die, decl);
  origin = decl_ultimate_origin (decl);
  if (origin != ((void *)0))
    add_abstract_origin_attribute (type_die, origin);
  else
    {
      tree type;
      add_name_and_src_coords_attributes (type_die, decl);
      if (((decl)->decl.result))
 {
   type = ((decl)->decl.result);
   if (type == ((decl)->common.type))
     abort ();
   else
     equate_type_number_to_die (((decl)->common.type), type_die);
 }
      else
 type = ((decl)->common.type);
      add_type_attribute (type_die, type, ((decl)->common.readonly_flag),
     ((decl)->common.volatile_flag), context_die);
    }
  if (((decl)->decl.abstract_flag))
    equate_decl_number_to_die (decl, type_die);
}
static void
gen_type_die (tree type, dw_die_ref context_die)
{
  int need_pop;
  if (type == (tree) ((void *)0) || type == global_trees[TI_ERROR_MARK])
    return;
  if (((type)->type.name) && ((enum tree_code) (((type)->type.name))->common.code) == TYPE_DECL
      && ((((type)->type.name))->decl.result))
    {
      if (((type)->common.asm_written_flag))
 return;
      if (((((type)->type.name))->decl.result) == type)
 abort ();
      ((type)->common.asm_written_flag) = 1;
      gen_decl_die (((type)->type.name), context_die);
      return;
    }
  if (((enum tree_code) (type)->common.code) != VECTOR_TYPE)
    type = type_main_variant (type);
  if (((type)->common.asm_written_flag))
    return;
  switch (((enum tree_code) (type)->common.code))
    {
    case ERROR_MARK:
      break;
    case POINTER_TYPE:
    case REFERENCE_TYPE:
      ((type)->common.asm_written_flag) = 1;
      gen_type_die (((type)->common.type), context_die);
      break;
    case OFFSET_TYPE:
      gen_type_die (((type)->type.maxval), context_die);
      gen_type_die (((type)->common.type), context_die);
      gen_ptr_to_mbr_type_die (type, context_die);
      break;
    case SET_TYPE:
      gen_type_die (((type)->type.value1s), context_die);
      gen_set_type_die (type, context_die);
      break;
    case FILE_TYPE:
      gen_type_die (((type)->common.type), context_die);
      abort ();
      break;
    case FUNCTION_TYPE:
      gen_type_die (((type)->common.type), context_die);
      gen_subroutine_type_die (type, context_die);
      break;
    case METHOD_TYPE:
      gen_type_die (((type)->common.type), context_die);
      gen_subroutine_type_die (type, context_die);
      break;
    case ARRAY_TYPE:
      if (((type)->type.string1_flag) && ((enum tree_code) (((type)->common.type))->common.code) == CHAR_TYPE)
 {
   gen_type_die (((type)->common.type), context_die);
   gen_string_type_die (type, context_die);
 }
      else
 gen_array_type_die (type, context_die);
      break;
    case VECTOR_TYPE:
      gen_array_type_die (type, context_die);
      break;
    case ENUMERAL_TYPE:
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      if (((type)->type.context)
   && (((enum tree_code) (((type)->type.context))->common.code) == ARRAY_TYPE || ((enum tree_code) (((type)->type.context))->common.code) == RECORD_TYPE || ((enum tree_code) (((type)->type.context))->common.code) == UNION_TYPE || ((enum tree_code) (((type)->type.context))->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (((type)->type.context))->common.code) == SET_TYPE)
   && ! ((((type)->type.context))->common.asm_written_flag))
 {
   gen_type_die (((type)->type.context), context_die);
   if (((type)->common.asm_written_flag))
     return;
   push_decl_scope (((type)->type.context));
   context_die = lookup_type_die (((type)->type.context));
   need_pop = 1;
 }
      else
 {
   declare_in_namespace (type, context_die);
   need_pop = 0;
 }
      if (((enum tree_code) (type)->common.code) == ENUMERAL_TYPE)
 gen_enumeration_type_die (type, context_die);
      else
 gen_struct_or_union_type_die (type, context_die);
      if (need_pop)
 pop_decl_scope ();
      return;
    case VOID_TYPE:
    case INTEGER_TYPE:
    case REAL_TYPE:
    case COMPLEX_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
      break;
    case LANG_TYPE:
      break;
    default:
      abort ();
    }
  ((type)->common.asm_written_flag) = 1;
}
static void
gen_tagged_type_instantiation_die (tree type, dw_die_ref context_die)
{
  if (type == (tree) ((void *)0) || type == global_trees[TI_ERROR_MARK])
    return;
  if (type != type_main_variant (type))
    abort ();
  switch (((enum tree_code) (type)->common.code))
    {
    case ERROR_MARK:
      break;
    case ENUMERAL_TYPE:
      gen_inlined_enumeration_type_die (type, context_die);
      break;
    case RECORD_TYPE:
      gen_inlined_structure_type_die (type, context_die);
      break;
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      gen_inlined_union_type_die (type, context_die);
      break;
    default:
      abort ();
    }
}
static void
gen_block_die (tree stmt, dw_die_ref context_die, int depth)
{
  int must_output_die = 0;
  tree origin;
  tree decl;
  enum tree_code origin_code;
  if (stmt == (tree) ((void *)0) || !((stmt)->common.used_flag)
      || (!((stmt)->common.asm_written_flag) && !((stmt)->block.abstract_flag)))
    return;
  if (((stmt)->block.fragment_origin))
    {
      tree sub;
      for (sub = ((stmt)->block.subblocks); sub; sub = (((sub))->common.chain))
 gen_block_die (sub, context_die, depth + 1);
      return;
    }
  origin = block_ultimate_origin (stmt);
  origin_code = (origin != ((void *)0)) ? ((enum tree_code) (origin)->common.code) : ERROR_MARK;
  if (origin_code == FUNCTION_DECL)
    must_output_die = 1;
  else
    {
      if (! is_body_block (origin ? origin : stmt))
 {
   if (debug_info_level > DINFO_LEVEL_TERSE)
     must_output_die = (((stmt)->block.vars) != ((void *)0));
   else
     for (decl = ((stmt)->block.vars);
   decl != ((void *)0); decl = ((decl)->common.chain))
       if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL
    && ((decl)->decl.initial))
  {
    must_output_die = 1;
    break;
  }
 }
    }
  if (must_output_die)
    {
      if (origin_code == FUNCTION_DECL)
 gen_inlined_subroutine_die (stmt, context_die, depth);
      else
 gen_lexical_block_die (stmt, context_die, depth);
    }
  else
    decls_for_scope (stmt, context_die, depth);
}
static void
decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
{
  tree decl;
  tree subblocks;
  if (stmt == (tree) ((void *)0) || ! ((stmt)->common.used_flag))
    return;
  for (decl = ((stmt)->block.vars); decl != ((void *)0); decl = ((decl)->common.chain))
    {
      dw_die_ref die;
      if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
 die = lookup_decl_die (decl);
      else if (((enum tree_code) (decl)->common.code) == TYPE_DECL && (((decl)->decl.name) == (tree) ((void *)0) || (((decl)->decl.artificial_flag) && is_tagged_type (((decl)->common.type)) && ((decl == ((((decl)->common.type))->common.chain)) || (((decl)->decl.abstract_origin) != (tree) ((void *)0) && (decl_ultimate_origin (decl) == ((((decl)->common.type))->common.chain)))))))
 die = lookup_type_die (((decl)->common.type));
      else
 die = ((void *)0);
      if (die != ((void *)0) && die->die_parent == ((void *)0))
 add_child_die (context_die, die);
      else
 gen_decl_die (decl, context_die);
    }
  if (debug_info_level <= DINFO_LEVEL_TERSE)
    return;
  for (subblocks = ((stmt)->block.subblocks);
       subblocks != ((void *)0);
       subblocks = (((subblocks))->common.chain))
    gen_block_die (subblocks, context_die, depth + 1);
}
static int
is_redundant_typedef (tree decl)
{
  if ((((decl)->decl.name) == (tree) ((void *)0) || (((decl)->decl.artificial_flag) && is_tagged_type (((decl)->common.type)) && ((decl == ((((decl)->common.type))->common.chain)) || (((decl)->decl.abstract_origin) != (tree) ((void *)0) && (decl_ultimate_origin (decl) == ((((decl)->common.type))->common.chain)))))))
    return 1;
  if (((decl)->decl.artificial_flag)
      && ((decl)->decl.context)
      && is_tagged_type (((decl)->decl.context))
      && ((enum tree_code) (((((decl)->decl.context))->type.name))->common.code) == TYPE_DECL
      && ((decl)->decl.name) == ((((((decl)->decl.context))->type.name))->decl.name))
    return 1;
  return 0;
}
static dw_die_ref
force_decl_die (tree decl)
{
  dw_die_ref decl_die;
  unsigned saved_external_flag;
  tree save_fn = (tree) ((void *)0);
  decl_die = lookup_decl_die (decl);
  if (!decl_die)
    {
      dw_die_ref context_die;
      tree decl_context = ((decl)->decl.context);
      if (decl_context)
 {
   if ((tree_code_type[(int) (((enum tree_code) (decl_context)->common.code))] == 't'))
     context_die = force_type_die (decl_context);
   else
     context_die = force_decl_die (decl_context);
 }
      else
 context_die = comp_unit_die;
      switch (((enum tree_code) (decl)->common.code))
 {
 case FUNCTION_DECL:
   save_fn = current_function_decl;
   current_function_decl = (tree) ((void *)0);
   gen_subprogram_die (decl, context_die);
   current_function_decl = save_fn;
   break;
 case VAR_DECL:
   saved_external_flag = ((decl)->decl.external_flag);
   ((decl)->decl.external_flag) = 1;
   gen_decl_die (decl, context_die);
   ((decl)->decl.external_flag) = saved_external_flag;
   break;
 case NAMESPACE_DECL:
   dwarf2out_decl (decl);
   break;
 default:
   abort ();
 }
      if (!decl_die)
 decl_die = lookup_decl_die (decl);
      if (!decl_die)
 abort ();
    }
  return decl_die;
}
static dw_die_ref
force_type_die (tree type)
{
  dw_die_ref type_die;
  type_die = lookup_type_die (type);
  if (!type_die)
    {
      dw_die_ref context_die;
      if (((type)->type.context))
 if ((tree_code_type[(int) (((enum tree_code) (((type)->type.context))->common.code))] == 't'))
   context_die = force_type_die (((type)->type.context));
 else
   context_die = force_decl_die (((type)->type.context));
      else
 context_die = comp_unit_die;
      gen_type_die (type, context_die);
      type_die = lookup_type_die (type);
      if (!type_die)
 abort();
    }
  return type_die;
}
static dw_die_ref
setup_namespace_context (tree thing, dw_die_ref context_die)
{
  tree context = (tree_code_type[(int) (((enum tree_code) (thing)->common.code))] == 'd') ? ((thing)->decl.context) : ((thing)->type.context);
  if (context && ((enum tree_code) (context)->common.code) == NAMESPACE_DECL)
    context_die = force_decl_die (context);
  return context_die;
}
static void
declare_in_namespace (tree thing, dw_die_ref context_die)
{
  dw_die_ref ns_context;
  if (debug_info_level <= DINFO_LEVEL_TERSE)
    return;
  ns_context = setup_namespace_context (thing, context_die);
  if (ns_context != context_die)
    {
      if ((tree_code_type[(int) (((enum tree_code) (thing)->common.code))] == 'd'))
 gen_decl_die (thing, ns_context);
      else
 gen_type_die (thing, ns_context);
    }
}
static void
gen_namespace_die (tree decl)
{
  dw_die_ref context_die = setup_namespace_context (decl, comp_unit_die);
  if (((decl)->decl.abstract_origin) == ((void *)0))
    {
      dw_die_ref namespace_die
 = new_die (DW_TAG_namespace, context_die, decl);
      add_name_and_src_coords_attributes (namespace_die, decl);
      equate_decl_number_to_die (decl, namespace_die);
    }
  else
    {
      dw_die_ref origin_die
 = force_decl_die (((decl)->decl.abstract_origin));
      dw_die_ref namespace_die
 = new_die (DW_TAG_imported_declaration, context_die, decl);
      add_name_and_src_coords_attributes (namespace_die, decl);
      add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
      equate_decl_number_to_die (decl, namespace_die);
    }
}
static void
gen_decl_die (tree decl, dw_die_ref context_die)
{
  tree origin;
  if ((tree_code_type[(int) (((enum tree_code) (decl)->common.code))] == 'd') && ((decl)->decl.ignored_flag))
    return;
  switch (((enum tree_code) (decl)->common.code))
    {
    case ERROR_MARK:
      break;
    case CONST_DECL:
      break;
    case FUNCTION_DECL:
      if (((decl)->decl.initial) == (tree) ((void *)0) && ((decl)->decl.context) == (tree) ((void *)0)
   && (current_function_decl == (tree) ((void *)0) || ((decl)->decl.artificial_flag)))
 break;
      if ((((decl)->decl.abstract_origin) ? ((decl)->decl.abstract_origin) : (decl)) != decl)
 dwarf2out_abstract_function (((decl)->decl.abstract_origin));
      else if (cgraph_function_possibly_inlined_p (decl)
        && ! ((decl)->decl.abstract_flag)
        && ! class_or_namespace_scope_p (context_die)
        && ((decl)->decl.initial) != (tree) ((void *)0))
 {
   dwarf2out_abstract_function (decl);
   set_decl_origin_self (decl);
 }
      else if (debug_info_level > DINFO_LEVEL_TERSE)
 {
   gen_type_die (((((decl)->common.type))->common.type), context_die);
   if (((decl)->decl.vindex) != (tree) ((void *)0))
     gen_type_die (((decl)->decl.context), context_die);
   origin = decl_class_context (decl);
   if (origin != (tree) ((void *)0))
     gen_type_die_for_member (origin, decl, context_die);
   declare_in_namespace (decl, context_die);
 }
      gen_subprogram_die (decl, context_die);
      break;
    case TYPE_DECL:
      if (debug_info_level <= DINFO_LEVEL_TERSE)
 break;
      if ((((decl)->decl.name) == (tree) ((void *)0) || (((decl)->decl.artificial_flag) && is_tagged_type (((decl)->common.type)) && ((decl == ((((decl)->common.type))->common.chain)) || (((decl)->decl.abstract_origin) != (tree) ((void *)0) && (decl_ultimate_origin (decl) == ((((decl)->common.type))->common.chain)))))) && decl_ultimate_origin (decl) != (tree) ((void *)0))
 {
   gen_tagged_type_instantiation_die (((decl)->common.type), context_die);
   break;
 }
      if (is_redundant_typedef (decl))
 gen_type_die (((decl)->common.type), context_die);
      else
 gen_typedef_die (decl, context_die);
      break;
    case LABEL_DECL:
      if (debug_info_level >= DINFO_LEVEL_NORMAL)
 gen_label_die (decl, context_die);
      break;
    case VAR_DECL:
    case RESULT_DECL:
      if (debug_info_level <= DINFO_LEVEL_TERSE)
 break;
      gen_type_die (((decl)->common.type), context_die);
      origin = decl_class_context (decl);
      if (origin != (tree) ((void *)0))
 gen_type_die_for_member (origin, decl, context_die);
      declare_in_namespace (decl, context_die);
      origin = decl_ultimate_origin (decl);
      if (origin != (tree) ((void *)0) && ((enum tree_code) (origin)->common.code) == PARM_DECL)
 gen_formal_parameter_die (decl, context_die);
      else
 gen_variable_die (decl, context_die);
      break;
    case FIELD_DECL:
      if (((decl)->decl.name) != (tree) ((void *)0)
   || ((enum tree_code) (((decl)->common.type))->common.code) == UNION_TYPE
   || ((enum tree_code) (((decl)->common.type))->common.code) == RECORD_TYPE)
 {
   gen_type_die (member_declared_type (decl), context_die);
   gen_field_die (decl, context_die);
 }
      break;
    case PARM_DECL:
      gen_type_die (((decl)->common.type), context_die);
      gen_formal_parameter_die (decl, context_die);
      break;
    case NAMESPACE_DECL:
      gen_namespace_die (decl);
      break;
    default:
      if ((int)((enum tree_code) (decl)->common.code) > ((int) LAST_AND_UNUSED_TREE_CODE))
 break;
      abort ();
    }
}
void
dwarf2out_add_library_unit_info (const char *filename, const char *context_list)
{
  unsigned int file_index;
  if (filename != ((void *)0))
    {
      dw_die_ref unit_die = new_die (DW_TAG_module, comp_unit_die, ((void *)0));
      tree context_list_decl
 = build_decl_stat (LABEL_DECL,get_identifier (context_list),global_trees[TI_VOID_TYPE] )
                       ;
      ((context_list_decl)->common.public_flag) = 1;
      add_name_attribute (unit_die, context_list);
      file_index = lookup_filename (filename);
      add_AT_unsigned (unit_die, DW_AT_decl_file, file_index);
      add_pubname (context_list_decl, unit_die);
    }
}
static void
dwarf2out_global_decl (tree decl)
{
  if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL || !((decl)->decl.initial))
    dwarf2out_decl (decl);
}
static void
dwarf2out_type_decl (tree decl, int local)
{
  if (!local)
    dwarf2out_decl (decl);
}
static void
dwarf2out_imported_module_or_decl (tree decl, tree context)
{
  dw_die_ref imported_die, at_import_die;
  dw_die_ref scope_die;
  unsigned file_index;
  expanded_location xloc;
  if (debug_info_level <= DINFO_LEVEL_TERSE)
    return;
  if (!decl)
    abort ();
  if (!context)
    scope_die = comp_unit_die;
  else if ((tree_code_type[(int) (((enum tree_code) (context)->common.code))] == 't'))
    scope_die = force_type_die (context);
  else
    scope_die = force_decl_die (context);
  if (((enum tree_code) (decl)->common.code) == TYPE_DECL || ((enum tree_code) (decl)->common.code) == CONST_DECL)
    at_import_die = force_type_die (((decl)->common.type));
  else
    at_import_die = force_decl_die (decl);
  if (((enum tree_code) (decl)->common.code) == NAMESPACE_DECL)
    imported_die = new_die (DW_TAG_imported_module, scope_die, context);
  else
    imported_die = new_die (DW_TAG_imported_declaration, scope_die, context);
  xloc = (input_location);
  file_index = lookup_filename (xloc.file);
  add_AT_unsigned (imported_die, DW_AT_decl_file, file_index);
  add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
  add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
}
void
dwarf2out_decl (tree decl)
{
  dw_die_ref context_die = comp_unit_die;
  switch (((enum tree_code) (decl)->common.code))
    {
    case ERROR_MARK:
      return;
    case FUNCTION_DECL:
      if (((decl)->decl.initial) == (tree) ((void *)0))
 return;
      if (decl_function_context (decl)
   && debug_info_level > DINFO_LEVEL_TERSE)
 context_die = ((void *)0);
      break;
    case VAR_DECL:
      if (((decl)->decl.external_flag) && !((decl)->common.used_flag))
 return;
      if (debug_info_level <= DINFO_LEVEL_TERSE)
 return;
      break;
    case NAMESPACE_DECL:
      if (debug_info_level <= DINFO_LEVEL_TERSE)
 return;
      if (lookup_decl_die (decl) != ((void *)0))
        return;
      break;
    case TYPE_DECL:
      if (((decl)->decl.external_flag))
 return;
      if (((((((decl)->decl.locus))).line) == 0))
 {
   if ((get_AT_unsigned (comp_unit_die, DW_AT_language)
        == DW_LANG_C_plus_plus)
       && ((enum tree_code) (((decl)->common.type))->common.code) == BOOLEAN_TYPE
       && ! ((decl)->decl.ignored_flag))
     modified_type_die (((decl)->common.type), 0, 0, ((void *)0));
   return;
 }
      if (debug_info_level <= DINFO_LEVEL_TERSE)
 return;
      if (decl_function_context (decl))
 context_die = ((void *)0);
      break;
    default:
      return;
    }
  gen_decl_die (decl, context_die);
}
static void
dwarf2out_begin_block (unsigned int line ,
         unsigned int blocknum)
{
  function_section (current_function_decl);
  (*targetm.asm_out.internal_label) (asm_out_file, "LBB", blocknum);
}
static void
dwarf2out_end_block (unsigned int line , unsigned int blocknum)
{
  function_section (current_function_decl);
  (*targetm.asm_out.internal_label) (asm_out_file, "LBE", blocknum);
}
static unsigned char
dwarf2out_ignore_block (tree block)
{
  tree decl;
  for (decl = ((block)->block.vars); decl; decl = ((decl)->common.chain))
    if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL
 || (((enum tree_code) (decl)->common.code) == TYPE_DECL && (((decl)->decl.name) == (tree) ((void *)0) || (((decl)->decl.artificial_flag) && is_tagged_type (((decl)->common.type)) && ((decl == ((((decl)->common.type))->common.chain)) || (((decl)->decl.abstract_origin) != (tree) ((void *)0) && (decl_ultimate_origin (decl) == ((((decl)->common.type))->common.chain))))))))
      return 0;
  return 1;
}
static unsigned
lookup_filename (const char *file_name)
{
  size_t i, n;
  char *save_file_name;
  if (file_table_last_lookup_index != 0)
    {
      const char *last
 = ((file_table)->data.cptr[file_table_last_lookup_index]);
      if (strcmp (file_name, last) == 0)
 return file_table_last_lookup_index;
    }
  n = ((file_table)->elements_used);
  for (i = 1; i < n; i++)
    if (strcmp (file_name, ((file_table)->data.cptr[i])) == 0)
      {
 file_table_last_lookup_index = i;
 return i;
      }
  file_table_last_lookup_index = n;
  save_file_name = (char *) ggc_alloc_string((file_name), -1);
  do { if ((file_table)->elements_used >= (file_table)->num_elements) (((file_table)) = varray_grow ((file_table), 2 * (file_table)->num_elements)); (file_table)->data.cptr[(file_table)->elements_used++] = (save_file_name); } while (0);
  do { if ((file_table_emitted)->elements_used >= (file_table_emitted)->num_elements) (((file_table_emitted)) = varray_grow ((file_table_emitted), 2 * (file_table_emitted)->num_elements)); (file_table_emitted)->data.u[(file_table_emitted)->elements_used++] = (0); } while (0);
  return i;
}
static int
maybe_emit_file (int fileno)
{
  if (1 && fileno > 0)
    {
      if (!((file_table_emitted)->data.u[fileno]))
 {
   ((file_table_emitted)->data.u[fileno]) = ++emitcount;
   fprintf (asm_out_file, "\t.file %u ",
     ((file_table_emitted)->data.u[fileno]));
   output_quoted_string (asm_out_file,
    ((file_table)->data.cptr[fileno]));
   fputc_unlocked ('\n', asm_out_file);
 }
      return ((file_table_emitted)->data.u[fileno]);
    }
  else
    return fileno;
}
static void
init_file_table (void)
{
  file_table = varray_init (64, VARRAY_DATA_CPTR, "file_table");
  file_table_emitted = varray_init (64, VARRAY_DATA_U, "file_table_emitted");
  do { if ((file_table)->elements_used >= (file_table)->num_elements) (((file_table)) = varray_grow ((file_table), 2 * (file_table)->num_elements)); (file_table)->data.cptr[(file_table)->elements_used++] = (((void *)0)); } while (0);
  do { if ((file_table_emitted)->elements_used >= (file_table_emitted)->num_elements) (((file_table_emitted)) = varray_grow ((file_table_emitted), 2 * (file_table_emitted)->num_elements)); (file_table_emitted)->data.u[(file_table_emitted)->elements_used++] = (0); } while (0);
  file_table_last_lookup_index = 0;
}
static void
dwarf2out_var_location (rtx loc_note)
{
  char loclabel[30];
  struct var_loc_node *newloc;
  rtx prev_insn;
  static rtx last_insn;
  static const char *last_label;
  if (!(tree_code_type[(int) (((enum tree_code) ((((((((loc_note)->u.fld[4]).rtx1))->u.fld[0]).rttree)))->common.code))] == 'd'))
    return;
  prev_insn = (((loc_note)->u.fld[1]).rtx1);
  newloc = ggc_alloc_cleared_stat (sizeof (struct var_loc_node) );
  if (last_insn != (rtx) 0
      && last_insn == prev_insn
      && ((enum rtx_code) (prev_insn)->code) == NOTE
      && (((prev_insn)->u.fld[5]).rtint) == NOTE_INSN_VAR_LOCATION)
    {
      newloc->label = last_label;
    }
  else
    {
      do { sprintf (loclabel, "*.%s%u", "LVL", (unsigned) (loclabel_num)); } while (0);
      (*targetm.asm_out.internal_label) (asm_out_file, "LVL", loclabel_num);
      loclabel_num++;
      newloc->label = ggc_alloc_string((loclabel), -1);
    }
  newloc->var_loc_note = loc_note;
  newloc->next = ((void *)0);
  last_insn = loc_note;
  last_label = newloc->label;
  add_var_loc_to_decl ((((((((loc_note)->u.fld[4]).rtx1))->u.fld[0]).rttree)), newloc);
}
static void
dwarf2out_begin_function (tree unused )
{
  htab_empty (decl_loc_table);
}
static void
dwarf2out_source_line (unsigned int line, const char *filename)
{
  if (debug_info_level >= DINFO_LEVEL_NORMAL
      && line != 0)
    {
      function_section (current_function_decl);
      if (flag_debug_asm)
 fprintf (asm_out_file, "\t%s %s:%d\n", "#",
   filename, line);
      if (1)
 {
   unsigned file_num = lookup_filename (filename);
   file_num = maybe_emit_file (file_num);
   fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line);
   line_info_table_in_use++;
   if (((current_function_decl)->decl.section_name))
     separate_line_info_table_in_use++;
 }
      else if (((current_function_decl)->decl.section_name))
 {
   dw_separate_line_info_ref line_info;
   targetm.asm_out.internal_label (asm_out_file, "LSM",
         separate_line_info_table_in_use);
   if (separate_line_info_table_in_use
       == separate_line_info_table_allocated)
     {
       separate_line_info_table_allocated += 1024;
       separate_line_info_table
  = ggc_realloc_stat (separate_line_info_table,separate_line_info_table_allocated * sizeof (dw_separate_line_info_entry) )
                                                 ;
       memset (separate_line_info_table
         + separate_line_info_table_in_use,
        0,
        (1024
         * sizeof (dw_separate_line_info_entry)));
     }
   line_info
     = &separate_line_info_table[separate_line_info_table_in_use++];
   line_info->dw_file_num = lookup_filename (filename);
   line_info->dw_line_num = line;
   line_info->function = (cfun->funcdef_no);
 }
      else
 {
   dw_line_info_ref line_info;
   targetm.asm_out.internal_label (asm_out_file, "LM",
         line_info_table_in_use);
   if (line_info_table_in_use == line_info_table_allocated)
     {
       line_info_table_allocated += 1024;
       line_info_table
  = ggc_realloc_stat (line_info_table,(line_info_table_allocated * sizeof (dw_line_info_entry)) )
                                   ;
       memset (line_info_table + line_info_table_in_use, 0,
        1024 * sizeof (dw_line_info_entry));
     }
   line_info = &line_info_table[line_info_table_in_use++];
   line_info->dw_file_num = lookup_filename (filename);
   line_info->dw_line_num = line;
 }
    }
}
static void
dwarf2out_start_source_file (unsigned int lineno, const char *filename)
{
  if (flag_eliminate_dwarf2_dups)
    {
      dw_die_ref bincl_die;
      bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, ((void *)0));
      add_AT_string (bincl_die, DW_AT_name, filename);
    }
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
    {
      named_section_flags (".debug_macinfo", 0x00400);
      dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
      dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
       lineno);
      maybe_emit_file (lookup_filename (filename));
      dw2_asm_output_data_uleb128 (lookup_filename (filename),
       "Filename we just started");
    }
}
static void
dwarf2out_end_source_file (unsigned int lineno )
{
  if (flag_eliminate_dwarf2_dups)
    new_die (DW_TAG_GNU_EINCL, comp_unit_die, ((void *)0));
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
    {
      named_section_flags (".debug_macinfo", 0x00400);
      dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
    }
}
static void
dwarf2out_define (unsigned int lineno ,
    const char *buffer )
{
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
    {
      named_section_flags (".debug_macinfo", 0x00400);
      dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
      dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
      dw2_asm_output_nstring (buffer, -1, "The macro");
    }
}
static void
dwarf2out_undef (unsigned int lineno ,
   const char *buffer )
{
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
    {
      named_section_flags (".debug_macinfo", 0x00400);
      dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
      dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
      dw2_asm_output_nstring (buffer, -1, "The macro");
    }
}
static void
dwarf2out_init (const char *filename )
{
  init_file_table ();
  decl_die_table = htab_create_alloc (10, decl_die_table_hash, decl_die_table_eq, ((void *)0), ggc_calloc, ((void *)0))
                                ;
  decl_loc_table = htab_create_alloc (10, decl_loc_table_hash, decl_loc_table_eq, ((void *)0), ggc_calloc, ((void *)0))
                                ;
  decl_scope_table = varray_init (256, VARRAY_DATA_TREE, "decl_scope_table");
  abbrev_die_table = ggc_alloc_cleared_stat (256 * sizeof (dw_die_ref) )
                           ;
  abbrev_die_table_allocated = 256;
  abbrev_die_table_in_use = 1;
  line_info_table = ggc_alloc_cleared_stat (1024 * sizeof (dw_line_info_entry) )
                                         ;
  line_info_table_allocated = 1024;
  line_info_table_in_use = 1;
  comp_unit_die = gen_compile_unit_die (((void *)0));
  incomplete_types = varray_init (64, VARRAY_DATA_TREE, "incomplete_types");
  used_rtx_varray = varray_init (32, VARRAY_DATA_RTX, "used_rtx_varray");
  do { sprintf (text_end_label, "*.%s%u", "Letext", (unsigned) (0)); } while (0);
  do { sprintf (abbrev_section_label, "*.%s%u", "Ldebug_abbrev", (unsigned) (0)); } while (0)
                                        ;
  if (1)
    do { sprintf (text_section_label, "*.%s%u", "Ltext", (unsigned) (0)); } while (0);
  else
    strcpy (text_section_label, stripattributes (".text"));
  do { sprintf (debug_info_section_label, "*.%s%u", "Ldebug_info", (unsigned) (0)); } while (0)
                                      ;
  do { sprintf (debug_line_section_label, "*.%s%u", "Ldebug_line", (unsigned) (0)); } while (0)
                                      ;
  do { sprintf (ranges_section_label, "*.%s%u", "Ldebug_ranges", (unsigned) (0)); } while (0)
                                        ;
  named_section_flags (".debug_abbrev", 0x00400);
  do { assemble_name ((asm_out_file), (abbrev_section_label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  named_section_flags (".debug_info", 0x00400);
  do { assemble_name ((asm_out_file), (debug_info_section_label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  named_section_flags (".debug_line", 0x00400);
  do { assemble_name ((asm_out_file), (debug_line_section_label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
    {
      named_section_flags (".debug_macinfo", 0x00400);
      do { sprintf (macinfo_section_label, "*.%s%u", "Ldebug_macinfo", (unsigned) (0)); } while (0)
                                      ;
      do { assemble_name ((asm_out_file), (macinfo_section_label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
    }
  if (1)
    {
      text_section ();
      do { assemble_name ((asm_out_file), (text_section_label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
    }
}
static int
output_indirect_string (void **h, void *v )
{
  struct indirect_string_node *node = (struct indirect_string_node *) *h;
  if (node->form == DW_FORM_strp)
    {
      named_section_flags (".debug_str", (1 && flag_merge_constants ? 0x00400 | 0x08000 | 0x10000 | 1 : 0x00400));
      do { assemble_name ((asm_out_file), (node->label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
      assemble_string (node->str, strlen (node->str) + 1);
    }
  return 1;
}
static void
prune_unmark_dies (dw_die_ref die)
{
  dw_die_ref c;
  die->die_mark = 0;
  for (c = die->die_child; c; c = c->die_sib)
    prune_unmark_dies (c);
}
static void
prune_unused_types_walk_attribs (dw_die_ref die)
{
  dw_attr_ref a;
  for (a = die->die_attr; a != ((void *)0); a = a->dw_attr_next)
    {
      if (a->dw_attr_val.val_class == dw_val_class_die_ref)
 {
   prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
 }
      else if (a->dw_attr == DW_AT_decl_file)
 {
   a->dw_attr_val.v.val_unsigned =
     maybe_emit_file (a->dw_attr_val.v.val_unsigned);
 }
    }
}
static void
prune_unused_types_mark (dw_die_ref die, int dokids)
{
  dw_die_ref c;
  if (die->die_mark == 0)
    {
      die->die_mark = 1;
      if (die->die_parent)
 prune_unused_types_mark (die->die_parent, 0);
      prune_unused_types_walk_attribs (die);
      if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
        prune_unused_types_mark (die->die_definition, 1);
    }
  if (dokids && die->die_mark != 2)
    {
      die->die_mark = 2;
      for (c = die->die_child; c; c = c->die_sib)
 {
   if (die->die_tag == DW_TAG_array_type)
     prune_unused_types_mark (c, 1);
   else
     prune_unused_types_walk (c);
 }
    }
}
static void
prune_unused_types_walk (dw_die_ref die)
{
  dw_die_ref c;
  if (die->die_mark)
    return;
  switch (die->die_tag) {
  case DW_TAG_const_type:
  case DW_TAG_packed_type:
  case DW_TAG_pointer_type:
  case DW_TAG_reference_type:
  case DW_TAG_volatile_type:
  case DW_TAG_typedef:
  case DW_TAG_array_type:
  case DW_TAG_structure_type:
  case DW_TAG_union_type:
  case DW_TAG_class_type:
  case DW_TAG_friend:
  case DW_TAG_variant_part:
  case DW_TAG_enumeration_type:
  case DW_TAG_subroutine_type:
  case DW_TAG_string_type:
  case DW_TAG_set_type:
  case DW_TAG_subrange_type:
  case DW_TAG_ptr_to_member_type:
  case DW_TAG_file_type:
    return;
  default:
    break;
  }
  die->die_mark = 1;
  prune_unused_types_walk_attribs (die);
  for (c = die->die_child; c; c = c->die_sib)
    prune_unused_types_walk (c);
}
static void
prune_unused_types_prune (dw_die_ref die)
{
  dw_die_ref c, p, n;
  if (!die->die_mark)
    abort();
  p = ((void *)0);
  for (c = die->die_child; c; c = n)
    {
      n = c->die_sib;
      if (c->die_mark)
 {
   prune_unused_types_prune (c);
   p = c;
 }
      else
 {
   if (p)
     p->die_sib = n;
   else
     die->die_child = n;
   free_die (c);
 }
    }
}
static void
prune_unused_types (void)
{
  unsigned int i;
  limbo_die_node *node;
  prune_unmark_dies (comp_unit_die);
  for (node = limbo_die_list; node; node = node->next)
    prune_unmark_dies (node->die);
  prune_unused_types_walk (comp_unit_die);
  for (node = limbo_die_list; node; node = node->next)
    prune_unused_types_walk (node->die);
  for (i = 0; i < pubname_table_in_use; i++)
    prune_unused_types_mark (pubname_table[i].die, 1);
  for (i = 0; i < arange_table_in_use; i++)
    prune_unused_types_mark (arange_table[i], 1);
  prune_unused_types_prune (comp_unit_die);
  for (node = limbo_die_list; node; node = node->next)
    prune_unused_types_prune (node->die);
  prune_unmark_dies (comp_unit_die);
  for (node = limbo_die_list; node; node = node->next)
    prune_unmark_dies (node->die);
}
static void
dwarf2out_finish (const char *filename)
{
  limbo_die_node *node, *next_node;
  dw_die_ref die = 0;
  add_name_attribute (comp_unit_die, filename);
  if (filename[0] != '/')
    add_comp_dir_attribute (comp_unit_die);
  else if (get_AT (comp_unit_die, DW_AT_comp_dir) == ((void *)0))
    {
      size_t i;
      for (i = 1; i < ((file_table)->elements_used); i++)
 if (((file_table)->data.cptr[i])[0] != '/'
     && ((file_table)->data.cptr[i])[0] != '<')
   {
     add_comp_dir_attribute (comp_unit_die);
     break;
   }
    }
  for (node = limbo_die_list; node; node = next_node)
    {
      next_node = node->next;
      die = node->die;
      if (die->die_parent == ((void *)0))
 {
   dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
   tree context;
   if (origin)
     add_child_die (origin->die_parent, die);
   else if (die == comp_unit_die)
     ;
   else if ((global_dc)->diagnostic_count[(int) (DK_ERROR)] > 0 || (global_dc)->diagnostic_count[(int) (DK_SORRY)] > 0)
     add_child_die (comp_unit_die, die);
   else if (node->created_for
     && (((tree_code_type[(int) (((enum tree_code) (node->created_for)->common.code))] == 'd')
   && (context = ((node->created_for)->decl.context)))
         || ((tree_code_type[(int) (((enum tree_code) (node->created_for)->common.code))] == 't')
      && (context = ((node->created_for)->type.context))))
     && ((enum tree_code) (context)->common.code) == FUNCTION_DECL)
     {
       origin = lookup_decl_die (context);
       if (! origin)
  abort ();
       add_child_die (origin, die);
     }
   else
     abort ();
 }
    }
  limbo_die_list = ((void *)0);
  retry_incomplete_types ();
  reverse_all_dies (comp_unit_die);
  if (flag_eliminate_unused_debug_types)
    prune_unused_types ();
  if (flag_eliminate_dwarf2_dups)
    break_out_includes (comp_unit_die);
  add_sibling_attributes (comp_unit_die);
  for (node = limbo_die_list; node; node = node->next)
    add_sibling_attributes (node->die);
  text_section ();
  targetm.asm_out.internal_label (asm_out_file, "Letext", 0);
  if (! 1)
    {
      named_section_flags (".debug_line", 0x00400);
      output_line_info ();
    }
  if (have_location_lists)
    {
      named_section_flags (".debug_loc", 0x00400);
      do { sprintf (loc_section_label, "*.%s%u", "Ldebug_loc", (unsigned) (0)); } while (0)
                                  ;
      do { assemble_name ((asm_out_file), (loc_section_label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
      output_location_lists (die);
      have_location_lists = 0;
    }
  if (separate_line_info_table_in_use == 0)
    {
      add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
      add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
    }
  else if (have_location_lists || ranges_table_in_use)
    add_AT_addr (comp_unit_die, DW_AT_entry_pc, (const_int_rtx[64]));
  if (debug_info_level >= DINFO_LEVEL_NORMAL)
    add_AT_lbl_offset (comp_unit_die, DW_AT_stmt_list,
         debug_line_section_label);
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
    add_AT_lbl_offset (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
  for (node = limbo_die_list; node; node = node->next)
    output_comp_unit (node->die, 0);
  output_comp_unit (comp_unit_die, 0);
  named_section_flags (".debug_abbrev", 0x00400);
  output_abbrev_section ();
  if (pubname_table_in_use)
    {
      named_section_flags (".debug_pubnames", 0x00400);
      output_pubnames ();
    }
  if (fde_table_in_use)
    {
      named_section_flags (".debug_aranges", 0x00400);
      output_aranges ();
    }
  if (ranges_table_in_use)
    {
      named_section_flags (".debug_ranges", 0x00400);
      do { assemble_name ((asm_out_file), (ranges_section_label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
      output_ranges ();
    }
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
    {
      named_section_flags (".debug_macinfo", 0x00400);
      dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
      dw2_asm_output_data (1, 0, "End compilation unit");
    }
  if (debug_str_hash)
    htab_traverse (debug_str_hash, output_indirect_string, ((void *)0));
}
void
gt_ggc_mx_var_loc_list_def (void *x_p)
{
  struct var_loc_list_def * const x = (struct var_loc_list_def *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).first != ((void *)0)) gt_ggc_mx_var_loc_node ((*x).first); } while (0);
    }
}
void
gt_ggc_mx_var_loc_node (void *x_p)
{
  struct var_loc_node * x = (struct var_loc_node *)x_p;
  struct var_loc_node * xlimit = x;
  while (((xlimit) != ((void *)0) && ((void *) (xlimit)) != (void *) 1 && ! ggc_set_mark (xlimit)))
   xlimit = ((*xlimit).next);
  while (x != xlimit)
    {
      do { if ((*x).var_loc_note != ((void *)0)) gt_ggc_mx_rtx_def ((*x).var_loc_note); } while (0);
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_var_loc_node ((*x).next); } while (0);
      x = ((*x).next);
    }
}
void
gt_ggc_mx_limbo_die_struct (void *x_p)
{
  struct limbo_die_struct * const x = (struct limbo_die_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).die != ((void *)0)) gt_ggc_mx_die_struct ((*x).die); } while (0);
      do { if ((*x).created_for != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).created_for); } while (0);
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_limbo_die_struct ((*x).next); } while (0);
    }
}
void
gt_ggc_mx_dw_ranges_struct (void *x_p)
{
  struct dw_ranges_struct * const x = (struct dw_ranges_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
    }
}
void
gt_ggc_mx_pubname_struct (void *x_p)
{
  struct pubname_struct * const x = (struct pubname_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).die != ((void *)0)) gt_ggc_mx_die_struct ((*x).die); } while (0);
    }
}
void
gt_ggc_mx_dw_separate_line_info_struct (void *x_p)
{
  struct dw_separate_line_info_struct * const x = (struct dw_separate_line_info_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
    }
}
void
gt_ggc_mx_dw_line_info_struct (void *x_p)
{
  struct dw_line_info_struct * const x = (struct dw_line_info_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
    }
}
void
gt_ggc_mx_dw_attr_struct (void *x_p)
{
  struct dw_attr_struct * const x = (struct dw_attr_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).dw_attr_next != ((void *)0)) gt_ggc_mx_dw_attr_struct ((*x).dw_attr_next); } while (0);
      switch (((*x).dw_attr_val).val_class)
        {
        case dw_val_class_addr:
          do { if ((*x).dw_attr_val.v.val_addr != ((void *)0)) gt_ggc_mx_rtx_def ((*x).dw_attr_val.v.val_addr); } while (0);
          break;
        case dw_val_class_offset:
          break;
        case dw_val_class_loc_list:
          do { if ((*x).dw_attr_val.v.val_loc_list != ((void *)0)) gt_ggc_mx_dw_loc_list_struct ((*x).dw_attr_val.v.val_loc_list); } while (0);
          break;
        case dw_val_class_loc:
          do { if ((*x).dw_attr_val.v.val_loc != ((void *)0)) gt_ggc_mx_dw_loc_descr_struct ((*x).dw_attr_val.v.val_loc); } while (0);
          break;
        default:
          break;
        case dw_val_class_unsigned_const:
          break;
        case dw_val_class_long_long:
          break;
        case dw_val_class_vec:
          if ((*x).dw_attr_val.v.val_vec.array != ((void *)0)) {
            size_t i0;
            for (i0 = 0; i0 < (size_t)(((*x).dw_attr_val.v.val_vec).length); i0++) {
            }
            do { const void *const a__ = ((*x).dw_attr_val.v.val_vec.array); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
          }
          break;
        case dw_val_class_die_ref:
          do { if ((*x).dw_attr_val.v.val_die_ref.die != ((void *)0)) gt_ggc_mx_die_struct ((*x).dw_attr_val.v.val_die_ref.die); } while (0);
          break;
        case dw_val_class_fde_ref:
          break;
        case dw_val_class_str:
          do { if ((*x).dw_attr_val.v.val_str != ((void *)0)) gt_ggc_mx_indirect_string_node ((*x).dw_attr_val.v.val_str); } while (0);
          break;
        case dw_val_class_lbl_id:
          break;
        case dw_val_class_flag:
          break;
        }
    }
}
void
gt_ggc_mx_dw_loc_list_struct (void *x_p)
{
  struct dw_loc_list_struct * const x = (struct dw_loc_list_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).dw_loc_next != ((void *)0)) gt_ggc_mx_dw_loc_list_struct ((*x).dw_loc_next); } while (0);
      do { if ((*x).expr != ((void *)0)) gt_ggc_mx_dw_loc_descr_struct ((*x).expr); } while (0);
    }
}
void
gt_ggc_mx_queued_reg_save (void *x_p)
{
  struct queued_reg_save * const x = (struct queued_reg_save *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_queued_reg_save ((*x).next); } while (0);
      do { if ((*x).reg != ((void *)0)) gt_ggc_mx_rtx_def ((*x).reg); } while (0);
      do { if ((*x).saved_reg != ((void *)0)) gt_ggc_mx_rtx_def ((*x).saved_reg); } while (0);
    }
}
void
gt_ggc_mx_indirect_string_node (void *x_p)
{
  struct indirect_string_node * const x = (struct indirect_string_node *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
    }
}
void
gt_ggc_mx_dw_loc_descr_struct (void *x_p)
{
  struct dw_loc_descr_struct * const x = (struct dw_loc_descr_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).dw_loc_next != ((void *)0)) gt_ggc_mx_dw_loc_descr_struct ((*x).dw_loc_next); } while (0);
      switch (((*x).dw_loc_oprnd1).val_class)
        {
        case dw_val_class_addr:
          do { if ((*x).dw_loc_oprnd1.v.val_addr != ((void *)0)) gt_ggc_mx_rtx_def ((*x).dw_loc_oprnd1.v.val_addr); } while (0);
          break;
        case dw_val_class_offset:
          break;
        case dw_val_class_loc_list:
          do { if ((*x).dw_loc_oprnd1.v.val_loc_list != ((void *)0)) gt_ggc_mx_dw_loc_list_struct ((*x).dw_loc_oprnd1.v.val_loc_list); } while (0);
          break;
        case dw_val_class_loc:
          do { if ((*x).dw_loc_oprnd1.v.val_loc != ((void *)0)) gt_ggc_mx_dw_loc_descr_struct ((*x).dw_loc_oprnd1.v.val_loc); } while (0);
          break;
        default:
          break;
        case dw_val_class_unsigned_const:
          break;
        case dw_val_class_long_long:
          break;
        case dw_val_class_vec:
          if ((*x).dw_loc_oprnd1.v.val_vec.array != ((void *)0)) {
            size_t i0;
            for (i0 = 0; i0 < (size_t)(((*x).dw_loc_oprnd1.v.val_vec).length); i0++) {
            }
            do { const void *const a__ = ((*x).dw_loc_oprnd1.v.val_vec.array); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
          }
          break;
        case dw_val_class_die_ref:
          do { if ((*x).dw_loc_oprnd1.v.val_die_ref.die != ((void *)0)) gt_ggc_mx_die_struct ((*x).dw_loc_oprnd1.v.val_die_ref.die); } while (0);
          break;
        case dw_val_class_fde_ref:
          break;
        case dw_val_class_str:
          do { if ((*x).dw_loc_oprnd1.v.val_str != ((void *)0)) gt_ggc_mx_indirect_string_node ((*x).dw_loc_oprnd1.v.val_str); } while (0);
          break;
        case dw_val_class_lbl_id:
          break;
        case dw_val_class_flag:
          break;
        }
      switch (((*x).dw_loc_oprnd2).val_class)
        {
        case dw_val_class_addr:
          do { if ((*x).dw_loc_oprnd2.v.val_addr != ((void *)0)) gt_ggc_mx_rtx_def ((*x).dw_loc_oprnd2.v.val_addr); } while (0);
          break;
        case dw_val_class_offset:
          break;
        case dw_val_class_loc_list:
          do { if ((*x).dw_loc_oprnd2.v.val_loc_list != ((void *)0)) gt_ggc_mx_dw_loc_list_struct ((*x).dw_loc_oprnd2.v.val_loc_list); } while (0);
          break;
        case dw_val_class_loc:
          do { if ((*x).dw_loc_oprnd2.v.val_loc != ((void *)0)) gt_ggc_mx_dw_loc_descr_struct ((*x).dw_loc_oprnd2.v.val_loc); } while (0);
          break;
        default:
          break;
        case dw_val_class_unsigned_const:
          break;
        case dw_val_class_long_long:
          break;
        case dw_val_class_vec:
          if ((*x).dw_loc_oprnd2.v.val_vec.array != ((void *)0)) {
            size_t i1;
            for (i1 = 0; i1 < (size_t)(((*x).dw_loc_oprnd2.v.val_vec).length); i1++) {
            }
            do { const void *const a__ = ((*x).dw_loc_oprnd2.v.val_vec.array); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
          }
          break;
        case dw_val_class_die_ref:
          do { if ((*x).dw_loc_oprnd2.v.val_die_ref.die != ((void *)0)) gt_ggc_mx_die_struct ((*x).dw_loc_oprnd2.v.val_die_ref.die); } while (0);
          break;
        case dw_val_class_fde_ref:
          break;
        case dw_val_class_str:
          do { if ((*x).dw_loc_oprnd2.v.val_str != ((void *)0)) gt_ggc_mx_indirect_string_node ((*x).dw_loc_oprnd2.v.val_str); } while (0);
          break;
        case dw_val_class_lbl_id:
          break;
        case dw_val_class_flag:
          break;
        }
    }
}
void
gt_ggc_mx_dw_fde_struct (void *x_p)
{
  struct dw_fde_struct * const x = (struct dw_fde_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).decl != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).decl); } while (0);
      do { if ((*x).dw_fde_cfi != ((void *)0)) gt_ggc_mx_dw_cfi_struct ((*x).dw_fde_cfi); } while (0);
    }
}
void
gt_ggc_mx_dw_cfi_struct (void *x_p)
{
  struct dw_cfi_struct * const x = (struct dw_cfi_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).dw_cfi_next != ((void *)0)) gt_ggc_mx_dw_cfi_struct ((*x).dw_cfi_next); } while (0);
      switch (dw_cfi_oprnd1_desc (((*x)).dw_cfi_opc))
        {
        case dw_cfi_oprnd_reg_num:
          break;
        case dw_cfi_oprnd_offset:
          break;
        case dw_cfi_oprnd_addr:
          break;
        case dw_cfi_oprnd_loc:
          do { if ((*x).dw_cfi_oprnd1.dw_cfi_loc != ((void *)0)) gt_ggc_mx_dw_loc_descr_struct ((*x).dw_cfi_oprnd1.dw_cfi_loc); } while (0);
          break;
        default:
          break;
        }
      switch (dw_cfi_oprnd2_desc (((*x)).dw_cfi_opc))
        {
        case dw_cfi_oprnd_reg_num:
          break;
        case dw_cfi_oprnd_offset:
          break;
        case dw_cfi_oprnd_addr:
          break;
        case dw_cfi_oprnd_loc:
          do { if ((*x).dw_cfi_oprnd2.dw_cfi_loc != ((void *)0)) gt_ggc_mx_dw_loc_descr_struct ((*x).dw_cfi_oprnd2.dw_cfi_loc); } while (0);
          break;
        default:
          break;
        }
    }
}
void
gt_ggc_mx_die_struct (void *x_p)
{
  struct die_struct * const x = (struct die_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).die_attr != ((void *)0)) gt_ggc_mx_dw_attr_struct ((*x).die_attr); } while (0);
      do { if ((*x).die_parent != ((void *)0)) gt_ggc_mx_die_struct ((*x).die_parent); } while (0);
      do { if ((*x).die_child != ((void *)0)) gt_ggc_mx_die_struct ((*x).die_child); } while (0);
      do { if ((*x).die_sib != ((void *)0)) gt_ggc_mx_die_struct ((*x).die_sib); } while (0);
      do { if ((*x).die_definition != ((void *)0)) gt_ggc_mx_die_struct ((*x).die_definition); } while (0);
    }
}
void
gt_ggc_m_P16var_loc_list_def4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_var_loc_list_def ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_ggc_m_P10die_struct4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_die_struct ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_ggc_m_P20indirect_string_node4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_indirect_string_node ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_pch_nx_var_loc_list_def (void *x_p)
{
  struct var_loc_list_def * const x = (struct var_loc_list_def *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_16var_loc_list_def))
    {
      do { if ((*x).first != ((void *)0)) gt_pch_nx_var_loc_node ((*x).first); } while (0);
    }
}
void
gt_pch_nx_var_loc_node (void *x_p)
{
  struct var_loc_node * x = (struct var_loc_node *)x_p;
  struct var_loc_node * xlimit = x;
  while (gt_pch_note_object (xlimit, xlimit, gt_pch_p_12var_loc_node))
   xlimit = ((*xlimit).next);
  while (x != xlimit)
    {
      do { if ((*x).var_loc_note != ((void *)0)) gt_pch_nx_rtx_def ((*x).var_loc_note); } while (0);
      gt_pch_n_S ((*x).label);
      do { if ((*x).next != ((void *)0)) gt_pch_nx_var_loc_node ((*x).next); } while (0);
      x = ((*x).next);
    }
}
void
gt_pch_nx_limbo_die_struct (void *x_p)
{
  struct limbo_die_struct * const x = (struct limbo_die_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_16limbo_die_struct))
    {
      do { if ((*x).die != ((void *)0)) gt_pch_nx_die_struct ((*x).die); } while (0);
      do { if ((*x).created_for != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).created_for); } while (0);
      do { if ((*x).next != ((void *)0)) gt_pch_nx_limbo_die_struct ((*x).next); } while (0);
    }
}
void
gt_pch_nx_dw_ranges_struct (void *x_p)
{
  struct dw_ranges_struct * const x = (struct dw_ranges_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_16dw_ranges_struct))
    {
    }
}
void
gt_pch_nx_pubname_struct (void *x_p)
{
  struct pubname_struct * const x = (struct pubname_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_14pubname_struct))
    {
      do { if ((*x).die != ((void *)0)) gt_pch_nx_die_struct ((*x).die); } while (0);
      gt_pch_n_S ((*x).name);
    }
}
void
gt_pch_nx_dw_separate_line_info_struct (void *x_p)
{
  struct dw_separate_line_info_struct * const x = (struct dw_separate_line_info_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_28dw_separate_line_info_struct))
    {
    }
}
void
gt_pch_nx_dw_line_info_struct (void *x_p)
{
  struct dw_line_info_struct * const x = (struct dw_line_info_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_19dw_line_info_struct))
    {
    }
}
void
gt_pch_nx_dw_attr_struct (void *x_p)
{
  struct dw_attr_struct * const x = (struct dw_attr_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_14dw_attr_struct))
    {
      do { if ((*x).dw_attr_next != ((void *)0)) gt_pch_nx_dw_attr_struct ((*x).dw_attr_next); } while (0);
      switch (((*x).dw_attr_val).val_class)
        {
        case dw_val_class_addr:
          do { if ((*x).dw_attr_val.v.val_addr != ((void *)0)) gt_pch_nx_rtx_def ((*x).dw_attr_val.v.val_addr); } while (0);
          break;
        case dw_val_class_offset:
          break;
        case dw_val_class_loc_list:
          do { if ((*x).dw_attr_val.v.val_loc_list != ((void *)0)) gt_pch_nx_dw_loc_list_struct ((*x).dw_attr_val.v.val_loc_list); } while (0);
          break;
        case dw_val_class_loc:
          do { if ((*x).dw_attr_val.v.val_loc != ((void *)0)) gt_pch_nx_dw_loc_descr_struct ((*x).dw_attr_val.v.val_loc); } while (0);
          break;
        default:
          break;
        case dw_val_class_unsigned_const:
          break;
        case dw_val_class_long_long:
          break;
        case dw_val_class_vec:
          if ((*x).dw_attr_val.v.val_vec.array != ((void *)0)) {
            size_t i0;
            for (i0 = 0; i0 < (size_t)(((*x).dw_attr_val.v.val_vec).length); i0++) {
            }
            gt_pch_note_object ((*x).dw_attr_val.v.val_vec.array, x, gt_pch_p_14dw_attr_struct);
          }
          break;
        case dw_val_class_die_ref:
          do { if ((*x).dw_attr_val.v.val_die_ref.die != ((void *)0)) gt_pch_nx_die_struct ((*x).dw_attr_val.v.val_die_ref.die); } while (0);
          break;
        case dw_val_class_fde_ref:
          break;
        case dw_val_class_str:
          do { if ((*x).dw_attr_val.v.val_str != ((void *)0)) gt_pch_nx_indirect_string_node ((*x).dw_attr_val.v.val_str); } while (0);
          break;
        case dw_val_class_lbl_id:
          gt_pch_n_S ((*x).dw_attr_val.v.val_lbl_id);
          break;
        case dw_val_class_flag:
          break;
        }
    }
}
void
gt_pch_nx_dw_loc_list_struct (void *x_p)
{
  struct dw_loc_list_struct * const x = (struct dw_loc_list_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_18dw_loc_list_struct))
    {
      do { if ((*x).dw_loc_next != ((void *)0)) gt_pch_nx_dw_loc_list_struct ((*x).dw_loc_next); } while (0);
      gt_pch_n_S ((*x).begin);
      gt_pch_n_S ((*x).end);
      gt_pch_n_S ((*x).ll_symbol);
      gt_pch_n_S ((*x).section);
      do { if ((*x).expr != ((void *)0)) gt_pch_nx_dw_loc_descr_struct ((*x).expr); } while (0);
    }
}
void
gt_pch_nx_queued_reg_save (void *x_p)
{
  struct queued_reg_save * const x = (struct queued_reg_save *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_15queued_reg_save))
    {
      do { if ((*x).next != ((void *)0)) gt_pch_nx_queued_reg_save ((*x).next); } while (0);
      do { if ((*x).reg != ((void *)0)) gt_pch_nx_rtx_def ((*x).reg); } while (0);
      do { if ((*x).saved_reg != ((void *)0)) gt_pch_nx_rtx_def ((*x).saved_reg); } while (0);
    }
}
void
gt_pch_nx_indirect_string_node (void *x_p)
{
  struct indirect_string_node * const x = (struct indirect_string_node *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_20indirect_string_node))
    {
      gt_pch_n_S ((*x).str);
      gt_pch_n_S ((*x).label);
    }
}
void
gt_pch_nx_dw_loc_descr_struct (void *x_p)
{
  struct dw_loc_descr_struct * const x = (struct dw_loc_descr_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_19dw_loc_descr_struct))
    {
      do { if ((*x).dw_loc_next != ((void *)0)) gt_pch_nx_dw_loc_descr_struct ((*x).dw_loc_next); } while (0);
      switch (((*x).dw_loc_oprnd1).val_class)
        {
        case dw_val_class_addr:
          do { if ((*x).dw_loc_oprnd1.v.val_addr != ((void *)0)) gt_pch_nx_rtx_def ((*x).dw_loc_oprnd1.v.val_addr); } while (0);
          break;
        case dw_val_class_offset:
          break;
        case dw_val_class_loc_list:
          do { if ((*x).dw_loc_oprnd1.v.val_loc_list != ((void *)0)) gt_pch_nx_dw_loc_list_struct ((*x).dw_loc_oprnd1.v.val_loc_list); } while (0);
          break;
        case dw_val_class_loc:
          do { if ((*x).dw_loc_oprnd1.v.val_loc != ((void *)0)) gt_pch_nx_dw_loc_descr_struct ((*x).dw_loc_oprnd1.v.val_loc); } while (0);
          break;
        default:
          break;
        case dw_val_class_unsigned_const:
          break;
        case dw_val_class_long_long:
          break;
        case dw_val_class_vec:
          if ((*x).dw_loc_oprnd1.v.val_vec.array != ((void *)0)) {
            size_t i0;
            for (i0 = 0; i0 < (size_t)(((*x).dw_loc_oprnd1.v.val_vec).length); i0++) {
            }
            gt_pch_note_object ((*x).dw_loc_oprnd1.v.val_vec.array, x, gt_pch_p_19dw_loc_descr_struct);
          }
          break;
        case dw_val_class_die_ref:
          do { if ((*x).dw_loc_oprnd1.v.val_die_ref.die != ((void *)0)) gt_pch_nx_die_struct ((*x).dw_loc_oprnd1.v.val_die_ref.die); } while (0);
          break;
        case dw_val_class_fde_ref:
          break;
        case dw_val_class_str:
          do { if ((*x).dw_loc_oprnd1.v.val_str != ((void *)0)) gt_pch_nx_indirect_string_node ((*x).dw_loc_oprnd1.v.val_str); } while (0);
          break;
        case dw_val_class_lbl_id:
          gt_pch_n_S ((*x).dw_loc_oprnd1.v.val_lbl_id);
          break;
        case dw_val_class_flag:
          break;
        }
      switch (((*x).dw_loc_oprnd2).val_class)
        {
        case dw_val_class_addr:
          do { if ((*x).dw_loc_oprnd2.v.val_addr != ((void *)0)) gt_pch_nx_rtx_def ((*x).dw_loc_oprnd2.v.val_addr); } while (0);
          break;
        case dw_val_class_offset:
          break;
        case dw_val_class_loc_list:
          do { if ((*x).dw_loc_oprnd2.v.val_loc_list != ((void *)0)) gt_pch_nx_dw_loc_list_struct ((*x).dw_loc_oprnd2.v.val_loc_list); } while (0);
          break;
        case dw_val_class_loc:
          do { if ((*x).dw_loc_oprnd2.v.val_loc != ((void *)0)) gt_pch_nx_dw_loc_descr_struct ((*x).dw_loc_oprnd2.v.val_loc); } while (0);
          break;
        default:
          break;
        case dw_val_class_unsigned_const:
          break;
        case dw_val_class_long_long:
          break;
        case dw_val_class_vec:
          if ((*x).dw_loc_oprnd2.v.val_vec.array != ((void *)0)) {
            size_t i1;
            for (i1 = 0; i1 < (size_t)(((*x).dw_loc_oprnd2.v.val_vec).length); i1++) {
            }
            gt_pch_note_object ((*x).dw_loc_oprnd2.v.val_vec.array, x, gt_pch_p_19dw_loc_descr_struct);
          }
          break;
        case dw_val_class_die_ref:
          do { if ((*x).dw_loc_oprnd2.v.val_die_ref.die != ((void *)0)) gt_pch_nx_die_struct ((*x).dw_loc_oprnd2.v.val_die_ref.die); } while (0);
          break;
        case dw_val_class_fde_ref:
          break;
        case dw_val_class_str:
          do { if ((*x).dw_loc_oprnd2.v.val_str != ((void *)0)) gt_pch_nx_indirect_string_node ((*x).dw_loc_oprnd2.v.val_str); } while (0);
          break;
        case dw_val_class_lbl_id:
          gt_pch_n_S ((*x).dw_loc_oprnd2.v.val_lbl_id);
          break;
        case dw_val_class_flag:
          break;
        }
    }
}
void
gt_pch_nx_dw_fde_struct (void *x_p)
{
  struct dw_fde_struct * const x = (struct dw_fde_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_13dw_fde_struct))
    {
      do { if ((*x).decl != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).decl); } while (0);
      gt_pch_n_S ((*x).dw_fde_begin);
      gt_pch_n_S ((*x).dw_fde_current_label);
      gt_pch_n_S ((*x).dw_fde_end);
      do { if ((*x).dw_fde_cfi != ((void *)0)) gt_pch_nx_dw_cfi_struct ((*x).dw_fde_cfi); } while (0);
    }
}
void
gt_pch_nx_dw_cfi_struct (void *x_p)
{
  struct dw_cfi_struct * const x = (struct dw_cfi_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_13dw_cfi_struct))
    {
      do { if ((*x).dw_cfi_next != ((void *)0)) gt_pch_nx_dw_cfi_struct ((*x).dw_cfi_next); } while (0);
      switch (dw_cfi_oprnd1_desc (((*x)).dw_cfi_opc))
        {
        case dw_cfi_oprnd_reg_num:
          break;
        case dw_cfi_oprnd_offset:
          break;
        case dw_cfi_oprnd_addr:
          gt_pch_n_S ((*x).dw_cfi_oprnd1.dw_cfi_addr);
          break;
        case dw_cfi_oprnd_loc:
          do { if ((*x).dw_cfi_oprnd1.dw_cfi_loc != ((void *)0)) gt_pch_nx_dw_loc_descr_struct ((*x).dw_cfi_oprnd1.dw_cfi_loc); } while (0);
          break;
        default:
          break;
        }
      switch (dw_cfi_oprnd2_desc (((*x)).dw_cfi_opc))
        {
        case dw_cfi_oprnd_reg_num:
          break;
        case dw_cfi_oprnd_offset:
          break;
        case dw_cfi_oprnd_addr:
          gt_pch_n_S ((*x).dw_cfi_oprnd2.dw_cfi_addr);
          break;
        case dw_cfi_oprnd_loc:
          do { if ((*x).dw_cfi_oprnd2.dw_cfi_loc != ((void *)0)) gt_pch_nx_dw_loc_descr_struct ((*x).dw_cfi_oprnd2.dw_cfi_loc); } while (0);
          break;
        default:
          break;
        }
    }
}
void
gt_pch_nx_die_struct (void *x_p)
{
  struct die_struct * const x = (struct die_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_10die_struct))
    {
      gt_pch_n_S ((*x).die_symbol);
      do { if ((*x).die_attr != ((void *)0)) gt_pch_nx_dw_attr_struct ((*x).die_attr); } while (0);
      do { if ((*x).die_parent != ((void *)0)) gt_pch_nx_die_struct ((*x).die_parent); } while (0);
      do { if ((*x).die_child != ((void *)0)) gt_pch_nx_die_struct ((*x).die_child); } while (0);
      do { if ((*x).die_sib != ((void *)0)) gt_pch_nx_die_struct ((*x).die_sib); } while (0);
      do { if ((*x).die_definition != ((void *)0)) gt_pch_nx_die_struct ((*x).die_definition); } while (0);
    }
}
void
gt_pch_n_P16var_loc_list_def4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P16var_loc_list_def4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_var_loc_list_def ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P16var_loc_list_def4htab);
      }
    }
}
void
gt_pch_n_P10die_struct4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P10die_struct4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_die_struct ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P10die_struct4htab);
      }
    }
}
void
gt_pch_n_P20indirect_string_node4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P20indirect_string_node4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_indirect_string_node ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P20indirect_string_node4htab);
      }
    }
}
void
gt_pch_p_16var_loc_list_def (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct var_loc_list_def * const x = (struct var_loc_list_def *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).first), cookie);
}
void
gt_pch_p_12var_loc_node (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct var_loc_node * const x = (struct var_loc_node *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).var_loc_note), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).label), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
}
void
gt_pch_p_16limbo_die_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct limbo_die_struct * const x = (struct limbo_die_struct *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).die), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).created_for), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
}
void
gt_pch_p_16dw_ranges_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct dw_ranges_struct * const x = (struct dw_ranges_struct *)x_p;
}
void
gt_pch_p_14pubname_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct pubname_struct * const x = (struct pubname_struct *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).die), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).name), cookie);
}
void
gt_pch_p_28dw_separate_line_info_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct dw_separate_line_info_struct * const x = (struct dw_separate_line_info_struct *)x_p;
}
void
gt_pch_p_19dw_line_info_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct dw_line_info_struct * const x = (struct dw_line_info_struct *)x_p;
}
void
gt_pch_p_14dw_attr_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct dw_attr_struct * const x = (struct dw_attr_struct *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).dw_attr_next), cookie);
  switch (((*x).dw_attr_val).val_class)
    {
    case dw_val_class_addr:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_attr_val.v.val_addr), cookie);
      break;
    case dw_val_class_offset:
      break;
    case dw_val_class_loc_list:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_attr_val.v.val_loc_list), cookie);
      break;
    case dw_val_class_loc:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_attr_val.v.val_loc), cookie);
      break;
    default:
      break;
    case dw_val_class_unsigned_const:
      break;
    case dw_val_class_long_long:
      break;
    case dw_val_class_vec:
      if ((*x).dw_attr_val.v.val_vec.array != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x).dw_attr_val.v.val_vec).length); i0++) {
        }
        if ((void *)(x) == this_obj)
          op (&((*x).dw_attr_val.v.val_vec.array), cookie);
      }
      break;
    case dw_val_class_die_ref:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_attr_val.v.val_die_ref.die), cookie);
      break;
    case dw_val_class_fde_ref:
      break;
    case dw_val_class_str:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_attr_val.v.val_str), cookie);
      break;
    case dw_val_class_lbl_id:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_attr_val.v.val_lbl_id), cookie);
      break;
    case dw_val_class_flag:
      break;
    }
}
void
gt_pch_p_18dw_loc_list_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct dw_loc_list_struct * const x = (struct dw_loc_list_struct *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).dw_loc_next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).begin), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).end), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).ll_symbol), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).section), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).expr), cookie);
}
void
gt_pch_p_15queued_reg_save (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct queued_reg_save * const x = (struct queued_reg_save *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).reg), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).saved_reg), cookie);
}
void
gt_pch_p_20indirect_string_node (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct indirect_string_node * const x = (struct indirect_string_node *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).str), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).label), cookie);
}
void
gt_pch_p_19dw_loc_descr_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct dw_loc_descr_struct * const x = (struct dw_loc_descr_struct *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).dw_loc_next), cookie);
  switch (((*x).dw_loc_oprnd1).val_class)
    {
    case dw_val_class_addr:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_loc_oprnd1.v.val_addr), cookie);
      break;
    case dw_val_class_offset:
      break;
    case dw_val_class_loc_list:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_loc_oprnd1.v.val_loc_list), cookie);
      break;
    case dw_val_class_loc:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_loc_oprnd1.v.val_loc), cookie);
      break;
    default:
      break;
    case dw_val_class_unsigned_const:
      break;
    case dw_val_class_long_long:
      break;
    case dw_val_class_vec:
      if ((*x).dw_loc_oprnd1.v.val_vec.array != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x).dw_loc_oprnd1.v.val_vec).length); i0++) {
        }
        if ((void *)(x) == this_obj)
          op (&((*x).dw_loc_oprnd1.v.val_vec.array), cookie);
      }
      break;
    case dw_val_class_die_ref:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_loc_oprnd1.v.val_die_ref.die), cookie);
      break;
    case dw_val_class_fde_ref:
      break;
    case dw_val_class_str:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_loc_oprnd1.v.val_str), cookie);
      break;
    case dw_val_class_lbl_id:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_loc_oprnd1.v.val_lbl_id), cookie);
      break;
    case dw_val_class_flag:
      break;
    }
  switch (((*x).dw_loc_oprnd2).val_class)
    {
    case dw_val_class_addr:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_loc_oprnd2.v.val_addr), cookie);
      break;
    case dw_val_class_offset:
      break;
    case dw_val_class_loc_list:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_loc_oprnd2.v.val_loc_list), cookie);
      break;
    case dw_val_class_loc:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_loc_oprnd2.v.val_loc), cookie);
      break;
    default:
      break;
    case dw_val_class_unsigned_const:
      break;
    case dw_val_class_long_long:
      break;
    case dw_val_class_vec:
      if ((*x).dw_loc_oprnd2.v.val_vec.array != ((void *)0)) {
        size_t i1;
        for (i1 = 0; i1 < (size_t)(((*x).dw_loc_oprnd2.v.val_vec).length); i1++) {
        }
        if ((void *)(x) == this_obj)
          op (&((*x).dw_loc_oprnd2.v.val_vec.array), cookie);
      }
      break;
    case dw_val_class_die_ref:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_loc_oprnd2.v.val_die_ref.die), cookie);
      break;
    case dw_val_class_fde_ref:
      break;
    case dw_val_class_str:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_loc_oprnd2.v.val_str), cookie);
      break;
    case dw_val_class_lbl_id:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_loc_oprnd2.v.val_lbl_id), cookie);
      break;
    case dw_val_class_flag:
      break;
    }
}
void
gt_pch_p_13dw_fde_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct dw_fde_struct * const x = (struct dw_fde_struct *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).decl), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).dw_fde_begin), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).dw_fde_current_label), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).dw_fde_end), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).dw_fde_cfi), cookie);
}
void
gt_pch_p_13dw_cfi_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct dw_cfi_struct * const x = (struct dw_cfi_struct *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).dw_cfi_next), cookie);
  switch (dw_cfi_oprnd1_desc (((*x)).dw_cfi_opc))
    {
    case dw_cfi_oprnd_reg_num:
      break;
    case dw_cfi_oprnd_offset:
      break;
    case dw_cfi_oprnd_addr:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_cfi_oprnd1.dw_cfi_addr), cookie);
      break;
    case dw_cfi_oprnd_loc:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_cfi_oprnd1.dw_cfi_loc), cookie);
      break;
    default:
      break;
    }
  switch (dw_cfi_oprnd2_desc (((*x)).dw_cfi_opc))
    {
    case dw_cfi_oprnd_reg_num:
      break;
    case dw_cfi_oprnd_offset:
      break;
    case dw_cfi_oprnd_addr:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_cfi_oprnd2.dw_cfi_addr), cookie);
      break;
    case dw_cfi_oprnd_loc:
      if ((void *)(x) == this_obj)
        op (&((*x).dw_cfi_oprnd2.dw_cfi_loc), cookie);
      break;
    default:
      break;
    }
}
void
gt_pch_p_10die_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct die_struct * const x = (struct die_struct *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).die_symbol), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).die_attr), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).die_parent), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).die_child), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).die_sib), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).die_definition), cookie);
}
void
gt_pch_p_P16var_loc_list_def4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
void
gt_pch_p_P10die_struct4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
void
gt_pch_p_P20indirect_string_node4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
static void gt_ggc_ma_ranges_table (void *);
static void
gt_ggc_ma_ranges_table (void *x_p )
{
  if (ranges_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(ranges_table_allocated); i0++) {
    }
    do { const void *const a__ = (ranges_table); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
  }
}
static void gt_pch_pa_ranges_table
    (void *, void *, gt_pointer_operator, void *);
static void gt_pch_pa_ranges_table (void *this_obj ,
      void *x_p ,
      gt_pointer_operator op ,
      void *cookie )
{
  if (ranges_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(ranges_table_allocated); i0++) {
    }
    if ((void *)(&ranges_table) == this_obj)
      op (&(ranges_table), cookie);
  }
}
static void gt_pch_na_ranges_table (void *);
static void
gt_pch_na_ranges_table (void *x_p )
{
  if (ranges_table != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)(ranges_table_allocated); i1++) {
    }
    gt_pch_note_object (ranges_table, &ranges_table, gt_pch_pa_ranges_table);
  }
}
static void gt_ggc_ma_arange_table (void *);
static void
gt_ggc_ma_arange_table (void *x_p )
{
  if (arange_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(arange_table_allocated); i0++) {
      do { if (arange_table[i0] != ((void *)0)) gt_ggc_mx_die_struct (arange_table[i0]); } while (0);
    }
    do { const void *const a__ = (arange_table); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
  }
}
static void gt_pch_pa_arange_table
    (void *, void *, gt_pointer_operator, void *);
static void gt_pch_pa_arange_table (void *this_obj ,
      void *x_p ,
      gt_pointer_operator op ,
      void *cookie )
{
  if (arange_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(arange_table_allocated); i0++) {
      if ((void *)(arange_table) == this_obj)
        op (&(arange_table[i0]), cookie);
    }
    if ((void *)(&arange_table) == this_obj)
      op (&(arange_table), cookie);
  }
}
static void gt_pch_na_arange_table (void *);
static void
gt_pch_na_arange_table (void *x_p )
{
  if (arange_table != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)(arange_table_allocated); i1++) {
      do { if (arange_table[i1] != ((void *)0)) gt_pch_nx_die_struct (arange_table[i1]); } while (0);
    }
    gt_pch_note_object (arange_table, &arange_table, gt_pch_pa_arange_table);
  }
}
static void gt_ggc_ma_pubname_table (void *);
static void
gt_ggc_ma_pubname_table (void *x_p )
{
  if (pubname_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(pubname_table_allocated); i0++) {
      do { if (pubname_table[i0].die != ((void *)0)) gt_ggc_mx_die_struct (pubname_table[i0].die); } while (0);
    }
    do { const void *const a__ = (pubname_table); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
  }
}
static void gt_pch_pa_pubname_table
    (void *, void *, gt_pointer_operator, void *);
static void gt_pch_pa_pubname_table (void *this_obj ,
      void *x_p ,
      gt_pointer_operator op ,
      void *cookie )
{
  if (pubname_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(pubname_table_allocated); i0++) {
      if ((void *)(pubname_table) == this_obj)
        op (&(pubname_table[i0].die), cookie);
      if ((void *)(pubname_table) == this_obj)
        op (&(pubname_table[i0].name), cookie);
    }
    if ((void *)(&pubname_table) == this_obj)
      op (&(pubname_table), cookie);
  }
}
static void gt_pch_na_pubname_table (void *);
static void
gt_pch_na_pubname_table (void *x_p )
{
  if (pubname_table != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)(pubname_table_allocated); i1++) {
      do { if (pubname_table[i1].die != ((void *)0)) gt_pch_nx_die_struct (pubname_table[i1].die); } while (0);
      gt_pch_n_S (pubname_table[i1].name);
    }
    gt_pch_note_object (pubname_table, &pubname_table, gt_pch_pa_pubname_table);
  }
}
static void gt_ggc_ma_separate_line_info_table (void *);
static void
gt_ggc_ma_separate_line_info_table (void *x_p )
{
  if (separate_line_info_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(separate_line_info_table_allocated); i0++) {
    }
    do { const void *const a__ = (separate_line_info_table); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
  }
}
static void gt_pch_pa_separate_line_info_table
    (void *, void *, gt_pointer_operator, void *);
static void gt_pch_pa_separate_line_info_table (void *this_obj ,
      void *x_p ,
      gt_pointer_operator op ,
      void *cookie )
{
  if (separate_line_info_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(separate_line_info_table_allocated); i0++) {
    }
    if ((void *)(&separate_line_info_table) == this_obj)
      op (&(separate_line_info_table), cookie);
  }
}
static void gt_pch_na_separate_line_info_table (void *);
static void
gt_pch_na_separate_line_info_table (void *x_p )
{
  if (separate_line_info_table != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)(separate_line_info_table_allocated); i1++) {
    }
    gt_pch_note_object (separate_line_info_table, &separate_line_info_table, gt_pch_pa_separate_line_info_table);
  }
}
static void gt_ggc_ma_line_info_table (void *);
static void
gt_ggc_ma_line_info_table (void *x_p )
{
  if (line_info_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(line_info_table_allocated); i0++) {
    }
    do { const void *const a__ = (line_info_table); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
  }
}
static void gt_pch_pa_line_info_table
    (void *, void *, gt_pointer_operator, void *);
static void gt_pch_pa_line_info_table (void *this_obj ,
      void *x_p ,
      gt_pointer_operator op ,
      void *cookie )
{
  if (line_info_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(line_info_table_allocated); i0++) {
    }
    if ((void *)(&line_info_table) == this_obj)
      op (&(line_info_table), cookie);
  }
}
static void gt_pch_na_line_info_table (void *);
static void
gt_pch_na_line_info_table (void *x_p )
{
  if (line_info_table != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)(line_info_table_allocated); i1++) {
    }
    gt_pch_note_object (line_info_table, &line_info_table, gt_pch_pa_line_info_table);
  }
}
static void gt_ggc_ma_abbrev_die_table (void *);
static void
gt_ggc_ma_abbrev_die_table (void *x_p )
{
  if (abbrev_die_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(abbrev_die_table_allocated); i0++) {
      do { if (abbrev_die_table[i0] != ((void *)0)) gt_ggc_mx_die_struct (abbrev_die_table[i0]); } while (0);
    }
    do { const void *const a__ = (abbrev_die_table); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
  }
}
static void gt_pch_pa_abbrev_die_table
    (void *, void *, gt_pointer_operator, void *);
static void gt_pch_pa_abbrev_die_table (void *this_obj ,
      void *x_p ,
      gt_pointer_operator op ,
      void *cookie )
{
  if (abbrev_die_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(abbrev_die_table_allocated); i0++) {
      if ((void *)(abbrev_die_table) == this_obj)
        op (&(abbrev_die_table[i0]), cookie);
    }
    if ((void *)(&abbrev_die_table) == this_obj)
      op (&(abbrev_die_table), cookie);
  }
}
static void gt_pch_na_abbrev_die_table (void *);
static void
gt_pch_na_abbrev_die_table (void *x_p )
{
  if (abbrev_die_table != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)(abbrev_die_table_allocated); i1++) {
      do { if (abbrev_die_table[i1] != ((void *)0)) gt_pch_nx_die_struct (abbrev_die_table[i1]); } while (0);
    }
    gt_pch_note_object (abbrev_die_table, &abbrev_die_table, gt_pch_pa_abbrev_die_table);
  }
}
static void gt_ggc_ma_fde_table (void *);
static void
gt_ggc_ma_fde_table (void *x_p )
{
  if (fde_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(fde_table_allocated); i0++) {
      do { if (fde_table[i0].decl != ((void *)0)) gt_ggc_mx_lang_tree_node (fde_table[i0].decl); } while (0);
      do { if (fde_table[i0].dw_fde_cfi != ((void *)0)) gt_ggc_mx_dw_cfi_struct (fde_table[i0].dw_fde_cfi); } while (0);
    }
    do { const void *const a__ = (fde_table); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
  }
}
static void gt_pch_pa_fde_table
    (void *, void *, gt_pointer_operator, void *);
static void gt_pch_pa_fde_table (void *this_obj ,
      void *x_p ,
      gt_pointer_operator op ,
      void *cookie )
{
  if (fde_table != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(fde_table_allocated); i0++) {
      if ((void *)(fde_table) == this_obj)
        op (&(fde_table[i0].decl), cookie);
      if ((void *)(fde_table) == this_obj)
        op (&(fde_table[i0].dw_fde_begin), cookie);
      if ((void *)(fde_table) == this_obj)
        op (&(fde_table[i0].dw_fde_current_label), cookie);
      if ((void *)(fde_table) == this_obj)
        op (&(fde_table[i0].dw_fde_end), cookie);
      if ((void *)(fde_table) == this_obj)
        op (&(fde_table[i0].dw_fde_cfi), cookie);
    }
    if ((void *)(&fde_table) == this_obj)
      op (&(fde_table), cookie);
  }
}
static void gt_pch_na_fde_table (void *);
static void
gt_pch_na_fde_table (void *x_p )
{
  if (fde_table != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)(fde_table_allocated); i1++) {
      do { if (fde_table[i1].decl != ((void *)0)) gt_pch_nx_lang_tree_node (fde_table[i1].decl); } while (0);
      gt_pch_n_S (fde_table[i1].dw_fde_begin);
      gt_pch_n_S (fde_table[i1].dw_fde_current_label);
      gt_pch_n_S (fde_table[i1].dw_fde_end);
      do { if (fde_table[i1].dw_fde_cfi != ((void *)0)) gt_pch_nx_dw_cfi_struct (fde_table[i1].dw_fde_cfi); } while (0);
    }
    gt_pch_note_object (fde_table, &fde_table, gt_pch_pa_fde_table);
  }
}
const struct ggc_root_tab gt_ggc_r_gt_dwarf2out_h[] = {
  {
    &ranges_table,
    1,
    sizeof (ranges_table),
    &gt_ggc_ma_ranges_table,
    &gt_pch_na_ranges_table
  },
  {
    &arange_table,
    1,
    sizeof (arange_table),
    &gt_ggc_ma_arange_table,
    &gt_pch_na_arange_table
  },
  {
    &pubname_table,
    1,
    sizeof (pubname_table),
    &gt_ggc_ma_pubname_table,
    &gt_pch_na_pubname_table
  },
  {
    &separate_line_info_table,
    1,
    sizeof (separate_line_info_table),
    &gt_ggc_ma_separate_line_info_table,
    &gt_pch_na_separate_line_info_table
  },
  {
    &line_info_table,
    1,
    sizeof (line_info_table),
    &gt_ggc_ma_line_info_table,
    &gt_pch_na_line_info_table
  },
  {
    &abbrev_die_table,
    1,
    sizeof (abbrev_die_table),
    &gt_ggc_ma_abbrev_die_table,
    &gt_pch_na_abbrev_die_table
  },
  {
    &decl_loc_table,
    1,
    sizeof (decl_loc_table),
    &gt_ggc_m_P16var_loc_list_def4htab,
    &gt_pch_n_P16var_loc_list_def4htab
  },
  {
    &decl_die_table,
    1,
    sizeof (decl_die_table),
    &gt_ggc_m_P10die_struct4htab,
    &gt_pch_n_P10die_struct4htab
  },
  {
    &file_table_emitted,
    1,
    sizeof (file_table_emitted),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &file_table,
    1,
    sizeof (file_table),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &limbo_die_list,
    1,
    sizeof (limbo_die_list),
    &gt_ggc_mx_limbo_die_struct,
    &gt_pch_nx_limbo_die_struct
  },
  {
    &comp_unit_die,
    1,
    sizeof (comp_unit_die),
    &gt_ggc_mx_die_struct,
    &gt_pch_nx_die_struct
  },
  {
    &regs_saved_in_regs[0].orig_reg,
    1 * (4),
    sizeof (regs_saved_in_regs[0]),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &regs_saved_in_regs[0].saved_in_reg,
    1 * (4),
    sizeof (regs_saved_in_regs[0]),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &queued_reg_saves,
    1,
    sizeof (queued_reg_saves),
    &gt_ggc_mx_queued_reg_save,
    &gt_pch_nx_queued_reg_save
  },
  {
    &debug_str_hash,
    1,
    sizeof (debug_str_hash),
    &gt_ggc_m_P20indirect_string_node4htab,
    &gt_pch_n_P20indirect_string_node4htab
  },
  {
    &cie_cfi_head,
    1,
    sizeof (cie_cfi_head),
    &gt_ggc_mx_dw_cfi_struct,
    &gt_pch_nx_dw_cfi_struct
  },
  {
    &fde_table,
    1,
    sizeof (fde_table),
    &gt_ggc_ma_fde_table,
    &gt_pch_na_fde_table
  },
  {
    &decl_scope_table,
    1,
    sizeof (decl_scope_table),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &incomplete_types,
    1,
    sizeof (incomplete_types),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &used_rtx_varray,
    1,
    sizeof (used_rtx_varray),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_dwarf2out_h[] = {
  { &label_num, 1, sizeof (label_num), ((void *)0), ((void *)0) },
  { &emitcount, 1, sizeof (emitcount), ((void *)0), ((void *)0) },
  { &loclabel_num, 1, sizeof (loclabel_num), ((void *)0), ((void *)0) },
  { &have_location_lists, 1, sizeof (have_location_lists), ((void *)0), ((void *)0) },
  { &ranges_table_in_use, 1, sizeof (ranges_table_in_use), ((void *)0), ((void *)0) },
  { &ranges_table_allocated, 1, sizeof (ranges_table_allocated), ((void *)0), ((void *)0) },
  { &arange_table_in_use, 1, sizeof (arange_table_in_use), ((void *)0), ((void *)0) },
  { &arange_table_allocated, 1, sizeof (arange_table_allocated), ((void *)0), ((void *)0) },
  { &pubname_table_in_use, 1, sizeof (pubname_table_in_use), ((void *)0), ((void *)0) },
  { &pubname_table_allocated, 1, sizeof (pubname_table_allocated), ((void *)0), ((void *)0) },
  { &separate_line_info_table_in_use, 1, sizeof (separate_line_info_table_in_use), ((void *)0), ((void *)0) },
  { &separate_line_info_table_allocated, 1, sizeof (separate_line_info_table_allocated), ((void *)0), ((void *)0) },
  { &line_info_table_in_use, 1, sizeof (line_info_table_in_use), ((void *)0), ((void *)0) },
  { &line_info_table_allocated, 1, sizeof (line_info_table_allocated), ((void *)0), ((void *)0) },
  { &abbrev_die_table_in_use, 1, sizeof (abbrev_die_table_in_use), ((void *)0), ((void *)0) },
  { &abbrev_die_table_allocated, 1, sizeof (abbrev_die_table_allocated), ((void *)0), ((void *)0) },
  { &file_table_last_lookup_index, 1, sizeof (file_table_last_lookup_index), ((void *)0), ((void *)0) },
  { &num_regs_saved_in_regs, 1, sizeof (num_regs_saved_in_regs), ((void *)0), ((void *)0) },
  { &regs_saved_in_regs, 1, sizeof (regs_saved_in_regs), ((void *)0), ((void *)0) },
  { &dwarf2out_cfi_label_num, 1, sizeof (dwarf2out_cfi_label_num), ((void *)0), ((void *)0) },
  { &dw2_string_counter, 1, sizeof (dw2_string_counter), ((void *)0), ((void *)0) },
  { &fde_table_in_use, 1, sizeof (fde_table_in_use), ((void *)0), ((void *)0) },
  { &fde_table_allocated, 1, sizeof (fde_table_allocated), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
enum machine_mode byte_mode;
enum machine_mode word_mode;
enum machine_mode double_mode;
enum machine_mode ptr_mode;
static int label_num = 1;
static int last_label_num;
static int base_label_num;
static int no_line_numbers;
rtx global_rtl[GR_MAX];
static rtx static_regno_reg_rtx[53];
rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE];
rtx const_true_rtx;
struct real_value dconst0;
struct real_value dconst1;
struct real_value dconst2;
struct real_value dconst3;
struct real_value dconst10;
struct real_value dconstm1;
struct real_value dconstm2;
struct real_value dconsthalf;
struct real_value dconstthird;
struct real_value dconstpi;
struct real_value dconste;
rtx static_chain_rtx;
rtx static_chain_incoming_rtx;
rtx pic_offset_table_rtx;
rtx return_address_pointer_rtx;
rtx const_int_rtx[64 * 2 + 1];
static
     htab_t const_int_htab;
static
     htab_t mem_attrs_htab;
static
     htab_t reg_attrs_htab;
static
     htab_t const_double_htab;
static rtx make_jump_insn_raw (rtx);
static rtx make_call_insn_raw (rtx);
static rtx find_line_note_emit (rtx);
static rtx change_address_1 (rtx, enum machine_mode, rtx, int);
static void unshare_all_decls (tree);
static void reset_used_decls (tree);
static void mark_label_nuses (rtx);
static hashval_t const_int_htab_hash (const void *);
static int const_int_htab_eq (const void *, const void *);
static hashval_t const_double_htab_hash (const void *);
static int const_double_htab_eq (const void *, const void *);
static rtx lookup_const_double (rtx);
static hashval_t mem_attrs_htab_hash (const void *);
static int mem_attrs_htab_eq (const void *, const void *);
static mem_attrs *get_mem_attrs (long, tree, rtx, rtx, unsigned int,
     enum machine_mode);
static hashval_t reg_attrs_htab_hash (const void *);
static int reg_attrs_htab_eq (const void *, const void *);
static reg_attrs *get_reg_attrs (tree, int);
static tree component_ref_for_mem_expr (tree);
static rtx gen_const_vector_0 (enum machine_mode);
static rtx gen_complex_constant_part (enum machine_mode, rtx, int);
static void copy_rtx_if_shared_1 (rtx *orig);
int split_branch_probability = -1;
static hashval_t
const_int_htab_hash (const void *x)
{
  return (hashval_t) (((rtx) x)->u.hwint[0]);
}
static int
const_int_htab_eq (const void *x, const void *y)
{
  return ((((rtx) x)->u.hwint[0]) == *((const long *) y));
}
static hashval_t
const_double_htab_hash (const void *x)
{
  rtx value1 = (rtx) x;
  hashval_t h;
  if (((enum machine_mode) (value1)->mode) == VOIDmode)
    h = ((value1)->u.hwint[0]) ^ ((value1)->u.hwint[1]);
  else
    {
      h = real_hash (((struct real_value *)&((value1)->u.hwint[0])));
      h ^= ((enum machine_mode) (value1)->mode);
    }
  return h;
}
static int
const_double_htab_eq (const void *x, const void *y)
{
  rtx a = (rtx)x, b = (rtx)y;
  if (((enum machine_mode) (a)->mode) != ((enum machine_mode) (b)->mode))
    return 0;
  if (((enum machine_mode) (a)->mode) == VOIDmode)
    return (((a)->u.hwint[0]) == ((b)->u.hwint[0])
     && ((a)->u.hwint[1]) == ((b)->u.hwint[1]));
  else
    return real_identical (((struct real_value *)&((a)->u.hwint[0])),
      ((struct real_value *)&((b)->u.hwint[0])));
}
static hashval_t
mem_attrs_htab_hash (const void *x)
{
  mem_attrs *p = (mem_attrs *) x;
  return (p->alias ^ (p->align * 1000)
   ^ ((p->offset ? ((p->offset)->u.hwint[0]) : 0) * 50000)
   ^ ((p->size ? ((p->size)->u.hwint[0]) : 0) * 2500000)
   ^ (size_t) p->expr);
}
static int
mem_attrs_htab_eq (const void *x, const void *y)
{
  mem_attrs *p = (mem_attrs *) x;
  mem_attrs *q = (mem_attrs *) y;
  return (p->alias == q->alias && p->expr == q->expr && p->offset == q->offset
   && p->size == q->size && p->align == q->align);
}
static mem_attrs *
get_mem_attrs (long alias, tree expr, rtx offset, rtx size,
        unsigned int align, enum machine_mode mode)
{
  mem_attrs attrs;
  void **slot;
  if (alias == 0 && expr == 0 && offset == 0
      && (size == 0
   || (mode != BLKmode && ((unsigned short) mode_size[mode]) == ((size)->u.hwint[0])))
      && (0 && mode != BLKmode
   ? align == get_mode_alignment (mode) : align == 8))
    return 0;
  attrs.alias = alias;
  attrs.expr = expr;
  attrs.offset = offset;
  attrs.size = size;
  attrs.align = align;
  slot = htab_find_slot (mem_attrs_htab, &attrs, INSERT);
  if (*slot == 0)
    {
      *slot = ggc_alloc_stat (sizeof (mem_attrs) );
      memcpy (*slot, &attrs, sizeof (mem_attrs));
    }
  return *slot;
}
static hashval_t
reg_attrs_htab_hash (const void *x)
{
  reg_attrs *p = (reg_attrs *) x;
  return ((p->offset * 1000) ^ (long) p->decl);
}
static int
reg_attrs_htab_eq (const void *x, const void *y)
{
  reg_attrs *p = (reg_attrs *) x;
  reg_attrs *q = (reg_attrs *) y;
  return (p->decl == q->decl && p->offset == q->offset);
}
static reg_attrs *
get_reg_attrs (tree decl, int offset)
{
  reg_attrs attrs;
  void **slot;
  if (decl == 0 && offset == 0)
    return 0;
  attrs.decl = decl;
  attrs.offset = offset;
  slot = htab_find_slot (reg_attrs_htab, &attrs, INSERT);
  if (*slot == 0)
    {
      *slot = ggc_alloc_stat (sizeof (reg_attrs) );
      memcpy (*slot, &attrs, sizeof (reg_attrs));
    }
  return *slot;
}
rtx
gen_raw_REG (enum machine_mode mode, int regno)
{
  rtx x = gen_rtx_fmt_i00 (REG, (mode), (regno));
  (((x)->u.fld[1]).rtuint) = regno;
  return x;
}
rtx
gen_rtx_CONST_INT (enum machine_mode mode , long arg)
{
  void **slot;
  if (arg >= - 64 && arg <= 64)
    return const_int_rtx[arg + 64];
  slot = htab_find_slot_with_hash (const_int_htab, &arg,
       (hashval_t) arg, INSERT);
  if (*slot == 0)
    *slot = gen_rtx_fmt_w (CONST_INT, (VOIDmode), (arg));
  return (rtx) *slot;
}
rtx
gen_int_mode (long c, enum machine_mode mode)
{
  return gen_rtx_CONST_INT (VOIDmode, (long) (trunc_int_for_mode (c, mode)));
}
static rtx
lookup_const_double (rtx real)
{
  void **slot = htab_find_slot (const_double_htab, real, INSERT);
  if (*slot == 0)
    *slot = real;
  return (rtx) *slot;
}
rtx
const_double_from_real_value (struct real_value value1, enum machine_mode mode)
{
  rtx real = rtx_alloc_stat (CONST_DOUBLE );
  ((real)->mode = (mode));
  memcpy (&((real)->u.hwint[0]), &value1, sizeof (struct real_value));
  return lookup_const_double (real);
}
rtx
immed_double_const (long i0, long i1, enum machine_mode mode)
{
  rtx value1;
  unsigned int i;
  if (mode != VOIDmode)
    {
      int width;
      if (mode_class[mode] != MODE_INT
   && mode_class[mode] != MODE_PARTIAL_INT
   && mode_class[mode] != MODE_VECTOR_INT
   && mode_class[mode] != MODE_VECTOR_FLOAT)
 abort ();
      width = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
      if (width < (8 * 4)
   && ((i0 & ((long) (-1) << (width - 1)))
       != ((long) (-1) << (width - 1))))
 i0 &= ((long) 1 << width) - 1, i1 = 0;
      else if (width == (8 * 4)
        && ! (i1 == ~0 && i0 < 0))
 i1 = 0;
      else if (width > 2 * (8 * 4))
 abort ();
      if (width < (8 * 4)
   && (i0 & ((long) 1 << (width - 1))))
 i0 |= ((long) (-1) << width);
      if (width <= (8 * 4))
 i1 = (i0 < 0) ? ~(long) 0 : 0;
    }
  if ((i1 == 0 && i0 >= 0) || (i1 == ~0 && i0 < 0))
    return gen_rtx_CONST_INT (VOIDmode, (long) (i0));
  value1 = rtx_alloc_stat (CONST_DOUBLE );
  ((value1)->mode = (VOIDmode));
  ((value1)->u.hwint[0]) = i0;
  ((value1)->u.hwint[1]) = i1;
  for (i = 2; i < (sizeof "wwwwww" - 1); i++)
    ((value1)->u.hwint[i]) = 0;
  return lookup_const_double (value1);
}
rtx
gen_rtx_REG (enum machine_mode mode, unsigned int regno)
{
  if (mode == (0 ? DImode : SImode) && !reload_in_progress)
    {
      if (regno == 20
   && (!reload_completed || frame_pointer_needed))
 return (global_rtl[GR_FRAME_POINTER]);
      if (regno == 6
   && (!reload_completed || frame_pointer_needed))
 return (global_rtl[GR_HARD_FRAME_POINTER]);
      if (regno == 16)
 return (global_rtl[GR_ARG_POINTER]);
      if (regno == (unsigned) (0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3)
   && fixed_regs[(0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3)])
 return pic_offset_table_rtx;
      if (regno == 7)
 return (global_rtl[GR_STACK_POINTER]);
    }
  return gen_raw_REG (mode, regno);
}
rtx
gen_rtx_MEM (enum machine_mode mode, rtx addr)
{
  rtx rt = gen_rtx_fmt_e0 (MEM, (mode), (addr));
  (((rt)->u.fld[1]).rtmem) = 0;
  return rt;
}
rtx
gen_rtx_SUBREG (enum machine_mode mode, rtx reg, int offset)
{
  if ((offset % ((unsigned short) mode_size[mode])) != 0)
    abort ();
  return gen_rtx_fmt_ei (SUBREG, (mode), (reg), (offset));
}
rtx
gen_lowpart_SUBREG (enum machine_mode mode, rtx reg)
{
  enum machine_mode inmode;
  inmode = ((enum machine_mode) (reg)->mode);
  if (inmode == VOIDmode)
    inmode = mode;
  return gen_rtx_SUBREG (mode, reg,
    subreg_lowpart_offset (mode, inmode));
}
rtvec
gen_rtvec (int n, ...)
{
  int i, save_n;
  rtx *vector;
  va_list p;
  __builtin_va_start(p,n);
  if (n == 0)
    return (rtvec) 0;
  vector = C_alloca(n * sizeof (rtx));
  for (i = 0; i < n; i++)
    vector[i] = __builtin_va_arg(p,rtx1);
  save_n = n;
  __builtin_va_end(p);
  return gen_rtvec_v (save_n, vector);
}
rtvec
gen_rtvec_v (int n, rtx *argp)
{
  int i;
  rtvec rt_val;
  if (n == 0)
    return (rtvec) 0;
  rt_val = rtvec_alloc (n);
  for (i = 0; i < n; i++)
    rt_val->elem[i] = *argp++;
  return rt_val;
}
rtx
gen_reg_rtx (enum machine_mode mode)
{
  struct function *f = cfun;
  rtx val;
  if (no_new_pseudos)
    abort ();
  if (generating_concat_p
      && (mode_class[mode] == MODE_COMPLEX_FLOAT
   || mode_class[mode] == MODE_COMPLEX_INT))
    {
      rtx realpart, imagpart;
      enum machine_mode partmode = mode_inner[mode];
      realpart = gen_reg_rtx (partmode);
      imagpart = gen_reg_rtx (partmode);
      return gen_rtx_fmt_ee (CONCAT, (mode), (realpart), (imagpart));
    }
  if ((cfun->emit->x_reg_rtx_no) == f->emit->regno_pointer_align_length)
    {
      int old_size = f->emit->regno_pointer_align_length;
      char *new;
      rtx *new1;
      new = ggc_realloc_stat (f->emit->regno_pointer_align,old_size * 2 );
      memset (new + old_size, 0, old_size);
      f->emit->regno_pointer_align = (unsigned char *) new;
      new1 = ggc_realloc_stat (f->emit->x_regno_reg_rtx,old_size * 2 * sizeof (rtx) )
                                 ;
      memset (new1 + old_size, 0, old_size * sizeof (rtx));
      (cfun->emit->x_regno_reg_rtx) = new1;
      f->emit->regno_pointer_align_length = old_size * 2;
    }
  val = gen_raw_REG (mode, (cfun->emit->x_reg_rtx_no));
  (cfun->emit->x_regno_reg_rtx)[(cfun->emit->x_reg_rtx_no)++] = val;
  return val;
}
rtx
gen_rtx_REG_offset (rtx reg, enum machine_mode mode, unsigned int regno, int offset)
{
  rtx new = gen_rtx_REG (mode, regno);
  tree decl;
  long var_size;
  decl = ((((reg)->u.fld[2]).rtreg) == 0 ? 0 : (((reg)->u.fld[2]).rtreg)->decl);
  if ((0 || 0)
      && decl != ((void *)0)
      && offset > 0
      && ((unsigned short) mode_size[((enum machine_mode) (reg)->mode)]) > ((unsigned short) mode_size[mode])
      && ((var_size = int_size_in_bytes (((decl)->common.type))) > 0
   && var_size < ((unsigned short) mode_size[((enum machine_mode) (reg)->mode)])))
    {
      int offset_le;
      if (0)
 offset_le = ((((unsigned short) mode_size[((enum machine_mode) (reg)->mode)]) - 1 - offset)
       / (0 ? 8 : 4)) * (0 ? 8 : 4);
      else
 offset_le = (offset / (0 ? 8 : 4)) * (0 ? 8 : 4);
      if (0)
 offset_le += ((((unsigned short) mode_size[((enum machine_mode) (reg)->mode)]) - 1 - offset)
        % (0 ? 8 : 4));
      else
 offset_le += offset % (0 ? 8 : 4);
      if (offset_le >= var_size)
 {
   offset = 0;
 }
      else
 {
   if (0)
     offset = ((var_size - 1 - offset_le)
        / (0 ? 8 : 4)) * (0 ? 8 : 4);
   else
     offset = (offset_le / (0 ? 8 : 4)) * (0 ? 8 : 4);
   if (0)
     offset += ((var_size - 1 - offset_le)
         % (0 ? 8 : 4));
   else
     offset += offset_le % (0 ? 8 : 4);
 }
    }
  (((new)->u.fld[2]).rtreg) = get_reg_attrs (((((reg)->u.fld[2]).rtreg) == 0 ? 0 : (((reg)->u.fld[2]).rtreg)->decl),
       ((((reg)->u.fld[2]).rtreg) == 0 ? 0 : (((reg)->u.fld[2]).rtreg)->offset) + offset);
  return new;
}
void
set_reg_attrs_from_mem (rtx reg, rtx mem)
{
  if (((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->offset) && ((enum rtx_code) (((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->offset))->code) == CONST_INT)
    (((reg)->u.fld[2]).rtreg)
      = get_reg_attrs (((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->expr), ((((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->offset))->u.hwint[0]));
}
void
set_reg_attrs_for_parm (rtx parm_rtx, rtx mem)
{
  if ((((enum rtx_code) (parm_rtx)->code) == REG))
    set_reg_attrs_from_mem (parm_rtx, mem);
  else if (((enum rtx_code) (parm_rtx)->code) == PARALLEL)
    {
      int i = ((((((((parm_rtx)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1) ? 0 : 1;
      for (; i < (((((parm_rtx)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx x = (((((parm_rtx)->u.fld[0]).rtvec1))->elem[i]);
   if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
     ((((((x)->u.fld[0]).rtx1))->u.fld[2]).rtreg)
       = get_reg_attrs (((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->expr),
          (((((x)->u.fld[1]).rtx1))->u.hwint[0]));
 }
    }
}
void
set_decl_rtl (tree t, rtx x)
{
  (t)->decl.rtl = x;
  if (!x)
    return;
  if ((((enum rtx_code) (x)->code) == REG))
    (((x)->u.fld[2]).rtreg) = get_reg_attrs (t, 0);
  else if (((enum rtx_code) (x)->code) == SUBREG)
    ((((((x)->u.fld[0]).rtx1))->u.fld[2]).rtreg)
      = get_reg_attrs (t, -(((x)->u.fld[1]).rtuint));
  if (((enum rtx_code) (x)->code) == CONCAT)
    {
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
        ((((((x)->u.fld[0]).rtx1))->u.fld[2]).rtreg) = get_reg_attrs (t, 0);
      if ((((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG))
 ((((((x)->u.fld[1]).rtx1))->u.fld[2]).rtreg)
   = get_reg_attrs (t, (mode_inner[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == VOIDmode ? ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) : ((unsigned short) mode_size[mode_inner[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]])));
    }
  if (((enum rtx_code) (x)->code) == PARALLEL)
    {
      int i;
      for (i = 0; i < (((((x)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx y = (((((x)->u.fld[0]).rtvec1))->elem[i]);
   if ((((enum rtx_code) ((((y)->u.fld[0]).rtx1))->code) == REG))
     ((((((y)->u.fld[0]).rtx1))->u.fld[2]).rtreg) = get_reg_attrs (t, (((((y)->u.fld[1]).rtx1))->u.hwint[0]));
 }
    }
}
void
set_decl_incoming_rtl (tree t, rtx x)
{
  ((t)->decl.u2.r) = x;
  if (!x)
    return;
  if ((((enum rtx_code) (x)->code) == REG))
    (((x)->u.fld[2]).rtreg) = get_reg_attrs (t, 0);
  else if (((enum rtx_code) (x)->code) == SUBREG)
    ((((((x)->u.fld[0]).rtx1))->u.fld[2]).rtreg)
      = get_reg_attrs (t, -(((x)->u.fld[1]).rtuint));
  if (((enum rtx_code) (x)->code) == CONCAT)
    {
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
        ((((((x)->u.fld[0]).rtx1))->u.fld[2]).rtreg) = get_reg_attrs (t, 0);
      if ((((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG))
 ((((((x)->u.fld[1]).rtx1))->u.fld[2]).rtreg)
   = get_reg_attrs (t, (mode_inner[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == VOIDmode ? ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) : ((unsigned short) mode_size[mode_inner[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]])));
    }
  if (((enum rtx_code) (x)->code) == PARALLEL)
    {
      int i, start;
      if (((((((((x)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))
 start = 0;
      else
 start = 1;
      for (i = start; i < (((((x)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx y = (((((x)->u.fld[0]).rtvec1))->elem[i]);
   if ((((enum rtx_code) ((((y)->u.fld[0]).rtx1))->code) == REG))
     ((((((y)->u.fld[0]).rtx1))->u.fld[2]).rtreg) = get_reg_attrs (t, (((((y)->u.fld[1]).rtx1))->u.hwint[0]));
 }
    }
}
void
mark_user_reg (rtx reg)
{
  if (((enum rtx_code) (reg)->code) == CONCAT)
    {
      ((((((reg)->u.fld[0]).rtx1)))->volatil) = 1;
      ((((((reg)->u.fld[1]).rtx1)))->volatil) = 1;
    }
  else if ((((enum rtx_code) (reg)->code) == REG))
    (((reg))->volatil) = 1;
  else
    abort ();
}
void
mark_reg_pointer (rtx reg, int align)
{
  if (! (((reg))->frame_related))
    {
      (((reg))->frame_related) = 1;
      if (align)
 (cfun->emit->regno_pointer_align[(((reg)->u.fld[0]).rtuint)]) = align;
    }
  else if (align && align < (cfun->emit->regno_pointer_align[(((reg)->u.fld[0]).rtuint)]))
    (cfun->emit->regno_pointer_align[(((reg)->u.fld[0]).rtuint)]) = align;
}
int
max_reg_num (void)
{
  return (cfun->emit->x_reg_rtx_no);
}
int
max_label_num (void)
{
  if (last_label_num && label_num == base_label_num)
    return last_label_num;
  return label_num;
}
int
get_first_label_num (void)
{
  return (cfun->emit->x_first_label_num);
}
void
maybe_set_first_label_num (rtx x)
{
  if ((((x)->u.fld[6]).rtint) < (cfun->emit->x_first_label_num))
    (cfun->emit->x_first_label_num) = (((x)->u.fld[6]).rtint);
}
int
subreg_hard_regno (rtx x, int check_mode)
{
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  unsigned int byte_offset, base_regno, final_regno;
  rtx reg = (((x)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x)->code) != SUBREG
      || !(((enum rtx_code) (reg)->code) == REG))
    abort ();
  base_regno = (((reg)->u.fld[0]).rtuint);
  if (base_regno >= 53)
    abort ();
  if (check_mode && ! ix86_hard_regno_mode_ok ((base_regno), (((enum machine_mode) (reg)->mode))))
    abort ();
  byte_offset = (((x)->u.fld[1]).rtuint);
  if ((byte_offset % ((unsigned short) mode_size[mode])) != 0)
    abort ();
  final_regno = subreg_regno (x);
  return final_regno;
}
rtx
gen_lowpart_common (enum machine_mode mode, rtx x)
{
  int msize = ((unsigned short) mode_size[mode]);
  int xsize;
  int offset = 0;
  enum machine_mode innermode;
  innermode = ((enum machine_mode) (x)->mode);
  if (((enum rtx_code) (x)->code) == CONST_INT && msize <= (8 * 4))
    innermode = mode_for_size ((8 * 4), MODE_INT, 0);
  else if (innermode == VOIDmode)
    innermode = mode_for_size ((8 * 4) * 2, MODE_INT, 0);
  xsize = ((unsigned short) mode_size[innermode]);
  if (innermode == VOIDmode || innermode == BLKmode)
    abort ();
  if (innermode == mode)
    return x;
  if ((msize + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4)
      > ((xsize + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4)))
    return 0;
  if (mode_class[mode] == MODE_FLOAT && msize > xsize)
    return 0;
  offset = subreg_lowpart_offset (mode, innermode);
  if ((((enum rtx_code) (x)->code) == ZERO_EXTEND || ((enum rtx_code) (x)->code) == SIGN_EXTEND)
      && (mode_class[mode] == MODE_INT
   || mode_class[mode] == MODE_PARTIAL_INT))
    {
      if (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) == mode)
 return (((x)->u.fld[0]).rtx1);
      else if (msize < ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]))
 return gen_lowpart_common (mode, (((x)->u.fld[0]).rtx1));
      else if (msize < xsize)
 return gen_rtx_fmt_e (((enum rtx_code) (x)->code), mode, (((x)->u.fld[0]).rtx1));
    }
  else if (((enum rtx_code) (x)->code) == SUBREG || (((enum rtx_code) (x)->code) == REG)
    || ((enum rtx_code) (x)->code) == CONCAT || ((enum rtx_code) (x)->code) == CONST_VECTOR
    || ((enum rtx_code) (x)->code) == CONST_DOUBLE || ((enum rtx_code) (x)->code) == CONST_INT)
    return simplify_gen_subreg (mode, x, innermode, offset);
  return 0;
}
static rtx
gen_complex_constant_part (enum machine_mode mode, rtx x, int imagpart_p)
{
  tree decl, part;
  if ((((enum rtx_code) (x)->code) == MEM)
      && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SYMBOL_REF)
    {
      decl = (((((((x)->u.fld[0]).rtx1)))->u.fld[2]).rttree);
      if (decl != (tree) ((void *)0) && ((enum tree_code) (decl)->common.code) == COMPLEX_CST)
 {
   part = imagpart_p ? ((decl)->complex.imag) : ((decl)->complex.real);
   if (((enum tree_code) (part)->common.code) == REAL_CST
       || ((enum tree_code) (part)->common.code) == INTEGER_CST)
     return expand_expr (part, (rtx) 0, mode, 0);
 }
    }
  return (rtx) 0;
}
rtx
gen_realpart (enum machine_mode mode, rtx x)
{
  rtx part;
  part = gen_complex_constant_part (mode, x, 0);
  if (part != (rtx) 0)
    return part;
  if (0
      && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) < (8 * (0 ? 8 : 4))
      && (((enum rtx_code) (x)->code) == REG)
      && (((x)->u.fld[0]).rtuint) < 53)
    internal_error
      ("can't access real part of complex value in hard register");
  else if (0)
    return gen_highpart (mode, x);
  else
    return rtl_hooks.gen_lowpart (mode, x);
}
rtx
gen_imagpart (enum machine_mode mode, rtx x)
{
  rtx part;
  part = gen_complex_constant_part (mode, x, 1);
  if (part != (rtx) 0)
    return part;
  if (0)
    return rtl_hooks.gen_lowpart (mode, x);
  else if (! 0
    && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) < (8 * (0 ? 8 : 4))
    && (((enum rtx_code) (x)->code) == REG)
    && (((x)->u.fld[0]).rtuint) < 53)
    internal_error
      ("can't access imaginary part of complex value in hard register");
  else
    return gen_highpart (mode, x);
}
rtx
gen_highpart (enum machine_mode mode, rtx x)
{
  unsigned int msize = ((unsigned short) mode_size[mode]);
  rtx result;
  if (msize > (0 ? 8 : 4)
      && msize != (unsigned int) (mode_inner[((enum machine_mode) (x)->mode)] == VOIDmode ? ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) : ((unsigned short) mode_size[mode_inner[((enum machine_mode) (x)->mode)]])))
    abort ();
  result = simplify_gen_subreg (mode, x, ((enum machine_mode) (x)->mode),
    subreg_highpart_offset (mode, ((enum machine_mode) (x)->mode)));
  if (result != (rtx) 0 && (((enum rtx_code) (result)->code) == MEM))
    result = validize_mem (result);
  if (!result)
    abort ();
  return result;
}
rtx
gen_highpart_mode (enum machine_mode outermode, enum machine_mode innermode, rtx exp)
{
  if (((enum machine_mode) (exp)->mode) != VOIDmode)
    {
      if (((enum machine_mode) (exp)->mode) != innermode)
 abort ();
      return gen_highpart (outermode, exp);
    }
  return simplify_gen_subreg (outermode, exp, innermode,
         subreg_highpart_offset (outermode, innermode));
}
unsigned int
subreg_lowpart_offset (enum machine_mode outermode, enum machine_mode innermode)
{
  unsigned int offset = 0;
  int difference = (((unsigned short) mode_size[innermode]) - ((unsigned short) mode_size[outermode]));
  if (difference > 0)
    {
      if (0)
 offset += (difference / (0 ? 8 : 4)) * (0 ? 8 : 4);
      if (0)
 offset += difference % (0 ? 8 : 4);
    }
  return offset;
}
unsigned int
subreg_highpart_offset (enum machine_mode outermode, enum machine_mode innermode)
{
  unsigned int offset = 0;
  int difference = (((unsigned short) mode_size[innermode]) - ((unsigned short) mode_size[outermode]));
  if (((unsigned short) mode_size[innermode]) < ((unsigned short) mode_size[outermode]))
    abort ();
  if (difference > 0)
    {
      if (! 0)
 offset += (difference / (0 ? 8 : 4)) * (0 ? 8 : 4);
      if (! 0)
 offset += difference % (0 ? 8 : 4);
    }
  return offset;
}
int
subreg_lowpart_p (rtx x)
{
  if (((enum rtx_code) (x)->code) != SUBREG)
    return 1;
  else if (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) == VOIDmode)
    return 0;
  return (subreg_lowpart_offset (((enum machine_mode) (x)->mode), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode))
   == (((x)->u.fld[1]).rtuint));
}
rtx
operand_subword (rtx op, unsigned int offset, int validate_address, enum machine_mode mode)
{
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (op)->mode);
  if (mode == VOIDmode)
    abort ();
  if (mode != BLKmode
      && (((unsigned short) mode_size[mode]) < (0 ? 8 : 4)))
    return 0;
  if (mode != BLKmode
      && (offset + 1) * (0 ? 8 : 4) > ((unsigned short) mode_size[mode]))
    return (const_int_rtx[64]);
  if ((((enum rtx_code) (op)->code) == MEM))
    {
      rtx new = adjust_address_1 (op, word_mode, offset * (0 ? 8 : 4), 0, 1);
      if (! validate_address)
 return new;
      else if (reload_completed)
 {
   if (! strict_memory_address_p (word_mode, (((new)->u.fld[0]).rtx1)))
     return 0;
 }
      else
 return replace_equiv_address (new, (((new)->u.fld[0]).rtx1));
    }
  return simplify_gen_subreg (word_mode, op, mode, (offset * (0 ? 8 : 4)));
}
rtx
operand_subword_force (rtx op, unsigned int offset, enum machine_mode mode)
{
  rtx result = operand_subword (op, offset, 1, mode);
  if (result)
    return result;
  if (mode != BLKmode && mode != VOIDmode)
    {
      if ((((enum rtx_code) (op)->code) == REG))
 op = copy_to_reg (op);
      else
 op = force_reg (mode, op);
    }
  result = operand_subword (op, offset, 1, mode);
  if (result == 0)
    abort ();
  return result;
}
void
reverse_comparison (rtx insn)
{
  rtx body = (((insn)->u.fld[5]).rtx1);
  rtx comp;
  if (((enum rtx_code) (body)->code) == SET)
    comp = (((body)->u.fld[1]).rtx1);
  else
    comp = ((((((((body)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1);
  if (((enum rtx_code) (comp)->code) == COMPARE)
    {
      rtx op0 = (((comp)->u.fld[0]).rtx1);
      rtx op1 = (((comp)->u.fld[1]).rtx1);
      (((comp)->u.fld[0]).rtx1) = op1;
      (((comp)->u.fld[1]).rtx1) = op0;
    }
  else
    {
      rtx new = gen_rtx_fmt_ee (COMPARE, (VOIDmode), ((const_tiny_rtx[0][(int) (((enum machine_mode) (comp)->mode))])), (comp))
                                        ;
      if (((enum rtx_code) (body)->code) == SET)
 (((body)->u.fld[1]).rtx1) = new;
      else
 ((((((((body)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1) = new;
    }
}
static tree
component_ref_for_mem_expr (tree ref)
{
  tree inner = ((ref)->exp.operands[0]);
  if (((enum tree_code) (inner)->common.code) == COMPONENT_REF)
    inner = component_ref_for_mem_expr (inner);
  else
    {
      while (((enum tree_code) (inner)->common.code) == NOP_EXPR || ((enum tree_code) (inner)->common.code) == CONVERT_EXPR
      || ((enum tree_code) (inner)->common.code) == NON_LVALUE_EXPR
      || ((enum tree_code) (inner)->common.code) == VIEW_CONVERT_EXPR
      || ((enum tree_code) (inner)->common.code) == SAVE_EXPR)
 inner = ((inner)->exp.operands[0]);
      if (! (tree_code_type[(int) (((enum tree_code) (inner)->common.code))] == 'd'))
 inner = (tree) ((void *)0);
    }
  if (inner == ((ref)->exp.operands[0]))
    return ref;
  else
    return build (COMPONENT_REF, ((ref)->common.type), inner, ((ref)->exp.operands[1]),
    (tree) ((void *)0));
}
int
mem_expr_equal_p (tree expr1, tree expr2)
{
  if (expr1 == expr2)
    return 1;
  if (! expr1 || ! expr2)
    return 0;
  if (((enum tree_code) (expr1)->common.code) != ((enum tree_code) (expr2)->common.code))
    return 0;
  if (((enum tree_code) (expr1)->common.code) == COMPONENT_REF)
    return
      mem_expr_equal_p (((expr1)->exp.operands[0]),
   ((expr2)->exp.operands[0]))
      && mem_expr_equal_p (((expr1)->exp.operands[1]),
      ((expr2)->exp.operands[1]));
  if (((enum tree_code) (expr1)->common.code) == INDIRECT_REF)
    return mem_expr_equal_p (((expr1)->exp.operands[0]),
        ((expr2)->exp.operands[0]));
  if ((tree_code_type[(int) (((enum tree_code) (expr1)->common.code))] == 'd'))
    return 0;
  abort();
}
void
set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
     long bitpos)
{
  long alias = ((((ref)->u.fld[1]).rtmem) == 0 ? 0 : (((ref)->u.fld[1]).rtmem)->alias);
  tree expr = ((((ref)->u.fld[1]).rtmem) == 0 ? 0 : (((ref)->u.fld[1]).rtmem)->expr);
  rtx offset = ((((ref)->u.fld[1]).rtmem) == 0 ? 0 : (((ref)->u.fld[1]).rtmem)->offset);
  rtx size = ((((ref)->u.fld[1]).rtmem) != 0 ? (((ref)->u.fld[1]).rtmem)->size : ((enum machine_mode) (ref)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (ref)->mode)]))) : 0);
  unsigned int align = ((((ref)->u.fld[1]).rtmem) != 0 ? (((ref)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (ref)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (ref)->mode)) : 8));
  long apply_bitpos = 0;
  tree type;
  if (t == (tree) ((void *)0))
    return;
  type = (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't') ? t : ((t)->common.type);
  if (type == global_trees[TI_ERROR_MARK])
    return;
  if ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd') && ref == (((t)->decl.rtl != ((void *)0)) ? ((t)->decl.rtl ? (t)->decl.rtl : (make_decl_rtl (t, ((void *)0)), (t)->decl.rtl)) : ((void *)0)))
    abort ();
  alias = get_alias_set (t);
  (((ref))->volatil) |= ((type)->common.volatile_flag);
  (((ref))->in_struct) = (((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE);
  (((ref))->unchanging)
    |= ((lang_hooks.honor_readonly
  && (((type)->common.readonly_flag) || (t != type && ((t)->common.readonly_flag))))
 || (! (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't') && ((t)->common.constant_flag)));
  (((ref))->frame_related) = (((enum tree_code) (type)->common.code) == POINTER_TYPE || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE);
  (((ref))->call) = ((t)->common.nothrow_flag);
  if ((objectp || (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd')) && ! (((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE))
    (((ref))->return_val) = 1;
  if (objectp || ((enum tree_code) (t)->common.code) == INDIRECT_REF || ((type)->common.nothrow_flag))
    align = ((align) > (((type)->type.align)) ? (align) : (((type)->type.align)));
  if (((type)->type.size_unit) && host_integerp (((type)->type.size_unit), 1))
    size = gen_rtx_CONST_INT (VOIDmode, (long) (tree_low_cst (((type)->type.size_unit), 1)));
  if (! (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
    {
      maybe_set_unchanging (ref, t);
      if (((t)->common.volatile_flag))
 (((ref))->volatil) = 1;
      while (((enum tree_code) (t)->common.code) == NOP_EXPR || ((enum tree_code) (t)->common.code) == CONVERT_EXPR
      || ((enum tree_code) (t)->common.code) == NON_LVALUE_EXPR
      || ((enum tree_code) (t)->common.code) == VIEW_CONVERT_EXPR
      || ((enum tree_code) (t)->common.code) == SAVE_EXPR)
 t = ((t)->exp.operands[0]);
      if (! can_address_p (t))
 (((ref))->jump) = 1;
      if ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd'))
 {
   expr = t;
   offset = (const_int_rtx[64]);
   apply_bitpos = bitpos;
   size = (((t)->decl.size_unit)
    && host_integerp (((t)->decl.size_unit), 1)
    ? gen_rtx_CONST_INT (VOIDmode, (long) (tree_low_cst (((t)->decl.size_unit), 1))) : 0);
   align = ((t)->decl.u1.a.align);
 }
      else if (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'c')
 {
   align = ((type)->type.align);
   align = ix86_constant_alignment ((t), (align));
 }
      else if (((enum tree_code) (t)->common.code) == COMPONENT_REF
        && ! ((((t)->exp.operands[1]))->decl.bit_field_flag))
 {
   expr = component_ref_for_mem_expr (t);
   offset = (const_int_rtx[64]);
   apply_bitpos = bitpos;
 }
      else if (((enum tree_code) (t)->common.code) == ARRAY_REF)
 {
   tree off_tree = global_trees[TI_SIZE_ZERO];
   tree t2 = t;
   do
     {
       tree index = ((t2)->exp.operands[1]);
       tree low_bound = array_ref_low_bound (t2);
       tree unit_size = array_ref_element_size (t2);
       if (! integer_zerop (low_bound))
  index = fold (build (MINUS_EXPR, ((index)->common.type),
         index, low_bound));
       off_tree = size_binop (PLUS_EXPR,
         size_binop (MULT_EXPR, convert (sizetype_tab[(int) SIZETYPE],
             index),
       unit_size),
         off_tree);
       t2 = ((t2)->exp.operands[0]);
     }
   while (((enum tree_code) (t2)->common.code) == ARRAY_REF);
   if ((tree_code_type[(int) (((enum tree_code) (t2)->common.code))] == 'd'))
     {
       expr = t2;
       offset = ((void *)0);
       if (host_integerp (off_tree, 1))
  {
    long ioff = tree_low_cst (off_tree, 1);
    long aoff = (ioff & -ioff) * 8;
    align = ((t2)->decl.u1.a.align);
    if (aoff && (unsigned long) aoff < align)
             align = aoff;
    offset = gen_rtx_CONST_INT (VOIDmode, (long) (ioff));
    apply_bitpos = bitpos;
  }
     }
   else if (((enum tree_code) (t2)->common.code) == COMPONENT_REF)
     {
       expr = component_ref_for_mem_expr (t2);
       if (host_integerp (off_tree, 1))
  {
    offset = gen_rtx_CONST_INT (VOIDmode, (long) (tree_low_cst (off_tree, 1)));
    apply_bitpos = bitpos;
  }
     }
   else if (flag_argument_noalias > 1
     && ((enum tree_code) (t2)->common.code) == INDIRECT_REF
     && ((enum tree_code) (((t2)->exp.operands[0]))->common.code) == PARM_DECL)
     {
       expr = t2;
       offset = ((void *)0);
     }
 }
      else if (flag_argument_noalias > 1
        && ((enum tree_code) (t)->common.code) == INDIRECT_REF
        && ((enum tree_code) (((t)->exp.operands[0]))->common.code) == PARM_DECL)
 {
   expr = t;
   offset = ((void *)0);
 }
    }
  if (apply_bitpos)
    {
      offset = plus_constant_wide ((offset), (long) (-(apply_bitpos / 8)));
      if (size)
 size = plus_constant_wide ((size), (long) (apply_bitpos / 8));
    }
  (((ref)->u.fld[1]).rtmem)
    = get_mem_attrs (alias, expr, offset, size, align, ((enum machine_mode) (ref)->mode));
  if ((((ref))->in_struct) || (((ref))->return_val))
    return;
  else if (((enum tree_code) (t)->common.code) == COMPONENT_REF || ((enum tree_code) (t)->common.code) == ARRAY_REF
    || ((enum tree_code) (t)->common.code) == ARRAY_RANGE_REF
    || ((enum tree_code) (t)->common.code) == BIT_FIELD_REF)
    (((ref))->in_struct) = 1;
}
void
set_mem_attributes (rtx ref, tree t, int objectp)
{
  set_mem_attributes_minus_bitpos (ref, t, objectp, 0);
}
void
set_mem_attrs_from_reg (rtx mem, rtx reg)
{
  (((mem)->u.fld[1]).rtmem)
    = get_mem_attrs (((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->alias), ((((reg)->u.fld[2]).rtreg) == 0 ? 0 : (((reg)->u.fld[2]).rtreg)->decl),
       gen_rtx_CONST_INT (VOIDmode, (long) (((((reg)->u.fld[2]).rtreg) == 0 ? 0 : (((reg)->u.fld[2]).rtreg)->offset))),
       ((((mem)->u.fld[1]).rtmem) != 0 ? (((mem)->u.fld[1]).rtmem)->size : ((enum machine_mode) (mem)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (mem)->mode)]))) : 0), ((((mem)->u.fld[1]).rtmem) != 0 ? (((mem)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (mem)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (mem)->mode)) : 8)), ((enum machine_mode) (mem)->mode));
}
void
set_mem_alias_set (rtx mem, long set)
{
  (((mem)->u.fld[1]).rtmem) = get_mem_attrs (set, ((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->expr), ((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->offset),
       ((((mem)->u.fld[1]).rtmem) != 0 ? (((mem)->u.fld[1]).rtmem)->size : ((enum machine_mode) (mem)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (mem)->mode)]))) : 0), ((((mem)->u.fld[1]).rtmem) != 0 ? (((mem)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (mem)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (mem)->mode)) : 8)),
       ((enum machine_mode) (mem)->mode));
}
void
set_mem_align (rtx mem, unsigned int align)
{
  (((mem)->u.fld[1]).rtmem) = get_mem_attrs (((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->alias), ((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->expr),
       ((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->offset), ((((mem)->u.fld[1]).rtmem) != 0 ? (((mem)->u.fld[1]).rtmem)->size : ((enum machine_mode) (mem)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (mem)->mode)]))) : 0), align,
       ((enum machine_mode) (mem)->mode));
}
void
set_mem_expr (rtx mem, tree expr)
{
  (((mem)->u.fld[1]).rtmem)
    = get_mem_attrs (((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->alias), expr, ((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->offset),
       ((((mem)->u.fld[1]).rtmem) != 0 ? (((mem)->u.fld[1]).rtmem)->size : ((enum machine_mode) (mem)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (mem)->mode)]))) : 0), ((((mem)->u.fld[1]).rtmem) != 0 ? (((mem)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (mem)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (mem)->mode)) : 8)), ((enum machine_mode) (mem)->mode));
}
void
set_mem_offset (rtx mem, rtx offset)
{
  (((mem)->u.fld[1]).rtmem) = get_mem_attrs (((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->alias), ((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->expr),
       offset, ((((mem)->u.fld[1]).rtmem) != 0 ? (((mem)->u.fld[1]).rtmem)->size : ((enum machine_mode) (mem)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (mem)->mode)]))) : 0), ((((mem)->u.fld[1]).rtmem) != 0 ? (((mem)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (mem)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (mem)->mode)) : 8)),
       ((enum machine_mode) (mem)->mode));
}
void
set_mem_size (rtx mem, rtx size)
{
  (((mem)->u.fld[1]).rtmem) = get_mem_attrs (((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->alias), ((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->expr),
       ((((mem)->u.fld[1]).rtmem) == 0 ? 0 : (((mem)->u.fld[1]).rtmem)->offset), size, ((((mem)->u.fld[1]).rtmem) != 0 ? (((mem)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (mem)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (mem)->mode)) : 8)),
       ((enum machine_mode) (mem)->mode));
}
static rtx
change_address_1 (rtx memref, enum machine_mode mode, rtx addr, int validate)
{
  rtx new;
  if (!(((enum rtx_code) (memref)->code) == MEM))
    abort ();
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (memref)->mode);
  if (addr == 0)
    addr = (((memref)->u.fld[0]).rtx1);
  if (mode == ((enum machine_mode) (memref)->mode) && addr == (((memref)->u.fld[0]).rtx1)
      && (!validate || memory_address_p (mode, addr)))
    return memref;
  if (validate)
    {
      if (reload_in_progress || reload_completed)
 {
   if (! memory_address_p (mode, addr))
     abort ();
 }
      else
 addr = memory_address (mode, addr);
    }
  if (rtx_equal_p (addr, (((memref)->u.fld[0]).rtx1)) && mode == ((enum machine_mode) (memref)->mode))
    return memref;
  new = gen_rtx_MEM (mode, addr);
  ((((new))->volatil) = (((memref))->volatil), (((new))->in_struct) = (((memref))->in_struct), (((new))->return_val) = (((memref))->return_val), (((new))->call) = (((memref))->call), (((new))->unchanging) = (((memref))->unchanging), (((new))->jump) = (((memref))->jump), (((new)->u.fld[1]).rtmem) = (((memref)->u.fld[1]).rtmem));
  return new;
}
rtx
change_address (rtx memref, enum machine_mode mode, rtx addr)
{
  rtx new = change_address_1 (memref, mode, addr, 1), size;
  enum machine_mode mmode = ((enum machine_mode) (new)->mode);
  unsigned int align;
  size = mmode == BLKmode ? 0 : gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[mmode])));
  align = mmode == BLKmode ? 8 : get_mode_alignment (mmode);
  if (new == memref)
    {
      if ((((memref)->u.fld[1]).rtmem) == 0
   || (((((memref)->u.fld[1]).rtmem) == 0 ? 0 : (((memref)->u.fld[1]).rtmem)->expr) == ((void *)0)
       && ((((memref)->u.fld[1]).rtmem) == 0 ? 0 : (((memref)->u.fld[1]).rtmem)->offset) == ((void *)0)
       && ((((memref)->u.fld[1]).rtmem) != 0 ? (((memref)->u.fld[1]).rtmem)->size : ((enum machine_mode) (memref)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (memref)->mode)]))) : 0) == size
       && ((((memref)->u.fld[1]).rtmem) != 0 ? (((memref)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (memref)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (memref)->mode)) : 8)) == align))
 return new;
      new = gen_rtx_MEM (mmode, (((memref)->u.fld[0]).rtx1));
      ((((new))->volatil) = (((memref))->volatil), (((new))->in_struct) = (((memref))->in_struct), (((new))->return_val) = (((memref))->return_val), (((new))->call) = (((memref))->call), (((new))->unchanging) = (((memref))->unchanging), (((new))->jump) = (((memref))->jump), (((new)->u.fld[1]).rtmem) = (((memref)->u.fld[1]).rtmem));
    }
  (((new)->u.fld[1]).rtmem)
    = get_mem_attrs (((((memref)->u.fld[1]).rtmem) == 0 ? 0 : (((memref)->u.fld[1]).rtmem)->alias), 0, 0, size, align, mmode);
  return new;
}
rtx
adjust_address_1 (rtx memref, enum machine_mode mode, long offset,
    int validate, int adjust)
{
  rtx addr = (((memref)->u.fld[0]).rtx1);
  rtx new;
  rtx memoffset = ((((memref)->u.fld[1]).rtmem) == 0 ? 0 : (((memref)->u.fld[1]).rtmem)->offset);
  rtx size = 0;
  unsigned int memalign = ((((memref)->u.fld[1]).rtmem) != 0 ? (((memref)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (memref)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (memref)->mode)) : 8));
  if (mode == ((enum machine_mode) (memref)->mode) && !offset
      && (!validate || memory_address_p (mode, addr)))
    return memref;
  addr = copy_rtx (addr);
  if (adjust)
    {
      if (((enum machine_mode) (memref)->mode) != BLKmode && ((enum rtx_code) (addr)->code) == LO_SUM
   && offset >= 0
   && (unsigned long) offset
       < get_mode_alignment (((enum machine_mode) (memref)->mode)) / 8)
 addr = gen_rtx_fmt_ee (LO_SUM, ((0 ? DImode : SImode)), ((((addr)->u.fld[0]).rtx1)), (plus_constant_wide (((((addr)->u.fld[1]).rtx1)), (long) (offset))))
                                                 ;
      else
 addr = plus_constant_wide ((addr), (long) (offset));
    }
  new = change_address_1 (memref, mode, addr, validate);
  if (memoffset)
    memoffset = gen_rtx_CONST_INT (VOIDmode, (long) (offset + ((memoffset)->u.hwint[0])));
  if (offset != 0)
    memalign
      = ((memalign) < ((unsigned long) (offset & -offset) * 8) ? (memalign) : ((unsigned long) (offset & -offset) * 8))
                                                                  ;
  if (((enum machine_mode) (new)->mode) != BLKmode)
    size = gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (new)->mode)])));
  else if (((((memref)->u.fld[1]).rtmem) != 0 ? (((memref)->u.fld[1]).rtmem)->size : ((enum machine_mode) (memref)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (memref)->mode)]))) : 0))
    size = plus_constant_wide ((((((memref)->u.fld[1]).rtmem) != 0 ? (((memref)->u.fld[1]).rtmem)->size : ((enum machine_mode) (memref)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (memref)->mode)]))) : 0)), (long) (-offset));
  (((new)->u.fld[1]).rtmem) = get_mem_attrs (((((memref)->u.fld[1]).rtmem) == 0 ? 0 : (((memref)->u.fld[1]).rtmem)->alias), ((((memref)->u.fld[1]).rtmem) == 0 ? 0 : (((memref)->u.fld[1]).rtmem)->expr),
       memoffset, size, memalign, ((enum machine_mode) (new)->mode));
  return new;
}
rtx
adjust_automodify_address_1 (rtx memref, enum machine_mode mode, rtx addr,
        long offset, int validate)
{
  memref = change_address_1 (memref, VOIDmode, addr, validate);
  return adjust_address_1 (memref, mode, offset, validate, 0);
}
rtx
offset_address (rtx memref, rtx offset, unsigned long pow2)
{
  rtx new, addr = (((memref)->u.fld[0]).rtx1);
  new = simplify_gen_binary (PLUS, (0 ? DImode : SImode), addr, offset);
  if (! memory_address_p (((enum machine_mode) (memref)->mode), new)
      && ((enum rtx_code) (addr)->code) == PLUS
      && (((addr)->u.fld[0]).rtx1) == pic_offset_table_rtx)
    {
      addr = force_reg (((enum machine_mode) (addr)->mode), addr);
      new = simplify_gen_binary (PLUS, (0 ? DImode : SImode), addr, offset);
    }
  update_temp_slot_address ((((memref)->u.fld[0]).rtx1), new);
  new = change_address_1 (memref, VOIDmode, new, 1);
  if (new == memref)
    return new;
  (((new)->u.fld[1]).rtmem)
    = get_mem_attrs (((((memref)->u.fld[1]).rtmem) == 0 ? 0 : (((memref)->u.fld[1]).rtmem)->alias), ((((memref)->u.fld[1]).rtmem) == 0 ? 0 : (((memref)->u.fld[1]).rtmem)->expr), 0, 0,
       ((((((memref)->u.fld[1]).rtmem) != 0 ? (((memref)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (memref)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (memref)->mode)) : 8))) < (pow2 * 8) ? (((((memref)->u.fld[1]).rtmem) != 0 ? (((memref)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (memref)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (memref)->mode)) : 8))) : (pow2 * 8)),
       ((enum machine_mode) (new)->mode));
  return new;
}
rtx
replace_equiv_address (rtx memref, rtx addr)
{
  update_temp_slot_address ((((memref)->u.fld[0]).rtx1), addr);
  return change_address_1 (memref, VOIDmode, addr, 1);
}
rtx
replace_equiv_address_nv (rtx memref, rtx addr)
{
  return change_address_1 (memref, VOIDmode, addr, 0);
}
rtx
widen_memory_access (rtx memref, enum machine_mode mode, long offset)
{
  rtx new = adjust_address_1 (memref, mode, offset, 1, 1);
  tree expr = ((((new)->u.fld[1]).rtmem) == 0 ? 0 : (((new)->u.fld[1]).rtmem)->expr);
  rtx memoffset = ((((new)->u.fld[1]).rtmem) == 0 ? 0 : (((new)->u.fld[1]).rtmem)->offset);
  unsigned int size = ((unsigned short) mode_size[mode]);
  if (new == memref)
    return new;
  if (! memoffset)
    expr = (tree) ((void *)0);
  while (expr)
    {
      if (((enum tree_code) (expr)->common.code) == COMPONENT_REF)
 {
   tree field = ((expr)->exp.operands[1]);
   tree offset = component_ref_field_offset (expr);
   if (! ((field)->decl.size_unit))
     {
       expr = (tree) ((void *)0);
       break;
     }
   if (((enum tree_code) (((field)->decl.size_unit))->common.code) == INTEGER_CST
       && compare_tree_int (((field)->decl.size_unit), size) >= 0
       && ((memoffset)->u.hwint[0]) >= 0)
     break;
   if (! host_integerp (offset, 1))
     {
       expr = (tree) ((void *)0);
       break;
     }
   expr = ((expr)->exp.operands[0]);
   memoffset
     = (gen_rtx_CONST_INT (VOIDmode, (long) (((memoffset)->u.hwint[0]) + tree_low_cst (offset, 1) + (tree_low_cst (((field)->decl.u2.t), 1) / 8)))
                       );
 }
      else if ((tree_code_type[(int) (((enum tree_code) (expr)->common.code))] == 'd')
        && ((expr)->decl.size_unit)
        && ((enum tree_code) (((expr)->decl.size_unit))->common.code) == INTEGER_CST
        && compare_tree_int (((expr)->decl.size_unit), size) >= 0
        && (! memoffset || ((memoffset)->u.hwint[0]) >= 0))
 break;
      else
 {
   expr = (tree) ((void *)0);
   break;
 }
    }
  if (! expr)
    memoffset = (rtx) 0;
  (((new)->u.fld[1]).rtmem) = get_mem_attrs (0, expr, memoffset, gen_rtx_CONST_INT (VOIDmode, (long) (size)),
       ((((new)->u.fld[1]).rtmem) != 0 ? (((new)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (new)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (new)->mode)) : 8)), mode);
  return new;
}
rtx
gen_label_rtx (void)
{
  return gen_rtx_fmt_iuuB00is (CODE_LABEL, (VOIDmode), (0), ((rtx) 0), ((rtx) 0), (((void *)0)), (label_num++), (((void *)0)))
                                ;
}
void
set_new_first_and_last_insn (rtx first, rtx last)
{
  rtx insn;
  (cfun->emit->x_first_insn) = first;
  (cfun->emit->x_last_insn) = last;
  (cfun->emit->x_cur_insn_uid) = 0;
  for (insn = first; insn; insn = (((insn)->u.fld[2]).rtx1))
    (cfun->emit->x_cur_insn_uid) = (((cfun->emit->x_cur_insn_uid)) > ((((insn)->u.fld[0]).rtint)) ? ((cfun->emit->x_cur_insn_uid)) : ((((insn)->u.fld[0]).rtint)));
  (cfun->emit->x_cur_insn_uid)++;
}
void
set_new_last_label_num (int last)
{
  base_label_num = label_num;
  last_label_num = last;
}
void
restore_emit_status (struct function *p )
{
  last_label_num = 0;
}
static void
unshare_all_rtl_1 (tree fndecl, rtx insn)
{
  tree decl;
  for (decl = ((fndecl)->decl.arguments); decl; decl = ((decl)->common.chain))
    set_decl_rtl (decl, copy_rtx_if_shared (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl))));
  unshare_all_decls (((fndecl)->decl.initial));
  unshare_all_rtl_in_chain (insn);
  (cfun->x_stack_slot_list) = copy_rtx_if_shared ((cfun->x_stack_slot_list));
}
void
unshare_all_rtl_again (rtx insn)
{
  rtx p;
  tree decl;
  for (p = insn; p; p = (((p)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
      {
 reset_used_flags ((((p)->u.fld[5]).rtx1));
 reset_used_flags ((((p)->u.fld[8]).rtx1));
 reset_used_flags ((((p)->u.fld[7]).rtx1));
      }
  reset_used_decls (((cfun->decl)->decl.initial));
  for (decl = ((cfun->decl)->decl.arguments); decl; decl = ((decl)->common.chain))
    reset_used_flags (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)));
  reset_used_flags ((cfun->x_stack_slot_list));
  unshare_all_rtl_1 (cfun->decl, insn);
}
void
unshare_all_rtl (void)
{
  unshare_all_rtl_1 (current_function_decl, get_insns ());
}
static void
verify_rtx_sharing (rtx orig, rtx insn)
{
  rtx x = orig;
  int i;
  enum rtx_code code;
  const char *format_ptr;
  if (x == 0)
    return;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
    case QUEUED:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
    case CODE_LABEL:
    case PC:
    case CC0:
    case SCRATCH:
      return;
    case CLOBBER:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG) && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
 return;
      break;
    case CONST:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SYMBOL_REF
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
 return;
      break;
    case MEM:
      if (constant_address_p ((((x)->u.fld[0]).rtx1))
   || reload_completed || reload_in_progress)
 return;
      break;
    default:
      break;
    }
  if (((x)->used))
    {
      error ("Invalid rtl sharing found in the insn");
      debug_rtx (insn);
      error ("Shared rtx");
      debug_rtx (x);
      abort ();
    }
  ((x)->used) = 1;
  format_ptr = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++)
    {
      switch (*format_ptr++)
 {
 case 'e':
   verify_rtx_sharing ((((x)->u.fld[i]).rtx1), insn);
   break;
 case 'E':
   if ((((x)->u.fld[i]).rtvec1) != ((void *)0))
     {
       int j;
       int len = (((((x)->u.fld[i]).rtvec1))->num_elem);
       for (j = 0; j < len; j++)
  {
    if (j && ((enum rtx_code) ((((((x)->u.fld[i]).rtvec1))->elem[j]))->code) == SET
        && ((enum rtx_code) (((((((((x)->u.fld[i]).rtvec1))->elem[j]))->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
      verify_rtx_sharing (((((((((x)->u.fld[i]).rtvec1))->elem[j]))->u.fld[0]).rtx1), insn);
    else
      verify_rtx_sharing ((((((x)->u.fld[i]).rtvec1))->elem[j]), insn);
  }
     }
   break;
 }
    }
  return;
}
void
verify_rtl_sharing (void)
{
  rtx p;
  for (p = get_insns (); p; p = (((p)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
      {
 reset_used_flags ((((p)->u.fld[5]).rtx1));
 reset_used_flags ((((p)->u.fld[8]).rtx1));
 reset_used_flags ((((p)->u.fld[7]).rtx1));
      }
  for (p = get_insns (); p; p = (((p)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
      {
 verify_rtx_sharing ((((p)->u.fld[5]).rtx1), p);
 verify_rtx_sharing ((((p)->u.fld[8]).rtx1), p);
 verify_rtx_sharing ((((p)->u.fld[7]).rtx1), p);
      }
}
void
unshare_all_rtl_in_chain (rtx insn)
{
  for (; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      {
 (((insn)->u.fld[5]).rtx1) = copy_rtx_if_shared ((((insn)->u.fld[5]).rtx1));
 (((insn)->u.fld[8]).rtx1) = copy_rtx_if_shared ((((insn)->u.fld[8]).rtx1));
 (((insn)->u.fld[7]).rtx1) = copy_rtx_if_shared ((((insn)->u.fld[7]).rtx1));
      }
}
static void
unshare_all_decls (tree blk)
{
  tree t;
  for (t = ((blk)->block.vars); t; t = ((t)->common.chain))
    if (((t)->decl.rtl != ((void *)0)))
      set_decl_rtl (t, copy_rtx_if_shared (((t)->decl.rtl ? (t)->decl.rtl : (make_decl_rtl (t, ((void *)0)), (t)->decl.rtl))));
  for (t = ((blk)->block.subblocks); t; t = ((t)->common.chain))
    unshare_all_decls (t);
}
static void
reset_used_decls (tree blk)
{
  tree t;
  for (t = ((blk)->block.vars); t; t = ((t)->common.chain))
    if (((t)->decl.rtl != ((void *)0)))
      reset_used_flags (((t)->decl.rtl ? (t)->decl.rtl : (make_decl_rtl (t, ((void *)0)), (t)->decl.rtl)));
  for (t = ((blk)->block.subblocks); t; t = ((t)->common.chain))
    reset_used_decls (t);
}
rtx
copy_most_rtx (rtx orig, rtx may_share)
{
  rtx copy;
  int i, j;
  enum rtx_code code;
  const char *format_ptr;
  if (orig == may_share
      || (((enum rtx_code) (may_share)->code) == EXPR_LIST
   && in_expr_list_p (may_share, orig)))
    return orig;
  code = ((enum rtx_code) (orig)->code);
  switch (code)
    {
    case REG:
    case QUEUED:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case CODE_LABEL:
    case PC:
    case CC0:
      return orig;
    default:
      break;
    }
  copy = rtx_alloc_stat (code );
  ((copy)->mode = (((enum machine_mode) (orig)->mode)));
  ((copy)->in_struct) = ((orig)->in_struct);
  ((copy)->volatil) = ((orig)->volatil);
  ((copy)->unchanging) = ((orig)->unchanging);
  ((copy)->frame_related) = ((orig)->frame_related);
  ((copy)->return_val) = ((orig)->return_val);
  format_ptr = (rtx_format[(int) (((enum rtx_code) (copy)->code))]);
  for (i = 0; i < (rtx_length[(int) (((enum rtx_code) (copy)->code))]); i++)
    {
      switch (*format_ptr++)
 {
 case 'e':
   (((copy)->u.fld[i]).rtx1) = (((orig)->u.fld[i]).rtx1);
   if ((((orig)->u.fld[i]).rtx1) != ((void *)0) && (((orig)->u.fld[i]).rtx1) != may_share)
     (((copy)->u.fld[i]).rtx1) = copy_most_rtx ((((orig)->u.fld[i]).rtx1), may_share);
   break;
 case 'u':
   (((copy)->u.fld[i]).rtx1) = (((orig)->u.fld[i]).rtx1);
   break;
 case 'E':
 case 'V':
   (((copy)->u.fld[i]).rtvec1) = (((orig)->u.fld[i]).rtvec1);
   if ((((orig)->u.fld[i]).rtvec1) != ((void *)0))
     {
       (((copy)->u.fld[i]).rtvec1) = rtvec_alloc ((((((orig)->u.fld[i]).rtvec1))->num_elem));
       for (j = 0; j < (((((copy)->u.fld[i]).rtvec1))->num_elem); j++)
  (((((copy)->u.fld[i]).rtvec1))->elem[j])
    = copy_most_rtx ((((((orig)->u.fld[i]).rtvec1))->elem[j]), may_share);
     }
   break;
 case 'w':
   ((copy)->u.hwint[i]) = ((orig)->u.hwint[i]);
   break;
 case 'n':
 case 'i':
   (((copy)->u.fld[i]).rtint) = (((orig)->u.fld[i]).rtint);
   break;
 case 't':
   (((copy)->u.fld[i]).rttree) = (((orig)->u.fld[i]).rttree);
   break;
 case 's':
 case 'S':
   (((copy)->u.fld[i]).rtstr) = (((orig)->u.fld[i]).rtstr);
   break;
 case '0':
   ((copy)->u.fld[i]) = ((orig)->u.fld[i]);
   break;
 default:
   abort ();
 }
    }
  return copy;
}
rtx
copy_rtx_if_shared (rtx orig)
{
  copy_rtx_if_shared_1 (&orig);
  return orig;
}
static void
copy_rtx_if_shared_1 (rtx *orig1)
{
  rtx x;
  int i;
  enum rtx_code code;
  rtx *last_ptr;
  const char *format_ptr;
  int copied = 0;
  int length;
repeat:
  x = *orig1;
  if (x == 0)
    return;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
    case QUEUED:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
    case CODE_LABEL:
    case PC:
    case CC0:
    case SCRATCH:
      return;
    case CLOBBER:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG) && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
 return;
      break;
    case CONST:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SYMBOL_REF
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
 return;
      break;
    case INSN:
    case JUMP_INSN:
    case CALL_INSN:
    case NOTE:
    case BARRIER:
      return;
    default:
      break;
    }
  if (((x)->used))
    {
      rtx copy;
      copy = rtx_alloc_stat (code );
      memcpy (copy, x, rtx_size[code]);
      x = copy;
      copied = 1;
    }
  ((x)->used) = 1;
  format_ptr = (rtx_format[(int) (code)]);
  length = (rtx_length[(int) (code)]);
  last_ptr = ((void *)0);
  for (i = 0; i < length; i++)
    {
      switch (*format_ptr++)
 {
 case 'e':
          if (last_ptr)
            copy_rtx_if_shared_1 (last_ptr);
   last_ptr = &(((x)->u.fld[i]).rtx1);
   break;
 case 'E':
   if ((((x)->u.fld[i]).rtvec1) != ((void *)0))
     {
       int j;
       int len = (((((x)->u.fld[i]).rtvec1))->num_elem);
       if (copied && len > 0)
  (((x)->u.fld[i]).rtvec1) = gen_rtvec_v (len, (((x)->u.fld[i]).rtvec1)->elem);
       for (j = 0; j < len; j++)
                {
    if (last_ptr)
      copy_rtx_if_shared_1 (last_ptr);
                  last_ptr = &(((((x)->u.fld[i]).rtvec1))->elem[j]);
                }
     }
   break;
 }
    }
  *orig1 = x;
  if (last_ptr)
    {
      orig1 = last_ptr;
      goto repeat;
    }
  return;
}
void
reset_used_flags (rtx x)
{
  int i, j;
  enum rtx_code code;
  const char *format_ptr;
  int length;
repeat:
  if (x == 0)
    return;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
    case QUEUED:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case CODE_LABEL:
    case PC:
    case CC0:
      return;
    case INSN:
    case JUMP_INSN:
    case CALL_INSN:
    case NOTE:
    case LABEL_REF:
    case BARRIER:
      return;
    default:
      break;
    }
  ((x)->used) = 0;
  format_ptr = (rtx_format[(int) (code)]);
  length = (rtx_length[(int) (code)]);
  for (i = 0; i < length; i++)
    {
      switch (*format_ptr++)
 {
 case 'e':
          if (i == length-1)
            {
              x = (((x)->u.fld[i]).rtx1);
       goto repeat;
            }
   reset_used_flags ((((x)->u.fld[i]).rtx1));
   break;
 case 'E':
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     reset_used_flags ((((((x)->u.fld[i]).rtvec1))->elem[j]));
   break;
 }
    }
}
void
set_used_flags (rtx x)
{
  int i, j;
  enum rtx_code code;
  const char *format_ptr;
  if (x == 0)
    return;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
    case QUEUED:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case CODE_LABEL:
    case PC:
    case CC0:
      return;
    case INSN:
    case JUMP_INSN:
    case CALL_INSN:
    case NOTE:
    case LABEL_REF:
    case BARRIER:
      return;
    default:
      break;
    }
  ((x)->used) = 1;
  format_ptr = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++)
    {
      switch (*format_ptr++)
 {
 case 'e':
   set_used_flags ((((x)->u.fld[i]).rtx1));
   break;
 case 'E':
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     set_used_flags ((((((x)->u.fld[i]).rtvec1))->elem[j]));
   break;
 }
    }
}
rtx
make_safe_from (rtx x, rtx other)
{
  while (1)
    switch (((enum rtx_code) (other)->code))
      {
      case SUBREG:
 other = (((other)->u.fld[0]).rtx1);
 break;
      case STRICT_LOW_PART:
      case SIGN_EXTEND:
      case ZERO_EXTEND:
 other = (((other)->u.fld[0]).rtx1);
 break;
      default:
 goto done;
      }
 done:
  if (((((enum rtx_code) (other)->code) == MEM)
       && ! ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR)
       && !(((enum rtx_code) (x)->code) == REG)
       && ((enum rtx_code) (x)->code) != SUBREG)
      || ((((enum rtx_code) (other)->code) == REG)
   && ((((other)->u.fld[0]).rtuint) < 53
       || reg_mentioned_p (other, x))))
    {
      rtx temp = gen_reg_rtx (((enum machine_mode) (x)->mode));
      emit_move_insn (temp, x);
      return temp;
    }
  return x;
}
rtx
get_insns (void)
{
  return (cfun->emit->x_first_insn);
}
void
set_first_insn (rtx insn)
{
  if ((((insn)->u.fld[1]).rtx1) != 0)
    abort ();
  (cfun->emit->x_first_insn) = insn;
}
rtx
get_last_insn (void)
{
  return (cfun->emit->x_last_insn);
}
void
set_last_insn (rtx insn)
{
  if ((((insn)->u.fld[2]).rtx1) != 0)
    abort ();
  (cfun->emit->x_last_insn) = insn;
}
rtx
get_last_insn_anywhere (void)
{
  struct sequence_stack *stack;
  if ((cfun->emit->x_last_insn))
    return (cfun->emit->x_last_insn);
  for (stack = (cfun->emit->sequence_stack); stack; stack = stack->next)
    if (stack->last != 0)
      return stack->last;
  return 0;
}
rtx
get_first_nonnote_insn (void)
{
  rtx insn = (cfun->emit->x_first_insn);
  while (insn)
    {
      insn = next_insn (insn);
      if (insn == 0 || ((enum rtx_code) (insn)->code) != NOTE)
 break;
    }
  return insn;
}
rtx
get_last_nonnote_insn (void)
{
  rtx insn = (cfun->emit->x_last_insn);
  while (insn)
    {
      insn = previous_insn (insn);
      if (insn == 0 || ((enum rtx_code) (insn)->code) != NOTE)
 break;
    }
  return insn;
}
int
get_max_uid (void)
{
  return (cfun->emit->x_cur_insn_uid);
}
void
renumber_insns (FILE *stream)
{
  rtx insn;
  if (!flag_renumber_insns)
    return;
  if (flag_renumber_insns == 1 && get_max_uid () < 25000)
    return;
  (cfun->emit->x_cur_insn_uid) = 1;
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (stream)
 fprintf (stream, "Renumbering insn %d to %d\n",
   (((insn)->u.fld[0]).rtint), (cfun->emit->x_cur_insn_uid));
      (((insn)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
    }
}
rtx
next_insn (rtx insn)
{
  if (insn)
    {
      insn = (((insn)->u.fld[2]).rtx1);
      if (insn && ((enum rtx_code) (insn)->code) == INSN
   && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
 insn = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
    }
  return insn;
}
rtx
previous_insn (rtx insn)
{
  if (insn)
    {
      insn = (((insn)->u.fld[1]).rtx1);
      if (insn && ((enum rtx_code) (insn)->code) == INSN
   && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
 insn = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1]);
    }
  return insn;
}
rtx
next_nonnote_insn (rtx insn)
{
  while (insn)
    {
      insn = (((insn)->u.fld[2]).rtx1);
      if (insn == 0 || ((enum rtx_code) (insn)->code) != NOTE)
 break;
    }
  return insn;
}
rtx
prev_nonnote_insn (rtx insn)
{
  while (insn)
    {
      insn = (((insn)->u.fld[1]).rtx1);
      if (insn == 0 || ((enum rtx_code) (insn)->code) != NOTE)
 break;
    }
  return insn;
}
rtx
next_real_insn (rtx insn)
{
  while (insn)
    {
      insn = (((insn)->u.fld[2]).rtx1);
      if (insn == 0 || ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 break;
    }
  return insn;
}
rtx
prev_real_insn (rtx insn)
{
  while (insn)
    {
      insn = (((insn)->u.fld[1]).rtx1);
      if (insn == 0 || ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 break;
    }
  return insn;
}
rtx
last_call_insn (void)
{
  rtx insn;
  for (insn = get_last_insn ();
       insn && ((enum rtx_code) (insn)->code) != CALL_INSN;
       insn = (((insn)->u.fld[1]).rtx1))
    ;
  return insn;
}
int
active_insn_p (rtx insn)
{
  return (((enum rtx_code) (insn)->code) == CALL_INSN || ((enum rtx_code) (insn)->code) == JUMP_INSN
   || (((enum rtx_code) (insn)->code) == INSN
       && (! reload_completed
    || (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE
        && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != CLOBBER))));
}
rtx
next_active_insn (rtx insn)
{
  while (insn)
    {
      insn = (((insn)->u.fld[2]).rtx1);
      if (insn == 0 || active_insn_p (insn))
 break;
    }
  return insn;
}
rtx
prev_active_insn (rtx insn)
{
  while (insn)
    {
      insn = (((insn)->u.fld[1]).rtx1);
      if (insn == 0 || active_insn_p (insn))
 break;
    }
  return insn;
}
rtx
next_label (rtx insn)
{
  while (insn)
    {
      insn = (((insn)->u.fld[2]).rtx1);
      if (insn == 0 || ((enum rtx_code) (insn)->code) == CODE_LABEL)
 break;
    }
  return insn;
}
rtx
prev_label (rtx insn)
{
  while (insn)
    {
      insn = (((insn)->u.fld[1]).rtx1);
      if (insn == 0 || ((enum rtx_code) (insn)->code) == CODE_LABEL)
 break;
    }
  return insn;
}
rtx
skip_consecutive_labels (rtx label)
{
  rtx insn;
  for (insn = label; insn != 0 && !((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)); insn = (((insn)->u.fld[2]).rtx1))
    if ((((enum rtx_code) (insn)->code) == CODE_LABEL))
      label = insn;
  return label;
}
static void
mark_label_nuses (rtx x)
{
  enum rtx_code code;
  int i, j;
  const char *fmt;
  code = ((enum rtx_code) (x)->code);
  if (code == LABEL_REF && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CODE_LABEL))
    ((((((x)->u.fld[0]).rtx1))->u.fld[4]).rtint)++;
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 mark_label_nuses ((((x)->u.fld[i]).rtx1));
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   mark_label_nuses ((((((x)->u.fld[i]).rtvec1))->elem[j]));
    }
}
rtx
try_split (rtx pat, rtx trial, int last)
{
  rtx before = (((trial)->u.fld[1]).rtx1);
  rtx after = (((trial)->u.fld[2]).rtx1);
  int has_barrier = 0;
  rtx tem;
  rtx note, seq;
  int probability;
  rtx insn_last, insn;
  int njumps = 0;
  if (any_condjump_p (trial)
      && (note = find_reg_note (trial, REG_BR_PROB, 0)))
    split_branch_probability = (((((note)->u.fld[0]).rtx1))->u.hwint[0]);
  probability = split_branch_probability;
  seq = split_insns (pat, trial);
  split_branch_probability = -1;
  if (after && ((enum rtx_code) (after)->code) == BARRIER)
    {
      has_barrier = 1;
      after = (((after)->u.fld[2]).rtx1);
    }
  if (!seq)
    return trial;
  insn_last = seq;
  while (1)
    {
      if (((((enum rtx_code) (insn_last)->code) == INSN) || (((enum rtx_code) (insn_last)->code) == JUMP_INSN) || (((enum rtx_code) (insn_last)->code) == CALL_INSN))
   && rtx_equal_p ((((insn_last)->u.fld[5]).rtx1), pat))
 return trial;
      if (!(((insn_last)->u.fld[2]).rtx1))
 break;
      insn_last = (((insn_last)->u.fld[2]).rtx1);
    }
  for (insn = insn_last; insn ; insn = (((insn)->u.fld[1]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == JUMP_INSN)
 {
   mark_jump_label ((((insn)->u.fld[5]).rtx1), insn, 0);
   njumps++;
   if (probability != -1
       && any_condjump_p (insn)
       && !find_reg_note (insn, REG_BR_PROB, 0))
     {
       if (njumps != 1)
  abort ();
       (((insn)->u.fld[8]).rtx1)
  = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PROB), (gen_rtx_CONST_INT (VOIDmode, (long) (probability))), ((((insn)->u.fld[8]).rtx1)))
                          ;
     }
 }
    }
  if (((enum rtx_code) (trial)->code) == CALL_INSN)
    {
      for (insn = insn_last; insn ; insn = (((insn)->u.fld[1]).rtx1))
 if (((enum rtx_code) (insn)->code) == CALL_INSN)
   {
     rtx *p = &(((insn)->u.fld[9]).rtx1);
     while (*p)
       p = &(((*p)->u.fld[1]).rtx1);
     *p = (((trial)->u.fld[9]).rtx1);
     (((insn))->jump) = (((trial))->jump);
   }
    }
  for (note = (((trial)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
    {
      switch (((enum reg_note) ((enum machine_mode) (note)->mode)))
 {
 case REG_EH_REGION:
   insn = insn_last;
   while (insn != (rtx) 0)
     {
       if (((enum rtx_code) (insn)->code) == CALL_INSN
    || (flag_non_call_exceptions
        && may_trap_p ((((insn)->u.fld[5]).rtx1))))
  (((insn)->u.fld[8]).rtx1)
    = gen_rtx_fmt_ee (EXPR_LIST, (REG_EH_REGION), ((((note)->u.fld[0]).rtx1)), ((((insn)->u.fld[8]).rtx1)))
                            ;
       insn = (((insn)->u.fld[1]).rtx1);
     }
   break;
 case REG_NORETURN:
 case REG_SETJMP:
 case REG_ALWAYS_RETURN:
   insn = insn_last;
   while (insn != (rtx) 0)
     {
       if (((enum rtx_code) (insn)->code) == CALL_INSN)
  (((insn)->u.fld[8]).rtx1)
    = gen_rtx_fmt_ee (EXPR_LIST, (((enum reg_note) ((enum machine_mode) (note)->mode))), ((((note)->u.fld[0]).rtx1)), ((((insn)->u.fld[8]).rtx1)))
                            ;
       insn = (((insn)->u.fld[1]).rtx1);
     }
   break;
 case REG_NON_LOCAL_GOTO:
   insn = insn_last;
   while (insn != (rtx) 0)
     {
       if (((enum rtx_code) (insn)->code) == JUMP_INSN)
  (((insn)->u.fld[8]).rtx1)
    = gen_rtx_fmt_ee (EXPR_LIST, (((enum reg_note) ((enum machine_mode) (note)->mode))), ((((note)->u.fld[0]).rtx1)), ((((insn)->u.fld[8]).rtx1)))
                            ;
       insn = (((insn)->u.fld[1]).rtx1);
     }
   break;
 default:
   break;
 }
    }
  if (((enum rtx_code) (trial)->code) == INSN)
    {
      insn = insn_last;
      while (insn != (rtx) 0)
 {
   if (((enum rtx_code) (insn)->code) == INSN)
     mark_label_nuses ((((insn)->u.fld[5]).rtx1));
   insn = (((insn)->u.fld[1]).rtx1);
 }
    }
  tem = emit_insn_after_setloc (seq, trial, (((trial)->u.fld[4]).rtint));
  delete_insn (trial);
  if (has_barrier)
    emit_barrier_after (tem);
  for (tem = (((before)->u.fld[2]).rtx1); tem != after; tem = (((tem)->u.fld[2]).rtx1))
    if (! (((tem))->volatil) && ((((enum rtx_code) (tem)->code) == INSN) || (((enum rtx_code) (tem)->code) == JUMP_INSN) || (((enum rtx_code) (tem)->code) == CALL_INSN)))
      tem = try_split ((((tem)->u.fld[5]).rtx1), tem, 1);
  return last
    ? (after ? (((after)->u.fld[1]).rtx1) : (cfun->emit->x_last_insn))
    : (((before)->u.fld[2]).rtx1);
}
rtx
make_insn_raw (rtx pattern)
{
  rtx insn;
  insn = rtx_alloc_stat (INSN );
  (((insn)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
  (((insn)->u.fld[5]).rtx1) = pattern;
  (((insn)->u.fld[6]).rtint) = -1;
  (((insn)->u.fld[7]).rtx1) = ((void *)0);
  (((insn)->u.fld[8]).rtx1) = ((void *)0);
  (((insn)->u.fld[4]).rtint) = 0;
  (((insn)->u.fld[3]).bb) = ((void *)0);
  return insn;
}
static rtx
make_jump_insn_raw (rtx pattern)
{
  rtx insn;
  insn = rtx_alloc_stat (JUMP_INSN );
  (((insn)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
  (((insn)->u.fld[5]).rtx1) = pattern;
  (((insn)->u.fld[6]).rtint) = -1;
  (((insn)->u.fld[7]).rtx1) = ((void *)0);
  (((insn)->u.fld[8]).rtx1) = ((void *)0);
  (((insn)->u.fld[9]).rtx1) = ((void *)0);
  (((insn)->u.fld[4]).rtint) = 0;
  (((insn)->u.fld[3]).bb) = ((void *)0);
  return insn;
}
static rtx
make_call_insn_raw (rtx pattern)
{
  rtx insn;
  insn = rtx_alloc_stat (CALL_INSN );
  (((insn)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
  (((insn)->u.fld[5]).rtx1) = pattern;
  (((insn)->u.fld[6]).rtint) = -1;
  (((insn)->u.fld[7]).rtx1) = ((void *)0);
  (((insn)->u.fld[8]).rtx1) = ((void *)0);
  (((insn)->u.fld[9]).rtx1) = ((void *)0);
  (((insn)->u.fld[4]).rtint) = 0;
  (((insn)->u.fld[3]).bb) = ((void *)0);
  return insn;
}
void
add_insn (rtx insn)
{
  (((insn)->u.fld[1]).rtx1) = (cfun->emit->x_last_insn);
  (((insn)->u.fld[2]).rtx1) = 0;
  if (((void *)0) != (cfun->emit->x_last_insn))
    ((((cfun->emit->x_last_insn))->u.fld[2]).rtx1) = insn;
  if (((void *)0) == (cfun->emit->x_first_insn))
    (cfun->emit->x_first_insn) = insn;
  (cfun->emit->x_last_insn) = insn;
}
void
add_insn_after (rtx insn, rtx after)
{
  rtx next = (((after)->u.fld[2]).rtx1);
  basic_block bb;
  if (optimize && (((after))->volatil))
    abort ();
  (((insn)->u.fld[2]).rtx1) = next;
  (((insn)->u.fld[1]).rtx1) = after;
  if (next)
    {
      (((next)->u.fld[1]).rtx1) = insn;
      if (((enum rtx_code) (next)->code) == INSN && ((enum rtx_code) ((((next)->u.fld[5]).rtx1))->code) == SEQUENCE)
 (((((((((((next)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1) = insn;
    }
  else if ((cfun->emit->x_last_insn) == after)
    (cfun->emit->x_last_insn) = insn;
  else
    {
      struct sequence_stack *stack = (cfun->emit->sequence_stack);
      for (; stack; stack = stack->next)
 if (after == stack->last)
   {
     stack->last = insn;
     break;
   }
      if (stack == 0)
 abort ();
    }
  if (((enum rtx_code) (after)->code) != BARRIER
      && ((enum rtx_code) (insn)->code) != BARRIER
      && (bb = (((after)->u.fld[3]).bb)))
    {
      ((((insn)->u.fld[3]).bb) = bb);
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 bb->flags |= 1;
      if ((bb)->end_ == after
   && ((enum rtx_code) (insn)->code) != BARRIER
   && (((enum rtx_code) (insn)->code) != NOTE
       || (((insn)->u.fld[5]).rtint) != NOTE_INSN_BASIC_BLOCK))
 (bb)->end_ = insn;
    }
  (((after)->u.fld[2]).rtx1) = insn;
  if (((enum rtx_code) (after)->code) == INSN && ((enum rtx_code) ((((after)->u.fld[5]).rtx1))->code) == SEQUENCE)
    {
      rtx sequence = (((after)->u.fld[5]).rtx1);
      ((((((((sequence)->u.fld[0]).rtvec1))->elem[(((((sequence)->u.fld[0]).rtvec1))->num_elem) - 1]))->u.fld[2]).rtx1) = insn;
    }
}
void
add_insn_before (rtx insn, rtx before)
{
  rtx prev = (((before)->u.fld[1]).rtx1);
  basic_block bb;
  if (optimize && (((before))->volatil))
    abort ();
  (((insn)->u.fld[1]).rtx1) = prev;
  (((insn)->u.fld[2]).rtx1) = before;
  if (prev)
    {
      (((prev)->u.fld[2]).rtx1) = insn;
      if (((enum rtx_code) (prev)->code) == INSN && ((enum rtx_code) ((((prev)->u.fld[5]).rtx1))->code) == SEQUENCE)
 {
   rtx sequence = (((prev)->u.fld[5]).rtx1);
   ((((((((sequence)->u.fld[0]).rtvec1))->elem[(((((sequence)->u.fld[0]).rtvec1))->num_elem) - 1]))->u.fld[2]).rtx1) = insn;
 }
    }
  else if ((cfun->emit->x_first_insn) == before)
    (cfun->emit->x_first_insn) = insn;
  else
    {
      struct sequence_stack *stack = (cfun->emit->sequence_stack);
      for (; stack; stack = stack->next)
 if (before == stack->first)
   {
     stack->first = insn;
     break;
   }
      if (stack == 0)
 abort ();
    }
  if (((enum rtx_code) (before)->code) != BARRIER
      && ((enum rtx_code) (insn)->code) != BARRIER
      && (bb = (((before)->u.fld[3]).bb)))
    {
      ((((insn)->u.fld[3]).bb) = bb);
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 bb->flags |= 1;
      if ((bb)->head_ == insn
   && ((enum rtx_code) (insn)->code) != BARRIER
   && (((enum rtx_code) (insn)->code) != NOTE
       || (((insn)->u.fld[5]).rtint) != NOTE_INSN_BASIC_BLOCK))
 abort ();
    }
  (((before)->u.fld[1]).rtx1) = insn;
  if (((enum rtx_code) (before)->code) == INSN && ((enum rtx_code) ((((before)->u.fld[5]).rtx1))->code) == SEQUENCE)
    (((((((((((before)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1) = insn;
}
void
remove_insn (rtx insn)
{
  rtx next = (((insn)->u.fld[2]).rtx1);
  rtx prev = (((insn)->u.fld[1]).rtx1);
  basic_block bb;
  if (prev)
    {
      (((prev)->u.fld[2]).rtx1) = next;
      if (((enum rtx_code) (prev)->code) == INSN && ((enum rtx_code) ((((prev)->u.fld[5]).rtx1))->code) == SEQUENCE)
 {
   rtx sequence = (((prev)->u.fld[5]).rtx1);
   ((((((((sequence)->u.fld[0]).rtvec1))->elem[(((((sequence)->u.fld[0]).rtvec1))->num_elem) - 1]))->u.fld[2]).rtx1) = next;
 }
    }
  else if ((cfun->emit->x_first_insn) == insn)
    (cfun->emit->x_first_insn) = next;
  else
    {
      struct sequence_stack *stack = (cfun->emit->sequence_stack);
      for (; stack; stack = stack->next)
 if (insn == stack->first)
   {
     stack->first = next;
     break;
   }
      if (stack == 0)
 abort ();
    }
  if (next)
    {
      (((next)->u.fld[1]).rtx1) = prev;
      if (((enum rtx_code) (next)->code) == INSN && ((enum rtx_code) ((((next)->u.fld[5]).rtx1))->code) == SEQUENCE)
 (((((((((((next)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1) = prev;
    }
  else if ((cfun->emit->x_last_insn) == insn)
    (cfun->emit->x_last_insn) = prev;
  else
    {
      struct sequence_stack *stack = (cfun->emit->sequence_stack);
      for (; stack; stack = stack->next)
 if (insn == stack->last)
   {
     stack->last = prev;
     break;
   }
      if (stack == 0)
 abort ();
    }
  if (((enum rtx_code) (insn)->code) != BARRIER
      && (bb = (((insn)->u.fld[3]).bb)))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 bb->flags |= 1;
      if ((bb)->head_ == insn)
 {
   if (((enum rtx_code) (insn)->code) == NOTE)
     abort ();
   (bb)->head_ = next;
 }
      if ((bb)->end_ == insn)
 (bb)->end_ = prev;
    }
}
void
add_function_usage_to (rtx call_insn, rtx call_fusage)
{
  if (! call_insn || ((enum rtx_code) (call_insn)->code) != CALL_INSN)
    abort ();
  if ((((call_insn)->u.fld[9]).rtx1))
    {
      rtx link;
      for (link = (((call_insn)->u.fld[9]).rtx1); (((link)->u.fld[1]).rtx1) != 0;
    link = (((link)->u.fld[1]).rtx1))
 ;
      (((link)->u.fld[1]).rtx1) = call_fusage;
    }
  else
    (((call_insn)->u.fld[9]).rtx1) = call_fusage;
}
void
delete_insns_since (rtx from)
{
  if (from == 0)
    (cfun->emit->x_first_insn) = 0;
  else
    (((from)->u.fld[2]).rtx1) = 0;
  (cfun->emit->x_last_insn) = from;
}
void
reorder_insns_nobb (rtx from, rtx to, rtx after)
{
  if ((((from)->u.fld[1]).rtx1))
    ((((((from)->u.fld[1]).rtx1))->u.fld[2]).rtx1) = (((to)->u.fld[2]).rtx1);
  if ((((to)->u.fld[2]).rtx1))
    ((((((to)->u.fld[2]).rtx1))->u.fld[1]).rtx1) = (((from)->u.fld[1]).rtx1);
  if ((cfun->emit->x_last_insn) == to)
    (cfun->emit->x_last_insn) = (((from)->u.fld[1]).rtx1);
  if ((cfun->emit->x_first_insn) == from)
    (cfun->emit->x_first_insn) = (((to)->u.fld[2]).rtx1);
  if ((((after)->u.fld[2]).rtx1))
    ((((((after)->u.fld[2]).rtx1))->u.fld[1]).rtx1) = to;
  (((to)->u.fld[2]).rtx1) = (((after)->u.fld[2]).rtx1);
  (((from)->u.fld[1]).rtx1) = after;
  (((after)->u.fld[2]).rtx1) = from;
  if (after == (cfun->emit->x_last_insn))
    (cfun->emit->x_last_insn) = to;
}
void
reorder_insns (rtx from, rtx to, rtx after)
{
  rtx prev = (((from)->u.fld[1]).rtx1);
  basic_block bb, bb2;
  reorder_insns_nobb (from, to, after);
  if (((enum rtx_code) (after)->code) != BARRIER
      && (bb = (((after)->u.fld[3]).bb)))
    {
      rtx x;
      bb->flags |= 1;
      if (((enum rtx_code) (from)->code) != BARRIER
   && (bb2 = (((from)->u.fld[3]).bb)))
 {
   if ((bb2)->end_ == to)
     (bb2)->end_ = prev;
   bb2->flags |= 1;
 }
      if ((bb)->end_ == after)
 (bb)->end_ = to;
      for (x = from; x != (((to)->u.fld[2]).rtx1); x = (((x)->u.fld[2]).rtx1))
 ((((x)->u.fld[3]).bb) = bb);
    }
}
static rtx
find_line_note_emit (rtx insn)
{
  if (no_line_numbers)
    return 0;
  for (; insn; insn = (((insn)->u.fld[1]).rtx1))
    if (((enum rtx_code) (insn)->code) == NOTE
 && (((insn)->u.fld[5]).rtint) >= 0)
      break;
  return insn;
}
void
remove_unnecessary_notes (void)
{
  rtx block_stack = (rtx) 0;
  rtx eh_stack = (rtx) 0;
  rtx insn;
  rtx next;
  rtx tmp;
  for (insn = (((get_insns ())->u.fld[2]).rtx1); insn; insn = next)
    {
      next = (((insn)->u.fld[2]).rtx1);
      if (((enum rtx_code) (insn)->code) != NOTE)
 continue;
      switch ((((insn)->u.fld[5]).rtint))
 {
 case NOTE_INSN_DELETED:
 case NOTE_INSN_LOOP_END_TOP_COND:
   remove_insn (insn);
   break;
 case NOTE_INSN_EH_REGION_BEG:
   eh_stack = alloc_INSN_LIST (insn, eh_stack);
   break;
 case NOTE_INSN_EH_REGION_END:
   if (eh_stack == (rtx) 0)
     abort ();
   if (((((((eh_stack)->u.fld[0]).rtx1))->u.fld[4]).rtint) != (((insn)->u.fld[4]).rtint))
     abort ();
   tmp = eh_stack;
   eh_stack = (((eh_stack)->u.fld[1]).rtx1);
   free_INSN_LIST_node (tmp);
   break;
 case NOTE_INSN_BLOCK_BEG:
   if ((((insn)->u.fld[4]).rttree) == (tree) ((void *)0))
     abort ();
   block_stack = alloc_INSN_LIST (insn, block_stack);
   break;
 case NOTE_INSN_BLOCK_END:
   if (block_stack == (rtx) 0)
     abort ();
   if (((((((block_stack)->u.fld[0]).rtx1))->u.fld[4]).rttree) != (((insn)->u.fld[4]).rttree))
     abort ();
   tmp = block_stack;
   block_stack = (((block_stack)->u.fld[1]).rtx1);
   free_INSN_LIST_node (tmp);
   for (tmp = (((insn)->u.fld[1]).rtx1); tmp; tmp = (((tmp)->u.fld[1]).rtx1))
     {
       if (((((enum rtx_code) (tmp)->code) == INSN) || (((enum rtx_code) (tmp)->code) == JUMP_INSN) || (((enum rtx_code) (tmp)->code) == CALL_INSN)))
  break;
       if (((enum rtx_code) (tmp)->code) != NOTE)
  continue;
       if ((((tmp)->u.fld[5]).rtint) == NOTE_INSN_BLOCK_BEG)
  {
    if (! is_body_block ((((insn)->u.fld[4]).rttree))
        && (*debug_hooks->ignore_block) ((((insn)->u.fld[4]).rttree)))
      {
        remove_insn (tmp);
        remove_insn (insn);
      }
    break;
  }
       else if ((((tmp)->u.fld[5]).rtint) == NOTE_INSN_BLOCK_END)
  break;
     }
 }
    }
  if (block_stack || eh_stack)
    abort ();
}
rtx
emit_insn_before (rtx x, rtx before)
{
  rtx last = before;
  rtx insn;
  if (x == (rtx) 0)
    return last;
  switch (((enum rtx_code) (x)->code))
    {
    case INSN:
    case JUMP_INSN:
    case CALL_INSN:
    case CODE_LABEL:
    case BARRIER:
    case NOTE:
      insn = x;
      while (insn)
 {
   rtx next = (((insn)->u.fld[2]).rtx1);
   add_insn_before (insn, before);
   last = insn;
   insn = next;
 }
      break;
    default:
      last = make_insn_raw (x);
      add_insn_before (last, before);
      break;
    }
  return last;
}
rtx
emit_jump_insn_before (rtx x, rtx before)
{
  rtx insn, last = (rtx) 0;
  switch (((enum rtx_code) (x)->code))
    {
    case INSN:
    case JUMP_INSN:
    case CALL_INSN:
    case CODE_LABEL:
    case BARRIER:
    case NOTE:
      insn = x;
      while (insn)
 {
   rtx next = (((insn)->u.fld[2]).rtx1);
   add_insn_before (insn, before);
   last = insn;
   insn = next;
 }
      break;
    default:
      last = make_jump_insn_raw (x);
      add_insn_before (last, before);
      break;
    }
  return last;
}
rtx
emit_call_insn_before (rtx x, rtx before)
{
  rtx last = (rtx) 0, insn;
  switch (((enum rtx_code) (x)->code))
    {
    case INSN:
    case JUMP_INSN:
    case CALL_INSN:
    case CODE_LABEL:
    case BARRIER:
    case NOTE:
      insn = x;
      while (insn)
 {
   rtx next = (((insn)->u.fld[2]).rtx1);
   add_insn_before (insn, before);
   last = insn;
   insn = next;
 }
      break;
    default:
      last = make_call_insn_raw (x);
      add_insn_before (last, before);
      break;
    }
  return last;
}
rtx
emit_barrier_before (rtx before)
{
  rtx insn = rtx_alloc_stat (BARRIER );
  (((insn)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
  add_insn_before (insn, before);
  return insn;
}
rtx
emit_label_before (rtx label, rtx before)
{
  if ((((label)->u.fld[0]).rtint) == 0)
    {
      (((label)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
      add_insn_before (label, before);
    }
  return label;
}
rtx
emit_note_before (int subtype, rtx before)
{
  rtx note = rtx_alloc_stat (NOTE );
  (((note)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
  (((note)->u.fld[4]).rtstr) = 0;
  (((note)->u.fld[5]).rtint) = subtype;
  (((note)->u.fld[3]).bb) = ((void *)0);
  add_insn_before (note, before);
  return note;
}
static rtx emit_insn_after_1 (rtx, rtx);
static rtx
emit_insn_after_1 (rtx first, rtx after)
{
  rtx last;
  rtx after_after;
  basic_block bb;
  if (((enum rtx_code) (after)->code) != BARRIER
      && (bb = (((after)->u.fld[3]).bb)))
    {
      bb->flags |= 1;
      for (last = first; (((last)->u.fld[2]).rtx1); last = (((last)->u.fld[2]).rtx1))
 if (((enum rtx_code) (last)->code) != BARRIER)
   ((((last)->u.fld[3]).bb) = bb);
      if (((enum rtx_code) (last)->code) != BARRIER)
 ((((last)->u.fld[3]).bb) = bb);
      if ((bb)->end_ == after)
 (bb)->end_ = last;
    }
  else
    for (last = first; (((last)->u.fld[2]).rtx1); last = (((last)->u.fld[2]).rtx1))
      continue;
  after_after = (((after)->u.fld[2]).rtx1);
  (((after)->u.fld[2]).rtx1) = first;
  (((first)->u.fld[1]).rtx1) = after;
  (((last)->u.fld[2]).rtx1) = after_after;
  if (after_after)
    (((after_after)->u.fld[1]).rtx1) = last;
  if (after == (cfun->emit->x_last_insn))
    (cfun->emit->x_last_insn) = last;
  return last;
}
rtx
emit_insn_after (rtx x, rtx after)
{
  rtx last = after;
  if (x == (rtx) 0)
    return last;
  switch (((enum rtx_code) (x)->code))
    {
    case INSN:
    case JUMP_INSN:
    case CALL_INSN:
    case CODE_LABEL:
    case BARRIER:
    case NOTE:
      last = emit_insn_after_1 (x, after);
      break;
    default:
      last = make_insn_raw (x);
      add_insn_after (last, after);
      break;
    }
  return last;
}
void
emit_insn_after_with_line_notes (rtx x, rtx after, rtx from)
{
  rtx from_line = find_line_note_emit (from);
  rtx after_line = find_line_note_emit (after);
  rtx insn = emit_insn_after (x, after);
  if (from_line)
    emit_note_copy_after (from_line, after);
  if (after_line)
    emit_note_copy_after (after_line, insn);
}
rtx
emit_jump_insn_after (rtx x, rtx after)
{
  rtx last;
  switch (((enum rtx_code) (x)->code))
    {
    case INSN:
    case JUMP_INSN:
    case CALL_INSN:
    case CODE_LABEL:
    case BARRIER:
    case NOTE:
      last = emit_insn_after_1 (x, after);
      break;
    default:
      last = make_jump_insn_raw (x);
      add_insn_after (last, after);
      break;
    }
  return last;
}
rtx
emit_call_insn_after (rtx x, rtx after)
{
  rtx last;
  switch (((enum rtx_code) (x)->code))
    {
    case INSN:
    case JUMP_INSN:
    case CALL_INSN:
    case CODE_LABEL:
    case BARRIER:
    case NOTE:
      last = emit_insn_after_1 (x, after);
      break;
    default:
      last = make_call_insn_raw (x);
      add_insn_after (last, after);
      break;
    }
  return last;
}
rtx
emit_barrier_after (rtx after)
{
  rtx insn = rtx_alloc_stat (BARRIER );
  (((insn)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
  add_insn_after (insn, after);
  return insn;
}
rtx
emit_label_after (rtx label, rtx after)
{
  if ((((label)->u.fld[0]).rtint) == 0)
    {
      (((label)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
      add_insn_after (label, after);
    }
  return label;
}
rtx
emit_note_after (int subtype, rtx after)
{
  rtx note = rtx_alloc_stat (NOTE );
  (((note)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
  (((note)->u.fld[4]).rtstr) = 0;
  (((note)->u.fld[5]).rtint) = subtype;
  (((note)->u.fld[3]).bb) = ((void *)0);
  add_insn_after (note, after);
  return note;
}
rtx
emit_note_copy_after (rtx orig, rtx after)
{
  rtx note;
  if ((((orig)->u.fld[5]).rtint) >= 0 && no_line_numbers)
    {
      (cfun->emit->x_cur_insn_uid)++;
      return 0;
    }
  note = rtx_alloc_stat (NOTE );
  (((note)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
  (((note)->u.fld[5]).rtint) = (((orig)->u.fld[5]).rtint);
  ((note)->u.fld[4]) = ((orig)->u.fld[4]);
  (((note)->u.fld[3]).bb) = ((void *)0);
  add_insn_after (note, after);
  return note;
}
rtx
emit_insn_after_setloc (rtx pattern, rtx after, int loc)
{
  rtx last = emit_insn_after (pattern, after);
  if (pattern == (rtx) 0)
    return last;
  after = (((after)->u.fld[2]).rtx1);
  while (1)
    {
      if (active_insn_p (after))
 (((after)->u.fld[4]).rtint) = loc;
      if (after == last)
 break;
      after = (((after)->u.fld[2]).rtx1);
    }
  return last;
}
rtx
emit_jump_insn_after_setloc (rtx pattern, rtx after, int loc)
{
  rtx last = emit_jump_insn_after (pattern, after);
  if (pattern == (rtx) 0)
    return last;
  after = (((after)->u.fld[2]).rtx1);
  while (1)
    {
      if (active_insn_p (after))
 (((after)->u.fld[4]).rtint) = loc;
      if (after == last)
 break;
      after = (((after)->u.fld[2]).rtx1);
    }
  return last;
}
rtx
emit_call_insn_after_setloc (rtx pattern, rtx after, int loc)
{
  rtx last = emit_call_insn_after (pattern, after);
  if (pattern == (rtx) 0)
    return last;
  after = (((after)->u.fld[2]).rtx1);
  while (1)
    {
      if (active_insn_p (after))
 (((after)->u.fld[4]).rtint) = loc;
      if (after == last)
 break;
      after = (((after)->u.fld[2]).rtx1);
    }
  return last;
}
rtx
emit_insn_before_setloc (rtx pattern, rtx before, int loc)
{
  rtx first = (((before)->u.fld[1]).rtx1);
  rtx last = emit_insn_before (pattern, before);
  if (pattern == (rtx) 0)
    return last;
  first = (((first)->u.fld[2]).rtx1);
  while (1)
    {
      if (active_insn_p (first))
 (((first)->u.fld[4]).rtint) = loc;
      if (first == last)
 break;
      first = (((first)->u.fld[2]).rtx1);
    }
  return last;
}
rtx
emit_insn (rtx x)
{
  rtx last = (cfun->emit->x_last_insn);
  rtx insn;
  if (x == (rtx) 0)
    return last;
  switch (((enum rtx_code) (x)->code))
    {
    case INSN:
    case JUMP_INSN:
    case CALL_INSN:
    case CODE_LABEL:
    case BARRIER:
    case NOTE:
      insn = x;
      while (insn)
 {
   rtx next = (((insn)->u.fld[2]).rtx1);
   add_insn (insn);
   last = insn;
   insn = next;
 }
      break;
    default:
      last = make_insn_raw (x);
      add_insn (last);
      break;
    }
  return last;
}
rtx
emit_jump_insn (rtx x)
{
  rtx last = (rtx) 0, insn;
  switch (((enum rtx_code) (x)->code))
    {
    case INSN:
    case JUMP_INSN:
    case CALL_INSN:
    case CODE_LABEL:
    case BARRIER:
    case NOTE:
      insn = x;
      while (insn)
 {
   rtx next = (((insn)->u.fld[2]).rtx1);
   add_insn (insn);
   last = insn;
   insn = next;
 }
      break;
    default:
      last = make_jump_insn_raw (x);
      add_insn (last);
      break;
    }
  return last;
}
rtx
emit_call_insn (rtx x)
{
  rtx insn;
  switch (((enum rtx_code) (x)->code))
    {
    case INSN:
    case JUMP_INSN:
    case CALL_INSN:
    case CODE_LABEL:
    case BARRIER:
    case NOTE:
      insn = emit_insn (x);
      break;
    default:
      insn = make_call_insn_raw (x);
      add_insn (insn);
      break;
    }
  return insn;
}
rtx
emit_label (rtx label)
{
  if ((((label)->u.fld[0]).rtint) == 0)
    {
      (((label)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
      add_insn (label);
    }
  return label;
}
rtx
emit_barrier (void)
{
  rtx barrier = rtx_alloc_stat (BARRIER );
  (((barrier)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
  add_insn (barrier);
  return barrier;
}
rtx
emit_line_note (location_t location)
{
  rtx note;
  set_file_and_line_for_stmt (location);
  if (location.file && (cfun->emit->x_last_location).file
      && !strcmp (location.file, (cfun->emit->x_last_location).file)
      && location.line == (cfun->emit->x_last_location).line)
    return (rtx) 0;
  (cfun->emit->x_last_location) = location;
  if (no_line_numbers)
    {
      (cfun->emit->x_cur_insn_uid)++;
      return (rtx) 0;
    }
  note = emit_note (location.line);
  (((note)->u.fld[4]).rtstr) = location.file;
  return note;
}
rtx
emit_note_copy (rtx orig)
{
  rtx note;
  if ((((orig)->u.fld[5]).rtint) >= 0 && no_line_numbers)
    {
      (cfun->emit->x_cur_insn_uid)++;
      return (rtx) 0;
    }
  note = rtx_alloc_stat (NOTE );
  (((note)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
  ((note)->u.fld[4]) = ((orig)->u.fld[4]);
  (((note)->u.fld[5]).rtint) = (((orig)->u.fld[5]).rtint);
  (((note)->u.fld[3]).bb) = ((void *)0);
  add_insn (note);
  return note;
}
rtx
emit_note (int note_no)
{
  rtx note;
  note = rtx_alloc_stat (NOTE );
  (((note)->u.fld[0]).rtint) = (cfun->emit->x_cur_insn_uid)++;
  (((note)->u.fld[5]).rtint) = note_no;
  memset (&((note)->u.fld[4]), 0, sizeof (((note)->u.fld[4])));
  (((note)->u.fld[3]).bb) = ((void *)0);
  add_insn (note);
  return note;
}
void
force_next_line_note (void)
{
  (cfun->emit->x_last_location).line = -1;
}
rtx
set_unique_reg_note (rtx insn, enum reg_note kind, rtx datum)
{
  rtx note = find_reg_note (insn, kind, (rtx) 0);
  switch (kind)
    {
    case REG_EQUAL:
    case REG_EQUIV:
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL && multiple_sets (insn))
 {
   if (note)
     abort ();
   return (rtx) 0;
 }
      if (((enum rtx_code) (datum)->code) == ASM_OPERANDS)
 return (rtx) 0;
      break;
    default:
      break;
    }
  if (note)
    {
      (((note)->u.fld[0]).rtx1) = datum;
      return note;
    }
  (((insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (kind), (datum), ((((insn)->u.fld[8]).rtx1)));
  return (((insn)->u.fld[8]).rtx1);
}
enum rtx_code
classify_insn (rtx x)
{
  if (((enum rtx_code) (x)->code) == CODE_LABEL)
    return CODE_LABEL;
  if (((enum rtx_code) (x)->code) == CALL)
    return CALL_INSN;
  if (((enum rtx_code) (x)->code) == RETURN)
    return JUMP_INSN;
  if (((enum rtx_code) (x)->code) == SET)
    {
      if ((((x)->u.fld[0]).rtx1) == (global_rtl[GR_PC]))
 return JUMP_INSN;
      else if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CALL)
 return CALL_INSN;
      else
 return INSN;
    }
  if (((enum rtx_code) (x)->code) == PARALLEL)
    {
      int j;
      for (j = (((((x)->u.fld[0]).rtvec1))->num_elem) - 1; j >= 0; j--)
 if (((enum rtx_code) ((((((x)->u.fld[0]).rtvec1))->elem[j]))->code) == CALL)
   return CALL_INSN;
 else if (((enum rtx_code) ((((((x)->u.fld[0]).rtvec1))->elem[j]))->code) == SET
   && ((((((((x)->u.fld[0]).rtvec1))->elem[j]))->u.fld[0]).rtx1) == (global_rtl[GR_PC]))
   return JUMP_INSN;
 else if (((enum rtx_code) ((((((x)->u.fld[0]).rtvec1))->elem[j]))->code) == SET
   && ((enum rtx_code) (((((((((x)->u.fld[0]).rtvec1))->elem[j]))->u.fld[1]).rtx1))->code) == CALL)
   return CALL_INSN;
    }
  return INSN;
}
rtx
emit (rtx x)
{
  enum rtx_code code = classify_insn (x);
  if (code == CODE_LABEL)
    return emit_label (x);
  else if (code == INSN)
    return emit_insn (x);
  else if (code == JUMP_INSN)
    {
      rtx insn = emit_jump_insn (x);
      if (any_uncondjump_p (insn) || ((enum rtx_code) (x)->code) == RETURN)
 return emit_barrier ();
      return insn;
    }
  else if (code == CALL_INSN)
    return emit_call_insn (x);
  else
    abort ();
}
static struct sequence_stack *free_sequence_stack;
void
start_sequence (void)
{
  struct sequence_stack *tem;
  if (free_sequence_stack != ((void *)0))
    {
      tem = free_sequence_stack;
      free_sequence_stack = tem->next;
    }
  else
    tem = ggc_alloc_stat (sizeof (struct sequence_stack) );
  tem->next = (cfun->emit->sequence_stack);
  tem->first = (cfun->emit->x_first_insn);
  tem->last = (cfun->emit->x_last_insn);
  (cfun->emit->sequence_stack) = tem;
  (cfun->emit->x_first_insn) = 0;
  (cfun->emit->x_last_insn) = 0;
}
void
push_to_sequence (rtx first)
{
  rtx last;
  start_sequence ();
  for (last = first; last && (((last)->u.fld[2]).rtx1); last = (((last)->u.fld[2]).rtx1));
  (cfun->emit->x_first_insn) = first;
  (cfun->emit->x_last_insn) = last;
}
void
push_to_full_sequence (rtx first, rtx last)
{
  start_sequence ();
  (cfun->emit->x_first_insn) = first;
  (cfun->emit->x_last_insn) = last;
  if (last && (((last)->u.fld[2]).rtx1))
    abort ();
}
void
push_topmost_sequence (void)
{
  struct sequence_stack *stack, *top = ((void *)0);
  start_sequence ();
  for (stack = (cfun->emit->sequence_stack); stack; stack = stack->next)
    top = stack;
  (cfun->emit->x_first_insn) = top->first;
  (cfun->emit->x_last_insn) = top->last;
}
void
pop_topmost_sequence (void)
{
  struct sequence_stack *stack, *top = ((void *)0);
  for (stack = (cfun->emit->sequence_stack); stack; stack = stack->next)
    top = stack;
  top->first = (cfun->emit->x_first_insn);
  top->last = (cfun->emit->x_last_insn);
  end_sequence ();
}
void
end_sequence (void)
{
  struct sequence_stack *tem = (cfun->emit->sequence_stack);
  (cfun->emit->x_first_insn) = tem->first;
  (cfun->emit->x_last_insn) = tem->last;
  (cfun->emit->sequence_stack) = tem->next;
  memset (tem, 0, sizeof (*tem));
  tem->next = free_sequence_stack;
  free_sequence_stack = tem;
}
int
in_sequence_p (void)
{
  return (cfun->emit->sequence_stack) != 0;
}
void
init_virtual_regs (struct emit_status *es)
{
  rtx *ptr = es->x_regno_reg_rtx;
  ptr[((53))] = (global_rtl[GR_VIRTUAL_INCOMING_ARGS]);
  ptr[(((53)) + 1)] = (global_rtl[GR_VIRTUAL_STACK_ARGS]);
  ptr[(((53)) + 2)] = (global_rtl[GR_VIRTUAL_STACK_DYNAMIC]);
  ptr[(((53)) + 3)] = (global_rtl[GR_VIRTUAL_OUTGOING_ARGS]);
  ptr[(((53)) + 4)] = (global_rtl[GR_VIRTUAL_CFA]);
}
static rtx copy_insn_scratch_in[30];
static rtx copy_insn_scratch_out[30];
static int copy_insn_n_scratches;
static rtvec orig_asm_operands_vector;
static rtvec copy_asm_operands_vector;
static rtvec orig_asm_constraints_vector;
static rtvec copy_asm_constraints_vector;
rtx
copy_insn_1 (rtx orig)
{
  rtx copy;
  int i, j;
  enum rtx_code code;
  const char *format_ptr;
  code = ((enum rtx_code) (orig)->code);
  switch (code)
    {
    case REG:
    case QUEUED:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case CODE_LABEL:
    case PC:
    case CC0:
      return orig;
    case CLOBBER:
      if ((((enum rtx_code) ((((orig)->u.fld[0]).rtx1))->code) == REG) && ((((((orig)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
 return orig;
      break;
    case SCRATCH:
      for (i = 0; i < copy_insn_n_scratches; i++)
 if (copy_insn_scratch_in[i] == orig)
   return copy_insn_scratch_out[i];
      break;
    case CONST:
      if (((enum rtx_code) ((((orig)->u.fld[0]).rtx1))->code) == PLUS
   && ((enum rtx_code) (((((((orig)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SYMBOL_REF
   && ((enum rtx_code) (((((((orig)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
 return orig;
      break;
    default:
      break;
    }
  copy = rtx_alloc_stat (code );
  memcpy (copy, orig, __builtin_offsetof (rtx_def, u));
  ((copy)->used) = 0;
  if (((((enum rtx_code) (orig)->code) == INSN) || (((enum rtx_code) (orig)->code) == JUMP_INSN) || (((enum rtx_code) (orig)->code) == CALL_INSN)))
    {
      ((copy)->jump) = 0;
      ((copy)->call) = 0;
      ((copy)->frame_related) = 0;
    }
  format_ptr = (rtx_format[(int) (((enum rtx_code) (copy)->code))]);
  for (i = 0; i < (rtx_length[(int) (((enum rtx_code) (copy)->code))]); i++)
    {
      copy->u.fld[i] = orig->u.fld[i];
      switch (*format_ptr++)
 {
 case 'e':
   if ((((orig)->u.fld[i]).rtx1) != ((void *)0))
     (((copy)->u.fld[i]).rtx1) = copy_insn_1 ((((orig)->u.fld[i]).rtx1));
   break;
 case 'E':
 case 'V':
   if ((((orig)->u.fld[i]).rtvec1) == orig_asm_constraints_vector)
     (((copy)->u.fld[i]).rtvec1) = copy_asm_constraints_vector;
   else if ((((orig)->u.fld[i]).rtvec1) == orig_asm_operands_vector)
     (((copy)->u.fld[i]).rtvec1) = copy_asm_operands_vector;
   else if ((((orig)->u.fld[i]).rtvec1) != ((void *)0))
     {
       (((copy)->u.fld[i]).rtvec1) = rtvec_alloc ((((((orig)->u.fld[i]).rtvec1))->num_elem));
       for (j = 0; j < (((((copy)->u.fld[i]).rtvec1))->num_elem); j++)
  (((((copy)->u.fld[i]).rtvec1))->elem[j]) = copy_insn_1 ((((((orig)->u.fld[i]).rtvec1))->elem[j]));
     }
   break;
 case 't':
 case 'w':
 case 'i':
 case 's':
 case 'S':
 case 'u':
 case '0':
   break;
 default:
   abort ();
 }
    }
  if (code == SCRATCH)
    {
      i = copy_insn_n_scratches++;
      if (i >= 30)
 abort ();
      copy_insn_scratch_in[i] = orig;
      copy_insn_scratch_out[i] = copy;
    }
  else if (code == ASM_OPERANDS)
    {
      orig_asm_operands_vector = (((orig)->u.fld[3]).rtvec1);
      copy_asm_operands_vector = (((copy)->u.fld[3]).rtvec1);
      orig_asm_constraints_vector = (((orig)->u.fld[4]).rtvec1);
      copy_asm_constraints_vector = (((copy)->u.fld[4]).rtvec1);
    }
  return copy;
}
rtx
copy_insn (rtx insn)
{
  copy_insn_n_scratches = 0;
  orig_asm_operands_vector = 0;
  orig_asm_constraints_vector = 0;
  copy_asm_operands_vector = 0;
  copy_asm_constraints_vector = 0;
  return copy_insn_1 (insn);
}
void
init_emit (void)
{
  struct function *f = cfun;
  f->emit = ggc_alloc_stat (sizeof (struct emit_status) );
  (cfun->emit->x_first_insn) = ((void *)0);
  (cfun->emit->x_last_insn) = ((void *)0);
  (cfun->emit->x_cur_insn_uid) = 1;
  (cfun->emit->x_reg_rtx_no) = (((53)) + 4) + 1;
  (cfun->emit->x_last_location) = unknown_location;
  (cfun->emit->x_first_label_num) = label_num;
  last_label_num = 0;
  (cfun->emit->sequence_stack) = ((void *)0);
  f->emit->regno_pointer_align_length = (((53)) + 4) + 101;
  f->emit->regno_pointer_align
    = ggc_alloc_cleared_stat (f->emit->regno_pointer_align_length * sizeof (unsigned char) )
                             ;
  (cfun->emit->x_regno_reg_rtx)
    = ggc_alloc_stat (f->emit->regno_pointer_align_length * sizeof (rtx) );
  memcpy ((cfun->emit->x_regno_reg_rtx),
   static_regno_reg_rtx,
   53 * sizeof (rtx));
  init_virtual_regs (f->emit);
  ((((global_rtl[GR_STACK_POINTER])))->frame_related) = 1;
  ((((global_rtl[GR_FRAME_POINTER])))->frame_related) = 1;
  ((((global_rtl[GR_HARD_FRAME_POINTER])))->frame_related) = 1;
  ((((global_rtl[GR_ARG_POINTER])))->frame_related) = 1;
  ((((global_rtl[GR_VIRTUAL_INCOMING_ARGS])))->frame_related) = 1;
  ((((global_rtl[GR_VIRTUAL_STACK_ARGS])))->frame_related) = 1;
  ((((global_rtl[GR_VIRTUAL_STACK_DYNAMIC])))->frame_related) = 1;
  ((((global_rtl[GR_VIRTUAL_OUTGOING_ARGS])))->frame_related) = 1;
  ((((global_rtl[GR_VIRTUAL_CFA])))->frame_related) = 1;
  (cfun->emit->regno_pointer_align[7]) = (8 * (0 ? 8 : 4));
  (cfun->emit->regno_pointer_align[20]) = (8 * (0 ? 8 : 4));
  (cfun->emit->regno_pointer_align[6]) = (8 * (0 ? 8 : 4));
  (cfun->emit->regno_pointer_align[16]) = (8 * (0 ? 8 : 4));
  (cfun->emit->regno_pointer_align[((53))]) = (8 * (0 ? 8 : 4));
  (cfun->emit->regno_pointer_align[(((53)) + 1)]) = (8 * (0 ? 8 : 4));
  (cfun->emit->regno_pointer_align[(((53)) + 2)]) = (8 * (0 ? 8 : 4));
  (cfun->emit->regno_pointer_align[(((53)) + 3)]) = (8 * (0 ? 8 : 4));
  (cfun->emit->regno_pointer_align[(((53)) + 4)]) = (8 * (0 ? 8 : 4));
}
static rtx
gen_const_vector_0 (enum machine_mode mode)
{
  rtx tem;
  rtvec v;
  int units, i;
  enum machine_mode inner;
  units = mode_nunits[mode];
  inner = mode_inner[mode];
  v = rtvec_alloc (units);
  if (!(const_tiny_rtx[0][(int) (inner)]))
    abort ();
  for (i = 0; i < units; ++i)
    ((v)->elem[i]) = (const_tiny_rtx[0][(int) (inner)]);
  tem = gen_rtx_fmt_E (CONST_VECTOR, (mode), (v));
  return tem;
}
rtx
gen_rtx_CONST_VECTOR (enum machine_mode mode, rtvec v)
{
  rtx inner_zero = (const_tiny_rtx[0][(int) (mode_inner[mode])]);
  int i;
  for (i = mode_nunits[mode] - 1; i >= 0; i--)
    if (((v)->elem[i]) != inner_zero)
      return gen_rtx_fmt_E (CONST_VECTOR, (mode), (v));
  return (const_tiny_rtx[0][(int) (mode)]);
}
void
init_emit_once (int line_numbers)
{
  int i;
  enum machine_mode mode;
  enum machine_mode double_mode;
  init_reg_modes_once ();
  const_int_htab = htab_create_alloc (37, const_int_htab_hash, const_int_htab_eq, ((void *)0), ggc_calloc, ((void *)0))
                                ;
  const_double_htab = htab_create_alloc (37, const_double_htab_hash, const_double_htab_eq, ((void *)0), ggc_calloc, ((void *)0))
                                      ;
  mem_attrs_htab = htab_create_alloc (37, mem_attrs_htab_hash, mem_attrs_htab_eq, ((void *)0), ggc_calloc, ((void *)0))
                                ;
  reg_attrs_htab = htab_create_alloc (37, reg_attrs_htab_hash, reg_attrs_htab_eq, ((void *)0), ggc_calloc, ((void *)0))
                                ;
  no_line_numbers = ! line_numbers;
  byte_mode = VOIDmode;
  word_mode = VOIDmode;
  double_mode = VOIDmode;
  for (mode = class_narrowest_mode[MODE_INT]; mode != VOIDmode;
       mode = mode_wider[mode])
    {
      if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) == 8
   && byte_mode == VOIDmode)
 byte_mode = mode;
      if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) == (8 * (0 ? 8 : 4))
   && word_mode == VOIDmode)
 word_mode = mode;
    }
  for (mode = class_narrowest_mode[MODE_FLOAT]; mode != VOIDmode;
       mode = mode_wider[mode])
    {
      if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) == 64
   && double_mode == VOIDmode)
 double_mode = mode;
    }
  ptr_mode = mode_for_size ((8 * (0 ? 8 : 4)), mode_class[(0 ? DImode : SImode)], 0);
  (global_rtl[GR_PC]) = gen_rtx_fmt_ (PC, (VOIDmode));
  (global_rtl[GR_CC0]) = gen_rtx_fmt_ (CC0, (VOIDmode));
  (global_rtl[GR_STACK_POINTER]) = gen_raw_REG ((0 ? DImode : SImode), 7);
  (global_rtl[GR_FRAME_POINTER]) = gen_raw_REG ((0 ? DImode : SImode), 20);
  if ((global_rtl[GR_HARD_FRAME_POINTER]) == 0)
    (global_rtl[GR_HARD_FRAME_POINTER]) = gen_raw_REG ((0 ? DImode : SImode),
       6);
  if ((global_rtl[GR_ARG_POINTER]) == 0)
    (global_rtl[GR_ARG_POINTER]) = gen_raw_REG ((0 ? DImode : SImode), 16);
  (global_rtl[GR_VIRTUAL_INCOMING_ARGS]) =
    gen_raw_REG ((0 ? DImode : SImode), ((53)));
  (global_rtl[GR_VIRTUAL_STACK_ARGS]) =
    gen_raw_REG ((0 ? DImode : SImode), (((53)) + 1));
  (global_rtl[GR_VIRTUAL_STACK_DYNAMIC]) =
    gen_raw_REG ((0 ? DImode : SImode), (((53)) + 2));
  (global_rtl[GR_VIRTUAL_OUTGOING_ARGS]) =
    gen_raw_REG ((0 ? DImode : SImode), (((53)) + 3));
  (global_rtl[GR_VIRTUAL_CFA]) = gen_raw_REG ((0 ? DImode : SImode), (((53)) + 4));
  for (i = 0; i < 53; i++)
    static_regno_reg_rtx[i] = gen_raw_REG (reg_raw_mode[i], i);
  for (i = - 64; i <= 64; i++)
    const_int_rtx[i + 64] =
      gen_rtx_fmt_w (CONST_INT, (VOIDmode), ((long) i));
  if (1 >= - 64
      && 1 <= 64)
    const_true_rtx = const_int_rtx[1 + 64];
  else
    const_true_rtx = gen_rtx_CONST_INT (VOIDmode, 1);
  real_from_integer (&(dconst0), double_mode, 0, 0, 0);
  real_from_integer (&(dconst1), double_mode, 1, 0, 0);
  real_from_integer (&(dconst2), double_mode, 2, 0, 0);
  real_from_integer (&(dconst3), double_mode, 3, 0, 0);
  real_from_integer (&(dconst10), double_mode, 10, 0, 0);
  real_from_integer (&(dconstm1), double_mode, -1, -1, 0);
  real_from_integer (&(dconstm2), double_mode, -2, -1, 0);
  dconsthalf = dconst1;
  ((&dconsthalf)->uexp = ((unsigned int)(((int)((&dconsthalf)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) - 1) & (unsigned int)((1 << (32 - 5)) - 1)));
  real_arithmetic (&dconstthird, RDIV_EXPR, &dconst1, &dconst3);
  real_from_string (&dconstpi,
    "3.1415926535897932384626433832795028841971693993751058209749445923078");
  real_from_string (&dconste,
    "2.7182818284590452353602874713526624977572470936999595749669676277241");
  for (i = 0; i < (int) (sizeof (const_tiny_rtx) / sizeof ((const_tiny_rtx)[0])); i++)
    {
      struct real_value *r =
 (i == 0 ? &dconst0 : i == 1 ? &dconst1 : &dconst2);
      for (mode = class_narrowest_mode[MODE_FLOAT]; mode != VOIDmode;
    mode = mode_wider[mode])
 const_tiny_rtx[i][(int) mode] =
   const_double_from_real_value (*r, mode);
      const_tiny_rtx[i][(int) VOIDmode] = gen_rtx_CONST_INT (VOIDmode, (long) (i));
      for (mode = class_narrowest_mode[MODE_INT]; mode != VOIDmode;
    mode = mode_wider[mode])
 const_tiny_rtx[i][(int) mode] = gen_rtx_CONST_INT (VOIDmode, (long) (i));
      for (mode = class_narrowest_mode[MODE_PARTIAL_INT];
    mode != VOIDmode;
    mode = mode_wider[mode])
 const_tiny_rtx[i][(int) mode] = gen_rtx_CONST_INT (VOIDmode, (long) (i));
    }
  for (mode = class_narrowest_mode[MODE_VECTOR_INT];
       mode != VOIDmode;
       mode = mode_wider[mode])
    const_tiny_rtx[0][(int) mode] = gen_const_vector_0 (mode);
  for (mode = class_narrowest_mode[MODE_VECTOR_FLOAT];
       mode != VOIDmode;
       mode = mode_wider[mode])
    const_tiny_rtx[0][(int) mode] = gen_const_vector_0 (mode);
  for (i = (int) CCmode; i < (int) MAX_MACHINE_MODE; ++i)
    if (mode_class[(enum machine_mode) i] == MODE_CC)
      const_tiny_rtx[0][i] = (const_int_rtx[64]);
  const_tiny_rtx[0][(int) BImode] = (const_int_rtx[64]);
  if (1 == 1)
    const_tiny_rtx[1][(int) BImode] = (const_int_rtx[64 +1]);
  static_chain_rtx = gen_rtx_REG ((0 ? DImode : SImode), (0 ? (((((20 + 1) + 7) + 1) + 7) + 1) + 10 - 8 : 2));
    static_chain_incoming_rtx = static_chain_rtx;
  if ((unsigned) (0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3) != (~(unsigned int) 0))
    pic_offset_table_rtx = gen_raw_REG ((0 ? DImode : SImode), (0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3));
}
int
force_line_numbers (void)
{
  int old = no_line_numbers;
  no_line_numbers = 0;
  if (old)
    force_next_line_note ();
  return old;
}
void
restore_line_number_status (int old_value)
{
  no_line_numbers = old_value;
}
rtx
emit_copy_of_insn_after (rtx insn, rtx after)
{
  rtx new;
  rtx note1, note2, link;
  switch (((enum rtx_code) (insn)->code))
    {
    case INSN:
      new = emit_insn_after (copy_insn ((((insn)->u.fld[5]).rtx1)), after);
      break;
    case JUMP_INSN:
      new = emit_jump_insn_after (copy_insn ((((insn)->u.fld[5]).rtx1)), after);
      break;
    case CALL_INSN:
      new = emit_call_insn_after (copy_insn ((((insn)->u.fld[5]).rtx1)), after);
      if ((((insn)->u.fld[9]).rtx1))
 (((new)->u.fld[9]).rtx1)
   = copy_insn ((((insn)->u.fld[9]).rtx1));
      (((new))->jump) = (((insn))->jump);
      (((new))->unchanging) = (((insn))->unchanging);
      break;
    default:
      abort ();
    }
  mark_jump_label ((((new)->u.fld[5]).rtx1), new, 0);
  (((new)->u.fld[4]).rtint) = (((insn)->u.fld[4]).rtint);
  for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (link)->mode)) != REG_LABEL)
      {
 if (((enum rtx_code) (link)->code) == EXPR_LIST)
   (((new)->u.fld[8]).rtx1)
     = copy_insn_1 (gen_rtx_fmt_ee (EXPR_LIST, (((enum reg_note) ((enum machine_mode) (link)->mode))), ((((link)->u.fld[0]).rtx1)), ((((new)->u.fld[8]).rtx1)))
                           );
 else
   (((new)->u.fld[8]).rtx1)
     = copy_insn_1 (gen_rtx_fmt_ue (INSN_LIST, (((enum reg_note) ((enum machine_mode) (link)->mode))), ((((link)->u.fld[0]).rtx1)), ((((new)->u.fld[8]).rtx1)))
                           );
      }
  if ((note1 = find_reg_note (new, REG_RETVAL, (rtx) 0)) != ((void *)0))
    {
      rtx p = new;
      while ((note2 = find_reg_note (p, REG_LIBCALL, (rtx) 0)) == ((void *)0))
 p = (((p)->u.fld[1]).rtx1);
      (((note1)->u.fld[0]).rtx1) = p;
      (((note2)->u.fld[0]).rtx1) = new;
    }
  (((new)->u.fld[6]).rtint) = (((insn)->u.fld[6]).rtint);
  return new;
}
static rtx hard_reg_clobbers [NUM_MACHINE_MODES][53];
rtx
gen_hard_reg_clobber (enum machine_mode mode, unsigned int regno)
{
  if (hard_reg_clobbers[mode][regno])
    return hard_reg_clobbers[mode][regno];
  else
    return (hard_reg_clobbers[mode][regno] =
     gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_REG (mode, regno))));
}
const struct ggc_root_tab gt_ggc_r_gt_emit_rtl_h[] = {
  {
    &static_regno_reg_rtx[0],
    1 * (53),
    sizeof (static_regno_reg_rtx[0]),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_ggc_rd_gt_emit_rtl_h[] = {
  { &hard_reg_clobbers, 1, sizeof (hard_reg_clobbers), ((void *)0), ((void *)0) },
  { &free_sequence_stack, 1, sizeof (free_sequence_stack), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_cache_tab gt_ggc_rc_gt_emit_rtl_h[] = {
  {
    &const_double_htab,
    1,
    sizeof (const_double_htab),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def,
    &ggc_marked_p
  },
  {
    &reg_attrs_htab,
    1,
    sizeof (reg_attrs_htab),
    &gt_ggc_mx_reg_attrs,
    &gt_pch_nx_reg_attrs,
    &ggc_marked_p
  },
  {
    &mem_attrs_htab,
    1,
    sizeof (mem_attrs_htab),
    &gt_ggc_mx_mem_attrs,
    &gt_pch_nx_mem_attrs,
    &ggc_marked_p
  },
  {
    &const_int_htab,
    1,
    sizeof (const_int_htab),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def,
    &ggc_marked_p
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rc_gt_emit_rtl_h[] = {
  {
    &const_double_htab,
    1,
    sizeof (const_double_htab),
    &gt_ggc_m_P7rtx_def4htab,
    &gt_pch_n_P7rtx_def4htab
  },
  {
    &reg_attrs_htab,
    1,
    sizeof (reg_attrs_htab),
    &gt_ggc_m_P9reg_attrs4htab,
    &gt_pch_n_P9reg_attrs4htab
  },
  {
    &mem_attrs_htab,
    1,
    sizeof (mem_attrs_htab),
    &gt_ggc_m_P9mem_attrs4htab,
    &gt_pch_n_P9mem_attrs4htab
  },
  {
    &const_int_htab,
    1,
    sizeof (const_int_htab),
    &gt_ggc_m_P7rtx_def4htab,
    &gt_pch_n_P7rtx_def4htab
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_emit_rtl_h[] = {
  { &label_num, 1, sizeof (label_num), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
struct inline_remap
{
  tree fndecl;
  rtx insns_at_start;
  rtx *reg_map;
  rtx *label_map;
  rtx *insn_map;
  int min_insnno, max_insnno;
  varray_type const_equiv_varray;
  unsigned int const_age;
  rtvec orig_asm_operands_vector;
  rtvec copy_asm_operands_vector;
  rtvec copy_asm_constraints_vector;
  unsigned char *regno_pointer_align;
  rtx *x_regno_reg_rtx;
  int num_sets;
  struct equiv_table
    {
      rtx dest;
      rtx equiv;
    } equiv_sets[30];
  rtx last_pc_value;
  rtx compare_src;
  enum machine_mode compare_mode;
};
extern rtx copy_rtx_and_substitute (rtx, struct inline_remap *, int);
extern rtx get_hard_reg_initial_val (enum machine_mode, int);
extern rtx get_func_hard_reg_initial_val (struct function *, rtx);
extern rtx has_func_hard_reg_initial_val (struct function *, rtx);
extern rtx has_hard_reg_initial_val (enum machine_mode, int);
extern rtx get_hard_reg_initial_reg (struct function *, rtx);
extern void emit_initial_value_sets (void);
extern void allocate_initial_values (rtx *);
extern tree copy_decl_for_inlining (tree, tree, tree);
extern unsigned char function_attribute_inlinable_p (tree);
extern void try_constants (rtx, struct inline_remap *);
extern rtx get_label_from_map (struct inline_remap *, int);
extern varray_type global_const_equiv_varray;
tree (*lang_protect_cleanup_actions) (void);
int (*lang_eh_type_covers) (tree a, tree b);
tree (*lang_eh_runtime_type) (tree);
struct ehl_map_entry
{
  rtx label;
  struct eh_region *region;
};
static int call_site_base;
static
  htab_t type_to_runtime_map;
static tree sjlj_fc_type_node;
static int sjlj_fc_call_site_ofs;
static int sjlj_fc_data_ofs;
static int sjlj_fc_personality_ofs;
static int sjlj_fc_lsda_ofs;
static int sjlj_fc_jbuf_ofs;
struct eh_region
{
  struct eh_region *outer;
  struct eh_region *inner;
  struct eh_region *next_peer;
  int region_number;
  bitmap aka;
  enum eh_region_type
  {
    ERT_UNKNOWN = 0,
    ERT_CLEANUP,
    ERT_TRY,
    ERT_CATCH,
    ERT_ALLOWED_EXCEPTIONS,
    ERT_MUST_NOT_THROW,
    ERT_THROW,
    ERT_FIXUP
  } type;
  union eh_region_u {
    struct eh_region_u_try {
      struct eh_region *catch;
      struct eh_region *last_catch;
      struct eh_region *prev_try;
      rtx continue_label;
    } try;
    struct eh_region_u_catch {
      struct eh_region *next_catch;
      struct eh_region *prev_catch;
      tree type_list;
      tree filter_list;
    } catch;
    struct eh_region_u_allowed {
      tree type_list;
      int filter;
    } allowed;
    struct eh_region_u_throw {
      tree type;
    } throw;
    struct eh_region_u_cleanup {
      tree exp;
      struct eh_region *prev_try;
    } cleanup;
    struct eh_region_u_fixup {
      tree cleanup_exp;
      struct eh_region *real_region;
      unsigned char resolved;
    } fixup;
  } u;
  rtx label;
  tree tree_label;
  rtx landing_pad;
  rtx post_landing_pad;
  rtx resume;
  unsigned may_contain_throw : 1;
};
struct call_site_record
{
  rtx landing_pad;
  int action;
};
struct eh_status
{
  struct eh_region *region_tree;
  struct eh_region ** region_array;
  struct eh_region *cur_region;
  struct eh_region *try_region;
  rtx filter;
  rtx exc_ptr;
  int built_landing_pads;
  int last_region_number;
  varray_type ttype_data;
  varray_type ehspec_data;
  varray_type action_record_data;
  htab_t exception_handler_label_map;
  struct call_site_record *
    call_site_data;
  int call_site_data_used;
  int call_site_data_size;
  rtx ehr_stackadj;
  rtx ehr_handler;
  rtx ehr_label;
  rtx sjlj_fc;
  rtx sjlj_exit_after;
};
static int t2r_eq (const void *, const void *);
static hashval_t t2r_hash (const void *);
static void add_type_for_runtime (tree);
static tree lookup_type_for_runtime (tree);
static struct eh_region *expand_eh_region_end (void);
static void resolve_fixup_regions (void);
static void remove_fixup_regions (void);
static void remove_unreachable_regions (rtx);
static void convert_from_eh_region_ranges_1 (rtx *, int *, int);
static struct eh_region *duplicate_eh_region_1 (struct eh_region *,
      struct inline_remap *);
static void duplicate_eh_region_2 (struct eh_region *, struct eh_region **);
static int ttypes_filter_eq (const void *, const void *);
static hashval_t ttypes_filter_hash (const void *);
static int ehspec_filter_eq (const void *, const void *);
static hashval_t ehspec_filter_hash (const void *);
static int add_ttypes_entry (htab_t, tree);
static int add_ehspec_entry (htab_t, htab_t, tree);
static void assign_filter_values (void);
static void build_post_landing_pads (void);
static void connect_post_landing_pads (void);
static void dw2_build_landing_pads (void);
struct sjlj_lp_info;
static unsigned char sjlj_find_directly_reachable_regions (struct sjlj_lp_info *);
static void sjlj_assign_call_site_values (rtx, struct sjlj_lp_info *);
static void sjlj_mark_call_sites (struct sjlj_lp_info *);
static void sjlj_emit_function_enter (rtx);
static void sjlj_emit_function_exit (void);
static void sjlj_emit_dispatch_table (rtx, struct sjlj_lp_info *);
static void sjlj_build_landing_pads (void);
static hashval_t ehl_hash (const void *);
static int ehl_eq (const void *, const void *);
static void add_ehl_entry (rtx, struct eh_region *);
static void remove_exception_handler_label (rtx);
static void remove_eh_handler (struct eh_region *);
static int for_each_eh_label_1 (void **, void *);
enum reachable_code
{
  RNL_NOT_CAUGHT,
  RNL_MAYBE_CAUGHT,
  RNL_CAUGHT,
  RNL_BLOCKED
};
struct reachable_info;
static enum reachable_code reachable_next_level (struct eh_region *, tree,
       struct reachable_info *);
static int action_record_eq (const void *, const void *);
static hashval_t action_record_hash (const void *);
static int add_action_record (htab_t, int, int);
static int collect_one_action_chain (htab_t, struct eh_region *);
static int add_call_site (rtx, int);
static void push_uleb128 (varray_type *, unsigned int);
static void push_sleb128 (varray_type *, int);
static void dw2_output_call_site_table (void);
static void sjlj_output_call_site_table (void);
int
doing_eh (int do_warn)
{
  if (! flag_exceptions)
    {
      static int warned = 0;
      if (! warned && do_warn)
 {
   error ("exception handling disabled, use -fexceptions to enable");
   warned = 1;
 }
      return 0;
    }
  return 1;
}
void
init_eh (void)
{
  if (! flag_exceptions)
    return;
  type_to_runtime_map = htab_create_alloc (31, t2r_hash, t2r_eq, ((void *)0), ggc_calloc, ((void *)0));
  if (0)
    {
      tree f_jbuf, f_per, f_lsda, f_prev, f_cs, f_data, tmp;
      sjlj_fc_type_node = lang_hooks.types.make_type (RECORD_TYPE);
      f_prev = build_decl_stat (FIELD_DECL,get_identifier ("__prev"),build_pointer_type (sjlj_fc_type_node) )
                                             ;
      ((f_prev)->decl.context) = sjlj_fc_type_node;
      f_cs = build_decl_stat (FIELD_DECL,get_identifier ("__call_site"),integer_types[itk_int] )
                      ;
      ((f_cs)->decl.context) = sjlj_fc_type_node;
      tmp = build_index_type (build_int_2_wide ((unsigned long) (4 - 1), (long) (0)));
      tmp = build_array_type (lang_hooks.types.type_for_mode (word_mode, 1),
         tmp);
      f_data = build_decl_stat (FIELD_DECL,get_identifier ("__data"),tmp );
      ((f_data)->decl.context) = sjlj_fc_type_node;
      f_per = build_decl_stat (FIELD_DECL,get_identifier ("__personality"),global_trees[TI_PTR_TYPE] )
                   ;
      ((f_per)->decl.context) = sjlj_fc_type_node;
      f_lsda = build_decl_stat (FIELD_DECL,get_identifier ("__lsda"),global_trees[TI_PTR_TYPE] )
                    ;
      ((f_lsda)->decl.context) = sjlj_fc_type_node;
      tmp = build_int_2_wide ((unsigned long) (5 * (8 * (0 ? 8 : 4)) / (8 * (0 ? 8 : 4)) - 1), (long) (0));
      tmp = build_index_type (tmp);
      tmp = build_array_type (global_trees[TI_PTR_TYPE], tmp);
      f_jbuf = build_decl_stat (FIELD_DECL,get_identifier ("__jbuf"),tmp );
      ((f_jbuf)->decl.context) = sjlj_fc_type_node;
      ((sjlj_fc_type_node)->type.value1s) = f_prev;
      ((f_prev)->common.chain) = f_cs;
      ((f_cs)->common.chain) = f_data;
      ((f_data)->common.chain) = f_per;
      ((f_per)->common.chain) = f_lsda;
      ((f_lsda)->common.chain) = f_jbuf;
      layout_type (sjlj_fc_type_node);
      sjlj_fc_call_site_ofs
 = (tree_low_cst (((f_cs)->decl.arguments), 1)
    + tree_low_cst (((f_cs)->decl.u2.t), 1) / 8);
      sjlj_fc_data_ofs
 = (tree_low_cst (((f_data)->decl.arguments), 1)
    + tree_low_cst (((f_data)->decl.u2.t), 1) / 8);
      sjlj_fc_personality_ofs
 = (tree_low_cst (((f_per)->decl.arguments), 1)
    + tree_low_cst (((f_per)->decl.u2.t), 1) / 8);
      sjlj_fc_lsda_ofs
 = (tree_low_cst (((f_lsda)->decl.arguments), 1)
    + tree_low_cst (((f_lsda)->decl.u2.t), 1) / 8);
      sjlj_fc_jbuf_ofs
 = (tree_low_cst (((f_jbuf)->decl.arguments), 1)
    + tree_low_cst (((f_jbuf)->decl.u2.t), 1) / 8);
    }
}
void
init_eh_for_function (void)
{
  cfun->eh = ggc_alloc_cleared_stat (sizeof (struct eh_status) );
}
static struct eh_region *
gen_eh_region (enum eh_region_type type, struct eh_region *outer)
{
  struct eh_region *new;
  new = ggc_alloc_cleared_stat (sizeof (*new) );
  new->type = type;
  new->outer = outer;
  if (outer)
    {
      new->next_peer = outer->inner;
      outer->inner = new;
    }
  else
    {
      new->next_peer = cfun->eh->region_tree;
      cfun->eh->region_tree = new;
    }
  new->region_number = ++cfun->eh->last_region_number;
  return new;
}
struct eh_region *
gen_eh_region_cleanup (struct eh_region *outer, struct eh_region *prev_try)
{
  struct eh_region *cleanup = gen_eh_region (ERT_CLEANUP, outer);
  cleanup->u.cleanup.prev_try = prev_try;
  return cleanup;
}
struct eh_region *
gen_eh_region_try (struct eh_region *outer)
{
  return gen_eh_region (ERT_TRY, outer);
}
struct eh_region *
gen_eh_region_catch (struct eh_region *t, tree type_or_list)
{
  struct eh_region *c, *l;
  tree type_list, type_node;
  type_list = type_or_list;
  if (type_or_list)
    {
      if (((enum tree_code) (type_or_list)->common.code) != TREE_LIST)
 type_list = tree_cons_stat ((tree) ((void *)0),type_or_list,(tree) ((void *)0) );
      type_node = type_list;
      for (; type_node; type_node = ((type_node)->common.chain))
 add_type_for_runtime (((type_node)->list.value1));
    }
  c = gen_eh_region (ERT_CATCH, t->outer);
  c->u.catch.type_list = type_list;
  l = t->u.try.last_catch;
  c->u.catch.prev_catch = l;
  if (l)
    l->u.catch.next_catch = c;
  else
    t->u.try.catch = c;
  t->u.try.last_catch = c;
  return c;
}
struct eh_region *
gen_eh_region_allowed (struct eh_region *outer, tree allowed)
{
  struct eh_region *region = gen_eh_region (ERT_ALLOWED_EXCEPTIONS, outer);
  region->u.allowed.type_list = allowed;
  for (; allowed ; allowed = ((allowed)->common.chain))
    add_type_for_runtime (((allowed)->list.value1));
  return region;
}
struct eh_region *
gen_eh_region_must_not_throw (struct eh_region *outer)
{
  return gen_eh_region (ERT_MUST_NOT_THROW, outer);
}
int
get_eh_region_number (struct eh_region *region)
{
  return region->region_number;
}
unsigned char
get_eh_region_may_contain_throw (struct eh_region *region)
{
  return region->may_contain_throw;
}
tree
get_eh_region_tree_label (struct eh_region *region)
{
  return region->tree_label;
}
void
set_eh_region_tree_label (struct eh_region *region, tree lab)
{
  region->tree_label = lab;
}
void
expand_eh_region_start (void)
{
  struct eh_region *new;
  rtx note;
  if (! doing_eh (0))
    return;
  new = gen_eh_region (ERT_UNKNOWN, cfun->eh->cur_region);
  cfun->eh->cur_region = new;
  note = emit_note (NOTE_INSN_EH_REGION_BEG);
  (((note)->u.fld[4]).rtint) = new->region_number;
}
static struct eh_region *
expand_eh_region_end (void)
{
  struct eh_region *cur_region = cfun->eh->cur_region;
  rtx note;
  note = emit_note (NOTE_INSN_EH_REGION_END);
  (((note)->u.fld[4]).rtint) = cur_region->region_number;
  cfun->eh->cur_region = cur_region->outer;
  return cur_region;
}
void
expand_eh_handler (tree handler)
{
  tree inner = expr_first (handler);
  switch (((enum tree_code) (inner)->common.code))
    {
    case CATCH_EXPR:
      expand_start_all_catch ();
      expand_expr (handler, (const_int_rtx[64]), VOIDmode, 0);
      expand_end_all_catch ();
      break;
    case EH_FILTER_EXPR:
      if ((((handler))->common.static_flag))
 expand_eh_region_end_must_not_throw ((((handler))->exp.operands[1]));
      else
 expand_eh_region_end_allowed ((((handler))->exp.operands[0]),
          (((handler))->exp.operands[1]));
      break;
    default:
      expand_eh_region_end_cleanup (handler);
      break;
    }
}
void
expand_eh_region_end_cleanup (tree handler)
{
  struct eh_region *region;
  tree protect_cleanup_actions;
  rtx around_label;
  rtx data_save[2];
  if (! doing_eh (0))
    return;
  region = expand_eh_region_end ();
  region->type = ERT_CLEANUP;
  region->label = gen_label_rtx ();
  region->u.cleanup.exp = handler;
  region->u.cleanup.prev_try = cfun->eh->try_region;
  around_label = gen_label_rtx ();
  emit_jump (around_label);
  emit_label (region->label);
  if (flag_non_call_exceptions || region->may_contain_throw)
    {
      protect_cleanup_actions
 = (lang_protect_cleanup_actions
    ? (*lang_protect_cleanup_actions) ()
    : (tree) ((void *)0));
      if (protect_cleanup_actions)
 expand_eh_region_start ();
      data_save[0] = gen_reg_rtx (ptr_mode);
      emit_move_insn (data_save[0], get_exception_pointer (cfun));
      data_save[1] = gen_reg_rtx (word_mode);
      emit_move_insn (data_save[1], get_exception_filter (cfun));
      expand_expr (handler, (const_int_rtx[64]), VOIDmode, 0);
      emit_move_insn (cfun->eh->exc_ptr, data_save[0]);
      emit_move_insn (cfun->eh->filter, data_save[1]);
      if (protect_cleanup_actions)
 expand_eh_region_end_must_not_throw (protect_cleanup_actions);
      do_pending_stack_adjust ();
    }
  region->resume
    = emit_jump_insn (gen_rtx_fmt_i (RESX, (VOIDmode), (region->region_number)));
  emit_barrier ();
  emit_label (around_label);
}
void
expand_resx_expr (tree exp)
{
  int region_nr = (((((exp)->exp.operands[0]))->int_cst.int_cst).low);
  struct eh_region *reg = cfun->eh->region_array[region_nr];
  reg->resume = emit_jump_insn (gen_rtx_fmt_i (RESX, (VOIDmode), (region_nr)));
  emit_barrier ();
}
void
expand_start_all_catch (void)
{
  struct eh_region *region;
  if (! doing_eh (1))
    return;
  region = expand_eh_region_end ();
  region->type = ERT_TRY;
  region->u.try.prev_try = cfun->eh->try_region;
  region->u.try.continue_label = gen_label_rtx ();
  cfun->eh->try_region = region;
  emit_jump (region->u.try.continue_label);
}
void
expand_start_catch (tree type_or_list)
{
  struct eh_region *c;
  rtx note;
  if (! doing_eh (0))
    return;
  c = gen_eh_region_catch (cfun->eh->try_region, type_or_list);
  cfun->eh->cur_region = c;
  c->label = gen_label_rtx ();
  emit_label (c->label);
  note = emit_note (NOTE_INSN_EH_REGION_BEG);
  (((note)->u.fld[4]).rtint) = c->region_number;
}
void
expand_end_catch (void)
{
  if (! doing_eh (0))
    return;
  expand_eh_region_end ();
  emit_jump (cfun->eh->try_region->u.try.continue_label);
}
void
expand_end_all_catch (void)
{
  struct eh_region *try_region;
  if (! doing_eh (0))
    return;
  try_region = cfun->eh->try_region;
  cfun->eh->try_region = try_region->u.try.prev_try;
  emit_label (try_region->u.try.continue_label);
}
void
expand_eh_region_end_allowed (tree allowed, tree failure)
{
  struct eh_region *region;
  rtx around_label;
  if (! doing_eh (0))
    return;
  region = expand_eh_region_end ();
  region->type = ERT_ALLOWED_EXCEPTIONS;
  region->u.allowed.type_list = allowed;
  region->label = gen_label_rtx ();
  for (; allowed ; allowed = ((allowed)->common.chain))
    add_type_for_runtime (((allowed)->list.value1));
  around_label = gen_label_rtx ();
  emit_jump (around_label);
  emit_label (region->label);
  expand_expr (failure, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
  do_pending_stack_adjust ();
  emit_label (around_label);
}
void
expand_eh_region_end_must_not_throw (tree failure)
{
  struct eh_region *region;
  rtx around_label;
  if (! doing_eh (0))
    return;
  region = expand_eh_region_end ();
  region->type = ERT_MUST_NOT_THROW;
  region->label = gen_label_rtx ();
  around_label = gen_label_rtx ();
  emit_jump (around_label);
  emit_label (region->label);
  expand_expr (failure, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
  emit_label (around_label);
}
void
expand_eh_region_end_throw (tree type)
{
  struct eh_region *region;
  if (! doing_eh (0))
    return;
  region = expand_eh_region_end ();
  region->type = ERT_THROW;
  region->u.throw.type = type;
}
void
expand_eh_region_end_fixup (tree handler)
{
  struct eh_region *fixup;
  if (! doing_eh (0))
    return;
  fixup = expand_eh_region_end ();
  fixup->type = ERT_FIXUP;
  fixup->u.fixup.cleanup_exp = handler;
}
void
note_eh_region_may_contain_throw (struct eh_region *region)
{
  while (region && !region->may_contain_throw)
    {
      region->may_contain_throw = 1;
      region = region->outer;
    }
}
void
note_current_region_may_contain_throw (void)
{
  note_eh_region_may_contain_throw (cfun->eh->cur_region);
}
rtx
get_exception_pointer (struct function *fun)
{
  rtx exc_ptr = fun->eh->exc_ptr;
  if (fun == cfun && ! exc_ptr)
    {
      exc_ptr = gen_reg_rtx (ptr_mode);
      fun->eh->exc_ptr = exc_ptr;
    }
  return exc_ptr;
}
rtx
get_exception_filter (struct function *fun)
{
  rtx filter = fun->eh->filter;
  if (fun == cfun && ! filter)
    {
      filter = gen_reg_rtx (word_mode);
      fun->eh->filter = filter;
    }
  return filter;
}
void
collect_eh_region_array (void)
{
  struct eh_region **array, *i;
  i = cfun->eh->region_tree;
  if (! i)
    return;
  array = ggc_alloc_cleared_stat ((cfun->eh->last_region_number + 1) * sizeof (*array) )
                          ;
  cfun->eh->region_array = array;
  while (1)
    {
      array[i->region_number] = i;
      if (i->inner)
 i = i->inner;
      else if (i->next_peer)
 i = i->next_peer;
      else
 {
   do {
     i = i->outer;
     if (i == ((void *)0))
       return;
   } while (i->next_peer == ((void *)0));
   i = i->next_peer;
 }
    }
}
static void
resolve_one_fixup_region (struct eh_region *fixup)
{
  struct eh_region *cleanup, *real;
  int j, n;
  n = cfun->eh->last_region_number;
  cleanup = 0;
  for (j = 1; j <= n; ++j)
    {
      cleanup = cfun->eh->region_array[j];
      if (cleanup && cleanup->type == ERT_CLEANUP
   && cleanup->u.cleanup.exp == fixup->u.fixup.cleanup_exp)
 break;
    }
  if (j > n)
    abort ();
  real = cleanup->outer;
  if (real && real->type == ERT_FIXUP)
    {
      if (!real->u.fixup.resolved)
 resolve_one_fixup_region (real);
      real = real->u.fixup.real_region;
    }
  fixup->u.fixup.real_region = real;
  fixup->u.fixup.resolved = 1;
}
static void
resolve_fixup_regions (void)
{
  int i, n = cfun->eh->last_region_number;
  for (i = 1; i <= n; ++i)
    {
      struct eh_region *fixup = cfun->eh->region_array[i];
      if (!fixup || fixup->type != ERT_FIXUP || fixup->u.fixup.resolved)
 continue;
      resolve_one_fixup_region (fixup);
    }
}
static void
remove_fixup_regions (void)
{
  int i;
  rtx insn, note;
  struct eh_region *fixup;
  for (insn = get_insns(); insn ; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
 && (note = find_reg_note (insn, REG_EH_REGION, ((void *)0)))
 && (((((note)->u.fld[0]).rtx1))->u.hwint[0]) > 0
 && (fixup = cfun->eh->region_array[(((((note)->u.fld[0]).rtx1))->u.hwint[0])])
 && fixup->type == ERT_FIXUP)
      {
 if (fixup->u.fixup.real_region)
   (((note)->u.fld[0]).rtx1) = gen_rtx_CONST_INT (VOIDmode, (long) (fixup->u.fixup.real_region->region_number));
 else
   remove_note (insn, note);
      }
  for (i = cfun->eh->last_region_number; i > 0; --i)
    {
      fixup = cfun->eh->region_array[i];
      if (! fixup)
 continue;
      if (fixup->type == ERT_CLEANUP)
 fixup->u.cleanup.exp = (tree) ((void *)0);
      if (fixup->type != ERT_FIXUP)
 continue;
      if (fixup->inner)
 {
   struct eh_region *parent, *p, **pp;
   parent = fixup->u.fixup.real_region;
   for (p = fixup->inner; ; p = p->next_peer)
     {
       p->outer = parent;
       if (! p->next_peer)
  break;
     }
   if (parent)
     pp = &parent->inner;
   else
     pp = &cfun->eh->region_tree;
   p->next_peer = *pp;
   *pp = fixup->inner;
   fixup->inner = ((void *)0);
 }
      remove_eh_handler (fixup);
    }
}
static void
remove_unreachable_regions (rtx insns)
{
  int i, *uid_region_num;
  unsigned char *reachable;
  struct eh_region *r;
  rtx insn;
  uid_region_num = xcalloc (get_max_uid (), sizeof(int));
  reachable = xcalloc (cfun->eh->last_region_number + 1, sizeof(unsigned char));
  for (i = cfun->eh->last_region_number; i > 0; --i)
    {
      r = cfun->eh->region_array[i];
      if (!r || r->region_number != i)
 continue;
      if (r->resume)
 {
   if (uid_region_num[(((r->resume)->u.fld[0]).rtint)])
     abort ();
   uid_region_num[(((r->resume)->u.fld[0]).rtint)] = i;
 }
      if (r->label)
 {
   if (uid_region_num[(((r->label)->u.fld[0]).rtint)])
     abort ();
   uid_region_num[(((r->label)->u.fld[0]).rtint)] = i;
 }
    }
  for (insn = insns; insn; insn = (((insn)->u.fld[2]).rtx1))
    reachable[uid_region_num[(((insn)->u.fld[0]).rtint)]] = 1;
  for (i = cfun->eh->last_region_number; i > 0; --i)
    {
      r = cfun->eh->region_array[i];
      if (r && r->region_number == i && !reachable[i])
 {
   unsigned char kill_it = 1;
   switch (r->type)
     {
     case ERT_THROW:
       if (r->outer && reachable[r->outer->region_number])
  kill_it = 0;
       break;
     case ERT_MUST_NOT_THROW:
       kill_it = 0;
       break;
     case ERT_TRY:
       {
  struct eh_region *c;
  for (c = r->u.try.catch; c ; c = c->u.catch.next_catch)
    if (reachable[c->region_number])
      {
        kill_it = 0;
        break;
      }
  break;
       }
     default:
       break;
     }
   if (kill_it)
     remove_eh_handler (r);
 }
    }
  free (reachable);
  free (uid_region_num);
}
static void
convert_from_eh_region_ranges_1 (rtx *pinsns, int *orig_sp, int cur)
{
  int *sp = orig_sp;
  rtx insn, next;
  for (insn = *pinsns; insn ; insn = next)
    {
      next = (((insn)->u.fld[2]).rtx1);
      if (((enum rtx_code) (insn)->code) == NOTE)
 {
   int kind = (((insn)->u.fld[5]).rtint);
   if (kind == NOTE_INSN_EH_REGION_BEG
       || kind == NOTE_INSN_EH_REGION_END)
     {
       if (kind == NOTE_INSN_EH_REGION_BEG)
  {
    struct eh_region *r;
    *sp++ = cur;
    cur = (((insn)->u.fld[4]).rtint);
    r = cfun->eh->region_array[cur];
    if (r->type == ERT_FIXUP)
      {
        r = r->u.fixup.real_region;
        cur = r ? r->region_number : 0;
      }
    else if (r->type == ERT_CATCH)
      {
        r = r->outer;
        cur = r ? r->region_number : 0;
      }
  }
       else
  cur = *--sp;
       if (insn == *pinsns)
  *pinsns = next;
       remove_insn (insn);
       continue;
     }
 }
      else if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   if (cur > 0
       && ! find_reg_note (insn, REG_EH_REGION, (rtx) 0)
       && (((enum rtx_code) (insn)->code) == CALL_INSN
    || (flag_non_call_exceptions
        && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != CLOBBER
        && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE
        && may_trap_p ((((insn)->u.fld[5]).rtx1)))))
     {
       (((insn)->u.fld[8]).rtx1) = alloc_EXPR_LIST (REG_EH_REGION, gen_rtx_CONST_INT (VOIDmode, (long) (cur)),
        (((insn)->u.fld[8]).rtx1));
     }
 }
    }
  if (sp != orig_sp)
    abort ();
}
static void
collect_rtl_labels_from_trees (void)
{
  int i, n = cfun->eh->last_region_number;
  for (i = 1; i <= n; ++i)
    {
      struct eh_region *reg = cfun->eh->region_array[i];
      if (reg && reg->tree_label)
 reg->label = (((reg->tree_label)->decl.rtl != ((void *)0)) ? ((reg->tree_label)->decl.rtl ? (reg->tree_label)->decl.rtl : (make_decl_rtl (reg->tree_label, ((void *)0)), (reg->tree_label)->decl.rtl)) : ((void *)0));
    }
}
void
convert_from_eh_region_ranges (void)
{
  rtx insns = get_insns ();
  if (cfun->eh->region_array)
    {
      collect_rtl_labels_from_trees ();
    }
  else
    {
      int *stack;
      collect_eh_region_array ();
      resolve_fixup_regions ();
      stack = xmalloc (sizeof (int) * (cfun->eh->last_region_number + 1));
      convert_from_eh_region_ranges_1 (&insns, stack, 0);
      free (stack);
      remove_fixup_regions ();
    }
  remove_unreachable_regions (insns);
}
static void
add_ehl_entry (rtx label, struct eh_region *region)
{
  struct ehl_map_entry **slot, *entry;
  (((label))->in_struct) = 1;
  entry = ggc_alloc_stat (sizeof (*entry) );
  entry->label = label;
  entry->region = region;
  slot = (struct ehl_map_entry **)
    htab_find_slot (cfun->eh->exception_handler_label_map, entry, INSERT);
  if (*slot && !cfun->eh->built_landing_pads)
    abort ();
  *slot = entry;
}
void
find_exception_handler_labels (void)
{
  int i;
  if (cfun->eh->exception_handler_label_map)
    htab_empty (cfun->eh->exception_handler_label_map);
  else
    {
      cfun->eh->exception_handler_label_map
        = htab_create_alloc (cfun->eh->last_region_number * 3 / 2, ehl_hash, ehl_eq, ((void *)0), ggc_calloc, ((void *)0))
                             ;
    }
  if (cfun->eh->region_tree == ((void *)0))
    return;
  for (i = cfun->eh->last_region_number; i > 0; --i)
    {
      struct eh_region *region = cfun->eh->region_array[i];
      rtx lab;
      if (! region || region->region_number != i)
 continue;
      if (cfun->eh->built_landing_pads)
 lab = region->landing_pad;
      else
 lab = region->label;
      if (lab)
 add_ehl_entry (lab, region);
    }
  if (0 && ! cfun->eh->built_landing_pads)
    add_ehl_entry ((cfun->x_return_label), ((void *)0));
}
unsigned char
current_function_has_exception_handlers (void)
{
  int i;
  for (i = cfun->eh->last_region_number; i > 0; --i)
    {
      struct eh_region *region = cfun->eh->region_array[i];
      if (! region || region->region_number != i)
 continue;
      if (region->type != ERT_THROW)
 return 1;
    }
  return 0;
}
static struct eh_region *
duplicate_eh_region_1 (struct eh_region *o, struct inline_remap *map)
{
  struct eh_region *n = ggc_alloc_cleared_stat (sizeof (struct eh_region) );
  n->region_number = o->region_number + cfun->eh->last_region_number;
  n->type = o->type;
  switch (n->type)
    {
    case ERT_CLEANUP:
    case ERT_MUST_NOT_THROW:
      break;
    case ERT_TRY:
      if (o->u.try.continue_label)
 n->u.try.continue_label
   = get_label_from_map (map,
    (((o->u.try.continue_label)->u.fld[6]).rtint));
      break;
    case ERT_CATCH:
      n->u.catch.type_list = o->u.catch.type_list;
      break;
    case ERT_ALLOWED_EXCEPTIONS:
      n->u.allowed.type_list = o->u.allowed.type_list;
      break;
    case ERT_THROW:
      n->u.throw.type = o->u.throw.type;
    default:
      abort ();
    }
  if (o->label)
    n->label = get_label_from_map (map, (((o->label)->u.fld[6]).rtint));
  if (o->resume)
    {
      n->resume = map->insn_map[(((o->resume)->u.fld[0]).rtint)];
      if (n->resume == ((void *)0))
 abort ();
    }
  return n;
}
static void
duplicate_eh_region_2 (struct eh_region *o, struct eh_region **n_array)
{
  struct eh_region *n = n_array[o->region_number];
  switch (n->type)
    {
    case ERT_TRY:
      n->u.try.catch = n_array[o->u.try.catch->region_number];
      n->u.try.last_catch = n_array[o->u.try.last_catch->region_number];
      break;
    case ERT_CATCH:
      if (o->u.catch.next_catch)
 n->u.catch.next_catch = n_array[o->u.catch.next_catch->region_number];
      if (o->u.catch.prev_catch)
 n->u.catch.prev_catch = n_array[o->u.catch.prev_catch->region_number];
      break;
    default:
      break;
    }
  if (o->outer)
    n->outer = n_array[o->outer->region_number];
  if (o->inner)
    n->inner = n_array[o->inner->region_number];
  if (o->next_peer)
    n->next_peer = n_array[o->next_peer->region_number];
}
int
duplicate_eh_regions (struct function *ifun, struct inline_remap *map)
{
  int ifun_last_region_number = ifun->eh->last_region_number;
  struct eh_region **n_array, *root, *cur;
  int i;
  if (ifun_last_region_number == 0)
    return 0;
  n_array = xcalloc (ifun_last_region_number + 1, sizeof (*n_array));
  for (i = 1; i <= ifun_last_region_number; ++i)
    {
      cur = ifun->eh->region_array[i];
      if (!cur || cur->region_number != i)
 continue;
      n_array[i] = duplicate_eh_region_1 (cur, map);
    }
  for (i = 1; i <= ifun_last_region_number; ++i)
    {
      cur = ifun->eh->region_array[i];
      if (!cur || cur->region_number != i)
 continue;
      duplicate_eh_region_2 (cur, n_array);
    }
  root = n_array[ifun->eh->region_tree->region_number];
  cur = cfun->eh->cur_region;
  if (cur)
    {
      struct eh_region *p = cur->inner;
      if (p)
 {
   while (p->next_peer)
     p = p->next_peer;
   p->next_peer = root;
 }
      else
 cur->inner = root;
      for (i = 1; i <= ifun_last_region_number; ++i)
 if (n_array[i] && n_array[i]->outer == ((void *)0))
   n_array[i]->outer = cur;
    }
  else
    {
      struct eh_region *p = cfun->eh->region_tree;
      if (p)
 {
   while (p->next_peer)
     p = p->next_peer;
   p->next_peer = root;
 }
      else
 cfun->eh->region_tree = root;
    }
  free (n_array);
  i = cfun->eh->last_region_number;
  cfun->eh->last_region_number = i + ifun_last_region_number;
  return i;
}
static int
t2r_eq (const void *pentry, const void *pdata)
{
  tree entry = (tree) pentry;
  tree data = (tree) pdata;
  return ((entry)->list.purpose) == data;
}
static hashval_t
t2r_hash (const void *pentry)
{
  tree entry = (tree) pentry;
  return ((size_t) (((entry)->list.purpose)) & 0777777);
}
static void
add_type_for_runtime (tree type)
{
  tree *slot;
  slot = (tree *) htab_find_slot_with_hash (type_to_runtime_map, type,
         ((size_t) (type) & 0777777), INSERT);
  if (*slot == ((void *)0))
    {
      tree runtime = (*lang_eh_runtime_type) (type);
      *slot = tree_cons_stat (type,runtime,(tree) ((void *)0) );
    }
}
static tree
lookup_type_for_runtime (tree type)
{
  tree *slot;
  slot = (tree *) htab_find_slot_with_hash (type_to_runtime_map, type,
         ((size_t) (type) & 0777777), NO_INSERT);
  return ((*slot)->list.value1);
}
struct ttypes_filter
{
  tree t;
  int filter;
};
static int
ttypes_filter_eq (const void *pentry, const void *pdata)
{
  const struct ttypes_filter *entry = (const struct ttypes_filter *) pentry;
  tree data = (tree) pdata;
  return entry->t == data;
}
static hashval_t
ttypes_filter_hash (const void *pentry)
{
  const struct ttypes_filter *entry = (const struct ttypes_filter *) pentry;
  return ((size_t) (entry->t) & 0777777);
}
static int
ehspec_filter_eq (const void *pentry, const void *pdata)
{
  const struct ttypes_filter *entry = (const struct ttypes_filter *) pentry;
  const struct ttypes_filter *data = (const struct ttypes_filter *) pdata;
  return type_list_equal (entry->t, data->t);
}
static hashval_t
ehspec_filter_hash (const void *pentry)
{
  const struct ttypes_filter *entry = (const struct ttypes_filter *) pentry;
  hashval_t h = 0;
  tree list;
  for (list = entry->t; list ; list = ((list)->common.chain))
    h = (h << 5) + (h >> 27) + ((size_t) (((list)->list.value1)) & 0777777);
  return h;
}
static int
add_ttypes_entry (htab_t ttypes_hash, tree type)
{
  struct ttypes_filter **slot, *n;
  slot = (struct ttypes_filter **)
    htab_find_slot_with_hash (ttypes_hash, type, ((size_t) (type) & 0777777), INSERT);
  if ((n = *slot) == ((void *)0))
    {
      n = xmalloc (sizeof (*n));
      n->t = type;
      n->filter = ((cfun->eh->ttype_data)->elements_used) + 1;
      *slot = n;
      do { if ((cfun->eh->ttype_data)->elements_used >= (cfun->eh->ttype_data)->num_elements) (((cfun->eh->ttype_data)) = varray_grow ((cfun->eh->ttype_data), 2 * (cfun->eh->ttype_data)->num_elements)); (cfun->eh->ttype_data)->data.tree1[(cfun->eh->ttype_data)->elements_used++] = (type); } while (0);
    }
  return n->filter;
}
static int
add_ehspec_entry (htab_t ehspec_hash, htab_t ttypes_hash, tree list)
{
  struct ttypes_filter **slot, *n;
  struct ttypes_filter dummy;
  dummy.t = list;
  slot = (struct ttypes_filter **)
    htab_find_slot (ehspec_hash, &dummy, INSERT);
  if ((n = *slot) == ((void *)0))
    {
      n = xmalloc (sizeof (*n));
      n->t = list;
      n->filter = -(((cfun->eh->ehspec_data)->elements_used) + 1);
      *slot = n;
      for (; list ; list = ((list)->common.chain))
 push_uleb128 (&cfun->eh->ehspec_data,
        add_ttypes_entry (ttypes_hash, ((list)->list.value1)));
      do { if ((cfun->eh->ehspec_data)->elements_used >= (cfun->eh->ehspec_data)->num_elements) (((cfun->eh->ehspec_data)) = varray_grow ((cfun->eh->ehspec_data), 2 * (cfun->eh->ehspec_data)->num_elements)); (cfun->eh->ehspec_data)->data.uc[(cfun->eh->ehspec_data)->elements_used++] = (0); } while (0);
    }
  return n->filter;
}
static void
assign_filter_values (void)
{
  int i;
  htab_t ttypes, ehspec;
  cfun->eh->ttype_data = varray_init (16, VARRAY_DATA_TREE, "ttype_data");
  cfun->eh->ehspec_data = varray_init (64, VARRAY_DATA_UC, "ehspec_data");
  ttypes = htab_create (31, ttypes_filter_hash, ttypes_filter_eq, free);
  ehspec = htab_create (31, ehspec_filter_hash, ehspec_filter_eq, free);
  for (i = cfun->eh->last_region_number; i > 0; --i)
    {
      struct eh_region *r = cfun->eh->region_array[i];
      if (!r || r->region_number != i)
 continue;
      switch (r->type)
 {
 case ERT_CATCH:
   r->u.catch.filter_list = (tree) ((void *)0);
   if (r->u.catch.type_list != ((void *)0))
     {
       tree tp_node = r->u.catch.type_list;
       for (;tp_node; tp_node = ((tp_node)->common.chain))
  {
    int flt = add_ttypes_entry (ttypes, ((tp_node)->list.value1));
    tree flt_node = build_int_2_wide ((unsigned long) (flt), (long) (0));
    r->u.catch.filter_list
      = tree_cons_stat ((tree) ((void *)0),flt_node,r->u.catch.filter_list );
  }
     }
   else
     {
       int flt = add_ttypes_entry (ttypes, ((void *)0));
       tree flt_node = build_int_2_wide ((unsigned long) (flt), (long) (0));
       r->u.catch.filter_list
  = tree_cons_stat ((tree) ((void *)0),flt_node,r->u.catch.filter_list );
     }
   break;
 case ERT_ALLOWED_EXCEPTIONS:
   r->u.allowed.filter
     = add_ehspec_entry (ehspec, ttypes, r->u.allowed.type_list);
   break;
 default:
   break;
 }
    }
  htab_delete (ttypes);
  htab_delete (ehspec);
}
static basic_block
emit_to_new_bb_before (rtx seq, rtx insn)
{
  rtx last;
  basic_block bb;
  edge e;
  for (e = (((insn)->u.fld[3]).bb)->pred; e; e = e->pred_next)
    if (e->flags & 1)
      force_nonfallthru (e);
  last = emit_insn_before (seq, insn);
  if (((enum rtx_code) (last)->code) == BARRIER)
    last = (((last)->u.fld[1]).rtx1);
  bb = create_basic_block (seq, last, (((insn)->u.fld[3]).bb)->prev_bb);
  update_bb_for_insn (bb);
  bb->flags |= 32;
  return bb;
}
static void
build_post_landing_pads (void)
{
  int i;
  for (i = cfun->eh->last_region_number; i > 0; --i)
    {
      struct eh_region *region = cfun->eh->region_array[i];
      rtx seq;
      if (!region || region->region_number != i)
 continue;
      switch (region->type)
 {
 case ERT_TRY:
   region->post_landing_pad = gen_label_rtx ();
   start_sequence ();
   emit_label (region->post_landing_pad);
   {
     struct eh_region *c;
     for (c = region->u.try.catch; c ; c = c->u.catch.next_catch)
       {
  if (c->u.catch.type_list == ((void *)0))
    emit_jump (c->label);
  else
    {
      tree tp_node = c->u.catch.type_list;
      tree flt_node = c->u.catch.filter_list;
      for (; tp_node; )
        {
   emit_cmp_and_jump_insns
     (cfun->eh->filter,
      gen_rtx_CONST_INT (VOIDmode, (long) (tree_low_cst (((flt_node)->list.value1), 0))),
      EQ, (rtx) 0, word_mode, 0, c->label);
   tp_node = ((tp_node)->common.chain);
   flt_node = ((flt_node)->common.chain);
        }
    }
       }
   }
   region->resume
     = emit_jump_insn (gen_rtx_fmt_i (RESX, (VOIDmode), (region->region_number)));
   emit_barrier ();
   seq = get_insns ();
   end_sequence ();
   emit_to_new_bb_before (seq, region->u.try.catch->label);
   break;
 case ERT_ALLOWED_EXCEPTIONS:
   region->post_landing_pad = gen_label_rtx ();
   start_sequence ();
   emit_label (region->post_landing_pad);
   emit_cmp_and_jump_insns (cfun->eh->filter,
       gen_rtx_CONST_INT (VOIDmode, (long) (region->u.allowed.filter)),
       EQ, (rtx) 0, word_mode, 0, region->label);
   region->resume
     = emit_jump_insn (gen_rtx_fmt_i (RESX, (VOIDmode), (region->region_number)));
   emit_barrier ();
   seq = get_insns ();
   end_sequence ();
   emit_to_new_bb_before (seq, region->label);
   break;
 case ERT_CLEANUP:
 case ERT_MUST_NOT_THROW:
   region->post_landing_pad = region->label;
   break;
 case ERT_CATCH:
 case ERT_THROW:
   break;
 default:
   abort ();
 }
    }
}
static void
connect_post_landing_pads (void)
{
  int i;
  for (i = cfun->eh->last_region_number; i > 0; --i)
    {
      struct eh_region *region = cfun->eh->region_array[i];
      struct eh_region *outer;
      rtx seq;
      rtx barrier;
      if (!region || region->region_number != i)
 continue;
      if (! region->resume || (((region->resume))->volatil))
 continue;
      for (outer = region->outer; outer ; outer = outer->outer)
 if (outer->post_landing_pad)
   break;
      start_sequence ();
      if (outer)
 {
   edge e;
   basic_block src, dest;
   emit_jump (outer->post_landing_pad);
   src = (((region->resume)->u.fld[3]).bb);
   dest = (((outer->post_landing_pad)->u.fld[3]).bb);
   while (src->succ)
     remove_edge (src->succ);
   e = make_edge (src, dest, 0);
   e->probability = 10000;
   e->count = src->count;
 }
      else
 {
   emit_library_call ((libfunc_table[LTI_unwind_resume]), LCT_THROW,
        VOIDmode, 1, cfun->eh->exc_ptr, ptr_mode);
   delete_insns_since ((((last_call_insn ())->u.fld[2]).rtx1));
 }
      seq = get_insns ();
      end_sequence ();
      barrier = emit_insn_before (seq, region->resume);
      if (((enum rtx_code) (barrier)->code) != BARRIER)
 abort ();
      delete_insn (barrier);
      delete_insn (region->resume);
      if (region->label == ((void *)0) && region->type == ERT_CLEANUP)
 remove_eh_handler (region);
    }
}
static void
dw2_build_landing_pads (void)
{
  int i;
  unsigned int j;
  for (i = cfun->eh->last_region_number; i > 0; --i)
    {
      struct eh_region *region = cfun->eh->region_array[i];
      rtx seq;
      basic_block bb;
      unsigned char clobbers_hard_regs = 0;
      edge e;
      if (!region || region->region_number != i)
 continue;
      if (region->type != ERT_CLEANUP
   && region->type != ERT_TRY
   && region->type != ERT_ALLOWED_EXCEPTIONS)
 continue;
      start_sequence ();
      region->landing_pad = gen_label_rtx ();
      emit_label (region->landing_pad);
   { }
      for (j = 0; ; ++j)
 {
   unsigned r = ((j) < 2 ? (j) : (~(unsigned int) 0));
   if (r == (~(unsigned int) 0))
     break;
   if (! call_used_regs[r])
     {
       emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_REG ((0 ? DImode : SImode), r))));
       clobbers_hard_regs = 1;
     }
 }
      if (clobbers_hard_regs)
 {
   emit_insn (gen_rtx_fmt_s (ASM_INPUT, (VOIDmode), ("")));
 }
      emit_move_insn (cfun->eh->exc_ptr,
        gen_rtx_REG (ptr_mode, ((0) < 2 ? (0) : (~(unsigned int) 0))));
      emit_move_insn (cfun->eh->filter,
        gen_rtx_REG (word_mode, ((1) < 2 ? (1) : (~(unsigned int) 0))));
      seq = get_insns ();
      end_sequence ();
      bb = emit_to_new_bb_before (seq, region->post_landing_pad);
      e = make_edge (bb, bb->next_bb, 1);
      e->count = bb->count;
      e->probability = 10000;
    }
}
struct sjlj_lp_info
{
  int directly_reachable;
  int action_index;
  int dispatch_index;
  int call_site_index;
};
static unsigned char
sjlj_find_directly_reachable_regions (struct sjlj_lp_info *lp_info)
{
  rtx insn;
  unsigned char found_one = 0;
  for (insn = get_insns (); insn ; insn = (((insn)->u.fld[2]).rtx1))
    {
      struct eh_region *region;
      enum reachable_code rc;
      tree type_thrown;
      rtx note;
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      note = find_reg_note (insn, REG_EH_REGION, (rtx) 0);
      if (!note || (((((note)->u.fld[0]).rtx1))->u.hwint[0]) <= 0)
 continue;
      region = cfun->eh->region_array[(((((note)->u.fld[0]).rtx1))->u.hwint[0])];
      type_thrown = (tree) ((void *)0);
      if (region->type == ERT_THROW)
 {
   type_thrown = region->u.throw.type;
   region = region->outer;
 }
      rc = RNL_NOT_CAUGHT;
      for (; region; region = region->outer)
 {
   rc = reachable_next_level (region, type_thrown, ((void *)0));
   if (rc != RNL_NOT_CAUGHT)
     break;
 }
      if (rc == RNL_MAYBE_CAUGHT || rc == RNL_CAUGHT)
 {
   lp_info[region->region_number].directly_reachable = 1;
   found_one = 1;
 }
    }
  return found_one;
}
static void
sjlj_assign_call_site_values (rtx dispatch_label, struct sjlj_lp_info *lp_info)
{
  htab_t ar_hash;
  int i, index;
  cfun->eh->action_record_data = varray_init (64, VARRAY_DATA_UC, "action_record_data");
  ar_hash = htab_create (31, action_record_hash, action_record_eq, free);
  for (i = cfun->eh->last_region_number; i > 0; --i)
    if (lp_info[i].directly_reachable)
      {
 struct eh_region *r = cfun->eh->region_array[i];
 r->landing_pad = dispatch_label;
 lp_info[i].action_index = collect_one_action_chain (ar_hash, r);
 if (lp_info[i].action_index != -1)
   cfun->uses_eh_lsda = 1;
      }
  htab_delete (ar_hash);
  index = 0;
  for (i = cfun->eh->last_region_number; i > 0; --i)
    if (lp_info[i].directly_reachable)
      lp_info[i].dispatch_index = index++;
  call_site_base = 1;
  for (i = cfun->eh->last_region_number; i > 0; --i)
    if (lp_info[i].directly_reachable)
      {
 int action = lp_info[i].action_index;
 if (action == -2)
   index = 0;
 else if (action == -1)
   index = -1;
 else
   index = add_call_site (gen_rtx_CONST_INT (VOIDmode, (long) (lp_info[i].dispatch_index)), action);
 lp_info[i].call_site_index = index;
      }
}
static void
sjlj_mark_call_sites (struct sjlj_lp_info *lp_info)
{
  int last_call_site = -2;
  rtx insn, mem;
  for (insn = get_insns (); insn ; insn = (((insn)->u.fld[2]).rtx1))
    {
      struct eh_region *region;
      int this_call_site;
      rtx note, before, p;
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 last_call_site = -2;
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      note = find_reg_note (insn, REG_EH_REGION, (rtx) 0);
      if (!note)
 {
   if (((enum rtx_code) (insn)->code) == CALL_INSN
       || (flag_non_call_exceptions
    && may_trap_p ((((insn)->u.fld[5]).rtx1))))
     this_call_site = -1;
   else
     continue;
 }
      else
 {
   if ((((((note)->u.fld[0]).rtx1))->u.hwint[0]) <= 0)
     continue;
   region = cfun->eh->region_array[(((((note)->u.fld[0]).rtx1))->u.hwint[0])];
   this_call_site = lp_info[region->region_number].call_site_index;
 }
      if (this_call_site == last_call_site)
 continue;
      before = insn;
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 before = find_first_parameter_load (insn, (rtx) 0);
      start_sequence ();
      mem = adjust_address_1 (cfun->eh->sjlj_fc, ((integer_types[itk_int])->type.mode), sjlj_fc_call_site_ofs, 1, 1)
                             ;
      emit_move_insn (mem, gen_rtx_CONST_INT (VOIDmode, (long) (this_call_site)));
      p = get_insns ();
      end_sequence ();
      emit_insn_before (p, before);
      last_call_site = this_call_site;
    }
}
static void
sjlj_emit_function_enter (rtx dispatch_label)
{
  rtx fn_begin, fc, mem, seq;
  fc = cfun->eh->sjlj_fc;
  start_sequence ();
  assemble_external_libcall ((libfunc_table[LTI_eh_personality]));
  mem = adjust_address_1 (fc, (0 ? DImode : SImode), sjlj_fc_personality_ofs, 1, 1);
  emit_move_insn (mem, (libfunc_table[LTI_eh_personality]));
  mem = adjust_address_1 (fc, (0 ? DImode : SImode), sjlj_fc_lsda_ofs, 1, 1);
  if (cfun->uses_eh_lsda)
    {
      char buf[20];
      rtx sym;
      do { sprintf (buf, "*.%s%u", "LLSDA", (unsigned) ((cfun->funcdef_no))); } while (0);
      sym = gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (ggc_alloc_string((buf), -1)));
      ((((sym))->u.fld[1]).rtint) = (1 << 1);
      emit_move_insn (mem, sym);
    }
  else
    emit_move_insn (mem, (const_int_rtx[64]));
  expand_builtin_setjmp_setup (plus_constant_wide (((((fc)->u.fld[0]).rtx1)), (long) (sjlj_fc_jbuf_ofs)),
          dispatch_label);
  emit_library_call ((libfunc_table[LTI_unwind_sjlj_register]), LCT_NORMAL, VOIDmode,
       1, (((fc)->u.fld[0]).rtx1), (0 ? DImode : SImode));
  seq = get_insns ();
  end_sequence ();
  for (fn_begin = get_insns (); ; fn_begin = (((fn_begin)->u.fld[2]).rtx1))
    if (((enum rtx_code) (fn_begin)->code) == NOTE
 && ((((fn_begin)->u.fld[5]).rtint) == NOTE_INSN_FUNCTION_BEG
     || (((fn_begin)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK))
      break;
  if ((((fn_begin)->u.fld[5]).rtint) == NOTE_INSN_FUNCTION_BEG)
    insert_insn_on_edge (seq, ENTRY_BLOCK_PTR->succ);
  else
    {
      rtx last = (ENTRY_BLOCK_PTR->succ->dest)->end_;
      for (; ; fn_begin = (((fn_begin)->u.fld[2]).rtx1))
 if ((((enum rtx_code) (fn_begin)->code) == NOTE
      && (((fn_begin)->u.fld[5]).rtint) == NOTE_INSN_FUNCTION_BEG)
     || fn_begin == last)
   break;
      emit_insn_after (seq, fn_begin);
    }
}
void
sjlj_emit_function_exit_after (rtx after)
{
  cfun->eh->sjlj_exit_after = after;
}
static void
sjlj_emit_function_exit (void)
{
  rtx seq;
  edge e;
  start_sequence ();
  emit_library_call ((libfunc_table[LTI_unwind_sjlj_unregister]), LCT_NORMAL, VOIDmode,
       1, (((cfun->eh->sjlj_fc)->u.fld[0]).rtx1), (0 ? DImode : SImode));
  seq = get_insns ();
  end_sequence ();
  for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
    if (e->flags & 1)
      break;
  if (e)
    {
      rtx insn;
      if (e->src->next_bb != EXIT_BLOCK_PTR)
 abort ();
      for (insn = ((((e->src)->end_)->u.fld[2]).rtx1); insn; insn = (((insn)->u.fld[2]).rtx1))
 if (insn == cfun->eh->sjlj_exit_after)
   break;
      if (insn)
 insert_insn_on_edge (seq, e);
      else
 {
   insn = cfun->eh->sjlj_exit_after;
   if (((enum rtx_code) (insn)->code) == CODE_LABEL)
     insn = (((insn)->u.fld[2]).rtx1);
   emit_insn_after (seq, insn);
 }
    }
}
static void
sjlj_emit_dispatch_table (rtx dispatch_label, struct sjlj_lp_info *lp_info)
{
  int i, first_reachable;
  rtx mem, dispatch, seq, fc;
  rtx before;
  basic_block bb;
  edge e;
  fc = cfun->eh->sjlj_fc;
  start_sequence ();
  emit_label (dispatch_label);
  expand_builtin_setjmp_receiver (dispatch_label);
  mem = adjust_address_1 (fc, ((integer_types[itk_int])->type.mode), sjlj_fc_call_site_ofs, 1, 1)
                         ;
  dispatch = copy_to_reg (mem);
  mem = adjust_address_1 (fc, word_mode, sjlj_fc_data_ofs, 1, 1);
  if (word_mode != ptr_mode)
    {
      mem = convert_to_mode (ptr_mode, mem, 0);
    }
  emit_move_insn (cfun->eh->exc_ptr, mem);
  mem = adjust_address_1 (fc, word_mode, sjlj_fc_data_ofs + (0 ? 8 : 4), 1, 1);
  emit_move_insn (cfun->eh->filter, mem);
  first_reachable = 0;
  for (i = cfun->eh->last_region_number; i > 0; --i)
    {
      if (! lp_info[i].directly_reachable)
 continue;
      if (! first_reachable)
 {
   first_reachable = i;
   continue;
 }
      emit_cmp_and_jump_insns (dispatch, gen_rtx_CONST_INT (VOIDmode, (long) (lp_info[i].dispatch_index)),
          EQ, (rtx) 0, ((integer_types[itk_int])->type.mode), 0,
          cfun->eh->region_array[i]->post_landing_pad);
    }
  seq = get_insns ();
  end_sequence ();
  before = cfun->eh->region_array[first_reachable]->post_landing_pad;
  bb = emit_to_new_bb_before (seq, before);
  e = make_edge (bb, bb->next_bb, 1);
  e->count = bb->count;
  e->probability = 10000;
}
static void
sjlj_build_landing_pads (void)
{
  struct sjlj_lp_info *lp_info;
  lp_info = xcalloc (cfun->eh->last_region_number + 1,
       sizeof (struct sjlj_lp_info));
  if (sjlj_find_directly_reachable_regions (lp_info))
    {
      rtx dispatch_label = gen_label_rtx ();
      cfun->eh->sjlj_fc
 = assign_stack_local (((sjlj_fc_type_node)->type.mode),
         int_size_in_bytes (sjlj_fc_type_node),
         ((sjlj_fc_type_node)->type.align));
      sjlj_assign_call_site_values (dispatch_label, lp_info);
      sjlj_mark_call_sites (lp_info);
      sjlj_emit_function_enter (dispatch_label);
      sjlj_emit_dispatch_table (dispatch_label, lp_info);
      sjlj_emit_function_exit ();
    }
  free (lp_info);
}
void
finish_eh_generation (void)
{
  basic_block bb;
  if (cfun->eh->region_tree == ((void *)0))
    return;
  cleanup_cfg (8 | 64);
  get_exception_pointer (cfun);
  get_exception_filter (cfun);
  assign_filter_values ();
  build_post_landing_pads ();
  connect_post_landing_pads ();
  if (0)
    sjlj_build_landing_pads ();
  else
    dw2_build_landing_pads ();
  cfun->eh->built_landing_pads = 1;
  find_exception_handler_labels ();
  break_superblocks ();
  if (0)
    commit_edge_insertions ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e, next;
      unsigned char eh = 0;
      for (e = bb->succ; e; e = next)
 {
   next = e->succ_next;
   if (e->flags & 8)
     {
       remove_edge (e);
       eh = 1;
     }
 }
      if (eh)
 rtl_make_eh_edge (((void *)0), bb, (bb)->end_);
    }
  cleanup_cfg (8 | 64);
}
static hashval_t
ehl_hash (const void *pentry)
{
  struct ehl_map_entry *entry = (struct ehl_map_entry *) pentry;
  const hashval_t scaled_golden_ratio = 0x9e3779b9;
  return (((entry->label)->u.fld[6]).rtint) * scaled_golden_ratio;
}
static int
ehl_eq (const void *pentry, const void *pdata)
{
  struct ehl_map_entry *entry = (struct ehl_map_entry *) pentry;
  struct ehl_map_entry *data = (struct ehl_map_entry *) pdata;
  return entry->label == data->label;
}
static void
remove_exception_handler_label (rtx label)
{
  struct ehl_map_entry **slot, tmp;
  if (cfun->eh->exception_handler_label_map == ((void *)0))
    return;
  tmp.label = label;
  slot = (struct ehl_map_entry **)
    htab_find_slot (cfun->eh->exception_handler_label_map, &tmp, NO_INSERT);
  if (! slot)
    abort ();
  htab_clear_slot (cfun->eh->exception_handler_label_map, (void **) slot);
}
static void
remove_eh_handler (struct eh_region *region)
{
  struct eh_region **pp, **pp_start, *p, *outer, *inner;
  rtx lab;
  outer = region->outer;
  cfun->eh->region_array[region->region_number] = outer;
  if (region->aka)
    {
      int i;
      do { bitmap_element *ptr_ = (region->aka)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { cfun->eh->region_array[i] = outer; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                        ;
    }
  if (outer)
    {
      if (!outer->aka)
        outer->aka = bitmap_initialize (((void *)0), 0);
      if (region->aka)
 bitmap_operation (outer->aka, outer->aka, region->aka, BITMAP_IOR);
      bitmap_set_bit (outer->aka, region->region_number);
    }
  if (cfun->eh->built_landing_pads)
    lab = region->landing_pad;
  else
    lab = region->label;
  if (lab)
    remove_exception_handler_label (lab);
  if (outer)
    pp_start = &outer->inner;
  else
    pp_start = &cfun->eh->region_tree;
  for (pp = pp_start, p = *pp; p != region; pp = &p->next_peer, p = *pp)
    continue;
  *pp = region->next_peer;
  inner = region->inner;
  if (inner)
    {
      for (p = inner; p->next_peer ; p = p->next_peer)
 p->outer = outer;
      p->outer = outer;
      p->next_peer = *pp_start;
      *pp_start = inner;
    }
  if (region->type == ERT_CATCH)
    {
      struct eh_region *try, *next, *prev;
      for (try = region->next_peer;
    try->type == ERT_CATCH;
    try = try->next_peer)
 continue;
      if (try->type != ERT_TRY)
 abort ();
      next = region->u.catch.next_catch;
      prev = region->u.catch.prev_catch;
      if (next)
 next->u.catch.prev_catch = prev;
      else
 try->u.try.last_catch = prev;
      if (prev)
 prev->u.catch.next_catch = next;
      else
 {
   try->u.try.catch = next;
   if (! next)
     remove_eh_handler (try);
 }
    }
}
void
maybe_remove_eh_handler (rtx label)
{
  struct ehl_map_entry **slot, tmp;
  struct eh_region *region;
  if (cfun->eh->built_landing_pads)
    return;
  tmp.label = label;
  slot = (struct ehl_map_entry **)
    htab_find_slot (cfun->eh->exception_handler_label_map, &tmp, NO_INSERT);
  if (! slot)
    return;
  region = (*slot)->region;
  if (! region)
    return;
  if (region->type == ERT_MUST_NOT_THROW)
    {
      htab_clear_slot (cfun->eh->exception_handler_label_map, (void **) slot);
      region->label = (rtx) 0;
    }
  else
    remove_eh_handler (region);
}
void
for_each_eh_label (void (*callback) (rtx))
{
  htab_traverse (cfun->eh->exception_handler_label_map, for_each_eh_label_1,
   (void *) &callback);
}
static int
for_each_eh_label_1 (void **pentry, void *data)
{
  struct ehl_map_entry *entry = *(struct ehl_map_entry **)pentry;
  void (*callback) (rtx) = *(void (**) (rtx)) data;
  (*callback) (entry->label);
  return 1;
}
void
for_each_eh_region (void (*callback) (struct eh_region *))
{
  int i, n = cfun->eh->last_region_number;
  for (i = 1; i <= n; ++i)
    {
      struct eh_region *region = cfun->eh->region_array[i];
      if (region)
 (*callback) (region);
    }
}
struct reachable_info
{
  tree types_caught;
  tree types_allowed;
  void (*callback) (struct eh_region *, void *);
  void *callback_data;
  unsigned char saw_any_handlers;
};
int
check_handled (tree handled, tree type)
{
  tree t;
  if (! lang_eh_type_covers)
    {
      for (t = handled; t ; t = ((t)->common.chain))
 if (((t)->list.value1) == type)
   return 1;
    }
  else
    {
      for (t = handled; t ; t = ((t)->common.chain))
 if ((*lang_eh_type_covers) (((t)->list.value1), type))
   return 1;
    }
  return 0;
}
static void
add_reachable_handler (struct reachable_info *info,
         struct eh_region *lp_region, struct eh_region *region)
{
  if (! info)
    return;
  info->saw_any_handlers = 1;
  if (cfun->eh->built_landing_pads)
    info->callback (lp_region, info->callback_data);
  else
    info->callback (region, info->callback_data);
}
static enum reachable_code
reachable_next_level (struct eh_region *region, tree type_thrown,
        struct reachable_info *info)
{
  switch (region->type)
    {
    case ERT_CLEANUP:
      add_reachable_handler (info, region, region);
      return RNL_MAYBE_CAUGHT;
    case ERT_TRY:
      {
 struct eh_region *c;
 enum reachable_code ret = RNL_NOT_CAUGHT;
 for (c = region->u.try.catch; c ; c = c->u.catch.next_catch)
   {
     if (c->u.catch.type_list == ((void *)0))
       {
  add_reachable_handler (info, region, c);
  return RNL_CAUGHT;
       }
     if (type_thrown)
       {
  tree tp_node = c->u.catch.type_list;
  for (; tp_node; tp_node = ((tp_node)->common.chain))
    {
      tree type = ((tp_node)->list.value1);
      if (type == type_thrown
   || (lang_eh_type_covers
       && (*lang_eh_type_covers) (type, type_thrown)))
        {
   add_reachable_handler (info, region, c);
   return RNL_CAUGHT;
        }
    }
  if (lang_eh_type_covers)
    return RNL_NOT_CAUGHT;
       }
     if (! info)
       ret = RNL_MAYBE_CAUGHT;
     else
       {
  tree tp_node = c->u.catch.type_list;
  unsigned char maybe_reachable = 0;
  for (; tp_node; tp_node = ((tp_node)->common.chain))
    {
      tree type = ((tp_node)->list.value1);
      if (! check_handled (info->types_caught, type))
        {
   info->types_caught
     = tree_cons_stat (((void *)0),type,info->types_caught );
   maybe_reachable = 1;
        }
    }
  if (maybe_reachable)
    {
      add_reachable_handler (info, region, c);
      ret = RNL_MAYBE_CAUGHT;
    }
       }
   }
 return ret;
      }
    case ERT_ALLOWED_EXCEPTIONS:
      if (region->u.allowed.type_list == (tree) ((void *)0))
 {
   add_reachable_handler (info, region, region);
   return RNL_CAUGHT;
 }
      if (info)
 info->types_allowed = tree_cons_stat ((tree) ((void *)0),region->u.allowed.type_list,info->types_allowed )
                          ;
      if (type_thrown && lang_eh_type_covers)
 {
   if (check_handled (region->u.allowed.type_list, type_thrown))
     return RNL_NOT_CAUGHT;
   else
     {
       add_reachable_handler (info, region, region);
       return RNL_CAUGHT;
     }
 }
      add_reachable_handler (info, region, region);
      return RNL_MAYBE_CAUGHT;
    case ERT_CATCH:
      return RNL_NOT_CAUGHT;
    case ERT_MUST_NOT_THROW:
      if (info && info->saw_any_handlers)
 {
   add_reachable_handler (info, region, region);
   return RNL_CAUGHT;
 }
      else
 return RNL_BLOCKED;
    case ERT_THROW:
    case ERT_FIXUP:
    case ERT_UNKNOWN:
      break;
    }
  abort ();
}
void
foreach_reachable_handler (int region_number, unsigned char is_resx,
      void (*callback) (struct eh_region *, void *),
      void *callback_data)
{
  struct reachable_info info;
  struct eh_region *region;
  tree type_thrown;
  memset (&info, 0, sizeof (info));
  info.callback = callback;
  info.callback_data = callback_data;
  region = cfun->eh->region_array[region_number];
  type_thrown = (tree) ((void *)0);
  if (is_resx)
    {
      if (region == ((void *)0))
 return;
      region = region->outer;
    }
  else if (region->type == ERT_THROW)
    {
      type_thrown = region->u.throw.type;
      region = region->outer;
    }
  while (region)
    {
      if (reachable_next_level (region, type_thrown, &info) >= RNL_CAUGHT)
 break;
      if (region->type == ERT_CLEANUP)
 region = region->u.cleanup.prev_try;
      else
 region = region->outer;
    }
}
static void
arh_to_landing_pad (struct eh_region *region, void *data)
{
  rtx *p_handlers = data;
  if (! *p_handlers)
    *p_handlers = alloc_INSN_LIST (region->landing_pad, (rtx) 0);
}
static void
arh_to_label (struct eh_region *region, void *data)
{
  rtx *p_handlers = data;
  *p_handlers = alloc_INSN_LIST (region->label, *p_handlers);
}
rtx
reachable_handlers (rtx insn)
{
  unsigned char is_resx = 0;
  rtx handlers = ((void *)0);
  int region_number;
  if (((enum rtx_code) (insn)->code) == JUMP_INSN
      && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == RESX)
    {
      region_number = ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtint);
      is_resx = 1;
    }
  else
    {
      rtx note = find_reg_note (insn, REG_EH_REGION, (rtx) 0);
      if (!note || (((((note)->u.fld[0]).rtx1))->u.hwint[0]) <= 0)
 return ((void *)0);
      region_number = (((((note)->u.fld[0]).rtx1))->u.hwint[0]);
    }
  foreach_reachable_handler (region_number, is_resx,
        (cfun->eh->built_landing_pads
         ? arh_to_landing_pad
         : arh_to_label),
        &handlers);
  return handlers;
}
unsigned char
can_throw_internal_1 (int region_number)
{
  struct eh_region *region;
  tree type_thrown;
  region = cfun->eh->region_array[region_number];
  type_thrown = (tree) ((void *)0);
  if (region->type == ERT_THROW)
    {
      type_thrown = region->u.throw.type;
      region = region->outer;
    }
  for (; region; region = region->outer)
    {
      enum reachable_code how = reachable_next_level (region, type_thrown, 0);
      if (how == RNL_BLOCKED)
 return 0;
      if (how != RNL_NOT_CAUGHT)
 return 1;
    }
  return 0;
}
unsigned char
can_throw_internal (rtx insn)
{
  rtx note;
  if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return 0;
  if (((enum rtx_code) (insn)->code) == JUMP_INSN
      && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == RESX
      && ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtint) > 0)
    return can_throw_internal_1 (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtint));
  if (((enum rtx_code) (insn)->code) == INSN
      && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
    insn = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
  note = find_reg_note (insn, REG_EH_REGION, (rtx) 0);
  if (!note || (((((note)->u.fld[0]).rtx1))->u.hwint[0]) <= 0)
    return 0;
  return can_throw_internal_1 ((((((note)->u.fld[0]).rtx1))->u.hwint[0]));
}
unsigned char
can_throw_external_1 (int region_number)
{
  struct eh_region *region;
  tree type_thrown;
  region = cfun->eh->region_array[region_number];
  type_thrown = (tree) ((void *)0);
  if (region->type == ERT_THROW)
    {
      type_thrown = region->u.throw.type;
      region = region->outer;
    }
  for (; region ; region = region->outer)
    if (reachable_next_level (region, type_thrown, ((void *)0)) >= RNL_CAUGHT)
      return 0;
  return 1;
}
unsigned char
can_throw_external (rtx insn)
{
  rtx note;
  if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return 0;
  if (((enum rtx_code) (insn)->code) == INSN
      && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
    insn = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
  note = find_reg_note (insn, REG_EH_REGION, (rtx) 0);
  if (!note)
    {
      return (((enum rtx_code) (insn)->code) == CALL_INSN
       || (flag_non_call_exceptions
    && may_trap_p ((((insn)->u.fld[5]).rtx1))));
    }
  if ((((((note)->u.fld[0]).rtx1))->u.hwint[0]) <= 0)
    return 0;
  return can_throw_external_1 ((((((note)->u.fld[0]).rtx1))->u.hwint[0]));
}
void
set_nothrow_function_flags (void)
{
  rtx insn;
  current_function_nothrow = 1;
  cfun->all_throwers_are_sibcalls = 1;
  if (! flag_exceptions)
    return;
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    if (can_throw_external (insn))
      {
 current_function_nothrow = 0;
 if (((enum rtx_code) (insn)->code) != CALL_INSN || !(((insn))->jump))
   {
     cfun->all_throwers_are_sibcalls = 0;
     return;
   }
      }
  for (insn = (cfun->epilogue_delay_list); insn;
       insn = (((insn)->u.fld[1]).rtx1))
    if (can_throw_external (insn))
      {
 current_function_nothrow = 0;
 if (((enum rtx_code) (insn)->code) != CALL_INSN || !(((insn))->jump))
   {
     cfun->all_throwers_are_sibcalls = 0;
     return;
   }
      }
}
void
expand_builtin_unwind_init (void)
{
  (cfun->has_nonlocal_label) = 1;
  ix86_setup_frame_addresses ();
}
rtx
expand_builtin_eh_return_data_regno (tree arglist)
{
  tree which = ((arglist)->list.value1);
  unsigned long iwhich;
  if (((enum tree_code) (which)->common.code) != INTEGER_CST)
    {
      error ("argument of `__builtin_eh_return_regno' must be constant");
      return (const_int_rtx[64 -1]);
    }
  iwhich = tree_low_cst (which, 1);
  iwhich = ((iwhich) < 2 ? (iwhich) : (~(unsigned int) 0));
  if (iwhich == (~(unsigned int) 0))
    return (const_int_rtx[64 -1]);
  iwhich = (0 ? dbx64_register_map[iwhich] : svr4_dbx_register_map[iwhich]);
  return gen_rtx_CONST_INT (VOIDmode, (long) (iwhich));
}
rtx
expand_builtin_extract_return_addr (tree addr_tree)
{
  rtx addr = expand_expr (addr_tree, (rtx) 0, (0 ? DImode : SImode), 0);
  if (((enum machine_mode) (addr)->mode) != (0 ? DImode : SImode)
      && ((enum machine_mode) (addr)->mode) != VOIDmode)
    {
      addr = convert_to_mode ((0 ? DImode : SImode), addr, 0);
    }
  return addr;
}
rtx
expand_builtin_frob_return_addr (tree addr_tree)
{
  rtx addr = expand_expr (addr_tree, (rtx) 0, ptr_mode, 0);
  addr = convert_memory_address ((0 ? DImode : SImode), addr);
  return addr;
}
void
expand_builtin_eh_return (tree stackadj_tree ,
     tree handler_tree)
{
  rtx tmp;
  tmp = expand_expr (stackadj_tree, cfun->eh->ehr_stackadj, VOIDmode, 0);
  tmp = convert_memory_address ((0 ? DImode : SImode), tmp);
  if (!cfun->eh->ehr_stackadj)
    cfun->eh->ehr_stackadj = copy_to_reg (tmp);
  else if (tmp != cfun->eh->ehr_stackadj)
    emit_move_insn (cfun->eh->ehr_stackadj, tmp);
  tmp = expand_expr (handler_tree, cfun->eh->ehr_handler, VOIDmode, 0);
  tmp = convert_memory_address ((0 ? DImode : SImode), tmp);
  if (!cfun->eh->ehr_handler)
    cfun->eh->ehr_handler = copy_to_reg (tmp);
  else if (tmp != cfun->eh->ehr_handler)
    emit_move_insn (cfun->eh->ehr_handler, tmp);
  if (!cfun->eh->ehr_label)
    cfun->eh->ehr_label = gen_label_rtx ();
  emit_jump (cfun->eh->ehr_label);
}
void
expand_eh_return (void)
{
  rtx around_label;
  if (! cfun->eh->ehr_label)
    return;
  (cfun->calls_eh_return) = 1;
  emit_move_insn (gen_rtx_REG ((0 ? DImode : SImode), 2), (const_int_rtx[64]));
  around_label = gen_label_rtx ();
  emit_jump (around_label);
  emit_label (cfun->eh->ehr_label);
  clobber_return_register ();
  emit_move_insn (gen_rtx_REG ((0 ? DImode : SImode), 2), cfun->eh->ehr_stackadj);
  if (1)
    emit_insn (gen_eh_return (cfun->eh->ehr_handler));
  else
    {
      error ("__builtin_eh_return not supported on this target");
    }
  emit_label (around_label);
}
rtx
expand_builtin_extend_pointer (tree addr_tree)
{
  rtx addr = expand_expr (addr_tree, (rtx) 0, ptr_mode, 0);
  int extend;
  extend = 1;
  return convert_modes (word_mode, ptr_mode, addr, extend);
}
struct action_record
{
  int offset;
  int filter;
  int next;
};
static int
action_record_eq (const void *pentry, const void *pdata)
{
  const struct action_record *entry = (const struct action_record *) pentry;
  const struct action_record *data = (const struct action_record *) pdata;
  return entry->filter == data->filter && entry->next == data->next;
}
static hashval_t
action_record_hash (const void *pentry)
{
  const struct action_record *entry = (const struct action_record *) pentry;
  return entry->next * 1009 + entry->filter;
}
static int
add_action_record (htab_t ar_hash, int filter, int next)
{
  struct action_record **slot, *new, tmp;
  tmp.filter = filter;
  tmp.next = next;
  slot = (struct action_record **) htab_find_slot (ar_hash, &tmp, INSERT);
  if ((new = *slot) == ((void *)0))
    {
      new = xmalloc (sizeof (*new));
      new->offset = ((cfun->eh->action_record_data)->elements_used) + 1;
      new->filter = filter;
      new->next = next;
      *slot = new;
      push_sleb128 (&cfun->eh->action_record_data, filter);
      if (next)
 next -= ((cfun->eh->action_record_data)->elements_used) + 1;
      push_sleb128 (&cfun->eh->action_record_data, next);
    }
  return new->offset;
}
static int
collect_one_action_chain (htab_t ar_hash, struct eh_region *region)
{
  struct eh_region *c;
  int next;
  if (region == ((void *)0))
    return -1;
  switch (region->type)
    {
    case ERT_CLEANUP:
      next = collect_one_action_chain (ar_hash, region->outer);
      if (next <= 0)
 return 0;
      for (c = region->outer; c ; c = c->outer)
 if (c->type == ERT_CLEANUP)
   return next;
      return add_action_record (ar_hash, 0, next);
    case ERT_TRY:
      next = -3;
      for (c = region->u.try.last_catch; c ; c = c->u.catch.prev_catch)
 {
   if (c->u.catch.type_list == ((void *)0))
     {
       int filter
  = (((((c->u.catch.filter_list)->list.value1))->int_cst.int_cst).low);
       next = add_action_record (ar_hash, filter, 0);
     }
   else
     {
       tree flt_node;
       if (next == -3)
  {
    next = collect_one_action_chain (ar_hash, region->outer);
    if (next == -1)
      next = 0;
    else if (next <= 0)
      next = add_action_record (ar_hash, 0, 0);
  }
       flt_node = c->u.catch.filter_list;
       for (; flt_node; flt_node = ((flt_node)->common.chain))
  {
    int filter = (((((flt_node)->list.value1))->int_cst.int_cst).low);
    next = add_action_record (ar_hash, filter, next);
  }
     }
 }
      return next;
    case ERT_ALLOWED_EXCEPTIONS:
      next = collect_one_action_chain (ar_hash, region->outer);
      if (next == -1)
 next = 0;
      else if (next <= 0)
 next = add_action_record (ar_hash, 0, 0);
      return add_action_record (ar_hash, region->u.allowed.filter, next);
    case ERT_MUST_NOT_THROW:
      return -2;
    case ERT_CATCH:
    case ERT_THROW:
      return collect_one_action_chain (ar_hash, region->outer);
    default:
      abort ();
    }
}
static int
add_call_site (rtx landing_pad, int action)
{
  struct call_site_record *data = cfun->eh->call_site_data;
  int used = cfun->eh->call_site_data_used;
  int size = cfun->eh->call_site_data_size;
  if (used >= size)
    {
      size = (size ? size * 2 : 64);
      data = ggc_realloc_stat (data,sizeof (*data) * size );
      cfun->eh->call_site_data = data;
      cfun->eh->call_site_data_size = size;
    }
  data[used].landing_pad = landing_pad;
  data[used].action = action;
  cfun->eh->call_site_data_used = used + 1;
  return used + call_site_base;
}
void
convert_to_eh_region_ranges (void)
{
  rtx insn, iter, note;
  htab_t ar_hash;
  int last_action = -3;
  rtx last_action_insn = (rtx) 0;
  rtx last_landing_pad = (rtx) 0;
  rtx first_no_action_insn = (rtx) 0;
  int call_site = 0;
  if (0 || cfun->eh->region_tree == ((void *)0))
    return;
  cfun->eh->action_record_data = varray_init (64, VARRAY_DATA_UC, "action_record_data");
  ar_hash = htab_create (31, action_record_hash, action_record_eq, free);
  for (iter = get_insns (); iter ; iter = (((iter)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (iter)->code) == INSN) || (((enum rtx_code) (iter)->code) == JUMP_INSN) || (((enum rtx_code) (iter)->code) == CALL_INSN)))
      {
 struct eh_region *region;
 int this_action;
 rtx this_landing_pad;
 insn = iter;
 if (((enum rtx_code) (insn)->code) == INSN
     && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
   insn = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
 note = find_reg_note (insn, REG_EH_REGION, (rtx) 0);
 if (!note)
   {
     if (! (((enum rtx_code) (insn)->code) == CALL_INSN
     || (flag_non_call_exceptions
         && may_trap_p ((((insn)->u.fld[5]).rtx1)))))
       continue;
     this_action = -1;
     region = ((void *)0);
   }
 else
   {
     if ((((((note)->u.fld[0]).rtx1))->u.hwint[0]) <= 0)
       continue;
     region = cfun->eh->region_array[(((((note)->u.fld[0]).rtx1))->u.hwint[0])];
     this_action = collect_one_action_chain (ar_hash, region);
   }
 if (this_action != -1)
   cfun->uses_eh_lsda = 1;
 else if (last_action == -3)
   {
     first_no_action_insn = iter;
     last_action = -1;
   }
 if (this_action >= 0)
   {
     struct eh_region *o;
     for (o = region; ! o->landing_pad ; o = o->outer)
       continue;
     this_landing_pad = o->landing_pad;
   }
 else
   this_landing_pad = (rtx) 0;
 if (last_action != this_action
     || last_landing_pad != this_landing_pad)
   {
     if (last_action >= -1)
       {
  if (first_no_action_insn)
    {
      call_site = add_call_site ((rtx) 0, 0);
      note = emit_note_before (NOTE_INSN_EH_REGION_BEG,
          first_no_action_insn);
      (((note)->u.fld[4]).rtint) = call_site;
      first_no_action_insn = (rtx) 0;
    }
  note = emit_note_after (NOTE_INSN_EH_REGION_END,
     last_action_insn);
  (((note)->u.fld[4]).rtint) = call_site;
       }
     if (this_action >= -1)
       {
  call_site = add_call_site (this_landing_pad,
        this_action < 0 ? 0 : this_action);
  note = emit_note_before (NOTE_INSN_EH_REGION_BEG, iter);
  (((note)->u.fld[4]).rtint) = call_site;
       }
     last_action = this_action;
     last_landing_pad = this_landing_pad;
   }
 last_action_insn = iter;
      }
  if (last_action >= -1 && ! first_no_action_insn)
    {
      note = emit_note_after (NOTE_INSN_EH_REGION_END, last_action_insn);
      (((note)->u.fld[4]).rtint) = call_site;
    }
  htab_delete (ar_hash);
}
static void
push_uleb128 (varray_type *data_area, unsigned int value1)
{
  do
    {
      unsigned char byte = value1 & 0x7f;
      value1 >>= 7;
      if (value1)
 byte |= 0x80;
      do { if ((*data_area)->elements_used >= (*data_area)->num_elements) (((*data_area)) = varray_grow ((*data_area), 2 * (*data_area)->num_elements)); (*data_area)->data.uc[(*data_area)->elements_used++] = (byte); } while (0);
    }
  while (value1);
}
static void
push_sleb128 (varray_type *data_area, int value1)
{
  unsigned char byte;
  int more;
  do
    {
      byte = value1 & 0x7f;
      value1 >>= 7;
      more = ! ((value1 == 0 && (byte & 0x40) == 0)
  || (value1 == -1 && (byte & 0x40) != 0));
      if (more)
 byte |= 0x80;
      do { if ((*data_area)->elements_used >= (*data_area)->num_elements) (((*data_area)) = varray_grow ((*data_area), 2 * (*data_area)->num_elements)); (*data_area)->data.uc[(*data_area)->elements_used++] = (byte); } while (0);
    }
  while (more);
}
static void
dw2_output_call_site_table (void)
{
  const char *const function_start_lab
    = ((const char *) (current_function_func_begin_label)->identifier.id.str);
  int n = cfun->eh->call_site_data_used;
  int i;
  for (i = 0; i < n; ++i)
    {
      struct call_site_record *cs = &cfun->eh->call_site_data[i];
      char reg_start_lab[32];
      char reg_end_lab[32];
      char landing_pad_lab[32];
      do { sprintf (reg_start_lab, "*.%s%u", "LEHB", (unsigned) (call_site_base + i)); } while (0);
      do { sprintf (reg_end_lab, "*.%s%u", "LEHE", (unsigned) (call_site_base + i)); } while (0);
      if (cs->landing_pad)
 do { sprintf (landing_pad_lab, "*.%s%u", "L", (unsigned) ((((cs->landing_pad)->u.fld[6]).rtint))); } while (0)
                                             ;
      dw2_asm_output_delta_uleb128 (reg_start_lab, function_start_lab,
        "region %d start", i);
      dw2_asm_output_delta_uleb128 (reg_end_lab, reg_start_lab,
        "length");
      if (cs->landing_pad)
 dw2_asm_output_delta_uleb128 (landing_pad_lab, function_start_lab,
          "landing pad");
      else
 dw2_asm_output_data_uleb128 (0, "landing pad");
      dw2_asm_output_data_uleb128 (cs->action, "action");
    }
  call_site_base += n;
}
static void
sjlj_output_call_site_table (void)
{
  int n = cfun->eh->call_site_data_used;
  int i;
  for (i = 0; i < n; ++i)
    {
      struct call_site_record *cs = &cfun->eh->call_site_data[i];
      dw2_asm_output_data_uleb128 (((cs->landing_pad)->u.hwint[0]),
       "region %d landing pad", i);
      dw2_asm_output_data_uleb128 (cs->action, "action");
    }
  call_site_base += n;
}
void
default_exception_section (void)
{
  if (targetm.have_named_sections)
    {
      int flags;
      int tt_format = (flag_pic ? ((1) ? 0x80 : 0) | 0x10 | 0x0B : 0x00);
      flags = (! flag_pic
        || ((tt_format & 0x70) != 0x00
     && (tt_format & 0x70) != 0x50))
       ? 0 : 0x00200;
      named_section_flags (".gcc_except_table", flags);
    }
  else if (flag_pic)
    data_section ();
  else
    readonly_data_section ();
}
void
output_function_exception_table (void)
{
  int tt_format, cs_format, lp_format, i, n;
  char ttype_label[32];
  char cs_after_size_label[32];
  char cs_end_label[32];
  int have_tt_data;
  int tt_format_size = 0;
  if (! cfun->uses_eh_lsda)
    return;
  targetm.asm_out.exception_section ();
  have_tt_data = (((cfun->eh->ttype_data)->elements_used) > 0
    || ((cfun->eh->ehspec_data)->elements_used) > 0);
  if (! have_tt_data)
    tt_format = 0xff;
  else
    {
      tt_format = (flag_pic ? ((1) ? 0x80 : 0) | 0x10 | 0x0B : 0x00);
      do { sprintf (ttype_label, "*.%s%u", "LLSDATT", (unsigned) ((cfun->funcdef_no))); } while (0)
                                   ;
      tt_format_size = size_of_encoded_value (tt_format);
      assemble_align (tt_format_size * 8);
    }
  targetm.asm_out.internal_label (asm_out_file, "LLSDA",
        (cfun->funcdef_no));
  lp_format = 0xff;
  dw2_asm_output_data (1, lp_format, "@LPStart format (%s)",
         eh_data_format_name (lp_format));
  dw2_asm_output_data (1, tt_format, "@TType format (%s)",
         eh_data_format_name (tt_format));
  if (have_tt_data)
    {
      char ttype_after_disp_label[32];
      do { sprintf (ttype_after_disp_label, "*.%s%u", "LLSDATTD", (unsigned) ((cfun->funcdef_no))); } while (0)
                                   ;
      dw2_asm_output_delta_uleb128 (ttype_label, ttype_after_disp_label,
        "@TType base offset");
      do { assemble_name ((asm_out_file), (ttype_after_disp_label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
    }
  cs_format = 0x01;
  dw2_asm_output_data (1, cs_format, "call-site format (%s)",
         eh_data_format_name (cs_format));
  do { sprintf (cs_after_size_label, "*.%s%u", "LLSDACSB", (unsigned) ((cfun->funcdef_no))); } while (0)
                                      ;
  do { sprintf (cs_end_label, "*.%s%u", "LLSDACSE", (unsigned) ((cfun->funcdef_no))); } while (0)
                                      ;
  dw2_asm_output_delta_uleb128 (cs_end_label, cs_after_size_label,
    "Call-site table length");
  do { assemble_name ((asm_out_file), (cs_after_size_label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  if (0)
    sjlj_output_call_site_table ();
  else
    dw2_output_call_site_table ();
  do { assemble_name ((asm_out_file), (cs_end_label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  n = ((cfun->eh->action_record_data)->elements_used);
  for (i = 0; i < n; ++i)
    dw2_asm_output_data (1, ((cfun->eh->action_record_data)->data.uc[i]),
    (i ? ((void *)0) : "Action record table"));
  if (have_tt_data)
    assemble_align (tt_format_size * 8);
  i = ((cfun->eh->ttype_data)->elements_used);
  while (i-- > 0)
    {
      tree type = ((cfun->eh->ttype_data)->data.tree1[i]);
      rtx value1;
      if (type == (tree) ((void *)0))
 value1 = (const_int_rtx[64]);
      else
 {
   struct cgraph_varpool_node *node;
   type = lookup_type_for_runtime (type);
   value1 = expand_expr (type, (rtx) 0, VOIDmode, EXPAND_INITIALIZER);
   while ((((enum tree_code) (type)->common.code) == NOP_EXPR || ((enum tree_code) (type)->common.code) == CONVERT_EXPR || ((enum tree_code) (type)->common.code) == NON_LVALUE_EXPR) && ((type)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((type)->common.type))->type.mode) == ((((((type)->exp.operands[0]))->common.type))->type.mode))) (type) = ((type)->exp.operands[0]);
   if (((enum tree_code) (type)->common.code) == ADDR_EXPR)
     {
       type = ((type)->exp.operands[0]);
       if (((enum tree_code) (type)->common.code) == VAR_DECL)
  {
           node = cgraph_varpool_node (type);
           if (node)
      cgraph_varpool_mark_needed_node (node);
  }
     }
   else if (((enum tree_code) (type)->common.code) != INTEGER_CST)
     abort ();
 }
      if (tt_format == 0x00 || tt_format == 0x50)
 assemble_integer (value1, tt_format_size,
     tt_format_size * 8, 1);
      else
 dw2_asm_output_encoded_addr_rtx (tt_format, value1, ((void *)0));
    }
  if (have_tt_data)
      do { assemble_name ((asm_out_file), (ttype_label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  n = ((cfun->eh->ehspec_data)->elements_used);
  for (i = 0; i < n; ++i)
    dw2_asm_output_data (1, ((cfun->eh->ehspec_data)->data.uc[i]),
    (i ? ((void *)0) : "Exception specification table"));
  function_section (current_function_decl);
}
void
gt_ggc_mx_eh_region (void *x_p)
{
  struct eh_region * const x = (struct eh_region *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).outer != ((void *)0)) gt_ggc_mx_eh_region ((*x).outer); } while (0);
      do { if ((*x).inner != ((void *)0)) gt_ggc_mx_eh_region ((*x).inner); } while (0);
      do { if ((*x).next_peer != ((void *)0)) gt_ggc_mx_eh_region ((*x).next_peer); } while (0);
      do { if ((*x).aka != ((void *)0)) gt_ggc_mx_bitmap_head_def ((*x).aka); } while (0);
      switch ((*x).type)
        {
        case ERT_TRY:
          do { if ((*x).u.try.catch != ((void *)0)) gt_ggc_mx_eh_region ((*x).u.try.catch); } while (0);
          do { if ((*x).u.try.last_catch != ((void *)0)) gt_ggc_mx_eh_region ((*x).u.try.last_catch); } while (0);
          do { if ((*x).u.try.prev_try != ((void *)0)) gt_ggc_mx_eh_region ((*x).u.try.prev_try); } while (0);
          do { if ((*x).u.try.continue_label != ((void *)0)) gt_ggc_mx_rtx_def ((*x).u.try.continue_label); } while (0);
          break;
        case ERT_CATCH:
          do { if ((*x).u.catch.next_catch != ((void *)0)) gt_ggc_mx_eh_region ((*x).u.catch.next_catch); } while (0);
          do { if ((*x).u.catch.prev_catch != ((void *)0)) gt_ggc_mx_eh_region ((*x).u.catch.prev_catch); } while (0);
          do { if ((*x).u.catch.type_list != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.catch.type_list); } while (0);
          do { if ((*x).u.catch.filter_list != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.catch.filter_list); } while (0);
          break;
        case ERT_ALLOWED_EXCEPTIONS:
          do { if ((*x).u.allowed.type_list != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.allowed.type_list); } while (0);
          break;
        case ERT_THROW:
          do { if ((*x).u.throw.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.throw.type); } while (0);
          break;
        case ERT_CLEANUP:
          do { if ((*x).u.cleanup.exp != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.cleanup.exp); } while (0);
          do { if ((*x).u.cleanup.prev_try != ((void *)0)) gt_ggc_mx_eh_region ((*x).u.cleanup.prev_try); } while (0);
          break;
        case ERT_FIXUP:
          do { if ((*x).u.fixup.cleanup_exp != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).u.fixup.cleanup_exp); } while (0);
          do { if ((*x).u.fixup.real_region != ((void *)0)) gt_ggc_mx_eh_region ((*x).u.fixup.real_region); } while (0);
          break;
        default:
          break;
        }
      do { if ((*x).label != ((void *)0)) gt_ggc_mx_rtx_def ((*x).label); } while (0);
      do { if ((*x).tree_label != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).tree_label); } while (0);
      do { if ((*x).landing_pad != ((void *)0)) gt_ggc_mx_rtx_def ((*x).landing_pad); } while (0);
      do { if ((*x).post_landing_pad != ((void *)0)) gt_ggc_mx_rtx_def ((*x).post_landing_pad); } while (0);
      do { if ((*x).resume != ((void *)0)) gt_ggc_mx_rtx_def ((*x).resume); } while (0);
    }
}
void
gt_ggc_mx_ehl_map_entry (void *x_p)
{
  struct ehl_map_entry * const x = (struct ehl_map_entry *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).label != ((void *)0)) gt_ggc_mx_rtx_def ((*x).label); } while (0);
      do { if ((*x).region != ((void *)0)) gt_ggc_mx_eh_region ((*x).region); } while (0);
    }
}
void
gt_ggc_mx_eh_status (void *x_p)
{
  struct eh_status * const x = (struct eh_status *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).region_tree != ((void *)0)) gt_ggc_mx_eh_region ((*x).region_tree); } while (0);
      if ((*x).region_array != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).last_region_number); i0++) {
          do { if ((*x).region_array[i0] != ((void *)0)) gt_ggc_mx_eh_region ((*x).region_array[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).region_array); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
      do { if ((*x).cur_region != ((void *)0)) gt_ggc_mx_eh_region ((*x).cur_region); } while (0);
      do { if ((*x).try_region != ((void *)0)) gt_ggc_mx_eh_region ((*x).try_region); } while (0);
      do { if ((*x).filter != ((void *)0)) gt_ggc_mx_rtx_def ((*x).filter); } while (0);
      do { if ((*x).exc_ptr != ((void *)0)) gt_ggc_mx_rtx_def ((*x).exc_ptr); } while (0);
      do { if ((*x).ttype_data != ((void *)0)) gt_ggc_mx_varray_head_tag ((*x).ttype_data); } while (0);
      do { if ((*x).ehspec_data != ((void *)0)) gt_ggc_mx_varray_head_tag ((*x).ehspec_data); } while (0);
      do { if ((*x).action_record_data != ((void *)0)) gt_ggc_mx_varray_head_tag ((*x).action_record_data); } while (0);
      gt_ggc_m_P13ehl_map_entry4htab ((*x).exception_handler_label_map);
      if ((*x).call_site_data != ((void *)0)) {
        size_t i1;
        for (i1 = 0; i1 < (size_t)(((*x)).call_site_data_used); i1++) {
          do { if ((*x).call_site_data[i1].landing_pad != ((void *)0)) gt_ggc_mx_rtx_def ((*x).call_site_data[i1].landing_pad); } while (0);
        }
        do { const void *const a__ = ((*x).call_site_data); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
      do { if ((*x).ehr_stackadj != ((void *)0)) gt_ggc_mx_rtx_def ((*x).ehr_stackadj); } while (0);
      do { if ((*x).ehr_handler != ((void *)0)) gt_ggc_mx_rtx_def ((*x).ehr_handler); } while (0);
      do { if ((*x).ehr_label != ((void *)0)) gt_ggc_mx_rtx_def ((*x).ehr_label); } while (0);
      do { if ((*x).sjlj_fc != ((void *)0)) gt_ggc_mx_rtx_def ((*x).sjlj_fc); } while (0);
      do { if ((*x).sjlj_exit_after != ((void *)0)) gt_ggc_mx_rtx_def ((*x).sjlj_exit_after); } while (0);
    }
}
void
gt_ggc_m_P13ehl_map_entry4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_ehl_map_entry ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_pch_nx_eh_region (void *x_p)
{
  struct eh_region * const x = (struct eh_region *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_9eh_region))
    {
      do { if ((*x).outer != ((void *)0)) gt_pch_nx_eh_region ((*x).outer); } while (0);
      do { if ((*x).inner != ((void *)0)) gt_pch_nx_eh_region ((*x).inner); } while (0);
      do { if ((*x).next_peer != ((void *)0)) gt_pch_nx_eh_region ((*x).next_peer); } while (0);
      do { if ((*x).aka != ((void *)0)) gt_pch_nx_bitmap_head_def ((*x).aka); } while (0);
      switch ((*x).type)
        {
        case ERT_TRY:
          do { if ((*x).u.try.catch != ((void *)0)) gt_pch_nx_eh_region ((*x).u.try.catch); } while (0);
          do { if ((*x).u.try.last_catch != ((void *)0)) gt_pch_nx_eh_region ((*x).u.try.last_catch); } while (0);
          do { if ((*x).u.try.prev_try != ((void *)0)) gt_pch_nx_eh_region ((*x).u.try.prev_try); } while (0);
          do { if ((*x).u.try.continue_label != ((void *)0)) gt_pch_nx_rtx_def ((*x).u.try.continue_label); } while (0);
          break;
        case ERT_CATCH:
          do { if ((*x).u.catch.next_catch != ((void *)0)) gt_pch_nx_eh_region ((*x).u.catch.next_catch); } while (0);
          do { if ((*x).u.catch.prev_catch != ((void *)0)) gt_pch_nx_eh_region ((*x).u.catch.prev_catch); } while (0);
          do { if ((*x).u.catch.type_list != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.catch.type_list); } while (0);
          do { if ((*x).u.catch.filter_list != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.catch.filter_list); } while (0);
          break;
        case ERT_ALLOWED_EXCEPTIONS:
          do { if ((*x).u.allowed.type_list != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.allowed.type_list); } while (0);
          break;
        case ERT_THROW:
          do { if ((*x).u.throw.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.throw.type); } while (0);
          break;
        case ERT_CLEANUP:
          do { if ((*x).u.cleanup.exp != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.cleanup.exp); } while (0);
          do { if ((*x).u.cleanup.prev_try != ((void *)0)) gt_pch_nx_eh_region ((*x).u.cleanup.prev_try); } while (0);
          break;
        case ERT_FIXUP:
          do { if ((*x).u.fixup.cleanup_exp != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).u.fixup.cleanup_exp); } while (0);
          do { if ((*x).u.fixup.real_region != ((void *)0)) gt_pch_nx_eh_region ((*x).u.fixup.real_region); } while (0);
          break;
        default:
          break;
        }
      do { if ((*x).label != ((void *)0)) gt_pch_nx_rtx_def ((*x).label); } while (0);
      do { if ((*x).tree_label != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).tree_label); } while (0);
      do { if ((*x).landing_pad != ((void *)0)) gt_pch_nx_rtx_def ((*x).landing_pad); } while (0);
      do { if ((*x).post_landing_pad != ((void *)0)) gt_pch_nx_rtx_def ((*x).post_landing_pad); } while (0);
      do { if ((*x).resume != ((void *)0)) gt_pch_nx_rtx_def ((*x).resume); } while (0);
    }
}
void
gt_pch_nx_ehl_map_entry (void *x_p)
{
  struct ehl_map_entry * const x = (struct ehl_map_entry *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_13ehl_map_entry))
    {
      do { if ((*x).label != ((void *)0)) gt_pch_nx_rtx_def ((*x).label); } while (0);
      do { if ((*x).region != ((void *)0)) gt_pch_nx_eh_region ((*x).region); } while (0);
    }
}
void
gt_pch_nx_eh_status (void *x_p)
{
  struct eh_status * const x = (struct eh_status *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_9eh_status))
    {
      do { if ((*x).region_tree != ((void *)0)) gt_pch_nx_eh_region ((*x).region_tree); } while (0);
      if ((*x).region_array != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).last_region_number); i0++) {
          do { if ((*x).region_array[i0] != ((void *)0)) gt_pch_nx_eh_region ((*x).region_array[i0]); } while (0);
        }
        gt_pch_note_object ((*x).region_array, x, gt_pch_p_9eh_status);
      }
      do { if ((*x).cur_region != ((void *)0)) gt_pch_nx_eh_region ((*x).cur_region); } while (0);
      do { if ((*x).try_region != ((void *)0)) gt_pch_nx_eh_region ((*x).try_region); } while (0);
      do { if ((*x).filter != ((void *)0)) gt_pch_nx_rtx_def ((*x).filter); } while (0);
      do { if ((*x).exc_ptr != ((void *)0)) gt_pch_nx_rtx_def ((*x).exc_ptr); } while (0);
      do { if ((*x).ttype_data != ((void *)0)) gt_pch_nx_varray_head_tag ((*x).ttype_data); } while (0);
      do { if ((*x).ehspec_data != ((void *)0)) gt_pch_nx_varray_head_tag ((*x).ehspec_data); } while (0);
      do { if ((*x).action_record_data != ((void *)0)) gt_pch_nx_varray_head_tag ((*x).action_record_data); } while (0);
      gt_pch_n_P13ehl_map_entry4htab ((*x).exception_handler_label_map);
      if ((*x).call_site_data != ((void *)0)) {
        size_t i1;
        for (i1 = 0; i1 < (size_t)(((*x)).call_site_data_used); i1++) {
          do { if ((*x).call_site_data[i1].landing_pad != ((void *)0)) gt_pch_nx_rtx_def ((*x).call_site_data[i1].landing_pad); } while (0);
        }
        gt_pch_note_object ((*x).call_site_data, x, gt_pch_p_9eh_status);
      }
      do { if ((*x).ehr_stackadj != ((void *)0)) gt_pch_nx_rtx_def ((*x).ehr_stackadj); } while (0);
      do { if ((*x).ehr_handler != ((void *)0)) gt_pch_nx_rtx_def ((*x).ehr_handler); } while (0);
      do { if ((*x).ehr_label != ((void *)0)) gt_pch_nx_rtx_def ((*x).ehr_label); } while (0);
      do { if ((*x).sjlj_fc != ((void *)0)) gt_pch_nx_rtx_def ((*x).sjlj_fc); } while (0);
      do { if ((*x).sjlj_exit_after != ((void *)0)) gt_pch_nx_rtx_def ((*x).sjlj_exit_after); } while (0);
    }
}
void
gt_pch_n_P13ehl_map_entry4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P13ehl_map_entry4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_ehl_map_entry ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P13ehl_map_entry4htab);
      }
    }
}
void
gt_pch_p_9eh_region (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct eh_region * const x = (struct eh_region *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).outer), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).inner), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next_peer), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).aka), cookie);
  switch ((*x).type)
    {
    case ERT_TRY:
      if ((void *)(x) == this_obj)
        op (&((*x).u.try.catch), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.try.last_catch), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.try.prev_try), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.try.continue_label), cookie);
      break;
    case ERT_CATCH:
      if ((void *)(x) == this_obj)
        op (&((*x).u.catch.next_catch), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.catch.prev_catch), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.catch.type_list), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.catch.filter_list), cookie);
      break;
    case ERT_ALLOWED_EXCEPTIONS:
      if ((void *)(x) == this_obj)
        op (&((*x).u.allowed.type_list), cookie);
      break;
    case ERT_THROW:
      if ((void *)(x) == this_obj)
        op (&((*x).u.throw.type), cookie);
      break;
    case ERT_CLEANUP:
      if ((void *)(x) == this_obj)
        op (&((*x).u.cleanup.exp), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.cleanup.prev_try), cookie);
      break;
    case ERT_FIXUP:
      if ((void *)(x) == this_obj)
        op (&((*x).u.fixup.cleanup_exp), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).u.fixup.real_region), cookie);
      break;
    default:
      break;
    }
  if ((void *)(x) == this_obj)
    op (&((*x).label), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).tree_label), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).landing_pad), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).post_landing_pad), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).resume), cookie);
}
void
gt_pch_p_13ehl_map_entry (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct ehl_map_entry * const x = (struct ehl_map_entry *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).label), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).region), cookie);
}
void
gt_pch_p_9eh_status (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct eh_status * const x = (struct eh_status *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).region_tree), cookie);
  if ((*x).region_array != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).last_region_number); i0++) {
      if ((void *)((*x).region_array) == this_obj)
        op (&((*x).region_array[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).region_array), cookie);
  }
  if ((void *)(x) == this_obj)
    op (&((*x).cur_region), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).try_region), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).filter), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).exc_ptr), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).ttype_data), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).ehspec_data), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).action_record_data), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).exception_handler_label_map), cookie);
  if ((*x).call_site_data != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)(((*x)).call_site_data_used); i1++) {
      if ((void *)((*x).call_site_data) == this_obj)
        op (&((*x).call_site_data[i1].landing_pad), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).call_site_data), cookie);
  }
  if ((void *)(x) == this_obj)
    op (&((*x).ehr_stackadj), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).ehr_handler), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).ehr_label), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).sjlj_fc), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).sjlj_exit_after), cookie);
}
void
gt_pch_p_P13ehl_map_entry4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
const struct ggc_root_tab gt_ggc_r_gt_except_h[] = {
  {
    &sjlj_fc_type_node,
    1,
    sizeof (sjlj_fc_type_node),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &type_to_runtime_map,
    1,
    sizeof (type_to_runtime_map),
    &gt_ggc_m_P9tree_node4htab,
    &gt_pch_n_P9tree_node4htab
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_except_h[] = {
  { &call_site_base, 1, sizeof (call_site_base), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static rtx break_out_memory_refs (rtx);
static void emit_stack_probe (rtx);
long
trunc_int_for_mode (long c, enum machine_mode mode)
{
  int width = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  if (! (mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT))
    abort ();
  if (mode == BImode)
    return c & 1 ? 1 : 0;
  if (width < (8 * 4))
    {
      long sign = 1;
      sign <<= width - 1;
      c &= (sign << 1) - 1;
      c ^= sign;
      c -= sign;
    }
  return c;
}
rtx
plus_constant_wide (rtx x, long c)
{
  enum rtx_code code;
  rtx y;
  enum machine_mode mode;
  rtx tem;
  int all_constant = 0;
  if (c == 0)
    return x;
 restart:
  code = ((enum rtx_code) (x)->code);
  mode = ((enum machine_mode) (x)->mode);
  y = x;
  switch (code)
    {
    case CONST_INT:
      return gen_rtx_CONST_INT (VOIDmode, (long) (((x)->u.hwint[0]) + c));
    case CONST_DOUBLE:
      {
 unsigned long l1 = ((x)->u.hwint[0]);
 long h1 = ((x)->u.hwint[1]);
 unsigned long l2 = c;
 long h2 = c < 0 ? ~0 : 0;
 unsigned long lv;
 long hv;
 add_double (l1, h1, l2, h2, &lv, &hv);
 return immed_double_const (lv, hv, VOIDmode);
      }
    case MEM:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SYMBOL_REF
   && ((((((x)->u.fld[0]).rtx1)))->unchanging))
 {
   tem
     = force_const_mem (((enum machine_mode) (x)->mode),
          plus_constant_wide ((get_pool_constant ((((x)->u.fld[0]).rtx1))), (long) (c))
             );
   if (memory_address_p (((enum machine_mode) (tem)->mode), (((tem)->u.fld[0]).rtx1)))
     return tem;
 }
      break;
    case CONST:
      x = (((x)->u.fld[0]).rtx1);
      all_constant = 1;
      goto restart;
    case SYMBOL_REF:
    case LABEL_REF:
      all_constant = 1;
      break;
    case PLUS:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
 {
   c += (((((x)->u.fld[1]).rtx1))->u.hwint[0]);
   if (((enum machine_mode) (x)->mode) != VOIDmode)
     c = trunc_int_for_mode (c, ((enum machine_mode) (x)->mode));
   x = (((x)->u.fld[0]).rtx1);
   goto restart;
 }
      else if (((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
 {
   x = gen_rtx_fmt_ee (PLUS, (mode), ((((x)->u.fld[0]).rtx1)), (plus_constant_wide (((((x)->u.fld[1]).rtx1)), (long) (c))));
   c = 0;
 }
      else if (find_constant_term_loc (&y))
 {
   rtx copy = copy_rtx (x);
   rtx *const_loc = find_constant_term_loc (&copy);
   *const_loc = plus_constant_wide ((*const_loc), (long) (c));
   x = copy;
   c = 0;
 }
      break;
    default:
      break;
    }
  if (c != 0)
    x = gen_rtx_fmt_ee (PLUS, (mode), (x), (gen_rtx_CONST_INT (VOIDmode, (long) (c))));
  if (((enum rtx_code) (x)->code) == SYMBOL_REF || ((enum rtx_code) (x)->code) == LABEL_REF)
    return x;
  else if (all_constant)
    return gen_rtx_fmt_e (CONST, (mode), (x));
  else
    return x;
}
rtx
eliminate_constant_term (rtx x, rtx *constptr)
{
  rtx x0, x1;
  rtx tem;
  if (((enum rtx_code) (x)->code) != PLUS)
    return x;
  if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
      && 0 != (tem = simplify_binary_operation (PLUS, ((enum machine_mode) (x)->mode), *constptr,
      (((x)->u.fld[1]).rtx1)))
      && ((enum rtx_code) (tem)->code) == CONST_INT)
    {
      *constptr = tem;
      return eliminate_constant_term ((((x)->u.fld[0]).rtx1), constptr);
    }
  tem = (const_int_rtx[64]);
  x0 = eliminate_constant_term ((((x)->u.fld[0]).rtx1), &tem);
  x1 = eliminate_constant_term ((((x)->u.fld[1]).rtx1), &tem);
  if ((x1 != (((x)->u.fld[1]).rtx1) || x0 != (((x)->u.fld[0]).rtx1))
      && 0 != (tem = simplify_binary_operation (PLUS, ((enum machine_mode) (x)->mode),
      *constptr, tem))
      && ((enum rtx_code) (tem)->code) == CONST_INT)
    {
      *constptr = tem;
      return gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (x)->mode)), (x0), (x1));
    }
  return x;
}
rtx
expr_size (tree exp)
{
  tree size = ((lang_hooks.expr_size (exp)) == 0 || ((lang_hooks.expr_size (exp))->common.constant_flag) ? (lang_hooks.expr_size (exp)) : substitute_placeholder_in_expr (lang_hooks.expr_size (exp), exp));
  return expand_expr (size, (rtx) 0, ((sizetype_tab[(int) SIZETYPE])->type.mode), 0);
}
long
int_expr_size (tree exp)
{
  tree t = lang_hooks.expr_size (exp);
  if (t == 0
      || ((enum tree_code) (t)->common.code) != INTEGER_CST
      || ((t)->common.public_flag)
      || (((t)->int_cst.int_cst).high) != 0
      || (long) (((t)->int_cst.int_cst).low) < 0)
    return -1;
  return (((t)->int_cst.int_cst).low);
}
static rtx
break_out_memory_refs (rtx x)
{
  if ((((enum rtx_code) (x)->code) == MEM)
      || (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR) && constant_address_p (x)
   && ((enum machine_mode) (x)->mode) != VOIDmode))
    x = force_reg (((enum machine_mode) (x)->mode), x);
  else if (((enum rtx_code) (x)->code) == PLUS || ((enum rtx_code) (x)->code) == MINUS
    || ((enum rtx_code) (x)->code) == MULT)
    {
      rtx op0 = break_out_memory_refs ((((x)->u.fld[0]).rtx1));
      rtx op1 = break_out_memory_refs ((((x)->u.fld[1]).rtx1));
      if (op0 != (((x)->u.fld[0]).rtx1) || op1 != (((x)->u.fld[1]).rtx1))
 x = gen_rtx_fmt_ee (((enum rtx_code) (x)->code), (0 ? DImode : SImode), op0, op1);
    }
  return x;
}
rtx
convert_memory_address (enum machine_mode to_mode ,
   rtx x)
{
  return x;
}
rtx
copy_all_regs (rtx x)
{
  if ((((enum rtx_code) (x)->code) == REG))
    {
      if ((((x)->u.fld[0]).rtuint) != 20
   && (((x)->u.fld[0]).rtuint) != 6
   )
 x = copy_to_reg (x);
    }
  else if ((((enum rtx_code) (x)->code) == MEM))
    x = copy_to_reg (x);
  else if (((enum rtx_code) (x)->code) == PLUS || ((enum rtx_code) (x)->code) == MINUS
    || ((enum rtx_code) (x)->code) == MULT)
    {
      rtx op0 = copy_all_regs ((((x)->u.fld[0]).rtx1));
      rtx op1 = copy_all_regs ((((x)->u.fld[1]).rtx1));
      if (op0 != (((x)->u.fld[0]).rtx1) || op1 != (((x)->u.fld[1]).rtx1))
 x = gen_rtx_fmt_ee (((enum rtx_code) (x)->code), (0 ? DImode : SImode), op0, op1);
    }
  return x;
}
rtx
memory_address (enum machine_mode mode, rtx x)
{
  rtx oldx = x;
  x = convert_memory_address ((0 ? DImode : SImode), x);
  if (! cse_not_expected && ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR) && constant_address_p (x))
    x = force_reg ((0 ? DImode : SImode), x);
  else if (((enum rtx_code) (x)->code) == QUEUED
      && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
    ;
  else
    {
      if (! cse_not_expected && !(((enum rtx_code) (x)->code) == REG))
 x = break_out_memory_refs (x);
      do { if (legitimate_address_p ((mode), (x), 0)) goto win; } while (0);
      if (memory_address_p (mode, oldx))
 goto win2;
      do { (x) = legitimize_address ((x), (oldx), (mode)); if (memory_address_p ((mode), (x))) goto win; } while (0);
      if (((enum rtx_code) (x)->code) == PLUS)
 {
   rtx constant_term = (const_int_rtx[64]);
   rtx y = eliminate_constant_term (x, &constant_term);
   if (constant_term == (const_int_rtx[64])
       || ! memory_address_p (mode, y))
     x = force_operand (x, (rtx) 0);
   else
     {
       y = gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (x)->mode)), (copy_to_reg (y)), (constant_term));
       if (! memory_address_p (mode, y))
  x = force_operand (x, (rtx) 0);
       else
  x = y;
     }
 }
      else if (((enum rtx_code) (x)->code) == MULT || ((enum rtx_code) (x)->code) == MINUS)
 x = force_operand (x, (rtx) 0);
      else if ((((enum rtx_code) (x)->code) == REG))
 x = copy_to_reg (x);
      else
 x = force_reg ((0 ? DImode : SImode), x);
      goto done;
    win2:
      x = oldx;
    win:
      if (flag_force_addr && ! cse_not_expected && !(((enum rtx_code) (x)->code) == REG)
   && ! (((enum rtx_code) (x)->code) == PLUS
  && ((((x)->u.fld[0]).rtx1) == (global_rtl[GR_VIRTUAL_STACK_ARGS])
      || (((x)->u.fld[0]).rtx1) == (global_rtl[GR_VIRTUAL_INCOMING_ARGS]))))
 {
   if (general_operand (x, (0 ? DImode : SImode)))
     x = force_reg ((0 ? DImode : SImode), x);
   else
     x = force_operand (x, (rtx) 0);
 }
    }
 done:
  if (oldx == x)
    return x;
  else if ((((enum rtx_code) (x)->code) == REG))
    mark_reg_pointer (x, 8);
  else if (((enum rtx_code) (x)->code) == PLUS
    && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
    && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
    mark_reg_pointer ((((x)->u.fld[0]).rtx1), 8);
  update_temp_slot_address (oldx, x);
  return x;
}
rtx
memory_address_noforce (enum machine_mode mode, rtx x)
{
  int ambient_force_addr = flag_force_addr;
  rtx val;
  flag_force_addr = 0;
  val = memory_address (mode, x);
  flag_force_addr = ambient_force_addr;
  return val;
}
rtx
validize_mem (rtx ref)
{
  if (!(((enum rtx_code) (ref)->code) == MEM))
    return ref;
  if (! (flag_force_addr && constant_address_p ((((ref)->u.fld[0]).rtx1)))
      && memory_address_p (((enum machine_mode) (ref)->mode), (((ref)->u.fld[0]).rtx1)))
    return ref;
  return replace_equiv_address (ref, (((ref)->u.fld[0]).rtx1));
}
void
maybe_set_unchanging (rtx ref, tree t)
{
  if ((((t)->common.readonly_flag) && (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd')
       && (((t)->common.static_flag) || ! (((enum tree_code) (((t)->common.type))->common.code) == ARRAY_TYPE || ((enum tree_code) (((t)->common.type))->common.code) == RECORD_TYPE || ((enum tree_code) (((t)->common.type))->common.code) == UNION_TYPE || ((enum tree_code) (((t)->common.type))->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (((t)->common.type))->common.code) == SET_TYPE))
       && (((enum tree_code) (t)->common.code) == PARM_DECL
    || (((t)->decl.initial) && ((((t)->decl.initial))->common.constant_flag))))
      || tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'c')
    (((ref))->unchanging) = 1;
}
rtx
stabilize (rtx x)
{
  if (!(((enum rtx_code) (x)->code) == MEM)
      || ! rtx_unstable_p ((((x)->u.fld[0]).rtx1)))
    return x;
  return
    replace_equiv_address (x, force_reg ((0 ? DImode : SImode), copy_all_regs ((((x)->u.fld[0]).rtx1))));
}
rtx
copy_to_reg (rtx x)
{
  rtx temp = gen_reg_rtx (((enum machine_mode) (x)->mode));
  if (! general_operand (x, VOIDmode))
    x = force_operand (x, temp);
  if (x != temp)
    emit_move_insn (temp, x);
  return temp;
}
rtx
copy_addr_to_reg (rtx x)
{
  return copy_to_mode_reg ((0 ? DImode : SImode), x);
}
rtx
copy_to_mode_reg (enum machine_mode mode, rtx x)
{
  rtx temp = gen_reg_rtx (mode);
  if (! general_operand (x, VOIDmode))
    x = force_operand (x, temp);
  if (((enum machine_mode) (x)->mode) != mode && ((enum machine_mode) (x)->mode) != VOIDmode)
    abort ();
  if (x != temp)
    emit_move_insn (temp, x);
  return temp;
}
rtx
force_reg (enum machine_mode mode, rtx x)
{
  rtx temp, insn, set;
  if ((((enum rtx_code) (x)->code) == REG))
    return x;
  if (general_operand (x, mode))
    {
      temp = gen_reg_rtx (mode);
      insn = emit_move_insn (temp, x);
    }
  else
    {
      temp = force_operand (x, (rtx) 0);
      if ((((enum rtx_code) (temp)->code) == REG))
 insn = get_last_insn ();
      else
 {
   rtx temp2 = gen_reg_rtx (mode);
   insn = emit_move_insn (temp2, temp);
   temp = temp2;
 }
    }
  if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR)
      && (set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != 0
      && (((set)->u.fld[0]).rtx1) == temp
      && ! rtx_equal_p (x, (((set)->u.fld[1]).rtx1)))
    set_unique_reg_note (insn, REG_EQUAL, x);
  {
    unsigned align = 0;
    if (((enum rtx_code) (x)->code) == SYMBOL_REF)
      {
        align = 8;
 if (((((x))->u.fld[2]).rttree) && (tree_code_type[(int) (((enum tree_code) (((((x))->u.fld[2]).rttree))->common.code))] == 'd'))
   align = ((((((x))->u.fld[2]).rttree))->decl.u1.a.align);
      }
    else if (((enum rtx_code) (x)->code) == LABEL_REF)
      align = 8;
    else if (((enum rtx_code) (x)->code) == CONST
      && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
      && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SYMBOL_REF
      && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
      {
 rtx s = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
 rtx c = ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
 unsigned sa, ca;
 sa = 8;
 if (((((s))->u.fld[2]).rttree) && (tree_code_type[(int) (((enum tree_code) (((((s))->u.fld[2]).rttree))->common.code))] == 'd'))
   sa = ((((((s))->u.fld[2]).rttree))->decl.u1.a.align);
 ca = exact_log2_wide ((unsigned long) (((c)->u.hwint[0]) & -((c)->u.hwint[0]))) * 8;
 align = ((sa) < (ca) ? (sa) : (ca));
      }
    if (align)
      mark_reg_pointer (temp, align);
  }
  return temp;
}
rtx
force_not_mem (rtx x)
{
  rtx temp;
  if (!(((enum rtx_code) (x)->code) == MEM) || ((enum machine_mode) (x)->mode) == BLKmode)
    return x;
  temp = gen_reg_rtx (((enum machine_mode) (x)->mode));
  if ((((x))->frame_related))
    (((temp))->frame_related) = 1;
  emit_move_insn (temp, x);
  return temp;
}
rtx
copy_to_suggested_reg (rtx x, rtx target, enum machine_mode mode)
{
  rtx temp;
  if (target && (((enum rtx_code) (target)->code) == REG))
    temp = target;
  else
    temp = gen_reg_rtx (mode);
  emit_move_insn (temp, x);
  return temp;
}
enum machine_mode
promote_mode (tree type, enum machine_mode mode, int *punsignedp,
       int for_call )
{
  enum tree_code code = ((enum tree_code) (type)->common.code);
  int unsignedp = *punsignedp;
  switch (code)
    {
    case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
    case CHAR_TYPE: case REAL_TYPE: case OFFSET_TYPE:
      if (for_call)
 {
   do { if (((mode) == HImode && (x86_promote_hi_regs & (1 << ix86_tune))) || ((mode) == QImode && (x86_promote_qi_regs & (1 << ix86_tune)))) (mode) = SImode; } while (0);
 }
      else
 {
   do { if (((mode) == HImode && (x86_promote_hi_regs & (1 << ix86_tune))) || ((mode) == QImode && (x86_promote_qi_regs & (1 << ix86_tune)))) (mode) = SImode; } while (0);
 }
      break;
    default:
      break;
    }
  *punsignedp = unsignedp;
  return mode;
}
void
adjust_stack (rtx adjust)
{
  rtx temp;
  adjust = protect_from_queue (adjust, 0);
  if (adjust == (const_int_rtx[64]))
    return;
  if (((enum rtx_code) (adjust)->code) == CONST_INT)
    (cfun->expr->x_stack_pointer_delta) -= ((adjust)->u.hwint[0]);
  temp = expand_binop ((0 ? DImode : SImode),
         (optab_table[OTI_add]),
         (global_rtl[GR_STACK_POINTER]), adjust, (global_rtl[GR_STACK_POINTER]), 0,
         OPTAB_LIB_WIDEN);
  if (temp != (global_rtl[GR_STACK_POINTER]))
    emit_move_insn ((global_rtl[GR_STACK_POINTER]), temp);
}
void
anti_adjust_stack (rtx adjust)
{
  rtx temp;
  adjust = protect_from_queue (adjust, 0);
  if (adjust == (const_int_rtx[64]))
    return;
  if (((enum rtx_code) (adjust)->code) == CONST_INT)
    (cfun->expr->x_stack_pointer_delta) += ((adjust)->u.hwint[0]);
  temp = expand_binop ((0 ? DImode : SImode),
         (optab_table[OTI_sub]),
         (global_rtl[GR_STACK_POINTER]), adjust, (global_rtl[GR_STACK_POINTER]), 0,
         OPTAB_LIB_WIDEN);
  if (temp != (global_rtl[GR_STACK_POINTER]))
    emit_move_insn ((global_rtl[GR_STACK_POINTER]), temp);
}
rtx
round_push (rtx size)
{
  int align = ix86_preferred_stack_boundary / 8;
  if (align == 1)
    return size;
  if (((enum rtx_code) (size)->code) == CONST_INT)
    {
      long new = (((size)->u.hwint[0]) + align - 1) / align * align;
      if (((size)->u.hwint[0]) != new)
 size = gen_rtx_CONST_INT (VOIDmode, (long) (new));
    }
  else
    {
      size = expand_binop ((0 ? DImode : SImode), (optab_table[OTI_add]), size, gen_rtx_CONST_INT (VOIDmode, (long) (align - 1)),
      (rtx) 0, 1, OPTAB_LIB_WIDEN);
      size = expand_divmod (0, TRUNC_DIV_EXPR, (0 ? DImode : SImode), size, gen_rtx_CONST_INT (VOIDmode, (long) (align)),
       (rtx) 0, 1);
      size = expand_mult ((0 ? DImode : SImode), size, gen_rtx_CONST_INT (VOIDmode, (long) (align)), (rtx) 0, 1);
    }
  return size;
}
void
emit_stack_save (enum save_level save_level, rtx *psave, rtx after)
{
  rtx sa = *psave;
  rtx (*fcn) (rtx, rtx) = gen_move_insn;
  enum machine_mode mode = (0 ? DImode : SImode);
  switch (save_level)
    {
    default:
      break;
    }
  if (sa == 0)
    {
      if (mode != VOIDmode)
 {
   if (save_level == SAVE_NONLOCAL)
     *psave = sa = assign_stack_local (mode, ((unsigned short) mode_size[mode]), 0);
   else
     *psave = sa = gen_reg_rtx (mode);
 }
    }
  if (after)
    {
      rtx seq;
      start_sequence ();
      if (sa != 0)
 sa = validize_mem (sa);
      emit_insn (fcn (sa, (global_rtl[GR_STACK_POINTER])));
      seq = get_insns ();
      end_sequence ();
      emit_insn_after (seq, after);
    }
  else
    {
      if (sa != 0)
 sa = validize_mem (sa);
      emit_insn (fcn (sa, (global_rtl[GR_STACK_POINTER])));
    }
}
void
emit_stack_restore (enum save_level save_level, rtx sa, rtx after)
{
  rtx (*fcn) (rtx, rtx) = gen_move_insn;
  switch (save_level)
    {
    default:
      break;
    }
  if (sa != 0)
    {
      sa = validize_mem (sa);
      emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode)))))
                               );
      emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, (global_rtl[GR_STACK_POINTER]))))
                                               );
    }
  if (after)
    {
      rtx seq;
      start_sequence ();
      emit_insn (fcn ((global_rtl[GR_STACK_POINTER]), sa));
      seq = get_insns ();
      end_sequence ();
      emit_insn_after (seq, after);
    }
  else
    emit_insn (fcn ((global_rtl[GR_STACK_POINTER]), sa));
}
void
update_nonlocal_goto_save_area (void)
{
  tree t_save;
  rtx r_save;
  t_save = build (ARRAY_REF, global_trees[TI_PTR_TYPE], cfun->nonlocal_goto_save_area,
    global_trees[TI_INTEGER_ONE], (tree) ((void *)0), (tree) ((void *)0));
  r_save = expand_expr (t_save, (rtx) 0, VOIDmode, EXPAND_WRITE);
  emit_stack_save (SAVE_NONLOCAL, &r_save, (rtx) 0);
}
rtx
allocate_dynamic_stack_space (rtx size, rtx target, int known_align)
{
  if (size == (const_int_rtx[64]))
    return (global_rtl[GR_VIRTUAL_STACK_DYNAMIC]);
  (cfun->calls_alloca) = 1;
  if (((enum machine_mode) (size)->mode) != VOIDmode && ((enum machine_mode) (size)->mode) != (0 ? DImode : SImode))
    size = convert_to_mode ((0 ? DImode : SImode), size, 1);
  cfun->preferred_stack_boundary = ix86_preferred_stack_boundary;
  if (1)
    size
      = force_operand (plus_constant_wide ((size), (long) (128 / 8 - 1))
                                                ,
         (rtx) 0);
  if (1 || known_align % ix86_preferred_stack_boundary != 0)
    size = round_push (size);
  do_pending_stack_adjust ();
  if ((cfun->expr->x_stack_pointer_delta) % (ix86_preferred_stack_boundary / 8))
    abort ();
  if (flag_stack_check && ! 0)
    probe_stack_range ((4096 - (0 ? 8 : 4)) + (75 * (0 ? 8 : 4)), size);
  if (target == 0 || !(((enum rtx_code) (target)->code) == REG)
      || (((target)->u.fld[0]).rtuint) < 53
      || ((enum machine_mode) (target)->mode) != (0 ? DImode : SImode))
    target = gen_reg_rtx ((0 ? DImode : SImode));
  mark_reg_pointer (target, known_align);
  if (((target_flags & 0x00000100)))
    {
      enum machine_mode mode = word_mode;
      insn_operand_predicate_fn pred;
      if (mode == VOIDmode)
 mode = insn_data[(int) CODE_FOR_allocate_stack].operand[1].mode;
      pred = insn_data[(int) CODE_FOR_allocate_stack].operand[1].predicate;
      if (pred && ! ((*pred) (size, mode)))
 size = copy_to_mode_reg (mode, convert_to_mode (mode, size, 1));
      emit_insn (gen_allocate_stack (target, size));
    }
  else
    {
      if ((cfun->limit_stack))
 {
   rtx available;
   rtx space_available = gen_label_rtx ();
   available = expand_binop ((0 ? DImode : SImode), (optab_table[OTI_sub]),
        (global_rtl[GR_STACK_POINTER]), stack_limit_rtx,
        (rtx) 0, 1, OPTAB_WIDEN);
   emit_cmp_and_jump_insns (available, size, GEU, (rtx) 0, (0 ? DImode : SImode), 1,
       space_available);
   if (1)
     emit_insn (gen_trap ());
   else
     error ("stack limits not supported on this target");
   emit_barrier ();
   emit_label (space_available);
 }
      anti_adjust_stack (size);
      emit_move_insn (target, (global_rtl[GR_VIRTUAL_STACK_DYNAMIC]));
    }
  if (1)
    {
      target = expand_binop ((0 ? DImode : SImode), (optab_table[OTI_add]), target,
        gen_rtx_CONST_INT (VOIDmode, (long) (128 / 8 - 1)),
        (rtx) 0, 1, OPTAB_LIB_WIDEN);
      target = expand_divmod (0, TRUNC_DIV_EXPR, (0 ? DImode : SImode), target,
         gen_rtx_CONST_INT (VOIDmode, (long) (128 / 8)),
         (rtx) 0, 1);
      target = expand_mult ((0 ? DImode : SImode), target,
       gen_rtx_CONST_INT (VOIDmode, (long) (128 / 8)),
       (rtx) 0, 1);
    }
  if (cfun->nonlocal_goto_save_area != 0)
    update_nonlocal_goto_save_area ();
  return target;
}
static rtx stack_check_libfunc;
void
set_stack_check_libfunc (rtx libfunc)
{
  stack_check_libfunc = libfunc;
}
static void
emit_stack_probe (rtx address)
{
  rtx memref = gen_rtx_MEM (word_mode, address);
  (((memref))->volatil) = 1;
  if (0)
    emit_move_insn (gen_reg_rtx (word_mode), memref);
  else
    emit_move_insn (memref, (const_int_rtx[64]));
}
void
probe_stack_range (long first, rtx size)
{
  if (((enum machine_mode) (size)->mode) != VOIDmode && ((enum machine_mode) (size)->mode) != (0 ? DImode : SImode))
    size = convert_to_mode ((0 ? DImode : SImode), size, 1);
  if (stack_check_libfunc != 0)
    {
      rtx addr = memory_address (QImode,
     gen_rtx_fmt_ee (MINUS, (0 ? DImode : SImode),
              (global_rtl[GR_STACK_POINTER]),
              plus_constant_wide ((size), (long) (first))));
      addr = convert_memory_address (ptr_mode, addr);
      emit_library_call (stack_check_libfunc, LCT_NORMAL, VOIDmode, 1, addr,
    ptr_mode);
    }
  else if (((enum rtx_code) (size)->code) == CONST_INT
    && ((size)->u.hwint[0]) < 10 * 4096)
    {
      long offset;
      for (offset = first + 4096;
    offset < ((size)->u.hwint[0]);
    offset = offset + 4096)
 emit_stack_probe (gen_rtx_fmt_ee (MINUS, (0 ? DImode : SImode),
       (global_rtl[GR_STACK_POINTER]),
       gen_rtx_CONST_INT (VOIDmode, (long) (offset))));
      emit_stack_probe (gen_rtx_fmt_ee (MINUS, (0 ? DImode : SImode),
     (global_rtl[GR_STACK_POINTER]),
     plus_constant_wide ((size), (long) (first))));
    }
  else
    {
      rtx test_addr
 = force_operand (gen_rtx_fmt_ee (MINUS, (0 ? DImode : SImode),
      (global_rtl[GR_STACK_POINTER]),
      gen_rtx_CONST_INT (VOIDmode, (long) (first + 4096))),
    (rtx) 0);
      rtx last_addr
 = force_operand (gen_rtx_fmt_ee (MINUS, (0 ? DImode : SImode),
      (global_rtl[GR_STACK_POINTER]),
      plus_constant_wide ((size), (long) (first))),
    (rtx) 0);
      rtx incr = gen_rtx_CONST_INT (VOIDmode, (long) (4096));
      rtx loop_lab = gen_label_rtx ();
      rtx test_lab = gen_label_rtx ();
      rtx end_lab = gen_label_rtx ();
      rtx temp;
      if (!(((enum rtx_code) (test_addr)->code) == REG)
   || (((test_addr)->u.fld[0]).rtuint) < 53)
 test_addr = force_reg ((0 ? DImode : SImode), test_addr);
      emit_jump (test_lab);
      emit_label (loop_lab);
      emit_stack_probe (test_addr);
      temp = expand_binop ((0 ? DImode : SImode), (optab_table[OTI_sub]), test_addr, incr, test_addr,
      1, OPTAB_WIDEN);
      if (temp != test_addr)
 abort ();
      emit_label (test_lab);
      emit_cmp_and_jump_insns (test_addr, last_addr, GTU,
          (rtx) 0, (0 ? DImode : SImode), 1, loop_lab);
      emit_jump (end_lab);
      emit_label (end_lab);
      emit_stack_probe (last_addr);
    }
}
rtx
hard_function_value (tree valtype, tree func ,
       int outgoing )
{
  rtx val;
    val = ix86_function_value (valtype);
  if ((((enum rtx_code) (val)->code) == REG)
      && ((enum machine_mode) (val)->mode) == BLKmode)
    {
      unsigned long bytes = int_size_in_bytes (valtype);
      enum machine_mode tmpmode;
      for (tmpmode = class_narrowest_mode[MODE_INT];
    tmpmode != VOIDmode;
    tmpmode = mode_wider[tmpmode])
 {
   if (((unsigned short) mode_size[tmpmode]) >= bytes)
     break;
 }
      if (tmpmode == VOIDmode)
 abort ();
      ((val)->mode = (tmpmode));
    }
  return val;
}
rtx
hard_libcall_value (enum machine_mode mode)
{
  return ix86_libcall_value (mode);
}
int
rtx_to_tree_code (enum rtx_code code)
{
  enum tree_code tcode;
  switch (code)
    {
    case PLUS:
      tcode = PLUS_EXPR;
      break;
    case MINUS:
      tcode = MINUS_EXPR;
      break;
    case MULT:
      tcode = MULT_EXPR;
      break;
    case DIV:
      tcode = RDIV_EXPR;
      break;
    case SMIN:
      tcode = MIN_EXPR;
      break;
    case SMAX:
      tcode = MAX_EXPR;
      break;
    default:
      tcode = LAST_AND_UNUSED_TREE_CODE;
      break;
    }
  return ((int) tcode);
}
const struct ggc_root_tab gt_ggc_r_gt_explow_h[] = {
  {
    &stack_check_libfunc,
    1,
    sizeof (stack_check_libfunc),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
struct insn_iv_info
{
  unsigned luid;
  rtx prev_def;
  struct rtx_iv iv;
};
static struct insn_iv_info *insn_iv_info;
static rtx *last_def;
static struct rtx_iv *bivs;
static unsigned max_insn_no;
static unsigned max_reg_no;
extern void dump_iv_info (FILE *, struct rtx_iv *);
void
dump_iv_info (FILE *file, struct rtx_iv *iv)
{
  if (!iv->base)
    {
      fprintf (file, "not simple");
      return;
    }
  if (iv->step == (const_int_rtx[64]))
    {
      fprintf (file, "invariant ");
      print_rtl (file, iv->base);
      return;
    }
  print_rtl (file, iv->base);
  fprintf (file, " + ");
  print_rtl (file, iv->step);
  fprintf (file, " * iteration");
  fprintf (file, " (in %s)", mode_name[iv->mode]);
  if (iv->mode != iv->extend_mode)
    fprintf (file, " %s to %s",
      rtx_name[iv->extend],
      mode_name[iv->extend_mode]);
  if (iv->mult != (const_int_rtx[64 +1]))
    {
      fprintf (file, " * ");
      print_rtl (file, iv->mult);
    }
  if (iv->delta != (const_int_rtx[64]))
    {
      fprintf (file, " + ");
      print_rtl (file, iv->delta);
    }
  if (iv->first_special)
    fprintf (file, " (first special)");
}
static void
assign_luids (basic_block bb)
{
  unsigned i = 0, uid;
  rtx insn;
  for ((insn) = (bb)->head_; (insn) != ((((bb)->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1))
    {
      uid = (((insn)->u.fld[0]).rtint);
      insn_iv_info[uid].luid = i++;
      insn_iv_info[uid].prev_def = (rtx) 0;
      insn_iv_info[uid].iv.analysed = 0;
    }
}
static rtx
lowpart_subreg (enum machine_mode outer_mode, rtx expr,
  enum machine_mode inner_mode)
{
  return simplify_gen_subreg (outer_mode, expr, inner_mode,
         subreg_lowpart_offset (outer_mode, inner_mode));
}
static unsigned char
simple_reg_p (rtx reg)
{
  unsigned r;
  if (((enum rtx_code) (reg)->code) == SUBREG)
    {
      if (!subreg_lowpart_p (reg))
 return 0;
      reg = (((reg)->u.fld[0]).rtx1);
    }
  if (!(((enum rtx_code) (reg)->code) == REG))
    return 0;
  r = (((reg)->u.fld[0]).rtuint);
  if (((r) < 53))
    return 0;
  if (mode_class[((enum machine_mode) (reg)->mode)] != MODE_INT)
    return 0;
  if (last_def[r] == (const_int_rtx[64]))
    return 0;
  return 1;
}
static unsigned char
simple_set_p (rtx lhs, rtx rhs)
{
  rtx op0, op1;
  if (!(((enum rtx_code) (lhs)->code) == REG)
      || !simple_reg_p (lhs))
    return 0;
  if (((rtx_class[(int) (((enum rtx_code) (rhs)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (rhs)->code) == CONST_VECTOR))
    return 1;
  switch (((enum rtx_code) (rhs)->code))
    {
    case SUBREG:
    case REG:
      return simple_reg_p (rhs);
    case SIGN_EXTEND:
    case ZERO_EXTEND:
    case NEG:
      return simple_reg_p ((((rhs)->u.fld[0]).rtx1));
    case PLUS:
    case MINUS:
    case MULT:
    case ASHIFT:
      op0 = (((rhs)->u.fld[0]).rtx1);
      op1 = (((rhs)->u.fld[1]).rtx1);
      if (!simple_reg_p (op0)
   && !((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
 return 0;
      if (!simple_reg_p (op1)
   && !((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op1)->code) == CONST_VECTOR))
 return 0;
      if (((enum rtx_code) (rhs)->code) == MULT
   && !((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR)
   && !((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op1)->code) == CONST_VECTOR))
 return 0;
      if (((enum rtx_code) (rhs)->code) == ASHIFT
   && ((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
 return 0;
      return 1;
    default:
      return 0;
    }
}
static rtx
mark_single_set (rtx insn, rtx set)
{
  rtx def = (((set)->u.fld[0]).rtx1), src;
  unsigned regno, uid;
  src = find_reg_equal_equiv_note (insn);
  if (src)
    src = (((src)->u.fld[0]).rtx1);
  else
    src = (((set)->u.fld[1]).rtx1);
  if (!simple_set_p ((((set)->u.fld[0]).rtx1), src))
    return (rtx) 0;
  regno = (((def)->u.fld[0]).rtuint);
  uid = (((insn)->u.fld[0]).rtint);
  bivs[regno].analysed = 0;
  insn_iv_info[uid].prev_def = last_def[regno];
  last_def[regno] = insn;
  return def;
}
static void
kill_sets (rtx reg, rtx by , void *except)
{
  if (((enum rtx_code) (reg)->code) == SUBREG)
    reg = (((reg)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (reg)->code) == REG))
    return;
  if (reg == except)
    return;
  last_def[(((reg)->u.fld[0]).rtuint)] = (const_int_rtx[64]);
}
static void
mark_sets (basic_block bb, unsigned char dom)
{
  rtx insn, set, def;
  for ((insn) = (bb)->head_; (insn) != ((((bb)->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1))
    {
      if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      if (dom
   && (set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)))
 def = mark_single_set (insn, set);
      else
 def = (rtx) 0;
      note_stores ((((insn)->u.fld[5]).rtx1), kill_sets, def);
    }
}
void
iv_analysis_loop_init (struct loop *loop)
{
  basic_block *body = get_loop_body_in_dom_order (loop);
  unsigned b;
  if ((unsigned) get_max_uid () >= max_insn_no)
    {
      max_insn_no = get_max_uid () + 100;
      if (insn_iv_info)
 free (insn_iv_info);
      insn_iv_info = xmalloc (max_insn_no * sizeof (struct insn_iv_info));
    }
  if ((unsigned) max_reg_num () >= max_reg_no)
    {
      max_reg_no = max_reg_num () + 100;
      if (last_def)
 free (last_def);
      last_def = xmalloc (max_reg_no * sizeof (rtx));
      if (bivs)
 free (bivs);
      bivs = xmalloc (max_reg_no * sizeof (struct rtx_iv));
    }
  memset (last_def, 0, max_reg_num () * sizeof (rtx));
  for (b = 0; b < loop->num_nodes; b++)
    {
      assign_luids (body[b]);
      mark_sets (body[b], just_once_each_iteration_p (loop, body[b]));
    }
  free (body);
}
rtx
iv_get_reaching_def (rtx insn, rtx reg)
{
  unsigned regno, luid, auid;
  rtx ainsn;
  basic_block bb, abb;
  if (((enum rtx_code) (reg)->code) == SUBREG)
    {
      if (!subreg_lowpart_p (reg))
 return (const_int_rtx[64]);
      reg = (((reg)->u.fld[0]).rtx1);
    }
  if (!(((enum rtx_code) (reg)->code) == REG))
    return (rtx) 0;
  regno = (((reg)->u.fld[0]).rtuint);
  if (!last_def[regno]
      || last_def[regno] == (const_int_rtx[64]))
    return last_def[regno];
  bb = (((insn)->u.fld[3]).bb);
  luid = insn_iv_info[(((insn)->u.fld[0]).rtint)].luid;
  ainsn = last_def[regno];
  while (1)
    {
      abb = (((ainsn)->u.fld[3]).bb);
      if (dominated_by_p (CDI_DOMINATORS, bb, abb))
 break;
      auid = (((ainsn)->u.fld[0]).rtint);
      ainsn = insn_iv_info[auid].prev_def;
      if (!ainsn)
 return (rtx) 0;
    }
  while (1)
    {
      abb = (((ainsn)->u.fld[3]).bb);
      if (abb != bb)
 return ainsn;
      auid = (((ainsn)->u.fld[0]).rtint);
      if (luid > insn_iv_info[auid].luid)
 return ainsn;
      ainsn = insn_iv_info[auid].prev_def;
      if (!ainsn)
 return (rtx) 0;
    }
}
static unsigned char
iv_constant (struct rtx_iv *iv, rtx cst, enum machine_mode mode)
{
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (cst)->mode);
  iv->analysed = 1;
  iv->mode = mode;
  iv->base = cst;
  iv->step = (const_int_rtx[64]);
  iv->first_special = 0;
  iv->extend = NIL;
  iv->extend_mode = iv->mode;
  iv->delta = (const_int_rtx[64]);
  iv->mult = (const_int_rtx[64 +1]);
  return 1;
}
static unsigned char
iv_subreg (struct rtx_iv *iv, enum machine_mode mode)
{
  if (iv->extend_mode == mode)
    return 1;
  if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) > ((unsigned short) (((unsigned short) mode_size[iv->mode]) * 8)))
    return 0;
  iv->extend = NIL;
  iv->mode = mode;
  iv->base = simplify_gen_binary (PLUS, iv->extend_mode, iv->delta,
      simplify_gen_binary (MULT, iv->extend_mode,
             iv->base, iv->mult));
  iv->step = simplify_gen_binary (MULT, iv->extend_mode, iv->step, iv->mult);
  iv->mult = (const_int_rtx[64 +1]);
  iv->delta = (const_int_rtx[64]);
  iv->first_special = 0;
  return 1;
}
static unsigned char
iv_extend (struct rtx_iv *iv, enum rtx_code extend, enum machine_mode mode)
{
  if (mode != iv->extend_mode)
    return 0;
  if (iv->extend != NIL
      && iv->extend != extend)
    return 0;
  iv->extend = extend;
  return 1;
}
static unsigned char
iv_neg (struct rtx_iv *iv)
{
  if (iv->extend == NIL)
    {
      iv->base = simplify_gen_unary (NEG, iv->extend_mode,
         iv->base, iv->extend_mode);
      iv->step = simplify_gen_unary (NEG, iv->extend_mode,
         iv->step, iv->extend_mode);
    }
  else
    {
      iv->delta = simplify_gen_unary (NEG, iv->extend_mode,
          iv->delta, iv->extend_mode);
      iv->mult = simplify_gen_unary (NEG, iv->extend_mode,
         iv->mult, iv->extend_mode);
    }
  return 1;
}
static unsigned char
iv_add (struct rtx_iv *iv0, struct rtx_iv *iv1, enum rtx_code op)
{
  enum machine_mode mode;
  rtx arg;
  if (iv0->extend == NIL
      && iv0->mode == iv0->extend_mode
      && iv0->step == (const_int_rtx[64])
      && ((unsigned short) mode_size[iv0->extend_mode]) < ((unsigned short) mode_size[iv1->extend_mode]))
    {
      iv0->extend_mode = iv1->extend_mode;
      iv0->base = simplify_gen_unary (ZERO_EXTEND, iv0->extend_mode,
          iv0->base, iv0->mode);
    }
  if (iv1->extend == NIL
      && iv1->mode == iv1->extend_mode
      && iv1->step == (const_int_rtx[64])
      && ((unsigned short) mode_size[iv1->extend_mode]) < ((unsigned short) mode_size[iv0->extend_mode]))
    {
      iv1->extend_mode = iv0->extend_mode;
      iv1->base = simplify_gen_unary (ZERO_EXTEND, iv1->extend_mode,
          iv1->base, iv1->mode);
    }
  mode = iv0->extend_mode;
  if (mode != iv1->extend_mode)
    return 0;
  if (iv0->extend == NIL && iv1->extend == NIL)
    {
      if (iv0->mode != iv1->mode)
 return 0;
      iv0->base = simplify_gen_binary (op, mode, iv0->base, iv1->base);
      iv0->step = simplify_gen_binary (op, mode, iv0->step, iv1->step);
      return 1;
    }
  if (iv1->extend == NIL
      && iv1->mode == mode
      && iv1->step == (const_int_rtx[64]))
    {
      iv0->delta = simplify_gen_binary (op, mode, iv0->delta, iv1->base);
      return 1;
    }
  if (iv0->extend == NIL
      && iv0->mode == mode
      && iv0->step == (const_int_rtx[64]))
    {
      arg = iv0->base;
      *iv0 = *iv1;
      if (op == MINUS
   && !iv_neg (iv0))
 return 0;
      iv0->delta = simplify_gen_binary (PLUS, mode, iv0->delta, arg);
      return 1;
    }
  return 0;
}
static unsigned char
iv_mult (struct rtx_iv *iv, rtx mby)
{
  enum machine_mode mode = iv->extend_mode;
  if (((enum machine_mode) (mby)->mode) != VOIDmode
      && ((enum machine_mode) (mby)->mode) != mode)
    return 0;
  if (iv->extend == NIL)
    {
      iv->base = simplify_gen_binary (MULT, mode, iv->base, mby);
      iv->step = simplify_gen_binary (MULT, mode, iv->step, mby);
    }
  else
    {
      iv->delta = simplify_gen_binary (MULT, mode, iv->delta, mby);
      iv->mult = simplify_gen_binary (MULT, mode, iv->mult, mby);
    }
  return 1;
}
static unsigned char
iv_shift (struct rtx_iv *iv, rtx mby)
{
  enum machine_mode mode = iv->extend_mode;
  if (((enum machine_mode) (mby)->mode) != VOIDmode
      && ((enum machine_mode) (mby)->mode) != mode)
    return 0;
  if (iv->extend == NIL)
    {
      iv->base = simplify_gen_binary (ASHIFT, mode, iv->base, mby);
      iv->step = simplify_gen_binary (ASHIFT, mode, iv->step, mby);
    }
  else
    {
      iv->delta = simplify_gen_binary (ASHIFT, mode, iv->delta, mby);
      iv->mult = simplify_gen_binary (ASHIFT, mode, iv->mult, mby);
    }
  return 1;
}
static unsigned char
get_biv_step_1 (rtx insn, rtx reg,
  rtx *inner_step, enum machine_mode *inner_mode,
  enum rtx_code *extend, enum machine_mode outer_mode,
  rtx *outer_step)
{
  rtx set, lhs, rhs, op0 = (rtx) 0, op1 = (rtx) 0;
  rtx next, nextr, def_insn, tmp;
  enum rtx_code code;
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  rhs = find_reg_equal_equiv_note (insn);
  if (rhs)
    rhs = (((rhs)->u.fld[0]).rtx1);
  else
    rhs = (((set)->u.fld[1]).rtx1);
  lhs = (((set)->u.fld[0]).rtx1);
  code = ((enum rtx_code) (rhs)->code);
  switch (code)
    {
    case SUBREG:
    case REG:
      next = rhs;
      break;
    case PLUS:
    case MINUS:
      op0 = (((rhs)->u.fld[0]).rtx1);
      op1 = (((rhs)->u.fld[1]).rtx1);
      if (code == PLUS && ((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
 {
   tmp = op0; op0 = op1; op1 = tmp;
 }
      if (!simple_reg_p (op0)
   || !((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op1)->code) == CONST_VECTOR))
 return 0;
      if (((enum machine_mode) (rhs)->mode) != outer_mode)
 {
   if (((enum rtx_code) (op0)->code) != SUBREG)
     return 0;
   if (((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode) != outer_mode)
     return 0;
 }
      next = op0;
      break;
    case SIGN_EXTEND:
    case ZERO_EXTEND:
      if (((enum machine_mode) (rhs)->mode) != outer_mode)
 return 0;
      op0 = (((rhs)->u.fld[0]).rtx1);
      if (!simple_reg_p (op0))
 return 0;
      next = op0;
      break;
    default:
      return 0;
    }
  if (((enum rtx_code) (next)->code) == SUBREG)
    {
      if (!subreg_lowpart_p (next))
 return 0;
      nextr = (((next)->u.fld[0]).rtx1);
      if (((enum machine_mode) (nextr)->mode) != outer_mode)
 return 0;
    }
  else
    nextr = next;
  def_insn = iv_get_reaching_def (insn, nextr);
  if (def_insn == (const_int_rtx[64]))
    return 0;
  if (!def_insn)
    {
      if (!rtx_equal_p (nextr, reg))
 return 0;
      *inner_step = (const_int_rtx[64]);
      *extend = NIL;
      *inner_mode = outer_mode;
      *outer_step = (const_int_rtx[64]);
    }
  else if (!get_biv_step_1 (def_insn, reg,
       inner_step, inner_mode, extend, outer_mode,
       outer_step))
    return 0;
  if (((enum rtx_code) (next)->code) == SUBREG)
    {
      enum machine_mode amode = ((enum machine_mode) (next)->mode);
      if (((unsigned short) mode_size[amode]) > ((unsigned short) mode_size[*inner_mode]))
 return 0;
      *inner_mode = amode;
      *inner_step = simplify_gen_binary (PLUS, outer_mode,
      *inner_step, *outer_step);
      *outer_step = (const_int_rtx[64]);
      *extend = NIL;
    }
  switch (code)
    {
    case REG:
    case SUBREG:
      break;
    case PLUS:
    case MINUS:
      if (*inner_mode == outer_mode
   || ((enum machine_mode) (rhs)->mode) != outer_mode)
 *inner_step = simplify_gen_binary (code, outer_mode,
        *inner_step, op1);
      else
 *outer_step = simplify_gen_binary (code, outer_mode,
        *outer_step, op1);
      break;
    case SIGN_EXTEND:
    case ZERO_EXTEND:
      if (((enum machine_mode) (op0)->mode) != *inner_mode
   || *extend != NIL
   || *outer_step != (const_int_rtx[64]))
 abort ();
      *extend = code;
      break;
    default:
      abort ();
    }
  return 1;
}
static unsigned char
get_biv_step (rtx reg, rtx *inner_step, enum machine_mode *inner_mode,
       enum rtx_code *extend, enum machine_mode *outer_mode,
       rtx *outer_step)
{
  *outer_mode = ((enum machine_mode) (reg)->mode);
  if (!get_biv_step_1 (last_def[(((reg)->u.fld[0]).rtuint)], reg,
         inner_step, inner_mode, extend, *outer_mode,
         outer_step))
    return 0;
  if (*inner_mode != *outer_mode
      && *extend == NIL)
    abort ();
  if (*inner_mode == *outer_mode
      && *extend != NIL)
    abort ();
  if (*inner_mode == *outer_mode
      && *outer_step != (const_int_rtx[64]))
    abort ();
  return 1;
}
static unsigned char
iv_analyze_biv (rtx def, struct rtx_iv *iv)
{
  unsigned regno;
  rtx inner_step, outer_step;
  enum machine_mode inner_mode, outer_mode;
  enum rtx_code extend;
  if (dump_file)
    {
      fprintf (dump_file, "Analysing ");
      print_rtl (dump_file, def);
      fprintf (dump_file, " for bivness.\n");
    }
  if (!(((enum rtx_code) (def)->code) == REG))
    {
      if (!((rtx_class[(int) (((enum rtx_code) (def)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (def)->code) == CONST_VECTOR))
 return 0;
      return iv_constant (iv, def, VOIDmode);
    }
  regno = (((def)->u.fld[0]).rtuint);
  if (last_def[regno] == (const_int_rtx[64]))
    {
      if (dump_file)
 fprintf (dump_file, "  not simple.\n");
      return 0;
    }
  if (last_def[regno] && bivs[regno].analysed)
    {
      if (dump_file)
 fprintf (dump_file, "  already analysed.\n");
      *iv = bivs[regno];
      return iv->base != (rtx) 0;
    }
  if (!last_def[regno])
    {
      iv_constant (iv, def, VOIDmode);
      goto end;
    }
  iv->analysed = 1;
  if (!get_biv_step (def, &inner_step, &inner_mode, &extend,
       &outer_mode, &outer_step))
    {
      iv->base = (rtx) 0;
      goto end;
    }
  iv->base = simplify_gen_binary (MINUS, outer_mode, def, outer_step);
  iv->step = simplify_gen_binary (PLUS, outer_mode, inner_step, outer_step);
  iv->mode = inner_mode;
  iv->extend_mode = outer_mode;
  iv->extend = extend;
  iv->mult = (const_int_rtx[64 +1]);
  iv->delta = outer_step;
  iv->first_special = inner_mode != outer_mode;
 end:
  if (dump_file)
    {
      fprintf (dump_file, "  ");
      dump_iv_info (dump_file, iv);
      fprintf (dump_file, "\n");
    }
  bivs[regno] = *iv;
  return iv->base != (rtx) 0;
}
static unsigned char
iv_analyze_op (rtx insn, rtx op, struct rtx_iv *iv)
{
  rtx def_insn;
  unsigned regno;
  unsigned char inv = ((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR);
  if (dump_file)
    {
      fprintf (dump_file, "Analysing operand ");
      print_rtl (dump_file, op);
      fprintf (dump_file, " of insn ");
      print_rtl_single (dump_file, insn);
    }
  if (((enum rtx_code) (op)->code) == SUBREG)
    {
      if (!subreg_lowpart_p (op))
 return 0;
      if (!iv_analyze_op (insn, (((op)->u.fld[0]).rtx1), iv))
 return 0;
      return iv_subreg (iv, ((enum machine_mode) (op)->mode));
    }
  if (!inv)
    {
      regno = (((op)->u.fld[0]).rtuint);
      if (!last_def[regno])
 inv = 1;
      else if (last_def[regno] == (const_int_rtx[64]))
 {
   if (dump_file)
     fprintf (dump_file, "  not simple.\n");
   return 0;
 }
    }
  if (inv)
    {
      iv_constant (iv, op, VOIDmode);
      if (dump_file)
 {
   fprintf (dump_file, "  ");
   dump_iv_info (dump_file, iv);
   fprintf (dump_file, "\n");
 }
      return 1;
    }
  def_insn = iv_get_reaching_def (insn, op);
  if (def_insn == (const_int_rtx[64]))
    {
      if (dump_file)
 fprintf (dump_file, "  not simple.\n");
      return 0;
    }
  return iv_analyze (def_insn, op, iv);
}
unsigned char
iv_analyze (rtx insn, rtx def, struct rtx_iv *iv)
{
  unsigned uid;
  rtx set, rhs, mby = (rtx) 0, tmp;
  rtx op0 = (rtx) 0, op1 = (rtx) 0;
  struct rtx_iv iv0, iv1;
  enum machine_mode amode;
  enum rtx_code code;
  if (insn == (const_int_rtx[64]))
    return 0;
  if (((enum rtx_code) (def)->code) == SUBREG)
    {
      if (!subreg_lowpart_p (def))
 return 0;
      if (!iv_analyze (insn, (((def)->u.fld[0]).rtx1), iv))
 return 0;
      return iv_subreg (iv, ((enum machine_mode) (def)->mode));
    }
  if (!insn)
    return iv_analyze_biv (def, iv);
  if (dump_file)
    {
      fprintf (dump_file, "Analysing def of ");
      print_rtl (dump_file, def);
      fprintf (dump_file, " in insn ");
      print_rtl_single (dump_file, insn);
    }
  uid = (((insn)->u.fld[0]).rtint);
  if (insn_iv_info[uid].iv.analysed)
    {
      if (dump_file)
 fprintf (dump_file, "  already analysed.\n");
      *iv = insn_iv_info[uid].iv;
      return iv->base != (rtx) 0;
    }
  iv->mode = VOIDmode;
  iv->base = (rtx) 0;
  iv->step = (rtx) 0;
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  rhs = find_reg_equal_equiv_note (insn);
  if (rhs)
    rhs = (((rhs)->u.fld[0]).rtx1);
  else
    rhs = (((set)->u.fld[1]).rtx1);
  code = ((enum rtx_code) (rhs)->code);
  if (((rtx_class[(int) (((enum rtx_code) (rhs)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (rhs)->code) == CONST_VECTOR))
    {
      op0 = rhs;
      amode = ((enum machine_mode) (def)->mode);
    }
  else
    {
      switch (code)
 {
 case SUBREG:
   if (!subreg_lowpart_p (rhs))
     goto end;
   op0 = rhs;
   break;
 case REG:
   op0 = rhs;
   break;
 case SIGN_EXTEND:
 case ZERO_EXTEND:
 case NEG:
   op0 = (((rhs)->u.fld[0]).rtx1);
   break;
 case PLUS:
 case MINUS:
   op0 = (((rhs)->u.fld[0]).rtx1);
   op1 = (((rhs)->u.fld[1]).rtx1);
   break;
 case MULT:
   op0 = (((rhs)->u.fld[0]).rtx1);
   mby = (((rhs)->u.fld[1]).rtx1);
   if (!((rtx_class[(int) (((enum rtx_code) (mby)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (mby)->code) == CONST_VECTOR))
     {
       if (!((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
  abort ();
       tmp = op0;
       op0 = mby;
       mby = tmp;
     }
   break;
 case ASHIFT:
   if (((rtx_class[(int) (((enum rtx_code) ((((rhs)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((rhs)->u.fld[0]).rtx1))->code) == CONST_VECTOR))
     abort ();
   op0 = (((rhs)->u.fld[0]).rtx1);
   mby = (((rhs)->u.fld[1]).rtx1);
   break;
 default:
   abort ();
 }
      amode = ((enum machine_mode) (rhs)->mode);
    }
  if (op0)
    {
      if (!iv_analyze_op (insn, op0, &iv0))
 goto end;
      if (iv0.mode == VOIDmode)
 {
   iv0.mode = amode;
   iv0.extend_mode = amode;
 }
    }
  if (op1)
    {
      if (!iv_analyze_op (insn, op1, &iv1))
 goto end;
      if (iv1.mode == VOIDmode)
 {
   iv1.mode = amode;
   iv1.extend_mode = amode;
 }
    }
  switch (code)
    {
    case SIGN_EXTEND:
    case ZERO_EXTEND:
      if (!iv_extend (&iv0, code, amode))
 goto end;
      break;
    case NEG:
      if (!iv_neg (&iv0))
 goto end;
      break;
    case PLUS:
    case MINUS:
      if (!iv_add (&iv0, &iv1, code))
 goto end;
      break;
    case MULT:
      if (!iv_mult (&iv0, mby))
 goto end;
      break;
    case ASHIFT:
      if (!iv_shift (&iv0, mby))
 goto end;
      break;
    default:
      break;
    }
  *iv = iv0;
 end:
  iv->analysed = 1;
  insn_iv_info[uid].iv = *iv;
  if (dump_file)
    {
      print_rtl (dump_file, def);
      fprintf (dump_file, " in insn ");
      print_rtl_single (dump_file, insn);
      fprintf (dump_file, "  is ");
      dump_iv_info (dump_file, iv);
      fprintf (dump_file, "\n");
    }
  return iv->base != (rtx) 0;
}
rtx
get_iv_value (struct rtx_iv *iv, rtx iteration)
{
  rtx val;
  if (iv->first_special)
    abort ();
  if (iv->step != (const_int_rtx[64]) && iteration != (const_int_rtx[64]))
    val = simplify_gen_binary (PLUS, iv->extend_mode, iv->base,
          simplify_gen_binary (MULT, iv->extend_mode,
          iv->step, iteration));
  else
    val = iv->base;
  if (iv->extend_mode == iv->mode)
    return val;
  val = lowpart_subreg (iv->mode, val, iv->extend_mode);
  if (iv->extend == NIL)
    return val;
  val = simplify_gen_unary (iv->extend, iv->extend_mode, val, iv->mode);
  val = simplify_gen_binary (PLUS, iv->extend_mode, iv->delta,
        simplify_gen_binary (MULT, iv->extend_mode,
        iv->mult, val));
  return val;
}
void
iv_analysis_done (void)
{
  max_insn_no = 0;
  max_reg_no = 0;
  if (insn_iv_info)
    {
      free (insn_iv_info);
      insn_iv_info = ((void *)0);
    }
  if (last_def)
    {
      free (last_def);
      last_def = ((void *)0);
    }
  if (bivs)
    {
      free (bivs);
      bivs = ((void *)0);
    }
}
static unsigned long long
inverse (unsigned long long x, int mod)
{
  unsigned long long mask =
   ((unsigned long long) 1 << (mod - 1) << 1) - 1;
  unsigned long long rslt = 1;
  int i;
  for (i = 0; i < mod - 1; i++)
    {
      rslt = (rslt * x) & mask;
      x = (x * x) & mask;
    }
  return rslt;
}
static unsigned long long
determine_max_iter (struct niter_desc *desc)
{
  rtx niter = desc->niter_expr;
  rtx mmin, mmax, left, right;
  unsigned long long nmax, inc;
  if (((enum rtx_code) (niter)->code) == AND
      && ((enum rtx_code) ((((niter)->u.fld[0]).rtx1))->code) == CONST_INT)
    {
      nmax = (((((niter)->u.fld[0]).rtx1))->u.hwint[0]);
      if (!(nmax & (nmax + 1)))
 {
   desc->niter_max = nmax;
   return nmax;
 }
    }
  get_mode_bounds (desc->mode, desc->signed_p, desc->mode, &mmin, &mmax);
  nmax = ((mmax)->u.hwint[0]) - ((mmin)->u.hwint[0]);
  if (((enum rtx_code) (niter)->code) == UDIV)
    {
      if (((enum rtx_code) ((((niter)->u.fld[1]).rtx1))->code) != CONST_INT)
 {
   desc->niter_max = nmax;
   return nmax;
 }
      inc = (((((niter)->u.fld[1]).rtx1))->u.hwint[0]);
      niter = (((niter)->u.fld[0]).rtx1);
    }
  else
    inc = 1;
  if (((enum rtx_code) (niter)->code) == PLUS)
    {
      left = (((niter)->u.fld[0]).rtx1);
      right = (((niter)->u.fld[0]).rtx1);
      if (((enum rtx_code) (right)->code) == CONST_INT)
 right = gen_rtx_CONST_INT (VOIDmode, (long) (-((right)->u.hwint[0])));
    }
  else if (((enum rtx_code) (niter)->code) == MINUS)
    {
      left = (((niter)->u.fld[0]).rtx1);
      right = (((niter)->u.fld[0]).rtx1);
    }
  else
    {
      left = niter;
      right = mmin;
    }
  if (((enum rtx_code) (left)->code) == CONST_INT)
    mmax = left;
  if (((enum rtx_code) (right)->code) == CONST_INT)
    mmin = right;
  nmax = ((mmax)->u.hwint[0]) - ((mmin)->u.hwint[0]);
  desc->niter_max = nmax / inc;
  return nmax / inc;
}
static int
altered_reg_used (rtx *reg, void *alt)
{
  if (!(((enum rtx_code) (*reg)->code) == REG))
    return 0;
  return bitmap_bit_p (alt, (((*reg)->u.fld[0]).rtuint));
}
static void
mark_altered (rtx expr, rtx by , void *alt)
{
  if (((enum rtx_code) (expr)->code) == SUBREG)
    expr = (((expr)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (expr)->code) == REG))
    return;
  bitmap_set_bit (alt, (((expr)->u.fld[0]).rtuint));
}
static unsigned char
simple_rhs_p (rtx rhs)
{
  rtx op0, op1;
  if (((rtx_class[(int) (((enum rtx_code) (rhs)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (rhs)->code) == CONST_VECTOR)
      || (((enum rtx_code) (rhs)->code) == REG))
    return 1;
  switch (((enum rtx_code) (rhs)->code))
    {
    case PLUS:
    case MINUS:
      op0 = (((rhs)->u.fld[0]).rtx1);
      op1 = (((rhs)->u.fld[1]).rtx1);
      if ((((enum rtx_code) (op0)->code) == REG) && ((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op1)->code) == CONST_VECTOR))
 return 1;
      if ((((enum rtx_code) (op1)->code) == REG) && ((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
 return 1;
      return 0;
    default:
      return 0;
    }
}
static void
simplify_using_assignment (rtx insn, rtx *expr, regset altered)
{
  rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  rtx lhs, rhs;
  unsigned char ret = 0;
  if (set)
    {
      lhs = (((set)->u.fld[0]).rtx1);
      if (!(((enum rtx_code) (lhs)->code) == REG)
   || altered_reg_used (&lhs, altered))
 ret = 1;
    }
  else
    ret = 1;
  note_stores ((((insn)->u.fld[5]).rtx1), mark_altered, altered);
  if (((enum rtx_code) (insn)->code) == CALL_INSN)
    {
      int i;
      for (i = 0; i < 53; i++)
 if ((!!((regs_invalidated_by_call)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
   bitmap_set_bit (altered, i);
    }
  if (ret)
    return;
  rhs = find_reg_equal_equiv_note (insn);
  if (rhs)
    rhs = (((rhs)->u.fld[0]).rtx1);
  else
    rhs = (((set)->u.fld[1]).rtx1);
  if (!simple_rhs_p (rhs))
    return;
  if (for_each_rtx (&rhs, altered_reg_used, altered))
    return;
  *expr = simplify_replace_rtx (*expr, lhs, rhs);
}
static unsigned char
implies_p (rtx a, rtx b)
{
  rtx op0, op1, opb0, opb1, r;
  enum machine_mode mode;
  if (((enum rtx_code) (a)->code) == EQ)
    {
      op0 = (((a)->u.fld[0]).rtx1);
      op1 = (((a)->u.fld[1]).rtx1);
      if ((((enum rtx_code) (op0)->code) == REG))
 {
   r = simplify_replace_rtx (b, op0, op1);
   if (r == const_true_rtx)
     return 1;
 }
      if ((((enum rtx_code) (op1)->code) == REG))
 {
   r = simplify_replace_rtx (b, op1, op0);
   if (r == const_true_rtx)
     return 1;
 }
    }
  if ((((enum rtx_code) (a)->code) == GT || ((enum rtx_code) (a)->code) == LT)
      && (((enum rtx_code) (b)->code) == GE || ((enum rtx_code) (b)->code) == LE))
    {
      op0 = (((a)->u.fld[0]).rtx1);
      op1 = (((a)->u.fld[1]).rtx1);
      opb0 = (((b)->u.fld[0]).rtx1);
      opb1 = (((b)->u.fld[1]).rtx1);
      if (((enum rtx_code) (a)->code) == GT)
 {
   r = op0;
   op0 = op1;
   op1 = r;
 }
      if (((enum rtx_code) (b)->code) == GE)
 {
   r = opb0;
   opb0 = opb1;
   opb1 = r;
 }
      mode = ((enum machine_mode) (op0)->mode);
      if (mode != ((enum machine_mode) (opb0)->mode))
 mode = VOIDmode;
      else if (mode == VOIDmode)
 {
   mode = ((enum machine_mode) (op1)->mode);
   if (mode != ((enum machine_mode) (opb1)->mode))
     mode = VOIDmode;
 }
      if (mode != VOIDmode
   && rtx_equal_p (op1, opb1)
   && simplify_gen_binary (MINUS, mode, opb0, op0) == (const_int_rtx[64 +1]))
 return 1;
    }
  return 0;
}
rtx
canon_condition (rtx cond)
{
  rtx tem;
  rtx op0, op1;
  enum rtx_code code;
  enum machine_mode mode;
  code = ((enum rtx_code) (cond)->code);
  op0 = (((cond)->u.fld[0]).rtx1);
  op1 = (((cond)->u.fld[1]).rtx1);
  if (swap_commutative_operands_p (op0, op1))
    {
      code = swap_condition (code);
      tem = op0;
      op0 = op1;
      op1 = tem;
    }
  mode = ((enum machine_mode) (op0)->mode);
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (op1)->mode);
  if (mode == VOIDmode)
    abort ();
  if (((enum rtx_code) (op1)->code) == CONST_INT
      && mode_class[mode] != MODE_CC
      && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4))
    {
      long const_val = ((op1)->u.hwint[0]);
      unsigned long uconst_val = const_val;
      unsigned long max_val
 = (unsigned long) mode_mask_array[mode];
      switch (code)
 {
 case LE:
   if ((unsigned long) const_val != max_val >> 1)
     code = LT, op1 = gen_int_mode (const_val + 1, ((enum machine_mode) (op0)->mode));
   break;
 case GE:
   if ((long) (const_val & max_val)
       != (((long) 1
     << (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)) - 1))))
     code = GT, op1 = gen_int_mode (const_val - 1, mode);
   break;
 case LEU:
   if (uconst_val < max_val)
     code = LTU, op1 = gen_int_mode (uconst_val + 1, mode);
   break;
 case GEU:
   if (uconst_val != 0)
     code = GTU, op1 = gen_int_mode (uconst_val - 1, mode);
   break;
 default:
   break;
 }
    }
  if (op0 != (((cond)->u.fld[0]).rtx1)
      || op1 != (((cond)->u.fld[1]).rtx1)
      || code != ((enum rtx_code) (cond)->code)
      || ((enum machine_mode) (cond)->mode) != SImode)
    cond = gen_rtx_fmt_ee (code, SImode, op0, op1);
  return cond;
}
void
simplify_using_condition (rtx cond, rtx *expr, regset altered)
{
  rtx rev, reve, exp = *expr;
  if (!(((rtx_class[(int) (((enum rtx_code) (exp)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
    return;
  if (altered
      && for_each_rtx (&cond, altered_reg_used, altered))
    return;
  rev = reversed_condition (cond);
  reve = reversed_condition (exp);
  cond = canon_condition (cond);
  exp = canon_condition (exp);
  if (rev)
    rev = canon_condition (rev);
  if (reve)
    reve = canon_condition (reve);
  if (rtx_equal_p (exp, cond))
    {
      *expr = const_true_rtx;
      return;
    }
  if (rev && rtx_equal_p (exp, rev))
    {
      *expr = (const_int_rtx[64]);
      return;
    }
  if (implies_p (cond, exp))
    {
      *expr = const_true_rtx;
      return;
    }
  if (reve && implies_p (cond, reve))
    {
      *expr = (const_int_rtx[64]);
      return;
    }
  if (rev && implies_p (exp, rev))
    {
      *expr = (const_int_rtx[64]);
      return;
    }
  if (rev && reve && implies_p (reve, rev))
    {
      *expr = const_true_rtx;
      return;
    }
  return;
}
static void
eliminate_implied_condition (enum rtx_code op, rtx a, rtx *b)
{
  if (op == AND)
    {
      if (implies_p (a, *b))
 *b = const_true_rtx;
    }
  else if (op == IOR)
    {
      if (implies_p (*b, a))
 *b = (const_int_rtx[64]);
    }
  else
    abort ();
}
static void
eliminate_implied_conditions (enum rtx_code op, rtx *head, rtx tail)
{
  rtx elt;
  for (elt = tail; elt; elt = (((elt)->u.fld[1]).rtx1))
    eliminate_implied_condition (op, *head, &(((elt)->u.fld[0]).rtx1));
  for (elt = tail; elt; elt = (((elt)->u.fld[1]).rtx1))
    eliminate_implied_condition (op, (((elt)->u.fld[0]).rtx1), head);
}
static void
simplify_using_initial_values (struct loop *loop, enum rtx_code op, rtx *expr)
{
  rtx head, tail, insn;
  rtx neutral, aggr;
  regset altered;
  regset_head altered_head;
  edge e;
  if (!*expr)
    return;
  if (((rtx_class[(int) (((enum rtx_code) (*expr)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (*expr)->code) == CONST_VECTOR))
    return;
  if (((enum rtx_code) (*expr)->code) == EXPR_LIST)
    {
      head = (((*expr)->u.fld[0]).rtx1);
      tail = (((*expr)->u.fld[1]).rtx1);
      eliminate_implied_conditions (op, &head, tail);
      if (op == AND)
 {
   neutral = const_true_rtx;
   aggr = (const_int_rtx[64]);
 }
      else if (op == IOR)
 {
   neutral = (const_int_rtx[64]);
   aggr = const_true_rtx;
 }
      else
 abort ();
      simplify_using_initial_values (loop, NIL, &head);
      if (head == aggr)
 {
   (((*expr)->u.fld[0]).rtx1) = aggr;
   (((*expr)->u.fld[1]).rtx1) = (rtx) 0;
   return;
 }
      else if (head == neutral)
 {
   *expr = tail;
   simplify_using_initial_values (loop, op, expr);
   return;
 }
      simplify_using_initial_values (loop, op, &tail);
      if (tail && (((tail)->u.fld[0]).rtx1) == aggr)
 {
   *expr = tail;
   return;
 }
      (((*expr)->u.fld[0]).rtx1) = head;
      (((*expr)->u.fld[1]).rtx1) = tail;
      return;
    }
  if (op != NIL)
    abort ();
  e = loop_preheader_edge (loop);
  if (e->src == ENTRY_BLOCK_PTR)
    return;
  altered = bitmap_initialize (&altered_head, 1);
  while (1)
    {
      insn = (e->src)->end_;
      if (any_condjump_p (insn))
 {
   rtx cond = get_condition ((e->src)->end_, ((void *)0), 0);
   if (cond && (e->flags & 1))
     cond = reversed_condition (cond);
   if (cond)
     {
       simplify_using_condition (cond, expr, altered);
       if (((rtx_class[(int) (((enum rtx_code) (*expr)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (*expr)->code) == CONST_VECTOR))
  {
    do { if (altered) { bitmap_clear (altered); (altered) = 0; } } while (0);
    return;
  }
     }
 }
      for ((insn) = (e->src)->end_; (insn) != ((((e->src)->head_)->u.fld[1]).rtx1); (insn) = (((insn)->u.fld[1]).rtx1))
 {
   if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     continue;
   simplify_using_assignment (insn, expr, altered);
   if (((rtx_class[(int) (((enum rtx_code) (*expr)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (*expr)->code) == CONST_VECTOR))
     {
       do { if (altered) { bitmap_clear (altered); (altered) = 0; } } while (0);
       return;
     }
 }
      e = e->src->pred;
      if (e->pred_next
   || e->src == ENTRY_BLOCK_PTR)
 break;
    }
  do { if (altered) { bitmap_clear (altered); (altered) = 0; } } while (0);
}
static void
shorten_into_mode (struct rtx_iv *iv, enum machine_mode mode,
     enum rtx_code cond, unsigned char signed_p, struct niter_desc *desc)
{
  rtx mmin, mmax, cond_over, cond_under;
  get_mode_bounds (mode, signed_p, iv->extend_mode, &mmin, &mmax);
  cond_under = simplify_gen_relational (LT, SImode, iv->extend_mode,
     iv->base, mmin);
  cond_over = simplify_gen_relational (GT, SImode, iv->extend_mode,
           iv->base, mmax);
  switch (cond)
    {
      case LE:
      case LT:
      case LEU:
      case LTU:
 if (cond_under != (const_int_rtx[64]))
   desc->infinite =
    alloc_EXPR_LIST (0, cond_under, desc->infinite);
 if (cond_over != (const_int_rtx[64]))
   desc->noloop_assumptions =
    alloc_EXPR_LIST (0, cond_over, desc->noloop_assumptions);
 break;
      case GE:
      case GT:
      case GEU:
      case GTU:
 if (cond_over != (const_int_rtx[64]))
   desc->infinite =
    alloc_EXPR_LIST (0, cond_over, desc->infinite);
 if (cond_under != (const_int_rtx[64]))
   desc->noloop_assumptions =
    alloc_EXPR_LIST (0, cond_under, desc->noloop_assumptions);
 break;
      case NE:
 if (cond_over != (const_int_rtx[64]))
   desc->infinite =
    alloc_EXPR_LIST (0, cond_over, desc->infinite);
 if (cond_under != (const_int_rtx[64]))
   desc->infinite =
    alloc_EXPR_LIST (0, cond_under, desc->infinite);
 break;
      default:
 abort ();
    }
  iv->mode = mode;
  iv->extend = signed_p ? SIGN_EXTEND : ZERO_EXTEND;
}
static unsigned char
canonicalize_iv_subregs (struct rtx_iv *iv0, struct rtx_iv *iv1,
    enum rtx_code cond, struct niter_desc *desc)
{
  enum machine_mode comp_mode;
  unsigned char signed_p;
  if (iv0->first_special || iv0->mult != (const_int_rtx[64 +1]) || iv0->delta != (const_int_rtx[64]))
    return 0;
  if (iv1->first_special || iv1->mult != (const_int_rtx[64 +1]) || iv1->delta != (const_int_rtx[64]))
    return 0;
  switch (cond)
    {
      case LE:
      case LT:
 if (iv0->extend == ZERO_EXTEND
     || iv1->extend == ZERO_EXTEND)
   return 0;
 signed_p = 1;
 break;
      case LEU:
      case LTU:
 if (iv0->extend == SIGN_EXTEND
     || iv1->extend == SIGN_EXTEND)
   return 0;
 signed_p = 0;
 break;
      case NE:
 if (iv0->extend != NIL
     && iv1->extend != NIL
     && iv0->extend != iv1->extend)
   return 0;
 signed_p = 0;
 if (iv0->extend != NIL)
   signed_p = iv0->extend == SIGN_EXTEND;
 if (iv1->extend != NIL)
   signed_p = iv1->extend == SIGN_EXTEND;
 break;
      default:
 abort ();
    }
  comp_mode = iv0->extend_mode;
  if (((unsigned short) (((unsigned short) mode_size[comp_mode]) * 8)) < ((unsigned short) (((unsigned short) mode_size[iv1->extend_mode]) * 8)))
    comp_mode = iv1->extend_mode;
  if (iv0->extend_mode != comp_mode)
    {
      if (iv0->mode != iv0->extend_mode
   || iv0->step != (const_int_rtx[64]))
 return 0;
      iv0->base = simplify_gen_unary (signed_p ? SIGN_EXTEND : ZERO_EXTEND,
          comp_mode, iv0->base, iv0->mode);
      iv0->extend_mode = comp_mode;
    }
  if (iv1->extend_mode != comp_mode)
    {
      if (iv1->mode != iv1->extend_mode
   || iv1->step != (const_int_rtx[64]))
 return 0;
      iv1->base = simplify_gen_unary (signed_p ? SIGN_EXTEND : ZERO_EXTEND,
          comp_mode, iv1->base, iv1->mode);
      iv1->extend_mode = comp_mode;
    }
  if (iv0->mode == iv0->extend_mode
      && iv0->step == (const_int_rtx[64])
      && iv0->mode != iv1->mode)
    shorten_into_mode (iv0, iv1->mode, cond, signed_p, desc);
  if (iv1->mode == iv1->extend_mode
      && iv1->step == (const_int_rtx[64])
      && iv0->mode != iv1->mode)
    shorten_into_mode (iv1, iv0->mode, swap_condition (cond), signed_p, desc);
  if (iv0->mode != iv1->mode)
    return 0;
  desc->mode = iv0->mode;
  desc->signed_p = signed_p;
  return 1;
}
void
iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
    struct niter_desc *desc)
{
  rtx op0, op1, delta, step, bound, may_xform, def_insn, tmp, tmp0, tmp1;
  struct rtx_iv iv0, iv1, tmp_iv;
  rtx assumption, may_not_xform;
  enum rtx_code cond;
  enum machine_mode mode, comp_mode;
  rtx mmin, mmax, mode_mmin, mode_mmax;
  unsigned long long s, size, d, inv;
  long long up, down, inc;
  int was_sharp = 0;
  desc->assumptions = (rtx) 0;
  desc->noloop_assumptions = (rtx) 0;
  desc->infinite = (rtx) 0;
  desc->simple_p = 1;
  desc->const_iter = 0;
  desc->niter_expr = (rtx) 0;
  desc->niter_max = 0;
  cond = ((enum rtx_code) (condition)->code);
  if (!(((rtx_class[(int) (((enum rtx_code) (condition)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
    abort ();
  mode = ((enum machine_mode) ((((condition)->u.fld[0]).rtx1))->mode);
  if (mode == VOIDmode)
    mode = ((enum machine_mode) ((((condition)->u.fld[1]).rtx1))->mode);
  if (mode == VOIDmode)
    abort ();
  if (mode_class[mode] != MODE_INT
      && mode_class[mode] != MODE_PARTIAL_INT)
    goto fail;
  op0 = (((condition)->u.fld[0]).rtx1);
  def_insn = iv_get_reaching_def (insn, op0);
  if (!iv_analyze (def_insn, op0, &iv0))
    goto fail;
  if (iv0.extend_mode == VOIDmode)
    iv0.mode = iv0.extend_mode = mode;
  op1 = (((condition)->u.fld[1]).rtx1);
  def_insn = iv_get_reaching_def (insn, op1);
  if (!iv_analyze (def_insn, op1, &iv1))
    goto fail;
  if (iv1.extend_mode == VOIDmode)
    iv1.mode = iv1.extend_mode = mode;
  if (((unsigned short) (((unsigned short) mode_size[iv0.extend_mode]) * 8)) > (8 * 4)
      || ((unsigned short) (((unsigned short) mode_size[iv1.extend_mode]) * 8)) > (8 * 4))
    goto fail;
  switch (cond)
    {
      case GE:
      case GT:
      case GEU:
      case GTU:
 tmp_iv = iv0; iv0 = iv1; iv1 = tmp_iv;
 cond = swap_condition (cond);
 break;
      case NE:
      case LE:
      case LEU:
      case LT:
      case LTU:
 break;
      default:
 goto fail;
    }
  if (!canonicalize_iv_subregs (&iv0, &iv1, cond, desc))
    goto fail;
  comp_mode = iv0.extend_mode;
  mode = iv0.mode;
  size = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  get_mode_bounds (mode, (cond == LE || cond == LT), comp_mode, &mmin, &mmax);
  mode_mmin = lowpart_subreg (mode, mmin, comp_mode);
  mode_mmax = lowpart_subreg (mode, mmax, comp_mode);
  if (((enum rtx_code) (iv0.step)->code) != CONST_INT || ((enum rtx_code) (iv1.step)->code) != CONST_INT)
    goto fail;
  if (iv0.step != (const_int_rtx[64]) && iv1.step != (const_int_rtx[64]))
    {
      if (cond != NE)
 goto fail;
      iv0.step = simplify_gen_binary (MINUS, comp_mode, iv0.step, iv1.step);
      iv1.step = (const_int_rtx[64]);
    }
  if (iv0.step == (const_int_rtx[64]) && iv1.step == (const_int_rtx[64]))
    goto fail;
  if (cond != NE
      && (((iv0.step)->u.hwint[0]) < 0 || ((iv1.step)->u.hwint[0]) > 0))
    goto fail;
  switch (cond)
    {
      case LT:
      case LTU:
 if (iv0.step == (const_int_rtx[64]))
   {
     tmp = lowpart_subreg (mode, iv0.base, comp_mode);
     assumption = simplify_gen_relational (EQ, SImode, mode, tmp,
        mode_mmax);
     if (assumption == const_true_rtx)
       goto zero_iter;
     iv0.base = simplify_gen_binary (PLUS, comp_mode,
         iv0.base, (const_int_rtx[64 +1]));
   }
 else
   {
     tmp = lowpart_subreg (mode, iv1.base, comp_mode);
     assumption = simplify_gen_relational (EQ, SImode, mode, tmp,
        mode_mmin);
     if (assumption == const_true_rtx)
       goto zero_iter;
     iv1.base = simplify_gen_binary (PLUS, comp_mode,
         iv1.base, (const_int_rtx[64 -1]));
   }
 if (assumption != (const_int_rtx[64]))
   desc->noloop_assumptions =
    alloc_EXPR_LIST (0, assumption, desc->noloop_assumptions);
 cond = (cond == LT) ? LE : LEU;
 was_sharp = 1;
 break;
      default: ;
    }
  if (cond != NE)
    {
      if (iv0.step == (const_int_rtx[64]))
 {
   tmp = lowpart_subreg (mode, iv0.base, comp_mode);
   if (rtx_equal_p (tmp, mode_mmin))
     {
       desc->infinite =
        alloc_EXPR_LIST (0, const_true_rtx, (rtx) 0);
       return;
     }
 }
      else
 {
   tmp = lowpart_subreg (mode, iv1.base, comp_mode);
   if (rtx_equal_p (tmp, mode_mmax))
     {
       desc->infinite =
        alloc_EXPR_LIST (0, const_true_rtx, (rtx) 0);
       return;
     }
 }
    }
  if (cond != NE)
    {
      if (iv0.step == (const_int_rtx[64]))
 step = simplify_gen_unary (NEG, comp_mode, iv1.step, comp_mode);
      else
 step = iv0.step;
      delta = simplify_gen_binary (MINUS, comp_mode, iv1.base, iv0.base);
      delta = lowpart_subreg (mode, delta, comp_mode);
      delta = simplify_gen_binary (UMOD, mode, delta, step);
      may_xform = (const_int_rtx[64]);
      may_not_xform = const_true_rtx;
      if (((enum rtx_code) (delta)->code) == CONST_INT)
 {
   if (was_sharp && ((delta)->u.hwint[0]) == ((step)->u.hwint[0]) - 1)
     {
       may_xform = const_true_rtx;
     }
   else if (iv0.step == (const_int_rtx[64]))
     {
       bound = simplify_gen_binary (PLUS, comp_mode, mmin, step);
       bound = simplify_gen_binary (MINUS, comp_mode, bound, delta);
       bound = lowpart_subreg (mode, bound, comp_mode);
       tmp = lowpart_subreg (mode, iv0.base, comp_mode);
       may_xform = simplify_gen_relational (cond, SImode, mode,
         bound, tmp);
       may_not_xform = simplify_gen_relational (reverse_condition (cond),
             SImode, mode,
             bound, tmp);
     }
   else
     {
       bound = simplify_gen_binary (MINUS, comp_mode, mmax, step);
       bound = simplify_gen_binary (PLUS, comp_mode, bound, delta);
       bound = lowpart_subreg (mode, bound, comp_mode);
       tmp = lowpart_subreg (mode, iv1.base, comp_mode);
       may_xform = simplify_gen_relational (cond, SImode, mode,
         tmp, bound);
       may_not_xform = simplify_gen_relational (reverse_condition (cond),
             SImode, mode,
             tmp, bound);
     }
 }
      if (may_xform != (const_int_rtx[64]))
 {
   if (may_xform != const_true_rtx)
     {
       s = ((step)->u.hwint[0]);
       if ((s & (s - 1)) == 0)
  desc->infinite = alloc_EXPR_LIST (0, may_not_xform,
        desc->infinite);
       else
  desc->assumptions = alloc_EXPR_LIST (0, may_xform,
           desc->assumptions);
     }
   inc = ((iv0.step)->u.hwint[0]) - ((iv1.step)->u.hwint[0]);
   if (((enum rtx_code) (iv1.base)->code) == CONST_INT)
     up = ((iv1.base)->u.hwint[0]);
   else
     up = ((mode_mmax)->u.hwint[0]) - inc;
   down = ((((enum rtx_code) (iv0.base)->code) == CONST_INT ? iv0.base : mode_mmin)->u.hwint[0])
                ;
   desc->niter_max = (up - down) / inc + 1;
   if (iv0.step == (const_int_rtx[64]))
     {
       iv0.base = simplify_gen_binary (PLUS, comp_mode, iv0.base, delta);
       iv0.base = simplify_gen_binary (MINUS, comp_mode, iv0.base, step);
     }
   else
     {
       iv1.base = simplify_gen_binary (MINUS, comp_mode, iv1.base, delta);
       iv1.base = simplify_gen_binary (PLUS, comp_mode, iv1.base, step);
     }
   tmp0 = lowpart_subreg (mode, iv0.base, comp_mode);
   tmp1 = lowpart_subreg (mode, iv1.base, comp_mode);
   assumption = simplify_gen_relational (reverse_condition (cond),
      SImode, mode, tmp0, tmp1);
   if (assumption == const_true_rtx)
     goto zero_iter;
   else if (assumption != (const_int_rtx[64]))
     desc->noloop_assumptions =
      alloc_EXPR_LIST (0, assumption, desc->noloop_assumptions);
   cond = NE;
 }
    }
  if (cond == NE)
    {
      iv1.base = simplify_gen_binary (MINUS, comp_mode, iv1.base, iv0.base);
      iv0.base = (const_int_rtx[64]);
      iv0.step = simplify_gen_binary (MINUS, comp_mode, iv0.step, iv1.step);
      iv1.step = (const_int_rtx[64]);
      if (((iv0.step)->u.hwint[0]) < 0)
 {
   iv0.step = simplify_gen_unary (NEG, comp_mode, iv0.step, mode);
   iv1.base = simplify_gen_unary (NEG, comp_mode, iv1.base, mode);
 }
      iv0.step = lowpart_subreg (mode, iv0.step, comp_mode);
      s = ((iv0.step)->u.hwint[0]); d = 1;
      while (s % 2 != 1)
 {
   s /= 2;
   d *= 2;
   size--;
 }
      bound = gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned long long) 1 << (size - 1 ) << 1) - 1));
      tmp1 = lowpart_subreg (mode, iv1.base, comp_mode);
      tmp = simplify_gen_binary (UMOD, mode, tmp1, gen_rtx_CONST_INT (VOIDmode, (long) (d)));
      assumption = simplify_gen_relational (NE, SImode, mode, tmp, (const_int_rtx[64]));
      desc->infinite = alloc_EXPR_LIST (0, assumption, desc->infinite);
      tmp = simplify_gen_binary (UDIV, mode, tmp1, gen_rtx_CONST_INT (VOIDmode, (long) (d)));
      inv = inverse (s, size);
      inv = trunc_int_for_mode (inv, mode);
      tmp = simplify_gen_binary (MULT, mode, tmp, gen_rtx_CONST_INT (VOIDmode, (long) (inv)));
      desc->niter_expr = simplify_gen_binary (AND, mode, tmp, bound);
    }
  else
    {
      if (iv1.step == (const_int_rtx[64]))
 {
   step = iv0.step;
   tmp0 = lowpart_subreg (mode, iv0.base, comp_mode);
   tmp1 = lowpart_subreg (mode, iv1.base, comp_mode);
   bound = simplify_gen_binary (MINUS, mode, mode_mmax,
           lowpart_subreg (mode, step, comp_mode));
   assumption = simplify_gen_relational (cond, SImode, mode,
      tmp1, bound);
   desc->assumptions =
    alloc_EXPR_LIST (0, assumption, desc->assumptions);
   tmp = simplify_gen_binary (PLUS, comp_mode, iv1.base, iv0.step);
   tmp = lowpart_subreg (mode, tmp, comp_mode);
   assumption = simplify_gen_relational (reverse_condition (cond),
      SImode, mode, tmp0, tmp);
   delta = simplify_gen_binary (PLUS, mode, tmp1, step);
   delta = simplify_gen_binary (MINUS, mode, delta, tmp0);
 }
      else
 {
   step = simplify_gen_unary (NEG, mode, iv1.step, mode);
   tmp0 = lowpart_subreg (mode, iv0.base, comp_mode);
   tmp1 = lowpart_subreg (mode, iv1.base, comp_mode);
   bound = simplify_gen_binary (MINUS, mode, mode_mmin,
           lowpart_subreg (mode, step, comp_mode));
   assumption = simplify_gen_relational (cond, SImode, mode,
      bound, tmp0);
   desc->assumptions =
    alloc_EXPR_LIST (0, assumption, desc->assumptions);
   tmp = simplify_gen_binary (PLUS, comp_mode, iv0.base, iv1.step);
   tmp = lowpart_subreg (mode, tmp, comp_mode);
   assumption = simplify_gen_relational (reverse_condition (cond),
      SImode, mode,
      tmp, tmp1);
   delta = simplify_gen_binary (MINUS, mode, tmp0, step);
   delta = simplify_gen_binary (MINUS, mode, tmp1, delta);
 }
      if (assumption == const_true_rtx)
 goto zero_iter;
      else if (assumption != (const_int_rtx[64]))
 desc->noloop_assumptions =
  alloc_EXPR_LIST (0, assumption, desc->noloop_assumptions);
      delta = simplify_gen_binary (UDIV, mode, delta, step);
      desc->niter_expr = delta;
    }
  simplify_using_initial_values (loop, AND, &desc->assumptions);
  if (desc->assumptions
      && (((desc->assumptions)->u.fld[0]).rtx1) == (const_int_rtx[64]))
    goto fail;
  simplify_using_initial_values (loop, IOR, &desc->noloop_assumptions);
  simplify_using_initial_values (loop, IOR, &desc->infinite);
  simplify_using_initial_values (loop, NIL, &desc->niter_expr);
  simplify_using_initial_values (loop, AND, &desc->assumptions);
  if (desc->assumptions
      && (((desc->assumptions)->u.fld[0]).rtx1) == (const_int_rtx[64]))
    goto fail;
  simplify_using_initial_values (loop, IOR, &desc->noloop_assumptions);
  simplify_using_initial_values (loop, IOR, &desc->infinite);
  simplify_using_initial_values (loop, NIL, &desc->niter_expr);
  if (desc->noloop_assumptions
      && (((desc->noloop_assumptions)->u.fld[0]).rtx1) == const_true_rtx)
    goto zero_iter;
  if (((enum rtx_code) (desc->niter_expr)->code) == CONST_INT)
    {
      unsigned long long val = ((desc->niter_expr)->u.hwint[0]);
      desc->const_iter = 1;
      desc->niter_max = desc->niter = val & mode_mask_array[desc->mode];
    }
  else if (!desc->niter_max)
    desc->niter_max = determine_max_iter (desc);
  return;
fail:
  desc->simple_p = 0;
  return;
zero_iter:
  desc->const_iter = 1;
  desc->niter = 0;
  desc->niter_max = 0;
  desc->niter_expr = (const_int_rtx[64]);
  return;
}
static void
check_simple_exit (struct loop *loop, edge e, struct niter_desc *desc)
{
  basic_block exit_bb;
  rtx condition, at;
  edge ei;
  exit_bb = e->src;
  desc->simple_p = 0;
  if (exit_bb->loop_father != loop)
    return;
  if (!dominated_by_p (CDI_DOMINATORS, loop->latch, exit_bb))
    return;
  if (!any_condjump_p ((exit_bb)->end_))
    return;
  ei = exit_bb->succ;
  if (ei == e)
    ei = ei->succ_next;
  desc->out_edge = e;
  desc->in_edge = ei;
  if (!(condition = get_condition ((ei->src)->end_, &at, 0)))
    return;
  if (ei->flags & 1)
    {
      condition = reversed_condition (condition);
      if (!condition)
 return;
    }
  iv_number_of_iterations (loop, at, condition, desc);
}
void
find_simple_exit (struct loop *loop, struct niter_desc *desc)
{
  unsigned i;
  basic_block *body;
  edge e;
  struct niter_desc act;
  unsigned char any = 0;
  desc->simple_p = 0;
  body = get_loop_body (loop);
  for (i = 0; i < loop->num_nodes; i++)
    {
      for (e = body[i]->succ; e; e = e->succ_next)
 {
   if (flow_bb_inside_loop_p (loop, e->dest))
     continue;
   check_simple_exit (loop, e, &act);
   if (!act.simple_p)
     continue;
   if (!any)
     any = 1;
   else if (!act.const_iter
     || (desc->const_iter && act.niter >= desc->niter))
     continue;
   *desc = act;
 }
    }
  if (dump_file)
    {
      if (desc->simple_p)
 {
   fprintf (dump_file, "Loop %d is simple:\n", loop->num);
   fprintf (dump_file, "  simple exit %d -> %d\n",
     desc->out_edge->src->index,
     desc->out_edge->dest->index);
   if (desc->assumptions)
     {
       fprintf (dump_file, "  assumptions: ");
       print_rtl (dump_file, desc->assumptions);
       fprintf (dump_file, "\n");
     }
   if (desc->noloop_assumptions)
     {
       fprintf (dump_file, "  does not roll if: ");
       print_rtl (dump_file, desc->noloop_assumptions);
       fprintf (dump_file, "\n");
     }
   if (desc->infinite)
     {
       fprintf (dump_file, "  infinite if: ");
       print_rtl (dump_file, desc->infinite);
       fprintf (dump_file, "\n");
     }
   fprintf (dump_file, "  number of iterations: ");
   print_rtl (dump_file, desc->niter_expr);
         fprintf (dump_file, "\n");
   fprintf (dump_file, "  upper bound: ");
   fprintf (dump_file, "%lld", desc->niter_max);
         fprintf (dump_file, "\n");
 }
      else
 fprintf (dump_file, "Loop %d is not simple.\n", loop->num);
    }
  free (body);
}
struct niter_desc *
get_simple_loop_desc (struct loop *loop)
{
  struct niter_desc *desc = simple_loop_desc (loop);
  if (desc)
    return desc;
  desc = xmalloc (sizeof (struct niter_desc));
  iv_analysis_loop_init (loop);
  find_simple_exit (loop, desc);
  loop->aux = desc;
  return desc;
}
void
free_simple_loop_desc (struct loop *loop)
{
  struct niter_desc *desc = simple_loop_desc (loop);
  if (!desc)
    return;
  free (desc);
  loop->aux = ((void *)0);
}
static void store_fixed_bit_field (rtx, unsigned long,
       unsigned long,
       unsigned long, rtx);
static void store_split_bit_field (rtx, unsigned long,
       unsigned long, rtx);
static rtx extract_fixed_bit_field (enum machine_mode, rtx,
        unsigned long,
        unsigned long,
        unsigned long, rtx, int);
static rtx mask_rtx (enum machine_mode, int, int, int);
static rtx lshift_value (enum machine_mode, rtx, int, int);
static rtx extract_split_bit_field (rtx, unsigned long,
        unsigned long, int);
static void do_cmp_and_jump (rtx, rtx, enum rtx_code, enum machine_mode, rtx);
static rtx expand_smod_pow2 (enum machine_mode, rtx, long);
static int sdiv_pow2_cheap[NUM_MACHINE_MODES];
static int smod_pow2_cheap[NUM_MACHINE_MODES];
static int zero_cost;
static int add_cost[NUM_MACHINE_MODES];
static int neg_cost[NUM_MACHINE_MODES];
static int shift_cost[NUM_MACHINE_MODES][32];
static int shiftadd_cost[NUM_MACHINE_MODES][32];
static int shiftsub_cost[NUM_MACHINE_MODES][32];
static int mul_cost[NUM_MACHINE_MODES];
static int div_cost[NUM_MACHINE_MODES];
static int mul_widen_cost[NUM_MACHINE_MODES];
static int mul_highpart_cost[NUM_MACHINE_MODES];
void
init_expmed (void)
{
  rtx reg, shift_insn, shiftadd_insn, shiftsub_insn;
  rtx shift_pat, shiftadd_pat, shiftsub_pat;
  rtx pow2[32];
  rtx cint[32];
  int dummy;
  int m, n;
  enum machine_mode mode, wider_mode;
  start_sequence ();
  zero_cost = rtx_cost ((const_int_rtx[64]), 0);
  init_recog ();
  for (m = 1; m < 32; m++)
    {
      pow2[m] = gen_rtx_CONST_INT (VOIDmode, (long) ((long) 1 << m));
      cint[m] = gen_rtx_CONST_INT (VOIDmode, (long) (m));
    }
  for (mode = class_narrowest_mode[MODE_INT];
       mode != VOIDmode;
       mode = mode_wider[mode])
    {
      reg = gen_rtx_REG (mode, 10000);
      add_cost[mode] = rtx_cost (gen_rtx_fmt_ee (PLUS, (mode), (reg), (reg)), SET);
      neg_cost[mode] = rtx_cost (gen_rtx_fmt_e (NEG, (mode), (reg)), SET);
      div_cost[mode] = rtx_cost (gen_rtx_fmt_ee (UDIV, (mode), (reg), (reg)), SET);
      mul_cost[mode] = rtx_cost (gen_rtx_fmt_ee (MULT, (mode), (reg), (reg)), SET);
      sdiv_pow2_cheap[mode]
 = (rtx_cost (gen_rtx_fmt_ee (DIV, (mode), (reg), (gen_rtx_CONST_INT (VOIDmode, (long) (32)))), SET)
    <= 2 * add_cost[mode]);
      smod_pow2_cheap[mode]
 = (rtx_cost (gen_rtx_fmt_ee (MOD, (mode), (reg), (gen_rtx_CONST_INT (VOIDmode, (long) (32)))), SET)
    <= 2 * add_cost[mode]);
      wider_mode = mode_wider[mode];
      if (wider_mode != VOIDmode)
 {
   mul_widen_cost[wider_mode]
     = rtx_cost (gen_rtx_fmt_ee (MULT, (wider_mode), (gen_rtx_fmt_e (ZERO_EXTEND, (wider_mode), (reg))), (gen_rtx_fmt_e (ZERO_EXTEND, (wider_mode), (reg))))
                                                ,
   SET);
   mul_highpart_cost[mode]
     = rtx_cost (gen_rtx_fmt_e (TRUNCATE, (mode), (gen_rtx_fmt_ee (LSHIFTRT, (wider_mode), (gen_rtx_fmt_ee (MULT, (wider_mode), (gen_rtx_fmt_e (ZERO_EXTEND, (wider_mode), (reg))), (gen_rtx_fmt_e (ZERO_EXTEND, (wider_mode), (reg))))), (gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8))))))))
                                           ,
   SET);
 }
 shift_insn = emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (reg), (gen_rtx_fmt_ee (ASHIFT, (mode), (reg), ((const_int_rtx[64])))))
                        );
 shiftadd_insn
   = emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (reg), (gen_rtx_fmt_ee (PLUS, (mode), (gen_rtx_fmt_ee (MULT, (mode), (reg), ((const_int_rtx[64])))), (reg))))
             );
 shiftsub_insn
   = emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (reg), (gen_rtx_fmt_ee (MINUS, (mode), (gen_rtx_fmt_ee (MULT, (mode), (reg), ((const_int_rtx[64])))), (reg))))
              );
 shift_pat = (((shift_insn)->u.fld[5]).rtx1);
 shiftadd_pat = (((shiftadd_insn)->u.fld[5]).rtx1);
 shiftsub_pat = (((shiftsub_insn)->u.fld[5]).rtx1);
 shift_cost[mode][0] = 0;
 shiftadd_cost[mode][0] = shiftsub_cost[mode][0] = add_cost[mode];
 n = ((32) < (((unsigned short) (((unsigned short) mode_size[mode]) * 8))) ? (32) : (((unsigned short) (((unsigned short) mode_size[mode]) * 8))));
 for (m = 1; m < n; m++)
   {
     shift_cost[mode][m] = 32000;
     ((((((shift_pat)->u.fld[1]).rtx1))->u.fld[1]).rtx1) = cint[m];
     if (recog (shift_pat, shift_insn, &dummy) >= 0)
       shift_cost[mode][m] = rtx_cost ((((shift_pat)->u.fld[1]).rtx1), SET);
     shiftadd_cost[mode][m] = 32000;
     (((((((((shiftadd_pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1) = pow2[m];
     if (recog (shiftadd_pat, shiftadd_insn, &dummy) >= 0)
       shiftadd_cost[mode][m] = rtx_cost ((((shiftadd_pat)->u.fld[1]).rtx1), SET);
     shiftsub_cost[mode][m] = 32000;
     (((((((((shiftsub_pat)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1) = pow2[m];
     if (recog (shiftsub_pat, shiftsub_insn, &dummy) >= 0)
       shiftsub_cost[mode][m] = rtx_cost ((((shiftsub_pat)->u.fld[1]).rtx1), SET);
   }
    }
  end_sequence ();
}
rtx
negate_rtx (enum machine_mode mode, rtx x)
{
  rtx result = simplify_unary_operation (NEG, mode, x, mode);
  if (result == 0)
    result = expand_unop (mode, (optab_table[OTI_neg]), x, (rtx) 0, 0);
  return result;
}
enum machine_mode
mode_for_extraction (enum extraction_pattern pattern, int opno)
{
  const struct insn_data *data;
  switch (pattern)
    {
    case EP_insv:
      if (1)
 {
   data = &insn_data[CODE_FOR_insv];
   break;
 }
      return MAX_MACHINE_MODE;
    case EP_extv:
      if (1)
 {
   data = &insn_data[CODE_FOR_extv];
   break;
 }
      return MAX_MACHINE_MODE;
    case EP_extzv:
      if (1)
 {
   data = &insn_data[CODE_FOR_extzv];
   break;
 }
      return MAX_MACHINE_MODE;
    default:
      abort ();
    }
  if (opno == -1)
    return VOIDmode;
  if (data->operand[opno].mode == VOIDmode)
    return word_mode;
  return data->operand[opno].mode;
}
rtx
store_bit_field (rtx str_rtx, unsigned long bitsize,
   unsigned long bitnum, enum machine_mode fieldmode,
   rtx value1, long total_size)
{
  unsigned int unit
    = ((((enum rtx_code) (str_rtx)->code) == MEM)) ? 8 : (8 * (0 ? 8 : 4));
  unsigned long offset = bitnum / unit;
  unsigned long bitpos = bitnum % unit;
  rtx op0 = str_rtx;
  int byte_offset;
  enum machine_mode op_mode = mode_for_extraction (EP_insv, 3);
  if (total_size >= 0)
    total_size -= (bitpos / 128
     * (128 / 8));
  while (((enum rtx_code) (op0)->code) == SUBREG)
    {
      offset += ((((op0)->u.fld[1]).rtuint) / (0 ? 8 : 4));
      op0 = (((op0)->u.fld[0]).rtx1);
    }
  value1 = protect_from_queue (value1, 0);
  if ((mode_class[((enum machine_mode) (op0)->mode)] == MODE_VECTOR_INT || mode_class[((enum machine_mode) (op0)->mode)] == MODE_VECTOR_FLOAT)
      && !(((enum rtx_code) (op0)->code) == MEM)
      && ((optab_table[OTI_vec_set])->handlers[((enum machine_mode) (op0)->mode)].insn_code
   != CODE_FOR_nothing)
      && fieldmode == mode_inner[((enum machine_mode) (op0)->mode)]
      && bitsize == ((unsigned short) (((unsigned short) mode_size[mode_inner[((enum machine_mode) (op0)->mode)]]) * 8))
      && !(bitnum % ((unsigned short) (((unsigned short) mode_size[mode_inner[((enum machine_mode) (op0)->mode)]]) * 8))))
    {
      enum machine_mode outermode = ((enum machine_mode) (op0)->mode);
      enum machine_mode innermode = mode_inner[outermode];
      int icode = (int) (optab_table[OTI_vec_set])->handlers[outermode].insn_code;
      int pos = bitnum / ((unsigned short) (((unsigned short) mode_size[innermode]) * 8));
      rtx rtxpos = gen_rtx_CONST_INT (VOIDmode, (long) (pos));
      rtx src = value1;
      rtx dest = op0;
      rtx pat, seq;
      enum machine_mode mode0 = insn_data[icode].operand[0].mode;
      enum machine_mode mode1 = insn_data[icode].operand[1].mode;
      enum machine_mode mode2 = insn_data[icode].operand[2].mode;
      start_sequence ();
      if (! (*insn_data[icode].operand[1].predicate) (src, mode1))
 src = copy_to_mode_reg (mode1, src);
      if (! (*insn_data[icode].operand[2].predicate) (rtxpos, mode2))
 rtxpos = copy_to_mode_reg (mode1, rtxpos);
      if (! (*insn_data[icode].operand[0].predicate) (dest, mode0)
   || ! (*insn_data[icode].operand[1].predicate) (src, mode1)
   || ! (*insn_data[icode].operand[2].predicate) (rtxpos, mode2))
 abort ();
      pat = (insn_data[icode].genfun) (dest, src, rtxpos);
      seq = get_insns ();
      end_sequence ();
      if (pat)
 {
   emit_insn (seq);
   emit_insn (pat);
   return dest;
 }
    }
  if (flag_force_mem)
    {
      int old_generating_concat_p = generating_concat_p;
      generating_concat_p = 0;
      value1 = force_not_mem (value1);
      generating_concat_p = old_generating_concat_p;
    }
  byte_offset = (bitnum % (8 * (0 ? 8 : 4))) / 8
                + (offset * (0 ? 8 : 4));
  if (bitpos == 0
      && bitsize == ((unsigned short) (((unsigned short) mode_size[fieldmode]) * 8))
      && (!(((enum rtx_code) (op0)->code) == MEM)
   ? ((((unsigned short) mode_size[fieldmode]) >= (0 ? 8 : 4)
      || ((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) == ((unsigned short) mode_size[fieldmode]))
      && byte_offset % ((unsigned short) mode_size[fieldmode]) == 0)
   : (! 0
      || (offset * 8 % bitsize == 0
   && ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8)) % ((unsigned short) (((unsigned short) mode_size[fieldmode]) * 8)) == 0))))
    {
      if (((enum machine_mode) (op0)->mode) != fieldmode)
 {
   if (((enum rtx_code) (op0)->code) == SUBREG)
     {
       if (((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode) == fieldmode
    || mode_class[fieldmode] == MODE_INT
    || mode_class[fieldmode] == MODE_PARTIAL_INT)
  op0 = (((op0)->u.fld[0]).rtx1);
       else
  abort ();
     }
   if ((((enum rtx_code) (op0)->code) == REG))
     op0 = gen_rtx_SUBREG (fieldmode, op0, byte_offset);
   else
     op0 = adjust_address_1 (op0, fieldmode, offset, 1, 1);
 }
      emit_move_insn (op0, value1);
      return value1;
    }
  {
    enum machine_mode imode = int_mode_for_mode (((enum machine_mode) (op0)->mode));
    if (imode != ((enum machine_mode) (op0)->mode))
      {
 if ((((enum rtx_code) (op0)->code) == MEM))
   op0 = adjust_address_1 (op0, imode, 0, 1, 1);
 else if (imode != BLKmode)
   op0 = rtl_hooks.gen_lowpart (imode, op0);
 else
   abort ();
      }
  }
  if ((((enum rtx_code) (op0)->code) == MEM))
    {
      op0 = shallow_copy_rtx_stat (op0 );
      set_mem_alias_set (op0, 0);
      set_mem_expr (op0, 0);
    }
  if (0
      && !(((enum rtx_code) (op0)->code) == MEM)
      && unit > ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)))
    bitpos += unit - ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8));
  if (!(((enum rtx_code) (op0)->code) == MEM)
      && (0 ? bitpos + bitsize == unit : bitpos == 0)
      && bitsize == ((unsigned short) (((unsigned short) mode_size[fieldmode]) * 8))
      && ((optab_table[OTI_movstrict])->handlers[fieldmode].insn_code
   != CODE_FOR_nothing))
    {
      int icode = (optab_table[OTI_movstrict])->handlers[fieldmode].insn_code;
      if (((enum rtx_code) (value1)->code) == CONST_INT || (((enum rtx_code) (value1)->code) == REG))
 value1 = rtl_hooks.gen_lowpart (fieldmode, value1);
      else if (!(((enum rtx_code) (value1)->code) == SYMBOL_REF
   || ((enum rtx_code) (value1)->code) == LABEL_REF
   || ((enum rtx_code) (value1)->code) == CONST))
 value1 = convert_to_mode (fieldmode, value1, 0);
      if (! (*insn_data[icode].operand[1].predicate) (value1, fieldmode))
 value1 = copy_to_mode_reg (fieldmode, value1);
      if (((enum rtx_code) (op0)->code) == SUBREG)
 {
   if (((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode) == fieldmode
       || mode_class[fieldmode] == MODE_INT
       || mode_class[fieldmode] == MODE_PARTIAL_INT)
     op0 = (((op0)->u.fld[0]).rtx1);
   else
     abort ();
 }
      emit_insn ((insn_data[icode].genfun)
   (gen_rtx_SUBREG (fieldmode, op0,
      (bitnum % (8 * (0 ? 8 : 4))) / 8
      + (offset * (0 ? 8 : 4))),
      value1));
      return value1;
    }
  if (bitsize > (8 * (0 ? 8 : 4)))
    {
      unsigned int backwards = 0 && fieldmode != BLKmode;
      unsigned int nwords = (bitsize + ((8 * (0 ? 8 : 4)) - 1)) / (8 * (0 ? 8 : 4));
      unsigned int i;
      fieldmode = ((enum machine_mode) (value1)->mode);
      if (fieldmode == VOIDmode)
 fieldmode = smallest_mode_for_size (nwords * (8 * (0 ? 8 : 4)), MODE_INT);
      for (i = 0; i < nwords; i++)
 {
   unsigned int wordnum = (backwards ? nwords - i - 1 : i);
   unsigned int bit_offset = (backwards
         ? (((int) bitsize - ((int) i + 1) * (8 * (0 ? 8 : 4))) > (0) ? ((int) bitsize - ((int) i + 1) * (8 * (0 ? 8 : 4))) : (0))
         : (int) i * (8 * (0 ? 8 : 4)));
   store_bit_field (op0, (((8 * (0 ? 8 : 4))) < (bitsize - i * (8 * (0 ? 8 : 4))) ? ((8 * (0 ? 8 : 4))) : (bitsize - i * (8 * (0 ? 8 : 4))))
                                     ,
      bitnum + bit_offset, word_mode,
      operand_subword_force (value1, wordnum, fieldmode),
      total_size);
 }
      return value1;
    }
  if (!(((enum rtx_code) (op0)->code) == MEM))
    {
      if (offset != 0
   || ((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) > (0 ? 8 : 4))
 {
   if (!(((enum rtx_code) (op0)->code) == REG))
     {
       if (((enum rtx_code) (op0)->code) == SUBREG
    && (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)])
        == ((unsigned short) mode_size[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)])))
  op0 = (((op0)->u.fld[0]).rtx1);
       else
  abort ();
     }
   op0 = gen_rtx_SUBREG (mode_for_size ((8 * (0 ? 8 : 4)), MODE_INT, 0),
                  op0, (offset * (0 ? 8 : 4)));
 }
      offset = 0;
    }
  else
    op0 = protect_from_queue (op0, 1);
  if (mode_class[((enum machine_mode) (value1)->mode)] != MODE_INT
      && mode_class[((enum machine_mode) (value1)->mode)] != MODE_PARTIAL_INT)
    value1 = rtl_hooks.gen_lowpart ((((enum machine_mode) (value1)->mode) == VOIDmode
     ? word_mode : int_mode_for_mode (((enum machine_mode) (value1)->mode))),
    value1);
  if (1
      && ((enum machine_mode) (value1)->mode) != BLKmode
      && !(bitsize == 1 && ((enum rtx_code) (value1)->code) == CONST_INT)
      && (((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) >= bitsize)
      && ! (((((enum rtx_code) (op0)->code) == REG) || ((enum rtx_code) (op0)->code) == SUBREG)
     && (bitsize + bitpos > ((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)))))
    {
      int xbitpos = bitpos;
      rtx value1;
      rtx xop0 = op0;
      rtx last = get_last_insn ();
      rtx pat;
      enum machine_mode maxmode = mode_for_extraction (EP_insv, 3);
      int save_volatile_ok = volatile_ok;
      volatile_ok = 1;
      if ((((enum rtx_code) (op0)->code) == MEM)
   && ! ((*insn_data[(int) CODE_FOR_insv].operand[0].predicate)
  (op0, VOIDmode)))
 {
   rtx tempreg;
   enum machine_mode bestmode;
   if (((enum machine_mode) (op0)->mode) == BLKmode
       || ((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) > ((unsigned short) mode_size[maxmode]))
     bestmode
       = get_best_mode (bitsize, bitnum, ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8)), maxmode,
          (((op0))->volatil));
   else
     bestmode = ((enum machine_mode) (op0)->mode);
   if (bestmode == VOIDmode
       || (0
    && ((unsigned short) (((unsigned short) mode_size[bestmode]) * 8)) > ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8))))
     goto insv_loses;
   unit = ((unsigned short) (((unsigned short) mode_size[bestmode]) * 8));
   offset = (bitnum / unit) * ((unsigned short) mode_size[bestmode]);
   bitpos = bitnum % unit;
   op0 = adjust_address_1 (op0, bestmode, offset, 1, 1);
   tempreg = copy_to_reg (op0);
   store_bit_field (tempreg, bitsize, bitpos, fieldmode, value1,
      total_size);
   emit_move_insn (op0, tempreg);
   return value1;
 }
      volatile_ok = save_volatile_ok;
      if ((((enum rtx_code) (xop0)->code) == MEM))
 xop0 = adjust_address_1 (xop0, byte_mode, offset, 1, 1);
      if (((enum rtx_code) (xop0)->code) == SUBREG)
 xop0 = gen_rtx_SUBREG (maxmode, (((xop0)->u.fld[0]).rtx1), (((xop0)->u.fld[1]).rtuint));
      if ((((enum rtx_code) (xop0)->code) == REG) && ((enum machine_mode) (xop0)->mode) != maxmode)
 xop0 = gen_rtx_SUBREG (maxmode, xop0, 0);
      if (0 != 0)
 xbitpos = unit - bitsize - xbitpos;
      if (0 && !(((enum rtx_code) (xop0)->code) == MEM))
 xbitpos += ((unsigned short) (((unsigned short) mode_size[maxmode]) * 8)) - unit;
      unit = ((unsigned short) (((unsigned short) mode_size[maxmode]) * 8));
      value1 = value1;
      if (((enum machine_mode) (value1)->mode) != maxmode)
 {
   if (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (value1)->mode)]) * 8)) >= bitsize)
     {
       if (((unsigned short) mode_size[((enum machine_mode) (value1)->mode)]) < ((unsigned short) mode_size[maxmode]))
  {
    rtx tmp;
    tmp = simplify_subreg (maxmode, value1, ((enum machine_mode) (value1)->mode), 0);
    if (! tmp)
      tmp = simplify_gen_subreg (maxmode,
            force_reg (((enum machine_mode) (value1)->mode),
         value1),
            ((enum machine_mode) (value1)->mode), 0);
    value1 = tmp;
  }
       else
  value1 = rtl_hooks.gen_lowpart (maxmode, value1);
     }
   else if (((enum rtx_code) (value1)->code) == CONST_INT)
     value1 = gen_int_mode (((value1)->u.hwint[0]), maxmode);
   else if (!((rtx_class[(int) (((enum rtx_code) (value1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (value1)->code) == CONST_VECTOR))
     abort ();
 }
      if (! ((*insn_data[(int) CODE_FOR_insv].operand[3].predicate)
      (value1, maxmode)))
 value1 = force_reg (maxmode, value1);
      pat = gen_insv (xop0, gen_rtx_CONST_INT (VOIDmode, (long) (bitsize)), gen_rtx_CONST_INT (VOIDmode, (long) (xbitpos)), value1);
      if (pat)
 emit_insn (pat);
      else
 {
   delete_insns_since (last);
   store_fixed_bit_field (op0, offset, bitsize, bitpos, value1);
 }
    }
  else
    insv_loses:
    store_fixed_bit_field (op0, offset, bitsize, bitpos, value1);
  return value1;
}
static void
store_fixed_bit_field (rtx op0, unsigned long offset,
         unsigned long bitsize,
         unsigned long bitpos, rtx value1)
{
  enum machine_mode mode;
  unsigned int total_bits = (8 * (0 ? 8 : 4));
  rtx subtarget, temp;
  int all_zero = 0;
  int all_one = 0;
  if ((((enum rtx_code) (op0)->code) == REG) || ((enum rtx_code) (op0)->code) == SUBREG)
    {
      if (offset != 0)
 abort ();
      if (bitsize + bitpos > (8 * (0 ? 8 : 4)))
 {
   store_split_bit_field (op0, bitsize, bitpos, value1);
   return;
 }
    }
  else
    {
      mode = ((enum machine_mode) (op0)->mode);
      if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) == 0
   || ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) > ((unsigned short) (((unsigned short) mode_size[word_mode]) * 8)))
 mode = word_mode;
      mode = get_best_mode (bitsize, bitpos + offset * 8,
       ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8)), mode, (((op0))->volatil));
      if (mode == VOIDmode)
 {
   store_split_bit_field (op0, bitsize, bitpos + offset * 8,
     value1);
   return;
 }
      total_bits = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
      if (bitpos >= total_bits)
 {
   offset += (bitpos / total_bits) * (total_bits / 8);
   bitpos -= ((bitpos / total_bits) * (total_bits / 8)
       * 8);
 }
      bitpos += (offset % (total_bits / 8)) * 8;
      offset -= (offset % (total_bits / 8));
      op0 = adjust_address_1 (op0, mode, offset, 1, 1);
    }
  mode = ((enum machine_mode) (op0)->mode);
  if (0)
      bitpos = total_bits - bitsize - bitpos;
  if (((enum rtx_code) (value1)->code) == CONST_INT)
    {
      long v = ((value1)->u.hwint[0]);
      if (bitsize < (8 * 4))
 v &= ((long) 1 << bitsize) - 1;
      if (v == 0)
 all_zero = 1;
      else if ((bitsize < (8 * 4)
  && v == ((long) 1 << bitsize) - 1)
        || (bitsize == (8 * 4) && v == -1))
 all_one = 1;
      value1 = lshift_value (mode, value1, bitpos, bitsize);
    }
  else
    {
      int must_and = (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (value1)->mode)]) * 8)) != bitsize
        && bitpos + bitsize != ((unsigned short) (((unsigned short) mode_size[mode]) * 8)));
      if (((enum machine_mode) (value1)->mode) != mode)
 {
   if (((((enum rtx_code) (value1)->code) == REG) || ((enum rtx_code) (value1)->code) == SUBREG)
       && ((unsigned short) mode_size[mode]) < ((unsigned short) mode_size[((enum machine_mode) (value1)->mode)]))
     value1 = rtl_hooks.gen_lowpart (mode, value1);
   else
     value1 = convert_to_mode (mode, value1, 1);
 }
      if (must_and)
 value1 = expand_binop (mode, (optab_table[OTI_and]), value1,
         mask_rtx (mode, 0, bitsize, 0),
         (rtx) 0, 1, OPTAB_LIB_WIDEN);
      if (bitpos > 0)
 value1 = expand_shift (LSHIFT_EXPR, mode, value1,
         build_int_2_wide ((unsigned long) (bitpos), (long) (0)), (rtx) 0, 1);
    }
  subtarget = ((((enum rtx_code) (op0)->code) == REG) || ! flag_force_mem) ? op0 : 0;
  if (! all_one)
    {
      temp = expand_binop (mode, (optab_table[OTI_and]), op0,
      mask_rtx (mode, bitpos, bitsize, 1),
      subtarget, 1, OPTAB_LIB_WIDEN);
      subtarget = temp;
    }
  else
    temp = op0;
  if (! all_zero)
    temp = expand_binop (mode, (optab_table[OTI_ior]), temp, value1,
    subtarget, 1, OPTAB_LIB_WIDEN);
  if (op0 != temp)
    emit_move_insn (op0, temp);
}
static void
store_split_bit_field (rtx op0, unsigned long bitsize,
         unsigned long bitpos, rtx value1)
{
  unsigned int unit;
  unsigned int bitsdone = 0;
  if ((((enum rtx_code) (op0)->code) == REG) || ((enum rtx_code) (op0)->code) == SUBREG)
    unit = (8 * (0 ? 8 : 4));
  else
    unit = ((((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8))) < ((8 * (0 ? 8 : 4))) ? (((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8))) : ((8 * (0 ? 8 : 4))));
  if (((rtx_class[(int) (((enum rtx_code) (value1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (value1)->code) == CONST_VECTOR) && ((enum rtx_code) (value1)->code) != CONST_INT)
    {
      rtx word = gen_lowpart_common (word_mode, value1);
      if (word && (value1 != word))
 value1 = word;
      else
 value1 = gen_lowpart_common (word_mode,
        force_reg (((enum machine_mode) (value1)->mode) != VOIDmode
            ? ((enum machine_mode) (value1)->mode)
            : word_mode, value1));
    }
  while (bitsdone < bitsize)
    {
      unsigned long thissize;
      rtx part, word;
      unsigned long thispos;
      unsigned long offset;
      offset = (bitpos + bitsdone) / unit;
      thispos = (bitpos + bitsdone) % unit;
      thissize = ((bitsize - bitsdone) < ((8 * (0 ? 8 : 4))) ? (bitsize - bitsdone) : ((8 * (0 ? 8 : 4))));
      thissize = ((thissize) < (unit - thispos) ? (thissize) : (unit - thispos));
      if (0)
 {
   int total_bits;
   if (!(((enum rtx_code) (value1)->code) == MEM) || ((enum machine_mode) (value1)->mode) == BLKmode)
     total_bits = (8 * (0 ? 8 : 4));
   else
     total_bits = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (value1)->mode)]) * 8));
   if (((enum rtx_code) (value1)->code) == CONST_INT)
     part = gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned long) (((value1)->u.hwint[0])) >> (bitsize - bitsdone - thissize)) & (((long) 1 << thissize) - 1)))
                                               ;
   else
     part = extract_fixed_bit_field (word_mode, value1, 0, thissize,
         total_bits - bitsize + bitsdone,
         (rtx) 0, 1);
 }
      else
 {
   if (((enum rtx_code) (value1)->code) == CONST_INT)
     part = gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned long) (((value1)->u.hwint[0])) >> bitsdone) & (((long) 1 << thissize) - 1)))
                                               ;
   else
     part = extract_fixed_bit_field (word_mode, value1, 0, thissize,
         bitsdone, (rtx) 0, 1);
 }
      if (((enum rtx_code) (op0)->code) == SUBREG)
 {
   int word_offset = ((((op0)->u.fld[1]).rtuint) / (0 ? 8 : 4)) + offset;
   word = operand_subword_force ((((op0)->u.fld[0]).rtx1), word_offset,
     ((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode));
   offset = 0;
 }
      else if ((((enum rtx_code) (op0)->code) == REG))
 {
   word = operand_subword_force (op0, offset, ((enum machine_mode) (op0)->mode));
   offset = 0;
 }
      else
 word = op0;
      store_fixed_bit_field (word, offset * unit / 8, thissize,
        thispos, part);
      bitsdone += thissize;
    }
}
rtx
extract_bit_field (rtx str_rtx, unsigned long bitsize,
     unsigned long bitnum, int unsignedp, rtx target,
     enum machine_mode mode, enum machine_mode tmode,
     long total_size)
{
  unsigned int unit
    = ((((enum rtx_code) (str_rtx)->code) == MEM)) ? 8 : (8 * (0 ? 8 : 4));
  unsigned long offset = bitnum / unit;
  unsigned long bitpos = bitnum % unit;
  rtx op0 = str_rtx;
  rtx spec_target = target;
  rtx spec_target_subreg = 0;
  enum machine_mode int_mode;
  enum machine_mode extv_mode = mode_for_extraction (EP_extv, 0);
  enum machine_mode extzv_mode = mode_for_extraction (EP_extzv, 0);
  enum machine_mode mode1;
  int byte_offset;
  if (total_size >= 0)
    total_size -= (bitpos / 128
     * (128 / 8));
  if (tmode == VOIDmode)
    tmode = mode;
  while (((enum rtx_code) (op0)->code) == SUBREG)
    {
      bitpos += (((op0)->u.fld[1]).rtuint) * 8;
      if (bitpos > unit)
 {
   offset += (bitpos / unit);
   bitpos %= unit;
 }
      op0 = (((op0)->u.fld[0]).rtx1);
    }
  if ((((enum rtx_code) (op0)->code) == REG)
      && mode == ((enum machine_mode) (op0)->mode)
      && bitnum == 0
      && bitsize == ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)))
    {
      return op0;
    }
  if ((mode_class[((enum machine_mode) (op0)->mode)] == MODE_VECTOR_INT || mode_class[((enum machine_mode) (op0)->mode)] == MODE_VECTOR_FLOAT)
      && !(((enum rtx_code) (op0)->code) == MEM)
      && ((optab_table[OTI_vec_extract])->handlers[((enum machine_mode) (op0)->mode)].insn_code
   != CODE_FOR_nothing)
      && ((bitsize + bitnum) / ((unsigned short) (((unsigned short) mode_size[mode_inner[((enum machine_mode) (op0)->mode)]]) * 8))
   == bitsize / ((unsigned short) (((unsigned short) mode_size[mode_inner[((enum machine_mode) (op0)->mode)]]) * 8))))
    {
      enum machine_mode outermode = ((enum machine_mode) (op0)->mode);
      enum machine_mode innermode = mode_inner[outermode];
      int icode = (int) (optab_table[OTI_vec_extract])->handlers[outermode].insn_code;
      int pos = bitnum / ((unsigned short) (((unsigned short) mode_size[innermode]) * 8));
      rtx rtxpos = gen_rtx_CONST_INT (VOIDmode, (long) (pos));
      rtx src = op0;
      rtx dest = ((void *)0), pat, seq;
      enum machine_mode mode0 = insn_data[icode].operand[0].mode;
      enum machine_mode mode1 = insn_data[icode].operand[1].mode;
      enum machine_mode mode2 = insn_data[icode].operand[2].mode;
      if (innermode == tmode || innermode == mode)
 dest = target;
      if (!dest)
 dest = gen_reg_rtx (innermode);
      start_sequence ();
      if (! (*insn_data[icode].operand[0].predicate) (dest, mode0))
 dest = copy_to_mode_reg (mode0, dest);
      if (! (*insn_data[icode].operand[1].predicate) (src, mode1))
 src = copy_to_mode_reg (mode1, src);
      if (! (*insn_data[icode].operand[2].predicate) (rtxpos, mode2))
 rtxpos = copy_to_mode_reg (mode1, rtxpos);
      if (! (*insn_data[icode].operand[0].predicate) (dest, mode0)
   || ! (*insn_data[icode].operand[1].predicate) (src, mode1)
   || ! (*insn_data[icode].operand[2].predicate) (rtxpos, mode2))
 abort ();
      pat = (insn_data[icode].genfun) (dest, src, rtxpos);
      seq = get_insns ();
      end_sequence ();
      if (pat)
 {
   emit_insn (seq);
   emit_insn (pat);
   return dest;
 }
    }
  {
    enum machine_mode imode = int_mode_for_mode (((enum machine_mode) (op0)->mode));
    if (imode != ((enum machine_mode) (op0)->mode))
      {
 if ((((enum rtx_code) (op0)->code) == MEM))
   op0 = adjust_address_1 (op0, imode, 0, 1, 1);
 else if (imode != BLKmode)
   op0 = rtl_hooks.gen_lowpart (imode, op0);
 else
   abort ();
      }
  }
  if ((((enum rtx_code) (op0)->code) == MEM))
    {
      op0 = shallow_copy_rtx_stat (op0 );
      set_mem_alias_set (op0, 0);
      set_mem_expr (op0, 0);
    }
  byte_offset = bitpos / 8 + offset * (0 ? 8 : 4);
  if (0
      && !(((enum rtx_code) (op0)->code) == MEM)
      && unit > ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)))
    bitpos += unit - ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8));
  mode1 = ((mode_class[tmode] == MODE_INT || mode_class[tmode] == MODE_PARTIAL_INT)
     ? mode_for_size (bitsize, mode_class[tmode], 0)
     : mode);
  if (((bitsize >= (8 * (0 ? 8 : 4)) && bitsize == ((unsigned short) (((unsigned short) mode_size[mode]) * 8))
 && bitpos % (8 * (0 ? 8 : 4)) == 0)
       || (mode1 != BLKmode
    && (0
        ? bitpos + bitsize == (8 * (0 ? 8 : 4))
        : bitpos == 0)))
      && ((!(((enum rtx_code) (op0)->code) == MEM)
    && 1
    && ((unsigned short) mode_size[mode1]) != 0
    && byte_offset % ((unsigned short) mode_size[mode1]) == 0)
   || ((((enum rtx_code) (op0)->code) == MEM)
       && (! 0
    || (offset * 8 % bitsize == 0
        && ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8)) % bitsize == 0)))))
    {
      if (mode1 != ((enum machine_mode) (op0)->mode))
 {
   if (((enum rtx_code) (op0)->code) == SUBREG)
     {
       if (((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode) == mode1
    || mode_class[mode1] == MODE_INT
    || mode_class[mode1] == MODE_PARTIAL_INT)
  op0 = (((op0)->u.fld[0]).rtx1);
       else
  goto no_subreg_mode_swap;
     }
   if ((((enum rtx_code) (op0)->code) == REG))
     op0 = gen_rtx_SUBREG (mode1, op0, byte_offset);
   else
     op0 = adjust_address_1 (op0, mode1, offset, 1, 1);
 }
      if (mode1 != mode)
 return convert_to_mode (tmode, op0, unsignedp);
      return op0;
    }
 no_subreg_mode_swap:
  if (bitsize > (8 * (0 ? 8 : 4)))
    {
      unsigned int nwords = (bitsize + ((8 * (0 ? 8 : 4)) - 1)) / (8 * (0 ? 8 : 4));
      unsigned int i;
      if (target == 0 || !(((enum rtx_code) (target)->code) == REG))
 target = gen_reg_rtx (mode);
      emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (target)));
      for (i = 0; i < nwords; i++)
 {
   unsigned int wordnum
     = (0
        ? ((unsigned short) mode_size[((enum machine_mode) (target)->mode)]) / (0 ? 8 : 4) - i - 1
        : i);
   unsigned int bit_offset = (0
         ? ((0) > (((int) bitsize - ((int) i + 1) * (int) (8 * (0 ? 8 : 4)))) ? (0) : (((int) bitsize - ((int) i + 1) * (int) (8 * (0 ? 8 : 4)))))
         : (int) i * (8 * (0 ? 8 : 4)));
   rtx target_part = operand_subword (target, wordnum, 1, VOIDmode);
   rtx result_part
     = extract_bit_field (op0, (((8 * (0 ? 8 : 4))) < (bitsize - i * (8 * (0 ? 8 : 4))) ? ((8 * (0 ? 8 : 4))) : (bitsize - i * (8 * (0 ? 8 : 4))))
                                    ,
     bitnum + bit_offset, 1, target_part, mode,
     word_mode, total_size);
   if (target_part == 0)
     abort ();
   if (result_part != target_part)
     emit_move_insn (target_part, result_part);
 }
      if (unsignedp)
 {
   if (((unsigned short) mode_size[((enum machine_mode) (target)->mode)]) > nwords * (0 ? 8 : 4))
     {
       unsigned int i, total_words;
       total_words = ((unsigned short) mode_size[((enum machine_mode) (target)->mode)]) / (0 ? 8 : 4);
       for (i = nwords; i < total_words; i++)
  emit_move_insn
    (operand_subword (target,
        0 ? total_words - i - 1 : i,
        1, VOIDmode),
     (const_int_rtx[64]));
     }
   return target;
 }
      target = expand_shift (LSHIFT_EXPR, mode, target,
        build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - bitsize), (long) (0)),
        (rtx) 0, 0);
      return expand_shift (RSHIFT_EXPR, mode, target,
      build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - bitsize), (long) (0)),
      (rtx) 0, 0);
    }
  int_mode = int_mode_for_mode (tmode);
  if (int_mode == BLKmode)
    int_mode = int_mode_for_mode (mode);
  if (int_mode == BLKmode)
    abort ();
  if (!(((enum rtx_code) (op0)->code) == MEM))
    {
      if (offset != 0
   || ((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) > (0 ? 8 : 4))
 {
   if (!(((enum rtx_code) (op0)->code) == REG))
     op0 = copy_to_reg (op0);
   op0 = gen_rtx_SUBREG (mode_for_size ((8 * (0 ? 8 : 4)), MODE_INT, 0),
                  op0, (offset * (0 ? 8 : 4)));
 }
      offset = 0;
    }
  else
    op0 = protect_from_queue (str_rtx, 1);
  if (unsignedp)
    {
      if (1
   && (((unsigned short) (((unsigned short) mode_size[extzv_mode]) * 8)) >= bitsize)
   && ! (((((enum rtx_code) (op0)->code) == REG) || ((enum rtx_code) (op0)->code) == SUBREG)
  && (bitsize + bitpos > ((unsigned short) (((unsigned short) mode_size[extzv_mode]) * 8)))))
 {
   unsigned long xbitpos = bitpos, xoffset = offset;
   rtx bitsize_rtx, bitpos_rtx;
   rtx last = get_last_insn ();
   rtx xop0 = op0;
   rtx xtarget = target;
   rtx xspec_target = spec_target;
   rtx xspec_target_subreg = spec_target_subreg;
   rtx pat;
   enum machine_mode maxmode = mode_for_extraction (EP_extzv, 0);
   if ((((enum rtx_code) (xop0)->code) == MEM))
     {
       int save_volatile_ok = volatile_ok;
       volatile_ok = 1;
       if (! ((*insn_data[(int) CODE_FOR_extzv].operand[1].predicate)
       (xop0, ((enum machine_mode) (xop0)->mode))))
  {
    enum machine_mode bestmode;
    if (((enum machine_mode) (xop0)->mode) == BLKmode
        || (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)])
     > ((unsigned short) mode_size[maxmode])))
      bestmode = get_best_mode (bitsize, bitnum,
           ((((xop0)->u.fld[1]).rtmem) != 0 ? (((xop0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (xop0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (xop0)->mode)) : 8)), maxmode,
           (((xop0))->volatil));
    else
      bestmode = ((enum machine_mode) (xop0)->mode);
    if (bestmode == VOIDmode
        || (0
     && ((unsigned short) (((unsigned short) mode_size[bestmode]) * 8)) > ((((xop0)->u.fld[1]).rtmem) != 0 ? (((xop0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (xop0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (xop0)->mode)) : 8))))
      goto extzv_loses;
    unit = ((unsigned short) (((unsigned short) mode_size[bestmode]) * 8));
    xoffset = (bitnum / unit) * ((unsigned short) mode_size[bestmode]);
    xbitpos = bitnum % unit;
    xop0 = adjust_address_1 (xop0, bestmode, xoffset, 1, 1);
    xop0 = force_reg (bestmode, xop0);
  }
       else
  xop0 = adjust_address_1 (xop0, byte_mode, xoffset, 1, 1);
       volatile_ok = save_volatile_ok;
     }
   if (((enum rtx_code) (xop0)->code) == SUBREG && ((enum machine_mode) (xop0)->mode) != maxmode)
     goto extzv_loses;
   if ((((enum rtx_code) (xop0)->code) == REG) && ((enum machine_mode) (xop0)->mode) != maxmode)
     xop0 = gen_rtx_SUBREG (maxmode, xop0, 0);
   if (0 != 0)
     xbitpos = unit - bitsize - xbitpos;
   if (0 && !(((enum rtx_code) (xop0)->code) == MEM))
     xbitpos += ((unsigned short) (((unsigned short) mode_size[maxmode]) * 8)) - unit;
   unit = ((unsigned short) (((unsigned short) mode_size[maxmode]) * 8));
   if (xtarget == 0
       || (flag_force_mem && (((enum rtx_code) (xtarget)->code) == MEM)))
     xtarget = xspec_target = gen_reg_rtx (tmode);
   if (((enum machine_mode) (xtarget)->mode) != maxmode)
     {
       if ((((enum rtx_code) (xtarget)->code) == REG))
  {
    int wider = (((unsigned short) mode_size[maxmode])
          > ((unsigned short) mode_size[((enum machine_mode) (xtarget)->mode)]));
    xtarget = rtl_hooks.gen_lowpart (maxmode, xtarget);
    if (wider)
      xspec_target_subreg = xtarget;
  }
       else
  xtarget = gen_reg_rtx (maxmode);
     }
   if (! ((*insn_data[(int) CODE_FOR_extzv].operand[0].predicate)
   (xtarget, maxmode)))
     xtarget = gen_reg_rtx (maxmode);
   bitsize_rtx = gen_rtx_CONST_INT (VOIDmode, (long) (bitsize));
   bitpos_rtx = gen_rtx_CONST_INT (VOIDmode, (long) (xbitpos));
   pat = gen_extzv (protect_from_queue (xtarget, 1),
      xop0, bitsize_rtx, bitpos_rtx);
   if (pat)
     {
       emit_insn (pat);
       target = xtarget;
       spec_target = xspec_target;
       spec_target_subreg = xspec_target_subreg;
     }
   else
     {
       delete_insns_since (last);
       target = extract_fixed_bit_field (int_mode, op0, offset, bitsize,
      bitpos, target, 1);
     }
 }
      else
      extzv_loses:
 target = extract_fixed_bit_field (int_mode, op0, offset, bitsize,
       bitpos, target, 1);
    }
  else
    {
      if (1
   && (((unsigned short) (((unsigned short) mode_size[extv_mode]) * 8)) >= bitsize)
   && ! (((((enum rtx_code) (op0)->code) == REG) || ((enum rtx_code) (op0)->code) == SUBREG)
  && (bitsize + bitpos > ((unsigned short) (((unsigned short) mode_size[extv_mode]) * 8)))))
 {
   int xbitpos = bitpos, xoffset = offset;
   rtx bitsize_rtx, bitpos_rtx;
   rtx last = get_last_insn ();
   rtx xop0 = op0, xtarget = target;
   rtx xspec_target = spec_target;
   rtx xspec_target_subreg = spec_target_subreg;
   rtx pat;
   enum machine_mode maxmode = mode_for_extraction (EP_extv, 0);
   if ((((enum rtx_code) (xop0)->code) == MEM))
     {
       if (! ((*insn_data[(int) CODE_FOR_extv].operand[1].predicate)
       (xop0, ((enum machine_mode) (xop0)->mode))))
  {
    enum machine_mode bestmode;
    if (((enum machine_mode) (xop0)->mode) == BLKmode
        || (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)])
     > ((unsigned short) mode_size[maxmode])))
      bestmode = get_best_mode (bitsize, bitnum,
           ((((xop0)->u.fld[1]).rtmem) != 0 ? (((xop0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (xop0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (xop0)->mode)) : 8)), maxmode,
           (((xop0))->volatil));
    else
      bestmode = ((enum machine_mode) (xop0)->mode);
    if (bestmode == VOIDmode
        || (0
     && ((unsigned short) (((unsigned short) mode_size[bestmode]) * 8)) > ((((xop0)->u.fld[1]).rtmem) != 0 ? (((xop0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (xop0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (xop0)->mode)) : 8))))
      goto extv_loses;
    unit = ((unsigned short) (((unsigned short) mode_size[bestmode]) * 8));
    xoffset = (bitnum / unit) * ((unsigned short) mode_size[bestmode]);
    xbitpos = bitnum % unit;
    xop0 = adjust_address_1 (xop0, bestmode, xoffset, 1, 1);
    xop0 = force_reg (bestmode, xop0);
  }
       else
  xop0 = adjust_address_1 (xop0, byte_mode, xoffset, 1, 1);
     }
   if (((enum rtx_code) (xop0)->code) == SUBREG && ((enum machine_mode) (xop0)->mode) != maxmode)
     goto extv_loses;
   if ((((enum rtx_code) (xop0)->code) == REG) && ((enum machine_mode) (xop0)->mode) != maxmode)
     xop0 = gen_rtx_SUBREG (maxmode, xop0, 0);
   if (0 != 0)
     xbitpos = unit - bitsize - xbitpos;
   if (0 && !(((enum rtx_code) (xop0)->code) == MEM))
     xbitpos += (((unsigned short) (((unsigned short) mode_size[maxmode]) * 8)) - unit);
   unit = ((unsigned short) (((unsigned short) mode_size[maxmode]) * 8));
   if (xtarget == 0
       || (flag_force_mem && (((enum rtx_code) (xtarget)->code) == MEM)))
     xtarget = xspec_target = gen_reg_rtx (tmode);
   if (((enum machine_mode) (xtarget)->mode) != maxmode)
     {
       if ((((enum rtx_code) (xtarget)->code) == REG))
  {
    int wider = (((unsigned short) mode_size[maxmode])
          > ((unsigned short) mode_size[((enum machine_mode) (xtarget)->mode)]));
    xtarget = rtl_hooks.gen_lowpart (maxmode, xtarget);
    if (wider)
      xspec_target_subreg = xtarget;
  }
       else
  xtarget = gen_reg_rtx (maxmode);
     }
   if (! ((*insn_data[(int) CODE_FOR_extv].operand[0].predicate)
   (xtarget, maxmode)))
     xtarget = gen_reg_rtx (maxmode);
   bitsize_rtx = gen_rtx_CONST_INT (VOIDmode, (long) (bitsize));
   bitpos_rtx = gen_rtx_CONST_INT (VOIDmode, (long) (xbitpos));
   pat = gen_extv (protect_from_queue (xtarget, 1),
     xop0, bitsize_rtx, bitpos_rtx);
   if (pat)
     {
       emit_insn (pat);
       target = xtarget;
       spec_target = xspec_target;
       spec_target_subreg = xspec_target_subreg;
     }
   else
     {
       delete_insns_since (last);
       target = extract_fixed_bit_field (int_mode, op0, offset, bitsize,
      bitpos, target, 0);
     }
 }
      else
      extv_loses:
 target = extract_fixed_bit_field (int_mode, op0, offset, bitsize,
       bitpos, target, 0);
    }
  if (target == spec_target)
    return target;
  if (target == spec_target_subreg)
    return spec_target;
  if (((enum machine_mode) (target)->mode) != tmode && ((enum machine_mode) (target)->mode) != mode)
    {
      if (mode_class[tmode] != MODE_INT
   && mode_class[tmode] != MODE_PARTIAL_INT)
 {
   target = convert_to_mode (mode_for_size (((unsigned short) (((unsigned short) mode_size[tmode]) * 8)),
         MODE_INT, 0),
        target, unsignedp);
   return rtl_hooks.gen_lowpart (tmode, target);
 }
      else
 return convert_to_mode (tmode, target, unsignedp);
    }
  return target;
}
static rtx
extract_fixed_bit_field (enum machine_mode tmode, rtx op0,
    unsigned long offset,
    unsigned long bitsize,
    unsigned long bitpos, rtx target,
    int unsignedp)
{
  unsigned int total_bits = (8 * (0 ? 8 : 4));
  enum machine_mode mode;
  if (((enum rtx_code) (op0)->code) == SUBREG || (((enum rtx_code) (op0)->code) == REG))
    {
      if (bitsize + bitpos > (8 * (0 ? 8 : 4)))
 return extract_split_bit_field (op0, bitsize, bitpos, unsignedp);
    }
  else
    {
      mode = get_best_mode (bitsize, bitpos + offset * 8,
       ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8)), word_mode, (((op0))->volatil));
      if (mode == VOIDmode)
 return extract_split_bit_field (op0, bitsize,
     bitpos + offset * 8,
     unsignedp);
      total_bits = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
      if (bitpos >= total_bits)
 {
   offset += (bitpos / total_bits) * (total_bits / 8);
   bitpos -= ((bitpos / total_bits) * (total_bits / 8)
       * 8);
 }
      bitpos += (offset % (total_bits / 8)) * 8;
      offset -= (offset % (total_bits / 8));
      op0 = adjust_address_1 (op0, mode, offset, 1, 1);
    }
  mode = ((enum machine_mode) (op0)->mode);
  if (0)
    bitpos = total_bits - bitsize - bitpos;
  if (unsignedp)
    {
      if (bitpos)
 {
   tree amount = build_int_2_wide ((unsigned long) (bitpos), (long) (0));
   rtx subtarget = (target != 0 && (((enum rtx_code) (target)->code) == REG) ? target : 0);
   if (tmode != mode) subtarget = 0;
   op0 = expand_shift (RSHIFT_EXPR, mode, op0, amount, subtarget, 1);
 }
      if (mode != tmode)
 op0 = convert_to_mode (tmode, op0, 1);
      if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) != bitpos + bitsize)
 return expand_binop (((enum machine_mode) (op0)->mode), (optab_table[OTI_and]), op0,
        mask_rtx (((enum machine_mode) (op0)->mode), 0, bitsize, 0),
        target, 1, OPTAB_LIB_WIDEN);
      return op0;
    }
  op0 = force_reg (mode, op0);
  if (mode != tmode)
    target = 0;
  for (mode = class_narrowest_mode[MODE_INT]; mode != VOIDmode;
       mode = mode_wider[mode])
    if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) >= bitsize + bitpos)
      {
 op0 = convert_to_mode (mode, op0, 0);
 break;
      }
  if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) != (bitsize + bitpos))
    {
      tree amount
 = build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - (bitsize + bitpos)), (long) (0));
      rtx subtarget = (target != 0 && (((enum rtx_code) (target)->code) == REG) ? target : 0);
      op0 = expand_shift (LSHIFT_EXPR, mode, op0, amount, subtarget, 1);
    }
  return expand_shift (RSHIFT_EXPR, mode, op0,
         build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - bitsize), (long) (0)),
         target, 0);
}
static rtx
mask_rtx (enum machine_mode mode, int bitpos, int bitsize, int complement)
{
  long masklow, maskhigh;
  if (bitsize == 0)
    masklow = 0;
  else if (bitpos < (8 * 4))
    masklow = (long) -1 << bitpos;
  else
    masklow = 0;
  if (bitpos + bitsize < (8 * 4))
    masklow &= ((unsigned long) -1
  >> ((8 * 4) - bitpos - bitsize));
  if (bitpos <= (8 * 4))
    maskhigh = -1;
  else
    maskhigh = (long) -1 << (bitpos - (8 * 4));
  if (bitsize == 0)
    maskhigh = 0;
  else if (bitpos + bitsize > (8 * 4))
    maskhigh &= ((unsigned long) -1
   >> (2 * (8 * 4) - bitpos - bitsize));
  else
    maskhigh = 0;
  if (complement)
    {
      maskhigh = ~maskhigh;
      masklow = ~masklow;
    }
  return immed_double_const (masklow, maskhigh, mode);
}
static rtx
lshift_value (enum machine_mode mode, rtx value1, int bitpos, int bitsize)
{
  unsigned long v = ((value1)->u.hwint[0]);
  long low, high;
  if (bitsize < (8 * 4))
    v &= ~((long) -1 << bitsize);
  if (bitpos < (8 * 4))
    {
      low = v << bitpos;
      high = (bitpos > 0 ? (v >> ((8 * 4) - bitpos)) : 0);
    }
  else
    {
      low = 0;
      high = v << (bitpos - (8 * 4));
    }
  return immed_double_const (low, high, mode);
}
static rtx
extract_split_bit_field (rtx op0, unsigned long bitsize,
    unsigned long bitpos, int unsignedp)
{
  unsigned int unit;
  unsigned int bitsdone = 0;
  rtx result = (rtx) 0;
  int first = 1;
  if ((((enum rtx_code) (op0)->code) == REG) || ((enum rtx_code) (op0)->code) == SUBREG)
    unit = (8 * (0 ? 8 : 4));
  else
    unit = ((((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8))) < ((8 * (0 ? 8 : 4))) ? (((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8))) : ((8 * (0 ? 8 : 4))));
  while (bitsdone < bitsize)
    {
      unsigned long thissize;
      rtx part, word;
      unsigned long thispos;
      unsigned long offset;
      offset = (bitpos + bitsdone) / unit;
      thispos = (bitpos + bitsdone) % unit;
      thissize = ((bitsize - bitsdone) < ((8 * (0 ? 8 : 4))) ? (bitsize - bitsdone) : ((8 * (0 ? 8 : 4))));
      thissize = ((thissize) < (unit - thispos) ? (thissize) : (unit - thispos));
      if (((enum rtx_code) (op0)->code) == SUBREG)
 {
   int word_offset = ((((op0)->u.fld[1]).rtuint) / (0 ? 8 : 4)) + offset;
   word = operand_subword_force ((((op0)->u.fld[0]).rtx1), word_offset,
     ((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode));
   offset = 0;
 }
      else if ((((enum rtx_code) (op0)->code) == REG))
 {
   word = operand_subword_force (op0, offset, ((enum machine_mode) (op0)->mode));
   offset = 0;
 }
      else
 word = op0;
      part = extract_fixed_bit_field (word_mode, word,
          offset * unit / 8,
          thissize, thispos, 0, 1);
      bitsdone += thissize;
      if (0)
 {
   if (bitsize != bitsdone)
     part = expand_shift (LSHIFT_EXPR, word_mode, part,
     build_int_2_wide ((unsigned long) (bitsize - bitsdone), (long) (0)), 0, 1);
 }
      else
 {
   if (bitsdone != thissize)
     part = expand_shift (LSHIFT_EXPR, word_mode, part,
     build_int_2_wide ((unsigned long) (bitsdone - thissize), (long) (0)), 0, 1);
 }
      if (first)
 result = part;
      else
 result = expand_binop (word_mode, (optab_table[OTI_ior]), part, result, (rtx) 0, 1,
          OPTAB_LIB_WIDEN);
      first = 0;
    }
  if (unsignedp)
    return result;
  result = expand_shift (LSHIFT_EXPR, word_mode, result,
    build_int_2_wide ((unsigned long) ((8 * (0 ? 8 : 4)) - bitsize), (long) (0)),
    (rtx) 0, 0);
  return expand_shift (RSHIFT_EXPR, word_mode, result,
         build_int_2_wide ((unsigned long) ((8 * (0 ? 8 : 4)) - bitsize), (long) (0)), (rtx) 0, 0);
}
void
expand_inc (rtx target, rtx inc)
{
  rtx value1 = expand_binop (((enum machine_mode) (target)->mode), (optab_table[OTI_add]),
       target, inc,
       target, 0, OPTAB_LIB_WIDEN);
  if (value1 != target)
    emit_move_insn (target, value1);
}
void
expand_dec (rtx target, rtx dec)
{
  rtx value1 = expand_binop (((enum machine_mode) (target)->mode), (optab_table[OTI_sub]),
       target, dec,
       target, 0, OPTAB_LIB_WIDEN);
  if (value1 != target)
    emit_move_insn (target, value1);
}
rtx
expand_shift (enum tree_code code, enum machine_mode mode, rtx shifted,
       tree amount, rtx target, int unsignedp)
{
  rtx op1, temp = 0;
  int left = (code == LSHIFT_EXPR || code == LROTATE_EXPR);
  int rotate = (code == LROTATE_EXPR || code == RROTATE_EXPR);
  int try;
  op1 = expand_expr (amount, (rtx) 0, VOIDmode, 0);
  if (0)
    {
      if (((enum rtx_code) (op1)->code) == CONST_INT
   && ((unsigned long) ((op1)->u.hwint[0]) >=
       (unsigned long) ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))
 op1 = gen_rtx_CONST_INT (VOIDmode, (long) ((unsigned long) ((op1)->u.hwint[0]) % ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))
                                   ;
      else if (((enum rtx_code) (op1)->code) == SUBREG
        && subreg_lowpart_p (op1))
 op1 = (((op1)->u.fld[0]).rtx1);
    }
  if (op1 == (const_int_rtx[64]))
    return shifted;
  if (code == LSHIFT_EXPR
      && ((enum rtx_code) (op1)->code) == CONST_INT
      && ((op1)->u.hwint[0]) > 0
      && ((op1)->u.hwint[0]) < ((unsigned short) (((unsigned short) mode_size[mode]) * 8))
      && shift_cost[mode][((op1)->u.hwint[0])] > ((op1)->u.hwint[0]) * add_cost[mode])
    {
      int i;
      for (i = 0; i < ((op1)->u.hwint[0]); i++)
 {
   temp = force_reg (mode, shifted);
   shifted = expand_binop (mode, (optab_table[OTI_add]), temp, temp, (rtx) 0,
      unsignedp, OPTAB_LIB_WIDEN);
 }
      return shifted;
    }
  for (try = 0; temp == 0 && try < 3; try++)
    {
      enum optab_methods methods;
      if (try == 0)
 methods = OPTAB_DIRECT;
      else if (try == 1)
 methods = OPTAB_WIDEN;
      else
 methods = OPTAB_LIB_WIDEN;
      if (rotate)
 {
   if (methods == OPTAB_WIDEN)
     continue;
   else if (methods == OPTAB_LIB_WIDEN)
     {
       rtx subtarget = target == shifted ? 0 : target;
       rtx temp1;
       tree type = ((amount)->common.type);
       tree new_amount = make_tree (type, op1);
       tree other_amount
  = fold (build (MINUS_EXPR, type,
          convert (type,
     build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8))), (long) (0))
             ),
          amount));
       shifted = force_reg (mode, shifted);
       temp = expand_shift (left ? LSHIFT_EXPR : RSHIFT_EXPR,
       mode, shifted, new_amount, subtarget, 1);
       temp1 = expand_shift (left ? RSHIFT_EXPR : LSHIFT_EXPR,
        mode, shifted, other_amount, 0, 1);
       return expand_binop (mode, (optab_table[OTI_ior]), temp, temp1, target,
       unsignedp, methods);
     }
   temp = expand_binop (mode,
          left ? (optab_table[OTI_rotl]) : (optab_table[OTI_rotr]),
          shifted, op1, target, unsignedp, methods);
   if (temp == 0 && ((enum rtx_code) (op1)->code) == CONST_INT
       && ((op1)->u.hwint[0]) > 0
       && (unsigned int) ((op1)->u.hwint[0]) < ((unsigned short) (((unsigned short) mode_size[mode]) * 8)))
     temp = expand_binop (mode,
     left ? (optab_table[OTI_rotr]) : (optab_table[OTI_rotl]),
     shifted,
     gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - ((op1)->u.hwint[0])))
                      ,
     target, unsignedp, methods);
 }
      else if (unsignedp)
 temp = expand_binop (mode,
        left ? (optab_table[OTI_ashl]) : (optab_table[OTI_lshr]),
        shifted, op1, target, unsignedp, methods);
      if (temp == 0 && ! rotate
   && (! unsignedp || (! left && methods == OPTAB_WIDEN)))
 {
   enum optab_methods methods1 = methods;
   if (unsignedp)
     methods1 = OPTAB_MUST_WIDEN;
   temp = expand_binop (mode,
          left ? (optab_table[OTI_ashl]) : (optab_table[OTI_ashr]),
          shifted, op1, target, unsignedp, methods1);
 }
    }
  if (temp == 0)
    abort ();
  return temp;
}
enum alg_code { alg_zero, alg_m, alg_shift,
    alg_add_t_m2, alg_sub_t_m2,
    alg_add_factor, alg_sub_factor,
    alg_add_t2_m, alg_sub_t2_m,
    alg_add, alg_subtract, alg_factor, alg_shiftop };
struct algorithm
{
  short cost;
  short ops;
  enum alg_code op[32];
  char log[32];
};
enum mult_variant {basic_variant, negate_variant, add_variant};
static void synth_mult (struct algorithm *, unsigned long,
   int, enum machine_mode mode);
static unsigned char choose_mult_variant (enum machine_mode, long,
     struct algorithm *, enum mult_variant *, int);
static rtx expand_mult_const (enum machine_mode, rtx, long, rtx,
         const struct algorithm *, enum mult_variant);
static unsigned long choose_multiplier (unsigned long, int,
       int, unsigned long *,
       int *, int *);
static unsigned long invert_mod2n (unsigned long, int);
static rtx extract_high_half (enum machine_mode, rtx);
static rtx expand_mult_highpart_optab (enum machine_mode, rtx, rtx, rtx,
           int, int);
static void
synth_mult (struct algorithm *alg_out, unsigned long t,
     int cost_limit, enum machine_mode mode)
{
  int m;
  struct algorithm *alg_in, *best_alg;
  int cost;
  unsigned long q;
  int maxm = (((8 * (0 ? 8 : 4))) < (((unsigned short) (((unsigned short) mode_size[mode]) * 8))) ? ((8 * (0 ? 8 : 4))) : (((unsigned short) (((unsigned short) mode_size[mode]) * 8))));
  alg_out->cost = cost_limit;
  if (cost_limit <= 0)
    return;
  t &= mode_mask_array[mode];
  if (t == 1)
    {
      alg_out->ops = 1;
      alg_out->cost = 0;
      alg_out->op[0] = alg_m;
      return;
    }
  if (t == 0)
    {
      if (zero_cost >= cost_limit)
 return;
      else
 {
   alg_out->ops = 1;
   alg_out->cost = zero_cost;
   alg_out->op[0] = alg_zero;
   return;
 }
    }
  alg_in = C_alloca(sizeof (struct algorithm));
  best_alg = C_alloca(sizeof (struct algorithm));
  if ((t & 1) == 0)
    {
      m = floor_log2_wide ((unsigned long) (t & -t));
      if (m < maxm)
 {
   q = t >> m;
   cost = m * add_cost[mode];
   if (shift_cost[mode][m] < cost)
     cost = shift_cost[mode][m];
   synth_mult (alg_in, q, cost_limit - cost, mode);
   cost += alg_in->cost;
   if (cost < cost_limit)
     {
       struct algorithm *x;
       x = alg_in, alg_in = best_alg, best_alg = x;
       best_alg->log[best_alg->ops] = m;
       best_alg->op[best_alg->ops] = alg_shift;
       cost_limit = cost;
     }
 }
    }
  if ((t & 1) != 0)
    {
      unsigned long w;
      for (w = 1; (w & t) != 0; w <<= 1)
 ;
      if (w == 0
   || (w > 2
       && t != 3))
 {
   cost = add_cost[mode];
   synth_mult (alg_in, t + 1, cost_limit - cost, mode);
   cost += alg_in->cost;
   if (cost < cost_limit)
     {
       struct algorithm *x;
       x = alg_in, alg_in = best_alg, best_alg = x;
       best_alg->log[best_alg->ops] = 0;
       best_alg->op[best_alg->ops] = alg_sub_t_m2;
       cost_limit = cost;
     }
 }
      else
 {
   cost = add_cost[mode];
   synth_mult (alg_in, t - 1, cost_limit - cost, mode);
   cost += alg_in->cost;
   if (cost < cost_limit)
     {
       struct algorithm *x;
       x = alg_in, alg_in = best_alg, best_alg = x;
       best_alg->log[best_alg->ops] = 0;
       best_alg->op[best_alg->ops] = alg_add_t_m2;
       cost_limit = cost;
     }
 }
    }
  for (m = floor_log2_wide ((unsigned long) (t - 1)); m >= 2; m--)
    {
      unsigned long d;
      d = ((unsigned long) 1 << m) + 1;
      if (t % d == 0 && t > d && m < maxm)
 {
   cost = add_cost[mode] + shift_cost[mode][m];
   if (shiftadd_cost[mode][m] < cost)
     cost = shiftadd_cost[mode][m];
   synth_mult (alg_in, t / d, cost_limit - cost, mode);
   cost += alg_in->cost;
   if (cost < cost_limit)
     {
       struct algorithm *x;
       x = alg_in, alg_in = best_alg, best_alg = x;
       best_alg->log[best_alg->ops] = m;
       best_alg->op[best_alg->ops] = alg_add_factor;
       cost_limit = cost;
     }
   break;
 }
      d = ((unsigned long) 1 << m) - 1;
      if (t % d == 0 && t > d && m < maxm)
 {
   cost = add_cost[mode] + shift_cost[mode][m];
   if (shiftsub_cost[mode][m] < cost)
     cost = shiftsub_cost[mode][m];
   synth_mult (alg_in, t / d, cost_limit - cost, mode);
   cost += alg_in->cost;
   if (cost < cost_limit)
     {
       struct algorithm *x;
       x = alg_in, alg_in = best_alg, best_alg = x;
       best_alg->log[best_alg->ops] = m;
       best_alg->op[best_alg->ops] = alg_sub_factor;
       cost_limit = cost;
     }
   break;
 }
    }
  if ((t & 1) != 0)
    {
      q = t - 1;
      q = q & -q;
      m = exact_log2_wide ((unsigned long) (q));
      if (m >= 0 && m < maxm)
 {
   cost = shiftadd_cost[mode][m];
   synth_mult (alg_in, (t - 1) >> m, cost_limit - cost, mode);
   cost += alg_in->cost;
   if (cost < cost_limit)
     {
       struct algorithm *x;
       x = alg_in, alg_in = best_alg, best_alg = x;
       best_alg->log[best_alg->ops] = m;
       best_alg->op[best_alg->ops] = alg_add_t2_m;
       cost_limit = cost;
     }
 }
      q = t + 1;
      q = q & -q;
      m = exact_log2_wide ((unsigned long) (q));
      if (m >= 0 && m < maxm)
 {
   cost = shiftsub_cost[mode][m];
   synth_mult (alg_in, (t + 1) >> m, cost_limit - cost, mode);
   cost += alg_in->cost;
   if (cost < cost_limit)
     {
       struct algorithm *x;
       x = alg_in, alg_in = best_alg, best_alg = x;
       best_alg->log[best_alg->ops] = m;
       best_alg->op[best_alg->ops] = alg_sub_t2_m;
       cost_limit = cost;
     }
 }
    }
  if (cost_limit == alg_out->cost)
    return;
  if (best_alg->ops == 32)
    return;
  alg_out->ops = best_alg->ops + 1;
  alg_out->cost = cost_limit;
  memcpy (alg_out->op, best_alg->op,
   alg_out->ops * sizeof *alg_out->op);
  memcpy (alg_out->log, best_alg->log,
   alg_out->ops * sizeof *alg_out->log);
}
static unsigned char
choose_mult_variant (enum machine_mode mode, long val,
       struct algorithm *alg, enum mult_variant *variant,
       int mult_cost)
{
  struct algorithm alg2;
  *variant = basic_variant;
  synth_mult (alg, val, mult_cost, mode);
  if ((8 * 4) >= ((unsigned short) (((unsigned short) mode_size[mode]) * 8)))
    {
      synth_mult (&alg2, -val, ((alg->cost) < (mult_cost) ? (alg->cost) : (mult_cost)) - neg_cost[mode],
    mode);
      alg2.cost += neg_cost[mode];
      if (alg2.cost < alg->cost)
 *alg = alg2, *variant = negate_variant;
    }
  synth_mult (&alg2, val - 1, ((alg->cost) < (mult_cost) ? (alg->cost) : (mult_cost)) - add_cost[mode],
       mode);
  alg2.cost += add_cost[mode];
  if (alg2.cost < alg->cost)
    *alg = alg2, *variant = add_variant;
  return alg->cost < mult_cost;
}
static rtx
expand_mult_const (enum machine_mode mode, rtx op0, long val,
     rtx target, const struct algorithm *alg,
     enum mult_variant variant)
{
  long val_so_far;
  rtx insn, accum, tem;
  int opno;
  enum machine_mode nmode;
  op0 = protect_from_queue (op0, 0);
  if ((((enum rtx_code) (op0)->code) == MEM))
    op0 = force_reg (mode, op0);
  if (alg->op[0] == alg_zero)
    {
      accum = copy_to_mode_reg (mode, (const_int_rtx[64]));
      val_so_far = 0;
    }
  else if (alg->op[0] == alg_m)
    {
      accum = copy_to_mode_reg (mode, op0);
      val_so_far = 1;
    }
  else
    abort ();
  for (opno = 1; opno < alg->ops; opno++)
    {
      int log = alg->log[opno];
      int preserve = preserve_subexpressions_p ();
      rtx shift_subtarget = preserve ? 0 : accum;
      rtx add_target
 = (opno == alg->ops - 1 && target != 0 && variant != add_variant
    && ! preserve)
   ? target : 0;
      rtx accum_target = preserve ? 0 : accum;
      switch (alg->op[opno])
 {
 case alg_shift:
   accum = expand_shift (LSHIFT_EXPR, mode, accum,
    build_int_2_wide ((unsigned long) (log), (long) (0)), (rtx) 0, 0);
   val_so_far <<= log;
   break;
 case alg_add_t_m2:
   tem = expand_shift (LSHIFT_EXPR, mode, op0,
         build_int_2_wide ((unsigned long) (log), (long) (0)), (rtx) 0, 0);
   accum = force_operand (gen_rtx_fmt_ee (PLUS, (mode), (accum), (tem)),
     add_target ? add_target : accum_target);
   val_so_far += (long) 1 << log;
   break;
 case alg_sub_t_m2:
   tem = expand_shift (LSHIFT_EXPR, mode, op0,
         build_int_2_wide ((unsigned long) (log), (long) (0)), (rtx) 0, 0);
   accum = force_operand (gen_rtx_fmt_ee (MINUS, (mode), (accum), (tem)),
     add_target ? add_target : accum_target);
   val_so_far -= (long) 1 << log;
   break;
 case alg_add_t2_m:
   accum = expand_shift (LSHIFT_EXPR, mode, accum,
    build_int_2_wide ((unsigned long) (log), (long) (0)), shift_subtarget,
    0);
   accum = force_operand (gen_rtx_fmt_ee (PLUS, (mode), (accum), (op0)),
     add_target ? add_target : accum_target);
   val_so_far = (val_so_far << log) + 1;
   break;
 case alg_sub_t2_m:
   accum = expand_shift (LSHIFT_EXPR, mode, accum,
    build_int_2_wide ((unsigned long) (log), (long) (0)), shift_subtarget, 0);
   accum = force_operand (gen_rtx_fmt_ee (MINUS, (mode), (accum), (op0)),
     add_target ? add_target : accum_target);
   val_so_far = (val_so_far << log) - 1;
   break;
 case alg_add_factor:
   tem = expand_shift (LSHIFT_EXPR, mode, accum,
         build_int_2_wide ((unsigned long) (log), (long) (0)), (rtx) 0, 0);
   accum = force_operand (gen_rtx_fmt_ee (PLUS, (mode), (accum), (tem)),
     add_target ? add_target : accum_target);
   val_so_far += val_so_far << log;
   break;
 case alg_sub_factor:
   tem = expand_shift (LSHIFT_EXPR, mode, accum,
         build_int_2_wide ((unsigned long) (log), (long) (0)), (rtx) 0, 0);
   accum = force_operand (gen_rtx_fmt_ee (MINUS, (mode), (tem), (accum)),
     (add_target ? add_target
      : preserve ? 0 : tem));
   val_so_far = (val_so_far << log) - val_so_far;
   break;
 default:
   abort ();
 }
      tem = op0, nmode = mode;
      if (((enum rtx_code) (accum)->code) == SUBREG)
 {
   nmode = ((enum machine_mode) ((((accum)->u.fld[0]).rtx1))->mode);
   tem = rtl_hooks.gen_lowpart (nmode, op0);
 }
      insn = get_last_insn ();
      set_unique_reg_note (insn, REG_EQUAL,
      gen_rtx_fmt_ee (MULT, (nmode), (tem), (gen_rtx_CONST_INT (VOIDmode, (long) (val_so_far)))));
    }
  if (variant == negate_variant)
    {
      val_so_far = -val_so_far;
      accum = expand_unop (mode, (optab_table[OTI_neg]), accum, target, 0);
    }
  else if (variant == add_variant)
    {
      val_so_far = val_so_far + 1;
      accum = force_operand (gen_rtx_fmt_ee (PLUS, (mode), (accum), (op0)), target);
    }
  val &= mode_mask_array[mode];
  val_so_far &= mode_mask_array[mode];
  if (val != val_so_far)
    abort ();
  return accum;
}
rtx
expand_mult (enum machine_mode mode, rtx op0, rtx op1, rtx target,
      int unsignedp)
{
  rtx const_op1 = op1;
  enum mult_variant variant;
  struct algorithm algorithm;
  if (((enum rtx_code) (op1)->code) == CONST_DOUBLE
      && mode_class[((enum machine_mode) (op1)->mode)] == MODE_INT
      && (8 * 4) >= (8 * (0 ? 8 : 4))
      && ((op1)->u.hwint[1]) == 0)
    const_op1 = gen_rtx_CONST_INT (VOIDmode, (long) (((op1)->u.hwint[0])));
  else if ((8 * 4) < ((unsigned short) (((unsigned short) mode_size[mode]) * 8))
    && ((enum rtx_code) (op1)->code) == CONST_INT
    && ((op1)->u.hwint[0]) < 0)
    const_op1 = 0;
  if (const_op1 && ((enum rtx_code) (const_op1)->code) == CONST_INT
      && (unsignedp || !flag_trapv))
    {
      int mult_cost = rtx_cost (gen_rtx_fmt_ee (MULT, (mode), (op0), (op1)), SET);
      if (choose_mult_variant (mode, ((const_op1)->u.hwint[0]), &algorithm, &variant,
          mult_cost))
 return expand_mult_const (mode, op0, ((const_op1)->u.hwint[0]), target,
      &algorithm, variant);
    }
  if (((enum rtx_code) (op0)->code) == CONST_DOUBLE)
    {
      rtx temp = op0;
      op0 = op1;
      op1 = temp;
    }
  if (((enum rtx_code) (op1)->code) == CONST_DOUBLE
      && mode_class[mode] == MODE_FLOAT)
    {
      struct real_value d;
      memcpy (&(d), &(((op1))->u.hwint[0]), sizeof (struct real_value));
      if (real_compare (EQ_EXPR, &(d), &(dconst2)))
 {
   op0 = force_reg (((enum machine_mode) (op0)->mode), op0);
   return expand_binop (mode, (optab_table[OTI_add]), op0, op0,
          target, unsignedp, OPTAB_LIB_WIDEN);
 }
    }
  op0 = expand_binop (mode,
        ! unsignedp
        && flag_trapv && (mode_class[mode] == MODE_INT)
        ? (optab_table[OTI_smulv]) : (optab_table[OTI_smul]),
        op0, op1, target, unsignedp, OPTAB_LIB_WIDEN);
  if (op0 == 0)
    abort ();
  return op0;
}
int
ceil_log2 (unsigned long x)
{
  return floor_log2_wide ((unsigned long) (x - 1)) + 1;
}
static
unsigned long
choose_multiplier (unsigned long d, int n, int precision,
     unsigned long *multiplier_ptr,
     int *post_shift_ptr, int *lgup_ptr)
{
  long mhigh_hi, mlow_hi;
  unsigned long mhigh_lo, mlow_lo;
  int lgup, post_shift;
  int pow, pow2;
  unsigned long nl, dummy1;
  long nh, dummy2;
  lgup = ceil_log2 (d);
  if (lgup > n)
    abort ();
  pow = n + lgup;
  pow2 = n + lgup - precision;
  if (pow == 2 * (8 * 4))
    {
      abort ();
    }
 if (pow >= (8 * 4))
    {
      nh = (long) 1 << (pow - (8 * 4));
      nl = 0;
    }
  else
    {
      nh = 0;
      nl = (unsigned long) 1 << pow;
    }
  div_and_round_double (TRUNC_DIV_EXPR, 1, nl, nh, d, (long) 0,
   &mlow_lo, &mlow_hi, &dummy1, &dummy2);
  if (pow2 >= (8 * 4))
    nh |= (long) 1 << (pow2 - (8 * 4));
  else
    nl |= (unsigned long) 1 << pow2;
  div_and_round_double (TRUNC_DIV_EXPR, 1, nl, nh, d, (long) 0,
   &mhigh_lo, &mhigh_hi, &dummy1, &dummy2);
  if (mhigh_hi && nh - d >= d)
    abort ();
  if (mhigh_hi > 1 || mlow_hi > 1)
    abort ();
  if (! (mlow_hi < mhigh_hi || (mlow_hi == mhigh_hi && mlow_lo < mhigh_lo)))
    abort ();
  for (post_shift = lgup; post_shift > 0; post_shift--)
    {
      unsigned long ml_lo = (mlow_hi << ((8 * 4) - 1)) | (mlow_lo >> 1);
      unsigned long mh_lo = (mhigh_hi << ((8 * 4) - 1)) | (mhigh_lo >> 1);
      if (ml_lo >= mh_lo)
 break;
      mlow_hi = 0;
      mlow_lo = ml_lo;
      mhigh_hi = 0;
      mhigh_lo = mh_lo;
    }
  *post_shift_ptr = post_shift;
  *lgup_ptr = lgup;
  if (n < (8 * 4))
    {
      unsigned long mask = ((unsigned long) 1 << n) - 1;
      *multiplier_ptr = mhigh_lo & mask;
      return mhigh_lo >= mask;
    }
  else
    {
      *multiplier_ptr = mhigh_lo;
      return mhigh_hi;
    }
}
static unsigned long
invert_mod2n (unsigned long x, int n)
{
  unsigned long mask;
  unsigned long y = x;
  int nbit = 3;
  mask = (n == (8 * 4)
   ? ~(unsigned long) 0
   : ((unsigned long) 1 << n) - 1);
  while (nbit < n)
    {
      y = y * (2 - x*y) & mask;
      nbit *= 2;
    }
  return y;
}
rtx
expand_mult_highpart_adjust (enum machine_mode mode, rtx adj_operand, rtx op0,
        rtx op1, rtx target, int unsignedp)
{
  rtx tem;
  enum rtx_code adj_code = unsignedp ? PLUS : MINUS;
  tem = expand_shift (RSHIFT_EXPR, mode, op0,
        build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1), (long) (0)),
        (rtx) 0, 0);
  tem = expand_and (mode, tem, op1, (rtx) 0);
  adj_operand
    = force_operand (gen_rtx_fmt_ee (adj_code, mode, adj_operand, tem),
       adj_operand);
  tem = expand_shift (RSHIFT_EXPR, mode, op1,
        build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1), (long) (0)),
        (rtx) 0, 0);
  tem = expand_and (mode, tem, op0, (rtx) 0);
  target = force_operand (gen_rtx_fmt_ee (adj_code, mode, adj_operand, tem),
     target);
  return target;
}
static rtx
extract_high_half (enum machine_mode mode, rtx op)
{
  enum machine_mode wider_mode;
  if (mode == word_mode)
    return gen_highpart (mode, op);
  wider_mode = mode_wider[mode];
  op = expand_shift (RSHIFT_EXPR, wider_mode, op,
       build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8))), (long) (0)), 0, 1);
  return convert_modes (mode, wider_mode, op, 0);
}
static rtx
expand_mult_highpart_optab (enum machine_mode mode, rtx op0, rtx op1,
       rtx target, int unsignedp, int max_cost)
{
  rtx narrow_op1 = gen_int_mode (((op1)->u.hwint[0]), mode);
  enum machine_mode wider_mode;
  optab moptab;
  rtx tem;
  int size;
  wider_mode = mode_wider[mode];
  size = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  if (mul_highpart_cost[mode] < max_cost)
    {
      moptab = unsignedp ? (optab_table[OTI_umul_highpart]) : (optab_table[OTI_smul_highpart]);
      tem = expand_binop (mode, moptab, op0, narrow_op1, target,
     unsignedp, OPTAB_DIRECT);
      if (tem)
 return tem;
    }
  if (size - 1 < (8 * (0 ? 8 : 4))
      && (mul_highpart_cost[mode] + 2 * shift_cost[mode][size-1]
   + 4 * add_cost[mode] < max_cost))
    {
      moptab = unsignedp ? (optab_table[OTI_smul_highpart]) : (optab_table[OTI_umul_highpart]);
      tem = expand_binop (mode, moptab, op0, narrow_op1, target,
     unsignedp, OPTAB_DIRECT);
      if (tem)
 return expand_mult_highpart_adjust (mode, tem, op0, narrow_op1,
         tem, unsignedp);
    }
  moptab = unsignedp ? (optab_table[OTI_umul_widen]) : (optab_table[OTI_smul_widen]);
  if (moptab->handlers[wider_mode].insn_code != CODE_FOR_nothing
      && mul_widen_cost[wider_mode] < max_cost)
    {
      tem = expand_binop (wider_mode, moptab, op0, narrow_op1, 0,
     unsignedp, OPTAB_WIDEN);
      if (tem)
 return extract_high_half (mode, tem);
    }
  moptab = (optab_table[OTI_smul]);
  if ((optab_table[OTI_smul])->handlers[wider_mode].insn_code != CODE_FOR_nothing
      && size - 1 < (8 * (0 ? 8 : 4))
      && mul_cost[wider_mode] + shift_cost[mode][size-1] < max_cost)
    {
      tem = expand_binop (wider_mode, moptab, op0, op1, 0,
     unsignedp, OPTAB_WIDEN);
      if (tem)
 return extract_high_half (mode, tem);
    }
  moptab = unsignedp ? (optab_table[OTI_smul_widen]) : (optab_table[OTI_umul_widen]);
  if (moptab->handlers[wider_mode].insn_code != CODE_FOR_nothing
      && size - 1 < (8 * (0 ? 8 : 4))
      && (mul_widen_cost[wider_mode] + 2 * shift_cost[mode][size-1]
   + 4 * add_cost[mode] < max_cost))
    {
      tem = expand_binop (wider_mode, moptab, op0, narrow_op1,
     (rtx) 0, ! unsignedp, OPTAB_WIDEN);
      if (tem != 0)
 {
   tem = extract_high_half (mode, tem);
   return expand_mult_highpart_adjust (mode, tem, op0, narrow_op1,
           target, unsignedp);
 }
    }
  return 0;
}
rtx
expand_mult_highpart (enum machine_mode mode, rtx op0,
        unsigned long cnst1, rtx target,
        int unsignedp, int max_cost)
{
  enum machine_mode wider_mode = mode_wider[mode];
  int extra_cost;
  unsigned char sign_adjust = 0;
  enum mult_variant variant;
  struct algorithm alg;
  rtx op1, tem;
  if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) > (8 * 4))
    abort ();
  op1 = gen_int_mode (cnst1, wider_mode);
  cnst1 &= mode_mask_array[mode];
  if (((unsigned short) (((unsigned short) mode_size[wider_mode]) * 8)) > (8 * (0 ? 8 : 4)))
    return expand_mult_highpart_optab (mode, op0, op1, target,
           unsignedp, max_cost);
  extra_cost = shift_cost[mode][((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1];
  if (!unsignedp && ((cnst1 >> (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1)) & 1))
    {
      sign_adjust = 1;
      extra_cost += add_cost[mode];
    }
  if (choose_mult_variant (wider_mode, cnst1, &alg, &variant,
      max_cost - extra_cost))
    {
      tem = expand_mult_highpart_optab (mode, op0, op1, target,
     unsignedp, alg.cost + extra_cost);
      if (tem)
 return tem;
      tem = convert_to_mode (wider_mode, op0, unsignedp);
      tem = expand_mult_const (wider_mode, tem, cnst1, 0, &alg, variant);
      tem = extract_high_half (mode, tem);
      if (sign_adjust)
 tem = force_operand (gen_rtx_fmt_ee (MINUS, (mode), (tem), (op0)), tem);
      return tem;
    }
  return expand_mult_highpart_optab (mode, op0, op1, target,
         unsignedp, max_cost);
}
static rtx
expand_smod_pow2 (enum machine_mode mode, rtx op0, long d)
{
  unsigned long mask;
  rtx result, temp, shift, label;
  int logd;
  logd = floor_log2_wide ((unsigned long) (d));
  result = gen_reg_rtx (mode);
  if (ix86_branch_cost >= 2
      && !optimize_size)
    {
      rtx signmask = emit_store_flag (result, LT, op0, (const_int_rtx[64]),
          mode, 0, -1);
      if (signmask)
 {
   signmask = force_reg (mode, signmask);
   mask = ((long) 1 << logd) - 1;
   shift = gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - logd));
   temp = gen_rtx_fmt_ee (LSHIFTRT, (mode), (result), (shift));
   if ((optab_table[OTI_lshr])->handlers[mode].insn_code == CODE_FOR_nothing
       || rtx_cost (temp, SET) > ((2) * 4))
     {
       temp = expand_binop (mode, (optab_table[OTI_xor]), op0, signmask,
       (rtx) 0, 1, OPTAB_LIB_WIDEN);
       temp = expand_binop (mode, (optab_table[OTI_sub]), temp, signmask,
       (rtx) 0, 1, OPTAB_LIB_WIDEN);
       temp = expand_binop (mode, (optab_table[OTI_and]), temp, gen_rtx_CONST_INT (VOIDmode, (long) (mask)),
       (rtx) 0, 1, OPTAB_LIB_WIDEN);
       temp = expand_binop (mode, (optab_table[OTI_xor]), temp, signmask,
       (rtx) 0, 1, OPTAB_LIB_WIDEN);
       temp = expand_binop (mode, (optab_table[OTI_sub]), temp, signmask,
       (rtx) 0, 1, OPTAB_LIB_WIDEN);
     }
   else
     {
       signmask = expand_binop (mode, (optab_table[OTI_lshr]), signmask, shift,
           (rtx) 0, 1, OPTAB_LIB_WIDEN);
       signmask = force_reg (mode, signmask);
       temp = expand_binop (mode, (optab_table[OTI_add]), op0, signmask,
       (rtx) 0, 1, OPTAB_LIB_WIDEN);
       temp = expand_binop (mode, (optab_table[OTI_and]), temp, gen_rtx_CONST_INT (VOIDmode, (long) (mask)),
       (rtx) 0, 1, OPTAB_LIB_WIDEN);
       temp = expand_binop (mode, (optab_table[OTI_sub]), temp, signmask,
       (rtx) 0, 1, OPTAB_LIB_WIDEN);
     }
   return temp;
 }
    }
  mask = (long) -1 << (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1)
  | (((long) 1 << logd) - 1);
  temp = expand_binop (mode, (optab_table[OTI_and]), op0, gen_rtx_CONST_INT (VOIDmode, (long) (mask)), result,
         1, OPTAB_LIB_WIDEN);
  if (temp != result)
    emit_move_insn (result, temp);
  label = gen_label_rtx ();
  do_cmp_and_jump (result, (const_int_rtx[64]), GE, mode, label);
  temp = expand_binop (mode, (optab_table[OTI_sub]), result, (const_int_rtx[64 +1]), result,
         0, OPTAB_LIB_WIDEN);
  mask = (long) -1 << logd;
  temp = expand_binop (mode, (optab_table[OTI_ior]), temp, gen_rtx_CONST_INT (VOIDmode, (long) (mask)), result,
         1, OPTAB_LIB_WIDEN);
  temp = expand_binop (mode, (optab_table[OTI_add]), temp, (const_int_rtx[64 +1]), result,
         0, OPTAB_LIB_WIDEN);
  if (temp != result)
    emit_move_insn (result, temp);
  emit_label (label);
  return result;
}
rtx
expand_divmod (int rem_flag, enum tree_code code, enum machine_mode mode,
        rtx op0, rtx op1, rtx target, int unsignedp)
{
  enum machine_mode compute_mode;
  rtx tquotient;
  rtx quotient = 0, remainder = 0;
  rtx last;
  int size;
  rtx insn, set;
  optab optab1, optab2;
  int op1_is_constant, op1_is_pow2 = 0;
  int max_cost, extra_cost;
  static long last_div_const = 0;
  static long ext_op1;
  op1_is_constant = ((enum rtx_code) (op1)->code) == CONST_INT;
  if (op1_is_constant)
    {
      ext_op1 = ((op1)->u.hwint[0]);
      if (unsignedp)
 ext_op1 &= mode_mask_array[mode];
      op1_is_pow2 = (((((ext_op1) & ((ext_op1) - 1)) == 0)
       || (! unsignedp && (((-ext_op1) & ((-ext_op1) - 1)) == 0))));
    }
  if (op1 == (const_int_rtx[64 +1]))
    return rem_flag ? (const_int_rtx[64]) : op0;
  if (! unsignedp && op1 == (const_int_rtx[64 -1]))
    {
      if (rem_flag)
 return (const_int_rtx[64]);
      return expand_unop (mode, flag_trapv && mode_class[mode] == MODE_INT
     ? (optab_table[OTI_negv]) : (optab_table[OTI_neg]), op0, target, 0);
    }
  if (target
      && (((((enum rtx_code) (target)->code) == REG) && (((target))->return_val))
   || ((rem_flag || op1_is_constant)
       && (reg_mentioned_p (target, op0)
    || ((((enum rtx_code) (op0)->code) == MEM) && (((enum rtx_code) (target)->code) == MEM))))
   || reg_mentioned_p (target, op1)
   || ((((enum rtx_code) (op1)->code) == MEM) && (((enum rtx_code) (target)->code) == MEM))))
    target = 0;
  optab1 = ((op1_is_pow2 && op1 != (const_int_rtx[64]))
     ? (unsignedp ? (optab_table[OTI_lshr]) : (optab_table[OTI_ashr]))
     : (unsignedp ? (optab_table[OTI_udiv]) : (optab_table[OTI_sdiv])));
  optab2 = ((op1_is_pow2 && op1 != (const_int_rtx[64]))
     ? optab1
     : (unsignedp ? (optab_table[OTI_udivmod]) : (optab_table[OTI_sdivmod])));
  for (compute_mode = mode; compute_mode != VOIDmode;
       compute_mode = mode_wider[compute_mode])
    if (optab1->handlers[compute_mode].insn_code != CODE_FOR_nothing
 || optab2->handlers[compute_mode].insn_code != CODE_FOR_nothing)
      break;
  if (compute_mode == VOIDmode)
    for (compute_mode = mode; compute_mode != VOIDmode;
  compute_mode = mode_wider[compute_mode])
      if (optab1->handlers[compute_mode].libfunc
   || optab2->handlers[compute_mode].libfunc)
 break;
  if (compute_mode == VOIDmode)
    compute_mode = mode;
  if (target && ((enum machine_mode) (target)->mode) == compute_mode)
    tquotient = target;
  else
    tquotient = gen_reg_rtx (compute_mode);
  size = ((unsigned short) (((unsigned short) mode_size[compute_mode]) * 8));
  max_cost = div_cost[compute_mode]
    - (rem_flag && ! (last_div_const != 0 && op1_is_constant
        && ((op1)->u.hwint[0]) == last_div_const)
       ? mul_cost[compute_mode] + add_cost[compute_mode]
       : 0);
  last_div_const = ! rem_flag && op1_is_constant ? ((op1)->u.hwint[0]) : 0;
  if (compute_mode != mode)
    {
      op0 = convert_modes (compute_mode, mode, op0, unsignedp);
      op1 = convert_modes (compute_mode, mode, op1, unsignedp);
      op1_is_constant = ((enum rtx_code) (op1)->code) == CONST_INT;
      op1_is_pow2 = (op1_is_constant
       && (((((((op1)->u.hwint[0])) & ((((op1)->u.hwint[0])) - 1)) == 0)
     || (! unsignedp
         && (((-((op1)->u.hwint[0])) & ((-((op1)->u.hwint[0])) - 1)) == 0))))) ;
    }
  if ((((enum rtx_code) (op0)->code) == MEM) && (((op0))->volatil))
    op0 = force_reg (compute_mode, op0);
  if ((((enum rtx_code) (op1)->code) == MEM) && (((op1))->volatil))
    op1 = force_reg (compute_mode, op1);
  if (rem_flag || op1_is_constant)
    op0 = force_reg (compute_mode, op0);
  last = get_last_insn ();
  if (unsignedp)
    {
      if (code == FLOOR_DIV_EXPR)
 code = TRUNC_DIV_EXPR;
      if (code == FLOOR_MOD_EXPR)
 code = TRUNC_MOD_EXPR;
      if (code == EXACT_DIV_EXPR && op1_is_pow2)
 code = TRUNC_DIV_EXPR;
    }
  if (op1 != (const_int_rtx[64]))
    switch (code)
      {
      case TRUNC_MOD_EXPR:
      case TRUNC_DIV_EXPR:
 if (op1_is_constant)
   {
     if (unsignedp)
       {
  unsigned long mh, ml;
  int pre_shift, post_shift;
  int dummy;
  unsigned long d = (((op1)->u.hwint[0])
         & mode_mask_array[compute_mode]);
  if ((((d) & ((d) - 1)) == 0))
    {
      pre_shift = floor_log2_wide ((unsigned long) (d));
      if (rem_flag)
        {
   remainder
     = expand_binop (compute_mode, (optab_table[OTI_and]), op0,
       gen_rtx_CONST_INT (VOIDmode, (long) (((long) 1 << pre_shift) - 1)),
       remainder, 1,
       OPTAB_LIB_WIDEN);
   if (remainder)
     return rtl_hooks.gen_lowpart (mode, remainder);
        }
      quotient = expand_shift (RSHIFT_EXPR, compute_mode, op0,
          build_int_2_wide ((unsigned long) (pre_shift), (long) (0)),
          tquotient, 1);
    }
  else if (size <= (8 * 4))
    {
      if (d >= ((unsigned long) 1 << (size - 1)))
        {
   quotient = emit_store_flag (tquotient, GEU, op0, op1,
          compute_mode, 1, 1);
   if (quotient == 0)
     goto fail1;
        }
      else
        {
   mh = choose_multiplier (d, size, size,
      &ml, &post_shift, &dummy);
   if (mh != 0 && (d & 1) == 0)
     {
       pre_shift = floor_log2_wide ((unsigned long) (d & -d));
       mh = choose_multiplier (d >> pre_shift, size,
          size - pre_shift,
          &ml, &post_shift, &dummy);
       if (mh)
         abort ();
     }
   else
     pre_shift = 0;
   if (mh != 0)
     {
       rtx t1, t2, t3, t4;
       if (post_shift - 1 >= (8 * (0 ? 8 : 4)))
         goto fail1;
       extra_cost
         = (shift_cost[compute_mode][post_shift - 1]
     + shift_cost[compute_mode][1]
     + 2 * add_cost[compute_mode]);
       t1 = expand_mult_highpart (compute_mode, op0, ml,
             (rtx) 0, 1,
             max_cost - extra_cost);
       if (t1 == 0)
         goto fail1;
       t2 = force_operand (gen_rtx_fmt_ee (MINUS, (compute_mode), (op0), (t1))
                      ,
      (rtx) 0);
       t3 = expand_shift (RSHIFT_EXPR, compute_mode, t2,
            build_int_2_wide ((unsigned long) (1), (long) (0)), (rtx) 0,1);
       t4 = force_operand (gen_rtx_fmt_ee (PLUS, (compute_mode), (t1), (t3))
                    ,
      (rtx) 0);
       quotient
         = expand_shift (RSHIFT_EXPR, compute_mode, t4,
           build_int_2_wide ((unsigned long) (post_shift - 1), (long) (0)),
           tquotient, 1);
     }
   else
     {
       rtx t1, t2;
       if (pre_shift >= (8 * (0 ? 8 : 4))
    || post_shift >= (8 * (0 ? 8 : 4)))
         goto fail1;
       t1 = expand_shift (RSHIFT_EXPR, compute_mode, op0,
            build_int_2_wide ((unsigned long) (pre_shift), (long) (0)),
            (rtx) 0, 1);
       extra_cost
         = (shift_cost[compute_mode][pre_shift]
     + shift_cost[compute_mode][post_shift]);
       t2 = expand_mult_highpart (compute_mode, t1, ml,
             (rtx) 0, 1,
             max_cost - extra_cost);
       if (t2 == 0)
         goto fail1;
       quotient
         = expand_shift (RSHIFT_EXPR, compute_mode, t2,
           build_int_2_wide ((unsigned long) (post_shift), (long) (0)),
           tquotient, 1);
     }
        }
    }
  else
    break;
  insn = get_last_insn ();
  if (insn != last
      && (set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != 0
      && (((set)->u.fld[0]).rtx1) == quotient)
    set_unique_reg_note (insn,
           REG_EQUAL,
           gen_rtx_fmt_ee (UDIV, (compute_mode), (op0), (op1)));
       }
     else
       {
  unsigned long ml;
  int lgup, post_shift;
  long d = ((op1)->u.hwint[0]);
  unsigned long abs_d = d >= 0 ? d : -d;
  if (rem_flag && d < 0)
    {
      d = abs_d;
      op1 = gen_int_mode (abs_d, compute_mode);
    }
  if (d == 1)
    quotient = op0;
  else if (d == -1)
    quotient = expand_unop (compute_mode, (optab_table[OTI_neg]), op0,
       tquotient, 0);
  else if (abs_d == (unsigned long) 1 << (size - 1))
    {
      quotient = emit_store_flag (tquotient, EQ, op0, op1,
      compute_mode, 1, 1);
      if (quotient == 0)
        goto fail1;
    }
  else if ((((d) & ((d) - 1)) == 0)
    && (rem_flag ? smod_pow2_cheap[compute_mode]
          : sdiv_pow2_cheap[compute_mode])
    && (((rem_flag ? (optab_table[OTI_smod]) : (optab_table[OTI_sdiv]))
         ->handlers[compute_mode].insn_code
         != CODE_FOR_nothing)
        || ((optab_table[OTI_sdivmod])->handlers[compute_mode]
     .insn_code != CODE_FOR_nothing)))
    ;
  else if ((((abs_d) & ((abs_d) - 1)) == 0))
    {
      if (rem_flag)
        {
   remainder = expand_smod_pow2 (compute_mode, op0, d);
   if (remainder)
     return rtl_hooks.gen_lowpart (mode, remainder);
        }
      lgup = floor_log2_wide ((unsigned long) (abs_d));
      if (ix86_branch_cost < 1 || (abs_d != 2 && ix86_branch_cost < 3))
        {
   rtx label = gen_label_rtx ();
   rtx t1;
   t1 = copy_to_mode_reg (compute_mode, op0);
   do_cmp_and_jump (t1, (const_int_rtx[64]), GE,
      compute_mode, label);
   expand_inc (t1, gen_int_mode (abs_d - 1,
            compute_mode));
   emit_label (label);
   quotient = expand_shift (RSHIFT_EXPR, compute_mode, t1,
       build_int_2_wide ((unsigned long) (lgup), (long) (0)),
       tquotient, 0);
        }
      else
        {
   rtx t1, t2, t3;
   t1 = expand_shift (RSHIFT_EXPR, compute_mode, op0,
        build_int_2_wide ((unsigned long) (size - 1), (long) (0)),
        (rtx) 0, 0);
   t2 = expand_shift (RSHIFT_EXPR, compute_mode, t1,
        build_int_2_wide ((unsigned long) (size - lgup), (long) (0)),
        (rtx) 0, 1);
   t3 = force_operand (gen_rtx_fmt_ee (PLUS, (compute_mode), (op0), (t2))
                 ,
         (rtx) 0);
   quotient = expand_shift (RSHIFT_EXPR, compute_mode, t3,
       build_int_2_wide ((unsigned long) (lgup), (long) (0)),
       tquotient, 0);
        }
      if (d < 0)
        {
   insn = get_last_insn ();
   if (insn != last
       && (set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != 0
       && (((set)->u.fld[0]).rtx1) == quotient
       && abs_d < ((unsigned long) 1
     << ((8 * 4) - 1)))
     set_unique_reg_note (insn,
            REG_EQUAL,
            gen_rtx_fmt_ee (DIV, (compute_mode), (op0), (gen_rtx_CONST_INT (VOIDmode, (long) (trunc_int_for_mode (abs_d, compute_mode)))))
                            );
   quotient = expand_unop (compute_mode, (optab_table[OTI_neg]),
      quotient, quotient, 0);
        }
    }
  else if (size <= (8 * 4))
    {
      choose_multiplier (abs_d, size, size - 1,
           &ml, &post_shift, &lgup);
      if (ml < (unsigned long) 1 << (size - 1))
        {
   rtx t1, t2, t3;
   if (post_shift >= (8 * (0 ? 8 : 4))
       || size - 1 >= (8 * (0 ? 8 : 4)))
     goto fail1;
   extra_cost = (shift_cost[compute_mode][post_shift]
          + shift_cost[compute_mode][size - 1]
          + add_cost[compute_mode]);
   t1 = expand_mult_highpart (compute_mode, op0, ml,
         (rtx) 0, 0,
         max_cost - extra_cost);
   if (t1 == 0)
     goto fail1;
   t2 = expand_shift (RSHIFT_EXPR, compute_mode, t1,
        build_int_2_wide ((unsigned long) (post_shift), (long) (0)), (rtx) 0, 0);
   t3 = expand_shift (RSHIFT_EXPR, compute_mode, op0,
        build_int_2_wide ((unsigned long) (size - 1), (long) (0)), (rtx) 0, 0);
   if (d < 0)
     quotient
       = force_operand (gen_rtx_fmt_ee (MINUS, (compute_mode), (t3), (t2))
                  ,
          tquotient);
   else
     quotient
       = force_operand (gen_rtx_fmt_ee (MINUS, (compute_mode), (t2), (t3))
                  ,
          tquotient);
        }
      else
        {
   rtx t1, t2, t3, t4;
   if (post_shift >= (8 * (0 ? 8 : 4))
       || size - 1 >= (8 * (0 ? 8 : 4)))
     goto fail1;
   ml |= (~(unsigned long) 0) << (size - 1);
   extra_cost = (shift_cost[compute_mode][post_shift]
          + shift_cost[compute_mode][size - 1]
          + 2 * add_cost[compute_mode]);
   t1 = expand_mult_highpart (compute_mode, op0, ml,
         (rtx) 0, 0,
         max_cost - extra_cost);
   if (t1 == 0)
     goto fail1;
   t2 = force_operand (gen_rtx_fmt_ee (PLUS, (compute_mode), (t1), (op0))
                 ,
         (rtx) 0);
   t3 = expand_shift (RSHIFT_EXPR, compute_mode, t2,
        build_int_2_wide ((unsigned long) (post_shift), (long) (0)),
        (rtx) 0, 0);
   t4 = expand_shift (RSHIFT_EXPR, compute_mode, op0,
        build_int_2_wide ((unsigned long) (size - 1), (long) (0)),
        (rtx) 0, 0);
   if (d < 0)
     quotient
       = force_operand (gen_rtx_fmt_ee (MINUS, (compute_mode), (t4), (t3))
                  ,
          tquotient);
   else
     quotient
       = force_operand (gen_rtx_fmt_ee (MINUS, (compute_mode), (t3), (t4))
                  ,
          tquotient);
        }
    }
  else
    break;
  insn = get_last_insn ();
  if (insn != last
      && (set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != 0
      && (((set)->u.fld[0]).rtx1) == quotient)
    set_unique_reg_note (insn,
           REG_EQUAL,
           gen_rtx_fmt_ee (DIV, (compute_mode), (op0), (op1)));
       }
     break;
   }
      fail1:
 delete_insns_since (last);
 break;
      case FLOOR_DIV_EXPR:
      case FLOOR_MOD_EXPR:
 if (op1_is_constant && (8 * 4) >= size)
   {
     unsigned long mh, ml;
     int pre_shift, lgup, post_shift;
     long d = ((op1)->u.hwint[0]);
     if (d > 0)
       {
  if ((((d) & ((d) - 1)) == 0))
    {
      pre_shift = floor_log2_wide ((unsigned long) (d));
      if (rem_flag)
        {
   remainder = expand_binop (compute_mode, (optab_table[OTI_and]), op0,
        gen_rtx_CONST_INT (VOIDmode, (long) (((long) 1 << pre_shift) - 1)),
        remainder, 0, OPTAB_LIB_WIDEN);
   if (remainder)
     return rtl_hooks.gen_lowpart (mode, remainder);
        }
      quotient = expand_shift (RSHIFT_EXPR, compute_mode, op0,
          build_int_2_wide ((unsigned long) (pre_shift), (long) (0)),
          tquotient, 0);
    }
  else
    {
      rtx t1, t2, t3, t4;
      mh = choose_multiplier (d, size, size - 1,
         &ml, &post_shift, &lgup);
      if (mh)
        abort ();
      if (post_shift < (8 * (0 ? 8 : 4))
   && size - 1 < (8 * (0 ? 8 : 4)))
        {
   t1 = expand_shift (RSHIFT_EXPR, compute_mode, op0,
        build_int_2_wide ((unsigned long) (size - 1), (long) (0)),
        (rtx) 0, 0);
   t2 = expand_binop (compute_mode, (optab_table[OTI_xor]), op0, t1,
        (rtx) 0, 0, OPTAB_WIDEN);
   extra_cost = (shift_cost[compute_mode][post_shift]
          + shift_cost[compute_mode][size - 1]
          + 2 * add_cost[compute_mode]);
   t3 = expand_mult_highpart (compute_mode, t2, ml,
         (rtx) 0, 1,
         max_cost - extra_cost);
   if (t3 != 0)
     {
       t4 = expand_shift (RSHIFT_EXPR, compute_mode, t3,
            build_int_2_wide ((unsigned long) (post_shift), (long) (0)),
            (rtx) 0, 1);
       quotient = expand_binop (compute_mode, (optab_table[OTI_xor]),
           t4, t1, tquotient, 0,
           OPTAB_WIDEN);
     }
        }
    }
       }
     else
       {
  rtx nsign, t1, t2, t3, t4;
  t1 = force_operand (gen_rtx_fmt_ee (PLUS, (compute_mode), (op0), ((const_int_rtx[64 -1])))
                         , (rtx) 0);
  t2 = expand_binop (compute_mode, (optab_table[OTI_ior]), op0, t1, (rtx) 0,
       0, OPTAB_WIDEN);
  nsign = expand_shift (RSHIFT_EXPR, compute_mode, t2,
          build_int_2_wide ((unsigned long) (size - 1), (long) (0)), (rtx) 0, 0);
  t3 = force_operand (gen_rtx_fmt_ee (MINUS, (compute_mode), (t1), (nsign)),
        (rtx) 0);
  t4 = expand_divmod (0, TRUNC_DIV_EXPR, compute_mode, t3, op1,
        (rtx) 0, 0);
  if (t4)
    {
      rtx t5;
      t5 = expand_unop (compute_mode, (optab_table[OTI_one_cmpl]), nsign,
          (rtx) 0, 0);
      quotient = force_operand (gen_rtx_fmt_ee (PLUS, (compute_mode), (t4), (t5))
                  ,
           tquotient);
    }
       }
   }
 if (quotient != 0)
   break;
 delete_insns_since (last);
 if (target == 0 || ((enum machine_mode) (target)->mode) != compute_mode)
   target = gen_reg_rtx (compute_mode);
 if (rem_flag)
   {
     remainder
       = (((enum rtx_code) (target)->code) == REG) ? target : gen_reg_rtx (compute_mode);
     quotient = gen_reg_rtx (compute_mode);
   }
 else
   {
     quotient
       = (((enum rtx_code) (target)->code) == REG) ? target : gen_reg_rtx (compute_mode);
     remainder = gen_reg_rtx (compute_mode);
   }
 if (expand_twoval_binop ((optab_table[OTI_sdivmod]), op0, op1,
     quotient, remainder, 0))
   {
     rtx tem;
     rtx label = gen_label_rtx ();
     do_cmp_and_jump (remainder, (const_int_rtx[64]), EQ, compute_mode, label);
     tem = expand_binop (compute_mode, (optab_table[OTI_xor]), op0, op1,
    (rtx) 0, 0, OPTAB_WIDEN);
     do_cmp_and_jump (tem, (const_int_rtx[64]), GE, compute_mode, label);
     expand_dec (quotient, (const_int_rtx[64 +1]));
     expand_inc (remainder, op1);
     emit_label (label);
     return rtl_hooks.gen_lowpart (mode, rem_flag ? remainder : quotient);
   }
 {
   rtx label1, label2, label3, label4, label5;
   rtx adjusted_op0;
   rtx tem;
   quotient = gen_reg_rtx (compute_mode);
   adjusted_op0 = copy_to_mode_reg (compute_mode, op0);
   label1 = gen_label_rtx ();
   label2 = gen_label_rtx ();
   label3 = gen_label_rtx ();
   label4 = gen_label_rtx ();
   label5 = gen_label_rtx ();
   do_cmp_and_jump (op1, (const_int_rtx[64]), LT, compute_mode, label2);
   do_cmp_and_jump (adjusted_op0, (const_int_rtx[64]), LT, compute_mode, label1);
   tem = expand_binop (compute_mode, (optab_table[OTI_sdiv]), adjusted_op0, op1,
         quotient, 0, OPTAB_LIB_WIDEN);
   if (tem != quotient)
     emit_move_insn (quotient, tem);
   emit_jump_insn (gen_jump (label5));
   emit_barrier ();
   emit_label (label1);
   expand_inc (adjusted_op0, (const_int_rtx[64 +1]));
   emit_jump_insn (gen_jump (label4));
   emit_barrier ();
   emit_label (label2);
   do_cmp_and_jump (adjusted_op0, (const_int_rtx[64]), GT, compute_mode, label3);
   tem = expand_binop (compute_mode, (optab_table[OTI_sdiv]), adjusted_op0, op1,
         quotient, 0, OPTAB_LIB_WIDEN);
   if (tem != quotient)
     emit_move_insn (quotient, tem);
   emit_jump_insn (gen_jump (label5));
   emit_barrier ();
   emit_label (label3);
   expand_dec (adjusted_op0, (const_int_rtx[64 +1]));
   emit_label (label4);
   tem = expand_binop (compute_mode, (optab_table[OTI_sdiv]), adjusted_op0, op1,
         quotient, 0, OPTAB_LIB_WIDEN);
   if (tem != quotient)
     emit_move_insn (quotient, tem);
   expand_dec (quotient, (const_int_rtx[64 +1]));
   emit_label (label5);
 }
 break;
      case CEIL_DIV_EXPR:
      case CEIL_MOD_EXPR:
 if (unsignedp)
   {
     if (op1_is_constant && (((((op1)->u.hwint[0])) & ((((op1)->u.hwint[0])) - 1)) == 0))
       {
  rtx t1, t2, t3;
  unsigned long d = ((op1)->u.hwint[0]);
  t1 = expand_shift (RSHIFT_EXPR, compute_mode, op0,
       build_int_2_wide ((unsigned long) (floor_log2_wide ((unsigned long) (d))), (long) (0)),
       tquotient, 1);
  t2 = expand_binop (compute_mode, (optab_table[OTI_and]), op0,
       gen_rtx_CONST_INT (VOIDmode, (long) (d - 1)),
       (rtx) 0, 1, OPTAB_LIB_WIDEN);
  t3 = gen_reg_rtx (compute_mode);
  t3 = emit_store_flag (t3, NE, t2, (const_int_rtx[64]),
          compute_mode, 1, 1);
  if (t3 == 0)
    {
      rtx lab;
      lab = gen_label_rtx ();
      do_cmp_and_jump (t2, (const_int_rtx[64]), EQ, compute_mode, lab);
      expand_inc (t1, (const_int_rtx[64 +1]));
      emit_label (lab);
      quotient = t1;
    }
  else
    quotient = force_operand (gen_rtx_fmt_ee (PLUS, (compute_mode), (t1), (t3))
                ,
         tquotient);
  break;
       }
     if (target == 0 || ((enum machine_mode) (target)->mode) != compute_mode)
       target = gen_reg_rtx (compute_mode);
     if (rem_flag)
       {
  remainder = ((((enum rtx_code) (target)->code) == REG)
        ? target : gen_reg_rtx (compute_mode));
  quotient = gen_reg_rtx (compute_mode);
       }
     else
       {
  quotient = ((((enum rtx_code) (target)->code) == REG)
       ? target : gen_reg_rtx (compute_mode));
  remainder = gen_reg_rtx (compute_mode);
       }
     if (expand_twoval_binop ((optab_table[OTI_udivmod]), op0, op1, quotient,
         remainder, 1))
       {
  rtx label = gen_label_rtx ();
  do_cmp_and_jump (remainder, (const_int_rtx[64]), EQ,
     compute_mode, label);
  expand_inc (quotient, (const_int_rtx[64 +1]));
  expand_dec (remainder, op1);
  emit_label (label);
  return rtl_hooks.gen_lowpart (mode, rem_flag ? remainder : quotient);
       }
     {
       rtx label1, label2;
       rtx adjusted_op0, tem;
       quotient = gen_reg_rtx (compute_mode);
       adjusted_op0 = copy_to_mode_reg (compute_mode, op0);
       label1 = gen_label_rtx ();
       label2 = gen_label_rtx ();
       do_cmp_and_jump (adjusted_op0, (const_int_rtx[64]), NE,
          compute_mode, label1);
       emit_move_insn (quotient, (const_int_rtx[64]));
       emit_jump_insn (gen_jump (label2));
       emit_barrier ();
       emit_label (label1);
       expand_dec (adjusted_op0, (const_int_rtx[64 +1]));
       tem = expand_binop (compute_mode, (optab_table[OTI_udiv]), adjusted_op0, op1,
      quotient, 1, OPTAB_LIB_WIDEN);
       if (tem != quotient)
  emit_move_insn (quotient, tem);
       expand_inc (quotient, (const_int_rtx[64 +1]));
       emit_label (label2);
     }
   }
 else
   {
     if (op1_is_constant && (((((op1)->u.hwint[0])) & ((((op1)->u.hwint[0])) - 1)) == 0)
  && ((op1)->u.hwint[0]) >= 0)
       {
  rtx t1, t2, t3;
  unsigned long d = ((op1)->u.hwint[0]);
  t1 = expand_shift (RSHIFT_EXPR, compute_mode, op0,
       build_int_2_wide ((unsigned long) (floor_log2_wide ((unsigned long) (d))), (long) (0)),
       tquotient, 0);
  t2 = expand_binop (compute_mode, (optab_table[OTI_and]), op0,
       gen_rtx_CONST_INT (VOIDmode, (long) (d - 1)),
       (rtx) 0, 1, OPTAB_LIB_WIDEN);
  t3 = gen_reg_rtx (compute_mode);
  t3 = emit_store_flag (t3, NE, t2, (const_int_rtx[64]),
          compute_mode, 1, 1);
  if (t3 == 0)
    {
      rtx lab;
      lab = gen_label_rtx ();
      do_cmp_and_jump (t2, (const_int_rtx[64]), EQ, compute_mode, lab);
      expand_inc (t1, (const_int_rtx[64 +1]));
      emit_label (lab);
      quotient = t1;
    }
  else
    quotient = force_operand (gen_rtx_fmt_ee (PLUS, (compute_mode), (t1), (t3))
                ,
         tquotient);
  break;
       }
     if (target == 0 || ((enum machine_mode) (target)->mode) != compute_mode)
       target = gen_reg_rtx (compute_mode);
     if (rem_flag)
       {
  remainder= ((((enum rtx_code) (target)->code) == REG)
       ? target : gen_reg_rtx (compute_mode));
  quotient = gen_reg_rtx (compute_mode);
       }
     else
       {
  quotient = ((((enum rtx_code) (target)->code) == REG)
       ? target : gen_reg_rtx (compute_mode));
  remainder = gen_reg_rtx (compute_mode);
       }
     if (expand_twoval_binop ((optab_table[OTI_sdivmod]), op0, op1, quotient,
         remainder, 0))
       {
  rtx tem;
  rtx label = gen_label_rtx ();
  do_cmp_and_jump (remainder, (const_int_rtx[64]), EQ,
     compute_mode, label);
  tem = expand_binop (compute_mode, (optab_table[OTI_xor]), op0, op1,
        (rtx) 0, 0, OPTAB_WIDEN);
  do_cmp_and_jump (tem, (const_int_rtx[64]), LT, compute_mode, label);
  expand_inc (quotient, (const_int_rtx[64 +1]));
  expand_dec (remainder, op1);
  emit_label (label);
  return rtl_hooks.gen_lowpart (mode, rem_flag ? remainder : quotient);
       }
     {
       rtx label1, label2, label3, label4, label5;
       rtx adjusted_op0;
       rtx tem;
       quotient = gen_reg_rtx (compute_mode);
       adjusted_op0 = copy_to_mode_reg (compute_mode, op0);
       label1 = gen_label_rtx ();
       label2 = gen_label_rtx ();
       label3 = gen_label_rtx ();
       label4 = gen_label_rtx ();
       label5 = gen_label_rtx ();
       do_cmp_and_jump (op1, (const_int_rtx[64]), LT, compute_mode, label2);
       do_cmp_and_jump (adjusted_op0, (const_int_rtx[64]), GT,
          compute_mode, label1);
       tem = expand_binop (compute_mode, (optab_table[OTI_sdiv]), adjusted_op0, op1,
      quotient, 0, OPTAB_LIB_WIDEN);
       if (tem != quotient)
  emit_move_insn (quotient, tem);
       emit_jump_insn (gen_jump (label5));
       emit_barrier ();
       emit_label (label1);
       expand_dec (adjusted_op0, (const_int_rtx[64 +1]));
       emit_jump_insn (gen_jump (label4));
       emit_barrier ();
       emit_label (label2);
       do_cmp_and_jump (adjusted_op0, (const_int_rtx[64]), LT,
          compute_mode, label3);
       tem = expand_binop (compute_mode, (optab_table[OTI_sdiv]), adjusted_op0, op1,
      quotient, 0, OPTAB_LIB_WIDEN);
       if (tem != quotient)
  emit_move_insn (quotient, tem);
       emit_jump_insn (gen_jump (label5));
       emit_barrier ();
       emit_label (label3);
       expand_inc (adjusted_op0, (const_int_rtx[64 +1]));
       emit_label (label4);
       tem = expand_binop (compute_mode, (optab_table[OTI_sdiv]), adjusted_op0, op1,
      quotient, 0, OPTAB_LIB_WIDEN);
       if (tem != quotient)
  emit_move_insn (quotient, tem);
       expand_inc (quotient, (const_int_rtx[64 +1]));
       emit_label (label5);
     }
   }
 break;
      case EXACT_DIV_EXPR:
 if (op1_is_constant && (8 * 4) >= size)
   {
     long d = ((op1)->u.hwint[0]);
     unsigned long ml;
     int pre_shift;
     rtx t1;
     pre_shift = floor_log2_wide ((unsigned long) (d & -d));
     ml = invert_mod2n (d >> pre_shift, size);
     t1 = expand_shift (RSHIFT_EXPR, compute_mode, op0,
          build_int_2_wide ((unsigned long) (pre_shift), (long) (0)), (rtx) 0, unsignedp);
     quotient = expand_mult (compute_mode, t1,
        gen_int_mode (ml, compute_mode),
        (rtx) 0, 1);
     insn = get_last_insn ();
     set_unique_reg_note (insn,
     REG_EQUAL,
     gen_rtx_fmt_ee (unsignedp ? UDIV : DIV,
       compute_mode,
       op0, op1));
   }
 break;
      case ROUND_DIV_EXPR:
      case ROUND_MOD_EXPR:
 if (unsignedp)
   {
     rtx tem;
     rtx label;
     label = gen_label_rtx ();
     quotient = gen_reg_rtx (compute_mode);
     remainder = gen_reg_rtx (compute_mode);
     if (expand_twoval_binop ((optab_table[OTI_udivmod]), op0, op1, quotient, remainder, 1) == 0)
       {
  rtx tem;
  quotient = expand_binop (compute_mode, (optab_table[OTI_udiv]), op0, op1,
      quotient, 1, OPTAB_LIB_WIDEN);
  tem = expand_mult (compute_mode, quotient, op1, (rtx) 0, 1);
  remainder = expand_binop (compute_mode, (optab_table[OTI_sub]), op0, tem,
       remainder, 1, OPTAB_LIB_WIDEN);
       }
     tem = plus_constant_wide ((op1), (long) (-1));
     tem = expand_shift (RSHIFT_EXPR, compute_mode, tem,
    build_int_2_wide ((unsigned long) (1), (long) (0)), (rtx) 0, 1);
     do_cmp_and_jump (remainder, tem, LEU, compute_mode, label);
     expand_inc (quotient, (const_int_rtx[64 +1]));
     expand_dec (remainder, op1);
     emit_label (label);
   }
 else
   {
     rtx abs_rem, abs_op1, tem, mask;
     rtx label;
     label = gen_label_rtx ();
     quotient = gen_reg_rtx (compute_mode);
     remainder = gen_reg_rtx (compute_mode);
     if (expand_twoval_binop ((optab_table[OTI_sdivmod]), op0, op1, quotient, remainder, 0) == 0)
       {
  rtx tem;
  quotient = expand_binop (compute_mode, (optab_table[OTI_sdiv]), op0, op1,
      quotient, 0, OPTAB_LIB_WIDEN);
  tem = expand_mult (compute_mode, quotient, op1, (rtx) 0, 0);
  remainder = expand_binop (compute_mode, (optab_table[OTI_sub]), op0, tem,
       remainder, 0, OPTAB_LIB_WIDEN);
       }
     abs_rem = expand_abs (compute_mode, remainder, (rtx) 0, 1, 0);
     abs_op1 = expand_abs (compute_mode, op1, (rtx) 0, 1, 0);
     tem = expand_shift (LSHIFT_EXPR, compute_mode, abs_rem,
    build_int_2_wide ((unsigned long) (1), (long) (0)), (rtx) 0, 1);
     do_cmp_and_jump (tem, abs_op1, LTU, compute_mode, label);
     tem = expand_binop (compute_mode, (optab_table[OTI_xor]), op0, op1,
    (rtx) 0, 0, OPTAB_WIDEN);
     mask = expand_shift (RSHIFT_EXPR, compute_mode, tem,
    build_int_2_wide ((unsigned long) (size - 1), (long) (0)), (rtx) 0, 0);
     tem = expand_binop (compute_mode, (optab_table[OTI_xor]), mask, (const_int_rtx[64 +1]),
    (rtx) 0, 0, OPTAB_WIDEN);
     tem = expand_binop (compute_mode, (optab_table[OTI_sub]), tem, mask,
    (rtx) 0, 0, OPTAB_WIDEN);
     expand_inc (quotient, tem);
     tem = expand_binop (compute_mode, (optab_table[OTI_xor]), mask, op1,
    (rtx) 0, 0, OPTAB_WIDEN);
     tem = expand_binop (compute_mode, (optab_table[OTI_sub]), tem, mask,
    (rtx) 0, 0, OPTAB_WIDEN);
     expand_dec (remainder, tem);
     emit_label (label);
   }
 return rtl_hooks.gen_lowpart (mode, rem_flag ? remainder : quotient);
      default:
 abort ();
      }
  if (quotient == 0)
    {
      if (target && ((enum machine_mode) (target)->mode) != compute_mode)
 target = 0;
      if (rem_flag)
 {
   remainder
     = sign_expand_binop (compute_mode, (optab_table[OTI_umod]), (optab_table[OTI_smod]),
     op0, op1, target,
     unsignedp,
     ((optab2->handlers[compute_mode].insn_code
       != CODE_FOR_nothing)
      ? OPTAB_DIRECT : OPTAB_WIDEN));
   if (remainder == 0)
     {
       remainder = gen_reg_rtx (compute_mode);
       if (! expand_twoval_binop ((unsignedp
       ? (optab_table[OTI_udivmod])
       : (optab_table[OTI_sdivmod])),
      op0, op1,
      (rtx) 0, remainder, unsignedp))
  remainder = 0;
     }
   if (remainder)
     return rtl_hooks.gen_lowpart (mode, remainder);
 }
      quotient
 = sign_expand_binop (compute_mode, (optab_table[OTI_udiv]), (optab_table[OTI_sdiv]),
        op0, op1, rem_flag ? (rtx) 0 : target,
        unsignedp,
        ((optab2->handlers[compute_mode].insn_code
          != CODE_FOR_nothing)
         ? OPTAB_DIRECT : OPTAB_WIDEN));
      if (quotient == 0)
 {
   quotient = gen_reg_rtx (compute_mode);
   if (! expand_twoval_binop (unsignedp ? (optab_table[OTI_udivmod]) : (optab_table[OTI_sdivmod]),
         op0, op1,
         quotient, (rtx) 0, unsignedp))
     {
       quotient = 0;
       if (! rem_flag)
  quotient = sign_expand_binop (compute_mode,
           (optab_table[OTI_udiv]), (optab_table[OTI_sdiv]),
           op0, op1, target,
           unsignedp, OPTAB_LIB_WIDEN);
     }
 }
    }
  if (rem_flag)
    {
      if (target && ((enum machine_mode) (target)->mode) != compute_mode)
 target = 0;
      if (quotient == 0)
 remainder = sign_expand_binop (compute_mode, (optab_table[OTI_umod]), (optab_table[OTI_smod]),
           op0, op1, target,
           unsignedp, OPTAB_LIB_WIDEN);
      else
 {
   remainder = expand_mult (compute_mode, quotient, op1,
       (rtx) 0, unsignedp);
   remainder = expand_binop (compute_mode, (optab_table[OTI_sub]), op0,
        remainder, target, unsignedp,
        OPTAB_LIB_WIDEN);
 }
    }
  return rtl_hooks.gen_lowpart (mode, rem_flag ? remainder : quotient);
}
tree
make_tree (tree type, rtx x)
{
  tree t;
  switch (((enum rtx_code) (x)->code))
    {
    case CONST_INT:
      t = build_int_2_wide ((unsigned long) (((x)->u.hwint[0])), (long) ((((type)->common.unsigned_flag) && (((unsigned short) (((unsigned short) mode_size[((type)->type.mode)]) * 8)) < (8 * 4))) || ((x)->u.hwint[0]) >= 0 ? 0 : -1))
                                     ;
      ((t)->common.type) = type;
      return t;
    case CONST_DOUBLE:
      if (((enum machine_mode) (x)->mode) == VOIDmode)
 {
   t = build_int_2_wide ((unsigned long) (((x)->u.hwint[0])), (long) (((x)->u.hwint[1])));
   ((t)->common.type) = type;
 }
      else
 {
   struct real_value d;
   memcpy (&(d), &(((x))->u.hwint[0]), sizeof (struct real_value));
   t = build_real (type, d);
 }
      return t;
    case CONST_VECTOR:
      {
 int i, units;
 rtx elt;
 tree t = (tree) ((void *)0);
 units = (((((x)->u.fld[0]).rtvec1))->num_elem);
 for (i = units - 1; i >= 0; --i)
   {
     elt = (((((x)->u.fld[0]).rtvec1))->elem[i]);
     t = tree_cons_stat ((tree) ((void *)0),make_tree (type, elt),t );
   }
 return build_vector (type, t);
      }
    case PLUS:
      return fold (build (PLUS_EXPR, type, make_tree (type, (((x)->u.fld[0]).rtx1)),
     make_tree (type, (((x)->u.fld[1]).rtx1))));
    case MINUS:
      return fold (build (MINUS_EXPR, type, make_tree (type, (((x)->u.fld[0]).rtx1)),
     make_tree (type, (((x)->u.fld[1]).rtx1))));
    case NEG:
      return fold (build1_stat (NEGATE_EXPR,type,make_tree (type, (((x)->u.fld[0]).rtx1)) ));
    case MULT:
      return fold (build (MULT_EXPR, type, make_tree (type, (((x)->u.fld[0]).rtx1)),
     make_tree (type, (((x)->u.fld[1]).rtx1))));
    case ASHIFT:
      return fold (build (LSHIFT_EXPR, type, make_tree (type, (((x)->u.fld[0]).rtx1)),
     make_tree (type, (((x)->u.fld[1]).rtx1))));
    case LSHIFTRT:
      t = lang_hooks.types.unsigned_type (type);
      return fold (convert (type,
       build (RSHIFT_EXPR, t,
       make_tree (t, (((x)->u.fld[0]).rtx1)),
       make_tree (type, (((x)->u.fld[1]).rtx1)))));
    case ASHIFTRT:
      t = lang_hooks.types.signed_type (type);
      return fold (convert (type,
       build (RSHIFT_EXPR, t,
       make_tree (t, (((x)->u.fld[0]).rtx1)),
       make_tree (type, (((x)->u.fld[1]).rtx1)))));
    case DIV:
      if (((enum tree_code) (type)->common.code) != REAL_TYPE)
 t = lang_hooks.types.signed_type (type);
      else
 t = type;
      return fold (convert (type,
       build (TRUNC_DIV_EXPR, t,
       make_tree (t, (((x)->u.fld[0]).rtx1)),
       make_tree (t, (((x)->u.fld[1]).rtx1)))));
    case UDIV:
      t = lang_hooks.types.unsigned_type (type);
      return fold (convert (type,
       build (TRUNC_DIV_EXPR, t,
       make_tree (t, (((x)->u.fld[0]).rtx1)),
       make_tree (t, (((x)->u.fld[1]).rtx1)))));
    case SIGN_EXTEND:
    case ZERO_EXTEND:
      t = lang_hooks.types.type_for_mode (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
       ((enum rtx_code) (x)->code) == ZERO_EXTEND);
      return fold (convert (type, make_tree (t, (((x)->u.fld[0]).rtx1))));
    default:
      t = build_decl_stat (VAR_DECL,(tree) ((void *)0),type );
      if ((((enum tree_code) (type)->common.code) == POINTER_TYPE || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE))
 x = convert_memory_address (((type)->type.mode), x);
      t->decl.rtl = x;
      return t;
    }
}
unsigned char
const_mult_add_overflow_p (rtx x, rtx mult, rtx add, enum machine_mode mode, int unsignedp)
{
  tree type, mult_type, add_type, result;
  type = lang_hooks.types.type_for_mode (mode, unsignedp);
  mult_type = type;
  if (unsignedp)
    {
      mult_type = copy_node_stat (type );
      ((mult_type)->type.no_force_blk_flag) = 1;
    }
  add_type = (((enum machine_mode) (add)->mode) == VOIDmode ? mult_type
       : lang_hooks.types.type_for_mode (((enum machine_mode) (add)->mode), unsignedp));
  result = fold (build (PLUS_EXPR, mult_type,
   fold (build (MULT_EXPR, mult_type,
         make_tree (mult_type, x),
         make_tree (mult_type, mult))),
   make_tree (add_type, add)));
  return ((result)->common.static_flag);
}
rtx
expand_mult_add (rtx x, rtx target, rtx mult, rtx add, enum machine_mode mode,
   int unsignedp)
{
  tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
  tree add_type = (((enum machine_mode) (add)->mode) == VOIDmode
     ? type: lang_hooks.types.type_for_mode (((enum machine_mode) (add)->mode),
          unsignedp));
  tree result = fold (build (PLUS_EXPR, type,
         fold (build (MULT_EXPR, type,
        make_tree (type, x),
        make_tree (type, mult))),
         make_tree (add_type, add)));
  return expand_expr (result, target, VOIDmode, 0);
}
rtx
expand_and (enum machine_mode mode, rtx op0, rtx op1, rtx target)
{
  rtx tem = 0;
  if (((enum machine_mode) (op0)->mode) == VOIDmode && ((enum machine_mode) (op1)->mode) == VOIDmode)
    tem = simplify_binary_operation (AND, mode, op0, op1);
  if (tem == 0)
    tem = expand_binop (mode, (optab_table[OTI_and]), op0, op1, target, 0, OPTAB_LIB_WIDEN);
  if (target == 0)
    target = tem;
  else if (tem != target)
    emit_move_insn (target, tem);
  return target;
}
rtx
emit_store_flag (rtx target, enum rtx_code code, rtx op0, rtx op1,
   enum machine_mode mode, int unsignedp, int normalizep)
{
  rtx subtarget;
  enum insn_code icode;
  enum machine_mode compare_mode;
  enum machine_mode target_mode = ((enum machine_mode) (target)->mode);
  rtx tem;
  rtx last = get_last_insn ();
  rtx pattern, comparison;
  op0 = protect_from_queue (op0, 0);
  op1 = protect_from_queue (op1, 0);
  if (unsignedp)
    code = unsigned_condition (code);
  if (swap_commutative_operands_p (op0, op1))
    {
      tem = op0;
      op0 = op1;
      op1 = tem;
      code = swap_condition (code);
    }
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (op0)->mode);
  switch (code)
    {
    case LT:
      if (op1 == (const_int_rtx[64 +1]))
 op1 = (const_int_rtx[64]), code = LE;
      break;
    case LE:
      if (op1 == (const_int_rtx[64 -1]))
 op1 = (const_int_rtx[64]), code = LT;
      break;
    case GE:
      if (op1 == (const_int_rtx[64 +1]))
 op1 = (const_int_rtx[64]), code = GT;
      break;
    case GT:
      if (op1 == (const_int_rtx[64 -1]))
 op1 = (const_int_rtx[64]), code = GE;
      break;
    case GEU:
      if (op1 == (const_int_rtx[64 +1]))
 op1 = (const_int_rtx[64]), code = NE;
      break;
    case LTU:
      if (op1 == (const_int_rtx[64 +1]))
 op1 = (const_int_rtx[64]), code = EQ;
      break;
    default:
      break;
    }
  if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) == (8 * (0 ? 8 : 4)) * 2
      && mode_class[mode] == MODE_INT
      && op1 == (const_int_rtx[64])
      && (!(((enum rtx_code) (op0)->code) == MEM) || ! (((op0))->volatil)))
    {
      if (code == EQ || code == NE)
 {
   rtx op00, op01, op0both;
   op00 = simplify_gen_subreg (word_mode, op0, mode, 0);
   op01 = simplify_gen_subreg (word_mode, op0, mode, (0 ? 8 : 4));
   op0both = expand_binop (word_mode, (optab_table[OTI_ior]), op00, op01,
      (rtx) 0, unsignedp, OPTAB_DIRECT);
   if (op0both != 0)
     return emit_store_flag (target, code, op0both, op1, word_mode,
        unsignedp, normalizep);
 }
      else if (code == LT || code == GE)
 {
   rtx op0h;
   op0h = simplify_gen_subreg (word_mode, op0, mode,
          subreg_highpart_offset (word_mode, mode));
   return emit_store_flag (target, code, op0h, op1, word_mode,
      unsignedp, normalizep);
 }
    }
  icode = setcc_gen_code[(int) code];
  if (op1 == (const_int_rtx[64]) && (code == LT || code == GE)
      && mode_class[mode] == MODE_INT
      && (normalizep || 1 == 1
   || (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
       && ((1 & mode_mask_array[mode])
    == (unsigned long) 1 << (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1)))))
    {
      subtarget = target;
      if (((unsigned short) mode_size[target_mode]) > ((unsigned short) mode_size[mode]))
 {
   op0 = protect_from_queue (op0, 0);
   op0 = convert_modes (target_mode, mode, op0, 0);
   mode = target_mode;
 }
      if (target_mode != mode)
 subtarget = 0;
      if (code == GE)
 op0 = expand_unop (mode, (optab_table[OTI_one_cmpl]), op0,
      ((1 == 1 || normalizep)
       ? 0 : subtarget), 0);
      if (1 == 1 || normalizep)
 op0 = expand_shift (RSHIFT_EXPR, mode, op0,
       size_int_wide ((long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1), SIZETYPE),
       subtarget, normalizep != -1);
      if (mode != target_mode)
 op0 = convert_modes (target_mode, mode, op0, 0);
      return op0;
    }
  if (icode != CODE_FOR_nothing)
    {
      insn_operand_predicate_fn pred;
      emit_queue ();
      do_pending_stack_adjust ();
      last = get_last_insn ();
      comparison
 = compare_from_rtx (op0, op1, code, unsignedp, mode, (rtx) 0);
      if (((rtx_class[(int) (((enum rtx_code) (comparison)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (comparison)->code) == CONST_VECTOR))
 {
   if (((enum rtx_code) (comparison)->code) == CONST_INT)
     {
       if (comparison == (const_int_rtx[64]))
  return (const_int_rtx[64]);
     }
   else
     abort ();
   if (normalizep == 1)
     return (const_int_rtx[64 +1]);
   if (normalizep == -1)
     return (const_int_rtx[64 -1]);
   return const_true_rtx;
 }
      code = ((enum rtx_code) (comparison)->code);
      compare_mode = insn_data[(int) icode].operand[0].mode;
      subtarget = target;
      pred = insn_data[(int) icode].operand[0].predicate;
      if (preserve_subexpressions_p ()
   || ! (*pred) (subtarget, compare_mode))
 subtarget = gen_reg_rtx (compare_mode);
      pattern = (insn_data[icode].genfun) (subtarget);
      if (pattern)
 {
   emit_insn (pattern);
   if (((unsigned short) mode_size[target_mode]) > ((unsigned short) mode_size[compare_mode]))
     {
       convert_move (target, subtarget,
       (((unsigned short) (((unsigned short) mode_size[compare_mode]) * 8))
        <= (8 * 4))
       && 0 == (1
         & ((long) 1
     << (((unsigned short) (((unsigned short) mode_size[compare_mode]) * 8)) -1))));
       op0 = target;
       compare_mode = target_mode;
     }
   else
     op0 = subtarget;
   if (preserve_subexpressions_p ())
     subtarget = 0;
   if (normalizep == 0 || normalizep == 1)
     ;
   else if (- normalizep == 1)
     op0 = expand_unop (compare_mode, (optab_table[OTI_neg]), op0, subtarget, 0);
   else if (((unsigned short) (((unsigned short) mode_size[compare_mode]) * 8)) <= (8 * 4)
     && (1
         & ((long) 1
     << (((unsigned short) (((unsigned short) mode_size[compare_mode]) * 8)) - 1))))
     op0 = expand_shift (RSHIFT_EXPR, compare_mode, op0,
    size_int_wide ((long) (((unsigned short) (((unsigned short) mode_size[compare_mode]) * 8)) - 1), SIZETYPE),
    subtarget, normalizep == 1);
   else if (1 & 1)
     {
       op0 = expand_and (compare_mode, op0, (const_int_rtx[64 +1]), subtarget);
       if (normalizep == -1)
  op0 = expand_unop (compare_mode, (optab_table[OTI_neg]), op0, op0, 0);
     }
   else
     abort ();
   if (target_mode != compare_mode)
     {
       convert_move (target, op0, 0);
       return target;
     }
   else
     return op0;
 }
    }
  delete_insns_since (last);
  subtarget = (!flag_expensive_optimizations
        && (target_mode == mode)) ? target : (rtx) 0;
  if (ix86_branch_cost > 0
      && mode_class[mode] == MODE_INT && (code == EQ || code == NE)
      && op1 != (const_int_rtx[64]))
    {
      tem = expand_binop (mode, (optab_table[OTI_xor]), op0, op1, subtarget, 1,
     OPTAB_WIDEN);
      if (tem == 0)
 tem = expand_binop (mode, (optab_table[OTI_sub]), op0, op1, subtarget, 1,
       OPTAB_WIDEN);
      if (tem != 0)
 tem = emit_store_flag (target, code, tem, (const_int_rtx[64]),
          mode, unsignedp, normalizep);
      if (tem == 0)
 delete_insns_since (last);
      return tem;
    }
  if (ix86_branch_cost == 0
      || mode_class[mode] != MODE_INT || op1 != (const_int_rtx[64])
      || (code != EQ && code != NE
   && (ix86_branch_cost <= 1 || (code != LE && code != GT))))
    return 0;
  if (normalizep == 0)
    {
      if (1 == 1 || 1 == -1)
 normalizep = 1;
      else if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
        && ((1 & mode_mask_array[mode])
     == (unsigned long) 1 << (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1)))
 ;
      else
 return 0;
    }
  tem = 0;
  if (code == LE)
    {
      if (rtx_equal_p (subtarget, op0))
 subtarget = 0;
      tem = expand_binop (mode, (optab_table[OTI_sub]), op0, (const_int_rtx[64 +1]), subtarget, 0,
     OPTAB_WIDEN);
      if (tem)
 tem = expand_binop (mode, (optab_table[OTI_ior]), op0, tem, subtarget, 0,
       OPTAB_WIDEN);
    }
  if (code == GT)
    {
      if (rtx_equal_p (subtarget, op0))
 subtarget = 0;
      tem = expand_shift (RSHIFT_EXPR, mode, op0,
     size_int_wide ((long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1), SIZETYPE),
     subtarget, 0);
      tem = expand_binop (mode, (optab_table[OTI_sub]), tem, op0, subtarget, 0,
     OPTAB_WIDEN);
    }
  if (code == EQ || code == NE)
    {
      if ((optab_table[OTI_abs])->handlers[mode].insn_code != CODE_FOR_nothing)
 tem = expand_unop (mode, (optab_table[OTI_abs]), op0, subtarget, 1);
      else if ((optab_table[OTI_ffs])->handlers[mode].insn_code != CODE_FOR_nothing)
 tem = expand_unop (mode, (optab_table[OTI_ffs]), op0, subtarget, 1);
      else if (((unsigned short) mode_size[mode]) < (0 ? 8 : 4))
 {
   op0 = protect_from_queue (op0, 0);
   tem = convert_modes (word_mode, mode, op0, 1);
   mode = word_mode;
 }
      if (tem != 0)
 {
   if (code == EQ)
     tem = expand_binop (mode, (optab_table[OTI_sub]), tem, (const_int_rtx[64 +1]), subtarget,
    0, OPTAB_WIDEN);
   else
     tem = expand_unop (mode, (optab_table[OTI_neg]), tem, subtarget, 0);
 }
      if (tem == 0 && (code == NE || ix86_branch_cost > 1))
 {
   if (rtx_equal_p (subtarget, op0))
     subtarget = 0;
   tem = expand_unop (mode, (optab_table[OTI_neg]), op0, subtarget, 0);
   tem = expand_binop (mode, (optab_table[OTI_ior]), tem, op0, subtarget, 0,
         OPTAB_WIDEN);
   if (tem && code == EQ)
     tem = expand_unop (mode, (optab_table[OTI_one_cmpl]), tem, subtarget, 0);
 }
    }
  if (tem && normalizep)
    tem = expand_shift (RSHIFT_EXPR, mode, tem,
   size_int_wide ((long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1), SIZETYPE),
   subtarget, normalizep == 1);
  if (tem)
    {
      if (((enum machine_mode) (tem)->mode) != target_mode)
 {
   convert_move (target, tem, 0);
   tem = target;
 }
      else if (!subtarget)
 {
   emit_move_insn (target, tem);
   tem = target;
 }
    }
  else
    delete_insns_since (last);
  return tem;
}
rtx
emit_store_flag_force (rtx target, enum rtx_code code, rtx op0, rtx op1,
         enum machine_mode mode, int unsignedp, int normalizep)
{
  rtx tem, label;
  tem = emit_store_flag (target, code, op0, op1, mode, unsignedp, normalizep);
  if (tem != 0)
    return tem;
  if (normalizep == 0)
    normalizep = 1;
  if (!(((enum rtx_code) (target)->code) == REG)
      || reg_mentioned_p (target, op0) || reg_mentioned_p (target, op1))
    target = gen_reg_rtx (((enum machine_mode) (target)->mode));
  emit_move_insn (target, (const_int_rtx[64 +1]));
  label = gen_label_rtx ();
  do_compare_rtx_and_jump (op0, op1, code, unsignedp, mode, (rtx) 0,
      (rtx) 0, label);
  emit_move_insn (target, (const_int_rtx[64]));
  emit_label (label);
  return target;
}
static void
do_cmp_and_jump (rtx arg1, rtx arg2, enum rtx_code op, enum machine_mode mode,
   rtx label)
{
  if (mode_class[mode] == MODE_INT
      && ! can_compare_p (op, mode, ccp_jump))
    {
      rtx label2 = gen_label_rtx ();
      switch (op)
 {
 case LTU:
   do_jump_by_parts_greater_rtx (mode, 1, arg2, arg1, label2, label);
   break;
 case LEU:
   do_jump_by_parts_greater_rtx (mode, 1, arg1, arg2, label, label2);
   break;
 case LT:
   do_jump_by_parts_greater_rtx (mode, 0, arg2, arg1, label2, label);
   break;
 case GT:
   do_jump_by_parts_greater_rtx (mode, 0, arg1, arg2, label2, label);
   break;
 case GE:
   do_jump_by_parts_greater_rtx (mode, 0, arg2, arg1, label, label2);
   break;
 case EQ:
   if (arg2 != (const_int_rtx[64]) || mode != ((enum machine_mode) (arg1)->mode))
     abort ();
   do_jump_by_parts_equality_rtx (arg1, label2, label);
   break;
 case NE:
   if (arg2 != (const_int_rtx[64]) || mode != ((enum machine_mode) (arg1)->mode))
     abort ();
   do_jump_by_parts_equality_rtx (arg1, label, label2);
   break;
 default:
   abort ();
 }
      emit_label (label2);
    }
  else
    emit_cmp_and_jump_insns (arg1, arg2, op, (rtx) 0, mode, 0, label);
}
int cse_not_expected;
struct move_by_pieces
{
  rtx to;
  rtx to_addr;
  int autinc_to;
  int explicit_inc_to;
  rtx from;
  rtx from_addr;
  int autinc_from;
  int explicit_inc_from;
  unsigned long len;
  long offset;
  int reverse;
};
struct store_by_pieces
{
  rtx to;
  rtx to_addr;
  int autinc_to;
  int explicit_inc_to;
  unsigned long len;
  long offset;
  rtx (*constfun) (void *, long, enum machine_mode);
  void *constfundata;
  int reverse;
};
static rtx enqueue_insn (rtx, rtx);
static unsigned long move_by_pieces_ninsns (unsigned long,
           unsigned int);
static void move_by_pieces_1 (rtx (*) (rtx, ...), enum machine_mode,
         struct move_by_pieces *);
static unsigned char block_move_libcall_safe_for_call_parm (void);
static unsigned char emit_block_move_via_movstr (rtx, rtx, rtx, unsigned);
static rtx emit_block_move_via_libcall (rtx, rtx, rtx);
static tree emit_block_move_libcall_fn (int);
static void emit_block_move_via_loop (rtx, rtx, rtx, unsigned);
static rtx clear_by_pieces_1 (void *, long, enum machine_mode);
static void clear_by_pieces (rtx, unsigned long, unsigned int);
static void store_by_pieces_1 (struct store_by_pieces *, unsigned int);
static void store_by_pieces_2 (rtx (*) (rtx, ...), enum machine_mode,
          struct store_by_pieces *);
static unsigned char clear_storage_via_clrstr (rtx, rtx, unsigned);
static rtx clear_storage_via_libcall (rtx, rtx);
static tree clear_storage_libcall_fn (int);
static rtx compress_float_constant (rtx, rtx);
static rtx get_subtarget (rtx);
static void store_constructor_field (rtx, unsigned long,
         long, enum machine_mode,
         tree, tree, int, int);
static void store_constructor (tree, rtx, int, long);
static rtx store_field (rtx, long, long, enum machine_mode,
   tree, enum machine_mode, int, tree, int);
static rtx var_rtx (tree);
static unsigned long highest_pow2_factor (tree);
static unsigned long highest_pow2_factor_for_target (tree, tree);
static int is_aligning_offset (tree, tree);
static rtx expand_increment (tree, int, int);
static void expand_operands (tree, tree, rtx, rtx*, rtx*,
        enum expand_modifier);
static rtx do_store_flag (tree, rtx, enum machine_mode, int);
static void emit_single_push_insn (enum machine_mode, rtx, tree);
static void do_tablejump (rtx, enum machine_mode, rtx, rtx, rtx);
static rtx const_vector_from_tree (tree);
static char direct_load[NUM_MACHINE_MODES];
static char direct_store[NUM_MACHINE_MODES];
static unsigned char float_extend_from_mem[NUM_MACHINE_MODES][NUM_MACHINE_MODES];
enum insn_code movstr_optab[NUM_MACHINE_MODES];
enum insn_code clrstr_optab[NUM_MACHINE_MODES];
enum insn_code cmpstr_optab[NUM_MACHINE_MODES];
enum insn_code cmpmem_optab[NUM_MACHINE_MODES];
void
init_expr_once (void)
{
  rtx insn, pat;
  enum machine_mode mode;
  int num_clobbers;
  rtx mem, mem1;
  rtx reg;
  mem = gen_rtx_MEM (VOIDmode, (global_rtl[GR_STACK_POINTER]));
  mem1 = gen_rtx_MEM (VOIDmode, (global_rtl[GR_FRAME_POINTER]));
  reg = gen_rtx_REG (VOIDmode, -1);
  insn = rtx_alloc_stat (INSN );
  pat = gen_rtx_fmt_ee (SET, (0), ((rtx) 0), ((rtx) 0));
  (((insn)->u.fld[5]).rtx1) = pat;
  for (mode = VOIDmode; (int) mode < NUM_MACHINE_MODES;
       mode = (enum machine_mode) ((int) mode + 1))
    {
      int regno;
      direct_load[(int) mode] = direct_store[(int) mode] = 0;
      ((mem)->mode = (mode));
      ((mem1)->mode = (mode));
      ((reg)->mode = (mode));
      if (mode != VOIDmode && mode != BLKmode)
 for (regno = 0; regno < 53
      && (direct_load[(int) mode] == 0 || direct_store[(int) mode] == 0);
      regno++)
   {
     if (! ix86_hard_regno_mode_ok ((regno), (mode)))
       continue;
     (((reg)->u.fld[0]).rtuint) = regno;
     (((pat)->u.fld[1]).rtx1) = mem;
     (((pat)->u.fld[0]).rtx1) = reg;
     if (recog (pat, insn, &num_clobbers) >= 0)
       direct_load[(int) mode] = 1;
     (((pat)->u.fld[1]).rtx1) = mem1;
     (((pat)->u.fld[0]).rtx1) = reg;
     if (recog (pat, insn, &num_clobbers) >= 0)
       direct_load[(int) mode] = 1;
     (((pat)->u.fld[1]).rtx1) = reg;
     (((pat)->u.fld[0]).rtx1) = mem;
     if (recog (pat, insn, &num_clobbers) >= 0)
       direct_store[(int) mode] = 1;
     (((pat)->u.fld[1]).rtx1) = reg;
     (((pat)->u.fld[0]).rtx1) = mem1;
     if (recog (pat, insn, &num_clobbers) >= 0)
       direct_store[(int) mode] = 1;
   }
    }
  mem = gen_rtx_MEM (VOIDmode, gen_rtx_fmt_i00 (REG, ((0 ? DImode : SImode)), (10000)));
  for (mode = class_narrowest_mode[MODE_FLOAT]; mode != VOIDmode;
       mode = mode_wider[mode])
    {
      enum machine_mode srcmode;
      for (srcmode = class_narrowest_mode[MODE_FLOAT]; srcmode != mode;
    srcmode = mode_wider[srcmode])
 {
   enum insn_code ic;
   ic = can_extend_p (mode, srcmode, 0);
   if (ic == CODE_FOR_nothing)
     continue;
   ((mem)->mode = (srcmode));
   if ((*insn_data[ic].operand[1].predicate) (mem, srcmode))
     float_extend_from_mem[mode][srcmode] = 1;
 }
    }
}
void
init_expr (void)
{
  cfun->expr = ggc_alloc_cleared_stat (sizeof (struct expr_status) );
}
void
finish_expr_for_function (void)
{
  if ((cfun->expr->x_pending_chain))
    abort ();
}
static rtx
enqueue_insn (rtx var, rtx body)
{
  (cfun->expr->x_pending_chain) = gen_rtx_fmt_eeeee (QUEUED, (((enum machine_mode) (var)->mode)), (var), ((rtx) 0), ((rtx) 0), (body), ((cfun->expr->x_pending_chain)))
                          ;
  return (cfun->expr->x_pending_chain);
}
rtx
protect_from_queue (rtx x, int modify)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  if (code != QUEUED)
    {
      if (code == MEM && ((enum machine_mode) (x)->mode) != BLKmode
   && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == QUEUED && !modify)
 {
   rtx y = (((x)->u.fld[0]).rtx1);
   rtx new = replace_equiv_address_nv (x, (((y)->u.fld[0]).rtx1));
   if ((((y)->u.fld[1]).rtx1))
     {
       rtx temp = gen_reg_rtx (((enum machine_mode) (x)->mode));
       emit_insn_before (gen_move_insn (temp, new),
    (((y)->u.fld[1]).rtx1));
       return temp;
     }
   return replace_equiv_address (new, copy_to_reg ((((new)->u.fld[0]).rtx1)));
 }
      if (code == MEM)
 {
   rtx tem = protect_from_queue ((((x)->u.fld[0]).rtx1), 0);
   if (tem != (((x)->u.fld[0]).rtx1))
     {
       x = copy_rtx (x);
       (((x)->u.fld[0]).rtx1) = tem;
     }
 }
      else if (code == PLUS || code == MULT)
 {
   rtx new0 = protect_from_queue ((((x)->u.fld[0]).rtx1), 0);
   rtx new1 = protect_from_queue ((((x)->u.fld[1]).rtx1), 0);
   if (new0 != (((x)->u.fld[0]).rtx1) || new1 != (((x)->u.fld[1]).rtx1))
     {
       x = copy_rtx (x);
       (((x)->u.fld[0]).rtx1) = new0;
       (((x)->u.fld[1]).rtx1) = new1;
     }
 }
      return x;
    }
  if ((((x)->u.fld[1]).rtx1) == 0)
    return copy_to_reg ((((x)->u.fld[0]).rtx1));
  if ((((x)->u.fld[2]).rtx1) != 0)
    return (((x)->u.fld[2]).rtx1);
  (((x)->u.fld[2]).rtx1) = gen_reg_rtx (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode));
  emit_insn_before (gen_move_insn ((((x)->u.fld[2]).rtx1), (((x)->u.fld[0]).rtx1)),
      (((x)->u.fld[1]).rtx1));
  return (((x)->u.fld[2]).rtx1);
}
int
queued_subexp_p (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case QUEUED:
      return 1;
    case MEM:
      return queued_subexp_p ((((x)->u.fld[0]).rtx1));
    case MULT:
    case PLUS:
    case MINUS:
      return (queued_subexp_p ((((x)->u.fld[0]).rtx1))
       || queued_subexp_p ((((x)->u.fld[1]).rtx1)));
    default:
      return 0;
    }
}
static rtx
mark_queue (void)
{
  return (cfun->expr->x_pending_chain);
}
static void
emit_insns_enqueued_after_mark (rtx mark)
{
  rtx p;
  if (mark && ! (((mark)->u.fld[3]).rtx1))
    return;
  while ((p = (cfun->expr->x_pending_chain)) != mark)
    {
      rtx body = (((p)->u.fld[3]).rtx1);
      switch (((enum rtx_code) (body)->code))
 {
 case INSN:
 case JUMP_INSN:
 case CALL_INSN:
 case CODE_LABEL:
 case BARRIER:
 case NOTE:
   (((p)->u.fld[1]).rtx1) = body;
   emit_insn (body);
   break;
 default:
   (((p)->u.fld[1]).rtx1) = emit_insn (body);
   break;
 }
      (((p)->u.fld[3]).rtx1) = 0;
      (cfun->expr->x_pending_chain) = (((p)->u.fld[4]).rtx1);
    }
}
void
emit_queue (void)
{
  emit_insns_enqueued_after_mark ((rtx) 0);
}
void
convert_move (rtx to, rtx from, int unsignedp)
{
  enum machine_mode to_mode = ((enum machine_mode) (to)->mode);
  enum machine_mode from_mode = ((enum machine_mode) (from)->mode);
  int to_real = mode_class[to_mode] == MODE_FLOAT;
  int from_real = mode_class[from_mode] == MODE_FLOAT;
  enum insn_code code;
  rtx libcall;
  enum rtx_code equiv_code = (unsignedp < 0 ? UNKNOWN
         : (unsignedp ? ZERO_EXTEND : SIGN_EXTEND));
  to = protect_from_queue (to, 1);
  from = protect_from_queue (from, 0);
  if (to_real != from_real)
    abort ();
  if (to == from)
    return;
  if (((enum rtx_code) (from)->code) == SUBREG && (((from))->in_struct)
      && (((unsigned short) mode_size[((enum machine_mode) ((((from)->u.fld[0]).rtx1))->mode)])
   >= ((unsigned short) mode_size[to_mode]))
      && ((((from))->volatil) ? -1 : (from)->unchanging) == unsignedp)
    from = rtl_hooks.gen_lowpart (to_mode, from), from_mode = to_mode;
  if (((enum rtx_code) (to)->code) == SUBREG && (((to))->in_struct))
    abort ();
  if (to_mode == from_mode
      || (from_mode == VOIDmode && ((rtx_class[(int) (((enum rtx_code) (from)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (from)->code) == CONST_VECTOR)))
    {
      emit_move_insn (to, from);
      return;
    }
  if ((mode_class[to_mode] == MODE_VECTOR_INT || mode_class[to_mode] == MODE_VECTOR_FLOAT) || (mode_class[from_mode] == MODE_VECTOR_INT || mode_class[from_mode] == MODE_VECTOR_FLOAT))
    {
      if (((unsigned short) (((unsigned short) mode_size[from_mode]) * 8)) != ((unsigned short) (((unsigned short) mode_size[to_mode]) * 8)))
 abort ();
      if ((mode_class[to_mode] == MODE_VECTOR_INT || mode_class[to_mode] == MODE_VECTOR_FLOAT))
 from = simplify_gen_subreg (to_mode, from, ((enum machine_mode) (from)->mode), 0);
      else
 to = simplify_gen_subreg (from_mode, to, ((enum machine_mode) (to)->mode), 0);
      emit_move_insn (to, from);
      return;
    }
  if (((enum rtx_code) (to)->code) == CONCAT && ((enum rtx_code) (from)->code) == CONCAT)
    {
      convert_move ((((to)->u.fld[0]).rtx1), (((from)->u.fld[0]).rtx1), unsignedp);
      convert_move ((((to)->u.fld[1]).rtx1), (((from)->u.fld[1]).rtx1), unsignedp);
      return;
    }
  if (to_real)
    {
      rtx value1, insns;
      convert_optab tab;
      if (mode_precision[from_mode] < mode_precision[to_mode])
 tab = (convert_optab_table[CTI_sext]);
      else if (mode_precision[from_mode] > mode_precision[to_mode])
 tab = (convert_optab_table[CTI_trunc]);
      else
 abort ();
      code = tab->handlers[to_mode][from_mode].insn_code;
      if (code != CODE_FOR_nothing)
 {
   emit_unop_insn (code, to, from,
     tab == (convert_optab_table[CTI_sext]) ? FLOAT_EXTEND : FLOAT_TRUNCATE);
   return;
 }
      libcall = tab->handlers[to_mode][from_mode].libfunc;
      if (!libcall)
 abort ();
      start_sequence ();
      value1 = emit_library_call_value (libcall, (rtx) 0, LCT_CONST, to_mode,
           1, from, from_mode);
      insns = get_insns ();
      end_sequence ();
      emit_libcall_block (insns, to, value1,
     tab == (convert_optab_table[CTI_trunc]) ? gen_rtx_fmt_e (FLOAT_TRUNCATE, (to_mode), (from))
     : gen_rtx_fmt_e (FLOAT_EXTEND, (to_mode), (from)));
      return;
    }
  if (mode_class[to_mode] == MODE_PARTIAL_INT)
    {
      enum machine_mode full_mode
 = smallest_mode_for_size (((unsigned short) (((unsigned short) mode_size[to_mode]) * 8)), MODE_INT);
      if ((convert_optab_table[CTI_trunc])->handlers[to_mode][full_mode].insn_code
   == CODE_FOR_nothing)
 abort ();
      if (full_mode != from_mode)
 from = convert_to_mode (full_mode, from, unsignedp);
      emit_unop_insn ((convert_optab_table[CTI_trunc])->handlers[to_mode][full_mode].insn_code,
        to, from, UNKNOWN);
      return;
    }
  if (mode_class[from_mode] == MODE_PARTIAL_INT)
    {
      enum machine_mode full_mode
 = smallest_mode_for_size (((unsigned short) (((unsigned short) mode_size[from_mode]) * 8)), MODE_INT);
      if ((convert_optab_table[CTI_sext])->handlers[full_mode][from_mode].insn_code
   == CODE_FOR_nothing)
 abort ();
      emit_unop_insn ((convert_optab_table[CTI_sext])->handlers[full_mode][from_mode].insn_code,
        to, from, UNKNOWN);
      if (to_mode == full_mode)
 return;
      from_mode = full_mode;
    }
  if (((unsigned short) (((unsigned short) mode_size[from_mode]) * 8)) < ((unsigned short) (((unsigned short) mode_size[to_mode]) * 8))
      && ((unsigned short) (((unsigned short) mode_size[to_mode]) * 8)) > (8 * (0 ? 8 : 4)))
    {
      rtx insns;
      rtx lowpart;
      rtx fill_value;
      rtx lowfrom;
      int i;
      enum machine_mode lowpart_mode;
      int nwords = (((((unsigned short) mode_size[to_mode])) + ((0 ? 8 : 4)) - 1) / ((0 ? 8 : 4)));
      if ((code = can_extend_p (to_mode, from_mode, unsignedp))
   != CODE_FOR_nothing)
 {
   if (optimize > 0 && ((enum rtx_code) (from)->code) == SUBREG)
     from = force_reg (from_mode, from);
   emit_unop_insn (code, to, from, equiv_code);
   return;
 }
      else if (((unsigned short) (((unsigned short) mode_size[from_mode]) * 8)) < (8 * (0 ? 8 : 4))
        && ((code = can_extend_p (to_mode, word_mode, unsignedp))
     != CODE_FOR_nothing))
 {
   if ((((enum rtx_code) (to)->code) == REG))
     {
       if (reg_overlap_mentioned_p (to, from))
  from = force_reg (from_mode, from);
       emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (to)));
     }
   convert_move (rtl_hooks.gen_lowpart (word_mode, to), from, unsignedp);
   emit_unop_insn (code, to,
     rtl_hooks.gen_lowpart (word_mode, to), equiv_code);
   return;
 }
      start_sequence ();
      if (reg_overlap_mentioned_p (to, from))
 from = force_reg (from_mode, from);
      if (((unsigned short) (((unsigned short) mode_size[from_mode]) * 8)) < (8 * (0 ? 8 : 4)))
 lowpart_mode = word_mode;
      else
 lowpart_mode = from_mode;
      lowfrom = convert_to_mode (lowpart_mode, from, unsignedp);
      lowpart = rtl_hooks.gen_lowpart (lowpart_mode, to);
      emit_move_insn (lowpart, lowfrom);
      if (unsignedp)
 fill_value = (const_int_rtx[64]);
      else
 {
   if (1
       && insn_data[(int) CODE_FOR_slt].operand[0].mode == word_mode
       && 1 == -1)
     {
       emit_cmp_insn (lowfrom, (const_int_rtx[64]), NE, (rtx) 0,
        lowpart_mode, 0);
       fill_value = gen_reg_rtx (word_mode);
       emit_insn (gen_slt (fill_value));
     }
   else
     {
       fill_value
  = expand_shift (RSHIFT_EXPR, lowpart_mode, lowfrom,
    size_int_wide ((long) (((unsigned short) (((unsigned short) mode_size[lowpart_mode]) * 8)) - 1), SIZETYPE),
    (rtx) 0, 0);
       fill_value = convert_to_mode (word_mode, fill_value, 1);
     }
 }
      for (i = ((unsigned short) mode_size[lowpart_mode]) / (0 ? 8 : 4); i < nwords; i++)
 {
   int index = (0 ? nwords - i - 1 : i);
   rtx subword = operand_subword (to, index, 1, to_mode);
   if (subword == 0)
     abort ();
   if (fill_value != subword)
     emit_move_insn (subword, fill_value);
 }
      insns = get_insns ();
      end_sequence ();
      emit_no_conflict_block (insns, to, from, (rtx) 0,
         gen_rtx_fmt_e (equiv_code, to_mode, copy_rtx (from)));
      return;
    }
  if (((unsigned short) (((unsigned short) mode_size[from_mode]) * 8)) > (8 * (0 ? 8 : 4))
      && ((unsigned short) (((unsigned short) mode_size[to_mode]) * 8)) <= (8 * (0 ? 8 : 4)))
    {
      if (!(((((enum rtx_code) (from)->code) == MEM)
      && ! (((from))->volatil)
      && direct_load[(int) to_mode]
      && ! mode_dependent_address_p ((((from)->u.fld[0]).rtx1)))
     || (((enum rtx_code) (from)->code) == REG)
     || ((enum rtx_code) (from)->code) == SUBREG))
 from = force_reg (from_mode, from);
      convert_move (to, rtl_hooks.gen_lowpart (word_mode, from), 0);
      return;
    }
  if (((unsigned short) (((unsigned short) mode_size[to_mode]) * 8)) < ((unsigned short) (((unsigned short) mode_size[from_mode]) * 8))
      && 1
                                 )
    {
      if (!(((((enum rtx_code) (from)->code) == MEM)
      && ! (((from))->volatil)
      && direct_load[(int) to_mode]
      && ! mode_dependent_address_p ((((from)->u.fld[0]).rtx1)))
     || (((enum rtx_code) (from)->code) == REG)
     || ((enum rtx_code) (from)->code) == SUBREG))
 from = force_reg (from_mode, from);
      if ((((enum rtx_code) (from)->code) == REG) && (((from)->u.fld[0]).rtuint) < 53
   && ! ix86_hard_regno_mode_ok (((((from)->u.fld[0]).rtuint)), (to_mode)))
 from = copy_to_reg (from);
      emit_move_insn (to, rtl_hooks.gen_lowpart (to_mode, from));
      return;
    }
  if (((unsigned short) (((unsigned short) mode_size[to_mode]) * 8)) > ((unsigned short) (((unsigned short) mode_size[from_mode]) * 8)))
    {
      if ((code = can_extend_p (to_mode, from_mode, unsignedp))
   != CODE_FOR_nothing)
 {
   if (flag_force_mem)
     from = force_not_mem (from);
   emit_unop_insn (code, to, from, equiv_code);
   return;
 }
      else
 {
   enum machine_mode intermediate;
   rtx tmp;
   tree shift_amount;
   for (intermediate = from_mode; intermediate != VOIDmode;
        intermediate = mode_wider[intermediate])
     if (((can_extend_p (to_mode, intermediate, unsignedp)
    != CODE_FOR_nothing)
   || (((unsigned short) mode_size[to_mode]) < ((unsigned short) mode_size[intermediate])
       && 1
                                            ))
  && (can_extend_p (intermediate, from_mode, unsignedp)
      != CODE_FOR_nothing))
       {
  convert_move (to, convert_to_mode (intermediate, from,
         unsignedp), unsignedp);
  return;
       }
   shift_amount = build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[to_mode]) * 8)) - ((unsigned short) (((unsigned short) mode_size[from_mode]) * 8))), (long) (0))
                                            ;
   from = rtl_hooks.gen_lowpart (to_mode, force_reg (from_mode, from));
   tmp = expand_shift (LSHIFT_EXPR, to_mode, from, shift_amount,
         to, unsignedp);
   tmp = expand_shift (RSHIFT_EXPR, to_mode, tmp, shift_amount,
         to, unsignedp);
   if (tmp != to)
     emit_move_insn (to, tmp);
   return;
 }
    }
  if ((convert_optab_table[CTI_trunc])->handlers[to_mode][from_mode].insn_code != CODE_FOR_nothing)
    {
      emit_unop_insn ((convert_optab_table[CTI_trunc])->handlers[to_mode][from_mode].insn_code,
        to, from, UNKNOWN);
      return;
    }
  if (((unsigned short) (((unsigned short) mode_size[to_mode]) * 8)) < ((unsigned short) (((unsigned short) mode_size[from_mode]) * 8)))
    {
      rtx temp = force_reg (to_mode, rtl_hooks.gen_lowpart (to_mode, from));
      emit_move_insn (to, temp);
      return;
    }
  abort ();
}
rtx
convert_to_mode (enum machine_mode mode, rtx x, int unsignedp)
{
  return convert_modes (mode, VOIDmode, x, unsignedp);
}
rtx
convert_modes (enum machine_mode mode, enum machine_mode oldmode, rtx x, int unsignedp)
{
  rtx temp;
  if (((enum rtx_code) (x)->code) == SUBREG && (((x))->in_struct)
      && ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) >= ((unsigned short) mode_size[mode])
      && ((((x))->volatil) ? -1 : (x)->unchanging) == unsignedp)
    x = rtl_hooks.gen_lowpart (mode, x);
  if (((enum machine_mode) (x)->mode) != VOIDmode)
    oldmode = ((enum machine_mode) (x)->mode);
  if (mode == oldmode)
    return x;
  if (unsignedp && mode_class[mode] == MODE_INT
      && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) == 2 * (8 * 4)
      && ((enum rtx_code) (x)->code) == CONST_INT && ((x)->u.hwint[0]) < 0)
    {
      long val = ((x)->u.hwint[0]);
      if (oldmode != VOIDmode
   && (8 * 4) > ((unsigned short) (((unsigned short) mode_size[oldmode]) * 8)))
 {
   int width = ((unsigned short) (((unsigned short) mode_size[oldmode]) * 8));
   val &= ((long) 1 << width) - 1;
 }
      return immed_double_const (val, (long) 0, mode);
    }
  if ((((enum rtx_code) (x)->code) == CONST_INT
       && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4))
      || (mode_class[mode] == MODE_INT
   && mode_class[oldmode] == MODE_INT
   && (((enum rtx_code) (x)->code) == CONST_DOUBLE
       || (((unsigned short) mode_size[mode]) <= ((unsigned short) mode_size[oldmode])
    && (((((enum rtx_code) (x)->code) == MEM) && ! (((x))->volatil)
         && direct_load[(int) mode])
        || ((((enum rtx_code) (x)->code) == REG)
     && (! ((((((x)->u.fld[0]).rtuint)) < 53))
         || ix86_hard_regno_mode_ok (((((x)->u.fld[0]).rtuint)), (mode)))
     && 1
                                          ))))))
    {
      if (((enum rtx_code) (x)->code) == CONST_INT && oldmode != VOIDmode
   && ((unsigned short) mode_size[mode]) > ((unsigned short) mode_size[oldmode]))
 {
   long val = ((x)->u.hwint[0]);
   int width = ((unsigned short) (((unsigned short) mode_size[oldmode]) * 8));
   val &= ((long) 1 << width) - 1;
   if (! unsignedp
       && (val & ((long) 1 << (width - 1))))
     val |= (long) (-1) << width;
   return gen_int_mode (val, mode);
 }
      return rtl_hooks.gen_lowpart (mode, x);
    }
  if ((mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT) && ((enum machine_mode) (x)->mode) == VOIDmode)
    {
      if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) != ((unsigned short) (((unsigned short) mode_size[oldmode]) * 8)))
 abort ();
      return simplify_gen_subreg (mode, x, oldmode, 0);
    }
  temp = gen_reg_rtx (mode);
  convert_move (temp, x, unsignedp);
  return temp;
}
int
can_move_by_pieces (unsigned long len,
      unsigned int align )
{
  return (move_by_pieces_ninsns (len, align) < (unsigned int) (optimize_size ? 3 : ix86_cost->move_ratio));
}
rtx
move_by_pieces (rtx to, rtx from, unsigned long len,
  unsigned int align, int endp)
{
  struct move_by_pieces data;
  rtx to_addr, from_addr = (((from)->u.fld[0]).rtx1);
  unsigned int max_size = (0 ? 8 : 4) + 1;
  enum machine_mode mode = VOIDmode, tmode;
  enum insn_code icode;
  align = ((to ? ((((to)->u.fld[1]).rtmem) != 0 ? (((to)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (to)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (to)->mode)) : 8)) : align) < (((((from)->u.fld[1]).rtmem) != 0 ? (((from)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (from)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (from)->mode)) : 8))) ? (to ? ((((to)->u.fld[1]).rtmem) != 0 ? (((to)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (to)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (to)->mode)) : 8)) : align) : (((((from)->u.fld[1]).rtmem) != 0 ? (((from)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (from)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (from)->mode)) : 8))));
  data.offset = 0;
  data.from_addr = from_addr;
  if (to)
    {
      to_addr = (((to)->u.fld[0]).rtx1);
      data.to = to;
      data.autinc_to
 = (((enum rtx_code) (to_addr)->code) == PRE_INC || ((enum rtx_code) (to_addr)->code) == PRE_DEC
    || ((enum rtx_code) (to_addr)->code) == POST_INC || ((enum rtx_code) (to_addr)->code) == POST_DEC);
      data.reverse
 = (((enum rtx_code) (to_addr)->code) == PRE_DEC || ((enum rtx_code) (to_addr)->code) == POST_DEC);
    }
  else
    {
      to_addr = (rtx) 0;
      data.to = (rtx) 0;
      data.autinc_to = 1;
      data.reverse = 1;
    }
  data.to_addr = to_addr;
  data.from = from;
  data.autinc_from
    = (((enum rtx_code) (from_addr)->code) == PRE_INC || ((enum rtx_code) (from_addr)->code) == PRE_DEC
       || ((enum rtx_code) (from_addr)->code) == POST_INC
       || ((enum rtx_code) (from_addr)->code) == POST_DEC);
  data.explicit_inc_from = 0;
  data.explicit_inc_to = 0;
  if (data.reverse) data.offset = len;
  data.len = len;
  if (!(data.autinc_from && data.autinc_to)
      && move_by_pieces_ninsns (len, align) > 2)
    {
      for (tmode = class_narrowest_mode[MODE_INT];
    tmode != VOIDmode; tmode = mode_wider[tmode])
 if (((unsigned short) mode_size[tmode]) < max_size)
   mode = tmode;
      if (0 && data.reverse && ! data.autinc_from)
 {
   data.from_addr = copy_addr_to_reg (plus_constant_wide ((from_addr), (long) (len)));
   data.autinc_from = 1;
   data.explicit_inc_from = -1;
 }
      if (0 && ! data.autinc_from)
 {
   data.from_addr = copy_addr_to_reg (from_addr);
   data.autinc_from = 1;
   data.explicit_inc_from = 1;
 }
      if (!data.autinc_from && ((rtx_class[(int) (((enum rtx_code) (from_addr)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (from_addr)->code) == CONST_VECTOR))
 data.from_addr = copy_addr_to_reg (from_addr);
      if (0 && data.reverse && ! data.autinc_to)
 {
   data.to_addr = copy_addr_to_reg (plus_constant_wide ((to_addr), (long) (len)));
   data.autinc_to = 1;
   data.explicit_inc_to = -1;
 }
      if (0 && ! data.reverse && ! data.autinc_to)
 {
   data.to_addr = copy_addr_to_reg (to_addr);
   data.autinc_to = 1;
   data.explicit_inc_to = 1;
 }
      if (!data.autinc_to && ((rtx_class[(int) (((enum rtx_code) (to_addr)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (to_addr)->code) == CONST_VECTOR))
 data.to_addr = copy_addr_to_reg (to_addr);
    }
  if (! 0
      || align > 16 * 8 || align >= 128)
    align = 16 * 8;
  while (max_size > 1)
    {
      for (tmode = class_narrowest_mode[MODE_INT];
    tmode != VOIDmode; tmode = mode_wider[tmode])
 if (((unsigned short) mode_size[tmode]) < max_size)
   mode = tmode;
      if (mode == VOIDmode)
 break;
      icode = (optab_table[OTI_mov])->handlers[(int) mode].insn_code;
      if (icode != CODE_FOR_nothing && align >= get_mode_alignment (mode))
 move_by_pieces_1 ((insn_data[icode].genfun), mode, &data);
      max_size = ((unsigned short) mode_size[mode]);
    }
  if (data.len > 0)
    abort ();
  if (endp)
    {
      rtx to1;
      if (data.reverse)
 abort ();
      if (data.autinc_to)
 {
   if (endp == 2)
     {
       if (0 && data.explicit_inc_to > 0)
  emit_insn (gen_add2_insn (data.to_addr, (const_int_rtx[64 -1])));
       else
  data.to_addr = copy_addr_to_reg (plus_constant_wide ((data.to_addr), (long) (-1))
           );
     }
   to1 = adjust_automodify_address_1 (data.to, QImode, data.to_addr, data.offset, 1)
                    ;
 }
      else
 {
   if (endp == 2)
     --data.offset;
   to1 = adjust_address_1 (data.to, QImode, data.offset, 1, 1);
 }
      return to1;
    }
  else
    return data.to;
}
static unsigned long
move_by_pieces_ninsns (unsigned long l, unsigned int align)
{
  unsigned long n_insns = 0;
  unsigned long max_size = 16 + 1;
  if (! 0
      || align > 16 * 8 || align >= 128)
    align = 16 * 8;
  while (max_size > 1)
    {
      enum machine_mode mode = VOIDmode, tmode;
      enum insn_code icode;
      for (tmode = class_narrowest_mode[MODE_INT];
    tmode != VOIDmode; tmode = mode_wider[tmode])
 if (((unsigned short) mode_size[tmode]) < max_size)
   mode = tmode;
      if (mode == VOIDmode)
 break;
      icode = (optab_table[OTI_mov])->handlers[(int) mode].insn_code;
      if (icode != CODE_FOR_nothing && align >= get_mode_alignment (mode))
 n_insns += l / ((unsigned short) mode_size[mode]), l %= ((unsigned short) mode_size[mode]);
      max_size = ((unsigned short) mode_size[mode]);
    }
  if (l)
    abort ();
  return n_insns;
}
static void
move_by_pieces_1 (rtx (*genfun) (rtx, ...), enum machine_mode mode,
    struct move_by_pieces *data)
{
  unsigned int size = ((unsigned short) mode_size[mode]);
  rtx to1 = (rtx) 0, from1;
  while (data->len >= size)
    {
      if (data->reverse)
 data->offset -= size;
      if (data->to)
 {
   if (data->autinc_to)
     to1 = adjust_automodify_address_1 (data->to, mode, data->to_addr, data->offset, 1)
                       ;
   else
     to1 = adjust_address_1 (data->to, mode, data->offset, 1, 1);
 }
      if (data->autinc_from)
 from1 = adjust_automodify_address_1 (data->from, mode, data->from_addr, data->offset, 1)
                     ;
      else
 from1 = adjust_address_1 (data->from, mode, data->offset, 1, 1);
      if (0 && data->explicit_inc_to < 0)
 emit_insn (gen_add2_insn (data->to_addr,
      gen_rtx_CONST_INT (VOIDmode, (long) (-(long)size))));
      if (0 && data->explicit_inc_from < 0)
 emit_insn (gen_add2_insn (data->from_addr,
      gen_rtx_CONST_INT (VOIDmode, (long) (-(long)size))));
      if (data->to)
 emit_insn ((*genfun) (to1, from1));
      else
 {
   emit_single_push_insn (mode, from1, ((void *)0));
 }
      if (0 && data->explicit_inc_to > 0)
 emit_insn (gen_add2_insn (data->to_addr, gen_rtx_CONST_INT (VOIDmode, (long) (size))));
      if (0 && data->explicit_inc_from > 0)
 emit_insn (gen_add2_insn (data->from_addr, gen_rtx_CONST_INT (VOIDmode, (long) (size))));
      if (! data->reverse)
 data->offset += size;
      data->len -= size;
    }
}
rtx
emit_block_move (rtx x, rtx y, rtx size, enum block_op_methods method)
{
  unsigned char may_use_call;
  rtx retval = 0;
  unsigned int align;
  switch (method)
    {
    case BLOCK_OP_NORMAL:
      may_use_call = 1;
      break;
    case BLOCK_OP_CALL_PARM:
      may_use_call = block_move_libcall_safe_for_call_parm ();
      ((cfun->expr->x_inhibit_defer_pop) += 1);
      break;
    case BLOCK_OP_NO_LIBCALL:
      may_use_call = 0;
      break;
    default:
      abort ();
    }
  align = ((((((x)->u.fld[1]).rtmem) != 0 ? (((x)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (x)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (x)->mode)) : 8))) < (((((y)->u.fld[1]).rtmem) != 0 ? (((y)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (y)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (y)->mode)) : 8))) ? (((((x)->u.fld[1]).rtmem) != 0 ? (((x)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (x)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (x)->mode)) : 8))) : (((((y)->u.fld[1]).rtmem) != 0 ? (((y)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (y)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (y)->mode)) : 8))));
  x = protect_from_queue (x, 1);
  y = protect_from_queue (y, 0);
  size = protect_from_queue (size, 0);
  if (!(((enum rtx_code) (x)->code) == MEM))
    abort ();
  if (!(((enum rtx_code) (y)->code) == MEM))
    abort ();
  if (size == 0)
    abort ();
  x = adjust_address_1 (x, BLKmode, 0, 1, 1);
  y = adjust_address_1 (y, BLKmode, 0, 1, 1);
  if (((enum rtx_code) (size)->code) == CONST_INT)
    {
      if (((size)->u.hwint[0]) == 0)
 return 0;
      x = shallow_copy_rtx_stat (x );
      y = shallow_copy_rtx_stat (y );
      set_mem_size (x, size);
      set_mem_size (y, size);
    }
  if (((enum rtx_code) (size)->code) == CONST_INT && (move_by_pieces_ninsns (((size)->u.hwint[0]), align) < (unsigned int) (optimize_size ? 3 : ix86_cost->move_ratio)))
    move_by_pieces (x, y, ((size)->u.hwint[0]), align, 0);
  else if (emit_block_move_via_movstr (x, y, size, align))
    ;
  else if (may_use_call)
    retval = emit_block_move_via_libcall (x, y, size);
  else
    emit_block_move_via_loop (x, y, size, align);
  if (method == BLOCK_OP_CALL_PARM)
    ((cfun->expr->x_inhibit_defer_pop) -= 1);
  return retval;
}
static unsigned char
block_move_libcall_safe_for_call_parm (void)
{
  if (((!(target_flags & 0x00000800)) && !(target_flags & 0x00001000)))
    return 1;
  {
    CUMULATIVE_ARGS args_so_far;
    tree fn, arg;
    fn = emit_block_move_libcall_fn (0);
    init_cumulative_args (&(args_so_far), (((fn)->common.type)), ((rtx) 0), (0));
    arg = ((((fn)->common.type))->type.value1s);
    for ( ; arg != global_trees[TI_VOID_LIST_NODE] ; arg = ((arg)->common.chain))
      {
 enum machine_mode mode = ((((arg)->list.value1))->type.mode);
 rtx tmp = function_arg (&(args_so_far), (mode), ((tree) ((void *)0)), (1));
 if (!tmp || !(((enum rtx_code) (tmp)->code) == REG))
   return 0;
 if (0
                  )
   return 0;
 function_arg_advance (&(args_so_far), (mode), ((tree) ((void *)0)), (1));
      }
  }
  return 1;
}
static unsigned char
emit_block_move_via_movstr (rtx x, rtx y, rtx size, unsigned int align)
{
  rtx opalign = gen_rtx_CONST_INT (VOIDmode, (long) (align / 8));
  int save_volatile_ok = volatile_ok;
  enum machine_mode mode;
  volatile_ok = 1;
  for (mode = class_narrowest_mode[MODE_INT]; mode != VOIDmode;
       mode = mode_wider[mode])
    {
      enum insn_code code = movstr_optab[(int) mode];
      insn_operand_predicate_fn pred;
      if (code != CODE_FOR_nothing
   && ((((enum rtx_code) (size)->code) == CONST_INT
        && ((unsigned long) ((size)->u.hwint[0])
     <= (mode_mask_array[mode] >> 1)))
       || ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) >= (8 * (0 ? 8 : 4)))
   && ((pred = insn_data[(int) code].operand[0].predicate) == 0
       || (*pred) (x, BLKmode))
   && ((pred = insn_data[(int) code].operand[1].predicate) == 0
       || (*pred) (y, BLKmode))
   && ((pred = insn_data[(int) code].operand[3].predicate) == 0
       || (*pred) (opalign, VOIDmode)))
 {
   rtx op2;
   rtx last = get_last_insn ();
   rtx pat;
   op2 = convert_to_mode (mode, size, 1);
   pred = insn_data[(int) code].operand[2].predicate;
   if (pred != 0 && ! (*pred) (op2, mode))
     op2 = copy_to_mode_reg (mode, op2);
   pat = (insn_data[(int) code].genfun) (x, y, op2, opalign);
   if (pat)
     {
       emit_insn (pat);
       volatile_ok = save_volatile_ok;
       return 1;
     }
   else
     delete_insns_since (last);
 }
    }
  volatile_ok = save_volatile_ok;
  return 0;
}
static rtx
emit_block_move_via_libcall (rtx dst, rtx src, rtx size)
{
  rtx dst_addr, src_addr;
  tree call_expr, arg_list, fn, src_tree, dst_tree, size_tree;
  enum machine_mode size_mode;
  rtx retval;
  dst_addr = copy_to_mode_reg ((0 ? DImode : SImode), (((dst)->u.fld[0]).rtx1));
  src_addr = copy_to_mode_reg ((0 ? DImode : SImode), (((src)->u.fld[0]).rtx1));
  dst_addr = convert_memory_address (ptr_mode, dst_addr);
  src_addr = convert_memory_address (ptr_mode, src_addr);
  dst_tree = make_tree (global_trees[TI_PTR_TYPE], dst_addr);
  src_tree = make_tree (global_trees[TI_PTR_TYPE], src_addr);
  size_mode = ((sizetype_tab[(int) SIZETYPE])->type.mode);
  size = convert_to_mode (size_mode, size, 1);
  size = copy_to_mode_reg (size_mode, size);
  size_tree = make_tree (sizetype_tab[(int) SIZETYPE], size);
  fn = emit_block_move_libcall_fn (1);
  arg_list = tree_cons_stat ((tree) ((void *)0),size_tree,(tree) ((void *)0) );
  arg_list = tree_cons_stat ((tree) ((void *)0),src_tree,arg_list );
  arg_list = tree_cons_stat ((tree) ((void *)0),dst_tree,arg_list );
  call_expr = build1_stat (ADDR_EXPR,build_pointer_type (((fn)->common.type)),fn );
  call_expr = build (CALL_EXPR, ((((fn)->common.type))->common.type),
       call_expr, arg_list, (tree) ((void *)0));
  retval = expand_expr (call_expr, (rtx) 0, VOIDmode, 0);
  if ((((dst))->unchanging))
    add_function_usage_to
      (last_call_insn (), gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (dst))), ((rtx) 0))
                   );
  return retval;
}
static tree block_move_fn;
void
init_block_move_fn (const char *asmspec)
{
  if (!block_move_fn)
    {
      tree args, fn;
      fn = get_identifier ("memcpy");
      args = build_function_type_list (global_trees[TI_PTR_TYPE], global_trees[TI_PTR_TYPE],
           global_trees[TI_CONST_PTR_TYPE], sizetype_tab[(int) SIZETYPE],
           (tree) ((void *)0));
      fn = build_decl_stat (FUNCTION_DECL,fn,args );
      ((fn)->decl.external_flag) = 1;
      ((fn)->common.public_flag) = 1;
      ((fn)->decl.artificial_flag) = 1;
      ((fn)->common.nothrow_flag) = 1;
      block_move_fn = fn;
    }
  if (asmspec)
    {
      set_decl_rtl (block_move_fn, (rtx) 0);
      ((block_move_fn)->decl.assembler_name = (get_identifier (asmspec)));
    }
}
static tree
emit_block_move_libcall_fn (int for_call)
{
  static unsigned char emitted_extern;
  if (!block_move_fn)
    init_block_move_fn (((void *)0));
  if (for_call && !emitted_extern)
    {
      emitted_extern = 1;
      make_decl_rtl (block_move_fn, ((void *)0));
      assemble_external (block_move_fn);
    }
  return block_move_fn;
}
static void
emit_block_move_via_loop (rtx x, rtx y, rtx size,
     unsigned int align )
{
  rtx cmp_label, top_label, iter, x_addr, y_addr, tmp;
  enum machine_mode iter_mode;
  iter_mode = ((enum machine_mode) (size)->mode);
  if (iter_mode == VOIDmode)
    iter_mode = word_mode;
  top_label = gen_label_rtx ();
  cmp_label = gen_label_rtx ();
  iter = gen_reg_rtx (iter_mode);
  emit_move_insn (iter, (const_int_rtx[64]));
  x_addr = force_operand ((((x)->u.fld[0]).rtx1), (rtx) 0);
  y_addr = force_operand ((((y)->u.fld[0]).rtx1), (rtx) 0);
  do_pending_stack_adjust ();
  emit_jump (cmp_label);
  emit_label (top_label);
  tmp = convert_modes ((0 ? DImode : SImode), iter_mode, iter, 1);
  x_addr = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (x_addr), (tmp));
  y_addr = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (y_addr), (tmp));
  x = change_address (x, QImode, x_addr);
  y = change_address (y, QImode, y_addr);
  emit_move_insn (x, y);
  tmp = expand_simple_binop (iter_mode, PLUS, iter, (const_int_rtx[64 +1]), iter,
        1, OPTAB_LIB_WIDEN);
  if (tmp != iter)
    emit_move_insn (iter, tmp);
  emit_label (cmp_label);
  emit_cmp_and_jump_insns (iter, size, LT, (rtx) 0, iter_mode,
      1, top_label);
}
void
move_block_to_reg (int regno, rtx x, int nregs, enum machine_mode mode)
{
  int i;
  if (nregs == 0)
    return;
  if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR) && ! legitimate_constant_p (x))
    x = validize_mem (force_const_mem (mode, x));
  for (i = 0; i < nregs; i++)
    emit_move_insn (gen_rtx_REG (word_mode, regno + i),
      operand_subword_force (x, i, mode));
}
void
move_block_from_reg (int regno, rtx x, int nregs)
{
  int i;
  if (nregs == 0)
    return;
  for (i = 0; i < nregs; i++)
    {
      rtx tem = operand_subword (x, i, 1, BLKmode);
      if (tem == 0)
 abort ();
      emit_move_insn (tem, gen_rtx_REG (word_mode, regno + i));
    }
}
rtx
gen_group_rtx (rtx orig)
{
  int i, length;
  rtx *tmps;
  if (((enum rtx_code) (orig)->code) != PARALLEL)
    abort ();
  length = (((((orig)->u.fld[0]).rtvec1))->num_elem);
  tmps = C_alloca(sizeof (rtx) * length);
  i = ((((((((orig)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1) ? 0 : 1;
  if (i)
    tmps[0] = 0;
  for (; i < length; i++)
    {
      enum machine_mode mode = ((enum machine_mode) (((((((((orig)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1))->mode);
      rtx offset = ((((((((orig)->u.fld[0]).rtvec1))->elem[i]))->u.fld[1]).rtx1);
      tmps[i] = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_reg_rtx (mode)), (offset));
    }
  return gen_rtx_fmt_E (PARALLEL, (((enum machine_mode) (orig)->mode)), (gen_rtvec_v (length, tmps)));
}
void
emit_group_load (rtx dst, rtx orig_src, tree type , int ssize)
{
  rtx *tmps, src;
  int start, i;
  if (((enum rtx_code) (dst)->code) != PARALLEL)
    abort ();
  if (((((((((dst)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))
    start = 0;
  else
    start = 1;
  tmps = C_alloca(sizeof (rtx) * (((((dst)->u.fld[0]).rtvec1))->num_elem));
  for (i = start; i < (((((dst)->u.fld[0]).rtvec1))->num_elem); i++)
    {
      enum machine_mode mode = ((enum machine_mode) (((((((((dst)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1))->mode);
      long bytepos = ((((((((((dst)->u.fld[0]).rtvec1))->elem[i]))->u.fld[1]).rtx1))->u.hwint[0]);
      unsigned int bytelen = ((unsigned short) mode_size[mode]);
      int shift = 0;
      if (ssize >= 0 && bytepos + (long) bytelen > ssize)
 {
   if (
       0
       )
     shift = (bytelen - (ssize - bytepos)) * 8;
   bytelen = ssize - bytepos;
   if (bytelen <= 0)
     abort ();
 }
      src = orig_src;
      if (!(((enum rtx_code) (orig_src)->code) == MEM)
   && (!((rtx_class[(int) (((enum rtx_code) (orig_src)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (orig_src)->code) == CONST_VECTOR)
       || (((enum machine_mode) (orig_src)->mode) != mode
    && ((enum machine_mode) (orig_src)->mode) != VOIDmode)))
 {
   if (((enum machine_mode) (orig_src)->mode) == VOIDmode)
     src = gen_reg_rtx (mode);
   else
     src = gen_reg_rtx (((enum machine_mode) (orig_src)->mode));
   emit_move_insn (src, orig_src);
 }
      if ((((enum rtx_code) (src)->code) == MEM)
   && (! 0
       || ((((src)->u.fld[1]).rtmem) != 0 ? (((src)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (src)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (src)->mode)) : 8)) >= get_mode_alignment (mode))
   && bytepos * 8 % get_mode_alignment (mode) == 0
   && bytelen == ((unsigned short) mode_size[mode]))
 {
   tmps[i] = gen_reg_rtx (mode);
   emit_move_insn (tmps[i], adjust_address_1 (src, mode, bytepos, 1, 1));
 }
      else if (((enum rtx_code) (src)->code) == CONCAT)
 {
   unsigned int slen = ((unsigned short) mode_size[((enum machine_mode) (src)->mode)]);
   unsigned int slen0 = ((unsigned short) mode_size[((enum machine_mode) ((((src)->u.fld[0]).rtx1))->mode)]);
   if ((bytepos == 0 && bytelen == slen0)
       || (bytepos != 0 && bytepos + bytelen <= slen))
     {
       tmps[i] = (((src)->u.fld[bytepos / slen0]).rtx1);
       if (! ((rtx_class[(int) (((enum rtx_code) (tmps[i])->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (tmps[i])->code) == CONST_VECTOR)
    && (!(((enum rtx_code) (tmps[i])->code) == REG) || ((enum machine_mode) (tmps[i])->mode) != mode))
  tmps[i] = extract_bit_field (tmps[i], bytelen * 8,
          (bytepos % slen0) * 8,
          1, (rtx) 0, mode, mode, ssize);
     }
   else if (bytepos == 0)
     {
       rtx mem = assign_stack_temp (((enum machine_mode) (src)->mode), slen, 0);
       emit_move_insn (mem, src);
       tmps[i] = adjust_address_1 (mem, mode, 0, 1, 1);
     }
   else
     abort ();
 }
      else if ((mode_class[((enum machine_mode) (dst)->mode)] == MODE_VECTOR_INT || mode_class[((enum machine_mode) (dst)->mode)] == MODE_VECTOR_FLOAT)
        && (((enum rtx_code) (src)->code) == REG))
 {
   int slen = ((unsigned short) mode_size[((enum machine_mode) (src)->mode)]);
   rtx mem;
   mem = assign_stack_temp (((enum machine_mode) (src)->mode), slen, 0);
   emit_move_insn (mem, src);
   tmps[i] = adjust_address_1 (mem, mode, (int) bytepos, 1, 1);
 }
      else if (((rtx_class[(int) (((enum rtx_code) (src)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (src)->code) == CONST_VECTOR) && ((enum machine_mode) (dst)->mode) != BLKmode
               && (((((dst)->u.fld[0]).rtvec1))->num_elem) > 1)
        tmps[i] = simplify_gen_subreg (mode, src, ((enum machine_mode) (dst)->mode), bytepos);
      else if (((rtx_class[(int) (((enum rtx_code) (src)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (src)->code) == CONST_VECTOR)
        || ((((enum rtx_code) (src)->code) == REG) && ((enum machine_mode) (src)->mode) == mode))
 tmps[i] = src;
      else
 tmps[i] = extract_bit_field (src, bytelen * 8,
         bytepos * 8, 1, (rtx) 0,
         mode, mode, ssize);
      if (shift)
 tmps[i] = expand_shift (LSHIFT_EXPR, mode, tmps[i],
    build_int_2_wide ((unsigned long) (shift), (long) (0)), tmps[i], 0);
    }
  emit_queue ();
  for (i = start; i < (((((dst)->u.fld[0]).rtvec1))->num_elem); i++)
    emit_move_insn (((((((((dst)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1), tmps[i]);
}
void
emit_group_move (rtx dst, rtx src)
{
  int i;
  if (((enum rtx_code) (src)->code) != PARALLEL
      || ((enum rtx_code) (dst)->code) != PARALLEL
      || (((((src)->u.fld[0]).rtvec1))->num_elem) != (((((dst)->u.fld[0]).rtvec1))->num_elem))
    abort ();
  for (i = ((((((((src)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1) ? 0 : 1; i < (((((src)->u.fld[0]).rtvec1))->num_elem); i++)
    emit_move_insn (((((((((dst)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1),
      ((((((((src)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1));
}
void
emit_group_store (rtx orig_dst, rtx src, tree type , int ssize)
{
  rtx *tmps, dst;
  int start, i;
  if (((enum rtx_code) (src)->code) != PARALLEL)
    abort ();
  if (((((((((src)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))
    start = 0;
  else
    start = 1;
  tmps = C_alloca(sizeof (rtx) * (((((src)->u.fld[0]).rtvec1))->num_elem));
  for (i = start; i < (((((src)->u.fld[0]).rtvec1))->num_elem); i++)
    {
      rtx reg = ((((((((src)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1);
      tmps[i] = gen_reg_rtx (((enum machine_mode) (reg)->mode));
      emit_move_insn (tmps[i], reg);
    }
  emit_queue ();
  dst = orig_dst;
  if (((enum rtx_code) (dst)->code) == PARALLEL)
    {
      rtx temp;
      if (rtx_equal_p (dst, src))
 return;
      temp = assign_stack_temp (((enum machine_mode) (dst)->mode), ssize, 0);
      emit_group_store (temp, src, type, ssize);
      emit_group_load (dst, temp, type, ssize);
      return;
    }
  else if (!(((enum rtx_code) (dst)->code) == MEM) && ((enum rtx_code) (dst)->code) != CONCAT)
    {
      dst = gen_reg_rtx (((enum machine_mode) (orig_dst)->mode));
      emit_move_insn (dst, (const_tiny_rtx[0][(int) (((enum machine_mode) (orig_dst)->mode))]));
    }
  for (i = start; i < (((((src)->u.fld[0]).rtvec1))->num_elem); i++)
    {
      long bytepos = ((((((((((src)->u.fld[0]).rtvec1))->elem[i]))->u.fld[1]).rtx1))->u.hwint[0]);
      enum machine_mode mode = ((enum machine_mode) (tmps[i])->mode);
      unsigned int bytelen = ((unsigned short) mode_size[mode]);
      rtx dest = dst;
      if (ssize >= 0 && bytepos + (long) bytelen > ssize)
 {
   if (
       0
       )
     {
       int shift = (bytelen - (ssize - bytepos)) * 8;
       tmps[i] = expand_shift (RSHIFT_EXPR, mode, tmps[i],
          build_int_2_wide ((unsigned long) (shift), (long) (0)), tmps[i], 0);
     }
   bytelen = ssize - bytepos;
 }
      if (((enum rtx_code) (dst)->code) == CONCAT)
 {
   if (bytepos + bytelen <= ((unsigned short) mode_size[((enum machine_mode) ((((dst)->u.fld[0]).rtx1))->mode)]))
     dest = (((dst)->u.fld[0]).rtx1);
   else if (bytepos >= ((unsigned short) mode_size[((enum machine_mode) ((((dst)->u.fld[0]).rtx1))->mode)]))
     {
       bytepos -= ((unsigned short) mode_size[((enum machine_mode) ((((dst)->u.fld[0]).rtx1))->mode)]);
       dest = (((dst)->u.fld[1]).rtx1);
     }
   else if (bytepos == 0 && (((((src)->u.fld[0]).rtvec1))->num_elem))
     {
       dest = assign_stack_temp (((enum machine_mode) (dest)->mode),
            ((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]), 0);
       emit_move_insn (adjust_address_1 (dest, ((enum machine_mode) (tmps[i])->mode), bytepos, 1, 1),
         tmps[i]);
       dst = dest;
       break;
     }
   else
     abort ();
 }
      if ((((enum rtx_code) (dest)->code) == MEM)
   && (! 0
       || ((((dest)->u.fld[1]).rtmem) != 0 ? (((dest)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (dest)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (dest)->mode)) : 8)) >= get_mode_alignment (mode))
   && bytepos * 8 % get_mode_alignment (mode) == 0
   && bytelen == ((unsigned short) mode_size[mode]))
 emit_move_insn (adjust_address_1 (dest, mode, bytepos, 1, 1), tmps[i]);
      else
 store_bit_field (dest, bytelen * 8, bytepos * 8,
    mode, tmps[i], ssize);
    }
  emit_queue ();
  if (orig_dst != dst)
    emit_move_insn (orig_dst, dst);
}
rtx
copy_blkmode_from_reg (rtx tgtblk, rtx srcreg, tree type)
{
  unsigned long bytes = int_size_in_bytes (type);
  rtx src = ((void *)0), dst = ((void *)0);
  unsigned long bitsize = ((((type)->type.align)) < ((8 * (0 ? 8 : 4))) ? (((type)->type.align)) : ((8 * (0 ? 8 : 4))));
  unsigned long bitpos, xbitpos, padding_correction = 0;
  if (tgtblk == 0)
    {
      tgtblk = assign_temp (build_qualified_type (type,
        (((((type)->common.readonly_flag) * 0x1) | (((type)->common.volatile_flag) * 0x2) | (((type)->type.restrict_flag) * 0x4))
         | 0x1)),
       0, 1, 1);
      preserve_temp_slots (tgtblk);
    }
  if (((enum machine_mode) (srcreg)->mode) != BLKmode
      && ((unsigned short) mode_size[((enum machine_mode) (srcreg)->mode)]) < (0 ? 8 : 4))
    srcreg = convert_to_mode (word_mode, srcreg, ((type)->common.unsigned_flag));
  if (bytes % (0 ? 8 : 4) != 0
      && (targetm.calls.return_in_msb (type)
   ? !0
   : 0))
    padding_correction
      = ((8 * (0 ? 8 : 4)) - ((bytes % (0 ? 8 : 4)) * 8));
  for (bitpos = 0, xbitpos = padding_correction;
       bitpos < bytes * 8;
       bitpos += bitsize, xbitpos += bitsize)
    {
      if (xbitpos % (8 * (0 ? 8 : 4)) == 0
   || xbitpos == padding_correction)
 src = operand_subword_force (srcreg, xbitpos / (8 * (0 ? 8 : 4)),
         ((enum machine_mode) (srcreg)->mode));
      if (bitpos % (8 * (0 ? 8 : 4)) == 0)
 dst = operand_subword (tgtblk, bitpos / (8 * (0 ? 8 : 4)), 1, BLKmode);
      store_bit_field (dst, bitsize, bitpos % (8 * (0 ? 8 : 4)), word_mode,
         extract_bit_field (src, bitsize,
       xbitpos % (8 * (0 ? 8 : 4)), 1,
       (rtx) 0, word_mode, word_mode,
       (8 * (0 ? 8 : 4))),
         (8 * (0 ? 8 : 4)));
    }
  return tgtblk;
}
void
use_reg (rtx *call_fusage, rtx reg)
{
  if (!(((enum rtx_code) (reg)->code) == REG)
      || (((reg)->u.fld[0]).rtuint) >= 53)
    abort ();
  *call_fusage
    = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_fmt_e (USE, (VOIDmode), (reg))), (*call_fusage))
                                              ;
}
void
use_regs (rtx *call_fusage, int regno, int nregs)
{
  int i;
  if (regno + nregs > 53)
    abort ();
  for (i = 0; i < nregs; i++)
    use_reg (call_fusage, (cfun->emit->x_regno_reg_rtx)[regno + i]);
}
void
use_group_regs (rtx *call_fusage, rtx regs)
{
  int i;
  for (i = 0; i < (((((regs)->u.fld[0]).rtvec1))->num_elem); i++)
    {
      rtx reg = ((((((((regs)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1);
      if (reg != 0 && (((enum rtx_code) (reg)->code) == REG))
 use_reg (call_fusage, reg);
    }
}
int
can_store_by_pieces (unsigned long len,
       rtx (*constfun) (void *, long, enum machine_mode),
       void *constfundata, unsigned int align)
{
  unsigned long max_size, l;
  long offset = 0;
  enum machine_mode mode, tmode;
  enum insn_code icode;
  int reverse;
  rtx cst;
  if (len == 0)
    return 1;
  if (! (move_by_pieces_ninsns (len, align) < (unsigned int) (optimize_size ? 3 : ix86_cost->move_ratio)))
    return 0;
  if (! 0
      || align > 16 * 8 || align >= 128)
    align = 16 * 8;
  for (reverse = 0;
       reverse <= (0 || 0);
       reverse++)
    {
      l = len;
      mode = VOIDmode;
      max_size = (((0 ? 8 : 4)) < (2 * sizeof (long)) ? ((0 ? 8 : 4)) : (2 * sizeof (long))) + 1;
      while (max_size > 1)
 {
   for (tmode = class_narrowest_mode[MODE_INT];
        tmode != VOIDmode; tmode = mode_wider[tmode])
     if (((unsigned short) mode_size[tmode]) < max_size)
       mode = tmode;
   if (mode == VOIDmode)
     break;
   icode = (optab_table[OTI_mov])->handlers[(int) mode].insn_code;
   if (icode != CODE_FOR_nothing
       && align >= get_mode_alignment (mode))
     {
       unsigned int size = ((unsigned short) mode_size[mode]);
       while (l >= size)
  {
    if (reverse)
      offset -= size;
    cst = (*constfun) (constfundata, offset, mode);
    if (!legitimate_constant_p (cst))
      return 0;
    if (!reverse)
      offset += size;
    l -= size;
  }
     }
   max_size = ((unsigned short) mode_size[mode]);
 }
      if (l != 0)
 abort ();
    }
  return 1;
}
rtx
store_by_pieces (rtx to, unsigned long len,
   rtx (*constfun) (void *, long, enum machine_mode),
   void *constfundata, unsigned int align, int endp)
{
  struct store_by_pieces data;
  if (len == 0)
    {
      if (endp == 2)
 abort ();
      return to;
    }
  if (! (move_by_pieces_ninsns (len, align) < (unsigned int) (optimize_size ? 3 : ix86_cost->move_ratio)))
    abort ();
  to = protect_from_queue (to, 1);
  data.constfun = constfun;
  data.constfundata = constfundata;
  data.len = len;
  data.to = to;
  store_by_pieces_1 (&data, align);
  if (endp)
    {
      rtx to1;
      if (data.reverse)
 abort ();
      if (data.autinc_to)
 {
   if (endp == 2)
     {
       if (0 && data.explicit_inc_to > 0)
  emit_insn (gen_add2_insn (data.to_addr, (const_int_rtx[64 -1])));
       else
  data.to_addr = copy_addr_to_reg (plus_constant_wide ((data.to_addr), (long) (-1))
           );
     }
   to1 = adjust_automodify_address_1 (data.to, QImode, data.to_addr, data.offset, 1)
                    ;
 }
      else
 {
   if (endp == 2)
     --data.offset;
   to1 = adjust_address_1 (data.to, QImode, data.offset, 1, 1);
 }
      return to1;
    }
  else
    return data.to;
}
static void
clear_by_pieces (rtx to, unsigned long len, unsigned int align)
{
  struct store_by_pieces data;
  if (len == 0)
    return;
  data.constfun = clear_by_pieces_1;
  data.constfundata = ((void *)0);
  data.len = len;
  data.to = to;
  store_by_pieces_1 (&data, align);
}
static rtx
clear_by_pieces_1 (void *data ,
     long offset ,
     enum machine_mode mode )
{
  return (const_int_rtx[64]);
}
static void
store_by_pieces_1 (struct store_by_pieces *data ,
     unsigned int align )
{
  rtx to_addr = (((data->to)->u.fld[0]).rtx1);
  unsigned long max_size = (((0 ? 8 : 4)) < (2 * sizeof (long)) ? ((0 ? 8 : 4)) : (2 * sizeof (long))) + 1;
  enum machine_mode mode = VOIDmode, tmode;
  enum insn_code icode;
  data->offset = 0;
  data->to_addr = to_addr;
  data->autinc_to
    = (((enum rtx_code) (to_addr)->code) == PRE_INC || ((enum rtx_code) (to_addr)->code) == PRE_DEC
       || ((enum rtx_code) (to_addr)->code) == POST_INC || ((enum rtx_code) (to_addr)->code) == POST_DEC);
  data->explicit_inc_to = 0;
  data->reverse
    = (((enum rtx_code) (to_addr)->code) == PRE_DEC || ((enum rtx_code) (to_addr)->code) == POST_DEC);
  if (data->reverse)
    data->offset = data->len;
  if (!data->autinc_to
      && move_by_pieces_ninsns (data->len, align) > 2)
    {
      for (tmode = class_narrowest_mode[MODE_INT];
    tmode != VOIDmode; tmode = mode_wider[tmode])
 if (((unsigned short) mode_size[tmode]) < max_size)
   mode = tmode;
      if (0 && data->reverse && ! data->autinc_to)
 {
   data->to_addr = copy_addr_to_reg (plus_constant_wide ((to_addr), (long) (data->len)));
   data->autinc_to = 1;
   data->explicit_inc_to = -1;
 }
      if (0 && ! data->reverse
   && ! data->autinc_to)
 {
   data->to_addr = copy_addr_to_reg (to_addr);
   data->autinc_to = 1;
   data->explicit_inc_to = 1;
 }
      if ( !data->autinc_to && ((rtx_class[(int) (((enum rtx_code) (to_addr)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (to_addr)->code) == CONST_VECTOR))
 data->to_addr = copy_addr_to_reg (to_addr);
    }
  if (! 0
      || align > 16 * 8 || align >= 128)
    align = 16 * 8;
  while (max_size > 1)
    {
      for (tmode = class_narrowest_mode[MODE_INT];
    tmode != VOIDmode; tmode = mode_wider[tmode])
 if (((unsigned short) mode_size[tmode]) < max_size)
   mode = tmode;
      if (mode == VOIDmode)
 break;
      icode = (optab_table[OTI_mov])->handlers[(int) mode].insn_code;
      if (icode != CODE_FOR_nothing && align >= get_mode_alignment (mode))
 store_by_pieces_2 ((insn_data[icode].genfun), mode, data);
      max_size = ((unsigned short) mode_size[mode]);
    }
  if (data->len != 0)
    abort ();
}
static void
store_by_pieces_2 (rtx (*genfun) (rtx, ...), enum machine_mode mode,
     struct store_by_pieces *data)
{
  unsigned int size = ((unsigned short) mode_size[mode]);
  rtx to1, cst;
  while (data->len >= size)
    {
      if (data->reverse)
 data->offset -= size;
      if (data->autinc_to)
 to1 = adjust_automodify_address_1 (data->to, mode, data->to_addr, data->offset, 1)
                   ;
      else
 to1 = adjust_address_1 (data->to, mode, data->offset, 1, 1);
      if (0 && data->explicit_inc_to < 0)
 emit_insn (gen_add2_insn (data->to_addr,
      gen_rtx_CONST_INT (VOIDmode, (long) (-(long) size))));
      cst = (*data->constfun) (data->constfundata, data->offset, mode);
      emit_insn ((*genfun) (to1, cst));
      if (0 && data->explicit_inc_to > 0)
 emit_insn (gen_add2_insn (data->to_addr, gen_rtx_CONST_INT (VOIDmode, (long) (size))));
      if (! data->reverse)
 data->offset += size;
      data->len -= size;
    }
}
rtx
clear_storage (rtx object, rtx size)
{
  rtx retval = 0;
  unsigned int align = ((((enum rtx_code) (object)->code) == MEM) ? ((((object)->u.fld[1]).rtmem) != 0 ? (((object)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (object)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (object)->mode)) : 8))
   : get_mode_alignment (((enum machine_mode) (object)->mode)));
  if (((enum machine_mode) (object)->mode) != BLKmode
      && ((enum rtx_code) (size)->code) == CONST_INT
      && ((size)->u.hwint[0]) == (long) ((unsigned short) mode_size[((enum machine_mode) (object)->mode)]))
    emit_move_insn (object, (const_tiny_rtx[0][(int) (((enum machine_mode) (object)->mode))]));
  else
    {
      object = protect_from_queue (object, 1);
      size = protect_from_queue (size, 0);
      if (size == (const_int_rtx[64]))
 ;
      else if (((enum rtx_code) (size)->code) == CONST_INT
   && (move_by_pieces_ninsns (((size)->u.hwint[0]), align) < (unsigned int) 2))
 clear_by_pieces (object, ((size)->u.hwint[0]), align);
      else if (clear_storage_via_clrstr (object, size, align))
 ;
      else
 retval = clear_storage_via_libcall (object, size);
    }
  return retval;
}
static unsigned char
clear_storage_via_clrstr (rtx object, rtx size, unsigned int align)
{
  rtx opalign = gen_rtx_CONST_INT (VOIDmode, (long) (align / 8));
  enum machine_mode mode;
  for (mode = class_narrowest_mode[MODE_INT]; mode != VOIDmode;
       mode = mode_wider[mode])
    {
      enum insn_code code = clrstr_optab[(int) mode];
      insn_operand_predicate_fn pred;
      if (code != CODE_FOR_nothing
   && ((((enum rtx_code) (size)->code) == CONST_INT
        && ((unsigned long) ((size)->u.hwint[0])
     <= (mode_mask_array[mode] >> 1)))
       || ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) >= (8 * (0 ? 8 : 4)))
   && ((pred = insn_data[(int) code].operand[0].predicate) == 0
       || (*pred) (object, BLKmode))
   && ((pred = insn_data[(int) code].operand[2].predicate) == 0
       || (*pred) (opalign, VOIDmode)))
 {
   rtx op1;
   rtx last = get_last_insn ();
   rtx pat;
   op1 = convert_to_mode (mode, size, 1);
   pred = insn_data[(int) code].operand[1].predicate;
   if (pred != 0 && ! (*pred) (op1, mode))
     op1 = copy_to_mode_reg (mode, op1);
   pat = (insn_data[(int) code].genfun) (object, op1, opalign);
   if (pat)
     {
       emit_insn (pat);
       return 1;
     }
   else
     delete_insns_since (last);
 }
    }
  return 0;
}
static rtx
clear_storage_via_libcall (rtx object, rtx size)
{
  tree call_expr, arg_list, fn, object_tree, size_tree;
  enum machine_mode size_mode;
  rtx retval;
  object = copy_to_mode_reg ((0 ? DImode : SImode), (((object)->u.fld[0]).rtx1));
  size_mode = ((sizetype_tab[(int) SIZETYPE])->type.mode);
  size = convert_to_mode (size_mode, size, 1);
  size = copy_to_mode_reg (size_mode, size);
  object_tree = make_tree (global_trees[TI_PTR_TYPE], object);
  size_tree = make_tree (sizetype_tab[(int) SIZETYPE], size);
  fn = clear_storage_libcall_fn (1);
  arg_list = tree_cons_stat ((tree) ((void *)0),size_tree,(tree) ((void *)0) );
  arg_list = tree_cons_stat ((tree) ((void *)0),global_trees[TI_INTEGER_ZERO],arg_list );
  arg_list = tree_cons_stat ((tree) ((void *)0),object_tree,arg_list );
  call_expr = build1_stat (ADDR_EXPR,build_pointer_type (((fn)->common.type)),fn );
  call_expr = build (CALL_EXPR, ((((fn)->common.type))->common.type),
       call_expr, arg_list, (tree) ((void *)0));
  retval = expand_expr (call_expr, (rtx) 0, VOIDmode, 0);
  if ((((object))->unchanging))
    emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (object)));
  return retval;
}
static tree block_clear_fn;
void
init_block_clear_fn (const char *asmspec)
{
  if (!block_clear_fn)
    {
      tree fn, args;
      fn = get_identifier ("memset");
      args = build_function_type_list (global_trees[TI_PTR_TYPE], global_trees[TI_PTR_TYPE],
           integer_types[itk_int], sizetype_tab[(int) SIZETYPE],
           (tree) ((void *)0));
      fn = build_decl_stat (FUNCTION_DECL,fn,args );
      ((fn)->decl.external_flag) = 1;
      ((fn)->common.public_flag) = 1;
      ((fn)->decl.artificial_flag) = 1;
      ((fn)->common.nothrow_flag) = 1;
      block_clear_fn = fn;
    }
  if (asmspec)
    {
      set_decl_rtl (block_clear_fn, (rtx) 0);
      ((block_clear_fn)->decl.assembler_name = (get_identifier (asmspec)));
    }
}
static tree
clear_storage_libcall_fn (int for_call)
{
  static unsigned char emitted_extern;
  if (!block_clear_fn)
    init_block_clear_fn (((void *)0));
  if (for_call && !emitted_extern)
    {
      emitted_extern = 1;
      make_decl_rtl (block_clear_fn, ((void *)0));
      assemble_external (block_clear_fn);
    }
  return block_clear_fn;
}
rtx
emit_move_insn (rtx x, rtx y)
{
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  rtx y_cst = (rtx) 0;
  rtx last_insn, set;
  x = protect_from_queue (x, 1);
  y = protect_from_queue (y, 0);
  if (mode == BLKmode || (((enum machine_mode) (y)->mode) != mode && ((enum machine_mode) (y)->mode) != VOIDmode))
    abort ();
  if (((rtx_class[(int) (((enum rtx_code) (y)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (y)->code) == CONST_VECTOR))
    {
      if (optimize
   && (mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT)
   && (last_insn = compress_float_constant (x, y)))
 return last_insn;
      y_cst = y;
      if (!legitimate_constant_p (y))
 {
   y = force_const_mem (mode, y);
   if (!y)
     y = y_cst;
 }
    }
  if ((((enum rtx_code) (x)->code) == MEM)
      && ((! memory_address_p (((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1))
    && ! push_operand (x, ((enum machine_mode) (x)->mode)))
   || (flag_force_addr
       && constant_address_p ((((x)->u.fld[0]).rtx1)))))
    x = validize_mem (x);
  if ((((enum rtx_code) (y)->code) == MEM)
      && (! memory_address_p (((enum machine_mode) (y)->mode), (((y)->u.fld[0]).rtx1))
   || (flag_force_addr
       && constant_address_p ((((y)->u.fld[0]).rtx1)))))
    y = validize_mem (y);
  if (mode == BLKmode)
    abort ();
  last_insn = emit_move_insn_1 (x, y);
  if (y_cst && (((enum rtx_code) (x)->code) == REG)
      && (set = (((((enum rtx_code) (last_insn)->code) == INSN) || (((enum rtx_code) (last_insn)->code) == JUMP_INSN) || (((enum rtx_code) (last_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((last_insn)->u.fld[5]).rtx1))->code) == SET ? (((last_insn)->u.fld[5]).rtx1) : single_set_2 (last_insn, (((last_insn)->u.fld[5]).rtx1))) : (rtx) 0)) != (rtx) 0
      && (((set)->u.fld[0]).rtx1) == x
      && ! rtx_equal_p (y_cst, (((set)->u.fld[1]).rtx1)))
    set_unique_reg_note (last_insn, REG_EQUAL, y_cst);
  return last_insn;
}
rtx
emit_move_insn_1 (rtx x, rtx y)
{
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  enum machine_mode submode;
  enum mode_class class = mode_class[mode];
  if ((unsigned int) mode >= (unsigned int) MAX_MACHINE_MODE)
    abort ();
  if ((optab_table[OTI_mov])->handlers[(int) mode].insn_code != CODE_FOR_nothing)
    return
      emit_insn ((insn_data[(optab_table[OTI_mov])->handlers[(int) mode].insn_code].genfun) (x, y));
  else if ((class == MODE_COMPLEX_FLOAT || class == MODE_COMPLEX_INT)
    && BLKmode != (submode = mode_inner[mode])
    && ((optab_table[OTI_mov])->handlers[(int) submode].insn_code
        != CODE_FOR_nothing))
    {
      int stack = push_operand (x, ((enum machine_mode) (x)->mode));
      if (stack
   && ((0 ? (((((unsigned short) mode_size[submode])) + 7) & (-8)) : (((((unsigned short) mode_size[submode])) + 1) & (-2)))
       != ((unsigned short) mode_size[submode])))
 {
   rtx temp;
   long offset1, offset2;
   temp = expand_binop ((0 ? DImode : SImode),
          (optab_table[OTI_sub]),
          (global_rtl[GR_STACK_POINTER]),
          gen_rtx_CONST_INT (VOIDmode, (long) ((0 ? (((((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) + 7) & (-8)) : (((((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) + 1) & (-2)))))
                                     ,
          (global_rtl[GR_STACK_POINTER]), 0, OPTAB_LIB_WIDEN);
   if (temp != (global_rtl[GR_STACK_POINTER]))
     emit_move_insn ((global_rtl[GR_STACK_POINTER]), temp);
   offset1 = 0;
   offset2 = ((unsigned short) mode_size[submode]);
   emit_move_insn (change_address (x, submode,
       gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])), (gen_rtx_CONST_INT (VOIDmode, (long) (offset1))))
                         ),
     gen_realpart (submode, y));
   emit_move_insn (change_address (x, submode,
       gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])), (gen_rtx_CONST_INT (VOIDmode, (long) (offset2))))
                         ),
     gen_imagpart (submode, y));
 }
      else
      if (stack)
 {
   emit_move_insn (gen_rtx_MEM (submode, (((x)->u.fld[0]).rtx1)),
     gen_imagpart (submode, y));
   emit_move_insn (gen_rtx_MEM (submode, (((x)->u.fld[0]).rtx1)),
     gen_realpart (submode, y));
 }
      else
 {
   rtx realpart_x, realpart_y;
   rtx imagpart_x, imagpart_y;
   if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) < 2 * (8 * (0 ? 8 : 4))
       && (reload_in_progress | reload_completed) == 0)
     {
       int packed_dest_p
  = ((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) < 53);
       int packed_src_p
  = ((((enum rtx_code) (y)->code) == REG) && (((y)->u.fld[0]).rtuint) < 53);
       if (packed_dest_p || packed_src_p)
  {
    enum mode_class reg_class = ((class == MODE_COMPLEX_FLOAT)
            ? MODE_FLOAT : MODE_INT);
    enum machine_mode reg_mode
      = mode_for_size (((unsigned short) (((unsigned short) mode_size[mode]) * 8)), reg_class, 1);
    if (reg_mode != BLKmode)
      {
        rtx mem = assign_stack_temp (reg_mode,
         ((unsigned short) mode_size[mode]), 0);
        rtx cmem = adjust_address_1 (mem, mode, 0, 1, 1);
        if (packed_dest_p)
   {
     rtx sreg = gen_rtx_SUBREG (reg_mode, x, 0);
     emit_move_insn_1 (cmem, y);
     return emit_move_insn_1 (sreg, mem);
   }
        else
   {
     rtx sreg = gen_rtx_SUBREG (reg_mode, y, 0);
     emit_move_insn_1 (mem, sreg);
     return emit_move_insn_1 (x, cmem);
   }
      }
  }
     }
   realpart_x = gen_realpart (submode, x);
   realpart_y = gen_realpart (submode, y);
   imagpart_x = gen_imagpart (submode, x);
   imagpart_y = gen_imagpart (submode, y);
   if (x != y
       && ! (reload_in_progress || reload_completed)
       && (((enum rtx_code) (realpart_x)->code) == SUBREG
    || ((enum rtx_code) (imagpart_x)->code) == SUBREG))
     emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (x)));
   emit_move_insn (realpart_x, realpart_y);
   emit_move_insn (imagpart_x, imagpart_y);
 }
      return get_last_insn ();
    }
  else if (mode_class[mode] == MODE_CC
    && (optab_table[OTI_mov])->handlers[(int) mode].insn_code == CODE_FOR_nothing)
    {
      enum insn_code insn_code;
      enum machine_mode tmode = VOIDmode;
      rtx x1 = x, y1 = y;
      if (mode != CCmode
   && (optab_table[OTI_mov])->handlers[(int) CCmode].insn_code != CODE_FOR_nothing)
 tmode = CCmode;
      else
 for (tmode = QImode; tmode != VOIDmode;
      tmode = mode_wider[tmode])
   if (((unsigned short) mode_size[tmode]) == ((unsigned short) mode_size[mode]))
     break;
      if (tmode == VOIDmode)
 abort ();
      if (reload_in_progress)
 {
   x = gen_lowpart_common (tmode, x1);
   if (x == 0 && (((enum rtx_code) (x1)->code) == MEM))
     {
       x = adjust_address_1 (x1, tmode, 0, 0, 1);
       copy_replacements (x1, x);
     }
   y = gen_lowpart_common (tmode, y1);
   if (y == 0 && (((enum rtx_code) (y1)->code) == MEM))
     {
       y = adjust_address_1 (y1, tmode, 0, 0, 1);
       copy_replacements (y1, y);
     }
 }
      else
 {
   x = rtl_hooks.gen_lowpart (tmode, x);
   y = rtl_hooks.gen_lowpart (tmode, y);
 }
      insn_code = (optab_table[OTI_mov])->handlers[(int) tmode].insn_code;
      return emit_insn ((insn_data[insn_code].genfun) (x, y));
    }
  else if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
    && (submode = int_mode_for_mode (mode)) != BLKmode
    && (optab_table[OTI_mov])->handlers[submode].insn_code != CODE_FOR_nothing)
    return emit_insn ((insn_data[(optab_table[OTI_mov])->handlers[submode].insn_code].genfun)
        (simplify_gen_subreg (submode, x, mode, 0),
         simplify_gen_subreg (submode, y, mode, 0)));
  else if (((unsigned short) mode_size[mode]) >= (0 ? 8 : 4))
    {
      rtx last_insn = 0;
      rtx seq, inner;
      int need_clobber;
      int i;
      if (push_operand (x, ((enum machine_mode) (x)->mode)))
 {
   rtx temp;
   enum rtx_code code;
   temp = expand_binop ((0 ? DImode : SImode),
          (optab_table[OTI_sub]),
          (global_rtl[GR_STACK_POINTER]),
          gen_rtx_CONST_INT (VOIDmode, (long) ((0 ? (((((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) + 7) & (-8)) : (((((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) + 1) & (-2)))))
                                     ,
          (global_rtl[GR_STACK_POINTER]), 0, OPTAB_LIB_WIDEN);
   if (temp != (global_rtl[GR_STACK_POINTER]))
     emit_move_insn ((global_rtl[GR_STACK_POINTER]), temp);
   code = ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code);
   if (code == POST_INC)
     temp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])), (gen_rtx_CONST_INT (VOIDmode, (long) (-((long) ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]))))))
                                       ;
   else if (code == POST_DEC)
     temp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])), (gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])))))
                                           ;
   else
     temp = (global_rtl[GR_STACK_POINTER]);
   x = change_address (x, VOIDmode, temp);
 }
      if (reload_in_progress && (((enum rtx_code) (x)->code) == MEM)
   && (inner = find_replacement (&(((x)->u.fld[0]).rtx1))) != (((x)->u.fld[0]).rtx1))
 x = replace_equiv_address_nv (x, inner);
      if (reload_in_progress && (((enum rtx_code) (y)->code) == MEM)
   && (inner = find_replacement (&(((y)->u.fld[0]).rtx1))) != (((y)->u.fld[0]).rtx1))
 y = replace_equiv_address_nv (y, inner);
      start_sequence ();
      need_clobber = 0;
      for (i = 0;
    i < (((unsigned short) mode_size[mode]) + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4);
    i++)
 {
   rtx xpart = operand_subword (x, i, 1, mode);
   rtx ypart = operand_subword (y, i, 1, mode);
   if (ypart == 0 && ((rtx_class[(int) (((enum rtx_code) (y)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (y)->code) == CONST_VECTOR))
     {
       y = force_const_mem (mode, y);
       ypart = operand_subword (y, i, 1, mode);
     }
   else if (ypart == 0)
     ypart = operand_subword_force (y, i, mode);
   if (xpart == 0 || ypart == 0)
     abort ();
   need_clobber |= (((enum rtx_code) (xpart)->code) == SUBREG);
   last_insn = emit_move_insn (xpart, ypart);
 }
      seq = get_insns ();
      end_sequence ();
      if (x != y
   && ! (reload_in_progress || reload_completed)
   && need_clobber != 0)
 emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (x)));
      emit_insn (seq);
      return last_insn;
    }
  else
    abort ();
}
static rtx
compress_float_constant (rtx x, rtx y)
{
  enum machine_mode dstmode = ((enum machine_mode) (x)->mode);
  enum machine_mode orig_srcmode = ((enum machine_mode) (y)->mode);
  enum machine_mode srcmode;
  struct real_value r;
  memcpy (&(r), &(((y))->u.hwint[0]), sizeof (struct real_value));
  for (srcmode = class_narrowest_mode[mode_class[orig_srcmode]];
       srcmode != orig_srcmode;
       srcmode = mode_wider[srcmode])
    {
      enum insn_code ic;
      rtx trunc_y, last_insn;
      ic = can_extend_p (dstmode, srcmode, 0);
      if (ic == CODE_FOR_nothing)
 continue;
      if (! exact_real_truncate (srcmode, &r))
 continue;
      trunc_y = const_double_from_real_value (r, srcmode);
      if (legitimate_constant_p (trunc_y))
 {
   if (! (*insn_data[ic].operand[1].predicate) (trunc_y, srcmode))
     continue;
 }
      else if (float_extend_from_mem[dstmode][srcmode])
 trunc_y = validize_mem (force_const_mem (srcmode, trunc_y));
      else
 continue;
      emit_unop_insn (ic, x, trunc_y, UNKNOWN);
      last_insn = get_last_insn ();
      if ((((enum rtx_code) (x)->code) == REG))
 set_unique_reg_note (last_insn, REG_EQUAL, y);
      return last_insn;
    }
  return (rtx) 0;
}
rtx
push_block (rtx size, int extra, int below)
{
  rtx temp;
  size = convert_modes ((0 ? DImode : SImode), ptr_mode, size, 1);
  if (((rtx_class[(int) (((enum rtx_code) (size)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (size)->code) == CONST_VECTOR))
    anti_adjust_stack (plus_constant_wide ((size), (long) (extra)));
  else if ((((enum rtx_code) (size)->code) == REG) && extra == 0)
    anti_adjust_stack (size);
  else
    {
      temp = copy_to_mode_reg ((0 ? DImode : SImode), size);
      if (extra != 0)
 temp = expand_binop ((0 ? DImode : SImode), (optab_table[OTI_add]), temp, gen_rtx_CONST_INT (VOIDmode, (long) (extra)),
        temp, 0, OPTAB_LIB_WIDEN);
      anti_adjust_stack (temp);
    }
  if (1)
    {
      temp = (global_rtl[GR_VIRTUAL_OUTGOING_ARGS]);
      if (extra != 0 && below)
 temp = plus_constant_wide ((temp), (long) (extra));
    }
  else
    {
      if (((enum rtx_code) (size)->code) == CONST_INT)
 temp = plus_constant_wide (((global_rtl[GR_VIRTUAL_OUTGOING_ARGS])), (long) (-((size)->u.hwint[0]) - (below ? 0 : extra)))
                                              ;
      else if (extra != 0 && !below)
 temp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_VIRTUAL_OUTGOING_ARGS])), (negate_rtx ((0 ? DImode : SImode), plus_constant_wide ((size), (long) (extra)))))
                                                        ;
      else
 temp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_VIRTUAL_OUTGOING_ARGS])), (negate_rtx ((0 ? DImode : SImode), size)))
                                 ;
    }
  return memory_address (class_narrowest_mode[MODE_INT], temp);
}
static void
emit_single_push_insn (enum machine_mode mode, rtx x, tree type)
{
  rtx dest_addr;
  unsigned rounded_size = (0 ? (((((unsigned short) mode_size[mode])) + 7) & (-8)) : (((((unsigned short) mode_size[mode])) + 1) & (-2)));
  rtx dest;
  enum insn_code icode;
  insn_operand_predicate_fn pred;
  (cfun->expr->x_stack_pointer_delta) += (0 ? (((((unsigned short) mode_size[mode])) + 7) & (-8)) : (((((unsigned short) mode_size[mode])) + 1) & (-2)));
  icode = (optab_table[OTI_push])->handlers[(int) mode].insn_code;
  if (icode != CODE_FOR_nothing)
    {
      if (((pred = insn_data[(int) icode].operand[0].predicate)
    && !((*pred) (x, mode))))
 x = force_reg (mode, x);
      emit_insn ((insn_data[icode].genfun) (x));
      return;
    }
  if (((unsigned short) mode_size[mode]) == rounded_size)
    dest_addr = gen_rtx_fmt_e (PRE_DEC, (0 ? DImode : SImode), (global_rtl[GR_STACK_POINTER]));
  else if ((! 0 ? upward : ((((mode)) == BLKmode ? (((type)) && ((enum tree_code) ((((type))->type.size))->common.code) == INTEGER_CST && int_size_in_bytes ((type)) < ((8 * (0 ? 8 : 4)) / 8)) : ((unsigned short) (((unsigned short) mode_size[(mode)]) * 8)) < (8 * (0 ? 8 : 4))) ? downward : upward)) == downward)
    {
      unsigned padding_size = rounded_size - ((unsigned short) mode_size[mode]);
      long offset;
      emit_move_insn ((global_rtl[GR_STACK_POINTER]),
        expand_binop ((0 ? DImode : SImode),
        (optab_table[OTI_sub]),
        (global_rtl[GR_STACK_POINTER]),
        gen_rtx_CONST_INT (VOIDmode, (long) (rounded_size)),
        (rtx) 0, 0, OPTAB_LIB_WIDEN));
      offset = (long) padding_size;
      if (PRE_DEC == POST_DEC)
 offset += (long) rounded_size;
      dest_addr = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])), (gen_rtx_CONST_INT (VOIDmode, (long) (offset))));
    }
  else
    {
      dest_addr = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])), (gen_rtx_CONST_INT (VOIDmode, (long) (-(long) rounded_size))))
                                            ;
      dest_addr = gen_rtx_fmt_ee (PRE_MODIFY, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])), (dest_addr));
    }
  dest = gen_rtx_MEM (mode, dest_addr);
  if (type != 0)
    {
      set_mem_attributes (dest, type, 1);
      if (flag_optimize_sibling_calls)
 set_mem_alias_set (dest, 0);
    }
  emit_move_insn (dest, x);
}
void
emit_push_insn (rtx x, enum machine_mode mode, tree type, rtx size,
  unsigned int align, int partial, rtx reg, int extra,
  rtx args_addr, rtx args_so_far, int reg_parm_stack_space,
  rtx alignment_pad)
{
  rtx xinner;
  enum direction stack_direction
    = downward;
  enum direction where_pad = (! 0 ? upward : ((((mode)) == BLKmode ? (((type)) && ((enum tree_code) ((((type))->type.size))->common.code) == INTEGER_CST && int_size_in_bytes ((type)) < ((8 * (0 ? 8 : 4)) / 8)) : ((unsigned short) (((unsigned short) mode_size[(mode)]) * 8)) < (8 * (0 ? 8 : 4))) ? downward : upward));
  if (PRE_DEC == POST_DEC)
    if (where_pad != none)
      where_pad = (where_pad == downward ? upward : downward);
  xinner = x = protect_from_queue (x, 0);
  if (mode == BLKmode)
    {
      rtx temp;
      int used = partial * (0 ? 8 : 4);
      int offset;
      int skip;
      if (reg && ((enum rtx_code) (reg)->code) == PARALLEL)
 {
   rtx elt = ((((((((reg)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1);
   used = partial * ((unsigned short) mode_size[((enum machine_mode) (elt)->mode)]);
   offset = used % ((8 * (0 ? 8 : 4)) / 8);
 }
      else
 offset = used % ((8 * (0 ? 8 : 4)) / 8);
      if (size == 0)
 abort ();
      used -= offset;
      if (partial != 0)
 xinner = adjust_address_1 (xinner, BLKmode, used, 1, 1);
      skip = (reg_parm_stack_space == 0) ? 0 : used;
      if (args_addr == 0
   && ((!(target_flags & 0x00000800)) && !(target_flags & 0x00001000))
   && ((enum rtx_code) (size)->code) == CONST_INT
   && skip == 0
   && ((((xinner)->u.fld[1]).rtmem) != 0 ? (((xinner)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (xinner)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (xinner)->mode)) : 8)) >= align
   && ((move_by_pieces_ninsns ((unsigned) ((size)->u.hwint[0]) - used, align) < (unsigned int) (optimize_size ? 3 : ix86_cost->move_ratio)))
   && ((! 0)
       || align >= 128
       || ((0 ? (((align / 8) + 7) & (-8)) : (((align / 8) + 1) & (-2)))
    == (align / 8)))
   && (0 ? (((((size)->u.hwint[0])) + 7) & (-8)) : (((((size)->u.hwint[0])) + 1) & (-2))) == ((size)->u.hwint[0]))
 {
   if (extra && args_addr == 0
       && where_pad != none && where_pad != stack_direction)
     anti_adjust_stack (gen_rtx_CONST_INT (VOIDmode, (long) (extra)));
   move_by_pieces (((void *)0), xinner, ((size)->u.hwint[0]) - used, align, 0);
 }
      else
 {
   rtx target;
   if (partial != 0)
     {
       if (((enum rtx_code) (size)->code) == CONST_INT)
  size = gen_rtx_CONST_INT (VOIDmode, (long) (((size)->u.hwint[0]) - used));
       else
  size = expand_binop (((enum machine_mode) (size)->mode), (optab_table[OTI_sub]), size,
         gen_rtx_CONST_INT (VOIDmode, (long) (used)), (rtx) 0, 0,
         OPTAB_LIB_WIDEN);
     }
   if (! args_addr)
     {
       temp = push_block (size, extra, where_pad == downward);
       extra = 0;
     }
   else if (((enum rtx_code) (args_so_far)->code) == CONST_INT)
     temp = memory_address (BLKmode,
       plus_constant_wide ((args_addr), (long) (skip + ((args_so_far)->u.hwint[0])))
                                    );
   else
     temp = memory_address (BLKmode,
       plus_constant_wide ((gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (args_addr), (args_so_far))), (long) (skip))
             );
   if (!(target_flags & 0x00001000))
     {
       if (reg_mentioned_p ((global_rtl[GR_VIRTUAL_STACK_DYNAMIC]), temp)
    || reg_mentioned_p ((global_rtl[GR_VIRTUAL_OUTGOING_ARGS]), temp))
  temp = copy_to_reg (temp);
     }
   target = gen_rtx_MEM (BLKmode, temp);
   if (type != 0)
     {
       set_mem_attributes (target, type, 1);
       set_mem_alias_set (target, 0);
     }
   set_mem_align (target, align);
   emit_block_move (target, xinner, size, BLOCK_OP_CALL_PARM);
 }
    }
  else if (partial > 0)
    {
      int size = ((unsigned short) mode_size[mode]) / (0 ? 8 : 4);
      int i;
      int not_stack;
      int offset = partial % ((8 * (0 ? 8 : 4)) / (8 * (0 ? 8 : 4)));
      int args_offset = ((args_so_far)->u.hwint[0]);
      int skip;
      if (extra && args_addr == 0
   && where_pad != none && where_pad != stack_direction)
 anti_adjust_stack (gen_rtx_CONST_INT (VOIDmode, (long) (extra)));
      if (args_addr == 0)
 offset = 0;
      not_stack = partial - offset;
      skip = (reg_parm_stack_space == 0) ? 0 : not_stack;
      if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR) && ! legitimate_constant_p (x))
 x = validize_mem (force_const_mem (mode, x));
      if (((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) < 53
    && mode_class[((enum machine_mode) (x)->mode)] != MODE_INT))
 x = copy_to_reg (x);
      for (i = size - 1; i >= not_stack; i--)
 if (i >= not_stack + offset)
   emit_push_insn (operand_subword_force (x, i, mode),
     word_mode, (tree) ((void *)0), (rtx) 0, align, 0, (rtx) 0,
     0, args_addr,
     gen_rtx_CONST_INT (VOIDmode, (long) (args_offset + ((i - not_stack + skip) * (0 ? 8 : 4))))
                          ,
     reg_parm_stack_space, alignment_pad);
    }
  else
    {
      rtx addr;
      rtx dest;
      if (extra && args_addr == 0
   && where_pad != none && where_pad != stack_direction)
 anti_adjust_stack (gen_rtx_CONST_INT (VOIDmode, (long) (extra)));
      if (args_addr == 0 && ((!(target_flags & 0x00000800)) && !(target_flags & 0x00001000)))
 emit_single_push_insn (mode, x, type);
      else
 {
   if (((enum rtx_code) (args_so_far)->code) == CONST_INT)
     addr
       = memory_address (mode,
    plus_constant_wide ((args_addr), (long) (((args_so_far)->u.hwint[0])))
                                 );
   else
     addr = memory_address (mode, gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (args_addr), (args_so_far))
                         );
   dest = gen_rtx_MEM (mode, addr);
   if (type != 0)
     {
       set_mem_attributes (dest, type, 1);
       set_mem_alias_set (dest, 0);
     }
   emit_move_insn (dest, x);
 }
    }
  if (partial > 0 && reg != 0)
    {
      if (((enum rtx_code) (reg)->code) == PARALLEL)
 emit_group_load (reg, x, type, -1);
      else
 move_block_to_reg ((((reg)->u.fld[0]).rtuint), x, partial, mode);
    }
  if (extra && args_addr == 0 && where_pad == stack_direction)
    anti_adjust_stack (gen_rtx_CONST_INT (VOIDmode, (long) (extra)));
  if (alignment_pad && args_addr == 0)
    anti_adjust_stack (alignment_pad);
}
static rtx
get_subtarget (rtx x)
{
  return ((x == 0
    || !(((enum rtx_code) (x)->code) == REG)
    || (((x))->unchanging)
    || (((x)->u.fld[0]).rtuint) < 53
    || preserve_subexpressions_p ())
   ? 0 : x);
}
rtx
expand_assignment (tree to, tree from, int want_value)
{
  rtx to_rtx = 0;
  rtx result;
  if (((enum tree_code) (to)->common.code) == ERROR_MARK)
    {
      result = expand_expr (from, (rtx) 0, VOIDmode, 0);
      return want_value ? result : (rtx) 0;
    }
  if (((enum tree_code) (to)->common.code) == COMPONENT_REF || ((enum tree_code) (to)->common.code) == BIT_FIELD_REF
      || ((enum tree_code) (to)->common.code) == ARRAY_REF || ((enum tree_code) (to)->common.code) == ARRAY_RANGE_REF
      || ((enum tree_code) (((to)->common.type))->common.code) == ARRAY_TYPE)
    {
      enum machine_mode mode1;
      long bitsize, bitpos;
      rtx orig_to_rtx;
      tree offset;
      int unsignedp;
      int volatilep = 0;
      tree tem;
      push_temp_slots ();
      tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1,
     &unsignedp, &volatilep);
      if (mode1 == VOIDmode && want_value)
 tem = stabilize_reference (tem);
      orig_to_rtx = to_rtx = expand_expr (tem, (rtx) 0, VOIDmode, 0);
      if (offset != 0)
 {
   rtx offset_rtx = expand_expr (offset, (rtx) 0, VOIDmode, EXPAND_SUM);
   if (!(((enum rtx_code) (to_rtx)->code) == MEM))
     abort ();
   if (((enum machine_mode) (offset_rtx)->mode) != ptr_mode)
     offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0);
   if ((((enum rtx_code) (to_rtx)->code) == MEM)
       && ((enum machine_mode) (to_rtx)->mode) == BLKmode
       && ((enum machine_mode) ((((to_rtx)->u.fld[0]).rtx1))->mode) != VOIDmode
       && bitsize > 0
       && (bitpos % bitsize) == 0
       && (bitsize % get_mode_alignment (mode1)) == 0
       && ((((to_rtx)->u.fld[1]).rtmem) != 0 ? (((to_rtx)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (to_rtx)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (to_rtx)->mode)) : 8)) == get_mode_alignment (mode1))
     {
       to_rtx = adjust_address_1 (to_rtx, mode1, bitpos / 8, 1, 1);
       bitpos = 0;
     }
   to_rtx = offset_address (to_rtx, offset_rtx,
       highest_pow2_factor_for_target (to,
              offset));
 }
      if ((((enum rtx_code) (to_rtx)->code) == MEM))
 {
   to_rtx = shallow_copy_rtx_stat (to_rtx );
   set_mem_attributes_minus_bitpos (to_rtx, to, 0, bitpos);
 }
      if (volatilep && (((enum rtx_code) (to_rtx)->code) == MEM))
 {
   if (to_rtx == orig_to_rtx)
     to_rtx = copy_rtx (to_rtx);
   (((to_rtx))->volatil) = 1;
 }
      if (((enum tree_code) (to)->common.code) == COMPONENT_REF
   && ((((to)->exp.operands[1]))->common.readonly_flag)
   && ! ((((enum rtx_code) (to_rtx)->code) == MEM) && ! can_address_p (to)))
 {
   if (to_rtx == orig_to_rtx)
     to_rtx = copy_rtx (to_rtx);
   (((to_rtx))->unchanging) = 1;
 }
      if ((((enum rtx_code) (to_rtx)->code) == MEM) && ! can_address_p (to))
 {
   if (to_rtx == orig_to_rtx)
     to_rtx = copy_rtx (to_rtx);
   (((to_rtx))->jump) = 1;
 }
      while (0 && mode1 == VOIDmode && !want_value
      && bitpos + bitsize <= (8 * (0 ? 8 : 4))
      && bitsize < (8 * (0 ? 8 : 4))
      && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (to_rtx)->mode)]) * 8)) <= (8 * (0 ? 8 : 4))
      && !((to)->common.side_effects_flag)
      && !((to)->common.volatile_flag))
 {
   tree src, op0, op1;
   rtx value1;
   long count = bitpos;
   optab binop;
   src = from;
   while ((((enum tree_code) (src)->common.code) == NOP_EXPR || ((enum tree_code) (src)->common.code) == CONVERT_EXPR || ((enum tree_code) (src)->common.code) == NON_LVALUE_EXPR) && ((src)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((src)->common.type))->type.mode) == ((((((src)->exp.operands[0]))->common.type))->type.mode))) (src) = ((src)->exp.operands[0]);
   if (((enum tree_code) (((src)->common.type))->common.code) != INTEGER_TYPE
       || tree_code_type[(int) (((enum tree_code) (src)->common.code))] != '2')
     break;
   op0 = ((src)->exp.operands[0]);
   op1 = ((src)->exp.operands[1]);
   while ((((enum tree_code) (op0)->common.code) == NOP_EXPR || ((enum tree_code) (op0)->common.code) == CONVERT_EXPR || ((enum tree_code) (op0)->common.code) == NON_LVALUE_EXPR) && ((op0)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((op0)->common.type))->type.mode) == ((((((op0)->exp.operands[0]))->common.type))->type.mode))) (op0) = ((op0)->exp.operands[0]);
   if (! operand_equal_p (to, op0, 0))
     break;
   if (0)
     count = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (to_rtx)->mode)]) * 8)) - bitpos - bitsize;
   switch (((enum tree_code) (src)->common.code))
     {
     case PLUS_EXPR:
     case MINUS_EXPR:
       if (count <= 0)
         break;
       if (count + bitsize != ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (to_rtx)->mode)]) * 8))
    && (bitsize != 1 || ((enum tree_code) (op1)->common.code) != INTEGER_CST))
  break;
       value1 = expand_expr (op1, (rtx) 0, VOIDmode, 0);
       value1 = protect_from_queue (value1, 0);
       to_rtx = protect_from_queue (to_rtx, 1);
       binop = ((enum tree_code) (src)->common.code) == PLUS_EXPR ? (optab_table[OTI_add]) : (optab_table[OTI_sub]);
       if (bitsize == 1
    && count + bitsize != ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (to_rtx)->mode)]) * 8)))
  {
    value1 = expand_and (((enum machine_mode) (to_rtx)->mode), value1, (const_int_rtx[64 +1]),
          (rtx) 0);
    binop = (optab_table[OTI_xor]);
  }
       value1 = expand_shift (LSHIFT_EXPR, ((enum machine_mode) (to_rtx)->mode),
        value1, build_int_2_wide ((unsigned long) (count), (long) (0)),
        (rtx) 0, 1);
       result = expand_binop (((enum machine_mode) (to_rtx)->mode), binop, to_rtx,
         value1, to_rtx, 1, OPTAB_WIDEN);
       if (result != to_rtx)
  emit_move_insn (to_rtx, result);
       free_temp_slots ();
       pop_temp_slots ();
       return (rtx) 0;
     default:
       break;
     }
   break;
 }
      result = store_field (to_rtx, bitsize, bitpos, mode1, from,
       (want_value
        ? ((enum machine_mode)
    ((((to)->common.type))->type.mode))
        : VOIDmode),
       unsignedp, ((tem)->common.type), get_alias_set (to));
      preserve_temp_slots (result);
      free_temp_slots ();
      pop_temp_slots ();
      return (want_value ? convert_modes (((((to)->common.type))->type.mode),
       ((((from)->common.type))->type.mode),
       result,
       ((((to)->common.type))->common.unsigned_flag))
       : (rtx) 0);
    }
  if (((enum tree_code) (from)->common.code) == CALL_EXPR && ! aggregate_value_p (from, from)
      && ((enum tree_code) (((((from)->common.type))->type.size))->common.code) == INTEGER_CST
      && ! ((((enum tree_code) (to)->common.code) == VAR_DECL || ((enum tree_code) (to)->common.code) == PARM_DECL)
     && (((enum rtx_code) (((to)->decl.rtl ? (to)->decl.rtl : (make_decl_rtl (to, ((void *)0)), (to)->decl.rtl)))->code) == REG)))
    {
      rtx value1;
      push_temp_slots ();
      value1 = expand_expr (from, (rtx) 0, VOIDmode, 0);
      if (to_rtx == 0)
 to_rtx = expand_expr (to, (rtx) 0, VOIDmode, EXPAND_WRITE);
      if (((enum rtx_code) (to_rtx)->code) == PARALLEL)
 emit_group_load (to_rtx, value1, ((from)->common.type),
    int_size_in_bytes (((from)->common.type)));
      else if (((enum machine_mode) (to_rtx)->mode) == BLKmode)
 emit_block_move (to_rtx, value1, expr_size (from), BLOCK_OP_NORMAL);
      else
 {
   if ((((enum tree_code) (((to)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((to)->common.type))->common.code) == REFERENCE_TYPE))
     value1 = convert_memory_address (((enum machine_mode) (to_rtx)->mode), value1);
   emit_move_insn (to_rtx, value1);
 }
      preserve_temp_slots (to_rtx);
      free_temp_slots ();
      pop_temp_slots ();
      return want_value ? to_rtx : (rtx) 0;
    }
  if (to_rtx == 0)
    to_rtx = expand_expr (to, (rtx) 0, VOIDmode, EXPAND_WRITE);
  if (((enum tree_code) (to)->common.code) == RESULT_DECL
      && ((((enum rtx_code) (to_rtx)->code) == REG) || ((enum rtx_code) (to_rtx)->code) == PARALLEL))
    {
      rtx temp;
      push_temp_slots ();
      temp = expand_expr (from, 0, ((enum machine_mode) (to_rtx)->mode), 0);
      if (((enum rtx_code) (to_rtx)->code) == PARALLEL)
 emit_group_load (to_rtx, temp, ((from)->common.type),
    int_size_in_bytes (((from)->common.type)));
      else
 emit_move_insn (to_rtx, temp);
      preserve_temp_slots (to_rtx);
      free_temp_slots ();
      pop_temp_slots ();
      return want_value ? to_rtx : (rtx) 0;
    }
  if (((enum tree_code) (to)->common.code) == RESULT_DECL && ((enum tree_code) (from)->common.code) == INDIRECT_REF
      && (cfun->returns_struct)
      && !(cfun->returns_pcc_struct))
    {
      rtx from_rtx, size;
      push_temp_slots ();
      size = expr_size (from);
      from_rtx = expand_expr (from, (rtx) 0, VOIDmode, 0);
      emit_library_call ((libfunc_table[LTI_memmove]), LCT_NORMAL,
    VOIDmode, 3, (((to_rtx)->u.fld[0]).rtx1), (0 ? DImode : SImode),
    (((from_rtx)->u.fld[0]).rtx1), (0 ? DImode : SImode),
    convert_to_mode (((sizetype_tab[(int) SIZETYPE])->type.mode),
       size, ((sizetype_tab[(int) SIZETYPE])->common.unsigned_flag)),
    ((sizetype_tab[(int) SIZETYPE])->type.mode));
      preserve_temp_slots (to_rtx);
      free_temp_slots ();
      pop_temp_slots ();
      return want_value ? to_rtx : (rtx) 0;
    }
  push_temp_slots ();
  result = store_expr (from, to_rtx, want_value);
  preserve_temp_slots (result);
  free_temp_slots ();
  pop_temp_slots ();
  return want_value ? result : (rtx) 0;
}
rtx
store_expr (tree exp, rtx target, int want_value)
{
  rtx temp;
  rtx alt_rtl = (rtx) 0;
  rtx mark = mark_queue ();
  int dont_return_target = 0;
  int dont_store_target = 0;
  if ((((enum tree_code) (((exp)->common.type))->common.code) == VOID_TYPE))
    {
      if (want_value)
 abort ();
      expand_expr (exp, (const_int_rtx[64]), VOIDmode, 0);
      return (rtx) 0;
    }
  if (((enum tree_code) (exp)->common.code) == COMPOUND_EXPR)
    {
      expand_expr (((exp)->exp.operands[0]), (const_int_rtx[64]), VOIDmode,
     want_value & 2 ? EXPAND_STACK_PARM : EXPAND_NORMAL);
      emit_queue ();
      return store_expr (((exp)->exp.operands[1]), target, want_value);
    }
  else if (((enum tree_code) (exp)->common.code) == COND_EXPR && ((enum machine_mode) (target)->mode) == BLKmode)
    {
      rtx lab1 = gen_label_rtx (), lab2 = gen_label_rtx ();
      emit_queue ();
      target = protect_from_queue (target, 1);
      do_pending_stack_adjust ();
      ((cfun->expr->x_inhibit_defer_pop) += 1);
      jumpifnot (((exp)->exp.operands[0]), lab1);
      start_cleanup_deferral ();
      store_expr (((exp)->exp.operands[1]), target, want_value & 2);
      end_cleanup_deferral ();
      emit_queue ();
      emit_jump_insn (gen_jump (lab2));
      emit_barrier ();
      emit_label (lab1);
      start_cleanup_deferral ();
      store_expr (((exp)->exp.operands[2]), target, want_value & 2);
      end_cleanup_deferral ();
      emit_queue ();
      emit_label (lab2);
      ((cfun->expr->x_inhibit_defer_pop) -= 1);
      return want_value & 1 ? target : (rtx) 0;
    }
  else if (queued_subexp_p (target))
    {
      if (((enum machine_mode) (target)->mode) != BLKmode && ((enum machine_mode) (target)->mode) != VOIDmode)
 {
   temp = gen_reg_rtx (((enum machine_mode) (target)->mode));
   temp = expand_expr (exp, temp, ((enum machine_mode) (target)->mode),
         (want_value & 2
          ? EXPAND_STACK_PARM : EXPAND_NORMAL));
 }
      else
 temp = expand_expr (exp, (rtx) 0, ((enum machine_mode) (target)->mode),
       (want_value & 2
        ? EXPAND_STACK_PARM : EXPAND_NORMAL));
      if (! (((target))->volatil) && (want_value & 1) != 0)
 dont_return_target = 1;
    }
  else if ((want_value & 1) != 0
    && (((enum rtx_code) (target)->code) == MEM)
    && ! (((target))->volatil)
    && ((enum machine_mode) (target)->mode) != BLKmode)
    {
      temp = expand_expr (exp, target, ((enum machine_mode) (target)->mode),
     want_value & 2 ? EXPAND_STACK_PARM : EXPAND_NORMAL);
      if (((enum machine_mode) (temp)->mode) != BLKmode && ((enum machine_mode) (temp)->mode) != VOIDmode)
 {
   if (temp == target
       || (rtx_equal_p (temp, target)
    && ! side_effects_p (temp) && ! side_effects_p (target)))
     dont_store_target = 1;
   temp = copy_to_reg (temp);
 }
      dont_return_target = 1;
    }
  else if (((enum rtx_code) (target)->code) == SUBREG && (((target))->in_struct))
    {
      rtx inner_target = 0;
      if ((want_value & 1) == 0
   && (((enum tree_code) (((exp)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((exp)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((exp)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((exp)->common.type))->common.code) == CHAR_TYPE)
   && ((((exp)->common.type))->common.type) == 0)
 {
   if (((((exp)->common.type))->common.unsigned_flag)
       != ((((target))->volatil) ? -1 : (target)->unchanging))
     exp = convert
       (lang_hooks.types.signed_or_unsigned_type
        (((((target))->volatil) ? -1 : (target)->unchanging), ((exp)->common.type)), exp);
   exp = convert (lang_hooks.types.type_for_mode
    (((enum machine_mode) ((((target)->u.fld[0]).rtx1))->mode),
     ((((target))->volatil) ? -1 : (target)->unchanging)),
    exp);
   inner_target = (((target)->u.fld[0]).rtx1);
 }
      temp = expand_expr (exp, inner_target, VOIDmode,
     want_value & 2 ? EXPAND_STACK_PARM : EXPAND_NORMAL);
      if ((((enum rtx_code) (temp)->code) == MEM) && (want_value & 1) != 0)
 temp = copy_to_reg (temp);
      if (((rtx_class[(int) (((enum rtx_code) (temp)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (temp)->code) == CONST_VECTOR) && ((enum machine_mode) (temp)->mode) == VOIDmode)
 {
   temp = convert_modes (((enum machine_mode) (target)->mode), ((((exp)->common.type))->type.mode),
    temp, ((((target))->volatil) ? -1 : (target)->unchanging));
   temp = convert_modes (((enum machine_mode) ((((target)->u.fld[0]).rtx1))->mode),
           ((enum machine_mode) (target)->mode), temp,
           ((((target))->volatil) ? -1 : (target)->unchanging));
 }
      convert_move ((((target)->u.fld[0]).rtx1), temp,
      ((((target))->volatil) ? -1 : (target)->unchanging));
      if ((want_value & 1) != 0 && ((enum machine_mode) (temp)->mode) != ((enum machine_mode) (target)->mode))
 {
   if (((enum machine_mode) (temp)->mode) != VOIDmode)
     {
       temp = gen_lowpart_SUBREG (((enum machine_mode) (target)->mode), temp);
       (((temp))->in_struct) = 1;
       do { rtx const _rtx = ((temp)); if ((((((target))->volatil) ? -1 : (target)->unchanging)) < 0) _rtx->volatil = 1; else { _rtx->volatil = 0; _rtx->unchanging = (((((target))->volatil) ? -1 : (target)->unchanging)); } } while (0)
                                      ;
     }
   else
     temp = convert_modes (((enum machine_mode) (target)->mode),
      ((enum machine_mode) ((((target)->u.fld[0]).rtx1))->mode),
      temp, ((((target))->volatil) ? -1 : (target)->unchanging));
 }
      return want_value & 1 ? temp : (rtx) 0;
    }
  else
    {
      temp = expand_expr_real (exp, target, ((enum machine_mode) (target)->mode),
          (want_value & 2
    ? EXPAND_STACK_PARM : EXPAND_NORMAL),
          &alt_rtl);
      if (!(target && (((enum rtx_code) (target)->code) == REG)
     && (((target)->u.fld[0]).rtuint) < 53)
   && !((((enum rtx_code) (target)->code) == MEM) && (((target))->volatil))
   && ! rtx_equal_p (temp, target)
   && (((rtx_class[(int) (((enum rtx_code) (temp)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (temp)->code) == CONST_VECTOR) || (want_value & 1) != 0))
 dont_return_target = 1;
    }
  if (((rtx_class[(int) (((enum rtx_code) (temp)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (temp)->code) == CONST_VECTOR) && ((enum machine_mode) (temp)->mode) == VOIDmode
      && ((enum tree_code) (exp)->common.code) != ERROR_MARK
      && ((enum machine_mode) (target)->mode) != ((((exp)->common.type))->type.mode))
    temp = convert_modes (((enum machine_mode) (target)->mode), ((((exp)->common.type))->type.mode),
     temp, ((((exp)->common.type))->common.unsigned_flag));
  if ((! rtx_equal_p (temp, target)
       || (temp != target && (side_effects_p (temp)
         || side_effects_p (target))))
      && ((enum tree_code) (exp)->common.code) != ERROR_MARK
      && ! dont_store_target
      && !(alt_rtl && rtx_equal_p (alt_rtl, target))
      && expr_size (exp) != (const_int_rtx[64]))
    {
      emit_insns_enqueued_after_mark (mark);
      target = protect_from_queue (target, 1);
      temp = protect_from_queue (temp, 0);
      if (((enum machine_mode) (temp)->mode) != ((enum machine_mode) (target)->mode)
   && ((enum machine_mode) (temp)->mode) != VOIDmode)
 {
   int unsignedp = ((((exp)->common.type))->common.unsigned_flag);
   if (dont_return_target)
     {
       temp = convert_to_mode (((enum machine_mode) (target)->mode), temp, unsignedp);
       emit_move_insn (target, temp);
     }
   else
     convert_move (target, temp, unsignedp);
 }
      else if (((enum machine_mode) (temp)->mode) == BLKmode && ((enum tree_code) (exp)->common.code) == STRING_CST)
 {
   rtx size = expr_size (exp);
   if (((enum rtx_code) (size)->code) == CONST_INT
       && ((size)->u.hwint[0]) < ((exp)->string1.length))
     emit_block_move (target, temp, size,
        (want_value & 2
         ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
   else
     {
       tree copy_size
  = size_binop (MIN_EXPR,
         make_tree (sizetype_tab[(int) SIZETYPE], size),
         size_int_wide ((long) (((exp)->string1.length)), SIZETYPE));
       rtx copy_size_rtx
  = expand_expr (copy_size, (rtx) 0, VOIDmode,
          (want_value & 2
    ? EXPAND_STACK_PARM : EXPAND_NORMAL));
       rtx label = 0;
       copy_size_rtx = convert_to_mode (ptr_mode, copy_size_rtx,
            ((sizetype_tab[(int) SIZETYPE])->common.unsigned_flag));
       emit_block_move (target, temp, copy_size_rtx,
          (want_value & 2
    ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
       if (((enum rtx_code) (copy_size_rtx)->code) == CONST_INT)
  {
    size = plus_constant_wide ((size), (long) (-((copy_size_rtx)->u.hwint[0])));
    target = adjust_address_1 (target, BLKmode, ((copy_size_rtx)->u.hwint[0]), 1, 1)
                               ;
  }
       else
  {
    size = expand_binop (((sizetype_tab[(int) SIZETYPE])->type.mode), (optab_table[OTI_sub]), size,
           copy_size_rtx, (rtx) 0, 0,
           OPTAB_LIB_WIDEN);
    target = offset_address (target, copy_size_rtx,
        highest_pow2_factor (copy_size));
    label = gen_label_rtx ();
    emit_cmp_and_jump_insns (size, (const_int_rtx[64]), LT, (rtx) 0,
        ((enum machine_mode) (size)->mode), 0, label);
  }
       if (size != (const_int_rtx[64]))
  clear_storage (target, size);
       if (label)
  emit_label (label);
     }
 }
      else if (((enum rtx_code) (target)->code) == PARALLEL)
 emit_group_load (target, temp, ((exp)->common.type),
    int_size_in_bytes (((exp)->common.type)));
      else if (((enum machine_mode) (temp)->mode) == BLKmode)
 emit_block_move (target, temp, expr_size (exp),
    (want_value & 2
     ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
      else
 {
   temp = force_operand (temp, target);
   if (temp != target)
     emit_move_insn (target, temp);
 }
    }
  if ((want_value & 1) == 0)
    return (rtx) 0;
  else if (dont_return_target && !(((enum rtx_code) (temp)->code) == MEM))
    return temp;
  else if ((want_value & 1) != 0
    && ((enum machine_mode) (target)->mode) != BLKmode
    && ! ((((enum rtx_code) (target)->code) == REG)
   && (((target)->u.fld[0]).rtuint) < 53))
    return copy_to_reg (target);
  else
    return target;
}
static void
categorize_ctor_elements_1 (tree ctor, long *p_nz_elts,
       long *p_nc_elts)
{
  long nz_elts, nc_elts;
  tree list;
  nz_elts = 0;
  nc_elts = 0;
  for (list = ((ctor)->exp.operands[0]); list; list = ((list)->common.chain))
    {
      tree value1 = ((list)->list.value1);
      tree purpose = ((list)->list.purpose);
      long mult;
      mult = 1;
      if (((enum tree_code) (purpose)->common.code) == RANGE_EXPR)
 {
   tree lo_index = ((purpose)->exp.operands[0]);
   tree hi_index = ((purpose)->exp.operands[1]);
   if (host_integerp (lo_index, 1) && host_integerp (hi_index, 1))
     mult = (tree_low_cst (hi_index, 1)
      - tree_low_cst (lo_index, 1) + 1);
 }
      switch (((enum tree_code) (value1)->common.code))
 {
 case CONSTRUCTOR:
   {
     long nz = 0, nc = 0;
     categorize_ctor_elements_1 (value1, &nz, &nc);
     nz_elts += mult * nz;
     nc_elts += mult * nc;
   }
   break;
 case INTEGER_CST:
 case REAL_CST:
   if (!initializer_zerop (value1))
     nz_elts += mult;
   break;
 case COMPLEX_CST:
   if (!initializer_zerop (((value1)->complex.real)))
     nz_elts += mult;
   if (!initializer_zerop (((value1)->complex.imag)))
     nz_elts += mult;
   break;
 case VECTOR_CST:
   {
     tree v;
     for (v = ((value1)->vector.elements); v; v = ((v)->common.chain))
       if (!initializer_zerop (((v)->list.value1)))
         nz_elts += mult;
   }
   break;
 default:
   nz_elts += mult;
   if (!initializer_constant_valid_p (value1, ((value1)->common.type)))
     nc_elts += mult;
   break;
 }
    }
  *p_nz_elts += nz_elts;
  *p_nc_elts += nc_elts;
}
void
categorize_ctor_elements (tree ctor, long *p_nz_elts,
     long *p_nc_elts)
{
  *p_nz_elts = 0;
  *p_nc_elts = 0;
  categorize_ctor_elements_1 (ctor, p_nz_elts, p_nc_elts);
}
long
count_type_elements (tree type)
{
  const long max = ~((long)1 << ((8 * 4)-1));
  switch (((enum tree_code) (type)->common.code))
    {
    case ARRAY_TYPE:
      {
 tree telts = array_type_nelts (type);
 if (telts && host_integerp (telts, 1))
   {
     long n = tree_low_cst (telts, 1) + 1;
     long m = count_type_elements (((type)->common.type));
     if (n == 0)
       return 0;
     else if (max / n > m)
       return n * m;
   }
 return -1;
      }
    case RECORD_TYPE:
      {
 long n = 0, t;
 tree f;
 for (f = ((type)->type.value1s); f ; f = ((f)->common.chain))
   if (((enum tree_code) (f)->common.code) == FIELD_DECL)
     {
       t = count_type_elements (((f)->common.type));
       if (t < 0)
  return -1;
       n += t;
     }
 return n;
      }
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      {
        long n = int_size_in_bytes (type);
 if (n < 0)
   return -1;
 return n / (0 ? 8 : 4);
      }
    case COMPLEX_TYPE:
      return 2;
    case VECTOR_TYPE:
      return mode_nunits[((type)->type.mode)];
    case INTEGER_TYPE:
    case REAL_TYPE:
    case ENUMERAL_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
    case POINTER_TYPE:
    case OFFSET_TYPE:
    case REFERENCE_TYPE:
      return 1;
    case VOID_TYPE:
    case METHOD_TYPE:
    case FILE_TYPE:
    case SET_TYPE:
    case FUNCTION_TYPE:
    case LANG_TYPE:
    default:
      abort ();
    }
}
int
mostly_zeros_p (tree exp)
{
  if (((enum tree_code) (exp)->common.code) == CONSTRUCTOR)
    {
      long nz_elts, nc_elts, elts;
      if (((exp)->common.type) && ((enum tree_code) (((exp)->common.type))->common.code) == SET_TYPE)
 return ((exp)->exp.operands[0]) == (tree) ((void *)0);
      categorize_ctor_elements (exp, &nz_elts, &nc_elts);
      elts = count_type_elements (((exp)->common.type));
      return nz_elts < elts / 4;
    }
  return initializer_zerop (exp);
}
static void
store_constructor_field (rtx target, unsigned long bitsize,
    long bitpos, enum machine_mode mode,
    tree exp, tree type, int cleared, int alias_set)
{
  if (((enum tree_code) (exp)->common.code) == CONSTRUCTOR
      && bitpos % 8 == 0
      && (bitsize > 0 && bitsize % 8 == 0)
      && (bitpos == 0 || (((enum rtx_code) (target)->code) == MEM)))
    {
      if ((((enum rtx_code) (target)->code) == MEM))
 target
   = adjust_address_1 (target, ((enum machine_mode) (target)->mode) == BLKmode || 0 != (bitpos % get_mode_alignment (((enum machine_mode) (target)->mode))) ? BLKmode : VOIDmode, bitpos / 8, 1, 1)
                                                    ;
      if ((((enum rtx_code) (target)->code) == MEM) && ! (((target))->jump)
   && ((((target)->u.fld[1]).rtmem) == 0 ? 0 : (((target)->u.fld[1]).rtmem)->alias) != 0)
 {
   target = copy_rtx (target);
   set_mem_alias_set (target, alias_set);
 }
      store_constructor (exp, target, cleared, bitsize / 8);
    }
  else
    store_field (target, bitsize, bitpos, mode, exp, VOIDmode, 0, type,
   alias_set);
}
static void
store_constructor (tree exp, rtx target, int cleared, long size)
{
  tree type = ((exp)->common.type);
  if (((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE
      || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE)
    {
      tree elt;
      if (size == 0 || cleared)
 cleared = 1;
      else if ((((enum tree_code) (type)->common.code) == UNION_TYPE
  || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE)
        && ! ((exp)->exp.operands[0]))
 {
   clear_storage (target, expr_size (exp));
   cleared = 1;
 }
      else if ((((enum rtx_code) (target)->code) == REG) && ((exp)->common.static_flag)
        && ((unsigned short) mode_size[((enum machine_mode) (target)->mode)]) <= (0 ? 8 : 4))
 {
   emit_move_insn (target, (const_tiny_rtx[0][(int) (((enum machine_mode) (target)->mode))]));
   cleared = 1;
 }
      else if (size > 0
        && ((list_length (((exp)->exp.operands[0])) != fields_length (type))
     || mostly_zeros_p (exp))
        && (!(((enum rtx_code) (target)->code) == REG)
     || ((long) ((unsigned short) mode_size[((enum machine_mode) (target)->mode)])
         == size)))
 {
   rtx xtarget = target;
   if (readonly_fields_p (type))
     {
       xtarget = copy_rtx (xtarget);
       (((xtarget))->unchanging) = 1;
     }
   clear_storage (xtarget, gen_rtx_CONST_INT (VOIDmode, (long) (size)));
   cleared = 1;
 }
      if (! cleared)
 emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (target)));
      for (elt = ((exp)->exp.operands[0]); elt; elt = ((elt)->common.chain))
 {
   tree field = ((elt)->list.purpose);
   tree value1 = ((elt)->list.value1);
   enum machine_mode mode;
   long bitsize;
   long bitpos = 0;
   tree offset;
   rtx to_rtx = target;
   if (field == 0)
     continue;
   if (cleared && initializer_zerop (value1))
     continue;
   if (host_integerp (((field)->decl.size), 1))
     bitsize = tree_low_cst (((field)->decl.size), 1);
   else
     bitsize = -1;
   mode = ((field)->decl.mode);
   if (((field)->decl.bit_field_flag))
     mode = VOIDmode;
   offset = ((field)->decl.arguments);
   if (host_integerp (offset, 0)
       && host_integerp (bit_position (field), 0))
     {
       bitpos = int_bit_position (field);
       offset = 0;
     }
   else
     bitpos = tree_low_cst (((field)->decl.u2.t), 0);
   if (offset)
     {
       rtx offset_rtx;
       offset
  = ((offset) == 0 || ((offset)->common.constant_flag) ? (offset) : substitute_placeholder_in_expr (offset, make_tree (((exp)->common.type), target)))
                    ;
       offset_rtx = expand_expr (offset, (rtx) 0, VOIDmode, 0);
       if (!(((enum rtx_code) (to_rtx)->code) == MEM))
  abort ();
       if (((enum machine_mode) (offset_rtx)->mode) != ptr_mode)
  offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0);
       to_rtx = offset_address (to_rtx, offset_rtx,
           highest_pow2_factor (offset));
     }
   if (((field)->common.readonly_flag))
     {
       if ((((enum rtx_code) (to_rtx)->code) == MEM))
  to_rtx = copy_rtx (to_rtx);
       (((to_rtx))->unchanging) = 1;
     }
   if ((((enum rtx_code) (to_rtx)->code) == MEM) && !(((to_rtx))->jump)
       && ((field)->decl.non_addressable))
     {
       to_rtx = copy_rtx (to_rtx);
       (((to_rtx))->jump) = 1;
     }
   store_constructor_field (to_rtx, bitsize, bitpos, mode,
       value1, type, cleared,
       get_alias_set (((field)->common.type)));
 }
    }
  else if (((enum tree_code) (type)->common.code) == ARRAY_TYPE
    || ((enum tree_code) (type)->common.code) == VECTOR_TYPE)
    {
      tree elt;
      int i;
      int need_to_clear;
      tree domain;
      tree elttype = ((type)->common.type);
      int const_bounds_p;
      long minelt = 0;
      long maxelt = 0;
      int icode = 0;
      rtx *vector = ((void *)0);
      int elt_size = 0;
      unsigned n_elts = 0;
      if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
 domain = ((type)->type.value1s);
      else
 {
   domain = ((type)->type.value1s);
   domain = ((((((domain)->type.value1s))->common.type))->type.value1s);
   if ((((enum rtx_code) (target)->code) == REG) && (mode_class[((enum machine_mode) (target)->mode)] == MODE_VECTOR_INT || mode_class[((enum machine_mode) (target)->mode)] == MODE_VECTOR_FLOAT))
     {
       enum machine_mode mode = ((enum machine_mode) (target)->mode);
       icode = (int) (optab_table[OTI_vec_init])->handlers[mode].insn_code;
       if (icode != CODE_FOR_nothing)
  {
    unsigned int i;
    elt_size = ((unsigned short) mode_size[mode_inner[mode]]);
    n_elts = (((unsigned short) mode_size[mode]) / elt_size);
    vector = C_alloca(n_elts);
    for (i = 0; i < n_elts; i++)
      vector [i] = (const_tiny_rtx[0][(int) (mode_inner[mode])]);
  }
     }
 }
      const_bounds_p = (((domain)->type.minval)
   && ((domain)->type.maxval)
   && host_integerp (((domain)->type.minval), 0)
   && host_integerp (((domain)->type.maxval), 0));
      if (const_bounds_p)
 {
   minelt = tree_low_cst (((domain)->type.minval), 0);
   maxelt = tree_low_cst (((domain)->type.maxval), 0);
 }
      if (cleared || ((((enum rtx_code) (target)->code) == REG) && ((exp)->common.static_flag)))
 need_to_clear = 1;
      else
 {
   long count = 0, zero_count = 0;
   need_to_clear = ! const_bounds_p;
   for (elt = ((exp)->exp.operands[0]);
        elt != (tree) ((void *)0) && ! need_to_clear;
        elt = ((elt)->common.chain))
     {
       tree index = ((elt)->list.purpose);
       long this_node_count;
       if (index != (tree) ((void *)0) && ((enum tree_code) (index)->common.code) == RANGE_EXPR)
  {
    tree lo_index = ((index)->exp.operands[0]);
    tree hi_index = ((index)->exp.operands[1]);
    if (! host_integerp (lo_index, 1)
        || ! host_integerp (hi_index, 1))
      {
        need_to_clear = 1;
        break;
      }
    this_node_count = (tree_low_cst (hi_index, 1)
         - tree_low_cst (lo_index, 1) + 1);
  }
       else
  this_node_count = 1;
       count += this_node_count;
       if (mostly_zeros_p (((elt)->list.value1)))
  zero_count += this_node_count;
     }
   if (! need_to_clear
       && (count < maxelt - minelt + 1 || 4 * zero_count >= 3 * count))
     need_to_clear = 1;
 }
      if (need_to_clear && size > 0 && !vector)
 {
   if (! cleared)
     {
       if ((((enum rtx_code) (target)->code) == REG))
  emit_move_insn (target, (const_tiny_rtx[0][(int) (((enum machine_mode) (target)->mode))]));
       else
  clear_storage (target, gen_rtx_CONST_INT (VOIDmode, (long) (size)));
     }
   cleared = 1;
 }
      else if ((((enum rtx_code) (target)->code) == REG))
 emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (target)));
      for (elt = ((exp)->exp.operands[0]), i = 0;
    elt;
    elt = ((elt)->common.chain), i++)
 {
   enum machine_mode mode;
   long bitsize;
   long bitpos;
   int unsignedp;
   tree value1 = ((elt)->list.value1);
   tree index = ((elt)->list.purpose);
   rtx xtarget = target;
   if (cleared && initializer_zerop (value1))
     continue;
   unsignedp = ((elttype)->common.unsigned_flag);
   mode = ((elttype)->type.mode);
   if (mode == BLKmode)
     bitsize = (host_integerp (((elttype)->type.size), 1)
         ? tree_low_cst (((elttype)->type.size), 1)
         : -1);
   else
     bitsize = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
   if (index != (tree) ((void *)0) && ((enum tree_code) (index)->common.code) == RANGE_EXPR)
     {
       tree lo_index = ((index)->exp.operands[0]);
       tree hi_index = ((index)->exp.operands[1]);
       rtx index_r, pos_rtx;
       long lo, hi, count;
       tree position;
       if (vector)
  abort ();
       if (const_bounds_p
    && host_integerp (lo_index, 0)
    && host_integerp (hi_index, 0)
    && (lo = tree_low_cst (lo_index, 0),
        hi = tree_low_cst (hi_index, 0),
        count = hi - lo + 1,
        (!(((enum rtx_code) (target)->code) == MEM)
         || count <= 2
         || (host_integerp (((elttype)->type.size), 1)
      && (tree_low_cst (((elttype)->type.size), 1) * count
          <= 40 * 8)))))
  {
    lo -= minelt; hi -= minelt;
    for (; lo <= hi; lo++)
      {
        bitpos = lo * tree_low_cst (((elttype)->type.size), 0);
        if ((((enum rtx_code) (target)->code) == MEM)
     && !(((target))->jump)
     && ((enum tree_code) (type)->common.code) == ARRAY_TYPE
     && ((type)->type.transparent_union_flag))
   {
     target = copy_rtx (target);
     (((target))->jump) = 1;
   }
        store_constructor_field
   (target, bitsize, bitpos, mode, value1, type, cleared,
    get_alias_set (elttype));
      }
  }
       else
  {
    rtx loop_start = gen_label_rtx ();
    rtx loop_end = gen_label_rtx ();
    tree exit_cond;
    expand_expr (hi_index, (rtx) 0, VOIDmode, 0);
    unsignedp = ((domain)->common.unsigned_flag);
    index = build_decl_stat (VAR_DECL,(tree) ((void *)0),domain );
    index_r
      = gen_reg_rtx (promote_mode (domain, ((index)->decl.mode),
       &unsignedp, 0));
    set_decl_rtl (index, index_r);
    store_expr (lo_index, index_r, 0);
    do_pending_stack_adjust ();
    emit_queue ();
    emit_label (loop_start);
    position
      = convert (sizetype_tab[(int) SSIZETYPE],
          fold (build (MINUS_EXPR, ((index)->common.type),
         index, ((domain)->type.minval))));
    position = size_binop (MULT_EXPR, position,
      convert (sizetype_tab[(int) SSIZETYPE],
        ((elttype)->type.size_unit)));
    pos_rtx = expand_expr (position, 0, VOIDmode, 0);
    xtarget = offset_address (target, pos_rtx,
         highest_pow2_factor (position));
    xtarget = adjust_address_1 (xtarget, mode, 0, 1, 1);
    if (((enum tree_code) (value1)->common.code) == CONSTRUCTOR)
      store_constructor (value1, xtarget, cleared,
           bitsize / 8);
    else
      store_expr (value1, xtarget, 0);
    exit_cond = build (LT_EXPR, integer_types[itk_int],
         index, hi_index);
    jumpif (exit_cond, loop_end);
    expand_increment (build (PREINCREMENT_EXPR,
        ((index)->common.type),
        index, global_trees[TI_INTEGER_ONE]), 0, 0);
    emit_jump (loop_start);
    emit_label (loop_end);
  }
     }
   else if ((index != 0 && ! host_integerp (index, 0))
     || ! host_integerp (((elttype)->type.size), 1))
     {
       tree position;
       if (vector)
  abort ();
       if (index == 0)
  index = size_int_wide ((long) (1), SSIZETYPE);
       if (minelt)
  index = convert (sizetype_tab[(int) SSIZETYPE],
     fold (build (MINUS_EXPR, index,
           ((domain)->type.minval))));
       position = size_binop (MULT_EXPR, index,
         convert (sizetype_tab[(int) SSIZETYPE],
           ((elttype)->type.size_unit)));
       xtarget = offset_address (target,
     expand_expr (position, 0, VOIDmode, 0),
     highest_pow2_factor (position));
       xtarget = adjust_address_1 (xtarget, mode, 0, 1, 1);
       store_expr (value1, xtarget, 0);
     }
   else if (vector)
     {
       int pos;
       if (index != 0)
  pos = tree_low_cst (index, 0) - minelt;
       else
  pos = i;
       vector[pos] = expand_expr (value1, (rtx) 0, VOIDmode, 0);
     }
   else
     {
       if (index != 0)
  bitpos = ((tree_low_cst (index, 0) - minelt)
     * tree_low_cst (((elttype)->type.size), 1));
       else
  bitpos = (i * tree_low_cst (((elttype)->type.size), 1));
       if ((((enum rtx_code) (target)->code) == MEM) && !(((target))->jump)
    && ((enum tree_code) (type)->common.code) == ARRAY_TYPE
    && ((type)->type.transparent_union_flag))
  {
    target = copy_rtx (target);
    (((target))->jump) = 1;
  }
       store_constructor_field (target, bitsize, bitpos, mode, value1,
           type, cleared, get_alias_set (elttype));
     }
 }
      if (vector)
 {
   emit_insn ((insn_data[icode].genfun) (target,
          gen_rtx_fmt_E (PARALLEL, (((enum machine_mode) (target)->mode)), (gen_rtvec_v (n_elts, vector)))
                                           ));
 }
    }
  else if (((enum tree_code) (type)->common.code) == SET_TYPE)
    {
      tree elt = ((exp)->exp.operands[0]);
      unsigned long nbytes = int_size_in_bytes (type), nbits;
      tree domain = ((type)->type.value1s);
      tree domain_min, domain_max, bitlength;
      if (elt == (tree) ((void *)0) && size > 0)
 {
   if (!cleared)
     clear_storage (target, gen_rtx_CONST_INT (VOIDmode, (long) (size)));
   return;
 }
      domain_min = convert (sizetype_tab[(int) SIZETYPE], ((domain)->type.minval));
      domain_max = convert (sizetype_tab[(int) SIZETYPE], ((domain)->type.maxval));
      bitlength = size_binop (PLUS_EXPR,
         size_diffop (domain_max, domain_min),
         size_int_wide ((long) (1), SSIZETYPE));
      nbits = tree_low_cst (bitlength, 1);
      if (((enum machine_mode) (target)->mode) != BLKmode || nbits <= 2 * (8 * (0 ? 8 : 4))
   || (nbytes <= 32 && ((elt)->common.chain) != (tree) ((void *)0)))
 {
   unsigned int set_word_size = ((((exp)->common.type))->type.align);
   enum machine_mode mode = mode_for_size (set_word_size, MODE_INT, 1);
   char *bit_buffer = C_alloca(nbits);
   long word = 0;
   unsigned int bit_pos = 0;
   unsigned int ibit = 0;
   unsigned int offset = 0;
   elt = get_set_constructor_bits (exp, bit_buffer, nbits);
   for (;;)
     {
       if (bit_buffer[ibit])
  {
    if (0)
      word |= (1 << (set_word_size - 1 - bit_pos));
    else
      word |= 1 << bit_pos;
  }
       bit_pos++; ibit++;
       if (bit_pos >= set_word_size || ibit == nbits)
  {
    if (word != 0 || ! cleared)
      {
        rtx datum = gen_int_mode (word, mode);
        rtx to_rtx;
        if ((((enum rtx_code) (target)->code) == MEM))
   to_rtx = adjust_address_1 (target, mode, offset, 1, 1);
        else if (offset == 0)
   to_rtx = target;
        else
   abort ();
        emit_move_insn (to_rtx, datum);
      }
    if (ibit == nbits)
      break;
    word = 0;
    bit_pos = 0;
    offset += set_word_size / 8;
  }
     }
 }
      else if (!cleared)
 if (((elt)->common.chain) != (tree) ((void *)0)
     || (((elt)->list.purpose) == (tree) ((void *)0)
  ? nbits != 1
  : ( ! host_integerp (((elt)->list.value1), 0)
     || ! host_integerp (((elt)->list.purpose), 0)
     || (tree_low_cst (((elt)->list.value1), 0)
         - tree_low_cst (((elt)->list.purpose), 0) + 1
         != (long) nbits))))
   clear_storage (target, expr_size (exp));
      for (; elt != (tree) ((void *)0); elt = ((elt)->common.chain))
 {
   tree startbit = ((elt)->list.purpose);
   tree endbit = ((elt)->list.value1);
   long startb, endb;
   rtx bitlength_rtx, startbit_rtx, endbit_rtx, targetx;
   bitlength_rtx = expand_expr (bitlength,
           (rtx) 0, MEM, EXPAND_CONST_ADDRESS);
   if (startbit == (tree) ((void *)0))
     {
       startbit = save_expr (endbit);
       endbit = startbit;
     }
   startbit = convert (sizetype_tab[(int) SIZETYPE], startbit);
   endbit = convert (sizetype_tab[(int) SIZETYPE], endbit);
   if (! integer_zerop (domain_min))
     {
       startbit = size_binop (MINUS_EXPR, startbit, domain_min);
       endbit = size_binop (MINUS_EXPR, endbit, domain_min);
     }
   startbit_rtx = expand_expr (startbit, (rtx) 0, MEM,
          EXPAND_CONST_ADDRESS);
   endbit_rtx = expand_expr (endbit, (rtx) 0, MEM,
        EXPAND_CONST_ADDRESS);
   if ((((enum rtx_code) (target)->code) == REG))
     {
       targetx
  = assign_temp
    ((build_qualified_type (lang_hooks.types.type_for_mode
       (((enum machine_mode) (target)->mode), 0),
       0x1)),
     0, 1, 1);
       emit_move_insn (targetx, target);
     }
   else if ((((enum rtx_code) (target)->code) == MEM))
     targetx = target;
   else
     abort ();
   if (((enum tree_code) (startbit)->common.code) == INTEGER_CST
       && ((enum tree_code) (endbit)->common.code) == INTEGER_CST
       && (startb = (((startbit)->int_cst.int_cst).low)) % 8 == 0
       && (endb = (((endbit)->int_cst.int_cst).low) + 1) % 8 == 0)
     {
       emit_library_call ((libfunc_table[LTI_memset]), LCT_NORMAL,
     VOIDmode, 3,
     plus_constant_wide (((((targetx)->u.fld[0]).rtx1)), (long) (startb / 8))
                             ,
     (0 ? DImode : SImode),
     (const_int_rtx[64 -1]), ((integer_types[itk_int])->type.mode),
     gen_rtx_CONST_INT (VOIDmode, (long) ((endb - startb) / 8)),
     ((sizetype_tab[(int) SIZETYPE])->type.mode));
     }
   else
     emit_library_call ((libfunc_table[LTI_setbits]), LCT_NORMAL,
          VOIDmode, 4, (((targetx)->u.fld[0]).rtx1),
          (0 ? DImode : SImode), bitlength_rtx, ((sizetype_tab[(int) SIZETYPE])->type.mode),
          startbit_rtx, ((sizetype_tab[(int) SIZETYPE])->type.mode),
          endbit_rtx, ((sizetype_tab[(int) SIZETYPE])->type.mode));
   if ((((enum rtx_code) (target)->code) == REG))
     emit_move_insn (target, targetx);
 }
    }
  else
    abort ();
}
static rtx
store_field (rtx target, long bitsize, long bitpos,
      enum machine_mode mode, tree exp, enum machine_mode value_mode,
      int unsignedp, tree type, int alias_set)
{
  long width_mask = 0;
  if (((enum tree_code) (exp)->common.code) == ERROR_MARK)
    return (const_int_rtx[64]);
  if (bitsize == 0)
    return expand_expr (exp, (const_int_rtx[64]), VOIDmode, 0);
  else if (bitsize >= 0 && bitsize < (8 * 4))
    width_mask = ((long) 1 << bitsize) - 1;
  if (mode == BLKmode
      && ((((enum rtx_code) (target)->code) == REG) || ((enum rtx_code) (target)->code) == SUBREG))
    {
      rtx object = assign_temp (type, 0, 1, 1);
      rtx blk_object = adjust_address_1 (object, BLKmode, 0, 1, 1);
      if (bitsize != (long) ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (target)->mode)]) * 8)))
 emit_move_insn (object, target);
      store_field (blk_object, bitsize, bitpos, mode, exp, VOIDmode, 0, type,
     alias_set);
      emit_move_insn (target, object);
      return blk_object;
    }
  if (((enum rtx_code) (target)->code) == CONCAT)
    {
      if (bitpos != 0)
 abort ();
      return store_expr (exp, target, value_mode != VOIDmode);
    }
  if (mode == VOIDmode
      || (mode != BLKmode && ! direct_store[(int) mode]
   && mode_class[mode] != MODE_COMPLEX_INT
   && mode_class[mode] != MODE_COMPLEX_FLOAT)
      || (((enum rtx_code) (target)->code) == REG)
      || ((enum rtx_code) (target)->code) == SUBREG
      || (mode != BLKmode
   && ((((((((target)->u.fld[1]).rtmem) != 0 ? (((target)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (target)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (target)->mode)) : 8)) < get_mode_alignment (mode))
  || bitpos % get_mode_alignment (mode))
        && 0)
       || (bitpos % 8 != 0)))
      || (bitsize >= 0
   && ((enum tree_code) (((((exp)->common.type))->type.size))->common.code) == INTEGER_CST
   && compare_tree_int (((((exp)->common.type))->type.size), bitsize) != 0))
    {
      rtx temp = expand_expr (exp, (rtx) 0, VOIDmode, 0);
      if (0 && mode_class[((enum machine_mode) (temp)->mode)] == MODE_INT
   && bitsize < (long) ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (temp)->mode)]) * 8))
   && ((enum tree_code) (((exp)->common.type))->common.code) == RECORD_TYPE)
 temp = expand_shift (RSHIFT_EXPR, ((enum machine_mode) (temp)->mode), temp,
        size_int_wide ((long) (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (temp)->mode)]) * 8)) - bitsize), SIZETYPE)
                     ,
        (rtx) 0, 1);
      if (mode != VOIDmode && mode != BLKmode
   && mode != ((((exp)->common.type))->type.mode))
 temp = convert_modes (mode, ((((exp)->common.type))->type.mode), temp, 1);
      if (((enum machine_mode) (target)->mode) == BLKmode && ((enum machine_mode) (temp)->mode) == BLKmode)
 {
   if (!(((enum rtx_code) (target)->code) == MEM) || !(((enum rtx_code) (temp)->code) == MEM)
       || bitpos % 8 != 0)
     abort ();
   target = adjust_address_1 (target, VOIDmode, bitpos / 8, 1, 1);
   emit_block_move (target, temp,
      gen_rtx_CONST_INT (VOIDmode, (long) ((bitsize + 8 - 1) / 8))
                        ,
      BLOCK_OP_NORMAL);
   return value_mode == VOIDmode ? (const_int_rtx[64]) : target;
 }
      store_bit_field (target, bitsize, bitpos, mode, temp,
         int_size_in_bytes (type));
      if (value_mode != VOIDmode)
 {
   if (width_mask != 0
       && ! ((((enum rtx_code) (target)->code) == MEM) && (((target))->volatil)))
     {
       tree count;
       enum machine_mode tmode;
       tmode = ((enum machine_mode) (temp)->mode);
       if (tmode == VOIDmode)
  tmode = value_mode;
       if (unsignedp)
  return expand_and (tmode, temp,
       gen_int_mode (width_mask, tmode),
       (rtx) 0);
       count = build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[tmode]) * 8)) - bitsize), (long) (0));
       temp = expand_shift (LSHIFT_EXPR, tmode, temp, count, 0, 0);
       return expand_shift (RSHIFT_EXPR, tmode, temp, count, 0, 0);
     }
   return extract_bit_field (target, bitsize, bitpos, unsignedp,
        (rtx) 0, value_mode, VOIDmode,
        int_size_in_bytes (type));
 }
      return (const_int_rtx[64]);
    }
  else
    {
      rtx addr = (((target)->u.fld[0]).rtx1);
      rtx to_rtx = target;
      if (value_mode != VOIDmode && !(((enum rtx_code) (addr)->code) == REG)
   && ! constant_address_p (addr)
   && ! (((enum rtx_code) (addr)->code) == PLUS
  && ((enum rtx_code) ((((addr)->u.fld[1]).rtx1))->code) == CONST_INT
  && ((((addr)->u.fld[0]).rtx1) == (global_rtl[GR_VIRTUAL_INCOMING_ARGS])
      || (((addr)->u.fld[0]).rtx1) == (global_rtl[GR_VIRTUAL_STACK_ARGS]))))
 to_rtx = replace_equiv_address (to_rtx, copy_to_reg (addr));
      to_rtx = adjust_address_1 (target, mode, bitpos / 8, 1, 1);
      if (to_rtx == target)
 to_rtx = copy_rtx (to_rtx);
      do { if (1) { (((to_rtx))->in_struct) = 1; (((to_rtx))->return_val) = 0; } else { (((to_rtx))->in_struct) = 0; (((to_rtx))->return_val) = 1; } } while (0);
      if (!(((to_rtx))->jump) && ((((to_rtx)->u.fld[1]).rtmem) == 0 ? 0 : (((to_rtx)->u.fld[1]).rtmem)->alias) != 0)
 set_mem_alias_set (to_rtx, alias_set);
      return store_expr (exp, to_rtx, value_mode != VOIDmode);
    }
}
tree
get_inner_reference (tree exp, long *pbitsize,
       long *pbitpos, tree *poffset,
       enum machine_mode *pmode, int *punsignedp,
       int *pvolatilep)
{
  tree size_tree = 0;
  enum machine_mode mode = VOIDmode;
  tree offset = global_trees[TI_SIZE_ZERO];
  tree bit_offset = global_trees[TI_BITSIZE_ZERO];
  tree tem;
  if (((enum tree_code) (exp)->common.code) == COMPONENT_REF)
    {
      size_tree = ((((exp)->exp.operands[1]))->decl.size);
      if (! ((((exp)->exp.operands[1]))->decl.bit_field_flag))
 mode = ((((exp)->exp.operands[1]))->decl.mode);
      *punsignedp = ((((exp)->exp.operands[1]))->common.unsigned_flag);
    }
  else if (((enum tree_code) (exp)->common.code) == BIT_FIELD_REF)
    {
      size_tree = ((exp)->exp.operands[1]);
      *punsignedp = ((exp)->common.unsigned_flag);
    }
  else
    {
      mode = ((((exp)->common.type))->type.mode);
      *punsignedp = ((((exp)->common.type))->common.unsigned_flag);
      if (mode == BLKmode)
 size_tree = ((((exp)->common.type))->type.size);
      else
 *pbitsize = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
    }
  if (size_tree != 0)
    {
      if (! host_integerp (size_tree, 1))
 mode = BLKmode, *pbitsize = -1;
      else
 *pbitsize = tree_low_cst (size_tree, 1);
    }
  while (1)
    {
      if (((enum tree_code) (exp)->common.code) == BIT_FIELD_REF)
 bit_offset = size_binop (PLUS_EXPR, bit_offset, ((exp)->exp.operands[2]));
      else if (((enum tree_code) (exp)->common.code) == COMPONENT_REF)
 {
   tree field = ((exp)->exp.operands[1]);
   tree this_offset = component_ref_field_offset (exp);
   if (this_offset == 0)
     break;
   offset = size_binop (PLUS_EXPR, offset, this_offset);
   bit_offset = size_binop (PLUS_EXPR, bit_offset,
       ((field)->decl.u2.t));
 }
      else if (((enum tree_code) (exp)->common.code) == ARRAY_REF
        || ((enum tree_code) (exp)->common.code) == ARRAY_RANGE_REF)
 {
   tree index = ((exp)->exp.operands[1]);
   tree low_bound = array_ref_low_bound (exp);
   tree unit_size = array_ref_element_size (exp);
   if (! integer_zerop (low_bound))
     index = fold (build (MINUS_EXPR, ((index)->common.type),
     index, low_bound));
   offset = size_binop (PLUS_EXPR, offset,
          size_binop (MULT_EXPR,
        convert (sizetype_tab[(int) SIZETYPE], index),
        unit_size));
 }
      else if (((enum tree_code) (exp)->common.code) != NON_LVALUE_EXPR
        && ! (((enum tree_code) (exp)->common.code) == VIEW_CONVERT_EXPR
       && ! ((((((exp)->common.type))->type.align)
       > ((((((exp)->exp.operands[0]))->common.type))->type.align))
      && 0
      && (((((((exp)->exp.operands[0]))->common.type))->type.align)
          < 128)
      && (((((exp)->common.type))->common.nothrow_flag)
          || ((((((exp)->exp.operands[0]))->common.type))->common.nothrow_flag)
                               )))
        && ! ((((enum tree_code) (exp)->common.code) == NOP_EXPR
        || ((enum tree_code) (exp)->common.code) == CONVERT_EXPR)
       && (((((exp)->common.type))->type.mode)
    == ((((((exp)->exp.operands[0]))->common.type))->type.mode))))
 break;
      if (((exp)->common.volatile_flag))
 *pvolatilep = 1;
      exp = ((exp)->exp.operands[0]);
    }
  if (host_integerp (offset, 0)
      && 0 != (tem = size_binop (MULT_EXPR, convert (sizetype_tab[(int) BITSIZETYPE], offset),
     global_trees[TI_BITSIZE_UNIT]))
      && 0 != (tem = size_binop (PLUS_EXPR, tem, bit_offset))
      && host_integerp (tem, 0))
    *pbitpos = tree_low_cst (tem, 0), *poffset = 0;
  else
    *pbitpos = tree_low_cst (bit_offset, 0), *poffset = offset;
  *pmode = mode;
  return exp;
}
tree
array_ref_element_size (tree exp)
{
  tree aligned_size = ((exp)->exp.operands[3]);
  tree elmt_type = ((((((exp)->exp.operands[0]))->common.type))->common.type);
  if (aligned_size)
    return size_binop (MULT_EXPR, aligned_size,
         size_int_wide ((long) (((elmt_type)->type.align) / 8), SIZETYPE));
  else
    return ((((elmt_type)->type.size_unit)) == 0 || ((((elmt_type)->type.size_unit))->common.constant_flag) ? (((elmt_type)->type.size_unit)) : substitute_placeholder_in_expr (((elmt_type)->type.size_unit), exp));
}
tree
array_ref_low_bound (tree exp)
{
  tree domain_type = ((((((exp)->exp.operands[0]))->common.type))->type.value1s);
  if (((exp)->exp.operands[2]))
    return ((exp)->exp.operands[2]);
  if (domain_type && ((domain_type)->type.minval))
    return ((((domain_type)->type.minval)) == 0 || ((((domain_type)->type.minval))->common.constant_flag) ? (((domain_type)->type.minval)) : substitute_placeholder_in_expr (((domain_type)->type.minval), exp));
  return fold_convert (((((exp)->exp.operands[1]))->common.type), global_trees[TI_INTEGER_ZERO]);
}
tree
component_ref_field_offset (tree exp)
{
  tree aligned_offset = ((exp)->exp.operands[2]);
  tree field = ((exp)->exp.operands[1]);
  if (aligned_offset)
    return size_binop (MULT_EXPR, aligned_offset,
         size_int_wide ((long) ((((unsigned long)1) << (field)->decl.u1.a.off_align) / 8), SIZETYPE));
  else
    return ((((field)->decl.arguments)) == 0 || ((((field)->decl.arguments))->common.constant_flag) ? (((field)->decl.arguments)) : substitute_placeholder_in_expr (((field)->decl.arguments), exp));
}
int
handled_component_p (tree t)
{
  switch (((enum tree_code) (t)->common.code))
    {
    case BIT_FIELD_REF:
    case COMPONENT_REF:
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
    case NON_LVALUE_EXPR:
    case VIEW_CONVERT_EXPR:
      return 1;
    case NOP_EXPR:
    case CONVERT_EXPR:
      return (((((t)->common.type))->type.mode)
       == ((((((t)->exp.operands[0]))->common.type))->type.mode));
    default:
      return 0;
    }
}
rtx
force_operand (rtx value1, rtx target)
{
  rtx op1, op2;
  rtx subtarget = get_subtarget (target);
  enum rtx_code code = ((enum rtx_code) (value1)->code);
  if (code == SUBREG
      && !(((enum rtx_code) ((((value1)->u.fld[0]).rtx1))->code) == REG)
      && !(((enum rtx_code) ((((value1)->u.fld[0]).rtx1))->code) == MEM))
    {
      value1 = simplify_gen_subreg (((enum machine_mode) (value1)->mode),
       force_reg (((enum machine_mode) ((((value1)->u.fld[0]).rtx1))->mode),
           force_operand ((((value1)->u.fld[0]).rtx1),
            (rtx) 0)),
       ((enum machine_mode) ((((value1)->u.fld[0]).rtx1))->mode),
       (((value1)->u.fld[1]).rtuint));
      code = ((enum rtx_code) (value1)->code);
    }
  if ((code == PLUS || code == MINUS)
      && (((value1)->u.fld[0]).rtx1) == pic_offset_table_rtx
      && (((enum rtx_code) ((((value1)->u.fld[1]).rtx1))->code) == SYMBOL_REF
   || ((enum rtx_code) ((((value1)->u.fld[1]).rtx1))->code) == LABEL_REF
   || ((enum rtx_code) ((((value1)->u.fld[1]).rtx1))->code) == CONST))
    {
      if (!subtarget)
 subtarget = gen_reg_rtx (((enum machine_mode) (value1)->mode));
      emit_move_insn (subtarget, value1);
      return subtarget;
    }
  if (code == ZERO_EXTEND || code == SIGN_EXTEND)
    {
      if (!target)
 target = gen_reg_rtx (((enum machine_mode) (value1)->mode));
      convert_move (target, force_operand ((((value1)->u.fld[0]).rtx1), ((void *)0)),
      code == ZERO_EXTEND);
      return target;
    }
  if ((((rtx_class[(int) (((enum rtx_code) (value1)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1))))
    {
      op2 = (((value1)->u.fld[1]).rtx1);
      if (!((rtx_class[(int) (((enum rtx_code) (op2)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op2)->code) == CONST_VECTOR) && !((((enum rtx_code) (op2)->code) == REG) && op2 != subtarget))
 subtarget = 0;
      if (code == MINUS && ((enum rtx_code) (op2)->code) == CONST_INT)
 {
   code = PLUS;
   op2 = negate_rtx (((enum machine_mode) (value1)->mode), op2);
 }
      if (code == PLUS && ((enum rtx_code) (op2)->code) == CONST_INT
   && ((enum rtx_code) ((((value1)->u.fld[0]).rtx1))->code) == PLUS
   && (((enum rtx_code) (((((((value1)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG)
   && (((((((((value1)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= (53)
   && (((((((((value1)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) <= (((53)) + 4))
 {
   rtx temp = expand_simple_binop (((enum machine_mode) (value1)->mode), code,
       ((((((value1)->u.fld[0]).rtx1))->u.fld[0]).rtx1), op2,
       subtarget, 0, OPTAB_LIB_WIDEN);
   return expand_simple_binop (((enum machine_mode) (value1)->mode), code, temp,
          force_operand (((((((value1)->u.fld[0]).rtx1))->u.fld[1]).rtx1)
               , 0),
          target, 0, OPTAB_LIB_WIDEN);
 }
      op1 = force_operand ((((value1)->u.fld[0]).rtx1), subtarget);
      op2 = force_operand (op2, (rtx) 0);
      switch (code)
 {
 case MULT:
   return expand_mult (((enum machine_mode) (value1)->mode), op1, op2, target, 1);
 case DIV:
   if (!(mode_class[((enum machine_mode) (value1)->mode)] == MODE_INT || mode_class[((enum machine_mode) (value1)->mode)] == MODE_PARTIAL_INT || mode_class[((enum machine_mode) (value1)->mode)] == MODE_COMPLEX_INT || mode_class[((enum machine_mode) (value1)->mode)] == MODE_VECTOR_INT))
     return expand_simple_binop (((enum machine_mode) (value1)->mode), code, op1, op2,
     target, 1, OPTAB_LIB_WIDEN);
   else
     return expand_divmod (0,
      (mode_class[((enum machine_mode) (value1)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (value1)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (value1)->mode)] == MODE_VECTOR_FLOAT)
      ? RDIV_EXPR : TRUNC_DIV_EXPR,
      ((enum machine_mode) (value1)->mode), op1, op2, target, 0);
   break;
 case MOD:
   return expand_divmod (1, TRUNC_MOD_EXPR, ((enum machine_mode) (value1)->mode), op1, op2,
    target, 0);
   break;
 case UDIV:
   return expand_divmod (0, TRUNC_DIV_EXPR, ((enum machine_mode) (value1)->mode), op1, op2,
    target, 1);
   break;
 case UMOD:
   return expand_divmod (1, TRUNC_MOD_EXPR, ((enum machine_mode) (value1)->mode), op1, op2,
    target, 1);
   break;
 case ASHIFTRT:
   return expand_simple_binop (((enum machine_mode) (value1)->mode), code, op1, op2,
          target, 0, OPTAB_LIB_WIDEN);
   break;
 default:
   return expand_simple_binop (((enum machine_mode) (value1)->mode), code, op1, op2,
          target, 1, OPTAB_LIB_WIDEN);
 }
    }
  if (((rtx_class[(int) (((enum rtx_code) (value1)->code))]) == RTX_UNARY))
    {
      op1 = force_operand ((((value1)->u.fld[0]).rtx1), (rtx) 0);
      return expand_simple_unop (((enum machine_mode) (value1)->mode), code, op1, target, 0);
    }
  if (((enum rtx_code) (value1)->code) == SUBREG && (((enum rtx_code) ((((value1)->u.fld[0]).rtx1))->code) == MEM)
      && (((unsigned short) mode_size[((enum machine_mode) (value1)->mode)])
   > ((unsigned short) mode_size[((enum machine_mode) ((((value1)->u.fld[0]).rtx1))->mode)])))
    value1
      = simplify_gen_subreg (((enum machine_mode) (value1)->mode),
        force_reg (((enum machine_mode) ((((value1)->u.fld[0]).rtx1))->mode),
     force_operand ((((value1)->u.fld[0]).rtx1),
             (rtx) 0)),
        ((enum machine_mode) ((((value1)->u.fld[0]).rtx1))->mode),
        (((value1)->u.fld[1]).rtuint));
  return value1;
}
int
safe_from_p (rtx x, tree exp, int top_p)
{
  rtx exp_rtl = 0;
  int i, nops;
  if (x == 0
      || (top_p && ((exp)->common.type) != 0 && (((((exp)->common.type))->type.size) != (tree) ((void *)0))
   && ((enum tree_code) (((((exp)->common.type))->type.size))->common.code) != INTEGER_CST
   && (((enum tree_code) (((exp)->common.type))->common.code) != ARRAY_TYPE
       || ((((exp)->common.type))->type.maxval) == (tree) ((void *)0)
       || ((enum tree_code) (((((exp)->common.type))->type.maxval))->common.code)
       != INTEGER_CST)
   && ((enum machine_mode) (x)->mode) == BLKmode)
      || ((((enum rtx_code) (x)->code) == MEM)
   && ((((x)->u.fld[0]).rtx1) == (global_rtl[GR_VIRTUAL_OUTGOING_ARGS])
       || (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
    && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (global_rtl[GR_VIRTUAL_OUTGOING_ARGS])))))
    return 1;
  if (((enum rtx_code) (x)->code) == SUBREG)
    {
      x = (((x)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) < 53)
 return 0;
    }
  switch (tree_code_type[(int) (((enum tree_code) (exp)->common.code))])
    {
    case 'd':
      exp_rtl = (((exp)->decl.rtl != ((void *)0)) ? ((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)) : ((void *)0));
      break;
    case 'c':
      return 1;
    case 'x':
      if (((enum tree_code) (exp)->common.code) == TREE_LIST)
 {
   while (1)
     {
       if (((exp)->list.value1) && !safe_from_p (x, ((exp)->list.value1), 0))
  return 0;
       exp = ((exp)->common.chain);
       if (!exp)
  return 1;
       if (((enum tree_code) (exp)->common.code) != TREE_LIST)
  return safe_from_p (x, exp, 0);
     }
 }
      else if (((enum tree_code) (exp)->common.code) == ERROR_MARK)
 return 1;
      else
 return 0;
    case 's':
      return (((enum tree_code) (exp)->common.code) != DECL_EXPR
       || ((enum tree_code) ((((exp))->exp.operands[0]))->common.code) != VAR_DECL
       || !(((((exp))->exp.operands[0]))->decl.initial)
       || safe_from_p (x, (((((exp))->exp.operands[0]))->decl.initial), 0));
    case '2':
    case '<':
      if (!safe_from_p (x, ((exp)->exp.operands[1]), 0))
 return 0;
    case '1':
      return safe_from_p (x, ((exp)->exp.operands[0]), 0);
    case 'e':
    case 'r':
      switch (((enum tree_code) (exp)->common.code))
 {
 case ADDR_EXPR:
   if (staticp (((exp)->exp.operands[0]))
       || ((exp)->common.static_flag)
       || safe_from_p (x, ((exp)->exp.operands[0]), 0))
     return 1;
   exp = ((exp)->exp.operands[0]);
   if ((tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'd'))
     {
       if (!((exp)->decl.rtl != ((void *)0))
    || !(((enum rtx_code) (((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->code) == MEM))
  return 0;
       else
  exp_rtl = (((((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->u.fld[0]).rtx1);
     }
   break;
 case INDIRECT_REF:
   if ((((enum rtx_code) (x)->code) == MEM)
       && alias_sets_conflict_p (((((x)->u.fld[1]).rtmem) == 0 ? 0 : (((x)->u.fld[1]).rtmem)->alias),
     get_alias_set (exp)))
     return 0;
   break;
 case CALL_EXPR:
   if (((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) < 53)
       || (((enum rtx_code) (x)->code) == MEM))
     return 0;
   break;
 case WITH_CLEANUP_EXPR:
   exp_rtl = (*(rtx *) &((exp)->exp.operands[2]));
   break;
 case CLEANUP_POINT_EXPR:
 case SAVE_EXPR:
   return safe_from_p (x, ((exp)->exp.operands[0]), 0);
 case BIND_EXPR:
   return safe_from_p (x, ((exp)->exp.operands[1]), 0);
 default:
   break;
 }
      if (exp_rtl)
 break;
      nops = first_rtl_op (((enum tree_code) (exp)->common.code));
      for (i = 0; i < nops; i++)
 if (((exp)->exp.operands[i]) != 0
     && ! safe_from_p (x, ((exp)->exp.operands[i]), 0))
   return 0;
      if ((unsigned int) ((enum tree_code) (exp)->common.code)
   >= (unsigned int) LAST_AND_UNUSED_TREE_CODE
   && !lang_hooks.safe_from_p (x, exp))
 return 0;
    }
  if (exp_rtl)
    {
      if (((enum rtx_code) (exp_rtl)->code) == SUBREG)
 {
   exp_rtl = (((exp_rtl)->u.fld[0]).rtx1);
   if ((((enum rtx_code) (exp_rtl)->code) == REG)
       && (((exp_rtl)->u.fld[0]).rtuint) < 53)
     return 0;
 }
      return ! (rtx_equal_p (x, exp_rtl)
  || ((((enum rtx_code) (x)->code) == MEM) && (((enum rtx_code) (exp_rtl)->code) == MEM)
      && true_dependence (exp_rtl, VOIDmode, x,
     rtx_addr_varies_p)));
    }
  return 1;
}
static rtx
var_rtx (tree exp)
{
  while ((((enum tree_code) (exp)->common.code) == NOP_EXPR || ((enum tree_code) (exp)->common.code) == CONVERT_EXPR || ((enum tree_code) (exp)->common.code) == NON_LVALUE_EXPR) && ((exp)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((exp)->common.type))->type.mode) == ((((((exp)->exp.operands[0]))->common.type))->type.mode))) (exp) = ((exp)->exp.operands[0]);
  switch (((enum tree_code) (exp)->common.code))
    {
    case PARM_DECL:
    case VAR_DECL:
      return ((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl));
    default:
      return 0;
    }
}
static unsigned long
highest_pow2_factor (tree exp)
{
  unsigned long c0, c1;
  switch (((enum tree_code) (exp)->common.code))
    {
    case INTEGER_CST:
      if (((exp)->common.static_flag))
 return 128;
      else
 {
   c0 = (((exp)->int_cst.int_cst).low);
   c0 &= -c0;
   return c0 ? c0 : 128;
 }
      break;
    case PLUS_EXPR: case MINUS_EXPR: case MIN_EXPR: case MAX_EXPR:
      c0 = highest_pow2_factor (((exp)->exp.operands[0]));
      c1 = highest_pow2_factor (((exp)->exp.operands[1]));
      return ((c0) < (c1) ? (c0) : (c1));
    case MULT_EXPR:
      c0 = highest_pow2_factor (((exp)->exp.operands[0]));
      c1 = highest_pow2_factor (((exp)->exp.operands[1]));
      return c0 * c1;
    case ROUND_DIV_EXPR: case TRUNC_DIV_EXPR: case FLOOR_DIV_EXPR:
    case CEIL_DIV_EXPR:
      if (integer_pow2p (((exp)->exp.operands[1]))
   && host_integerp (((exp)->exp.operands[1]), 1))
 {
   c0 = highest_pow2_factor (((exp)->exp.operands[0]));
   c1 = tree_low_cst (((exp)->exp.operands[1]), 1);
   return ((1) > (c0 / c1) ? (1) : (c0 / c1));
 }
      break;
    case NON_LVALUE_EXPR: case NOP_EXPR: case CONVERT_EXPR:
    case SAVE_EXPR:
      return highest_pow2_factor (((exp)->exp.operands[0]));
    case COMPOUND_EXPR:
      return highest_pow2_factor (((exp)->exp.operands[1]));
    case COND_EXPR:
      c0 = highest_pow2_factor (((exp)->exp.operands[1]));
      c1 = highest_pow2_factor (((exp)->exp.operands[2]));
      return ((c0) < (c1) ? (c0) : (c1));
    default:
      break;
    }
  return 1;
}
static unsigned long
highest_pow2_factor_for_target (tree target, tree exp)
{
  unsigned long target_align, factor;
  factor = highest_pow2_factor (exp);
  if (((enum tree_code) (target)->common.code) == COMPONENT_REF)
    target_align = ((((target)->exp.operands[1]))->decl.u1.a.align) / 8;
  else
    target_align = ((((target)->common.type))->type.align) / 8;
  return ((factor) > (target_align) ? (factor) : (target_align));
}
void
expand_var (tree var)
{
  if (((var)->decl.external_flag))
    return;
  if (((var)->common.static_flag))
    var = (((var)->decl.abstract_origin) ? ((var)->decl.abstract_origin) : (var));
  if (((var)->common.static_flag)
      ? !((var)->common.asm_written_flag)
      : !((var)->decl.rtl != ((void *)0)))
    {
      if (((enum tree_code) (var)->common.code) == VAR_DECL && ((var)->decl.defer_output))
 {
   rtx x;
   if (((var)->common.static_flag))
     abort ();
   x = gen_rtx_MEM (((var)->decl.mode),
      gen_reg_rtx ((0 ? DImode : SImode)));
   set_mem_attributes (x, var, 1);
   set_decl_rtl (var, x);
 }
      else if (lang_hooks.expand_decl (var))
           ;
      else if (((enum tree_code) (var)->common.code) == VAR_DECL && !((var)->common.static_flag))
 expand_decl (var);
      else if (((enum tree_code) (var)->common.code) == VAR_DECL && ((var)->common.static_flag))
 rest_of_decl_compilation (var, ((void *)0), 0, 0);
      else if (((enum tree_code) (var)->common.code) == TYPE_DECL
        || ((enum tree_code) (var)->common.code) == CONST_DECL
        || ((enum tree_code) (var)->common.code) == FUNCTION_DECL
        || ((enum tree_code) (var)->common.code) == LABEL_DECL)
                            ;
      else
 abort ();
    }
}
static void
expand_vars (tree vars)
{
  for (; vars; vars = ((vars)->common.chain))
    {
      tree var = vars;
      if (((var)->decl.external_flag))
 continue;
      expand_var (var);
      expand_decl_init (var);
    }
}
static void
expand_operands (tree exp0, tree exp1, rtx target, rtx *op0, rtx *op1,
   enum expand_modifier modifier)
{
  if (! safe_from_p (target, exp1, 1))
    target = 0;
  if (operand_equal_p (exp0, exp1, 0))
    {
      *op0 = expand_expr (exp0, target, VOIDmode, modifier);
      *op1 = copy_rtx (*op0);
    }
  else
    {
      if (flag_evaluation_order && ((exp1)->common.side_effects_flag))
 exp0 = save_expr (exp0);
      *op0 = expand_expr (exp0, target, VOIDmode, modifier);
      *op1 = expand_expr (exp1, (rtx) 0, VOIDmode, modifier);
    }
}
static rtx expand_expr_real_1 (tree, rtx, enum machine_mode,
          enum expand_modifier, rtx *);
rtx
expand_expr_real (tree exp, rtx target, enum machine_mode tmode,
    enum expand_modifier modifier, rtx *alt_rtl)
{
  int rn = -1;
  rtx ret, last = ((void *)0);
  if (((enum tree_code) (exp)->common.code) == ERROR_MARK
      || ((enum tree_code) (((exp)->common.type))->common.code) == ERROR_MARK)
    {
      ret = (const_tiny_rtx[0][(int) (tmode)]);
      return ret ? ret : (const_int_rtx[64]);
    }
  if (flag_non_call_exceptions)
    {
      rn = lookup_stmt_eh_region (exp);
      if (rn >= 0)
 last = get_last_insn ();
    }
  if (cfun && (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (exp)->common.code))])) != 0) ? (exp)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    {
      location_t saved_location = input_location;
      input_location = ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (exp)->common.code))])) != 0) ? (exp)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) ? *(exp)->exp.locus : unknown_location);
      emit_line_note (input_location);
      record_block_change (((exp)->exp.block));
      ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl);
      input_location = saved_location;
    }
  else
    {
      ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl);
    }
  if (rn >= 0)
    {
      rtx insn;
      for (insn = next_real_insn (last); insn;
    insn = next_real_insn (insn))
 {
   if (! find_reg_note (insn, REG_EH_REGION, (rtx) 0)
       && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != CLOBBER
       && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE
       && (((enum rtx_code) (insn)->code) == CALL_INSN || may_trap_p ((((insn)->u.fld[5]).rtx1))))
     {
       (((insn)->u.fld[8]).rtx1) = alloc_EXPR_LIST (REG_EH_REGION, gen_rtx_CONST_INT (VOIDmode, (long) (rn)),
        (((insn)->u.fld[8]).rtx1));
     }
 }
    }
  return ret;
}
static rtx
expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
      enum expand_modifier modifier, rtx *alt_rtl)
{
  rtx op0, op1, temp;
  tree type = ((exp)->common.type);
  int unsignedp;
  enum machine_mode mode;
  enum tree_code code = ((enum tree_code) (exp)->common.code);
  optab this_optab;
  rtx subtarget, original_target;
  int ignore;
  tree context;
  mode = ((type)->type.mode);
  unsignedp = ((type)->common.unsigned_flag);
  subtarget = get_subtarget (target);
  original_target = target;
  ignore = (target == (const_int_rtx[64])
     || ((code == NON_LVALUE_EXPR || code == NOP_EXPR
   || code == CONVERT_EXPR || code == REFERENCE_EXPR
   || code == COND_EXPR || code == VIEW_CONVERT_EXPR)
  && ((enum tree_code) (type)->common.code) == VOID_TYPE));
  if (ignore)
    {
      if (! ((exp)->common.side_effects_flag))
 return (const_int_rtx[64]);
      if (((exp)->common.volatile_flag)
   && ((enum tree_code) (exp)->common.code) != FUNCTION_DECL
   && mode != VOIDmode && mode != BLKmode
   && modifier != EXPAND_CONST_ADDRESS)
 {
   temp = expand_expr (exp, (rtx) 0, VOIDmode, modifier);
   if ((((enum rtx_code) (temp)->code) == MEM))
     temp = copy_to_reg (temp);
   return (const_int_rtx[64]);
 }
      if (tree_code_type[(int) (code)] == '1' || code == COMPONENT_REF
   || code == INDIRECT_REF || code == BUFFER_REF)
 return expand_expr (((exp)->exp.operands[0]), (const_int_rtx[64]), VOIDmode,
       modifier);
      else if (tree_code_type[(int) (code)] == '2' || tree_code_type[(int) (code)] == '<'
        || code == ARRAY_REF || code == ARRAY_RANGE_REF)
 {
   expand_expr (((exp)->exp.operands[0]), (const_int_rtx[64]), VOIDmode, modifier);
   expand_expr (((exp)->exp.operands[1]), (const_int_rtx[64]), VOIDmode, modifier);
   return (const_int_rtx[64]);
 }
      else if ((code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)
        && ! ((((exp)->exp.operands[1]))->common.side_effects_flag))
 return expand_expr (((exp)->exp.operands[0]), (const_int_rtx[64]), VOIDmode,
       modifier);
      else if (code == BIT_FIELD_REF)
 {
   expand_expr (((exp)->exp.operands[0]), (const_int_rtx[64]), VOIDmode, modifier);
   expand_expr (((exp)->exp.operands[1]), (const_int_rtx[64]), VOIDmode, modifier);
   expand_expr (((exp)->exp.operands[2]), (const_int_rtx[64]), VOIDmode, modifier);
   return (const_int_rtx[64]);
 }
      target = 0;
    }
  if (! cse_not_expected && mode != BLKmode && target
      && (!(((enum rtx_code) (target)->code) == REG) || (((target)->u.fld[0]).rtuint) < 53)
      && ! (code == CONSTRUCTOR && ((unsigned short) mode_size[mode]) > (0 ? 8 : 4))
      && ! (code == CALL_EXPR && aggregate_value_p (exp, exp)))
    target = 0;
  switch (code)
    {
    case LABEL_DECL:
      {
 tree function = decl_function_context (exp);
 temp = label_rtx (exp);
 temp = gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (temp));
 if (function != current_function_decl
     && function != 0)
   (((temp))->volatil) = 1;
 temp = gen_rtx_MEM (QImode, temp);
 return temp;
      }
    case PARM_DECL:
      if (!((exp)->decl.rtl != ((void *)0)))
 {
   error ("%Jprior parameter's size depends on '%D'", exp, exp);
   return (const_tiny_rtx[0][(int) (mode)]);
 }
    case VAR_DECL:
      if (((exp)->decl.size) == 0
   && ((((((enum tree_code) (((exp)->common.type))->common.code) == ARRAY_TYPE ? ((((exp)->common.type))->common.type) : (((exp)->common.type)))->type.size) != (tree) ((void *)0)))
   && (((exp)->common.static_flag) || ((exp)->decl.external_flag)))
 layout_decl (exp, 0);
    case FUNCTION_DECL:
    case RESULT_DECL:
      if (((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)) == 0)
 abort ();
      if (! ((exp)->common.used_flag))
 {
   assemble_external (exp);
   ((exp)->common.used_flag) = 1;
 }
      temp = 0;
      context = decl_function_context (exp);
      if (context != 0 && context != current_function_decl
   && ! ((((enum rtx_code) (((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->code) == MEM)
  && ((rtx_class[(int) (((enum rtx_code) ((((((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->u.fld[0]).rtx1))->code) == CONST_VECTOR)))
 {
   rtx addr;
   ((exp)->decl.nonlocal_flag) = 1;
   if (((current_function_decl)->decl.regdecl_flag))
     abort ();
   lang_hooks.mark_addressable (exp);
   if (!(((enum rtx_code) (((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->code) == MEM))
     abort ();
   addr = (((((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->u.fld[0]).rtx1);
   if ((((enum rtx_code) (addr)->code) == MEM))
     addr
       = replace_equiv_address (addr,
           fix_lexical_addr ((((addr)->u.fld[0]).rtx1), exp));
   else
     addr = fix_lexical_addr (addr, exp);
   temp = replace_equiv_address (((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)), addr);
 }
      else if ((((enum rtx_code) (((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->code) == MEM)
        && (((enum rtx_code) ((((((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->u.fld[0]).rtx1))->code) == REG))
 temp = validize_mem (((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)));
      else if ((((enum rtx_code) (((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->code) == MEM)
        && modifier != EXPAND_CONST_ADDRESS
        && modifier != EXPAND_SUM
        && modifier != EXPAND_INITIALIZER
        && (! memory_address_p (((exp)->decl.mode),
           (((((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->u.fld[0]).rtx1))
     || (flag_force_addr
         && !(((enum rtx_code) ((((((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->u.fld[0]).rtx1))->code) == REG))))
 {
   if (alt_rtl)
     *alt_rtl = ((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl));
   temp = replace_equiv_address (((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)),
     copy_rtx ((((((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->u.fld[0]).rtx1)));
 }
      if (temp != 0)
 {
   if ((((enum rtx_code) (temp)->code) == MEM) && (((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code) == REG))
     mark_reg_pointer ((((temp)->u.fld[0]).rtx1), ((exp)->decl.u1.a.align));
   return temp;
 }
      if ((((enum rtx_code) (((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->code) == REG)
   && ((enum machine_mode) (((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->mode) != ((exp)->decl.mode))
 {
   if (((enum machine_mode) (((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)))->mode)
       != promote_mode (type, ((exp)->decl.mode), &unsignedp,
          (((enum tree_code) (exp)->common.code) == RESULT_DECL ? 1 : 0)))
     abort ();
   temp = gen_lowpart_SUBREG (mode, ((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl)));
   (((temp))->in_struct) = 1;
   do { rtx const _rtx = ((temp)); if ((unsignedp) < 0) _rtx->volatil = 1; else { _rtx->volatil = 0; _rtx->unchanging = (unsignedp); } } while (0);
   return temp;
 }
      return ((exp)->decl.rtl ? (exp)->decl.rtl : (make_decl_rtl (exp, ((void *)0)), (exp)->decl.rtl));
    case INTEGER_CST:
      temp = immed_double_const ((((exp)->int_cst.int_cst).low),
     (((exp)->int_cst.int_cst).high), mode);
      if (((exp)->common.static_flag)
   && modifier != EXPAND_INITIALIZER)
 temp = force_reg (mode, temp);
      return temp;
    case VECTOR_CST:
      return const_vector_from_tree (exp);
    case CONST_DECL:
      return expand_expr (((exp)->decl.initial), target, VOIDmode, modifier);
    case REAL_CST:
      return const_double_from_real_value ((*((exp)->real_cst.real_cst_ptr)), ((((exp)->common.type))->type.mode))
                                    ;
    case COMPLEX_CST:
      if (original_target && ((enum rtx_code) (original_target)->code) == CONCAT)
 {
   enum machine_mode mode = ((((((exp)->common.type))->common.type))->type.mode);
   rtx rtarg, itarg;
   rtarg = (((original_target)->u.fld[0]).rtx1);
   itarg = (((original_target)->u.fld[1]).rtx1);
   op0 = expand_expr (((exp)->complex.real), rtarg, mode, 0);
   op1 = expand_expr (((exp)->complex.imag), itarg, mode, 0);
   if (op0 != rtarg)
     emit_move_insn (rtarg, op0);
   if (op1 != itarg)
     emit_move_insn (itarg, op1);
   return original_target;
 }
    case STRING_CST:
      temp = output_constant_def (exp, 1);
      if (modifier != EXPAND_CONST_ADDRESS
   && modifier != EXPAND_INITIALIZER
   && modifier != EXPAND_SUM
   && (! memory_address_p (mode, (((temp)->u.fld[0]).rtx1))
       || flag_force_addr))
 return replace_equiv_address (temp,
          copy_rtx ((((temp)->u.fld[0]).rtx1)));
      return temp;
    case SAVE_EXPR:
      {
 tree val = ((exp)->exp.operands[0]);
 rtx ret = expand_expr_real_1 (val, target, tmode, modifier, alt_rtl);
 if (((enum tree_code) (val)->common.code) != VAR_DECL || !((val)->decl.artificial_flag))
   {
     if (((enum machine_mode) (ret)->mode) == BLKmode)
       abort ();
     val = build_decl_stat (VAR_DECL,((void *)0),((exp)->common.type) );
     ((val)->decl.artificial_flag) = 1;
     ((exp)->exp.operands[0]) = val;
     if (!((rtx_class[(int) (((enum rtx_code) (ret)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (ret)->code) == CONST_VECTOR))
       ret = copy_to_reg (ret);
     set_decl_rtl (val, ret);
   }
        return ret;
      }
    case UNSAVE_EXPR:
      {
 rtx temp;
 temp = expand_expr (((exp)->exp.operands[0]), target, tmode, modifier);
 ((exp)->exp.operands[0])
   = lang_hooks.unsave_expr_now (((exp)->exp.operands[0]));
 return temp;
      }
    case GOTO_EXPR:
      if (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == LABEL_DECL)
 expand_goto (((exp)->exp.operands[0]));
      else
 expand_computed_goto (((exp)->exp.operands[0]));
      return (const_int_rtx[64]);
    case LOOP_EXPR:
    case EXIT_EXPR:
      abort ();
    case LABELED_BLOCK_EXPR:
      if (((exp)->exp.operands[1]))
 expand_expr_stmt (((exp)->exp.operands[1]));
      do_pending_stack_adjust ();
      emit_label (label_rtx (((exp)->exp.operands[0])));
      return (const_int_rtx[64]);
    case EXIT_BLOCK_EXPR:
      if (((exp)->exp.operands[1]))
 sorry ("returned value in block_exit_expr");
      expand_goto (((((exp)->exp.operands[0]))->exp.operands[0]));
      return (const_int_rtx[64]);
    case BIND_EXPR:
      {
 tree block = ((((exp))->exp.operands[2]));
 int mark_ends;
 mark_ends = (block != (tree) ((void *)0));
 expand_start_bindings_and_block (mark_ends ? 0 : 2, block);
 expand_vars (((((exp))->exp.operands[0])));
 temp = expand_expr (((((exp))->exp.operands[1])),
       ignore ? (const_int_rtx[64]) : target,
       tmode, modifier);
 expand_end_bindings (((((exp))->exp.operands[0])), mark_ends, 0);
 return temp;
      }
    case CONSTRUCTOR:
      if (ignore)
 {
   tree elt;
   for (elt = ((exp)->exp.operands[0]); elt; elt = ((elt)->common.chain))
     expand_expr (((elt)->list.value1), (const_int_rtx[64]), VOIDmode, 0);
   return (const_int_rtx[64]);
 }
      else if ((((exp)->common.static_flag)
  && ((mode == BLKmode
       && ! (target != 0 && safe_from_p (target, exp, 1)))
      || ((exp)->common.addressable_flag)
      || (host_integerp (((type)->type.size_unit), 1)
   && (! (move_by_pieces_ninsns (tree_low_cst (((type)->type.size_unit), 1), ((type)->type.align)) < (unsigned int) (optimize_size ? 3 : ix86_cost->move_ratio))
                          )
   && ! mostly_zeros_p (exp))))
        || ((modifier == EXPAND_INITIALIZER
      || modifier == EXPAND_CONST_ADDRESS)
     && ((exp)->common.constant_flag)))
 {
   rtx constructor = output_constant_def (exp, 1);
   if (modifier != EXPAND_CONST_ADDRESS
       && modifier != EXPAND_INITIALIZER
       && modifier != EXPAND_SUM)
     constructor = validize_mem (constructor);
   return constructor;
 }
      else
 {
   if (target == 0 || ! safe_from_p (target, exp, 1)
       || ((enum rtx_code) (target)->code) == PARALLEL
       || modifier == EXPAND_STACK_PARM)
     target
       = assign_temp (build_qualified_type (type,
         (((((type)->common.readonly_flag) * 0x1) | (((type)->common.volatile_flag) * 0x2) | (((type)->type.restrict_flag) * 0x4))
          | (((exp)->common.readonly_flag)
             * 0x1))),
        0, ((exp)->common.addressable_flag), 1);
   store_constructor (exp, target, 0, int_expr_size (exp));
   return target;
 }
    case INDIRECT_REF:
      {
 tree exp1 = ((exp)->exp.operands[0]);
 if (modifier != EXPAND_WRITE)
   {
     tree t;
     t = fold_read_from_constant_string (exp);
     if (t)
       return expand_expr (t, target, tmode, modifier);
   }
 op0 = expand_expr (exp1, (rtx) 0, VOIDmode, EXPAND_SUM);
 op0 = memory_address (mode, op0);
 temp = gen_rtx_MEM (mode, op0);
 set_mem_attributes (temp, exp, 0);
 if (modifier == EXPAND_WRITE && readonly_fields_p (type))
   (((temp))->unchanging) = 1;
 return temp;
      }
    case ARRAY_REF:
      {
 tree array = ((exp)->exp.operands[0]);
 tree low_bound = array_ref_low_bound (exp);
 tree index = convert (sizetype_tab[(int) SIZETYPE], ((exp)->exp.operands[1]));
 long i;
 if (! integer_zerop (low_bound))
   index = size_diffop (index, convert (sizetype_tab[(int) SIZETYPE], low_bound));
 if (modifier != EXPAND_CONST_ADDRESS
     && modifier != EXPAND_INITIALIZER
     && modifier != EXPAND_MEMORY)
   {
     tree t = fold_read_from_constant_string (exp);
     if (t)
       return expand_expr (t, target, tmode, modifier);
   }
 if (modifier != EXPAND_CONST_ADDRESS
     && modifier != EXPAND_INITIALIZER
     && modifier != EXPAND_MEMORY
     && ((enum tree_code) (array)->common.code) == CONSTRUCTOR
     && ! ((array)->common.side_effects_flag)
     && ((enum tree_code) (index)->common.code) == INTEGER_CST
     && 0 > compare_tree_int (index,
         list_length (((((exp)->exp.operands[0]))->exp.operands[0])
                               )))
   {
     tree elem;
     for (elem = ((((exp)->exp.operands[0]))->exp.operands[0]),
   i = (((index)->int_cst.int_cst).low);
   elem != 0 && i != 0; i--, elem = ((elem)->common.chain))
       ;
     if (elem)
       return expand_expr (fold (((elem)->list.value1)), target, tmode,
      modifier);
   }
 else if (optimize >= 1
   && modifier != EXPAND_CONST_ADDRESS
   && modifier != EXPAND_INITIALIZER
   && modifier != EXPAND_MEMORY
   && ((array)->common.readonly_flag) && ! ((array)->common.side_effects_flag)
   && ((enum tree_code) (array)->common.code) == VAR_DECL && ((array)->decl.initial)
   && ((enum tree_code) (((array)->decl.initial))->common.code) != ERROR_MARK
   && targetm.binds_local_p (array))
   {
     if (((enum tree_code) (index)->common.code) == INTEGER_CST)
       {
  tree init = ((array)->decl.initial);
  if (((enum tree_code) (init)->common.code) == CONSTRUCTOR)
    {
      tree elem;
      for (elem = ((init)->exp.operands[0]);
    (elem
     && !tree_int_cst_equal (((elem)->list.purpose), index));
    elem = ((elem)->common.chain))
        ;
      if (elem && !((((elem)->list.value1))->common.side_effects_flag))
        return expand_expr (fold (((elem)->list.value1)), target,
       tmode, modifier);
    }
  else if (((enum tree_code) (init)->common.code) == STRING_CST
    && 0 > compare_tree_int (index,
        ((init)->string1.length)))
    {
      tree type = ((((init)->common.type))->common.type);
      enum machine_mode mode = ((type)->type.mode);
      if (mode_class[mode] == MODE_INT
   && ((unsigned short) mode_size[mode]) == 1)
        return gen_int_mode (((init)->string1.pointer)
        [(((index)->int_cst.int_cst).low)], mode);
    }
       }
   }
      }
      goto normal_inner_ref;
    case COMPONENT_REF:
      if (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == CONSTRUCTOR)
 {
   tree elt;
   for (elt = ((((exp)->exp.operands[0]))->exp.operands[0]); elt;
        elt = ((elt)->common.chain))
     if (((elt)->list.purpose) == ((exp)->exp.operands[1])
  && (! ((((elt)->list.purpose))->decl.bit_field_flag)
      || ((mode_class[((((elt)->list.purpose))->decl.mode)]
    == MODE_INT)
   && (((unsigned short) (((unsigned short) mode_size[((((elt)->list.purpose))->decl.mode)]) * 8))
       <= (8 * 4)))))
       {
  if (((((elt)->list.purpose))->decl.bit_field_flag)
      && modifier == EXPAND_STACK_PARM)
    target = 0;
  op0 = expand_expr (((elt)->list.value1), target, tmode, modifier);
  if (((((elt)->list.purpose))->decl.bit_field_flag))
    {
      long bitsize
        = (((((((elt)->list.purpose))->decl.size))->int_cst.int_cst).low);
      enum machine_mode imode
        = ((((((elt)->list.purpose))->common.type))->type.mode);
      if (((((((elt)->list.purpose))->common.type))->common.unsigned_flag))
        {
   op1 = gen_rtx_CONST_INT (VOIDmode, (long) (((long) 1 << bitsize) - 1));
   op0 = expand_and (imode, op0, op1, target);
        }
      else
        {
   tree count
     = build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[imode]) * 8)) - bitsize), (long) (0))
        ;
   op0 = expand_shift (LSHIFT_EXPR, imode, op0, count,
         target, 0);
   op0 = expand_shift (RSHIFT_EXPR, imode, op0, count,
         target, 0);
        }
    }
  return op0;
       }
 }
      goto normal_inner_ref;
    case BIT_FIELD_REF:
    case ARRAY_RANGE_REF:
    normal_inner_ref:
      {
 enum machine_mode mode1;
 long bitsize, bitpos;
 tree offset;
 int volatilep = 0;
 tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
     &mode1, &unsignedp, &volatilep);
 rtx orig_op0;
 if (tem == exp)
   abort ();
 orig_op0 = op0
   = expand_expr (tem,
    (((enum tree_code) (((tem)->common.type))->common.code) == UNION_TYPE
     && (((enum tree_code) (((((tem)->common.type))->type.size))->common.code)
         != INTEGER_CST)
     && modifier != EXPAND_STACK_PARM
     ? target : (rtx) 0),
    VOIDmode,
    (modifier == EXPAND_INITIALIZER
     || modifier == EXPAND_CONST_ADDRESS
     || modifier == EXPAND_STACK_PARM)
    ? modifier : EXPAND_NORMAL);
 if (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
   {
     enum machine_mode mode = ((((tem)->common.type))->type.mode);
     if (mode != BLKmode && legitimate_constant_p (op0)
  && offset == 0)
       op0 = force_reg (mode, op0);
     else
       op0 = validize_mem (force_const_mem (mode, op0));
   }
 else if (!(((enum rtx_code) (op0)->code) == MEM)
   && (offset != 0
       || (code == ARRAY_RANGE_REF && mode == BLKmode)))
   {
     tree nt = build_qualified_type (((tem)->common.type),
         (((((((tem)->common.type))->common.readonly_flag) * 0x1) | (((((tem)->common.type))->common.volatile_flag) * 0x2) | (((((tem)->common.type))->type.restrict_flag) * 0x4))
          | 0x1));
     rtx memloc = assign_temp (nt, 1, 1, 1);
     emit_move_insn (memloc, op0);
     op0 = memloc;
   }
 if (offset != 0)
   {
     rtx offset_rtx = expand_expr (offset, (rtx) 0, VOIDmode,
       EXPAND_SUM);
     if (!(((enum rtx_code) (op0)->code) == MEM))
       abort ();
     if (((enum machine_mode) (offset_rtx)->mode) != ptr_mode)
       offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0);
     if (((enum machine_mode) (op0)->mode) == BLKmode
  && ((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode) != VOIDmode
  && bitsize != 0
  && (bitpos % bitsize) == 0
  && (bitsize % get_mode_alignment (mode1)) == 0
  && ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8)) == get_mode_alignment (mode1))
       {
  op0 = adjust_address_1 (op0, mode1, bitpos / 8, 1, 1);
  bitpos = 0;
       }
     op0 = offset_address (op0, offset_rtx,
      highest_pow2_factor (offset));
   }
 if ((((enum rtx_code) (op0)->code) == MEM) && bitpos == 0 && offset != 0
     && is_aligning_offset (offset, tem))
   set_mem_align (op0, 128);
 if ((((enum rtx_code) (op0)->code) == MEM) && volatilep && ! (((op0))->volatil))
   {
     if (op0 == orig_op0)
       op0 = copy_rtx (op0);
     (((op0))->volatil) = 1;
   }
 if (((enum rtx_code) (op0)->code) == CONCAT)
   {
     if (bitpos != 0 || bitsize != ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)))
       abort ();
     return op0;
   }
 if (mode1 == VOIDmode
     || (((enum rtx_code) (op0)->code) == REG) || ((enum rtx_code) (op0)->code) == SUBREG
     || (mode1 != BLKmode && ! direct_load[(int) mode1]
  && mode_class[mode] != MODE_COMPLEX_INT
  && mode_class[mode] != MODE_COMPLEX_FLOAT
  && modifier != EXPAND_CONST_ADDRESS
  && modifier != EXPAND_INITIALIZER)
     || (mode1 != BLKmode
  && (((((((tem)->common.type))->type.align) < get_mode_alignment (mode)
        || (bitpos % get_mode_alignment (mode) != 0)
        || ((((enum rtx_code) (op0)->code) == MEM)
     && (((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8)) < get_mode_alignment (mode1)
         || (bitpos % get_mode_alignment (mode1) != 0))))
       && ((modifier == EXPAND_CONST_ADDRESS
     || modifier == EXPAND_INITIALIZER)
    ? 0
    : 0))
      || (bitpos % 8 != 0)))
     || (bitsize >= 0
  && (((enum tree_code) (((((exp)->common.type))->type.size))->common.code)
      == INTEGER_CST)
  && 0 != compare_tree_int (((((exp)->common.type))->type.size),
       bitsize)))
   {
     enum machine_mode ext_mode = mode;
     if (ext_mode == BLKmode
  && ! (target != 0 && (((enum rtx_code) (op0)->code) == MEM)
        && (((enum rtx_code) (target)->code) == MEM)
        && bitpos % 8 == 0))
       ext_mode = mode_for_size (bitsize, MODE_INT, 1);
     if (ext_mode == BLKmode)
       {
  if (target == 0)
    target = assign_temp (type, 0, 1, 1);
  if (bitsize == 0)
    return target;
  if (!(((enum rtx_code) (op0)->code) == MEM)
      || (target != 0 && !(((enum rtx_code) (target)->code) == MEM))
      || bitpos % 8 != 0)
    abort ();
  emit_block_move (target,
     adjust_address_1 (op0, VOIDmode, bitpos / 8, 1, 1)
                              ,
     gen_rtx_CONST_INT (VOIDmode, (long) ((bitsize + 8 - 1) / 8))
                       ,
     (modifier == EXPAND_STACK_PARM
      ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
  return target;
       }
     op0 = validize_mem (op0);
     if ((((enum rtx_code) (op0)->code) == MEM) && (((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == REG))
       mark_reg_pointer ((((op0)->u.fld[0]).rtx1), ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8)));
     op0 = extract_bit_field (op0, bitsize, bitpos, unsignedp,
         (modifier == EXPAND_STACK_PARM
          ? (rtx) 0 : target),
         ext_mode, ext_mode,
         int_size_in_bytes (((tem)->common.type)));
     if (((enum tree_code) (type)->common.code) == RECORD_TYPE && 0
  && mode_class[((enum machine_mode) (op0)->mode)] == MODE_INT
  && bitsize < (long) ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)))
       op0 = expand_shift (LSHIFT_EXPR, ((enum machine_mode) (op0)->mode), op0,
      size_int_wide ((long) (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)) - bitsize), SIZETYPE)
                   ,
      op0, 1);
     if (mode == BLKmode)
       {
  rtx new
    = assign_stack_temp_for_type
      (ext_mode, ((unsigned short) (((unsigned short) mode_size[ext_mode]) * 8)), 0, type);
  emit_move_insn (new, op0);
  op0 = copy_rtx (new);
  ((op0)->mode = (BLKmode));
  set_mem_attributes (op0, exp, 1);
       }
     return op0;
   }
 if (mode == BLKmode)
   mode1 = BLKmode;
 if (modifier == EXPAND_CONST_ADDRESS
     || modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER)
   op0 = adjust_address_1 (op0, mode1, bitpos / 8, 0, 1);
 else
   op0 = adjust_address_1 (op0, mode1, bitpos / 8, 1, 1);
 if (op0 == orig_op0)
   op0 = copy_rtx (op0);
 set_mem_attributes (op0, exp, 0);
 if ((((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == REG))
   mark_reg_pointer ((((op0)->u.fld[0]).rtx1), ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8)));
 (((op0))->volatil) |= volatilep;
 if (mode == mode1 || mode1 == BLKmode || mode1 == tmode
     || modifier == EXPAND_CONST_ADDRESS
     || modifier == EXPAND_INITIALIZER)
   return op0;
 else if (target == 0)
   target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode);
 convert_move (target, op0, unsignedp);
 return target;
      }
    case OBJ_TYPE_REF:
      return expand_expr ((((exp))->exp.operands[0]), target, tmode, modifier);
    case BUFFER_REF:
      abort ();
    case IN_EXPR:
      {
 tree set = ((exp)->exp.operands[0]);
 tree index = ((exp)->exp.operands[1]);
 int iunsignedp = ((((index)->common.type))->common.unsigned_flag);
 tree set_type = ((set)->common.type);
 tree set_low_bound = ((((set_type)->type.value1s))->type.minval);
 tree set_high_bound = ((((set_type)->type.value1s))->type.maxval);
 rtx index_val = expand_expr (index, 0, VOIDmode, 0);
 rtx lo_r = expand_expr (set_low_bound, 0, VOIDmode, 0);
 rtx hi_r = expand_expr (set_high_bound, 0, VOIDmode, 0);
 rtx setval = expand_expr (set, 0, VOIDmode, 0);
 rtx setaddr = (((setval)->u.fld[0]).rtx1);
 enum machine_mode index_mode = ((((index)->common.type))->type.mode);
 rtx rlow;
 rtx diff, quo, rem, addr, bit, result;
 if (((((enum tree_code) (set_high_bound)->common.code) == INTEGER_CST
      && ((enum tree_code) (set_low_bound)->common.code) == INTEGER_CST
      && tree_int_cst_lt (set_high_bound, set_low_bound))
      || (((enum tree_code) (index)->common.code) == INTEGER_CST
   && ((enum tree_code) (set_low_bound)->common.code) == INTEGER_CST
   && tree_int_cst_lt (index, set_low_bound))
      || (((enum tree_code) (set_high_bound)->common.code) == INTEGER_CST
   && ((enum tree_code) (index)->common.code) == INTEGER_CST
   && tree_int_cst_lt (set_high_bound, index))))
   return (const_int_rtx[64]);
 if (target == 0)
   target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode);
 op0 = gen_label_rtx ();
 op1 = gen_label_rtx ();
 if (! (((enum rtx_code) (index_val)->code) == CONST_INT
        && ((enum rtx_code) (lo_r)->code) == CONST_INT))
   emit_cmp_and_jump_insns (index_val, lo_r, LT, (rtx) 0,
       ((enum machine_mode) (index_val)->mode), iunsignedp, op1);
 if (! (((enum rtx_code) (index_val)->code) == CONST_INT
        && ((enum rtx_code) (hi_r)->code) == CONST_INT))
   emit_cmp_and_jump_insns (index_val, hi_r, GT, (rtx) 0,
       ((enum machine_mode) (index_val)->mode), iunsignedp, op1);
 if (((enum rtx_code) (lo_r)->code) == CONST_INT)
   rlow = gen_rtx_CONST_INT (VOIDmode, (long) (((lo_r)->u.hwint[0]) & ~((long) 1 << 8)))
                                             ;
 else
   rlow = expand_binop (index_mode, (optab_table[OTI_and]), lo_r,
          gen_rtx_CONST_INT (VOIDmode, (long) (~((long) 1 << 8))),
          (rtx) 0, iunsignedp, OPTAB_LIB_WIDEN);
 diff = expand_binop (index_mode, (optab_table[OTI_sub]), index_val, rlow,
        (rtx) 0, iunsignedp, OPTAB_LIB_WIDEN);
 quo = expand_divmod (0, TRUNC_DIV_EXPR, index_mode, diff,
        gen_rtx_CONST_INT (VOIDmode, (long) (8)), (rtx) 0, iunsignedp);
 rem = expand_divmod (1, TRUNC_MOD_EXPR, index_mode, index_val,
        gen_rtx_CONST_INT (VOIDmode, (long) (8)), (rtx) 0, iunsignedp);
 addr = memory_address (byte_mode,
          expand_binop (index_mode, (optab_table[OTI_add]), diff,
          setaddr, (rtx) 0, iunsignedp,
          OPTAB_LIB_WIDEN));
 bit = expand_shift (RSHIFT_EXPR, byte_mode,
       gen_rtx_MEM (byte_mode, addr),
       make_tree (((index)->common.type), rem),
       (rtx) 0, 1);
 result = expand_binop (byte_mode, (optab_table[OTI_and]), bit, (const_int_rtx[64 +1]),
          ((enum machine_mode) (target)->mode) == byte_mode ? target : 0,
          1, OPTAB_LIB_WIDEN);
 if (result != target)
   convert_move (target, result, 1);
 emit_jump (op0);
 emit_label (op1);
 emit_move_insn (target, (const_int_rtx[64]));
 emit_label (op0);
 return target;
      }
    case WITH_CLEANUP_EXPR:
      if ((*(rtx *) &((exp)->exp.operands[2])) == 0)
 {
   (*(rtx *) &((exp)->exp.operands[2]))
     = expand_expr (((exp)->exp.operands[0]), target, tmode, modifier);
   expand_decl_cleanup_eh ((tree) ((void *)0), ((exp)->exp.operands[1]),
      ((exp)->common.static_flag));
   ((exp)->exp.operands[1]) = 0;
 }
      return (*(rtx *) &((exp)->exp.operands[2]));
    case CLEANUP_POINT_EXPR:
      {
 expand_start_bindings_and_block(2, (tree) ((void *)0));
 (cfun->x_target_temp_slot_level) = (cfun->x_temp_slot_level);
 op0 = expand_expr (((exp)->exp.operands[0]), target, tmode, modifier);
 if (! ignore)
   op0 = force_not_mem (op0);
 preserve_temp_slots (op0);
 expand_end_bindings ((tree) ((void *)0), 0, 0);
      }
      return op0;
    case CALL_EXPR:
      if (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == ADDR_EXPR
   && (((enum tree_code) (((((exp)->exp.operands[0]))->exp.operands[0]))->common.code)
       == FUNCTION_DECL)
   && (((((((exp)->exp.operands[0]))->exp.operands[0]))->decl.built_in_class) != NOT_BUILT_IN))
 {
   if (((((((exp)->exp.operands[0]))->exp.operands[0]))->decl.built_in_class)
       == BUILT_IN_FRONTEND)
     return lang_hooks.expand_expr (exp, original_target,
        tmode, modifier,
        alt_rtl);
   else
     return expand_builtin (exp, target, subtarget, tmode, ignore);
 }
      return expand_call (exp, target, ignore);
    case NON_LVALUE_EXPR:
    case NOP_EXPR:
    case CONVERT_EXPR:
    case REFERENCE_EXPR:
      if (((exp)->exp.operands[0]) == global_trees[TI_ERROR_MARK])
 return (const_int_rtx[64]);
      if (((enum tree_code) (type)->common.code) == UNION_TYPE)
 {
   tree valtype = ((((exp)->exp.operands[0]))->common.type);
   if (mode == BLKmode && ((valtype)->type.mode) == BLKmode)
     {
       rtx result = expand_expr (((exp)->exp.operands[0]), target, tmode,
     modifier);
       result = copy_rtx (result);
       set_mem_attributes (result, exp, 0);
       return result;
     }
   if (target == 0)
     {
       if (((type)->type.mode) != BLKmode)
  target = gen_reg_rtx (((type)->type.mode));
       else
  target = assign_temp (type, 0, 1, 1);
     }
   if ((((enum rtx_code) (target)->code) == MEM))
     store_expr (((exp)->exp.operands[0]),
   adjust_address_1 (target, ((valtype)->type.mode), 0, 1, 1),
   modifier == EXPAND_STACK_PARM ? 2 : 0);
   else if ((((enum rtx_code) (target)->code) == REG))
     store_field (target,
    (((int_size_in_bytes (((((exp)->exp.operands[0]))->common.type)) * 8)) < ((long) ((unsigned short) (((unsigned short) mode_size[mode]) * 8))) ? ((int_size_in_bytes (((((exp)->exp.operands[0]))->common.type)) * 8)) : ((long) ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))
                                                 ,
    0, ((valtype)->type.mode), ((exp)->exp.operands[0]),
    VOIDmode, 0, type, 0);
   else
     abort ();
   return target;
 }
      if (mode == ((((((exp)->exp.operands[0]))->common.type))->type.mode))
 {
   op0 = expand_expr (((exp)->exp.operands[0]), target, VOIDmode,
        modifier);
   if (((((((exp)->exp.operands[0]))->common.type))->common.unsigned_flag) != unsignedp
       && ((enum rtx_code) (op0)->code) == SUBREG)
     (((op0))->in_struct) = 0;
   return op0;
 }
      op0 = expand_expr (((exp)->exp.operands[0]), (rtx) 0, mode, modifier);
      if (((enum machine_mode) (op0)->mode) == mode)
 return op0;
      if (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
 {
   tree inner_type = ((((exp)->exp.operands[0]))->common.type);
   enum machine_mode inner_mode = ((inner_type)->type.mode);
   if (modifier == EXPAND_INITIALIZER)
     return simplify_gen_subreg (mode, op0, inner_mode,
     subreg_lowpart_offset (mode,
              inner_mode));
   else
     return convert_modes (mode, inner_mode, op0,
      ((inner_type)->common.unsigned_flag));
 }
      if (modifier == EXPAND_INITIALIZER)
 return gen_rtx_fmt_e (unsignedp ? ZERO_EXTEND : SIGN_EXTEND, mode, op0);
      if (target == 0)
 return
   convert_to_mode (mode, op0,
      ((((((exp)->exp.operands[0]))->common.type))->common.unsigned_flag));
      else
 convert_move (target, op0,
        ((((((exp)->exp.operands[0]))->common.type))->common.unsigned_flag));
      return target;
    case VIEW_CONVERT_EXPR:
      op0 = expand_expr (((exp)->exp.operands[0]), (rtx) 0, mode, modifier);
      if (((type)->type.mode) == ((enum machine_mode) (op0)->mode))
 ;
      else if (((type)->type.mode) != BLKmode && ((enum machine_mode) (op0)->mode) != BLKmode
        && mode_class[((enum machine_mode) (op0)->mode)] == MODE_INT
        && mode_class[((type)->type.mode)] == MODE_INT
        && ((unsigned short) mode_size[((type)->type.mode)]) <= (0 ? 8 : 4)
        && ((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) <= (0 ? 8 : 4))
 op0 = rtl_hooks.gen_lowpart (((type)->type.mode), op0);
      else if (!(((enum rtx_code) (op0)->code) == MEM))
 {
   tree inner_type = ((((exp)->exp.operands[0]))->common.type);
   if (((exp)->common.addressable_flag))
     abort ();
   if (target == 0 || ((enum machine_mode) (target)->mode) != ((inner_type)->type.mode))
     target
       = assign_stack_temp_for_type
  (((inner_type)->type.mode),
   ((unsigned short) mode_size[((inner_type)->type.mode)]), 0, inner_type);
   emit_move_insn (target, op0);
   op0 = target;
 }
      if ((((enum rtx_code) (op0)->code) == MEM))
 {
   op0 = copy_rtx (op0);
   if (((type)->common.nothrow_flag))
     set_mem_align (op0, ((((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8))) > (((type)->type.align)) ? (((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8))) : (((type)->type.align))));
   else if (((type)->type.mode) != BLKmode && 0
     && ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8)) < get_mode_alignment (((type)->type.mode)))
     {
       tree inner_type = ((((exp)->exp.operands[0]))->common.type);
       long temp_size
  = ((int_size_in_bytes (inner_type)) > ((long) ((unsigned short) mode_size[((type)->type.mode)])) ? (int_size_in_bytes (inner_type)) : ((long) ((unsigned short) mode_size[((type)->type.mode)])))
                                                          ;
       rtx new = assign_stack_temp_for_type (((type)->type.mode),
          temp_size, 0, type);
       rtx new_with_op0_mode = adjust_address_1 (new, ((enum machine_mode) (op0)->mode), 0, 1, 1);
       if (((exp)->common.addressable_flag))
  abort ();
       if (((enum machine_mode) (op0)->mode) == BLKmode)
  emit_block_move (new_with_op0_mode, op0,
     gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((type)->type.mode)]))),
     (modifier == EXPAND_STACK_PARM
      ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
       else
  emit_move_insn (new_with_op0_mode, op0);
       op0 = new;
     }
   op0 = adjust_address_1 (op0, ((type)->type.mode), 0, 1, 1);
 }
      return op0;
    case PLUS_EXPR:
      this_optab = ! unsignedp && flag_trapv
                   && (mode_class[mode] == MODE_INT)
                   ? (optab_table[OTI_addv]) : (optab_table[OTI_add]);
      if (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == PLUS_EXPR
   && ((enum tree_code) (((((exp)->exp.operands[0]))->exp.operands[1]))->common.code) == INTEGER_CST
   && ((enum tree_code) (((exp)->exp.operands[1]))->common.code) == VAR_DECL
   && (((((exp)->exp.operands[1]))->decl.rtl ? (((exp)->exp.operands[1]))->decl.rtl : (make_decl_rtl (((exp)->exp.operands[1]), ((void *)0)), (((exp)->exp.operands[1]))->decl.rtl)) == (global_rtl[GR_FRAME_POINTER])
       || ((((exp)->exp.operands[1]))->decl.rtl ? (((exp)->exp.operands[1]))->decl.rtl : (make_decl_rtl (((exp)->exp.operands[1]), ((void *)0)), (((exp)->exp.operands[1]))->decl.rtl)) == (global_rtl[GR_STACK_POINTER])
       || ((((exp)->exp.operands[1]))->decl.rtl ? (((exp)->exp.operands[1]))->decl.rtl : (make_decl_rtl (((exp)->exp.operands[1]), ((void *)0)), (((exp)->exp.operands[1]))->decl.rtl)) == (global_rtl[GR_ARG_POINTER])))
 {
   tree t = ((exp)->exp.operands[1]);
   ((exp)->exp.operands[1]) = ((((exp)->exp.operands[0]))->exp.operands[0]);
   ((((exp)->exp.operands[0]))->exp.operands[0]) = t;
 }
      if (modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER
   || (mode == ptr_mode && (unsignedp || ! flag_trapv)))
 {
   if (modifier == EXPAND_STACK_PARM)
     target = 0;
   if (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == INTEGER_CST
       && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
       && ((((exp)->exp.operands[1]))->common.constant_flag))
     {
       rtx constant_part;
       op1 = expand_expr (((exp)->exp.operands[1]), subtarget, VOIDmode,
     EXPAND_SUM);
       constant_part
  = immed_double_const ((((((exp)->exp.operands[0]))->int_cst.int_cst).low),
          (long) 0,
          ((((((exp)->exp.operands[1]))->common.type))->type.mode));
       op1 = plus_constant_wide ((op1), (long) (((constant_part)->u.hwint[0])));
       if (modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER)
  op1 = force_operand (op1, target);
       return op1;
     }
   else if (((enum tree_code) (((exp)->exp.operands[1]))->common.code) == INTEGER_CST
     && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
     && ((((exp)->exp.operands[0]))->common.constant_flag))
     {
       rtx constant_part;
       op0 = expand_expr (((exp)->exp.operands[0]), subtarget, VOIDmode,
     (modifier == EXPAND_INITIALIZER
     ? EXPAND_INITIALIZER : EXPAND_SUM));
       if (! ((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
  {
    op1 = expand_expr (((exp)->exp.operands[1]), (rtx) 0,
         VOIDmode, modifier);
    if (modifier == EXPAND_SUM
        || modifier == EXPAND_INITIALIZER)
      return simplify_gen_binary (PLUS, mode, op0, op1);
    goto binop2;
  }
       constant_part
  = immed_double_const ((((((exp)->exp.operands[1]))->int_cst.int_cst).low),
          (long) 0,
          ((((((exp)->exp.operands[0]))->common.type))->type.mode));
       op0 = plus_constant_wide ((op0), (long) (((constant_part)->u.hwint[0])));
       if (modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER)
  op0 = force_operand (op0, target);
       return op0;
     }
 }
      if ((modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER)
   || mode != ptr_mode)
 {
   expand_operands (((exp)->exp.operands[0]), ((exp)->exp.operands[1]),
      subtarget, &op0, &op1, 0);
   if (op0 == (const_int_rtx[64]))
     return op1;
   if (op1 == (const_int_rtx[64]))
     return op0;
   goto binop2;
 }
      expand_operands (((exp)->exp.operands[0]), ((exp)->exp.operands[1]),
         subtarget, &op0, &op1, modifier);
      return simplify_gen_binary (PLUS, mode, op0, op1);
    case MINUS_EXPR:
      if ((modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER)
   && really_constant_p (((exp)->exp.operands[0]))
   && really_constant_p (((exp)->exp.operands[1])))
 {
   expand_operands (((exp)->exp.operands[0]), ((exp)->exp.operands[1]),
      (rtx) 0, &op0, &op1, modifier);
   if (((enum rtx_code) (op1)->code) == CONST_INT)
     return plus_constant_wide ((op0), (long) (- ((op1)->u.hwint[0])));
   else
     return gen_rtx_fmt_ee (MINUS, (mode), (op0), (op1));
 }
      this_optab = ! unsignedp && flag_trapv
                   && (mode_class[mode] == MODE_INT)
                   ? (optab_table[OTI_subv]) : (optab_table[OTI_sub]);
      if ((modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER)
   || mode != ptr_mode)
 goto binop;
      expand_operands (((exp)->exp.operands[0]), ((exp)->exp.operands[1]),
         subtarget, &op0, &op1, modifier);
      if (((enum rtx_code) (op1)->code) == CONST_INT)
 {
   op1 = negate_rtx (mode, op1);
   return simplify_gen_binary (PLUS, mode, op0, op1);
 }
      goto binop2;
    case MULT_EXPR:
      if (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == INTEGER_CST)
 {
   tree t1 = ((exp)->exp.operands[0]);
   ((exp)->exp.operands[0]) = ((exp)->exp.operands[1]);
   ((exp)->exp.operands[1]) = t1;
 }
      if (modifier == EXPAND_SUM && mode == ptr_mode
   && host_integerp (((exp)->exp.operands[1]), 0))
 {
   tree exp1 = ((exp)->exp.operands[1]);
   op0 = expand_expr (((exp)->exp.operands[0]), subtarget, VOIDmode,
        EXPAND_SUM);
   if (!(((enum rtx_code) (op0)->code) == REG))
     op0 = force_operand (op0, (rtx) 0);
   if (!(((enum rtx_code) (op0)->code) == REG))
     op0 = copy_to_mode_reg (mode, op0);
   return gen_rtx_fmt_ee (MULT, (mode), (op0), (gen_int_mode (tree_low_cst (exp1, 0), ((((exp1)->common.type))->type.mode))))
                                        ;
 }
      if (modifier == EXPAND_STACK_PARM)
 target = 0;
      if (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == NOP_EXPR
   && ((enum tree_code) (type)->common.code) == INTEGER_TYPE
   && (((((((((exp)->exp.operands[0]))->exp.operands[0]))->common.type))->type.precision)
       < ((((((exp)->exp.operands[0]))->common.type))->type.precision))
   && ((((enum tree_code) (((exp)->exp.operands[1]))->common.code) == INTEGER_CST
        && int_fits_type_p (((exp)->exp.operands[1]),
       ((((((exp)->exp.operands[0]))->exp.operands[0]))->common.type))
        && ((((unsigned short) (((unsigned short) mode_size[((((((exp)->exp.operands[1]))->common.type))->type.mode)]) * 8))
      > (8 * 4))
     || exact_log2_wide ((unsigned long) ((((((exp)->exp.operands[1]))->int_cst.int_cst).low))) < 0))
       ||
       (((enum tree_code) (((exp)->exp.operands[1]))->common.code) == NOP_EXPR
        && (((((((((exp)->exp.operands[1]))->exp.operands[0]))->common.type))->type.precision)
     == ((((((((exp)->exp.operands[0]))->exp.operands[0]))->common.type))->type.precision)
                                       )
        && (((((((((exp)->exp.operands[1]))->exp.operands[0]))->common.type))->common.unsigned_flag)
     == ((((((((exp)->exp.operands[0]))->exp.operands[0]))->common.type))->common.unsigned_flag)
                                      ))))
 {
   tree op0type = ((((((exp)->exp.operands[0]))->exp.operands[0]))->common.type);
   enum machine_mode innermode = ((op0type)->type.mode);
   unsigned char zextend_p = ((op0type)->common.unsigned_flag);
   optab other_optab = zextend_p ? (optab_table[OTI_smul_widen]) : (optab_table[OTI_umul_widen]);
   this_optab = zextend_p ? (optab_table[OTI_umul_widen]) : (optab_table[OTI_smul_widen]);
   if (mode == mode_wider[innermode])
     {
       if (this_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
  {
    if (((enum tree_code) (((exp)->exp.operands[1]))->common.code) == INTEGER_CST)
      expand_operands (((((exp)->exp.operands[0]))->exp.operands[0]),
         ((exp)->exp.operands[1]),
         (rtx) 0, &op0, &op1, 0);
    else
      expand_operands (((((exp)->exp.operands[0]))->exp.operands[0]),
         ((((exp)->exp.operands[1]))->exp.operands[0]),
         (rtx) 0, &op0, &op1, 0);
    goto binop2;
  }
       else if (other_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing
         && innermode == word_mode)
  {
    rtx htem, hipart;
    op0 = expand_expr (((((exp)->exp.operands[0]))->exp.operands[0]),
         (rtx) 0, VOIDmode, 0);
    if (((enum tree_code) (((exp)->exp.operands[1]))->common.code) == INTEGER_CST)
      op1 = convert_modes (innermode, mode,
      expand_expr (((exp)->exp.operands[1]),
            (rtx) 0, VOIDmode, 0),
      unsignedp);
    else
      op1 = expand_expr (((((exp)->exp.operands[1]))->exp.operands[0]),
           (rtx) 0, VOIDmode, 0);
    temp = expand_binop (mode, other_optab, op0, op1, target,
           unsignedp, OPTAB_LIB_WIDEN);
    hipart = gen_highpart (innermode, temp);
    htem = expand_mult_highpart_adjust (innermode, hipart,
            op0, op1, hipart,
            zextend_p);
    if (htem != hipart)
      emit_move_insn (hipart, htem);
    return temp;
  }
     }
 }
      expand_operands (((exp)->exp.operands[0]), ((exp)->exp.operands[1]),
         subtarget, &op0, &op1, 0);
      return expand_mult (mode, op0, op1, target, unsignedp);
    case TRUNC_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case EXACT_DIV_EXPR:
      if (modifier == EXPAND_STACK_PARM)
 target = 0;
      expand_operands (((exp)->exp.operands[0]), ((exp)->exp.operands[1]),
         subtarget, &op0, &op1, 0);
      return expand_divmod (0, code, mode, op0, op1, target, unsignedp);
    case RDIV_EXPR:
      if (flag_unsafe_math_optimizations && optimize && !optimize_size
   && ((enum tree_code) (type)->common.code) == REAL_TYPE
   && !real_onep (((exp)->exp.operands[0])))
        return expand_expr (build (MULT_EXPR, type, ((exp)->exp.operands[0]),
       build (RDIV_EXPR, type,
       build_real (type, dconst1),
       ((exp)->exp.operands[1]))),
       target, tmode, modifier);
      this_optab = (optab_table[OTI_sdiv]);
      goto binop;
    case TRUNC_MOD_EXPR:
    case FLOOR_MOD_EXPR:
    case CEIL_MOD_EXPR:
    case ROUND_MOD_EXPR:
      if (modifier == EXPAND_STACK_PARM)
 target = 0;
      expand_operands (((exp)->exp.operands[0]), ((exp)->exp.operands[1]),
         subtarget, &op0, &op1, 0);
      return expand_divmod (1, code, mode, op0, op1, target, unsignedp);
    case FIX_ROUND_EXPR:
    case FIX_FLOOR_EXPR:
    case FIX_CEIL_EXPR:
      abort ();
    case FIX_TRUNC_EXPR:
      op0 = expand_expr (((exp)->exp.operands[0]), (rtx) 0, VOIDmode, 0);
      if (target == 0 || modifier == EXPAND_STACK_PARM)
 target = gen_reg_rtx (mode);
      expand_fix (target, op0, unsignedp);
      return target;
    case FLOAT_EXPR:
      op0 = expand_expr (((exp)->exp.operands[0]), (rtx) 0, VOIDmode, 0);
      if (target == 0 || modifier == EXPAND_STACK_PARM)
 target = gen_reg_rtx (mode);
      if (((enum machine_mode) (op0)->mode) == VOIDmode)
 op0 = copy_to_mode_reg (((((((exp)->exp.operands[0]))->common.type))->type.mode),
    op0);
      expand_float (target, op0,
      ((((((exp)->exp.operands[0]))->common.type))->common.unsigned_flag));
      return target;
    case NEGATE_EXPR:
      op0 = expand_expr (((exp)->exp.operands[0]), subtarget, VOIDmode, 0);
      if (modifier == EXPAND_STACK_PARM)
 target = 0;
      temp = expand_unop (mode,
     ! unsignedp && flag_trapv
     && (mode_class[mode] == MODE_INT)
     ? (optab_table[OTI_negv]) : (optab_table[OTI_neg]), op0, target, 0);
      if (temp == 0)
 abort ();
      return temp;
    case ABS_EXPR:
      op0 = expand_expr (((exp)->exp.operands[0]), subtarget, VOIDmode, 0);
      if (modifier == EXPAND_STACK_PARM)
 target = 0;
      if (mode_class[mode] == MODE_COMPLEX_INT
   || mode_class[mode] == MODE_COMPLEX_FLOAT)
 abort ();
      if (((type)->common.unsigned_flag))
 return op0;
      return expand_abs (mode, op0, target, unsignedp,
    safe_from_p (target, ((exp)->exp.operands[0]), 1));
    case MAX_EXPR:
    case MIN_EXPR:
      target = original_target;
      if (target == 0
   || modifier == EXPAND_STACK_PARM
   || ((((enum rtx_code) (target)->code) == MEM) && (((target))->volatil))
   || ((enum machine_mode) (target)->mode) != mode
   || ((((enum rtx_code) (target)->code) == REG)
       && (((target)->u.fld[0]).rtuint) < 53))
 target = gen_reg_rtx (mode);
      expand_operands (((exp)->exp.operands[0]), ((exp)->exp.operands[1]),
         target, &op0, &op1, 0);
      this_optab = (unsignedp
      ? (code == MIN_EXPR ? (optab_table[OTI_umin]) : (optab_table[OTI_umax]))
      : (code == MIN_EXPR ? (optab_table[OTI_smin]) : (optab_table[OTI_smax])));
      temp = expand_binop (mode, this_optab, op0, op1, target, unsignedp,
      OPTAB_WIDEN);
      if (temp != 0)
 return temp;
      if ((((enum rtx_code) (target)->code) == MEM))
 target = gen_reg_rtx (mode);
      if (target != op0 && target == op1)
 {
   rtx tem = op0;
   op0 = op1;
   op1 = tem;
 }
      if (target != op0)
 emit_move_insn (target, op0);
      op0 = gen_label_rtx ();
      if (mode_class[mode] == MODE_INT
   && ! can_compare_p (GE, mode, ccp_jump))
 {
   if (code == MAX_EXPR)
     do_jump_by_parts_greater_rtx (mode, unsignedp, target, op1,
       (rtx) 0, op0);
   else
     do_jump_by_parts_greater_rtx (mode, unsignedp, op1, target,
       (rtx) 0, op0);
 }
      else
 {
   do_compare_rtx_and_jump (target, op1, code == MAX_EXPR ? GE : LE,
       unsignedp, mode, (rtx) 0, (rtx) 0, op0);
 }
      emit_move_insn (target, op1);
      emit_label (op0);
      return target;
    case BIT_NOT_EXPR:
      op0 = expand_expr (((exp)->exp.operands[0]), subtarget, VOIDmode, 0);
      if (modifier == EXPAND_STACK_PARM)
 target = 0;
      temp = expand_unop (mode, (optab_table[OTI_one_cmpl]), op0, target, 1);
      if (temp == 0)
 abort ();
      return temp;
    case TRUTH_AND_EXPR:
    case BIT_AND_EXPR:
      this_optab = (optab_table[OTI_and]);
      goto binop;
    case TRUTH_OR_EXPR:
    case BIT_IOR_EXPR:
      this_optab = (optab_table[OTI_ior]);
      goto binop;
    case TRUTH_XOR_EXPR:
    case BIT_XOR_EXPR:
      this_optab = (optab_table[OTI_xor]);
      goto binop;
    case LSHIFT_EXPR:
    case RSHIFT_EXPR:
    case LROTATE_EXPR:
    case RROTATE_EXPR:
      if (! safe_from_p (subtarget, ((exp)->exp.operands[1]), 1))
 subtarget = 0;
      if (modifier == EXPAND_STACK_PARM)
 target = 0;
      op0 = expand_expr (((exp)->exp.operands[0]), subtarget, VOIDmode, 0);
      return expand_shift (code, mode, op0, ((exp)->exp.operands[1]), target,
      unsignedp);
    case LT_EXPR:
    case LE_EXPR:
    case GT_EXPR:
    case GE_EXPR:
    case EQ_EXPR:
    case NE_EXPR:
    case UNORDERED_EXPR:
    case ORDERED_EXPR:
    case UNLT_EXPR:
    case UNLE_EXPR:
    case UNGT_EXPR:
    case UNGE_EXPR:
    case UNEQ_EXPR:
    case LTGT_EXPR:
      temp = do_store_flag (exp,
       modifier != EXPAND_STACK_PARM ? target : (rtx) 0,
       tmode != VOIDmode ? tmode : mode, 0);
      if (temp != 0)
 return temp;
      if (code == NE_EXPR && integer_zerop (((exp)->exp.operands[1]))
   && original_target
   && (((enum rtx_code) (original_target)->code) == REG)
   && (((enum machine_mode) (original_target)->mode)
       == ((((((exp)->exp.operands[0]))->common.type))->type.mode)))
 {
   temp = expand_expr (((exp)->exp.operands[0]), original_target,
         VOIDmode, 0);
   if (((enum rtx_code) (temp)->code) == CONST_INT)
     {
       if (((temp)->u.hwint[0]) != 0)
         emit_move_insn (target, (const_int_rtx[64 +1]));
       else
         emit_move_insn (target, (const_int_rtx[64]));
       return target;
     }
   if (temp != original_target)
     {
       enum machine_mode mode1 = ((enum machine_mode) (temp)->mode);
       if (mode1 == VOIDmode)
  mode1 = tmode != VOIDmode ? tmode : mode;
       temp = copy_to_mode_reg (mode1, temp);
     }
   op1 = gen_label_rtx ();
   emit_cmp_and_jump_insns (temp, (const_int_rtx[64]), EQ, (rtx) 0,
       ((enum machine_mode) (temp)->mode), unsignedp, op1);
   emit_move_insn (temp, (const_int_rtx[64 +1]));
   emit_label (op1);
   return temp;
 }
    case TRUTH_ANDIF_EXPR:
    case TRUTH_ORIF_EXPR:
      if (! ignore
   && (target == 0
       || modifier == EXPAND_STACK_PARM
       || ! safe_from_p (target, exp, 1)
       || (!optimize && (((enum rtx_code) (target)->code) == REG)
    && (((target)->u.fld[0]).rtuint) < 53)))
 target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode);
      if (target)
 emit_clr_insn (target);
      op1 = gen_label_rtx ();
      jumpifnot (exp, op1);
      if (target)
 emit_0_to_1_insn (target);
      emit_label (op1);
      return ignore ? (const_int_rtx[64]) : target;
    case TRUTH_NOT_EXPR:
      if (modifier == EXPAND_STACK_PARM)
 target = 0;
      op0 = expand_expr (((exp)->exp.operands[0]), target, VOIDmode, 0);
      temp = expand_binop (mode, (optab_table[OTI_xor]), op0, (const_int_rtx[64 +1]),
      target, 1, OPTAB_LIB_WIDEN);
      if (temp == 0)
 abort ();
      return temp;
    case COMPOUND_EXPR:
      expand_expr (((exp)->exp.operands[0]), (const_int_rtx[64]), VOIDmode, 0);
      emit_queue ();
      return expand_expr_real (((exp)->exp.operands[1]),
          (ignore ? (const_int_rtx[64]) : target),
          VOIDmode, modifier, alt_rtl);
    case STATEMENT_LIST:
      {
 tree_stmt_iterator iter;
 if (!ignore)
   abort ();
 for (iter = tsi_start (exp); !tsi_end_p (iter); tsi_next (&iter))
   expand_expr (tsi_stmt (iter), (const_int_rtx[64]), VOIDmode, modifier);
      }
      return (const_int_rtx[64]);
    case COND_EXPR:
      if ((((enum tree_code) (((exp)->common.type))->common.code) == VOID_TYPE))
 {
   tree pred = ((exp)->exp.operands[0]);
   tree then_ = ((exp)->exp.operands[1]);
   tree else_ = ((exp)->exp.operands[2]);
   if (! optimize
       || containing_blocks_have_cleanups_or_stack_level ())
     ;
   else if (((enum tree_code) (then_)->common.code) == GOTO_EXPR
     && ((enum tree_code) ((((then_))->exp.operands[0]))->common.code) == LABEL_DECL)
     {
       jumpif (pred, label_rtx ((((then_))->exp.operands[0])));
       return expand_expr (else_, (const_int_rtx[64]), VOIDmode, 0);
     }
   else if (((enum tree_code) (else_)->common.code) == GOTO_EXPR
     && ((enum tree_code) ((((else_))->exp.operands[0]))->common.code) == LABEL_DECL)
     {
       jumpifnot (pred, label_rtx ((((else_))->exp.operands[0])));
       return expand_expr (then_, (const_int_rtx[64]), VOIDmode, 0);
     }
   expand_start_cond (pred, 0);
   start_cleanup_deferral ();
   expand_expr (then_, (const_int_rtx[64]), VOIDmode, 0);
   exp = else_;
   for (; ((enum tree_code) (exp)->common.code) == COND_EXPR; exp = ((exp)->exp.operands[2]))
     {
       expand_start_else ();
       if ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (exp)->common.code))])) != 0) ? (exp)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
  {
    emit_line_note (((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (exp)->common.code))])) != 0) ? (exp)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) ? *(exp)->exp.locus : unknown_location));
    record_block_change (((exp)->exp.block));
  }
       expand_elseif (((exp)->exp.operands[0]));
       expand_expr (((exp)->exp.operands[1]), (const_int_rtx[64]), VOIDmode, 0);
     }
   if (((exp)->common.side_effects_flag))
     {
       expand_start_else ();
       expand_expr (exp, (const_int_rtx[64]), VOIDmode, 0);
     }
   end_cleanup_deferral ();
   expand_end_cond ();
   return (const_int_rtx[64]);
 }
      if (((enum tree_code) (((exp)->exp.operands[1]))->common.code) == NOP_EXPR
   && ((enum tree_code) (((exp)->exp.operands[2]))->common.code) == NOP_EXPR
   && (((((((exp)->exp.operands[1]))->exp.operands[0]))->common.type)
       == ((((((exp)->exp.operands[2]))->exp.operands[0]))->common.type)))
 {
   tree iftrue = ((((exp)->exp.operands[1]))->exp.operands[0]);
   tree iffalse = ((((exp)->exp.operands[2]))->exp.operands[0]);
   if ((tree_code_type[(int) (((enum tree_code) (iftrue)->common.code))] == '2'
        && operand_equal_p (iffalse, ((iftrue)->exp.operands[0]), 0))
       || (tree_code_type[(int) (((enum tree_code) (iffalse)->common.code))] == '2'
    && operand_equal_p (iftrue, ((iffalse)->exp.operands[0]), 0))
       || (tree_code_type[(int) (((enum tree_code) (iftrue)->common.code))] == '1'
    && operand_equal_p (iffalse, ((iftrue)->exp.operands[0]), 0))
       || (tree_code_type[(int) (((enum tree_code) (iffalse)->common.code))] == '1'
    && operand_equal_p (iftrue, ((iffalse)->exp.operands[0]), 0)))
     return expand_expr (build1_stat (NOP_EXPR,type,build (COND_EXPR, ((iftrue)->common.type), ((exp)->exp.operands[0]), iftrue, iffalse) )
                             ,
    target, tmode, modifier);
 }
      {
 tree singleton = 0;
 tree binary_op = 0, unary_op = 0;
 if (integer_onep (((exp)->exp.operands[1]))
     && integer_zerop (((exp)->exp.operands[2]))
     && tree_code_type[(int) (((enum tree_code) (((exp)->exp.operands[0]))->common.code))] == '<')
   {
     if (ignore)
       {
  expand_expr (((exp)->exp.operands[0]), (const_int_rtx[64]), VOIDmode,
        modifier);
  return (const_int_rtx[64]);
       }
     if (modifier == EXPAND_STACK_PARM)
       target = 0;
     op0 = expand_expr (((exp)->exp.operands[0]), target, mode, modifier);
     if (((enum machine_mode) (op0)->mode) == mode)
       return op0;
     if (target == 0)
       target = gen_reg_rtx (mode);
     convert_move (target, op0, unsignedp);
     return target;
   }
 if (tree_code_type[(int) (((enum tree_code) (((exp)->exp.operands[1]))->common.code))] == '2'
     && operand_equal_p (((exp)->exp.operands[2]),
    ((((exp)->exp.operands[1]))->exp.operands[0]), 0))
   singleton = ((exp)->exp.operands[2]), binary_op = ((exp)->exp.operands[1]);
 else if (tree_code_type[(int) (((enum tree_code) (((exp)->exp.operands[2]))->common.code))] == '2'
   && operand_equal_p (((exp)->exp.operands[1]),
         ((((exp)->exp.operands[2]))->exp.operands[0]), 0))
   singleton = ((exp)->exp.operands[1]), binary_op = ((exp)->exp.operands[2]);
 else if (tree_code_type[(int) (((enum tree_code) (((exp)->exp.operands[1]))->common.code))] == '1'
   && operand_equal_p (((exp)->exp.operands[2]),
         ((((exp)->exp.operands[1]))->exp.operands[0]), 0))
   singleton = ((exp)->exp.operands[2]), unary_op = ((exp)->exp.operands[1]);
 else if (tree_code_type[(int) (((enum tree_code) (((exp)->exp.operands[2]))->common.code))] == '1'
   && operand_equal_p (((exp)->exp.operands[1]),
         ((((exp)->exp.operands[2]))->exp.operands[0]), 0))
   singleton = ((exp)->exp.operands[1]), unary_op = ((exp)->exp.operands[2]);
 if (ignore)
   temp = 0;
 else if (modifier == EXPAND_STACK_PARM)
   temp = assign_temp (type, 0, 0, 1);
 else if (original_target
   && (safe_from_p (original_target, ((exp)->exp.operands[0]), 1)
       || (singleton && (((enum rtx_code) (original_target)->code) == REG)
    && (((original_target)->u.fld[0]).rtuint) >= 53
    && original_target == var_rtx (singleton)))
   && ((enum machine_mode) (original_target)->mode) == mode
   && (! can_conditionally_move_p (mode)
       || (((enum rtx_code) (original_target)->code) == REG)
       || ((type)->common.addressable_flag))
   && (!(((enum rtx_code) (original_target)->code) == MEM)
       || ((type)->common.addressable_flag)))
   temp = original_target;
 else if (((type)->common.addressable_flag))
   abort ();
 else
   temp = assign_temp (type, 0, 0, 1);
 if (temp && singleton && binary_op
     && (((enum tree_code) (binary_op)->common.code) == PLUS_EXPR
  || ((enum tree_code) (binary_op)->common.code) == MINUS_EXPR
  || ((enum tree_code) (binary_op)->common.code) == BIT_IOR_EXPR
  || ((enum tree_code) (binary_op)->common.code) == BIT_XOR_EXPR)
     && (ix86_branch_cost >= 3 ? integer_pow2p (((binary_op)->exp.operands[1]))
  : integer_onep (((binary_op)->exp.operands[1])))
     && tree_code_type[(int) (((enum tree_code) (((exp)->exp.operands[0]))->common.code))] == '<')
   {
     rtx result;
     tree cond;
     optab boptab = (((enum tree_code) (binary_op)->common.code) == PLUS_EXPR
       ? ((flag_trapv && ! ((((binary_op)->common.type))->common.unsigned_flag))
          ? (optab_table[OTI_addv]) : (optab_table[OTI_add]))
       : ((enum tree_code) (binary_op)->common.code) == MINUS_EXPR
       ? ((flag_trapv && ! ((((binary_op)->common.type))->common.unsigned_flag))
          ? (optab_table[OTI_subv]) : (optab_table[OTI_sub]))
       : ((enum tree_code) (binary_op)->common.code) == BIT_IOR_EXPR ? (optab_table[OTI_ior])
       : (optab_table[OTI_xor]));
     if (singleton == ((exp)->exp.operands[1]))
       cond = invert_truthvalue (((exp)->exp.operands[0]));
     else
       cond = ((exp)->exp.operands[0]);
     result = do_store_flag (cond, (safe_from_p (temp, singleton, 1)
        ? temp : (rtx) 0),
        mode, ix86_branch_cost <= 1);
     if (result != 0 && ! integer_onep (((binary_op)->exp.operands[1])))
       result = expand_shift (LSHIFT_EXPR, mode, result,
         build_int_2_wide ((unsigned long) (tree_log2 (((binary_op)->exp.operands[1]))), (long) (0))
          ,
         (safe_from_p (temp, singleton, 1)
          ? temp : (rtx) 0), 0);
     if (result)
       {
  op1 = expand_expr (singleton, (rtx) 0, VOIDmode, 0);
  return expand_binop (mode, boptab, op1, result, temp,
         unsignedp, OPTAB_LIB_WIDEN);
       }
   }
 do_pending_stack_adjust ();
 ((cfun->expr->x_inhibit_defer_pop) += 1);
 op0 = gen_label_rtx ();
 if (singleton && ! ((((exp)->exp.operands[0]))->common.side_effects_flag))
   {
     if (temp != 0)
       {
  if ((binary_op
       && ! safe_from_p (temp, ((binary_op)->exp.operands[1]), 1))
      || ((((enum rtx_code) (temp)->code) == REG)
   && (((temp)->u.fld[0]).rtuint) < 53))
    temp = gen_reg_rtx (mode);
  store_expr (singleton, temp,
       modifier == EXPAND_STACK_PARM ? 2 : 0);
       }
     else
       expand_expr (singleton,
      ignore ? (const_int_rtx[64]) : (rtx) 0, VOIDmode, 0);
     if (singleton == ((exp)->exp.operands[1]))
       jumpif (((exp)->exp.operands[0]), op0);
     else
       jumpifnot (((exp)->exp.operands[0]), op0);
     start_cleanup_deferral ();
     if (binary_op && temp == 0)
       expand_expr (((binary_op)->exp.operands[1]),
      ignore ? (const_int_rtx[64]) : (rtx) 0, VOIDmode, 0);
     else if (binary_op)
       store_expr (build (((enum tree_code) (binary_op)->common.code), type,
     make_tree (type, temp),
     ((binary_op)->exp.operands[1])),
     temp, modifier == EXPAND_STACK_PARM ? 2 : 0);
     else
       store_expr (build1_stat (((enum tree_code) (unary_op)->common.code),type,make_tree (type, temp) )
                             ,
     temp, modifier == EXPAND_STACK_PARM ? 2 : 0);
     op1 = op0;
   }
 else if (temp
   && tree_code_type[(int) (((enum tree_code) (((exp)->exp.operands[0]))->common.code))] == '<'
   && integer_zerop (((((exp)->exp.operands[0]))->exp.operands[1]))
   && operand_equal_p (((((exp)->exp.operands[0]))->exp.operands[0]),
         ((exp)->exp.operands[1]), 0)
   && (! ((((exp)->exp.operands[0]))->common.side_effects_flag)
       || ((enum tree_code) (((exp)->exp.operands[1]))->common.code) == SAVE_EXPR)
   && safe_from_p (temp, ((exp)->exp.operands[2]), 1))
   {
     if ((((enum rtx_code) (temp)->code) == REG)
  && (((temp)->u.fld[0]).rtuint) < 53)
       temp = gen_reg_rtx (mode);
     store_expr (((exp)->exp.operands[1]), temp,
   modifier == EXPAND_STACK_PARM ? 2 : 0);
     jumpif (((exp)->exp.operands[0]), op0);
     start_cleanup_deferral ();
     if (((((exp)->exp.operands[2]))->common.type) != global_trees[TI_VOID_TYPE])
       store_expr (((exp)->exp.operands[2]), temp,
     modifier == EXPAND_STACK_PARM ? 2 : 0);
     else
       expand_expr (((exp)->exp.operands[2]),
      ignore ? (const_int_rtx[64]) : (rtx) 0, VOIDmode, 0);
     op1 = op0;
   }
 else if (temp
   && tree_code_type[(int) (((enum tree_code) (((exp)->exp.operands[0]))->common.code))] == '<'
   && integer_zerop (((((exp)->exp.operands[0]))->exp.operands[1]))
   && operand_equal_p (((((exp)->exp.operands[0]))->exp.operands[0]),
         ((exp)->exp.operands[2]), 0)
   && (! ((((exp)->exp.operands[0]))->common.side_effects_flag)
       || ((enum tree_code) (((exp)->exp.operands[2]))->common.code) == SAVE_EXPR)
   && safe_from_p (temp, ((exp)->exp.operands[1]), 1))
   {
     if ((((enum rtx_code) (temp)->code) == REG)
  && (((temp)->u.fld[0]).rtuint) < 53)
       temp = gen_reg_rtx (mode);
     store_expr (((exp)->exp.operands[2]), temp,
   modifier == EXPAND_STACK_PARM ? 2 : 0);
     jumpifnot (((exp)->exp.operands[0]), op0);
     start_cleanup_deferral ();
     if (((((exp)->exp.operands[1]))->common.type) != global_trees[TI_VOID_TYPE])
       store_expr (((exp)->exp.operands[1]), temp,
     modifier == EXPAND_STACK_PARM ? 2 : 0);
     else
       expand_expr (((exp)->exp.operands[1]),
      ignore ? (const_int_rtx[64]) : (rtx) 0, VOIDmode, 0);
     op1 = op0;
   }
 else
   {
     op1 = gen_label_rtx ();
     jumpifnot (((exp)->exp.operands[0]), op0);
     start_cleanup_deferral ();
     if (temp != 0
  && ((((exp)->exp.operands[1]))->common.type) != global_trees[TI_VOID_TYPE])
       store_expr (((exp)->exp.operands[1]), temp,
     modifier == EXPAND_STACK_PARM ? 2 : 0);
     else
       expand_expr (((exp)->exp.operands[1]),
      ignore ? (const_int_rtx[64]) : (rtx) 0, VOIDmode, 0);
     end_cleanup_deferral ();
     emit_queue ();
     emit_jump_insn (gen_jump (op1));
     emit_barrier ();
     emit_label (op0);
     start_cleanup_deferral ();
     if (temp != 0
  && ((((exp)->exp.operands[2]))->common.type) != global_trees[TI_VOID_TYPE])
       store_expr (((exp)->exp.operands[2]), temp,
     modifier == EXPAND_STACK_PARM ? 2 : 0);
     else
       expand_expr (((exp)->exp.operands[2]),
      ignore ? (const_int_rtx[64]) : (rtx) 0, VOIDmode, 0);
   }
 end_cleanup_deferral ();
 emit_queue ();
 emit_label (op1);
 ((cfun->expr->x_inhibit_defer_pop) -= 1);
 return temp;
      }
    case TARGET_EXPR:
      {
 tree slot = ((exp)->exp.operands[0]);
 tree cleanups = (tree) ((void *)0);
 tree exp1;
 if (((enum tree_code) (slot)->common.code) != VAR_DECL)
   abort ();
 if (! ignore)
   target = original_target;
 ((slot)->common.used_flag) = 1;
 if (target == 0)
   {
     if (((slot)->decl.rtl != ((void *)0)))
       {
  target = ((slot)->decl.rtl ? (slot)->decl.rtl : (make_decl_rtl (slot, ((void *)0)), (slot)->decl.rtl));
  if (((exp)->exp.operands[1]) == (tree) ((void *)0))
    return target;
       }
     else
       {
  target = assign_temp (type, 2, 0, 1);
  set_decl_rtl (slot, target);
  if (((exp)->exp.operands[2]) == 0)
    ((exp)->exp.operands[2])
      = lang_hooks.maybe_build_cleanup (slot);
  cleanups = ((exp)->exp.operands[2]);
       }
   }
 else
   {
     if (((slot)->decl.rtl != ((void *)0)))
       {
  target = ((slot)->decl.rtl ? (slot)->decl.rtl : (make_decl_rtl (slot, ((void *)0)), (slot)->decl.rtl));
  if (((exp)->exp.operands[1]) == (tree) ((void *)0))
    return target;
       }
     else
       set_decl_rtl (slot, target);
   }
 exp1 = ((exp)->exp.operands[3]) = ((exp)->exp.operands[1]);
 ((exp)->exp.operands[1]) = (tree) ((void *)0);
 if ((((enum tree_code) (((exp1)->common.type))->common.code) == VOID_TYPE))
   expand_expr (exp1, (const_int_rtx[64]), VOIDmode, 0);
 else
   store_expr (exp1, target, modifier == EXPAND_STACK_PARM ? 2 : 0);
 expand_decl_cleanup_eh ((tree) ((void *)0), cleanups, ((exp)->common.static_flag));
 return target;
      }
    case INIT_EXPR:
      {
 tree lhs = ((exp)->exp.operands[0]);
 tree rhs = ((exp)->exp.operands[1]);
 temp = expand_assignment (lhs, rhs, ! ignore);
 return temp;
      }
    case MODIFY_EXPR:
      {
 tree lhs = ((exp)->exp.operands[0]);
 tree rhs = ((exp)->exp.operands[1]);
 temp = 0;
 if (ignore
     && ((enum tree_code) (lhs)->common.code) == COMPONENT_REF
     && (((enum tree_code) (rhs)->common.code) == BIT_IOR_EXPR
  || ((enum tree_code) (rhs)->common.code) == BIT_AND_EXPR)
     && ((rhs)->exp.operands[0]) == lhs
     && ((enum tree_code) (((rhs)->exp.operands[1]))->common.code) == COMPONENT_REF
     && integer_onep (((((lhs)->exp.operands[1]))->decl.size))
     && integer_onep (((((((rhs)->exp.operands[1]))->exp.operands[1]))->decl.size)))
   {
     rtx label = gen_label_rtx ();
     do_jump (((rhs)->exp.operands[1]),
       ((enum tree_code) (rhs)->common.code) == BIT_IOR_EXPR ? label : 0,
       ((enum tree_code) (rhs)->common.code) == BIT_AND_EXPR ? label : 0);
     expand_assignment (lhs, convert (((rhs)->common.type),
          (((enum tree_code) (rhs)->common.code) == BIT_IOR_EXPR
           ? global_trees[TI_INTEGER_ONE]
           : global_trees[TI_INTEGER_ZERO])),
          0);
     do_pending_stack_adjust ();
     emit_label (label);
     return (const_int_rtx[64]);
   }
 temp = expand_assignment (lhs, rhs, ! ignore);
 return temp;
      }
    case RETURN_EXPR:
      if (!((exp)->exp.operands[0]))
 expand_null_return ();
      else
 expand_return (((exp)->exp.operands[0]));
      return (const_int_rtx[64]);
    case PREINCREMENT_EXPR:
    case PREDECREMENT_EXPR:
      return expand_increment (exp, 0, ignore);
    case POSTINCREMENT_EXPR:
    case POSTDECREMENT_EXPR:
      return expand_increment (exp, ! ignore, ignore);
    case ADDR_EXPR:
      if (modifier == EXPAND_STACK_PARM)
 target = 0;
      if (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == ERROR_MARK)
 return (const_int_rtx[64]);
      else if (cfun == 0
        && (((enum tree_code) (((exp)->exp.operands[0]))->common.code) == CONSTRUCTOR
     || (tree_code_type[(int) (((enum tree_code) (((exp)->exp.operands[0]))->common.code))]
         == 'c')))
 op0 = (((output_constant_def (((exp)->exp.operands[0]), 0))->u.fld[0]).rtx1);
      else
 {
   op0 = expand_expr (((exp)->exp.operands[0]),
        ignore ? (const_int_rtx[64]) : (rtx) 0, VOIDmode,
        (modifier == EXPAND_INITIALIZER
         ? modifier : EXPAND_CONST_ADDRESS));
   if (ignore)
     return op0;
   op0 = protect_from_queue (op0, 1);
   if (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
     op0 = force_const_mem (((((((exp)->exp.operands[0]))->common.type))->type.mode),
       op0);
   else if ((((enum rtx_code) (op0)->code) == REG) || ((enum rtx_code) (op0)->code) == SUBREG
     || ((enum rtx_code) (op0)->code) == CONCAT || ((enum rtx_code) (op0)->code) == PARALLEL
     || ((enum rtx_code) (op0)->code) == LO_SUM)
     {
       tree inner_type = ((((exp)->exp.operands[0]))->common.type);
       rtx memloc = assign_temp (inner_type, 1, 1, 1);
       if (((enum rtx_code) (op0)->code) == PARALLEL)
  emit_group_store (memloc, op0, inner_type,
      int_size_in_bytes (inner_type));
       else
  emit_move_insn (memloc, op0);
       op0 = memloc;
     }
   if (!(((enum rtx_code) (op0)->code) == MEM))
     abort ();
   mark_temp_addr_taken (op0);
   if (modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER)
     {
       op0 = (((op0)->u.fld[0]).rtx1);
       if (((enum machine_mode) (op0)->mode) == (0 ? DImode : SImode) && mode == ptr_mode)
  op0 = convert_memory_address (ptr_mode, op0);
       return op0;
     }
   if (0 && ((enum machine_mode) (op0)->mode) == BLKmode
       && (((((((exp)->exp.operands[0]))->common.type))->type.align)
    > ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8)))
       && ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (op0)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (op0)->mode)) : 8)) < 128)
     {
       tree inner_type = ((((exp)->exp.operands[0]))->common.type);
       rtx new;
       if (((inner_type)->common.nothrow_flag))
  abort ();
       if (((inner_type)->common.addressable_flag))
  {
    error ("cannot take the address of an unaligned member");
    return (const_int_rtx[64]);
  }
       new = assign_stack_temp_for_type
  (((inner_type)->type.mode),
   ((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->size : ((enum machine_mode) (op0)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]))) : 0) ? ((((((op0)->u.fld[1]).rtmem) != 0 ? (((op0)->u.fld[1]).rtmem)->size : ((enum machine_mode) (op0)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]))) : 0))->u.hwint[0])
   : int_size_in_bytes (inner_type),
   1, build_qualified_type (inner_type,
       (((((inner_type)->common.readonly_flag) * 0x1) | (((inner_type)->common.volatile_flag) * 0x2) | (((inner_type)->type.restrict_flag) * 0x4))
        | 0x1)));
       emit_block_move (new, op0, expr_size (((exp)->exp.operands[0])),
          (modifier == EXPAND_STACK_PARM
    ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
       op0 = new;
     }
   op0 = force_operand ((((op0)->u.fld[0]).rtx1), target);
 }
      if (flag_force_addr
   && !(((enum rtx_code) (op0)->code) == REG)
   && modifier != EXPAND_CONST_ADDRESS
   && modifier != EXPAND_INITIALIZER
   && modifier != EXPAND_SUM)
 op0 = force_reg ((0 ? DImode : SImode), op0);
      if ((((enum rtx_code) (op0)->code) == REG)
   && ! (((op0))->volatil))
 mark_reg_pointer (op0, ((((type)->common.type))->type.align));
      if (((enum machine_mode) (op0)->mode) == (0 ? DImode : SImode) && mode == ptr_mode)
 op0 = convert_memory_address (ptr_mode, op0);
      return op0;
    case ENTRY_VALUE_EXPR:
      abort ();
    case COMPLEX_EXPR:
      {
 enum machine_mode mode = ((((((exp)->common.type))->common.type))->type.mode);
 rtx insns;
 op0 = expand_expr (((exp)->exp.operands[0]), 0, VOIDmode, 0);
 op1 = expand_expr (((exp)->exp.operands[1]), 0, VOIDmode, 0);
 if (! target)
   target = gen_reg_rtx (((((exp)->common.type))->type.mode));
 start_sequence ();
 emit_move_insn (gen_realpart (mode, target), op0);
 emit_move_insn (gen_imagpart (mode, target), op1);
 insns = get_insns ();
 end_sequence ();
 if (((enum rtx_code) (target)->code) != CONCAT)
   emit_no_conflict_block (insns, target, op0, op1, (rtx) 0);
 else
   emit_insn (insns);
 return target;
      }
    case REALPART_EXPR:
      op0 = expand_expr (((exp)->exp.operands[0]), 0, VOIDmode, 0);
      return gen_realpart (mode, op0);
    case IMAGPART_EXPR:
      op0 = expand_expr (((exp)->exp.operands[0]), 0, VOIDmode, 0);
      return gen_imagpart (mode, op0);
    case CONJ_EXPR:
      {
 enum machine_mode partmode = ((((((exp)->common.type))->common.type))->type.mode);
 rtx imag_t;
 rtx insns;
 op0 = expand_expr (((exp)->exp.operands[0]), 0, VOIDmode, 0);
 if (! target)
   target = gen_reg_rtx (mode);
 start_sequence ();
 emit_move_insn (gen_realpart (partmode, target),
   gen_realpart (partmode, op0));
 imag_t = gen_imagpart (partmode, target);
 temp = expand_unop (partmode,
       ! unsignedp && flag_trapv
       && (mode_class[partmode] == MODE_INT)
       ? (optab_table[OTI_negv]) : (optab_table[OTI_neg]),
       gen_imagpart (partmode, op0), imag_t, 0);
 if (temp != imag_t)
   emit_move_insn (imag_t, temp);
 insns = get_insns ();
 end_sequence ();
 if (((enum rtx_code) (target)->code) != CONCAT)
   emit_no_conflict_block (insns, target, op0, (rtx) 0, (rtx) 0);
 else
   emit_insn (insns);
 return target;
      }
    case RESX_EXPR:
      expand_resx_expr (exp);
      return (const_int_rtx[64]);
    case TRY_CATCH_EXPR:
      {
 tree handler = ((exp)->exp.operands[1]);
 expand_eh_region_start ();
 op0 = expand_expr (((exp)->exp.operands[0]), 0, VOIDmode, 0);
 expand_eh_handler (handler);
 return op0;
      }
    case CATCH_EXPR:
      expand_start_catch ((((exp))->exp.operands[0]));
      expand_expr ((((exp))->exp.operands[1]), (const_int_rtx[64]), VOIDmode, 0);
      expand_end_catch ();
      return (const_int_rtx[64]);
    case EH_FILTER_EXPR:
      abort ();
    case TRY_FINALLY_EXPR:
      {
 tree try_block = ((exp)->exp.operands[0]);
 tree finally_block = ((exp)->exp.operands[1]);
        if ((!optimize && lang_protect_cleanup_actions == ((void *)0))
     || unsafe_for_reeval (finally_block) > 1)
   {
     rtx finally_label = gen_label_rtx ();
     rtx done_label = gen_label_rtx ();
     rtx return_link = gen_reg_rtx ((0 ? DImode : SImode));
     tree cleanup = build (GOTO_SUBROUTINE_EXPR, global_trees[TI_VOID_TYPE],
             (tree) finally_label, (tree) return_link);
     ((cleanup)->common.side_effects_flag) = 1;
     expand_start_bindings_and_block(2, (tree) ((void *)0));
     (cfun->x_target_temp_slot_level) = (cfun->x_temp_slot_level);
     expand_decl_cleanup ((tree) ((void *)0), cleanup);
     op0 = expand_expr (try_block, target, tmode, modifier);
     preserve_temp_slots (op0);
     expand_end_bindings ((tree) ((void *)0), 0, 0);
     emit_jump (done_label);
     emit_label (finally_label);
     expand_expr (finally_block, (const_int_rtx[64]), VOIDmode, 0);
     emit_indirect_jump (return_link);
     emit_label (done_label);
   }
 else
   {
     expand_start_bindings_and_block(2, (tree) ((void *)0));
     (cfun->x_target_temp_slot_level) = (cfun->x_temp_slot_level);
     expand_decl_cleanup ((tree) ((void *)0), finally_block);
     op0 = expand_expr (try_block, target, tmode, modifier);
     preserve_temp_slots (op0);
     expand_end_bindings ((tree) ((void *)0), 0, 0);
   }
 return op0;
      }
    case GOTO_SUBROUTINE_EXPR:
      {
 rtx subr = (rtx) ((exp)->exp.operands[0]);
 rtx return_link = *(rtx *) &((exp)->exp.operands[1]);
 rtx return_address = gen_label_rtx ();
 emit_move_insn (return_link,
   gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (return_address)));
 emit_jump (subr);
 emit_label (return_address);
 return (const_int_rtx[64]);
      }
    case VA_ARG_EXPR:
      return expand_builtin_va_arg (((exp)->exp.operands[0]), type);
    case EXC_PTR_EXPR:
      return get_exception_pointer (cfun);
    case FILTER_EXPR:
      return get_exception_filter (cfun);
    case FDESC_EXPR:
      abort ();
    case SWITCH_EXPR:
      expand_start_case (0, (((exp))->exp.operands[0]), integer_types[itk_int],
    "switch");
      if ((((exp))->exp.operands[1]))
        expand_expr_stmt ((((exp))->exp.operands[1]));
      if ((((exp))->exp.operands[2]))
 {
   tree duplicate = 0;
   tree vec = (((exp))->exp.operands[2]);
   size_t i, n = ((vec)->vec.length);
   for (i = 0; i < n; ++i)
     {
       tree elt = ((vec)->vec.a[i]);
       tree controlling_expr_type = (((((exp))->exp.operands[0]))->common.type);
       tree min_value = ((controlling_expr_type)->type.minval);
       tree max_value = ((controlling_expr_type)->type.maxval);
       tree case_low = (((elt))->exp.operands[0]);
       tree case_high = (((elt))->exp.operands[1]) ? (((elt))->exp.operands[1]) : case_low;
       if (case_low && case_high)
  {
    if (((enum tree_code) (min_value)->common.code) == INTEGER_CST
        && tree_int_cst_compare (case_low, min_value) < 0
        && tree_int_cst_compare (case_high, min_value) < 0)
      {
        warning ("case label value %d is less than minimum value for type",
          ((case_low)->int_cst.int_cst));
        continue;
      }
    if (((enum tree_code) (max_value)->common.code) == INTEGER_CST
        && tree_int_cst_compare (case_low, max_value) > 0
        && tree_int_cst_compare (case_high, max_value) > 0)
      {
        warning ("case label value %d exceeds maximum value for type",
          ((case_high)->int_cst.int_cst));
        continue;
      }
    if (((enum tree_code) (min_value)->common.code) == INTEGER_CST
        && tree_int_cst_compare (case_high, min_value) >= 0
        && tree_int_cst_compare (case_low, min_value) < 0)
      {
        warning ("lower value %d in case label range less than minimum value for type",
          ((case_low)->int_cst.int_cst));
        case_low = min_value;
      }
    if (((enum tree_code) (max_value)->common.code) == INTEGER_CST
        && tree_int_cst_compare (case_low, max_value) <= 0
        && tree_int_cst_compare (case_high, max_value) > 0)
      {
        warning ("upper value %d in case label range exceeds maximum value for type",
          ((case_high)->int_cst.int_cst));
        case_high = max_value;
      }
  }
       add_case_node (case_low, case_high, (((elt))->exp.operands[2]), &duplicate, 1);
       if (duplicate)
  abort ();
     }
 }
      expand_end_case_type ((((exp))->exp.operands[0]), ((exp)->common.type));
      return (const_int_rtx[64]);
    case LABEL_EXPR:
      expand_label (((exp)->exp.operands[0]));
      return (const_int_rtx[64]);
    case CASE_LABEL_EXPR:
      {
 tree duplicate = 0;
 add_case_node ((((exp))->exp.operands[0]), (((exp))->exp.operands[1]), (((exp))->exp.operands[2]),
         &duplicate, 0);
 if (duplicate)
   abort ();
 return (const_int_rtx[64]);
      }
    case ASM_EXPR:
      expand_asm_expr (exp);
      return (const_int_rtx[64]);
    default:
      return lang_hooks.expand_expr (exp, original_target, tmode,
         modifier, alt_rtl);
    }
 binop:
  expand_operands (((exp)->exp.operands[0]), ((exp)->exp.operands[1]),
     subtarget, &op0, &op1, 0);
 binop2:
  if (modifier == EXPAND_STACK_PARM)
    target = 0;
  temp = expand_binop (mode, this_optab, op0, op1, target,
         unsignedp, OPTAB_LIB_WIDEN);
  if (temp == 0)
    abort ();
  return temp;
}
static int
is_aligning_offset (tree offset, tree exp)
{
  while (((enum tree_code) (offset)->common.code) == NON_LVALUE_EXPR
  || ((enum tree_code) (offset)->common.code) == NOP_EXPR
  || ((enum tree_code) (offset)->common.code) == CONVERT_EXPR)
    offset = ((offset)->exp.operands[0]);
  if (((enum tree_code) (offset)->common.code) != BIT_AND_EXPR
      || !host_integerp (((offset)->exp.operands[1]), 1)
      || compare_tree_int (((offset)->exp.operands[1]),
      128 / 8) <= 0
      || !exact_log2_wide ((unsigned long) (tree_low_cst (((offset)->exp.operands[1]), 1) + 1)) < 0)
    return 0;
  offset = ((offset)->exp.operands[0]);
  while (((enum tree_code) (offset)->common.code) == NON_LVALUE_EXPR
  || ((enum tree_code) (offset)->common.code) == NOP_EXPR
  || ((enum tree_code) (offset)->common.code) == CONVERT_EXPR)
    offset = ((offset)->exp.operands[0]);
  if (((enum tree_code) (offset)->common.code) != NEGATE_EXPR)
    return 0;
  offset = ((offset)->exp.operands[0]);
  while (((enum tree_code) (offset)->common.code) == NON_LVALUE_EXPR
  || ((enum tree_code) (offset)->common.code) == NOP_EXPR
  || ((enum tree_code) (offset)->common.code) == CONVERT_EXPR)
    offset = ((offset)->exp.operands[0]);
  return ((enum tree_code) (offset)->common.code) == ADDR_EXPR && ((offset)->exp.operands[0]) == exp;
}
tree
string_constant (tree arg, tree *ptr_offset)
{
  while ((((enum tree_code) (arg)->common.code) == NOP_EXPR || ((enum tree_code) (arg)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg)->common.code) == NON_LVALUE_EXPR) && ((arg)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg)->common.type))->type.mode) == ((((((arg)->exp.operands[0]))->common.type))->type.mode))) (arg) = ((arg)->exp.operands[0]);
  if (((enum tree_code) (arg)->common.code) == ADDR_EXPR
      && ((enum tree_code) (((arg)->exp.operands[0]))->common.code) == STRING_CST)
    {
      *ptr_offset = global_trees[TI_SIZE_ZERO];
      return ((arg)->exp.operands[0]);
    }
  if (((enum tree_code) (arg)->common.code) == ADDR_EXPR
      && ((enum tree_code) (((arg)->exp.operands[0]))->common.code) == ARRAY_REF
      && ((enum tree_code) (((((arg)->exp.operands[0]))->exp.operands[0]))->common.code) == STRING_CST)
    {
      *ptr_offset = convert (sizetype_tab[(int) SIZETYPE], ((((arg)->exp.operands[0]))->exp.operands[1]));
      return ((((arg)->exp.operands[0]))->exp.operands[0]);
    }
  else if (((enum tree_code) (arg)->common.code) == PLUS_EXPR)
    {
      tree arg0 = ((arg)->exp.operands[0]);
      tree arg1 = ((arg)->exp.operands[1]);
      while ((((enum tree_code) (arg0)->common.code) == NOP_EXPR || ((enum tree_code) (arg0)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg0)->common.code) == NON_LVALUE_EXPR) && ((arg0)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg0)->common.type))->type.mode) == ((((((arg0)->exp.operands[0]))->common.type))->type.mode))) (arg0) = ((arg0)->exp.operands[0]);
      while ((((enum tree_code) (arg1)->common.code) == NOP_EXPR || ((enum tree_code) (arg1)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg1)->common.code) == NON_LVALUE_EXPR) && ((arg1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg1)->common.type))->type.mode) == ((((((arg1)->exp.operands[0]))->common.type))->type.mode))) (arg1) = ((arg1)->exp.operands[0]);
      if (((enum tree_code) (arg0)->common.code) == ADDR_EXPR
   && ((enum tree_code) (((arg0)->exp.operands[0]))->common.code) == STRING_CST)
 {
   *ptr_offset = convert (sizetype_tab[(int) SIZETYPE], arg1);
   return ((arg0)->exp.operands[0]);
 }
      else if (((enum tree_code) (arg1)->common.code) == ADDR_EXPR
        && ((enum tree_code) (((arg1)->exp.operands[0]))->common.code) == STRING_CST)
 {
   *ptr_offset = convert (sizetype_tab[(int) SIZETYPE], arg0);
   return ((arg1)->exp.operands[0]);
 }
    }
  return 0;
}
static rtx
expand_increment (tree exp, int post, int ignore)
{
  rtx op0, op1;
  rtx temp, value1;
  tree incremented = ((exp)->exp.operands[0]);
  optab this_optab = (optab_table[OTI_add]);
  int icode;
  enum machine_mode mode = ((((exp)->common.type))->type.mode);
  int op0_is_copy = 0;
  int single_insn = 0;
  int bad_subreg = 0;
  if (!post
      || ((enum tree_code) (incremented)->common.code) == BIT_FIELD_REF
      || (((enum tree_code) (incremented)->common.code) == COMPONENT_REF
   && (((enum tree_code) (((incremented)->exp.operands[0]))->common.code) != INDIRECT_REF
       || ((((incremented)->exp.operands[1]))->decl.bit_field_flag))))
    incremented = stabilize_reference (incremented);
  if (((enum tree_code) (incremented)->common.code) == PREINCREMENT_EXPR
      || ((enum tree_code) (incremented)->common.code) == PREDECREMENT_EXPR)
    incremented = save_expr (incremented);
  temp = get_last_insn ();
  op0 = expand_expr (incremented, (rtx) 0, VOIDmode, 0);
  if (((enum rtx_code) (op0)->code) == SUBREG && (((op0))->in_struct))
    {
      if (post)
 (((op0)->u.fld[0]).rtx1) = copy_to_reg ((((op0)->u.fld[0]).rtx1));
      else
 bad_subreg = 1;
    }
  else if (((enum rtx_code) (op0)->code) == SUBREG
    && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)) < (8 * (0 ? 8 : 4)))
    {
      if (post)
 op0 = copy_to_reg (op0);
      else
 bad_subreg = 1;
    }
  op0_is_copy = ((((enum rtx_code) (op0)->code) == SUBREG || (((enum rtx_code) (op0)->code) == REG))
   && temp != get_last_insn ());
  op1 = expand_expr (((exp)->exp.operands[1]), (rtx) 0, VOIDmode, 0);
  if (((enum tree_code) (exp)->common.code) == POSTDECREMENT_EXPR
      || ((enum tree_code) (exp)->common.code) == PREDECREMENT_EXPR)
    this_optab = (optab_table[OTI_sub]);
  if (this_optab == (optab_table[OTI_sub])
      && ((enum rtx_code) (op1)->code) == CONST_INT)
    {
      op1 = gen_rtx_CONST_INT (VOIDmode, (long) (-((op1)->u.hwint[0])));
      this_optab = (optab_table[OTI_add]);
    }
  if ((flag_trapv && ! ((((exp)->common.type))->common.unsigned_flag)))
    this_optab = this_optab == (optab_table[OTI_add]) ? (optab_table[OTI_addv]) : (optab_table[OTI_subv]);
  if (!post)
    {
      icode = (int) this_optab->handlers[(int) mode].insn_code;
      if (icode != (int) CODE_FOR_nothing
   && (*insn_data[icode].operand[0].predicate) (op0, mode)
   && (*insn_data[icode].operand[1].predicate) (op0, mode)
   && (*insn_data[icode].operand[2].predicate) (op1, mode))
 single_insn = 1;
    }
  if (op0_is_copy || (!post && !single_insn) || bad_subreg)
    {
      tree newexp = build (((((enum tree_code) (exp)->common.code) == POSTDECREMENT_EXPR
        || ((enum tree_code) (exp)->common.code) == PREDECREMENT_EXPR)
       ? MINUS_EXPR : PLUS_EXPR),
      ((exp)->common.type),
      incremented,
      ((exp)->exp.operands[1]));
      while (((enum tree_code) (incremented)->common.code) == NOP_EXPR
      || ((enum tree_code) (incremented)->common.code) == CONVERT_EXPR)
 {
   newexp = convert (((incremented)->common.type), newexp);
   incremented = ((incremented)->exp.operands[0]);
 }
      temp = expand_assignment (incremented, newexp, ! post && ! ignore);
      return post ? op0 : temp;
    }
  if (post)
    {
      icode = (int) this_optab->handlers[(int) mode].insn_code;
      if (icode != (int) CODE_FOR_nothing
   && (*insn_data[icode].operand[0].predicate) (op0, mode)
   && (*insn_data[icode].operand[1].predicate) (op0, mode))
 {
   if (! (*insn_data[icode].operand[2].predicate) (op1, mode))
     op1 = force_reg (mode, op1);
   return enqueue_insn (op0, (insn_data[icode].genfun) (op0, op0, op1));
 }
      if (icode != (int) CODE_FOR_nothing && (((enum rtx_code) (op0)->code) == MEM))
 {
   rtx addr = (general_operand ((((op0)->u.fld[0]).rtx1), mode)
        ? force_reg ((0 ? DImode : SImode), (((op0)->u.fld[0]).rtx1))
        : copy_to_reg ((((op0)->u.fld[0]).rtx1)));
   rtx temp, result;
   op0 = replace_equiv_address (op0, addr);
   temp = force_reg (((enum machine_mode) (op0)->mode), op0);
   if (! (*insn_data[icode].operand[2].predicate) (op1, mode))
     op1 = force_reg (mode, op1);
   enqueue_insn (op0, gen_move_insn (op0, temp));
   result = enqueue_insn (temp, (insn_data[icode].genfun) (temp, temp, op1));
   return result;
 }
    }
  if (post)
    temp = value1 = copy_to_reg (op0);
  else
    temp = copy_rtx (value1 = op0);
  op1 = expand_binop (mode, this_optab, value1, op1, op0,
        ((((exp)->common.type))->common.unsigned_flag), OPTAB_LIB_WIDEN);
  if (op1 != op0)
    emit_move_insn (op0, op1);
  return temp;
}
static rtx
do_store_flag (tree exp, rtx target, enum machine_mode mode, int only_cheap)
{
  enum rtx_code code;
  tree arg0, arg1, type;
  tree tem;
  enum machine_mode operand_mode;
  int invert = 0;
  int unsignedp;
  rtx op0, op1;
  enum insn_code icode;
  rtx subtarget = target;
  rtx result, label;
  if (((enum tree_code) (exp)->common.code) == TRUTH_NOT_EXPR)
    invert = 1, exp = ((exp)->exp.operands[0]);
  arg0 = ((exp)->exp.operands[0]);
  arg1 = ((exp)->exp.operands[1]);
  if (arg0 == global_trees[TI_ERROR_MARK] || arg1 == global_trees[TI_ERROR_MARK])
    return (const_int_rtx[64]);
  type = ((arg0)->common.type);
  operand_mode = ((type)->type.mode);
  unsignedp = ((type)->common.unsigned_flag);
  if (operand_mode == BLKmode)
    return 0;
  while ((((enum tree_code) (arg0)->common.code) == NOP_EXPR || ((enum tree_code) (arg0)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg0)->common.code) == NON_LVALUE_EXPR) && ((arg0)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg0)->common.type))->type.mode) == ((((((arg0)->exp.operands[0]))->common.type))->type.mode))) (arg0) = ((arg0)->exp.operands[0]);
  while ((((enum tree_code) (arg1)->common.code) == NOP_EXPR || ((enum tree_code) (arg1)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg1)->common.code) == NON_LVALUE_EXPR) && ((arg1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg1)->common.type))->type.mode) == ((((((arg1)->exp.operands[0]))->common.type))->type.mode))) (arg1) = ((arg1)->exp.operands[0]);
  switch (((enum tree_code) (exp)->common.code))
    {
    case EQ_EXPR:
      code = EQ;
      break;
    case NE_EXPR:
      code = NE;
      break;
    case LT_EXPR:
      if (integer_onep (arg1))
 arg1 = global_trees[TI_INTEGER_ZERO], code = unsignedp ? LEU : LE;
      else
 code = unsignedp ? LTU : LT;
      break;
    case LE_EXPR:
      if (! unsignedp && integer_all_onesp (arg1))
 arg1 = global_trees[TI_INTEGER_ZERO], code = LT;
      else
 code = unsignedp ? LEU : LE;
      break;
    case GT_EXPR:
      if (! unsignedp && integer_all_onesp (arg1))
 arg1 = global_trees[TI_INTEGER_ZERO], code = GE;
      else
 code = unsignedp ? GTU : GT;
      break;
    case GE_EXPR:
      if (integer_onep (arg1))
 arg1 = global_trees[TI_INTEGER_ZERO], code = unsignedp ? GTU : GT;
      else
 code = unsignedp ? GEU : GE;
      break;
    case UNORDERED_EXPR:
      code = UNORDERED;
      break;
    case ORDERED_EXPR:
      code = ORDERED;
      break;
    case UNLT_EXPR:
      code = UNLT;
      break;
    case UNLE_EXPR:
      code = UNLE;
      break;
    case UNGT_EXPR:
      code = UNGT;
      break;
    case UNGE_EXPR:
      code = UNGE;
      break;
    case UNEQ_EXPR:
      code = UNEQ;
      break;
    case LTGT_EXPR:
      code = LTGT;
      break;
    default:
      abort ();
    }
  if (((enum tree_code) (arg0)->common.code) == REAL_CST || ((enum tree_code) (arg0)->common.code) == INTEGER_CST)
    {
      tem = arg0; arg0 = arg1; arg1 = tem;
      code = swap_condition (code);
    }
  if ((code == NE || code == EQ)
      && ((enum tree_code) (arg0)->common.code) == BIT_AND_EXPR && integer_zerop (arg1)
      && integer_pow2p (((arg0)->exp.operands[1])))
    {
      tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
      return expand_expr (fold_single_bit_test (code == NE ? NE_EXPR : EQ_EXPR,
      arg0, arg1, type),
     target, VOIDmode, EXPAND_NORMAL);
    }
  if (! can_compare_p (code, operand_mode, ccp_store_flag))
    return 0;
  icode = setcc_gen_code[(int) code];
  if (icode == CODE_FOR_nothing
      || (only_cheap && insn_data[(int) icode].operand[0].mode != mode))
    {
      if ((code == LT && integer_zerop (arg1))
   || (! only_cheap && code == GE && integer_zerop (arg1)))
 ;
      else if (ix86_branch_cost >= 0
        && ! only_cheap && (code == NE || code == EQ)
        && ((enum tree_code) (type)->common.code) != REAL_TYPE
        && (((optab_table[OTI_abs])->handlers[(int) operand_mode].insn_code
      != CODE_FOR_nothing)
     || ((optab_table[OTI_ffs])->handlers[(int) operand_mode].insn_code
         != CODE_FOR_nothing)))
 ;
      else
 return 0;
    }
  if (! get_subtarget (target)
      || ((enum machine_mode) (subtarget)->mode) != operand_mode)
    subtarget = 0;
  expand_operands (arg0, arg1, subtarget, &op0, &op1, 0);
  if (target == 0)
    target = gen_reg_rtx (mode);
  result = emit_store_flag (target, code,
       queued_subexp_p (op0) ? copy_rtx (op0) : op0,
       queued_subexp_p (op1) ? copy_rtx (op1) : op1,
       operand_mode, unsignedp, 1);
  if (result)
    {
      if (invert)
 result = expand_binop (mode, (optab_table[OTI_xor]), result, (const_int_rtx[64 +1]),
          result, 0, OPTAB_LIB_WIDEN);
      return result;
    }
  if (!(((enum rtx_code) (target)->code) == REG)
      || reg_mentioned_p (target, op0) || reg_mentioned_p (target, op1))
    target = gen_reg_rtx (((enum machine_mode) (target)->mode));
  emit_move_insn (target, invert ? (const_int_rtx[64]) : (const_int_rtx[64 +1]));
  result = compare_from_rtx (op0, op1, code, unsignedp,
        operand_mode, (rtx) 0);
  if (((enum rtx_code) (result)->code) == CONST_INT)
    return (((result == (const_int_rtx[64]) && ! invert)
      || (result != (const_int_rtx[64]) && invert))
     ? (const_int_rtx[64]) : (const_int_rtx[64 +1]));
  code = ((enum rtx_code) (result)->code);
  label = gen_label_rtx ();
  if (bcc_gen_fctn[(int) code] == 0)
    abort ();
  emit_jump_insn ((*bcc_gen_fctn[(int) code]) (label));
  emit_move_insn (target, invert ? (const_int_rtx[64 +1]) : (const_int_rtx[64]));
  emit_label (label);
  return target;
}
unsigned int
case_values_threshold (void)
{
  return (0 ? 4 : 5);
}
int
try_casesi (tree index_type, tree index_expr, tree minval, tree range,
     rtx table_label , rtx default_label)
{
  enum machine_mode index_mode = SImode;
  int index_bits = ((unsigned short) (((unsigned short) mode_size[index_mode]) * 8));
  rtx op1, op2, index;
  enum machine_mode op_mode;
  if (! 0)
    return 0;
  if (((unsigned short) (((unsigned short) mode_size[((index_type)->type.mode)]) * 8)) > ((unsigned short) (((unsigned short) mode_size[index_mode]) * 8)))
    {
      enum machine_mode omode = ((index_type)->type.mode);
      rtx rangertx = expand_expr (range, (rtx) 0, VOIDmode, 0);
      index_expr = build (MINUS_EXPR, index_type,
     index_expr, minval);
      minval = global_trees[TI_INTEGER_ZERO];
      index = expand_expr (index_expr, (rtx) 0, VOIDmode, 0);
      emit_cmp_and_jump_insns (rangertx, index, LTU, (rtx) 0,
          omode, 1, default_label);
      index = convert_to_mode (index_mode, index, 0);
    }
  else
    {
      if (((index_type)->type.mode) != index_mode)
 {
   index_expr = convert (lang_hooks.types.type_for_size
    (index_bits, 0), index_expr);
   index_type = ((index_expr)->common.type);
 }
      index = expand_expr (index_expr, (rtx) 0, VOIDmode, 0);
    }
  emit_queue ();
  index = protect_from_queue (index, 0);
  do_pending_stack_adjust ();
  op_mode = insn_data[(int) CODE_FOR_nothing].operand[0].mode;
  if (! (*insn_data[(int) CODE_FOR_nothing].operand[0].predicate)
      (index, op_mode))
    index = copy_to_mode_reg (op_mode, index);
  op1 = expand_expr (minval, (rtx) 0, VOIDmode, 0);
  op_mode = insn_data[(int) CODE_FOR_nothing].operand[1].mode;
  op1 = convert_modes (op_mode, ((((minval)->common.type))->type.mode),
         op1, ((((minval)->common.type))->common.unsigned_flag));
  if (! (*insn_data[(int) CODE_FOR_nothing].operand[1].predicate)
      (op1, op_mode))
    op1 = copy_to_mode_reg (op_mode, op1);
  op2 = expand_expr (range, (rtx) 0, VOIDmode, 0);
  op_mode = insn_data[(int) CODE_FOR_nothing].operand[2].mode;
  op2 = convert_modes (op_mode, ((((range)->common.type))->type.mode),
         op2, ((((range)->common.type))->common.unsigned_flag));
  if (! (*insn_data[(int) CODE_FOR_nothing].operand[2].predicate)
      (op2, op_mode))
    op2 = copy_to_mode_reg (op_mode, op2);
  emit_jump_insn ((0)
                                    );
  return 1;
}
static void
do_tablejump (rtx index, enum machine_mode mode, rtx range, rtx table_label,
       rtx default_label)
{
  rtx temp, vector;
  if (((range)->u.hwint[0]) > cfun->max_jumptable_ents)
    cfun->max_jumptable_ents = ((range)->u.hwint[0]);
  emit_cmp_and_jump_insns (index, range, GTU, (rtx) 0, mode, 1,
      default_label);
  if (mode != (0 ? DImode : SImode))
    index = convert_to_mode ((0 ? DImode : SImode), index, 1);
  index = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (gen_rtx_fmt_ee (MULT, ((0 ? DImode : SImode)), (index), (gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[(!0 || flag_pic ? SImode : DImode)])))))), (gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (table_label))))
                                          ;
    index = memory_address_noforce ((!0 || flag_pic ? SImode : DImode), index);
  temp = gen_reg_rtx ((!0 || flag_pic ? SImode : DImode));
  vector = gen_rtx_MEM ((!0 || flag_pic ? SImode : DImode), index);
  (((vector))->unchanging) = 1;
  (((vector))->call) = 1;
  convert_move (temp, vector, 0);
  emit_jump_insn (gen_tablejump (temp, table_label));
  if (! 0 && ! flag_pic)
    emit_barrier ();
}
int
try_tablejump (tree index_type, tree index_expr, tree minval, tree range,
        rtx table_label, rtx default_label)
{
  rtx index;
  if (! 1)
    return 0;
  index_expr = fold (build (MINUS_EXPR, index_type,
       convert (index_type, index_expr),
       convert (index_type, minval)));
  index = expand_expr (index_expr, (rtx) 0, VOIDmode, 0);
  emit_queue ();
  index = protect_from_queue (index, 0);
  do_pending_stack_adjust ();
  do_tablejump (index, ((index_type)->type.mode),
  convert_modes (((index_type)->type.mode),
          ((((range)->common.type))->type.mode),
          expand_expr (range, (rtx) 0,
         VOIDmode, 0),
          ((((range)->common.type))->common.unsigned_flag)),
  table_label, default_label);
  return 1;
}
int
vector_mode_valid_p (enum machine_mode mode)
{
  enum mode_class class = mode_class[mode];
  enum machine_mode innermode;
  if (class != MODE_VECTOR_INT
      && class != MODE_VECTOR_FLOAT)
    return 0;
  if ((((mode) == TImode || (mode) == V4SFmode || (mode) == V4SImode || (mode) == SFmode || (mode) == TFmode || ((mode) == V16QImode || (mode) == V8HImode || (mode) == V2DFmode || (mode) == V2DImode) || (((target_flags & 0x00008000) != 0) && ((mode) == DFmode || ((mode) == DImode || (mode) == V8QImode || (mode) == V4HImode || (mode) == V2SImode || (mode) == SImode)))) && ((target_flags & 0x00004000) != 0) ? 1 : ((mode) == DImode || (mode) == V8QImode || (mode) == V4HImode || (mode) == V2SImode || (mode) == SImode) && ((target_flags & 0x00002000) != 0) ? 1 : ((mode) == V2SFmode || (mode) == SFmode) && ((target_flags & 0x00020000) != 0) ? 1 : 0))
    return 1;
  innermode = mode_inner[mode];
  return (optab_table[OTI_mov])->handlers[innermode].insn_code != CODE_FOR_nothing;
}
static rtx
const_vector_from_tree (tree exp)
{
  rtvec v;
  int units, i;
  tree link, elt;
  enum machine_mode inner, mode;
  mode = ((((exp)->common.type))->type.mode);
  if (initializer_zerop (exp))
    return (const_tiny_rtx[0][(int) (mode)]);
  units = mode_nunits[mode];
  inner = mode_inner[mode];
  v = rtvec_alloc (units);
  link = ((exp)->vector.elements);
  for (i = 0; link; link = ((link)->common.chain), ++i)
    {
      elt = ((link)->list.value1);
      if (((enum tree_code) (elt)->common.code) == REAL_CST)
 ((v)->elem[i]) = const_double_from_real_value ((*((elt)->real_cst.real_cst_ptr)), inner)
              ;
      else
 ((v)->elem[i]) = immed_double_const ((((elt)->int_cst.int_cst).low),
            (((elt)->int_cst.int_cst).high),
            inner);
    }
  for (; i < units; ++i)
    ((v)->elem[i]) = (const_tiny_rtx[0][(int) (inner)]);
  return gen_rtx_fmt_E (CONST_VECTOR, (mode), (v));
}
const struct ggc_root_tab gt_ggc_r_gt_expr_h[] = {
  {
    &block_clear_fn,
    1,
    sizeof (block_clear_fn),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &block_move_fn,
    1,
    sizeof (block_move_fn),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static rtx debug_insn;
rtx current_output_insn;
static int last_linenum;
static int high_block_linenum;
static int high_function_linenum;
static const char *last_filename;
extern int length_unit_log;
rtx this_is_asm_operands;
static unsigned int insn_noperands;
static rtx last_ignored_compare = 0;
static int insn_counter = 0;
char regs_ever_live[53];
char regs_asm_clobbered[53];
int frame_pointer_needed;
static int block_depth;
static int app_on;
rtx final_sequence;
static int dialect_number;
static int asm_insn_count (rtx);
static void profile_function (FILE *);
static void profile_after_prologue (FILE *);
static unsigned char notice_source_line (rtx);
static rtx walk_alter_subreg (rtx *);
static void output_asm_name (void);
static void output_alternate_entry_point (FILE *, rtx);
static tree get_mem_expr_from_op (rtx, int *);
static void output_asm_operand_names (rtx *, int *, int);
static void output_operand (rtx, int);
static int final_addr_vec_align (rtx);
static int align_fuzz (rtx, rtx, int, unsigned);
void
init_final (const char *filename )
{
  app_on = 0;
  final_sequence = 0;
  dialect_number = (ix86_asm_dialect);
}
void
default_function_pro_epilogue (FILE *file ,
          long size )
{
}
void
no_asm_to_stream (FILE *file )
{
}
void
app_enable (void)
{
  if (! app_on)
    {
      fputs_unlocked ("#APP\n", asm_out_file);
      app_on = 1;
    }
}
void
app_disable (void)
{
  if (app_on)
    {
      fputs_unlocked ("#NO_APP\n", asm_out_file);
      app_on = 0;
    }
}
static int *insn_lengths;
varray_type insn_addresses_;
static int insn_lengths_max_uid;
int insn_current_address;
int insn_last_address;
int insn_current_align;
struct label_alignment
{
  short alignment;
  short max_skip;
};
static rtx *uid_align;
static int *uid_shuid;
static struct label_alignment *label_align;
void
init_insn_lengths (void)
{
  if (uid_shuid)
    {
      free (uid_shuid);
      uid_shuid = 0;
    }
  if (insn_lengths)
    {
      free (insn_lengths);
      insn_lengths = 0;
      insn_lengths_max_uid = 0;
    }
  (insn_addresses_ = 0);
  if (uid_align)
    {
      free (uid_align);
      uid_align = 0;
    }
}
int
get_attr_length (rtx insn )
{
  rtx body;
  int i;
  int length = 0;
  if (insn_lengths_max_uid > (((insn)->u.fld[0]).rtint))
    return insn_lengths[(((insn)->u.fld[0]).rtint)];
  else
    switch (((enum rtx_code) (insn)->code))
      {
      case NOTE:
      case BARRIER:
      case CODE_LABEL:
 return 0;
      case CALL_INSN:
 length = insn_default_length (insn);
 break;
      case JUMP_INSN:
 body = (((insn)->u.fld[5]).rtx1);
 if (((enum rtx_code) (body)->code) == ADDR_VEC || ((enum rtx_code) (body)->code) == ADDR_DIFF_VEC)
   {
   }
 else
   length = insn_default_length (insn);
 break;
      case INSN:
 body = (((insn)->u.fld[5]).rtx1);
 if (((enum rtx_code) (body)->code) == USE || ((enum rtx_code) (body)->code) == CLOBBER)
   return 0;
 else if (((enum rtx_code) (body)->code) == ASM_INPUT || asm_noperands (body) >= 0)
   length = asm_insn_count (body) * insn_default_length (insn);
 else if (((enum rtx_code) (body)->code) == SEQUENCE)
   for (i = 0; i < (((((body)->u.fld[0]).rtvec1))->num_elem); i++)
     length += get_attr_length ((((((body)->u.fld[0]).rtvec1))->elem[i]));
 else
   length = insn_default_length (insn);
 break;
      default:
 break;
      }
  return length;
}
static int
final_addr_vec_align (rtx addr_vec)
{
  int align = ((unsigned short) mode_size[((enum machine_mode) ((((addr_vec)->u.fld[5]).rtx1))->mode)]);
  if (align > 128 / 8)
    align = 128 / 8;
  return exact_log2_wide ((unsigned long) (align));
}
static int min_labelno, max_labelno;
int
label_to_alignment (rtx label)
{
  return (label_align[(((label)->u.fld[6]).rtint) - min_labelno].alignment);
}
static int
align_fuzz (rtx start, rtx end, int known_align_log, unsigned int growth)
{
  int uid = (((start)->u.fld[0]).rtint);
  rtx align_label;
  int known_align = 1 << known_align_log;
  int end_shuid = (uid_shuid[(((end)->u.fld[0]).rtint)]);
  int fuzz = 0;
  for (align_label = uid_align[uid]; align_label; align_label = uid_align[uid])
    {
      int align_addr, new_align;
      uid = (((align_label)->u.fld[0]).rtint);
      align_addr = ((insn_addresses_)->data.i[(uid)]) - insn_lengths[uid];
      if (uid_shuid[uid] > end_shuid)
 break;
      known_align_log = (label_align[(((align_label)->u.fld[6]).rtint) - min_labelno].alignment);
      new_align = 1 << known_align_log;
      if (new_align < known_align)
 continue;
      fuzz += (-align_addr ^ growth) & (new_align - known_align);
      known_align = new_align;
    }
  return fuzz;
}
int
insn_current_reference_address (rtx branch)
{
  rtx dest, seq;
  int seq_uid;
  if (! (insn_addresses_ != 0))
    return 0;
  seq = ((((((branch)->u.fld[1]).rtx1))->u.fld[2]).rtx1);
  seq_uid = (((seq)->u.fld[0]).rtint);
  if (((enum rtx_code) (branch)->code) != JUMP_INSN)
    return insn_current_address;
  dest = (((branch)->u.fld[9]).rtx1);
  if ((uid_shuid[(((seq)->u.fld[0]).rtint)]) < (uid_shuid[(((dest)->u.fld[0]).rtint)]))
    {
      return (insn_last_address + insn_lengths[seq_uid]
       - align_fuzz (seq, dest, length_unit_log, ~0));
    }
  else
    {
      return (insn_current_address
       + align_fuzz (dest, seq, length_unit_log, ~0));
    }
}
void
compute_alignments (void)
{
  int log, max_skip, max_log;
  basic_block bb;
  if (label_align)
    {
      free (label_align);
      label_align = 0;
    }
  max_labelno = max_label_num ();
  min_labelno = get_first_label_num ();
  label_align = xcalloc (max_labelno - min_labelno + 1,
    sizeof (struct label_alignment));
  if (! optimize || optimize_size)
    return;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      rtx label = (bb)->head_;
      int fallthru_frequency = 0, branch_frequency = 0, has_fallthru = 0;
      edge e;
      if (((enum rtx_code) (label)->code) != CODE_LABEL
   || probably_never_executed_bb_p (bb))
 continue;
      max_log = align_labels_log;
      max_skip = align_labels_max_skip;
      for (e = bb->pred; e; e = e->pred_next)
 {
   if (e->flags & 1)
     has_fallthru = 1, fallthru_frequency += (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
   else
     branch_frequency += (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
 }
      if (!has_fallthru
   && (branch_frequency > 10000 / 10
       || (bb->frequency > bb->prev_bb->frequency * 10
    && (bb->prev_bb->frequency
        <= ENTRY_BLOCK_PTR->frequency / 2))))
 {
   log = align_jumps_log;
   if (max_log < log)
     {
       max_log = log;
       max_skip = align_jumps_max_skip;
     }
 }
      if (has_fallthru
   && maybe_hot_bb_p (bb)
   && branch_frequency + fallthru_frequency > 10000 / 10
   && branch_frequency > fallthru_frequency * 2)
 {
   log = align_loops_log;
   if (max_log < log)
     {
       max_log = log;
       max_skip = align_loops_max_skip;
     }
 }
      (label_align[(((label)->u.fld[6]).rtint) - min_labelno].alignment) = max_log;
      (label_align[(((label)->u.fld[6]).rtint) - min_labelno].max_skip) = max_skip;
    }
}
void
shorten_branches (rtx first )
{
  rtx insn;
  int max_uid;
  int i;
  int max_log;
  int max_skip;
  rtx seq;
  int something_changed = 1;
  char *varying_length;
  rtx body;
  int uid;
  rtx align_tab[16];
  max_uid = get_max_uid ();
  free (uid_shuid);
  uid_shuid = xmalloc (max_uid * sizeof *uid_shuid);
  if (max_labelno != max_label_num ())
    {
      int old = max_labelno;
      int n_labels;
      int n_old_labels;
      max_labelno = max_label_num ();
      n_labels = max_labelno - min_labelno + 1;
      n_old_labels = old - min_labelno + 1;
      label_align = xrealloc (label_align,
         n_labels * sizeof (struct label_alignment));
      if (n_old_labels > n_labels)
 abort ();
      memset (label_align + n_old_labels, 0,
       (n_labels - n_old_labels) * sizeof (struct label_alignment));
    }
  max_log = 0;
  max_skip = 0;
  for (insn = get_insns (), i = 1; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      int log;
      (uid_shuid[(((insn)->u.fld[0]).rtint)]) = i++;
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
 }
      else if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 {
   rtx next;
   log = (label_align[(((insn)->u.fld[6]).rtint) - min_labelno].alignment);
   if (max_log < log)
     {
       max_log = log;
       max_skip = (label_align[(((insn)->u.fld[6]).rtint) - min_labelno].max_skip);
     }
   log = align_labels_log;
   if (max_log < log)
     {
       max_log = log;
       max_skip = align_labels_max_skip;
     }
   next = (((insn)->u.fld[2]).rtx1);
   if ((!0 && flag_pic && !1) || !1)
     if (next && ((enum rtx_code) (next)->code) == JUMP_INSN)
       {
  rtx nextbody = (((next)->u.fld[5]).rtx1);
  if (((enum rtx_code) (nextbody)->code) == ADDR_VEC
      || ((enum rtx_code) (nextbody)->code) == ADDR_DIFF_VEC)
    {
      log = final_addr_vec_align (next);
      if (max_log < log)
        {
   max_log = log;
   max_skip = align_labels_max_skip;
        }
    }
       }
   (label_align[(((insn)->u.fld[6]).rtint) - min_labelno].alignment) = max_log;
   (label_align[(((insn)->u.fld[6]).rtint) - min_labelno].max_skip) = max_skip;
   max_log = 0;
   max_skip = 0;
 }
      else if (((enum rtx_code) (insn)->code) == BARRIER)
 {
   rtx label;
   for (label = insn; label && ! ((((enum rtx_code) (label)->code) == INSN) || (((enum rtx_code) (label)->code) == JUMP_INSN) || (((enum rtx_code) (label)->code) == CALL_INSN));
        label = (((label)->u.fld[2]).rtx1))
     if (((enum rtx_code) (label)->code) == CODE_LABEL)
       {
  log = 0;
  if (max_log < log)
    {
      max_log = log;
      max_skip = 0;
    }
  break;
       }
 }
    }
  insn_lengths = xmalloc (max_uid * sizeof (*insn_lengths));
  insn_lengths_max_uid = max_uid;
  insn_addresses_ = varray_init ((max_uid), VARRAY_DATA_I, "insn_addresses");
  varying_length = xcalloc (max_uid, sizeof (char));
  uid_align = xcalloc (max_uid, sizeof *uid_align);
  for (i = 16; --i >= 0;)
    align_tab[i] = (rtx) 0;
  seq = get_last_insn ();
  for (; seq; seq = (((seq)->u.fld[1]).rtx1))
    {
      int uid = (((seq)->u.fld[0]).rtint);
      int log;
      log = (((enum rtx_code) (seq)->code) == CODE_LABEL ? (label_align[(((seq)->u.fld[6]).rtint) - min_labelno].alignment) : 0);
      uid_align[uid] = align_tab[0];
      if (log)
 {
   uid_align[uid] = align_tab[log];
   for (i = log - 1; i >= 0; i--)
     align_tab[i] = seq;
 }
    }
  for (insn_current_address = 0, insn = first;
       insn != 0;
       insn_current_address += insn_lengths[uid], insn = (((insn)->u.fld[2]).rtx1))
    {
      uid = (((insn)->u.fld[0]).rtint);
      insn_lengths[uid] = 0;
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 {
   int log = (label_align[(((insn)->u.fld[6]).rtint) - min_labelno].alignment);
   if (log)
     {
       int align = 1 << log;
       int new_address = (insn_current_address + align - 1) & -align;
       insn_lengths[uid] = new_address - insn_current_address;
     }
 }
      ((insn_addresses_)->data.i[(uid)]) = insn_current_address + insn_lengths[uid];
      if (((enum rtx_code) (insn)->code) == NOTE || ((enum rtx_code) (insn)->code) == BARRIER
   || ((enum rtx_code) (insn)->code) == CODE_LABEL)
 continue;
      if ((((insn))->volatil))
 continue;
      body = (((insn)->u.fld[5]).rtx1);
      if (((enum rtx_code) (body)->code) == ADDR_VEC || ((enum rtx_code) (body)->code) == ADDR_DIFF_VEC)
 {
   if ((!0 && flag_pic && !1) || !1)
     insn_lengths[uid] = ((((((body)->u.fld[((enum rtx_code) (body)->code) == ADDR_DIFF_VEC]).rtvec1))->num_elem)
     * ((unsigned short) mode_size[((enum machine_mode) (body)->mode)]));
 }
      else if (((enum rtx_code) (body)->code) == ASM_INPUT || asm_noperands (body) >= 0)
 insn_lengths[uid] = asm_insn_count (body) * insn_default_length (insn);
      else if (((enum rtx_code) (body)->code) == SEQUENCE)
 {
   int i;
   int const_delay_slots;
   const_delay_slots = 0;
   for (i = 0; i < (((((body)->u.fld[0]).rtvec1))->num_elem); i++)
     {
       rtx inner_insn = (((((body)->u.fld[0]).rtvec1))->elem[i]);
       int inner_uid = (((inner_insn)->u.fld[0]).rtint);
       int inner_length;
       if (((enum rtx_code) (body)->code) == ASM_INPUT
    || asm_noperands (((((((((body)->u.fld[0]).rtvec1))->elem[i]))->u.fld[5]).rtx1)) >= 0)
  inner_length = (asm_insn_count ((((inner_insn)->u.fld[5]).rtx1))
    * insn_default_length (inner_insn));
       else
  inner_length = insn_default_length (inner_insn);
       insn_lengths[inner_uid] = inner_length;
       if (const_delay_slots)
  {
    if ((varying_length[inner_uid]
         = insn_variable_length_p (inner_insn)) != 0)
      varying_length[uid] = 1;
    ((insn_addresses_)->data.i[(inner_uid)]) = (insn_current_address
      + insn_lengths[uid]);
  }
       else
  varying_length[inner_uid] = 0;
       insn_lengths[uid] += inner_length;
     }
 }
      else if (((enum rtx_code) (body)->code) != USE && ((enum rtx_code) (body)->code) != CLOBBER)
 {
   insn_lengths[uid] = insn_default_length (insn);
   varying_length[uid] = insn_variable_length_p (insn);
 }
    }
  while (something_changed)
    {
      something_changed = 0;
      insn_current_align = 16 - 1;
      for (insn_current_address = 0, insn = first;
    insn != 0;
    insn = (((insn)->u.fld[2]).rtx1))
 {
   int new_length;
   int length_align;
   uid = (((insn)->u.fld[0]).rtint);
   if (((enum rtx_code) (insn)->code) == CODE_LABEL)
     {
       int log = (label_align[(((insn)->u.fld[6]).rtint) - min_labelno].alignment);
       if (log > insn_current_align)
  {
    int align = 1 << log;
    int new_address= (insn_current_address + align - 1) & -align;
    insn_lengths[uid] = new_address - insn_current_address;
    insn_current_align = log;
    insn_current_address = new_address;
  }
       else
  insn_lengths[uid] = 0;
       ((insn_addresses_)->data.i[(uid)]) = insn_current_address;
       continue;
     }
   length_align = length_unit_log;
   if (length_align < insn_current_align)
     insn_current_align = length_align;
   insn_last_address = ((insn_addresses_)->data.i[(uid)]);
   ((insn_addresses_)->data.i[(uid)]) = insn_current_address;
   if (! (varying_length[uid]))
     {
       if (((enum rtx_code) (insn)->code) == INSN
    && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
  {
    int i;
    body = (((insn)->u.fld[5]).rtx1);
    for (i = 0; i < (((((body)->u.fld[0]).rtvec1))->num_elem); i++)
      {
        rtx inner_insn = (((((body)->u.fld[0]).rtvec1))->elem[i]);
        int inner_uid = (((inner_insn)->u.fld[0]).rtint);
        ((insn_addresses_)->data.i[(inner_uid)]) = insn_current_address;
        insn_current_address += insn_lengths[inner_uid];
      }
  }
       else
  insn_current_address += insn_lengths[uid];
       continue;
     }
   if (((enum rtx_code) (insn)->code) == INSN && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
     {
       int i;
       body = (((insn)->u.fld[5]).rtx1);
       new_length = 0;
       for (i = 0; i < (((((body)->u.fld[0]).rtvec1))->num_elem); i++)
  {
    rtx inner_insn = (((((body)->u.fld[0]).rtvec1))->elem[i]);
    int inner_uid = (((inner_insn)->u.fld[0]).rtint);
    int inner_length;
    ((insn_addresses_)->data.i[(inner_uid)]) = insn_current_address;
    if (! varying_length[inner_uid])
      inner_length = insn_lengths[inner_uid];
    else
      inner_length = insn_current_length (inner_insn);
    if (inner_length != insn_lengths[inner_uid])
      {
        insn_lengths[inner_uid] = inner_length;
        something_changed = 1;
      }
    insn_current_address += insn_lengths[inner_uid];
    new_length += inner_length;
  }
     }
   else
     {
       new_length = insn_current_length (insn);
       insn_current_address += new_length;
     }
   if (new_length != insn_lengths[uid])
     {
       insn_lengths[uid] = new_length;
       something_changed = 1;
     }
 }
      if (!optimize)
 break;
    }
  free (varying_length);
}
static int
asm_insn_count (rtx body)
{
  const char *template;
  int count = 1;
  if (((enum rtx_code) (body)->code) == ASM_INPUT)
    template = (((body)->u.fld[0]).rtstr);
  else
    template = decode_asm_operands (body, ((void *)0), ((void *)0), ((void *)0), ((void *)0));
  for (; *template; template++)
    if (((*template) == ';') || *template == '\n')
      count++;
  return count;
}
void
final_start_function (rtx first , FILE *file,
        int optimize )
{
  block_depth = 0;
  this_is_asm_operands = 0;
  last_filename = locator_file (prologue_locator);
  last_linenum = locator_line (prologue_locator);
  high_block_linenum = high_function_linenum = last_linenum;
  (*debug_hooks->begin_prologue) (last_linenum, last_filename);
  if (write_symbols != DWARF2_DEBUG && write_symbols != VMS_AND_DWARF2_DEBUG)
    dwarf2out_begin_prologue (0, ((void *)0));
  if (dwarf2out_do_frame ())
    dwarf2out_frame_debug ((rtx) 0);
  if (write_symbols)
    {
      remove_unnecessary_notes ();
      reemit_insn_block_notes ();
      number_blocks (current_function_decl);
      ((((current_function_decl)->decl.initial))->common.asm_written_flag) = 1;
    }
  targetm.asm_out.function_prologue (file, get_frame_size ());
  if (! 1)
    profile_after_prologue (file);
}
static void
profile_after_prologue (FILE *file )
{
  if ((cfun->profile))
    profile_function (file);
}
static void
profile_function (FILE *file )
{
  int sval = (cfun->returns_struct);
  rtx svrtx = targetm.calls.struct_value_rtx (((current_function_decl)->common.type), 1);
  int cxt = cfun->static_chain_decl != ((void *)0);
  if (! 1)
    {
      int align = ((128) < ((8 * (0 ? 8 : 4))) ? (128) : ((8 * (0 ? 8 : 4))));
      data_section ();
      if ((floor_log2_wide ((unsigned long) (align / 8)))!=0) fprintf ((file), "\t.align %d\n", 1<<(floor_log2_wide ((unsigned long) (align / 8))));
      targetm.asm_out.internal_label (file, "LP", (cfun->funcdef_no));
      assemble_integer ((const_int_rtx[64]), (8 * (0 ? 8 : 4)) / 8, align, 1);
    }
  function_section (current_function_decl);
  if (sval && svrtx != (rtx) 0 && (((enum rtx_code) (svrtx)->code) == REG))
    do { if (0) asm_fprintf ((file), "\tpush{q}\t%%r%s\n", reg_names[((((svrtx)->u.fld[0]).rtuint))] + ((((((svrtx)->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((svrtx)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) != 0)); else asm_fprintf ((file), "\tpush{l}\t%%e%s\n", reg_names[((((svrtx)->u.fld[0]).rtuint))]); } while (0);
  if (cxt)
    {
      do { if (0) asm_fprintf ((file), "\tpush{q}\t%%r%s\n", reg_names[((0 ? (((((20 + 1) + 7) + 1) + 7) + 1) + 10 - 8 : 2))] + ((((0 ? (((((20 + 1) + 7) + 1) + 7) + 1) + 10 - 8 : 2)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((0 ? (((((20 + 1) + 7) + 1) + 7) + 1) + 10 - 8 : 2)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) != 0)); else asm_fprintf ((file), "\tpush{l}\t%%e%s\n", reg_names[((0 ? (((((20 + 1) + 7) + 1) + 7) + 1) + 10 - 8 : 2))]); } while (0);
    }
  x86_function_profiler (file, (cfun->funcdef_no));
  if (cxt)
    {
      do { if (0) asm_fprintf ((file), "\tpop{q}\t%%r%s\n", reg_names[((0 ? (((((20 + 1) + 7) + 1) + 7) + 1) + 10 - 8 : 2))] + ((((0 ? (((((20 + 1) + 7) + 1) + 7) + 1) + 10 - 8 : 2)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((0 ? (((((20 + 1) + 7) + 1) + 7) + 1) + 10 - 8 : 2)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) != 0)); else asm_fprintf ((file), "\tpop{l}\t%%e%s\n", reg_names[((0 ? (((((20 + 1) + 7) + 1) + 7) + 1) + 10 - 8 : 2))]); } while (0);
    }
  if (sval && svrtx != (rtx) 0 && (((enum rtx_code) (svrtx)->code) == REG))
    do { if (0) asm_fprintf ((file), "\tpop{q}\t%%r%s\n", reg_names[((((svrtx)->u.fld[0]).rtuint))] + ((((((svrtx)->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((svrtx)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) != 0)); else asm_fprintf ((file), "\tpop{l}\t%%e%s\n", reg_names[((((svrtx)->u.fld[0]).rtuint))]); } while (0);
}
void
final_end_function (void)
{
  app_disable ();
  (*debug_hooks->end_function) (high_function_linenum);
  targetm.asm_out.function_epilogue (asm_out_file, get_frame_size ());
  (*debug_hooks->end_epilogue) (last_linenum, last_filename);
  if (write_symbols != DWARF2_DEBUG && write_symbols != VMS_AND_DWARF2_DEBUG
      && dwarf2out_do_frame ())
    dwarf2out_end_epilogue (last_linenum, last_filename);
}
void
final (rtx first, FILE *file, int optimize, int prescan)
{
  rtx insn;
  int max_uid = 0;
  int seen = 0;
  last_ignored_compare = 0;
  for (insn = first; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if ((((insn)->u.fld[0]).rtint) > max_uid)
 max_uid = (((insn)->u.fld[0]).rtint);
    }
  init_recog ();
  ;
  for (insn = (((first)->u.fld[2]).rtx1); insn;)
    {
      if ((unsigned) (((insn)->u.fld[0]).rtint) >= ((insn_addresses_)->num_elements))
 {
   if (((enum rtx_code) (insn)->code) == NOTE)
     insn_current_address = -1;
   else
     abort ();
 }
      else
 insn_current_address = ((insn_addresses_)->data.i[((((insn)->u.fld[0]).rtint))]);
      insn = final_scan_insn (insn, file, optimize, prescan, 0, &seen);
    }
}
const char *
get_insn_template (int code, rtx insn)
{
  switch (insn_data[code].output_format)
    {
    case 1:
      return insn_data[code].output.single;
    case 2:
      return insn_data[code].output.multi[which_alternative];
    case 3:
      if (insn == ((void *)0))
 abort ();
      return (*insn_data[code].output.function) (recog_data.operand, insn);
    default:
      abort ();
    }
}
static void
output_alternate_entry_point (FILE *file, rtx insn)
{
  const char *name = (((insn)->u.fld[7]).rtstr);
  switch (((enum label_kind) (((insn)->jump << 1) | (insn)->call)))
    {
    case LABEL_WEAK_ENTRY:
      do { fputs_unlocked ("\t.weak\t", (file)); assemble_name ((file), (name)); fputc_unlocked ('\n', (file)); } while (0);
    case LABEL_GLOBAL_ENTRY:
      targetm.asm_out.globalize_label (file, name);
    case LABEL_STATIC_ENTRY:
      do { fputs_unlocked ("\t.type\t", file); assemble_name (file, name); fputs_unlocked (", ", file); fprintf (file, "@%s", "function"); putc_unlocked ('\n', file); } while (0);
      do { assemble_name ((file), (name)); fputs_unlocked (":\n", (file)); } while (0);
      break;
    case LABEL_NORMAL:
    default:
      abort ();
    }
}
unsigned char
scan_ahead_for_unlikely_executed_note (rtx insn)
{
  rtx temp;
  int bb_note_count = 0;
  for (temp = insn; temp; temp = (((temp)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (temp)->code) == NOTE
   && (((temp)->u.fld[5]).rtint) == NOTE_INSN_UNLIKELY_EXECUTED_CODE)
 return 1;
      if (((enum rtx_code) (temp)->code) == NOTE
   && (((temp)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK)
 {
   bb_note_count++;
   if (bb_note_count > 1)
     return 0;
 }
      if (((((enum rtx_code) (temp)->code) == INSN) || (((enum rtx_code) (temp)->code) == JUMP_INSN) || (((enum rtx_code) (temp)->code) == CALL_INSN)))
 return 0;
    }
  return 0;
}
rtx
final_scan_insn (rtx insn, FILE *file, int optimize ,
   int prescan, int nopeepholes ,
   int *seen)
{
  insn_counter++;
  if ((((insn))->volatil))
    return (((insn)->u.fld[2]).rtx1);
  switch (((enum rtx_code) (insn)->code))
    {
    case NOTE:
      if (prescan > 0)
 break;
      switch ((((insn)->u.fld[5]).rtint))
 {
 case NOTE_INSN_DELETED:
 case NOTE_INSN_LOOP_BEG:
 case NOTE_INSN_LOOP_END:
 case NOTE_INSN_LOOP_END_TOP_COND:
 case NOTE_INSN_LOOP_CONT:
 case NOTE_INSN_LOOP_VTOP:
 case NOTE_INSN_FUNCTION_END:
 case NOTE_INSN_REPEATED_LINE_NUMBER:
 case NOTE_INSN_EXPECTED_VALUE:
   break;
 case NOTE_INSN_UNLIKELY_EXECUTED_CODE:
   unlikely_text_section ();
   break;
 case NOTE_INSN_BASIC_BLOCK:
   if (flag_reorder_blocks_and_partition
       && in_unlikely_text_section()
       && !scan_ahead_for_unlikely_executed_note (insn))
     text_section ();
   if (flag_debug_asm)
     fprintf (asm_out_file, "\t%s basic block %d\n",
       "#", (((insn)->u.fld[4]).bb)->index);
   if ((*seen & (4 | 1)) == 1)
     {
       *seen |= 4;
       last_filename = ((void *)0);
     }
   else
     *seen |= 1;
   break;
 case NOTE_INSN_EH_REGION_BEG:
   (*targetm.asm_out.internal_label) (asm_out_file, "LEHB", (((insn)->u.fld[4]).rtint))
                             ;
   break;
 case NOTE_INSN_EH_REGION_END:
   (*targetm.asm_out.internal_label) (asm_out_file, "LEHE", (((insn)->u.fld[4]).rtint))
                             ;
   break;
 case NOTE_INSN_PROLOGUE_END:
   targetm.asm_out.function_end_prologue (file);
   profile_after_prologue (file);
   if ((*seen & (4 | 2)) == 2)
     {
       *seen |= 4;
       last_filename = ((void *)0);
     }
   else
     *seen |= 2;
   break;
 case NOTE_INSN_EPILOGUE_BEG:
   targetm.asm_out.function_begin_epilogue (file);
   break;
 case NOTE_INSN_FUNCTION_BEG:
   app_disable ();
   (*debug_hooks->end_prologue) (last_linenum, last_filename);
   if ((*seen & (4 | 2)) == 2)
     {
       *seen |= 4;
       last_filename = ((void *)0);
     }
   else
     *seen |= 2;
   break;
 case NOTE_INSN_BLOCK_BEG:
   if (debug_info_level == DINFO_LEVEL_NORMAL
       || debug_info_level == DINFO_LEVEL_VERBOSE
       || write_symbols == DWARF_DEBUG
       || write_symbols == DWARF2_DEBUG
       || write_symbols == VMS_AND_DWARF2_DEBUG
       || write_symbols == VMS_DEBUG)
     {
       int n = (((((insn)->u.fld[4]).rttree))->block.block_num);
       app_disable ();
       ++block_depth;
       high_block_linenum = last_linenum;
       (*debug_hooks->begin_block) (last_linenum, n);
       (((((insn)->u.fld[4]).rttree))->common.asm_written_flag) = 1;
     }
   break;
 case NOTE_INSN_BLOCK_END:
   if (debug_info_level == DINFO_LEVEL_NORMAL
       || debug_info_level == DINFO_LEVEL_VERBOSE
       || write_symbols == DWARF_DEBUG
       || write_symbols == DWARF2_DEBUG
       || write_symbols == VMS_AND_DWARF2_DEBUG
       || write_symbols == VMS_DEBUG)
     {
       int n = (((((insn)->u.fld[4]).rttree))->block.block_num);
       app_disable ();
       --block_depth;
       if (block_depth < 0)
  abort ();
       (*debug_hooks->end_block) (high_block_linenum, n);
     }
   break;
 case NOTE_INSN_DELETED_LABEL:
   (*targetm.asm_out.internal_label) (file, "L", (((insn)->u.fld[6]).rtint));
   break;
 case NOTE_INSN_VAR_LOCATION:
   (*debug_hooks->var_location) (insn);
   break;
 case 0:
   break;
 default:
   if ((((insn)->u.fld[5]).rtint) <= 0)
     abort ();
   break;
 }
      break;
    case BARRIER:
      if (dwarf2out_do_frame ())
 dwarf2out_frame_debug (insn);
      break;
    case CODE_LABEL:
      if ((((insn)->u.fld[6]).rtint) <= max_labelno)
 {
   int align = (label_align[(((insn)->u.fld[6]).rtint) - min_labelno].alignment);
   int max_skip = (label_align[(((insn)->u.fld[6]).rtint) - min_labelno].max_skip);
   if (align && (((insn)->u.fld[2]).rtx1))
     {
       do { if ((align) != 0) { if ((max_skip) == 0) fprintf ((file), "\t.p2align %d\n", (align)); else fprintf ((file), "\t.p2align %d,,%d\n", (align), (max_skip)); } } while (0);
     }
 }
      if (prescan > 0)
 break;
      if ((((insn)->u.fld[7]).rtstr))
 (*debug_hooks->label) (insn);
      if (flag_reorder_blocks_and_partition)
 {
   rtx tmp_table, tmp_label;
   if (((enum rtx_code) (insn)->code) == CODE_LABEL
       && tablejump_p ((((insn)->u.fld[2]).rtx1), &tmp_label, &tmp_table))
     {
     }
   else if (scan_ahead_for_unlikely_executed_note (insn))
     unlikely_text_section ();
   else
     {
       if (in_unlikely_text_section ())
  text_section ();
     }
 }
      if (app_on)
 {
   fputs_unlocked ("#NO_APP\n", file);
   app_on = 0;
 }
      if ((((insn)->u.fld[2]).rtx1) != 0
   && ((enum rtx_code) ((((insn)->u.fld[2]).rtx1))->code) == JUMP_INSN)
 {
   rtx nextbody = ((((((insn)->u.fld[2]).rtx1))->u.fld[5]).rtx1);
   if (((enum rtx_code) (nextbody)->code) == ADDR_VEC
       || ((enum rtx_code) (nextbody)->code) == ADDR_DIFF_VEC)
     {
       if (! (!0 && flag_pic && !1))
  {
    int log_align;
    readonly_data_section ();
    log_align = final_addr_vec_align ((((insn)->u.fld[2]).rtx1));
    if ((log_align)!=0) fprintf ((file), "\t.align %d\n", 1<<(log_align));
  }
       else
  function_section (current_function_decl);
       do { if ((2)!=0) fprintf (((file)), "\t.align %d\n", 1<<(2)); (*targetm.asm_out.internal_label) (file, "L", (((insn)->u.fld[6]).rtint)); } while (0)
                          ;
       break;
     }
 }
      if ((((enum label_kind) (((insn)->jump << 1) | (insn)->call)) != LABEL_NORMAL))
 output_alternate_entry_point (file, insn);
      else
 targetm.asm_out.internal_label (file, "L", (((insn)->u.fld[6]).rtint));
      break;
    default:
      {
 rtx body = (((insn)->u.fld[5]).rtx1);
 int insn_code_number;
 const char *template;
 rtx note;
 if (((enum rtx_code) (body)->code) == USE
     || ((enum rtx_code) (body)->code) == CLOBBER)
   break;
 if (((enum rtx_code) (body)->code) == ADDR_VEC || ((enum rtx_code) (body)->code) == ADDR_DIFF_VEC)
   {
     int vlen, idx;
     if (prescan > 0)
       break;
     if (app_on)
       {
  fputs_unlocked ("#NO_APP\n", file);
  app_on = 0;
       }
     vlen = (((((body)->u.fld[((enum rtx_code) (body)->code) == ADDR_DIFF_VEC]).rtvec1))->num_elem);
     for (idx = 0; idx < vlen; idx++)
       {
  if (((enum rtx_code) (body)->code) == ADDR_VEC)
    {
      ix86_output_addr_vec_elt ((file), ((((((((((((body)->u.fld[0]).rtvec1))->elem[idx]))->u.fld[0]).rtx1))->u.fld[6]).rtint)))
                                                                    ;
    }
  else
    {
      ix86_output_addr_diff_elt ((file), ((((((((((((body)->u.fld[1]).rtvec1))->elem[idx]))->u.fld[0]).rtx1))->u.fld[6]).rtint)), ((((((((((body)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[6]).rtint)))
                                                      ;
    }
       }
     function_section (current_function_decl);
     break;
   }
 if (notice_source_line (insn))
   {
     (*debug_hooks->source_line) (last_linenum, last_filename);
   }
 if (((enum rtx_code) (body)->code) == ASM_INPUT)
   {
     const char *string1 = (((body)->u.fld[0]).rtstr);
     ;
     if (prescan > 0)
       break;
     if (string1[0])
       {
  if (! app_on)
    {
      fputs_unlocked ("#APP\n", file);
      app_on = 1;
    }
  fprintf (asm_out_file, "\t%s\n", string1);
       }
     break;
   }
 if (asm_noperands (body) >= 0)
   {
     unsigned int noperands = asm_noperands (body);
     rtx *ops = C_alloca(noperands * sizeof (rtx));
     const char *string1;
     ;
     if (prescan > 0)
       break;
     string1 = decode_asm_operands (body, ops, ((void *)0), ((void *)0), ((void *)0));
     insn_noperands = noperands;
     this_is_asm_operands = insn;
     if (string1[0])
       {
  if (! app_on)
    {
      fputs_unlocked ("#APP\n", file);
      app_on = 1;
    }
         output_asm_insn (string1, ops);
       }
     this_is_asm_operands = 0;
     break;
   }
 if (prescan <= 0 && app_on)
   {
     fputs_unlocked ("#NO_APP\n", file);
     app_on = 0;
   }
 if (((enum rtx_code) (body)->code) == SEQUENCE)
   {
     int i;
     rtx next;
     if (prescan > 0)
       break;
     final_sequence = body;
     if (dwarf2out_do_frame ())
       for (i = 1; i < (((((body)->u.fld[0]).rtvec1))->num_elem); i++)
  dwarf2out_frame_debug ((((((body)->u.fld[0]).rtvec1))->elem[i]));
     next = final_scan_insn ((((((body)->u.fld[0]).rtvec1))->elem[0]), file, 0, prescan, 1, seen);
     if (next != (((((body)->u.fld[0]).rtvec1))->elem[1]))
       {
  final_sequence = 0;
  return next;
       }
     for (i = 1; i < (((((body)->u.fld[0]).rtvec1))->num_elem); i++)
       {
  rtx insn = (((((body)->u.fld[0]).rtvec1))->elem[i]);
  rtx next = (((insn)->u.fld[2]).rtx1);
  do
    insn = final_scan_insn (insn, file, 0, prescan, 1, seen);
  while (insn != next);
       }
     final_sequence = 0;
     if (((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[0]))->code) == CALL_INSN)
       {
  ;
       }
     break;
   }
 body = (((insn)->u.fld[5]).rtx1);
 insn_code_number = ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn));
 cleanup_subreg_operands (insn);
 if (flag_dump_rtl_in_asm)
   {
     print_rtx_head = "#";
     print_rtl_single (asm_out_file, insn);
     print_rtx_head = "";
   }
 if (! constrain_operands_cached (1))
   _fatal_insn_not_found (insn, "gcc.c", 494792, "?");
 current_output_insn = debug_insn = insn;
 if (((enum rtx_code) (insn)->code) == CALL_INSN && dwarf2out_do_frame ())
   dwarf2out_frame_debug (insn);
 template = get_insn_template (insn_code_number, insn);
 if (template == 0)
   {
     rtx prev;
     if (prev_nonnote_insn (insn) != last_ignored_compare)
       abort ();
     for (prev = insn;
   prev != last_ignored_compare;
   prev = (((prev)->u.fld[1]).rtx1))
       {
  if (((enum rtx_code) (prev)->code) == NOTE)
    delete_insn (prev);
       }
     return prev;
   }
 if (template[0] == '#' && template[1] == '\0')
   {
     rtx new = try_split (body, insn, 0);
     if (new == insn && (((new)->u.fld[5]).rtx1) == body)
       _fatal_insn ("could not split insn", insn, "gcc.c", 494862, "?");
     abort ();
     return new;
   }
 if (prescan > 0)
   break;
 output_asm_insn (template, recog_data.operand);
 if (((enum rtx_code) (insn)->code) == INSN
     && final_sequence == 0
     && dwarf2out_do_frame ())
   dwarf2out_frame_debug (insn);
 note = find_reg_note (insn, REG_VTABLE_REF, (rtx) 0);
 current_output_insn = debug_insn = 0;
      }
    }
  return (((insn)->u.fld[2]).rtx1);
}
static unsigned char
notice_source_line (rtx insn)
{
  const char *filename = insn_file (insn);
  int linenum = insn_line (insn);
  if (filename && (filename != last_filename || last_linenum != linenum))
    {
      last_filename = filename;
      last_linenum = linenum;
      high_block_linenum = ((last_linenum) > (high_block_linenum) ? (last_linenum) : (high_block_linenum));
      high_function_linenum = ((last_linenum) > (high_function_linenum) ? (last_linenum) : (high_function_linenum));
      return 1;
    }
  return 0;
}
void
cleanup_subreg_operands (rtx insn)
{
  int i;
  extract_insn_cached (insn);
  for (i = 0; i < recog_data.n_operands; i++)
    {
      if (((enum rtx_code) (*recog_data.operand_loc[i])->code) == SUBREG)
 recog_data.operand[i] = alter_subreg (recog_data.operand_loc[i]);
      else if (((enum rtx_code) (recog_data.operand[i])->code) == PLUS
        || ((enum rtx_code) (recog_data.operand[i])->code) == MULT
        || (((enum rtx_code) (recog_data.operand[i])->code) == MEM))
 recog_data.operand[i] = walk_alter_subreg (recog_data.operand_loc[i]);
    }
  for (i = 0; i < recog_data.n_dups; i++)
    {
      if (((enum rtx_code) (*recog_data.dup_loc[i])->code) == SUBREG)
 *recog_data.dup_loc[i] = alter_subreg (recog_data.dup_loc[i]);
      else if (((enum rtx_code) (*recog_data.dup_loc[i])->code) == PLUS
        || ((enum rtx_code) (*recog_data.dup_loc[i])->code) == MULT
        || (((enum rtx_code) (*recog_data.dup_loc[i])->code) == MEM))
 *recog_data.dup_loc[i] = walk_alter_subreg (recog_data.dup_loc[i]);
    }
}
rtx
alter_subreg (rtx *xp)
{
  rtx x = *xp;
  rtx y = (((x)->u.fld[0]).rtx1);
  if ((((enum rtx_code) (y)->code) == MEM))
    *xp = adjust_address_1 (y, ((enum machine_mode) (x)->mode), (((x)->u.fld[1]).rtuint), 1, 1);
  else
    {
      rtx new = simplify_subreg (((enum machine_mode) (x)->mode), y, ((enum machine_mode) (y)->mode),
     (((x)->u.fld[1]).rtuint));
      if (new != 0)
 *xp = new;
      else if ((((enum rtx_code) (y)->code) == REG))
 {
   unsigned int regno = subreg_hard_regno (x, 1);
   *xp = gen_rtx_REG_offset (y, ((enum machine_mode) (x)->mode), regno, (((x)->u.fld[1]).rtuint));
 }
      else
 abort ();
    }
  return *xp;
}
static rtx
walk_alter_subreg (rtx *xp)
{
  rtx x = *xp;
  switch (((enum rtx_code) (x)->code))
    {
    case PLUS:
    case MULT:
      (((x)->u.fld[0]).rtx1) = walk_alter_subreg (&(((x)->u.fld[0]).rtx1));
      (((x)->u.fld[1]).rtx1) = walk_alter_subreg (&(((x)->u.fld[1]).rtx1));
      break;
    case MEM:
      (((x)->u.fld[0]).rtx1) = walk_alter_subreg (&(((x)->u.fld[0]).rtx1));
      break;
    case SUBREG:
      return alter_subreg (xp);
    default:
      break;
    }
  return *xp;
}
void
output_operand_lossage (const char *msgid, ...)
{
  char *fmt_string;
  char *new_message;
  const char *pfx_str;
  va_list ap;
  __builtin_va_start(ap,msgid);
  pfx_str = this_is_asm_operands ? "invalid `asm': " : "output_operand: ";
  asprintf (&fmt_string, "%s%s", pfx_str, msgid);
  vasprintf (&new_message, fmt_string, ap);
  if (this_is_asm_operands)
    error_for_asm (this_is_asm_operands, "%s", new_message);
  else
    internal_error ("%s", new_message);
  free (fmt_string);
  free (new_message);
  __builtin_va_end(ap);
}
static void
output_asm_name (void)
{
  if (debug_insn)
    {
      int num = (((debug_insn)->u.fld[6]).rtint);
      fprintf (asm_out_file, "\t%s %d\t%s",
        "#", (((debug_insn)->u.fld[0]).rtint),
        insn_data[num].name);
      if (insn_data[num].n_alternatives > 1)
 fprintf (asm_out_file, "/%d", which_alternative + 1);
      fprintf (asm_out_file, "\t[length = %d]",
        get_attr_length (debug_insn));
      debug_insn = 0;
    }
}
static tree
get_mem_expr_from_op (rtx op, int *paddressp)
{
  tree expr;
  int inner_addressp;
  *paddressp = 0;
  if ((((enum rtx_code) (op)->code) == REG))
    return ((((op)->u.fld[2]).rtreg) == 0 ? 0 : (((op)->u.fld[2]).rtreg)->decl);
  else if (!(((enum rtx_code) (op)->code) == MEM))
    return 0;
  if (((((op)->u.fld[1]).rtmem) == 0 ? 0 : (((op)->u.fld[1]).rtmem)->expr) != 0)
    return ((((op)->u.fld[1]).rtmem) == 0 ? 0 : (((op)->u.fld[1]).rtmem)->expr);
  *paddressp = 1;
  op = (((op)->u.fld[0]).rtx1);
  if ((expr = get_mem_expr_from_op (op, &inner_addressp)) && ! inner_addressp)
    return expr;
  else if (((enum rtx_code) (op)->code) == PLUS
    && (expr = get_mem_expr_from_op ((((op)->u.fld[1]).rtx1), &inner_addressp)))
    return expr;
  while ((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_UNARY
  || (rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_BIN_ARITH)
    op = (((op)->u.fld[0]).rtx1);
  expr = get_mem_expr_from_op (op, &inner_addressp);
  return inner_addressp ? 0 : expr;
}
static void
output_asm_operand_names (rtx *operands, int *oporder, int nops)
{
  int wrote = 0;
  int i;
  for (i = 0; i < nops; i++)
    {
      int addressp;
      rtx op = operands[oporder[i]];
      tree expr = get_mem_expr_from_op (op, &addressp);
      fprintf (asm_out_file, "%c%s",
        wrote ? ',' : '\t', wrote ? "" : "#");
      wrote = 1;
      if (expr)
 {
   fprintf (asm_out_file, "%s",
     addressp ? "*" : "");
   print_mem_expr (asm_out_file, expr);
   wrote = 1;
 }
      else if ((((enum rtx_code) (op)->code) == REG) && (((op)->u.fld[1]).rtuint)
        && (((op)->u.fld[1]).rtuint) != (((op)->u.fld[0]).rtuint))
 fprintf (asm_out_file, " tmp%i", (((op)->u.fld[1]).rtuint));
    }
}
void
output_asm_insn (const char *template, rtx *operands)
{
  const char *p;
  int c;
  int dialect = 0;
  int oporder[30];
  char opoutput[30];
  int ops = 0;
  if (*template == 0)
    return;
  memset (opoutput, 0, sizeof opoutput);
  p = template;
  putc_unlocked ('\t', asm_out_file);
  while ((c = *p++))
    switch (c)
      {
      case '\n':
 if (flag_verbose_asm)
   output_asm_operand_names (operands, oporder, ops);
 if (flag_print_asm_name)
   output_asm_name ();
 ops = 0;
 memset (opoutput, 0, sizeof opoutput);
 putc_unlocked (c, asm_out_file);
 break;
      case '{':
 {
   int i;
   if (dialect)
     output_operand_lossage ("nested assembly dialect alternatives");
   else
     dialect = 1;
   for (i = 0; i < dialect_number; i++)
     {
       while (*p && *p != '}' && *p++ != '|')
  ;
       if (*p == '}')
  break;
       if (*p == '|')
  p++;
     }
   if (*p == '\0')
     output_operand_lossage ("unterminated assembly dialect alternative");
 }
 break;
      case '|':
 if (dialect)
   {
     do
       {
  if (*p == '\0')
    {
      output_operand_lossage ("unterminated assembly dialect alternative");
      break;
    }
       }
     while (*p++ != '}');
     dialect = 0;
   }
 else
   putc_unlocked (c, asm_out_file);
 break;
      case '}':
 if (! dialect)
   putc_unlocked (c, asm_out_file);
 dialect = 0;
 break;
      case '%':
 if (*p == '%')
   {
     p++;
     putc_unlocked (c, asm_out_file);
   }
 else if (*p == '=')
   {
     p++;
     fprintf (asm_out_file, "%d", insn_counter);
   }
 else if ((_sch_istable[(*p) & 0xff] & (unsigned short)(_sch_isalpha)))
   {
     int letter = *p++;
     c = atoi (p);
     if (! (_sch_istable[(*p) & 0xff] & (unsigned short)(_sch_isdigit)))
       output_operand_lossage ("operand number missing after %%-letter");
     else if (this_is_asm_operands
       && (c < 0 || (unsigned int) c >= insn_noperands))
       output_operand_lossage ("operand number out of range");
     else if (letter == 'l')
       output_asm_label (operands[c]);
     else if (letter == 'a')
       output_address (operands[c]);
     else if (letter == 'c')
       {
  if (constant_address_p (operands[c]))
    output_addr_const (asm_out_file, operands[c]);
  else
    output_operand (operands[c], 'c');
       }
     else if (letter == 'n')
       {
  if (((enum rtx_code) (operands[c])->code) == CONST_INT)
    fprintf (asm_out_file, "%ld",
      - ((operands[c])->u.hwint[0]));
  else
    {
      putc_unlocked ('-', asm_out_file);
      output_addr_const (asm_out_file, operands[c]);
    }
       }
     else
       output_operand (operands[c], letter);
     if (!opoutput[c])
       oporder[ops++] = c;
     opoutput[c] = 1;
     while ((_sch_istable[(c = *p) & 0xff] & (unsigned short)(_sch_isdigit)))
       p++;
   }
 else if ((_sch_istable[(*p) & 0xff] & (unsigned short)(_sch_isdigit)))
   {
     c = atoi (p);
     if (this_is_asm_operands
  && (c < 0 || (unsigned int) c >= insn_noperands))
       output_operand_lossage ("operand number out of range");
     else
       output_operand (operands[c], 0);
     if (!opoutput[c])
       oporder[ops++] = c;
     opoutput[c] = 1;
     while ((_sch_istable[(c = *p) & 0xff] & (unsigned short)(_sch_isdigit)))
       p++;
   }
 else if ((((unsigned char) *p) == '*' || ((unsigned char) *p) == '+' || ((unsigned char) *p) == '&'))
   output_operand ((rtx) 0, *p++);
 else
   output_operand_lossage ("invalid %%-code");
 break;
      default:
 putc_unlocked (c, asm_out_file);
      }
  if (flag_verbose_asm)
    output_asm_operand_names (operands, oporder, ops);
  if (flag_print_asm_name)
    output_asm_name ();
  putc_unlocked ('\n', asm_out_file);
}
void
output_asm_label (rtx x)
{
  char buf[256];
  if (((enum rtx_code) (x)->code) == LABEL_REF)
    x = (((x)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x)->code) == CODE_LABEL
      || (((enum rtx_code) (x)->code) == NOTE
   && (((x)->u.fld[5]).rtint) == NOTE_INSN_DELETED_LABEL))
    do { sprintf (buf, "*.%s%u", "L", (unsigned) ((((x)->u.fld[6]).rtint))); } while (0);
  else
    output_operand_lossage ("`%%l' operand isn't a label");
  assemble_name (asm_out_file, buf);
}
static void
output_operand (rtx x, int code )
{
  if (x && ((enum rtx_code) (x)->code) == SUBREG)
    x = alter_subreg (&x);
  if (x && (((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) >= 53)
    abort ();
  print_operand ((asm_out_file), (x), (code));
}
void
output_address (rtx x)
{
  walk_alter_subreg (&x);
  print_operand_address ((asm_out_file), (x));
}
void
output_addr_const (FILE *file, rtx x)
{
  char buf[256];
 restart:
  switch (((enum rtx_code) (x)->code))
    {
    case PC:
      putc_unlocked ('.', file);
      break;
    case SYMBOL_REF:
      if (((((x))->u.fld[2]).rttree))
 mark_decl_referenced (((((x))->u.fld[2]).rttree));
      assemble_name (file, (((x)->u.fld[0]).rtstr));
      break;
    case LABEL_REF:
      x = (((x)->u.fld[0]).rtx1);
    case CODE_LABEL:
      do { sprintf (buf, "*.%s%u", "L", (unsigned) ((((x)->u.fld[6]).rtint))); } while (0);
      assemble_name (file, buf);
      break;
    case CONST_INT:
      fprintf (file, "%ld", ((x)->u.hwint[0]));
      break;
    case CONST:
      output_addr_const (file, (((x)->u.fld[0]).rtx1));
      break;
    case CONST_DOUBLE:
      if (((enum machine_mode) (x)->mode) == VOIDmode)
 {
   if (((x)->u.hwint[1]))
     fprintf (file, "0x%lx%08lx",
       ((x)->u.hwint[1]), ((x)->u.hwint[0]));
   else if (((x)->u.hwint[0]) < 0)
     fprintf (file, "0x%lx", ((x)->u.hwint[0]));
   else
     fprintf (file, "%ld", ((x)->u.hwint[0]));
 }
      else
 output_operand_lossage ("floating constant misused");
      break;
    case PLUS:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_INT)
 {
   output_addr_const (file, (((x)->u.fld[1]).rtx1));
   if ((((((x)->u.fld[0]).rtx1))->u.hwint[0]) >= 0)
     fprintf (file, "+");
   output_addr_const (file, (((x)->u.fld[0]).rtx1));
 }
      else
 {
   output_addr_const (file, (((x)->u.fld[0]).rtx1));
   if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != CONST_INT
       || (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= 0)
     fprintf (file, "+");
   output_addr_const (file, (((x)->u.fld[1]).rtx1));
 }
      break;
    case MINUS:
      x = simplify_subtraction (x);
      if (((enum rtx_code) (x)->code) != MINUS)
 goto restart;
      output_addr_const (file, (((x)->u.fld[0]).rtx1));
      fprintf (file, "-");
      if ((((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= 0)
   || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == PC
   || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == SYMBOL_REF)
 output_addr_const (file, (((x)->u.fld[1]).rtx1));
      else
 {
   fputs_unlocked (targetm.asm_out.open_paren, file);
   output_addr_const (file, (((x)->u.fld[1]).rtx1));
   fputs_unlocked (targetm.asm_out.close_paren, file);
 }
      break;
    case ZERO_EXTEND:
    case SIGN_EXTEND:
    case SUBREG:
      output_addr_const (file, (((x)->u.fld[0]).rtx1));
      break;
    default:
      do { if (! output_addr_const_extra (file, (x))) goto fail; } while (0);;
      break;
    fail:
      output_operand_lossage ("invalid expression as operand");
    }
}
void
asm_fprintf (FILE *file, const char *p, ...)
{
  char buf[10];
  char *q, c;
  va_list argptr;
  __builtin_va_start(argptr,p);
  buf[0] = '%';
  while ((c = *p++))
    switch (c)
      {
      case '{':
 {
   int i;
   for (i = 0; i < dialect_number; i++)
     {
       while (*p && *p++ != '|')
  ;
       if (*p == '|')
  p++;
     }
 }
 break;
      case '|':
 while (*p && *p++ != '}')
   ;
 break;
      case '}':
 break;
      case '%':
 c = *p++;
 q = &buf[1];
 while (strchr ("-+ #0", c))
   {
     *q++ = c;
     c = *p++;
   }
 while ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isdigit)) || c == '.')
   {
     *q++ = c;
     c = *p++;
   }
 switch (c)
   {
   case '%':
     putc_unlocked ('%', file);
     break;
   case 'd': case 'i': case 'u':
   case 'x': case 'X': case 'o':
   case 'c':
     *q++ = c;
     *q = 0;
     fprintf (file, buf, __builtin_va_arg(argptr,int1));
     break;
   case 'w':
     memcpy (q, "l", strlen ("l"));
     q += strlen ("l");
     *q++ = *p++;
     *q = 0;
     fprintf (file, buf, __builtin_va_arg(argptr,long1));
     break;
   case 'l':
     *q++ = c;
     if (*p == 'l')
       {
  *q++ = *p++;
  *q++ = *p++;
  *q = 0;
  fprintf (file, buf, __builtin_va_arg(argptr,long2));
       }
     else
       {
  *q++ = *p++;
  *q = 0;
  fprintf (file, buf, __builtin_va_arg(argptr,long1));
       }
     break;
   case 's':
     *q++ = c;
     *q = 0;
     fprintf (file, buf, __builtin_va_arg(argptr,char1));
     break;
   case 'O':
     break;
   case 'R':
     break;
   case 'I':
     break;
   case 'L':
     fprintf (file, "%s", ".");
     break;
   case 'U':
     fputs_unlocked (user_label_prefix, file);
     break;
   default:
     abort ();
   }
 break;
      default:
 putc_unlocked (c, file);
      }
  __builtin_va_end(argptr);
}
void
split_double (rtx value1, rtx *first, rtx *second)
{
  if (((enum rtx_code) (value1)->code) == CONST_INT)
    {
      if ((8 * 4) >= (2 * (8 * (0 ? 8 : 4))))
 {
   unsigned long low, high;
   unsigned long mask, sign_bit, sign_extend;
   sign_bit = 1;
   sign_bit <<= (8 * (0 ? 8 : 4)) - 1;
   mask = sign_bit << 1;
   mask--;
   sign_extend = ~mask;
   low = ((value1)->u.hwint[0]);
   low &= mask;
   if (low & sign_bit)
     low |= sign_extend;
   high = ((value1)->u.hwint[0]);
   high >>= (8 * (0 ? 8 : 4)) - 1;
   high >>= 1;
   high &= mask;
   if (high & sign_bit)
     high |= sign_extend;
   if (0)
     {
       *first = gen_rtx_CONST_INT (VOIDmode, (long) (high));
       *second = gen_rtx_CONST_INT (VOIDmode, (long) (low));
     }
   else
     {
       *first = gen_rtx_CONST_INT (VOIDmode, (long) (low));
       *second = gen_rtx_CONST_INT (VOIDmode, (long) (high));
     }
 }
      else
 {
   rtx high = (((value1)->u.hwint[0]) < 0 ? (const_int_rtx[64 -1]) : (const_int_rtx[64]));
   if (0)
     {
       *first = high;
       *second = value1;
     }
   else
     {
       *first = value1;
       *second = high;
     }
 }
    }
  else if (((enum rtx_code) (value1)->code) != CONST_DOUBLE)
    {
      if (0)
 {
   *first = (const_int_rtx[64]);
   *second = value1;
 }
      else
 {
   *first = value1;
   *second = (const_int_rtx[64]);
 }
    }
  else if (((enum machine_mode) (value1)->mode) == VOIDmode
    || mode_class[((enum machine_mode) (value1)->mode)] == MODE_INT)
    {
      if (0)
 {
   *first = gen_rtx_CONST_INT (VOIDmode, (long) (((value1)->u.hwint[1])));
   *second = gen_rtx_CONST_INT (VOIDmode, (long) (((value1)->u.hwint[0])));
 }
      else
 {
   *first = gen_rtx_CONST_INT (VOIDmode, (long) (((value1)->u.hwint[0])));
   *second = gen_rtx_CONST_INT (VOIDmode, (long) (((value1)->u.hwint[1])));
 }
    }
  else
    {
      struct real_value r;
      long l[2];
      memcpy (&(r), &(((value1))->u.hwint[0]), sizeof (struct real_value));
      real_to_target (l, &(r), mode_for_size (64, MODE_FLOAT, 0));
      *first = gen_rtx_CONST_INT (VOIDmode, (long) ((long) l[0]));
      *second = gen_rtx_CONST_INT (VOIDmode, (long) ((long) l[1]));
    }
}
int
leaf_function_p (void)
{
  rtx insn;
  rtx link;
  if ((cfun->profile) || profile_arc_flag)
    return 0;
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == CALL_INSN
   && ! (((insn))->jump))
 return 0;
      if (((enum rtx_code) (insn)->code) == INSN
   && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE
   && ((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->code) == CALL_INSN
   && ! (((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0])))->jump))
 return 0;
    }
  for (link = (cfun->epilogue_delay_list);
       link;
       link = (((link)->u.fld[1]).rtx1))
    {
      insn = (((link)->u.fld[0]).rtx1);
      if (((enum rtx_code) (insn)->code) == CALL_INSN
   && ! (((insn))->jump))
 return 0;
      if (((enum rtx_code) (insn)->code) == INSN
   && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE
   && ((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->code) == CALL_INSN
   && ! (((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0])))->jump))
 return 0;
    }
  return 1;
}
int
final_forward_branch_p (rtx insn)
{
  int insn_id, label_id;
  if (!uid_shuid)
    abort ();
  insn_id = (uid_shuid[(((insn)->u.fld[0]).rtint)]);
  label_id = (uid_shuid[((((((insn)->u.fld[9]).rtx1))->u.fld[0]).rtint)]);
  if (!insn_id || !label_id)
    abort ();
  return insn_id < label_id;
}
int debug_nesting = 0;
static tree *symbol_queue;
int symbol_queue_index = 0;
static int symbol_queue_size = 0;
void
debug_flush_symbol_queue (void)
{
  int i;
  ++debug_nesting;
  for (i = 0; i < symbol_queue_index; ++i)
    {
      int saved_tree_used = ((symbol_queue[i])->common.used_flag);
      int saved_suppress_debug = ((symbol_queue[i])->decl.external_flag);
      ((symbol_queue[i])->common.used_flag) = 1;
      ((symbol_queue[i])->decl.external_flag) = 0;
      dbxout_symbol (symbol_queue[i], 0);
      ((symbol_queue[i])->common.used_flag) = saved_tree_used;
      ((symbol_queue[i])->decl.external_flag) = saved_suppress_debug;
    }
  symbol_queue_index = 0;
  --debug_nesting;
}
void
debug_queue_symbol (tree decl)
{
  if (symbol_queue_index >= symbol_queue_size)
    {
      symbol_queue_size += 10;
      symbol_queue = xrealloc (symbol_queue,
          symbol_queue_size * sizeof (tree));
    }
  symbol_queue[symbol_queue_index++] = decl;
}
void
debug_free_queue (void)
{
  if (symbol_queue)
    {
      free (symbol_queue);
      symbol_queue = ((void *)0);
      symbol_queue_size = 0;
    }
}
int flow2_completed;
int max_regno;
varray_type reg_n_info;
int regset_bytes;
int regset_size;
regset regs_live_at_setjmp;
rtx regs_may_share;
static HARD_REG_SET elim_reg_set;
struct reg_cond_life_info
{
  rtx condition;
  rtx orig_condition;
  rtx stores;
};
struct propagate_block_info
{
  basic_block bb;
  regset reg_live;
  regset new_set;
  rtx *reg_next_use;
  rtx mem_set_list;
  regset local_set;
  regset cond_local_set;
  int mem_set_list_len;
  int cc0_live;
  int flags;
  int insn_num;
};
static int ndead;
static int *reg_deaths;
static int verify_wide_reg_1 (rtx *, void *);
static void verify_wide_reg (int, basic_block);
static void verify_local_live_at_start (regset, basic_block);
static void notice_stack_pointer_modification_1 (rtx, rtx, void *);
static void notice_stack_pointer_modification (void);
static void mark_reg_flow (rtx, void *);
static void mark_regs_live_at_end (regset);
static void calculate_global_regs_live (sbitmap, sbitmap, int);
static void propagate_block_delete_insn (rtx);
static rtx propagate_block_delete_libcall (rtx, rtx);
static int insn_dead_p (struct propagate_block_info *, rtx, int, rtx);
static int libcall_dead_p (struct propagate_block_info *, rtx, rtx);
static void mark_set_regs_flow (struct propagate_block_info *, rtx, rtx);
static void mark_set_1 (struct propagate_block_info *, enum rtx_code, rtx,
   rtx, rtx, int);
static int find_regno_partial (rtx *, void *);
static void mark_used_reg (struct propagate_block_info *, rtx, rtx, rtx);
static void mark_used_regs (struct propagate_block_info *, rtx, rtx, rtx);
void debug_flow_info (void);
static void add_to_mem_set_list (struct propagate_block_info *, rtx);
static int invalidate_mems_from_autoinc (rtx *, void *);
static void invalidate_mems_from_set (struct propagate_block_info *, rtx);
static void clear_log_links (sbitmap);
static int count_or_remove_death_notes_bb (basic_block, int);
rtx
first_insn_after_basic_block_note (basic_block block)
{
  rtx insn;
  insn = (block)->head_;
  if (insn == (rtx) 0)
    return (rtx) 0;
  if (((enum rtx_code) (insn)->code) == CODE_LABEL)
    insn = (((insn)->u.fld[2]).rtx1);
  if (!(((enum rtx_code) (insn)->code) == NOTE && (((insn)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK))
    abort ();
  return (((insn)->u.fld[2]).rtx1);
}
void
life_analysis (FILE *file, int flags)
{
  int i;
  static const struct {const int from, to; } eliminables[] = {{ 16, 7}, { 16, 6}, { 20, 7}, { 20, 6}};
  do { HARD_REG_ELT_TYPE *scan_tp_ = (elim_reg_set); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (i = 0; i < (int) (sizeof (eliminables) / sizeof ((eliminables)[0])); i++)
    ((elim_reg_set)[(eliminables[i].from) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((eliminables[i].from) % ((unsigned) (8 * 4))));
  if (flags & 4)
    bitmap_initialize (&subregs_of_mode, 1);
  if (! optimize)
    flags &= ~(2 | 64 | 32);
  if (reload_completed)
    flags &= ~(4 | 64);
  if (optimize && (flags & 256))
    init_alias_analysis ();
  delete_noop_moves ();
  if (! reload_completed)
    notice_stack_pointer_modification ();
  allocate_reg_life_data ();
  allocate_bb_life_data ();
  mark_regs_live_at_end (EXIT_BLOCK_PTR->global_live_at_start);
  if (flags & 4)
    {
      memset (regs_ever_live, 0, sizeof (regs_ever_live));
      memset (regs_asm_clobbered, 0, sizeof (regs_asm_clobbered));
    }
  update_life_info (((void *)0), UPDATE_LIFE_GLOBAL, flags);
  if (reg_deaths)
    {
      free (reg_deaths);
      reg_deaths = ((void *)0);
    }
  if (optimize && (flags & 256))
    end_alias_analysis ();
  if (file)
    dump_flow_info (file);
  delete_dead_jumptables ();
}
static int
verify_wide_reg_1 (rtx *px, void *pregno)
{
  rtx x = *px;
  unsigned int regno = *(int *) pregno;
  if ((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) == regno)
    {
      if (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) <= (8 * (0 ? 8 : 4)))
 return 2;
      return 1;
    }
  return 0;
}
static void
verify_wide_reg (int regno, basic_block bb)
{
  rtx head = (bb)->head_, end = (bb)->end_;
  while (1)
    {
      if (((((enum rtx_code) (head)->code) == INSN) || (((enum rtx_code) (head)->code) == JUMP_INSN) || (((enum rtx_code) (head)->code) == CALL_INSN)))
 {
   int r = for_each_rtx (&(((head)->u.fld[5]).rtx1), verify_wide_reg_1, &regno);
   if (r == 1)
     return;
   if (r == 2)
     break;
 }
      if (head == end)
 break;
      head = (((head)->u.fld[2]).rtx1);
    }
  if (dump_file)
    {
      fprintf (dump_file, "Register %d died unexpectedly.\n", regno);
      dump_bb (bb, dump_file, 0);
    }
  abort ();
}
static void
verify_local_live_at_start (regset new_live_at_start, basic_block bb)
{
  if (reload_completed)
    {
      if (! bitmap_equal_p (new_live_at_start, bb->global_live_at_start))
 {
   if (dump_file)
     {
       fprintf (dump_file,
         "live_at_start mismatch in bb %d, aborting\nNew:\n",
         bb->index);
       debug_bitmap_file (dump_file, new_live_at_start);
       fputs_unlocked ("Old:\n", dump_file);
       dump_bb (bb, dump_file, 0);
     }
   abort ();
 }
    }
  else
    {
      int i;
      bitmap_operation (new_live_at_start, new_live_at_start, bb->global_live_at_start, BITMAP_XOR);
      do { bitmap_element *ptr_ = (new_live_at_start)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { if (bitmap_bit_p (bb->global_live_at_start, i)) { if (dump_file) { fprintf (dump_file, "Register %d died unexpectedly.\n", i); dump_bb (bb, dump_file, 0); } abort (); } verify_wide_reg (i, bb); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
    }
}
int
update_life_info (sbitmap blocks, enum update_life_extent extent, int prop_flags)
{
  regset tmp;
  regset_head tmp_head;
  int i;
  int stabilized_prop_flags = prop_flags;
  basic_block bb;
  tmp = bitmap_initialize (&tmp_head, 1);
  ndead = 0;
  if ((prop_flags & 4) && !reg_deaths)
    reg_deaths = xcalloc (sizeof (*reg_deaths), max_regno);
  timevar_push ((extent == UPDATE_LIFE_LOCAL || blocks)
  ? TV_LIFE_UPDATE : TV_LIFE);
  if ((prop_flags & 32)
      && (extent == UPDATE_LIFE_LOCAL || blocks))
    abort ();
  if (extent != UPDATE_LIFE_LOCAL)
    {
      for ( ; ; )
 {
   int changed = 0;
   calculate_global_regs_live (blocks, blocks,
    prop_flags & (16
           | 256
           | 32));
   if ((prop_flags & (8 | 32))
       != (8 | 32))
     break;
   for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
     {
       bitmap_copy (tmp, bb->global_live_at_end);
       changed |= propagate_block (bb, tmp, ((void *)0), ((void *)0),
    prop_flags & (16
           | 256
           | 8));
     }
   stabilized_prop_flags
     &= ~(16 | 256
   | 8);
   if (! changed)
     break;
   cleanup_cfg (1);
   for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
     {
       bitmap_clear (bb->global_live_at_start);
       bitmap_clear (bb->global_live_at_end);
     }
 }
      if (extent == UPDATE_LIFE_GLOBAL_RM_NOTES)
 count_or_remove_death_notes (blocks, 1);
    }
  if (prop_flags & 2)
    clear_log_links (blocks);
  if (blocks)
    {
      do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (blocks)->size; unsigned long *ptr_ = (blocks)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (i) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { bb = (((basic_block_info)->data.bb[(i)])); bitmap_copy (tmp, bb->global_live_at_end); propagate_block (bb, tmp, ((void *)0), ((void *)0), stabilized_prop_flags); if (extent == UPDATE_LIFE_LOCAL) verify_local_live_at_start (tmp, bb); }; if (word_ == 0) break; } } } } while (0)
   ;
    }
  else
    {
      for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
 {
   bitmap_copy (tmp, bb->global_live_at_end);
   propagate_block (bb, tmp, ((void *)0), ((void *)0), stabilized_prop_flags);
   if (extent == UPDATE_LIFE_LOCAL)
     verify_local_live_at_start (tmp, bb);
 }
    }
  do { if (tmp) { bitmap_clear (tmp); (tmp) = 0; } } while (0);
  if (prop_flags & 4)
    {
      do { bitmap_element *ptr_ = (ENTRY_BLOCK_PTR->global_live_at_end)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { (((reg_n_info)->data.reg[i])->basic_block1) = -2; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                                 ;
      do { bitmap_element *ptr_ = (regs_live_at_setjmp)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { if ((cfun->emit->x_regno_reg_rtx)[i] != 0) { (((reg_n_info)->data.reg[i])->live_length) = -1; (((reg_n_info)->data.reg[i])->basic_block1) = -1; } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
    }
  if (reg_deaths)
    {
      free (reg_deaths);
      reg_deaths = ((void *)0);
    }
  timevar_pop ((extent == UPDATE_LIFE_LOCAL || blocks)
        ? TV_LIFE_UPDATE : TV_LIFE);
  if (ndead && dump_file)
    fprintf (dump_file, "deleted %i dead insns\n", ndead);
  return ndead;
}
int
update_life_info_in_dirty_blocks (enum update_life_extent extent, int prop_flags)
{
  sbitmap update_life_blocks = sbitmap_alloc (last_basic_block);
  int n = 0;
  basic_block bb;
  int retval = 0;
  sbitmap_zero (update_life_blocks);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      if (extent == UPDATE_LIFE_LOCAL)
 {
   if (bb->flags & 1)
     {
       ((update_life_blocks)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
       n++;
     }
 }
      else
 {
   ((update_life_blocks)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
   if (bb->flags & 1)
     n++;
 }
    }
  if (n)
    retval = update_life_info (update_life_blocks, extent, prop_flags);
  free(update_life_blocks);
  return retval;
}
void
free_basic_block_vars (void)
{
  if (basic_block_info)
    {
      clear_edges ();
      basic_block_info = ((void *)0);
    }
  n_basic_blocks = 0;
  last_basic_block = 0;
  ENTRY_BLOCK_PTR->aux = ((void *)0);
  ENTRY_BLOCK_PTR->global_live_at_end = ((void *)0);
  EXIT_BLOCK_PTR->aux = ((void *)0);
  EXIT_BLOCK_PTR->global_live_at_start = ((void *)0);
}
int
delete_noop_moves (void)
{
  rtx insn, next;
  basic_block bb;
  int nnoops = 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (insn = (bb)->head_; insn != ((((bb)->end_)->u.fld[2]).rtx1); insn = next)
 {
   next = (((insn)->u.fld[2]).rtx1);
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && noop_move_p (insn))
     {
       rtx note;
       if ((note = find_reg_note (insn, REG_LIBCALL, (rtx) 0))
         && (((note)->u.fld[0]).rtx1) != insn)
  {
    rtx new_libcall_insn = next_real_insn (insn);
    rtx retval_note = find_reg_note ((((note)->u.fld[0]).rtx1),
         REG_RETVAL, (rtx) 0);
    (((new_libcall_insn)->u.fld[8]).rtx1)
      = gen_rtx_fmt_ue (INSN_LIST, (REG_LIBCALL), ((((note)->u.fld[0]).rtx1)), ((((new_libcall_insn)->u.fld[8]).rtx1)))
                                   ;
    (((retval_note)->u.fld[0]).rtx1) = new_libcall_insn;
  }
       delete_insn_and_edges (insn);
       nnoops++;
     }
 }
    }
  if (nnoops && dump_file)
    fprintf (dump_file, "deleted %i noop moves", nnoops);
  return nnoops;
}
void
delete_dead_jumptables (void)
{
  rtx insn, next;
  for (insn = get_insns (); insn; insn = next)
    {
      next = (((insn)->u.fld[2]).rtx1);
      if (((enum rtx_code) (insn)->code) == CODE_LABEL
   && (((insn)->u.fld[4]).rtint) == (((insn))->in_struct)
   && ((enum rtx_code) (next)->code) == JUMP_INSN
   && (((enum rtx_code) ((((next)->u.fld[5]).rtx1))->code) == ADDR_VEC
       || ((enum rtx_code) ((((next)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC))
 {
   if (dump_file)
     fprintf (dump_file, "Dead jumptable %i removed\n", (((insn)->u.fld[0]).rtint));
   delete_insn ((((insn)->u.fld[2]).rtx1));
   delete_insn (insn);
   next = (((next)->u.fld[2]).rtx1);
 }
    }
}
static void
notice_stack_pointer_modification_1 (rtx x, rtx pat ,
         void *data )
{
  if (x == (global_rtl[GR_STACK_POINTER])
      || ((((enum rtx_code) (x)->code) == MEM)
   && (rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code))]) == RTX_AUTOINC
   && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER])))
    current_function_sp_is_unchanging = 0;
}
static void
notice_stack_pointer_modification (void)
{
  basic_block bb;
  rtx insn;
  current_function_sp_is_unchanging = !(cfun->calls_alloca);
  if (! current_function_sp_is_unchanging)
    return;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    for ((insn) = (bb)->head_; (insn) != ((((bb)->end_)->u.fld[2]).rtx1); (insn) = (((insn)->u.fld[2]).rtx1))
      {
 if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
   {
     note_stores ((((insn)->u.fld[5]).rtx1),
    notice_stack_pointer_modification_1,
    ((void *)0));
     if (! current_function_sp_is_unchanging)
       return;
   }
      }
}
static void
mark_reg_flow (rtx reg, void *xset)
{
  regset set = (regset) xset;
  int regno = (((reg)->u.fld[0]).rtuint);
  if (((enum machine_mode) (reg)->mode) == BLKmode)
    abort ();
  bitmap_set_bit (set, regno);
  if (regno < 53)
    {
      int n = hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)];
      while (--n > 0)
 bitmap_set_bit (set, regno + n);
    }
}
static void
mark_regs_live_at_end (regset set)
{
  unsigned int i;
  if ((1 && epilogue_completed)
      || ! 1
      || (! ix86_frame_pointer_required ()
   && ! (cfun->calls_alloca)
   && flag_omit_frame_pointer)
      || current_function_sp_is_unchanging)
    {
      bitmap_set_bit (set, 7);
    }
  if (! reload_completed || frame_pointer_needed)
    {
      bitmap_set_bit (set, 20);
      if (! 0)
 bitmap_set_bit (set, 6);
    }
  if ((unsigned) (0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3) != (~(unsigned int) 0)
      && fixed_regs[(0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3)])
    bitmap_set_bit (set, (0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3));
  for (i = 0; i < 53; i++)
    if (global_regs[i] || 0)
      bitmap_set_bit (set, i);
  if (1 && epilogue_completed)
    {
      for (i = 0; i < 53; i++)
 if (regs_ever_live[i] && ! 0
     && ! (!!((regs_invalidated_by_call)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
   bitmap_set_bit (set, i);
    }
  if (reload_completed && (cfun->calls_eh_return))
    for (i = 0; ; ++i)
      {
 unsigned regno = ((i) < 2 ? (i) : (~(unsigned int) 0));
 if (regno == (~(unsigned int) 0))
   break;
 bitmap_set_bit (set, regno);
      }
  if ((! 1 || ! epilogue_completed)
      && (cfun->calls_eh_return))
    {
      rtx tmp = gen_rtx_REG ((0 ? DImode : SImode), 2);
      if (tmp && (((enum rtx_code) (tmp)->code) == REG))
 mark_reg_flow (tmp, set);
    }
  diddle_return_value (mark_reg_flow, set);
}
static void
calculate_global_regs_live (sbitmap blocks_in, sbitmap blocks_out, int flags)
{
  basic_block *queue, *qhead, *qtail, *qend, bb;
  regset tmp, new_live_at_end, invalidated_by_call;
  regset_head tmp_head, invalidated_by_call_head;
  regset_head new_live_at_end_head;
  int i;
  tmp = bitmap_initialize (&tmp_head, 1);
  new_live_at_end = bitmap_initialize (&new_live_at_end_head, 1);
  invalidated_by_call = bitmap_initialize (&invalidated_by_call_head, 1);
  for (i = 0; i < 53; ++i)
    if ((!!((regs_invalidated_by_call)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
      bitmap_set_bit (invalidated_by_call, i);
  queue = xmalloc ((n_basic_blocks + 2) * sizeof (*queue));
  qtail = queue;
  qhead = qend = queue + n_basic_blocks + 2;
  if (blocks_in)
    {
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 if (((blocks_in)->elms [(bb->index) / ((unsigned) (8 * 4))] >> (bb->index) % ((unsigned) (8 * 4)) & 1))
   {
     *--qhead = bb;
     bb->aux = bb;
   }
    }
  else
    {
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   *--qhead = bb;
   bb->aux = bb;
 }
    }
  ENTRY_BLOCK_PTR->aux = EXIT_BLOCK_PTR->aux = ((void *)0);
  if (blocks_out)
    sbitmap_zero (blocks_out);
  while (qhead != qtail)
    {
      int rescan, changed;
      basic_block bb;
      edge e;
      bb = *qhead++;
      if (qhead == qend)
 qhead = queue;
      bb->aux = ((void *)0);
      bitmap_clear (new_live_at_end);
      if (bb->succ)
 for (e = bb->succ; e; e = e->succ_next)
   {
     basic_block sb = e->dest;
     if (e->flags & 8)
       {
  bitmap_operation (tmp, sb->global_live_at_start,
      invalidated_by_call, BITMAP_AND_COMPL);
  bitmap_operation (new_live_at_end, new_live_at_end, tmp, BITMAP_IOR);
       }
     else
       bitmap_operation (new_live_at_end, new_live_at_end, sb->global_live_at_start, BITMAP_IOR);
     if (e->flags & 8)
       for (i = 0; i < 53; i++)
  if (0)
    bitmap_set_bit (new_live_at_end, i);
   }
      else
 {
   for (i = 0; i < 53; i++)
     if (0)
       bitmap_set_bit (new_live_at_end, i);
 }
      bitmap_set_bit (new_live_at_end, 7);
      if (! reload_completed)
 {
   bitmap_set_bit (new_live_at_end, 20);
   if (fixed_regs[16])
     bitmap_set_bit (new_live_at_end, 16);
   if ((unsigned) (0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3) != (~(unsigned int) 0)
       && fixed_regs[(0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3)])
     bitmap_set_bit (new_live_at_end, (0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3));
 }
      if (bb == ENTRY_BLOCK_PTR)
 {
   bitmap_copy (bb->global_live_at_end, new_live_at_end);
   continue;
 }
      if (bb->local_set == ((void *)0))
 {
   bb->local_set = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
   bb->cond_local_set = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
   rescan = 1;
 }
      else
 {
   bitmap_clear (tmp);
   rescan = bitmap_operation (tmp, bb->global_live_at_end,
         new_live_at_end, BITMAP_AND_COMPL);
   if (! rescan)
     {
       bitmap_clear (tmp);
       rescan = bitmap_operation (tmp, new_live_at_end,
      bb->cond_local_set, BITMAP_AND);
     }
   if (! rescan)
     {
       bitmap_clear (tmp);
       changed = bitmap_operation (tmp, bb->global_live_at_end,
       new_live_at_end, BITMAP_XOR);
       if (! changed)
  continue;
       rescan = bitmap_operation (tmp, tmp, bb->local_set,
      BITMAP_AND_COMPL);
     }
 }
      if (blocks_out)
 ((blocks_out)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
      if (! rescan)
 {
   bitmap_operation (tmp, new_live_at_end, bb->global_live_at_end,
       BITMAP_AND_COMPL);
   bitmap_copy (bb->global_live_at_end, new_live_at_end);
   changed = bitmap_operation (bb->global_live_at_start,
          bb->global_live_at_start,
          tmp, BITMAP_IOR);
   if (! changed)
     continue;
 }
      else
 {
   bitmap_copy (bb->global_live_at_end, new_live_at_end);
   propagate_block (bb, new_live_at_end, bb->local_set,
      bb->cond_local_set, flags);
   if (bitmap_equal_p (bb->global_live_at_start, new_live_at_end))
     continue;
   bitmap_copy (bb->global_live_at_start, new_live_at_end);
 }
      for (e = bb->pred; e; e = e->pred_next)
 {
   basic_block pb = e->src;
   if (pb->aux == ((void *)0))
     {
       *qtail++ = pb;
       if (qtail == qend)
  qtail = queue;
       pb->aux = pb;
     }
 }
    }
  do { if (tmp) { bitmap_clear (tmp); (tmp) = 0; } } while (0);
  do { if (new_live_at_end) { bitmap_clear (new_live_at_end); (new_live_at_end) = 0; } } while (0);
  do { if (invalidated_by_call) { bitmap_clear (invalidated_by_call); (invalidated_by_call) = 0; } } while (0);
  if (blocks_out)
    {
      do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (blocks_out)->size; unsigned long *ptr_ = (blocks_out)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (i) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { basic_block bb = (((basic_block_info)->data.bb[(i)])); do { if (bb->local_set) { bitmap_clear (bb->local_set); (bb->local_set) = 0; } } while (0); do { if (bb->cond_local_set) { bitmap_clear (bb->cond_local_set); (bb->cond_local_set) = 0; } } while (0); }; if (word_ == 0) break; } } } } while (0)
   ;
    }
  else
    {
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   do { if (bb->local_set) { bitmap_clear (bb->local_set); (bb->local_set) = 0; } } while (0);
   do { if (bb->cond_local_set) { bitmap_clear (bb->cond_local_set); (bb->cond_local_set) = 0; } } while (0);
 }
    }
  free (queue);
}
typedef struct {
  unsigned regno_to_find;
  rtx retval;
} find_regno_partial_param;
static int
find_regno_partial (rtx *ptr, void *data)
{
  find_regno_partial_param *param = (find_regno_partial_param *)data;
  unsigned reg = param->regno_to_find;
  param->retval = (rtx) 0;
  if (*ptr == (rtx) 0)
    return 0;
  switch (((enum rtx_code) (*ptr)->code))
    {
    case ZERO_EXTRACT:
    case SIGN_EXTRACT:
    case STRICT_LOW_PART:
      if ((((enum rtx_code) ((((*ptr)->u.fld[0]).rtx1))->code) == REG) && ((((((*ptr)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == reg)
 {
   param->retval = (((*ptr)->u.fld[0]).rtx1);
   return 1;
 }
      break;
    case SUBREG:
      if ((((enum rtx_code) ((((*ptr)->u.fld[0]).rtx1))->code) == REG)
   && ((((((*ptr)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == reg)
 {
   param->retval = (((*ptr)->u.fld[0]).rtx1);
   return 1;
 }
      break;
    default:
      break;
    }
  return 0;
}
int
initialize_uninitialized_subregs (void)
{
  rtx insn;
  edge e;
  int reg, did_something = 0;
  find_regno_partial_param param;
  for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
    {
      basic_block bb = e->dest;
      regset map = bb->global_live_at_start;
      do { bitmap_element *ptr_ = (map)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (reg) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { int uid = (((reg_n_info)->data.reg[reg])->first_uid); rtx i; for (i = get_insns (); i && (((i)->u.fld[0]).rtint) != uid; i = (((i)->u.fld[2]).rtx1)) ; if (i != (rtx) 0) { param.regno_to_find = reg; for_each_rtx (&i, find_regno_partial, &param); if (param.retval != (rtx) 0) { start_sequence (); emit_move_insn (param.retval, (const_tiny_rtx[0][(int) (((enum machine_mode) (param.retval)->mode))])); insn = get_insns (); end_sequence (); insert_insn_on_edge (insn, e); did_something = 1; } } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
    }
  if (did_something)
    commit_edge_insertions ();
  return did_something;
}
void
allocate_bb_life_data (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    {
      bb->global_live_at_start = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
      bb->global_live_at_end = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
    }
  regs_live_at_setjmp = bitmap_initialize ((( ((&flow_obstack))->temp = ((sizeof (bitmap_head))), ((((&flow_obstack))->chunk_limit - ((&flow_obstack))->next_free < ((&flow_obstack))->temp) ? (_obstack_newchunk (((&flow_obstack)), ((&flow_obstack))->temp), 0) : 0), (((&flow_obstack))->next_free += (((&flow_obstack))->temp))), ( (((&flow_obstack))->next_free == ((&flow_obstack))->object_base ? ((((&flow_obstack))->maybe_empty_object = 1), 0) : 0), ((&flow_obstack))->temp = ((((&flow_obstack))->object_base) - (char *) 0), ((&flow_obstack))->next_free = (((((((&flow_obstack))->next_free) - (char *) 0)+((&flow_obstack))->alignment_mask) & ~ (((&flow_obstack))->alignment_mask)) + (char *) 0), ((((&flow_obstack))->next_free - (char *) ((&flow_obstack))->chunk > ((&flow_obstack))->chunk_limit - (char *) ((&flow_obstack))->chunk) ? (((&flow_obstack))->next_free = ((&flow_obstack))->chunk_limit) : 0), ((&flow_obstack))->object_base = ((&flow_obstack))->next_free, ((((&flow_obstack))->temp) + (char *) 0))), 1);
}
void
allocate_reg_life_data (void)
{
  int i;
  max_regno = max_reg_num ();
  if (reg_deaths)
    abort ();
  reg_deaths = xcalloc (sizeof (*reg_deaths), max_regno);
  allocate_reg_info (max_regno, 0, 0);
  for (i = 0; i < max_regno; i++)
    {
      (((reg_n_info)->data.reg[i])->sets) = 0;
      (((reg_n_info)->data.reg[i])->refs) = 0;
      (((reg_n_info)->data.reg[i])->deaths) = 0;
      (((reg_n_info)->data.reg[i])->calls_crossed) = 0;
      (((reg_n_info)->data.reg[i])->live_length) = 0;
      (((reg_n_info)->data.reg[i])->freq) = 0;
      (((reg_n_info)->data.reg[i])->basic_block1) = -1;
    }
}
static void
propagate_block_delete_insn (rtx insn)
{
  rtx inote = find_reg_note (insn, REG_LABEL, (rtx) 0);
  if (inote && ((enum rtx_code) (inote)->code) == CODE_LABEL)
    {
      rtx label = (((inote)->u.fld[0]).rtx1);
      rtx next;
      if ((((label)->u.fld[4]).rtint) == 1 + (((label))->in_struct)
   && (next = next_nonnote_insn (label)) != ((void *)0)
   && ((enum rtx_code) (next)->code) == JUMP_INSN
   && (((enum rtx_code) ((((next)->u.fld[5]).rtx1))->code) == ADDR_VEC
       || ((enum rtx_code) ((((next)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC))
 {
   rtx pat = (((next)->u.fld[5]).rtx1);
   int diff_vec_p = ((enum rtx_code) (pat)->code) == ADDR_DIFF_VEC;
   int len = (((((pat)->u.fld[diff_vec_p]).rtvec1))->num_elem);
   int i;
   for (i = 0; i < len; i++)
     (((((((((((pat)->u.fld[diff_vec_p]).rtvec1))->elem[i]))->u.fld[0]).rtx1))->u.fld[4]).rtint)--;
   delete_insn_and_edges (next);
   ndead++;
 }
    }
  delete_insn_and_edges (insn);
  ndead++;
}
static rtx
propagate_block_delete_libcall (rtx insn, rtx note)
{
  rtx first = (((note)->u.fld[0]).rtx1);
  rtx before = (((first)->u.fld[1]).rtx1);
  delete_insn_chain_and_edges (first, insn);
  ndead++;
  return before;
}
rtx
propagate_one_insn (struct propagate_block_info *pbi, rtx insn)
{
  rtx prev = (((insn)->u.fld[1]).rtx1);
  int flags = pbi->flags;
  int insn_is_dead = 0;
  int libcall_is_dead = 0;
  rtx note;
  int i;
  if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return prev;
  note = find_reg_note (insn, REG_RETVAL, (rtx) 0);
  if (flags & 16)
    {
      insn_is_dead = insn_dead_p (pbi, (((insn)->u.fld[5]).rtx1), 0, (((insn)->u.fld[8]).rtx1));
      libcall_is_dead = (insn_is_dead && note != 0
    && libcall_dead_p (pbi, note, insn));
    }
  if ((flags & 8) && insn_is_dead)
    {
      if (reload_completed
   && !(((enum tree_code) (((current_function_decl)->common.type))->common.code) == FUNCTION_TYPE
  && (((((current_function_decl)->common.type))->type.no_force_blk_flag)
                                         ))
   && (((1 || 1)
        && prologue_epilogue_contains (insn))
       || (1
    && sibcall_epilogue_contains (insn)))
   && find_reg_note (insn, REG_MAYBE_DEAD, (rtx) 0) == 0)
 _fatal_insn ("Attempt to delete prologue/epilogue insn:", insn, "gcc.c", 497845, "?");
      mark_set_regs_flow (pbi, (((insn)->u.fld[5]).rtx1), insn);
      pbi->cc0_live = 0;
      if (libcall_is_dead)
 prev = propagate_block_delete_libcall ( insn, note);
      else
 {
   if (note)
     {
       rtx libcall_note;
       libcall_note
  = find_reg_note ((((note)->u.fld[0]).rtx1), REG_LIBCALL, (rtx) 0);
       remove_note ((((note)->u.fld[0]).rtx1), libcall_note);
     }
   note = find_reg_note (insn, REG_LIBCALL, (rtx) 0);
   if (note)
     {
       rtx retval_note;
       retval_note
  = find_reg_note ((((note)->u.fld[0]).rtx1), REG_RETVAL, (rtx) 0);
       remove_note ((((note)->u.fld[0]).rtx1), retval_note);
     }
   propagate_block_delete_insn (insn);
 }
      return prev;
    }
  bitmap_clear (pbi->new_set);
  if (libcall_is_dead)
    {
      mark_set_regs_flow (pbi, (((insn)->u.fld[5]).rtx1), insn);
      insn = (((note)->u.fld[0]).rtx1);
      return (((insn)->u.fld[1]).rtx1);
    }
  else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET
    && ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER])
    && ((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->code) == PLUS
    && (((((((((insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER])
    && ((enum rtx_code) ((((((((((insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
    {
      invalidate_mems_from_set (pbi, (global_rtl[GR_STACK_POINTER]));
      mark_set_regs_flow (pbi, (((insn)->u.fld[5]).rtx1), insn);
    }
  else
    {
      rtx note;
      if (((enum rtx_code) (insn)->code) == CALL_INSN && (flags & 4))
 do { bitmap_element *ptr_ = (pbi->reg_live)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { (((reg_n_info)->data.reg[i])->calls_crossed)++; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                      ;
      mark_set_regs_flow (pbi, (((insn)->u.fld[5]).rtx1), insn);
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 {
   regset live_at_end;
   unsigned char sibcall_p;
   rtx note, cond;
   int i;
   cond = (rtx) 0;
   if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == COND_EXEC)
     cond = ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1);
   if (! (((insn))->unchanging))
     {
       free_EXPR_LIST_list (&pbi->mem_set_list);
       pbi->mem_set_list_len = 0;
     }
   else
     invalidate_mems_from_set (pbi, (global_rtl[GR_STACK_POINTER]));
   for (note = (((insn)->u.fld[9]).rtx1);
        note;
        note = (((note)->u.fld[1]).rtx1))
     if (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == CLOBBER)
       mark_set_1 (pbi, CLOBBER, ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
     cond, insn, pbi->flags);
   sibcall_p = (((insn))->jump);
   live_at_end = EXIT_BLOCK_PTR->global_live_at_start;
   for (i = 0; i < 53; i++)
     if ((!!((regs_invalidated_by_call)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
  && ! (sibcall_p
        && bitmap_bit_p (live_at_end, i)
        && ! refers_to_regno_p (i, i+1,
           (cfun->return_rtx),
           (rtx *) 0)))
       {
  enum rtx_code code = global_regs[i] ? SET : CLOBBER;
  mark_set_1 (pbi, code, (cfun->emit->x_regno_reg_rtx)[i], cond, insn,
       pbi->flags & ~(1 | 4));
       }
 }
      pbi->cc0_live = 0;
      if (! insn_is_dead)
 mark_used_regs (pbi, (((insn)->u.fld[5]).rtx1), (rtx) 0, insn);
      if ((flags & 128)
   && ((note = find_reg_note (insn, REG_EQUAL, (rtx) 0))
       || (note = find_reg_note (insn, REG_EQUIV, (rtx) 0))))
 mark_used_regs (pbi, (((note)->u.fld[0]).rtx1), (rtx) 0, insn);
      if (! insn_is_dead && ((enum rtx_code) (insn)->code) == CALL_INSN)
 {
   int i;
   rtx note, cond;
   cond = (rtx) 0;
   if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == COND_EXEC)
     cond = ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1);
   for (note = (((insn)->u.fld[9]).rtx1);
        note;
        note = (((note)->u.fld[1]).rtx1))
     mark_used_regs (pbi, ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtx1), cond, insn);
   if ((flags & 4)
       && !bitmap_bit_p (pbi->reg_live, 7))
     reg_deaths[7] = pbi->insn_num;
   bitmap_set_bit (pbi->reg_live, 7);
   for (i = 0; i < 53; i++)
     if (global_regs[i])
       mark_used_reg (pbi, (cfun->emit->x_regno_reg_rtx)[i], cond, insn);
 }
    }
  pbi->insn_num++;
  return prev;
}
struct propagate_block_info *
init_propagate_block_info (basic_block bb, regset live, regset local_set,
      regset cond_local_set, int flags)
{
  struct propagate_block_info *pbi = xmalloc (sizeof (*pbi));
  pbi->bb = bb;
  pbi->reg_live = live;
  pbi->mem_set_list = (rtx) 0;
  pbi->mem_set_list_len = 0;
  pbi->local_set = local_set;
  pbi->cond_local_set = cond_local_set;
  pbi->cc0_live = 0;
  pbi->flags = flags;
  pbi->insn_num = 0;
  if (flags & (2 | 64))
    pbi->reg_next_use = xcalloc (max_reg_num (), sizeof (rtx));
  else
    pbi->reg_next_use = ((void *)0);
  pbi->new_set = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  if (optimize
      && ! (((enum tree_code) (((current_function_decl)->common.type))->common.code) == FUNCTION_TYPE
     && (((((current_function_decl)->common.type))->type.no_force_blk_flag)
                                     ))
      && (flags & 256)
      && (bb->succ == ((void *)0)
   || (bb->succ->succ_next == ((void *)0)
       && bb->succ->dest == EXIT_BLOCK_PTR
       && ! (cfun->calls_eh_return))))
    {
      rtx insn, set;
      for (insn = (bb)->end_; insn != (bb)->head_; insn = (((insn)->u.fld[1]).rtx1))
 if (((enum rtx_code) (insn)->code) == INSN
     && (set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0))
     && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == MEM))
   {
     rtx mem = (((set)->u.fld[0]).rtx1);
     rtx canon_mem = canon_rtx (mem);
     if ((((canon_mem)->u.fld[0]).rtx1) == (global_rtl[GR_FRAME_POINTER])
  || (((enum rtx_code) ((((canon_mem)->u.fld[0]).rtx1))->code) == PLUS
      && ((((((canon_mem)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (global_rtl[GR_FRAME_POINTER])
      && ((enum rtx_code) (((((((canon_mem)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT))
       add_to_mem_set_list (pbi, canon_mem);
   }
    }
  return pbi;
}
void
free_propagate_block_info (struct propagate_block_info *pbi)
{
  free_EXPR_LIST_list (&pbi->mem_set_list);
  do { if (pbi->new_set) { bitmap_clear (pbi->new_set); free (pbi->new_set); (pbi->new_set) = 0; } } while (0);
  if (pbi->flags & 4)
    {
      int num = pbi->insn_num;
      int i;
      do { bitmap_element *ptr_ = (pbi->reg_live)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { (((reg_n_info)->data.reg[i])->live_length) += num - reg_deaths[i]; reg_deaths[i] = 0; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
           ;
    }
  if (pbi->reg_next_use)
    free (pbi->reg_next_use);
  free (pbi);
}
int
propagate_block (basic_block bb, regset live, regset local_set,
   regset cond_local_set, int flags)
{
  struct propagate_block_info *pbi;
  rtx insn, prev;
  int changed;
  pbi = init_propagate_block_info (bb, live, local_set, cond_local_set, flags);
  if (flags & 4)
    {
      int i;
      do { bitmap_element *ptr_ = (live)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { (((reg_n_info)->data.reg[i])->basic_block1) = -2; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                                 ;
    }
  changed = 0;
  for (insn = (bb)->end_; ; insn = prev)
    {
      if ((flags & 4)
   && ((enum rtx_code) (insn)->code) == CALL_INSN
   && find_reg_note (insn, REG_SETJMP, ((void *)0)))
 bitmap_operation (regs_live_at_setjmp, regs_live_at_setjmp, pbi->reg_live, BITMAP_IOR);
      prev = propagate_one_insn (pbi, insn);
      if (!prev)
        changed |= insn != get_insns ();
      else
        changed |= (((prev)->u.fld[2]).rtx1) != insn;
      if (insn == (bb)->head_)
 break;
    }
  free_propagate_block_info (pbi);
  return changed;
}
static int
insn_dead_p (struct propagate_block_info *pbi, rtx x, int call_ok,
      rtx notes )
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  if (flag_non_call_exceptions && may_trap_p (x))
    return 0;
  if (code == SET)
    {
      rtx r = (((x)->u.fld[0]).rtx1);
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CALL)
 {
   if (! call_ok)
     return 0;
 }
      else if (volatile_refs_p ((((x)->u.fld[1]).rtx1)))
 return 0;
      if ((((enum rtx_code) (r)->code) == MEM))
 {
   rtx temp, canon_r;
   if ((((r))->volatil) || ((enum machine_mode) (r)->mode) == BLKmode)
     return 0;
   canon_r = canon_rtx (r);
   for (temp = pbi->mem_set_list; temp != 0; temp = (((temp)->u.fld[1]).rtx1))
     if (unchanging_anti_dependence (r, (((temp)->u.fld[0]).rtx1)))
       {
  rtx mem = (((temp)->u.fld[0]).rtx1);
  if (rtx_equal_p ((((canon_r)->u.fld[0]).rtx1), (((mem)->u.fld[0]).rtx1))
      && (((unsigned short) mode_size[((enum machine_mode) (canon_r)->mode)])
   <= ((unsigned short) mode_size[((enum machine_mode) (mem)->mode)])))
    return 1;
       }
 }
      else
 {
   while (((enum rtx_code) (r)->code) == SUBREG
   || ((enum rtx_code) (r)->code) == STRICT_LOW_PART
   || ((enum rtx_code) (r)->code) == ZERO_EXTRACT)
     r = (((r)->u.fld[0]).rtx1);
   if ((((enum rtx_code) (r)->code) == REG))
     {
       int regno = (((r)->u.fld[0]).rtuint);
       if (bitmap_bit_p (pbi->reg_live, regno))
  return 0;
       if (regno < 53)
  {
    int n = hard_regno_nregs[regno][((enum machine_mode) (r)->mode)];
    while (--n > 0)
      if (bitmap_bit_p (pbi->reg_live, regno+n))
        return 0;
  }
       if (regno < 53 && global_regs[regno])
  return 0;
       if (regno == 7)
  return 0;
       if (regno == 20
    && (! reload_completed || frame_pointer_needed))
  return 0;
       if (regno == 6
    && (! reload_completed || frame_pointer_needed))
  return 0;
       if (regno == 16 && fixed_regs[regno])
  return 0;
       return 1;
     }
 }
    }
  else if (code == PARALLEL)
    {
      int i = (((((x)->u.fld[0]).rtvec1))->num_elem);
      for (i--; i >= 0; i--)
 if (((enum rtx_code) ((((((x)->u.fld[0]).rtvec1))->elem[i]))->code) != CLOBBER
     && ((enum rtx_code) ((((((x)->u.fld[0]).rtvec1))->elem[i]))->code) != USE
     && ! insn_dead_p (pbi, (((((x)->u.fld[0]).rtvec1))->elem[i]), call_ok, (rtx) 0))
   return 0;
      return 1;
    }
  else if (code == CLOBBER)
    {
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53
       || reload_completed)
   && ! bitmap_bit_p (pbi->reg_live, ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)))
 return 1;
    }
  return 0;
}
static int
libcall_dead_p (struct propagate_block_info *pbi, rtx note, rtx insn)
{
  rtx x = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (x)
    {
      rtx r = (((x)->u.fld[1]).rtx1);
      if ((((enum rtx_code) (r)->code) == REG))
 {
   rtx call = (((note)->u.fld[0]).rtx1);
   rtx call_pat;
   int i;
   while (call != insn && ((enum rtx_code) (call)->code) != CALL_INSN)
     call = (((call)->u.fld[2]).rtx1);
   if (call == insn)
     return 0;
   call_pat = (((call)->u.fld[5]).rtx1);
   if (((enum rtx_code) (call_pat)->code) == PARALLEL)
     {
       for (i = (((((call_pat)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
  if (((enum rtx_code) ((((((call_pat)->u.fld[0]).rtvec1))->elem[i]))->code) == SET
      && ((enum rtx_code) (((((((((call_pat)->u.fld[0]).rtvec1))->elem[i]))->u.fld[1]).rtx1))->code) == CALL)
    break;
       if (i < 0)
  return 0;
       call_pat = (((((call_pat)->u.fld[0]).rtvec1))->elem[i]);
     }
   return insn_dead_p (pbi, call_pat, 1, (((call)->u.fld[8]).rtx1));
 }
    }
  return 1;
}
int
regno_clobbered_at_setjmp (int regno)
{
  if (n_basic_blocks == 0)
    return 0;
  return (((((reg_n_info)->data.reg[regno])->sets) > 1
    || bitmap_bit_p (ENTRY_BLOCK_PTR->global_live_at_end, regno))
   && bitmap_bit_p (regs_live_at_setjmp, regno));
}
static void
add_to_mem_set_list (struct propagate_block_info *pbi, rtx mem)
{
  rtx i;
  if (((enum machine_mode) (mem)->mode) == BLKmode)
    return;
  for (i = pbi->mem_set_list; i ; i = (((i)->u.fld[1]).rtx1))
    {
      rtx e = (((i)->u.fld[0]).rtx1);
      if (rtx_equal_p ((((mem)->u.fld[0]).rtx1), (((e)->u.fld[0]).rtx1)))
 {
   if (((unsigned short) mode_size[((enum machine_mode) (mem)->mode)]) > ((unsigned short) mode_size[((enum machine_mode) (e)->mode)]))
     {
         (((i)->u.fld[0]).rtx1) = mem;
     }
   return;
 }
    }
  if (pbi->mem_set_list_len < 100)
    {
      pbi->mem_set_list = alloc_EXPR_LIST (0, mem, pbi->mem_set_list);
      pbi->mem_set_list_len++;
    }
}
static int
invalidate_mems_from_autoinc (rtx *px, void *data)
{
  rtx x = *px;
  struct propagate_block_info *pbi = data;
  if ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_AUTOINC)
    {
      invalidate_mems_from_set (pbi, (((x)->u.fld[0]).rtx1));
      return -1;
    }
  return 0;
}
static void
invalidate_mems_from_set (struct propagate_block_info *pbi, rtx exp)
{
  rtx temp = pbi->mem_set_list;
  rtx prev = (rtx) 0;
  rtx next;
  while (temp)
    {
      next = (((temp)->u.fld[1]).rtx1);
      if (reg_overlap_mentioned_p (exp, (((temp)->u.fld[0]).rtx1)))
 {
   if (prev)
     (((prev)->u.fld[1]).rtx1) = next;
   else
     pbi->mem_set_list = next;
   free_EXPR_LIST_node (temp);
   pbi->mem_set_list_len--;
 }
      else
 prev = temp;
      temp = next;
    }
}
static void
mark_set_regs_flow (struct propagate_block_info *pbi, rtx x, rtx insn)
{
  rtx cond = (rtx) 0;
  rtx link;
  enum rtx_code code;
  int flags = pbi->flags;
  if (insn)
    for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
      {
 if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_INC)
   mark_set_1 (pbi, SET, (((link)->u.fld[0]).rtx1),
        (((enum rtx_code) (x)->code) == COND_EXEC
         ? (((x)->u.fld[0]).rtx1) : (rtx) 0),
        insn, flags);
      }
 retry:
  switch (code = ((enum rtx_code) (x)->code))
    {
    case SET:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
 flags |= 512;
    case CLOBBER:
      mark_set_1 (pbi, code, (((x)->u.fld[0]).rtx1), cond, insn, flags);
      return;
    case COND_EXEC:
      cond = (((x)->u.fld[0]).rtx1);
      x = (((x)->u.fld[1]).rtx1);
      goto retry;
    case PARALLEL:
      {
 int i;
 for (i = 0; i < (((((x)->u.fld[0]).rtvec1))->num_elem); i++)
   {
     rtx sub = (((((x)->u.fld[0]).rtvec1))->elem[i]);
     switch (code = ((enum rtx_code) (sub)->code))
       {
       case COND_EXEC:
  if (cond != (rtx) 0)
    abort ();
  cond = (((sub)->u.fld[0]).rtx1);
  sub = (((sub)->u.fld[1]).rtx1);
  if (((enum rtx_code) (sub)->code) == SET)
    goto mark_set;
  if (((enum rtx_code) (sub)->code) == CLOBBER)
    goto mark_clob;
  break;
       case SET:
       mark_set:
  if (((enum rtx_code) ((((sub)->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
    flags |= 512;
       case CLOBBER:
       mark_clob:
  mark_set_1 (pbi, code, (((sub)->u.fld[0]).rtx1), cond, insn, flags);
  break;
       case ASM_OPERANDS:
  flags |= 512;
  break;
       default:
  break;
       }
   }
 break;
      }
    default:
      break;
    }
}
static void
mark_set_1 (struct propagate_block_info *pbi, enum rtx_code code, rtx reg, rtx cond, rtx insn, int flags)
{
  int regno_first = -1, regno_last = -1;
  unsigned long not_dead = 0;
  int i;
  switch (((enum rtx_code) (reg)->code))
    {
    case PARALLEL:
      for (i = (((((reg)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 if (((((((((reg)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1) != 0)
   mark_set_1 (pbi, code, ((((((((reg)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1), cond, insn,
        flags);
      return;
    case ZERO_EXTRACT:
    case SIGN_EXTRACT:
    case STRICT_LOW_PART:
      do
 reg = (((reg)->u.fld[0]).rtx1);
      while (((enum rtx_code) (reg)->code) == SUBREG
      || ((enum rtx_code) (reg)->code) == ZERO_EXTRACT
      || ((enum rtx_code) (reg)->code) == SIGN_EXTRACT
      || ((enum rtx_code) (reg)->code) == STRICT_LOW_PART);
      if ((((enum rtx_code) (reg)->code) == MEM))
 break;
      not_dead = (unsigned long) bitmap_bit_p (pbi->reg_live, (((reg)->u.fld[0]).rtuint));
    case REG:
      regno_last = regno_first = (((reg)->u.fld[0]).rtuint);
      if (regno_first < 53)
 regno_last += hard_regno_nregs[regno_first][((enum machine_mode) (reg)->mode)] - 1;
      break;
    case SUBREG:
      if ((((enum rtx_code) ((((reg)->u.fld[0]).rtx1))->code) == REG))
 {
   enum machine_mode outer_mode = ((enum machine_mode) (reg)->mode);
   enum machine_mode inner_mode = ((enum machine_mode) ((((reg)->u.fld[0]).rtx1))->mode);
   regno_last = regno_first = ((((((reg)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
   if (regno_first < 53)
     {
       regno_first += subreg_regno_offset (regno_first, inner_mode,
        (((reg)->u.fld[1]).rtuint),
        outer_mode);
       regno_last = (regno_first
       + hard_regno_nregs[regno_first][outer_mode] - 1);
       reg = gen_rtx_REG (outer_mode, regno_first);
     }
   else
     {
       if (((((unsigned short) mode_size[outer_mode])
      + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))
    < ((((unsigned short) mode_size[inner_mode])
        + (0 ? 8 : 4) - 1) / (0 ? 8 : 4)))
  not_dead = (unsigned long) bitmap_bit_p (pbi->reg_live, regno_first)
                       ;
       reg = (((reg)->u.fld[0]).rtx1);
     }
 }
      else
 reg = (((reg)->u.fld[0]).rtx1);
      break;
    default:
      break;
    }
  if (optimize && (flags & 256))
    {
      if ((((enum rtx_code) (reg)->code) == REG))
 invalidate_mems_from_set (pbi, reg);
      if (insn && (((enum rtx_code) (reg)->code) == MEM))
 for_each_rtx (&(((insn)->u.fld[5]).rtx1), invalidate_mems_from_autoinc, pbi);
      if ((((enum rtx_code) (reg)->code) == MEM) && ! side_effects_p (reg)
   && ! cond)
 add_to_mem_set_list (pbi, canon_rtx (reg));
    }
  if ((((enum rtx_code) (reg)->code) == REG)
      && ! (regno_first == 20
     && (! reload_completed || frame_pointer_needed))
      && ! (regno_first == 6
     && (! reload_completed || frame_pointer_needed))
      && ! (regno_first == 16 && fixed_regs[regno_first])
      )
    {
      int some_was_live = 0, some_was_dead = 0;
      for (i = regno_first; i <= regno_last; ++i)
 {
   int needed_regno = bitmap_bit_p (pbi->reg_live, i);
   if (pbi->local_set)
     {
       bitmap_clear_bit (pbi->cond_local_set, i);
       if (cond != (rtx) 0
    && ! bitmap_bit_p (pbi->local_set, i))
  bitmap_set_bit (pbi->cond_local_set, i);
       else
  bitmap_set_bit (pbi->local_set, i);
     }
   if (code != CLOBBER)
     bitmap_set_bit (pbi->new_set, i);
   some_was_live |= needed_regno;
   some_was_dead |= ! needed_regno;
 }
      if (flags & (2 | 4
     | 1 | 64))
 {
   rtx y;
   int blocknum = pbi->bb->index;
   y = (rtx) 0;
   if (flags & (2 | 64))
     {
       y = pbi->reg_next_use[regno_first];
       for (i = regno_first; i <= regno_last; ++i)
  pbi->reg_next_use[i] = 0;
     }
   if (flags & 4)
     {
       for (i = regno_first; i <= regno_last; ++i)
  {
    (((reg_n_info)->data.reg[i])->sets) += 1;
    (((reg_n_info)->data.reg[i])->refs) += 1;
    (((reg_n_info)->data.reg[i])->freq) += (optimize_size || (flag_branch_probabilities && !ENTRY_BLOCK_PTR->count) ? 1000 : ((pbi->bb)->frequency * 1000 / 10000) ? ((pbi->bb)->frequency * 1000 / 10000) : 1);
    (((reg_n_info)->data.reg[i])->live_length) += 1;
  }
       if (regno_first < 53)
  {
    for (i = regno_first; i <= regno_last; i++)
      regs_ever_live[i] = 1;
    if (flags & 512)
      for (i = regno_first; i <= regno_last; i++)
        regs_asm_clobbered[i] = 1;
  }
       else
  {
    if ((((reg_n_info)->data.reg[regno_first])->basic_block1) == -1)
      (((reg_n_info)->data.reg[regno_first])->basic_block1) = blocknum;
    else if ((((reg_n_info)->data.reg[regno_first])->basic_block1) != blocknum)
      (((reg_n_info)->data.reg[regno_first])->basic_block1) = -2;
  }
     }
   if (! some_was_dead)
     {
       if (flags & 2)
  {
    if (y && (((((y)->u.fld[3]).bb)->index + 0) == blocknum)
        && (regno_first >= 53
     || (asm_noperands ((((y)->u.fld[5]).rtx1)) < 0
         && ! ((((enum rtx_code) (insn)->code) == CALL_INSN
         || ((enum rtx_code) (y)->code) == CALL_INSN)
        && global_regs[regno_first]))))
      (((y)->u.fld[7]).rtx1) = alloc_INSN_LIST (insn, (((y)->u.fld[7]).rtx1));
  }
     }
   else if (not_dead)
     ;
   else if (! some_was_live)
     {
       if (flags & 4)
  (((reg_n_info)->data.reg[regno_first])->deaths) += 1;
       if (flags & 1)
  {
    (((insn)->u.fld[8]).rtx1)
      = alloc_EXPR_LIST (REG_UNUSED, reg, (((insn)->u.fld[8]).rtx1));
  }
     }
   else
     {
       if (flags & 1)
  {
    for (i = regno_first; i <= regno_last; ++i)
      if (! bitmap_bit_p (pbi->reg_live, i))
        (((insn)->u.fld[8]).rtx1)
   = alloc_EXPR_LIST (REG_UNUSED,
        (cfun->emit->x_regno_reg_rtx)[i],
        (((insn)->u.fld[8]).rtx1));
  }
     }
 }
      if (some_was_live
   && regno_first != 7)
 {
   for (i = regno_first; i <= regno_last; ++i)
     if (!(not_dead & (((unsigned long) 1) << (i - regno_first))))
       {
  if ((pbi->flags & 4)
      && bitmap_bit_p (pbi->reg_live, i))
    {
      (((reg_n_info)->data.reg[i])->live_length) += pbi->insn_num - reg_deaths[i];
      reg_deaths[i] = 0;
    }
  bitmap_clear_bit (pbi->reg_live, i);
       }
 }
    }
  else if ((((enum rtx_code) (reg)->code) == REG))
    {
      if (flags & (2 | 64))
 pbi->reg_next_use[regno_first] = 0;
      if ((flags & 4) != 0
   && (flags & 512) != 0
   && regno_first < 53)
 {
   for (i = regno_first; i <= regno_last; i++)
     regs_asm_clobbered[i] = 1;
 }
    }
  else if (((enum rtx_code) (reg)->code) == SCRATCH)
    {
      if (flags & 1)
 (((insn)->u.fld[8]).rtx1)
   = alloc_EXPR_LIST (REG_UNUSED, reg, (((insn)->u.fld[8]).rtx1));
    }
}
static void
mark_used_reg (struct propagate_block_info *pbi, rtx reg,
        rtx cond , rtx insn)
{
  unsigned int regno_first, regno_last, i;
  int some_was_live, some_was_dead, some_not_set;
  regno_last = regno_first = (((reg)->u.fld[0]).rtuint);
  if (regno_first < 53)
    regno_last += hard_regno_nregs[regno_first][((enum machine_mode) (reg)->mode)] - 1;
  some_was_live = some_was_dead = 0;
  for (i = regno_first; i <= regno_last; ++i)
    {
      int needed_regno = bitmap_bit_p (pbi->reg_live, i);
      some_was_live |= needed_regno;
      some_was_dead |= ! needed_regno;
    }
  some_not_set = 0;
  for (i = regno_first; i <= regno_last; ++i)
    some_not_set |= ! bitmap_bit_p (pbi->new_set, i);
  if (pbi->flags & (2 | 64))
    {
      pbi->reg_next_use[regno_first] = insn;
    }
  if (pbi->flags & 4)
    {
      if (regno_first < 53)
 {
   if (! ((!!((elim_reg_set)[(regno_first) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno_first) % ((unsigned) (8 * 4))))))
          && (regno_first == 20
       || regno_first == 16)))
     for (i = regno_first; i <= regno_last; ++i)
       regs_ever_live[i] = 1;
 }
      else
 {
   int blocknum = pbi->bb->index;
   if ((((reg_n_info)->data.reg[regno_first])->basic_block1) == -1)
     (((reg_n_info)->data.reg[regno_first])->basic_block1) = blocknum;
   else if ((((reg_n_info)->data.reg[regno_first])->basic_block1) != blocknum)
     (((reg_n_info)->data.reg[regno_first])->basic_block1) = -2;
   (((reg_n_info)->data.reg[regno_first])->freq) += (optimize_size || (flag_branch_probabilities && !ENTRY_BLOCK_PTR->count) ? 1000 : ((pbi->bb)->frequency * 1000 / 10000) ? ((pbi->bb)->frequency * 1000 / 10000) : 1);
   (((reg_n_info)->data.reg[regno_first])->refs)++;
 }
      for (i = regno_first; i <= regno_last; ++i)
 if (! bitmap_bit_p (pbi->reg_live, i))
   {
     reg_deaths[i] = pbi->insn_num;
   }
    }
  if ((pbi->flags & (1 | 4))
      && some_was_dead
      && some_not_set)
    {
      if (regno_first != regno_last)
 for (i = regno_first; i <= regno_last; ++i)
   some_was_live |= bitmap_bit_p (pbi->new_set, i);
      if (! some_was_live)
 {
   if ((pbi->flags & 1)
       && ! find_regno_note (insn, REG_DEAD, regno_first))
     (((insn)->u.fld[8]).rtx1)
       = alloc_EXPR_LIST (REG_DEAD, reg, (((insn)->u.fld[8]).rtx1));
   if (pbi->flags & 4)
     (((reg_n_info)->data.reg[regno_first])->deaths)++;
 }
      else
 {
   for (i = regno_first; i <= regno_last; ++i)
     if (! bitmap_bit_p (pbi->reg_live, i)
  && ! dead_or_set_regno_p (insn, i))
       (((insn)->u.fld[8]).rtx1)
  = alloc_EXPR_LIST (REG_DEAD,
       (cfun->emit->x_regno_reg_rtx)[i],
       (((insn)->u.fld[8]).rtx1));
 }
    }
  for (i = regno_first; i <= regno_last; ++i)
    {
      bitmap_set_bit (pbi->reg_live, i);
    }
}
static void
mark_used_regs (struct propagate_block_info *pbi, rtx x, rtx cond, rtx insn)
{
  enum rtx_code code;
  int regno;
  int flags = pbi->flags;
 retry:
  if (!x)
    return;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case LABEL_REF:
    case SYMBOL_REF:
    case CONST_INT:
    case CONST:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case PC:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      return;
    case CLOBBER:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
 mark_used_regs (pbi, ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), cond, insn);
      return;
    case MEM:
      if (optimize && (flags & 256))
 {
   if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SYMBOL_REF
       && ((((((x)->u.fld[0]).rtx1)))->unchanging))
     ;
   else
     {
       rtx temp = pbi->mem_set_list;
       rtx prev = (rtx) 0;
       rtx next;
       while (temp)
  {
    next = (((temp)->u.fld[1]).rtx1);
    if (unchanging_anti_dependence ((((temp)->u.fld[0]).rtx1), x))
      {
        if (prev)
   (((prev)->u.fld[1]).rtx1) = next;
        else
   pbi->mem_set_list = next;
        free_EXPR_LIST_node (temp);
        pbi->mem_set_list_len--;
      }
    else
      prev = temp;
    temp = next;
  }
     }
   if (insn)
     for_each_rtx (&(((insn)->u.fld[5]).rtx1), invalidate_mems_from_autoinc, pbi);
 }
      break;
    case SUBREG:
      if ((flags & 4)
   && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
 bitmap_set_bit (&subregs_of_mode, ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)
       * MAX_MACHINE_MODE
       + ((enum machine_mode) (x)->mode));
      x = (((x)->u.fld[0]).rtx1);
      if (!(((enum rtx_code) (x)->code) == REG))
 goto retry;
    case REG:
      mark_used_reg (pbi, x, cond, insn);
      return;
    case SET:
      {
 rtx testreg = (((x)->u.fld[0]).rtx1);
 int mark_dest = 0;
 if ((((enum rtx_code) (testreg)->code) == MEM))
   {
     mark_used_regs (pbi, (((testreg)->u.fld[0]).rtx1), cond, insn);
     mark_used_regs (pbi, (((x)->u.fld[1]).rtx1), cond, insn);
     return;
   }
 while (((enum rtx_code) (testreg)->code) == STRICT_LOW_PART
        || ((enum rtx_code) (testreg)->code) == ZERO_EXTRACT
        || ((enum rtx_code) (testreg)->code) == SIGN_EXTRACT
        || ((enum rtx_code) (testreg)->code) == SUBREG)
   {
     if ((flags & 4)
  && ((enum rtx_code) (testreg)->code) == SUBREG
  && (((enum rtx_code) ((((testreg)->u.fld[0]).rtx1))->code) == REG)
  && ((((((testreg)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
       bitmap_set_bit (&subregs_of_mode, ((((((testreg)->u.fld[0]).rtx1))->u.fld[0]).rtuint)
      * MAX_MACHINE_MODE
      + ((enum machine_mode) (testreg)->mode));
     if (((enum rtx_code) (testreg)->code) == SUBREG
  && !((mode_size[(int) ((enum machine_mode) ((((testreg)->u.fld[0]).rtx1))->mode)]
        + (0 ? 8 : 4) - 1) / (0 ? 8 : 4)
       > (mode_size[(int) ((enum machine_mode) (testreg)->mode)]
   + (0 ? 8 : 4) - 1) / (0 ? 8 : 4)))
       ;
     else
       mark_dest = 1;
     testreg = (((testreg)->u.fld[0]).rtx1);
   }
 if ((((enum rtx_code) (testreg)->code) == PARALLEL
      && ((enum machine_mode) (testreg)->mode) == BLKmode)
     || ((((enum rtx_code) (testreg)->code) == REG)
  && (regno = (((testreg)->u.fld[0]).rtuint),
      ! (regno == 20
         && (! reload_completed || frame_pointer_needed)))
  && ! (regno == 6
        && (! reload_completed || frame_pointer_needed))
  && ! (regno == 16 && fixed_regs[regno])
  ))
   {
     if (mark_dest)
       mark_used_regs (pbi, (((x)->u.fld[0]).rtx1), cond, insn);
     mark_used_regs (pbi, (((x)->u.fld[1]).rtx1), cond, insn);
     return;
   }
      }
      break;
    case ASM_OPERANDS:
    case UNSPEC_VOLATILE:
    case TRAP_IF:
    case ASM_INPUT:
      {
 if (code != ASM_OPERANDS || (((x))->volatil))
   {
     free_EXPR_LIST_list (&pbi->mem_set_list);
     pbi->mem_set_list_len = 0;
   }
 if (code == ASM_OPERANDS)
   {
     int j;
     for (j = 0; j < (((((x)->u.fld[3]).rtvec1))->num_elem); j++)
       mark_used_regs (pbi, (((((x)->u.fld[3]).rtvec1))->elem[j]), cond, insn);
   }
 break;
      }
    case COND_EXEC:
      if (cond != (rtx) 0)
 abort ();
      mark_used_regs (pbi, (((x)->u.fld[0]).rtx1), (rtx) 0, insn);
      cond = (((x)->u.fld[0]).rtx1);
      x = (((x)->u.fld[1]).rtx1);
      goto retry;
    default:
      break;
    }
  {
    const char * const fmt = (rtx_format[(int) (code)]);
    int i;
    for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
      {
 if (fmt[i] == 'e')
   {
     if (i == 0)
       {
  x = (((x)->u.fld[0]).rtx1);
  goto retry;
       }
     mark_used_regs (pbi, (((x)->u.fld[i]).rtx1), cond, insn);
   }
 else if (fmt[i] == 'E')
   {
     int j;
     for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
       mark_used_regs (pbi, (((((x)->u.fld[i]).rtvec1))->elem[j]), cond, insn);
   }
      }
  }
}
rtx
find_use_as_address (rtx x, rtx reg, long plusconst)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char * const fmt = (rtx_format[(int) (code)]);
  int i;
  rtx value1 = 0;
  rtx tem;
  if (code == MEM && (((x)->u.fld[0]).rtx1) == reg && plusconst == 0)
    return x;
  if (code == MEM && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
      && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == reg
      && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
      && ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) == plusconst)
    return x;
  if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
    {
      if (find_use_as_address ((((x)->u.fld[0]).rtx1), reg, 0) != 0)
 return (rtx) (size_t) 1;
    }
  if (x == reg)
    return (rtx) (size_t) 1;
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   tem = find_use_as_address ((((x)->u.fld[i]).rtx1), reg, plusconst);
   if (value1 == 0)
     value1 = tem;
   else if (tem != 0)
     return (rtx) (size_t) 1;
 }
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     {
       tem = find_use_as_address ((((((x)->u.fld[i]).rtvec1))->elem[j]), reg, plusconst);
       if (value1 == 0)
  value1 = tem;
       else if (tem != 0)
  return (rtx) (size_t) 1;
     }
 }
    }
  return value1;
}
void
dump_regset (regset r, FILE *outf)
{
  int i;
  if (r == ((void *)0))
    {
      fputs_unlocked (" (nil)", outf);
      return;
    }
  do { bitmap_element *ptr_ = (r)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { fprintf (outf, " %d", i); if (i < 53) fprintf (outf, " [%s]", reg_names[i]); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
}
void
debug_regset (regset r)
{
  dump_regset (r, stderr);
  putc_unlocked ('\n', stderr);
}
void
recompute_reg_usage (rtx f , int loop_step )
{
  allocate_reg_life_data ();
  update_life_info (((void *)0), UPDATE_LIFE_LOCAL, 4 | 1);
}
int
count_or_remove_death_notes (sbitmap blocks, int kill)
{
  int count = 0;
  int i;
  basic_block bb;
  if (blocks)
    {
      do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (blocks)->size; unsigned long *ptr_ = (blocks)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (i) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { count += count_or_remove_death_notes_bb ((((basic_block_info)->data.bb[(i)])), kill); }; if (word_ == 0) break; } } } } while (0)
   ;
    }
  else
    {
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   count += count_or_remove_death_notes_bb (bb, kill);
 }
    }
  return count;
}
static int
count_or_remove_death_notes_bb (basic_block bb, int kill)
{
  int count = 0;
  rtx insn;
  for (insn = (bb)->head_; ; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   rtx *pprev = &(((insn)->u.fld[8]).rtx1);
   rtx link = *pprev;
   while (link)
     {
       switch (((enum reg_note) ((enum machine_mode) (link)->mode)))
  {
  case REG_DEAD:
    if ((((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == REG))
      {
        rtx reg = (((link)->u.fld[0]).rtx1);
        int n;
        if ((((reg)->u.fld[0]).rtuint) >= 53)
          n = 1;
        else
          n = hard_regno_nregs[(((reg)->u.fld[0]).rtuint)][((enum machine_mode) (reg)->mode)];
        count += n;
      }
  case REG_UNUSED:
    if (kill)
      {
        rtx next = (((link)->u.fld[1]).rtx1);
        free_EXPR_LIST_node (link);
        *pprev = link = next;
        break;
      }
  default:
    pprev = &(((link)->u.fld[1]).rtx1);
    link = *pprev;
    break;
  }
     }
 }
      if (insn == (bb)->end_)
 break;
    }
  return count;
}
static void
clear_log_links (sbitmap blocks)
{
  rtx insn;
  int i;
  if (!blocks)
    {
      for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
 if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
   free_INSN_LIST_list (&(((insn)->u.fld[7]).rtx1));
    }
  else
    do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (blocks)->size; unsigned long *ptr_ = (blocks)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (i) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { basic_block bb = (((basic_block_info)->data.bb[(i)])); for (insn = (bb)->head_; insn != ((((bb)->end_)->u.fld[2]).rtx1); insn = (((insn)->u.fld[2]).rtx1)) if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))) free_INSN_LIST_list (&(((insn)->u.fld[7]).rtx1)); }; if (word_ == 0) break; } } } } while (0)
        ;
}
void
reg_set_to_hard_reg_set (HARD_REG_SET *to, bitmap from)
{
  int i;
  do { bitmap_element *ptr_ = (from)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { if (i >= 53) return; ((*to)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
}
enum comparison_code {
  COMPCODE_FALSE = 0,
  COMPCODE_LT = 1,
  COMPCODE_EQ = 2,
  COMPCODE_LE = 3,
  COMPCODE_GT = 4,
  COMPCODE_LTGT = 5,
  COMPCODE_GE = 6,
  COMPCODE_ORD = 7,
  COMPCODE_UNORD = 8,
  COMPCODE_UNLT = 9,
  COMPCODE_UNEQ = 10,
  COMPCODE_UNLE = 11,
  COMPCODE_UNGT = 12,
  COMPCODE_NE = 13,
  COMPCODE_UNGE = 14,
  COMPCODE_TRUE = 15
};
static void encode (long *, unsigned long, long);
static void decode (long *, unsigned long *, long *);
static unsigned char negate_mathfn_p (enum built_in_function);
static unsigned char negate_expr_p (tree);
static tree negate_expr (tree);
static tree split_tree (tree, enum tree_code, tree *, tree *, tree *, int);
static tree associate_trees (tree, tree, enum tree_code, tree);
static tree const_binop (enum tree_code, tree, tree, int);
static hashval_t size_htab_hash (const void *);
static int size_htab_eq (const void *, const void *);
static tree fold_convert_const (enum tree_code, tree, tree);
static enum tree_code invert_tree_comparison (enum tree_code, unsigned char);
static enum comparison_code comparison_to_compcode (enum tree_code);
static enum tree_code compcode_to_comparison (enum comparison_code);
static tree combine_comparisons (enum tree_code, enum tree_code,
     enum tree_code, tree, tree, tree);
static int truth_value_p (enum tree_code);
static int operand_equal_for_comparison_p (tree, tree, tree);
static int twoval_comparison_p (tree, tree *, tree *, int *);
static tree eval_subst (tree, tree, tree, tree, tree);
static tree pedantic_omit_one_operand (tree, tree, tree);
static tree distribute_bit_expr (enum tree_code, tree, tree, tree);
static tree make_bit_field_ref (tree, tree, int, int, int);
static tree optimize_bit_field_compare (enum tree_code, tree, tree, tree);
static tree decode_field_reference (tree, long *, long *,
        enum machine_mode *, int *, int *,
        tree *, tree *);
static int all_ones_mask_p (tree, int);
static tree sign_bit_p (tree, tree);
static int simple_operand_p (tree);
static tree range_binop (enum tree_code, tree, tree, int, tree, int);
static tree make_range (tree, int *, tree *, tree *);
static tree build_range_check (tree, tree, int, tree, tree);
static int merge_ranges (int *, tree *, tree *, int, tree, tree, int, tree,
    tree);
static tree fold_range_test (tree);
static tree fold_cond_expr_with_comparison (tree, tree, tree, tree);
static tree unextend (tree, int, int, tree);
static tree fold_truthop (enum tree_code, tree, tree, tree);
static tree optimize_minmax_comparison (tree);
static tree extract_muldiv (tree, tree, enum tree_code, tree);
static tree extract_muldiv_1 (tree, tree, enum tree_code, tree);
static int multiple_of_p (tree, tree, tree);
static tree constant_boolean_node (int, tree);
static tree fold_binary_op_with_conditional_arg (enum tree_code, tree, tree,
       tree, int);
static unsigned char fold_real_zero_addition_p (tree, tree, int);
static tree fold_mathfn_compare (enum built_in_function, enum tree_code,
     tree, tree, tree);
static tree fold_inf_compare (enum tree_code, tree, tree, tree);
static tree fold_div_compare (enum tree_code, tree, tree, tree);
static unsigned char reorder_operands_p (tree, tree);
static tree fold_negate_const (tree, tree);
static tree fold_not_const (tree, tree);
static tree fold_relational_const (enum tree_code, tree, tree, tree);
static tree fold_relational_hi_lo (enum tree_code *, const tree,
                                   tree *, tree *);
static void
encode (long *words, unsigned long low, long hi)
{
  words[0] = ((low) & (((unsigned long) 1 << ((8 * 4) / 2)) - 1));
  words[1] = ((unsigned long) (low) >> (8 * 4) / 2);
  words[2] = ((hi) & (((unsigned long) 1 << ((8 * 4) / 2)) - 1));
  words[3] = ((unsigned long) (hi) >> (8 * 4) / 2);
}
static void
decode (long *words, unsigned long *low,
 long *hi)
{
  *low = words[0] + words[1] * ((unsigned long) 1 << (8 * 4) / 2);
  *hi = words[2] + words[3] * ((unsigned long) 1 << (8 * 4) / 2);
}
int
force_fit_type (tree t, int overflow)
{
  unsigned long low;
  long high;
  unsigned int prec;
  if (((enum tree_code) (t)->common.code) == REAL_CST)
    {
      return overflow;
    }
  else if (((enum tree_code) (t)->common.code) != INTEGER_CST)
    return overflow;
  low = (((t)->int_cst.int_cst).low);
  high = (((t)->int_cst.int_cst).high);
  if ((((enum tree_code) (((t)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((t)->common.type))->common.code) == REFERENCE_TYPE)
      || ((enum tree_code) (((t)->common.type))->common.code) == OFFSET_TYPE)
    prec = (8 * (0 ? 8 : 4));
  else
    prec = ((((t)->common.type))->type.precision);
  if (prec == 2 * (8 * 4))
    ;
  else if (prec > (8 * 4))
    (((t)->int_cst.int_cst).high)
      &= ~((long) (-1) << (prec - (8 * 4)));
  else
    {
      (((t)->int_cst.int_cst).high) = 0;
      if (prec < (8 * 4))
 (((t)->int_cst.int_cst).low) &= ~((unsigned long) (-1) << prec);
    }
  if (((((t)->common.type))->common.unsigned_flag)
      && ! (((enum tree_code) (((t)->common.type))->common.code) == INTEGER_TYPE
     && ((((t)->common.type))->type.no_force_blk_flag)))
    return overflow;
  if (prec != 2 * (8 * 4)
      && (prec > (8 * 4)
   ? 0 != ((((t)->int_cst.int_cst).high)
    & ((long) 1
       << (prec - (8 * 4) - 1)))
   : 0 != ((((t)->int_cst.int_cst).low)
    & ((unsigned long) 1 << (prec - 1)))))
    {
      if (prec > (8 * 4))
 (((t)->int_cst.int_cst).high)
   |= ((long) (-1) << (prec - (8 * 4)));
      else
 {
   (((t)->int_cst.int_cst).high) = -1;
   if (prec < (8 * 4))
     (((t)->int_cst.int_cst).low) |= ((unsigned long) (-1) << prec);
 }
    }
  return
    ((overflow | (low ^ (((t)->int_cst.int_cst).low)) | (high ^ (((t)->int_cst.int_cst).high)))
     != 0);
}
int
add_double (unsigned long l1, long h1,
     unsigned long l2, long h2,
     unsigned long *lv, long *hv)
{
  unsigned long l;
  long h;
  l = l1 + l2;
  h = h1 + h2 + (l < l1);
  *lv = l;
  *hv = h;
  return ((~((h1) ^ (h2)) & ((h1) ^ (h))) < 0);
}
int
neg_double (unsigned long l1, long h1,
     unsigned long *lv, long *hv)
{
  if (l1 == 0)
    {
      *lv = 0;
      *hv = - h1;
      return (*hv & h1) < 0;
    }
  else
    {
      *lv = -l1;
      *hv = ~h1;
      return 0;
    }
}
int
mul_double (unsigned long l1, long h1,
     unsigned long l2, long h2,
     unsigned long *lv, long *hv)
{
  long arg1[4];
  long arg2[4];
  long prod[4 * 2];
  unsigned long carry;
  int i, j, k;
  unsigned long toplow, neglow;
  long tophigh, neghigh;
  encode (arg1, l1, h1);
  encode (arg2, l2, h2);
  memset (prod, 0, sizeof prod);
  for (i = 0; i < 4; i++)
    {
      carry = 0;
      for (j = 0; j < 4; j++)
 {
   k = i + j;
   carry += arg1[i] * arg2[j];
   carry += prod[k];
   prod[k] = ((carry) & (((unsigned long) 1 << ((8 * 4) / 2)) - 1));
   carry = ((unsigned long) (carry) >> (8 * 4) / 2);
 }
      prod[i + 4] = carry;
    }
  decode (prod, lv, hv);
  decode (prod + 4, &toplow, &tophigh);
  if (h1 < 0)
    {
      neg_double (l2, h2, &neglow, &neghigh);
      add_double (neglow, neghigh, toplow, tophigh, &toplow, &tophigh);
    }
  if (h2 < 0)
    {
      neg_double (l1, h1, &neglow, &neghigh);
      add_double (neglow, neghigh, toplow, tophigh, &toplow, &tophigh);
    }
  return (*hv < 0 ? ~(toplow & tophigh) : toplow | tophigh) != 0;
}
void
lshift_double (unsigned long l1, long h1,
        long count, unsigned int prec,
        unsigned long *lv, long *hv, int arith)
{
  unsigned long signmask;
  if (count < 0)
    {
      rshift_double (l1, h1, -count, prec, lv, hv, arith);
      return;
    }
  if (0)
    count %= prec;
  if (count >= 2 * (8 * 4))
    {
      *hv = 0;
      *lv = 0;
    }
  else if (count >= (8 * 4))
    {
      *hv = l1 << (count - (8 * 4));
      *lv = 0;
    }
  else
    {
      *hv = (((unsigned long) h1 << count)
      | (l1 >> ((8 * 4) - count - 1) >> 1));
      *lv = l1 << count;
    }
  signmask = -((prec > (8 * 4)
  ? ((unsigned long) *hv
     >> (prec - (8 * 4) - 1))
  : (*lv >> (prec - 1))) & 1);
  if (prec >= 2 * (8 * 4))
    ;
  else if (prec >= (8 * 4))
    {
      *hv &= ~((long) (-1) << (prec - (8 * 4)));
      *hv |= signmask << (prec - (8 * 4));
    }
  else
    {
      *hv = signmask;
      *lv &= ~((unsigned long) (-1) << prec);
      *lv |= signmask << prec;
    }
}
void
rshift_double (unsigned long l1, long h1,
        long count, unsigned int prec,
        unsigned long *lv, long *hv,
        int arith)
{
  unsigned long signmask;
  signmask = (arith
       ? -((unsigned long) h1 >> ((8 * 4) - 1))
       : 0);
  if (0)
    count %= prec;
  if (count >= 2 * (8 * 4))
    {
      *hv = 0;
      *lv = 0;
    }
  else if (count >= (8 * 4))
    {
      *hv = 0;
      *lv = (unsigned long) h1 >> (count - (8 * 4));
    }
  else
    {
      *hv = (unsigned long) h1 >> count;
      *lv = ((l1 >> count)
      | ((unsigned long) h1 << ((8 * 4) - count - 1) << 1));
    }
  if (count >= (long)prec)
    {
      *hv = signmask;
      *lv = signmask;
    }
  else if ((prec - count) >= 2 * (8 * 4))
    ;
  else if ((prec - count) >= (8 * 4))
    {
      *hv &= ~((long) (-1) << (prec - count - (8 * 4)));
      *hv |= signmask << (prec - count - (8 * 4));
    }
  else
    {
      *hv = signmask;
      *lv &= ~((unsigned long) (-1) << (prec - count));
      *lv |= signmask << (prec - count);
    }
}
void
lrotate_double (unsigned long l1, long h1,
  long count, unsigned int prec,
  unsigned long *lv, long *hv)
{
  unsigned long s1l, s2l;
  long s1h, s2h;
  count %= prec;
  if (count < 0)
    count += prec;
  lshift_double (l1, h1, count, prec, &s1l, &s1h, 0);
  rshift_double (l1, h1, prec - count, prec, &s2l, &s2h, 0);
  *lv = s1l | s2l;
  *hv = s1h | s2h;
}
void
rrotate_double (unsigned long l1, long h1,
  long count, unsigned int prec,
  unsigned long *lv, long *hv)
{
  unsigned long s1l, s2l;
  long s1h, s2h;
  count %= prec;
  if (count < 0)
    count += prec;
  rshift_double (l1, h1, count, prec, &s1l, &s1h, 0);
  lshift_double (l1, h1, prec - count, prec, &s2l, &s2h, 0);
  *lv = s1l | s2l;
  *hv = s1h | s2h;
}
int
div_and_round_double (enum tree_code code, int uns,
        unsigned long lnum_orig,
        long hnum_orig,
        unsigned long lden_orig,
        long hden_orig,
        unsigned long *lquo,
        long *hquo, unsigned long *lrem,
        long *hrem)
{
  int quo_neg = 0;
  long num[4 + 1];
  long den[4], quo[4];
  int i, j;
  unsigned long work;
  unsigned long carry = 0;
  unsigned long lnum = lnum_orig;
  long hnum = hnum_orig;
  unsigned long lden = lden_orig;
  long hden = hden_orig;
  int overflow = 0;
  if (hden == 0 && lden == 0)
    overflow = 1, lden = 1;
  if (!uns)
    {
      if (hnum < 0)
 {
   quo_neg = ~ quo_neg;
   if (neg_double (lnum, hnum, &lnum, &hnum)
       && ((long) lden & hden) == -1)
     overflow = 1;
 }
      if (hden < 0)
 {
   quo_neg = ~ quo_neg;
   neg_double (lden, hden, &lden, &hden);
 }
    }
  if (hnum == 0 && hden == 0)
    {
      *hquo = *hrem = 0;
      *lquo = lnum / lden;
      goto finish_up;
    }
  if (hnum == 0)
    {
      *hquo = *lquo = 0;
      *hrem = hnum;
      *lrem = lnum;
      goto finish_up;
    }
  memset (quo, 0, sizeof quo);
  memset (num, 0, sizeof num);
  memset (den, 0, sizeof den);
  encode (num, lnum, hnum);
  encode (den, lden, hden);
  if (hden == 0 && lden < (unsigned long) ((unsigned long) 1 << (8 * 4) / 2))
    {
      for (i = 4 - 1; i >= 0; i--)
 {
   work = num[i] + carry * ((unsigned long) 1 << (8 * 4) / 2);
   quo[i] = work / lden;
   carry = work % lden;
 }
    }
  else
    {
      int num_hi_sig, den_hi_sig;
      unsigned long quo_est, scale;
      for (i = 4 - 1;; i--)
 if (den[i] != 0)
   {
     den_hi_sig = i;
     break;
   }
      scale = ((unsigned long) 1 << (8 * 4) / 2) / (den[den_hi_sig] + 1);
      if (scale > 1)
 {
   carry = 0;
   for (i = 0; i <= 4 - 1; i++)
     {
       work = (num[i] * scale) + carry;
       num[i] = ((work) & (((unsigned long) 1 << ((8 * 4) / 2)) - 1));
       carry = ((unsigned long) (work) >> (8 * 4) / 2);
     }
   num[4] = carry;
   carry = 0;
   for (i = 0; i <= 4 - 1; i++)
     {
       work = (den[i] * scale) + carry;
       den[i] = ((work) & (((unsigned long) 1 << ((8 * 4) / 2)) - 1));
       carry = ((unsigned long) (work) >> (8 * 4) / 2);
       if (den[i] != 0) den_hi_sig = i;
     }
 }
      num_hi_sig = 4;
      for (i = num_hi_sig - den_hi_sig - 1; i >= 0; i--)
 {
   unsigned long tmp;
   num_hi_sig = i + den_hi_sig + 1;
   work = num[num_hi_sig] * ((unsigned long) 1 << (8 * 4) / 2) + num[num_hi_sig - 1];
   if (num[num_hi_sig] != den[den_hi_sig])
     quo_est = work / den[den_hi_sig];
   else
     quo_est = ((unsigned long) 1 << (8 * 4) / 2) - 1;
   tmp = work - quo_est * den[den_hi_sig];
   if (tmp < ((unsigned long) 1 << (8 * 4) / 2)
       && (den[den_hi_sig - 1] * quo_est
    > (tmp * ((unsigned long) 1 << (8 * 4) / 2) + num[num_hi_sig - 2])))
     quo_est--;
   carry = 0;
   for (j = 0; j <= den_hi_sig; j++)
     {
       work = quo_est * den[j] + carry;
       carry = ((unsigned long) (work) >> (8 * 4) / 2);
       work = num[i + j] - ((work) & (((unsigned long) 1 << ((8 * 4) / 2)) - 1));
       num[i + j] = ((work) & (((unsigned long) 1 << ((8 * 4) / 2)) - 1));
       carry += ((unsigned long) (work) >> (8 * 4) / 2) != 0;
     }
   if (num[num_hi_sig] < (long) carry)
     {
       quo_est--;
       carry = 0;
       for (j = 0; j <= den_hi_sig; j++)
  {
    work = num[i + j] + den[j] + carry;
    carry = ((unsigned long) (work) >> (8 * 4) / 2);
    num[i + j] = ((work) & (((unsigned long) 1 << ((8 * 4) / 2)) - 1));
  }
       num [num_hi_sig] += carry;
     }
   quo[i] = quo_est;
 }
    }
  decode (quo, lquo, hquo);
 finish_up:
  if (quo_neg)
    neg_double (*lquo, *hquo, lquo, hquo);
  mul_double (*lquo, *hquo, lden_orig, hden_orig, lrem, hrem);
  neg_double (*lrem, *hrem, lrem, hrem);
  add_double (lnum_orig, hnum_orig, *lrem, *hrem, lrem, hrem);
  switch (code)
    {
    case TRUNC_DIV_EXPR:
    case TRUNC_MOD_EXPR:
    case EXACT_DIV_EXPR:
      return overflow;
    case FLOOR_DIV_EXPR:
    case FLOOR_MOD_EXPR:
      if (quo_neg && (*lrem != 0 || *hrem != 0))
 {
   add_double (*lquo, *hquo, (long) -1, (long) -1,
        lquo, hquo);
 }
      else
 return overflow;
      break;
    case CEIL_DIV_EXPR:
    case CEIL_MOD_EXPR:
      if (!quo_neg && (*lrem != 0 || *hrem != 0))
 {
   add_double (*lquo, *hquo, (long) 1, (long) 0,
        lquo, hquo);
 }
      else
 return overflow;
      break;
    case ROUND_DIV_EXPR:
    case ROUND_MOD_EXPR:
      {
 unsigned long labs_rem = *lrem;
 long habs_rem = *hrem;
 unsigned long labs_den = lden, ltwice;
 long habs_den = hden, htwice;
 if (*hrem < 0)
   neg_double (*lrem, *hrem, &labs_rem, &habs_rem);
 if (hden < 0)
   neg_double (lden, hden, &labs_den, &habs_den);
 mul_double ((long) 2, (long) 0,
      labs_rem, habs_rem, &ltwice, &htwice);
 if (((unsigned long) habs_den
      < (unsigned long) htwice)
     || (((unsigned long) habs_den
   == (unsigned long) htwice)
  && (labs_den < ltwice)))
   {
     if (*hquo < 0)
       add_double (*lquo, *hquo,
     (long) -1, (long) -1, lquo, hquo);
     else
       add_double (*lquo, *hquo, (long) 1, (long) 0,
     lquo, hquo);
   }
 else
   return overflow;
      }
      break;
    default:
      abort ();
    }
  mul_double (*lquo, *hquo, lden_orig, hden_orig, lrem, hrem);
  neg_double (*lrem, *hrem, lrem, hrem);
  add_double (lnum_orig, hnum_orig, *lrem, *hrem, lrem, hrem);
  return overflow;
}
static unsigned char
negate_mathfn_p (enum built_in_function code)
{
  switch (code)
    {
    case BUILT_IN_ASIN:
    case BUILT_IN_ASINF:
    case BUILT_IN_ASINL:
    case BUILT_IN_ATAN:
    case BUILT_IN_ATANF:
    case BUILT_IN_ATANL:
    case BUILT_IN_SIN:
    case BUILT_IN_SINF:
    case BUILT_IN_SINL:
    case BUILT_IN_TAN:
    case BUILT_IN_TANF:
    case BUILT_IN_TANL:
      return 1;
    default:
      break;
    }
  return 0;
}
static unsigned char
negate_expr_p (tree t)
{
  unsigned long val;
  unsigned int prec;
  tree type;
  if (t == 0)
    return 0;
  type = ((t)->common.type);
  while ((((enum tree_code) (t)->common.code) == NOP_EXPR || ((enum tree_code) (t)->common.code) == CONVERT_EXPR || ((enum tree_code) (t)->common.code) == NON_LVALUE_EXPR) && ((t)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((t)->common.type))->type.mode) == ((((((t)->exp.operands[0]))->common.type))->type.mode)) && (((((t)->common.type))->common.unsigned_flag) == ((((((t)->exp.operands[0]))->common.type))->common.unsigned_flag))) (t) = ((t)->exp.operands[0]);
  switch (((enum tree_code) (t)->common.code))
    {
    case INTEGER_CST:
      if (((type)->common.unsigned_flag) || ! flag_trapv)
 return 1;
      prec = ((type)->type.precision);
      if (prec > (8 * 4))
 {
   if ((((t)->int_cst.int_cst).low) != 0)
     return 1;
   prec -= (8 * 4);
   val = (((t)->int_cst.int_cst).high);
 }
      else
 val = (((t)->int_cst.int_cst).low);
      if (prec < (8 * 4))
 val &= ((unsigned long) 1 << prec) - 1;
      return val != ((unsigned long) 1 << (prec - 1));
    case REAL_CST:
    case NEGATE_EXPR:
      return 1;
    case COMPLEX_CST:
      return negate_expr_p (((t)->complex.real))
      && negate_expr_p (((t)->complex.imag));
    case PLUS_EXPR:
      if (((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)) && !flag_unsafe_math_optimizations)
 return 0;
      if (negate_expr_p (((t)->exp.operands[1]))
   && reorder_operands_p (((t)->exp.operands[0]),
     ((t)->exp.operands[1])))
 return 1;
      return negate_expr_p (((t)->exp.operands[0]));
    case MINUS_EXPR:
      return (! ((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)) || flag_unsafe_math_optimizations)
      && reorder_operands_p (((t)->exp.operands[0]),
        ((t)->exp.operands[1]));
    case MULT_EXPR:
      if (((((t)->common.type))->common.unsigned_flag))
        break;
    case RDIV_EXPR:
      if (! (((mode_class[((((t)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((t)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((t)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && flag_rounding_math))
 return negate_expr_p (((t)->exp.operands[1]))
        || negate_expr_p (((t)->exp.operands[0]));
      break;
    case NOP_EXPR:
      if (((enum tree_code) (type)->common.code) == REAL_TYPE)
 {
   tree tem = strip_float_extensions (t);
   if (tem != t)
     return negate_expr_p (tem);
 }
      break;
    case CALL_EXPR:
      if (negate_mathfn_p (builtin_mathfn_code (t)))
 return negate_expr_p (((((t)->exp.operands[1]))->list.value1));
      break;
    case RSHIFT_EXPR:
      if (((enum tree_code) (((t)->exp.operands[1]))->common.code) == INTEGER_CST)
 {
   tree op1 = ((t)->exp.operands[1]);
   if ((((op1)->int_cst.int_cst).high) == 0
       && (unsigned long) (((type)->type.precision) - 1)
   == (((op1)->int_cst.int_cst).low))
     return 1;
 }
      break;
    default:
      break;
    }
  return 0;
}
static tree
negate_expr (tree t)
{
  tree type;
  tree tem;
  if (t == 0)
    return 0;
  type = ((t)->common.type);
  while ((((enum tree_code) (t)->common.code) == NOP_EXPR || ((enum tree_code) (t)->common.code) == CONVERT_EXPR || ((enum tree_code) (t)->common.code) == NON_LVALUE_EXPR) && ((t)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((t)->common.type))->type.mode) == ((((((t)->exp.operands[0]))->common.type))->type.mode)) && (((((t)->common.type))->common.unsigned_flag) == ((((((t)->exp.operands[0]))->common.type))->common.unsigned_flag))) (t) = ((t)->exp.operands[0]);
  switch (((enum tree_code) (t)->common.code))
    {
    case INTEGER_CST:
      tem = fold_negate_const (t, type);
      if (! ((tem)->common.public_flag)
   || ((type)->common.unsigned_flag)
   || ! flag_trapv)
 return tem;
      break;
    case REAL_CST:
      tem = fold_negate_const (t, type);
      if (! ((tem)->common.public_flag) || ! flag_trapping_math)
 return fold_convert (type, tem);
      break;
    case COMPLEX_CST:
      {
 tree rpart = negate_expr (((t)->complex.real));
 tree ipart = negate_expr (((t)->complex.imag));
 if ((((enum tree_code) (rpart)->common.code) == REAL_CST
      && ((enum tree_code) (ipart)->common.code) == REAL_CST)
     || (((enum tree_code) (rpart)->common.code) == INTEGER_CST
  && ((enum tree_code) (ipart)->common.code) == INTEGER_CST))
   return build_complex (type, rpart, ipart);
      }
      break;
    case NEGATE_EXPR:
      return fold_convert (type, ((t)->exp.operands[0]));
    case PLUS_EXPR:
      if (! ((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)) || flag_unsafe_math_optimizations)
 {
   if (negate_expr_p (((t)->exp.operands[1]))
       && reorder_operands_p (((t)->exp.operands[0]),
         ((t)->exp.operands[1])))
     {
       tem = negate_expr (((t)->exp.operands[1]));
       tem = fold (build2_stat (MINUS_EXPR,((t)->common.type),tem,((t)->exp.operands[0]) )
                               );
       return fold_convert (type, tem);
     }
   if (negate_expr_p (((t)->exp.operands[0])))
     {
       tem = negate_expr (((t)->exp.operands[0]));
       tem = fold (build2_stat (MINUS_EXPR,((t)->common.type),tem,((t)->exp.operands[1]) )
                               );
       return fold_convert (type, tem);
     }
 }
      break;
    case MINUS_EXPR:
      if ((! ((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)) || flag_unsafe_math_optimizations)
   && reorder_operands_p (((t)->exp.operands[0]), ((t)->exp.operands[1])))
 return fold_convert (type,
        fold (build2_stat (MINUS_EXPR,((t)->common.type),((t)->exp.operands[1]),((t)->exp.operands[0]) )
                            ));
      break;
    case MULT_EXPR:
      if (((((t)->common.type))->common.unsigned_flag))
        break;
    case RDIV_EXPR:
      if (! (((mode_class[((((t)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((t)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((t)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && flag_rounding_math))
 {
   tem = ((t)->exp.operands[1]);
   if (negate_expr_p (tem))
     return fold_convert (type,
     fold (build2_stat (((enum tree_code) (t)->common.code),((t)->common.type),((t)->exp.operands[0]),negate_expr (tem) )
                              ));
   tem = ((t)->exp.operands[0]);
   if (negate_expr_p (tem))
     return fold_convert (type,
     fold (build2_stat (((enum tree_code) (t)->common.code),((t)->common.type),negate_expr (tem),((t)->exp.operands[1]) )
                                ));
 }
      break;
    case NOP_EXPR:
      if (((enum tree_code) (type)->common.code) == REAL_TYPE)
 {
   tem = strip_float_extensions (t);
   if (tem != t && negate_expr_p (tem))
     return fold_convert (type, negate_expr (tem));
 }
      break;
    case CALL_EXPR:
      if (negate_mathfn_p (builtin_mathfn_code (t))
   && negate_expr_p (((((t)->exp.operands[1]))->list.value1)))
 {
   tree fndecl, arg, arglist;
   fndecl = get_callee_fndecl (t);
   arg = negate_expr (((((t)->exp.operands[1]))->list.value1));
   arglist = build_tree_list_stat((tree) ((void *)0),arg );
   return build_function_call_expr (fndecl, arglist);
 }
      break;
    case RSHIFT_EXPR:
      if (((enum tree_code) (((t)->exp.operands[1]))->common.code) == INTEGER_CST)
 {
   tree op1 = ((t)->exp.operands[1]);
   if ((((op1)->int_cst.int_cst).high) == 0
       && (unsigned long) (((type)->type.precision) - 1)
   == (((op1)->int_cst.int_cst).low))
     {
       tree ntype = ((type)->common.unsigned_flag)
      ? lang_hooks.types.signed_type (type)
      : lang_hooks.types.unsigned_type (type);
       tree temp = fold_convert (ntype, ((t)->exp.operands[0]));
       temp = fold (build2_stat (RSHIFT_EXPR,ntype,temp,op1 ));
       return fold_convert (type, temp);
     }
 }
      break;
    default:
      break;
    }
  tem = fold (build1_stat (NEGATE_EXPR,((t)->common.type),t ));
  return fold_convert (type, tem);
}
static tree
split_tree (tree in, enum tree_code code, tree *conp, tree *litp,
     tree *minus_litp, int negate_p)
{
  tree var = 0;
  *conp = 0;
  *litp = 0;
  *minus_litp = 0;
  while ((((enum tree_code) (in)->common.code) == NOP_EXPR || ((enum tree_code) (in)->common.code) == CONVERT_EXPR || ((enum tree_code) (in)->common.code) == NON_LVALUE_EXPR) && ((in)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((in)->common.type))->type.mode) == ((((((in)->exp.operands[0]))->common.type))->type.mode)) && (((((in)->common.type))->common.unsigned_flag) == ((((((in)->exp.operands[0]))->common.type))->common.unsigned_flag))) (in) = ((in)->exp.operands[0]);
  if (((enum tree_code) (in)->common.code) == INTEGER_CST || ((enum tree_code) (in)->common.code) == REAL_CST)
    *litp = in;
  else if (((enum tree_code) (in)->common.code) == code
    || (! ((((enum tree_code) (((in)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((in)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((in)->common.type))->common.type))->common.code) == REAL_TYPE))
        && ((code == PLUS_EXPR && ((enum tree_code) (in)->common.code) == MINUS_EXPR)
     || (code == MINUS_EXPR && ((enum tree_code) (in)->common.code) == PLUS_EXPR))))
    {
      tree op0 = ((in)->exp.operands[0]);
      tree op1 = ((in)->exp.operands[1]);
      int neg1_p = ((enum tree_code) (in)->common.code) == MINUS_EXPR;
      int neg_litp_p = 0, neg_conp_p = 0, neg_var_p = 0;
      if (((enum tree_code) (op0)->common.code) == INTEGER_CST || ((enum tree_code) (op0)->common.code) == REAL_CST)
 *litp = op0, op0 = 0;
      else if (((enum tree_code) (op1)->common.code) == INTEGER_CST || ((enum tree_code) (op1)->common.code) == REAL_CST)
 *litp = op1, neg_litp_p = neg1_p, op1 = 0;
      if (op0 != 0 && ((op0)->common.constant_flag))
 *conp = op0, op0 = 0;
      else if (op1 != 0 && ((op1)->common.constant_flag))
 *conp = op1, neg_conp_p = neg1_p, op1 = 0;
      if (op0 != 0 && op1 != 0)
 var = in;
      else if (op0 != 0)
 var = op0;
      else
 var = op1, neg_var_p = neg1_p;
      if (neg_litp_p)
 *minus_litp = *litp, *litp = 0;
      if (neg_conp_p)
 *conp = negate_expr (*conp);
      if (neg_var_p)
 var = negate_expr (var);
    }
  else if (((in)->common.constant_flag))
    *conp = in;
  else
    var = in;
  if (negate_p)
    {
      if (*litp)
 *minus_litp = *litp, *litp = 0;
      else if (*minus_litp)
 *litp = *minus_litp, *minus_litp = 0;
      *conp = negate_expr (*conp);
      var = negate_expr (var);
    }
  return var;
}
static tree
associate_trees (tree t1, tree t2, enum tree_code code, tree type)
{
  if (t1 == 0)
    return t2;
  else if (t2 == 0)
    return t1;
  if (((enum tree_code) (t1)->common.code) == code || ((enum tree_code) (t2)->common.code) == code
      || ((enum tree_code) (t1)->common.code) == MINUS_EXPR || ((enum tree_code) (t2)->common.code) == MINUS_EXPR)
    {
      if (code == PLUS_EXPR)
 {
   if (((enum tree_code) (t1)->common.code) == NEGATE_EXPR)
     return build2_stat (MINUS_EXPR,type,fold_convert (type, t2),fold_convert (type, ((t1)->exp.operands[0])) )
                                                ;
   else if (((enum tree_code) (t2)->common.code) == NEGATE_EXPR)
     return build2_stat (MINUS_EXPR,type,fold_convert (type, t1),fold_convert (type, ((t2)->exp.operands[0])) )
                                                ;
 }
      return build2_stat (code,type,fold_convert (type, t1),fold_convert (type, t2) )
                               ;
    }
  return fold (build2_stat (code,type,fold_convert (type, t1),fold_convert (type, t2) )
                                 );
}
tree
int_const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc)
{
  unsigned long int1l, int2l;
  long int1h, int2h;
  unsigned long low;
  long hi;
  unsigned long garbagel;
  long garbageh;
  tree t;
  tree type = ((arg1)->common.type);
  int uns = ((type)->common.unsigned_flag);
  int is_sizetype
    = (((enum tree_code) (type)->common.code) == INTEGER_TYPE && ((type)->type.no_force_blk_flag));
  int overflow = 0;
  int no_overflow = 0;
  int1l = (((arg1)->int_cst.int_cst).low);
  int1h = (((arg1)->int_cst.int_cst).high);
  int2l = (((arg2)->int_cst.int_cst).low);
  int2h = (((arg2)->int_cst.int_cst).high);
  switch (code)
    {
    case BIT_IOR_EXPR:
      low = int1l | int2l, hi = int1h | int2h;
      break;
    case BIT_XOR_EXPR:
      low = int1l ^ int2l, hi = int1h ^ int2h;
      break;
    case BIT_AND_EXPR:
      low = int1l & int2l, hi = int1h & int2h;
      break;
    case RSHIFT_EXPR:
      int2l = -int2l;
    case LSHIFT_EXPR:
      lshift_double (int1l, int1h, int2l, ((type)->type.precision),
       &low, &hi, !uns);
      no_overflow = 1;
      break;
    case RROTATE_EXPR:
      int2l = - int2l;
    case LROTATE_EXPR:
      lrotate_double (int1l, int1h, int2l, ((type)->type.precision),
        &low, &hi);
      break;
    case PLUS_EXPR:
      overflow = add_double (int1l, int1h, int2l, int2h, &low, &hi);
      break;
    case MINUS_EXPR:
      neg_double (int2l, int2h, &low, &hi);
      add_double (int1l, int1h, low, hi, &low, &hi);
      overflow = ((~((hi) ^ (int2h)) & ((hi) ^ (int1h))) < 0);
      break;
    case MULT_EXPR:
      overflow = mul_double (int1l, int1h, int2l, int2h, &low, &hi);
      break;
    case TRUNC_DIV_EXPR:
    case FLOOR_DIV_EXPR: case CEIL_DIV_EXPR:
    case EXACT_DIV_EXPR:
      if (int2h == 0 && (long) int2l > 0
   && ! ((arg1)->common.static_flag)
   && ! ((arg2)->common.static_flag)
   && int1h == 0 && (long) int1l >= 0)
 {
   if (code == CEIL_DIV_EXPR)
     int1l += int2l - 1;
   low = int1l / int2l, hi = 0;
   break;
 }
    case ROUND_DIV_EXPR:
      if (int2h == 0 && int2l == 1)
 {
   low = int1l, hi = int1h;
   break;
 }
      if (int1l == int2l && int1h == int2h
   && ! (int1l == 0 && int1h == 0))
 {
   low = 1, hi = 0;
   break;
 }
      overflow = div_and_round_double (code, uns, int1l, int1h, int2l, int2h,
           &low, &hi, &garbagel, &garbageh);
      break;
    case TRUNC_MOD_EXPR:
    case FLOOR_MOD_EXPR: case CEIL_MOD_EXPR:
      if (int2h == 0 && (long) int2l > 0
   && ! ((arg1)->common.static_flag)
   && ! ((arg2)->common.static_flag)
   && int1h == 0 && (long) int1l >= 0)
 {
   if (code == CEIL_MOD_EXPR)
     int1l += int2l - 1;
   low = int1l % int2l, hi = 0;
   break;
 }
    case ROUND_MOD_EXPR:
      overflow = div_and_round_double (code, uns,
           int1l, int1h, int2l, int2h,
           &garbagel, &garbageh, &low, &hi);
      break;
    case MIN_EXPR:
    case MAX_EXPR:
      if (uns)
 low = (((unsigned long) int1h
  < (unsigned long) int2h)
        || (((unsigned long) int1h
      == (unsigned long) int2h)
     && int1l < int2l));
      else
 low = (int1h < int2h
        || (int1h == int2h && int1l < int2l));
      if (low == (code == MIN_EXPR))
 low = int1l, hi = int1h;
      else
 low = int2l, hi = int2h;
      break;
    default:
      abort ();
    }
  if (is_sizetype
      && ((hi == 0 && (long) low >= 0)
   || (hi == -1 && (long) low < 0))
      && overflow == 0 && ! ((arg1)->common.public_flag) && ! ((arg2)->common.public_flag))
    return size_int_type_wide (low, type);
  else
    {
      t = build_int_2_wide ((unsigned long) (low), (long) (hi));
      ((t)->common.type) = ((arg1)->common.type);
    }
  ((t)->common.public_flag)
    = ((notrunc
 ? (!uns || is_sizetype) && overflow
 : (force_fit_type (t, (!uns || is_sizetype) && overflow)
    && ! no_overflow))
       | ((arg1)->common.public_flag)
       | ((arg2)->common.public_flag));
  if (is_sizetype
      && ! ((t)->common.public_flag)
      && ((((t)->int_cst.int_cst).high) != hi
   || (((t)->int_cst.int_cst).low) != low))
    ((t)->common.public_flag) = 1;
  ((t)->common.static_flag) = (((t)->common.public_flag)
    | ((arg1)->common.static_flag)
    | ((arg2)->common.static_flag));
  return t;
}
static tree
const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc)
{
  while ((((enum tree_code) (arg1)->common.code) == NOP_EXPR || ((enum tree_code) (arg1)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg1)->common.code) == NON_LVALUE_EXPR) && ((arg1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg1)->common.type))->type.mode) == ((((((arg1)->exp.operands[0]))->common.type))->type.mode))) (arg1) = ((arg1)->exp.operands[0]);
  while ((((enum tree_code) (arg2)->common.code) == NOP_EXPR || ((enum tree_code) (arg2)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg2)->common.code) == NON_LVALUE_EXPR) && ((arg2)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg2)->common.type))->type.mode) == ((((((arg2)->exp.operands[0]))->common.type))->type.mode))) (arg2) = ((arg2)->exp.operands[0]);
  if (((enum tree_code) (arg1)->common.code) == INTEGER_CST)
    return int_const_binop (code, arg1, arg2, notrunc);
  if (((enum tree_code) (arg1)->common.code) == REAL_CST)
    {
      enum machine_mode mode;
      struct real_value d1;
      struct real_value d2;
      struct real_value value;
      tree t, type;
      d1 = (*((arg1)->real_cst.real_cst_ptr));
      d2 = (*((arg2)->real_cst.real_cst_ptr));
      type = ((arg1)->common.type);
      mode = ((type)->type.mode);
      if ((flag_signaling_nans && (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
   && (real_isnan (&(d1)) || real_isnan (&(d2))))
 return (tree) ((void *)0);
      if (code == RDIV_EXPR
   && real_compare (EQ_EXPR, &(d2), &(dconst0))
   && (flag_trapping_math || ! ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0)))
 return (tree) ((void *)0);
      if (real_isnan (&(d1)))
 return arg1;
      else if (real_isnan (&(d2)))
 return arg2;
      real_arithmetic (&(value1), code, &(d1), &(d2));
      t = build_real (type, real_value_truncate (mode, value1));
      ((t)->common.public_flag)
 = (force_fit_type (t, 0)
    | ((arg1)->common.public_flag) | ((arg2)->common.public_flag));
      ((t)->common.static_flag)
 = ((t)->common.public_flag)
   | ((arg1)->common.static_flag)
   | ((arg2)->common.static_flag);
      return t;
    }
  if (((enum tree_code) (arg1)->common.code) == COMPLEX_CST)
    {
      tree type = ((arg1)->common.type);
      tree r1 = ((arg1)->complex.real);
      tree i1 = ((arg1)->complex.imag);
      tree r2 = ((arg2)->complex.real);
      tree i2 = ((arg2)->complex.imag);
      tree t;
      switch (code)
 {
 case PLUS_EXPR:
   t = build_complex (type,
        const_binop (PLUS_EXPR, r1, r2, notrunc),
        const_binop (PLUS_EXPR, i1, i2, notrunc));
   break;
 case MINUS_EXPR:
   t = build_complex (type,
        const_binop (MINUS_EXPR, r1, r2, notrunc),
        const_binop (MINUS_EXPR, i1, i2, notrunc));
   break;
 case MULT_EXPR:
   t = build_complex (type,
        const_binop (MINUS_EXPR,
       const_binop (MULT_EXPR,
             r1, r2, notrunc),
       const_binop (MULT_EXPR,
             i1, i2, notrunc),
       notrunc),
        const_binop (PLUS_EXPR,
       const_binop (MULT_EXPR,
             r1, i2, notrunc),
       const_binop (MULT_EXPR,
             i1, r2, notrunc),
       notrunc));
   break;
 case RDIV_EXPR:
   {
     tree magsquared
       = const_binop (PLUS_EXPR,
        const_binop (MULT_EXPR, r2, r2, notrunc),
        const_binop (MULT_EXPR, i2, i2, notrunc),
        notrunc);
     t = build_complex (type,
          const_binop
          ((((enum tree_code) (((r1)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((r1)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((r1)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((r1)->common.type))->common.code) == CHAR_TYPE)
    ? TRUNC_DIV_EXPR : RDIV_EXPR,
    const_binop (PLUS_EXPR,
          const_binop (MULT_EXPR, r1, r2,
         notrunc),
          const_binop (MULT_EXPR, i1, i2,
         notrunc),
          notrunc),
    magsquared, notrunc),
          const_binop
          ((((enum tree_code) (((r1)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((r1)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((r1)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((r1)->common.type))->common.code) == CHAR_TYPE)
    ? TRUNC_DIV_EXPR : RDIV_EXPR,
    const_binop (MINUS_EXPR,
          const_binop (MULT_EXPR, i1, r2,
         notrunc),
          const_binop (MULT_EXPR, r1, i2,
         notrunc),
          notrunc),
    magsquared, notrunc));
   }
   break;
 default:
   abort ();
 }
      return t;
    }
  return 0;
}
static hashval_t
size_htab_hash (const void *x)
{
  tree t = (tree) x;
  return ((((t)->int_cst.int_cst).high) ^ (((t)->int_cst.int_cst).low)
   ^ htab_hash_pointer (((t)->common.type))
   ^ (((t)->common.public_flag) << 20));
}
static int
size_htab_eq (const void *x, const void *y)
{
  tree xt = (tree) x;
  tree yt = (tree) y;
  return ((((xt)->int_cst.int_cst).high) == (((yt)->int_cst.int_cst).high)
   && (((xt)->int_cst.int_cst).low) == (((yt)->int_cst.int_cst).low)
   && ((xt)->common.type) == ((yt)->common.type)
   && ((xt)->common.public_flag) == ((yt)->common.public_flag));
}
tree
size_int_wide (long number, enum size_type_kind kind)
{
  return size_int_type_wide (number, sizetype_tab[(int) kind]);
}
static tree new_const;
static
     htab_t size_htab;
tree
size_int_type_wide (long number, tree type)
{
  void **slot;
  if (size_htab == 0)
    {
      size_htab = htab_create_alloc (1024, size_htab_hash, size_htab_eq, ((void *)0), ggc_calloc, ((void *)0));
      new_const = make_node_stat (INTEGER_CST );
    }
  (((new_const)->int_cst.int_cst).low) = number;
  (((new_const)->int_cst.int_cst).high) = number < 0 ? -1 : 0;
  ((new_const)->common.type) = type;
  ((new_const)->common.public_flag) = ((new_const)->common.static_flag)
    = force_fit_type (new_const, 0);
  slot = htab_find_slot (size_htab, new_const, INSERT);
  if (*slot == 0)
    {
      tree t = new_const;
      *slot = new_const;
      new_const = make_node_stat (INTEGER_CST );
      return t;
    }
  else
    return (tree) *slot;
}
tree
size_binop (enum tree_code code, tree arg0, tree arg1)
{
  tree type = ((arg0)->common.type);
  if (((enum tree_code) (type)->common.code) != INTEGER_TYPE || ! ((type)->type.no_force_blk_flag)
      || type != ((arg1)->common.type))
    abort ();
  if (((enum tree_code) (arg0)->common.code) == INTEGER_CST && ((enum tree_code) (arg1)->common.code) == INTEGER_CST)
    {
      if (code == PLUS_EXPR && integer_zerop (arg0))
 return arg1;
      else if ((code == MINUS_EXPR || code == PLUS_EXPR)
        && integer_zerop (arg1))
 return arg0;
      else if (code == MULT_EXPR && integer_onep (arg0))
 return arg1;
      return int_const_binop (code, arg0, arg1, 0);
    }
  if (arg0 == global_trees[TI_ERROR_MARK] || arg1 == global_trees[TI_ERROR_MARK])
    return global_trees[TI_ERROR_MARK];
  return fold (build2_stat (code,type,arg0,arg1 ));
}
tree
size_diffop (tree arg0, tree arg1)
{
  tree type = ((arg0)->common.type);
  tree ctype;
  if (((enum tree_code) (type)->common.code) != INTEGER_TYPE || ! ((type)->type.no_force_blk_flag)
      || type != ((arg1)->common.type))
    abort ();
  if (!((type)->common.unsigned_flag))
    return size_binop (MINUS_EXPR, arg0, arg1);
  ctype = (type == sizetype_tab[(int) BITSIZETYPE] || type == sizetype_tab[(int) UBITSIZETYPE]
    ? sizetype_tab[(int) SBITSIZETYPE] : sizetype_tab[(int) SSIZETYPE]);
  if (((enum tree_code) (arg0)->common.code) != INTEGER_CST || ((enum tree_code) (arg1)->common.code) != INTEGER_CST)
    return size_binop (MINUS_EXPR, fold_convert (ctype, arg0),
         fold_convert (ctype, arg1));
  if (tree_int_cst_equal (arg0, arg1))
    return fold_convert (ctype, global_trees[TI_INTEGER_ZERO]);
  else if (tree_int_cst_lt (arg1, arg0))
    return fold_convert (ctype, size_binop (MINUS_EXPR, arg0, arg1));
  else
    return size_binop (MINUS_EXPR, fold_convert (ctype, global_trees[TI_INTEGER_ZERO]),
         fold_convert (ctype, size_binop (MINUS_EXPR,
       arg1, arg0)));
}
static tree
fold_convert_const (enum tree_code code, tree type, tree arg1)
{
  int overflow = 0;
  tree t;
  if (((arg1)->common.type) == type)
    return arg1;
  if ((((enum tree_code) (type)->common.code) == POINTER_TYPE || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE) || (((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE))
    {
      if (((enum tree_code) (arg1)->common.code) == INTEGER_CST)
 {
   if (((type)->type.precision) > 2 * (8 * 4))
     return (tree) ((void *)0);
   if (((enum tree_code) (type)->common.code) == INTEGER_TYPE && ((type)->type.no_force_blk_flag)
       && !((arg1)->common.static_flag)
       && compare_tree_int (arg1, 10000) < 0)
     return size_int_type_wide ((((arg1)->int_cst.int_cst).low), type);
   t = build_int_2_wide ((unsigned long) ((((arg1)->int_cst.int_cst).low)), (long) ((((arg1)->int_cst.int_cst).high)))
                               ;
   ((t)->common.type) = type;
   ((t)->common.public_flag)
     = ((force_fit_type (t,
    ((((arg1)->int_cst.int_cst).high) < 0
     && (((type)->common.unsigned_flag)
        < ((((arg1)->common.type))->common.unsigned_flag))))
  && ! (((enum tree_code) (((arg1)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((arg1)->common.type))->common.code) == REFERENCE_TYPE))
        || ((arg1)->common.public_flag));
   ((t)->common.static_flag)
     = ((t)->common.public_flag) | ((arg1)->common.static_flag);
   return t;
 }
      else if (((enum tree_code) (arg1)->common.code) == REAL_CST)
 {
   long high, low;
   struct real_value r;
   struct real_value x = (*((arg1)->real_cst.real_cst_ptr));
   switch (code)
     {
     case FIX_TRUNC_EXPR:
       real_trunc (&r, VOIDmode, &x);
       break;
     case FIX_CEIL_EXPR:
       real_ceil (&r, VOIDmode, &x);
       break;
     case FIX_FLOOR_EXPR:
       real_floor (&r, VOIDmode, &x);
       break;
     case FIX_ROUND_EXPR:
       real_round (&r, VOIDmode, &x);
       break;
     default:
       abort ();
     }
   if (real_isnan (&(r)))
     {
       overflow = 1;
       high = 0;
       low = 0;
     }
   if (! overflow)
     {
       tree lt = ((type)->type.minval);
       struct real_value l = real_value_from_int_cst ((tree) ((void *)0), lt);
       if (real_compare (LT_EXPR, &(r), &(l)))
  {
    overflow = 1;
    high = (((lt)->int_cst.int_cst).high);
    low = (((lt)->int_cst.int_cst).low);
  }
     }
   if (! overflow)
     {
       tree ut = ((type)->type.maxval);
       if (ut)
  {
    struct real_value u = real_value_from_int_cst ((tree) ((void *)0), ut);
    if (real_compare (LT_EXPR, &(u), &(r)))
      {
        overflow = 1;
        high = (((ut)->int_cst.int_cst).high);
        low = (((ut)->int_cst.int_cst).low);
      }
  }
     }
   if (! overflow)
     real_to_integer2 (&low, &high, &(r));
   t = build_int_2_wide ((unsigned long) (low), (long) (high));
   ((t)->common.type) = type;
   ((t)->common.public_flag)
     = ((arg1)->common.public_flag) | force_fit_type (t, overflow);
   ((t)->common.static_flag)
     = ((t)->common.public_flag) | ((arg1)->common.static_flag);
   return t;
 }
    }
  else if (((enum tree_code) (type)->common.code) == REAL_TYPE)
    {
      if (((enum tree_code) (arg1)->common.code) == INTEGER_CST)
 return build_real_from_int_cst (type, arg1);
      if (((enum tree_code) (arg1)->common.code) == REAL_CST)
 {
   if (real_isnan (&((*((arg1)->real_cst.real_cst_ptr)))))
     {
       t = copy_node_stat (arg1 );
       ((t)->common.type) = type;
       return t;
     }
   t = build_real (type,
     real_value_truncate (((type)->type.mode),
            (*((arg1)->real_cst.real_cst_ptr))));
   ((t)->common.public_flag)
     = ((arg1)->common.public_flag) | force_fit_type (t, 0);
   ((t)->common.static_flag)
     = ((t)->common.public_flag) | ((arg1)->common.static_flag);
   return t;
 }
    }
  return (tree) ((void *)0);
}
tree
fold_convert (tree type, tree arg)
{
  tree orig = ((arg)->common.type);
  tree tem;
  if (type == orig)
    return arg;
  if (((enum tree_code) (arg)->common.code) == ERROR_MARK
      || ((enum tree_code) (type)->common.code) == ERROR_MARK
      || ((enum tree_code) (orig)->common.code) == ERROR_MARK)
    return global_trees[TI_ERROR_MARK];
  if (((type)->type.main_variant) == ((orig)->type.main_variant)
      || lang_hooks.types_compatible_p (((type)->type.main_variant),
     ((orig)->type.main_variant)))
    return fold (build1_stat (NOP_EXPR,type,arg ));
  if ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE) || (((enum tree_code) (type)->common.code) == POINTER_TYPE || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE)
      || ((enum tree_code) (type)->common.code) == OFFSET_TYPE)
    {
      if (((enum tree_code) (arg)->common.code) == INTEGER_CST)
 {
   tem = fold_convert_const (NOP_EXPR, type, arg);
   if (tem != (tree) ((void *)0))
     return tem;
 }
      if ((((enum tree_code) (orig)->common.code) == INTEGER_TYPE || ((enum tree_code) (orig)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (orig)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (orig)->common.code) == CHAR_TYPE) || (((enum tree_code) (orig)->common.code) == POINTER_TYPE || ((enum tree_code) (orig)->common.code) == REFERENCE_TYPE)
   || ((enum tree_code) (orig)->common.code) == OFFSET_TYPE)
        return fold (build1_stat (NOP_EXPR,type,arg ));
      if (((enum tree_code) (orig)->common.code) == COMPLEX_TYPE)
 {
   tem = fold (build1_stat (REALPART_EXPR,((orig)->common.type),arg ));
   return fold_convert (type, tem);
 }
      if (((enum tree_code) (orig)->common.code) == VECTOR_TYPE
   && ((unsigned short) mode_size[((type)->type.mode)])
      == ((unsigned short) mode_size[((orig)->type.mode)]))
 return fold (build1_stat (NOP_EXPR,type,arg ));
    }
  else if (((enum tree_code) (type)->common.code) == REAL_TYPE)
    {
      if (((enum tree_code) (arg)->common.code) == INTEGER_CST)
 {
   tem = fold_convert_const (FLOAT_EXPR, type, arg);
   if (tem != (tree) ((void *)0))
     return tem;
 }
      else if (((enum tree_code) (arg)->common.code) == REAL_CST)
 {
   tem = fold_convert_const (NOP_EXPR, type, arg);
   if (tem != (tree) ((void *)0))
     return tem;
 }
      if ((((enum tree_code) (orig)->common.code) == INTEGER_TYPE || ((enum tree_code) (orig)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (orig)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (orig)->common.code) == CHAR_TYPE) || (((enum tree_code) (orig)->common.code) == POINTER_TYPE || ((enum tree_code) (orig)->common.code) == REFERENCE_TYPE))
        return fold (build1_stat (FLOAT_EXPR,type,arg ));
      if (((enum tree_code) (orig)->common.code) == REAL_TYPE)
 return fold (build1_stat (flag_float_store ? CONVERT_EXPR : NOP_EXPR,type,arg )
                  );
      if (((enum tree_code) (orig)->common.code) == COMPLEX_TYPE)
 {
   tem = fold (build1_stat (REALPART_EXPR,((orig)->common.type),arg ));
   return fold_convert (type, tem);
 }
    }
  else if (((enum tree_code) (type)->common.code) == COMPLEX_TYPE)
    {
      if ((((enum tree_code) (orig)->common.code) == INTEGER_TYPE || ((enum tree_code) (orig)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (orig)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (orig)->common.code) == CHAR_TYPE)
   || (((enum tree_code) (orig)->common.code) == POINTER_TYPE || ((enum tree_code) (orig)->common.code) == REFERENCE_TYPE)
   || ((enum tree_code) (orig)->common.code) == REAL_TYPE)
 return build2_stat (COMPLEX_EXPR,type,fold_convert (((type)->common.type), arg),fold_convert (((type)->common.type), global_trees[TI_INTEGER_ZERO]) )
                                                            ;
      if (((enum tree_code) (orig)->common.code) == COMPLEX_TYPE)
 {
   tree rpart, ipart;
   if (((enum tree_code) (arg)->common.code) == COMPLEX_EXPR)
     {
       rpart = fold_convert (((type)->common.type), ((arg)->exp.operands[0]));
       ipart = fold_convert (((type)->common.type), ((arg)->exp.operands[1]));
       return fold (build2_stat (COMPLEX_EXPR,type,rpart,ipart ));
     }
   arg = save_expr (arg);
   rpart = fold (build1_stat (REALPART_EXPR,((orig)->common.type),arg ));
   ipart = fold (build1_stat (IMAGPART_EXPR,((orig)->common.type),arg ));
   rpart = fold_convert (((type)->common.type), rpart);
   ipart = fold_convert (((type)->common.type), ipart);
   return fold (build2_stat (COMPLEX_EXPR,type,rpart,ipart ));
 }
    }
  else if (((enum tree_code) (type)->common.code) == VECTOR_TYPE)
    {
      if (((((enum tree_code) (orig)->common.code) == INTEGER_TYPE || ((enum tree_code) (orig)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (orig)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (orig)->common.code) == CHAR_TYPE) || (((enum tree_code) (orig)->common.code) == POINTER_TYPE || ((enum tree_code) (orig)->common.code) == REFERENCE_TYPE))
   && ((unsigned short) mode_size[((type)->type.mode)])
      == ((unsigned short) mode_size[((orig)->type.mode)]))
 return fold (build1_stat (NOP_EXPR,type,arg ));
      if (((enum tree_code) (orig)->common.code) == VECTOR_TYPE
   && ((unsigned short) mode_size[((type)->type.mode)])
      == ((unsigned short) mode_size[((orig)->type.mode)]))
 return fold (build1_stat (NOP_EXPR,type,arg ));
    }
  else if ((((enum tree_code) (type)->common.code) == VOID_TYPE))
    return fold (build1_stat (CONVERT_EXPR,type,arg ));
  abort ();
}
tree
non_lvalue (tree x)
{
  switch (((enum tree_code) (x)->common.code))
  {
  case VAR_DECL:
  case PARM_DECL:
  case RESULT_DECL:
  case LABEL_DECL:
  case FUNCTION_DECL:
  case SSA_NAME:
  case COMPONENT_REF:
  case INDIRECT_REF:
  case ARRAY_REF:
  case ARRAY_RANGE_REF:
  case BIT_FIELD_REF:
  case BUFFER_REF:
  case OBJ_TYPE_REF:
  case REALPART_EXPR:
  case IMAGPART_EXPR:
  case PREINCREMENT_EXPR:
  case PREDECREMENT_EXPR:
  case SAVE_EXPR:
  case UNSAVE_EXPR:
  case TRY_CATCH_EXPR:
  case WITH_CLEANUP_EXPR:
  case COMPOUND_EXPR:
  case MODIFY_EXPR:
  case TARGET_EXPR:
  case COND_EXPR:
  case BIND_EXPR:
  case MIN_EXPR:
  case MAX_EXPR:
    break;
  default:
    if ((int)((enum tree_code) (x)->common.code) >= ((int) LAST_AND_UNUSED_TREE_CODE))
      break;
    return x;
  }
  return build1_stat (NON_LVALUE_EXPR,((x)->common.type),x );
}
int pedantic_lvalues;
tree
pedantic_non_lvalue (tree x)
{
  if (pedantic_lvalues)
    return non_lvalue (x);
  else
    return x;
}
static enum tree_code
invert_tree_comparison (enum tree_code code, unsigned char honor_nans)
{
  if (honor_nans && flag_trapping_math)
    return ERROR_MARK;
  switch (code)
    {
    case EQ_EXPR:
      return NE_EXPR;
    case NE_EXPR:
      return EQ_EXPR;
    case GT_EXPR:
      return honor_nans ? UNLE_EXPR : LE_EXPR;
    case GE_EXPR:
      return honor_nans ? UNLT_EXPR : LT_EXPR;
    case LT_EXPR:
      return honor_nans ? UNGE_EXPR : GE_EXPR;
    case LE_EXPR:
      return honor_nans ? UNGT_EXPR : GT_EXPR;
    case LTGT_EXPR:
      return UNEQ_EXPR;
    case UNEQ_EXPR:
      return LTGT_EXPR;
    case UNGT_EXPR:
      return LE_EXPR;
    case UNGE_EXPR:
      return LT_EXPR;
    case UNLT_EXPR:
      return GE_EXPR;
    case UNLE_EXPR:
      return GT_EXPR;
    case ORDERED_EXPR:
      return UNORDERED_EXPR;
    case UNORDERED_EXPR:
      return ORDERED_EXPR;
    default:
      abort ();
    }
}
enum tree_code
swap_tree_comparison (enum tree_code code)
{
  switch (code)
    {
    case EQ_EXPR:
    case NE_EXPR:
      return code;
    case GT_EXPR:
      return LT_EXPR;
    case GE_EXPR:
      return LE_EXPR;
    case LT_EXPR:
      return GT_EXPR;
    case LE_EXPR:
      return GE_EXPR;
    default:
      abort ();
    }
}
static enum comparison_code
comparison_to_compcode (enum tree_code code)
{
  switch (code)
    {
    case LT_EXPR:
      return COMPCODE_LT;
    case EQ_EXPR:
      return COMPCODE_EQ;
    case LE_EXPR:
      return COMPCODE_LE;
    case GT_EXPR:
      return COMPCODE_GT;
    case NE_EXPR:
      return COMPCODE_NE;
    case GE_EXPR:
      return COMPCODE_GE;
    case ORDERED_EXPR:
      return COMPCODE_ORD;
    case UNORDERED_EXPR:
      return COMPCODE_UNORD;
    case UNLT_EXPR:
      return COMPCODE_UNLT;
    case UNEQ_EXPR:
      return COMPCODE_UNEQ;
    case UNLE_EXPR:
      return COMPCODE_UNLE;
    case UNGT_EXPR:
      return COMPCODE_UNGT;
    case LTGT_EXPR:
      return COMPCODE_LTGT;
    case UNGE_EXPR:
      return COMPCODE_UNGE;
    default:
      abort ();
    }
}
static enum tree_code
compcode_to_comparison (enum comparison_code code)
{
  switch (code)
    {
    case COMPCODE_LT:
      return LT_EXPR;
    case COMPCODE_EQ:
      return EQ_EXPR;
    case COMPCODE_LE:
      return LE_EXPR;
    case COMPCODE_GT:
      return GT_EXPR;
    case COMPCODE_NE:
      return NE_EXPR;
    case COMPCODE_GE:
      return GE_EXPR;
    case COMPCODE_ORD:
      return ORDERED_EXPR;
    case COMPCODE_UNORD:
      return UNORDERED_EXPR;
    case COMPCODE_UNLT:
      return UNLT_EXPR;
    case COMPCODE_UNEQ:
      return UNEQ_EXPR;
    case COMPCODE_UNLE:
      return UNLE_EXPR;
    case COMPCODE_UNGT:
      return UNGT_EXPR;
    case COMPCODE_LTGT:
      return LTGT_EXPR;
    case COMPCODE_UNGE:
      return UNGE_EXPR;
    default:
      abort ();
    }
}
tree
combine_comparisons (enum tree_code code, enum tree_code lcode,
       enum tree_code rcode, tree truth_type,
       tree ll_arg, tree lr_arg)
{
  unsigned char honor_nans = (((mode_class[((((ll_arg)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((ll_arg)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((ll_arg)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only);
  enum comparison_code lcompcode = comparison_to_compcode (lcode);
  enum comparison_code rcompcode = comparison_to_compcode (rcode);
  enum comparison_code compcode;
  switch (code)
    {
    case TRUTH_AND_EXPR: case TRUTH_ANDIF_EXPR:
      compcode = lcompcode & rcompcode;
      break;
    case TRUTH_OR_EXPR: case TRUTH_ORIF_EXPR:
      compcode = lcompcode | rcompcode;
      break;
    default:
      return (tree) ((void *)0);
    }
  if (!honor_nans)
    {
      compcode &= ~COMPCODE_UNORD;
      if (compcode == COMPCODE_LTGT)
 compcode = COMPCODE_NE;
      else if (compcode == COMPCODE_ORD)
 compcode = COMPCODE_TRUE;
    }
   else if (flag_trapping_math)
     {
 unsigned char ltrap = (lcompcode & COMPCODE_UNORD) == 0
       && (lcompcode != COMPCODE_EQ)
       && (lcompcode != COMPCODE_ORD);
 unsigned char rtrap = (rcompcode & COMPCODE_UNORD) == 0
       && (rcompcode != COMPCODE_EQ)
       && (rcompcode != COMPCODE_ORD);
 unsigned char trap = (compcode & COMPCODE_UNORD) == 0
      && (compcode != COMPCODE_EQ)
      && (compcode != COMPCODE_ORD);
        if ((code == TRUTH_ORIF_EXPR && (lcompcode & COMPCODE_UNORD))
            || (code == TRUTH_ANDIF_EXPR && !(lcompcode & COMPCODE_UNORD)))
          rtrap = 0;
 if (rtrap && !ltrap
     && (code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR))
   return (tree) ((void *)0);
 if ((ltrap || rtrap) != trap)
   return (tree) ((void *)0);
      }
  if (compcode == COMPCODE_TRUE)
    return constant_boolean_node (1, truth_type);
  else if (compcode == COMPCODE_FALSE)
    return constant_boolean_node (0, truth_type);
  else
    return fold (build2_stat (compcode_to_comparison (compcode),truth_type,ll_arg,lr_arg )
                               );
}
static int
truth_value_p (enum tree_code code)
{
  return (tree_code_type[(int) (code)] == '<'
   || code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
   || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
   || code == TRUTH_XOR_EXPR || code == TRUTH_NOT_EXPR);
}
int
operand_equal_p (tree arg0, tree arg1, unsigned int flags)
{
  if (((enum tree_code) (arg0)->common.code) == ERROR_MARK || ((enum tree_code) (arg1)->common.code) == ERROR_MARK)
    return 0;
  if (((((arg0)->common.type))->common.unsigned_flag) != ((((arg1)->common.type))->common.unsigned_flag))
    return 0;
  while ((((enum tree_code) (arg0)->common.code) == NOP_EXPR || ((enum tree_code) (arg0)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg0)->common.code) == NON_LVALUE_EXPR) && ((arg0)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg0)->common.type))->type.mode) == ((((((arg0)->exp.operands[0]))->common.type))->type.mode))) (arg0) = ((arg0)->exp.operands[0]);
  while ((((enum tree_code) (arg1)->common.code) == NOP_EXPR || ((enum tree_code) (arg1)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg1)->common.code) == NON_LVALUE_EXPR) && ((arg1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg1)->common.type))->type.mode) == ((((((arg1)->exp.operands[0]))->common.type))->type.mode))) (arg1) = ((arg1)->exp.operands[0]);
  if (((enum tree_code) (arg0)->common.code) != ((enum tree_code) (arg1)->common.code)
      || ((enum tree_code) (((arg0)->common.type))->common.code) == ERROR_MARK
      || ((enum tree_code) (((arg1)->common.type))->common.code) == ERROR_MARK
      || ((((arg0)->common.type))->type.mode) != ((((arg1)->common.type))->type.mode))
    return 0;
  if (arg0 == arg1 && ! (flags & OEP_ONLY_CONST)
      && (((enum tree_code) (arg0)->common.code) == SAVE_EXPR
   || (! ((arg0)->common.side_effects_flag) && ! ((arg1)->common.side_effects_flag))))
    return 1;
  if (((arg0)->common.constant_flag) && ((arg1)->common.constant_flag))
    switch (((enum tree_code) (arg0)->common.code))
      {
      case INTEGER_CST:
 return (! ((arg0)->common.static_flag)
  && ! ((arg1)->common.static_flag)
  && tree_int_cst_equal (arg0, arg1));
      case REAL_CST:
 return (! ((arg0)->common.static_flag)
  && ! ((arg1)->common.static_flag)
  && real_identical (&((*((arg0)->real_cst.real_cst_ptr))), &((*((arg1)->real_cst.real_cst_ptr))))
                            );
      case VECTOR_CST:
 {
   tree v1, v2;
   if (((arg0)->common.static_flag)
       || ((arg1)->common.static_flag))
     return 0;
   v1 = ((arg0)->vector.elements);
   v2 = ((arg1)->vector.elements);
   while (v1 && v2)
     {
       if (!operand_equal_p (((v1)->list.value1), ((v2)->list.value1),
        flags))
  return 0;
       v1 = ((v1)->common.chain);
       v2 = ((v2)->common.chain);
     }
   return 1;
 }
      case COMPLEX_CST:
 return (operand_equal_p (((arg0)->complex.real), ((arg1)->complex.real),
     flags)
  && operand_equal_p (((arg0)->complex.imag), ((arg1)->complex.imag),
        flags));
      case STRING_CST:
 return (((arg0)->string1.length) == ((arg1)->string1.length)
  && ! memcmp (((arg0)->string1.pointer),
         ((arg1)->string1.pointer),
         ((arg0)->string1.length)));
      case ADDR_EXPR:
 return operand_equal_p (((arg0)->exp.operands[0]), ((arg1)->exp.operands[0]),
    0);
      default:
 break;
      }
  if (flags & OEP_ONLY_CONST)
    return 0;
  switch (tree_code_type[(int) (((enum tree_code) (arg0)->common.code))])
    {
    case '1':
      if ((((enum tree_code) (arg0)->common.code) == NOP_EXPR || ((enum tree_code) (arg0)->common.code) == CONVERT_EXPR)
   && (((((arg0)->common.type))->common.unsigned_flag)
       != ((((arg1)->common.type))->common.unsigned_flag)))
 return 0;
      return operand_equal_p (((arg0)->exp.operands[0]),
         ((arg1)->exp.operands[0]), flags);
    case '<':
    case '2':
      if (operand_equal_p (((arg0)->exp.operands[0]),
      ((arg1)->exp.operands[0]), flags)
   && operand_equal_p (((arg0)->exp.operands[1]),
         ((arg1)->exp.operands[1]), flags))
 return 1;
      return (commutative_tree_code (((enum tree_code) (arg0)->common.code))
       && operand_equal_p (((arg0)->exp.operands[0]),
      ((arg1)->exp.operands[1]), flags)
       && operand_equal_p (((arg0)->exp.operands[1]),
      ((arg1)->exp.operands[0]), flags));
    case 'r':
      if (((arg0)->common.side_effects_flag)
   || ((arg1)->common.side_effects_flag))
 return 0;
      switch (((enum tree_code) (arg0)->common.code))
 {
 case INDIRECT_REF:
 case REALPART_EXPR:
 case IMAGPART_EXPR:
   return operand_equal_p (((arg0)->exp.operands[0]),
      ((arg1)->exp.operands[0]), flags);
 case COMPONENT_REF:
 case ARRAY_REF:
 case ARRAY_RANGE_REF:
   return (operand_equal_p (((arg0)->exp.operands[0]),
       ((arg1)->exp.operands[0]), flags)
    && operand_equal_p (((arg0)->exp.operands[1]),
          ((arg1)->exp.operands[1]), flags));
 case BIT_FIELD_REF:
   return (operand_equal_p (((arg0)->exp.operands[0]),
       ((arg1)->exp.operands[0]), flags)
    && operand_equal_p (((arg0)->exp.operands[1]),
          ((arg1)->exp.operands[1]), flags)
    && operand_equal_p (((arg0)->exp.operands[2]),
          ((arg1)->exp.operands[2]), flags));
 default:
   return 0;
 }
    case 'e':
      switch (((enum tree_code) (arg0)->common.code))
 {
 case ADDR_EXPR:
 case TRUTH_NOT_EXPR:
   return operand_equal_p (((arg0)->exp.operands[0]),
      ((arg1)->exp.operands[0]), flags);
 case TRUTH_ANDIF_EXPR:
 case TRUTH_ORIF_EXPR:
   return operand_equal_p (((arg0)->exp.operands[0]),
      ((arg1)->exp.operands[0]), flags)
   && operand_equal_p (((arg0)->exp.operands[1]),
         ((arg1)->exp.operands[1]), flags);
 case TRUTH_AND_EXPR:
 case TRUTH_OR_EXPR:
 case TRUTH_XOR_EXPR:
   return (operand_equal_p (((arg0)->exp.operands[0]),
       ((arg1)->exp.operands[0]), flags)
    && operand_equal_p (((arg0)->exp.operands[1]),
          ((arg1)->exp.operands[1]), flags))
   || (operand_equal_p (((arg0)->exp.operands[0]),
          ((arg1)->exp.operands[1]), flags)
       && operand_equal_p (((arg0)->exp.operands[1]),
      ((arg1)->exp.operands[0]), flags));
 case CALL_EXPR:
   if (! operand_equal_p (((arg0)->exp.operands[0]),
     ((arg1)->exp.operands[0]), flags))
     return 0;
   {
     unsigned int cef = call_expr_flags (arg0);
     if (flags & OEP_PURE_SAME)
       cef &= 1 | 256;
     else
       cef &= 1;
     if (!cef)
       return 0;
   }
   arg0 = ((arg0)->exp.operands[1]);
   arg1 = ((arg1)->exp.operands[1]);
   while (arg0 && arg1)
     {
       if (! operand_equal_p (((arg0)->list.value1), ((arg1)->list.value1),
         flags))
  return 0;
       arg0 = ((arg0)->common.chain);
       arg1 = ((arg1)->common.chain);
     }
   return ! (arg0 || arg1);
 default:
   return 0;
 }
    case 'd':
      return (((enum tree_code) (arg0)->common.code) == FUNCTION_DECL
       && (((arg0)->decl.built_in_class) != NOT_BUILT_IN) && (((arg1)->decl.built_in_class) != NOT_BUILT_IN)
       && ((arg0)->decl.built_in_class) == ((arg1)->decl.built_in_class)
       && ((arg0)->decl.u1.f) == ((arg1)->decl.u1.f));
    default:
      return 0;
    }
}
static int
operand_equal_for_comparison_p (tree arg0, tree arg1, tree other)
{
  int unsignedp1, unsignedpo;
  tree primarg0, primarg1, primother;
  unsigned int correct_width;
  if (operand_equal_p (arg0, arg1, 0))
    return 1;
  if (! (((enum tree_code) (((arg0)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((arg0)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((arg0)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((arg0)->common.type))->common.code) == CHAR_TYPE)
      || ! (((enum tree_code) (((arg1)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((arg1)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((arg1)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((arg1)->common.type))->common.code) == CHAR_TYPE))
    return 0;
  primarg0 = arg0, primarg1 = arg1;
  while ((((enum tree_code) (primarg0)->common.code) == NOP_EXPR || ((enum tree_code) (primarg0)->common.code) == CONVERT_EXPR || ((enum tree_code) (primarg0)->common.code) == NON_LVALUE_EXPR) && ((primarg0)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((primarg0)->common.type))->type.mode) == ((((((primarg0)->exp.operands[0]))->common.type))->type.mode))) (primarg0) = ((primarg0)->exp.operands[0]);
  while ((((enum tree_code) (primarg1)->common.code) == NOP_EXPR || ((enum tree_code) (primarg1)->common.code) == CONVERT_EXPR || ((enum tree_code) (primarg1)->common.code) == NON_LVALUE_EXPR) && ((primarg1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((primarg1)->common.type))->type.mode) == ((((((primarg1)->exp.operands[0]))->common.type))->type.mode))) (primarg1) = ((primarg1)->exp.operands[0]);
  if (operand_equal_p (primarg0, primarg1, 0))
    return 1;
  primarg1 = get_narrower (arg1, &unsignedp1);
  primother = get_narrower (other, &unsignedpo);
  correct_width = ((((arg1)->common.type))->type.precision);
  if (unsignedp1 == unsignedpo
      && ((((primarg1)->common.type))->type.precision) < correct_width
      && ((((primother)->common.type))->type.precision) < correct_width)
    {
      tree type = ((arg0)->common.type);
      primarg1 = fold_convert (lang_hooks.types.signed_or_unsigned_type
          (unsignedp1, ((primarg1)->common.type)), primarg1);
      if (operand_equal_p (arg0, fold_convert (type, primarg1), 0))
 return 1;
    }
  return 0;
}
static int
twoval_comparison_p (tree arg, tree *cval1, tree *cval2, int *save_p)
{
  enum tree_code code = ((enum tree_code) (arg)->common.code);
  char class = tree_code_type[(int) (code)];
  if (class == 'e' && code == TRUTH_NOT_EXPR)
    class = '1';
  else if (class == 'e'
    && (code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR
        || code == COMPOUND_EXPR))
    class = '2';
  else if (class == 'e' && code == SAVE_EXPR
    && ! ((((arg)->exp.operands[0]))->common.side_effects_flag))
    {
      if (*cval1 || *cval2)
 return 0;
      class = '1';
      *save_p = 1;
    }
  switch (class)
    {
    case '1':
      return twoval_comparison_p (((arg)->exp.operands[0]), cval1, cval2, save_p);
    case '2':
      return (twoval_comparison_p (((arg)->exp.operands[0]), cval1, cval2, save_p)
       && twoval_comparison_p (((arg)->exp.operands[1]),
          cval1, cval2, save_p));
    case 'c':
      return 1;
    case 'e':
      if (code == COND_EXPR)
 return (twoval_comparison_p (((arg)->exp.operands[0]),
         cval1, cval2, save_p)
  && twoval_comparison_p (((arg)->exp.operands[1]),
     cval1, cval2, save_p)
  && twoval_comparison_p (((arg)->exp.operands[2]),
     cval1, cval2, save_p));
      return 0;
    case '<':
      if (operand_equal_p (((arg)->exp.operands[0]),
      ((arg)->exp.operands[1]), 0))
 return 0;
      if (*cval1 == 0)
 *cval1 = ((arg)->exp.operands[0]);
      else if (operand_equal_p (*cval1, ((arg)->exp.operands[0]), 0))
 ;
      else if (*cval2 == 0)
 *cval2 = ((arg)->exp.operands[0]);
      else if (operand_equal_p (*cval2, ((arg)->exp.operands[0]), 0))
 ;
      else
 return 0;
      if (operand_equal_p (*cval1, ((arg)->exp.operands[1]), 0))
 ;
      else if (*cval2 == 0)
 *cval2 = ((arg)->exp.operands[1]);
      else if (operand_equal_p (*cval2, ((arg)->exp.operands[1]), 0))
 ;
      else
 return 0;
      return 1;
    default:
      return 0;
    }
}
static tree
eval_subst (tree arg, tree old0, tree new0, tree old1, tree new1)
{
  tree type = ((arg)->common.type);
  enum tree_code code = ((enum tree_code) (arg)->common.code);
  char class = tree_code_type[(int) (code)];
  if (class == 'e' && code == TRUTH_NOT_EXPR)
    class = '1';
  else if (class == 'e'
    && (code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR))
    class = '2';
  switch (class)
    {
    case '1':
      return fold (build1_stat (code,type,eval_subst (((arg)->exp.operands[0]), old0, new0, old1, new1) )
                                   );
    case '2':
      return fold (build2_stat (code,type,eval_subst (((arg)->exp.operands[0]), old0, new0, old1, new1),eval_subst (((arg)->exp.operands[1]), old0, new0, old1, new1) )
                                   );
    case 'e':
      switch (code)
 {
 case SAVE_EXPR:
   return eval_subst (((arg)->exp.operands[0]), old0, new0, old1, new1);
 case COMPOUND_EXPR:
   return eval_subst (((arg)->exp.operands[1]), old0, new0, old1, new1);
 case COND_EXPR:
   return fold (build3_stat (code,type,eval_subst (((arg)->exp.operands[0]), old0, new0, old1, new1),eval_subst (((arg)->exp.operands[1]), old0, new0, old1, new1),eval_subst (((arg)->exp.operands[2]), old0, new0, old1, new1) )
                                );
 default:
   break;
 }
    case '<':
      {
 tree arg0 = ((arg)->exp.operands[0]);
 tree arg1 = ((arg)->exp.operands[1]);
 if (arg0 == old0 || operand_equal_p (arg0, old0, 0))
   arg0 = new0;
 else if (arg0 == old1 || operand_equal_p (arg0, old1, 0))
   arg0 = new1;
 if (arg1 == old0 || operand_equal_p (arg1, old0, 0))
   arg1 = new0;
 else if (arg1 == old1 || operand_equal_p (arg1, old1, 0))
   arg1 = new1;
 return fold (build2_stat (code,type,arg0,arg1 ));
      }
    default:
      return arg;
    }
}
tree
omit_one_operand (tree type, tree result, tree omitted)
{
  tree t = fold_convert (type, result);
  if (((omitted)->common.side_effects_flag))
    return build2_stat (COMPOUND_EXPR,type,omitted,t );
  return non_lvalue (t);
}
static tree
pedantic_omit_one_operand (tree type, tree result, tree omitted)
{
  tree t = fold_convert (type, result);
  if (((omitted)->common.side_effects_flag))
    return build2_stat (COMPOUND_EXPR,type,omitted,t );
  return pedantic_non_lvalue (t);
}
tree
omit_two_operands (tree type, tree result, tree omitted1, tree omitted2)
{
  tree t = fold_convert (type, result);
  if (((omitted2)->common.side_effects_flag))
    t = build2_stat (COMPOUND_EXPR,type,omitted2,t );
  if (((omitted1)->common.side_effects_flag))
    t = build2_stat (COMPOUND_EXPR,type,omitted1,t );
  return ((enum tree_code) (t)->common.code) != COMPOUND_EXPR ? non_lvalue (t) : t;
}
tree
invert_truthvalue (tree arg)
{
  tree type = ((arg)->common.type);
  enum tree_code code = ((enum tree_code) (arg)->common.code);
  if (code == ERROR_MARK)
    return arg;
  if (tree_code_type[(int) (code)] == '<')
    {
      tree op_type = ((((arg)->exp.operands[0]))->common.type);
      if (((((enum tree_code) (op_type)->common.code) == REAL_TYPE) || (((enum tree_code) (op_type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((op_type)->common.type))->common.code) == REAL_TYPE))
   && flag_trapping_math
   && code != ORDERED_EXPR && code != UNORDERED_EXPR
   && code != NE_EXPR && code != EQ_EXPR)
 return build1_stat (TRUTH_NOT_EXPR,type,arg );
      else
 {
   code = invert_tree_comparison (code,
      (((mode_class[((op_type)->type.mode)] == MODE_FLOAT || mode_class[((op_type)->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((op_type)->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only));
   if (code == ERROR_MARK)
     return build1_stat (TRUTH_NOT_EXPR,type,arg );
   else
     return build2_stat (code,type,((arg)->exp.operands[0]),((arg)->exp.operands[1]) )
                                                   ;
 }
    }
  switch (code)
    {
    case INTEGER_CST:
      return fold_convert (type, build_int_2_wide ((unsigned long) (integer_zerop (arg)), (long) (0)));
    case TRUTH_AND_EXPR:
      return build2_stat (TRUTH_OR_EXPR,type,invert_truthvalue (((arg)->exp.operands[0])),invert_truthvalue (((arg)->exp.operands[1])) )
                                                 ;
    case TRUTH_OR_EXPR:
      return build2_stat (TRUTH_AND_EXPR,type,invert_truthvalue (((arg)->exp.operands[0])),invert_truthvalue (((arg)->exp.operands[1])) )
                                                 ;
    case TRUTH_XOR_EXPR:
      if (((enum tree_code) (((arg)->exp.operands[1]))->common.code) == TRUTH_NOT_EXPR)
 return build2_stat (TRUTH_XOR_EXPR,type,((arg)->exp.operands[0]),((((arg)->exp.operands[1]))->exp.operands[0]) )
                                                 ;
      else
 return build2_stat (TRUTH_XOR_EXPR,type,invert_truthvalue (((arg)->exp.operands[0])),((arg)->exp.operands[1]) )
                               ;
    case TRUTH_ANDIF_EXPR:
      return build2_stat (TRUTH_ORIF_EXPR,type,invert_truthvalue (((arg)->exp.operands[0])),invert_truthvalue (((arg)->exp.operands[1])) )
                                                 ;
    case TRUTH_ORIF_EXPR:
      return build2_stat (TRUTH_ANDIF_EXPR,type,invert_truthvalue (((arg)->exp.operands[0])),invert_truthvalue (((arg)->exp.operands[1])) )
                                                 ;
    case TRUTH_NOT_EXPR:
      return ((arg)->exp.operands[0]);
    case COND_EXPR:
      return build3_stat (COND_EXPR,type,((arg)->exp.operands[0]),invert_truthvalue (((arg)->exp.operands[1])),invert_truthvalue (((arg)->exp.operands[2])) )
                                                 ;
    case COMPOUND_EXPR:
      return build2_stat (COMPOUND_EXPR,type,((arg)->exp.operands[0]),invert_truthvalue (((arg)->exp.operands[1])) )
                                                 ;
    case NON_LVALUE_EXPR:
      return invert_truthvalue (((arg)->exp.operands[0]));
    case NOP_EXPR:
      if (((enum tree_code) (((arg)->common.type))->common.code) == BOOLEAN_TYPE)
        break;
    case CONVERT_EXPR:
    case FLOAT_EXPR:
      return build1_stat (((enum tree_code) (arg)->common.code),type,invert_truthvalue (((arg)->exp.operands[0])) )
                                                 ;
    case BIT_AND_EXPR:
      if (!integer_onep (((arg)->exp.operands[1])))
 break;
      return build2_stat (EQ_EXPR,type,arg,fold_convert (type, global_trees[TI_INTEGER_ZERO]) )
                                              ;
    case SAVE_EXPR:
      return build1_stat (TRUTH_NOT_EXPR,type,arg );
    case CLEANUP_POINT_EXPR:
      return build1_stat (CLEANUP_POINT_EXPR,type,invert_truthvalue (((arg)->exp.operands[0])) )
                                                 ;
    default:
      break;
    }
  if (((enum tree_code) (((arg)->common.type))->common.code) != BOOLEAN_TYPE)
    abort ();
  return build1_stat (TRUTH_NOT_EXPR,type,arg );
}
static tree
distribute_bit_expr (enum tree_code code, tree type, tree arg0, tree arg1)
{
  tree common;
  tree left, right;
  if (((enum tree_code) (arg0)->common.code) != ((enum tree_code) (arg1)->common.code)
      || ((enum tree_code) (arg0)->common.code) == code
      || (((enum tree_code) (arg0)->common.code) != BIT_AND_EXPR
   && ((enum tree_code) (arg0)->common.code) != BIT_IOR_EXPR))
    return 0;
  if (operand_equal_p (((arg0)->exp.operands[0]), ((arg1)->exp.operands[0]), 0))
    {
      common = ((arg0)->exp.operands[0]);
      left = ((arg0)->exp.operands[1]);
      right = ((arg1)->exp.operands[1]);
    }
  else if (operand_equal_p (((arg0)->exp.operands[0]), ((arg1)->exp.operands[1]), 0))
    {
      common = ((arg0)->exp.operands[0]);
      left = ((arg0)->exp.operands[1]);
      right = ((arg1)->exp.operands[0]);
    }
  else if (operand_equal_p (((arg0)->exp.operands[1]), ((arg1)->exp.operands[0]), 0))
    {
      common = ((arg0)->exp.operands[1]);
      left = ((arg0)->exp.operands[0]);
      right = ((arg1)->exp.operands[1]);
    }
  else if (operand_equal_p (((arg0)->exp.operands[1]), ((arg1)->exp.operands[1]), 0))
    {
      common = ((arg0)->exp.operands[1]);
      left = ((arg0)->exp.operands[0]);
      right = ((arg1)->exp.operands[0]);
    }
  else
    return 0;
  return fold (build2_stat (((enum tree_code) (arg0)->common.code),type,common,fold (build2_stat (code,type,left,right )) )
                                                 );
}
static tree
make_bit_field_ref (tree inner, tree type, int bitsize, int bitpos,
      int unsignedp)
{
  tree result = build3_stat (BIT_FIELD_REF,type,inner,size_int_wide ((long) (bitsize), SIZETYPE),size_int_wide ((long) (bitpos), BITSIZETYPE) )
                                            ;
  ((result)->common.unsigned_flag) = unsignedp;
  return result;
}
static tree
optimize_bit_field_compare (enum tree_code code, tree compare_type,
       tree lhs, tree rhs)
{
  long lbitpos, lbitsize, rbitpos, rbitsize, nbitpos, nbitsize;
  tree type = ((lhs)->common.type);
  tree signed_type, unsigned_type;
  int const_p = ((enum tree_code) (rhs)->common.code) == INTEGER_CST;
  enum machine_mode lmode, rmode, nmode;
  int lunsignedp, runsignedp;
  int lvolatilep = 0, rvolatilep = 0;
  tree linner, rinner = (tree) ((void *)0);
  tree mask;
  tree offset;
  linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
    &lunsignedp, &lvolatilep);
  if (linner == lhs || lbitsize == ((unsigned short) (((unsigned short) mode_size[lmode]) * 8)) || lbitsize < 0
      || offset != 0 || ((enum tree_code) (linner)->common.code) == PLACEHOLDER_EXPR)
    return 0;
 if (!const_p)
   {
     rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset, &rmode,
       &runsignedp, &rvolatilep);
     if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize
  || lunsignedp != runsignedp || offset != 0
  || ((enum tree_code) (rinner)->common.code) == PLACEHOLDER_EXPR)
       return 0;
   }
  nmode = get_best_mode (lbitsize, lbitpos,
    const_p ? ((((linner)->common.type))->type.align)
    : ((((((linner)->common.type))->type.align)) < (((((rinner)->common.type))->type.align)) ? (((((linner)->common.type))->type.align)) : (((((rinner)->common.type))->type.align)))
                                    ,
    word_mode, lvolatilep || rvolatilep);
  if (nmode == VOIDmode)
    return 0;
  signed_type = lang_hooks.types.type_for_mode (nmode, 0);
  unsigned_type = lang_hooks.types.type_for_mode (nmode, 1);
  nbitsize = ((unsigned short) (((unsigned short) mode_size[nmode]) * 8));
  nbitpos = lbitpos & ~ (nbitsize - 1);
  lbitpos -= nbitpos;
  if (nbitsize == lbitsize)
    return 0;
  if (0)
    lbitpos = nbitsize - lbitsize - lbitpos;
  mask = build_int_2_wide ((unsigned long) (~0), (long) (~0));
  ((mask)->common.type) = unsigned_type;
  force_fit_type (mask, 0);
  mask = fold_convert (unsigned_type, mask);
  mask = const_binop (LSHIFT_EXPR, mask, size_int_wide ((long) (nbitsize - lbitsize), SIZETYPE), 0);
  mask = const_binop (RSHIFT_EXPR, mask,
        size_int_wide ((long) (nbitsize - lbitsize - lbitpos), SIZETYPE), 0);
  if (! const_p)
    return build2_stat (code,compare_type,build2_stat (BIT_AND_EXPR,unsigned_type,make_bit_field_ref (linner, unsigned_type, nbitsize, nbitpos, 1),mask ),build2_stat (BIT_AND_EXPR,unsigned_type,make_bit_field_ref (rinner, unsigned_type, nbitsize, nbitpos, 1),mask ) )
            ;
  if (lunsignedp)
    {
      if (! integer_zerop (const_binop (RSHIFT_EXPR,
     fold_convert (unsigned_type, rhs),
     size_int_wide ((long) (lbitsize), SIZETYPE), 0)))
 {
   warning ("comparison is always %d due to width of bit-field",
     code == NE_EXPR);
   return constant_boolean_node (code == NE_EXPR, compare_type);
 }
    }
  else
    {
      tree tem = const_binop (RSHIFT_EXPR, fold_convert (signed_type, rhs),
         size_int_wide ((long) (lbitsize - 1), SIZETYPE), 0);
      if (! integer_zerop (tem) && ! integer_all_onesp (tem))
 {
   warning ("comparison is always %d due to width of bit-field",
     code == NE_EXPR);
   return constant_boolean_node (code == NE_EXPR, compare_type);
 }
    }
  if (lbitsize == 1 && ! integer_zerop (rhs))
    {
      code = code == EQ_EXPR ? NE_EXPR : EQ_EXPR;
      rhs = fold_convert (type, global_trees[TI_INTEGER_ZERO]);
    }
  lhs = make_bit_field_ref (linner, unsigned_type, nbitsize, nbitpos, 1);
  if (lvolatilep)
    {
      ((lhs)->common.side_effects_flag) = 1;
      ((lhs)->common.volatile_flag) = 1;
    }
  rhs = fold (const_binop (BIT_AND_EXPR,
      const_binop (LSHIFT_EXPR,
     fold_convert (unsigned_type, rhs),
     size_int_wide ((long) (lbitpos), SIZETYPE), 0),
      mask, 0));
  return build2_stat (code,compare_type,build2_stat (BIT_AND_EXPR,unsigned_type,lhs,mask ),rhs )
       ;
}
static tree
decode_field_reference (tree exp, long *pbitsize,
   long *pbitpos, enum machine_mode *pmode,
   int *punsignedp, int *pvolatilep,
   tree *pmask, tree *pand_mask)
{
  tree outer_type = 0;
  tree and_mask = 0;
  tree mask, inner, offset;
  tree unsigned_type;
  unsigned int precision;
  if (! (((enum tree_code) (((exp)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((exp)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((exp)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((exp)->common.type))->common.code) == CHAR_TYPE))
    return 0;
  if (((enum tree_code) (exp)->common.code) == NOP_EXPR
      || ((enum tree_code) (exp)->common.code) == CONVERT_EXPR
      || ((enum tree_code) (exp)->common.code) == NON_LVALUE_EXPR)
    outer_type = ((exp)->common.type);
  while ((((enum tree_code) (exp)->common.code) == NOP_EXPR || ((enum tree_code) (exp)->common.code) == CONVERT_EXPR || ((enum tree_code) (exp)->common.code) == NON_LVALUE_EXPR) && ((exp)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((exp)->common.type))->type.mode) == ((((((exp)->exp.operands[0]))->common.type))->type.mode))) (exp) = ((exp)->exp.operands[0]);
  if (((enum tree_code) (exp)->common.code) == BIT_AND_EXPR)
    {
      and_mask = ((exp)->exp.operands[1]);
      exp = ((exp)->exp.operands[0]);
      while ((((enum tree_code) (exp)->common.code) == NOP_EXPR || ((enum tree_code) (exp)->common.code) == CONVERT_EXPR || ((enum tree_code) (exp)->common.code) == NON_LVALUE_EXPR) && ((exp)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((exp)->common.type))->type.mode) == ((((((exp)->exp.operands[0]))->common.type))->type.mode))) (exp) = ((exp)->exp.operands[0]); while ((((enum tree_code) (and_mask)->common.code) == NOP_EXPR || ((enum tree_code) (and_mask)->common.code) == CONVERT_EXPR || ((enum tree_code) (and_mask)->common.code) == NON_LVALUE_EXPR) && ((and_mask)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((and_mask)->common.type))->type.mode) == ((((((and_mask)->exp.operands[0]))->common.type))->type.mode))) (and_mask) = ((and_mask)->exp.operands[0]);
      if (((enum tree_code) (and_mask)->common.code) != INTEGER_CST)
 return 0;
    }
  inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode,
          punsignedp, pvolatilep);
  if ((inner == exp && and_mask == 0)
      || *pbitsize < 0 || offset != 0
      || ((enum tree_code) (inner)->common.code) == PLACEHOLDER_EXPR)
    return 0;
  if (outer_type && *pbitsize == tree_low_cst (((outer_type)->type.size), 1))
    *punsignedp = ((outer_type)->common.unsigned_flag);
  unsigned_type = lang_hooks.types.type_for_size (*pbitsize, 1);
  precision = ((unsigned_type)->type.precision);
  mask = build_int_2_wide ((unsigned long) (~0), (long) (~0));
  ((mask)->common.type) = unsigned_type;
  force_fit_type (mask, 0);
  mask = const_binop (LSHIFT_EXPR, mask, size_int_wide ((long) (precision - *pbitsize), SIZETYPE), 0);
  mask = const_binop (RSHIFT_EXPR, mask, size_int_wide ((long) (precision - *pbitsize), SIZETYPE), 0);
  if (and_mask != 0)
    mask = fold (build2_stat (BIT_AND_EXPR,unsigned_type,fold_convert (unsigned_type, and_mask),mask )
                                                 );
  *pmask = mask;
  *pand_mask = and_mask;
  return inner;
}
static int
all_ones_mask_p (tree mask, int size)
{
  tree type = ((mask)->common.type);
  unsigned int precision = ((type)->type.precision);
  tree tmask;
  tmask = build_int_2_wide ((unsigned long) (~0), (long) (~0));
  ((tmask)->common.type) = lang_hooks.types.signed_type (type);
  force_fit_type (tmask, 0);
  return
    tree_int_cst_equal (mask,
   const_binop (RSHIFT_EXPR,
         const_binop (LSHIFT_EXPR, tmask,
        size_int_wide ((long) (precision - size), SIZETYPE),
        0),
         size_int_wide ((long) (precision - size), SIZETYPE), 0));
}
static tree
sign_bit_p (tree exp, tree val)
{
  unsigned long mask_lo, lo;
  long mask_hi, hi;
  int width;
  tree t;
  t = ((exp)->common.type);
  if (! (((enum tree_code) (t)->common.code) == INTEGER_TYPE || ((enum tree_code) (t)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (t)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (t)->common.code) == CHAR_TYPE))
    return (tree) ((void *)0);
  if (((enum tree_code) (val)->common.code) != INTEGER_CST
      || ((val)->common.static_flag))
    return (tree) ((void *)0);
  width = ((t)->type.precision);
  if (width > (8 * 4))
    {
      hi = (unsigned long) 1 << (width - (8 * 4) - 1);
      lo = 0;
      mask_hi = ((unsigned long) -1
   >> (2 * (8 * 4) - width));
      mask_lo = -1;
    }
  else
    {
      hi = 0;
      lo = (unsigned long) 1 << (width - 1);
      mask_hi = 0;
      mask_lo = ((unsigned long) -1
   >> ((8 * 4) - width));
    }
  if (((((val)->int_cst.int_cst).high) & mask_hi) == hi
      && ((((val)->int_cst.int_cst).low) & mask_lo) == lo)
    return exp;
  if (((enum tree_code) (exp)->common.code) == NOP_EXPR
      && ((((((exp)->exp.operands[0]))->common.type))->type.precision) < width)
    return sign_bit_p (((exp)->exp.operands[0]), val);
  return (tree) ((void *)0);
}
static int
simple_operand_p (tree exp)
{
  while ((((enum tree_code) (exp)->common.code) == NOP_EXPR
   || ((enum tree_code) (exp)->common.code) == CONVERT_EXPR)
  && (((((exp)->common.type))->type.mode)
      == ((((((exp)->exp.operands[0]))->common.type))->type.mode)))
    exp = ((exp)->exp.operands[0]);
  return (tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'c'
   || ((tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'd')
       && ! ((exp)->common.addressable_flag)
       && ! ((exp)->common.volatile_flag)
       && ! ((exp)->decl.nonlocal_flag)
       && ! ((exp)->common.public_flag)
       && ! ((exp)->decl.external_flag)
       && (! ((exp)->common.static_flag) || ((exp)->decl.regdecl_flag))));
}
static tree
range_binop (enum tree_code code, tree type, tree arg0, int upper0_p,
      tree arg1, int upper1_p)
{
  tree tem;
  int result;
  int sgn0, sgn1;
  if (arg0 != 0 && arg1 != 0)
    {
      tem = fold (build2_stat (code,type != 0 ? type : ((arg0)->common.type),arg0,fold_convert (((arg0)->common.type), arg1) )
                                                 );
      while ((((enum tree_code) (tem)->common.code) == NOP_EXPR || ((enum tree_code) (tem)->common.code) == CONVERT_EXPR || ((enum tree_code) (tem)->common.code) == NON_LVALUE_EXPR) && ((tem)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((tem)->common.type))->type.mode) == ((((((tem)->exp.operands[0]))->common.type))->type.mode))) (tem) = ((tem)->exp.operands[0]);
      return ((enum tree_code) (tem)->common.code) == INTEGER_CST ? tem : 0;
    }
  if (tree_code_type[(int) (code)] != '<')
    return 0;
  sgn0 = arg0 != 0 ? 0 : (upper0_p ? 1 : -1);
  sgn1 = arg1 != 0 ? 0 : (upper1_p ? 1 : -1);
  switch (code)
    {
    case EQ_EXPR:
      result = sgn0 == sgn1;
      break;
    case NE_EXPR:
      result = sgn0 != sgn1;
      break;
    case LT_EXPR:
      result = sgn0 < sgn1;
      break;
    case LE_EXPR:
      result = sgn0 <= sgn1;
      break;
    case GT_EXPR:
      result = sgn0 > sgn1;
      break;
    case GE_EXPR:
      result = sgn0 >= sgn1;
      break;
    default:
      abort ();
    }
  return constant_boolean_node (result, type);
}
static tree
make_range (tree exp, int *pin_p, tree *plow, tree *phigh)
{
  enum tree_code code;
  tree arg0 = (tree) ((void *)0), arg1 = (tree) ((void *)0);
  tree exp_type = (tree) ((void *)0), arg0_type = (tree) ((void *)0);
  int in_p, n_in_p;
  tree low, high, n_low, n_high;
  in_p = 0;
  low = high = fold_convert (((exp)->common.type), global_trees[TI_INTEGER_ZERO]);
  while (1)
    {
      code = ((enum tree_code) (exp)->common.code);
      exp_type = ((exp)->common.type);
      if ((strchr ("<12ers", (tree_code_type[(int) (code)])) != 0))
 {
   if (first_rtl_op (code) > 0)
     arg0 = ((exp)->exp.operands[0]);
   if (tree_code_type[(int) (code)] == '<'
       || tree_code_type[(int) (code)] == '1'
       || tree_code_type[(int) (code)] == '2')
     arg0_type = ((arg0)->common.type);
   if (tree_code_type[(int) (code)] == '2'
       || tree_code_type[(int) (code)] == '<'
       || (tree_code_type[(int) (code)] == 'e'
    && tree_code_length[(int) (code)] > 1))
     arg1 = ((exp)->exp.operands[1]);
 }
      switch (code)
 {
 case TRUTH_NOT_EXPR:
   in_p = ! in_p, exp = arg0;
   continue;
 case EQ_EXPR: case NE_EXPR:
 case LT_EXPR: case LE_EXPR: case GE_EXPR: case GT_EXPR:
   if (low == 0 || high == 0
       || ! integer_zerop (low) || ! integer_zerop (high)
       || ((enum tree_code) (arg1)->common.code) != INTEGER_CST)
     break;
   switch (code)
     {
     case NE_EXPR:
       low = high = arg1;
       break;
     case EQ_EXPR:
       in_p = ! in_p, low = high = arg1;
       break;
     case GT_EXPR:
       low = 0, high = arg1;
       break;
     case GE_EXPR:
       in_p = ! in_p, low = arg1, high = 0;
       break;
     case LT_EXPR:
       low = arg1, high = 0;
       break;
     case LE_EXPR:
       in_p = ! in_p, low = 0, high = arg1;
       break;
     default:
       abort ();
     }
   if (((arg0_type)->common.unsigned_flag) && (low == 0 || high == 0))
     {
       if (! merge_ranges (&n_in_p, &n_low, &n_high, in_p, low, high,
      1, fold_convert (arg0_type, global_trees[TI_INTEGER_ZERO]),
      (tree) ((void *)0)))
  break;
       in_p = n_in_p, low = n_low, high = n_high;
       if (high == 0 && low && ! integer_zerop (low))
  {
    in_p = ! in_p;
    high = range_binop (MINUS_EXPR, (tree) ((void *)0), low, 0,
          global_trees[TI_INTEGER_ONE], 0);
    low = fold_convert (arg0_type, global_trees[TI_INTEGER_ZERO]);
  }
     }
   exp = arg0;
   continue;
 case NEGATE_EXPR:
   n_low = range_binop (MINUS_EXPR, exp_type,
          fold_convert (exp_type, global_trees[TI_INTEGER_ZERO]),
          0, high, 1);
   n_high = range_binop (MINUS_EXPR, exp_type,
    fold_convert (exp_type, global_trees[TI_INTEGER_ZERO]),
    0, low, 0);
   low = n_low, high = n_high;
   exp = arg0;
   continue;
 case BIT_NOT_EXPR:
   exp = build2_stat (MINUS_EXPR,exp_type,negate_expr (arg0),fold_convert (exp_type, global_trees[TI_INTEGER_ONE]) )
                                             ;
   continue;
 case PLUS_EXPR: case MINUS_EXPR:
   if (((enum tree_code) (arg1)->common.code) != INTEGER_CST)
     break;
   n_low = range_binop (code == MINUS_EXPR ? PLUS_EXPR : MINUS_EXPR,
          arg0_type, low, 0, arg1, 0);
   n_high = range_binop (code == MINUS_EXPR ? PLUS_EXPR : MINUS_EXPR,
    arg0_type, high, 1, arg1, 0);
   if ((n_low != 0 && ((n_low)->common.public_flag))
       || (n_high != 0 && ((n_high)->common.public_flag)))
     break;
   if (n_low && n_high && tree_int_cst_lt (n_high, n_low))
     {
       low = range_binop (PLUS_EXPR, arg0_type, n_high, 0,
     global_trees[TI_INTEGER_ONE], 0);
       high = range_binop (MINUS_EXPR, arg0_type, n_low, 0,
      global_trees[TI_INTEGER_ONE], 0);
       if (tree_int_cst_equal (n_low, low)
    && tree_int_cst_equal (n_high, high))
  low = high = 0;
       else
  in_p = ! in_p;
     }
   else
     low = n_low, high = n_high;
   exp = arg0;
   continue;
 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
   if (((arg0_type)->type.precision) > ((exp_type)->type.precision))
     break;
   if (! (((enum tree_code) (arg0_type)->common.code) == INTEGER_TYPE || ((enum tree_code) (arg0_type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (arg0_type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (arg0_type)->common.code) == CHAR_TYPE)
       || (low != 0 && ! int_fits_type_p (low, arg0_type))
       || (high != 0 && ! int_fits_type_p (high, arg0_type)))
     break;
   n_low = low, n_high = high;
   if (n_low != 0)
     n_low = fold_convert (arg0_type, n_low);
   if (n_high != 0)
     n_high = fold_convert (arg0_type, n_high);
   if (!((exp_type)->common.unsigned_flag) && ((arg0_type)->common.unsigned_flag))
     {
       tree high_positive;
       tree equiv_type = lang_hooks.types.type_for_mode
  (((arg0_type)->type.mode), 1);
       high_positive
  = ((equiv_type)->type.maxval) ? ((equiv_type)->type.maxval)
  : ((arg0_type)->type.maxval);
       if (((exp_type)->type.precision) == ((arg0_type)->type.precision))
  high_positive = fold (build2_stat (RSHIFT_EXPR,arg0_type,fold_convert (arg0_type, high_positive),fold_convert (arg0_type, global_trees[TI_INTEGER_ONE]) )
                             );
       if (low != 0)
  {
    if (! merge_ranges (&n_in_p, &n_low, &n_high,
          1, n_low, n_high, 1,
          fold_convert (arg0_type, global_trees[TI_INTEGER_ZERO]),
          high_positive))
      break;
    in_p = (n_in_p == in_p);
  }
       else
  {
    if (! merge_ranges (&n_in_p, &n_low, &n_high,
          0, n_low, n_high, 1,
          fold_convert (arg0_type, global_trees[TI_INTEGER_ZERO]),
          high_positive))
      break;
    in_p = (in_p != n_in_p);
  }
     }
   exp = arg0;
   low = n_low, high = n_high;
   continue;
 default:
   break;
 }
      break;
    }
  if (((enum tree_code) (exp)->common.code) == INTEGER_CST)
    {
      in_p = in_p == (integer_onep (range_binop (GE_EXPR, integer_types[itk_int],
       exp, 0, low, 0))
        && integer_onep (range_binop (LE_EXPR, integer_types[itk_int],
          exp, 1, high, 1)));
      low = high = 0;
      exp = 0;
    }
  *pin_p = in_p, *plow = low, *phigh = high;
  return exp;
}
static tree
build_range_check (tree type, tree exp, int in_p, tree low, tree high)
{
  tree etype = ((exp)->common.type);
  tree value1;
  if (! in_p)
    {
      value1 = build_range_check (type, exp, 1, low, high);
      if (value1 != 0)
        return invert_truthvalue (value1);
      return 0;
    }
  if (low == 0 && high == 0)
    return fold_convert (type, global_trees[TI_INTEGER_ONE]);
  if (low == 0)
    return fold (build2_stat (LE_EXPR,type,exp,high ));
  if (high == 0)
    return fold (build2_stat (GE_EXPR,type,exp,low ));
  if (operand_equal_p (low, high, 0))
    return fold (build2_stat (EQ_EXPR,type,exp,low ));
  if (integer_zerop (low))
    {
      if (! ((etype)->common.unsigned_flag))
 {
   etype = lang_hooks.types.unsigned_type (etype);
   high = fold_convert (etype, high);
   exp = fold_convert (etype, exp);
 }
      return build_range_check (type, exp, 1, 0, high);
    }
  if (integer_onep (low) && ((enum tree_code) (high)->common.code) == INTEGER_CST)
    {
      unsigned long lo;
      long hi;
      int prec;
      prec = ((etype)->type.precision);
      if (prec <= (8 * 4))
 {
   hi = 0;
   lo = ((unsigned long) 1 << (prec - 1)) - 1;
 }
      else
 {
   hi = ((long) 1 << (prec - (8 * 4) - 1)) - 1;
   lo = (unsigned long) -1;
 }
      if ((((high)->int_cst.int_cst).high) == hi && (((high)->int_cst.int_cst).low) == lo)
 {
   if (((etype)->common.unsigned_flag))
     {
       etype = lang_hooks.types.signed_type (etype);
       exp = fold_convert (etype, exp);
     }
   return fold (build2_stat (GT_EXPR,type,exp,fold_convert (etype, global_trees[TI_INTEGER_ZERO]) )
                                                  );
 }
    }
  value1 = const_binop (MINUS_EXPR, high, low, 0);
  if (value1 != 0 && ((value1)->common.public_flag) && ! ((etype)->common.unsigned_flag))
    {
      tree utype, minv, maxv;
      switch (((enum tree_code) (etype)->common.code))
 {
 case INTEGER_TYPE:
 case ENUMERAL_TYPE:
 case CHAR_TYPE:
   utype = lang_hooks.types.unsigned_type (etype);
   maxv = fold_convert (utype, ((etype)->type.maxval));
   maxv = range_binop (PLUS_EXPR, (tree) ((void *)0), maxv, 1,
         global_trees[TI_INTEGER_ONE], 1);
   minv = fold_convert (utype, ((etype)->type.minval));
   if (integer_zerop (range_binop (NE_EXPR, integer_types[itk_int],
       minv, 1, maxv, 1)))
     {
       etype = utype;
       high = fold_convert (etype, high);
       low = fold_convert (etype, low);
       exp = fold_convert (etype, exp);
       value1 = const_binop (MINUS_EXPR, high, low, 0);
     }
   break;
 default:
   break;
 }
    }
  if (value1 != 0 && ! ((value1)->common.public_flag))
    return build_range_check (type,
         fold (build2_stat (MINUS_EXPR,etype,exp,low )),
         1, fold_convert (etype, global_trees[TI_INTEGER_ZERO]),
         value1);
  return 0;
}
static int
merge_ranges (int *pin_p, tree *plow, tree *phigh, int in0_p, tree low0,
       tree high0, int in1_p, tree low1, tree high1)
{
  int no_overlap;
  int subset;
  int temp;
  tree tem;
  int in_p;
  tree low, high;
  int lowequal = ((low0 == 0 && low1 == 0)
    || integer_onep (range_binop (EQ_EXPR, integer_types[itk_int],
      low0, 0, low1, 0)));
  int highequal = ((high0 == 0 && high1 == 0)
     || integer_onep (range_binop (EQ_EXPR, integer_types[itk_int],
       high0, 1, high1, 1)));
  if (integer_onep (range_binop (GT_EXPR, integer_types[itk_int],
     low0, 0, low1, 0))
      || (lowequal
   && integer_onep (range_binop (GT_EXPR, integer_types[itk_int],
     high1, 1, high0, 1))))
    {
      temp = in0_p, in0_p = in1_p, in1_p = temp;
      tem = low0, low0 = low1, low1 = tem;
      tem = high0, high0 = high1, high1 = tem;
    }
  no_overlap = integer_onep (range_binop (LT_EXPR, integer_types[itk_int],
       high0, 1, low1, 0));
  subset = integer_onep (range_binop (LE_EXPR, integer_types[itk_int],
          high1, 1, high0, 1));
  if (in0_p && in1_p)
    {
      if (no_overlap)
 in_p = 0, low = high = 0;
      else if (subset)
 in_p = 1, low = low1, high = high1;
      else
 in_p = 1, low = low1, high = high0;
    }
  else if (in0_p && ! in1_p)
    {
      if (no_overlap)
 in_p = 1, low = low0, high = high0;
      else if (lowequal && highequal)
 in_p = 0, low = high = 0;
      else if (subset && lowequal)
 {
   in_p = 1, high = high0;
   low = range_binop (PLUS_EXPR, (tree) ((void *)0), high1, 0,
        global_trees[TI_INTEGER_ONE], 0);
 }
      else if (! subset || highequal)
 {
   in_p = 1, low = low0;
   high = range_binop (MINUS_EXPR, (tree) ((void *)0), low1, 0,
         global_trees[TI_INTEGER_ONE], 0);
 }
      else
 return 0;
    }
  else if (! in0_p && in1_p)
    {
      if (no_overlap)
 in_p = 1, low = low1, high = high1;
      else if (subset || highequal)
 in_p = 0, low = high = 0;
      else
 {
   in_p = 1, high = high1;
   low = range_binop (PLUS_EXPR, (tree) ((void *)0), high0, 1,
        global_trees[TI_INTEGER_ONE], 0);
 }
    }
  else
    {
      if (no_overlap)
 {
   if (integer_onep (range_binop (EQ_EXPR, integer_types[itk_int],
      range_binop (PLUS_EXPR, (tree) ((void *)0),
            high0, 1,
            global_trees[TI_INTEGER_ONE], 1),
      1, low1, 0)))
     in_p = 0, low = low0, high = high1;
   else
     {
       if (low0 && ((enum tree_code) (low0)->common.code) == INTEGER_CST)
  switch (((enum tree_code) (((low0)->common.type))->common.code))
    {
    case ENUMERAL_TYPE:
      if (((((low0)->common.type))->type.precision)
   != ((unsigned short) (((unsigned short) mode_size[((((low0)->common.type))->type.mode)]) * 8)))
        break;
    case INTEGER_TYPE:
    case CHAR_TYPE:
      if (tree_int_cst_equal (low0,
         ((((low0)->common.type))->type.minval)))
        low0 = 0;
      break;
    case POINTER_TYPE:
      if (((((low0)->common.type))->common.unsigned_flag)
   && integer_zerop (low0))
        low0 = 0;
      break;
    default:
      break;
    }
       if (high1 && ((enum tree_code) (high1)->common.code) == INTEGER_CST)
  switch (((enum tree_code) (((high1)->common.type))->common.code))
    {
    case ENUMERAL_TYPE:
      if (((((high1)->common.type))->type.precision)
   != ((unsigned short) (((unsigned short) mode_size[((((high1)->common.type))->type.mode)]) * 8)))
        break;
    case INTEGER_TYPE:
    case CHAR_TYPE:
      if (tree_int_cst_equal (high1,
         ((((high1)->common.type))->type.maxval)))
        high1 = 0;
      break;
    case POINTER_TYPE:
      if (((((high1)->common.type))->common.unsigned_flag)
   && integer_zerop (range_binop (PLUS_EXPR, (tree) ((void *)0),
             high1, 1,
             global_trees[TI_INTEGER_ONE], 1)))
        high1 = 0;
      break;
    default:
      break;
    }
       if (low0 == 0 && high1 == 0)
         {
    low = range_binop (PLUS_EXPR, (tree) ((void *)0), high0, 1,
         global_trees[TI_INTEGER_ONE], 1);
    high = range_binop (MINUS_EXPR, (tree) ((void *)0), low1, 0,
          global_trees[TI_INTEGER_ONE], 0);
    if (low == 0 || high == 0)
      return 0;
    in_p = 1;
  }
       else
  return 0;
     }
 }
      else if (subset)
 in_p = 0, low = low0, high = high0;
      else
 in_p = 0, low = low0, high = high1;
    }
  *pin_p = in_p, *plow = low, *phigh = high;
  return 1;
}
static tree
fold_cond_expr_with_comparison (tree type, tree arg0, tree arg1, tree arg2)
{
  enum tree_code comp_code = ((enum tree_code) (arg0)->common.code);
  tree arg00 = ((arg0)->exp.operands[0]);
  tree arg01 = ((arg0)->exp.operands[1]);
  tree arg1_type = ((arg1)->common.type);
  tree tem;
  while ((((enum tree_code) (arg1)->common.code) == NOP_EXPR || ((enum tree_code) (arg1)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg1)->common.code) == NON_LVALUE_EXPR) && ((arg1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg1)->common.type))->type.mode) == ((((((arg1)->exp.operands[0]))->common.type))->type.mode))) (arg1) = ((arg1)->exp.operands[0]);
  while ((((enum tree_code) (arg2)->common.code) == NOP_EXPR || ((enum tree_code) (arg2)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg2)->common.code) == NON_LVALUE_EXPR) && ((arg2)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg2)->common.type))->type.mode) == ((((((arg2)->exp.operands[0]))->common.type))->type.mode))) (arg2) = ((arg2)->exp.operands[0]);
  if ((((((enum tree_code) (((arg01)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((arg01)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((arg01)->common.type))->common.type))->common.code) == REAL_TYPE))
       ? real_zerop (arg01)
       : integer_zerop (arg01))
      && ((enum tree_code) (arg2)->common.code) == NEGATE_EXPR
      && operand_equal_p (((arg2)->exp.operands[0]), arg1, 0))
    switch (comp_code)
      {
      case EQ_EXPR:
 tem = fold_convert (arg1_type, arg1);
 return pedantic_non_lvalue (fold_convert (type, negate_expr (tem)));
      case NE_EXPR:
 return pedantic_non_lvalue (fold_convert (type, arg1));
      case GE_EXPR:
      case GT_EXPR:
 if (((((arg1)->common.type))->common.unsigned_flag))
   arg1 = fold_convert (lang_hooks.types.signed_type
          (((arg1)->common.type)), arg1);
 tem = fold (build1_stat (ABS_EXPR,((arg1)->common.type),arg1 ));
 return pedantic_non_lvalue (fold_convert (type, tem));
      case LE_EXPR:
      case LT_EXPR:
 if (((((arg1)->common.type))->common.unsigned_flag))
   arg1 = fold_convert (lang_hooks.types.signed_type
          (((arg1)->common.type)), arg1);
 tem = fold (build1_stat (ABS_EXPR,((arg1)->common.type),arg1 ));
 return negate_expr (fold_convert (type, tem));
      default:
 abort ();
      }
  if (integer_zerop (arg01) && integer_zerop (arg2))
    {
      if (comp_code == NE_EXPR)
 return pedantic_non_lvalue (fold_convert (type, arg1));
      else if (comp_code == EQ_EXPR)
 return pedantic_non_lvalue (fold_convert (type, global_trees[TI_INTEGER_ZERO]));
    }
  if (operand_equal_for_comparison_p (arg01, arg2, arg00))
    {
      tree comp_op0 = arg00;
      tree comp_op1 = arg01;
      tree comp_type = ((comp_op0)->common.type);
      if (((comp_type)->type.main_variant) == ((type)->type.main_variant))
 {
   comp_type = type;
   comp_op0 = arg1;
   comp_op1 = arg2;
 }
      switch (comp_code)
 {
 case EQ_EXPR:
   return pedantic_non_lvalue (fold_convert (type, arg2));
 case NE_EXPR:
   return pedantic_non_lvalue (fold_convert (type, arg1));
 case LE_EXPR:
 case LT_EXPR:
   if (!(((mode_class[((((arg1)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
     return pedantic_non_lvalue (
       fold_convert (type, fold (build2_stat (MIN_EXPR,comp_type,(comp_code == LE_EXPR ? comp_op0 : comp_op1),(comp_code == LE_EXPR ? comp_op1 : comp_op0) )
                                     )));
   break;
 case GE_EXPR:
 case GT_EXPR:
   if (!(((mode_class[((((arg1)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
     return pedantic_non_lvalue (
       fold_convert (type, fold (build2_stat (MAX_EXPR,comp_type,(comp_code == GE_EXPR ? comp_op0 : comp_op1),(comp_code == GE_EXPR ? comp_op1 : comp_op0) )
                                     )));
   break;
 default:
   abort ();
 }
    }
  if ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
      && ((enum tree_code) (arg01)->common.code) == INTEGER_CST
      && ((enum tree_code) (arg2)->common.code) == INTEGER_CST)
    switch (comp_code)
      {
      case EQ_EXPR:
 arg1 = fold_convert (type, arg01);
 return fold (build3_stat (COND_EXPR,type,arg0,arg1,arg2 ));
      case LT_EXPR:
 if (! operand_equal_p (arg2, ((type)->type.maxval),
          OEP_ONLY_CONST)
     && operand_equal_p (arg01,
    const_binop (PLUS_EXPR, arg2,
          global_trees[TI_INTEGER_ONE], 0),
    OEP_ONLY_CONST))
   return pedantic_non_lvalue (fold (build2_stat (MIN_EXPR,type,arg1,arg2 )
                           ));
 break;
      case LE_EXPR:
 if (! operand_equal_p (arg2, ((type)->type.minval),
          OEP_ONLY_CONST)
     && operand_equal_p (arg01,
    const_binop (MINUS_EXPR, arg2,
          global_trees[TI_INTEGER_ONE], 0),
    OEP_ONLY_CONST))
   return pedantic_non_lvalue (fold (build2_stat (MIN_EXPR,type,arg1,arg2 )
                           ));
 break;
      case GT_EXPR:
 if (! operand_equal_p (arg2, ((type)->type.minval),
          OEP_ONLY_CONST)
     && operand_equal_p (arg01,
    const_binop (MINUS_EXPR, arg2,
          global_trees[TI_INTEGER_ONE], 0),
    OEP_ONLY_CONST))
   return pedantic_non_lvalue (fold (build2_stat (MAX_EXPR,type,arg1,arg2 )
                           ));
 break;
      case GE_EXPR:
 if (! operand_equal_p (arg2, ((type)->type.maxval),
          OEP_ONLY_CONST)
     && operand_equal_p (arg01,
    const_binop (PLUS_EXPR, arg2,
          global_trees[TI_INTEGER_ONE], 0),
    OEP_ONLY_CONST))
   return pedantic_non_lvalue (fold (build2_stat (MAX_EXPR,type,arg1,arg2 )
                           ));
 break;
      case NE_EXPR:
 break;
      default:
 abort ();
      }
  return (tree) ((void *)0);
}
static tree
fold_range_test (tree exp)
{
  int or_op = (((enum tree_code) (exp)->common.code) == TRUTH_ORIF_EXPR
        || ((enum tree_code) (exp)->common.code) == TRUTH_OR_EXPR);
  int in0_p, in1_p, in_p;
  tree low0, low1, low, high0, high1, high;
  tree lhs = make_range (((exp)->exp.operands[0]), &in0_p, &low0, &high0);
  tree rhs = make_range (((exp)->exp.operands[1]), &in1_p, &low1, &high1);
  tree tem;
  if (or_op)
    in0_p = ! in0_p, in1_p = ! in1_p;
  if ((lhs == 0 || rhs == 0 || operand_equal_p (lhs, rhs, 0))
      && merge_ranges (&in_p, &low, &high, in0_p, low0, high0,
         in1_p, low1, high1)
      && 0 != (tem = (build_range_check (((exp)->common.type),
      lhs != 0 ? lhs
      : rhs != 0 ? rhs : global_trees[TI_INTEGER_ZERO],
      in_p, low, high))))
    return or_op ? invert_truthvalue (tem) : tem;
  else if ((ix86_branch_cost >= 2)
    && lhs != 0 && rhs != 0
    && (((enum tree_code) (exp)->common.code) == TRUTH_ANDIF_EXPR
        || ((enum tree_code) (exp)->common.code) == TRUTH_ORIF_EXPR)
    && operand_equal_p (lhs, rhs, 0))
    {
      if (simple_operand_p (lhs))
 return build2_stat (((enum tree_code) (exp)->common.code) == TRUTH_ANDIF_EXPR ? TRUTH_AND_EXPR : TRUTH_OR_EXPR,((exp)->common.type),((exp)->exp.operands[0]),((exp)->exp.operands[1]) )
                               ;
      else if (lang_hooks.decls.global_bindings_p () == 0
        && ! ((lhs) != 0 && ! ((lhs)->common.constant_flag) && contains_placeholder_p (lhs)))
 {
   tree common = save_expr (lhs);
   if (0 != (lhs = build_range_check (((exp)->common.type), common,
          or_op ? ! in0_p : in0_p,
          low0, high0))
       && (0 != (rhs = build_range_check (((exp)->common.type), common,
       or_op ? ! in1_p : in1_p,
       low1, high1))))
     return build2_stat (((enum tree_code) (exp)->common.code) == TRUTH_ANDIF_EXPR ? TRUTH_AND_EXPR : TRUTH_OR_EXPR,((exp)->common.type),lhs,rhs )
                                ;
 }
    }
  return 0;
}
static tree
unextend (tree c, int p, int unsignedp, tree mask)
{
  tree type = ((c)->common.type);
  int modesize = ((unsigned short) (((unsigned short) mode_size[((type)->type.mode)]) * 8));
  tree temp;
  if (p == modesize || unsignedp)
    return c;
  temp = const_binop (RSHIFT_EXPR, c, size_int_wide ((long) (p - 1), SIZETYPE), 0);
  temp = const_binop (BIT_AND_EXPR, temp, size_int_wide ((long) (1), SIZETYPE), 0);
  if (((type)->common.unsigned_flag))
    temp = fold_convert (lang_hooks.types.signed_type (type), temp);
  temp = const_binop (LSHIFT_EXPR, temp, size_int_wide ((long) (modesize - 1), SIZETYPE), 0);
  temp = const_binop (RSHIFT_EXPR, temp, size_int_wide ((long) (modesize - p - 1), SIZETYPE), 0);
  if (mask != 0)
    temp = const_binop (BIT_AND_EXPR, temp,
   fold_convert (((c)->common.type), mask), 0);
  if (((type)->common.unsigned_flag))
    temp = fold_convert (type, temp);
  return fold_convert (type, const_binop (BIT_XOR_EXPR, c, temp, 0));
}
static tree
fold_truthop (enum tree_code code, tree truth_type, tree lhs, tree rhs)
{
  enum tree_code wanted_code;
  enum tree_code lcode, rcode;
  tree ll_arg, lr_arg, rl_arg, rr_arg;
  tree ll_inner, lr_inner, rl_inner, rr_inner;
  long ll_bitsize, ll_bitpos, lr_bitsize, lr_bitpos;
  long rl_bitsize, rl_bitpos, rr_bitsize, rr_bitpos;
  long xll_bitpos, xlr_bitpos, xrl_bitpos, xrr_bitpos;
  long lnbitsize, lnbitpos, rnbitsize, rnbitpos;
  int ll_unsignedp, lr_unsignedp, rl_unsignedp, rr_unsignedp;
  enum machine_mode ll_mode, lr_mode, rl_mode, rr_mode;
  enum machine_mode lnmode, rnmode;
  tree ll_mask, lr_mask, rl_mask, rr_mask;
  tree ll_and_mask, lr_and_mask, rl_and_mask, rr_and_mask;
  tree l_const, r_const;
  tree lntype, rntype, result;
  int first_bit, end_bit;
  int volatilep;
  if (((lhs)->common.side_effects_flag) || ((rhs)->common.side_effects_flag))
    return 0;
  lcode = ((enum tree_code) (lhs)->common.code);
  rcode = ((enum tree_code) (rhs)->common.code);
  if (lcode == BIT_AND_EXPR && integer_onep (((lhs)->exp.operands[1])))
    {
      lhs = build2_stat (NE_EXPR,truth_type,lhs,global_trees[TI_INTEGER_ZERO] );
      lcode = NE_EXPR;
    }
  if (rcode == BIT_AND_EXPR && integer_onep (((rhs)->exp.operands[1])))
    {
      rhs = build2_stat (NE_EXPR,truth_type,rhs,global_trees[TI_INTEGER_ZERO] );
      rcode = NE_EXPR;
    }
  if (tree_code_type[(int) (lcode)] != '<' || tree_code_type[(int) (rcode)] != '<')
    return 0;
  ll_arg = ((lhs)->exp.operands[0]);
  lr_arg = ((lhs)->exp.operands[1]);
  rl_arg = ((rhs)->exp.operands[0]);
  rr_arg = ((rhs)->exp.operands[1]);
  if (simple_operand_p (ll_arg)
      && simple_operand_p (lr_arg))
    {
      tree result;
      if (operand_equal_p (ll_arg, rl_arg, 0)
          && operand_equal_p (lr_arg, rr_arg, 0))
 {
          result = combine_comparisons (code, lcode, rcode,
     truth_type, ll_arg, lr_arg);
   if (result)
     return result;
 }
      else if (operand_equal_p (ll_arg, rr_arg, 0)
               && operand_equal_p (lr_arg, rl_arg, 0))
 {
          result = combine_comparisons (code, lcode,
     swap_tree_comparison (rcode),
     truth_type, ll_arg, lr_arg);
   if (result)
     return result;
 }
    }
  code = ((code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR)
   ? TRUTH_AND_EXPR : TRUTH_OR_EXPR);
  if (ix86_branch_cost >= 2
      && ! ((((enum tree_code) (((rl_arg)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((rl_arg)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((rl_arg)->common.type))->common.type))->common.code) == REAL_TYPE))
      && simple_operand_p (rl_arg)
      && simple_operand_p (rr_arg))
    {
      if (code == TRUTH_OR_EXPR
   && lcode == NE_EXPR && integer_zerop (lr_arg)
   && rcode == NE_EXPR && integer_zerop (rr_arg)
   && ((ll_arg)->common.type) == ((rl_arg)->common.type))
 return build2_stat (NE_EXPR,truth_type,build2_stat (BIT_IOR_EXPR,((ll_arg)->common.type),ll_arg,rl_arg ),fold_convert (((ll_arg)->common.type), global_trees[TI_INTEGER_ZERO]) )
                                                              ;
      if (code == TRUTH_AND_EXPR
   && lcode == EQ_EXPR && integer_zerop (lr_arg)
   && rcode == EQ_EXPR && integer_zerop (rr_arg)
   && ((ll_arg)->common.type) == ((rl_arg)->common.type))
 return build2_stat (EQ_EXPR,truth_type,build2_stat (BIT_IOR_EXPR,((ll_arg)->common.type),ll_arg,rl_arg ),fold_convert (((ll_arg)->common.type), global_trees[TI_INTEGER_ZERO]) )
                                                              ;
      return build2_stat (code,truth_type,lhs,rhs );
    }
  if ((lcode != EQ_EXPR && lcode != NE_EXPR)
      || (rcode != EQ_EXPR && rcode != NE_EXPR))
    return 0;
  volatilep = 0;
  ll_inner = decode_field_reference (ll_arg,
         &ll_bitsize, &ll_bitpos, &ll_mode,
         &ll_unsignedp, &volatilep, &ll_mask,
         &ll_and_mask);
  lr_inner = decode_field_reference (lr_arg,
         &lr_bitsize, &lr_bitpos, &lr_mode,
         &lr_unsignedp, &volatilep, &lr_mask,
         &lr_and_mask);
  rl_inner = decode_field_reference (rl_arg,
         &rl_bitsize, &rl_bitpos, &rl_mode,
         &rl_unsignedp, &volatilep, &rl_mask,
         &rl_and_mask);
  rr_inner = decode_field_reference (rr_arg,
         &rr_bitsize, &rr_bitpos, &rr_mode,
         &rr_unsignedp, &volatilep, &rr_mask,
         &rr_and_mask);
  if (volatilep || ll_inner == 0 || rl_inner == 0
      || ! operand_equal_p (ll_inner, rl_inner, 0))
    return 0;
  if (((enum tree_code) (lr_arg)->common.code) == INTEGER_CST
      && ((enum tree_code) (rr_arg)->common.code) == INTEGER_CST)
    l_const = lr_arg, r_const = rr_arg;
  else if (lr_inner == 0 || rr_inner == 0
    || ! operand_equal_p (lr_inner, rr_inner, 0))
    return 0;
  else
    l_const = r_const = 0;
  wanted_code = (code == TRUTH_AND_EXPR ? EQ_EXPR : NE_EXPR);
  if (lcode != wanted_code)
    {
      if (l_const && integer_zerop (l_const) && integer_pow2p (ll_mask))
 {
   ll_unsignedp = 1;
   l_const = ll_mask;
 }
      else
 return 0;
    }
  if (rcode != wanted_code)
    {
      if (r_const && integer_zerop (r_const) && integer_pow2p (rl_mask))
 {
   rl_unsignedp = 1;
   r_const = rl_mask;
 }
      else
 return 0;
    }
  if (! lang_hooks.can_use_bit_fields_p ())
    return 0;
  first_bit = ((ll_bitpos) < (rl_bitpos) ? (ll_bitpos) : (rl_bitpos));
  end_bit = ((ll_bitpos + ll_bitsize) > (rl_bitpos + rl_bitsize) ? (ll_bitpos + ll_bitsize) : (rl_bitpos + rl_bitsize));
  lnmode = get_best_mode (end_bit - first_bit, first_bit,
     ((((ll_inner)->common.type))->type.align), word_mode,
     volatilep);
  if (lnmode == VOIDmode)
    return 0;
  lnbitsize = ((unsigned short) (((unsigned short) mode_size[lnmode]) * 8));
  lnbitpos = first_bit & ~ (lnbitsize - 1);
  lntype = lang_hooks.types.type_for_size (lnbitsize, 1);
  xll_bitpos = ll_bitpos - lnbitpos, xrl_bitpos = rl_bitpos - lnbitpos;
  if (0)
    {
      xll_bitpos = lnbitsize - xll_bitpos - ll_bitsize;
      xrl_bitpos = lnbitsize - xrl_bitpos - rl_bitsize;
    }
  ll_mask = const_binop (LSHIFT_EXPR, fold_convert (lntype, ll_mask),
    size_int_wide ((long) (xll_bitpos), SIZETYPE), 0);
  rl_mask = const_binop (LSHIFT_EXPR, fold_convert (lntype, rl_mask),
    size_int_wide ((long) (xrl_bitpos), SIZETYPE), 0);
  if (l_const)
    {
      l_const = fold_convert (lntype, l_const);
      l_const = unextend (l_const, ll_bitsize, ll_unsignedp, ll_and_mask);
      l_const = const_binop (LSHIFT_EXPR, l_const, size_int_wide ((long) (xll_bitpos), SIZETYPE), 0);
      if (! integer_zerop (const_binop (BIT_AND_EXPR, l_const,
     fold (build1_stat (BIT_NOT_EXPR,lntype,ll_mask )
                            ),
     0)))
 {
   warning ("comparison is always %d", wanted_code == NE_EXPR);
   return constant_boolean_node (wanted_code == NE_EXPR, truth_type);
 }
    }
  if (r_const)
    {
      r_const = fold_convert (lntype, r_const);
      r_const = unextend (r_const, rl_bitsize, rl_unsignedp, rl_and_mask);
      r_const = const_binop (LSHIFT_EXPR, r_const, size_int_wide ((long) (xrl_bitpos), SIZETYPE), 0);
      if (! integer_zerop (const_binop (BIT_AND_EXPR, r_const,
     fold (build1_stat (BIT_NOT_EXPR,lntype,rl_mask )
                            ),
     0)))
 {
   warning ("comparison is always %d", wanted_code == NE_EXPR);
   return constant_boolean_node (wanted_code == NE_EXPR, truth_type);
 }
    }
  if (l_const == 0)
    {
      if (ll_bitsize != lr_bitsize || rl_bitsize != rr_bitsize
   || ll_unsignedp != lr_unsignedp || rl_unsignedp != rr_unsignedp
   || ll_bitpos - rl_bitpos != lr_bitpos - rr_bitpos)
 return 0;
      first_bit = ((lr_bitpos) < (rr_bitpos) ? (lr_bitpos) : (rr_bitpos));
      end_bit = ((lr_bitpos + lr_bitsize) > (rr_bitpos + rr_bitsize) ? (lr_bitpos + lr_bitsize) : (rr_bitpos + rr_bitsize));
      rnmode = get_best_mode (end_bit - first_bit, first_bit,
         ((((lr_inner)->common.type))->type.align), word_mode,
         volatilep);
      if (rnmode == VOIDmode)
 return 0;
      rnbitsize = ((unsigned short) (((unsigned short) mode_size[rnmode]) * 8));
      rnbitpos = first_bit & ~ (rnbitsize - 1);
      rntype = lang_hooks.types.type_for_size (rnbitsize, 1);
      xlr_bitpos = lr_bitpos - rnbitpos, xrr_bitpos = rr_bitpos - rnbitpos;
      if (0)
 {
   xlr_bitpos = rnbitsize - xlr_bitpos - lr_bitsize;
   xrr_bitpos = rnbitsize - xrr_bitpos - rr_bitsize;
 }
      lr_mask = const_binop (LSHIFT_EXPR, fold_convert (rntype, lr_mask),
        size_int_wide ((long) (xlr_bitpos), SIZETYPE), 0);
      rr_mask = const_binop (LSHIFT_EXPR, fold_convert (rntype, rr_mask),
        size_int_wide ((long) (xrr_bitpos), SIZETYPE), 0);
      ll_mask = const_binop (BIT_IOR_EXPR, ll_mask, rl_mask, 0);
      lr_mask = const_binop (BIT_IOR_EXPR, lr_mask, rr_mask, 0);
      if (lnbitsize == rnbitsize && xll_bitpos == xlr_bitpos)
 {
   lhs = make_bit_field_ref (ll_inner, lntype, lnbitsize, lnbitpos,
        ll_unsignedp || rl_unsignedp);
   if (! all_ones_mask_p (ll_mask, lnbitsize))
     lhs = build2_stat (BIT_AND_EXPR,lntype,lhs,ll_mask );
   rhs = make_bit_field_ref (lr_inner, rntype, rnbitsize, rnbitpos,
        lr_unsignedp || rr_unsignedp);
   if (! all_ones_mask_p (lr_mask, rnbitsize))
     rhs = build2_stat (BIT_AND_EXPR,rntype,rhs,lr_mask );
   return build2_stat (wanted_code,truth_type,lhs,rhs );
 }
      if ((ll_bitsize + ll_bitpos == rl_bitpos
    && lr_bitsize + lr_bitpos == rr_bitpos)
   || (ll_bitpos == rl_bitpos + rl_bitsize
       && lr_bitpos == rr_bitpos + rr_bitsize))
 {
   tree type;
   lhs = make_bit_field_ref (ll_inner, lntype, ll_bitsize + rl_bitsize,
        ((ll_bitpos) < (rl_bitpos) ? (ll_bitpos) : (rl_bitpos)), ll_unsignedp);
   rhs = make_bit_field_ref (lr_inner, rntype, lr_bitsize + rr_bitsize,
        ((lr_bitpos) < (rr_bitpos) ? (lr_bitpos) : (rr_bitpos)), lr_unsignedp);
   ll_mask = const_binop (RSHIFT_EXPR, ll_mask,
     size_int_wide ((long) (((xll_bitpos) < (xrl_bitpos) ? (xll_bitpos) : (xrl_bitpos))), SIZETYPE), 0);
   lr_mask = const_binop (RSHIFT_EXPR, lr_mask,
     size_int_wide ((long) (((xlr_bitpos) < (xrr_bitpos) ? (xlr_bitpos) : (xrr_bitpos))), SIZETYPE), 0);
   type = lntype;
   if (lntype != rntype)
     {
       if (lnbitsize > rnbitsize)
  {
    lhs = fold_convert (rntype, lhs);
    ll_mask = fold_convert (rntype, ll_mask);
    type = rntype;
  }
       else if (lnbitsize < rnbitsize)
  {
    rhs = fold_convert (lntype, rhs);
    lr_mask = fold_convert (lntype, lr_mask);
    type = lntype;
  }
     }
   if (! all_ones_mask_p (ll_mask, ll_bitsize + rl_bitsize))
     lhs = build2_stat (BIT_AND_EXPR,type,lhs,ll_mask );
   if (! all_ones_mask_p (lr_mask, lr_bitsize + rr_bitsize))
     rhs = build2_stat (BIT_AND_EXPR,type,rhs,lr_mask );
   return build2_stat (wanted_code,truth_type,lhs,rhs );
 }
      return 0;
    }
  result = const_binop (BIT_AND_EXPR, ll_mask, rl_mask, 0);
  if (! integer_zerop (result)
      && simple_cst_equal (const_binop (BIT_AND_EXPR, result, l_const, 0),
      const_binop (BIT_AND_EXPR, result, r_const, 0)) != 1)
    {
      if (wanted_code == NE_EXPR)
 {
   warning ("`or' of unmatched not-equal tests is always 1");
   return constant_boolean_node (1, truth_type);
 }
      else
 {
   warning ("`and' of mutually exclusive equal-tests is always 0");
   return constant_boolean_node (0, truth_type);
 }
    }
  result = make_bit_field_ref (ll_inner, lntype, lnbitsize, lnbitpos,
          ll_unsignedp || rl_unsignedp);
  ll_mask = const_binop (BIT_IOR_EXPR, ll_mask, rl_mask, 0);
  if (! all_ones_mask_p (ll_mask, lnbitsize))
    result = build2_stat (BIT_AND_EXPR,lntype,result,ll_mask );
  return build2_stat (wanted_code,truth_type,result,const_binop (BIT_IOR_EXPR, l_const, r_const, 0) )
                                                   ;
}
static tree
optimize_minmax_comparison (tree t)
{
  tree type = ((t)->common.type);
  tree arg0 = ((t)->exp.operands[0]);
  enum tree_code op_code;
  tree comp_const = ((t)->exp.operands[1]);
  tree minmax_const;
  int consts_equal, consts_lt;
  tree inner;
  while ((((enum tree_code) (arg0)->common.code) == NOP_EXPR || ((enum tree_code) (arg0)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg0)->common.code) == NON_LVALUE_EXPR) && ((arg0)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg0)->common.type))->type.mode) == ((((((arg0)->exp.operands[0]))->common.type))->type.mode)) && (((((arg0)->common.type))->common.unsigned_flag) == ((((((arg0)->exp.operands[0]))->common.type))->common.unsigned_flag))) (arg0) = ((arg0)->exp.operands[0]);
  op_code = ((enum tree_code) (arg0)->common.code);
  minmax_const = ((arg0)->exp.operands[1]);
  consts_equal = tree_int_cst_equal (minmax_const, comp_const);
  consts_lt = tree_int_cst_lt (minmax_const, comp_const);
  inner = ((arg0)->exp.operands[0]);
  if ((op_code != MIN_EXPR && op_code != MAX_EXPR)
      || ((enum tree_code) (comp_const)->common.code) != INTEGER_CST
      || ((comp_const)->common.static_flag)
      || ((enum tree_code) (minmax_const)->common.code) != INTEGER_CST
      || ((minmax_const)->common.static_flag))
    return t;
  switch (((enum tree_code) (t)->common.code))
    {
    case NE_EXPR: case LT_EXPR: case LE_EXPR:
      return
 invert_truthvalue (optimize_minmax_comparison (invert_truthvalue (t)));
    case GE_EXPR:
      return
 fold (build2_stat (TRUTH_ORIF_EXPR,type,optimize_minmax_comparison (build2_stat (EQ_EXPR,type,arg0,comp_const )),optimize_minmax_comparison (build2_stat (GT_EXPR,type,arg0,comp_const )) )
                                                   );
    case EQ_EXPR:
      if (op_code == MAX_EXPR && consts_equal)
 return fold (build2_stat (LE_EXPR,type,inner,comp_const ));
      else if (op_code == MAX_EXPR && consts_lt)
 return fold (build2_stat (EQ_EXPR,type,inner,comp_const ));
      else if (op_code == MAX_EXPR)
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], inner);
      else if (consts_equal)
 return fold (build2_stat (GE_EXPR,type,inner,comp_const ));
      else if (consts_lt)
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], inner);
      else
 return fold (build2_stat (EQ_EXPR,type,inner,comp_const ));
    case GT_EXPR:
      if (op_code == MAX_EXPR && (consts_equal || consts_lt))
 return fold (build2_stat (GT_EXPR,type,inner,comp_const ));
      else if (op_code == MAX_EXPR)
 return omit_one_operand (type, global_trees[TI_INTEGER_ONE], inner);
      else if (op_code == MIN_EXPR && (consts_equal || consts_lt))
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], inner);
      else
 return fold (build2_stat (GT_EXPR,type,inner,comp_const ));
    default:
      return t;
    }
}
static tree
extract_muldiv (tree t, tree c, enum tree_code code, tree wide_type)
{
  static int depth;
  tree ret;
  if (depth > 3)
    return ((void *)0);
  depth++;
  ret = extract_muldiv_1 (t, c, code, wide_type);
  depth--;
  return ret;
}
static tree
extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type)
{
  tree type = ((t)->common.type);
  enum tree_code tcode = ((enum tree_code) (t)->common.code);
  tree ctype = (wide_type != 0 && (((unsigned short) mode_size[((wide_type)->type.mode)])
       > ((unsigned short) mode_size[((type)->type.mode)]))
  ? wide_type : type);
  tree t1, t2;
  int same_p = tcode == code;
  tree op0 = (tree) ((void *)0), op1 = (tree) ((void *)0);
  if (integer_zerop (c))
    return (tree) ((void *)0);
  if (tree_code_type[(int) (tcode)] == '1')
    op0 = ((t)->exp.operands[0]);
  if (tree_code_type[(int) (tcode)] == '2')
    op0 = ((t)->exp.operands[0]), op1 = ((t)->exp.operands[1]);
  switch (tcode)
    {
    case INTEGER_CST:
      if (code == MULT_EXPR
   || integer_zerop (const_binop (TRUNC_MOD_EXPR, t, c, 0)))
 return const_binop (code, fold_convert (ctype, t),
       fold_convert (ctype, c), 0);
      break;
    case CONVERT_EXPR: case NON_LVALUE_EXPR: case NOP_EXPR:
      if ((tree_code_type[(int) (((enum tree_code) (op0)->common.code))] == '<'
    || tree_code_type[(int) (((enum tree_code) (op0)->common.code))] == '1'
    || tree_code_type[(int) (((enum tree_code) (op0)->common.code))] == '2'
    || tree_code_type[(int) (((enum tree_code) (op0)->common.code))] == 'e')
   && ((((((op0)->common.type))->common.unsigned_flag)
        && ! (((enum tree_code) (((op0)->common.type))->common.code) == INTEGER_TYPE
       && ((((op0)->common.type))->type.no_force_blk_flag))
        && (((unsigned short) mode_size[((ctype)->type.mode)])
            > ((unsigned short) mode_size[((((op0)->common.type))->type.mode)])))
       || (((unsigned short) mode_size[((ctype)->type.mode)])
    < ((unsigned short) mode_size[((((op0)->common.type))->type.mode)]))
       || (code != MULT_EXPR
    && (((ctype)->common.unsigned_flag)
        != ((((op0)->common.type))->common.unsigned_flag)))))
 break;
      if ((t2 = fold_convert (((op0)->common.type), c)) != 0
   && ((enum tree_code) (t2)->common.code) == INTEGER_CST
   && ! ((t2)->common.static_flag)
   && (0 != (t1 = extract_muldiv (op0, t2, code,
      code == MULT_EXPR
      ? ctype : (tree) ((void *)0)))))
 return t1;
      break;
    case NEGATE_EXPR: case ABS_EXPR:
      if ((t1 = extract_muldiv (op0, c, code, wide_type)) != 0)
 return fold (build1_stat (tcode,ctype,fold_convert (ctype, t1) ));
      break;
    case MIN_EXPR: case MAX_EXPR:
      if (((ctype)->common.unsigned_flag) != ((type)->common.unsigned_flag))
 break;
      if ((t1 = extract_muldiv (op0, c, code, wide_type)) != 0
   && (t2 = extract_muldiv (op1, c, code, wide_type)) != 0)
 {
   if (tree_int_cst_sgn (c) < 0)
     tcode = (tcode == MIN_EXPR ? MAX_EXPR : MIN_EXPR);
   return fold (build2_stat (tcode,ctype,fold_convert (ctype, t1),fold_convert (ctype, t2) )
                                   );
 }
      break;
    case LSHIFT_EXPR: case RSHIFT_EXPR:
      if (((enum tree_code) (op1)->common.code) == INTEGER_CST
   && ((((global_trees[TI_SIZE_ONE])->common.type))->type.precision) > (((op1)->int_cst.int_cst).low)
   && (((op1)->int_cst.int_cst).high) == 0
   && 0 != (t1 = fold_convert (ctype,
          const_binop (LSHIFT_EXPR,
         global_trees[TI_SIZE_ONE],
         op1, 0)))
   && ! ((t1)->common.public_flag))
 return extract_muldiv (build2_stat (tcode == LSHIFT_EXPR ? MULT_EXPR : FLOOR_DIV_EXPR,ctype,fold_convert (ctype, op0),t1 )
                                                ,
          c, code, wide_type);
      break;
    case PLUS_EXPR: case MINUS_EXPR:
      t1 = extract_muldiv (op0, c, code, wide_type);
      t2 = extract_muldiv (op1, c, code, wide_type);
      if (t1 != 0 && t2 != 0
   && (code == MULT_EXPR
       || (multiple_of_p (ctype, op0, c)
           && multiple_of_p (ctype, op1, c))))
 return fold (build2_stat (tcode,ctype,fold_convert (ctype, t1),fold_convert (ctype, t2) )
                                 );
      if (tcode == MINUS_EXPR)
 tcode = PLUS_EXPR, op1 = negate_expr (op1);
      if (((enum tree_code) (op1)->common.code) != INTEGER_CST)
 break;
      if (tree_int_cst_sgn (op1) < 0 || tree_int_cst_sgn (c) < 0)
 {
   if (code == CEIL_DIV_EXPR)
     code = FLOOR_DIV_EXPR;
   else if (code == FLOOR_DIV_EXPR)
     code = CEIL_DIV_EXPR;
   else if (code != MULT_EXPR
     && code != CEIL_MOD_EXPR && code != FLOOR_MOD_EXPR)
     break;
 }
      if (code == MULT_EXPR
   || integer_zerop (const_binop (TRUNC_MOD_EXPR, op1, c, 0)))
 {
   op1 = const_binop (code, fold_convert (ctype, op1),
        fold_convert (ctype, c), 0);
   if (op1 == 0
       || (((op1)->common.public_flag) && ! flag_wrapv))
     break;
 }
      else
 break;
      if (((ctype)->common.unsigned_flag)
   && ! (((enum tree_code) (ctype)->common.code) == INTEGER_TYPE && ((ctype)->type.no_force_blk_flag))
   && ctype != type)
 break;
      if (t1 != 0 && (((enum tree_code) (t1)->common.code) != code || code == MULT_EXPR))
 return fold (build2_stat (tcode,ctype,fold_convert (ctype, t1),op1 ));
      if (code == MULT_EXPR)
 return fold (build2_stat (tcode,ctype,fold (build2_stat (code,ctype,fold_convert (ctype, op0),fold_convert (ctype, c) )),op1 )
            );
      break;
    case MULT_EXPR:
      if ((code == TRUNC_MOD_EXPR || code == CEIL_MOD_EXPR
    || code == FLOOR_MOD_EXPR || code == ROUND_MOD_EXPR)
   && ((enum tree_code) (((t)->exp.operands[1]))->common.code) == INTEGER_CST
   && integer_zerop (const_binop (TRUNC_MOD_EXPR, op1, c, 0)))
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], op0);
    case TRUNC_DIV_EXPR: case CEIL_DIV_EXPR: case FLOOR_DIV_EXPR:
    case ROUND_DIV_EXPR: case EXACT_DIV_EXPR:
      if (same_p
   && (t1 = extract_muldiv (op0, c, code, wide_type)) != 0)
 return fold (build2_stat (tcode,ctype,fold_convert (ctype, t1),fold_convert (ctype, op1) )
                                  );
      else if (tcode == MULT_EXPR && code == MULT_EXPR
        && (t1 = extract_muldiv (op1, c, code, wide_type)) != 0)
 return fold (build2_stat (tcode,ctype,fold_convert (ctype, op0),fold_convert (ctype, t1) )
                                 );
      else if (((enum tree_code) (op1)->common.code) != INTEGER_CST)
 return 0;
      if (tcode == code
   && 0 != (t1 = const_binop (MULT_EXPR, fold_convert (ctype, op1),
         fold_convert (ctype, c), 0))
   && ! ((t1)->common.public_flag))
 return fold (build2_stat (tcode,ctype,fold_convert (ctype, op0),t1 ));
      if ((! ((ctype)->common.unsigned_flag)
    || (((enum tree_code) (ctype)->common.code) == INTEGER_TYPE && ((ctype)->type.no_force_blk_flag)))
   && ! flag_wrapv
   && ((code == MULT_EXPR && tcode == EXACT_DIV_EXPR)
       || (tcode == MULT_EXPR
    && code != TRUNC_MOD_EXPR && code != CEIL_MOD_EXPR
    && code != FLOOR_MOD_EXPR && code != ROUND_MOD_EXPR)))
 {
   if (integer_zerop (const_binop (TRUNC_MOD_EXPR, op1, c, 0)))
     return fold (build2_stat (tcode,ctype,fold_convert (ctype, op0),fold_convert (ctype, const_binop (TRUNC_DIV_EXPR, op1, c, 0)) )
                       );
   else if (integer_zerop (const_binop (TRUNC_MOD_EXPR, c, op1, 0)))
     return fold (build2_stat (code,ctype,fold_convert (ctype, op0),fold_convert (ctype, const_binop (TRUNC_DIV_EXPR, c, op1, 0)) )
                       );
 }
      break;
    default:
      break;
    }
  return 0;
}
static tree
constant_boolean_node (int value1, tree type)
{
  if (type == integer_types[itk_int])
    return value1 ? global_trees[TI_INTEGER_ONE] : global_trees[TI_INTEGER_ZERO];
  else if (type == global_trees[TI_BOOLEAN_TYPE])
    return value1 ? global_trees[TI_BOOLEAN_TRUE] : global_trees[TI_BOOLEAN_FALSE];
  else if (((enum tree_code) (type)->common.code) == BOOLEAN_TYPE)
    return lang_hooks.truthvalue_conversion (value1 ? global_trees[TI_INTEGER_ONE]
         : global_trees[TI_INTEGER_ZERO]);
  else
    {
      tree t = build_int_2_wide ((unsigned long) (value1), (long) (0));
      ((t)->common.type) = type;
      return t;
    }
}
static tree
fold_binary_op_with_conditional_arg (enum tree_code code, tree type,
         tree cond, tree arg, int cond_first_p)
{
  tree test, true_value, false_value;
  tree lhs = (tree) ((void *)0);
  tree rhs = (tree) ((void *)0);
  if (!((arg)->common.constant_flag))
    return (tree) ((void *)0);
  if (((enum tree_code) (cond)->common.code) == COND_EXPR)
    {
      test = ((cond)->exp.operands[0]);
      true_value = ((cond)->exp.operands[1]);
      false_value = ((cond)->exp.operands[2]);
      if ((((enum tree_code) (((true_value)->common.type))->common.code) == VOID_TYPE))
 lhs = true_value;
      if ((((enum tree_code) (((false_value)->common.type))->common.code) == VOID_TYPE))
 rhs = false_value;
    }
  else
    {
      tree testtype = ((cond)->common.type);
      test = cond;
      true_value = constant_boolean_node (1, testtype);
      false_value = constant_boolean_node (0, testtype);
    }
  if (lhs == 0)
    lhs = fold (cond_first_p ? build2_stat (code,type,true_value,arg )
        : build2_stat (code,type,arg,true_value ));
  if (rhs == 0)
    rhs = fold (cond_first_p ? build2_stat (code,type,false_value,arg )
        : build2_stat (code,type,arg,false_value ));
  test = fold (build3_stat (COND_EXPR,type,test,lhs,rhs ));
  return fold_convert (type, test);
}
static unsigned char
fold_real_zero_addition_p (tree type, tree addend, int negate)
{
  if (!real_zerop (addend))
    return 0;
  if ((flag_signaling_nans && (((mode_class[((type)->type.mode)] == MODE_FLOAT || mode_class[((type)->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((type)->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)))
    return 0;
  if (!(((mode_class[((type)->type.mode)] == MODE_FLOAT || mode_class[((type)->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((type)->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations))
    return 1;
  if (((enum tree_code) (addend)->common.code) == REAL_CST
      && real_isnegzero (&((*((addend)->real_cst.real_cst_ptr)))))
    negate = !negate;
  return negate && !(((mode_class[((type)->type.mode)] == MODE_FLOAT || mode_class[((type)->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((type)->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && flag_rounding_math);
}
static tree
fold_mathfn_compare (enum built_in_function fcode, enum tree_code code,
       tree type, tree arg0, tree arg1)
{
  struct real_value c;
  if (((fcode) == BUILT_IN_SQRT || (fcode) == BUILT_IN_SQRTF || (fcode) == BUILT_IN_SQRTL))
    {
      tree arg = ((((arg0)->exp.operands[1]))->list.value1);
      enum machine_mode mode = ((((arg0)->common.type))->type.mode);
      c = (*((arg1)->real_cst.real_cst_ptr));
      if (real_isneg (&(c)))
 {
   if (code == EQ_EXPR || code == LT_EXPR || code == LE_EXPR)
     return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg);
   if (code == NE_EXPR || !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
     return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg);
   return fold (build2_stat (GE_EXPR,type,arg,build_real (((arg)->common.type), dconst0) )
                                                );
 }
      else if (code == GT_EXPR || code == GE_EXPR)
 {
   struct real_value c2;
   real_arithmetic (&(c2), MULT_EXPR, &(c), &(c));
   real_convert (&c2, mode, &c2);
   if (real_isinf (&(c2)))
     {
       if ((((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
  return fold (build2_stat (EQ_EXPR,type,arg,build_real (((arg)->common.type), c2) )
                                          );
       return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg);
     }
   return fold (build2_stat (code,type,arg,build_real (((arg)->common.type), c2) )
                                           );
 }
      else if (code == LT_EXPR || code == LE_EXPR)
 {
   struct real_value c2;
   real_arithmetic (&(c2), MULT_EXPR, &(c), &(c));
   real_convert (&c2, mode, &c2);
   if (real_isinf (&(c2)))
     {
       if (! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only) && ! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
  return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg);
       if (! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
  return fold (build2_stat (NE_EXPR,type,arg,build_real (((arg)->common.type), c2) )
                                          );
       if (! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
  return fold (build2_stat (GE_EXPR,type,arg,build_real (((arg)->common.type), dconst0) )
                                               );
       if (lang_hooks.decls.global_bindings_p () != 0
    || ((arg) != 0 && ! ((arg)->common.constant_flag) && contains_placeholder_p (arg)))
  return (tree) ((void *)0);
       arg = save_expr (arg);
       return fold (build2_stat (TRUTH_ANDIF_EXPR,type,fold (build2_stat (GE_EXPR,type,arg,build_real (((arg)->common.type), dconst0) )),fold (build2_stat (NE_EXPR,type,arg,build_real (((arg)->common.type), c2) )) )
                  );
     }
   if (! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
     return fold (build2_stat (code,type,arg,build_real (((arg)->common.type), c2) )
                                      );
   if (lang_hooks.decls.global_bindings_p () == 0
       && ! ((arg) != 0 && ! ((arg)->common.constant_flag) && contains_placeholder_p (arg)))
     {
       arg = save_expr (arg);
       return fold (build2_stat (TRUTH_ANDIF_EXPR,type,fold (build2_stat (GE_EXPR,type,arg,build_real (((arg)->common.type), dconst0) )),fold (build2_stat (code,type,arg,build_real (((arg)->common.type), c2) )) )
                  );
     }
 }
    }
  return (tree) ((void *)0);
}
static tree
fold_inf_compare (enum tree_code code, tree type, tree arg0, tree arg1)
{
  enum machine_mode mode;
  struct real_value max;
  tree temp;
  unsigned char neg;
  mode = ((((arg0)->common.type))->type.mode);
  neg = real_isneg (&((*((arg1)->real_cst.real_cst_ptr))));
  if (neg)
    code = swap_tree_comparison (code);
  switch (code)
    {
    case GT_EXPR:
      if ((flag_signaling_nans && (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)))
        return (tree) ((void *)0);
      return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg0);
    case LE_EXPR:
      if (! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
 return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg0);
      if (lang_hooks.decls.global_bindings_p () == 0
   && ! ((arg0) != 0 && ! ((arg0)->common.constant_flag) && contains_placeholder_p (arg0)))
 {
   arg0 = save_expr (arg0);
   return fold (build2_stat (EQ_EXPR,type,arg0,arg0 ));
 }
      break;
    case EQ_EXPR:
    case GE_EXPR:
      real_maxval (&max, neg, mode);
      return fold (build2_stat (neg ? LT_EXPR : GT_EXPR,type,arg0,build_real (((arg0)->common.type), max) )
                                               );
    case LT_EXPR:
      real_maxval (&max, neg, mode);
      return fold (build2_stat (neg ? GE_EXPR : LE_EXPR,type,arg0,build_real (((arg0)->common.type), max) )
                                               );
    case NE_EXPR:
      real_maxval (&max, neg, mode);
      if (! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
 return fold (build2_stat (neg ? GE_EXPR : LE_EXPR,type,arg0,build_real (((arg0)->common.type), max) )
                                                 );
      if (in_gimple_form)
 return (tree) ((void *)0);
      temp = fold (build2_stat (neg ? LT_EXPR : GT_EXPR,type,arg0,build_real (((arg0)->common.type), max) )
                                               );
      return fold (build1_stat (TRUTH_NOT_EXPR,type,temp ));
    default:
      break;
    }
  return (tree) ((void *)0);
}
static tree
fold_div_compare (enum tree_code code, tree type, tree arg0, tree arg1)
{
  tree prod, tmp, hi, lo;
  tree arg00 = ((arg0)->exp.operands[0]);
  tree arg01 = ((arg0)->exp.operands[1]);
  unsigned long lpart;
  long hpart;
  int overflow;
  overflow = mul_double ((((arg01)->int_cst.int_cst).low),
    (((arg01)->int_cst.int_cst).high),
    (((arg1)->int_cst.int_cst).low),
    (((arg1)->int_cst.int_cst).high), &lpart, &hpart);
  prod = build_int_2_wide ((unsigned long) (lpart), (long) (hpart));
  ((prod)->common.type) = ((arg00)->common.type);
  ((prod)->common.public_flag) = force_fit_type (prod, overflow)
    || (((prod)->int_cst.int_cst).high) != hpart
    || (((prod)->int_cst.int_cst).low) != lpart;
  ((prod)->common.static_flag) = ((prod)->common.public_flag);
  if (((((arg0)->common.type))->common.unsigned_flag))
    {
      tmp = int_const_binop (MINUS_EXPR, arg01, global_trees[TI_INTEGER_ONE], 0);
      lo = prod;
      overflow = add_double ((((prod)->int_cst.int_cst).low),
        (((prod)->int_cst.int_cst).high),
        (((tmp)->int_cst.int_cst).low),
        (((tmp)->int_cst.int_cst).high),
        &lpart, &hpart);
      hi = build_int_2_wide ((unsigned long) (lpart), (long) (hpart));
      ((hi)->common.type) = ((arg00)->common.type);
      ((hi)->common.public_flag) = force_fit_type (hi, overflow)
      || (((hi)->int_cst.int_cst).high) != hpart
      || (((hi)->int_cst.int_cst).low) != lpart
      || ((prod)->common.public_flag);
      ((hi)->common.static_flag) = ((hi)->common.public_flag);
    }
  else if (tree_int_cst_sgn (arg01) >= 0)
    {
      tmp = int_const_binop (MINUS_EXPR, arg01, global_trees[TI_INTEGER_ONE], 0);
      switch (tree_int_cst_sgn (arg1))
 {
 case -1:
   lo = int_const_binop (MINUS_EXPR, prod, tmp, 0);
   hi = prod;
   break;
 case 0:
   lo = fold_negate_const (tmp, ((arg0)->common.type));
   hi = tmp;
   break;
 case 1:
          hi = int_const_binop (PLUS_EXPR, prod, tmp, 0);
   lo = prod;
   break;
 default:
   abort ();
 }
    }
  else
    {
      tmp = int_const_binop (PLUS_EXPR, arg01, global_trees[TI_INTEGER_ONE], 0);
      switch (tree_int_cst_sgn (arg1))
 {
 case -1:
   hi = int_const_binop (MINUS_EXPR, prod, tmp, 0);
   lo = prod;
   break;
 case 0:
   hi = fold_negate_const (tmp, ((arg0)->common.type));
   lo = tmp;
   break;
 case 1:
          lo = int_const_binop (PLUS_EXPR, prod, tmp, 0);
   hi = prod;
   break;
 default:
   abort ();
 }
    }
  switch (code)
    {
    case EQ_EXPR:
      if (((lo)->common.public_flag) && ((hi)->common.public_flag))
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg00);
      if (((hi)->common.public_flag))
 return fold (build2_stat (GE_EXPR,type,arg00,lo ));
      if (((lo)->common.public_flag))
 return fold (build2_stat (LE_EXPR,type,arg00,hi ));
      return build_range_check (type, arg00, 1, lo, hi);
    case NE_EXPR:
      if (((lo)->common.public_flag) && ((hi)->common.public_flag))
 return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg00);
      if (((hi)->common.public_flag))
 return fold (build2_stat (LT_EXPR,type,arg00,lo ));
      if (((lo)->common.public_flag))
 return fold (build2_stat (GT_EXPR,type,arg00,hi ));
      return build_range_check (type, arg00, 0, lo, hi);
    case LT_EXPR:
      if (((lo)->common.public_flag))
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg00);
      return fold (build2_stat (LT_EXPR,type,arg00,lo ));
    case LE_EXPR:
      if (((hi)->common.public_flag))
 return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg00);
      return fold (build2_stat (LE_EXPR,type,arg00,hi ));
    case GT_EXPR:
      if (((hi)->common.public_flag))
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg00);
      return fold (build2_stat (GT_EXPR,type,arg00,hi ));
    case GE_EXPR:
      if (((lo)->common.public_flag))
 return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg00);
      return fold (build2_stat (GE_EXPR,type,arg00,lo ));
    default:
      break;
    }
  return (tree) ((void *)0);
}
tree
fold_single_bit_test (enum tree_code code, tree arg0, tree arg1,
        tree result_type)
{
  if (code == TRUTH_NOT_EXPR)
    {
      code = ((enum tree_code) (arg0)->common.code);
      if (code != NE_EXPR && code != EQ_EXPR)
 return (tree) ((void *)0);
      arg1 = ((arg0)->exp.operands[1]);
      arg0 = ((arg0)->exp.operands[0]);
      code = (code == EQ_EXPR ? NE_EXPR : EQ_EXPR);
    }
  if ((code == NE_EXPR || code == EQ_EXPR)
      && ((enum tree_code) (arg0)->common.code) == BIT_AND_EXPR && integer_zerop (arg1)
      && integer_pow2p (((arg0)->exp.operands[1])))
    {
      tree inner = ((arg0)->exp.operands[0]);
      tree type = ((arg0)->common.type);
      int bitnum = tree_log2 (((arg0)->exp.operands[1]));
      enum machine_mode operand_mode = ((type)->type.mode);
      int ops_unsigned;
      tree signed_type, unsigned_type, intermediate_type;
      tree arg00;
      arg00 = sign_bit_p (((arg0)->exp.operands[0]), ((arg0)->exp.operands[1]));
      if (arg00 != (tree) ((void *)0)
   && ((((arg00)->common.type))->type.precision)
      == ((unsigned short) (((unsigned short) mode_size[((((arg00)->common.type))->type.mode)]) * 8)))
 {
   tree stype = lang_hooks.types.signed_type (((arg00)->common.type));
   return fold (build2_stat (code == EQ_EXPR ? GE_EXPR : LT_EXPR,result_type,fold_convert (stype, arg00),fold_convert (stype, global_trees[TI_INTEGER_ZERO]) )
                                                  );
 }
      if (((enum tree_code) (inner)->common.code) == RSHIFT_EXPR
   && ((enum tree_code) (((inner)->exp.operands[1]))->common.code) == INTEGER_CST
   && (((((inner)->exp.operands[1]))->int_cst.int_cst).high) == 0
   && bitnum < ((type)->type.precision)
   && 0 > compare_tree_int (((inner)->exp.operands[1]),
       bitnum - ((type)->type.precision)))
 {
   bitnum += (((((inner)->exp.operands[1]))->int_cst.int_cst).low);
   inner = ((inner)->exp.operands[0]);
 }
      ops_unsigned = 1;
      signed_type = lang_hooks.types.type_for_mode (operand_mode, 0);
      unsigned_type = lang_hooks.types.type_for_mode (operand_mode, 1);
      intermediate_type = ops_unsigned ? unsigned_type : signed_type;
      inner = fold_convert (intermediate_type, inner);
      if (bitnum != 0)
 inner = build2_stat (RSHIFT_EXPR,intermediate_type,inner,size_int_wide ((long) (bitnum), SIZETYPE) )
                            ;
      if (code == EQ_EXPR)
 inner = build2_stat (BIT_XOR_EXPR,intermediate_type,inner,global_trees[TI_INTEGER_ONE] )
                           ;
      inner = build2_stat (BIT_AND_EXPR,intermediate_type,inner,global_trees[TI_INTEGER_ONE] )
                                ;
      inner = fold_convert (result_type, inner);
      return inner;
    }
  return (tree) ((void *)0);
}
static unsigned char
reorder_operands_p (tree arg0, tree arg1)
{
  if (! flag_evaluation_order)
    return 1;
  if (((arg0)->common.constant_flag) || ((arg1)->common.constant_flag))
    return 1;
  return ! ((arg0)->common.side_effects_flag)
  && ! ((arg1)->common.side_effects_flag);
}
unsigned char
tree_swap_operands_p (tree arg0, tree arg1, unsigned char reorder)
{
  while ((((enum tree_code) (arg0)->common.code) == NOP_EXPR || ((enum tree_code) (arg0)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg0)->common.code) == NON_LVALUE_EXPR) && ((arg0)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg0)->common.type))->type.mode) == ((((((arg0)->exp.operands[0]))->common.type))->type.mode)) && (((((arg0)->common.type))->common.unsigned_flag) == ((((((arg0)->exp.operands[0]))->common.type))->common.unsigned_flag))) (arg0) = ((arg0)->exp.operands[0]);
  while ((((enum tree_code) (arg1)->common.code) == NOP_EXPR || ((enum tree_code) (arg1)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg1)->common.code) == NON_LVALUE_EXPR) && ((arg1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg1)->common.type))->type.mode) == ((((((arg1)->exp.operands[0]))->common.type))->type.mode)) && (((((arg1)->common.type))->common.unsigned_flag) == ((((((arg1)->exp.operands[0]))->common.type))->common.unsigned_flag))) (arg1) = ((arg1)->exp.operands[0]);
  if (((enum tree_code) (arg1)->common.code) == INTEGER_CST)
    return 0;
  if (((enum tree_code) (arg0)->common.code) == INTEGER_CST)
    return 1;
  if (((enum tree_code) (arg1)->common.code) == REAL_CST)
    return 0;
  if (((enum tree_code) (arg0)->common.code) == REAL_CST)
    return 1;
  if (((enum tree_code) (arg1)->common.code) == COMPLEX_CST)
    return 0;
  if (((enum tree_code) (arg0)->common.code) == COMPLEX_CST)
    return 1;
  if (((arg1)->common.constant_flag))
    return 0;
  if (((arg0)->common.constant_flag))
    return 1;
  if (optimize_size)
    return 0;
  if (reorder && flag_evaluation_order
      && (((arg0)->common.side_effects_flag) || ((arg1)->common.side_effects_flag)))
    return 0;
  if ((tree_code_type[(int) (((enum tree_code) (arg1)->common.code))] == 'd'))
    return 0;
  if ((tree_code_type[(int) (((enum tree_code) (arg0)->common.code))] == 'd'))
    return 1;
  if (reorder && flag_evaluation_order
      && (((arg0)->common.side_effects_flag) || ((arg1)->common.side_effects_flag)))
    return 0;
  if ((tree_code_type[(int) (((enum tree_code) (arg1)->common.code))] == 'd'))
    return 0;
  if ((tree_code_type[(int) (((enum tree_code) (arg0)->common.code))] == 'd'))
    return 1;
  if (((enum tree_code) (arg0)->common.code) == SSA_NAME
      && ((enum tree_code) (arg1)->common.code) == SSA_NAME
      && (arg0)->ssa_name.version > (arg1)->ssa_name.version)
    return 1;
  return 0;
}
tree
fold (tree expr)
{
  const tree t = expr;
  const tree type = ((expr)->common.type);
  tree t1 = (tree) ((void *)0);
  tree tem;
  tree arg0 = (tree) ((void *)0), arg1 = (tree) ((void *)0);
  enum tree_code code = ((enum tree_code) (t)->common.code);
  int kind = tree_code_type[(int) (code)];
  int wins = 1;
  if (kind == 'c')
    return t;
  if (code == NOP_EXPR || code == FLOAT_EXPR || code == CONVERT_EXPR)
    {
      tree subop;
      arg0 = ((t)->exp.operands[0]);
      if (arg0 != 0)
 while ((((enum tree_code) (arg0)->common.code) == NOP_EXPR || ((enum tree_code) (arg0)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg0)->common.code) == NON_LVALUE_EXPR) && ((arg0)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg0)->common.type))->type.mode) == ((((((arg0)->exp.operands[0]))->common.type))->type.mode)) && (((((arg0)->common.type))->common.unsigned_flag) == ((((((arg0)->exp.operands[0]))->common.type))->common.unsigned_flag))) (arg0) = ((arg0)->exp.operands[0]);
      if (arg0 != 0 && ((enum tree_code) (arg0)->common.code) == COMPLEX_CST)
 subop = ((arg0)->complex.real);
      else
 subop = arg0;
      if (subop != 0 && ((enum tree_code) (subop)->common.code) != INTEGER_CST
   && ((enum tree_code) (subop)->common.code) != REAL_CST)
 wins = 0;
    }
  else if ((strchr ("<12ers", (kind)) != 0))
    {
      int len = first_rtl_op (code);
      int i;
      for (i = 0; i < len; i++)
 {
   tree op = ((t)->exp.operands[i]);
   tree subop;
   if (op == 0)
     continue;
   if (kind == '<')
     while ((((enum tree_code) (op)->common.code) == NOP_EXPR || ((enum tree_code) (op)->common.code) == CONVERT_EXPR || ((enum tree_code) (op)->common.code) == NON_LVALUE_EXPR) && ((op)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((op)->common.type))->type.mode) == ((((((op)->exp.operands[0]))->common.type))->type.mode)) && (((((op)->common.type))->common.unsigned_flag) == ((((((op)->exp.operands[0]))->common.type))->common.unsigned_flag))) (op) = ((op)->exp.operands[0]);
   else
     while ((((enum tree_code) (op)->common.code) == NOP_EXPR || ((enum tree_code) (op)->common.code) == CONVERT_EXPR || ((enum tree_code) (op)->common.code) == NON_LVALUE_EXPR) && ((op)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((op)->common.type))->type.mode) == ((((((op)->exp.operands[0]))->common.type))->type.mode))) (op) = ((op)->exp.operands[0]);
   if (((enum tree_code) (op)->common.code) == COMPLEX_CST)
     subop = ((op)->complex.real);
   else
     subop = op;
   if (((enum tree_code) (subop)->common.code) != INTEGER_CST
       && ((enum tree_code) (subop)->common.code) != REAL_CST)
     wins = 0;
   if (i == 0)
     arg0 = op;
   else if (i == 1)
     arg1 = op;
 }
    }
  if (commutative_tree_code (code)
      && tree_swap_operands_p (arg0, arg1, 1))
    return fold (build2_stat (code,type,((t)->exp.operands[1]),((t)->exp.operands[0]) )
                        );
  if ((code == BIT_AND_EXPR || code == BIT_IOR_EXPR
       || code == EQ_EXPR || code == NE_EXPR)
      && ((truth_value_p (((enum tree_code) (arg0)->common.code))
    && (truth_value_p (((enum tree_code) (arg1)->common.code))
        || (((enum tree_code) (arg1)->common.code) == BIT_AND_EXPR
     && integer_onep (((arg1)->exp.operands[1])))))
   || (truth_value_p (((enum tree_code) (arg1)->common.code))
       && (truth_value_p (((enum tree_code) (arg0)->common.code))
    || (((enum tree_code) (arg0)->common.code) == BIT_AND_EXPR
        && integer_onep (((arg0)->exp.operands[1])))))))
    {
      tem = fold (build2_stat (code == BIT_AND_EXPR ? TRUTH_AND_EXPR : code == BIT_IOR_EXPR ? TRUTH_OR_EXPR : TRUTH_XOR_EXPR,type,fold_convert (global_trees[TI_BOOLEAN_TYPE], arg0),fold_convert (global_trees[TI_BOOLEAN_TYPE], arg1) )
                                            );
      if (code == EQ_EXPR)
 tem = invert_truthvalue (tem);
      return tem;
    }
  if (tree_code_type[(int) (code)] == '1')
    {
      if (((enum tree_code) (arg0)->common.code) == COMPOUND_EXPR)
 return build2_stat (COMPOUND_EXPR,type,((arg0)->exp.operands[0]),fold (build1_stat (code,type,((arg0)->exp.operands[1]) )) )
                                                            ;
      else if (((enum tree_code) (arg0)->common.code) == COND_EXPR)
 {
   tree arg01 = ((arg0)->exp.operands[1]);
   tree arg02 = ((arg0)->exp.operands[2]);
   if (! (((enum tree_code) (((arg01)->common.type))->common.code) == VOID_TYPE))
     arg01 = fold (build1_stat (code,type,arg01 ));
   if (! (((enum tree_code) (((arg02)->common.type))->common.code) == VOID_TYPE))
     arg02 = fold (build1_stat (code,type,arg02 ));
   tem = fold (build3_stat (COND_EXPR,type,((arg0)->exp.operands[0]),arg01,arg02 )
                      );
   if ((code == NOP_EXPR || code == CONVERT_EXPR
        || code == NON_LVALUE_EXPR)
       && ((enum tree_code) (tem)->common.code) == COND_EXPR
       && ((enum tree_code) (((tem)->exp.operands[1]))->common.code) == code
       && ((enum tree_code) (((tem)->exp.operands[2]))->common.code) == code
       && ! (((enum tree_code) (((tem)->exp.operands[1]))->common.code) == VOID_TYPE)
       && ! (((enum tree_code) (((tem)->exp.operands[2]))->common.code) == VOID_TYPE)
       && (((((((tem)->exp.operands[1]))->exp.operands[0]))->common.type)
    == ((((((tem)->exp.operands[2]))->exp.operands[0]))->common.type))
       && ! ((((enum tree_code) (((tem)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((tem)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((tem)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((tem)->common.type))->common.code) == CHAR_TYPE)
      && ((((enum tree_code) (((((((tem)->exp.operands[1]))->exp.operands[0]))->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((((((tem)->exp.operands[1]))->exp.operands[0]))->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((((((tem)->exp.operands[1]))->exp.operands[0]))->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((((((tem)->exp.operands[1]))->exp.operands[0]))->common.type))->common.code) == CHAR_TYPE)
                                                        )
      && ((((tem)->common.type))->type.precision) <= (8 * (0 ? 8 : 4))))
     tem = build1_stat (code,type,build3_stat (COND_EXPR,((((((tem)->exp.operands[1]))->exp.operands[0]))->common.type),((tem)->exp.operands[0]),((((tem)->exp.operands[1]))->exp.operands[0]),((((tem)->exp.operands[2]))->exp.operands[0]) ) )
                                               ;
   return tem;
 }
      else if (tree_code_type[(int) (((enum tree_code) (arg0)->common.code))] == '<')
 {
   if (((enum tree_code) (type)->common.code) == BOOLEAN_TYPE)
     {
       arg0 = copy_node_stat (arg0 );
       ((arg0)->common.type) = type;
       return arg0;
     }
   else if (((enum tree_code) (type)->common.code) != INTEGER_TYPE)
     return fold (build3_stat (COND_EXPR,type,arg0,fold (build1_stat (code,type,global_trees[TI_INTEGER_ONE] )),fold (build1_stat (code,type,global_trees[TI_INTEGER_ZERO] )) )
                                );
 }
   }
  else if (tree_code_type[(int) (code)] == '<'
    && ((enum tree_code) (arg0)->common.code) == COMPOUND_EXPR)
    return build2_stat (COMPOUND_EXPR,type,((arg0)->exp.operands[0]),fold (build2_stat (code,type,((arg0)->exp.operands[1]),arg1 )) )
                                                              ;
  else if (tree_code_type[(int) (code)] == '<'
    && ((enum tree_code) (arg1)->common.code) == COMPOUND_EXPR)
    return build2_stat (COMPOUND_EXPR,type,((arg1)->exp.operands[0]),fold (build2_stat (code,type,arg0,((arg1)->exp.operands[1]) )) )
                                                              ;
  else if (tree_code_type[(int) (code)] == '2'
    || tree_code_type[(int) (code)] == '<')
    {
      if (((enum tree_code) (arg0)->common.code) == COMPOUND_EXPR)
 return build2_stat (COMPOUND_EXPR,type,((arg0)->exp.operands[0]),fold (build2_stat (code,type,((arg0)->exp.operands[1]),arg1 )) )
                ;
      if (((enum tree_code) (arg1)->common.code) == COMPOUND_EXPR
   && reorder_operands_p (arg0, ((arg1)->exp.operands[0])))
 return build2_stat (COMPOUND_EXPR,type,((arg1)->exp.operands[0]),fold (build2_stat (code,type,arg0,((arg1)->exp.operands[1]) )) )
                                        ;
      if (((enum tree_code) (arg0)->common.code) == COND_EXPR
   || tree_code_type[(int) (((enum tree_code) (arg0)->common.code))] == '<')
 {
   tem = fold_binary_op_with_conditional_arg (code, type, arg0, arg1,
                            1);
   if (tem != (tree) ((void *)0))
     return tem;
 }
      if (((enum tree_code) (arg1)->common.code) == COND_EXPR
   || tree_code_type[(int) (((enum tree_code) (arg1)->common.code))] == '<')
 {
   tem = fold_binary_op_with_conditional_arg (code, type, arg1, arg0,
                            0);
   if (tem != (tree) ((void *)0))
     return tem;
 }
    }
  switch (code)
    {
    case CONST_DECL:
      return fold (((t)->decl.initial));
    case NOP_EXPR:
    case FLOAT_EXPR:
    case CONVERT_EXPR:
    case FIX_TRUNC_EXPR:
    case FIX_CEIL_EXPR:
    case FIX_FLOOR_EXPR:
    case FIX_ROUND_EXPR:
      if (((((t)->exp.operands[0]))->common.type) == type)
 return ((t)->exp.operands[0]);
      if (((enum tree_code) (((t)->exp.operands[0]))->common.code) == NOP_EXPR
   || ((enum tree_code) (((t)->exp.operands[0]))->common.code) == CONVERT_EXPR)
 {
   tree inside_type = ((((((t)->exp.operands[0]))->exp.operands[0]))->common.type);
   tree inter_type = ((((t)->exp.operands[0]))->common.type);
   int inside_int = (((enum tree_code) (inside_type)->common.code) == INTEGER_TYPE || ((enum tree_code) (inside_type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (inside_type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (inside_type)->common.code) == CHAR_TYPE);
   int inside_ptr = (((enum tree_code) (inside_type)->common.code) == POINTER_TYPE || ((enum tree_code) (inside_type)->common.code) == REFERENCE_TYPE);
   int inside_float = ((((enum tree_code) (inside_type)->common.code) == REAL_TYPE) || (((enum tree_code) (inside_type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((inside_type)->common.type))->common.code) == REAL_TYPE));
   unsigned int inside_prec = ((inside_type)->type.precision);
   int inside_unsignedp = ((inside_type)->common.unsigned_flag);
   int inter_int = (((enum tree_code) (inter_type)->common.code) == INTEGER_TYPE || ((enum tree_code) (inter_type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (inter_type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (inter_type)->common.code) == CHAR_TYPE);
   int inter_ptr = (((enum tree_code) (inter_type)->common.code) == POINTER_TYPE || ((enum tree_code) (inter_type)->common.code) == REFERENCE_TYPE);
   int inter_float = ((((enum tree_code) (inter_type)->common.code) == REAL_TYPE) || (((enum tree_code) (inter_type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((inter_type)->common.type))->common.code) == REAL_TYPE));
   unsigned int inter_prec = ((inter_type)->type.precision);
   int inter_unsignedp = ((inter_type)->common.unsigned_flag);
   int final_int = (((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE);
   int final_ptr = (((enum tree_code) (type)->common.code) == POINTER_TYPE || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE);
   int final_float = ((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE));
   unsigned int final_prec = ((type)->type.precision);
   int final_unsignedp = ((type)->common.unsigned_flag);
   if (((inside_type)->type.main_variant) == ((type)->type.main_variant)
       && ((inter_int && final_int) || (inter_float && final_float))
       && inter_prec >= final_prec)
     return fold (build1_stat (code,type,((((t)->exp.operands[0]))->exp.operands[0]) )
                                           );
   if ((((inter_int || inter_ptr) && (inside_int || inside_ptr))
        || (inter_float && inside_float))
       && inter_prec >= inside_prec
       && (inter_float || inter_unsignedp == inside_unsignedp)
       && ! (final_prec != ((unsigned short) (((unsigned short) mode_size[((type)->type.mode)]) * 8))
      && ((type)->type.mode) == ((inter_type)->type.mode))
       && ! final_ptr)
     return fold (build1_stat (code,type,((((t)->exp.operands[0]))->exp.operands[0]) )
                                           );
   if (inside_int && inter_int && final_int
       && inside_prec < inter_prec && inter_prec < final_prec
       && inside_unsignedp && !inter_unsignedp)
     return fold (build1_stat (code,type,((((t)->exp.operands[0]))->exp.operands[0]) )
                                           );
   if (! inside_float && ! inter_float && ! final_float
       && (inter_prec > inside_prec || inter_prec > final_prec)
       && ! (inside_int && inter_int
      && inter_unsignedp != inside_unsignedp
      && inter_prec < final_prec)
       && ((inter_unsignedp && inter_prec > inside_prec)
    == (final_unsignedp && final_prec > inter_prec))
       && ! (inside_ptr && inter_prec != final_prec)
       && ! (final_ptr && inside_prec != inter_prec)
       && ! (final_prec != ((unsigned short) (((unsigned short) mode_size[((type)->type.mode)]) * 8))
      && ((type)->type.mode) == ((inter_type)->type.mode))
       && ! final_ptr)
     return fold (build1_stat (code,type,((((t)->exp.operands[0]))->exp.operands[0]) )
                                           );
 }
      if (((enum tree_code) (((t)->exp.operands[0]))->common.code) == MODIFY_EXPR
   && ((((((t)->exp.operands[0]))->exp.operands[1]))->common.constant_flag)
   && !(((enum tree_code) (((((t)->exp.operands[0]))->exp.operands[0]))->common.code) == COMPONENT_REF
        && ((((((((t)->exp.operands[0]))->exp.operands[0]))->exp.operands[1]))->decl.bit_field_flag)))
 {
   tree prev = ((t)->exp.operands[0]);
   tem = copy_node_stat (t );
   ((tem)->exp.operands[0]) = ((prev)->exp.operands[1]);
   tem = build2_stat (COMPOUND_EXPR,((tem)->common.type),prev,fold (tem) );
   ((tem)->common.nowarning_flag) = 1;
   ((tem)->common.used_flag) = 1;
   return tem;
 }
      if ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
   && ((enum tree_code) (type)->common.code) != BOOLEAN_TYPE
   && ((enum tree_code) (((t)->exp.operands[0]))->common.code) == BIT_AND_EXPR
   && ((enum tree_code) (((((t)->exp.operands[0]))->exp.operands[1]))->common.code) == INTEGER_CST)
 {
   tree and = ((t)->exp.operands[0]);
   tree and0 = ((and)->exp.operands[0]), and1 = ((and)->exp.operands[1]);
   int change = 0;
   if (((((and)->common.type))->common.unsigned_flag)
       || (((type)->type.precision)
    <= ((((and)->common.type))->type.precision)))
     change = 1;
   else if (((((and1)->common.type))->type.precision)
     <= (8 * 4)
     && host_integerp (and1, 1))
     {
       unsigned long cst;
       cst = tree_low_cst (and1, 1);
       cst &= (long) -1
       << (((((and1)->common.type))->type.precision) - 1);
       change = (cst == 0);
     }
   if (change)
     return fold (build2_stat (BIT_AND_EXPR,type,fold_convert (type, and0),fold_convert (type, and1) )
                               );
 }
      if ((((enum tree_code) (((t)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((t)->common.type))->common.code) == REFERENCE_TYPE)
   && tree_code_type[(int) (((enum tree_code) (arg0)->common.code))] == '2'
   && ((enum tree_code) (((arg0)->exp.operands[0]))->common.code) == NOP_EXPR
   && (((enum tree_code) (((((arg0)->exp.operands[0]))->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((((arg0)->exp.operands[0]))->common.type))->common.code) == REFERENCE_TYPE))
 {
   tree arg00 = ((arg0)->exp.operands[0]);
   tree t0 = ((t)->common.type);
   tree t1 = ((arg00)->common.type);
   tree tt0 = ((t0)->common.type);
   tree tt1 = ((t1)->common.type);
   tree s0 = ((tt0)->type.size);
   tree s1 = ((tt1)->type.size);
   if (s0 && s1 && operand_equal_p (s0, s1, OEP_ONLY_CONST))
     return build2_stat (((enum tree_code) (arg0)->common.code),t0,fold_convert (t0, arg00),((arg0)->exp.operands[1]) )
                             ;
 }
      tem = fold_convert_const (code, type, arg0);
      return tem ? tem : t;
    case VIEW_CONVERT_EXPR:
      if (((enum tree_code) (((t)->exp.operands[0]))->common.code) == VIEW_CONVERT_EXPR)
 return build1_stat (VIEW_CONVERT_EXPR,type,((((t)->exp.operands[0]))->exp.operands[0]) )
                                               ;
      return t;
    case COMPONENT_REF:
      if (((enum tree_code) (arg0)->common.code) == CONSTRUCTOR
   && ! type_contains_placeholder_p (((arg0)->common.type)))
 {
   tree m = purpose_member (arg1, ((arg0)->exp.operands[0]));
   if (m)
     return ((m)->list.value1);
 }
      return t;
    case RANGE_EXPR:
      if (((t)->common.constant_flag) != wins)
 {
   tem = copy_node_stat (t );
   ((tem)->common.constant_flag) = wins;
   ((tem)->common.invariant_flag) = wins;
   return tem;
 }
      return t;
    case NEGATE_EXPR:
      if (negate_expr_p (arg0))
 return fold_convert (type, negate_expr (arg0));
      return t;
    case ABS_EXPR:
      if (((enum tree_code) (arg0)->common.code) == INTEGER_CST || ((enum tree_code) (arg0)->common.code) == REAL_CST)
 return fold_abs_const (arg0, type);
      else if (((enum tree_code) (arg0)->common.code) == NEGATE_EXPR)
 return fold (build1_stat (ABS_EXPR,type,((arg0)->exp.operands[0]) ));
      else if (((enum tree_code) (arg0)->common.code) == NOP_EXPR
        && ((enum tree_code) (type)->common.code) == REAL_TYPE)
 {
   tree targ0 = strip_float_extensions (arg0);
   if (targ0 != arg0)
     return fold_convert (type, fold (build1_stat (ABS_EXPR,((targ0)->common.type),targ0 )
                 ));
 }
      else if (tree_expr_nonnegative_p (arg0))
 return arg0;
      return t;
    case CONJ_EXPR:
      if (((enum tree_code) (((arg0)->common.type))->common.code) != COMPLEX_TYPE)
 return fold_convert (type, arg0);
      else if (((enum tree_code) (arg0)->common.code) == COMPLEX_EXPR)
 return build2_stat (COMPLEX_EXPR,type,((arg0)->exp.operands[0]),negate_expr (((arg0)->exp.operands[1])) )
                                              ;
      else if (((enum tree_code) (arg0)->common.code) == COMPLEX_CST)
 return build_complex (type, ((arg0)->complex.real),
         negate_expr (((arg0)->complex.imag)));
      else if (((enum tree_code) (arg0)->common.code) == PLUS_EXPR || ((enum tree_code) (arg0)->common.code) == MINUS_EXPR)
 return fold (build2_stat (((enum tree_code) (arg0)->common.code),type,fold (build1_stat (CONJ_EXPR,type,((arg0)->exp.operands[0]) )),fold (build1_stat (CONJ_EXPR,type,((arg0)->exp.operands[1]) )) )
                                 );
      else if (((enum tree_code) (arg0)->common.code) == CONJ_EXPR)
 return ((arg0)->exp.operands[0]);
      return t;
    case BIT_NOT_EXPR:
      if (((enum tree_code) (arg0)->common.code) == INTEGER_CST)
        return fold_not_const (arg0, type);
      else if (((enum tree_code) (arg0)->common.code) == BIT_NOT_EXPR)
 return ((arg0)->exp.operands[0]);
      return t;
    case PLUS_EXPR:
      if (((enum tree_code) (arg1)->common.code) == NEGATE_EXPR)
 return fold (build2_stat (MINUS_EXPR,type,arg0,((arg1)->exp.operands[0]) ));
      if (((enum tree_code) (arg0)->common.code) == NEGATE_EXPR
   && reorder_operands_p (((arg0)->exp.operands[0]), arg1))
 return fold (build2_stat (MINUS_EXPR,type,arg1,((arg0)->exp.operands[0]) ));
      if (! ((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)))
 {
   if (integer_zerop (arg1))
     return non_lvalue (fold_convert (type, arg0));
   if (((enum tree_code) (arg0)->common.code) == BIT_AND_EXPR
       && ((enum tree_code) (arg1)->common.code) == BIT_AND_EXPR
       && ((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == INTEGER_CST
       && ((enum tree_code) (((arg1)->exp.operands[1]))->common.code) == INTEGER_CST
       && integer_zerop (const_binop (BIT_AND_EXPR,
          ((arg0)->exp.operands[1]),
          ((arg1)->exp.operands[1]), 0)))
     {
       code = BIT_IOR_EXPR;
       goto bit_ior;
     }
   if ((((enum tree_code) (arg0)->common.code) == PLUS_EXPR
        && ((enum tree_code) (arg1)->common.code) == MULT_EXPR)
       || (((enum tree_code) (arg1)->common.code) == PLUS_EXPR
    && ((enum tree_code) (arg0)->common.code) == MULT_EXPR))
     {
       tree parg0, parg1, parg, marg;
       if (((enum tree_code) (arg0)->common.code) == PLUS_EXPR)
  parg = arg0, marg = arg1;
       else
  parg = arg1, marg = arg0;
       parg0 = ((parg)->exp.operands[0]);
       parg1 = ((parg)->exp.operands[1]);
       while ((((enum tree_code) (parg0)->common.code) == NOP_EXPR || ((enum tree_code) (parg0)->common.code) == CONVERT_EXPR || ((enum tree_code) (parg0)->common.code) == NON_LVALUE_EXPR) && ((parg0)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((parg0)->common.type))->type.mode) == ((((((parg0)->exp.operands[0]))->common.type))->type.mode))) (parg0) = ((parg0)->exp.operands[0]);
       while ((((enum tree_code) (parg1)->common.code) == NOP_EXPR || ((enum tree_code) (parg1)->common.code) == CONVERT_EXPR || ((enum tree_code) (parg1)->common.code) == NON_LVALUE_EXPR) && ((parg1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((parg1)->common.type))->type.mode) == ((((((parg1)->exp.operands[0]))->common.type))->type.mode))) (parg1) = ((parg1)->exp.operands[0]);
       if (((enum tree_code) (parg0)->common.code) == MULT_EXPR
    && ((enum tree_code) (parg1)->common.code) != MULT_EXPR)
  return fold (build2_stat (PLUS_EXPR,type,fold (build2_stat (PLUS_EXPR,type,fold_convert (type, parg0),fold_convert (type, marg) )),fold_convert (type, parg1) )
                                    );
       if (((enum tree_code) (parg0)->common.code) != MULT_EXPR
    && ((enum tree_code) (parg1)->common.code) == MULT_EXPR)
  return fold (build2_stat (PLUS_EXPR,type,fold (build2_stat (PLUS_EXPR,type,fold_convert (type, parg1),fold_convert (type, marg) )),fold_convert (type, parg0) )
                                    );
     }
   if (((enum tree_code) (arg0)->common.code) == MULT_EXPR && ((enum tree_code) (arg1)->common.code) == MULT_EXPR)
     {
       tree arg00, arg01, arg10, arg11;
       tree alt0 = (tree) ((void *)0), alt1 = (tree) ((void *)0), same;
       arg00 = ((arg0)->exp.operands[0]);
       arg01 = ((arg0)->exp.operands[1]);
       arg10 = ((arg1)->exp.operands[0]);
       arg11 = ((arg1)->exp.operands[1]);
       same = (tree) ((void *)0);
       if (operand_equal_p (arg01, arg11, 0))
  same = arg01, alt0 = arg00, alt1 = arg10;
       else if (operand_equal_p (arg00, arg10, 0))
  same = arg00, alt0 = arg01, alt1 = arg11;
       else if (operand_equal_p (arg00, arg11, 0))
  same = arg00, alt0 = arg01, alt1 = arg10;
       else if (operand_equal_p (arg01, arg10, 0))
  same = arg01, alt0 = arg00, alt1 = arg11;
       else if (((enum tree_code) (arg01)->common.code) == INTEGER_CST
         && ((enum tree_code) (arg11)->common.code) == INTEGER_CST
         && (((arg01)->int_cst.int_cst).high) == 0
         && (((arg11)->int_cst.int_cst).high) == 0)
  {
    long int01, int11, tmp;
    int01 = (((arg01)->int_cst.int_cst).low);
    int11 = (((arg11)->int_cst.int_cst).low);
    if ((int01 >= 0 ? int01 : -int01)
        < (int11 >= 0 ? int11 : -int11))
      {
        tmp = int01, int01 = int11, int11 = tmp;
        alt0 = arg00, arg00 = arg10, arg10 = alt0;
        alt0 = arg01, arg01 = arg11, arg11 = alt0;
      }
    if (exact_log2_wide ((unsigned long) (int11)) > 0 && int01 % int11 == 0)
      {
        alt0 = fold (build2_stat (MULT_EXPR,type,arg00,build_int_2_wide ((unsigned long) (int01 / int11), (long) (0)) )
                                       );
        alt1 = arg10;
        same = arg11;
      }
  }
       if (same)
  return fold (build2_stat (MULT_EXPR,type,fold (build2_stat (PLUS_EXPR,type,alt0,alt1 )),same )
              );
     }
 }
      else
 {
   if (fold_real_zero_addition_p (((arg0)->common.type), arg1, 0))
     return non_lvalue (fold_convert (type, arg0));
   if (fold_real_zero_addition_p (((arg1)->common.type), arg0, 0))
     return non_lvalue (fold_convert (type, arg1));
   if (operand_equal_p (arg0, arg1, 0)
       && (((enum tree_code) (type)->common.code) == REAL_TYPE))
     return fold (build2_stat (MULT_EXPR,type,arg0,build_real (type, dconst2) )
                                );
   if (flag_unsafe_math_optimizations
       && ((enum tree_code) (arg0)->common.code) == MULT_EXPR
       && ((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == REAL_CST
       && ! ((((arg0)->exp.operands[1]))->common.static_flag)
       && operand_equal_p (((arg0)->exp.operands[0]), arg1, 0))
     {
       struct real_value c;
       c = (*((((arg0)->exp.operands[1]))->real_cst.real_cst_ptr));
       real_arithmetic (&c, PLUS_EXPR, &c, &dconst1);
       return fold (build2_stat (MULT_EXPR,type,arg1,build_real (type, c) )
                            );
     }
   if (flag_unsafe_math_optimizations
       && ((enum tree_code) (arg1)->common.code) == MULT_EXPR
       && ((enum tree_code) (((arg1)->exp.operands[1]))->common.code) == REAL_CST
       && ! ((((arg1)->exp.operands[1]))->common.static_flag)
       && operand_equal_p (((arg1)->exp.operands[0]), arg0, 0))
     {
       struct real_value c;
       c = (*((((arg1)->exp.operands[1]))->real_cst.real_cst_ptr));
       real_arithmetic (&c, PLUS_EXPR, &c, &dconst1);
       return fold (build2_stat (MULT_EXPR,type,arg0,build_real (type, c) )
                            );
     }
   if (flag_unsafe_math_optimizations
       && ((enum tree_code) (arg0)->common.code) == MULT_EXPR
       && ((enum tree_code) (arg1)->common.code) == MULT_EXPR
       && ((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == REAL_CST
       && ! ((((arg0)->exp.operands[1]))->common.static_flag)
       && ((enum tree_code) (((arg1)->exp.operands[1]))->common.code) == REAL_CST
       && ! ((((arg1)->exp.operands[1]))->common.static_flag)
       && operand_equal_p (((arg0)->exp.operands[0]),
      ((arg1)->exp.operands[0]), 0))
     {
       struct real_value c1, c2;
       c1 = (*((((arg0)->exp.operands[1]))->real_cst.real_cst_ptr));
       c2 = (*((((arg1)->exp.operands[1]))->real_cst.real_cst_ptr));
       real_arithmetic (&c1, PLUS_EXPR, &c1, &c2);
       return fold (build2_stat (MULT_EXPR,type,((arg0)->exp.operands[0]),build_real (type, c1) )
                             );
     }
          if (flag_unsafe_math_optimizations
              && ((enum tree_code) (arg1)->common.code) == PLUS_EXPR
              && ((enum tree_code) (arg0)->common.code) != MULT_EXPR)
            {
              tree tree10 = ((arg1)->exp.operands[0]);
              tree tree11 = ((arg1)->exp.operands[1]);
              if (((enum tree_code) (tree11)->common.code) == MULT_EXPR
    && ((enum tree_code) (tree10)->common.code) == MULT_EXPR)
                {
                  tree tree0;
                  tree0 = fold (build2_stat (PLUS_EXPR,type,arg0,tree10 ));
                  return fold (build2_stat (PLUS_EXPR,type,tree0,tree11 ));
                }
            }
          if (flag_unsafe_math_optimizations
              && ((enum tree_code) (arg0)->common.code) == PLUS_EXPR
              && ((enum tree_code) (arg1)->common.code) != MULT_EXPR)
            {
              tree tree00 = ((arg0)->exp.operands[0]);
              tree tree01 = ((arg0)->exp.operands[1]);
              if (((enum tree_code) (tree01)->common.code) == MULT_EXPR
    && ((enum tree_code) (tree00)->common.code) == MULT_EXPR)
                {
                  tree tree0;
                  tree0 = fold (build2_stat (PLUS_EXPR,type,tree01,arg1 ));
                  return fold (build2_stat (PLUS_EXPR,type,tree00,tree0 ));
                }
            }
 }
     bit_rotate:
      {
 enum tree_code code0, code1;
 code0 = ((enum tree_code) (arg0)->common.code);
 code1 = ((enum tree_code) (arg1)->common.code);
 if (((code0 == RSHIFT_EXPR && code1 == LSHIFT_EXPR)
      || (code1 == RSHIFT_EXPR && code0 == LSHIFT_EXPR))
     && operand_equal_p (((arg0)->exp.operands[0]),
           ((arg1)->exp.operands[0]), 0)
     && ((((((arg0)->exp.operands[0]))->common.type))->common.unsigned_flag))
   {
     tree tree01, tree11;
     enum tree_code code01, code11;
     tree01 = ((arg0)->exp.operands[1]);
     tree11 = ((arg1)->exp.operands[1]);
     while ((((enum tree_code) (tree01)->common.code) == NOP_EXPR || ((enum tree_code) (tree01)->common.code) == CONVERT_EXPR || ((enum tree_code) (tree01)->common.code) == NON_LVALUE_EXPR) && ((tree01)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((tree01)->common.type))->type.mode) == ((((((tree01)->exp.operands[0]))->common.type))->type.mode))) (tree01) = ((tree01)->exp.operands[0]);
     while ((((enum tree_code) (tree11)->common.code) == NOP_EXPR || ((enum tree_code) (tree11)->common.code) == CONVERT_EXPR || ((enum tree_code) (tree11)->common.code) == NON_LVALUE_EXPR) && ((tree11)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((tree11)->common.type))->type.mode) == ((((((tree11)->exp.operands[0]))->common.type))->type.mode))) (tree11) = ((tree11)->exp.operands[0]);
     code01 = ((enum tree_code) (tree01)->common.code);
     code11 = ((enum tree_code) (tree11)->common.code);
     if (code01 == INTEGER_CST
  && code11 == INTEGER_CST
  && (((tree01)->int_cst.int_cst).high) == 0
  && (((tree11)->int_cst.int_cst).high) == 0
  && (((((tree01)->int_cst.int_cst).low) + (((tree11)->int_cst.int_cst).low))
      == ((((((arg0)->exp.operands[0]))->common.type))->type.precision)))
       return build2_stat (LROTATE_EXPR,type,((arg0)->exp.operands[0]),code0 == LSHIFT_EXPR ? tree01 : tree11 )
                                               ;
     else if (code11 == MINUS_EXPR)
       {
  tree tree110, tree111;
  tree110 = ((tree11)->exp.operands[0]);
  tree111 = ((tree11)->exp.operands[1]);
  while ((((enum tree_code) (tree110)->common.code) == NOP_EXPR || ((enum tree_code) (tree110)->common.code) == CONVERT_EXPR || ((enum tree_code) (tree110)->common.code) == NON_LVALUE_EXPR) && ((tree110)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((tree110)->common.type))->type.mode) == ((((((tree110)->exp.operands[0]))->common.type))->type.mode))) (tree110) = ((tree110)->exp.operands[0]);
  while ((((enum tree_code) (tree111)->common.code) == NOP_EXPR || ((enum tree_code) (tree111)->common.code) == CONVERT_EXPR || ((enum tree_code) (tree111)->common.code) == NON_LVALUE_EXPR) && ((tree111)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((tree111)->common.type))->type.mode) == ((((((tree111)->exp.operands[0]))->common.type))->type.mode))) (tree111) = ((tree111)->exp.operands[0]);
  if (((enum tree_code) (tree110)->common.code) == INTEGER_CST
      && 0 == compare_tree_int (tree110,
           ((((((arg0)->exp.operands[0]))->common.type))->type.precision)
                    )
      && operand_equal_p (tree01, tree111, 0))
    return build2_stat ((code0 == LSHIFT_EXPR ? LROTATE_EXPR : RROTATE_EXPR),type,((arg0)->exp.operands[0]),tree01 )
                                          ;
       }
     else if (code01 == MINUS_EXPR)
       {
  tree tree010, tree011;
  tree010 = ((tree01)->exp.operands[0]);
  tree011 = ((tree01)->exp.operands[1]);
  while ((((enum tree_code) (tree010)->common.code) == NOP_EXPR || ((enum tree_code) (tree010)->common.code) == CONVERT_EXPR || ((enum tree_code) (tree010)->common.code) == NON_LVALUE_EXPR) && ((tree010)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((tree010)->common.type))->type.mode) == ((((((tree010)->exp.operands[0]))->common.type))->type.mode))) (tree010) = ((tree010)->exp.operands[0]);
  while ((((enum tree_code) (tree011)->common.code) == NOP_EXPR || ((enum tree_code) (tree011)->common.code) == CONVERT_EXPR || ((enum tree_code) (tree011)->common.code) == NON_LVALUE_EXPR) && ((tree011)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((tree011)->common.type))->type.mode) == ((((((tree011)->exp.operands[0]))->common.type))->type.mode))) (tree011) = ((tree011)->exp.operands[0]);
  if (((enum tree_code) (tree010)->common.code) == INTEGER_CST
      && 0 == compare_tree_int (tree010,
           ((((((arg0)->exp.operands[0]))->common.type))->type.precision)
                    )
      && operand_equal_p (tree11, tree011, 0))
    return build2_stat ((code0 != LSHIFT_EXPR ? LROTATE_EXPR : RROTATE_EXPR),type,((arg0)->exp.operands[0]),tree11 )
                                          ;
       }
   }
      }
    associate:
      if (! wins
   && (! ((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)) || flag_unsafe_math_optimizations))
 {
   tree var0, con0, lit0, minus_lit0;
   tree var1, con1, lit1, minus_lit1;
   var0 = split_tree (arg0, code, &con0, &lit0, &minus_lit0, 0);
   var1 = split_tree (arg1, code, &con1, &lit1, &minus_lit1,
        code == MINUS_EXPR);
   if (2 < ((var0 != 0) + (var1 != 0)
     + (con0 != 0) + (con1 != 0)
     + (lit0 != 0) + (lit1 != 0)
     + (minus_lit0 != 0) + (minus_lit1 != 0)))
     {
       if (code == MINUS_EXPR)
  code = PLUS_EXPR;
       var0 = associate_trees (var0, var1, code, type);
       con0 = associate_trees (con0, con1, code, type);
       lit0 = associate_trees (lit0, lit1, code, type);
       minus_lit0 = associate_trees (minus_lit0, minus_lit1, code, type);
       if (minus_lit0 && lit0)
  {
    if (((enum tree_code) (lit0)->common.code) == INTEGER_CST
        && ((enum tree_code) (minus_lit0)->common.code) == INTEGER_CST
        && tree_int_cst_lt (lit0, minus_lit0))
      {
        minus_lit0 = associate_trees (minus_lit0, lit0,
          MINUS_EXPR, type);
        lit0 = 0;
      }
    else
      {
        lit0 = associate_trees (lit0, minus_lit0,
           MINUS_EXPR, type);
        minus_lit0 = 0;
      }
  }
       if (minus_lit0)
  {
    if (con0 == 0)
      return fold_convert (type,
      associate_trees (var0, minus_lit0,
         MINUS_EXPR, type));
    else
      {
        con0 = associate_trees (con0, minus_lit0,
           MINUS_EXPR, type);
        return fold_convert (type,
        associate_trees (var0, con0,
           PLUS_EXPR, type));
      }
  }
       con0 = associate_trees (con0, lit0, code, type);
       return fold_convert (type, associate_trees (var0, con0,
         code, type));
     }
 }
    binary:
      if (wins)
 t1 = const_binop (code, arg0, arg1, 0);
      if (t1 != (tree) ((void *)0))
 {
   if (((t1)->common.type) != type)
     t1 = fold_convert (type, t1);
   return t1;
 }
      return t;
    case MINUS_EXPR:
      if (((enum tree_code) (arg1)->common.code) == NEGATE_EXPR)
 return fold (build2_stat (PLUS_EXPR,type,arg0,((arg1)->exp.operands[0]) ));
      if (((enum tree_code) (arg0)->common.code) == NEGATE_EXPR
   && (((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE))
       || ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE) && flag_wrapv && !flag_trapv))
   && negate_expr_p (arg1)
   && reorder_operands_p (arg0, arg1))
 return fold (build2_stat (MINUS_EXPR,type,negate_expr (arg1),((arg0)->exp.operands[0]) )
                               );
      if (! ((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)))
 {
   if (! wins && integer_zerop (arg0))
     return negate_expr (fold_convert (type, arg1));
   if (integer_zerop (arg1))
     return non_lvalue (fold_convert (type, arg0));
   if (!((arg0)->common.side_effects_flag)
       && ((enum tree_code) (arg1)->common.code) == BIT_AND_EXPR)
     {
       if (operand_equal_p (arg0, ((arg1)->exp.operands[1]), 0))
  return fold (build2_stat (BIT_AND_EXPR,type,fold (build1_stat (BIT_NOT_EXPR,type,((arg1)->exp.operands[0]) )),arg0 )
              );
       if (operand_equal_p (arg0, ((arg1)->exp.operands[0]), 0))
  return fold (build2_stat (BIT_AND_EXPR,type,fold (build1_stat (BIT_NOT_EXPR,type,((arg1)->exp.operands[1]) )),arg0 )
              );
     }
   if (((enum tree_code) (arg0)->common.code) == BIT_AND_EXPR
       && ((enum tree_code) (arg1)->common.code) == BIT_AND_EXPR
       && operand_equal_p (((arg0)->exp.operands[0]),
      ((arg1)->exp.operands[0]), 0))
     {
       tree mask0 = ((arg0)->exp.operands[1]);
       tree mask1 = ((arg1)->exp.operands[1]);
       tree tem = fold (build1_stat (BIT_NOT_EXPR,type,mask0 ));
       if (operand_equal_p (tem, mask1, 0))
  {
    tem = fold (build2_stat (BIT_XOR_EXPR,type,((arg0)->exp.operands[0]),mask1 )
                                        );
    return fold (build2_stat (MINUS_EXPR,type,tem,mask1 ));
  }
     }
 }
      else if (fold_real_zero_addition_p (((arg0)->common.type), arg1, 1))
 return non_lvalue (fold_convert (type, arg0));
      else if (!wins && fold_real_zero_addition_p (((arg1)->common.type), arg0, 0))
 return negate_expr (fold_convert (type, arg1));
      if ((! ((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)) || flag_unsafe_math_optimizations)
   && operand_equal_p (arg0, arg1, 0))
 return fold_convert (type, global_trees[TI_INTEGER_ZERO]);
      if (!wins && negate_expr_p (arg1)
   && (((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE))
       || ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE) && flag_wrapv && !flag_trapv)))
 return fold (build2_stat (PLUS_EXPR,type,arg0,negate_expr (arg1) ));
      if (((enum tree_code) (arg0)->common.code) == MULT_EXPR
   && ((enum tree_code) (arg1)->common.code) == MULT_EXPR
   && ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE) || flag_unsafe_math_optimizations))
 {
   if (operand_equal_p (((arg0)->exp.operands[1]),
          ((arg1)->exp.operands[1]), 0))
     return fold (build2_stat (MULT_EXPR,type,fold (build2_stat (MINUS_EXPR,type,((arg0)->exp.operands[0]),((arg1)->exp.operands[0]) )),((arg0)->exp.operands[1]) )
                            );
   if (operand_equal_p (((arg0)->exp.operands[0]),
          ((arg1)->exp.operands[0]), 0))
     return fold (build2_stat (MULT_EXPR,type,((arg0)->exp.operands[0]),fold (build2_stat (MINUS_EXPR,type,((arg0)->exp.operands[1]),((arg1)->exp.operands[1]) )) )
                                     );
 }
      goto associate;
    case MULT_EXPR:
      if (((enum tree_code) (arg0)->common.code) == NEGATE_EXPR && negate_expr_p (arg1))
 return fold (build2_stat (MULT_EXPR,type,((arg0)->exp.operands[0]),negate_expr (arg1) )
                           );
      if (((enum tree_code) (arg1)->common.code) == NEGATE_EXPR && negate_expr_p (arg0))
 return fold (build2_stat (MULT_EXPR,type,negate_expr (arg0),((arg1)->exp.operands[0]) )
                               );
      if (! ((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)))
 {
   if (integer_zerop (arg1))
     return omit_one_operand (type, arg1, arg0);
   if (integer_onep (arg1))
     return non_lvalue (fold_convert (type, arg0));
   if (((enum tree_code) (arg1)->common.code) == LSHIFT_EXPR
       && integer_onep (((arg1)->exp.operands[0])))
     return fold (build2_stat (LSHIFT_EXPR,type,arg0,((arg1)->exp.operands[1]) )
                            );
   if (((enum tree_code) (arg0)->common.code) == LSHIFT_EXPR
       && integer_onep (((arg0)->exp.operands[0])))
     return fold (build2_stat (LSHIFT_EXPR,type,arg1,((arg0)->exp.operands[1]) )
                            );
   if (((enum tree_code) (arg1)->common.code) == INTEGER_CST
       && 0 != (tem = extract_muldiv (((t)->exp.operands[0]),
          fold_convert (type, arg1),
          code, (tree) ((void *)0))))
     return fold_convert (type, tem);
 }
      else
 {
   if (!(((mode_class[((((arg0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
       && !(((mode_class[((((arg0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations)
       && real_zerop (arg1))
     return omit_one_operand (type, arg1, arg0);
   if (!(flag_signaling_nans && (((mode_class[((((arg0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
       && real_onep (arg1))
     return non_lvalue (fold_convert (type, arg0));
   if (!(flag_signaling_nans && (((mode_class[((((arg0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
       && real_minus_onep (arg1))
     return fold_convert (type, negate_expr (arg0));
   if (flag_unsafe_math_optimizations
       && ((enum tree_code) (arg0)->common.code) == RDIV_EXPR
       && ((enum tree_code) (arg1)->common.code) == REAL_CST
       && ((enum tree_code) (((arg0)->exp.operands[0]))->common.code) == REAL_CST)
     {
       tree tem = const_binop (MULT_EXPR, ((arg0)->exp.operands[0]),
          arg1, 0);
       if (tem)
  return fold (build2_stat (RDIV_EXPR,type,tem,((arg0)->exp.operands[1]) )
                                );
     }
   if (flag_unsafe_math_optimizations)
     {
       enum built_in_function fcode0 = builtin_mathfn_code (arg0);
       enum built_in_function fcode1 = builtin_mathfn_code (arg1);
       if (fcode0 == fcode1 && (((fcode0) == BUILT_IN_SQRT || (fcode0) == BUILT_IN_SQRTF || (fcode0) == BUILT_IN_SQRTL) || ((fcode0) == BUILT_IN_CBRT || (fcode0) == BUILT_IN_CBRTF || (fcode0) == BUILT_IN_CBRTL)))
  {
    tree rootfn, arg, arglist;
    tree arg00 = ((((arg0)->exp.operands[1]))->list.value1);
    tree arg10 = ((((arg1)->exp.operands[1]))->list.value1);
    if (((fcode0) == BUILT_IN_SQRT || (fcode0) == BUILT_IN_SQRTF || (fcode0) == BUILT_IN_SQRTL)
        && operand_equal_p (arg00, arg10, 0)
        && ! (flag_signaling_nans && (((mode_class[((type)->type.mode)] == MODE_FLOAT || mode_class[((type)->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((type)->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)))
      return arg00;
    rootfn = ((((arg0)->exp.operands[0]))->exp.operands[0]);
    arg = fold (build2_stat (MULT_EXPR,type,arg00,arg10 ));
    arglist = build_tree_list_stat((tree) ((void *)0),arg );
    return build_function_call_expr (rootfn, arglist);
  }
       if (fcode0 == fcode1 && (((fcode0) == BUILT_IN_EXP10 || (fcode0) == BUILT_IN_EXP10F || (fcode0) == BUILT_IN_EXP10L || (fcode0) == BUILT_IN_POW10 || (fcode0) == BUILT_IN_POW10F || (fcode0) == BUILT_IN_POW10L) || (fcode0) == BUILT_IN_EXP || (fcode0) == BUILT_IN_EXPF || (fcode0) == BUILT_IN_EXPL || (fcode0) == BUILT_IN_EXP2 || (fcode0) == BUILT_IN_EXP2F || (fcode0) == BUILT_IN_EXP2L))
  {
    tree expfn = ((((arg0)->exp.operands[0]))->exp.operands[0]);
    tree arg = build2_stat (PLUS_EXPR,type,((((arg0)->exp.operands[1]))->list.value1),((((arg1)->exp.operands[1]))->list.value1) )
                                             ;
    tree arglist = build_tree_list_stat((tree) ((void *)0),fold (arg) );
    return build_function_call_expr (expfn, arglist);
  }
       if ((fcode0 == BUILT_IN_POW && fcode1 == BUILT_IN_POW)
    || (fcode0 == BUILT_IN_POWF && fcode1 == BUILT_IN_POWF)
    || (fcode0 == BUILT_IN_POWL && fcode1 == BUILT_IN_POWL))
  {
    tree arg00 = ((((arg0)->exp.operands[1]))->list.value1);
    tree arg01 = ((((((arg0)->exp.operands[1]))->common.chain))->list.value1)
                 ;
    tree arg10 = ((((arg1)->exp.operands[1]))->list.value1);
    tree arg11 = ((((((arg1)->exp.operands[1]))->common.chain))->list.value1)
                 ;
    if (operand_equal_p (arg01, arg11, 0))
      {
        tree powfn = ((((arg0)->exp.operands[0]))->exp.operands[0]);
        tree arg = build2_stat (MULT_EXPR,type,arg00,arg10 );
        tree arglist = tree_cons_stat ((tree) ((void *)0),fold (arg),build_tree_list_stat((tree) ((void *)0),arg01 ) )
                ;
        return build_function_call_expr (powfn, arglist);
      }
    if (operand_equal_p (arg00, arg10, 0))
      {
        tree powfn = ((((arg0)->exp.operands[0]))->exp.operands[0]);
        tree arg = fold (build2_stat (PLUS_EXPR,type,arg01,arg11 ));
        tree arglist = tree_cons_stat ((tree) ((void *)0),arg00,build_tree_list_stat((tree) ((void *)0),arg ) )
              ;
        return build_function_call_expr (powfn, arglist);
      }
  }
       if (((fcode0 == BUILT_IN_TAN && fcode1 == BUILT_IN_COS)
     || (fcode0 == BUILT_IN_TANF && fcode1 == BUILT_IN_COSF)
     || (fcode0 == BUILT_IN_TANL && fcode1 == BUILT_IN_COSL)
     || (fcode0 == BUILT_IN_COS && fcode1 == BUILT_IN_TAN)
     || (fcode0 == BUILT_IN_COSF && fcode1 == BUILT_IN_TANF)
     || (fcode0 == BUILT_IN_COSL && fcode1 == BUILT_IN_TANL))
    && operand_equal_p (((((arg0)->exp.operands[1]))->list.value1),
          ((((arg1)->exp.operands[1]))->list.value1), 0))
  {
    tree sinfn = mathfn_built_in (type, BUILT_IN_SIN);
    if (sinfn != (tree) ((void *)0))
      return build_function_call_expr (sinfn,
           ((arg0)->exp.operands[1]));
  }
       if (fcode1 == BUILT_IN_POW
    || fcode1 == BUILT_IN_POWF
    || fcode1 == BUILT_IN_POWL)
  {
    tree arg10 = ((((arg1)->exp.operands[1]))->list.value1);
    tree arg11 = ((((((arg1)->exp.operands[1]))->common.chain))->list.value1)
                 ;
    if (((enum tree_code) (arg11)->common.code) == REAL_CST
        && ! ((arg11)->common.static_flag)
        && operand_equal_p (arg0, arg10, 0))
      {
        tree powfn = ((((arg1)->exp.operands[0]))->exp.operands[0]);
        struct real_value c;
        tree arg, arglist;
        c = (*((arg11)->real_cst.real_cst_ptr));
        real_arithmetic (&c, PLUS_EXPR, &c, &dconst1);
        arg = build_real (type, c);
        arglist = build_tree_list_stat((tree) ((void *)0),arg );
        arglist = tree_cons_stat ((tree) ((void *)0),arg0,arglist );
        return build_function_call_expr (powfn, arglist);
      }
  }
       if (fcode0 == BUILT_IN_POW
    || fcode0 == BUILT_IN_POWF
    || fcode0 == BUILT_IN_POWL)
  {
    tree arg00 = ((((arg0)->exp.operands[1]))->list.value1);
    tree arg01 = ((((((arg0)->exp.operands[1]))->common.chain))->list.value1)
                 ;
    if (((enum tree_code) (arg01)->common.code) == REAL_CST
        && ! ((arg01)->common.static_flag)
        && operand_equal_p (arg1, arg00, 0))
      {
        tree powfn = ((((arg0)->exp.operands[0]))->exp.operands[0]);
        struct real_value c;
        tree arg, arglist;
        c = (*((arg01)->real_cst.real_cst_ptr));
        real_arithmetic (&c, PLUS_EXPR, &c, &dconst1);
        arg = build_real (type, c);
        arglist = build_tree_list_stat((tree) ((void *)0),arg );
        arglist = tree_cons_stat ((tree) ((void *)0),arg1,arglist );
        return build_function_call_expr (powfn, arglist);
      }
  }
       if (! optimize_size
    && operand_equal_p (arg0, arg1, 0))
  {
    tree powfn = mathfn_built_in (type, BUILT_IN_POW);
    if (powfn)
      {
        tree arg = build_real (type, dconst2);
        tree arglist = build_tree_list_stat((tree) ((void *)0),arg );
        arglist = tree_cons_stat ((tree) ((void *)0),arg0,arglist );
        return build_function_call_expr (powfn, arglist);
      }
  }
     }
 }
      goto associate;
    case BIT_IOR_EXPR:
    bit_ior:
      if (integer_all_onesp (arg1))
 return omit_one_operand (type, arg1, arg0);
      if (integer_zerop (arg1))
 return non_lvalue (fold_convert (type, arg0));
      if (operand_equal_p (arg0, arg1, 0))
 return non_lvalue (fold_convert (type, arg0));
      if (((enum tree_code) (arg0)->common.code) == BIT_NOT_EXPR
   && operand_equal_p (((arg0)->exp.operands[0]), arg1, 0))
 {
   t1 = build_int_2_wide ((unsigned long) (-1), (long) (-1));
   ((t1)->common.type) = type;
   force_fit_type (t1, 0);
   return omit_one_operand (type, t1, arg1);
 }
      if (((enum tree_code) (arg1)->common.code) == BIT_NOT_EXPR
   && operand_equal_p (arg0, ((arg1)->exp.operands[0]), 0))
 {
   t1 = build_int_2_wide ((unsigned long) (-1), (long) (-1));
   ((t1)->common.type) = type;
   force_fit_type (t1, 0);
   return omit_one_operand (type, t1, arg0);
 }
      t1 = distribute_bit_expr (code, type, arg0, arg1);
      if (t1 != (tree) ((void *)0))
 return t1;
      if (((enum tree_code) (arg0)->common.code) == BIT_NOT_EXPR
   && ((enum tree_code) (arg1)->common.code) == BIT_NOT_EXPR)
 {
   return fold (build1_stat (BIT_NOT_EXPR,type,build2_stat (BIT_AND_EXPR,type,((arg0)->exp.operands[0]),((arg1)->exp.operands[0]) ) )
                                   );
 }
      goto bit_rotate;
    case BIT_XOR_EXPR:
      if (integer_zerop (arg1))
 return non_lvalue (fold_convert (type, arg0));
      if (integer_all_onesp (arg1))
 return fold (build1_stat (BIT_NOT_EXPR,type,arg0 ));
      if (operand_equal_p (arg0, arg1, 0))
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg0);
      if (((enum tree_code) (arg0)->common.code) == BIT_NOT_EXPR
   && operand_equal_p (((arg0)->exp.operands[0]), arg1, 0))
 {
   t1 = build_int_2_wide ((unsigned long) (-1), (long) (-1));
   ((t1)->common.type) = type;
   force_fit_type (t1, 0);
   return omit_one_operand (type, t1, arg1);
 }
      if (((enum tree_code) (arg1)->common.code) == BIT_NOT_EXPR
   && operand_equal_p (arg0, ((arg1)->exp.operands[0]), 0))
 {
   t1 = build_int_2_wide ((unsigned long) (-1), (long) (-1));
   ((t1)->common.type) = type;
   force_fit_type (t1, 0);
   return omit_one_operand (type, t1, arg0);
 }
      if (((enum tree_code) (arg0)->common.code) == BIT_AND_EXPR
   && ((enum tree_code) (arg1)->common.code) == BIT_AND_EXPR
   && ((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == INTEGER_CST
   && ((enum tree_code) (((arg1)->exp.operands[1]))->common.code) == INTEGER_CST
   && integer_zerop (const_binop (BIT_AND_EXPR,
      ((arg0)->exp.operands[1]),
      ((arg1)->exp.operands[1]), 0)))
 {
   code = BIT_IOR_EXPR;
   goto bit_ior;
 }
      goto bit_rotate;
    case BIT_AND_EXPR:
      if (integer_all_onesp (arg1))
 return non_lvalue (fold_convert (type, arg0));
      if (integer_zerop (arg1))
 return omit_one_operand (type, arg1, arg0);
      if (operand_equal_p (arg0, arg1, 0))
 return non_lvalue (fold_convert (type, arg0));
      if (((enum tree_code) (arg0)->common.code) == BIT_NOT_EXPR
   && operand_equal_p (((arg0)->exp.operands[0]), arg1, 0))
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg1);
      if (((enum tree_code) (arg1)->common.code) == BIT_NOT_EXPR
   && operand_equal_p (arg0, ((arg1)->exp.operands[0]), 0))
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg0);
      t1 = distribute_bit_expr (code, type, arg0, arg1);
      if (t1 != (tree) ((void *)0))
 return t1;
      if (((enum tree_code) (arg1)->common.code) == INTEGER_CST && ((enum tree_code) (arg0)->common.code) == NOP_EXPR
   && ((((((arg0)->exp.operands[0]))->common.type))->common.unsigned_flag))
 {
   unsigned int prec
     = ((((((arg0)->exp.operands[0]))->common.type))->type.precision);
   if (prec < (8 * (0 ? 8 : 4)) && prec < (8 * 4)
       && (~(((arg1)->int_cst.int_cst).low)
    & (((long) 1 << prec) - 1)) == 0)
     return fold_convert (type, ((arg0)->exp.operands[0]));
 }
      if (((enum tree_code) (arg0)->common.code) == BIT_NOT_EXPR
   && ((enum tree_code) (arg1)->common.code) == BIT_NOT_EXPR)
 {
   return fold (build1_stat (BIT_NOT_EXPR,type,build2_stat (BIT_IOR_EXPR,type,((arg0)->exp.operands[0]),((arg1)->exp.operands[0]) ) )
                                   );
 }
      goto associate;
    case RDIV_EXPR:
      if (((enum tree_code) (arg1)->common.code) == REAL_CST
   && !((mode_class[((((arg1)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0)
   && real_zerop (arg1))
 return t;
      if (((enum tree_code) (arg0)->common.code) == NEGATE_EXPR && negate_expr_p (arg1))
 return fold (build2_stat (RDIV_EXPR,type,((arg0)->exp.operands[0]),negate_expr (arg1) )
                           );
      if (((enum tree_code) (arg1)->common.code) == NEGATE_EXPR && negate_expr_p (arg0))
 return fold (build2_stat (RDIV_EXPR,type,negate_expr (arg0),((arg1)->exp.operands[0]) )
                               );
      if (!(flag_signaling_nans && (((mode_class[((((arg0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
   && real_onep (arg1))
 return non_lvalue (fold_convert (type, arg0));
      if (!(flag_signaling_nans && (((mode_class[((((arg0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
   && real_minus_onep (arg1))
 return non_lvalue (fold_convert (type, negate_expr (arg0)));
      if (((enum tree_code) (arg1)->common.code) == REAL_CST)
 {
   if (flag_unsafe_math_optimizations
       && 0 != (tem = const_binop (code, build_real (type, dconst1),
       arg1, 0)))
     return fold (build2_stat (MULT_EXPR,type,arg0,tem ));
   if (optimize)
     {
       struct real_value r;
       r = (*((arg1)->real_cst.real_cst_ptr));
       if (exact_real_inverse (((((arg0)->common.type))->type.mode), &r))
  {
    tem = build_real (type, r);
    return fold (build2_stat (MULT_EXPR,type,arg0,tem ));
  }
     }
 }
      if (flag_unsafe_math_optimizations
   && ((enum tree_code) (arg0)->common.code) == RDIV_EXPR)
 return fold (build2_stat (RDIV_EXPR,type,((arg0)->exp.operands[0]),fold (build2_stat (MULT_EXPR,type,((arg0)->exp.operands[1]),arg1 )) )
                                       );
      if (flag_unsafe_math_optimizations
   && ((enum tree_code) (arg1)->common.code) == RDIV_EXPR)
 return fold (build2_stat (MULT_EXPR,type,fold (build2_stat (RDIV_EXPR,type,arg0,((arg1)->exp.operands[0]) )),((arg1)->exp.operands[1]) )
                               );
      if (flag_unsafe_math_optimizations
   && ((enum tree_code) (arg1)->common.code) == MULT_EXPR
   && ((enum tree_code) (arg0)->common.code) == REAL_CST
   && ((enum tree_code) (((arg1)->exp.operands[1]))->common.code) == REAL_CST)
 {
   tree tem = const_binop (RDIV_EXPR, arg0,
      ((arg1)->exp.operands[1]), 0);
   if (tem)
     return fold (build2_stat (RDIV_EXPR,type,tem,((arg1)->exp.operands[0]) )
                            );
 }
      if (flag_unsafe_math_optimizations)
 {
   enum built_in_function fcode = builtin_mathfn_code (arg1);
   if ((((fcode) == BUILT_IN_EXP10 || (fcode) == BUILT_IN_EXP10F || (fcode) == BUILT_IN_EXP10L || (fcode) == BUILT_IN_POW10 || (fcode) == BUILT_IN_POW10F || (fcode) == BUILT_IN_POW10L) || (fcode) == BUILT_IN_EXP || (fcode) == BUILT_IN_EXPF || (fcode) == BUILT_IN_EXPL || (fcode) == BUILT_IN_EXP2 || (fcode) == BUILT_IN_EXP2F || (fcode) == BUILT_IN_EXP2L))
     {
       tree expfn = ((((arg1)->exp.operands[0]))->exp.operands[0]);
       tree arg = negate_expr (((((arg1)->exp.operands[1]))->list.value1));
       tree arglist = build_tree_list_stat((tree) ((void *)0),fold_convert (type, arg) )
                                    ;
       arg1 = build_function_call_expr (expfn, arglist);
       return fold (build2_stat (MULT_EXPR,type,arg0,arg1 ));
     }
   if (fcode == BUILT_IN_POW
       || fcode == BUILT_IN_POWF
       || fcode == BUILT_IN_POWL)
     {
       tree powfn = ((((arg1)->exp.operands[0]))->exp.operands[0]);
       tree arg10 = ((((arg1)->exp.operands[1]))->list.value1);
       tree arg11 = ((((((arg1)->exp.operands[1]))->common.chain))->list.value1);
       tree neg11 = fold_convert (type, negate_expr (arg11));
       tree arglist = tree_cons_stat ((tree) ((void *)0),arg10,build_tree_list_stat((tree) ((void *)0),neg11 ) )
                                              ;
       arg1 = build_function_call_expr (powfn, arglist);
       return fold (build2_stat (MULT_EXPR,type,arg0,arg1 ));
     }
 }
      if (flag_unsafe_math_optimizations)
 {
   enum built_in_function fcode0 = builtin_mathfn_code (arg0);
   enum built_in_function fcode1 = builtin_mathfn_code (arg1);
   if (((fcode0 == BUILT_IN_SIN && fcode1 == BUILT_IN_COS)
        || (fcode0 == BUILT_IN_SINF && fcode1 == BUILT_IN_COSF)
        || (fcode0 == BUILT_IN_SINL && fcode1 == BUILT_IN_COSL))
       && operand_equal_p (((((arg0)->exp.operands[1]))->list.value1),
      ((((arg1)->exp.operands[1]))->list.value1), 0))
     {
       tree tanfn = mathfn_built_in (type, BUILT_IN_TAN);
       if (tanfn != (tree) ((void *)0))
  return build_function_call_expr (tanfn,
       ((arg0)->exp.operands[1]));
     }
   if (((fcode0 == BUILT_IN_COS && fcode1 == BUILT_IN_SIN)
        || (fcode0 == BUILT_IN_COSF && fcode1 == BUILT_IN_SINF)
        || (fcode0 == BUILT_IN_COSL && fcode1 == BUILT_IN_SINL))
       && operand_equal_p (((((arg0)->exp.operands[1]))->list.value1),
      ((((arg1)->exp.operands[1]))->list.value1), 0))
     {
       tree tanfn = mathfn_built_in (type, BUILT_IN_TAN);
       if (tanfn != (tree) ((void *)0))
  {
    tree tmp = ((arg0)->exp.operands[1]);
    tmp = build_function_call_expr (tanfn, tmp);
    return fold (build2_stat (RDIV_EXPR,type,build_real (type, dconst1),tmp )
                                           );
  }
     }
   if (fcode0 == BUILT_IN_POW
       || fcode0 == BUILT_IN_POWF
       || fcode0 == BUILT_IN_POWL)
     {
       tree arg00 = ((((arg0)->exp.operands[1]))->list.value1);
       tree arg01 = ((((((arg0)->exp.operands[1]))->common.chain))->list.value1);
       if (((enum tree_code) (arg01)->common.code) == REAL_CST
    && ! ((arg01)->common.static_flag)
    && operand_equal_p (arg1, arg00, 0))
  {
    tree powfn = ((((arg0)->exp.operands[0]))->exp.operands[0]);
    struct real_value c;
    tree arg, arglist;
    c = (*((arg01)->real_cst.real_cst_ptr));
    real_arithmetic (&c, MINUS_EXPR, &c, &dconst1);
    arg = build_real (type, c);
    arglist = build_tree_list_stat((tree) ((void *)0),arg );
    arglist = tree_cons_stat ((tree) ((void *)0),arg1,arglist );
    return build_function_call_expr (powfn, arglist);
  }
     }
 }
      goto binary;
    case TRUNC_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case EXACT_DIV_EXPR:
      if (integer_onep (arg1))
 return non_lvalue (fold_convert (type, arg0));
      if (integer_zerop (arg1))
 return t;
      if (!((type)->common.unsigned_flag)
   && ((enum tree_code) (arg1)->common.code) == INTEGER_CST
   && (((arg1)->int_cst.int_cst).low) == (unsigned long) -1
   && (((arg1)->int_cst.int_cst).high) == -1)
 return fold_convert (type, negate_expr (arg0));
      if ((code == CEIL_DIV_EXPR || code == FLOOR_DIV_EXPR)
   && multiple_of_p (type, arg0, arg1))
 return fold (build2_stat (EXACT_DIV_EXPR,type,arg0,arg1 ));
      if (((enum tree_code) (arg1)->common.code) == INTEGER_CST
   && 0 != (tem = extract_muldiv (((t)->exp.operands[0]), arg1,
      code, (tree) ((void *)0))))
 return fold_convert (type, tem);
      goto binary;
    case CEIL_MOD_EXPR:
    case FLOOR_MOD_EXPR:
    case ROUND_MOD_EXPR:
    case TRUNC_MOD_EXPR:
      if (integer_onep (arg1))
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg0);
      if (integer_zerop (arg1))
 return t;
      if (!((type)->common.unsigned_flag)
   && ((enum tree_code) (arg1)->common.code) == INTEGER_CST
   && (((arg1)->int_cst.int_cst).low) == (unsigned long) -1
   && (((arg1)->int_cst.int_cst).high) == -1)
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg0);
      if (code == TRUNC_MOD_EXPR
   && ((type)->common.unsigned_flag)
   && integer_pow2p (arg1))
 {
   unsigned long high, low;
   tree mask;
   int l;
   l = tree_log2 (arg1);
   if (l >= (8 * 4))
     {
       high = ((unsigned long) 1
        << (l - (8 * 4))) - 1;
       low = -1;
     }
   else
     {
       high = 0;
       low = ((unsigned long) 1 << l) - 1;
     }
   mask = build_int_2_wide ((unsigned long) (low), (long) (high));
   ((mask)->common.type) = type;
   return fold (build2_stat (BIT_AND_EXPR,type,fold_convert (type, arg0),mask )
                                          );
 }
      if (!((type)->common.unsigned_flag)
   && ((enum tree_code) (arg1)->common.code) == INTEGER_CST
   && (((arg1)->int_cst.int_cst).high) < 0
   && !flag_trapv
   && !sign_bit_p (arg1, arg1))
 return fold (build2_stat (code,type,fold_convert (type, arg0),fold_convert (type, negate_expr (arg1)) )
                                                );
      if (!((type)->common.unsigned_flag)
   && ((enum tree_code) (arg1)->common.code) == NEGATE_EXPR
   && !flag_trapv)
 return fold (build2_stat (code,type,fold_convert (type, arg0),fold_convert (type, ((arg1)->exp.operands[0])) )
                                                    );
      if (((enum tree_code) (arg1)->common.code) == INTEGER_CST
   && 0 != (tem = extract_muldiv (((t)->exp.operands[0]), arg1,
      code, (tree) ((void *)0))))
 return fold_convert (type, tem);
      goto binary;
    case LROTATE_EXPR:
    case RROTATE_EXPR:
      if (integer_all_onesp (arg0))
 return omit_one_operand (type, arg0, arg1);
      goto shift;
    case RSHIFT_EXPR:
      if (integer_all_onesp (arg0) && !((type)->common.unsigned_flag))
 return omit_one_operand (type, arg0, arg1);
    case LSHIFT_EXPR:
    shift:
      if (integer_zerop (arg1))
 return non_lvalue (fold_convert (type, arg0));
      if (integer_zerop (arg0))
 return omit_one_operand (type, arg0, arg1);
      if (((enum tree_code) (arg1)->common.code) == INTEGER_CST && tree_int_cst_sgn (arg1) < 0)
 return t;
      if (code == LROTATE_EXPR && ((enum tree_code) (arg1)->common.code) == INTEGER_CST)
 {
   tree tem = build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[((type)->type.mode)]) * 8))), (long) (0));
   tem = fold_convert (((arg1)->common.type), tem);
   tem = const_binop (MINUS_EXPR, tem, arg1, 0);
   return fold (build2_stat (RROTATE_EXPR,type,arg0,tem ));
 }
      if (code == RROTATE_EXPR && ((enum tree_code) (arg1)->common.code) == INTEGER_CST
   && (((enum tree_code) (arg0)->common.code) == BIT_AND_EXPR
       || ((enum tree_code) (arg0)->common.code) == BIT_IOR_EXPR
       || ((enum tree_code) (arg0)->common.code) == BIT_XOR_EXPR)
   && ((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == INTEGER_CST)
 return fold (build2_stat (((enum tree_code) (arg0)->common.code),type,fold (build2_stat (code,type,((arg0)->exp.operands[0]),arg1 )),fold (build2_stat (code,type,((arg0)->exp.operands[1]),arg1 )) )
                                       );
      if (code == RROTATE_EXPR && ((enum tree_code) (arg1)->common.code) == INTEGER_CST
   && ((enum tree_code) (arg0)->common.code) == RROTATE_EXPR
   && ((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == INTEGER_CST
   && (((arg1)->int_cst.int_cst).high) == 0
   && (((((arg0)->exp.operands[1]))->int_cst.int_cst).high) == 0
   && (((((arg1)->int_cst.int_cst).low)
        + (((((arg0)->exp.operands[1]))->int_cst.int_cst).low))
       == (unsigned int) ((unsigned short) (((unsigned short) mode_size[((type)->type.mode)]) * 8))))
 return ((arg0)->exp.operands[0]);
      goto binary;
    case MIN_EXPR:
      if (operand_equal_p (arg0, arg1, 0))
 return omit_one_operand (type, arg0, arg1);
      if ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
   && operand_equal_p (arg1, ((type)->type.minval), OEP_ONLY_CONST))
 return omit_one_operand (type, arg1, arg0);
      goto associate;
    case MAX_EXPR:
      if (operand_equal_p (arg0, arg1, 0))
 return omit_one_operand (type, arg0, arg1);
      if ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
   && ((type)->type.maxval)
   && operand_equal_p (arg1, ((type)->type.maxval), OEP_ONLY_CONST))
 return omit_one_operand (type, arg1, arg0);
      goto associate;
    case TRUTH_NOT_EXPR:
      if (((enum tree_code) (((arg0)->common.type))->common.code) != BOOLEAN_TYPE)
          arg0 = fold_convert (global_trees[TI_BOOLEAN_TYPE], arg0);
      tem = invert_truthvalue (arg0);
      if (((enum tree_code) (tem)->common.code) == TRUTH_NOT_EXPR)
 {
   tem = fold_single_bit_test (code, arg0, arg1, type);
   if (tem)
     return tem;
   return t;
 }
      return fold_convert (type, tem);
    case TRUTH_ANDIF_EXPR:
      if (integer_zerop (arg0))
 return fold_convert (type, arg0);
    case TRUTH_AND_EXPR:
      if (((enum tree_code) (arg0)->common.code) == INTEGER_CST && ! integer_zerop (arg0))
 return non_lvalue (fold_convert (type, arg1));
      if (((enum tree_code) (arg1)->common.code) == INTEGER_CST && ! integer_zerop (arg1)
   && (code != TRUTH_ANDIF_EXPR || ! ((arg0)->common.side_effects_flag)))
 return non_lvalue (fold_convert (type, arg0));
      if (integer_zerop (arg1))
 return omit_one_operand (type, arg1, arg0);
      if (integer_zerop (arg0))
 return omit_one_operand (type, arg0, arg1);
      if (((enum tree_code) (arg0)->common.code) == TRUTH_NOT_EXPR
   && operand_equal_p (((arg0)->exp.operands[0]), arg1, 0))
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg1);
      if (((enum tree_code) (arg1)->common.code) == TRUTH_NOT_EXPR
   && operand_equal_p (arg0, ((arg1)->exp.operands[0]), 0))
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg0);
    truth_andor:
      if (!optimize)
 return t;
      if (((enum tree_code) (arg0)->common.code) == ((enum tree_code) (arg1)->common.code)
   && (((enum tree_code) (arg0)->common.code) == TRUTH_ANDIF_EXPR
       || ((enum tree_code) (arg0)->common.code) == TRUTH_ORIF_EXPR
       || ((enum tree_code) (arg0)->common.code) == TRUTH_AND_EXPR
       || ((enum tree_code) (arg0)->common.code) == TRUTH_OR_EXPR)
   && ! ((((arg0)->exp.operands[1]))->common.side_effects_flag))
 {
   tree a00 = ((arg0)->exp.operands[0]);
   tree a01 = ((arg0)->exp.operands[1]);
   tree a10 = ((arg1)->exp.operands[0]);
   tree a11 = ((arg1)->exp.operands[1]);
   int commutative = ((((enum tree_code) (arg0)->common.code) == TRUTH_OR_EXPR
         || ((enum tree_code) (arg0)->common.code) == TRUTH_AND_EXPR)
        && (code == TRUTH_AND_EXPR
     || code == TRUTH_OR_EXPR));
   if (operand_equal_p (a00, a10, 0))
     return fold (build2_stat (((enum tree_code) (arg0)->common.code),type,a00,fold (build2_stat (code,type,a01,a11 )) )
                                          );
   else if (commutative && operand_equal_p (a00, a11, 0))
     return fold (build2_stat (((enum tree_code) (arg0)->common.code),type,a00,fold (build2_stat (code,type,a01,a10 )) )
                                          );
   else if (commutative && operand_equal_p (a01, a10, 0))
     return fold (build2_stat (((enum tree_code) (arg0)->common.code),type,a01,fold (build2_stat (code,type,a00,a11 )) )
                                          );
   else if ((commutative || ! ((a10)->common.side_effects_flag))
     && operand_equal_p (a01, a11, 0))
     return fold (build2_stat (((enum tree_code) (arg0)->common.code),type,fold (build2_stat (code,type,a00,a10 )),a01 )
         );
 }
      if (0 != (tem = fold_range_test (t)))
 return tem;
      if (((enum tree_code) (arg0)->common.code) == code
   && 0 != (tem = fold_truthop (code, type,
           ((arg0)->exp.operands[1]), arg1)))
 return fold (build2_stat (code,type,((arg0)->exp.operands[0]),tem ));
      if ((tem = fold_truthop (code, type, arg0, arg1)) != 0)
 return tem;
      return t;
    case TRUTH_ORIF_EXPR:
      if (((enum tree_code) (arg0)->common.code) == INTEGER_CST && ! integer_zerop (arg0))
 return fold_convert (type, arg0);
    case TRUTH_OR_EXPR:
      if (((enum tree_code) (arg0)->common.code) == INTEGER_CST && integer_zerop (arg0))
 return non_lvalue (fold_convert (type, arg1));
      if (((enum tree_code) (arg1)->common.code) == INTEGER_CST && integer_zerop (arg1)
   && (code != TRUTH_ORIF_EXPR || ! ((arg0)->common.side_effects_flag)))
 return non_lvalue (fold_convert (type, arg0));
      if (((enum tree_code) (arg1)->common.code) == INTEGER_CST && ! integer_zerop (arg1))
 return omit_one_operand (type, arg1, arg0);
      if (((enum tree_code) (arg0)->common.code) == INTEGER_CST && ! integer_zerop (arg0))
 return omit_one_operand (type, arg0, arg1);
      if (((enum tree_code) (arg0)->common.code) == TRUTH_NOT_EXPR
   && operand_equal_p (((arg0)->exp.operands[0]), arg1, 0))
 return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg1);
      if (((enum tree_code) (arg1)->common.code) == TRUTH_NOT_EXPR
   && operand_equal_p (arg0, ((arg1)->exp.operands[0]), 0))
 return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg0);
      goto truth_andor;
    case TRUTH_XOR_EXPR:
      if (integer_zerop (arg1))
 return non_lvalue (fold_convert (type, arg0));
      if (integer_onep (arg1))
 return non_lvalue (fold_convert (type, invert_truthvalue (arg0)));
      if (operand_equal_p (arg0, arg1, 0))
 return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg0);
      if (((enum tree_code) (arg0)->common.code) == TRUTH_NOT_EXPR
   && operand_equal_p (((arg0)->exp.operands[0]), arg1, 0))
 return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg1);
      if (((enum tree_code) (arg1)->common.code) == TRUTH_NOT_EXPR
   && operand_equal_p (arg0, ((arg1)->exp.operands[0]), 0))
 return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg0);
      return t;
    case EQ_EXPR:
    case NE_EXPR:
    case LT_EXPR:
    case GT_EXPR:
    case LE_EXPR:
    case GE_EXPR:
      if (tree_swap_operands_p (arg0, arg1, 1))
 return fold (build2_stat (swap_tree_comparison (code),type,arg1,arg0 ));
      if ((code == EQ_EXPR || code == NE_EXPR)
   && ((enum tree_code) (arg0)->common.code) == ADDR_EXPR
   && (tree_code_type[(int) (((enum tree_code) (((arg0)->exp.operands[0]))->common.code))] == 'd')
   && ! ((((arg0)->exp.operands[0]))->decl.weak_flag)
   && integer_zerop (arg1))
 return constant_boolean_node (code != EQ_EXPR, type);
      if ((code == EQ_EXPR || code == NE_EXPR)
   && ((enum tree_code) (arg0)->common.code) == ADDR_EXPR
   && (tree_code_type[(int) (((enum tree_code) (((arg0)->exp.operands[0]))->common.code))] == 'd')
   && ! ((((arg0)->exp.operands[0]))->decl.weak_flag)
   && ! lookup_attribute ("alias",
     ((((arg0)->exp.operands[0]))->decl.attributes))
   && ! ((((arg0)->exp.operands[0]))->decl.external_flag)
   && ((enum tree_code) (arg1)->common.code) == ADDR_EXPR
   && (tree_code_type[(int) (((enum tree_code) (((arg1)->exp.operands[0]))->common.code))] == 'd')
   && ! ((((arg1)->exp.operands[0]))->decl.weak_flag)
   && ! lookup_attribute ("alias",
     ((((arg1)->exp.operands[0]))->decl.attributes))
   && ! ((((arg1)->exp.operands[0]))->decl.external_flag))
 return constant_boolean_node (operand_equal_p (arg0, arg1, 0)
          ? code == EQ_EXPR : code != EQ_EXPR,
          type);
      if (((((enum tree_code) (((arg0)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((arg0)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((arg0)->common.type))->common.type))->common.code) == REAL_TYPE)))
 {
   tree targ0 = strip_float_extensions (arg0);
   tree targ1 = strip_float_extensions (arg1);
   tree newtype = ((targ0)->common.type);
   if (((((targ1)->common.type))->type.precision) > ((newtype)->type.precision))
     newtype = ((targ1)->common.type);
   if (((newtype)->type.precision) < ((((arg0)->common.type))->type.precision))
     return fold (build2_stat (code,type,fold_convert (newtype, targ0),fold_convert (newtype, targ1) )
                                   );
   if (((enum tree_code) (arg0)->common.code) == NEGATE_EXPR
       && ((enum tree_code) (arg1)->common.code) == NEGATE_EXPR)
     return fold (build2_stat (code,type,((arg1)->exp.operands[0]),((arg0)->exp.operands[0]) )
                            );
   if (((enum tree_code) (arg1)->common.code) == REAL_CST)
   {
     struct real_value cst;
     cst = (*((arg1)->real_cst.real_cst_ptr));
     if (((enum tree_code) (arg0)->common.code) == NEGATE_EXPR)
       return
  fold (build2_stat (swap_tree_comparison (code),type,((arg0)->exp.operands[0]),build_real (((arg1)->common.type), real_arithmetic2 (NEGATE_EXPR, &(cst), ((void *)0))) )
                                );
     if (real_isnegzero (&(cst)))
       return fold (build2_stat (code,type,arg0,build_real (((arg1)->common.type), dconst0) )
                                              );
     if (real_isnan (&(cst))
  && ! (flag_signaling_nans && (((mode_class[((((arg1)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)))
       {
  tem = (code == NE_EXPR) ? global_trees[TI_INTEGER_ONE] : global_trees[TI_INTEGER_ZERO];
  return omit_one_operand (type, tem, arg0);
       }
     if (real_isinf (&(cst)))
       {
  tem = fold_inf_compare (code, type, arg0, arg1);
  if (tem != (tree) ((void *)0))
    return tem;
       }
   }
   if (flag_unsafe_math_optimizations
       && ((enum tree_code) (arg1)->common.code) == REAL_CST
       && (((enum tree_code) (arg0)->common.code) == PLUS_EXPR
    || ((enum tree_code) (arg0)->common.code) == MINUS_EXPR)
       && ((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == REAL_CST
       && 0 != (tem = const_binop (((enum tree_code) (arg0)->common.code) == PLUS_EXPR
       ? MINUS_EXPR : PLUS_EXPR,
       arg1, ((arg0)->exp.operands[1]), 0))
       && ! ((tem)->common.static_flag))
     return fold (build2_stat (code,type,((arg0)->exp.operands[0]),tem ));
   if (flag_unsafe_math_optimizations
       && ((enum tree_code) (arg1)->common.code) == REAL_CST
       && ((enum tree_code) (arg0)->common.code) == MINUS_EXPR
       && ((enum tree_code) (((arg0)->exp.operands[0]))->common.code) == REAL_CST
       && 0 != (tem = const_binop (MINUS_EXPR, ((arg0)->exp.operands[0]),
       arg1, 0))
       && ! ((tem)->common.static_flag))
     return fold (build2_stat (swap_tree_comparison (code),type,((arg0)->exp.operands[1]),tem )
                                 );
   if (((enum tree_code) (arg1)->common.code) == REAL_CST
       && flag_unsafe_math_optimizations
       && ! flag_errno_math)
     {
       enum built_in_function fcode = builtin_mathfn_code (arg0);
       if (fcode != END_BUILTINS)
  {
    tem = fold_mathfn_compare (fcode, code, type, arg0, arg1);
    if (tem != (tree) ((void *)0))
      return tem;
  }
     }
 }
      if (((arg1)->common.constant_flag)
   && (((enum tree_code) (arg0)->common.code) == POSTINCREMENT_EXPR
       || ((enum tree_code) (arg0)->common.code) == POSTDECREMENT_EXPR)
   && ((((enum tree_code) (((arg0)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((arg0)->common.type))->common.code) == REFERENCE_TYPE)
       || ((((enum tree_code) (((arg0)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((arg0)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((arg0)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((arg0)->common.type))->common.code) == CHAR_TYPE)
    && (code == EQ_EXPR || code == NE_EXPR))))
 {
   tree varop, newconst;
   if (((enum tree_code) (arg0)->common.code) == POSTINCREMENT_EXPR)
     {
       newconst = fold (build2_stat (PLUS_EXPR,((arg0)->common.type),arg1,((arg0)->exp.operands[1]) )
                                        );
       varop = build2_stat (PREINCREMENT_EXPR,((arg0)->common.type),((arg0)->exp.operands[0]),((arg0)->exp.operands[1]) )
                                ;
     }
   else
     {
       newconst = fold (build2_stat (MINUS_EXPR,((arg0)->common.type),arg1,((arg0)->exp.operands[1]) )
                                        );
       varop = build2_stat (PREDECREMENT_EXPR,((arg0)->common.type),((arg0)->exp.operands[0]),((arg0)->exp.operands[1]) )
                                ;
     }
   if (((enum tree_code) (((varop)->exp.operands[0]))->common.code) == COMPONENT_REF
       && ((((((varop)->exp.operands[0]))->exp.operands[1]))->decl.bit_field_flag)
       && host_integerp (((((((varop)->exp.operands[0]))->exp.operands[1]))->decl.size)
                                     , 1))
     {
       tree fielddecl = ((((varop)->exp.operands[0]))->exp.operands[1]);
       long size = tree_low_cst (((fielddecl)->decl.size), 1);
       tree folded_compare, shift;
       folded_compare = fold (build2_stat (code,type,((varop)->exp.operands[0]),arg1 )
                                        );
       if (integer_zerop (folded_compare)
    || integer_onep (folded_compare))
  return omit_one_operand (type, folded_compare, varop);
       shift = build_int_2_wide ((unsigned long) (((((varop)->common.type))->type.precision) - size), (long) (0))
         ;
       shift = fold_convert (((varop)->common.type), shift);
       newconst = fold (build2_stat (LSHIFT_EXPR,((varop)->common.type),newconst,shift )
                           );
       newconst = fold (build2_stat (RSHIFT_EXPR,((varop)->common.type),newconst,shift )
                           );
     }
   return fold (build2_stat (code,type,varop,newconst ));
 }
      if (((enum tree_code) (arg1)->common.code) == INTEGER_CST
   && ((enum tree_code) (arg0)->common.code) != INTEGER_CST
   && tree_int_cst_sgn (arg1) > 0)
 {
   switch (code)
     {
     case GE_EXPR:
       arg1 = const_binop (MINUS_EXPR, arg1, global_trees[TI_INTEGER_ONE], 0);
       return fold (build2_stat (GT_EXPR,type,arg0,arg1 ));
     case LT_EXPR:
       arg1 = const_binop (MINUS_EXPR, arg1, global_trees[TI_INTEGER_ONE], 0);
       return fold (build2_stat (LE_EXPR,type,arg0,arg1 ));
     default:
       break;
     }
 }
      {
 int width = ((unsigned short) (((unsigned short) mode_size[((((arg1)->common.type))->type.mode)]) * 8));
 if (((enum tree_code) (arg1)->common.code) == INTEGER_CST
     && ! ((arg1)->common.static_flag)
     && width <= (8 * 4)
     && ((((enum tree_code) (((arg1)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((arg1)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((arg1)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((arg1)->common.type))->common.code) == CHAR_TYPE)
  || (((enum tree_code) (((arg1)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((arg1)->common.type))->common.code) == REFERENCE_TYPE)))
   {
     unsigned long signed_max;
     unsigned long max, min;
     signed_max = ((unsigned long) 1 << (width - 1)) - 1;
     if (((((arg1)->common.type))->common.unsigned_flag))
       {
         max = ((unsigned long) 2 << (width - 1)) - 1;
  min = 0;
       }
     else
       {
         max = signed_max;
  min = ((unsigned long) -1 << (width - 1));
       }
     if ((((arg1)->int_cst.int_cst).high) == 0
  && (((arg1)->int_cst.int_cst).low) == max)
       switch (code)
  {
  case GT_EXPR:
    return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg0);
  case GE_EXPR:
    return fold (build2_stat (EQ_EXPR,type,arg0,arg1 ));
  case LE_EXPR:
    return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg0);
  case LT_EXPR:
    return fold (build2_stat (NE_EXPR,type,arg0,arg1 ));
  default:
    break;
  }
     else if ((((arg1)->int_cst.int_cst).high) == 0
       && (((arg1)->int_cst.int_cst).low) == max - 1)
       switch (code)
  {
  case GT_EXPR:
    arg1 = const_binop (PLUS_EXPR, arg1, global_trees[TI_INTEGER_ONE], 0);
    return fold (build2_stat (EQ_EXPR,type,arg0,arg1 ));
  case LE_EXPR:
    arg1 = const_binop (PLUS_EXPR, arg1, global_trees[TI_INTEGER_ONE], 0);
    return fold (build2_stat (NE_EXPR,type,arg0,arg1 ));
  default:
    break;
  }
     else if ((((arg1)->int_cst.int_cst).high) == (min ? -1 : 0)
       && (((arg1)->int_cst.int_cst).low) == min)
       switch (code)
  {
  case LT_EXPR:
    return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg0);
  case LE_EXPR:
    return fold (build2_stat (EQ_EXPR,type,arg0,arg1 ));
  case GE_EXPR:
    return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg0);
  case GT_EXPR:
    return fold (build2_stat (NE_EXPR,type,arg0,arg1 ));
  default:
    break;
  }
     else if ((((arg1)->int_cst.int_cst).high) == (min ? -1 : 0)
       && (((arg1)->int_cst.int_cst).low) == min + 1)
       switch (code)
  {
  case GE_EXPR:
    arg1 = const_binop (MINUS_EXPR, arg1, global_trees[TI_INTEGER_ONE], 0);
    return fold (build2_stat (NE_EXPR,type,arg0,arg1 ));
  case LT_EXPR:
    arg1 = const_binop (MINUS_EXPR, arg1, global_trees[TI_INTEGER_ONE], 0);
    return fold (build2_stat (EQ_EXPR,type,arg0,arg1 ));
  default:
    break;
  }
     else if (!in_gimple_form
       && (((arg1)->int_cst.int_cst).high) == 0
       && (((arg1)->int_cst.int_cst).low) == signed_max
       && ((((arg1)->common.type))->common.unsigned_flag)
       && (((enum tree_code) (((arg1)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((arg1)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((arg1)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((arg1)->common.type))->common.code) == CHAR_TYPE))
       {
  if (code == LE_EXPR || code == GT_EXPR)
    {
      tree st0, st1;
      st0 = lang_hooks.types.signed_type (((arg0)->common.type));
      st1 = lang_hooks.types.signed_type (((arg1)->common.type));
      return fold
        (build2_stat (code == LE_EXPR ? GE_EXPR: LT_EXPR,type,fold_convert (st0, arg0),fold_convert (st1, global_trees[TI_INTEGER_ZERO]) )
                                                );
    }
       }
   }
      }
      if ((code == EQ_EXPR || code == NE_EXPR)
   && ((enum tree_code) (arg1)->common.code) == INTEGER_CST
   && (((enum tree_code) (arg0)->common.code) == PLUS_EXPR
       || ((enum tree_code) (arg0)->common.code) == MINUS_EXPR)
   && ((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == INTEGER_CST
   && 0 != (tem = const_binop (((enum tree_code) (arg0)->common.code) == PLUS_EXPR
          ? MINUS_EXPR : PLUS_EXPR,
          arg1, ((arg0)->exp.operands[1]), 0))
   && ! ((tem)->common.static_flag))
 return fold (build2_stat (code,type,((arg0)->exp.operands[0]),tem ));
      else if ((code == EQ_EXPR || code == NE_EXPR)
        && ((enum tree_code) (arg0)->common.code) == NEGATE_EXPR
        && ((enum tree_code) (arg1)->common.code) == INTEGER_CST
        && 0 != (tem = negate_expr (arg1))
        && ((enum tree_code) (tem)->common.code) == INTEGER_CST
        && ! ((tem)->common.static_flag))
 return fold (build2_stat (code,type,((arg0)->exp.operands[0]),tem ));
      else if ((code == NE_EXPR || code == EQ_EXPR)
        && integer_zerop (arg1) && ((enum tree_code) (arg0)->common.code) == MINUS_EXPR)
 return fold (build2_stat (code,type,((arg0)->exp.operands[0]),((arg0)->exp.operands[1]) )
                                                       );
      else if (((enum tree_code) (((arg0)->common.type))->common.code) == INTEGER_TYPE
        && ((enum tree_code) (arg0)->common.code) == NOP_EXPR
        && (tem = get_unwidened (arg0, (tree) ((void *)0))) != arg0
        && (code == EQ_EXPR || code == NE_EXPR
     || ((((arg0)->common.type))->common.unsigned_flag)
        == ((((tem)->common.type))->common.unsigned_flag))
        && (t1 = get_unwidened (arg1, ((tem)->common.type))) != 0
        && (((t1)->common.type) == ((tem)->common.type)
     || (((enum tree_code) (t1)->common.code) == INTEGER_CST
         && int_fits_type_p (t1, ((tem)->common.type)))))
 return fold (build2_stat (code,type,tem,fold_convert (((tem)->common.type), t1) )
                                           );
      else if (((enum tree_code) (arg1)->common.code) == INTEGER_CST
        && (((enum tree_code) (arg0)->common.code) == MIN_EXPR
     || ((enum tree_code) (arg0)->common.code) == MAX_EXPR)
        && ((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == INTEGER_CST)
 return optimize_minmax_comparison (t);
      else if (code == LE_EXPR && ((enum tree_code) (arg1)->common.code) == INTEGER_CST
        && ((enum tree_code) (arg0)->common.code) == ABS_EXPR
        && ! ((arg0)->common.side_effects_flag)
        && (0 != (tem = negate_expr (arg1)))
        && ((enum tree_code) (tem)->common.code) == INTEGER_CST
        && ! ((tem)->common.static_flag))
 return fold (build2_stat (TRUTH_ANDIF_EXPR,type,build2_stat (GE_EXPR,type,((arg0)->exp.operands[0]),tem ),build2_stat (LE_EXPR,type,((arg0)->exp.operands[0]),arg1 ) )
                                       );
      if (integer_zerop (arg1) && (code == EQ_EXPR || code == NE_EXPR)
   && ((enum tree_code) (arg0)->common.code) == BIT_AND_EXPR)
 {
   tree arg00 = ((arg0)->exp.operands[0]);
   tree arg01 = ((arg0)->exp.operands[1]);
   if (((enum tree_code) (arg00)->common.code) == LSHIFT_EXPR
       && integer_onep (((arg00)->exp.operands[0])))
     return
       fold (build2_stat (code,type,build2_stat (BIT_AND_EXPR,((arg0)->common.type),build2_stat (RSHIFT_EXPR,((arg00)->common.type),arg01,((arg00)->exp.operands[1]) ),fold_convert (((arg0)->common.type), global_trees[TI_INTEGER_ONE]) ),arg1 )
            );
   else if (((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == LSHIFT_EXPR
     && integer_onep (((((arg0)->exp.operands[1]))->exp.operands[0])))
     return
       fold (build2_stat (code,type,build2_stat (BIT_AND_EXPR,((arg0)->common.type),build2_stat (RSHIFT_EXPR,((arg01)->common.type),arg00,((arg01)->exp.operands[1]) ),fold_convert (((arg0)->common.type), global_trees[TI_INTEGER_ONE]) ),arg1 )
            );
 }
      if ((code == NE_EXPR || code == EQ_EXPR)
   && integer_zerop (arg1)
   && !((((arg0)->common.type))->common.unsigned_flag)
   && (((enum tree_code) (arg0)->common.code) == TRUNC_MOD_EXPR
       || ((enum tree_code) (arg0)->common.code) == CEIL_MOD_EXPR
       || ((enum tree_code) (arg0)->common.code) == FLOOR_MOD_EXPR
       || ((enum tree_code) (arg0)->common.code) == ROUND_MOD_EXPR)
   && integer_pow2p (((arg0)->exp.operands[1])))
 {
   tree newtype = lang_hooks.types.unsigned_type (((arg0)->common.type));
   tree newmod = fold (build2_stat (((enum tree_code) (arg0)->common.code),newtype,fold_convert (newtype, ((arg0)->exp.operands[0])),fold_convert (newtype, ((arg0)->exp.operands[1])) )
                                  );
   return fold (build2_stat (code,type,newmod,fold_convert (newtype, arg1) )
                                       );
 }
      if (code == NE_EXPR && integer_zerop (arg1)
   && ((enum tree_code) (arg0)->common.code) == BIT_AND_EXPR
   && integer_onep (((arg0)->exp.operands[1])))
 return fold_convert (type, arg0);
      if ((code == EQ_EXPR || code == NE_EXPR)
   && ((enum tree_code) (arg0)->common.code) == BIT_AND_EXPR
   && integer_pow2p (((arg0)->exp.operands[1]))
   && operand_equal_p (((arg0)->exp.operands[1]), arg1, 0))
 return fold (build2_stat (code == EQ_EXPR ? NE_EXPR : EQ_EXPR,type,arg0,global_trees[TI_INTEGER_ZERO] )
                                );
      tem = fold_single_bit_test (code, arg0, arg1, type);
      if (tem)
 return tem;
      if ((code == EQ_EXPR || code == NE_EXPR)
   && ((enum tree_code) (arg0)->common.code) == BIT_AND_EXPR
   && ((enum tree_code) (arg1)->common.code) == INTEGER_CST
   && ((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == INTEGER_CST)
 {
   tree dandnotc
     = fold (build2_stat (BIT_AND_EXPR,((arg0)->common.type),arg1,build1_stat (BIT_NOT_EXPR,((((arg0)->exp.operands[1]))->common.type),((arg0)->exp.operands[1]) ) )
                               );
   tree rslt = code == EQ_EXPR ? global_trees[TI_INTEGER_ZERO] : global_trees[TI_INTEGER_ONE];
   if (integer_nonzerop (dandnotc))
     return omit_one_operand (type, rslt, arg0);
 }
      if ((code == EQ_EXPR || code == NE_EXPR)
   && ((enum tree_code) (arg0)->common.code) == BIT_IOR_EXPR
   && ((enum tree_code) (arg1)->common.code) == INTEGER_CST
   && ((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == INTEGER_CST)
 {
   tree candnotd
     = fold (build2_stat (BIT_AND_EXPR,((arg0)->common.type),((arg0)->exp.operands[1]),build1_stat (BIT_NOT_EXPR,((arg1)->common.type),arg1 ) )
                                                     );
   tree rslt = code == EQ_EXPR ? global_trees[TI_INTEGER_ZERO] : global_trees[TI_INTEGER_ONE];
   if (integer_nonzerop (candnotd))
     return omit_one_operand (type, rslt, arg0);
 }
      if ((code == LT_EXPR || code == GE_EXPR)
   && ((((arg0)->common.type))->common.unsigned_flag)
   && ((enum tree_code) (arg1)->common.code) == LSHIFT_EXPR
   && integer_onep (((arg1)->exp.operands[0])))
 return build2_stat (code == LT_EXPR ? EQ_EXPR : NE_EXPR,type,build2_stat (RSHIFT_EXPR,((arg0)->common.type),arg0,((arg1)->exp.operands[1]) ),fold_convert (((arg0)->common.type), global_trees[TI_INTEGER_ZERO]) )
                                                            ;
      else if ((code == LT_EXPR || code == GE_EXPR)
        && ((((arg0)->common.type))->common.unsigned_flag)
        && (((enum tree_code) (arg1)->common.code) == NOP_EXPR
     || ((enum tree_code) (arg1)->common.code) == CONVERT_EXPR)
        && ((enum tree_code) (((arg1)->exp.operands[0]))->common.code) == LSHIFT_EXPR
        && integer_onep (((((arg1)->exp.operands[0]))->exp.operands[0])))
 return
   build2_stat (code == LT_EXPR ? EQ_EXPR : NE_EXPR,type,fold_convert (((arg0)->common.type), build2_stat (RSHIFT_EXPR,((arg0)->common.type),arg0,((((arg1)->exp.operands[0]))->exp.operands[1]) )),fold_convert (((arg0)->common.type), global_trees[TI_INTEGER_ZERO]) )
                                                       ;
      if (operand_equal_p (arg0, arg1, 0))
 {
   switch (code)
     {
     case EQ_EXPR:
       if (! ((((enum tree_code) (((arg0)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((arg0)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((arg0)->common.type))->common.type))->common.code) == REAL_TYPE))
    || ! (((mode_class[((((arg0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
  return constant_boolean_node (1, type);
       break;
     case GE_EXPR:
     case LE_EXPR:
       if (! ((((enum tree_code) (((arg0)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((arg0)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((arg0)->common.type))->common.type))->common.code) == REAL_TYPE))
    || ! (((mode_class[((((arg0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
  return constant_boolean_node (1, type);
       return fold (build2_stat (EQ_EXPR,type,arg0,arg1 ));
     case NE_EXPR:
       if (((((enum tree_code) (((arg0)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((arg0)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((arg0)->common.type))->common.type))->common.code) == REAL_TYPE))
    && (((mode_class[((((arg0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
  break;
     case GT_EXPR:
     case LT_EXPR:
       return constant_boolean_node (0, type);
     default:
       abort ();
     }
 }
      if (((enum tree_code) (arg1)->common.code) == INTEGER_CST && ((enum tree_code) (arg0)->common.code) != INTEGER_CST)
 {
   tree cval1 = 0, cval2 = 0;
   int save_p = 0;
   if (twoval_comparison_p (arg0, &cval1, &cval2, &save_p)
       && cval1 != 0 && cval2 != 0
       && ! (((cval1)->common.constant_flag) && ((cval2)->common.constant_flag))
       && ((cval1)->common.type) == ((cval2)->common.type)
       && (((enum tree_code) (((cval1)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((cval1)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((cval1)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((cval1)->common.type))->common.code) == CHAR_TYPE)
       && ((((cval1)->common.type))->type.maxval)
       && ((((cval2)->common.type))->type.maxval)
       && ! operand_equal_p (((((cval1)->common.type))->type.minval),
        ((((cval2)->common.type))->type.maxval), 0))
     {
       tree maxval = ((((cval1)->common.type))->type.maxval);
       tree minval = ((((cval1)->common.type))->type.minval);
       tree high_result
  = fold (build2_stat (code,type,eval_subst (arg0, cval1, maxval, cval2, minval),arg1 )
         );
       tree equal_result
  = fold (build2_stat (code,type,eval_subst (arg0, cval1, maxval, cval2, maxval),arg1 )
         );
       tree low_result
  = fold (build2_stat (code,type,eval_subst (arg0, cval1, minval, cval2, maxval),arg1 )
         );
       if ((integer_zerop (high_result)
     || integer_onep (high_result))
    && (integer_zerop (equal_result)
        || integer_onep (equal_result))
    && (integer_zerop (low_result)
        || integer_onep (low_result)))
  {
    switch ((integer_onep (high_result) * 4)
     + (integer_onep (equal_result) * 2)
     + integer_onep (low_result))
      {
      case 0:
        return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], arg0);
      case 1:
        code = LT_EXPR;
        break;
      case 2:
        code = EQ_EXPR;
        break;
      case 3:
        code = LE_EXPR;
        break;
      case 4:
        code = GT_EXPR;
        break;
      case 5:
        code = NE_EXPR;
        break;
      case 6:
        code = GE_EXPR;
        break;
      case 7:
        return omit_one_operand (type, global_trees[TI_INTEGER_ONE], arg0);
      }
    tem = build2_stat (code,type,cval1,cval2 );
    if (save_p)
      return save_expr (tem);
    else
      return fold (tem);
  }
     }
 }
      if (((((enum tree_code) (arg0)->common.code) == COMPONENT_REF
     && lang_hooks.can_use_bit_fields_p ())
    || ((enum tree_code) (arg0)->common.code) == BIT_FIELD_REF)
   && (code == EQ_EXPR || code == NE_EXPR)
   && (optimize || ((enum tree_code) (arg1)->common.code) == INTEGER_CST))
 {
   t1 = optimize_bit_field_compare (code, type, arg0, arg1);
   if (t1)
     return t1;
 }
      if ((code == EQ_EXPR || code == NE_EXPR)
   && ((enum tree_code) (((arg0)->common.type))->common.code) == COMPLEX_TYPE
   && (((enum tree_code) (arg0)->common.code) == COMPLEX_EXPR
       || ((enum tree_code) (arg1)->common.code) == COMPLEX_EXPR
       || ((enum tree_code) (arg0)->common.code) == COMPLEX_CST
       || ((enum tree_code) (arg1)->common.code) == COMPLEX_CST))
 {
   tree subtype = ((((arg0)->common.type))->common.type);
   tree real0, imag0, real1, imag1;
   arg0 = save_expr (arg0);
   arg1 = save_expr (arg1);
   real0 = fold (build1_stat (REALPART_EXPR,subtype,arg0 ));
   imag0 = fold (build1_stat (IMAGPART_EXPR,subtype,arg0 ));
   real1 = fold (build1_stat (REALPART_EXPR,subtype,arg1 ));
   imag1 = fold (build1_stat (IMAGPART_EXPR,subtype,arg1 ));
   return fold (build2_stat ((code == EQ_EXPR ? TRUTH_ANDIF_EXPR : TRUTH_ORIF_EXPR),type,fold (build2_stat (code,type,real0,real1 )),fold (build2_stat (code,type,imag0,imag1 )) )
                                                   );
 }
      if ((code == EQ_EXPR || code == NE_EXPR)
   && integer_zerop (arg1)
   && ((enum tree_code) (arg0)->common.code) == CALL_EXPR)
 {
   tree fndecl = get_callee_fndecl (arg0);
   tree arglist;
   if (fndecl
       && (((fndecl)->decl.built_in_class) != NOT_BUILT_IN)
       && ((fndecl)->decl.built_in_class) != BUILT_IN_MD
       && ((fndecl)->decl.u1.f) == BUILT_IN_STRLEN
       && (arglist = ((arg0)->exp.operands[1]))
       && ((enum tree_code) (((((arglist)->list.value1))->common.type))->common.code) == POINTER_TYPE
       && ! ((arglist)->common.chain))
     return fold (build2_stat (code,type,build1_stat (INDIRECT_REF,integer_types[itk_char],((arglist)->list.value1) ),global_trees[TI_INTEGER_ZERO] )
                       );
 }
      if (((enum tree_code) (arg0)->common.code) == TRUNC_DIV_EXPR
   && ((enum tree_code) (arg1)->common.code) == INTEGER_CST
   && ((enum tree_code) (((arg0)->exp.operands[1]))->common.code) == INTEGER_CST
   && !integer_zerop (((arg0)->exp.operands[1]))
   && !((((arg0)->exp.operands[1]))->common.public_flag)
   && !((arg1)->common.public_flag))
 {
   t1 = fold_div_compare (code, type, arg0, arg1);
   if (t1 != (tree) ((void *)0))
     return t1;
 }
      t1 = fold_relational_const (code, type, arg0, arg1);
      return (t1 == (tree) ((void *)0) ? t : t1);
    case UNORDERED_EXPR:
    case ORDERED_EXPR:
    case UNLT_EXPR:
    case UNLE_EXPR:
    case UNGT_EXPR:
    case UNGE_EXPR:
    case UNEQ_EXPR:
    case LTGT_EXPR:
      if (((enum tree_code) (arg0)->common.code) == REAL_CST && ((enum tree_code) (arg1)->common.code) == REAL_CST)
 {
   t1 = fold_relational_const (code, type, arg0, arg1);
   if (t1 != (tree) ((void *)0))
     return t1;
 }
      if (((enum tree_code) (arg0)->common.code) == REAL_CST
   && real_isnan (&((*((arg0)->real_cst.real_cst_ptr))))
   && (code != LTGT_EXPR || ! flag_trapping_math))
 {
   t1 = (code == ORDERED_EXPR || code == LTGT_EXPR)
        ? global_trees[TI_INTEGER_ZERO]
        : global_trees[TI_INTEGER_ONE];
   return omit_one_operand (type, t1, arg1);
 }
      if (((enum tree_code) (arg1)->common.code) == REAL_CST
   && real_isnan (&((*((arg1)->real_cst.real_cst_ptr))))
   && (code != LTGT_EXPR || ! flag_trapping_math))
 {
   t1 = (code == ORDERED_EXPR || code == LTGT_EXPR)
        ? global_trees[TI_INTEGER_ZERO]
        : global_trees[TI_INTEGER_ONE];
   return omit_one_operand (type, t1, arg0);
 }
      {
 tree targ0 = strip_float_extensions (arg0);
 tree targ1 = strip_float_extensions (arg1);
 tree newtype = ((targ0)->common.type);
 if (((((targ1)->common.type))->type.precision) > ((newtype)->type.precision))
   newtype = ((targ1)->common.type);
 if (((newtype)->type.precision) < ((((arg0)->common.type))->type.precision))
   return fold (build2_stat (code,type,fold_convert (newtype, targ0),fold_convert (newtype, targ1) )
                                        );
      }
      return t;
    case COND_EXPR:
      if (((enum tree_code) (arg0)->common.code) == INTEGER_CST)
 {
   tem = ((t)->exp.operands[(integer_zerop (arg0) ? 2 : 1)]);
   if (! (((enum tree_code) (((tem)->common.type))->common.code) == VOID_TYPE)
       || (((enum tree_code) (type)->common.code) == VOID_TYPE))
     return pedantic_non_lvalue (tem);
   return t;
 }
      if (operand_equal_p (arg1, ((t)->exp.operands[2]), 0))
 return pedantic_omit_one_operand (type, arg1, arg0);
      if (tree_code_type[(int) (((enum tree_code) (arg0)->common.code))] == '<'
   && operand_equal_for_comparison_p (((arg0)->exp.operands[0]),
          arg1, ((arg0)->exp.operands[1]))
   && !(((mode_class[((((arg1)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((arg1)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations))
 {
   tem = fold_cond_expr_with_comparison (type, arg0,
      ((t)->exp.operands[1]),
      ((t)->exp.operands[2]));
   if (tem)
     return tem;
 }
      if (tree_code_type[(int) (((enum tree_code) (arg0)->common.code))] == '<'
   && operand_equal_for_comparison_p (((arg0)->exp.operands[0]),
          ((t)->exp.operands[2]),
          ((arg0)->exp.operands[1]))
   && !(((mode_class[((((((t)->exp.operands[2]))->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((((t)->exp.operands[2]))->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((((t)->exp.operands[2]))->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations))
 {
   tem = invert_truthvalue (arg0);
   if (tree_code_type[(int) (((enum tree_code) (tem)->common.code))] == '<')
     {
       tem = fold_cond_expr_with_comparison (type, tem,
          ((t)->exp.operands[2]),
          ((t)->exp.operands[1]));
       if (tem)
  return tem;
     }
 }
      if (tree_swap_operands_p (((t)->exp.operands[1]),
    ((t)->exp.operands[2]), 0))
 {
   tem = invert_truthvalue (arg0);
   if (((enum tree_code) (tem)->common.code) != TRUTH_NOT_EXPR)
     return fold (build3_stat (code,type,tem,((t)->exp.operands[2]),((t)->exp.operands[1]) )
                                              );
 }
      if (integer_onep (((t)->exp.operands[1]))
   && integer_zerop (((t)->exp.operands[2]))
   && type == ((arg0)->common.type))
 return pedantic_non_lvalue (arg0);
      if (integer_zerop (((t)->exp.operands[1]))
   && integer_onep (((t)->exp.operands[2]))
   && truth_value_p (((enum tree_code) (arg0)->common.code)))
 return pedantic_non_lvalue (fold_convert (type,
        invert_truthvalue (arg0)));
      if (((enum tree_code) (arg0)->common.code) == LT_EXPR
          && integer_zerop (((arg0)->exp.operands[1]))
          && integer_zerop (((t)->exp.operands[2]))
          && (tem = sign_bit_p (((arg0)->exp.operands[0]), arg1)))
        return fold_convert (type, fold (build2_stat (BIT_AND_EXPR,((tem)->common.type),tem,arg1 )
                                  ));
      if (((enum tree_code) (arg0)->common.code) == BIT_AND_EXPR
   && integer_onep (((arg0)->exp.operands[1]))
   && integer_zerop (((t)->exp.operands[2]))
   && integer_pow2p (arg1))
 {
   tree tem = ((arg0)->exp.operands[0]);
   while ((((enum tree_code) (tem)->common.code) == NOP_EXPR || ((enum tree_code) (tem)->common.code) == CONVERT_EXPR || ((enum tree_code) (tem)->common.code) == NON_LVALUE_EXPR) && ((tem)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((tem)->common.type))->type.mode) == ((((((tem)->exp.operands[0]))->common.type))->type.mode))) (tem) = ((tem)->exp.operands[0]);
   if (((enum tree_code) (tem)->common.code) == RSHIFT_EXPR
              && (unsigned long) tree_log2 (arg1) ==
          (((((tem)->exp.operands[1]))->int_cst.int_cst).low))
     return fold (build2_stat (BIT_AND_EXPR,type,((tem)->exp.operands[0]),arg1 )
                                 );
 }
      if (integer_zerop (((t)->exp.operands[2]))
   && ((enum tree_code) (arg0)->common.code) == NE_EXPR
   && integer_zerop (((arg0)->exp.operands[1]))
   && integer_pow2p (arg1)
   && ((enum tree_code) (((arg0)->exp.operands[0]))->common.code) == BIT_AND_EXPR
   && operand_equal_p (((((arg0)->exp.operands[0]))->exp.operands[1]),
         arg1, OEP_ONLY_CONST))
 return pedantic_non_lvalue (fold_convert (type,
        ((arg0)->exp.operands[0])));
      if (integer_zerop (((t)->exp.operands[2]))
   && truth_value_p (((enum tree_code) (arg0)->common.code))
   && truth_value_p (((enum tree_code) (arg1)->common.code)))
 return fold (build2_stat (TRUTH_ANDIF_EXPR,type,arg0,arg1 ));
      if (integer_onep (((t)->exp.operands[2]))
   && truth_value_p (((enum tree_code) (arg0)->common.code))
   && truth_value_p (((enum tree_code) (arg1)->common.code)))
 {
   tem = invert_truthvalue (arg0);
   if (((enum tree_code) (tem)->common.code) != TRUTH_NOT_EXPR)
     return fold (build2_stat (TRUTH_ORIF_EXPR,type,tem,arg1 ));
 }
      if (integer_zerop (arg1)
   && truth_value_p (((enum tree_code) (arg0)->common.code))
   && truth_value_p (((enum tree_code) (((t)->exp.operands[2]))->common.code)))
 {
   tem = invert_truthvalue (arg0);
   if (((enum tree_code) (tem)->common.code) != TRUTH_NOT_EXPR)
     return fold (build2_stat (TRUTH_ANDIF_EXPR,type,tem,((t)->exp.operands[2]) )
                         );
 }
      if (integer_onep (arg1)
   && truth_value_p (((enum tree_code) (arg0)->common.code))
   && truth_value_p (((enum tree_code) (((t)->exp.operands[2]))->common.code)))
 return fold (build2_stat (TRUTH_ORIF_EXPR,type,arg0,((t)->exp.operands[2]) )
                            );
      return t;
    case COMPOUND_EXPR:
      if (((arg0)->common.side_effects_flag) || ((arg1)->common.constant_flag))
 return t;
      tem = integer_zerop (arg1) ? build1_stat (NOP_EXPR,type,arg1 )
     : fold_convert (type, arg1);
      return pedantic_non_lvalue (tem);
    case COMPLEX_EXPR:
      if (wins)
 return build_complex (type, arg0, arg1);
      return t;
    case REALPART_EXPR:
      if (((enum tree_code) (((arg0)->common.type))->common.code) != COMPLEX_TYPE)
 return t;
      else if (((enum tree_code) (arg0)->common.code) == COMPLEX_EXPR)
 return omit_one_operand (type, ((arg0)->exp.operands[0]),
     ((arg0)->exp.operands[1]));
      else if (((enum tree_code) (arg0)->common.code) == COMPLEX_CST)
 return ((arg0)->complex.real);
      else if (((enum tree_code) (arg0)->common.code) == PLUS_EXPR || ((enum tree_code) (arg0)->common.code) == MINUS_EXPR)
 return fold (build2_stat (((enum tree_code) (arg0)->common.code),type,fold (build1_stat (REALPART_EXPR,type,((arg0)->exp.operands[0]) )),fold (build1_stat (REALPART_EXPR,type,((arg0)->exp.operands[1]) )) )
                                 );
      return t;
    case IMAGPART_EXPR:
      if (((enum tree_code) (((arg0)->common.type))->common.code) != COMPLEX_TYPE)
 return fold_convert (type, global_trees[TI_INTEGER_ZERO]);
      else if (((enum tree_code) (arg0)->common.code) == COMPLEX_EXPR)
 return omit_one_operand (type, ((arg0)->exp.operands[1]),
     ((arg0)->exp.operands[0]));
      else if (((enum tree_code) (arg0)->common.code) == COMPLEX_CST)
 return ((arg0)->complex.imag);
      else if (((enum tree_code) (arg0)->common.code) == PLUS_EXPR || ((enum tree_code) (arg0)->common.code) == MINUS_EXPR)
 return fold (build2_stat (((enum tree_code) (arg0)->common.code),type,fold (build1_stat (IMAGPART_EXPR,type,((arg0)->exp.operands[0]) )),fold (build1_stat (IMAGPART_EXPR,type,((arg0)->exp.operands[1]) )) )
                                 );
      return t;
    case CLEANUP_POINT_EXPR:
      if (! has_cleanups (arg0))
 return ((t)->exp.operands[0]);
      {
 enum tree_code code0 = ((enum tree_code) (arg0)->common.code);
 int kind0 = tree_code_type[(int) (code0)];
 tree arg00 = ((arg0)->exp.operands[0]);
 tree arg01;
 if (kind0 == '1' || code0 == TRUTH_NOT_EXPR)
   return fold (build1_stat (code0,type,fold (build1_stat (CLEANUP_POINT_EXPR,((arg00)->common.type),arg00 )) )
                                     );
 if (kind0 == '<' || kind0 == '2'
     || code0 == TRUTH_ANDIF_EXPR || code0 == TRUTH_ORIF_EXPR
     || code0 == TRUTH_AND_EXPR || code0 == TRUTH_OR_EXPR
     || code0 == TRUTH_XOR_EXPR)
   {
     arg01 = ((arg0)->exp.operands[1]);
     if (((arg00)->common.constant_flag)
  || ((code0 == TRUTH_ANDIF_EXPR || code0 == TRUTH_ORIF_EXPR)
      && ! has_cleanups (arg00)))
       return fold (build2_stat (code0,type,arg00,fold (build1_stat (CLEANUP_POINT_EXPR,((arg01)->common.type),arg01 )) )
                                  );
     if (((arg01)->common.constant_flag))
       return fold (build2_stat (code0,type,fold (build1_stat (CLEANUP_POINT_EXPR,((arg00)->common.type),arg00 )),arg01 )
             );
   }
 return t;
      }
    case CALL_EXPR:
      if (((enum tree_code) (((t)->exp.operands[0]))->common.code) == ADDR_EXPR
   && (((enum tree_code) (((((t)->exp.operands[0]))->exp.operands[0]))->common.code)
       == FUNCTION_DECL)
   && (((((((t)->exp.operands[0]))->exp.operands[0]))->decl.built_in_class) != NOT_BUILT_IN))
 {
   tree tmp = fold_builtin (t);
   if (tmp)
     return tmp;
 }
      return t;
    default:
      return t;
    }
}
tree
fold_initializer (tree expr)
{
  int saved_signaling_nans = flag_signaling_nans;
  int saved_trapping_math = flag_trapping_math;
  int saved_trapv = flag_trapv;
  tree result;
  flag_signaling_nans = 0;
  flag_trapping_math = 0;
  flag_trapv = 0;
  result = fold (expr);
  flag_signaling_nans = saved_signaling_nans;
  flag_trapping_math = saved_trapping_math;
  flag_trapv = saved_trapv;
  return result;
}
static int
multiple_of_p (tree type, tree top, tree bottom)
{
  if (operand_equal_p (top, bottom, 0))
    return 1;
  if (((enum tree_code) (type)->common.code) != INTEGER_TYPE)
    return 0;
  switch (((enum tree_code) (top)->common.code))
    {
    case MULT_EXPR:
      return (multiple_of_p (type, ((top)->exp.operands[0]), bottom)
       || multiple_of_p (type, ((top)->exp.operands[1]), bottom));
    case PLUS_EXPR:
    case MINUS_EXPR:
      return (multiple_of_p (type, ((top)->exp.operands[0]), bottom)
       && multiple_of_p (type, ((top)->exp.operands[1]), bottom));
    case LSHIFT_EXPR:
      if (((enum tree_code) (((top)->exp.operands[1]))->common.code) == INTEGER_CST)
 {
   tree op1, t1;
   op1 = ((top)->exp.operands[1]);
   if (((((global_trees[TI_SIZE_ONE])->common.type))->type.precision)
       > (((op1)->int_cst.int_cst).low)
       && (((op1)->int_cst.int_cst).high) == 0
       && 0 != (t1 = fold_convert (type,
       const_binop (LSHIFT_EXPR,
             global_trees[TI_SIZE_ONE],
             op1, 0)))
       && ! ((t1)->common.public_flag))
     return multiple_of_p (type, t1, bottom);
 }
      return 0;
    case NOP_EXPR:
      if ((((enum tree_code) (((((top)->exp.operands[0]))->common.type))->common.code) != INTEGER_TYPE)
   || (((type)->type.precision)
       < ((((((top)->exp.operands[0]))->common.type))->type.precision)))
 return 0;
    case SAVE_EXPR:
      return multiple_of_p (type, ((top)->exp.operands[0]), bottom);
    case INTEGER_CST:
      if (((enum tree_code) (bottom)->common.code) != INTEGER_CST
   || (((type)->common.unsigned_flag)
       && (tree_int_cst_sgn (top) < 0
    || tree_int_cst_sgn (bottom) < 0)))
 return 0;
      return integer_zerop (const_binop (TRUNC_MOD_EXPR,
      top, bottom, 0));
    default:
      return 0;
    }
}
int
tree_expr_nonnegative_p (tree t)
{
  switch (((enum tree_code) (t)->common.code))
    {
    case ABS_EXPR:
      return 1;
    case INTEGER_CST:
      return tree_int_cst_sgn (t) >= 0;
    case REAL_CST:
      return ! real_isneg (&((*((t)->real_cst.real_cst_ptr))));
    case PLUS_EXPR:
      if (((((enum tree_code) (((t)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((t)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((t)->common.type))->common.type))->common.code) == REAL_TYPE)))
 return tree_expr_nonnegative_p (((t)->exp.operands[0]))
        && tree_expr_nonnegative_p (((t)->exp.operands[1]));
      if (((enum tree_code) (((t)->common.type))->common.code) == INTEGER_TYPE
   && ((enum tree_code) (((t)->exp.operands[0]))->common.code) == NOP_EXPR
   && ((enum tree_code) (((t)->exp.operands[1]))->common.code) == NOP_EXPR)
 {
   tree inner1 = ((((((t)->exp.operands[0]))->exp.operands[0]))->common.type);
   tree inner2 = ((((((t)->exp.operands[1]))->exp.operands[0]))->common.type);
   if (((enum tree_code) (inner1)->common.code) == INTEGER_TYPE && ((inner1)->common.unsigned_flag)
       && ((enum tree_code) (inner2)->common.code) == INTEGER_TYPE && ((inner2)->common.unsigned_flag))
     {
       unsigned int prec = ((((inner1)->type.precision)) > (((inner2)->type.precision)) ? (((inner1)->type.precision)) : (((inner2)->type.precision)))
                                    + 1;
       return prec < ((((t)->common.type))->type.precision);
     }
 }
      break;
    case MULT_EXPR:
      if (((((enum tree_code) (((t)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((t)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((t)->common.type))->common.type))->common.code) == REAL_TYPE)))
 {
   if (operand_equal_p (((t)->exp.operands[0]), ((t)->exp.operands[1]), 0))
     return 1;
   return tree_expr_nonnegative_p (((t)->exp.operands[0]))
   && tree_expr_nonnegative_p (((t)->exp.operands[1]));
 }
      if (((enum tree_code) (((t)->common.type))->common.code) == INTEGER_TYPE
   && ((enum tree_code) (((t)->exp.operands[0]))->common.code) == NOP_EXPR
   && ((enum tree_code) (((t)->exp.operands[1]))->common.code) == NOP_EXPR)
 {
   tree inner1 = ((((((t)->exp.operands[0]))->exp.operands[0]))->common.type);
   tree inner2 = ((((((t)->exp.operands[1]))->exp.operands[0]))->common.type);
   if (((enum tree_code) (inner1)->common.code) == INTEGER_TYPE && ((inner1)->common.unsigned_flag)
       && ((enum tree_code) (inner2)->common.code) == INTEGER_TYPE && ((inner2)->common.unsigned_flag))
     return ((inner1)->type.precision) + ((inner2)->type.precision)
     < ((((t)->common.type))->type.precision);
 }
      return 0;
    case TRUNC_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case ROUND_DIV_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[0]))
      && tree_expr_nonnegative_p (((t)->exp.operands[1]));
    case TRUNC_MOD_EXPR:
    case CEIL_MOD_EXPR:
    case FLOOR_MOD_EXPR:
    case ROUND_MOD_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[0]));
    case RDIV_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[0]))
      && tree_expr_nonnegative_p (((t)->exp.operands[1]));
    case BIT_AND_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[1]))
      || tree_expr_nonnegative_p (((t)->exp.operands[0]));
    case BIT_IOR_EXPR:
    case BIT_XOR_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[0]))
      && tree_expr_nonnegative_p (((t)->exp.operands[1]));
    case NOP_EXPR:
      {
 tree inner_type = ((((t)->exp.operands[0]))->common.type);
 tree outer_type = ((t)->common.type);
 if (((enum tree_code) (outer_type)->common.code) == REAL_TYPE)
   {
     if (((enum tree_code) (inner_type)->common.code) == REAL_TYPE)
       return tree_expr_nonnegative_p (((t)->exp.operands[0]));
     if (((enum tree_code) (inner_type)->common.code) == INTEGER_TYPE)
       {
  if (((inner_type)->common.unsigned_flag))
    return 1;
  return tree_expr_nonnegative_p (((t)->exp.operands[0]));
       }
   }
 else if (((enum tree_code) (outer_type)->common.code) == INTEGER_TYPE)
   {
     if (((enum tree_code) (inner_type)->common.code) == REAL_TYPE)
       return tree_expr_nonnegative_p (((t)->exp.operands[0]));
     if (((enum tree_code) (inner_type)->common.code) == INTEGER_TYPE)
       return ((inner_type)->type.precision) < ((outer_type)->type.precision)
        && ((inner_type)->common.unsigned_flag);
   }
      }
      break;
    case COND_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[1]))
 && tree_expr_nonnegative_p (((t)->exp.operands[2]));
    case COMPOUND_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[1]));
    case MIN_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[0]))
 && tree_expr_nonnegative_p (((t)->exp.operands[1]));
    case MAX_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[0]))
 || tree_expr_nonnegative_p (((t)->exp.operands[1]));
    case MODIFY_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[1]));
    case BIND_EXPR:
      return tree_expr_nonnegative_p (expr_last (((t)->exp.operands[1])));
    case SAVE_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[0]));
    case NON_LVALUE_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[0]));
    case FLOAT_EXPR:
      return tree_expr_nonnegative_p (((t)->exp.operands[0]));
    case TARGET_EXPR:
      {
 tree temp = ((t)->exp.operands[0]);
 t = ((t)->exp.operands[1]);
 if (!(((enum tree_code) (t)->common.code) == VOID_TYPE))
   return tree_expr_nonnegative_p (t);
 while (1)
   {
     if (((enum tree_code) (t)->common.code) == BIND_EXPR)
       t = expr_last (((((t))->exp.operands[1])));
     else if (((enum tree_code) (t)->common.code) == TRY_FINALLY_EXPR
       || ((enum tree_code) (t)->common.code) == TRY_CATCH_EXPR)
       t = expr_last (((t)->exp.operands[0]));
     else if (((enum tree_code) (t)->common.code) == STATEMENT_LIST)
       t = expr_last (t);
     else
       break;
   }
 if (((enum tree_code) (t)->common.code) == MODIFY_EXPR
     && ((t)->exp.operands[0]) == temp)
   return tree_expr_nonnegative_p (((t)->exp.operands[1]));
 return 0;
      }
    case CALL_EXPR:
      {
 tree fndecl = get_callee_fndecl (t);
 tree arglist = ((t)->exp.operands[1]);
 if (fndecl
     && (((fndecl)->decl.built_in_class) != NOT_BUILT_IN)
     && ((fndecl)->decl.built_in_class) != BUILT_IN_MD)
   switch (((fndecl)->decl.u1.f))
     {
     case BUILT_IN_ACOS: case BUILT_IN_ACOSF: case BUILT_IN_ACOSL:
     case BUILT_IN_ACOSH: case BUILT_IN_ACOSHF: case BUILT_IN_ACOSHL:
     case BUILT_IN_CABS: case BUILT_IN_CABSF: case BUILT_IN_CABSL:
     case BUILT_IN_COSH: case BUILT_IN_COSHF: case BUILT_IN_COSHL:
     case BUILT_IN_ERFC: case BUILT_IN_ERFCF: case BUILT_IN_ERFCL:
     case BUILT_IN_EXP: case BUILT_IN_EXPF: case BUILT_IN_EXPL:
     case BUILT_IN_EXP10: case BUILT_IN_EXP10F: case BUILT_IN_EXP10L:
     case BUILT_IN_EXP2: case BUILT_IN_EXP2F: case BUILT_IN_EXP2L:
     case BUILT_IN_FABS: case BUILT_IN_FABSF: case BUILT_IN_FABSL:
     case BUILT_IN_FDIM: case BUILT_IN_FDIMF: case BUILT_IN_FDIML:
     case BUILT_IN_FREXP: case BUILT_IN_FREXPF: case BUILT_IN_FREXPL:
     case BUILT_IN_HYPOT: case BUILT_IN_HYPOTF: case BUILT_IN_HYPOTL:
     case BUILT_IN_POW10: case BUILT_IN_POW10F: case BUILT_IN_POW10L:
     case BUILT_IN_FFS: case BUILT_IN_FFSL: case BUILT_IN_FFSLL:
     case BUILT_IN_PARITY: case BUILT_IN_PARITYL: case BUILT_IN_PARITYLL:
     case BUILT_IN_POPCOUNT: case BUILT_IN_POPCOUNTL: case BUILT_IN_POPCOUNTLL:
       return 1;
     case BUILT_IN_SQRT: case BUILT_IN_SQRTF: case BUILT_IN_SQRTL:
       if (!(((mode_class[((((t)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((t)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((t)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations))
  return 1;
       return tree_expr_nonnegative_p (((arglist)->list.value1));
     case BUILT_IN_ASINH: case BUILT_IN_ASINHF: case BUILT_IN_ASINHL:
     case BUILT_IN_ATAN: case BUILT_IN_ATANF: case BUILT_IN_ATANL:
     case BUILT_IN_ATANH: case BUILT_IN_ATANHF: case BUILT_IN_ATANHL:
     case BUILT_IN_CBRT: case BUILT_IN_CBRTF: case BUILT_IN_CBRTL:
     case BUILT_IN_CEIL: case BUILT_IN_CEILF: case BUILT_IN_CEILL:
     case BUILT_IN_ERF: case BUILT_IN_ERFF: case BUILT_IN_ERFL:
     case BUILT_IN_EXPM1: case BUILT_IN_EXPM1F: case BUILT_IN_EXPM1L:
     case BUILT_IN_FLOOR: case BUILT_IN_FLOORF: case BUILT_IN_FLOORL:
     case BUILT_IN_FMOD: case BUILT_IN_FMODF: case BUILT_IN_FMODL:
     case BUILT_IN_LDEXP: case BUILT_IN_LDEXPF: case BUILT_IN_LDEXPL:
     case BUILT_IN_LLRINT: case BUILT_IN_LLRINTF: case BUILT_IN_LLRINTL:
     case BUILT_IN_LLROUND: case BUILT_IN_LLROUNDF: case BUILT_IN_LLROUNDL:
     case BUILT_IN_LRINT: case BUILT_IN_LRINTF: case BUILT_IN_LRINTL:
     case BUILT_IN_LROUND: case BUILT_IN_LROUNDF: case BUILT_IN_LROUNDL:
     case BUILT_IN_MODF: case BUILT_IN_MODFF: case BUILT_IN_MODFL:
     case BUILT_IN_NEARBYINT: case BUILT_IN_NEARBYINTF: case BUILT_IN_NEARBYINTL:
     case BUILT_IN_POW: case BUILT_IN_POWF: case BUILT_IN_POWL:
     case BUILT_IN_RINT: case BUILT_IN_RINTF: case BUILT_IN_RINTL:
     case BUILT_IN_ROUND: case BUILT_IN_ROUNDF: case BUILT_IN_ROUNDL:
     case BUILT_IN_SIGNBIT: case BUILT_IN_SIGNBITF: case BUILT_IN_SIGNBITL:
     case BUILT_IN_SINH: case BUILT_IN_SINHF: case BUILT_IN_SINHL:
     case BUILT_IN_TANH: case BUILT_IN_TANHF: case BUILT_IN_TANHL:
     case BUILT_IN_TRUNC: case BUILT_IN_TRUNCF: case BUILT_IN_TRUNCL:
       return tree_expr_nonnegative_p (((arglist)->list.value1));
     case BUILT_IN_FMAX: case BUILT_IN_FMAXF: case BUILT_IN_FMAXL:
       return tree_expr_nonnegative_p (((arglist)->list.value1))
         || tree_expr_nonnegative_p (((((arglist)->common.chain))->list.value1));
     case BUILT_IN_FMIN: case BUILT_IN_FMINF: case BUILT_IN_FMINL:
       return tree_expr_nonnegative_p (((arglist)->list.value1))
         && tree_expr_nonnegative_p (((((arglist)->common.chain))->list.value1));
     case BUILT_IN_COPYSIGN: case BUILT_IN_COPYSIGNF: case BUILT_IN_COPYSIGNL:
       return tree_expr_nonnegative_p (((((arglist)->common.chain))->list.value1));
     default:
       break;
     }
      }
    default:
      if (truth_value_p (((enum tree_code) (t)->common.code)))
 return 1;
    }
  return 0;
}
static unsigned char
tree_expr_nonzero_p (tree t)
{
  tree type = ((t)->common.type);
  if (!(((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE) && !(((enum tree_code) (type)->common.code) == POINTER_TYPE || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE))
    return 0;
  switch (((enum tree_code) (t)->common.code))
    {
    case ABS_EXPR:
      if (!((type)->common.unsigned_flag) && !flag_wrapv)
 return tree_expr_nonzero_p (((t)->exp.operands[0]));
    case INTEGER_CST:
      return !integer_zerop (t);
    case PLUS_EXPR:
      if (!((type)->common.unsigned_flag) && !flag_wrapv)
 {
   if (!tree_expr_nonnegative_p (((t)->exp.operands[0]))
       || !tree_expr_nonnegative_p (((t)->exp.operands[1])))
     return 0;
   return (tree_expr_nonzero_p (((t)->exp.operands[0]))
           || tree_expr_nonzero_p (((t)->exp.operands[1])));
 }
      break;
    case MULT_EXPR:
      if (!((type)->common.unsigned_flag) && !flag_wrapv)
 {
   return (tree_expr_nonzero_p (((t)->exp.operands[0]))
           && tree_expr_nonzero_p (((t)->exp.operands[1])));
 }
      break;
    case NOP_EXPR:
      {
 tree inner_type = ((((t)->exp.operands[0]))->common.type);
 tree outer_type = ((t)->common.type);
 return (((inner_type)->type.precision) >= ((outer_type)->type.precision)
  && tree_expr_nonzero_p (((t)->exp.operands[0])));
      }
      break;
   case ADDR_EXPR:
      if ((tree_code_type[(int) (((enum tree_code) (((t)->exp.operands[0]))->common.code))] == 'd'))
 return !((((t)->exp.operands[0]))->decl.weak_flag);
      return 1;
    case COND_EXPR:
      return (tree_expr_nonzero_p (((t)->exp.operands[1]))
       && tree_expr_nonzero_p (((t)->exp.operands[2])));
    case MIN_EXPR:
      return (tree_expr_nonzero_p (((t)->exp.operands[0]))
       && tree_expr_nonzero_p (((t)->exp.operands[1])));
    case MAX_EXPR:
      if (tree_expr_nonzero_p (((t)->exp.operands[0])))
 {
   if (tree_expr_nonzero_p (((t)->exp.operands[1])))
     return 1;
   return tree_expr_nonnegative_p (((t)->exp.operands[0]));
 }
      else if (tree_expr_nonzero_p (((t)->exp.operands[1]))
        && tree_expr_nonnegative_p (((t)->exp.operands[1])))
 return 1;
      break;
    case COMPOUND_EXPR:
    case MODIFY_EXPR:
    case BIND_EXPR:
      return tree_expr_nonzero_p (((t)->exp.operands[1]));
    case SAVE_EXPR:
    case NON_LVALUE_EXPR:
      return tree_expr_nonzero_p (((t)->exp.operands[0]));
    case BIT_IOR_EXPR:
      return tree_expr_nonzero_p (((t)->exp.operands[1]))
      || tree_expr_nonzero_p (((t)->exp.operands[0]));
    default:
      break;
    }
  return 0;
}
int
rtl_expr_nonnegative_p (rtx r)
{
  switch (((enum rtx_code) (r)->code))
    {
    case CONST_INT:
      return ((r)->u.hwint[0]) >= 0;
    case CONST_DOUBLE:
      if (((enum machine_mode) (r)->mode) == VOIDmode)
 return ((r)->u.hwint[1]) >= 0;
      return 0;
    case CONST_VECTOR:
      {
 int units, i;
 rtx elt;
 units = (((((r)->u.fld[0]).rtvec1))->num_elem);
 for (i = 0; i < units; ++i)
   {
     elt = (((((r)->u.fld[0]).rtvec1))->elem[i]);
     if (!rtl_expr_nonnegative_p (elt))
       return 0;
   }
 return 1;
      }
    case SYMBOL_REF:
    case LABEL_REF:
      return 1;
    default:
      return 0;
    }
}
static tree
fold_relational_hi_lo (enum tree_code *code_p, const tree type, tree *op0_p,
         tree *op1_p)
{
  tree op0 = *op0_p;
  tree op1 = *op1_p;
  enum tree_code code = *code_p;
  int width = ((unsigned short) (((unsigned short) mode_size[((((op1)->common.type))->type.mode)]) * 8));
  if (((enum tree_code) (op1)->common.code) == INTEGER_CST
      && ! ((op1)->common.static_flag)
      && width <= (8 * 4)
      && ((((enum tree_code) (((op1)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == CHAR_TYPE)
   || (((enum tree_code) (((op1)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == REFERENCE_TYPE)))
    {
      unsigned long signed_max;
      unsigned long max, min;
      signed_max = ((unsigned long) 1 << (width - 1)) - 1;
      if (((((op1)->common.type))->common.unsigned_flag))
        {
          max = ((unsigned long) 2 << (width - 1)) - 1;
   min = 0;
 }
      else
        {
          max = signed_max;
   min = ((unsigned long) -1 << (width - 1));
 }
      if ((((op1)->int_cst.int_cst).high) == 0
   && (((op1)->int_cst.int_cst).low) == max)
 switch (code)
   {
   case GT_EXPR:
     return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], op0);
   case GE_EXPR:
     *code_p = EQ_EXPR;
     break;
   case LE_EXPR:
     return omit_one_operand (type, global_trees[TI_INTEGER_ONE], op0);
   case LT_EXPR:
     *code_p = NE_EXPR;
     break;
   default:
     break;
   }
      else if ((((op1)->int_cst.int_cst).high) == 0
        && (((op1)->int_cst.int_cst).low) == max - 1)
 switch (code)
   {
   case GT_EXPR:
     *code_p = EQ_EXPR;
     *op1_p = const_binop (PLUS_EXPR, op1, global_trees[TI_INTEGER_ONE], 0);
     break;
   case LE_EXPR:
     *code_p = NE_EXPR;
     *op1_p = const_binop (PLUS_EXPR, op1, global_trees[TI_INTEGER_ONE], 0);
     break;
   default:
     break;
   }
      else if ((((op1)->int_cst.int_cst).high) == (min ? -1 : 0)
        && (((op1)->int_cst.int_cst).low) == min)
       switch (code)
   {
   case LT_EXPR:
     return omit_one_operand (type, global_trees[TI_INTEGER_ZERO], op0);
   case LE_EXPR:
     *code_p = EQ_EXPR;
     break;
   case GE_EXPR:
     return omit_one_operand (type, global_trees[TI_INTEGER_ONE], op0);
   case GT_EXPR:
     *code_p = NE_EXPR;
     break;
   default:
     break;
   }
      else if ((((op1)->int_cst.int_cst).high) == (min ? -1 : 0)
        && (((op1)->int_cst.int_cst).low) == min + 1)
 switch (code)
   {
   case GE_EXPR:
     *code_p = NE_EXPR;
     *op1_p = const_binop (MINUS_EXPR, op1, global_trees[TI_INTEGER_ONE], 0);
     break;
   case LT_EXPR:
     *code_p = EQ_EXPR;
     *op1_p = const_binop (MINUS_EXPR, op1, global_trees[TI_INTEGER_ONE], 0);
     break;
   default:
     break;
   }
      else if ((((op1)->int_cst.int_cst).high) == 0
        && (((op1)->int_cst.int_cst).low) == signed_max
        && ((((op1)->common.type))->common.unsigned_flag)
        && (((enum tree_code) (((op1)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == CHAR_TYPE))
 {
   if (code == LE_EXPR || code == GT_EXPR)
     {
       tree st0, st1, exp, retval;
       st0 = lang_hooks.types.signed_type (((op0)->common.type));
       st1 = lang_hooks.types.signed_type (((op1)->common.type));
       exp = build2_stat (code == LE_EXPR ? GE_EXPR: LT_EXPR,type,fold_convert (st0, op0),fold_convert (st1, global_trees[TI_INTEGER_ZERO]) )
                                             ;
       retval
  = nondestructive_fold_binary_to_constant (((enum tree_code) (exp)->common.code),
         ((exp)->common.type),
         ((exp)->exp.operands[0]),
         ((exp)->exp.operands[1]));
       if (in_gimple_form)
  exp = ((void *)0);
       return (retval ? retval : exp);
     }
 }
    }
  return (tree) ((void *)0);
}
tree
nondestructive_fold_binary_to_constant (enum tree_code code, tree type,
     tree op0, tree op1)
{
  int wins = 1;
  tree subop0;
  tree subop1;
  tree tem;
  if (commutative_tree_code (code)
      && (((enum tree_code) (op0)->common.code) == INTEGER_CST || ((enum tree_code) (op0)->common.code) == REAL_CST))
    {
      tem = op0;
      op0 = op1;
      op1 = tem;
    }
  if (((enum tree_code) (op0)->common.code) == COMPLEX_CST)
    subop0 = ((op0)->complex.real);
  else
    subop0 = op0;
  if (((enum tree_code) (op1)->common.code) == COMPLEX_CST)
    subop1 = ((op1)->complex.real);
  else
    subop1 = op1;
  if ((((enum tree_code) (subop0)->common.code) != INTEGER_CST
       && ((enum tree_code) (subop0)->common.code) != REAL_CST)
      || (((enum tree_code) (subop1)->common.code) != INTEGER_CST
   && ((enum tree_code) (subop1)->common.code) != REAL_CST))
    wins = 0;
  switch (code)
    {
    case PLUS_EXPR:
      if (((enum tree_code) (op0)->common.code) == PLUS_EXPR
   && ((enum tree_code) (op1)->common.code) == INTEGER_CST
   && (((enum tree_code) (((op0)->exp.operands[0]))->common.code) == ADDR_EXPR
       || (((enum tree_code) (((op0)->exp.operands[0]))->common.code) == NOP_EXPR
    && (((enum tree_code) (((((op0)->exp.operands[0]))->exp.operands[0]))->common.code)
        == ADDR_EXPR)))
   && ((enum tree_code) (((op0)->exp.operands[1]))->common.code) == INTEGER_CST)
 {
          return build2_stat (PLUS_EXPR,type,((op0)->exp.operands[0]),const_binop (PLUS_EXPR, op1, ((op0)->exp.operands[1]), 0) )
                                    ;
 }
    case BIT_XOR_EXPR:
    binary:
      if (!wins)
 return (tree) ((void *)0);
      tem = const_binop (code, op0, op1, 0);
      if (tem != (tree) ((void *)0))
 {
   if (((tem)->common.type) != type)
     tem = fold_convert (type, tem);
   return tem;
 }
      return (tree) ((void *)0);
    case MINUS_EXPR:
      if (! ((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)) && operand_equal_p (op0, op1, 0))
 return fold_convert (type, global_trees[TI_INTEGER_ZERO]);
      goto binary;
    case MULT_EXPR:
    case BIT_AND_EXPR:
      if (! ((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)) && integer_zerop (op1))
 return omit_one_operand (type, op1, op0);
      else
        if (!(((mode_class[((((op0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((op0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((op0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
     && !(((mode_class[((((op0)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((op0)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((op0)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations)
     && real_zerop (op1))
   return omit_one_operand (type, op1, op0);
      goto binary;
    case BIT_IOR_EXPR:
      if (integer_all_onesp (op1))
 return omit_one_operand (type, op1, op0);
      goto binary;
    case TRUNC_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case EXACT_DIV_EXPR:
    case TRUNC_MOD_EXPR:
    case ROUND_MOD_EXPR:
    case FLOOR_MOD_EXPR:
    case CEIL_MOD_EXPR:
    case RDIV_EXPR:
      if (integer_zerop (op1))
       return (tree) ((void *)0);
      if (((enum tree_code) (op1)->common.code) == REAL_CST
   && !((mode_class[((((op1)->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((op1)->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((op1)->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0)
   && real_zerop (op1))
 return (tree) ((void *)0);
      goto binary;
    case MIN_EXPR:
      if ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
   && operand_equal_p (op1, ((type)->type.minval), OEP_ONLY_CONST))
 return omit_one_operand (type, op1, op0);
      goto binary;
    case MAX_EXPR:
      if ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
   && ((type)->type.maxval)
   && operand_equal_p (op1, ((type)->type.maxval), OEP_ONLY_CONST))
 return omit_one_operand (type, op1, op0);
      goto binary;
    case RSHIFT_EXPR:
      if (integer_all_onesp (op0) && ! ((type)->common.unsigned_flag))
 return omit_one_operand (type, op0, op1);
    case LSHIFT_EXPR:
      if (integer_zerop (op0))
 return omit_one_operand (type, op0, op1);
      if (((enum tree_code) (op1)->common.code) == INTEGER_CST && tree_int_cst_sgn (op1) < 0)
 return (tree) ((void *)0);
      goto binary;
    case LROTATE_EXPR:
    case RROTATE_EXPR:
      if (integer_all_onesp (op0))
 return omit_one_operand (type, op0, op1);
      if (integer_zerop (op0))
 return omit_one_operand (type, op0, op1);
      goto binary;
    case COMPLEX_EXPR:
      if (wins)
 return build_complex (type, op0, op1);
      return (tree) ((void *)0);
    case LT_EXPR:
    case LE_EXPR:
    case GT_EXPR:
    case GE_EXPR:
    case EQ_EXPR:
    case NE_EXPR:
      if ((((enum tree_code) (op0)->common.code) == INTEGER_CST
    && ((enum tree_code) (op1)->common.code) != INTEGER_CST)
   || (((enum tree_code) (op0)->common.code) == REAL_CST
       && ((enum tree_code) (op0)->common.code) != REAL_CST))
 {
   tree temp;
   temp = op0;
   op0 = op1;
   op1 = temp;
   code = swap_tree_comparison (code);
 }
      if (((enum tree_code) (op1)->common.code) == INTEGER_CST
   && ((enum tree_code) (op0)->common.code) != INTEGER_CST
   && tree_int_cst_sgn (op1) > 0)
 {
   switch (code)
     {
     case GE_EXPR:
       code = GT_EXPR;
       op1 = const_binop (MINUS_EXPR, op1, global_trees[TI_INTEGER_ONE], 0);
       break;
     case LT_EXPR:
       code = LE_EXPR;
       op1 = const_binop (MINUS_EXPR, op1, global_trees[TI_INTEGER_ONE], 0);
       break;
     default:
       break;
     }
 }
      tem = fold_relational_hi_lo (&code, type, &op0, &op1);
      if (tem)
 return tem;
    case ORDERED_EXPR:
    case UNORDERED_EXPR:
    case UNLT_EXPR:
    case UNLE_EXPR:
    case UNGT_EXPR:
    case UNGE_EXPR:
    case UNEQ_EXPR:
    case LTGT_EXPR:
      if (!wins)
 return (tree) ((void *)0);
      return fold_relational_const (code, type, op0, op1);
    case RANGE_EXPR:
      return (tree) ((void *)0);
    case TRUTH_AND_EXPR:
      if (integer_zerop (op1))
 return omit_one_operand (type, op1, op0);
      if (integer_zerop (op0))
 return omit_one_operand (type, op0, op1);
      if (((enum tree_code) (op0)->common.code) == INTEGER_CST && ((enum tree_code) (op1)->common.code) == INTEGER_CST)
 return constant_boolean_node (1, type);
      return (tree) ((void *)0);
    case TRUTH_OR_EXPR:
      if (((enum tree_code) (op1)->common.code) == INTEGER_CST && ! integer_zerop (op1))
 return omit_one_operand (type, op1, op0);
      if (((enum tree_code) (op0)->common.code) == INTEGER_CST && ! integer_zerop (op0))
 return omit_one_operand (type, op0, op1);
      if (((enum tree_code) (op0)->common.code) == INTEGER_CST && ((enum tree_code) (op1)->common.code) == INTEGER_CST)
 return constant_boolean_node (0, type);
      return (tree) ((void *)0);
    case TRUTH_XOR_EXPR:
      if (((enum tree_code) (op0)->common.code) == INTEGER_CST && ((enum tree_code) (op1)->common.code) == INTEGER_CST)
 {
   int x = ! integer_zerop (op0) ^ ! integer_zerop (op1);
   return constant_boolean_node (x, type);
 }
      return (tree) ((void *)0);
    default:
      return (tree) ((void *)0);
    }
}
tree
nondestructive_fold_unary_to_constant (enum tree_code code, tree type,
           tree op0)
{
  if (code == NOP_EXPR || code == FLOAT_EXPR || code == CONVERT_EXPR)
    {
      tree subop;
      if (((enum tree_code) (op0)->common.code) == COMPLEX_CST)
 subop = ((op0)->complex.real);
      else
 subop = op0;
      if (((enum tree_code) (subop)->common.code) != INTEGER_CST && ((enum tree_code) (subop)->common.code) != REAL_CST)
 return (tree) ((void *)0);
    }
  switch (code)
    {
    case NOP_EXPR:
    case FLOAT_EXPR:
    case CONVERT_EXPR:
    case FIX_TRUNC_EXPR:
    case FIX_FLOOR_EXPR:
    case FIX_CEIL_EXPR:
      return fold_convert_const (code, type, op0);
    case NEGATE_EXPR:
      if (((enum tree_code) (op0)->common.code) == INTEGER_CST || ((enum tree_code) (op0)->common.code) == REAL_CST)
 return fold_negate_const (op0, type);
      else
 return (tree) ((void *)0);
    case ABS_EXPR:
      if (((enum tree_code) (op0)->common.code) == INTEGER_CST || ((enum tree_code) (op0)->common.code) == REAL_CST)
 return fold_abs_const (op0, type);
      else
 return (tree) ((void *)0);
    case BIT_NOT_EXPR:
      if (((enum tree_code) (op0)->common.code) == INTEGER_CST)
 return fold_not_const (op0, type);
      else
 return (tree) ((void *)0);
    case REALPART_EXPR:
      if (((enum tree_code) (op0)->common.code) == COMPLEX_CST)
 return ((op0)->complex.real);
      else
 return (tree) ((void *)0);
    case IMAGPART_EXPR:
      if (((enum tree_code) (op0)->common.code) == COMPLEX_CST)
 return ((op0)->complex.imag);
      else
 return (tree) ((void *)0);
    case CONJ_EXPR:
      if (((enum tree_code) (op0)->common.code) == COMPLEX_CST
   && ((enum tree_code) (((op0)->common.type))->common.code) == COMPLEX_TYPE)
 return build_complex (type, ((op0)->complex.real),
         negate_expr (((op0)->complex.imag)));
      return (tree) ((void *)0);
    default:
      return (tree) ((void *)0);
    }
}
tree
fold_read_from_constant_string (tree exp)
{
  if (((enum tree_code) (exp)->common.code) == INDIRECT_REF || ((enum tree_code) (exp)->common.code) == ARRAY_REF)
    {
      tree exp1 = ((exp)->exp.operands[0]);
      tree index;
      tree string1;
      if (((enum tree_code) (exp)->common.code) == INDIRECT_REF)
 string1 = string_constant (exp1, &index);
      else
 {
   tree low_bound = array_ref_low_bound (exp);
   index = fold_convert (sizetype_tab[(int) SIZETYPE], ((exp)->exp.operands[1]));
   if (! integer_zerop (low_bound))
     index = size_diffop (index, fold_convert (sizetype_tab[(int) SIZETYPE], low_bound));
   string1 = exp1;
 }
      if (string1
   && ((exp)->common.type) == ((((string1)->common.type))->common.type)
   && ((enum tree_code) (string1)->common.code) == STRING_CST
   && ((enum tree_code) (index)->common.code) == INTEGER_CST
   && compare_tree_int (index, ((string1)->string1.length)) < 0
   && (mode_class[((((((string1)->common.type))->common.type))->type.mode)]
       == MODE_INT)
   && (((unsigned short) mode_size[((((((string1)->common.type))->common.type))->type.mode)]) == 1))
 return fold_convert (((exp)->common.type),
        build_int_2_wide ((unsigned long) ((((string1)->string1.pointer) [(((index)->int_cst.int_cst).low)])), (long) (0))
                                      );
    }
  return ((void *)0);
}
static tree
fold_negate_const (tree arg0, tree type)
{
  tree t = (tree) ((void *)0);
  if (((enum tree_code) (arg0)->common.code) == INTEGER_CST)
    {
      unsigned long low;
      long high;
      int overflow = neg_double ((((arg0)->int_cst.int_cst).low),
     (((arg0)->int_cst.int_cst).high),
     &low, &high);
      t = build_int_2_wide ((unsigned long) (low), (long) (high));
      ((t)->common.type) = type;
      ((t)->common.public_flag)
 = (((arg0)->common.public_flag)
    | force_fit_type (t, overflow && !((type)->common.unsigned_flag)));
      ((t)->common.static_flag)
 = ((t)->common.public_flag) | ((arg0)->common.static_flag);
    }
  else if (((enum tree_code) (arg0)->common.code) == REAL_CST)
    t = build_real (type, real_arithmetic2 (NEGATE_EXPR, &((*((arg0)->real_cst.real_cst_ptr))), ((void *)0)));
  return t;
}
tree
fold_abs_const (tree arg0, tree type)
{
  tree t = (tree) ((void *)0);
  if (((enum tree_code) (arg0)->common.code) == INTEGER_CST)
    {
      if (((type)->common.unsigned_flag))
 return arg0;
      else if (((((global_trees[TI_INTEGER_MINUS_ONE])->int_cst.int_cst).high) < (((arg0)->int_cst.int_cst).high) || ((((global_trees[TI_INTEGER_MINUS_ONE])->int_cst.int_cst).high) == (((arg0)->int_cst.int_cst).high) && (((global_trees[TI_INTEGER_MINUS_ONE])->int_cst.int_cst).low) < (((arg0)->int_cst.int_cst).low))))
 return arg0;
      else
 {
   unsigned long low;
   long high;
   int overflow = neg_double ((((arg0)->int_cst.int_cst).low),
         (((arg0)->int_cst.int_cst).high),
         &low, &high);
   t = build_int_2_wide ((unsigned long) (low), (long) (high));
   ((t)->common.type) = type;
   ((t)->common.public_flag)
     = (((arg0)->common.public_flag)
        | force_fit_type (t, overflow));
   ((t)->common.static_flag)
     = ((t)->common.public_flag) | ((arg0)->common.static_flag);
   return t;
 }
    }
  else if (((enum tree_code) (arg0)->common.code) == REAL_CST)
    {
      if (real_isneg (&((*((arg0)->real_cst.real_cst_ptr)))))
 return build_real (type, real_arithmetic2 (NEGATE_EXPR, &((*((arg0)->real_cst.real_cst_ptr))), ((void *)0)));
      else
 return arg0;
    }
  return t;
}
static tree
fold_not_const (tree arg0, tree type)
{
  tree t = (tree) ((void *)0);
  if (((enum tree_code) (arg0)->common.code) == INTEGER_CST)
    {
      t = build_int_2_wide ((unsigned long) (~ (((arg0)->int_cst.int_cst).low)), (long) (~ (((arg0)->int_cst.int_cst).high)))
                                    ;
      ((t)->common.type) = type;
      force_fit_type (t, 0);
      ((t)->common.public_flag) = ((arg0)->common.public_flag);
      ((t)->common.static_flag) = ((arg0)->common.static_flag);
    }
  return t;
}
static tree
fold_relational_const (enum tree_code code, tree type, tree op0, tree op1)
{
  int result, invert;
  if (((enum tree_code) (op0)->common.code) == REAL_CST && ((enum tree_code) (op1)->common.code) == REAL_CST)
    {
      if (real_isnan (&((*((op0)->real_cst.real_cst_ptr))))
          || real_isnan (&((*((op1)->real_cst.real_cst_ptr)))))
 {
   switch (code)
     {
     case EQ_EXPR:
     case ORDERED_EXPR:
       result = 0;
       break;
     case NE_EXPR:
     case UNORDERED_EXPR:
     case UNLT_EXPR:
     case UNLE_EXPR:
     case UNGT_EXPR:
     case UNGE_EXPR:
     case UNEQ_EXPR:
              result = 1;
       break;
     case LT_EXPR:
     case LE_EXPR:
     case GT_EXPR:
     case GE_EXPR:
     case LTGT_EXPR:
       if (flag_trapping_math)
  return (tree) ((void *)0);
       result = 0;
       break;
     default:
       abort ();
     }
   return constant_boolean_node (result, type);
 }
      switch (code)
 {
 case ORDERED_EXPR:
   return constant_boolean_node (1, type);
 case UNORDERED_EXPR:
   return constant_boolean_node (0, type);
 case UNLT_EXPR:
   code = LT_EXPR;
   break;
 case UNLE_EXPR:
   code = LE_EXPR;
   break;
 case UNGT_EXPR:
   code = GT_EXPR;
   break;
 case UNGE_EXPR:
   code = GE_EXPR;
   break;
 case UNEQ_EXPR:
   code = EQ_EXPR;
   break;
 case LTGT_EXPR:
   code = NE_EXPR;
   break;
 default:
   break;
 }
    }
  if (code == LE_EXPR || code == GT_EXPR)
    {
      tree tem = op0;
      op0 = op1;
      op1 = tem;
      code = swap_tree_comparison (code);
    }
  invert = 0;
  if (code == NE_EXPR || code == GE_EXPR)
    {
      invert = 1;
      code = invert_tree_comparison (code, 0);
    }
  if (((enum tree_code) (op0)->common.code) == INTEGER_CST && ((enum tree_code) (op1)->common.code) == INTEGER_CST)
    {
      if (code == EQ_EXPR)
 result = tree_int_cst_equal (op0, op1);
      else if (((((op0)->common.type))->common.unsigned_flag))
 result = (((unsigned long) (((op0)->int_cst.int_cst).high) < (unsigned long) (((op1)->int_cst.int_cst).high)) || (((unsigned long) (((op0)->int_cst.int_cst).high) == (unsigned long) (((op1)->int_cst.int_cst).high)) && (((op0)->int_cst.int_cst).low) < (((op1)->int_cst.int_cst).low)));
      else
 result = ((((op0)->int_cst.int_cst).high) < (((op1)->int_cst.int_cst).high) || ((((op0)->int_cst.int_cst).high) == (((op1)->int_cst.int_cst).high) && (((op0)->int_cst.int_cst).low) < (((op1)->int_cst.int_cst).low)));
    }
  else if (code == EQ_EXPR && !((op0)->common.side_effects_flag)
           && integer_zerop (op1) && tree_expr_nonzero_p (op0))
    result = 0;
  else if (((enum tree_code) (op0)->common.code) == REAL_CST && ((enum tree_code) (op1)->common.code) == REAL_CST)
    {
      if (code == EQ_EXPR)
 result = real_compare (EQ_EXPR, &((*((op0)->real_cst.real_cst_ptr))), &((*((op1)->real_cst.real_cst_ptr))))
                            ;
      else
 result = real_compare (LT_EXPR, &((*((op0)->real_cst.real_cst_ptr))), &((*((op1)->real_cst.real_cst_ptr))))
                           ;
    }
  else
    return (tree) ((void *)0);
  if (invert)
    result ^= 1;
  return constant_boolean_node (result, type);
}
tree
build_fold_addr_expr_with_type (tree t, tree ptrtype)
{
  if (((enum tree_code) (t)->common.code) == INDIRECT_REF)
    {
      t = ((t)->exp.operands[0]);
      if (((t)->common.type) != ptrtype)
 t = build1_stat (NOP_EXPR,ptrtype,t );
    }
  else
    {
      tree base = t;
      while (handled_component_p (base)
      || ((enum tree_code) (base)->common.code) == REALPART_EXPR
      || ((enum tree_code) (base)->common.code) == IMAGPART_EXPR)
 base = ((base)->exp.operands[0]);
      if ((tree_code_type[(int) (((enum tree_code) (base)->common.code))] == 'd'))
 ((base)->common.addressable_flag) = 1;
      t = build1_stat (ADDR_EXPR,ptrtype,t );
    }
  return t;
}
tree
build_fold_addr_expr (tree t)
{
  return build_fold_addr_expr_with_type (t, build_pointer_type (((t)->common.type)));
}
tree
build_fold_indirect_ref (tree t)
{
  tree type = ((((t)->common.type))->common.type);
  tree sub = t;
  tree subtype;
  while ((((enum tree_code) (sub)->common.code) == NOP_EXPR || ((enum tree_code) (sub)->common.code) == CONVERT_EXPR || ((enum tree_code) (sub)->common.code) == NON_LVALUE_EXPR) && ((sub)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((sub)->common.type))->type.mode) == ((((((sub)->exp.operands[0]))->common.type))->type.mode))) (sub) = ((sub)->exp.operands[0]);
  if (((enum tree_code) (sub)->common.code) == ADDR_EXPR)
    {
      tree op = ((sub)->exp.operands[0]);
      tree optype = ((op)->common.type);
      if (lang_hooks.types_compatible_p (type, optype))
 return op;
      else if (((enum tree_code) (optype)->common.code) == ARRAY_TYPE
        && lang_hooks.types_compatible_p (type, ((optype)->common.type)))
 return build4_stat (ARRAY_REF,type,op,global_trees[TI_SIZE_ZERO],(tree) ((void *)0),(tree) ((void *)0) );
    }
  subtype = ((sub)->common.type);
  if (((enum tree_code) (((subtype)->common.type))->common.code) == ARRAY_TYPE
      && lang_hooks.types_compatible_p (type, ((((subtype)->common.type))->common.type)))
    {
      sub = build_fold_indirect_ref (sub);
      return build4_stat (ARRAY_REF,type,sub,global_trees[TI_SIZE_ZERO],(tree) ((void *)0),(tree) ((void *)0) );
    }
  return build1_stat (INDIRECT_REF,type,t );
}
const struct ggc_root_tab gt_ggc_r_gt_fold_const_h[] = {
  {
    &new_const,
    1,
    sizeof (new_const),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_cache_tab gt_ggc_rc_gt_fold_const_h[] = {
  {
    &size_htab,
    1,
    sizeof (size_htab),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node,
    &ggc_marked_p
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rc_gt_fold_const_h[] = {
  {
    &size_htab,
    1,
    sizeof (size_htab),
    &gt_ggc_m_P9tree_node4htab,
    &gt_pch_n_P9tree_node4htab
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
int current_function_is_leaf;
int current_function_nothrow;
int current_function_sp_is_unchanging;
int current_function_uses_only_leaf_regs;
int virtuals_instantiated;
static int funcdef_no;
struct machine_function * (*init_machine_status) (void);
struct function *cfun = 0;
static varray_type prologue;
static varray_type epilogue;
static varray_type sibcall_epilogue;
struct temp_slot
{
  struct temp_slot *next;
  struct temp_slot *prev;
  rtx slot;
  rtx address;
  unsigned int align;
  long size;
  tree type;
  char in_use;
  char addr_taken;
  int level;
  int keep;
  long base_offset;
  long full_size;
};
static rtx assign_stack_local_1 (enum machine_mode, long, int,
     struct function *);
static struct temp_slot *find_temp_slot_from_address (rtx);
static void instantiate_decls (tree, int);
static void instantiate_decls_1 (tree, int);
static void instantiate_decl (rtx, long, int);
static rtx instantiate_new_reg (rtx, long *);
static int instantiate_virtual_regs_1 (rtx *, rtx, int);
static void pad_to_arg_alignment (struct args_size *, int, struct args_size *);
static void pad_below (struct args_size *, enum machine_mode, tree);
static void reorder_blocks_1 (rtx, tree, varray_type *);
static void reorder_fix_fragments (tree);
static int all_blocks (tree, tree *);
static tree *get_block_vector (tree, int *);
extern tree debug_find_var_in_block_tree (tree, tree);
static void record_insns (rtx, varray_type *) ;
static int contains (rtx, varray_type);
static void emit_return_into_block (basic_block, rtx);
static void purge_single_hard_subreg_set (rtx);
static rtx keep_stack_depressed (rtx);
static void prepare_function_start (tree);
static void do_clobber_return_reg (rtx, void *);
static void do_use_return_reg (rtx, void *);
static void instantiate_virtual_regs_lossage (rtx);
static void set_insn_locators (rtx, int) ;
struct function *outer_function_chain;
struct function *
find_function_data (tree decl)
{
  struct function *p;
  for (p = outer_function_chain; p; p = p->outer)
    if (p->decl == decl)
      return p;
  abort ();
}
void
push_function_context_to (tree context)
{
  struct function *p;
  if (context)
    {
      if (context == current_function_decl)
 cfun->contains_functions = 1;
      else
 {
   struct function *containing = find_function_data (context);
   containing->contains_functions = 1;
 }
    }
  if (cfun == 0)
    init_dummy_function_start ();
  p = cfun;
  p->outer = outer_function_chain;
  outer_function_chain = p;
  lang_hooks.function.enter_nested (p);
  cfun = 0;
}
void
push_function_context (void)
{
  push_function_context_to (current_function_decl);
}
void
pop_function_context_from (tree context )
{
  struct function *p = outer_function_chain;
  cfun = p;
  outer_function_chain = p->outer;
  current_function_decl = p->decl;
  reg_renumber = 0;
  restore_emit_status (p);
  lang_hooks.function.leave_nested (p);
  rtx_equal_function_value_matters = 1;
  virtuals_instantiated = 0;
  generating_concat_p = 1;
}
void
pop_function_context (void)
{
  pop_function_context_from (current_function_decl);
}
void
free_after_parsing (struct function *f)
{
  lang_hooks.function.final (f);
  f->stmt = ((void *)0);
}
void
free_after_compilation (struct function *f)
{
  f->eh = ((void *)0);
  f->expr = ((void *)0);
  f->emit = ((void *)0);
  f->varasm = ((void *)0);
  f->machine = ((void *)0);
  f->x_avail_temp_slots = ((void *)0);
  f->x_used_temp_slots = ((void *)0);
  f->arg_offset_rtx = ((void *)0);
  f->return_rtx = ((void *)0);
  f->internal_arg_pointer = ((void *)0);
  f->x_nonlocal_goto_handler_labels = ((void *)0);
  f->x_return_label = ((void *)0);
  f->x_naked_return_label = ((void *)0);
  f->x_stack_slot_list = ((void *)0);
  f->x_tail_recursion_reentry = ((void *)0);
  f->x_arg_pointer_save_area = ((void *)0);
  f->x_parm_birth_insn = ((void *)0);
  f->original_arg_vector = ((void *)0);
  f->original_decl_initial = ((void *)0);
  f->epilogue_delay_list = ((void *)0);
}
long
get_func_frame_size (struct function *f)
{
  return -f->x_frame_offset;
}
long
get_frame_size (void)
{
  return get_func_frame_size (cfun);
}
static rtx
assign_stack_local_1 (enum machine_mode mode, long size, int align,
        struct function *function)
{
  rtx x, addr;
  int bigend_correction = 0;
  int alignment;
  int frame_off, frame_alignment, frame_phase;
  if (align == 0)
    {
      tree type;
      if (mode == BLKmode)
 alignment = 128;
      else
 alignment = get_mode_alignment (mode);
      type = lang_hooks.types.type_for_mode (mode, 0);
      if (type)
 alignment = ix86_local_alignment ((type), (alignment));
      alignment /= 8;
    }
  else if (align == -1)
    {
      alignment = 128 / 8;
      size = (((size) + (alignment) - 1) & ~((alignment)- 1));
    }
  else if (align == -2)
    alignment = 1;
  else
    alignment = align / 8;
  function->x_frame_offset -= size;
  if (alignment * 8 > ix86_preferred_stack_boundary)
    alignment = ix86_preferred_stack_boundary / 8;
  if (function->stack_alignment_needed < alignment * 8)
    function->stack_alignment_needed = alignment * 8;
  frame_alignment = ix86_preferred_stack_boundary / 8;
  frame_off = 0 % frame_alignment;
  frame_phase = frame_off ? frame_alignment - frame_off : 0;
  if (1
      || mode != BLKmode
      || size != 0)
    {
      function->x_frame_offset
 = (((function->x_frame_offset - frame_phase) & ~((alignment) - 1))
    + frame_phase);
    }
  if (0 && mode != BLKmode)
    bigend_correction = size - ((unsigned short) mode_size[mode]);
  if (function == cfun && virtuals_instantiated)
    addr = plus_constant_wide (((global_rtl[GR_FRAME_POINTER])), (long) (trunc_int_for_mode ((cfun->x_frame_offset) + bigend_correction + 0, (0 ? DImode : SImode))))
                                      ;
  else
    addr = plus_constant_wide (((global_rtl[GR_VIRTUAL_STACK_ARGS])), (long) (trunc_int_for_mode (function->x_frame_offset + bigend_correction, (0 ? DImode : SImode))))
             ;
  x = gen_rtx_MEM (mode, addr);
  function->x_stack_slot_list
    = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (x), (function->x_stack_slot_list));
  return x;
}
rtx
assign_stack_local (enum machine_mode mode, long size, int align)
{
  return assign_stack_local_1 (mode, size, align, cfun);
}
static void
cut_slot_from_list (struct temp_slot *temp, struct temp_slot **list)
{
  if (temp->next)
    temp->next->prev = temp->prev;
  if (temp->prev)
    temp->prev->next = temp->next;
  else
    *list = temp->next;
  temp->prev = temp->next = ((void *)0);
}
static void
insert_slot_to_list (struct temp_slot *temp, struct temp_slot **list)
{
  temp->next = *list;
  if (*list)
    (*list)->prev = temp;
  temp->prev = ((void *)0);
  *list = temp;
}
static struct temp_slot **
temp_slots_at_level (int level)
{
  level++;
  if (!(cfun->x_used_temp_slots))
    (cfun->x_used_temp_slots) = varray_init (3, VARRAY_DATA_GENERIC, "used_temp_slots");
  while (level >= (int) (((cfun->x_used_temp_slots))->elements_used))
    do { if (((cfun->x_used_temp_slots))->elements_used >= ((cfun->x_used_temp_slots))->num_elements) ((((cfun->x_used_temp_slots))) = varray_grow (((cfun->x_used_temp_slots)), 2 * ((cfun->x_used_temp_slots))->num_elements)); ((cfun->x_used_temp_slots))->data.generic[((cfun->x_used_temp_slots))->elements_used++] = (((void *)0)); } while (0);
  return (struct temp_slot **) &(((cfun->x_used_temp_slots))->data.generic[level]);
}
static int
max_slot_level (void)
{
  if (!(cfun->x_used_temp_slots))
    return -1;
  return (((cfun->x_used_temp_slots))->elements_used) - 1;
}
static void
move_slot_to_level (struct temp_slot *temp, int level)
{
  cut_slot_from_list (temp, temp_slots_at_level (temp->level));
  insert_slot_to_list (temp, temp_slots_at_level (level));
  temp->level = level;
}
static void
make_slot_available (struct temp_slot *temp)
{
  cut_slot_from_list (temp, temp_slots_at_level (temp->level));
  insert_slot_to_list (temp, &(cfun->x_avail_temp_slots));
  temp->in_use = 0;
  temp->level = -1;
}
rtx
assign_stack_temp_for_type (enum machine_mode mode, long size, int keep,
       tree type)
{
  unsigned int align;
  struct temp_slot *p, *best_p = 0, *selected = ((void *)0), **pp;
  rtx slot;
  if (size == -1)
    abort ();
  if (mode == BLKmode)
    align = 128;
  else
    align = get_mode_alignment (mode);
  if (! type)
    type = lang_hooks.types.type_for_mode (mode, 0);
  if (type)
    align = ix86_local_alignment ((type), (align));
  for (p = (cfun->x_avail_temp_slots); p; p = p->next)
    {
      if (p->align >= align && p->size >= size && ((enum machine_mode) (p->slot)->mode) == mode
   && objects_must_conflict_p (p->type, type)
   && (best_p == 0 || best_p->size > p->size
       || (best_p->size == p->size && best_p->align > p->align)))
 {
   if (p->align == align && p->size == size)
     {
       selected = p;
       cut_slot_from_list (selected, &(cfun->x_avail_temp_slots));
       best_p = 0;
       break;
     }
   best_p = p;
 }
    }
  if (best_p)
    {
      selected = best_p;
      cut_slot_from_list (selected, &(cfun->x_avail_temp_slots));
      if (((enum machine_mode) (best_p->slot)->mode) == BLKmode)
 {
   int alignment = best_p->align / 8;
   long rounded_size = (((size) + (alignment) - 1) & ~((alignment)- 1));
   if (best_p->size - rounded_size >= alignment)
     {
       p = ggc_alloc_stat (sizeof (struct temp_slot) );
       p->in_use = p->addr_taken = 0;
       p->size = best_p->size - rounded_size;
       p->base_offset = best_p->base_offset + rounded_size;
       p->full_size = best_p->full_size - rounded_size;
       p->slot = gen_rtx_MEM (BLKmode,
         plus_constant_wide (((((best_p->slot)->u.fld[0]).rtx1)), (long) (rounded_size))
                       );
       p->align = best_p->align;
       p->address = 0;
       p->type = best_p->type;
       insert_slot_to_list (p, &(cfun->x_avail_temp_slots));
       (cfun->x_stack_slot_list) = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (p->slot), ((cfun->x_stack_slot_list)))
                         ;
       best_p->size = rounded_size;
       best_p->full_size = rounded_size;
     }
 }
    }
  if (selected == 0)
    {
      long frame_offset_old = (cfun->x_frame_offset);
      p = ggc_alloc_stat (sizeof (struct temp_slot) );
      if (mode == BLKmode && align < 128)
 abort ();
      p->slot = assign_stack_local (mode,
        (mode == BLKmode
         ? (((size) + ((int) align / 8) - 1) & ~(((int) align / 8)- 1))
         : size),
        align);
      p->align = align;
      p->size = frame_offset_old - (cfun->x_frame_offset);
      p->base_offset = (cfun->x_frame_offset);
      p->full_size = frame_offset_old - (cfun->x_frame_offset);
      p->address = 0;
      selected = p;
    }
  p = selected;
  p->in_use = 1;
  p->addr_taken = 0;
  p->type = type;
  if (keep == 2)
    {
      p->level = (cfun->x_target_temp_slot_level);
      p->keep = 1;
    }
  else if (keep == 3)
    {
      p->level = (cfun->x_var_temp_slot_level);
      p->keep = 0;
    }
  else
    {
      p->level = (cfun->x_temp_slot_level);
      p->keep = keep;
    }
  pp = temp_slots_at_level (p->level);
  insert_slot_to_list (p, pp);
  slot = gen_rtx_MEM (mode, (((p->slot)->u.fld[0]).rtx1));
  (cfun->x_stack_slot_list) = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (slot), ((cfun->x_stack_slot_list)));
  set_mem_alias_set (slot, type ? get_alias_set (type) : 0);
  set_mem_align (slot, align);
  if (type != 0)
    {
      (((slot))->unchanging) = (lang_hooks.honor_readonly
     && ((type)->common.readonly_flag));
      (((slot))->volatil) = ((type)->common.volatile_flag);
      do { if ((((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE)) { (((slot))->in_struct) = 1; (((slot))->return_val) = 0; } else { (((slot))->in_struct) = 0; (((slot))->return_val) = 1; } } while (0);
    }
  return slot;
}
rtx
assign_stack_temp (enum machine_mode mode, long size, int keep)
{
  return assign_stack_temp_for_type (mode, size, keep, (tree) ((void *)0));
}
rtx
assign_temp (tree type_or_decl, int keep, int memory_required,
      int dont_promote )
{
  tree type, decl;
  enum machine_mode mode;
  int unsignedp;
  if ((tree_code_type[(int) (((enum tree_code) (type_or_decl)->common.code))] == 'd'))
    decl = type_or_decl, type = ((decl)->common.type);
  else
    decl = ((void *)0), type = type_or_decl;
  mode = ((type)->type.mode);
  unsignedp = ((type)->common.unsigned_flag);
  if (mode == BLKmode || memory_required)
    {
      long size = int_size_in_bytes (type);
      tree size_tree;
      rtx tmp;
      if (size == 0)
 size = 1;
      if (size == -1 && ((enum tree_code) (type)->common.code) == ARRAY_TYPE
   && ((type)->type.maxval) != (tree) ((void *)0)
   && host_integerp (((type)->type.maxval), 1))
 size = tree_low_cst (((type)->type.maxval), 1);
      if (size == -1
   && (size_tree = lang_hooks.types.max_size (type)) != 0
   && host_integerp (size_tree, 1))
 size = tree_low_cst (size_tree, 1);
      if (decl && size == -1
   && ((enum tree_code) (((type)->type.size_unit))->common.code) == INTEGER_CST)
 {
   error ("%Jsize of variable '%D' is too large", decl, decl);
   size = 1;
 }
      tmp = assign_stack_temp_for_type (mode, size, keep, type);
      return tmp;
    }
  if (! dont_promote)
    mode = promote_mode (type, mode, &unsignedp, 0);
  return gen_reg_rtx (mode);
}
void
combine_temp_slots (void)
{
  struct temp_slot *p, *q, *next, *next_q;
  int num_slots;
  if (flag_strict_aliasing)
    return;
  if (! flag_expensive_optimizations)
    for (p = (cfun->x_avail_temp_slots), num_slots = 0; p; p = p->next, num_slots++)
      if (num_slots > 100 || (num_slots > 10 && optimize == 0))
 return;
  for (p = (cfun->x_avail_temp_slots); p; p = next)
    {
      int delete_p = 0;
      next = p->next;
      if (((enum machine_mode) (p->slot)->mode) != BLKmode)
 continue;
      for (q = p->next; q; q = next_q)
 {
          int delete_q = 0;
   next_q = q->next;
   if (((enum machine_mode) (q->slot)->mode) != BLKmode)
     continue;
   if (p->base_offset + p->full_size == q->base_offset)
     {
       p->size += q->size;
       p->full_size += q->full_size;
       delete_q = 1;
     }
   else if (q->base_offset + q->full_size == p->base_offset)
     {
       q->size += p->size;
       q->full_size += p->full_size;
       delete_p = 1;
       break;
     }
   if (delete_q)
     cut_slot_from_list (q, &(cfun->x_avail_temp_slots));
 }
      if (delete_p)
 cut_slot_from_list (p, &(cfun->x_avail_temp_slots));
    }
}
static struct temp_slot *
find_temp_slot_from_address (rtx x)
{
  struct temp_slot *p;
  rtx next;
  int i;
  for (i = max_slot_level (); i >= 0; i--)
    for (p = *temp_slots_at_level (i); p; p = p->next)
      {
 if ((((p->slot)->u.fld[0]).rtx1) == x
     || p->address == x
     || (((enum rtx_code) (x)->code) == PLUS
  && (((x)->u.fld[0]).rtx1) == (global_rtl[GR_VIRTUAL_STACK_ARGS])
  && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
  && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= p->base_offset
  && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) < p->base_offset + p->full_size))
   return p;
 else if (p->address != 0 && ((enum rtx_code) (p->address)->code) == EXPR_LIST)
   for (next = p->address; next; next = (((next)->u.fld[1]).rtx1))
     if ((((next)->u.fld[0]).rtx1) == x)
       return p;
      }
  if (((enum rtx_code) (x)->code) == PLUS && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
      && (p = find_temp_slot_from_address ((((x)->u.fld[0]).rtx1))) != 0)
    return p;
  else if (((enum rtx_code) (x)->code) == PLUS && (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG)
    && (p = find_temp_slot_from_address ((((x)->u.fld[1]).rtx1))) != 0)
    return p;
  return 0;
}
void
update_temp_slot_address (rtx old, rtx new)
{
  struct temp_slot *p;
  if (rtx_equal_p (old, new))
    return;
  p = find_temp_slot_from_address (old);
  if (p == 0)
    {
      if (((enum rtx_code) (old)->code) != PLUS)
 return;
      if ((((enum rtx_code) (new)->code) == REG))
 {
   update_temp_slot_address ((((old)->u.fld[0]).rtx1), new);
   update_temp_slot_address ((((old)->u.fld[1]).rtx1), new);
   return;
 }
      else if (((enum rtx_code) (new)->code) != PLUS)
 return;
      if (rtx_equal_p ((((old)->u.fld[0]).rtx1), (((new)->u.fld[0]).rtx1)))
 update_temp_slot_address ((((old)->u.fld[1]).rtx1), (((new)->u.fld[1]).rtx1));
      else if (rtx_equal_p ((((old)->u.fld[1]).rtx1), (((new)->u.fld[0]).rtx1)))
 update_temp_slot_address ((((old)->u.fld[0]).rtx1), (((new)->u.fld[1]).rtx1));
      else if (rtx_equal_p ((((old)->u.fld[0]).rtx1), (((new)->u.fld[1]).rtx1)))
 update_temp_slot_address ((((old)->u.fld[1]).rtx1), (((new)->u.fld[0]).rtx1));
      else if (rtx_equal_p ((((old)->u.fld[1]).rtx1), (((new)->u.fld[1]).rtx1)))
 update_temp_slot_address ((((old)->u.fld[0]).rtx1), (((new)->u.fld[0]).rtx1));
      return;
    }
  else if (p->address == 0)
    p->address = new;
  else
    {
      if (((enum rtx_code) (p->address)->code) != EXPR_LIST)
 p->address = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (p->address), ((rtx) 0));
      p->address = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (new), (p->address));
    }
}
void
mark_temp_addr_taken (rtx x)
{
  struct temp_slot *p;
  if (x == 0)
    return;
  if (!(((enum rtx_code) (x)->code) == MEM) || ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_VECTOR))
    return;
  p = find_temp_slot_from_address ((((x)->u.fld[0]).rtx1));
  if (p != 0)
    p->addr_taken = 1;
}
void
preserve_temp_slots (rtx x)
{
  struct temp_slot *p = 0, *next;
  if (x == 0)
    {
      for (p = *temp_slots_at_level ((cfun->x_temp_slot_level)); p; p = next)
 {
   next = p->next;
   if (p->addr_taken)
     move_slot_to_level (p, (cfun->x_temp_slot_level) - 1);
 }
      return;
    }
  if ((((enum rtx_code) (x)->code) == REG) && (((x))->frame_related))
    p = find_temp_slot_from_address (x);
  if (p == 0 && (!(((enum rtx_code) (x)->code) == MEM) || ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_VECTOR)))
    {
      for (p = *temp_slots_at_level ((cfun->x_temp_slot_level)); p; p = next)
 {
   next = p->next;
   if (p->addr_taken)
     move_slot_to_level (p, (cfun->x_temp_slot_level) - 1);
 }
      return;
    }
  if (p == 0)
    p = find_temp_slot_from_address ((((x)->u.fld[0]).rtx1));
  if (p != 0)
    {
      struct temp_slot *q;
      if (p->level == (cfun->x_temp_slot_level))
 {
   for (q = *temp_slots_at_level ((cfun->x_temp_slot_level)); q; q = next)
     {
       next = q->next;
       if (p != q && q->addr_taken)
  move_slot_to_level (q, (cfun->x_temp_slot_level) - 1);
     }
   move_slot_to_level (p, (cfun->x_temp_slot_level) - 1);
   p->addr_taken = 0;
 }
      return;
    }
  for (p = *temp_slots_at_level ((cfun->x_temp_slot_level)); p; p = next)
    {
      next = p->next;
      if (!p->keep)
 move_slot_to_level (p, (cfun->x_temp_slot_level) - 1);
    }
}
void
free_temp_slots (void)
{
  struct temp_slot *p, *next;
  for (p = *temp_slots_at_level ((cfun->x_temp_slot_level)); p; p = next)
    {
      next = p->next;
      if (!p->keep)
 make_slot_available (p);
    }
  combine_temp_slots ();
}
void
push_temp_slots (void)
{
  (cfun->x_temp_slot_level)++;
}
void
pop_temp_slots (void)
{
  struct temp_slot *p, *next;
  for (p = *temp_slots_at_level ((cfun->x_temp_slot_level)); p; p = next)
    {
      next = p->next;
      make_slot_available (p);
    }
  combine_temp_slots ();
  (cfun->x_temp_slot_level)--;
}
void
init_temp_slots (void)
{
  (cfun->x_avail_temp_slots) = 0;
  (cfun->x_used_temp_slots) = 0;
  (cfun->x_temp_slot_level) = 0;
  (cfun->x_var_temp_slot_level) = 0;
  (cfun->x_target_temp_slot_level) = 0;
}
static int in_arg_offset;
static int var_offset;
static int dynamic_offset;
static int out_arg_offset;
static int cfa_offset;
static void
purge_single_hard_subreg_set (rtx pattern)
{
  rtx reg = (((pattern)->u.fld[0]).rtx1);
  enum machine_mode mode = ((enum machine_mode) ((((pattern)->u.fld[0]).rtx1))->mode);
  int offset = 0;
  if (((enum rtx_code) (reg)->code) == SUBREG && (((enum rtx_code) ((((reg)->u.fld[0]).rtx1))->code) == REG)
      && ((((((reg)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
    {
      offset = subreg_regno_offset (((((((reg)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
        ((enum machine_mode) ((((reg)->u.fld[0]).rtx1))->mode),
        (((reg)->u.fld[1]).rtuint),
        ((enum machine_mode) (reg)->mode));
      reg = (((reg)->u.fld[0]).rtx1);
    }
  if ((((enum rtx_code) (reg)->code) == REG) && (((reg)->u.fld[0]).rtuint) < 53)
    {
      reg = gen_rtx_REG (mode, (((reg)->u.fld[0]).rtuint) + offset);
      (((pattern)->u.fld[0]).rtx1) = reg;
    }
}
void
purge_hard_subreg_sets (rtx insn)
{
  for (; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   rtx pattern = (((insn)->u.fld[5]).rtx1);
   switch (((enum rtx_code) (pattern)->code))
     {
     case SET:
       if (((enum rtx_code) ((((pattern)->u.fld[0]).rtx1))->code) == SUBREG)
  purge_single_hard_subreg_set (pattern);
       break;
     case PARALLEL:
       {
  int j;
  for (j = (((((pattern)->u.fld[0]).rtvec1))->num_elem) - 1; j >= 0; j--)
    {
      rtx inner_pattern = (((((pattern)->u.fld[0]).rtvec1))->elem[j]);
      if (((enum rtx_code) (inner_pattern)->code) == SET
   && ((enum rtx_code) ((((inner_pattern)->u.fld[0]).rtx1))->code) == SUBREG)
        purge_single_hard_subreg_set (inner_pattern);
    }
       }
       break;
     default:
       break;
     }
 }
    }
}
void
instantiate_virtual_regs (void)
{
  rtx insn;
  in_arg_offset = 0;
  var_offset = 0;
  dynamic_offset = (((target_flags & 0x00001000) ? ((cfun->outgoing_args_size) + 0) : 0) + (0));
  out_arg_offset = 0;
  cfa_offset = 0;
  instantiate_decls (current_function_decl, 1);
  init_recog ();
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((enum rtx_code) (insn)->code) == INSN || ((enum rtx_code) (insn)->code) == JUMP_INSN
 || ((enum rtx_code) (insn)->code) == CALL_INSN)
      {
 instantiate_virtual_regs_1 (&(((insn)->u.fld[5]).rtx1), insn, 1);
 if ((((insn))->volatil))
   continue;
 instantiate_virtual_regs_1 (&(((insn)->u.fld[8]).rtx1), (rtx) 0, 0);
 if (((enum rtx_code) (insn)->code) == CALL_INSN)
   instantiate_virtual_regs_1 (&(((insn)->u.fld[9]).rtx1),
          (rtx) 0, 0);
        if (asm_noperands ((((insn)->u.fld[5]).rtx1)) >= 0
     && ! check_asm_operands ((((insn)->u.fld[5]).rtx1)))
          instantiate_virtual_regs_lossage (insn);
      }
  instantiate_decls (current_function_decl, 0);
  virtuals_instantiated = 1;
}
static void
instantiate_decls (tree fndecl, int valid_only)
{
  tree decl;
  for (decl = ((fndecl)->decl.arguments); decl; decl = ((decl)->common.chain))
    {
      long size = int_size_in_bytes (((decl)->common.type));
      long size_rtl;
      instantiate_decl (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)), size, valid_only);
      size_rtl = ((unsigned short) mode_size[((enum machine_mode) (((decl)->decl.u2.r))->mode)]);
      size = ((size_rtl) > (size) ? (size_rtl) : (size));
      instantiate_decl (((decl)->decl.u2.r), size, valid_only);
    }
  instantiate_decls_1 (((fndecl)->decl.initial), valid_only);
}
static void
instantiate_decls_1 (tree let, int valid_only)
{
  tree t;
  for (t = ((let)->block.vars); t; t = ((t)->common.chain))
    if (((t)->decl.rtl != ((void *)0)))
      instantiate_decl (((t)->decl.rtl ? (t)->decl.rtl : (make_decl_rtl (t, ((void *)0)), (t)->decl.rtl)),
   int_size_in_bytes (((t)->common.type)),
   valid_only);
  for (t = ((let)->block.subblocks); t; t = ((t)->common.chain))
    instantiate_decls_1 (t, valid_only);
}
static void
instantiate_decl (rtx x, long size, int valid_only)
{
  enum machine_mode mode;
  rtx addr;
  if (x == 0 || !(((enum rtx_code) (x)->code) == MEM))
    return;
  addr = (((x)->u.fld[0]).rtx1);
  if (((rtx_class[(int) (((enum rtx_code) (addr)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (addr)->code) == CONST_VECTOR)
      || ((((enum rtx_code) (addr)->code) == REG)
   && ((((addr)->u.fld[0]).rtuint) < (53)
       || (((addr)->u.fld[0]).rtuint) > (((53)) + 4))))
    return;
  if (valid_only)
    addr = copy_rtx (addr);
  instantiate_virtual_regs_1 (&addr, (rtx) 0, 0);
  if (valid_only && size >= 0)
    {
      unsigned long decl_size = size;
      for (mode = class_narrowest_mode[MODE_INT];
    mode != VOIDmode && ((unsigned short) mode_size[mode]) <= decl_size;
    mode = mode_wider[mode])
 if (! memory_address_p (mode, addr))
   return;
      for (mode = class_narrowest_mode[MODE_FLOAT];
    mode != VOIDmode && ((unsigned short) mode_size[mode]) <= decl_size;
    mode = mode_wider[mode])
 if (! memory_address_p (mode, addr))
   return;
    }
  (((x)->u.fld[0]).rtx1) = addr;
}
static rtx
instantiate_new_reg (rtx x, long *poffset)
{
  rtx new;
  long offset;
  if (x == (global_rtl[GR_VIRTUAL_INCOMING_ARGS]))
    new = (global_rtl[GR_ARG_POINTER]), offset = in_arg_offset;
  else if (x == (global_rtl[GR_VIRTUAL_STACK_ARGS]))
    new = (global_rtl[GR_FRAME_POINTER]), offset = var_offset;
  else if (x == (global_rtl[GR_VIRTUAL_STACK_DYNAMIC]))
    new = (global_rtl[GR_STACK_POINTER]), offset = dynamic_offset;
  else if (x == (global_rtl[GR_VIRTUAL_OUTGOING_ARGS]))
    new = (global_rtl[GR_STACK_POINTER]), offset = out_arg_offset;
  else if (x == (global_rtl[GR_VIRTUAL_CFA]))
    new = (global_rtl[GR_ARG_POINTER]), offset = cfa_offset;
  else
    return 0;
  *poffset = offset;
  return new;
}
static void
instantiate_virtual_regs_lossage (rtx insn)
{
  if (asm_noperands ((((insn)->u.fld[5]).rtx1)) >= 0)
    {
      error_for_asm (insn, "impossible constraint in `asm'");
      delete_insn (insn);
    }
  else
    abort ();
}
static int
instantiate_virtual_regs_1 (rtx *loc, rtx object, int extra_insns)
{
  rtx x;
  enum rtx_code code;
  rtx new = 0;
  long offset = 0;
  rtx temp;
  rtx seq;
  int i, j;
  const char *fmt;
 restart:
  x = *loc;
  if (x == 0)
    return 1;
  if (object && ((((enum rtx_code) (object)->code) == INSN) || (((enum rtx_code) (object)->code) == JUMP_INSN) || (((enum rtx_code) (object)->code) == CALL_INSN)) && (((object))->volatil))
    return 1;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CONST:
    case SYMBOL_REF:
    case CODE_LABEL:
    case PC:
    case CC0:
    case ASM_INPUT:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
    case RETURN:
      return 1;
    case SET:
      if ((new = instantiate_new_reg ((((x)->u.fld[0]).rtx1), &offset)) != 0)
 {
   rtx src = (((x)->u.fld[1]).rtx1);
   offset = - offset;
   instantiate_virtual_regs_1 (&src, (rtx) 0, 0);
   if (!(((enum rtx_code) (src)->code) == REG) && ((enum rtx_code) (src)->code) != PLUS)
     {
       instantiate_virtual_regs_lossage (object);
       return 1;
     }
   start_sequence ();
   if (!(((enum rtx_code) (src)->code) == REG))
     temp = force_operand (src, (rtx) 0);
   else
     temp = src;
   temp = force_operand (plus_constant_wide ((temp), (long) (offset)), (rtx) 0);
   seq = get_insns ();
   end_sequence ();
   emit_insn_before (seq, object);
   (((x)->u.fld[0]).rtx1) = new;
   if (! validate_change (object, &(((x)->u.fld[1]).rtx1), temp, 0)
       || ! extra_insns)
     instantiate_virtual_regs_lossage (object);
   return 1;
 }
      instantiate_virtual_regs_1 (&(((x)->u.fld[0]).rtx1), object, extra_insns);
      loc = &(((x)->u.fld[1]).rtx1);
      goto restart;
    case PLUS:
      if (((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
 {
   rtx old, new_offset;
   if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS)
     {
       if ((new = instantiate_new_reg (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), &offset)))
  {
    instantiate_virtual_regs_1 (&((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1), object,
           extra_insns);
    new = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (new), (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1)));
  }
       else
  {
    loc = &(((x)->u.fld[0]).rtx1);
    goto restart;
  }
     }
   else if ((new = instantiate_new_reg ((((x)->u.fld[0]).rtx1), &offset)) == 0)
     {
       if (!(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
  {
    loc = &(((x)->u.fld[0]).rtx1);
    goto restart;
  }
       return 1;
     }
   new_offset = plus_constant_wide (((((x)->u.fld[1]).rtx1)), (long) (offset));
   if (new_offset == (const_int_rtx[64])
       && validate_change (object, loc, new, 0))
     return 1;
   old = (((x)->u.fld[0]).rtx1);
   if (offset == 0
       ? ! validate_change (object, &(((x)->u.fld[0]).rtx1), new, 0)
       : ((((x)->u.fld[0]).rtx1) = new,
   ! validate_change (object, &(((x)->u.fld[1]).rtx1), new_offset, 0)))
     {
       if (! extra_insns)
  {
    (((x)->u.fld[0]).rtx1) = old;
    return 0;
  }
       temp = gen_reg_rtx ((0 ? DImode : SImode));
       (((x)->u.fld[0]).rtx1) = new;
       if (validate_change (object, &(((x)->u.fld[1]).rtx1), temp, 0))
  emit_insn_before (gen_move_insn (temp, new_offset), object);
       else
  {
    (((x)->u.fld[0]).rtx1) = old;
    new = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (new), (new_offset));
    start_sequence ();
    temp = force_operand (new, (rtx) 0);
    seq = get_insns ();
    end_sequence ();
    emit_insn_before (seq, object);
    if (! validate_change (object, loc, temp, 0)
        && ! validate_replace_rtx (x, temp, object))
      {
        instantiate_virtual_regs_lossage (object);
        return 1;
      }
  }
     }
   return 1;
 }
    case EXPR_LIST:
    case CALL:
    case COMPARE:
    case MINUS:
    case MULT:
    case DIV: case UDIV:
    case MOD: case UMOD:
    case AND: case IOR: case XOR:
    case ROTATERT: case ROTATE:
    case ASHIFTRT: case LSHIFTRT: case ASHIFT:
    case NE: case EQ:
    case GE: case GT: case GEU: case GTU:
    case LE: case LT: case LEU: case LTU:
      if ((((x)->u.fld[1]).rtx1) && ! ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
 instantiate_virtual_regs_1 (&(((x)->u.fld[1]).rtx1), object, extra_insns);
      loc = &(((x)->u.fld[0]).rtx1);
      goto restart;
    case MEM:
      temp = (((x)->u.fld[0]).rtx1);
      if (constant_address_p (temp)
   || temp == (global_rtl[GR_ARG_POINTER])
   || temp == (global_rtl[GR_HARD_FRAME_POINTER])
   || temp == (global_rtl[GR_FRAME_POINTER]))
 return 1;
      if (((enum rtx_code) (temp)->code) == PLUS
   && constant_address_p ((((temp)->u.fld[1]).rtx1))
   && ((((temp)->u.fld[0]).rtx1) == (global_rtl[GR_FRAME_POINTER])
       || (((temp)->u.fld[0]).rtx1) == (global_rtl[GR_HARD_FRAME_POINTER])
       || (((temp)->u.fld[0]).rtx1) == (global_rtl[GR_ARG_POINTER])
       ))
 return 1;
      if (temp == (global_rtl[GR_VIRTUAL_STACK_ARGS])
   || temp == (global_rtl[GR_VIRTUAL_INCOMING_ARGS])
   || (((enum rtx_code) (temp)->code) == PLUS
       && constant_address_p ((((temp)->u.fld[1]).rtx1))
       && ((((temp)->u.fld[0]).rtx1) == (global_rtl[GR_VIRTUAL_STACK_ARGS])
    || (((temp)->u.fld[0]).rtx1) == (global_rtl[GR_VIRTUAL_INCOMING_ARGS]))))
 {
   if (instantiate_virtual_regs_1 (&(((x)->u.fld[0]).rtx1),
       object ? object : x, 0))
     return 1;
   *loc = x = copy_rtx (x);
 }
    case PREFETCH:
    case SUBREG:
    case STRICT_LOW_PART:
    case NEG: case NOT:
    case PRE_DEC: case PRE_INC: case POST_DEC: case POST_INC:
    case SIGN_EXTEND: case ZERO_EXTEND:
    case TRUNCATE: case FLOAT_EXTEND: case FLOAT_TRUNCATE:
    case FLOAT: case FIX:
    case UNSIGNED_FIX: case UNSIGNED_FLOAT:
    case ABS:
    case SQRT:
    case FFS:
    case CLZ: case CTZ:
    case POPCOUNT: case PARITY:
      loc = &(((x)->u.fld[0]).rtx1);
      goto restart;
    case USE:
    case CLOBBER:
      if (((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM)
    && instantiate_virtual_regs_1 (&((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), (((x)->u.fld[0]).rtx1),
       0))
   || ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
       && instantiate_virtual_regs_1 (&(((x)->u.fld[0]).rtx1), object, 0)))
 return 1;
      (((x)->u.fld[0]).rtx1) = copy_rtx ((((x)->u.fld[0]).rtx1));
      loc = &(((x)->u.fld[0]).rtx1);
      goto restart;
    case REG:
      if ((new = instantiate_new_reg (x, &offset)) != 0)
 {
   temp = plus_constant_wide ((new), (long) (offset));
   if (!validate_change (object, loc, temp, 0))
     {
       if (! extra_insns)
  return 0;
       start_sequence ();
       temp = force_operand (temp, (rtx) 0);
       seq = get_insns ();
       end_sequence ();
       emit_insn_before (seq, object);
       if (! validate_change (object, loc, temp, 0)
    && ! validate_replace_rtx (x, temp, object))
         instantiate_virtual_regs_lossage (object);
     }
 }
      return 1;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++, fmt++)
    if (*fmt == 'e')
      {
 if (!instantiate_virtual_regs_1 (&(((x)->u.fld[i]).rtx1), object, extra_insns))
   return 0;
      }
    else if (*fmt == 'E')
      for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
 if (! instantiate_virtual_regs_1 (&(((((x)->u.fld[i]).rtvec1))->elem[j]), object,
       extra_insns))
   return 0;
  return 1;
}
int
aggregate_value_p (tree exp, tree fntype)
{
  int i, regno, nregs;
  rtx reg;
  tree type = ((tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 't')) ? exp : ((exp)->common.type);
  if (fntype)
    switch (((enum tree_code) (fntype)->common.code))
      {
      case CALL_EXPR:
 fntype = get_callee_fndecl (fntype);
 fntype = fntype ? ((fntype)->common.type) : 0;
 break;
      case FUNCTION_DECL:
 fntype = ((fntype)->common.type);
 break;
      case FUNCTION_TYPE:
      case METHOD_TYPE:
        break;
      case IDENTIFIER_NODE:
 fntype = 0;
 break;
      default:
 abort();
      }
  if (((enum tree_code) (type)->common.code) == VOID_TYPE)
    return 0;
  if (targetm.calls.return_in_memory (type, fntype))
    return 1;
  if (((type)->common.addressable_flag))
    return 1;
  if (flag_pcc_struct_return && (((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE))
    return 1;
  reg = hard_function_value (type, 0, 0);
  if (!(((enum rtx_code) (reg)->code) == REG))
    return 0;
  regno = (((reg)->u.fld[0]).rtuint);
  nregs = hard_regno_nregs[regno][((type)->type.mode)];
  for (i = 0; i < nregs; i++)
    if (! call_used_regs[regno + i])
      return 1;
  return 0;
}
unsigned char
use_register_for_decl (tree decl)
{
  if (((decl)->common.side_effects_flag))
    return 0;
  if (((decl)->common.addressable_flag))
    return 0;
  if (((decl)->decl.mode) == BLKmode)
    return 0;
  if (flag_float_store && ((((enum tree_code) (((decl)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((decl)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((decl)->common.type))->common.type))->common.code) == REAL_TYPE)))
    return 0;
  if (((decl)->decl.artificial_flag))
    return 1;
  return (optimize || ((decl)->decl.regdecl_flag));
}
struct assign_parm_data_all
{
  CUMULATIVE_ARGS args_so_far;
  struct args_size stack_args_size;
  tree function_result_decl;
  tree orig_fnargs;
  rtx conversion_insns;
  long pretend_args_size;
  long extra_pretend_bytes;
  int reg_parm_stack_space;
};
struct assign_parm_data_one
{
  tree nominal_type;
  tree passed_type;
  rtx entry_parm;
  rtx stack_parm;
  enum machine_mode nominal_mode;
  enum machine_mode passed_mode;
  enum machine_mode promoted_mode;
  struct locate_and_pad_arg_data locate;
  int partial;
  unsigned int named_arg : 1;
  unsigned int last_named : 1;
  unsigned int passed_pointer : 1;
  unsigned int on_stack : 1;
  unsigned int loaded_in_reg : 1;
};
static void
assign_parms_initialize_all (struct assign_parm_data_all *all)
{
  tree fntype;
  memset (all, 0, sizeof (*all));
  fntype = ((current_function_decl)->common.type);
  init_cumulative_args (&(all->args_so_far), (fntype), ((rtx) 0), (current_function_decl))
                             ;
  all->reg_parm_stack_space = 0;
}
static tree
split_complex_args (tree args)
{
  tree p;
  for (p = args; p; p = ((p)->common.chain))
    {
      tree type = ((p)->common.type);
      if (((enum tree_code) (type)->common.code) == COMPLEX_TYPE
   && targetm.calls.split_complex_arg (type))
        goto found;
    }
  return args;
 found:
  args = copy_list (args);
  for (p = args; p; p = ((p)->common.chain))
    {
      tree type = ((p)->common.type);
      if (((enum tree_code) (type)->common.code) == COMPLEX_TYPE
   && targetm.calls.split_complex_arg (type))
 {
   tree decl;
   tree subtype = ((type)->common.type);
   ((p)->common.type) = subtype;
   ((p)->decl.initial) = ((((p)->decl.initial))->common.type);
   ((p)->decl.mode) = VOIDmode;
   ((p)->decl.size) = ((void *)0);
   ((p)->decl.size_unit) = ((void *)0);
   layout_decl (p, 0);
   decl = build_decl_stat (PARM_DECL,(tree) ((void *)0),subtype );
   ((decl)->decl.initial) = ((p)->decl.initial);
   layout_decl (decl, 0);
   ((decl)->common.chain) = ((p)->common.chain);
   ((p)->common.chain) = decl;
   p = decl;
 }
    }
  return args;
}
static tree
assign_parms_augmented_arg_list (struct assign_parm_data_all *all)
{
  tree fndecl = current_function_decl;
  tree fntype = ((fndecl)->common.type);
  tree fnargs = ((fndecl)->decl.arguments);
  if (aggregate_value_p (((fndecl)->decl.result), fndecl)
      && ! (cfun->returns_pcc_struct)
      && targetm.calls.struct_value_rtx (((fndecl)->common.type), 1) == 0)
    {
      tree type = build_pointer_type (((fntype)->common.type));
      tree decl;
      decl = build_decl_stat (PARM_DECL,(tree) ((void *)0),type );
      ((decl)->decl.initial) = type;
      ((decl)->decl.artificial_flag) = 1;
      ((decl)->common.chain) = fnargs;
      fnargs = decl;
      all->function_result_decl = decl;
    }
  all->orig_fnargs = fnargs;
  if (targetm.calls.split_complex_arg)
    fnargs = split_complex_args (fnargs);
  return fnargs;
}
static void
assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm,
        struct assign_parm_data_one *data)
{
  tree nominal_type, passed_type;
  enum machine_mode nominal_mode, passed_mode, promoted_mode;
  memset (data, 0, sizeof (*data));
  if ((cfun->stdarg))
    {
      tree tem;
      for (tem = ((parm)->common.chain); tem; tem = ((tem)->common.chain))
 if (((tem)->decl.name))
   break;
      if (tem == 0)
 data->last_named = 1;
    }
  if (targetm.calls.strict_argument_naming (&all->args_so_far))
    data->named_arg = 1;
  else
    data->named_arg = !data->last_named;
  nominal_type = ((parm)->common.type);
  passed_type = ((parm)->decl.initial);
  if (((parm)->common.type) == global_trees[TI_ERROR_MARK]
      || ((enum tree_code) (parm)->common.code) != PARM_DECL
      || passed_type == ((void *)0)
      || (((enum tree_code) (nominal_type)->common.code) == VOID_TYPE))
    {
      nominal_type = passed_type = global_trees[TI_VOID_TYPE];
      nominal_mode = passed_mode = promoted_mode = VOIDmode;
      goto egress;
    }
  passed_mode = ((passed_type)->type.mode);
  nominal_mode = ((nominal_type)->type.mode);
  if (((parm)->decl.transparent_union)
      || (((enum tree_code) (passed_type)->common.code) == UNION_TYPE
   && ((passed_type)->type.transparent_union_flag)))
    passed_type = ((((passed_type)->type.value1s))->common.type);
  if (((((passed_type)->type.size)) != 0 && ! ((((passed_type)->type.size))->common.constant_flag) && contains_placeholder_p (((passed_type)->type.size)))
      || ((passed_type)->common.addressable_flag)
      || function_arg_pass_by_reference(&all->args_so_far, passed_mode, passed_type, data->named_arg)
                                   )
    {
      passed_type = nominal_type = build_pointer_type (passed_type);
      data->passed_pointer = 1;
      passed_mode = nominal_mode = (0 ? DImode : SImode);
    }
  else if (passed_type != nominal_type
    && (((enum tree_code) (passed_type)->common.code) == POINTER_TYPE || ((enum tree_code) (passed_type)->common.code) == REFERENCE_TYPE)
    && ((passed_type)->common.type) == nominal_type)
    {
      nominal_type = passed_type;
      data->passed_pointer = 1;
      passed_mode = nominal_mode = (0 ? DImode : SImode);
    }
  promoted_mode = passed_mode;
  if (targetm.calls.promote_function_args (((current_function_decl)->common.type)))
    {
      int unsignedp = ((passed_type)->common.unsigned_flag);
      promoted_mode = promote_mode (passed_type, promoted_mode,
        &unsignedp, 1);
    }
 egress:
  data->nominal_type = nominal_type;
  data->passed_type = passed_type;
  data->nominal_mode = nominal_mode;
  data->passed_mode = passed_mode;
  data->promoted_mode = promoted_mode;
}
static void
assign_parms_setup_varargs (struct assign_parm_data_all *all,
       struct assign_parm_data_one *data, unsigned char no_rtl)
{
  int varargs_pretend_bytes = 0;
  targetm.calls.setup_incoming_varargs (&all->args_so_far,
     data->promoted_mode,
     data->passed_type,
     &varargs_pretend_bytes, no_rtl);
  if (varargs_pretend_bytes > 0)
    all->pretend_args_size = varargs_pretend_bytes;
}
static void
assign_parm_find_entry_rtl (struct assign_parm_data_all *all,
       struct assign_parm_data_one *data)
{
  long pretend_bytes = 0;
  rtx entry_parm;
  unsigned char in_regs;
  if (data->promoted_mode == VOIDmode)
    {
      data->entry_parm = data->stack_parm = (const_int_rtx[64]);
      return;
    }
  entry_parm = function_arg (&(all->args_so_far), (data->promoted_mode), (data->passed_type), (data->named_arg))
                                           ;
  if (entry_parm == 0)
    data->promoted_mode = data->passed_mode;
  in_regs = entry_parm != 0;
  if (!in_regs && !data->named_arg)
    {
      if (targetm.calls.pretend_outgoing_varargs_named (&all->args_so_far))
 {
   rtx tem;
   tem = function_arg (&(all->args_so_far), (data->promoted_mode), (data->passed_type), (1))
                                 ;
   in_regs = tem != ((void *)0);
 }
    }
  if (ix86_must_pass_in_stack ((data->promoted_mode), (data->passed_type)))
    entry_parm = 0;
  if (entry_parm)
    {
      int partial;
      partial = 0
                         ;
      data->partial = partial;
      if (partial != 0 && all->reg_parm_stack_space == 0)
 {
   if (all->extra_pretend_bytes || all->pretend_args_size)
     abort ();
   pretend_bytes = partial * (0 ? 8 : 4);
   all->pretend_args_size = (((pretend_bytes) + (((8 * (0 ? 8 : 4)) / 8)) - 1) & ~((((8 * (0 ? 8 : 4)) / 8))- 1));
   all->extra_pretend_bytes = all->pretend_args_size;
 }
    }
  locate_and_pad_parm (data->promoted_mode, data->passed_type, in_regs,
         entry_parm ? data->partial : 0, current_function_decl,
         &all->stack_args_size, &data->locate);
  pretend_bytes = all->extra_pretend_bytes - pretend_bytes;
  data->locate.slot_offset.constant += pretend_bytes;
  data->locate.offset.constant += pretend_bytes;
  data->entry_parm = entry_parm;
}
static unsigned char
assign_parm_is_stack_parm (struct assign_parm_data_all *all,
      struct assign_parm_data_one *data)
{
  if (data->entry_parm == ((void *)0))
    ;
  else if (data->partial != 0)
    ;
  else if (((enum rtx_code) (data->entry_parm)->code) == PARALLEL
    && ((((((((data->entry_parm)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1) == (rtx) 0)
    ;
  else if (all->reg_parm_stack_space > 0)
    ;
  else
    return 0;
  all->stack_args_size.constant += data->locate.size.constant;
  if (data->locate.size.var)
    do { tree inc = (data->locate.size.var); if (host_integerp (inc, 0)) (all->stack_args_size).constant += tree_low_cst (inc, 0); else if ((all->stack_args_size).var == 0) (all->stack_args_size).var = convert (sizetype_tab[(int) SSIZETYPE], inc); else (all->stack_args_size).var = size_binop (PLUS_EXPR, (all->stack_args_size).var, convert (sizetype_tab[(int) SSIZETYPE], inc)); } while (0);
  return 1;
}
static void
assign_parm_find_stack_rtl (tree parm, struct assign_parm_data_one *data)
{
  rtx offset_rtx, stack_parm;
  unsigned int align, boundary;
  if (data->entry_parm)
    offset_rtx = ((data->locate.slot_offset).var == 0 ? gen_rtx_CONST_INT (VOIDmode, (long) ((data->locate.slot_offset).constant)) : expand_expr (((data->locate.slot_offset).var == 0 ? size_int_wide ((long) ((data->locate.slot_offset).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (data->locate.slot_offset).var), size_int_wide ((long) ((data->locate.slot_offset).constant), SSIZETYPE))), (rtx) 0, VOIDmode, 0));
  else
    offset_rtx = ((data->locate.offset).var == 0 ? gen_rtx_CONST_INT (VOIDmode, (long) ((data->locate.offset).constant)) : expand_expr (((data->locate.offset).var == 0 ? size_int_wide ((long) ((data->locate.offset).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (data->locate.offset).var), size_int_wide ((long) ((data->locate.offset).constant), SSIZETYPE))), (rtx) 0, VOIDmode, 0));
  stack_parm = (cfun->internal_arg_pointer);
  if (offset_rtx != (const_int_rtx[64]))
    stack_parm = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (stack_parm), (offset_rtx));
  stack_parm = gen_rtx_MEM (data->promoted_mode, stack_parm);
  set_mem_attributes (stack_parm, parm, 1);
  boundary = ix86_function_arg_boundary ((data->promoted_mode), (data->passed_type));
  align = 0;
  if (data->locate.where_pad == upward || data->entry_parm)
    align = boundary;
  else if (((enum rtx_code) (offset_rtx)->code) == CONST_INT)
    {
      align = ((offset_rtx)->u.hwint[0]) * 8 | boundary;
      align = align & -align;
    }
  if (align > 0)
    set_mem_align (stack_parm, align);
  if (data->entry_parm)
    set_reg_attrs_for_parm (data->entry_parm, stack_parm);
  data->stack_parm = stack_parm;
}
static void
assign_parm_adjust_entry_rtl (struct assign_parm_data_one *data)
{
  rtx entry_parm = data->entry_parm;
  rtx stack_parm = data->stack_parm;
  if (data->partial != 0)
    {
      if (((enum rtx_code) (entry_parm)->code) == PARALLEL)
 emit_group_store (validize_mem (stack_parm), entry_parm,
     data->passed_type,
     int_size_in_bytes (data->passed_type));
      else
 move_block_from_reg ((((entry_parm)->u.fld[0]).rtuint), validize_mem (stack_parm),
        data->partial);
      entry_parm = stack_parm;
    }
  else if (entry_parm == ((void *)0))
    entry_parm = stack_parm;
  else if (((enum rtx_code) (entry_parm)->code) == PARALLEL
    && data->nominal_mode != BLKmode
    && data->passed_mode != BLKmode)
    {
      size_t i, len = (((((entry_parm)->u.fld[0]).rtvec1))->num_elem);
      for (i = 0; i < len; i++)
 if (((((((((entry_parm)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1) != (rtx) 0
     && (((enum rtx_code) (((((((((entry_parm)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1))->code) == REG)
     && (((enum machine_mode) (((((((((entry_parm)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1))->mode)
  == data->passed_mode)
     && ((((((((((entry_parm)->u.fld[0]).rtvec1))->elem[i]))->u.fld[1]).rtx1))->u.hwint[0]) == 0)
   {
     entry_parm = ((((((((entry_parm)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1);
     break;
   }
    }
  data->entry_parm = entry_parm;
}
static void
assign_parm_adjust_stack_rtl (struct assign_parm_data_one *data)
{
  rtx stack_parm = data->stack_parm;
  if (0 && stack_parm
      && get_mode_alignment (data->nominal_mode) > ((((stack_parm)->u.fld[1]).rtmem) != 0 ? (((stack_parm)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (stack_parm)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (stack_parm)->mode)) : 8)))
    stack_parm = ((void *)0);
  else if (data->entry_parm == stack_parm
    && data->nominal_mode != BLKmode
    && data->nominal_mode != data->passed_mode)
    stack_parm = ((void *)0);
  data->stack_parm = stack_parm;
}
static unsigned char
assign_parm_setup_block_p (struct assign_parm_data_one *data)
{
  if (data->nominal_mode == BLKmode)
    return 1;
  if (((enum rtx_code) (data->entry_parm)->code) == PARALLEL)
    return 1;
  return 0;
}
static void
assign_parm_setup_block (tree parm, struct assign_parm_data_one *data)
{
  rtx entry_parm = data->entry_parm;
  rtx stack_parm = data->stack_parm;
  if (((enum rtx_code) (entry_parm)->code) == PARALLEL
      && data->nominal_mode != BLKmode
      && (((((entry_parm)->u.fld[0]).rtvec1))->num_elem) > 1
      && optimize)
    {
      rtx parmreg = gen_reg_rtx (data->nominal_mode);
      emit_group_store (parmreg, entry_parm, data->nominal_type,
   int_size_in_bytes (data->nominal_type));
      set_decl_rtl (parm, parmreg);
      return;
    }
  if ((((enum rtx_code) (entry_parm)->code) == REG) || ((enum rtx_code) (entry_parm)->code) == PARALLEL)
    {
      long size = int_size_in_bytes (data->passed_type);
      long size_stored = (((size) + ((0 ? 8 : 4)) - 1) & ~(((0 ? 8 : 4))- 1));
      rtx mem;
      if (stack_parm == 0)
 {
   stack_parm = assign_stack_local (BLKmode, size_stored, 0);
   data->stack_parm = stack_parm;
   ((stack_parm)->mode = (((enum machine_mode) (entry_parm)->mode)));
   set_mem_attributes (stack_parm, parm, 1);
 }
      else if (((enum rtx_code) (entry_parm)->code) == PARALLEL)
 ;
      else if (size != 0 && (8 * (0 ? 8 : 4)) % (8 * (0 ? 8 : 4)) != 0)
 abort ();
      mem = validize_mem (stack_parm);
      if (((enum rtx_code) (entry_parm)->code) == PARALLEL)
 emit_group_store (mem, entry_parm, data->passed_type, size);
      else if (size == 0)
 ;
      else if (size <= (0 ? 8 : 4))
 {
   enum machine_mode mode
     = mode_for_size (size * 8, MODE_INT, 0);
   if (mode != BLKmode
       )
     {
       rtx reg = gen_rtx_REG (mode, (((entry_parm)->u.fld[0]).rtuint));
       emit_move_insn (change_address (mem, mode, 0), reg);
     }
   else if (size != (0 ? 8 : 4)
     && 0
     )
     {
       rtx tem, x;
       int by = ((0 ? 8 : 4) - size) * 8;
       rtx reg = gen_rtx_REG (word_mode, (((data->entry_parm)->u.fld[0]).rtuint));
       x = expand_shift (LSHIFT_EXPR, word_mode, reg,
    build_int_2_wide ((unsigned long) (by), (long) (0)), (rtx) 0, 1);
       tem = change_address (mem, word_mode, 0);
       emit_move_insn (tem, x);
     }
   else
     move_block_from_reg ((((data->entry_parm)->u.fld[0]).rtuint), mem,
     size_stored / (0 ? 8 : 4));
 }
      else
 move_block_from_reg ((((data->entry_parm)->u.fld[0]).rtuint), mem,
        size_stored / (0 ? 8 : 4));
    }
  set_decl_rtl (parm, stack_parm);
}
static void
assign_parm_setup_reg (struct assign_parm_data_all *all, tree parm,
         struct assign_parm_data_one *data)
{
  rtx parmreg;
  enum machine_mode promoted_nominal_mode;
  int unsignedp = ((((parm)->common.type))->common.unsigned_flag);
  unsigned char did_conversion = 0;
  promoted_nominal_mode
    = promote_mode (data->nominal_type, data->nominal_mode, &unsignedp, 0);
  parmreg = gen_reg_rtx (promoted_nominal_mode);
  if (!((parm)->decl.artificial_flag))
    mark_user_reg (parmreg);
  if (data->passed_pointer)
    {
      rtx x = gen_rtx_MEM (((((data->passed_type)->common.type))->type.mode), parmreg);
      set_mem_attributes (x, parm, 1);
      set_decl_rtl (parm, x);
    }
  else
    {
      set_decl_rtl (parm, parmreg);
      maybe_set_unchanging (((parm)->decl.rtl ? (parm)->decl.rtl : (make_decl_rtl (parm, ((void *)0)), (parm)->decl.rtl)), parm);
    }
  if (data->nominal_mode != data->passed_mode
      || promoted_nominal_mode != data->promoted_mode)
    {
      int save_tree_used;
      rtx tempreg = gen_reg_rtx (((enum machine_mode) (data->entry_parm)->mode));
      emit_move_insn (tempreg, validize_mem (data->entry_parm));
      push_to_sequence (all->conversion_insns);
      tempreg = convert_to_mode (data->nominal_mode, tempreg, unsignedp);
      if (((enum rtx_code) (tempreg)->code) == SUBREG
   && ((enum machine_mode) (tempreg)->mode) == data->nominal_mode
   && (((enum rtx_code) ((((tempreg)->u.fld[0]).rtx1))->code) == REG)
   && data->nominal_mode == data->passed_mode
   && ((enum machine_mode) ((((tempreg)->u.fld[0]).rtx1))->mode) == ((enum machine_mode) (data->entry_parm)->mode)
   && ((unsigned short) mode_size[((enum machine_mode) (tempreg)->mode)])
      < ((unsigned short) mode_size[((enum machine_mode) (data->entry_parm)->mode)]))
 {
   (((tempreg))->in_struct) = 1;
   do { rtx const _rtx = ((tempreg)); if ((unsignedp) < 0) _rtx->volatil = 1; else { _rtx->volatil = 0; _rtx->unchanging = (unsignedp); } } while (0);
 }
      save_tree_used = ((parm)->common.used_flag);
      expand_assignment (parm, make_tree (data->nominal_type, tempreg), 0);
      ((parm)->common.used_flag) = save_tree_used;
      all->conversion_insns = get_insns ();
      end_sequence ();
      did_conversion = 1;
    }
  else
    emit_move_insn (parmreg, validize_mem (data->entry_parm));
  if (data->passed_pointer
      && ((((parm)->common.type))->type.mode) != BLKmode
      && (((((parm)->common.type))->type.mode) != ((enum machine_mode) (((parm)->decl.rtl ? (parm)->decl.rtl : (make_decl_rtl (parm, ((void *)0)), (parm)->decl.rtl)))->mode)
   || use_register_for_decl (parm)))
    {
      parmreg = gen_reg_rtx (((((parm)->common.type))->type.mode));
      mark_user_reg (parmreg);
      if (((enum machine_mode) (parmreg)->mode) != ((enum machine_mode) (((parm)->decl.rtl ? (parm)->decl.rtl : (make_decl_rtl (parm, ((void *)0)), (parm)->decl.rtl)))->mode))
 {
   rtx tempreg = gen_reg_rtx (((enum machine_mode) (((parm)->decl.rtl ? (parm)->decl.rtl : (make_decl_rtl (parm, ((void *)0)), (parm)->decl.rtl)))->mode));
   int unsigned_p = ((((parm)->common.type))->common.unsigned_flag);
   push_to_sequence (all->conversion_insns);
   emit_move_insn (tempreg, ((parm)->decl.rtl ? (parm)->decl.rtl : (make_decl_rtl (parm, ((void *)0)), (parm)->decl.rtl)));
   tempreg = convert_to_mode (((enum machine_mode) (parmreg)->mode), tempreg, unsigned_p);
   emit_move_insn (parmreg, tempreg);
   all->conversion_insns = get_insns();
   end_sequence ();
   did_conversion = 1;
 }
      else
 emit_move_insn (parmreg, ((parm)->decl.rtl ? (parm)->decl.rtl : (make_decl_rtl (parm, ((void *)0)), (parm)->decl.rtl)));
      set_decl_rtl (parm, parmreg);
      data->stack_parm = ((void *)0);
    }
  if (data->nominal_mode == data->passed_mode
      && !did_conversion
      && data->stack_parm != 0
      && (((enum rtx_code) (data->stack_parm)->code) == MEM)
      && data->locate.offset.var == 0
      && reg_mentioned_p ((global_rtl[GR_VIRTUAL_INCOMING_ARGS]),
     (((data->stack_parm)->u.fld[0]).rtx1)))
    {
      rtx linsn = get_last_insn ();
      rtx sinsn, set;
      if (((enum rtx_code) (parmreg)->code) == CONCAT)
 {
   enum machine_mode submode
     = mode_inner[((enum machine_mode) (parmreg)->mode)];
   int regnor = (((gen_realpart (submode, parmreg))->u.fld[0]).rtuint);
   int regnoi = (((gen_imagpart (submode, parmreg))->u.fld[0]).rtuint);
   rtx stackr = gen_realpart (submode, data->stack_parm);
   rtx stacki = gen_imagpart (submode, data->stack_parm);
   for (sinsn = linsn; sinsn != 0;
        sinsn = prev_nonnote_insn (sinsn))
     {
       set = (((((enum rtx_code) (sinsn)->code) == INSN) || (((enum rtx_code) (sinsn)->code) == JUMP_INSN) || (((enum rtx_code) (sinsn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((sinsn)->u.fld[5]).rtx1))->code) == SET ? (((sinsn)->u.fld[5]).rtx1) : single_set_2 (sinsn, (((sinsn)->u.fld[5]).rtx1))) : (rtx) 0);
       if (set == 0)
  continue;
       if ((((set)->u.fld[0]).rtx1) == (cfun->emit->x_regno_reg_rtx) [regnoi])
  (((sinsn)->u.fld[8]).rtx1)
    = gen_rtx_fmt_ee (EXPR_LIST, (REG_EQUIV), (stacki), ((((sinsn)->u.fld[8]).rtx1)))
                             ;
       else if ((((set)->u.fld[0]).rtx1) == (cfun->emit->x_regno_reg_rtx) [regnor])
  (((sinsn)->u.fld[8]).rtx1)
    = gen_rtx_fmt_ee (EXPR_LIST, (REG_EQUIV), (stackr), ((((sinsn)->u.fld[8]).rtx1)))
                             ;
     }
 }
      else if ((set = (((((enum rtx_code) (linsn)->code) == INSN) || (((enum rtx_code) (linsn)->code) == JUMP_INSN) || (((enum rtx_code) (linsn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((linsn)->u.fld[5]).rtx1))->code) == SET ? (((linsn)->u.fld[5]).rtx1) : single_set_2 (linsn, (((linsn)->u.fld[5]).rtx1))) : (rtx) 0)) != 0
        && (((set)->u.fld[0]).rtx1) == parmreg)
 (((linsn)->u.fld[8]).rtx1)
   = gen_rtx_fmt_ee (EXPR_LIST, (REG_EQUIV), (data->stack_parm), ((((linsn)->u.fld[8]).rtx1)))
                                              ;
    }
  if ((((enum tree_code) (((parm)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((parm)->common.type))->common.code) == REFERENCE_TYPE))
    mark_reg_pointer (parmreg,
        ((((((parm)->common.type))->common.type))->type.align));
}
static void
assign_parm_setup_stack (struct assign_parm_data_all *all, tree parm,
           struct assign_parm_data_one *data)
{
  if (data->promoted_mode != data->nominal_mode)
    {
      rtx tempreg = gen_reg_rtx (((enum machine_mode) (data->entry_parm)->mode));
      emit_move_insn (tempreg, validize_mem (data->entry_parm));
      push_to_sequence (all->conversion_insns);
      data->entry_parm = convert_to_mode (data->nominal_mode, tempreg,
       ((((parm)->common.type))->common.unsigned_flag));
      if (data->stack_parm)
 data->stack_parm
   = adjust_address_1 (data->stack_parm, data->nominal_mode, 0, 1, 1);
      all->conversion_insns = get_insns ();
      end_sequence ();
    }
  if (data->entry_parm != data->stack_parm)
    {
      if (data->stack_parm == 0)
 {
   data->stack_parm
     = assign_stack_local (((enum machine_mode) (data->entry_parm)->mode),
      ((unsigned short) mode_size[((enum machine_mode) (data->entry_parm)->mode)]),
      0);
   set_mem_attributes (data->stack_parm, parm, 1);
 }
      if (data->promoted_mode != data->nominal_mode)
 {
   push_to_sequence (all->conversion_insns);
   emit_move_insn (validize_mem (data->stack_parm),
     validize_mem (data->entry_parm));
   all->conversion_insns = get_insns ();
   end_sequence ();
 }
      else
 emit_move_insn (validize_mem (data->stack_parm),
   validize_mem (data->entry_parm));
    }
  set_decl_rtl (parm, data->stack_parm);
}
static void
assign_parms_unsplit_complex (tree orig_fnargs, tree fnargs)
{
  tree parm;
  for (parm = orig_fnargs; parm; parm = ((parm)->common.chain))
    {
      if (((enum tree_code) (((parm)->common.type))->common.code) == COMPLEX_TYPE
   && targetm.calls.split_complex_arg (((parm)->common.type)))
 {
   rtx tmp, real, imag;
   enum machine_mode inner = mode_inner[((parm)->decl.mode)];
   real = ((fnargs)->decl.rtl ? (fnargs)->decl.rtl : (make_decl_rtl (fnargs, ((void *)0)), (fnargs)->decl.rtl));
   imag = ((((fnargs)->common.chain))->decl.rtl ? (((fnargs)->common.chain))->decl.rtl : (make_decl_rtl (((fnargs)->common.chain), ((void *)0)), (((fnargs)->common.chain))->decl.rtl));
   if (inner != ((enum machine_mode) (real)->mode))
     {
       real = gen_lowpart_SUBREG (inner, real);
       imag = gen_lowpart_SUBREG (inner, imag);
     }
   tmp = gen_rtx_fmt_ee (CONCAT, (((parm)->decl.mode)), (real), (imag));
   set_decl_rtl (parm, tmp);
   real = ((fnargs)->decl.u2.r);
   imag = ((((fnargs)->common.chain))->decl.u2.r);
   if (inner != ((enum machine_mode) (real)->mode))
     {
       real = gen_lowpart_SUBREG (inner, real);
       imag = gen_lowpart_SUBREG (inner, imag);
     }
   tmp = gen_rtx_fmt_ee (CONCAT, (((parm)->decl.mode)), (real), (imag));
   set_decl_incoming_rtl (parm, tmp);
   fnargs = ((fnargs)->common.chain);
 }
      else
 {
   set_decl_rtl (parm, ((fnargs)->decl.rtl ? (fnargs)->decl.rtl : (make_decl_rtl (fnargs, ((void *)0)), (fnargs)->decl.rtl)));
   set_decl_incoming_rtl (parm, ((fnargs)->decl.u2.r));
   if (((parm)->decl.u2.r) && (((enum rtx_code) (((parm)->decl.u2.r))->code) == MEM))
     set_mem_expr (((parm)->decl.u2.r), parm);
 }
      fnargs = ((fnargs)->common.chain);
    }
}
void
assign_parms (tree fndecl)
{
  struct assign_parm_data_all all;
  tree fnargs, parm;
  rtx internal_arg_pointer;
  int varargs_setup = 0;
  if ((16 == 7
       || ! (fixed_regs[16]
      || 16 == 20)))
    internal_arg_pointer = copy_to_reg ((global_rtl[GR_VIRTUAL_INCOMING_ARGS]));
  else
    internal_arg_pointer = (global_rtl[GR_VIRTUAL_INCOMING_ARGS]);
  (cfun->internal_arg_pointer) = internal_arg_pointer;
  assign_parms_initialize_all (&all);
  fnargs = assign_parms_augmented_arg_list (&all);
  for (parm = fnargs; parm; parm = ((parm)->common.chain))
    {
      struct assign_parm_data_one data;
      assign_parm_find_data_types (&all, parm, &data);
      if (data.passed_mode == VOIDmode)
 {
   set_decl_rtl (parm, (const_int_rtx[64]));
   ((parm)->decl.u2.r) = ((parm)->decl.rtl ? (parm)->decl.rtl : (make_decl_rtl (parm, ((void *)0)), (parm)->decl.rtl));
   continue;
 }
      if (data.last_named && !varargs_setup)
 {
   varargs_setup = 1;
   assign_parms_setup_varargs (&all, &data, 0);
 }
      assign_parm_find_entry_rtl (&all, &data);
      if (assign_parm_is_stack_parm (&all, &data))
 {
   assign_parm_find_stack_rtl (parm, &data);
   assign_parm_adjust_entry_rtl (&data);
 }
      set_decl_incoming_rtl (parm, data.entry_parm);
      function_arg_advance (&(all.args_so_far), (data.promoted_mode), (data.passed_type), (data.named_arg))
                                        ;
      assign_parm_adjust_stack_rtl (&data);
      if (assign_parm_setup_block_p (&data))
 assign_parm_setup_block (parm, &data);
      else if (data.passed_pointer || use_register_for_decl (parm))
 assign_parm_setup_reg (&all, parm, &data);
      else
 assign_parm_setup_stack (&all, parm, &data);
    }
  if (targetm.calls.split_complex_arg && fnargs != all.orig_fnargs)
    assign_parms_unsplit_complex (all.orig_fnargs, fnargs);
  emit_insn (all.conversion_insns);
  if (all.function_result_decl)
    {
      tree result = ((current_function_decl)->decl.result);
      rtx addr = ((all.function_result_decl)->decl.rtl ? (all.function_result_decl)->decl.rtl : (make_decl_rtl (all.function_result_decl, ((void *)0)), (all.function_result_decl)->decl.rtl));
      rtx x;
      addr = convert_memory_address ((0 ? DImode : SImode), addr);
      x = gen_rtx_MEM (((result)->decl.mode), addr);
      set_mem_attributes (x, result, 1);
      set_decl_rtl (result, x);
    }
  (cfun->pretend_args_size) = all.pretend_args_size;
  all.stack_args_size.constant += all.extra_pretend_bytes;
  (cfun->args_size) = all.stack_args_size.constant;
  (cfun->args_size) = (((cfun->args_size)) > (0) ? ((cfun->args_size)) : (0))
                                      ;
  (cfun->args_size)
    = (((cfun->args_size) + ((8 * (0 ? 8 : 4)) / 8) - 1)
       / ((8 * (0 ? 8 : 4)) / 8)) * ((8 * (0 ? 8 : 4)) / 8);
  (cfun->arg_offset_rtx) = ((all.stack_args_size).var == 0 ? gen_rtx_CONST_INT (VOIDmode, (long) ((all.stack_args_size).constant)) : expand_expr (((all.stack_args_size).var == 0 ? size_int_wide ((long) ((all.stack_args_size).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (all.stack_args_size).var), size_int_wide ((long) ((all.stack_args_size).constant), SSIZETYPE))), (rtx) 0, VOIDmode, 0));
  (cfun->pops_args) = ix86_return_pops_args ((fndecl), (((fndecl)->common.type)), ((cfun->args_size)))
                                  ;
  (cfun->args_info) = all.args_so_far;
  (cfun->return_rtx)
    = (((((fndecl)->decl.result))->decl.rtl != ((void *)0))
       ? ((((fndecl)->decl.result))->decl.rtl ? (((fndecl)->decl.result))->decl.rtl : (make_decl_rtl (((fndecl)->decl.result), ((void *)0)), (((fndecl)->decl.result))->decl.rtl)) : (rtx) 0);
  if (((((fndecl)->decl.result))->decl.rtl != ((void *)0)))
    {
      tree decl_result = ((fndecl)->decl.result);
      rtx decl_rtl = ((decl_result)->decl.rtl ? (decl_result)->decl.rtl : (make_decl_rtl (decl_result, ((void *)0)), (decl_result)->decl.rtl));
      if ((((enum rtx_code) (decl_rtl)->code) == REG)
   ? (((decl_rtl)->u.fld[0]).rtuint) >= 53
   : ((decl_result)->decl.regdecl_flag))
 {
   rtx real_decl_rtl;
   real_decl_rtl = ix86_function_value (((decl_result)->common.type))
              ;
   (((real_decl_rtl))->return_val) = 1;
   (cfun->return_rtx) = real_decl_rtl;
 }
    }
}
rtx
promoted_input_arg (unsigned int regno, enum machine_mode *pmode, int *punsignedp)
{
  tree arg;
  for (arg = ((current_function_decl)->decl.arguments); arg;
       arg = ((arg)->common.chain))
    if ((((enum rtx_code) (((arg)->decl.u2.r))->code) == REG)
 && (((((arg)->decl.u2.r))->u.fld[0]).rtuint) == regno
 && ((((arg)->decl.initial))->type.mode) == ((((arg)->common.type))->type.mode))
      {
 enum machine_mode mode = ((((arg)->common.type))->type.mode);
 int unsignedp = ((((arg)->common.type))->common.unsigned_flag);
 mode = promote_mode (((arg)->common.type), mode, &unsignedp, 1);
 if (mode == ((enum machine_mode) (((arg)->decl.u2.r))->mode)
     && mode != ((arg)->decl.mode))
   {
     *pmode = ((arg)->decl.mode);
     *punsignedp = unsignedp;
     return ((arg)->decl.u2.r);
   }
      }
  return 0;
}
void
locate_and_pad_parm (enum machine_mode passed_mode, tree type, int in_regs,
       int partial, tree fndecl ,
       struct args_size *initial_offset_ptr,
       struct locate_and_pad_arg_data *locate)
{
  tree sizetree;
  enum direction where_pad;
  int boundary;
  int reg_parm_stack_space = 0;
  int part_size_in_regs;
  reg_parm_stack_space = 0;
  if (! in_regs)
    {
      if (reg_parm_stack_space > 0)
 {
   if (initial_offset_ptr->var)
     {
       initial_offset_ptr->var
  = size_binop (MAX_EXPR, ((*initial_offset_ptr).var == 0 ? size_int_wide ((long) ((*initial_offset_ptr).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (*initial_offset_ptr).var), size_int_wide ((long) ((*initial_offset_ptr).constant), SSIZETYPE))),
         size_int_wide ((long) (reg_parm_stack_space), SSIZETYPE));
       initial_offset_ptr->constant = 0;
     }
   else if (initial_offset_ptr->constant < reg_parm_stack_space)
     initial_offset_ptr->constant = reg_parm_stack_space;
 }
    }
  part_size_in_regs = 0;
  if (reg_parm_stack_space == 0)
    part_size_in_regs = ((partial * (0 ? 8 : 4))
    / ((8 * (0 ? 8 : 4)) / 8)
    * ((8 * (0 ? 8 : 4)) / 8));
  sizetree
    = type ? size_in_bytes (type) : size_int_wide ((long) (((unsigned short) mode_size[passed_mode])), SIZETYPE);
  where_pad = (! 0 ? upward : ((((passed_mode)) == BLKmode ? (((type)) && ((enum tree_code) ((((type))->type.size))->common.code) == INTEGER_CST && int_size_in_bytes ((type)) < ((8 * (0 ? 8 : 4)) / 8)) : ((unsigned short) (((unsigned short) mode_size[(passed_mode)]) * 8)) < (8 * (0 ? 8 : 4))) ? downward : upward));
  boundary = ix86_function_arg_boundary ((passed_mode), (type));
  locate->where_pad = where_pad;
  if (!in_regs
      || 0 > 0
      )
    pad_to_arg_alignment (initial_offset_ptr, boundary,
     &locate->alignment_pad);
  locate->slot_offset = *initial_offset_ptr;
  if (passed_mode != BLKmode)
    sizetree = size_int_wide ((long) ((0 ? ((((((sizetree)->int_cst.int_cst).low)) + 7) & (-8)) : ((((((sizetree)->int_cst.int_cst).low)) + 1) & (-2)))), SIZETYPE);
  locate->offset = locate->slot_offset;
  if (where_pad == downward)
    pad_below (&locate->offset, passed_mode, sizetree);
  if (where_pad != none
      && (!host_integerp (sizetree, 1)
   || (tree_low_cst (sizetree, 1) * 8) % (8 * (0 ? 8 : 4))))
    sizetree = round_up (sizetree, (8 * (0 ? 8 : 4)) / 8);
  do { tree inc = (sizetree); if (host_integerp (inc, 0)) (locate->size).constant += tree_low_cst (inc, 0); else if ((locate->size).var == 0) (locate->size).var = convert (sizetype_tab[(int) SSIZETYPE], inc); else (locate->size).var = size_binop (PLUS_EXPR, (locate->size).var, convert (sizetype_tab[(int) SSIZETYPE], inc)); } while (0);
  locate->size.constant -= part_size_in_regs;
}
static void
pad_to_arg_alignment (struct args_size *offset_ptr, int boundary,
        struct args_size *alignment_pad)
{
  tree save_var = (tree) ((void *)0);
  long save_constant = 0;
  int boundary_in_bytes = boundary / 8;
  long sp_offset = 0;
  if (boundary > (8 * (0 ? 8 : 4)) && boundary > (8 * (0 ? 8 : 4)))
    {
      save_var = offset_ptr->var;
      save_constant = offset_ptr->constant;
    }
  alignment_pad->var = (tree) ((void *)0);
  alignment_pad->constant = 0;
  if (boundary > 8)
    {
      if (offset_ptr->var)
 {
   tree sp_offset_tree = size_int_wide ((long) (sp_offset), SSIZETYPE);
   tree offset = size_binop (PLUS_EXPR,
        ((*offset_ptr).var == 0 ? size_int_wide ((long) ((*offset_ptr).constant), SSIZETYPE) : size_binop (PLUS_EXPR, convert (sizetype_tab[(int) SSIZETYPE], (*offset_ptr).var), size_int_wide ((long) ((*offset_ptr).constant), SSIZETYPE))),
        sp_offset_tree);
   tree rounded = round_up (offset, boundary / 8);
   offset_ptr->var = size_binop (MINUS_EXPR, rounded, sp_offset_tree);
   offset_ptr->constant = 0;
   if (boundary > (8 * (0 ? 8 : 4)) && boundary > (8 * (0 ? 8 : 4)))
     alignment_pad->var = size_binop (MINUS_EXPR, offset_ptr->var,
          save_var);
 }
      else
 {
   offset_ptr->constant = -sp_offset +
     (((offset_ptr->constant + sp_offset) + (boundary_in_bytes) - 1) & ~((boundary_in_bytes)- 1));
     if (boundary > (8 * (0 ? 8 : 4)) && boundary > (8 * (0 ? 8 : 4)))
       alignment_pad->constant = offset_ptr->constant - save_constant;
 }
    }
}
static void
pad_below (struct args_size *offset_ptr, enum machine_mode passed_mode, tree sizetree)
{
  if (passed_mode != BLKmode)
    {
      if (((unsigned short) (((unsigned short) mode_size[passed_mode]) * 8)) % (8 * (0 ? 8 : 4)))
 offset_ptr->constant
   += (((((unsigned short) (((unsigned short) mode_size[passed_mode]) * 8)) + (8 * (0 ? 8 : 4)) - 1)
        / (8 * (0 ? 8 : 4)) * (8 * (0 ? 8 : 4)) / 8)
       - ((unsigned short) mode_size[passed_mode]));
    }
  else
    {
      if (((enum tree_code) (sizetree)->common.code) != INTEGER_CST
   || ((((sizetree)->int_cst.int_cst).low) * 8) % (8 * (0 ? 8 : 4)))
 {
   tree s2 = round_up (sizetree, (8 * (0 ? 8 : 4)) / 8);
   do { tree inc = (s2); if (host_integerp (inc, 0)) (*offset_ptr).constant += tree_low_cst (inc, 0); else if ((*offset_ptr).var == 0) (*offset_ptr).var = convert (sizetype_tab[(int) SSIZETYPE], inc); else (*offset_ptr).var = size_binop (PLUS_EXPR, (*offset_ptr).var, convert (sizetype_tab[(int) SSIZETYPE], inc)); } while (0);
   do { tree dec = (sizetree); if (host_integerp (dec, 0)) (*offset_ptr).constant -= tree_low_cst (dec, 0); else if ((*offset_ptr).var == 0) (*offset_ptr).var = size_binop (MINUS_EXPR, size_int_wide ((long) (0), SSIZETYPE), convert (sizetype_tab[(int) SSIZETYPE], dec)); else (*offset_ptr).var = size_binop (MINUS_EXPR, (*offset_ptr).var, convert (sizetype_tab[(int) SSIZETYPE], dec)); } while (0);
 }
    }
}
void
setjmp_vars_warning (tree block)
{
  tree decl, sub;
  for (decl = ((block)->block.vars); decl; decl = ((decl)->common.chain))
    {
      if (((enum tree_code) (decl)->common.code) == VAR_DECL
   && ((decl)->decl.rtl != ((void *)0))
   && (((enum rtx_code) (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->code) == REG)
   && regno_clobbered_at_setjmp ((((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtuint)))
 warning ("%Jvariable '%D' might be clobbered by `longjmp' or `vfork'",
   decl, decl);
    }
  for (sub = ((block)->block.subblocks); sub; sub = ((sub)->common.chain))
    setjmp_vars_warning (sub);
}
void
setjmp_args_warning (void)
{
  tree decl;
  for (decl = ((current_function_decl)->decl.arguments);
       decl; decl = ((decl)->common.chain))
    if (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)) != 0
 && (((enum rtx_code) (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->code) == REG)
 && regno_clobbered_at_setjmp ((((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtuint)))
      warning ("%Jargument '%D' might be clobbered by `longjmp' or `vfork'",
        decl, decl);
}
rtx
fix_lexical_addr (rtx addr, tree var)
{
  rtx basereg;
  long displacement;
  tree context = decl_function_context (var);
  struct function *fp;
  rtx base = 0;
  if (context == current_function_decl)
    return addr;
  fp = find_function_data (context);
  if ((((enum rtx_code) (addr)->code) == REG))
    basereg = addr, displacement = 0;
  else if (((enum rtx_code) (addr)->code) == PLUS && ((enum rtx_code) ((((addr)->u.fld[1]).rtx1))->code) == CONST_INT)
    basereg = (((addr)->u.fld[0]).rtx1), displacement = (((((addr)->u.fld[1]).rtx1))->u.hwint[0]);
  else
    abort ();
  if (base == 0)
    abort ();
  return plus_constant_wide ((base), (long) (displacement));
}
void
reorder_blocks (void)
{
  tree block = ((current_function_decl)->decl.initial);
  varray_type block_stack;
  if (block == (tree) ((void *)0))
    return;
  block_stack = varray_init (10, VARRAY_DATA_TREE, "block_stack");
  clear_block_marks (block);
  ((block)->block.subblocks) = (tree) ((void *)0);
  (((block))->common.chain) = (tree) ((void *)0);
  reorder_blocks_1 (get_insns (), block, &block_stack);
  ((block)->block.subblocks) = blocks_nreverse (((block)->block.subblocks));
  reorder_fix_fragments (block);
}
void
clear_block_marks (tree block)
{
  while (block)
    {
      ((block)->common.asm_written_flag) = 0;
      clear_block_marks (((block)->block.subblocks));
      block = (((block))->common.chain);
    }
}
static void
reorder_blocks_1 (rtx insns, tree current_block, varray_type *p_block_stack)
{
  rtx insn;
  for (insn = insns; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == NOTE)
 {
   if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_BLOCK_BEG)
     {
       tree block = (((insn)->u.fld[4]).rttree);
       if (((block)->common.asm_written_flag))
  {
    tree new_block = copy_node_stat (block );
    tree origin;
    origin = (((block)->block.fragment_origin)
       ? ((block)->block.fragment_origin)
       : block);
    ((new_block)->block.fragment_origin) = origin;
    ((new_block)->block.fragment_chain)
      = ((origin)->block.fragment_chain);
    ((origin)->block.fragment_chain) = new_block;
    (((insn)->u.fld[4]).rttree) = new_block;
    block = new_block;
  }
       ((block)->block.subblocks) = 0;
       ((block)->common.asm_written_flag) = 1;
       if (block != current_block)
  {
    ((block)->block.supercontext) = current_block;
    (((block))->common.chain) = ((current_block)->block.subblocks);
    ((current_block)->block.subblocks) = block;
    current_block = block;
  }
       do { if ((*p_block_stack)->elements_used >= (*p_block_stack)->num_elements) (((*p_block_stack)) = varray_grow ((*p_block_stack), 2 * (*p_block_stack)->num_elements)); (*p_block_stack)->data.tree1[(*p_block_stack)->elements_used++] = (block); } while (0);
     }
   else if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_BLOCK_END)
     {
       (((insn)->u.fld[4]).rttree) = ((*p_block_stack)->data.tree1[(*p_block_stack)->elements_used - 1]);
       do { ((*p_block_stack)->elements_used--); } while (0);
       ((current_block)->block.subblocks)
  = blocks_nreverse (((current_block)->block.subblocks));
       current_block = ((current_block)->block.supercontext);
     }
 }
    }
}
static void
reorder_fix_fragments (tree block)
{
  while (block)
    {
      tree dup_origin = ((block)->block.fragment_origin);
      tree new_origin = (tree) ((void *)0);
      if (dup_origin)
 {
   if (! ((dup_origin)->common.asm_written_flag))
     {
       new_origin = ((dup_origin)->block.fragment_chain);
       while (! ((new_origin)->common.asm_written_flag))
  new_origin = ((new_origin)->block.fragment_chain);
       ((new_origin)->block.fragment_origin) = (tree) ((void *)0);
     }
 }
      else if (! dup_origin)
 new_origin = block;
      if (new_origin)
 {
   tree *pp = &((new_origin)->block.fragment_chain);
   tree chain = *pp;
   while (chain)
     {
       if (((chain)->common.asm_written_flag))
  {
    ((chain)->block.fragment_origin) = new_origin;
    *pp = chain;
    pp = &((chain)->block.fragment_chain);
  }
       chain = ((chain)->block.fragment_chain);
     }
   *pp = (tree) ((void *)0);
 }
      reorder_fix_fragments (((block)->block.subblocks));
      block = (((block))->common.chain);
    }
}
tree
blocks_nreverse (tree t)
{
  tree prev = 0, decl, next;
  for (decl = t; decl; decl = next)
    {
      next = (((decl))->common.chain);
      (((decl))->common.chain) = prev;
      prev = decl;
    }
  return prev;
}
static int
all_blocks (tree block, tree *vector)
{
  int n_blocks = 0;
  while (block)
    {
      ((block)->common.asm_written_flag) = 0;
      if (vector)
 vector[n_blocks] = block;
      ++n_blocks;
      n_blocks += all_blocks (((block)->block.subblocks),
         vector ? vector + n_blocks : 0);
      block = (((block))->common.chain);
    }
  return n_blocks;
}
static tree *
get_block_vector (tree block, int *n_blocks_p)
{
  tree *block_vector;
  *n_blocks_p = all_blocks (block, ((void *)0));
  block_vector = xmalloc (*n_blocks_p * sizeof (tree));
  all_blocks (block, block_vector);
  return block_vector;
}
static int next_block_index = 2;
void
number_blocks (tree fn)
{
  int i;
  int n_blocks;
  tree *block_vector;
  block_vector = get_block_vector (((fn)->decl.initial), &n_blocks);
  for (i = 1; i < n_blocks; ++i)
    ((block_vector[i])->block.block_num) = next_block_index++;
  free (block_vector);
  return;
}
tree
debug_find_var_in_block_tree (tree var, tree block)
{
  tree t;
  for (t = ((block)->block.vars); t; t = ((t)->common.chain))
    if (t == var)
      return block;
  for (t = ((block)->block.subblocks); t; t = ((t)->common.chain))
    {
      tree ret = debug_find_var_in_block_tree (var, t);
      if (ret)
 return ret;
    }
  return (tree) ((void *)0);
}
void
allocate_struct_function (tree fndecl)
{
  tree result;
  tree fntype = fndecl ? ((fndecl)->common.type) : (tree) ((void *)0);
  cfun = ggc_alloc_cleared_stat (sizeof (struct function) );
  cfun->stack_alignment_needed = (8 * (0 ? 8 : 4));
  cfun->preferred_stack_boundary = (8 * (0 ? 8 : 4));
  (cfun->funcdef_no) = funcdef_no++;
  cfun->function_frequency = FUNCTION_FREQUENCY_NORMAL;
  init_stmt_for_function ();
  init_eh_for_function ();
  lang_hooks.function.init (cfun);
  if (init_machine_status)
    cfun->machine = (*init_machine_status) ();
  if (fndecl == ((void *)0))
    return;
  ((fndecl)->decl.u2.f) = cfun;
  cfun->decl = fndecl;
  result = ((fndecl)->decl.result);
  if (aggregate_value_p (result, fndecl))
    {
      (cfun->returns_struct) = 1;
    }
  (cfun->returns_pointer) = (((enum tree_code) (((result)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((result)->common.type))->common.code) == REFERENCE_TYPE);
  (cfun->stdarg)
    = (fntype
       && ((fntype)->type.value1s) != 0
       && (((tree_last (((fntype)->type.value1s)))->list.value1)
    != global_trees[TI_VOID_TYPE]));
}
static void
prepare_function_start (tree fndecl)
{
  if (fndecl && ((fndecl)->decl.u2.f))
    cfun = ((fndecl)->decl.u2.f);
  else
    allocate_struct_function (fndecl);
  init_emit ();
  init_varasm_status (cfun);
  init_expr ();
  cse_not_expected = ! optimize;
  caller_save_needed = 0;
  reg_renumber = 0;
  rtx_equal_function_value_matters = 1;
  virtuals_instantiated = 0;
  generating_concat_p = 1;
  frame_pointer_needed = 0;
}
void
init_dummy_function_start (void)
{
  prepare_function_start (((void *)0));
}
void
init_function_start (tree subr)
{
  prepare_function_start (subr);
  if (! ((((((subr)->decl.locus))).line) == 0))
    emit_line_note (((subr)->decl.locus));
  emit_note (NOTE_INSN_DELETED);
  if (warn_aggregate_return
      && (((enum tree_code) (((((subr)->decl.result))->common.type))->common.code) == ARRAY_TYPE || ((enum tree_code) (((((subr)->decl.result))->common.type))->common.code) == RECORD_TYPE || ((enum tree_code) (((((subr)->decl.result))->common.type))->common.code) == UNION_TYPE || ((enum tree_code) (((((subr)->decl.result))->common.type))->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (((((subr)->decl.result))->common.type))->common.code) == SET_TYPE))
    warning ("function returns an aggregate");
}
void
init_function_for_compilation (void)
{
  reg_renumber = 0;
  ((prologue) = varray_grow (prologue, 0));
  ((epilogue) = varray_grow (epilogue, 0));
  ((sibcall_epilogue) = varray_grow (sibcall_epilogue, 0));
}
void
expand_main_function (void)
{
  if ((ix86_preferred_stack_boundary > (8 * (0 ? 8 : 4)) && !0))
    {
      int align = ix86_preferred_stack_boundary / 8;
      rtx tmp, seq;
      start_sequence ();
      tmp = expand_simple_binop ((0 ? DImode : SImode), AND, (global_rtl[GR_STACK_POINTER]), gen_rtx_CONST_INT (VOIDmode, (long) (-align)),
     (global_rtl[GR_STACK_POINTER]), 1, OPTAB_WIDEN);
      if (tmp != (global_rtl[GR_STACK_POINTER]))
 emit_move_insn ((global_rtl[GR_STACK_POINTER]), tmp);
      tmp = force_reg ((0 ? DImode : SImode), (const_int_rtx[64]));
      allocate_dynamic_stack_space (tmp, (rtx) 0, 128);
      seq = get_insns ();
      end_sequence ();
      for (tmp = get_last_insn (); tmp; tmp = (((tmp)->u.fld[1]).rtx1))
 if ((((enum rtx_code) (tmp)->code) == NOTE) && (((tmp)->u.fld[5]).rtint) == NOTE_INSN_FUNCTION_BEG)
   break;
      if (tmp)
 emit_insn_before (seq, tmp);
      else
 emit_insn (seq);
    }
}
void
expand_pending_sizes (tree pending_sizes)
{
  tree tem;
  for (tem = pending_sizes; tem; tem = ((tem)->common.chain))
    {
      expand_expr (((tem)->list.value1), (const_int_rtx[64]), VOIDmode, 0);
      emit_queue ();
    }
}
void
expand_function_start (tree subr)
{
  init_recog_no_volatile ();
  (cfun->profile)
    = (profile_flag
       && ! ((subr)->decl.no_instrument_function_entry_exit));
  (cfun->limit_stack)
    = (stack_limit_rtx != (rtx) 0 && ! ((subr)->decl.no_limit_stack));
  (cfun->x_return_label) = gen_label_rtx ();
  if (aggregate_value_p (((subr)->decl.result), subr))
    {
      rtx value1_address = 0;
 {
   rtx sv = targetm.calls.struct_value_rtx (((subr)->common.type), 1);
   if (sv)
     {
       value_address = gen_reg_rtx ((0 ? DImode : SImode));
       emit_move_insn (value_address, sv);
     }
 }
      if (value_address)
 {
   rtx x = gen_rtx_MEM (((((subr)->decl.result))->decl.mode), value_address);
   set_mem_attributes (x, ((subr)->decl.result), 1);
   set_decl_rtl (((subr)->decl.result), x);
 }
    }
  else if (((((subr)->decl.result))->decl.mode) == VOIDmode)
    set_decl_rtl (((subr)->decl.result), (rtx) 0);
  else
    {
      rtx hard_reg
 = hard_function_value (((((subr)->decl.result))->common.type),
          subr, 1);
      if ((((enum rtx_code) (hard_reg)->code) == REG))
 set_decl_rtl (((subr)->decl.result), gen_reg_rtx (((enum machine_mode) (hard_reg)->mode)));
      else if (((enum rtx_code) (hard_reg)->code) == PARALLEL)
 set_decl_rtl (((subr)->decl.result), gen_group_rtx (hard_reg));
      else
 abort ();
      ((((subr)->decl.result))->decl.regdecl_flag) = 1;
    }
  assign_parms (subr);
  if (cfun->static_chain_decl)
    {
      tree parm = cfun->static_chain_decl;
      rtx local = gen_reg_rtx ((0 ? DImode : SImode));
      set_decl_incoming_rtl (parm, static_chain_incoming_rtx);
      set_decl_rtl (parm, local);
      maybe_set_unchanging (local, parm);
      mark_reg_pointer (local, ((((((parm)->common.type))->common.type))->type.align));
      emit_move_insn (local, static_chain_incoming_rtx);
    }
  if (cfun->nonlocal_goto_save_area)
    {
      tree t_save;
      rtx r_save;
      expand_var (((cfun->nonlocal_goto_save_area)->exp.operands[0]));
      t_save = build (ARRAY_REF, global_trees[TI_PTR_TYPE], cfun->nonlocal_goto_save_area,
        global_trees[TI_INTEGER_ZERO], (tree) ((void *)0), (tree) ((void *)0));
      r_save = expand_expr (t_save, (rtx) 0, VOIDmode, EXPAND_WRITE);
      emit_move_insn (r_save, (global_rtl[GR_VIRTUAL_STACK_ARGS]));
      update_nonlocal_goto_save_area ();
    }
  emit_note (NOTE_INSN_FUNCTION_BEG);
  if (((enum rtx_code) (get_last_insn ())->code) != NOTE)
    emit_note (NOTE_INSN_DELETED);
  (cfun->x_parm_birth_insn) = get_last_insn ();
  if ((cfun->profile))
    {
    }
  (cfun->x_tail_recursion_reentry) = emit_note (NOTE_INSN_DELETED);
  expand_pending_sizes (nreverse (get_pending_sizes ()));
  force_next_line_note ();
}
void
expand_dummy_function_end (void)
{
  while (in_sequence_p ())
    end_sequence ();
  free_after_parsing (cfun);
  free_after_compilation (cfun);
  cfun = 0;
}
void
diddle_return_value (void (*doit) (rtx, void *), void *arg)
{
  rtx outgoing = (cfun->return_rtx);
  if (! outgoing)
    return;
  if ((((enum rtx_code) (outgoing)->code) == REG))
    (*doit) (outgoing, arg);
  else if (((enum rtx_code) (outgoing)->code) == PARALLEL)
    {
      int i;
      for (i = 0; i < (((((outgoing)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx x = ((((((((outgoing)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1);
   if ((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) < 53)
     (*doit) (x, arg);
 }
    }
}
static void
do_clobber_return_reg (rtx reg, void *arg )
{
  emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (reg)));
}
void
clobber_return_register (void)
{
  diddle_return_value (do_clobber_return_reg, ((void *)0));
  if (((((current_function_decl)->decl.result))->decl.rtl != ((void *)0)))
    {
      tree decl_result = ((current_function_decl)->decl.result);
      rtx decl_rtl = ((decl_result)->decl.rtl ? (decl_result)->decl.rtl : (make_decl_rtl (decl_result, ((void *)0)), (decl_result)->decl.rtl));
      if ((((enum rtx_code) (decl_rtl)->code) == REG) && (((decl_rtl)->u.fld[0]).rtuint) >= 53)
 {
   do_clobber_return_reg (decl_rtl, ((void *)0));
 }
    }
}
static void
do_use_return_reg (rtx reg, void *arg )
{
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), (reg)));
}
void
use_return_register (void)
{
  diddle_return_value (do_use_return_reg, ((void *)0));
}
void
do_warn_unused_parameter (tree fn)
{
  tree decl;
  for (decl = ((fn)->decl.arguments);
       decl; decl = ((decl)->common.chain))
    if (!((decl)->common.used_flag) && ((enum tree_code) (decl)->common.code) == PARM_DECL
 && ((decl)->decl.name) && !((decl)->decl.artificial_flag))
      warning ("%Junused parameter '%D'", decl, decl);
}
static rtx initial_trampoline;
void
expand_function_end (void)
{
  rtx clobber_after;
  finish_expr_for_function ();
  if ((cfun->x_arg_pointer_save_area) && ! cfun->arg_pointer_save_area_init)
    get_arg_pointer_save_area (cfun);
  if (flag_stack_check && ! 0)
    {
      rtx insn, seq;
      for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
 if (((enum rtx_code) (insn)->code) == CALL_INSN)
   {
     start_sequence ();
     probe_stack_range ((75 * (0 ? 8 : 4)),
          gen_rtx_CONST_INT (VOIDmode, (long) ((4096 - (0 ? 8 : 4)))));
     seq = get_insns ();
     end_sequence ();
     emit_insn_before (seq, (cfun->x_tail_recursion_reentry));
     break;
   }
    }
  if (warn_unused_parameter
      && !lang_hooks.callgraph.expand_function)
    do_warn_unused_parameter (current_function_decl);
  while (in_sequence_p ())
    end_sequence ();
  clear_pending_stack_adjust ();
  do_pending_stack_adjust ();
  if (flag_non_call_exceptions)
    emit_insn (gen_rtx_fmt_s (ASM_INPUT, (VOIDmode), ("")));
  emit_note (NOTE_INSN_FUNCTION_END);
  if (flag_test_coverage)
    emit_note (NOTE_INSN_REPEATED_LINE_NUMBER);
  force_next_line_note ();
  emit_line_note (input_location);
  clobber_after = get_last_insn ();
  if ((cfun->x_return_label))
    emit_label ((cfun->x_return_label));
  if (flag_exceptions && 0)
    sjlj_emit_function_exit_after (get_last_insn ());
  if (! 1
      && (cfun->calls_alloca))
    {
      rtx tem = 0;
      emit_stack_save (SAVE_FUNCTION, &tem, (cfun->x_parm_birth_insn));
      emit_stack_restore (SAVE_FUNCTION, tem, (rtx) 0);
    }
  if (((((current_function_decl)->decl.result))->decl.rtl != ((void *)0)))
    {
      tree decl_result = ((current_function_decl)->decl.result);
      rtx decl_rtl = ((decl_result)->decl.rtl ? (decl_result)->decl.rtl : (make_decl_rtl (decl_result, ((void *)0)), (decl_result)->decl.rtl));
      if ((((enum rtx_code) (decl_rtl)->code) == REG)
   ? (((decl_rtl)->u.fld[0]).rtuint) >= 53
   : ((decl_result)->decl.regdecl_flag))
 {
   rtx real_decl_rtl = (cfun->return_rtx);
   if (! (((real_decl_rtl))->return_val))
     abort ();
   if (((enum machine_mode) (real_decl_rtl)->mode) == BLKmode)
     ((real_decl_rtl)->mode = (((enum machine_mode) (decl_rtl)->mode)));
   if (((enum machine_mode) (real_decl_rtl)->mode) != ((enum machine_mode) (decl_rtl)->mode))
     {
       int unsignedp = ((((decl_result)->common.type))->common.unsigned_flag);
       if (targetm.calls.promote_function_return (((current_function_decl)->common.type)))
  promote_mode (((decl_result)->common.type), ((enum machine_mode) (decl_rtl)->mode),
         &unsignedp, 1);
       convert_move (real_decl_rtl, decl_rtl, unsignedp);
     }
   else if (((enum rtx_code) (real_decl_rtl)->code) == PARALLEL)
     {
       if (((enum rtx_code) (decl_rtl)->code) == PARALLEL)
  emit_group_move (real_decl_rtl, decl_rtl);
       else
  emit_group_load (real_decl_rtl, decl_rtl,
     ((decl_result)->common.type),
     int_size_in_bytes (((decl_result)->common.type)));
     }
   else
     emit_move_insn (real_decl_rtl, decl_rtl);
 }
    }
  if ((cfun->returns_struct)
      || (cfun->returns_pcc_struct))
    {
      rtx value1_address
 = (((((((current_function_decl)->decl.result))->decl.rtl ? (((current_function_decl)->decl.result))->decl.rtl : (make_decl_rtl (((current_function_decl)->decl.result), ((void *)0)), (((current_function_decl)->decl.result))->decl.rtl)))->u.fld[0]).rtx1);
      tree type = ((((current_function_decl)->decl.result))->common.type);
      rtx outgoing
 = ix86_function_value (build_pointer_type (type));
      (((outgoing))->return_val) = 1;
      value_address = convert_memory_address (((enum machine_mode) (outgoing)->mode),
           value_address);
      emit_move_insn (outgoing, value_address);
      (cfun->return_rtx) = outgoing;
    }
  expand_eh_return ();
  {
    rtx seq, after;
    start_sequence ();
    clobber_return_register ();
    seq = get_insns ();
    end_sequence ();
    after = emit_insn_after (seq, clobber_after);
  }
  if ((cfun->x_naked_return_label))
    emit_label ((cfun->x_naked_return_label));
  use_return_register ();
  expand_fixups (get_insns ());
}
rtx
get_arg_pointer_save_area (struct function *f)
{
  rtx ret = f->x_arg_pointer_save_area;
  if (! ret)
    {
      ret = assign_stack_local_1 ((0 ? DImode : SImode), ((unsigned short) mode_size[(0 ? DImode : SImode)]), 0, f);
      f->x_arg_pointer_save_area = ret;
    }
  if (f == cfun && ! f->arg_pointer_save_area_init)
    {
      rtx seq;
      start_sequence ();
      emit_move_insn (validize_mem (ret), (global_rtl[GR_VIRTUAL_INCOMING_ARGS]));
      seq = get_insns ();
      end_sequence ();
      push_topmost_sequence ();
      emit_insn_after (seq, get_insns ());
      pop_topmost_sequence ();
    }
  return ret;
}
static void
record_insns (rtx insns, varray_type *vecp)
{
  int i, len;
  rtx tmp;
  tmp = insns;
  len = 0;
  while (tmp != (rtx) 0)
    {
      len++;
      tmp = (((tmp)->u.fld[2]).rtx1);
    }
  i = ((*vecp)->num_elements);
  ((*vecp) = varray_grow (*vecp, i + len));
  tmp = insns;
  while (tmp != (rtx) 0)
    {
      ((*vecp)->data.i[i]) = (((tmp)->u.fld[0]).rtint);
      i++;
      tmp = (((tmp)->u.fld[2]).rtx1);
    }
}
static void
set_insn_locators (rtx insn, int loc)
{
  while (insn != (rtx) 0)
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 (((insn)->u.fld[4]).rtint) = loc;
      insn = (((insn)->u.fld[2]).rtx1);
    }
}
static int
contains (rtx insn, varray_type vec)
{
  int i, j;
  if (((enum rtx_code) (insn)->code) == INSN
      && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
    {
      int count = 0;
      for (i = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 for (j = ((vec)->num_elements) - 1; j >= 0; --j)
   if ((((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtint) == ((vec)->data.i[j]))
     count++;
      return count;
    }
  else
    {
      for (j = ((vec)->num_elements) - 1; j >= 0; --j)
 if ((((insn)->u.fld[0]).rtint) == ((vec)->data.i[j]))
   return 1;
    }
  return 0;
}
int
prologue_epilogue_contains (rtx insn)
{
  if (contains (insn, prologue))
    return 1;
  if (contains (insn, epilogue))
    return 1;
  return 0;
}
int
sibcall_epilogue_contains (rtx insn)
{
  if (sibcall_epilogue)
    return contains (insn, sibcall_epilogue);
  return 0;
}
static void
emit_return_into_block (basic_block bb, rtx line_note)
{
  emit_jump_insn_after (gen_return (), (bb)->end_);
  if (line_note)
    emit_note_copy_after (line_note, ((((bb)->end_)->u.fld[1]).rtx1));
}
struct epi_info
{
  rtx sp_equiv_reg;
  long sp_offset;
  rtx new_sp_equiv_reg;
  long new_sp_offset;
  rtx equiv_reg_src;
  rtx const_equiv[53];
};
static void handle_epilogue_set (rtx, struct epi_info *);
static void update_epilogue_consts (rtx, rtx, void *);
static void emit_equiv_load (struct epi_info *);
static rtx
keep_stack_depressed (rtx insns)
{
  int j;
  struct epi_info info;
  rtx insn, next;
  if ((((insns)->u.fld[2]).rtx1) == (rtx) 0)
    return insns;
  start_sequence ();
  info.sp_equiv_reg = (global_rtl[GR_STACK_POINTER]);
  info.sp_offset = 0;
  info.equiv_reg_src = 0;
  for (j = 0; j < 53; j++)
    info.const_equiv[j] = 0;
  insn = insns;
  next = (rtx) 0;
  while (insn != (rtx) 0)
    {
      next = (((insn)->u.fld[2]).rtx1);
      if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   add_insn (insn);
   insn = next;
   continue;
 }
      if (info.equiv_reg_src != 0
   && reg_referenced_p (info.sp_equiv_reg, (((insn)->u.fld[5]).rtx1)))
 {
   emit_equiv_load (&info);
   info.sp_equiv_reg = 0;
 }
      info.new_sp_equiv_reg = info.sp_equiv_reg;
      info.new_sp_offset = info.sp_offset;
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == RETURN
   || (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL
       && ((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->code) == RETURN))
 {
   rtx retaddr = gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, 7));
   rtx base = 0;
   long offset = 0;
   rtx jump_insn, jump_set;
   if ((((enum rtx_code) (retaddr)->code) == REG))
     {
       emit_equiv_load (&info);
       add_insn (insn);
       insn = next;
       continue;
     }
   else if ((((enum rtx_code) (retaddr)->code) == MEM)
     && (((enum rtx_code) ((((retaddr)->u.fld[0]).rtx1))->code) == REG))
     base = gen_rtx_REG ((0 ? DImode : SImode), ((((((retaddr)->u.fld[0]).rtx1))->u.fld[0]).rtuint)), offset = 0;
   else if ((((enum rtx_code) (retaddr)->code) == MEM)
     && ((enum rtx_code) ((((retaddr)->u.fld[0]).rtx1))->code) == PLUS
     && (((enum rtx_code) (((((((retaddr)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG)
     && ((enum rtx_code) (((((((retaddr)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
     {
       base = gen_rtx_REG ((0 ? DImode : SImode), (((((((((retaddr)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint));
       offset = ((((((((retaddr)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
     }
   else
     abort ();
   retaddr = plus_constant_wide ((base), (long) (offset));
   if (base == (global_rtl[GR_STACK_POINTER]))
     retaddr = simplify_replace_rtx (retaddr, (global_rtl[GR_STACK_POINTER]),
         plus_constant_wide ((info.sp_equiv_reg), (long) (info.sp_offset))
                         );
   retaddr = gen_rtx_MEM ((0 ? DImode : SImode), retaddr);
   if (info.equiv_reg_src
       && reg_overlap_mentioned_p (info.equiv_reg_src, retaddr))
     {
       unsigned int regno;
       rtx reg;
       for (regno = 0; regno < 53; regno++)
  if (ix86_hard_regno_mode_ok ((regno), ((0 ? DImode : SImode)))
      && !fixed_regs[regno]
      && (!!((regs_invalidated_by_call)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
      && !bitmap_bit_p (EXIT_BLOCK_PTR->global_live_at_start, regno)
      && !refers_to_regno_p (regno,
        regno + hard_regno_nregs[regno]
           [(0 ? DImode : SImode)],
        info.equiv_reg_src, ((void *)0))
      && info.const_equiv[regno] == 0)
    break;
       if (regno == 53)
  abort ();
       reg = gen_rtx_REG ((0 ? DImode : SImode), regno);
       emit_move_insn (reg, retaddr);
       retaddr = reg;
     }
   emit_equiv_load (&info);
   jump_insn = emit_jump_insn (gen_indirect_jump (retaddr));
   jump_set = (((((enum rtx_code) (jump_insn)->code) == INSN) || (((enum rtx_code) (jump_insn)->code) == JUMP_INSN) || (((enum rtx_code) (jump_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((jump_insn)->u.fld[5]).rtx1))->code) == SET ? (((jump_insn)->u.fld[5]).rtx1) : single_set_2 (jump_insn, (((jump_insn)->u.fld[5]).rtx1))) : (rtx) 0);
   if (jump_set == 0)
     abort ();
   else
     (((jump_set))->jump) = 1;
 }
      else if (!reg_mentioned_p ((global_rtl[GR_STACK_POINTER]), (((insn)->u.fld[5]).rtx1))
        && (info.sp_equiv_reg == (global_rtl[GR_STACK_POINTER])
     || !reg_set_p (info.sp_equiv_reg, insn)))
 add_insn (insn);
      else if (! reg_set_p ((global_rtl[GR_STACK_POINTER]), insn)
        && (info.sp_equiv_reg == (global_rtl[GR_STACK_POINTER])
     || !reg_set_p (info.sp_equiv_reg, insn)))
 {
   if (! validate_replace_rtx ((global_rtl[GR_STACK_POINTER]),
          plus_constant_wide ((info.sp_equiv_reg), (long) (info.sp_offset))
                          ,
          insn))
     abort ();
   add_insn (insn);
 }
      else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET)
 handle_epilogue_set ((((insn)->u.fld[5]).rtx1), &info);
      else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL)
 {
   for (j = 0; j < ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem); j++)
     if (((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[j]))->code) == SET)
       handle_epilogue_set (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[j]), &info);
 }
      else
 add_insn (insn);
      info.sp_equiv_reg = info.new_sp_equiv_reg;
      info.sp_offset = info.new_sp_offset;
      note_stores ((((insn)->u.fld[5]).rtx1), update_epilogue_consts, &info);
      insn = next;
    }
  insns = get_insns ();
  end_sequence ();
  return insns;
}
static void
handle_epilogue_set (rtx set, struct epi_info *p)
{
  if (reg_set_p ((global_rtl[GR_STACK_POINTER]), set))
    {
      if ((((set)->u.fld[0]).rtx1) != (global_rtl[GR_STACK_POINTER]))
 abort ();
      if (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == PLUS)
 {
   p->new_sp_equiv_reg = ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
   if (((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
     p->new_sp_offset = ((((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
   else if ((((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == REG)
     && (((((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint) < 53
     && p->const_equiv[(((((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint)] != 0)
     p->new_sp_offset
       = ((p->const_equiv[(((((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint)])->u.hwint[0]);
   else
     abort ();
 }
      else
 p->new_sp_equiv_reg = (((set)->u.fld[1]).rtx1), p->new_sp_offset = 0;
      if (p->new_sp_equiv_reg == (global_rtl[GR_STACK_POINTER]))
 {
   p->new_sp_equiv_reg = p->sp_equiv_reg;
   p->new_sp_offset += p->sp_offset;
 }
      if (p->new_sp_equiv_reg == 0 || !(((enum rtx_code) (p->new_sp_equiv_reg)->code) == REG))
 abort ();
      return;
    }
  else if (p->new_sp_equiv_reg != 0 && reg_set_p (p->new_sp_equiv_reg, set))
    {
      if (p->equiv_reg_src != 0
   || !(((enum rtx_code) (p->new_sp_equiv_reg)->code) == REG)
   || !(((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
   || ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode)]) * 8)) > (8 * (0 ? 8 : 4))
   || (((p->new_sp_equiv_reg)->u.fld[0]).rtuint) != ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint))
 abort ();
      else
 p->equiv_reg_src
   = simplify_replace_rtx ((((set)->u.fld[1]).rtx1), (global_rtl[GR_STACK_POINTER]),
      plus_constant_wide ((p->sp_equiv_reg), (long) (p->sp_offset))
                    );
    }
  else
    {
      (((set)->u.fld[1]).rtx1) = simplify_replace_rtx ((((set)->u.fld[1]).rtx1), (global_rtl[GR_STACK_POINTER]),
         plus_constant_wide ((p->sp_equiv_reg), (long) (p->sp_offset))
                       );
      (((set)->u.fld[0]).rtx1) = simplify_replace_rtx ((((set)->u.fld[0]).rtx1), (global_rtl[GR_STACK_POINTER]),
          plus_constant_wide ((p->sp_equiv_reg), (long) (p->sp_offset))
                        );
      emit_insn (set);
    }
}
static void
update_epilogue_consts (rtx dest, rtx x, void *data)
{
  struct epi_info *p = (struct epi_info *) data;
  rtx new;
  if (!(((enum rtx_code) (dest)->code) == REG) || (((dest)->u.fld[0]).rtuint) >= 53)
    return;
  else if (((enum rtx_code) (x)->code) == CLOBBER || ! rtx_equal_p (dest, (((x)->u.fld[0]).rtx1)))
    p->const_equiv[(((dest)->u.fld[0]).rtuint)] = 0;
  else if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
    p->const_equiv[(((dest)->u.fld[0]).rtuint)] = (((x)->u.fld[1]).rtx1);
  else if ((((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) & (~1)) == (RTX_COMM_ARITH & (~1)))
    && (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code) == REG)
    && (((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
    && p->const_equiv[(((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint)] != 0
    && ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
    && 0 != (new = simplify_binary_operation
      (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code), ((enum machine_mode) (dest)->mode),
       p->const_equiv[(((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint)],
       ((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1)))
    && ((enum rtx_code) (new)->code) == CONST_INT)
    p->const_equiv[(((dest)->u.fld[0]).rtuint)] = new;
  else
    p->const_equiv[(((dest)->u.fld[0]).rtuint)] = 0;
}
static void
emit_equiv_load (struct epi_info *p)
{
  if (p->equiv_reg_src != 0)
    {
      rtx dest = p->sp_equiv_reg;
      if (((enum machine_mode) (p->equiv_reg_src)->mode) != ((enum machine_mode) (dest)->mode))
 dest = gen_rtx_REG (((enum machine_mode) (p->equiv_reg_src)->mode),
       (((p->sp_equiv_reg)->u.fld[0]).rtuint));
      emit_move_insn (dest, p->equiv_reg_src);
      p->equiv_reg_src = 0;
    }
}
void
thread_prologue_and_epilogue_insns (rtx f )
{
  int inserted = 0;
  edge e;
  rtx seq;
  rtx prologue_end = (rtx) 0;
  rtx epilogue_end = (rtx) 0;
  if (1)
    {
      start_sequence ();
      seq = gen_prologue ();
      emit_insn (seq);
      record_insns (seq, &prologue);
      prologue_end = emit_note (NOTE_INSN_PROLOGUE_END);
      seq = get_insns ();
      end_sequence ();
      set_insn_locators (seq, prologue_locator);
      if (!ENTRY_BLOCK_PTR->succ || ENTRY_BLOCK_PTR->succ->succ_next)
 abort ();
      insert_insn_on_edge (seq, ENTRY_BLOCK_PTR->succ);
      inserted = 1;
    }
  for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
    if ((e->flags & 16) == 0)
      break;
  if (e == ((void *)0))
    goto epilogue_done;
  if (optimize && (ix86_can_use_return_insn_p ()))
    {
      basic_block last;
      edge e_next;
      rtx label;
      for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
 if (e->flags & 1)
   break;
      if (e == ((void *)0))
 goto epilogue_done;
      last = e->src;
      label = (last)->end_;
      while (label && ((enum rtx_code) (label)->code) != CODE_LABEL)
 {
   if (active_insn_p (label))
     break;
   label = (((label)->u.fld[1]).rtx1);
 }
      if ((last)->head_ == label && ((enum rtx_code) (label)->code) == CODE_LABEL)
 {
   rtx epilogue_line_note = (rtx) 0;
   for (seq = get_last_insn ();
        seq && ! active_insn_p (seq);
        seq = (((seq)->u.fld[1]).rtx1))
     if (((enum rtx_code) (seq)->code) == NOTE && (((seq)->u.fld[5]).rtint) > 0)
       {
  epilogue_line_note = seq;
  break;
       }
   for (e = last->pred; e; e = e_next)
     {
       basic_block bb = e->src;
       rtx jump;
       e_next = e->pred_next;
       if (bb == ENTRY_BLOCK_PTR)
  continue;
       jump = (bb)->end_;
       if ((((enum rtx_code) (jump)->code) != JUMP_INSN) || (((jump)->u.fld[9]).rtx1) != label)
  continue;
       if (simplejump_p (jump))
  {
    emit_return_into_block (bb, epilogue_line_note);
    delete_insn (jump);
  }
       else if (condjump_p (jump))
  {
    if (! redirect_jump (jump, 0, 0))
      continue;
    if (bb->succ->succ_next == ((void *)0))
      continue;
  }
       else
  continue;
       redirect_edge_succ (e, EXIT_BLOCK_PTR);
     }
   emit_barrier_after ((last)->end_);
   emit_return_into_block (last, epilogue_line_note);
   epilogue_end = (last)->end_;
   last->succ->flags &= ~1;
   goto epilogue_done;
 }
    }
  for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
    if (e->flags & 1)
      break;
  if (e == ((void *)0))
    goto epilogue_done;
  if (1)
    {
      start_sequence ();
      epilogue_end = emit_note (NOTE_INSN_EPILOGUE_BEG);
      seq = gen_epilogue ();
      if (((enum tree_code) (((current_function_decl)->common.type))->common.code) == FUNCTION_TYPE
   && ((((current_function_decl)->common.type))->type.no_force_blk_flag))
 seq = keep_stack_depressed (seq);
      emit_jump_insn (seq);
      record_insns (seq, &epilogue);
      set_insn_locators (seq, epilogue_locator);
      seq = get_insns ();
      end_sequence ();
      insert_insn_on_edge (seq, e);
      inserted = 1;
    }
  else
    {
      basic_block cur_bb;
      if (! next_active_insn ((e->src)->end_))
 goto epilogue_done;
      cfg_layout_initialize ();
      for (cur_bb = ENTRY_BLOCK_PTR->next_bb; cur_bb != EXIT_BLOCK_PTR; cur_bb = cur_bb->next_bb)
 if (cur_bb->index >= 0 && cur_bb->next_bb->index >= 0)
   cur_bb->rbi->next = cur_bb->next_bb;
      cfg_layout_finalize ();
    }
epilogue_done:
  if (inserted)
    commit_edge_insertions ();
  for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
    {
      basic_block bb = e->src;
      rtx insn = (bb)->end_;
      rtx i;
      rtx newinsn;
      if (((enum rtx_code) (insn)->code) != CALL_INSN
   || ! (((insn))->jump))
 continue;
      start_sequence ();
      emit_insn (gen_sibcall_epilogue ());
      seq = get_insns ();
      end_sequence ();
      record_insns (seq, &sibcall_epilogue);
      set_insn_locators (seq, epilogue_locator);
      i = (((insn)->u.fld[1]).rtx1);
      newinsn = emit_insn_before (seq, insn);
    }
  if (prologue_end)
    {
      rtx insn, prev;
      for (insn = prologue_end; insn; insn = prev)
 {
   prev = (((insn)->u.fld[1]).rtx1);
   if (((enum rtx_code) (insn)->code) == NOTE && (((insn)->u.fld[5]).rtint) > 0)
     {
       if (prev == ((void *)0))
  break;
       reorder_insns (insn, insn, prologue_end);
     }
 }
      for (insn = (ENTRY_BLOCK_PTR->next_bb)->end_;
    insn != prologue_end && insn;
    insn = (((insn)->u.fld[1]).rtx1))
 if (((enum rtx_code) (insn)->code) == NOTE && (((insn)->u.fld[5]).rtint) > 0)
   break;
      if (! insn)
 {
   for (insn = next_active_insn (prologue_end);
        insn;
        insn = (((insn)->u.fld[1]).rtx1))
     if (((enum rtx_code) (insn)->code) == NOTE && (((insn)->u.fld[5]).rtint) > 0)
       {
  emit_note_copy_after (insn, prologue_end);
  break;
       }
 }
    }
  if (epilogue_end)
    {
      rtx insn, next;
      for (insn = epilogue_end; insn; insn = next)
 {
   next = (((insn)->u.fld[2]).rtx1);
   if (((enum rtx_code) (insn)->code) == NOTE
       && ((((insn)->u.fld[5]).rtint) > 0
    || (((insn)->u.fld[5]).rtint) == NOTE_INSN_FUNCTION_BEG
    || (((insn)->u.fld[5]).rtint) == NOTE_INSN_FUNCTION_END))
     reorder_insns (insn, insn, (((epilogue_end)->u.fld[1]).rtx1));
 }
    }
}
void
reposition_prologue_and_epilogue_notes (rtx f )
{
  rtx insn, last, note;
  int len;
  if ((len = ((prologue)->num_elements)) > 0)
    {
      last = 0, note = 0;
      for (insn = f; insn; insn = (((insn)->u.fld[2]).rtx1))
 {
   if (((enum rtx_code) (insn)->code) == NOTE)
     {
       if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_PROLOGUE_END)
  note = insn;
     }
   else if (contains (insn, prologue))
     {
       last = insn;
       if (--len == 0)
  break;
     }
 }
      if (last)
 {
   if (note == 0)
     {
       for (note = last; (note = (((note)->u.fld[2]).rtx1));)
  if (((enum rtx_code) (note)->code) == NOTE
      && (((note)->u.fld[5]).rtint) == NOTE_INSN_PROLOGUE_END)
    break;
     }
   if (((enum rtx_code) (last)->code) == CODE_LABEL)
     last = (((last)->u.fld[2]).rtx1);
   reorder_insns (note, note, last);
 }
    }
  if ((len = ((epilogue)->num_elements)) > 0)
    {
      last = 0, note = 0;
      for (insn = get_last_insn (); insn; insn = (((insn)->u.fld[1]).rtx1))
 {
   if (((enum rtx_code) (insn)->code) == NOTE)
     {
       if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_EPILOGUE_BEG)
  note = insn;
     }
   else if (contains (insn, epilogue))
     {
       last = insn;
       if (--len == 0)
  break;
     }
 }
      if (last)
 {
   if (note == 0)
     {
       for (note = insn; (note = (((note)->u.fld[1]).rtx1));)
  if (((enum rtx_code) (note)->code) == NOTE
      && (((note)->u.fld[5]).rtint) == NOTE_INSN_EPILOGUE_BEG)
    break;
     }
   if ((((last)->u.fld[1]).rtx1) != note)
     reorder_insns (note, note, (((last)->u.fld[1]).rtx1));
 }
    }
}
void
init_function_once (void)
{
  prologue = varray_init (0, VARRAY_DATA_I, "prologue");
  epilogue = varray_init (0, VARRAY_DATA_I, "epilogue");
  sibcall_epilogue = varray_init (0, VARRAY_DATA_I, "sibcall_epilogue");
}
void
reset_block_changes (void)
{
  cfun->ib_boundaries_block = varray_init (100, VARRAY_DATA_TREE, "ib_boundaries_block");
  do { if ((cfun->ib_boundaries_block)->elements_used >= (cfun->ib_boundaries_block)->num_elements) (((cfun->ib_boundaries_block)) = varray_grow ((cfun->ib_boundaries_block), 2 * (cfun->ib_boundaries_block)->num_elements)); (cfun->ib_boundaries_block)->data.tree1[(cfun->ib_boundaries_block)->elements_used++] = ((tree) ((void *)0)); } while (0);
}
void
record_block_change (tree block)
{
  int i, n;
  tree last_block;
  if (!block)
    return;
  last_block = ((cfun->ib_boundaries_block)->data.tree1[(cfun->ib_boundaries_block)->elements_used - 1]);
  do { ((cfun->ib_boundaries_block)->elements_used--); } while (0);
  n = get_max_uid ();
  for (i = ((cfun->ib_boundaries_block)->elements_used); i < n; i++)
    do { if ((cfun->ib_boundaries_block)->elements_used >= (cfun->ib_boundaries_block)->num_elements) (((cfun->ib_boundaries_block)) = varray_grow ((cfun->ib_boundaries_block), 2 * (cfun->ib_boundaries_block)->num_elements)); (cfun->ib_boundaries_block)->data.tree1[(cfun->ib_boundaries_block)->elements_used++] = (last_block); } while (0);
  do { if ((cfun->ib_boundaries_block)->elements_used >= (cfun->ib_boundaries_block)->num_elements) (((cfun->ib_boundaries_block)) = varray_grow ((cfun->ib_boundaries_block), 2 * (cfun->ib_boundaries_block)->num_elements)); (cfun->ib_boundaries_block)->data.tree1[(cfun->ib_boundaries_block)->elements_used++] = (block); } while (0);
}
void finalize_block_changes (void)
{
  record_block_change (((current_function_decl)->decl.initial));
}
void
check_block_change (rtx insn, tree *block)
{
  unsigned uid = (((insn)->u.fld[0]).rtint);
  if (uid >= ((cfun->ib_boundaries_block)->elements_used))
    return;
  *block = ((cfun->ib_boundaries_block)->data.tree1[uid]);
}
void
free_block_changes (void)
{
  cfun->ib_boundaries_block = ((void *)0);
}
const char *
current_function_name (void)
{
  return lang_hooks.decl_printable_name (cfun->decl, 2);
}
void
gt_ggc_mx_temp_slot (void *x_p)
{
  struct temp_slot * const x = (struct temp_slot *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_temp_slot ((*x).next); } while (0);
      do { if ((*x).prev != ((void *)0)) gt_ggc_mx_temp_slot ((*x).prev); } while (0);
      do { if ((*x).slot != ((void *)0)) gt_ggc_mx_rtx_def ((*x).slot); } while (0);
      do { if ((*x).address != ((void *)0)) gt_ggc_mx_rtx_def ((*x).address); } while (0);
      do { if ((*x).type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).type); } while (0);
    }
}
void
gt_ggc_m_P9temp_slot15varray_head_tag (void *x_p)
{
  struct varray_head_tag * const x = (struct varray_head_tag *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      switch ((*x).type)
        {
        case VARRAY_DATA_C:
          break;
        case VARRAY_DATA_UC:
          break;
        case VARRAY_DATA_S:
          break;
        case VARRAY_DATA_US:
          break;
        case VARRAY_DATA_I:
          break;
        case VARRAY_DATA_U:
          break;
        case VARRAY_DATA_L:
          break;
        case VARRAY_DATA_UL:
          break;
        case VARRAY_DATA_HINT:
          break;
        case VARRAY_DATA_UHINT:
          break;
        case VARRAY_DATA_GENERIC:
          {
            size_t i10;
            for (i10 = 0; i10 < (size_t)((*x).num_elements); i10++) {
              do { if ((*x).data.generic[i10] != ((void *)0)) gt_ggc_mx_temp_slot ((*x).data.generic[i10]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CPTR:
          {
            size_t i11;
            for (i11 = 0; i11 < (size_t)((*x).num_elements); i11++) {
            }
          }
          break;
        case VARRAY_DATA_RTX:
          {
            size_t i12;
            for (i12 = 0; i12 < (size_t)((*x).num_elements); i12++) {
              do { if ((*x).data.rtx1[i12] != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.rtx1[i12]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_RTVEC:
          {
            size_t i13;
            for (i13 = 0; i13 < (size_t)((*x).num_elements); i13++) {
              do { if ((*x).data.rtvec1[i13] != ((void *)0)) gt_ggc_mx_rtvec_def ((*x).data.rtvec1[i13]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TREE:
          {
            size_t i14;
            for (i14 = 0; i14 < (size_t)((*x).num_elements); i14++) {
              do { if ((*x).data.tree1[i14] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).data.tree1[i14]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_BITMAP:
          {
            size_t i15;
            for (i15 = 0; i15 < (size_t)((*x).num_elements); i15++) {
              do { if ((*x).data.bitmap1[i15] != ((void *)0)) gt_ggc_mx_bitmap_head_def ((*x).data.bitmap1[i15]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CONST_EQUIV:
          {
            size_t i16;
            for (i16 = 0; i16 < (size_t)((*x).num_elements); i16++) {
              do { if ((*x).data.const_equiv[i16].rtx1 != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.const_equiv[i16].rtx1); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TE:
          {
            size_t i17;
            for (i17 = 0; i17 < (size_t)((*x).num_elements); i17++) {
              do { if ((*x).data.te[i17] != ((void *)0)) gt_ggc_mx_elt_list ((*x).data.te[i17]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_EDGE:
          {
            size_t i18;
            for (i18 = 0; i18 < (size_t)((*x).num_elements); i18++) {
              do { if ((*x).data.e[i18] != ((void *)0)) gt_ggc_mx_edge_def ((*x).data.e[i18]); } while (0);
            }
          }
          break;
        default:
          break;
        }
    }
}
void
gt_pch_nx_temp_slot (void *x_p)
{
  struct temp_slot * const x = (struct temp_slot *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_9temp_slot))
    {
      do { if ((*x).next != ((void *)0)) gt_pch_nx_temp_slot ((*x).next); } while (0);
      do { if ((*x).prev != ((void *)0)) gt_pch_nx_temp_slot ((*x).prev); } while (0);
      do { if ((*x).slot != ((void *)0)) gt_pch_nx_rtx_def ((*x).slot); } while (0);
      do { if ((*x).address != ((void *)0)) gt_pch_nx_rtx_def ((*x).address); } while (0);
      do { if ((*x).type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).type); } while (0);
    }
}
void
gt_pch_n_P9temp_slot15varray_head_tag (void *x_p)
{
  struct varray_head_tag * const x = (struct varray_head_tag *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P9temp_slot15varray_head_tag))
    {
      gt_pch_n_S ((*x).name);
      switch ((*x).type)
        {
        case VARRAY_DATA_C:
          break;
        case VARRAY_DATA_UC:
          break;
        case VARRAY_DATA_S:
          break;
        case VARRAY_DATA_US:
          break;
        case VARRAY_DATA_I:
          break;
        case VARRAY_DATA_U:
          break;
        case VARRAY_DATA_L:
          break;
        case VARRAY_DATA_UL:
          break;
        case VARRAY_DATA_HINT:
          break;
        case VARRAY_DATA_UHINT:
          break;
        case VARRAY_DATA_GENERIC:
          {
            size_t i10;
            for (i10 = 0; i10 < (size_t)((*x).num_elements); i10++) {
              do { if ((*x).data.generic[i10] != ((void *)0)) gt_pch_nx_temp_slot ((*x).data.generic[i10]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CPTR:
          {
            size_t i11;
            for (i11 = 0; i11 < (size_t)((*x).num_elements); i11++) {
              gt_pch_n_S ((*x).data.cptr[i11]);
            }
          }
          break;
        case VARRAY_DATA_RTX:
          {
            size_t i12;
            for (i12 = 0; i12 < (size_t)((*x).num_elements); i12++) {
              do { if ((*x).data.rtx1[i12] != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.rtx1[i12]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_RTVEC:
          {
            size_t i13;
            for (i13 = 0; i13 < (size_t)((*x).num_elements); i13++) {
              do { if ((*x).data.rtvec1[i13] != ((void *)0)) gt_pch_nx_rtvec_def ((*x).data.rtvec1[i13]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TREE:
          {
            size_t i14;
            for (i14 = 0; i14 < (size_t)((*x).num_elements); i14++) {
              do { if ((*x).data.tree1[i14] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).data.tree1[i14]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_BITMAP:
          {
            size_t i15;
            for (i15 = 0; i15 < (size_t)((*x).num_elements); i15++) {
              do { if ((*x).data.bitmap1[i15] != ((void *)0)) gt_pch_nx_bitmap_head_def ((*x).data.bitmap1[i15]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_CONST_EQUIV:
          {
            size_t i16;
            for (i16 = 0; i16 < (size_t)((*x).num_elements); i16++) {
              do { if ((*x).data.const_equiv[i16].rtx1 != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.const_equiv[i16].rtx1); } while (0);
            }
          }
          break;
        case VARRAY_DATA_TE:
          {
            size_t i17;
            for (i17 = 0; i17 < (size_t)((*x).num_elements); i17++) {
              do { if ((*x).data.te[i17] != ((void *)0)) gt_pch_nx_elt_list ((*x).data.te[i17]); } while (0);
            }
          }
          break;
        case VARRAY_DATA_EDGE:
          {
            size_t i18;
            for (i18 = 0; i18 < (size_t)((*x).num_elements); i18++) {
              do { if ((*x).data.e[i18] != ((void *)0)) gt_pch_nx_edge_def ((*x).data.e[i18]); } while (0);
            }
          }
          break;
        default:
          break;
        }
    }
}
void
gt_pch_p_9temp_slot (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct temp_slot * const x = (struct temp_slot *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).prev), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).slot), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).address), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).type), cookie);
}
void
gt_pch_p_P9temp_slot15varray_head_tag (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct varray_head_tag * const x = (struct varray_head_tag *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).name), cookie);
  switch ((*x).type)
    {
    case VARRAY_DATA_C:
      break;
    case VARRAY_DATA_UC:
      break;
    case VARRAY_DATA_S:
      break;
    case VARRAY_DATA_US:
      break;
    case VARRAY_DATA_I:
      break;
    case VARRAY_DATA_U:
      break;
    case VARRAY_DATA_L:
      break;
    case VARRAY_DATA_UL:
      break;
    case VARRAY_DATA_HINT:
      break;
    case VARRAY_DATA_UHINT:
      break;
    case VARRAY_DATA_GENERIC:
      {
        size_t i10;
        for (i10 = 0; i10 < (size_t)((*x).num_elements); i10++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.generic[i10]), cookie);
        }
      }
      break;
    case VARRAY_DATA_CPTR:
      {
        size_t i11;
        for (i11 = 0; i11 < (size_t)((*x).num_elements); i11++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.cptr[i11]), cookie);
        }
      }
      break;
    case VARRAY_DATA_RTX:
      {
        size_t i12;
        for (i12 = 0; i12 < (size_t)((*x).num_elements); i12++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.rtx1[i12]), cookie);
        }
      }
      break;
    case VARRAY_DATA_RTVEC:
      {
        size_t i13;
        for (i13 = 0; i13 < (size_t)((*x).num_elements); i13++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.rtvec1[i13]), cookie);
        }
      }
      break;
    case VARRAY_DATA_TREE:
      {
        size_t i14;
        for (i14 = 0; i14 < (size_t)((*x).num_elements); i14++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.tree1[i14]), cookie);
        }
      }
      break;
    case VARRAY_DATA_BITMAP:
      {
        size_t i15;
        for (i15 = 0; i15 < (size_t)((*x).num_elements); i15++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.bitmap1[i15]), cookie);
        }
      }
      break;
    case VARRAY_DATA_CONST_EQUIV:
      {
        size_t i16;
        for (i16 = 0; i16 < (size_t)((*x).num_elements); i16++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.const_equiv[i16].rtx1), cookie);
        }
      }
      break;
    case VARRAY_DATA_TE:
      {
        size_t i17;
        for (i17 = 0; i17 < (size_t)((*x).num_elements); i17++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.te[i17]), cookie);
        }
      }
      break;
    case VARRAY_DATA_EDGE:
      {
        size_t i18;
        for (i18 = 0; i18 < (size_t)((*x).num_elements); i18++) {
          if ((void *)(x) == this_obj)
            op (&((*x).data.e[i18]), cookie);
        }
      }
      break;
    default:
      break;
    }
}
const struct ggc_root_tab gt_ggc_r_gt_function_h[] = {
  {
    &initial_trampoline,
    1,
    sizeof (initial_trampoline),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &sibcall_epilogue,
    1,
    sizeof (sibcall_epilogue),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &epilogue,
    1,
    sizeof (epilogue),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &prologue,
    1,
    sizeof (prologue),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_function_h[] = {
  { &next_block_index, 1, sizeof (next_block_index), ((void *)0), ((void *)0) },
  { &funcdef_no, 1, sizeof (funcdef_no), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static FILE *gcse_file;
static int run_jump_opt_after_gcse;
static FILE *debug_stderr;
static struct obstack gcse_obstack;
struct reg_use_gcse {rtx reg_rtx; };
struct expr
{
  rtx expr;
  int bitmap_index;
  struct expr *next_same_hash;
  struct occr *antic_occr;
  struct occr *avail_occr;
  rtx reaching_reg;
};
struct occr
{
  struct occr *next;
  rtx insn;
  char deleted_p;
  char copied_p;
};
struct hash_table
{
  struct expr **table;
  unsigned int size;
  unsigned int n_elems;
  int set_p;
};
static struct hash_table expr_hash_table;
static struct hash_table set_hash_table;
static int *uid_cuid;
static int max_uid;
static int max_cuid;
static rtx *cuid_insn;
static unsigned int max_gcse_regno;
typedef struct reg_set
{
  struct reg_set *next;
  rtx insn;
} reg_set;
static reg_set **reg_set_table;
static int reg_set_table_size;
struct ls_expr
{
  struct expr * expr;
  rtx pattern;
  rtx pattern_regs;
  rtx loads;
  rtx stores;
  struct ls_expr * next;
  int invalid;
  int index;
  unsigned int hash_index;
  rtx reaching_reg;
};
static rtx *implicit_sets;
static struct ls_expr * pre_ldst_mems = ((void *)0);
static regset reg_set_bitmap;
static sbitmap *reg_set_in_block;
static rtx * modify_mem_list;
bitmap modify_mem_list_set;
static rtx * canon_modify_mem_list;
bitmap canon_modify_mem_list_set;
static int bytes_used;
static int gcse_subst_count;
static int gcse_create_count;
static int const_prop_count;
static int copy_prop_count;
static sbitmap *ae_kill, *ae_gen;
struct null_pointer_info
{
  basic_block current_block;
  unsigned int min_reg;
  unsigned int max_reg;
  sbitmap *nonnull_local;
  sbitmap *nonnull_killed;
};
static void compute_can_copy (void);
static void *gmalloc (size_t) ;
static void *gcalloc (size_t, size_t) ;
static void *grealloc (void *, size_t);
static void *gcse_alloc (unsigned long);
static void alloc_gcse_mem (rtx);
static void free_gcse_mem (void);
static void alloc_reg_set_mem (int);
static void free_reg_set_mem (void);
static void record_one_set (int, rtx);
static void replace_one_set (int, rtx, rtx);
static void record_set_info (rtx, rtx, void *);
static void compute_sets (rtx);
static void hash_scan_insn (rtx, struct hash_table *, int);
static void hash_scan_set (rtx, rtx, struct hash_table *);
static void hash_scan_clobber (rtx, rtx, struct hash_table *);
static void hash_scan_call (rtx, rtx, struct hash_table *);
static int want_to_gcse_p (rtx);
static unsigned char can_assign_to_reg_p (rtx);
static unsigned char gcse_constant_p (rtx);
static int oprs_unchanged_p (rtx, rtx, int);
static int oprs_anticipatable_p (rtx, rtx);
static int oprs_available_p (rtx, rtx);
static void insert_expr_in_table (rtx, enum machine_mode, rtx, int, int,
      struct hash_table *);
static void insert_set_in_table (rtx, rtx, struct hash_table *);
static unsigned int hash_expr (rtx, enum machine_mode, int *, int);
static unsigned int hash_expr_1 (rtx, enum machine_mode, int *);
static unsigned int hash_string_1 (const char *);
static unsigned int hash_set (int, int);
static int expr_equiv_p (rtx, rtx);
static void record_last_reg_set_info (rtx, int);
static void record_last_mem_set_info (rtx);
static void record_last_set_info (rtx, rtx, void *);
static void compute_hash_table (struct hash_table *);
static void alloc_hash_table (int, struct hash_table *, int);
static void free_hash_table (struct hash_table *);
static void compute_hash_table_work (struct hash_table *);
static void dump_hash_table (FILE *, const char *, struct hash_table *);
static struct expr *lookup_expr (rtx, struct hash_table *);
static struct expr *lookup_set (unsigned int, struct hash_table *);
static struct expr *next_set (unsigned int, struct expr *);
static void reset_opr_set_tables (void);
static int oprs_not_set_p (rtx, rtx);
static void mark_call (rtx);
static void mark_set (rtx, rtx);
static void mark_clobber (rtx, rtx);
static void mark_oprs_set (rtx);
static void alloc_cprop_mem (int, int);
static void free_cprop_mem (void);
static void compute_transp (rtx, int, sbitmap *, int);
static void compute_transpout (void);
static void compute_local_properties (sbitmap *, sbitmap *, sbitmap *,
          struct hash_table *);
static void compute_cprop_data (void);
static void find_used_regs (rtx *, void *);
static int try_replace_reg (rtx, rtx, rtx);
static struct expr *find_avail_set (int, rtx);
static int cprop_jump (basic_block, rtx, rtx, rtx, rtx);
static void mems_conflict_for_gcse_p (rtx, rtx, void *);
static int load_killed_in_block_p (basic_block, int, rtx, int);
static void canon_list_insert (rtx, rtx, void *);
static int cprop_insn (rtx, int);
static int cprop (int);
static void find_implicit_sets (void);
static int one_cprop_pass (int, int, int);
static unsigned char constprop_register (rtx, rtx, rtx, int);
static struct expr *find_bypass_set (int, int);
static unsigned char reg_killed_on_edge (rtx, edge);
static int bypass_block (basic_block, rtx, rtx);
static int bypass_conditional_jumps (void);
static void alloc_pre_mem (int, int);
static void free_pre_mem (void);
static void compute_pre_data (void);
static int pre_expr_reaches_here_p (basic_block, struct expr *,
        basic_block);
static void insert_insn_end_bb (struct expr *, basic_block, int);
static void pre_insert_copy_insn (struct expr *, rtx);
static void pre_insert_copies (void);
static int pre_delete (void);
static int pre_gcse (void);
static int one_pre_gcse_pass (int);
static void add_label_notes_gcse (rtx, rtx);
static void alloc_code_hoist_mem (int, int);
static void free_code_hoist_mem (void);
static void compute_code_hoist_vbeinout (void);
static void compute_code_hoist_data (void);
static int hoist_expr_reaches_here_p (basic_block, int, basic_block, char *);
static void hoist_code (void);
static int one_code_hoisting_pass (void);
static rtx process_insert_insn (struct expr *);
static int pre_edge_insert (struct edge_list *, struct expr **);
static int pre_expr_reaches_here_p_work (basic_block, struct expr *,
      basic_block, char *);
static struct ls_expr * ldst_entry (rtx);
static void free_ldst_entry (struct ls_expr *);
static void free_ldst_mems (void);
static void print_ldst_list (FILE *);
static struct ls_expr * find_rtx_in_ldst (rtx);
static int enumerate_ldsts (void);
static struct ls_expr * first_ls_expr (void);
static struct ls_expr * next_ls_expr (struct ls_expr *);
static int simple_mem (rtx);
static void invalidate_any_buried_refs (rtx);
static void compute_ld_motion_mems (void);
static void trim_ld_motion_mems (void);
static void update_ld_motion_stores (struct expr *);
static void reg_set_info (rtx, rtx, void *);
static void reg_clear_last_set (rtx, rtx, void *);
static unsigned char store_ops_ok (rtx, int *);
static rtx extract_mentioned_regs (rtx);
static rtx extract_mentioned_regs_helper (rtx, rtx);
static void find_moveable_store (rtx, int *, int *);
static int compute_store_table (void);
static unsigned char load_kills_store (rtx, rtx, int);
static unsigned char find_loads (rtx, rtx, int);
static unsigned char store_killed_in_insn (rtx, rtx, rtx, int);
static unsigned char store_killed_after (rtx, rtx, rtx, basic_block, int *, rtx *);
static unsigned char store_killed_before (rtx, rtx, rtx, basic_block, int *);
static void build_store_vectors (void);
static void insert_insn_start_bb (rtx, basic_block);
static int insert_store (struct ls_expr *, edge);
static void remove_reachable_equiv_notes (basic_block, struct ls_expr *);
static void replace_store_insn (rtx, rtx, basic_block, struct ls_expr *);
static void delete_store (struct ls_expr *, basic_block);
static void free_store_memory (void);
static void store_motion (void);
static void free_insn_expr_list_list (rtx *);
static void clear_modify_mem_tables (void);
static void free_modify_mem_tables (void);
static rtx gcse_emit_move_after (rtx, rtx, rtx);
static void local_cprop_find_used_regs (rtx *, void *);
static unsigned char do_local_cprop (rtx, rtx, int, rtx*);
static unsigned char adjust_libcall_notes (rtx, rtx, rtx, rtx*);
static void local_cprop_pass (int);
static unsigned char is_too_expensive (const char *);
int
gcse_main (rtx f, FILE *file)
{
  int changed, pass;
  int initial_bytes_used;
  int max_pass_bytes;
  char *gcse_obstack_bottom;
  if ((cfun->calls_setjmp))
    return 0;
  run_jump_opt_after_gcse = 0;
  debug_stderr = stderr;
  gcse_file = file;
  max_gcse_regno = max_reg_num ();
  if (file)
    dump_flow_info (file);
  if (n_basic_blocks <= 1 || is_too_expensive ("GCSE disabled"))
    return 0;
  _obstack_begin ((&gcse_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
  bytes_used = 0;
  init_alias_analysis ();
  alloc_reg_set_mem (max_gcse_regno);
  compute_sets (f);
  pass = 0;
  initial_bytes_used = bytes_used;
  max_pass_bytes = 0;
  gcse_obstack_bottom = gcse_alloc (1);
  changed = 1;
  while (changed && pass < (compiler_params[(int) PARAM_MAX_GCSE_PASSES].value1))
    {
      changed = 0;
      if (file)
 fprintf (file, "GCSE pass %d\n\n", pass + 1);
      bytes_used = initial_bytes_used;
      max_gcse_regno = max_reg_num ();
      alloc_gcse_mem (f);
      changed = one_cprop_pass (pass + 1, 0, 0);
      if (optimize_size)
                    ;
      else
 {
   changed |= one_pre_gcse_pass (pass + 1);
   if (changed)
     {
       free_modify_mem_tables ();
       modify_mem_list = gcalloc (last_basic_block, sizeof (rtx));
       canon_modify_mem_list = gcalloc (last_basic_block, sizeof (rtx));
     }
   free_reg_set_mem ();
   alloc_reg_set_mem (max_reg_num ());
   compute_sets (f);
   run_jump_opt_after_gcse = 1;
 }
      if (max_pass_bytes < bytes_used)
 max_pass_bytes = bytes_used;
      free_gcse_mem ();
      if (optimize_size)
 {
   max_gcse_regno = max_reg_num ();
   alloc_gcse_mem (f);
   changed |= one_code_hoisting_pass ();
   free_gcse_mem ();
   if (max_pass_bytes < bytes_used)
     max_pass_bytes = bytes_used;
 }
      if (file)
 {
   fprintf (file, "\n");
   fflush (file);
 }
      ( (&gcse_obstack)->temp = (char *) (gcse_obstack_bottom) - (char *) (&gcse_obstack)->chunk, (((&gcse_obstack)->temp > 0 && (&gcse_obstack)->temp < (&gcse_obstack)->chunk_limit - (char *) (&gcse_obstack)->chunk) ? (int) ((&gcse_obstack)->next_free = (&gcse_obstack)->object_base = (&gcse_obstack)->temp + (char *) (&gcse_obstack)->chunk) : (((obstack_free) ((&gcse_obstack), (&gcse_obstack)->temp + (char *) (&gcse_obstack)->chunk), 0), 0)));
      pass++;
    }
  max_gcse_regno = max_reg_num ();
  alloc_gcse_mem (f);
  one_cprop_pass (pass + 1, 1, 0);
  free_gcse_mem ();
  if (file)
    {
      fprintf (file, "GCSE of %s: %d basic blocks, ",
        current_function_name (), n_basic_blocks);
      fprintf (file, "%d pass%s, %d bytes\n\n",
        pass, pass > 1 ? "es" : "", max_pass_bytes);
    }
  ( (&gcse_obstack)->temp = (char *) (((void *)0)) - (char *) (&gcse_obstack)->chunk, (((&gcse_obstack)->temp > 0 && (&gcse_obstack)->temp < (&gcse_obstack)->chunk_limit - (char *) (&gcse_obstack)->chunk) ? (int) ((&gcse_obstack)->next_free = (&gcse_obstack)->object_base = (&gcse_obstack)->temp + (char *) (&gcse_obstack)->chunk) : (((obstack_free) ((&gcse_obstack), (&gcse_obstack)->temp + (char *) (&gcse_obstack)->chunk), 0), 0)));
  free_reg_set_mem ();
  end_alias_analysis ();
  allocate_reg_info (max_reg_num (), 0, 0);
  if (!optimize_size && flag_gcse_sm)
    store_motion ();
  return run_jump_opt_after_gcse;
}
static char can_copy[(int) NUM_MACHINE_MODES];
static void
compute_can_copy (void)
{
  int i;
  memset (can_copy, 0, NUM_MACHINE_MODES);
  start_sequence ();
  for (i = 0; i < NUM_MACHINE_MODES; i++)
    if (mode_class[i] == MODE_CC)
      {
 can_copy[i] = 0;
      }
    else
      can_copy[i] = 1;
  end_sequence ();
}
unsigned char
can_copy_p (enum machine_mode mode)
{
  static unsigned char can_copy_init_p = 0;
  if (! can_copy_init_p)
    {
      compute_can_copy ();
      can_copy_init_p = 1;
    }
  return can_copy[mode] != 0;
}
static void *
gmalloc (size_t size)
{
  bytes_used += size;
  return xmalloc (size);
}
static void *
gcalloc (size_t nelem, size_t elsize)
{
  bytes_used += nelem * elsize;
  return xcalloc (nelem, elsize);
}
static void *
grealloc (void *ptr, size_t size)
{
  return xrealloc (ptr, size);
}
static void *
gcse_alloc (unsigned long size)
{
  bytes_used += size;
  return (( ((&gcse_obstack))->temp = ((size)), ((((&gcse_obstack))->chunk_limit - ((&gcse_obstack))->next_free < ((&gcse_obstack))->temp) ? (_obstack_newchunk (((&gcse_obstack)), ((&gcse_obstack))->temp), 0) : 0), (((&gcse_obstack))->next_free += (((&gcse_obstack))->temp))), ( (((&gcse_obstack))->next_free == ((&gcse_obstack))->object_base ? ((((&gcse_obstack))->maybe_empty_object = 1), 0) : 0), ((&gcse_obstack))->temp = ((((&gcse_obstack))->object_base) - (char *) 0), ((&gcse_obstack))->next_free = (((((((&gcse_obstack))->next_free) - (char *) 0)+((&gcse_obstack))->alignment_mask) & ~ (((&gcse_obstack))->alignment_mask)) + (char *) 0), ((((&gcse_obstack))->next_free - (char *) ((&gcse_obstack))->chunk > ((&gcse_obstack))->chunk_limit - (char *) ((&gcse_obstack))->chunk) ? (((&gcse_obstack))->next_free = ((&gcse_obstack))->chunk_limit) : 0), ((&gcse_obstack))->object_base = ((&gcse_obstack))->next_free, ((((&gcse_obstack))->temp) + (char *) 0)));
}
static void
alloc_gcse_mem (rtx f)
{
  int i;
  rtx insn;
  max_uid = get_max_uid ();
  uid_cuid = gcalloc (max_uid + 1, sizeof (int));
  for (insn = f, i = 0; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 uid_cuid[(((insn)->u.fld[0]).rtint)] = i++;
      else
 uid_cuid[(((insn)->u.fld[0]).rtint)] = i;
    }
  max_cuid = i;
  cuid_insn = gcalloc (max_cuid + 1, sizeof (rtx));
  for (insn = f, i = 0; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      (cuid_insn[i++]) = insn;
  reg_set_bitmap = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  reg_set_in_block = sbitmap_vector_alloc (last_basic_block, max_gcse_regno);
  modify_mem_list = gcalloc (last_basic_block, sizeof (rtx));
  canon_modify_mem_list = gcalloc (last_basic_block, sizeof (rtx));
  modify_mem_list_set = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  canon_modify_mem_list_set = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
}
static void
free_gcse_mem (void)
{
  free (uid_cuid);
  free (cuid_insn);
  do { if (reg_set_bitmap) { bitmap_clear (reg_set_bitmap); free (reg_set_bitmap); (reg_set_bitmap) = 0; } } while (0);
  free(reg_set_in_block);
  free_modify_mem_tables ();
  do { if (modify_mem_list_set) { bitmap_clear (modify_mem_list_set); free (modify_mem_list_set); (modify_mem_list_set) = 0; } } while (0);
  do { if (canon_modify_mem_list_set) { bitmap_clear (canon_modify_mem_list_set); free (canon_modify_mem_list_set); (canon_modify_mem_list_set) = 0; } } while (0);
}
static void
compute_local_properties (sbitmap *transp, sbitmap *comp, sbitmap *antloc,
     struct hash_table *table)
{
  unsigned int i;
  if (transp)
    {
      if (table->set_p)
 sbitmap_vector_zero (transp, last_basic_block);
      else
 sbitmap_vector_ones (transp, last_basic_block);
    }
  if (comp)
    sbitmap_vector_zero (comp, last_basic_block);
  if (antloc)
    sbitmap_vector_zero (antloc, last_basic_block);
  for (i = 0; i < table->size; i++)
    {
      struct expr *expr;
      for (expr = table->table[i]; expr != ((void *)0); expr = expr->next_same_hash)
 {
   int indx = expr->bitmap_index;
   struct occr *occr;
   if (transp)
     compute_transp (expr->expr, indx, transp, table->set_p);
   if (antloc)
     for (occr = expr->antic_occr; occr != ((void *)0); occr = occr->next)
       {
  ((antloc[((((occr->insn)->u.fld[3]).bb)->index + 0)])->elms [(indx) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (indx) % ((unsigned) (8 * 4)));
  occr->deleted_p = 0;
       }
   if (comp)
     for (occr = expr->avail_occr; occr != ((void *)0); occr = occr->next)
       {
  ((comp[((((occr->insn)->u.fld[3]).bb)->index + 0)])->elms [(indx) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (indx) % ((unsigned) (8 * 4)));
  occr->copied_p = 0;
       }
   expr->reaching_reg = 0;
 }
    }
}
static struct obstack reg_set_obstack;
static void
alloc_reg_set_mem (int n_regs)
{
  reg_set_table_size = n_regs + 100;
  reg_set_table = gcalloc (reg_set_table_size, sizeof (struct reg_set *));
  _obstack_begin ((&reg_set_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
}
static void
free_reg_set_mem (void)
{
  free (reg_set_table);
  ( (&reg_set_obstack)->temp = (char *) (((void *)0)) - (char *) (&reg_set_obstack)->chunk, (((&reg_set_obstack)->temp > 0 && (&reg_set_obstack)->temp < (&reg_set_obstack)->chunk_limit - (char *) (&reg_set_obstack)->chunk) ? (int) ((&reg_set_obstack)->next_free = (&reg_set_obstack)->object_base = (&reg_set_obstack)->temp + (char *) (&reg_set_obstack)->chunk) : (((obstack_free) ((&reg_set_obstack), (&reg_set_obstack)->temp + (char *) (&reg_set_obstack)->chunk), 0), 0)));
}
static void
replace_one_set (int regno, rtx old_insn, rtx new_insn)
{
  struct reg_set *reg_info1;
  if (regno >= reg_set_table_size)
    return;
  for (reg_info1 = reg_set_table[regno]; reg_info1; reg_info1 = reg_info1->next)
    if (reg_info1->insn == old_insn)
      {
        reg_info1->insn = new_insn;
        break;
      }
}
static void
record_one_set (int regno, rtx insn)
{
  struct reg_set *new_reg_info;
  if (regno >= reg_set_table_size)
    {
      int new_size = regno + 100;
      reg_set_table = grealloc (reg_set_table,
    new_size * sizeof (struct reg_set *));
      memset (reg_set_table + reg_set_table_size, 0,
       (new_size - reg_set_table_size) * sizeof (struct reg_set *));
      reg_set_table_size = new_size;
    }
  new_reg_info = (( ((&reg_set_obstack))->temp = ((sizeof (struct reg_set))), ((((&reg_set_obstack))->chunk_limit - ((&reg_set_obstack))->next_free < ((&reg_set_obstack))->temp) ? (_obstack_newchunk (((&reg_set_obstack)), ((&reg_set_obstack))->temp), 0) : 0), (((&reg_set_obstack))->next_free += (((&reg_set_obstack))->temp))), ( (((&reg_set_obstack))->next_free == ((&reg_set_obstack))->object_base ? ((((&reg_set_obstack))->maybe_empty_object = 1), 0) : 0), ((&reg_set_obstack))->temp = ((((&reg_set_obstack))->object_base) - (char *) 0), ((&reg_set_obstack))->next_free = (((((((&reg_set_obstack))->next_free) - (char *) 0)+((&reg_set_obstack))->alignment_mask) & ~ (((&reg_set_obstack))->alignment_mask)) + (char *) 0), ((((&reg_set_obstack))->next_free - (char *) ((&reg_set_obstack))->chunk > ((&reg_set_obstack))->chunk_limit - (char *) ((&reg_set_obstack))->chunk) ? (((&reg_set_obstack))->next_free = ((&reg_set_obstack))->chunk_limit) : 0), ((&reg_set_obstack))->object_base = ((&reg_set_obstack))->next_free, ((((&reg_set_obstack))->temp) + (char *) 0)));
  bytes_used += sizeof (struct reg_set);
  new_reg_info->insn = insn;
  new_reg_info->next = reg_set_table[regno];
  reg_set_table[regno] = new_reg_info;
}
static void
record_set_info (rtx dest, rtx setter , void *data)
{
  rtx record_set_insn = (rtx) data;
  if ((((enum rtx_code) (dest)->code) == REG) && (((dest)->u.fld[0]).rtuint) >= 53)
    record_one_set ((((dest)->u.fld[0]).rtuint), record_set_insn);
}
static void
compute_sets (rtx f)
{
  rtx insn;
  for (insn = f; insn != 0; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      note_stores ((((insn)->u.fld[5]).rtx1), record_set_info, insn);
}
struct reg_avail_info
{
  basic_block last_bb;
  int first_set;
  int last_set;
};
static struct reg_avail_info *reg_avail_info;
static basic_block current_bb;
static int
want_to_gcse_p (rtx x)
{
  switch (((enum rtx_code) (x)->code))
    {
    case REG:
    case SUBREG:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CALL:
      return 0;
    default:
      return can_assign_to_reg_p (x);
    }
}
static rtx test_insn;
static unsigned char
can_assign_to_reg_p (rtx x)
{
  int num_clobbers = 0;
  int icode;
  if (general_operand (x, ((enum machine_mode) (x)->mode)))
    return 1;
  else if (((enum machine_mode) (x)->mode) == VOIDmode)
    return 0;
  if (test_insn == 0)
    {
      test_insn
 = make_insn_raw (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (word_mode, 53 * 2)), ((const_int_rtx[64])))
                     );
      (((test_insn)->u.fld[2]).rtx1) = (((test_insn)->u.fld[1]).rtx1) = 0;
    }
  ((((((((test_insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->mode = (((enum machine_mode) (x)->mode)));
  ((((((test_insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1) = x;
  return ((icode = recog ((((test_insn)->u.fld[5]).rtx1), test_insn, &num_clobbers)) >= 0
   && (num_clobbers == 0 || ! added_clobbers_hard_reg_p (icode)));
}
static int
oprs_unchanged_p (rtx x, rtx insn, int avail_p)
{
  int i, j;
  enum rtx_code code;
  const char *fmt;
  if (x == 0)
    return 1;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
      {
 struct reg_avail_info *info = &reg_avail_info[(((x)->u.fld[0]).rtuint)];
 if (info->last_bb != current_bb)
   return 1;
 if (avail_p)
   return info->last_set < (uid_cuid[(((insn)->u.fld[0]).rtint)]);
 else
   return info->first_set >= (uid_cuid[(((insn)->u.fld[0]).rtint)]);
      }
    case MEM:
      if (load_killed_in_block_p (current_bb, (uid_cuid[(((insn)->u.fld[0]).rtint)]),
      x, avail_p))
 return 0;
      else
 return oprs_unchanged_p ((((x)->u.fld[0]).rtx1), insn, avail_p);
    case PRE_DEC:
    case PRE_INC:
    case POST_DEC:
    case POST_INC:
    case PRE_MODIFY:
    case POST_MODIFY:
      return 0;
    case PC:
    case CC0:
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      return 1;
    default:
      break;
    }
  for (i = (rtx_length[(int) (code)]) - 1, fmt = (rtx_format[(int) (code)]); i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   if (i == 0)
     return oprs_unchanged_p ((((x)->u.fld[i]).rtx1), insn, avail_p);
   else if (! oprs_unchanged_p ((((x)->u.fld[i]).rtx1), insn, avail_p))
     return 0;
 }
      else if (fmt[i] == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   if (! oprs_unchanged_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), insn, avail_p))
     return 0;
    }
  return 1;
}
static int gcse_mems_conflict_p;
static rtx gcse_mem_operand;
static void
mems_conflict_for_gcse_p (rtx dest, rtx setter ,
     void *data )
{
  while (((enum rtx_code) (dest)->code) == SUBREG
  || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT
  || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT
  || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
    dest = (((dest)->u.fld[0]).rtx1);
  if (! (((enum rtx_code) (dest)->code) == MEM))
    return;
  if (expr_equiv_p (dest, gcse_mem_operand) && pre_ldst_mems != ((void *)0))
    {
      if (!find_rtx_in_ldst (dest))
 gcse_mems_conflict_p = 1;
      return;
    }
  if (true_dependence (dest, ((enum machine_mode) (dest)->mode), gcse_mem_operand,
         rtx_addr_varies_p))
    gcse_mems_conflict_p = 1;
}
static int
load_killed_in_block_p (basic_block bb, int uid_limit, rtx x, int avail_p)
{
  rtx list_entry = modify_mem_list[bb->index];
  while (list_entry)
    {
      rtx setter;
      if ((avail_p
    && (uid_cuid[((((((list_entry)->u.fld[0]).rtx1))->u.fld[0]).rtint)]) < uid_limit)
   || (! avail_p
       && (uid_cuid[((((((list_entry)->u.fld[0]).rtx1))->u.fld[0]).rtint)]) > uid_limit))
 {
   list_entry = (((list_entry)->u.fld[1]).rtx1);
   continue;
 }
      setter = (((list_entry)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (setter)->code) == CALL_INSN))
 return 1;
      gcse_mem_operand = x;
      gcse_mems_conflict_p = 0;
      note_stores ((((setter)->u.fld[5]).rtx1), mems_conflict_for_gcse_p, ((void *)0));
      if (gcse_mems_conflict_p)
 return 1;
      list_entry = (((list_entry)->u.fld[1]).rtx1);
    }
  return 0;
}
static int
oprs_anticipatable_p (rtx x, rtx insn)
{
  return oprs_unchanged_p (x, insn, 0);
}
static int
oprs_available_p (rtx x, rtx insn)
{
  return oprs_unchanged_p (x, insn, 1);
}
static unsigned int
hash_expr (rtx x, enum machine_mode mode, int *do_not_record_p,
    int hash_table_size)
{
  unsigned int hash;
  *do_not_record_p = 0;
  hash = hash_expr_1 (x, mode, do_not_record_p);
  return hash % hash_table_size;
}
static unsigned
hash_string_1 (const char *ps)
{
  unsigned hash = 0;
  const unsigned char *p = (const unsigned char *) ps;
  if (p)
    while (*p)
      hash += *p++;
  return hash;
}
static unsigned int
hash_expr_1 (rtx x, enum machine_mode mode, int *do_not_record_p)
{
  int i, j;
  unsigned hash = 0;
  enum rtx_code code;
  const char *fmt;
  if (x == 0)
    return hash;
 repeat:
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
      hash += ((unsigned int) REG << 7) + (((x)->u.fld[0]).rtuint);
      return hash;
    case CONST_INT:
      hash += (((unsigned int) CONST_INT << 7) + (unsigned int) mode
        + (unsigned int) ((x)->u.hwint[0]));
      return hash;
    case CONST_DOUBLE:
      hash += (unsigned int) code + (unsigned int) ((enum machine_mode) (x)->mode);
      if (((enum machine_mode) (x)->mode) != VOIDmode)
 for (i = 2; i < (rtx_length[(int) (CONST_DOUBLE)]); i++)
   hash += (unsigned int) ((x)->u.hwint[i]);
      else
 hash += ((unsigned int) ((x)->u.hwint[0])
   + (unsigned int) ((x)->u.hwint[1]));
      return hash;
    case CONST_VECTOR:
      {
 int units;
 rtx elt;
 units = (((((x)->u.fld[0]).rtvec1))->num_elem);
 for (i = 0; i < units; ++i)
   {
     elt = (((((x)->u.fld[0]).rtvec1))->elem[i]);
     hash += hash_expr_1 (elt, ((enum machine_mode) (elt)->mode), do_not_record_p);
   }
 return hash;
      }
    case LABEL_REF:
      hash += (((unsigned int) LABEL_REF << 7)
        + ((((((x)->u.fld[0]).rtx1))->u.fld[6]).rtint));
      return hash;
    case SYMBOL_REF:
      {
 unsigned int h = 0;
 const unsigned char *p = (const unsigned char *) (((x)->u.fld[0]).rtstr);
 while (*p)
   h += (h << 7) + *p++;
 hash += ((unsigned int) SYMBOL_REF << 7) + h;
 return hash;
      }
    case MEM:
      if ((((x))->volatil))
 {
   *do_not_record_p = 1;
   return 0;
 }
      hash += (unsigned int) MEM;
      x = (((x)->u.fld[0]).rtx1);
      goto repeat;
    case PRE_DEC:
    case PRE_INC:
    case POST_DEC:
    case POST_INC:
    case PC:
    case CC0:
    case CALL:
    case UNSPEC_VOLATILE:
      *do_not_record_p = 1;
      return 0;
    case ASM_OPERANDS:
      if ((((x))->volatil))
 {
   *do_not_record_p = 1;
   return 0;
 }
      else
 {
   hash += (unsigned) code + (unsigned) ((enum machine_mode) (x)->mode)
     + hash_string_1 ((((x)->u.fld[0]).rtstr))
     + hash_string_1 ((((x)->u.fld[1]).rtstr))
     + (unsigned) (((x)->u.fld[2]).rtint);
   if ((((((x)->u.fld[3]).rtvec1))->num_elem))
     {
       for (i = 1; i < (((((x)->u.fld[3]).rtvec1))->num_elem); i++)
  {
    hash += (hash_expr_1 ((((((x)->u.fld[3]).rtvec1))->elem[i]),
     ((enum machine_mode) ((((((x)->u.fld[3]).rtvec1))->elem[i]))->mode),
     do_not_record_p)
      + hash_string_1 (((((((((x)->u.fld[4]).rtvec1))->elem[i]))->u.fld[0]).rtstr)
               ));
  }
       hash += hash_string_1 (((((((((x)->u.fld[4]).rtvec1))->elem[0]))->u.fld[0]).rtstr));
       x = (((((x)->u.fld[3]).rtvec1))->elem[0]);
       mode = ((enum machine_mode) (x)->mode);
       goto repeat;
     }
   return hash;
 }
    default:
      break;
    }
  hash += (unsigned) code + (unsigned) ((enum machine_mode) (x)->mode);
  for (i = (rtx_length[(int) (code)]) - 1, fmt = (rtx_format[(int) (code)]); i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   if (i == 0)
     {
       x = (((x)->u.fld[i]).rtx1);
       goto repeat;
     }
   hash += hash_expr_1 ((((x)->u.fld[i]).rtx1), 0, do_not_record_p);
   if (*do_not_record_p)
     return 0;
 }
      else if (fmt[i] == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   {
     hash += hash_expr_1 ((((((x)->u.fld[i]).rtvec1))->elem[j]), 0, do_not_record_p);
     if (*do_not_record_p)
       return 0;
   }
      else if (fmt[i] == 's')
 hash += hash_string_1 ((((x)->u.fld[i]).rtstr));
      else if (fmt[i] == 'i')
 hash += (unsigned int) (((x)->u.fld[i]).rtint);
      else
 abort ();
    }
  return hash;
}
static unsigned int
hash_set (int regno, int hash_table_size)
{
  unsigned int hash;
  hash = regno;
  return hash % hash_table_size;
}
static int
expr_equiv_p (rtx x, rtx y)
{
  int i, j;
  enum rtx_code code;
  const char *fmt;
  if (x == y)
    return 1;
  if (x == 0 || y == 0)
    return 0;
  code = ((enum rtx_code) (x)->code);
  if (code != ((enum rtx_code) (y)->code))
    return 0;
  if (((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode))
    return 0;
  switch (code)
    {
    case PC:
    case CC0:
    case CONST_INT:
      return 0;
    case LABEL_REF:
      return (((x)->u.fld[0]).rtx1) == (((y)->u.fld[0]).rtx1);
    case SYMBOL_REF:
      return (((x)->u.fld[0]).rtstr) == (((y)->u.fld[0]).rtstr);
    case REG:
      return (((x)->u.fld[0]).rtuint) == (((y)->u.fld[0]).rtuint);
    case MEM:
      if (((((x)->u.fld[1]).rtmem) == 0 ? 0 : (((x)->u.fld[1]).rtmem)->alias) != ((((y)->u.fld[1]).rtmem) == 0 ? 0 : (((y)->u.fld[1]).rtmem)->alias))
 return 0;
      if ((((x))->volatil) || (((y))->volatil))
 return 0;
      break;
    case PLUS:
    case MULT:
    case AND:
    case IOR:
    case XOR:
    case NE:
    case EQ:
      return ((expr_equiv_p ((((x)->u.fld[0]).rtx1), (((y)->u.fld[0]).rtx1))
        && expr_equiv_p ((((x)->u.fld[1]).rtx1), (((y)->u.fld[1]).rtx1)))
       || (expr_equiv_p ((((x)->u.fld[0]).rtx1), (((y)->u.fld[1]).rtx1))
    && expr_equiv_p ((((x)->u.fld[1]).rtx1), (((y)->u.fld[0]).rtx1))));
    case ASM_OPERANDS:
      if ((((x))->volatil) || (((y))->volatil))
 return 0;
      if (((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode)
   || strcmp ((((x)->u.fld[0]).rtstr), (((y)->u.fld[0]).rtstr))
   || strcmp ((((x)->u.fld[1]).rtstr),
       (((y)->u.fld[1]).rtstr))
   || (((x)->u.fld[2]).rtint) != (((y)->u.fld[2]).rtint)
   || (((((x)->u.fld[3]).rtvec1))->num_elem) != (((((y)->u.fld[3]).rtvec1))->num_elem))
 return 0;
      if ((((((x)->u.fld[3]).rtvec1))->num_elem))
 {
   for (i = (((((x)->u.fld[3]).rtvec1))->num_elem) - 1; i >= 0; i--)
     if (! expr_equiv_p ((((((x)->u.fld[3]).rtvec1))->elem[i]),
    (((((y)->u.fld[3]).rtvec1))->elem[i]))
  || strcmp (((((((((x)->u.fld[4]).rtvec1))->elem[i]))->u.fld[0]).rtstr),
      ((((((((y)->u.fld[4]).rtvec1))->elem[i]))->u.fld[0]).rtstr)))
       return 0;
 }
      return 1;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      switch (fmt[i])
 {
 case 'e':
   if (! expr_equiv_p ((((x)->u.fld[i]).rtx1), (((y)->u.fld[i]).rtx1)))
     return 0;
   break;
 case 'E':
   if ((((((x)->u.fld[i]).rtvec1))->num_elem) != (((((y)->u.fld[i]).rtvec1))->num_elem))
     return 0;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     if (! expr_equiv_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), (((((y)->u.fld[i]).rtvec1))->elem[j])))
       return 0;
   break;
 case 's':
   if (strcmp ((((x)->u.fld[i]).rtstr), (((y)->u.fld[i]).rtstr)))
     return 0;
   break;
 case 'i':
   if ((((x)->u.fld[i]).rtint) != (((y)->u.fld[i]).rtint))
     return 0;
   break;
 case 'w':
   if (((x)->u.hwint[i]) != ((y)->u.hwint[i]))
     return 0;
 break;
 case '0':
   break;
 default:
   abort ();
 }
    }
  return 1;
}
static void
insert_expr_in_table (rtx x, enum machine_mode mode, rtx insn, int antic_p,
        int avail_p, struct hash_table *table)
{
  int found, do_not_record_p;
  unsigned int hash;
  struct expr *cur_expr, *last_expr = ((void *)0);
  struct occr *antic_occr, *avail_occr;
  struct occr *last_occr = ((void *)0);
  hash = hash_expr (x, mode, &do_not_record_p, table->size);
  if (do_not_record_p)
    return;
  cur_expr = table->table[hash];
  found = 0;
  while (cur_expr && 0 == (found = expr_equiv_p (cur_expr->expr, x)))
    {
      last_expr = cur_expr;
      cur_expr = cur_expr->next_same_hash;
    }
  if (! found)
    {
      cur_expr = gcse_alloc (sizeof (struct expr));
      bytes_used += sizeof (struct expr);
      if (table->table[hash] == ((void *)0))
 table->table[hash] = cur_expr;
      else
 last_expr->next_same_hash = cur_expr;
      cur_expr->expr = x;
      cur_expr->bitmap_index = table->n_elems++;
      cur_expr->next_same_hash = ((void *)0);
      cur_expr->antic_occr = ((void *)0);
      cur_expr->avail_occr = ((void *)0);
    }
  if (antic_p)
    {
      antic_occr = cur_expr->antic_occr;
      while (antic_occr && ((((antic_occr->insn)->u.fld[3]).bb)->index + 0) != ((((insn)->u.fld[3]).bb)->index + 0))
 {
   last_occr = antic_occr;
   antic_occr = antic_occr->next;
 }
      if (antic_occr)
 ;
      else
 {
   antic_occr = gcse_alloc (sizeof (struct occr));
   bytes_used += sizeof (struct occr);
   if (cur_expr->antic_occr == ((void *)0))
     cur_expr->antic_occr = antic_occr;
   else
     last_occr->next = antic_occr;
   antic_occr->insn = insn;
   antic_occr->next = ((void *)0);
   antic_occr->deleted_p = 0;
 }
    }
  if (avail_p)
    {
      avail_occr = cur_expr->avail_occr;
      while (avail_occr && ((((avail_occr->insn)->u.fld[3]).bb)->index + 0) != ((((insn)->u.fld[3]).bb)->index + 0))
 {
   last_occr = avail_occr;
   avail_occr = avail_occr->next;
 }
      if (avail_occr)
 avail_occr->insn = insn;
      else
 {
   avail_occr = gcse_alloc (sizeof (struct occr));
   bytes_used += sizeof (struct occr);
   if (cur_expr->avail_occr == ((void *)0))
     cur_expr->avail_occr = avail_occr;
   else
     last_occr->next = avail_occr;
   avail_occr->insn = insn;
   avail_occr->next = ((void *)0);
   avail_occr->deleted_p = 0;
 }
    }
}
static void
insert_set_in_table (rtx x, rtx insn, struct hash_table *table)
{
  int found;
  unsigned int hash;
  struct expr *cur_expr, *last_expr = ((void *)0);
  struct occr *cur_occr, *last_occr = ((void *)0);
  if (((enum rtx_code) (x)->code) != SET
      || ! (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
    abort ();
  hash = hash_set (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint), table->size);
  cur_expr = table->table[hash];
  found = 0;
  while (cur_expr && 0 == (found = expr_equiv_p (cur_expr->expr, x)))
    {
      last_expr = cur_expr;
      cur_expr = cur_expr->next_same_hash;
    }
  if (! found)
    {
      cur_expr = gcse_alloc (sizeof (struct expr));
      bytes_used += sizeof (struct expr);
      if (table->table[hash] == ((void *)0))
 table->table[hash] = cur_expr;
      else
 last_expr->next_same_hash = cur_expr;
      cur_expr->expr = copy_rtx (x);
      cur_expr->bitmap_index = table->n_elems++;
      cur_expr->next_same_hash = ((void *)0);
      cur_expr->antic_occr = ((void *)0);
      cur_expr->avail_occr = ((void *)0);
    }
  cur_occr = cur_expr->avail_occr;
  while (cur_occr && ((((cur_occr->insn)->u.fld[3]).bb)->index + 0) != ((((insn)->u.fld[3]).bb)->index + 0))
    {
      last_occr = cur_occr;
      cur_occr = cur_occr->next;
    }
  if (cur_occr)
    cur_occr->insn = insn;
  else
    {
      cur_occr = gcse_alloc (sizeof (struct occr));
      bytes_used += sizeof (struct occr);
      if (cur_expr->avail_occr == ((void *)0))
 cur_expr->avail_occr = cur_occr;
      else
 last_occr->next = cur_occr;
      cur_occr->insn = insn;
      cur_occr->next = ((void *)0);
      cur_occr->deleted_p = 0;
    }
}
static unsigned char
gcse_constant_p (rtx x)
{
  if (((enum rtx_code) (x)->code) == COMPARE
      && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_INT
      && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
    return 1;
  if (((enum rtx_code) (x)->code) == COMPARE
      && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG) && (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG)
      && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtuint)
      && ! (mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_VECTOR_FLOAT)
      && ! (mode_class[((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode)] == MODE_VECTOR_FLOAT))
    return 1;
  return ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR);
}
static void
hash_scan_set (rtx pat, rtx insn, struct hash_table *table)
{
  rtx src = (((pat)->u.fld[1]).rtx1);
  rtx dest = (((pat)->u.fld[0]).rtx1);
  rtx note;
  if (((enum rtx_code) (src)->code) == CALL)
    hash_scan_call (src, insn, table);
  else if ((((enum rtx_code) (dest)->code) == REG))
    {
      unsigned int regno = (((dest)->u.fld[0]).rtuint);
      rtx tmp;
      if (table->set_p && (note = find_reg_equal_equiv_note (insn)) != 0
   && gcse_constant_p ((((note)->u.fld[0]).rtx1)))
 src = (((note)->u.fld[0]).rtx1), pat = gen_rtx_fmt_ee (SET, (VOIDmode), (dest), (src));
      if (! table->set_p
   && regno >= 53
   && can_copy_p (((enum machine_mode) (dest)->mode))
   && !find_reg_note (insn, REG_EH_REGION, (rtx) 0)
   && want_to_gcse_p (src)
   && ! set_noop_p (pat)
   && ((note = find_reg_note (insn, REG_EQUIV, (rtx) 0)) == 0
       || ! (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == MEM)))
 {
   int antic_p = oprs_anticipatable_p (src, insn) && (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
   int avail_p = (oprs_available_p (src, insn)
    && ! (((enum rtx_code) (insn)->code) == JUMP_INSN));
   insert_expr_in_table (src, ((enum machine_mode) (dest)->mode), insn, antic_p, avail_p, table);
 }
      else if (table->set_p
        && regno >= 53
        && (((((enum rtx_code) (src)->code) == REG)
      && (((src)->u.fld[0]).rtuint) >= 53
      && can_copy_p (((enum machine_mode) (dest)->mode))
      && (((src)->u.fld[0]).rtuint) != regno)
     || gcse_constant_p (src))
        && (insn == ((((insn)->u.fld[3]).bb))->end_
     || ((tmp = next_nonnote_insn (insn)) != (rtx) 0
         && oprs_available_p (pat, tmp))))
 insert_set_in_table (pat, insn, table);
    }
  else if (flag_gcse_las && (((enum rtx_code) (src)->code) == REG) && (((enum rtx_code) (dest)->code) == MEM))
      {
        unsigned int regno = (((src)->u.fld[0]).rtuint);
        if (! table->set_p
     && regno >= 53
    && can_copy_p (((enum machine_mode) (src)->mode))
    && ! find_reg_note (insn, REG_EH_REGION, (rtx) 0)
    && want_to_gcse_p (dest)
    && ! set_noop_p (pat)
    && ((note = find_reg_note (insn, REG_EQUIV, (rtx) 0)) == 0
        || ! (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == MEM)))
             {
               int antic_p = 0;
               int avail_p = oprs_available_p (dest, insn)
        && ! (((enum rtx_code) (insn)->code) == JUMP_INSN);
        insert_expr_in_table (dest, ((enum machine_mode) (dest)->mode), insn,
         antic_p, avail_p, table);
             }
      }
}
static void
hash_scan_clobber (rtx x , rtx insn ,
     struct hash_table *table )
{
}
static void
hash_scan_call (rtx x , rtx insn ,
  struct hash_table *table )
{
}
static void
hash_scan_insn (rtx insn, struct hash_table *table, int in_libcall_block)
{
  rtx pat = (((insn)->u.fld[5]).rtx1);
  int i;
  if (in_libcall_block)
    return;
  if (((enum rtx_code) (pat)->code) == SET)
    hash_scan_set (pat, insn, table);
  else if (((enum rtx_code) (pat)->code) == PARALLEL)
    for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
      {
 rtx x = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
 if (((enum rtx_code) (x)->code) == SET)
   hash_scan_set (x, insn, table);
 else if (((enum rtx_code) (x)->code) == CLOBBER)
   hash_scan_clobber (x, insn, table);
 else if (((enum rtx_code) (x)->code) == CALL)
   hash_scan_call (x, insn, table);
      }
  else if (((enum rtx_code) (pat)->code) == CLOBBER)
    hash_scan_clobber (pat, insn, table);
  else if (((enum rtx_code) (pat)->code) == CALL)
    hash_scan_call (pat, insn, table);
}
static void
dump_hash_table (FILE *file, const char *name, struct hash_table *table)
{
  int i;
  struct expr **flat_table;
  unsigned int *hash_val;
  struct expr *expr;
  flat_table = xcalloc (table->n_elems, sizeof (struct expr *));
  hash_val = xmalloc (table->n_elems * sizeof (unsigned int));
  for (i = 0; i < (int) table->size; i++)
    for (expr = table->table[i]; expr != ((void *)0); expr = expr->next_same_hash)
      {
 flat_table[expr->bitmap_index] = expr;
 hash_val[expr->bitmap_index] = i;
      }
  fprintf (file, "%s hash table (%d buckets, %d entries)\n",
    name, table->size, table->n_elems);
  for (i = 0; i < (int) table->n_elems; i++)
    if (flat_table[i] != 0)
      {
 expr = flat_table[i];
 fprintf (file, "Index %d (hash value %d)\n  ",
   expr->bitmap_index, hash_val[i]);
 print_rtl (file, expr->expr);
 fprintf (file, "\n");
      }
  fprintf (file, "\n");
  free (flat_table);
  free (hash_val);
}
static void
record_last_reg_set_info (rtx insn, int regno)
{
  struct reg_avail_info *info = &reg_avail_info[regno];
  int cuid = (uid_cuid[(((insn)->u.fld[0]).rtint)]);
  info->last_set = cuid;
  if (info->last_bb != current_bb)
    {
      info->last_bb = current_bb;
      info->first_set = cuid;
      ((reg_set_in_block[current_bb->index])->elms [(regno) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (regno) % ((unsigned) (8 * 4)));
    }
}
static void
canon_list_insert (rtx dest , rtx unused1 ,
     void * v_insn)
{
  rtx dest_addr, insn;
  int bb;
  while (((enum rtx_code) (dest)->code) == SUBREG
      || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT
      || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT
      || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
    dest = (((dest)->u.fld[0]).rtx1);
  if (! (((enum rtx_code) (dest)->code) == MEM))
    return;
  dest_addr = get_addr ((((dest)->u.fld[0]).rtx1));
  dest_addr = canon_rtx (dest_addr);
  insn = (rtx) v_insn;
  bb = ((((insn)->u.fld[3]).bb)->index + 0);
  canon_modify_mem_list[bb] =
    alloc_EXPR_LIST (VOIDmode, dest_addr, canon_modify_mem_list[bb]);
  canon_modify_mem_list[bb] =
    alloc_EXPR_LIST (VOIDmode, dest, canon_modify_mem_list[bb]);
  bitmap_set_bit (canon_modify_mem_list_set, bb);
}
static void
record_last_mem_set_info (rtx insn)
{
  int bb = ((((insn)->u.fld[3]).bb)->index + 0);
  modify_mem_list[bb] = alloc_INSN_LIST (insn, modify_mem_list[bb]);
  bitmap_set_bit (modify_mem_list_set, bb);
  if ((((enum rtx_code) (insn)->code) == CALL_INSN))
    {
      canon_modify_mem_list[bb] =
 alloc_INSN_LIST (insn, canon_modify_mem_list[bb]);
      bitmap_set_bit (canon_modify_mem_list_set, bb);
    }
  else
    note_stores ((((insn)->u.fld[5]).rtx1), canon_list_insert, (void*) insn);
}
static void
record_last_set_info (rtx dest, rtx setter , void *data)
{
  rtx last_set_insn = (rtx) data;
  if (((enum rtx_code) (dest)->code) == SUBREG)
    dest = (((dest)->u.fld[0]).rtx1);
  if ((((enum rtx_code) (dest)->code) == REG))
    record_last_reg_set_info (last_set_insn, (((dest)->u.fld[0]).rtuint));
  else if ((((enum rtx_code) (dest)->code) == MEM)
    && ! push_operand (dest, ((enum machine_mode) (dest)->mode)))
    record_last_mem_set_info (last_set_insn);
}
static void
compute_hash_table_work (struct hash_table *table)
{
  unsigned int i;
  sbitmap_vector_zero (reg_set_in_block, last_basic_block);
  clear_modify_mem_tables ();
  reg_avail_info = gmalloc (max_gcse_regno * sizeof (struct reg_avail_info));
  for (i = 0; i < max_gcse_regno; ++i)
    reg_avail_info[i].last_bb = ((void *)0);
  for (current_bb = ENTRY_BLOCK_PTR->next_bb; current_bb != EXIT_BLOCK_PTR; current_bb = current_bb->next_bb)
    {
      rtx insn;
      unsigned int regno;
      int in_libcall_block;
      for (insn = (current_bb)->head_;
    insn && insn != ((((current_bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 {
   if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     continue;
   if ((((enum rtx_code) (insn)->code) == CALL_INSN))
     {
       unsigned char clobbers_all = 0;
       for (regno = 0; regno < 53; regno++)
  if (clobbers_all
      || (!!((regs_invalidated_by_call)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
    record_last_reg_set_info (insn, regno);
       mark_call (insn);
     }
   note_stores ((((insn)->u.fld[5]).rtx1), record_last_set_info, insn);
 }
      if (table->set_p
   && implicit_sets[current_bb->index] != (rtx) 0)
 hash_scan_set (implicit_sets[current_bb->index],
         (current_bb)->head_, table);
      for (insn = (current_bb)->head_, in_libcall_block = 0;
    insn && insn != ((((current_bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
   {
     if (find_reg_note (insn, REG_LIBCALL, (rtx) 0))
       in_libcall_block = 1;
     else if (table->set_p && find_reg_note (insn, REG_RETVAL, (rtx) 0))
       in_libcall_block = 0;
     hash_scan_insn (insn, table, in_libcall_block);
     if (!table->set_p && find_reg_note (insn, REG_RETVAL, (rtx) 0))
       in_libcall_block = 0;
   }
    }
  free (reg_avail_info);
  reg_avail_info = ((void *)0);
}
static void
alloc_hash_table (int n_insns, struct hash_table *table, int set_p)
{
  int n;
  table->size = n_insns / 4;
  if (table->size < 11)
    table->size = 11;
  table->size |= 1;
  n = table->size * sizeof (struct expr *);
  table->table = gmalloc (n);
  table->set_p = set_p;
}
static void
free_hash_table (struct hash_table *table)
{
  free (table->table);
}
static void
compute_hash_table (struct hash_table *table)
{
  table->n_elems = 0;
  memset (table->table, 0, table->size * sizeof (struct expr *));
  compute_hash_table_work (table);
}
static struct expr *
lookup_expr (rtx pat, struct hash_table *table)
{
  int do_not_record_p;
  unsigned int hash = hash_expr (pat, ((enum machine_mode) (pat)->mode), &do_not_record_p,
     table->size);
  struct expr *expr;
  if (do_not_record_p)
    return ((void *)0);
  expr = table->table[hash];
  while (expr && ! expr_equiv_p (expr->expr, pat))
    expr = expr->next_same_hash;
  return expr;
}
static struct expr *
lookup_set (unsigned int regno, struct hash_table *table)
{
  unsigned int hash = hash_set (regno, table->size);
  struct expr *expr;
  expr = table->table[hash];
  while (expr && ((((((expr->expr)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != regno)
    expr = expr->next_same_hash;
  return expr;
}
static struct expr *
next_set (unsigned int regno, struct expr *expr)
{
  do
    expr = expr->next_same_hash;
  while (expr && ((((((expr->expr)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != regno);
  return expr;
}
static void
free_insn_expr_list_list (rtx *listp)
{
  rtx list, next;
  for (list = *listp; list ; list = next)
    {
      next = (((list)->u.fld[1]).rtx1);
      if (((enum rtx_code) (list)->code) == EXPR_LIST)
 free_EXPR_LIST_node (list);
      else
 free_INSN_LIST_node (list);
    }
  *listp = ((void *)0);
}
static void
clear_modify_mem_tables (void)
{
  int i;
  do { bitmap_element *ptr_ = (modify_mem_list_set)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); free_INSN_LIST_list (modify_mem_list + i); if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                                                          ;
  bitmap_clear (modify_mem_list_set);
  do { bitmap_element *ptr_ = (canon_modify_mem_list_set)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); free_insn_expr_list_list (canon_modify_mem_list + i); if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                                          ;
  bitmap_clear (canon_modify_mem_list_set);
}
static void
free_modify_mem_tables (void)
{
  clear_modify_mem_tables ();
  free (modify_mem_list);
  free (canon_modify_mem_list);
  modify_mem_list = 0;
  canon_modify_mem_list = 0;
}
static void
reset_opr_set_tables (void)
{
  bitmap_clear (reg_set_bitmap);
  clear_modify_mem_tables ();
}
static int
oprs_not_set_p (rtx x, rtx insn)
{
  int i, j;
  enum rtx_code code;
  const char *fmt;
  if (x == 0)
    return 1;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case PC:
    case CC0:
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      return 1;
    case MEM:
      if (load_killed_in_block_p ((((insn)->u.fld[3]).bb),
      (uid_cuid[(((insn)->u.fld[0]).rtint)]), x, 0))
 return 0;
      else
 return oprs_not_set_p ((((x)->u.fld[0]).rtx1), insn);
    case REG:
      return ! bitmap_bit_p (reg_set_bitmap, (((x)->u.fld[0]).rtuint));
    default:
      break;
    }
  for (i = (rtx_length[(int) (code)]) - 1, fmt = (rtx_format[(int) (code)]); i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   if (i == 0)
     return oprs_not_set_p ((((x)->u.fld[i]).rtx1), insn);
   if (! oprs_not_set_p ((((x)->u.fld[i]).rtx1), insn))
     return 0;
 }
      else if (fmt[i] == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   if (! oprs_not_set_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), insn))
     return 0;
    }
  return 1;
}
static void
mark_call (rtx insn)
{
  if (! (((insn))->unchanging))
    record_last_mem_set_info (insn);
}
static void
mark_set (rtx pat, rtx insn)
{
  rtx dest = (((pat)->u.fld[0]).rtx1);
  while (((enum rtx_code) (dest)->code) == SUBREG
  || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT
  || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT
  || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
    dest = (((dest)->u.fld[0]).rtx1);
  if ((((enum rtx_code) (dest)->code) == REG))
    bitmap_set_bit (reg_set_bitmap, (((dest)->u.fld[0]).rtuint));
  else if ((((enum rtx_code) (dest)->code) == MEM))
    record_last_mem_set_info (insn);
  if (((enum rtx_code) ((((pat)->u.fld[1]).rtx1))->code) == CALL)
    mark_call (insn);
}
static void
mark_clobber (rtx pat, rtx insn)
{
  rtx clob = (((pat)->u.fld[0]).rtx1);
  while (((enum rtx_code) (clob)->code) == SUBREG || ((enum rtx_code) (clob)->code) == STRICT_LOW_PART)
    clob = (((clob)->u.fld[0]).rtx1);
  if ((((enum rtx_code) (clob)->code) == REG))
    bitmap_set_bit (reg_set_bitmap, (((clob)->u.fld[0]).rtuint));
  else
    record_last_mem_set_info (insn);
}
static void
mark_oprs_set (rtx insn)
{
  rtx pat = (((insn)->u.fld[5]).rtx1);
  int i;
  if (((enum rtx_code) (pat)->code) == SET)
    mark_set (pat, insn);
  else if (((enum rtx_code) (pat)->code) == PARALLEL)
    for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
      {
 rtx x = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
 if (((enum rtx_code) (x)->code) == SET)
   mark_set (x, insn);
 else if (((enum rtx_code) (x)->code) == CLOBBER)
   mark_clobber (x, insn);
 else if (((enum rtx_code) (x)->code) == CALL)
   mark_call (insn);
      }
  else if (((enum rtx_code) (pat)->code) == CLOBBER)
    mark_clobber (pat, insn);
  else if (((enum rtx_code) (pat)->code) == CALL)
    mark_call (insn);
}
static sbitmap *cprop_pavloc;
static sbitmap *cprop_absaltered;
static sbitmap *cprop_avin;
static sbitmap *cprop_avout;
static void
alloc_cprop_mem (int n_blocks, int n_sets)
{
  cprop_pavloc = sbitmap_vector_alloc (n_blocks, n_sets);
  cprop_absaltered = sbitmap_vector_alloc (n_blocks, n_sets);
  cprop_avin = sbitmap_vector_alloc (n_blocks, n_sets);
  cprop_avout = sbitmap_vector_alloc (n_blocks, n_sets);
}
static void
free_cprop_mem (void)
{
  free(cprop_pavloc);
  free(cprop_absaltered);
  free(cprop_avin);
  free(cprop_avout);
}
static void
compute_transp (rtx x, int indx, sbitmap *bmap, int set_p)
{
  int i, j;
  basic_block bb;
  enum rtx_code code;
  reg_set *r;
  const char *fmt;
 repeat:
  if (x == 0)
    return;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
      if (set_p)
 {
   if ((((x)->u.fld[0]).rtuint) < 53)
     {
       for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
  if (((reg_set_in_block[bb->index])->elms [((((x)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] >> ((((x)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4)) & 1))
    ((bmap[bb->index])->elms [(indx) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (indx) % ((unsigned) (8 * 4)));
     }
   else
     {
       for (r = reg_set_table[(((x)->u.fld[0]).rtuint)]; r != ((void *)0); r = r->next)
  ((bmap[((((r->insn)->u.fld[3]).bb)->index + 0)])->elms [(indx) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (indx) % ((unsigned) (8 * 4)));
     }
 }
      else
 {
   if ((((x)->u.fld[0]).rtuint) < 53)
     {
       for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
  if (((reg_set_in_block[bb->index])->elms [((((x)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] >> ((((x)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4)) & 1))
    ((bmap[bb->index])->elms [(indx) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (indx) % ((unsigned) (8 * 4))));
     }
   else
     {
       for (r = reg_set_table[(((x)->u.fld[0]).rtuint)]; r != ((void *)0); r = r->next)
  ((bmap[((((r->insn)->u.fld[3]).bb)->index + 0)])->elms [(indx) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (indx) % ((unsigned) (8 * 4))));
     }
 }
      return;
    case MEM:
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   rtx list_entry = canon_modify_mem_list[bb->index];
   while (list_entry)
     {
       rtx dest, dest_addr;
       if ((((enum rtx_code) ((((list_entry)->u.fld[0]).rtx1))->code) == CALL_INSN))
  {
    if (set_p)
      ((bmap[bb->index])->elms [(indx) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (indx) % ((unsigned) (8 * 4)));
    else
      ((bmap[bb->index])->elms [(indx) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (indx) % ((unsigned) (8 * 4))));
    break;
  }
       dest = (((list_entry)->u.fld[0]).rtx1);
       list_entry = (((list_entry)->u.fld[1]).rtx1);
       dest_addr = (((list_entry)->u.fld[0]).rtx1);
       if (canon_true_dependence (dest, ((enum machine_mode) (dest)->mode), dest_addr,
      x, rtx_addr_varies_p))
  {
    if (set_p)
      ((bmap[bb->index])->elms [(indx) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (indx) % ((unsigned) (8 * 4)));
    else
      ((bmap[bb->index])->elms [(indx) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (indx) % ((unsigned) (8 * 4))));
    break;
  }
       list_entry = (((list_entry)->u.fld[1]).rtx1);
     }
 }
      x = (((x)->u.fld[0]).rtx1);
      goto repeat;
    case PC:
    case CC0:
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      return;
    default:
      break;
    }
  for (i = (rtx_length[(int) (code)]) - 1, fmt = (rtx_format[(int) (code)]); i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   if (i == 0)
     {
       x = (((x)->u.fld[i]).rtx1);
       goto repeat;
     }
   compute_transp ((((x)->u.fld[i]).rtx1), indx, bmap, set_p);
 }
      else if (fmt[i] == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   compute_transp ((((((x)->u.fld[i]).rtvec1))->elem[j]), indx, bmap, set_p);
    }
}
static void
compute_cprop_data (void)
{
  compute_local_properties (cprop_absaltered, cprop_pavloc, ((void *)0), &set_hash_table);
  compute_available (cprop_pavloc, cprop_absaltered,
       cprop_avout, cprop_avin);
}
static struct reg_use_gcse reg_use_table[8];
static int reg_use_count;
static void
find_used_regs (rtx *xptr, void *data )
{
  int i, j;
  enum rtx_code code;
  const char *fmt;
  rtx x = *xptr;
 repeat:
  if (x == 0)
    return;
  code = ((enum rtx_code) (x)->code);
  if ((((enum rtx_code) (x)->code) == REG))
    {
      if (reg_use_count == 8)
 return;
      reg_use_table[reg_use_count].reg_rtx = x;
      reg_use_count++;
    }
  for (i = (rtx_length[(int) (code)]) - 1, fmt = (rtx_format[(int) (code)]); i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   if (i == 0)
     {
       x = (((x)->u.fld[0]).rtx1);
       goto repeat;
     }
   find_used_regs (&(((x)->u.fld[i]).rtx1), data);
 }
      else if (fmt[i] == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   find_used_regs (&(((((x)->u.fld[i]).rtvec1))->elem[j]), data);
    }
}
static int
try_replace_reg (rtx from, rtx to, rtx insn)
{
  rtx note = find_reg_equal_equiv_note (insn);
  rtx src = 0;
  int success = 0;
  rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  validate_replace_src_group (from, to, insn);
  if (num_changes_pending () && apply_change_group ())
    success = 1;
  if (success && set && ((rtx_class[(int) (((enum rtx_code) (to)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (to)->code) == CONST_VECTOR))
    {
      src = simplify_rtx ((((set)->u.fld[1]).rtx1));
      if (src)
 validate_change (insn, &(((set)->u.fld[1]).rtx1), src, 0);
    }
  if (note != 0)
    (((note)->u.fld[0]).rtx1) = simplify_replace_rtx ((((note)->u.fld[0]).rtx1), from, to);
  if (!success && set && reg_mentioned_p (from, (((set)->u.fld[1]).rtx1)))
    {
      src = simplify_replace_rtx ((((set)->u.fld[1]).rtx1), from, to);
      if (!rtx_equal_p (src, (((set)->u.fld[1]).rtx1))
   && validate_change (insn, &(((set)->u.fld[1]).rtx1), src, 0))
 success = 1;
      if (!success && note == 0 && set != 0
   && ((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) != ZERO_EXTRACT
   && ((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) != SIGN_EXTRACT)
 note = set_unique_reg_note (insn, REG_EQUAL, copy_rtx (src));
    }
  if (note && (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG))
    remove_note (insn, note);
  return success;
}
static struct expr *
find_avail_set (int regno, rtx insn)
{
  struct expr *set1 = 0;
  while (1)
    {
      rtx src;
      struct expr *set = lookup_set (regno, &set_hash_table);
      while (set)
 {
   if (((cprop_avin[((((insn)->u.fld[3]).bb)->index + 0)])->elms [(set->bitmap_index) / ((unsigned) (8 * 4))] >> (set->bitmap_index) % ((unsigned) (8 * 4)) & 1))
     break;
   set = next_set (regno, set);
 }
      if (set == 0)
 break;
      if (((enum rtx_code) (set->expr)->code) != SET)
 abort ();
      src = (((set->expr)->u.fld[1]).rtx1);
      if (gcse_constant_p (src) || oprs_not_set_p (src, insn))
 set1 = set;
      if (! (((enum rtx_code) (src)->code) == REG))
 break;
      regno = (((src)->u.fld[0]).rtuint);
    }
  return set1;
}
static int
cprop_jump (basic_block bb, rtx setcc, rtx jump, rtx from, rtx src)
{
  rtx new, set_src, note_src;
  rtx set = pc_set (jump);
  rtx note = find_reg_equal_equiv_note (jump);
  if (note)
    {
      note_src = (((note)->u.fld[0]).rtx1);
      if (((enum rtx_code) (note_src)->code) == EXPR_LIST)
 note_src = (rtx) 0;
    }
  else note_src = (rtx) 0;
  set_src = note_src ? note_src : (((set)->u.fld[1]).rtx1);
  if (setcc != (rtx) 0
      && !modified_between_p (from, setcc, jump)
      && !modified_between_p (src, setcc, jump))
    {
      rtx setcc_src;
      rtx setcc_set = (((((enum rtx_code) (setcc)->code) == INSN) || (((enum rtx_code) (setcc)->code) == JUMP_INSN) || (((enum rtx_code) (setcc)->code) == CALL_INSN)) ? (((enum rtx_code) ((((setcc)->u.fld[5]).rtx1))->code) == SET ? (((setcc)->u.fld[5]).rtx1) : single_set_2 (setcc, (((setcc)->u.fld[5]).rtx1))) : (rtx) 0);
      rtx setcc_note = find_reg_equal_equiv_note (setcc);
      setcc_src = (setcc_note && ((enum rtx_code) ((((setcc_note)->u.fld[0]).rtx1))->code) != EXPR_LIST)
  ? (((setcc_note)->u.fld[0]).rtx1) : (((setcc_set)->u.fld[1]).rtx1);
      set_src = simplify_replace_rtx (set_src, (((setcc_set)->u.fld[0]).rtx1),
          setcc_src);
    }
  else
    setcc = (rtx) 0;
  new = simplify_replace_rtx (set_src, from, src);
  if (rtx_equal_p (new, (((set)->u.fld[1]).rtx1)))
    return 0;
  if (new == (global_rtl[GR_PC]))
    delete_insn (jump);
  else
    {
      if (setcc && modified_in_p (new, setcc))
 return 0;
      if (! validate_change (jump, &(((set)->u.fld[1]).rtx1), new, 0))
 {
   if (!rtx_equal_p (new, note_src))
     set_unique_reg_note (jump, REG_EQUAL, copy_rtx (new));
   return 0;
 }
      if (note_src)
 remove_note (jump, note);
      if (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == LABEL_REF)
 emit_barrier_after (jump);
     }
  run_jump_opt_after_gcse = 1;
  const_prop_count++;
  if (gcse_file != ((void *)0))
    {
      fprintf (gcse_file,
        "CONST-PROP: Replacing reg %d in jump_insn %d with constant ",
        (((from)->u.fld[0]).rtuint), (((jump)->u.fld[0]).rtint));
      print_rtl (gcse_file, src);
      fprintf (gcse_file, "\n");
    }
  purge_dead_edges (bb);
  return 1;
}
static unsigned char
constprop_register (rtx insn, rtx from, rtx to, int alter_jumps)
{
  rtx sset;
  if (alter_jumps
      && (sset = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != ((void *)0)
      && (((insn)->u.fld[2]).rtx1)
      && any_condjump_p ((((insn)->u.fld[2]).rtx1)) && onlyjump_p ((((insn)->u.fld[2]).rtx1)))
    {
      rtx dest = (((sset)->u.fld[0]).rtx1);
      if (((((enum rtx_code) (dest)->code) == REG) || ((dest) ? 0 : 0))
   && cprop_jump ((((insn)->u.fld[3]).bb), insn, (((insn)->u.fld[2]).rtx1), from, to))
 return 1;
    }
  if (((enum rtx_code) (insn)->code) == INSN
      && try_replace_reg (from, to, insn))
    return 1;
  else if (alter_jumps && any_condjump_p (insn) && onlyjump_p (insn))
    return cprop_jump ((((insn)->u.fld[3]).bb), ((void *)0), insn, from, to);
  return 0;
}
static int
cprop_insn (rtx insn, int alter_jumps)
{
  struct reg_use_gcse *reg_used;
  int changed = 0;
  rtx note;
  if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return 0;
  reg_use_count = 0;
  note_uses (&(((insn)->u.fld[5]).rtx1), find_used_regs, ((void *)0));
  note = find_reg_equal_equiv_note (insn);
  if (note)
    find_used_regs (&(((note)->u.fld[0]).rtx1), ((void *)0));
  for (reg_used = &reg_use_table[0]; reg_use_count > 0;
       reg_used++, reg_use_count--)
    {
      unsigned int regno = (((reg_used->reg_rtx)->u.fld[0]).rtuint);
      rtx pat, src;
      struct expr *set;
      if (regno >= max_gcse_regno)
 continue;
      if (! oprs_not_set_p (reg_used->reg_rtx, insn))
 continue;
      set = find_avail_set (regno, insn);
      if (! set)
 continue;
      pat = set->expr;
      if (((enum rtx_code) (pat)->code) != SET)
 abort ();
      src = (((pat)->u.fld[1]).rtx1);
      if (gcse_constant_p (src))
 {
          if (constprop_register (insn, reg_used->reg_rtx, src, alter_jumps))
     {
       changed = 1;
       const_prop_count++;
       if (gcse_file != ((void *)0))
  {
    fprintf (gcse_file, "GLOBAL CONST-PROP: Replacing reg %d in ", regno);
    fprintf (gcse_file, "insn %d with constant ", (((insn)->u.fld[0]).rtint));
    print_rtl (gcse_file, src);
    fprintf (gcse_file, "\n");
  }
       if ((((insn))->volatil))
  return 1;
     }
 }
      else if ((((enum rtx_code) (src)->code) == REG)
        && (((src)->u.fld[0]).rtuint) >= 53
        && (((src)->u.fld[0]).rtuint) != regno)
 {
   if (try_replace_reg (reg_used->reg_rtx, src, insn))
     {
       changed = 1;
       copy_prop_count++;
       if (gcse_file != ((void *)0))
  {
    fprintf (gcse_file, "GLOBAL COPY-PROP: Replacing reg %d in insn %d",
      regno, (((insn)->u.fld[0]).rtint));
    fprintf (gcse_file, " with reg %d\n", (((src)->u.fld[0]).rtuint));
  }
     }
 }
    }
  return changed;
}
static void
local_cprop_find_used_regs (rtx *xptr, void *data)
{
  rtx x = *xptr;
  if (x == 0)
    return;
  switch (((enum rtx_code) (x)->code))
    {
    case ZERO_EXTRACT:
    case SIGN_EXTRACT:
    case STRICT_LOW_PART:
      return;
    case PRE_DEC:
    case PRE_INC:
    case POST_DEC:
    case POST_INC:
    case PRE_MODIFY:
    case POST_MODIFY:
      return;
    case SUBREG:
      if (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8)) > (8 * (0 ? 8 : 4)))
 return;
      break;
    default:
      break;
    }
  find_used_regs (xptr, data);
}
static unsigned char
do_local_cprop (rtx x, rtx insn, int alter_jumps, rtx *libcall_sp)
{
  rtx newreg = ((void *)0), newcnst = ((void *)0);
  if ((((enum rtx_code) (x)->code) == REG)
      && ((((x)->u.fld[0]).rtuint) >= 53
          || (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE
       && asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)))
    {
      cselib_val *val = cselib_lookup (x, ((enum machine_mode) (x)->mode), 0);
      struct elt_loc_list *l;
      if (!val)
 return 0;
      for (l = val->locs; l; l = l->next)
 {
   rtx this_rtx = l->loc;
   rtx note;
   if (l->in_libcall)
     continue;
   if (gcse_constant_p (this_rtx))
     newcnst = this_rtx;
   if ((((enum rtx_code) (this_rtx)->code) == REG) && (((this_rtx)->u.fld[0]).rtuint) >= 53
       && (!(note = find_reg_note (l->setting_insn, REG_EQUIV, (rtx) 0))
    || ! (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == MEM)))
     newreg = this_rtx;
 }
      if (newcnst && constprop_register (insn, x, newcnst, alter_jumps))
 {
   if (!adjust_libcall_notes (x, newcnst, insn, libcall_sp))
     abort ();
   if (gcse_file != ((void *)0))
     {
       fprintf (gcse_file, "LOCAL CONST-PROP: Replacing reg %d in ",
         (((x)->u.fld[0]).rtuint));
       fprintf (gcse_file, "insn %d with constant ",
         (((insn)->u.fld[0]).rtint));
       print_rtl (gcse_file, newcnst);
       fprintf (gcse_file, "\n");
     }
   const_prop_count++;
   return 1;
 }
      else if (newreg && newreg != x && try_replace_reg (x, newreg, insn))
 {
   adjust_libcall_notes (x, newreg, insn, libcall_sp);
   if (gcse_file != ((void *)0))
     {
       fprintf (gcse_file,
         "LOCAL COPY-PROP: Replacing reg %d in insn %d",
         (((x)->u.fld[0]).rtuint), (((insn)->u.fld[0]).rtint));
       fprintf (gcse_file, " with reg %d\n", (((newreg)->u.fld[0]).rtuint));
     }
   copy_prop_count++;
   return 1;
 }
    }
  return 0;
}
static unsigned char
adjust_libcall_notes (rtx oldreg, rtx newval, rtx insn, rtx *libcall_sp)
{
  rtx end;
  while ((end = *libcall_sp++))
    {
      rtx note = find_reg_equal_equiv_note (end);
      if (! note)
 continue;
      if ((((enum rtx_code) (newval)->code) == REG))
 {
   if (reg_set_between_p (newval, (((insn)->u.fld[1]).rtx1), end))
     {
       do
  {
    note = find_reg_equal_equiv_note (end);
    if (! note)
      continue;
    if (reg_mentioned_p (newval, (((note)->u.fld[0]).rtx1)))
      return 0;
  }
       while ((end = *libcall_sp++));
       return 1;
     }
 }
      (((note)->u.fld[0]).rtx1) = replace_rtx ((((note)->u.fld[0]).rtx1), oldreg, newval);
      insn = end;
    }
  return 1;
}
static void
local_cprop_pass (int alter_jumps)
{
  rtx insn;
  struct reg_use_gcse *reg_used;
  rtx libcall_stack[9 + 1], *libcall_sp;
  unsigned char changed = 0;
  cselib_init (0);
  libcall_sp = &libcall_stack[9];
  *libcall_sp = 0;
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   rtx note = find_reg_note (insn, REG_LIBCALL, (rtx) 0);
   if (note)
     {
       if (libcall_sp == libcall_stack)
  abort ();
       *--libcall_sp = (((note)->u.fld[0]).rtx1);
     }
   note = find_reg_note (insn, REG_RETVAL, (rtx) 0);
   if (note)
     libcall_sp++;
   note = find_reg_equal_equiv_note (insn);
   do
     {
       reg_use_count = 0;
       note_uses (&(((insn)->u.fld[5]).rtx1), local_cprop_find_used_regs, ((void *)0));
       if (note)
  local_cprop_find_used_regs (&(((note)->u.fld[0]).rtx1), ((void *)0));
       for (reg_used = &reg_use_table[0]; reg_use_count > 0;
     reg_used++, reg_use_count--)
  if (do_local_cprop (reg_used->reg_rtx, insn, alter_jumps,
      libcall_sp))
    {
      changed = 1;
      break;
    }
       if ((((insn))->volatil))
  break;
     }
   while (reg_use_count);
 }
      cselib_process_insn (insn);
    }
  cselib_finish ();
  if (changed && alter_jumps)
    {
      delete_unreachable_blocks ();
      free_reg_set_mem ();
      alloc_reg_set_mem (max_reg_num ());
      compute_sets (get_insns ());
    }
}
static int
cprop (int alter_jumps)
{
  int changed;
  basic_block bb;
  rtx insn;
  if (ENTRY_BLOCK_PTR->next_bb == EXIT_BLOCK_PTR)
    {
      if (gcse_file != ((void *)0))
 fprintf (gcse_file, "\n");
      return 0;
    }
  changed = 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      reset_opr_set_tables ();
      for (insn = (bb)->head_;
    insn != ((void *)0) && insn != ((((bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
   {
     changed |= cprop_insn (insn, alter_jumps);
     if (! (((enum rtx_code) (insn)->code) == NOTE))
       mark_oprs_set (insn);
   }
    }
  if (gcse_file != ((void *)0))
    fprintf (gcse_file, "\n");
  return changed;
}
rtx
fis_get_condition (rtx jump)
{
  rtx cond, set, tmp, insn, earliest;
  unsigned char reverse;
  if (! any_condjump_p (jump))
    return (rtx) 0;
  set = pc_set (jump);
  cond = ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
  reverse = (((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->code) == LABEL_REF
      && (((((((((set)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->u.fld[0]).rtx1) == (((jump)->u.fld[9]).rtx1));
  tmp = canonicalize_condition (jump, cond, reverse, &earliest, (rtx) 0,
    0);
  if (!tmp)
    return (rtx) 0;
  for (insn = earliest; insn != jump; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && modified_in_p (tmp, insn))
      break;
  if (insn == jump)
    return tmp;
  tmp = (((tmp)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (tmp)->code) == REG) || mode_class[((enum machine_mode) (tmp)->mode)] != MODE_INT)
    return (rtx) 0;
  tmp = canonicalize_condition (jump, cond, reverse, &earliest, tmp,
    0);
  if (!tmp)
    return (rtx) 0;
  for (insn = earliest; insn != jump; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && modified_in_p (tmp, insn))
      return (rtx) 0;
  return tmp;
}
static unsigned char
implicit_set_cond_p (rtx cond)
{
  enum machine_mode mode = ((enum machine_mode) ((((cond)->u.fld[0]).rtx1))->mode);
  rtx cst = (((cond)->u.fld[1]).rtx1);
  if ((((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations))
    {
      if (((enum rtx_code) (cst)->code) == CONST_DOUBLE)
 {
   struct real_value d;
   memcpy (&(d), &(((cst))->u.hwint[0]), sizeof (struct real_value));
   if (real_compare (EQ_EXPR, &(d), &(dconst0)))
     return 0;
 }
      else
 return 0;
    }
  return gcse_constant_p (cst);
}
static void
find_implicit_sets (void)
{
  basic_block bb, dest;
  unsigned int count;
  rtx cond, new;
  count = 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (bb->succ && bb->succ->succ_next)
      {
 cond = fis_get_condition ((bb)->end_);
 if (cond
     && (((enum rtx_code) (cond)->code) == EQ || ((enum rtx_code) (cond)->code) == NE)
     && (((enum rtx_code) ((((cond)->u.fld[0]).rtx1))->code) == REG)
     && ((((((cond)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53
     && implicit_set_cond_p (cond))
   {
     dest = ((enum rtx_code) (cond)->code) == EQ ? ((bb)->succ->flags & 1 ? (bb)->succ->succ_next : (bb)->succ)->dest
      : ((bb)->succ->flags & 1 ? (bb)->succ : (bb)->succ->succ_next)->dest;
     if (dest && ! dest->pred->pred_next
  && dest != EXIT_BLOCK_PTR)
       {
  new = gen_rtx_fmt_ee (SET, (VOIDmode), ((((cond)->u.fld[0]).rtx1)), ((((cond)->u.fld[1]).rtx1)))
                         ;
  implicit_sets[dest->index] = new;
  if (gcse_file)
    {
      fprintf(gcse_file, "Implicit set of reg %d in ",
       ((((((cond)->u.fld[0]).rtx1))->u.fld[0]).rtuint));
      fprintf(gcse_file, "basic block %d\n", dest->index);
    }
  count++;
       }
   }
      }
  if (gcse_file)
    fprintf (gcse_file, "Found %d implicit sets\n", count);
}
static int
one_cprop_pass (int pass, int cprop_jumps, int bypass_jumps)
{
  int changed = 0;
  const_prop_count = 0;
  copy_prop_count = 0;
  local_cprop_pass (cprop_jumps);
  implicit_sets = xcalloc (last_basic_block, sizeof (rtx));
  find_implicit_sets ();
  alloc_hash_table (max_cuid, &set_hash_table, 1);
  compute_hash_table (&set_hash_table);
  free (implicit_sets);
  implicit_sets = ((void *)0);
  if (gcse_file)
    dump_hash_table (gcse_file, "SET", &set_hash_table);
  if (set_hash_table.n_elems > 0)
    {
      alloc_cprop_mem (last_basic_block, set_hash_table.n_elems);
      compute_cprop_data ();
      changed = cprop (cprop_jumps);
      if (bypass_jumps)
 changed |= bypass_conditional_jumps ();
      free_cprop_mem ();
    }
  free_hash_table (&set_hash_table);
  if (gcse_file)
    {
      fprintf (gcse_file, "CPROP of %s, pass %d: %d bytes needed, ",
        current_function_name (), pass, bytes_used);
      fprintf (gcse_file, "%d const props, %d copy props\n\n",
        const_prop_count, copy_prop_count);
    }
  if (changed && cprop_jumps)
    delete_unreachable_blocks ();
  return changed;
}
static int bypass_last_basic_block;
static struct expr *
find_bypass_set (int regno, int bb)
{
  struct expr *result = 0;
  for (;;)
    {
      rtx src;
      struct expr *set = lookup_set (regno, &set_hash_table);
      while (set)
 {
   if (((cprop_avout[bb])->elms [(set->bitmap_index) / ((unsigned) (8 * 4))] >> (set->bitmap_index) % ((unsigned) (8 * 4)) & 1))
     break;
   set = next_set (regno, set);
 }
      if (set == 0)
 break;
      if (((enum rtx_code) (set->expr)->code) != SET)
 abort ();
      src = (((set->expr)->u.fld[1]).rtx1);
      if (gcse_constant_p (src))
 result = set;
      if (! (((enum rtx_code) (src)->code) == REG))
 break;
      regno = (((src)->u.fld[0]).rtuint);
    }
  return result;
}
static unsigned char
reg_killed_on_edge (rtx reg, edge e)
{
  rtx insn;
  for (insn = e->insns.r; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && reg_set_p (reg, insn))
      return 1;
  return 0;
}
static int
bypass_block (basic_block bb, rtx setcc, rtx jump)
{
  rtx insn, note;
  edge e, enext, edest;
  int i, change;
  int may_be_loop_header;
  insn = (setcc != ((void *)0)) ? setcc : jump;
  reg_use_count = 0;
  note_uses (&(((insn)->u.fld[5]).rtx1), find_used_regs, ((void *)0));
  note = find_reg_equal_equiv_note (insn);
  if (note)
    find_used_regs (&(((note)->u.fld[0]).rtx1), ((void *)0));
  may_be_loop_header = 0;
  for (e = bb->pred; e; e = e->pred_next)
    if (e->flags & 32)
      {
 may_be_loop_header = 1;
 break;
      }
  change = 0;
  for (e = bb->pred; e; e = enext)
    {
      enext = e->pred_next;
      if (e->flags & (2 | 4 | 8))
 continue;
      if (e->src->index >= bypass_last_basic_block)
 continue;
      if (may_be_loop_header
   && !(e->flags & 32))
 continue;
      for (i = 0; i < reg_use_count; i++)
 {
   struct reg_use_gcse *reg_used = &reg_use_table[i];
   unsigned int regno = (((reg_used->reg_rtx)->u.fld[0]).rtuint);
   basic_block dest, old_dest;
   struct expr *set;
   rtx src, new;
   if (regno >= max_gcse_regno)
     continue;
   set = find_bypass_set (regno, e->src->index);
   if (! set)
     continue;
   if (e->insns.r && reg_killed_on_edge (reg_used->reg_rtx, e))
     continue;
   src = (((pc_set (jump))->u.fld[1]).rtx1);
   if (setcc != ((void *)0))
       src = simplify_replace_rtx (src,
       ((((((setcc)->u.fld[5]).rtx1))->u.fld[0]).rtx1),
       ((((((setcc)->u.fld[5]).rtx1))->u.fld[1]).rtx1));
   new = simplify_replace_rtx (src, reg_used->reg_rtx,
          (((set->expr)->u.fld[1]).rtx1));
   if (new == (global_rtl[GR_PC]))
     {
       edest = ((bb)->succ->flags & 1 ? (bb)->succ : (bb)->succ->succ_next);
       dest = edest->insns.r ? ((void *)0) : edest->dest;
     }
   else if (((enum rtx_code) (new)->code) == LABEL_REF)
     {
       dest = ((((((new)->u.fld[0]).rtx1))->u.fld[3]).bb);
       for (edest = bb->succ; edest; edest = edest->succ_next)
  if (edest->dest == dest && edest->insns.r)
    {
      dest = ((void *)0);
      break;
    }
     }
   else
     dest = ((void *)0);
   if (dest && setcc && !((((((((setcc)->u.fld[5]).rtx1))->u.fld[0]).rtx1)) ? 0 : 0))
     {
       edge e2;
       for (e2 = e->src->succ; e2; e2 = e2->succ_next)
  if (e2->dest == dest)
    {
      dest = ((void *)0);
      break;
    }
     }
   old_dest = e->dest;
   if (dest != ((void *)0)
       && dest != old_dest
       && dest != EXIT_BLOCK_PTR)
            {
       redirect_edge_and_branch_force (e, dest);
       if (setcc)
  {
    rtx pat = (((setcc)->u.fld[5]).rtx1);
    if (!(((((pat)->u.fld[0]).rtx1)) ? 0 : 0))
      insert_insn_on_edge (copy_insn (pat), e);
  }
       if (gcse_file != ((void *)0))
  {
    fprintf (gcse_file, "JUMP-BYPASS: Proved reg %d in jump_insn %d equals constant ",
      regno, (((jump)->u.fld[0]).rtint));
    print_rtl (gcse_file, (((set->expr)->u.fld[1]).rtx1));
    fprintf (gcse_file, "\nBypass edge from %d->%d to %d\n",
      e->src->index, old_dest->index, dest->index);
  }
       change = 1;
       break;
     }
 }
    }
  return change;
}
static int
bypass_conditional_jumps (void)
{
  basic_block bb;
  int changed;
  rtx setcc;
  rtx insn;
  rtx dest;
  if (ENTRY_BLOCK_PTR->next_bb == EXIT_BLOCK_PTR)
    return 0;
  bypass_last_basic_block = last_basic_block;
  mark_dfs_back_edges ();
  changed = 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      if (bb->pred && bb->pred->pred_next)
 {
   setcc = (rtx) 0;
   for (insn = (bb)->head_;
        insn != ((void *)0) && insn != ((((bb)->end_)->u.fld[2]).rtx1);
        insn = (((insn)->u.fld[2]).rtx1))
     if (((enum rtx_code) (insn)->code) == INSN)
       {
  if (setcc)
    break;
  if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != SET)
    break;
  dest = ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1);
  if ((((enum rtx_code) (dest)->code) == REG) || ((dest) ? 0 : 0))
    setcc = insn;
  else
    break;
       }
     else if ((((enum rtx_code) (insn)->code) == JUMP_INSN))
       {
  if ((any_condjump_p (insn) || computed_jump_p (insn))
      && onlyjump_p (insn))
    changed |= bypass_block (bb, setcc, insn);
  break;
       }
     else if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
       break;
 }
    }
  if (changed)
    commit_edge_insertions();
  return changed;
}
static sbitmap *transp;
static sbitmap *transpout;
static sbitmap *comp;
static sbitmap *antloc;
static sbitmap *pre_optimal;
static sbitmap *pre_redundant;
static sbitmap *pre_insert_map;
static sbitmap *pre_delete_map;
static struct edge_list *edge_list;
static sbitmap pre_redundant_insns;
static void
alloc_pre_mem (int n_blocks, int n_exprs)
{
  transp = sbitmap_vector_alloc (n_blocks, n_exprs);
  comp = sbitmap_vector_alloc (n_blocks, n_exprs);
  antloc = sbitmap_vector_alloc (n_blocks, n_exprs);
  pre_optimal = ((void *)0);
  pre_redundant = ((void *)0);
  pre_insert_map = ((void *)0);
  pre_delete_map = ((void *)0);
  ae_kill = sbitmap_vector_alloc (n_blocks, n_exprs);
}
static void
free_pre_mem (void)
{
  free(transp);
  free(comp);
  if (pre_optimal)
    free(pre_optimal);
  if (pre_redundant)
    free(pre_redundant);
  if (pre_insert_map)
    free(pre_insert_map);
  if (pre_delete_map)
    free(pre_delete_map);
  transp = comp = ((void *)0);
  pre_optimal = pre_redundant = pre_insert_map = pre_delete_map = ((void *)0);
}
static void
compute_pre_data (void)
{
  sbitmap trapping_expr;
  basic_block bb;
  unsigned int ui;
  compute_local_properties (transp, comp, antloc, &expr_hash_table);
  sbitmap_vector_zero (ae_kill, last_basic_block);
  trapping_expr = sbitmap_alloc (expr_hash_table.n_elems);
  sbitmap_zero (trapping_expr);
  for (ui = 0; ui < expr_hash_table.size; ui++)
    {
      struct expr *e;
      for (e = expr_hash_table.table[ui]; e != ((void *)0); e = e->next_same_hash)
 if (may_trap_p (e->expr))
   ((trapping_expr)->elms [(e->bitmap_index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (e->bitmap_index) % ((unsigned) (8 * 4)));
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e;
      for (e = bb->pred; e ; e = e->pred_next)
 if (e->flags & 2)
   {
     sbitmap_difference (antloc[bb->index], antloc[bb->index], trapping_expr);
     sbitmap_difference (transp[bb->index], transp[bb->index], trapping_expr);
     break;
   }
      sbitmap_a_or_b (ae_kill[bb->index], transp[bb->index], comp[bb->index]);
      sbitmap_not (ae_kill[bb->index], ae_kill[bb->index]);
    }
  edge_list = pre_edge_lcm (gcse_file, expr_hash_table.n_elems, transp, comp, antloc,
       ae_kill, &pre_insert_map, &pre_delete_map);
  free(antloc);
  antloc = ((void *)0);
  free(ae_kill);
  ae_kill = ((void *)0);
  free(trapping_expr);
}
static int
pre_expr_reaches_here_p_work (basic_block occr_bb, struct expr *expr, basic_block bb, char *visited)
{
  edge pred;
  for (pred = bb->pred; pred != ((void *)0); pred = pred->pred_next)
    {
      basic_block pred_bb = pred->src;
      if (pred->src == ENTRY_BLOCK_PTR
   || visited[pred_bb->index])
 ;
      else if (((comp[pred_bb->index])->elms [(expr->bitmap_index) / ((unsigned) (8 * 4))] >> (expr->bitmap_index) % ((unsigned) (8 * 4)) & 1))
 {
   if (occr_bb == pred_bb)
     return 1;
   visited[pred_bb->index] = 1;
 }
      else if (! ((transp[pred_bb->index])->elms [(expr->bitmap_index) / ((unsigned) (8 * 4))] >> (expr->bitmap_index) % ((unsigned) (8 * 4)) & 1))
 visited[pred_bb->index] = 1;
      else
 {
   visited[pred_bb->index] = 1;
   if (pre_expr_reaches_here_p_work (occr_bb, expr, pred_bb, visited))
     return 1;
 }
    }
  return 0;
}
static int
pre_expr_reaches_here_p (basic_block occr_bb, struct expr *expr, basic_block bb)
{
  int rval;
  char *visited = xcalloc (last_basic_block, 1);
  rval = pre_expr_reaches_here_p_work (occr_bb, expr, bb, visited);
  free (visited);
  return rval;
}
static rtx
process_insert_insn (struct expr *expr)
{
  rtx reg = expr->reaching_reg;
  rtx exp = copy_rtx (expr->expr);
  rtx pat;
  start_sequence ();
  if (general_operand (exp, ((enum machine_mode) (reg)->mode)))
    emit_move_insn (reg, exp);
  else if (insn_invalid_p (emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (reg), (exp)))))
    abort ();
  pat = get_insns ();
  end_sequence ();
  return pat;
}
static void
insert_insn_end_bb (struct expr *expr, basic_block bb, int pre)
{
  rtx insn = (bb)->end_;
  rtx new_insn;
  rtx reg = expr->reaching_reg;
  int regno = (((reg)->u.fld[0]).rtuint);
  rtx pat, pat_end;
  pat = process_insert_insn (expr);
  if (pat == (rtx) 0 || ! ((((enum rtx_code) (pat)->code) == INSN) || (((enum rtx_code) (pat)->code) == JUMP_INSN) || (((enum rtx_code) (pat)->code) == CALL_INSN)))
    abort ();
  pat_end = pat;
  while ((((pat_end)->u.fld[2]).rtx1) != (rtx) 0)
    pat_end = (((pat_end)->u.fld[2]).rtx1);
  if ((((enum rtx_code) (insn)->code) == JUMP_INSN)
      || (((enum rtx_code) (insn)->code) == INSN
   && (bb->succ->succ_next || (bb->succ->flags & 2))))
    {
      if (((enum rtx_code) (insn)->code) == INSN && pre
   && !((antloc[bb->index])->elms [(expr->bitmap_index) / ((unsigned) (8 * 4))] >> (expr->bitmap_index) % ((unsigned) (8 * 4)) & 1)
   && !((transp[bb->index])->elms [(expr->bitmap_index) / ((unsigned) (8 * 4))] >> (expr->bitmap_index) % ((unsigned) (8 * 4)) & 1))
 abort ();
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_VEC
   || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC)
 insn = prev_real_insn (insn);
      new_insn = emit_insn_before (pat, insn);
    }
  else if ((((enum rtx_code) (insn)->code) == CALL_INSN)
    && (bb->succ->succ_next || (bb->succ->flags & 2)))
    {
      if (pre
   && !((antloc[bb->index])->elms [(expr->bitmap_index) / ((unsigned) (8 * 4))] >> (expr->bitmap_index) % ((unsigned) (8 * 4)) & 1)
   && !((transp[bb->index])->elms [(expr->bitmap_index) / ((unsigned) (8 * 4))] >> (expr->bitmap_index) % ((unsigned) (8 * 4)) & 1))
 abort ();
      insn = find_first_parameter_load (insn, (bb)->head_);
      while ((((enum rtx_code) (insn)->code) == CODE_LABEL)
      || (((enum rtx_code) (insn)->code) == NOTE && (((insn)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK))
 insn = (((insn)->u.fld[2]).rtx1);
      new_insn = emit_insn_before (pat, insn);
    }
  else
    new_insn = emit_insn_after (pat, insn);
  while (1)
    {
      if (((((enum rtx_code) (pat)->code) == INSN) || (((enum rtx_code) (pat)->code) == JUMP_INSN) || (((enum rtx_code) (pat)->code) == CALL_INSN)))
 {
   add_label_notes_gcse ((((pat)->u.fld[5]).rtx1), new_insn);
   note_stores ((((pat)->u.fld[5]).rtx1), record_set_info, pat);
 }
      if (pat == pat_end)
 break;
      pat = (((pat)->u.fld[2]).rtx1);
    }
  gcse_create_count++;
  if (gcse_file)
    {
      fprintf (gcse_file, "PRE/HOIST: end of bb %d, insn %d, ",
        bb->index, (((new_insn)->u.fld[0]).rtint));
      fprintf (gcse_file, "copying expression %d to reg %d\n",
        expr->bitmap_index, regno);
    }
}
static int
pre_edge_insert (struct edge_list *edge_list, struct expr **index_map)
{
  int e, i, j, num_edges, set_size, did_insert = 0;
  sbitmap *inserted;
  set_size = pre_insert_map[0]->size;
  num_edges = ((edge_list)->num_edges);
  inserted = sbitmap_vector_alloc (num_edges, expr_hash_table.n_elems);
  sbitmap_vector_zero (inserted, num_edges);
  for (e = 0; e < num_edges; e++)
    {
      int indx;
      basic_block bb = ((edge_list)->index_to_edge[(e)]->src);
      for (i = indx = 0; i < set_size; i++, indx += ((unsigned) (8 * 4)))
 {
   unsigned long insert = pre_insert_map[e]->elms[i];
   for (j = indx; insert && j < (int) expr_hash_table.n_elems; j++, insert >>= 1)
     if ((insert & 1) != 0 && index_map[j]->reaching_reg != (rtx) 0)
       {
  struct expr *expr = index_map[j];
  struct occr *occr;
  for (occr = expr->antic_occr; occr != ((void *)0); occr = occr->next)
    {
      if (! occr->deleted_p)
        continue;
      if (!((inserted[e])->elms [(j) / ((unsigned) (8 * 4))] >> (j) % ((unsigned) (8 * 4)) & 1))
        {
   rtx insn;
   edge eg = ((edge_list)->index_to_edge[(e)]);
   if ((eg->flags & 2) == 2)
     insert_insn_end_bb (index_map[j], bb, 0);
   else
     {
       insn = process_insert_insn (index_map[j]);
       insert_insn_on_edge (insn, eg);
     }
   if (gcse_file)
     {
       fprintf (gcse_file, "PRE/HOIST: edge (%d,%d), ",
         bb->index,
         ((edge_list)->index_to_edge[(e)]->dest)->index);
       fprintf (gcse_file, "copy expression %d\n",
         expr->bitmap_index);
     }
   update_ld_motion_stores (expr);
   ((inserted[e])->elms [(j) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (j) % ((unsigned) (8 * 4)));
   did_insert = 1;
   gcse_create_count++;
        }
    }
       }
 }
    }
  free(inserted);
  return did_insert;
}
static void
pre_insert_copy_insn (struct expr *expr, rtx insn)
{
  rtx reg = expr->reaching_reg;
  int regno = (((reg)->u.fld[0]).rtuint);
  int indx = expr->bitmap_index;
  rtx pat = (((insn)->u.fld[5]).rtx1);
  rtx set, new_insn;
  rtx old_reg;
  int i;
  if (((enum rtx_code) (pat)->code) == SET)
    set = pat;
  else if (((enum rtx_code) (pat)->code) == PARALLEL)
    {
      set = (rtx) 0;
      for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx x = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (x)->code) == SET
       && expr_equiv_p ((((x)->u.fld[1]).rtx1), expr->expr))
     {
       set = x;
       break;
     }
 }
    }
  else
    abort ();
  if ((((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG))
    {
      old_reg = (((set)->u.fld[0]).rtx1);
      if (validate_change (insn, &(((set)->u.fld[0]).rtx1), reg, 0))
        {
          new_insn = gen_move_insn (old_reg, reg);
          new_insn = emit_insn_after (new_insn, insn);
          replace_one_set ((((old_reg)->u.fld[0]).rtuint), insn, new_insn);
          record_one_set (regno, insn);
        }
      else
        {
          new_insn = gen_move_insn (reg, old_reg);
          new_insn = emit_insn_after (new_insn, insn);
          record_one_set (regno, new_insn);
        }
    }
  else
    {
      old_reg = (((set)->u.fld[1]).rtx1);
      new_insn = gen_move_insn (reg, old_reg);
      if (validate_change (insn, &(((set)->u.fld[1]).rtx1), reg, 0))
        new_insn = emit_insn_before (new_insn, insn);
      else
        new_insn = emit_insn_after (new_insn, insn);
      record_one_set (regno, new_insn);
    }
  gcse_create_count++;
  if (gcse_file)
    fprintf (gcse_file,
      "PRE: bb %d, insn %d, copy expression %d in insn %d to reg %d\n",
       ((((insn)->u.fld[3]).bb)->index + 0), (((new_insn)->u.fld[0]).rtint), indx,
       (((insn)->u.fld[0]).rtint), regno);
}
static void
pre_insert_copies (void)
{
  unsigned int i, added_copy;
  struct expr *expr;
  struct occr *occr;
  struct occr *avail;
  for (i = 0; i < expr_hash_table.size; i++)
    for (expr = expr_hash_table.table[i]; expr != ((void *)0); expr = expr->next_same_hash)
      {
 if (expr->reaching_reg == ((void *)0))
   continue;
 added_copy = 0;
 for (occr = expr->antic_occr; occr != ((void *)0); occr = occr->next)
   {
     if (! occr->deleted_p)
       continue;
     for (avail = expr->avail_occr; avail != ((void *)0); avail = avail->next)
       {
  rtx insn = avail->insn;
  if (avail->copied_p)
    continue;
  if (((pre_redundant_insns)->elms [((uid_cuid[(((insn)->u.fld[0]).rtint)])) / ((unsigned) (8 * 4))] >> ((uid_cuid[(((insn)->u.fld[0]).rtint)])) % ((unsigned) (8 * 4)) & 1))
    continue;
  if (! pre_expr_reaches_here_p ((((avail->insn)->u.fld[3]).bb),
            expr,
            (((occr->insn)->u.fld[3]).bb)))
    continue;
                added_copy = 1;
  pre_insert_copy_insn (expr, insn);
  avail->copied_p = 1;
       }
   }
   if (added_copy)
            update_ld_motion_stores (expr);
      }
}
static rtx
gcse_emit_move_after (rtx src, rtx dest, rtx insn)
{
  rtx new;
  rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0), set2;
  rtx note;
  rtx eqv;
  new = emit_insn_after (gen_move_insn (dest, src), insn);
  set2 = (((((enum rtx_code) (new)->code) == INSN) || (((enum rtx_code) (new)->code) == JUMP_INSN) || (((enum rtx_code) (new)->code) == CALL_INSN)) ? (((enum rtx_code) ((((new)->u.fld[5]).rtx1))->code) == SET ? (((new)->u.fld[5]).rtx1) : single_set_2 (new, (((new)->u.fld[5]).rtx1))) : (rtx) 0);
  if (!set2 || !rtx_equal_p ((((set2)->u.fld[0]).rtx1), dest))
    return new;
  if ((note = find_reg_equal_equiv_note (insn)))
    eqv = (((note)->u.fld[0]).rtx1);
  else
    eqv = (((set)->u.fld[1]).rtx1);
  set_unique_reg_note (new, REG_EQUAL, copy_insn_1 (eqv));
  return new;
}
static int
pre_delete (void)
{
  unsigned int i;
  int changed;
  struct expr *expr;
  struct occr *occr;
  changed = 0;
  for (i = 0; i < expr_hash_table.size; i++)
    for (expr = expr_hash_table.table[i];
  expr != ((void *)0);
  expr = expr->next_same_hash)
      {
 int indx = expr->bitmap_index;
 for (occr = expr->antic_occr; occr != ((void *)0); occr = occr->next)
   {
     rtx insn = occr->insn;
     rtx set;
     basic_block bb = (((insn)->u.fld[3]).bb);
     if (((pre_delete_map[bb->index])->elms [(indx) / ((unsigned) (8 * 4))] >> (indx) % ((unsigned) (8 * 4)) & 1)
  && (set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != 0)
       {
  if (expr->reaching_reg == ((void *)0))
    expr->reaching_reg
      = gen_reg_rtx (((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode));
  gcse_emit_move_after (expr->reaching_reg, (((set)->u.fld[0]).rtx1), insn);
  delete_insn (insn);
  occr->deleted_p = 1;
  ((pre_redundant_insns)->elms [((uid_cuid[(((insn)->u.fld[0]).rtint)])) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << ((uid_cuid[(((insn)->u.fld[0]).rtint)])) % ((unsigned) (8 * 4)));
  changed = 1;
  gcse_subst_count++;
  if (gcse_file)
    {
      fprintf (gcse_file,
        "PRE: redundant insn %d (expression %d) in ",
          (((insn)->u.fld[0]).rtint), indx);
      fprintf (gcse_file, "bb %d, reaching reg is %d\n",
        bb->index, (((expr->reaching_reg)->u.fld[0]).rtuint));
    }
       }
   }
      }
  return changed;
}
static int
pre_gcse (void)
{
  unsigned int i;
  int did_insert, changed;
  struct expr **index_map;
  struct expr *expr;
  index_map = xcalloc (expr_hash_table.n_elems, sizeof (struct expr *));
  for (i = 0; i < expr_hash_table.size; i++)
    for (expr = expr_hash_table.table[i]; expr != ((void *)0); expr = expr->next_same_hash)
      index_map[expr->bitmap_index] = expr;
  pre_redundant_insns = sbitmap_alloc (max_cuid);
  sbitmap_zero (pre_redundant_insns);
  changed = pre_delete ();
  did_insert = pre_edge_insert (edge_list, index_map);
  pre_insert_copies ();
  if (did_insert)
    {
      commit_edge_insertions ();
      changed = 1;
    }
  free (index_map);
  free(pre_redundant_insns);
  return changed;
}
static int
one_pre_gcse_pass (int pass)
{
  int changed = 0;
  gcse_subst_count = 0;
  gcse_create_count = 0;
  alloc_hash_table (max_cuid, &expr_hash_table, 0);
  add_noreturn_fake_exit_edges ();
  if (flag_gcse_lm)
    compute_ld_motion_mems ();
  compute_hash_table (&expr_hash_table);
  trim_ld_motion_mems ();
  if (gcse_file)
    dump_hash_table (gcse_file, "Expression", &expr_hash_table);
  if (expr_hash_table.n_elems > 0)
    {
      alloc_pre_mem (last_basic_block, expr_hash_table.n_elems);
      compute_pre_data ();
      changed |= pre_gcse ();
      free_edge_list (edge_list);
      free_pre_mem ();
    }
  free_ldst_mems ();
  remove_fake_edges ();
  free_hash_table (&expr_hash_table);
  if (gcse_file)
    {
      fprintf (gcse_file, "\nPRE GCSE of %s, pass %d: %d bytes needed, ",
        current_function_name (), pass, bytes_used);
      fprintf (gcse_file, "%d substs, %d insns created\n",
        gcse_subst_count, gcse_create_count);
    }
  return changed;
}
static void
add_label_notes_gcse (rtx x, rtx insn)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  int i, j;
  const char *fmt;
  if (code == LABEL_REF && !(((x))->volatil))
    {
      (((insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ue (INSN_LIST, (REG_LABEL), ((((x)->u.fld[0]).rtx1)), ((((insn)->u.fld[8]).rtx1)))
                          ;
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CODE_LABEL))
 ((((((x)->u.fld[0]).rtx1))->u.fld[4]).rtint)++;
      return;
    }
  for (i = (rtx_length[(int) (code)]) - 1, fmt = (rtx_format[(int) (code)]); i >= 0; i--)
    {
      if (fmt[i] == 'e')
 add_label_notes_gcse ((((x)->u.fld[i]).rtx1), insn);
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   add_label_notes_gcse ((((((x)->u.fld[i]).rtvec1))->elem[j]), insn);
    }
}
static void
compute_transpout (void)
{
  basic_block bb;
  unsigned int i;
  struct expr *expr;
  sbitmap_vector_ones (transpout, last_basic_block);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      if (! (((enum rtx_code) ((bb)->end_)->code) == CALL_INSN))
 continue;
      for (i = 0; i < expr_hash_table.size; i++)
 for (expr = expr_hash_table.table[i]; expr ; expr = expr->next_same_hash)
   if ((((enum rtx_code) (expr->expr)->code) == MEM))
     {
       if (((enum rtx_code) ((((expr->expr)->u.fld[0]).rtx1))->code) == SYMBOL_REF
    && ((((((expr->expr)->u.fld[0]).rtx1)))->unchanging))
  continue;
       ((transpout[bb->index])->elms [(expr->bitmap_index) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (expr->bitmap_index) % ((unsigned) (8 * 4))));
     }
    }
}
static sbitmap *hoist_vbein;
static sbitmap *hoist_vbeout;
static sbitmap *hoist_exprs;
static void
alloc_code_hoist_mem (int n_blocks, int n_exprs)
{
  antloc = sbitmap_vector_alloc (n_blocks, n_exprs);
  transp = sbitmap_vector_alloc (n_blocks, n_exprs);
  comp = sbitmap_vector_alloc (n_blocks, n_exprs);
  hoist_vbein = sbitmap_vector_alloc (n_blocks, n_exprs);
  hoist_vbeout = sbitmap_vector_alloc (n_blocks, n_exprs);
  hoist_exprs = sbitmap_vector_alloc (n_blocks, n_exprs);
  transpout = sbitmap_vector_alloc (n_blocks, n_exprs);
}
static void
free_code_hoist_mem (void)
{
  free(antloc);
  free(transp);
  free(comp);
  free(hoist_vbein);
  free(hoist_vbeout);
  free(hoist_exprs);
  free(transpout);
  free_dominance_info (CDI_DOMINATORS);
}
static void
compute_code_hoist_vbeinout (void)
{
  int changed, passes;
  basic_block bb;
  sbitmap_vector_zero (hoist_vbeout, last_basic_block);
  sbitmap_vector_zero (hoist_vbein, last_basic_block);
  passes = 0;
  changed = 1;
  while (changed)
    {
      changed = 0;
      for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
 {
   changed |= sbitmap_a_or_b_and_c_cg (hoist_vbein[bb->index], antloc[bb->index],
           hoist_vbeout[bb->index], transp[bb->index]);
   if (bb->next_bb != EXIT_BLOCK_PTR)
     sbitmap_intersection_of_succs (hoist_vbeout[bb->index], hoist_vbein, bb->index);
 }
      passes++;
    }
  if (gcse_file)
    fprintf (gcse_file, "hoisting vbeinout computation: %d passes\n", passes);
}
static void
compute_code_hoist_data (void)
{
  compute_local_properties (transp, comp, antloc, &expr_hash_table);
  compute_transpout ();
  compute_code_hoist_vbeinout ();
  calculate_dominance_info (CDI_DOMINATORS);
  if (gcse_file)
    fprintf (gcse_file, "\n");
}
static int
hoist_expr_reaches_here_p (basic_block expr_bb, int expr_index, basic_block bb, char *visited)
{
  edge pred;
  int visited_allocated_locally = 0;
  if (visited == ((void *)0))
    {
      visited_allocated_locally = 1;
      visited = xcalloc (last_basic_block, 1);
    }
  for (pred = bb->pred; pred != ((void *)0); pred = pred->pred_next)
    {
      basic_block pred_bb = pred->src;
      if (pred->src == ENTRY_BLOCK_PTR)
 break;
      else if (pred_bb == expr_bb)
 continue;
      else if (visited[pred_bb->index])
 continue;
      else if (((comp[pred_bb->index])->elms [(expr_index) / ((unsigned) (8 * 4))] >> (expr_index) % ((unsigned) (8 * 4)) & 1))
 break;
      else if (! ((transp[pred_bb->index])->elms [(expr_index) / ((unsigned) (8 * 4))] >> (expr_index) % ((unsigned) (8 * 4)) & 1))
 break;
      else
 {
   visited[pred_bb->index] = 1;
   if (! hoist_expr_reaches_here_p (expr_bb, expr_index,
        pred_bb, visited))
     break;
 }
    }
  if (visited_allocated_locally)
    free (visited);
  return (pred == ((void *)0));
}
static void
hoist_code (void)
{
  basic_block bb, dominated;
  basic_block *domby;
  unsigned int domby_len;
  unsigned int i,j;
  struct expr **index_map;
  struct expr *expr;
  sbitmap_vector_zero (hoist_exprs, last_basic_block);
  index_map = xcalloc (expr_hash_table.n_elems, sizeof (struct expr *));
  for (i = 0; i < expr_hash_table.size; i++)
    for (expr = expr_hash_table.table[i]; expr != ((void *)0); expr = expr->next_same_hash)
      index_map[expr->bitmap_index] = expr;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      int found = 0;
      int insn_inserted_p;
      domby_len = get_dominated_by (CDI_DOMINATORS, bb, &domby);
      for (i = 0; i < hoist_vbeout[bb->index]->n_bits; i++)
 {
   int hoistable = 0;
   if (((hoist_vbeout[bb->index])->elms [(i) / ((unsigned) (8 * 4))] >> (i) % ((unsigned) (8 * 4)) & 1)
       && ((transpout[bb->index])->elms [(i) / ((unsigned) (8 * 4))] >> (i) % ((unsigned) (8 * 4)) & 1))
     {
       for (j = 0; j < domby_len; j++)
  {
    dominated = domby[j];
    if (bb == dominated)
      continue;
    if (!((antloc[dominated->index])->elms [(i) / ((unsigned) (8 * 4))] >> (i) % ((unsigned) (8 * 4)) & 1))
      continue;
    if (hoist_expr_reaches_here_p (bb, i, dominated, ((void *)0)))
      hoistable++;
  }
       if (hoistable > 1)
  {
    ((hoist_exprs[bb->index])->elms [(i) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (i) % ((unsigned) (8 * 4)));
    found = 1;
  }
     }
 }
      if (! found)
        {
   free (domby);
 continue;
 }
      for (i = 0; i < hoist_exprs[bb->index]->n_bits; i++)
 {
   insn_inserted_p = 0;
   if (((hoist_vbeout[bb->index])->elms [(i) / ((unsigned) (8 * 4))] >> (i) % ((unsigned) (8 * 4)) & 1))
     {
       for (j = 0; j < domby_len; j++)
  {
    dominated = domby[j];
    if (bb == dominated)
      continue;
    if (!((antloc[dominated->index])->elms [(i) / ((unsigned) (8 * 4))] >> (i) % ((unsigned) (8 * 4)) & 1))
      continue;
    if (hoist_expr_reaches_here_p (bb, i, dominated, ((void *)0)))
      {
        struct expr *expr = index_map[i];
        struct occr *occr = expr->antic_occr;
        rtx insn;
        rtx set;
        while ((((occr->insn)->u.fld[3]).bb) != dominated && occr)
   occr = occr->next;
        if (!occr)
   abort ();
        insn = occr->insn;
        set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
        if (! set)
   abort ();
        if (expr->reaching_reg == ((void *)0))
   expr->reaching_reg
     = gen_reg_rtx (((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode));
        gcse_emit_move_after (expr->reaching_reg, (((set)->u.fld[0]).rtx1), insn);
        delete_insn (insn);
        occr->deleted_p = 1;
        if (!insn_inserted_p)
   {
     insert_insn_end_bb (index_map[i], bb, 0);
     insn_inserted_p = 1;
   }
      }
  }
     }
 }
      free (domby);
    }
  free (index_map);
}
static int
one_code_hoisting_pass (void)
{
  int changed = 0;
  alloc_hash_table (max_cuid, &expr_hash_table, 0);
  compute_hash_table (&expr_hash_table);
  if (gcse_file)
    dump_hash_table (gcse_file, "Code Hosting Expressions", &expr_hash_table);
  if (expr_hash_table.n_elems > 0)
    {
      alloc_code_hoist_mem (last_basic_block, expr_hash_table.n_elems);
      compute_code_hoist_data ();
      hoist_code ();
      free_code_hoist_mem ();
    }
  free_hash_table (&expr_hash_table);
  return changed;
}
static struct ls_expr *
ldst_entry (rtx x)
{
  int do_not_record_p = 0;
  struct ls_expr * ptr;
  unsigned int hash;
  hash = hash_expr_1 (x, ((enum machine_mode) (x)->mode), & do_not_record_p);
  for (ptr = pre_ldst_mems; ptr != ((void *)0); ptr = ptr->next)
    if (ptr->hash_index == hash && expr_equiv_p (ptr->pattern, x))
      return ptr;
  ptr = xmalloc (sizeof (struct ls_expr));
  ptr->next = pre_ldst_mems;
  ptr->expr = ((void *)0);
  ptr->pattern = x;
  ptr->pattern_regs = (rtx) 0;
  ptr->loads = (rtx) 0;
  ptr->stores = (rtx) 0;
  ptr->reaching_reg = (rtx) 0;
  ptr->invalid = 0;
  ptr->index = 0;
  ptr->hash_index = hash;
  pre_ldst_mems = ptr;
  return ptr;
}
static void
free_ldst_entry (struct ls_expr * ptr)
{
  free_INSN_LIST_list (& ptr->loads);
  free_INSN_LIST_list (& ptr->stores);
  free (ptr);
}
static void
free_ldst_mems (void)
{
  while (pre_ldst_mems)
    {
      struct ls_expr * tmp = pre_ldst_mems;
      pre_ldst_mems = pre_ldst_mems->next;
      free_ldst_entry (tmp);
    }
  pre_ldst_mems = ((void *)0);
}
static void
print_ldst_list (FILE * file)
{
  struct ls_expr * ptr;
  fprintf (file, "LDST list: \n");
  for (ptr = first_ls_expr(); ptr != ((void *)0); ptr = next_ls_expr (ptr))
    {
      fprintf (file, "  Pattern (%3d): ", ptr->index);
      print_rtl (file, ptr->pattern);
      fprintf (file, "\n	 Loads : ");
      if (ptr->loads)
 print_rtl (file, ptr->loads);
      else
 fprintf (file, "(nil)");
      fprintf (file, "\n	Stores : ");
      if (ptr->stores)
 print_rtl (file, ptr->stores);
      else
 fprintf (file, "(nil)");
      fprintf (file, "\n\n");
    }
  fprintf (file, "\n");
}
static struct ls_expr *
find_rtx_in_ldst (rtx x)
{
  struct ls_expr * ptr;
  for (ptr = pre_ldst_mems; ptr != ((void *)0); ptr = ptr->next)
    if (expr_equiv_p (ptr->pattern, x) && ! ptr->invalid)
      return ptr;
  return ((void *)0);
}
static int
enumerate_ldsts (void)
{
  struct ls_expr * ptr;
  int n = 0;
  for (ptr = pre_ldst_mems; ptr != ((void *)0); ptr = ptr->next)
    ptr->index = n++;
  return n;
}
static struct ls_expr *
first_ls_expr (void)
{
  return pre_ldst_mems;
}
static struct ls_expr *
next_ls_expr (struct ls_expr * ptr)
{
  return ptr->next;
}
static int
simple_mem (rtx x)
{
  if (! (((enum rtx_code) (x)->code) == MEM))
    return 0;
  if ((((x))->volatil))
    return 0;
  if (((enum machine_mode) (x)->mode) == BLKmode)
    return 0;
  if (flag_non_call_exceptions && may_trap_p (x))
    return 0;
  if (side_effects_p (x))
    return 0;
  if (reg_mentioned_p ((global_rtl[GR_STACK_POINTER]), x))
    return 0;
  if (flag_float_store && (mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_VECTOR_FLOAT))
    return 0;
  return 1;
}
static void
invalidate_any_buried_refs (rtx x)
{
  const char * fmt;
  int i, j;
  struct ls_expr * ptr;
  if ((((enum rtx_code) (x)->code) == MEM) && simple_mem (x))
    {
      ptr = ldst_entry (x);
      ptr->invalid = 1;
    }
  fmt = (rtx_format[(int) (((enum rtx_code) (x)->code))]);
  for (i = (rtx_length[(int) (((enum rtx_code) (x)->code))]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 invalidate_any_buried_refs ((((x)->u.fld[i]).rtx1));
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   invalidate_any_buried_refs ((((((x)->u.fld[i]).rtvec1))->elem[j]));
    }
}
static void
compute_ld_motion_mems (void)
{
  struct ls_expr * ptr;
  basic_block bb;
  rtx insn;
  pre_ldst_mems = ((void *)0);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (insn = (bb)->head_;
    insn && insn != ((((bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 {
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET)
  {
    rtx src = ((((((insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1);
    rtx dest = ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1);
    if ((((enum rtx_code) (src)->code) == MEM) && simple_mem (src))
      {
        ptr = ldst_entry (src);
        if ((((enum rtx_code) (dest)->code) == REG))
   ptr->loads = alloc_INSN_LIST (insn, ptr->loads);
        else
   ptr->invalid = 1;
      }
    else
      {
        invalidate_any_buried_refs (src);
      }
    if ((((enum rtx_code) (dest)->code) == MEM) && simple_mem (dest))
      {
        ptr = ldst_entry (dest);
        if (! (((enum rtx_code) (src)->code) == MEM)
     && ((enum rtx_code) (src)->code) != ASM_OPERANDS
     && can_assign_to_reg_p (src))
   ptr->stores = alloc_INSN_LIST (insn, ptr->stores);
        else
   ptr->invalid = 1;
      }
  }
       else
  invalidate_any_buried_refs ((((insn)->u.fld[5]).rtx1));
     }
 }
    }
}
static void
trim_ld_motion_mems (void)
{
  struct ls_expr * * last = & pre_ldst_mems;
  struct ls_expr * ptr = pre_ldst_mems;
  while (ptr != ((void *)0))
    {
      struct expr * expr;
      if (! ptr->invalid)
 {
   unsigned int hash = ptr->hash_index % expr_hash_table.size;
   for (expr = expr_hash_table.table[hash];
        expr != ((void *)0);
        expr = expr->next_same_hash)
     if (expr_equiv_p (expr->expr, ptr->pattern))
       break;
 }
      else
 expr = (struct expr *) 0;
      if (expr)
 {
   ptr->expr = expr;
   last = & ptr->next;
   ptr = ptr->next;
 }
      else
 {
   *last = ptr->next;
   free_ldst_entry (ptr);
   ptr = * last;
 }
    }
  if (gcse_file && pre_ldst_mems != ((void *)0))
    print_ldst_list (gcse_file);
}
static void
update_ld_motion_stores (struct expr * expr)
{
  struct ls_expr * mem_ptr;
  if ((mem_ptr = find_rtx_in_ldst (expr->expr)))
    {
      rtx list = mem_ptr->stores;
      for ( ; list != (rtx) 0; list = (((list)->u.fld[1]).rtx1))
 {
   rtx insn = (((list)->u.fld[0]).rtx1);
   rtx pat = (((insn)->u.fld[5]).rtx1);
   rtx src = (((pat)->u.fld[1]).rtx1);
   rtx reg = expr->reaching_reg;
   rtx copy, new;
   if (expr->reaching_reg == src)
     continue;
   if (gcse_file)
     {
       fprintf (gcse_file, "PRE:  store updated with reaching reg ");
       print_rtl (gcse_file, expr->reaching_reg);
       fprintf (gcse_file, ":\n	");
       print_inline_rtx (gcse_file, insn, 8);
       fprintf (gcse_file, "\n");
     }
   copy = gen_move_insn ( reg, copy_rtx ((((pat)->u.fld[1]).rtx1)));
   new = emit_insn_before (copy, insn);
   record_one_set ((((reg)->u.fld[0]).rtuint), new);
   (((pat)->u.fld[1]).rtx1) = reg;
   (((insn)->u.fld[6]).rtint) = -1;
   gcse_create_count++;
 }
    }
}
static int * regvec;
static rtx compute_store_table_current_insn;
static sbitmap * st_antloc;
static int num_stores;
static void
reg_set_info (rtx dest, rtx setter ,
       void *data)
{
  sbitmap bb_reg = data;
  if (((enum rtx_code) (dest)->code) == SUBREG)
    dest = (((dest)->u.fld[0]).rtx1);
  if ((((enum rtx_code) (dest)->code) == REG))
    {
      regvec[(((dest)->u.fld[0]).rtuint)] = (((compute_store_table_current_insn)->u.fld[0]).rtint);
      if (bb_reg)
 ((bb_reg)->elms [((((dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << ((((dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4)));
    }
}
static void
reg_clear_last_set (rtx dest, rtx setter ,
       void *data)
{
  int *dead_vec = data;
  if (((enum rtx_code) (dest)->code) == SUBREG)
    dest = (((dest)->u.fld[0]).rtx1);
  if ((((enum rtx_code) (dest)->code) == REG) &&
      dead_vec[(((dest)->u.fld[0]).rtuint)] == (((compute_store_table_current_insn)->u.fld[0]).rtint))
    dead_vec[(((dest)->u.fld[0]).rtuint)] = 0;
}
static unsigned char
store_ops_ok (rtx x, int *regs_set)
{
  rtx reg;
  for (; x; x = (((x)->u.fld[1]).rtx1))
    {
      reg = (((x)->u.fld[0]).rtx1);
      if (regs_set[(((reg)->u.fld[0]).rtuint)])
 return 0;
    }
  return 1;
}
static rtx
extract_mentioned_regs (rtx x)
{
  return extract_mentioned_regs_helper (x, (rtx) 0);
}
static rtx
extract_mentioned_regs_helper (rtx x, rtx accum)
{
  int i;
  enum rtx_code code;
  const char * fmt;
 repeat:
  if (x == 0)
    return accum;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
      return alloc_EXPR_LIST (0, x, accum);
    case MEM:
      x = (((x)->u.fld[0]).rtx1);
      goto repeat;
    case PRE_DEC:
    case PRE_INC:
    case POST_DEC:
    case POST_INC:
      abort ();
    case PC:
    case CC0:
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      return accum;
    default:
      break;
    }
  i = (rtx_length[(int) (code)]) - 1;
  fmt = (rtx_format[(int) (code)]);
  for (; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   rtx tem = (((x)->u.fld[i]).rtx1);
   if (i == 0)
     {
       x = tem;
       goto repeat;
     }
   accum = extract_mentioned_regs_helper (tem, accum);
 }
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     accum = extract_mentioned_regs_helper ((((((x)->u.fld[i]).rtvec1))->elem[j]), accum);
 }
    }
  return accum;
}
static void
find_moveable_store (rtx insn, int *regs_set_before, int *regs_set_after)
{
  struct ls_expr * ptr;
  rtx dest, set, tmp;
  int check_anticipatable, check_available;
  basic_block bb = (((insn)->u.fld[3]).bb);
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (!set)
    return;
  dest = (((set)->u.fld[0]).rtx1);
  if (! (((enum rtx_code) (dest)->code) == MEM) || (((dest))->volatil)
      || ((enum machine_mode) (dest)->mode) == BLKmode)
    return;
  if (side_effects_p (dest))
    return;
  if (flag_non_call_exceptions && may_trap_p (dest))
    return;
  if (find_reg_note (insn, REG_EH_REGION, (rtx) 0))
    return;
  ptr = ldst_entry (dest);
  if (!ptr->pattern_regs)
    ptr->pattern_regs = extract_mentioned_regs (dest);
  check_anticipatable = 0;
  if (!((ptr)->loads))
    check_anticipatable = 1;
  else
    {
      tmp = (((((ptr)->loads))->u.fld[0]).rtx1);
      if (tmp != (rtx) 0
   && (((tmp)->u.fld[3]).bb) != bb)
 check_anticipatable = 1;
    }
  if (check_anticipatable)
    {
      if (store_killed_before (dest, ptr->pattern_regs, insn, bb, regs_set_before))
 tmp = (rtx) 0;
      else
 tmp = insn;
      ((ptr)->loads) = alloc_INSN_LIST (tmp,
      ((ptr)->loads));
    }
  check_available = 0;
  if (!((ptr)->stores))
    check_available = 1;
  else
    {
      tmp = (((((ptr)->stores))->u.fld[0]).rtx1);
      if ((((tmp)->u.fld[3]).bb) != bb)
 check_available = 1;
    }
  if (check_available)
    {
      if (((ptr)->reaching_reg))
 {
   for (tmp = (bb)->end_;
        tmp != insn && tmp != ((ptr)->reaching_reg);
        tmp = (((tmp)->u.fld[1]).rtx1))
     continue;
   if (tmp == insn)
     check_available = 0;
 }
      else
 check_available = store_killed_after (dest, ptr->pattern_regs, insn,
           bb, regs_set_after,
           &((ptr)->reaching_reg));
    }
  if (!check_available)
    ((ptr)->stores) = alloc_INSN_LIST (insn, ((ptr)->stores));
}
static int
compute_store_table (void)
{
  int ret;
  basic_block bb;
  unsigned regno;
  rtx insn, pat, tmp;
  int *last_set_in, *already_set;
  struct ls_expr * ptr, **prev_next_ptr_ptr;
  max_gcse_regno = max_reg_num ();
  reg_set_in_block = sbitmap_vector_alloc (last_basic_block,
             max_gcse_regno);
  sbitmap_vector_zero (reg_set_in_block, last_basic_block);
  pre_ldst_mems = 0;
  last_set_in = xcalloc (max_gcse_regno, sizeof (int));
  already_set = xmalloc (sizeof (int) * max_gcse_regno);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      regvec = last_set_in;
      for (insn = (bb)->head_;
    insn != ((((bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 {
   if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     continue;
   if ((((enum rtx_code) (insn)->code) == CALL_INSN))
     {
       unsigned char clobbers_all = 0;
       for (regno = 0; regno < 53; regno++)
  if (clobbers_all
      || (!!((regs_invalidated_by_call)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
    {
      last_set_in[regno] = (((insn)->u.fld[0]).rtint);
      ((reg_set_in_block[bb->index])->elms [(regno) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (regno) % ((unsigned) (8 * 4)));
    }
     }
   pat = (((insn)->u.fld[5]).rtx1);
   compute_store_table_current_insn = insn;
   note_stores (pat, reg_set_info, reg_set_in_block[bb->index]);
 }
      memset (already_set, 0, sizeof (int) * max_gcse_regno);
      regvec = already_set;
      for (insn = (bb)->head_;
    insn != ((((bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 {
   if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     continue;
   if ((((enum rtx_code) (insn)->code) == CALL_INSN))
     {
       unsigned char clobbers_all = 0;
       for (regno = 0; regno < 53; regno++)
  if (clobbers_all
      || (!!((regs_invalidated_by_call)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
    already_set[regno] = 1;
     }
   pat = (((insn)->u.fld[5]).rtx1);
   note_stores (pat, reg_set_info, ((void *)0));
   find_moveable_store (insn, already_set, last_set_in);
   compute_store_table_current_insn = insn;
   note_stores (pat, reg_clear_last_set, last_set_in);
   if ((((enum rtx_code) (insn)->code) == CALL_INSN))
     {
       unsigned char clobbers_all = 0;
       for (regno = 0; regno < 53; regno++)
  if ((clobbers_all
       || (!!((regs_invalidated_by_call)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
      && last_set_in[regno] == (((insn)->u.fld[0]).rtint))
    last_set_in[regno] = 0;
     }
 }
      for (ptr = first_ls_expr (); ptr != ((void *)0); ptr = next_ls_expr (ptr))
 {
   ((ptr)->reaching_reg) = (rtx) 0;
   if (((ptr)->loads)
       && (tmp = (((((ptr)->loads))->u.fld[0]).rtx1)) == (rtx) 0)
     ((ptr)->loads) = (((((ptr)->loads))->u.fld[1]).rtx1);
 }
    }
  for (ptr = pre_ldst_mems, prev_next_ptr_ptr = &pre_ldst_mems;
       ptr != ((void *)0);
       ptr = *prev_next_ptr_ptr)
    {
      if (!((ptr)->stores))
 {
   *prev_next_ptr_ptr = ptr->next;
   free_ldst_entry (ptr);
 }
      else
 prev_next_ptr_ptr = &ptr->next;
    }
  ret = enumerate_ldsts ();
  if (gcse_file)
    {
      fprintf (gcse_file, "ST_avail and ST_antic (shown under loads..)\n");
      print_ldst_list (gcse_file);
    }
  free (last_set_in);
  free (already_set);
  return ret;
}
static unsigned char
load_kills_store (rtx x, rtx store_pattern, int after)
{
  if (after)
    return anti_dependence (x, store_pattern);
  else
    return true_dependence (store_pattern, ((enum machine_mode) (store_pattern)->mode), x,
       rtx_addr_varies_p);
}
static unsigned char
find_loads (rtx x, rtx store_pattern, int after)
{
  const char * fmt;
  int i, j;
  int ret = 0;
  if (!x)
    return 0;
  if (((enum rtx_code) (x)->code) == SET)
    x = (((x)->u.fld[1]).rtx1);
  if ((((enum rtx_code) (x)->code) == MEM))
    {
      if (load_kills_store (x, store_pattern, after))
 return 1;
    }
  fmt = (rtx_format[(int) (((enum rtx_code) (x)->code))]);
  for (i = (rtx_length[(int) (((enum rtx_code) (x)->code))]) - 1; i >= 0 && !ret; i--)
    {
      if (fmt[i] == 'e')
 ret |= find_loads ((((x)->u.fld[i]).rtx1), store_pattern, after);
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   ret |= find_loads ((((((x)->u.fld[i]).rtvec1))->elem[j]), store_pattern, after);
    }
  return ret;
}
static unsigned char
store_killed_in_insn (rtx x, rtx x_regs, rtx insn, int after)
{
  rtx reg, base, note;
  if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return 0;
  if ((((enum rtx_code) (insn)->code) == CALL_INSN))
    {
      if (! (((insn))->unchanging) || pure_call_p (insn))
 return 1;
      for (reg = x_regs; reg; reg = (((reg)->u.fld[1]).rtx1))
 {
   base = find_base_term ((((reg)->u.fld[0]).rtx1));
   if (!base
       || (((enum rtx_code) (base)->code) == ADDRESS
    && ((enum machine_mode) (base)->mode) == (0 ? DImode : SImode)
    && (((base)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER])))
     return 1;
 }
      return 0;
    }
  if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET)
    {
      rtx pat = (((insn)->u.fld[5]).rtx1);
      rtx dest = (((pat)->u.fld[0]).rtx1);
      if (((enum rtx_code) (dest)->code) == SIGN_EXTRACT
   || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT)
 dest = (((dest)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (dest)->code) == MEM)
   && !expr_equiv_p (dest, x))
 {
   if (after)
     {
       if (output_dependence (dest, x))
  return 1;
     }
   else
     {
       if (output_dependence (x, dest))
  return 1;
     }
 }
      if (find_loads ((((pat)->u.fld[1]).rtx1), x, after))
 return 1;
    }
  else if (find_loads ((((insn)->u.fld[5]).rtx1), x, after))
    return 1;
  note = find_reg_equal_equiv_note (insn);
  if (! note)
    return 0;
  note = (((note)->u.fld[0]).rtx1);
  if (expr_equiv_p (note, x))
    return 0;
  return find_loads (note, x, after);
}
static unsigned char
store_killed_after (rtx x, rtx x_regs, rtx insn, basic_block bb,
      int *regs_set_after, rtx *fail_insn)
{
  rtx last = (bb)->end_, act;
  if (!store_ops_ok (x_regs, regs_set_after))
    {
      if (fail_insn)
 *fail_insn = (rtx) 0;
      return 1;
    }
  for (act = last; act != (((insn)->u.fld[1]).rtx1); act = (((act)->u.fld[1]).rtx1))
    if (store_killed_in_insn (x, x_regs, act, 0))
      {
 if (fail_insn)
   *fail_insn = act;
 return 1;
      }
  return 0;
}
static unsigned char
store_killed_before (rtx x, rtx x_regs, rtx insn, basic_block bb,
       int *regs_set_before)
{
  rtx first = (bb)->head_;
  if (!store_ops_ok (x_regs, regs_set_before))
    return 1;
  for ( ; insn != (((first)->u.fld[1]).rtx1); insn = (((insn)->u.fld[1]).rtx1))
    if (store_killed_in_insn (x, x_regs, insn, 1))
      return 1;
  return 0;
}
static void
build_store_vectors (void)
{
  basic_block bb;
  int *regs_set_in_block;
  rtx insn, st;
  struct ls_expr * ptr;
  unsigned regno;
  ae_gen = sbitmap_vector_alloc (last_basic_block, num_stores);
  sbitmap_vector_zero (ae_gen, last_basic_block);
  st_antloc = sbitmap_vector_alloc (last_basic_block, num_stores);
  sbitmap_vector_zero (st_antloc, last_basic_block);
  for (ptr = first_ls_expr (); ptr != ((void *)0); ptr = next_ls_expr (ptr))
    {
      for (st = ((ptr)->stores); st != ((void *)0); st = (((st)->u.fld[1]).rtx1))
 {
   insn = (((st)->u.fld[0]).rtx1);
   bb = (((insn)->u.fld[3]).bb);
   if (((ae_gen[bb->index])->elms [(ptr->index) / ((unsigned) (8 * 4))] >> (ptr->index) % ((unsigned) (8 * 4)) & 1))
     {
       rtx r = gen_reg_rtx (((enum machine_mode) (ptr->pattern)->mode));
       if (gcse_file)
  fprintf (gcse_file, "Removing redundant store:\n");
       replace_store_insn (r, (((st)->u.fld[0]).rtx1), bb, ptr);
       continue;
     }
   ((ae_gen[bb->index])->elms [(ptr->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (ptr->index) % ((unsigned) (8 * 4)));
 }
      for (st = ((ptr)->loads); st != ((void *)0); st = (((st)->u.fld[1]).rtx1))
 {
   insn = (((st)->u.fld[0]).rtx1);
   bb = (((insn)->u.fld[3]).bb);
   ((st_antloc[bb->index])->elms [(ptr->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (ptr->index) % ((unsigned) (8 * 4)));
 }
    }
  ae_kill = sbitmap_vector_alloc (last_basic_block, num_stores);
  sbitmap_vector_zero (ae_kill, last_basic_block);
  transp = sbitmap_vector_alloc (last_basic_block, num_stores);
  sbitmap_vector_zero (transp, last_basic_block);
  regs_set_in_block = xmalloc (sizeof (int) * max_gcse_regno);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      for (regno = 0; regno < max_gcse_regno; regno++)
 regs_set_in_block[regno] = ((reg_set_in_block[bb->index])->elms [(regno) / ((unsigned) (8 * 4))] >> (regno) % ((unsigned) (8 * 4)) & 1);
      for (ptr = first_ls_expr (); ptr != ((void *)0); ptr = next_ls_expr (ptr))
 {
   if (store_killed_after (ptr->pattern, ptr->pattern_regs, (bb)->head_,
      bb, regs_set_in_block, ((void *)0)))
     {
       if (!((st_antloc[bb->index])->elms [(ptr->index) / ((unsigned) (8 * 4))] >> (ptr->index) % ((unsigned) (8 * 4)) & 1)
    || !((ae_gen[bb->index])->elms [(ptr->index) / ((unsigned) (8 * 4))] >> (ptr->index) % ((unsigned) (8 * 4)) & 1))
  ((ae_kill[bb->index])->elms [(ptr->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (ptr->index) % ((unsigned) (8 * 4)));
     }
   else
     ((transp[bb->index])->elms [(ptr->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (ptr->index) % ((unsigned) (8 * 4)));
 }
    }
  free (regs_set_in_block);
  if (gcse_file)
    {
      dump_sbitmap_vector (gcse_file, "st_antloc", "", st_antloc, last_basic_block);
      dump_sbitmap_vector (gcse_file, "st_kill", "", ae_kill, last_basic_block);
      dump_sbitmap_vector (gcse_file, "Transpt", "", transp, last_basic_block);
      dump_sbitmap_vector (gcse_file, "st_avloc", "", ae_gen, last_basic_block);
    }
}
static void
insert_insn_start_bb (rtx insn, basic_block bb)
{
  rtx prev = ((((bb)->head_)->u.fld[1]).rtx1);
  rtx before = (bb)->head_;
  while (before != 0)
    {
      if (! (((enum rtx_code) (before)->code) == CODE_LABEL)
   && (! (((enum rtx_code) (before)->code) == NOTE)
       || (((before)->u.fld[5]).rtint) != NOTE_INSN_BASIC_BLOCK))
 break;
      prev = before;
      if (prev == (bb)->end_)
 break;
      before = (((before)->u.fld[2]).rtx1);
    }
  insn = emit_insn_after (insn, prev);
  if (gcse_file)
    {
      fprintf (gcse_file, "STORE_MOTION  insert store at start of BB %d:\n",
        bb->index);
      print_inline_rtx (gcse_file, insn, 6);
      fprintf (gcse_file, "\n");
    }
}
static int
insert_store (struct ls_expr * expr, edge e)
{
  rtx reg, insn;
  basic_block bb;
  edge tmp;
  if (expr->reaching_reg == (rtx) 0)
    return 0;
  if (e->flags & 16)
    return 0;
  reg = expr->reaching_reg;
  insn = gen_move_insn (copy_rtx (expr->pattern), reg);
  bb = e->dest;
  for (tmp = e->dest->pred; tmp ; tmp = tmp->pred_next)
    if (!(tmp->flags & 16))
      {
 int index = (find_edge_index ((edge_list), (tmp->src), (tmp->dest)));
 if (index == -1)
   abort ();
 if (! ((pre_insert_map[index])->elms [(expr->index) / ((unsigned) (8 * 4))] >> (expr->index) % ((unsigned) (8 * 4)) & 1))
   break;
      }
  if (!tmp && bb != EXIT_BLOCK_PTR)
    {
      for (tmp = e->dest->pred; tmp ; tmp = tmp->pred_next)
 {
   int index = (find_edge_index ((edge_list), (tmp->src), (tmp->dest)));
   ((pre_insert_map[index])->elms [(expr->index) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (expr->index) % ((unsigned) (8 * 4))));
 }
      insert_insn_start_bb (insn, bb);
      return 0;
    }
  if ((e->flags & 2) == 2)
    {
      insert_insn_start_bb (insn, bb);
      return 0;
    }
  insert_insn_on_edge (insn, e);
  if (gcse_file)
    {
      fprintf (gcse_file, "STORE_MOTION  insert insn on edge (%d, %d):\n",
        e->src->index, e->dest->index);
      print_inline_rtx (gcse_file, insn, 6);
      fprintf (gcse_file, "\n");
    }
  return 1;
}
static void
remove_reachable_equiv_notes (basic_block bb, struct ls_expr *smexpr)
{
  edge *stack = xmalloc (sizeof (edge) * n_basic_blocks), act;
  sbitmap visited = sbitmap_alloc (last_basic_block);
  int stack_top = 0;
  rtx last, insn, note;
  rtx mem = smexpr->pattern;
  sbitmap_zero (visited);
  act = bb->succ;
  while (1)
    {
      if (!act)
 {
   if (!stack_top)
     {
       free (stack);
       free(visited);
       return;
     }
   act = stack[--stack_top];
 }
      bb = act->dest;
      if (bb == EXIT_BLOCK_PTR
   || ((visited)->elms [(bb->index) / ((unsigned) (8 * 4))] >> (bb->index) % ((unsigned) (8 * 4)) & 1))
 {
   act = act->succ_next;
   continue;
 }
      ((visited)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
      if (((st_antloc[bb->index])->elms [(smexpr->index) / ((unsigned) (8 * 4))] >> (smexpr->index) % ((unsigned) (8 * 4)) & 1))
 {
   for (last = ((smexpr)->loads);
        ((((((last)->u.fld[0]).rtx1))->u.fld[3]).bb) != bb;
        last = (((last)->u.fld[1]).rtx1))
     continue;
   last = (((last)->u.fld[0]).rtx1);
 }
      else
 last = ((((bb)->end_)->u.fld[2]).rtx1);
      for (insn = (bb)->head_; insn != last; insn = (((insn)->u.fld[2]).rtx1))
 if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
   {
     note = find_reg_equal_equiv_note (insn);
     if (!note || !expr_equiv_p ((((note)->u.fld[0]).rtx1), mem))
       continue;
     if (gcse_file)
       fprintf (gcse_file, "STORE_MOTION  drop REG_EQUAL note at insn %d:\n",
         (((insn)->u.fld[0]).rtint));
     remove_note (insn, note);
   }
      act = act->succ_next;
      if (bb->succ)
 {
   if (act)
     stack[stack_top++] = act;
   act = bb->succ;
 }
    }
}
static void
replace_store_insn (rtx reg, rtx del, basic_block bb, struct ls_expr *smexpr)
{
  rtx insn, mem, note, set, ptr;
  mem = smexpr->pattern;
  insn = gen_move_insn (reg, ((((((((enum rtx_code) (del)->code) == INSN) || (((enum rtx_code) (del)->code) == JUMP_INSN) || (((enum rtx_code) (del)->code) == CALL_INSN)) ? (((enum rtx_code) ((((del)->u.fld[5]).rtx1))->code) == SET ? (((del)->u.fld[5]).rtx1) : single_set_2 (del, (((del)->u.fld[5]).rtx1))) : (rtx) 0))->u.fld[1]).rtx1));
  insn = emit_insn_after (insn, del);
  if (gcse_file)
    {
      fprintf (gcse_file,
        "STORE_MOTION  delete insn in BB %d:\n      ", bb->index);
      print_inline_rtx (gcse_file, del, 6);
      fprintf (gcse_file, "\nSTORE MOTION  replaced with insn:\n      ");
      print_inline_rtx (gcse_file, insn, 6);
      fprintf (gcse_file, "\n");
    }
  for (ptr = ((smexpr)->loads); ptr; ptr = (((ptr)->u.fld[1]).rtx1))
    if ((((ptr)->u.fld[0]).rtx1) == del)
      {
 (((ptr)->u.fld[0]).rtx1) = insn;
 break;
      }
  delete_insn (del);
  for (; insn != ((((bb)->end_)->u.fld[2]).rtx1); insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      {
 set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
 if (!set)
   continue;
 if (expr_equiv_p ((((set)->u.fld[0]).rtx1), mem))
   return;
 note = find_reg_equal_equiv_note (insn);
 if (!note || !expr_equiv_p ((((note)->u.fld[0]).rtx1), mem))
   continue;
 if (gcse_file)
   fprintf (gcse_file, "STORE_MOTION  drop REG_EQUAL note at insn %d:\n",
     (((insn)->u.fld[0]).rtint));
 remove_note (insn, note);
      }
  remove_reachable_equiv_notes (bb, smexpr);
}
static void
delete_store (struct ls_expr * expr, basic_block bb)
{
  rtx reg, i, del;
  if (expr->reaching_reg == (rtx) 0)
    expr->reaching_reg = gen_reg_rtx (((enum machine_mode) (expr->pattern)->mode));
  reg = expr->reaching_reg;
  for (i = ((expr)->stores); i; i = (((i)->u.fld[1]).rtx1))
    {
      del = (((i)->u.fld[0]).rtx1);
      if ((((del)->u.fld[3]).bb) == bb)
 {
   replace_store_insn (reg, del, bb, expr);
   break;
 }
    }
}
static void
free_store_memory (void)
{
  free_ldst_mems ();
  if (ae_gen)
    free(ae_gen);
  if (ae_kill)
    free(ae_kill);
  if (transp)
    free(transp);
  if (st_antloc)
    free(st_antloc);
  if (pre_insert_map)
    free(pre_insert_map);
  if (pre_delete_map)
    free(pre_delete_map);
  if (reg_set_in_block)
    free(reg_set_in_block);
  ae_gen = ae_kill = transp = st_antloc = ((void *)0);
  pre_insert_map = pre_delete_map = reg_set_in_block = ((void *)0);
}
static void
store_motion (void)
{
  basic_block bb;
  int x;
  struct ls_expr * ptr;
  int update_flow = 0;
  if (gcse_file)
    {
      fprintf (gcse_file, "before store motion\n");
      print_rtl (gcse_file, get_insns ());
    }
  init_alias_analysis ();
  num_stores = compute_store_table ();
  if (num_stores == 0)
    {
      free(reg_set_in_block);
      end_alias_analysis ();
      return;
    }
  build_store_vectors ();
  add_noreturn_fake_exit_edges ();
  connect_infinite_loops_to_exit ();
  edge_list = pre_edge_rev_lcm (gcse_file, num_stores, transp, ae_gen,
    st_antloc, ae_kill, &pre_insert_map,
    &pre_delete_map);
  for (ptr = first_ls_expr (); ptr != ((void *)0); ptr = next_ls_expr (ptr))
    {
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 if (((pre_delete_map[bb->index])->elms [(ptr->index) / ((unsigned) (8 * 4))] >> (ptr->index) % ((unsigned) (8 * 4)) & 1))
   delete_store (ptr, bb);
      for (x = 0; x < ((edge_list)->num_edges); x++)
 if (((pre_insert_map[x])->elms [(ptr->index) / ((unsigned) (8 * 4))] >> (ptr->index) % ((unsigned) (8 * 4)) & 1))
   update_flow |= insert_store (ptr, ((edge_list)->index_to_edge[(x)]));
    }
  if (update_flow)
    commit_edge_insertions ();
  free_store_memory ();
  free_edge_list (edge_list);
  remove_fake_edges ();
  end_alias_analysis ();
}
int
bypass_jumps (FILE *file)
{
  int changed;
  if ((cfun->calls_setjmp))
    return 0;
  debug_stderr = stderr;
  gcse_file = file;
  max_gcse_regno = max_reg_num ();
  if (file)
    dump_flow_info (file);
  if (n_basic_blocks <= 1 || is_too_expensive ("jump bypassing disabled"))
    return 0;
  _obstack_begin ((&gcse_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
  bytes_used = 0;
  init_alias_analysis ();
  alloc_reg_set_mem (max_gcse_regno);
  compute_sets (get_insns ());
  max_gcse_regno = max_reg_num ();
  alloc_gcse_mem (get_insns ());
  changed = one_cprop_pass (1, 1, 1);
  free_gcse_mem ();
  if (file)
    {
      fprintf (file, "BYPASS of %s: %d basic blocks, ",
        current_function_name (), n_basic_blocks);
      fprintf (file, "%d bytes\n\n", bytes_used);
    }
  ( (&gcse_obstack)->temp = (char *) (((void *)0)) - (char *) (&gcse_obstack)->chunk, (((&gcse_obstack)->temp > 0 && (&gcse_obstack)->temp < (&gcse_obstack)->chunk_limit - (char *) (&gcse_obstack)->chunk) ? (int) ((&gcse_obstack)->next_free = (&gcse_obstack)->object_base = (&gcse_obstack)->temp + (char *) (&gcse_obstack)->chunk) : (((obstack_free) ((&gcse_obstack), (&gcse_obstack)->temp + (char *) (&gcse_obstack)->chunk), 0), 0)));
  free_reg_set_mem ();
  end_alias_analysis ();
  allocate_reg_info (max_reg_num (), 0, 0);
  return changed;
}
static unsigned char
is_too_expensive (const char *pass)
{
  if (n_edges > 20000 + n_basic_blocks * 4)
    {
      if (warn_disabled_optimization)
 warning ("%s: %d basic blocks and %d edges/basic block",
   pass, n_basic_blocks, n_edges / n_basic_blocks);
      return 1;
    }
  if ((n_basic_blocks
       * (((max_reg_num ()) + ((unsigned) (8 * 4)) - 1) / ((unsigned) (8 * 4)))
       * sizeof (unsigned long)) > ((size_t) (compiler_params[(int) PARAM_MAX_GCSE_MEMORY].value1)))
    {
      if (warn_disabled_optimization)
 warning ("%s: %d basic blocks and %d registers",
   pass, n_basic_blocks, max_reg_num ());
      return 1;
    }
  return 0;
}
struct unoccr
{
  struct unoccr *next;
  edge pred;
  rtx insn;
};
static unsigned char reg_used_on_edge (rtx, edge);
static rtx reg_set_between_after_reload_p (rtx, rtx, rtx);
static rtx reg_used_between_after_reload_p (rtx, rtx, rtx);
static rtx get_avail_load_store_reg (rtx);
static unsigned char is_jump_table_basic_block (basic_block);
static unsigned char bb_has_well_behaved_predecessors (basic_block);
static struct occr* get_bb_avail_insn (basic_block, struct occr *);
static void hash_scan_set_after_reload (rtx, rtx, struct hash_table *);
static void compute_hash_table_after_reload (struct hash_table *);
static void eliminate_partially_redundant_loads (basic_block,
      rtx,
      struct expr *);
static void gcse_after_reload (void);
static struct occr* get_bb_avail_insn (basic_block, struct occr *);
void gcse_after_reload_main (rtx, FILE *);
static unsigned char
reg_used_on_edge (rtx reg, edge e)
{
  rtx insn;
  for (insn = e->insns.r; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && reg_overlap_mentioned_p (reg, (((insn)->u.fld[5]).rtx1)))
      return 1;
  return 0;
}
static rtx
reg_set_between_after_reload_p (rtx reg, rtx from_insn, rtx to_insn)
{
  rtx insn;
  int regno;
  if (! (((enum rtx_code) (reg)->code) == REG))
    abort ();
  regno = (((reg)->u.fld[0]).rtuint);
  if (regno >= 53)
    abort ();
  if (from_insn == to_insn)
    return (rtx) 0;
  for (insn = (((from_insn)->u.fld[2]).rtx1);
       insn != to_insn;
       insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   if (0
       || ((((enum rtx_code) (insn)->code) == CALL_INSN)
    && call_used_regs[regno])
       || find_reg_fusage (insn, CLOBBER, reg))
     return insn;
 }
      if (set_of (reg, insn) != (rtx) 0)
 return insn;
    }
  return (rtx) 0;
}
static rtx
reg_used_between_after_reload_p (rtx reg, rtx from_insn, rtx to_insn)
{
  rtx insn;
  int regno;
  if (! (((enum rtx_code) (reg)->code) == REG))
    return to_insn;
  regno = (((reg)->u.fld[0]).rtuint);
  if (regno >= 53)
    abort ();
  if (from_insn == to_insn)
    return (rtx) 0;
  for (insn = (((from_insn)->u.fld[2]).rtx1);
       insn != to_insn;
       insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
 && (reg_overlap_mentioned_p (reg, (((insn)->u.fld[5]).rtx1))
     || ((((enum rtx_code) (insn)->code) == CALL_INSN)
  && call_used_regs[regno])
     || find_reg_fusage (insn, USE, reg)
     || find_reg_fusage (insn, CLOBBER, reg)))
      return insn;
  return (rtx) 0;
}
static rtx
get_avail_load_store_reg (rtx insn)
{
  if ((((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == REG))
    return ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1);
  if ((((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->code) == REG))
    return ((((((insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1);
  abort ();
}
static unsigned char
is_jump_table_basic_block (basic_block bb)
{
  rtx insn = (bb)->end_;
  if (((((enum rtx_code) (insn)->code) == JUMP_INSN) && (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_VEC || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC)))
    return 1;
  return 0;
}
static unsigned char
bb_has_well_behaved_predecessors (basic_block bb)
{
  edge pred;
  if (! bb->pred)
    return 0;
  for (pred = bb->pred; pred != ((void *)0); pred = pred->pred_next)
    if (((pred->flags & 2) && ((pred)->src->succ->succ_next && (pred)->dest->pred->pred_next))
 || is_jump_table_basic_block (pred->src))
      return 0;
  return 1;
}
static struct occr*
get_bb_avail_insn (basic_block bb, struct occr *occr)
{
  for (; occr != ((void *)0); occr = occr->next)
    if ((((occr->insn)->u.fld[3]).bb)->index == bb->index)
      return occr;
  return ((void *)0);
}
static void
eliminate_partially_redundant_loads (basic_block bb, rtx insn,
         struct expr *expr)
{
  edge pred;
  rtx avail_insn = (rtx) 0;
  rtx avail_reg;
  rtx dest, pat;
  struct occr *a_occr;
  struct unoccr *occr, *avail_occrs = ((void *)0);
  struct unoccr *unoccr, *unavail_occrs = ((void *)0);
  int npred_ok = 0;
  gcov_type ok_count = 0;
  gcov_type critical_count = 0;
  gcov_type not_ok_count = 0;
  basic_block pred_bb;
  pat = (((insn)->u.fld[5]).rtx1);
  dest = (((pat)->u.fld[0]).rtx1);
  if (reg_used_between_after_reload_p (dest,
                                       ((((bb)->head_)->u.fld[1]).rtx1), insn)
      || reg_set_between_after_reload_p (dest,
                                         ((((bb)->head_)->u.fld[1]).rtx1), insn))
    return;
  for (pred = bb->pred; pred; pred = pred->pred_next)
    {
      rtx next_pred_bb_end;
      avail_insn = (rtx) 0;
      pred_bb = pred->src;
      next_pred_bb_end = ((((pred_bb)->end_)->u.fld[2]).rtx1);
      for (a_occr = get_bb_avail_insn (pred_bb, expr->avail_occr); a_occr;
    a_occr = get_bb_avail_insn (pred_bb, a_occr->next))
 {
   avail_insn = a_occr->insn;
   if (! (avail_reg = get_avail_load_store_reg (avail_insn)))
     abort ();
   extract_insn (gen_move_insn (copy_rtx (dest),
           copy_rtx (avail_reg)));
   if (! constrain_operands (1)
       || reg_killed_on_edge (avail_reg, pred)
       || reg_used_on_edge (dest, pred))
     {
       avail_insn = ((void *)0);
       continue;
     }
   if (! reg_set_between_after_reload_p (avail_reg, avail_insn,
      next_pred_bb_end))
     break;
   else
     avail_insn = ((void *)0);
 }
      if (avail_insn != (rtx) 0)
 {
   npred_ok++;
   ok_count += pred->count;
          if (((pred)->src->succ->succ_next && (pred)->dest->pred->pred_next))
            critical_count += pred->count;
   occr = gmalloc (sizeof (struct unoccr));
   occr->insn = avail_insn;
   occr->pred = pred;
   occr->next = avail_occrs;
   avail_occrs = occr;
 }
      else
 {
   not_ok_count += pred->count;
          if (((pred)->src->succ->succ_next && (pred)->dest->pred->pred_next))
            critical_count += pred->count;
   unoccr = gmalloc (sizeof (struct unoccr));
   unoccr->insn = (rtx) 0;
   unoccr->pred = pred;
   unoccr->next = unavail_occrs;
   unavail_occrs = unoccr;
 }
    }
  if (npred_ok == 0
      || (optimize_size && npred_ok > 1))
    goto cleanup;
  if (ok_count < (compiler_params[(int) PARAM_GCSE_AFTER_RELOAD_PARTIAL_FRACTION].value1) * not_ok_count)
    goto cleanup;
  if (ok_count < (compiler_params[(int) PARAM_GCSE_AFTER_RELOAD_CRITICAL_FRACTION].value1) * critical_count)
    goto cleanup;
  for (occr = avail_occrs; occr; occr = occr->next)
    {
      avail_insn = occr->insn;
      pred = occr->pred;
      avail_reg = get_avail_load_store_reg (avail_insn);
      if (! avail_reg)
 abort ();
      insert_insn_on_edge (gen_move_insn (copy_rtx (dest),
       copy_rtx (avail_reg)),
      pred);
      if (gcse_file)
 fprintf (gcse_file,
   "GCSE AFTER reload generating move from %d to %d on 		 edge from %d to %d\n",
   (((avail_reg)->u.fld[0]).rtuint),
   (((dest)->u.fld[0]).rtuint),
   pred->src->index,
   pred->dest->index);
    }
  for (unoccr = unavail_occrs; unoccr; unoccr = unoccr->next)
    {
      pred = unoccr->pred;
      insert_insn_on_edge (copy_insn ((((insn)->u.fld[5]).rtx1)), pred);
      if (gcse_file)
 fprintf (gcse_file,
   "GCSE AFTER reload: generating on edge from %d to %d		  a copy of load:\n",
   pred->src->index,
   pred->dest->index);
    }
  for (a_occr = get_bb_avail_insn (bb, expr->avail_occr);
       a_occr && (a_occr->insn != insn);
       a_occr = get_bb_avail_insn (bb, a_occr->next));
  if (!a_occr)
    delete_insn (insn);
  else
    a_occr->deleted_p = 1;
cleanup:
  while (unavail_occrs)
    {
      struct unoccr *temp = unavail_occrs->next;
      free (unavail_occrs);
      unavail_occrs = temp;
    }
  while (avail_occrs)
    {
      struct unoccr *temp = avail_occrs->next;
      free (avail_occrs);
      avail_occrs = temp;
    }
}
static void
gcse_after_reload (void)
{
  unsigned int i;
  rtx insn;
  basic_block bb;
  struct expr *expr;
  struct occr *occr;
  if (ENTRY_BLOCK_PTR->next_bb == EXIT_BLOCK_PTR)
    return;
  for (bb = ENTRY_BLOCK_PTR->next_bb->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      if (! bb_has_well_behaved_predecessors (bb))
 continue;
      if (probably_cold_bb_p (bb))
 continue;
      reset_opr_set_tables ();
      for (insn = (bb)->head_;
    insn != ((void *)0)
    && insn != ((((bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 {
   if (((enum rtx_code) (insn)->code) == INSN
              && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET
       && (((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == REG)
       && (((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->code) == MEM))
     {
       rtx pat = (((insn)->u.fld[5]).rtx1);
       rtx src = (((pat)->u.fld[1]).rtx1);
       struct expr *expr;
       if (general_operand (src, ((enum machine_mode) (src)->mode))
    && (expr = lookup_expr (src, &expr_hash_table)) != ((void *)0)
    && oprs_not_set_p (src, insn)
    && ! (((src))->volatil)
    && ((enum machine_mode) (src)->mode) != BLKmode
    && !(flag_non_call_exceptions && may_trap_p (src))
    && !side_effects_p (src))
  {
    eliminate_partially_redundant_loads (bb, insn, expr);
  }
     }
     if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
       mark_oprs_set (insn);
 }
    }
  commit_edge_insertions ();
  for (i = 0; i < expr_hash_table.size; i++)
    {
      for (expr = expr_hash_table.table[i];
    expr != ((void *)0);
    expr = expr->next_same_hash)
 for (occr = expr->avail_occr; occr; occr = occr->next)
   if (occr->deleted_p)
     delete_insn (occr->insn);
    }
}
static void
hash_scan_set_after_reload (rtx pat, rtx insn, struct hash_table *table)
{
  rtx src = (((pat)->u.fld[1]).rtx1);
  rtx dest = (((pat)->u.fld[0]).rtx1);
  if (! (((enum rtx_code) (src)->code) == MEM) && ! (((enum rtx_code) (dest)->code) == MEM))
    return;
  if ((((enum rtx_code) (dest)->code) == REG))
    {
      if (
   can_copy_p (((enum machine_mode) (dest)->mode))
   && ! find_reg_note (insn, REG_EH_REGION, (rtx) 0)
   && general_operand (src, ((enum machine_mode) (src)->mode))
   && ! set_noop_p (pat)
   && ! (((enum rtx_code) (insn)->code) == JUMP_INSN))
 {
   if (oprs_available_p (src, insn))
     insert_expr_in_table (src, ((enum machine_mode) (dest)->mode), insn, 0, 1, table);
 }
    }
  else if ((((enum rtx_code) (src)->code) == REG))
    {
      if (
   can_copy_p (((enum machine_mode) (src)->mode))
   && ! find_reg_note (insn, REG_EH_REGION, (rtx) 0)
   && general_operand (dest, ((enum machine_mode) (dest)->mode))
   && ! set_noop_p (pat)
   &&! (((enum rtx_code) (insn)->code) == JUMP_INSN)
   && ! (flag_float_store && (mode_class[((enum machine_mode) (dest)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (dest)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (dest)->mode)] == MODE_VECTOR_FLOAT))
   && ! load_killed_in_block_p ((((insn)->u.fld[3]).bb),
           (uid_cuid[(((insn)->u.fld[0]).rtint)]) + 1,
           dest,
           1)
   && oprs_unchanged_p ((((dest)->u.fld[0]).rtx1), insn, 1))
 {
   insert_expr_in_table (dest, ((enum machine_mode) (dest)->mode), insn, 0, 1, table);
 }
    }
}
static void
compute_hash_table_after_reload (struct hash_table *table)
{
  unsigned int i;
  table->set_p = 0;
  table->n_elems = 0;
  memset ((char *) table->table, 0,
   table->size * sizeof (struct expr *));
  sbitmap_vector_zero (reg_set_in_block, last_basic_block);
  clear_modify_mem_tables ();
  reg_avail_info = gmalloc (max_gcse_regno * sizeof (struct reg_avail_info));
  for (i = 0; i < max_gcse_regno; ++i)
    reg_avail_info[i].last_bb = ((void *)0);
  for (current_bb = ENTRY_BLOCK_PTR->next_bb; current_bb != EXIT_BLOCK_PTR; current_bb = current_bb->next_bb)
    {
      rtx insn;
      unsigned int regno;
      for (insn = (current_bb)->head_;
    insn && insn != ((((current_bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 {
   if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     continue;
   if ((((enum rtx_code) (insn)->code) == CALL_INSN))
     {
       unsigned char clobbers_all = 0;
       for (regno = 0; regno < 53; regno++)
  if (clobbers_all
      || (!!((regs_invalidated_by_call)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
             )
    record_last_reg_set_info (insn, regno);
       mark_call (insn);
     }
     note_stores ((((insn)->u.fld[5]).rtx1), record_last_set_info, insn);
     if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET)
       {
  rtx src, dest;
  src = ((((((insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1);
  dest = ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1);
  if ((((enum rtx_code) (src)->code) == MEM) && auto_inc_p ((((src)->u.fld[0]).rtx1)))
    {
      regno = (((((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      record_last_reg_set_info (insn, regno);
    }
  if ((((enum rtx_code) (dest)->code) == MEM) && auto_inc_p ((((dest)->u.fld[0]).rtx1)))
    {
      regno = (((((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      record_last_reg_set_info (insn, regno);
    }
  }
   }
 for (insn = (current_bb)->head_;
      insn && insn != ((((current_bb)->end_)->u.fld[2]).rtx1);
      insn = (((insn)->u.fld[2]).rtx1))
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET)
     if (! find_reg_note (insn, REG_LIBCALL, (rtx) 0))
       hash_scan_set_after_reload ((((insn)->u.fld[5]).rtx1), insn, table);
    }
  free (reg_avail_info);
  reg_avail_info = ((void *)0);
}
void
gcse_after_reload_main (rtx f, FILE* file)
{
  gcse_subst_count = 0;
  gcse_create_count = 0;
  gcse_file = file;
  _obstack_begin ((&gcse_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
  bytes_used = 0;
  init_alias_analysis ();
  max_gcse_regno = max_reg_num ();
  alloc_reg_set_mem (max_gcse_regno);
  alloc_gcse_mem (f);
  alloc_hash_table (max_cuid, &expr_hash_table, 0);
  compute_hash_table_after_reload (&expr_hash_table);
  if (gcse_file)
    dump_hash_table (gcse_file, "Expression", &expr_hash_table);
  if (expr_hash_table.n_elems > 0)
    gcse_after_reload ();
  free_hash_table (&expr_hash_table);
  free_gcse_mem ();
  free_reg_set_mem ();
  end_alias_analysis ();
  ( (&gcse_obstack)->temp = (char *) (((void *)0)) - (char *) (&gcse_obstack)->chunk, (((&gcse_obstack)->temp > 0 && (&gcse_obstack)->temp < (&gcse_obstack)->chunk_limit - (char *) (&gcse_obstack)->chunk) ? (int) ((&gcse_obstack)->next_free = (&gcse_obstack)->object_base = (&gcse_obstack)->temp + (char *) (&gcse_obstack)->chunk) : (((obstack_free) ((&gcse_obstack), (&gcse_obstack)->temp + (char *) (&gcse_obstack)->chunk), 0), 0)));
}
const struct ggc_root_tab gt_ggc_r_gt_gcse_h[] = {
  {
    &test_insn,
    1,
    sizeof (test_insn),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
struct host_hooks
{
  void (*extra_signals) (void);
  void * (*gt_pch_get_address) (size_t size, int fd);
  int (*gt_pch_use_address) (void *addr, size_t size, int fd, size_t offset);
  size_t (*gt_pch_alloc_granularity) (void);
};
extern const struct host_hooks host_hooks;
extern void* default_gt_pch_get_address (size_t, int);
extern int default_gt_pch_use_address (void *, size_t, int, size_t);
extern size_t default_gt_pch_alloc_granularity (void);
extern void* mmap_gt_pch_get_address (size_t, int);
extern int mmap_gt_pch_use_address (void *, size_t, int, size_t);
extern void *mmap (void *__addr, size_t __len, int __prot,
     int __flags, int __fd, __off_t __offset) ;
extern void *mmap64 (void *__addr, size_t __len, int __prot,
       int __flags, int __fd, __off64_t __offset) ;
extern int munmap (void *__addr, size_t __len) ;
extern int mprotect (void *__addr, size_t __len, int __prot) ;
extern int msync (void *__addr, size_t __len, int __flags);
extern int madvise (void *__addr, size_t __len, int __advice) ;
extern int posix_madvise (void *__addr, size_t __len, int __advice) ;
extern int mlock (const void *__addr, size_t __len) ;
extern int munlock (const void *__addr, size_t __len) ;
extern int mlockall (int __flags) ;
extern int munlockall (void) ;
extern int mincore (void *__start, size_t __len, unsigned char *__vec)
     ;
extern void *mremap (void *__addr, size_t __old_len, size_t __new_len,
       int __flags, ...) ;
extern int remap_file_pages (void *__start, size_t __size, int __prot,
        size_t __pgoff, int __flags) ;
extern int shm_open (const char *__name, int __oflag, mode_t __mode);
extern int shm_unlink (const char *__name);
static ggc_statistics *ggc_stats;
struct traversal_state;
static int ggc_htab_delete (void **, void *);
static hashval_t saving_htab_hash (const void *);
static int saving_htab_eq (const void *, const void *);
static int call_count (void **, void *);
static int call_alloc (void **, void *);
static int compare_ptr_data (const void *, const void *);
static void relocate_ptrs (void *, void *);
static void write_pch_globals (const struct ggc_root_tab * const *tab,
          struct traversal_state *state);
static double ggc_rlimit_bound (double);
static int
ggc_htab_delete (void **slot, void *info)
{
  const struct ggc_cache_tab *r = (const struct ggc_cache_tab *) info;
  if (! (*r->marked_p) (*slot))
    htab_clear_slot (*r->base, slot);
  else
    (*r->cb) (*slot);
  return 1;
}
void
ggc_mark_roots (void)
{
  const struct ggc_root_tab *const *rt;
  const struct ggc_root_tab *rti;
  const struct ggc_cache_tab *const *ct;
  const struct ggc_cache_tab *cti;
  size_t i;
  for (rt = gt_ggc_deletable_rtab; *rt; rt++)
    for (rti = *rt; rti->base != ((void *)0); rti++)
      memset (rti->base, 0, rti->stride);
  for (rt = gt_ggc_rtab; *rt; rt++)
    for (rti = *rt; rti->base != ((void *)0); rti++)
      for (i = 0; i < rti->nelt; i++)
 (*rti->cb)(*(void **)((char *)rti->base + rti->stride * i));
  ggc_mark_stringpool ();
  for (ct = gt_ggc_cache_rtab; *ct; ct++)
    for (cti = *ct; cti->base != ((void *)0); cti++)
      if (*cti->base)
 {
   ggc_set_mark (*cti->base);
   htab_traverse_noresize (*cti->base, ggc_htab_delete, (void *) cti);
   ggc_set_mark ((*cti->base)->entries);
 }
}
void *
ggc_alloc_cleared_stat (size_t size )
{
  void *buf = ggc_alloc_stat (size );
  memset (buf, 0, size);
  return buf;
}
void *
ggc_realloc_stat (void *x, size_t size )
{
  void *r;
  size_t old_size;
  if (x == ((void *)0))
    return ggc_alloc_stat (size );
  old_size = ggc_get_size (x);
  if (size <= old_size)
    {
     
                       ;
      ;
      return x;
    }
  r = ggc_alloc_stat (size );
  ;
  memcpy (r, x, old_size);
  ggc_free (x);
  return r;
}
void *
ggc_calloc (size_t s1, size_t s2)
{
  return ggc_alloc_cleared_stat (s1 * s2 );
}
void *
ggc_splay_alloc (int sz, void *nl)
{
  if (nl != ((void *)0))
    abort ();
  return ggc_alloc_stat (sz );
}
void
ggc_splay_dont_free (void * x , void *nl)
{
  if (nl != ((void *)0))
    abort ();
}
void
ggc_print_common_statistics (FILE *stream ,
        ggc_statistics *stats)
{
  ggc_stats = stats;
  ggc_collect ();
  ggc_stats = ((void *)0);
}
static htab_t saving_htab;
struct ptr_data
{
  void *obj;
  void *note_ptr_cookie;
  gt_note_pointers note_ptr_fn;
  gt_handle_reorder reorder_fn;
  size_t size;
  void *new_addr;
};
int
gt_pch_note_object (void *obj, void *note_ptr_cookie,
      gt_note_pointers note_ptr_fn)
{
  struct ptr_data **slot;
  if (obj == ((void *)0) || obj == (void *) 1)
    return 0;
  slot = (struct ptr_data **)
    htab_find_slot_with_hash (saving_htab, obj, (hashval_t)((long)obj >> 3),
         INSERT);
  if (*slot != ((void *)0))
    {
      if ((*slot)->note_ptr_fn != note_ptr_fn
   || (*slot)->note_ptr_cookie != note_ptr_cookie)
 abort ();
      return 0;
    }
  *slot = xcalloc (sizeof (struct ptr_data), 1);
  (*slot)->obj = obj;
  (*slot)->note_ptr_fn = note_ptr_fn;
  (*slot)->note_ptr_cookie = note_ptr_cookie;
  if (note_ptr_fn == gt_pch_p_S)
    (*slot)->size = strlen (obj) + 1;
  else
    (*slot)->size = ggc_get_size (obj);
  return 1;
}
void
gt_pch_note_reorder (void *obj, void *note_ptr_cookie,
       gt_handle_reorder reorder_fn)
{
  struct ptr_data *data;
  if (obj == ((void *)0) || obj == (void *) 1)
    return;
  data = htab_find_with_hash (saving_htab, obj, (hashval_t)((long)obj >> 3));
  if (data == ((void *)0)
      || data->note_ptr_cookie != note_ptr_cookie)
    abort ();
  data->reorder_fn = reorder_fn;
}
static hashval_t
saving_htab_hash (const void *p)
{
  return (hashval_t)((long)((struct ptr_data *)p)->obj >> 3);
}
static int
saving_htab_eq (const void *p1, const void *p2)
{
  return ((struct ptr_data *)p1)->obj == p2;
}
struct traversal_state
{
  FILE *f;
  struct ggc_pch_data *d;
  size_t count;
  struct ptr_data **ptrs;
  size_t ptrs_i;
};
static int
call_count (void **slot, void *state_p)
{
  struct ptr_data *d = (struct ptr_data *)*slot;
  struct traversal_state *state = (struct traversal_state *)state_p;
  ggc_pch_count_object (state->d, d->obj, d->size, d->note_ptr_fn == gt_pch_p_S);
  state->count++;
  return 1;
}
static int
call_alloc (void **slot, void *state_p)
{
  struct ptr_data *d = (struct ptr_data *)*slot;
  struct traversal_state *state = (struct traversal_state *)state_p;
  d->new_addr = ggc_pch_alloc_object (state->d, d->obj, d->size, d->note_ptr_fn == gt_pch_p_S);
  state->ptrs[state->ptrs_i++] = d;
  return 1;
}
static int
compare_ptr_data (const void *p1_p, const void *p2_p)
{
  struct ptr_data *p1 = *(struct ptr_data *const *)p1_p;
  struct ptr_data *p2 = *(struct ptr_data *const *)p2_p;
  return (((size_t)p1->new_addr > (size_t)p2->new_addr)
   - ((size_t)p1->new_addr < (size_t)p2->new_addr));
}
static void
relocate_ptrs (void *ptr_p, void *state_p)
{
  void **ptr = (void **)ptr_p;
  struct traversal_state *state
    = (struct traversal_state *)state_p;
  struct ptr_data *result;
  if (*ptr == ((void *)0) || *ptr == (void *)1)
    return;
  result = htab_find_with_hash (saving_htab, *ptr, (hashval_t)((long)*ptr >> 3));
  if (result == ((void *)0))
    abort ();
  *ptr = result->new_addr;
}
static void
write_pch_globals (const struct ggc_root_tab * const *tab,
     struct traversal_state *state)
{
  const struct ggc_root_tab *const *rt;
  const struct ggc_root_tab *rti;
  size_t i;
  for (rt = tab; *rt; rt++)
    for (rti = *rt; rti->base != ((void *)0); rti++)
      for (i = 0; i < rti->nelt; i++)
 {
   void *ptr = *(void **)((char *)rti->base + rti->stride * i);
   struct ptr_data *new_ptr;
   if (ptr == ((void *)0) || ptr == (void *)1)
     {
       if (fwrite_unlocked (&ptr, sizeof (void *), 1, state->f)
    != 1)
  fatal_error ("can't write PCH file: %m");
     }
   else
     {
       new_ptr = htab_find_with_hash (saving_htab, ptr,
          (hashval_t)((long)ptr >> 3));
       if (fwrite_unlocked (&new_ptr->new_addr, sizeof (void *), 1, state->f)
    != 1)
  fatal_error ("can't write PCH file: %m");
     }
 }
}
struct mmap_info
{
  size_t offset;
  size_t size;
  void *preferred_base;
};
void
gt_pch_save (FILE *f)
{
  const struct ggc_root_tab *const *rt;
  const struct ggc_root_tab *rti;
  size_t i;
  struct traversal_state state;
  char *this_object = ((void *)0);
  size_t this_object_size = 0;
  struct mmap_info mmi;
  const size_t mmap_offset_alignment = host_hooks.gt_pch_alloc_granularity();
  gt_pch_save_stringpool ();
  saving_htab = htab_create (50000, saving_htab_hash, saving_htab_eq, free);
  for (rt = gt_ggc_rtab; *rt; rt++)
    for (rti = *rt; rti->base != ((void *)0); rti++)
      for (i = 0; i < rti->nelt; i++)
 (*rti->pchw)(*(void **)((char *)rti->base + rti->stride * i));
  for (rt = gt_pch_cache_rtab; *rt; rt++)
    for (rti = *rt; rti->base != ((void *)0); rti++)
      for (i = 0; i < rti->nelt; i++)
 (*rti->pchw)(*(void **)((char *)rti->base + rti->stride * i));
  state.f = f;
  state.d = init_ggc_pch();
  state.count = 0;
  htab_traverse (saving_htab, call_count, &state);
  mmi.size = ggc_pch_total_size (state.d);
  mmi.preferred_base = host_hooks.gt_pch_get_address (mmi.size, fileno (f));
  ggc_pch_this_base (state.d, mmi.preferred_base);
  state.ptrs = xmalloc (state.count * sizeof (*state.ptrs));
  state.ptrs_i = 0;
  htab_traverse (saving_htab, call_alloc, &state);
  qsort (state.ptrs, state.count, sizeof (*state.ptrs), compare_ptr_data);
  for (rt = gt_pch_scalar_rtab; *rt; rt++)
    for (rti = *rt; rti->base != ((void *)0); rti++)
      if (fwrite_unlocked (rti->base, rti->stride, 1, f) != 1)
 fatal_error ("can't write PCH file: %m");
  write_pch_globals (gt_ggc_rtab, &state);
  write_pch_globals (gt_pch_cache_rtab, &state);
  ggc_pch_prepare_write (state.d, state.f);
  {
    long o;
    o = ftell (state.f) + sizeof (mmi);
    if (o == -1)
      fatal_error ("can't get position in PCH file: %m");
    mmi.offset = mmap_offset_alignment - o % mmap_offset_alignment;
    if (mmi.offset == mmap_offset_alignment)
      mmi.offset = 0;
    mmi.offset += o;
  }
  if (fwrite_unlocked (&mmi, sizeof (mmi), 1, state.f) != 1)
    fatal_error ("can't write PCH file: %m");
  if (mmi.offset != 0
      && fseek (state.f, mmi.offset, 0) != 0)
    fatal_error ("can't write padding to PCH file: %m");
  for (i = 0; i < state.count; i++)
    {
      if (this_object_size < state.ptrs[i]->size)
 {
   this_object_size = state.ptrs[i]->size;
   this_object = xrealloc (this_object, this_object_size);
 }
      memcpy (this_object, state.ptrs[i]->obj, state.ptrs[i]->size);
      if (state.ptrs[i]->reorder_fn != ((void *)0))
 state.ptrs[i]->reorder_fn (state.ptrs[i]->obj,
       state.ptrs[i]->note_ptr_cookie,
       relocate_ptrs, &state);
      state.ptrs[i]->note_ptr_fn (state.ptrs[i]->obj,
      state.ptrs[i]->note_ptr_cookie,
      relocate_ptrs, &state);
      ggc_pch_write_object (state.d, state.f, state.ptrs[i]->obj,
       state.ptrs[i]->new_addr, state.ptrs[i]->size,
       state.ptrs[i]->note_ptr_fn == gt_pch_p_S);
      if (state.ptrs[i]->note_ptr_fn != gt_pch_p_S)
 memcpy (state.ptrs[i]->obj, this_object, state.ptrs[i]->size);
    }
  ggc_pch_finish (state.d, state.f);
  gt_pch_fixup_stringpool ();
  free (state.ptrs);
  htab_delete (saving_htab);
}
void
gt_pch_restore (FILE *f)
{
  const struct ggc_root_tab *const *rt;
  const struct ggc_root_tab *rti;
  size_t i;
  struct mmap_info mmi;
  int result;
  for (rt = gt_ggc_deletable_rtab; *rt; rt++)
    for (rti = *rt; rti->base != ((void *)0); rti++)
      memset (rti->base, 0, rti->stride);
  for (rt = gt_pch_scalar_rtab; *rt; rt++)
    for (rti = *rt; rti->base != ((void *)0); rti++)
      if (fread (rti->base, rti->stride, 1, f) != 1)
 fatal_error ("can't read PCH file: %m");
  for (rt = gt_ggc_rtab; *rt; rt++)
    for (rti = *rt; rti->base != ((void *)0); rti++)
      for (i = 0; i < rti->nelt; i++)
 if (fread ((char *)rti->base + rti->stride * i,
     sizeof (void *), 1, f) != 1)
   fatal_error ("can't read PCH file: %m");
  for (rt = gt_pch_cache_rtab; *rt; rt++)
    for (rti = *rt; rti->base != ((void *)0); rti++)
      for (i = 0; i < rti->nelt; i++)
 if (fread ((char *)rti->base + rti->stride * i,
     sizeof (void *), 1, f) != 1)
   fatal_error ("can't read PCH file: %m");
  if (fread (&mmi, sizeof (mmi), 1, f) != 1)
    fatal_error ("can't read PCH file: %m");
  result = host_hooks.gt_pch_use_address (mmi.preferred_base, mmi.size,
       fileno (f), mmi.offset);
  if (result < 0)
    fatal_error ("had to relocate PCH");
  if (result == 0)
    {
      if (fseek (f, mmi.offset, 0) != 0
   || fread (mmi.preferred_base, mmi.size, 1, f) != 1)
 fatal_error ("can't read PCH file: %m");
    }
  else if (fseek (f, mmi.offset + mmi.size, 0) != 0)
    fatal_error ("can't read PCH file: %m");
  ggc_pch_read (f, mmi.preferred_base);
  gt_pch_restore_stringpool ();
}
void *
default_gt_pch_get_address (size_t size ,
       int fd )
{
  return ((void *)0);
}
int
default_gt_pch_use_address (void *base, size_t size, int fd ,
       size_t offset )
{
  void *addr = xmalloc (size);
  return (addr == base) - 1;
}
size_t
default_gt_pch_alloc_granularity (void)
{
  return getpagesize();
}
void *
mmap_gt_pch_get_address (size_t size, int fd)
{
  void *ret;
  ret = mmap (((void *)0), size, 0x1 | 0x2, 0x02, fd, 0);
  if (ret == (void *) ((void *) -1))
    ret = ((void *)0);
  else
    munmap (ret, size);
  return ret;
}
int
mmap_gt_pch_use_address (void *base, size_t size, int fd, size_t offset)
{
  void *addr;
  if (size == 0)
    return -1;
  addr = mmap (base, size, 0x1 | 0x2, 0x02,
        fd, offset);
  return addr == base ? 1 : -1;
}
static double
ggc_rlimit_bound (double limit)
{
  struct rlimit rlim;
  if (getrlimit (__RLIMIT_RSS, &rlim) == 0
      && rlim.rlim_cur != (rlim_t) ((__rlim_t) -1)
      && rlim.rlim_cur < limit)
    limit = rlim.rlim_cur;
  if (getrlimit (RLIMIT_DATA, &rlim) == 0
      && rlim.rlim_cur != (rlim_t) ((__rlim_t) -1)
      && rlim.rlim_cur < limit)
    limit = rlim.rlim_cur;
  if (getrlimit (RLIMIT_AS, &rlim) == 0
      && rlim.rlim_cur != (rlim_t) ((__rlim_t) -1)
      && rlim.rlim_cur < limit)
    limit = rlim.rlim_cur;
  return limit;
}
int
ggc_min_expand_heuristic (void)
{
  double min_expand = physmem_total();
  min_expand = ggc_rlimit_bound (min_expand);
  min_expand /= 1024*1024*1024;
  min_expand *= 70;
  min_expand = ((min_expand) < (70) ? (min_expand) : (70));
  min_expand += 30;
  return min_expand;
}
int
ggc_min_heapsize_heuristic (void)
{
  double min_heap_kbytes = physmem_total();
  min_heap_kbytes = ggc_rlimit_bound (min_heap_kbytes);
  min_heap_kbytes /= 1024;
  min_heap_kbytes /= 8;
  min_heap_kbytes = ((min_heap_kbytes) > (4 * 1024) ? (min_heap_kbytes) : (4 * 1024));
  min_heap_kbytes = ((min_heap_kbytes) < (128 * 1024) ? (min_heap_kbytes) : (128 * 1024));
  return min_heap_kbytes;
}
void
init_ggc_heuristics (void)
{
  set_param_value ("ggc-min-expand", ggc_min_expand_heuristic());
  set_param_value ("ggc-min-heapsize", ggc_min_heapsize_heuristic());
}
void dump_ggc_loc_statistics (void)
{
}
static int max_allocno;
static int *reg_allocno;
struct allocno
{
  int reg;
  int size;
  int calls_crossed;
  int n_refs;
  int freq;
  int live_length;
  HARD_REG_SET hard_reg_conflicts;
  HARD_REG_SET hard_reg_preferences;
  HARD_REG_SET hard_reg_copy_preferences;
  HARD_REG_SET hard_reg_full_preferences;
  HARD_REG_SET regs_someone_prefers;
  unsigned char no_stack_reg;
};
static struct allocno *allocno;
static int *allocno_order;
static int *reg_may_share;
static long *conflicts;
static int allocno_row_words;
static HARD_REG_SET hard_regs_live;
static HARD_REG_SET no_global_alloc_regs;
static HARD_REG_SET regs_used_so_far;
static int local_reg_n_refs[53];
static int local_reg_freq[53];
static int local_reg_live_length[53];
static long *allocnos_live;
static rtx *regs_set;
static int n_regs_set;
static HARD_REG_SET eliminable_regset;
static int allocno_compare (const void *, const void *);
static void global_conflicts (void);
static void mirror_conflicts (void);
static void expand_preferences (void);
static void prune_preferences (void);
static void find_reg_global (int, HARD_REG_SET, int, int, int);
static void record_one_conflict (int);
static void record_conflicts (int *, int);
static void mark_reg_store (rtx, rtx, void *);
static void mark_reg_clobber (rtx, rtx, void *);
static void mark_reg_conflicts (rtx);
static void mark_reg_death (rtx);
static void mark_reg_live_nc (int, enum machine_mode);
static void set_preference (rtx, rtx);
static void dump_conflicts (FILE *);
static void reg_becomes_live_global (rtx, rtx, void *);
static void reg_dies_global (int, enum machine_mode, struct insn_chain *);
static void allocate_bb_info (void);
static void free_bb_info_global (void);
static void calculate_local_reg_bb_info (void);
static void set_up_bb_rts_numbers (void);
static int rpost_cmp (const void *, const void *);
static unsigned char modify_bb_reg_pav (basic_block, basic_block, unsigned char);
static void calculate_reg_pav (void);
static void make_accurate_live_analysis (void);
int
global_alloc (FILE *file)
{
  int retval;
  static const struct {const int from, to; } eliminables[] = {{ 16, 7}, { 16, 6}, { 20, 7}, { 20, 6}};
  int need_fp
    = (! flag_omit_frame_pointer
       || ((cfun->calls_alloca) && 1)
       || ix86_frame_pointer_required ());
  size_t i;
  rtx x;
  make_accurate_live_analysis ();
  max_allocno = 0;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (no_global_alloc_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (i = 0; i < (sizeof (eliminables) / sizeof ((eliminables)[0])); i++)
    {
      unsigned char cannot_elim
 = (! ((eliminables[i].to) == 7 ? ! frame_pointer_needed : 1)
    || (eliminables[i].to == 7 && need_fp));
      if (!regs_asm_clobbered[eliminables[i].from])
 {
   ((eliminable_regset)[(eliminables[i].from) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((eliminables[i].from) % ((unsigned) (8 * 4))));
   if (cannot_elim)
     ((no_global_alloc_regs)[(eliminables[i].from) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((eliminables[i].from) % ((unsigned) (8 * 4))));
 }
      else if (cannot_elim)
 error ("%s cannot be used in asm here",
        reg_names[eliminables[i].from]);
      else
 regs_ever_live[eliminables[i].from] = 1;
    }
  if (!regs_asm_clobbered[6])
    {
      ((eliminable_regset)[(6) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((6) % ((unsigned) (8 * 4))));
      if (need_fp)
 ((no_global_alloc_regs)[(6) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((6) % ((unsigned) (8 * 4))));
    }
  else if (need_fp)
    error ("%s cannot be used in asm here",
    reg_names[6]);
  else
    regs_ever_live[6] = 1;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (regs_used_so_far); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (i = 0; i < 53; i++)
    if (regs_ever_live[i] || call_used_regs[i])
      ((regs_used_so_far)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
  for (i = 53; i < (size_t) max_regno; i++)
    if (reg_renumber[i] >= 0)
      ((regs_used_so_far)[(reg_renumber[i]) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((reg_renumber[i]) % ((unsigned) (8 * 4))));
  reg_allocno = xmalloc (max_regno * sizeof (int));
  for (i = 0; i < 53; i++)
    reg_allocno[i] = -1;
  reg_may_share = xcalloc (max_regno, sizeof (int));
  for (x = regs_may_share; x; x = ((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))
    {
      int r1 = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      int r2 = (((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      if (r1 > r2)
 reg_may_share[r1] = r2;
      else
 reg_may_share[r2] = r1;
    }
  for (i = 53; i < (size_t) max_regno; i++)
    if ((((reg_n_info)->data.reg[i])->refs) != 0 && (((reg_n_info)->data.reg[i])->live_length) != -1
 && (! (cfun->has_nonlocal_label)
     || (((reg_n_info)->data.reg[i])->calls_crossed) == 0))
      {
 if (reg_renumber[i] < 0 && reg_may_share[i] && reg_allocno[reg_may_share[i]] >= 0)
   reg_allocno[i] = reg_allocno[reg_may_share[i]];
 else
   reg_allocno[i] = max_allocno++;
 if ((((reg_n_info)->data.reg[i])->live_length) == 0)
   abort ();
      }
    else
      reg_allocno[i] = -1;
  allocno = xcalloc (max_allocno, sizeof (struct allocno));
  for (i = 53; i < (size_t) max_regno; i++)
    if (reg_allocno[i] >= 0)
      {
 int num = reg_allocno[i];
 allocno[num].reg = i;
 allocno[num].size = ((((unsigned short) mode_size[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode)]) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4));
 allocno[num].calls_crossed += (((reg_n_info)->data.reg[i])->calls_crossed);
 allocno[num].n_refs += (((reg_n_info)->data.reg[i])->refs);
 allocno[num].freq += (((reg_n_info)->data.reg[i])->freq);
 if (allocno[num].live_length < (((reg_n_info)->data.reg[i])->live_length))
   allocno[num].live_length = (((reg_n_info)->data.reg[i])->live_length);
      }
  memset (local_reg_live_length, 0, sizeof local_reg_live_length);
  memset (local_reg_n_refs, 0, sizeof local_reg_n_refs);
  memset (local_reg_freq, 0, sizeof local_reg_freq);
  for (i = 53; i < (size_t) max_regno; i++)
    if (reg_renumber[i] >= 0)
      {
 int regno = reg_renumber[i];
 int endregno = regno + hard_regno_nregs[regno][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode)];
 int j;
 for (j = regno; j < endregno; j++)
   {
     local_reg_n_refs[j] += (((reg_n_info)->data.reg[i])->refs);
     local_reg_freq[j] += (((reg_n_info)->data.reg[i])->freq);
     local_reg_live_length[j] += (((reg_n_info)->data.reg[i])->live_length);
   }
      }
  for (i = 0; i < 53; i++)
    if (regs_ever_live[i])
      local_reg_n_refs[i] = 0, local_reg_freq[i] = 0;
  allocno_row_words = (max_allocno + (8 * 4) - 1) / (8 * 4);
  conflicts = xcalloc (max_allocno * allocno_row_words, sizeof (long));
  allocnos_live = xmalloc (allocno_row_words * sizeof (long));
  if (max_allocno > 0)
    {
      global_conflicts ();
      mirror_conflicts ();
      for (i = 0; i < (size_t) max_allocno; i++)
 {
   do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[i].hard_reg_conflicts), *scan_fp_ = (eliminable_regset); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0)
                        ;
   do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[i].hard_reg_copy_preferences), *scan_fp_ = (eliminable_regset); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0)
                        ;
   do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[i].hard_reg_preferences), *scan_fp_ = (eliminable_regset); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0)
                        ;
 }
      expand_preferences ();
      allocno_order = xmalloc (max_allocno * sizeof (int));
      for (i = 0; i < (size_t) max_allocno; i++)
 allocno_order[i] = i;
      for (i = 0; i < (size_t) max_allocno; i++)
 {
   if (allocno[i].size == 0)
     allocno[i].size = 1;
   if (allocno[i].live_length == 0)
     allocno[i].live_length = -1;
 }
      qsort (allocno_order, max_allocno, sizeof (int), allocno_compare);
      prune_preferences ();
      if (file)
 dump_conflicts (file);
      for (i = 0; i < (size_t) max_allocno; i++)
 if (reg_renumber[allocno[allocno_order[i]].reg] < 0
     && (((reg_n_info)->data.reg[allocno[allocno_order[i]].reg])->live_length) >= 0)
   {
     if (((int) LIM_REG_CLASSES) > 1)
       {
  find_reg_global (allocno_order[i], 0, 0, 0, 0);
  if (reg_renumber[allocno[allocno_order[i]].reg] >= 0)
    continue;
       }
     if (reg_alternate_class (allocno[allocno_order[i]].reg) != NO_REGS)
       find_reg_global (allocno_order[i], 0, 1, 0, 0);
   }
      free (allocno_order);
    }
    {
      build_insn_chain (get_insns ());
      retval = reload (get_insns (), 1);
    }
  free (reg_allocno);
  free (reg_may_share);
  free (allocno);
  free (conflicts);
  free (allocnos_live);
  return retval;
}
static int
allocno_compare (const void *v1p, const void *v2p)
{
  int v1 = *(const int *)v1p, v2 = *(const int *)v2p;
  int pri1
    = (((double) (floor_log2_wide ((unsigned long) (allocno[v1].n_refs)) * allocno[v1].freq)
 / allocno[v1].live_length)
       * (10000 / 1000) * allocno[v1].size);
  int pri2
    = (((double) (floor_log2_wide ((unsigned long) (allocno[v2].n_refs)) * allocno[v2].freq)
 / allocno[v2].live_length)
       * (10000 / 1000) * allocno[v2].size);
  if (pri2 - pri1)
    return pri2 - pri1;
  return v1 - v2;
}
static void
global_conflicts (void)
{
  int i;
  basic_block b;
  rtx insn;
  int *block_start_allocnos;
  regs_set = xmalloc (max_parallel * sizeof (rtx) * 2);
  block_start_allocnos = xmalloc (max_allocno * sizeof (int));
  for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = b->next_bb)
    {
      memset (allocnos_live, 0, allocno_row_words * sizeof (long));
      {
 regset old = b->global_live_at_start;
 int ax = 0;
 do { do { HARD_REG_ELT_TYPE *scan_tp_ = (hard_regs_live); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&hard_regs_live, old); } while (0);
 do { bitmap_element *ptr_ = (old)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { int a = reg_allocno[i]; if (a >= 0) { (allocnos_live[(unsigned) (a) / (8 * 4)] |= ((long) 1 << ((unsigned) (a) % (8 * 4)))); block_start_allocnos[ax++] = a; } else if ((a = reg_renumber[i]) >= 0) mark_reg_live_nc (a, ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode)); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
         ;
 record_conflicts (block_start_allocnos, ax);
 {
   edge e;
   for (e = b->pred; e ; e = e->pred_next)
     if (e->flags & 2)
       break;
   if (e != ((void *)0))
     {
       do { int i_; int allocno_; long *p_ = (allocnos_live); for (i_ = allocno_row_words - 1, allocno_ = 0; i_ >= 0; i_--, allocno_ += (8 * 4)) { unsigned long word_ = (unsigned long) *p_++; for ((ax) = allocno_; word_; word_ >>= 1, (ax)++) { if (word_ & 1) {{ allocno[ax].no_stack_reg = 1; };} } } } while (0)
            ;
       for (ax = 8; ax <= (8 + 7); ax++)
  record_one_conflict (ax);
       if (! (cfun->has_nonlocal_label))
  for (ax = 0; ax < 53; ax++)
    if (call_used_regs [ax])
      record_one_conflict (ax);
     }
 }
      }
      insn = (b)->head_;
      while (1)
 {
   enum rtx_code code = ((enum rtx_code) (insn)->code);
   rtx link;
   n_regs_set = 0;
   if (code == INSN || code == CALL_INSN || code == JUMP_INSN)
     {
       note_stores ((((insn)->u.fld[5]).rtx1), mark_reg_clobber, ((void *)0));
       for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
  if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEAD)
    mark_reg_death ((((link)->u.fld[0]).rtx1));
       note_stores ((((insn)->u.fld[5]).rtx1), mark_reg_store, ((void *)0));
       if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL && multiple_sets (insn))
  for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEAD)
      {
        int used_in_output = 0;
        int i;
        rtx reg = (((link)->u.fld[0]).rtx1);
        for (i = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
   {
     rtx set = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]);
     if (((enum rtx_code) (set)->code) == SET
         && !(((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
         && !rtx_equal_p (reg, (((set)->u.fld[0]).rtx1))
         && reg_overlap_mentioned_p (reg, (((set)->u.fld[0]).rtx1)))
       used_in_output = 1;
   }
        if (used_in_output)
   mark_reg_conflicts (reg);
      }
       while (n_regs_set-- > 0)
  {
    rtx note = find_regno_note (insn, REG_UNUSED,
           (((regs_set[n_regs_set])->u.fld[0]).rtuint));
    if (note)
      mark_reg_death ((((note)->u.fld[0]).rtx1));
  }
     }
   if (insn == (b)->end_)
     break;
   insn = (((insn)->u.fld[2]).rtx1);
 }
    }
  free (block_start_allocnos);
  free (regs_set);
}
static void
expand_preferences (void)
{
  rtx insn;
  rtx link;
  rtx set;
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
 && (set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != 0
 && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
 && reg_allocno[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] >= 0)
      for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
 if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEAD
     && (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == REG)
     && reg_allocno[((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] >= 0
     && ! (conflicts[(reg_allocno[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]) * allocno_row_words + (unsigned) (reg_allocno[((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]) / (8 * 4)] & ((long) 1 << ((unsigned) (reg_allocno[((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]) % (8 * 4))))
                                           )
   {
     int a1 = reg_allocno[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)];
     int a2 = reg_allocno[((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint)];
     if ((((link)->u.fld[0]).rtx1) == (((set)->u.fld[1]).rtx1))
       {
  do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[a1].hard_reg_copy_preferences), *scan_fp_ = (allocno[a2].hard_reg_copy_preferences); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0)
                                            ;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[a2].hard_reg_copy_preferences), *scan_fp_ = (allocno[a1].hard_reg_copy_preferences); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0)
                                            ;
       }
     do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[a1].hard_reg_preferences), *scan_fp_ = (allocno[a2].hard_reg_preferences); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0)
                                          ;
     do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[a2].hard_reg_preferences), *scan_fp_ = (allocno[a1].hard_reg_preferences); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0)
                                          ;
     do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[a1].hard_reg_full_preferences), *scan_fp_ = (allocno[a2].hard_reg_full_preferences); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0)
                                               ;
     do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[a2].hard_reg_full_preferences), *scan_fp_ = (allocno[a1].hard_reg_full_preferences); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0)
                                               ;
   }
}
static void
prune_preferences (void)
{
  int i;
  int num;
  int *allocno_to_order = xmalloc (max_allocno * sizeof (int));
  for (i = max_allocno - 1; i >= 0; i--)
    {
      HARD_REG_SET temp;
      num = allocno_order[i];
      allocno_to_order[num] = i;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (temp), *scan_fp_ = (allocno[num].hard_reg_conflicts); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      if (allocno[num].calls_crossed == 0)
 do { HARD_REG_ELT_TYPE *scan_tp_ = (temp), *scan_fp_ = (fixed_reg_set); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
      else
 do { HARD_REG_ELT_TYPE *scan_tp_ = (temp), *scan_fp_ = (call_used_reg_set); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (temp), *scan_fp_ = (reg_class_contents[(int) reg_preferred_class (allocno[num].reg)]); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0)
                                                                   ;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[num].hard_reg_preferences), *scan_fp_ = (temp); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[num].hard_reg_copy_preferences), *scan_fp_ = (temp); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[num].hard_reg_full_preferences), *scan_fp_ = (temp); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
    }
  for (i = max_allocno - 1; i >= 0; i--)
    {
      HARD_REG_SET temp, temp2;
      int allocno2;
      num = allocno_order[i];
      do { HARD_REG_ELT_TYPE *scan_tp_ = (temp); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (temp2); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      do { int i_; int allocno_; long *p_ = (conflicts + num * allocno_row_words); for (i_ = allocno_row_words - 1, allocno_ = 0; i_ >= 0; i_--, allocno_ += (8 * 4)) { unsigned long word_ = (unsigned long) *p_++; for ((allocno2) = allocno_; word_; word_ >>= 1, (allocno2)++) { if (word_ & 1) {{ if (allocno_to_order[allocno2] > i) { if (allocno[allocno2].size <= allocno[num].size) do { HARD_REG_ELT_TYPE *scan_tp_ = (temp), *scan_fp_ = (allocno[allocno2].hard_reg_full_preferences); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0); else do { HARD_REG_ELT_TYPE *scan_tp_ = (temp2), *scan_fp_ = (allocno[allocno2].hard_reg_full_preferences); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0); } };} } } } while (0)
   ;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (temp), *scan_fp_ = (allocno[num].hard_reg_full_preferences); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (temp), *scan_fp_ = (temp2); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[num].regs_someone_prefers), *scan_fp_ = (temp); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
    }
  free (allocno_to_order);
}
static void
find_reg_global (int num, HARD_REG_SET losers, int alt_regs_p, int accept_call_clobbered, int retrying)
{
  int i, best_reg, pass;
  HARD_REG_SET used, used1, used2;
  enum reg_class class = (alt_regs_p
     ? reg_alternate_class (allocno[num].reg)
     : reg_preferred_class (allocno[num].reg));
  enum machine_mode mode = ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[allocno[num].reg])->mode);
  if (accept_call_clobbered)
    do { HARD_REG_ELT_TYPE *scan_tp_ = (used1), *scan_fp_ = (call_fixed_reg_set); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  else if (allocno[num].calls_crossed == 0)
    do { HARD_REG_ELT_TYPE *scan_tp_ = (used1), *scan_fp_ = (fixed_reg_set); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  else
    do { HARD_REG_ELT_TYPE *scan_tp_ = (used1), *scan_fp_ = (call_used_reg_set); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used1), *scan_fp_ = (no_global_alloc_regs); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
  if (losers)
    do { HARD_REG_ELT_TYPE *scan_tp_ = (used1), *scan_fp_ = (losers); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used1), *scan_fp_ = (reg_class_contents[(int) class]); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used2), *scan_fp_ = (used1); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used1), *scan_fp_ = (allocno[num].hard_reg_conflicts); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
  cannot_change_mode_set_regs (&used1, mode, allocno[num].reg);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used), *scan_fp_ = (used1); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used), *scan_fp_ = (regs_used_so_far); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used), *scan_fp_ = (allocno[num].regs_someone_prefers); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
  best_reg = -1;
  for (i = 53, pass = 0;
       pass <= 1 && i >= 53;
       pass++)
    {
      if (pass == 1)
 do { HARD_REG_ELT_TYPE *scan_tp_ = (used), *scan_fp_ = (used1); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      for (i = 0; i < 53; i++)
 {
   int regno = reg_alloc_order[i];
   if (! (!!((used)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
       && ix86_hard_regno_mode_ok ((regno), (mode))
       && (allocno[num].calls_crossed == 0
    || accept_call_clobbered
    || ! 0))
     {
       int j;
       int lim = regno + hard_regno_nregs[regno][mode];
       for (j = regno + 1;
     (j < lim
      && ! (!!((used)[(j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4)))))));
     j++);
       if (j == lim)
  {
    best_reg = regno;
    break;
  }
     }
   }
      }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[num].hard_reg_copy_preferences), *scan_fp_ = (used); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_xp_ = (allocno[num].hard_reg_copy_preferences), *scan_yp_ = (reg_class_contents[(int) NO_REGS]); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto no_copy_prefs; } while (0)
                                                     ;
  if (best_reg >= 0)
    {
      for (i = 0; i < 53; i++)
 if ((!!((allocno[num].hard_reg_copy_preferences)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
     && ix86_hard_regno_mode_ok ((i), (mode))
     && (allocno[num].calls_crossed == 0
  || accept_call_clobbered
  || ! 0)
     && ((regclass_map[i]) == (regclass_map[best_reg])
  || reg_class_subset_p ((regclass_map[i]),
           (regclass_map[best_reg]))
  || reg_class_subset_p ((regclass_map[best_reg]),
           (regclass_map[i]))))
     {
       int j;
       int lim = i + hard_regno_nregs[i][mode];
       for (j = i + 1;
     (j < lim
      && ! (!!((used)[(j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4))))))
      && ((regclass_map[j])
   == (regclass_map[best_reg + (j - i)])
   || reg_class_subset_p ((regclass_map[j]),
            (regclass_map[best_reg + (j - i)]))
   || reg_class_subset_p ((regclass_map[best_reg + (j - i)]),
            (regclass_map[j]))));
     j++);
       if (j == lim)
  {
    best_reg = i;
    goto no_prefs;
  }
     }
    }
 no_copy_prefs:
  do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[num].hard_reg_preferences), *scan_fp_ = (used); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_xp_ = (allocno[num].hard_reg_preferences), *scan_yp_ = (reg_class_contents[(int) NO_REGS]); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto no_prefs; } while (0)
                                                ;
  if (best_reg >= 0)
    {
      for (i = 0; i < 53; i++)
 if ((!!((allocno[num].hard_reg_preferences)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
     && ix86_hard_regno_mode_ok ((i), (mode))
     && (allocno[num].calls_crossed == 0
  || accept_call_clobbered
  || ! 0)
     && ((regclass_map[i]) == (regclass_map[best_reg])
  || reg_class_subset_p ((regclass_map[i]),
           (regclass_map[best_reg]))
  || reg_class_subset_p ((regclass_map[best_reg]),
           (regclass_map[i]))))
     {
       int j;
       int lim = i + hard_regno_nregs[i][mode];
       for (j = i + 1;
     (j < lim
      && ! (!!((used)[(j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4))))))
      && ((regclass_map[j])
   == (regclass_map[best_reg + (j - i)])
   || reg_class_subset_p ((regclass_map[j]),
            (regclass_map[best_reg + (j - i)]))
   || reg_class_subset_p ((regclass_map[best_reg + (j - i)]),
            (regclass_map[j]))));
     j++);
       if (j == lim)
  {
    best_reg = i;
    break;
  }
     }
    }
 no_prefs:
  if (flag_caller_saves && best_reg < 0)
    {
      if (! accept_call_clobbered
   && allocno[num].calls_crossed != 0
   && (4 * (allocno[num].calls_crossed) < (allocno[num].n_refs))
                                    )
 {
   HARD_REG_SET new_losers;
   if (! losers)
     do { HARD_REG_ELT_TYPE *scan_tp_ = (new_losers); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
   else
     do { HARD_REG_ELT_TYPE *scan_tp_ = (new_losers), *scan_fp_ = (losers); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (new_losers), *scan_fp_ = (losing_caller_save_reg_set); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
   find_reg_global (num, new_losers, alt_regs_p, 1, retrying);
   if (reg_renumber[allocno[num].reg] >= 0)
     {
       caller_save_needed = 1;
       return;
     }
 }
    }
  if (best_reg < 0 && !retrying
      && allocno[num].size == 1)
    {
      for (i = 53 - 1; i >= 0; i--)
 {
   int regno = reg_alloc_order[i];
   if (local_reg_n_refs[regno] != 0
       && ! (!!((used2)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
       && ix86_hard_regno_mode_ok ((regno), (mode))
       && hard_regno_nregs[regno][mode] == 1
       && (allocno[num].calls_crossed == 0
    || accept_call_clobbered
    || ! 0)
       && ! invalid_mode_change_p (regno, (regclass_map[regno]),
       mode)
      && (!allocno[num].no_stack_reg
   || regno < 8 || regno > (8 + 7))
       )
     {
       double tmp1 = ((double) local_reg_freq[regno]
       / local_reg_live_length[regno]);
       double tmp2 = ((double) allocno[num].freq
        / allocno[num].live_length);
       if (tmp1 < tmp2)
  {
    int k;
    for (k = 0; k < max_regno; k++)
      if (reg_renumber[k] >= 0)
        {
   int r = reg_renumber[k];
   int endregno
     = r + hard_regno_nregs[r][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[k])->mode)];
   if (regno >= r && regno < endregno)
     reg_renumber[k] = -1;
        }
    best_reg = regno;
    break;
  }
     }
 }
    }
  if (best_reg >= 0)
    {
      int lim, j;
      HARD_REG_SET this_reg;
      reg_renumber[allocno[num].reg] = best_reg;
      if (reg_may_share[allocno[num].reg])
 for (j = 53; j < max_regno; j++)
   if (reg_allocno[j] == num)
     reg_renumber[j] = best_reg;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (this_reg); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      lim = best_reg + hard_regno_nregs[best_reg][mode];
      for (j = best_reg; j < lim; j++)
 {
   ((this_reg)[(j) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4))));
   ((regs_used_so_far)[(j) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4))));
   local_reg_n_refs[j] = 0;
   local_reg_freq[j] = 0;
 }
      lim = num;
      do { int i_; int allocno_; long *p_ = (conflicts + lim * allocno_row_words); for (i_ = allocno_row_words - 1, allocno_ = 0; i_ >= 0; i_--, allocno_ += (8 * 4)) { unsigned long word_ = (unsigned long) *p_++; for ((j) = allocno_; word_; word_ >>= 1, (j)++) { if (word_ & 1) {{ do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[j].hard_reg_conflicts), *scan_fp_ = (this_reg); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0); };} } } } while (0)
   ;
    }
}
void
retry_global_alloc (int regno, HARD_REG_SET forbidden_regs)
{
  int alloc_no = reg_allocno[regno];
  if (alloc_no >= 0)
    {
      if (((int) LIM_REG_CLASSES) > 1)
 find_reg_global (alloc_no, forbidden_regs, 0, 0, 1);
      if (reg_renumber[regno] < 0
   && reg_alternate_class (regno) != NO_REGS)
 find_reg_global (alloc_no, forbidden_regs, 1, 0, 1);
      if (reg_renumber[regno] >= 0)
 {
   ((((cfun->emit->x_regno_reg_rtx)[regno])->u.fld[0]).rtuint) = reg_renumber[regno];
   mark_home_live (regno);
 }
    }
}
static void
record_one_conflict (int regno)
{
  int j;
  if (regno < 53)
    do { int i_; int allocno_; long *p_ = (allocnos_live); for (i_ = allocno_row_words - 1, allocno_ = 0; i_ >= 0; i_--, allocno_ += (8 * 4)) { unsigned long word_ = (unsigned long) *p_++; for ((j) = allocno_; word_; word_ >>= 1, (j)++) { if (word_ & 1) {{ ((allocno[j].hard_reg_conflicts)[(regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))); };} } } } while (0)
        ;
  else
    {
      int ialloc = reg_allocno[regno];
      int ialloc_prod = ialloc * allocno_row_words;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[ialloc].hard_reg_conflicts), *scan_fp_ = (hard_regs_live); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
      for (j = allocno_row_words - 1; j >= 0; j--)
 conflicts[ialloc_prod + j] |= allocnos_live[j];
    }
}
static void
record_conflicts (int *allocno_vec, int len)
{
  while (--len >= 0)
    do { HARD_REG_ELT_TYPE *scan_tp_ = (allocno[allocno_vec[len]].hard_reg_conflicts), *scan_fp_ = (hard_regs_live); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0)
                                     ;
}
static void
mirror_conflicts (void)
{
  int i, j;
  int rw = allocno_row_words;
  int rwb = rw * (8 * 4);
  long *p = conflicts;
  long *q0 = conflicts, *q1, *q2;
  unsigned long mask;
  for (i = max_allocno - 1, mask = 1; i >= 0; i--, mask <<= 1)
    {
      if (! mask)
 {
   mask = 1;
   q0++;
 }
      for (j = allocno_row_words - 1, q1 = q0; j >= 0; j--, q1 += rwb)
 {
   unsigned long word;
   for (word = (unsigned long) *p++, q2 = q1; word;
        word >>= 1, q2 += rw)
     {
       if (word & 1)
  *q2 |= mask;
     }
 }
    }
}
static void
mark_reg_store (rtx reg, rtx setter, void *data )
{
  int regno;
  if (((enum rtx_code) (reg)->code) == SUBREG)
    reg = (((reg)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (reg)->code) == REG))
    return;
  regs_set[n_regs_set++] = reg;
  if (setter && ((enum rtx_code) (setter)->code) != CLOBBER)
    set_preference (reg, (((setter)->u.fld[1]).rtx1));
  regno = (((reg)->u.fld[0]).rtuint);
  if (regno >= 53)
    {
      if (reg_allocno[regno] >= 0)
 {
   (allocnos_live[(unsigned) (reg_allocno[regno]) / (8 * 4)] |= ((long) 1 << ((unsigned) (reg_allocno[regno]) % (8 * 4))));
   record_one_conflict (regno);
 }
    }
  if (reg_renumber[regno] >= 0)
    regno = reg_renumber[regno];
  if (regno < 53 && ! fixed_regs[regno])
    {
      int last = regno + hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)];
      while (regno < last)
 {
   record_one_conflict (regno);
   ((hard_regs_live)[(regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))));
   regno++;
 }
    }
}
static void
mark_reg_clobber (rtx reg, rtx setter, void *data)
{
  if (((enum rtx_code) (setter)->code) == CLOBBER)
    mark_reg_store (reg, setter, data);
}
static void
mark_reg_conflicts (rtx reg)
{
  int regno;
  if (((enum rtx_code) (reg)->code) == SUBREG)
    reg = (((reg)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (reg)->code) == REG))
    return;
  regno = (((reg)->u.fld[0]).rtuint);
  if (regno >= 53)
    {
      if (reg_allocno[regno] >= 0)
 record_one_conflict (regno);
    }
  if (reg_renumber[regno] >= 0)
    regno = reg_renumber[regno];
  if (regno < 53 && ! fixed_regs[regno])
    {
      int last = regno + hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)];
      while (regno < last)
 {
   record_one_conflict (regno);
   regno++;
 }
    }
}
static void
mark_reg_death (rtx reg)
{
  int regno = (((reg)->u.fld[0]).rtuint);
  if (regno >= 53)
    {
      if (reg_allocno[regno] >= 0)
 (allocnos_live[(unsigned) (reg_allocno[regno]) / (8 * 4)] &= ~((long) 1 << ((unsigned) (reg_allocno[regno]) % (8 * 4))));
    }
  if (reg_renumber[regno] >= 0)
    regno = reg_renumber[regno];
  if (regno < 53 && ! fixed_regs[regno])
    {
      int last = regno + hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)];
      while (regno < last)
 {
   ((hard_regs_live)[(regno) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))));
   regno++;
 }
    }
}
static void
mark_reg_live_nc (int regno, enum machine_mode mode)
{
  int last = regno + hard_regno_nregs[regno][mode];
  while (regno < last)
    {
      ((hard_regs_live)[(regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))));
      regno++;
    }
}
static void
set_preference (rtx dest, rtx src)
{
  unsigned int src_regno, dest_regno;
  int offset = 0;
  unsigned int i;
  int copy = 1;
  if ((rtx_format[(int) (((enum rtx_code) (src)->code))])[0] == 'e')
    src = (((src)->u.fld[0]).rtx1), copy = 0;
  if ((((enum rtx_code) (src)->code) == REG))
    src_regno = (((src)->u.fld[0]).rtuint);
  else if (((enum rtx_code) (src)->code) == SUBREG && (((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == REG))
    {
      src_regno = ((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      if (((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
 offset += subreg_regno_offset (((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
           ((enum machine_mode) ((((src)->u.fld[0]).rtx1))->mode),
           (((src)->u.fld[1]).rtuint),
           ((enum machine_mode) (src)->mode));
      else
 offset += ((((src)->u.fld[1]).rtuint)
     / (0 ? 8 : 4));
    }
  else
    return;
  if ((((enum rtx_code) (dest)->code) == REG))
    dest_regno = (((dest)->u.fld[0]).rtuint);
  else if (((enum rtx_code) (dest)->code) == SUBREG && (((enum rtx_code) ((((dest)->u.fld[0]).rtx1))->code) == REG))
    {
      dest_regno = ((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      if (((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
 offset -= subreg_regno_offset (((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
           ((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode),
           (((dest)->u.fld[1]).rtuint),
           ((enum machine_mode) (dest)->mode));
      else
 offset -= ((((dest)->u.fld[1]).rtuint)
     / (0 ? 8 : 4));
    }
  else
    return;
  if (reg_renumber[src_regno] >= 0)
    src_regno = reg_renumber[src_regno];
  if (reg_renumber[dest_regno] >= 0)
    dest_regno = reg_renumber[dest_regno];
  if (dest_regno < 53 && src_regno >= 53
      && reg_allocno[src_regno] >= 0)
    {
      dest_regno -= offset;
      if (dest_regno < 53)
 {
   if (copy)
     ((allocno[reg_allocno[src_regno]].hard_reg_copy_preferences)[(dest_regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((dest_regno) % ((unsigned) (8 * 4))))
                                      ;
   ((allocno[reg_allocno[src_regno]].hard_reg_preferences)[(dest_regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((dest_regno) % ((unsigned) (8 * 4))))
                                           ;
   for (i = dest_regno;
        i < dest_regno + hard_regno_nregs[dest_regno][((enum machine_mode) (dest)->mode)];
        i++)
     ((allocno[reg_allocno[src_regno]].hard_reg_full_preferences)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
 }
    }
  if (src_regno < 53 && dest_regno >= 53
      && reg_allocno[dest_regno] >= 0)
    {
      src_regno += offset;
      if (src_regno < 53)
 {
   if (copy)
     ((allocno[reg_allocno[dest_regno]].hard_reg_copy_preferences)[(src_regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((src_regno) % ((unsigned) (8 * 4))))
                                      ;
   ((allocno[reg_allocno[dest_regno]].hard_reg_preferences)[(src_regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((src_regno) % ((unsigned) (8 * 4))))
                                           ;
   for (i = src_regno;
        i < src_regno + hard_regno_nregs[src_regno][((enum machine_mode) (src)->mode)];
        i++)
     ((allocno[reg_allocno[dest_regno]].hard_reg_full_preferences)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
 }
    }
}
void
mark_elimination (int from, int to)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      regset r = bb->global_live_at_start;
      if (bitmap_bit_p (r, from))
 {
   bitmap_clear_bit (r, from);
   bitmap_set_bit (r, to);
 }
    }
}
static regset live_relevant_regs;
static void
reg_becomes_live_global (rtx reg, rtx setter , void *regs_set)
{
  int regno;
  if (((enum rtx_code) (reg)->code) == SUBREG)
    reg = (((reg)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (reg)->code) == REG))
    return;
  regno = (((reg)->u.fld[0]).rtuint);
  if (regno < 53)
    {
      int nregs = hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)];
      while (nregs-- > 0)
 {
   bitmap_set_bit (live_relevant_regs, regno);
   if (! fixed_regs[regno])
     bitmap_set_bit ((regset) regs_set, regno);
   regno++;
 }
    }
  else if (reg_renumber[regno] >= 0)
    {
      bitmap_set_bit (live_relevant_regs, regno);
      bitmap_set_bit ((regset) regs_set, regno);
    }
}
static void
reg_dies_global (int regno, enum machine_mode mode, struct insn_chain *chain)
{
  if (regno < 53)
    {
      int nregs = hard_regno_nregs[regno][mode];
      while (nregs-- > 0)
 {
   bitmap_clear_bit (live_relevant_regs, regno);
   if (! fixed_regs[regno])
     bitmap_set_bit (&chain->dead_or_set, regno);
   regno++;
 }
    }
  else
    {
      bitmap_clear_bit (live_relevant_regs, regno);
      if (reg_renumber[regno] >= 0)
 bitmap_set_bit (&chain->dead_or_set, regno);
    }
}
void
build_insn_chain (rtx first)
{
  struct insn_chain **p = &reload_insn_chain;
  struct insn_chain *prev = 0;
  basic_block b = ENTRY_BLOCK_PTR->next_bb;
  regset_head live_relevant_regs_head;
  live_relevant_regs = bitmap_initialize (&live_relevant_regs_head, 1);
  for (; first; first = (((first)->u.fld[2]).rtx1))
    {
      struct insn_chain *c;
      if (first == (b)->head_)
 {
   int i;
   bitmap_clear (live_relevant_regs);
   do { bitmap_element *ptr_ = (b->global_live_at_start)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { if (i < 53 ? ! (!!((eliminable_regset)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))) : reg_renumber[i] >= 0) bitmap_set_bit (live_relevant_regs, i); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
        ;
 }
      if (((enum rtx_code) (first)->code) != NOTE && ((enum rtx_code) (first)->code) != BARRIER)
 {
   c = new_insn_chain ();
   c->prev = prev;
   prev = c;
   *p = c;
   p = &c->next;
   c->insn = first;
   c->block = b->index;
   if (((((enum rtx_code) (first)->code) == INSN) || (((enum rtx_code) (first)->code) == JUMP_INSN) || (((enum rtx_code) (first)->code) == CALL_INSN)))
     {
       rtx link;
       for (link = (((first)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
  if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEAD
      && (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == REG))
    reg_dies_global (((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint), ((enum machine_mode) ((((link)->u.fld[0]).rtx1))->mode),
       c);
       bitmap_copy (&c->live_throughout, live_relevant_regs);
       note_stores ((((first)->u.fld[5]).rtx1), reg_becomes_live_global,
      &c->dead_or_set);
     }
   else
     bitmap_copy (&c->live_throughout, live_relevant_regs);
   if (((((enum rtx_code) (first)->code) == INSN) || (((enum rtx_code) (first)->code) == JUMP_INSN) || (((enum rtx_code) (first)->code) == CALL_INSN)))
     {
       rtx link;
       for (link = (((first)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
  if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_UNUSED
      && (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == REG))
    reg_dies_global (((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint), ((enum machine_mode) ((((link)->u.fld[0]).rtx1))->mode),
       c);
     }
 }
      if (first == (b)->end_)
 b = b->next_bb;
      if (b == EXIT_BLOCK_PTR)
 {
   for (first = (((first)->u.fld[2]).rtx1) ; first; first = (((first)->u.fld[2]).rtx1))
     if (((((enum rtx_code) (first)->code) == INSN) || (((enum rtx_code) (first)->code) == JUMP_INSN) || (((enum rtx_code) (first)->code) == CALL_INSN))
  && ((enum rtx_code) ((((first)->u.fld[5]).rtx1))->code) != USE
  && ! ((((enum rtx_code) ((((first)->u.fld[5]).rtx1))->code) == ADDR_VEC
         || ((enum rtx_code) ((((first)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC)
        && prev_real_insn (first) != 0
        && ((enum rtx_code) (prev_real_insn (first))->code) == JUMP_INSN))
       abort ();
   break;
 }
    }
  do { if (live_relevant_regs) { bitmap_clear (live_relevant_regs); (live_relevant_regs) = 0; } } while (0);
  *p = 0;
}
static void
dump_conflicts (FILE *file)
{
  int i;
  int has_preferences;
  int nregs;
  nregs = 0;
  for (i = 0; i < max_allocno; i++)
    {
      if (reg_renumber[allocno[allocno_order[i]].reg] >= 0)
 continue;
      nregs++;
    }
  fprintf (file, ";; %d regs to allocate:", nregs);
  for (i = 0; i < max_allocno; i++)
    {
      int j;
      if (reg_renumber[allocno[allocno_order[i]].reg] >= 0)
 continue;
      fprintf (file, " %d", allocno[allocno_order[i]].reg);
      for (j = 0; j < max_regno; j++)
 if (reg_allocno[j] == allocno_order[i]
     && j != allocno[allocno_order[i]].reg)
   fprintf (file, "+%d", j);
      if (allocno[allocno_order[i]].size != 1)
 fprintf (file, " (%d)", allocno[allocno_order[i]].size);
    }
  fprintf (file, "\n");
  for (i = 0; i < max_allocno; i++)
    {
      int j;
      fprintf (file, ";; %d conflicts:", allocno[i].reg);
      for (j = 0; j < max_allocno; j++)
 if ((conflicts[(j) * allocno_row_words + (unsigned) (i) / (8 * 4)] & ((long) 1 << ((unsigned) (i) % (8 * 4)))))
   fprintf (file, " %d", allocno[j].reg);
      for (j = 0; j < 53; j++)
 if ((!!((allocno[i].hard_reg_conflicts)[(j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4)))))))
   fprintf (file, " %d", j);
      fprintf (file, "\n");
      has_preferences = 0;
      for (j = 0; j < 53; j++)
 if ((!!((allocno[i].hard_reg_preferences)[(j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4)))))))
   has_preferences = 1;
      if (! has_preferences)
 continue;
      fprintf (file, ";; %d preferences:", allocno[i].reg);
      for (j = 0; j < 53; j++)
 if ((!!((allocno[i].hard_reg_preferences)[(j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4)))))))
   fprintf (file, " %d", j);
      fprintf (file, "\n");
    }
  fprintf (file, "\n");
}
void
dump_global_regs (FILE *file)
{
  int i, j;
  fprintf (file, ";; Register dispositions:\n");
  for (i = 53, j = 0; i < max_regno; i++)
    if (reg_renumber[i] >= 0)
      {
 fprintf (file, "%d in %d  ", i, reg_renumber[i]);
 if (++j % 6 == 0)
   fprintf (file, "\n");
      }
  fprintf (file, "\n\n;; Hard regs used: ");
  for (i = 0; i < 53; i++)
    if (regs_ever_live[i])
      fprintf (file, " %d", i);
  fprintf (file, "\n\n");
}
struct bb_global_info
{
  int rts_number;
  bitmap killed, avloc;
  bitmap pavin, pavout;
};
static void
allocate_bb_info (void)
{
  int i;
  basic_block bb;
  struct bb_global_info *bb_info;
  bitmap init;
  alloc_aux_for_blocks (sizeof (struct bb_global_info));
  init = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (i = 0; i < 53; i++)
    bitmap_set_bit (init, i);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      bb_info = bb->aux;
      bb_info->avloc = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      bb_info->killed = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      bb_info->pavin = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      bb_info->pavout = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      bitmap_copy (bb_info->pavin, init);
      bitmap_copy (bb_info->pavout, init);
    }
  do { if (init) { bitmap_clear (init); free (init); (init) = 0; } } while (0);
}
static void
free_bb_info_global (void)
{
  basic_block bb;
  struct bb_global_info *bb_info;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      bb_info = ((struct bb_global_info *) (bb)->aux);
      do { if (bb_info->pavout) { bitmap_clear (bb_info->pavout); free (bb_info->pavout); (bb_info->pavout) = 0; } } while (0);
      do { if (bb_info->pavin) { bitmap_clear (bb_info->pavin); free (bb_info->pavin); (bb_info->pavin) = 0; } } while (0);
      do { if (bb_info->killed) { bitmap_clear (bb_info->killed); free (bb_info->killed); (bb_info->killed) = 0; } } while (0);
      do { if (bb_info->avloc) { bitmap_clear (bb_info->avloc); free (bb_info->avloc); (bb_info->avloc) = 0; } } while (0);
    }
  free_aux_for_blocks ();
}
static void
mark_reg_change (rtx reg, rtx setter, void *data)
{
  int regno;
  basic_block bb = data;
  struct bb_global_info *bb_info = ((struct bb_global_info *) (bb)->aux);
  if (((enum rtx_code) (reg)->code) == SUBREG)
    reg = (((reg)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (reg)->code) == REG))
    return;
  regno = (((reg)->u.fld[0]).rtuint);
  bitmap_set_bit (bb_info->killed, regno);
  if (((enum rtx_code) (setter)->code) != CLOBBER)
    bitmap_set_bit (bb_info->avloc, regno);
  else
    bitmap_clear_bit (bb_info->avloc, regno);
}
static void
calculate_local_reg_bb_info (void)
{
  basic_block bb;
  rtx insn, bound;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      bound = ((((bb)->end_)->u.fld[2]).rtx1);
      for (insn = (bb)->head_; insn != bound; insn = (((insn)->u.fld[2]).rtx1))
 if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
   note_stores ((((insn)->u.fld[5]).rtx1), mark_reg_change, bb);
    }
}
static void
set_up_bb_rts_numbers (void)
{
  int i;
  int *rts_order;
  rts_order = xmalloc (sizeof (int) * n_basic_blocks);
  flow_reverse_top_sort_order_compute (rts_order);
  for (i = 0; i < n_basic_blocks; i++)
    ((struct bb_global_info *) ((((basic_block_info)->data.bb[(rts_order [i])])))->aux)->rts_number = i;
  free (rts_order);
}
static int
rpost_cmp (const void *bb1, const void *bb2)
{
  basic_block b1 = *(basic_block *) bb1, b2 = *(basic_block *) bb2;
  return ((struct bb_global_info *) (b2)->aux)->rts_number - ((struct bb_global_info *) (b1)->aux)->rts_number;
}
static unsigned char
modify_bb_reg_pav (basic_block bb, basic_block pred, unsigned char changed_p)
{
  struct bb_global_info *bb_info;
  bitmap bb_pavin, bb_pavout;
  bb_info = ((struct bb_global_info *) (bb)->aux);
  bb_pavin = bb_info->pavin;
  bb_pavout = bb_info->pavout;
  if (pred->index != (-1))
    bitmap_operation (bb_pavin, bb_pavin, ((struct bb_global_info *) (pred)->aux)->pavout, BITMAP_IOR);
  changed_p |= bitmap_union_of_diff (bb_pavout, bb_info->avloc,
         bb_pavin, bb_info->killed);
  return changed_p;
}
static void
calculate_reg_pav (void)
{
  basic_block bb, succ;
  edge e;
  unsigned char changed_p;
  int i, nel;
  varray_type bbs, new_bbs, temp;
  basic_block *bb_array;
  sbitmap wset;
  bbs = varray_init (n_basic_blocks, VARRAY_DATA_BB, "basic blocks");
  new_bbs = varray_init (n_basic_blocks, VARRAY_DATA_BB, "basic blocks for the next iter.");
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      do { if ((bbs)->elements_used >= (bbs)->num_elements) (((bbs)) = varray_grow ((bbs), 2 * (bbs)->num_elements)); (bbs)->data.bb[(bbs)->elements_used++] = (bb); } while (0);
    }
  wset = sbitmap_alloc (n_basic_blocks + 1);
  while (((bbs)->elements_used))
    {
      bb_array = &((bbs)->data.bb[0]);
      nel = ((bbs)->elements_used);
      qsort (bb_array, nel, sizeof (basic_block), rpost_cmp);
      sbitmap_zero (wset);
      for (i = 0; i < nel; i++)
 {
   bb = bb_array [i];
   changed_p = 0;
   for (e = bb->pred; e; e = e->pred_next)
     changed_p = modify_bb_reg_pav (bb, e->src, changed_p);
   if (changed_p)
     for (e = bb->succ; e; e = e->succ_next)
       {
  succ = e->dest;
  if (succ->index != (-2) && !((wset)->elms [(succ->index) / ((unsigned) (8 * 4))] >> (succ->index) % ((unsigned) (8 * 4)) & 1))
    {
      ((wset)->elms [(succ->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (succ->index) % ((unsigned) (8 * 4)));
      do { if ((new_bbs)->elements_used >= (new_bbs)->num_elements) (((new_bbs)) = varray_grow ((new_bbs), 2 * (new_bbs)->num_elements)); (new_bbs)->data.bb[(new_bbs)->elements_used++] = (succ); } while (0);
    }
       }
 }
      temp = bbs;
      bbs = new_bbs;
      new_bbs = temp;
      ((new_bbs)->elements_used = 0);
    }
  free(wset);
}
static void
make_accurate_live_analysis (void)
{
  basic_block bb;
  struct bb_global_info *bb_info;
  max_regno = max_reg_num ();
  compact_blocks ();
  allocate_bb_info ();
  calculate_local_reg_bb_info ();
  set_up_bb_rts_numbers ();
  calculate_reg_pav ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      bb_info = ((struct bb_global_info *) (bb)->aux);
      bitmap_operation (bb->global_live_at_start, bb->global_live_at_start, bb_info->pavin, BITMAP_AND)
                       ;
      bitmap_operation (bb->global_live_at_end, bb->global_live_at_end, bb_info->pavout, BITMAP_AND)
                        ;
    }
  free_bb_info_global ();
}
extern void print_rtl_graph_with_bb (const char *, const char *, rtx);
extern void clean_graph_dump_file (const char *, const char *);
extern void finish_graph_dump_file (const char *, const char *);
static const char *const graph_ext[] =
{
                 "",
                 ".vcg"
};
static void start_fct (FILE *);
static void start_bb (FILE *, int);
static void node_data (FILE *, rtx);
static void draw_edge (FILE *, int, int, int, int);
static void end_fct (FILE *);
static void end_bb (FILE *);
static void
start_fct (FILE *fp)
{
  switch (graph_dump_format)
    {
    case vcg:
      fprintf (fp, "graph: { title: \"%s\"\nfolding: 1\nhidden: 2\nnode: { title: \"%s.0\" }\n",
        current_function_name (), current_function_name ());
      break;
    case no_graph:
      break;
    }
}
static void
start_bb (FILE *fp, int bb)
{
  switch (graph_dump_format)
    {
    case vcg:
      fprintf (fp, "graph: {\ntitle: \"%s.BB%d\"\nfolding: 1\ncolor: lightblue\nlabel: \"basic block %d",
        current_function_name (), bb, bb);
      break;
    case no_graph:
      break;
    }
  switch (graph_dump_format)
    {
    case vcg:
      fputs_unlocked ("\"\n\n", fp);
      break;
    case no_graph:
      break;
    }
}
static void
node_data (FILE *fp, rtx tmp_rtx)
{
  if ((((tmp_rtx)->u.fld[1]).rtx1) == 0)
    {
      switch (graph_dump_format)
 {
 case vcg:
   fprintf (fp, "edge: { sourcename: \"%s.0\" targetname: \"%s.%d\" }\n",
     current_function_name (),
     current_function_name (), (((tmp_rtx)->u.fld[0]).rtint));
   break;
 case no_graph:
   break;
 }
    }
  switch (graph_dump_format)
    {
    case vcg:
      fprintf (fp, "node: {\n  title: \"%s.%d\"\n  color: %s\n  label: \"%s %d\n",
        current_function_name (), (((tmp_rtx)->u.fld[0]).rtint),
        ((enum rtx_code) (tmp_rtx)->code) == NOTE ? "lightgrey"
        : ((enum rtx_code) (tmp_rtx)->code) == INSN ? "green"
        : ((enum rtx_code) (tmp_rtx)->code) == JUMP_INSN ? "darkgreen"
        : ((enum rtx_code) (tmp_rtx)->code) == CALL_INSN ? "darkgreen"
        : ((enum rtx_code) (tmp_rtx)->code) == CODE_LABEL ? "darkgrey\n  shape: ellipse"
                            : "white",
        (rtx_name[(int) (((enum rtx_code) (tmp_rtx)->code))]), (((tmp_rtx)->u.fld[0]).rtint));
      break;
    case no_graph:
      break;
    }
  if (((enum rtx_code) (tmp_rtx)->code) == NOTE)
    {
      const char *name = "";
      if ((((tmp_rtx)->u.fld[5]).rtint) < 0)
 name = (note_insn_name[((((tmp_rtx)->u.fld[5]).rtint)) - (int) NOTE_INSN_BIAS]);
      fprintf (fp, " %s", name);
    }
  else if (((((enum rtx_code) (tmp_rtx)->code) == INSN) || (((enum rtx_code) (tmp_rtx)->code) == JUMP_INSN) || (((enum rtx_code) (tmp_rtx)->code) == CALL_INSN)))
    print_rtl_single (fp, (((tmp_rtx)->u.fld[5]).rtx1));
  else
    print_rtl_single (fp, tmp_rtx);
  switch (graph_dump_format)
    {
    case vcg:
      fputs_unlocked ("\"\n}\n", fp);
      break;
    case no_graph:
      break;
    }
}
static void
draw_edge (FILE *fp, int from, int to, int bb_edge, int class)
{
  const char * color;
  switch (graph_dump_format)
    {
    case vcg:
      color = "";
      if (class == 2)
 color = "color: red ";
      else if (bb_edge)
 color = "color: blue ";
      else if (class == 3)
 color = "color: green ";
      fprintf (fp,
        "edge: { sourcename: \"%s.%d\" targetname: \"%s.%d\" %s",
        current_function_name (), from,
        current_function_name (), to, color);
      if (class)
 fprintf (fp, "class: %d ", class);
      fputs_unlocked ("}\n", fp);
      break;
    case no_graph:
      break;
    }
}
static void
end_bb (FILE *fp)
{
  switch (graph_dump_format)
    {
    case vcg:
      fputs_unlocked ("}\n", fp);
      break;
    case no_graph:
      break;
    }
}
static void
end_fct (FILE *fp)
{
  switch (graph_dump_format)
    {
    case vcg:
      fprintf (fp, "node: { title: \"%s.999999\" label: \"END\" }\n}\n",
        current_function_name ());
      break;
    case no_graph:
      break;
    }
}
void
print_rtl_graph_with_bb (const char *base, const char *suffix, rtx rtx_first)
{
  rtx tmp_rtx;
  size_t namelen = strlen (base);
  size_t suffixlen = strlen (suffix);
  size_t extlen = strlen (graph_ext[graph_dump_format]) + 1;
  char *buf = C_alloca(namelen + suffixlen + extlen);
  FILE *fp;
  if (basic_block_info == ((void *)0))
    return;
  memcpy (buf, base, namelen);
  memcpy (buf + namelen, suffix, suffixlen);
  memcpy (buf + namelen + suffixlen, graph_ext[graph_dump_format], extlen);
  fp = fopen (buf, "a");
  if (fp == ((void *)0))
    return;
  if (rtx_first == 0)
    fprintf (fp, "(nil)\n");
  else
    {
      enum bb_state { NOT_IN_BB, IN_ONE_BB, IN_MULTIPLE_BB };
      int max_uid = get_max_uid ();
      int *start = xmalloc (max_uid * sizeof (int));
      int *end = xmalloc (max_uid * sizeof (int));
      enum bb_state *in_bb_p = xmalloc (max_uid * sizeof (enum bb_state));
      basic_block bb;
      int i;
      for (i = 0; i < max_uid; ++i)
 {
   start[i] = end[i] = -1;
   in_bb_p[i] = NOT_IN_BB;
 }
      for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
 {
   rtx x;
   start[((((bb)->head_)->u.fld[0]).rtint)] = bb->index;
   end[((((bb)->end_)->u.fld[0]).rtint)] = bb->index;
   for (x = (bb)->head_; x != (rtx) 0; x = (((x)->u.fld[2]).rtx1))
     {
       in_bb_p[(((x)->u.fld[0]).rtint)]
  = (in_bb_p[(((x)->u.fld[0]).rtint)] == NOT_IN_BB)
   ? IN_ONE_BB : IN_MULTIPLE_BB;
       if (x == (bb)->end_)
  break;
     }
 }
      dump_for_graph = 1;
      start_fct (fp);
      for (tmp_rtx = (((rtx_first)->u.fld[2]).rtx1); ((void *)0) != tmp_rtx;
    tmp_rtx = (((tmp_rtx)->u.fld[2]).rtx1))
 {
   int edge_printed = 0;
   rtx next_insn;
   if (start[(((tmp_rtx)->u.fld[0]).rtint)] < 0 && end[(((tmp_rtx)->u.fld[0]).rtint)] < 0)
     {
       if (((enum rtx_code) (tmp_rtx)->code) == BARRIER)
  continue;
       if (((enum rtx_code) (tmp_rtx)->code) == NOTE
    && (1 || in_bb_p[(((tmp_rtx)->u.fld[0]).rtint)] == NOT_IN_BB))
  continue;
     }
   if ((i = start[(((tmp_rtx)->u.fld[0]).rtint)]) >= 0)
     {
       start_bb (fp, i);
       if (i == 0)
  draw_edge (fp, 0, (((tmp_rtx)->u.fld[0]).rtint), 1, 0);
     }
   node_data (fp, tmp_rtx);
   next_insn = next_nonnote_insn (tmp_rtx);
   if ((i = end[(((tmp_rtx)->u.fld[0]).rtint)]) >= 0)
     {
       edge e;
       bb = (((basic_block_info)->data.bb[(i)]));
       end_bb (fp);
       for (e = bb->succ; e ; e = e->succ_next)
  {
    if (e->dest != EXIT_BLOCK_PTR)
      {
        rtx block_head = (e->dest)->head_;
        draw_edge (fp, (((tmp_rtx)->u.fld[0]).rtint),
     (((block_head)->u.fld[0]).rtint),
     next_insn != block_head,
     (e->flags & 2 ? 2 : 0));
        if (block_head == next_insn)
   edge_printed = 1;
      }
    else
      {
        draw_edge (fp, (((tmp_rtx)->u.fld[0]).rtint), 999999,
     next_insn != 0,
     (e->flags & 2 ? 2 : 0));
        if (next_insn == 0)
   edge_printed = 1;
      }
  }
     }
   if (!edge_printed)
     {
       if (next_insn == 0
    || ((enum rtx_code) (next_insn)->code) != BARRIER)
  draw_edge (fp, (((tmp_rtx)->u.fld[0]).rtint),
      next_insn ? (((next_insn)->u.fld[0]).rtint) : 999999, 0, 0);
       else
  {
    do
      next_insn = (((next_insn)->u.fld[2]).rtx1);
    while (next_insn
    && (((enum rtx_code) (next_insn)->code) == NOTE
        || ((enum rtx_code) (next_insn)->code) == BARRIER));
    draw_edge (fp, (((tmp_rtx)->u.fld[0]).rtint),
        next_insn ? (((next_insn)->u.fld[0]).rtint) : 999999, 0, 3);
  }
     }
 }
      dump_for_graph = 0;
      end_fct (fp);
      free (start);
      free (end);
      free (in_bb_p);
    }
  fclose (fp);
}
void
clean_graph_dump_file (const char *base, const char *suffix)
{
  size_t namelen = strlen (base);
  size_t suffixlen = strlen (suffix);
  size_t extlen = strlen (graph_ext[graph_dump_format]) + 1;
  char *buf = C_alloca(namelen + extlen + suffixlen);
  FILE *fp;
  memcpy (buf, base, namelen);
  memcpy (buf + namelen, suffix, suffixlen);
  memcpy (buf + namelen + suffixlen, graph_ext[graph_dump_format], extlen);
  fp = fopen (buf, "w");
  if (fp == ((void *)0))
    fatal_error ("can't open %s: %m", buf);
  switch (graph_dump_format)
    {
    case vcg:
      fputs_unlocked ("graph: {\nport_sharing: no\n", fp);
      break;
    case no_graph:
      abort ();
    }
  fclose (fp);
}
void
finish_graph_dump_file (const char *base, const char *suffix)
{
  size_t namelen = strlen (base);
  size_t suffixlen = strlen (suffix);
  size_t extlen = strlen (graph_ext[graph_dump_format]) + 1;
  char *buf = C_alloca(namelen + suffixlen + extlen);
  FILE *fp;
  memcpy (buf, base, namelen);
  memcpy (buf + namelen, suffix, suffixlen);
  memcpy (buf + namelen + suffixlen, graph_ext[graph_dump_format], extlen);
  fp = fopen (buf, "a");
  if (fp != ((void *)0))
    {
      switch (graph_dump_format)
 {
 case vcg:
   fputs_unlocked ("}\n", fp);
   break;
 case no_graph:
   abort ();
 }
      fclose (fp);
    }
}
static int issue_rate;
int insert_schedule_bubbles_p = 0;
static int sched_verbose_param = 0;
int sched_verbose = 0;
FILE *sched_dump = 0;
static int old_max_uid;
void
fix_sched_param (const char *param, const char *val)
{
  if (!strcmp (param, "verbose"))
    sched_verbose_param = atoi (val);
  else
    warning ("fix_sched_param: unknown param: %s", param);
}
struct haifa_insn_data *h_i_d;
static rtx *line_note_head;
static rtx note_list;
static rtx *insn_queue;
static int q_ptr = 0;
static int q_size = 0;
static int max_insn_queue_index_macro_value;
state_t curr_state;
static size_t dfa_state_size;
static char *ready_try;
struct ready_list
{
  rtx *vec;
  int veclen;
  int first;
  int n_ready;
};
static int may_trap_exp (rtx, int);
static int
may_trap_exp (rtx x, int is_store)
{
  enum rtx_code code;
  if (x == 0)
    return TRAP_FREE;
  code = ((enum rtx_code) (x)->code);
  if (is_store)
    {
      if (code == MEM && may_trap_p (x))
 return TRAP_RISKY;
      else
 return TRAP_FREE;
    }
  if (code == MEM)
    {
      if ((((x))->volatil))
 return IRISKY;
      if (!may_trap_p (x))
 return IFREE;
      if (((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG) || ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MINUS || (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == LO_SUM)) && (((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == CONST_VECTOR) || ((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_VECTOR)))))
 return PFREE_CANDIDATE;
      return PRISKY_CANDIDATE;
    }
  else
    {
      const char *fmt;
      int i, insn_class = TRAP_FREE;
      if (may_trap_p (x))
 return TRAP_RISKY;
      fmt = (rtx_format[(int) (code)]);
      for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
 {
   if (fmt[i] == 'e')
     {
       int tmp_class = may_trap_exp ((((x)->u.fld[i]).rtx1), is_store);
       insn_class = ((insn_class > tmp_class) ? insn_class : tmp_class);
     }
   else if (fmt[i] == 'E')
     {
       int j;
       for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
  {
    int tmp_class = may_trap_exp ((((((x)->u.fld[i]).rtvec1))->elem[j]), is_store);
    insn_class = ((insn_class > tmp_class) ? insn_class : tmp_class);
    if (insn_class == TRAP_RISKY || insn_class == IRISKY)
      break;
  }
     }
   if (insn_class == TRAP_RISKY || insn_class == IRISKY)
     break;
 }
      return insn_class;
    }
}
int
haifa_classify_insn (rtx insn)
{
  rtx pat = (((insn)->u.fld[5]).rtx1);
  int tmp_class = TRAP_FREE;
  int insn_class = TRAP_FREE;
  enum rtx_code code;
  if (((enum rtx_code) (pat)->code) == PARALLEL)
    {
      int i, len = (((((pat)->u.fld[0]).rtvec1))->num_elem);
      for (i = len - 1; i >= 0; i--)
 {
   code = ((enum rtx_code) ((((((pat)->u.fld[0]).rtvec1))->elem[i]))->code);
   switch (code)
     {
     case CLOBBER:
       tmp_class = may_trap_exp (((((((((pat)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1), 1);
       break;
     case SET:
       tmp_class = may_trap_exp (((((((((pat)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1), 1);
       if (tmp_class == TRAP_RISKY)
  break;
       tmp_class
  = ((tmp_class > may_trap_exp (((((((((pat)->u.fld[0]).rtvec1))->elem[i]))->u.fld[1]).rtx1), 0)) ? tmp_class : may_trap_exp (((((((((pat)->u.fld[0]).rtvec1))->elem[i]))->u.fld[1]).rtx1), 0))
             ;
       break;
     case COND_EXEC:
     case TRAP_IF:
       tmp_class = TRAP_RISKY;
       break;
     default:
       ;
     }
   insn_class = ((insn_class > tmp_class) ? insn_class : tmp_class);
   if (insn_class == TRAP_RISKY || insn_class == IRISKY)
     break;
 }
    }
  else
    {
      code = ((enum rtx_code) (pat)->code);
      switch (code)
 {
 case CLOBBER:
   tmp_class = may_trap_exp ((((pat)->u.fld[0]).rtx1), 1);
   break;
 case SET:
   tmp_class = may_trap_exp ((((pat)->u.fld[0]).rtx1), 1);
   if (tmp_class == TRAP_RISKY)
     break;
   tmp_class =
     ((tmp_class > may_trap_exp ((((pat)->u.fld[1]).rtx1), 0)) ? tmp_class : may_trap_exp ((((pat)->u.fld[1]).rtx1), 0))
                                    ;
   break;
 case COND_EXEC:
 case TRAP_IF:
   tmp_class = TRAP_RISKY;
   break;
 default:;
 }
      insn_class = tmp_class;
    }
  return insn_class;
}
static unsigned int blockage_range (int, rtx);
static void clear_units (void);
static void schedule_unit (int, rtx, int);
static int actual_hazard (int, rtx, int, int);
static int potential_hazard (int, rtx, int);
static int priority (rtx);
static int rank_for_schedule (const void *, const void *);
static void swap_sort (rtx *, int);
static void queue_insn (rtx, int);
static int schedule_insn (rtx, struct ready_list *, int);
static int find_set_reg_weight (rtx);
static void find_insn_reg_weight (int);
static void adjust_priority (rtx);
static void advance_one_cycle_haifa (void);
static rtx unlink_other_notes (rtx, rtx);
static rtx unlink_line_notes (rtx, rtx);
static rtx reemit_notes (rtx, rtx);
static rtx *ready_lastpos (struct ready_list *);
static void ready_sort (struct ready_list *);
static rtx ready_remove_first (struct ready_list *);
static void queue_to_ready (struct ready_list *);
static int early_queue_to_ready (state_t, struct ready_list *);
static void debug_ready_list (struct ready_list *);
static rtx move_insn1 (rtx, rtx);
static rtx move_insn (rtx, rtx);
static rtx ready_element (struct ready_list *, int);
static rtx ready_remove (struct ready_list *, int);
static int max_issue (struct ready_list *, int *);
static rtx choose_ready (struct ready_list *);
struct sched_info *current_sched_info;
static rtx last_scheduled_insn;
 int
insn_unit (rtx insn)
{
  int unit = (h_i_d[(((insn)->u.fld[0]).rtint)].units);
  if (unit == 0)
    {
      ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn));
      if ((((insn)->u.fld[6]).rtint) < 0)
 unit = -1;
      else
 {
   unit = function_units_used (insn);
   if (unit >= 0)
     unit++;
 }
      if (0 < (8 * 2)
   || unit >= 0
   || (unit & ~((1 << ((8 * 2) - 1)) - 1)) == 0)
 (h_i_d[(((insn)->u.fld[0]).rtint)].units) = unit;
    }
  return (unit > 0 ? unit - 1 : unit);
}
 static unsigned int
blockage_range (int unit, rtx insn)
{
  unsigned int blockage = (h_i_d[(((insn)->u.fld[0]).rtint)].blockage);
  unsigned int range;
  if ((int) ((blockage) >> (2 * 1)) != unit + 1)
    {
      range = function_units[unit].blockage_range_function (insn);
      if ((8 * 4) >= 5 + 2 * 1)
 (h_i_d[(((insn)->u.fld[0]).rtint)].blockage) = (((unit + 1) << 1 | ((range) >> ((8 * 4) / 2))) << 1 | ((range) & ((1 << ((8 * 4) / 2)) - 1)));
    }
  else
    range = (((((blockage) >> 1) & ((1 << 1) - 1)) << ((8 * 4) / 2)) | ((blockage) & ((1 << 1) - 1)));
  return range;
}
static rtx unit_last_insn[1];
static int unit_tick[1];
static int unit_n_insns[1];
rtx
get_unit_last_insn (int instance)
{
  return unit_last_insn[instance];
}
static void
clear_units (void)
{
  memset (unit_last_insn, 0, sizeof (unit_last_insn));
  memset (unit_tick, 0, sizeof (unit_tick));
  memset (unit_n_insns, 0, sizeof (unit_n_insns));
}
 int
insn_issue_delay (rtx insn)
{
  int i, delay = 0;
  int unit = insn_unit (insn);
  if (unit >= 0)
    {
      if (function_units[unit].blockage_range_function &&
   function_units[unit].blockage_function)
 delay = function_units[unit].blockage_function (insn, insn);
    }
  else
    for (i = 0, unit = ~unit; unit; i++, unit >>= 1)
      if ((unit & 1) != 0 && function_units[i].blockage_range_function
   && function_units[i].blockage_function)
 delay = ((delay) > (function_units[i].blockage_function (insn, insn)) ? (delay) : (function_units[i].blockage_function (insn, insn)));
  return delay;
}
 int
actual_hazard_this_instance (int unit, int instance, rtx insn, int clock, int cost)
{
  int tick = unit_tick[instance];
  if (tick - clock > cost)
    {
      if (function_units[unit].blockage_range_function)
 {
   if (function_units[unit].blockage_function)
     tick += (function_units[unit].blockage_function
       (unit_last_insn[instance], insn)
       - function_units[unit].max_blockage);
   else
     tick += ((int) ((blockage_range (unit, insn)) & ((1 << ((8 * 4) / 2)) - 1))
       - function_units[unit].max_blockage);
 }
      if (tick - clock > cost)
 cost = tick - clock;
    }
  return cost;
}
static void
schedule_unit (int unit, rtx insn, int clock)
{
  int i;
  if (unit >= 0)
    {
      int instance = unit;
      unit_last_insn[instance] = insn;
      unit_tick[instance] = (clock + function_units[unit].max_blockage);
    }
  else
    for (i = 0, unit = ~unit; unit; i++, unit >>= 1)
      if ((unit & 1) != 0)
 schedule_unit (i, insn, clock);
}
static int
actual_hazard (int unit, rtx insn, int clock, int cost)
{
  int i;
  if (unit >= 0)
    {
      int instance = unit;
      int best_cost = actual_hazard_this_instance (unit, instance, insn,
         clock, cost);
      cost = ((cost) > (best_cost) ? (cost) : (best_cost));
    }
  else
    for (i = 0, unit = ~unit; unit; i++, unit >>= 1)
      if ((unit & 1) != 0)
 cost = actual_hazard (i, insn, clock, cost);
  return cost;
}
 static int
potential_hazard (int unit, rtx insn, int cost)
{
  int i, ncost;
  unsigned int minb, maxb;
  if (unit >= 0)
    {
      minb = maxb = function_units[unit].max_blockage;
      if (maxb > 1)
 {
   if (function_units[unit].blockage_range_function)
     {
       maxb = minb = blockage_range (unit, insn);
       maxb = ((maxb) & ((1 << ((8 * 4) / 2)) - 1));
       minb = ((minb) >> ((8 * 4) / 2));
     }
   if (maxb > 1)
     {
       ncost = minb * 0x40 + maxb;
       ncost *= (unit_n_insns[unit] - 1) * 0x1000 + unit;
       if (ncost > cost)
  cost = ncost;
     }
 }
    }
  else
    for (i = 0, unit = ~unit; unit; i++, unit >>= 1)
      if ((unit & 1) != 0)
 cost = potential_hazard (i, insn, cost);
  return cost;
}
int
insn_cost (rtx insn, rtx link, rtx used)
{
  int cost = (h_i_d[(((insn)->u.fld[0]).rtint)].cost);
  if (cost < 0)
    {
      if (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)) < 0)
 {
   (h_i_d[(((insn)->u.fld[0]).rtint)].cost) = 0;
   return 0;
 }
      else
 {
   if (targetm.sched.use_dfa_pipeline_interface
       && targetm.sched.use_dfa_pipeline_interface ())
     cost = insn_default_latency (insn);
   else
     cost = result_ready_cost (insn);
   if (cost < 0)
     cost = 0;
   (h_i_d[(((insn)->u.fld[0]).rtint)].cost) = cost;
 }
    }
  if (link == 0 || used == 0)
    return cost;
  if (((((used)->u.fld[6]).rtint) >= 0 ? (((used)->u.fld[6]).rtint) : recog_memoized_1 (used)) < 0)
    cost = 0;
  else
    {
      if (targetm.sched.use_dfa_pipeline_interface
   && targetm.sched.use_dfa_pipeline_interface ())
 {
   if ((((insn)->u.fld[6]).rtint) >= 0)
     {
       if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEP_ANTI)
  cost = 0;
       else if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEP_OUTPUT)
  {
    cost = (insn_default_latency (insn)
     - insn_default_latency (used));
    if (cost <= 0)
      cost = 1;
  }
       else if (bypass_p (insn))
  cost = insn_latency (insn, used);
     }
 }
      if (targetm.sched.adjust_cost)
 cost = targetm.sched.adjust_cost (used, link, insn, cost);
      if (cost < 0)
 cost = 0;
    }
  return cost;
}
static int
priority (rtx insn)
{
  rtx link;
  if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return 0;
  if (! (h_i_d[(((insn)->u.fld[0]).rtint)].priority_known))
    {
      int this_priority = 0;
      if ((h_i_d[(((insn)->u.fld[0]).rtint)].depend) == 0)
 this_priority = insn_cost (insn, 0, 0);
      else
 {
   for (link = (h_i_d[(((insn)->u.fld[0]).rtint)].depend); link; link = (((link)->u.fld[1]).rtx1))
     {
       rtx next;
       int next_priority;
       next = (((link)->u.fld[0]).rtx1);
       if (! (*current_sched_info->contributes_to_priority) (next, insn))
  continue;
       next_priority = insn_cost (insn, link, next) + priority (next);
       if (next_priority > this_priority)
  this_priority = next_priority;
     }
 }
      (h_i_d[(((insn)->u.fld[0]).rtint)].priority) = this_priority;
      (h_i_d[(((insn)->u.fld[0]).rtint)].priority_known) = 1;
    }
  return (h_i_d[(((insn)->u.fld[0]).rtint)].priority);
}
static int
rank_for_schedule (const void *x, const void *y)
{
  rtx tmp = *(const rtx *) y;
  rtx tmp2 = *(const rtx *) x;
  rtx link;
  int tmp_class, tmp2_class, depend_count1, depend_count2;
  int val, priority_val, weight_val, info_val;
  if ((((tmp))->in_struct) != (((tmp2))->in_struct))
    return (((tmp2))->in_struct) ? 1 : -1;
  priority_val = (h_i_d[(((tmp2)->u.fld[0]).rtint)].priority) - (h_i_d[(((tmp)->u.fld[0]).rtint)].priority);
  if (priority_val)
    return priority_val;
  if (!reload_completed &&
      (weight_val = (h_i_d[(((tmp)->u.fld[0]).rtint)].reg_weight) - (h_i_d[(((tmp2)->u.fld[0]).rtint)].reg_weight)))
    return weight_val;
  info_val = (*current_sched_info->rank) (tmp, tmp2);
  if (info_val)
    return info_val;
  if (last_scheduled_insn)
    {
      link = find_insn_list (tmp, (h_i_d[(((last_scheduled_insn)->u.fld[0]).rtint)].depend));
      if (link == 0 || insn_cost (last_scheduled_insn, link, tmp) == 1)
 tmp_class = 3;
      else if (((enum reg_note) ((enum machine_mode) (link)->mode)) == 0)
 tmp_class = 1;
      else
 tmp_class = 2;
      link = find_insn_list (tmp2, (h_i_d[(((last_scheduled_insn)->u.fld[0]).rtint)].depend));
      if (link == 0 || insn_cost (last_scheduled_insn, link, tmp2) == 1)
 tmp2_class = 3;
      else if (((enum reg_note) ((enum machine_mode) (link)->mode)) == 0)
 tmp2_class = 1;
      else
 tmp2_class = 2;
      if ((val = tmp2_class - tmp_class))
 return val;
    }
  depend_count1 = 0;
  for (link = (h_i_d[(((tmp)->u.fld[0]).rtint)].depend); link; link = (((link)->u.fld[1]).rtx1))
    depend_count1++;
  depend_count2 = 0;
  for (link = (h_i_d[(((tmp2)->u.fld[0]).rtint)].depend); link; link = (((link)->u.fld[1]).rtx1))
    depend_count2++;
  val = depend_count2 - depend_count1;
  if (val)
    return val;
  return (h_i_d[(((tmp)->u.fld[0]).rtint)].luid) - (h_i_d[(((tmp2)->u.fld[0]).rtint)].luid);
}
 static void
swap_sort (rtx *a, int n)
{
  rtx insn = a[n - 1];
  int i = n - 2;
  while (i >= 0 && rank_for_schedule (a + i, &insn) >= 0)
    {
      a[i + 1] = a[i];
      i -= 1;
    }
  a[i + 1] = insn;
}
 static void
queue_insn (rtx insn, int n_cycles)
{
  int next_q = (((q_ptr)+n_cycles) & max_insn_queue_index_macro_value);
  rtx link = alloc_INSN_LIST (insn, insn_queue[next_q]);
  insn_queue[next_q] = link;
  q_size += 1;
  if (sched_verbose >= 2)
    {
      fprintf (sched_dump, ";;\t\tReady-->Q: insn %s: ",
        (*current_sched_info->print_insn) (insn, 0));
      fprintf (sched_dump, "queued for %d cycles.\n", n_cycles);
    }
}
 static rtx *
ready_lastpos (struct ready_list *ready)
{
  if (ready->n_ready == 0)
    abort ();
  return ready->vec + ready->first - ready->n_ready + 1;
}
 void
ready_add (struct ready_list *ready, rtx insn)
{
  if (ready->first == ready->n_ready)
    {
      memmove (ready->vec + ready->veclen - ready->n_ready,
        ready_lastpos (ready),
        ready->n_ready * sizeof (rtx));
      ready->first = ready->veclen - 1;
    }
  ready->vec[ready->first - ready->n_ready] = insn;
  ready->n_ready++;
}
 static rtx
ready_remove_first (struct ready_list *ready)
{
  rtx t;
  if (ready->n_ready == 0)
    abort ();
  t = ready->vec[ready->first--];
  ready->n_ready--;
  if (ready->n_ready == 0)
    ready->first = ready->veclen - 1;
  return t;
}
 static rtx
ready_element (struct ready_list *ready, int index)
{
  return ready->vec[ready->first - index];
}
 static rtx
ready_remove (struct ready_list *ready, int index)
{
  rtx t;
  int i;
  if (index == 0)
    return ready_remove_first (ready);
  if (ready->n_ready == 0 || index >= ready->n_ready)
    abort ();
  t = ready->vec[ready->first - index];
  ready->n_ready--;
  for (i = index; i < ready->n_ready; i++)
    ready->vec[ready->first - i] = ready->vec[ready->first - i - 1];
  return t;
}
 static void
ready_sort (struct ready_list *ready)
{
  rtx *first = ready_lastpos (ready);
  do { if ((ready->n_ready) == 2) swap_sort (first, ready->n_ready); else if ((ready->n_ready) > 2) qsort (first, ready->n_ready, sizeof (rtx), rank_for_schedule); } while (0);
}
 static void
adjust_priority (rtx prev)
{
  if (targetm.sched.adjust_priority)
    (h_i_d[(((prev)->u.fld[0]).rtint)].priority) =
      targetm.sched.adjust_priority (prev, (h_i_d[(((prev)->u.fld[0]).rtint)].priority));
}
 static void
advance_one_cycle_haifa (void)
{
  if (targetm.sched.use_dfa_pipeline_interface
      && targetm.sched.use_dfa_pipeline_interface ())
    {
      if (targetm.sched.dfa_pre_cycle_insn)
 state_transition (curr_state,
     targetm.sched.dfa_pre_cycle_insn ());
      state_transition (curr_state, ((void *)0));
      if (targetm.sched.dfa_post_cycle_insn)
 state_transition (curr_state,
     targetm.sched.dfa_post_cycle_insn ());
    }
}
static int last_clock_var;
static int
schedule_insn (rtx insn, struct ready_list *ready, int clock)
{
  rtx link;
  int advance = 0;
  int unit = 0;
  int premature_issue = 0;
  if (!targetm.sched.use_dfa_pipeline_interface
      || !targetm.sched.use_dfa_pipeline_interface ())
    unit = insn_unit (insn);
  if (targetm.sched.use_dfa_pipeline_interface
      && targetm.sched.use_dfa_pipeline_interface ()
      && sched_verbose >= 1)
    {
      char buf[2048];
      print_insn (buf, insn, 0);
      buf[40] = 0;
      fprintf (sched_dump, ";;\t%3i--> %-40s:", clock, buf);
      if (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)) < 0)
 fprintf (sched_dump, "nothing");
      else
 print_reservation (sched_dump, insn);
      fputc_unlocked ('\n', sched_dump);
    }
  else if (sched_verbose >= 2)
    {
      fprintf (sched_dump, ";;\t\t--> scheduling insn <<<%d>>> on unit ",
        (((insn)->u.fld[0]).rtint));
      insn_print_units (insn);
      fputc_unlocked ('\n', sched_dump);
    }
  if (!targetm.sched.use_dfa_pipeline_interface
      || !targetm.sched.use_dfa_pipeline_interface ())
    {
      if (sched_verbose && unit == -1)
 visualize_no_unit (insn);
      if (-1 > 1 || issue_rate > 1 || sched_verbose)
 schedule_unit (unit, insn, clock);
      if ((h_i_d[(((insn)->u.fld[0]).rtint)].depend) == 0)
 return 0;
    }
  if ((h_i_d[(((insn)->u.fld[0]).rtint)].tick) > clock)
    {
      premature_issue = (h_i_d[(((insn)->u.fld[0]).rtint)].tick) - clock;
    }
  for (link = (h_i_d[(((insn)->u.fld[0]).rtint)].depend); link != 0; link = (((link)->u.fld[1]).rtx1))
    {
      rtx next = (((link)->u.fld[0]).rtx1);
      int cost = insn_cost (insn, link, next);
      (h_i_d[(((next)->u.fld[0]).rtint)].tick) = (((h_i_d[(((next)->u.fld[0]).rtint)].tick)) > (clock + cost + premature_issue) ? ((h_i_d[(((next)->u.fld[0]).rtint)].tick)) : (clock + cost + premature_issue));
      if (((h_i_d[(((next)->u.fld[0]).rtint)].dep_count) -= 1) == 0)
 {
   int effective_cost = (h_i_d[(((next)->u.fld[0]).rtint)].tick) - clock;
   if (! (*current_sched_info->new_ready) (next))
     continue;
   if (sched_verbose >= 2)
     {
       fprintf (sched_dump, ";;\t\tdependences resolved: insn %s ",
         (*current_sched_info->print_insn) (next, 0));
       if (effective_cost < 1)
  fprintf (sched_dump, "into ready\n");
       else
  fprintf (sched_dump, "into queue with cost=%d\n",
    effective_cost);
     }
   adjust_priority (next);
   if (effective_cost < 1)
     ready_add (ready, next);
   else
     {
       queue_insn (next, effective_cost);
       if ((((next))->in_struct) && advance < effective_cost)
  advance = effective_cost;
     }
 }
    }
  if (issue_rate > 1
      && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE
      && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != CLOBBER)
    {
      if (reload_completed)
 ((insn)->mode = (clock > last_clock_var ? TImode : VOIDmode));
      last_clock_var = clock;
    }
  return advance;
}
static rtx
unlink_other_notes (rtx insn, rtx tail)
{
  rtx prev = (((insn)->u.fld[1]).rtx1);
  while (insn != tail && ((enum rtx_code) (insn)->code) == NOTE)
    {
      rtx next = (((insn)->u.fld[2]).rtx1);
      if (prev)
 (((prev)->u.fld[2]).rtx1) = next;
      if (next)
 (((next)->u.fld[1]).rtx1) = prev;
      if ((((insn)->u.fld[5]).rtint) != NOTE_INSN_LOOP_BEG
   && (((insn)->u.fld[5]).rtint) != NOTE_INSN_LOOP_END
   && (((insn)->u.fld[5]).rtint) != NOTE_INSN_BASIC_BLOCK
   && (((insn)->u.fld[5]).rtint) != NOTE_INSN_EH_REGION_BEG
   && (((insn)->u.fld[5]).rtint) != NOTE_INSN_EH_REGION_END)
 {
   (((insn)->u.fld[1]).rtx1) = note_list;
   if (note_list)
     (((note_list)->u.fld[2]).rtx1) = insn;
   note_list = insn;
 }
      insn = next;
    }
  return insn;
}
static rtx
unlink_line_notes (rtx insn, rtx tail)
{
  rtx prev = (((insn)->u.fld[1]).rtx1);
  while (insn != tail && ((enum rtx_code) (insn)->code) == NOTE)
    {
      rtx next = (((insn)->u.fld[2]).rtx1);
      if (write_symbols != NO_DEBUG && (((insn)->u.fld[5]).rtint) > 0)
 {
   if (prev)
     (((prev)->u.fld[2]).rtx1) = next;
   if (next)
     (((next)->u.fld[1]).rtx1) = prev;
   (h_i_d[(((insn)->u.fld[0]).rtint)].line_note) = insn;
 }
      else
 prev = insn;
      insn = next;
    }
  return insn;
}
void
get_block_head_tail (int b, rtx *headp, rtx *tailp)
{
  rtx head = ((((basic_block_info)->data.bb[(b)])))->head_;
  rtx tail = ((((basic_block_info)->data.bb[(b)])))->end_;
  while (head != tail)
    {
      if (((enum rtx_code) (head)->code) == NOTE)
 head = (((head)->u.fld[2]).rtx1);
      else if (((enum rtx_code) (tail)->code) == NOTE)
 tail = (((tail)->u.fld[1]).rtx1);
      else if (((enum rtx_code) (head)->code) == CODE_LABEL)
 head = (((head)->u.fld[2]).rtx1);
      else
 break;
    }
  *headp = head;
  *tailp = tail;
}
int
no_real_insns_p (rtx head, rtx tail)
{
  while (head != (((tail)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (head)->code) != NOTE && ((enum rtx_code) (head)->code) != CODE_LABEL)
 return 0;
      head = (((head)->u.fld[2]).rtx1);
    }
  return 1;
}
void
rm_line_notes (rtx head, rtx tail)
{
  rtx next_tail;
  rtx insn;
  next_tail = (((tail)->u.fld[2]).rtx1);
  for (insn = head; insn != next_tail; insn = (((insn)->u.fld[2]).rtx1))
    {
      rtx prev;
      if (((enum rtx_code) (insn)->code) == NOTE)
 {
   prev = insn;
   insn = unlink_line_notes (insn, next_tail);
   if (prev == tail)
     abort ();
   if (prev == head)
     abort ();
   if (insn == next_tail)
     abort ();
 }
    }
}
void
save_line_notes (int b, rtx head, rtx tail)
{
  rtx next_tail;
  rtx line = line_note_head[b];
  rtx insn;
  next_tail = (((tail)->u.fld[2]).rtx1);
  for (insn = head; insn != next_tail; insn = (((insn)->u.fld[2]).rtx1))
    if (((enum rtx_code) (insn)->code) == NOTE && (((insn)->u.fld[5]).rtint) > 0)
      line = insn;
    else
      (h_i_d[(((insn)->u.fld[0]).rtint)].line_note) = line;
}
void
restore_line_notes (rtx head, rtx tail)
{
  rtx line, note, prev, new;
  int added_notes = 0;
  rtx next_tail, insn;
  head = head;
  next_tail = (((tail)->u.fld[2]).rtx1);
  for (line = head; line; line = (((line)->u.fld[1]).rtx1))
    if (((enum rtx_code) (line)->code) == NOTE && (((line)->u.fld[5]).rtint) > 0)
      break;
  for (insn = head; insn != next_tail; insn = (((insn)->u.fld[2]).rtx1))
    if (((enum rtx_code) (insn)->code) == NOTE && (((insn)->u.fld[5]).rtint) > 0)
      line = insn;
    else if (((enum rtx_code) (insn)->code) != NOTE
      && (((insn)->u.fld[0]).rtint) < old_max_uid
      && (note = (h_i_d[(((insn)->u.fld[0]).rtint)].line_note)) != 0
      && note != line
      && (line == 0
   || (((note)->u.fld[5]).rtint) != (((line)->u.fld[5]).rtint)
   || (((note)->u.fld[4]).rtstr) != (((line)->u.fld[4]).rtstr)
   ))
      {
 line = note;
 prev = (((insn)->u.fld[1]).rtx1);
 if ((h_i_d[(((note)->u.fld[0]).rtint)].line_note))
   {
     (h_i_d[(((note)->u.fld[0]).rtint)].line_note) = 0;
     (((note)->u.fld[1]).rtx1) = prev;
     (((prev)->u.fld[2]).rtx1) = note;
     (((insn)->u.fld[1]).rtx1) = note;
     (((note)->u.fld[2]).rtx1) = insn;
   }
 else
   {
     added_notes++;
     new = emit_note_after ((((note)->u.fld[5]).rtint), prev);
     (((new)->u.fld[4]).rtstr) = (((note)->u.fld[4]).rtstr);
   }
      }
  if (sched_verbose && added_notes)
    fprintf (sched_dump, ";; added %d line-number notes\n", added_notes);
}
void
rm_redundant_line_notes (void)
{
  rtx line = 0;
  rtx insn = get_insns ();
  int active_insn = 0;
  int notes = 0;
  for (insn = get_last_insn (); insn; insn = (((insn)->u.fld[1]).rtx1))
    if (((enum rtx_code) (insn)->code) == NOTE && (((insn)->u.fld[5]).rtint) > 0)
      {
 if (active_insn == 0)
   {
     notes++;
     (((insn)->code = (NOTE)), (((insn)->u.fld[4]).rtstr) = 0, (((insn)->u.fld[5]).rtint) = NOTE_INSN_DELETED);
   }
 else if (line
   && (((line)->u.fld[5]).rtint) == (((insn)->u.fld[5]).rtint)
   && (((line)->u.fld[4]).rtstr) == (((insn)->u.fld[4]).rtstr)
)
   {
     notes++;
     (((line)->code = (NOTE)), (((line)->u.fld[4]).rtstr) = 0, (((line)->u.fld[5]).rtint) = NOTE_INSN_DELETED);
     line = insn;
   }
 else
   line = insn;
 active_insn = 0;
      }
    else if (!((((enum rtx_code) (insn)->code) == NOTE
  && (((insn)->u.fld[5]).rtint) == NOTE_INSN_DELETED)
        || (((enum rtx_code) (insn)->code) == INSN
     && (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE
         || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER))))
      active_insn++;
  if (sched_verbose && notes)
    fprintf (sched_dump, ";; deleted %d line-number notes\n", notes);
}
void
rm_other_notes (rtx head, rtx tail)
{
  rtx next_tail;
  rtx insn;
  note_list = 0;
  if (head == tail && (! ((((enum rtx_code) (head)->code) == INSN) || (((enum rtx_code) (head)->code) == JUMP_INSN) || (((enum rtx_code) (head)->code) == CALL_INSN))))
    return;
  next_tail = (((tail)->u.fld[2]).rtx1);
  for (insn = head; insn != next_tail; insn = (((insn)->u.fld[2]).rtx1))
    {
      rtx prev;
      if (((enum rtx_code) (insn)->code) == NOTE)
 {
   prev = insn;
   insn = unlink_other_notes (insn, next_tail);
   if (prev == tail)
     abort ();
   if (prev == head)
     abort ();
   if (insn == next_tail)
     abort ();
 }
    }
}
static int
find_set_reg_weight (rtx x)
{
  if (((enum rtx_code) (x)->code) == CLOBBER
      && register_operand ((((x)->u.fld[0]).rtx1), VOIDmode))
    return 1;
  if (((enum rtx_code) (x)->code) == SET
      && register_operand ((((x)->u.fld[0]).rtx1), VOIDmode))
    {
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 {
   if (!reg_mentioned_p ((((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1)))
     return 1;
   else
     return 0;
 }
      return 1;
    }
  return 0;
}
static void
find_insn_reg_weight (int b)
{
  rtx insn, next_tail, head, tail;
  get_block_head_tail (b, &head, &tail);
  next_tail = (((tail)->u.fld[2]).rtx1);
  for (insn = head; insn != next_tail; insn = (((insn)->u.fld[2]).rtx1))
    {
      int reg_weight = 0;
      rtx x;
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      x = (((insn)->u.fld[5]).rtx1);
      reg_weight += find_set_reg_weight (x);
      if (((enum rtx_code) (x)->code) == PARALLEL)
 {
   int j;
   for (j = (((((x)->u.fld[0]).rtvec1))->num_elem) - 1; j >= 0; j--)
     {
       x = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[j]);
       reg_weight += find_set_reg_weight (x);
     }
 }
      for (x = (((insn)->u.fld[8]).rtx1); x; x = (((x)->u.fld[1]).rtx1))
 {
   if (((enum reg_note) ((enum machine_mode) (x)->mode)) == REG_DEAD
       || ((enum reg_note) ((enum machine_mode) (x)->mode)) == REG_UNUSED)
     reg_weight--;
 }
      (h_i_d[(((insn)->u.fld[0]).rtint)].reg_weight) = reg_weight;
    }
}
static int clock_var;
static void
queue_to_ready (struct ready_list *ready)
{
  rtx insn;
  rtx link;
  q_ptr = (((q_ptr)+1) & max_insn_queue_index_macro_value);
  for (link = insn_queue[q_ptr]; link; link = (((link)->u.fld[1]).rtx1))
    {
      insn = (((link)->u.fld[0]).rtx1);
      q_size -= 1;
      if (sched_verbose >= 2)
 fprintf (sched_dump, ";;\t\tQ-->Ready: insn %s: ",
   (*current_sched_info->print_insn) (insn, 0));
      ready_add (ready, insn);
      if (sched_verbose >= 2)
 fprintf (sched_dump, "moving to ready without stalls\n");
    }
  insn_queue[q_ptr] = 0;
  if (ready->n_ready == 0)
    {
      int stalls;
      for (stalls = 1; stalls <= max_insn_queue_index_macro_value; stalls++)
 {
   if ((link = insn_queue[(((q_ptr)+stalls) & max_insn_queue_index_macro_value)]))
     {
       for (; link; link = (((link)->u.fld[1]).rtx1))
  {
    insn = (((link)->u.fld[0]).rtx1);
    q_size -= 1;
    if (sched_verbose >= 2)
      fprintf (sched_dump, ";;\t\tQ-->Ready: insn %s: ",
        (*current_sched_info->print_insn) (insn, 0));
    ready_add (ready, insn);
    if (sched_verbose >= 2)
      fprintf (sched_dump, "moving to ready with %d stalls\n", stalls);
  }
       insn_queue[(((q_ptr)+stalls) & max_insn_queue_index_macro_value)] = 0;
       advance_one_cycle_haifa ();
       break;
     }
   advance_one_cycle_haifa ();
 }
      if ((!targetm.sched.use_dfa_pipeline_interface
    || !targetm.sched.use_dfa_pipeline_interface ())
   && sched_verbose && stalls)
 visualize_stall_cycles (stalls);
      q_ptr = (((q_ptr)+stalls) & max_insn_queue_index_macro_value);
      clock_var += stalls;
    }
}
static unsigned char
ok_for_early_queue_removal (rtx insn)
{
  int n_cycles;
  rtx prev_insn = last_scheduled_insn;
  if (targetm.sched.is_costly_dependence)
    {
      for (n_cycles = flag_sched_stalled_insns_dep; n_cycles; n_cycles--)
 {
   for ( ; prev_insn; prev_insn = (((prev_insn)->u.fld[1]).rtx1))
     {
       rtx dep_link = 0;
       int dep_cost;
       if (((enum rtx_code) (prev_insn)->code) != NOTE)
  {
    dep_link = find_insn_list (insn, (h_i_d[(((prev_insn)->u.fld[0]).rtint)].depend));
    if (dep_link)
      {
        dep_cost = insn_cost (prev_insn, dep_link, insn) ;
        if (targetm.sched.is_costly_dependence (prev_insn, insn,
    dep_link, dep_cost,
    flag_sched_stalled_insns_dep - n_cycles))
   return 0;
      }
  }
       if (((enum machine_mode) (prev_insn)->mode) == TImode)
  break;
     }
   if (!prev_insn)
     break;
   prev_insn = (((prev_insn)->u.fld[1]).rtx1);
 }
    }
  return 1;
}
static int
early_queue_to_ready (state_t state, struct ready_list *ready)
{
  rtx insn;
  rtx link;
  rtx next_link;
  rtx prev_link;
  unsigned char move_to_ready;
  int cost;
  state_t temp_state = C_alloca(dfa_state_size);
  int stalls;
  int insns_removed = 0;
  if (! flag_sched_stalled_insns)
    return 0;
  for (stalls = 0; stalls <= max_insn_queue_index_macro_value; stalls++)
    {
      if ((link = insn_queue[(((q_ptr)+stalls) & max_insn_queue_index_macro_value)]))
 {
   if (sched_verbose > 6)
     fprintf (sched_dump, ";; look at index %d + %d\n", q_ptr, stalls);
   prev_link = 0;
   while (link)
     {
       next_link = (((link)->u.fld[1]).rtx1);
       insn = (((link)->u.fld[0]).rtx1);
       if (insn && sched_verbose > 6)
  print_rtl_single (sched_dump, insn);
       memcpy (temp_state, state, dfa_state_size);
       if (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)) < 0)
  cost = 0;
       else
  cost = state_transition (temp_state, insn);
       if (sched_verbose >= 6)
  fprintf (sched_dump, "transition cost = %d\n", cost);
       move_to_ready = 0;
       if (cost < 0)
  {
    move_to_ready = ok_for_early_queue_removal (insn);
    if (move_to_ready == 1)
      {
        q_size -= 1;
        ready_add (ready, insn);
        if (prev_link)
   (((prev_link)->u.fld[1]).rtx1) = next_link;
        else
   insn_queue[(((q_ptr)+stalls) & max_insn_queue_index_macro_value)] = next_link;
        free_INSN_LIST_node (link);
        if (sched_verbose >= 2)
   fprintf (sched_dump, ";;\t\tEarly Q-->Ready: insn %s\n",
     (*current_sched_info->print_insn) (insn, 0));
        insns_removed++;
        if (insns_removed == flag_sched_stalled_insns)
   return insns_removed;
      }
  }
       if (move_to_ready == 0)
  prev_link = link;
       link = next_link;
     }
 }
    }
  return insns_removed;
}
static void
debug_ready_list (struct ready_list *ready)
{
  rtx *p;
  int i;
  if (ready->n_ready == 0)
    {
      fprintf (sched_dump, "\n");
      return;
    }
  p = ready_lastpos (ready);
  for (i = 0; i < ready->n_ready; i++)
    fprintf (sched_dump, "  %s", (*current_sched_info->print_insn) (p[i], 0));
  fprintf (sched_dump, "\n");
}
static rtx
move_insn1 (rtx insn, rtx last)
{
  ((((((insn)->u.fld[1]).rtx1))->u.fld[2]).rtx1) = (((insn)->u.fld[2]).rtx1);
  ((((((insn)->u.fld[2]).rtx1))->u.fld[1]).rtx1) = (((insn)->u.fld[1]).rtx1);
  (((insn)->u.fld[2]).rtx1) = (((last)->u.fld[2]).rtx1);
  ((((((last)->u.fld[2]).rtx1))->u.fld[1]).rtx1) = insn;
  (((last)->u.fld[2]).rtx1) = insn;
  (((insn)->u.fld[1]).rtx1) = last;
  return insn;
}
static rtx
reemit_notes (rtx insn, rtx last)
{
  rtx note, retval;
  retval = last;
  for (note = (((insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
    {
      if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_SAVE_NOTE)
 {
   enum insn_note note_type = (((((note)->u.fld[0]).rtx1))->u.hwint[0]);
   last = emit_note_before (note_type, last);
   remove_note (insn, note);
   note = (((note)->u.fld[1]).rtx1);
   if (note_type == NOTE_INSN_EH_REGION_BEG
       || note_type == NOTE_INSN_EH_REGION_END)
     (((last)->u.fld[4]).rtint) = (((((note)->u.fld[0]).rtx1))->u.hwint[0]);
   remove_note (insn, note);
 }
    }
  return retval;
}
static rtx
move_insn (rtx insn, rtx last)
{
  rtx retval = ((void *)0);
  move_insn1 (insn, last);
  if (retval == (rtx) 0)
    retval = reemit_notes (insn, insn);
  else
    reemit_notes (insn, insn);
  (((insn))->in_struct) = 0;
  return retval;
}
struct choice_entry
{
  int index;
  int rest;
  int n;
  state_t state;
};
static struct choice_entry *choice_stack;
static int cycle_issued_insns;
static int max_lookahead_tries;
static int cached_first_cycle_multipass_dfa_lookahead = 0;
static int cached_issue_rate = 0;
static int
max_issue (struct ready_list *ready, int *index)
{
  int n, i, all, n_ready, best, delay, tries_num;
  struct choice_entry *top;
  rtx insn;
  best = 0;
  memcpy (choice_stack->state, curr_state, dfa_state_size);
  top = choice_stack;
  top->rest = cached_first_cycle_multipass_dfa_lookahead;
  top->n = 0;
  n_ready = ready->n_ready;
  for (all = i = 0; i < n_ready; i++)
    if (!ready_try [i])
      all++;
  i = 0;
  tries_num = 0;
  for (;;)
    {
      if (top->rest == 0 || i >= n_ready)
 {
   if (top == choice_stack)
     break;
   if (best < top - choice_stack && ready_try [0])
     {
       best = top - choice_stack;
       *index = choice_stack [1].index;
       if (top->n == issue_rate - cycle_issued_insns || best == all)
  break;
     }
   i = top->index;
   ready_try [i] = 0;
   top--;
   memcpy (curr_state, top->state, dfa_state_size);
 }
      else if (!ready_try [i])
 {
   tries_num++;
   if (tries_num > max_lookahead_tries)
     break;
   insn = ready_element (ready, i);
   delay = state_transition (curr_state, insn);
   if (delay < 0)
     {
       if (state_dead_lock_p (curr_state))
  top->rest = 0;
       else
  top->rest--;
       n = top->n;
       if (memcmp (top->state, curr_state, dfa_state_size) != 0)
  n++;
       top++;
       top->rest = cached_first_cycle_multipass_dfa_lookahead;
       top->index = i;
       top->n = n;
       memcpy (top->state, curr_state, dfa_state_size);
       ready_try [i] = 1;
       i = -1;
     }
 }
      i++;
    }
  while (top != choice_stack)
    {
      ready_try [top->index] = 0;
      top--;
    }
  memcpy (curr_state, choice_stack->state, dfa_state_size);
  return best;
}
static rtx
choose_ready (struct ready_list *ready)
{
  int lookahead = 0;
  if (targetm.sched.first_cycle_multipass_dfa_lookahead)
    lookahead = targetm.sched.first_cycle_multipass_dfa_lookahead ();
  if (lookahead <= 0 || (((ready_element (ready, 0)))->in_struct))
    return ready_remove_first (ready);
  else
    {
      int index = 0, i;
      rtx insn;
      if (cached_first_cycle_multipass_dfa_lookahead != lookahead)
 {
   cached_first_cycle_multipass_dfa_lookahead = lookahead;
   max_lookahead_tries = 100;
   for (i = 0; i < issue_rate; i++)
     max_lookahead_tries *= lookahead;
 }
      insn = ready_element (ready, 0);
      if ((((insn)->u.fld[6]).rtint) < 0)
 return ready_remove_first (ready);
      for (i = 1; i < ready->n_ready; i++)
 {
   insn = ready_element (ready, i);
   ready_try [i]
     = ((((insn)->u.fld[6]).rtint) < 0
        || (targetm.sched.first_cycle_multipass_dfa_lookahead_guard
     && !targetm.sched.first_cycle_multipass_dfa_lookahead_guard (insn)));
 }
      if (max_issue (ready, &index) == 0)
 return ready_remove_first (ready);
      else
 return ready_remove (ready, index);
    }
}
void
schedule_block (int b, int rgn_n_insns)
{
  struct ready_list ready;
  int i, first_cycle_insn_p;
  int can_issue_more;
  state_t temp_state = ((void *)0);
  int sort_p, advance, start_clock_var;
  rtx prev_head = current_sched_info->prev_head;
  rtx next_tail = current_sched_info->next_tail;
  rtx head = (((prev_head)->u.fld[2]).rtx1);
  rtx tail = (((next_tail)->u.fld[1]).rtx1);
  if (head == tail && (! ((((enum rtx_code) (head)->code) == INSN) || (((enum rtx_code) (head)->code) == JUMP_INSN) || (((enum rtx_code) (head)->code) == CALL_INSN))))
    abort ();
  if (sched_verbose)
    {
      fprintf (sched_dump, ";;   ======================================================\n");
      fprintf (sched_dump,
        ";;   -- basic block %d from %d to %d -- %s reload\n",
        b, (((head)->u.fld[0]).rtint), (((tail)->u.fld[0]).rtint),
        (reload_completed ? "after" : "before"));
      fprintf (sched_dump, ";;   ======================================================\n");
      fprintf (sched_dump, "\n");
      visualize_alloc ();
      init_block_visualization ();
    }
  if (targetm.sched.use_dfa_pipeline_interface
      && targetm.sched.use_dfa_pipeline_interface ())
    state_reset (curr_state);
  else
    clear_units ();
  ready.veclen = rgn_n_insns + 1 + issue_rate;
  ready.first = ready.veclen - 1;
  ready.vec = xmalloc (ready.veclen * sizeof (rtx));
  ready.n_ready = 0;
  if (targetm.sched.use_dfa_pipeline_interface
      && targetm.sched.use_dfa_pipeline_interface ())
    {
      temp_state = C_alloca(dfa_state_size);
      ready_try = xcalloc ((rgn_n_insns + 1), sizeof (char));
      choice_stack = xmalloc ((rgn_n_insns + 1)
         * sizeof (struct choice_entry));
      for (i = 0; i <= rgn_n_insns; i++)
 choice_stack[i].state = xmalloc (dfa_state_size);
    }
  (*current_sched_info->init_ready_list) (&ready);
  if (targetm.sched.md_init)
    targetm.sched.md_init (sched_dump, sched_verbose, ready.veclen);
  last_scheduled_insn = prev_head;
  q_ptr = 0;
  q_size = 0;
  if (!targetm.sched.use_dfa_pipeline_interface
      || !targetm.sched.use_dfa_pipeline_interface ())
    max_insn_queue_index_macro_value = 1 - 1;
  else
    max_insn_queue_index_macro_value = max_insn_queue_index;
  insn_queue = C_alloca((max_insn_queue_index_macro_value + 1) * sizeof (rtx));
  memset (insn_queue, 0, (max_insn_queue_index_macro_value + 1) * sizeof (rtx));
  last_clock_var = -1;
  clock_var = -1;
  advance = 0;
  sort_p = 1;
  while ((*current_sched_info->schedule_more_p) ())
    {
      do
 {
   start_clock_var = clock_var;
   clock_var++;
   advance_one_cycle_haifa ();
   queue_to_ready (&ready);
   if (ready.n_ready == 0)
     abort ();
   if (sched_verbose >= 2)
     {
       fprintf (sched_dump, ";;\t\tReady list after queue_to_ready:  ");
       debug_ready_list (&ready);
     }
   advance -= clock_var - start_clock_var;
 }
      while (advance > 0);
      if (sort_p)
 {
   ready_sort (&ready);
   if (sched_verbose >= 2)
     {
       fprintf (sched_dump, ";;\t\tReady list after ready_sort:  ");
       debug_ready_list (&ready);
     }
 }
      if (sort_p && targetm.sched.reorder
   && (ready.n_ready == 0
       || !(((ready_element (&ready, 0)))->in_struct)))
 can_issue_more =
   targetm.sched.reorder (sched_dump, sched_verbose,
     ready_lastpos (&ready),
     &ready.n_ready, clock_var);
      else
 can_issue_more = issue_rate;
      first_cycle_insn_p = 1;
      cycle_issued_insns = 0;
      for (;;)
 {
   rtx insn;
   int cost;
   unsigned char asm_p = 0;
   if (sched_verbose >= 2)
     {
       fprintf (sched_dump, ";;\tReady list (t =%3d):  ",
         clock_var);
       debug_ready_list (&ready);
     }
   if (!targetm.sched.use_dfa_pipeline_interface
       || !targetm.sched.use_dfa_pipeline_interface ())
     {
       if (ready.n_ready == 0 || !can_issue_more
    || !(*current_sched_info->schedule_more_p) ())
  break;
       insn = ready_remove_first (&ready);
       cost = actual_hazard (insn_unit (insn), insn, clock_var, 0);
     }
   else
     {
       if (ready.n_ready == 0
    && can_issue_more
    && reload_completed)
  {
    if (sched_verbose >= 6)
      fprintf(sched_dump,";;\t\tSecond chance\n");
    memcpy (temp_state, curr_state, dfa_state_size);
    if (early_queue_to_ready (temp_state, &ready))
      ready_sort (&ready);
  }
       if (ready.n_ready == 0 || !can_issue_more
    || state_dead_lock_p (curr_state)
    || !(*current_sched_info->schedule_more_p) ())
  break;
       if (sort_p)
  insn = choose_ready (&ready);
       else
  insn = ready_remove_first (&ready);
       if (targetm.sched.dfa_new_cycle
    && targetm.sched.dfa_new_cycle (sched_dump, sched_verbose,
        insn, last_clock_var,
        clock_var, &sort_p))
  {
    ready_add (&ready, insn);
    break;
  }
       sort_p = 1;
       memcpy (temp_state, curr_state, dfa_state_size);
       if (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)) < 0)
  {
    asm_p = (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ASM_INPUT
      || asm_noperands ((((insn)->u.fld[5]).rtx1)) >= 0);
    if (!first_cycle_insn_p && asm_p)
      cost = 1;
    else
      cost = 0;
  }
       else
  {
    cost = state_transition (temp_state, insn);
    if (targetm.sched.first_cycle_multipass_dfa_lookahead
        && targetm.sched.dfa_bubble)
      {
        if (cost == 0)
   {
     int j;
     rtx bubble;
     for (j = 0;
          (bubble = targetm.sched.dfa_bubble (j))
     != (rtx) 0;
          j++)
       {
         memcpy (temp_state, curr_state, dfa_state_size);
         if (state_transition (temp_state, bubble) < 0
      && state_transition (temp_state, insn) < 0)
    break;
       }
     if (bubble != (rtx) 0)
       {
         if (insert_schedule_bubbles_p)
    {
      rtx copy;
      copy = copy_rtx ((((bubble)->u.fld[5]).rtx1));
      emit_insn_after (copy, last_scheduled_insn);
      last_scheduled_insn
        = (((last_scheduled_insn)->u.fld[2]).rtx1);
      (((last_scheduled_insn)->u.fld[6]).rtint)
        = (((bubble)->u.fld[6]).rtint);
      ((last_scheduled_insn)->mode = ((clock_var > last_clock_var ? clock_var - last_clock_var : VOIDmode)))
                      ;
      last_clock_var = clock_var;
      if (sched_verbose >= 2)
        {
          fprintf (sched_dump,
            ";;\t\t--> scheduling bubble insn <<<%d>>>:reservation ",
            (((last_scheduled_insn)->u.fld[0]).rtint));
          if (((((last_scheduled_insn)->u.fld[6]).rtint) >= 0 ? (((last_scheduled_insn)->u.fld[6]).rtint) : recog_memoized_1 (last_scheduled_insn))
       < 0)
     fprintf (sched_dump, "nothing");
          else
     print_reservation
       (sched_dump, last_scheduled_insn);
          fprintf (sched_dump, "\n");
        }
    }
         cost = -1;
       }
   }
      }
    if (cost < 0)
      cost = 0;
    else if (cost == 0)
      cost = 1;
  }
     }
   if (cost >= 1)
     {
       queue_insn (insn, cost);
       continue;
     }
   if (! (*current_sched_info->can_schedule_ready_p) (insn))
     goto next;
   last_scheduled_insn = move_insn (insn, last_scheduled_insn);
   if (targetm.sched.use_dfa_pipeline_interface
       && targetm.sched.use_dfa_pipeline_interface ())
     {
       if (memcmp (curr_state, temp_state, dfa_state_size) != 0)
  cycle_issued_insns++;
       memcpy (curr_state, temp_state, dfa_state_size);
     }
   if (targetm.sched.variable_issue)
     can_issue_more =
       targetm.sched.variable_issue (sched_dump, sched_verbose,
            insn, can_issue_more);
   else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE
     && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != CLOBBER)
     can_issue_more--;
   advance = schedule_insn (insn, &ready, clock_var);
   if (advance == 0 && asm_p)
     advance = 1;
   if (advance != 0)
     break;
 next:
   first_cycle_insn_p = 0;
   if (ready.n_ready > 0)
     ready_sort (&ready);
   if (targetm.sched.reorder2
       && (ready.n_ready == 0
    || !(((ready_element (&ready, 0)))->in_struct)))
     {
       can_issue_more =
  targetm.sched.reorder2 (sched_dump, sched_verbose,
     ready.n_ready
     ? ready_lastpos (&ready) : ((void *)0),
     &ready.n_ready, clock_var);
     }
 }
      if ((!targetm.sched.use_dfa_pipeline_interface
    || !targetm.sched.use_dfa_pipeline_interface ())
   && sched_verbose)
 visualize_scheduled_insns (clock_var);
    }
  if (targetm.sched.md_finish)
    targetm.sched.md_finish (sched_dump, sched_verbose);
  if (sched_verbose)
    {
      fprintf (sched_dump, ";;\tReady list (final):  ");
      debug_ready_list (&ready);
      if (!targetm.sched.use_dfa_pipeline_interface
   || !targetm.sched.use_dfa_pipeline_interface ())
 print_block_visualization ("");
    }
  if (current_sched_info->queue_must_finish_empty && q_size != 0)
      abort ();
  head = (((prev_head)->u.fld[2]).rtx1);
  tail = last_scheduled_insn;
  if (!reload_completed)
    {
      rtx insn, link, next;
      for (insn = head; insn != tail; insn = (((insn)->u.fld[2]).rtx1))
 if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
   {
     for (link = (h_i_d[(((insn)->u.fld[0]).rtint)].depend); link != 0; link = (((link)->u.fld[1]).rtx1))
       {
  next = (((link)->u.fld[0]).rtx1);
  (h_i_d[(((next)->u.fld[0]).rtint)].tick) -= clock_var;
       }
   }
    }
  if (note_list != 0)
    {
      rtx note_head = note_list;
      while ((((note_head)->u.fld[1]).rtx1))
 {
   note_head = (((note_head)->u.fld[1]).rtx1);
 }
      (((note_head)->u.fld[1]).rtx1) = (((head)->u.fld[1]).rtx1);
      ((((((head)->u.fld[1]).rtx1))->u.fld[2]).rtx1) = note_head;
      (((head)->u.fld[1]).rtx1) = note_list;
      (((note_list)->u.fld[2]).rtx1) = head;
      head = note_head;
    }
  if (sched_verbose)
    {
      fprintf (sched_dump, ";;   total time = %d\n;;   new head = %d\n",
        clock_var, (((head)->u.fld[0]).rtint));
      fprintf (sched_dump, ";;   new tail = %d\n\n",
        (((tail)->u.fld[0]).rtint));
      visualize_free ();
    }
  current_sched_info->head = head;
  current_sched_info->tail = tail;
  free (ready.vec);
  if (targetm.sched.use_dfa_pipeline_interface
      && targetm.sched.use_dfa_pipeline_interface ())
    {
      free (ready_try);
      for (i = 0; i <= rgn_n_insns; i++)
 free (choice_stack [i].state);
      free (choice_stack);
    }
}
int
set_priorities (rtx head, rtx tail)
{
  rtx insn;
  int n_insn;
  int sched_max_insns_priority =
 current_sched_info->sched_max_insns_priority;
  rtx prev_head;
  prev_head = (((head)->u.fld[1]).rtx1);
  if (head == tail && (! ((((enum rtx_code) (head)->code) == INSN) || (((enum rtx_code) (head)->code) == JUMP_INSN) || (((enum rtx_code) (head)->code) == CALL_INSN))))
    return 0;
  n_insn = 0;
  sched_max_insns_priority = 0;
  for (insn = tail; insn != prev_head; insn = (((insn)->u.fld[1]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == NOTE)
 continue;
      n_insn++;
      (void) priority (insn);
      if ((h_i_d[(((insn)->u.fld[0]).rtint)].priority_known))
 sched_max_insns_priority =
   ((sched_max_insns_priority) > ((h_i_d[(((insn)->u.fld[0]).rtint)].priority)) ? (sched_max_insns_priority) : ((h_i_d[(((insn)->u.fld[0]).rtint)].priority)));
    }
  sched_max_insns_priority += 1;
  current_sched_info->sched_max_insns_priority =
 sched_max_insns_priority;
  return n_insn;
}
void
sched_init (FILE *dump_file)
{
  int luid;
  basic_block b;
  rtx insn;
  int i;
  sched_verbose = sched_verbose_param;
  if (sched_verbose_param == 0 && dump_file)
    sched_verbose = 1;
  sched_dump = ((sched_verbose_param >= 10 || !dump_file)
  ? stderr : dump_file);
  if (targetm.sched.issue_rate)
    issue_rate = targetm.sched.issue_rate ();
  else
    issue_rate = 1;
  if (cached_issue_rate != issue_rate)
    {
      cached_issue_rate = issue_rate;
      cached_first_cycle_multipass_dfa_lookahead = 0;
    }
  old_max_uid = get_max_uid () + 1;
  h_i_d = xcalloc (old_max_uid, sizeof (*h_i_d));
  for (i = 0; i < old_max_uid; i++)
    h_i_d [i].cost = -1;
  if (targetm.sched.use_dfa_pipeline_interface
      && targetm.sched.use_dfa_pipeline_interface ())
    {
      if (targetm.sched.init_dfa_pre_cycle_insn)
 targetm.sched.init_dfa_pre_cycle_insn ();
      if (targetm.sched.init_dfa_post_cycle_insn)
 targetm.sched.init_dfa_post_cycle_insn ();
      if (targetm.sched.first_cycle_multipass_dfa_lookahead
   && targetm.sched.init_dfa_bubbles)
 targetm.sched.init_dfa_bubbles ();
      dfa_start ();
      dfa_state_size = state_size ();
      curr_state = xmalloc (dfa_state_size);
    }
  h_i_d[0].luid = 0;
  luid = 1;
  for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = b->next_bb)
    for (insn = (b)->head_; ; insn = (((insn)->u.fld[2]).rtx1))
      {
 (h_i_d[(((insn)->u.fld[0]).rtint)].luid) = luid;
 if (((enum rtx_code) (insn)->code) != NOTE)
   ++luid;
 if (insn == (b)->end_)
   break;
      }
  init_dependency_caches (luid);
  init_alias_analysis ();
  if (write_symbols != NO_DEBUG)
    {
      rtx line;
      line_note_head = xcalloc (last_basic_block, sizeof (rtx));
      for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = b->next_bb)
 {
   for (line = (b)->head_; line; line = (((line)->u.fld[1]).rtx1))
     if (((enum rtx_code) (line)->code) == NOTE && (((line)->u.fld[5]).rtint) > 0)
       {
  line_note_head[b->index] = line;
  break;
       }
   for (line = (b)->head_; line; line = (((line)->u.fld[2]).rtx1))
     {
       if (((((enum rtx_code) (line)->code) == INSN) || (((enum rtx_code) (line)->code) == JUMP_INSN) || (((enum rtx_code) (line)->code) == CALL_INSN)))
  break;
       if (((enum rtx_code) (line)->code) == NOTE && (((line)->u.fld[5]).rtint) > 0)
  line_note_head[b->index] = line;
     }
 }
    }
  if ((!targetm.sched.use_dfa_pipeline_interface
       || !targetm.sched.use_dfa_pipeline_interface ())
      && sched_verbose)
    init_target_units ();
  insn = (EXIT_BLOCK_PTR->prev_bb)->end_;
  if ((((insn)->u.fld[2]).rtx1) == 0
      || (((enum rtx_code) (insn)->code) != NOTE
   && ((enum rtx_code) (insn)->code) != CODE_LABEL
   && ((enum rtx_code) ((((insn)->u.fld[2]).rtx1))->code) != BARRIER))
    {
      emit_note_after (NOTE_INSN_DELETED, (EXIT_BLOCK_PTR->prev_bb)->end_);
      (EXIT_BLOCK_PTR->prev_bb)->end_ = ((((EXIT_BLOCK_PTR->prev_bb)->end_)->u.fld[1]).rtx1);
    }
  for (b = EXIT_BLOCK_PTR->prev_bb; b != ENTRY_BLOCK_PTR; b = b->prev_bb)
    find_insn_reg_weight (b->index);
  if (targetm.sched.md_init_global)
      targetm.sched.md_init_global (sched_dump, sched_verbose, old_max_uid);
}
void
sched_finish (void)
{
  free (h_i_d);
  if (targetm.sched.use_dfa_pipeline_interface
      && targetm.sched.use_dfa_pipeline_interface ())
    {
      free (curr_state);
      dfa_finish ();
    }
  free_dependency_caches ();
  end_alias_analysis ();
  if (write_symbols != NO_DEBUG)
    free (line_note_head);
  if (targetm.sched.md_finish_global)
      targetm.sched.md_finish_global (sched_dump, sched_verbose);
}
void
hook_void_void (void)
{
}
unsigned char
hook_bool_void_false (void)
{
  return 0;
}
int
hook_int_void_no_regs (void)
{
  return NO_REGS;
}
int
hook_int_void_1 (void)
{
  return 1;
}
unsigned char
hook_bool_bool_false (unsigned char a )
{
  return 0;
}
void
hook_void_FILEptr_constcharptr (FILE *a , const char *b )
{
}
unsigned char
hook_bool_tree_hwi_hwi_tree_false (tree a ,
       long b ,
       long c ,
       tree d )
{
  return 0;
}
unsigned char
hook_bool_tree_hwi_hwi_tree_true (tree a ,
      long b ,
      long c ,
      tree d )
{
  return 1;
}
unsigned char
hook_bool_constcharptr_size_t_false (const char *a ,
         size_t b )
{
  return 0;
}
unsigned char
default_can_output_mi_thunk_no_vcall (tree a ,
          long b ,
          long c,
          tree d )
{
  return c == 0;
}
int
hook_int_tree_tree_1 (tree a , tree b )
{
  return 1;
}
int
hook_int_rtx_0 (rtx a )
{
  return 0;
}
int
hook_int_size_t_constcharptr_int_0 (size_t a ,
        const char *b ,
        int c )
{
  return 0;
}
unsigned int
hook_uint_uint_constcharptrptr_0 (unsigned int a ,
      const char **b )
{
  return 0;
}
void
hook_void_int (int b )
{
}
void
hook_void_tree (tree a )
{
}
void
hook_void_charptr (char *a )
{
}
void
hook_void_tree_treeptr (tree a , tree *b )
{
}
unsigned char
hook_bool_tree_false (tree a )
{
  return 0;
}
unsigned char
hook_bool_tree_true (tree a )
{
  return 1;
}
unsigned char
hook_bool_tree_tree_false (tree a , tree b )
{
  return 0;
}
unsigned char
hook_bool_rtx_false (rtx a )
{
  return 0;
}
unsigned char
hook_bool_uintp_uintp_false (unsigned int *a ,
        unsigned int *b )
{
  return 0;
}
unsigned char
hook_bool_rtx_int_int_intp_false (rtx a ,
      int b ,
      int c ,
      int *d )
{
  return 0;
}
rtx
hook_rtx_rtx_identity (rtx x)
{
  return x;
}
rtx
hook_rtx_rtx_null (rtx x )
{
  return ((void *)0);
}
rtx
hook_rtx_tree_int_null (tree a , int b )
{
  return ((void *)0);
}
tree
hook_tree_tree_identity (tree a)
{
  return a;
}
const char *
hook_constcharptr_tree_null (tree t )
{
  return ((void *)0);
}
static int num_possible_if_blocks;
static int num_updated_if_blocks;
static int num_true_changes;
static int cond_exec_changed_p;
static unsigned char life_data_ok;
static int count_bb_insns (basic_block);
static rtx first_active_insn (basic_block);
static rtx last_active_insn (basic_block, int);
static basic_block block_fallthru (basic_block);
static int cond_exec_process_insns (ce_if_block_t *, rtx, rtx, rtx, rtx, int);
static rtx cond_exec_get_condition (rtx);
static int cond_exec_process_if_block (ce_if_block_t *, int);
static rtx noce_get_condition (rtx, rtx *);
static int noce_operand_ok (rtx);
static int noce_process_if_block (ce_if_block_t *);
static int process_if_block (ce_if_block_t *);
static void merge_if_block (ce_if_block_t *);
static int find_cond_trap (basic_block, edge, edge);
static basic_block find_if_header (basic_block, int);
static int block_jumps_and_fallthru_p (basic_block, basic_block);
static int find_if_block (ce_if_block_t *);
static int find_if_case_1 (basic_block, edge, edge);
static int find_if_case_2 (basic_block, edge, edge);
static int find_memory (rtx *, void *);
static int dead_or_predicable (basic_block, basic_block, basic_block,
          basic_block, int);
static void noce_emit_move_insn (rtx, rtx);
static rtx block_has_only_trap (basic_block);
static void mark_loop_exit_edges (void);
static void
mark_loop_exit_edges (void)
{
  struct loops loops;
  basic_block bb;
  edge e;
  flow_loops_find (&loops, 1);
  free_dominance_info (CDI_DOMINATORS);
  if (loops.num > 1)
    {
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   for (e = bb->succ; e; e = e->succ_next)
     {
       if (find_common_loop (bb->loop_father, e->dest->loop_father)
    != bb->loop_father)
  e->flags |= 512;
       else
  e->flags &= ~512;
     }
 }
    }
  flow_loops_free (&loops);
}
static int
count_bb_insns (basic_block bb)
{
  int count = 0;
  rtx insn = (bb)->head_;
  while (1)
    {
      if (((enum rtx_code) (insn)->code) == CALL_INSN || ((enum rtx_code) (insn)->code) == INSN)
 count++;
      if (insn == (bb)->end_)
 break;
      insn = (((insn)->u.fld[2]).rtx1);
    }
  return count;
}
static rtx
first_active_insn (basic_block bb)
{
  rtx insn = (bb)->head_;
  if (((enum rtx_code) (insn)->code) == CODE_LABEL)
    {
      if (insn == (bb)->end_)
 return (rtx) 0;
      insn = (((insn)->u.fld[2]).rtx1);
    }
  while (((enum rtx_code) (insn)->code) == NOTE)
    {
      if (insn == (bb)->end_)
 return (rtx) 0;
      insn = (((insn)->u.fld[2]).rtx1);
    }
  if (((enum rtx_code) (insn)->code) == JUMP_INSN)
    return (rtx) 0;
  return insn;
}
static rtx
last_active_insn (basic_block bb, int skip_use_p)
{
  rtx insn = (bb)->end_;
  rtx head = (bb)->head_;
  while (((enum rtx_code) (insn)->code) == NOTE
  || ((enum rtx_code) (insn)->code) == JUMP_INSN
  || (skip_use_p
      && ((enum rtx_code) (insn)->code) == INSN
      && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE))
    {
      if (insn == head)
 return (rtx) 0;
      insn = (((insn)->u.fld[1]).rtx1);
    }
  if (((enum rtx_code) (insn)->code) == CODE_LABEL)
    return (rtx) 0;
  return insn;
}
static basic_block
block_fallthru (basic_block bb)
{
  edge e;
  for (e = bb->succ;
       e != ((struct edge_def *)((void *)0)) && (e->flags & 1) == 0;
       e = e->succ_next)
    ;
  return (e) ? e->dest : ((struct basic_block_def *)((void *)0));
}
static int
cond_exec_process_insns (ce_if_block_t *ce_info ,
                              rtx start,
                               rtx end,
                              rtx test,
                                    rtx prob_val,
                                      int mod_ok)
{
  int must_be_last = 0;
  rtx insn;
  rtx xtest;
  rtx pattern;
  if (!start || !end)
    return 0;
  for (insn = start; ; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == NOTE)
 goto insn_done;
      if (((enum rtx_code) (insn)->code) != INSN && ((enum rtx_code) (insn)->code) != CALL_INSN)
 abort ();
      if (reload_completed && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE)
 {
   (((insn)->code = (NOTE)), (((insn)->u.fld[4]).rtstr) = 0, (((insn)->u.fld[5]).rtint) = NOTE_INSN_DELETED);
   goto insn_done;
 }
      if (must_be_last)
 return 0;
      if (modified_in_p (test, insn))
 {
   if (!mod_ok)
     return 0;
   must_be_last = 1;
 }
      pattern = (((insn)->u.fld[5]).rtx1);
      xtest = copy_rtx (test);
      if (((enum rtx_code) (pattern)->code) == COND_EXEC)
 {
   if (((enum machine_mode) (xtest)->mode) != ((enum machine_mode) ((((pattern)->u.fld[0]).rtx1))->mode))
     return 0;
   xtest = gen_rtx_fmt_ee (AND, (((enum machine_mode) (xtest)->mode)), (xtest), ((((pattern)->u.fld[0]).rtx1)))
                                   ;
   pattern = (((pattern)->u.fld[1]).rtx1);
 }
      pattern = gen_rtx_fmt_ee (COND_EXEC, (VOIDmode), (xtest), (pattern));
      validate_change (insn, &(((insn)->u.fld[5]).rtx1), pattern, 1);
      if (((enum rtx_code) (insn)->code) == CALL_INSN && prob_val)
 validate_change (insn, &(((insn)->u.fld[8]).rtx1),
    alloc_EXPR_LIST (REG_BR_PROB, prob_val,
       (((insn)->u.fld[8]).rtx1)), 1);
    insn_done:
      if (insn == end)
 break;
    }
  return 1;
}
static rtx
cond_exec_get_condition (rtx jump)
{
  rtx test_if, cond;
  if (any_condjump_p (jump))
    test_if = (((pc_set (jump))->u.fld[1]).rtx1);
  else
    return (rtx) 0;
  cond = (((test_if)->u.fld[0]).rtx1);
  if (((enum rtx_code) ((((test_if)->u.fld[2]).rtx1))->code) == LABEL_REF
      && ((((((test_if)->u.fld[2]).rtx1))->u.fld[0]).rtx1) == (((jump)->u.fld[9]).rtx1))
    {
      enum rtx_code rev = reversed_comparison_code (cond, jump);
      if (rev == UNKNOWN)
 return (rtx) 0;
      cond = gen_rtx_fmt_ee (rev, ((enum machine_mode) (cond)->mode), (((cond)->u.fld[0]).rtx1),
        (((cond)->u.fld[1]).rtx1));
    }
  return cond;
}
static int
cond_exec_process_if_block (ce_if_block_t * ce_info,
                                 int do_multiple_p)
{
  basic_block test_bb = ce_info->test_bb;
  basic_block then_bb = ce_info->then_bb;
  basic_block else_bb = ce_info->else_bb;
  rtx test_expr;
  rtx then_start;
  rtx then_end;
  rtx else_start = (rtx) 0;
  rtx else_end = (rtx) 0;
  int max;
  int then_mod_ok;
  rtx true_expr;
  rtx false_expr;
  rtx true_prob_val;
  rtx false_prob_val;
  int n_insns;
  enum rtx_code false_code;
  if (!do_multiple_p && ce_info->num_multiple_test_blocks)
    {
      if (else_bb || ! ce_info->and_and_p)
 return 0;
      ce_info->test_bb = test_bb = ce_info->last_test_bb;
      ce_info->num_multiple_test_blocks = 0;
      ce_info->num_and_and_blocks = 0;
      ce_info->num_or_or_blocks = 0;
    }
  test_expr = cond_exec_get_condition ((test_bb)->end_);
  if (! test_expr)
    return 0;
  if (! onlyjump_p ((test_bb)->end_))
    return 0;
  then_start = first_active_insn (then_bb);
  then_end = last_active_insn (then_bb, 1);
  n_insns = ce_info->num_then_insns = count_bb_insns (then_bb);
  max = (ix86_branch_cost + 1);
  if (else_bb)
    {
      max *= 2;
      else_start = first_active_insn (else_bb);
      else_end = last_active_insn (else_bb, 1);
      n_insns += ce_info->num_else_insns = count_bb_insns (else_bb);
    }
  if (n_insns > max)
    return 0;
  true_expr = test_expr;
  false_code = reversed_comparison_code (true_expr, (test_bb)->end_);
  if (false_code != UNKNOWN)
    false_expr = gen_rtx_fmt_ee (false_code, ((enum machine_mode) (true_expr)->mode),
     (((true_expr)->u.fld[0]).rtx1), (((true_expr)->u.fld[1]).rtx1));
  else
    false_expr = (rtx) 0;
  true_prob_val = find_reg_note ((test_bb)->end_, REG_BR_PROB, (rtx) 0);
  if (true_prob_val)
    {
      true_prob_val = (((true_prob_val)->u.fld[0]).rtx1);
      false_prob_val = gen_rtx_CONST_INT (VOIDmode, (long) (10000 - ((true_prob_val)->u.hwint[0])));
    }
  else
    false_prob_val = (rtx) 0;
  if (ce_info->num_multiple_test_blocks > 0)
    {
      basic_block bb = test_bb;
      basic_block last_test_bb = ce_info->last_test_bb;
      if (! false_expr)
 goto fail;
      do
 {
   rtx start, end;
   rtx t, f;
   bb = block_fallthru (bb);
   start = first_active_insn (bb);
   end = last_active_insn (bb, 1);
   if (start
       && ! cond_exec_process_insns (ce_info, start, end, false_expr,
         false_prob_val, 0))
     goto fail;
   if (! onlyjump_p ((bb)->end_))
     goto fail;
   t = cond_exec_get_condition ((bb)->end_);
   if (! t)
     goto fail;
   f = gen_rtx_fmt_ee (reverse_condition (((enum rtx_code) (t)->code)),
         ((enum machine_mode) (t)->mode),
         (((t)->u.fld[0]).rtx1),
         (((t)->u.fld[1]).rtx1));
   if (ce_info->and_and_p)
     {
       t = gen_rtx_fmt_ee (AND, (((enum machine_mode) (t)->mode)), (true_expr), (t));
       f = gen_rtx_fmt_ee (IOR, (((enum machine_mode) (t)->mode)), (false_expr), (f));
     }
   else
     {
       t = gen_rtx_fmt_ee (IOR, (((enum machine_mode) (t)->mode)), (true_expr), (t));
       f = gen_rtx_fmt_ee (AND, (((enum machine_mode) (t)->mode)), (false_expr), (f));
     }
   true_expr = t;
   false_expr = f;
 }
      while (bb != last_test_bb);
    }
  then_mod_ok = (else_bb == ((struct basic_block_def *)((void *)0)));
  if (then_end
      && (! false_expr
   || ! cond_exec_process_insns (ce_info, then_start, then_end,
     false_expr, false_prob_val,
     then_mod_ok)))
    goto fail;
  if (else_bb && else_end
      && ! cond_exec_process_insns (ce_info, else_start, else_end,
        true_expr, true_prob_val, 1))
    goto fail;
  if (! apply_change_group ())
    {
      return 0;
    }
  if (dump_file)
    fprintf (dump_file, "%d insn%s converted to conditional execution.\n",
      n_insns, (n_insns == 1) ? " was" : "s were");
  merge_if_block (ce_info);
  cond_exec_changed_p = 1;
  return 1;
 fail:
  cancel_changes (0);
  return 0;
}
struct noce_if_info
{
  basic_block test_bb;
  rtx insn_a, insn_b;
  rtx x, a, b;
  rtx jump, cond, cond_earliest;
};
static rtx noce_emit_store_flag (struct noce_if_info *, rtx, int, int);
static int noce_try_move (struct noce_if_info *);
static int noce_try_store_flag (struct noce_if_info *);
static int noce_try_addcc (struct noce_if_info *);
static int noce_try_store_flag_constants (struct noce_if_info *);
static int noce_try_store_flag_mask (struct noce_if_info *);
static rtx noce_emit_cmove (struct noce_if_info *, rtx, enum rtx_code, rtx,
       rtx, rtx, rtx);
static int noce_try_cmove (struct noce_if_info *);
static int noce_try_cmove_arith (struct noce_if_info *);
static rtx noce_get_alt_condition (struct noce_if_info *, rtx, rtx *);
static int noce_try_minmax (struct noce_if_info *);
static int noce_try_abs (struct noce_if_info *);
static int noce_try_sign_mask (struct noce_if_info *);
static rtx
noce_emit_store_flag (struct noce_if_info *if_info, rtx x, int reversep,
        int normalize)
{
  rtx cond = if_info->cond;
  int cond_complex;
  enum rtx_code code;
  cond_complex = (! general_operand ((((cond)->u.fld[0]).rtx1), VOIDmode)
    || ! general_operand ((((cond)->u.fld[1]).rtx1), VOIDmode));
  if (cond_complex)
    cond = ((((((pc_set (if_info->jump))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
  if (reversep)
    code = reversed_comparison_code (cond, if_info->jump);
  else
    code = ((enum rtx_code) (cond)->code);
  if ((if_info->cond_earliest == if_info->jump || cond_complex)
      && (normalize == 0 || 1 == normalize))
    {
      rtx tmp;
      tmp = gen_rtx_fmt_ee (code, ((enum machine_mode) (x)->mode), (((cond)->u.fld[0]).rtx1),
       (((cond)->u.fld[1]).rtx1));
      tmp = gen_rtx_fmt_ee (SET, (VOIDmode), (x), (tmp));
      start_sequence ();
      tmp = emit_insn (tmp);
      if (((((tmp)->u.fld[6]).rtint) >= 0 ? (((tmp)->u.fld[6]).rtint) : recog_memoized_1 (tmp)) >= 0)
 {
   tmp = get_insns ();
   end_sequence ();
   emit_insn (tmp);
   if_info->cond_earliest = if_info->jump;
   return x;
 }
      end_sequence ();
    }
  if (cond_complex || !(mode_class[((enum machine_mode) (x)->mode)] == MODE_INT || mode_class[((enum machine_mode) (x)->mode)] == MODE_PARTIAL_INT))
    return (rtx) 0;
  return emit_store_flag (x, code, (((cond)->u.fld[0]).rtx1),
     (((cond)->u.fld[1]).rtx1), VOIDmode,
     (code == LTU || code == LEU
      || code == GEU || code == GTU), normalize);
}
static void
noce_emit_move_insn (rtx x, rtx y)
{
  enum machine_mode outmode, inmode;
  rtx outer, inner;
  int bitpos;
  if (((enum rtx_code) (x)->code) != STRICT_LOW_PART)
    {
      emit_move_insn (x, y);
      return;
    }
  outer = (((x)->u.fld[0]).rtx1);
  inner = (((outer)->u.fld[0]).rtx1);
  outmode = ((enum machine_mode) (outer)->mode);
  inmode = ((enum machine_mode) (inner)->mode);
  bitpos = (((outer)->u.fld[1]).rtuint) * 8;
  store_bit_field (inner, ((unsigned short) (((unsigned short) mode_size[outmode]) * 8)), bitpos, outmode, y,
     ((unsigned short) (((unsigned short) mode_size[inmode]) * 8)));
}
static rtx
end_ifcvt_sequence (struct noce_if_info *if_info)
{
  rtx insn;
  rtx seq = get_insns ();
  set_used_flags (if_info->x);
  set_used_flags (if_info->cond);
  unshare_all_rtl_in_chain (seq);
  end_sequence ();
  for (insn = seq; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((enum rtx_code) (insn)->code) == JUMP_INSN
 || ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)) == -1)
      return (rtx) 0;
  return seq;
}
static int
noce_try_move (struct noce_if_info *if_info)
{
  rtx cond = if_info->cond;
  enum rtx_code code = ((enum rtx_code) (cond)->code);
  rtx y, seq;
  if (code != NE && code != EQ)
    return 0;
  if ((((mode_class[((enum machine_mode) (if_info->x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (if_info->x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (if_info->x)->mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
      || (((mode_class[((enum machine_mode) (if_info->x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (if_info->x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (if_info->x)->mode)] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations))
    return 0;
  if ((rtx_equal_p (if_info->a, (((cond)->u.fld[0]).rtx1))
       && rtx_equal_p (if_info->b, (((cond)->u.fld[1]).rtx1)))
      || (rtx_equal_p (if_info->a, (((cond)->u.fld[1]).rtx1))
   && rtx_equal_p (if_info->b, (((cond)->u.fld[0]).rtx1))))
    {
      y = (code == EQ) ? if_info->a : if_info->b;
      if (! rtx_equal_p (if_info->x, y))
 {
   start_sequence ();
   noce_emit_move_insn (if_info->x, y);
   seq = end_ifcvt_sequence (if_info);
   if (!seq)
     return 0;
   emit_insn_before_setloc (seq, if_info->jump,
       (((if_info->insn_a)->u.fld[4]).rtint));
 }
      return 1;
    }
  return 0;
}
static int
noce_try_store_flag (struct noce_if_info *if_info)
{
  int reversep;
  rtx target, seq;
  if (((enum rtx_code) (if_info->b)->code) == CONST_INT
      && ((if_info->b)->u.hwint[0]) == 1
      && if_info->a == (const_int_rtx[64]))
    reversep = 0;
  else if (if_info->b == (const_int_rtx[64])
    && ((enum rtx_code) (if_info->a)->code) == CONST_INT
    && ((if_info->a)->u.hwint[0]) == 1
    && (reversed_comparison_code (if_info->cond, if_info->jump)
        != UNKNOWN))
    reversep = 1;
  else
    return 0;
  start_sequence ();
  target = noce_emit_store_flag (if_info, if_info->x, reversep, 0);
  if (target)
    {
      if (target != if_info->x)
 noce_emit_move_insn (if_info->x, target);
      seq = end_ifcvt_sequence (if_info);
      if (! seq)
 return 0;
      emit_insn_before_setloc (seq, if_info->jump,
          (((if_info->insn_a)->u.fld[4]).rtint));
      return 1;
    }
  else
    {
      end_sequence ();
      return 0;
    }
}
static int
noce_try_store_flag_constants (struct noce_if_info *if_info)
{
  rtx target, seq;
  int reversep;
  long itrue, ifalse, diff, tmp;
  int normalize, can_reverse;
  enum machine_mode mode;
  if (! no_new_pseudos
      && ((enum rtx_code) (if_info->a)->code) == CONST_INT
      && ((enum rtx_code) (if_info->b)->code) == CONST_INT)
    {
      mode = ((enum machine_mode) (if_info->x)->mode);
      ifalse = ((if_info->a)->u.hwint[0]);
      itrue = ((if_info->b)->u.hwint[0]);
      if ((itrue - ifalse > 0)
   != ((ifalse < 0) != (itrue < 0) ? ifalse < 0 : ifalse < itrue))
 return 0;
      diff = trunc_int_for_mode (itrue - ifalse, mode);
      can_reverse = (reversed_comparison_code (if_info->cond, if_info->jump)
       != UNKNOWN);
      reversep = 0;
      if (diff == 1 || diff == -1)
 normalize = 0;
      else if (ifalse == 0 && exact_log2_wide ((unsigned long) (itrue)) >= 0
        && (1 == 1
     || ix86_branch_cost >= 2))
 normalize = 1;
      else if (itrue == 0 && exact_log2_wide ((unsigned long) (ifalse)) >= 0 && can_reverse
        && (1 == 1 || ix86_branch_cost >= 2))
 normalize = 1, reversep = 1;
      else if (itrue == -1
        && (1 == -1
     || ix86_branch_cost >= 2))
 normalize = -1;
      else if (ifalse == -1 && can_reverse
        && (1 == -1 || ix86_branch_cost >= 2))
 normalize = -1, reversep = 1;
      else if ((ix86_branch_cost >= 2 && 1 == -1)
        || ix86_branch_cost >= 3)
 normalize = -1;
      else
 return 0;
      if (reversep)
 {
   tmp = itrue; itrue = ifalse; ifalse = tmp;
   diff = trunc_int_for_mode (-diff, mode);
 }
      start_sequence ();
      target = noce_emit_store_flag (if_info, if_info->x, reversep, normalize);
      if (! target)
 {
   end_sequence ();
   return 0;
 }
      if (diff == 1 || diff == -1)
 {
   target = expand_simple_binop (mode,
     (diff == 1
      ? PLUS : MINUS),
     gen_rtx_CONST_INT (VOIDmode, (long) (ifalse)), target, if_info->x, 0,
     OPTAB_WIDEN);
 }
      else if (ifalse == 0 && (tmp = exact_log2_wide ((unsigned long) (itrue))) >= 0)
 {
   target = expand_simple_binop (mode, ASHIFT,
     target, gen_rtx_CONST_INT (VOIDmode, (long) (tmp)), if_info->x, 0,
     OPTAB_WIDEN);
 }
      else if (itrue == -1)
 {
   target = expand_simple_binop (mode, IOR,
     target, gen_rtx_CONST_INT (VOIDmode, (long) (ifalse)), if_info->x, 0,
     OPTAB_WIDEN);
 }
      else
 {
   target = expand_simple_binop (mode, AND,
     target, gen_rtx_CONST_INT (VOIDmode, (long) (diff)), if_info->x, 0,
     OPTAB_WIDEN);
   if (target)
     target = expand_simple_binop (mode, PLUS,
       target, gen_rtx_CONST_INT (VOIDmode, (long) (ifalse)),
       if_info->x, 0, OPTAB_WIDEN);
 }
      if (! target)
 {
   end_sequence ();
   return 0;
 }
      if (target != if_info->x)
 noce_emit_move_insn (if_info->x, target);
      seq = end_ifcvt_sequence (if_info);
      if (!seq)
 return 0;
      emit_insn_before_setloc (seq, if_info->jump,
          (((if_info->insn_a)->u.fld[4]).rtint));
      return 1;
    }
  return 0;
}
static int
noce_try_addcc (struct noce_if_info *if_info)
{
  rtx target, seq;
  int subtract, normalize;
  if (! no_new_pseudos
      && ((enum rtx_code) (if_info->a)->code) == PLUS
      && rtx_equal_p ((((if_info->a)->u.fld[0]).rtx1), if_info->b)
      && (reversed_comparison_code (if_info->cond, if_info->jump)
   != UNKNOWN))
    {
      rtx cond = if_info->cond;
      enum rtx_code code = reversed_comparison_code (cond, if_info->jump);
      if (general_operand ((((cond)->u.fld[0]).rtx1), VOIDmode)
   && general_operand ((((cond)->u.fld[1]).rtx1), VOIDmode))
 {
   start_sequence ();
   target = emit_conditional_add (if_info->x, code,
      (((cond)->u.fld[0]).rtx1),
      (((cond)->u.fld[1]).rtx1),
      VOIDmode,
      if_info->b,
      (((if_info->a)->u.fld[1]).rtx1),
      ((enum machine_mode) (if_info->x)->mode),
      (code == LTU || code == GEU
       || code == LEU || code == GTU));
   if (target)
     {
       if (target != if_info->x)
  noce_emit_move_insn (if_info->x, target);
       seq = end_ifcvt_sequence (if_info);
       if (!seq)
  return 0;
       emit_insn_before_setloc (seq, if_info->jump,
           (((if_info->insn_a)->u.fld[4]).rtint));
       return 1;
     }
   end_sequence ();
 }
      if (ix86_branch_cost >= 2
   && ((((if_info->a)->u.fld[1]).rtx1) == (const_int_rtx[64 +1])
       || (((if_info->a)->u.fld[1]).rtx1) == (const_int_rtx[64 -1])))
        {
   start_sequence ();
   if (1 == (((((if_info->a)->u.fld[1]).rtx1))->u.hwint[0]))
     subtract = 0, normalize = 0;
   else if (-1 == (((((if_info->a)->u.fld[1]).rtx1))->u.hwint[0]))
     subtract = 1, normalize = 0;
   else
     subtract = 0, normalize = (((((if_info->a)->u.fld[1]).rtx1))->u.hwint[0]);
   target = noce_emit_store_flag (if_info,
      gen_reg_rtx (((enum machine_mode) (if_info->x)->mode)),
      1, normalize);
   if (target)
     target = expand_simple_binop (((enum machine_mode) (if_info->x)->mode),
       subtract ? MINUS : PLUS,
       if_info->b, target, if_info->x,
       0, OPTAB_WIDEN);
   if (target)
     {
       if (target != if_info->x)
  noce_emit_move_insn (if_info->x, target);
       seq = end_ifcvt_sequence (if_info);
       if (!seq)
  return 0;
       emit_insn_before_setloc (seq, if_info->jump,
           (((if_info->insn_a)->u.fld[4]).rtint));
       return 1;
     }
   end_sequence ();
 }
    }
  return 0;
}
static int
noce_try_store_flag_mask (struct noce_if_info *if_info)
{
  rtx target, seq;
  int reversep;
  reversep = 0;
  if (! no_new_pseudos
      && (ix86_branch_cost >= 2
   || 1 == -1)
      && ((if_info->a == (const_int_rtx[64])
    && rtx_equal_p (if_info->b, if_info->x))
   || ((reversep = (reversed_comparison_code (if_info->cond,
           if_info->jump)
      != UNKNOWN))
       && if_info->b == (const_int_rtx[64])
       && rtx_equal_p (if_info->a, if_info->x))))
    {
      start_sequence ();
      target = noce_emit_store_flag (if_info,
         gen_reg_rtx (((enum machine_mode) (if_info->x)->mode)),
         reversep, -1);
      if (target)
        target = expand_simple_binop (((enum machine_mode) (if_info->x)->mode), AND,
          if_info->x,
          target, if_info->x, 0,
          OPTAB_WIDEN);
      if (target)
 {
   if (target != if_info->x)
     noce_emit_move_insn (if_info->x, target);
   seq = end_ifcvt_sequence (if_info);
   if (!seq)
     return 0;
   emit_insn_before_setloc (seq, if_info->jump,
       (((if_info->insn_a)->u.fld[4]).rtint));
   return 1;
 }
      end_sequence ();
    }
  return 0;
}
static rtx
noce_emit_cmove (struct noce_if_info *if_info, rtx x, enum rtx_code code,
   rtx cmp_a, rtx cmp_b, rtx vfalse, rtx vtrue)
{
  if (if_info->cond_earliest == if_info->jump)
    {
      rtx tmp;
      tmp = gen_rtx_fmt_ee (code, ((enum machine_mode) (if_info->cond)->mode), cmp_a, cmp_b);
      tmp = gen_rtx_fmt_eee (IF_THEN_ELSE, (((enum machine_mode) (x)->mode)), (tmp), (vtrue), (vfalse));
      tmp = gen_rtx_fmt_ee (SET, (VOIDmode), (x), (tmp));
      start_sequence ();
      tmp = emit_insn (tmp);
      if (((((tmp)->u.fld[6]).rtint) >= 0 ? (((tmp)->u.fld[6]).rtint) : recog_memoized_1 (tmp)) >= 0)
 {
   tmp = get_insns ();
   end_sequence ();
   emit_insn (tmp);
   return x;
 }
      end_sequence ();
    }
  if (! general_operand (cmp_a, ((enum machine_mode) (cmp_a)->mode))
      || ! general_operand (cmp_b, ((enum machine_mode) (cmp_b)->mode)))
    return (rtx) 0;
  return emit_conditional_move (x, code, cmp_a, cmp_b, VOIDmode,
    vtrue, vfalse, ((enum machine_mode) (x)->mode),
           (code == LTU || code == GEU
     || code == LEU || code == GTU));
}
static int
noce_try_cmove (struct noce_if_info *if_info)
{
  enum rtx_code code;
  rtx target, seq;
  if ((((rtx_class[(int) (((enum rtx_code) (if_info->a)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (if_info->a)->code) == CONST_VECTOR) || register_operand (if_info->a, VOIDmode))
      && (((rtx_class[(int) (((enum rtx_code) (if_info->b)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (if_info->b)->code) == CONST_VECTOR) || register_operand (if_info->b, VOIDmode)))
    {
      start_sequence ();
      code = ((enum rtx_code) (if_info->cond)->code);
      target = noce_emit_cmove (if_info, if_info->x, code,
    (((if_info->cond)->u.fld[0]).rtx1),
    (((if_info->cond)->u.fld[1]).rtx1),
    if_info->a, if_info->b);
      if (target)
 {
   if (target != if_info->x)
     noce_emit_move_insn (if_info->x, target);
   seq = end_ifcvt_sequence (if_info);
   if (!seq)
     return 0;
   emit_insn_before_setloc (seq, if_info->jump,
       (((if_info->insn_a)->u.fld[4]).rtint));
   return 1;
 }
      else
 {
   end_sequence ();
   return 0;
 }
    }
  return 0;
}
static int
noce_try_cmove_arith (struct noce_if_info *if_info)
{
  rtx a = if_info->a;
  rtx b = if_info->b;
  rtx x = if_info->x;
  rtx insn_a, insn_b;
  rtx tmp, target;
  int is_mem = 0;
  enum rtx_code code;
  if (! no_new_pseudos && cse_not_expected
      && (((enum rtx_code) (a)->code) == MEM) && (((enum rtx_code) (b)->code) == MEM)
      && ix86_branch_cost >= 5)
    {
      a = (((a)->u.fld[0]).rtx1);
      b = (((b)->u.fld[0]).rtx1);
      x = gen_reg_rtx ((0 ? DImode : SImode));
      is_mem = 1;
    }
  else if (may_trap_p (a) || may_trap_p (b))
    return 0;
  code = ((enum rtx_code) (if_info->cond)->code);
  insn_a = if_info->insn_a;
  insn_b = if_info->insn_b;
  if (reversed_comparison_code (if_info->cond, if_info->jump) != UNKNOWN)
    {
      int reversep = 0;
      if (rtx_equal_p (b, x))
 reversep = 1;
      else if (general_operand (b, ((enum machine_mode) (b)->mode)))
 reversep = 1;
      if (reversep)
 {
   code = reversed_comparison_code (if_info->cond, if_info->jump);
   tmp = a, a = b, b = tmp;
   tmp = insn_a, insn_a = insn_b, insn_b = tmp;
 }
    }
  start_sequence ();
  if (! general_operand (a, ((enum machine_mode) (a)->mode)))
    {
      rtx set;
      if (no_new_pseudos)
 goto end_seq_and_fail;
      if (is_mem)
 {
   tmp = gen_reg_rtx (((enum machine_mode) (a)->mode));
   tmp = emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (tmp), (a)));
 }
      else if (! insn_a)
 goto end_seq_and_fail;
      else
 {
   a = gen_reg_rtx (((enum machine_mode) (a)->mode));
   tmp = copy_rtx (insn_a);
   set = (((((enum rtx_code) (tmp)->code) == INSN) || (((enum rtx_code) (tmp)->code) == JUMP_INSN) || (((enum rtx_code) (tmp)->code) == CALL_INSN)) ? (((enum rtx_code) ((((tmp)->u.fld[5]).rtx1))->code) == SET ? (((tmp)->u.fld[5]).rtx1) : single_set_2 (tmp, (((tmp)->u.fld[5]).rtx1))) : (rtx) 0);
   (((set)->u.fld[0]).rtx1) = a;
   tmp = emit_insn ((((tmp)->u.fld[5]).rtx1));
 }
      if (((((tmp)->u.fld[6]).rtint) >= 0 ? (((tmp)->u.fld[6]).rtint) : recog_memoized_1 (tmp)) < 0)
 goto end_seq_and_fail;
    }
  if (! general_operand (b, ((enum machine_mode) (b)->mode)))
    {
      rtx set;
      if (no_new_pseudos)
 goto end_seq_and_fail;
      if (is_mem)
 {
          tmp = gen_reg_rtx (((enum machine_mode) (b)->mode));
   tmp = emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (tmp), (b))
       );
 }
      else if (! insn_b)
 goto end_seq_and_fail;
      else
 {
          b = gen_reg_rtx (((enum machine_mode) (b)->mode));
   tmp = copy_rtx (insn_b);
   set = (((((enum rtx_code) (tmp)->code) == INSN) || (((enum rtx_code) (tmp)->code) == JUMP_INSN) || (((enum rtx_code) (tmp)->code) == CALL_INSN)) ? (((enum rtx_code) ((((tmp)->u.fld[5]).rtx1))->code) == SET ? (((tmp)->u.fld[5]).rtx1) : single_set_2 (tmp, (((tmp)->u.fld[5]).rtx1))) : (rtx) 0);
   (((set)->u.fld[0]).rtx1) = b;
   tmp = emit_insn ((((tmp)->u.fld[5]).rtx1));
 }
      if (((((tmp)->u.fld[6]).rtint) >= 0 ? (((tmp)->u.fld[6]).rtint) : recog_memoized_1 (tmp)) < 0)
 goto end_seq_and_fail;
    }
  target = noce_emit_cmove (if_info, x, code, (((if_info->cond)->u.fld[0]).rtx1),
       (((if_info->cond)->u.fld[1]).rtx1), a, b);
  if (! target)
    goto end_seq_and_fail;
  if (is_mem)
    {
      tmp = gen_rtx_MEM (((enum machine_mode) (if_info->x)->mode), target);
      if ((((if_info->a))->volatil) || (((if_info->b))->volatil))
 (((tmp))->volatil) = 1;
      if ((((if_info->a))->in_struct) && (((if_info->b))->in_struct))
 (((tmp))->in_struct) = 1;
      if ((((if_info->a))->return_val) && (((if_info->b))->return_val))
 (((tmp))->return_val) = 1;
      if (((((if_info->a)->u.fld[1]).rtmem) == 0 ? 0 : (((if_info->a)->u.fld[1]).rtmem)->alias) == ((((if_info->b)->u.fld[1]).rtmem) == 0 ? 0 : (((if_info->b)->u.fld[1]).rtmem)->alias))
 set_mem_alias_set (tmp, ((((if_info->a)->u.fld[1]).rtmem) == 0 ? 0 : (((if_info->a)->u.fld[1]).rtmem)->alias));
      set_mem_align (tmp,
       ((((((if_info->a)->u.fld[1]).rtmem) != 0 ? (((if_info->a)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (if_info->a)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (if_info->a)->mode)) : 8))) < (((((if_info->b)->u.fld[1]).rtmem) != 0 ? (((if_info->b)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (if_info->b)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (if_info->b)->mode)) : 8))) ? (((((if_info->a)->u.fld[1]).rtmem) != 0 ? (((if_info->a)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (if_info->a)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (if_info->a)->mode)) : 8))) : (((((if_info->b)->u.fld[1]).rtmem) != 0 ? (((if_info->b)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (if_info->b)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (if_info->b)->mode)) : 8)))));
      noce_emit_move_insn (if_info->x, tmp);
    }
  else if (target != x)
    noce_emit_move_insn (x, target);
  tmp = end_ifcvt_sequence (if_info);
  if (!tmp)
    return 0;
  emit_insn_before_setloc (tmp, if_info->jump, (((if_info->insn_a)->u.fld[4]).rtint));
  return 1;
 end_seq_and_fail:
  end_sequence ();
  return 0;
}
static rtx
noce_get_alt_condition (struct noce_if_info *if_info, rtx target,
   rtx *earliest)
{
  rtx cond, set, insn;
  int reverse;
  if (reg_mentioned_p (target, if_info->cond))
    {
      *earliest = if_info->cond_earliest;
      return if_info->cond;
    }
  set = pc_set (if_info->jump);
  cond = ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
  reverse
    = ((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->code) == LABEL_REF
      && (((((((((set)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->u.fld[0]).rtx1) == (((if_info->jump)->u.fld[9]).rtx1);
  if (((enum rtx_code) (target)->code) == CONST_INT)
    {
      enum rtx_code code = ((enum rtx_code) (if_info->cond)->code);
      rtx op_a = (((if_info->cond)->u.fld[0]).rtx1);
      rtx op_b = (((if_info->cond)->u.fld[1]).rtx1);
      rtx prev_insn;
      prev_insn = (((if_info->cond_earliest)->u.fld[1]).rtx1);
      if (prev_insn
   && ((((enum rtx_code) (prev_insn)->code) == INSN) || (((enum rtx_code) (prev_insn)->code) == JUMP_INSN) || (((enum rtx_code) (prev_insn)->code) == CALL_INSN))
   && ((enum rtx_code) ((((prev_insn)->u.fld[5]).rtx1))->code) == SET)
 {
   rtx src = find_reg_equal_equiv_note (prev_insn);
   if (!src)
     src = ((((((prev_insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1);
   if (((enum rtx_code) (src)->code) == CONST_INT)
     {
       if (rtx_equal_p (op_a, ((((((prev_insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1)))
  op_a = src;
       else if (rtx_equal_p (op_b, ((((((prev_insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1)))
  op_b = src;
       if (((enum rtx_code) (op_a)->code) == CONST_INT)
  {
    rtx tmp = op_a;
    op_a = op_b;
    op_b = tmp;
    code = swap_condition (code);
  }
     }
 }
      if (((enum rtx_code) (op_b)->code) == CONST_INT)
 {
   long desired_val = ((target)->u.hwint[0]);
   long actual_val = ((op_b)->u.hwint[0]);
   switch (code)
     {
     case LT:
       if (actual_val == desired_val + 1)
  {
    code = LE;
    op_b = gen_rtx_CONST_INT (VOIDmode, (long) (desired_val));
  }
       break;
     case LE:
       if (actual_val == desired_val - 1)
  {
    code = LT;
    op_b = gen_rtx_CONST_INT (VOIDmode, (long) (desired_val));
  }
       break;
     case GT:
       if (actual_val == desired_val - 1)
  {
    code = GE;
    op_b = gen_rtx_CONST_INT (VOIDmode, (long) (desired_val));
  }
       break;
     case GE:
       if (actual_val == desired_val + 1)
  {
    code = GT;
    op_b = gen_rtx_CONST_INT (VOIDmode, (long) (desired_val));
  }
       break;
     default:
       break;
     }
 }
      if (code != ((enum rtx_code) (if_info->cond)->code)
   || op_a != (((if_info->cond)->u.fld[0]).rtx1)
   || op_b != (((if_info->cond)->u.fld[1]).rtx1))
 {
   cond = gen_rtx_fmt_ee (code, ((enum machine_mode) (cond)->mode), op_a, op_b);
   *earliest = if_info->cond_earliest;
   return cond;
 }
    }
  cond = canonicalize_condition (if_info->jump, cond, reverse,
     earliest, target, 0);
  if (! cond || ! reg_mentioned_p (target, cond))
    return ((void *)0);
  for (insn = if_info->jump; insn != *earliest; insn = (((insn)->u.fld[1]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && reg_overlap_mentioned_p (if_info->x, (((insn)->u.fld[5]).rtx1)))
      return ((void *)0);
  for (insn = *earliest; insn != if_info->jump; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
 && (modified_in_p (if_info->a, insn)
     || modified_in_p (if_info->b, insn)))
      return ((void *)0);
  return cond;
}
static int
noce_try_minmax (struct noce_if_info *if_info)
{
  rtx cond, earliest, target, seq;
  enum rtx_code code, op;
  int unsignedp;
  if (no_new_pseudos)
    return 0;
  if ((((mode_class[((enum machine_mode) (if_info->x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (if_info->x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (if_info->x)->mode)] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations)
      || (((mode_class[((enum machine_mode) (if_info->x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (if_info->x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (if_info->x)->mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
    return 0;
  cond = noce_get_alt_condition (if_info, if_info->a, &earliest);
  if (!cond)
    return 0;
  code = ((enum rtx_code) (cond)->code);
  if (rtx_equal_p ((((cond)->u.fld[0]).rtx1), if_info->a))
    {
      if (! rtx_equal_p ((((cond)->u.fld[1]).rtx1), if_info->b))
 return 0;
    }
  else if (rtx_equal_p ((((cond)->u.fld[1]).rtx1), if_info->a))
    {
      if (! rtx_equal_p ((((cond)->u.fld[0]).rtx1), if_info->b))
 return 0;
      code = swap_condition (code);
    }
  else
    return 0;
  switch (code)
    {
    case LT:
    case LE:
    case UNLT:
    case UNLE:
      op = SMAX;
      unsignedp = 0;
      break;
    case GT:
    case GE:
    case UNGT:
    case UNGE:
      op = SMIN;
      unsignedp = 0;
      break;
    case LTU:
    case LEU:
      op = UMAX;
      unsignedp = 1;
      break;
    case GTU:
    case GEU:
      op = UMIN;
      unsignedp = 1;
      break;
    default:
      return 0;
    }
  start_sequence ();
  target = expand_simple_binop (((enum machine_mode) (if_info->x)->mode), op,
    if_info->a, if_info->b,
    if_info->x, unsignedp, OPTAB_WIDEN);
  if (! target)
    {
      end_sequence ();
      return 0;
    }
  if (target != if_info->x)
    noce_emit_move_insn (if_info->x, target);
  seq = end_ifcvt_sequence (if_info);
  if (!seq)
    return 0;
  emit_insn_before_setloc (seq, if_info->jump, (((if_info->insn_a)->u.fld[4]).rtint));
  if_info->cond = cond;
  if_info->cond_earliest = earliest;
  return 1;
}
static int
noce_try_abs (struct noce_if_info *if_info)
{
  rtx cond, earliest, target, seq, a, b, c;
  int negate;
  if (no_new_pseudos)
    return 0;
  a = if_info->a;
  b = if_info->b;
  if (((enum rtx_code) (a)->code) == NEG && rtx_equal_p ((((a)->u.fld[0]).rtx1), b))
    negate = 0;
  else if (((enum rtx_code) (b)->code) == NEG && rtx_equal_p ((((b)->u.fld[0]).rtx1), a))
    {
      c = a; a = b; b = c;
      negate = 1;
    }
  else
    return 0;
  cond = noce_get_alt_condition (if_info, b, &earliest);
  if (!cond)
    return 0;
  if (rtx_equal_p ((((cond)->u.fld[0]).rtx1), b))
    c = (((cond)->u.fld[1]).rtx1);
  else if (rtx_equal_p ((((cond)->u.fld[1]).rtx1), b))
    c = (((cond)->u.fld[0]).rtx1);
  else
    return 0;
  if ((((enum rtx_code) (c)->code) == REG))
    {
      rtx insn, note = ((void *)0);
      for (insn = earliest;
    insn != (if_info->test_bb)->head_;
    insn = (((insn)->u.fld[1]).rtx1))
 if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
     && ((note = find_reg_note (insn, REG_EQUAL, c))
  || (note = find_reg_note (insn, REG_EQUIV, c))))
   break;
      if (! note)
 return 0;
      c = (((note)->u.fld[0]).rtx1);
    }
  if ((((enum rtx_code) (c)->code) == MEM)
      && ((enum rtx_code) ((((c)->u.fld[0]).rtx1))->code) == SYMBOL_REF
      && ((((((c)->u.fld[0]).rtx1)))->unchanging))
    c = get_pool_constant ((((c)->u.fld[0]).rtx1));
  if (c == (const_int_rtx[64 -1]) && ((enum rtx_code) (cond)->code) == GT)
    ;
  else if (c == (const_int_rtx[64 +1]) && ((enum rtx_code) (cond)->code) == LT)
    ;
  else if (c != (const_tiny_rtx[0][(int) (((enum machine_mode) (b)->mode))]))
    return 0;
  switch (((enum rtx_code) (cond)->code))
    {
    case LT:
    case LE:
    case UNLT:
    case UNLE:
      negate = !negate;
      break;
    case GT:
    case GE:
    case UNGT:
    case UNGE:
      break;
    default:
      return 0;
    }
  start_sequence ();
  target = expand_abs_nojump (((enum machine_mode) (if_info->x)->mode), b, if_info->x, 1);
  if (target && negate)
    target = expand_simple_unop (((enum machine_mode) (target)->mode), NEG, target, if_info->x, 0);
  if (! target)
    {
      end_sequence ();
      return 0;
    }
  if (target != if_info->x)
    noce_emit_move_insn (if_info->x, target);
  seq = end_ifcvt_sequence (if_info);
  if (!seq)
    return 0;
  emit_insn_before_setloc (seq, if_info->jump, (((if_info->insn_a)->u.fld[4]).rtint));
  if_info->cond = cond;
  if_info->cond_earliest = earliest;
  return 1;
}
static int
noce_try_sign_mask (struct noce_if_info *if_info)
{
  rtx cond, t, m, c, seq;
  enum machine_mode mode;
  enum rtx_code code;
  if (no_new_pseudos)
    return 0;
  cond = if_info->cond;
  code = ((enum rtx_code) (cond)->code);
  m = (((cond)->u.fld[0]).rtx1);
  c = (((cond)->u.fld[1]).rtx1);
  t = (rtx) 0;
  if (if_info->a == (const_int_rtx[64]))
    {
      if ((code == LT && c == (const_int_rtx[64]))
   || (code == LE && c == (const_int_rtx[64 -1])))
 t = if_info->b;
    }
  else if (if_info->b == (const_int_rtx[64]))
    {
      if ((code == GE && c == (const_int_rtx[64]))
   || (code == GT && c == (const_int_rtx[64 -1])))
 t = if_info->a;
    }
  if (! t || side_effects_p (t))
    return 0;
  mode = ((enum machine_mode) (t)->mode);
  if (((enum machine_mode) (m)->mode) != mode)
    return 0;
  if (rtx_cost (t, SET) >= ((2) * 4))
    return 0;
  start_sequence ();
  m = emit_store_flag (gen_reg_rtx (mode), LT, m, (const_int_rtx[64]), mode, 0, -1);
  t = m ? expand_binop (mode, (optab_table[OTI_and]), m, t, (rtx) 0, 0, OPTAB_DIRECT)
 : (rtx) 0;
  if (!t)
    {
      end_sequence ();
      return 0;
    }
  noce_emit_move_insn (if_info->x, t);
  seq = end_ifcvt_sequence (if_info);
  if (!seq)
    return 0;
  emit_insn_before_setloc (seq, if_info->jump, (((if_info->insn_a)->u.fld[4]).rtint));
  return 1;
}
static rtx
noce_get_condition (rtx jump, rtx *earliest)
{
  rtx cond, set, tmp, insn;
  unsigned char reverse;
  if (! any_condjump_p (jump))
    return (rtx) 0;
  set = pc_set (jump);
  reverse = (((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->code) == LABEL_REF
      && (((((((((set)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->u.fld[0]).rtx1) == (((jump)->u.fld[9]).rtx1));
  cond = ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
  tmp = (((cond)->u.fld[0]).rtx1);
  if ((((enum rtx_code) (tmp)->code) == REG) && mode_class[((enum machine_mode) (tmp)->mode)] == MODE_INT)
    {
      *earliest = jump;
      if (reverse)
 cond = gen_rtx_fmt_ee (reverse_condition (((enum rtx_code) (cond)->code)),
          ((enum machine_mode) (cond)->mode), tmp, (((cond)->u.fld[1]).rtx1));
      return cond;
    }
  tmp = canonicalize_condition (jump, cond, reverse, earliest, (rtx) 0,
    0);
  if (!tmp)
    return (rtx) 0;
  for (insn = *earliest; insn != jump; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && modified_in_p (tmp, insn))
      break;
  if (insn == jump)
    return tmp;
  tmp = (((tmp)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (tmp)->code) == REG) || mode_class[((enum machine_mode) (tmp)->mode)] != MODE_INT)
    return (rtx) 0;
  tmp = canonicalize_condition (jump, cond, reverse, earliest, tmp,
    0);
  if (!tmp)
    return (rtx) 0;
  for (insn = *earliest; insn != jump; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && modified_in_p (tmp, insn))
      return (rtx) 0;
  return tmp;
}
static int
noce_operand_ok (rtx op)
{
  if ((((enum rtx_code) (op)->code) == MEM))
    return ! side_effects_p ((((op)->u.fld[0]).rtx1));
  if (side_effects_p (op))
    return 0;
  return ! may_trap_p (op);
}
static int
noce_process_if_block (struct ce_if_block * ce_info)
{
  basic_block test_bb = ce_info->test_bb;
  basic_block then_bb = ce_info->then_bb;
  basic_block else_bb = ce_info->else_bb;
  struct noce_if_info if_info;
  rtx insn_a, insn_b;
  rtx set_a, set_b;
  rtx orig_x, x, a, b;
  rtx jump, cond;
  if (ce_info->num_multiple_test_blocks)
    {
      if (else_bb || ! ce_info->and_and_p)
 return 0;
      ce_info->test_bb = test_bb = ce_info->last_test_bb;
      ce_info->num_multiple_test_blocks = 0;
      ce_info->num_and_and_blocks = 0;
      ce_info->num_or_or_blocks = 0;
    }
  jump = (test_bb)->end_;
  cond = noce_get_condition (jump, &if_info.cond_earliest);
  if (! cond)
    return 0;
  if (! onlyjump_p (jump))
    return 0;
  if (((enum machine_mode) ((((cond)->u.fld[0]).rtx1))->mode) == BLKmode)
    return 0;
  insn_a = first_active_insn (then_bb);
  if (! insn_a
      || insn_a != last_active_insn (then_bb, 0)
      || (set_a = (((((enum rtx_code) (insn_a)->code) == INSN) || (((enum rtx_code) (insn_a)->code) == JUMP_INSN) || (((enum rtx_code) (insn_a)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn_a)->u.fld[5]).rtx1))->code) == SET ? (((insn_a)->u.fld[5]).rtx1) : single_set_2 (insn_a, (((insn_a)->u.fld[5]).rtx1))) : (rtx) 0)) == (rtx) 0)
    return 0;
  x = (((set_a)->u.fld[0]).rtx1);
  a = (((set_a)->u.fld[1]).rtx1);
  set_b = (rtx) 0;
  if (else_bb)
    {
      insn_b = first_active_insn (else_bb);
      if (! insn_b
   || insn_b != last_active_insn (else_bb, 0)
   || (set_b = (((((enum rtx_code) (insn_b)->code) == INSN) || (((enum rtx_code) (insn_b)->code) == JUMP_INSN) || (((enum rtx_code) (insn_b)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn_b)->u.fld[5]).rtx1))->code) == SET ? (((insn_b)->u.fld[5]).rtx1) : single_set_2 (insn_b, (((insn_b)->u.fld[5]).rtx1))) : (rtx) 0)) == (rtx) 0
   || ! rtx_equal_p (x, (((set_b)->u.fld[0]).rtx1)))
 return 0;
    }
  else
    {
      insn_b = prev_nonnote_insn (if_info.cond_earliest);
      if (! insn_b
   || ((enum rtx_code) (insn_b)->code) != INSN
   || (set_b = (((((enum rtx_code) (insn_b)->code) == INSN) || (((enum rtx_code) (insn_b)->code) == JUMP_INSN) || (((enum rtx_code) (insn_b)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn_b)->u.fld[5]).rtx1))->code) == SET ? (((insn_b)->u.fld[5]).rtx1) : single_set_2 (insn_b, (((insn_b)->u.fld[5]).rtx1))) : (rtx) 0)) == (rtx) 0
   || ! rtx_equal_p (x, (((set_b)->u.fld[0]).rtx1))
   || reg_overlap_mentioned_p (x, (((set_b)->u.fld[1]).rtx1))
   || modified_between_p ((((set_b)->u.fld[1]).rtx1),
     (((if_info.cond_earliest)->u.fld[1]).rtx1), jump)
   || reg_overlap_mentioned_p (x, cond)
   || reg_overlap_mentioned_p (x, a)
   || modified_between_p (x, (((if_info.cond_earliest)->u.fld[1]).rtx1), jump))
 insn_b = set_b = (rtx) 0;
    }
  if (side_effects_p (x))
    return 0;
  b = (set_b ? (((set_b)->u.fld[1]).rtx1) : x);
  orig_x = x;
  if (!(((enum rtx_code) (x)->code) == REG)
      || (1
   && (((x)->u.fld[0]).rtuint) < 53))
    {
      if (no_new_pseudos || ((enum machine_mode) (x)->mode) == BLKmode)
 return 0;
      x = gen_reg_rtx (((enum machine_mode) (((enum rtx_code) (x)->code) == STRICT_LOW_PART ? (((x)->u.fld[0]).rtx1) : x)->mode)
                       );
    }
  if (! noce_operand_ok (a) || ! noce_operand_ok (b))
    return 0;
  if_info.test_bb = test_bb;
  if_info.cond = cond;
  if_info.jump = jump;
  if_info.insn_a = insn_a;
  if_info.insn_b = insn_b;
  if_info.x = x;
  if_info.a = a;
  if_info.b = b;
  if (rtx_equal_p (a, b))
    {
      if (insn_b && else_bb)
 {
   rtx note;
   if (else_bb && insn_b == (else_bb)->end_)
     (else_bb)->end_ = (((insn_b)->u.fld[1]).rtx1);
   reorder_insns (insn_b, insn_b, (((jump)->u.fld[1]).rtx1));
   if ((note = find_reg_note (insn_b, REG_EQUAL, (rtx) 0)) != 0)
     remove_note (insn_b, note);
   insn_b = (rtx) 0;
 }
      else if (insn_b && side_effects_p (orig_x))
 return 0;
      x = orig_x;
      goto success;
    }
  if (! set_b
      && (((enum rtx_code) (orig_x)->code) == MEM)
      && ! (((orig_x))->call)
      && rtx_addr_can_trap_p ((((orig_x)->u.fld[0]).rtx1)))
    {
      if (1)
 {
   if (noce_try_cmove (&if_info))
     goto success;
   if (! 0
       && noce_try_cmove_arith (&if_info))
     goto success;
 }
      return 0;
    }
  if (noce_try_move (&if_info))
    goto success;
  if (noce_try_store_flag (&if_info))
    goto success;
  if (noce_try_minmax (&if_info))
    goto success;
  if (noce_try_abs (&if_info))
    goto success;
  if (1
      && noce_try_cmove (&if_info))
    goto success;
  if (! 0)
    {
      if (noce_try_store_flag_constants (&if_info))
 goto success;
      if (noce_try_addcc (&if_info))
 goto success;
      if (noce_try_store_flag_mask (&if_info))
 goto success;
      if (1
   && noce_try_cmove_arith (&if_info))
 goto success;
      if (noce_try_sign_mask (&if_info))
 goto success;
    }
  return 0;
 success:
  delete_insn (insn_a);
  if (insn_b && else_bb)
    delete_insn (insn_b);
  delete_insn (jump);
  if (orig_x != x)
    {
      start_sequence ();
      noce_emit_move_insn (orig_x, x);
      insn_b = get_insns ();
      set_used_flags (orig_x);
      unshare_all_rtl_in_chain (insn_b);
      end_sequence ();
      emit_insn_after_setloc (insn_b, (test_bb)->end_, (((insn_a)->u.fld[4]).rtint));
    }
  merge_if_block (ce_info);
  return 1;
}
static int
process_if_block (struct ce_if_block * ce_info)
{
  if (! reload_completed
      && noce_process_if_block (ce_info))
    return 1;
  if (0 && reload_completed)
    {
      if (cond_exec_process_if_block (ce_info, 1))
 return 1;
      if (ce_info->num_multiple_test_blocks)
 {
   cancel_changes (0);
   if (cond_exec_process_if_block (ce_info, 0))
     return 1;
 }
    }
  return 0;
}
static void
merge_if_block (struct ce_if_block * ce_info)
{
  basic_block test_bb = ce_info->test_bb;
  basic_block then_bb = ce_info->then_bb;
  basic_block else_bb = ce_info->else_bb;
  basic_block join_bb = ce_info->join_bb;
  basic_block combo_bb;
  combo_bb = test_bb;
  if (ce_info->num_multiple_test_blocks > 0)
    {
      basic_block bb = test_bb;
      basic_block last_test_bb = ce_info->last_test_bb;
      basic_block fallthru = block_fallthru (bb);
      do
 {
   bb = fallthru;
   fallthru = block_fallthru (bb);
   merge_blocks (combo_bb, bb);
   num_true_changes++;
 }
      while (bb != last_test_bb);
    }
  if (then_bb)
    {
      if (combo_bb->global_live_at_end)
 bitmap_copy (combo_bb->global_live_at_end, then_bb->global_live_at_end)
                                    ;
      merge_blocks (combo_bb, then_bb);
      num_true_changes++;
    }
  if (else_bb)
    {
      merge_blocks (combo_bb, else_bb);
      num_true_changes++;
    }
  if (! join_bb)
    {
      rtx last = (combo_bb)->end_;
      if (combo_bb->succ == ((struct edge_def *)((void *)0)))
 {
   if (find_reg_note (last, REG_NORETURN, ((void *)0)))
     ;
   else if (((enum rtx_code) (last)->code) == INSN
     && ((enum rtx_code) ((((last)->u.fld[5]).rtx1))->code) == TRAP_IF
     && ((((((last)->u.fld[5]).rtx1))->u.fld[0]).rtx1) == const_true_rtx)
     ;
   else
     abort ();
 }
      else if (((enum rtx_code) (last)->code) == JUMP_INSN)
 ;
      else if (combo_bb->succ->dest == EXIT_BLOCK_PTR
        && ((enum rtx_code) (last)->code) == CALL_INSN
        && (((last))->jump))
 ;
      else if ((combo_bb->succ->flags & 8)
        && can_throw_internal (last))
 ;
      else
 abort ();
    }
  else if ((join_bb->pred == ((void *)0)
     || join_bb->pred->pred_next == ((void *)0))
    && join_bb != EXIT_BLOCK_PTR)
    {
      if (combo_bb->global_live_at_end)
 bitmap_copy (combo_bb->global_live_at_end, join_bb->global_live_at_end)
                                    ;
      merge_blocks (combo_bb, join_bb);
      num_true_changes++;
    }
  else
    {
      if (combo_bb->succ->succ_next != ((struct edge_def *)((void *)0))
   || combo_bb->succ->dest != join_bb)
 abort ();
      if (join_bb != EXIT_BLOCK_PTR)
 tidy_fallthru_edge (combo_bb->succ);
    }
  num_updated_if_blocks++;
}
static basic_block
find_if_header (basic_block test_bb, int pass)
{
  ce_if_block_t ce_info;
  edge then_edge;
  edge else_edge;
  if ((then_edge = test_bb->succ) == ((struct edge_def *)((void *)0))
      || (else_edge = then_edge->succ_next) == ((struct edge_def *)((void *)0))
      || else_edge->succ_next != ((struct edge_def *)((void *)0)))
    return ((void *)0);
  if ((then_edge->flags & (2 | 4 | 8))
      || (else_edge->flags & (2 | 4 | 8)))
    return ((void *)0);
  if ((then_edge->flags & 512)
      || (else_edge->flags & 512))
    return ((void *)0);
  if (then_edge->flags & 1)
    ;
  else if (else_edge->flags & 1)
    {
      edge e = else_edge;
      else_edge = then_edge;
      then_edge = e;
    }
  else
    return ((void *)0);
  memset (&ce_info, '\0', sizeof (ce_info));
  ce_info.test_bb = test_bb;
  ce_info.then_bb = then_edge->dest;
  ce_info.else_bb = else_edge->dest;
  ce_info.pass = pass;
  if (find_if_block (&ce_info))
    goto success;
  if (1 && 1
      && find_cond_trap (test_bb, then_edge, else_edge))
    goto success;
  if (dom_computed[CDI_POST_DOMINATORS] >= DOM_NO_FAST_QUERY
      && (! 0 || reload_completed))
    {
      if (find_if_case_1 (test_bb, then_edge, else_edge))
 goto success;
      if (find_if_case_2 (test_bb, then_edge, else_edge))
 goto success;
    }
  return ((void *)0);
 success:
  if (dump_file)
    fprintf (dump_file, "Conversion succeeded on pass %d.\n", pass);
  return ce_info.test_bb;
}
static int
block_jumps_and_fallthru_p (basic_block cur_bb, basic_block target_bb)
{
  edge cur_edge;
  int fallthru_p = 0;
  int jump_p = 0;
  rtx insn;
  rtx end;
  int n_insns = 0;
  if (!cur_bb || !target_bb)
    return -1;
  if (cur_bb->succ == ((struct edge_def *)((void *)0)))
    return 0;
  for (cur_edge = cur_bb->succ;
       cur_edge != ((struct edge_def *)((void *)0));
       cur_edge = cur_edge->succ_next)
    {
      if (cur_edge->flags & (2 | 4 | 8))
 return -1;
      else if (cur_edge->flags & 1)
 fallthru_p = 1;
      else if (cur_edge->dest == target_bb)
 jump_p = 1;
      else
 return -1;
    }
  if ((jump_p & fallthru_p) == 0)
    return -1;
  end = (cur_bb)->end_;
  insn = (cur_bb)->head_;
  while (insn != (rtx) 0)
    {
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 return -1;
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
   && ((enum rtx_code) (insn)->code) != JUMP_INSN
   && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE
   && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != CLOBBER)
 n_insns++;
      if (insn == end)
 break;
      insn = (((insn)->u.fld[2]).rtx1);
    }
  return n_insns;
}
static int
find_if_block (struct ce_if_block * ce_info)
{
  basic_block test_bb = ce_info->test_bb;
  basic_block then_bb = ce_info->then_bb;
  basic_block else_bb = ce_info->else_bb;
  basic_block join_bb = ((struct basic_block_def *)((void *)0));
  edge then_succ = then_bb->succ;
  edge else_succ = else_bb->succ;
  int then_predecessors;
  int else_predecessors;
  edge cur_edge;
  basic_block next;
  ce_info->last_test_bb = test_bb;
  if (0 && reload_completed
      && test_bb->pred != ((struct edge_def *)((void *)0))
      && test_bb->pred->pred_next == ((struct edge_def *)((void *)0))
      && test_bb->pred->flags == 1)
    {
      basic_block bb = test_bb->pred->src;
      basic_block target_bb;
      int max_insns = (ix86_branch_cost + 1);
      int n_insns;
      if ((n_insns = block_jumps_and_fallthru_p (bb, else_bb)) >= 0)
 {
   ce_info->and_and_p = 1;
   target_bb = else_bb;
 }
      else if ((n_insns = block_jumps_and_fallthru_p (bb, then_bb)) >= 0)
 {
   ce_info->and_and_p = 0;
   target_bb = then_bb;
 }
      else
 target_bb = ((struct basic_block_def *)((void *)0));
      if (target_bb && n_insns <= max_insns)
 {
   int total_insns = 0;
   int blocks = 0;
   ce_info->last_test_bb = test_bb;
   do
     {
       ce_info->test_bb = test_bb = bb;
       total_insns += n_insns;
       blocks++;
       if (bb->pred == ((struct edge_def *)((void *)0)) || bb->pred->pred_next != ((struct edge_def *)((void *)0)))
  break;
       bb = bb->pred->src;
       n_insns = block_jumps_and_fallthru_p (bb, target_bb);
     }
   while (n_insns >= 0 && (total_insns + n_insns) <= max_insns);
   ce_info->num_multiple_test_blocks = blocks;
   ce_info->num_multiple_test_insns = total_insns;
   if (ce_info->and_and_p)
     ce_info->num_and_and_blocks = blocks;
   else
     ce_info->num_or_or_blocks = blocks;
 }
    }
  then_predecessors = 0;
  for (cur_edge = then_bb->pred;
       cur_edge != ((struct edge_def *)((void *)0));
       cur_edge = cur_edge->pred_next)
    {
      then_predecessors++;
      if (cur_edge->flags & (2 | 4 | 8))
 return 0;
    }
  else_predecessors = 0;
  for (cur_edge = else_bb->pred;
       cur_edge != ((struct edge_def *)((void *)0));
       cur_edge = cur_edge->pred_next)
    {
      else_predecessors++;
      if (cur_edge->flags & (2 | 4 | 8))
 return 0;
    }
  if ((then_predecessors - ce_info->num_or_or_blocks) != 1)
    return 0;
  if (then_succ != ((struct edge_def *)((void *)0))
      && (then_succ->succ_next != ((struct edge_def *)((void *)0))
          || (then_succ->flags & (2 | 4 | 8))
   || (flow2_completed && tablejump_p ((then_bb)->end_, ((void *)0), ((void *)0)))))
    return 0;
  if (then_succ == ((void *)0))
    {
      if (else_bb->pred->pred_next == ((struct edge_def *)((void *)0)))
 {
   rtx last_insn = (then_bb)->end_;
   while (last_insn
   && ((enum rtx_code) (last_insn)->code) == NOTE
   && last_insn != (then_bb)->head_)
     last_insn = (((last_insn)->u.fld[1]).rtx1);
   if (last_insn
       && ((enum rtx_code) (last_insn)->code) == JUMP_INSN
       && ! simplejump_p (last_insn))
     return 0;
   join_bb = else_bb;
   else_bb = ((struct basic_block_def *)((void *)0));
 }
      else
 return 0;
    }
  else if (then_succ->dest == else_bb)
    {
      join_bb = else_bb;
      else_bb = ((struct basic_block_def *)((void *)0));
    }
  else if (else_succ != ((struct edge_def *)((void *)0))
    && then_succ->dest == else_succ->dest
    && else_bb->pred->pred_next == ((struct edge_def *)((void *)0))
    && else_succ->succ_next == ((struct edge_def *)((void *)0))
    && ! (else_succ->flags & (2 | 4 | 8))
    && ! (flow2_completed && tablejump_p ((else_bb)->end_, ((void *)0), ((void *)0))))
    join_bb = else_succ->dest;
  else
    return 0;
  num_possible_if_blocks++;
  if (dump_file)
    {
      fprintf (dump_file,
        "\nIF-THEN%s block found, pass %d, start block %d [insn %d], then %d [%d]",
        (else_bb) ? "-ELSE" : "",
        ce_info->pass,
        test_bb->index,
        (test_bb)->head_ ? (int)((((test_bb)->head_)->u.fld[0]).rtint) : -1,
        then_bb->index,
        (then_bb)->head_ ? (int)((((then_bb)->head_)->u.fld[0]).rtint) : -1);
      if (else_bb)
 fprintf (dump_file, ", else %d [%d]",
   else_bb->index,
   (else_bb)->head_ ? (int)((((else_bb)->head_)->u.fld[0]).rtint) : -1);
      fprintf (dump_file, ", join %d [%d]",
        join_bb->index,
        (join_bb)->head_ ? (int)((((join_bb)->head_)->u.fld[0]).rtint) : -1);
      if (ce_info->num_multiple_test_blocks > 0)
 fprintf (dump_file, ", %d %s block%s last test %d [%d]",
   ce_info->num_multiple_test_blocks,
   (ce_info->and_and_p) ? "&&" : "||",
   (ce_info->num_multiple_test_blocks == 1) ? "" : "s",
   ce_info->last_test_bb->index,
   (((ce_info->last_test_bb)->head_)
    ? (int)((((ce_info->last_test_bb)->head_)->u.fld[0]).rtint)
    : -1));
      fputc_unlocked ('\n', dump_file);
    }
  next = then_bb;
  if (else_bb && (next = next->next_bb) != else_bb)
    return 0;
  if ((next = next->next_bb) != join_bb && join_bb != EXIT_BLOCK_PTR)
    {
      if (else_bb)
 join_bb = ((void *)0);
      else
 return 0;
    }
  ce_info->else_bb = else_bb;
  ce_info->join_bb = join_bb;
  return process_if_block (ce_info);
}
static int
find_cond_trap (basic_block test_bb, edge then_edge, edge else_edge)
{
  basic_block then_bb = then_edge->dest;
  basic_block else_bb = else_edge->dest;
  basic_block other_bb, trap_bb;
  rtx trap, jump, cond, cond_earliest, seq;
  enum rtx_code code;
  if ((trap = block_has_only_trap (then_bb)) != ((void *)0))
    trap_bb = then_bb, other_bb = else_bb;
  else if ((trap = block_has_only_trap (else_bb)) != ((void *)0))
    trap_bb = else_bb, other_bb = then_bb;
  else
    return 0;
  if (dump_file)
    {
      fprintf (dump_file, "\nTRAP-IF block found, start %d, trap %d\n",
        test_bb->index, trap_bb->index);
    }
  jump = (test_bb)->end_;
  cond = noce_get_condition (jump, &cond_earliest);
  if (! cond)
    return 0;
  if (! onlyjump_p (jump))
    return 0;
  if (((enum machine_mode) ((((cond)->u.fld[0]).rtx1))->mode) == BLKmode)
    return 0;
  code = ((enum rtx_code) (cond)->code);
  if (then_bb == trap_bb)
    {
      code = reversed_comparison_code (cond, jump);
      if (code == UNKNOWN)
 return 0;
    }
  seq = gen_cond_trap (code, (((cond)->u.fld[0]).rtx1),
         (((cond)->u.fld[1]).rtx1),
         ((((((trap)->u.fld[5]).rtx1))->u.fld[1]).rtx1));
  if (seq == ((void *)0))
    return 0;
  num_true_changes++;
  emit_insn_before_setloc (seq, cond_earliest, (((trap)->u.fld[4]).rtint));
  remove_edge (trap_bb == then_bb ? then_edge : else_edge);
  if (trap_bb->pred == ((void *)0))
    delete_basic_block (trap_bb);
  if (test_bb->next_bb == other_bb)
    {
      struct ce_if_block new_ce_info;
      delete_insn (jump);
      memset (&new_ce_info, '\0', sizeof (new_ce_info));
      new_ce_info.test_bb = test_bb;
      new_ce_info.then_bb = ((void *)0);
      new_ce_info.else_bb = ((void *)0);
      new_ce_info.join_bb = other_bb;
      merge_if_block (&new_ce_info);
    }
  else
    {
      rtx lab, newjump;
      lab = (((jump)->u.fld[9]).rtx1);
      newjump = emit_jump_insn_after (gen_jump (lab), jump);
      (((lab)->u.fld[4]).rtint) += 1;
      (((newjump)->u.fld[9]).rtx1) = lab;
      emit_barrier_after (newjump);
      delete_insn (jump);
    }
  return 1;
}
static rtx
block_has_only_trap (basic_block bb)
{
  rtx trap;
  if (bb == EXIT_BLOCK_PTR)
    return (rtx) 0;
  if (bb->succ)
    return (rtx) 0;
  trap = first_active_insn (bb);
  if (! (trap == (bb)->end_
  && ((enum rtx_code) ((((trap)->u.fld[5]).rtx1))->code) == TRAP_IF
         && ((((((trap)->u.fld[5]).rtx1))->u.fld[0]).rtx1) == const_true_rtx))
    return (rtx) 0;
  return trap;
}
static int
find_if_case_1 (basic_block test_bb, edge then_edge, edge else_edge)
{
  basic_block then_bb = then_edge->dest;
  basic_block else_bb = else_edge->dest, new_bb;
  edge then_succ = then_bb->succ;
  int then_bb_index;
  if (flag_reorder_blocks_and_partition
      && (((then_bb)->end_
    && find_reg_note ((then_bb)->end_, REG_CROSSING_JUMP, (rtx) 0))
   || ((else_bb)->end_
       && find_reg_note ((else_bb)->end_, REG_CROSSING_JUMP,
    (rtx) 0))))
    return 0;
  if (!then_succ || then_succ->succ_next != ((void *)0))
    return 0;
  if (then_succ->flags & ((2 | 4 | 8) | 1))
    return 0;
  if (then_bb->pred->pred_next != ((void *)0))
    return 0;
  if (forwarder_block_p (then_bb))
    return 0;
  num_possible_if_blocks++;
  if (dump_file)
    fprintf (dump_file,
      "\nIF-CASE-1 found, start %d, then %d\n",
      test_bb->index, then_bb->index);
  if (count_bb_insns (then_bb) > ix86_branch_cost)
    return 0;
  if (! dead_or_predicable (test_bb, then_bb, else_bb,
       then_bb->succ->dest, 1))
    return 0;
  bitmap_operation (test_bb->global_live_at_end,
      else_bb->global_live_at_start,
      then_bb->global_live_at_end, BITMAP_IOR);
  new_bb = redirect_edge_and_branch_force (((test_bb)->succ->flags & 1 ? (test_bb)->succ : (test_bb)->succ->succ_next), else_bb);
  then_bb_index = then_bb->index;
  delete_basic_block (then_bb);
  if (new_bb)
    {
      new_bb->index = then_bb_index;
      (((basic_block_info)->data.bb[(then_bb_index)])) = new_bb;
    }
  num_true_changes++;
  num_updated_if_blocks++;
  return 1;
}
static int
find_if_case_2 (basic_block test_bb, edge then_edge, edge else_edge)
{
  basic_block then_bb = then_edge->dest;
  basic_block else_bb = else_edge->dest;
  edge else_succ = else_bb->succ;
  rtx note;
  if (flag_reorder_blocks_and_partition
      && (((then_bb)->end_
    && find_reg_note ((then_bb)->end_, REG_CROSSING_JUMP, (rtx) 0))
   || ((else_bb)->end_
       && find_reg_note ((else_bb)->end_, REG_CROSSING_JUMP,
    (rtx) 0))))
    return 0;
  if (!else_succ || else_succ->succ_next != ((void *)0))
    return 0;
  if (else_succ->flags & (2 | 4 | 8))
    return 0;
  if (else_bb->pred->pred_next != ((void *)0))
    return 0;
  if (then_bb->index < 0)
    return 0;
  note = find_reg_note ((test_bb)->end_, REG_BR_PROB, (rtx) 0);
  if (note && (((((note)->u.fld[0]).rtx1))->u.hwint[0]) >= 10000 / 2)
    ;
  else if (else_succ->dest->index < 0
    || dominated_by_p (CDI_POST_DOMINATORS, then_bb,
         else_succ->dest))
    ;
  else
    return 0;
  num_possible_if_blocks++;
  if (dump_file)
    fprintf (dump_file,
      "\nIF-CASE-2 found, start %d, else %d\n",
      test_bb->index, else_bb->index);
  if (count_bb_insns (else_bb) > ix86_branch_cost)
    return 0;
  if (! dead_or_predicable (test_bb, else_bb, then_bb, else_succ->dest, 0))
    return 0;
  bitmap_operation (test_bb->global_live_at_end,
      then_bb->global_live_at_start,
      else_bb->global_live_at_end, BITMAP_IOR);
  delete_basic_block (else_bb);
  num_true_changes++;
  num_updated_if_blocks++;
  return 1;
}
static int
find_memory (rtx *px, void *data )
{
  return (((enum rtx_code) (*px)->code) == MEM);
}
static int
dead_or_predicable (basic_block test_bb, basic_block merge_bb,
      basic_block other_bb, basic_block new_dest, int reversep)
{
  rtx head, end, jump, earliest = (rtx) 0, old_dest, new_label = (rtx) 0;
  jump = (test_bb)->end_;
  head = (merge_bb)->head_;
  end = (merge_bb)->end_;
  if (((enum rtx_code) (head)->code) == CODE_LABEL)
    head = (((head)->u.fld[2]).rtx1);
  if (((enum rtx_code) (head)->code) == NOTE)
    {
      if (head == end)
 {
   head = end = (rtx) 0;
   goto no_body;
 }
      head = (((head)->u.fld[2]).rtx1);
    }
  if (((enum rtx_code) (end)->code) == JUMP_INSN)
    {
      if (head == end)
 {
   head = end = (rtx) 0;
   goto no_body;
 }
      end = (((end)->u.fld[1]).rtx1);
    }
  if (0)
    {
      rtx cond, prob_val;
      cond = cond_exec_get_condition (jump);
      if (! cond)
 return 0;
      prob_val = find_reg_note (jump, REG_BR_PROB, (rtx) 0);
      if (prob_val)
 prob_val = (((prob_val)->u.fld[0]).rtx1);
      if (reversep)
 {
   enum rtx_code rev = reversed_comparison_code (cond, jump);
   if (rev == UNKNOWN)
     return 0;
   cond = gen_rtx_fmt_ee (rev, ((enum machine_mode) (cond)->mode), (((cond)->u.fld[0]).rtx1),
            (((cond)->u.fld[1]).rtx1));
   if (prob_val)
     prob_val = gen_rtx_CONST_INT (VOIDmode, (long) (10000 - ((prob_val)->u.hwint[0])));
 }
      if (! cond_exec_process_insns ((ce_if_block_t *)0, head, end, cond,
         prob_val, 0))
 goto cancel;
      earliest = jump;
    }
  else
    {
      rtx insn, cond, prev;
      regset_head merge_set_head, tmp_head, test_live_head, test_set_head;
      regset merge_set, tmp, test_live, test_set;
      struct propagate_block_info *pbi;
      int i, fail = 0;
      for (insn = head; ; insn = (((insn)->u.fld[2]).rtx1))
 {
   if (((enum rtx_code) (insn)->code) == CALL_INSN)
     return 0;
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       if (may_trap_p ((((insn)->u.fld[5]).rtx1)))
  return 0;
       if (for_each_rtx (&(((insn)->u.fld[5]).rtx1), find_memory, ((void *)0)))
  return 0;
     }
   if (insn == end)
     break;
 }
      if (! any_condjump_p (jump))
 return 0;
      cond = noce_get_condition (jump, &earliest);
      if (! cond)
 return 0;
      tmp = bitmap_initialize (&tmp_head, 1);
      merge_set = bitmap_initialize (&merge_set_head, 1);
      test_live = bitmap_initialize (&test_live_head, 1);
      test_set = bitmap_initialize (&test_set_head, 1);
      propagate_block (merge_bb, tmp, merge_set, merge_set, 0);
      if (1 && ! reload_completed)
 {
          do { bitmap_element *ptr_ = (merge_set)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { if (i < 53 && ! fixed_regs[i] && ! global_regs[i]) fail = 1; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
        ;
 }
      bitmap_copy (test_live, other_bb->global_live_at_start);
      pbi = init_propagate_block_info (test_bb, test_live, test_set, test_set,
           0);
      for (insn = jump; ; insn = prev)
 {
   prev = propagate_one_insn (pbi, insn);
   if (insn == earliest)
     break;
 }
      free_propagate_block_info (pbi);
      bitmap_operation (tmp, test_set, test_live, BITMAP_IOR);
      bitmap_operation (tmp, tmp, merge_set, BITMAP_AND);
      do { bitmap_element *ptr_ = (tmp)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); fail = 1; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0);
      bitmap_operation (tmp, test_set, merge_bb->global_live_at_start,
   BITMAP_AND);
      do { bitmap_element *ptr_ = (tmp)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); fail = 1; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0);
      do { if (tmp) { bitmap_clear (tmp); (tmp) = 0; } } while (0);
      do { if (merge_set) { bitmap_clear (merge_set); (merge_set) = 0; } } while (0);
      do { if (test_live) { bitmap_clear (test_live); (test_live) = 0; } } while (0);
      do { if (test_set) { bitmap_clear (test_set); (test_set) = 0; } } while (0);
      if (fail)
 return 0;
    }
 no_body:
  old_dest = (((jump)->u.fld[9]).rtx1);
  if (other_bb != new_dest)
    {
      new_label = block_label (new_dest);
      if (reversep
   ? ! invert_jump_1 (jump, new_label)
   : ! redirect_jump_1 (jump, new_label))
 goto cancel;
    }
  if (! apply_change_group ())
    return 0;
  if (other_bb != new_dest)
    {
      if (old_dest)
 (((old_dest)->u.fld[4]).rtint) -= 1;
      if (new_label)
 (((new_label)->u.fld[4]).rtint) += 1;
      (((jump)->u.fld[9]).rtx1) = new_label;
      if (reversep)
 invert_br_probabilities (jump);
      redirect_edge_succ (((test_bb)->succ->flags & 1 ? (test_bb)->succ->succ_next : (test_bb)->succ), new_dest);
      if (reversep)
 {
   gcov_type count, probability;
   count = ((test_bb)->succ->flags & 1 ? (test_bb)->succ->succ_next : (test_bb)->succ)->count;
   ((test_bb)->succ->flags & 1 ? (test_bb)->succ->succ_next : (test_bb)->succ)->count = ((test_bb)->succ->flags & 1 ? (test_bb)->succ : (test_bb)->succ->succ_next)->count;
   ((test_bb)->succ->flags & 1 ? (test_bb)->succ : (test_bb)->succ->succ_next)->count = count;
   probability = ((test_bb)->succ->flags & 1 ? (test_bb)->succ->succ_next : (test_bb)->succ)->probability;
   ((test_bb)->succ->flags & 1 ? (test_bb)->succ->succ_next : (test_bb)->succ)->probability
     = ((test_bb)->succ->flags & 1 ? (test_bb)->succ : (test_bb)->succ->succ_next)->probability;
   ((test_bb)->succ->flags & 1 ? (test_bb)->succ : (test_bb)->succ->succ_next)->probability = probability;
   update_br_prob_note (test_bb);
 }
    }
  if (head != ((void *)0))
    {
      if (end == (merge_bb)->end_)
 (merge_bb)->end_ = (((head)->u.fld[1]).rtx1);
      if (squeeze_notes (&head, &end))
 return 1;
      reorder_insns (head, end, (((earliest)->u.fld[1]).rtx1));
    }
  if (other_bb == new_dest)
    {
      delete_insn (jump);
      remove_edge (((test_bb)->succ->flags & 1 ? (test_bb)->succ->succ_next : (test_bb)->succ));
    }
  return 1;
 cancel:
  cancel_changes (0);
  return 0;
}
void
if_convert (int x_life_data_ok)
{
  basic_block bb;
  int pass;
  num_possible_if_blocks = 0;
  num_updated_if_blocks = 0;
  num_true_changes = 0;
  life_data_ok = (x_life_data_ok != 0);
  if ((! targetm.cannot_modify_jumps_p ())
      && (!flag_reorder_blocks_and_partition || !no_new_pseudos))
    mark_loop_exit_edges ();
  if (0 || life_data_ok)
    calculate_dominance_info (CDI_POST_DOMINATORS);
  if (life_data_ok)
    clear_bb_flags ();
  pass = 0;
  do
    {
      cond_exec_changed_p = 0;
      pass++;
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   basic_block new_bb;
   while ((new_bb = find_if_header (bb, pass)))
     bb = new_bb;
 }
    }
  while (cond_exec_changed_p);
  free_dominance_info (CDI_POST_DOMINATORS);
  if (dump_file)
    fflush (dump_file);
  clear_aux_for_blocks ();
  if (num_true_changes && life_data_ok)
    {
      if (max_regno < max_reg_num ())
 {
   max_regno = max_reg_num ();
   allocate_reg_info (max_regno, 0, 0);
 }
      update_life_info_in_dirty_blocks (UPDATE_LIFE_GLOBAL_RM_NOTES,
     1 | 16
     | 8);
    }
  if (dump_file && num_possible_if_blocks > 0)
    {
      fprintf (dump_file,
        "\n%d possible IF blocks searched.\n",
        num_possible_if_blocks);
      fprintf (dump_file,
        "%d IF blocks converted.\n",
        num_updated_if_blocks);
      fprintf (dump_file,
        "%d true changes made.\n\n\n",
        num_true_changes);
    }
}
typedef struct initial_value_pair {
  rtx hard_reg;
  rtx pseudo;
} initial_value_pair;
typedef struct initial_value_struct {
  int num_entries;
  int max_entries;
  initial_value_pair * entries;
} initial_value_struct;
static void subst_constants (rtx *, rtx, struct inline_remap *, int);
static void set_block_origin_self (tree);
static void set_block_abstract_flags (tree, int);
static void mark_stores (rtx, rtx, void *);
rtx
get_label_from_map (struct inline_remap *map, int i)
{
  rtx x = map->label_map[i];
  if (x == (rtx) 0)
    x = map->label_map[i] = gen_label_rtx ();
  return x;
}
unsigned char
function_attribute_inlinable_p (tree fndecl)
{
  if (targetm.attribute_table)
    {
      tree a;
      for (a = ((fndecl)->decl.attributes); a; a = ((a)->common.chain))
 {
   tree name = ((a)->list.purpose);
   int i;
   for (i = 0; targetm.attribute_table[i].name != ((void *)0); i++)
     if (is_attribute_p (targetm.attribute_table[i].name, name))
       return targetm.function_attribute_inlinable_p (fndecl);
 }
    }
  return 1;
}
tree
copy_decl_for_inlining (tree decl, tree from_fn, tree to_fn)
{
  tree copy;
  if (((enum tree_code) (decl)->common.code) == PARM_DECL || ((enum tree_code) (decl)->common.code) == RESULT_DECL)
    {
      tree type;
      int invisiref = 0;
      if (((enum tree_code) (decl)->common.code) == PARM_DECL
   && ((decl)->decl.initial) != ((decl)->common.type)
   && (((enum tree_code) (((decl)->decl.initial))->common.code) == POINTER_TYPE || ((enum tree_code) (((decl)->decl.initial))->common.code) == REFERENCE_TYPE)
   && ((((decl)->decl.initial))->common.type) == ((decl)->common.type))
 {
   invisiref = 1;
   type = ((decl)->decl.initial);
 }
      else
 type = ((decl)->common.type);
      copy = build_decl_stat (VAR_DECL,((decl)->decl.name),type );
      if (!invisiref)
 {
   ((copy)->common.addressable_flag) = ((decl)->common.addressable_flag);
   ((copy)->common.readonly_flag) = ((decl)->common.readonly_flag);
   ((copy)->common.volatile_flag) = ((decl)->common.volatile_flag);
 }
      else
 {
   ((copy)->common.addressable_flag) = 0;
   ((copy)->common.readonly_flag) = 1;
   ((copy)->common.volatile_flag) = 0;
 }
    }
  else
    {
      copy = copy_node_stat (decl );
      ((copy)->decl.abstract_flag) = 0;
      lang_hooks.dup_lang_specific_decl (copy);
      if (((enum tree_code) (copy)->common.code) == LABEL_DECL)
 {
   ((copy)->common.addressable_flag) = 0;
   ((copy)->decl.bit_field_flag) = 0;
 }
    }
  ((copy)->decl.abstract_origin) = (((decl)->decl.abstract_origin) ? ((decl)->decl.abstract_origin) : (decl));
  if (!((copy)->common.static_flag) && !((copy)->decl.external_flag))
    set_decl_rtl (copy, (rtx) 0);
  ((copy)->common.used_flag) = 1;
  if (!((decl)->decl.context))
    ;
  else if (((decl)->decl.context) != from_fn)
    ;
  else if (((decl)->common.static_flag))
    ;
  else
    ((copy)->decl.context) = to_fn;
  return copy;
}
varray_type global_const_equiv_varray;
rtx
copy_rtx_and_substitute (rtx orig, struct inline_remap *map, int for_lhs)
{
  rtx copy, temp;
  int i, j;
  enum rtx_code code;
  enum machine_mode mode;
  const char *format_ptr;
  int regno;
  if (orig == 0)
    return 0;
  code = ((enum rtx_code) (orig)->code);
  mode = ((enum machine_mode) (orig)->mode);
  switch (code)
    {
    case REG:
      regno = (((orig)->u.fld[0]).rtuint);
      if (regno <= (((53)) + 4))
 {
   if (map->reg_map[regno] != 0)
     return map->reg_map[regno];
   else if (regno == (((53)) + 1))
     {
       rtx loc, seq;
       int size
  = get_func_frame_size (((map->fndecl)->decl.u2.f));
       int alignment
  = (((map->fndecl)->decl.u2.f)->stack_alignment_needed
     / 8);
       if (alignment)
  size = (((size) + (alignment) - 1) & ~((alignment)- 1));
       start_sequence ();
       loc = assign_stack_temp (BLKmode, size, 1);
       loc = (((loc)->u.fld[0]).rtx1);
       loc = plus_constant_wide ((loc), (long) (size));
       map->reg_map[regno] = temp
  = force_reg ((0 ? DImode : SImode), force_operand (loc, (rtx) 0));
       mark_reg_pointer (map->reg_map[regno], (8 * (0 ? 8 : 4)));
       { struct const_equiv_data *p; { if ((size_t)((((temp)->u.fld[0]).rtuint)) >= ((((map))->const_equiv_varray)->num_elements)) { int is_global = (global_const_equiv_varray == ((map))->const_equiv_varray); ((((map))->const_equiv_varray) = varray_grow (((map))->const_equiv_varray, ((((temp)->u.fld[0]).rtuint))+1)); if (is_global) global_const_equiv_varray = ((map))->const_equiv_varray; } }; p = &(((map)->const_equiv_varray)->data.const_equiv[(((temp)->u.fld[0]).rtuint)]); p->rtx1 = (loc); p->age = ((-1)); };
       seq = get_insns ();
       end_sequence ();
       emit_insn_after (seq, map->insns_at_start);
       return temp;
     }
   else if (regno == ((53)))
     {
       rtx loc, seq;
       int size = ((map->fndecl)->decl.u2.f)->args_size;
       start_sequence ();
       loc = assign_stack_temp (BLKmode, size, 1);
       loc = (((loc)->u.fld[0]).rtx1);
       map->reg_map[regno] = temp
  = force_reg ((0 ? DImode : SImode), force_operand (loc, (rtx) 0));
       mark_reg_pointer (map->reg_map[regno], (8 * (0 ? 8 : 4)));
       { struct const_equiv_data *p; { if ((size_t)((((temp)->u.fld[0]).rtuint)) >= ((((map))->const_equiv_varray)->num_elements)) { int is_global = (global_const_equiv_varray == ((map))->const_equiv_varray); ((((map))->const_equiv_varray) = varray_grow (((map))->const_equiv_varray, ((((temp)->u.fld[0]).rtuint))+1)); if (is_global) global_const_equiv_varray = ((map))->const_equiv_varray; } }; p = &(((map)->const_equiv_varray)->data.const_equiv[(((temp)->u.fld[0]).rtuint)]); p->rtx1 = (loc); p->age = ((-1)); };
       seq = get_insns ();
       end_sequence ();
       emit_insn_after (seq, map->insns_at_start);
       return temp;
     }
   else if ((((orig))->return_val))
     {
       if (rtx_equal_function_value_matters)
  return gen_rtx_REG (((enum machine_mode) (orig)->mode), regno);
       else
  return orig;
     }
   else
     return orig;
   abort ();
 }
      if (map->reg_map[regno] == ((void *)0))
 {
   map->reg_map[regno] = gen_reg_rtx (mode);
   (((map->reg_map[regno]))->volatil) = (((orig))->volatil);
   (((map->reg_map[regno]))->in_struct) = (((orig))->in_struct);
   (((map->reg_map[regno]))->unchanging) = (((orig))->unchanging);
   if ((((map->x_regno_reg_rtx[regno]))->frame_related))
     mark_reg_pointer (map->reg_map[regno],
         map->regno_pointer_align[regno]);
 }
      return map->reg_map[regno];
    case SUBREG:
      copy = copy_rtx_and_substitute ((((orig)->u.fld[0]).rtx1), map, for_lhs);
      return simplify_gen_subreg (((enum machine_mode) (orig)->mode), copy,
      ((enum machine_mode) ((((orig)->u.fld[0]).rtx1))->mode),
      (((orig)->u.fld[1]).rtuint));
    case USE:
    case CLOBBER:
      copy = copy_rtx_and_substitute ((((orig)->u.fld[0]).rtx1), map, code == CLOBBER);
      if (((enum rtx_code) (copy)->code) == SUBREG && ((enum rtx_code) ((((orig)->u.fld[0]).rtx1))->code) != SUBREG)
 copy = (((copy)->u.fld[0]).rtx1);
      return gen_rtx_fmt_e (code, VOIDmode, copy);
    case NOTE:
      if ((((orig)->u.fld[5]).rtint) != NOTE_INSN_DELETED_LABEL)
 break;
    case CODE_LABEL:
      (((get_label_from_map (map, (((orig)->u.fld[6]).rtint))))->in_struct)
 = (((orig))->in_struct);
      return get_label_from_map (map, (((orig)->u.fld[6]).rtint));
    case LABEL_REF:
      copy
 = gen_rtx_fmt_u00 (LABEL_REF, (mode), ((((orig))->volatil) ? (((orig)->u.fld[0]).rtx1) : get_label_from_map (map, ((((((orig)->u.fld[0]).rtx1))->u.fld[6]).rtint))))
                                                                   ;
      (((copy))->in_struct) = (((orig))->in_struct);
      (((copy))->volatil)
 = ((((orig))->volatil)
    && ! (((((((copy)->u.fld[0]).rtx1))->u.fld[6]).rtint) >= get_first_label_num ()
   && ((((((copy)->u.fld[0]).rtx1))->u.fld[6]).rtint) < max_label_num ()));
      return copy;
    case PC:
    case CC0:
    case CONST_INT:
    case CONST_VECTOR:
      return orig;
    case SYMBOL_REF:
      if ((((orig))->unchanging))
 {
   struct function *f = cfun;
   rtx constant = get_pool_constant_for_function (f, orig);
   if (((enum rtx_code) (constant)->code) == LABEL_REF)
     return (((force_const_mem (((enum machine_mode) (orig)->mode), copy_rtx_and_substitute (constant, map, for_lhs)))->u.fld[0]).rtx1)
      ;
 }
      return orig;
    case CONST_DOUBLE:
      if (mode_class[((enum machine_mode) (orig)->mode)] == MODE_FLOAT)
 {
   struct real_value d;
   memcpy (&(d), &(((orig))->u.hwint[0]), sizeof (struct real_value));
   return const_double_from_real_value (d, ((enum machine_mode) (orig)->mode));
 }
      else
 return immed_double_const (((orig)->u.hwint[0]),
       ((orig)->u.hwint[1]), VOIDmode);
    case CONST:
      break;
    case ASM_OPERANDS:
      if (map->orig_asm_operands_vector == (((orig)->u.fld[3]).rtvec1))
 {
   copy = rtx_alloc_stat (ASM_OPERANDS );
   ((copy)->volatil) = ((orig)->volatil);
   ((copy)->mode = (((enum machine_mode) (orig)->mode)));
   (((copy)->u.fld[0]).rtstr) = (((orig)->u.fld[0]).rtstr);
   (((copy)->u.fld[1]).rtstr)
     = (((orig)->u.fld[1]).rtstr);
   (((copy)->u.fld[2]).rtint) = (((orig)->u.fld[2]).rtint);
   (((copy)->u.fld[3]).rtvec1) = map->copy_asm_operands_vector;
   (((copy)->u.fld[4]).rtvec1)
     = map->copy_asm_constraints_vector;
   (((copy)->u.fld[5]).rtstr) = (((orig)->u.fld[5]).rtstr);
   (((copy)->u.fld[6]).rtint) = (((orig)->u.fld[6]).rtint);
   return copy;
 }
      break;
    case CALL:
 {
   rtx copy
     = gen_rtx_MEM (((enum machine_mode) ((((orig)->u.fld[0]).rtx1))->mode),
      copy_rtx_and_substitute (((((((orig)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
          map, 0));
   ((((copy))->volatil) = ((((((orig)->u.fld[0]).rtx1)))->volatil), (((copy))->in_struct) = ((((((orig)->u.fld[0]).rtx1)))->in_struct), (((copy))->return_val) = ((((((orig)->u.fld[0]).rtx1)))->return_val), (((copy))->call) = ((((((orig)->u.fld[0]).rtx1)))->call), (((copy))->unchanging) = ((((((orig)->u.fld[0]).rtx1)))->unchanging), (((copy))->jump) = ((((((orig)->u.fld[0]).rtx1)))->jump), (((copy)->u.fld[1]).rtmem) = ((((((orig)->u.fld[0]).rtx1))->u.fld[1]).rtmem));
   return
     gen_rtx_fmt_ee (CALL, (((enum machine_mode) (orig)->mode)), (copy), (copy_rtx_and_substitute ((((orig)->u.fld[1]).rtx1), map, 0)))
                                                      ;
 }
      break;
    case SET:
      if ((((orig)->u.fld[0]).rtx1) == (global_rtl[GR_VIRTUAL_STACK_ARGS])
   || (((orig)->u.fld[0]).rtx1) == (global_rtl[GR_VIRTUAL_INCOMING_ARGS]))
 {
   rtx equiv_reg;
   rtx equiv_loc;
   long loc_offset;
   copy_rtx_and_substitute ((((orig)->u.fld[0]).rtx1), map, for_lhs);
   equiv_reg = map->reg_map[((((((orig)->u.fld[0]).rtx1))->u.fld[0]).rtuint)];
   equiv_loc = ((map->const_equiv_varray)->data.const_equiv[(((equiv_reg)->u.fld[0]).rtuint)])
                         .rtx1;
   loc_offset
     = (((enum rtx_code) (equiv_loc)->code) == REG) ? 0 : (((((equiv_loc)->u.fld[1]).rtx1))->u.hwint[0]);
   return gen_rtx_fmt_ee (SET, (VOIDmode), ((((orig)->u.fld[0]).rtx1)), (force_operand (plus_constant_wide ((copy_rtx_and_substitute ((((orig)->u.fld[1]).rtx1), map, 0)), (long) (- loc_offset)), (rtx) 0)))
                    ;
 }
      else
 return gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx_and_substitute ((((orig)->u.fld[0]).rtx1), map, 1)), (copy_rtx_and_substitute ((((orig)->u.fld[1]).rtx1), map, 0)))
                                                        ;
      break;
    case MEM:
      copy = gen_rtx_MEM (mode, copy_rtx_and_substitute ((((orig)->u.fld[0]).rtx1),
        map, 0));
      ((((copy))->volatil) = (((orig))->volatil), (((copy))->in_struct) = (((orig))->in_struct), (((copy))->return_val) = (((orig))->return_val), (((copy))->call) = (((orig))->call), (((copy))->unchanging) = (((orig))->unchanging), (((copy))->jump) = (((orig))->jump), (((copy)->u.fld[1]).rtmem) = (((orig)->u.fld[1]).rtmem));
      return copy;
    default:
      break;
    }
  copy = rtx_alloc_stat (code );
  ((copy)->mode = (mode));
  ((copy)->in_struct) = ((orig)->in_struct);
  ((copy)->volatil) = ((orig)->volatil);
  ((copy)->unchanging) = ((orig)->unchanging);
  format_ptr = (rtx_format[(int) (((enum rtx_code) (copy)->code))]);
  for (i = 0; i < (rtx_length[(int) (((enum rtx_code) (copy)->code))]); i++)
    {
      switch (*format_ptr++)
 {
 case '0':
   ((copy)->u.fld[i]) = ((orig)->u.fld[i]);
   break;
 case 'e':
   (((copy)->u.fld[i]).rtx1)
     = copy_rtx_and_substitute ((((orig)->u.fld[i]).rtx1), map, for_lhs);
   break;
 case 'u':
   (((copy)->u.fld[i]).rtx1) = map->insn_map[((((((orig)->u.fld[i]).rtx1))->u.fld[0]).rtint)];
   break;
 case 'E':
   (((copy)->u.fld[i]).rtvec1) = (((orig)->u.fld[i]).rtvec1);
   if ((((orig)->u.fld[i]).rtvec1) != ((void *)0) && (((((orig)->u.fld[i]).rtvec1))->num_elem) != 0)
     {
       (((copy)->u.fld[i]).rtvec1) = rtvec_alloc ((((((orig)->u.fld[i]).rtvec1))->num_elem));
       for (j = 0; j < (((((copy)->u.fld[i]).rtvec1))->num_elem); j++)
  (((((copy)->u.fld[i]).rtvec1))->elem[j])
    = copy_rtx_and_substitute ((((((orig)->u.fld[i]).rtvec1))->elem[j]),
          map, for_lhs);
     }
   break;
 case 'w':
   ((copy)->u.hwint[i]) = ((orig)->u.hwint[i]);
   break;
 case 'i':
   (((copy)->u.fld[i]).rtint) = (((orig)->u.fld[i]).rtint);
   break;
 case 's':
   (((copy)->u.fld[i]).rtstr) = (((orig)->u.fld[i]).rtstr);
   break;
 case 't':
   (((copy)->u.fld[i]).rttree) = (((orig)->u.fld[i]).rttree);
   break;
 default:
   abort ();
 }
    }
  if (code == ASM_OPERANDS && map->orig_asm_operands_vector == 0)
    {
      map->orig_asm_operands_vector = (((orig)->u.fld[3]).rtvec1);
      map->copy_asm_operands_vector = (((copy)->u.fld[3]).rtvec1);
      map->copy_asm_constraints_vector
 = (((copy)->u.fld[4]).rtvec1);
    }
  return copy;
}
void
try_constants (rtx insn, struct inline_remap *map)
{
  int i;
  map->num_sets = 0;
  subst_constants (&(((insn)->u.fld[5]).rtx1), insn, map, 1);
  apply_change_group ();
  subst_constants (&(((insn)->u.fld[5]).rtx1), insn, map, 0);
  apply_change_group ();
  if (((enum rtx_code) (insn)->code) == CALL_INSN && (((insn)->u.fld[9]).rtx1))
    {
      subst_constants (&(((insn)->u.fld[9]).rtx1), insn, map, 1);
      apply_change_group ();
    }
  note_stores ((((insn)->u.fld[5]).rtx1), mark_stores, ((void *)0));
  map->last_pc_value = 0;
  for (i = 0; i < map->num_sets; i++)
    {
      if ((((enum rtx_code) (map->equiv_sets[i].dest)->code) == REG))
 {
   int regno = (((map->equiv_sets[i].dest)->u.fld[0]).rtuint);
   { if ((size_t)(regno) >= (((map)->const_equiv_varray)->num_elements)) { int is_global = (global_const_equiv_varray == (map)->const_equiv_varray); (((map)->const_equiv_varray) = varray_grow ((map)->const_equiv_varray, (regno)+1)); if (is_global) global_const_equiv_varray = (map)->const_equiv_varray; } };
   if (((map->const_equiv_varray)->data.const_equiv[regno]).rtx1 == 0
       || ! rtx_equal_p (((map->const_equiv_varray)->data.const_equiv[regno])
                .rtx1,
    map->equiv_sets[i].equiv))
     { struct const_equiv_data *p; { if ((size_t)((((map->equiv_sets[i].dest)->u.fld[0]).rtuint)) >= ((((map))->const_equiv_varray)->num_elements)) { int is_global = (global_const_equiv_varray == ((map))->const_equiv_varray); ((((map))->const_equiv_varray) = varray_grow (((map))->const_equiv_varray, ((((map->equiv_sets[i].dest)->u.fld[0]).rtuint))+1)); if (is_global) global_const_equiv_varray = ((map))->const_equiv_varray; } }; p = &(((map)->const_equiv_varray)->data.const_equiv[(((map->equiv_sets[i].dest)->u.fld[0]).rtuint)]); p->rtx1 = (map->equiv_sets[i].equiv); p->age = (map->const_age); }
                                               ;
 }
      else if (map->equiv_sets[i].dest == (global_rtl[GR_PC]))
 map->last_pc_value = map->equiv_sets[i].equiv;
    }
}
static void
subst_constants (rtx *loc, rtx insn, struct inline_remap *map, int memonly)
{
  rtx x = *loc;
  int i, j;
  enum rtx_code code;
  const char *format_ptr;
  int num_changes = num_validated_changes ();
  rtx new = 0;
  enum machine_mode op0_mode = MAX_MACHINE_MODE;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case PC:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case CONST:
    case LABEL_REF:
    case ADDRESS:
      return;
    case USE:
    case CLOBBER:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
 subst_constants (&((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), insn, map, 0);
      return;
    case REG:
      if (! memonly)
 {
   int regno = (((x)->u.fld[0]).rtuint);
   struct const_equiv_data *p;
   if (! (regno < 53 && (((x))->volatil))
       && (size_t) regno < ((map->const_equiv_varray)->num_elements)
       && (p = &((map->const_equiv_varray)->data.const_equiv[regno]),
    p->rtx1 != 0)
       && p->age >= map->const_age)
     validate_change (insn, loc, p->rtx1, 1);
 }
      return;
    case SUBREG:
      if (! memonly && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 {
   rtx inner = (((x)->u.fld[0]).rtx1);
   rtx new = 0;
   subst_constants (&inner, (rtx) 0, map, 0);
   new = simplify_gen_subreg (((enum machine_mode) (x)->mode), inner,
         ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
         (((x)->u.fld[1]).rtuint));
   if (new)
     validate_change (insn, loc, new, 1);
   else
     cancel_changes (num_changes);
   return;
 }
      break;
    case MEM:
      subst_constants (&(((x)->u.fld[0]).rtx1), insn, map, 0);
      if (! memonly && insn != 0 && num_validated_changes () != num_changes
   && ! memory_address_p (((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1)))
 cancel_changes (num_changes);
      return;
    case SET:
      {
 rtx *dest_loc = &(((x)->u.fld[0]).rtx1);
 rtx dest = *dest_loc;
 rtx src, tem;
 enum machine_mode compare_mode = VOIDmode;
 if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == COMPARE)
   {
     src = (((x)->u.fld[1]).rtx1);
     if (mode_class[((enum machine_mode) (src)->mode)] == MODE_CC
  || ((dest) ? 0 : 0))
       {
  compare_mode = ((enum machine_mode) ((((src)->u.fld[0]).rtx1))->mode);
  if (compare_mode == VOIDmode)
    compare_mode = ((enum machine_mode) ((((src)->u.fld[1]).rtx1))->mode);
       }
   }
 subst_constants (&(((x)->u.fld[1]).rtx1), insn, map, memonly);
 src = (((x)->u.fld[1]).rtx1);
 while (((enum rtx_code) (*dest_loc)->code) == ZERO_EXTRACT
        || ((enum rtx_code) (*dest_loc)->code) == SUBREG
        || ((enum rtx_code) (*dest_loc)->code) == STRICT_LOW_PART)
   {
     if (((enum rtx_code) (*dest_loc)->code) == ZERO_EXTRACT)
       {
  subst_constants (&(((*dest_loc)->u.fld[1]).rtx1), insn, map, memonly);
  subst_constants (&(((*dest_loc)->u.fld[2]).rtx1), insn, map, memonly);
       }
     dest_loc = &(((*dest_loc)->u.fld[0]).rtx1);
   }
 if ((((enum rtx_code) (*dest_loc)->code) == MEM))
   subst_constants (&(((*dest_loc)->u.fld[0]).rtx1), insn, map, 0);
 if (((enum rtx_code) (dest)->code) == SUBREG
     && ((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]) <= (0 ? 8 : 4)
     && ((unsigned short) mode_size[((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode)]) <= (0 ? 8 : 4)
     && (((unsigned short) mode_size[((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode)])
        <= ((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]))
     && (tem = gen_lowpart_if_possible (((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode),
            src)))
   src = tem, dest = (((dest)->u.fld[0]).rtx1);
 if ((map->num_sets < 30)
     && (((rtx_class[(int) (((enum rtx_code) (src)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (src)->code) == CONST_VECTOR)
  || ((((enum rtx_code) (src)->code) == REG)
      && ((((src)->u.fld[0]).rtuint) == ((53))
   || (((src)->u.fld[0]).rtuint) == (((53)) + 1)))
  || (((enum rtx_code) (src)->code) == PLUS
      && (((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == REG)
      && (((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == ((53))
   || ((((((src)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == (((53)) + 1))
      && ((rtx_class[(int) (((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
  || ((enum rtx_code) (src)->code) == COMPARE
  || ((dest) ? 0 : 0)
  || (dest == (global_rtl[GR_PC])
      && (src == (global_rtl[GR_PC]) || ((enum rtx_code) (src)->code) == RETURN
   || ((enum rtx_code) (src)->code) == LABEL_REF))))
   {
     rtx src_copy = copy_rtx (src);
     map->equiv_sets[map->num_sets].equiv = src_copy;
     map->equiv_sets[map->num_sets++].dest = dest;
     if (compare_mode != VOIDmode
  && ((enum rtx_code) (src)->code) == COMPARE
  && (mode_class[((enum machine_mode) (src)->mode)] == MODE_CC
      || ((dest) ? 0 : 0))
  && ((enum machine_mode) ((((src)->u.fld[0]).rtx1))->mode) == VOIDmode
  && ((enum machine_mode) ((((src)->u.fld[1]).rtx1))->mode) == VOIDmode)
       {
  map->compare_src = src_copy;
  map->compare_mode = compare_mode;
       }
   }
      }
      return;
    default:
      break;
    }
  format_ptr = (rtx_format[(int) (code)]);
  if (*format_ptr == 'e')
    op0_mode = ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode);
  for (i = 0; i < (rtx_length[(int) (code)]); i++)
    {
      switch (*format_ptr++)
 {
 case '0':
   break;
 case 'e':
   if ((((x)->u.fld[i]).rtx1))
     subst_constants (&(((x)->u.fld[i]).rtx1), insn, map, memonly);
   break;
 case 'u':
 case 'i':
 case 's':
 case 'w':
 case 'n':
 case 't':
 case 'B':
   break;
 case 'E':
   if ((((x)->u.fld[i]).rtvec1) != ((void *)0) && (((((x)->u.fld[i]).rtvec1))->num_elem) != 0)
     for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
       subst_constants (&(((((x)->u.fld[i]).rtvec1))->elem[j]), insn, map, memonly);
   break;
 default:
   abort ();
 }
    }
  if (! memonly
      && ((rtx_class[(int) (code)]) == RTX_COMM_ARITH
   || (rtx_class[(int) (code)]) == RTX_COMM_COMPARE)
      && ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_VECTOR) && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != CONST_INT)
    {
      rtx tem = (((x)->u.fld[0]).rtx1);
      validate_change (insn, &(((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1), 1);
      validate_change (insn, &(((x)->u.fld[1]).rtx1), tem, 1);
    }
  if (! memonly)
    switch ((rtx_class[(int) (code)]))
      {
      case RTX_UNARY:
 if (op0_mode == MAX_MACHINE_MODE)
   abort ();
 new = simplify_unary_operation (code, ((enum machine_mode) (x)->mode),
     (((x)->u.fld[0]).rtx1), op0_mode);
 break;
      case RTX_COMPARE:
      case RTX_COMM_COMPARE:
 {
   enum machine_mode op_mode = ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode);
   if (op_mode == VOIDmode)
     op_mode = ((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode);
   new = simplify_relational_operation (code, ((enum machine_mode) (x)->mode), op_mode,
            (((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1));
   break;
 }
      case RTX_BIN_ARITH:
      case RTX_COMM_ARITH:
 new = simplify_binary_operation (code, ((enum machine_mode) (x)->mode),
      (((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1));
 break;
      case RTX_BITFIELD_OPS:
      case RTX_TERNARY:
 if (op0_mode == MAX_MACHINE_MODE)
   abort ();
 if (code == IF_THEN_ELSE)
   {
     rtx op0 = (((x)->u.fld[0]).rtx1);
     if ((((rtx_class[(int) (((enum rtx_code) (op0)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
  && ((enum machine_mode) (op0)->mode) == VOIDmode
  && ! side_effects_p (op0)
  && (((op0)->u.fld[0]).rtx1) == map->compare_src
  && ((enum machine_mode) ((((op0)->u.fld[1]).rtx1))->mode) == VOIDmode)
       {
  rtx tem =
    simplify_gen_relational (((enum rtx_code) (op0)->code), ((enum machine_mode) (op0)->mode),
        map->compare_mode, (((op0)->u.fld[0]).rtx1),
        (((op0)->u.fld[1]).rtx1));
  if (((enum rtx_code) (tem)->code) != CONST_INT)
    new = simplify_ternary_operation (code, ((enum machine_mode) (x)->mode),
            op0_mode, tem, (((x)->u.fld[1]).rtx1),
          (((x)->u.fld[2]).rtx1));
  else if (tem == (const_int_rtx[64]))
    new = (((x)->u.fld[2]).rtx1);
  else
    new = (((x)->u.fld[1]).rtx1);
       }
   }
 if (!new)
   new = simplify_ternary_operation (code, ((enum machine_mode) (x)->mode), op0_mode,
         (((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1),
         (((x)->u.fld[2]).rtx1));
 break;
      default:
 break;
      }
  if (new)
    validate_change (insn, loc, new, 1);
}
static void
mark_stores (rtx dest, rtx x , void *data )
{
  int regno = -1;
  enum machine_mode mode = VOIDmode;
  if ((((enum rtx_code) (dest)->code) == REG))
    regno = (((dest)->u.fld[0]).rtuint), mode = ((enum machine_mode) (dest)->mode);
  else if (((enum rtx_code) (dest)->code) == SUBREG && (((enum rtx_code) ((((dest)->u.fld[0]).rtx1))->code) == REG))
    {
      regno = ((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      if (regno < 53)
 regno += subreg_regno_offset (((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
          ((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode),
          (((dest)->u.fld[1]).rtuint),
          ((enum machine_mode) (dest)->mode));
      mode = ((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode);
    }
  if (regno >= 0)
    {
      unsigned int uregno = regno;
      unsigned int last_reg = (uregno >= 53 ? uregno
          : uregno + hard_regno_nregs[uregno][mode] - 1);
      unsigned int i;
      if (uregno != ((53))
   && uregno != (((53)) + 1))
 for (i = uregno; i <= last_reg; i++)
   if ((size_t) i < ((global_const_equiv_varray)->num_elements))
     ((global_const_equiv_varray)->data.const_equiv[i]).rtx1 = 0;
    }
}
static void
set_block_origin_self (tree stmt)
{
  if (((stmt)->block.abstract_origin) == (tree) ((void *)0))
    {
      ((stmt)->block.abstract_origin) = stmt;
      {
 tree local_decl;
 for (local_decl = ((stmt)->block.vars);
      local_decl != (tree) ((void *)0);
      local_decl = ((local_decl)->common.chain))
   set_decl_origin_self (local_decl);
      }
      {
 tree subblock;
 for (subblock = ((stmt)->block.subblocks);
      subblock != (tree) ((void *)0);
      subblock = (((subblock))->common.chain))
   set_block_origin_self (subblock);
      }
    }
}
void
set_decl_origin_self (tree decl)
{
  if (((decl)->decl.abstract_origin) == (tree) ((void *)0))
    {
      ((decl)->decl.abstract_origin) = decl;
      if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
 {
   tree arg;
   for (arg = ((decl)->decl.arguments); arg; arg = ((arg)->common.chain))
     ((arg)->decl.abstract_origin) = arg;
   if (((decl)->decl.initial) != (tree) ((void *)0)
       && ((decl)->decl.initial) != global_trees[TI_ERROR_MARK])
     set_block_origin_self (((decl)->decl.initial));
 }
    }
}
static void
set_block_abstract_flags (tree stmt, int setting)
{
  tree local_decl;
  tree subblock;
  ((stmt)->block.abstract_flag) = setting;
  for (local_decl = ((stmt)->block.vars);
       local_decl != (tree) ((void *)0);
       local_decl = ((local_decl)->common.chain))
    set_decl_abstract_flags (local_decl, setting);
  for (subblock = ((stmt)->block.subblocks);
       subblock != (tree) ((void *)0);
       subblock = (((subblock))->common.chain))
    set_block_abstract_flags (subblock, setting);
}
void
set_decl_abstract_flags (tree decl, int setting)
{
  ((decl)->decl.abstract_flag) = setting;
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
    {
      tree arg;
      for (arg = ((decl)->decl.arguments); arg; arg = ((arg)->common.chain))
 ((arg)->decl.abstract_flag) = setting;
      if (((decl)->decl.initial) != (tree) ((void *)0)
   && ((decl)->decl.initial) != global_trees[TI_ERROR_MARK])
 set_block_abstract_flags (((decl)->decl.initial), setting);
    }
}
rtx
get_hard_reg_initial_reg (struct function *fun, rtx reg)
{
  struct initial_value_struct *ivs = fun->hard_reg_initial_vals;
  int i;
  if (ivs == 0)
    return (rtx) 0;
  for (i = 0; i < ivs->num_entries; i++)
    if (rtx_equal_p (ivs->entries[i].pseudo, reg))
      return ivs->entries[i].hard_reg;
  return (rtx) 0;
}
rtx
has_func_hard_reg_initial_val (struct function *fun, rtx reg)
{
  struct initial_value_struct *ivs = fun->hard_reg_initial_vals;
  int i;
  if (ivs == 0)
    return (rtx) 0;
  for (i = 0; i < ivs->num_entries; i++)
    if (rtx_equal_p (ivs->entries[i].hard_reg, reg))
      return ivs->entries[i].pseudo;
  return (rtx) 0;
}
rtx
get_func_hard_reg_initial_val (struct function *fun, rtx reg)
{
  struct initial_value_struct *ivs = fun->hard_reg_initial_vals;
  rtx rv = has_func_hard_reg_initial_val (fun, reg);
  if (rv)
    return rv;
  if (ivs == 0)
    {
      fun->hard_reg_initial_vals = ggc_alloc_stat (sizeof (initial_value_struct) );
      ivs = fun->hard_reg_initial_vals;
      ivs->num_entries = 0;
      ivs->max_entries = 5;
      ivs->entries = ggc_alloc_stat (5 * sizeof (initial_value_pair) );
    }
  if (ivs->num_entries >= ivs->max_entries)
    {
      ivs->max_entries += 5;
      ivs->entries = ggc_realloc_stat (ivs->entries,ivs->max_entries * sizeof (initial_value_pair) )
                                    ;
    }
  ivs->entries[ivs->num_entries].hard_reg = reg;
  ivs->entries[ivs->num_entries].pseudo = gen_reg_rtx (((enum machine_mode) (reg)->mode));
  return ivs->entries[ivs->num_entries++].pseudo;
}
rtx
get_hard_reg_initial_val (enum machine_mode mode, int regno)
{
  return get_func_hard_reg_initial_val (cfun, gen_rtx_REG (mode, regno));
}
rtx
has_hard_reg_initial_val (enum machine_mode mode, int regno)
{
  return has_func_hard_reg_initial_val (cfun, gen_rtx_REG (mode, regno));
}
void
emit_initial_value_sets (void)
{
  struct initial_value_struct *ivs = cfun->hard_reg_initial_vals;
  int i;
  rtx seq;
  if (ivs == 0)
    return;
  start_sequence ();
  for (i = 0; i < ivs->num_entries; i++)
    emit_move_insn (ivs->entries[i].pseudo, ivs->entries[i].hard_reg);
  seq = get_insns ();
  end_sequence ();
  emit_insn_after (seq, entry_of_function ());
}
void
allocate_initial_values (rtx *reg_equiv_memory_loc )
{
}
void
gt_ggc_mx_initial_value_struct (void *x_p)
{
  struct initial_value_struct * const x = (struct initial_value_struct *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_entries); i0++) {
          do { if ((*x).entries[i0].hard_reg != ((void *)0)) gt_ggc_mx_rtx_def ((*x).entries[i0].hard_reg); } while (0);
          do { if ((*x).entries[i0].pseudo != ((void *)0)) gt_ggc_mx_rtx_def ((*x).entries[i0].pseudo); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_pch_nx_initial_value_struct (void *x_p)
{
  struct initial_value_struct * const x = (struct initial_value_struct *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_20initial_value_struct))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).num_entries); i0++) {
          do { if ((*x).entries[i0].hard_reg != ((void *)0)) gt_pch_nx_rtx_def ((*x).entries[i0].hard_reg); } while (0);
          do { if ((*x).entries[i0].pseudo != ((void *)0)) gt_pch_nx_rtx_def ((*x).entries[i0].pseudo); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_20initial_value_struct);
      }
    }
}
void
gt_pch_p_20initial_value_struct (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct initial_value_struct * const x = (struct initial_value_struct *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).num_entries); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0].hard_reg), cookie);
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0].pseudo), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
typedef void *nl_catd;
typedef int nl_item;
extern nl_catd catopen (const char *__cat_name, int __flag) ;
extern char *catgets (nl_catd __catalog, int __set, int __number,
        const char *__string) ;
extern int catclose (nl_catd __catalog) ;
enum
{
  ABDAY_1 = (((2) << 16) | (0)),
  ABDAY_2,
  ABDAY_3,
  ABDAY_4,
  ABDAY_5,
  ABDAY_6,
  ABDAY_7,
  DAY_1,
  DAY_2,
  DAY_3,
  DAY_4,
  DAY_5,
  DAY_6,
  DAY_7,
  ABMON_1,
  ABMON_2,
  ABMON_3,
  ABMON_4,
  ABMON_5,
  ABMON_6,
  ABMON_7,
  ABMON_8,
  ABMON_9,
  ABMON_10,
  ABMON_11,
  ABMON_12,
  MON_1,
  MON_2,
  MON_3,
  MON_4,
  MON_5,
  MON_6,
  MON_7,
  MON_8,
  MON_9,
  MON_10,
  MON_11,
  MON_12,
  AM_STR,
  PM_STR,
  D_T_FMT,
  D_FMT,
  T_FMT,
  T_FMT_AMPM,
  ERA,
  __ERA_YEAR,
  ERA_D_FMT,
  ALT_DIGITS,
  ERA_D_T_FMT,
  ERA_T_FMT,
  _NL_TIME_ERA_NUM_ENTRIES,
  _NL_TIME_ERA_ENTRIES,
  _NL_WABDAY_1,
  _NL_WABDAY_2,
  _NL_WABDAY_3,
  _NL_WABDAY_4,
  _NL_WABDAY_5,
  _NL_WABDAY_6,
  _NL_WABDAY_7,
  _NL_WDAY_1,
  _NL_WDAY_2,
  _NL_WDAY_3,
  _NL_WDAY_4,
  _NL_WDAY_5,
  _NL_WDAY_6,
  _NL_WDAY_7,
  _NL_WABMON_1,
  _NL_WABMON_2,
  _NL_WABMON_3,
  _NL_WABMON_4,
  _NL_WABMON_5,
  _NL_WABMON_6,
  _NL_WABMON_7,
  _NL_WABMON_8,
  _NL_WABMON_9,
  _NL_WABMON_10,
  _NL_WABMON_11,
  _NL_WABMON_12,
  _NL_WMON_1,
  _NL_WMON_2,
  _NL_WMON_3,
  _NL_WMON_4,
  _NL_WMON_5,
  _NL_WMON_6,
  _NL_WMON_7,
  _NL_WMON_8,
  _NL_WMON_9,
  _NL_WMON_10,
  _NL_WMON_11,
  _NL_WMON_12,
  _NL_WAM_STR,
  _NL_WPM_STR,
  _NL_WD_T_FMT,
  _NL_WD_FMT,
  _NL_WT_FMT,
  _NL_WT_FMT_AMPM,
  _NL_WERA_YEAR,
  _NL_WERA_D_FMT,
  _NL_WALT_DIGITS,
  _NL_WERA_D_T_FMT,
  _NL_WERA_T_FMT,
  _NL_TIME_WEEK_NDAYS,
  _NL_TIME_WEEK_1STDAY,
  _NL_TIME_WEEK_1STWEEK,
  _NL_TIME_FIRST_WEEKDAY,
  _NL_TIME_FIRST_WORKDAY,
  _NL_TIME_CAL_DIRECTION,
  _NL_TIME_TIMEZONE,
  _DATE_FMT,
  _NL_W_DATE_FMT,
  _NL_TIME_CODESET,
  _NL_NUM_LC_TIME,
  _NL_COLLATE_NRULES = (((3) << 16) | (0)),
  _NL_COLLATE_RULESETS,
  _NL_COLLATE_TABLEMB,
  _NL_COLLATE_WEIGHTMB,
  _NL_COLLATE_EXTRAMB,
  _NL_COLLATE_INDIRECTMB,
  _NL_COLLATE_GAP1,
  _NL_COLLATE_GAP2,
  _NL_COLLATE_GAP3,
  _NL_COLLATE_TABLEWC,
  _NL_COLLATE_WEIGHTWC,
  _NL_COLLATE_EXTRAWC,
  _NL_COLLATE_INDIRECTWC,
  _NL_COLLATE_SYMB_HASH_SIZEMB,
  _NL_COLLATE_SYMB_TABLEMB,
  _NL_COLLATE_SYMB_EXTRAMB,
  _NL_COLLATE_COLLSEQMB,
  _NL_COLLATE_COLLSEQWC,
  _NL_COLLATE_CODESET,
  _NL_NUM_LC_COLLATE,
  _NL_CTYPE_CLASS = (((0) << 16) | (0)),
  _NL_CTYPE_TOUPPER,
  _NL_CTYPE_GAP1,
  _NL_CTYPE_TOLOWER,
  _NL_CTYPE_GAP2,
  _NL_CTYPE_CLASS32,
  _NL_CTYPE_GAP3,
  _NL_CTYPE_GAP4,
  _NL_CTYPE_GAP5,
  _NL_CTYPE_GAP6,
  _NL_CTYPE_CLASS_NAMES,
  _NL_CTYPE_MAP_NAMES,
  _NL_CTYPE_WIDTH,
  _NL_CTYPE_MB_CUR_MAX,
  _NL_CTYPE_CODESET_NAME,
  CODESET = _NL_CTYPE_CODESET_NAME,
  _NL_CTYPE_TOUPPER32,
  _NL_CTYPE_TOLOWER32,
  _NL_CTYPE_CLASS_OFFSET,
  _NL_CTYPE_MAP_OFFSET,
  _NL_CTYPE_INDIGITS_MB_LEN,
  _NL_CTYPE_INDIGITS0_MB,
  _NL_CTYPE_INDIGITS1_MB,
  _NL_CTYPE_INDIGITS2_MB,
  _NL_CTYPE_INDIGITS3_MB,
  _NL_CTYPE_INDIGITS4_MB,
  _NL_CTYPE_INDIGITS5_MB,
  _NL_CTYPE_INDIGITS6_MB,
  _NL_CTYPE_INDIGITS7_MB,
  _NL_CTYPE_INDIGITS8_MB,
  _NL_CTYPE_INDIGITS9_MB,
  _NL_CTYPE_INDIGITS_WC_LEN,
  _NL_CTYPE_INDIGITS0_WC,
  _NL_CTYPE_INDIGITS1_WC,
  _NL_CTYPE_INDIGITS2_WC,
  _NL_CTYPE_INDIGITS3_WC,
  _NL_CTYPE_INDIGITS4_WC,
  _NL_CTYPE_INDIGITS5_WC,
  _NL_CTYPE_INDIGITS6_WC,
  _NL_CTYPE_INDIGITS7_WC,
  _NL_CTYPE_INDIGITS8_WC,
  _NL_CTYPE_INDIGITS9_WC,
  _NL_CTYPE_OUTDIGIT0_MB,
  _NL_CTYPE_OUTDIGIT1_MB,
  _NL_CTYPE_OUTDIGIT2_MB,
  _NL_CTYPE_OUTDIGIT3_MB,
  _NL_CTYPE_OUTDIGIT4_MB,
  _NL_CTYPE_OUTDIGIT5_MB,
  _NL_CTYPE_OUTDIGIT6_MB,
  _NL_CTYPE_OUTDIGIT7_MB,
  _NL_CTYPE_OUTDIGIT8_MB,
  _NL_CTYPE_OUTDIGIT9_MB,
  _NL_CTYPE_OUTDIGIT0_WC,
  _NL_CTYPE_OUTDIGIT1_WC,
  _NL_CTYPE_OUTDIGIT2_WC,
  _NL_CTYPE_OUTDIGIT3_WC,
  _NL_CTYPE_OUTDIGIT4_WC,
  _NL_CTYPE_OUTDIGIT5_WC,
  _NL_CTYPE_OUTDIGIT6_WC,
  _NL_CTYPE_OUTDIGIT7_WC,
  _NL_CTYPE_OUTDIGIT8_WC,
  _NL_CTYPE_OUTDIGIT9_WC,
  _NL_CTYPE_TRANSLIT_TAB_SIZE,
  _NL_CTYPE_TRANSLIT_FROM_IDX,
  _NL_CTYPE_TRANSLIT_FROM_TBL,
  _NL_CTYPE_TRANSLIT_TO_IDX,
  _NL_CTYPE_TRANSLIT_TO_TBL,
  _NL_CTYPE_TRANSLIT_DEFAULT_MISSING_LEN,
  _NL_CTYPE_TRANSLIT_DEFAULT_MISSING,
  _NL_CTYPE_TRANSLIT_IGNORE_LEN,
  _NL_CTYPE_TRANSLIT_IGNORE,
  _NL_CTYPE_MAP_TO_NONASCII,
  _NL_CTYPE_NONASCII_CASE,
  _NL_CTYPE_EXTRA_MAP_1,
  _NL_CTYPE_EXTRA_MAP_2,
  _NL_CTYPE_EXTRA_MAP_3,
  _NL_CTYPE_EXTRA_MAP_4,
  _NL_CTYPE_EXTRA_MAP_5,
  _NL_CTYPE_EXTRA_MAP_6,
  _NL_CTYPE_EXTRA_MAP_7,
  _NL_CTYPE_EXTRA_MAP_8,
  _NL_CTYPE_EXTRA_MAP_9,
  _NL_CTYPE_EXTRA_MAP_10,
  _NL_CTYPE_EXTRA_MAP_11,
  _NL_CTYPE_EXTRA_MAP_12,
  _NL_CTYPE_EXTRA_MAP_13,
  _NL_CTYPE_EXTRA_MAP_14,
  _NL_NUM_LC_CTYPE,
  __INT_CURR_SYMBOL = (((4) << 16) | (0)),
  __CURRENCY_SYMBOL,
  __MON_DECIMAL_POINT,
  __MON_THOUSANDS_SEP,
  __MON_GROUPING,
  __POSITIVE_SIGN,
  __NEGATIVE_SIGN,
  __INT_FRAC_DIGITS,
  __FRAC_DIGITS,
  __P_CS_PRECEDES,
  __P_SEP_BY_SPACE,
  __N_CS_PRECEDES,
  __N_SEP_BY_SPACE,
  __P_SIGN_POSN,
  __N_SIGN_POSN,
  _NL_MONETARY_CRNCYSTR,
  __INT_P_CS_PRECEDES,
  __INT_P_SEP_BY_SPACE,
  __INT_N_CS_PRECEDES,
  __INT_N_SEP_BY_SPACE,
  __INT_P_SIGN_POSN,
  __INT_N_SIGN_POSN,
  _NL_MONETARY_DUO_INT_CURR_SYMBOL,
  _NL_MONETARY_DUO_CURRENCY_SYMBOL,
  _NL_MONETARY_DUO_INT_FRAC_DIGITS,
  _NL_MONETARY_DUO_FRAC_DIGITS,
  _NL_MONETARY_DUO_P_CS_PRECEDES,
  _NL_MONETARY_DUO_P_SEP_BY_SPACE,
  _NL_MONETARY_DUO_N_CS_PRECEDES,
  _NL_MONETARY_DUO_N_SEP_BY_SPACE,
  _NL_MONETARY_DUO_INT_P_CS_PRECEDES,
  _NL_MONETARY_DUO_INT_P_SEP_BY_SPACE,
  _NL_MONETARY_DUO_INT_N_CS_PRECEDES,
  _NL_MONETARY_DUO_INT_N_SEP_BY_SPACE,
  _NL_MONETARY_DUO_P_SIGN_POSN,
  _NL_MONETARY_DUO_N_SIGN_POSN,
  _NL_MONETARY_DUO_INT_P_SIGN_POSN,
  _NL_MONETARY_DUO_INT_N_SIGN_POSN,
  _NL_MONETARY_UNO_VALID_FROM,
  _NL_MONETARY_UNO_VALID_TO,
  _NL_MONETARY_DUO_VALID_FROM,
  _NL_MONETARY_DUO_VALID_TO,
  _NL_MONETARY_CONVERSION_RATE,
  _NL_MONETARY_DECIMAL_POINT_WC,
  _NL_MONETARY_THOUSANDS_SEP_WC,
  _NL_MONETARY_CODESET,
  _NL_NUM_LC_MONETARY,
  __DECIMAL_POINT = (((1) << 16) | (0)),
  RADIXCHAR = __DECIMAL_POINT,
  __THOUSANDS_SEP,
  THOUSEP = __THOUSANDS_SEP,
  __GROUPING,
  _NL_NUMERIC_DECIMAL_POINT_WC,
  _NL_NUMERIC_THOUSANDS_SEP_WC,
  _NL_NUMERIC_CODESET,
  _NL_NUM_LC_NUMERIC,
  __YESEXPR = (((5) << 16) | (0)),
  __NOEXPR,
  __YESSTR,
  __NOSTR,
  _NL_MESSAGES_CODESET,
  _NL_NUM_LC_MESSAGES,
  _NL_PAPER_HEIGHT = (((7) << 16) | (0)),
  _NL_PAPER_WIDTH,
  _NL_PAPER_CODESET,
  _NL_NUM_LC_PAPER,
  _NL_NAME_NAME_FMT = (((8) << 16) | (0)),
  _NL_NAME_NAME_GEN,
  _NL_NAME_NAME_MR,
  _NL_NAME_NAME_MRS,
  _NL_NAME_NAME_MISS,
  _NL_NAME_NAME_MS,
  _NL_NAME_CODESET,
  _NL_NUM_LC_NAME,
  _NL_ADDRESS_POSTAL_FMT = (((9) << 16) | (0)),
  _NL_ADDRESS_COUNTRY_NAME,
  _NL_ADDRESS_COUNTRY_POST,
  _NL_ADDRESS_COUNTRY_AB2,
  _NL_ADDRESS_COUNTRY_AB3,
  _NL_ADDRESS_COUNTRY_CAR,
  _NL_ADDRESS_COUNTRY_NUM,
  _NL_ADDRESS_COUNTRY_ISBN,
  _NL_ADDRESS_LANG_NAME,
  _NL_ADDRESS_LANG_AB,
  _NL_ADDRESS_LANG_TERM,
  _NL_ADDRESS_LANG_LIB,
  _NL_ADDRESS_CODESET,
  _NL_NUM_LC_ADDRESS,
  _NL_TELEPHONE_TEL_INT_FMT = (((10) << 16) | (0)),
  _NL_TELEPHONE_TEL_DOM_FMT,
  _NL_TELEPHONE_INT_SELECT,
  _NL_TELEPHONE_INT_PREFIX,
  _NL_TELEPHONE_CODESET,
  _NL_NUM_LC_TELEPHONE,
  _NL_MEASUREMENT_MEASUREMENT = (((11) << 16) | (0)),
  _NL_MEASUREMENT_CODESET,
  _NL_NUM_LC_MEASUREMENT,
  _NL_IDENTIFICATION_TITLE = (((12) << 16) | (0)),
  _NL_IDENTIFICATION_SOURCE,
  _NL_IDENTIFICATION_ADDRESS,
  _NL_IDENTIFICATION_CONTACT,
  _NL_IDENTIFICATION_EMAIL,
  _NL_IDENTIFICATION_TEL,
  _NL_IDENTIFICATION_FAX,
  _NL_IDENTIFICATION_LANGUAGE,
  _NL_IDENTIFICATION_TERRITORY,
  _NL_IDENTIFICATION_AUDIENCE,
  _NL_IDENTIFICATION_APPLICATION,
  _NL_IDENTIFICATION_ABBREVIATION,
  _NL_IDENTIFICATION_REVISION,
  _NL_IDENTIFICATION_DATE,
  _NL_IDENTIFICATION_CATEGORY,
  _NL_IDENTIFICATION_CODESET,
  _NL_NUM_LC_IDENTIFICATION,
  _NL_NUM
};
extern char *nl_langinfo (nl_item __item) ;
extern char *nl_langinfo_l (nl_item __item, __locale_t __l);
const char *open_quote = "'";
const char *close_quote = "'";
void
gcc_init_libintl (void)
{
  setlocale (0, "");
  setlocale (5, "");
  (void) bindtextdomain ("gcc", "/scratch2/smcc-extras/build/gcc-cvs/install/share/locale");
  (void) textdomain ("gcc");
  open_quote = "`";
  close_quote = "'";
  if (!strcmp (open_quote, "`") && !strcmp (close_quote, "'"))
    {
      const char *encoding;
      open_quote = "'";
      encoding = nl_langinfo (CODESET);
      if (encoding != ((void *)0)
   && (!strcasecmp (encoding, "utf-8")
       || !strcasecmp (encoding, "utf8")))
 {
   open_quote = "\xe2\x80\x98";
   close_quote = "\xe2\x80\x99";
 }
    }
}
typedef unsigned int wint_t;
typedef __mbstate_t mbstate_t;
struct tm;
extern wchar_t *wcscpy (wchar_t * __dest,
   const wchar_t * __src) ;
extern wchar_t *wcsncpy (wchar_t * __dest,
    const wchar_t * __src, size_t __n)
     ;
extern wchar_t *wcscat (wchar_t * __dest,
   const wchar_t * __src) ;
extern wchar_t *wcsncat (wchar_t * __dest,
    const wchar_t * __src, size_t __n)
     ;
extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2)
     ;
extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
     ;
extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) ;
extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2,
   size_t __n) ;
extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
    __locale_t __loc) ;
extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
     size_t __n, __locale_t __loc) ;
extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) ;
extern size_t wcsxfrm (wchar_t * __s1,
         const wchar_t * __s2, size_t __n) ;
extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2,
        __locale_t __loc) ;
extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2,
    size_t __n, __locale_t __loc) ;
extern wchar_t *wcsdup (const wchar_t *__s) ;
extern wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc)
     ;
extern wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc)
     ;
extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc)
     ;
extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject)
     ;
extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept)
     ;
extern wchar_t *wcspbrk (const wchar_t *__wcs, const wchar_t *__accept)
     ;
extern wchar_t *wcsstr (const wchar_t *__haystack, const wchar_t *__needle)
     ;
extern wchar_t *wcstok (wchar_t * __s,
   const wchar_t * __delim,
   wchar_t ** __ptr) ;
extern size_t wcslen (const wchar_t *__s) ;
extern wchar_t *wcswcs (const wchar_t *__haystack, const wchar_t *__needle)
     ;
extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen)
     ;
extern wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, size_t __n)
     ;
extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
     ;
extern wchar_t *wmemcpy (wchar_t * __s1,
    const wchar_t * __s2, size_t __n) ;
extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n)
     ;
extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) ;
extern wchar_t *wmempcpy (wchar_t * __s1,
     const wchar_t * __s2, size_t __n)
     ;
extern wint_t btowc (int __c) ;
extern int wctob (wint_t __c) ;
extern int mbsinit (const mbstate_t *__ps) ;
extern size_t mbrtowc (wchar_t * __pwc,
         const char * __s, size_t __n,
         mbstate_t * __p) ;
extern size_t wcrtomb (char * __s, wchar_t __wc,
         mbstate_t * __ps) ;
extern size_t __mbrlen (const char * __s, size_t __n,
   mbstate_t * __ps) ;
extern size_t mbrlen (const char * __s, size_t __n,
        mbstate_t * __ps) ;
extern size_t mbsrtowcs (wchar_t * __dst,
    const char ** __src, size_t __len,
    mbstate_t * __ps) ;
extern size_t wcsrtombs (char * __dst,
    const wchar_t ** __src, size_t __len,
    mbstate_t * __ps) ;
extern size_t mbsnrtowcs (wchar_t * __dst,
     const char ** __src, size_t __nmc,
     size_t __len, mbstate_t * __ps) ;
extern size_t wcsnrtombs (char * __dst,
     const wchar_t ** __src,
     size_t __nwc, size_t __len,
     mbstate_t * __ps) ;
extern int wcwidth (wchar_t __c) ;
extern int wcswidth (const wchar_t *__s, size_t __n) ;
extern double wcstod (const wchar_t * __nptr,
        wchar_t ** __endptr) ;
extern float wcstof (const wchar_t * __nptr,
       wchar_t ** __endptr) ;
extern long double wcstold (const wchar_t * __nptr,
       wchar_t ** __endptr) ;
extern long int wcstol (const wchar_t * __nptr,
   wchar_t ** __endptr, int __base) ;
extern unsigned long int wcstoul (const wchar_t * __nptr,
      wchar_t ** __endptr, int __base)
     ;
extern long long int wcstoll (const wchar_t * __nptr,
         wchar_t ** __endptr, int __base)
     ;
extern unsigned long long int wcstoull (const wchar_t * __nptr,
     wchar_t ** __endptr,
     int __base) ;
extern long long int wcstoq (const wchar_t * __nptr,
        wchar_t ** __endptr, int __base)
     ;
extern unsigned long long int wcstouq (const wchar_t * __nptr,
           wchar_t ** __endptr,
           int __base) ;
extern long int wcstol_l (const wchar_t * __nptr,
     wchar_t ** __endptr, int __base,
     __locale_t __loc) ;
extern unsigned long int wcstoul_l (const wchar_t * __nptr,
        wchar_t ** __endptr,
        int __base, __locale_t __loc) ;
extern long long int wcstoll_l (const wchar_t * __nptr,
    wchar_t ** __endptr,
    int __base, __locale_t __loc) ;
extern unsigned long long int wcstoull_l (const wchar_t * __nptr,
       wchar_t ** __endptr,
       int __base, __locale_t __loc)
     ;
extern double wcstod_l (const wchar_t * __nptr,
   wchar_t ** __endptr, __locale_t __loc)
     ;
extern float wcstof_l (const wchar_t * __nptr,
         wchar_t ** __endptr, __locale_t __loc)
     ;
extern long double wcstold_l (const wchar_t * __nptr,
         wchar_t ** __endptr,
         __locale_t __loc) ;
extern wchar_t *wcpcpy (wchar_t * __dest,
   const wchar_t * __src) ;
extern wchar_t *wcpncpy (wchar_t * __dest,
    const wchar_t * __src, size_t __n)
     ;
extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) ;
extern int fwide (__FILE *__fp, int __mode) ;
extern int fwprintf (__FILE * __stream,
       const wchar_t * __format, ...)
                                                           ;
extern int wprintf (const wchar_t * __format, ...)
                                                           ;
extern int swprintf (wchar_t * __s, size_t __n,
       const wchar_t * __format, ...)
     ;
extern int vfwprintf (__FILE * __s,
        const wchar_t * __format,
        __gnuc_va_list __arg)
                                                           ;
extern int vwprintf (const wchar_t * __format,
       __gnuc_va_list __arg)
                                                           ;
extern int vswprintf (wchar_t * __s, size_t __n,
        const wchar_t * __format,
        __gnuc_va_list __arg)
     ;
extern int fwscanf (__FILE * __stream,
      const wchar_t * __format, ...)
                                                          ;
extern int wscanf (const wchar_t * __format, ...)
                                                          ;
extern int swscanf (const wchar_t * __s,
      const wchar_t * __format, ...)
     ;
extern int vfwscanf (__FILE * __s,
       const wchar_t * __format,
       __gnuc_va_list __arg)
                                                          ;
extern int vwscanf (const wchar_t * __format,
      __gnuc_va_list __arg)
                                                          ;
extern int vswscanf (const wchar_t * __s,
       const wchar_t * __format,
       __gnuc_va_list __arg)
     ;
extern wint_t fgetwc (__FILE *__stream);
extern wint_t getwc (__FILE *__stream);
extern wint_t getwchar (void);
extern wint_t fputwc (wchar_t __wc, __FILE *__stream);
extern wint_t putwc (wchar_t __wc, __FILE *__stream);
extern wint_t putwchar (wchar_t __wc);
extern wchar_t *fgetws (wchar_t * __ws, int __n,
   __FILE * __stream);
extern int fputws (const wchar_t * __ws,
     __FILE * __stream);
extern wint_t ungetwc (wint_t __wc, __FILE *__stream);
extern wint_t getwc_unlocked (__FILE *__stream);
extern wint_t getwchar_unlocked (void);
extern wint_t fgetwc_unlocked (__FILE *__stream);
extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream);
extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream);
extern wint_t putwchar_unlocked (wchar_t __wc);
extern wchar_t *fgetws_unlocked (wchar_t * __ws, int __n,
     __FILE * __stream);
extern int fputws_unlocked (const wchar_t * __ws,
       __FILE * __stream);
extern size_t wcsftime (wchar_t * __s, size_t __maxsize,
   const wchar_t * __format,
   const struct tm * __tp) ;
extern size_t wcsftime_l (wchar_t * __s, size_t __maxsize,
     const wchar_t * __format,
     const struct tm * __tp,
     __locale_t __loc) ;
size_t
gcc_gettext_width (const char *msgstr)
{
  size_t nwcs = mbstowcs (0, msgstr, 0);
  wchar_t *wmsgstr = C_alloca((nwcs + 1) * sizeof (wchar_t));
  mbstowcs (wmsgstr, msgstr, nwcs + 1);
  return wcswidth (wmsgstr, nwcs);
}
static void init_label_info (rtx);
static void mark_all_labels (rtx);
static void delete_computation (rtx);
static void redirect_exp_1 (rtx *, rtx, rtx, rtx);
static int redirect_exp (rtx, rtx, rtx);
static void invert_exp_1 (rtx);
static int invert_exp (rtx);
static int returnjump_p_1 (rtx *, void *);
static void delete_prior_computation (rtx, rtx);
void
rebuild_jump_labels (rtx f)
{
  rtx insn;
  timevar_push (TV_REBUILD_JUMP);
  init_label_info (f);
  mark_all_labels (f);
  for (insn = (cfun->expr->x_forced_labels); insn; insn = (((insn)->u.fld[1]).rtx1))
    if (((enum rtx_code) ((((insn)->u.fld[0]).rtx1))->code) == CODE_LABEL)
      ((((((insn)->u.fld[0]).rtx1))->u.fld[4]).rtint)++;
  timevar_pop (TV_REBUILD_JUMP);
}
void
cleanup_barriers (void)
{
  rtx insn, next, prev;
  for (insn = get_insns (); insn; insn = next)
    {
      next = (((insn)->u.fld[2]).rtx1);
      if (((enum rtx_code) (insn)->code) == BARRIER)
 {
   prev = prev_nonnote_insn (insn);
   if (((enum rtx_code) (prev)->code) == BARRIER)
     delete_barrier (insn);
   else if (prev != (((insn)->u.fld[1]).rtx1))
     reorder_insns (insn, insn, prev);
 }
    }
}
void
purge_line_number_notes (rtx f)
{
  rtx last_note = 0;
  rtx insn;
  for (insn = f; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((enum rtx_code) (insn)->code) == NOTE)
      {
 if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_FUNCTION_BEG)
   last_note = (rtx) 0;
 else if ((((insn)->u.fld[5]).rtint) >= 0)
   {
     if (last_note
  && (((insn)->u.fld[4]).rtstr) == (((last_note)->u.fld[4]).rtstr)
  && (((insn)->u.fld[5]).rtint) == (((last_note)->u.fld[5]).rtint)
)
       {
  delete_related_insns (insn);
  continue;
       }
     last_note = insn;
   }
      }
}
static void
init_label_info (rtx f)
{
  rtx insn;
  for (insn = f; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((enum rtx_code) (insn)->code) == CODE_LABEL)
      (((insn)->u.fld[4]).rtint) = ((((insn))->in_struct) != 0);
    else if (((enum rtx_code) (insn)->code) == JUMP_INSN)
      (((insn)->u.fld[9]).rtx1) = 0;
    else if (((enum rtx_code) (insn)->code) == INSN || ((enum rtx_code) (insn)->code) == CALL_INSN)
      {
 rtx note, next;
 for (note = (((insn)->u.fld[8]).rtx1); note; note = next)
   {
     next = (((note)->u.fld[1]).rtx1);
     if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_LABEL
  && ! reg_mentioned_p ((((note)->u.fld[0]).rtx1), (((insn)->u.fld[5]).rtx1)))
       remove_note (insn, note);
   }
      }
}
static void
mark_all_labels (rtx f)
{
  rtx insn;
  for (insn = f; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      {
 mark_jump_label ((((insn)->u.fld[5]).rtx1), insn, 0);
 if (! (((insn))->volatil) && ((enum rtx_code) (insn)->code) == JUMP_INSN)
   {
     if ((((insn)->u.fld[9]).rtx1) == 0)
       {
  rtx label_note = find_reg_note (insn, REG_LABEL, (rtx) 0);
  if (label_note)
    {
      rtx label_ref = gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), ((((label_note)->u.fld[0]).rtx1)))
                                  ;
      mark_jump_label (label_ref, insn, 0);
      (((label_note)->u.fld[0]).rtx1) = (((label_ref)->u.fld[0]).rtx1);
      (((insn)->u.fld[9]).rtx1) = (((label_note)->u.fld[0]).rtx1);
    }
       }
   }
      }
}
unsigned char
squeeze_notes (rtx* startp, rtx* endp)
{
  rtx start = *startp;
  rtx end = *endp;
  rtx insn;
  rtx next;
  rtx last = ((void *)0);
  rtx past_end = (((end)->u.fld[2]).rtx1);
  for (insn = start; insn != past_end; insn = next)
    {
      next = (((insn)->u.fld[2]).rtx1);
      if (((enum rtx_code) (insn)->code) == NOTE
   && ((((insn)->u.fld[5]).rtint) == NOTE_INSN_BLOCK_END
       || (((insn)->u.fld[5]).rtint) == NOTE_INSN_BLOCK_BEG
       || (((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_BEG
       || (((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_END
       || (((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_CONT
       || (((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_VTOP))
 {
   if (insn == start)
     start = next;
   else
     {
       rtx prev = (((insn)->u.fld[1]).rtx1);
       (((insn)->u.fld[1]).rtx1) = (((start)->u.fld[1]).rtx1);
       (((insn)->u.fld[2]).rtx1) = start;
       ((((((insn)->u.fld[1]).rtx1))->u.fld[2]).rtx1) = insn;
       ((((((insn)->u.fld[2]).rtx1))->u.fld[1]).rtx1) = insn;
       (((prev)->u.fld[2]).rtx1) = next;
       (((next)->u.fld[1]).rtx1) = prev;
     }
 }
      else
 last = insn;
    }
  if (start == past_end)
    return 1;
  end = last;
  *startp = start;
  *endp = end;
  return 0;
}
rtx
get_label_before (rtx insn)
{
  rtx label;
  label = prev_nonnote_insn (insn);
  if (label == 0 || ((enum rtx_code) (label)->code) != CODE_LABEL)
    {
      rtx prev = (((insn)->u.fld[1]).rtx1);
      label = gen_label_rtx ();
      emit_label_after (label, prev);
      (((label)->u.fld[4]).rtint) = 0;
    }
  return label;
}
rtx
get_label_after (rtx insn)
{
  rtx label;
  label = next_nonnote_insn (insn);
  if (label == 0 || ((enum rtx_code) (label)->code) != CODE_LABEL)
    {
      label = gen_label_rtx ();
      emit_label_after (label, insn);
      (((label)->u.fld[4]).rtint) = 0;
    }
  return label;
}
enum rtx_code
reversed_comparison_code_parts (enum rtx_code code, rtx arg0, rtx arg1, rtx insn)
{
  enum machine_mode mode;
  if ((rtx_class[(int) (code)]) != RTX_COMPARE
      && (rtx_class[(int) (code)]) != RTX_COMM_COMPARE)
    return UNKNOWN;
  mode = ((enum machine_mode) (arg0)->mode);
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (arg1)->mode);
  if (mode_class[mode] == MODE_CC
      && 1)
    {
      return ix86_reverse_condition ((code), (mode));
      return reverse_condition (code);
    }
  switch (code)
    {
    case GEU:
    case GTU:
    case LEU:
    case LTU:
    case NE:
    case EQ:
      return reverse_condition (code);
    case ORDERED:
    case UNORDERED:
    case LTGT:
    case UNEQ:
      return reverse_condition_maybe_unordered (code);
    case UNLT:
    case UNLE:
    case UNGT:
    case UNGE:
      return UNKNOWN;
    default:
      break;
    }
  if (mode_class[mode] == MODE_CC || ((arg0) ? 0 : 0))
    {
      rtx prev;
      if (! insn)
 return UNKNOWN;
      for (prev = prev_nonnote_insn (insn);
    prev != 0 && ((enum rtx_code) (prev)->code) != CODE_LABEL;
    prev = prev_nonnote_insn (prev))
 {
   rtx set = set_of (arg0, prev);
   if (set && ((enum rtx_code) (set)->code) == SET
       && rtx_equal_p ((((set)->u.fld[0]).rtx1), arg0))
     {
       rtx src = (((set)->u.fld[1]).rtx1);
       if (((enum rtx_code) (src)->code) == COMPARE)
  {
    rtx comparison = src;
    arg0 = (((src)->u.fld[0]).rtx1);
    mode = ((enum machine_mode) (arg0)->mode);
    if (mode == VOIDmode)
      mode = ((enum machine_mode) ((((comparison)->u.fld[1]).rtx1))->mode);
    break;
  }
       if ((((enum rtx_code) (src)->code) == REG))
  {
    arg0 = src;
    continue;
  }
     }
   if (set)
     return UNKNOWN;
 }
    }
  if (((enum rtx_code) (arg0)->code) == CONST_INT
      || (((enum machine_mode) (arg0)->mode) != VOIDmode
   && mode_class[mode] != MODE_CC
   && !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)))
    return reverse_condition (code);
  return UNKNOWN;
}
enum rtx_code
reversed_comparison_code (rtx comparison, rtx insn)
{
  if (!(((rtx_class[(int) (((enum rtx_code) (comparison)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
    return UNKNOWN;
  return reversed_comparison_code_parts (((enum rtx_code) (comparison)->code),
      (((comparison)->u.fld[0]).rtx1),
      (((comparison)->u.fld[1]).rtx1), insn);
}
enum rtx_code
reverse_condition (enum rtx_code code)
{
  switch (code)
    {
    case EQ:
      return NE;
    case NE:
      return EQ;
    case GT:
      return LE;
    case GE:
      return LT;
    case LT:
      return GE;
    case LE:
      return GT;
    case GTU:
      return LEU;
    case GEU:
      return LTU;
    case LTU:
      return GEU;
    case LEU:
      return GTU;
    case UNORDERED:
      return ORDERED;
    case ORDERED:
      return UNORDERED;
    case UNLT:
    case UNLE:
    case UNGT:
    case UNGE:
    case UNEQ:
    case LTGT:
      return UNKNOWN;
    default:
      abort ();
    }
}
enum rtx_code
reverse_condition_maybe_unordered (enum rtx_code code)
{
  switch (code)
    {
    case EQ:
      return NE;
    case NE:
      return EQ;
    case GT:
      return UNLE;
    case GE:
      return UNLT;
    case LT:
      return UNGE;
    case LE:
      return UNGT;
    case LTGT:
      return UNEQ;
    case UNORDERED:
      return ORDERED;
    case ORDERED:
      return UNORDERED;
    case UNLT:
      return GE;
    case UNLE:
      return GT;
    case UNGT:
      return LE;
    case UNGE:
      return LT;
    case UNEQ:
      return LTGT;
    default:
      abort ();
    }
}
enum rtx_code
swap_condition (enum rtx_code code)
{
  switch (code)
    {
    case EQ:
    case NE:
    case UNORDERED:
    case ORDERED:
    case UNEQ:
    case LTGT:
      return code;
    case GT:
      return LT;
    case GE:
      return LE;
    case LT:
      return GT;
    case LE:
      return GE;
    case GTU:
      return LTU;
    case GEU:
      return LEU;
    case LTU:
      return GTU;
    case LEU:
      return GEU;
    case UNLT:
      return UNGT;
    case UNLE:
      return UNGE;
    case UNGT:
      return UNLT;
    case UNGE:
      return UNLE;
    default:
      abort ();
    }
}
enum rtx_code
unsigned_condition (enum rtx_code code)
{
  switch (code)
    {
    case EQ:
    case NE:
    case GTU:
    case GEU:
    case LTU:
    case LEU:
      return code;
    case GT:
      return GTU;
    case GE:
      return GEU;
    case LT:
      return LTU;
    case LE:
      return LEU;
    default:
      abort ();
    }
}
enum rtx_code
signed_condition (enum rtx_code code)
{
  switch (code)
    {
    case EQ:
    case NE:
    case GT:
    case GE:
    case LT:
    case LE:
      return code;
    case GTU:
      return GT;
    case GEU:
      return GE;
    case LTU:
      return LT;
    case LEU:
      return LE;
    default:
      abort ();
    }
}
int
comparison_dominates_p (enum rtx_code code1, enum rtx_code code2)
{
  if (code1 == UNKNOWN || code2 == UNKNOWN)
    return 0;
  if (code1 == code2)
    return 1;
  switch (code1)
    {
    case UNEQ:
      if (code2 == UNLE || code2 == UNGE)
 return 1;
      break;
    case EQ:
      if (code2 == LE || code2 == LEU || code2 == GE || code2 == GEU
   || code2 == ORDERED)
 return 1;
      break;
    case UNLT:
      if (code2 == UNLE || code2 == NE)
 return 1;
      break;
    case LT:
      if (code2 == LE || code2 == NE || code2 == ORDERED || code2 == LTGT)
 return 1;
      break;
    case UNGT:
      if (code2 == UNGE || code2 == NE)
 return 1;
      break;
    case GT:
      if (code2 == GE || code2 == NE || code2 == ORDERED || code2 == LTGT)
 return 1;
      break;
    case GE:
    case LE:
      if (code2 == ORDERED)
 return 1;
      break;
    case LTGT:
      if (code2 == NE || code2 == ORDERED)
 return 1;
      break;
    case LTU:
      if (code2 == LEU || code2 == NE)
 return 1;
      break;
    case GTU:
      if (code2 == GEU || code2 == NE)
 return 1;
      break;
    case UNORDERED:
      if (code2 == NE || code2 == UNEQ || code2 == UNLE || code2 == UNLT
   || code2 == UNGE || code2 == UNGT)
 return 1;
      break;
    default:
      break;
    }
  return 0;
}
int
simplejump_p (rtx insn)
{
  return (((enum rtx_code) (insn)->code) == JUMP_INSN
   && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET
   && ((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == PC
   && ((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->code) == LABEL_REF);
}
int
condjump_p (rtx insn)
{
  rtx x = (((insn)->u.fld[5]).rtx1);
  if (((enum rtx_code) (x)->code) != SET
      || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) != PC)
    return 0;
  x = (((x)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x)->code) == LABEL_REF)
    return 1;
  else
    return (((enum rtx_code) (x)->code) == IF_THEN_ELSE
     && ((((enum rtx_code) ((((x)->u.fld[2]).rtx1))->code) == PC
   && (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == LABEL_REF
       || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == RETURN))
  || (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == PC
      && (((enum rtx_code) ((((x)->u.fld[2]).rtx1))->code) == LABEL_REF
   || ((enum rtx_code) ((((x)->u.fld[2]).rtx1))->code) == RETURN))));
  return 0;
}
int
condjump_in_parallel_p (rtx insn)
{
  rtx x = (((insn)->u.fld[5]).rtx1);
  if (((enum rtx_code) (x)->code) != PARALLEL)
    return 0;
  else
    x = (((((x)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (x)->code) != SET)
    return 0;
  if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) != PC)
    return 0;
  if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == LABEL_REF)
    return 1;
  if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != IF_THEN_ELSE)
    return 0;
  if (((((((x)->u.fld[1]).rtx1))->u.fld[2]).rtx1) == (global_rtl[GR_PC])
      && (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == LABEL_REF
   || ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == RETURN))
    return 1;
  if (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1) == (global_rtl[GR_PC])
      && (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->code) == LABEL_REF
   || ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->code) == RETURN))
    return 1;
  return 0;
}
rtx
pc_set (rtx insn)
{
  rtx pat;
  if (((enum rtx_code) (insn)->code) != JUMP_INSN)
    return (rtx) 0;
  pat = (((insn)->u.fld[5]).rtx1);
  if (((enum rtx_code) (pat)->code) == PARALLEL)
    pat = (((((pat)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (pat)->code) == SET && ((enum rtx_code) ((((pat)->u.fld[0]).rtx1))->code) == PC)
    return pat;
  return (rtx) 0;
}
int
any_uncondjump_p (rtx insn)
{
  rtx x = pc_set (insn);
  if (!x)
    return 0;
  if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != LABEL_REF)
    return 0;
  if (find_reg_note (insn, REG_NON_LOCAL_GOTO, (rtx) 0))
    return 0;
  return 1;
}
int
any_condjump_p (rtx insn)
{
  rtx x = pc_set (insn);
  enum rtx_code a, b;
  if (!x)
    return 0;
  if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != IF_THEN_ELSE)
    return 0;
  a = ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code);
  b = ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->code);
  return ((b == PC && (a == LABEL_REF || a == RETURN))
   || (a == PC && (b == LABEL_REF || b == RETURN)));
}
rtx
condjump_label (rtx insn)
{
  rtx x = pc_set (insn);
  if (!x)
    return (rtx) 0;
  x = (((x)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x)->code) == LABEL_REF)
    return x;
  if (((enum rtx_code) (x)->code) != IF_THEN_ELSE)
    return (rtx) 0;
  if ((((x)->u.fld[2]).rtx1) == (global_rtl[GR_PC]) && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == LABEL_REF)
    return (((x)->u.fld[1]).rtx1);
  if ((((x)->u.fld[1]).rtx1) == (global_rtl[GR_PC]) && ((enum rtx_code) ((((x)->u.fld[2]).rtx1))->code) == LABEL_REF)
    return (((x)->u.fld[2]).rtx1);
  return (rtx) 0;
}
static int
returnjump_p_1 (rtx *loc, void *data )
{
  rtx x = *loc;
  return x && (((enum rtx_code) (x)->code) == RETURN
        || (((enum rtx_code) (x)->code) == SET && (((x))->jump)));
}
int
returnjump_p (rtx insn)
{
  if (((enum rtx_code) (insn)->code) != JUMP_INSN)
    return 0;
  return for_each_rtx (&(((insn)->u.fld[5]).rtx1), returnjump_p_1, ((void *)0));
}
int
onlyjump_p (rtx insn)
{
  rtx set;
  if (((enum rtx_code) (insn)->code) != JUMP_INSN)
    return 0;
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (set == ((void *)0))
    return 0;
  if (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) != PC)
    return 0;
  if (side_effects_p ((((set)->u.fld[1]).rtx1)))
    return 0;
  return 1;
}
rtx
follow_jumps (rtx label)
{
  rtx insn;
  rtx next;
  rtx value1 = label;
  int depth;
  for (depth = 0;
       (depth < 10
 && (insn = next_active_insn (value1)) != 0
 && ((enum rtx_code) (insn)->code) == JUMP_INSN
 && (((((insn)->u.fld[9]).rtx1) != 0 && any_uncondjump_p (insn)
      && onlyjump_p (insn))
     || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == RETURN)
 && (next = (((insn)->u.fld[2]).rtx1))
 && ((enum rtx_code) (next)->code) == BARRIER);
       depth++)
    {
      rtx tem;
      if (!reload_completed)
 for (tem = value1; tem != insn; tem = (((tem)->u.fld[2]).rtx1))
   if (((enum rtx_code) (tem)->code) == NOTE
       && ((((tem)->u.fld[5]).rtint) == NOTE_INSN_LOOP_BEG
    || (flag_test_coverage && (((tem)->u.fld[5]).rtint) > 0)))
     return value1;
      if ((((insn)->u.fld[9]).rtx1) == label)
 return label;
      tem = next_active_insn ((((insn)->u.fld[9]).rtx1));
      if (tem && (((enum rtx_code) ((((tem)->u.fld[5]).rtx1))->code) == ADDR_VEC
    || ((enum rtx_code) ((((tem)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC))
 break;
      value1 = (((insn)->u.fld[9]).rtx1);
    }
  if (depth == 10)
    return label;
  return value1;
}
void
mark_jump_label (rtx x, rtx insn, int in_mem)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  int i;
  const char *fmt;
  switch (code)
    {
    case PC:
    case CC0:
    case REG:
    case CONST_INT:
    case CONST_DOUBLE:
    case CLOBBER:
    case CALL:
      return;
    case MEM:
      in_mem = 1;
      break;
    case SYMBOL_REF:
      if (!in_mem)
 return;
      if ((((x))->unchanging))
 mark_jump_label (get_pool_constant (x), insn, in_mem);
      break;
    case LABEL_REF:
      {
 rtx label = (((x)->u.fld[0]).rtx1);
 if (((enum rtx_code) (label)->code) == NOTE
     && (((label)->u.fld[5]).rtint) == NOTE_INSN_DELETED_LABEL)
   break;
 if (((enum rtx_code) (label)->code) != CODE_LABEL)
   abort ();
 if ((((x))->volatil))
   break;
 (((x)->u.fld[0]).rtx1) = label;
 if (! insn || ! (((insn))->volatil))
   ++(((label)->u.fld[4]).rtint);
 if (insn)
   {
     if (((enum rtx_code) (insn)->code) == JUMP_INSN)
       (((insn)->u.fld[9]).rtx1) = label;
     else
       {
  if (! find_reg_note (insn, REG_LABEL, label))
    (((insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ue (INSN_LIST, (REG_LABEL), (label), ((((insn)->u.fld[8]).rtx1)))
                        ;
       }
   }
 return;
      }
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      if (! (((insn))->volatil))
 {
   int eltnum = code == ADDR_DIFF_VEC ? 1 : 0;
   for (i = 0; i < (((((x)->u.fld[eltnum]).rtvec1))->num_elem); i++)
     mark_jump_label ((((((x)->u.fld[eltnum]).rtvec1))->elem[i]), (rtx) 0, in_mem);
 }
      return;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 mark_jump_label ((((x)->u.fld[i]).rtx1), insn, in_mem);
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     mark_jump_label ((((((x)->u.fld[i]).rtvec1))->elem[j]), insn, in_mem);
 }
    }
}
void
delete_jump (rtx insn)
{
  rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (set && ((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == PC)
    delete_computation (insn);
}
void
delete_barrier (rtx insn)
{
  if (((enum rtx_code) (insn)->code) != BARRIER)
    abort ();
  delete_insn (insn);
}
static void
delete_prior_computation (rtx note, rtx insn)
{
  rtx our_prev;
  rtx reg = (((note)->u.fld[0]).rtx1);
  for (our_prev = prev_nonnote_insn (insn);
       our_prev && (((enum rtx_code) (our_prev)->code) == INSN
      || ((enum rtx_code) (our_prev)->code) == CALL_INSN);
       our_prev = prev_nonnote_insn (our_prev))
    {
      rtx pat = (((our_prev)->u.fld[5]).rtx1);
      if (((enum rtx_code) (our_prev)->code) == CALL_INSN
   && (! (((our_prev))->unchanging)
       || ((enum rtx_code) (pat)->code) != SET || ((enum rtx_code) ((((pat)->u.fld[1]).rtx1))->code) != CALL))
 break;
      if (((enum rtx_code) (pat)->code) == SEQUENCE)
 break;
      if (((enum rtx_code) (pat)->code) == USE
   && ((enum rtx_code) ((((pat)->u.fld[0]).rtx1))->code) == INSN)
 break;
      if (reg_set_p (reg, pat))
 {
   if (side_effects_p (pat) && ((enum rtx_code) (our_prev)->code) != CALL_INSN)
     break;
   if (((enum rtx_code) (pat)->code) == PARALLEL)
     {
       int i;
       for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
  {
    rtx part = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
    if (((enum rtx_code) (part)->code) == SET
        && (((part)->u.fld[0]).rtx1) != reg)
      break;
  }
       if (i == (((((pat)->u.fld[0]).rtvec1))->num_elem))
  delete_computation (our_prev);
     }
   else if (((enum rtx_code) (pat)->code) == SET
     && (((enum rtx_code) ((((pat)->u.fld[0]).rtx1))->code) == REG))
     {
       int dest_regno = ((((((pat)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
       int dest_endregno
  = (dest_regno
     + (dest_regno < 53
        ? hard_regno_nregs[dest_regno]
     [((enum machine_mode) ((((pat)->u.fld[0]).rtx1))->mode)] : 1));
       int regno = (((reg)->u.fld[0]).rtuint);
       int endregno
  = (regno
     + (regno < 53
        ? hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)] : 1));
       if (dest_regno >= regno
    && dest_endregno <= endregno)
  delete_computation (our_prev);
       else if (dest_regno <= regno
         && dest_endregno >= endregno)
  {
    int i;
    (((our_prev)->u.fld[8]).rtx1)
      = gen_rtx_fmt_ee (EXPR_LIST, (REG_UNUSED), (reg), ((((our_prev)->u.fld[8]).rtx1)))
                           ;
    for (i = dest_regno; i < dest_endregno; i++)
      if (! find_regno_note (our_prev, REG_UNUSED, i))
        break;
    if (i == dest_endregno)
      delete_computation (our_prev);
  }
     }
   break;
 }
      if (reg_overlap_mentioned_p (reg, pat))
 {
   (((note)->u.fld[1]).rtx1) = (((our_prev)->u.fld[8]).rtx1);
   (((our_prev)->u.fld[8]).rtx1) = note;
   break;
 }
    }
}
static void
delete_computation (rtx insn)
{
  rtx note, next;
  for (note = (((insn)->u.fld[8]).rtx1); note; note = next)
    {
      next = (((note)->u.fld[1]).rtx1);
      if (((enum reg_note) ((enum machine_mode) (note)->mode)) != REG_DEAD
   || !(((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG))
 continue;
      delete_prior_computation (note, insn);
    }
  delete_related_insns (insn);
}
rtx
delete_related_insns (rtx insn)
{
  int was_code_label = (((enum rtx_code) (insn)->code) == CODE_LABEL);
  rtx note;
  rtx next = (((insn)->u.fld[2]).rtx1), prev = (((insn)->u.fld[1]).rtx1);
  while (next && (((next))->volatil))
    next = (((next)->u.fld[2]).rtx1);
  if ((((insn))->volatil))
    return next;
  delete_insn (insn);
  if (next != 0 && ((enum rtx_code) (next)->code) == BARRIER)
    delete_insn (next);
  if (((enum rtx_code) (insn)->code) == JUMP_INSN && (((insn)->u.fld[9]).rtx1))
    {
      rtx lab = (((insn)->u.fld[9]).rtx1), lab_next;
      if ((((lab)->u.fld[4]).rtint) == 0)
 {
   delete_related_insns (lab);
   while (next && (((next))->volatil))
     next = (((next)->u.fld[2]).rtx1);
   return next;
 }
      else if (tablejump_p (insn, ((void *)0), &lab_next))
 {
   delete_related_insns (lab_next);
 }
    }
  if (((enum rtx_code) (insn)->code) == JUMP_INSN
      && (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_VEC
   || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC))
    {
      rtx pat = (((insn)->u.fld[5]).rtx1);
      int i, diff_vec_p = ((enum rtx_code) (pat)->code) == ADDR_DIFF_VEC;
      int len = (((((pat)->u.fld[diff_vec_p]).rtvec1))->num_elem);
      for (i = 0; i < len; i++)
 if ((((((((((((pat)->u.fld[diff_vec_p]).rtvec1))->elem[i]))->u.fld[0]).rtx1))->u.fld[4]).rtint) == 0)
   delete_related_insns (((((((((pat)->u.fld[diff_vec_p]).rtvec1))->elem[i]))->u.fld[0]).rtx1));
      while (next && (((next))->volatil))
 next = (((next)->u.fld[2]).rtx1);
      return next;
    }
  if (((enum rtx_code) (insn)->code) == INSN || ((enum rtx_code) (insn)->code) == CALL_INSN)
    for (note = (((insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
      if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_LABEL
   && ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == CODE_LABEL)
 if (((((((note)->u.fld[0]).rtx1))->u.fld[4]).rtint) == 0)
   delete_related_insns ((((note)->u.fld[0]).rtx1));
  while (prev && ((((prev))->volatil) || ((enum rtx_code) (prev)->code) == NOTE))
    prev = (((prev)->u.fld[1]).rtx1);
  if (was_code_label
      && (((insn)->u.fld[2]).rtx1) != 0
      && ((enum rtx_code) ((((insn)->u.fld[2]).rtx1))->code) == JUMP_INSN
      && (((enum rtx_code) (((((((insn)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->code) == ADDR_VEC
   || ((enum rtx_code) (((((((insn)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC))
    next = delete_related_insns ((((insn)->u.fld[2]).rtx1));
  if (was_code_label && prev && ((enum rtx_code) (prev)->code) == BARRIER)
    {
      enum rtx_code code;
      while (next)
 {
   code = ((enum rtx_code) (next)->code);
   if (code == NOTE
       && (((next)->u.fld[5]).rtint) != NOTE_INSN_FUNCTION_END)
     next = (((next)->u.fld[2]).rtx1);
   else if (code == CODE_LABEL && (((next))->volatil))
     next = (((next)->u.fld[2]).rtx1);
   else if (code == BARRIER || ((((enum rtx_code) (next)->code) == INSN) || (((enum rtx_code) (next)->code) == JUMP_INSN) || (((enum rtx_code) (next)->code) == CALL_INSN)))
     next = delete_related_insns (next);
   else
     break;
 }
    }
  return next;
}
void
delete_for_peephole (rtx from, rtx to)
{
  rtx insn = from;
  while (1)
    {
      rtx next = (((insn)->u.fld[2]).rtx1);
      rtx prev = (((insn)->u.fld[1]).rtx1);
      if (((enum rtx_code) (insn)->code) != NOTE)
 {
   (((insn))->volatil) = 1;
   if (prev)
     (((prev)->u.fld[2]).rtx1) = next;
   if (next)
     (((next)->u.fld[1]).rtx1) = prev;
 }
      if (insn == to)
 break;
      insn = next;
    }
}
static void
redirect_exp_1 (rtx *loc, rtx olabel, rtx nlabel, rtx insn)
{
  rtx x = *loc;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  int i;
  const char *fmt;
  if (code == LABEL_REF)
    {
      if ((((x)->u.fld[0]).rtx1) == olabel)
 {
   rtx n;
   if (nlabel)
     n = gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (nlabel));
   else
     n = gen_rtx_fmt_ (RETURN, (VOIDmode));
   validate_change (insn, loc, n, 1);
   return;
 }
    }
  else if (code == RETURN && olabel == 0)
    {
      x = gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (nlabel));
      if (loc == &(((insn)->u.fld[5]).rtx1))
 x = gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (x));
      validate_change (insn, loc, x, 1);
      return;
    }
  if (code == SET && nlabel == 0 && (((x)->u.fld[0]).rtx1) == (global_rtl[GR_PC])
      && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == LABEL_REF
      && ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1) == olabel)
    {
      validate_change (insn, loc, gen_rtx_fmt_ (RETURN, (VOIDmode)), 1);
      return;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 redirect_exp_1 (&(((x)->u.fld[i]).rtx1), olabel, nlabel, insn);
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     redirect_exp_1 (&(((((x)->u.fld[i]).rtvec1))->elem[j]), olabel, nlabel, insn);
 }
    }
}
static int
redirect_exp (rtx olabel, rtx nlabel, rtx insn)
{
  rtx *loc;
  if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL)
    loc = &((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
  else
    loc = &(((insn)->u.fld[5]).rtx1);
  redirect_exp_1 (loc, olabel, nlabel, insn);
  if (num_validated_changes () == 0)
    return 0;
  return apply_change_group ();
}
int
redirect_jump_1 (rtx jump, rtx nlabel)
{
  int ochanges = num_validated_changes ();
  rtx *loc;
  if (((enum rtx_code) ((((jump)->u.fld[5]).rtx1))->code) == PARALLEL)
    loc = &((((((((jump)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
  else
    loc = &(((jump)->u.fld[5]).rtx1);
  redirect_exp_1 (loc, (((jump)->u.fld[9]).rtx1), nlabel, jump);
  return num_validated_changes () > ochanges;
}
int
redirect_jump (rtx jump, rtx nlabel, int delete_unused)
{
  rtx olabel = (((jump)->u.fld[9]).rtx1);
  rtx note;
  if (nlabel == olabel)
    return 1;
  if (! redirect_exp (olabel, nlabel, jump))
    return 0;
  (((jump)->u.fld[9]).rtx1) = nlabel;
  if (nlabel)
    ++(((nlabel)->u.fld[4]).rtint);
  if ((note = find_reg_note (jump, REG_EQUAL, (rtx) 0)) != (rtx) 0)
    {
      if (nlabel && olabel)
 {
   rtx dest = (((note)->u.fld[0]).rtx1);
   if (((enum rtx_code) (dest)->code) == IF_THEN_ELSE)
     {
       if (((enum rtx_code) ((((dest)->u.fld[1]).rtx1))->code) == LABEL_REF
    && ((((((dest)->u.fld[1]).rtx1))->u.fld[0]).rtx1) == olabel)
  ((((((dest)->u.fld[1]).rtx1))->u.fld[0]).rtx1) = nlabel;
       if (((enum rtx_code) ((((dest)->u.fld[2]).rtx1))->code) == LABEL_REF
    && ((((((dest)->u.fld[2]).rtx1))->u.fld[0]).rtx1) == olabel)
  ((((((dest)->u.fld[2]).rtx1))->u.fld[0]).rtx1) = nlabel;
     }
   else
     remove_note (jump, note);
 }
      else
        remove_note (jump, note);
    }
  if (olabel && nlabel
      && (((olabel)->u.fld[2]).rtx1)
      && ((enum rtx_code) ((((olabel)->u.fld[2]).rtx1))->code) == NOTE
      && ((((((olabel)->u.fld[2]).rtx1))->u.fld[5]).rtint) == NOTE_INSN_FUNCTION_END)
    emit_note_after (NOTE_INSN_FUNCTION_END, nlabel);
  if (olabel && --(((olabel)->u.fld[4]).rtint) == 0 && delete_unused
      && (((olabel)->u.fld[0]).rtint))
    delete_related_insns (olabel);
  return 1;
}
static void
invert_exp_1 (rtx insn)
{
  enum rtx_code code;
  rtx x = pc_set (insn);
  if (!x)
    abort ();
  x = (((x)->u.fld[1]).rtx1);
  code = ((enum rtx_code) (x)->code);
  if (code == IF_THEN_ELSE)
    {
      rtx comp = (((x)->u.fld[0]).rtx1);
      rtx tem;
      enum rtx_code reversed_code;
      reversed_code = reversed_comparison_code (comp, insn);
      if (reversed_code != UNKNOWN)
 {
   validate_change (insn, &(((x)->u.fld[0]).rtx1),
      gen_rtx_fmt_ee (reversed_code,
        ((enum machine_mode) (comp)->mode), (((comp)->u.fld[0]).rtx1),
        (((comp)->u.fld[1]).rtx1)),
      1);
   return;
 }
      tem = (((x)->u.fld[1]).rtx1);
      validate_change (insn, &(((x)->u.fld[1]).rtx1), (((x)->u.fld[2]).rtx1), 1);
      validate_change (insn, &(((x)->u.fld[2]).rtx1), tem, 1);
    }
  else
    abort ();
}
static int
invert_exp (rtx insn)
{
  invert_exp_1 (insn);
  if (num_validated_changes () == 0)
    return 0;
  return apply_change_group ();
}
int
invert_jump_1 (rtx jump, rtx nlabel)
{
  int ochanges;
  ochanges = num_validated_changes ();
  invert_exp_1 (jump);
  if (num_validated_changes () == ochanges)
    return 0;
  return redirect_jump_1 (jump, nlabel);
}
int
invert_jump (rtx jump, rtx nlabel, int delete_unused)
{
  if (! invert_exp (jump))
    return 0;
  if (redirect_jump (jump, nlabel, delete_unused))
    {
      rtx note = find_reg_note (jump, REG_EQUAL, (rtx) 0);
      if (note)
 remove_note (jump, note);
      invert_br_probabilities (jump);
      return 1;
    }
  if (! invert_exp (jump))
    abort ();
  return 0;
}
int
rtx_renumbered_equal_p (rtx x, rtx y)
{
  int i;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt;
  if (x == y)
    return 1;
  if ((code == REG || (code == SUBREG && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)))
      && ((((enum rtx_code) (y)->code) == REG) || (((enum rtx_code) (y)->code) == SUBREG
      && (((enum rtx_code) ((((y)->u.fld[0]).rtx1))->code) == REG))))
    {
      int reg_x = -1, reg_y = -1;
      int byte_x = 0, byte_y = 0;
      if (((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode))
 return 0;
      if (reg_renumber == 0)
 return rtx_equal_p (x, y);
      if (code == SUBREG)
 {
   reg_x = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
   byte_x = (((x)->u.fld[1]).rtuint);
   if (reg_renumber[reg_x] >= 0)
     {
       reg_x = subreg_regno_offset (reg_renumber[reg_x],
        ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
        byte_x,
        ((enum machine_mode) (x)->mode));
       byte_x = 0;
     }
 }
      else
 {
   reg_x = (((x)->u.fld[0]).rtuint);
   if (reg_renumber[reg_x] >= 0)
     reg_x = reg_renumber[reg_x];
 }
      if (((enum rtx_code) (y)->code) == SUBREG)
 {
   reg_y = ((((((y)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
   byte_y = (((y)->u.fld[1]).rtuint);
   if (reg_renumber[reg_y] >= 0)
     {
       reg_y = subreg_regno_offset (reg_renumber[reg_y],
        ((enum machine_mode) ((((y)->u.fld[0]).rtx1))->mode),
        byte_y,
        ((enum machine_mode) (y)->mode));
       byte_y = 0;
     }
 }
      else
 {
   reg_y = (((y)->u.fld[0]).rtuint);
   if (reg_renumber[reg_y] >= 0)
     reg_y = reg_renumber[reg_y];
 }
      return reg_x >= 0 && reg_x == reg_y && byte_x == byte_y;
    }
  if (code != ((enum rtx_code) (y)->code))
    return 0;
  switch (code)
    {
    case PC:
    case CC0:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
    case CONST_INT:
      return 0;
    case LABEL_REF:
      if ((((x))->volatil) || (((y))->volatil))
 return (((x)->u.fld[0]).rtx1) == (((y)->u.fld[0]).rtx1);
      return (next_real_insn ((((x)->u.fld[0]).rtx1))
       == next_real_insn ((((y)->u.fld[0]).rtx1)));
    case SYMBOL_REF:
      return (((x)->u.fld[0]).rtstr) == (((y)->u.fld[0]).rtstr);
    case CODE_LABEL:
      return 0;
    default:
      break;
    }
  if (((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode))
    return 0;
  if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~2)) == (RTX_COMM_COMPARE & (~2))) && code != PLUS)
    return ((rtx_renumbered_equal_p ((((x)->u.fld[0]).rtx1), (((y)->u.fld[0]).rtx1))
      && rtx_renumbered_equal_p ((((x)->u.fld[1]).rtx1), (((y)->u.fld[1]).rtx1)))
     || (rtx_renumbered_equal_p ((((x)->u.fld[0]).rtx1), (((y)->u.fld[1]).rtx1))
  && rtx_renumbered_equal_p ((((x)->u.fld[1]).rtx1), (((y)->u.fld[0]).rtx1))));
  else if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~2)) == (RTX_COMPARE & (~2))))
    return (rtx_renumbered_equal_p ((((x)->u.fld[0]).rtx1), (((y)->u.fld[0]).rtx1))
     && rtx_renumbered_equal_p ((((x)->u.fld[1]).rtx1), (((y)->u.fld[1]).rtx1)));
  else if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_UNARY))
    return rtx_renumbered_equal_p ((((x)->u.fld[0]).rtx1), (((y)->u.fld[0]).rtx1));
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      int j;
      switch (fmt[i])
 {
 case 'w':
   if (((x)->u.hwint[i]) != ((y)->u.hwint[i]))
     return 0;
   break;
 case 'i':
   if ((((x)->u.fld[i]).rtint) != (((y)->u.fld[i]).rtint))
     return 0;
   break;
 case 't':
   if ((((x)->u.fld[i]).rttree) != (((y)->u.fld[i]).rttree))
     return 0;
   break;
 case 's':
   if (strcmp ((((x)->u.fld[i]).rtstr), (((y)->u.fld[i]).rtstr)))
     return 0;
   break;
 case 'e':
   if (! rtx_renumbered_equal_p ((((x)->u.fld[i]).rtx1), (((y)->u.fld[i]).rtx1)))
     return 0;
   break;
 case 'u':
   if ((((x)->u.fld[i]).rtx1) != (((y)->u.fld[i]).rtx1))
     return 0;
 case '0':
   break;
 case 'E':
   if ((((((x)->u.fld[i]).rtvec1))->num_elem) != (((((y)->u.fld[i]).rtvec1))->num_elem))
     return 0;
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     if (!rtx_renumbered_equal_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), (((((y)->u.fld[i]).rtvec1))->elem[j])))
       return 0;
   break;
 default:
   abort ();
 }
    }
  return 1;
}
int
true_regnum (rtx x)
{
  if ((((enum rtx_code) (x)->code) == REG))
    {
      if ((((x)->u.fld[0]).rtuint) >= 53 && reg_renumber[(((x)->u.fld[0]).rtuint)] >= 0)
 return reg_renumber[(((x)->u.fld[0]).rtuint)];
      return (((x)->u.fld[0]).rtuint);
    }
  if (((enum rtx_code) (x)->code) == SUBREG)
    {
      int base = true_regnum ((((x)->u.fld[0]).rtx1));
      if (base >= 0 && base < 53)
 return base + subreg_regno_offset (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
        ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
        (((x)->u.fld[1]).rtuint), ((enum machine_mode) (x)->mode));
    }
  return -1;
}
unsigned int
reg_or_subregno (rtx reg)
{
  if ((((enum rtx_code) (reg)->code) == REG))
    return (((reg)->u.fld[0]).rtuint);
  if (((enum rtx_code) (reg)->code) == SUBREG)
    return ((((((reg)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
  abort ();
}
void
lhd_do_nothing (void)
{
}
void
lhd_do_nothing_t (tree t )
{
}
void
lhd_do_nothing_i (int i )
{
}
tree
lhd_do_nothing_iii_return_null_tree (int i ,
         int j ,
         int k )
{
  return (tree) ((void *)0);
}
void
lhd_do_nothing_f (struct function *f )
{
}
tree
lhd_return_tree (tree t)
{
  return t;
}
tree
lhd_return_null_tree_v (void)
{
  return (tree) ((void *)0);
}
tree
lhd_return_null_tree (tree t )
{
  return (tree) ((void *)0);
}
unsigned char
lhd_post_options (const char **pfilename )
{
  return 0;
}
void
lhd_print_tree_nothing (FILE *file ,
   tree node ,
   int indent1 )
{
}
int
lhd_safe_from_p (rtx x , tree exp )
{
  return 1;
}
int
lhd_unsafe_for_reeval (tree t )
{
  return -1;
}
int
lhd_staticp (tree exp )
{
  return 0;
}
unsigned char
lhd_warn_unused_global_decl (tree decl)
{
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL && ((decl)->decl.inline_flag))
    return 0;
  if (((enum tree_code) (decl)->common.code) == VAR_DECL && ((decl)->common.readonly_flag))
    return 0;
  if (((decl)->decl.in_system_header_flag))
    return 0;
  return 1;
}
void
lhd_set_decl_assembler_name (tree decl)
{
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL
      || (((enum tree_code) (decl)->common.code) == VAR_DECL
   && (((decl)->common.static_flag)
       || ((decl)->decl.external_flag)
       || ((decl)->common.public_flag))))
    {
      if (((decl)->common.public_flag)
   || ((decl)->decl.context) == (tree) ((void *)0)
   || (((enum tree_code) (((decl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL
       && ((((decl)->decl.context))->decl.uid) == 0))
 ((decl)->decl.assembler_name = (((decl)->decl.name)));
      else
 {
   const char *name = ((const char *) (((decl)->decl.name))->identifier.id.str);
   char *label;
   unsigned int uid;
   if (((enum tree_code) (((decl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL)
     uid = ((((decl)->decl.context))->decl.uid);
   else
     uid = ((decl)->decl.uid);
   do { const char *const name_ = (name); char *const output_ = (label) = C_alloca(strlen (name_) + 32); sprintf (output_, "%s.%lu", name_, (unsigned long)(uid)); } while (0);
   ((decl)->decl.assembler_name = (get_identifier (label)));
 }
    }
  else
    abort ();
}
unsigned char
lhd_can_use_bit_fields_p (void)
{
  return 1;
}
void
lhd_clear_binding_stack (void)
{
  while (! lang_hooks.decls.global_bindings_p ())
    lang_hooks.decls.poplevel (0, 0, 0);
}
tree
lhd_type_promotes_to (tree type )
{
  abort ();
}
void
lhd_register_builtin_type (tree type ,
      const char* name )
{
}
void
lhd_incomplete_type_error (tree value1 , tree type)
{
  if (((enum tree_code) (type)->common.code) == ERROR_MARK)
    return;
  abort ();
}
long
lhd_get_alias_set (tree t )
{
  return -1;
}
long
hook_get_alias_set_0 (tree t )
{
  return 0;
}
rtx
lhd_expand_expr (tree t , rtx r ,
   enum machine_mode mm ,
   int em ,
   rtx *a )
{
  abort ();
}
int
lhd_expand_decl (tree t )
{
  return 0;
}
const char *
lhd_decl_printable_name (tree decl, int verbosity )
{
  return ((const char *) (((decl)->decl.name))->identifier.id.str);
}
int
lhd_types_compatible_p (tree x, tree y)
{
  return ((x)->type.main_variant) == ((y)->type.main_variant);
}
tree
lhd_tree_inlining_walk_subtrees (tree *tp ,
     int *subtrees ,
     walk_tree_fn func ,
     void *data ,
     void *htab )
{
  return (tree) ((void *)0);
}
int
lhd_tree_inlining_cannot_inline_tree_fn (tree *fnp)
{
  if (flag_really_no_inline
      && lookup_attribute ("always_inline", ((*fnp)->decl.attributes)) == ((void *)0))
    return 1;
  return 0;
}
int
lhd_tree_inlining_disregard_inline_limits (tree fn)
{
  if (lookup_attribute ("always_inline", ((fn)->decl.attributes)) != ((void *)0))
    return 1;
  return 0;
}
tree
lhd_tree_inlining_add_pending_fn_decls (void *vafnp , tree pfn)
{
  return pfn;
}
int
lhd_tree_inlining_auto_var_in_fn_p (tree var, tree fn)
{
  return ((tree_code_type[(int) (((enum tree_code) (var)->common.code))] == 'd') && ((var)->decl.context) == fn
   && (((((enum tree_code) (var)->common.code) == VAR_DECL || ((enum tree_code) (var)->common.code) == PARM_DECL)
        && ! ((var)->common.static_flag))
       || ((enum tree_code) (var)->common.code) == LABEL_DECL
       || ((enum tree_code) (var)->common.code) == RESULT_DECL));
}
tree
lhd_tree_inlining_copy_res_decl_for_inlining (tree res, tree fn, tree caller,
           void *dm ,
           int *ndp ,
           tree return_slot_addr )
{
  if (return_slot_addr)
    return build1_stat (INDIRECT_REF,((((return_slot_addr)->common.type))->common.type),return_slot_addr )
                      ;
  else
    return copy_decl_for_inlining (res, fn, caller);
}
int
lhd_tree_inlining_anon_aggr_type_p (tree t )
{
  return 0;
}
int
lhd_tree_inlining_start_inlining (tree fn )
{
  return 1;
}
void
lhd_tree_inlining_end_inlining (tree fn )
{
}
tree
lhd_tree_inlining_convert_parm_for_inlining (tree parm ,
          tree value1,
          tree fndecl ,
          int argnum )
{
  return value1;
}
unsigned char
lhd_tree_dump_dump_tree (void *di , tree t )
{
  return 0;
}
int
lhd_tree_dump_type_quals (tree t)
{
  return ((((t)->common.readonly_flag) * 0x1) | (((t)->common.volatile_flag) * 0x2) | (((t)->type.restrict_flag) * 0x4));
}
tree
lhd_expr_size (tree exp)
{
  if (tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'd'
      && ((exp)->decl.size_unit) != 0)
    return ((exp)->decl.size_unit);
  else
    return size_in_bytes (((exp)->common.type));
}
int
lhd_gimplify_expr (tree *expr_p , tree *pre_p ,
     tree *post_p )
{
  return GS_UNHANDLED;
}
size_t
lhd_tree_size (enum tree_code c )
{
  abort ();
  return 0;
}
unsigned char
lhd_decl_ok_for_sibcall (tree decl )
{
  return 1;
}
void
write_global_declarations (void)
{
  tree globals = lang_hooks.decls.getdecls ();
  int len = list_length (globals);
  tree *vec = xmalloc (sizeof (tree) * len);
  int i;
  tree decl;
  for (i = 0, decl = globals; i < len; i++, decl = ((decl)->common.chain))
    vec[len - i - 1] = decl;
  wrapup_global_declarations (vec, len);
  check_global_declarations (vec, len);
  free (vec);
}
void
lhd_initialize_diagnostics (struct diagnostic_context *ctx )
{
}
void
lhd_print_error_function (diagnostic_context *context, const char *file)
{
  if (((context)->last_function != current_function_decl))
    {
      const char *old_prefix = context->printer->prefix;
      char *new_prefix = file ? file_name_as_prefix (file) : ((void *)0);
      pp_base_set_prefix ((context->printer), new_prefix);
      if (current_function_decl == ((void *)0))
 pp_printf (context->printer, "At top level:");
      else
 {
   if (((enum tree_code) (((current_function_decl)->common.type))->common.code) == METHOD_TYPE)
     pp_printf
       (context->printer, "In member function `%s':",
        lang_hooks.decl_printable_name (current_function_decl, 2));
   else
     pp_printf
       (context->printer, "In function `%s':",
        lang_hooks.decl_printable_name (current_function_decl, 2));
 }
      (context)->last_function = current_function_decl;
      pp_base_flush ((context->printer));
      context->printer->prefix = old_prefix;
      free ((char*) new_prefix);
    }
}
tree
lhd_callgraph_analyze_expr (tree *tp ,
       int *walk_subtrees ,
       tree decl )
{
  return ((void *)0);
}
tree
lhd_make_node (enum tree_code code)
{
  return make_node_stat (code );
}
static void compute_antinout_edge (sbitmap *, sbitmap *, sbitmap *, sbitmap *);
static void compute_earliest (struct edge_list *, int, sbitmap *, sbitmap *,
         sbitmap *, sbitmap *, sbitmap *);
static void compute_laterin (struct edge_list *, sbitmap *, sbitmap *,
        sbitmap *, sbitmap *);
static void compute_insert_delete (struct edge_list *edge_list, sbitmap *,
       sbitmap *, sbitmap *, sbitmap *, sbitmap *);
static void compute_farthest (struct edge_list *, int, sbitmap *, sbitmap *,
         sbitmap*, sbitmap *, sbitmap *);
static void compute_nearerout (struct edge_list *, sbitmap *, sbitmap *,
          sbitmap *, sbitmap *);
static void compute_rev_insert_delete (struct edge_list *edge_list, sbitmap *,
           sbitmap *, sbitmap *, sbitmap *,
           sbitmap *);
static void
compute_antinout_edge (sbitmap *antloc, sbitmap *transp, sbitmap *antin,
         sbitmap *antout)
{
  basic_block bb;
  edge e;
  basic_block *worklist, *qin, *qout, *qend;
  unsigned int qlen;
  qin = qout = worklist = xmalloc (sizeof (basic_block) * n_basic_blocks);
  sbitmap_vector_ones (antin, last_basic_block);
  for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
    {
      *qin++ = bb;
      bb->aux = bb;
    }
  qin = worklist;
  qend = &worklist[n_basic_blocks];
  qlen = n_basic_blocks;
  for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
    e->src->aux = EXIT_BLOCK_PTR;
  while (qlen)
    {
      bb = *qout++;
      qlen--;
      if (qout >= qend)
 qout = worklist;
      if (bb->aux == EXIT_BLOCK_PTR)
 sbitmap_zero (antout[bb->index]);
      else
 {
   bb->aux = ((void *)0);
   sbitmap_intersection_of_succs (antout[bb->index], antin, bb->index);
 }
      if (sbitmap_a_or_b_and_c_cg (antin[bb->index], antloc[bb->index],
       transp[bb->index], antout[bb->index]))
 for (e = bb->pred; e; e = e->pred_next)
   if (!e->src->aux && e->src != ENTRY_BLOCK_PTR)
     {
       *qin++ = e->src;
       e->src->aux = e;
       qlen++;
       if (qin >= qend)
  qin = worklist;
     }
    }
  clear_aux_for_edges ();
  clear_aux_for_blocks ();
  free (worklist);
}
static void
compute_earliest (struct edge_list *edge_list, int n_exprs, sbitmap *antin,
    sbitmap *antout, sbitmap *avout, sbitmap *kill,
    sbitmap *earliest)
{
  sbitmap difference, temp_bitmap;
  int x, num_edges;
  basic_block pred, succ;
  num_edges = ((edge_list)->num_edges);
  difference = sbitmap_alloc (n_exprs);
  temp_bitmap = sbitmap_alloc (n_exprs);
  for (x = 0; x < num_edges; x++)
    {
      pred = ((edge_list)->index_to_edge[(x)]->src);
      succ = ((edge_list)->index_to_edge[(x)]->dest);
      if (pred == ENTRY_BLOCK_PTR)
 sbitmap_copy (earliest[x], antin[succ->index]);
      else
 {
   if (succ == EXIT_BLOCK_PTR)
     sbitmap_zero (earliest[x]);
   else
     {
       sbitmap_difference (difference, antin[succ->index],
      avout[pred->index]);
       sbitmap_not (temp_bitmap, antout[pred->index]);
       sbitmap_a_and_b_or_c (earliest[x], difference,
        kill[pred->index], temp_bitmap);
     }
 }
    }
  free(temp_bitmap);
  free(difference);
}
static void
compute_laterin (struct edge_list *edge_list, sbitmap *earliest,
   sbitmap *antloc, sbitmap *later, sbitmap *laterin)
{
  int num_edges, i;
  edge e;
  basic_block *worklist, *qin, *qout, *qend, bb;
  unsigned int qlen;
  num_edges = ((edge_list)->num_edges);
  qin = qout = worklist
    = xmalloc (sizeof (basic_block) * (n_basic_blocks + 1));
  for (i = 0; i < num_edges; i++)
    ((edge_list)->index_to_edge[(i)])->aux = (void *) (size_t) i;
  sbitmap_vector_ones (later, num_edges);
  for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
    sbitmap_copy (later[(size_t) e->aux], earliest[(size_t) e->aux]);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      *qin++ = bb;
      bb->aux = bb;
    }
  qin = worklist;
  qend = &worklist[n_basic_blocks];
  qlen = n_basic_blocks;
  while (qlen)
    {
      bb = *qout++;
      bb->aux = ((void *)0);
      qlen--;
      if (qout >= qend)
 qout = worklist;
      sbitmap_ones (laterin[bb->index]);
      for (e = bb->pred; e != ((void *)0); e = e->pred_next)
 sbitmap_a_and_b (laterin[bb->index], laterin[bb->index], later[(size_t)e->aux]);
      for (e = bb->succ; e != ((void *)0); e = e->succ_next)
 if (sbitmap_union_of_diff_cg (later[(size_t) e->aux],
          earliest[(size_t) e->aux],
          laterin[e->src->index],
          antloc[e->src->index])
     && e->dest != EXIT_BLOCK_PTR && e->dest->aux == 0)
   {
     *qin++ = e->dest;
     e->dest->aux = e;
     qlen++;
     if (qin >= qend)
       qin = worklist;
   }
    }
  sbitmap_ones (laterin[last_basic_block]);
  for (e = EXIT_BLOCK_PTR->pred; e != ((void *)0); e = e->pred_next)
    sbitmap_a_and_b (laterin[last_basic_block],
       laterin[last_basic_block],
       later[(size_t) e->aux]);
  clear_aux_for_edges ();
  free (worklist);
}
static void
compute_insert_delete (struct edge_list *edge_list, sbitmap *antloc,
         sbitmap *later, sbitmap *laterin, sbitmap *insert,
         sbitmap *delete)
{
  int x;
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    sbitmap_difference (delete[bb->index], antloc[bb->index], laterin[bb->index]);
  for (x = 0; x < ((edge_list)->num_edges); x++)
    {
      basic_block b = ((edge_list)->index_to_edge[(x)]->dest);
      if (b == EXIT_BLOCK_PTR)
 sbitmap_difference (insert[x], later[x], laterin[last_basic_block]);
      else
 sbitmap_difference (insert[x], later[x], laterin[b->index]);
    }
}
struct edge_list *
pre_edge_lcm (FILE *file , int n_exprs, sbitmap *transp,
       sbitmap *avloc, sbitmap *antloc, sbitmap *kill,
       sbitmap **insert, sbitmap **delete)
{
  sbitmap *antin, *antout, *earliest;
  sbitmap *avin, *avout;
  sbitmap *later, *laterin;
  struct edge_list *edge_list;
  int num_edges;
  edge_list = create_edge_list ();
  num_edges = ((edge_list)->num_edges);
  avin = sbitmap_vector_alloc (last_basic_block, n_exprs);
  avout = sbitmap_vector_alloc (last_basic_block, n_exprs);
  compute_available (avloc, kill, avout, avin);
  free(avin);
  antin = sbitmap_vector_alloc (last_basic_block, n_exprs);
  antout = sbitmap_vector_alloc (last_basic_block, n_exprs);
  compute_antinout_edge (antloc, transp, antin, antout);
  earliest = sbitmap_vector_alloc (num_edges, n_exprs);
  compute_earliest (edge_list, n_exprs, antin, antout, avout, kill, earliest);
  free(antout);
  free(antin);
  free(avout);
  later = sbitmap_vector_alloc (num_edges, n_exprs);
  laterin = sbitmap_vector_alloc (last_basic_block + 1, n_exprs);
  compute_laterin (edge_list, earliest, antloc, later, laterin);
  free(earliest);
  *insert = sbitmap_vector_alloc (num_edges, n_exprs);
  *delete = sbitmap_vector_alloc (last_basic_block, n_exprs);
  compute_insert_delete (edge_list, antloc, later, laterin, *insert, *delete);
  free(laterin);
  free(later);
  return edge_list;
}
void
compute_available (sbitmap *avloc, sbitmap *kill, sbitmap *avout,
     sbitmap *avin)
{
  edge e;
  basic_block *worklist, *qin, *qout, *qend, bb;
  unsigned int qlen;
  qin = qout = worklist = xmalloc (sizeof (basic_block) * n_basic_blocks);
  sbitmap_vector_ones (avout, last_basic_block);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      *qin++ = bb;
      bb->aux = bb;
    }
  qin = worklist;
  qend = &worklist[n_basic_blocks];
  qlen = n_basic_blocks;
  for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
    e->dest->aux = ENTRY_BLOCK_PTR;
  while (qlen)
    {
      bb = *qout++;
      qlen--;
      if (qout >= qend)
 qout = worklist;
      if (bb->aux == ENTRY_BLOCK_PTR)
 sbitmap_zero (avin[bb->index]);
      else
 {
   bb->aux = ((void *)0);
   sbitmap_intersection_of_preds (avin[bb->index], avout, bb->index);
 }
      if (sbitmap_union_of_diff_cg (avout[bb->index], avloc[bb->index], avin[bb->index], kill[bb->index]))
 for (e = bb->succ; e; e = e->succ_next)
   if (!e->dest->aux && e->dest != EXIT_BLOCK_PTR)
     {
       *qin++ = e->dest;
       e->dest->aux = e;
       qlen++;
       if (qin >= qend)
  qin = worklist;
     }
    }
  clear_aux_for_edges ();
  clear_aux_for_blocks ();
  free (worklist);
}
static void
compute_farthest (struct edge_list *edge_list, int n_exprs,
    sbitmap *st_avout, sbitmap *st_avin, sbitmap *st_antin,
    sbitmap *kill, sbitmap *farthest)
{
  sbitmap difference, temp_bitmap;
  int x, num_edges;
  basic_block pred, succ;
  num_edges = ((edge_list)->num_edges);
  difference = sbitmap_alloc (n_exprs);
  temp_bitmap = sbitmap_alloc (n_exprs);
  for (x = 0; x < num_edges; x++)
    {
      pred = ((edge_list)->index_to_edge[(x)]->src);
      succ = ((edge_list)->index_to_edge[(x)]->dest);
      if (succ == EXIT_BLOCK_PTR)
 sbitmap_copy (farthest[x], st_avout[pred->index]);
      else
 {
   if (pred == ENTRY_BLOCK_PTR)
     sbitmap_zero (farthest[x]);
   else
     {
       sbitmap_difference (difference, st_avout[pred->index],
      st_antin[succ->index]);
       sbitmap_not (temp_bitmap, st_avin[succ->index]);
       sbitmap_a_and_b_or_c (farthest[x], difference,
        kill[succ->index], temp_bitmap);
     }
 }
    }
  free(temp_bitmap);
  free(difference);
}
static void
compute_nearerout (struct edge_list *edge_list, sbitmap *farthest,
     sbitmap *st_avloc, sbitmap *nearer, sbitmap *nearerout)
{
  int num_edges, i;
  edge e;
  basic_block *worklist, *tos, bb;
  num_edges = ((edge_list)->num_edges);
  tos = worklist = xmalloc (sizeof (basic_block) * (n_basic_blocks + 1));
  for (i = 0; i < num_edges; i++)
    ((edge_list)->index_to_edge[(i)])->aux = (void *) (size_t) i;
  sbitmap_vector_ones (nearer, num_edges);
  for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
    sbitmap_copy (nearer[(size_t)e->aux], farthest[(size_t)e->aux]);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      *tos++ = bb;
      bb->aux = bb;
    }
  while (tos != worklist)
    {
      bb = *--tos;
      bb->aux = ((void *)0);
      sbitmap_ones (nearerout[bb->index]);
      for (e = bb->succ; e != ((void *)0); e = e->succ_next)
 sbitmap_a_and_b (nearerout[bb->index], nearerout[bb->index],
    nearer[(size_t) e->aux]);
      for (e = bb->pred; e != ((void *)0); e = e->pred_next)
 if (sbitmap_union_of_diff_cg (nearer[(size_t) e->aux],
          farthest[(size_t) e->aux],
          nearerout[e->dest->index],
          st_avloc[e->dest->index])
     && e->src != ENTRY_BLOCK_PTR && e->src->aux == 0)
   {
     *tos++ = e->src;
     e->src->aux = e;
   }
    }
  sbitmap_ones (nearerout[last_basic_block]);
  for (e = ENTRY_BLOCK_PTR->succ; e != ((void *)0); e = e->succ_next)
    sbitmap_a_and_b (nearerout[last_basic_block],
       nearerout[last_basic_block],
       nearer[(size_t) e->aux]);
  clear_aux_for_edges ();
  free (tos);
}
static void
compute_rev_insert_delete (struct edge_list *edge_list, sbitmap *st_avloc,
      sbitmap *nearer, sbitmap *nearerout,
      sbitmap *insert, sbitmap *delete)
{
  int x;
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    sbitmap_difference (delete[bb->index], st_avloc[bb->index], nearerout[bb->index]);
  for (x = 0; x < ((edge_list)->num_edges); x++)
    {
      basic_block b = ((edge_list)->index_to_edge[(x)]->src);
      if (b == ENTRY_BLOCK_PTR)
 sbitmap_difference (insert[x], nearer[x], nearerout[last_basic_block]);
      else
 sbitmap_difference (insert[x], nearer[x], nearerout[b->index]);
    }
}
struct edge_list *
pre_edge_rev_lcm (FILE *file , int n_exprs, sbitmap *transp,
    sbitmap *st_avloc, sbitmap *st_antloc, sbitmap *kill,
    sbitmap **insert, sbitmap **delete)
{
  sbitmap *st_antin, *st_antout;
  sbitmap *st_avout, *st_avin, *farthest;
  sbitmap *nearer, *nearerout;
  struct edge_list *edge_list;
  int num_edges;
  edge_list = create_edge_list ();
  num_edges = ((edge_list)->num_edges);
  st_antin = sbitmap_vector_alloc (last_basic_block, n_exprs);
  st_antout = sbitmap_vector_alloc (last_basic_block, n_exprs);
  sbitmap_vector_zero (st_antin, last_basic_block);
  sbitmap_vector_zero (st_antout, last_basic_block);
  compute_antinout_edge (st_antloc, transp, st_antin, st_antout);
  st_avout = sbitmap_vector_alloc (last_basic_block, n_exprs);
  st_avin = sbitmap_vector_alloc (last_basic_block, n_exprs);
  compute_available (st_avloc, kill, st_avout, st_avin);
  farthest = sbitmap_vector_alloc (num_edges, n_exprs);
  compute_farthest (edge_list, n_exprs, st_avout, st_avin, st_antin,
      kill, farthest);
  free(st_antin);
  free(st_antout);
  free(st_avin);
  free(st_avout);
  nearer = sbitmap_vector_alloc (num_edges, n_exprs);
  nearerout = sbitmap_vector_alloc (last_basic_block + 1, n_exprs);
  compute_nearerout (edge_list, farthest, st_avloc, nearer, nearerout);
  free(farthest);
  *insert = sbitmap_vector_alloc (num_edges, n_exprs);
  *delete = sbitmap_vector_alloc (last_basic_block, n_exprs);
  compute_rev_insert_delete (edge_list, st_avloc, nearer, nearerout,
        *insert, *delete);
  free(nearerout);
  free(nearer);
  return edge_list;
}
struct seginfo
{
  int mode;
  rtx insn_ptr;
  int bbnum;
  struct seginfo *next;
  HARD_REG_SET regs_live;
};
struct bb_lcm_info
{
  struct seginfo *seginfo;
  int computing;
};
static sbitmap *antic;
static sbitmap *transp;
static sbitmap *comp;
static sbitmap *delete;
static sbitmap *insert;
static struct seginfo * new_seginfo (int, rtx, int, HARD_REG_SET);
static void add_seginfo (struct bb_lcm_info *, struct seginfo *);
static void reg_dies_lcm (rtx, HARD_REG_SET);
static void reg_becomes_live_lcm (rtx, rtx, void *);
static void make_preds_opaque (basic_block, int);
static struct seginfo *
new_seginfo (int mode, rtx insn, int bb, HARD_REG_SET regs_live)
{
  struct seginfo *ptr;
  ptr = xmalloc (sizeof (struct seginfo));
  ptr->mode = mode;
  ptr->insn_ptr = insn;
  ptr->bbnum = bb;
  ptr->next = ((void *)0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (ptr->regs_live), *scan_fp_ = (regs_live); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  return ptr;
}
static void
add_seginfo (struct bb_lcm_info *head, struct seginfo *info)
{
  struct seginfo *ptr;
  if (head->seginfo == ((void *)0))
    head->seginfo = info;
  else
    {
      ptr = head->seginfo;
      while (ptr->next != ((void *)0))
 ptr = ptr->next;
      ptr->next = info;
    }
}
static void
make_preds_opaque (basic_block b, int j)
{
  edge e;
  for (e = b->pred; e; e = e->pred_next)
    {
      basic_block pb = e->src;
      if (e->aux || ! ((transp[pb->index])->elms [(j) / ((unsigned) (8 * 4))] >> (j) % ((unsigned) (8 * 4)) & 1))
 continue;
      ((transp[pb->index])->elms [(j) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (j) % ((unsigned) (8 * 4))));
      make_preds_opaque (pb, j);
    }
}
static void
reg_dies_lcm (rtx reg, HARD_REG_SET live)
{
  int regno, nregs;
  if (!(((enum rtx_code) (reg)->code) == REG))
    return;
  regno = (((reg)->u.fld[0]).rtuint);
  if (regno < 53)
    for (nregs = hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)] - 1; nregs >= 0;
  nregs--)
      ((live)[(regno + nregs) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((regno + nregs) % ((unsigned) (8 * 4)))));
}
static void
reg_becomes_live_lcm (rtx reg, rtx setter , void *live)
{
  int regno, nregs;
  if (((enum rtx_code) (reg)->code) == SUBREG)
    reg = (((reg)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (reg)->code) == REG))
    return;
  regno = (((reg)->u.fld[0]).rtuint);
  if (regno < 53)
    for (nregs = hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)] - 1; nregs >= 0;
  nregs--)
      ((* (HARD_REG_SET *) live)[(regno + nregs) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno + nregs) % ((unsigned) (8 * 4))));
}
int
optimize_mode_switching (FILE *file)
{
  rtx insn;
  int e;
  basic_block bb;
  int need_commit = 0;
  sbitmap *kill;
  struct edge_list *edge_list;
  static const int num_modes[] = { FP_CW_ANY };
  int entity_map[(sizeof (num_modes) / sizeof ((num_modes)[0]))];
  struct bb_lcm_info *bb_info[(sizeof (num_modes) / sizeof ((num_modes)[0]))];
  int i, j;
  int n_entities;
  int max_num_modes = 0;
  unsigned char emited = 0;
  basic_block post_entry , pre_exit ;
  clear_bb_flags ();
  for (e = (sizeof (num_modes) / sizeof ((num_modes)[0])) - 1, n_entities = 0; e >= 0; e--)
    if ((cfun->machine->optimize_mode_switching))
      {
 int entry_exit_extra = 0;
 bb_info[n_entities]
   = xcalloc (last_basic_block + entry_exit_extra, sizeof **bb_info);
 entity_map[n_entities++] = e;
 if (num_modes[e] > max_num_modes)
   max_num_modes = num_modes[e];
      }
  if (! n_entities)
    return 0;
  antic = sbitmap_vector_alloc (last_basic_block, n_entities);
  transp = sbitmap_vector_alloc (last_basic_block, n_entities);
  comp = sbitmap_vector_alloc (last_basic_block, n_entities);
  sbitmap_vector_ones (transp, last_basic_block);
  for (j = n_entities - 1; j >= 0; j--)
    {
      int e = entity_map[j];
      int no_mode = num_modes[e];
      struct bb_lcm_info *info = bb_info[j];
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   struct seginfo *ptr;
   int last_mode = no_mode;
   HARD_REG_SET live_now;
   do { do { HARD_REG_ELT_TYPE *scan_tp_ = (live_now); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&live_now, bb->global_live_at_start); } while (0)
                                ;
   for (insn = (bb)->head_;
        insn != ((void *)0) && insn != ((((bb)->end_)->u.fld[2]).rtx1);
        insn = (((insn)->u.fld[2]).rtx1))
     {
       if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
  {
    int mode = (((enum rtx_code) (insn)->code) == CALL_INSN || (((enum rtx_code) (insn)->code) == INSN && (asm_noperands ((((insn)->u.fld[5]).rtx1)) >= 0 || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ASM_INPUT)) ? FP_CW_UNINITIALIZED : ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)) < 0 || get_attr_type (insn) != TYPE_FISTP ? FP_CW_ANY : FP_CW_STORED);
    rtx link;
    if (mode != no_mode && mode != last_mode)
      {
        last_mode = mode;
        ptr = new_seginfo (mode, insn, bb->index, live_now);
        add_seginfo (info + bb->index, ptr);
        ((transp[bb->index])->elms [(j) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (j) % ((unsigned) (8 * 4))));
      }
    for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
      if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEAD)
        reg_dies_lcm ((((link)->u.fld[0]).rtx1), live_now);
    note_stores ((((insn)->u.fld[5]).rtx1), reg_becomes_live_lcm, &live_now);
    for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
      if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_UNUSED)
        reg_dies_lcm ((((link)->u.fld[0]).rtx1), live_now);
  }
     }
   info[bb->index].computing = last_mode;
   if (last_mode == no_mode)
     {
       ptr = new_seginfo (no_mode, (bb)->end_, bb->index, live_now);
       add_seginfo (info + bb->index, ptr);
     }
 }
    }
  kill = sbitmap_vector_alloc (last_basic_block, n_entities);
  for (i = 0; i < max_num_modes; i++)
    {
      int current_mode[(sizeof (num_modes) / sizeof ((num_modes)[0]))];
      sbitmap_vector_zero (antic, last_basic_block);
      sbitmap_vector_zero (comp, last_basic_block);
      for (j = n_entities - 1; j >= 0; j--)
 {
   int m = current_mode[j] = (i);
   struct bb_lcm_info *info = bb_info[j];
   for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
     {
       if (info[bb->index].seginfo->mode == m)
  ((antic[bb->index])->elms [(j) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (j) % ((unsigned) (8 * 4)));
       if (info[bb->index].computing == m)
  ((comp[bb->index])->elms [(j) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (j) % ((unsigned) (8 * 4)));
     }
 }
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 sbitmap_not (kill[bb->index], transp[bb->index]);
      edge_list = pre_edge_lcm (file, 1, transp, comp, antic,
    kill, &insert, &delete);
      for (j = n_entities - 1; j >= 0; j--)
 {
   int no_mode = num_modes[entity_map[j]];
   for (e = ((edge_list)->num_edges) - 1; e >= 0; e--)
     {
       edge eg = ((edge_list)->index_to_edge[(e)]);
       int mode;
       basic_block src_bb;
       HARD_REG_SET live_at_edge;
       rtx mode_set;
       eg->aux = 0;
       if (! ((insert[e])->elms [(j) / ((unsigned) (8 * 4))] >> (j) % ((unsigned) (8 * 4)) & 1))
  continue;
       eg->aux = (void *)1;
       mode = current_mode[j];
       src_bb = eg->src;
       do { do { HARD_REG_ELT_TYPE *scan_tp_ = (live_at_edge); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&live_at_edge, src_bb->global_live_at_end); } while (0)
                                      ;
       start_sequence ();
       ((mode) == FP_CW_STORED ? emit_i387_cw_initialization (assign_386_stack_local (HImode, 1), assign_386_stack_local (HImode, 2)) : 0);
       mode_set = get_insns ();
       end_sequence ();
       if (mode_set == (rtx) 0)
  continue;
       if (eg->flags & 2)
  {
    emited = 1;
    if (((enum rtx_code) ((src_bb)->end_)->code) == JUMP_INSN)
      emit_insn_before (mode_set, (src_bb)->end_);
    else if (((enum rtx_code) ((src_bb)->end_)->code) == INSN)
      emit_insn_after (mode_set, (src_bb)->end_);
    else
      abort ();
    bb_info[j][src_bb->index].computing = mode;
    ((transp[src_bb->index])->elms [(j) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (j) % ((unsigned) (8 * 4))));
  }
       else
  {
    need_commit = 1;
    insert_insn_on_edge (mode_set, eg);
  }
     }
   for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
     if (((delete[bb->index])->elms [(j) / ((unsigned) (8 * 4))] >> (j) % ((unsigned) (8 * 4)) & 1))
       {
  make_preds_opaque (bb, j);
  bb_info[j][bb->index].seginfo->mode = no_mode;
       }
 }
      clear_aux_for_edges ();
      free_edge_list (edge_list);
    }
  for (j = n_entities - 1; j >= 0; j--)
    {
      int no_mode = num_modes[entity_map[j]];
      for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
 {
   struct seginfo *ptr, *next;
   for (ptr = bb_info[j][bb->index].seginfo; ptr; ptr = next)
     {
       next = ptr->next;
       if (ptr->mode != no_mode)
  {
    rtx mode_set;
    start_sequence ();
    ((ptr->mode) == FP_CW_STORED ? emit_i387_cw_initialization (assign_386_stack_local (HImode, 1), assign_386_stack_local (HImode, 2)) : 0);
    mode_set = get_insns ();
    end_sequence ();
    if (mode_set == (rtx) 0)
      continue;
    emited = 1;
    if (((enum rtx_code) (ptr->insn_ptr)->code) == NOTE
        && ((((ptr->insn_ptr)->u.fld[5]).rtint)
     == NOTE_INSN_BASIC_BLOCK))
      emit_insn_after (mode_set, ptr->insn_ptr);
    else
      emit_insn_before (mode_set, ptr->insn_ptr);
  }
       free (ptr);
     }
 }
      free (bb_info[j]);
    }
  free(kill);
  free(antic);
  free(transp);
  free(comp);
  free(delete);
  free(insert);
  if (need_commit)
    commit_edge_insertions ();
  if (!need_commit && !emited)
    return 0;
  max_regno = max_reg_num ();
  allocate_reg_info (max_regno, 0, 0);
  update_life_info_in_dirty_blocks (UPDATE_LIFE_GLOBAL_RM_NOTES,
        (1 | 8
         | 16));
  return 1;
}
static void free_list (rtx *, rtx *);
static rtx unused_insn_list;
static rtx unused_expr_list;
static void
free_list (rtx *listp, rtx *unused_listp)
{
  rtx link, prev_link;
  prev_link = *listp;
  link = (((prev_link)->u.fld[1]).rtx1);
  while (link)
    {
      prev_link = link;
      link = (((link)->u.fld[1]).rtx1);
    }
  (((prev_link)->u.fld[1]).rtx1) = *unused_listp;
  *unused_listp = *listp;
  *listp = 0;
}
rtx
alloc_INSN_LIST (rtx val, rtx next)
{
  rtx r;
  if (unused_insn_list)
    {
      r = unused_insn_list;
      unused_insn_list = (((r)->u.fld[1]).rtx1);
      (((r)->u.fld[0]).rtx1) = val;
      (((r)->u.fld[1]).rtx1) = next;
      ((r)->mode = ((enum machine_mode) (VOIDmode)));
    }
  else
    r = gen_rtx_fmt_ue (INSN_LIST, (VOIDmode), (val), (next));
  return r;
}
rtx
alloc_EXPR_LIST (int kind, rtx val, rtx next)
{
  rtx r;
  if (unused_expr_list)
    {
      r = unused_expr_list;
      unused_expr_list = (((r)->u.fld[1]).rtx1);
      (((r)->u.fld[0]).rtx1) = val;
      (((r)->u.fld[1]).rtx1) = next;
      ((r)->mode = ((enum machine_mode) (kind)));
    }
  else
    r = gen_rtx_fmt_ee (EXPR_LIST, (kind), (val), (next));
  return r;
}
void
free_EXPR_LIST_list (rtx *listp)
{
  if (*listp == 0)
    return;
  free_list (listp, &unused_expr_list);
}
void
free_INSN_LIST_list (rtx *listp)
{
  if (*listp == 0)
    return;
  free_list (listp, &unused_insn_list);
}
void
free_EXPR_LIST_node (rtx ptr)
{
  (((ptr)->u.fld[1]).rtx1) = unused_expr_list;
  unused_expr_list = ptr;
}
void
free_INSN_LIST_node (rtx ptr)
{
  (((ptr)->u.fld[1]).rtx1) = unused_insn_list;
  unused_insn_list = ptr;
}
const struct ggc_root_tab gt_ggc_rd_gt_lists_h[] = {
  { &unused_expr_list, 1, sizeof (unused_expr_list), ((void *)0), ((void *)0) },
  { &unused_insn_list, 1, sizeof (unused_insn_list), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static int next_qty;
struct qty
{
  int n_refs;
  int freq;
  int birth;
  int death;
  int size;
  int n_calls_crossed;
  int first_reg;
  enum reg_class min_class;
  enum reg_class alternate_class;
  enum machine_mode mode;
  short phys_reg;
};
static struct qty *qty;
static HARD_REG_SET *qty_phys_copy_sugg;
static HARD_REG_SET *qty_phys_sugg;
static short *qty_phys_num_copy_sugg;
static short *qty_phys_num_sugg;
static int *reg_next_in_qty;
static int *reg_qty;
static char *reg_offset_local;
short *reg_renumber;
static HARD_REG_SET regs_live;
static HARD_REG_SET *regs_live_at;
static int this_insn_number;
static rtx this_insn;
struct equivalence
{
  char replace;
  rtx replacement;
  rtx *src_p;
  int loop_depth;
  rtx init_insns;
};
static struct equivalence *reg_equiv;
static int recorded_label_ref;
static void alloc_qty (int, enum machine_mode, int, int);
static void validate_equiv_mem_from_store (rtx, rtx, void *);
static int validate_equiv_mem (rtx, rtx, rtx);
static int equiv_init_varies_p (rtx);
static int equiv_init_movable_p (rtx, int);
static int contains_replace_regs (rtx);
static int memref_referenced_p (rtx, rtx);
static int memref_used_between_p (rtx, rtx, rtx);
static void update_equiv_regs (void);
static void no_equiv (rtx, rtx, void *);
static void block_alloc (int);
static int qty_sugg_compare (int, int);
static int qty_sugg_compare_1 (const void *, const void *);
static int qty_compare (int, int);
static int qty_compare_1 (const void *, const void *);
static int combine_regs (rtx, rtx, int, int, rtx, int);
static int reg_meets_class_p (int, enum reg_class);
static void update_qty_class (int, int);
static void reg_is_set (rtx, rtx, void *);
static void reg_is_born (rtx, int);
static void wipe_dead_reg (rtx, int);
static int find_free_reg (enum reg_class, enum machine_mode, int, int, int,
     int, int);
static void mark_life (int, enum machine_mode, int);
static void post_mark_life (int, enum machine_mode, int, int, int);
static int no_conflict_p (rtx, rtx, rtx);
static int requires_inout (const char *);
static void
alloc_qty (int regno, enum machine_mode mode, int size, int birth)
{
  int qtyno = next_qty++;
  reg_qty[regno] = qtyno;
  reg_offset_local[regno] = 0;
  reg_next_in_qty[regno] = -1;
  qty[qtyno].first_reg = regno;
  qty[qtyno].size = size;
  qty[qtyno].mode = mode;
  qty[qtyno].birth = birth;
  qty[qtyno].n_calls_crossed = (((reg_n_info)->data.reg[regno])->calls_crossed);
  qty[qtyno].min_class = reg_preferred_class (regno);
  qty[qtyno].alternate_class = reg_alternate_class (regno);
  qty[qtyno].n_refs = (((reg_n_info)->data.reg[regno])->refs);
  qty[qtyno].freq = (((reg_n_info)->data.reg[regno])->freq);
}
int
local_alloc (void)
{
  int i;
  int max_qty;
  basic_block b;
  recorded_label_ref = 0;
  x86_order_regs_for_local_alloc ();
  if (optimize)
    update_equiv_regs ();
  max_qty = (max_regno - 53);
  qty = xmalloc (max_qty * sizeof (struct qty));
  qty_phys_copy_sugg = xmalloc (max_qty * sizeof (HARD_REG_SET));
  qty_phys_num_copy_sugg = xmalloc (max_qty * sizeof (short));
  qty_phys_sugg = xmalloc (max_qty * sizeof (HARD_REG_SET));
  qty_phys_num_sugg = xmalloc (max_qty * sizeof (short));
  reg_qty = xmalloc (max_regno * sizeof (int));
  reg_offset_local = xmalloc (max_regno * sizeof (char));
  reg_next_in_qty = xmalloc (max_regno * sizeof (int));
  for (i = 53; i < max_regno; i++)
    {
      if ((((reg_n_info)->data.reg[i])->basic_block1) >= 0 && (((reg_n_info)->data.reg[i])->deaths) == 1)
 reg_qty[i] = -2;
      else
 reg_qty[i] = -1;
    }
  next_qty = max_qty;
  for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = b->next_bb)
    {
      if (next_qty < 6)
 {
   for (i = 0; i < next_qty; i++)
     {
       do { HARD_REG_ELT_TYPE *scan_tp_ = (qty_phys_copy_sugg[i]); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
       qty_phys_num_copy_sugg[i] = 0;
       do { HARD_REG_ELT_TYPE *scan_tp_ = (qty_phys_sugg[i]); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
       qty_phys_num_sugg[i] = 0;
     }
 }
      else
 {
   memset ((qty_phys_copy_sugg), 0, (sizeof (*(qty_phys_copy_sugg))) * next_qty);;
   memset ((qty_phys_num_copy_sugg), 0, (sizeof (*(qty_phys_num_copy_sugg))) * next_qty);;
   memset ((qty_phys_sugg), 0, (sizeof (*(qty_phys_sugg))) * next_qty);;
   memset ((qty_phys_num_sugg), 0, (sizeof (*(qty_phys_num_sugg))) * next_qty);;
 }
      next_qty = 0;
      block_alloc (b->index);
    }
  free (qty);
  free (qty_phys_copy_sugg);
  free (qty_phys_num_copy_sugg);
  free (qty_phys_sugg);
  free (qty_phys_num_sugg);
  free (reg_qty);
  free (reg_offset_local);
  free (reg_next_in_qty);
  return recorded_label_ref;
}
static rtx equiv_mem;
static int equiv_mem_modified;
static void
validate_equiv_mem_from_store (rtx dest, rtx set ,
          void *data )
{
  if (((((enum rtx_code) (dest)->code) == REG)
       && reg_overlap_mentioned_p (dest, equiv_mem))
      || ((((enum rtx_code) (dest)->code) == MEM)
   && true_dependence (dest, VOIDmode, equiv_mem, rtx_varies_p)))
    equiv_mem_modified = 1;
}
static int
validate_equiv_mem (rtx start, rtx reg, rtx memref)
{
  rtx insn;
  rtx note;
  equiv_mem = memref;
  equiv_mem_modified = 0;
  if (side_effects_p (memref))
    return 0;
  for (insn = start; insn && ! equiv_mem_modified; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      if (find_reg_note (insn, REG_DEAD, reg))
 return 1;
      if (((enum rtx_code) (insn)->code) == CALL_INSN && ! (((memref))->unchanging)
   && ! (((insn))->unchanging))
 return 0;
      note_stores ((((insn)->u.fld[5]).rtx1), validate_equiv_mem_from_store, ((void *)0));
      for (note = (((insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
 if ((((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_INC
      || ((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD)
     && (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG)
     && reg_overlap_mentioned_p ((((note)->u.fld[0]).rtx1), memref))
   return 0;
    }
  return 0;
}
static int
equiv_init_varies_p (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  int i;
  const char *fmt;
  switch (code)
    {
    case MEM:
      return ! (((x))->unchanging) || equiv_init_varies_p ((((x)->u.fld[0]).rtx1));
    case QUEUED:
      return 1;
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
      return 0;
    case REG:
      return reg_equiv[(((x)->u.fld[0]).rtuint)].replace == 0 && rtx_varies_p (x, 0);
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 1;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    if (fmt[i] == 'e')
      {
 if (equiv_init_varies_p ((((x)->u.fld[i]).rtx1)))
   return 1;
      }
    else if (fmt[i] == 'E')
      {
 int j;
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   if (equiv_init_varies_p ((((((x)->u.fld[i]).rtvec1))->elem[j])))
     return 1;
      }
  return 0;
}
static int
equiv_init_movable_p (rtx x, int regno)
{
  int i, j;
  const char *fmt;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case SET:
      return equiv_init_movable_p ((((x)->u.fld[1]).rtx1), regno);
    case CC0:
    case CLOBBER:
      return 0;
    case PRE_INC:
    case PRE_DEC:
    case POST_INC:
    case POST_DEC:
    case PRE_MODIFY:
    case POST_MODIFY:
      return 0;
    case REG:
      return (reg_equiv[(((x)->u.fld[0]).rtuint)].loop_depth >= reg_equiv[regno].loop_depth
       && reg_equiv[(((x)->u.fld[0]).rtuint)].replace)
      || ((((reg_n_info)->data.reg[(((x)->u.fld[0]).rtuint)])->basic_block1) < 0 && ! rtx_varies_p (x, 0));
    case UNSPEC_VOLATILE:
      return 0;
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 0;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    switch (fmt[i])
      {
      case 'e':
 if (! equiv_init_movable_p ((((x)->u.fld[i]).rtx1), regno))
   return 0;
 break;
      case 'E':
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   if (! equiv_init_movable_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), regno))
     return 0;
 break;
      }
  return 1;
}
static int
contains_replace_regs (rtx x)
{
  int i, j;
  const char *fmt;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case CONST_INT:
    case CONST:
    case LABEL_REF:
    case SYMBOL_REF:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case PC:
    case CC0:
    case HIGH:
      return 0;
    case REG:
      return reg_equiv[(((x)->u.fld[0]).rtuint)].replace;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    switch (fmt[i])
      {
      case 'e':
 if (contains_replace_regs ((((x)->u.fld[i]).rtx1)))
   return 1;
 break;
      case 'E':
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   if (contains_replace_regs ((((((x)->u.fld[i]).rtvec1))->elem[j])))
     return 1;
 break;
      }
  return 0;
}
static int
memref_referenced_p (rtx memref, rtx x)
{
  int i, j;
  const char *fmt;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case CONST_INT:
    case CONST:
    case LABEL_REF:
    case SYMBOL_REF:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case PC:
    case CC0:
    case HIGH:
    case LO_SUM:
      return 0;
    case REG:
      return (reg_equiv[(((x)->u.fld[0]).rtuint)].replacement
       && memref_referenced_p (memref,
          reg_equiv[(((x)->u.fld[0]).rtuint)].replacement));
    case MEM:
      if (true_dependence (memref, VOIDmode, x, rtx_varies_p))
 return 1;
      break;
    case SET:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
 {
   if (memref_referenced_p (memref, ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1)))
     return 1;
 }
      else if (memref_referenced_p (memref, (((x)->u.fld[0]).rtx1)))
 return 1;
      return memref_referenced_p (memref, (((x)->u.fld[1]).rtx1));
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    switch (fmt[i])
      {
      case 'e':
 if (memref_referenced_p (memref, (((x)->u.fld[i]).rtx1)))
   return 1;
 break;
      case 'E':
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   if (memref_referenced_p (memref, (((((x)->u.fld[i]).rtvec1))->elem[j])))
     return 1;
 break;
      }
  return 0;
}
static int
memref_used_between_p (rtx memref, rtx start, rtx end)
{
  rtx insn;
  for (insn = (((start)->u.fld[2]).rtx1); insn != (((end)->u.fld[2]).rtx1);
       insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && memref_referenced_p (memref, (((insn)->u.fld[5]).rtx1)))
      return 1;
  return 0;
}
static void
update_equiv_regs (void)
{
  rtx insn;
  basic_block bb;
  int loop_depth;
  regset_head cleared_regs;
  int clear_regnos = 0;
  reg_equiv = xcalloc (max_regno, sizeof *reg_equiv);
  bitmap_initialize (&cleared_regs, 1);
  init_alias_analysis ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      loop_depth = bb->loop_depth;
      for (insn = (bb)->head_;
    insn != ((((bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 {
   rtx note;
   rtx set;
   rtx dest, src;
   int regno;
   if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     continue;
   for (note = (((insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
     if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_INC)
       no_equiv ((((note)->u.fld[0]).rtx1), note, ((void *)0));
   set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
   if (set == 0)
     {
       note_stores ((((insn)->u.fld[5]).rtx1), no_equiv, ((void *)0));
       continue;
     }
   else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL)
     {
       int i;
       for (i = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
  {
    rtx part = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]);
    if (part != set)
      note_stores (part, no_equiv, ((void *)0));
  }
     }
   dest = (((set)->u.fld[0]).rtx1);
   src = (((set)->u.fld[1]).rtx1);
   if ((((enum rtx_code) (dest)->code) == MEM) && (((enum rtx_code) (src)->code) == REG)
       && (regno = (((src)->u.fld[0]).rtuint)) >= 53
       && (((reg_n_info)->data.reg[regno])->basic_block1) >= 0
       && (((reg_n_info)->data.reg[regno])->sets) == 1
       && reg_equiv[regno].init_insns != 0
       && reg_equiv[regno].init_insns != (const_int_rtx[64])
       && ! find_reg_note ((((reg_equiv[regno].init_insns)->u.fld[0]).rtx1),
      REG_EQUIV, (rtx) 0)
       && ! contains_replace_regs ((((dest)->u.fld[0]).rtx1)))
     {
       rtx init_insn = (((reg_equiv[regno].init_insns)->u.fld[0]).rtx1);
       if (validate_equiv_mem (init_insn, src, dest)
    && ! memref_used_between_p (dest, init_insn, insn))
  (((init_insn)->u.fld[8]).rtx1)
    = gen_rtx_fmt_ee (EXPR_LIST, (REG_EQUIV), (dest), ((((init_insn)->u.fld[8]).rtx1)));
     }
   if (!(((enum rtx_code) (dest)->code) == REG)
       || (regno = (((dest)->u.fld[0]).rtuint)) < 53
       || reg_equiv[regno].init_insns == (const_int_rtx[64])
       || ((((reg_preferred_class (regno)) == AREG) || ((reg_preferred_class (regno)) == DREG) || ((reg_preferred_class (regno)) == CREG) || ((reg_preferred_class (regno)) == BREG) || ((reg_preferred_class (regno)) == AD_REGS) || ((reg_preferred_class (regno)) == SIREG) || ((reg_preferred_class (regno)) == DIREG) || ((reg_preferred_class (regno)) == FP_TOP_REG) || ((reg_preferred_class (regno)) == FP_SECOND_REG))
    && (((enum rtx_code) (src)->code) == MEM)))
     {
       note_stores (set, no_equiv, ((void *)0));
       continue;
     }
   note = find_reg_note (insn, REG_EQUAL, (rtx) 0);
   if (! note && ! rtx_varies_p (src, 0))
     note = set_unique_reg_note (insn, REG_EQUAL, src);
   if (note && ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == EXPR_LIST)
     note = (rtx) 0;
   if ((((reg_n_info)->data.reg[regno])->sets) != 1
       && (! note
    || rtx_varies_p ((((note)->u.fld[0]).rtx1), 0)
    || (reg_equiv[regno].replacement
        && ! rtx_equal_p ((((note)->u.fld[0]).rtx1),
     reg_equiv[regno].replacement))))
     {
       no_equiv (dest, set, ((void *)0));
       continue;
     }
   reg_equiv[regno].init_insns
     = gen_rtx_fmt_ue (INSN_LIST, (VOIDmode), (insn), (reg_equiv[regno].init_insns));
   if (note && ! rtx_varies_p ((((note)->u.fld[0]).rtx1), 0))
     ((note)->mode = ((enum machine_mode) REG_EQUIV));
   note = find_reg_note (insn, REG_EQUIV, (rtx) 0);
   if (note == 0 && (((reg_n_info)->data.reg[regno])->basic_block1) >= 0
       && (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == MEM)
       && validate_equiv_mem (insn, dest, (((set)->u.fld[1]).rtx1)))
     (((insn)->u.fld[8]).rtx1) = note = gen_rtx_fmt_ee (EXPR_LIST, (REG_EQUIV), ((((set)->u.fld[1]).rtx1)), ((((insn)->u.fld[8]).rtx1)))
                         ;
   if (note)
     {
       int regno = (((dest)->u.fld[0]).rtuint);
       if (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == LABEL_REF
    || (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == CONST
        && ((enum rtx_code) (((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == PLUS
        && (((enum rtx_code) ((((((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code)
     == LABEL_REF)))
  recorded_label_ref = 1;
       reg_equiv[regno].replacement = (((note)->u.fld[0]).rtx1);
       reg_equiv[regno].src_p = &(((set)->u.fld[1]).rtx1);
       reg_equiv[regno].loop_depth = loop_depth;
       if ((((reg_n_info)->data.reg[regno])->live_length) >= 0 && optimize)
  {
    (((reg_n_info)->data.reg[regno])->live_length) *= 2;
      if ((((reg_n_info)->data.reg[regno])->refs) == 2
   && (rtx_equal_p ((((note)->u.fld[0]).rtx1), src)
       || ! equiv_init_varies_p (src))
   && ((enum rtx_code) (insn)->code) == INSN
   && equiv_init_movable_p ((((insn)->u.fld[5]).rtx1), regno))
        reg_equiv[regno].replace = 1;
  }
     }
 }
    }
  for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
    {
      loop_depth = bb->loop_depth;
      for (insn = (bb)->end_;
    insn != ((((bb)->head_)->u.fld[1]).rtx1);
    insn = (((insn)->u.fld[1]).rtx1))
 {
   rtx link;
   if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     continue;
   for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
     {
       if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEAD
    && reg_mentioned_p ((((link)->u.fld[0]).rtx1), (((insn)->u.fld[5]).rtx1)))
  {
    int regno = ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
    rtx equiv_insn;
    if (! reg_equiv[regno].replace
        || reg_equiv[regno].loop_depth < loop_depth)
      continue;
    if (reg_equiv[regno].init_insns == (rtx) 0
        || (((reg_equiv[regno].init_insns)->u.fld[1]).rtx1) != (rtx) 0)
      abort ();
    equiv_insn = (((reg_equiv[regno].init_insns)->u.fld[0]).rtx1);
    if (can_throw_internal (equiv_insn))
      continue;
    if (asm_noperands ((((equiv_insn)->u.fld[5]).rtx1)) < 0
        && validate_replace_rtx ((cfun->emit->x_regno_reg_rtx)[regno],
            *(reg_equiv[regno].src_p), insn))
      {
        rtx equiv_link;
        rtx last_link;
        rtx note;
        for (last_link = link; (((last_link)->u.fld[1]).rtx1);
      last_link = (((last_link)->u.fld[1]).rtx1))
   ;
        equiv_link = (((equiv_insn)->u.fld[8]).rtx1);
        while (equiv_link)
   {
     note = equiv_link;
     equiv_link = (((equiv_link)->u.fld[1]).rtx1);
     if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD)
       {
         remove_note (equiv_insn, note);
         (((last_link)->u.fld[1]).rtx1) = note;
         (((note)->u.fld[1]).rtx1) = (rtx) 0;
         last_link = note;
       }
   }
        remove_death (regno, insn);
        (((reg_n_info)->data.reg[regno])->refs) = 0;
        (((reg_n_info)->data.reg[regno])->freq) = 0;
        delete_insn (equiv_insn);
        reg_equiv[regno].init_insns
   = (((reg_equiv[regno].init_insns)->u.fld[1]).rtx1);
      }
    else if ((((insn)->u.fld[1]).rtx1) != equiv_insn)
      {
        rtx new_insn;
        new_insn = emit_insn_before ((((equiv_insn)->u.fld[5]).rtx1), insn);
        (((new_insn)->u.fld[8]).rtx1) = (((equiv_insn)->u.fld[8]).rtx1);
        (((equiv_insn)->u.fld[8]).rtx1) = 0;
        (((new_insn)->u.fld[6]).rtint) = (((equiv_insn)->u.fld[6]).rtint);
        delete_insn (equiv_insn);
        (((reg_equiv[regno].init_insns)->u.fld[0]).rtx1) = new_insn;
        (((reg_n_info)->data.reg[regno])->basic_block1) = bb->index;
        (((reg_n_info)->data.reg[regno])->calls_crossed) = 0;
        (((reg_n_info)->data.reg[regno])->live_length) = 2;
        if (insn == (bb)->head_)
   (bb)->head_ = (((insn)->u.fld[1]).rtx1);
        bitmap_set_bit (&cleared_regs, regno);
        clear_regnos++;
      }
  }
     }
 }
    }
  if (clear_regnos)
    {
      int j;
      if (clear_regnos > 8)
 {
   for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
     {
       bitmap_operation (bb->global_live_at_start, bb->global_live_at_start, &cleared_regs, BITMAP_AND_COMPL);
       bitmap_operation (bb->global_live_at_end, bb->global_live_at_end, &cleared_regs, BITMAP_AND_COMPL);
     }
 }
      else
 do { bitmap_element *ptr_ = (&cleared_regs)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb) { bitmap_clear_bit (bb->global_live_at_start, j); bitmap_clear_bit (bb->global_live_at_end, j); } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
     ;
    }
  end_alias_analysis ();
  bitmap_clear (&cleared_regs);
  free (reg_equiv);
}
static void
no_equiv (rtx reg, rtx store , void *data )
{
  int regno;
  rtx list;
  if (!(((enum rtx_code) (reg)->code) == REG))
    return;
  regno = (((reg)->u.fld[0]).rtuint);
  list = reg_equiv[regno].init_insns;
  if (list == (const_int_rtx[64]))
    return;
  for (; list; list = (((list)->u.fld[1]).rtx1))
    {
      rtx insn = (((list)->u.fld[0]).rtx1);
      remove_note (insn, find_reg_note (insn, REG_EQUIV, (rtx) 0));
    }
  reg_equiv[regno].init_insns = (const_int_rtx[64]);
  reg_equiv[regno].replacement = (rtx) 0;
}
static void
block_alloc (int b)
{
  int i, q;
  rtx insn;
  rtx note, hard_reg;
  int insn_number = 0;
  int insn_count = 0;
  int max_uid = get_max_uid ();
  int *qty_order;
  int no_conflict_combined_regno = -1;
  insn = ((((basic_block_info)->data.bb[(b)])))->end_;
  while (1)
    {
      if (((enum rtx_code) (insn)->code) != NOTE)
 if (++insn_count > max_uid)
   abort ();
      if (insn == ((((basic_block_info)->data.bb[(b)])))->head_)
 break;
      insn = (((insn)->u.fld[1]).rtx1);
    }
  regs_live_at = xcalloc ((2 * insn_count + 2), sizeof (HARD_REG_SET));
  do { do { HARD_REG_ELT_TYPE *scan_tp_ = (regs_live); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&regs_live, (((basic_block_info)->data.bb[(b)]))->global_live_at_start); } while (0);
  insn = ((((basic_block_info)->data.bb[(b)])))->head_;
  while (1)
    {
      if (((enum rtx_code) (insn)->code) != NOTE)
 insn_number++;
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   rtx link, set;
   int win = 0;
   rtx r0, r1 = (rtx) 0;
   int combined_regno = -1;
   int i;
   this_insn_number = insn_number;
   this_insn = insn;
   extract_insn (insn);
   which_alternative = -1;
   if (optimize
       && recog_data.n_operands > 1
       && recog_data.constraints[0][0] == '='
       && recog_data.constraints[0][1] != '&')
     {
       int must_match_0 = -1;
       int n_matching_alts = 0;
       for (i = 1; i < recog_data.n_operands; i++)
  {
    const char *p = recog_data.constraints[i];
    int this_match = requires_inout (p);
    n_matching_alts += this_match;
    if (this_match == recog_data.n_alternatives)
      must_match_0 = i;
  }
       r0 = recog_data.operand[0];
       for (i = 1; i < recog_data.n_operands; i++)
  {
    if (must_match_0 >= 0 && i != must_match_0
        && ! (i == must_match_0 + 1
       && recog_data.constraints[i-1][0] == '%')
        && ! (i == must_match_0 - 1
       && recog_data.constraints[i][0] == '%'))
      continue;
    if (n_matching_alts == recog_data.n_alternatives
        && 0 == requires_inout (recog_data.constraints[i]))
      continue;
    r1 = recog_data.operand[i];
    if (recog_data.constraints[i][0] == 'p'
        || 0
                                   )
      while (((enum rtx_code) (r1)->code) == PLUS || ((enum rtx_code) (r1)->code) == MULT)
        r1 = (((r1)->u.fld[0]).rtx1);
    hard_reg = get_hard_reg_initial_reg (cfun, r1);
    if (hard_reg != (rtx) 0)
      {
        if ((((enum rtx_code) (hard_reg)->code) == REG)
     && ((unsigned long) (((((hard_reg)->u.fld[0]).rtuint)) - (0)) <= ((53 - 1) - (0)))
     && ! call_used_regs[(((hard_reg)->u.fld[0]).rtuint)])
   continue;
      }
    if ((((enum rtx_code) (r0)->code) == REG) || ((enum rtx_code) (r0)->code) == SUBREG)
      {
        int may_save_copy
   = (r1 == recog_data.operand[i] && must_match_0 >= 0);
        if ((((enum rtx_code) (r1)->code) == REG) || ((enum rtx_code) (r1)->code) == SUBREG)
   win = combine_regs (r1, r0, may_save_copy,
         insn_number, insn, 0);
      }
    if (win)
      break;
  }
     }
   if (optimize
       && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER
       && (r0 = ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1),
    (((enum rtx_code) (r0)->code) == REG))
       && (link = find_reg_note (insn, REG_LIBCALL, (rtx) 0)) != 0
       && (((link)->u.fld[0]).rtx1) != 0
       && ((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == INSN
       && (set = (((((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == INSN) || (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == JUMP_INSN) || (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == CALL_INSN)) ? (((enum rtx_code) (((((((link)->u.fld[0]).rtx1))->u.fld[5]).rtx1))->code) == SET ? ((((((link)->u.fld[0]).rtx1))->u.fld[5]).rtx1) : single_set_2 ((((link)->u.fld[0]).rtx1), ((((((link)->u.fld[0]).rtx1))->u.fld[5]).rtx1))) : (rtx) 0)) != 0
       && (((set)->u.fld[0]).rtx1) == r0 && (((set)->u.fld[1]).rtx1) == r0
       && (note = find_reg_note ((((link)->u.fld[0]).rtx1), REG_EQUAL,
     (rtx) 0)) != 0)
     {
       if (r1 = (((note)->u.fld[0]).rtx1), (((enum rtx_code) (r1)->code) == REG)
    && no_conflict_p (insn, r0, r1))
  win = combine_regs (r1, r0, 1, insn_number, insn, 1);
       else if ((rtx_format[(int) (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code))])[0] == 'e'
         && (r1 = ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
      (((enum rtx_code) (r1)->code) == REG) || ((enum rtx_code) (r1)->code) == SUBREG)
         && no_conflict_p (insn, r0, r1))
  win = combine_regs (r1, r0, 0, insn_number, insn, 1);
       else if ((((rtx_class[(int) (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code))]) & (~2)) == (RTX_COMM_COMPARE & (~2)))
         && (r1 = ((((((note)->u.fld[0]).rtx1))->u.fld[1]).rtx1),
      ((((enum rtx_code) (r1)->code) == REG) || ((enum rtx_code) (r1)->code) == SUBREG))
         && no_conflict_p (insn, r0, r1))
  win = combine_regs (r1, r0, 0, insn_number, insn, 1);
       if (win)
  no_conflict_combined_regno = (((r1)->u.fld[0]).rtuint);
     }
   if (win)
     {
       while (((enum rtx_code) (r1)->code) == SUBREG)
  r1 = (((r1)->u.fld[0]).rtx1);
       combined_regno = (((r1)->u.fld[0]).rtuint);
     }
   for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
     if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEAD
  && (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == REG)
  && combined_regno != (int) ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint)
  && (no_conflict_combined_regno != (int) ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint)
      || ! find_reg_note (insn, REG_NO_CONFLICT,
     (((link)->u.fld[0]).rtx1))))
       wipe_dead_reg ((((link)->u.fld[0]).rtx1), 0);
   note_stores ((((insn)->u.fld[5]).rtx1), reg_is_set, ((void *)0));
   for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
     if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_UNUSED
  && (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == REG))
       wipe_dead_reg ((((link)->u.fld[0]).rtx1), 1);
   if ((note = find_reg_note (insn, REG_RETVAL, (rtx) 0)) != 0
       && ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == INSN
       && ((enum rtx_code) (((((((note)->u.fld[0]).rtx1))->u.fld[5]).rtx1))->code) == CLOBBER)
     no_conflict_combined_regno = -1;
 }
      do { HARD_REG_ELT_TYPE *scan_tp_ = (regs_live_at[2 * insn_number]), *scan_fp_ = (regs_live); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (regs_live_at[2 * insn_number + 1]), *scan_fp_ = (regs_live); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
      if (insn == ((((basic_block_info)->data.bb[(b)])))->end_)
 break;
      insn = (((insn)->u.fld[2]).rtx1);
    }
  qty_order = xmalloc (next_qty * sizeof (int));
  for (i = 0; i < next_qty; i++)
    qty_order[i] = i;
  switch (next_qty)
    {
    case 3:
      if (qty_sugg_compare (0, 1) > 0)
 { i = qty_order[0]; qty_order[0] = qty_order[1]; qty_order[1] = i; };
      if (qty_sugg_compare (1, 2) > 0)
 { i = qty_order[2]; qty_order[2] = qty_order[1]; qty_order[1] = i; };
    case 2:
      if (qty_sugg_compare (0, 1) > 0)
 { i = qty_order[0]; qty_order[0] = qty_order[1]; qty_order[1] = i; };
    case 1:
    case 0:
      break;
    default:
      qsort (qty_order, next_qty, sizeof (int), qty_sugg_compare_1);
    }
  for (i = 0; i < next_qty; i++)
    {
      q = qty_order[i];
      if (qty_phys_num_sugg[q] != 0 || qty_phys_num_copy_sugg[q] != 0)
 qty[q].phys_reg = find_free_reg (qty[q].min_class, qty[q].mode, q,
      0, 1, qty[q].birth, qty[q].death);
      else
 qty[q].phys_reg = -1;
    }
  for (i = 0; i < next_qty; i++)
    qty_order[i] = i;
  switch (next_qty)
    {
    case 3:
      if (qty_compare (0, 1) > 0)
 { i = qty_order[0]; qty_order[0] = qty_order[1]; qty_order[1] = i; };
      if (qty_compare (1, 2) > 0)
 { i = qty_order[2]; qty_order[2] = qty_order[1]; qty_order[1] = i; };
    case 2:
      if (qty_compare (0, 1) > 0)
 { i = qty_order[0]; qty_order[0] = qty_order[1]; qty_order[1] = i; };
    case 1:
    case 0:
      break;
    default:
      qsort (qty_order, next_qty, sizeof (int), qty_compare_1);
    }
  for (i = 0; i < next_qty; i++)
    {
      q = qty_order[i];
      if (qty[q].phys_reg < 0)
 {
   int fake_birth = ((0) > (qty[q].birth - 2 + qty[q].birth % 2) ? (0) : (qty[q].birth - 2 + qty[q].birth % 2));
   int fake_death = ((insn_number * 2 + 1) < (qty[q].death + 2 - qty[q].death % 2) ? (insn_number * 2 + 1) : (qty[q].death + 2 - qty[q].death % 2))
                                        ;
   if (((int) LIM_REG_CLASSES) > 1)
     {
       if (flag_schedule_insns_after_reload
    && !optimize_size
    && !1)
  {
    qty[q].phys_reg = find_free_reg (qty[q].min_class,
         qty[q].mode, q, 0, 0,
         fake_birth, fake_death);
    if (qty[q].phys_reg >= 0)
      continue;
  }
       qty[q].phys_reg = find_free_reg (qty[q].min_class,
            qty[q].mode, q, 0, 0,
            qty[q].birth, qty[q].death);
       if (qty[q].phys_reg >= 0)
  continue;
     }
   if (flag_schedule_insns_after_reload
       && !optimize_size
       && !1
       && qty[q].alternate_class != NO_REGS)
     qty[q].phys_reg = find_free_reg (qty[q].alternate_class,
          qty[q].mode, q, 0, 0,
          fake_birth, fake_death);
   if (qty[q].alternate_class != NO_REGS)
     qty[q].phys_reg = find_free_reg (qty[q].alternate_class,
          qty[q].mode, q, 0, 0,
          qty[q].birth, qty[q].death);
 }
    }
  for (q = 0; q < next_qty; q++)
    if (qty[q].phys_reg >= 0)
      {
 for (i = qty[q].first_reg; i >= 0; i = reg_next_in_qty[i])
   reg_renumber[i] = qty[q].phys_reg + reg_offset_local[i];
      }
  free (regs_live_at);
  free (qty_order);
}
static int
qty_compare (int q1, int q2)
{
  return ((int) (((double) (floor_log2_wide ((unsigned long) (qty[q2].n_refs)) * qty[q2].freq * qty[q2].size) / (qty[q2].death - qty[q2].birth)) * (10000 / 1000))) - ((int) (((double) (floor_log2_wide ((unsigned long) (qty[q1].n_refs)) * qty[q1].freq * qty[q1].size) / (qty[q1].death - qty[q1].birth)) * (10000 / 1000)));
}
static int
qty_compare_1 (const void *q1p, const void *q2p)
{
  int q1 = *(const int *) q1p, q2 = *(const int *) q2p;
  int tem = ((int) (((double) (floor_log2_wide ((unsigned long) (qty[q2].n_refs)) * qty[q2].freq * qty[q2].size) / (qty[q2].death - qty[q2].birth)) * (10000 / 1000))) - ((int) (((double) (floor_log2_wide ((unsigned long) (qty[q1].n_refs)) * qty[q1].freq * qty[q1].size) / (qty[q1].death - qty[q1].birth)) * (10000 / 1000)));
  if (tem != 0)
    return tem;
  return q1 - q2;
}
static int
qty_sugg_compare (int q1, int q2)
{
  int tem = (qty_phys_num_copy_sugg[q1] ? qty_phys_num_copy_sugg[q1] : qty_phys_num_sugg[q1] * 53) - (qty_phys_num_copy_sugg[q2] ? qty_phys_num_copy_sugg[q2] : qty_phys_num_sugg[q2] * 53);
  if (tem != 0)
    return tem;
  return ((int) (((double) (floor_log2_wide ((unsigned long) (qty[q2].n_refs)) * qty[q2].freq * qty[q2].size) / (qty[q2].death - qty[q2].birth)) * (10000 / 1000))) - ((int) (((double) (floor_log2_wide ((unsigned long) (qty[q1].n_refs)) * qty[q1].freq * qty[q1].size) / (qty[q1].death - qty[q1].birth)) * (10000 / 1000)));
}
static int
qty_sugg_compare_1 (const void *q1p, const void *q2p)
{
  int q1 = *(const int *) q1p, q2 = *(const int *) q2p;
  int tem = (qty_phys_num_copy_sugg[q1] ? qty_phys_num_copy_sugg[q1] : qty_phys_num_sugg[q1] * 53) - (qty_phys_num_copy_sugg[q2] ? qty_phys_num_copy_sugg[q2] : qty_phys_num_sugg[q2] * 53);
  if (tem != 0)
    return tem;
  tem = ((int) (((double) (floor_log2_wide ((unsigned long) (qty[q2].n_refs)) * qty[q2].freq * qty[q2].size) / (qty[q2].death - qty[q2].birth)) * (10000 / 1000))) - ((int) (((double) (floor_log2_wide ((unsigned long) (qty[q1].n_refs)) * qty[q1].freq * qty[q1].size) / (qty[q1].death - qty[q1].birth)) * (10000 / 1000)));
  if (tem != 0)
    return tem;
  return q1 - q2;
}
static int
combine_regs (rtx usedreg, rtx setreg, int may_save_copy, int insn_number,
       rtx insn, int already_dead)
{
  int ureg, sreg;
  int offset = 0;
  int usize, ssize;
  int sqty;
  while (((enum rtx_code) (usedreg)->code) == SUBREG)
    {
      rtx subreg = (((usedreg)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (subreg)->code) == REG))
 {
   if (((unsigned short) mode_size[((enum machine_mode) (subreg)->mode)]) > (0 ? 8 : 4))
     may_save_copy = 0;
   if ((((subreg)->u.fld[0]).rtuint) < 53)
     offset += subreg_regno_offset ((((subreg)->u.fld[0]).rtuint),
        ((enum machine_mode) (subreg)->mode),
        (((usedreg)->u.fld[1]).rtuint),
        ((enum machine_mode) (usedreg)->mode));
   else
     offset += ((((usedreg)->u.fld[1]).rtuint)
        / (0 ? 8 : 4));
 }
      usedreg = subreg;
    }
  if (!(((enum rtx_code) (usedreg)->code) == REG))
    return 0;
  ureg = (((usedreg)->u.fld[0]).rtuint);
  if (ureg < 53)
    usize = hard_regno_nregs[ureg][((enum machine_mode) (usedreg)->mode)];
  else
    usize = ((((unsigned short) mode_size[((enum machine_mode) (usedreg)->mode)])
       + ((0 ? 8 : 4) - 1))
      / (0 ? 8 : 4));
  while (((enum rtx_code) (setreg)->code) == SUBREG)
    {
      rtx subreg = (((setreg)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (subreg)->code) == REG))
 {
   if (((unsigned short) mode_size[((enum machine_mode) (subreg)->mode)]) > (0 ? 8 : 4))
     may_save_copy = 0;
   if ((((subreg)->u.fld[0]).rtuint) < 53)
     offset -= subreg_regno_offset ((((subreg)->u.fld[0]).rtuint),
        ((enum machine_mode) (subreg)->mode),
        (((setreg)->u.fld[1]).rtuint),
        ((enum machine_mode) (setreg)->mode));
   else
     offset -= ((((setreg)->u.fld[1]).rtuint)
        / (0 ? 8 : 4));
 }
      setreg = subreg;
    }
  if (!(((enum rtx_code) (setreg)->code) == REG))
    return 0;
  sreg = (((setreg)->u.fld[0]).rtuint);
  if (sreg < 53)
    ssize = hard_regno_nregs[sreg][((enum machine_mode) (setreg)->mode)];
  else
    ssize = ((((unsigned short) mode_size[((enum machine_mode) (setreg)->mode)])
       + ((0 ? 8 : 4) - 1))
      / (0 ? 8 : 4));
  if ((ureg >= 53 && reg_qty[ureg] < 0)
      || (offset > 0 && usize + offset > ssize)
      || (offset < 0 && usize + offset < ssize)
      || (ssize > usize && ureg >= 53
   && usize < qty[reg_qty[ureg]].size)
      || (sreg >= 53 && reg_qty[sreg] == -1)
      || (ureg >= 53
   && find_reg_note (insn, REG_NO_CONFLICT, usedreg))
      || ureg == sreg
      || (ureg < 53 && sreg < 53)
      || !((((enum machine_mode) (usedreg)->mode)) == (((enum machine_mode) (setreg)->mode)) || (((((enum machine_mode) (usedreg)->mode)) == HImode || (((enum machine_mode) (usedreg)->mode)) == SImode || ((((enum machine_mode) (usedreg)->mode)) == QImode && (0 || !(x86_partial_reg_stall & (1 << ix86_tune)))) || ((((enum machine_mode) (usedreg)->mode)) == DImode && 0)) && ((((enum machine_mode) (setreg)->mode)) == HImode || (((enum machine_mode) (setreg)->mode)) == SImode || ((((enum machine_mode) (setreg)->mode)) == QImode && (0 || !(x86_partial_reg_stall & (1 << ix86_tune)))) || ((((enum machine_mode) (setreg)->mode)) == DImode && 0)))))
    return 0;
  if (ureg < 53)
    {
      if (reg_qty[sreg] == -2)
 reg_is_born (setreg, 2 * insn_number);
      if (reg_qty[sreg] >= 0)
 {
   if (may_save_copy
       && ! (!!((qty_phys_copy_sugg[reg_qty[sreg]])[(ureg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((ureg) % ((unsigned) (8 * 4)))))))
     {
       ((qty_phys_copy_sugg[reg_qty[sreg]])[(ureg) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((ureg) % ((unsigned) (8 * 4))));
       qty_phys_num_copy_sugg[reg_qty[sreg]]++;
     }
   else if (! (!!((qty_phys_sugg[reg_qty[sreg]])[(ureg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((ureg) % ((unsigned) (8 * 4)))))))
     {
       ((qty_phys_sugg[reg_qty[sreg]])[(ureg) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((ureg) % ((unsigned) (8 * 4))));
       qty_phys_num_sugg[reg_qty[sreg]]++;
     }
 }
      return 0;
    }
  if (sreg < 53)
    {
      if (may_save_copy
   && ! (!!((qty_phys_copy_sugg[reg_qty[ureg]])[(sreg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((sreg) % ((unsigned) (8 * 4)))))))
 {
   ((qty_phys_copy_sugg[reg_qty[ureg]])[(sreg) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((sreg) % ((unsigned) (8 * 4))));
   qty_phys_num_copy_sugg[reg_qty[ureg]]++;
 }
      else if (! (!!((qty_phys_sugg[reg_qty[ureg]])[(sreg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((sreg) % ((unsigned) (8 * 4)))))))
 {
   ((qty_phys_sugg[reg_qty[ureg]])[(sreg) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((sreg) % ((unsigned) (8 * 4))));
   qty_phys_num_sugg[reg_qty[ureg]]++;
 }
      return 0;
    }
  if (reg_qty[sreg] >= -1
      || ((cfun->has_nonlocal_label)
   && (((((reg_n_info)->data.reg[ureg])->calls_crossed) > 0)
       != ((((reg_n_info)->data.reg[sreg])->calls_crossed) > 0))))
    return 0;
  if ((already_dead || find_regno_note (insn, REG_DEAD, ureg))
      && reg_meets_class_p (sreg, qty[reg_qty[ureg]].min_class))
    {
      sqty = reg_qty[ureg];
      reg_qty[sreg] = sqty;
      reg_offset_local[sreg] = reg_offset_local[ureg] + offset;
      reg_next_in_qty[sreg] = qty[sqty].first_reg;
      qty[sqty].first_reg = sreg;
      update_qty_class (sqty, sreg);
      qty[sqty].n_calls_crossed += (((reg_n_info)->data.reg[sreg])->calls_crossed);
      qty[sqty].n_refs += (((reg_n_info)->data.reg[sreg])->refs);
      qty[sqty].freq += (((reg_n_info)->data.reg[sreg])->freq);
      if (usize < ssize)
 {
   int i;
   for (i = qty[sqty].first_reg; i >= 0; i = reg_next_in_qty[i])
     reg_offset_local[i] -= offset;
   qty[sqty].size = ssize;
   qty[sqty].mode = ((enum machine_mode) (setreg)->mode);
 }
    }
  else
    return 0;
  return 1;
}
static int
reg_meets_class_p (int reg, enum reg_class class)
{
  enum reg_class rclass = reg_preferred_class (reg);
  return (reg_class_subset_p (rclass, class)
   || reg_class_subset_p (class, rclass));
}
static void
update_qty_class (int qtyno, int reg)
{
  enum reg_class rclass = reg_preferred_class (reg);
  if (reg_class_subset_p (rclass, qty[qtyno].min_class))
    qty[qtyno].min_class = rclass;
  rclass = reg_alternate_class (reg);
  if (reg_class_subset_p (rclass, qty[qtyno].alternate_class))
    qty[qtyno].alternate_class = rclass;
}
static void
reg_is_set (rtx reg, rtx setter, void *data )
{
  if (((enum rtx_code) (reg)->code) != SUBREG
      && !(((enum rtx_code) (reg)->code) == REG))
    return;
  reg_is_born (reg, 2 * this_insn_number - (((enum rtx_code) (setter)->code) == CLOBBER));
}
static void
reg_is_born (rtx reg, int birth)
{
  int regno;
  if (((enum rtx_code) (reg)->code) == SUBREG)
    {
      regno = ((((((reg)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      if (regno < 53)
 regno = subreg_hard_regno (reg, 1);
    }
  else
    regno = (((reg)->u.fld[0]).rtuint);
  if (regno < 53)
    {
      mark_life (regno, ((enum machine_mode) (reg)->mode), 1);
      if (birth < 2 * this_insn_number)
 post_mark_life (regno, ((enum machine_mode) (reg)->mode), 1, birth, 2 * this_insn_number);
    }
  else
    {
      if (reg_qty[regno] == -2)
 alloc_qty (regno, ((enum machine_mode) (reg)->mode), ((((unsigned short) mode_size[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[regno])->mode)]) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4)), birth);
      if (reg_qty[regno] >= 0)
 qty[reg_qty[regno]].death = -1;
    }
}
static void
wipe_dead_reg (rtx reg, int output_p)
{
  int regno = (((reg)->u.fld[0]).rtuint);
  if (((enum rtx_code) ((((this_insn)->u.fld[5]).rtx1))->code) == PARALLEL
      && multiple_sets (this_insn))
    {
      int i;
      for (i = ((((((((this_insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 {
   rtx set = ((((((((this_insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (set)->code) == SET
       && !(((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
       && !rtx_equal_p (reg, (((set)->u.fld[0]).rtx1))
       && reg_overlap_mentioned_p (reg, (((set)->u.fld[0]).rtx1)))
     output_p = 1;
 }
    }
  if (! output_p && find_regno_note (this_insn, REG_INC, regno))
    output_p = 1;
  if (regno < 53)
    {
      mark_life (regno, ((enum machine_mode) (reg)->mode), 0);
      if (output_p)
 post_mark_life (regno, ((enum machine_mode) (reg)->mode), 1,
   2 * this_insn_number, 2 * this_insn_number + 1);
    }
  else if (reg_qty[regno] >= 0)
    qty[reg_qty[regno]].death = 2 * this_insn_number + output_p;
}
static int
find_free_reg (enum reg_class class, enum machine_mode mode, int qtyno,
        int accept_call_clobbered, int just_try_suggested,
        int born_index, int dead_index)
{
  int i, ins;
  HARD_REG_SET first_used, used;
  static const struct {const int from, to; } eliminables[] = {{ 16, 7}, { 16, 6}, { 20, 7}, { 20, 6}};
  if (born_index < 0 || born_index > dead_index)
    abort ();
  if ((cfun->has_nonlocal_label)
      && qty[qtyno].n_calls_crossed > 0)
    return -1;
  if (accept_call_clobbered)
    do { HARD_REG_ELT_TYPE *scan_tp_ = (used), *scan_fp_ = (call_fixed_reg_set); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  else if (qty[qtyno].n_calls_crossed == 0)
    do { HARD_REG_ELT_TYPE *scan_tp_ = (used), *scan_fp_ = (fixed_reg_set); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  else
    do { HARD_REG_ELT_TYPE *scan_tp_ = (used), *scan_fp_ = (call_used_reg_set); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  if (accept_call_clobbered)
    do { HARD_REG_ELT_TYPE *scan_tp_ = (used), *scan_fp_ = (losing_caller_save_reg_set); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
  for (ins = born_index; ins < dead_index; ins++)
    do { HARD_REG_ELT_TYPE *scan_tp_ = (used), *scan_fp_ = (regs_live_at[ins]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used), *scan_fp_ = (reg_class_contents[(int) class]); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0);
  for (i = 0; i < (int) (sizeof (eliminables) / sizeof ((eliminables)[0])); i++)
    ((used)[(eliminables[i].from) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((eliminables[i].from) % ((unsigned) (8 * 4))));
  ((used)[(6) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((6) % ((unsigned) (8 * 4))));
  cannot_change_mode_set_regs (&used, mode, qty[qtyno].first_reg);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (first_used), *scan_fp_ = (used); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  if (just_try_suggested)
    {
      if (qty_phys_num_copy_sugg[qtyno] != 0)
 do { HARD_REG_ELT_TYPE *scan_tp_ = (first_used), *scan_fp_ = (qty_phys_copy_sugg[qtyno]); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0);
      else
 do { HARD_REG_ELT_TYPE *scan_tp_ = (first_used), *scan_fp_ = (qty_phys_sugg[qtyno]); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0);
    }
  do { HARD_REG_ELT_TYPE *scan_xp_ = (reg_class_contents[(int) ALL_REGS]), *scan_yp_ = (first_used); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto fail; } while (0);
  for (i = 0; i < 53; i++)
    {
      int regno = reg_alloc_order[i];
      if (! (!!((first_used)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
   && ix86_hard_regno_mode_ok ((regno), (mode))
   && (qty[qtyno].n_calls_crossed == 0
       || accept_call_clobbered
       || ! 0))
 {
   int j;
   int size1 = hard_regno_nregs[regno][mode];
   for (j = 1; j < size1 && ! (!!((used)[(regno + j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + j) % ((unsigned) (8 * 4)))))); j++);
   if (j == size1)
     {
       post_mark_life (regno, mode, 1, born_index, dead_index);
       return regno;
     }
 }
    }
 fail:
  if (just_try_suggested && qty_phys_num_copy_sugg[qtyno] != 0
      && qty_phys_num_sugg[qtyno] != 0)
    {
      qty_phys_num_copy_sugg[qtyno] = 0;
      return find_free_reg (class, mode, qtyno, accept_call_clobbered, 1,
       born_index, dead_index);
    }
  if (! accept_call_clobbered
      && flag_caller_saves
      && ! just_try_suggested
      && qty[qtyno].n_calls_crossed != 0
      && (4 * (qty[qtyno].n_calls_crossed) < (qty[qtyno].n_refs))
                                )
    {
      i = find_free_reg (class, mode, qtyno, 1, 0, born_index, dead_index);
      if (i >= 0)
 caller_save_needed = 1;
      return i;
    }
  return -1;
}
static void
mark_life (int regno, enum machine_mode mode, int life)
{
  int j = hard_regno_nregs[regno][mode];
  if (life)
    while (--j >= 0)
      ((regs_live)[(regno + j) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno + j) % ((unsigned) (8 * 4))));
  else
    while (--j >= 0)
      ((regs_live)[(regno + j) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((regno + j) % ((unsigned) (8 * 4)))));
}
static void
post_mark_life (int regno, enum machine_mode mode, int life, int birth,
  int death)
{
  int j = hard_regno_nregs[regno][mode];
  HARD_REG_SET this_reg;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (this_reg); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  while (--j >= 0)
    ((this_reg)[(regno + j) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno + j) % ((unsigned) (8 * 4))));
  if (life)
    while (birth < death)
      {
 do { HARD_REG_ELT_TYPE *scan_tp_ = (regs_live_at[birth]), *scan_fp_ = (this_reg); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
 birth++;
      }
  else
    while (birth < death)
      {
 do { HARD_REG_ELT_TYPE *scan_tp_ = (regs_live_at[birth]), *scan_fp_ = (this_reg); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
 birth++;
      }
}
static int
no_conflict_p (rtx insn, rtx r0 , rtx r1)
{
  int ok = 0;
  rtx note = find_reg_note (insn, REG_LIBCALL, (rtx) 0);
  rtx p, last;
  if (note == 0
      || ((((enum rtx_code) (r1)->code) == REG) && (((r1)->u.fld[0]).rtuint) < 53)
      || (((enum rtx_code) (r1)->code) == SUBREG && (((enum rtx_code) ((((r1)->u.fld[0]).rtx1))->code) == REG)
   && ((((((r1)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53))
    return 0;
  last = (((note)->u.fld[0]).rtx1);
  for (p = (((insn)->u.fld[2]).rtx1); p && p != last; p = (((p)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
      {
 if (find_reg_note (p, REG_DEAD, r1))
   ok = 1;
 if (! find_reg_note (p, REG_NO_CONFLICT, r1))
   return 0;
      }
  return ok;
}
static int
requires_inout (const char *p)
{
  char c;
  int found_zero = 0;
  int reg_allowed = 0;
  int num_matching_alts = 0;
  int len;
  for ( ; (c = *p); p += len)
    {
      len = 1;
      switch (c)
 {
 case '=': case '+': case '?':
 case '#': case '&': case '!':
 case '*': case '%':
 case 'm': case '<': case '>': case 'V': case 'o':
 case 'E': case 'F': case 'G': case 'H':
 case 's': case 'i': case 'n':
 case 'I': case 'J': case 'K': case 'L':
 case 'M': case 'N': case 'O': case 'P':
 case 'X':
   break;
 case ',':
   if (found_zero && ! reg_allowed)
     num_matching_alts++;
   found_zero = reg_allowed = 0;
   break;
 case '0':
   found_zero = 1;
   break;
 case '1': case '2': case '3': case '4': case '5':
 case '6': case '7': case '8': case '9':
   do
     p++;
   while ((_sch_istable[(*p) & 0xff] & (unsigned short)(_sch_isdigit)));
   len = 0;
   break;
 default:
   if (((c) == 'r' ? GENERAL_REGS : NO_REGS) == NO_REGS
       && !0)
     break;
 case 'p':
 case 'g': case 'r':
   reg_allowed = 1;
   break;
 }
    }
  if (found_zero && ! reg_allowed)
    num_matching_alts++;
  return num_matching_alts;
}
void
dump_local_alloc (FILE *file)
{
  int i;
  for (i = 53; i < max_regno; i++)
    if (reg_renumber[i] != -1)
      fprintf (file, ";; Register %d in %d.\n", i, reg_renumber[i]);
}
enum g_types
{
  DEST_ADDR,
  DEST_REG
};
struct induction
{
  rtx insn;
  rtx new_reg;
  rtx src_reg;
  enum g_types giv_type;
  rtx dest_reg;
  rtx *location;
  enum machine_mode mode;
  rtx mem;
  rtx mult_val;
  rtx add_val;
  int benefit;
  rtx final_value;
  unsigned combined_with;
  unsigned replaceable : 1;
  unsigned not_replaceable : 1;
  unsigned ignore : 1;
  unsigned always_computable : 1;
  unsigned always_executed : 1;
  unsigned maybe_multiple : 1;
  unsigned cant_derive : 1;
  unsigned maybe_dead : 1;
  unsigned auto_inc_opt : 1;
  unsigned unrolled : 1;
  unsigned shared : 1;
  unsigned no_const_addval : 1;
  int lifetime;
  rtx derive_adjustment;
  rtx ext_dependent;
  struct induction *next_iv;
  struct induction *same;
  long const_adjust;
  struct induction *same_insn;
  rtx last_use;
};
struct iv_class
{
  unsigned int regno;
  int biv_count;
  struct induction *biv;
  int giv_count;
  struct induction *giv;
  int total_benefit;
  rtx initial_value;
  rtx initial_test;
  rtx final_value;
  struct iv_class *next;
  rtx init_insn;
  rtx init_set;
  unsigned incremented : 1;
  unsigned eliminable : 1;
  unsigned nonneg : 1;
  unsigned reversed : 1;
  unsigned all_reduced : 1;
};
enum iv_mode
{
  UNKNOWN_INDUCT,
  BASIC_INDUCT,
  NOT_BASIC_INDUCT,
  GENERAL_INDUCT
};
struct iv
{
  enum iv_mode type;
  union
  {
    struct iv_class *class;
    struct induction *info;
  } iv;
};
struct loop_ivs
{
  struct iv *regs;
  unsigned int n_regs;
  struct iv_class *list;
};
typedef struct loop_mem_info
{
  rtx mem;
  rtx reg;
  int optimize;
} loop_mem_info;
struct loop_reg
{
  int set_in_loop;
  int n_times_set;
  rtx single_usage;
  char may_not_optimize;
  char moved_once;
};
struct loop_regs
{
  int num;
  int size;
  struct loop_reg *array;
  int multiple_uses;
};
struct loop_movables
{
  struct movable *head;
  struct movable *last;
};
struct loop_info
{
  int has_call;
  int has_libcall;
  int has_nonconst_call;
  int has_prefetch;
  int has_volatile;
  int has_tablejump;
  int has_multiple_exit_targets;
  int has_indirect_jump;
  int preconditioned;
  rtx initial_value;
  rtx comparison_value;
  rtx final_value;
  rtx initial_equiv_value;
  rtx final_equiv_value;
  rtx iteration_var;
  rtx increment;
  enum rtx_code comparison_code;
  unsigned long n_iterations;
  unsigned int unroll_number;
  int used_count_register;
  struct iv_class *iv;
  rtx store_mems;
  loop_mem_info *mems;
  int mems_idx;
  int mems_allocated;
  int unknown_address_altered;
  int unknown_constant_address_altered;
  int num_mem_sets;
  rtx first_loop_store_insn;
  struct loop_movables movables;
  struct loop_regs regs;
  struct loop_ivs ivs;
  int pre_header_has_call;
};
extern int *uid_luid;
extern int max_uid_for_loop;
extern unsigned int max_reg_before_loop;
extern struct loop **uid_loop;
extern FILE *loop_dump_stream;
extern int loop_invariant_p (const struct loop *, rtx);
extern rtx get_condition (rtx jump, rtx *earliest, int allow_cc_mode);
extern rtx get_condition_for_loop (const struct loop *, rtx);
extern void loop_iv_add_mult_hoist (const struct loop *, rtx, rtx, rtx, rtx);
extern void loop_iv_add_mult_sink (const struct loop *, rtx, rtx, rtx, rtx);
extern void loop_iv_add_mult_emit_before (const struct loop *, rtx, rtx,
       rtx, rtx, basic_block, rtx);
extern rtx express_from (struct induction *, struct induction *);
extern rtx extend_value_for_giv (struct induction *, rtx);
extern void unroll_loop (struct loop *, int, int);
extern rtx biv_total_increment (const struct iv_class *);
extern unsigned long loop_iterations (struct loop *);
extern int precondition_loop_p (const struct loop *, rtx *, rtx *, rtx *,
    enum machine_mode *mode);
extern rtx final_biv_value (const struct loop *, struct iv_class *);
extern rtx final_giv_value (const struct loop *, struct induction *);
extern void emit_unrolled_add (rtx, rtx, rtx);
extern int back_branch_in_range_p (const struct loop *, rtx);
extern int loop_insn_first_p (rtx, rtx);
typedef rtx (*loop_insn_callback) (struct loop *, rtx, int, int);
extern void for_each_insn_in_loop (struct loop *, loop_insn_callback);
extern rtx loop_insn_emit_before (const struct loop *, basic_block, rtx, rtx);
extern rtx loop_insn_sink (const struct loop *, rtx);
extern rtx loop_insn_hoist (const struct loop *, rtx);
extern unsigned char doloop_optimize (struct loop *);
int *uid_luid;
struct loop **uid_loop;
int max_uid_for_loop;
static int max_loop_num;
unsigned int max_reg_before_loop;
static int loop_max_reg;
struct movable
{
  rtx insn;
  rtx set_src;
  rtx set_dest;
  rtx dependencies;
  int consec;
  unsigned int regno;
  short lifetime;
  short savings;
  unsigned int savemode : 8;
  unsigned int cond : 1;
  unsigned int force : 1;
  unsigned int global : 1;
  unsigned int done : 1;
  unsigned int partial : 1;
  unsigned int move_insn : 1;
  unsigned int move_insn_first:1;
  unsigned int is_equiv : 1;
  unsigned int insert_temp : 1;
  struct movable *match;
  struct movable *forces;
  struct movable *next;
};
FILE *loop_dump_stream;
static void invalidate_loops_containing_label (rtx);
static void find_and_verify_loops (rtx, struct loops *);
static void mark_loop_jump (rtx, struct loop *);
static void prescan_loop (struct loop *);
static int reg_in_basic_block_p (rtx, rtx);
static int consec_sets_invariant_p (const struct loop *, rtx, int, rtx);
static int labels_in_range_p (rtx, int);
static void count_one_set (struct loop_regs *, rtx, rtx, rtx *);
static void note_addr_stored (rtx, rtx, void *);
static void note_set_pseudo_multiple_uses (rtx, rtx, void *);
static int loop_reg_used_before_p (const struct loop *, rtx, rtx);
static rtx find_regs_nested (rtx, rtx);
static void scan_loop (struct loop*, int);
static rtx skip_consec_insns (rtx, int);
static int libcall_benefit (rtx);
static rtx libcall_other_reg (rtx, rtx);
static void record_excess_regs (rtx, rtx, rtx *);
static void ignore_some_movables (struct loop_movables *);
static void force_movables (struct loop_movables *);
static void combine_movables (struct loop_movables *, struct loop_regs *);
static int num_unmoved_movables (const struct loop *);
static int regs_match_p (rtx, rtx, struct loop_movables *);
static int rtx_equal_for_loop_p (rtx, rtx, struct loop_movables *,
     struct loop_regs *);
static void add_label_notes_loop (rtx, rtx);
static void move_movables (struct loop *loop, struct loop_movables *, int,
      int);
static void loop_movables_add (struct loop_movables *, struct movable *);
static void loop_movables_free (struct loop_movables *);
static int count_nonfixed_reads (const struct loop *, rtx);
static void loop_bivs_find (struct loop *);
static void loop_bivs_init_find (struct loop *);
static void loop_bivs_check (struct loop *);
static void loop_givs_find (struct loop *);
static void loop_givs_check (struct loop *);
static int loop_biv_eliminable_p (struct loop *, struct iv_class *, int, int);
static int loop_giv_reduce_benefit (struct loop *, struct iv_class *,
        struct induction *, rtx);
static void loop_givs_dead_check (struct loop *, struct iv_class *);
static void loop_givs_reduce (struct loop *, struct iv_class *);
static void loop_givs_rescan (struct loop *, struct iv_class *, rtx *);
static void loop_ivs_free (struct loop *);
static void strength_reduce (struct loop *, int);
static void find_single_use_in_loop (struct loop_regs *, rtx, rtx);
static int valid_initial_value_p (rtx, rtx, int, rtx);
static void find_mem_givs (const struct loop *, rtx, rtx, int, int);
static void record_biv (struct loop *, struct induction *, rtx, rtx, rtx,
   rtx, rtx *, int, int);
static void check_final_value (const struct loop *, struct induction *);
static void loop_ivs_dump (const struct loop *, FILE *, int);
static void loop_iv_class_dump (const struct iv_class *, FILE *, int);
static void loop_biv_dump (const struct induction *, FILE *, int);
static void loop_giv_dump (const struct induction *, FILE *, int);
static void record_giv (const struct loop *, struct induction *, rtx, rtx,
   rtx, rtx, rtx, rtx, int, enum g_types, int, int,
   rtx *);
static void update_giv_derive (const struct loop *, rtx);
static void check_ext_dependent_givs (const struct loop *, struct iv_class *);
static int basic_induction_var (const struct loop *, rtx, enum machine_mode,
    rtx, rtx, rtx *, rtx *, rtx **);
static rtx simplify_giv_expr (const struct loop *, rtx, rtx *, int *);
static int general_induction_var (const struct loop *loop, rtx, rtx *, rtx *,
      rtx *, rtx *, int, int *, enum machine_mode);
static int consec_sets_giv (const struct loop *, int, rtx, rtx, rtx, rtx *,
       rtx *, rtx *, rtx *);
static int check_dbra_loop (struct loop *, int);
static rtx express_from_1 (rtx, rtx, rtx);
static rtx combine_givs_p (struct induction *, struct induction *);
static int cmp_combine_givs_stats (const void *, const void *);
static void combine_givs (struct loop_regs *, struct iv_class *);
static int product_cheap_p (rtx, rtx);
static int maybe_eliminate_biv (const struct loop *, struct iv_class *, int,
    int, int);
static int maybe_eliminate_biv_1 (const struct loop *, rtx, rtx,
      struct iv_class *, int, basic_block, rtx);
static int last_use_this_basic_block (rtx, rtx);
static void record_initial (rtx, rtx, void *);
static void update_reg_last_use (rtx, rtx);
static rtx next_insn_in_loop (const struct loop *, rtx);
static void loop_regs_scan (const struct loop *, int);
static int count_insns_in_loop (const struct loop *);
static int find_mem_in_note_1 (rtx *, void *);
static rtx find_mem_in_note (rtx);
static void load_mems (const struct loop *);
static int insert_loop_mem (rtx *, void *);
static int replace_loop_mem (rtx *, void *);
static void replace_loop_mems (rtx, rtx, rtx, int);
static int replace_loop_reg (rtx *, void *);
static void replace_loop_regs (rtx insn, rtx, rtx);
static void note_reg_stored (rtx, rtx, void *);
static void try_copy_prop (const struct loop *, rtx, unsigned int);
static void try_swap_copy_prop (const struct loop *, rtx, unsigned int);
static rtx check_insn_for_givs (struct loop *, rtx, int, int);
static rtx check_insn_for_bivs (struct loop *, rtx, int, int);
static rtx gen_add_mult (rtx, rtx, rtx, rtx);
static void loop_regs_update (const struct loop *, rtx);
static int iv_add_mult_cost (rtx, rtx, rtx, rtx);
static rtx loop_insn_emit_after (const struct loop *, basic_block, rtx, rtx);
static rtx loop_call_insn_emit_before (const struct loop *, basic_block,
           rtx, rtx);
static rtx loop_call_insn_hoist (const struct loop *, rtx);
static rtx loop_insn_sink_or_swim (const struct loop *, rtx);
static void loop_dump_aux (const struct loop *, FILE *, int);
static void loop_delete_insns (rtx, rtx);
static long remove_constant_addition (rtx *);
static rtx gen_load_of_final_value (rtx, rtx);
void debug_ivs (const struct loop *);
void debug_iv_class (const struct iv_class *);
void debug_biv (const struct induction *);
void debug_giv (const struct induction *);
void debug_loop (const struct loop *);
void debug_loops (const struct loops *);
typedef struct loop_replace_args
{
  rtx match;
  rtx replacement;
  rtx insn;
} loop_replace_args;
static int indirect_jump_in_function;
static int indirect_jump_in_function_p (rtx);
static int compute_luids (rtx, rtx, int);
static int biv_elimination_giv_has_0_offset (struct induction *,
          struct induction *, rtx);
static int cost_per_copy;
static int reg_address_cost;
void
init_loop (void)
{
  rtx reg = gen_rtx_REG (word_mode, (((53)) + 4) + 1);
  reg_address_cost = address_cost (reg, SImode);
  cost_per_copy = ((1) * 4);
}
static int
compute_luids (rtx start, rtx end, int prev_luid)
{
  int i;
  rtx insn;
  for (insn = start, i = prev_luid; insn != end; insn = (((insn)->u.fld[2]).rtx1))
    {
      if ((((insn)->u.fld[0]).rtint) >= max_uid_for_loop)
 continue;
      if (((enum rtx_code) (insn)->code) != NOTE
   || (((insn)->u.fld[5]).rtint) <= 0)
 uid_luid[(((insn)->u.fld[0]).rtint)] = ++i;
      else
 uid_luid[(((insn)->u.fld[0]).rtint)] = i;
    }
  return i + 1;
}
void
loop_optimize (rtx f, FILE *dumpfile, int flags)
{
  rtx insn;
  int i;
  struct loops loops_data;
  struct loops *loops = &loops_data;
  struct loop_info *loops_info;
  loop_dump_stream = dumpfile;
  init_recog_no_volatile ();
  max_reg_before_loop = max_reg_num ();
  loop_max_reg = max_reg_before_loop;
  regs_may_share = 0;
  max_loop_num = 0;
  for (insn = f; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == NOTE
   && (((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_BEG)
 max_loop_num++;
    }
  if (max_loop_num == 0)
    return;
  loops->num = max_loop_num;
  max_uid_for_loop = get_max_uid () + 1 + max_loop_num * 32;
  uid_luid = xcalloc (max_uid_for_loop, sizeof (int));
  uid_loop = xcalloc (max_uid_for_loop, sizeof (struct loop *));
  loops->array = xcalloc (loops->num, sizeof (struct loop));
  find_and_verify_loops (f, loops);
  loops_info = xcalloc (loops->num, sizeof (struct loop_info));
  for (i = 0; i < (int) loops->num; i++)
    loops->array[i].aux = loops_info + i;
  reg_scan (f, max_reg_before_loop, 1);
  init_alias_analysis ();
  if (get_max_uid () > max_uid_for_loop)
    abort ();
  max_uid_for_loop = get_max_uid ();
  compute_luids (f, (rtx) 0, 0);
  for (i = 0; i < max_uid_for_loop; i++)
    {
      uid_luid[0] = uid_luid[i];
      if (uid_luid[0] != 0)
 break;
    }
  for (i = 0; i < max_uid_for_loop; i++)
    if (uid_luid[i] == 0)
      uid_luid[i] = uid_luid[i - 1];
  indirect_jump_in_function = indirect_jump_in_function_p (f);
  for (i = max_loop_num - 1; i >= 0; i--)
    {
      struct loop *loop = &loops->array[i];
      if (! loop->invalid && loop->end)
 {
   scan_loop (loop, flags);
   ggc_collect ();
 }
    }
  end_alias_analysis ();
  for (i = 0; i < (int) loops->num; i++)
    free (loops_info[i].mems);
  free (uid_luid);
  free (uid_loop);
  free (loops_info);
  free (loops->array);
}
static rtx
next_insn_in_loop (const struct loop *loop, rtx insn)
{
  insn = (((insn)->u.fld[2]).rtx1);
  if (insn == loop->end)
    {
      if (loop->top)
 insn = loop->top;
      else
 insn = (rtx) 0;
    }
  if (insn == loop->scan_start)
    insn = (rtx) 0;
  return insn;
}
static rtx
find_regs_nested (rtx deps, rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  if (code == REG)
    deps = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (x), (deps));
  else
    {
      const char *fmt = (rtx_format[(int) (code)]);
      int i, j;
      for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
 {
   if (fmt[i] == 'e')
     deps = find_regs_nested (deps, (((x)->u.fld[i]).rtx1));
   else if (fmt[i] == 'E')
     for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
       deps = find_regs_nested (deps, (((((x)->u.fld[i]).rtvec1))->elem[j]));
 }
    }
  return deps;
}
static void
scan_loop (struct loop *loop, int flags)
{
  struct loop_info *loop_info = ((struct loop_info *) (loop)->aux);
  struct loop_regs *regs = (&((struct loop_info *) (loop)->aux)->regs);
  int i;
  rtx loop_start = loop->start;
  rtx loop_end = loop->end;
  rtx p;
  int maybe_never = 0;
  int call_passed = 0;
  int insn_count;
  int tem;
  rtx temp, update_start, update_end;
  rtx set, set1;
  struct loop_movables *movables = (&((struct loop_info *) (loop)->aux)->movables);
  int threshold;
  int loop_depth = 0;
  int in_libcall;
  loop->top = 0;
  movables->head = 0;
  movables->last = 0;
  for (p = (((loop_start)->u.fld[2]).rtx1);
       p != loop_end
  && ((enum rtx_code) (p)->code) != CODE_LABEL && ! ((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN))
  && (((enum rtx_code) (p)->code) != NOTE
      || ((((p)->u.fld[5]).rtint) != NOTE_INSN_LOOP_BEG
   && (((p)->u.fld[5]).rtint) != NOTE_INSN_LOOP_END));
       p = (((p)->u.fld[2]).rtx1))
    ;
  loop->scan_start = p;
  if ((((loop->end)->u.fld[2]).rtx1) != 0)
    loop->sink = (((loop->end)->u.fld[2]).rtx1);
  else
    loop->sink = emit_note_after (NOTE_INSN_DELETED, loop->end);
  prescan_loop (loop);
  threshold = (loop_info->has_call ? 1 : 2) * (1 + n_non_fixed_regs);
  if (((enum rtx_code) (p)->code) == JUMP_INSN
      && any_uncondjump_p (p)
      && (((p)->u.fld[9]).rtx1) != 0
      && (((((((p)->u.fld[9]).rtx1))->u.fld[0]).rtint) < max_uid_for_loop && (((((((p)->u.fld[9]).rtx1))->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[((((((p)->u.fld[9]).rtx1))->u.fld[0]).rtint)] : (abort (), -1)) >= ((((loop_start)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop_start)->u.fld[0]).rtint)] : (abort (), -1)) && (((((((p)->u.fld[9]).rtx1))->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[((((((p)->u.fld[9]).rtx1))->u.fld[0]).rtint)] : (abort (), -1)) <= ((((loop_end)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop_end)->u.fld[0]).rtint)] : (abort (), -1))))
    {
      loop->top = next_label (loop->scan_start);
      loop->scan_start = (((p)->u.fld[9]).rtx1);
    }
  if ((((loop->scan_start)->u.fld[0]).rtint) >= max_uid_for_loop
      || ((enum rtx_code) (loop->scan_start)->code) != CODE_LABEL)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream, "\nLoop from %d to %d is phony.\n\n",
   (((loop_start)->u.fld[0]).rtint), (((loop_end)->u.fld[0]).rtint));
      return;
    }
  loop_regs_scan (loop, loop_info->mems_idx + 16);
  insn_count = count_insns_in_loop (loop);
  if (loop_dump_stream)
    {
      fprintf (loop_dump_stream, "\nLoop from %d to %d: %d real insns.\n",
        (((loop_start)->u.fld[0]).rtint), (((loop_end)->u.fld[0]).rtint), insn_count);
      if (loop->cont)
 fprintf (loop_dump_stream, "Continue at insn %d.\n",
   (((loop->cont)->u.fld[0]).rtint));
    }
  for (in_libcall = 0, p = next_insn_in_loop (loop, loop->scan_start);
       p != (rtx) 0;
       p = next_insn_in_loop (loop, p))
    {
      if (in_libcall && ((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) && find_reg_note (p, REG_RETVAL, (rtx) 0))
 in_libcall--;
      if (((enum rtx_code) (p)->code) == INSN)
 {
   temp = find_reg_note (p, REG_LIBCALL, (rtx) 0);
   if (temp)
     in_libcall++;
   if (! in_libcall
       && (set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0))
       && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
       && ! regs->array[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)].may_not_optimize)
     {
       int tem1 = 0;
       int tem2 = 0;
       int move_insn = 0;
       int insert_temp = 0;
       rtx src = (((set)->u.fld[1]).rtx1);
       rtx dependencies = 0;
       temp = find_reg_note (p, REG_EQUIV, (rtx) 0);
       if (temp)
  src = (((temp)->u.fld[0]).rtx1), move_insn = 1;
       else
  {
    temp = find_reg_note (p, REG_EQUAL, (rtx) 0);
    if (temp && ((rtx_class[(int) (((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code) == CONST_VECTOR))
      src = (((temp)->u.fld[0]).rtx1), move_insn = 1;
    if (temp && find_reg_note (p, REG_RETVAL, (rtx) 0))
      {
        src = (((temp)->u.fld[0]).rtx1);
        dependencies = libcall_other_reg (p, src);
      }
  }
       if (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == PARALLEL)
  {
    for (i = 0; i < ((((((((p)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem); i++)
      {
        rtx x = ((((((((p)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]);
        if (((enum rtx_code) (x)->code) == USE)
   dependencies
     = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), ((((x)->u.fld[0]).rtx1)), (dependencies))
                         ;
        else if (((enum rtx_code) (x)->code) == CLOBBER
          && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
   dependencies = find_regs_nested (dependencies,
        ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1));
      }
  }
       if (
     ! reg_in_basic_block_p (p, (((set)->u.fld[0]).rtx1))
     && (maybe_never
         || loop_reg_used_before_p (loop, set, p)))
  insert_temp = 1;
       if (mode_class[((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode)] == MODE_CC
    && ((rtx_class[(int) (((enum rtx_code) (src)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (src)->code) == CONST_VECTOR))
  ;
       else if (((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= max_reg_before_loop)
  ;
       else if (insert_temp
         && (optimize_size
      || ! can_copy_p (((enum machine_mode) ((((set)->u.fld[1]).rtx1))->mode))
      || (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == REG)
      || (((rtx_class[(int) (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == CONST_VECTOR)
          && legitimate_constant_p ((((set)->u.fld[1]).rtx1)))))
  ;
       else if ((tem = loop_invariant_p (loop, src))
         && (dependencies == 0
      || (tem2
          = loop_invariant_p (loop, dependencies)) != 0)
         && (regs->array[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)].set_in_loop == 1
      || (tem1
          = consec_sets_invariant_p
          (loop, (((set)->u.fld[0]).rtx1),
    regs->array[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)].set_in_loop,
    p)))
         && ! ((maybe_never || call_passed)
        && may_trap_p (src)))
  {
    struct movable *m;
    int regno = ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
    if (loop_info->has_call
        && regs->array[regno].single_usage != 0
        && regs->array[regno].single_usage != (const_int_rtx[64])
        && (((reg_n_info)->data.reg[regno])->first_uid) == (((p)->u.fld[0]).rtint)
        && ((((reg_n_info)->data.reg[regno])->last_uid)
     == (((regs->array[regno].single_usage)->u.fld[0]).rtint))
        && regs->array[regno].set_in_loop == 1
        && ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) != ASM_OPERANDS
        && ! side_effects_p ((((set)->u.fld[1]).rtx1))
        && ! find_reg_note (p, REG_RETVAL, (rtx) 0)
        && (! 1
     || (! ((((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == REG)
     && (((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint)
         < 53))))
        && regno >= 53
        && ! modified_between_p ((((set)->u.fld[1]).rtx1), p,
            regs->array[regno].single_usage)
        && no_labels_between_p (p,
           regs->array[regno].single_usage)
        && validate_replace_rtx ((((set)->u.fld[0]).rtx1), (((set)->u.fld[1]).rtx1),
            regs->array[regno].single_usage))
      {
        (((regs->array[regno].single_usage)->u.fld[8]).rtx1)
   = (replace_rtx
      ((((regs->array[regno].single_usage)->u.fld[8]).rtx1),
       (((set)->u.fld[0]).rtx1), copy_rtx ((((set)->u.fld[1]).rtx1))));
        delete_insn (p);
        for (i = 0; i < ((regno) < 53 ? (int) hard_regno_nregs[(regno)][((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode)] : 1);
      i++)
   regs->array[regno+i].set_in_loop = 0;
        continue;
      }
    m = xmalloc (sizeof (struct movable));
    m->next = 0;
    m->insn = p;
    m->set_src = src;
    m->dependencies = dependencies;
    m->set_dest = (((set)->u.fld[0]).rtx1);
    m->force = 0;
    m->consec
      = regs->array[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)].set_in_loop - 1;
    m->done = 0;
    m->forces = 0;
    m->partial = 0;
    m->move_insn = move_insn;
    m->move_insn_first = 0;
    m->insert_temp = insert_temp;
    m->is_equiv = (find_reg_note (p, REG_EQUIV, (rtx) 0) != 0);
    m->savemode = VOIDmode;
    m->regno = regno;
    m->cond = ((tem | tem1 | tem2) > 1);
    m->global = ((((((reg_n_info)->data.reg[regno])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[regno])->last_uid)] : 2147483647) > (((((loop)->end)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[((((loop)->end)->u.fld[0]).rtint)] : (abort (), -1)) || ((((reg_n_info)->data.reg[regno])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[regno])->first_uid)] : 0) < (((((loop)->start)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[((((loop)->start)->u.fld[0]).rtint)] : (abort (), -1))));
    m->match = 0;
    m->lifetime = ((((((reg_n_info)->data.reg[regno])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[regno])->last_uid)] : 2147483647) - ((((reg_n_info)->data.reg[regno])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[regno])->first_uid)] : 0)));
    m->savings = regs->array[regno].n_times_set;
    if (find_reg_note (p, REG_RETVAL, (rtx) 0))
      m->savings += libcall_benefit (p);
    for (i = 0; i < ((regno) < 53 ? (int) hard_regno_nregs[(regno)][((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode)] : 1); i++)
      regs->array[regno+i].set_in_loop = move_insn ? -2 : -1;
    loop_movables_add (movables, m);
    if (m->consec > 0)
      {
        m->move_insn_first = m->move_insn;
        p = next_nonnote_insn (p);
        p = skip_consec_insns (p, m->consec);
        p = prev_nonnote_insn (p);
        temp = find_reg_note (p, REG_EQUIV, (rtx) 0);
        if (temp)
   m->set_src = (((temp)->u.fld[0]).rtx1), m->move_insn = 1;
        else
   {
     temp = find_reg_note (p, REG_EQUAL, (rtx) 0);
     if (temp && ((rtx_class[(int) (((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code) == CONST_VECTOR))
       m->set_src = (((temp)->u.fld[0]).rtx1), m->move_insn = 1;
     else
       m->move_insn = 0;
   }
        m->is_equiv
   = (find_reg_note (p, REG_EQUIV, (rtx) 0) != 0);
      }
  }
       else if ((((set)->u.fld[1]).rtx1) == (const_int_rtx[64])
         && ((enum rtx_code) ((((p)->u.fld[2]).rtx1))->code) == INSN
         && (set1 = (((((enum rtx_code) ((((p)->u.fld[2]).rtx1))->code) == INSN) || (((enum rtx_code) ((((p)->u.fld[2]).rtx1))->code) == JUMP_INSN) || (((enum rtx_code) ((((p)->u.fld[2]).rtx1))->code) == CALL_INSN)) ? (((enum rtx_code) (((((((p)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->code) == SET ? ((((((p)->u.fld[2]).rtx1))->u.fld[5]).rtx1) : single_set_2 ((((p)->u.fld[2]).rtx1), ((((((p)->u.fld[2]).rtx1))->u.fld[5]).rtx1))) : (rtx) 0))
         && ((enum rtx_code) (set1)->code) == SET
         && (((enum rtx_code) ((((set1)->u.fld[0]).rtx1))->code) == STRICT_LOW_PART)
         && (((enum rtx_code) (((((((set1)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SUBREG)
         && ((((((((((set1)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1)
      == (((set)->u.fld[0]).rtx1))
         && !reg_mentioned_p ((((set)->u.fld[0]).rtx1), (((set1)->u.fld[1]).rtx1)))
  {
    int regno = ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
    if (regs->array[regno].set_in_loop == 2)
      {
        struct movable *m;
        m = xmalloc (sizeof (struct movable));
        m->next = 0;
        m->insn = p;
        m->set_dest = (((set)->u.fld[0]).rtx1);
        m->dependencies = 0;
        m->force = 0;
        m->consec = 0;
        m->done = 0;
        m->forces = 0;
        m->move_insn = 0;
        m->move_insn_first = 0;
        m->insert_temp = insert_temp;
        m->partial = 1;
        m->global = ((((p)->u.fld[0]).rtint) >= max_uid_for_loop
       || ((((((reg_n_info)->data.reg[regno])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[regno])->last_uid)] : 2147483647) > (((((loop)->end)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[((((loop)->end)->u.fld[0]).rtint)] : (abort (), -1)) || ((((reg_n_info)->data.reg[regno])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[regno])->first_uid)] : 0) < (((((loop)->start)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[((((loop)->start)->u.fld[0]).rtint)] : (abort (), -1))))
       || (labels_in_range_p
           (p, ((((reg_n_info)->data.reg[regno])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[regno])->first_uid)] : 0))));
        if (maybe_never && m->global)
   m->savemode = ((enum machine_mode) ((((set1)->u.fld[1]).rtx1))->mode);
        else
   m->savemode = VOIDmode;
        m->regno = regno;
        m->cond = 0;
        m->match = 0;
        m->lifetime = ((((((reg_n_info)->data.reg[regno])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[regno])->last_uid)] : 2147483647) - ((((reg_n_info)->data.reg[regno])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[regno])->first_uid)] : 0)));
        m->savings = 1;
        for (i = 0;
      i < ((regno) < 53 ? (int) hard_regno_nregs[(regno)][((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode)] : 1);
      i++)
   regs->array[regno+i].set_in_loop = -1;
        loop_movables_add (movables, m);
      }
  }
     }
 }
      else if (((enum rtx_code) (p)->code) == CALL_INSN && ! (((p))->unchanging))
 call_passed = 1;
      else if ((((enum rtx_code) (p)->code) == CODE_LABEL || ((enum rtx_code) (p)->code) == JUMP_INSN)
        && ! (((enum rtx_code) (p)->code) == JUMP_INSN && (((p)->u.fld[9]).rtx1) == loop->top
       && ((((((p)->u.fld[2]).rtx1))->u.fld[2]).rtx1) == loop_end
       && any_uncondjump_p (p)))
 maybe_never = 1;
      else if (((enum rtx_code) (p)->code) == NOTE)
 {
   if ((((p)->u.fld[5]).rtint) == NOTE_INSN_LOOP_VTOP && loop_depth == 0)
     maybe_never = call_passed = 0;
   else if ((((p)->u.fld[5]).rtint) == NOTE_INSN_LOOP_BEG)
     loop_depth++;
   else if ((((p)->u.fld[5]).rtint) == NOTE_INSN_LOOP_END)
     loop_depth--;
 }
    }
  ignore_some_movables (movables);
  force_movables (movables);
  combine_movables (movables, regs);
  if (!optimize_size
      || (reg_class_size[GENERAL_REGS] > 18 && !loop_info->has_call))
    {
      move_movables (loop, movables, threshold, insn_count);
      if (max_reg_num () > regs->num)
 {
   loop_regs_scan (loop, 0);
   for (update_start = loop_start;
        (((update_start)->u.fld[1]).rtx1)
        && ((enum rtx_code) ((((update_start)->u.fld[1]).rtx1))->code) != CODE_LABEL;
        update_start = (((update_start)->u.fld[1]).rtx1))
     ;
   update_end = (((loop_end)->u.fld[2]).rtx1);
   reg_scan_update (update_start, update_end, loop_max_reg);
   loop_max_reg = max_reg_num ();
 }
    }
  for (i = 0; i < regs->num; i++)
    if (regs->array[i].set_in_loop < 0)
      regs->array[i].set_in_loop = regs->array[i].n_times_set;
  load_mems (loop);
  if (max_reg_num () > regs->num)
    loop_regs_scan (loop, 0);
  for (update_start = loop_start;
       (((update_start)->u.fld[1]).rtx1)
  && ((enum rtx_code) ((((update_start)->u.fld[1]).rtx1))->code) != CODE_LABEL;
       update_start = (((update_start)->u.fld[1]).rtx1))
    ;
  update_end = (((loop_end)->u.fld[2]).rtx1);
  reg_scan_update (update_start, update_end, loop_max_reg);
  loop_max_reg = max_reg_num ();
  if (flag_strength_reduce)
    {
      if (update_end && ((enum rtx_code) (update_end)->code) == CODE_LABEL)
 (((update_end)->u.fld[4]).rtint)++;
      strength_reduce (loop, flags);
      reg_scan_update (update_start, update_end, loop_max_reg);
      loop_max_reg = max_reg_num ();
      if (update_end && ((enum rtx_code) (update_end)->code) == CODE_LABEL
   && --(((update_end)->u.fld[4]).rtint) == 0)
 delete_related_insns (update_end);
    }
  loop_movables_free (movables);
  free (regs->array);
  regs->array = 0;
  regs->num = 0;
}
static void
record_excess_regs (rtx in_this, rtx not_in_this, rtx *output)
{
  enum rtx_code code;
  const char *fmt;
  int i;
  code = ((enum rtx_code) (in_this)->code);
  switch (code)
    {
    case PC:
    case CC0:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST:
    case SYMBOL_REF:
    case LABEL_REF:
      return;
    case REG:
      if ((((in_this)->u.fld[0]).rtuint) >= 53
   && ! reg_mentioned_p (in_this, not_in_this))
 *output = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (in_this), (*output));
      return;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      int j;
      switch (fmt[i])
 {
 case 'E':
   for (j = 0; j < (((((in_this)->u.fld[i]).rtvec1))->num_elem); j++)
     record_excess_regs ((((((in_this)->u.fld[i]).rtvec1))->elem[j]), not_in_this, output);
   break;
 case 'e':
   record_excess_regs ((((in_this)->u.fld[i]).rtx1), not_in_this, output);
   break;
 }
    }
}
static rtx
libcall_other_reg (rtx insn, rtx equiv)
{
  rtx note = find_reg_note (insn, REG_RETVAL, (rtx) 0);
  rtx p = (((note)->u.fld[0]).rtx1);
  rtx output = 0;
  while (p != insn)
    {
      if (((enum rtx_code) (p)->code) == INSN || ((enum rtx_code) (p)->code) == JUMP_INSN
   || ((enum rtx_code) (p)->code) == CALL_INSN)
 record_excess_regs ((((p)->u.fld[5]).rtx1), equiv, &output);
      p = (((p)->u.fld[2]).rtx1);
    }
  return output;
}
static int
reg_in_basic_block_p (rtx insn, rtx reg)
{
  int regno = (((reg)->u.fld[0]).rtuint);
  rtx p;
  if ((((reg_n_info)->data.reg[regno])->first_uid) != (((insn)->u.fld[0]).rtint))
    return 0;
  for (p = insn; p; p = (((p)->u.fld[2]).rtx1))
    {
      switch (((enum rtx_code) (p)->code))
 {
 case NOTE:
   break;
 case INSN:
 case CALL_INSN:
   if ((((reg_n_info)->data.reg[regno])->last_uid) == (((p)->u.fld[0]).rtint))
     return 1;
   break;
 case JUMP_INSN:
   if ((((reg_n_info)->data.reg[regno])->last_uid) == (((p)->u.fld[0]).rtint))
     return 1;
   return 0;
 case CODE_LABEL:
 case BARRIER:
   return 0;
 default:
   break;
 }
    }
  return 1;
}
static int
libcall_benefit (rtx last)
{
  rtx insn;
  int benefit = 0;
  for (insn = (((find_reg_note (last, REG_RETVAL, (rtx) 0))->u.fld[0]).rtx1);
       insn != last; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 benefit += 10;
      else if (((enum rtx_code) (insn)->code) == INSN
        && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE
        && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != CLOBBER)
 benefit++;
    }
  return benefit;
}
static rtx
skip_consec_insns (rtx insn, int count)
{
  for (; count > 0; count--)
    {
      rtx temp;
      if (((enum rtx_code) (insn)->code) != NOTE
   && (temp = find_reg_note (insn, REG_LIBCALL, (rtx) 0)))
 insn = (((temp)->u.fld[0]).rtx1);
      do
 insn = (((insn)->u.fld[2]).rtx1);
      while (((enum rtx_code) (insn)->code) == NOTE);
    }
  return insn;
}
static void
ignore_some_movables (struct loop_movables *movables)
{
  struct movable *m, *m1;
  for (m = movables->head; m; m = m->next)
    {
      rtx note = find_reg_note (m->insn, REG_RETVAL, (rtx) 0);
      if (note)
 {
   rtx insn;
   for (insn = (((note)->u.fld[0]).rtx1); insn != m->insn; insn = (((insn)->u.fld[2]).rtx1))
     for (m1 = movables->head; m1 != m; m1 = m1->next)
       if (m1->insn == insn)
  m1->done = 1;
 }
    }
}
static void
force_movables (struct loop_movables *movables)
{
  struct movable *m, *m1;
  for (m1 = movables->head; m1; m1 = m1->next)
    if (!m1->partial && !m1->done)
      {
 int regno = m1->regno;
 for (m = m1->next; m; m = m->next)
   if ((((m->insn)->u.fld[0]).rtint) == (((reg_n_info)->data.reg[regno])->last_uid)
       && !m->done)
     break;
 if (m != 0 && m->set_src == m1->set_dest
     && m->consec == 0)
   m = 0;
 if (m != 0)
   {
     struct movable *m2;
     m->forces = m1;
     for (m2 = m1; m2; m2 = m2->forces)
       {
  m2->lifetime += m->lifetime;
  m2->savings += m->savings;
       }
   }
      }
}
static void
combine_movables (struct loop_movables *movables, struct loop_regs *regs)
{
  struct movable *m;
  char *matched_regs = xmalloc (regs->num);
  enum machine_mode mode;
  for (m = movables->head; m; m = m->next)
    if (m->match == 0 && regs->array[m->regno].n_times_set == 1
 && m->regno >= 53
 && !m->insert_temp
 && !m->partial)
      {
 struct movable *m1;
 int regno = m->regno;
 memset (matched_regs, 0, regs->num);
 matched_regs[regno] = 1;
 for (m1 = m->next; m1; m1 = m1->next)
   if (m != m1 && m1->match == 0
       && !m1->insert_temp
       && regs->array[m1->regno].n_times_set == 1
       && m1->regno >= 53
       && !m1->global
       && !m1->partial
       && (matched_regs[m1->regno]
    ||
    (
     (((enum machine_mode) (m->set_dest)->mode) == ((enum machine_mode) (m1->set_dest)->mode)
      || (mode_class[((enum machine_mode) (m->set_dest)->mode)] == MODE_INT
   && mode_class[((enum machine_mode) (m1->set_dest)->mode)] == MODE_INT
   && (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (m->set_dest)->mode)]) * 8))
       >= ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (m1->set_dest)->mode)]) * 8)))))
     && (((((enum rtx_code) (m1->set_src)->code) == REG)
   && matched_regs[(((m1->set_src)->u.fld[0]).rtuint)])
         || rtx_equal_for_loop_p (m->set_src, m1->set_src,
      movables, regs))))
       && ((m->dependencies == m1->dependencies)
    || rtx_equal_p (m->dependencies, m1->dependencies)))
     {
       m->lifetime += m1->lifetime;
       m->savings += m1->savings;
       m1->done = 1;
       m1->match = m;
       matched_regs[m1->regno] = 1;
     }
      }
  for (mode = class_narrowest_mode[MODE_INT]; mode != VOIDmode;
       mode = mode_wider[mode])
    {
      struct movable *m0 = 0;
      for (m = movables->head; m; m = m->next)
 if (m->partial && ! m->global
     && mode == ((enum machine_mode) ((((((((((m->insn)->u.fld[2]).rtx1))->u.fld[5]).rtx1))->u.fld[1]).rtx1))->mode))
   {
     struct movable *m1;
     int first = ((((reg_n_info)->data.reg[m->regno])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[m->regno])->first_uid)] : 0);
     int last = ((((reg_n_info)->data.reg[m->regno])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[m->regno])->last_uid)] : 2147483647);
     if (m0 == 0)
       {
  m0 = m;
  continue;
       }
     if (((enum machine_mode) (m->set_dest)->mode) != ((enum machine_mode) (m0->set_dest)->mode))
       continue;
     for (m1 = movables->head; m1 != m; m1 = m1->next)
       if (m1 == m0 || (m1->partial && m1->match == m0))
  if (! (((((reg_n_info)->data.reg[m1->regno])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[m1->regno])->first_uid)] : 0) > last
         || ((((reg_n_info)->data.reg[m1->regno])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[m1->regno])->last_uid)] : 2147483647) < first))
    goto overlap;
     m0->lifetime += m->lifetime;
     m0->savings += m->savings;
     m->done = 1;
     m->match = m0;
   overlap:
     ;
   }
    }
  free (matched_regs);
}
static int
num_unmoved_movables (const struct loop *loop)
{
  int num = 0;
  struct movable *m;
  for (m = (&((struct loop_info *) (loop)->aux)->movables)->head; m; m = m->next)
    if (!m->done)
      ++num;
  return num;
}
static int
regs_match_p (rtx x, rtx y, struct loop_movables *movables)
{
  unsigned int xn = (((x)->u.fld[0]).rtuint);
  unsigned int yn = (((y)->u.fld[0]).rtuint);
  struct movable *mx, *my;
  for (mx = movables->head; mx; mx = mx->next)
    if (mx->regno == xn)
      break;
  for (my = movables->head; my; my = my->next)
    if (my->regno == yn)
      break;
  return (mx && my
   && ((mx->match == my->match && mx->match != 0)
       || mx->match == my
       || mx == my->match));
}
static int
rtx_equal_for_loop_p (rtx x, rtx y, struct loop_movables *movables,
        struct loop_regs *regs)
{
  int i;
  int j;
  struct movable *m;
  enum rtx_code code;
  const char *fmt;
  if (x == y)
    return 1;
  if (x == 0 || y == 0)
    return 0;
  code = ((enum rtx_code) (x)->code);
  if ((((enum rtx_code) (x)->code) == REG) && regs->array[(((x)->u.fld[0]).rtuint)].set_in_loop == -2
      && ((rtx_class[(int) (((enum rtx_code) (y)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (y)->code) == CONST_VECTOR))
    {
      for (m = movables->head; m; m = m->next)
 if (m->move_insn && m->regno == (((x)->u.fld[0]).rtuint)
     && rtx_equal_p (m->set_src, y))
   return 1;
    }
  else if ((((enum rtx_code) (y)->code) == REG) && regs->array[(((y)->u.fld[0]).rtuint)].set_in_loop == -2
    && ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR))
    {
      for (m = movables->head; m; m = m->next)
 if (m->move_insn && m->regno == (((y)->u.fld[0]).rtuint)
     && rtx_equal_p (m->set_src, x))
   return 1;
    }
  if (code != ((enum rtx_code) (y)->code))
    return 0;
  if (((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode))
    return 0;
  if (code == REG)
    return ((((x)->u.fld[0]).rtuint) == (((y)->u.fld[0]).rtuint) || regs_match_p (x, y, movables));
  if (code == LABEL_REF)
    return (((x)->u.fld[0]).rtx1) == (((y)->u.fld[0]).rtx1);
  if (code == SYMBOL_REF)
    return (((x)->u.fld[0]).rtstr) == (((y)->u.fld[0]).rtstr);
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      switch (fmt[i])
 {
 case 'w':
   if (((x)->u.hwint[i]) != ((y)->u.hwint[i]))
     return 0;
   break;
 case 'i':
   if ((((x)->u.fld[i]).rtint) != (((y)->u.fld[i]).rtint))
     return 0;
   break;
 case 'E':
   if ((((((x)->u.fld[i]).rtvec1))->num_elem) != (((((y)->u.fld[i]).rtvec1))->num_elem))
     return 0;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     if (rtx_equal_for_loop_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), (((((y)->u.fld[i]).rtvec1))->elem[j]),
          movables, regs) == 0)
       return 0;
   break;
 case 'e':
   if (rtx_equal_for_loop_p ((((x)->u.fld[i]).rtx1), (((y)->u.fld[i]).rtx1), movables, regs)
       == 0)
     return 0;
   break;
 case 's':
   if (strcmp ((((x)->u.fld[i]).rtstr), (((y)->u.fld[i]).rtstr)))
     return 0;
   break;
 case 'u':
   break;
 case '0':
   break;
 default:
   abort ();
 }
    }
  return 1;
}
static void
add_label_notes_loop (rtx x, rtx insns)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  int i, j;
  const char *fmt;
  rtx insn;
  if (code == LABEL_REF && !(((x))->volatil))
    {
      for (insn = insns; insn; insn = (((insn)->u.fld[2]).rtx1))
 if (reg_mentioned_p ((((x)->u.fld[0]).rtx1), insn))
   {
     (((insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ue (INSN_LIST, (REG_LABEL), ((((x)->u.fld[0]).rtx1)), ((((insn)->u.fld[8]).rtx1)))
                         ;
     if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CODE_LABEL))
       ((((((x)->u.fld[0]).rtx1))->u.fld[4]).rtint)++;
   }
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 add_label_notes_loop ((((x)->u.fld[i]).rtx1), insns);
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   add_label_notes_loop ((((((x)->u.fld[i]).rtvec1))->elem[j]), insns);
    }
}
static void
move_movables (struct loop *loop, struct loop_movables *movables,
        int threshold, int insn_count)
{
  struct loop_regs *regs = (&((struct loop_info *) (loop)->aux)->regs);
  int nregs = regs->num;
  rtx new_start = 0;
  struct movable *m;
  rtx p;
  rtx loop_start = loop->start;
  rtx loop_end = loop->end;
  rtx *reg_map = xcalloc (nregs, sizeof (rtx));
  char *already_moved = xcalloc (nregs, sizeof (char));
  for (m = movables->head; m; m = m->next)
    {
      if (loop_dump_stream)
 {
   fprintf (loop_dump_stream, "Insn %d: regno %d (life %d), ",
     (((m->insn)->u.fld[0]).rtint), m->regno, m->lifetime);
   if (m->consec > 0)
     fprintf (loop_dump_stream, "consec %d, ", m->consec);
   if (m->cond)
     fprintf (loop_dump_stream, "cond ");
   if (m->force)
     fprintf (loop_dump_stream, "force ");
   if (m->global)
     fprintf (loop_dump_stream, "global ");
   if (m->done)
     fprintf (loop_dump_stream, "done ");
   if (m->move_insn)
     fprintf (loop_dump_stream, "move-insn ");
   if (m->match)
     fprintf (loop_dump_stream, "matches %d ",
       (((m->match->insn)->u.fld[0]).rtint));
   if (m->forces)
     fprintf (loop_dump_stream, "forces %d ",
       (((m->forces->insn)->u.fld[0]).rtint));
 }
      if (!m->done
   && (! m->cond
       || (1 == loop_invariant_p (loop, m->set_src)
    && (m->dependencies == 0
        || 1 == loop_invariant_p (loop, m->dependencies))
    && (m->consec == 0
        || 1 == consec_sets_invariant_p (loop, m->set_dest,
             m->consec + 1,
             m->insn))))
   && (! m->forces || m->forces->done))
 {
   int regno;
   rtx p;
   int savings = m->savings;
   p = m->insn;
   regno = m->regno;
   if (loop_dump_stream)
     fprintf (loop_dump_stream, "savings %d ", savings);
   if (regs->array[regno].moved_once && loop_dump_stream)
     fprintf (loop_dump_stream, "halved since already moved ");
   if (already_moved[regno]
       || flag_move_all_movables
       || (threshold * savings * m->lifetime) >=
   (regs->array[regno].moved_once ? insn_count * 2 : insn_count)
       || (m->forces && m->forces->done
    && regs->array[m->forces->regno].n_times_set == 1))
     {
       int count;
       struct movable *m1;
       rtx first = (rtx) 0;
       rtx newreg = (rtx) 0;
       if (m->insert_temp)
  newreg = gen_reg_rtx (((enum machine_mode) (m->set_dest)->mode));
       if (m->partial && m->match)
  {
    rtx newpat, i1;
    rtx r1, r2;
    for (m1 = m; m1->match; m1 = m1->match);
    newpat = gen_move_insn (((((((m->insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1),
       ((((((m1->insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1));
    i1 = loop_insn_hoist (loop, newpat);
    (((i1)->u.fld[8]).rtx1) = (((m->insn)->u.fld[8]).rtx1);
    r1 = ((((((m->insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1);
    r2 = ((((((m1->insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1);
    regs_may_share
      = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (r1), (gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (r2), (regs_may_share))))
                           ;
    delete_insn (m->insn);
    if (new_start == 0)
      new_start = i1;
    if (loop_dump_stream)
      fprintf (loop_dump_stream, " moved to %d", (((i1)->u.fld[0]).rtint));
  }
       else if (m->move_insn)
  {
    rtx i1, temp, seq;
    for (count = m->consec; count >= 0; count--)
      {
        if (((enum rtx_code) (p)->code) != NOTE
     && (temp = find_reg_note (p, REG_LIBCALL, (rtx) 0)))
   abort ();
        if (((enum rtx_code) (p)->code) != NOTE
     && (temp = find_reg_note (p, REG_RETVAL, (rtx) 0)))
   {
     temp = (((temp)->u.fld[0]).rtx1);
     while (temp != p)
       temp = delete_insn (temp);
   }
        temp = p;
        p = delete_insn (p);
        while (p && ((enum rtx_code) (p)->code) == NOTE)
   p = (((temp)->u.fld[2]).rtx1) = (((p)->u.fld[2]).rtx1);
        if (m->insert_temp)
   {
     start_sequence ();
     emit_move_insn (m->set_dest, newreg);
     seq = get_insns ();
     end_sequence ();
     emit_insn_before (seq, p);
   }
      }
    start_sequence ();
    emit_move_insn (m->insert_temp ? newreg : m->set_dest,
             m->set_src);
    seq = get_insns ();
    end_sequence ();
    add_label_notes_loop (m->set_src, seq);
    i1 = loop_insn_hoist (loop, seq);
    if (! find_reg_note (i1, REG_EQUAL, (rtx) 0))
      set_unique_reg_note (i1,
      m->is_equiv ? REG_EQUIV : REG_EQUAL,
      m->set_src);
    if (loop_dump_stream)
      fprintf (loop_dump_stream, " moved to %d", (((i1)->u.fld[0]).rtint));
    threshold -= 3;
  }
       else
  {
    for (count = m->consec; count >= 0; count--)
      {
        rtx i1, temp;
        if (((enum rtx_code) (p)->code) != NOTE
     && (temp = find_reg_note (p, REG_LIBCALL, (rtx) 0)))
   p = (((temp)->u.fld[0]).rtx1);
        if (((enum rtx_code) (p)->code) != NOTE
     && (temp = find_reg_note (p, REG_RETVAL, (rtx) 0)))
   {
     rtx fn_address = 0;
     rtx fn_reg = 0;
     rtx fn_address_insn = 0;
     first = 0;
     for (temp = (((temp)->u.fld[0]).rtx1); temp != p;
          temp = (((temp)->u.fld[2]).rtx1))
       {
         rtx body;
         rtx n;
         rtx next;
         if (((enum rtx_code) (temp)->code) == NOTE)
    continue;
         body = (((temp)->u.fld[5]).rtx1);
         for (next = (((temp)->u.fld[2]).rtx1); next != p;
       next = (((next)->u.fld[2]).rtx1))
    if (! (((enum rtx_code) (next)->code) == INSN
           && ((enum rtx_code) ((((next)->u.fld[5]).rtx1))->code) == USE)
        && ((enum rtx_code) (next)->code) != NOTE)
      break;
         if (((enum rtx_code) (next)->code) == CALL_INSN
      && ((enum rtx_code) (body)->code) == SET
      && (((enum rtx_code) ((((body)->u.fld[0]).rtx1))->code) == REG)
      && (n = find_reg_note (temp, REG_EQUAL,
        (rtx) 0)))
    {
      fn_reg = (((body)->u.fld[1]).rtx1);
      if (!(((enum rtx_code) (fn_reg)->code) == REG))
        fn_reg = (((body)->u.fld[0]).rtx1);
      fn_address = (((n)->u.fld[0]).rtx1);
      fn_address_insn = temp;
    }
         if (((enum rtx_code) (temp)->code) == CALL_INSN
      && fn_address != 0
      && reg_referenced_p (fn_reg, body))
    loop_insn_emit_after (loop, 0, fn_address_insn,
            gen_move_insn
            (fn_reg, fn_address));
         if (((enum rtx_code) (temp)->code) == CALL_INSN)
    {
      i1 = loop_call_insn_hoist (loop, body);
      if ((((temp)->u.fld[9]).rtx1))
        (((i1)->u.fld[9]).rtx1)
          = copy_rtx ((((temp)->u.fld[9]).rtx1));
    }
         else
    i1 = loop_insn_hoist (loop, body);
         if (first == 0)
    first = i1;
         if (temp == fn_address_insn)
    fn_address_insn = i1;
         (((i1)->u.fld[8]).rtx1) = (((temp)->u.fld[8]).rtx1);
         (((temp)->u.fld[8]).rtx1) = ((void *)0);
         delete_insn (temp);
       }
     if (new_start == 0)
       new_start = first;
   }
        if (m->savemode != VOIDmode)
   {
     rtx reg = m->set_dest;
     rtx sequence;
     rtx tem;
     start_sequence ();
     tem = expand_simple_binop
       (((enum machine_mode) (reg)->mode), AND, reg,
        gen_rtx_CONST_INT (VOIDmode, (long) ((((long) 1 << ((unsigned short) (((unsigned short) mode_size[m->savemode]) * 8)))) - 1))
              ,
        reg, 1, OPTAB_LIB_WIDEN);
     if (tem == 0)
       abort ();
     if (tem != reg)
       emit_move_insn (reg, tem);
     sequence = get_insns ();
     end_sequence ();
     i1 = loop_insn_hoist (loop, sequence);
   }
        else if (((enum rtx_code) (p)->code) == CALL_INSN)
   {
     i1 = loop_call_insn_hoist (loop, (((p)->u.fld[5]).rtx1));
     if ((((p)->u.fld[9]).rtx1))
       (((i1)->u.fld[9]).rtx1)
         = copy_rtx ((((p)->u.fld[9]).rtx1));
   }
        else if (count == m->consec && m->move_insn_first)
   {
     rtx seq;
     start_sequence ();
     emit_move_insn (m->insert_temp ? newreg : m->set_dest,
       m->set_src);
     seq = get_insns ();
     end_sequence ();
     add_label_notes_loop (m->set_src, seq);
     i1 = loop_insn_hoist (loop, seq);
     if (! find_reg_note (i1, REG_EQUAL, (rtx) 0))
       set_unique_reg_note (i1, m->is_equiv ? REG_EQUIV
           : REG_EQUAL, m->set_src);
   }
        else if (m->insert_temp)
   {
     rtx *reg_map2 = xcalloc ((((newreg)->u.fld[0]).rtuint),
         sizeof(rtx));
     reg_map2 [m->regno] = newreg;
     i1 = loop_insn_hoist (loop, copy_rtx ((((p)->u.fld[5]).rtx1)));
     replace_regs (i1, reg_map2, (((newreg)->u.fld[0]).rtuint), 1);
     free (reg_map2);
   }
        else
   i1 = loop_insn_hoist (loop, (((p)->u.fld[5]).rtx1));
        if ((((i1)->u.fld[8]).rtx1) == 0)
   {
     (((i1)->u.fld[8]).rtx1) = (((p)->u.fld[8]).rtx1);
     (((p)->u.fld[8]).rtx1) = ((void *)0);
     if ((temp = find_reg_note (i1, REG_EQUAL, (rtx) 0))
         && ! loop_invariant_p (loop, (((temp)->u.fld[0]).rtx1)))
       remove_note (i1, temp);
   }
        if (new_start == 0)
   new_start = i1;
        if (loop_dump_stream)
   fprintf (loop_dump_stream, " moved to %d",
     (((i1)->u.fld[0]).rtint));
        if ((temp = find_reg_note (i1, REG_RETVAL, (rtx) 0)))
   {
     (((temp)->u.fld[0]).rtx1) = first;
     temp = find_reg_note (first, REG_LIBCALL, (rtx) 0);
     (((temp)->u.fld[0]).rtx1) = i1;
   }
        temp = p;
        delete_insn (p);
        p = (((p)->u.fld[2]).rtx1);
        while (p && ((enum rtx_code) (p)->code) == NOTE)
   p = (((temp)->u.fld[2]).rtx1) = (((p)->u.fld[2]).rtx1);
        if (m->insert_temp)
   {
     rtx seq;
     start_sequence ();
     emit_move_insn (m->set_dest, newreg);
     seq = get_insns ();
     end_sequence ();
     emit_insn_before (seq, p);
   }
      }
    threshold -= 3;
  }
       m->done = 1;
       if (!m->insert_temp)
  {
    already_moved[regno] = 1;
    regs->array[regno].moved_once = 1;
    if (! m->partial)
      {
        int i;
        for (i = 0; i < ((regno) < 53 ? (int) hard_regno_nregs[(regno)][((enum machine_mode) (m->set_dest)->mode)] : 1); i++)
   regs->array[regno+i].set_in_loop = 0;
      }
    if (((((reg_n_info)->data.reg[regno])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[regno])->first_uid)] : 0) > ((((loop_start)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop_start)->u.fld[0]).rtint)] : (abort (), -1)))
      (((reg_n_info)->data.reg[regno])->first_uid) = (((loop_start)->u.fld[0]).rtint);
    if (((((reg_n_info)->data.reg[regno])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[regno])->last_uid)] : 2147483647) < ((((loop_end)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop_end)->u.fld[0]).rtint)] : (abort (), -1)))
      (((reg_n_info)->data.reg[regno])->last_uid) = (((loop_end)->u.fld[0]).rtint);
  }
       if (! m->partial)
  for (m1 = movables->head; m1; m1 = m1->next)
    if (m1->match == m)
      {
        rtx temp;
        if (((enum machine_mode) (m->set_dest)->mode) == ((enum machine_mode) (m1->set_dest)->mode))
   reg_map[m1->regno] = m->set_dest;
        else
   reg_map[m1->regno]
     = gen_lowpart_common (((enum machine_mode) (m1->set_dest)->mode),
      m->set_dest);
        m1->done = 1;
        if ((temp = find_reg_note (m1->insn, REG_RETVAL,
       (rtx) 0)))
   delete_insn_chain ((((temp)->u.fld[0]).rtx1), m1->insn);
        else
          delete_insn (m1->insn);
        already_moved[m1->regno] = 1;
        if (! m->partial)
   {
     int i;
     for (i = 0;
          i < ((regno) < 53 ? (int) hard_regno_nregs[(regno)][((enum machine_mode) (m1->set_dest)->mode)] : 1);
          i++)
       regs->array[m1->regno+i].set_in_loop = 0;
   }
      }
     }
   else if (loop_dump_stream)
     fprintf (loop_dump_stream, "not desirable");
 }
      else if (loop_dump_stream && !m->match)
 fprintf (loop_dump_stream, "not safe");
      if (loop_dump_stream)
 fprintf (loop_dump_stream, "\n");
    }
  if (new_start == 0)
    new_start = loop_start;
  for (p = new_start; p != loop_end; p = (((p)->u.fld[2]).rtx1))
    if (((enum rtx_code) (p)->code) == INSN || ((enum rtx_code) (p)->code) == JUMP_INSN
 || ((enum rtx_code) (p)->code) == CALL_INSN)
      {
 replace_regs ((((p)->u.fld[5]).rtx1), reg_map, nregs, 0);
 replace_regs ((((p)->u.fld[8]).rtx1), reg_map, nregs, 0);
 (((p)->u.fld[6]).rtint) = -1;
      }
  free (reg_map);
  free (already_moved);
}
static void
loop_movables_add (struct loop_movables *movables, struct movable *m)
{
  if (movables->head == 0)
    movables->head = m;
  else
    movables->last->next = m;
  movables->last = m;
}
static void
loop_movables_free (struct loop_movables *movables)
{
  struct movable *m;
  struct movable *m_next;
  for (m = movables->head; m; m = m_next)
    {
      m_next = m->next;
      free (m);
    }
}
static int
count_nonfixed_reads (const struct loop *loop, rtx x)
{
  enum rtx_code code;
  int i;
  const char *fmt;
  int value1;
  if (x == 0)
    return 0;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case PC:
    case CC0:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST:
    case SYMBOL_REF:
    case LABEL_REF:
    case REG:
      return 0;
    case MEM:
      return ((loop_invariant_p (loop, (((x)->u.fld[0]).rtx1)) != 1)
       + count_nonfixed_reads (loop, (((x)->u.fld[0]).rtx1)));
    default:
      break;
    }
  value1 = 0;
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 value1 += count_nonfixed_reads (loop, (((x)->u.fld[i]).rtx1));
      if (fmt[i] == 'E')
 {
   int j;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     value1 += count_nonfixed_reads (loop, (((((x)->u.fld[i]).rtvec1))->elem[j]));
 }
    }
  return value1;
}
static void
prescan_loop (struct loop *loop)
{
  int level = 1;
  rtx insn;
  struct loop_info *loop_info = ((struct loop_info *) (loop)->aux);
  rtx start = loop->start;
  rtx end = loop->end;
  rtx exit_target = next_nonnote_insn (end);
  loop_info->has_indirect_jump = indirect_jump_in_function;
  loop_info->pre_header_has_call = 0;
  loop_info->has_call = 0;
  loop_info->has_nonconst_call = 0;
  loop_info->has_prefetch = 0;
  loop_info->has_volatile = 0;
  loop_info->has_tablejump = 0;
  loop_info->has_multiple_exit_targets = 0;
  loop->level = 1;
  loop_info->unknown_address_altered = 0;
  loop_info->unknown_constant_address_altered = 0;
  loop_info->store_mems = (rtx) 0;
  loop_info->first_loop_store_insn = (rtx) 0;
  loop_info->mems_idx = 0;
  loop_info->num_mem_sets = 0;
  loop_info->preconditioned = (((end)->u.fld[4]).rtint);
  for (insn = start; insn && ((enum rtx_code) (insn)->code) != CODE_LABEL;
       insn = (((insn)->u.fld[1]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 {
   loop_info->pre_header_has_call = 1;
   break;
 }
    }
  for (insn = (((start)->u.fld[2]).rtx1); insn != (((end)->u.fld[2]).rtx1);
       insn = (((insn)->u.fld[2]).rtx1))
    {
      switch (((enum rtx_code) (insn)->code))
 {
 case NOTE:
   if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_BEG)
     {
       ++level;
       loop->level++;
     }
   else if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_END)
     --level;
   break;
 case CALL_INSN:
   if (! (((insn))->unchanging))
     {
       loop_info->unknown_address_altered = 1;
       loop_info->has_nonconst_call = 1;
     }
   else if (pure_call_p (insn))
     loop_info->has_nonconst_call = 1;
   loop_info->has_call = 1;
   if (can_throw_internal (insn))
     loop_info->has_multiple_exit_targets = 1;
   {
     rtx fusage_entry;
     for (fusage_entry = (((insn)->u.fld[9]).rtx1);
   fusage_entry; fusage_entry = (((fusage_entry)->u.fld[1]).rtx1))
       {
  rtx fusage = (((fusage_entry)->u.fld[0]).rtx1);
  if (((enum rtx_code) (fusage)->code) == CLOBBER
      && (((enum rtx_code) ((((fusage)->u.fld[0]).rtx1))->code) == MEM)
      && ((((((fusage)->u.fld[0]).rtx1)))->unchanging))
    {
      note_stores (fusage, note_addr_stored, loop_info);
      if (! loop_info->first_loop_store_insn
   && loop_info->store_mems)
        loop_info->first_loop_store_insn = insn;
    }
       }
   }
   break;
 case JUMP_INSN:
   if (! loop_info->has_multiple_exit_targets)
     {
       rtx set = pc_set (insn);
       if (set)
  {
    rtx src = (((set)->u.fld[1]).rtx1);
    rtx label1, label2;
    if (((enum rtx_code) (src)->code) == IF_THEN_ELSE)
      {
        label1 = (((src)->u.fld[1]).rtx1);
        label2 = (((src)->u.fld[2]).rtx1);
      }
    else
      {
        label1 = src;
        label2 = (rtx) 0;
      }
    do
      {
        if (label1 && label1 != (global_rtl[GR_PC]))
   {
     if (((enum rtx_code) (label1)->code) != LABEL_REF)
       {
         loop_info->has_multiple_exit_targets = 1;
         break;
       }
     else if ((((label1)->u.fld[0]).rtx1) != exit_target
       && (((label1))->in_struct))
       {
         loop_info->has_multiple_exit_targets = 1;
         break;
       }
   }
        label1 = label2;
        label2 = (rtx) 0;
      }
    while (label1);
  }
       else
  {
    loop_info->has_multiple_exit_targets = 1;
  }
     }
 case INSN:
   if (volatile_refs_p ((((insn)->u.fld[5]).rtx1)))
     loop_info->has_volatile = 1;
   if (((enum rtx_code) (insn)->code) == JUMP_INSN
       && (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC
    || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_VEC))
     loop_info->has_tablejump = 1;
   note_stores ((((insn)->u.fld[5]).rtx1), note_addr_stored, loop_info);
   if (! loop_info->first_loop_store_insn && loop_info->store_mems)
     loop_info->first_loop_store_insn = insn;
   if (flag_non_call_exceptions && can_throw_internal (insn))
     loop_info->has_multiple_exit_targets = 1;
   break;
 default:
   break;
 }
    }
  if (
      ! loop_info->has_nonconst_call
      && ! (cfun->calls_alloca)
      && ! loop_info->has_multiple_exit_targets)
    for (insn = (((start)->u.fld[2]).rtx1); insn != (((end)->u.fld[2]).rtx1);
  insn = (((insn)->u.fld[2]).rtx1))
      for_each_rtx (&insn, insert_loop_mem, loop_info);
  if (loop_info->unknown_address_altered)
    {
      rtx mem = gen_rtx_MEM (BLKmode, (const_int_rtx[64]));
      loop_info->store_mems
 = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (mem), (loop_info->store_mems));
    }
  if (loop_info->unknown_constant_address_altered)
    {
      rtx mem = gen_rtx_MEM (BLKmode, (const_int_rtx[64]));
      (((mem))->unchanging) = 1;
      loop_info->store_mems
 = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (mem), (loop_info->store_mems));
    }
}
static void
invalidate_loops_containing_label (rtx label)
{
  struct loop *loop;
  for (loop = uid_loop[(((label)->u.fld[0]).rtint)]; loop; loop = loop->outer)
    loop->invalid = 1;
}
static void
find_and_verify_loops (rtx f, struct loops *loops)
{
  rtx insn;
  rtx label;
  int num_loops;
  struct loop *current_loop;
  struct loop *next_loop;
  struct loop *loop;
  num_loops = loops->num;
  compute_luids (f, (rtx) 0, 0);
  uid_loop[0] = ((void *)0);
  num_loops = 0;
  current_loop = ((void *)0);
  for (insn = f; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == NOTE)
 switch ((((insn)->u.fld[5]).rtint))
   {
   case NOTE_INSN_LOOP_BEG:
     next_loop = loops->array + num_loops;
     next_loop->num = num_loops;
     num_loops++;
     next_loop->start = insn;
     next_loop->outer = current_loop;
     current_loop = next_loop;
     break;
   case NOTE_INSN_LOOP_CONT:
     current_loop->cont = insn;
     break;
   case NOTE_INSN_LOOP_VTOP:
     current_loop->vtop = insn;
     break;
   case NOTE_INSN_LOOP_END:
     if (! current_loop)
       abort ();
     current_loop->end = insn;
     current_loop = current_loop->outer;
     break;
   default:
     break;
   }
      if (((enum rtx_code) (insn)->code) == CALL_INSN
   && find_reg_note (insn, REG_SETJMP, ((void *)0)))
 {
   for (loop = current_loop; loop; loop = loop->outer)
     {
       loop->invalid = 1;
       if (loop_dump_stream)
  fprintf (loop_dump_stream,
    "\nLoop at %d ignored due to setjmp.\n",
    (((loop->start)->u.fld[0]).rtint));
     }
 }
      uid_loop[(((insn)->u.fld[0]).rtint)] = current_loop;
    }
  for (label = (cfun->expr->x_forced_labels); label; label = (((label)->u.fld[1]).rtx1))
    invalidate_loops_containing_label ((((label)->u.fld[0]).rtx1));
  for_each_eh_label (invalidate_loops_containing_label);
  for (insn = f; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      {
 struct loop *this_loop = uid_loop[(((insn)->u.fld[0]).rtint)];
 if (((enum rtx_code) (insn)->code) == INSN || ((enum rtx_code) (insn)->code) == CALL_INSN)
   {
     rtx note = find_reg_note (insn, REG_LABEL, (rtx) 0);
     if (note)
       invalidate_loops_containing_label ((((note)->u.fld[0]).rtx1));
   }
 if (((enum rtx_code) (insn)->code) != JUMP_INSN)
   continue;
 mark_loop_jump ((((insn)->u.fld[5]).rtx1), this_loop);
 if (this_loop
     && (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == RETURN
  || (any_uncondjump_p (insn)
      && onlyjump_p (insn)
      && (uid_loop[((((((insn)->u.fld[9]).rtx1))->u.fld[0]).rtint)]
   != this_loop)))
     && get_max_uid () < max_uid_for_loop)
   {
     rtx p;
     rtx our_next = next_real_insn (insn);
     rtx last_insn_to_move = (((insn)->u.fld[2]).rtx1);
     struct loop *dest_loop;
     struct loop *outer_loop = ((void *)0);
     for (p = (((insn)->u.fld[1]).rtx1);
   ((enum rtx_code) (p)->code) != CODE_LABEL
   && ! (((enum rtx_code) (p)->code) == NOTE
         && (((p)->u.fld[5]).rtint) == NOTE_INSN_LOOP_BEG)
   && ((enum rtx_code) (p)->code) != JUMP_INSN;
   p = (((p)->u.fld[1]).rtx1))
       ;
     if ((((insn)->u.fld[9]).rtx1))
       {
  dest_loop = uid_loop[((((((insn)->u.fld[9]).rtx1))->u.fld[0]).rtint)];
  if (dest_loop)
    {
      for (outer_loop = dest_loop; outer_loop;
    outer_loop = outer_loop->outer)
        if (outer_loop == this_loop)
   break;
    }
       }
     if (((enum rtx_code) (p)->code) == JUMP_INSN && (((p)->u.fld[9]).rtx1)
  && uid_loop[((((((p)->u.fld[9]).rtx1))->u.fld[0]).rtint)] != this_loop)
       outer_loop = this_loop;
     if (! outer_loop
  && ((enum rtx_code) (p)->code) == JUMP_INSN
  && (((p)->u.fld[9]).rtx1) != 0
  && ((((((p)->u.fld[9]).rtx1))->u.fld[0]).rtint) != 0
  && any_condjump_p (p) && onlyjump_p (p)
  && next_real_insn ((((p)->u.fld[9]).rtx1)) == our_next
  && insns_safe_to_move_p (p, (((insn)->u.fld[2]).rtx1),
      &last_insn_to_move))
       {
  rtx target
    = (((insn)->u.fld[9]).rtx1) ? (((insn)->u.fld[9]).rtx1) : get_last_insn ();
  struct loop *target_loop = uid_loop[(((target)->u.fld[0]).rtint)];
  rtx loc, loc2;
  rtx tmp;
  for (tmp = last_insn_to_move;
       tmp && ((enum rtx_code) (tmp)->code) != CODE_LABEL; tmp = (((tmp)->u.fld[2]).rtx1))
    if (((enum rtx_code) (tmp)->code) == BARRIER)
      last_insn_to_move = tmp;
  for (loc = target; loc; loc = (((loc)->u.fld[1]).rtx1))
    if (((enum rtx_code) (loc)->code) == BARRIER
        && ((loc2 = next_nonnote_insn (loc)) == 0
     || ((enum rtx_code) (loc2)->code) != CODE_LABEL
     || (loc2 = next_nonnote_insn (loc2)) == 0
     || ((enum rtx_code) (loc2)->code) != JUMP_INSN
     || (((enum rtx_code) ((((loc2)->u.fld[5]).rtx1))->code) != ADDR_VEC
         && ((enum rtx_code) ((((loc2)->u.fld[5]).rtx1))->code) != ADDR_DIFF_VEC))
        && uid_loop[(((loc)->u.fld[0]).rtint)] == target_loop)
      break;
  if (loc == 0)
    for (loc = target; loc; loc = (((loc)->u.fld[2]).rtx1))
      if (((enum rtx_code) (loc)->code) == BARRIER
   && ((loc2 = next_nonnote_insn (loc)) == 0
       || ((enum rtx_code) (loc2)->code) != CODE_LABEL
       || (loc2 = next_nonnote_insn (loc2)) == 0
       || ((enum rtx_code) (loc2)->code) != JUMP_INSN
       || (((enum rtx_code) ((((loc2)->u.fld[5]).rtx1))->code) != ADDR_VEC
    && ((enum rtx_code) ((((loc2)->u.fld[5]).rtx1))->code) != ADDR_DIFF_VEC))
   && uid_loop[(((loc)->u.fld[0]).rtint)] == target_loop)
        break;
  if (loc)
    {
      rtx cond_label = (((p)->u.fld[9]).rtx1);
      rtx new_label = get_label_after (p);
      (((cond_label)->u.fld[4]).rtint)++;
      if (invert_jump (p, new_label, 1))
        {
   rtx q, r;
   if (loc == 0)
     {
       rtx temp;
       temp = gen_jump ((((insn)->u.fld[9]).rtx1));
       temp = emit_jump_insn_before (temp, target);
       (((temp)->u.fld[9]).rtx1) = (((insn)->u.fld[9]).rtx1);
       ((((((insn)->u.fld[9]).rtx1))->u.fld[4]).rtint)++;
       loc = emit_barrier_before (target);
     }
   if (squeeze_notes (&new_label, &last_insn_to_move))
     abort ();
   reorder_insns (new_label, last_insn_to_move, loc);
   for (q = new_label;
        q != (((last_insn_to_move)->u.fld[2]).rtx1);
        q = (((q)->u.fld[2]).rtx1))
     uid_loop[(((q)->u.fld[0]).rtint)] = target_loop;
   if ((((insn)->u.fld[9]).rtx1))
     {
       for (q = 0, r = this_loop->exit_labels;
     r;
     q = r, r = (((r)->u.fld[1]).rtx1))
         if ((((r)->u.fld[0]).rtx1) == (((insn)->u.fld[9]).rtx1))
    {
      (((r))->in_struct) = 0;
      if (q)
        (((q)->u.fld[1]).rtx1) = (((r)->u.fld[1]).rtx1);
      else
        this_loop->exit_labels = (((r)->u.fld[1]).rtx1);
      break;
    }
       for (loop = this_loop; loop && loop != target_loop;
     loop = loop->outer)
         loop->exit_count--;
       if (! r)
         abort ();
     }
   mark_loop_jump ((((p)->u.fld[5]).rtx1), this_loop);
   if ((((insn)->u.fld[9]).rtx1) != 0
       && (next_real_insn ((((insn)->u.fld[9]).rtx1))
    == next_real_insn (insn)))
     delete_related_insns (insn);
        }
      insn = (((cond_label)->u.fld[2]).rtx1);
      if (--(((cond_label)->u.fld[4]).rtint) == 0)
        delete_related_insns (cond_label);
      insn = (((insn)->u.fld[1]).rtx1);
    }
       }
   }
      }
}
static void
mark_loop_jump (rtx x, struct loop *loop)
{
  struct loop *dest_loop;
  struct loop *outer_loop;
  int i;
  switch (((enum rtx_code) (x)->code))
    {
    case PC:
    case USE:
    case CLOBBER:
    case REG:
    case MEM:
    case CONST_INT:
    case CONST_DOUBLE:
    case RETURN:
      return;
    case CONST:
      mark_loop_jump ((((x)->u.fld[0]).rtx1), loop);
      return;
    case PLUS:
    case MINUS:
    case MULT:
      mark_loop_jump ((((x)->u.fld[0]).rtx1), loop);
      mark_loop_jump ((((x)->u.fld[1]).rtx1), loop);
      return;
    case LO_SUM:
      mark_loop_jump ((((x)->u.fld[1]).rtx1), loop);
      return;
    case SIGN_EXTEND:
    case ZERO_EXTEND:
      mark_loop_jump ((((x)->u.fld[0]).rtx1), loop);
      return;
    case LABEL_REF:
      dest_loop = uid_loop[((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtint)];
      if (dest_loop)
 {
   for (outer_loop = dest_loop; outer_loop;
        outer_loop = outer_loop->outer)
     if (outer_loop == loop)
       break;
 }
      else
 outer_loop = ((void *)0);
      if (loop && ! outer_loop)
 {
   (((x))->in_struct) = 1;
   (((x)->u.fld[1]).rtx1) = loop->exit_labels;
   loop->exit_labels = x;
   for (outer_loop = loop;
        outer_loop && outer_loop != dest_loop;
        outer_loop = outer_loop->outer)
     outer_loop->exit_count++;
 }
      if (! dest_loop)
 return;
      for (; dest_loop; dest_loop = dest_loop->outer)
 {
   for (outer_loop = loop; outer_loop; outer_loop = outer_loop->outer)
     if (dest_loop == outer_loop)
       return;
   if (loop_dump_stream && ! dest_loop->invalid)
     fprintf (loop_dump_stream,
       "\nLoop at %d ignored due to multiple entry points.\n",
       (((dest_loop->start)->u.fld[0]).rtint));
   dest_loop->invalid = 1;
 }
      return;
    case SET:
      if ((((x)->u.fld[0]).rtx1) == (global_rtl[GR_PC]))
 mark_loop_jump ((((x)->u.fld[1]).rtx1), loop);
      return;
    case IF_THEN_ELSE:
      mark_loop_jump ((((x)->u.fld[1]).rtx1), loop);
      mark_loop_jump ((((x)->u.fld[2]).rtx1), loop);
      return;
    case PARALLEL:
    case ADDR_VEC:
      for (i = 0; i < (((((x)->u.fld[0]).rtvec1))->num_elem); i++)
 mark_loop_jump ((((((x)->u.fld[0]).rtvec1))->elem[i]), loop);
      return;
    case ADDR_DIFF_VEC:
      for (i = 0; i < (((((x)->u.fld[1]).rtvec1))->num_elem); i++)
 mark_loop_jump ((((((x)->u.fld[1]).rtvec1))->elem[i]), loop);
      return;
    default:
      if (loop)
 {
   for (outer_loop = loop; outer_loop; outer_loop = outer_loop->outer)
     {
       if (loop_dump_stream && ! outer_loop->invalid)
  fprintf (loop_dump_stream,
    "\nLoop at %d ignored due to unknown exit jump.\n",
    (((outer_loop->start)->u.fld[0]).rtint));
       outer_loop->invalid = 1;
     }
 }
      return;
    }
}
static int
labels_in_range_p (rtx insn, int end)
{
  while (insn && ((((insn)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((insn)->u.fld[0]).rtint)] : (abort (), -1)) <= end)
    {
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 return 1;
      insn = (((insn)->u.fld[2]).rtx1);
    }
  return 0;
}
static void
note_addr_stored (rtx x, rtx y ,
    void *data )
{
  struct loop_info *loop_info = data;
  if (x == 0 || !(((enum rtx_code) (x)->code) == MEM))
    return;
  loop_info->num_mem_sets++;
  if (((enum machine_mode) (x)->mode) == BLKmode)
    {
      if ((((x))->unchanging))
 loop_info->unknown_constant_address_altered = 1;
      else
 loop_info->unknown_address_altered = 1;
      return;
    }
  loop_info->store_mems = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (x), (loop_info->store_mems))
                                ;
}
static void
note_set_pseudo_multiple_uses (rtx x, rtx y , void *data)
{
  struct loop_regs *regs = (struct loop_regs *) data;
  if (x == 0)
    return;
  while (((enum rtx_code) (x)->code) == STRICT_LOW_PART
  || ((enum rtx_code) (x)->code) == SIGN_EXTRACT
  || ((enum rtx_code) (x)->code) == ZERO_EXTRACT
  || ((enum rtx_code) (x)->code) == SUBREG)
    x = (((x)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (x)->code) == REG) || (((x)->u.fld[0]).rtuint) < 53)
    return;
  if ((((x)->u.fld[0]).rtuint) >= max_reg_before_loop
      || ! regs->array[(((x)->u.fld[0]).rtuint)].single_usage
      || regs->array[(((x)->u.fld[0]).rtuint)].single_usage == (const_int_rtx[64]))
    regs->multiple_uses = 1;
}
int
loop_invariant_p (const struct loop *loop, rtx x)
{
  struct loop_info *loop_info = ((struct loop_info *) (loop)->aux);
  struct loop_regs *regs = (&((struct loop_info *) (loop)->aux)->regs);
  int i;
  enum rtx_code code;
  const char *fmt;
  int conditional = 0;
  rtx mem_list_entry;
  if (x == 0)
    return 1;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case CONST_INT:
    case CONST_DOUBLE:
    case SYMBOL_REF:
    case CONST:
      return 1;
    case LABEL_REF:
      if (flag_old_unroll_loops)
 return 0;
      else
 return 1;
    case PC:
    case CC0:
    case UNSPEC_VOLATILE:
      return 0;
    case REG:
      if ((x == (global_rtl[GR_FRAME_POINTER]) || x == (global_rtl[GR_HARD_FRAME_POINTER])
    || x == (global_rtl[GR_ARG_POINTER]) || x == pic_offset_table_rtx)
   && ! (cfun->has_nonlocal_goto))
 return 1;
      if (((struct loop_info *) (loop)->aux)->has_call
   && (((x)->u.fld[0]).rtuint) < 53 && call_used_regs[(((x)->u.fld[0]).rtuint)])
 return 0;
      if ((((x)->u.fld[0]).rtuint) >= (unsigned) regs->num)
 return 0;
      if (regs->array[(((x)->u.fld[0]).rtuint)].set_in_loop < 0)
 return 2;
      return regs->array[(((x)->u.fld[0]).rtuint)].set_in_loop == 0;
    case MEM:
      if ((((x))->volatil))
 return 0;
      mem_list_entry = loop_info->store_mems;
      while (mem_list_entry)
 {
   if (true_dependence ((((mem_list_entry)->u.fld[0]).rtx1), VOIDmode,
          x, rtx_varies_p))
     return 0;
   mem_list_entry = (((mem_list_entry)->u.fld[1]).rtx1);
 }
      break;
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 0;
      break;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   int tem = loop_invariant_p (loop, (((x)->u.fld[i]).rtx1));
   if (tem == 0)
     return 0;
   if (tem == 2)
     conditional = 1;
 }
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     {
       int tem = loop_invariant_p (loop, (((((x)->u.fld[i]).rtvec1))->elem[j]));
       if (tem == 0)
  return 0;
       if (tem == 2)
  conditional = 1;
     }
 }
    }
  return 1 + conditional;
}
static int
consec_sets_invariant_p (const struct loop *loop, rtx reg, int n_sets,
    rtx insn)
{
  struct loop_regs *regs = (&((struct loop_info *) (loop)->aux)->regs);
  rtx p = insn;
  unsigned int regno = (((reg)->u.fld[0]).rtuint);
  rtx temp;
  int count = n_sets - 1;
  int old = regs->array[regno].set_in_loop;
  int value1 = 0;
  int this;
  if (n_sets == 127)
    return 0;
  regs->array[regno].set_in_loop = 0;
  while (count > 0)
    {
      enum rtx_code code;
      rtx set;
      p = (((p)->u.fld[2]).rtx1);
      code = ((enum rtx_code) (p)->code);
      if (code == INSN && (temp = find_reg_note (p, REG_LIBCALL, (rtx) 0)))
 p = (((temp)->u.fld[0]).rtx1);
      this = 0;
      if (code == INSN
   && (set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0))
   && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
   && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == regno)
 {
   this = loop_invariant_p (loop, (((set)->u.fld[1]).rtx1));
   if (this != 0)
     value1 |= this;
   else if ((temp = find_reg_note (p, REG_EQUAL, (rtx) 0)))
     {
       this = (((rtx_class[(int) (((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code) == CONST_VECTOR)
        || (find_reg_note (p, REG_RETVAL, (rtx) 0)
     && loop_invariant_p (loop, (((temp)->u.fld[0]).rtx1))));
       if (this != 0)
  value1 |= this;
     }
 }
      if (this != 0)
 count--;
      else if (code != NOTE)
 {
   regs->array[regno].set_in_loop = old;
   return 0;
 }
    }
  regs->array[regno].set_in_loop = old;
  return 1 + (value1 & 2);
}
static void
find_single_use_in_loop (struct loop_regs *regs, rtx insn, rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt = (rtx_format[(int) (code)]);
  int i, j;
  if (code == REG)
    regs->array[(((x)->u.fld[0]).rtuint)].single_usage
      = (regs->array[(((x)->u.fld[0]).rtuint)].single_usage != 0
  && regs->array[(((x)->u.fld[0]).rtuint)].single_usage != insn)
 ? (const_int_rtx[64]) : insn;
  else if (code == SET)
    {
      if (!(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 find_single_use_in_loop (regs, insn, (((x)->u.fld[0]).rtx1));
      find_single_use_in_loop (regs, insn, (((x)->u.fld[1]).rtx1));
    }
  else
    for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
      {
 if (fmt[i] == 'e' && (((x)->u.fld[i]).rtx1) != 0)
   find_single_use_in_loop (regs, insn, (((x)->u.fld[i]).rtx1));
 else if (fmt[i] == 'E')
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     find_single_use_in_loop (regs, insn, (((((x)->u.fld[i]).rtvec1))->elem[j]));
      }
}
static void
count_one_set (struct loop_regs *regs, rtx insn, rtx x, rtx *last_set)
{
  if (((enum rtx_code) (x)->code) == CLOBBER && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
    regs->array[((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)].may_not_optimize = 1;
  if (((enum rtx_code) (x)->code) == SET || ((enum rtx_code) (x)->code) == CLOBBER)
    {
      rtx dest = (((x)->u.fld[0]).rtx1);
      while (((enum rtx_code) (dest)->code) == SUBREG
      || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT
      || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT
      || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
 dest = (((dest)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (dest)->code) == REG))
 {
   int i;
   int regno = (((dest)->u.fld[0]).rtuint);
   for (i = 0; i < ((regno) < 53 ? (int) hard_regno_nregs[(regno)][((enum machine_mode) (dest)->mode)] : 1); i++)
     {
       if (regs->array[regno].set_in_loop > 0
    && last_set[regno] == 0)
  regs->array[regno+i].may_not_optimize = 1;
       if (last_set[regno] != 0
    && reg_used_between_p (dest, last_set[regno], insn))
  regs->array[regno+i].may_not_optimize = 1;
       if (regs->array[regno+i].set_in_loop < 127)
  ++regs->array[regno+i].set_in_loop;
       last_set[regno+i] = insn;
     }
 }
    }
}
static int
loop_reg_used_before_p (const struct loop *loop, rtx set, rtx insn)
{
  rtx reg = (((set)->u.fld[0]).rtx1);
  rtx p;
  for (p = loop->scan_start; p != insn; p = (((p)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) && reg_overlap_mentioned_p (reg, (((p)->u.fld[5]).rtx1)))
 return 1;
      if (p == loop->end)
 p = loop->start;
    }
  return 0;
}
struct prefetch_info
{
  struct iv_class *class;
  struct induction *giv;
  rtx base_address;
  long index;
  long stride;
  unsigned int bytes_accessed;
  unsigned int total_bytes;
  int prefetch_in_loop;
  int prefetch_before_loop;
  unsigned int write : 1;
};
struct check_store_data
{
  rtx mem_address;
  int mem_write;
};
static void check_store (rtx, rtx, void *);
static void emit_prefetch_instructions (struct loop *);
static int rtx_equal_for_prefetch_p (rtx, rtx);
static void
check_store (rtx x, rtx pat , void *data)
{
  struct check_store_data *d = (struct check_store_data *) data;
  if (((((enum rtx_code) (x)->code) == MEM)) && rtx_equal_p (d->mem_address, (((x)->u.fld[0]).rtx1)))
    d->mem_write = 1;
}
static int
rtx_equal_for_prefetch_p (rtx x, rtx y)
{
  int i;
  int j;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt;
  if (x == y)
    return 1;
  if (code != ((enum rtx_code) (y)->code))
    return 0;
  if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_COMM_ARITH))
    {
      return ((rtx_equal_for_prefetch_p ((((x)->u.fld[0]).rtx1), (((y)->u.fld[0]).rtx1))
        && rtx_equal_for_prefetch_p ((((x)->u.fld[1]).rtx1), (((y)->u.fld[1]).rtx1)))
       || (rtx_equal_for_prefetch_p ((((x)->u.fld[0]).rtx1), (((y)->u.fld[1]).rtx1))
           && rtx_equal_for_prefetch_p ((((x)->u.fld[1]).rtx1), (((y)->u.fld[0]).rtx1))));
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      switch (fmt[i])
 {
 case 'w':
   if (((x)->u.hwint[i]) != ((y)->u.hwint[i]))
     return 0;
   break;
 case 'i':
   if ((((x)->u.fld[i]).rtint) != (((y)->u.fld[i]).rtint))
     return 0;
   break;
 case 'E':
   if ((((((x)->u.fld[i]).rtvec1))->num_elem) != (((((y)->u.fld[i]).rtvec1))->num_elem))
     return 0;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     if (rtx_equal_for_prefetch_p ((((((x)->u.fld[i]).rtvec1))->elem[j]),
       (((((y)->u.fld[i]).rtvec1))->elem[j])) == 0)
       return 0;
   break;
 case 'e':
   if (rtx_equal_for_prefetch_p ((((x)->u.fld[i]).rtx1), (((y)->u.fld[i]).rtx1)) == 0)
     return 0;
   break;
 case 's':
   if (strcmp ((((x)->u.fld[i]).rtstr), (((y)->u.fld[i]).rtstr)))
     return 0;
   break;
 case 'u':
   break;
 case '0':
   break;
 default:
   abort ();
 }
    }
  return 1;
}
static long
remove_constant_addition (rtx *x)
{
  long addval = 0;
  rtx exp = *x;
  if (((enum rtx_code) (exp)->code) == CONST)
    {
      if (((enum rtx_code) ((((exp)->u.fld[0]).rtx1))->code) == PLUS
   && ((enum rtx_code) (((((((exp)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SYMBOL_REF
   && ((enum rtx_code) (((((((exp)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
 {
   *x = ((((((exp)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   return ((((((((exp)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
 }
      return 0;
    }
  if (((enum rtx_code) (exp)->code) == CONST_INT)
    {
      addval = ((exp)->u.hwint[0]);
      *x = (const_int_rtx[64]);
    }
  else if (((enum rtx_code) (exp)->code) == PLUS)
    {
      addval += remove_constant_addition (&(((exp)->u.fld[0]).rtx1));
      addval += remove_constant_addition (&(((exp)->u.fld[1]).rtx1));
      if ((((exp)->u.fld[0]).rtx1) == (const_int_rtx[64]))
 *x = (((exp)->u.fld[1]).rtx1);
      else if ((((exp)->u.fld[1]).rtx1) == (const_int_rtx[64]))
 *x = (((exp)->u.fld[0]).rtx1);
    }
  return addval;
}
static void
emit_prefetch_instructions (struct loop *loop)
{
  int num_prefetches = 0;
  int num_real_prefetches = 0;
  int num_real_write_prefetches = 0;
  int num_prefetches_before = 0;
  int num_write_prefetches_before = 0;
  int ahead = 0;
  int i;
  struct iv_class *bl;
  struct induction *iv;
  struct prefetch_info info[100];
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  if (!((x86_prefetch_sse) || ((target_flags & 0x00020000) != 0)))
    return;
  if (1 && ((struct loop_info *) (loop)->aux)->has_call)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream, "Prefetch: ignoring loop: has call.\n");
      return;
    }
  if (1
      && ((struct loop_info *) (loop)->aux)->n_iterations
      && ((struct loop_info *) (loop)->aux)->n_iterations <= 32)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Prefetch: ignoring loop: not enough iterations.\n");
      return;
    }
  for (bl = ivs->list; bl; bl = bl->next)
    {
      struct induction *biv = bl->biv, *biv1;
      int basestride = 0;
      biv1 = biv;
      while (biv1)
 {
   if (((enum rtx_code) (biv->add_val)->code) != CONST_INT)
     {
       if (loop_dump_stream)
  {
    fprintf (loop_dump_stream,
      "Prefetch: ignoring biv %d: non-constant addition at insn %d:",
      (((biv->src_reg)->u.fld[0]).rtuint), (((biv->insn)->u.fld[0]).rtint));
    print_rtl (loop_dump_stream, biv->add_val);
    fprintf (loop_dump_stream, "\n");
  }
       break;
     }
   if (biv->maybe_multiple)
     {
       if (loop_dump_stream)
  {
    fprintf (loop_dump_stream,
      "Prefetch: ignoring biv %d: maybe_multiple at insn %i:",
      (((biv->src_reg)->u.fld[0]).rtuint), (((biv->insn)->u.fld[0]).rtint));
    print_rtl (loop_dump_stream, biv->add_val);
    fprintf (loop_dump_stream, "\n");
  }
       break;
     }
   basestride += ((biv1->add_val)->u.hwint[0]);
   biv1 = biv1->next_iv;
 }
      if (biv1 || !basestride)
 continue;
      for (iv = bl->giv; iv; iv = iv->next_iv)
 {
   rtx address;
   rtx temp;
   long index = 0;
   int add = 1;
   long stride = 0;
   int stride_sign = 1;
   struct check_store_data d;
   const char *ignore_reason = ((void *)0);
   int size = ((unsigned short) mode_size[((enum machine_mode) (iv)->mode)]);
   if (iv->giv_type != DEST_ADDR)
     ignore_reason = "giv is not a destination address";
   else if (((enum rtx_code) (iv->mult_val)->code) != CONST_INT)
     ignore_reason = "stride is not constant";
   else
     {
       stride = ((iv->mult_val)->u.hwint[0]) * basestride;
       if (stride < 0)
  {
    stride = -stride;
    stride_sign = -1;
  }
       if (1 && stride_sign < 0)
  ignore_reason = "reversed order stride";
       else if (1
         && stride > 4096)
  ignore_reason = "extreme stride";
       else if (!loop_invariant_p (loop, iv->add_val))
  ignore_reason = "giv has varying add value";
       else if (iv->maybe_multiple)
  ignore_reason = "giv is in nested loop";
     }
   if (ignore_reason != ((void *)0))
     {
       if (loop_dump_stream)
  fprintf (loop_dump_stream,
    "Prefetch: ignoring giv at %d: %s.\n",
    (((iv->insn)->u.fld[0]).rtint), ignore_reason);
       continue;
     }
   address = copy_rtx (iv->add_val);
   temp = copy_rtx (bl->initial_value);
   address = simplify_gen_binary (PLUS, (0 ? DImode : SImode), temp, address);
   index = remove_constant_addition (&address);
   d.mem_write = 0;
   d.mem_address = *iv->location;
   if (1 || iv->always_executed)
     note_stores ((((iv->insn)->u.fld[5]).rtx1), check_store, &d);
   else
     {
       if (loop_dump_stream)
  fprintf (loop_dump_stream, "Prefetch: Ignoring giv at %d: %s\n",
    (((iv->insn)->u.fld[0]).rtint), "in conditional code.");
       continue;
     }
   for (i = 0; i < num_prefetches; i++)
     if (rtx_equal_for_prefetch_p (address, info[i].base_address)
  && stride == info[i].stride)
       {
  if (index >= info[i].index
      && index - info[i].index < 4096)
    {
      info[i].write |= d.mem_write;
      info[i].bytes_accessed += size;
      info[i].index = index;
      info[i].giv = iv;
      info[i].class = bl;
      info[num_prefetches].base_address = address;
      add = 0;
      break;
    }
  if (index < info[i].index
      && info[i].index - index < 4096)
    {
      info[i].write |= d.mem_write;
      info[i].bytes_accessed += size;
      add = 0;
      break;
    }
       }
   if (add)
     {
       info[num_prefetches].giv = iv;
       info[num_prefetches].class = bl;
       info[num_prefetches].index = index;
       info[num_prefetches].stride = stride;
       info[num_prefetches].base_address = address;
       info[num_prefetches].write = d.mem_write;
       info[num_prefetches].bytes_accessed = size;
       num_prefetches++;
       if (num_prefetches >= 100)
  {
    if (loop_dump_stream)
      fprintf (loop_dump_stream,
        "Maximal number of prefetches exceeded.\n");
    return;
  }
     }
 }
    }
  for (i = 0; i < num_prefetches; i++)
    {
      int density;
      if (((struct loop_info *) (loop)->aux)->n_iterations
   && ((unsigned long) (0xffffffff / info[i].stride)
       >= ((struct loop_info *) (loop)->aux)->n_iterations))
 info[i].total_bytes = info[i].stride * ((struct loop_info *) (loop)->aux)->n_iterations;
      else
 info[i].total_bytes = 0xffffffff;
      density = info[i].bytes_accessed * 100 / info[i].stride;
      if (1)
 if (density * 256 > 220 * 100
     && (info[i].total_bytes / ix86_cost->prefetch_block
  >= 2))
   {
     info[i].prefetch_before_loop = 1;
     info[i].prefetch_in_loop
       = (info[i].total_bytes / ix86_cost->prefetch_block
   > 6);
   }
 else
   {
     info[i].prefetch_in_loop = 0, info[i].prefetch_before_loop = 0;
     if (loop_dump_stream)
       fprintf (loop_dump_stream,
    "Prefetch: ignoring giv at %d: %d%% density is too low.\n",
         (((info[i].giv->insn)->u.fld[0]).rtint), density);
   }
      else
 info[i].prefetch_in_loop = 1, info[i].prefetch_before_loop = 1;
      if (info[i].prefetch_in_loop != 0)
 {
   info[i].prefetch_in_loop = ((info[i].stride + ix86_cost->prefetch_block - 1)
      / ix86_cost->prefetch_block);
   num_real_prefetches += info[i].prefetch_in_loop;
   if (info[i].write)
     num_real_write_prefetches += info[i].prefetch_in_loop;
 }
    }
  if (num_real_prefetches != 0)
    {
      if ((ahead = ix86_cost->simultaneous_prefetches / num_real_prefetches) == 0)
 {
   if (loop_dump_stream)
     fprintf (loop_dump_stream,
       "Prefetch: ignoring prefetches within loop: ahead is zero; %d < %d\n",
       ix86_cost->simultaneous_prefetches, num_real_prefetches);
   num_real_prefetches = 0, num_real_write_prefetches = 0;
 }
    }
  if (ahead == 0)
    ahead = 6;
  for (i = 0; i < num_prefetches; i++)
    {
      if (num_real_prefetches == 0)
 info[i].prefetch_in_loop = 0;
      if (info[i].prefetch_before_loop != 0)
 {
   int n = info[i].total_bytes / ix86_cost->prefetch_block;
   if (n > ahead)
     n = ahead;
   info[i].prefetch_before_loop = n;
   num_prefetches_before += n;
   if (info[i].write)
     num_write_prefetches_before += n;
 }
      if (loop_dump_stream)
 {
   if (info[i].prefetch_in_loop == 0
       && info[i].prefetch_before_loop == 0)
     continue;
   fprintf (loop_dump_stream, "Prefetch insn: %d",
     (((info[i].giv->insn)->u.fld[0]).rtint));
   fprintf (loop_dump_stream,
     "; in loop: %d; before: %d; %s\n",
     info[i].prefetch_in_loop,
     info[i].prefetch_before_loop,
     info[i].write ? "read/write" : "read only");
   fprintf (loop_dump_stream,
     " density: %d%%; bytes_accessed: %u; total_bytes: %u\n",
     (int) (info[i].bytes_accessed * 100 / info[i].stride),
     info[i].bytes_accessed, info[i].total_bytes);
   fprintf (loop_dump_stream, " index: %ld; stride: %ld; address: ",
     info[i].index, info[i].stride);
   print_rtl (loop_dump_stream, info[i].base_address);
   fprintf (loop_dump_stream, "\n");
 }
    }
  if (num_real_prefetches + num_prefetches_before > 0)
    {
      ((struct loop_info *) (loop)->aux)->has_prefetch = 1;
      if (loop_dump_stream)
 {
   fprintf (loop_dump_stream, "Real prefetches needed within loop: %d (write: %d)\n",
     num_real_prefetches, num_real_write_prefetches);
   fprintf (loop_dump_stream, "Real prefetches needed before loop: %d (write: %d)\n",
     num_prefetches_before, num_write_prefetches_before);
 }
    }
  for (i = 0; i < num_prefetches; i++)
    {
      int y;
      for (y = 0; y < info[i].prefetch_in_loop; y++)
 {
   rtx loc = copy_rtx (*info[i].giv->location);
   rtx insn;
   int bytes_ahead = ix86_cost->prefetch_block * (ahead + y);
   rtx before_insn = info[i].giv->insn;
   rtx prev_insn = (((info[i].giv->insn)->u.fld[1]).rtx1);
   rtx seq;
   if (offsettable_address_p (0, VOIDmode, loc))
     loc = plus_constant_wide ((loc), (long) (bytes_ahead));
   else
     {
       rtx reg = gen_reg_rtx ((0 ? DImode : SImode));
       loop_iv_add_mult_emit_before (loop, loc, (const_int_rtx[64 +1]),
         gen_rtx_CONST_INT (VOIDmode, (long) (bytes_ahead)), reg,
         0, before_insn);
       loc = reg;
     }
   start_sequence ();
   if (! (*insn_data[(int)CODE_FOR_prefetch].operand[0].predicate)
    (loc, insn_data[(int)CODE_FOR_prefetch].operand[0].mode))
     loc = force_reg ((0 ? DImode : SImode), loc);
   emit_insn (gen_prefetch (loc, gen_rtx_CONST_INT (VOIDmode, (long) (info[i].write)),
       gen_rtx_CONST_INT (VOIDmode, (long) (3))));
   seq = get_insns ();
   end_sequence ();
   emit_insn_before (seq, before_insn);
   insn = (((prev_insn)->u.fld[2]).rtx1);
   while (insn != before_insn)
     {
       insn = check_insn_for_givs (loop, insn,
       info[i].giv->always_executed,
       info[i].giv->maybe_multiple);
       insn = (((insn)->u.fld[2]).rtx1);
     }
 }
      if (1)
 {
   for (y = 0; y < info[i].prefetch_before_loop; y++)
     {
       rtx reg = gen_reg_rtx ((0 ? DImode : SImode));
       rtx loop_start = loop->start;
       rtx init_val = info[i].class->initial_value;
       rtx add_val = simplify_gen_binary (PLUS, (0 ? DImode : SImode),
       info[i].giv->add_val,
       gen_rtx_CONST_INT (VOIDmode, (long) (y * ix86_cost->prefetch_block)));
       if (((enum machine_mode) (init_val)->mode) != (0 ? DImode : SImode) && !((rtx_class[(int) (((enum rtx_code) (init_val)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (init_val)->code) == CONST_VECTOR))
  {
    rtx seq;
    start_sequence ();
    init_val = convert_to_mode ((0 ? DImode : SImode), init_val, 0);
    seq = get_insns ();
    end_sequence ();
    loop_insn_emit_before (loop, 0, loop_start, seq);
  }
       loop_iv_add_mult_emit_before (loop, init_val,
         info[i].giv->mult_val,
         add_val, reg, 0, loop_start);
       emit_insn_before (gen_prefetch (reg, gen_rtx_CONST_INT (VOIDmode, (long) (info[i].write)),
           gen_rtx_CONST_INT (VOIDmode, (long) (3))),
    loop_start);
     }
 }
    }
  return;
}
static rtx note_insn;
static rtx addr_placeholder;
void
for_each_insn_in_loop (struct loop *loop, loop_insn_callback fncall)
{
  int not_every_iteration = 0;
  int maybe_multiple = 0;
  int past_loop_latch = 0;
  int loop_depth = 0;
  rtx p;
  if (prev_nonnote_insn (loop->scan_start) != prev_nonnote_insn (loop->start))
    maybe_multiple = back_branch_in_range_p (loop, loop->scan_start);
  for (p = next_insn_in_loop (loop, loop->scan_start);
       p != (rtx) 0;
       p = next_insn_in_loop (loop, p))
    {
      p = fncall (loop, p, not_every_iteration, maybe_multiple);
      if (((enum rtx_code) (p)->code) == CODE_LABEL)
 {
   rtx insn = p;
   maybe_multiple = 0;
   while (1)
     {
       insn = (((insn)->u.fld[2]).rtx1);
       if (insn == loop->scan_start)
  break;
       if (insn == loop->end)
  {
    if (loop->top != 0)
      insn = loop->top;
    else
      break;
    if (insn == loop->scan_start)
      break;
  }
       if (((enum rtx_code) (insn)->code) == JUMP_INSN
    && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != RETURN
    && (!any_condjump_p (insn)
        || ((((insn)->u.fld[9]).rtx1) != 0
     && (((insn)->u.fld[9]).rtx1) != loop->scan_start
     && !loop_insn_first_p (p, (((insn)->u.fld[9]).rtx1)))))
  {
    maybe_multiple = 1;
    break;
  }
     }
 }
      if (((enum rtx_code) (p)->code) == JUMP_INSN
   && !((((p)->u.fld[9]).rtx1) == loop->top
        && ((((((((p)->u.fld[2]).rtx1))->u.fld[2]).rtx1) == loop->end
      && any_uncondjump_p (p))
     || ((((p)->u.fld[2]).rtx1) == loop->end && any_condjump_p (p)))))
 {
   rtx label = 0;
   for (label = loop->exit_labels; label; label = (((label)->u.fld[1]).rtx1))
     if ((((label)->u.fld[0]).rtx1) == (((p)->u.fld[9]).rtx1))
       break;
   if (!label)
     not_every_iteration = 1;
 }
      else if (((enum rtx_code) (p)->code) == NOTE)
 {
   if (((((p)->u.fld[5]).rtint) == NOTE_INSN_LOOP_VTOP
        || (((p)->u.fld[5]).rtint) == NOTE_INSN_LOOP_CONT)
       && loop_depth == 0)
     not_every_iteration = 0;
   else if ((((p)->u.fld[5]).rtint) == NOTE_INSN_LOOP_BEG)
     loop_depth++;
   else if ((((p)->u.fld[5]).rtint) == NOTE_INSN_LOOP_END)
     loop_depth--;
 }
      if (((enum rtx_code) (p)->code) == JUMP_INSN
   && (((p)->u.fld[9]).rtx1) == (((loop->start)->u.fld[2]).rtx1))
 past_loop_latch = 1;
      if (not_every_iteration
   && !past_loop_latch
   && ((enum rtx_code) (p)->code) == CODE_LABEL
   && no_labels_between_p (p, loop->end)
   && loop_insn_first_p (p, loop->cont))
 not_every_iteration = 0;
    }
}
static void
loop_bivs_find (struct loop *loop)
{
  struct loop_regs *regs = (&((struct loop_info *) (loop)->aux)->regs);
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct iv_class *bl, **backbl;
  ivs->list = 0;
  for_each_insn_in_loop (loop, check_insn_for_bivs);
  for (backbl = &ivs->list, bl = *backbl; bl; bl = bl->next)
    {
      if (ivs->regs[bl->regno].type != BASIC_INDUCT
   || regs->array[bl->regno].n_times_set != bl->biv_count
   || ! bl->incremented)
 {
   if (loop_dump_stream)
     fprintf (loop_dump_stream, "Biv %d: discarded, %s\n",
       bl->regno,
       (ivs->regs[bl->regno].type != BASIC_INDUCT
        ? "not induction variable"
        : (! bl->incremented ? "never incremented"
    : "count error")));
   ivs->regs[bl->regno].type = NOT_BASIC_INDUCT;
   *backbl = bl->next;
 }
      else
 {
   backbl = &bl->next;
   if (loop_dump_stream)
     fprintf (loop_dump_stream, "Biv %d: verified\n", bl->regno);
 }
    }
}
static void
loop_bivs_init_find (struct loop *loop)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct iv_class *bl;
  int call_seen;
  rtx p;
  call_seen = 0;
  for (p = loop->start; p && ((enum rtx_code) (p)->code) != CODE_LABEL; p = (((p)->u.fld[1]).rtx1))
    {
      rtx test;
      note_insn = p;
      if (((enum rtx_code) (p)->code) == CALL_INSN)
 call_seen = 1;
      if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
 note_stores ((((p)->u.fld[5]).rtx1), record_initial, ivs);
      if (((enum rtx_code) (p)->code) == JUMP_INSN
   && (((p)->u.fld[9]).rtx1) != 0
   && next_real_insn ((((p)->u.fld[9]).rtx1)) == next_real_insn (loop->end)
   && (test = get_condition_for_loop (loop, p)) != 0
   && (((enum rtx_code) ((((test)->u.fld[0]).rtx1))->code) == REG)
   && ((((((test)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < max_reg_before_loop
   && (bl = ivs->regs[((((((test)->u.fld[0]).rtx1))->u.fld[0]).rtuint)].iv.class) != 0
   && valid_initial_value_p ((((test)->u.fld[1]).rtx1), p, call_seen, loop->start)
   && bl->init_insn == 0)
 {
   if (((enum rtx_code) (test)->code) == NE)
     {
       bl->init_insn = p;
       bl->init_set = gen_rtx_fmt_ee (SET, (VOIDmode), ((((test)->u.fld[0]).rtx1)), ((((test)->u.fld[1]).rtx1)))
                                      ;
     }
   else
     bl->initial_test = test;
 }
    }
}
static void
loop_bivs_check (struct loop *loop)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct iv_class *bl;
  struct iv_class **backbl;
  for (backbl = &ivs->list; (bl = *backbl); backbl = &bl->next)
    {
      rtx src;
      rtx note;
      if (! bl->init_insn)
 continue;
      if (((note = find_reg_note (bl->init_insn, REG_EQUAL, 0)) != ((void *)0)
    && ((rtx_class[(int) (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == CONST_VECTOR))
   || ((note = find_reg_note (bl->init_insn, REG_EQUIV, 0)) != ((void *)0)
       && ((rtx_class[(int) (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == CONST_VECTOR)))
 src = (((note)->u.fld[0]).rtx1);
      else
 src = (((bl->init_set)->u.fld[1]).rtx1);
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Biv %d: initialized at insn %d: initial value ",
   bl->regno, (((bl->init_insn)->u.fld[0]).rtint));
      if ((((enum machine_mode) (src)->mode) == ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[bl->regno])->mode)
    || ((enum machine_mode) (src)->mode) == VOIDmode)
   && valid_initial_value_p (src, bl->init_insn,
        ((struct loop_info *) (loop)->aux)->pre_header_has_call,
        loop->start))
 {
   bl->initial_value = src;
   if (loop_dump_stream)
     {
       print_simple_rtl (loop_dump_stream, src);
       fputc_unlocked ('\n', loop_dump_stream);
     }
 }
      else if (loop_dump_stream)
 fprintf (loop_dump_stream, "is complex\n");
    }
}
static void
loop_givs_find (struct loop* loop)
{
  for_each_insn_in_loop (loop, check_insn_for_givs);
}
static void
loop_givs_check (struct loop *loop)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct iv_class *bl;
  for (bl = ivs->list; bl; bl = bl->next)
    {
      struct induction *v;
      for (v = bl->giv; v; v = v->next_iv)
 if (! v->replaceable && ! v->not_replaceable)
   check_final_value (loop, v);
    }
}
static int
loop_biv_eliminable_p (struct loop *loop, struct iv_class *bl,
         int threshold, int insn_count)
{
  if ((((((reg_n_info)->data.reg[bl->regno])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[bl->regno])->last_uid)] : 2147483647) < ((((loop->end)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop->end)->u.fld[0]).rtint)] : (abort (), -1))
       && bl->init_insn
       && (((bl->init_insn)->u.fld[0]).rtint) < max_uid_for_loop
       && ((((reg_n_info)->data.reg[bl->regno])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[bl->regno])->first_uid)] : 0) >= ((((bl->init_insn)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((bl->init_insn)->u.fld[0]).rtint)] : (abort (), -1))
       && ! reg_mentioned_p (bl->biv->dest_reg, (((bl->init_set)->u.fld[1]).rtx1)))
      || (bl->final_value = final_biv_value (loop, bl)))
    return maybe_eliminate_biv (loop, bl, 0, threshold, insn_count);
  if (loop_dump_stream)
    {
      fprintf (loop_dump_stream,
        "Cannot eliminate biv %d.\n",
        bl->regno);
      fprintf (loop_dump_stream,
        "First use: insn %d, last use: insn %d.\n",
        (((reg_n_info)->data.reg[bl->regno])->first_uid),
        (((reg_n_info)->data.reg[bl->regno])->last_uid));
    }
  return 0;
}
static void
loop_givs_reduce (struct loop *loop, struct iv_class *bl)
{
  struct induction *v;
  for (v = bl->giv; v; v = v->next_iv)
    {
      struct induction *tv;
      if (! v->ignore && v->same == 0)
 {
   int auto_inc_opt = 0;
   if (! v->new_reg)
     v->new_reg = gen_reg_rtx (v->mode);
   for (tv = bl->biv; tv; tv = tv->next_iv)
     {
       rtx insert_before;
       if (tv->same)
  continue;
       if (! auto_inc_opt)
  insert_before = (((tv->insn)->u.fld[2]).rtx1);
       else if (auto_inc_opt == 1)
  insert_before = (((v->insn)->u.fld[2]).rtx1);
       else
  insert_before = v->insn;
       if (tv->mult_val == (const_int_rtx[64 +1]))
  loop_iv_add_mult_emit_before (loop, tv->add_val, v->mult_val,
           v->new_reg, v->new_reg,
           0, insert_before);
       else
  loop_iv_add_mult_emit_before (loop, tv->add_val, v->mult_val,
           v->add_val, v->new_reg,
           0, insert_before);
     }
   loop_iv_add_mult_hoist (loop,
      extend_value_for_giv (v, bl->initial_value),
      v->mult_val, v->add_val, v->new_reg);
 }
    }
}
static void
loop_givs_dead_check (struct loop *loop , struct iv_class *bl)
{
  struct induction *v;
  for (v = bl->giv; v; v = v->next_iv)
    {
      if (v->ignore
   || (v->same && v->same->ignore))
 continue;
      if (v->giv_type == DEST_REG
   && (((reg_n_info)->data.reg[(((v->dest_reg)->u.fld[0]).rtuint)])->first_uid) == (((v->insn)->u.fld[0]).rtint))
 {
   struct induction *v1;
   for (v1 = bl->giv; v1; v1 = v1->next_iv)
     if ((((reg_n_info)->data.reg[(((v->dest_reg)->u.fld[0]).rtuint)])->last_uid) == (((v1->insn)->u.fld[0]).rtint))
       v->maybe_dead = 1;
 }
    }
}
static void
loop_givs_rescan (struct loop *loop, struct iv_class *bl, rtx *reg_map)
{
  struct induction *v;
  for (v = bl->giv; v; v = v->next_iv)
    {
      if (v->same && v->same->ignore)
 v->ignore = 1;
      if (v->ignore)
 continue;
      if (v->same)
 v->new_reg = replace_rtx (v->new_reg,
      v->same->dest_reg, v->same->new_reg);
      if ((((enum rtx_code) (v->new_reg)->code) == REG)
   && v->giv_type == DEST_REG
   && (((v->dest_reg))->frame_related))
 mark_reg_pointer (v->new_reg,
     (cfun->emit->regno_pointer_align[(((v->dest_reg)->u.fld[0]).rtuint)]));
      else if ((((enum rtx_code) (v->new_reg)->code) == REG)
        && (((v->src_reg))->frame_related))
 {
   unsigned int align = (cfun->emit->regno_pointer_align[(((v->src_reg)->u.fld[0]).rtuint)]);
   if (align == 0
       || ((enum rtx_code) (v->add_val)->code) != CONST_INT
       || ((v->add_val)->u.hwint[0]) % (align / 8) != 0)
     align = 0;
   mark_reg_pointer (v->new_reg, align);
 }
      else if ((((enum rtx_code) (v->new_reg)->code) == REG)
        && (((enum rtx_code) (v->add_val)->code) == REG)
        && (((v->add_val))->frame_related))
 {
   unsigned int align = (cfun->emit->regno_pointer_align[(((v->add_val)->u.fld[0]).rtuint)]);
   if (align == 0 || ((enum rtx_code) (v->mult_val)->code) != CONST_INT
       || ((v->mult_val)->u.hwint[0]) % (align / 8) != 0)
     align = 0;
   mark_reg_pointer (v->new_reg, align);
 }
      else if ((((enum rtx_code) (v->new_reg)->code) == REG) && v->giv_type == DEST_ADDR)
 mark_reg_pointer (v->new_reg, 0);
      if (v->giv_type == DEST_ADDR)
 validate_change (v->insn, v->location, v->new_reg, 0);
      else if (v->replaceable)
 {
   reg_map[(((v->dest_reg)->u.fld[0]).rtuint)] = v->new_reg;
 }
      else
 {
   rtx original_insn = v->insn;
   rtx note;
   v->insn = loop_insn_emit_after (loop, 0, original_insn,
       gen_move_insn (v->dest_reg,
        v->new_reg));
   note = find_reg_note (original_insn, REG_EQUAL, (rtx) 0);
   if (note)
     remove_note (original_insn, note);
 }
      if (bl->reversed && ! v->replaceable)
 loop_iv_add_mult_sink (loop,
          extend_value_for_giv (v, bl->initial_value),
          v->mult_val, v->add_val, v->dest_reg);
      else if (v->final_value)
 loop_insn_sink_or_swim (loop,
    gen_load_of_final_value (v->dest_reg,
        v->final_value));
      if (loop_dump_stream)
 {
   fprintf (loop_dump_stream, "giv at %d reduced to ",
     (((v->insn)->u.fld[0]).rtint));
   print_simple_rtl (loop_dump_stream, v->new_reg);
   fprintf (loop_dump_stream, "\n");
 }
    }
}
static int
loop_giv_reduce_benefit (struct loop *loop ,
    struct iv_class *bl, struct induction *v,
    rtx test_reg)
{
  int add_cost;
  int benefit;
  benefit = v->benefit;
  ((test_reg)->mode = (v->mode));
  add_cost = iv_add_mult_cost (bl->biv->add_val, v->mult_val,
          test_reg, test_reg);
  if (! v->replaceable && ! bl->eliminable
      && (((v->dest_reg))->volatil))
    benefit -= cost_per_copy;
  benefit -= add_cost * bl->biv_count;
  return benefit;
}
static void
loop_ivs_free (struct loop *loop)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct iv_class *iv = ivs->list;
  free (ivs->regs);
  while (iv)
    {
      struct iv_class *next = iv->next;
      struct induction *induction;
      struct induction *next_induction;
      for (induction = iv->biv; induction; induction = next_induction)
 {
   next_induction = induction->next_iv;
   free (induction);
 }
      for (induction = iv->giv; induction; induction = next_induction)
 {
   next_induction = induction->next_iv;
   free (induction);
 }
      free (iv);
      iv = next;
    }
}
static void
strength_reduce (struct loop *loop, int flags)
{
  struct loop_info *loop_info = ((struct loop_info *) (loop)->aux);
  struct loop_regs *regs = (&((struct loop_info *) (loop)->aux)->regs);
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  rtx p;
  struct iv_class *bl;
  int threshold = (loop_info->has_call ? 1 : 2) * (3 + n_non_fixed_regs);
  rtx *reg_map = ((void *)0);
  int reg_map_size;
  int unrolled_insn_copies = 0;
  rtx test_reg = gen_rtx_REG (word_mode, (((53)) + 4) + 1);
  int insn_count = count_insns_in_loop (loop);
  addr_placeholder = gen_reg_rtx ((0 ? DImode : SImode));
  ivs->n_regs = max_reg_before_loop;
  ivs->regs = xcalloc (ivs->n_regs, sizeof (struct iv));
  loop_bivs_find (loop);
  if (! ivs->list)
    {
      if (flags & 1)
 unroll_loop (loop, insn_count, 0);
      loop_ivs_free (loop);
      return;
    }
  loop_bivs_init_find (loop);
  loop_bivs_check (loop);
  loop_givs_find (loop);
  loop_iterations (loop);
  if (flags & 2)
    emit_prefetch_instructions (loop);
  loop_givs_check (loop);
  check_dbra_loop (loop, insn_count);
  reg_map_size = ivs->n_regs;
  reg_map = xcalloc (reg_map_size, sizeof (rtx));
  for (bl = ivs->list; bl; bl = bl->next)
    {
      struct induction *v;
      int benefit;
      bl->eliminable = loop_biv_eliminable_p (loop, bl, threshold, insn_count);
      bl->all_reduced = 1;
      check_ext_dependent_givs (loop, bl);
      combine_givs (regs, bl);
      for (v = bl->giv; v; v = v->next_iv)
 {
   struct induction *tv;
   if (v->ignore || v->same)
     continue;
   benefit = loop_giv_reduce_benefit (loop, bl, v, test_reg);
   if (! flag_reduce_all_givs
       && v->lifetime * threshold * benefit < insn_count
       && ! bl->reversed)
     {
       if (loop_dump_stream)
  fprintf (loop_dump_stream,
    "giv of insn %d not worth while, %d vs %d.\n",
    (((v->insn)->u.fld[0]).rtint),
    v->lifetime * threshold * benefit, insn_count);
       v->ignore = 1;
       bl->all_reduced = 0;
     }
   else
     {
       for (tv = bl->biv; tv; tv = tv->next_iv)
  if (tv->mult_val == (const_int_rtx[64 +1])
      && ! product_cheap_p (tv->add_val, v->mult_val))
    {
      if (loop_dump_stream)
        fprintf (loop_dump_stream,
          "giv of insn %d: would need a multiply.\n",
          (((v->insn)->u.fld[0]).rtint));
      v->ignore = 1;
      bl->all_reduced = 0;
      break;
    }
     }
 }
      loop_givs_dead_check (loop, bl);
      loop_givs_reduce (loop, bl);
      loop_givs_rescan (loop, bl, reg_map);
      for (v = bl->giv; v; v = v->next_iv)
 if (! v->maybe_dead && v->same)
   v->same->maybe_dead = 0;
      if (bl->all_reduced == 1 && bl->eliminable
   && maybe_eliminate_biv (loop, bl, 1, threshold, insn_count))
 {
   if (bl->final_value && ! bl->reversed)
       loop_insn_sink_or_swim (loop,
          gen_load_of_final_value (bl->biv->dest_reg,
              bl->final_value));
   if (loop_dump_stream)
     fprintf (loop_dump_stream, "Reg %d: biv eliminated\n",
       bl->regno);
 }
      else if (bl->final_value && ! bl->reversed)
 loop_insn_sink (loop, gen_load_of_final_value (bl->biv->dest_reg,
             bl->final_value));
    }
  for (p = loop->start; p != loop->end; p = (((p)->u.fld[2]).rtx1))
    if (((enum rtx_code) (p)->code) == INSN || ((enum rtx_code) (p)->code) == JUMP_INSN
 || ((enum rtx_code) (p)->code) == CALL_INSN)
      {
 replace_regs ((((p)->u.fld[5]).rtx1), reg_map, reg_map_size, 0);
 replace_regs ((((p)->u.fld[8]).rtx1), reg_map, reg_map_size, 0);
 (((p)->u.fld[6]).rtint) = -1;
      }
  if (loop_info->n_iterations > 0)
    {
      unrolled_insn_copies = insn_count - 2;
      unrolled_insn_copies *= loop_info->n_iterations;
      unrolled_insn_copies -= 1;
      if (unrolled_insn_copies < 0)
 unrolled_insn_copies = 0;
    }
  if ((flags & 1)
      || ((flags & 4)
   && loop_info->n_iterations > 0
   && unrolled_insn_copies <= insn_count))
    unroll_loop (loop, insn_count, 1);
  if (loop_dump_stream)
    fprintf (loop_dump_stream, "\n");
  loop_ivs_free (loop);
  if (reg_map)
    free (reg_map);
}
static rtx
check_insn_for_bivs (struct loop *loop, rtx p, int not_every_iteration,
       int maybe_multiple)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  rtx set;
  rtx dest_reg;
  rtx inc_val;
  rtx mult_val;
  rtx *location;
  if (((enum rtx_code) (p)->code) == INSN
      && (set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0))
      && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG))
    {
      dest_reg = (((set)->u.fld[0]).rtx1);
      if ((((dest_reg)->u.fld[0]).rtuint) < max_reg_before_loop
   && (((dest_reg)->u.fld[0]).rtuint) >= 53
   && ivs->regs[(((dest_reg)->u.fld[0]).rtuint)].type != NOT_BASIC_INDUCT)
 {
   if (basic_induction_var (loop, (((set)->u.fld[1]).rtx1),
       ((enum machine_mode) ((((set)->u.fld[1]).rtx1))->mode),
       dest_reg, p, &inc_val, &mult_val,
       &location))
     {
       struct induction *v = xmalloc (sizeof (struct induction));
       record_biv (loop, v, p, dest_reg, inc_val, mult_val, location,
     not_every_iteration, maybe_multiple);
       ivs->regs[(((dest_reg)->u.fld[0]).rtuint)].type = BASIC_INDUCT;
     }
   else if ((((dest_reg)->u.fld[0]).rtuint) < ivs->n_regs)
     ivs->regs[(((dest_reg)->u.fld[0]).rtuint)].type = NOT_BASIC_INDUCT;
 }
    }
  return p;
}
static rtx
check_insn_for_givs (struct loop *loop, rtx p, int not_every_iteration,
       int maybe_multiple)
{
  struct loop_regs *regs = (&((struct loop_info *) (loop)->aux)->regs);
  rtx set;
  if (((enum rtx_code) (p)->code) == INSN
      && (set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0))
      && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
      && ! regs->array[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)].may_not_optimize)
    {
      rtx src_reg;
      rtx dest_reg;
      rtx add_val;
      rtx mult_val;
      rtx ext_val;
      int benefit;
      rtx regnote = 0;
      rtx last_consec_insn;
      dest_reg = (((set)->u.fld[0]).rtx1);
      if ((((dest_reg)->u.fld[0]).rtuint) < 53)
 return p;
      if (
   (general_induction_var (loop, (((set)->u.fld[1]).rtx1), &src_reg, &add_val,
      &mult_val, &ext_val, 0, &benefit, VOIDmode)
    || ((regnote = find_reg_note (p, REG_EQUAL, (rtx) 0))
        && general_induction_var (loop, (((regnote)->u.fld[0]).rtx1), &src_reg,
      &add_val, &mult_val, &ext_val, 0,
      &benefit, VOIDmode)))
   && (((dest_reg)->u.fld[0]).rtuint) < max_reg_before_loop
   && dest_reg != src_reg
   && (regs->array[(((dest_reg)->u.fld[0]).rtuint)].n_times_set == 1
       || (benefit = consec_sets_giv (loop, benefit, p,
          src_reg, dest_reg,
          &add_val, &mult_val, &ext_val,
          &last_consec_insn))))
 {
   struct induction *v = xmalloc (sizeof (struct induction));
   if (find_reg_note (p, REG_RETVAL, (rtx) 0))
     benefit += libcall_benefit (p);
   if (regs->array[(((dest_reg)->u.fld[0]).rtuint)].n_times_set != 1)
     p = last_consec_insn;
   record_giv (loop, v, p, src_reg, dest_reg, mult_val, add_val,
        ext_val, benefit, DEST_REG, not_every_iteration,
        maybe_multiple, (rtx*) 0);
 }
    }
  if (((enum rtx_code) (p)->code) == INSN)
    find_mem_givs (loop, (((p)->u.fld[5]).rtx1), p, not_every_iteration,
     maybe_multiple);
  if (((enum rtx_code) (p)->code) == INSN || ((enum rtx_code) (p)->code) == JUMP_INSN
      || ((enum rtx_code) (p)->code) == CODE_LABEL)
    update_giv_derive (loop, p);
  return p;
}
static int
valid_initial_value_p (rtx x, rtx insn, int call_seen, rtx loop_start)
{
  if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR))
    return 1;
  if (!(((enum rtx_code) (x)->code) == REG)
      || (((x)->u.fld[0]).rtuint) >= max_reg_before_loop)
    return 0;
  if ((((x)->u.fld[0]).rtuint) < 53
      && (1
   || (call_used_regs[(((x)->u.fld[0]).rtuint)] && call_seen)))
    return 0;
  if (reg_set_between_p (x, insn, loop_start))
    return 0;
  return 1;
}
static void
find_mem_givs (const struct loop *loop, rtx x, rtx insn,
        int not_every_iteration, int maybe_multiple)
{
  int i, j;
  enum rtx_code code;
  const char *fmt;
  if (x == 0)
    return;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
    case CONST_INT:
    case CONST:
    case CONST_DOUBLE:
    case SYMBOL_REF:
    case LABEL_REF:
    case PC:
    case CC0:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
    case USE:
    case CLOBBER:
      return;
    case MEM:
      {
 rtx src_reg;
 rtx add_val;
 rtx mult_val;
 rtx ext_val;
 int benefit;
 if (general_induction_var (loop, (((x)->u.fld[0]).rtx1), &src_reg, &add_val,
       &mult_val, &ext_val, 1, &benefit,
       ((enum machine_mode) (x)->mode)))
   {
     struct induction *v = xmalloc (sizeof (struct induction));
     record_giv (loop, v, insn, src_reg, addr_placeholder, mult_val,
   add_val, ext_val, benefit, DEST_ADDR,
   not_every_iteration, maybe_multiple, &(((x)->u.fld[0]).rtx1));
     v->mem = x;
   }
      }
      return;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    if (fmt[i] == 'e')
      find_mem_givs (loop, (((x)->u.fld[i]).rtx1), insn, not_every_iteration,
       maybe_multiple);
    else if (fmt[i] == 'E')
      for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
 find_mem_givs (loop, (((((x)->u.fld[i]).rtvec1))->elem[j]), insn, not_every_iteration,
         maybe_multiple);
}
static void
record_biv (struct loop *loop, struct induction *v, rtx insn, rtx dest_reg,
     rtx inc_val, rtx mult_val, rtx *location,
     int not_every_iteration, int maybe_multiple)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct iv_class *bl;
  v->insn = insn;
  v->src_reg = dest_reg;
  v->dest_reg = dest_reg;
  v->mult_val = mult_val;
  v->add_val = inc_val;
  v->ext_dependent = (rtx) 0;
  v->location = location;
  v->mode = ((enum machine_mode) (dest_reg)->mode);
  v->always_computable = ! not_every_iteration;
  v->always_executed = ! not_every_iteration;
  v->maybe_multiple = maybe_multiple;
  v->same = 0;
  bl = ivs->regs[(((dest_reg)->u.fld[0]).rtuint)].iv.class;
  if (bl == 0)
    {
      bl = xmalloc (sizeof (struct iv_class));
      bl->regno = (((dest_reg)->u.fld[0]).rtuint);
      bl->biv = 0;
      bl->giv = 0;
      bl->biv_count = 0;
      bl->giv_count = 0;
      bl->initial_value = dest_reg;
      bl->final_value = 0;
      bl->init_insn = 0;
      bl->init_set = 0;
      bl->initial_test = 0;
      bl->incremented = 0;
      bl->eliminable = 0;
      bl->nonneg = 0;
      bl->reversed = 0;
      bl->total_benefit = 0;
      bl->next = ivs->list;
      ivs->list = bl;
      ivs->regs[(((dest_reg)->u.fld[0]).rtuint)].iv.class = bl;
    }
  else
    {
      struct induction *induction;
      for (induction = bl->biv; induction; induction = induction->next_iv)
 if (location == induction->location)
   {
     v->same = induction;
     break;
   }
    }
  v->next_iv = bl->biv;
  bl->biv = v;
  bl->biv_count++;
  if (mult_val == (const_int_rtx[64 +1]))
    bl->incremented = 1;
  if (loop_dump_stream)
    loop_biv_dump (v, loop_dump_stream, 0);
}
static void
record_giv (const struct loop *loop, struct induction *v, rtx insn,
     rtx src_reg, rtx dest_reg, rtx mult_val, rtx add_val,
     rtx ext_val, int benefit, enum g_types type,
     int not_every_iteration, int maybe_multiple, rtx *location)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct induction *b;
  struct iv_class *bl;
  rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  rtx temp;
  temp = simplify_rtx (add_val);
  if (temp
      && ! (((enum rtx_code) (add_val)->code) == MULT
     && ((enum rtx_code) (temp)->code) == ASHIFT))
    add_val = temp;
  v->insn = insn;
  v->src_reg = src_reg;
  v->giv_type = type;
  v->dest_reg = dest_reg;
  v->mult_val = mult_val;
  v->add_val = add_val;
  v->ext_dependent = ext_val;
  v->benefit = benefit;
  v->location = location;
  v->cant_derive = 0;
  v->combined_with = 0;
  v->maybe_multiple = maybe_multiple;
  v->maybe_dead = 0;
  v->derive_adjustment = 0;
  v->same = 0;
  v->ignore = 0;
  v->new_reg = 0;
  v->final_value = 0;
  v->same_insn = 0;
  v->auto_inc_opt = 0;
  v->unrolled = 0;
  v->shared = 0;
  if (type == DEST_ADDR)
    v->always_computable = 1;
  else
    v->always_computable = ! not_every_iteration;
  v->always_executed = ! not_every_iteration;
  if (type == DEST_ADDR)
    {
      v->mode = ((enum machine_mode) (*location)->mode);
      v->lifetime = 1;
    }
  else
    {
      v->mode = ((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode);
      v->lifetime = ((((((reg_n_info)->data.reg[(((dest_reg)->u.fld[0]).rtuint)])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[(((dest_reg)->u.fld[0]).rtuint)])->last_uid)] : 2147483647) - ((((reg_n_info)->data.reg[(((dest_reg)->u.fld[0]).rtuint)])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[(((dest_reg)->u.fld[0]).rtuint)])->first_uid)] : 0)));
      if (v->lifetime == 0)
 v->ignore = 1;
      ivs->regs[(((dest_reg)->u.fld[0]).rtuint)].type = GENERAL_INDUCT;
      ivs->regs[(((dest_reg)->u.fld[0]).rtuint)].iv.info = v;
    }
  bl = ivs->regs[(((src_reg)->u.fld[0]).rtuint)].iv.class;
  if (bl)
    {
      v->next_iv = bl->giv;
      bl->giv = v;
      if (type == DEST_REG)
 bl->giv_count++;
      bl->total_benefit += benefit;
    }
  else
    abort ();
  if (type == DEST_ADDR)
    {
      v->replaceable = 1;
      v->not_replaceable = 0;
    }
  else
    {
      if ((((reg_n_info)->data.reg[(((dest_reg)->u.fld[0]).rtuint)])->first_uid) == (((insn)->u.fld[0]).rtint)
   && ((((reg_n_info)->data.reg[(((dest_reg)->u.fld[0]).rtuint)])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[(((dest_reg)->u.fld[0]).rtuint)])->last_uid)] : 2147483647)
   < ((((loop->end)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop->end)->u.fld[0]).rtint)] : (abort (), -1))
   && (! not_every_iteration
       || last_use_this_basic_block (dest_reg, insn)))
 {
   v->replaceable = 1;
   v->not_replaceable = 0;
   for (b = bl->biv; b; b = b->next_iv)
     {
       if ((((b->insn)->u.fld[0]).rtint) >= max_uid_for_loop
    || ((((((b->insn)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((b->insn)->u.fld[0]).rtint)] : (abort (), -1))
         >= ((((reg_n_info)->data.reg[(((dest_reg)->u.fld[0]).rtuint)])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[(((dest_reg)->u.fld[0]).rtuint)])->first_uid)] : 0))
        && (((((b->insn)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((b->insn)->u.fld[0]).rtint)] : (abort (), -1))
     <= ((((reg_n_info)->data.reg[(((dest_reg)->u.fld[0]).rtuint)])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[(((dest_reg)->u.fld[0]).rtuint)])->last_uid)] : 2147483647))))
  {
    v->replaceable = 0;
    v->not_replaceable = 1;
    break;
  }
     }
   if (v->replaceable)
     for (b = bl->biv; b; b = b->next_iv)
       if (back_branch_in_range_p (loop, b->insn))
  {
    v->replaceable = 0;
    v->not_replaceable = 1;
    break;
  }
 }
      else
 {
   v->replaceable = 0;
   v->not_replaceable = 0;
 }
    }
  {
    rtx tem = add_val;
    v->no_const_addval = 1;
    if (tem == (const_int_rtx[64]))
      ;
    else if (((rtx_class[(int) (((enum rtx_code) (add_val)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (add_val)->code) == CONST_VECTOR))
      v->no_const_addval = 0;
    if (((enum rtx_code) (tem)->code) == PLUS)
      {
 while (1)
   {
     if (((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == PLUS)
       tem = (((tem)->u.fld[0]).rtx1);
     else if (((enum rtx_code) ((((tem)->u.fld[1]).rtx1))->code) == PLUS)
       tem = (((tem)->u.fld[1]).rtx1);
     else
       break;
   }
 if (((rtx_class[(int) (((enum rtx_code) ((((tem)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((tem)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
   v->no_const_addval = 0;
      }
  }
  if (loop_dump_stream)
    loop_giv_dump (v, loop_dump_stream, 0);
}
static void
check_final_value (const struct loop *loop, struct induction *v)
{
  rtx final_value = 0;
  if ((final_value = final_giv_value (loop, v))
      && (v->always_executed
   || last_use_this_basic_block (v->dest_reg, v->insn)))
    {
      int biv_increment_seen = 0, before_giv_insn = 0;
      rtx p = v->insn;
      rtx last_giv_use;
      v->replaceable = 1;
      v->not_replaceable = 0;
      last_giv_use = v->insn;
      while (1)
 {
   p = (((p)->u.fld[2]).rtx1);
   if (p == loop->end)
     {
       before_giv_insn = 1;
       p = (((loop->start)->u.fld[2]).rtx1);
     }
   if (p == v->insn)
     break;
   if (((enum rtx_code) (p)->code) == INSN || ((enum rtx_code) (p)->code) == JUMP_INSN
       || ((enum rtx_code) (p)->code) == CALL_INSN)
     {
       if (! biv_increment_seen
    && reg_set_p (v->src_reg, (((p)->u.fld[5]).rtx1)))
  biv_increment_seen = 1;
       if (reg_mentioned_p (v->dest_reg, (((p)->u.fld[5]).rtx1)))
  {
    if (biv_increment_seen || before_giv_insn)
      {
        v->replaceable = 0;
        v->not_replaceable = 1;
        break;
      }
    last_giv_use = p;
  }
     }
 }
      if (v->replaceable)
 {
   p = v->insn;
   while (1)
     {
       p = (((p)->u.fld[2]).rtx1);
       if (p == loop->end)
  p = (((loop->start)->u.fld[2]).rtx1);
       if (p == last_giv_use)
  break;
       if (((enum rtx_code) (p)->code) == JUMP_INSN && (((p)->u.fld[9]).rtx1)
    && ((((((p)->u.fld[9]).rtx1))->u.fld[7]).rtstr)
    && ((loop_insn_first_p ((((p)->u.fld[9]).rtx1), v->insn)
         && loop_insn_first_p (loop->start, (((p)->u.fld[9]).rtx1)))
        || (loop_insn_first_p (last_giv_use, (((p)->u.fld[9]).rtx1))
     && loop_insn_first_p ((((p)->u.fld[9]).rtx1), loop->end))))
  {
    v->replaceable = 0;
    v->not_replaceable = 1;
    if (loop_dump_stream)
      fprintf (loop_dump_stream,
        "Found branch outside giv lifetime.\n");
    break;
  }
     }
 }
      if (v->replaceable)
 v->final_value = final_value;
    }
  if (loop_dump_stream && v->replaceable)
    fprintf (loop_dump_stream, "Insn %d: giv reg %d final_value replaceable\n",
      (((v->insn)->u.fld[0]).rtint), (((v->dest_reg)->u.fld[0]).rtuint));
}
static void
update_giv_derive (const struct loop *loop, rtx p)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct iv_class *bl;
  struct induction *biv, *giv;
  rtx tem;
  int dummy;
  for (bl = ivs->list; bl; bl = bl->next)
    for (biv = bl->biv; biv; biv = biv->next_iv)
      if (((enum rtx_code) (p)->code) == CODE_LABEL || ((enum rtx_code) (p)->code) == JUMP_INSN
   || biv->insn == p)
 {
   if (biv->same)
     continue;
   for (giv = bl->giv; giv; giv = giv->next_iv)
     {
       if (giv->cant_derive)
  continue;
       if (((enum rtx_code) (p)->code) == CODE_LABEL && ! giv->always_computable)
  giv->cant_derive = 1;
       else if (giv->mult_val == (const_int_rtx[64]) || giv->replaceable)
  continue;
       else if (biv->insn == p)
  {
    rtx ext_val_dummy;
    tem = 0;
    if (biv->mult_val == (const_int_rtx[64 +1]))
      tem = simplify_giv_expr (loop,
          gen_rtx_fmt_ee (MULT, (giv->mode), (biv->add_val), (giv->mult_val))
                        ,
          &ext_val_dummy, &dummy);
    if (tem && giv->derive_adjustment)
      tem = simplify_giv_expr
        (loop,
         gen_rtx_fmt_ee (PLUS, (giv->mode), (tem), (giv->derive_adjustment)),
         &ext_val_dummy, &dummy);
    if (tem)
      giv->derive_adjustment = tem;
    else
      giv->cant_derive = 1;
  }
       else if ((((enum rtx_code) (p)->code) == CODE_LABEL && ! biv->always_computable)
         || (((enum rtx_code) (p)->code) == JUMP_INSN && biv->maybe_multiple))
  giv->cant_derive = 1;
     }
 }
}
static int
basic_induction_var (const struct loop *loop, rtx x, enum machine_mode mode,
       rtx dest_reg, rtx p, rtx *inc_val, rtx *mult_val,
       rtx **location)
{
  enum rtx_code code;
  rtx *argp, arg;
  rtx insn, set = 0, last, inc;
  code = ((enum rtx_code) (x)->code);
  *location = ((void *)0);
  switch (code)
    {
    case PLUS:
      if (rtx_equal_p ((((x)->u.fld[0]).rtx1), dest_reg)
   || (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
       && ((((((x)->u.fld[0]).rtx1)))->in_struct)
       && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == dest_reg))
 {
   argp = &(((x)->u.fld[1]).rtx1);
 }
      else if (rtx_equal_p ((((x)->u.fld[1]).rtx1), dest_reg)
        || (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == SUBREG
     && ((((((x)->u.fld[1]).rtx1)))->in_struct)
     && ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1) == dest_reg))
 {
   argp = &(((x)->u.fld[0]).rtx1);
 }
      else
 return 0;
      arg = *argp;
      if (loop_invariant_p (loop, arg) != 1)
 return 0;
      last = get_last_insn ();
      inc = convert_modes (((enum machine_mode) (dest_reg)->mode), ((enum machine_mode) (x)->mode), arg, 0);
      if (get_last_insn () != last)
 {
   delete_insns_since (last);
   return 0;
 }
      *inc_val = inc;
      *mult_val = (const_int_rtx[64 +1]);
      *location = argp;
      return 1;
    case SUBREG:
      return basic_induction_var (loop, (((x)->u.fld[0]).rtx1),
      ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
      dest_reg, p, inc_val, mult_val, location);
    case REG:
      if (rtx_equal_p (dest_reg, x))
 return 0;
      insn = p;
      while (1)
 {
   rtx dest;
   do
     {
       insn = (((insn)->u.fld[1]).rtx1);
     }
   while (insn && ((enum rtx_code) (insn)->code) == NOTE
   && (((insn)->u.fld[5]).rtint) != NOTE_INSN_LOOP_BEG);
   if (!insn)
     break;
   set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
   if (set == 0)
     break;
   dest = (((set)->u.fld[0]).rtx1);
   if (dest == x
       || (((enum rtx_code) (dest)->code) == SUBREG
    && (((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]) <= (0 ? 8 : 4))
    && (mode_class[((enum machine_mode) (dest)->mode)] == MODE_INT)
    && (((dest)->u.fld[0]).rtx1) == x))
     return basic_induction_var (loop, (((set)->u.fld[1]).rtx1),
     (((enum machine_mode) ((((set)->u.fld[1]).rtx1))->mode) == VOIDmode
      ? ((enum machine_mode) (x)->mode)
      : ((enum machine_mode) ((((set)->u.fld[1]).rtx1))->mode)),
     dest_reg, insn,
     inc_val, mult_val, location);
   while (((enum rtx_code) (dest)->code) == SIGN_EXTRACT
   || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT
   || ((enum rtx_code) (dest)->code) == SUBREG
   || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
     dest = (((dest)->u.fld[0]).rtx1);
   if (dest == x)
     break;
 }
    case MEM:
      if (loop_invariant_p (loop, x) != 1)
 return 0;
    case CONST_INT:
    case SYMBOL_REF:
    case CONST:
      if (loop->level == 1
   && mode_class[mode] == mode_class[((enum machine_mode) (dest_reg)->mode)]
   && mode_class[mode] != MODE_CC)
 {
   last = get_last_insn ();
   inc = convert_modes (((enum machine_mode) (dest_reg)->mode), mode, x, 0);
   if (get_last_insn () != last)
     {
       delete_insns_since (last);
       return 0;
     }
   *inc_val = inc;
   *mult_val = (const_int_rtx[64]);
   return 1;
 }
      else
 return 0;
    case SIGN_EXTEND:
      if (flag_wrapv)
 return 0;
      return basic_induction_var (loop, (((x)->u.fld[0]).rtx1), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
      dest_reg, p, inc_val, mult_val, location);
    case ASHIFTRT:
      for (insn = (((p)->u.fld[1]).rtx1);
    (insn && ((enum rtx_code) (insn)->code) == NOTE
     && (((insn)->u.fld[5]).rtint) != NOTE_INSN_LOOP_BEG);
    insn = (((insn)->u.fld[1]).rtx1))
 ;
      if (insn)
 set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
      if (! rtx_equal_p (dest_reg, (((x)->u.fld[0]).rtx1))
   && set && (((set)->u.fld[0]).rtx1) == (((x)->u.fld[0]).rtx1)
   && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
   && ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == ASHIFT
   && (((x)->u.fld[1]).rtx1) == ((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))
 return basic_induction_var (loop, ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1),
        ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
        dest_reg, insn, inc_val, mult_val,
        location);
      return 0;
    default:
      return 0;
    }
}
static int
general_induction_var (const struct loop *loop, rtx x, rtx *src_reg,
         rtx *add_val, rtx *mult_val, rtx *ext_val,
         int is_addr, int *pbenefit,
         enum machine_mode addr_mode)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  rtx orig_x = x;
  if (loop_invariant_p (loop, x) == 1)
    return 0;
  *pbenefit = 0;
  *ext_val = (rtx) 0;
  x = simplify_giv_expr (loop, x, ext_val, pbenefit);
  if (x == 0)
    return 0;
  switch (((enum rtx_code) (x)->code))
    {
    case USE:
    case CONST_INT:
      *src_reg = ivs->list->biv->dest_reg;
      *mult_val = (const_int_rtx[64]);
      *add_val = x;
      break;
    case REG:
      *src_reg = x;
      *mult_val = (const_int_rtx[64 +1]);
      *add_val = (const_int_rtx[64]);
      break;
    case PLUS:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MULT)
 {
   *src_reg = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   *mult_val = ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
 }
      else
 {
   *src_reg = (((x)->u.fld[0]).rtx1);
   *mult_val = (const_int_rtx[64 +1]);
 }
      *add_val = (((x)->u.fld[1]).rtx1);
      break;
    case MULT:
      *src_reg = (((x)->u.fld[0]).rtx1);
      *mult_val = (((x)->u.fld[1]).rtx1);
      *add_val = (const_int_rtx[64]);
      break;
    default:
      abort ();
    }
  if (((enum rtx_code) (*add_val)->code) == USE)
    *add_val = (((*add_val)->u.fld[0]).rtx1);
  if (((enum rtx_code) (*mult_val)->code) == USE)
    *mult_val = (((*mult_val)->u.fld[0]).rtx1);
  if (is_addr)
    *pbenefit += address_cost (orig_x, addr_mode) - reg_address_cost;
  else
    *pbenefit += rtx_cost (orig_x, SET);
  return 1;
}
static rtx sge_plus (enum machine_mode, rtx, rtx);
static rtx sge_plus_constant (rtx, rtx);
static rtx
simplify_giv_expr (const struct loop *loop, rtx x, rtx *ext_val, int *benefit)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct loop_regs *regs = (&((struct loop_info *) (loop)->aux)->regs);
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  rtx arg0, arg1;
  rtx tem;
  if (mode != VOIDmode
      && (mode_class[mode] != MODE_INT
   || ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) > (8 * 4)))
    return (rtx) 0;
  switch (((enum rtx_code) (x)->code))
    {
    case PLUS:
      arg0 = simplify_giv_expr (loop, (((x)->u.fld[0]).rtx1), ext_val, benefit);
      arg1 = simplify_giv_expr (loop, (((x)->u.fld[1]).rtx1), ext_val, benefit);
      if (arg0 == 0 || arg1 == 0)
 return (rtx) 0;
      if ((((enum rtx_code) (arg0)->code) == USE
    || ((enum rtx_code) (arg0)->code) == CONST_INT)
   && ! ((((enum rtx_code) (arg0)->code) == USE
   && ((enum rtx_code) (arg1)->code) == USE)
  || ((enum rtx_code) (arg1)->code) == CONST_INT))
 tem = arg0, arg0 = arg1, arg1 = tem;
      if (arg1 == (const_int_rtx[64]))
 return arg0;
      else if (((enum rtx_code) (arg1)->code) == CONST_INT || ((enum rtx_code) (arg1)->code) == USE)
 switch (((enum rtx_code) (arg0)->code))
   {
   case CONST_INT:
   case USE:
     if (((enum rtx_code) (arg0)->code) == USE)
       arg0 = (((arg0)->u.fld[0]).rtx1);
     if (((enum rtx_code) (arg1)->code) == USE)
       arg1 = (((arg1)->u.fld[0]).rtx1);
     if (((enum rtx_code) (arg0)->code) == CONST_INT)
       tem = arg0, arg0 = arg1, arg1 = tem;
     if (((enum rtx_code) (arg1)->code) == CONST_INT)
       tem = sge_plus_constant (arg0, arg1);
     else
       tem = sge_plus (mode, arg0, arg1);
     if (((enum rtx_code) (tem)->code) != CONST_INT)
       tem = gen_rtx_fmt_e (USE, (mode), (tem));
     return tem;
   case REG:
   case MULT:
     return gen_rtx_fmt_ee (PLUS, (mode), (arg0), (arg1));
   case PLUS:
     return
       simplify_giv_expr (loop,
     gen_rtx_fmt_ee (PLUS, (mode), ((((arg0)->u.fld[0]).rtx1)), (gen_rtx_fmt_ee (PLUS, (mode), ((((arg0)->u.fld[1]).rtx1)), (arg1))))
                  ,
     ext_val, benefit);
   default:
     abort ();
   }
      if ((((enum rtx_code) (arg0)->code) == REG))
 arg0 = gen_rtx_fmt_ee (MULT, (mode), (arg0), ((const_int_rtx[64 +1])));
      if ((((enum rtx_code) (arg1)->code) == REG))
 arg1 = gen_rtx_fmt_ee (MULT, (mode), (arg1), ((const_int_rtx[64 +1])));
      if (((enum rtx_code) (arg1)->code) == MULT)
 tem = arg0, arg0 = arg1, arg1 = tem;
      if (((enum rtx_code) (arg1)->code) == PLUS)
 return
   simplify_giv_expr (loop,
        gen_rtx_fmt_ee (PLUS, (mode), (gen_rtx_fmt_ee (PLUS, (mode), (arg0), ((((arg1)->u.fld[0]).rtx1)))), ((((arg1)->u.fld[1]).rtx1)))
                       ,
        ext_val, benefit);
      if (((enum rtx_code) (arg0)->code) != MULT || ((enum rtx_code) (arg1)->code) != MULT)
 return (rtx) 0;
      if (!rtx_equal_p (arg0, arg1))
 return (rtx) 0;
      return simplify_giv_expr (loop,
    gen_rtx_fmt_ee (MULT, (mode), ((((arg0)->u.fld[0]).rtx1)), (gen_rtx_fmt_ee (PLUS, (mode), ((((arg0)->u.fld[1]).rtx1)), ((((arg1)->u.fld[1]).rtx1)))))
                           ,
    ext_val, benefit);
    case MINUS:
      return simplify_giv_expr (loop,
    gen_rtx_fmt_ee (PLUS, (mode), ((((x)->u.fld[0]).rtx1)), (gen_rtx_fmt_ee (MULT, (mode), ((((x)->u.fld[1]).rtx1)), ((const_int_rtx[64 -1])))))
                        ,
    ext_val, benefit);
    case MULT:
      arg0 = simplify_giv_expr (loop, (((x)->u.fld[0]).rtx1), ext_val, benefit);
      arg1 = simplify_giv_expr (loop, (((x)->u.fld[1]).rtx1), ext_val, benefit);
      if (arg0 == 0 || arg1 == 0)
 return (rtx) 0;
      if ((((enum rtx_code) (arg0)->code) == USE || ((enum rtx_code) (arg0)->code) == CONST_INT)
   && ((enum rtx_code) (arg1)->code) != CONST_INT)
 tem = arg0, arg0 = arg1, arg1 = tem;
      if (((enum rtx_code) (arg1)->code) != USE && ((enum rtx_code) (arg1)->code) != CONST_INT)
 return (rtx) 0;
      if (arg1 == (const_int_rtx[64]))
 return (const_int_rtx[64]);
      else if (arg1 == (const_int_rtx[64 +1]))
 return arg0;
      switch (((enum rtx_code) (arg0)->code))
 {
 case REG:
   return gen_rtx_fmt_ee (MULT, (mode), (arg0), (arg1));
 case CONST_INT:
   return gen_rtx_CONST_INT (VOIDmode, (long) (((arg0)->u.hwint[0]) * ((arg1)->u.hwint[0])));
 case USE:
   if (((enum rtx_code) (arg1)->code) != CONST_INT)
     return (rtx) 0;
   arg0 = (((arg0)->u.fld[0]).rtx1);
   if (((enum rtx_code) (arg0)->code) == MULT)
     {
       return simplify_giv_expr (loop,
     gen_rtx_fmt_ee (MULT, (mode), ((((arg0)->u.fld[0]).rtx1)), (gen_rtx_fmt_ee (MULT, (mode), ((((arg0)->u.fld[1]).rtx1)), (arg1))))
                  ,
     ext_val, benefit);
     }
   else if (((enum rtx_code) (arg0)->code) == PLUS)
     {
       return simplify_giv_expr (loop,
     gen_rtx_fmt_ee (PLUS, (mode), (gen_rtx_fmt_ee (MULT, (mode), ((((arg0)->u.fld[0]).rtx1)), (arg1))), (gen_rtx_fmt_ee (MULT, (mode), ((((arg0)->u.fld[1]).rtx1)), (arg1))))
                  ,
     ext_val, benefit);
     }
   return gen_rtx_fmt_e (USE, (mode), (gen_rtx_fmt_ee (MULT, (mode), (arg0), (arg1))));
 case MULT:
   return simplify_giv_expr (loop,
        gen_rtx_fmt_ee (MULT, (mode), ((((arg0)->u.fld[0]).rtx1)), (gen_rtx_fmt_ee (MULT, (mode), ((((arg0)->u.fld[1]).rtx1)), (arg1))))
              ,
        ext_val, benefit);
 case PLUS:
   return simplify_giv_expr (loop,
        gen_rtx_fmt_ee (PLUS, (mode), (gen_rtx_fmt_ee (MULT, (mode), ((((arg0)->u.fld[0]).rtx1)), (arg1))), (gen_rtx_fmt_ee (MULT, (mode), ((((arg0)->u.fld[1]).rtx1)), (arg1))))
              ,
        ext_val, benefit);
 default:
   abort ();
 }
    case ASHIFT:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != CONST_INT)
 return 0;
      return
 simplify_giv_expr (loop,
      gen_rtx_fmt_ee (MULT, (mode), ((((x)->u.fld[0]).rtx1)), (gen_rtx_CONST_INT (VOIDmode, (long) ((long) 1 << (((((x)->u.fld[1]).rtx1))->u.hwint[0])))))
                                 ,
      ext_val, benefit);
    case NEG:
      return simplify_giv_expr (loop,
    gen_rtx_fmt_ee (MULT, (mode), ((((x)->u.fld[0]).rtx1)), ((const_int_rtx[64 -1]))),
    ext_val, benefit);
    case NOT:
      return simplify_giv_expr (loop,
    gen_rtx_fmt_ee (MINUS, (mode), (gen_rtx_fmt_e (NEG, (mode), ((((x)->u.fld[0]).rtx1)))), ((const_int_rtx[64 +1])))
                       ,
    ext_val, benefit);
    case USE:
      return x;
    case SIGN_EXTEND:
    case ZERO_EXTEND:
    case TRUNCATE:
      if (*ext_val == (rtx) 0)
 {
   arg0 = simplify_giv_expr (loop, (((x)->u.fld[0]).rtx1), ext_val, benefit);
   if (arg0 && *ext_val == (rtx) 0 && (((enum rtx_code) (arg0)->code) == REG))
     {
       *ext_val = gen_rtx_fmt_e (((enum rtx_code) (x)->code), mode, arg0);
       return arg0;
     }
 }
      goto do_default;
    case REG:
      if ((((x)->u.fld[0]).rtuint) >= max_reg_before_loop)
 return 0;
      switch (ivs->regs[(((x)->u.fld[0]).rtuint)].type)
 {
 case BASIC_INDUCT:
   return x;
 case GENERAL_INDUCT:
   {
     struct induction *v = ivs->regs[(((x)->u.fld[0]).rtuint)].iv.info;
     {
       rtx single_use = regs->array[(((x)->u.fld[0]).rtuint)].single_usage;
       if (single_use && single_use != (const_int_rtx[64]))
  *benefit += v->benefit;
     }
     if (v->cant_derive)
       return 0;
     tem = gen_rtx_fmt_ee (PLUS, (mode), (gen_rtx_fmt_ee (MULT, (mode), (v->src_reg), (v->mult_val))), (v->add_val))
               ;
     if (v->derive_adjustment)
       tem = gen_rtx_fmt_ee (MINUS, (mode), (tem), (v->derive_adjustment));
     arg0 = simplify_giv_expr (loop, tem, ext_val, benefit);
     if (*ext_val)
       {
  if (!v->ext_dependent)
    return arg0;
       }
     else
       {
  *ext_val = v->ext_dependent;
  return arg0;
       }
     return 0;
   }
 default:
 do_default:
   if (loop_invariant_p (loop, x) == 1)
     {
       struct movable *m;
       struct loop_movables *movables = (&((struct loop_info *) (loop)->aux)->movables);
       for (m = movables->head; m; m = m->next)
  if (rtx_equal_p (x, m->set_dest))
    {
      if (m->match)
        return simplify_giv_expr (loop, m->match->set_dest,
      ext_val, benefit);
      if (m->consec != 0)
        {
   int i = m->consec;
   tem = m->insn;
   do
     {
       tem = (((tem)->u.fld[2]).rtx1);
     }
   while (--i > 0);
   tem = find_reg_note (tem, REG_EQUAL, (rtx) 0);
   if (tem)
     tem = (((tem)->u.fld[0]).rtx1);
        }
      else
        {
   tem = (((((enum rtx_code) (m->insn)->code) == INSN) || (((enum rtx_code) (m->insn)->code) == JUMP_INSN) || (((enum rtx_code) (m->insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((m->insn)->u.fld[5]).rtx1))->code) == SET ? (((m->insn)->u.fld[5]).rtx1) : single_set_2 (m->insn, (((m->insn)->u.fld[5]).rtx1))) : (rtx) 0);
   if (tem)
     tem = (((tem)->u.fld[1]).rtx1);
        }
      if (tem)
        {
   if (((enum rtx_code) (tem)->code) == PLUS
       || ((enum rtx_code) (tem)->code) == MULT
       || ((enum rtx_code) (tem)->code) == ASHIFT
       || ((enum rtx_code) (tem)->code) == CONST_INT
       || ((enum rtx_code) (tem)->code) == SYMBOL_REF)
     {
       tem = simplify_giv_expr (loop, tem, ext_val,
           benefit);
       if (tem)
         return tem;
     }
   else if (((enum rtx_code) (tem)->code) == CONST
     && ((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == PLUS
     && ((enum rtx_code) (((((((tem)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SYMBOL_REF
     && ((enum rtx_code) (((((((tem)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
     {
       tem = simplify_giv_expr (loop, (((tem)->u.fld[0]).rtx1),
           ext_val, benefit);
       if (tem)
         return tem;
     }
        }
      break;
    }
     }
   break;
 }
    default:
      if (((enum rtx_code) (x)->code) == USE)
 x = (((x)->u.fld[0]).rtx1);
      if (loop_invariant_p (loop, x) == 1)
 {
   if (((enum rtx_code) (x)->code) == CONST_INT)
     return x;
   if (((enum rtx_code) (x)->code) == CONST
       && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
       && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SYMBOL_REF
       && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
     x = (((x)->u.fld[0]).rtx1);
   return gen_rtx_fmt_e (USE, (mode), (x));
 }
      else
 return 0;
    }
}
static rtx
sge_plus_constant (rtx x, rtx c)
{
  if (((enum rtx_code) (x)->code) == CONST_INT)
    return gen_rtx_CONST_INT (VOIDmode, (long) (((x)->u.hwint[0]) + ((c)->u.hwint[0])));
  else if (((enum rtx_code) (x)->code) != PLUS)
    return gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (x)->mode)), (x), (c));
  else if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
    {
      return gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (x)->mode)), ((((x)->u.fld[0]).rtx1)), (gen_rtx_CONST_INT (VOIDmode, (long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0]) + ((c)->u.hwint[0])))))
                                                  ;
    }
  else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
    || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != PLUS)
    {
      return gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (x)->mode)), (sge_plus_constant ((((x)->u.fld[0]).rtx1), c)), ((((x)->u.fld[1]).rtx1)))
                                                      ;
    }
  else
    {
      return gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (x)->mode)), (sge_plus_constant ((((x)->u.fld[1]).rtx1), c)), ((((x)->u.fld[0]).rtx1)))
                                                      ;
    }
}
static rtx
sge_plus (enum machine_mode mode, rtx x, rtx y)
{
  while (((enum rtx_code) (y)->code) == PLUS)
    {
      rtx a = (((y)->u.fld[0]).rtx1);
      if (((enum rtx_code) (a)->code) == CONST_INT)
 x = sge_plus_constant (x, a);
      else
 x = gen_rtx_fmt_ee (PLUS, (mode), (x), (a));
      y = (((y)->u.fld[1]).rtx1);
    }
  if (((enum rtx_code) (y)->code) == CONST_INT)
    x = sge_plus_constant (x, y);
  else
    x = gen_rtx_fmt_ee (PLUS, (mode), (x), (y));
  return x;
}
static int
consec_sets_giv (const struct loop *loop, int first_benefit, rtx p,
   rtx src_reg, rtx dest_reg, rtx *add_val, rtx *mult_val,
   rtx *ext_val, rtx *last_consec_insn)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct loop_regs *regs = (&((struct loop_info *) (loop)->aux)->regs);
  int count;
  enum rtx_code code;
  int benefit;
  rtx temp;
  rtx set;
  struct induction *v;
  if (ivs->regs[(((dest_reg)->u.fld[0]).rtuint)].type != UNKNOWN_INDUCT)
    return 0;
  v = C_alloca(sizeof (struct induction));
  v->src_reg = src_reg;
  v->mult_val = *mult_val;
  v->add_val = *add_val;
  v->benefit = first_benefit;
  v->cant_derive = 0;
  v->derive_adjustment = 0;
  v->ext_dependent = (rtx) 0;
  ivs->regs[(((dest_reg)->u.fld[0]).rtuint)].type = GENERAL_INDUCT;
  ivs->regs[(((dest_reg)->u.fld[0]).rtuint)].iv.info = v;
  count = regs->array[(((dest_reg)->u.fld[0]).rtuint)].n_times_set - 1;
  while (count > 0)
    {
      p = (((p)->u.fld[2]).rtx1);
      code = ((enum rtx_code) (p)->code);
      if (code == INSN && (temp = find_reg_note (p, REG_LIBCALL, (rtx) 0)))
 p = (((temp)->u.fld[0]).rtx1);
      if (code == INSN
   && (set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0))
   && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
   && (((set)->u.fld[0]).rtx1) == dest_reg
   && (general_induction_var (loop, (((set)->u.fld[1]).rtx1), &src_reg,
         add_val, mult_val, ext_val, 0,
         &benefit, VOIDmode)
       || ((temp = find_reg_note (p, REG_EQUAL, (rtx) 0))
    && general_induction_var (loop, (((temp)->u.fld[0]).rtx1), &src_reg,
         add_val, mult_val, ext_val, 0,
         &benefit, VOIDmode)))
   && src_reg == v->src_reg)
 {
   if (find_reg_note (p, REG_RETVAL, (rtx) 0))
     benefit += libcall_benefit (p);
   count--;
   v->mult_val = *mult_val;
   v->add_val = *add_val;
   v->benefit += benefit;
 }
      else if (code != NOTE)
 {
   if (code == INSN
       && (set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0))
       && (((set)->u.fld[0]).rtx1) != dest_reg
       && ((rtx_class[(int) (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
     continue;
   ivs->regs[(((dest_reg)->u.fld[0]).rtuint)].type = UNKNOWN_INDUCT;
   return 0;
 }
    }
  ivs->regs[(((dest_reg)->u.fld[0]).rtuint)].type = UNKNOWN_INDUCT;
  *last_consec_insn = p;
  return v->benefit;
}
static rtx
express_from_1 (rtx a, rtx b, rtx mult)
{
  if (mult == (const_int_rtx[64]))
    return b;
  if (mult != (const_int_rtx[64 +1]) && ((enum rtx_code) (a)->code) != CONST_INT)
    return (rtx) 0;
  while (((enum rtx_code) (a)->code) == PLUS && ((enum rtx_code) (b)->code) == PLUS)
    {
      rtx ra, rb, oa, ob, tmp;
      ra = (((a)->u.fld[0]).rtx1), oa = (((a)->u.fld[1]).rtx1);
      if (((enum rtx_code) (ra)->code) == PLUS)
 tmp = ra, ra = oa, oa = tmp;
      rb = (((b)->u.fld[0]).rtx1), ob = (((b)->u.fld[1]).rtx1);
      if (((enum rtx_code) (rb)->code) == PLUS)
 tmp = rb, rb = ob, ob = tmp;
      if (rtx_equal_p (ra, rb))
 a = oa, b = ob;
      else if (((enum rtx_code) (ob)->code) != PLUS && rtx_equal_p (ra, ob))
 a = oa, b = rb;
      else if (((enum rtx_code) (oa)->code) != PLUS && rtx_equal_p (oa, rb))
 a = ra, b = ob;
      else
 {
   ob = express_from_1 (a, ob, mult);
   if (ob == (rtx) 0)
     return (rtx) 0;
   return gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (b)->mode)), (rb), (ob));
 }
    }
  if (((enum rtx_code) (a)->code) == PLUS)
    {
      rtx ra, oa;
      ra = (((a)->u.fld[0]).rtx1), oa = (((a)->u.fld[1]).rtx1);
      if (rtx_equal_p (oa, b))
 oa = ra;
      else if (!rtx_equal_p (ra, b))
 return (rtx) 0;
      if (((enum rtx_code) (oa)->code) != CONST_INT)
 return (rtx) 0;
      return gen_rtx_CONST_INT (VOIDmode, (long) (-((oa)->u.hwint[0]) * ((mult)->u.hwint[0])));
    }
  else if (((enum rtx_code) (a)->code) == CONST_INT)
    {
      return plus_constant_wide ((b), (long) (-((a)->u.hwint[0]) * ((mult)->u.hwint[0])));
    }
  else if (((rtx_class[(int) (((enum rtx_code) (a)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (a)->code) == CONST_VECTOR))
    {
      enum machine_mode mode_a = ((enum machine_mode) (a)->mode);
      enum machine_mode mode_b = ((enum machine_mode) (b)->mode);
      enum machine_mode mode = mode_b == VOIDmode ? mode_a : mode_b;
      return simplify_gen_binary (MINUS, mode, b, a);
    }
  else if (((enum rtx_code) (b)->code) == PLUS)
    {
      if (rtx_equal_p (a, (((b)->u.fld[0]).rtx1)))
 return (((b)->u.fld[1]).rtx1);
      else if (rtx_equal_p (a, (((b)->u.fld[1]).rtx1)))
 return (((b)->u.fld[0]).rtx1);
      else
 return (rtx) 0;
    }
  else if (rtx_equal_p (a, b))
    return (const_int_rtx[64]);
  return (rtx) 0;
}
rtx
express_from (struct induction *g1, struct induction *g2)
{
  rtx mult, add;
  if (((enum rtx_code) (g1->mult_val)->code) == CONST_INT
      && ((enum rtx_code) (g2->mult_val)->code) == CONST_INT)
    {
      if (g1->mult_val == (const_int_rtx[64])
   || (g1->mult_val == (const_int_rtx[64 -1])
       && ((g2->mult_val)->u.hwint[0])
   == (long) 1 << ((8 * 4) - 1))
   || ((g2->mult_val)->u.hwint[0]) % ((g1->mult_val)->u.hwint[0]) != 0)
 return (rtx) 0;
      mult = gen_rtx_CONST_INT (VOIDmode, (long) (((g2->mult_val)->u.hwint[0]) / ((g1->mult_val)->u.hwint[0])));
    }
  else if (rtx_equal_p (g1->mult_val, g2->mult_val))
    mult = (const_int_rtx[64 +1]);
  else
    {
      return (rtx) 0;
    }
  add = express_from_1 (g1->add_val, g2->add_val, mult);
  if (add == (rtx) 0)
    {
      if (((mult)->u.hwint[0]) > 1)
 {
   rtx g1_add_val = g1->add_val;
   if (((enum rtx_code) (g1_add_val)->code) == MULT
       && ((enum rtx_code) ((((g1_add_val)->u.fld[1]).rtx1))->code) == CONST_INT)
     {
       long m;
       m = ((mult)->u.hwint[0]) * (((((g1_add_val)->u.fld[1]).rtx1))->u.hwint[0]);
       g1_add_val = gen_rtx_fmt_ee (MULT, (((enum machine_mode) (g1_add_val)->mode)), ((((g1_add_val)->u.fld[0]).rtx1)), (gen_rtx_CONST_INT (VOIDmode, (long) (m))))
                                        ;
     }
   else
     {
       g1_add_val = gen_rtx_fmt_ee (MULT, (((enum machine_mode) (g1_add_val)->mode)), (g1_add_val), (mult))
           ;
     }
   add = express_from_1 (g1_add_val, g2->add_val, (const_int_rtx[64 +1]));
 }
    }
  if (add == (rtx) 0)
    return (rtx) 0;
  if (mult == (const_int_rtx[64]))
    return add;
  else if (mult == (const_int_rtx[64 +1]))
    mult = g1->dest_reg;
  else
    mult = gen_rtx_fmt_ee (MULT, (g2->mode), (g1->dest_reg), (mult));
  if (add == (const_int_rtx[64]))
    return mult;
  else
    {
      if (((enum rtx_code) (add)->code) == PLUS
   && ((rtx_class[(int) (((enum rtx_code) ((((add)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((add)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
 {
   rtx tem = (((add)->u.fld[1]).rtx1);
   mult = gen_rtx_fmt_ee (PLUS, (g2->mode), (mult), ((((add)->u.fld[0]).rtx1)));
   add = tem;
 }
      return gen_rtx_fmt_ee (PLUS, (g2->mode), (mult), (add));
    }
}
static rtx
combine_givs_p (struct induction *g1, struct induction *g2)
{
  rtx comb, ret;
  if (((unsigned short) mode_size[g1->mode]) < ((unsigned short) mode_size[g2->mode]))
    return (rtx) 0;
  ret = comb = express_from (g1, g2);
  if (comb == (rtx) 0)
    return (rtx) 0;
  if (g1->mode != g2->mode)
    ret = rtl_hooks.gen_lowpart (g2->mode, comb);
  if (comb == g1->dest_reg
      && (g1->giv_type == DEST_REG || g2->giv_type == DEST_ADDR))
    {
      return ret;
    }
  if (ret != (rtx) 0
      && g2->giv_type == DEST_ADDR
      && memory_address_p (((enum machine_mode) (g2->mem)->mode), ret))
    return ret;
  return (rtx) 0;
}
static void
check_ext_dependent_givs (const struct loop *loop, struct iv_class *bl)
{
  struct loop_info *loop_info = ((struct loop_info *) (loop)->aux);
  int ze_ok = 0, se_ok = 0, info_ok = 0;
  enum machine_mode biv_mode = ((enum machine_mode) (bl->biv->src_reg)->mode);
  long start_val;
  unsigned long u_end_val = 0;
  unsigned long u_start_val = 0;
  rtx incr = (global_rtl[GR_PC]);
  struct induction *v;
  if (loop_info->n_iterations > 0
      && bl->initial_value
      && ((enum rtx_code) (bl->initial_value)->code) == CONST_INT
      && (incr = biv_total_increment (bl))
      && ((enum rtx_code) (incr)->code) == CONST_INT
      && (8 * 4) >= ((unsigned short) (((unsigned short) mode_size[biv_mode]) * 8)))
    {
      unsigned long abs_incr, total_incr;
      long s_end_val;
      int neg_incr;
      info_ok = 1;
      start_val = ((bl->initial_value)->u.hwint[0]);
      u_start_val = start_val;
      neg_incr = 0, abs_incr = ((incr)->u.hwint[0]);
      if (((incr)->u.hwint[0]) < 0)
 neg_incr = 1, abs_incr = -abs_incr;
      total_incr = abs_incr * loop_info->n_iterations;
      if (total_incr / loop_info->n_iterations == abs_incr)
 {
   unsigned long u_max;
   long s_max;
   u_end_val = start_val + (neg_incr ? -total_incr : total_incr);
   s_end_val = u_end_val;
   u_max = mode_mask_array[biv_mode];
   s_max = u_max >> 1;
   if (start_val >= 0
       && (neg_incr
    ? u_end_val < u_start_val
    : u_end_val > u_start_val)
       && (neg_incr
    ? 1
    : u_end_val <= u_max))
     {
       ze_ok = 1;
     }
   if (start_val >= -s_max - 1
       && (neg_incr
    ? s_end_val < start_val
    : s_end_val > start_val)
       && (neg_incr
    ? s_end_val >= -s_max - 1
    : s_end_val <= s_max))
     {
       se_ok = 1;
     }
 }
    }
  else if (bl->biv->src_reg == loop_info->iteration_var
           && loop_info->comparison_value
           && loop_invariant_p (loop, loop_info->comparison_value)
           && (incr = biv_total_increment (bl))
           && ((enum rtx_code) (incr)->code) == CONST_INT)
    {
       if (((incr)->u.hwint[0]) == 1)
         {
           if (loop_info->comparison_code == LT)
             se_ok = ze_ok = 1;
           else if (loop_info->comparison_code == LTU)
             ze_ok = 1;
         }
       if (((incr)->u.hwint[0]) == -1)
         {
           if (loop_info->comparison_code == GT)
             se_ok = ze_ok = 1;
           else if (loop_info->comparison_code == GTU)
             ze_ok = 1;
         }
    }
  for (v = bl->giv; v; v = v->next_iv)
    if (v->ext_dependent)
      {
 enum rtx_code code = ((enum rtx_code) (v->ext_dependent)->code);
 int ok = 0;
 switch (code)
   {
   case SIGN_EXTEND:
     ok = se_ok;
     break;
   case ZERO_EXTEND:
     ok = ze_ok;
     break;
   case TRUNCATE:
     if (se_ok && ze_ok && info_ok)
       {
  enum machine_mode outer_mode = ((enum machine_mode) (v->ext_dependent)->mode);
  unsigned long max = mode_mask_array[outer_mode] >> 1;
  if (u_start_val <= max && u_end_val <= max)
    ok = 1;
       }
     break;
   default:
     abort ();
   }
 if (ok)
   {
     if (loop_dump_stream)
       {
  fprintf (loop_dump_stream,
    "Verified ext dependent giv at %d of reg %d\n",
    (((v->insn)->u.fld[0]).rtint), bl->regno);
       }
   }
 else
   {
     if (loop_dump_stream)
       {
  const char *why;
  if (info_ok)
    why = "biv iteration values overflowed";
  else
    {
      if (incr == (global_rtl[GR_PC]))
        incr = biv_total_increment (bl);
      if (incr == (const_int_rtx[64 +1]))
        why = "biv iteration info incomplete; incr by 1";
      else
        why = "biv iteration info incomplete";
    }
  fprintf (loop_dump_stream,
    "Failed ext dependent giv at %d, %s\n",
    (((v->insn)->u.fld[0]).rtint), why);
       }
     v->ignore = 1;
     bl->all_reduced = 0;
   }
      }
}
rtx
extend_value_for_giv (struct induction *v, rtx value1)
{
  rtx ext_dep = v->ext_dependent;
  if (! ext_dep)
    return value1;
  if (((rtx_class[(int) (((enum rtx_code) (value1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (value1)->code) == CONST_VECTOR) && ((enum machine_mode) (value1)->mode) == VOIDmode)
    return value1;
  return gen_rtx_fmt_e (((enum rtx_code) (ext_dep)->code), ((enum machine_mode) (ext_dep)->mode), value1);
}
struct combine_givs_stats
{
  int giv_number;
  int total_benefit;
};
static int
cmp_combine_givs_stats (const void *xp, const void *yp)
{
  const struct combine_givs_stats * const x =
    (const struct combine_givs_stats *) xp;
  const struct combine_givs_stats * const y =
    (const struct combine_givs_stats *) yp;
  int d;
  d = y->total_benefit - x->total_benefit;
  if (!d)
    d = x->giv_number - y->giv_number;
  return d;
}
static void
combine_givs (struct loop_regs *regs, struct iv_class *bl)
{
  const int extra_benefit = 3;
  struct induction *g1, *g2, **giv_array;
  int i, j, k, giv_count;
  struct combine_givs_stats *stats;
  rtx *can_combine;
  giv_count = 0;
  for (g1 = bl->giv; g1; g1 = g1->next_iv)
    if (!g1->ignore)
      giv_count++;
  giv_array = C_alloca(giv_count * sizeof (struct induction *));
  i = 0;
  for (g1 = bl->giv; g1; g1 = g1->next_iv)
    if (!g1->ignore)
      giv_array[i++] = g1;
  stats = xcalloc (giv_count, sizeof (*stats));
  can_combine = xcalloc (giv_count, giv_count * sizeof (rtx));
  for (i = 0; i < giv_count; i++)
    {
      int this_benefit;
      rtx single_use;
      g1 = giv_array[i];
      stats[i].giv_number = i;
      if (g1->giv_type == DEST_REG
   && (single_use = regs->array[(((g1->dest_reg)->u.fld[0]).rtuint)].single_usage)
   && single_use != (const_int_rtx[64]))
 continue;
      this_benefit = g1->benefit;
      if (g1->no_const_addval)
 this_benefit += 1;
      for (j = 0; j < giv_count; j++)
 {
   rtx this_combine;
   g2 = giv_array[j];
   if (g1 != g2
       && (this_combine = combine_givs_p (g1, g2)) != (rtx) 0)
     {
       can_combine[i * giv_count + j] = this_combine;
       this_benefit += g2->benefit + extra_benefit;
     }
 }
      stats[i].total_benefit = this_benefit;
    }
restart:
  qsort (stats, giv_count, sizeof (*stats), cmp_combine_givs_stats);
  if (loop_dump_stream)
    {
      fprintf (loop_dump_stream, "Sorted combine statistics:\n");
      for (k = 0; k < giv_count; k++)
 {
   g1 = giv_array[stats[k].giv_number];
   if (!g1->combined_with && !g1->same)
     fprintf (loop_dump_stream, " {%d, %d}",
       (((giv_array[stats[k].giv_number]->insn)->u.fld[0]).rtint),
       stats[k].total_benefit);
 }
      putc_unlocked ('\n', loop_dump_stream);
    }
  for (k = 0; k < giv_count; k++)
    {
      int g1_add_benefit = 0;
      i = stats[k].giv_number;
      g1 = giv_array[i];
      if (g1->combined_with || g1->same)
 continue;
      for (j = 0; j < giv_count; j++)
 {
   g2 = giv_array[j];
   if (g1 != g2 && can_combine[i * giv_count + j]
       && ! g2->same && ! g2->combined_with)
     {
       int l;
       g2->new_reg = can_combine[i * giv_count + j];
       g2->same = g1;
       if (g2->giv_type == DEST_ADDR)
  g2->benefit = (g2->benefit + reg_address_cost
          - address_cost (g2->new_reg,
          ((enum machine_mode) (g2->mem)->mode)));
       g1->combined_with++;
       g1->lifetime += g2->lifetime;
       g1_add_benefit += g2->benefit;
       if (! g2->replaceable && (((g2->dest_reg))->volatil))
  g1_add_benefit -= cost_per_copy;
       for (l = 0; l < giv_count; ++l)
  {
    int m = stats[l].giv_number;
    if (can_combine[m * giv_count + j])
      stats[l].total_benefit -= g2->benefit + extra_benefit;
  }
       if (loop_dump_stream)
  fprintf (loop_dump_stream,
    "giv at %d combined with giv at %d; new benefit %d + %d, lifetime %d\n",
    (((g2->insn)->u.fld[0]).rtint), (((g1->insn)->u.fld[0]).rtint),
    g1->benefit, g1_add_benefit, g1->lifetime);
     }
 }
      if (g1->combined_with)
 {
   for (j = 0; j < giv_count; ++j)
     {
       int m = stats[j].giv_number;
       if (can_combine[m * giv_count + i])
  stats[j].total_benefit -= g1->benefit + extra_benefit;
     }
   g1->benefit += g1_add_benefit;
   goto restart;
 }
    }
  free (stats);
  free (can_combine);
}
static rtx
gen_add_mult (rtx b, rtx m, rtx a, rtx reg)
{
  rtx seq;
  rtx result;
  start_sequence ();
  result = expand_mult_add (b, reg, m, a, ((enum machine_mode) (reg)->mode), 1);
  if (reg != result)
    emit_move_insn (reg, result);
  seq = get_insns ();
  end_sequence ();
  return seq;
}
static void
loop_regs_update (const struct loop *loop , rtx seq)
{
  rtx insn;
  insn = seq;
  while (insn != (rtx) 0)
    {
      rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
      if (set && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG))
 record_base_value (((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint), (((set)->u.fld[1]).rtx1), 0);
      insn = (((insn)->u.fld[2]).rtx1);
    }
}
void
loop_iv_add_mult_emit_before (const struct loop *loop, rtx b, rtx m, rtx a,
         rtx reg, basic_block before_bb, rtx before_insn)
{
  rtx seq;
  if (! before_insn)
    {
      loop_iv_add_mult_hoist (loop, b, m, a, reg);
      return;
    }
  seq = gen_add_mult (copy_rtx (b), copy_rtx (m), copy_rtx (a), reg);
  update_reg_last_use (a, before_insn);
  update_reg_last_use (b, before_insn);
  update_reg_last_use (m, before_insn);
  loop_regs_update (loop, seq);
  loop_insn_emit_before (loop, before_bb, before_insn, seq);
}
void
loop_iv_add_mult_sink (const struct loop *loop, rtx b, rtx m, rtx a, rtx reg)
{
  rtx seq;
  seq = gen_add_mult (copy_rtx (b), copy_rtx (m), copy_rtx (a), reg);
  update_reg_last_use (a, loop->sink);
  update_reg_last_use (b, loop->sink);
  update_reg_last_use (m, loop->sink);
  loop_regs_update (loop, seq);
  loop_insn_sink (loop, seq);
}
void
loop_iv_add_mult_hoist (const struct loop *loop, rtx b, rtx m, rtx a, rtx reg)
{
  rtx seq;
  seq = gen_add_mult (copy_rtx (b), copy_rtx (m), copy_rtx (a), reg);
  loop_regs_update (loop, seq);
  loop_insn_hoist (loop, seq);
}
static int
iv_add_mult_cost (rtx b, rtx m, rtx a, rtx reg)
{
  int cost = 0;
  rtx last, result;
  start_sequence ();
  result = expand_mult_add (b, reg, m, a, ((enum machine_mode) (reg)->mode), 1);
  if (reg != result)
    emit_move_insn (reg, result);
  last = get_last_insn ();
  while (last)
    {
      rtx t = (((((enum rtx_code) (last)->code) == INSN) || (((enum rtx_code) (last)->code) == JUMP_INSN) || (((enum rtx_code) (last)->code) == CALL_INSN)) ? (((enum rtx_code) ((((last)->u.fld[5]).rtx1))->code) == SET ? (((last)->u.fld[5]).rtx1) : single_set_2 (last, (((last)->u.fld[5]).rtx1))) : (rtx) 0);
      if (t)
 cost += rtx_cost ((((t)->u.fld[1]).rtx1), SET);
      last = (((last)->u.fld[1]).rtx1);
    }
  end_sequence ();
  return cost;
}
static int
product_cheap_p (rtx a, rtx b)
{
  rtx tmp;
  int win, n_insns;
  if (((enum rtx_code) (a)->code) == CONST_INT)
    tmp = a, a = b, b = tmp;
  if (((enum rtx_code) (a)->code) == CONST_INT)
    return 1;
  if (((enum rtx_code) (b)->code) != CONST_INT)
    return 0;
  start_sequence ();
  expand_mult (((enum machine_mode) (a)->mode), a, b, (rtx) 0, 1);
  tmp = get_insns ();
  end_sequence ();
  win = 1;
  if (((((enum rtx_code) (tmp)->code) == INSN) || (((enum rtx_code) (tmp)->code) == JUMP_INSN) || (((enum rtx_code) (tmp)->code) == CALL_INSN)))
    {
      n_insns = 0;
      while (tmp != (rtx) 0)
 {
   rtx next = (((tmp)->u.fld[2]).rtx1);
   if (++n_insns > 3
       || ((enum rtx_code) (tmp)->code) != INSN
       || (((enum rtx_code) ((((tmp)->u.fld[5]).rtx1))->code) == SET
    && ((enum rtx_code) (((((((tmp)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->code) == MULT)
       || (((enum rtx_code) ((((tmp)->u.fld[5]).rtx1))->code) == PARALLEL
    && ((enum rtx_code) (((((((((tmp)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->code) == SET
    && ((enum rtx_code) ((((((((((((tmp)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->code) == MULT))
     {
       win = 0;
       break;
     }
   tmp = next;
 }
    }
  else if (((enum rtx_code) (tmp)->code) == SET
    && ((enum rtx_code) ((((tmp)->u.fld[1]).rtx1))->code) == MULT)
    win = 0;
  else if (((enum rtx_code) (tmp)->code) == PARALLEL
    && ((enum rtx_code) ((((((tmp)->u.fld[0]).rtvec1))->elem[0]))->code) == SET
    && ((enum rtx_code) (((((((((tmp)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->code) == MULT)
    win = 0;
  return win;
}
static int
check_dbra_loop (struct loop *loop, int insn_count)
{
  struct loop_info *loop_info = ((struct loop_info *) (loop)->aux);
  struct loop_regs *regs = (&((struct loop_info *) (loop)->aux)->regs);
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct iv_class *bl;
  rtx reg;
  enum machine_mode mode;
  rtx jump_label;
  rtx final_value;
  rtx start_value;
  rtx new_add_val;
  rtx comparison;
  rtx before_comparison;
  rtx p;
  rtx jump;
  rtx first_compare;
  int compare_and_branch;
  rtx loop_start = loop->start;
  rtx loop_end = loop->end;
  jump = (((loop_end)->u.fld[1]).rtx1);
  comparison = get_condition_for_loop (loop, jump);
  if (comparison == 0)
    return 0;
  if (!onlyjump_p (jump))
    return 0;
  get_condition (jump, &first_compare, 0);
  if (first_compare == jump)
    compare_and_branch = 1;
  else if (first_compare == prev_nonnote_insn (jump))
    compare_and_branch = 2;
  else
    return 0;
  {
    rtx jump1;
    if ((jump1 = prev_nonnote_insn (first_compare)) != loop->cont)
      if (((enum rtx_code) (jump1)->code) == JUMP_INSN)
 return 0;
  }
  for (bl = ivs->list; bl; bl = bl->next)
    {
      if (bl->biv_count == 1
   && ! bl->biv->maybe_multiple
   && bl->biv->dest_reg == (((comparison)->u.fld[0]).rtx1)
   && ! reg_used_between_p ((cfun->emit->x_regno_reg_rtx)[bl->regno], bl->biv->insn,
       first_compare))
 break;
    }
  if (!bl)
    for (bl = ivs->list; bl; bl = bl->next)
      if (bl->biv_count == 1
   && ! bl->biv->maybe_multiple
   && bl->biv->dest_reg == (((comparison)->u.fld[1]).rtx1)
   && ! reg_used_between_p ((cfun->emit->x_regno_reg_rtx)[bl->regno], bl->biv->insn,
       first_compare))
 {
   comparison = gen_rtx_fmt_ee (swap_condition (((enum rtx_code) (comparison)->code)),
           VOIDmode,
           (((comparison)->u.fld[1]).rtx1),
           (((comparison)->u.fld[0]).rtx1));
   break;
 }
  if (! bl)
    return 0;
  if (((((enum rtx_code) (comparison)->code) == GT && (((comparison)->u.fld[1]).rtx1) == (const_int_rtx[64 -1]))
       || (((enum rtx_code) (comparison)->code) == NE && (((comparison)->u.fld[1]).rtx1) == (const_int_rtx[64])))
      && ((enum rtx_code) (bl->biv->add_val)->code) == CONST_INT
      && ((bl->biv->add_val)->u.hwint[0]) < 0)
    {
      if (((enum rtx_code) (bl->initial_value)->code) == CONST_INT
   && ((bl->initial_value)->u.hwint[0]) > 0
   && (((bl->initial_value)->u.hwint[0])
       % (-((bl->biv->add_val)->u.hwint[0]))) == 0)
 {
   if (! find_reg_note (jump, REG_NONNEG, (rtx) 0))
     (((jump)->u.fld[8]).rtx1)
       = gen_rtx_fmt_ee (EXPR_LIST, (REG_NONNEG), (bl->biv->dest_reg), ((((jump)->u.fld[8]).rtx1)))
                        ;
   bl->nonneg = 1;
   return 1;
 }
      for (p = loop_start; p; p = (((p)->u.fld[1]).rtx1))
 {
   if (((enum rtx_code) (p)->code) == CODE_LABEL)
     break;
   if (((enum rtx_code) (p)->code) != JUMP_INSN)
     continue;
   before_comparison = get_condition_for_loop (loop, p);
   if (before_comparison
       && (((before_comparison)->u.fld[0]).rtx1) == bl->biv->dest_reg
       && (((enum rtx_code) (before_comparison)->code) == LT
    || ((enum rtx_code) (before_comparison)->code) == LTU)
       && (((before_comparison)->u.fld[1]).rtx1) == (const_int_rtx[64])
       && ! reg_set_between_p (bl->biv->dest_reg, p, loop_start)
       && ((bl->biv->add_val)->u.hwint[0]) == -1)
     {
       if (! find_reg_note (jump, REG_NONNEG, (rtx) 0))
  (((jump)->u.fld[8]).rtx1)
    = gen_rtx_fmt_ee (EXPR_LIST, (REG_NONNEG), (bl->biv->dest_reg), ((((jump)->u.fld[8]).rtx1)))
                            ;
       bl->nonneg = 1;
       return 1;
     }
 }
    }
  else if (((enum rtx_code) (bl->biv->add_val)->code) == CONST_INT
    && ((bl->biv->add_val)->u.hwint[0]) > 0)
    {
      int num_nonfixed_reads = 0;
      int no_use_except_counting = 0;
      int reversible_mem_store = 1;
      if (bl->giv_count == 0
   && !loop->exit_count
   && !loop_info->has_multiple_exit_targets)
 {
   rtx bivreg = (cfun->emit->x_regno_reg_rtx)[bl->regno];
   struct iv_class *blt;
   no_use_except_counting = 1;
   for (p = loop_start; p != loop_end; p = (((p)->u.fld[2]).rtx1))
     if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
       {
  rtx set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0);
  if (set && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
      && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == bl->regno)
    ;
  else if (!reg_mentioned_p (bivreg, (((p)->u.fld[5]).rtx1)))
    ;
  else if (p == prev_nonnote_insn (prev_nonnote_insn (loop_end))
    || p == prev_nonnote_insn (loop_end))
    {
      note_stores ((((p)->u.fld[5]).rtx1), note_set_pseudo_multiple_uses,
     regs);
      if (regs->multiple_uses)
        {
   no_use_except_counting = 0;
   break;
        }
    }
  else
    {
      no_use_except_counting = 0;
      break;
    }
       }
   for (blt = ivs->list; blt; blt = blt->next)
     if (blt->init_set
  && reg_mentioned_p (bivreg, (((blt->init_set)->u.fld[1]).rtx1)))
       {
  no_use_except_counting = 0;
  break;
       }
 }
      if (no_use_except_counting)
 ;
      else if (loop_info->num_mem_sets <= 1)
 {
   for (p = loop_start; p != loop_end; p = (((p)->u.fld[2]).rtx1))
     if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
       num_nonfixed_reads += count_nonfixed_reads (loop, (((p)->u.fld[5]).rtx1));
   if (loop_info->num_mem_sets == 1)
     {
       struct induction *v;
       reversible_mem_store = 0;
       for (v = bl->giv; reversible_mem_store && v; v = v->next_iv)
  {
    if (v->giv_type == DEST_REG
        && reg_mentioned_p (v->dest_reg,
       (((loop_info->first_loop_store_insn)->u.fld[5]).rtx1))
        && loop_insn_first_p (loop_info->first_loop_store_insn,
         v->insn))
      reversible_mem_store = 0;
  }
     }
 }
      else
 return 0;
      if ((num_nonfixed_reads <= 1
    && ! loop_info->has_nonconst_call
    && ! loop_info->has_prefetch
    && ! loop_info->has_volatile
    && reversible_mem_store
    && (bl->giv_count + bl->biv_count + loop_info->num_mem_sets
        + num_unmoved_movables (loop) + compare_and_branch == insn_count)
    && (bl == ivs->list && bl->next == 0))
   || (no_use_except_counting && ! loop_info->has_prefetch))
 {
   rtx tem;
   if (loop_dump_stream)
     fprintf (loop_dump_stream, "Can reverse loop\n");
   if (comparison
       && (((enum rtx_code) (comparison)->code) == LT
    || (((enum rtx_code) (comparison)->code) == LE
        && no_use_except_counting)
    || ((enum rtx_code) (comparison)->code) == LTU))
     {
       long add_val, add_adjust, comparison_val = 0;
       rtx initial_value, comparison_value;
       int nonneg = 0;
       enum rtx_code cmp_code;
       int comparison_const_width;
       unsigned long comparison_sign_mask;
       add_val = ((bl->biv->add_val)->u.hwint[0]);
       comparison_value = (((comparison)->u.fld[1]).rtx1);
       if (((enum machine_mode) (comparison_value)->mode) == VOIDmode)
  comparison_const_width
    = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((comparison)->u.fld[0]).rtx1))->mode)]) * 8));
       else
  comparison_const_width
    = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (comparison_value)->mode)]) * 8));
       if (comparison_const_width > (8 * 4))
  comparison_const_width = (8 * 4);
       comparison_sign_mask
  = (unsigned long) 1 << (comparison_const_width - 1);
       if (! loop_invariant_p (loop, comparison_value))
  return 0;
       if (((enum rtx_code) (comparison_value)->code) == CONST_INT)
  comparison_val = ((comparison_value)->u.hwint[0]);
       initial_value = bl->initial_value;
       if (no_use_except_counting
    && ((enum rtx_code) (comparison_value)->code) == CONST_INT
    && ((enum rtx_code) (initial_value)->code) == CONST_INT)
  {
    comparison_val = comparison_val - ((bl->initial_value)->u.hwint[0]);
    comparison_val = comparison_val + add_val - 1;
    comparison_val
      -= (unsigned long) comparison_val % add_val;
    initial_value = (const_int_rtx[64]);
  }
       if (initial_value == (const_int_rtx[64])
    && ((enum rtx_code) (comparison_value)->code) == CONST_INT
    && ! (((comparison_val - add_val) ^ ((comparison_value)->u.hwint[0]))
   & comparison_sign_mask))
  {
    add_adjust = add_val;
    nonneg = 1;
    cmp_code = GE;
  }
       else if (add_val == 1 && loop->vtop
         && (bl->biv_count == 0
      || no_use_except_counting))
  {
    add_adjust = 0;
    cmp_code = NE;
  }
       else
  return 0;
       if (((enum rtx_code) (comparison)->code) == LE)
  add_adjust -= add_val;
       if (initial_value == (const_int_rtx[64])
    && ((enum rtx_code) (comparison_value)->code) == CONST_INT)
  {
    if (((unsigned long) comparison_val % add_val) != 0)
      return 0;
  }
       else
  {
    if (! no_use_except_counting || add_val != 1)
      return 0;
  }
       final_value = comparison_value;
       if (((enum rtx_code) (comparison_value)->code) == CONST_INT
    && ((enum rtx_code) (initial_value)->code) == CONST_INT)
  {
    comparison_value = gen_rtx_CONST_INT (VOIDmode, (long) (comparison_val));
    final_value
      = gen_rtx_CONST_INT (VOIDmode, (long) (comparison_val + ((bl->initial_value)->u.hwint[0])));
  }
       bl->initial_value = initial_value;
       reg = bl->biv->dest_reg;
       mode = ((enum machine_mode) (reg)->mode);
       jump_label = condjump_label ((((loop_end)->u.fld[1]).rtx1));
       new_add_val = gen_rtx_CONST_INT (VOIDmode, (long) (-((bl->biv->add_val)->u.hwint[0])));
       if (initial_value == (const_int_rtx[64])
    && ((enum rtx_code) (comparison_value)->code) == CONST_INT)
  {
    start_value
      = gen_int_mode (comparison_val - add_adjust, mode);
    loop_insn_hoist (loop, gen_move_insn (reg, start_value));
  }
       else if (((enum rtx_code) (initial_value)->code) == CONST_INT)
  {
    rtx offset = gen_rtx_CONST_INT (VOIDmode, (long) (-((initial_value)->u.hwint[0]) - add_adjust));
    rtx add_insn = gen_add3_insn (reg, comparison_value, offset);
    if (add_insn == 0)
      return 0;
    start_value
      = gen_rtx_fmt_ee (PLUS, (mode), (comparison_value), (offset));
    loop_insn_hoist (loop, add_insn);
    if (((enum rtx_code) (comparison)->code) == LE)
      final_value = gen_rtx_fmt_ee (PLUS, (mode), (comparison_value), (gen_rtx_CONST_INT (VOIDmode, (long) (add_val))))
                        ;
  }
       else if (! add_adjust)
  {
    rtx sub_insn = gen_sub3_insn (reg, comparison_value,
      initial_value);
    if (sub_insn == 0)
      return 0;
    start_value
      = gen_rtx_fmt_ee (MINUS, (mode), (comparison_value), (initial_value));
    loop_insn_hoist (loop, sub_insn);
  }
       else
  return 0;
       start_sequence ();
       expand_inc (reg, new_add_val);
       tem = get_insns ();
       end_sequence ();
       p = loop_insn_emit_before (loop, 0, bl->biv->insn, tem);
       delete_insn (bl->biv->insn);
       bl->biv->insn = p;
       bl->initial_value = start_value;
       bl->biv->add_val = new_add_val;
       loop_info->initial_value = reg;
       loop_info->initial_equiv_value = reg;
       loop_info->final_value = (const_int_rtx[64]);
       loop_info->final_equiv_value = (const_int_rtx[64]);
       loop_info->comparison_value = (const_int_rtx[64]);
       loop_info->comparison_code = cmp_code;
       loop_info->increment = new_add_val;
       ((((((jump_label)->u.fld[0]).rtx1))->u.fld[4]).rtint)++;
       if (((((reg_n_info)->data.reg[bl->regno])->last_uid) != (((first_compare)->u.fld[0]).rtint))
    || ! bl->init_insn
    || (((reg_n_info)->data.reg[bl->regno])->first_uid) != (((bl->init_insn)->u.fld[0]).rtint))
  loop_insn_sink (loop, gen_load_of_final_value (reg, final_value));
       delete_related_insns ((((loop_end)->u.fld[1]).rtx1));
       if (compare_and_branch == 2)
  delete_related_insns (first_compare);
       start_sequence ();
       emit_cmp_and_jump_insns (reg, (const_int_rtx[64]), cmp_code, (rtx) 0,
           mode, 0,
           (((jump_label)->u.fld[0]).rtx1));
       tem = get_insns ();
       end_sequence ();
       emit_jump_insn_before (tem, loop_end);
       for (tem = (((loop_end)->u.fld[1]).rtx1);
     tem && ((enum rtx_code) (tem)->code) != JUMP_INSN;
     tem = (((tem)->u.fld[1]).rtx1))
  ;
       if (tem)
  (((tem)->u.fld[9]).rtx1) = (((jump_label)->u.fld[0]).rtx1);
       if (nonneg)
  {
    if (tem)
      {
        (((tem)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_NONNEG), (reg), ((((tem)->u.fld[8]).rtx1)))
                          ;
      }
    bl->nonneg = 1;
  }
       for (p = loop_start; p != loop_end; p = (((p)->u.fld[2]).rtx1))
  if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
    {
      rtx *pnote;
      rtx set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0);
      if (! set
   || !(((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
   || (size_t) ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= ivs->n_regs
   || ivs->regs[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)].type != GENERAL_INDUCT
   || ivs->regs[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)].iv.info->src_reg != bl->biv->src_reg)
        for (pnote = &(((p)->u.fld[8]).rtx1); *pnote;)
   {
     if (((enum reg_note) ((enum machine_mode) (*pnote)->mode)) == REG_EQUAL
         && reg_mentioned_p ((cfun->emit->x_regno_reg_rtx)[bl->regno],
        (((*pnote)->u.fld[0]).rtx1)))
       *pnote = (((*pnote)->u.fld[1]).rtx1);
     else
       pnote = &(((*pnote)->u.fld[1]).rtx1);
   }
    }
       bl->reversed = 1;
       if (loop_dump_stream)
  {
    fprintf (loop_dump_stream, "Reversed loop");
    if (bl->nonneg)
      fprintf (loop_dump_stream, " and added reg_nonneg\n");
    else
      fprintf (loop_dump_stream, "\n");
  }
       return 1;
     }
 }
    }
  return 0;
}
static int
maybe_eliminate_biv (const struct loop *loop, struct iv_class *bl,
       int eliminate_p, int threshold, int insn_count)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  rtx reg = bl->biv->dest_reg;
  rtx p;
  for (p = loop->start; p != loop->end; p = (((p)->u.fld[2]).rtx1))
    {
      enum rtx_code code = ((enum rtx_code) (p)->code);
      basic_block where_bb = 0;
      rtx where_insn = threshold >= insn_count ? 0 : p;
      rtx note;
      if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
 {
   note = find_reg_note (p, REG_LIBCALL, (rtx) 0);
   if (note)
     {
       rtx last = (((note)->u.fld[0]).rtx1);
       rtx set = (((((enum rtx_code) (last)->code) == INSN) || (((enum rtx_code) (last)->code) == JUMP_INSN) || (((enum rtx_code) (last)->code) == CALL_INSN)) ? (((enum rtx_code) ((((last)->u.fld[5]).rtx1))->code) == SET ? (((last)->u.fld[5]).rtx1) : single_set_2 (last, (((last)->u.fld[5]).rtx1))) : (rtx) 0);
       if (set && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG))
  {
    unsigned int regno = ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
    if (regno < ivs->n_regs
        && ivs->regs[regno].type == GENERAL_INDUCT
        && ivs->regs[regno].iv.info->src_reg == bl->biv->src_reg)
      p = last;
  }
     }
 }
      if ((code == INSN || code == JUMP_INSN || code == CALL_INSN)
   && reg_mentioned_p (reg, (((p)->u.fld[5]).rtx1))
   && ! maybe_eliminate_biv_1 (loop, (((p)->u.fld[5]).rtx1), p, bl,
          eliminate_p, where_bb, where_insn))
 {
   if (loop_dump_stream)
     fprintf (loop_dump_stream,
       "Cannot eliminate biv %d: biv used in insn %d.\n",
       bl->regno, (((p)->u.fld[0]).rtint));
   break;
 }
      if (eliminate_p
   && (note = find_reg_note (p, REG_EQUAL, (rtx) 0)) != (rtx) 0
   && reg_mentioned_p (reg, (((note)->u.fld[0]).rtx1)))
 remove_note (p, note);
    }
  if (p == loop->end)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream, "biv %d %s eliminated.\n",
   bl->regno, eliminate_p ? "was" : "can be");
      return 1;
    }
  return 0;
}
int
loop_insn_first_p (rtx insn, rtx reference)
{
  rtx p, q;
  for (p = insn, q = reference;;)
    {
      if (q == insn || ! p)
 return 0;
      if (p == reference || ! q)
 return 1;
      if ((((p)->u.fld[0]).rtint) < max_uid_for_loop
   && (((q)->u.fld[0]).rtint) < max_uid_for_loop
   && ((enum rtx_code) (p)->code) != NOTE)
 return ((((p)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((p)->u.fld[0]).rtint)] : (abort (), -1)) <= ((((q)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((q)->u.fld[0]).rtint)] : (abort (), -1));
      if ((((p)->u.fld[0]).rtint) >= max_uid_for_loop
   || ((enum rtx_code) (p)->code) == NOTE)
 p = (((p)->u.fld[2]).rtx1);
      if ((((q)->u.fld[0]).rtint) >= max_uid_for_loop)
 q = (((q)->u.fld[2]).rtx1);
    }
}
static int
biv_elimination_giv_has_0_offset (struct induction *biv,
      struct induction *giv, rtx insn)
{
  if (giv->auto_inc_opt
      && ((loop_insn_first_p (giv->insn, insn)
    && loop_insn_first_p (insn, biv->insn))
   || (loop_insn_first_p (biv->insn, insn)
       && loop_insn_first_p (insn, giv->insn))))
    return 0;
  return 1;
}
static int
maybe_eliminate_biv_1 (const struct loop *loop, rtx x, rtx insn,
         struct iv_class *bl, int eliminate_p,
         basic_block where_bb, rtx where_insn)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  rtx reg = bl->biv->dest_reg;
  enum machine_mode mode = ((enum machine_mode) (reg)->mode);
  struct induction *v;
  rtx arg, tem;
  int arg_operand;
  const char *fmt;
  int i, j;
  switch (code)
    {
    case REG:
      if (x == reg)
 return 0;
      return 1;
    case SET:
      if ((((x)->u.fld[0]).rtx1) == reg)
 return 1;
      for (v = bl->giv; v; v = v->next_iv)
 if (v->giv_type == DEST_REG && (((x)->u.fld[0]).rtx1) == v->dest_reg)
   return 1;
      break;
    case COMPARE:
    case EQ: case NE:
    case GT: case GE: case GTU: case GEU:
    case LT: case LE: case LTU: case LEU:
      if ((((x)->u.fld[0]).rtx1) == reg)
 arg = (((x)->u.fld[1]).rtx1), arg_operand = 1;
      else if ((((x)->u.fld[1]).rtx1) == reg)
 arg = (((x)->u.fld[0]).rtx1), arg_operand = 0;
      else
 break;
      if (((rtx_class[(int) (((enum rtx_code) (arg)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (arg)->code) == CONST_VECTOR))
 {
   for (v = bl->giv; v; v = v->next_iv)
     if (((enum rtx_code) (v->mult_val)->code) == CONST_INT
  && ((v->mult_val)->u.hwint[0]) > 0
  && (((enum rtx_code) (v->add_val)->code) == SYMBOL_REF
      || ((enum rtx_code) (v->add_val)->code) == LABEL_REF
      || ((enum rtx_code) (v->add_val)->code) == CONST
      || ((((enum rtx_code) (v->add_val)->code) == REG)
   && (((v->add_val))->frame_related)))
  && ! v->ignore && ! v->maybe_dead && v->always_computable
  && v->mode == mode)
       {
  if (! biv_elimination_giv_has_0_offset (bl->biv, v, insn))
    continue;
  if (((enum rtx_code) (arg)->code) == CONST_INT)
    {
      rtx add_val;
      if (((enum rtx_code) (v->add_val)->code) == CONST_INT)
        add_val = v->add_val;
      else
        add_val = (const_int_rtx[64]);
      if (const_mult_add_overflow_p (arg, v->mult_val,
         add_val, mode, 1))
        continue;
    }
  if (! eliminate_p)
    return 1;
  validate_change (insn, &(((x)->u.fld[1 - arg_operand]).rtx1), v->new_reg, 1);
  if (((enum rtx_code) (arg)->code) == CONST_INT
      && ((enum rtx_code) (v->add_val)->code) == CONST_INT)
    {
      tem = expand_mult_add (arg, (rtx) 0, v->mult_val,
        v->add_val, mode, 1);
    }
  else
    {
      tem = gen_reg_rtx (mode);
      loop_iv_add_mult_emit_before (loop, arg,
        v->mult_val, v->add_val,
        tem, where_bb, where_insn);
    }
  validate_change (insn, &(((x)->u.fld[arg_operand]).rtx1), tem, 1);
  if (apply_change_group ())
    return 1;
       }
   for (v = bl->giv; v; v = v->next_iv)
     if (((enum rtx_code) (v->mult_val)->code) == CONST_INT
  && ((v->mult_val)->u.hwint[0]) > 0
  && ! v->ignore && ! v->maybe_dead && v->always_computable
  && v->mode == mode
  && 0)
       {
  rtx tem;
  if (! biv_elimination_giv_has_0_offset (bl->biv, v, insn))
    continue;
  if (! eliminate_p)
    return 1;
  tem = gen_reg_rtx (mode);
  validate_change (insn, &(((x)->u.fld[1 - arg_operand]).rtx1),
     v->new_reg, 1);
  loop_iv_add_mult_emit_before (loop, arg,
           v->mult_val, v->add_val,
           tem, where_bb, where_insn);
  validate_change (insn, &(((x)->u.fld[arg_operand]).rtx1), tem, 1);
  if (apply_change_group ())
    return 1;
       }
 }
      else if ((((enum rtx_code) (arg)->code) == REG) || (((enum rtx_code) (arg)->code) == MEM))
 {
   if (loop_invariant_p (loop, arg) == 1)
     {
       for (v = bl->giv; v; v = v->next_iv)
  if (((enum rtx_code) (v->mult_val)->code) == CONST_INT && ((v->mult_val)->u.hwint[0]) > 0
      && ! v->ignore && ! v->maybe_dead && v->always_computable
      && v->mode == mode
      && 0)
    {
      rtx tem;
      if (! biv_elimination_giv_has_0_offset (bl->biv, v, insn))
        continue;
      if (! eliminate_p)
        return 1;
      tem = gen_reg_rtx (mode);
      validate_change (insn, &(((x)->u.fld[1 - arg_operand]).rtx1),
         v->new_reg, 1);
      loop_iv_add_mult_emit_before (loop, arg,
        v->mult_val, v->add_val,
        tem, where_bb, where_insn);
      validate_change (insn, &(((x)->u.fld[arg_operand]).rtx1), tem, 1);
      if (apply_change_group ())
        return 1;
    }
     }
 }
      return 0;
    case MEM:
      for (v = bl->giv; v; v = v->next_iv)
 if (v->giv_type == DEST_ADDR && v->location == &(((x)->u.fld[0]).rtx1))
   return 1;
      break;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      switch (fmt[i])
 {
 case 'e':
   if (! maybe_eliminate_biv_1 (loop, (((x)->u.fld[i]).rtx1), insn, bl,
           eliminate_p, where_bb, where_insn))
     return 0;
   break;
 case 'E':
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     if (! maybe_eliminate_biv_1 (loop, (((((x)->u.fld[i]).rtvec1))->elem[j]), insn, bl,
      eliminate_p, where_bb, where_insn))
       return 0;
   break;
 }
    }
  return 1;
}
static int
last_use_this_basic_block (rtx reg, rtx insn)
{
  rtx n;
  for (n = insn;
       n && ((enum rtx_code) (n)->code) != CODE_LABEL && ((enum rtx_code) (n)->code) != JUMP_INSN;
       n = (((n)->u.fld[2]).rtx1))
    {
      if ((((reg_n_info)->data.reg[(((reg)->u.fld[0]).rtuint)])->last_uid) == (((n)->u.fld[0]).rtint))
 return 1;
    }
  return 0;
}
static void
record_initial (rtx dest, rtx set, void *data )
{
  struct loop_ivs *ivs = (struct loop_ivs *) data;
  struct iv_class *bl;
  if (!(((enum rtx_code) (dest)->code) == REG)
      || (((dest)->u.fld[0]).rtuint) >= ivs->n_regs
      || ivs->regs[(((dest)->u.fld[0]).rtuint)].type != BASIC_INDUCT)
    return;
  bl = ivs->regs[(((dest)->u.fld[0]).rtuint)].iv.class;
  if (bl->init_insn == 0)
    {
      bl->init_insn = note_insn;
      bl->init_set = set;
    }
}
static void
update_reg_last_use (rtx x, rtx insn)
{
  if ((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) < max_reg_before_loop
      && (((insn)->u.fld[0]).rtint) < max_uid_for_loop
      && ((((reg_n_info)->data.reg[(((x)->u.fld[0]).rtuint)])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[(((x)->u.fld[0]).rtuint)])->last_uid)] : 2147483647) < ((((insn)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((insn)->u.fld[0]).rtint)] : (abort (), -1)))
    {
      (((reg_n_info)->data.reg[(((x)->u.fld[0]).rtuint)])->last_uid) = (((insn)->u.fld[0]).rtint);
    }
  else
    {
      int i, j;
      const char *fmt = (rtx_format[(int) (((enum rtx_code) (x)->code))]);
      for (i = (rtx_length[(int) (((enum rtx_code) (x)->code))]) - 1; i >= 0; i--)
 {
   if (fmt[i] == 'e')
     update_reg_last_use ((((x)->u.fld[i]).rtx1), insn);
   else if (fmt[i] == 'E')
     for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
       update_reg_last_use ((((((x)->u.fld[i]).rtvec1))->elem[j]), insn);
 }
    }
}
rtx
canonicalize_condition (rtx insn, rtx cond, int reverse, rtx *earliest,
   rtx want_reg, int allow_cc_mode)
{
  enum rtx_code code;
  rtx prev = insn;
  rtx set;
  rtx tem;
  rtx op0, op1;
  int reverse_code = 0;
  enum machine_mode mode;
  code = ((enum rtx_code) (cond)->code);
  mode = ((enum machine_mode) (cond)->mode);
  op0 = (((cond)->u.fld[0]).rtx1);
  op1 = (((cond)->u.fld[1]).rtx1);
  if (reverse)
    code = reversed_comparison_code (cond, insn);
  if (code == UNKNOWN)
    return 0;
  if (earliest)
    *earliest = insn;
  while (((rtx_class[(int) (code)]) == RTX_COMPARE
   || (rtx_class[(int) (code)]) == RTX_COMM_COMPARE)
  && op1 == (const_tiny_rtx[0][(int) (((enum machine_mode) (op0)->mode))])
  && op0 != want_reg)
    {
      rtx x = 0;
      if (((enum rtx_code) (op0)->code) == COMPARE)
 {
   op1 = (((op0)->u.fld[1]).rtx1);
   op0 = (((op0)->u.fld[0]).rtx1);
   continue;
 }
      else if (!(((enum rtx_code) (op0)->code) == REG))
 break;
      if ((prev = prev_nonnote_insn (prev)) == 0
   || ((enum rtx_code) (prev)->code) != INSN
   || 0)
 break;
      set = set_of (op0, prev);
      if (set
   && (((enum rtx_code) (set)->code) != SET
       || !rtx_equal_p ((((set)->u.fld[0]).rtx1), op0)))
 break;
      if (set)
 {
   enum machine_mode inner_mode = ((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode);
   if ((((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == COMPARE
        || (((code == NE
       || (code == LT
    && mode_class[inner_mode] == MODE_INT
    && (((unsigned short) (((unsigned short) mode_size[inner_mode]) * 8))
        <= (8 * 4))
    && (1
        & ((long) 1
    << (((unsigned short) (((unsigned short) mode_size[inner_mode]) * 8)) - 1))))
       ))
     && (((rtx_class[(int) (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code))]) & (~1)) == (RTX_COMPARE & (~1)))))
       && (((mode_class[mode] == MODE_CC)
     == (mode_class[inner_mode] == MODE_CC))
    || mode == VOIDmode || inner_mode == VOIDmode))
     x = (((set)->u.fld[1]).rtx1);
   else if (((code == EQ
       || (code == GE
    && (((unsigned short) (((unsigned short) mode_size[inner_mode]) * 8))
        <= (8 * 4))
    && mode_class[inner_mode] == MODE_INT
    && (1
        & ((long) 1
    << (((unsigned short) (((unsigned short) mode_size[inner_mode]) * 8)) - 1))))
       ))
     && (((rtx_class[(int) (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code))]) & (~1)) == (RTX_COMPARE & (~1)))
     && (((mode_class[mode] == MODE_CC)
   == (mode_class[inner_mode] == MODE_CC))
         || mode == VOIDmode || inner_mode == VOIDmode))
     {
       reverse_code = 1;
       x = (((set)->u.fld[1]).rtx1);
     }
   else
     break;
 }
      else if (reg_set_p (op0, prev))
 break;
      if (x)
 {
   if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
     code = ((enum rtx_code) (x)->code);
   if (reverse_code)
     {
       code = reversed_comparison_code (x, prev);
       if (code == UNKNOWN)
  return 0;
       reverse_code = 0;
     }
   op0 = (((x)->u.fld[0]).rtx1), op1 = (((x)->u.fld[1]).rtx1);
   if (earliest)
     *earliest = prev;
 }
    }
  if (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
    code = swap_condition (code), tem = op0, op0 = op1, op1 = tem;
  if (!allow_cc_mode
      && mode_class[((enum machine_mode) (op0)->mode)] == MODE_CC)
    return 0;
  if (mode_class[((enum machine_mode) (op0)->mode)] != MODE_CC
      && ((enum rtx_code) (op1)->code) == CONST_INT
      && ((enum machine_mode) (op0)->mode) != VOIDmode
      && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)) <= (8 * 4))
    {
      long const_val = ((op1)->u.hwint[0]);
      unsigned long uconst_val = const_val;
      unsigned long max_val
 = (unsigned long) mode_mask_array[((enum machine_mode) (op0)->mode)];
      switch (code)
 {
 case LE:
   if ((unsigned long) const_val != max_val >> 1)
     code = LT, op1 = gen_int_mode (const_val + 1, ((enum machine_mode) (op0)->mode));
   break;
 case GE:
   if ((long) (const_val & max_val)
       != (((long) 1
     << (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (op0)->mode)]) * 8)) - 1))))
     code = GT, op1 = gen_int_mode (const_val - 1, ((enum machine_mode) (op0)->mode));
   break;
 case LEU:
   if (uconst_val < max_val)
     code = LTU, op1 = gen_int_mode (uconst_val + 1, ((enum machine_mode) (op0)->mode));
   break;
 case GEU:
   if (uconst_val != 0)
     code = GTU, op1 = gen_int_mode (uconst_val - 1, ((enum machine_mode) (op0)->mode));
   break;
 default:
   break;
 }
    }
  if (((op0) ? 0 : 0))
    return 0;
  return gen_rtx_fmt_ee (code, VOIDmode, op0, op1);
}
rtx
get_condition (rtx jump, rtx *earliest, int allow_cc_mode)
{
  rtx cond;
  int reverse;
  rtx set;
  if (((enum rtx_code) (jump)->code) != JUMP_INSN
      || ! any_condjump_p (jump))
    return 0;
  set = pc_set (jump);
  cond = ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
  reverse
    = ((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->code) == LABEL_REF
      && (((((((((set)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->u.fld[0]).rtx1) == (((jump)->u.fld[9]).rtx1);
  return canonicalize_condition (jump, cond, reverse, earliest, (rtx) 0,
     allow_cc_mode);
}
rtx
get_condition_for_loop (const struct loop *loop, rtx x)
{
  rtx comparison = get_condition (x, (rtx*) 0, 0);
  if (comparison == 0
      || ! loop_invariant_p (loop, (((comparison)->u.fld[0]).rtx1))
      || loop_invariant_p (loop, (((comparison)->u.fld[1]).rtx1)))
    return comparison;
  return gen_rtx_fmt_ee (swap_condition (((enum rtx_code) (comparison)->code)), VOIDmode,
    (((comparison)->u.fld[1]).rtx1), (((comparison)->u.fld[0]).rtx1));
}
static int
indirect_jump_in_function_p (rtx start)
{
  rtx insn;
  for (insn = start; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (computed_jump_p (insn))
      return 1;
  return 0;
}
static int
insert_loop_mem (rtx *mem, void *data )
{
  struct loop_info *loop_info = data;
  int i;
  rtx m = *mem;
  if (m == (rtx) 0)
    return 0;
  switch (((enum rtx_code) (m)->code))
    {
    case MEM:
      break;
    case CLOBBER:
      return -1;
    case CONST_DOUBLE:
      return -1;
    case EXPR_LIST:
      return -1;
    default:
      return 0;
    }
  for (i = 0; i < loop_info->mems_idx; ++i)
    if (rtx_equal_p (m, loop_info->mems[i].mem))
      {
 if ((((m))->volatil) && !(((loop_info->mems[i].mem))->volatil))
   loop_info->mems[i].mem = m;
 if (((enum machine_mode) (m)->mode) != ((enum machine_mode) (loop_info->mems[i].mem)->mode))
   loop_info->mems[i].optimize = 0;
 return 0;
      }
  if (loop_info->mems_idx == loop_info->mems_allocated)
    {
      if (loop_info->mems_allocated != 0)
 loop_info->mems_allocated *= 2;
      else
 loop_info->mems_allocated = 32;
      loop_info->mems = xrealloc (loop_info->mems,
      loop_info->mems_allocated * sizeof (loop_mem_info));
    }
  loop_info->mems[loop_info->mems_idx].mem = m;
  loop_info->mems[loop_info->mems_idx].optimize = (((enum machine_mode) (m)->mode) != BLKmode);
  loop_info->mems[loop_info->mems_idx].reg = (rtx) 0;
  ++loop_info->mems_idx;
  return 0;
}
static void
loop_regs_scan (const struct loop *loop, int extra_size)
{
  struct loop_regs *regs = (&((struct loop_info *) (loop)->aux)->regs);
  int old_nregs;
  rtx *last_set;
  rtx insn;
  int i;
  old_nregs = regs->num;
  regs->num = max_reg_num ();
  if (regs->num >= regs->size)
    {
      regs->size = regs->num + extra_size;
      regs->array = xrealloc (regs->array, regs->size * sizeof (*regs->array));
      memset (regs->array + old_nregs, 0,
       (regs->size - old_nregs) * sizeof (*regs->array));
    }
  for (i = 0; i < old_nregs; i++)
    {
      regs->array[i].set_in_loop = 0;
      regs->array[i].may_not_optimize = 0;
      regs->array[i].single_usage = (rtx) 0;
    }
  last_set = xcalloc (regs->num, sizeof (rtx));
  for (insn = loop->top ? loop->top : loop->start; insn != loop->end;
       insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   find_single_use_in_loop (regs, insn, (((insn)->u.fld[5]).rtx1));
   if ((((insn)->u.fld[8]).rtx1))
     find_single_use_in_loop (regs, insn, (((insn)->u.fld[8]).rtx1));
   if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET
       || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER)
     count_one_set (regs, insn, (((insn)->u.fld[5]).rtx1), last_set);
   else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL)
     {
       int i;
       for (i = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
  count_one_set (regs, insn, ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]),
          last_set);
     }
 }
      if (((enum rtx_code) (insn)->code) == CODE_LABEL || ((enum rtx_code) (insn)->code) == JUMP_INSN)
 memset (last_set, 0, regs->num * sizeof (rtx));
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 {
   rtx link;
   for (link = (((insn)->u.fld[9]).rtx1);
        link;
        link = (((link)->u.fld[1]).rtx1))
     {
       rtx op, reg;
       if (((enum rtx_code) (op = (((link)->u.fld[0]).rtx1))->code) == USE
    && (((enum rtx_code) (reg = (((op)->u.fld[0]).rtx1))->code) == REG)
    && rtx_varies_p (reg, 1))
  regs->array[(((reg)->u.fld[0]).rtuint)].may_not_optimize = 1;
     }
 }
    }
  if (((struct loop_info *) (loop)->aux)->has_call)
    for (i = 0; i < 53; i++)
      if ((!!((regs_invalidated_by_call)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
   && rtx_varies_p ((cfun->emit->x_regno_reg_rtx)[i], 1))
 {
   regs->array[i].may_not_optimize = 1;
   regs->array[i].set_in_loop = 1;
 }
  for (i = regs->num - 1; i >= 53; i--)
    if (mode_class[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode)] == MODE_CC)
      regs->array[i].may_not_optimize = 1;
  for (i = old_nregs; i < regs->num; i++)
    regs->array[i].n_times_set = regs->array[i].set_in_loop;
  free (last_set);
}
static int
count_insns_in_loop (const struct loop *loop)
{
  int count = 0;
  rtx insn;
  for (insn = loop->top ? loop->top : loop->start; insn != loop->end;
       insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      ++count;
  return count;
}
static void
load_mems (const struct loop *loop)
{
  struct loop_info *loop_info = ((struct loop_info *) (loop)->aux);
  struct loop_regs *regs = (&((struct loop_info *) (loop)->aux)->regs);
  int maybe_never = 0;
  int i;
  rtx p, prev_ebb_head;
  rtx label = (rtx) 0;
  rtx end_label;
  int next_maybe_never = 0;
  unsigned int last_max_reg = max_reg_num ();
  if (loop_info->mems_idx == 0)
    return;
  end_label = next_nonnote_insn (loop->end);
  if (end_label && ((enum rtx_code) (end_label)->code) != CODE_LABEL)
    end_label = (rtx) 0;
  for (p = next_insn_in_loop (loop, loop->scan_start);
       p != (rtx) 0;
       p = next_insn_in_loop (loop, p))
    {
      if (((enum rtx_code) (p)->code) == CODE_LABEL)
 maybe_never = 1;
      else if (((enum rtx_code) (p)->code) == JUMP_INSN
        && ! (((enum rtx_code) (p)->code) == JUMP_INSN
       && (((p)->u.fld[9]).rtx1) == loop->top
       && ((((((p)->u.fld[2]).rtx1))->u.fld[2]).rtx1) == loop->end
       && any_uncondjump_p (p)))
 {
   if (
       !(((p)->u.fld[9]).rtx1)
       || ((((p)->u.fld[9]).rtx1) != end_label
    && (((((((p)->u.fld[9]).rtx1))->u.fld[0]).rtint) >= max_uid_for_loop
        || (((((((p)->u.fld[9]).rtx1))->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[((((((p)->u.fld[9]).rtx1))->u.fld[0]).rtint)] : (abort (), -1)) < ((((loop->start)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop->start)->u.fld[0]).rtint)] : (abort (), -1))
        || (((((((p)->u.fld[9]).rtx1))->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[((((((p)->u.fld[9]).rtx1))->u.fld[0]).rtint)] : (abort (), -1)) > ((((loop->end)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop->end)->u.fld[0]).rtint)] : (abort (), -1)))))
     return;
   if (!any_condjump_p (p))
     maybe_never = 1;
   else
     next_maybe_never = 1;
 }
      else if (next_maybe_never)
 maybe_never = 1;
    }
  for (p = loop->start;
       (((p)->u.fld[1]).rtx1) && ((enum rtx_code) (p)->code) != CODE_LABEL;
       p = (((p)->u.fld[1]).rtx1))
    ;
  prev_ebb_head = p;
  cselib_init (1);
  for (; p != loop->start; p = (((p)->u.fld[2]).rtx1))
    cselib_process_insn (p);
  for (i = 0; i < loop_info->mems_idx; ++i)
    {
      regset_head load_copies;
      regset_head store_copies;
      int written = 0;
      rtx reg;
      rtx mem = loop_info->mems[i].mem;
      rtx mem_list_entry;
      if ((((mem))->volatil)
   || loop_invariant_p (loop, (((mem)->u.fld[0]).rtx1)) != 1)
 loop_info->mems[i].optimize = 0;
      mem_list_entry = loop_info->store_mems;
      while (mem_list_entry)
 {
   if (rtx_equal_p (mem, (((mem_list_entry)->u.fld[0]).rtx1)))
     written = 1;
   else if (true_dependence ((((mem_list_entry)->u.fld[0]).rtx1), VOIDmode,
        mem, rtx_varies_p))
     {
       loop_info->mems[i].optimize = 0;
       break;
     }
   mem_list_entry = (((mem_list_entry)->u.fld[1]).rtx1);
 }
      if (flag_float_store && written
   && mode_class[((enum machine_mode) (mem)->mode)] == MODE_FLOAT)
 loop_info->mems[i].optimize = 0;
      if (loop_info->mems[i].optimize && written)
 {
   int j;
   for (j = 0; j < loop_info->mems_idx; ++j)
     {
       if (j == i)
  continue;
       else if (true_dependence (mem,
     VOIDmode,
     loop_info->mems[j].mem,
     rtx_varies_p))
  {
    loop_info->mems[i].optimize = 0;
    break;
  }
     }
 }
      if (maybe_never && may_trap_p (mem))
 loop_info->mems[i].optimize = 0;
      if (!loop_info->mems[i].optimize)
 continue;
      bitmap_initialize (&load_copies, 1);
      bitmap_initialize (&store_copies, 1);
      reg = gen_reg_rtx (((enum machine_mode) (mem)->mode));
      (((reg))->volatil) = 1;
      loop_info->mems[i].reg = reg;
      maybe_never = 0;
      for (p = next_insn_in_loop (loop, loop->scan_start);
    p != (rtx) 0;
    p = next_insn_in_loop (loop, p))
 {
   if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
     {
       rtx set;
       set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0);
       if (set
    && ! maybe_never
    && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
    && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53
    && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < last_max_reg
    && regs->array[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)].n_times_set == 1
    && rtx_equal_p ((((set)->u.fld[1]).rtx1), mem))
  bitmap_set_bit (&load_copies, ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint));
       if (set
    && ! maybe_never
    && (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == REG)
    && ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint) >= 53
    && ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint) < last_max_reg
    && regs->array[((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint)].n_times_set == 1
    && rtx_equal_p ((((set)->u.fld[0]).rtx1), mem))
  bitmap_set_bit (&store_copies, ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint));
       if (((enum rtx_code) (p)->code) == CALL_INSN
    && reg_mentioned_p (loop_info->mems[i].mem,
          (((p)->u.fld[9]).rtx1)))
  {
    cancel_changes (0);
    loop_info->mems[i].optimize = 0;
    break;
  }
       else
  replace_loop_mems (p, loop_info->mems[i].mem,
       loop_info->mems[i].reg, written);
     }
   if (((enum rtx_code) (p)->code) == CODE_LABEL
       || ((enum rtx_code) (p)->code) == JUMP_INSN)
     maybe_never = 1;
 }
      if (! loop_info->mems[i].optimize)
 ;
      else if (! apply_change_group ())
 loop_info->mems[i].optimize = 0;
      else
 {
   cselib_val *e = cselib_lookup (mem, VOIDmode, 0);
   rtx set;
   rtx best = mem;
   int j;
   struct elt_loc_list *const_equiv = 0;
   if (e)
     {
       struct elt_loc_list *equiv;
       struct elt_loc_list *best_equiv = 0;
       for (equiv = e->locs; equiv; equiv = equiv->next)
  {
    if (((rtx_class[(int) (((enum rtx_code) (equiv->loc)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (equiv->loc)->code) == CONST_VECTOR))
      const_equiv = equiv;
    else if ((((enum rtx_code) (equiv->loc)->code) == REG)
      && (((equiv->loc)->u.fld[0]).rtuint) >= 53)
      best_equiv = equiv;
  }
       if (! best_equiv)
  best_equiv = const_equiv;
       else if (const_equiv
         && (rtx_cost (const_equiv->loc, SET)
      <= rtx_cost (best_equiv->loc, SET)))
  {
    best_equiv = const_equiv;
    const_equiv = 0;
  }
       if (best_equiv)
  best = copy_rtx (best_equiv->loc);
     }
   set = gen_move_insn (reg, best);
   set = loop_insn_hoist (loop, set);
   if ((((enum rtx_code) (best)->code) == REG))
     {
       for (p = prev_ebb_head; p != loop->start; p = (((p)->u.fld[2]).rtx1))
  if ((((reg_n_info)->data.reg[(((best)->u.fld[0]).rtuint)])->last_uid) == (((p)->u.fld[0]).rtint))
    {
      (((reg_n_info)->data.reg[(((best)->u.fld[0]).rtuint)])->last_uid) = (((set)->u.fld[0]).rtint);
      break;
    }
     }
   if (const_equiv)
     set_unique_reg_note (set, REG_EQUAL, copy_rtx (const_equiv->loc));
   if (written)
     {
       if (label == (rtx) 0)
  {
    label = gen_label_rtx ();
    emit_label_after (label, loop->end);
  }
       set = gen_move_insn (copy_rtx (mem), reg);
       loop_insn_emit_after (loop, 0, label, set);
     }
   if (loop_dump_stream)
     {
       fprintf (loop_dump_stream, "Hoisted regno %d %s from ",
         (((reg)->u.fld[0]).rtuint), (written ? "r/w" : "r/o"));
       print_rtl (loop_dump_stream, mem);
       fputc_unlocked ('\n', loop_dump_stream);
     }
   do { bitmap_element *ptr_ = (&load_copies)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { try_copy_prop (loop, reg, j); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
        ;
   bitmap_clear (&load_copies);
   do { bitmap_element *ptr_ = (&store_copies)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { try_swap_copy_prop (loop, reg, j); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
        ;
   bitmap_clear (&store_copies);
 }
    }
  if (label != (rtx) 0 && end_label != (rtx) 0)
    for (p = loop->start; p != loop->end; p = (((p)->u.fld[2]).rtx1))
      if (((enum rtx_code) (p)->code) == JUMP_INSN && (((p)->u.fld[9]).rtx1) == end_label)
 redirect_jump (p, label, 0);
  cselib_finish ();
}
struct note_reg_stored_arg
{
  int set_seen;
  rtx reg;
};
static void
note_reg_stored (rtx x, rtx setter , void *arg)
{
  struct note_reg_stored_arg *t = (struct note_reg_stored_arg *) arg;
  if (t->reg == x)
    t->set_seen = 1;
}
static void
try_copy_prop (const struct loop *loop, rtx replacement, unsigned int regno)
{
  rtx reg_rtx = (cfun->emit->x_regno_reg_rtx)[regno];
  rtx init_insn = 0;
  rtx insn;
  int replaced_last = 0;
  int store_is_first = 0;
  for (insn = next_insn_in_loop (loop, loop->scan_start);
       insn != (rtx) 0;
       insn = next_insn_in_loop (loop, insn))
    {
      rtx set;
      if (((enum rtx_code) (insn)->code) == CODE_LABEL && init_insn)
 break;
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
      if (set
   && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
   && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == regno)
 {
   if (init_insn)
     abort ();
   init_insn = insn;
   if ((((reg_n_info)->data.reg[regno])->first_uid) == (((insn)->u.fld[0]).rtint))
     store_is_first = 1;
 }
      if (init_insn && insn != init_insn)
 {
   struct note_reg_stored_arg arg;
   replace_loop_regs (insn, reg_rtx, replacement);
   if ((((reg_n_info)->data.reg[regno])->last_uid) == (((insn)->u.fld[0]).rtint))
     replaced_last = 1;
   arg.reg = replacement;
   arg.set_seen = 0;
   note_stores ((((insn)->u.fld[5]).rtx1), note_reg_stored, &arg);
   if (arg.set_seen)
     {
       rtx note = find_reg_note (insn, REG_EQUAL, ((void *)0));
       if (note && reg_mentioned_p (replacement, (((note)->u.fld[0]).rtx1)))
  remove_note (insn, note);
       break;
     }
 }
    }
  if (! init_insn)
    abort ();
  if (apply_change_group ())
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream, "  Replaced reg %d", regno);
      if (store_is_first && replaced_last)
 {
   rtx first;
   rtx retval_note;
   first = init_insn;
   retval_note = find_reg_note (init_insn, REG_RETVAL, (rtx) 0);
   if (retval_note)
     first = (((retval_note)->u.fld[0]).rtx1);
   loop_delete_insns (first, init_insn);
 }
      if (loop_dump_stream)
 fprintf (loop_dump_stream, ".\n");
    }
}
static void
loop_delete_insns (rtx first, rtx last)
{
  while (1)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream, ", deleting init_insn (%d)",
   (((first)->u.fld[0]).rtint));
      delete_insn (first);
      if (first == last)
 break;
      first = (((first)->u.fld[2]).rtx1);
    }
}
static void
try_swap_copy_prop (const struct loop *loop, rtx replacement,
      unsigned int regno)
{
  rtx insn;
  rtx set = (rtx) 0;
  unsigned int new_regno;
  new_regno = (((replacement)->u.fld[0]).rtuint);
  for (insn = next_insn_in_loop (loop, loop->scan_start);
       insn != (rtx) 0;
       insn = next_insn_in_loop (loop, insn))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
   && (set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0))
   && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
   && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == new_regno
   && (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == REG)
   && ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint) == regno)
 break;
    }
  if (insn != (rtx) 0)
    {
      rtx prev_insn;
      rtx prev_set;
      prev_insn = (((insn)->u.fld[1]).rtx1);
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
   && (prev_set = (((((enum rtx_code) (prev_insn)->code) == INSN) || (((enum rtx_code) (prev_insn)->code) == JUMP_INSN) || (((enum rtx_code) (prev_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((prev_insn)->u.fld[5]).rtx1))->code) == SET ? (((prev_insn)->u.fld[5]).rtx1) : single_set_2 (prev_insn, (((prev_insn)->u.fld[5]).rtx1))) : (rtx) 0))
   && (((enum rtx_code) ((((prev_set)->u.fld[0]).rtx1))->code) == REG)
   && ((((((prev_set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == regno)
 {
   validate_change (prev_insn, &(((prev_set)->u.fld[0]).rtx1),
      replacement, 1);
   validate_change (insn, &(((set)->u.fld[0]).rtx1),
      (((set)->u.fld[1]).rtx1), 1);
   validate_change (insn, &(((set)->u.fld[1]).rtx1),
      replacement, 1);
   if (apply_change_group ())
     {
       if (loop_dump_stream)
  fprintf (loop_dump_stream,
    "  Swapped set of reg %d at %d with reg %d at %d.\n",
    regno, (((insn)->u.fld[0]).rtint),
    new_regno, (((prev_insn)->u.fld[0]).rtint));
       if ((((reg_n_info)->data.reg[regno])->first_uid) == (((prev_insn)->u.fld[0]).rtint))
  (((reg_n_info)->data.reg[regno])->first_uid) = (((insn)->u.fld[0]).rtint);
       try_copy_prop (loop, replacement, regno);
     }
 }
    }
}
static int
find_mem_in_note_1 (rtx *x, void *data)
{
  if (*x != (rtx) 0 && (((enum rtx_code) (*x)->code) == MEM))
    {
      rtx *res = (rtx *) data;
      *res = *x;
      return 1;
    }
  return 0;
}
static rtx
find_mem_in_note (rtx note)
{
  if (note && for_each_rtx (&note, find_mem_in_note_1, &note))
    return note;
  return (rtx) 0;
}
static int
replace_loop_mem (rtx *mem, void *data)
{
  loop_replace_args *args = (loop_replace_args *) data;
  rtx m = *mem;
  if (m == (rtx) 0)
    return 0;
  switch (((enum rtx_code) (m)->code))
    {
    case MEM:
      break;
    case CONST_DOUBLE:
      return -1;
    default:
      return 0;
    }
  if (!rtx_equal_p (args->match, m))
    return 0;
  validate_change (args->insn, mem, args->replacement, 1);
  return 0;
}
static void
replace_loop_mems (rtx insn, rtx mem, rtx reg, int written)
{
  loop_replace_args args;
  args.insn = insn;
  args.match = mem;
  args.replacement = reg;
  for_each_rtx (&insn, replace_loop_mem, &args);
  if (written)
    {
      rtx note, sub;
      rtx *link;
      for (link = &(((insn)->u.fld[8]).rtx1); (note = *link); link = &(((note)->u.fld[1]).rtx1))
 {
   if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_EQUAL
       && (sub = find_mem_in_note (note))
       && true_dependence (mem, VOIDmode, sub, rtx_varies_p))
     {
       validate_change ((rtx) 0, link, (((note)->u.fld[1]).rtx1), 1);
       break;
     }
 }
    }
}
static int
replace_loop_reg (rtx *px, void *data)
{
  rtx x = *px;
  loop_replace_args *args = (loop_replace_args *) data;
  if (x == (rtx) 0)
    return 0;
  if (x == args->match)
    validate_change (args->insn, px, args->replacement, 1);
  return 0;
}
static void
replace_loop_regs (rtx insn, rtx reg, rtx replacement)
{
  loop_replace_args args;
  args.insn = insn;
  args.match = reg;
  args.replacement = replacement;
  for_each_rtx (&insn, replace_loop_reg, &args);
}
static rtx
loop_insn_emit_after (const struct loop *loop ,
        basic_block where_bb , rtx where_insn,
        rtx pattern)
{
  return emit_insn_after (pattern, where_insn);
}
rtx
loop_insn_emit_before (const struct loop *loop,
         basic_block where_bb ,
         rtx where_insn, rtx pattern)
{
  if (! where_insn)
    return loop_insn_hoist (loop, pattern);
  return emit_insn_before (pattern, where_insn);
}
static rtx
loop_call_insn_emit_before (const struct loop *loop ,
       basic_block where_bb ,
       rtx where_insn, rtx pattern)
{
  return emit_call_insn_before (pattern, where_insn);
}
rtx
loop_insn_hoist (const struct loop *loop, rtx pattern)
{
  return loop_insn_emit_before (loop, 0, loop->start, pattern);
}
static rtx
loop_call_insn_hoist (const struct loop *loop, rtx pattern)
{
  return loop_call_insn_emit_before (loop, 0, loop->start, pattern);
}
rtx
loop_insn_sink (const struct loop *loop, rtx pattern)
{
  return loop_insn_emit_before (loop, 0, loop->sink, pattern);
}
static rtx
gen_load_of_final_value (rtx reg, rtx final_value)
{
  rtx seq;
  start_sequence ();
  final_value = force_operand (final_value, reg);
  if (final_value != reg)
    emit_move_insn (reg, final_value);
  seq = get_insns ();
  end_sequence ();
  return seq;
}
static rtx
loop_insn_sink_or_swim (const struct loop *loop, rtx pattern)
{
  if (loop->exit_count)
    return loop_insn_hoist (loop, pattern);
  else
    return loop_insn_sink (loop, pattern);
}
static void
loop_ivs_dump (const struct loop *loop, FILE *file, int verbose)
{
  struct iv_class *bl;
  int iv_num = 0;
  if (! loop || ! file)
    return;
  for (bl = (&((struct loop_info *) (loop)->aux)->ivs)->list; bl; bl = bl->next)
    iv_num++;
  fprintf (file, "Loop %d: %d IV classes\n", loop->num, iv_num);
  for (bl = (&((struct loop_info *) (loop)->aux)->ivs)->list; bl; bl = bl->next)
    {
      loop_iv_class_dump (bl, file, verbose);
      fputc_unlocked ('\n', file);
    }
}
static void
loop_iv_class_dump (const struct iv_class *bl, FILE *file,
      int verbose )
{
  struct induction *v;
  rtx incr;
  int i;
  if (! bl || ! file)
    return;
  fprintf (file, "IV class for reg %d, benefit %d\n",
    bl->regno, bl->total_benefit);
  fprintf (file, " Init insn %d", (((bl->init_insn)->u.fld[0]).rtint));
  if (bl->initial_value)
    {
      fprintf (file, ", init val: ");
      print_simple_rtl (file, bl->initial_value);
    }
  if (bl->initial_test)
    {
      fprintf (file, ", init test: ");
      print_simple_rtl (file, bl->initial_test);
    }
  fputc_unlocked ('\n', file);
  if (bl->final_value)
    {
      fprintf (file, " Final val: ");
      print_simple_rtl (file, bl->final_value);
      fputc_unlocked ('\n', file);
    }
  if ((incr = biv_total_increment (bl)))
    {
      fprintf (file, " Total increment: ");
      print_simple_rtl (file, incr);
      fputc_unlocked ('\n', file);
    }
  for (i = 0, v = bl->biv; v; v = v->next_iv, i++)
    {
      fprintf (file, " Inc%d: insn %d, incr: ", i, (((v->insn)->u.fld[0]).rtint));
      print_simple_rtl (file, v->add_val);
      fputc_unlocked ('\n', file);
    }
  for (i = 0, v = bl->giv; v; v = v->next_iv, i++)
    {
      fprintf (file, " Giv%d: insn %d, benefit %d, ",
        i, (((v->insn)->u.fld[0]).rtint), v->benefit);
      if (v->giv_type == DEST_ADDR)
 print_simple_rtl (file, v->mem);
      else
 print_simple_rtl (file, (((((enum rtx_code) (v->insn)->code) == INSN) || (((enum rtx_code) (v->insn)->code) == JUMP_INSN) || (((enum rtx_code) (v->insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((v->insn)->u.fld[5]).rtx1))->code) == SET ? (((v->insn)->u.fld[5]).rtx1) : single_set_2 (v->insn, (((v->insn)->u.fld[5]).rtx1))) : (rtx) 0));
      fputc_unlocked ('\n', file);
    }
}
static void
loop_biv_dump (const struct induction *v, FILE *file, int verbose)
{
  if (! v || ! file)
    return;
  fprintf (file,
    "Biv %d: insn %d",
    (((v->dest_reg)->u.fld[0]).rtuint), (((v->insn)->u.fld[0]).rtint));
  fprintf (file, " const ");
  print_simple_rtl (file, v->add_val);
  if (verbose && v->final_value)
    {
      fputc_unlocked ('\n', file);
      fprintf (file, " final ");
      print_simple_rtl (file, v->final_value);
    }
  fputc_unlocked ('\n', file);
}
static void
loop_giv_dump (const struct induction *v, FILE *file, int verbose)
{
  if (! v || ! file)
    return;
  if (v->giv_type == DEST_REG)
    fprintf (file, "Giv %d: insn %d",
      (((v->dest_reg)->u.fld[0]).rtuint), (((v->insn)->u.fld[0]).rtint));
  else
    fprintf (file, "Dest address: insn %d",
      (((v->insn)->u.fld[0]).rtint));
  fprintf (file, " src reg %d benefit %d",
    (((v->src_reg)->u.fld[0]).rtuint), v->benefit);
  fprintf (file, " lifetime %d",
    v->lifetime);
  if (v->replaceable)
    fprintf (file, " replaceable");
  if (v->no_const_addval)
    fprintf (file, " ncav");
  if (v->ext_dependent)
    {
      switch (((enum rtx_code) (v->ext_dependent)->code))
 {
 case SIGN_EXTEND:
   fprintf (file, " ext se");
   break;
 case ZERO_EXTEND:
   fprintf (file, " ext ze");
   break;
 case TRUNCATE:
   fprintf (file, " ext tr");
   break;
 default:
   abort ();
 }
    }
  fputc_unlocked ('\n', file);
  fprintf (file, " mult ");
  print_simple_rtl (file, v->mult_val);
  fputc_unlocked ('\n', file);
  fprintf (file, " add  ");
  print_simple_rtl (file, v->add_val);
  if (verbose && v->final_value)
    {
      fputc_unlocked ('\n', file);
      fprintf (file, " final ");
      print_simple_rtl (file, v->final_value);
    }
  fputc_unlocked ('\n', file);
}
void
debug_ivs (const struct loop *loop)
{
  loop_ivs_dump (loop, stderr, 1);
}
void
debug_iv_class (const struct iv_class *bl)
{
  loop_iv_class_dump (bl, stderr, 1);
}
void
debug_biv (const struct induction *v)
{
  loop_biv_dump (v, stderr, 1);
}
void
debug_giv (const struct induction *v)
{
  loop_giv_dump (v, stderr, 1);
}
static void
loop_dump_aux (const struct loop *loop, FILE *file,
        int verbose )
{
  rtx label;
  if (! loop || ! file)
    return;
  if (! ((((loop->first)->head_)->u.fld[1]).rtx1)
      || ((enum rtx_code) (((((loop->first)->head_)->u.fld[1]).rtx1))->code) != NOTE
      || (((((((loop->first)->head_)->u.fld[1]).rtx1))->u.fld[5]).rtint)
      != NOTE_INSN_LOOP_BEG)
    fprintf (file, ";;  No NOTE_INSN_LOOP_BEG at %d\n",
      (((((((loop->first)->head_)->u.fld[1]).rtx1))->u.fld[0]).rtint));
  if (! ((((loop->last)->end_)->u.fld[2]).rtx1)
      || ((enum rtx_code) (((((loop->last)->end_)->u.fld[2]).rtx1))->code) != NOTE
      || (((((((loop->last)->end_)->u.fld[2]).rtx1))->u.fld[5]).rtint)
      != NOTE_INSN_LOOP_END)
    fprintf (file, ";;  No NOTE_INSN_LOOP_END at %d\n",
      (((((((loop->last)->end_)->u.fld[2]).rtx1))->u.fld[0]).rtint));
  if (loop->start)
    {
      fprintf (file,
        ";;  start %d (%d), cont dom %d (%d), cont %d (%d), vtop %d (%d), end %d (%d)\n",
        ((loop->start) ? (((enum rtx_code) (loop->start)->code) == NOTE ? ((next_nonnote_insn (loop->start)) ? ((((next_nonnote_insn (loop->start))->u.fld[3]).bb) ? ((((next_nonnote_insn (loop->start))->u.fld[3]).bb)->index + 0) : - 1) : -1) : ((loop->start) ? ((((loop->start)->u.fld[3]).bb) ? ((((loop->start)->u.fld[3]).bb)->index + 0) : - 1) : -1)) : -1),
        ((loop->start) ? (((loop->start)->u.fld[0]).rtint) : -1),
        ((loop->cont) ? (((enum rtx_code) (loop->cont)->code) == NOTE ? ((next_nonnote_insn (loop->cont)) ? ((((next_nonnote_insn (loop->cont))->u.fld[3]).bb) ? ((((next_nonnote_insn (loop->cont))->u.fld[3]).bb)->index + 0) : - 1) : -1) : ((loop->cont) ? ((((loop->cont)->u.fld[3]).bb) ? ((((loop->cont)->u.fld[3]).bb)->index + 0) : - 1) : -1)) : -1),
        ((loop->cont) ? (((loop->cont)->u.fld[0]).rtint) : -1),
        ((loop->cont) ? (((enum rtx_code) (loop->cont)->code) == NOTE ? ((next_nonnote_insn (loop->cont)) ? ((((next_nonnote_insn (loop->cont))->u.fld[3]).bb) ? ((((next_nonnote_insn (loop->cont))->u.fld[3]).bb)->index + 0) : - 1) : -1) : ((loop->cont) ? ((((loop->cont)->u.fld[3]).bb) ? ((((loop->cont)->u.fld[3]).bb)->index + 0) : - 1) : -1)) : -1),
        ((loop->cont) ? (((loop->cont)->u.fld[0]).rtint) : -1),
        ((loop->vtop) ? (((enum rtx_code) (loop->vtop)->code) == NOTE ? ((next_nonnote_insn (loop->vtop)) ? ((((next_nonnote_insn (loop->vtop))->u.fld[3]).bb) ? ((((next_nonnote_insn (loop->vtop))->u.fld[3]).bb)->index + 0) : - 1) : -1) : ((loop->vtop) ? ((((loop->vtop)->u.fld[3]).bb) ? ((((loop->vtop)->u.fld[3]).bb)->index + 0) : - 1) : -1)) : -1),
        ((loop->vtop) ? (((loop->vtop)->u.fld[0]).rtint) : -1),
        ((loop->end) ? (((enum rtx_code) (loop->end)->code) == NOTE ? ((next_nonnote_insn (loop->end)) ? ((((next_nonnote_insn (loop->end))->u.fld[3]).bb) ? ((((next_nonnote_insn (loop->end))->u.fld[3]).bb)->index + 0) : - 1) : -1) : ((loop->end) ? ((((loop->end)->u.fld[3]).bb) ? ((((loop->end)->u.fld[3]).bb)->index + 0) : - 1) : -1)) : -1),
        ((loop->end) ? (((loop->end)->u.fld[0]).rtint) : -1));
      fprintf (file, ";;  top %d (%d), scan start %d (%d)\n",
        ((loop->top) ? (((enum rtx_code) (loop->top)->code) == NOTE ? ((next_nonnote_insn (loop->top)) ? ((((next_nonnote_insn (loop->top))->u.fld[3]).bb) ? ((((next_nonnote_insn (loop->top))->u.fld[3]).bb)->index + 0) : - 1) : -1) : ((loop->top) ? ((((loop->top)->u.fld[3]).bb) ? ((((loop->top)->u.fld[3]).bb)->index + 0) : - 1) : -1)) : -1),
        ((loop->top) ? (((loop->top)->u.fld[0]).rtint) : -1),
        ((loop->scan_start) ? (((enum rtx_code) (loop->scan_start)->code) == NOTE ? ((next_nonnote_insn (loop->scan_start)) ? ((((next_nonnote_insn (loop->scan_start))->u.fld[3]).bb) ? ((((next_nonnote_insn (loop->scan_start))->u.fld[3]).bb)->index + 0) : - 1) : -1) : ((loop->scan_start) ? ((((loop->scan_start)->u.fld[3]).bb) ? ((((loop->scan_start)->u.fld[3]).bb)->index + 0) : - 1) : -1)) : -1),
        ((loop->scan_start) ? (((loop->scan_start)->u.fld[0]).rtint) : -1));
      fprintf (file, ";;  exit_count %d", loop->exit_count);
      if (loop->exit_count)
 {
   fputs_unlocked (", labels:", file);
   for (label = loop->exit_labels; label; label = (((label)->u.fld[1]).rtx1))
     {
       fprintf (file, " %d ",
         (((((label)->u.fld[0]).rtx1)) ? ((((((label)->u.fld[0]).rtx1))->u.fld[0]).rtint) : -1));
     }
 }
      fputs_unlocked ("\n", file);
      if (((loop->cont) ? (((enum rtx_code) (loop->cont)->code) == NOTE ? ((next_nonnote_insn (loop->cont)) ? ((((next_nonnote_insn (loop->cont))->u.fld[3]).bb) ? ((((next_nonnote_insn (loop->cont))->u.fld[3]).bb)->index + 0) : - 1) : -1) : ((loop->cont) ? ((((loop->cont)->u.fld[3]).bb) ? ((((loop->cont)->u.fld[3]).bb)->index + 0) : - 1) : -1)) : -1) != loop->latch->index)
 fprintf (file, ";;  NOTE_INSN_LOOP_CONT not in loop latch\n");
    }
}
void
debug_loop (const struct loop *loop)
{
  flow_loop_dump (loop, stderr, loop_dump_aux, 1);
}
void
debug_loops (const struct loops *loops)
{
  flow_loops_dump (loops, stderr, loop_dump_aux, 1);
}
typedef struct partial_schedule *partial_schedule_ptr;
typedef struct ps_insn *ps_insn_ptr;
struct ps_insn
{
  ddg_node_ptr node;
  int cycle;
  ps_insn_ptr next_in_row,
       prev_in_row;
  int row_rest_count;
};
struct partial_schedule
{
  int ii;
  int history;
  ps_insn_ptr *rows;
  int min_cycle;
  int max_cycle;
  ddg_ptr g;
};
partial_schedule_ptr create_partial_schedule (int ii, ddg_ptr, int history);
void free_partial_schedule (partial_schedule_ptr);
void reset_partial_schedule (partial_schedule_ptr, int new_ii);
void print_partial_schedule (partial_schedule_ptr, FILE *);
ps_insn_ptr ps_add_node_check_conflicts (partial_schedule_ptr,
      ddg_node_ptr node, int cycle);
void rotate_partial_schedule (partial_schedule_ptr, int);
void set_row_column_for_ps (partial_schedule_ptr);
static int issue_rate;
static FILE *stats_file;
static int sms_order_nodes (ddg_ptr, int, int * result);
static void set_node_sched_params (ddg_ptr);
static partial_schedule_ptr sms_schedule_by_order (ddg_ptr, int, int,
         int *, FILE*);
static void permute_partial_schedule (partial_schedule_ptr ps, rtx last);
static void generate_prolog_epilog (partial_schedule_ptr, rtx, rtx, int);
static void duplicate_insns_of_cycles (partial_schedule_ptr ps,
           int from_stage, int to_stage,
           int is_prolog);
typedef struct node_sched_params
{
  int asap;
  int time;
  rtx first_reg_move;
  int nreg_moves;
  int row;
  int stage;
  int column;
} *node_sched_params_ptr;
static const char *
sms_print_insn (rtx insn, int aligned )
{
  static char tmp[80];
  sprintf (tmp, "i%4d", (((insn)->u.fld[0]).rtint));
  return tmp;
}
static int
contributes_to_priority_modulo (rtx next, rtx insn)
{
  return ((((next)->u.fld[3]).bb)->index + 0) == ((((insn)->u.fld[3]).bb)->index + 0);
}
static void
compute_jump_reg_dependencies_modulo (rtx insn ,
          regset cond_exec ,
          regset used ,
          regset set )
{
}
static struct sched_info sms_sched_info =
{
  ((void *)0),
  ((void *)0),
  ((void *)0),
  ((void *)0),
  ((void *)0),
  sms_print_insn,
  contributes_to_priority_modulo,
  compute_jump_reg_dependencies_modulo,
  ((void *)0), ((void *)0),
  ((void *)0), ((void *)0),
  0, 0, 0
};
static rtx
doloop_register_get (rtx insn, rtx *comp)
{
  rtx pattern, cmp, inc, reg, condition;
  if (((enum rtx_code) (insn)->code) != JUMP_INSN)
    return (rtx) 0;
  pattern = (((insn)->u.fld[5]).rtx1);
  if (((enum rtx_code) (pattern)->code) != PARALLEL)
    return (rtx) 0;
  cmp = (((((pattern)->u.fld[0]).rtvec1))->elem[0]);
  inc = (((((pattern)->u.fld[0]).rtvec1))->elem[1]);
  *comp = cmp;
  if (((enum rtx_code) (inc)->code) != SET || ! (((enum rtx_code) ((((inc)->u.fld[0]).rtx1))->code) == REG))
    return (rtx) 0;
  reg = (((inc)->u.fld[0]).rtx1);
  if (((enum rtx_code) ((((inc)->u.fld[1]).rtx1))->code) != PLUS
      || ((((((inc)->u.fld[1]).rtx1))->u.fld[0]).rtx1) != reg
      || ((((((inc)->u.fld[1]).rtx1))->u.fld[1]).rtx1) != (const_int_rtx[64 -1]))
    return (rtx) 0;
  if (((enum rtx_code) (cmp)->code) != SET
      || (((cmp)->u.fld[0]).rtx1) != (global_rtl[GR_PC])
      || ((enum rtx_code) ((((cmp)->u.fld[1]).rtx1))->code) != IF_THEN_ELSE
      || ((enum rtx_code) (((((((cmp)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) != LABEL_REF
      || ((((((cmp)->u.fld[1]).rtx1))->u.fld[2]).rtx1) != (global_rtl[GR_PC]))
    return (rtx) 0;
  condition = ((((((cmp)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
  if (((enum rtx_code) (condition)->code) != NE
      || (((condition)->u.fld[1]).rtx1) != (const_int_rtx[64 +1]))
    return (rtx) 0;
  if ((((condition)->u.fld[0]).rtx1) == reg)
    return reg;
  return (rtx) 0;
}
static rtx
const_iteration_count (rtx count_reg, basic_block pre_header,
         long long * count)
{
  rtx insn;
  rtx head, tail;
  get_block_head_tail (pre_header1->index, &head, &tail);
  for (insn = tail; insn != (((head)->u.fld[1]).rtx1); insn = (((insn)->u.fld[1]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0) &&
 rtx_equal_p (count_reg, ((((((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0))->u.fld[0]).rtx1)))
      {
 rtx pat = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
 if (((enum rtx_code) ((((pat)->u.fld[1]).rtx1))->code) == CONST_INT)
   {
     *count = (((((pat)->u.fld[1]).rtx1))->u.hwint[0]);
     return insn;
   }
 return (rtx) 0;
      }
  return (rtx) 0;
}
static int
res_MII (ddg_ptr g)
{
  return (g->num_nodes / issue_rate);
}
static node_sched_params_ptr node_sched_params;
static void
set_node_sched_params (ddg_ptr g)
{
  int i;
  node_sched_params = (node_sched_params_ptr)
         xcalloc (g->num_nodes,
    sizeof (struct node_sched_params));
  for (i = 0; i < g->num_nodes; i++)
    {
      node_sched_params[i].asap = g->nodes[i].aux.count;
      g->nodes[i].aux.info = &node_sched_params[i];
    }
}
static void
print_node_sched_params (FILE * dump_file, int num_nodes)
{
  int i;
  for (i = 0; i < num_nodes; i++)
    {
      node_sched_params_ptr nsp = &node_sched_params[i];
      rtx reg_move = nsp->first_reg_move;
      int j;
      fprintf (dump_file, "Node %d:\n", i);
      fprintf (dump_file, " asap = %d:\n", nsp->asap);
      fprintf (dump_file, " time = %d:\n", nsp->time);
      fprintf (dump_file, " nreg_moves = %d:\n", nsp->nreg_moves);
      for (j = 0; j < nsp->nreg_moves; j++)
 {
   fprintf (dump_file, " reg_move = ");
   print_rtl_single (dump_file, reg_move);
   reg_move = (((reg_move)->u.fld[1]).rtx1);
 }
    }
}
static int
calculate_maxii (ddg_ptr g)
{
  int i;
  int maxii = 0;
  for (i = 0; i < g->num_nodes; i++)
    {
      ddg_node_ptr u = &g->nodes[i];
      ddg_edge_ptr e;
      int max_edge_latency = 0;
      for (e = u->out; e; e = e->next_out)
 max_edge_latency = ((max_edge_latency) > (e->latency) ? (max_edge_latency) : (e->latency));
      maxii += max_edge_latency;
    }
  return maxii;
}
static void
generate_reg_moves (partial_schedule_ptr ps)
{
  ddg_ptr g = ps->g;
  int ii = ps->ii;
  int i;
  for (i = 0; i < g->num_nodes; i++)
    {
      ddg_node_ptr u = &g->nodes[i];
      ddg_edge_ptr e;
      int nreg_moves = 0, i_reg_move;
      sbitmap *uses_of_defs;
      rtx last_reg_move;
      rtx prev_reg, old_reg;
      for (e = u->out; e; e = e->next_out)
 if (e->type == TRUE_DEP && e->dest != e->src)
   {
     int nreg_moves4e = ((((node_sched_params_ptr)(e->dest)->aux.info)->time) - (((node_sched_params_ptr)(e->src)->aux.info)->time)) / ii;
     if ((((node_sched_params_ptr)(e->dest)->aux.info)->row) == (((node_sched_params_ptr)(e->src)->aux.info)->row)
  && (((node_sched_params_ptr)(e->dest)->aux.info)->column) < (((node_sched_params_ptr)(e->src)->aux.info)->column))
       nreg_moves4e--;
     nreg_moves = ((nreg_moves) > (nreg_moves4e) ? (nreg_moves) : (nreg_moves4e));
   }
      if (nreg_moves == 0)
 continue;
      uses_of_defs = sbitmap_vector_alloc (nreg_moves, g->num_nodes);
      sbitmap_vector_zero (uses_of_defs, nreg_moves);
      for (e = u->out; e; e = e->next_out)
 if (e->type == TRUE_DEP && e->dest != e->src)
   {
     int dest_copy = ((((node_sched_params_ptr)(e->dest)->aux.info)->time) - (((node_sched_params_ptr)(e->src)->aux.info)->time)) / ii;
     if ((((node_sched_params_ptr)(e->dest)->aux.info)->row) == (((node_sched_params_ptr)(e->src)->aux.info)->row)
  && (((node_sched_params_ptr)(e->dest)->aux.info)->column) < (((node_sched_params_ptr)(e->src)->aux.info)->column))
       dest_copy--;
     if (dest_copy)
       ((uses_of_defs[dest_copy - 1])->elms [(e->dest->cuid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (e->dest->cuid) % ((unsigned) (8 * 4)));
   }
      (((node_sched_params_ptr)(u)->aux.info)->nreg_moves) = nreg_moves;
      old_reg = prev_reg = copy_rtx (((((((((enum rtx_code) (u->insn)->code) == INSN) || (((enum rtx_code) (u->insn)->code) == JUMP_INSN) || (((enum rtx_code) (u->insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((u->insn)->u.fld[5]).rtx1))->code) == SET ? (((u->insn)->u.fld[5]).rtx1) : single_set_2 (u->insn, (((u->insn)->u.fld[5]).rtx1))) : (rtx) 0))->u.fld[0]).rtx1));
      last_reg_move = u->insn;
      for (i_reg_move = 0; i_reg_move < nreg_moves; i_reg_move++)
 {
   int i_use;
   rtx new_reg = gen_reg_rtx (((enum machine_mode) (prev_reg)->mode));
   rtx reg_move = gen_move_insn (new_reg, prev_reg);
   add_insn_before (reg_move, last_reg_move);
   last_reg_move = reg_move;
   if (!(((node_sched_params_ptr)(u)->aux.info)->first_reg_move))
     (((node_sched_params_ptr)(u)->aux.info)->first_reg_move) = reg_move;
   do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (uses_of_defs[i_reg_move])->size; unsigned long *ptr_ = (uses_of_defs[i_reg_move])->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (i_use) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; replace_rtx (g->nodes[i_use].insn, old_reg, new_reg); if (word_ == 0) break; } } } } while (0)
                                                          ;
   prev_reg = new_reg;
 }
    }
}
static void
normalize_sched_times (partial_schedule_ptr ps)
{
  int i;
  ddg_ptr g = ps->g;
  int amount = (((partial_schedule_ptr)(ps))->min_cycle);
  int ii = ps->ii;
  for (i = 0; i < g->num_nodes; i++)
    {
      ddg_node_ptr u = &g->nodes[i];
      int normalized_time = (((node_sched_params_ptr)(u)->aux.info)->time) - amount;
      if (normalized_time < 0)
 abort ();
      (((node_sched_params_ptr)(u)->aux.info)->time) = normalized_time;
      (((node_sched_params_ptr)(u)->aux.info)->row) = normalized_time % ii;
      (((node_sched_params_ptr)(u)->aux.info)->stage) = normalized_time / ii;
    }
}
static void
set_columns_for_ps (partial_schedule_ptr ps)
{
  int row;
  for (row = 0; row < ps->ii; row++)
    {
      ps_insn_ptr cur_insn = ps->rows[row];
      int column = 0;
      for (; cur_insn; cur_insn = cur_insn->next_in_row)
 (((node_sched_params_ptr)(cur_insn->node)->aux.info)->column) = column++;
    }
}
static void
permute_partial_schedule (partial_schedule_ptr ps, rtx last)
{
  int ii = ps->ii;
  int row;
  ps_insn_ptr ps_ij;
  for (row = 0; row < ii ; row++)
    for (ps_ij = ps->rows[row]; ps_ij; ps_ij = ps_ij->next_in_row)
      if ((((last)->u.fld[1]).rtx1) != ps_ij->node->insn)
       reorder_insns_nobb (ps_ij->node->first_note, ps_ij->node->insn,
       (((last)->u.fld[1]).rtx1));
}
static void
duplicate_insns_of_cycles (partial_schedule_ptr ps, int from_stage,
      int to_stage, int for_prolog)
{
  int row;
  ps_insn_ptr ps_ij;
  for (row = 0; row < ps->ii; row++)
    for (ps_ij = ps->rows[row]; ps_ij; ps_ij = ps_ij->next_in_row)
      {
 ddg_node_ptr u_node = ps_ij->node;
 int j, i_reg_moves;
 rtx reg_move = (rtx) 0;
 if (for_prolog)
   {
     i_reg_moves = to_stage - (((node_sched_params_ptr)(u_node)->aux.info)->stage);
     i_reg_moves = ((i_reg_moves) > (0) ? (i_reg_moves) : (0));
     i_reg_moves = ((i_reg_moves) < ((((node_sched_params_ptr)(u_node)->aux.info)->nreg_moves)) ? (i_reg_moves) : ((((node_sched_params_ptr)(u_node)->aux.info)->nreg_moves)));
     if (i_reg_moves)
       {
  reg_move = (((node_sched_params_ptr)(u_node)->aux.info)->first_reg_move);
  for (j = 1; j < i_reg_moves; j++)
    reg_move = (((reg_move)->u.fld[1]).rtx1);
       }
   }
 else
   {
     i_reg_moves = (((node_sched_params_ptr)(u_node)->aux.info)->nreg_moves)
             - (from_stage - (((node_sched_params_ptr)(u_node)->aux.info)->stage) - 1);
     i_reg_moves = ((i_reg_moves) > (0) ? (i_reg_moves) : (0));
     i_reg_moves = ((i_reg_moves) < ((((node_sched_params_ptr)(u_node)->aux.info)->nreg_moves)) ? (i_reg_moves) : ((((node_sched_params_ptr)(u_node)->aux.info)->nreg_moves)));
     if (i_reg_moves)
       {
  reg_move = (((node_sched_params_ptr)(u_node)->aux.info)->first_reg_move);
  for (j = 1; j < (((node_sched_params_ptr)(u_node)->aux.info)->nreg_moves); j++)
    reg_move = (((reg_move)->u.fld[1]).rtx1);
       }
   }
 for (j = 0; j < i_reg_moves; j++, reg_move = (((reg_move)->u.fld[2]).rtx1))
   emit_insn (copy_rtx ((((reg_move)->u.fld[5]).rtx1)));
 if ((((node_sched_params_ptr)(u_node)->aux.info)->stage) >= from_stage
     && (((node_sched_params_ptr)(u_node)->aux.info)->stage) <= to_stage)
   duplicate_insn_chain (u_node->first_note, u_node->insn);
      }
}
static void
generate_prolog_epilog (partial_schedule_ptr ps, rtx orig_loop_beg,
   rtx orig_loop_end, int unknown_count)
{
  int i;
  int last_stage = (((((partial_schedule_ptr)(ps))->max_cycle) - (((partial_schedule_ptr)(ps))->min_cycle) + 1 + (ps)->ii - 1) / (ps)->ii) - 1;
  edge e;
  rtx c_reg = (rtx) 0;
  rtx cmp = (rtx) 0;
  rtx precond_jump = (rtx) 0;
  rtx precond_exit_label = (rtx) 0;
  rtx precond_exit_label_insn = (rtx) 0;
  rtx last_epilog_insn = (rtx) 0;
  rtx loop_exit_label = (rtx) 0;
  rtx loop_exit_label_insn = (rtx) 0;
  rtx orig_loop_bct = (rtx) 0;
  e = ps->g->bb->pred;
  if (e->src == ps->g->bb)
    e = e->pred_next;
  start_sequence ();
  if (unknown_count)
    precond_jump = emit_note (NOTE_INSN_DELETED);
  for (i = 0; i < last_stage; i++)
    duplicate_insns_of_cycles (ps, 0, i, 1);
  e->insns.r = get_insns ();
  end_sequence ();
  start_sequence ();
  for (i = 0; i < last_stage; i++)
    duplicate_insns_of_cycles (ps, i + 1, last_stage, 0);
  last_epilog_insn = emit_note (NOTE_INSN_DELETED);
  if (unknown_count)
    {
      rtx label, cond;
      precond_exit_label = gen_label_rtx ();
      precond_exit_label_insn = emit_label (precond_exit_label);
      reorder_insns_nobb (orig_loop_beg, orig_loop_end, precond_exit_label_insn);
      orig_loop_bct = get_last_insn ();
      c_reg = doloop_register_get (orig_loop_bct, &cmp);
      label = ((((((cmp)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      cond = ((((((cmp)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      if (! c_reg || ((enum rtx_code) (cond)->code) != NE)
        abort ();
      (((label)->u.fld[0]).rtx1) = precond_exit_label;
      (((orig_loop_bct)->u.fld[9]).rtx1) = precond_exit_label_insn;
      (((precond_exit_label_insn)->u.fld[4]).rtint)++;
      loop_exit_label = gen_label_rtx ();
      loop_exit_label_insn = emit_label (loop_exit_label);
    }
  e = ps->g->bb->succ;
  if (e->dest == ps->g->bb)
    e = e->succ_next;
  e->insns.r = get_insns ();
  end_sequence ();
  commit_edge_insertions ();
  if (unknown_count)
    {
      rtx precond_insns, epilog_jump, insert_after_insn;
      basic_block loop_exit_bb = (((loop_exit_label_insn)->u.fld[3]).bb);
      basic_block epilog_bb = (((last_epilog_insn)->u.fld[3]).bb);
      basic_block precond_bb = (((precond_jump)->u.fld[3]).bb);
      basic_block orig_loop_bb = (((precond_exit_label_insn)->u.fld[3]).bb);
      edge epilog_exit_edge = epilog_bb->succ;
      insert_after_insn = precond_jump;
      start_sequence ();
      c_reg = doloop_register_get (ps->g->closing_branch->insn, &cmp);
      emit_cmp_and_jump_insns (c_reg, gen_rtx_CONST_INT (VOIDmode, (long) ((((((partial_schedule_ptr)(ps))->max_cycle) - (((partial_schedule_ptr)(ps))->min_cycle) + 1 + (ps)->ii - 1) / (ps)->ii))), LT, ((void *)0),
                ((enum machine_mode) (c_reg)->mode), 1, precond_exit_label);
      precond_insns = get_insns ();
      precond_jump = get_last_insn ();
      end_sequence ();
      reorder_insns (precond_insns, precond_jump, insert_after_insn);
      emit_insn_after (gen_sub2_insn (c_reg, gen_rtx_CONST_INT (VOIDmode, (long) ((((((partial_schedule_ptr)(ps))->max_cycle) - (((partial_schedule_ptr)(ps))->min_cycle) + 1 + (ps)->ii - 1) / (ps)->ii) - 1))),
                       precond_jump);
      update_bb_for_insn (precond_bb);
      delete_insn (insert_after_insn);
      (((precond_jump)->u.fld[9]).rtx1) = precond_exit_label_insn;
      (((precond_exit_label_insn)->u.fld[4]).rtint)++;
      split_block (precond_bb, precond_jump);
      make_edge (precond_bb, orig_loop_bb, 0);
      epilog_jump = emit_jump_insn_after (gen_jump (loop_exit_label),
             last_epilog_insn);
      delete_insn (last_epilog_insn);
      (((epilog_jump)->u.fld[9]).rtx1) = loop_exit_label_insn;
      (((loop_exit_label_insn)->u.fld[4]).rtint)++;
      redirect_edge_succ (epilog_exit_edge, loop_exit_bb);
      epilog_exit_edge->flags &= ~1;
      emit_barrier_after ((epilog_bb)->end_);
    }
}
static rtx
find_line_note_modulo (rtx insn)
{
  for (; insn; insn = (((insn)->u.fld[1]).rtx1))
    if (((enum rtx_code) (insn)->code) == NOTE
 && (((insn)->u.fld[5]).rtint) >= 0)
      break;
  return insn;
}
void
sms_schedule (FILE *dump_file)
{
  static int passes = 0;
  rtx insn;
  ddg_ptr *g_arr, g;
  basic_block bb, pre_header = ((void *)0);
  int * node_order;
  int maxii;
  int i;
  partial_schedule_ptr ps;
  int max_bb_index = last_basic_block;
  struct df *df;
  if (! targetm.sched.use_dfa_pipeline_interface
      || ! (*targetm.sched.use_dfa_pipeline_interface) ())
    return;
  stats_file = dump_file;
  if (targetm.sched.issue_rate)
    {
      int temp = reload_completed;
      reload_completed = 1;
      issue_rate = (*targetm.sched.issue_rate) ();
      reload_completed = temp;
    }
  else
    issue_rate = 1;
  current_sched_info = &sms_sched_info;
  sched_init (((void *)0));
  df = df_init ();
  df_analyze (df, 0, 255);
  g_arr = xcalloc (max_bb_index, sizeof (ddg_ptr));
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      rtx head, tail;
      rtx count_reg, comp;
      edge e, pre_header_edge;
      if (bb->index < 0)
 continue;
      e = bb->succ;
      if (!e || !e->succ_next || e->succ_next->succ_next)
 continue;
      if (e->dest != bb && e->succ_next->dest != bb)
 continue;
      if ((e->flags & (2 | 4 | 8))
   || (e->succ_next->flags & (2 | 4 | 8)))
 continue;
      e = bb->pred;
      if (!e || !e->pred_next || e->pred_next->pred_next)
 continue;
      if (e->src != bb && e->pred_next->src != bb)
 continue;
      if ((e->flags & (2 | 4 | 8))
   || (e->pred_next->flags & (2 | 4 | 8)))
 continue;
      if (passes++ > (compiler_params[(int) PARAM_MAX_SMS_LOOP_NUMBER].value1) && (compiler_params[(int) PARAM_MAX_SMS_LOOP_NUMBER].value1) != -1)
 {
   if (dump_file)
     fprintf (dump_file, "SMS reached MAX_PASSES... \n");
   break;
 }
      get_block_head_tail (bb->index, &head, &tail);
      pre_header_edge = bb->pred;
      if (bb->pred->src != bb)
 pre_header_edge = bb->pred->pred_next;
      if (bb->count < pre_header_edge->count * (compiler_params[(int) PARAM_SMS_LOOP_AVERAGE_COUNT_THRESHOLD].value1))
        {
   if (stats_file)
     {
       rtx line_note = find_line_note_modulo (tail);
       if (line_note)
  {
    expanded_location xloc;
    ((xloc).file = (((line_note)->u.fld[4]).rtstr), (xloc).line = (((line_note)->u.fld[5]).rtint));
    fprintf (stats_file, "SMS bb %s %d (file, line)\n",
      xloc.file, xloc.line);
  }
       fprintf (stats_file, "SMS single-bb-loop\n");
       if (profile_info && flag_branch_probabilities)
      {
          fprintf (stats_file, "SMS loop-count ");
          fprintf (stats_file, "%lld",
                  (long long) bb->count);
          fprintf (stats_file, "\n");
          fprintf (stats_file, "SMS preheader-count ");
          fprintf (stats_file, "%lld",
                (long long) pre_header_edge->count);
          fprintf (stats_file, "\n");
          fprintf (stats_file, "SMS profile-sum-max ");
          fprintf (stats_file, "%lld",
               (long long) profile_info->sum_max);
          fprintf (stats_file, "\n");
      }
     }
          continue;
        }
      if ( !(count_reg = doloop_register_get (tail, &comp)))
 continue;
      e = bb->pred;
      if (e->src == bb)
 pre_header = e->pred_next->src;
      else
 pre_header = e->src;
      for (insn = head; insn != (((tail)->u.fld[2]).rtx1); insn = (((insn)->u.fld[2]).rtx1))
 if (((enum rtx_code) (insn)->code) == CALL_INSN
     || ((enum rtx_code) (insn)->code) == BARRIER
     || (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && ((enum rtx_code) (insn)->code) != JUMP_INSN
  && !(((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0) && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE))
   break;
      if (insn != (((tail)->u.fld[2]).rtx1))
 {
   if (stats_file)
     {
       if (((enum rtx_code) (insn)->code) == CALL_INSN)
  fprintf (stats_file, "SMS loop-with-call\n");
       else if (((enum rtx_code) (insn)->code) == BARRIER)
  fprintf (stats_file, "SMS loop-with-barrier\n");
       else
  fprintf (stats_file, "SMS loop-with-not-single-set\n");
       print_rtl_single (stats_file, insn);
     }
   continue;
 }
      if (! (g = create_ddg (bb, df, 0)))
        {
          if (stats_file)
     fprintf (stats_file, "SMS doloop\n");
   continue;
        }
      g_arr[bb->index] = g;
    }
  df_finish (df);
  for (i = 0; i < max_bb_index; i++)
    {
      rtx head, tail;
      rtx count_reg, count_init, comp;
      edge pre_header_edge;
      int mii, rec_mii;
      int stage_count = 0;
      long long loop_count = 0;
      if (! (g = g_arr[i]))
        continue;
      if (dump_file)
 print_ddg (dump_file, g);
      get_block_head_tail (g->bb->index, &head, &tail);
      pre_header_edge = g->bb->pred;
      if (g->bb->pred->src != g->bb)
 pre_header_edge = g->bb->pred->pred_next;
      if (stats_file)
 {
   rtx line_note = find_line_note_modulo (tail);
   if (line_note)
     {
       expanded_location xloc;
       ((xloc).file = (((line_note)->u.fld[4]).rtstr), (xloc).line = (((line_note)->u.fld[5]).rtint));
       fprintf (stats_file, "SMS bb %s %d (file, line)\n",
         xloc.file, xloc.line);
     }
   fprintf (stats_file, "SMS single-bb-loop\n");
   if (profile_info && flag_branch_probabilities)
     {
       fprintf (stats_file, "SMS loop-count ");
       fprintf (stats_file, "%lld",
                (long long) bb->count);
       fprintf (stats_file, "\n");
       fprintf (stats_file, "SMS preheader-count ");
       fprintf (stats_file, "%lld",
                (long long) pre_header_edge->count);
       fprintf (stats_file, "\n");
       fprintf (stats_file, "SMS profile-sum-max ");
       fprintf (stats_file, "%lld",
                (long long) profile_info->sum_max);
       fprintf (stats_file, "\n");
     }
   fprintf (stats_file, "SMS doloop\n");
   fprintf (stats_file, "SMS built-ddg %d\n", g->num_nodes);
          fprintf (stats_file, "SMS num-loads %d\n", g->num_loads);
          fprintf (stats_file, "SMS num-stores %d\n", g->num_stores);
 }
      if ( !(count_reg = doloop_register_get (tail, &comp)))
 abort ();
      count_init = const_iteration_count (count_reg, pre_header, &loop_count);
      if (stats_file && count_init)
        {
          fprintf (stats_file, "SMS const-doloop ");
          fprintf (stats_file, "%lld", loop_count);
          fprintf (stats_file, "\n");
        }
      node_order = (int *) xmalloc (sizeof (int) * g->num_nodes);
      mii = 1;
      rec_mii = sms_order_nodes (g, mii, node_order);
      mii = ((res_MII (g)) > (rec_mii) ? (res_MII (g)) : (rec_mii));
      maxii = (calculate_maxii (g) * (compiler_params[(int) PARAM_SMS_MAX_II_FACTOR].value1)) / 100;
      if (stats_file)
 fprintf (stats_file, "SMS iis %d %d %d (rec_mii, mii, maxii)\n",
   rec_mii, mii, maxii);
      set_node_sched_params (g);
      ps = sms_schedule_by_order (g, mii, maxii, node_order, dump_file);
      if (ps)
 stage_count = (((((partial_schedule_ptr)(ps))->max_cycle) - (((partial_schedule_ptr)(ps))->min_cycle) + 1 + (ps)->ii - 1) / (ps)->ii);
      if (stage_count == 0 || (count_init && (stage_count > loop_count)))
 {
   if (dump_file)
     fprintf (dump_file, "SMS failed... \n");
   if (stats_file)
     fprintf (stats_file, "SMS sched-failed %d\n", stage_count);
 }
      else
 {
          rtx orig_loop_beg = (rtx) 0;
   rtx orig_loop_end = (rtx) 0;
   if (stats_file)
     {
       fprintf (stats_file,
         "SMS succeeded %d %d (with ii, sc)\n", ps->ii,
         stage_count);
       print_partial_schedule (ps, dump_file);
       fprintf (dump_file,
         "SMS Branch (%d) will later be scheduled at cycle %d.\n",
         g->closing_branch->cuid, (((partial_schedule_ptr)(ps))->min_cycle) - 1);
     }
          if (! count_init)
            {
       int i;
              start_sequence ();
       for (i = 0; i < ps->g->num_nodes; i++)
  duplicate_insn_chain (ps->g->nodes[i].first_note,
          ps->g->nodes[i].insn);
       orig_loop_beg = get_insns ();
              orig_loop_end = get_last_insn ();
       end_sequence ();
            }
   normalize_sched_times (ps);
   rotate_partial_schedule (ps, (((partial_schedule_ptr)(ps))->min_cycle));
   set_columns_for_ps (ps);
   permute_partial_schedule (ps, g->closing_branch->first_note);
   generate_reg_moves (ps);
   if (dump_file)
     print_node_sched_params (dump_file, g->num_nodes);
          if (count_init)
     ((((((((enum rtx_code) (count_init)->code) == INSN) || (((enum rtx_code) (count_init)->code) == JUMP_INSN) || (((enum rtx_code) (count_init)->code) == CALL_INSN)) ? (((enum rtx_code) ((((count_init)->u.fld[5]).rtx1))->code) == SET ? (((count_init)->u.fld[5]).rtx1) : single_set_2 (count_init, (((count_init)->u.fld[5]).rtx1))) : (rtx) 0))->u.fld[1]).rtx1) = gen_rtx_CONST_INT (VOIDmode, (long) (loop_count - stage_count + 1))
                                                                           ;
   generate_prolog_epilog (ps, orig_loop_beg, orig_loop_end,
      count_init ? 0 : 1);
 }
      free_partial_schedule (ps);
      free (node_sched_params);
      free (node_order);
      free_ddg (g);
    }
  sched_finish ();
}
static partial_schedule_ptr
sms_schedule_by_order (ddg_ptr g, int mii, int maxii, int *nodes_order, FILE *dump_file)
{
  int ii = mii;
  int i, c, success;
  int try_again_with_larger_ii = 1;
  int num_nodes = g->num_nodes;
  ddg_edge_ptr e;
  int start, end, step;
  sbitmap sched_nodes = sbitmap_alloc (num_nodes);
  sbitmap psp = sbitmap_alloc (num_nodes);
  sbitmap pss = sbitmap_alloc (num_nodes);
  partial_schedule_ptr ps = create_partial_schedule (ii, g, (compiler_params[(int) PARAM_SMS_DFA_HISTORY].value1));
  while (try_again_with_larger_ii && ii < maxii)
    {
      if (dump_file)
 fprintf(dump_file, "Starting with ii=%d\n", ii);
      try_again_with_larger_ii = 0;
      sbitmap_zero (sched_nodes);
      for (i = 0; i < num_nodes; i++)
 {
   int u = nodes_order[i];
   ddg_node_ptr u_node = &g->nodes[u];
   sbitmap u_node_preds = ((u_node)->predecessors);
   sbitmap u_node_succs = ((u_node)->successors);
   int psp_not_empty;
   int pss_not_empty;
   rtx insn = u_node->insn;
   if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     continue;
   if (((enum rtx_code) (insn)->code) == JUMP_INSN)
     continue;
   sbitmap_zero (psp);
   sbitmap_zero (pss);
   psp_not_empty = sbitmap_a_and_b_cg (psp, u_node_preds, sched_nodes);
   pss_not_empty = sbitmap_a_and_b_cg (pss, u_node_succs, sched_nodes);
   if (psp_not_empty && !pss_not_empty)
     {
       int early_start = 0;
       end = 2147483647;
       for (e = u_node->in; e != 0; e = e->next_in)
  {
    ddg_node_ptr v_node = e->src;
    if (((sched_nodes)->elms [(v_node->cuid) / ((unsigned) (8 * 4))] >> (v_node->cuid) % ((unsigned) (8 * 4)) & 1))
      {
        early_start = ((early_start) > ((((node_sched_params_ptr)(v_node)->aux.info)->time) + e->latency - (e->distance * ii)) ? (early_start) : ((((node_sched_params_ptr)(v_node)->aux.info)->time) + e->latency - (e->distance * ii)))
                                        ;
        if (e->data_type == MEM_DEP)
   end = ((end) < ((((node_sched_params_ptr)(v_node)->aux.info)->time) + ii - 1) ? (end) : ((((node_sched_params_ptr)(v_node)->aux.info)->time) + ii - 1));
      }
  }
       start = early_start;
       end = ((end) < (early_start + ii) ? (end) : (early_start + ii));
       step = 1;
     }
   else if (!psp_not_empty && pss_not_empty)
     {
       int late_start = 2147483647;
       end = (-2147483647 - 1);
       for (e = u_node->out; e != 0; e = e->next_out)
  {
    ddg_node_ptr v_node = e->dest;
    if (((sched_nodes)->elms [(v_node->cuid) / ((unsigned) (8 * 4))] >> (v_node->cuid) % ((unsigned) (8 * 4)) & 1))
      {
        late_start = ((late_start) < ((((node_sched_params_ptr)(v_node)->aux.info)->time) - e->latency + (e->distance * ii)) ? (late_start) : ((((node_sched_params_ptr)(v_node)->aux.info)->time) - e->latency + (e->distance * ii)))
                          ;
        if (e->data_type == MEM_DEP)
   end = ((end) > ((((node_sched_params_ptr)(v_node)->aux.info)->time) - ii + 1) ? (end) : ((((node_sched_params_ptr)(v_node)->aux.info)->time) - ii + 1));
      }
  }
       start = late_start;
       end = ((end) > (late_start - ii) ? (end) : (late_start - ii));
       step = -1;
     }
   else if (psp_not_empty && pss_not_empty)
     {
       int early_start = 0;
       int late_start = 2147483647;
       start = (-2147483647 - 1);
       end = 2147483647;
       for (e = u_node->in; e != 0; e = e->next_in)
  {
    ddg_node_ptr v_node = e->src;
    if (((sched_nodes)->elms [(v_node->cuid) / ((unsigned) (8 * 4))] >> (v_node->cuid) % ((unsigned) (8 * 4)) & 1))
      {
        early_start = ((early_start) > ((((node_sched_params_ptr)(v_node)->aux.info)->time) + e->latency - (e->distance * ii)) ? (early_start) : ((((node_sched_params_ptr)(v_node)->aux.info)->time) + e->latency - (e->distance * ii)))
                           ;
        if (e->data_type == MEM_DEP)
   end = ((end) < ((((node_sched_params_ptr)(v_node)->aux.info)->time) + ii - 1) ? (end) : ((((node_sched_params_ptr)(v_node)->aux.info)->time) + ii - 1));
      }
  }
       for (e = u_node->out; e != 0; e = e->next_out)
  {
    ddg_node_ptr v_node = e->dest;
    if (((sched_nodes)->elms [(v_node->cuid) / ((unsigned) (8 * 4))] >> (v_node->cuid) % ((unsigned) (8 * 4)) & 1))
      {
        late_start = ((late_start) < ((((node_sched_params_ptr)(v_node)->aux.info)->time) - e->latency + (e->distance * ii)) ? (late_start) : ((((node_sched_params_ptr)(v_node)->aux.info)->time) - e->latency + (e->distance * ii)))
                          ;
        if (e->data_type == MEM_DEP)
   start = ((start) > ((((node_sched_params_ptr)(v_node)->aux.info)->time) - ii + 1) ? (start) : ((((node_sched_params_ptr)(v_node)->aux.info)->time) - ii + 1));
      }
  }
       start = ((start) > (early_start) ? (start) : (early_start));
       end = ((end) < (((early_start + ii) < (late_start + 1) ? (early_start + ii) : (late_start + 1))) ? (end) : (((early_start + ii) < (late_start + 1) ? (early_start + ii) : (late_start + 1))));
       step = 1;
     }
   else
     {
       start = (((node_sched_params_ptr)(u_node)->aux.info)->asap);
       end = start + ii;
       step = 1;
     }
   if (dump_file)
     fprintf(dump_file, "Trying to schedule node %d in (%d .. %d) step %d\n",
      u, start, end, step);
   success = 0;
   if ((step > 0 && start < end) || (step < 0 && start > end))
     for (c = start; c != end; c += step)
       {
  ps_insn_ptr psi = ps_add_node_check_conflicts (ps, u_node, c);
    if (psi)
    {
      (((node_sched_params_ptr)(u_node)->aux.info)->time) = c;
      ((sched_nodes)->elms [(u) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (u) % ((unsigned) (8 * 4)));
      success = 1;
      if (dump_file)
        fprintf(dump_file, "Schedule in %d\n", c);
      break;
    }
       }
   if (!success)
     {
       ii++;
       try_again_with_larger_ii = 1;
       reset_partial_schedule (ps, ii);
       break;
     }
 }
    }
  free(sched_nodes);
  free(psp);
  free(pss);
  if (ii >= maxii)
    {
      free_partial_schedule (ps);
      ps = ((void *)0);
    }
  return ps;
}
typedef struct node_order_params * nopa;
static void order_nodes_of_sccs (ddg_all_sccs_ptr, int * result);
static int order_nodes_in_scc (ddg_ptr, sbitmap, sbitmap, int*, int);
static nopa calculate_order_params (ddg_ptr, int mii);
static int find_max_asap (ddg_ptr, sbitmap);
static int find_max_hv_min_mob (ddg_ptr, sbitmap);
static int find_max_dv_min_mob (ddg_ptr, sbitmap);
enum sms_direction {BOTTOMUP, TOPDOWN};
struct node_order_params
{
  int asap;
  int alap;
  int height;
};
static void
check_nodes_order (int *node_order, int num_nodes)
{
  int i;
  sbitmap tmp = sbitmap_alloc (num_nodes);
  sbitmap_zero (tmp);
  for (i = 0; i < num_nodes; i++)
    {
      int u = node_order[i];
      if (u >= num_nodes || u < 0 || ((tmp)->elms [(u) / ((unsigned) (8 * 4))] >> (u) % ((unsigned) (8 * 4)) & 1))
 abort ();
      ((tmp)->elms [(u) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (u) % ((unsigned) (8 * 4)));
    }
  free(tmp);
}
static int
sms_order_nodes (ddg_ptr g, int mii, int * node_order)
{
  int i;
  int rec_mii = 0;
  ddg_all_sccs_ptr sccs = create_ddg_all_sccs (g);
  nopa nops = calculate_order_params (g, mii);
  order_nodes_of_sccs (sccs, node_order);
  if (sccs->num_sccs > 0)
    rec_mii = sccs->sccs[0]->recurrence_length;
  for (i = 0; i < g->num_nodes; i++)
    {
      ddg_node_ptr v = &g->nodes[i];
      v->aux.count = (((struct node_order_params *) ((v))->aux.info)->asap);
    }
  free (nops);
  free_ddg_all_sccs (sccs);
  check_nodes_order (node_order, g->num_nodes);
  return rec_mii;
}
static void
order_nodes_of_sccs (ddg_all_sccs_ptr all_sccs, int * node_order)
{
  int i, pos = 0;
  ddg_ptr g = all_sccs->ddg;
  int num_nodes = g->num_nodes;
  sbitmap prev_sccs = sbitmap_alloc (num_nodes);
  sbitmap on_path = sbitmap_alloc (num_nodes);
  sbitmap tmp = sbitmap_alloc (num_nodes);
  sbitmap ones = sbitmap_alloc (num_nodes);
  sbitmap_zero (prev_sccs);
  sbitmap_ones (ones);
  for (i = 0; i < all_sccs->num_sccs; i++)
    {
      ddg_scc_ptr scc = all_sccs->sccs[i];
      find_nodes_on_paths (on_path, g, prev_sccs, scc->nodes);
      sbitmap_a_or_b (tmp, scc->nodes, on_path);
      find_nodes_on_paths (on_path, g, scc->nodes, prev_sccs);
      sbitmap_a_or_b (tmp, tmp, on_path);
      sbitmap_difference (tmp, tmp, prev_sccs);
      pos = order_nodes_in_scc (g, prev_sccs, tmp, node_order, pos);
    }
  while (pos < g->num_nodes)
    {
      sbitmap_difference (tmp, ones, prev_sccs);
      pos = order_nodes_in_scc (g, prev_sccs, tmp, node_order, pos);
    }
  free(prev_sccs);
  free(on_path);
  free(tmp);
  free(ones);
}
static struct node_order_params *
calculate_order_params (ddg_ptr g, int mii )
{
  int u;
  int max_asap;
  int num_nodes = g->num_nodes;
  ddg_edge_ptr e;
  nopa node_order_params_arr;
  node_order_params_arr = (nopa) xcalloc (num_nodes,
       sizeof (struct node_order_params));
  for (u = 0; u < num_nodes; u++)
    g->nodes[u].aux.info = &node_order_params_arr[u];
  max_asap = 0;
  for (u = 0; u < num_nodes; u++)
    {
      ddg_node_ptr u_node = &g->nodes[u];
      (((struct node_order_params *) ((u_node))->aux.info)->asap) = 0;
      for (e = u_node->in; e; e = e->next_in)
 if (e->distance == 0)
   (((struct node_order_params *) ((u_node))->aux.info)->asap) = (((((struct node_order_params *) ((u_node))->aux.info)->asap)) > ((((struct node_order_params *) ((e->src))->aux.info)->asap) + e->latency) ? ((((struct node_order_params *) ((u_node))->aux.info)->asap)) : ((((struct node_order_params *) ((e->src))->aux.info)->asap) + e->latency))
                                     ;
      max_asap = ((max_asap) > ((((struct node_order_params *) ((u_node))->aux.info)->asap)) ? (max_asap) : ((((struct node_order_params *) ((u_node))->aux.info)->asap)));
    }
  for (u = num_nodes - 1; u > -1; u--)
    {
      ddg_node_ptr u_node = &g->nodes[u];
      (((struct node_order_params *) ((u_node))->aux.info)->alap) = max_asap;
      (((struct node_order_params *) ((u_node))->aux.info)->height) = 0;
      for (e = u_node->out; e; e = e->next_out)
 if (e->distance == 0)
   {
     (((struct node_order_params *) ((u_node))->aux.info)->alap) = (((((struct node_order_params *) ((u_node))->aux.info)->alap)) < ((((struct node_order_params *) ((e->dest))->aux.info)->alap) - e->latency) ? ((((struct node_order_params *) ((u_node))->aux.info)->alap)) : ((((struct node_order_params *) ((e->dest))->aux.info)->alap) - e->latency))
                                 ;
     (((struct node_order_params *) ((u_node))->aux.info)->height) = (((((struct node_order_params *) ((u_node))->aux.info)->height)) > ((((struct node_order_params *) ((e->dest))->aux.info)->height) + e->latency) ? ((((struct node_order_params *) ((u_node))->aux.info)->height)) : ((((struct node_order_params *) ((e->dest))->aux.info)->height) + e->latency))
                                     ;
   }
    }
  return node_order_params_arr;
}
static int
find_max_asap (ddg_ptr g, sbitmap nodes)
{
  int u;
  int max_asap = -1;
  int result = -1;
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (nodes)->size; unsigned long *ptr_ = (nodes)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (u) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { ddg_node_ptr u_node = &g->nodes[u]; if (max_asap < (((struct node_order_params *) ((u_node))->aux.info)->asap)) { max_asap = (((struct node_order_params *) ((u_node))->aux.info)->asap); result = u; } }; if (word_ == 0) break; } } } } while (0)
      ;
  return result;
}
static int
find_max_hv_min_mob (ddg_ptr g, sbitmap nodes)
{
  int u;
  int max_hv = -1;
  int min_mob = 2147483647;
  int result = -1;
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (nodes)->size; unsigned long *ptr_ = (nodes)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (u) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { ddg_node_ptr u_node = &g->nodes[u]; if (max_hv < (((struct node_order_params *) ((u_node))->aux.info)->height)) { max_hv = (((struct node_order_params *) ((u_node))->aux.info)->height); min_mob = ((((struct node_order_params *) (((u_node)))->aux.info)->alap) - (((struct node_order_params *) (((u_node)))->aux.info)->asap)); result = u; } else if ((max_hv == (((struct node_order_params *) ((u_node))->aux.info)->height)) && (min_mob > ((((struct node_order_params *) (((u_node)))->aux.info)->alap) - (((struct node_order_params *) (((u_node)))->aux.info)->asap)))) { min_mob = ((((struct node_order_params *) (((u_node)))->aux.info)->alap) - (((struct node_order_params *) (((u_node)))->aux.info)->asap)); result = u; } }; if (word_ == 0) break; } } } } while (0)
      ;
  return result;
}
static int
find_max_dv_min_mob (ddg_ptr g, sbitmap nodes)
{
  int u;
  int max_dv = -1;
  int min_mob = 2147483647;
  int result = -1;
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (nodes)->size; unsigned long *ptr_ = (nodes)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (u) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { ddg_node_ptr u_node = &g->nodes[u]; if (max_dv < ((((struct node_order_params *) (((u_node)))->aux.info)->asap))) { max_dv = ((((struct node_order_params *) (((u_node)))->aux.info)->asap)); min_mob = ((((struct node_order_params *) (((u_node)))->aux.info)->alap) - (((struct node_order_params *) (((u_node)))->aux.info)->asap)); result = u; } else if ((max_dv == ((((struct node_order_params *) (((u_node)))->aux.info)->asap))) && (min_mob > ((((struct node_order_params *) (((u_node)))->aux.info)->alap) - (((struct node_order_params *) (((u_node)))->aux.info)->asap)))) { min_mob = ((((struct node_order_params *) (((u_node)))->aux.info)->alap) - (((struct node_order_params *) (((u_node)))->aux.info)->asap)); result = u; } }; if (word_ == 0) break; } } } } while (0)
      ;
  return result;
}
static int
order_nodes_in_scc (ddg_ptr g, sbitmap nodes_ordered, sbitmap scc,
      int * node_order, int pos)
{
  enum sms_direction dir;
  int num_nodes = g->num_nodes;
  sbitmap workset = sbitmap_alloc (num_nodes);
  sbitmap tmp = sbitmap_alloc (num_nodes);
  sbitmap zero_bitmap = sbitmap_alloc (num_nodes);
  sbitmap predecessors = sbitmap_alloc (num_nodes);
  sbitmap successors = sbitmap_alloc (num_nodes);
  sbitmap_zero (predecessors);
  find_predecessors (predecessors, g, nodes_ordered);
  sbitmap_zero (successors);
  find_successors (successors, g, nodes_ordered);
  sbitmap_zero (tmp);
  if (sbitmap_a_and_b_cg (tmp, predecessors, scc))
    {
      sbitmap_copy (workset, tmp);
      dir = BOTTOMUP;
    }
  else if (sbitmap_a_and_b_cg (tmp, successors, scc))
    {
      sbitmap_copy (workset, tmp);
      dir = TOPDOWN;
    }
  else
    {
      int u;
      sbitmap_zero (workset);
      if ((u = find_max_asap (g, scc)) >= 0)
 ((workset)->elms [(u) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (u) % ((unsigned) (8 * 4)));
      dir = BOTTOMUP;
    }
  sbitmap_zero (zero_bitmap);
  while (!sbitmap_equal (workset, zero_bitmap))
    {
      int v;
      ddg_node_ptr v_node;
      sbitmap v_node_preds;
      sbitmap v_node_succs;
      if (dir == TOPDOWN)
 {
   while (!sbitmap_equal (workset, zero_bitmap))
     {
       v = find_max_hv_min_mob (g, workset);
       v_node = &g->nodes[v];
       node_order[pos++] = v;
       v_node_succs = ((v_node)->successors);
       sbitmap_a_and_b (tmp, v_node_succs, scc);
       sbitmap_difference (tmp, tmp, nodes_ordered);
       sbitmap_a_or_b (workset, workset, tmp);
       ((workset)->elms [(v) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (v) % ((unsigned) (8 * 4))));
       ((nodes_ordered)->elms [(v) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (v) % ((unsigned) (8 * 4)));
     }
   dir = BOTTOMUP;
   sbitmap_zero (predecessors);
   find_predecessors (predecessors, g, nodes_ordered);
   sbitmap_a_and_b (workset, predecessors, scc);
 }
      else
 {
   while (!sbitmap_equal (workset, zero_bitmap))
     {
       v = find_max_dv_min_mob (g, workset);
       v_node = &g->nodes[v];
       node_order[pos++] = v;
       v_node_preds = ((v_node)->predecessors);
       sbitmap_a_and_b (tmp, v_node_preds, scc);
       sbitmap_difference (tmp, tmp, nodes_ordered);
       sbitmap_a_or_b (workset, workset, tmp);
       ((workset)->elms [(v) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (v) % ((unsigned) (8 * 4))));
       ((nodes_ordered)->elms [(v) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (v) % ((unsigned) (8 * 4)));
     }
   dir = TOPDOWN;
   sbitmap_zero (successors);
   find_successors (successors, g, nodes_ordered);
   sbitmap_a_and_b (workset, successors, scc);
 }
    }
  free(tmp);
  free(workset);
  free(zero_bitmap);
  free(predecessors);
  free(successors);
  return pos;
}
partial_schedule_ptr
create_partial_schedule (int ii, ddg_ptr g, int history)
{
  partial_schedule_ptr ps = (partial_schedule_ptr)
        xmalloc (sizeof (struct partial_schedule));
  ps->rows = (ps_insn_ptr *) xcalloc (ii, sizeof (ps_insn_ptr));
  ps->ii = ii;
  ps->history = history;
  ps->min_cycle = 2147483647;
  ps->max_cycle = (-2147483647 - 1);
  ps->g = g;
  return ps;
}
static void
free_ps_insns (partial_schedule_ptr ps)
{
  int i;
  for (i = 0; i < ps->ii; i++)
    {
      while (ps->rows[i])
 {
   ps_insn_ptr ps_insn = ps->rows[i]->next_in_row;
   free (ps->rows[i]);
   ps->rows[i] = ps_insn;
 }
      ps->rows[i] = ((void *)0);
    }
}
void
free_partial_schedule (partial_schedule_ptr ps)
{
  if (!ps)
    return;
  free_ps_insns (ps);
  free (ps->rows);
  free (ps);
}
void
reset_partial_schedule (partial_schedule_ptr ps, int new_ii)
{
  if (!ps)
    return;
  free_ps_insns (ps);
  if (new_ii == ps->ii)
    return;
  ps->rows = (ps_insn_ptr *) xrealloc (ps->rows, new_ii
       * sizeof (ps_insn_ptr));
  memset (ps->rows, 0, new_ii * sizeof (ps_insn_ptr));
  ps->ii = new_ii;
  ps->min_cycle = 2147483647;
  ps->max_cycle = (-2147483647 - 1);
}
void
print_partial_schedule (partial_schedule_ptr ps, FILE *dump)
{
  int i;
  for (i = 0; i < ps->ii; i++)
    {
      ps_insn_ptr ps_i = ps->rows[i];
      fprintf (dump, "\n[CYCLE %d ]: ", i);
      while (ps_i)
 {
   fprintf (dump, "%d, ",
     (((ps_i->node->insn)->u.fld[0]).rtint));
   ps_i = ps_i->next_in_row;
 }
    }
}
static ps_insn_ptr
create_ps_insn (ddg_node_ptr node, int rest_count, int cycle)
{
  ps_insn_ptr ps_i = xmalloc (sizeof (struct ps_insn));
  ps_i->node = node;
  ps_i->next_in_row = ((void *)0);
  ps_i->prev_in_row = ((void *)0);
  ps_i->row_rest_count = rest_count;
  ps_i->cycle = cycle;
  return ps_i;
}
static int
remove_node_from_ps (partial_schedule_ptr ps, ps_insn_ptr ps_i)
{
  int row;
  if (!ps || !ps_i)
    return 0;
  row = ((ps_i->cycle) % (ps->ii) < 0 ? ((ps_i->cycle) % (ps->ii) + (ps->ii)) : (ps_i->cycle) % (ps->ii));
  if (! ps_i->prev_in_row)
    {
      if (ps_i != ps->rows[row])
 return 0;
      ps->rows[row] = ps_i->next_in_row;
      if (ps->rows[row])
 ps->rows[row]->prev_in_row = ((void *)0);
    }
  else
    {
      ps_i->prev_in_row->next_in_row = ps_i->next_in_row;
      if (ps_i->next_in_row)
 ps_i->next_in_row->prev_in_row = ps_i->prev_in_row;
    }
  free (ps_i);
  return 1;
}
static int
ps_insn_advance_column (partial_schedule_ptr ps, ps_insn_ptr ps_i)
{
  ps_insn_ptr prev, next;
  int row;
  if (!ps || !ps_i)
    return 0;
  row = ((ps_i->cycle) % (ps->ii) < 0 ? ((ps_i->cycle) % (ps->ii) + (ps->ii)) : (ps_i->cycle) % (ps->ii));
  if (! ps_i->next_in_row)
    return 0;
  if (ps_i->cycle == ps_i->next_in_row->cycle)
    {
      ddg_edge_ptr e;
      ddg_node_ptr next_node = ps_i->next_in_row->node;
      for (e = ps_i->node->out; e; e = e->next_out)
 if (e->dest == next_node)
   return 0;
    }
  prev = ps_i->prev_in_row;
  next = ps_i->next_in_row;
  if (ps_i == ps->rows[row])
    ps->rows[row] = next;
  ps_i->next_in_row = next->next_in_row;
  if (next->next_in_row)
    next->next_in_row->prev_in_row = ps_i;
  next->next_in_row = ps_i;
  ps_i->prev_in_row = next;
  next->prev_in_row = prev;
  if (prev)
    prev->next_in_row = next;
  return 1;
}
static ps_insn_ptr
add_node_to_ps (partial_schedule_ptr ps, ddg_node_ptr node, int cycle)
{
  ps_insn_ptr ps_i, next_ps_i, advance_after;
  int rest_count = 1;
  int row = ((cycle) % (ps->ii) < 0 ? ((cycle) % (ps->ii) + (ps->ii)) : (cycle) % (ps->ii));
  ddg_edge_ptr e;
  if (ps->rows[row]
      && ps->rows[row]->row_rest_count >= issue_rate)
    return ((void *)0);
  if (ps->rows[row])
    rest_count += ps->rows[row]->row_rest_count;
  ps_i = create_ps_insn (node, rest_count, cycle);
  ps_i->next_in_row = ps->rows[row];
  ps_i->prev_in_row = ((void *)0);
  if (ps_i->next_in_row)
    ps_i->next_in_row->prev_in_row = ps_i;
  ps->rows[row] = ps_i;
  advance_after = ((void *)0);
  for (next_ps_i = ps_i->next_in_row;
       next_ps_i;
       next_ps_i = next_ps_i->next_in_row)
    if (next_ps_i->cycle == cycle)
      for (e = node->in; e; e = e->next_in)
 if (e->src == next_ps_i->node)
   advance_after = next_ps_i;
  if (advance_after)
    while (ps_i->prev_in_row != advance_after)
      if (!ps_insn_advance_column (ps, ps_i))
 {
   remove_node_from_ps (ps, ps_i);
   return ((void *)0);
 }
  return ps_i;
}
static void
advance_one_cycle_modulo (void)
{
  if (targetm.sched.use_dfa_pipeline_interface
      && (*targetm.sched.use_dfa_pipeline_interface) ())
    {
      if (targetm.sched.dfa_pre_cycle_insn)
 state_transition (curr_state,
     (*targetm.sched.dfa_pre_cycle_insn) ());
      state_transition (curr_state, ((void *)0));
      if (targetm.sched.dfa_post_cycle_insn)
 state_transition (curr_state,
     (*targetm.sched.dfa_post_cycle_insn) ());
    }
}
static int
ps_has_conflicts (partial_schedule_ptr ps, int from, int to)
{
  int cycle;
  if (! targetm.sched.use_dfa_pipeline_interface
      || ! (*targetm.sched.use_dfa_pipeline_interface) ())
    return 1;
  state_reset (curr_state);
  for (cycle = from; cycle <= to; cycle++)
    {
      ps_insn_ptr crr_insn;
      int can_issue_more = issue_rate;
      for (crr_insn = ps->rows[((cycle) % (ps->ii) < 0 ? ((cycle) % (ps->ii) + (ps->ii)) : (cycle) % (ps->ii))];
    crr_insn;
    crr_insn = crr_insn->next_in_row)
 {
   rtx insn = crr_insn->node->insn;
   if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     continue;
   if (!can_issue_more || state_dead_lock_p (curr_state))
     return 1;
   if (state_transition (curr_state, insn) >= 0)
     return 1;
   if (targetm.sched.variable_issue)
     can_issue_more =
       (*targetm.sched.variable_issue) (sched_dump, sched_verbose,
            insn, can_issue_more);
   else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE
     && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != CLOBBER)
     can_issue_more--;
 }
      advance_one_cycle_modulo ();
    }
  return 0;
}
ps_insn_ptr
ps_add_node_check_conflicts (partial_schedule_ptr ps, ddg_node_ptr n, int c)
{
  int has_conflicts = 0;
  ps_insn_ptr ps_i;
  if (! (ps_i = add_node_to_ps (ps, n, c)))
    return ((void *)0);
  has_conflicts = ps_has_conflicts (ps, c, c)
    || (ps->history > 0
        && ps_has_conflicts (ps,
        c - ps->history,
        c + ps->history));
  while (has_conflicts)
    {
      if (! ps_insn_advance_column (ps, ps_i))
 break;
      has_conflicts = ps_has_conflicts (ps, c, c)
        || (ps->history > 0
     && ps_has_conflicts (ps,
            c - ps->history,
            c + ps->history));
    }
  if (has_conflicts)
    {
      remove_node_from_ps (ps, ps_i);
      return ((void *)0);
    }
  ps->min_cycle = ((ps->min_cycle) < (c) ? (ps->min_cycle) : (c));
  ps->max_cycle = ((ps->max_cycle) > (c) ? (ps->max_cycle) : (c));
  return ps_i;
}
void
rotate_partial_schedule (partial_schedule_ptr ps, int start_cycle)
{
  int i, row, backward_rotates;
  int last_row = ps->ii - 1;
  if (start_cycle == 0)
    return;
  backward_rotates = ((start_cycle) % (ps->ii) < 0 ? ((start_cycle) % (ps->ii) + (ps->ii)) : (start_cycle) % (ps->ii));
  for (i = 0; i < backward_rotates; i++)
    {
      ps_insn_ptr first_row = ps->rows[0];
      for (row = 0; row < last_row; row++)
 ps->rows[row] = ps->rows[row+1];
      ps->rows[last_row] = first_row;
    }
  ps->max_cycle -= start_cycle;
  ps->min_cycle -= start_cycle;
}
optab optab_table[OTI_MAX];
rtx libfunc_table[LTI_MAX];
convert_optab convert_optab_table[CONVERT_OPTAB_MAX];
optab code_to_optab[((int) LAST_AND_UNUSED_RTX_CODE) + 1];
rtxfun bcc_gen_fctn[((int) LAST_AND_UNUSED_RTX_CODE)];
enum insn_code setcc_gen_code[((int) LAST_AND_UNUSED_RTX_CODE)];
enum insn_code movcc_gen_code[NUM_MACHINE_MODES];
static rtx trap_rtx;
static int add_equal_note (rtx, rtx, enum rtx_code, rtx, rtx);
static rtx widen_operand (rtx, enum machine_mode, enum machine_mode, int,
     int);
static int expand_cmplxdiv_straight (rtx, rtx, rtx, rtx, rtx, rtx,
         enum machine_mode, int,
         enum optab_methods, enum mode_class,
         optab);
static int expand_cmplxdiv_wide (rtx, rtx, rtx, rtx, rtx, rtx,
     enum machine_mode, int, enum optab_methods,
     enum mode_class, optab);
static void prepare_cmp_insn (rtx *, rtx *, enum rtx_code *, rtx,
         enum machine_mode *, int *,
         enum can_compare_purpose);
static enum insn_code can_fix_p (enum machine_mode, enum machine_mode, int,
     int *);
static enum insn_code can_float_p (enum machine_mode, enum machine_mode, int);
static optab new_optab (void);
static convert_optab new_convert_optab (void);
static optab init_optab (enum rtx_code);
static optab init_optabv (enum rtx_code);
static convert_optab init_convert_optab (enum rtx_code);
static void init_libfuncs (optab, int, int, const char *, int);
static void init_integral_libfuncs (optab, const char *, int);
static void init_floating_libfuncs (optab, const char *, int);
static void init_interclass_conv_libfuncs (convert_optab, const char *,
        enum mode_class, enum mode_class);
static void init_intraclass_conv_libfuncs (convert_optab, const char *,
        enum mode_class, unsigned char);
static void emit_cmp_and_jump_insn_1 (rtx, rtx, enum machine_mode,
          enum rtx_code, int, rtx);
static void prepare_float_lib_cmp (rtx *, rtx *, enum rtx_code *,
       enum machine_mode *, int *);
static rtx expand_vector_binop (enum machine_mode, optab, rtx, rtx, rtx, int,
    enum optab_methods);
static rtx expand_vector_unop (enum machine_mode, optab, rtx, rtx, int);
static rtx widen_clz (enum machine_mode, rtx, rtx);
static rtx expand_parity (enum machine_mode, rtx, rtx);
static int
add_equal_note (rtx insns, rtx target, enum rtx_code code, rtx op0, rtx op1)
{
  rtx last_insn, insn, set;
  rtx note;
  if (! insns
      || ! ((((enum rtx_code) (insns)->code) == INSN) || (((enum rtx_code) (insns)->code) == JUMP_INSN) || (((enum rtx_code) (insns)->code) == CALL_INSN))
      || (((insns)->u.fld[2]).rtx1) == (rtx) 0)
    abort ();
  if ((rtx_class[(int) (code)]) != RTX_COMM_ARITH
      && (rtx_class[(int) (code)]) != RTX_BIN_ARITH
      && (rtx_class[(int) (code)]) != RTX_COMM_COMPARE
      && (rtx_class[(int) (code)]) != RTX_COMPARE
      && (rtx_class[(int) (code)]) != RTX_UNARY)
    return 1;
  if (((enum rtx_code) (target)->code) == ZERO_EXTRACT)
    return 1;
  for (last_insn = insns;
       (((last_insn)->u.fld[2]).rtx1) != (rtx) 0;
       last_insn = (((last_insn)->u.fld[2]).rtx1))
    ;
  set = (((((enum rtx_code) (last_insn)->code) == INSN) || (((enum rtx_code) (last_insn)->code) == JUMP_INSN) || (((enum rtx_code) (last_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((last_insn)->u.fld[5]).rtx1))->code) == SET ? (((last_insn)->u.fld[5]).rtx1) : single_set_2 (last_insn, (((last_insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (set == (rtx) 0)
    return 1;
  if (! rtx_equal_p ((((set)->u.fld[0]).rtx1), target)
      && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) != STRICT_LOW_PART
   || ! rtx_equal_p (((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtx1), target)))
    return 1;
  if (reg_overlap_mentioned_p (target, op0)
      || (op1 && reg_overlap_mentioned_p (target, op1)))
    {
      insn = (((last_insn)->u.fld[1]).rtx1);
      while (insn != (rtx) 0)
 {
   if (reg_set_p (target, insn))
     return 0;
   insn = (((insn)->u.fld[1]).rtx1);
 }
    }
  if ((rtx_class[(int) (code)]) == RTX_UNARY)
    note = gen_rtx_fmt_e (code, ((enum machine_mode) (target)->mode), copy_rtx (op0));
  else
    note = gen_rtx_fmt_ee (code, ((enum machine_mode) (target)->mode), copy_rtx (op0), copy_rtx (op1));
  set_unique_reg_note (last_insn, REG_EQUAL, note);
  return 1;
}
static rtx
widen_operand (rtx op, enum machine_mode mode, enum machine_mode oldmode,
        int unsignedp, int no_extend)
{
  rtx result;
  if (no_extend && ((enum machine_mode) (op)->mode) == VOIDmode)
    return op;
  if (! no_extend
      || (((enum rtx_code) (op)->code) == SUBREG && (((op))->in_struct)
   && ((((op))->volatil) ? -1 : (op)->unchanging) == unsignedp))
    return convert_modes (mode, oldmode, op, unsignedp);
  if (((unsigned short) mode_size[mode]) <= (0 ? 8 : 4))
    return gen_rtx_SUBREG (mode, force_reg (((enum machine_mode) (op)->mode), op), 0);
  result = gen_reg_rtx (mode);
  emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (result)));
  emit_move_insn (rtl_hooks.gen_lowpart (((enum machine_mode) (op)->mode), result), op);
  return result;
}
static int
expand_cmplxdiv_straight (rtx real0, rtx real1, rtx imag0, rtx imag1,
     rtx realr, rtx imagr, enum machine_mode submode,
     int unsignedp, enum optab_methods methods,
     enum mode_class class, optab binoptab)
{
  rtx divisor;
  rtx real_t, imag_t;
  rtx temp1, temp2;
  rtx res;
  optab this_add_optab = (optab_table[OTI_add]);
  optab this_sub_optab = (optab_table[OTI_sub]);
  optab this_neg_optab = (optab_table[OTI_neg]);
  optab this_mul_optab = (optab_table[OTI_smul]);
  if (binoptab == (optab_table[OTI_sdivv]))
    {
      this_add_optab = (optab_table[OTI_addv]);
      this_sub_optab = (optab_table[OTI_subv]);
      this_neg_optab = (optab_table[OTI_negv]);
      this_mul_optab = (optab_table[OTI_smulv]);
    }
  real0 = force_reg (submode, real0);
  real1 = force_reg (submode, real1);
  if (imag0 != 0)
    imag0 = force_reg (submode, imag0);
  imag1 = force_reg (submode, imag1);
  temp1 = expand_binop (submode, this_mul_optab, real1, real1,
   (rtx) 0, unsignedp, methods);
  temp2 = expand_binop (submode, this_mul_optab, imag1, imag1,
   (rtx) 0, unsignedp, methods);
  if (temp1 == 0 || temp2 == 0)
    return 0;
  divisor = expand_binop (submode, this_add_optab, temp1, temp2,
     (rtx) 0, unsignedp, methods);
  if (divisor == 0)
    return 0;
  if (imag0 == 0)
    {
      real_t = expand_binop (submode, this_mul_optab, real0, real1,
        (rtx) 0, unsignedp, methods);
      imag_t = expand_binop (submode, this_mul_optab, real0, imag1,
        (rtx) 0, unsignedp, methods);
      if (real_t == 0 || imag_t == 0)
 return 0;
      imag_t = expand_unop (submode, this_neg_optab, imag_t,
       (rtx) 0, unsignedp);
    }
  else
    {
      temp1 = expand_binop (submode, this_mul_optab, real0, real1,
       (rtx) 0, unsignedp, methods);
      temp2 = expand_binop (submode, this_mul_optab, imag0, imag1,
       (rtx) 0, unsignedp, methods);
      if (temp1 == 0 || temp2 == 0)
 return 0;
      real_t = expand_binop (submode, this_add_optab, temp1, temp2,
        (rtx) 0, unsignedp, methods);
      temp1 = expand_binop (submode, this_mul_optab, imag0, real1,
       (rtx) 0, unsignedp, methods);
      temp2 = expand_binop (submode, this_mul_optab, real0, imag1,
       (rtx) 0, unsignedp, methods);
      if (temp1 == 0 || temp2 == 0)
 return 0;
      imag_t = expand_binop (submode, this_sub_optab, temp1, temp2,
        (rtx) 0, unsignedp, methods);
      if (real_t == 0 || imag_t == 0)
 return 0;
    }
  if (class == MODE_COMPLEX_FLOAT)
    res = expand_binop (submode, binoptab, real_t, divisor,
   realr, unsignedp, methods);
  else
    res = expand_divmod (0, TRUNC_DIV_EXPR, submode,
    real_t, divisor, realr, unsignedp);
  if (res == 0)
    return 0;
  if (res != realr)
    emit_move_insn (realr, res);
  if (class == MODE_COMPLEX_FLOAT)
    res = expand_binop (submode, binoptab, imag_t, divisor,
   imagr, unsignedp, methods);
  else
    res = expand_divmod (0, TRUNC_DIV_EXPR, submode,
    imag_t, divisor, imagr, unsignedp);
  if (res == 0)
    return 0;
  if (res != imagr)
    emit_move_insn (imagr, res);
  return 1;
}
static int
expand_cmplxdiv_wide (rtx real0, rtx real1, rtx imag0, rtx imag1, rtx realr,
        rtx imagr, enum machine_mode submode, int unsignedp,
        enum optab_methods methods, enum mode_class class,
        optab binoptab)
{
  rtx ratio, divisor;
  rtx real_t, imag_t;
  rtx temp1, temp2, lab1, lab2;
  enum machine_mode mode;
  rtx res;
  optab this_add_optab = (optab_table[OTI_add]);
  optab this_sub_optab = (optab_table[OTI_sub]);
  optab this_neg_optab = (optab_table[OTI_neg]);
  optab this_mul_optab = (optab_table[OTI_smul]);
  if (binoptab == (optab_table[OTI_sdivv]))
    {
      this_add_optab = (optab_table[OTI_addv]);
      this_sub_optab = (optab_table[OTI_subv]);
      this_neg_optab = (optab_table[OTI_negv]);
      this_mul_optab = (optab_table[OTI_smulv]);
    }
  real0 = force_reg (submode, real0);
  real1 = force_reg (submode, real1);
  if (imag0 != 0)
    imag0 = force_reg (submode, imag0);
  imag1 = force_reg (submode, imag1);
  if (unsignedp)
    {
      temp1 = real1;
      temp2 = imag1;
    }
  else
    {
      temp1 = expand_abs (submode, real1, (rtx) 0, unsignedp, 1);
      temp2 = expand_abs (submode, imag1, (rtx) 0, unsignedp, 1);
    }
  if (temp1 == 0 || temp2 == 0)
    return 0;
  mode = ((enum machine_mode) (temp1)->mode);
  lab1 = gen_label_rtx ();
  emit_cmp_and_jump_insns (temp1, temp2, LT, (rtx) 0,
      mode, unsignedp, lab1);
  if (class == MODE_COMPLEX_FLOAT)
    ratio = expand_binop (submode, binoptab, imag1, real1,
     (rtx) 0, unsignedp, methods);
  else
    ratio = expand_divmod (0, TRUNC_DIV_EXPR, submode,
      imag1, real1, (rtx) 0, unsignedp);
  if (ratio == 0)
    return 0;
  temp1 = expand_binop (submode, this_mul_optab, imag1, ratio,
   (rtx) 0, unsignedp, methods);
  if (temp1 == 0)
    return 0;
  divisor = expand_binop (submode, this_add_optab, temp1, real1,
     (rtx) 0, unsignedp, methods);
  if (divisor == 0)
    return 0;
  if (imag0 == 0)
    {
      real_t = real0;
      imag_t = expand_binop (submode, this_mul_optab, real0, ratio,
        (rtx) 0, unsignedp, methods);
      if (imag_t == 0)
 return 0;
      imag_t = expand_unop (submode, this_neg_optab, imag_t,
       (rtx) 0, unsignedp);
      if (real_t == 0 || imag_t == 0)
 return 0;
    }
  else
    {
      temp1 = expand_binop (submode, this_mul_optab, imag0, ratio,
       (rtx) 0, unsignedp, methods);
      if (temp1 == 0)
 return 0;
      real_t = expand_binop (submode, this_add_optab, temp1, real0,
        (rtx) 0, unsignedp, methods);
      temp1 = expand_binop (submode, this_mul_optab, real0, ratio,
       (rtx) 0, unsignedp, methods);
      if (temp1 == 0)
 return 0;
      imag_t = expand_binop (submode, this_sub_optab, imag0, temp1,
        (rtx) 0, unsignedp, methods);
      if (real_t == 0 || imag_t == 0)
 return 0;
    }
  if (class == MODE_COMPLEX_FLOAT)
    res = expand_binop (submode, binoptab, real_t, divisor,
   realr, unsignedp, methods);
  else
    res = expand_divmod (0, TRUNC_DIV_EXPR, submode,
    real_t, divisor, realr, unsignedp);
  if (res == 0)
    return 0;
  if (res != realr)
    emit_move_insn (realr, res);
  if (class == MODE_COMPLEX_FLOAT)
    res = expand_binop (submode, binoptab, imag_t, divisor,
   imagr, unsignedp, methods);
  else
    res = expand_divmod (0, TRUNC_DIV_EXPR, submode,
    imag_t, divisor, imagr, unsignedp);
  if (res == 0)
    return 0;
  if (res != imagr)
    emit_move_insn (imagr, res);
  lab2 = gen_label_rtx ();
  emit_jump_insn (gen_jump (lab2));
  emit_barrier ();
  emit_label (lab1);
  if (class == MODE_COMPLEX_FLOAT)
    ratio = expand_binop (submode, binoptab, real1, imag1,
     (rtx) 0, unsignedp, methods);
  else
    ratio = expand_divmod (0, TRUNC_DIV_EXPR, submode,
      real1, imag1, (rtx) 0, unsignedp);
  if (ratio == 0)
    return 0;
  temp1 = expand_binop (submode, this_mul_optab, real1, ratio,
   (rtx) 0, unsignedp, methods);
  if (temp1 == 0)
    return 0;
  divisor = expand_binop (submode, this_add_optab, temp1, imag1,
     (rtx) 0, unsignedp, methods);
  if (divisor == 0)
    return 0;
  if (imag0 == 0)
    {
      real_t = expand_binop (submode, this_mul_optab, real0, ratio,
        (rtx) 0, unsignedp, methods);
      imag_t = expand_unop (submode, this_neg_optab, real0,
       (rtx) 0, unsignedp);
      if (real_t == 0 || imag_t == 0)
 return 0;
    }
  else
    {
      temp1 = expand_binop (submode, this_mul_optab, real0, ratio,
       (rtx) 0, unsignedp, methods);
      if (temp1 == 0)
 return 0;
      real_t = expand_binop (submode, this_add_optab, temp1, imag0,
        (rtx) 0, unsignedp, methods);
      temp1 = expand_binop (submode, this_mul_optab, imag0, ratio,
       (rtx) 0, unsignedp, methods);
      if (temp1 == 0)
 return 0;
      imag_t = expand_binop (submode, this_sub_optab, temp1, real0,
        (rtx) 0, unsignedp, methods);
      if (real_t == 0 || imag_t == 0)
 return 0;
    }
  if (class == MODE_COMPLEX_FLOAT)
    res = expand_binop (submode, binoptab, real_t, divisor,
   realr, unsignedp, methods);
  else
    res = expand_divmod (0, TRUNC_DIV_EXPR, submode,
    real_t, divisor, realr, unsignedp);
  if (res == 0)
    return 0;
  if (res != realr)
    emit_move_insn (realr, res);
  if (class == MODE_COMPLEX_FLOAT)
    res = expand_binop (submode, binoptab, imag_t, divisor,
   imagr, unsignedp, methods);
  else
    res = expand_divmod (0, TRUNC_DIV_EXPR, submode,
    imag_t, divisor, imagr, unsignedp);
  if (res == 0)
    return 0;
  if (res != imagr)
    emit_move_insn (imagr, res);
  emit_label (lab2);
  return 1;
}
rtx
expand_simple_binop (enum machine_mode mode, enum rtx_code code, rtx op0,
       rtx op1, rtx target, int unsignedp,
       enum optab_methods methods)
{
  optab binop = code_to_optab[(int) code];
  if (binop == 0)
    abort ();
  return expand_binop (mode, binop, op0, op1, target, unsignedp, methods);
}
rtx
expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1,
       rtx target, int unsignedp, enum optab_methods methods)
{
  enum optab_methods next_methods
    = (methods == OPTAB_LIB || methods == OPTAB_LIB_WIDEN
       ? OPTAB_WIDEN : methods);
  enum mode_class class;
  enum machine_mode wider_mode;
  rtx temp;
  int commutative_op = 0;
  int shift_op = (binoptab->code == ASHIFT
    || binoptab->code == ASHIFTRT
    || binoptab->code == LSHIFTRT
    || binoptab->code == ROTATE
    || binoptab->code == ROTATERT);
  rtx entry_last = get_last_insn ();
  rtx last;
  class = mode_class[mode];
  op0 = protect_from_queue (op0, 0);
  op1 = protect_from_queue (op1, 0);
  if (target)
    target = protect_from_queue (target, 1);
  if (flag_force_mem)
    {
      if (rtx_equal_p (op0, op1) && ! volatile_refs_p (op0))
 {
   op0 = force_not_mem (op0);
   op1 = op0;
 }
      else
 {
   op0 = force_not_mem (op0);
   op1 = force_not_mem (op1);
 }
    }
  if (binoptab == (optab_table[OTI_sub]) && ((enum rtx_code) (op1)->code) == CONST_INT)
    {
      op1 = negate_rtx (mode, op1);
      binoptab = (optab_table[OTI_add]);
    }
  if (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR) && preserve_subexpressions_p ()
      && rtx_cost (op0, binoptab->code) > ((1) * 4))
    op0 = force_reg (mode, op0);
  if (((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op1)->code) == CONST_VECTOR) && preserve_subexpressions_p ()
      && ! shift_op && rtx_cost (op1, binoptab->code) > ((1) * 4))
    op1 = force_reg (mode, op1);
  last = get_last_insn ();
  if ((rtx_class[(int) (binoptab->code)]) == RTX_COMM_ARITH
      || binoptab == (optab_table[OTI_smul_widen])
      || binoptab == (optab_table[OTI_umul_widen])
      || binoptab == (optab_table[OTI_smul_highpart])
      || binoptab == (optab_table[OTI_umul_highpart]))
    {
      commutative_op = 1;
      if (((target == 0 || (((enum rtx_code) (target)->code) == REG))
    ? (((((enum rtx_code) (op1)->code) == REG)
        && !(((enum rtx_code) (op0)->code) == REG))
       || target == op1)
    : rtx_equal_p (op1, target))
   || ((enum rtx_code) (op0)->code) == CONST_INT)
 {
   temp = op1;
   op1 = op0;
   op0 = temp;
 }
    }
  if (methods != OPTAB_MUST_WIDEN
      && binoptab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
    {
      int icode = (int) binoptab->handlers[(int) mode].insn_code;
      enum machine_mode mode0 = insn_data[icode].operand[1].mode;
      enum machine_mode mode1 = insn_data[icode].operand[2].mode;
      rtx pat;
      rtx xop0 = op0, xop1 = op1;
      if (target)
 temp = target;
      else
 temp = gen_reg_rtx (mode);
      if (commutative_op)
 {
   if (((enum machine_mode) (op0)->mode) != mode0 && ((enum machine_mode) (op1)->mode) != mode1
       && ((enum machine_mode) (op0)->mode) == mode1 && ((enum machine_mode) (op1)->mode) == mode0)
     {
       rtx tmp;
       tmp = op0; op0 = op1; op1 = tmp;
       tmp = xop0; xop0 = xop1; xop1 = tmp;
     }
 }
      if (((enum machine_mode) (op0)->mode) != mode0 && mode0 != VOIDmode)
 xop0 = convert_modes (mode0,
         ((enum machine_mode) (op0)->mode) != VOIDmode
         ? ((enum machine_mode) (op0)->mode)
         : mode,
         xop0, unsignedp);
      if (((enum machine_mode) (op1)->mode) != mode1 && mode1 != VOIDmode)
 xop1 = convert_modes (mode1,
         ((enum machine_mode) (op1)->mode) != VOIDmode
         ? ((enum machine_mode) (op1)->mode)
         : mode,
         xop1, unsignedp);
      if (! (*insn_data[icode].operand[1].predicate) (xop0, mode0)
   && mode0 != VOIDmode)
 xop0 = copy_to_mode_reg (mode0, xop0);
      if (! (*insn_data[icode].operand[2].predicate) (xop1, mode1)
   && mode1 != VOIDmode)
 xop1 = copy_to_mode_reg (mode1, xop1);
      if (! (*insn_data[icode].operand[0].predicate) (temp, mode))
 temp = gen_reg_rtx (mode);
      pat = (insn_data[icode].genfun) (temp, xop0, xop1);
      if (pat)
 {
   if (((((enum rtx_code) (pat)->code) == INSN) || (((enum rtx_code) (pat)->code) == JUMP_INSN) || (((enum rtx_code) (pat)->code) == CALL_INSN)) && (((pat)->u.fld[2]).rtx1) != (rtx) 0
       && ! add_equal_note (pat, temp, binoptab->code, xop0, xop1))
     {
       delete_insns_since (last);
       return expand_binop (mode, binoptab, op0, op1, (rtx) 0,
       unsignedp, methods);
     }
   emit_insn (pat);
   return temp;
 }
      else
 delete_insns_since (last);
    }
  if (binoptab == (optab_table[OTI_smul]) && mode_wider[mode] != VOIDmode
      && (((unsignedp ? (optab_table[OTI_umul_widen]) : (optab_table[OTI_smul_widen]))
    ->handlers[(int) mode_wider[mode]].insn_code)
   != CODE_FOR_nothing))
    {
      temp = expand_binop (mode_wider[mode],
      unsignedp ? (optab_table[OTI_umul_widen]) : (optab_table[OTI_smul_widen]),
      op0, op1, (rtx) 0, unsignedp, OPTAB_DIRECT);
      if (temp != 0)
 {
   if (mode_class[mode] == MODE_INT)
     return rtl_hooks.gen_lowpart (mode, temp);
   else
     return convert_to_mode (mode, temp, unsignedp);
 }
    }
  if ((class == MODE_INT || class == MODE_FLOAT || class == MODE_COMPLEX_FLOAT)
      && methods != OPTAB_DIRECT && methods != OPTAB_LIB)
    for (wider_mode = mode_wider[mode]; wider_mode != VOIDmode;
  wider_mode = mode_wider[wider_mode])
      {
 if (binoptab->handlers[(int) wider_mode].insn_code != CODE_FOR_nothing
     || (binoptab == (optab_table[OTI_smul])
  && mode_wider[wider_mode] != VOIDmode
  && (((unsignedp ? (optab_table[OTI_umul_widen]) : (optab_table[OTI_smul_widen]))
       ->handlers[(int) mode_wider[wider_mode]].insn_code)
      != CODE_FOR_nothing)))
   {
     rtx xop0 = op0, xop1 = op1;
     int no_extend = 0;
     if ((binoptab == (optab_table[OTI_ior]) || binoptab == (optab_table[OTI_and])
   || binoptab == (optab_table[OTI_xor])
   || binoptab == (optab_table[OTI_add]) || binoptab == (optab_table[OTI_sub])
   || binoptab == (optab_table[OTI_smul]) || binoptab == (optab_table[OTI_ashl]))
  && class == MODE_INT)
       no_extend = 1;
     xop0 = widen_operand (xop0, wider_mode, mode, unsignedp, no_extend);
     xop1 = widen_operand (xop1, wider_mode, mode, unsignedp,
      no_extend && binoptab != (optab_table[OTI_ashl]));
     temp = expand_binop (wider_mode, binoptab, xop0, xop1, (rtx) 0,
     unsignedp, OPTAB_DIRECT);
     if (temp)
       {
  if (class != MODE_INT)
    {
      if (target == 0)
        target = gen_reg_rtx (mode);
      convert_move (target, temp, 0);
      return target;
    }
  else
    return rtl_hooks.gen_lowpart (mode, temp);
       }
     else
       delete_insns_since (last);
   }
      }
  if ((binoptab == (optab_table[OTI_and]) || binoptab == (optab_table[OTI_ior]) || binoptab == (optab_table[OTI_xor]))
      && class == MODE_INT
      && ((unsigned short) mode_size[mode]) > (0 ? 8 : 4)
      && binoptab->handlers[(int) word_mode].insn_code != CODE_FOR_nothing)
    {
      int i;
      rtx insns;
      rtx equiv_value;
      if (target == 0 || target == op0 || target == op1)
 target = gen_reg_rtx (mode);
      start_sequence ();
      for (i = 0; i < ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) / (8 * (0 ? 8 : 4)); i++)
 {
   rtx target_piece = operand_subword (target, i, 1, mode);
   rtx x = expand_binop (word_mode, binoptab,
    operand_subword_force (op0, i, mode),
    operand_subword_force (op1, i, mode),
    target_piece, unsignedp, next_methods);
   if (x == 0)
     break;
   if (target_piece != x)
     emit_move_insn (target_piece, x);
 }
      insns = get_insns ();
      end_sequence ();
      if (i == ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) / (8 * (0 ? 8 : 4)))
 {
   if (binoptab->code != UNKNOWN)
     equiv_value
       = gen_rtx_fmt_ee (binoptab->code, mode,
    copy_rtx (op0), copy_rtx (op1));
   else
     equiv_value = 0;
   emit_no_conflict_block (insns, target, op0, op1, equiv_value);
   return target;
 }
    }
  if ((binoptab == (optab_table[OTI_lshr]) || binoptab == (optab_table[OTI_ashl])
       || binoptab == (optab_table[OTI_ashr]))
      && class == MODE_INT
      && ((enum rtx_code) (op1)->code) == CONST_INT
      && ((unsigned short) mode_size[mode]) == 2 * (0 ? 8 : 4)
      && binoptab->handlers[(int) word_mode].insn_code != CODE_FOR_nothing
      && (optab_table[OTI_ashl])->handlers[(int) word_mode].insn_code != CODE_FOR_nothing
      && (optab_table[OTI_lshr])->handlers[(int) word_mode].insn_code != CODE_FOR_nothing)
    {
      rtx insns, inter, equiv_value;
      rtx into_target, outof_target;
      rtx into_input, outof_input;
      int shift_count, left_shift, outof_word;
      if (target == 0 || target == op0 || target == op1)
 target = gen_reg_rtx (mode);
      start_sequence ();
      shift_count = ((op1)->u.hwint[0]);
      left_shift = binoptab == (optab_table[OTI_ashl]);
      outof_word = left_shift ^ ! 0;
      outof_target = operand_subword (target, outof_word, 1, mode);
      into_target = operand_subword (target, 1 - outof_word, 1, mode);
      outof_input = operand_subword_force (op0, outof_word, mode);
      into_input = operand_subword_force (op0, 1 - outof_word, mode);
      if (shift_count >= (8 * (0 ? 8 : 4)))
 {
   inter = expand_binop (word_mode, binoptab,
          outof_input,
          gen_rtx_CONST_INT (VOIDmode, (long) (shift_count - (8 * (0 ? 8 : 4)))),
          into_target, unsignedp, next_methods);
   if (inter != 0 && inter != into_target)
     emit_move_insn (into_target, inter);
   if (inter != 0 && binoptab != (optab_table[OTI_ashr]))
     inter = (const_tiny_rtx[0][(int) (word_mode)]);
   else if (inter != 0)
     inter = expand_binop (word_mode, binoptab,
      outof_input,
      gen_rtx_CONST_INT (VOIDmode, (long) ((8 * (0 ? 8 : 4)) - 1)),
      outof_target, unsignedp, next_methods);
   if (inter != 0 && inter != outof_target)
     emit_move_insn (outof_target, inter);
 }
      else
 {
   rtx carries;
   optab reverse_unsigned_shift, unsigned_shift;
   reverse_unsigned_shift = (left_shift ? (optab_table[OTI_lshr]) : (optab_table[OTI_ashl]));
   unsigned_shift = (left_shift ? (optab_table[OTI_ashl]) : (optab_table[OTI_lshr]));
   carries = expand_binop (word_mode, reverse_unsigned_shift,
      outof_input,
      gen_rtx_CONST_INT (VOIDmode, (long) ((8 * (0 ? 8 : 4)) - shift_count)),
      0, unsignedp, next_methods);
   if (carries == 0)
     inter = 0;
   else
     inter = expand_binop (word_mode, unsigned_shift, into_input,
      op1, 0, unsignedp, next_methods);
   if (inter != 0)
     inter = expand_binop (word_mode, (optab_table[OTI_ior]), carries, inter,
      into_target, unsignedp, next_methods);
   if (inter != 0 && inter != into_target)
     emit_move_insn (into_target, inter);
   if (inter != 0)
     inter = expand_binop (word_mode, binoptab, outof_input,
      op1, outof_target, unsignedp, next_methods);
   if (inter != 0 && inter != outof_target)
     emit_move_insn (outof_target, inter);
 }
      insns = get_insns ();
      end_sequence ();
      if (inter != 0)
 {
   if (binoptab->code != UNKNOWN)
     equiv_value = gen_rtx_fmt_ee (binoptab->code, mode, op0, op1);
   else
     equiv_value = 0;
   emit_no_conflict_block (insns, target, op0, op1, equiv_value);
   return target;
 }
    }
  if ((binoptab == (optab_table[OTI_rotl]) || binoptab == (optab_table[OTI_rotr]))
      && class == MODE_INT
      && ((enum rtx_code) (op1)->code) == CONST_INT
      && ((unsigned short) mode_size[mode]) == 2 * (0 ? 8 : 4)
      && (optab_table[OTI_ashl])->handlers[(int) word_mode].insn_code != CODE_FOR_nothing
      && (optab_table[OTI_lshr])->handlers[(int) word_mode].insn_code != CODE_FOR_nothing)
    {
      rtx insns, equiv_value;
      rtx into_target, outof_target;
      rtx into_input, outof_input;
      rtx inter;
      int shift_count, left_shift, outof_word;
      if (target == 0 || target == op0 || target == op1 || ! (((enum rtx_code) (target)->code) == REG))
 target = gen_reg_rtx (mode);
      start_sequence ();
      shift_count = ((op1)->u.hwint[0]);
      left_shift = (binoptab == (optab_table[OTI_rotl]));
      outof_word = left_shift ^ ! 0;
      outof_target = operand_subword (target, outof_word, 1, mode);
      into_target = operand_subword (target, 1 - outof_word, 1, mode);
      outof_input = operand_subword_force (op0, outof_word, mode);
      into_input = operand_subword_force (op0, 1 - outof_word, mode);
      if (shift_count == (8 * (0 ? 8 : 4)))
 {
   emit_move_insn (outof_target, into_input);
   emit_move_insn (into_target, outof_input);
   inter = (const_int_rtx[64]);
 }
      else
 {
   rtx into_temp1, into_temp2, outof_temp1, outof_temp2;
   rtx first_shift_count, second_shift_count;
   optab reverse_unsigned_shift, unsigned_shift;
   reverse_unsigned_shift = (left_shift ^ (shift_count < (8 * (0 ? 8 : 4)))
        ? (optab_table[OTI_lshr]) : (optab_table[OTI_ashl]));
   unsigned_shift = (left_shift ^ (shift_count < (8 * (0 ? 8 : 4)))
       ? (optab_table[OTI_ashl]) : (optab_table[OTI_lshr]));
   if (shift_count > (8 * (0 ? 8 : 4)))
     {
       first_shift_count = gen_rtx_CONST_INT (VOIDmode, (long) (shift_count - (8 * (0 ? 8 : 4))));
       second_shift_count = gen_rtx_CONST_INT (VOIDmode, (long) (2 * (8 * (0 ? 8 : 4)) - shift_count));
     }
   else
     {
       first_shift_count = gen_rtx_CONST_INT (VOIDmode, (long) ((8 * (0 ? 8 : 4)) - shift_count));
       second_shift_count = gen_rtx_CONST_INT (VOIDmode, (long) (shift_count));
     }
   into_temp1 = expand_binop (word_mode, unsigned_shift,
         outof_input, first_shift_count,
         (rtx) 0, unsignedp, next_methods);
   into_temp2 = expand_binop (word_mode, reverse_unsigned_shift,
         into_input, second_shift_count,
         (rtx) 0, unsignedp, next_methods);
   if (into_temp1 != 0 && into_temp2 != 0)
     inter = expand_binop (word_mode, (optab_table[OTI_ior]), into_temp1, into_temp2,
      into_target, unsignedp, next_methods);
   else
     inter = 0;
   if (inter != 0 && inter != into_target)
     emit_move_insn (into_target, inter);
   outof_temp1 = expand_binop (word_mode, unsigned_shift,
          into_input, first_shift_count,
          (rtx) 0, unsignedp, next_methods);
   outof_temp2 = expand_binop (word_mode, reverse_unsigned_shift,
          outof_input, second_shift_count,
          (rtx) 0, unsignedp, next_methods);
   if (inter != 0 && outof_temp1 != 0 && outof_temp2 != 0)
     inter = expand_binop (word_mode, (optab_table[OTI_ior]),
      outof_temp1, outof_temp2,
      outof_target, unsignedp, next_methods);
   if (inter != 0 && inter != outof_target)
     emit_move_insn (outof_target, inter);
 }
      insns = get_insns ();
      end_sequence ();
      if (inter != 0)
 {
   if (binoptab->code != UNKNOWN)
     equiv_value = gen_rtx_fmt_ee (binoptab->code, mode, op0, op1);
   else
     equiv_value = 0;
   if (shift_count != (8 * (0 ? 8 : 4)))
     emit_no_conflict_block (insns, target, op0, op1, equiv_value);
   else
     emit_insn (insns);
   return target;
 }
    }
  if ((binoptab == (optab_table[OTI_add]) || binoptab == (optab_table[OTI_sub]))
      && class == MODE_INT
      && ((unsigned short) mode_size[mode]) >= 2 * (0 ? 8 : 4)
      && binoptab->handlers[(int) word_mode].insn_code != CODE_FOR_nothing)
    {
      unsigned int i;
      optab otheroptab = binoptab == (optab_table[OTI_add]) ? (optab_table[OTI_sub]) : (optab_table[OTI_add]);
      const unsigned int nwords = ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) / (8 * (0 ? 8 : 4));
      rtx carry_in = (rtx) 0, carry_out = (rtx) 0;
      rtx xop0, xop1, xtarget;
      int normalizep = 1;
      xop0 = force_reg (mode, op0);
      xop1 = force_reg (mode, op1);
      xtarget = gen_reg_rtx (mode);
      if (target == 0 || !(((enum rtx_code) (target)->code) == REG))
 target = xtarget;
      if ((((enum rtx_code) (target)->code) == REG))
 emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (xtarget)));
      for (i = 0; i < nwords; i++)
 {
   int index = (0 ? nwords - i - 1 : i);
   rtx target_piece = operand_subword (xtarget, index, 1, mode);
   rtx op0_piece = operand_subword_force (xop0, index, mode);
   rtx op1_piece = operand_subword_force (xop1, index, mode);
   rtx x;
   x = expand_binop (word_mode, binoptab,
       op0_piece, op1_piece,
       target_piece, unsignedp, next_methods);
   if (x == 0)
     break;
   if (i + 1 < nwords)
     {
       carry_out = gen_reg_rtx (word_mode);
       carry_out = emit_store_flag_force (carry_out,
       (binoptab == (optab_table[OTI_add])
        ? LT : GT),
       x, op0_piece,
       word_mode, 1, normalizep);
     }
   if (i > 0)
     {
       rtx newx;
       newx = expand_binop (word_mode,
       normalizep == 1 ? binoptab : otheroptab,
       x, carry_in,
       (rtx) 0, 1, next_methods);
       if (i + 1 < nwords)
  {
    rtx carry_tmp = gen_reg_rtx (word_mode);
    carry_tmp = emit_store_flag_force (carry_tmp,
           (binoptab == (optab_table[OTI_add])
            ? LT : GT),
           newx, x,
           word_mode, 1, normalizep);
    carry_out = expand_binop (word_mode, (optab_table[OTI_ior]),
         carry_out, carry_tmp,
         carry_out, 0, next_methods);
    if (carry_out == 0)
      break;
  }
       emit_move_insn (target_piece, newx);
     }
   carry_in = carry_out;
 }
      if (i == ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) / (unsigned) (8 * (0 ? 8 : 4)))
 {
   if ((optab_table[OTI_mov])->handlers[(int) mode].insn_code != CODE_FOR_nothing
       || ! rtx_equal_p (target, xtarget))
     {
       rtx temp = emit_move_insn (target, xtarget);
       set_unique_reg_note (temp,
       REG_EQUAL,
       gen_rtx_fmt_ee (binoptab->code, mode,
         copy_rtx (xop0),
         copy_rtx (xop1)));
     }
   else
     target = xtarget;
   return target;
 }
      else
 delete_insns_since (last);
    }
  if (binoptab == (optab_table[OTI_smul])
      && class == MODE_INT
      && ((unsigned short) mode_size[mode]) == 2 * (0 ? 8 : 4)
      && (optab_table[OTI_smul])->handlers[(int) word_mode].insn_code != CODE_FOR_nothing
      && (optab_table[OTI_add])->handlers[(int) word_mode].insn_code != CODE_FOR_nothing
      && (((optab_table[OTI_umul_widen])->handlers[(int) mode].insn_code
    != CODE_FOR_nothing)
   || ((optab_table[OTI_smul_widen])->handlers[(int) mode].insn_code
       != CODE_FOR_nothing)))
    {
      int low = (0 ? 1 : 0);
      int high = (0 ? 0 : 1);
      rtx op0_high = operand_subword_force (op0, high, mode);
      rtx op0_low = operand_subword_force (op0, low, mode);
      rtx op1_high = operand_subword_force (op1, high, mode);
      rtx op1_low = operand_subword_force (op1, low, mode);
      rtx product = 0;
      rtx op0_xhigh = (rtx) 0;
      rtx op1_xhigh = (rtx) 0;
      if (target == op0 || target == op1
   || (target != 0 && !(((enum rtx_code) (target)->code) == REG)))
 target = 0;
      if ((optab_table[OTI_umul_widen])->handlers[(int) mode].insn_code != CODE_FOR_nothing)
 {
   product = expand_binop (mode, (optab_table[OTI_umul_widen]), op0_low, op1_low,
      target, 1, OPTAB_DIRECT);
   if (product == 0)
     delete_insns_since (last);
   else
     op0_xhigh = op0_high, op1_xhigh = op1_high;
 }
      if (product == 0
   && (optab_table[OTI_smul_widen])->handlers[(int) mode].insn_code
        != CODE_FOR_nothing)
 {
   rtx wordm1 = gen_rtx_CONST_INT (VOIDmode, (long) ((8 * (0 ? 8 : 4)) - 1));
   product = expand_binop (mode, (optab_table[OTI_smul_widen]), op0_low, op1_low,
      target, 1, OPTAB_DIRECT);
   op0_xhigh = expand_binop (word_mode, (optab_table[OTI_lshr]), op0_low, wordm1,
        (rtx) 0, 1, next_methods);
   if (op0_xhigh)
     op0_xhigh = expand_binop (word_mode, (optab_table[OTI_add]), op0_high,
          op0_xhigh, op0_xhigh, 0, next_methods);
   else
     {
       op0_xhigh = expand_binop (word_mode, (optab_table[OTI_ashr]), op0_low, wordm1,
     (rtx) 0, 0, next_methods);
       if (op0_xhigh)
  op0_xhigh = expand_binop (word_mode, (optab_table[OTI_sub]), op0_high,
       op0_xhigh, op0_xhigh, 0,
       next_methods);
     }
   op1_xhigh = expand_binop (word_mode, (optab_table[OTI_lshr]), op1_low, wordm1,
        (rtx) 0, 1, next_methods);
   if (op1_xhigh)
     op1_xhigh = expand_binop (word_mode, (optab_table[OTI_add]), op1_high,
          op1_xhigh, op1_xhigh, 0, next_methods);
   else
     {
       op1_xhigh = expand_binop (word_mode, (optab_table[OTI_ashr]), op1_low, wordm1,
     (rtx) 0, 0, next_methods);
       if (op1_xhigh)
  op1_xhigh = expand_binop (word_mode, (optab_table[OTI_sub]), op1_high,
       op1_xhigh, op1_xhigh, 0,
       next_methods);
     }
 }
      if (product && op0_xhigh && op1_xhigh)
 {
   rtx product_high = operand_subword (product, high, 1, mode);
   rtx temp = expand_binop (word_mode, binoptab, op0_low, op1_xhigh,
       (rtx) 0, 0, OPTAB_DIRECT);
   if (!(((enum rtx_code) (product_high)->code) == REG))
     product_high = force_reg (word_mode, product_high);
   if (temp != 0)
     temp = expand_binop (word_mode, (optab_table[OTI_add]), temp, product_high,
     product_high, 0, next_methods);
   if (temp != 0 && temp != product_high)
     emit_move_insn (product_high, temp);
   if (temp != 0)
     temp = expand_binop (word_mode, binoptab, op1_low, op0_xhigh,
     (rtx) 0, 0, OPTAB_DIRECT);
   if (temp != 0)
     temp = expand_binop (word_mode, (optab_table[OTI_add]), temp,
     product_high, product_high,
     0, next_methods);
   if (temp != 0 && temp != product_high)
     emit_move_insn (product_high, temp);
   emit_move_insn (operand_subword (product, high, 1, mode), product_high);
   if (temp != 0)
     {
       if ((optab_table[OTI_mov])->handlers[(int) mode].insn_code != CODE_FOR_nothing)
  {
    temp = emit_move_insn (product, product);
    set_unique_reg_note (temp,
           REG_EQUAL,
           gen_rtx_fmt_ee (MULT, mode,
             copy_rtx (op0),
             copy_rtx (op1)));
  }
       return product;
     }
 }
      delete_insns_since (last);
    }
  if (class == MODE_VECTOR_INT || class == MODE_VECTOR_FLOAT)
    return expand_vector_binop (mode, binoptab, op0, op1, target,
    unsignedp, methods);
  if (class == MODE_COMPLEX_FLOAT || class == MODE_COMPLEX_INT)
    {
      rtx real0 = 0, imag0 = 0;
      rtx real1 = 0, imag1 = 0;
      rtx realr, imagr, res;
      rtx seq, result;
      int ok = 0;
      enum machine_mode submode = mode_inner[mode];
      if (submode == BLKmode)
 abort ();
      start_sequence ();
      if (((enum machine_mode) (op0)->mode) == mode)
 {
   real0 = gen_realpart (submode, op0);
   imag0 = gen_imagpart (submode, op0);
 }
      else
 real0 = op0;
      if (((enum machine_mode) (op1)->mode) == mode)
 {
   real1 = gen_realpart (submode, op1);
   imag1 = gen_imagpart (submode, op1);
 }
      else
 real1 = op1;
      if (real0 == 0 || real1 == 0 || ! (imag0 != 0 || imag1 != 0))
 abort ();
      result = gen_reg_rtx (mode);
      realr = gen_realpart (submode, result);
      imagr = gen_imagpart (submode, result);
      switch (binoptab->code)
 {
 case PLUS:
 case MINUS:
   res = expand_binop (submode, binoptab, real0, real1,
         realr, unsignedp, methods);
   if (res == 0)
     break;
   else if (res != realr)
     emit_move_insn (realr, res);
   if (imag0 != 0 && imag1 != 0)
     res = expand_binop (submode, binoptab, imag0, imag1,
    imagr, unsignedp, methods);
   else if (imag0 != 0)
     res = imag0;
   else if (binoptab->code == MINUS)
            res = expand_unop (submode,
                                binoptab == (optab_table[OTI_subv]) ? (optab_table[OTI_negv]) : (optab_table[OTI_neg]),
                                imag1, imagr, unsignedp);
   else
     res = imag1;
   if (res == 0)
     break;
   else if (res != imagr)
     emit_move_insn (imagr, res);
   ok = 1;
   break;
 case MULT:
   if (imag0 != 0 && imag1 != 0)
     {
       rtx temp1, temp2;
       real0 = force_reg (submode, real0);
       real1 = force_reg (submode, real1);
       imag0 = force_reg (submode, imag0);
       imag1 = force_reg (submode, imag1);
       temp1 = expand_binop (submode, binoptab, real0, real1, (rtx) 0,
        unsignedp, methods);
       temp2 = expand_binop (submode, binoptab, imag0, imag1, (rtx) 0,
        unsignedp, methods);
       if (temp1 == 0 || temp2 == 0)
  break;
       res = (expand_binop
                     (submode,
                      binoptab == (optab_table[OTI_smulv]) ? (optab_table[OTI_subv]) : (optab_table[OTI_sub]),
                      temp1, temp2, realr, unsignedp, methods));
       if (res == 0)
  break;
       else if (res != realr)
  emit_move_insn (realr, res);
       temp1 = expand_binop (submode, binoptab, real0, imag1,
        (rtx) 0, unsignedp, methods);
       if (rtx_equal_p (real0, real1) && rtx_equal_p (imag0, imag1))
  temp2 = temp1;
       else
  temp2 = expand_binop (submode, binoptab, real1, imag0,
          (rtx) 0, unsignedp, methods);
       if (temp1 == 0 || temp2 == 0)
  break;
       res = (expand_binop
                     (submode,
                      binoptab == (optab_table[OTI_smulv]) ? (optab_table[OTI_addv]) : (optab_table[OTI_add]),
                      temp1, temp2, imagr, unsignedp, methods));
       if (res == 0)
  break;
       else if (res != imagr)
  emit_move_insn (imagr, res);
       ok = 1;
     }
   else
     {
       real0 = force_reg (submode, real0);
       real1 = force_reg (submode, real1);
       res = expand_binop (submode, binoptab, real0, real1,
      realr, unsignedp, methods);
       if (res == 0)
  break;
       else if (res != realr)
  emit_move_insn (realr, res);
       if (imag0 != 0)
  res = expand_binop (submode, binoptab,
        real1, imag0, imagr, unsignedp, methods);
       else
  res = expand_binop (submode, binoptab,
        real0, imag1, imagr, unsignedp, methods);
       if (res == 0)
  break;
       else if (res != imagr)
  emit_move_insn (imagr, res);
       ok = 1;
     }
   break;
 case DIV:
   if (imag1 == 0)
     {
       real1 = force_reg (submode, real1);
       if (class == MODE_COMPLEX_FLOAT)
  res = expand_binop (submode, binoptab, real0, real1,
        realr, unsignedp, methods);
       else
  res = expand_divmod (0, TRUNC_DIV_EXPR, submode,
         real0, real1, realr, unsignedp);
       if (res == 0)
  break;
       else if (res != realr)
  emit_move_insn (realr, res);
       if (class == MODE_COMPLEX_FLOAT)
  res = expand_binop (submode, binoptab, imag0, real1,
        imagr, unsignedp, methods);
       else
  res = expand_divmod (0, TRUNC_DIV_EXPR, submode,
         imag0, real1, imagr, unsignedp);
       if (res == 0)
  break;
       else if (res != imagr)
  emit_move_insn (imagr, res);
       ok = 1;
     }
   else
     {
       switch (flag_complex_divide_method)
  {
  case 0:
    ok = expand_cmplxdiv_straight (real0, real1, imag0, imag1,
       realr, imagr, submode,
       unsignedp, methods,
       class, binoptab);
    break;
  case 1:
    ok = expand_cmplxdiv_wide (real0, real1, imag0, imag1,
          realr, imagr, submode,
          unsignedp, methods,
          class, binoptab);
    break;
  default:
    abort ();
  }
     }
   break;
 default:
   abort ();
 }
      seq = get_insns ();
      end_sequence ();
      if (ok)
 {
   rtx equiv = gen_rtx_fmt_ee (binoptab->code, mode,
          copy_rtx (op0), copy_rtx (op1));
   emit_no_conflict_block (seq, result, op0, op1, equiv);
   return result;
 }
    }
  if (binoptab->handlers[(int) mode].libfunc
      && (methods == OPTAB_LIB || methods == OPTAB_LIB_WIDEN))
    {
      rtx insns;
      rtx op1x = op1;
      enum machine_mode op1_mode = mode;
      rtx value1;
      start_sequence ();
      if (shift_op)
 {
   op1_mode = word_mode;
   op1x = convert_to_mode (word_mode, op1, 1);
 }
      if (((enum machine_mode) (op0)->mode) != VOIDmode
   && ((enum machine_mode) (op0)->mode) != mode)
 op0 = convert_to_mode (mode, op0, unsignedp);
      value1 = emit_library_call_value (binoptab->handlers[(int) mode].libfunc,
           (rtx) 0, LCT_CONST, mode, 2,
           op0, mode, op1x, op1_mode);
      insns = get_insns ();
      end_sequence ();
      target = gen_reg_rtx (mode);
      emit_libcall_block (insns, target, value1,
     gen_rtx_fmt_ee (binoptab->code, mode, op0, op1));
      return target;
    }
  delete_insns_since (last);
  if (! (methods == OPTAB_WIDEN || methods == OPTAB_LIB_WIDEN
  || methods == OPTAB_MUST_WIDEN))
    {
      delete_insns_since (entry_last);
      return 0;
    }
  methods = (methods == OPTAB_LIB_WIDEN ? OPTAB_LIB : OPTAB_DIRECT);
  if (class == MODE_INT || class == MODE_FLOAT || class == MODE_COMPLEX_FLOAT)
    {
      for (wider_mode = mode_wider[mode]; wider_mode != VOIDmode;
    wider_mode = mode_wider[wider_mode])
 {
   if ((binoptab->handlers[(int) wider_mode].insn_code
        != CODE_FOR_nothing)
       || (methods == OPTAB_LIB
    && binoptab->handlers[(int) wider_mode].libfunc))
     {
       rtx xop0 = op0, xop1 = op1;
       int no_extend = 0;
       if ((binoptab == (optab_table[OTI_ior]) || binoptab == (optab_table[OTI_and])
     || binoptab == (optab_table[OTI_xor])
     || binoptab == (optab_table[OTI_add]) || binoptab == (optab_table[OTI_sub])
     || binoptab == (optab_table[OTI_smul]) || binoptab == (optab_table[OTI_ashl]))
    && class == MODE_INT)
  no_extend = 1;
       xop0 = widen_operand (xop0, wider_mode, mode,
        unsignedp, no_extend);
       xop1 = widen_operand (xop1, wider_mode, mode, unsignedp,
        no_extend && binoptab != (optab_table[OTI_ashl]));
       temp = expand_binop (wider_mode, binoptab, xop0, xop1, (rtx) 0,
       unsignedp, methods);
       if (temp)
  {
    if (class != MODE_INT)
      {
        if (target == 0)
   target = gen_reg_rtx (mode);
        convert_move (target, temp, 0);
        return target;
      }
    else
      return rtl_hooks.gen_lowpart (mode, temp);
  }
       else
  delete_insns_since (last);
     }
 }
    }
  delete_insns_since (entry_last);
  return 0;
}
static rtx
expand_vector_binop (enum machine_mode mode, optab binoptab, rtx op0,
       rtx op1, rtx target, int unsignedp,
       enum optab_methods methods)
{
  enum machine_mode submode, tmode;
  int size, elts, subsize, subbitsize, i;
  rtx t, a, b, res, seq;
  enum mode_class class;
  class = mode_class[mode];
  size = ((unsigned short) mode_size[mode]);
  submode = mode_inner[mode];
  for (tmode = class_narrowest_mode[class];
       ((unsigned short) mode_size[tmode]) < ((unsigned short) mode_size[mode]);
       tmode = mode_wider[tmode])
    {
      if (mode_inner[tmode] == mode_inner[mode]
   && binoptab->handlers[(int) tmode].insn_code != CODE_FOR_nothing)
 submode = tmode;
    }
  switch (binoptab->code)
    {
    case AND:
    case IOR:
    case XOR:
      tmode = int_mode_for_mode (mode);
      if (tmode != BLKmode)
 submode = tmode;
    case PLUS:
    case MINUS:
    case MULT:
    case DIV:
      subsize = ((unsigned short) mode_size[submode]);
      subbitsize = ((unsigned short) (((unsigned short) mode_size[submode]) * 8));
      elts = size / subsize;
      if (subsize == (mode_inner[mode] == VOIDmode ? ((unsigned short) mode_size[mode]) : ((unsigned short) mode_size[mode_inner[mode]])) && methods == OPTAB_DIRECT)
 return 0;
      start_sequence ();
      if (((enum machine_mode) (op0)->mode) != mode)
 op0 = copy_to_mode_reg (mode, op0);
      if (((enum machine_mode) (op1)->mode) != mode)
 op1 = copy_to_mode_reg (mode, op1);
      if (!target)
 target = gen_reg_rtx (mode);
      for (i = 0; i < elts; ++i)
 {
   if ((((enum rtx_code) (target)->code) == REG)
       && (0
    ? subsize < (0 ? 8 : 4)
    : ((i * subsize) % (0 ? 8 : 4)) != 0))
     t = (rtx) 0;
   else
     t = simplify_gen_subreg (submode, target, mode, i * subsize);
   if (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
     a = simplify_gen_subreg (submode, op0, mode, i * subsize);
   else
     a = extract_bit_field (op0, subbitsize, i * subbitsize, unsignedp,
       (rtx) 0, submode, submode, size);
   if (((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op1)->code) == CONST_VECTOR))
     b = simplify_gen_subreg (submode, op1, mode, i * subsize);
   else
     b = extract_bit_field (op1, subbitsize, i * subbitsize, unsignedp,
       (rtx) 0, submode, submode, size);
   if (binoptab->code == DIV)
     {
       if (class == MODE_VECTOR_FLOAT)
  res = expand_binop (submode, binoptab, a, b, t,
        unsignedp, methods);
       else
  res = expand_divmod (0, TRUNC_DIV_EXPR, submode,
         a, b, t, unsignedp);
     }
   else
     res = expand_binop (submode, binoptab, a, b, t,
    unsignedp, methods);
   if (res == 0)
     break;
   if (t)
     emit_move_insn (t, res);
   else
     store_bit_field (target, subbitsize, i * subbitsize, submode, res,
        size);
 }
      break;
    default:
      abort ();
    }
  seq = get_insns ();
  end_sequence ();
  emit_insn (seq);
  return target;
}
static rtx
expand_vector_unop (enum machine_mode mode, optab unoptab, rtx op0,
      rtx target, int unsignedp)
{
  enum machine_mode submode, tmode;
  int size, elts, subsize, subbitsize, i;
  rtx t, a, res, seq;
  size = ((unsigned short) mode_size[mode]);
  submode = mode_inner[mode];
  for (tmode = class_narrowest_mode[mode_class[mode]];
       ((unsigned short) mode_size[tmode]) < ((unsigned short) mode_size[mode]);
       tmode = mode_wider[tmode])
    {
      if (mode_inner[tmode] == mode_inner[mode]
   && unoptab->handlers[(int) tmode].insn_code != CODE_FOR_nothing)
 submode = tmode;
    }
  if (unoptab == (optab_table[OTI_neg]) && mode_class[submode] == MODE_INT
      && ((enum machine_mode) (op0)->mode) == mode)
    {
      rtx temp;
      temp = expand_binop (mode, (optab_table[OTI_sub]), (const_tiny_rtx[0][(int) (mode)]), op0,
                           target, unsignedp, OPTAB_DIRECT);
      if (temp)
 return temp;
    }
  if (unoptab == (optab_table[OTI_one_cmpl]))
    {
      tmode = int_mode_for_mode (mode);
      if (tmode != BLKmode)
 submode = tmode;
    }
  subsize = ((unsigned short) mode_size[submode]);
  subbitsize = ((unsigned short) (((unsigned short) mode_size[submode]) * 8));
  elts = size / subsize;
  if (((enum machine_mode) (op0)->mode) != mode)
    op0 = copy_to_mode_reg (mode, op0);
  if (!target)
    target = gen_reg_rtx (mode);
  start_sequence ();
  for (i = 0; i < elts; ++i)
    {
      if ((((enum rtx_code) (target)->code) == REG)
   && (0
       ? subsize < (0 ? 8 : 4)
       : ((i * subsize) % (0 ? 8 : 4)) != 0))
 t = (rtx) 0;
      else
 t = simplify_gen_subreg (submode, target, mode, i * subsize);
      if (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR))
 a = simplify_gen_subreg (submode, op0, mode, i * subsize);
      else
 a = extract_bit_field (op0, subbitsize, i * subbitsize, unsignedp,
          t, submode, submode, size);
      res = expand_unop (submode, unoptab, a, t, unsignedp);
      if (t)
 emit_move_insn (t, res);
      else
 store_bit_field (target, subbitsize, i * subbitsize, submode, res,
    size);
    }
  seq = get_insns ();
  end_sequence ();
  emit_insn (seq);
  return target;
}
rtx
sign_expand_binop (enum machine_mode mode, optab uoptab, optab soptab,
     rtx op0, rtx op1, rtx target, int unsignedp,
     enum optab_methods methods)
{
  rtx temp;
  optab direct_optab = unsignedp ? uoptab : soptab;
  struct optab wide_soptab;
  temp = expand_binop (mode, direct_optab, op0, op1, target,
         unsignedp, OPTAB_DIRECT);
  if (temp || methods == OPTAB_DIRECT)
    return temp;
  wide_soptab = *soptab;
  wide_soptab.handlers[(int) mode].insn_code = CODE_FOR_nothing;
  wide_soptab.handlers[(int) mode].libfunc = 0;
  temp = expand_binop (mode, &wide_soptab, op0, op1, target,
         unsignedp, OPTAB_WIDEN);
  if (temp == 0 && unsignedp)
    temp = expand_binop (mode, uoptab, op0, op1, target,
    unsignedp, OPTAB_WIDEN);
  if (temp || methods == OPTAB_WIDEN)
    return temp;
  temp = expand_binop (mode, direct_optab, op0, op1, target, unsignedp, OPTAB_LIB);
  if (temp || methods == OPTAB_LIB)
    return temp;
  temp = expand_binop (mode, &wide_soptab, op0, op1, target,
         unsignedp, methods);
  if (temp != 0)
    return temp;
  if (unsignedp)
    return expand_binop (mode, uoptab, op0, op1, target,
    unsignedp, methods);
  return 0;
}
int
expand_twoval_unop (optab unoptab, rtx op0, rtx targ0, rtx targ1,
      int unsignedp)
{
  enum machine_mode mode = ((enum machine_mode) (targ0 ? targ0 : targ1)->mode);
  enum mode_class class;
  enum machine_mode wider_mode;
  rtx entry_last = get_last_insn ();
  rtx last;
  class = mode_class[mode];
  op0 = protect_from_queue (op0, 0);
  if (flag_force_mem)
    {
      op0 = force_not_mem (op0);
    }
  if (targ0)
    targ0 = protect_from_queue (targ0, 1);
  else
    targ0 = gen_reg_rtx (mode);
  if (targ1)
    targ1 = protect_from_queue (targ1, 1);
  else
    targ1 = gen_reg_rtx (mode);
  last = get_last_insn ();
  if (unoptab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
    {
      int icode = (int) unoptab->handlers[(int) mode].insn_code;
      enum machine_mode mode0 = insn_data[icode].operand[2].mode;
      rtx pat;
      rtx xop0 = op0;
      if (((enum machine_mode) (xop0)->mode) != VOIDmode
   && ((enum machine_mode) (xop0)->mode) != mode0)
 xop0 = convert_to_mode (mode0, xop0, unsignedp);
      if (! (*insn_data[icode].operand[2].predicate) (xop0, mode0))
 xop0 = copy_to_mode_reg (mode0, xop0);
      if (! (*insn_data[icode].operand[0].predicate) (targ0, mode)
   || ! (*insn_data[icode].operand[1].predicate) (targ1, mode))
 abort ();
      pat = (insn_data[icode].genfun) (targ0, targ1, xop0);
      if (pat)
 {
   emit_insn (pat);
   return 1;
 }
      else
 delete_insns_since (last);
    }
  if (class == MODE_INT || class == MODE_FLOAT || class == MODE_COMPLEX_FLOAT)
    {
      for (wider_mode = mode_wider[mode]; wider_mode != VOIDmode;
    wider_mode = mode_wider[wider_mode])
 {
   if (unoptab->handlers[(int) wider_mode].insn_code
       != CODE_FOR_nothing)
     {
       rtx t0 = gen_reg_rtx (wider_mode);
       rtx t1 = gen_reg_rtx (wider_mode);
       rtx cop0 = convert_modes (wider_mode, mode, op0, unsignedp);
       if (expand_twoval_unop (unoptab, cop0, t0, t1, unsignedp))
  {
    convert_move (targ0, t0, unsignedp);
    convert_move (targ1, t1, unsignedp);
    return 1;
  }
       else
  delete_insns_since (last);
     }
 }
    }
  delete_insns_since (entry_last);
  return 0;
}
int
expand_twoval_binop (optab binoptab, rtx op0, rtx op1, rtx targ0, rtx targ1,
       int unsignedp)
{
  enum machine_mode mode = ((enum machine_mode) (targ0 ? targ0 : targ1)->mode);
  enum mode_class class;
  enum machine_mode wider_mode;
  rtx entry_last = get_last_insn ();
  rtx last;
  class = mode_class[mode];
  op0 = protect_from_queue (op0, 0);
  op1 = protect_from_queue (op1, 0);
  if (flag_force_mem)
    {
      op0 = force_not_mem (op0);
      op1 = force_not_mem (op1);
    }
  if (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR) && preserve_subexpressions_p ()
      && rtx_cost (op0, binoptab->code) > ((1) * 4))
    op0 = force_reg (mode, op0);
  if (((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op1)->code) == CONST_VECTOR) && preserve_subexpressions_p ()
      && rtx_cost (op1, binoptab->code) > ((1) * 4))
    op1 = force_reg (mode, op1);
  if (targ0)
    targ0 = protect_from_queue (targ0, 1);
  else
    targ0 = gen_reg_rtx (mode);
  if (targ1)
    targ1 = protect_from_queue (targ1, 1);
  else
    targ1 = gen_reg_rtx (mode);
  last = get_last_insn ();
  if (binoptab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
    {
      int icode = (int) binoptab->handlers[(int) mode].insn_code;
      enum machine_mode mode0 = insn_data[icode].operand[1].mode;
      enum machine_mode mode1 = insn_data[icode].operand[2].mode;
      rtx pat;
      rtx xop0 = op0, xop1 = op1;
      if (((enum machine_mode) (op0)->mode) != mode0 && mode0 != VOIDmode)
 xop0 = convert_modes (mode0,
         ((enum machine_mode) (op0)->mode) != VOIDmode
         ? ((enum machine_mode) (op0)->mode)
         : mode,
         xop0, unsignedp);
      if (((enum machine_mode) (op1)->mode) != mode1 && mode1 != VOIDmode)
 xop1 = convert_modes (mode1,
         ((enum machine_mode) (op1)->mode) != VOIDmode
         ? ((enum machine_mode) (op1)->mode)
         : mode,
         xop1, unsignedp);
      if (! (*insn_data[icode].operand[1].predicate) (xop0, mode0))
 xop0 = copy_to_mode_reg (mode0, xop0);
      if (! (*insn_data[icode].operand[2].predicate) (xop1, mode1))
 xop1 = copy_to_mode_reg (mode1, xop1);
      if (! (*insn_data[icode].operand[0].predicate) (targ0, mode)
   || ! (*insn_data[icode].operand[3].predicate) (targ1, mode))
 abort ();
      pat = (insn_data[icode].genfun) (targ0, xop0, xop1, targ1);
      if (pat)
 {
   emit_insn (pat);
   return 1;
 }
      else
 delete_insns_since (last);
    }
  if (class == MODE_INT || class == MODE_FLOAT || class == MODE_COMPLEX_FLOAT)
    {
      for (wider_mode = mode_wider[mode]; wider_mode != VOIDmode;
    wider_mode = mode_wider[wider_mode])
 {
   if (binoptab->handlers[(int) wider_mode].insn_code
       != CODE_FOR_nothing)
     {
       rtx t0 = gen_reg_rtx (wider_mode);
       rtx t1 = gen_reg_rtx (wider_mode);
       rtx cop0 = convert_modes (wider_mode, mode, op0, unsignedp);
       rtx cop1 = convert_modes (wider_mode, mode, op1, unsignedp);
       if (expand_twoval_binop (binoptab, cop0, cop1,
           t0, t1, unsignedp))
  {
    convert_move (targ0, t0, unsignedp);
    convert_move (targ1, t1, unsignedp);
    return 1;
  }
       else
  delete_insns_since (last);
     }
 }
    }
  delete_insns_since (entry_last);
  return 0;
}
rtx
expand_simple_unop (enum machine_mode mode, enum rtx_code code, rtx op0,
      rtx target, int unsignedp)
{
  optab unop = code_to_optab[(int) code];
  if (unop == 0)
    abort ();
  return expand_unop (mode, unop, op0, target, unsignedp);
}
static rtx
widen_clz (enum machine_mode mode, rtx op0, rtx target)
{
  enum mode_class class = mode_class[mode];
  if (class == MODE_INT || class == MODE_FLOAT || class == MODE_COMPLEX_FLOAT)
    {
      enum machine_mode wider_mode;
      for (wider_mode = mode_wider[mode]; wider_mode != VOIDmode;
    wider_mode = mode_wider[wider_mode])
 {
   if ((optab_table[OTI_clz])->handlers[(int) wider_mode].insn_code
       != CODE_FOR_nothing)
     {
       rtx xop0, temp, last;
       last = get_last_insn ();
       if (target == 0)
  target = gen_reg_rtx (mode);
       xop0 = widen_operand (op0, wider_mode, mode, 1, 0);
       temp = expand_unop (wider_mode, (optab_table[OTI_clz]), xop0, (rtx) 0, 1);
       if (temp != 0)
  temp = expand_binop (wider_mode, (optab_table[OTI_sub]), temp,
         gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) (((unsigned short) mode_size[wider_mode]) * 8)) - ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))
                                     ,
         target, 1, OPTAB_DIRECT);
       if (temp == 0)
  delete_insns_since (last);
       return temp;
     }
 }
    }
  return 0;
}
static rtx
expand_parity (enum machine_mode mode, rtx op0, rtx target)
{
  enum mode_class class = mode_class[mode];
  if (class == MODE_INT || class == MODE_FLOAT || class == MODE_COMPLEX_FLOAT)
    {
      enum machine_mode wider_mode;
      for (wider_mode = mode; wider_mode != VOIDmode;
    wider_mode = mode_wider[wider_mode])
 {
   if ((optab_table[OTI_popcount])->handlers[(int) wider_mode].insn_code
       != CODE_FOR_nothing)
     {
       rtx xop0, temp, last;
       last = get_last_insn ();
       if (target == 0)
  target = gen_reg_rtx (mode);
       xop0 = widen_operand (op0, wider_mode, mode, 1, 0);
       temp = expand_unop (wider_mode, (optab_table[OTI_popcount]), xop0, (rtx) 0,
      1);
       if (temp != 0)
  temp = expand_binop (wider_mode, (optab_table[OTI_and]), temp, (const_int_rtx[64 +1]),
         target, 1, OPTAB_DIRECT);
       if (temp == 0)
  delete_insns_since (last);
       return temp;
     }
 }
    }
  return 0;
}
rtx
expand_unop (enum machine_mode mode, optab unoptab, rtx op0, rtx target,
      int unsignedp)
{
  enum mode_class class;
  enum machine_mode wider_mode;
  rtx temp;
  rtx last = get_last_insn ();
  rtx pat;
  class = mode_class[mode];
  op0 = protect_from_queue (op0, 0);
  if (flag_force_mem)
    {
      op0 = force_not_mem (op0);
    }
  if (target)
    target = protect_from_queue (target, 1);
  if (unoptab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
    {
      int icode = (int) unoptab->handlers[(int) mode].insn_code;
      enum machine_mode mode0 = insn_data[icode].operand[1].mode;
      rtx xop0 = op0;
      if (target)
 temp = target;
      else
 temp = gen_reg_rtx (mode);
      if (((enum machine_mode) (xop0)->mode) != VOIDmode
   && ((enum machine_mode) (xop0)->mode) != mode0)
 xop0 = convert_to_mode (mode0, xop0, unsignedp);
      if (! (*insn_data[icode].operand[1].predicate) (xop0, mode0))
 xop0 = copy_to_mode_reg (mode0, xop0);
      if (! (*insn_data[icode].operand[0].predicate) (temp, mode))
 temp = gen_reg_rtx (mode);
      pat = (insn_data[icode].genfun) (temp, xop0);
      if (pat)
 {
   if (((((enum rtx_code) (pat)->code) == INSN) || (((enum rtx_code) (pat)->code) == JUMP_INSN) || (((enum rtx_code) (pat)->code) == CALL_INSN)) && (((pat)->u.fld[2]).rtx1) != (rtx) 0
       && ! add_equal_note (pat, temp, unoptab->code, xop0, (rtx) 0))
     {
       delete_insns_since (last);
       return expand_unop (mode, unoptab, op0, (rtx) 0, unsignedp);
     }
   emit_insn (pat);
   return temp;
 }
      else
 delete_insns_since (last);
    }
  if (unoptab == (optab_table[OTI_clz]))
    {
      temp = widen_clz (mode, op0, target);
      if (temp)
 return temp;
      else
 goto try_libcall;
    }
  if (class == MODE_INT || class == MODE_FLOAT || class == MODE_COMPLEX_FLOAT)
    for (wider_mode = mode_wider[mode]; wider_mode != VOIDmode;
  wider_mode = mode_wider[wider_mode])
      {
 if (unoptab->handlers[(int) wider_mode].insn_code != CODE_FOR_nothing)
   {
     rtx xop0 = op0;
     xop0 = widen_operand (xop0, wider_mode, mode, unsignedp,
      (unoptab == (optab_table[OTI_neg])
       || unoptab == (optab_table[OTI_one_cmpl]))
      && class == MODE_INT);
     temp = expand_unop (wider_mode, unoptab, xop0, (rtx) 0,
    unsignedp);
     if (temp)
       {
  if (class != MODE_INT)
    {
      if (target == 0)
        target = gen_reg_rtx (mode);
      convert_move (target, temp, 0);
      return target;
    }
  else
    return rtl_hooks.gen_lowpart (mode, temp);
       }
     else
       delete_insns_since (last);
   }
      }
  if (unoptab == (optab_table[OTI_one_cmpl])
      && class == MODE_INT
      && ((unsigned short) mode_size[mode]) > (0 ? 8 : 4)
      && unoptab->handlers[(int) word_mode].insn_code != CODE_FOR_nothing)
    {
      int i;
      rtx insns;
      if (target == 0 || target == op0)
 target = gen_reg_rtx (mode);
      start_sequence ();
      for (i = 0; i < ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) / (8 * (0 ? 8 : 4)); i++)
 {
   rtx target_piece = operand_subword (target, i, 1, mode);
   rtx x = expand_unop (word_mode, unoptab,
          operand_subword_force (op0, i, mode),
          target_piece, unsignedp);
   if (target_piece != x)
     emit_move_insn (target_piece, x);
 }
      insns = get_insns ();
      end_sequence ();
      emit_no_conflict_block (insns, target, op0, (rtx) 0,
         gen_rtx_fmt_e (unoptab->code, mode,
          copy_rtx (op0)));
      return target;
    }
  else if (unoptab->code == NEG
    && (class == MODE_COMPLEX_FLOAT || class == MODE_COMPLEX_INT))
    {
      rtx target_piece;
      rtx x;
      rtx seq;
      enum machine_mode submode = mode_inner[mode];
      if (submode == BLKmode)
 abort ();
      if (target == 0)
 target = gen_reg_rtx (mode);
      start_sequence ();
      target_piece = gen_imagpart (submode, target);
      x = expand_unop (submode, unoptab,
         gen_imagpart (submode, op0),
         target_piece, unsignedp);
      if (target_piece != x)
 emit_move_insn (target_piece, x);
      target_piece = gen_realpart (submode, target);
      x = expand_unop (submode, unoptab,
         gen_realpart (submode, op0),
         target_piece, unsignedp);
      if (target_piece != x)
 emit_move_insn (target_piece, x);
      seq = get_insns ();
      end_sequence ();
      emit_no_conflict_block (seq, target, op0, 0,
         gen_rtx_fmt_e (unoptab->code, mode,
          copy_rtx (op0)));
      return target;
    }
  if (unoptab->code == NEG && class == MODE_FLOAT
      && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= 2 * (8 * 4))
    {
      const struct real_format *fmt = (real_format_for_mode[(mode) - MIN_MODE_FLOAT]);
      enum machine_mode imode = int_mode_for_mode (mode);
      int bitpos = (fmt != 0) ? fmt->signbit : -1;
      if (imode != BLKmode && bitpos >= 0 && fmt->has_signed_zero)
 {
   long hi, lo;
   rtx last = get_last_insn ();
   if (0 != 0)
     {
       int nwords = ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) / (8 * (0 ? 8 : 4));
       int word = nwords - (bitpos / (8 * (0 ? 8 : 4))) - 1;
       bitpos = word * (8 * (0 ? 8 : 4)) + bitpos % (8 * (0 ? 8 : 4));
     }
   if (bitpos < (8 * 4))
     {
       hi = 0;
       lo = (long) 1 << bitpos;
     }
   else
     {
       hi = (long) 1 << (bitpos - (8 * 4));
       lo = 0;
     }
   temp = expand_binop (imode, (optab_table[OTI_xor]),
          rtl_hooks.gen_lowpart (imode, op0),
          immed_double_const (lo, hi, imode),
          (rtx) 0, 1, OPTAB_LIB_WIDEN);
   if (temp != 0)
     {
       rtx insn;
       if (target == 0)
  target = gen_reg_rtx (mode);
       insn = emit_move_insn (target, rtl_hooks.gen_lowpart (mode, temp));
       set_unique_reg_note (insn, REG_EQUAL,
       gen_rtx_fmt_e (NEG, mode,
        copy_rtx (op0)));
       return target;
     }
   delete_insns_since (last);
        }
    }
  if (unoptab == (optab_table[OTI_parity]))
    {
      temp = expand_parity (mode, op0, target);
      if (temp)
 return temp;
    }
  if (unoptab == (optab_table[OTI_neg]) && class == MODE_INT)
    {
      temp = expand_binop (mode, (optab_table[OTI_sub]), (const_tiny_rtx[0][(int) (mode)]), op0,
                           target, unsignedp, OPTAB_DIRECT);
      if (temp)
 return temp;
    }
 try_libcall:
  if (unoptab->handlers[(int) mode].libfunc)
    {
      rtx insns;
      rtx value1;
      enum machine_mode outmode = mode;
      if (unoptab == (optab_table[OTI_ffs]) || unoptab == (optab_table[OTI_clz]) || unoptab == (optab_table[OTI_ctz])
   || unoptab == (optab_table[OTI_popcount]) || unoptab == (optab_table[OTI_parity]))
 outmode
     = ((enum machine_mode) (hard_libcall_value (((integer_types[itk_int])->type.mode)))->mode);
      start_sequence ();
      value1 = emit_library_call_value (unoptab->handlers[(int) mode].libfunc,
           (rtx) 0, LCT_CONST, outmode,
           1, op0, mode);
      insns = get_insns ();
      end_sequence ();
      target = gen_reg_rtx (outmode);
      emit_libcall_block (insns, target, value1,
     gen_rtx_fmt_e (unoptab->code, mode, op0));
      return target;
    }
  if (class == MODE_VECTOR_FLOAT || class == MODE_VECTOR_INT)
    return expand_vector_unop (mode, unoptab, op0, target, unsignedp);
  if (class == MODE_INT || class == MODE_FLOAT || class == MODE_COMPLEX_FLOAT)
    {
      for (wider_mode = mode_wider[mode]; wider_mode != VOIDmode;
    wider_mode = mode_wider[wider_mode])
 {
   if ((unoptab->handlers[(int) wider_mode].insn_code
        != CODE_FOR_nothing)
       || unoptab->handlers[(int) wider_mode].libfunc)
     {
       rtx xop0 = op0;
       xop0 = widen_operand (xop0, wider_mode, mode, unsignedp,
        (unoptab == (optab_table[OTI_neg])
         || unoptab == (optab_table[OTI_one_cmpl]))
        && class == MODE_INT);
       temp = expand_unop (wider_mode, unoptab, xop0, (rtx) 0,
      unsignedp);
       if (unoptab == (optab_table[OTI_clz]) && temp != 0)
  temp = expand_binop (wider_mode, (optab_table[OTI_sub]), temp,
         gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) (((unsigned short) mode_size[wider_mode]) * 8)) - ((unsigned short) (((unsigned short) mode_size[mode]) * 8))))
                                     ,
         target, 1, OPTAB_DIRECT);
       if (temp)
  {
    if (class != MODE_INT)
      {
        if (target == 0)
   target = gen_reg_rtx (mode);
        convert_move (target, temp, 0);
        return target;
      }
    else
      return rtl_hooks.gen_lowpart (mode, temp);
  }
       else
  delete_insns_since (last);
     }
 }
    }
  if (unoptab->code == NEG)
    {
      rtx temp;
      temp = expand_binop (mode,
                           unoptab == (optab_table[OTI_negv]) ? (optab_table[OTI_subv]) : (optab_table[OTI_sub]),
                           (const_tiny_rtx[0][(int) (mode)]), op0,
                           target, unsignedp, OPTAB_LIB_WIDEN);
      if (temp)
 return temp;
    }
  return 0;
}
rtx
expand_abs_nojump (enum machine_mode mode, rtx op0, rtx target,
     int result_unsignedp)
{
  rtx temp;
  if (! flag_trapv)
    result_unsignedp = 1;
  temp = expand_unop (mode, result_unsignedp ? (optab_table[OTI_abs]) : (optab_table[OTI_absv]),
                      op0, target, 0);
  if (temp != 0)
    return temp;
  if (mode_class[mode] == MODE_FLOAT
      && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= 2 * (8 * 4))
    {
      const struct real_format *fmt = (real_format_for_mode[(mode) - MIN_MODE_FLOAT]);
      enum machine_mode imode = int_mode_for_mode (mode);
      int bitpos = (fmt != 0) ? fmt->signbit : -1;
      if (imode != BLKmode && bitpos >= 0)
 {
   long hi, lo;
   rtx last = get_last_insn ();
   if (0 != 0)
     {
       int nwords = ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) / (8 * (0 ? 8 : 4));
       int word = nwords - (bitpos / (8 * (0 ? 8 : 4))) - 1;
       bitpos = word * (8 * (0 ? 8 : 4)) + bitpos % (8 * (0 ? 8 : 4));
     }
   if (bitpos < (8 * 4))
     {
       hi = 0;
       lo = (long) 1 << bitpos;
     }
   else
     {
       hi = (long) 1 << (bitpos - (8 * 4));
       lo = 0;
     }
   temp = expand_binop (imode, (optab_table[OTI_and]),
          rtl_hooks.gen_lowpart (imode, op0),
          immed_double_const (~lo, ~hi, imode),
          (rtx) 0, 1, OPTAB_LIB_WIDEN);
   if (temp != 0)
     {
       rtx insn;
       if (target == 0)
  target = gen_reg_rtx (mode);
       insn = emit_move_insn (target, rtl_hooks.gen_lowpart (mode, temp));
       set_unique_reg_note (insn, REG_EQUAL,
       gen_rtx_fmt_e (ABS, mode,
        copy_rtx (op0)));
       return target;
     }
   delete_insns_since (last);
 }
    }
  if ((optab_table[OTI_smax])->handlers[(int) mode].insn_code != CODE_FOR_nothing)
    {
      rtx last = get_last_insn ();
      temp = expand_unop (mode, (optab_table[OTI_neg]), op0, (rtx) 0, 0);
      if (temp != 0)
 temp = expand_binop (mode, (optab_table[OTI_smax]), op0, temp, target, 0,
        OPTAB_WIDEN);
      if (temp != 0)
 return temp;
      delete_insns_since (last);
    }
  if (mode_class[mode] == MODE_INT && ix86_branch_cost >= 2)
    {
      rtx extended = expand_shift (RSHIFT_EXPR, mode, op0,
       size_int_wide ((long) (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1), SIZETYPE),
       (rtx) 0, 0);
      temp = expand_binop (mode, (optab_table[OTI_xor]), extended, op0, target, 0,
      OPTAB_LIB_WIDEN);
      if (temp != 0)
 temp = expand_binop (mode, result_unsignedp ? (optab_table[OTI_sub]) : (optab_table[OTI_subv]),
                             temp, extended, target, 0, OPTAB_LIB_WIDEN);
      if (temp != 0)
 return temp;
    }
  return (rtx) 0;
}
rtx
expand_abs (enum machine_mode mode, rtx op0, rtx target,
     int result_unsignedp, int safe)
{
  rtx temp, op1;
  if (! flag_trapv)
    result_unsignedp = 1;
  temp = expand_abs_nojump (mode, op0, target, result_unsignedp);
  if (temp != 0)
    return temp;
  if (op0 == target && (((enum rtx_code) (op0)->code) == REG)
      && (((op0)->u.fld[0]).rtuint) >= 53)
    safe = 1;
  op1 = gen_label_rtx ();
  if (target == 0 || ! safe
      || ((enum machine_mode) (target)->mode) != mode
      || ((((enum rtx_code) (target)->code) == MEM) && (((target))->volatil))
      || ((((enum rtx_code) (target)->code) == REG)
   && (((target)->u.fld[0]).rtuint) < 53))
    target = gen_reg_rtx (mode);
  emit_move_insn (target, op0);
  ((cfun->expr->x_inhibit_defer_pop) += 1);
  if (mode_class[mode] == MODE_INT
      && ! can_compare_p (GE, mode, ccp_jump))
    do_jump_by_parts_greater_rtx (mode, 0, target, (const_int_rtx[64]),
      (rtx) 0, op1);
  else
    do_compare_rtx_and_jump (target, (const_tiny_rtx[0][(int) (mode)]), GE, 0, mode,
        (rtx) 0, (rtx) 0, op1);
  op0 = expand_unop (mode, result_unsignedp ? (optab_table[OTI_neg]) : (optab_table[OTI_negv]),
                     target, target, 0);
  if (op0 != target)
    emit_move_insn (target, op0);
  emit_label (op1);
  ((cfun->expr->x_inhibit_defer_pop) -= 1);
  return target;
}
rtx
expand_complex_abs (enum machine_mode mode, rtx op0, rtx target,
      int unsignedp)
{
  enum mode_class class = mode_class[mode];
  enum machine_mode wider_mode;
  rtx temp;
  rtx entry_last = get_last_insn ();
  rtx last;
  rtx pat;
  optab this_abs_optab;
  enum machine_mode submode = mode_inner[mode];
  if (submode == BLKmode)
    abort ();
  op0 = protect_from_queue (op0, 0);
  if (flag_force_mem)
    {
      op0 = force_not_mem (op0);
    }
  last = get_last_insn ();
  if (target)
    target = protect_from_queue (target, 1);
  this_abs_optab = ! unsignedp && flag_trapv
                   && (mode_class[mode] == MODE_INT)
                   ? (optab_table[OTI_absv]) : (optab_table[OTI_abs]);
  if (this_abs_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
    {
      int icode = (int) this_abs_optab->handlers[(int) mode].insn_code;
      enum machine_mode mode0 = insn_data[icode].operand[1].mode;
      rtx xop0 = op0;
      if (target)
 temp = target;
      else
 temp = gen_reg_rtx (submode);
      if (((enum machine_mode) (xop0)->mode) != VOIDmode
   && ((enum machine_mode) (xop0)->mode) != mode0)
 xop0 = convert_to_mode (mode0, xop0, unsignedp);
      if (! (*insn_data[icode].operand[1].predicate) (xop0, mode0))
 xop0 = copy_to_mode_reg (mode0, xop0);
      if (! (*insn_data[icode].operand[0].predicate) (temp, submode))
 temp = gen_reg_rtx (submode);
      pat = (insn_data[icode].genfun) (temp, xop0);
      if (pat)
 {
   if (((((enum rtx_code) (pat)->code) == INSN) || (((enum rtx_code) (pat)->code) == JUMP_INSN) || (((enum rtx_code) (pat)->code) == CALL_INSN)) && (((pat)->u.fld[2]).rtx1) != (rtx) 0
       && ! add_equal_note (pat, temp, this_abs_optab->code, xop0,
       (rtx) 0))
     {
       delete_insns_since (last);
       return expand_unop (mode, this_abs_optab, op0, (rtx) 0,
      unsignedp);
     }
   emit_insn (pat);
   return temp;
 }
      else
 delete_insns_since (last);
    }
  for (wider_mode = mode_wider[mode]; wider_mode != VOIDmode;
       wider_mode = mode_wider[wider_mode])
    {
      if (this_abs_optab->handlers[(int) wider_mode].insn_code
   != CODE_FOR_nothing)
 {
   rtx xop0 = op0;
   xop0 = convert_modes (wider_mode, mode, xop0, unsignedp);
   temp = expand_complex_abs (wider_mode, xop0, (rtx) 0, unsignedp);
   if (temp)
     {
       if (class != MODE_COMPLEX_INT)
  {
    if (target == 0)
      target = gen_reg_rtx (submode);
    convert_move (target, temp, 0);
    return target;
  }
       else
  return rtl_hooks.gen_lowpart (submode, temp);
     }
   else
     delete_insns_since (last);
 }
    }
  if ((optab_table[OTI_sqrt])->handlers[(int) submode].insn_code != CODE_FOR_nothing
      && ! flag_trapv)
    {
      rtx real, imag, total;
      real = gen_realpart (submode, op0);
      imag = gen_imagpart (submode, op0);
      real = expand_mult (submode, real, real, (rtx) 0, 0);
      imag = expand_mult (submode, imag, imag, (rtx) 0, 0);
      total = expand_binop (submode, (optab_table[OTI_add]), real, imag, (rtx) 0,
       0, OPTAB_LIB_WIDEN);
      target = expand_unop (submode, (optab_table[OTI_sqrt]), total, target, 0);
      if (target == 0)
 delete_insns_since (last);
      else
 return target;
    }
  if (this_abs_optab->handlers[(int) mode].libfunc)
    {
      rtx insns;
      rtx value1;
      start_sequence ();
      value1 = emit_library_call_value ((optab_table[OTI_abs])->handlers[(int) mode].libfunc,
           (rtx) 0, LCT_CONST, submode, 1, op0, mode);
      insns = get_insns ();
      end_sequence ();
      target = gen_reg_rtx (submode);
      emit_libcall_block (insns, target, value1,
     gen_rtx_fmt_e (this_abs_optab->code, mode, op0));
      return target;
    }
  for (wider_mode = mode_wider[mode]; wider_mode != VOIDmode;
       wider_mode = mode_wider[wider_mode])
    {
      if ((this_abs_optab->handlers[(int) wider_mode].insn_code
    != CODE_FOR_nothing)
   || this_abs_optab->handlers[(int) wider_mode].libfunc)
 {
   rtx xop0 = op0;
   xop0 = convert_modes (wider_mode, mode, xop0, unsignedp);
   temp = expand_complex_abs (wider_mode, xop0, (rtx) 0, unsignedp);
   if (temp)
     {
       if (class != MODE_COMPLEX_INT)
  {
    if (target == 0)
      target = gen_reg_rtx (submode);
    convert_move (target, temp, 0);
    return target;
  }
       else
  return rtl_hooks.gen_lowpart (submode, temp);
     }
   else
     delete_insns_since (last);
 }
    }
  delete_insns_since (entry_last);
  return 0;
}
void
emit_unop_insn (int icode, rtx target, rtx op0, enum rtx_code code)
{
  rtx temp;
  enum machine_mode mode0 = insn_data[icode].operand[1].mode;
  rtx pat;
  temp = target = protect_from_queue (target, 1);
  op0 = protect_from_queue (op0, 0);
  if (flag_force_mem && code != SIGN_EXTEND && code != ZERO_EXTEND)
    op0 = force_not_mem (op0);
  if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
    op0 = copy_to_mode_reg (mode0, op0);
  if (! (*insn_data[icode].operand[0].predicate) (temp, ((enum machine_mode) (temp)->mode))
      || (flag_force_mem && (((enum rtx_code) (temp)->code) == MEM)))
    temp = gen_reg_rtx (((enum machine_mode) (temp)->mode));
  pat = (insn_data[icode].genfun) (temp, op0);
  if (((((enum rtx_code) (pat)->code) == INSN) || (((enum rtx_code) (pat)->code) == JUMP_INSN) || (((enum rtx_code) (pat)->code) == CALL_INSN)) && (((pat)->u.fld[2]).rtx1) != (rtx) 0 && code != UNKNOWN)
    add_equal_note (pat, temp, code, op0, (rtx) 0);
  emit_insn (pat);
  if (temp != target)
    emit_move_insn (target, temp);
}
rtx
emit_no_conflict_block (rtx insns, rtx target, rtx op0, rtx op1, rtx equiv)
{
  rtx prev, next, first, last, insn;
  if (!(((enum rtx_code) (target)->code) == REG) || reload_in_progress)
    return emit_insn (insns);
  else
    for (insn = insns; insn; insn = (((insn)->u.fld[2]).rtx1))
      if (((enum rtx_code) (insn)->code) != INSN
   || find_reg_note (insn, REG_LIBCALL, (rtx) 0))
 return emit_insn (insns);
  for (insn = insns; insn; insn = next)
    {
      rtx set = 0, note;
      int i;
      next = (((insn)->u.fld[2]).rtx1);
      if ((note = find_reg_note (insn, REG_LIBCALL, ((void *)0))) != ((void *)0))
 remove_note (insn, note);
      if ((note = find_reg_note (insn, REG_RETVAL, ((void *)0))) != ((void *)0))
 remove_note (insn, note);
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE
   || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER)
 set = (((insn)->u.fld[5]).rtx1);
      else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL)
 {
   for (i = 0; i < ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem); i++)
     if (((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->code) == SET)
       {
  set = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]);
  break;
       }
 }
      if (set == 0)
 abort ();
      if (! reg_overlap_mentioned_p (target, (((set)->u.fld[0]).rtx1)))
 {
   if ((((insn)->u.fld[1]).rtx1))
     ((((((insn)->u.fld[1]).rtx1))->u.fld[2]).rtx1) = next;
   else
     insns = next;
   if (next)
     (((next)->u.fld[1]).rtx1) = (((insn)->u.fld[1]).rtx1);
   add_insn (insn);
 }
    }
  prev = get_last_insn ();
  if (target != op0 && target != op1)
    emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (target)));
  for (insn = insns; insn; insn = next)
    {
      next = (((insn)->u.fld[2]).rtx1);
      add_insn (insn);
      if (op1 && (((enum rtx_code) (op1)->code) == REG))
 (((insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_NO_CONFLICT), (op1), ((((insn)->u.fld[8]).rtx1)))
                            ;
      if (op0 && (((enum rtx_code) (op0)->code) == REG))
 (((insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_NO_CONFLICT), (op0), ((((insn)->u.fld[8]).rtx1)))
                            ;
    }
  if ((optab_table[OTI_mov])->handlers[(int) ((enum machine_mode) (target)->mode)].insn_code
      != CODE_FOR_nothing)
    {
      last = emit_move_insn (target, target);
      if (equiv)
 set_unique_reg_note (last, REG_EQUAL, equiv);
    }
  else
    {
      last = get_last_insn ();
      remove_note (last, find_reg_note (last, REG_EQUAL, (rtx) 0));
    }
  if (prev == 0)
    first = get_insns ();
  else
    first = (((prev)->u.fld[2]).rtx1);
  (((first)->u.fld[8]).rtx1) = gen_rtx_fmt_ue (INSN_LIST, (REG_LIBCALL), (last), ((((first)->u.fld[8]).rtx1)))
                        ;
  (((last)->u.fld[8]).rtx1) = gen_rtx_fmt_ue (INSN_LIST, (REG_RETVAL), (first), ((((last)->u.fld[8]).rtx1)));
  return last;
}
void
emit_libcall_block (rtx insns, rtx target, rtx result, rtx equiv)
{
  rtx final_dest = target;
  rtx prev, next, first, last, insn;
  if (! (((enum rtx_code) (target)->code) == REG) || (((target))->volatil))
    target = gen_reg_rtx (((enum machine_mode) (target)->mode));
  if (flag_non_call_exceptions && may_trap_p (equiv))
    {
      for (insn = insns; insn; insn = (((insn)->u.fld[2]).rtx1))
 if (((enum rtx_code) (insn)->code) == CALL_INSN)
   {
     rtx note = find_reg_note (insn, REG_EH_REGION, (rtx) 0);
     if (note != 0 && (((((note)->u.fld[0]).rtx1))->u.hwint[0]) <= 0)
       remove_note (insn, note);
   }
    }
  else
    for (insn = insns; insn; insn = (((insn)->u.fld[2]).rtx1))
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 {
   rtx note = find_reg_note (insn, REG_EH_REGION, (rtx) 0);
   if (note != 0)
     (((note)->u.fld[0]).rtx1) = (const_int_rtx[64 -1]);
   else
     (((insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_EH_REGION), ((const_int_rtx[64 -1])), ((((insn)->u.fld[8]).rtx1)))
                         ;
 }
  for (insn = insns; insn; insn = next)
    {
      rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
      rtx note;
      if ((note = find_reg_note (insn, REG_LIBCALL, ((void *)0))) != ((void *)0))
 remove_note (insn, note);
      if ((note = find_reg_note (insn, REG_RETVAL, ((void *)0))) != ((void *)0))
 remove_note (insn, note);
      next = (((insn)->u.fld[2]).rtx1);
      if (set != 0 && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
   && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53
   && (insn == insns
       || ((! ((((enum rtx_code) (insns)->code) == INSN) || (((enum rtx_code) (insns)->code) == JUMP_INSN) || (((enum rtx_code) (insns)->code) == CALL_INSN))
     || ! reg_mentioned_p ((((set)->u.fld[0]).rtx1), (((insns)->u.fld[5]).rtx1)))
    && ! reg_used_between_p ((((set)->u.fld[0]).rtx1), insns, insn)
    && ! modified_in_p ((((set)->u.fld[1]).rtx1), insns)
    && ! modified_between_p ((((set)->u.fld[1]).rtx1), insns, insn))))
 {
   if ((((insn)->u.fld[1]).rtx1))
     ((((((insn)->u.fld[1]).rtx1))->u.fld[2]).rtx1) = next;
   else
     insns = next;
   if (next)
     (((next)->u.fld[1]).rtx1) = (((insn)->u.fld[1]).rtx1);
   add_insn (insn);
 }
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 break;
    }
  prev = get_last_insn ();
  for (insn = insns; insn; insn = next)
    {
      next = (((insn)->u.fld[2]).rtx1);
      add_insn (insn);
    }
  last = emit_move_insn (target, result);
  if ((optab_table[OTI_mov])->handlers[(int) ((enum machine_mode) (target)->mode)].insn_code
      != CODE_FOR_nothing)
    set_unique_reg_note (last, REG_EQUAL, copy_rtx (equiv));
  else
    {
      remove_note (last, find_reg_note (last, REG_EQUAL, (rtx) 0));
    }
  if (final_dest != target)
    emit_move_insn (final_dest, target);
  if (prev == 0)
    first = get_insns ();
  else
    first = (((prev)->u.fld[2]).rtx1);
  if (!flag_non_call_exceptions || !may_trap_p (equiv))
    {
      unsigned char attach_libcall_retval_notes = 1;
      next = (((last)->u.fld[2]).rtx1);
      for (insn = first; insn != next; insn = (((insn)->u.fld[2]).rtx1))
 if (control_flow_insn_p (insn))
   {
     attach_libcall_retval_notes = 0;
     break;
   }
      if (attach_libcall_retval_notes)
 {
   (((first)->u.fld[8]).rtx1) = gen_rtx_fmt_ue (INSN_LIST, (REG_LIBCALL), (last), ((((first)->u.fld[8]).rtx1)))
                         ;
   (((last)->u.fld[8]).rtx1) = gen_rtx_fmt_ue (INSN_LIST, (REG_RETVAL), (first), ((((last)->u.fld[8]).rtx1)))
                       ;
 }
    }
}
void
emit_clr_insn (rtx x)
{
  emit_move_insn (x, (const_int_rtx[64]));
}
void
emit_0_to_1_insn (rtx x)
{
  emit_move_insn (x, (const_int_rtx[64 +1]));
}
int
can_compare_p (enum rtx_code code, enum machine_mode mode,
        enum can_compare_purpose purpose)
{
  do
    {
      if ((optab_table[OTI_cmp])->handlers[(int) mode].insn_code != CODE_FOR_nothing)
 {
   if (purpose == ccp_jump)
     return bcc_gen_fctn[(int) code] != ((void *)0);
   else if (purpose == ccp_store_flag)
     return setcc_gen_code[(int) code] != CODE_FOR_nothing;
   else
     return 1;
 }
      if (purpose == ccp_jump
   && (optab_table[OTI_cbranch])->handlers[(int) mode].insn_code != CODE_FOR_nothing)
 return 1;
      if (purpose == ccp_cmov
   && (optab_table[OTI_cmov])->handlers[(int) mode].insn_code != CODE_FOR_nothing)
 return 1;
      if (purpose == ccp_store_flag
   && (optab_table[OTI_cstore])->handlers[(int) mode].insn_code != CODE_FOR_nothing)
 return 1;
      mode = mode_wider[mode];
    }
  while (mode != VOIDmode);
  return 0;
}
static void
prepare_cmp_insn (rtx *px, rtx *py, enum rtx_code *pcomparison, rtx size,
    enum machine_mode *pmode, int *punsignedp,
    enum can_compare_purpose purpose)
{
  enum machine_mode mode = *pmode;
  rtx x = *px, y = *py;
  int unsignedp = *punsignedp;
  enum mode_class class;
  class = mode_class[mode];
  if (mode != BLKmode && flag_force_mem)
    {
      if (rtx_equal_p (x, y) && ! volatile_refs_p (x))
 {
   x = force_not_mem (x);
   y = x;
 }
      else
 {
   x = force_not_mem (x);
   y = force_not_mem (y);
 }
    }
  if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR) && preserve_subexpressions_p ()
      && rtx_cost (x, COMPARE) > ((1) * 4))
    x = force_reg (mode, x);
  if (((rtx_class[(int) (((enum rtx_code) (y)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (y)->code) == CONST_VECTOR) && preserve_subexpressions_p ()
      && rtx_cost (y, COMPARE) > ((1) * 4))
    y = force_reg (mode, y);
  if (((enum machine_mode) (x)->mode) == VOIDmode && ((enum machine_mode) (y)->mode) == VOIDmode)
    x = force_reg (mode, x);
  if (mode == BLKmode)
    {
      enum machine_mode cmp_mode, result_mode;
      enum insn_code cmp_code;
      tree length_type;
      rtx libfunc;
      rtx result;
      rtx opalign
 = gen_rtx_CONST_INT (VOIDmode, (long) (((((((x)->u.fld[1]).rtmem) != 0 ? (((x)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (x)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (x)->mode)) : 8))) < (((((y)->u.fld[1]).rtmem) != 0 ? (((y)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (y)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (y)->mode)) : 8))) ? (((((x)->u.fld[1]).rtmem) != 0 ? (((x)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (x)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (x)->mode)) : 8))) : (((((y)->u.fld[1]).rtmem) != 0 ? (((y)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (y)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (y)->mode)) : 8)))) / 8));
      if (size == 0)
 abort ();
      emit_queue ();
      x = protect_from_queue (x, 0);
      y = protect_from_queue (y, 0);
      size = protect_from_queue (size, 0);
      for (cmp_mode = class_narrowest_mode[MODE_INT];
    cmp_mode != VOIDmode;
    cmp_mode = mode_wider[cmp_mode])
 {
   cmp_code = cmpmem_optab[cmp_mode];
   if (cmp_code == CODE_FOR_nothing)
     cmp_code = cmpstr_optab[cmp_mode];
   if (cmp_code == CODE_FOR_nothing)
     continue;
   if ((((enum rtx_code) (size)->code) == CONST_INT
        && ((size)->u.hwint[0]) >= (1 << ((unsigned short) (((unsigned short) mode_size[cmp_mode]) * 8))))
       || (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (size)->mode)]) * 8))
    > ((unsigned short) (((unsigned short) mode_size[cmp_mode]) * 8))))
     continue;
   result_mode = insn_data[cmp_code].operand[0].mode;
   result = gen_reg_rtx (result_mode);
   size = convert_to_mode (cmp_mode, size, 1);
   emit_insn ((insn_data[cmp_code].genfun) (result, x, y, size, opalign));
   *px = result;
   *py = (const_int_rtx[64]);
   *pmode = result_mode;
   return;
 }
      libfunc = (libfunc_table[LTI_memcmp]);
      length_type = sizetype_tab[(int) SIZETYPE];
      result_mode = ((integer_types[itk_int])->type.mode);
      cmp_mode = ((length_type)->type.mode);
      size = convert_to_mode (((length_type)->type.mode), size,
         ((length_type)->common.unsigned_flag));
      result = emit_library_call_value (libfunc, 0, LCT_PURE_MAKE_BLOCK,
     result_mode, 3,
     (((x)->u.fld[0]).rtx1), (0 ? DImode : SImode),
     (((y)->u.fld[0]).rtx1), (0 ? DImode : SImode),
     size, cmp_mode);
      *px = result;
      *py = (const_int_rtx[64]);
      *pmode = result_mode;
      return;
    }
  if (flag_non_call_exceptions)
    {
      if (may_trap_p (x))
 x = force_reg (mode, x);
      if (may_trap_p (y))
 y = force_reg (mode, y);
    }
  *px = x;
  *py = y;
  if (can_compare_p (*pcomparison, mode, purpose))
    return;
  if ((optab_table[OTI_cmp])->handlers[(int) mode].libfunc && class != MODE_FLOAT)
    {
      rtx libfunc = (optab_table[OTI_cmp])->handlers[(int) mode].libfunc;
      rtx result;
      if (unsignedp && (optab_table[OTI_ucmp])->handlers[(int) mode].libfunc)
 libfunc = (optab_table[OTI_ucmp])->handlers[(int) mode].libfunc;
      result = emit_library_call_value (libfunc, (rtx) 0, LCT_CONST_MAKE_BLOCK,
     word_mode, 2, x, mode, y, mode);
      *px = result;
      *py = (const_int_rtx[64 +1]);
      *pmode = word_mode;
      return;
    }
  if (class == MODE_FLOAT)
    prepare_float_lib_cmp (px, py, pcomparison, pmode, punsignedp);
  else
    abort ();
}
rtx
prepare_operand (int icode, rtx x, int opnum, enum machine_mode mode,
   enum machine_mode wider_mode, int unsignedp)
{
  x = protect_from_queue (x, 0);
  if (mode != wider_mode)
    x = convert_modes (wider_mode, mode, x, unsignedp);
  if (! (*insn_data[icode].operand[opnum].predicate)
      (x, insn_data[icode].operand[opnum].mode))
    {
      if (no_new_pseudos)
 return (rtx) 0;
      x = copy_to_mode_reg (insn_data[icode].operand[opnum].mode, x);
    }
  return x;
}
static void
emit_cmp_and_jump_insn_1 (rtx x, rtx y, enum machine_mode mode,
     enum rtx_code comparison, int unsignedp, rtx label)
{
  rtx test = gen_rtx_fmt_ee (comparison, mode, x, y);
  enum mode_class class = mode_class[mode];
  enum machine_mode wider_mode = mode;
  do
    {
      enum insn_code icode;
      ((test)->mode = (wider_mode));
      if (label)
 {
   icode = (optab_table[OTI_cbranch])->handlers[(int) wider_mode].insn_code;
   if (icode != CODE_FOR_nothing
       && (*insn_data[icode].operand[0].predicate) (test, wider_mode))
     {
       x = prepare_operand (icode, x, 1, mode, wider_mode, unsignedp);
       y = prepare_operand (icode, y, 2, mode, wider_mode, unsignedp);
       emit_jump_insn ((insn_data[icode].genfun) (test, x, y, label));
       return;
     }
 }
      icode = (int) (optab_table[OTI_tst])->handlers[(int) wider_mode].insn_code;
      if (y == (const_tiny_rtx[0][(int) (mode)]) && icode != CODE_FOR_nothing)
 {
   x = prepare_operand (icode, x, 0, mode, wider_mode, unsignedp);
   emit_insn ((insn_data[icode].genfun) (x));
   if (label)
     emit_jump_insn ((*bcc_gen_fctn[(int) comparison]) (label));
   return;
 }
      icode = (int) (optab_table[OTI_cmp])->handlers[(int) wider_mode].insn_code;
      if (icode != CODE_FOR_nothing)
 {
   x = prepare_operand (icode, x, 0, mode, wider_mode, unsignedp);
   y = prepare_operand (icode, y, 1, mode, wider_mode, unsignedp);
   emit_insn ((insn_data[icode].genfun) (x, y));
   if (label)
     emit_jump_insn ((*bcc_gen_fctn[(int) comparison]) (label));
   return;
 }
      if (class != MODE_INT && class != MODE_FLOAT
   && class != MODE_COMPLEX_FLOAT)
 break;
      wider_mode = mode_wider[wider_mode];
    }
  while (wider_mode != VOIDmode);
  abort ();
}
void
emit_cmp_and_jump_insns (rtx x, rtx y, enum rtx_code comparison, rtx size,
    enum machine_mode mode, int unsignedp, rtx label)
{
  rtx op0 = x, op1 = y;
  if (swap_commutative_operands_p (x, y))
    {
      if (! label)
 abort ();
      op0 = y, op1 = x;
      comparison = swap_condition (comparison);
    }
  emit_queue ();
  if (unsignedp)
    comparison = unsigned_condition (comparison);
  prepare_cmp_insn (&op0, &op1, &comparison, size, &mode, &unsignedp,
      ccp_jump);
  emit_cmp_and_jump_insn_1 (op0, op1, mode, comparison, unsignedp, label);
}
void
emit_cmp_insn (rtx x, rtx y, enum rtx_code comparison, rtx size,
        enum machine_mode mode, int unsignedp)
{
  emit_cmp_and_jump_insns (x, y, comparison, size, mode, unsignedp, 0);
}
static void
prepare_float_lib_cmp (rtx *px, rtx *py, enum rtx_code *pcomparison,
         enum machine_mode *pmode, int *punsignedp)
{
  enum rtx_code comparison = *pcomparison;
  enum rtx_code swapped = swap_condition (comparison);
  rtx x = protect_from_queue (*px, 0);
  rtx y = protect_from_queue (*py, 0);
  enum machine_mode orig_mode = ((enum machine_mode) (x)->mode);
  enum machine_mode mode;
  rtx value1, target, insns, equiv;
  rtx libfunc = 0;
  for (mode = orig_mode; mode != VOIDmode; mode = mode_wider[mode])
    {
      if ((libfunc = code_to_optab[comparison]->handlers[mode].libfunc))
 break;
      if ((libfunc = code_to_optab[swapped]->handlers[mode].libfunc))
 {
   rtx tmp;
   tmp = x; x = y; y = tmp;
   comparison = swapped;
   break;
 }
    }
  if (mode == VOIDmode)
    abort ();
  if (mode != orig_mode)
    {
      x = convert_to_mode (mode, x, 0);
      y = convert_to_mode (mode, y, 0);
    }
  if (comparison == UNORDERED)
    {
      rtx temp = simplify_gen_relational (NE, word_mode, mode, x, x);
      equiv = simplify_gen_relational (NE, word_mode, mode, y, y);
      equiv = simplify_gen_ternary (IF_THEN_ELSE, word_mode, word_mode,
        temp, const_true_rtx, equiv);
    }
  else
    {
      equiv = simplify_gen_relational (comparison, word_mode, mode, x, y);
      if (! 0)
 {
   rtx true_rtx, false_rtx;
   switch (comparison)
     {
     case EQ:
       true_rtx = (const_int_rtx[64]);
       false_rtx = const_true_rtx;
       break;
     case NE:
       true_rtx = const_true_rtx;
       false_rtx = (const_int_rtx[64]);
       break;
     case GT:
       true_rtx = (const_int_rtx[64 +1]);
       false_rtx = (const_int_rtx[64]);
       break;
     case GE:
       true_rtx = (const_int_rtx[64]);
       false_rtx = (const_int_rtx[64 -1]);
       break;
     case LT:
       true_rtx = (const_int_rtx[64 -1]);
       false_rtx = (const_int_rtx[64]);
       break;
     case LE:
       true_rtx = (const_int_rtx[64]);
       false_rtx = (const_int_rtx[64 +1]);
       break;
     default:
       abort ();
     }
   equiv = simplify_gen_ternary (IF_THEN_ELSE, word_mode, word_mode,
     equiv, true_rtx, false_rtx);
 }
    }
  start_sequence ();
  value1 = emit_library_call_value (libfunc, (rtx) 0, LCT_CONST,
       word_mode, 2, x, mode, y, mode);
  insns = get_insns ();
  end_sequence ();
  target = gen_reg_rtx (word_mode);
  emit_libcall_block (insns, target, value1, equiv);
  if (comparison == UNORDERED
      || 0)
    comparison = NE;
  *px = target;
  *py = (const_int_rtx[64]);
  *pmode = word_mode;
  *pcomparison = comparison;
  *punsignedp = 0;
}
void
emit_indirect_jump (rtx loc)
{
  if (! ((*insn_data[(int) CODE_FOR_indirect_jump].operand[0].predicate)
  (loc, (0 ? DImode : SImode))))
    loc = copy_to_mode_reg ((0 ? DImode : SImode), loc);
  emit_jump_insn (gen_indirect_jump (loc));
  emit_barrier ();
}
rtx
emit_conditional_move (rtx target, enum rtx_code code, rtx op0, rtx op1,
         enum machine_mode cmode, rtx op2, rtx op3,
         enum machine_mode mode, int unsignedp)
{
  rtx tem, subtarget, comparison, insn;
  enum insn_code icode;
  enum rtx_code reversed;
  if (swap_commutative_operands_p (op0, op1))
    {
      tem = op0;
      op0 = op1;
      op1 = tem;
      code = swap_condition (code);
    }
  if (code == LT && op1 == (const_int_rtx[64 +1]))
    code = LE, op1 = (const_int_rtx[64]);
  else if (code == GT && op1 == (const_int_rtx[64 -1]))
    code = GE, op1 = (const_int_rtx[64]);
  if (cmode == VOIDmode)
    cmode = ((enum machine_mode) (op0)->mode);
  if (swap_commutative_operands_p (op2, op3)
      && ((reversed = reversed_comparison_code_parts (code, op0, op1, ((void *)0)))
          != UNKNOWN))
    {
      tem = op2;
      op2 = op3;
      op3 = tem;
      code = reversed;
    }
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (op2)->mode);
  icode = movcc_gen_code[mode];
  if (icode == CODE_FOR_nothing)
    return 0;
  if (flag_force_mem)
    {
      op2 = force_not_mem (op2);
      op3 = force_not_mem (op3);
    }
  if (target)
    target = protect_from_queue (target, 1);
  else
    target = gen_reg_rtx (mode);
  subtarget = target;
  emit_queue ();
  op2 = protect_from_queue (op2, 0);
  op3 = protect_from_queue (op3, 0);
  if (! (*insn_data[icode].operand[0].predicate)
      (subtarget, insn_data[icode].operand[0].mode))
    subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode);
  if (! (*insn_data[icode].operand[2].predicate)
      (op2, insn_data[icode].operand[2].mode))
    op2 = copy_to_mode_reg (insn_data[icode].operand[2].mode, op2);
  if (! (*insn_data[icode].operand[3].predicate)
      (op3, insn_data[icode].operand[3].mode))
    op3 = copy_to_mode_reg (insn_data[icode].operand[3].mode, op3);
  comparison
    = compare_from_rtx (op0, op1, code, unsignedp, cmode, (rtx) 0);
  if (((enum rtx_code) (comparison)->code) != code)
    return (rtx) 0;
  insn = (insn_data[icode].genfun) (subtarget, comparison, op2, op3);
  if (insn == 0)
    return 0;
  emit_insn (insn);
  if (subtarget != target)
    convert_move (target, subtarget, 0);
  return target;
}
int
can_conditionally_move_p (enum machine_mode mode)
{
  if (movcc_gen_code[mode] != CODE_FOR_nothing)
    return 1;
  return 0;
}
rtx
emit_conditional_add (rtx target, enum rtx_code code, rtx op0, rtx op1,
        enum machine_mode cmode, rtx op2, rtx op3,
        enum machine_mode mode, int unsignedp)
{
  rtx tem, subtarget, comparison, insn;
  enum insn_code icode;
  enum rtx_code reversed;
  if (swap_commutative_operands_p (op0, op1))
    {
      tem = op0;
      op0 = op1;
      op1 = tem;
      code = swap_condition (code);
    }
  if (code == LT && op1 == (const_int_rtx[64 +1]))
    code = LE, op1 = (const_int_rtx[64]);
  else if (code == GT && op1 == (const_int_rtx[64 -1]))
    code = GE, op1 = (const_int_rtx[64]);
  if (cmode == VOIDmode)
    cmode = ((enum machine_mode) (op0)->mode);
  if (swap_commutative_operands_p (op2, op3)
      && ((reversed = reversed_comparison_code_parts (code, op0, op1, ((void *)0)))
          != UNKNOWN))
    {
      tem = op2;
      op2 = op3;
      op3 = tem;
      code = reversed;
    }
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (op2)->mode);
  icode = (optab_table[OTI_addcc])->handlers[(int) mode].insn_code;
  if (icode == CODE_FOR_nothing)
    return 0;
  if (flag_force_mem)
    {
      op2 = force_not_mem (op2);
      op3 = force_not_mem (op3);
    }
  if (target)
    target = protect_from_queue (target, 1);
  else
    target = gen_reg_rtx (mode);
  subtarget = target;
  emit_queue ();
  op2 = protect_from_queue (op2, 0);
  op3 = protect_from_queue (op3, 0);
  if (! (*insn_data[icode].operand[0].predicate)
      (subtarget, insn_data[icode].operand[0].mode))
    subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode);
  if (! (*insn_data[icode].operand[2].predicate)
      (op2, insn_data[icode].operand[2].mode))
    op2 = copy_to_mode_reg (insn_data[icode].operand[2].mode, op2);
  if (! (*insn_data[icode].operand[3].predicate)
      (op3, insn_data[icode].operand[3].mode))
    op3 = copy_to_mode_reg (insn_data[icode].operand[3].mode, op3);
  comparison
    = compare_from_rtx (op0, op1, code, unsignedp, cmode, (rtx) 0);
  if (((enum rtx_code) (comparison)->code) != code)
    return (rtx) 0;
  insn = (insn_data[icode].genfun) (subtarget, comparison, op2, op3);
  if (insn == 0)
    return 0;
  emit_insn (insn);
  if (subtarget != target)
    convert_move (target, subtarget, 0);
  return target;
}
rtx
gen_add2_insn (rtx x, rtx y)
{
  int icode = (int) (optab_table[OTI_add])->handlers[(int) ((enum machine_mode) (x)->mode)].insn_code;
  if (! ((*insn_data[icode].operand[0].predicate)
  (x, insn_data[icode].operand[0].mode))
      || ! ((*insn_data[icode].operand[1].predicate)
     (x, insn_data[icode].operand[1].mode))
      || ! ((*insn_data[icode].operand[2].predicate)
     (y, insn_data[icode].operand[2].mode)))
    abort ();
  return ((insn_data[icode].genfun) (x, x, y));
}
rtx
gen_add3_insn (rtx r0, rtx r1, rtx c)
{
  int icode = (int) (optab_table[OTI_add])->handlers[(int) ((enum machine_mode) (r0)->mode)].insn_code;
  if (icode == CODE_FOR_nothing
      || ! ((*insn_data[icode].operand[0].predicate)
     (r0, insn_data[icode].operand[0].mode))
      || ! ((*insn_data[icode].operand[1].predicate)
     (r1, insn_data[icode].operand[1].mode))
      || ! ((*insn_data[icode].operand[2].predicate)
     (c, insn_data[icode].operand[2].mode)))
    return (rtx) 0;
  return ((insn_data[icode].genfun) (r0, r1, c));
}
int
have_add2_insn (rtx x, rtx y)
{
  int icode;
  if (((enum machine_mode) (x)->mode) == VOIDmode)
    abort ();
  icode = (int) (optab_table[OTI_add])->handlers[(int) ((enum machine_mode) (x)->mode)].insn_code;
  if (icode == CODE_FOR_nothing)
    return 0;
  if (! ((*insn_data[icode].operand[0].predicate)
  (x, insn_data[icode].operand[0].mode))
      || ! ((*insn_data[icode].operand[1].predicate)
     (x, insn_data[icode].operand[1].mode))
      || ! ((*insn_data[icode].operand[2].predicate)
     (y, insn_data[icode].operand[2].mode)))
    return 0;
  return 1;
}
rtx
gen_sub2_insn (rtx x, rtx y)
{
  int icode = (int) (optab_table[OTI_sub])->handlers[(int) ((enum machine_mode) (x)->mode)].insn_code;
  if (! ((*insn_data[icode].operand[0].predicate)
  (x, insn_data[icode].operand[0].mode))
      || ! ((*insn_data[icode].operand[1].predicate)
     (x, insn_data[icode].operand[1].mode))
      || ! ((*insn_data[icode].operand[2].predicate)
     (y, insn_data[icode].operand[2].mode)))
    abort ();
  return ((insn_data[icode].genfun) (x, x, y));
}
rtx
gen_sub3_insn (rtx r0, rtx r1, rtx c)
{
  int icode = (int) (optab_table[OTI_sub])->handlers[(int) ((enum machine_mode) (r0)->mode)].insn_code;
  if (icode == CODE_FOR_nothing
      || ! ((*insn_data[icode].operand[0].predicate)
     (r0, insn_data[icode].operand[0].mode))
      || ! ((*insn_data[icode].operand[1].predicate)
     (r1, insn_data[icode].operand[1].mode))
      || ! ((*insn_data[icode].operand[2].predicate)
     (c, insn_data[icode].operand[2].mode)))
    return (rtx) 0;
  return ((insn_data[icode].genfun) (r0, r1, c));
}
int
have_sub2_insn (rtx x, rtx y)
{
  int icode;
  if (((enum machine_mode) (x)->mode) == VOIDmode)
    abort ();
  icode = (int) (optab_table[OTI_sub])->handlers[(int) ((enum machine_mode) (x)->mode)].insn_code;
  if (icode == CODE_FOR_nothing)
    return 0;
  if (! ((*insn_data[icode].operand[0].predicate)
  (x, insn_data[icode].operand[0].mode))
      || ! ((*insn_data[icode].operand[1].predicate)
     (x, insn_data[icode].operand[1].mode))
      || ! ((*insn_data[icode].operand[2].predicate)
     (y, insn_data[icode].operand[2].mode)))
    return 0;
  return 1;
}
rtx
gen_move_insn (rtx x, rtx y)
{
  rtx seq;
  start_sequence ();
  emit_move_insn_1 (x, y);
  seq = get_insns ();
  end_sequence ();
  return seq;
}
enum insn_code
can_extend_p (enum machine_mode to_mode, enum machine_mode from_mode,
       int unsignedp)
{
  convert_optab tab;
  tab = unsignedp ? (convert_optab_table[CTI_zext]) : (convert_optab_table[CTI_sext]);
  return tab->handlers[to_mode][from_mode].insn_code;
}
rtx
gen_extend_insn (rtx x, rtx y, enum machine_mode mto,
   enum machine_mode mfrom, int unsignedp)
{
  enum insn_code icode = can_extend_p (mto, mfrom, unsignedp);
  return (insn_data[icode].genfun) (x, y);
}
static enum insn_code
can_fix_p (enum machine_mode fixmode, enum machine_mode fltmode,
    int unsignedp, int *truncp_ptr)
{
  convert_optab tab;
  enum insn_code icode;
  tab = unsignedp ? (convert_optab_table[CTI_ufixtrunc]) : (convert_optab_table[CTI_sfixtrunc]);
  icode = tab->handlers[fixmode][fltmode].insn_code;
  if (icode != CODE_FOR_nothing)
    {
      *truncp_ptr = 0;
      return icode;
    }
  tab = unsignedp ? (convert_optab_table[CTI_ufix]) : (convert_optab_table[CTI_sfix]);
  icode = tab->handlers[fixmode][fltmode].insn_code;
  if (icode != CODE_FOR_nothing
      && (optab_table[OTI_ftrunc])->handlers[fltmode].insn_code != CODE_FOR_nothing)
    {
      *truncp_ptr = 1;
      return icode;
    }
  *truncp_ptr = 0;
  return CODE_FOR_nothing;
}
static enum insn_code
can_float_p (enum machine_mode fltmode, enum machine_mode fixmode,
      int unsignedp)
{
  convert_optab tab;
  tab = unsignedp ? (convert_optab_table[CTI_ufloat]) : (convert_optab_table[CTI_sfloat]);
  return tab->handlers[fltmode][fixmode].insn_code;
}
void
expand_float (rtx to, rtx from, int unsignedp)
{
  enum insn_code icode;
  rtx target = to;
  enum machine_mode fmode, imode;
  if (((enum machine_mode) (from)->mode) == VOIDmode)
    abort ();
  for (fmode = ((enum machine_mode) (to)->mode); fmode != VOIDmode;
       fmode = mode_wider[fmode])
    for (imode = ((enum machine_mode) (from)->mode); imode != VOIDmode;
  imode = mode_wider[imode])
      {
 int doing_unsigned = unsignedp;
 if (fmode != ((enum machine_mode) (to)->mode)
     && significand_size (fmode) < ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (from)->mode)]) * 8)))
   continue;
 icode = can_float_p (fmode, imode, unsignedp);
 if (icode == CODE_FOR_nothing && imode != ((enum machine_mode) (from)->mode) && unsignedp)
   icode = can_float_p (fmode, imode, 0), doing_unsigned = 0;
 if (icode != CODE_FOR_nothing)
   {
     to = protect_from_queue (to, 1);
     from = protect_from_queue (from, 0);
     if (imode != ((enum machine_mode) (from)->mode))
       from = convert_to_mode (imode, from, unsignedp);
     if (fmode != ((enum machine_mode) (to)->mode))
       target = gen_reg_rtx (fmode);
     emit_unop_insn (icode, target, from,
       doing_unsigned ? UNSIGNED_FLOAT : FLOAT);
     if (target != to)
       convert_move (to, target, 0);
     return;
   }
      }
  if (unsignedp)
    {
      rtx label = gen_label_rtx ();
      rtx temp;
      struct real_value offset;
      emit_queue ();
      to = protect_from_queue (to, 1);
      from = protect_from_queue (from, 0);
      if (flag_force_mem)
 from = force_not_mem (from);
      for (fmode = ((enum machine_mode) (to)->mode); fmode != VOIDmode;
    fmode = mode_wider[fmode])
 if (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (from)->mode)]) * 8)) < ((unsigned short) (((unsigned short) mode_size[fmode]) * 8))
     && can_float_p (fmode, ((enum machine_mode) (from)->mode), 0) != CODE_FOR_nothing)
   break;
      if (fmode == VOIDmode)
 {
   fmode = ((enum machine_mode) (to)->mode);
   if ((significand_size (fmode) + 1)
       < ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (from)->mode)]) * 8)))
     {
       rtx temp1;
       rtx neglabel = gen_label_rtx ();
       if (!(((enum rtx_code) (target)->code) == REG)
    || (((target)->u.fld[0]).rtuint) < 53
    || ((enum machine_mode) (target)->mode) != fmode)
  target = gen_reg_rtx (fmode);
       imode = ((enum machine_mode) (from)->mode);
       do_pending_stack_adjust ();
       emit_cmp_and_jump_insns (from, (const_int_rtx[64]), LT, (rtx) 0, imode,
           0, neglabel);
       expand_float (target, from, 0);
       emit_jump_insn (gen_jump (label));
       emit_barrier ();
       emit_label (neglabel);
       temp = expand_binop (imode, (optab_table[OTI_and]), from, (const_int_rtx[64 +1]),
       (rtx) 0, 1, OPTAB_LIB_WIDEN);
       temp1 = expand_shift (RSHIFT_EXPR, imode, from, global_trees[TI_INTEGER_ONE],
        (rtx) 0, 1);
       temp = expand_binop (imode, (optab_table[OTI_ior]), temp, temp1, temp, 1,
       OPTAB_LIB_WIDEN);
       expand_float (target, temp, 0);
       temp = expand_binop (fmode, (optab_table[OTI_add]), target, target,
       target, 0, OPTAB_LIB_WIDEN);
       if (temp != target)
  emit_move_insn (target, temp);
       do_pending_stack_adjust ();
       emit_label (label);
       goto done;
     }
 }
      if (((enum machine_mode) (to)->mode) != fmode
   || !(((enum rtx_code) (to)->code) == REG) || (((to)->u.fld[0]).rtuint) < 53)
 target = gen_reg_rtx (fmode);
      expand_float (target, from, 0);
      do_pending_stack_adjust ();
      emit_cmp_and_jump_insns (from, (const_int_rtx[64]), GE, (rtx) 0, ((enum machine_mode) (from)->mode),
          0, label);
      real_2expN (&offset, ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (from)->mode)]) * 8)));
      temp = expand_binop (fmode, (optab_table[OTI_add]), target,
      const_double_from_real_value (offset, fmode),
      target, 0, OPTAB_LIB_WIDEN);
      if (temp != target)
 emit_move_insn (target, temp);
      do_pending_stack_adjust ();
      emit_label (label);
      goto done;
    }
    {
      rtx libfunc;
      rtx insns;
      rtx value1;
      convert_optab tab = unsignedp ? (convert_optab_table[CTI_ufloat]) : (convert_optab_table[CTI_sfloat]);
      to = protect_from_queue (to, 1);
      from = protect_from_queue (from, 0);
      if (((unsigned short) mode_size[((enum machine_mode) (from)->mode)]) < ((unsigned short) mode_size[SImode]))
 from = convert_to_mode (SImode, from, unsignedp);
      if (flag_force_mem)
 from = force_not_mem (from);
      libfunc = tab->handlers[((enum machine_mode) (to)->mode)][((enum machine_mode) (from)->mode)].libfunc;
      if (!libfunc)
 abort ();
      start_sequence ();
      value1 = emit_library_call_value (libfunc, (rtx) 0, LCT_CONST,
           ((enum machine_mode) (to)->mode), 1, from,
           ((enum machine_mode) (from)->mode));
      insns = get_insns ();
      end_sequence ();
      emit_libcall_block (insns, target, value1,
     gen_rtx_fmt_e (FLOAT, (((enum machine_mode) (to)->mode)), (from)));
    }
 done:
  if (target != to)
    {
      if (((enum machine_mode) (target)->mode) == ((enum machine_mode) (to)->mode))
 emit_move_insn (to, target);
      else
 convert_move (to, target, 0);
    }
}
void
expand_fix (rtx to, rtx from, int unsignedp)
{
  enum insn_code icode;
  rtx target = to;
  enum machine_mode fmode, imode;
  int must_trunc = 0;
  for (fmode = ((enum machine_mode) (from)->mode); fmode != VOIDmode;
       fmode = mode_wider[fmode])
    for (imode = ((enum machine_mode) (to)->mode); imode != VOIDmode;
  imode = mode_wider[imode])
      {
 int doing_unsigned = unsignedp;
 icode = can_fix_p (imode, fmode, unsignedp, &must_trunc);
 if (icode == CODE_FOR_nothing && imode != ((enum machine_mode) (to)->mode) && unsignedp)
   icode = can_fix_p (imode, fmode, 0, &must_trunc), doing_unsigned = 0;
 if (icode != CODE_FOR_nothing)
   {
     to = protect_from_queue (to, 1);
     from = protect_from_queue (from, 0);
     if (fmode != ((enum machine_mode) (from)->mode))
       from = convert_to_mode (fmode, from, 0);
     if (must_trunc)
       {
  rtx temp = gen_reg_rtx (((enum machine_mode) (from)->mode));
  from = expand_unop (((enum machine_mode) (from)->mode), (optab_table[OTI_ftrunc]), from,
        temp, 0);
       }
     if (imode != ((enum machine_mode) (to)->mode))
       target = gen_reg_rtx (imode);
     emit_unop_insn (icode, target, from,
       doing_unsigned ? UNSIGNED_FIX : FIX);
     if (target != to)
       convert_move (to, target, unsignedp);
     return;
   }
      }
  if (unsignedp && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (to)->mode)]) * 8)) <= (8 * 4))
    for (fmode = ((enum machine_mode) (from)->mode); fmode != VOIDmode;
  fmode = mode_wider[fmode])
      if (CODE_FOR_nothing != can_fix_p (((enum machine_mode) (to)->mode), fmode, 0,
      &must_trunc))
 {
   int bitsize;
   struct real_value offset;
   rtx limit, lab1, lab2, insn;
   bitsize = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (to)->mode)]) * 8));
   real_2expN (&offset, bitsize - 1);
   limit = const_double_from_real_value (offset, fmode);
   lab1 = gen_label_rtx ();
   lab2 = gen_label_rtx ();
   emit_queue ();
   to = protect_from_queue (to, 1);
   from = protect_from_queue (from, 0);
   if (flag_force_mem)
     from = force_not_mem (from);
   if (fmode != ((enum machine_mode) (from)->mode))
     from = convert_to_mode (fmode, from, 0);
   do_pending_stack_adjust ();
   emit_cmp_and_jump_insns (from, limit, GE, (rtx) 0, ((enum machine_mode) (from)->mode),
       0, lab1);
   expand_fix (to, from, 0);
   emit_jump_insn (gen_jump (lab2));
   emit_barrier ();
   emit_label (lab1);
   target = expand_binop (((enum machine_mode) (from)->mode), (optab_table[OTI_sub]), from, limit,
     (rtx) 0, 0, OPTAB_LIB_WIDEN);
   expand_fix (to, target, 0);
   target = expand_binop (((enum machine_mode) (to)->mode), (optab_table[OTI_xor]), to,
     gen_int_mode
     ((long) 1 << (bitsize - 1),
      ((enum machine_mode) (to)->mode)),
     to, 1, OPTAB_LIB_WIDEN);
   if (target != to)
     emit_move_insn (to, target);
   emit_label (lab2);
   if ((optab_table[OTI_mov])->handlers[(int) ((enum machine_mode) (to)->mode)].insn_code
       != CODE_FOR_nothing)
     {
       insn = emit_move_insn (to, to);
       set_unique_reg_note (insn,
                            REG_EQUAL,
       gen_rtx_fmt_e (UNSIGNED_FIX,
        ((enum machine_mode) (to)->mode),
        copy_rtx (from)));
     }
   return;
 }
  if (((unsigned short) mode_size[((enum machine_mode) (to)->mode)]) < ((unsigned short) mode_size[SImode]))
    {
      target = gen_reg_rtx (SImode);
      expand_fix (target, from, unsignedp);
    }
  else
    {
      rtx insns;
      rtx value1;
      rtx libfunc;
      convert_optab tab = unsignedp ? (convert_optab_table[CTI_ufix]) : (convert_optab_table[CTI_sfix]);
      libfunc = tab->handlers[((enum machine_mode) (to)->mode)][((enum machine_mode) (from)->mode)].libfunc;
      if (!libfunc)
 abort ();
      to = protect_from_queue (to, 1);
      from = protect_from_queue (from, 0);
      if (flag_force_mem)
 from = force_not_mem (from);
      start_sequence ();
      value1 = emit_library_call_value (libfunc, (rtx) 0, LCT_CONST,
           ((enum machine_mode) (to)->mode), 1, from,
           ((enum machine_mode) (from)->mode));
      insns = get_insns ();
      end_sequence ();
      emit_libcall_block (insns, target, value1,
     gen_rtx_fmt_e (unsignedp ? UNSIGNED_FIX : FIX,
      ((enum machine_mode) (to)->mode), from));
    }
  if (target != to)
    {
      if (((enum machine_mode) (to)->mode) == ((enum machine_mode) (target)->mode))
        emit_move_insn (to, target);
      else
        convert_move (to, target, 0);
    }
}
int
have_insn_for (enum rtx_code code, enum machine_mode mode)
{
  return (code_to_optab[(int) code] != 0
   && (code_to_optab[(int) code]->handlers[(int) mode].insn_code
       != CODE_FOR_nothing));
}
static optab
new_optab (void)
{
  int i;
  optab op = ggc_alloc_stat (sizeof (struct optab) );
  for (i = 0; i < NUM_MACHINE_MODES; i++)
    {
      op->handlers[i].insn_code = CODE_FOR_nothing;
      op->handlers[i].libfunc = 0;
    }
  return op;
}
static convert_optab
new_convert_optab (void)
{
  int i, j;
  convert_optab op = ggc_alloc_stat (sizeof (struct convert_optab) );
  for (i = 0; i < NUM_MACHINE_MODES; i++)
    for (j = 0; j < NUM_MACHINE_MODES; j++)
      {
 op->handlers[i][j].insn_code = CODE_FOR_nothing;
 op->handlers[i][j].libfunc = 0;
      }
  return op;
}
static optab
init_optab (enum rtx_code code)
{
  optab op = new_optab ();
  op->code = code;
  code_to_optab[(int) code] = op;
  return op;
}
static optab
init_optabv (enum rtx_code code)
{
  optab op = new_optab ();
  op->code = code;
  return op;
}
static convert_optab
init_convert_optab (enum rtx_code code)
{
  convert_optab op = new_convert_optab ();
  op->code = code;
  return op;
}
static void
init_libfuncs (optab optable, int first_mode, int last_mode,
        const char *opname, int suffix)
{
  int mode;
  unsigned opname_len = strlen (opname);
  for (mode = first_mode; (int) mode <= (int) last_mode;
       mode = (enum machine_mode) ((int) mode + 1))
    {
      const char *mname = mode_name[mode];
      unsigned mname_len = strlen (mname);
      char *libfunc_name = C_alloca(2 + opname_len + mname_len + 1 + 1);
      char *p;
      const char *q;
      p = libfunc_name;
      *p++ = '_';
      *p++ = '_';
      for (q = opname; *q; )
 *p++ = *q++;
      for (q = mname; *q; q++)
 *p++ = _sch_tolower[(*q) & 0xff];
      *p++ = suffix;
      *p = '\0';
      optable->handlers[(int) mode].libfunc
 = init_one_libfunc (ggc_alloc_string (libfunc_name, p - libfunc_name));
    }
}
static void
init_integral_libfuncs (optab optable, const char *opname, int suffix)
{
  int maxsize = 2*(8 * (0 ? 8 : 4));
  if (maxsize < 64)
    maxsize = 64;
  init_libfuncs (optable, word_mode,
   mode_for_size (maxsize, MODE_INT, 0),
   opname, suffix);
}
static void
init_floating_libfuncs (optab optable, const char *opname, int suffix)
{
  init_libfuncs (optable, MIN_MODE_FLOAT, MAX_MODE_FLOAT, opname, suffix);
}
static void
init_interclass_conv_libfuncs (convert_optab tab, const char *opname,
          enum mode_class from_class,
          enum mode_class to_class)
{
  enum machine_mode first_from_mode = class_narrowest_mode[from_class];
  enum machine_mode first_to_mode = class_narrowest_mode[to_class];
  size_t opname_len = strlen (opname);
  size_t max_mname_len = 0;
  enum machine_mode fmode, tmode;
  const char *fname, *tname;
  const char *q;
  char *libfunc_name, *suffix;
  char *p;
  for (fmode = first_from_mode;
       fmode != VOIDmode;
       fmode = mode_wider[fmode])
    max_mname_len = ((max_mname_len) > (strlen (mode_name[fmode])) ? (max_mname_len) : (strlen (mode_name[fmode])));
  for (tmode = first_to_mode;
       tmode != VOIDmode;
       tmode = mode_wider[tmode])
    max_mname_len = ((max_mname_len) > (strlen (mode_name[tmode])) ? (max_mname_len) : (strlen (mode_name[tmode])));
  libfunc_name = C_alloca(2 + opname_len + 2*max_mname_len + 1 + 1);
  libfunc_name[0] = '_';
  libfunc_name[1] = '_';
  memcpy (&libfunc_name[2], opname, opname_len);
  suffix = libfunc_name + opname_len + 2;
  for (fmode = first_from_mode; fmode != VOIDmode;
       fmode = mode_wider[fmode])
    for (tmode = first_to_mode; tmode != VOIDmode;
  tmode = mode_wider[tmode])
      {
 fname = mode_name[fmode];
 tname = mode_name[tmode];
 p = suffix;
 for (q = fname; *q; p++, q++)
   *p = _sch_tolower[(*q) & 0xff];
 for (q = tname; *q; p++, q++)
   *p = _sch_tolower[(*q) & 0xff];
 *p = '\0';
 tab->handlers[tmode][fmode].libfunc
   = init_one_libfunc (ggc_alloc_string (libfunc_name,
      p - libfunc_name));
      }
}
static void
init_intraclass_conv_libfuncs (convert_optab tab, const char *opname,
          enum mode_class class, unsigned char widening)
{
  enum machine_mode first_mode = class_narrowest_mode[class];
  size_t opname_len = strlen (opname);
  size_t max_mname_len = 0;
  enum machine_mode nmode, wmode;
  const char *nname, *wname;
  const char *q;
  char *libfunc_name, *suffix;
  char *p;
  for (nmode = first_mode; nmode != VOIDmode;
       nmode = mode_wider[nmode])
    max_mname_len = ((max_mname_len) > (strlen (mode_name[nmode])) ? (max_mname_len) : (strlen (mode_name[nmode])));
  libfunc_name = C_alloca(2 + opname_len + 2*max_mname_len + 1 + 1);
  libfunc_name[0] = '_';
  libfunc_name[1] = '_';
  memcpy (&libfunc_name[2], opname, opname_len);
  suffix = libfunc_name + opname_len + 2;
  for (nmode = first_mode; nmode != VOIDmode;
       nmode = mode_wider[nmode])
    for (wmode = mode_wider[nmode]; wmode != VOIDmode;
  wmode = mode_wider[wmode])
      {
 nname = mode_name[nmode];
 wname = mode_name[wmode];
 p = suffix;
 for (q = widening ? nname : wname; *q; p++, q++)
   *p = _sch_tolower[(*q) & 0xff];
 for (q = widening ? wname : nname; *q; p++, q++)
   *p = _sch_tolower[(*q) & 0xff];
 *p++ = '2';
 *p = '\0';
 tab->handlers[widening ? wmode : nmode]
              [widening ? nmode : wmode].libfunc
   = init_one_libfunc (ggc_alloc_string (libfunc_name,
      p - libfunc_name));
      }
}
rtx
init_one_libfunc (const char *name)
{
  rtx symbol;
  tree decl = build_decl_stat (FUNCTION_DECL,get_identifier (name),build_function_type (integer_types[itk_int], (tree) ((void *)0)) )
                                                        ;
  ((decl)->decl.artificial_flag) = 1;
  ((decl)->decl.external_flag) = 1;
  ((decl)->common.public_flag) = 1;
  symbol = (((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1);
  ((((symbol))->u.fld[2]).rttree) = 0;
  return symbol;
}
void
set_optab_libfunc (optab optable, enum machine_mode mode, const char *name)
{
  if (name)
    optable->handlers[mode].libfunc = init_one_libfunc (name);
  else
    optable->handlers[mode].libfunc = 0;
}
void
set_conv_libfunc (convert_optab optable, enum machine_mode tmode,
    enum machine_mode fmode, const char *name)
{
  if (name)
    optable->handlers[tmode][fmode].libfunc = init_one_libfunc (name);
  else
    optable->handlers[tmode][fmode].libfunc = 0;
}
void
init_optabs (void)
{
  unsigned int i;
  for (i = 0; i < ((int) LAST_AND_UNUSED_RTX_CODE); i++)
    setcc_gen_code[i] = CODE_FOR_nothing;
  for (i = 0; i < NUM_MACHINE_MODES; i++)
    movcc_gen_code[i] = CODE_FOR_nothing;
  (optab_table[OTI_add]) = init_optab (PLUS);
  (optab_table[OTI_addv]) = init_optabv (PLUS);
  (optab_table[OTI_sub]) = init_optab (MINUS);
  (optab_table[OTI_subv]) = init_optabv (MINUS);
  (optab_table[OTI_smul]) = init_optab (MULT);
  (optab_table[OTI_smulv]) = init_optabv (MULT);
  (optab_table[OTI_smul_highpart]) = init_optab (UNKNOWN);
  (optab_table[OTI_umul_highpart]) = init_optab (UNKNOWN);
  (optab_table[OTI_smul_widen]) = init_optab (UNKNOWN);
  (optab_table[OTI_umul_widen]) = init_optab (UNKNOWN);
  (optab_table[OTI_sdiv]) = init_optab (DIV);
  (optab_table[OTI_sdivv]) = init_optabv (DIV);
  (optab_table[OTI_sdivmod]) = init_optab (UNKNOWN);
  (optab_table[OTI_udiv]) = init_optab (UDIV);
  (optab_table[OTI_udivmod]) = init_optab (UNKNOWN);
  (optab_table[OTI_smod]) = init_optab (MOD);
  (optab_table[OTI_umod]) = init_optab (UMOD);
  (optab_table[OTI_fmod]) = init_optab (UNKNOWN);
  (optab_table[OTI_drem]) = init_optab (UNKNOWN);
  (optab_table[OTI_ftrunc]) = init_optab (UNKNOWN);
  (optab_table[OTI_and]) = init_optab (AND);
  (optab_table[OTI_ior]) = init_optab (IOR);
  (optab_table[OTI_xor]) = init_optab (XOR);
  (optab_table[OTI_ashl]) = init_optab (ASHIFT);
  (optab_table[OTI_ashr]) = init_optab (ASHIFTRT);
  (optab_table[OTI_lshr]) = init_optab (LSHIFTRT);
  (optab_table[OTI_rotl]) = init_optab (ROTATE);
  (optab_table[OTI_rotr]) = init_optab (ROTATERT);
  (optab_table[OTI_smin]) = init_optab (SMIN);
  (optab_table[OTI_smax]) = init_optab (SMAX);
  (optab_table[OTI_umin]) = init_optab (UMIN);
  (optab_table[OTI_umax]) = init_optab (UMAX);
  (optab_table[OTI_pow]) = init_optab (UNKNOWN);
  (optab_table[OTI_atan2]) = init_optab (UNKNOWN);
  (optab_table[OTI_mov]) = init_optab (SET);
  (optab_table[OTI_movstrict]) = init_optab (STRICT_LOW_PART);
  (optab_table[OTI_cmp]) = init_optab (COMPARE);
  (optab_table[OTI_ucmp]) = init_optab (UNKNOWN);
  (optab_table[OTI_tst]) = init_optab (UNKNOWN);
  (optab_table[OTI_eq]) = init_optab (EQ);
  (optab_table[OTI_ne]) = init_optab (NE);
  (optab_table[OTI_gt]) = init_optab (GT);
  (optab_table[OTI_ge]) = init_optab (GE);
  (optab_table[OTI_lt]) = init_optab (LT);
  (optab_table[OTI_le]) = init_optab (LE);
  (optab_table[OTI_unord]) = init_optab (UNORDERED);
  (optab_table[OTI_neg]) = init_optab (NEG);
  (optab_table[OTI_negv]) = init_optabv (NEG);
  (optab_table[OTI_abs]) = init_optab (ABS);
  (optab_table[OTI_absv]) = init_optabv (ABS);
  (optab_table[OTI_addcc]) = init_optab (UNKNOWN);
  (optab_table[OTI_one_cmpl]) = init_optab (NOT);
  (optab_table[OTI_ffs]) = init_optab (FFS);
  (optab_table[OTI_clz]) = init_optab (CLZ);
  (optab_table[OTI_ctz]) = init_optab (CTZ);
  (optab_table[OTI_popcount]) = init_optab (POPCOUNT);
  (optab_table[OTI_parity]) = init_optab (PARITY);
  (optab_table[OTI_sqrt]) = init_optab (SQRT);
  (optab_table[OTI_floor]) = init_optab (UNKNOWN);
  (optab_table[OTI_ceil]) = init_optab (UNKNOWN);
  (optab_table[OTI_round]) = init_optab (UNKNOWN);
  (optab_table[OTI_trunc]) = init_optab (UNKNOWN);
  (optab_table[OTI_nearbyint]) = init_optab (UNKNOWN);
  (optab_table[OTI_sincos]) = init_optab (UNKNOWN);
  (optab_table[OTI_sin]) = init_optab (UNKNOWN);
  (optab_table[OTI_asin]) = init_optab (UNKNOWN);
  (optab_table[OTI_cos]) = init_optab (UNKNOWN);
  (optab_table[OTI_acos]) = init_optab (UNKNOWN);
  (optab_table[OTI_exp]) = init_optab (UNKNOWN);
  (optab_table[OTI_exp10]) = init_optab (UNKNOWN);
  (optab_table[OTI_exp2]) = init_optab (UNKNOWN);
  (optab_table[OTI_expm1]) = init_optab (UNKNOWN);
  (optab_table[OTI_logb]) = init_optab (UNKNOWN);
  (optab_table[OTI_ilogb]) = init_optab (UNKNOWN);
  (optab_table[OTI_log]) = init_optab (UNKNOWN);
  (optab_table[OTI_log10]) = init_optab (UNKNOWN);
  (optab_table[OTI_log2]) = init_optab (UNKNOWN);
  (optab_table[OTI_log1p]) = init_optab (UNKNOWN);
  (optab_table[OTI_tan]) = init_optab (UNKNOWN);
  (optab_table[OTI_atan]) = init_optab (UNKNOWN);
  (optab_table[OTI_strlen]) = init_optab (UNKNOWN);
  (optab_table[OTI_cbranch]) = init_optab (UNKNOWN);
  (optab_table[OTI_cmov]) = init_optab (UNKNOWN);
  (optab_table[OTI_cstore]) = init_optab (UNKNOWN);
  (optab_table[OTI_push]) = init_optab (UNKNOWN);
  (optab_table[OTI_vec_extract]) = init_optab (UNKNOWN);
  (optab_table[OTI_vec_set]) = init_optab (UNKNOWN);
  (optab_table[OTI_vec_init]) = init_optab (UNKNOWN);
  (convert_optab_table[CTI_sext]) = init_convert_optab (SIGN_EXTEND);
  (convert_optab_table[CTI_zext]) = init_convert_optab (ZERO_EXTEND);
  (convert_optab_table[CTI_trunc]) = init_convert_optab (TRUNCATE);
  (convert_optab_table[CTI_sfix]) = init_convert_optab (FIX);
  (convert_optab_table[CTI_ufix]) = init_convert_optab (UNSIGNED_FIX);
  (convert_optab_table[CTI_sfixtrunc]) = init_convert_optab (UNKNOWN);
  (convert_optab_table[CTI_ufixtrunc]) = init_convert_optab (UNKNOWN);
  (convert_optab_table[CTI_sfloat]) = init_convert_optab (FLOAT);
  (convert_optab_table[CTI_ufloat]) = init_convert_optab (UNSIGNED_FLOAT);
  for (i = 0; i < NUM_MACHINE_MODES; i++)
    {
      movstr_optab[i] = CODE_FOR_nothing;
      clrstr_optab[i] = CODE_FOR_nothing;
      cmpstr_optab[i] = CODE_FOR_nothing;
      cmpmem_optab[i] = CODE_FOR_nothing;
      reload_in_optab[i] = reload_out_optab[i] = CODE_FOR_nothing;
    }
  init_all_optabs ();
  init_integral_libfuncs ((optab_table[OTI_add]), "add", '3');
  init_floating_libfuncs ((optab_table[OTI_add]), "add", '3');
  init_integral_libfuncs ((optab_table[OTI_addv]), "addv", '3');
  init_floating_libfuncs ((optab_table[OTI_addv]), "add", '3');
  init_integral_libfuncs ((optab_table[OTI_sub]), "sub", '3');
  init_floating_libfuncs ((optab_table[OTI_sub]), "sub", '3');
  init_integral_libfuncs ((optab_table[OTI_subv]), "subv", '3');
  init_floating_libfuncs ((optab_table[OTI_subv]), "sub", '3');
  init_integral_libfuncs ((optab_table[OTI_smul]), "mul", '3');
  init_floating_libfuncs ((optab_table[OTI_smul]), "mul", '3');
  init_integral_libfuncs ((optab_table[OTI_smulv]), "mulv", '3');
  init_floating_libfuncs ((optab_table[OTI_smulv]), "mul", '3');
  init_integral_libfuncs ((optab_table[OTI_sdiv]), "div", '3');
  init_floating_libfuncs ((optab_table[OTI_sdiv]), "div", '3');
  init_integral_libfuncs ((optab_table[OTI_sdivv]), "divv", '3');
  init_integral_libfuncs ((optab_table[OTI_udiv]), "udiv", '3');
  init_integral_libfuncs ((optab_table[OTI_sdivmod]), "divmod", '4');
  init_integral_libfuncs ((optab_table[OTI_udivmod]), "udivmod", '4');
  init_integral_libfuncs ((optab_table[OTI_smod]), "mod", '3');
  init_integral_libfuncs ((optab_table[OTI_umod]), "umod", '3');
  init_floating_libfuncs ((optab_table[OTI_ftrunc]), "ftrunc", '2');
  init_integral_libfuncs ((optab_table[OTI_and]), "and", '3');
  init_integral_libfuncs ((optab_table[OTI_ior]), "ior", '3');
  init_integral_libfuncs ((optab_table[OTI_xor]), "xor", '3');
  init_integral_libfuncs ((optab_table[OTI_ashl]), "ashl", '3');
  init_integral_libfuncs ((optab_table[OTI_ashr]), "ashr", '3');
  init_integral_libfuncs ((optab_table[OTI_lshr]), "lshr", '3');
  init_integral_libfuncs ((optab_table[OTI_smin]), "min", '3');
  init_floating_libfuncs ((optab_table[OTI_smin]), "min", '3');
  init_integral_libfuncs ((optab_table[OTI_smax]), "max", '3');
  init_floating_libfuncs ((optab_table[OTI_smax]), "max", '3');
  init_integral_libfuncs ((optab_table[OTI_umin]), "umin", '3');
  init_integral_libfuncs ((optab_table[OTI_umax]), "umax", '3');
  init_integral_libfuncs ((optab_table[OTI_neg]), "neg", '2');
  init_floating_libfuncs ((optab_table[OTI_neg]), "neg", '2');
  init_integral_libfuncs ((optab_table[OTI_negv]), "negv", '2');
  init_floating_libfuncs ((optab_table[OTI_negv]), "neg", '2');
  init_integral_libfuncs ((optab_table[OTI_one_cmpl]), "one_cmpl", '2');
  init_integral_libfuncs ((optab_table[OTI_ffs]), "ffs", '2');
  init_integral_libfuncs ((optab_table[OTI_clz]), "clz", '2');
  init_integral_libfuncs ((optab_table[OTI_ctz]), "ctz", '2');
  init_integral_libfuncs ((optab_table[OTI_popcount]), "popcount", '2');
  init_integral_libfuncs ((optab_table[OTI_parity]), "parity", '2');
  init_integral_libfuncs ((optab_table[OTI_cmp]), "cmp", '2');
  init_integral_libfuncs ((optab_table[OTI_ucmp]), "ucmp", '2');
  init_floating_libfuncs ((optab_table[OTI_cmp]), "cmp", '2');
  init_floating_libfuncs ((optab_table[OTI_eq]), "eq", '2');
  init_floating_libfuncs ((optab_table[OTI_ne]), "ne", '2');
  init_floating_libfuncs ((optab_table[OTI_gt]), "gt", '2');
  init_floating_libfuncs ((optab_table[OTI_ge]), "ge", '2');
  init_floating_libfuncs ((optab_table[OTI_lt]), "lt", '2');
  init_floating_libfuncs ((optab_table[OTI_le]), "le", '2');
  init_floating_libfuncs ((optab_table[OTI_unord]), "unord", '2');
  init_interclass_conv_libfuncs ((convert_optab_table[CTI_sfloat]), "float", MODE_INT, MODE_FLOAT);
  init_interclass_conv_libfuncs ((convert_optab_table[CTI_sfix]), "fix", MODE_FLOAT, MODE_INT);
  init_interclass_conv_libfuncs ((convert_optab_table[CTI_ufix]), "fixuns", MODE_FLOAT, MODE_INT);
  init_intraclass_conv_libfuncs ((convert_optab_table[CTI_sext]), "extend", MODE_FLOAT, 1);
  init_intraclass_conv_libfuncs ((convert_optab_table[CTI_trunc]), "trunc", MODE_FLOAT, 0);
  if (global_trees[TI_COMPLEX_DOUBLE_TYPE])
    (optab_table[OTI_abs])->handlers[((global_trees[TI_COMPLEX_DOUBLE_TYPE])->type.mode)].libfunc
      = init_one_libfunc ("cabs");
  (optab_table[OTI_ffs])->handlers[(int) mode_for_size (32, MODE_INT, 0)].libfunc
    = init_one_libfunc ("ffs");
  (libfunc_table[LTI_abort]) = init_one_libfunc ("abort");
  (libfunc_table[LTI_memcpy]) = init_one_libfunc ("memcpy");
  (libfunc_table[LTI_memmove]) = init_one_libfunc ("memmove");
  (libfunc_table[LTI_memcmp]) = init_one_libfunc ("memcmp");
  (libfunc_table[LTI_memset]) = init_one_libfunc ("memset");
  (libfunc_table[LTI_setbits]) = init_one_libfunc ("__setbits");
  (libfunc_table[LTI_unwind_resume]) = init_one_libfunc (0
         ? "_Unwind_SjLj_Resume"
         : "_Unwind_Resume");
  (libfunc_table[LTI_setjmp]) = init_one_libfunc ("__builtin_setjmp");
  (libfunc_table[LTI_longjmp]) = init_one_libfunc ("__builtin_longjmp");
  (libfunc_table[LTI_unwind_sjlj_register]) = init_one_libfunc ("_Unwind_SjLj_Register");
  (libfunc_table[LTI_unwind_sjlj_unregister])
    = init_one_libfunc ("_Unwind_SjLj_Unregister");
  (libfunc_table[LTI_profile_function_entry])
    = init_one_libfunc ("__cyg_profile_func_enter");
  (libfunc_table[LTI_profile_function_exit])
    = init_one_libfunc ("__cyg_profile_func_exit");
  (libfunc_table[LTI_gcov_flush]) = init_one_libfunc ("__gcov_flush");
  if (1)
    trap_rtx = gen_rtx_fmt_ee (EQ, VOIDmode, (rtx) 0, (rtx) 0);
  targetm.init_libfuncs ();
}
rtx
gen_cond_trap (enum rtx_code code , rtx op1,
        rtx op2 , rtx tcode )
{
  enum machine_mode mode = ((enum machine_mode) (op1)->mode);
  enum insn_code icode;
  rtx insn;
  if (!1)
    return 0;
  if (mode == VOIDmode)
    return 0;
  icode = (optab_table[OTI_cmp])->handlers[(int) mode].insn_code;
  if (icode == CODE_FOR_nothing)
    return 0;
  start_sequence ();
  op1 = prepare_operand (icode, op1, 0, mode, mode, 0);
  op2 = prepare_operand (icode, op2, 1, mode, mode, 0);
  if (!op1 || !op2)
    {
      end_sequence ();
      return 0;
    }
  emit_insn ((insn_data[icode].genfun) (op1, op2));
  ((trap_rtx)->code = (code));
  insn = gen_conditional_trap (trap_rtx, tcode);
  if (insn)
    {
      emit_insn (insn);
      insn = get_insns ();
    }
  end_sequence ();
  return insn;
}
const struct ggc_root_tab gt_ggc_r_gt_optabs_h[] = {
  {
    &trap_rtx,
    1,
    sizeof (trap_rtx),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
unsigned long g_switch_value;
unsigned char g_switch_set;
unsigned char exit_after_options;
unsigned char extra_warnings;
unsigned char warn_larger_than;
long larger_than_size;
int warn_strict_aliasing;
static unsigned char maybe_warn_unused_parameter;
enum debug_info_type write_symbols = NO_DEBUG;
enum debug_info_level debug_info_level = DINFO_LEVEL_NONE;
unsigned char use_gnu_debug_info_extensions;
static unsigned int columns = 80;
static const char undocumented_msg[] = "This switch lacks documentation";
static unsigned char profile_arc_flag_set, flag_profile_values_set;
static unsigned char flag_unroll_loops_set, flag_tracer_set;
static unsigned char flag_value_profile_transformations_set;
static unsigned char flag_peel_loops_set, flag_branch_probabilities_set;
const char **in_fnames;
unsigned num_in_fnames;
unsigned cur_in_fname;
static size_t find_opt (const char *, int);
static int common_handle_option (size_t scode, const char *arg, int value1);
static void handle_param (const char *);
static void set_Wextra (int);
static unsigned int handle_option (const char **argv, unsigned int lang_mask);
static char *write_langs (unsigned int lang_mask);
static void complain_wrong_lang (const char *, const struct cl_option *,
     unsigned int lang_mask);
static void handle_options (unsigned int, const char **, unsigned int);
static void wrap_help (const char *help, const char *item, unsigned int);
static void print_help (void);
static void print_param_help (void);
static void print_filtered_help (unsigned int flag);
static unsigned int print_switch (const char *text, unsigned int indent1);
static void set_debug_level (enum debug_info_type type, int extended,
        const char *arg);
static size_t
find_opt (const char *input, int lang_mask)
{
  size_t mn, mx, md, opt_len;
  size_t match_wrong_lang;
  int comp;
  mn = 0;
  mx = cl_options_count;
  while (mx - mn > 1)
    {
      md = (mn + mx) / 2;
      opt_len = cl_options[md].opt_len;
      comp = strncmp (input, cl_options[md].opt_text + 1, opt_len);
      if (comp < 0)
 mx = md;
      else
 mn = md;
    }
  match_wrong_lang = cl_options_count;
  do
    {
      const struct cl_option *opt = &cl_options[mn];
      if (!strncmp (input, opt->opt_text + 1, opt->opt_len))
 {
   if ((opt->flags & lang_mask)
       && (input[opt->opt_len] == '\0' || (opt->flags & (1 << 24))))
     return mn;
   if (match_wrong_lang == cl_options_count)
     match_wrong_lang = mn;
 }
      mn = opt->back_chain;
    }
  while (mn != cl_options_count);
  return match_wrong_lang;
}
static int
integral_argument (const char *arg)
{
  const char *p = arg;
  while (*p && (_sch_istable[(*p) & 0xff] & (unsigned short)(_sch_isdigit)))
    p++;
  if (*p == '\0')
    return atoi (arg);
  return -1;
}
static char *
write_langs (unsigned int mask)
{
  unsigned int n = 0, len = 0;
  const char *lang_name;
  char *result;
  for (n = 0; (lang_name = lang_names[n]) != 0; n++)
    if (mask & (1U << n))
      len += strlen (lang_name) + 1;
  result = xmalloc (len);
  len = 0;
  for (n = 0; (lang_name = lang_names[n]) != 0; n++)
    if (mask & (1U << n))
      {
 if (len)
   result[len++] = '/';
 strcpy (result + len, lang_name);
 len += strlen (lang_name);
      }
  result[len] = 0;
  return result;
}
static void
complain_wrong_lang (const char *text, const struct cl_option *option,
       unsigned int lang_mask)
{
  char *ok_langs, *bad_lang;
  ok_langs = write_langs (option->flags);
  bad_lang = write_langs (lang_mask);
  warning ("command line option \"%s\" is valid for %s but not for %s",
    text, ok_langs, bad_lang);
  free (ok_langs);
  free (bad_lang);
}
static unsigned int
handle_option (const char **argv, unsigned int lang_mask)
{
  size_t opt_index;
  const char *opt, *arg = 0;
  char *dup = 0;
  int value1 = 1;
  unsigned int result = 0;
  const struct cl_option *option;
  opt = argv[0];
  if ((opt[1] == 'W' || opt[1] == 'f')
      && opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-')
    {
      size_t len = strlen (opt) - 3;
      dup = xmalloc (len + 1);
      dup[0] = '-';
      dup[1] = opt[1];
      memcpy (dup + 2, opt + 5, len - 2 + 1);
      opt = dup;
      value1 = 0;
    }
  opt_index = find_opt (opt + 1, lang_mask | (1 << 29));
  if (opt_index == cl_options_count)
    goto done;
  option = &cl_options[opt_index];
  if (!value1 && (option->flags & (1 << 26)))
    goto done;
  result = 1;
  if (option->flags & (1 << 24))
    {
      arg = argv[0] + cl_options[opt_index].opt_len + 1;
      if (!value1)
 arg += strlen ("no-");
      if (*arg == '\0' && !(option->flags & (1 << 27)))
 {
   if (option->flags & (1 << 25))
     {
       arg = argv[1];
       result = 2;
     }
   else
     arg = ((void *)0);
 }
    }
  else if (option->flags & (1 << 25))
    {
      arg = argv[1];
      result = 2;
    }
  if (!(option->flags & (lang_mask | (1 << 29))))
    {
      complain_wrong_lang (argv[0], option, lang_mask);
      goto done;
    }
  if (arg == ((void *)0) && (option->flags & ((1 << 24) | (1 << 25))))
    {
      if (!lang_hooks.missing_argument (opt, opt_index))
 error ("missing argument to \"%s\"", opt);
      goto done;
    }
  if (arg && (option->flags & (1 << 28)))
    {
      value1 = integral_argument (arg);
      if (value1 == -1)
 {
   error ("argument to \"%s\" should be a non-negative integer",
   option->opt_text);
   goto done;
 }
    }
  if (option->flag_var)
    {
      if (option->has_set_value)
 {
   if (value1)
     *option->flag_var = option->set_value;
   else
     *option->flag_var = !option->set_value;
 }
      else
 *option->flag_var = value1;
    }
  if (option->flags & lang_mask)
    if (lang_hooks.handle_option (opt_index, arg, value1) == 0)
      result = 0;
  if (result && (option->flags & (1 << 29)))
    if (common_handle_option (opt_index, arg, value1) == 0)
      result = 0;
 done:
  if (dup)
    free (dup);
  return result;
}
static void
handle_options (unsigned int argc, const char **argv, unsigned int lang_mask)
{
  unsigned int n, i;
  for (i = 1; i < argc; i += n)
    {
      const char *opt = argv[i];
      if (opt[0] != '-' || opt[1] == '\0')
 {
   if (main_input_filename == ((void *)0))
     main_input_filename = opt;
   add_input_filename (opt);
   n = 1;
   continue;
 }
      n = handle_option (argv + i, lang_mask);
      if (!n)
 {
   n = 1;
   error ("unrecognized command line option \"%s\"", opt);
 }
    }
}
void
add_input_filename (const char *filename)
{
  num_in_fnames++;
  in_fnames = xrealloc (in_fnames, num_in_fnames * sizeof (in_fnames[0]));
  in_fnames[num_in_fnames - 1] = filename;
}
void
decode_options (unsigned int argc, const char **argv)
{
  unsigned int i, lang_mask;
  lang_mask = lang_hooks.init_options (argc, argv);
  lang_hooks.initialize_diagnostics (global_dc);
  for (i = 1; i < argc; i++)
    {
      if (!strcmp (argv[i], "-O"))
 {
   optimize = 1;
   optimize_size = 0;
 }
      else if (argv[i][0] == '-' && argv[i][1] == 'O')
 {
   const char *p = &argv[i][2];
   if ((p[0] == 's') && (p[1] == 0))
     {
       optimize_size = 1;
       optimize = 2;
     }
   else
     {
       const int optimize_val = read_integral_parameter (p, p - 2, -1);
       if (optimize_val != -1)
  {
    optimize = optimize_val;
    optimize_size = 0;
  }
     }
 }
    }
  if (!optimize)
    {
      flag_merge_constants = 0;
    }
  if (optimize >= 1)
    {
      flag_defer_pop = 1;
      flag_thread_jumps = 1;
      flag_guess_branch_prob = 1;
      flag_cprop_registers = 1;
      flag_loop_optimize = 1;
      flag_if_conversion = 1;
      flag_if_conversion2 = 1;
      flag_tree_ccp = 1;
      flag_tree_dce = 1;
      flag_tree_dom = 1;
      flag_tree_dse = 1;
      flag_tree_pre = 1;
      flag_tree_ter = 1;
      flag_tree_live_range_split = 1;
      flag_tree_sra = 1;
      flag_tree_copyrename = 1;
      flag_tree_fre = 1;
      if (!optimize_size)
 {
   flag_tree_ch = 1;
 }
    }
  if (optimize >= 2)
    {
      flag_crossjumping = 1;
      flag_optimize_sibling_calls = 1;
      flag_cse_follow_jumps = 1;
      flag_cse_skip_blocks = 1;
      flag_gcse = 1;
      flag_expensive_optimizations = 1;
      flag_strength_reduce = 1;
      flag_rerun_cse_after_loop = 1;
      flag_rerun_loop_opt = 1;
      flag_caller_saves = 1;
      flag_force_mem = 1;
      flag_peephole2 = 1;
      flag_schedule_insns = 1;
      flag_schedule_insns_after_reload = 1;
      flag_regmove = 1;
      flag_strict_aliasing = 1;
      flag_delete_null_pointer_checks = 1;
      flag_reorder_blocks = 1;
      flag_reorder_functions = 1;
      flag_unit_at_a_time = 1;
    }
  if (optimize >= 3)
    {
      flag_inline_functions = 1;
      flag_unswitch_loops = 1;
      flag_gcse_after_reload = 1;
    }
  if (optimize < 2 || optimize_size)
    {
      align_loops = 1;
      align_jumps = 1;
      align_labels = 1;
      align_functions = 1;
      flag_reorder_blocks = 0;
      flag_reorder_blocks_and_partition = 0;
    }
  if (optimize_size)
    {
      set_param_value ("max-inline-insns-single", 5);
      set_param_value ("max-inline-insns-auto", 5);
      set_param_value ("max-inline-insns-rtl", 10);
      flag_inline_functions = 1;
    }
  flag_signed_char = 1;
  flag_short_enums = 2;
  target_flags = 0;
  set_target_switch ("");
  optimization_options ((optimize), (optimize_size));
  handle_options (argc, argv, lang_mask);
  if (flag_pie)
    flag_pic = flag_pie;
  if (flag_pic && !flag_pie)
    flag_shlib = 1;
  if (flag_no_inline == 2)
    flag_no_inline = 0;
  else
    flag_really_no_inline = flag_no_inline;
  if (optimize == 0)
    {
      flag_no_inline = 1;
      warn_inline = 0;
      if (warn_uninitialized == 1)
 warning ("-Wuninitialized is not supported without -O");
    }
  if (flag_really_no_inline == 2)
    flag_really_no_inline = flag_no_inline;
  if (flag_exceptions && flag_reorder_blocks_and_partition)
    {
      warning
     ("-freorder-blocks-and-partition does not work with exceptions");
      flag_reorder_blocks_and_partition = 0;
      flag_reorder_blocks = 1;
    }
}
static int
common_handle_option (size_t scode, const char *arg, int value1)
{
  enum opt_code code = (enum opt_code) scode;
  switch (code)
    {
    case OPT__help:
      print_help ();
      exit_after_options = 1;
      break;
    case OPT__param:
      handle_param (arg);
      break;
    case OPT__target_help:
      display_target_options ();
      exit_after_options = 1;
      break;
    case OPT__version:
      print_version (stderr, "");
      exit_after_options = 1;
      break;
    case OPT_G:
      g_switch_value = value1;
      g_switch_set = 1;
      break;
    case OPT_O:
    case OPT_Os:
      break;
    case OPT_W:
      set_Wextra (value1);
      break;
    case OPT_Wextra:
      set_Wextra (value1);
      break;
    case OPT_Wlarger_than_:
      larger_than_size = value1;
      warn_larger_than = value1 != -1;
      break;
    case OPT_Wstrict_aliasing:
    case OPT_Wstrict_aliasing_:
      warn_strict_aliasing = value1;
      break;
    case OPT_Wunused:
      set_Wunused (value1);
      break;
    case OPT_aux_info:
    case OPT_aux_info_:
      aux_info_file_name = arg;
      flag_gen_aux_info = 1;
      break;
    case OPT_auxbase:
      aux_base_name = arg;
      break;
    case OPT_auxbase_strip:
      {
 char *tmp = xstrdup (arg);
 strip_off_ending (tmp, strlen (tmp));
 if (tmp[0])
   aux_base_name = tmp;
      }
      break;
    case OPT_d:
      decode_d_option (arg);
      break;
    case OPT_dumpbase:
      dump_base_name = arg;
      break;
    case OPT_falign_functions_:
      align_functions = value1;
      break;
    case OPT_falign_jumps_:
      align_jumps = value1;
      break;
    case OPT_falign_labels_:
      align_labels = value1;
      break;
    case OPT_falign_loops_:
      align_loops = value1;
      break;
    case OPT_fbranch_probabilities:
      flag_branch_probabilities_set = 1;
      break;
    case OPT_fcall_used_:
      fix_register (arg, 0, 1);
      break;
    case OPT_fcall_saved_:
      fix_register (arg, 0, 0);
      break;
    case OPT_fdiagnostics_show_location_:
      if (!strcmp (arg, "once"))
 ((global_dc)->printer->prefixing_rule) = DIAGNOSTICS_SHOW_PREFIX_ONCE;
      else if (!strcmp (arg, "every-line"))
 ((global_dc)->printer->prefixing_rule)
   = DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE;
      else
 return 0;
      break;
    case OPT_fdump_:
      if (!dump_switch_p (arg))
 return 0;
      break;
    case OPT_ffast_math:
      set_fast_math_flags (value1);
      break;
    case OPT_ffixed_:
      fix_register (arg, 1, 1);
      break;
    case OPT_finline_limit_:
    case OPT_finline_limit_eq:
      set_param_value ("max-inline-insns-single", value1 / 2);
      set_param_value ("max-inline-insns-auto", value1 / 2);
      set_param_value ("max-inline-insns-rtl", value1);
      break;
    case OPT_fmessage_length_:
      pp_base_set_line_maximum_length ((global_dc->printer), value1);
      break;
    case OPT_fpeel_loops:
      flag_peel_loops_set = 1;
      break;
    case OPT_fprofile_arcs:
      profile_arc_flag_set = 1;
      break;
    case OPT_fprofile_use:
      if (!flag_branch_probabilities_set)
        flag_branch_probabilities = value1;
      if (!flag_profile_values_set)
        flag_profile_values = value1;
      if (!flag_unroll_loops_set)
        flag_unroll_loops = value1;
      if (!flag_peel_loops_set)
        flag_peel_loops = value1;
      if (!flag_tracer_set)
        flag_tracer = value1;
      if (!flag_value_profile_transformations_set)
        flag_value_profile_transformations = value1;
      break;
    case OPT_fprofile_generate:
      if (!profile_arc_flag_set)
        profile_arc_flag = value1;
      if (!flag_profile_values_set)
        flag_profile_values = value1;
      if (!flag_value_profile_transformations_set)
        flag_value_profile_transformations = value1;
      break;
    case OPT_fprofile_values:
      flag_profile_values_set = 1;
      break;
    case OPT_fvpt:
      flag_value_profile_transformations_set = value1;
      break;
    case OPT_frandom_seed:
      if (value1)
 return 0;
      flag_random_seed = ((void *)0);
      break;
    case OPT_frandom_seed_:
      flag_random_seed = arg;
      break;
    case OPT_fsched_verbose_:
      fix_sched_param ("verbose", arg);
      break;
    case OPT_fsched_stalled_insns_:
      flag_sched_stalled_insns = value1;
      if (flag_sched_stalled_insns == 0)
 flag_sched_stalled_insns = -1;
      break;
    case OPT_fsched_stalled_insns_dep_:
      flag_sched_stalled_insns_dep = value1;
      break;
    case OPT_fstack_limit:
      if (value1)
 return 0;
      stack_limit_rtx = (rtx) 0;
      break;
    case OPT_fstack_limit_register_:
      {
 int reg = decode_reg_name (arg);
 if (reg < 0)
   error ("unrecognized register name \"%s\"", arg);
 else
   stack_limit_rtx = gen_rtx_REG ((0 ? DImode : SImode), reg);
      }
      break;
    case OPT_fstack_limit_symbol_:
      stack_limit_rtx = gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (ggc_alloc_string((arg), -1)));
      break;
    case OPT_ftls_model_:
      if (!strcmp (arg, "global-dynamic"))
 flag_tls_default = TLS_MODEL_GLOBAL_DYNAMIC;
      else if (!strcmp (arg, "local-dynamic"))
 flag_tls_default = TLS_MODEL_LOCAL_DYNAMIC;
      else if (!strcmp (arg, "initial-exec"))
 flag_tls_default = TLS_MODEL_INITIAL_EXEC;
      else if (!strcmp (arg, "local-exec"))
 flag_tls_default = TLS_MODEL_LOCAL_EXEC;
      else
 warning ("unknown tls-model \"%s\"", arg);
      break;
    case OPT_ftracer:
      flag_tracer_set = 1;
      break;
    case OPT_ftree_points_to_:
      if (!strcmp (arg, "andersen"))
        flag_tree_points_to = PTA_ANDERSEN;
      else if (!strcmp (arg, "none"))
 flag_tree_points_to = PTA_NONE;
      else
 {
   warning ("`%s`: unknown points-to analysis algorithm", arg);
   return 0;
 }
      break;
    case OPT_funroll_loops:
      flag_unroll_loops_set = 1;
      break;
    case OPT_g:
      set_debug_level (NO_DEBUG, 1, arg);
      break;
    case OPT_gcoff:
      set_debug_level (SDB_DEBUG, 0, arg);
      break;
    case OPT_gdwarf_2:
      set_debug_level (DWARF2_DEBUG, 0, arg);
      break;
    case OPT_ggdb:
      set_debug_level (NO_DEBUG, 2, arg);
      break;
    case OPT_gstabs:
    case OPT_gstabs_:
      set_debug_level (DBX_DEBUG, code == OPT_gstabs_, arg);
      break;
    case OPT_gvms:
      set_debug_level (VMS_DEBUG, 0, arg);
      break;
    case OPT_gxcoff:
    case OPT_gxcoff_:
      set_debug_level (XCOFF_DEBUG, code == OPT_gxcoff_, arg);
      break;
    case OPT_m:
      set_target_switch (arg);
      break;
    case OPT_o:
      asm_file_name = arg;
      break;
    case OPT_pedantic_errors:
      flag_pedantic_errors = pedantic = 1;
      break;
    default:
      if (cl_options[scode].flag_var)
 break;
      abort ();
    }
  return 1;
}
static void
handle_param (const char *carg)
{
  char *equal, *arg;
  int value1;
  arg = xstrdup (carg);
  equal = strchr (arg, '=');
  if (!equal)
    error ("%s: --param arguments should be of the form NAME=VALUE", arg);
  else
    {
      value1 = integral_argument (equal + 1);
      if (value1 == -1)
 error ("invalid --param value `%s'", equal + 1);
      else
 {
   *equal = '\0';
   set_param_value (arg, value1);
 }
    }
  free (arg);
}
static void
set_Wextra (int setting)
{
  extra_warnings = setting;
  warn_unused_value = setting;
  warn_unused_parameter = (setting && maybe_warn_unused_parameter);
  if (setting == 0)
    warn_uninitialized = 0;
  else if (warn_uninitialized != 1)
    warn_uninitialized = 2;
}
void
set_Wunused (int setting)
{
  warn_unused_function = setting;
  warn_unused_label = setting;
  maybe_warn_unused_parameter = setting;
  warn_unused_parameter = (setting && extra_warnings);
  warn_unused_variable = setting;
  warn_unused_value = setting;
}
void
set_fast_math_flags (int set)
{
  flag_trapping_math = !set;
  flag_unsafe_math_optimizations = set;
  flag_finite_math_only = set;
  flag_errno_math = !set;
  if (set)
    {
      flag_signaling_nans = 0;
      flag_rounding_math = 0;
    }
}
unsigned char
fast_math_flags_set_p (void)
{
  return (!flag_trapping_math
   && flag_unsafe_math_optimizations
   && flag_finite_math_only
   && !flag_errno_math);
}
static void
set_debug_level (enum debug_info_type type, int extended, const char *arg)
{
  static unsigned char type_explicit;
  use_gnu_debug_info_extensions = extended;
  if (type == NO_DEBUG)
    {
      if (write_symbols == NO_DEBUG)
 {
   write_symbols = DWARF2_DEBUG;
   if (extended == 2)
     {
       write_symbols = DWARF2_DEBUG;
     }
   if (write_symbols == NO_DEBUG)
     warning ("target system does not support debug output");
 }
    }
  else
    {
      if (type_explicit && write_symbols != NO_DEBUG && type != write_symbols)
 error ("debug format \"%s\" conflicts with prior selection",
        debug_type_names[type]);
      write_symbols = type;
      type_explicit = 1;
    }
  if (*arg == '\0')
    {
      if (!debug_info_level)
 debug_info_level = 2;
    }
  else
    {
      debug_info_level = integral_argument (arg);
      if (debug_info_level == (unsigned int) -1)
 error ("unrecognised debug output level \"%s\"", arg);
      else if (debug_info_level > 3)
 error ("debug output level %s is too high", arg);
    }
}
static void
print_help (void)
{
  size_t i;
  const char *p;
  do { (p) = getenv ("COLUMNS"); } while (0);
  if (p)
    {
      int value1 = atoi (p);
      if (value1 > 0)
 columns = value1;
    }
  puts ("The following options are language-independent:\n");
  print_filtered_help ((1 << 29));
  print_param_help ();
  for (i = 0; lang_names[i]; i++)
    {
      printf ("The %s front end recognizes the following options:\n\n",
       lang_names[i]);
      print_filtered_help (1U << i);
    }
  display_target_options ();
}
static void
print_param_help (void)
{
  size_t i;
  puts ("The --param option recognizes the following as parameters:\n");
  for (i = 0; i < LAST_PARAM; i++)
    {
      const char *help = compiler_params[i].help;
      const char *param = compiler_params[i].option;
      if (help == ((void *)0) || *help == '\0')
 help = undocumented_msg;
      help = help;
      wrap_help (help, param, strlen (param));
    }
  putchar ('\n');
}
static void
print_filtered_help (unsigned int flag)
{
  unsigned int i, len, filter, indent1 = 0;
  unsigned char duplicates = 0;
  const char *help, *opt, *tab;
  static char *printed;
  if (flag == (1 << 29))
    {
      filter = flag;
      if (!printed)
 printed = xmalloc (cl_options_count);
      memset (printed, 0, cl_options_count);
    }
  else
    {
      filter = flag | (1 << 29);
      for (i = 0; i < cl_options_count; i++)
 {
   if ((cl_options[i].flags & filter) != flag)
     continue;
   if (cl_options[i].flags & (1 << 30))
     continue;
   if (printed[i])
     {
       duplicates = 1;
       indent1 = print_switch (cl_options[i].opt_text, indent1);
     }
 }
      if (duplicates)
 {
   putchar ('\n');
   putchar ('\n');
 }
    }
  for (i = 0; i < cl_options_count; i++)
    {
      if ((cl_options[i].flags & filter) != flag)
 continue;
      if (cl_options[i].flags & (1 << 30))
 continue;
      if (printed[i])
 continue;
      printed[i] = 1;
      help = cl_options[i].help;
      if (!help)
 help = undocumented_msg;
      help = help;
      tab = strchr (help, '\t');
      if (tab)
 {
   len = tab - help;
   opt = help;
   help = tab + 1;
 }
      else
 {
   opt = cl_options[i].opt_text;
   len = strlen (opt);
 }
      wrap_help (help, opt, len);
    }
  putchar ('\n');
}
static unsigned int
print_switch (const char *text, unsigned int indent1)
{
  unsigned int len = strlen (text) + 1;
  if (indent1)
    {
      putchar (',');
      if (indent1 + len > columns)
 {
   putchar ('\n');
   putchar (' ');
   indent1 = 1;
 }
    }
  else
    putchar (' ');
  putchar (' ');
  fputs_unlocked (text, stdout);
  return indent1 + len + 1;
}
static void
wrap_help (const char *help, const char *item, unsigned int item_width)
{
  unsigned int col_width = 27;
  unsigned int remaining, room, len;
  remaining = strlen (help);
  do
    {
      room = columns - 3 - ((col_width) > (item_width) ? (col_width) : (item_width));
      if (room > columns)
 room = 0;
      len = remaining;
      if (room < len)
 {
   unsigned int i;
   for (i = 0; help[i]; i++)
     {
       if (i >= room && len != remaining)
  break;
       if (help[i] == ' ')
  len = i;
       else if ((help[i] == '-' || help[i] == '/')
         && help[i + 1] != ' '
         && i > 0 && (_sch_istable[(help[i - 1]) & 0xff] & (unsigned short)(_sch_isalpha)))
  len = i + 1;
     }
 }
      printf( "  %-*.*s %.*s\n", col_width, item_width, item, len, help);
      item_width = 0;
      while (help[len] == ' ')
 len++;
      help += len;
      remaining -= len;
    }
  while (remaining);
}
param_info *compiler_params;
static size_t num_compiler_params;
void
add_params (const param_info params[], size_t n)
{
  compiler_params = xrealloc (compiler_params,
         (num_compiler_params + n) * sizeof (param_info));
  memcpy (compiler_params + num_compiler_params,
   params,
   n * sizeof (param_info));
  num_compiler_params += n;
}
void
set_param_value (const char *name, int value1)
{
  size_t i;
  if (value1 == (-1))
    abort ();
  for (i = 0; i < num_compiler_params; ++i)
    if (strcmp (compiler_params[i].option, name) == 0)
      {
 compiler_params[i].value1 = value1;
 return;
      }
  error ("invalid parameter `%s'", name);
}
static int reload_cse_noop_set_p (rtx);
static void reload_cse_simplify (rtx, rtx);
static void reload_cse_regs_1 (rtx);
static int reload_cse_simplify_set (rtx, rtx);
static int reload_cse_simplify_operands (rtx, rtx);
static void reload_combine (void);
static void reload_combine_note_use (rtx *, rtx);
static void reload_combine_note_store (rtx, rtx, void *);
static void reload_cse_move2add (rtx);
static void move2add_note_store (rtx, rtx, void *);
void
reload_cse_regs (rtx first )
{
  reload_cse_regs_1 (first);
  reload_combine ();
  reload_cse_move2add (first);
  if (flag_expensive_optimizations)
    reload_cse_regs_1 (first);
}
static int
reload_cse_noop_set_p (rtx set)
{
  if (cselib_reg_set_mode ((((set)->u.fld[0]).rtx1)) != ((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode))
    return 0;
  return rtx_equal_for_cselib_p ((((set)->u.fld[0]).rtx1), (((set)->u.fld[1]).rtx1));
}
static void
reload_cse_simplify (rtx insn, rtx testreg)
{
  rtx body = (((insn)->u.fld[5]).rtx1);
  if (((enum rtx_code) (body)->code) == SET)
    {
      int count = 0;
      count += reload_cse_simplify_set (body, insn);
      if (!count && reload_cse_noop_set_p (body))
 {
   rtx value1 = (((body)->u.fld[0]).rtx1);
   if ((((enum rtx_code) (value1)->code) == REG)
       && ! (((value1))->return_val))
     value1 = 0;
   delete_insn_and_edges (insn);
   return;
 }
      if (count > 0)
 apply_change_group ();
      else
 reload_cse_simplify_operands (insn, testreg);
    }
  else if (((enum rtx_code) (body)->code) == PARALLEL)
    {
      int i;
      int count = 0;
      rtx value1 = (rtx) 0;
      for (i = (((((body)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; --i)
 {
   rtx part = (((((body)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (part)->code) == SET)
     {
       if (! reload_cse_noop_set_p (part))
  break;
       if ((((enum rtx_code) ((((part)->u.fld[0]).rtx1))->code) == REG)
    && ((((((part)->u.fld[0]).rtx1)))->return_val))
  {
    if (value1)
      break;
    value1 = (((part)->u.fld[0]).rtx1);
  }
     }
   else if (((enum rtx_code) (part)->code) != CLOBBER)
     break;
 }
      if (i < 0)
 {
   delete_insn_and_edges (insn);
   return;
 }
      for (i = (((((body)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; --i)
 if (((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[i]))->code) == SET)
   count += reload_cse_simplify_set ((((((body)->u.fld[0]).rtvec1))->elem[i]), insn);
      if (count > 0)
 apply_change_group ();
      else
 reload_cse_simplify_operands (insn, testreg);
    }
}
static void
reload_cse_regs_1 (rtx first)
{
  rtx insn;
  rtx testreg = gen_rtx_REG (VOIDmode, -1);
  cselib_init (1);
  init_alias_analysis ();
  for (insn = first; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 reload_cse_simplify (insn, testreg);
      cselib_process_insn (insn);
    }
  end_alias_analysis ();
  cselib_finish ();
}
static int
reload_cse_simplify_set (rtx set, rtx insn)
{
  int did_change = 0;
  int dreg;
  rtx src;
  enum reg_class dclass;
  int old_cost;
  cselib_val *val;
  struct elt_loc_list *l;
  dreg = true_regnum ((((set)->u.fld[0]).rtx1));
  if (dreg < 0)
    return 0;
  src = (((set)->u.fld[1]).rtx1);
  if (side_effects_p (src) || true_regnum (src) >= 0)
    return 0;
  dclass = (regclass_map[dreg]);
  val = cselib_lookup (src, ((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode), 0);
  if (! val)
    return 0;
  if ((((enum rtx_code) (src)->code) == MEM))
    old_cost = ix86_memory_move_cost ((((enum machine_mode) (src)->mode)), (dclass), (1));
  else if ((((enum rtx_code) (src)->code) == REG))
    old_cost = ix86_register_move_cost ((((enum machine_mode) (src)->mode)), ((regclass_map[(((src)->u.fld[0]).rtuint)])), (dclass))
                                             ;
  else
    old_cost = rtx_cost (src, SET);
  for (l = val->locs; l; l = l->next)
    {
      rtx this_rtx = l->loc;
      int this_cost;
      if (((rtx_class[(int) (((enum rtx_code) (this_rtx)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (this_rtx)->code) == CONST_VECTOR) && ! references_value_p (this_rtx, 0))
 {
   this_cost = rtx_cost (this_rtx, SET);
 }
      else if ((((enum rtx_code) (this_rtx)->code) == REG))
 {
     this_cost = ix86_register_move_cost ((((enum machine_mode) (this_rtx)->mode)), ((regclass_map[(((this_rtx)->u.fld[0]).rtuint)])), (dclass))
                ;
 }
      else
 continue;
      if (this_cost < old_cost
   || (this_cost == old_cost
       && (((enum rtx_code) (this_rtx)->code) == REG)
       && !(((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == REG)))
 {
   validate_change (insn, &(((set)->u.fld[1]).rtx1), copy_rtx (this_rtx), 1);
   old_cost = this_cost, did_change = 1;
 }
    }
  return did_change;
}
static int
reload_cse_simplify_operands (rtx insn, rtx testreg)
{
  int i, j;
  HARD_REG_SET equiv_regs[30];
  const char *constraints[30];
  int *alternative_reject;
  int *alternative_nregs;
  int *op_alt_regno[30];
  int *alternative_order;
  extract_insn (insn);
  if (recog_data.n_alternatives == 0 || recog_data.n_operands == 0)
    return 0;
  if (! constrain_operands (1))
    _fatal_insn_not_found (insn, "gcc.c", 563507, "?");
  alternative_reject = C_alloca(recog_data.n_alternatives * sizeof (int));
  alternative_nregs = C_alloca(recog_data.n_alternatives * sizeof (int));
  alternative_order = C_alloca(recog_data.n_alternatives * sizeof (int));
  memset (alternative_reject, 0, recog_data.n_alternatives * sizeof (int));
  memset (alternative_nregs, 0, recog_data.n_alternatives * sizeof (int));
  for (i = 0; i < recog_data.n_operands; i++)
    {
      cselib_val *v;
      struct elt_loc_list *l;
      rtx op;
      enum machine_mode mode;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (equiv_regs[i]); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      if (((enum rtx_code) (recog_data.operand[i])->code) == CODE_LABEL
   || (((rtx_class[(int) (((enum rtx_code) (recog_data.operand[i])->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (recog_data.operand[i])->code) == CONST_VECTOR)
       && recog_data.operand_mode[i] == VOIDmode))
 continue;
      op = recog_data.operand[i];
      mode = ((enum machine_mode) (op)->mode);
      v = cselib_lookup (op, recog_data.operand_mode[i], 0);
      if (! v)
 continue;
      for (l = v->locs; l; l = l->next)
 if ((((enum rtx_code) (l->loc)->code) == REG))
   ((equiv_regs[i])[((((l->loc)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((l->loc)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
    }
  for (i = 0; i < recog_data.n_operands; i++)
    {
      enum machine_mode mode;
      int regno;
      const char *p;
      op_alt_regno[i] = C_alloca(recog_data.n_alternatives * sizeof (int));
      for (j = 0; j < recog_data.n_alternatives; j++)
 op_alt_regno[i][j] = -1;
      p = constraints[i] = recog_data.constraints[i];
      mode = recog_data.operand_mode[i];
      j = 0;
      while (*p != '\0')
 {
   char c = *p++;
   if (c == ',')
     j++;
   else if (c == '?')
     alternative_reject[j] += 3;
   else if (c == '!')
     alternative_reject[j] += 300;
 }
      regno = true_regnum (recog_data.operand[i]);
      if (regno >= 0
   || constraints[i][0] == '='
   || constraints[i][0] == '+')
 continue;
      for (regno = 0; regno < 53; regno++)
 {
   int class = (int) NO_REGS;
   if (! (!!((equiv_regs[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
     continue;
   (((testreg)->u.fld[0]).rtuint) = regno;
   ((testreg)->mode = (mode));
   j = 0;
   p = constraints[i];
   for (;;)
     {
       char c = *p;
       switch (c)
  {
  case '=': case '+': case '?':
  case '#': case '&': case '!':
  case '*': case '%':
  case '0': case '1': case '2': case '3': case '4':
  case '5': case '6': case '7': case '8': case '9':
  case 'm': case '<': case '>': case 'V': case 'o':
  case 'E': case 'F': case 'G': case 'H':
  case 's': case 'i': case 'n':
  case 'I': case 'J': case 'K': case 'L':
  case 'M': case 'N': case 'O': case 'P':
  case 'p': case 'X':
    break;
  case 'g': case 'r':
    class = reg_class_subunion[(int) class][(int) GENERAL_REGS];
    break;
  default:
    class
      = (reg_class_subunion
         [(int) class]
         [(int) (((unsigned char) c) == 'r' ? GENERAL_REGS : NO_REGS)]);
    break;
  case ',': case '\0':
    if (op_alt_regno[i][j] == -1
        && reg_fits_class_p (testreg, class, 0, mode)
        && (((enum rtx_code) (recog_data.operand[i])->code) != CONST_INT
     || (rtx_cost (recog_data.operand[i], SET)
         > rtx_cost (testreg, SET))))
      {
        alternative_nregs[j]++;
        op_alt_regno[i][j] = regno;
      }
    j++;
    break;
  }
       p += 1;
       if (c == '\0')
  break;
     }
 }
    }
  for (i = j = 0; i < recog_data.n_alternatives; i++)
    if (alternative_reject[i] <= alternative_reject[which_alternative])
      alternative_order[j++] = i;
  recog_data.n_alternatives = j;
  for (i = 0; i < recog_data.n_alternatives - 1; i++)
    {
      int best = i;
      int best_reject = alternative_reject[alternative_order[i]];
      int best_nregs = alternative_nregs[alternative_order[i]];
      int tmp;
      for (j = i + 1; j < recog_data.n_alternatives; j++)
 {
   int this_reject = alternative_reject[alternative_order[j]];
   int this_nregs = alternative_nregs[alternative_order[j]];
   if (this_reject < best_reject
       || (this_reject == best_reject && this_nregs < best_nregs))
     {
       best = j;
       best_reject = this_reject;
       best_nregs = this_nregs;
     }
 }
      tmp = alternative_order[best];
      alternative_order[best] = alternative_order[i];
      alternative_order[i] = tmp;
    }
  j = alternative_order[0];
  for (i = 0; i < recog_data.n_operands; i++)
    {
      enum machine_mode mode = recog_data.operand_mode[i];
      if (op_alt_regno[i][j] == -1)
 continue;
      validate_change (insn, recog_data.operand_loc[i],
         gen_rtx_REG (mode, op_alt_regno[i][j]), 1);
    }
  for (i = recog_data.n_dups - 1; i >= 0; i--)
    {
      int op = recog_data.dup_num[i];
      enum machine_mode mode = recog_data.operand_mode[op];
      if (op_alt_regno[op][j] == -1)
 continue;
      validate_change (insn, recog_data.dup_loc[i],
         gen_rtx_REG (mode, op_alt_regno[op][j]), 1);
    }
  return apply_change_group ();
}
struct reg_use_postreload { rtx insn, *usep; };
static struct
  {
    struct reg_use_postreload reg_use[6];
    int use_index;
    rtx offset;
    int store_ruid;
    int use_ruid;
  } reg_state[53];
static int reload_combine_ruid;
static void
reload_combine (void)
{
  rtx insn, set;
  int first_index_reg = -1;
  int last_index_reg = 0;
  int i;
  basic_block bb;
  unsigned int r;
  int last_label_ruid;
  int min_labelno, n_labels;
  HARD_REG_SET ever_live_at_start, *label_live;
  if (double_reg_address_ok && INDEX_REGS != NO_REGS)
    return;
  for (r = 0; r < 53; r++)
    if ((!!((reg_class_contents[INDEX_REGS])[(r) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((r) % ((unsigned) (8 * 4)))))))
      {
 if (first_index_reg == -1)
   first_index_reg = r;
 last_index_reg = r;
      }
  if (first_index_reg == -1)
    return;
  min_labelno = get_first_label_num ();
  n_labels = max_label_num () - min_labelno;
  label_live = xmalloc (n_labels * sizeof (HARD_REG_SET));
  do { HARD_REG_ELT_TYPE *scan_tp_ = (ever_live_at_start); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
    {
      insn = (bb)->head_;
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 {
   HARD_REG_SET live;
   do { do { HARD_REG_ELT_TYPE *scan_tp_ = (live); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&live, bb->global_live_at_start); } while (0)
                                ;
   compute_use_by_pseudos (&live,
      bb->global_live_at_start);
   do { HARD_REG_ELT_TYPE *scan_tp_ = ((label_live[(((insn)->u.fld[6]).rtint) - min_labelno])), *scan_fp_ = (live); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (ever_live_at_start), *scan_fp_ = (live); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
 }
    }
  last_label_ruid = reload_combine_ruid = 0;
  for (r = 0; r < 53; r++)
    {
      reg_state[r].store_ruid = reload_combine_ruid;
      if (fixed_regs[r])
 reg_state[r].use_index = -1;
      else
 reg_state[r].use_index = 6;
    }
  for (insn = get_last_insn (); insn; insn = (((insn)->u.fld[1]).rtx1))
    {
      rtx note;
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 last_label_ruid = reload_combine_ruid;
      else if (((enum rtx_code) (insn)->code) == BARRIER)
 for (r = 0; r < 53; r++)
   if (! fixed_regs[r])
       reg_state[r].use_index = 6;
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      reload_combine_ruid++;
      set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
      if (set != (rtx) 0
   && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
   && (hard_regno_nregs[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]
         [((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode)]
       == 1)
   && ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == PLUS
   && (((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == REG)
   && rtx_equal_p (((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1), (((set)->u.fld[0]).rtx1))
   && !rtx_equal_p (((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1), (((set)->u.fld[0]).rtx1))
   && last_label_ruid < reg_state[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)].use_ruid)
 {
   rtx reg = (((set)->u.fld[0]).rtx1);
   rtx plus = (((set)->u.fld[1]).rtx1);
   rtx base = (((plus)->u.fld[1]).rtx1);
   rtx prev = prev_nonnote_insn (insn);
   rtx prev_set = prev ? (((((enum rtx_code) (prev)->code) == INSN) || (((enum rtx_code) (prev)->code) == JUMP_INSN) || (((enum rtx_code) (prev)->code) == CALL_INSN)) ? (((enum rtx_code) ((((prev)->u.fld[5]).rtx1))->code) == SET ? (((prev)->u.fld[5]).rtx1) : single_set_2 (prev, (((prev)->u.fld[5]).rtx1))) : (rtx) 0) : (rtx) 0;
   unsigned int regno = (((reg)->u.fld[0]).rtuint);
   rtx const_reg = (rtx) 0;
   rtx reg_sum = (rtx) 0;
   if ((!!((reg_class_contents[INDEX_REGS])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
       || (!!((reg_class_contents[INDEX_REGS])[((((base)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << (((((base)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))))))
                     )
     {
       const_reg = reg;
       reg_sum = plus;
     }
   else
     {
       for (i = first_index_reg; i <= last_index_reg; i++)
  {
    if ((!!((reg_class_contents[INDEX_REGS])[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
        && reg_state[i].use_index == 6
        && reg_state[i].store_ruid <= reg_state[regno].use_ruid
        && hard_regno_nregs[i][((enum machine_mode) (reg)->mode)] == 1)
      {
        rtx index_reg = gen_rtx_REG (((enum machine_mode) (reg)->mode), i);
        const_reg = index_reg;
        reg_sum = gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (reg)->mode)), (index_reg), (base));
        break;
      }
  }
     }
   if (prev_set != 0
       && ((enum rtx_code) ((((prev_set)->u.fld[1]).rtx1))->code) == CONST_INT
       && rtx_equal_p ((((prev_set)->u.fld[0]).rtx1), reg)
       && reg_state[regno].use_index >= 0
       && (reg_state[(((base)->u.fld[0]).rtuint)].store_ruid
    <= reg_state[regno].use_ruid)
       && reg_sum != 0)
     {
       int i;
       validate_change (prev, &(((prev_set)->u.fld[0]).rtx1), const_reg, 1);
       if (reg_state[regno].offset != (const_int_rtx[64]))
  validate_change (prev,
     &(((prev_set)->u.fld[1]).rtx1),
     gen_rtx_CONST_INT (VOIDmode, (long) ((((((prev_set)->u.fld[1]).rtx1))->u.hwint[0]) + ((reg_state[regno].offset)->u.hwint[0])))
                                          ,
     1);
       for (i = reg_state[regno].use_index;
     i < 6; i++)
  validate_change (reg_state[regno].reg_use[i].insn,
     reg_state[regno].reg_use[i].usep,
     copy_rtx (reg_sum), 1);
       if (apply_change_group ())
  {
    rtx *np;
    delete_insn (insn);
    if (reg_state[regno].offset != (const_int_rtx[64]))
      for (np = &(((prev)->u.fld[8]).rtx1); *np;)
        {
   if (((enum reg_note) ((enum machine_mode) (*np)->mode)) == REG_EQUAL
       || ((enum reg_note) ((enum machine_mode) (*np)->mode)) == REG_EQUIV)
     *np = (((*np)->u.fld[1]).rtx1);
   else
     np = &(((*np)->u.fld[1]).rtx1);
        }
    reg_state[regno].use_index = 6;
    reg_state[(((const_reg)->u.fld[0]).rtuint)].store_ruid
      = reload_combine_ruid;
    continue;
  }
     }
 }
      note_stores ((((insn)->u.fld[5]).rtx1), reload_combine_note_store, ((void *)0));
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 {
   rtx link;
   for (r = 0; r < 53; r++)
     if (call_used_regs[r])
       {
  reg_state[r].use_index = 6;
  reg_state[r].store_ruid = reload_combine_ruid;
       }
   for (link = (((insn)->u.fld[9]).rtx1); link;
        link = (((link)->u.fld[1]).rtx1))
     {
       rtx usage_rtx = ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
       if ((((enum rtx_code) (usage_rtx)->code) == REG))
         {
    unsigned int i;
    unsigned int start_reg = (((usage_rtx)->u.fld[0]).rtuint);
    unsigned int num_regs =
   hard_regno_nregs[start_reg][((enum machine_mode) (usage_rtx)->mode)];
    unsigned int end_reg = start_reg + num_regs - 1;
    for (i = start_reg; i <= end_reg; i++)
      if (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == CLOBBER)
        {
          reg_state[i].use_index = 6;
          reg_state[i].store_ruid = reload_combine_ruid;
        }
      else
        reg_state[i].use_index = -1;
          }
      }
 }
      else if (((enum rtx_code) (insn)->code) == JUMP_INSN
        && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != RETURN)
 {
   HARD_REG_SET *live;
   if ((condjump_p (insn) || condjump_in_parallel_p (insn))
       && (((insn)->u.fld[9]).rtx1))
     live = &(label_live[((((((insn)->u.fld[9]).rtx1))->u.fld[6]).rtint) - min_labelno]);
   else
     live = &ever_live_at_start;
   for (i = 53 - 1; i >= 0; --i)
     if ((!!((*live)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
       reg_state[i].use_index = -1;
 }
      reload_combine_note_use (&(((insn)->u.fld[5]).rtx1), insn);
      for (note = (((insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
 {
   if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_INC
       && (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG))
     {
       int regno = ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
       reg_state[regno].store_ruid = reload_combine_ruid;
       reg_state[regno].use_index = -1;
     }
 }
    }
  free (label_live);
}
static void
reload_combine_note_store (rtx dst, rtx set, void *data )
{
  int regno = 0;
  int i;
  enum machine_mode mode = ((enum machine_mode) (dst)->mode);
  if (((enum rtx_code) (dst)->code) == SUBREG)
    {
      regno = subreg_regno_offset (((((((dst)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
       ((enum machine_mode) ((((dst)->u.fld[0]).rtx1))->mode),
       (((dst)->u.fld[1]).rtuint),
       ((enum machine_mode) (dst)->mode));
      dst = (((dst)->u.fld[0]).rtx1);
    }
  if (!(((enum rtx_code) (dst)->code) == REG))
    return;
  regno += (((dst)->u.fld[0]).rtuint);
  if (((enum rtx_code) (set)->code) != SET
      || ((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == ZERO_EXTRACT
      || ((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == SIGN_EXTRACT
      || ((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == STRICT_LOW_PART)
    {
      for (i = hard_regno_nregs[regno][mode] - 1 + regno; i >= regno; i--)
 {
   reg_state[i].use_index = -1;
   reg_state[i].store_ruid = reload_combine_ruid;
 }
    }
  else
    {
      for (i = hard_regno_nregs[regno][mode] - 1 + regno; i >= regno; i--)
 {
   reg_state[i].store_ruid = reload_combine_ruid;
   reg_state[i].use_index = 6;
 }
    }
}
static void
reload_combine_note_use (rtx *xp, rtx insn)
{
  rtx x = *xp;
  enum rtx_code code = x->code;
  const char *fmt;
  int i, j;
  rtx offset = (const_int_rtx[64]);
  switch (code)
    {
    case SET:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 {
   reload_combine_note_use (&(((x)->u.fld[1]).rtx1), insn);
   return;
 }
      break;
    case USE:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG) && ((((((x)->u.fld[0]).rtx1)))->return_val))
 {
   rtx reg = (((x)->u.fld[0]).rtx1);
   int regno = (((reg)->u.fld[0]).rtuint);
   int nregs = hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)];
   while (--nregs >= 0)
     reg_state[regno + nregs].use_index = -1;
   return;
 }
      break;
    case CLOBBER:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 {
   if (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
     abort ();
   return;
 }
      break;
    case PLUS:
      if (!(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != CONST_INT)
 break;
      offset = (((x)->u.fld[1]).rtx1);
      x = (((x)->u.fld[0]).rtx1);
    case REG:
      {
 int regno = (((x)->u.fld[0]).rtuint);
 int use_index;
 int nregs;
 if (regno >= 53)
   abort ();
 nregs = hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
 if (nregs > 1)
   {
     while (--nregs >= 0)
       reg_state[regno + nregs].use_index = -1;
     return;
   }
 use_index = --reg_state[regno].use_index;
 if (use_index < 0)
   return;
 if (use_index != 6 - 1)
   {
     if (! rtx_equal_p (offset, reg_state[regno].offset))
       {
  reg_state[regno].use_index = -1;
  return;
       }
   }
 else
   {
     reg_state[regno].offset = offset;
     reg_state[regno].use_ruid = reload_combine_ruid;
   }
 reg_state[regno].reg_use[use_index].insn = insn;
 reg_state[regno].reg_use[use_index].usep = xp;
 return;
      }
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 reload_combine_note_use (&(((x)->u.fld[i]).rtx1), insn);
      else if (fmt[i] == 'E')
 {
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     reload_combine_note_use (&(((((x)->u.fld[i]).rtvec1))->elem[j]), insn);
 }
    }
}
static int reg_set_luid[53];
static long reg_offset_postreload[53];
static int reg_base_reg[53];
static enum machine_mode reg_mode[53];
static int move2add_luid;
static int move2add_last_label_luid;
static void
reload_cse_move2add (rtx first)
{
  int i;
  rtx insn;
  for (i = 53 - 1; i >= 0; i--)
    reg_set_luid[i] = 0;
  move2add_last_label_luid = 0;
  move2add_luid = 2;
  for (insn = first; insn; insn = (((insn)->u.fld[2]).rtx1), move2add_luid++)
    {
      rtx pat, note;
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 {
   move2add_last_label_luid = move2add_luid;
   move2add_luid++;
   continue;
 }
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      pat = (((insn)->u.fld[5]).rtx1);
      if (((enum rtx_code) (pat)->code) == SET
   && (((enum rtx_code) ((((pat)->u.fld[0]).rtx1))->code) == REG))
 {
   rtx reg = (((pat)->u.fld[0]).rtx1);
   int regno = (((reg)->u.fld[0]).rtuint);
   rtx src = (((pat)->u.fld[1]).rtx1);
   if (reg_set_luid[regno] > move2add_last_label_luid
       && (((unsigned short) mode_size[((enum machine_mode) (reg)->mode)]) == ((unsigned short) mode_size[reg_mode[regno]]) || (((unsigned short) mode_size[((enum machine_mode) (reg)->mode)]) <= ((unsigned short) mode_size[reg_mode[regno]]) && 1)))
     {
       if (((enum rtx_code) (src)->code) == CONST_INT && reg_base_reg[regno] < 0)
  {
    rtx new_src =
      gen_rtx_CONST_INT (VOIDmode, (long) (trunc_int_for_mode (((src)->u.hwint[0]) - reg_offset_postreload[regno], ((enum machine_mode) (reg)->mode))))
                       ;
    if (new_src == (const_int_rtx[64]))
      {
        if (((src)->u.hwint[0]) == reg_offset_postreload [regno])
   validate_change (insn, &(((pat)->u.fld[1]).rtx1), reg, 0);
      }
    else if (rtx_cost (new_src, PLUS) < rtx_cost (src, SET)
      && have_add2_insn (reg, new_src))
      {
        rtx tem = gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (reg)->mode)), (reg), (new_src));
        validate_change (insn, &(((pat)->u.fld[1]).rtx1), tem, 0);
      }
    else
      {
        enum machine_mode narrow_mode;
        for (narrow_mode = class_narrowest_mode[MODE_INT];
      narrow_mode != ((enum machine_mode) (reg)->mode);
      narrow_mode = mode_wider[narrow_mode])
   {
     if (have_insn_for (STRICT_LOW_PART, narrow_mode)
         && ((reg_offset_postreload[regno]
       & ~mode_mask_array[narrow_mode])
      == (((src)->u.hwint[0])
          & ~mode_mask_array[narrow_mode])))
       {
         rtx narrow_reg = gen_rtx_REG (narrow_mode,
           (((reg)->u.fld[0]).rtuint));
         rtx narrow_src =
    gen_rtx_CONST_INT (VOIDmode, (long) (trunc_int_for_mode (((src)->u.hwint[0]), narrow_mode)))
                         ;
         rtx new_set =
    gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (narrow_reg))), (narrow_src))
                     ;
         if (validate_change (insn, &(((insn)->u.fld[5]).rtx1),
         new_set, 0))
    break;
       }
   }
      }
    reg_set_luid[regno] = move2add_luid;
    reg_mode[regno] = ((enum machine_mode) (reg)->mode);
    reg_offset_postreload[regno] = ((src)->u.hwint[0]);
    continue;
  }
       else if ((((enum rtx_code) (src)->code) == REG)
         && reg_set_luid[regno] == reg_set_luid[(((src)->u.fld[0]).rtuint)]
         && reg_base_reg[regno] == reg_base_reg[(((src)->u.fld[0]).rtuint)]
         && (((unsigned short) mode_size[((enum machine_mode) (reg)->mode)]) == ((unsigned short) mode_size[reg_mode[(((src)->u.fld[0]).rtuint)]]) || (((unsigned short) mode_size[((enum machine_mode) (reg)->mode)]) <= ((unsigned short) mode_size[reg_mode[(((src)->u.fld[0]).rtuint)]]) && 1))
                             )
  {
    rtx next = next_nonnote_insn (insn);
    rtx set = (rtx) 0;
    if (next)
      set = (((((enum rtx_code) (next)->code) == INSN) || (((enum rtx_code) (next)->code) == JUMP_INSN) || (((enum rtx_code) (next)->code) == CALL_INSN)) ? (((enum rtx_code) ((((next)->u.fld[5]).rtx1))->code) == SET ? (((next)->u.fld[5]).rtx1) : single_set_2 (next, (((next)->u.fld[5]).rtx1))) : (rtx) 0);
    if (set
        && (((set)->u.fld[0]).rtx1) == reg
        && ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == PLUS
        && ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1) == reg
        && ((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
      {
        rtx src3 = ((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
        long added_offset = ((src3)->u.hwint[0]);
        long base_offset = reg_offset_postreload[(((src)->u.fld[0]).rtuint)];
        long regno_offset = reg_offset_postreload[regno];
        rtx new_src =
   gen_rtx_CONST_INT (VOIDmode, (long) (trunc_int_for_mode (added_offset + base_offset - regno_offset, ((enum machine_mode) (reg)->mode))))
                           ;
        int success = 0;
        if (new_src == (const_int_rtx[64]))
   success
     = validate_change (next, &(((set)->u.fld[1]).rtx1), reg, 0);
        else if ((rtx_cost (new_src, PLUS)
    < ((1) * 4) + rtx_cost (src3, SET))
          && have_add2_insn (reg, new_src))
   {
     rtx newpat = gen_rtx_fmt_ee (SET, (VOIDmode), (reg), (gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (reg)->mode)), (reg), (new_src))))
                   ;
     success
       = validate_change (next, &(((next)->u.fld[5]).rtx1),
            newpat, 0);
   }
        if (success)
   delete_insn (insn);
        insn = next;
        reg_mode[regno] = ((enum machine_mode) (reg)->mode);
        reg_offset_postreload[regno] =
   trunc_int_for_mode (added_offset + base_offset,
         ((enum machine_mode) (reg)->mode));
        continue;
      }
  }
     }
 }
      for (note = (((insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
 {
   if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_INC
       && (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG))
     {
       int regno = ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
       if (regno < 53)
  reg_set_luid[regno] = 0;
     }
 }
      note_stores ((((insn)->u.fld[5]).rtx1), move2add_note_store, ((void *)0));
      if (any_condjump_p (insn) && onlyjump_p (insn))
 {
   rtx cnd = fis_get_condition (insn);
   if (cnd != (rtx) 0
       && ((enum rtx_code) (cnd)->code) == NE
       && (((enum rtx_code) ((((cnd)->u.fld[0]).rtx1))->code) == REG)
       && (mode_class[((enum machine_mode) ((((cnd)->u.fld[0]).rtx1))->mode)] == MODE_INT || mode_class[((enum machine_mode) ((((cnd)->u.fld[0]).rtx1))->mode)] == MODE_PARTIAL_INT)
       && hard_regno_nregs[((((((cnd)->u.fld[0]).rtx1))->u.fld[0]).rtuint)][((enum machine_mode) ((((cnd)->u.fld[0]).rtx1))->mode)] == 1
       && ((enum rtx_code) ((((cnd)->u.fld[1]).rtx1))->code) == CONST_INT)
     {
       rtx implicit_set =
  gen_rtx_fmt_ee (SET, (VOIDmode), ((((cnd)->u.fld[0]).rtx1)), ((((cnd)->u.fld[1]).rtx1)));
       move2add_note_store ((((implicit_set)->u.fld[0]).rtx1), implicit_set, 0);
     }
 }
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 {
   for (i = 53 - 1; i >= 0; i--)
     {
       if (call_used_regs[i])
  reg_set_luid[i] = 0;
     }
 }
    }
}
static void
move2add_note_store (rtx dst, rtx set, void *data )
{
  unsigned int regno = 0;
  unsigned int i;
  enum machine_mode mode = ((enum machine_mode) (dst)->mode);
  if (((enum rtx_code) (dst)->code) == SUBREG)
    {
      regno = subreg_regno_offset (((((((dst)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
       ((enum machine_mode) ((((dst)->u.fld[0]).rtx1))->mode),
       (((dst)->u.fld[1]).rtuint),
       ((enum machine_mode) (dst)->mode));
      dst = (((dst)->u.fld[0]).rtx1);
    }
  if ((((enum rtx_code) (dst)->code) == MEM))
    {
      dst = (((dst)->u.fld[0]).rtx1);
      if (((enum rtx_code) (dst)->code) == PRE_INC || ((enum rtx_code) (dst)->code) == POST_INC
   || ((enum rtx_code) (dst)->code) == PRE_DEC || ((enum rtx_code) (dst)->code) == POST_DEC)
 reg_set_luid[((((((dst)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] = 0;
      return;
    }
  if (!(((enum rtx_code) (dst)->code) == REG))
    return;
  regno += (((dst)->u.fld[0]).rtuint);
  if ((mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT)
      && hard_regno_nregs[regno][mode] == 1 && ((enum rtx_code) (set)->code) == SET
      && ((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) != ZERO_EXTRACT
      && ((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) != SIGN_EXTRACT
      && ((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) != STRICT_LOW_PART)
    {
      rtx src = (((set)->u.fld[1]).rtx1);
      rtx base_reg;
      long offset;
      int base_regno;
      enum machine_mode dst_mode = ((enum machine_mode) (dst)->mode);
      switch (((enum rtx_code) (src)->code))
 {
 case PLUS:
   if ((((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == REG))
     {
       base_reg = (((src)->u.fld[0]).rtx1);
       if (((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) == CONST_INT)
  offset = (((((src)->u.fld[1]).rtx1))->u.hwint[0]);
       else if ((((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) == REG)
         && (reg_set_luid[((((((src)->u.fld[1]).rtx1))->u.fld[0]).rtuint)]
      > move2add_last_label_luid)
         && ((((unsigned short) mode_size[dst_mode]) == ((unsigned short) mode_size[reg_mode[((((((src)->u.fld[1]).rtx1))->u.fld[0]).rtuint)]]) || (((unsigned short) mode_size[dst_mode]) <= ((unsigned short) mode_size[reg_mode[((((((src)->u.fld[1]).rtx1))->u.fld[0]).rtuint)]]) && 1))
                                                 ))
  {
    if (reg_base_reg[((((((src)->u.fld[1]).rtx1))->u.fld[0]).rtuint)] < 0)
      offset = reg_offset_postreload[((((((src)->u.fld[1]).rtx1))->u.fld[0]).rtuint)];
    else if (reg_set_luid[(((base_reg)->u.fld[0]).rtuint)]
      > move2add_last_label_luid
      && ((((unsigned short) mode_size[dst_mode]) == ((unsigned short) mode_size[reg_mode[((((((src)->u.fld[1]).rtx1))->u.fld[0]).rtuint)]]) || (((unsigned short) mode_size[dst_mode]) <= ((unsigned short) mode_size[reg_mode[((((((src)->u.fld[1]).rtx1))->u.fld[0]).rtuint)]]) && 1))
                                                     )
      && reg_base_reg[(((base_reg)->u.fld[0]).rtuint)] < 0)
      {
        offset = reg_offset_postreload[(((base_reg)->u.fld[0]).rtuint)];
        base_reg = (((src)->u.fld[1]).rtx1);
      }
    else
      goto invalidate;
  }
       else
  goto invalidate;
       break;
     }
   goto invalidate;
 case REG:
   base_reg = src;
   offset = 0;
   break;
 case CONST_INT:
   reg_base_reg[regno] = -1;
   reg_offset_postreload[regno] = (((((set)->u.fld[1]).rtx1))->u.hwint[0]);
   reg_set_luid[regno] = move2add_last_label_luid + 1;
   reg_mode[regno] = mode;
   return;
 default:
 invalidate:
   reg_set_luid[regno] = 0;
   return;
 }
      base_regno = (((base_reg)->u.fld[0]).rtuint);
      if (reg_set_luid[base_regno] <= move2add_last_label_luid)
 {
   reg_base_reg[base_regno] = base_regno;
   reg_offset_postreload[base_regno] = 0;
   reg_set_luid[base_regno] = move2add_luid;
   reg_mode[base_regno] = mode;
 }
      else if (! (((unsigned short) mode_size[dst_mode]) == ((unsigned short) mode_size[reg_mode[base_regno]]) || (((unsigned short) mode_size[dst_mode]) <= ((unsigned short) mode_size[reg_mode[base_regno]]) && 1))
                          )
 goto invalidate;
      reg_mode[regno] = mode;
      reg_set_luid[regno] = reg_set_luid[base_regno];
      reg_base_reg[regno] = reg_base_reg[base_regno];
      reg_offset_postreload[regno] = trunc_int_for_mode (offset
           + reg_offset_postreload[base_regno],
           dst_mode);
    }
  else
    {
      unsigned int endregno = regno + hard_regno_nregs[regno][mode];
      for (i = regno; i < endregno; i++)
 reg_set_luid[i] = 0;
    }
}
typedef struct sreal
{
  unsigned long sig_lo;
  unsigned long sig_hi;
  signed int exp;
} sreal;
extern void dump_sreal (FILE *, sreal *);
extern sreal *sreal_init (sreal *, unsigned long, signed int);
extern long sreal_to_int (sreal *);
extern int sreal_compare (sreal *, sreal *);
extern sreal *sreal_add (sreal *, sreal *, sreal *);
extern sreal *sreal_sub (sreal *, sreal *, sreal *);
extern sreal *sreal_mul (sreal *, sreal *, sreal *);
extern sreal *sreal_div (sreal *, sreal *, sreal *);
static sreal real_zero, real_one, real_almost_one, real_br_prob_base,
      real_inv_br_prob_base, real_one_half, real_bb_freq_max;
static void combine_predictions_for_insn (rtx, basic_block);
static void dump_prediction (FILE *, enum br_predictor, int, basic_block, int);
static void estimate_loops_at_level (struct loop *loop);
static void propagate_freq (struct loop *);
static void estimate_bb_frequencies (struct loops *);
static int counts_to_freqs (void);
static void process_note_predictions (basic_block, int *);
static void process_note_prediction (basic_block, int *, int, int);
static unsigned char last_basic_block_p (basic_block);
static void compute_function_frequency (void);
static void choose_function_section (void);
static unsigned char can_predict_insn_p (rtx);
struct predictor_info
{
  const char *const name;
  const int hitrate;
  const int flags;
};
static const struct predictor_info predictor_info[]= {
{"combined", (10000), 0},
{"DS theory", (10000), 0},
{"first match", (10000), 0},
{"no prediction", (10000), 0},
{"unconditional jump", (10000), 1},
{"loop iterations", (10000), 1},
{"__builtin_expect", (10000 - (10000 / 10 - 1)), 1},
{"continue", ((int) ((56) * 10000 + 50) / 100), 0},
{"noreturn call", ((int) ((99) * 10000 + 50) / 100), 1},
{"loop branch", ((int) ((89) * 10000 + 50) / 100), 1},
{"loop exit", ((int) ((90) * 10000 + 50) / 100), 1},
{"loop condition", (10000 - (10000 / 10 - 1)), 0},
{"loop preconditioning", (10000 - (10000 / 10 - 1)), 0},
{"loop header", ((int) ((64) * 10000 + 50) / 100), 0},
{"pointer", ((int) ((81) * 10000 + 50) / 100), 0},
{"pointer (on trees)", ((int) ((81) * 10000 + 50) / 100), 0},
{"opcode values positive", ((int) ((79) * 10000 + 50) / 100), 0},
{"opcode values nonequal", ((int) ((71) * 10000 + 50) / 100), 0},
{"fp_opcode", ((int) ((90) * 10000 + 50) / 100), 0},
{"opcode values positive (on trees)", ((int) ((79) * 10000 + 50) / 100), 0},
{"opcode values nonequal (on trees)", ((int) ((71) * 10000 + 50) / 100), 0},
{"fp_opcode (on trees)", ((int) ((90) * 10000 + 50) / 100), 0},
{"call", ((int) ((70) * 10000 + 50) / 100), 0},
{"early return", ((int) ((67) * 10000 + 50) / 100), 0},
{"goto", ((int) ((70) * 10000 + 50) / 100), 0},
{"const return", ((int) ((95) * 10000 + 50) / 100), 0},
{"negative return", ((int) ((96) * 10000 + 50) / 100), 0},
{"null return", ((int) ((90) * 10000 + 50) / 100), 0},
{"mudflap check", ((int) ((99) * 10000 + 50) / 100), 0},
  {((void *)0), 0, 0}
};
unsigned char
maybe_hot_bb_p (basic_block bb)
{
  if (profile_info && flag_branch_probabilities
      && (bb->count
   < profile_info->sum_max / (compiler_params[(int) HOT_BB_COUNT_FRACTION].value1)))
    return 0;
  if (bb->frequency < 10000 / (compiler_params[(int) HOT_BB_FREQUENCY_FRACTION].value1))
    return 0;
  return 1;
}
unsigned char
probably_cold_bb_p (basic_block bb)
{
  if (profile_info && flag_branch_probabilities
      && (bb->count
   < profile_info->sum_max / (compiler_params[(int) HOT_BB_COUNT_FRACTION].value1)))
    return 1;
  if (bb->frequency < 10000 / (compiler_params[(int) HOT_BB_FREQUENCY_FRACTION].value1))
    return 1;
  return 0;
}
unsigned char
probably_never_executed_bb_p (basic_block bb)
{
  if (profile_info && flag_branch_probabilities)
    return ((bb->count + profile_info->runs / 2) / profile_info->runs) == 0;
  return 0;
}
unsigned char
rtl_predicted_by_p (basic_block bb, enum br_predictor predictor)
{
  rtx note;
  if (!((((enum rtx_code) ((bb)->end_)->code) == INSN) || (((enum rtx_code) ((bb)->end_)->code) == JUMP_INSN) || (((enum rtx_code) ((bb)->end_)->code) == CALL_INSN)))
    return 0;
  for (note = ((((bb)->end_)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_BR_PRED
 && ((((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.hwint[0]) == (int)predictor)
      return 1;
  return 0;
}
unsigned char
tree_predicted_by_p (basic_block bb, enum br_predictor predictor)
{
  struct edge_prediction *i = bb_ann (bb)->predictions;
  for (i = bb_ann (bb)->predictions; i; i = i->next)
    if (i->predictor == predictor)
      return 1;
  return 0;
}
void
predict_insn (rtx insn, enum br_predictor predictor, int probability)
{
  if (!any_condjump_p (insn))
    abort ();
  if (!flag_guess_branch_prob)
    return;
  (((insn)->u.fld[8]).rtx1)
    = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PRED), (gen_rtx_fmt_ee (CONCAT, (VOIDmode), (gen_rtx_CONST_INT (VOIDmode, (long) ((int) predictor))), (gen_rtx_CONST_INT (VOIDmode, (long) ((int) probability))))), ((((insn)->u.fld[8]).rtx1)))
                     ;
}
void
predict_insn_def (rtx insn, enum br_predictor predictor,
    enum prediction taken)
{
   int probability = predictor_info[(int) predictor].hitrate;
   if (taken != TAKEN)
     probability = 10000 - probability;
   predict_insn (insn, predictor, probability);
}
void
rtl_predict_edge (edge e, enum br_predictor predictor, int probability)
{
  rtx last_insn;
  last_insn = (e->src)->end_;
  if (!any_condjump_p (last_insn))
    return;
  if (e->flags & 1)
    probability = 10000 - probability;
  predict_insn (last_insn, predictor, probability);
}
void
tree_predict_edge (edge e, enum br_predictor predictor, int probability)
{
  struct edge_prediction *i = ggc_alloc_stat (sizeof (struct edge_prediction) );
  i->next = bb_ann (e->src)->predictions;
  bb_ann (e->src)->predictions = i;
  i->probability = probability;
  i->predictor = predictor;
  i->edge1 = e;
}
static unsigned char
can_predict_insn_p (rtx insn)
{
  return (((enum rtx_code) (insn)->code) == JUMP_INSN
   && any_condjump_p (insn)
   && (((insn)->u.fld[3]).bb)->succ->succ_next);
}
void
predict_edge_def (edge e, enum br_predictor predictor,
    enum prediction taken)
{
   int probability = predictor_info[(int) predictor].hitrate;
   if (taken != TAKEN)
     probability = 10000 - probability;
   predict_edge (e, predictor, probability);
}
void
invert_br_probabilities (rtx insn)
{
  rtx note;
  for (note = (((insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_BR_PROB)
      (((note)->u.fld[0]).rtx1) = gen_rtx_CONST_INT (VOIDmode, (long) (10000 - (((((note)->u.fld[0]).rtx1))->u.hwint[0])));
    else if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_BR_PRED)
      ((((((note)->u.fld[0]).rtx1))->u.fld[1]).rtx1)
 = gen_rtx_CONST_INT (VOIDmode, (long) (10000 - ((((((((note)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])));
}
static void
dump_prediction (FILE *file, enum br_predictor predictor, int probability,
   basic_block bb, int used)
{
  edge e = bb->succ;
  if (!file)
    return;
  while (e && (e->flags & 1))
    e = e->succ_next;
  fprintf (file, "  %s heuristics%s: %.1f%%",
    predictor_info[predictor].name,
    used ? "" : " (ignored)", probability * 100.0 / 10000);
  if (bb->count)
    {
      fprintf (file, "  exec ");
      fprintf (file, "%lld", bb->count);
      if (e)
 {
   fprintf (file, " hit ");
   fprintf (file, "%lld", e->count);
   fprintf (file, " (%.1f%%)", e->count * 100.0 / bb->count);
 }
    }
  fprintf (file, "\n");
}
static void
combine_predictions_for_insn (rtx insn, basic_block bb)
{
  rtx prob_note = find_reg_note (insn, REG_BR_PROB, 0);
  rtx *pnote = &(((insn)->u.fld[8]).rtx1);
  rtx note;
  int best_probability = (10000 / 2);
  int best_predictor = END_PREDICTORS;
  int combined_probability = 10000 / 2;
  int d;
  unsigned char first_match = 0;
  unsigned char found = 0;
  if (dump_file)
    fprintf (dump_file, "Predictions for insn %i bb %i\n", (((insn)->u.fld[0]).rtint),
      bb->index);
  for (note = (((insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_BR_PRED)
      {
 int predictor = ((((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.hwint[0]);
 int probability = ((((((((note)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
 found = 1;
 if (best_predictor > predictor)
   best_probability = probability, best_predictor = predictor;
 d = (combined_probability * probability
      + (10000 - combined_probability)
      * (10000 - probability));
 if (d == 0)
   combined_probability = 10000 / 2;
 else
   combined_probability = (((double) combined_probability) * probability
      * 10000 / d + 0.5);
      }
  if (predictor_info [best_predictor].flags & 1)
    first_match = 1;
  if (!found)
    dump_prediction (dump_file, PRED_NO_PREDICTION,
       combined_probability, bb, 1);
  else
    {
      dump_prediction (dump_file, PRED_DS_THEORY, combined_probability,
         bb, !first_match);
      dump_prediction (dump_file, PRED_FIRST_MATCH, best_probability,
         bb, first_match);
    }
  if (first_match)
    combined_probability = best_probability;
  dump_prediction (dump_file, PRED_COMBINED, combined_probability, bb, 1);
  while (*pnote)
    {
      if (((enum reg_note) ((enum machine_mode) (*pnote)->mode)) == REG_BR_PRED)
 {
   int predictor = ((((((((*pnote)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.hwint[0]);
   int probability = ((((((((*pnote)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
   dump_prediction (dump_file, predictor, probability, bb,
      !first_match || best_predictor == predictor);
   *pnote = (((*pnote)->u.fld[1]).rtx1);
 }
      else
 pnote = &(((*pnote)->u.fld[1]).rtx1);
    }
  if (!prob_note)
    {
      (((insn)->u.fld[8]).rtx1)
 = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PROB), (gen_rtx_CONST_INT (VOIDmode, (long) (combined_probability))), ((((insn)->u.fld[8]).rtx1)))
                                                         ;
      if (bb->succ->succ_next)
 {
   ((bb)->succ->flags & 1 ? (bb)->succ->succ_next : (bb)->succ)->probability = combined_probability;
   ((bb)->succ->flags & 1 ? (bb)->succ : (bb)->succ->succ_next)->probability
     = 10000 - combined_probability;
 }
    }
}
static void
combine_predictions_for_bb (FILE *file, basic_block bb)
{
  int best_probability = (10000 / 2);
  int best_predictor = END_PREDICTORS;
  int combined_probability = 10000 / 2;
  int d;
  unsigned char first_match = 0;
  unsigned char found = 0;
  struct edge_prediction *pred;
  int nedges = 0;
  edge e, first = ((void *)0), second = ((void *)0);
  for (e = bb->succ; e; e = e->succ_next)
    if (!(e->flags & (8 | 16)))
      {
        nedges ++;
 if (first && !second)
   second = e;
 if (!first)
   first = e;
      }
  if (nedges != 2)
    {
      for (e = bb->succ; e; e = e->succ_next)
 if (!(e->flags & (8 | 16)))
   e->probability = (10000 + nedges / 2) / nedges;
 else
   e->probability = 0;
      bb_ann (bb)->predictions = ((void *)0);
      if (file)
 fprintf (file, "%i edges in bb %i predicted to even probabilities\n",
   nedges, bb->index);
      return;
    }
  if (file)
    fprintf (file, "Predictions for bb %i\n", bb->index);
  for (pred = bb_ann (bb)->predictions; pred; pred = pred->next)
    {
      int predictor = pred->predictor;
      int probability = pred->probability;
      if (pred->edge1 != first)
 probability = 10000 - probability;
      found = 1;
      if (best_predictor > predictor)
 best_probability = probability, best_predictor = predictor;
      d = (combined_probability * probability
    + (10000 - combined_probability)
    * (10000 - probability));
      if (d == 0)
 combined_probability = 10000 / 2;
      else
 combined_probability = (((double) combined_probability) * probability
    * 10000 / d + 0.5);
    }
  if (predictor_info [best_predictor].flags & 1)
    first_match = 1;
  if (!found)
    dump_prediction (file, PRED_NO_PREDICTION, combined_probability, bb, 1);
  else
    {
      dump_prediction (file, PRED_DS_THEORY, combined_probability, bb,
         !first_match);
      dump_prediction (file, PRED_FIRST_MATCH, best_probability, bb,
         first_match);
    }
  if (first_match)
    combined_probability = best_probability;
  dump_prediction (file, PRED_COMBINED, combined_probability, bb, 1);
  for (pred = bb_ann (bb)->predictions; pred; pred = pred->next)
    {
      int predictor = pred->predictor;
      int probability = pred->probability;
      if (pred->edge1 != bb->succ)
 probability = 10000 - probability;
      dump_prediction (file, predictor, probability, bb,
         !first_match || best_predictor == predictor);
    }
  bb_ann (bb)->predictions = ((void *)0);
  first->probability = combined_probability;
  second->probability = 10000 - combined_probability;
}
static void
predict_loops (struct loops *loops_info, unsigned char simpleloops)
{
  unsigned i;
  for (i = 1; i < loops_info->num; i++)
    {
      basic_block bb, *bbs;
      unsigned j;
      int exits;
      struct loop *loop = loops_info->parray[i];
      struct niter_desc desc;
      unsigned long niter;
      flow_loop_scan (loop, 8);
      exits = loop->num_exits;
      if (simpleloops)
 {
   iv_analysis_loop_init (loop);
   find_simple_exit (loop, &desc);
   if (desc.simple_p && desc.const_iter)
     {
       int prob;
       niter = desc.niter + 1;
       if (niter == 0)
  niter = desc.niter;
       prob = (10000
        - (10000 + niter /2) / niter);
       if (prob == 10000)
  prob = 10000 - 1;
       predict_edge (desc.in_edge, PRED_LOOP_ITERATIONS,
       prob);
     }
 }
      bbs = get_loop_body (loop);
      for (j = 0; j < loop->num_nodes; j++)
 {
   int header_found = 0;
   edge e;
   bb = bbs[j];
   if ((simpleloops && !can_predict_insn_p ((bb)->end_))
       || predicted_by_p (bb, PRED_CONTINUE))
     continue;
   for (e = bb->succ; e; e = e->succ_next)
     if (e->dest == loop->header1
  && e->src == loop->latch)
       {
  header_found = 1;
  predict_edge_def (e, PRED_LOOP_BRANCH, TAKEN);
       }
   if (!header_found)
     for (e = bb->succ; e; e = e->succ_next)
       if (e->dest->index < 0
    || !flow_bb_inside_loop_p (loop, e->dest))
  predict_edge
    (e, PRED_LOOP_EXIT,
     (10000
      - predictor_info [(int) PRED_LOOP_EXIT].hitrate)
     / exits);
 }
      free (bbs);
    }
}
void
estimate_probability (struct loops *loops_info)
{
  basic_block bb;
  connect_infinite_loops_to_exit ();
  calculate_dominance_info (CDI_DOMINATORS);
  calculate_dominance_info (CDI_POST_DOMINATORS);
  predict_loops (loops_info, 1);
  iv_analysis_done ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      rtx last_insn = (bb)->end_;
      rtx cond, earliest;
      edge e;
      if (! can_predict_insn_p (last_insn))
 continue;
      for (e = bb->succ; e; e = e->succ_next)
 {
   if ((e->dest == EXIT_BLOCK_PTR
        || (e->dest->succ && !e->dest->succ->succ_next
     && e->dest->succ->dest == EXIT_BLOCK_PTR))
        && !predicted_by_p (bb, PRED_NULL_RETURN)
        && !predicted_by_p (bb, PRED_CONST_RETURN)
        && !predicted_by_p (bb, PRED_NEGATIVE_RETURN)
        && !last_basic_block_p (e->dest))
     predict_edge_def (e, PRED_EARLY_RETURN, TAKEN);
   if (e->dest != EXIT_BLOCK_PTR && e->dest != bb
       && dominated_by_p (CDI_DOMINATORS, e->dest, e->src)
       && !dominated_by_p (CDI_POST_DOMINATORS, e->src, e->dest))
     {
       rtx insn;
       for (insn = (e->dest)->head_; insn != ((((e->dest)->end_)->u.fld[2]).rtx1);
     insn = (((insn)->u.fld[2]).rtx1))
  if (((enum rtx_code) (insn)->code) == CALL_INSN
      && ! (((insn))->unchanging))
    {
      predict_edge_def (e, PRED_CALL, NOT_TAKEN);
      break;
    }
     }
 }
      cond = get_condition (last_insn, &earliest, 0);
      if (! cond)
 continue;
      if ((((rtx_class[(int) (((enum rtx_code) (cond)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
   && (((((enum rtx_code) ((((cond)->u.fld[0]).rtx1))->code) == REG) && ((((((cond)->u.fld[0]).rtx1)))->frame_related))
       || ((((enum rtx_code) ((((cond)->u.fld[1]).rtx1))->code) == REG) && ((((((cond)->u.fld[1]).rtx1)))->frame_related))))
 {
   if (((enum rtx_code) (cond)->code) == EQ)
     predict_insn_def (last_insn, PRED_POINTER, NOT_TAKEN);
   else if (((enum rtx_code) (cond)->code) == NE)
     predict_insn_def (last_insn, PRED_POINTER, TAKEN);
 }
      else
 switch (((enum rtx_code) (cond)->code))
   {
   case CONST_INT:
     predict_insn_def (last_insn, PRED_UNCONDITIONAL,
         cond == (const_int_rtx[64]) ? NOT_TAKEN : TAKEN);
     break;
   case EQ:
   case UNEQ:
     if ((mode_class[((enum machine_mode) ((((cond)->u.fld[0]).rtx1))->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) ((((cond)->u.fld[0]).rtx1))->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) ((((cond)->u.fld[0]).rtx1))->mode)] == MODE_VECTOR_FLOAT))
       ;
     else if ((((cond)->u.fld[1]).rtx1) == (const_int_rtx[64])
       || (((cond)->u.fld[0]).rtx1) == (const_int_rtx[64]))
       ;
     else
       predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, NOT_TAKEN);
     break;
   case NE:
   case LTGT:
     if ((mode_class[((enum machine_mode) ((((cond)->u.fld[0]).rtx1))->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) ((((cond)->u.fld[0]).rtx1))->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) ((((cond)->u.fld[0]).rtx1))->mode)] == MODE_VECTOR_FLOAT))
       ;
     else if ((((cond)->u.fld[1]).rtx1) == (const_int_rtx[64])
       || (((cond)->u.fld[0]).rtx1) == (const_int_rtx[64]))
       ;
     else
       predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, TAKEN);
     break;
   case ORDERED:
     predict_insn_def (last_insn, PRED_FPOPCODE, TAKEN);
     break;
   case UNORDERED:
     predict_insn_def (last_insn, PRED_FPOPCODE, NOT_TAKEN);
     break;
   case LE:
   case LT:
     if ((((cond)->u.fld[1]).rtx1) == (const_int_rtx[64]) || (((cond)->u.fld[1]).rtx1) == (const_int_rtx[64 +1])
  || (((cond)->u.fld[1]).rtx1) == (const_int_rtx[64 -1]))
       predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, NOT_TAKEN);
     break;
   case GE:
   case GT:
     if ((((cond)->u.fld[1]).rtx1) == (const_int_rtx[64]) || (((cond)->u.fld[1]).rtx1) == (const_int_rtx[64 +1])
  || (((cond)->u.fld[1]).rtx1) == (const_int_rtx[64 -1]))
       predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, TAKEN);
     break;
   default:
     break;
   }
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (((enum rtx_code) ((bb)->end_)->code) == JUMP_INSN
 && any_condjump_p ((bb)->end_)
 && bb->succ->succ_next != ((void *)0))
      combine_predictions_for_insn ((bb)->end_, bb);
  remove_fake_edges ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      rtx last_insn = (bb)->end_;
      if (!can_predict_insn_p (last_insn))
 {
   int nedges = 0;
   edge e;
   for (e = bb->succ; e; e = e->succ_next)
     {
       nedges++;
       if (e->probability != 0)
  break;
     }
   if (!e)
     for (e = bb->succ; e; e = e->succ_next)
       e->probability = (10000 + nedges / 2) / nedges;
 }
    }
  estimate_bb_frequencies (loops_info);
  free_dominance_info (CDI_POST_DOMINATORS);
}
static void
tree_predict_by_opcode (basic_block bb)
{
  tree stmt = last_stmt (bb);
  edge then_edge;
  tree cond;
  tree op0;
  tree type;
  if (!stmt || ((enum tree_code) (stmt)->common.code) != COND_EXPR)
    return;
  for (then_edge = bb->succ; then_edge; then_edge = then_edge->succ_next)
    if (then_edge->flags & 1024)
       break;
  cond = ((stmt)->exp.operands[0]);
  if (tree_code_type[(int) (((enum tree_code) (cond)->common.code))] != '<')
    return;
  op0 = ((cond)->exp.operands[0]);
  type = ((op0)->common.type);
  if ((((enum tree_code) (type)->common.code) == POINTER_TYPE || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE))
    {
      if (((enum tree_code) (cond)->common.code) == EQ_EXPR)
 predict_edge_def (then_edge, PRED_TREE_POINTER, NOT_TAKEN);
      else if (((enum tree_code) (cond)->common.code) == NE_EXPR)
 predict_edge_def (then_edge, PRED_TREE_POINTER, TAKEN);
    }
  else
    switch (((enum tree_code) (cond)->common.code))
      {
      case EQ_EXPR:
      case UNEQ_EXPR:
 if (((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)))
   ;
 else if (integer_zerop (op0)
   || integer_zerop (((cond)->exp.operands[1])))
   ;
 else
   predict_edge_def (then_edge, PRED_TREE_OPCODE_NONEQUAL, NOT_TAKEN);
 break;
      case NE_EXPR:
      case LTGT_EXPR:
 if (((((enum tree_code) (type)->common.code) == REAL_TYPE) || (((enum tree_code) (type)->common.code) == COMPLEX_TYPE && ((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE)))
   ;
 else if (integer_zerop (op0)
   || integer_zerop (((cond)->exp.operands[1])))
   ;
 else
   predict_edge_def (then_edge, PRED_TREE_OPCODE_NONEQUAL, TAKEN);
 break;
      case ORDERED_EXPR:
 predict_edge_def (then_edge, PRED_TREE_FPOPCODE, TAKEN);
 break;
      case UNORDERED_EXPR:
 predict_edge_def (then_edge, PRED_TREE_FPOPCODE, NOT_TAKEN);
 break;
      case LE_EXPR:
      case LT_EXPR:
 if (integer_zerop (((cond)->exp.operands[1]))
     || integer_onep (((cond)->exp.operands[1]))
     || integer_all_onesp (((cond)->exp.operands[1]))
     || real_zerop (((cond)->exp.operands[1]))
     || real_onep (((cond)->exp.operands[1]))
     || real_minus_onep (((cond)->exp.operands[1])))
   predict_edge_def (then_edge, PRED_TREE_OPCODE_POSITIVE, NOT_TAKEN);
 break;
      case GE_EXPR:
      case GT_EXPR:
 if (integer_zerop (((cond)->exp.operands[1]))
     || integer_onep (((cond)->exp.operands[1]))
     || integer_all_onesp (((cond)->exp.operands[1]))
     || real_zerop (((cond)->exp.operands[1]))
     || real_onep (((cond)->exp.operands[1]))
     || real_minus_onep (((cond)->exp.operands[1])))
   predict_edge_def (then_edge, PRED_TREE_OPCODE_POSITIVE, TAKEN);
 break;
      default:
 break;
      }
}
static void
tree_estimate_probability (void)
{
  basic_block bb;
  struct loops loops_info;
  flow_loops_find (&loops_info, 1);
  if (dump_file && (dump_flags & (1 << 3)))
    flow_loops_dump (&loops_info, dump_file, ((void *)0), 0);
  connect_infinite_loops_to_exit ();
  calculate_dominance_info (CDI_DOMINATORS);
  calculate_dominance_info (CDI_POST_DOMINATORS);
  predict_loops (&loops_info, 0);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e;
      for (e = bb->succ; e; e = e->succ_next)
 {
   if ((e->dest == EXIT_BLOCK_PTR
        || (e->dest->succ && !e->dest->succ->succ_next
     && e->dest->succ->dest == EXIT_BLOCK_PTR))
        && !predicted_by_p (bb, PRED_NULL_RETURN)
        && !predicted_by_p (bb, PRED_CONST_RETURN)
        && !predicted_by_p (bb, PRED_NEGATIVE_RETURN)
        && !last_basic_block_p (e->dest))
     predict_edge_def (e, PRED_EARLY_RETURN, TAKEN);
   if (e->dest != EXIT_BLOCK_PTR && e->dest != bb
       && dominated_by_p (CDI_DOMINATORS, e->dest, e->src)
       && !dominated_by_p (CDI_POST_DOMINATORS, e->src, e->dest))
     {
       block_stmt_iterator bi;
       for (bi = bsi_start (e->dest); !bsi_end_p (bi);
     bsi_next (&bi))
  {
    tree stmt = bsi_stmt (bi);
    if ((((enum tree_code) (stmt)->common.code) == CALL_EXPR
         || (((enum tree_code) (stmt)->common.code) == MODIFY_EXPR
      && ((enum tree_code) (((stmt)->exp.operands[1]))->common.code) == CALL_EXPR))
        && ((stmt)->common.side_effects_flag))
      {
        predict_edge_def (e, PRED_CALL, NOT_TAKEN);
        break;
      }
  }
     }
 }
      tree_predict_by_opcode (bb);
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    combine_predictions_for_bb (dump_file, bb);
  estimate_bb_frequencies (&loops_info);
  free_dominance_info (CDI_POST_DOMINATORS);
  remove_fake_edges ();
  flow_loops_free (&loops_info);
  if (dump_file && (dump_flags & (1 << 3)))
    dump_tree_cfg (dump_file, dump_flags);
}
void
expected_value_to_br_prob (void)
{
  rtx insn, cond, ev = (rtx) 0, ev_reg = (rtx) 0;
  for (insn = get_insns (); insn ; insn = (((insn)->u.fld[2]).rtx1))
    {
      switch (((enum rtx_code) (insn)->code))
 {
 case NOTE:
   if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_EXPECTED_VALUE)
     {
       ev = (((insn)->u.fld[4]).rtx1);
       ev_reg = (((ev)->u.fld[0]).rtx1);
       delete_insn (insn);
     }
   continue;
 case CODE_LABEL:
   ev = (rtx) 0;
   continue;
 case JUMP_INSN:
   if (((enum rtx_code) (insn)->code) != JUMP_INSN || ev == (rtx) 0
       || ! any_condjump_p (insn))
     continue;
   break;
 default:
   if (ev && reg_set_p (ev_reg, insn))
     ev = (rtx) 0;
   continue;
 }
      cond = ((((((pc_set (insn))->u.fld[1]).rtx1))->u.fld[0]).rtx1);
      cond = canonicalize_condition (insn, cond, 0, ((void *)0), ev_reg, 0);
      if (! cond || (((cond)->u.fld[0]).rtx1) != ev_reg
   || ((enum rtx_code) ((((cond)->u.fld[1]).rtx1))->code) != CONST_INT)
 continue;
      cond = gen_rtx_fmt_ee (((enum rtx_code) (cond)->code), VOIDmode,
        (((ev)->u.fld[1]).rtx1), (((cond)->u.fld[1]).rtx1));
      cond = simplify_rtx (cond);
      if (cond != const_true_rtx && cond != (const_int_rtx[64]))
 abort ();
      predict_insn_def (insn, PRED_BUILTIN_EXPECT,
          cond == const_true_rtx ? TAKEN : NOT_TAKEN);
    }
}
static unsigned char
last_basic_block_p (basic_block bb)
{
  if (bb == EXIT_BLOCK_PTR)
    return 0;
  return (bb->next_bb == EXIT_BLOCK_PTR
   || (bb->next_bb->next_bb == EXIT_BLOCK_PTR
       && bb->succ && !bb->succ->succ_next
       && bb->succ->dest->next_bb == EXIT_BLOCK_PTR));
}
static void
process_note_prediction (basic_block bb, int *heads, int pred, int flags)
{
  edge e;
  int y;
  unsigned char taken;
  taken = flags & 1;
  if (heads[bb->index] < 0)
    {
      basic_block ai = bb;
      basic_block next_ai = get_immediate_dominator (CDI_DOMINATORS, bb);
      int head;
      while (heads[next_ai->index] < 0)
 {
   if (!dominated_by_p (CDI_POST_DOMINATORS, next_ai, bb))
     break;
   heads[next_ai->index] = ai->index;
   ai = next_ai;
   next_ai = get_immediate_dominator (CDI_DOMINATORS, next_ai);
 }
      if (!dominated_by_p (CDI_POST_DOMINATORS, next_ai, bb))
 head = next_ai->index;
      else
 head = heads[next_ai->index];
      while (next_ai != bb)
 {
   next_ai = ai;
   if (heads[ai->index] == (-1))
     ai = ENTRY_BLOCK_PTR;
   else
     ai = (((basic_block_info)->data.bb[(heads[ai->index])]));
   heads[next_ai->index] = head;
 }
    }
  y = heads[bb->index];
  if (y == last_basic_block || !can_predict_insn_p (((((basic_block_info)->data.bb[(y)])))->end_))
    return;
  for (e = (((basic_block_info)->data.bb[(y)]))->succ; e; e = e->succ_next)
    if (e->dest->index >= 0
 && dominated_by_p (CDI_POST_DOMINATORS, e->dest, bb))
      predict_edge_def (e, pred, taken);
}
static void
process_note_predictions (basic_block bb, int *heads)
{
  rtx insn;
  edge e;
  int contained_noreturn_call = 0;
  int was_bb_head = 0;
  int noreturn_block = 1;
  for (insn = (bb)->end_; insn;
       was_bb_head |= (insn == (bb)->head_), insn = (((insn)->u.fld[1]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) != NOTE)
 {
   if (was_bb_head)
     break;
   else
     {
       if (((enum rtx_code) (insn)->code) == CALL_INSN
    && find_reg_note (insn, REG_NORETURN, ((void *)0)))
  contained_noreturn_call = 1;
       continue;
     }
 }
      if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_PREDICTION)
 {
   int alg = (int) ((((insn)->u.fld[4]).rtint)>>8);
   process_note_prediction (bb,
       heads,
       alg, (int) ((((insn)->u.fld[4]).rtint)&0xff));
   delete_insn (insn);
 }
    }
  for (e = bb->succ; e; e = e->succ_next)
    if (!(e->flags & 16))
      noreturn_block = 0;
  if (contained_noreturn_call)
    {
      process_note_prediction (bb, heads, PRED_NORETURN, NOT_TAKEN);
    }
}
void
note_prediction_to_br_prob (void)
{
  basic_block bb;
  int *heads;
  add_noreturn_fake_exit_edges ();
  connect_infinite_loops_to_exit ();
  calculate_dominance_info (CDI_POST_DOMINATORS);
  calculate_dominance_info (CDI_DOMINATORS);
  heads = xmalloc (sizeof (int) * last_basic_block);
  memset (heads, -1, sizeof (int) * last_basic_block);
  heads[ENTRY_BLOCK_PTR->next_bb->index] = last_basic_block;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    process_note_predictions (bb, heads);
  free_dominance_info (CDI_POST_DOMINATORS);
  free_dominance_info (CDI_DOMINATORS);
  free (heads);
  remove_fake_edges ();
}
typedef struct predict_block_info_def
{
  sreal frequency;
  basic_block next;
  unsigned int tovisit:1;
  int npredecessors;
} *predict_block_info;
typedef struct edge_info_def
{
  sreal back_edge_prob;
  unsigned int back_edge:1;
} *edge_info;
static void
propagate_freq (struct loop *loop)
{
  basic_block head = loop->header1;
  basic_block bb;
  basic_block last;
  edge e;
  basic_block nextbb;
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    {
      if (((predict_block_info) (bb)->aux)->tovisit)
 {
   int count = 0;
   for (e = bb->pred; e; e = e->pred_next)
     if (((predict_block_info) (e->src)->aux)->tovisit && !(e->flags & 32))
       count++;
     else if (((predict_block_info) (e->src)->aux)->tovisit
       && dump_file && !((edge_info) (e)->aux)->back_edge)
       fprintf (dump_file,
         "Irreducible region hit, ignoring edge to %i->%i\n",
         e->src->index, bb->index);
   ((predict_block_info) (bb)->aux)->npredecessors = count;
 }
    }
  memcpy (&((predict_block_info) (head)->aux)->frequency, &real_one, sizeof (real_one));
  last = head;
  for (bb = head; bb; bb = nextbb)
    {
      sreal cyclic_probability, frequency;
      memcpy (&cyclic_probability, &real_zero, sizeof (real_zero));
      memcpy (&frequency, &real_zero, sizeof (real_zero));
      nextbb = ((predict_block_info) (bb)->aux)->next;
      ((predict_block_info) (bb)->aux)->next = ((void *)0);
      if (bb != head)
 {
   for (e = bb->pred; e; e = e->pred_next)
     if (((edge_info) (e)->aux)->back_edge)
       {
  sreal_add (&cyclic_probability, &cyclic_probability,
      &((edge_info) (e)->aux)->back_edge_prob);
       }
     else if (!(e->flags & 32))
       {
  sreal tmp;
  sreal_init (&tmp, e->probability, 0);
  sreal_mul (&tmp, &tmp, &((predict_block_info) (e->src)->aux)->frequency);
  sreal_mul (&tmp, &tmp, &real_inv_br_prob_base);
  sreal_add (&frequency, &frequency, &tmp);
       }
   if (sreal_compare (&cyclic_probability, &real_zero) == 0)
     {
       memcpy (&((predict_block_info) (bb)->aux)->frequency, &frequency,
        sizeof (frequency));
     }
   else
     {
       if (sreal_compare (&cyclic_probability, &real_almost_one) > 0)
  {
    memcpy (&cyclic_probability, &real_almost_one,
     sizeof (real_almost_one));
  }
       sreal_sub (&cyclic_probability, &real_one, &cyclic_probability);
       sreal_div (&((predict_block_info) (bb)->aux)->frequency,
    &frequency, &cyclic_probability);
     }
 }
      ((predict_block_info) (bb)->aux)->tovisit = 0;
      for (e = bb->succ; e; e = e->succ_next)
 if (e->dest == head)
   {
     sreal tmp;
     sreal_init (&tmp, e->probability, 0);
     sreal_mul (&tmp, &tmp, &((predict_block_info) (bb)->aux)->frequency);
     sreal_mul (&((edge_info) (e)->aux)->back_edge_prob,
         &tmp, &real_inv_br_prob_base);
   }
      for (e = bb->succ; e; e = e->succ_next)
 if (!(e->flags & 32)
     && ((predict_block_info) (e->dest)->aux)->npredecessors)
   {
     ((predict_block_info) (e->dest)->aux)->npredecessors--;
     if (!((predict_block_info) (e->dest)->aux)->npredecessors)
       {
  if (!nextbb)
    nextbb = e->dest;
  else
    ((predict_block_info) (last)->aux)->next = e->dest;
  last = e->dest;
       }
    }
    }
}
static void
estimate_loops_at_level (struct loop *first_loop)
{
  struct loop *loop;
  for (loop = first_loop; loop; loop = loop->next)
    {
      edge e;
      basic_block *bbs;
      unsigned i;
      estimate_loops_at_level (loop->inner);
      if (loop->latch->succ)
 {
   e = loop_latch_edge (loop);
   ((edge_info) (e)->aux)->back_edge = 1;
       }
      bbs = get_loop_body (loop);
      for (i = 0; i < loop->num_nodes; i++)
 ((predict_block_info) (bbs[i])->aux)->tovisit = 1;
      free (bbs);
      propagate_freq (loop);
    }
}
static int
counts_to_freqs (void)
{
  gcov_type count_max, true_count_max = 0;
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    true_count_max = ((bb->count) > (true_count_max) ? (bb->count) : (true_count_max));
  count_max = ((true_count_max) > (1) ? (true_count_max) : (1));
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    bb->frequency = (bb->count * 10000 + count_max / 2) / count_max;
  return true_count_max;
}
unsigned char
expensive_function_p (int threshold)
{
  unsigned int sum = 0;
  basic_block bb;
  unsigned int limit;
  if (threshold > 10000)
    abort ();
  if (ENTRY_BLOCK_PTR->frequency == 0)
    return 1;
  limit = ENTRY_BLOCK_PTR->frequency * threshold;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      rtx insn;
      for (insn = (bb)->head_; insn != ((((bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 if (active_insn_p (insn))
   {
     sum += bb->frequency;
     if (sum > limit)
       return 1;
 }
    }
  return 0;
}
static void
estimate_bb_frequencies (struct loops *loops)
{
  basic_block bb;
  sreal freq_max;
  if (!flag_branch_probabilities || !counts_to_freqs ())
    {
      static int real_values_initialized = 0;
      if (!real_values_initialized)
        {
   real_values_initialized = 1;
   sreal_init (&real_zero, 0, 0);
   sreal_init (&real_one, 1, 0);
   sreal_init (&real_br_prob_base, 10000, 0);
   sreal_init (&real_bb_freq_max, 10000, 0);
   sreal_init (&real_one_half, 1, -1);
   sreal_div (&real_inv_br_prob_base, &real_one, &real_br_prob_base);
   sreal_sub (&real_almost_one, &real_one, &real_inv_br_prob_base);
 }
      mark_dfs_back_edges ();
      ENTRY_BLOCK_PTR->succ->probability = 10000;
      alloc_aux_for_blocks (sizeof (struct predict_block_info_def));
      alloc_aux_for_edges (sizeof (struct edge_info_def));
      for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
 {
   edge e;
   ((predict_block_info) (bb)->aux)->tovisit = 0;
   for (e = bb->succ; e; e = e->succ_next)
     {
       sreal_init (&((edge_info) (e)->aux)->back_edge_prob, e->probability, 0);
       sreal_mul (&((edge_info) (e)->aux)->back_edge_prob,
    &((edge_info) (e)->aux)->back_edge_prob,
    &real_inv_br_prob_base);
     }
 }
      estimate_loops_at_level (loops->tree_root);
      memcpy (&freq_max, &real_zero, sizeof (real_zero));
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 if (sreal_compare (&freq_max, &((predict_block_info) (bb)->aux)->frequency) < 0)
   memcpy (&freq_max, &((predict_block_info) (bb)->aux)->frequency, sizeof (freq_max));
      sreal_div (&freq_max, &real_bb_freq_max, &freq_max);
      for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
 {
   sreal tmp;
   sreal_mul (&tmp, &((predict_block_info) (bb)->aux)->frequency, &freq_max);
   sreal_add (&tmp, &tmp, &real_one_half);
   bb->frequency = sreal_to_int (&tmp);
 }
      free_aux_for_blocks ();
      free_aux_for_edges ();
    }
  compute_function_frequency ();
  if (flag_reorder_functions)
    choose_function_section ();
}
static void
compute_function_frequency (void)
{
  basic_block bb;
  if (!profile_info || !flag_branch_probabilities)
    return;
  cfun->function_frequency = FUNCTION_FREQUENCY_UNLIKELY_EXECUTED;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      if (maybe_hot_bb_p (bb))
 {
   cfun->function_frequency = FUNCTION_FREQUENCY_HOT;
   return;
 }
      if (!probably_never_executed_bb_p (bb))
 cfun->function_frequency = FUNCTION_FREQUENCY_NORMAL;
    }
}
static void
choose_function_section (void)
{
  if (((current_function_decl)->decl.section_name)
      || !targetm.have_named_sections
      || ((current_function_decl)->decl.transparent_union))
    return;
  if (cfun->function_frequency == FUNCTION_FREQUENCY_HOT)
    ((current_function_decl)->decl.section_name) =
      build_string (strlen (".text.hot"), ".text.hot");
  if (cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
    ((current_function_decl)->decl.section_name) =
      build_string (strlen (".text.unlikely"),
      ".text.unlikely");
}
struct tree_opt_pass pass_profile =
{
  "profile",
  ((void *)0),
  tree_estimate_probability,
  ((void *)0),
  ((void *)0),
  0,
  TV_BRANCH_PROB,
  (1 << 3),
  0,
  0,
  0,
  (1 << 2) | (1 << 3)
};
static FILE *outfile;
static int sawclose = 0;
static int indent1;
static void print_rtx (rtx);
const char *print_rtx_head = "";
int flag_dump_unnumbered = 0;
int flag_simple = 0;
int dump_for_graph;
void
print_mem_expr (FILE *outfile, tree expr)
{
  if (((enum tree_code) (expr)->common.code) == COMPONENT_REF)
    {
      if (((expr)->exp.operands[0]))
 print_mem_expr (outfile, ((expr)->exp.operands[0]));
      else
 fputs_unlocked (" <variable>", outfile);
      if (((((expr)->exp.operands[1]))->decl.name))
 fprintf (outfile, ".%s",
   ((const char *) (((((expr)->exp.operands[1]))->decl.name))->identifier.id.str));
    }
  else if (((enum tree_code) (expr)->common.code) == INDIRECT_REF)
    {
      fputs_unlocked (" (*", outfile);
      print_mem_expr (outfile, ((expr)->exp.operands[0]));
      fputs_unlocked (")", outfile);
    }
  else if (((expr)->decl.name))
    fprintf (outfile, " %s", ((const char *) (((expr)->decl.name))->identifier.id.str));
  else if (((enum tree_code) (expr)->common.code) == RESULT_DECL)
    fputs_unlocked (" <result>", outfile);
  else
    fputs_unlocked (" <anonymous>", outfile);
}
static void
print_rtx (rtx in_rtx)
{
  int i = 0;
  int j;
  const char *format_ptr;
  int is_insn;
  if (sawclose)
    {
      if (flag_simple)
 fputc_unlocked (' ', outfile);
      else
 fprintf (outfile, "\n%s%*s", print_rtx_head, indent1 * 2, "");
      sawclose = 0;
    }
  if (in_rtx == 0)
    {
      fputs_unlocked ("(nil)", outfile);
      sawclose = 1;
      return;
    }
  else if (((enum rtx_code) (in_rtx)->code) > ((int) LAST_AND_UNUSED_RTX_CODE))
    {
       fprintf (outfile, "(??? bad code %d\n)", ((enum rtx_code) (in_rtx)->code));
       sawclose = 1;
       return;
    }
  is_insn = ((((enum rtx_code) (in_rtx)->code) == INSN) || (((enum rtx_code) (in_rtx)->code) == JUMP_INSN) || (((enum rtx_code) (in_rtx)->code) == CALL_INSN));
  if (dump_for_graph
      && (is_insn || ((enum rtx_code) (in_rtx)->code) == NOTE
   || ((enum rtx_code) (in_rtx)->code) == CODE_LABEL || ((enum rtx_code) (in_rtx)->code) == BARRIER))
    {
      i = 3;
      indent1 = 0;
    }
  else
    {
      if (flag_simple && ((enum rtx_code) (in_rtx)->code) == CONST_INT)
 fputc_unlocked ('(', outfile);
      else
 fprintf (outfile, "(%s", (rtx_name[(int) (((enum rtx_code) (in_rtx)->code))]));
      if (! flag_simple)
 {
   if (((in_rtx)->in_struct))
     fputs_unlocked ("/s", outfile);
   if (((in_rtx)->volatil))
     fputs_unlocked ("/v", outfile);
   if (((in_rtx)->unchanging))
     fputs_unlocked ("/u", outfile);
   if (((in_rtx)->frame_related))
     fputs_unlocked ("/f", outfile);
   if (((in_rtx)->jump))
     fputs_unlocked ("/j", outfile);
   if (((in_rtx)->call))
     fputs_unlocked ("/c", outfile);
   if (((in_rtx)->return_val))
     fputs_unlocked ("/i", outfile);
   if (((enum machine_mode) (in_rtx)->mode) != VOIDmode)
     {
       if (((enum rtx_code) (in_rtx)->code) == EXPR_LIST
    || ((enum rtx_code) (in_rtx)->code) == INSN_LIST)
  fprintf (outfile, ":%s",
    (reg_note_name[(int) (((enum machine_mode) (in_rtx)->mode))]));
       else
  fprintf (outfile, ":%s", mode_name[((enum machine_mode) (in_rtx)->mode)]);
     }
 }
    }
  if (((enum rtx_code) (in_rtx)->code) == CONST_DOUBLE && (mode_class[((enum machine_mode) (in_rtx)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (in_rtx)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (in_rtx)->mode)] == MODE_VECTOR_FLOAT))
    i = 5;
  format_ptr = (rtx_format[(int) (((enum rtx_code) (in_rtx)->code))]) + i;
  for (; i < (rtx_length[(int) (((enum rtx_code) (in_rtx)->code))]); i++)
    switch (*format_ptr++)
      {
 const char *str;
      case 'T':
 str = (((in_rtx)->u.fld[i]).rtstr);
 goto string1;
      case 'S':
      case 's':
 str = (((in_rtx)->u.fld[i]).rtstr);
      string1:
 if (str == 0)
   fputs_unlocked (dump_for_graph ? " \\\"\\\"" : " \"\"", outfile);
 else
   {
     if (dump_for_graph)
       fprintf (outfile, " (\\\"%s\\\")", str);
     else
       fprintf (outfile, " (\"%s\")", str);
   }
 sawclose = 1;
 break;
      case '0':
 if (i == 1 && (((enum rtx_code) (in_rtx)->code) == REG))
   {
     if ((((in_rtx)->u.fld[0]).rtuint) != (((in_rtx)->u.fld[1]).rtuint))
       fprintf (outfile, " [%d]", (((in_rtx)->u.fld[1]).rtuint));
   }
 else if (i == 1 && ((enum rtx_code) (in_rtx)->code) == SYMBOL_REF)
   {
     int flags = ((((in_rtx))->u.fld[1]).rtint);
     if (flags)
       fprintf (outfile, " [flags 0x%x]", flags);
   }
 else if (i == 2 && ((enum rtx_code) (in_rtx)->code) == SYMBOL_REF)
   {
     tree decl = ((((in_rtx))->u.fld[2]).rttree);
     if (decl)
       print_node_brief (outfile, "", decl, 0);
   }
 else if (i == 4 && ((enum rtx_code) (in_rtx)->code) == NOTE)
   {
     switch ((((in_rtx)->u.fld[5]).rtint))
       {
       case NOTE_INSN_EH_REGION_BEG:
       case NOTE_INSN_EH_REGION_END:
  if (flag_dump_unnumbered)
    fprintf (outfile, " #");
  else
    fprintf (outfile, " %d", (((in_rtx)->u.fld[4]).rtint));
  sawclose = 1;
  break;
       case NOTE_INSN_BLOCK_BEG:
       case NOTE_INSN_BLOCK_END:
  fprintf (outfile, "");
  if (flag_dump_unnumbered)
    fprintf (outfile, "#");
  else
    fprintf (outfile, "%p",
      (char *) (((in_rtx)->u.fld[4]).rttree));
  sawclose = 1;
  break;
       case NOTE_INSN_BASIC_BLOCK:
  {
    basic_block bb = (((in_rtx)->u.fld[4]).bb);
    if (bb != 0)
      fprintf (outfile, " [bb %d]", bb->index);
    break;
         }
       case NOTE_INSN_EXPECTED_VALUE:
  indent1 += 2;
  if (!sawclose)
    fprintf (outfile, " ");
  print_rtx ((((in_rtx)->u.fld[4]).rtx1));
  indent1 -= 2;
  break;
       case NOTE_INSN_DELETED_LABEL:
  {
    const char *label = (((in_rtx)->u.fld[4]).rtstr);
    if (label)
      fprintf (outfile, " (\"%s\")", label);
    else
      fprintf (outfile, " \"\"");
  }
  break;
       case NOTE_INSN_PREDICTION:
  if ((((in_rtx)->u.fld[4]).rtint))
    fprintf (outfile, " [ %d %d ] ",
      (int)((((in_rtx)->u.fld[4]).rtint)>>8),
      (int) ((((in_rtx)->u.fld[4]).rtint)&0xff));
  else
    fprintf (outfile, " [ ERROR ]");
  break;
       case NOTE_INSN_UNLIKELY_EXECUTED_CODE:
  {
    basic_block bb = (((in_rtx)->u.fld[4]).bb);
    if (bb != 0)
      fprintf (outfile, " [bb %d]", bb->index);
    break;
  }
       case NOTE_INSN_VAR_LOCATION:
  fprintf (outfile, " (");
  print_mem_expr (outfile, (((((((in_rtx)->u.fld[4]).rtx1))->u.fld[0]).rttree)));
  fprintf (outfile, " ");
  print_rtx ((((((((in_rtx)->u.fld[4]).rtx1))->u.fld[1]).rtx1)));
  fprintf (outfile, ")");
  break;
       default:
  {
    const char * const str = (((in_rtx)->u.fld[i]).rtstr);
    if ((((in_rtx)->u.fld[5]).rtint) < 0)
      ;
    else if (str == 0)
      fputs_unlocked (dump_for_graph ? " \\\"\\\"" : " \"\"", outfile);
    else
      {
        if (dump_for_graph)
          fprintf (outfile, " (\\\"%s\\\")", str);
        else
          fprintf (outfile, " (\"%s\")", str);
      }
    break;
  }
       }
   }
 break;
      case 'e':
      do_e:
 indent1 += 2;
 if (!sawclose)
   fprintf (outfile, " ");
 print_rtx ((((in_rtx)->u.fld[i]).rtx1));
 indent1 -= 2;
 break;
      case 'E':
      case 'V':
 indent1 += 2;
 if (sawclose)
   {
     fprintf (outfile, "\n%s%*s",
       print_rtx_head, indent1 * 2, "");
     sawclose = 0;
   }
 fputs_unlocked (" [", outfile);
 if (((void *)0) != (((in_rtx)->u.fld[i]).rtvec1))
   {
     indent1 += 2;
     if ((((((in_rtx)->u.fld[i]).rtvec1))->num_elem))
       sawclose = 1;
     for (j = 0; j < (((((in_rtx)->u.fld[i]).rtvec1))->num_elem); j++)
       print_rtx ((((((in_rtx)->u.fld[i]).rtvec1))->elem[j]));
     indent1 -= 2;
   }
 if (sawclose)
   fprintf (outfile, "\n%s%*s", print_rtx_head, indent1 * 2, "");
 fputs_unlocked ("]", outfile);
 sawclose = 1;
 indent1 -= 2;
 break;
      case 'w':
 if (! flag_simple)
   fprintf (outfile, " ");
 fprintf (outfile, "%ld", ((in_rtx)->u.hwint[i]));
 if (! flag_simple)
   fprintf (outfile, " [0x%lx]",
     ((in_rtx)->u.hwint[i]));
 break;
      case 'i':
 if (i == 4 && ((((enum rtx_code) (in_rtx)->code) == INSN) || (((enum rtx_code) (in_rtx)->code) == JUMP_INSN) || (((enum rtx_code) (in_rtx)->code) == CALL_INSN)))
   {
     if ((((in_rtx)->u.fld[4]).rtint) && insn_file (in_rtx))
       fprintf(outfile, " %s:%i", insn_file (in_rtx), insn_line (in_rtx));
   }
 else if (i == 6 && ((enum rtx_code) (in_rtx)->code) == NOTE)
   {
     if ((((in_rtx)->u.fld[5]).rtint) == NOTE_INSN_DELETED_LABEL)
       fprintf (outfile, " %d", (((in_rtx)->u.fld[i]).rtint));
   }
 else
   {
     int value1 = (((in_rtx)->u.fld[i]).rtint);
     const char *name;
     if ((((enum rtx_code) (in_rtx)->code) == REG) && value1 < 53)
       fprintf (outfile, " %d %s", (((in_rtx)->u.fld[0]).rtuint),
         reg_names[(((in_rtx)->u.fld[0]).rtuint)]);
     else if ((((enum rtx_code) (in_rtx)->code) == REG)
       && value1 <= (((53)) + 4))
       {
  if (value1 == ((53)))
    fprintf (outfile, " %d virtual-incoming-args", value1);
  else if (value1 == (((53)) + 1))
    fprintf (outfile, " %d virtual-stack-vars", value1);
  else if (value1 == (((53)) + 2))
    fprintf (outfile, " %d virtual-stack-dynamic", value1);
  else if (value1 == (((53)) + 3))
    fprintf (outfile, " %d virtual-outgoing-args", value1);
  else if (value1 == (((53)) + 4))
    fprintf (outfile, " %d virtual-cfa", value1);
  else
    fprintf (outfile, " %d virtual-reg-%d", value1,
      value1-(53));
       }
     else
       if (flag_dump_unnumbered
       && (is_insn || ((enum rtx_code) (in_rtx)->code) == NOTE))
       fputc_unlocked ('#', outfile);
     else
       fprintf (outfile, " %d", value1);
     if ((((enum rtx_code) (in_rtx)->code) == REG) && (((in_rtx)->u.fld[2]).rtreg))
       {
  fputs_unlocked (" [", outfile);
  if ((((in_rtx)->u.fld[1]).rtuint) != (((in_rtx)->u.fld[0]).rtuint))
    fprintf (outfile, "orig:%i", (((in_rtx)->u.fld[1]).rtuint));
  if (((((in_rtx)->u.fld[2]).rtreg) == 0 ? 0 : (((in_rtx)->u.fld[2]).rtreg)->decl))
    print_mem_expr (outfile, ((((in_rtx)->u.fld[2]).rtreg) == 0 ? 0 : (((in_rtx)->u.fld[2]).rtreg)->decl));
  if (((((in_rtx)->u.fld[2]).rtreg) == 0 ? 0 : (((in_rtx)->u.fld[2]).rtreg)->offset))
    fprintf (outfile, "+%ld",
      ((((in_rtx)->u.fld[2]).rtreg) == 0 ? 0 : (((in_rtx)->u.fld[2]).rtreg)->offset));
  fputs_unlocked (" ]", outfile);
       }
     if (is_insn && &(((in_rtx)->u.fld[6]).rtint) == &(((in_rtx)->u.fld[i]).rtint)
  && (((in_rtx)->u.fld[i]).rtint) >= 0
  && (name = get_insn_name ((((in_rtx)->u.fld[i]).rtint))) != ((void *)0))
       fprintf (outfile, " {%s}", name);
     sawclose = 0;
   }
 break;
      case 'n':
 if ((((in_rtx)->u.fld[i]).rtint) >= (int) NOTE_INSN_BIAS
     && (((in_rtx)->u.fld[i]).rtint) < (int) NOTE_INSN_MAX)
   fprintf (outfile, " %s", (note_insn_name[((((in_rtx)->u.fld[i]).rtint)) - (int) NOTE_INSN_BIAS]));
 else
   fprintf (outfile, " %d", (((in_rtx)->u.fld[i]).rtint));
 sawclose = 0;
 break;
      case 'u':
 if ((((in_rtx)->u.fld[i]).rtx1) != ((void *)0))
   {
     rtx sub = (((in_rtx)->u.fld[i]).rtx1);
     enum rtx_code subc = ((enum rtx_code) (sub)->code);
     if (((enum rtx_code) (in_rtx)->code) == LABEL_REF)
       {
  if (subc == NOTE
      && (((sub)->u.fld[5]).rtint) == NOTE_INSN_DELETED_LABEL)
    {
      if (flag_dump_unnumbered)
        fprintf (outfile, " [# deleted]");
      else
        fprintf (outfile, " [%d deleted]", (((sub)->u.fld[0]).rtint));
      sawclose = 0;
      break;
    }
  if (subc != CODE_LABEL)
    goto do_e;
       }
     if (flag_dump_unnumbered)
       fputs_unlocked (" #", outfile);
     else
       fprintf (outfile, " %d", (((sub)->u.fld[0]).rtint));
   }
 else
   fputs_unlocked (" 0", outfile);
 sawclose = 0;
 break;
      case 'b':
 if ((((in_rtx)->u.fld[i]).rtbit) == ((void *)0))
   fputs_unlocked (" {null}", outfile);
 else
   bitmap_print (outfile, (((in_rtx)->u.fld[i]).rtbit), " {", "}");
 sawclose = 0;
 break;
      case 't':
 fprintf (outfile,  "%p", (void *) (((in_rtx)->u.fld[i]).rttree));
 break;
      case '*':
 fputs_unlocked (" Unknown", outfile);
 sawclose = 0;
 break;
      case 'B':
 if ((((in_rtx)->u.fld[i]).bb))
   fprintf (outfile, " %i", (((in_rtx)->u.fld[i]).bb)->index);
 break;
      default:
 fprintf (stderr,
   "switch format wrong in rtl.print_rtx(). format was: %c.\n",
   format_ptr[-1]);
 abort ();
      }
  switch (((enum rtx_code) (in_rtx)->code))
    {
    case MEM:
      fprintf (outfile, " [%ld", ((((in_rtx)->u.fld[1]).rtmem) == 0 ? 0 : (((in_rtx)->u.fld[1]).rtmem)->alias));
      if (((((in_rtx)->u.fld[1]).rtmem) == 0 ? 0 : (((in_rtx)->u.fld[1]).rtmem)->expr))
 print_mem_expr (outfile, ((((in_rtx)->u.fld[1]).rtmem) == 0 ? 0 : (((in_rtx)->u.fld[1]).rtmem)->expr));
      if (((((in_rtx)->u.fld[1]).rtmem) == 0 ? 0 : (((in_rtx)->u.fld[1]).rtmem)->offset))
 fprintf (outfile, "+%ld",
   ((((((in_rtx)->u.fld[1]).rtmem) == 0 ? 0 : (((in_rtx)->u.fld[1]).rtmem)->offset))->u.hwint[0]));
      if (((((in_rtx)->u.fld[1]).rtmem) != 0 ? (((in_rtx)->u.fld[1]).rtmem)->size : ((enum machine_mode) (in_rtx)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (in_rtx)->mode)]))) : 0))
 fprintf (outfile, " S%ld",
   ((((((in_rtx)->u.fld[1]).rtmem) != 0 ? (((in_rtx)->u.fld[1]).rtmem)->size : ((enum machine_mode) (in_rtx)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (in_rtx)->mode)]))) : 0))->u.hwint[0]));
      if (((((in_rtx)->u.fld[1]).rtmem) != 0 ? (((in_rtx)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (in_rtx)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (in_rtx)->mode)) : 8)) != 1)
 fprintf (outfile, " A%u", ((((in_rtx)->u.fld[1]).rtmem) != 0 ? (((in_rtx)->u.fld[1]).rtmem)->align : (0 && ((enum machine_mode) (in_rtx)->mode) != BLKmode ? get_mode_alignment (((enum machine_mode) (in_rtx)->mode)) : 8)));
      fputc_unlocked (']', outfile);
      break;
    case CONST_DOUBLE:
      if ((mode_class[((enum machine_mode) (in_rtx)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (in_rtx)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (in_rtx)->mode)] == MODE_VECTOR_FLOAT))
 {
   char s[60];
   real_to_decimal (s, ((struct real_value *)&((in_rtx)->u.hwint[0])),
      sizeof (s), 0, 1);
   fprintf (outfile, " %s", s);
   real_to_hexadecimal (s, ((struct real_value *)&((in_rtx)->u.hwint[0])),
          sizeof (s), 0, 1);
   fprintf (outfile, " [%s]", s);
 }
      break;
    case CODE_LABEL:
      fprintf (outfile, " [%d uses]", (((in_rtx)->u.fld[4]).rtint));
      switch (((enum label_kind) (((in_rtx)->jump << 1) | (in_rtx)->call)))
 {
   case LABEL_NORMAL: break;
   case LABEL_STATIC_ENTRY: fputs_unlocked (" [entry]", outfile); break;
   case LABEL_GLOBAL_ENTRY: fputs_unlocked (" [global entry]", outfile); break;
   case LABEL_WEAK_ENTRY: fputs_unlocked (" [weak entry]", outfile); break;
   default: abort();
 }
      break;
    default:
      break;
    }
  if (dump_for_graph
      && (is_insn || ((enum rtx_code) (in_rtx)->code) == NOTE
   || ((enum rtx_code) (in_rtx)->code) == CODE_LABEL || ((enum rtx_code) (in_rtx)->code) == BARRIER))
    sawclose = 0;
  else
    {
      fputc_unlocked (')', outfile);
      sawclose = 1;
    }
}
void
print_inline_rtx (FILE *outf, rtx x, int ind)
{
  int oldsaw = sawclose;
  int oldindent1 = indent1;
  sawclose = 0;
  indent1 = ind;
  outfile = outf;
  print_rtx (x);
  sawclose = oldsaw;
  indent1 = oldindent1;
}
void
debug_rtx (rtx x)
{
  outfile = stderr;
  sawclose = 0;
  print_rtx (x);
  fprintf (stderr, "\n");
}
int debug_rtx_count = 0;
void
debug_rtx_list (rtx x, int n)
{
  int i,count;
  rtx insn;
  count = n == 0 ? 1 : n < 0 ? -n : n;
  if (n < 0)
    for (i = count / 2; i > 0; i--)
      {
 if ((((x)->u.fld[1]).rtx1) == 0)
   break;
 x = (((x)->u.fld[1]).rtx1);
      }
  for (i = count, insn = x; i > 0 && insn != 0; i--, insn = (((insn)->u.fld[2]).rtx1))
    {
      debug_rtx (insn);
      fprintf (stderr, "\n");
    }
}
void
debug_rtx_range (rtx start, rtx end)
{
  while (1)
    {
      debug_rtx (start);
      fprintf (stderr, "\n");
      if (!start || start == end)
 break;
      start = (((start)->u.fld[2]).rtx1);
    }
}
rtx
debug_rtx_find (rtx x, int uid)
{
  while (x != 0 && (((x)->u.fld[0]).rtint) != uid)
    x = (((x)->u.fld[2]).rtx1);
  if (x != 0)
    {
      debug_rtx_list (x, debug_rtx_count);
      return x;
    }
  else
    {
      fprintf (stderr, "insn uid %d not found\n", uid);
      return 0;
    }
}
void
print_rtl (FILE *outf, rtx rtx_first)
{
  rtx tmp_rtx;
  outfile = outf;
  sawclose = 0;
  if (rtx_first == 0)
    {
      fputs_unlocked (print_rtx_head, outf);
      fputs_unlocked ("(nil)\n", outf);
    }
  else
    switch (((enum rtx_code) (rtx_first)->code))
      {
      case INSN:
      case JUMP_INSN:
      case CALL_INSN:
      case NOTE:
      case CODE_LABEL:
      case BARRIER:
 for (tmp_rtx = rtx_first; tmp_rtx != 0; tmp_rtx = (((tmp_rtx)->u.fld[2]).rtx1))
   if (! flag_dump_unnumbered
       || ((enum rtx_code) (tmp_rtx)->code) != NOTE || (((tmp_rtx)->u.fld[5]).rtint) < 0)
     {
       fputs_unlocked (print_rtx_head, outfile);
       print_rtx (tmp_rtx);
       fprintf (outfile, "\n");
     }
 break;
      default:
 fputs_unlocked (print_rtx_head, outfile);
 print_rtx (rtx_first);
      }
}
int
print_rtl_single (FILE *outf, rtx x)
{
  outfile = outf;
  sawclose = 0;
  if (! flag_dump_unnumbered
      || ((enum rtx_code) (x)->code) != NOTE || (((x)->u.fld[5]).rtint) < 0)
    {
      fputs_unlocked (print_rtx_head, outfile);
      print_rtx (x);
      putc_unlocked ('\n', outf);
      return 1;
    }
  return 0;
}
void
print_simple_rtl (FILE *outf, rtx x)
{
  flag_simple = 1;
  print_rtl (outf, x);
  flag_simple = 0;
}
struct bucket
{
  tree node;
  struct bucket *next;
};
static struct bucket **seen_table;
void
debug_tree (tree node)
{
  seen_table = xcalloc (37, sizeof (struct bucket *));
  print_node (stderr, "", node, 0);
  free (seen_table);
  seen_table = 0;
  putc_unlocked ('\n', stderr);
}
void
print_node_brief (FILE *file, const char *prefix, tree node, int indent1)
{
  char class;
  if (node == 0)
    return;
  class = tree_code_type[(int) (((enum tree_code) (node)->common.code))];
  if (indent1 > 0)
    fprintf (file, "");
  fprintf (file, "%s <%s %p",
    prefix, tree_code_name[(int) ((enum tree_code) (node)->common.code)], (char *) node);
  if (class == 'd')
    {
      if (((node)->decl.name))
 fprintf (file, " %s", ((const char *) (((node)->decl.name))->identifier.id.str));
    }
  else if (class == 't')
    {
      if (((node)->type.name))
 {
   if (((enum tree_code) (((node)->type.name))->common.code) == IDENTIFIER_NODE)
     fprintf (file, " %s", ((const char *) (((node)->type.name))->identifier.id.str));
   else if (((enum tree_code) (((node)->type.name))->common.code) == TYPE_DECL
     && ((((node)->type.name))->decl.name))
     fprintf (file, " %s",
       ((const char *) (((((node)->type.name))->decl.name))->identifier.id.str));
 }
    }
  if (((enum tree_code) (node)->common.code) == IDENTIFIER_NODE)
    fprintf (file, " %s", ((const char *) (node)->identifier.id.str));
  if (((enum tree_code) (node)->common.code) == INTEGER_CST)
    {
      if (((node)->common.static_flag))
 fprintf (file, " overflow");
      fprintf (file, " ");
      if ((((node)->int_cst.int_cst).high) == 0)
 fprintf (file, "%lu", (((node)->int_cst.int_cst).low));
      else if ((((node)->int_cst.int_cst).high) == -1
        && (((node)->int_cst.int_cst).low) != 0)
 fprintf (file, "-%lu",
   -(((node)->int_cst.int_cst).low));
      else
 fprintf (file, "0x%lx%08lx",
   (((node)->int_cst.int_cst).high), (((node)->int_cst.int_cst).low));
    }
  if (((enum tree_code) (node)->common.code) == REAL_CST)
    {
      struct real_value d;
      if (((node)->common.public_flag))
 fprintf (file, " overflow");
      d = (*((node)->real_cst.real_cst_ptr));
      if (real_isinf (&(d)))
 fprintf (file, " Inf");
      else if (real_isnan (&(d)))
 fprintf (file, " Nan");
      else
 {
   char string1[60];
   real_to_decimal (string1, &d, sizeof (string1), 0, 1);
   fprintf (file, " %s", string1);
 }
    }
  fprintf (file, ">");
}
void
indent1_to (FILE *file, int column)
{
  int i;
  if (column > 0)
    fprintf (file, "\n");
  for (i = 0; i < column; i++)
    fprintf (file, " ");
}
void
print_node (FILE *file, const char *prefix, tree node, int indent1)
{
  int hash;
  struct bucket *b;
  enum machine_mode mode;
  char class;
  int len;
  int first_rtl;
  int i;
  expanded_location xloc;
  if (node == 0)
    return;
  class = tree_code_type[(int) (((enum tree_code) (node)->common.code))];
  if (indent1 > 24)
    {
      print_node_brief (file, prefix, node, indent1);
      return;
    }
  if (indent1 > 8 && (class == 't' || class == 'd'))
    {
      print_node_brief (file, prefix, node, indent1);
      return;
    }
  if (((enum tree_code) (node)->common.code) == ERROR_MARK)
    {
      print_node_brief (file, prefix, node, indent1);
      return;
    }
  hash = ((unsigned long) node) % 37;
  for (b = seen_table[hash]; b; b = b->next)
    if (b->node == node)
      {
 print_node_brief (file, prefix, node, indent1);
 return;
      }
  b = xmalloc (sizeof (struct bucket));
  b->node = node;
  b->next = seen_table[hash];
  seen_table[hash] = b;
  indent1_to (file, indent1);
  fprintf (file, "%s <%s %p",
    prefix, tree_code_name[(int) ((enum tree_code) (node)->common.code)], (void *) node);
  if (class == 'd')
    {
      if (((node)->decl.name))
 fprintf (file, " %s", ((const char *) (((node)->decl.name))->identifier.id.str));
    }
  else if (class == 't')
    {
      if (((node)->type.name))
 {
   if (((enum tree_code) (((node)->type.name))->common.code) == IDENTIFIER_NODE)
     fprintf (file, " %s", ((const char *) (((node)->type.name))->identifier.id.str));
   else if (((enum tree_code) (((node)->type.name))->common.code) == TYPE_DECL
     && ((((node)->type.name))->decl.name))
     fprintf (file, " %s",
       ((const char *) (((((node)->type.name))->decl.name))->identifier.id.str));
 }
    }
  if (((enum tree_code) (node)->common.code) == IDENTIFIER_NODE)
    fprintf (file, " %s", ((const char *) (node)->identifier.id.str));
  if (((enum tree_code) (node)->common.code) == INTEGER_CST)
    {
      if (indent1 <= 4)
 print_node_brief (file, "type", ((node)->common.type), indent1 + 4);
    }
  else
    {
      print_node (file, "type", ((node)->common.type), indent1 + 4);
      if (((node)->common.type))
 indent1_to (file, indent1 + 3);
    }
  if (!(tree_code_type[(int) (((enum tree_code) (node)->common.code))] == 't') && ((node)->common.side_effects_flag))
    fputs_unlocked (" side-effects", file);
  if ((tree_code_type[(int) (((enum tree_code) (node)->common.code))] == 't') ? ((node)->common.readonly_flag) : ((node)->common.readonly_flag))
    fputs_unlocked (" readonly", file);
  if (!(tree_code_type[(int) (((enum tree_code) (node)->common.code))] == 't') && ((node)->common.constant_flag))
    fputs_unlocked (" constant", file);
  if (((node)->common.invariant_flag))
    fputs_unlocked (" invariant", file);
  if (((node)->common.addressable_flag))
    fputs_unlocked (" addressable", file);
  if (((node)->common.volatile_flag))
    fputs_unlocked (" volatile", file);
  if (((node)->common.asm_written_flag))
    fputs_unlocked (" asm_written", file);
  if (((node)->common.used_flag))
    fputs_unlocked (" used", file);
  if (((node)->common.nothrow_flag))
    fputs_unlocked ((tree_code_type[(int) (((enum tree_code) (node)->common.code))] == 't') ? " align-ok" : " nothrow", file);
  if (((node)->common.public_flag))
    fputs_unlocked (" public", file);
  if (((node)->common.private_flag))
    fputs_unlocked (" private", file);
  if (((node)->common.protected_flag))
    fputs_unlocked (" protected", file);
  if (((node)->common.static_flag))
    fputs_unlocked (" static", file);
  if (((node)->common.deprecated_flag))
    fputs_unlocked (" deprecated", file);
  if (((node)->common.visited))
    fputs_unlocked (" visited", file);
  if (((node)->common.lang_flag_0))
    fputs_unlocked (" tree_0", file);
  if (((node)->common.lang_flag_1))
    fputs_unlocked (" tree_1", file);
  if (((node)->common.lang_flag_2))
    fputs_unlocked (" tree_2", file);
  if (((node)->common.lang_flag_3))
    fputs_unlocked (" tree_3", file);
  if (((node)->common.lang_flag_4))
    fputs_unlocked (" tree_4", file);
  if (((node)->common.lang_flag_5))
    fputs_unlocked (" tree_5", file);
  if (((node)->common.lang_flag_6))
    fputs_unlocked (" tree_6", file);
  switch (tree_code_type[(int) (((enum tree_code) (node)->common.code))])
    {
    case 'd':
      mode = ((node)->decl.mode);
      if (((node)->common.unsigned_flag))
 fputs_unlocked (" unsigned", file);
      if (((node)->decl.ignored_flag))
 fputs_unlocked (" ignored", file);
      if (((node)->decl.abstract_flag))
 fputs_unlocked (" abstract", file);
      if (((node)->decl.in_system_header_flag))
 fputs_unlocked (" in_system_header", file);
      if (((node)->decl.common_flag))
 fputs_unlocked (" common", file);
      if (((node)->decl.external_flag))
 fputs_unlocked (" external", file);
      if (((node)->decl.weak_flag))
 fputs_unlocked (" weak", file);
      if (((node)->decl.regdecl_flag) && ((enum tree_code) (node)->common.code) != FIELD_DECL
   && ((enum tree_code) (node)->common.code) != FUNCTION_DECL
   && ((enum tree_code) (node)->common.code) != LABEL_DECL)
 fputs_unlocked (" regdecl", file);
      if (((node)->decl.nonlocal_flag))
 fputs_unlocked (" nonlocal", file);
      if (((enum tree_code) (node)->common.code) == TYPE_DECL && ((node)->decl.external_flag))
 fputs_unlocked (" suppress-debug", file);
      if (((enum tree_code) (node)->common.code) == FUNCTION_DECL && ((node)->decl.inline_flag))
 fputs_unlocked (((node)->decl.declared_inline_flag) ? " inline" : " autoinline", file);
      if (((enum tree_code) (node)->common.code) == FUNCTION_DECL && (((node)->decl.built_in_class) != NOT_BUILT_IN))
 fputs_unlocked (" built-in", file);
      if (((enum tree_code) (node)->common.code) == FUNCTION_DECL && ((node)->decl.regdecl_flag))
 fputs_unlocked (" no-static-chain", file);
      if (((enum tree_code) (node)->common.code) == FIELD_DECL && ((node)->decl.regdecl_flag))
 fputs_unlocked (" packed", file);
      if (((enum tree_code) (node)->common.code) == FIELD_DECL && ((node)->decl.bit_field_flag))
 fputs_unlocked (" bit-field", file);
      if (((enum tree_code) (node)->common.code) == FIELD_DECL && ((node)->decl.non_addressable))
 fputs_unlocked (" nonaddressable", file);
      if (((enum tree_code) (node)->common.code) == LABEL_DECL && ((node)->decl.bit_field_flag))
 fputs_unlocked (" too-late", file);
      if (((enum tree_code) (node)->common.code) == LABEL_DECL && ((node)->decl.regdecl_flag))
 fputs_unlocked (" error-issued", file);
      if (((enum tree_code) (node)->common.code) == VAR_DECL && ((node)->decl.bit_field_flag))
 fputs_unlocked (" in-text-section", file);
      if (((enum tree_code) (node)->common.code) == VAR_DECL && ((node)->decl.thread_local_flag))
 fputs_unlocked (" thread-local", file);
      if (((enum tree_code) (node)->common.code) == PARM_DECL && ((node)->decl.transparent_union))
 fputs_unlocked (" transparent-union", file);
      if (((node)->decl.virtual_flag))
 fputs_unlocked (" virtual", file);
      if (((node)->decl.defer_output))
 fputs_unlocked (" defer-output", file);
      if (((node)->decl.lang_flag_0))
 fputs_unlocked (" decl_0", file);
      if (((node)->decl.lang_flag_1))
 fputs_unlocked (" decl_1", file);
      if (((node)->decl.lang_flag_2))
 fputs_unlocked (" decl_2", file);
      if (((node)->decl.lang_flag_3))
 fputs_unlocked (" decl_3", file);
      if (((node)->decl.lang_flag_4))
 fputs_unlocked (" decl_4", file);
      if (((node)->decl.lang_flag_5))
 fputs_unlocked (" decl_5", file);
      if (((node)->decl.lang_flag_6))
 fputs_unlocked (" decl_6", file);
      if (((node)->decl.lang_flag_7))
 fputs_unlocked (" decl_7", file);
      fprintf (file, " %s", mode_name[mode]);
      xloc = (((node)->decl.locus));
      fprintf (file, " file %s line %d", xloc.file, xloc.line);
      print_node (file, "size", ((node)->decl.size), indent1 + 4);
      print_node (file, "unit size", ((node)->decl.size_unit), indent1 + 4);
      if (((enum tree_code) (node)->common.code) != FUNCTION_DECL
   || ((node)->decl.inline_flag) || (((node)->decl.built_in_class) != NOT_BUILT_IN))
 indent1_to (file, indent1 + 3);
      if (((enum tree_code) (node)->common.code) != FUNCTION_DECL)
 {
   if (((node)->decl.user_align))
     fprintf (file, " user");
   fprintf (file, " align %d", ((node)->decl.u1.a.align));
   if (((enum tree_code) (node)->common.code) == FIELD_DECL)
     fprintf (file, " offset_align %lu",
       (((unsigned long)1) << (node)->decl.u1.a.off_align));
 }
      else if ((((node)->decl.built_in_class) != NOT_BUILT_IN))
 {
   if (((node)->decl.built_in_class) == BUILT_IN_MD)
     fprintf (file, " built-in BUILT_IN_MD %d", ((node)->decl.u1.f));
   else
     fprintf (file, " built-in %s:%s",
       built_in_class_names[(int) ((node)->decl.built_in_class)],
       built_in_names[(int) ((node)->decl.u1.f)]);
 }
      if ((((node)->decl.pointer_alias_set) != - 1))
 fprintf (file, " alias set %ld",
   ((node)->decl.pointer_alias_set));
      if (((enum tree_code) (node)->common.code) == FIELD_DECL)
 {
   print_node (file, "offset", ((node)->decl.arguments), indent1 + 4);
   print_node (file, "bit offset", ((node)->decl.u2.t),
        indent1 + 4);
 }
      print_node_brief (file, "context", ((node)->decl.context), indent1 + 4);
      print_node_brief (file, "attributes",
   ((node)->decl.attributes), indent1 + 4);
      print_node_brief (file, "abstract_origin",
   ((node)->decl.abstract_origin), indent1 + 4);
      print_node (file, "arguments", ((node)->decl.arguments), indent1 + 4);
      print_node (file, "result", ((node)->decl.result), indent1 + 4);
      print_node_brief (file, "initial", ((node)->decl.initial), indent1 + 4);
      lang_hooks.print_decl (file, node, indent1);
      if (((node)->decl.rtl != ((void *)0)))
 {
   indent1_to (file, indent1 + 4);
   print_rtl (file, ((node)->decl.rtl ? (node)->decl.rtl : (make_decl_rtl (node, ((void *)0)), (node)->decl.rtl)));
 }
      if (((enum tree_code) (node)->common.code) == PARM_DECL)
 {
   print_node (file, "arg-type", ((node)->decl.initial), indent1 + 4);
   print_node (file, "arg-type-as-written",
        ((node)->decl.result), indent1 + 4);
   if (((node)->decl.u2.r) != 0)
     {
       indent1_to (file, indent1 + 4);
       fprintf (file, "incoming-rtl ");
       print_rtl (file, ((node)->decl.u2.r));
     }
 }
      else if (((enum tree_code) (node)->common.code) == FUNCTION_DECL
        && ((node)->decl.u2.f) != 0)
 {
   indent1_to (file, indent1 + 4);
   fprintf (file, "saved-insns %p",
     (void *) ((node)->decl.u2.f));
 }
      if (indent1 == 4)
 print_node (file, "chain", ((node)->common.chain), indent1 + 4);
      else
 print_node_brief (file, "chain", ((node)->common.chain), indent1 + 4);
      break;
    case 't':
      if (((node)->common.unsigned_flag))
 fputs_unlocked (" unsigned", file);
      if ((((enum tree_code) (node)->common.code) == RECORD_TYPE
    || ((enum tree_code) (node)->common.code) == UNION_TYPE
    || ((enum tree_code) (node)->common.code) == QUAL_UNION_TYPE)
   && ((node)->type.no_force_blk_flag))
 fputs_unlocked (" no-force-blk", file);
      else if (((enum tree_code) (node)->common.code) == INTEGER_TYPE
        && ((node)->type.no_force_blk_flag))
 fputs_unlocked (" sizetype", file);
      else if (((enum tree_code) (node)->common.code) == FUNCTION_TYPE
        && ((node)->type.no_force_blk_flag))
 fputs_unlocked (" returns-stack-depressed", file);
      if (((node)->type.string1_flag))
 fputs_unlocked (" string-flag", file);
      if (((node)->type.needs_constructing_flag))
 fputs_unlocked (" needs-constructing", file);
      if (((enum tree_code) (node)->common.code) == UNION_TYPE && ((node)->type.transparent_union_flag))
 fputs_unlocked (" transparent-union", file);
      else if (((enum tree_code) (node)->common.code) == ARRAY_TYPE
        && ((node)->type.transparent_union_flag))
 fputs_unlocked (" nonaliased-component", file);
      if (((node)->type.packed_flag))
 fputs_unlocked (" packed", file);
      if (((node)->type.restrict_flag))
 fputs_unlocked (" restrict", file);
      if (((node)->type.lang_flag_0))
 fputs_unlocked (" type_0", file);
      if (((node)->type.lang_flag_1))
 fputs_unlocked (" type_1", file);
      if (((node)->type.lang_flag_2))
 fputs_unlocked (" type_2", file);
      if (((node)->type.lang_flag_3))
 fputs_unlocked (" type_3", file);
      if (((node)->type.lang_flag_4))
 fputs_unlocked (" type_4", file);
      if (((node)->type.lang_flag_5))
 fputs_unlocked (" type_5", file);
      if (((node)->type.lang_flag_6))
 fputs_unlocked (" type_6", file);
      mode = ((node)->type.mode);
      fprintf (file, " %s", mode_name[mode]);
      print_node (file, "size", ((node)->type.size), indent1 + 4);
      print_node (file, "unit size", ((node)->type.size_unit), indent1 + 4);
      indent1_to (file, indent1 + 3);
      if (((node)->type.user_align))
 fprintf (file, " user");
      fprintf (file, " align %d symtab %d alias set %ld",
        ((node)->type.align), ((node)->type.symtab.address),
        ((node)->type.alias_set));
      print_node (file, "attributes", ((node)->type.attributes), indent1 + 4);
      if ((((enum tree_code) (node)->common.code) == INTEGER_TYPE || ((enum tree_code) (node)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (node)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (node)->common.code) == CHAR_TYPE) || ((enum tree_code) (node)->common.code) == REAL_TYPE)
 {
   fprintf (file, " precision %d", ((node)->type.precision));
   print_node_brief (file, "min", ((node)->type.minval), indent1 + 4);
   print_node_brief (file, "max", ((node)->type.maxval), indent1 + 4);
 }
      if (((enum tree_code) (node)->common.code) == ENUMERAL_TYPE)
 print_node (file, "values", ((node)->type.value1s), indent1 + 4);
      else if (((enum tree_code) (node)->common.code) == ARRAY_TYPE || ((enum tree_code) (node)->common.code) == SET_TYPE)
 print_node (file, "domain", ((node)->type.value1s), indent1 + 4);
      else if (((enum tree_code) (node)->common.code) == RECORD_TYPE
        || ((enum tree_code) (node)->common.code) == UNION_TYPE
        || ((enum tree_code) (node)->common.code) == QUAL_UNION_TYPE)
 print_node (file, "fields", ((node)->type.value1s), indent1 + 4);
      else if (((enum tree_code) (node)->common.code) == FUNCTION_TYPE
        || ((enum tree_code) (node)->common.code) == METHOD_TYPE)
 {
   if (((node)->type.maxval))
     print_node_brief (file, "method basetype",
         ((node)->type.maxval), indent1 + 4);
   print_node (file, "arg-types", ((node)->type.value1s), indent1 + 4);
 }
      else if (((enum tree_code) (node)->common.code) == OFFSET_TYPE)
 print_node_brief (file, "basetype", ((node)->type.maxval),
     indent1 + 4);
      if (((node)->type.context))
 print_node_brief (file, "context", ((node)->type.context), indent1 + 4);
      lang_hooks.print_type (file, node, indent1);
      if (((node)->type.pointer_to) || ((node)->common.chain))
 indent1_to (file, indent1 + 3);
      print_node_brief (file, "pointer_to_this", ((node)->type.pointer_to),
   indent1 + 4);
      print_node_brief (file, "reference_to_this", ((node)->type.reference_to),
   indent1 + 4);
      print_node_brief (file, "chain", ((node)->common.chain), indent1 + 4);
      break;
    case 'e':
    case '<':
    case '1':
    case '2':
    case 'r':
    case 's':
      if (((enum tree_code) (node)->common.code) == BIT_FIELD_REF && ((node)->common.unsigned_flag))
 fputs_unlocked (" unsigned", file);
      if (((enum tree_code) (node)->common.code) == BIND_EXPR)
 {
   print_node (file, "vars", ((node)->exp.operands[0]), indent1 + 4);
   print_node (file, "body", ((node)->exp.operands[1]), indent1 + 4);
   print_node (file, "block", ((node)->exp.operands[2]), indent1 + 4);
   break;
 }
      len = tree_code_length[(int) (((enum tree_code) (node)->common.code))];
      first_rtl = first_rtl_op (((enum tree_code) (node)->common.code));
      for (i = 0; i < len; i++)
 {
   if (i >= first_rtl)
     {
       indent1_to (file, indent1 + 4);
       fprintf (file, "rtl %d ", i);
       if (((node)->exp.operands[i]))
  print_rtl (file, (rtx) ((node)->exp.operands[i]));
       else
  fprintf (file, "(nil)");
       fprintf (file, "\n");
     }
   else
     {
       char temp[10];
       sprintf (temp, "arg %d", i);
       print_node (file, temp, ((node)->exp.operands[i]), indent1 + 4);
     }
 }
      print_node (file, "chain", ((node)->common.chain), indent1 + 4);
      break;
    case 'c':
    case 'x':
      switch (((enum tree_code) (node)->common.code))
 {
 case INTEGER_CST:
   if (((node)->common.static_flag))
     fprintf (file, " overflow");
   fprintf (file, " ");
   if ((((node)->int_cst.int_cst).high) == 0)
     fprintf (file, "%lu",
       (((node)->int_cst.int_cst).low));
   else if ((((node)->int_cst.int_cst).high) == -1
     && (((node)->int_cst.int_cst).low) != 0)
     fprintf (file, "-%lu",
       -(((node)->int_cst.int_cst).low));
   else
     fprintf (file, "0x%lx%08lx",
       (((node)->int_cst.int_cst).high), (((node)->int_cst.int_cst).low));
   break;
 case REAL_CST:
   {
     struct real_value d;
     if (((node)->common.public_flag))
       fprintf (file, " overflow");
     d = (*((node)->real_cst.real_cst_ptr));
     if (real_isinf (&(d)))
       fprintf (file, " Inf");
     else if (real_isnan (&(d)))
       fprintf (file, " Nan");
     else
       {
  char string1[64];
  real_to_decimal (string1, &d, sizeof (string1), 0, 1);
  fprintf (file, " %s", string1);
       }
   }
   break;
 case VECTOR_CST:
   {
     tree vals = ((node)->vector.elements);
     char buf[10];
     tree link;
     int i;
     i = 0;
     for (link = vals; link; link = ((link)->common.chain), ++i)
       {
  sprintf (buf, "elt%d: ", i);
  print_node (file, buf, ((link)->list.value1), indent1 + 4);
       }
   }
   break;
 case COMPLEX_CST:
   print_node (file, "real", ((node)->complex.real), indent1 + 4);
   print_node (file, "imag", ((node)->complex.imag), indent1 + 4);
   break;
 case STRING_CST:
   {
     const char *p = ((node)->string1.pointer);
     int i = ((node)->string1.length);
     fputs_unlocked (" \"", file);
     while (--i >= 0)
       {
  char ch = *p++;
  if (ch >= ' ' && ch < 127)
    putc_unlocked (ch, file);
  else
    fprintf(file, "\\%03o", ch & 0xFF);
       }
     fputc_unlocked ('\"', file);
   }
   if (indent1 == 4)
     print_node (file, "chain", ((node)->common.chain), indent1 + 4);
   else
     print_node_brief (file, "chain", ((node)->common.chain), indent1 + 4);
   break;
 case IDENTIFIER_NODE:
   lang_hooks.print_identifier (file, node, indent1);
   break;
 case TREE_LIST:
   print_node (file, "purpose", ((node)->list.purpose), indent1 + 4);
   print_node (file, "value", ((node)->list.value1), indent1 + 4);
   print_node (file, "chain", ((node)->common.chain), indent1 + 4);
   break;
 case TREE_VEC:
   len = ((node)->vec.length);
   for (i = 0; i < len; i++)
     if (((node)->vec.a[i]))
       {
  char temp[10];
  sprintf (temp, "elt %d", i);
  indent1_to (file, indent1 + 4);
  print_node_brief (file, temp, ((node)->vec.a[i]), 0);
       }
   break;
 case BLOCK:
   print_node (file, "vars", ((node)->block.vars), indent1 + 4);
   print_node (file, "supercontext", ((node)->block.supercontext),
        indent1 + 4);
   print_node (file, "subblocks", ((node)->block.subblocks), indent1 + 4);
   print_node (file, "chain", (((node))->common.chain), indent1 + 4);
   print_node (file, "abstract_origin",
        ((node)->block.abstract_origin), indent1 + 4);
   break;
 default:
   if (tree_code_type[(int) (((enum tree_code) (node)->common.code))] == 'x')
     lang_hooks.print_xnode (file, node, indent1);
   break;
 }
      break;
    }
  if ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (node)->common.code))])) != 0) ? (node)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    {
      expanded_location xloc = (((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (node)->common.code))])) != 0) ? (node)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) ? *(node)->exp.locus : unknown_location));
      indent1_to (file, indent1+4);
      fprintf (file, "%s:%d", xloc.file, xloc.line);
    }
  fprintf (file, ">");
}
enum hist_type
{
  HIST_TYPE_INTERVAL,
  HIST_TYPE_POW2,
  HIST_TYPE_SINGLE_VALUE,
  HIST_TYPE_CONST_DELTA
};
struct histogram_value
{
  void * value1;
  enum machine_mode mode;
  void * seq;
  void * insn;
  enum hist_type type;
  unsigned n_counters;
  union
    {
      struct
 {
   int int_start;
   int steps;
   int may_be_less;
   int may_be_more;
 } intvl;
      struct
 {
   int may_be_other;
 } pow2;
    } hdata;
};
extern void rtl_register_value_prof_hooks (void);
extern void tree_register_value_prof_hooks (void);
extern void find_values_to_profile (unsigned *, struct histogram_value **);
extern void free_profiled_values (unsigned, struct histogram_value *);
extern unsigned char value_profile_transformations (void);
struct profile_hooks {
  void (*gen_edge_profiler) (int, edge);
  void (*gen_interval_profiler) (struct histogram_value *, unsigned, unsigned);
  void (*gen_pow2_profiler) (struct histogram_value *, unsigned, unsigned);
  void (*gen_one_value_profiler) (struct histogram_value *, unsigned, unsigned);
  void (*gen_const_delta_profiler) (struct histogram_value *, unsigned,
        unsigned);
  FILE * (*profile_dump_file) (void);
};
extern void init_branch_prob (void);
extern void branch_prob (void);
extern void end_branch_prob (void);
extern void tree_register_profile_hooks (void);
extern void rtl_register_profile_hooks (void);
extern struct profile_hooks tree_profile_hooks;
extern struct profile_hooks rtl_profile_hooks;
static struct value_prof_hooks *value_prof_hooks;
static void insn_divmod_values_to_profile (rtx, unsigned *,
        struct histogram_value **);
static void insn_values_to_profile (rtx, unsigned *, struct histogram_value **);
static rtx gen_divmod_fixed_value (enum machine_mode, enum rtx_code, rtx, rtx,
       rtx, gcov_type, int);
static rtx gen_mod_pow2 (enum machine_mode, enum rtx_code, rtx, rtx, rtx, int);
static rtx gen_mod_subtract (enum machine_mode, enum rtx_code, rtx, rtx, rtx,
        int, int, int);
static unsigned char divmod_fixed_value_transform (rtx insn);
static unsigned char mod_pow2_value_transform (rtx);
static unsigned char mod_subtract_transform (rtx);
void
free_profiled_values (unsigned n_values ,
        struct histogram_value *values)
{
  free (values);
}
static void
insn_divmod_values_to_profile (rtx insn, unsigned *n_values,
          struct histogram_value **values)
{
  rtx set, set_src, op1, op2;
  enum machine_mode mode;
  if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return;
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (!set)
    return;
  mode = ((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode);
  if (!(mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT || mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_VECTOR_INT))
    return;
  set_src = (((set)->u.fld[1]).rtx1);
  switch (((enum rtx_code) (set_src)->code))
    {
    case DIV:
    case MOD:
    case UDIV:
    case UMOD:
      op1 = (((set_src)->u.fld[0]).rtx1);
      op2 = (((set_src)->u.fld[1]).rtx1);
      if (side_effects_p (op2))
 return;
      if ((((enum rtx_code) (set_src)->code) == UMOD) && !((rtx_class[(int) (((enum rtx_code) (op2)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op2)->code) == CONST_VECTOR))
 {
   *values = xrealloc (*values,
         (*n_values + 1)
    * sizeof (struct histogram_value));
   (*values)[*n_values].value1 = op2;
   (*values)[*n_values].seq = (rtx) 0;
   (*values)[*n_values].mode = mode;
   (*values)[*n_values].insn = insn;
   (*values)[*n_values].type = HIST_TYPE_POW2;
   (*values)[*n_values].hdata.pow2.may_be_other = 1;
   (*n_values)++;
 }
      if (!((rtx_class[(int) (((enum rtx_code) (op2)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op2)->code) == CONST_VECTOR))
 {
   *values = xrealloc (*values,
         (*n_values + 1)
    * sizeof (struct histogram_value));
   (*values)[*n_values].value1 = op2;
   (*values)[*n_values].mode = mode;
   (*values)[*n_values].seq = (rtx) 0;
   (*values)[*n_values].insn = insn;
   (*values)[*n_values].type = HIST_TYPE_SINGLE_VALUE;
   (*n_values)++;
 }
      if (((enum rtx_code) (set_src)->code) == UMOD && !side_effects_p (op1))
 {
   rtx tmp;
   *values = xrealloc (*values,
         (*n_values + 1)
    * sizeof (struct histogram_value));
   start_sequence ();
   tmp = simplify_gen_binary (DIV, mode, copy_rtx (op1), copy_rtx (op2));
   (*values)[*n_values].value1 = force_operand (tmp, (rtx) 0);
   (*values)[*n_values].seq = get_insns ();
   end_sequence ();
   (*values)[*n_values].mode = mode;
   (*values)[*n_values].insn = insn;
   (*values)[*n_values].type = HIST_TYPE_INTERVAL;
   (*values)[*n_values].hdata.intvl.int_start = 0;
   (*values)[*n_values].hdata.intvl.steps = 2;
   (*values)[*n_values].hdata.intvl.may_be_less = 1;
   (*values)[*n_values].hdata.intvl.may_be_more = 1;
   (*n_values)++;
 }
      return;
    default:
      return;
    }
}
static void
insn_values_to_profile (rtx insn,
   unsigned *n_values,
   struct histogram_value **values)
{
  if (flag_value_profile_transformations)
    insn_divmod_values_to_profile (insn, n_values, values);
}
static void
rtl_find_values_to_profile (unsigned *n_values, struct histogram_value **values)
{
  rtx insn;
  unsigned i;
  life_analysis (((void *)0), 1);
  *n_values = 0;
  *values = ((void *)0);
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    insn_values_to_profile (insn, n_values, values);
  for (i = 0; i < *n_values; i++)
    {
      switch ((*values)[i].type)
 {
 case HIST_TYPE_INTERVAL:
   if (dump_file)
     fprintf (dump_file,
       "Interval counter for insn %d, range %d -- %d.\n",
       ((((rtx)(*values)[i].insn)->u.fld[0]).rtint),
       (*values)[i].hdata.intvl.int_start,
       ((*values)[i].hdata.intvl.int_start
        + (*values)[i].hdata.intvl.steps - 1));
   (*values)[i].n_counters = (*values)[i].hdata.intvl.steps +
    ((*values)[i].hdata.intvl.may_be_less ? 1 : 0) +
    ((*values)[i].hdata.intvl.may_be_more ? 1 : 0);
   break;
 case HIST_TYPE_POW2:
   if (dump_file)
     fprintf (dump_file,
       "Pow2 counter for insn %d.\n",
       ((((rtx)(*values)[i].insn)->u.fld[0]).rtint));
   (*values)[i].n_counters
  = ((unsigned short) (((unsigned short) mode_size[(*values)[i].mode]) * 8))
    + ((*values)[i].hdata.pow2.may_be_other ? 1 : 0);
   break;
 case HIST_TYPE_SINGLE_VALUE:
   if (dump_file)
     fprintf (dump_file,
       "Single value counter for insn %d.\n",
       ((((rtx)(*values)[i].insn)->u.fld[0]).rtint));
   (*values)[i].n_counters = 3;
   break;
 case HIST_TYPE_CONST_DELTA:
   if (dump_file)
     fprintf (dump_file,
       "Constant delta counter for insn %d.\n",
       ((((rtx)(*values)[i].insn)->u.fld[0]).rtint));
   (*values)[i].n_counters = 4;
   break;
 default:
   abort ();
 }
    }
  allocate_reg_info (max_reg_num (), 0, 0);
}
static unsigned char
rtl_value_profile_transformations (void)
{
  rtx insn, next;
  int changed = 0;
  for (insn = get_insns (); insn; insn = next)
    {
      next = (((insn)->u.fld[2]).rtx1);
      if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      if (!find_reg_note (insn, REG_VALUE_PROFILE, 0))
 continue;
      if (!maybe_hot_bb_p ((((insn)->u.fld[3]).bb)))
 continue;
      if (dump_file)
 {
   fprintf (dump_file, "Trying transformations on insn %d\n",
     (((insn)->u.fld[0]).rtint));
   print_rtl_single (dump_file, insn);
 }
      if (flag_value_profile_transformations
   && (mod_subtract_transform (insn)
       || divmod_fixed_value_transform (insn)
       || mod_pow2_value_transform (insn)))
 changed = 1;
    }
  if (changed)
    {
      commit_edge_insertions ();
      allocate_reg_info (max_reg_num (), 0, 0);
    }
  return changed;
}
static rtx
gen_divmod_fixed_value (enum machine_mode mode, enum rtx_code operation,
   rtx target, rtx op1, rtx op2, gcov_type value,
   int prob)
{
  rtx tmp, tmp1, jump;
  rtx neq_label = gen_label_rtx ();
  rtx end_label = gen_label_rtx ();
  rtx sequence;
  start_sequence ();
  if (!(((enum rtx_code) (op2)->code) == REG))
    {
      tmp = gen_reg_rtx (mode);
      emit_move_insn (tmp, copy_rtx (op2));
    }
  else
    tmp = op2;
  do_compare_rtx_and_jump (tmp, gen_rtx_CONST_INT (VOIDmode, (long) (value1)), NE, 0, mode, (rtx) 0,
      (rtx) 0, neq_label);
  jump = get_last_insn ();
  (((jump)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PROB), (gen_rtx_CONST_INT (VOIDmode, (long) (10000 - prob))), ((((jump)->u.fld[8]).rtx1)))
                      ;
  tmp1 = simplify_gen_binary (operation, mode,
         copy_rtx (op1), gen_rtx_CONST_INT (VOIDmode, (long) (value1)));
  tmp1 = force_operand (tmp1, target);
  if (tmp1 != target)
    emit_move_insn (copy_rtx (target), copy_rtx (tmp1));
  emit_jump_insn (gen_jump (end_label));
  emit_barrier ();
  emit_label (neq_label);
  tmp1 = simplify_gen_binary (operation, mode,
         copy_rtx (op1), copy_rtx (tmp));
  tmp1 = force_operand (tmp1, target);
  if (tmp1 != target)
    emit_move_insn (copy_rtx (target), copy_rtx (tmp1));
  emit_label (end_label);
  sequence = get_insns ();
  end_sequence ();
  rebuild_jump_labels (sequence);
  return sequence;
}
static unsigned char
divmod_fixed_value_transform (rtx insn)
{
  rtx set, set_src, set_dest, op1, op2, vlaue1, histogram;
  enum rtx_code code;
  enum machine_mode mode;
  gcov_type val, count, all;
  edge e;
  int prob;
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (!set)
    return 0;
  set_src = (((set)->u.fld[1]).rtx1);
  set_dest = (((set)->u.fld[0]).rtx1);
  code = ((enum rtx_code) (set_src)->code);
  mode = ((enum machine_mode) (set_dest)->mode);
  if (code != DIV && code != MOD && code != UDIV && code != UMOD)
    return 0;
  op1 = (((set_src)->u.fld[0]).rtx1);
  op2 = (((set_src)->u.fld[1]).rtx1);
  for (histogram = (((insn)->u.fld[8]).rtx1);
       histogram;
       histogram = (((histogram)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (histogram)->mode)) == REG_VALUE_PROFILE
 && ((((((histogram)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == gen_rtx_CONST_INT (VOIDmode, (long) (HIST_TYPE_SINGLE_VALUE)))
      break;
  if (!histogram)
    return 0;
  histogram = ((((((histogram)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
  vlaue1 = (((histogram)->u.fld[0]).rtx1);
  histogram = (((histogram)->u.fld[1]).rtx1);
  val = (((((histogram)->u.fld[0]).rtx1))->u.hwint[0]);
  histogram = (((histogram)->u.fld[1]).rtx1);
  count = (((((histogram)->u.fld[0]).rtx1))->u.hwint[0]);
  histogram = (((histogram)->u.fld[1]).rtx1);
  all = (((((histogram)->u.fld[0]).rtx1))->u.hwint[0]);
  if (!rtx_equal_p (op2, vlaue1) || 2 * count < all)
    return 0;
  if (dump_file)
    fprintf (dump_file, "Div/mod by constant transformation on insn %d\n",
      (((insn)->u.fld[0]).rtint));
  prob = (count * 10000 + all / 2) / all;
  e = split_block ((((insn)->u.fld[3]).bb), (((insn)->u.fld[1]).rtx1));
  delete_insn (insn);
  insert_insn_on_edge (
 gen_divmod_fixed_value (mode, code, set_dest,
    op1, op2, val, prob), e);
  return 1;
}
static rtx
gen_mod_pow2 (enum machine_mode mode, enum rtx_code operation, rtx target,
       rtx op1, rtx op2, int prob)
{
  rtx tmp, tmp1, tmp2, tmp3, jump;
  rtx neq_label = gen_label_rtx ();
  rtx end_label = gen_label_rtx ();
  rtx sequence;
  start_sequence ();
  if (!(((enum rtx_code) (op2)->code) == REG))
    {
      tmp = gen_reg_rtx (mode);
      emit_move_insn (tmp, copy_rtx (op2));
    }
  else
    tmp = op2;
  tmp1 = expand_simple_binop (mode, PLUS, tmp, (const_int_rtx[64 -1]), (rtx) 0,
         0, OPTAB_WIDEN);
  tmp2 = expand_simple_binop (mode, AND, tmp, tmp1, (rtx) 0,
         0, OPTAB_WIDEN);
  do_compare_rtx_and_jump (tmp2, (const_int_rtx[64]), NE, 0, mode, (rtx) 0,
      (rtx) 0, neq_label);
  jump = get_last_insn ();
  (((jump)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PROB), (gen_rtx_CONST_INT (VOIDmode, (long) (10000 - prob))), ((((jump)->u.fld[8]).rtx1)))
                      ;
  tmp3 = expand_simple_binop (mode, AND, op1, tmp1, target,
         0, OPTAB_WIDEN);
  if (tmp3 != target)
    emit_move_insn (copy_rtx (target), tmp3);
  emit_jump_insn (gen_jump (end_label));
  emit_barrier ();
  emit_label (neq_label);
  tmp1 = simplify_gen_binary (operation, mode, copy_rtx (op1), copy_rtx (tmp));
  tmp1 = force_operand (tmp1, target);
  if (tmp1 != target)
    emit_move_insn (target, tmp1);
  emit_label (end_label);
  sequence = get_insns ();
  end_sequence ();
  rebuild_jump_labels (sequence);
  return sequence;
}
static unsigned char
mod_pow2_value_transform (rtx insn)
{
  rtx set, set_src, set_dest, op1, op2, vlaue1, histogram;
  enum rtx_code code;
  enum machine_mode mode;
  gcov_type wrong_values, count;
  edge e;
  int i, all, prob;
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (!set)
    return 0;
  set_src = (((set)->u.fld[1]).rtx1);
  set_dest = (((set)->u.fld[0]).rtx1);
  code = ((enum rtx_code) (set_src)->code);
  mode = ((enum machine_mode) (set_dest)->mode);
  if (code != UMOD)
    return 0;
  op1 = (((set_src)->u.fld[0]).rtx1);
  op2 = (((set_src)->u.fld[1]).rtx1);
  for (histogram = (((insn)->u.fld[8]).rtx1);
       histogram;
       histogram = (((histogram)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (histogram)->mode)) == REG_VALUE_PROFILE
 && ((((((histogram)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == gen_rtx_CONST_INT (VOIDmode, (long) (HIST_TYPE_POW2)))
      break;
  if (!histogram)
    return 0;
  histogram = ((((((histogram)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
  vlaue1 = (((histogram)->u.fld[0]).rtx1);
  histogram = (((histogram)->u.fld[1]).rtx1);
  wrong_values =(((((histogram)->u.fld[0]).rtx1))->u.hwint[0]);
  histogram = (((histogram)->u.fld[1]).rtx1);
  count = 0;
  for (i = 0; i < ((unsigned short) (((unsigned short) mode_size[mode]) * 8)); i++)
    {
      count += (((((histogram)->u.fld[0]).rtx1))->u.hwint[0]);
      histogram = (((histogram)->u.fld[1]).rtx1);
    }
  if (!rtx_equal_p (op2, vlaue1))
    return 0;
  if (count < wrong_values)
    return 0;
  if (dump_file)
    fprintf (dump_file, "Mod power of 2 transformation on insn %d\n",
      (((insn)->u.fld[0]).rtint));
  all = count + wrong_values;
  prob = (count * 10000 + all / 2) / all;
  e = split_block ((((insn)->u.fld[3]).bb), (((insn)->u.fld[1]).rtx1));
  delete_insn (insn);
  insert_insn_on_edge (
 gen_mod_pow2 (mode, code, set_dest, op1, op2, prob), e);
  return 1;
}
static rtx
gen_mod_subtract (enum machine_mode mode, enum rtx_code operation,
    rtx target, rtx op1, rtx op2, int sub, int prob1, int prob2)
{
  rtx tmp, tmp1, jump;
  rtx end_label = gen_label_rtx ();
  rtx sequence;
  int i;
  start_sequence ();
  if (!(((enum rtx_code) (op2)->code) == REG))
    {
      tmp = gen_reg_rtx (mode);
      emit_move_insn (tmp, copy_rtx (op2));
    }
  else
    tmp = op2;
  emit_move_insn (target, copy_rtx (op1));
  do_compare_rtx_and_jump (target, tmp, LTU, 0, mode, (rtx) 0,
      (rtx) 0, end_label);
  jump = get_last_insn ();
  (((jump)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PROB), (gen_rtx_CONST_INT (VOIDmode, (long) (prob1))), ((((jump)->u.fld[8]).rtx1)))
                                       ;
  for (i = 0; i < sub; i++)
    {
      tmp1 = expand_simple_binop (mode, MINUS, target, tmp, target,
          0, OPTAB_WIDEN);
      if (tmp1 != target)
 emit_move_insn (target, tmp1);
      do_compare_rtx_and_jump (target, tmp, LTU, 0, mode, (rtx) 0,
              (rtx) 0, end_label);
      jump = get_last_insn ();
      (((jump)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PROB), (gen_rtx_CONST_INT (VOIDmode, (long) (prob2))), ((((jump)->u.fld[8]).rtx1)))
                                           ;
    }
  tmp1 = simplify_gen_binary (operation, mode, copy_rtx (target), copy_rtx (tmp));
  tmp1 = force_operand (tmp1, target);
  if (tmp1 != target)
    emit_move_insn (target, tmp1);
  emit_label (end_label);
  sequence = get_insns ();
  end_sequence ();
  rebuild_jump_labels (sequence);
  return sequence;
}
static unsigned char
mod_subtract_transform (rtx insn)
{
  rtx set, set_src, set_dest, op1, op2, vlaue1, histogram;
  enum rtx_code code;
  enum machine_mode mode;
  gcov_type wrong_values, counts[2], count, all;
  edge e;
  int i, prob1, prob2;
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (!set)
    return 0;
  set_src = (((set)->u.fld[1]).rtx1);
  set_dest = (((set)->u.fld[0]).rtx1);
  code = ((enum rtx_code) (set_src)->code);
  mode = ((enum machine_mode) (set_dest)->mode);
  if (code != UMOD)
    return 0;
  op1 = (((set_src)->u.fld[0]).rtx1);
  op2 = (((set_src)->u.fld[1]).rtx1);
  for (histogram = (((insn)->u.fld[8]).rtx1);
       histogram;
       histogram = (((histogram)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (histogram)->mode)) == REG_VALUE_PROFILE
 && ((((((histogram)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == gen_rtx_CONST_INT (VOIDmode, (long) (HIST_TYPE_INTERVAL)))
      break;
  if (!histogram)
    return 0;
  histogram = ((((((histogram)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
  vlaue1 = (((histogram)->u.fld[0]).rtx1);
  histogram = (((histogram)->u.fld[1]).rtx1);
  all = 0;
  for (i = 0; i < 2; i++)
    {
      counts[i] = (((((histogram)->u.fld[0]).rtx1))->u.hwint[0]);
      all += counts[i];
      histogram = (((histogram)->u.fld[1]).rtx1);
    }
  wrong_values = (((((histogram)->u.fld[0]).rtx1))->u.hwint[0]);
  histogram = (((histogram)->u.fld[1]).rtx1);
  wrong_values += (((((histogram)->u.fld[0]).rtx1))->u.hwint[0]);
  all += wrong_values;
  count = 0;
  for (i = 0; i < 2; i++)
    {
      count += counts[i];
      if (count * 2 >= all)
 break;
    }
  if (i == 2)
    return 0;
  if (dump_file)
    fprintf (dump_file, "Mod subtract transformation on insn %d\n",
      (((insn)->u.fld[0]).rtint));
  prob1 = (counts[0] * 10000 + all / 2) / all;
  prob2 = (counts[1] * 10000 + all / 2) / all;
  e = split_block ((((insn)->u.fld[3]).bb), (((insn)->u.fld[1]).rtx1));
  delete_insn (insn);
  insert_insn_on_edge (
 gen_mod_subtract (mode, code, set_dest,
     op1, op2, i, prob1, prob2), e);
  return 1;
}
struct value_prof_hooks {
  void (*find_values_to_profile) (unsigned *, struct histogram_value **);
  unsigned char (*value_profile_transformations) (void);
};
static struct value_prof_hooks rtl_value_prof_hooks =
{
  rtl_find_values_to_profile,
  rtl_value_profile_transformations
};
void
rtl_register_value_prof_hooks (void)
{
  value_prof_hooks = &rtl_value_prof_hooks;
  if (ir_type ())
    abort ();
}
static void
tree_find_values_to_profile (unsigned *n_values, struct histogram_value **values)
{
  (void)n_values;
  (void)values;
  abort ();
}
static unsigned char
tree_value_profile_transformations (void)
{
  abort ();
}
static struct value_prof_hooks tree_value_prof_hooks = {
  tree_find_values_to_profile,
  tree_value_profile_transformations
};
void
tree_register_value_prof_hooks (void)
{
  value_prof_hooks = &tree_value_prof_hooks;
  if (!ir_type ())
    abort ();
}
void
find_values_to_profile (unsigned *n_values, struct histogram_value **values)
{
  (value_prof_hooks->find_values_to_profile) (n_values, values);
}
unsigned char
value_profile_transformations (void)
{
  return (value_prof_hooks->value1_profile_transformations) ();
}
enum micro_operation_type
{
  MO_USE,
  MO_USE_NO_VAR,
  MO_SET,
  MO_CLOBBER,
  MO_CALL,
  MO_ADJUST
};
enum emit_note_where
{
  EMIT_NOTE_BEFORE_INSN,
  EMIT_NOTE_AFTER_INSN
};
typedef struct micro_operation_def
{
  enum micro_operation_type type;
  union {
    rtx loc;
    long adjust;
  } u;
  rtx insn;
} micro_operation;
typedef struct emit_note_data_def
{
  rtx insn;
  enum emit_note_where where;
} emit_note_data;
typedef struct attrs_def
{
  struct attrs_def *next;
  rtx loc;
  tree decl;
  long offset;
} *attrs;
typedef struct dataflow_set_def
{
  long stack_adjust;
  attrs regs[53];
  htab_t vars;
} dataflow_set;
typedef struct variable_tracking_info_def
{
  int n_mos;
  micro_operation *mos;
  dataflow_set in;
  dataflow_set out;
  unsigned char visited;
} *variable_tracking_info;
typedef struct location_chain_def
{
  struct location_chain_def *next;
  rtx loc;
} *location_chain;
typedef struct variable_part_def
{
  location_chain loc_chain;
  rtx cur_loc;
  long offset;
} variable_part;
typedef struct variable_def
{
  tree decl;
  int refcount;
  int n_var_parts;
  variable_part var_part[16];
} *variable;
static alloc_pool attrs_pool;
static alloc_pool var_pool;
static alloc_pool loc_chain_pool;
static htab_t changed_variables;
static unsigned char emit_notes;
tree frame_base_decl;
static long frame_stack_adjust;
static void stack_adjust_offset_pre_post (rtx, long *,
       long *);
static void insn_stack_adjust_offset_pre_post (rtx, long *,
            long *);
static void bb_stack_adjust_offset (basic_block);
static long prologue_stack_adjust (void);
static unsigned char vt_stack_adjustments (void);
static rtx adjust_stack_reference (rtx, long);
static hashval_t variable_htab_hash (const void *);
static int variable_htab_eq (const void *, const void *);
static void variable_htab_free (void *);
static void init_attrs_list_set (attrs *);
static void attrs_list_clear (attrs *);
static attrs attrs_list_member (attrs, tree, long);
static void attrs_list_insert (attrs *, tree, long, rtx);
static void attrs_list_copy (attrs *, attrs);
static void attrs_list_union (attrs *, attrs);
static void vars_clear (htab_t);
static variable unshare_variable (dataflow_set *set, variable var);
static int vars_copy_1 (void **, void *);
static void vars_copy (htab_t, htab_t);
static void var_reg_delete_and_set (dataflow_set *, rtx);
static void var_reg_delete (dataflow_set *, rtx);
static void var_regno_delete (dataflow_set *, int);
static void var_mem_delete_and_set (dataflow_set *, rtx);
static void var_mem_delete (dataflow_set *, rtx);
static void dataflow_set_init (dataflow_set *, int);
static void dataflow_set_clear (dataflow_set *);
static void dataflow_set_copy_vt (dataflow_set *, dataflow_set *);
static int variable_union_info_cmp_pos (const void *, const void *);
static int variable_union (void **, void *);
static void dataflow_set_union (dataflow_set *, dataflow_set *);
static unsigned char variable_part_different_p (variable_part *, variable_part *);
static unsigned char variable_different_p (variable, variable, unsigned char);
static int dataflow_set_different_1 (void **, void *);
static int dataflow_set_different_2 (void **, void *);
static unsigned char dataflow_set_different (dataflow_set *, dataflow_set *);
static void dataflow_set_destroy (dataflow_set *);
static unsigned char contains_symbol_ref (rtx);
static unsigned char track_expr_p (tree);
static int count_uses (rtx *, void *);
static void count_uses_1 (rtx *, void *);
static void count_stores (rtx, rtx, void *);
static int add_uses (rtx *, void *);
static void add_uses_1 (rtx *, void *);
static void add_stores (rtx, rtx, void *);
static unsigned char compute_bb_dataflow (basic_block);
static void vt_find_locations (void);
static void dump_attrs_list (attrs);
static int dump_variable_vt (void **, void *);
static void dump_vars (htab_t);
static void dump_dataflow_set (dataflow_set *);
static void dump_dataflow_sets (void);
static void variable_was_changed (variable, htab_t);
static void set_frame_base_location (dataflow_set *, rtx);
static void set_variable_part (dataflow_set *, rtx, tree, long);
static void delete_variable_part (dataflow_set *, rtx, tree, long);
static int emit_note_insn_var_location (void **, void *);
static void emit_notes_for_changes (rtx, enum emit_note_where);
static int emit_notes_for_differences_1 (void **, void *);
static int emit_notes_for_differences_2 (void **, void *);
static void emit_notes_for_differences (rtx, dataflow_set *, dataflow_set *);
static void emit_notes_in_bb (basic_block);
static void vt_emit_notes (void);
static unsigned char vt_get_decl_and_offset (rtx, tree *, long *);
static void vt_add_function_parameters (void);
static void vt_initialize (void);
static void vt_finalize (void);
static void
stack_adjust_offset_pre_post (rtx pattern, long *pre,
         long *post)
{
  rtx src = (((pattern)->u.fld[1]).rtx1);
  rtx dest = (((pattern)->u.fld[0]).rtx1);
  enum rtx_code code;
  if (dest == (global_rtl[GR_STACK_POINTER]))
    {
      code = ((enum rtx_code) (src)->code);
      if (! (code == PLUS || code == MINUS)
   || (((src)->u.fld[0]).rtx1) != (global_rtl[GR_STACK_POINTER])
   || ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) != CONST_INT)
 return;
      if (code == MINUS)
 *post += (((((src)->u.fld[1]).rtx1))->u.hwint[0]);
      else
 *post -= (((((src)->u.fld[1]).rtx1))->u.hwint[0]);
    }
  else if ((((enum rtx_code) (dest)->code) == MEM))
    {
      src = (((dest)->u.fld[0]).rtx1);
      code = ((enum rtx_code) (src)->code);
      switch (code)
 {
 case PRE_MODIFY:
 case POST_MODIFY:
   if ((((src)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]))
     {
       rtx val = ((((((src)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
       if (((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) != PLUS ||
    ((enum rtx_code) (val)->code) != CONST_INT)
  abort ();
       if (code == PRE_MODIFY)
  *pre -= ((val)->u.hwint[0]);
       else
  *post -= ((val)->u.hwint[0]);
       break;
     }
   return;
 case PRE_DEC:
   if ((((src)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]))
     {
       *pre += ((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]);
       break;
     }
   return;
 case POST_DEC:
   if ((((src)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]))
     {
       *post += ((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]);
       break;
     }
   return;
 case PRE_INC:
   if ((((src)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]))
     {
       *pre -= ((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]);
       break;
     }
   return;
 case POST_INC:
   if ((((src)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]))
     {
       *post -= ((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]);
       break;
     }
   return;
 default:
   return;
 }
    }
}
static void
insn_stack_adjust_offset_pre_post (rtx insn, long *pre,
       long *post)
{
  *pre = 0;
  *post = 0;
  if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET)
    stack_adjust_offset_pre_post ((((insn)->u.fld[5]).rtx1), pre, post);
  else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL
    || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
    {
      int i;
      for ( i = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 if (((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->code) == SET)
   stack_adjust_offset_pre_post (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]),
     pre, post);
    }
}
static void
bb_stack_adjust_offset (basic_block bb)
{
  long offset;
  int i;
  offset = ((variable_tracking_info) (bb)->aux)->in.stack_adjust;
  for (i = 0; i < ((variable_tracking_info) (bb)->aux)->n_mos; i++)
    {
      if (((variable_tracking_info) (bb)->aux)->mos[i].type == MO_ADJUST)
 offset += ((variable_tracking_info) (bb)->aux)->mos[i].u.adjust;
      else if (((variable_tracking_info) (bb)->aux)->mos[i].type != MO_CALL)
 {
   if ((((enum rtx_code) (((variable_tracking_info) (bb)->aux)->mos[i].u.loc)->code) == MEM))
     {
       ((variable_tracking_info) (bb)->aux)->mos[i].u.loc
  = adjust_stack_reference (((variable_tracking_info) (bb)->aux)->mos[i].u.loc, -offset);
     }
 }
    }
  ((variable_tracking_info) (bb)->aux)->out.stack_adjust = offset;
}
static long
prologue_stack_adjust (void)
{
  long offset = 0;
  basic_block bb = ENTRY_BLOCK_PTR->next_bb;
  rtx insn;
  rtx end;
  if (!(bb)->end_)
    return 0;
  end = ((((bb)->end_)->u.fld[2]).rtx1);
  for (insn = (bb)->head_; insn != end; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == NOTE
   && (((insn)->u.fld[5]).rtint) == NOTE_INSN_PROLOGUE_END)
 break;
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   long tmp;
   insn_stack_adjust_offset_pre_post (insn, &tmp, &tmp);
   offset += tmp;
 }
    }
  return offset;
}
static unsigned char
vt_stack_adjustments (void)
{
  edge *stack;
  int sp;
  ((variable_tracking_info) (ENTRY_BLOCK_PTR)->aux)->visited = 1;
  ((variable_tracking_info) (ENTRY_BLOCK_PTR)->aux)->out.stack_adjust = frame_stack_adjust;
  stack = xmalloc ((n_basic_blocks + 1) * sizeof (edge));
  sp = 0;
  stack[sp++] = ENTRY_BLOCK_PTR->succ;
  while (sp)
    {
      edge e;
      basic_block src;
      basic_block dest;
      e = stack[sp - 1];
      src = e->src;
      dest = e->dest;
      if (!((variable_tracking_info) (dest)->aux)->visited)
 {
   ((variable_tracking_info) (dest)->aux)->visited = 1;
   ((variable_tracking_info) (dest)->aux)->in.stack_adjust = ((variable_tracking_info) (src)->aux)->out.stack_adjust;
   bb_stack_adjust_offset (dest);
   if (dest->succ)
     stack[sp++] = dest->succ;
 }
      else
 {
   if (((variable_tracking_info) (dest)->aux)->in.stack_adjust != ((variable_tracking_info) (src)->aux)->out.stack_adjust)
     {
       free (stack);
       return 0;
     }
   if (e->succ_next)
     stack[sp - 1] = e->succ_next;
   else
     sp--;
 }
    }
  free (stack);
  return 1;
}
static rtx
adjust_stack_reference (rtx mem, long adjustment)
{
  rtx adjusted_mem;
  rtx tmp;
  if (adjustment == 0)
    return mem;
  adjusted_mem = copy_rtx (mem);
  (((adjusted_mem)->u.fld[0]).rtx1) = replace_rtx ((((adjusted_mem)->u.fld[0]).rtx1),
     (global_rtl[GR_STACK_POINTER]),
     gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])), (gen_rtx_CONST_INT (VOIDmode, (long) (adjustment))))
                                 );
  tmp = simplify_rtx ((((adjusted_mem)->u.fld[0]).rtx1));
  if (tmp)
    (((adjusted_mem)->u.fld[0]).rtx1) = tmp;
  return adjusted_mem;
}
static hashval_t
variable_htab_hash (const void *x)
{
  const variable v = (const variable) x;
  return (((size_t) (v->decl)));
}
static int
variable_htab_eq (const void *x, const void *y)
{
  const variable v = (const variable) x;
  const tree decl = (const tree) y;
  return (((size_t) (v->decl)) == ((size_t) (decl)));
}
static void
variable_htab_free (void *elem)
{
  int i;
  variable var = (variable) elem;
  location_chain node, next;
  var->refcount--;
  if (var->refcount > 0)
    return;
  for (i = 0; i < var->n_var_parts; i++)
    {
      for (node = var->var_part[i].loc_chain; node; node = next)
 {
   next = node->next;
   pool_free (loc_chain_pool, node);
 }
      var->var_part[i].loc_chain = ((void *)0);
    }
  pool_free (var_pool, var);
}
static void
init_attrs_list_set (attrs *set)
{
  int i;
  for (i = 0; i < 53; i++)
    set[i] = ((void *)0);
}
static void
attrs_list_clear (attrs *listp)
{
  attrs list, next;
  for (list = *listp; list; list = next)
    {
      next = list->next;
      pool_free (attrs_pool, list);
    }
  *listp = ((void *)0);
}
static attrs
attrs_list_member (attrs list, tree decl, long offset)
{
  for (; list; list = list->next)
    if (list->decl == decl && list->offset == offset)
      return list;
  return ((void *)0);
}
static void
attrs_list_insert (attrs *listp, tree decl, long offset, rtx loc)
{
  attrs list;
  list = pool_alloc (attrs_pool);
  list->loc = loc;
  list->decl = decl;
  list->offset = offset;
  list->next = *listp;
  *listp = list;
}
static void
attrs_list_copy (attrs *dstp, attrs src)
{
  attrs n;
  attrs_list_clear (dstp);
  for (; src; src = src->next)
    {
      n = pool_alloc (attrs_pool);
      n->loc = src->loc;
      n->decl = src->decl;
      n->offset = src->offset;
      n->next = *dstp;
      *dstp = n;
    }
}
static void
attrs_list_union (attrs *dstp, attrs src)
{
  for (; src; src = src->next)
    {
      if (!attrs_list_member (*dstp, src->decl, src->offset))
 attrs_list_insert (dstp, src->decl, src->offset, src->loc);
    }
}
static void
vars_clear (htab_t vars)
{
  htab_empty (vars);
}
static variable
unshare_variable (dataflow_set *set, variable var)
{
  void **slot;
  variable new_var;
  int i;
  new_var = pool_alloc (var_pool);
  new_var->decl = var->decl;
  new_var->refcount = 1;
  var->refcount--;
  new_var->n_var_parts = var->n_var_parts;
  for (i = 0; i < var->n_var_parts; i++)
    {
      location_chain node;
      location_chain *nextp;
      new_var->var_part[i].offset = var->var_part[i].offset;
      nextp = &new_var->var_part[i].loc_chain;
      for (node = var->var_part[i].loc_chain; node; node = node->next)
 {
   location_chain new_lc;
   new_lc = pool_alloc (loc_chain_pool);
   new_lc->next = ((void *)0);
   new_lc->loc = node->loc;
   *nextp = new_lc;
   nextp = &new_lc->next;
 }
      if (new_var->var_part[i].loc_chain)
 new_var->var_part[i].cur_loc = new_var->var_part[i].loc_chain->loc;
      else
 new_var->var_part[i].cur_loc = ((void *)0);
    }
  slot = htab_find_slot_with_hash (set->vars, new_var->decl,
       ((size_t) (new_var->decl)),
       INSERT);
  *slot = new_var;
  return new_var;
}
static int
vars_copy_1 (void **slot, void *data)
{
  htab_t dst = (htab_t) data;
  variable src, *dstp;
  src = *(variable *) slot;
  src->refcount++;
  dstp = (variable *) htab_find_slot_with_hash (dst, src->decl,
      ((size_t) (src->decl)),
      INSERT);
  *dstp = src;
  return 1;
}
static void
vars_copy (htab_t dst, htab_t src)
{
  vars_clear (dst);
  htab_traverse (src, vars_copy_1, dst);
}
static void
var_reg_delete_and_set (dataflow_set *set, rtx loc)
{
  tree decl = ((((loc)->u.fld[2]).rtreg) == 0 ? 0 : (((loc)->u.fld[2]).rtreg)->decl);
  long offset = ((((loc)->u.fld[2]).rtreg) == 0 ? 0 : (((loc)->u.fld[2]).rtreg)->offset);
  attrs node, next;
  attrs *nextp;
  nextp = &set->regs[(((loc)->u.fld[0]).rtuint)];
  for (node = *nextp; node; node = next)
    {
      next = node->next;
      if (node->decl != decl || node->offset != offset)
 {
   delete_variable_part (set, node->loc, node->decl, node->offset);
   pool_free (attrs_pool, node);
   *nextp = next;
 }
      else
 {
   node->loc = loc;
   nextp = &node->next;
 }
    }
  if (set->regs[(((loc)->u.fld[0]).rtuint)] == ((void *)0))
    attrs_list_insert (&set->regs[(((loc)->u.fld[0]).rtuint)], decl, offset, loc);
  set_variable_part (set, loc, decl, offset);
}
static void
var_reg_delete (dataflow_set *set, rtx loc)
{
  attrs *reg = &set->regs[(((loc)->u.fld[0]).rtuint)];
  attrs node, next;
  for (node = *reg; node; node = next)
    {
      next = node->next;
      delete_variable_part (set, node->loc, node->decl, node->offset);
      pool_free (attrs_pool, node);
    }
  *reg = ((void *)0);
}
static void
var_regno_delete (dataflow_set *set, int regno)
{
  attrs *reg = &set->regs[regno];
  attrs node, next;
  for (node = *reg; node; node = next)
    {
      next = node->next;
      delete_variable_part (set, node->loc, node->decl, node->offset);
      pool_free (attrs_pool, node);
    }
  *reg = ((void *)0);
}
static void
var_mem_delete_and_set (dataflow_set *set, rtx loc)
{
  tree decl = ((((loc)->u.fld[1]).rtmem) == 0 ? 0 : (((loc)->u.fld[1]).rtmem)->expr);
  long offset = ((((loc)->u.fld[1]).rtmem) == 0 ? 0 : (((loc)->u.fld[1]).rtmem)->offset) ? ((((((loc)->u.fld[1]).rtmem) == 0 ? 0 : (((loc)->u.fld[1]).rtmem)->offset))->u.hwint[0]) : 0;
  set_variable_part (set, loc, decl, offset);
}
static void
var_mem_delete (dataflow_set *set, rtx loc)
{
  tree decl = ((((loc)->u.fld[1]).rtmem) == 0 ? 0 : (((loc)->u.fld[1]).rtmem)->expr);
  long offset = ((((loc)->u.fld[1]).rtmem) == 0 ? 0 : (((loc)->u.fld[1]).rtmem)->offset) ? ((((((loc)->u.fld[1]).rtmem) == 0 ? 0 : (((loc)->u.fld[1]).rtmem)->offset))->u.hwint[0]) : 0;
  delete_variable_part (set, loc, decl, offset);
}
static void
dataflow_set_init (dataflow_set *set, int vars_size)
{
  init_attrs_list_set (set->regs);
  set->vars = htab_create (vars_size, variable_htab_hash, variable_htab_eq,
      variable_htab_free);
  set->stack_adjust = 0;
}
static void
dataflow_set_clear (dataflow_set *set)
{
  int i;
  for (i = 0; i < 53; i++)
    attrs_list_clear (&set->regs[i]);
  vars_clear (set->vars);
}
static void
dataflow_set_copy_vt (dataflow_set *dst, dataflow_set *src)
{
  int i;
  for (i = 0; i < 53; i++)
    attrs_list_copy (&dst->regs[i], src->regs[i]);
  vars_copy (dst->vars, src->vars);
  dst->stack_adjust = src->stack_adjust;
}
struct variable_union_info
{
  location_chain lc;
  int pos;
  int pos_src;
  int pos_dst;
};
static int
variable_union_info_cmp_pos (const void *n1, const void *n2)
{
  const struct variable_union_info *i1 = n1;
  const struct variable_union_info *i2 = n2;
  if (i1->pos != i2->pos)
    return i1->pos - i2->pos;
  return (i1->pos_dst - i2->pos_dst);
}
static int
variable_union (void **slot, void *data)
{
  variable src, dst, *dstp;
  dataflow_set *set = (dataflow_set *) data;
  int i, j, k;
  src = *(variable *) slot;
  dstp = (variable *) htab_find_slot_with_hash (set->vars, src->decl,
      ((size_t) (src->decl)),
      INSERT);
  if (!*dstp)
    {
      src->refcount++;
      for (k = 0; k < src->n_var_parts; k++)
 {
   if (src->var_part[k].loc_chain)
     {
       if (src->var_part[k].cur_loc != src->var_part[k].loc_chain->loc)
  break;
     }
 }
      if (k < src->n_var_parts)
 unshare_variable (set, src);
      else
 *dstp = src;
      return 1;
    }
  else
    dst = *dstp;
  for (i = 0, j = 0, k = 0;
       i < src->n_var_parts && j < dst->n_var_parts; k++)
    {
      if (src->var_part[i].offset == dst->var_part[j].offset)
 {
   i++;
   j++;
 }
      else if (src->var_part[i].offset < dst->var_part[j].offset)
 i++;
      else
 j++;
    }
  k += src->n_var_parts - i;
  k += dst->n_var_parts - j;
  if (dst->refcount > 1 && dst->n_var_parts != k)
    dst = unshare_variable (set, dst);
  i = src->n_var_parts - 1;
  j = dst->n_var_parts - 1;
  dst->n_var_parts = k;
  for (k--; k >= 0; k--)
    {
      location_chain node, node2;
      if (i >= 0 && j >= 0
   && src->var_part[i].offset == dst->var_part[j].offset)
 {
   int dst_l, src_l;
   int ii, jj, n;
   struct variable_union_info *vui;
   if (dst->refcount > 1)
     {
       for (node = src->var_part[i].loc_chain,
     node2 = dst->var_part[j].loc_chain; node && node2;
     node = node->next, node2 = node2->next)
  {
    if (!(((((enum rtx_code) (node2->loc)->code) == REG)
    && (((enum rtx_code) (node->loc)->code) == REG)
    && (((node2->loc)->u.fld[0]).rtuint) == (((node->loc)->u.fld[0]).rtuint))
   || rtx_equal_p (node2->loc, node->loc)))
      break;
  }
       if (node || node2)
  dst = unshare_variable (set, dst);
     }
   src_l = 0;
   for (node = src->var_part[i].loc_chain; node; node = node->next)
     src_l++;
   dst_l = 0;
   for (node = dst->var_part[j].loc_chain; node; node = node->next)
     dst_l++;
   vui = xcalloc (src_l + dst_l, sizeof (struct variable_union_info));
   for (node = dst->var_part[j].loc_chain, jj = 0; node;
        node = node->next, jj++)
     {
       vui[jj].lc = node;
       vui[jj].pos_dst = jj;
       vui[jj].pos_src = src_l + dst_l;
     }
   n = dst_l;
   for (node = src->var_part[i].loc_chain, ii = 0; node;
        node = node->next, ii++)
     {
       for (jj = 0; jj < dst_l; jj++)
  {
    if (((((enum rtx_code) (vui[jj].lc->loc)->code) == REG)
         && (((enum rtx_code) (node->loc)->code) == REG)
         && (((vui[jj].lc->loc)->u.fld[0]).rtuint) == (((node->loc)->u.fld[0]).rtuint))
        || rtx_equal_p (vui[jj].lc->loc, node->loc))
      {
        vui[jj].pos_src = ii;
        break;
      }
  }
       if (jj >= dst_l)
  {
    location_chain new_node;
    new_node = pool_alloc (loc_chain_pool);
    new_node->loc = node->loc;
    vui[n].lc = new_node;
    vui[n].pos_src = ii;
    vui[n].pos_dst = src_l + dst_l;
    n++;
  }
     }
   for (ii = 0; ii < src_l + dst_l; ii++)
     vui[ii].pos = vui[ii].pos_src + vui[ii].pos_dst;
   qsort (vui, n, sizeof (struct variable_union_info),
   variable_union_info_cmp_pos);
   for (ii = 1; ii < n; ii++)
     vui[ii - 1].lc->next = vui[ii].lc;
   vui[n - 1].lc->next = ((void *)0);
   dst->var_part[k].loc_chain = vui[0].lc;
   dst->var_part[k].offset = dst->var_part[j].offset;
   free (vui);
   i--;
   j--;
 }
      else if ((i >= 0 && j >= 0
  && src->var_part[i].offset < dst->var_part[j].offset)
        || i < 0)
 {
   dst->var_part[k] = dst->var_part[j];
   j--;
 }
      else if ((i >= 0 && j >= 0
  && src->var_part[i].offset > dst->var_part[j].offset)
        || j < 0)
 {
   location_chain *nextp;
   nextp = &dst->var_part[k].loc_chain;
   for (node = src->var_part[i].loc_chain; node; node = node->next)
     {
       location_chain new_lc;
       new_lc = pool_alloc (loc_chain_pool);
       new_lc->next = ((void *)0);
       new_lc->loc = node->loc;
       *nextp = new_lc;
       nextp = &new_lc->next;
     }
   dst->var_part[k].offset = src->var_part[i].offset;
   i--;
 }
      if (dst->var_part[k].loc_chain)
 dst->var_part[k].cur_loc = dst->var_part[k].loc_chain->loc;
      else
 dst->var_part[k].cur_loc = ((void *)0);
    }
  return 1;
}
static void
dataflow_set_union (dataflow_set *dst, dataflow_set *src)
{
  int i;
  for (i = 0; i < 53; i++)
    attrs_list_union (&dst->regs[i], src->regs[i]);
  htab_traverse (src->vars, variable_union, dst);
}
static unsigned char
dataflow_set_different_value;
static unsigned char
variable_part_different_p (variable_part *vp1, variable_part *vp2)
{
  location_chain lc1, lc2;
  for (lc1 = vp1->loc_chain; lc1; lc1 = lc1->next)
    {
      for (lc2 = vp2->loc_chain; lc2; lc2 = lc2->next)
 {
   if ((((enum rtx_code) (lc1->loc)->code) == REG) && (((enum rtx_code) (lc2->loc)->code) == REG))
     {
       if ((((lc1->loc)->u.fld[0]).rtuint) == (((lc2->loc)->u.fld[0]).rtuint))
  break;
     }
   if (rtx_equal_p (lc1->loc, lc2->loc))
     break;
 }
      if (!lc2)
 return 1;
    }
  return 0;
}
static unsigned char
variable_different_p (variable var1, variable var2,
        unsigned char compare_current_location)
{
  int i;
  if (var1 == var2)
    return 0;
  if (var1->n_var_parts != var2->n_var_parts)
    return 1;
  for (i = 0; i < var1->n_var_parts; i++)
    {
      if (var1->var_part[i].offset != var2->var_part[i].offset)
 return 1;
      if (compare_current_location)
 {
   if (!(((((enum rtx_code) (var1->var_part[i].cur_loc)->code) == REG)
   && (((enum rtx_code) (var2->var_part[i].cur_loc)->code) == REG)
   && ((((var1->var_part[i].cur_loc)->u.fld[0]).rtuint)
       == (((var2->var_part[i].cur_loc)->u.fld[0]).rtuint)))
  || rtx_equal_p (var1->var_part[i].cur_loc,
    var2->var_part[i].cur_loc)))
     return 1;
 }
      if (variable_part_different_p (&var1->var_part[i], &var2->var_part[i]))
 return 1;
      if (variable_part_different_p (&var2->var_part[i], &var1->var_part[i]))
 return 1;
    }
  return 0;
}
static int
dataflow_set_different_1 (void **slot, void *data)
{
  htab_t htab = (htab_t) data;
  variable var1, var2;
  var1 = *(variable *) slot;
  var2 = htab_find_with_hash (htab, var1->decl,
         ((size_t) (var1->decl)));
  if (!var2)
    {
      dataflow_set_different_value = 1;
      return 0;
    }
  if (variable_different_p (var1, var2, 0))
    {
      dataflow_set_different_value = 1;
      return 0;
    }
  return 1;
}
static int
dataflow_set_different_2 (void **slot, void *data)
{
  htab_t htab = (htab_t) data;
  variable var1, var2;
  var1 = *(variable *) slot;
  var2 = htab_find_with_hash (htab, var1->decl,
         ((size_t) (var1->decl)));
  if (!var2)
    {
      dataflow_set_different_value = 1;
      return 0;
    }
  return 1;
}
static unsigned char
dataflow_set_different (dataflow_set *old_set, dataflow_set *new_set)
{
  dataflow_set_different_value = 0;
  htab_traverse (old_set->vars, dataflow_set_different_1, new_set->vars);
  if (!dataflow_set_different_value)
    {
      htab_traverse (new_set->vars, dataflow_set_different_2, old_set->vars);
    }
  return dataflow_set_different_value;
}
static void
dataflow_set_destroy (dataflow_set *set)
{
  int i;
  for (i = 0; i < 53; i++)
    attrs_list_clear (&set->regs[i]);
  htab_delete (set->vars);
  set->vars = ((void *)0);
}
static unsigned char
contains_symbol_ref (rtx x)
{
  const char *fmt;
  enum rtx_code code;
  int i;
  if (!x)
    return 0;
  code = ((enum rtx_code) (x)->code);
  if (code == SYMBOL_REF)
    return 1;
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   if (contains_symbol_ref ((((x)->u.fld[i]).rtx1)))
     return 1;
 }
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     if (contains_symbol_ref ((((((x)->u.fld[i]).rtvec1))->elem[j])))
       return 1;
 }
    }
  return 0;
}
static unsigned char
track_expr_p (tree expr)
{
  rtx decl_rtl;
  if (((enum tree_code) (expr)->common.code) != VAR_DECL && ((enum tree_code) (expr)->common.code) != PARM_DECL)
    return 0;
  if (!((expr)->decl.name))
    return 0;
  decl_rtl = (((expr)->decl.rtl != ((void *)0)) ? ((expr)->decl.rtl ? (expr)->decl.rtl : (make_decl_rtl (expr, ((void *)0)), (expr)->decl.rtl)) : ((void *)0));
  if (!decl_rtl)
    return 0;
  if (((expr)->decl.ignored_flag))
    return 0;
  if (((expr)->common.static_flag))
    return 0;
  if ((((enum rtx_code) (decl_rtl)->code) == MEM)
      && contains_symbol_ref ((((decl_rtl)->u.fld[0]).rtx1)))
    return 0;
  if ((((enum rtx_code) (decl_rtl)->code) == MEM))
    {
      if (((enum machine_mode) (decl_rtl)->mode) == BLKmode)
 return 0;
      if (((((decl_rtl)->u.fld[1]).rtmem) != 0 ? (((decl_rtl)->u.fld[1]).rtmem)->size : ((enum machine_mode) (decl_rtl)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (decl_rtl)->mode)]))) : 0)
   && ((((((decl_rtl)->u.fld[1]).rtmem) != 0 ? (((decl_rtl)->u.fld[1]).rtmem)->size : ((enum machine_mode) (decl_rtl)->mode) != BLKmode ? gen_rtx_CONST_INT (VOIDmode, (long) (((unsigned short) mode_size[((enum machine_mode) (decl_rtl)->mode)]))) : 0))->u.hwint[0]) > 16)
 return 0;
    }
  return 1;
}
static int
count_uses (rtx *loc, void *insn)
{
  basic_block bb = ((((rtx) insn)->u.fld[3]).bb);
  if ((((enum rtx_code) (*loc)->code) == REG))
    {
 ((variable_tracking_info) (bb)->aux)->n_mos++;
    }
  else if ((((enum rtx_code) (*loc)->code) == MEM)
    && ((((*loc)->u.fld[1]).rtmem) == 0 ? 0 : (((*loc)->u.fld[1]).rtmem)->expr)
    && track_expr_p (((((*loc)->u.fld[1]).rtmem) == 0 ? 0 : (((*loc)->u.fld[1]).rtmem)->expr)))
    {
   ((variable_tracking_info) (bb)->aux)->n_mos++;
    }
  return 0;
}
static void
count_uses_1 (rtx *x, void *insn)
{
  for_each_rtx (x, count_uses, insn);
}
static void
count_stores (rtx loc, rtx expr , void *insn)
{
  count_uses (&loc, insn);
}
static int
add_uses (rtx *loc, void *insn)
{
  if ((((enum rtx_code) (*loc)->code) == REG))
    {
      basic_block bb = ((((rtx) insn)->u.fld[3]).bb);
      micro_operation *mo = ((variable_tracking_info) (bb)->aux)->mos + ((variable_tracking_info) (bb)->aux)->n_mos++;
      mo->type = ((((((*loc)->u.fld[2]).rtreg) == 0 ? 0 : (((*loc)->u.fld[2]).rtreg)->decl) && track_expr_p (((((*loc)->u.fld[2]).rtreg) == 0 ? 0 : (((*loc)->u.fld[2]).rtreg)->decl)))
    ? MO_USE : MO_USE_NO_VAR);
      mo->u.loc = *loc;
      mo->insn = (rtx) insn;
    }
  else if ((((enum rtx_code) (*loc)->code) == MEM)
    && ((((*loc)->u.fld[1]).rtmem) == 0 ? 0 : (((*loc)->u.fld[1]).rtmem)->expr)
    && track_expr_p (((((*loc)->u.fld[1]).rtmem) == 0 ? 0 : (((*loc)->u.fld[1]).rtmem)->expr)))
    {
      basic_block bb = ((((rtx) insn)->u.fld[3]).bb);
      micro_operation *mo = ((variable_tracking_info) (bb)->aux)->mos + ((variable_tracking_info) (bb)->aux)->n_mos++;
      mo->type = MO_USE;
      mo->u.loc = *loc;
      mo->insn = (rtx) insn;
    }
  return 0;
}
static void
add_uses_1 (rtx *x, void *insn)
{
  for_each_rtx (x, add_uses, insn);
}
static void
add_stores (rtx loc, rtx expr, void *insn)
{
  if ((((enum rtx_code) (loc)->code) == REG))
    {
      basic_block bb = ((((rtx) insn)->u.fld[3]).bb);
      micro_operation *mo = ((variable_tracking_info) (bb)->aux)->mos + ((variable_tracking_info) (bb)->aux)->n_mos++;
      mo->type = ((((enum rtx_code) (expr)->code) != CLOBBER && ((((loc)->u.fld[2]).rtreg) == 0 ? 0 : (((loc)->u.fld[2]).rtreg)->decl)
     && track_expr_p (((((loc)->u.fld[2]).rtreg) == 0 ? 0 : (((loc)->u.fld[2]).rtreg)->decl)))
    ? MO_SET : MO_CLOBBER);
      mo->u.loc = loc;
      mo->insn = (rtx) insn;
    }
  else if ((((enum rtx_code) (loc)->code) == MEM)
    && ((((loc)->u.fld[1]).rtmem) == 0 ? 0 : (((loc)->u.fld[1]).rtmem)->expr)
    && track_expr_p (((((loc)->u.fld[1]).rtmem) == 0 ? 0 : (((loc)->u.fld[1]).rtmem)->expr)))
    {
      basic_block bb = ((((rtx) insn)->u.fld[3]).bb);
      micro_operation *mo = ((variable_tracking_info) (bb)->aux)->mos + ((variable_tracking_info) (bb)->aux)->n_mos++;
      mo->type = ((enum rtx_code) (expr)->code) == CLOBBER ? MO_CLOBBER : MO_SET;
      mo->u.loc = loc;
      mo->insn = (rtx) insn;
    }
}
static unsigned char
compute_bb_dataflow (basic_block bb)
{
  int i, n, r;
  unsigned char changed;
  dataflow_set old_out;
  dataflow_set *in = &((variable_tracking_info) (bb)->aux)->in;
  dataflow_set *out = &((variable_tracking_info) (bb)->aux)->out;
  dataflow_set_init (&old_out, htab_elements (((variable_tracking_info) (bb)->aux)->out.vars) + 3);
  dataflow_set_copy_vt (&old_out, out);
  dataflow_set_copy_vt (out, in);
  n = ((variable_tracking_info) (bb)->aux)->n_mos;
  for (i = 0; i < n; i++)
    {
      switch (((variable_tracking_info) (bb)->aux)->mos[i].type)
 {
   case MO_CALL:
     for (r = 0; r < 53; r++)
       if ((!!((call_used_reg_set)[(r) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((r) % ((unsigned) (8 * 4)))))))
  var_regno_delete (out, r);
     break;
   case MO_USE:
   case MO_SET:
     {
       rtx loc = ((variable_tracking_info) (bb)->aux)->mos[i].u.loc;
       if ((((enum rtx_code) (loc)->code) == REG))
  var_reg_delete_and_set (out, loc);
       else if ((((enum rtx_code) (loc)->code) == MEM))
  var_mem_delete_and_set (out, loc);
     }
     break;
   case MO_USE_NO_VAR:
   case MO_CLOBBER:
     {
       rtx loc = ((variable_tracking_info) (bb)->aux)->mos[i].u.loc;
       if ((((enum rtx_code) (loc)->code) == REG))
  var_reg_delete (out, loc);
       else if ((((enum rtx_code) (loc)->code) == MEM))
  var_mem_delete (out, loc);
     }
     break;
   case MO_ADJUST:
     {
       rtx base;
       out->stack_adjust += ((variable_tracking_info) (bb)->aux)->mos[i].u.adjust;
       base = gen_rtx_MEM ((0 ? DImode : SImode), plus_constant_wide (((global_rtl[GR_STACK_POINTER])), (long) (out->stack_adjust))
                         );
       set_frame_base_location (out, base);
     }
     break;
 }
    }
  changed = dataflow_set_different (&old_out, out);
  dataflow_set_destroy (&old_out);
  return changed;
}
static void
vt_find_locations (void)
{
  fibheap_t worklist, pending, fibheap_swap;
  sbitmap visited, in_worklist, in_pending, sbitmap_swap;
  basic_block bb;
  edge e;
  int *bb_order;
  int *rc_order;
  int i;
  rc_order = xmalloc (n_basic_blocks * sizeof (int));
  bb_order = xmalloc (last_basic_block * sizeof (int));
  flow_depth_first_order_compute (((void *)0), rc_order);
  for (i = 0; i < n_basic_blocks; i++)
    bb_order[rc_order[i]] = i;
  free (rc_order);
  worklist = fibheap_new ();
  pending = fibheap_new ();
  visited = sbitmap_alloc (last_basic_block);
  in_worklist = sbitmap_alloc (last_basic_block);
  in_pending = sbitmap_alloc (last_basic_block);
  sbitmap_zero (in_worklist);
  sbitmap_zero (in_pending);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      fibheap_insert (pending, bb_order[bb->index], bb);
      ((in_pending)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
    }
  while (!fibheap_empty (pending))
    {
      fibheap_swap = pending;
      pending = worklist;
      worklist = fibheap_swap;
      sbitmap_swap = in_pending;
      in_pending = in_worklist;
      in_worklist = sbitmap_swap;
      sbitmap_zero (visited);
      while (!fibheap_empty (worklist))
 {
   bb = fibheap_extract_min (worklist);
   ((in_worklist)->elms [(bb->index) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4))));
   if (!((visited)->elms [(bb->index) / ((unsigned) (8 * 4))] >> (bb->index) % ((unsigned) (8 * 4)) & 1))
     {
       unsigned char changed;
       ((visited)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
       dataflow_set_clear (&((variable_tracking_info) (bb)->aux)->in);
       for (e = bb->pred; e; e = e->pred_next)
  {
    dataflow_set_union (&((variable_tracking_info) (bb)->aux)->in, &((variable_tracking_info) (e->src)->aux)->out);
  }
       changed = compute_bb_dataflow (bb);
       if (changed)
  {
    for (e = bb->succ; e; e = e->succ_next)
      {
        if (e->dest == EXIT_BLOCK_PTR)
   continue;
        if (e->dest == bb)
   continue;
        if (((visited)->elms [(e->dest->index) / ((unsigned) (8 * 4))] >> (e->dest->index) % ((unsigned) (8 * 4)) & 1))
   {
     if (!((in_pending)->elms [(e->dest->index) / ((unsigned) (8 * 4))] >> (e->dest->index) % ((unsigned) (8 * 4)) & 1))
       {
         ((in_pending)->elms [(e->dest->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (e->dest->index) % ((unsigned) (8 * 4)));
         fibheap_insert (pending,
           bb_order[e->dest->index],
           e->dest);
       }
   }
        else if (!((in_worklist)->elms [(e->dest->index) / ((unsigned) (8 * 4))] >> (e->dest->index) % ((unsigned) (8 * 4)) & 1))
   {
     ((in_worklist)->elms [(e->dest->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (e->dest->index) % ((unsigned) (8 * 4)));
     fibheap_insert (worklist, bb_order[e->dest->index],
       e->dest);
   }
      }
  }
     }
 }
    }
  free (bb_order);
  fibheap_delete (worklist);
  fibheap_delete (pending);
  free(visited);
  free(in_worklist);
  free(in_pending);
}
static void
dump_attrs_list (attrs list)
{
  for (; list; list = list->next)
    {
      print_mem_expr (dump_file, list->decl);
      fprintf (dump_file, "+");
      fprintf (dump_file, "%ld", list->offset);
    }
  fprintf (dump_file, "\n");
}
static int
dump_variable_vt (void **slot, void *data )
{
  variable var = *(variable *) slot;
  int i;
  location_chain node;
  fprintf (dump_file, "  name: %s\n",
    ((const char *) (((var->decl)->decl.name))->identifier.id.str));
  for (i = 0; i < var->n_var_parts; i++)
    {
      fprintf (dump_file, "    offset %ld\n",
        (long) var->var_part[i].offset);
      for (node = var->var_part[i].loc_chain; node; node = node->next)
 {
   fprintf (dump_file, "      ");
   print_rtl_single (dump_file, node->loc);
 }
    }
  return 1;
}
static void
dump_vars (htab_t vars)
{
  if (htab_elements (vars) > 0)
    {
      fprintf (dump_file, "Variables:\n");
      htab_traverse (vars, dump_variable_vt, ((void *)0));
    }
}
static void
dump_dataflow_set (dataflow_set *set)
{
  int i;
  fprintf (dump_file, "Stack adjustment: ");
  fprintf (dump_file, "%ld", set->stack_adjust);
  fprintf (dump_file, "\n");
  for (i = 1; i < 53; i++)
    {
      if (set->regs[i])
 {
   fprintf (dump_file, "Reg %d:", i);
   dump_attrs_list (set->regs[i]);
 }
    }
  dump_vars (set->vars);
  fprintf (dump_file, "\n");
}
static void
dump_dataflow_sets (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      fprintf (dump_file, "\nBasic block %d:\n", bb->index);
      fprintf (dump_file, "IN:\n");
      dump_dataflow_set (&((variable_tracking_info) (bb)->aux)->in);
      fprintf (dump_file, "OUT:\n");
      dump_dataflow_set (&((variable_tracking_info) (bb)->aux)->out);
    }
}
static void
variable_was_changed (variable var, htab_t htab)
{
  hashval_t hash = ((size_t) (var->decl));
  if (emit_notes)
    {
      variable *slot;
      slot = (variable *) htab_find_slot_with_hash (changed_variables,
          var->decl, hash, INSERT);
      if (htab && var->n_var_parts == 0)
 {
   variable empty_var;
   void **old;
   empty_var = pool_alloc (var_pool);
   empty_var->decl = var->decl;
   empty_var->refcount = 1;
   empty_var->n_var_parts = 0;
   *slot = empty_var;
   old = htab_find_slot_with_hash (htab, var->decl, hash,
       NO_INSERT);
   if (old)
     htab_clear_slot (htab, old);
 }
      else
 {
   *slot = var;
 }
    }
  else
    {
      if (var->n_var_parts == 0)
 {
   void **slot = htab_find_slot_with_hash (htab, var->decl, hash,
        NO_INSERT);
   if (slot)
     htab_clear_slot (htab, slot);
 }
    }
}
static void
set_frame_base_location (dataflow_set *set, rtx loc)
{
  variable var;
  var = htab_find_with_hash (set->vars, frame_base_decl,
        ((size_t) (frame_base_decl)));
  if (var->refcount > 1)
    var = unshare_variable (set, var);
  var->var_part[0].loc_chain->loc = loc;
  var->var_part[0].cur_loc = loc;
  variable_was_changed (var, set->vars);
}
static void
set_variable_part (dataflow_set *set, rtx loc, tree decl, long offset)
{
  int pos, low, high;
  location_chain node, next;
  location_chain *nextp;
  variable var;
  void **slot;
  slot = htab_find_slot_with_hash (set->vars, decl,
       ((size_t) (decl)), INSERT);
  if (!*slot)
    {
      var = pool_alloc (var_pool);
      var->decl = decl;
      var->refcount = 1;
      var->n_var_parts = 1;
      var->var_part[0].offset = offset;
      var->var_part[0].loc_chain = ((void *)0);
      var->var_part[0].cur_loc = ((void *)0);
      *slot = var;
      pos = 0;
    }
  else
    {
      var = (variable) *slot;
      low = 0;
      high = var->n_var_parts;
      while (low != high)
 {
   pos = (low + high) / 2;
   if (var->var_part[pos].offset < offset)
     low = pos + 1;
   else
     high = pos;
 }
      pos = low;
      if (pos < var->n_var_parts && var->var_part[pos].offset == offset)
 {
   node = var->var_part[pos].loc_chain;
   if (node
       && (((((enum rtx_code) (node->loc)->code) == REG) && (((enum rtx_code) (loc)->code) == REG)
     && (((node->loc)->u.fld[0]).rtuint) == (((loc)->u.fld[0]).rtuint))
    || rtx_equal_p (node->loc, loc)))
     {
       return;
     }
   else
     {
       if (var->refcount > 1)
  var = unshare_variable (set, var);
     }
 }
      else
 {
   if (var->refcount > 1)
     var = unshare_variable (set, var);
   for (high = var->n_var_parts; high > low; high--)
     var->var_part[high] = var->var_part[high - 1];
   var->n_var_parts++;
   var->var_part[pos].offset = offset;
   var->var_part[pos].loc_chain = ((void *)0);
   var->var_part[pos].cur_loc = ((void *)0);
 }
    }
  nextp = &var->var_part[pos].loc_chain;
  for (node = var->var_part[pos].loc_chain; node; node = next)
    {
      next = node->next;
      if (((((enum rtx_code) (node->loc)->code) == REG) && (((enum rtx_code) (loc)->code) == REG)
    && (((node->loc)->u.fld[0]).rtuint) == (((loc)->u.fld[0]).rtuint))
   || rtx_equal_p (node->loc, loc))
 {
   pool_free (loc_chain_pool, node);
   *nextp = next;
   break;
 }
      else
 nextp = &node->next;
    }
  node = pool_alloc (loc_chain_pool);
  node->loc = loc;
  node->next = var->var_part[pos].loc_chain;
  var->var_part[pos].loc_chain = node;
  if (var->var_part[pos].cur_loc == ((void *)0))
    {
      var->var_part[pos].cur_loc = loc;
      variable_was_changed (var, set->vars);
    }
}
static void
delete_variable_part (dataflow_set *set, rtx loc, tree decl,
        long offset)
{
  int pos, low, high;
  void **slot;
  slot = htab_find_slot_with_hash (set->vars, decl, ((size_t) (decl)),
       NO_INSERT);
  if (slot)
    {
      variable var = (variable) *slot;
      low = 0;
      high = var->n_var_parts;
      while (low != high)
 {
   pos = (low + high) / 2;
   if (var->var_part[pos].offset < offset)
     low = pos + 1;
   else
     high = pos;
 }
      pos = low;
      if (pos < var->n_var_parts && var->var_part[pos].offset == offset)
 {
   location_chain node, next;
   location_chain *nextp;
   unsigned char changed;
   if (var->refcount > 1)
     {
       for (node = var->var_part[pos].loc_chain; node;
     node = node->next)
  {
    if (((((enum rtx_code) (node->loc)->code) == REG) && (((enum rtx_code) (loc)->code) == REG)
         && (((node->loc)->u.fld[0]).rtuint) == (((loc)->u.fld[0]).rtuint))
        || rtx_equal_p (node->loc, loc))
      {
        var = unshare_variable (set, var);
        break;
      }
  }
     }
   nextp = &var->var_part[pos].loc_chain;
   for (node = *nextp; node; node = next)
     {
       next = node->next;
       if (((((enum rtx_code) (node->loc)->code) == REG) && (((enum rtx_code) (loc)->code) == REG)
     && (((node->loc)->u.fld[0]).rtuint) == (((loc)->u.fld[0]).rtuint))
    || rtx_equal_p (node->loc, loc))
  {
    pool_free (loc_chain_pool, node);
    *nextp = next;
    break;
  }
       else
  nextp = &node->next;
     }
   if (var->var_part[pos].cur_loc
       && (((((enum rtx_code) (loc)->code) == REG)
     && (((enum rtx_code) (var->var_part[pos].cur_loc)->code) == REG)
     && (((loc)->u.fld[0]).rtuint) == (((var->var_part[pos].cur_loc)->u.fld[0]).rtuint))
    || rtx_equal_p (loc, var->var_part[pos].cur_loc)))
     {
       changed = 1;
       if (var->var_part[pos].loc_chain)
  var->var_part[pos].cur_loc = var->var_part[pos].loc_chain->loc;
     }
   else
     changed = 0;
   if (var->var_part[pos].loc_chain == ((void *)0))
     {
       var->n_var_parts--;
       while (pos < var->n_var_parts)
  {
    var->var_part[pos] = var->var_part[pos + 1];
    pos++;
  }
     }
   if (changed)
       variable_was_changed (var, set->vars);
 }
    }
}
static int
emit_note_insn_var_location (void **varp, void *data)
{
  variable var = *(variable *) varp;
  rtx insn = ((emit_note_data *)data)->insn;
  enum emit_note_where where = ((emit_note_data *)data)->where;
  rtx note;
  int i;
  unsigned char complete;
  long last_limit;
  tree type_size_unit;
  complete = 1;
  last_limit = 0;
  for (i = 0; i < var->n_var_parts; i++)
    {
      if (last_limit < var->var_part[i].offset)
 {
   complete = 0;
   break;
 }
      last_limit
 = (var->var_part[i].offset
    + ((unsigned short) mode_size[((enum machine_mode) (var->var_part[i].loc_chain->loc)->mode)]));
    }
  type_size_unit = ((((var->decl)->common.type))->type.size_unit);
  if ((unsigned long) last_limit < (((type_size_unit)->int_cst.int_cst).low))
    complete = 0;
  if (where == EMIT_NOTE_AFTER_INSN)
    note = emit_note_after (NOTE_INSN_VAR_LOCATION, insn);
  else
    note = emit_note_before (NOTE_INSN_VAR_LOCATION, insn);
  if (!complete)
    {
      (((note)->u.fld[4]).rtx1) = gen_rtx_fmt_te (VAR_LOCATION, (VOIDmode), (var->decl), ((rtx) 0))
                      ;
    }
  else if (var->n_var_parts == 1)
    {
      rtx expr_list
 = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (var->var_part[0].loc_chain->loc), (gen_rtx_CONST_INT (VOIDmode, (long) (var->var_part[0].offset))))
                                          ;
      (((note)->u.fld[4]).rtx1) = gen_rtx_fmt_te (VAR_LOCATION, (VOIDmode), (var->decl), (expr_list))
                       ;
    }
  else if (var->n_var_parts)
    {
      rtx argp[16];
      rtx parallel;
      for (i = 0; i < var->n_var_parts; i++)
 argp[i] = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (var->var_part[i].loc_chain->loc), (gen_rtx_CONST_INT (VOIDmode, (long) (var->var_part[i].offset))))
                                           ;
      parallel = gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec_v (var->n_var_parts, argp)))
                                            ;
      (((note)->u.fld[4]).rtx1) = gen_rtx_fmt_te (VAR_LOCATION, (VOIDmode), (var->decl), (parallel))
                      ;
    }
  htab_clear_slot (changed_variables, varp);
  if (var->n_var_parts == 0)
    {
      pool_free (var_pool, var);
    }
  return 1;
}
static void
emit_notes_for_changes (rtx insn, enum emit_note_where where)
{
  emit_note_data data;
  data.insn = insn;
  data.where = where;
  htab_traverse (changed_variables, emit_note_insn_var_location, &data);
}
static int
emit_notes_for_differences_1 (void **slot, void *data)
{
  htab_t new_vars = (htab_t) data;
  variable old_var, new_var;
  old_var = *(variable *) slot;
  new_var = htab_find_with_hash (new_vars, old_var->decl,
     ((size_t) (old_var->decl)));
  if (!new_var)
    {
      variable empty_var;
      empty_var = pool_alloc (var_pool);
      empty_var->decl = old_var->decl;
      empty_var->refcount = 1;
      empty_var->n_var_parts = 0;
      variable_was_changed (empty_var, ((void *)0));
    }
  else if (variable_different_p (old_var, new_var, 1))
    {
      variable_was_changed (new_var, ((void *)0));
    }
  return 1;
}
static int
emit_notes_for_differences_2 (void **slot, void *data)
{
  htab_t old_vars = (htab_t) data;
  variable old_var, new_var;
  new_var = *(variable *) slot;
  old_var = htab_find_with_hash (old_vars, new_var->decl,
     ((size_t) (new_var->decl)));
  if (!old_var)
    {
      variable_was_changed (new_var, ((void *)0));
    }
  return 1;
}
static void
emit_notes_for_differences (rtx insn, dataflow_set *old_set,
       dataflow_set *new_set)
{
  htab_traverse (old_set->vars, emit_notes_for_differences_1, new_set->vars);
  htab_traverse (new_set->vars, emit_notes_for_differences_2, old_set->vars);
  emit_notes_for_changes (insn, EMIT_NOTE_BEFORE_INSN);
}
static void
emit_notes_in_bb (basic_block bb)
{
  int i;
  dataflow_set set;
  dataflow_set_init (&set, htab_elements (((variable_tracking_info) (bb)->aux)->in.vars) + 3);
  dataflow_set_copy_vt (&set, &((variable_tracking_info) (bb)->aux)->in);
  for (i = 0; i < ((variable_tracking_info) (bb)->aux)->n_mos; i++)
    {
      rtx insn = ((variable_tracking_info) (bb)->aux)->mos[i].insn;
      switch (((variable_tracking_info) (bb)->aux)->mos[i].type)
 {
   case MO_CALL:
     {
       int r;
       for (r = 0; r < 53; r++)
  if ((!!((call_used_reg_set)[(r) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((r) % ((unsigned) (8 * 4)))))))
    {
      var_regno_delete (&set, r);
    }
       emit_notes_for_changes (insn, EMIT_NOTE_AFTER_INSN);
     }
     break;
   case MO_USE:
   case MO_SET:
     {
       rtx loc = ((variable_tracking_info) (bb)->aux)->mos[i].u.loc;
       if ((((enum rtx_code) (loc)->code) == REG))
  var_reg_delete_and_set (&set, loc);
       else
  var_mem_delete_and_set (&set, loc);
       if (((variable_tracking_info) (bb)->aux)->mos[i].type == MO_USE)
  emit_notes_for_changes (insn, EMIT_NOTE_BEFORE_INSN);
       else
  emit_notes_for_changes (insn, EMIT_NOTE_AFTER_INSN);
     }
     break;
   case MO_USE_NO_VAR:
   case MO_CLOBBER:
     {
       rtx loc = ((variable_tracking_info) (bb)->aux)->mos[i].u.loc;
       if ((((enum rtx_code) (loc)->code) == REG))
  var_reg_delete (&set, loc);
       else
  var_mem_delete (&set, loc);
       if (((variable_tracking_info) (bb)->aux)->mos[i].type == MO_USE_NO_VAR)
  emit_notes_for_changes (insn, EMIT_NOTE_BEFORE_INSN);
       else
  emit_notes_for_changes (insn, EMIT_NOTE_AFTER_INSN);
     }
     break;
   case MO_ADJUST:
     {
       rtx base;
       set.stack_adjust += ((variable_tracking_info) (bb)->aux)->mos[i].u.adjust;
       base = gen_rtx_MEM ((0 ? DImode : SImode), plus_constant_wide (((global_rtl[GR_STACK_POINTER])), (long) (set.stack_adjust))
                        );
       set_frame_base_location (&set, base);
       emit_notes_for_changes (insn, EMIT_NOTE_AFTER_INSN);
     }
     break;
 }
    }
  dataflow_set_destroy (&set);
}
static void
vt_emit_notes (void)
{
  basic_block bb;
  dataflow_set *last_out;
  dataflow_set empty;
  emit_notes = 1;
  dataflow_set_init (&empty, 7);
  last_out = &empty;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      emit_notes_for_differences ((bb)->head_, last_out, &((variable_tracking_info) (bb)->aux)->in);
      emit_notes_in_bb (bb);
      last_out = &((variable_tracking_info) (bb)->aux)->out;
    }
  dataflow_set_destroy (&empty);
  emit_notes = 0;
}
static unsigned char
vt_get_decl_and_offset (rtx rtl, tree *declp, long *offsetp)
{
  if ((((enum rtx_code) (rtl)->code) == REG))
    {
      if ((((rtl)->u.fld[2]).rtreg))
 {
   *declp = ((((rtl)->u.fld[2]).rtreg) == 0 ? 0 : (((rtl)->u.fld[2]).rtreg)->decl);
   *offsetp = ((((rtl)->u.fld[2]).rtreg) == 0 ? 0 : (((rtl)->u.fld[2]).rtreg)->offset);
   return 1;
 }
    }
  else if ((((enum rtx_code) (rtl)->code) == MEM))
    {
      if ((((rtl)->u.fld[1]).rtmem))
 {
   *declp = ((((rtl)->u.fld[1]).rtmem) == 0 ? 0 : (((rtl)->u.fld[1]).rtmem)->expr);
   *offsetp = ((((rtl)->u.fld[1]).rtmem) == 0 ? 0 : (((rtl)->u.fld[1]).rtmem)->offset) ? ((((((rtl)->u.fld[1]).rtmem) == 0 ? 0 : (((rtl)->u.fld[1]).rtmem)->offset))->u.hwint[0]) : 0;
   return 1;
 }
    }
  return 0;
}
static void
vt_add_function_parameters (void)
{
  tree parm;
  for (parm = ((current_function_decl)->decl.arguments);
       parm; parm = ((parm)->common.chain))
    {
      rtx decl_rtl = (((parm)->decl.rtl != ((void *)0)) ? ((parm)->decl.rtl ? (parm)->decl.rtl : (make_decl_rtl (parm, ((void *)0)), (parm)->decl.rtl)) : ((void *)0));
      rtx incoming = ((parm)->decl.u2.r);
      tree decl;
      long offset;
      dataflow_set *out;
      if (((enum tree_code) (parm)->common.code) != PARM_DECL)
 continue;
      if (!((parm)->decl.name))
 continue;
      if (!decl_rtl || !incoming)
 continue;
      if (((enum machine_mode) (decl_rtl)->mode) == BLKmode || ((enum machine_mode) (incoming)->mode) == BLKmode)
 continue;
      if (!vt_get_decl_and_offset (incoming, &decl, &offset))
 if (!vt_get_decl_and_offset (decl_rtl, &decl, &offset))
   continue;
      if (!decl)
 continue;
      incoming = eliminate_regs (incoming, 0, (rtx) 0);
      out = &((variable_tracking_info) (ENTRY_BLOCK_PTR)->aux)->out;
      if ((((enum rtx_code) (incoming)->code) == REG))
 {
   attrs_list_insert (&out->regs[(((incoming)->u.fld[0]).rtuint)],
        parm, offset, incoming);
   set_variable_part (out, incoming, parm, offset);
 }
      else if ((((enum rtx_code) (incoming)->code) == MEM))
 {
   set_variable_part (out, incoming, parm, offset);
 }
    }
}
static void
vt_initialize (void)
{
  basic_block bb;
  alloc_aux_for_blocks (sizeof (struct variable_tracking_info_def));
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      rtx insn;
      long pre, post;
      ((variable_tracking_info) (bb)->aux)->n_mos = 0;
      for (insn = (bb)->head_; insn != ((((bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 {
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       if (!frame_pointer_needed)
  {
    insn_stack_adjust_offset_pre_post (insn, &pre, &post);
    if (pre)
      ((variable_tracking_info) (bb)->aux)->n_mos++;
    if (post)
      ((variable_tracking_info) (bb)->aux)->n_mos++;
  }
       note_uses (&(((insn)->u.fld[5]).rtx1), count_uses_1, insn);
       note_stores ((((insn)->u.fld[5]).rtx1), count_stores, insn);
       if (((enum rtx_code) (insn)->code) == CALL_INSN)
  ((variable_tracking_info) (bb)->aux)->n_mos++;
     }
 }
      ((variable_tracking_info) (bb)->aux)->mos = xmalloc (((variable_tracking_info) (bb)->aux)->n_mos
          * sizeof (struct micro_operation_def));
      ((variable_tracking_info) (bb)->aux)->n_mos = 0;
      for (insn = (bb)->head_; insn != ((((bb)->end_)->u.fld[2]).rtx1);
    insn = (((insn)->u.fld[2]).rtx1))
 {
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       int n1, n2;
       if (!frame_pointer_needed)
  {
    insn_stack_adjust_offset_pre_post (insn, &pre, &post);
    if (pre)
      {
        micro_operation *mo = ((variable_tracking_info) (bb)->aux)->mos + ((variable_tracking_info) (bb)->aux)->n_mos++;
        mo->type = MO_ADJUST;
        mo->u.adjust = pre;
        mo->insn = insn;
      }
  }
       n1 = ((variable_tracking_info) (bb)->aux)->n_mos;
       note_uses (&(((insn)->u.fld[5]).rtx1), add_uses_1, insn);
       n2 = ((variable_tracking_info) (bb)->aux)->n_mos - 1;
       while (n1 < n2)
  {
    while (n1 < n2 && ((variable_tracking_info) (bb)->aux)->mos[n1].type == MO_USE)
      n1++;
    while (n1 < n2 && ((variable_tracking_info) (bb)->aux)->mos[n2].type == MO_USE_NO_VAR)
      n2--;
    if (n1 < n2)
      {
        micro_operation sw;
        sw = ((variable_tracking_info) (bb)->aux)->mos[n1];
        ((variable_tracking_info) (bb)->aux)->mos[n1] = ((variable_tracking_info) (bb)->aux)->mos[n2];
        ((variable_tracking_info) (bb)->aux)->mos[n2] = sw;
      }
  }
       if (((enum rtx_code) (insn)->code) == CALL_INSN)
  {
    micro_operation *mo = ((variable_tracking_info) (bb)->aux)->mos + ((variable_tracking_info) (bb)->aux)->n_mos++;
    mo->type = MO_CALL;
    mo->insn = insn;
  }
       n1 = ((variable_tracking_info) (bb)->aux)->n_mos;
       note_stores ((((insn)->u.fld[5]).rtx1), add_stores, insn);
       n2 = ((variable_tracking_info) (bb)->aux)->n_mos - 1;
       while (n1 < n2)
  {
    while (n1 < n2 && ((variable_tracking_info) (bb)->aux)->mos[n1].type == MO_SET)
      n1++;
    while (n1 < n2 && ((variable_tracking_info) (bb)->aux)->mos[n2].type == MO_CLOBBER)
      n2--;
    if (n1 < n2)
      {
        micro_operation sw;
        sw = ((variable_tracking_info) (bb)->aux)->mos[n1];
        ((variable_tracking_info) (bb)->aux)->mos[n1] = ((variable_tracking_info) (bb)->aux)->mos[n2];
        ((variable_tracking_info) (bb)->aux)->mos[n2] = sw;
      }
  }
       if (!frame_pointer_needed && post)
  {
    micro_operation *mo = ((variable_tracking_info) (bb)->aux)->mos + ((variable_tracking_info) (bb)->aux)->n_mos++;
    mo->type = MO_ADJUST;
    mo->u.adjust = post;
    mo->insn = insn;
  }
     }
 }
    }
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    {
      ((variable_tracking_info) (bb)->aux)->visited = 0;
      dataflow_set_init (&((variable_tracking_info) (bb)->aux)->in, 7);
      dataflow_set_init (&((variable_tracking_info) (bb)->aux)->out, 7);
    }
  attrs_pool = create_alloc_pool ("attrs_def pool",
      sizeof (struct attrs_def), 1024);
  var_pool = create_alloc_pool ("variable_def pool",
    sizeof (struct variable_def), 64);
  loc_chain_pool = create_alloc_pool ("location_chain_def pool",
          sizeof (struct location_chain_def),
          1024);
  changed_variables = htab_create (10, variable_htab_hash, variable_htab_eq,
       ((void *)0));
  vt_add_function_parameters ();
  if (!frame_pointer_needed)
    {
      rtx base;
      frame_base_decl = make_node_stat (VAR_DECL );
      ((frame_base_decl)->decl.name) = get_identifier ("___frame_base_decl");
      ((frame_base_decl)->common.type) = integer_types[itk_char];
      ((frame_base_decl)->decl.artificial_flag) = 1;
      frame_stack_adjust = -prologue_stack_adjust ();
      base = gen_rtx_MEM ((0 ? DImode : SImode), plus_constant_wide (((global_rtl[GR_STACK_POINTER])), (long) (frame_stack_adjust))
                         );
      set_variable_part (&((variable_tracking_info) (ENTRY_BLOCK_PTR)->aux)->out, base, frame_base_decl, 0);
    }
  else
    {
      frame_base_decl = ((void *)0);
    }
}
static void
vt_finalize (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      free (((variable_tracking_info) (bb)->aux)->mos);
    }
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    {
      dataflow_set_destroy (&((variable_tracking_info) (bb)->aux)->in);
      dataflow_set_destroy (&((variable_tracking_info) (bb)->aux)->out);
    }
  free_aux_for_blocks ();
  free_alloc_pool (attrs_pool);
  free_alloc_pool (var_pool);
  free_alloc_pool (loc_chain_pool);
  htab_delete (changed_variables);
}
void
variable_tracking_main (void)
{
  if (n_basic_blocks > 500 && n_edges / n_basic_blocks >= 20)
    return;
  mark_dfs_back_edges ();
  vt_initialize ();
  if (!frame_pointer_needed)
    {
      if (!vt_stack_adjustments ())
 {
   vt_finalize ();
   return;
 }
    }
  vt_find_locations ();
  vt_emit_notes ();
  if (dump_file)
    {
      dump_dataflow_sets ();
      dump_flow_info (dump_file);
    }
  vt_finalize ();
}
static struct profile_hooks* profile_hooks;
static FILE*
profile_dump_file (void) {
  return profile_hooks->profile_dump_file ();
}
struct edge_info {
  unsigned int count_valid : 1;
  unsigned int on_tree : 1;
  unsigned int ignore : 1;
};
struct bb_prof_info {
  unsigned int count_valid : 1;
  gcov_type succ_count;
  gcov_type pred_count;
};
const struct gcov_ctr_summary *profile_info;
static int total_num_blocks;
static int total_num_edges;
static int total_num_edges_ignored;
static int total_num_edges_instrumented;
static int total_num_blocks_created;
static int total_num_passes;
static int total_num_times_called;
static int total_hist_br_prob[20];
static int total_num_never_executed;
static int total_num_branches;
static void find_spanning_tree (struct edge_list *);
static unsigned instrument_edges (struct edge_list *);
static void instrument_values (unsigned, struct histogram_value *);
static void compute_branch_probabilities (void);
static void compute_value_histograms (unsigned, struct histogram_value *);
static gcov_type * get_exec_counts (void);
static basic_block find_group (basic_block);
static void union_groups (basic_block, basic_block);
static unsigned
instrument_edges (struct edge_list *el)
{
  unsigned num_instr_edges = 0;
  int num_edges = ((el)->num_edges);
  basic_block bb;
  remove_fake_edges ();
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    {
      edge e;
      for (e = bb->succ; e; e = e->succ_next)
 {
   struct edge_info *inf = ((struct edge_info *) (e)->aux);
   if (!inf->ignore && !inf->on_tree)
     {
       if (e->flags & 2)
  abort ();
       if (dump_file)
  fprintf (dump_file, "Edge %d to %d instrumented%s\n",
    e->src->index, e->dest->index,
    ((e)->src->succ->succ_next && (e)->dest->pred->pred_next) ? " (and split)" : "");
       (profile_hooks->gen_edge_profiler) (num_instr_edges++, e);
     }
 }
    }
  total_num_blocks_created += num_edges;
  if (dump_file)
    fprintf (dump_file, "%d edges instrumented\n", num_instr_edges);
  return num_instr_edges;
}
static void
instrument_values (unsigned n_values, struct histogram_value *values)
{
  unsigned i, t;
  for (i = 0; i < n_values; i++)
    {
      switch (values[i].type)
 {
 case HIST_TYPE_INTERVAL:
   t = 1;
   break;
 case HIST_TYPE_POW2:
   t = 2;
   break;
 case HIST_TYPE_SINGLE_VALUE:
   t = 3;
   break;
 case HIST_TYPE_CONST_DELTA:
   t = 4;
   break;
 default:
   abort ();
 }
      if (!coverage_counter_alloc (t, values[i].n_counters))
 continue;
      switch (values[i].type)
 {
 case HIST_TYPE_INTERVAL:
   (profile_hooks->gen_interval_profiler) (values + i, t, 0);
   break;
 case HIST_TYPE_POW2:
   (profile_hooks->gen_pow2_profiler) (values + i, t, 0);
   break;
 case HIST_TYPE_SINGLE_VALUE:
   (profile_hooks->gen_one_value_profiler) (values + i, t, 0);
   break;
 case HIST_TYPE_CONST_DELTA:
   (profile_hooks->gen_const_delta_profiler) (values + i, t, 0);
   break;
 default:
   abort ();
 }
    }
}
static gcov_type *
get_exec_counts (void)
{
  unsigned num_edges = 0;
  basic_block bb;
  gcov_type *counts;
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    {
      edge e;
      for (e = bb->succ; e; e = e->succ_next)
 if (!((struct edge_info *) (e)->aux)->ignore && !((struct edge_info *) (e)->aux)->on_tree)
   num_edges++;
    }
  counts = get_coverage_counts (0, num_edges, &profile_info);
  if (!counts)
    return ((void *)0);
  if (dump_file && profile_info)
    fprintf(dump_file, "Merged %u profiles with maximal count %u.\n",
     profile_info->runs, (unsigned) profile_info->sum_max);
  return counts;
}
static void
compute_branch_probabilities (void)
{
  basic_block bb;
  int i;
  int num_edges = 0;
  int changes;
  int passes;
  int hist_br_prob[20];
  int num_never_executed;
  int num_branches;
  gcov_type *exec_counts = get_exec_counts ();
  int exec_counts_pos = 0;
  if (profile_info)
    {
      if (profile_info->run_max * profile_info->runs < profile_info->sum_max)
 {
   error ("corrupted profile info: run_max * runs < sum_max");
   exec_counts = ((void *)0);
 }
      if (profile_info->sum_all < profile_info->sum_max)
 {
   error ("corrupted profile info: sum_all is smaller than sum_max");
   exec_counts = ((void *)0);
 }
    }
  alloc_aux_for_blocks (sizeof (struct bb_prof_info));
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    {
      edge e;
      for (e = bb->succ; e; e = e->succ_next)
 if (!((struct edge_info *) (e)->aux)->ignore)
   ((struct bb_prof_info *) (bb)->aux)->succ_count++;
      for (e = bb->pred; e; e = e->pred_next)
 if (!((struct edge_info *) (e)->aux)->ignore)
   ((struct bb_prof_info *) (bb)->aux)->pred_count++;
    }
  ((struct bb_prof_info *) (EXIT_BLOCK_PTR)->aux)->succ_count = 2;
  ((struct bb_prof_info *) (ENTRY_BLOCK_PTR)->aux)->pred_count = 2;
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    {
      edge e;
      for (e = bb->succ; e; e = e->succ_next)
 if (!((struct edge_info *) (e)->aux)->ignore && !((struct edge_info *) (e)->aux)->on_tree)
   {
     num_edges++;
     if (exec_counts)
       {
  e->count = exec_counts[exec_counts_pos++];
  if (e->count > profile_info->sum_max)
    {
      error ("corrupted profile info: edge from %i to %i exceeds maximal count",
      bb->index, e->dest->index);
    }
       }
     else
       e->count = 0;
     ((struct edge_info *) (e)->aux)->count_valid = 1;
     ((struct bb_prof_info *) (bb)->aux)->succ_count--;
     ((struct bb_prof_info *) (e->dest)->aux)->pred_count--;
     if (dump_file)
       {
  fprintf (dump_file, "\nRead edge from %i to %i, count:",
    bb->index, e->dest->index);
  fprintf (dump_file, "%lld",
    (long long) e->count);
       }
   }
    }
  if (dump_file)
    fprintf (dump_file, "\n%d edge counts read\n", num_edges);
  changes = 1;
  passes = 0;
  while (changes)
    {
      passes++;
      changes = 0;
      for (bb = EXIT_BLOCK_PTR; bb != ((void *)0); bb = bb->prev_bb)
 {
   struct bb_prof_info *bi = ((struct bb_prof_info *) (bb)->aux);
   if (! bi->count_valid)
     {
       if (bi->succ_count == 0)
  {
    edge e;
    gcov_type total = 0;
    for (e = bb->succ; e; e = e->succ_next)
      total += e->count;
    bb->count = total;
    bi->count_valid = 1;
    changes = 1;
  }
       else if (bi->pred_count == 0)
  {
    edge e;
    gcov_type total = 0;
    for (e = bb->pred; e; e = e->pred_next)
      total += e->count;
    bb->count = total;
    bi->count_valid = 1;
    changes = 1;
  }
     }
   if (bi->count_valid)
     {
       if (bi->succ_count == 1)
  {
    edge e;
    gcov_type total = 0;
    for (e = bb->succ; e; e = e->succ_next)
      total += e->count;
    for (e = bb->succ; e; e = e->succ_next)
      if (! ((struct edge_info *) (e)->aux)->count_valid && ! ((struct edge_info *) (e)->aux)->ignore)
        break;
    total = bb->count - total;
    if (! e)
      abort ();
    ((struct edge_info *) (e)->aux)->count_valid = 1;
    e->count = total;
    bi->succ_count--;
    ((struct bb_prof_info *) (e->dest)->aux)->pred_count--;
    changes = 1;
  }
       if (bi->pred_count == 1)
  {
    edge e;
    gcov_type total = 0;
    for (e = bb->pred; e; e = e->pred_next)
      total += e->count;
    for (e = bb->pred; e; e = e->pred_next)
      if (!((struct edge_info *) (e)->aux)->count_valid && !((struct edge_info *) (e)->aux)->ignore)
        break;
    total = bb->count - total + e->count;
    if (! e)
      abort ();
    ((struct edge_info *) (e)->aux)->count_valid = 1;
    e->count = total;
    bi->pred_count--;
    ((struct bb_prof_info *) (e->src)->aux)->succ_count--;
    changes = 1;
  }
     }
 }
    }
  if (dump_file)
    dump_flow_info (dump_file);
  total_num_passes += passes;
  if (dump_file)
    fprintf (dump_file, "Graph solving took %d passes.\n\n", passes);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      if (((struct bb_prof_info *) (bb)->aux)->succ_count || ((struct bb_prof_info *) (bb)->aux)->pred_count)
 abort ();
    }
  for (i = 0; i < 20; i++)
    hist_br_prob[i] = 0;
  num_never_executed = 0;
  num_branches = 0;
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    {
      edge e;
      rtx note;
      if (bb->count < 0)
 {
   error ("corrupted profile info: number of iterations for basic block %d thought to be %i",
   bb->index, (int)bb->count);
   bb->count = 0;
 }
      for (e = bb->succ; e; e = e->succ_next)
 {
   if ((e->count < 0
        && e->dest == EXIT_BLOCK_PTR)
       || (e->count > bb->count
    && e->dest != EXIT_BLOCK_PTR))
     {
       if (block_ends_with_call_p (bb))
  e->count = e->count < 0 ? 0 : bb->count;
     }
   if (e->count < 0 || e->count > bb->count)
     {
       error ("corrupted profile info: number of executions for edge %d-%d thought to be %i",
       e->src->index, e->dest->index,
       (int)e->count);
       e->count = bb->count / 2;
     }
 }
      if (bb->count)
 {
   for (e = bb->succ; e; e = e->succ_next)
     e->probability = (e->count * 10000 + bb->count / 2) / bb->count;
   if (bb->index >= 0
       && block_ends_with_condjump_p (bb)
       && bb->succ->succ_next)
     {
       int prob;
       edge e;
       int index;
       for (e = bb->succ; e->flags & (16 | 1);
     e = e->succ_next)
  continue;
       prob = e->probability;
       index = prob * 20 / 10000;
       if (index == 20)
  index = 19;
       hist_br_prob[index]++;
       if (!ir_type ())
  {
    note = find_reg_note ((bb)->end_, REG_BR_PROB, 0);
    if (note)
      (((note)->u.fld[0]).rtx1) = gen_rtx_CONST_INT (VOIDmode, (long) (prob));
    else
      ((((bb)->end_)->u.fld[8]).rtx1)
        = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PROB), (gen_rtx_CONST_INT (VOIDmode, (long) (prob))), (((((bb)->end_)->u.fld[8]).rtx1)))
                                ;
  }
       num_branches++;
     }
 }
      else
 {
   int total = 0;
   for (e = bb->succ; e; e = e->succ_next)
     if (!(e->flags & ((2 | 4 | 8) | 16)))
       total ++;
   if (total)
     {
       for (e = bb->succ; e; e = e->succ_next)
  if (!(e->flags & ((2 | 4 | 8) | 16)))
    e->probability = 10000 / total;
  else
    e->probability = 0;
     }
   else
     {
       for (e = bb->succ; e; e = e->succ_next)
  total ++;
       for (e = bb->succ; e; e = e->succ_next)
  e->probability = 10000 / total;
     }
   if (bb->index >= 0
       && block_ends_with_condjump_p (bb)
       && bb->succ->succ_next)
     num_branches++, num_never_executed;
 }
    }
  if (dump_file)
    {
      fprintf (dump_file, "%d branches\n", num_branches);
      fprintf (dump_file, "%d branches never executed\n",
        num_never_executed);
      if (num_branches)
 for (i = 0; i < 10; i++)
   fprintf (dump_file, "%d%% branches in range %d-%d%%\n",
     (hist_br_prob[i] + hist_br_prob[19-i]) * 100 / num_branches,
     5 * i, 5 * i + 5);
      total_num_branches += num_branches;
      total_num_never_executed += num_never_executed;
      for (i = 0; i < 20; i++)
 total_hist_br_prob[i] += hist_br_prob[i];
      fputc_unlocked ('\n', dump_file);
      fputc_unlocked ('\n', dump_file);
    }
  free_aux_for_blocks ();
}
static void
compute_value_histograms (unsigned n_values, struct histogram_value *values)
{
  unsigned i, j, t, any;
  unsigned n_histogram_counters[(4 - 1 + 1)];
  gcov_type *histogram_counts[(4 - 1 + 1)];
  gcov_type *act_count[(4 - 1 + 1)];
  gcov_type *aact_count;
  for (t = 0; t < (4 - 1 + 1); t++)
    n_histogram_counters[t] = 0;
  for (i = 0; i < n_values; i++)
    n_histogram_counters[(int) (values[i].type)] += values[i].n_counters;
  any = 0;
  for (t = 0; t < (4 - 1 + 1); t++)
    {
      if (!n_histogram_counters[t])
 {
   histogram_counts[t] = ((void *)0);
   continue;
 }
      histogram_counts[t] =
 get_coverage_counts (((int) (t) + 1),
        n_histogram_counters[t], ((void *)0));
      if (histogram_counts[t])
 any = 1;
      act_count[t] = histogram_counts[t];
    }
  if (!any)
    return;
  for (i = 0; i < n_values; i++)
    {
      rtx hist_list = (rtx) 0;
      t = (int) (values[i].type);
      if (!ir_type ())
 {
   aact_count = act_count[t];
   act_count[t] += values[i].n_counters;
   for (j = values[i].n_counters; j > 0; j--)
     hist_list = alloc_EXPR_LIST (0, gen_rtx_CONST_INT (VOIDmode, (long) (aact_count[j - 1])),
     hist_list);
       hist_list = alloc_EXPR_LIST (0,
       copy_rtx ((rtx)values[i].value1), hist_list);
   hist_list = alloc_EXPR_LIST (0, gen_rtx_CONST_INT (VOIDmode, (long) (values[i].type)), hist_list);
       ((((rtx)values[i].insn)->u.fld[8]).rtx1) =
    alloc_EXPR_LIST (REG_VALUE_PROFILE, hist_list,
           ((((rtx)values[i].insn)->u.fld[8]).rtx1));
 }
    }
  for (t = 0; t < (4 - 1 + 1); t++)
    if (histogram_counts[t])
      free (histogram_counts[t]);
}
void
branch_prob (void)
{
  basic_block bb;
  unsigned i;
  unsigned num_edges, ignored_edges;
  unsigned num_instrumented;
  struct edge_list *el;
  unsigned n_values = 0;
  struct histogram_value *values = ((void *)0);
  total_num_times_called++;
  flow_call_edges_add (((void *)0));
  add_noreturn_fake_exit_edges ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      int need_exit_edge = 0, need_entry_edge = 0;
      int have_exit_edge = 0, have_entry_edge = 0;
      edge e;
      for (e = bb->succ; e; e = e->succ_next)
 {
   if ((e->flags & (2 | 4))
        && e->dest != EXIT_BLOCK_PTR)
     need_exit_edge = 1;
   if (e->dest == EXIT_BLOCK_PTR)
     have_exit_edge = 1;
 }
      for (e = bb->pred; e; e = e->pred_next)
 {
   if ((e->flags & (2 | 4))
        && e->src != ENTRY_BLOCK_PTR)
     need_entry_edge = 1;
   if (e->src == ENTRY_BLOCK_PTR)
     have_entry_edge = 1;
 }
      if (need_exit_edge && !have_exit_edge)
 {
   if (dump_file)
     fprintf (dump_file, "Adding fake exit edge to bb %i\n",
       bb->index);
   make_edge (bb, EXIT_BLOCK_PTR, 16);
 }
      if (need_entry_edge && !have_entry_edge)
 {
   if (dump_file)
     fprintf (dump_file, "Adding fake entry edge to bb %i\n",
       bb->index);
   make_edge (ENTRY_BLOCK_PTR, bb, 16);
 }
    }
  el = create_edge_list ();
  num_edges = ((el)->num_edges);
  alloc_aux_for_edges (sizeof (struct edge_info));
  compact_blocks ();
  ignored_edges = 0;
  for (i = 0 ; i < num_edges ; i++)
    {
      edge e = ((el)->index_to_edge[(i)]);
      e->count = 0;
      if ((e->flags & (2 | 4))
   && e->src != ENTRY_BLOCK_PTR && e->dest != EXIT_BLOCK_PTR)
 {
   ((struct edge_info *) (e)->aux)->ignore = 1;
   ignored_edges++;
 }
    }
  find_spanning_tree (el);
  for (num_instrumented = i = 0; i < num_edges; i++)
    {
      edge e = ((el)->index_to_edge[(i)]);
      struct edge_info *inf = ((struct edge_info *) (e)->aux);
      if (inf->ignore || inf->on_tree)
        ;
      else if (e->flags & 16)
 {
   inf->ignore = 1;
   ignored_edges++;
 }
      else
 num_instrumented++;
    }
  total_num_blocks += n_basic_blocks + 2;
  if (dump_file)
    fprintf (dump_file, "%d basic blocks\n", n_basic_blocks);
  total_num_edges += num_edges;
  if (dump_file)
    fprintf (dump_file, "%d edges\n", num_edges);
  total_num_edges_ignored += ignored_edges;
  if (dump_file)
    fprintf (dump_file, "%d ignored edges\n", ignored_edges);
  if (coverage_begin_output ())
    {
      gcov_position_t offset;
      offset = gcov_write_tag (((gcov_unsigned_t)0x01410000));
      for (i = 0; i != (unsigned) (n_basic_blocks + 2); i++)
 gcov_write_unsigned (0);
      gcov_write_length (offset);
    }
  ENTRY_BLOCK_PTR->index = -1;
  EXIT_BLOCK_PTR->index = last_basic_block;
  if (coverage_begin_output ())
    {
      gcov_position_t offset;
      for (bb = ENTRY_BLOCK_PTR; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   edge e;
   offset = gcov_write_tag (((gcov_unsigned_t)0x01430000));
   gcov_write_unsigned (((bb)->index + 1));
   for (e = bb->succ; e; e = e->succ_next)
     {
       struct edge_info *i = ((struct edge_info *) (e)->aux);
       if (!i->ignore)
  {
    unsigned flag_bits = 0;
    if (i->on_tree)
      flag_bits |= (1 << 0);
    if (e->flags & 16)
      flag_bits |= (1 << 1);
    if (e->flags & 1)
      flag_bits |= (1 << 2);
    gcov_write_unsigned (((e->dest)->index + 1));
    gcov_write_unsigned (flag_bits);
         }
     }
   gcov_write_length (offset);
 }
    }
  if (coverage_begin_output () && !ir_type ())
    {
      char const *prev_file_name = ((void *)0);
      gcov_position_t offset;
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   rtx insn = (bb)->head_;
   int ignore_next_note = 0;
   offset = 0;
   insn = prev_nonnote_insn (insn);
   if (!insn)
     insn = get_insns ();
   else
     insn = (((insn)->u.fld[2]).rtx1);
   while (insn != (bb)->end_)
     {
       if (((enum rtx_code) (insn)->code) == NOTE)
  {
    if ((((insn)->u.fld[5]).rtint)
        == NOTE_INSN_REPEATED_LINE_NUMBER)
      ignore_next_note = 1;
    else if ((((insn)->u.fld[5]).rtint) <= 0)
             ;
    else if (ignore_next_note)
      ignore_next_note = 0;
    else
      {
        expanded_location s;
        if (!offset)
   {
     offset = gcov_write_tag (((gcov_unsigned_t)0x01450000));
     gcov_write_unsigned (((bb)->index + 1));
   }
        ((s).file = (((insn)->u.fld[4]).rtstr), (s).line = (((insn)->u.fld[5]).rtint));
        if (!prev_file_name
     || strcmp (s.file, prev_file_name))
   {
     prev_file_name = s.file;
     gcov_write_unsigned (0);
     gcov_write_string (prev_file_name);
   }
        gcov_write_unsigned (s.line);
      }
  }
       insn = (((insn)->u.fld[2]).rtx1);
     }
   if (offset)
     {
       gcov_write_unsigned (0);
       gcov_write_string (((void *)0));
       gcov_write_length (offset);
     }
 }
    }
  ENTRY_BLOCK_PTR->index = (-1);
  EXIT_BLOCK_PTR->index = (-2);
  if (flag_profile_values)
    find_values_to_profile (&n_values, &values);
  if (flag_branch_probabilities)
    {
      compute_branch_probabilities ();
      if (flag_profile_values)
 compute_value_histograms (n_values, values);
    }
  if (profile_arc_flag
      && coverage_counter_alloc (0, num_instrumented))
    {
      unsigned n_instrumented = instrument_edges (el);
      if (n_instrumented != num_instrumented)
 abort ();
      if (flag_profile_values)
 instrument_values (n_values, values);
      if (ir_type ())
 bsi_commit_edge_inserts ((int *)((void *)0));
      else
 {
          commit_edge_insertions_watch_calls ();
   allocate_reg_info (max_reg_num (), 0, 0);
 }
    }
  remove_fake_edges ();
  free_aux_for_edges ();
  if (!ir_type ())
    {
      cleanup_cfg (profile_arc_flag ? 1 : 0);
      if (profile_dump_file())
 dump_flow_info (profile_dump_file());
    }
  free_edge_list (el);
}
static basic_block
find_group (basic_block bb)
{
  basic_block group = bb, bb1;
  while ((basic_block) group->aux != group)
    group = (basic_block) group->aux;
  while ((basic_block) bb->aux != group)
    {
      bb1 = (basic_block) bb->aux;
      bb->aux = (void *) group;
      bb = bb1;
    }
  return group;
}
static void
union_groups (basic_block bb1, basic_block bb2)
{
  basic_block bb1g = find_group (bb1);
  basic_block bb2g = find_group (bb2);
  if (bb1g == bb2g)
    abort ();
  bb1g->aux = bb2g;
}
static void
find_spanning_tree (struct edge_list *el)
{
  int i;
  int num_edges = ((el)->num_edges);
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    bb->aux = bb;
  union_groups (EXIT_BLOCK_PTR, ENTRY_BLOCK_PTR);
  for (i = 0; i < num_edges; i++)
    {
      edge e = ((el)->index_to_edge[(i)]);
      if (((e->flags & (2 | 4 | 16))
    || e->dest == EXIT_BLOCK_PTR)
   && !((struct edge_info *) (e)->aux)->ignore
   && (find_group (e->src) != find_group (e->dest)))
 {
   if (dump_file)
     fprintf (dump_file, "Abnormal edge %d to %d put to tree\n",
       e->src->index, e->dest->index);
   ((struct edge_info *) (e)->aux)->on_tree = 1;
   union_groups (e->src, e->dest);
 }
    }
  for (i = 0; i < num_edges; i++)
    {
      edge e = ((el)->index_to_edge[(i)]);
      if (((e)->src->succ->succ_next && (e)->dest->pred->pred_next) && !((struct edge_info *) (e)->aux)->ignore
   && find_group (e->src) != find_group (e->dest))
 {
   if (dump_file)
     fprintf (dump_file, "Critical edge %d to %d put to tree\n",
       e->src->index, e->dest->index);
   ((struct edge_info *) (e)->aux)->on_tree = 1;
   union_groups (e->src, e->dest);
 }
    }
  for (i = 0; i < num_edges; i++)
    {
      edge e = ((el)->index_to_edge[(i)]);
      if (!((struct edge_info *) (e)->aux)->ignore
   && find_group (e->src) != find_group (e->dest))
 {
   if (dump_file)
     fprintf (dump_file, "Normal edge %d to %d put to tree\n",
       e->src->index, e->dest->index);
   ((struct edge_info *) (e)->aux)->on_tree = 1;
   union_groups (e->src, e->dest);
 }
    }
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    bb->aux = ((void *)0);
}
void
init_branch_prob (void)
{
  int i;
  total_num_blocks = 0;
  total_num_edges = 0;
  total_num_edges_ignored = 0;
  total_num_edges_instrumented = 0;
  total_num_blocks_created = 0;
  total_num_passes = 0;
  total_num_times_called = 0;
  total_num_branches = 0;
  total_num_never_executed = 0;
  for (i = 0; i < 20; i++)
    total_hist_br_prob[i] = 0;
}
void
end_branch_prob (void)
{
  if (dump_file)
    {
      fprintf (dump_file, "\n");
      fprintf (dump_file, "Total number of blocks: %d\n",
        total_num_blocks);
      fprintf (dump_file, "Total number of edges: %d\n", total_num_edges);
      fprintf (dump_file, "Total number of ignored edges: %d\n",
        total_num_edges_ignored);
      fprintf (dump_file, "Total number of instrumented edges: %d\n",
        total_num_edges_instrumented);
      fprintf (dump_file, "Total number of blocks created: %d\n",
        total_num_blocks_created);
      fprintf (dump_file, "Total number of graph solution passes: %d\n",
        total_num_passes);
      if (total_num_times_called != 0)
 fprintf (dump_file, "Average number of graph solution passes: %d\n",
   (total_num_passes + (total_num_times_called >> 1))
   / total_num_times_called);
      fprintf (dump_file, "Total number of branches: %d\n",
        total_num_branches);
      fprintf (dump_file, "Total number of branches never executed: %d\n",
        total_num_never_executed);
      if (total_num_branches)
 {
   int i;
   for (i = 0; i < 10; i++)
     fprintf (dump_file, "%d%% branches in range %d-%d%%\n",
       (total_hist_br_prob[i] + total_hist_br_prob[19-i]) * 100
       / total_num_branches, 5*i, 5*i+5);
 }
    }
}
void
tree_register_profile_hooks (void)
{
  profile_hooks = &tree_profile_hooks;
  if (!ir_type ())
    abort ();
}
void
rtl_register_profile_hooks (void)
{
  profile_hooks = &rtl_profile_hooks;
  if (ir_type ())
    abort ();
}
struct dlist
{
  struct dlist *prev;
  struct dlist *next;
  union
    {
      struct web *web;
      struct move *move;
    } value1;
};
enum node_type
{
  INITIAL = 0, FREE,
  PRECOLORED,
  SIMPLIFY, SIMPLIFY_SPILL, SIMPLIFY_FAT, FREEZE, SPILL,
  SELECT,
  SPILLED, COALESCED, COLORED,
  LAST_NODE_TYPE
};
struct tagged_conflict
{
  struct tagged_conflict *next;
  bitmap conflicts;
  unsigned int size_word;
};
struct web_part
{
  struct ref *ref;
  struct web_part *uplink;
  unsigned int spanned_deaths;
  struct tagged_conflict *sub_conflicts;
  unsigned int crosses_call : 1;
};
struct web
{
  unsigned int id;
  unsigned int regno;
  unsigned int span_deaths;
  unsigned int spill_temp;
  unsigned int orig_spill_temp;
  unsigned long spill_cost;
  unsigned long orig_spill_cost;
  unsigned int num_aliased;
  int color;
  int old_color;
  unsigned int use_my_regs:1;
  unsigned int was_spilled:1;
  unsigned int is_coalesced:1;
  unsigned int artificial:1;
  unsigned int crosses_call:1;
  unsigned int move_related:1;
  unsigned int live_over_abnormal:1;
  unsigned int mode_changed:1;
  unsigned int subreg_stripped:1;
  unsigned int old_web:1;
  unsigned int in_load:1;
  unsigned int one_load:1;
  unsigned int changed:1;
  unsigned int target_of_spilled_move:1;
  unsigned int have_orig_conflicts:1;
  unsigned int type:5;
  unsigned int regclass:10;
  int add_hardregs;
  int num_conflicts;
  unsigned int num_uses;
  unsigned int num_defs;
  rtx orig_x;
  struct web *parent_web;
  struct web *subreg_next;
  struct conflict_link *conflict_list;
  struct conflict_link *orig_conflict_list;
  bitmap useless_conflicts;
  HARD_REG_SET usable_regs;
  HARD_REG_SET orig_usable_regs;
  HARD_REG_SET bias_colors;
  HARD_REG_SET prefer_colors;
  int num_freedom;
  rtx reg_rtx;
  rtx stack_slot;
  rtx last_use_insn;
  rtx pattern;
  struct ref **defs;
  struct ref **uses;
  struct web *alias;
  struct move_list *moves;
  struct dlist *dlink;
  struct df_link *temp_refs;
};
struct web_link
{
  struct web_link *next;
  struct web *web;
};
struct sub_conflict
{
  struct sub_conflict *next;
  struct web *s;
  struct web *t;
};
struct conflict_link
{
  struct conflict_link *next;
  struct web *t;
  struct sub_conflict *sub;
};
enum move_type
{
  WORKLIST, MV_COALESCED, CONSTRAINED, FROZEN, ACTIVE,
  LAST_MOVE_TYPE
};
struct move
{
  rtx insn;
  struct web *source_web;
  struct web *target_web;
  enum move_type type;
  struct dlist *dlink;
};
struct move_list
{
  struct move_list *next;
  struct move *move;
};
struct ra_insn_info
{
  unsigned int num_defs, num_uses;
  struct ref **defs, **uses;
};
extern struct ra_insn_info *insn_df;
extern int insn_df_max_uid;
extern sbitmap igraph;
extern sbitmap sup_igraph;
extern sbitmap insns_with_deaths;
extern int death_insns_max_uid;
extern struct web_part *web_parts;
extern unsigned int num_webs;
extern unsigned int num_subwebs;
extern unsigned int num_allwebs;
extern struct web **id2web;
extern struct web *hardreg2web[53];
extern struct web **def2web;
extern struct web **use2web;
extern struct move_list *wl_moves;
extern short *ra_reg_renumber;
extern int ra_max_regno;
extern struct df *df;
extern bitmap *live_at_end;
extern int ra_pass;
extern unsigned int max_normal_pseudo;
extern int an_unusable_color;
extern int *number_seen;
extern struct dlist *web_lists[(int) LAST_NODE_TYPE];
extern unsigned int last_def_id;
extern unsigned int last_use_id;
extern int last_max_uid;
extern unsigned int last_num_webs;
extern sbitmap last_check_uses;
extern unsigned int remember_conflicts;
extern int orig_max_uid;
extern HARD_REG_SET never_use_colors;
extern HARD_REG_SET usable_regs[((int) LIM_REG_CLASSES)];
extern unsigned int num_free_regs[((int) LIM_REG_CLASSES)];
extern HARD_REG_SET hardregs_for_mode[NUM_MACHINE_MODES];
extern HARD_REG_SET invalid_mode_change_regs;
extern unsigned char byte2bitcount[256];
extern unsigned int debug_new_regalloc;
extern int flag_ra_biased;
extern int flag_ra_improved_spilling;
extern int flag_ra_ir_spilling;
extern int flag_ra_optimistic_coalescing;
extern int flag_ra_break_aliases;
extern int flag_ra_merge_spill_costs;
extern int flag_ra_spill_every_use;
extern int flag_ra_dump_notes;
extern void * ra_alloc (size_t);
extern void * ra_calloc (size_t);
extern int hard_regs_count (HARD_REG_SET);
extern rtx ra_emit_move_insn (rtx, rtx);
extern void ra_debug_msg (unsigned int, const char *, ...) ;
extern int hard_regs_intersect_p (HARD_REG_SET *, HARD_REG_SET *);
extern unsigned int rtx_to_bits (rtx);
extern struct web * find_subweb (struct web *, rtx);
extern struct web * find_subweb_2 (struct web *, unsigned int);
extern struct web * find_web_for_subweb_1 (struct web *);
extern void ra_build_realloc (struct df *);
extern void ra_build_free (void);
extern void ra_build_free_all (struct df *);
extern void ra_colorize_init (void);
extern void ra_colorize_free_all (void);
extern void ra_rewrite_init (void);
extern void ra_print_rtx (FILE *, rtx, int);
extern void ra_print_rtx_top (FILE *, rtx, int);
extern void ra_debug_rtx (rtx);
extern void ra_debug_insns (rtx, int);
extern void ra_debug_bbi (int);
extern void ra_print_rtl_with_bb (FILE *, rtx);
extern void dump_igraph (struct df *);
extern void dump_igraph_machine (void);
extern void dump_constraints (void);
extern void dump_cost (unsigned int);
extern void dump_graph_cost (unsigned int, const char *);
extern void dump_ra (struct df *);
extern void dump_number_seen (void);
extern void dump_static_insn_cost (FILE *, const char *, const char *);
extern void dump_web_conflicts (struct web *);
extern void dump_web_insns (struct web*);
extern int web_conflicts_p (struct web *, struct web *);
extern void debug_hard_reg_set (HARD_REG_SET);
extern void remove_list (struct dlist *, struct dlist **);
extern struct dlist * pop_list (struct dlist **);
extern void record_conflict (struct web *, struct web *);
extern int memref_is_stack_slot (rtx);
extern void build_i_graph (struct df *);
extern void put_web (struct web *, enum node_type);
extern void remove_web_from_list (struct web *);
extern void reset_lists (void);
extern struct web * alias (struct web *);
extern void merge_moves (struct web *, struct web *);
extern void ra_colorize_graph (struct df *);
extern void actual_spill (void);
extern void emit_colors (struct df *);
extern void delete_moves (void);
extern void setup_renumber (int);
extern void remove_suspicious_death_notes (void);
static struct obstack ra_obstack;
static void create_insn_info (struct df *);
static void free_insn_info (void);
static void alloc_mem (struct df *);
static void free_mem (struct df *);
static void free_all_mem (struct df *df);
static int one_pass (struct df *, int);
static void check_df (struct df *);
static void init_ra (void);
void reg_alloc (void);
sbitmap igraph;
sbitmap sup_igraph;
sbitmap insns_with_deaths;
int death_insns_max_uid;
struct web_part *web_parts;
unsigned int num_webs;
unsigned int num_subwebs;
unsigned int num_allwebs;
struct web **id2web;
struct web *hardreg2web[53];
struct web **def2web;
struct web **use2web;
struct move_list *wl_moves;
int ra_max_regno;
short *ra_reg_renumber;
struct df *df;
bitmap *live_at_end;
int ra_pass;
unsigned int max_normal_pseudo;
int an_unusable_color;
struct dlist *web_lists[(int) LAST_NODE_TYPE];
unsigned int last_def_id;
unsigned int last_use_id;
unsigned int last_num_webs;
int last_max_uid;
sbitmap last_check_uses;
unsigned int remember_conflicts;
int orig_max_uid;
HARD_REG_SET never_use_colors;
HARD_REG_SET usable_regs[((int) LIM_REG_CLASSES)];
unsigned int num_free_regs[((int) LIM_REG_CLASSES)];
HARD_REG_SET hardregs_for_mode[NUM_MACHINE_MODES];
HARD_REG_SET invalid_mode_change_regs;
unsigned char byte2bitcount[256];
unsigned int debug_new_regalloc = -1;
int flag_ra_biased = 0;
int flag_ra_improved_spilling = 0;
int flag_ra_ir_spilling = 0;
int flag_ra_optimistic_coalescing = 0;
int flag_ra_break_aliases = 0;
int flag_ra_merge_spill_costs = 0;
int flag_ra_spill_every_use = 0;
int flag_ra_dump_notes = 0;
void *
ra_alloc (size_t size)
{
  return (( ((&ra_obstack))->temp = ((size)), ((((&ra_obstack))->chunk_limit - ((&ra_obstack))->next_free < ((&ra_obstack))->temp) ? (_obstack_newchunk (((&ra_obstack)), ((&ra_obstack))->temp), 0) : 0), (((&ra_obstack))->next_free += (((&ra_obstack))->temp))), ( (((&ra_obstack))->next_free == ((&ra_obstack))->object_base ? ((((&ra_obstack))->maybe_empty_object = 1), 0) : 0), ((&ra_obstack))->temp = ((((&ra_obstack))->object_base) - (char *) 0), ((&ra_obstack))->next_free = (((((((&ra_obstack))->next_free) - (char *) 0)+((&ra_obstack))->alignment_mask) & ~ (((&ra_obstack))->alignment_mask)) + (char *) 0), ((((&ra_obstack))->next_free - (char *) ((&ra_obstack))->chunk > ((&ra_obstack))->chunk_limit - (char *) ((&ra_obstack))->chunk) ? (((&ra_obstack))->next_free = ((&ra_obstack))->chunk_limit) : 0), ((&ra_obstack))->object_base = ((&ra_obstack))->next_free, ((((&ra_obstack))->temp) + (char *) 0)));
}
void *
ra_calloc (size_t size)
{
  void *p = (( ((&ra_obstack))->temp = ((size)), ((((&ra_obstack))->chunk_limit - ((&ra_obstack))->next_free < ((&ra_obstack))->temp) ? (_obstack_newchunk (((&ra_obstack)), ((&ra_obstack))->temp), 0) : 0), (((&ra_obstack))->next_free += (((&ra_obstack))->temp))), ( (((&ra_obstack))->next_free == ((&ra_obstack))->object_base ? ((((&ra_obstack))->maybe_empty_object = 1), 0) : 0), ((&ra_obstack))->temp = ((((&ra_obstack))->object_base) - (char *) 0), ((&ra_obstack))->next_free = (((((((&ra_obstack))->next_free) - (char *) 0)+((&ra_obstack))->alignment_mask) & ~ (((&ra_obstack))->alignment_mask)) + (char *) 0), ((((&ra_obstack))->next_free - (char *) ((&ra_obstack))->chunk > ((&ra_obstack))->chunk_limit - (char *) ((&ra_obstack))->chunk) ? (((&ra_obstack))->next_free = ((&ra_obstack))->chunk_limit) : 0), ((&ra_obstack))->object_base = ((&ra_obstack))->next_free, ((((&ra_obstack))->temp) + (char *) 0)));
  memset (p, 0, size);
  return p;
}
int
hard_regs_count (HARD_REG_SET rs)
{
  int count = 0;
  unsigned int ofs;
  for (ofs = 0; ofs < ((53 + (8 * 4) - 1) / (8 * 4)); ofs++)
    {
      HARD_REG_ELT_TYPE elt = rs[ofs];
      while (elt)
 {
   unsigned char byte = elt & 0xFF;
   elt >>= 8;
   if (byte)
     count += byte2bitcount[byte];
 }
    }
  return count;
}
rtx
ra_emit_move_insn (rtx x, rtx y)
{
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  if (mode_class[mode] == MODE_CC)
    return emit_insn (gen_move_insn (x, y));
  else
    return emit_move_insn (x, y);
}
int insn_df_max_uid;
struct ra_insn_info *insn_df;
static struct ref **refs_for_insn_df;
static void
create_insn_info (struct df *df)
{
  rtx insn;
  struct ref **act_refs;
  insn_df_max_uid = get_max_uid ();
  insn_df = xcalloc (insn_df_max_uid, sizeof (insn_df[0]));
  refs_for_insn_df = xcalloc (df->def_id + df->use_id, sizeof (struct ref *));
  act_refs = refs_for_insn_df;
  for (insn = get_last_insn (); insn; insn = (((insn)->u.fld[1]).rtx1))
    {
      int uid = (((insn)->u.fld[0]).rtint);
      unsigned int n;
      struct df_link *link;
      if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      for (n = 0, link = ((df)->insns[(((insn)->u.fld[0]).rtint)].defs); link; link = link->next)
        if (link->ref
     && (((((((enum rtx_code) ((link->ref)->reg)->code) == SUBREG ? ((((link->ref)->reg)->u.fld[0]).rtx1) : ((link->ref)->reg)))->u.fld[0]).rtuint) >= 53
  || !(!!((never_use_colors)[(((((((enum rtx_code) ((link->ref)->reg)->code) == SUBREG ? ((((link->ref)->reg)->u.fld[0]).rtx1) : ((link->ref)->reg)))->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((((((((enum rtx_code) ((link->ref)->reg)->code) == SUBREG ? ((((link->ref)->reg)->u.fld[0]).rtx1) : ((link->ref)->reg)))->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))))))
                                    ))
   {
     if (n == 0)
       insn_df[uid].defs = act_refs;
     insn_df[uid].defs[n++] = link->ref;
   }
      act_refs += n;
      insn_df[uid].num_defs = n;
      for (n = 0, link = ((df)->insns[(((insn)->u.fld[0]).rtint)].uses); link; link = link->next)
        if (link->ref
     && (((((((enum rtx_code) ((link->ref)->reg)->code) == SUBREG ? ((((link->ref)->reg)->u.fld[0]).rtx1) : ((link->ref)->reg)))->u.fld[0]).rtuint) >= 53
  || !(!!((never_use_colors)[(((((((enum rtx_code) ((link->ref)->reg)->code) == SUBREG ? ((((link->ref)->reg)->u.fld[0]).rtx1) : ((link->ref)->reg)))->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((((((((enum rtx_code) ((link->ref)->reg)->code) == SUBREG ? ((((link->ref)->reg)->u.fld[0]).rtx1) : ((link->ref)->reg)))->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))))))
                                    ))
   {
     if (n == 0)
       insn_df[uid].uses = act_refs;
     insn_df[uid].uses[n++] = link->ref;
   }
      act_refs += n;
      insn_df[uid].num_uses = n;
    }
  if (refs_for_insn_df + (df->def_id + df->use_id) < act_refs)
    abort ();
}
static void
free_insn_info (void)
{
  free (refs_for_insn_df);
  refs_for_insn_df = ((void *)0);
  free (insn_df);
  insn_df = ((void *)0);
  insn_df_max_uid = 0;
}
struct web *
find_subweb (struct web *web, rtx reg)
{
  struct web *w;
  if (((enum rtx_code) (reg)->code) != SUBREG)
    abort ();
  for (w = web->subreg_next; w; w = w->subreg_next)
    if (((enum machine_mode) (w->orig_x)->mode) == ((enum machine_mode) (reg)->mode)
 && (((w->orig_x)->u.fld[1]).rtuint) == (((reg)->u.fld[1]).rtuint))
      return w;
  return ((void *)0);
}
struct web *
find_subweb_2 (struct web *web, unsigned int size_word)
{
  struct web *w = web;
  if (size_word == ((unsigned short) mode_size[((enum machine_mode) (web->orig_x)->mode)]))
    return web;
  for (w = web->subreg_next; w; w = w->subreg_next)
    {
      unsigned int bl = rtx_to_bits (w->orig_x);
      if (size_word == bl)
        return w;
    }
  return ((void *)0);
}
struct web *
find_web_for_subweb_1 (struct web *subweb)
{
  while (subweb->parent_web)
    subweb = subweb->parent_web;
  return subweb;
}
int
hard_regs_intersect_p (HARD_REG_SET *a, HARD_REG_SET *b)
{
  HARD_REG_SET c;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (c), *scan_fp_ = (*a); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (c), *scan_fp_ = (*b); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_xp_ = (c), *scan_yp_ = (reg_class_contents[(int) NO_REGS]); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto lose; } while (0);
  return 1;
lose:
  return 0;
}
static void
alloc_mem (struct df *df)
{
  int i;
  ra_build_realloc (df);
  if (!live_at_end)
    {
      live_at_end = xmalloc ((last_basic_block + 2) * sizeof (bitmap));
      for (i = 0; i < last_basic_block + 2; i++)
 live_at_end[i] = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      live_at_end += 2;
    }
  create_insn_info (df);
}
static void
free_mem (struct df *df )
{
  free_insn_info ();
  ra_build_free ();
}
static void
free_all_mem (struct df *df)
{
  unsigned int i;
  live_at_end -= 2;
  for (i = 0; i < (unsigned)last_basic_block + 2; i++)
    do { if (live_at_end[i]) { bitmap_clear (live_at_end[i]); free (live_at_end[i]); (live_at_end[i]) = 0; } } while (0);
  free (live_at_end);
  ra_colorize_free_all ();
  ra_build_free_all (df);
  ( (&ra_obstack)->temp = (char *) (((void *)0)) - (char *) (&ra_obstack)->chunk, (((&ra_obstack)->temp > 0 && (&ra_obstack)->temp < (&ra_obstack)->chunk_limit - (char *) (&ra_obstack)->chunk) ? (int) ((&ra_obstack)->next_free = (&ra_obstack)->object_base = (&ra_obstack)->temp + (char *) (&ra_obstack)->chunk) : (((obstack_free) ((&ra_obstack), (&ra_obstack)->temp + (char *) (&ra_obstack)->chunk), 0), 0)));
}
static long ticks_build;
static long ticks_rebuild;
static int
one_pass (struct df *df, int rebuild)
{
  long ticks = clock ();
  int something_spilled;
  remember_conflicts = 0;
  build_i_graph (df);
  remember_conflicts = 1;
  if (!rebuild)
    dump_igraph_machine ();
  ra_colorize_graph (df);
  last_max_uid = get_max_uid ();
  something_spilled = !!(web_lists[(int)(SPILLED)]);
  if (something_spilled)
    actual_spill ();
  ticks = clock () - ticks;
  if (rebuild)
    ticks_rebuild += ticks;
  else
    ticks_build += ticks;
  return something_spilled;
}
static void
init_ra (void)
{
  int i;
  HARD_REG_SET rs;
  static const struct {const int from, to; } eliminables[] = {{ 16, 7}, { 16, 6}, { 20, 7}, { 20, 6}};
  unsigned int j;
  int need_fp
    = (! flag_omit_frame_pointer
       || ((cfun->calls_alloca) && 1)
       || ix86_frame_pointer_required ());
  ra_colorize_init ();
  do { HARD_REG_ELT_TYPE *scan_tp_ = (never_use_colors), *scan_fp_ = (fixed_reg_set); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  for (j = 0; j < (sizeof (eliminables) / sizeof ((eliminables)[0])); j++)
    {
      if (! ((eliminables[j].to) == 7 ? ! frame_pointer_needed : 1)
   || (eliminables[j].to == 7 && need_fp))
 for (i = hard_regno_nregs[eliminables[j].from][(0 ? DImode : SImode)]; i--;)
   ((never_use_colors)[(eliminables[j].from + i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((eliminables[j].from + i) % ((unsigned) (8 * 4))));
    }
  if (need_fp)
    for (i = hard_regno_nregs[6][(0 ? DImode : SImode)]; i--;)
      ((never_use_colors)[(6 + i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((6 + i) % ((unsigned) (8 * 4))));
  for (i = hard_regno_nregs[7][(0 ? DImode : SImode)]; i--;)
    ((never_use_colors)[(7 + i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((7 + i) % ((unsigned) (8 * 4))));
  for (i = hard_regno_nregs[16][(0 ? DImode : SImode)]; i--;)
    ((never_use_colors)[(16 + i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((16 + i) % ((unsigned) (8 * 4))));
  for (i = 0; i < 256; i++)
    {
      unsigned char byte = ((unsigned) i) & 0xFF;
      unsigned char count = 0;
      while (byte)
 {
   if (byte & 1)
     count++;
   byte >>= 1;
 }
      byte2bitcount[i] = count;
    }
  for (i = 0; i < ((int) LIM_REG_CLASSES); i++)
    {
      int size;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (rs), *scan_fp_ = (reg_class_contents[i]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (rs), *scan_fp_ = (never_use_colors); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
      size = hard_regs_count (rs);
      num_free_regs[i] = size;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (usable_regs[i]), *scan_fp_ = (rs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
    }
  for (i = 0; i < NUM_MACHINE_MODES; i++)
    {
      int reg, size;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (rs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      for (reg = 0; reg < 53; reg++)
 if (ix86_hard_regno_mode_ok ((reg), (i))
     && (size = hard_regno_nregs[reg][i]) != 0
     && (reg + size) <= 53)
   {
     while (size--)
       ((rs)[(reg + size) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((reg + size) % ((unsigned) (8 * 4))));
   }
      do { HARD_REG_ELT_TYPE *scan_tp_ = (hardregs_for_mode[i]), *scan_fp_ = (rs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (invalid_mode_change_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if (0)
  for (i = 0; i < NUM_MACHINE_MODES; i++)
    {
      enum machine_mode from = (enum machine_mode) i;
      enum machine_mode to;
      for (to = VOIDmode; to < MAX_MACHINE_MODE; ++to)
 {
   int r;
   for (r = 0; r < 53; r++)
     if ((((unsigned short) mode_size[r]) < ((unsigned short) mode_size[to]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, ((regclass_map[from]))) || reg_classes_intersect_p (MMX_REGS, ((regclass_map[from]))) : ((unsigned short) mode_size[to]) != ((unsigned short) mode_size[r]) ? reg_classes_intersect_p (FLOAT_REGS, ((regclass_map[from]))) : 0))
       ((invalid_mode_change_regs)[(r) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((r) % ((unsigned) (8 * 4))));
 }
    }
  for (an_unusable_color = 0; an_unusable_color < 53;
       an_unusable_color++)
    if ((!!((never_use_colors)[(an_unusable_color) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((an_unusable_color) % ((unsigned) (8 * 4)))))))
      break;
  if (an_unusable_color == 53)
    abort ();
  orig_max_uid = get_max_uid ();
  compute_bb_for_insn ();
  ra_reg_renumber = ((void *)0);
  insns_with_deaths = sbitmap_alloc (orig_max_uid);
  death_insns_max_uid = orig_max_uid;
  sbitmap_ones (insns_with_deaths);
  _obstack_begin ((&ra_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
}
static void
check_df (struct df *df)
{
  struct df_link *link;
  rtx insn;
  int regno;
  unsigned int ui;
  bitmap b = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  bitmap empty_defs = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  bitmap empty_uses = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (ui = 0; ui < df->def_id; ui++)
    if (!df->defs[ui])
      bitmap_set_bit (empty_defs, ui);
  for (ui = 0; ui < df->use_id; ui++)
    if (!df->uses[ui])
      bitmap_set_bit (empty_uses, ui);
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      {
 bitmap_clear (b);
 for (link = ((df)->insns[(((insn)->u.fld[0]).rtint)].defs); link; link = link->next)
   if (!link->ref || bitmap_bit_p (empty_defs, ((link->ref)->id))
       || bitmap_bit_p (b, ((link->ref)->id)))
     abort ();
   else
     bitmap_set_bit (b, ((link->ref)->id));
 bitmap_clear (b);
 for (link = ((df)->insns[(((insn)->u.fld[0]).rtint)].uses); link; link = link->next)
   if (!link->ref || bitmap_bit_p (empty_uses, ((link->ref)->id))
       || bitmap_bit_p (b, ((link->ref)->id)))
     abort ();
   else
     bitmap_set_bit (b, ((link->ref)->id));
      }
  for (regno = 0; regno < max_reg_num (); regno++)
    {
      bitmap_clear (b);
      for (link = df->regs[regno].defs; link; link = link->next)
 if (!link->ref || bitmap_bit_p (empty_defs, ((link->ref)->id))
     || bitmap_bit_p (b, ((link->ref)->id)))
   abort ();
 else
   bitmap_set_bit (b, ((link->ref)->id));
      bitmap_clear (b);
      for (link = df->regs[regno].uses; link; link = link->next)
 if (!link->ref || bitmap_bit_p (empty_uses, ((link->ref)->id))
     || bitmap_bit_p (b, ((link->ref)->id)))
   abort ();
 else
   bitmap_set_bit (b, ((link->ref)->id));
    }
  do { if (empty_uses) { bitmap_clear (empty_uses); free (empty_uses); (empty_uses) = 0; } } while (0);
  do { if (empty_defs) { bitmap_clear (empty_defs); free (empty_defs); (empty_defs) = 0; } } while (0);
  do { if (b) { bitmap_clear (b); free (b); (b) = 0; } } while (0);
}
void
reg_alloc (void)
{
  int changed;
  FILE *ra_dump_file = dump_file;
  rtx last = get_last_insn ();
  if (! ((((enum rtx_code) (last)->code) == INSN) || (((enum rtx_code) (last)->code) == JUMP_INSN) || (((enum rtx_code) (last)->code) == CALL_INSN)))
    last = prev_real_insn (last);
  if (last)
    {
      edge e;
      for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
 {
   basic_block bb = e->src;
   last = (bb)->end_;
   if (!((((enum rtx_code) (last)->code) == INSN) || (((enum rtx_code) (last)->code) == JUMP_INSN) || (((enum rtx_code) (last)->code) == CALL_INSN)) || ((enum rtx_code) ((((last)->u.fld[5]).rtx1))->code) != USE)
     {
       rtx insns;
       start_sequence ();
       use_return_register ();
       insns = get_insns ();
       end_sequence ();
       emit_insn_after (insns, last);
     }
 }
    }
  switch (0)
    {
      case 0: debug_new_regalloc = ((unsigned int)-1); break;
      case 1: debug_new_regalloc = 0x0001; break;
      case 2: debug_new_regalloc = 0x10000; break;
      case 3: debug_new_regalloc = 0x0010 + 0x0001; break;
      case 4: debug_new_regalloc = 0x0010 + 0x0001 + 0x0002;
       break;
      case 5: debug_new_regalloc = 0x0400 + 0x0001 +
       0x0040;
       break;
      case 6: debug_new_regalloc = 0x20000; break;
    }
  if (!dump_file)
    debug_new_regalloc = 0;
  if ((debug_new_regalloc & 0x0800) == 0)
    dump_file = ((void *)0);
  regclass (get_insns (), max_reg_num (), dump_file);
  dump_file = ra_dump_file;
  count_or_remove_death_notes (((void *)0), 1);
  init_ra ();
  ra_pass = 0;
  no_new_pseudos = 0;
  max_normal_pseudo = (unsigned) max_reg_num ();
  ra_rewrite_init ();
  last_def_id = 0;
  last_use_id = 0;
  last_num_webs = 0;
  last_max_uid = 0;
  last_check_uses = ((void *)0);
  live_at_end = ((void *)0);
  (web_lists[(int)(INITIAL)]) = ((void *)0);
  (web_lists[(int)(FREE)]) = ((void *)0);
  memset (hardreg2web, 0, sizeof (hardreg2web));
  ticks_build = ticks_rebuild = 0;
  flag_ra_biased = 0;
  flag_ra_spill_every_use = 0;
  flag_ra_improved_spilling = 1;
  flag_ra_ir_spilling = 1;
  flag_ra_break_aliases = 0;
  flag_ra_optimistic_coalescing = 1;
  flag_ra_merge_spill_costs = 1;
  if (flag_ra_optimistic_coalescing)
    flag_ra_break_aliases = 1;
  flag_ra_dump_notes = 0;
  df = df_init ();
  do
    {
      ra_debug_msg ((((unsigned int)-1) - 0x0001 - 0x10000), "RegAlloc Pass %d\n\n", ra_pass);
      if (ra_pass++ > 40)
 internal_error ("Didn't find a coloring.\n");
      df_analyze (df, (ra_pass == 1) ? 0 : (bitmap) -1,
    1024 | 64 | 128 | 4096);
      if ((debug_new_regalloc & 0x0100) != 0)
 {
   rtx insn;
   df_dump (df, 1024, dump_file);
   for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
            if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
       df_insn_debug_regno (df, insn, dump_file);
 }
      check_df (df);
      alloc_mem (df);
      changed = one_pass (df, ra_pass > 1);
      if (!changed)
 {
          emit_colors (df);
   setup_renumber (0);
   delete_moves ();
   dump_constraints ();
 }
      else
 {
   if ((debug_new_regalloc & 0x0800) == 0)
     dump_file = ((void *)0);
   allocate_reg_info (max_reg_num (), 0, 0);
   compute_bb_for_insn ();
   delete_trivially_dead_insns (get_insns (), max_reg_num ());
   reg_scan_update (get_insns (), ((void *)0), max_regno);
   max_regno = max_reg_num ();
   regclass (get_insns (), max_reg_num (), dump_file);
   dump_file = ra_dump_file;
   last_def_id = df->def_id;
   last_use_id = df->use_id;
 }
      dump_ra (df);
      if (changed && (debug_new_regalloc & 0x0200) != 0)
 {
   ra_print_rtl_with_bb (dump_file, get_insns ());
   fflush (dump_file);
 }
      reset_lists ();
      free_mem (df);
    }
  while (changed);
  free_all_mem (df);
  df_finish (df);
  if ((debug_new_regalloc & 0x0080) == 0)
    dump_cost (0x0001);
  ra_debug_msg (0x0001, "ticks for build-phase: %ld\n", ticks_build);
  ra_debug_msg (0x0001, "ticks for rebuild-phase: %ld\n", ticks_rebuild);
  if ((debug_new_regalloc & (0x0400 | 0x0200)) != 0)
    ra_print_rtl_with_bb (dump_file, get_insns ());
  if ((debug_new_regalloc & 0x1000) == 0)
    dump_file = ((void *)0);
  no_new_pseudos = 0;
  allocate_reg_info (max_reg_num (), 0, 0);
  no_new_pseudos = 1;
  dump_file = ra_dump_file;
  fixup_abnormal_edges ();
  if ((debug_new_regalloc & 0x2000) == 0)
    dump_file = ((void *)0);
  life_analysis (dump_file,
   1 | 2 | 4);
  cleanup_cfg (1);
  recompute_reg_usage (get_insns (), 1);
  if (dump_file)
    dump_flow_info (dump_file);
  dump_file = ra_dump_file;
  setup_renumber (1);
  free(insns_with_deaths);
  remove_suspicious_death_notes ();
  if ((debug_new_regalloc & 0x4000) != 0)
    ra_print_rtl_with_bb (dump_file, get_insns ());
  dump_static_insn_cost (dump_file,
    "after allocation/spilling, before reload", ((void *)0));
  ((reg_equiv_memory_loc_varray) = varray_grow (reg_equiv_memory_loc_varray, max_regno));
  reg_equiv_memory_loc = &((reg_equiv_memory_loc_varray)->data.rtx1[0]);
  allocate_initial_values (reg_equiv_memory_loc);
  regclass (get_insns (), max_reg_num (), dump_file);
}
struct curr_use;
static unsigned long rtx_to_undefined (rtx);
static bitmap find_sub_conflicts (struct web_part *, unsigned int);
static bitmap get_sub_conflicts (struct web_part *, unsigned int);
static unsigned int undef_to_size_word (rtx, unsigned long *);
static bitmap undef_to_bitmap (struct web_part *,
          unsigned long *);
static struct web_part * find_web_part_1 (struct web_part *);
static struct web_part * union_web_part_roots
    (struct web_part *, struct web_part *);
static int defuse_overlap_p_1 (rtx, struct curr_use *);
static int live_out_1 (struct df *, struct curr_use *, rtx);
static int live_out (struct df *, struct curr_use *, rtx);
static rtx live_in_edge ( struct df *, struct curr_use *, edge);
static void live_in (struct df *, struct curr_use *, rtx);
static int copy_insn_p (rtx, rtx *, rtx *);
static void remember_move (rtx);
static void handle_asm_insn (struct df *, rtx);
static void prune_hardregs_for_mode (HARD_REG_SET *, enum machine_mode);
static void init_one_web_common (struct web *, rtx);
static void init_one_web (struct web *, rtx);
static void reinit_one_web (struct web *, rtx);
static struct web * add_subweb (struct web *, rtx);
static struct web * add_subweb_2 (struct web *, unsigned int);
static void init_web_parts (struct df *);
static void copy_conflict_list (struct web *);
static void add_conflict_edge (struct web *, struct web *);
static void build_inverse_webs (struct web *);
static void copy_web (struct web *, struct web_link **);
static void compare_and_free_webs (struct web_link **);
static void init_webs_defs_uses (void);
static unsigned int parts_to_webs_1 (struct df *, struct web_link **,
         struct df_link *);
static void parts_to_webs (struct df *);
static void reset_conflicts (void);
static void conflicts_between_webs (struct df *);
static void remember_web_was_spilled (struct web *);
static void detect_spill_temps (void);
static int contains_pseudo (rtx);
static int want_to_remat (rtx x);
static void detect_remat_webs (void);
static void determine_web_costs (void);
static void detect_webs_set_in_cond_jump (void);
static void make_webs (struct df *);
static void moves_to_webs (struct df *);
static void connect_rmw_web_parts (struct df *);
static void update_regnos_mentioned (void);
static void livethrough_conflicts_bb (basic_block);
static void init_bb_info (void);
static void free_bb_info_ra (void);
static void build_web_parts_and_conflicts (struct df *);
static sbitmap live_over_abnormal;
static unsigned int visited_pass;
static sbitmap move_handled;
struct visit_trace
{
  struct web_part *wp;
  unsigned long undefined;
};
static struct visit_trace *visit_trace;
struct ra_bb_info
{
  unsigned int pass;
  unsigned long undefined;
  bitmap regnos_mentioned;
  bitmap live_throughout;
  void *old_aux;
};
unsigned int
rtx_to_bits (rtx x)
{
  unsigned int len, beg;
  len = ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]);
  beg = (((enum rtx_code) (x)->code) == SUBREG) ? (((x)->u.fld[1]).rtuint) : 0;
  return ((((beg) & 0xFFFF) << 16) | ((len) & 0xFFFF));
}
static unsigned long
rtx_to_undefined (rtx x)
{
  unsigned int len, beg;
  unsigned long ret;
  len = ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]);
  beg = (((enum rtx_code) (x)->code) == SUBREG) ? (((x)->u.fld[1]).rtuint) : 0;
  ret = ~ ((unsigned long) 0);
  ret = (~(ret << len)) << beg;
  return ret;
}
struct copy_p_cache
{
  int seen;
  rtx source;
  rtx target;
};
static struct copy_p_cache * copy_cache;
int *number_seen;
static int
copy_insn_p (rtx insn, rtx *source, rtx *target)
{
  rtx d, s;
  unsigned int d_regno, s_regno;
  int uid = (((insn)->u.fld[0]).rtint);
  if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    abort ();
  if (copy_cache[uid].seen)
    {
      if (copy_cache[uid].seen == 1)
 {
   if (source)
     *source = copy_cache[uid].source;
   if (target)
     *target = copy_cache[uid].target;
   return 1;
 }
      return 0;
    }
  copy_cache[uid].seen = 2;
  insn = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (!insn)
    return 0;
  d = (((insn)->u.fld[0]).rtx1);
  s = (((insn)->u.fld[1]).rtx1);
  while (((enum rtx_code) (d)->code) == STRICT_LOW_PART)
    d = (((d)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (d)->code) == REG)
      && (((enum rtx_code) (d)->code) != SUBREG || !(((enum rtx_code) ((((d)->u.fld[0]).rtx1))->code) == REG)))
    return 0;
  while (((enum rtx_code) (s)->code) == STRICT_LOW_PART)
    s = (((s)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (s)->code) == REG)
      && (((enum rtx_code) (s)->code) != SUBREG || !(((enum rtx_code) ((((s)->u.fld[0]).rtx1))->code) == REG)))
    return 0;
  s_regno = (unsigned) (((((enum rtx_code) (s)->code) == SUBREG ? (((s)->u.fld[0]).rtx1) : s)->u.fld[0]).rtuint);
  d_regno = (unsigned) (((((enum rtx_code) (d)->code) == SUBREG ? (((d)->u.fld[0]).rtx1) : d)->u.fld[0]).rtuint);
  if ((s_regno < 53
       && d_regno < 53)
      || s_regno >= max_normal_pseudo
      || d_regno >= max_normal_pseudo)
    return 0;
  if (source)
    *source = s;
  if (target)
    *target = d;
  copy_cache[uid].seen = 1;
  copy_cache[uid].source = s;
  copy_cache[uid].target = d;
  return 1;
}
static bitmap
find_sub_conflicts (struct web_part *wp, unsigned int size_word)
{
  struct tagged_conflict *cl;
  cl = wp->sub_conflicts;
  for (; cl; cl = cl->next)
    if (cl->size_word == size_word)
      return cl->conflicts;
  return ((void *)0);
}
static bitmap
get_sub_conflicts (struct web_part *wp, unsigned int size_word)
{
  bitmap b = find_sub_conflicts (wp, size_word);
  if (!b)
    {
      struct tagged_conflict *cl = ra_alloc (sizeof *cl);
      cl->conflicts = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      cl->size_word = size_word;
      cl->next = wp->sub_conflicts;
      wp->sub_conflicts = cl;
      b = cl->conflicts;
    }
  return b;
}
static struct undef_table_s {
  unsigned int new_undef;
  unsigned int size_word;
} const undef_table [] = {
  { 0, ((((0) & 0xFFFF) << 16) | ((0) & 0xFFFF))},
  { 0, ((((0) & 0xFFFF) << 16) | ((1) & 0xFFFF))},
  { 0, ((((1) & 0xFFFF) << 16) | ((1) & 0xFFFF))},
  { 0, ((((0) & 0xFFFF) << 16) | ((2) & 0xFFFF))},
  { 0, ((((2) & 0xFFFF) << 16) | ((1) & 0xFFFF))},
  { 1, ((((2) & 0xFFFF) << 16) | ((1) & 0xFFFF))},
  { 2, ((((2) & 0xFFFF) << 16) | ((1) & 0xFFFF))},
  { 3, ((((2) & 0xFFFF) << 16) | ((1) & 0xFFFF))},
  { 0, ((((3) & 0xFFFF) << 16) | ((1) & 0xFFFF))},
  { 1, ((((3) & 0xFFFF) << 16) | ((1) & 0xFFFF))},
  { 2, ((((3) & 0xFFFF) << 16) | ((1) & 0xFFFF))},
  { 3, ((((3) & 0xFFFF) << 16) | ((1) & 0xFFFF))},
  { 0, ((((2) & 0xFFFF) << 16) | ((2) & 0xFFFF))},
  { 1, ((((2) & 0xFFFF) << 16) | ((2) & 0xFFFF))},
  { 2, ((((2) & 0xFFFF) << 16) | ((2) & 0xFFFF))},
  { 0, ((((0) & 0xFFFF) << 16) | ((4) & 0xFFFF))}};
static unsigned int
undef_to_size_word (rtx reg, unsigned long *undefined)
{
  if (*undefined <= 15)
    {
      struct undef_table_s u;
      u = undef_table[*undefined];
      *undefined = u.new_undef;
      return u.size_word;
    }
  if (*undefined <= 0xffff)
    switch ((int) *undefined)
      {
      case 0x00f0 : *undefined = 0; return ((((4) & 0xFFFF) << 16) | ((4) & 0xFFFF));
      case 0x00ff : *undefined = 0; return ((((0) & 0xFFFF) << 16) | ((8) & 0xFFFF));
      case 0x0f00 : *undefined = 0; return ((((8) & 0xFFFF) << 16) | ((4) & 0xFFFF));
      case 0x0ff0 : *undefined = 0xf0; return ((((8) & 0xFFFF) << 16) | ((4) & 0xFFFF));
      case 0x0fff :
 if ((mode_class[((enum machine_mode) (reg)->mode)] == MODE_INT || mode_class[((enum machine_mode) (reg)->mode)] == MODE_PARTIAL_INT || mode_class[((enum machine_mode) (reg)->mode)] == MODE_COMPLEX_INT || mode_class[((enum machine_mode) (reg)->mode)] == MODE_VECTOR_INT))
   { *undefined = 0xff; return ((((8) & 0xFFFF) << 16) | ((4) & 0xFFFF)); }
 else
   { *undefined = 0; return ((((0) & 0xFFFF) << 16) | ((12) & 0xFFFF)); }
      case 0xf000 : *undefined = 0; return ((((12) & 0xFFFF) << 16) | ((4) & 0xFFFF));
      case 0xff00 : *undefined = 0; return ((((8) & 0xFFFF) << 16) | ((8) & 0xFFFF));
      case 0xfff0 : *undefined = 0xf0; return ((((8) & 0xFFFF) << 16) | ((8) & 0xFFFF));
      case 0xffff : *undefined = 0; return ((((0) & 0xFFFF) << 16) | ((16) & 0xFFFF));
      }
  {
    unsigned long u = *undefined;
    int word;
    struct undef_table_s tab;
    for (word = 0; (u & 15) == 0; word += 4)
      u >>= 4;
    u = u & 15;
    tab = undef_table[u];
    u = tab.new_undef;
    u = (*undefined & ~((unsigned long)15 << word)) | (u << word);
    *undefined = u;
    return tab.size_word + ((((word) & 0xFFFF) << 16) | ((0) & 0xFFFF));
  }
}
static bitmap
undef_to_bitmap (struct web_part *wp, unsigned long *undefined)
{
  unsigned int size_word = undef_to_size_word ((((enum rtx_code) ((wp->ref)->reg)->code) == SUBREG ? ((((wp->ref)->reg)->u.fld[0]).rtx1) : ((wp->ref)->reg)),
            undefined);
  return get_sub_conflicts (wp, size_word);
}
static struct web_part *
find_web_part_1 (struct web_part *p)
{
  struct web_part *r = p;
  struct web_part *p_next;
  while (r->uplink)
    r = r->uplink;
  for (; p != r; p = p_next)
    {
      p_next = p->uplink;
      p->uplink = r;
    }
  return r;
}
static struct web_part *
union_web_part_roots (struct web_part *r1, struct web_part *r2)
{
  if (r1 != r2)
    {
      if (r1 > r2)
 {
   struct web_part *h = r1;
   r1 = r2;
   r2 = h;
 }
      r2->uplink = r1;
      num_webs--;
      r1->spanned_deaths += r2->spanned_deaths;
      if (!r1->sub_conflicts)
 r1->sub_conflicts = r2->sub_conflicts;
      else if (r2->sub_conflicts)
 {
   struct tagged_conflict *cl1, *cl2;
   for (cl1 = r1->sub_conflicts; cl1; cl1 = cl1->next)
     for (cl2 = r2->sub_conflicts; cl2; cl2 = cl2->next)
       if (cl1->size_word == cl2->size_word)
  {
    bitmap_operation (cl1->conflicts, cl1->conflicts,
        cl2->conflicts, BITMAP_IOR);
    do { if (cl2->conflicts) { bitmap_clear (cl2->conflicts); free (cl2->conflicts); (cl2->conflicts) = 0; } } while (0);
    cl2->conflicts = ((void *)0);
  }
   for (cl2 = r2->sub_conflicts; cl2;)
     {
       struct tagged_conflict *cl_next = cl2->next;
       if (cl2->conflicts)
  {
    cl2->next = r1->sub_conflicts;
    r1->sub_conflicts = cl2;
  }
       cl2 = cl_next;
     }
 }
      r2->sub_conflicts = ((void *)0);
      r1->crosses_call |= r2->crosses_call;
    }
  return r1;
}
static void
remember_move (rtx insn)
{
  if (!((move_handled)->elms [((((insn)->u.fld[0]).rtint)) / ((unsigned) (8 * 4))] >> ((((insn)->u.fld[0]).rtint)) % ((unsigned) (8 * 4)) & 1))
    {
      rtx s, d;
      ((move_handled)->elms [((((insn)->u.fld[0]).rtint)) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << ((((insn)->u.fld[0]).rtint)) % ((unsigned) (8 * 4)));
      if (copy_insn_p (insn, &s, &d))
 {
   struct df_link *slink = ((df)->insns[(((insn)->u.fld[0]).rtint)].uses);
   struct df_link *link = ((df)->insns[(((insn)->u.fld[0]).rtint)].defs);
   if (!link || !link->ref || !slink || !slink->ref)
     abort ();
   if (link->next
       && ((((((enum rtx_code) ((link->next->ref)->reg)->code) == SUBREG ? ((((link->next->ref)->reg)->u.fld[0]).rtx1) : ((link->next->ref)->reg)))->u.fld[0]).rtuint) >= 53)
     abort ();
 }
      else
 abort ();
      if ((((enum rtx_code) (s)->code) == REG) && (((enum rtx_code) (d)->code) == REG))
 {
   struct move *m = ra_calloc (sizeof (struct move));
   struct move_list *ml;
   m->insn = insn;
   ml = ra_alloc (sizeof (struct move_list));
   ml->move = m;
   ml->next = wl_moves;
   wl_moves = ml;
 }
    }
}
struct curr_use {
  struct web_part *wp;
  unsigned long undefined;
  unsigned int regno;
  rtx x;
  unsigned int live_over_abnormal;
};
static int
defuse_overlap_p_1 (rtx def, struct curr_use *use)
{
  int mode = 0;
  if (def == use->x)
    return 1;
  if (!def)
    return 0;
  if (((enum rtx_code) (def)->code) == SUBREG)
    {
      if (((((((def)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != use->regno)
 return 0;
      mode |= 1;
    }
  else if ((((def)->u.fld[0]).rtuint) != use->regno)
    return 0;
  if (((enum rtx_code) (use->x)->code) == SUBREG)
    mode |= 2;
  switch (mode)
    {
      case 0:
 return 1;
      case 1:
 {
   unsigned long old_u = use->undefined;
   use->undefined &= ~ rtx_to_undefined (def);
   return (old_u != use->undefined) ? 2 : -1;
 }
      case 2:
 return 3;
      case 3:
 if (((unsigned short) mode_size[((enum machine_mode) (def)->mode)]) == ((unsigned short) mode_size[((enum machine_mode) (use->x)->mode)]))
   if ((((def)->u.fld[1]).rtuint) == (((use->x)->u.fld[1]).rtuint))
     return 1;
 {
   unsigned long old_u;
   int b1, e1, b2, e2;
   unsigned int bl1, bl2;
   bl1 = rtx_to_bits (def);
   bl2 = rtx_to_bits (use->x);
   b1 = (((unsigned int)(bl1) >> 16) & 0xFFFF);
   b2 = (((unsigned int)(bl2) >> 16) & 0xFFFF);
   e1 = b1 + ((unsigned int)(bl1) & 0xFFFF) - 1;
   e2 = b2 + ((unsigned int)(bl2) & 0xFFFF) - 1;
   if (b1 > e2 || b2 > e1)
     return -1;
   old_u = use->undefined;
   use->undefined &= ~ rtx_to_undefined (def);
   return (old_u != use->undefined) ? 4 : -1;
 }
      default:
        abort ();
    }
}
static int
live_out_1 (struct df *df , struct curr_use *use, rtx insn)
{
  int defined = 0;
  int uid = (((insn)->u.fld[0]).rtint);
  struct web_part *wp = use->wp;
  visit_trace[uid].wp = wp;
  visit_trace[uid].undefined = use->undefined;
  if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    {
      unsigned int source_regno = ~0;
      unsigned int regno = use->regno;
      unsigned long orig_undef = use->undefined;
      unsigned long final_undef = use->undefined;
      rtx s = ((void *)0);
      unsigned int n, num_defs = insn_df[uid].num_defs;
      struct ref **defs = insn_df[uid].defs;
      wp = ((! (wp)->uplink) ? (wp) : (! (wp)->uplink->uplink) ? (wp)->uplink : find_web_part_1 (wp));
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 wp->crosses_call = 1;
      else if (copy_insn_p (insn, &s, ((void *)0)))
 source_regno = (((((enum rtx_code) (s)->code) == SUBREG ? (((s)->u.fld[0]).rtx1) : s)->u.fld[0]).rtuint);
      for (n = 0; n < num_defs; n++)
 {
   struct ref *ref = defs[n];
   int lap;
   use->undefined = orig_undef;
   if ((lap = ((((ref)->reg)) == (use)->x ? 1 : ((((((enum rtx_code) (((ref)->reg))->code) == SUBREG ? (((((ref)->reg))->u.fld[0]).rtx1) : ((ref)->reg))->u.fld[0]).rtuint) != use->regno ? 0 : defuse_overlap_p_1 (((ref)->reg), use)))) != 0)
     {
       if (lap == -1)
  {
    unsigned long undef;
    undef = use->undefined;
    while (undef)
      bitmap_set_bit (undef_to_bitmap (wp, &undef),
        ((ref)->id));
    continue;
  }
       if ((lap & 1) != 0)
  defined = 1;
       else
  {
    final_undef &= use->undefined;
    if (final_undef == 0)
      defined = 1;
  }
       wp = ((wp == &web_parts[((ref)->id)]) ? ((! (wp)->uplink) ? (wp) : (! (wp)->uplink->uplink) ? (wp)->uplink : find_web_part_1 (wp)) : union_web_part_roots (((! (wp)->uplink) ? (wp) : (! (wp)->uplink->uplink) ? (wp)->uplink : find_web_part_1 (wp)), ((! (&web_parts[((ref)->id)])->uplink) ? (&web_parts[((ref)->id)]) : (! (&web_parts[((ref)->id)])->uplink->uplink) ? (&web_parts[((ref)->id)])->uplink : find_web_part_1 (&web_parts[((ref)->id)]))));
     }
   else
     {
       unsigned long undef = use->undefined;
       if (regno == source_regno)
  {
    undef &= ~ rtx_to_undefined (s);
  }
       if (undef)
  {
    do
      bitmap_set_bit (undef_to_bitmap (wp, &undef),
        ((ref)->id));
    while (undef);
  }
     }
 }
      if (defined)
 use->undefined = 0;
      else
 {
   if (uid >= death_insns_max_uid)
     abort ();
   if (((insns_with_deaths)->elms [(uid) / ((unsigned) (8 * 4))] >> (uid) % ((unsigned) (8 * 4)) & 1))
     wp->spanned_deaths++;
   use->undefined = final_undef;
 }
    }
  return !defined;
}
static int
live_out (struct df *df, struct curr_use *use, rtx insn)
{
  unsigned int uid = (((insn)->u.fld[0]).rtint);
  if (visit_trace[uid].wp
      && ((((((enum rtx_code) ((visit_trace[uid].wp->ref)->reg)->code) == SUBREG ? ((((visit_trace[uid].wp->ref)->reg)->u.fld[0]).rtx1) : ((visit_trace[uid].wp->ref)->reg)))->u.fld[0]).rtuint) == use->regno
      && (use->undefined & ~visit_trace[uid].undefined) == 0)
    {
      ((visit_trace[uid].wp == use->wp) ? ((! (visit_trace[uid].wp)->uplink) ? (visit_trace[uid].wp) : (! (visit_trace[uid].wp)->uplink->uplink) ? (visit_trace[uid].wp)->uplink : find_web_part_1 (visit_trace[uid].wp)) : union_web_part_roots (((! (visit_trace[uid].wp)->uplink) ? (visit_trace[uid].wp) : (! (visit_trace[uid].wp)->uplink->uplink) ? (visit_trace[uid].wp)->uplink : find_web_part_1 (visit_trace[uid].wp)), ((! (use->wp)->uplink) ? (use->wp) : (! (use->wp)->uplink->uplink) ? (use->wp)->uplink : find_web_part_1 (use->wp))));
      return 0;
    }
  else
    return live_out_1 (df, use, insn);
}
static rtx
live_in_edge (struct df *df, struct curr_use *use, edge e)
{
  struct ra_bb_info *info_pred;
  rtx next_insn;
  if ((e->flags & 8) && use->regno < 53
      && call_used_regs[use->regno])
    return (rtx) 0;
  if (e->flags & 2)
    use->live_over_abnormal = 1;
  bitmap_set_bit (live_at_end[e->src->index], ((use->wp->ref)->id));
  info_pred = (struct ra_bb_info *) e->src->aux;
  next_insn = (e->src)->end_;
  if (live_out (df, use, next_insn))
    {
      if (!bitmap_bit_p (info_pred->regnos_mentioned, use->regno)
   && (rtx_to_undefined (use->x) & ~use->undefined) == 0)
 {
   bitmap_set_bit (info_pred->live_throughout,
     ((use->wp->ref)->id));
   next_insn = (e->src)->head_;
 }
      return next_insn;
    }
  else
    return (rtx) 0;
}
static void
live_in (struct df *df, struct curr_use *use, rtx insn)
{
  unsigned int loc_vpass = visited_pass;
  while (1)
    {
      int uid = (((insn)->u.fld[0]).rtint);
      basic_block bb = (((insn)->u.fld[3]).bb);
      number_seen[uid]++;
      for (insn = (((insn)->u.fld[1]).rtx1); insn && !((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN));
    insn = (((insn)->u.fld[1]).rtx1))
 ;
      if (!insn)
 return;
      if (bb != (((insn)->u.fld[3]).bb))
 {
   edge e;
   unsigned long undef = use->undefined;
   struct ra_bb_info *info = (struct ra_bb_info *) bb->aux;
   if ((e = bb->pred) == ((void *)0))
     return;
   if (info->pass == loc_vpass && (undef & ~info->undefined) == 0)
     return;
   info->pass = loc_vpass;
   info->undefined = undef;
   for (; e->pred_next; e = e->pred_next)
     {
       insn = live_in_edge (df, use, e);
       if (insn)
  live_in (df, use, insn);
       use->undefined = undef;
     }
   insn = live_in_edge (df, use, e);
   if (!insn)
     return;
 }
      else if (!live_out (df, use, insn))
 return;
    }
}
static void
update_regnos_mentioned (void)
{
  int last_uid = last_max_uid;
  rtx insn;
  basic_block bb;
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      {
 if ((((insn)->u.fld[0]).rtint) < last_uid)
   {
     if (copy_insn_p (insn, ((void *)0), ((void *)0)))
       remember_move (insn);
   }
 else if ((bb = (((insn)->u.fld[3]).bb)) != ((void *)0))
   {
     rtx source;
     struct ra_bb_info *info = (struct ra_bb_info *) bb->aux;
     bitmap mentioned = info->regnos_mentioned;
     struct df_link *link;
     if (copy_insn_p (insn, &source, ((void *)0)))
       {
  remember_move (insn);
  bitmap_set_bit (mentioned,
    (((((enum rtx_code) (source)->code) == SUBREG ? (((source)->u.fld[0]).rtx1) : source)->u.fld[0]).rtuint)
                                          );
       }
     for (link = ((df)->insns[(((insn)->u.fld[0]).rtint)].defs); link; link = link->next)
       if (link->ref)
  bitmap_set_bit (mentioned, ((((((enum rtx_code) ((link->ref)->reg)->code) == SUBREG ? ((((link->ref)->reg)->u.fld[0]).rtx1) : ((link->ref)->reg)))->u.fld[0]).rtuint));
   }
      }
}
static void
livethrough_conflicts_bb (basic_block bb)
{
  struct ra_bb_info *info = (struct ra_bb_info *) bb->aux;
  rtx insn;
  bitmap all_defs;
  int first, use_id;
  unsigned int deaths = 0;
  unsigned int contains_call = 0;
  if ((first = bitmap_first_set_bit (info->live_throughout)) < 0)
    return;
  all_defs = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (insn = (bb)->head_; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   unsigned int n;
   struct ra_insn_info info;
   info = insn_df[(((insn)->u.fld[0]).rtint)];
   for (n = 0; n < info.num_defs; n++)
     bitmap_set_bit (all_defs, ((info.defs[n])->id));
   if (((insns_with_deaths)->elms [((((insn)->u.fld[0]).rtint)) / ((unsigned) (8 * 4))] >> ((((insn)->u.fld[0]).rtint)) % ((unsigned) (8 * 4)) & 1))
     deaths++;
   if (((enum rtx_code) (insn)->code) == CALL_INSN)
     contains_call = 1;
 }
      if (insn == (bb)->end_)
 break;
    }
  if (deaths > 0
      || contains_call
      || bitmap_first_set_bit (all_defs) >= 0)
    do { bitmap_element *ptr_ = (info->live_throughout)->first; unsigned int indx_ = (first) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (first) % (unsigned) (8 * 4); unsigned word_num_ = (first) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (use_id) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct web_part *wp = &web_parts[df->def_id + use_id]; unsigned int bl = rtx_to_bits (((wp->ref)->reg)); bitmap conflicts; wp = ((! (wp)->uplink) ? (wp) : (! (wp)->uplink->uplink) ? (wp)->uplink : find_web_part_1 (wp)); wp->spanned_deaths += deaths; wp->crosses_call |= contains_call; conflicts = get_sub_conflicts (wp, bl); bitmap_operation (conflicts, conflicts, all_defs, BITMAP_IOR); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
        ;
  do { if (all_defs) { bitmap_clear (all_defs); free (all_defs); (all_defs) = 0; } } while (0);
}
static void
init_bb_info (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    {
      struct ra_bb_info *info = xcalloc (1, sizeof *info);
      info->regnos_mentioned = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      info->live_throughout = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      info->old_aux = bb->aux;
      bb->aux = (void *) info;
    }
}
static void
free_bb_info_ra (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    {
      struct ra_bb_info *info = (struct ra_bb_info *) bb->aux;
      do { if (info->regnos_mentioned) { bitmap_clear (info->regnos_mentioned); free (info->regnos_mentioned); (info->regnos_mentioned) = 0; } } while (0);
      do { if (info->live_throughout) { bitmap_clear (info->live_throughout); free (info->live_throughout); (info->live_throughout) = 0; } } while (0);
      bb->aux = info->old_aux;
      free (info);
    }
}
static void
build_web_parts_and_conflicts (struct df *df)
{
  struct df_link *link;
  struct curr_use use;
  basic_block bb;
  number_seen = xcalloc (get_max_uid (), sizeof (int));
  visit_trace = xcalloc (get_max_uid (), sizeof (visit_trace[0]));
  update_regnos_mentioned ();
  visited_pass = 0;
  for (use.regno = 0; use.regno < (unsigned int)max_regno; use.regno++)
    if (use.regno >= 53 || !fixed_regs[use.regno])
      for (link = df->regs[use.regno].uses; link; link = link->next)
        if (link->ref)
   {
     struct ref *ref = link->ref;
     rtx insn = ((ref)->insn);
     if (use.regno >= 53
  && ((ref)->id) < last_use_id
  && !((last_check_uses)->elms [(((ref)->id)) / ((unsigned) (8 * 4))] >> (((ref)->id)) % ((unsigned) (8 * 4)) & 1))
       continue;
     use.wp = &web_parts[df->def_id + ((ref)->id)];
     use.x = ((ref)->reg);
     use.live_over_abnormal = 0;
     use.undefined = rtx_to_undefined (use.x);
     visited_pass++;
     live_in (df, &use, insn);
     if (use.live_over_abnormal)
       ((live_over_abnormal)->elms [(((ref)->id)) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (((ref)->id)) % ((unsigned) (8 * 4)));
   }
  dump_number_seen ();
  for (bb = ENTRY_BLOCK_PTR; bb; bb = bb->next_bb)
    {
      struct ra_bb_info *info = (struct ra_bb_info *) bb->aux;
      livethrough_conflicts_bb (bb);
      bitmap_clear (info->live_throughout);
      info->pass = 0;
    }
  free (visit_trace);
  free (number_seen);
}
static void
connect_rmw_web_parts (struct df *df)
{
  unsigned int i;
  for (i = 0; i < df->use_id; i++)
    {
      struct web_part *wp1 = &web_parts[df->def_id + i];
      rtx reg;
      struct df_link *link;
      if (!wp1->ref)
 continue;
      if (((! (wp1)->uplink) ? (wp1) : (! (wp1)->uplink->uplink) ? (wp1)->uplink : find_web_part_1 (wp1)) >= &web_parts[df->def_id])
 continue;
      reg = (((enum rtx_code) ((wp1->ref)->reg)->code) == SUBREG ? ((((wp1->ref)->reg)->u.fld[0]).rtx1) : ((wp1->ref)->reg));
      link = ((df)->insns[(((((wp1->ref)->insn))->u.fld[0]).rtint)].defs);
      for (; link; link = link->next)
        if (reg == (((enum rtx_code) ((link->ref)->reg)->code) == SUBREG ? ((((link->ref)->reg)->u.fld[0]).rtx1) : ((link->ref)->reg)))
   {
     struct web_part *wp2 = &web_parts[((link->ref)->id)];
     ((wp1 == wp2) ? ((! (wp1)->uplink) ? (wp1) : (! (wp1)->uplink->uplink) ? (wp1)->uplink : find_web_part_1 (wp1)) : union_web_part_roots (((! (wp1)->uplink) ? (wp1) : (! (wp1)->uplink->uplink) ? (wp1)->uplink : find_web_part_1 (wp1)), ((! (wp2)->uplink) ? (wp2) : (! (wp2)->uplink->uplink) ? (wp2)->uplink : find_web_part_1 (wp2))));
   }
    }
}
static void
prune_hardregs_for_mode (HARD_REG_SET *s, enum machine_mode mode)
{
  do { HARD_REG_ELT_TYPE *scan_tp_ = (*s), *scan_fp_ = (hardregs_for_mode[(int) mode]); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0);
}
static void
init_one_web_common (struct web *web, rtx reg)
{
  if (!(((enum rtx_code) (reg)->code) == REG))
    abort ();
  web->regno = (((reg)->u.fld[0]).rtuint);
  web->orig_x = reg;
  if (!web->dlink)
    {
      web->dlink = ra_calloc (sizeof (struct dlist));
      ((web->dlink)->value1.web) = web;
    }
  web->regclass = reg_class_subunion
    [reg_preferred_class (web->regno)] [reg_alternate_class (web->regno)];
  web->regclass = reg_preferred_class (web->regno);
  if (web->regno < 53)
    {
      web->color = web->regno;
      put_web (web, PRECOLORED);
      web->num_conflicts = (2147483647 * 2U + 1U);
      web->add_hardregs = 0;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (web->usable_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      ((web->usable_regs)[(web->regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((web->regno) % ((unsigned) (8 * 4))));
      web->num_freedom = 1;
    }
  else
    {
      HARD_REG_SET alternate;
      web->color = -1;
      put_web (web, INITIAL);
      web->add_hardregs =
 (!reg_classes_intersect_p ((web->regclass), GENERAL_REGS) ? ((mode_class[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode)] == MODE_COMPLEX_INT || mode_class[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode)] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((((((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode)) == XFmode ? 12 : ((unsigned short) mode_size[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode)]))) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))) - 1;
      web->num_conflicts = 0 * web->add_hardregs;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (web->usable_regs), *scan_fp_ = (reg_class_contents[reg_preferred_class (web->regno)]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0)
                                                        ;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (alternate), *scan_fp_ = (reg_class_contents[reg_alternate_class (web->regno)]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0)
                                                        ;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (web->usable_regs), *scan_fp_ = (alternate); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (web->usable_regs), *scan_fp_ = (never_use_colors); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
      prune_hardregs_for_mode (&web->usable_regs,
          ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode));
      if (web->mode_changed)
        do { HARD_REG_ELT_TYPE *scan_tp_ = (web->usable_regs), *scan_fp_ = (invalid_mode_change_regs); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
      web->num_freedom = hard_regs_count (web->usable_regs);
      web->num_freedom -= web->add_hardregs;
      if (!web->num_freedom)
 abort();
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (web->orig_usable_regs), *scan_fp_ = (web->usable_regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
}
static void
init_one_web (struct web *web, rtx reg)
{
  memset (web, 0, sizeof (struct web));
  init_one_web_common (web, reg);
  web->useless_conflicts = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
}
static void
reinit_one_web (struct web *web, rtx reg)
{
  web->old_color = web->color + 1;
  init_one_web_common (web, reg);
  web->span_deaths = 0;
  web->spill_temp = 0;
  web->orig_spill_temp = 0;
  web->use_my_regs = 0;
  web->spill_cost = 0;
  web->was_spilled = 0;
  web->is_coalesced = 0;
  web->artificial = 0;
  web->live_over_abnormal = 0;
  web->mode_changed = 0;
  web->subreg_stripped = 0;
  web->move_related = 0;
  web->in_load = 0;
  web->target_of_spilled_move = 0;
  web->num_aliased = 0;
  if (web->type == PRECOLORED)
    {
      web->num_defs = 0;
      web->num_uses = 0;
      web->orig_spill_cost = 0;
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (web->bias_colors); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (web->prefer_colors); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  web->reg_rtx = ((void *)0);
  web->stack_slot = ((void *)0);
  web->pattern = ((void *)0);
  web->alias = ((void *)0);
  if (web->moves)
    abort ();
  if (!web->useless_conflicts)
    abort ();
}
static struct web *
add_subweb (struct web *web, rtx reg)
{
  struct web *w;
  if (((enum rtx_code) (reg)->code) != SUBREG)
    abort ();
  w = xmalloc (sizeof (struct web));
  *w = *web;
  w->orig_x = reg;
  w->add_hardregs = (!reg_classes_intersect_p ((web->regclass), GENERAL_REGS) ? ((mode_class[((enum machine_mode) (reg)->mode)] == MODE_COMPLEX_INT || mode_class[((enum machine_mode) (reg)->mode)] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((((((enum machine_mode) (reg)->mode)) == XFmode ? 12 : ((unsigned short) mode_size[((enum machine_mode) (reg)->mode)]))) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))) - 1;
  w->num_conflicts = 0 * w->add_hardregs;
  w->num_defs = 0;
  w->num_uses = 0;
  w->dlink = ((void *)0);
  w->parent_web = web;
  w->subreg_next = web->subreg_next;
  web->subreg_next = w;
  return w;
}
static struct web *
add_subweb_2 (struct web *web, unsigned int size_word)
{
  rtx ref_rtx = (web->subreg_next ? web->subreg_next : web)->orig_x;
  unsigned int size = ((unsigned int)(size_word) & 0xFFFF) * 8;
  enum machine_mode mode;
  mode = mode_for_size (size, mode_class[((enum machine_mode) (ref_rtx)->mode)], 0);
  if (mode == BLKmode)
    mode = mode_for_size (size, MODE_INT, 0);
  if (mode == BLKmode)
    abort ();
  web = add_subweb (web, gen_rtx_SUBREG (mode, web->orig_x,
      (((unsigned int)(size_word) >> 16) & 0xFFFF)));
  web->artificial = 1;
  return web;
}
static void
init_web_parts (struct df *df)
{
  int regno;
  unsigned int no;
  num_webs = 0;
  for (no = 0; no < df->def_id; no++)
    {
      if (df->defs[no])
 {
   if (no < last_def_id && web_parts[no].ref != df->defs[no])
     abort ();
   web_parts[no].ref = df->defs[no];
   if (!web_parts[no].uplink)
     num_webs++;
 }
      else
 web_parts[no].ref = ((void *)0);
    }
  for (no = 0; no < df->use_id; no++)
    {
      if (df->uses[no])
 {
   if (no < last_use_id
       && web_parts[no + df->def_id].ref != df->uses[no])
     abort ();
   web_parts[no + df->def_id].ref = df->uses[no];
   if (!web_parts[no + df->def_id].uplink)
     num_webs++;
 }
      else
 web_parts[no + df->def_id].ref = ((void *)0);
    }
  for (regno = 0; regno < 53; regno++)
    {
      struct web_part *r1 = ((void *)0);
      struct df_link *link;
      for (link = df->regs[regno].defs; link; link = link->next)
        if (link->ref)
   {
     struct web_part *r2 = &web_parts[((link->ref)->id)];
     if (!r1)
       r1 = r2;
     else
       r1 = ((r1 == r2) ? ((! (r1)->uplink) ? (r1) : (! (r1)->uplink->uplink) ? (r1)->uplink : find_web_part_1 (r1)) : union_web_part_roots (((! (r1)->uplink) ? (r1) : (! (r1)->uplink->uplink) ? (r1)->uplink : find_web_part_1 (r1)), ((! (r2)->uplink) ? (r2) : (! (r2)->uplink->uplink) ? (r2)->uplink : find_web_part_1 (r2))));
   }
      for (link = df->regs[regno].uses; link; link = link->next)
 if (link->ref)
   {
     struct web_part *r2 = &web_parts[df->def_id
                               + ((link->ref)->id)];
     if (!r1)
       r1 = r2;
     else
       r1 = ((r1 == r2) ? ((! (r1)->uplink) ? (r1) : (! (r1)->uplink->uplink) ? (r1)->uplink : find_web_part_1 (r1)) : union_web_part_roots (((! (r1)->uplink) ? (r1) : (! (r1)->uplink->uplink) ? (r1)->uplink : find_web_part_1 (r1)), ((! (r2)->uplink) ? (r2) : (! (r2)->uplink->uplink) ? (r2)->uplink : find_web_part_1 (r2))));
   }
    }
}
static void
copy_conflict_list (struct web *web)
{
  struct conflict_link *cl;
  if (web->orig_conflict_list || web->have_orig_conflicts)
    abort ();
  web->have_orig_conflicts = 1;
  for (cl = web->conflict_list; cl; cl = cl->next)
    {
      struct conflict_link *ncl;
      ncl = ra_alloc (sizeof *ncl);
      ncl->t = cl->t;
      ncl->sub = ((void *)0);
      ncl->next = web->orig_conflict_list;
      web->orig_conflict_list = ncl;
      if (cl->sub)
 {
   struct sub_conflict *sl, *nsl;
   for (sl = cl->sub; sl; sl = sl->next)
     {
       nsl = ra_alloc (sizeof *nsl);
       nsl->s = sl->s;
       nsl->t = sl->t;
       nsl->next = ncl->sub;
       ncl->sub = nsl;
     }
 }
    }
}
static void
add_conflict_edge (struct web *from, struct web *to)
{
  if (from->type != PRECOLORED)
    {
      struct web *pfrom = (((from)->parent_web) ? find_web_for_subweb_1 ((from)->parent_web) : (from));
      struct web *pto = (((to)->parent_web) ? find_web_for_subweb_1 ((to)->parent_web) : (to));
      struct sub_conflict *sl;
      struct conflict_link *cl = pfrom->conflict_list;
      int may_delete = 1;
      if (pfrom == pto)
 return;
      if (remember_conflicts && !pfrom->have_orig_conflicts)
 copy_conflict_list (pfrom);
      if (!((sup_igraph)->elms [((pfrom->id * num_webs + pto->id)) / ((unsigned) (8 * 4))] >> ((pfrom->id * num_webs + pto->id)) % ((unsigned) (8 * 4)) & 1))
 {
   cl = ra_alloc (sizeof (*cl));
   cl->t = pto;
   cl->sub = ((void *)0);
   cl->next = pfrom->conflict_list;
   pfrom->conflict_list = cl;
   if (pto->type != SELECT && pto->type != COALESCED)
     pfrom->num_conflicts += 1 + pto->add_hardregs;
          ((sup_igraph)->elms [((pfrom->id * num_webs + pto->id)) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << ((pfrom->id * num_webs + pto->id)) % ((unsigned) (8 * 4)));
   may_delete = 0;
 }
      else
        while (cl->t != pto)
   cl = cl->next;
      if (pfrom != from || pto != to)
 {
   if (!may_delete || cl->sub != ((void *)0))
     {
       sl = ra_alloc (sizeof (*sl));
       sl->s = from;
       sl->t = to;
       sl->next = cl->sub;
       cl->sub = sl;
     }
 }
      else
 cl->sub = ((void *)0);
    }
}
void
record_conflict (struct web *web1, struct web *web2)
{
  unsigned int id1 = web1->id, id2 = web2->id;
  unsigned int index = ((id1) < (id2) ? ((id2)*((id2)-1)/2)+(id1) : ((id1)*((id1)-1)/2)+(id2));
  if (web1 == web2 || ((igraph)->elms [(index) / ((unsigned) (8 * 4))] >> (index) % ((unsigned) (8 * 4)) & 1))
    return;
  if (id1 == id2)
    abort ();
  if ((web1->regno < 53 && fixed_regs[web1->regno])
      || (web2->regno < 53 && fixed_regs[web2->regno]))
    return;
  if ((web1->type == PRECOLORED
       && ! (!!((web2->usable_regs)[(web1->regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((web1->regno) % ((unsigned) (8 * 4)))))))
      || (web2->type == PRECOLORED
   && ! (!!((web1->usable_regs)[(web2->regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((web2->regno) % ((unsigned) (8 * 4))))))))
    return;
  if (web1->type != PRECOLORED && web2->type != PRECOLORED
      && ! hard_regs_intersect_p (&web1->usable_regs, &web2->usable_regs))
    {
      struct web *p1 = (((web1)->parent_web) ? find_web_for_subweb_1 ((web1)->parent_web) : (web1));
      struct web *p2 = (((web2)->parent_web) ? find_web_for_subweb_1 ((web2)->parent_web) : (web2));
      bitmap_set_bit (p1->useless_conflicts, p2->id);
      bitmap_set_bit (p2->useless_conflicts, p1->id);
      return;
    }
  ((igraph)->elms [(index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (index) % ((unsigned) (8 * 4)));
  add_conflict_edge (web1, web2);
  add_conflict_edge (web2, web1);
}
static void
build_inverse_webs (struct web *web)
{
  struct web *sweb = web->subreg_next;
  unsigned long undef;
  undef = rtx_to_undefined (web->orig_x);
  for (; sweb; sweb = sweb->subreg_next)
    if (!sweb->artificial)
      {
 unsigned long bits;
 bits = undef & ~ rtx_to_undefined (sweb->orig_x);
 while (bits)
   {
     unsigned int size_word = undef_to_size_word (web->orig_x, &bits);
     if (!find_subweb_2 (web, size_word))
       add_subweb_2 (web, size_word);
   }
      }
}
static void
copy_web (struct web *web, struct web_link **wl)
{
  struct web *cweb = xmalloc (sizeof *cweb);
  struct web_link *link = ra_alloc (sizeof *link);
  link->next = *wl;
  *wl = link;
  link->web = cweb;
  *cweb = *web;
}
static void
compare_and_free_webs (struct web_link **link)
{
  struct web_link *wl;
  for (wl = *link; wl; wl = wl->next)
    {
      struct web *web1 = wl->web;
      struct web *web2 = id2web[web1->id];
      if (web1->regno != web2->regno
   || web1->mode_changed != web2->mode_changed
   || !rtx_equal_p (web1->orig_x, web2->orig_x)
   || web1->type != web2->type
   || (web1->type != PRECOLORED
       && (web1->num_uses != web2->num_uses
           || web1->num_defs != web2->num_defs))
   || (web1->type != PRECOLORED
               && web1->crosses_call != web2->crosses_call)
   || (web1->type != PRECOLORED
        && web1->live_over_abnormal != web2->live_over_abnormal))
 abort ();
      if (web1->type != PRECOLORED)
 {
   unsigned int i;
   for (i = 0; i < web1->num_defs; i++)
     if (web1->defs[i] != web2->defs[i])
       abort ();
   for (i = 0; i < web1->num_uses; i++)
     if (web1->uses[i] != web2->uses[i])
       abort ();
 }
      if (web1->type == PRECOLORED)
 {
   if (web1->defs)
     free (web1->defs);
   if (web1->uses)
     free (web1->uses);
 }
      free (web1);
    }
  *link = ((void *)0);
}
static void
init_webs_defs_uses (void)
{
  struct dlist *d;
  for (d = (web_lists[(int)(INITIAL)]); d; d = d->next)
    {
      struct web *web = ((d)->value1.web);
      unsigned int def_i, use_i;
      struct df_link *link;
      if (web->old_web)
 continue;
      if (web->type == PRECOLORED)
 {
   web->num_defs = web->num_uses = 0;
   continue;
 }
      if (web->num_defs)
        web->defs = xmalloc (web->num_defs * sizeof (web->defs[0]));
      if (web->num_uses)
        web->uses = xmalloc (web->num_uses * sizeof (web->uses[0]));
      def_i = use_i = 0;
      for (link = web->temp_refs; link; link = link->next)
 {
   if ((((link->ref)->type) == DF_REF_REG_DEF))
     web->defs[def_i++] = link->ref;
   else
     web->uses[use_i++] = link->ref;
 }
      web->temp_refs = ((void *)0);
      if (def_i != web->num_defs || use_i != web->num_uses)
 abort ();
    }
}
static unsigned int
parts_to_webs_1 (struct df *df, struct web_link **copy_webs,
   struct df_link *all_refs)
{
  unsigned int i;
  unsigned int webnum;
  unsigned int def_id = df->def_id;
  unsigned int use_id = df->use_id;
  struct web_part *wp_first_use = &web_parts[def_id];
  webnum = 0;
  for (i = 0; i < def_id + use_id; i++)
    {
      struct web *subweb, *web = 0;
      struct web_part *wp = &web_parts[i];
      struct ref *ref = wp->ref;
      unsigned int ref_id;
      rtx reg;
      if (!ref)
 continue;
      ref_id = i;
      if (i >= def_id)
 ref_id -= def_id;
      all_refs[i].ref = ref;
      reg = ((ref)->reg);
      if (! wp->uplink)
 {
   unsigned int newid = ~(unsigned)0;
   unsigned int old_web = 0;
   if (ra_pass == 1)
     {
       web = xmalloc (sizeof (struct web));
       newid = last_num_webs++;
       init_one_web (web, ((enum rtx_code) (reg)->code) == SUBREG
            ? (((reg)->u.fld[0]).rtx1) : reg);
     }
   else
     {
       web = def2web[i];
       if (!web && ((((((enum rtx_code) ((ref)->reg)->code) == SUBREG ? ((((ref)->reg)->u.fld[0]).rtx1) : ((ref)->reg)))->u.fld[0]).rtuint) < 53)
  web = hardreg2web[((((((enum rtx_code) ((ref)->reg)->code) == SUBREG ? ((((ref)->reg)->u.fld[0]).rtx1) : ((ref)->reg)))->u.fld[0]).rtuint)];
       if (web)
  {
    web = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
    remove_list (web->dlink, &(web_lists[(int)(INITIAL)]));
    old_web = 1;
    copy_web (web, copy_webs);
  }
       else
  {
    if ((web_lists[(int)(FREE)]))
      web = ((pop_list (&(web_lists[(int)(FREE)])))->value1.web);
    else
      {
        web = xmalloc (sizeof (struct web));
        newid = last_num_webs++;
      }
  }
       if (newid == ~(unsigned)0)
  newid = web->id;
       if (old_web)
  reinit_one_web (web, ((enum rtx_code) (reg)->code) == SUBREG
         ? (((reg)->u.fld[0]).rtx1) : reg);
       else
  init_one_web (web, ((enum rtx_code) (reg)->code) == SUBREG
       ? (((reg)->u.fld[0]).rtx1) : reg);
       web->old_web = (old_web && web->type != PRECOLORED) ? 1 : 0;
     }
   web->span_deaths = wp->spanned_deaths;
   web->crosses_call = wp->crosses_call;
   web->id = newid;
   web->temp_refs = ((void *)0);
   webnum++;
   if (web->regno < 53 && !hardreg2web[web->regno])
     hardreg2web[web->regno] = web;
   else if (web->regno < 53
     && hardreg2web[web->regno] != web)
     abort ();
 }
      if (def2web[i] != ((void *)0))
 {
   web = def2web[i];
   web = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
   if ((((ref)->flags) & DF_REF_MODE_CHANGE) != 0
       && web->regno >= 53)
     web->mode_changed = 1;
   if ((((ref)->flags) & DF_REF_STRIPPED) != 0
       && web->regno >= 53)
     web->subreg_stripped = 1;
   if (i >= def_id
       && ((live_over_abnormal)->elms [(ref_id) / ((unsigned) (8 * 4))] >> (ref_id) % ((unsigned) (8 * 4)) & 1))
     web->live_over_abnormal = 1;
   if (!web->old_web || web->type == PRECOLORED)
     abort ();
   continue;
 }
      if (wp->uplink)
 {
   struct web_part *rwp = ((! (wp)->uplink) ? (wp) : (! (wp)->uplink->uplink) ? (wp)->uplink : find_web_part_1 (wp));
   unsigned int j = ((rwp->ref)->id);
   if (rwp < wp_first_use)
     web = def2web[j];
   else
     web = use2web[j];
   web = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
 }
      all_refs[i].next = web->temp_refs;
      web->temp_refs = &all_refs[i];
      if (web->old_web && web->type != PRECOLORED)
 abort ();
      if (((enum rtx_code) (reg)->code) == SUBREG)
 {
   subweb = find_subweb (web, reg);
   if (!subweb)
     {
       subweb = add_subweb (web, reg);
       if (web->old_web)
  abort ();
     }
 }
      else
 subweb = web;
      if ((((ref)->flags) & DF_REF_MODE_CHANGE) != 0
   && web->regno >= 53)
 web->mode_changed = 1;
      if ((((ref)->flags) & DF_REF_STRIPPED) != 0
   && web->regno >= 53)
 web->subreg_stripped = 1;
      if (i < def_id)
 {
   if (ra_pass > 1)
     {
       struct web *compare = def2web[i];
       if (i < last_def_id)
  {
    if (web->old_web && compare != subweb)
      abort ();
  }
       if (!web->old_web && compare)
  abort ();
       if (compare && compare != subweb)
  abort ();
     }
   def2web[i] = subweb;
   web->num_defs++;
 }
      else
 {
   if (ra_pass > 1)
     {
       struct web *compare = use2web[ref_id];
       if (ref_id < last_use_id)
  {
    if (web->old_web && compare != subweb)
      abort ();
  }
       if (!web->old_web && compare)
  abort ();
       if (compare && compare != subweb)
  abort ();
     }
   use2web[ref_id] = subweb;
   web->num_uses++;
   if (((live_over_abnormal)->elms [(ref_id) / ((unsigned) (8 * 4))] >> (ref_id) % ((unsigned) (8 * 4)) & 1))
     web->live_over_abnormal = 1;
 }
    }
  if (webnum != num_webs)
    abort ();
  return webnum;
}
static void
parts_to_webs (struct df *df)
{
  unsigned int i;
  unsigned int webnum;
  struct web_link *copy_webs = ((void *)0);
  struct dlist *d;
  struct df_link *all_refs;
  num_subwebs = 0;
  all_refs = xcalloc (df->def_id + df->use_id, sizeof (all_refs[0]));
  webnum = parts_to_webs_1 (df, &copy_webs, all_refs);
  for (i = 0; i < 53; i++)
    if (!hardreg2web[i])
      {
 struct web *web = xmalloc (sizeof (struct web));
 init_one_web (web, gen_rtx_REG (reg_raw_mode[i], i));
 web->id = last_num_webs++;
 hardreg2web[web->regno] = web;
      }
  num_webs = last_num_webs;
  for (i = 0; i < df->def_id + df->use_id; i++)
    {
      struct web_part *wp = &web_parts[i];
      struct tagged_conflict *cl;
      struct web *web;
      if (wp->uplink || !wp->ref)
 {
   if (wp->sub_conflicts)
     abort ();
   continue;
 }
      web = def2web[i];
      web = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
      for (cl = wp->sub_conflicts; cl; cl = cl->next)
        if (!find_subweb_2 (web, cl->size_word))
   add_subweb_2 (web, cl->size_word);
    }
  webnum = last_num_webs;
  for (d = (web_lists[(int)(INITIAL)]); d; d = d->next)
    {
      struct web *web = ((d)->value1.web);
      if (web->subreg_next)
 {
   struct web *sweb;
          build_inverse_webs (web);
   for (sweb = web->subreg_next; sweb; sweb = sweb->subreg_next)
     sweb->id = webnum++;
 }
    }
  id2web = xcalloc (webnum, sizeof (id2web[0]));
  for (d = (web_lists[(int)(INITIAL)]); d; d = d->next)
    {
      struct web *web = ((d)->value1.web);
      id2web[web->id] = web;
      for (web = web->subreg_next; web; web = web->subreg_next)
        id2web[web->id] = web;
    }
  num_subwebs = webnum - last_num_webs;
  num_allwebs = num_webs + num_subwebs;
  num_webs += num_subwebs;
  igraph = sbitmap_alloc (num_webs * num_webs / 2);
  sup_igraph = sbitmap_alloc (num_webs * num_webs);
  sbitmap_zero (igraph);
  sbitmap_zero (sup_igraph);
  init_webs_defs_uses ();
  compare_and_free_webs (&copy_webs);
  free (all_refs);
}
static void
reset_conflicts (void)
{
  unsigned int i;
  bitmap newwebs = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (i = 0; i < num_webs - num_subwebs; i++)
    {
      struct web *web = id2web[i];
      if (web->type == PRECOLORED || !web->old_web)
 bitmap_set_bit (newwebs, web->id);
    }
  for (i = 0; i < num_webs - num_subwebs; i++)
    {
      struct web *web = id2web[i];
      struct conflict_link *cl;
      struct conflict_link **pcl;
      pcl = &(web->conflict_list);
      if (web->have_orig_conflicts)
 {
   web->conflict_list = web->orig_conflict_list;
   web->orig_conflict_list = ((void *)0);
 }
      if (web->orig_conflict_list)
 abort ();
      if (web->type != PRECOLORED && !web->old_web)
 {
   *pcl = ((void *)0);
   if (bitmap_first_set_bit (web->useless_conflicts) >= 0)
     abort ();
 }
      else
 {
   bitmap_operation (web->useless_conflicts, web->useless_conflicts,
       newwebs, BITMAP_AND_COMPL);
   for (cl = web->conflict_list; cl; cl = cl->next)
     {
       if (cl->t->old_web || cl->t->type == PRECOLORED)
  {
    *pcl = cl;
    pcl = &(cl->next);
    web->num_conflicts += 1 + cl->t->add_hardregs;
    ((sup_igraph)->elms [((web->id * num_webs + cl->t->id)) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << ((web->id * num_webs + cl->t->id)) % ((unsigned) (8 * 4)));
    if (!cl->sub)
      ((igraph)->elms [(((web->id) < (cl->t->id) ? ((cl->t->id)*((cl->t->id)-1)/2)+(web->id) : ((web->id)*((web->id)-1)/2)+(cl->t->id))) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (((web->id) < (cl->t->id) ? ((cl->t->id)*((cl->t->id)-1)/2)+(web->id) : ((web->id)*((web->id)-1)/2)+(cl->t->id))) % ((unsigned) (8 * 4)));
    else
      {
        struct sub_conflict *sl;
        for (sl = cl->sub; sl; sl = sl->next)
   ((igraph)->elms [(((sl->s->id) < (sl->t->id) ? ((sl->t->id)*((sl->t->id)-1)/2)+(sl->s->id) : ((sl->s->id)*((sl->s->id)-1)/2)+(sl->t->id))) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (((sl->s->id) < (sl->t->id) ? ((sl->t->id)*((sl->t->id)-1)/2)+(sl->s->id) : ((sl->s->id)*((sl->s->id)-1)/2)+(sl->t->id))) % ((unsigned) (8 * 4)));
      }
  }
     }
   *pcl = ((void *)0);
 }
      web->have_orig_conflicts = 0;
    }
  do { if (newwebs) { bitmap_clear (newwebs); free (newwebs); (newwebs) = 0; } } while (0);
}
static void
conflicts_between_webs (struct df *df)
{
  unsigned int i;
  struct dlist *d;
  bitmap ignore_defs = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  unsigned int have_ignored;
  unsigned int *pass_cache = xcalloc (num_webs, sizeof (int));
  unsigned int pass = 0;
  if (ra_pass > 1)
    reset_conflicts ();
  for (i = 0; i < df->def_id; i++)
    if (web_parts[i].ref == ((void *)0))
      bitmap_set_bit (ignore_defs, i);
  have_ignored = (bitmap_first_set_bit (ignore_defs) >= 0);
  for (i = 0; i < df->def_id + df->use_id; i++)
    {
      struct tagged_conflict *cl = web_parts[i].sub_conflicts;
      struct web *supweb1;
      if (!cl
   || (i >= df->def_id
       && ((((((enum rtx_code) ((web_parts[i].ref)->reg)->code) == SUBREG ? ((((web_parts[i].ref)->reg)->u.fld[0]).rtx1) : ((web_parts[i].ref)->reg)))->u.fld[0]).rtuint) >= 53))
 continue;
      supweb1 = def2web[i];
      supweb1 = (((supweb1)->parent_web) ? find_web_for_subweb_1 ((supweb1)->parent_web) : (supweb1));
      for (; cl; cl = cl->next)
        if (cl->conflicts)
   {
     int j;
     struct web *web1 = find_subweb_2 (supweb1, cl->size_word);
     if (have_ignored)
       bitmap_operation (cl->conflicts, cl->conflicts, ignore_defs,
           BITMAP_AND_COMPL);
     pass++;
     do { bitmap_element *ptr_ = (cl->conflicts)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct web *web2 = def2web[j]; unsigned int id2 = web2->id; if (pass_cache[id2] != pass) { pass_cache[id2] = pass; record_conflict (web1, web2); } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
         ;
   }
    }
  free (pass_cache);
  do { if (ignore_defs) { bitmap_clear (ignore_defs); free (ignore_defs); (ignore_defs) = 0; } } while (0);
  for (d = (web_lists[(int)(INITIAL)]); d; d = d->next)
    {
      struct web *web = ((d)->value1.web);
      int j;
      if (web->live_over_abnormal)
 for (j = 8; j <= (8 + 7); j++)
   record_conflict (web, hardreg2web[j]);
    }
}
static void
remember_web_was_spilled (struct web *web)
{
  int i;
  unsigned int found_size = 0;
  int adjust;
  web->spill_temp = 1;
  web->use_my_regs = 1;
  if (web->regno >= max_normal_pseudo)
    {
      do { HARD_REG_ELT_TYPE *scan_tp_ = (web->usable_regs), *scan_fp_ = (reg_class_contents[reg_preferred_class (web->regno)]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0)
                                                        ;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (web->usable_regs), *scan_fp_ = (reg_class_contents[reg_alternate_class (web->regno)]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0)
                                                        ;
    }
  else
    do { HARD_REG_ELT_TYPE *scan_tp_ = (web->usable_regs), *scan_fp_ = (reg_class_contents[(int) GENERAL_REGS]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0)
                                                ;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (web->usable_regs), *scan_fp_ = (never_use_colors); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
  prune_hardregs_for_mode (&web->usable_regs, ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode));
  if (web->mode_changed)
    do { HARD_REG_ELT_TYPE *scan_tp_ = (web->usable_regs), *scan_fp_ = (invalid_mode_change_regs); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
  web->num_freedom = hard_regs_count (web->usable_regs);
  if (!web->num_freedom)
    abort();
  do { HARD_REG_ELT_TYPE *scan_tp_ = (web->orig_usable_regs), *scan_fp_ = (web->usable_regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  web->regclass = NO_REGS;
  for (i = (int) ALL_REGS - 1; i > 0; i--)
    {
      unsigned int size;
      HARD_REG_SET test;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (test), *scan_fp_ = (reg_class_contents[i]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (test), *scan_fp_ = (never_use_colors); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_xp_ = (test), *scan_yp_ = (web->usable_regs); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto found; } while (0);
      continue;
    found:
      size = hard_regs_count (test);
      if (found_size < size)
 {
          web->regclass = (enum reg_class) i;
   found_size = size;
 }
    }
  adjust = 0 * web->add_hardregs;
  web->add_hardregs =
    (!reg_classes_intersect_p ((web->regclass), GENERAL_REGS) ? ((mode_class[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode)] == MODE_COMPLEX_INT || mode_class[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode)] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((((((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode)) == XFmode ? 12 : ((unsigned short) mode_size[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode)]))) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))) - 1;
  web->num_freedom -= web->add_hardregs;
  if (!web->num_freedom)
    abort();
  adjust -= 0 * web->add_hardregs;
  web->num_conflicts -= adjust;
}
static void
detect_spill_temps (void)
{
  struct dlist *d;
  bitmap already = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (d = (web_lists[(int)(INITIAL)]); d; d = d->next)
    {
      struct web *web = ((d)->value1.web);
      if (web->regno < 53)
 continue;
      if (web->num_defs == 0)
 continue;
      if (web->num_uses == 0)
 web->spill_temp = 3;
      else if (web->changed)
 web->spill_temp = 1;
      else
 {
   unsigned int i;
   int spill_involved = 0;
   for (i = 0; i < web->num_uses && !spill_involved; i++)
     if ((((((web->uses[i])->insn)->u.fld[0]).rtint)) >= orig_max_uid)
       spill_involved = 1;
   for (i = 0; i < web->num_defs && !spill_involved; i++)
     if ((((((web->defs[i])->insn)->u.fld[0]).rtint)) >= orig_max_uid)
       spill_involved = 1;
   if (spill_involved )
     {
       int num_deaths = web->span_deaths;
       remember_web_was_spilled (web);
       bitmap_clear (already);
       for (i = 0; i < web->num_defs; i++)
  {
    rtx insn = web->defs[i]->insn;
    if (((insns_with_deaths)->elms [((((insn)->u.fld[0]).rtint)) / ((unsigned) (8 * 4))] >> ((((insn)->u.fld[0]).rtint)) % ((unsigned) (8 * 4)) & 1)
        && !bitmap_bit_p (already, (((insn)->u.fld[0]).rtint)))
      {
        unsigned int j;
        bitmap_set_bit (already, (((insn)->u.fld[0]).rtint));
        for (j = 0; j < web->num_uses; j++)
   if (web->uses[j]->insn == insn)
     {
       num_deaths--;
       break;
     }
      }
  }
       if (web->crosses_call || num_deaths > 0)
  web->spill_temp = 1 * 2;
     }
   else if (web->span_deaths == 0 && !web->crosses_call)
     web->spill_temp = 3;
 }
      web->orig_spill_temp = web->spill_temp;
    }
  do { if (already) { bitmap_clear (already); free (already); (already) = 0; } } while (0);
}
int
memref_is_stack_slot (rtx mem)
{
  rtx ad = (((mem)->u.fld[0]).rtx1);
  rtx x;
  if (((enum rtx_code) (ad)->code) != PLUS || ((enum rtx_code) ((((ad)->u.fld[1]).rtx1))->code) != CONST_INT)
    return 0;
  x = (((ad)->u.fld[0]).rtx1);
  if (x == (global_rtl[GR_FRAME_POINTER]) || x == (global_rtl[GR_HARD_FRAME_POINTER])
      || (x == (global_rtl[GR_ARG_POINTER]) && fixed_regs[16])
      || x == (global_rtl[GR_STACK_POINTER]))
    return 1;
  return 0;
}
static int
contains_pseudo (rtx x)
{
  const char *fmt;
  int i;
  if (((enum rtx_code) (x)->code) == SUBREG)
    x = (((x)->u.fld[0]).rtx1);
  if ((((enum rtx_code) (x)->code) == REG))
    {
      if ((((x)->u.fld[0]).rtuint) >= 53)
        return 1;
      else
 return 0;
    }
  fmt = (rtx_format[(int) (((enum rtx_code) (x)->code))]);
  for (i = (rtx_length[(int) (((enum rtx_code) (x)->code))]) - 1; i >= 0; i--)
    if (fmt[i] == 'e')
      {
 if (contains_pseudo ((((x)->u.fld[i]).rtx1)))
   return 1;
      }
    else if (fmt[i] == 'E')
      {
 int j;
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   if (contains_pseudo ((((((x)->u.fld[i]).rtvec1))->elem[j])))
     return 1;
      }
  return 0;
}
static rtx remat_test_insn;
static int
want_to_remat (rtx x)
{
  int num_clobbers = 0;
  int icode;
  if (general_operand (x, ((enum machine_mode) (x)->mode)))
    return 1;
  if (remat_test_insn == 0)
    {
      remat_test_insn
 = make_insn_raw (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (word_mode, 53 * 2)), ((const_int_rtx[64])))
                     );
      (((remat_test_insn)->u.fld[2]).rtx1) = (((remat_test_insn)->u.fld[1]).rtx1) = 0;
    }
  ((((((((remat_test_insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->mode = (((enum machine_mode) (x)->mode)));
  ((((((remat_test_insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1) = x;
  return ((icode = recog ((((remat_test_insn)->u.fld[5]).rtx1), remat_test_insn,
     &num_clobbers)) >= 0
   && (num_clobbers == 0
                                                 ));
}
static void
detect_remat_webs (void)
{
  struct dlist *d;
  for (d = (web_lists[(int)(INITIAL)]); d; d = d->next)
    {
      struct web *web = ((d)->value1.web);
      unsigned int i;
      rtx pat = (rtx) 0;
      if (web->regno < 53 || !web->num_defs
   || !web->num_uses)
 continue;
      for (i = 0; i < web->num_defs; i++)
 {
   rtx insn;
   rtx set = (((((enum rtx_code) (insn = ((web->defs[i])->insn))->code) == INSN) || (((enum rtx_code) (insn = ((web->defs[i])->insn))->code) == JUMP_INSN) || (((enum rtx_code) (insn = ((web->defs[i])->insn))->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn = ((web->defs[i])->insn))->u.fld[5]).rtx1))->code) == SET ? (((insn = ((web->defs[i])->insn))->u.fld[5]).rtx1) : single_set_2 (insn = ((web->defs[i])->insn), (((insn = ((web->defs[i])->insn))->u.fld[5]).rtx1))) : (rtx) 0);
   rtx src;
   if (!set)
     break;
   src = (((set)->u.fld[1]).rtx1);
   if (!rtx_equal_p ((((set)->u.fld[0]).rtx1), web->orig_x))
     break;
   if (pat && !rtx_equal_p (pat, src))
     break;
   if (pat)
     continue;
   if ((((rtx_class[(int) (((enum rtx_code) (src)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (src)->code) == CONST_VECTOR)
        || (!rtx_unstable_p (src) && !contains_pseudo (src))
        || ((((enum rtx_code) (src)->code) == MEM)
     && (((insn)->u.fld[0]).rtint) >= orig_max_uid
     && memref_is_stack_slot (src)))
       && want_to_remat (src))
     pat = src;
   else
     break;
 }
      if (pat && i == web->num_defs)
 web->pattern = pat;
    }
}
static void
determine_web_costs (void)
{
  struct dlist *d;
  for (d = (web_lists[(int)(INITIAL)]); d; d = d->next)
    {
      unsigned int i, num_loads;
      int load_cost, store_cost;
      unsigned long w;
      struct web *web = ((d)->value1.web);
      if (web->type == PRECOLORED)
 continue;
      if (web->pattern)
 {
   load_cost = 1 + rtx_cost (web->pattern, 0);
   store_cost = 0;
 }
      else
 {
   load_cost = 1 + ix86_memory_move_cost ((((enum machine_mode) (web->orig_x)->mode)), (web->regclass), (1))
                          ;
   store_cost = 1 + ix86_memory_move_cost ((((enum machine_mode) (web->orig_x)->mode)), (web->regclass), (0))
                           ;
 }
      num_loads = ((web->span_deaths) < (web->num_uses) ? (web->span_deaths) : (web->num_uses));
      for (w = 0, i = 0; i < web->num_uses; i++)
 w += (((((web->uses[i])->insn)->u.fld[3]).bb))->frequency + 1;
      if (num_loads < web->num_uses)
 w = (w * num_loads + web->num_uses - 1) / web->num_uses;
      web->spill_cost = w * load_cost;
      if (store_cost)
 {
   for (w = 0, i = 0; i < web->num_defs; i++)
     w += (((((web->defs[i])->insn)->u.fld[3]).bb))->frequency + 1;
   web->spill_cost += w * store_cost;
 }
      web->orig_spill_cost = web->spill_cost;
    }
}
static void
detect_webs_set_in_cond_jump (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (((enum rtx_code) ((bb)->end_)->code) == JUMP_INSN)
      {
 struct df_link *link;
 for (link = ((df)->insns[((((bb)->end_)->u.fld[0]).rtint)].defs); link; link = link->next)
   if (link->ref && ((((((enum rtx_code) ((link->ref)->reg)->code) == SUBREG ? ((((link->ref)->reg)->u.fld[0]).rtx1) : ((link->ref)->reg)))->u.fld[0]).rtuint) >= 53)
     {
       struct web *web = def2web[((link->ref)->id)];
       web->orig_spill_temp = web->spill_temp = 3;
     }
      }
}
static void
make_webs (struct df *df)
{
  parts_to_webs (df);
  detect_spill_temps ();
  detect_webs_set_in_cond_jump ();
  conflicts_between_webs (df);
  detect_remat_webs ();
  determine_web_costs ();
}
static void
moves_to_webs (struct df *df)
{
  struct df_link *link;
  struct move_list *ml;
  for (ml = wl_moves; ml; ml = ml->next)
    {
      struct move *m = ml->move;
      struct web *web;
      struct move_list *newml;
      if (!m)
 continue;
      m->type = WORKLIST;
      m->dlink = ((void *)0);
      for (link = ((df)->insns[(((m->insn)->u.fld[0]).rtint)].defs); link; link = link->next)
        if (link->ref)
   {
     web = def2web[((link->ref)->id)];
     web = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
     if (!m->target_web || web->regno < m->target_web->regno)
       m->target_web = web;
   }
      for (link = ((df)->insns[(((m->insn)->u.fld[0]).rtint)].uses); link; link = link->next)
        if (link->ref)
   {
     web = use2web[((link->ref)->id)];
     web = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
     if (!m->source_web || web->regno < m->source_web->regno)
       m->source_web = web;
   }
      if (m->source_web && m->target_web
   && hard_regs_intersect_p (&m->source_web->usable_regs,
        &m->target_web->usable_regs))
 {
   if (!flag_ra_optimistic_coalescing)
     {
       struct move_list *test = m->source_web->moves;
       for (; test && test->move != m; test = test->next);
       if (! test)
  {
    newml = ra_alloc (sizeof (struct move_list));
    newml->move = m;
    newml->next = m->source_web->moves;
    m->source_web->moves = newml;
  }
       test = m->target_web->moves;
       for (; test && test->move != m; test = test->next);
       if (! test)
  {
    newml = ra_alloc (sizeof (struct move_list));
    newml->move = m;
    newml->next = m->target_web->moves;
    m->target_web->moves = newml;
  }
     }
 }
      else
 ml->move = ((void *)0);
    }
}
static void
handle_asm_insn (struct df *df, rtx insn)
{
  const char *constraints[30];
  enum machine_mode operand_mode[30];
  int i, noperands, in_output;
  HARD_REG_SET clobbered, allowed, conflict;
  rtx pat;
  if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
      || (noperands = asm_noperands ((((insn)->u.fld[5]).rtx1))) < 0)
    return;
  pat = (((insn)->u.fld[5]).rtx1);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (clobbered); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if (((enum rtx_code) (pat)->code) == PARALLEL)
    for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
      {
 rtx t = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
 if (((enum rtx_code) (t)->code) == CLOBBER && (((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == REG)
     && ((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
   ((clobbered)[(((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
      }
  decode_asm_operands (pat, recog_data.operand, recog_data.operand_loc,
         constraints, operand_mode);
  in_output = 1;
  for (i = 0; i < noperands; i++)
    {
      const char *p = constraints[i];
      int cls = (int) NO_REGS;
      struct df_link *link;
      rtx reg;
      struct web *web;
      int nothing_allowed = 1;
      reg = recog_data.operand[i];
      while (((enum rtx_code) (reg)->code) == SUBREG
      || ((enum rtx_code) (reg)->code) == ZERO_EXTRACT
      || ((enum rtx_code) (reg)->code) == SIGN_EXTRACT
      || ((enum rtx_code) (reg)->code) == STRICT_LOW_PART)
 reg = (((reg)->u.fld[0]).rtx1);
      if (!(((enum rtx_code) (reg)->code) == REG) || (((reg)->u.fld[0]).rtuint) < 53)
 continue;
      while (1)
 {
   if (in_output)
     link = df->insns[(((insn)->u.fld[0]).rtint)].defs;
   else
     link = df->insns[(((insn)->u.fld[0]).rtint)].uses;
   while (link && link->ref && (((enum rtx_code) ((link->ref)->reg)->code) == SUBREG ? ((((link->ref)->reg)->u.fld[0]).rtx1) : ((link->ref)->reg)) != reg)
     link = link->next;
   if (!link || !link->ref)
     {
       if (in_output)
         in_output = 0;
       else
         abort ();
     }
   else
     break;
 }
      if (in_output)
 web = def2web[((link->ref)->id)];
      else
 web = use2web[((link->ref)->id)];
      reg = ((link->ref)->reg);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (allowed); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      while (1)
 {
   char c = *p;
   if (c == '\0' || c == ',' || c == '#')
     {
       p++;
       do { HARD_REG_ELT_TYPE *scan_tp_ = (allowed), *scan_fp_ = (reg_class_contents[cls]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
       if (cls != NO_REGS)
  nothing_allowed = 0;
       cls = NO_REGS;
       if (c == '#')
  do {
      c = *p++;
  } while (c != '\0' && c != ',');
       if (c == '\0')
         break;
       continue;
     }
   switch (c)
     {
       case '=': case '+': case '*': case '%': case '?': case '!':
       case '0': case '1': case '2': case '3': case '4': case 'm':
       case '<': case '>': case 'V': case 'o': case '&': case 'E':
       case 'F': case 's': case 'i': case 'n': case 'X': case 'I':
       case 'J': case 'K': case 'L': case 'M': case 'N': case 'O':
       case 'P':
  break;
       case 'p':
  cls = (int) reg_class_subunion[cls][(int) GENERAL_REGS];
  nothing_allowed = 0;
         break;
       case 'g':
       case 'r':
  cls = (int) reg_class_subunion[cls][(int) GENERAL_REGS];
  nothing_allowed = 0;
  break;
       default:
  cls =
    (int) reg_class_subunion[cls][(int)
      ((c) == 'r' ? GENERAL_REGS : NO_REGS)
              ];
     }
   p += 1;
 }
      if (nothing_allowed)
 {
   do { HARD_REG_ELT_TYPE *scan_tp_ = (conflict); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
 }
      else
 {
   do { HARD_REG_ELT_TYPE *scan_tp_ = (conflict), *scan_fp_ = (usable_regs [reg_preferred_class (web->regno)]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0)
                                           ;
   do { HARD_REG_ELT_TYPE *scan_tp_ = (conflict), *scan_fp_ = (usable_regs [reg_alternate_class (web->regno)]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0)
                                          ;
   do { HARD_REG_ELT_TYPE *scan_tp_ = (conflict), *scan_fp_ = (allowed); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
 }
      if (dump_file)
 {
   int c;
   ra_debug_msg (0x0020, " ASM constrain Web %d conflicts with:", web->id);
   for (c = 0; c < 53; c++)
     if ((!!((conflict)[(c) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c) % ((unsigned) (8 * 4)))))))
       ra_debug_msg (0x0020, " %d", c);
   ra_debug_msg (0x0020, "\n");
 }
    }
}
void
build_i_graph (struct df *df)
{
  rtx insn;
  init_web_parts (df);
  sbitmap_zero (move_handled);
  wl_moves = ((void *)0);
  build_web_parts_and_conflicts (df);
  connect_rmw_web_parts (df);
  make_webs (df);
  moves_to_webs (df);
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    handle_asm_insn (df, insn);
}
void
ra_build_realloc (struct df *df)
{
  struct web_part *last_web_parts = web_parts;
  struct web **last_def2web = def2web;
  struct web **last_use2web = use2web;
  sbitmap last_live_over_abnormal = live_over_abnormal;
  unsigned int i;
  struct dlist *d;
  move_handled = sbitmap_alloc (get_max_uid () );
  web_parts = xcalloc (df->def_id + df->use_id, sizeof web_parts[0]);
  def2web = xcalloc (df->def_id + df->use_id, sizeof def2web[0]);
  use2web = &def2web[df->def_id];
  live_over_abnormal = sbitmap_alloc (df->use_id);
  sbitmap_zero (live_over_abnormal);
  for (i = 0; i < last_def_id + last_use_id; i++)
    {
      struct web_part *dest = &web_parts[i < last_def_id
      ? i : (df->def_id + i - last_def_id)];
      struct web_part *up;
      *dest = last_web_parts[i];
      up = dest->uplink;
      dest->uplink = ((void *)0);
      if (up && up->ref)
 {
   unsigned int id = ((up->ref)->id);
   if (up < &last_web_parts[last_def_id])
     {
       if (df->defs[id])
         dest->uplink = &web_parts[((up->ref)->id)];
     }
   else if (df->uses[id])
     dest->uplink = &web_parts[df->def_id + ((up->ref)->id)];
 }
    }
  for (i = 0; i < last_def_id; i++)
    {
      struct web *web = last_def2web[i];
      if (web)
 {
   web = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
   if (web->type != FREE && web->type != PRECOLORED)
     def2web[i] = last_def2web[i];
 }
    }
  for (i = 0; i < last_use_id; i++)
    {
      struct web *web = last_use2web[i];
      if (web)
 {
   web = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
   if (web->type != FREE && web->type != PRECOLORED)
     use2web[i] = last_use2web[i];
 }
      if (((last_live_over_abnormal)->elms [(i) / ((unsigned) (8 * 4))] >> (i) % ((unsigned) (8 * 4)) & 1))
 ((live_over_abnormal)->elms [(i) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (i) % ((unsigned) (8 * 4)));
    }
  for (d = (web_lists[(int)(FREE)]); d; d = d->next)
    {
      struct web *web = ((d)->value1.web);
      struct web *wnext;
      for (web = web->subreg_next; web; web = wnext)
 {
   wnext = web->subreg_next;
   free (web);
 }
      ((d)->value1.web)->subreg_next = ((void *)0);
    }
  if (last_check_uses)
    sbitmap_difference (live_over_abnormal, live_over_abnormal,
          last_check_uses);
  if (last_def_id || last_use_id)
    {
      free(last_live_over_abnormal);
      free (last_web_parts);
      free (last_def2web);
    }
  if (!last_max_uid)
    {
      copy_cache = xcalloc (get_max_uid (), sizeof (copy_cache[0]));
      init_bb_info ();
    }
  else
    {
      copy_cache = xrealloc (copy_cache, get_max_uid () * sizeof (copy_cache[0]));
      memset (&copy_cache[last_max_uid], 0,
       (get_max_uid () - last_max_uid) * sizeof (copy_cache[0]));
    }
}
void
ra_build_free (void)
{
  struct dlist *d;
  unsigned int i;
  for (i = 0; i < num_webs; i++)
    {
      struct web *web = id2web[i];
      if (!web)
 abort ();
      if (i >= num_webs - num_subwebs
   && (web->conflict_list || web->orig_conflict_list))
 abort ();
      web->moves = ((void *)0);
    }
  for (d = (web_lists[(int)(FREE)]); d; d = d->next)
    {
      struct web *web = ((d)->value1.web);
      if (web->defs)
 free (web->defs);
      web->defs = ((void *)0);
      if (web->uses)
 free (web->uses);
      web->uses = ((void *)0);
    }
  for (i = 0; i < df->def_id + df->use_id; i++)
    {
      struct tagged_conflict *cl;
      for (cl = web_parts[i].sub_conflicts; cl; cl = cl->next)
 {
   if (cl->conflicts)
     do { if (cl->conflicts) { bitmap_clear (cl->conflicts); free (cl->conflicts); (cl->conflicts) = 0; } } while (0);
 }
      web_parts[i].sub_conflicts = ((void *)0);
    }
  wl_moves = ((void *)0);
  free (id2web);
  free (move_handled);
  free(sup_igraph);
  free(igraph);
}
void
ra_build_free_all (struct df *df)
{
  unsigned int i;
  free_bb_info_ra ();
  free (copy_cache);
  copy_cache = ((void *)0);
  for (i = 0; i < df->def_id + df->use_id; i++)
    {
      struct tagged_conflict *cl;
      for (cl = web_parts[i].sub_conflicts; cl; cl = cl->next)
 {
   if (cl->conflicts)
     do { if (cl->conflicts) { bitmap_clear (cl->conflicts); free (cl->conflicts); (cl->conflicts) = 0; } } while (0);
 }
      web_parts[i].sub_conflicts = ((void *)0);
    }
  free(live_over_abnormal);
  free (web_parts);
  web_parts = ((void *)0);
  if (last_check_uses)
    free(last_check_uses);
  last_check_uses = ((void *)0);
  free (def2web);
  use2web = ((void *)0);
  def2web = ((void *)0);
}
const struct ggc_root_tab gt_ggc_r_gt_ra_build_h[] = {
  {
    &remat_test_insn,
    1,
    sizeof (remat_test_insn),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static void push_list (struct dlist *, struct dlist **);
static void push_list_end (struct dlist *, struct dlist **);
static void free_dlist (struct dlist **);
static void put_web_at_end (struct web *, enum node_type);
static void put_move (struct move *, enum move_type);
static void build_worklists (struct df *);
static void enable_move (struct web *);
static void decrement_degree (struct web *, int);
static void simplify (void);
static void remove_move_1 (struct web *, struct move *);
static void remove_move (struct web *, struct move *);
static void add_worklist (struct web *);
static int ok (struct web *, struct web *);
static int conservative (struct web *, struct web *);
static unsigned int simplify_p (enum node_type);
static void combine (struct web *, struct web *);
static void coalesce (void);
static void freeze_moves (struct web *);
static void freeze (void);
static void select_spill (void);
static int color_usable_p (int, HARD_REG_SET, HARD_REG_SET,
      enum machine_mode);
int get_free_reg (HARD_REG_SET, HARD_REG_SET, enum machine_mode);
static int get_biased_reg (HARD_REG_SET, HARD_REG_SET, HARD_REG_SET,
      HARD_REG_SET, enum machine_mode);
static int count_long_blocks (HARD_REG_SET, int);
static char * hardregset_to_string (HARD_REG_SET);
static void calculate_dont_begin (struct web *, HARD_REG_SET *);
static void colorize_one_web (struct web *, int);
static void assign_colors (void);
static void try_recolor_web (struct web *);
static void insert_coalesced_conflicts (void);
static int comp_webs_maxcost (const void *, const void *);
static void recolor_spills (void);
static void check_colors (void);
static void restore_conflicts_from_coalesce (struct web *);
static void break_coalesced_spills (void);
static void unalias_web (struct web *);
static void break_aliases_to_web (struct web *);
static void break_precolored_alias (struct web *);
static void init_web_pairs (void);
static void add_web_pair_cost (struct web *, struct web *,
                 unsigned long, unsigned int);
static int comp_web_pairs (const void *, const void *);
static void sort_and_combine_web_pairs (int);
static void aggressive_coalesce (void);
static void extended_coalesce_2 (void);
static void check_uncoalesced_moves (void);
static struct dlist *mv_worklist, *mv_coalesced, *mv_constrained;
static struct dlist *mv_frozen, *mv_active;
static void
push_list (struct dlist *x, struct dlist **list)
{
  if (x->next || x->prev)
    abort ();
  x->next = *list;
  if (*list)
    (*list)->prev = x;
  *list = x;
}
static void
push_list_end (struct dlist *x, struct dlist **list)
{
  if (x->prev || x->next)
    abort ();
  if (!*list)
    {
      *list = x;
      return;
    }
  while ((*list)->next)
    list = &((*list)->next);
  x->prev = *list;
  (*list)->next = x;
}
void
remove_list (struct dlist *x, struct dlist **list)
{
  struct dlist *y = x->prev;
  if (y)
    y->next = x->next;
  else
    *list = x->next;
  y = x->next;
  if (y)
    y->prev = x->prev;
  x->next = x->prev = ((void *)0);
}
struct dlist *
pop_list (struct dlist **list)
{
  struct dlist *r = *list;
  if (r)
    remove_list (r, list);
  return r;
}
static void
free_dlist (struct dlist **list)
{
  *list = ((void *)0);
}
void
put_web (struct web *web, enum node_type type)
{
  switch (type)
    {
      case INITIAL:
      case FREE:
      case FREEZE:
      case SPILL:
      case SPILLED:
      case COALESCED:
      case COLORED:
      case SELECT:
 push_list (web->dlink, &(web_lists[(int)(type)]));
 break;
      case PRECOLORED:
 push_list (web->dlink, &(web_lists[(int)(INITIAL)]));
 break;
      case SIMPLIFY:
 if (web->spill_temp)
   push_list (web->dlink, &(web_lists[(int)(type = SIMPLIFY_SPILL)]));
 else if (web->add_hardregs)
   push_list (web->dlink, &(web_lists[(int)(type = SIMPLIFY_FAT)]));
 else
   push_list (web->dlink, &(web_lists[(int)(SIMPLIFY)]));
 break;
      default:
 abort ();
    }
  web->type = type;
}
void
reset_lists (void)
{
  struct dlist *d;
  unsigned int i;
  if ((web_lists[(int)(SIMPLIFY)]) || (web_lists[(int)(SIMPLIFY_SPILL)]) || (web_lists[(int)(SIMPLIFY_FAT)])
      || (web_lists[(int)(FREEZE)]) || (web_lists[(int)(SPILL)]) || (web_lists[(int)(SELECT)]))
    abort ();
  while ((d = pop_list (&(web_lists[(int)(COALESCED)]))) != ((void *)0))
    {
      struct web *web = ((d)->value1.web);
      struct web *aweb = alias (web);
      if (aweb->type == SPILLED || aweb->type == FREE)
 put_web (web, FREE);
      else
 put_web (web, INITIAL);
    }
  while ((d = pop_list (&(web_lists[(int)(SPILLED)]))) != ((void *)0))
    put_web (((d)->value1.web), FREE);
  while ((d = pop_list (&(web_lists[(int)(COLORED)]))) != ((void *)0))
    put_web (((d)->value1.web), INITIAL);
  for (d = (web_lists[(int)(FREE)]); d; d = d->next)
    {
      struct web *web = ((d)->value1.web);
      do { if (web->useless_conflicts) { bitmap_clear (web->useless_conflicts); free (web->useless_conflicts); (web->useless_conflicts) = 0; } } while (0);
      web->useless_conflicts = ((void *)0);
    }
  for (i = 0; i < num_webs; i++)
    {
      struct web *web = id2web[i];
      if (web->type != INITIAL && web->type != FREE && web->type != PRECOLORED)
 abort ();
    }
  free_dlist (&mv_worklist);
  free_dlist (&mv_coalesced);
  free_dlist (&mv_constrained);
  free_dlist (&mv_frozen);
  free_dlist (&mv_active);
}
static void
put_web_at_end (struct web *web, enum node_type type)
{
  if (type == PRECOLORED)
    type = INITIAL;
  else if (type == SIMPLIFY)
    abort ();
  push_list_end (web->dlink, &(web_lists[(int)(type)]));
  web->type = type;
}
void
remove_web_from_list (struct web *web)
{
  if (web->type == PRECOLORED)
    remove_list (web->dlink, &(web_lists[(int)(INITIAL)]));
  else
    remove_list (web->dlink, &(web_lists[(int)(web->type)]));
}
static void
put_move (struct move *move, enum move_type type)
{
  switch (type)
    {
      case WORKLIST:
 push_list (move->dlink, &mv_worklist);
 break;
      case MV_COALESCED:
 push_list (move->dlink, &mv_coalesced);
 break;
      case CONSTRAINED:
 push_list (move->dlink, &mv_constrained);
 break;
      case FROZEN:
 push_list (move->dlink, &mv_frozen);
 break;
      case ACTIVE:
 push_list (move->dlink, &mv_active);
 break;
      default:
 abort ();
    }
  move->type = type;
}
static void
build_worklists (struct df *df )
{
  struct dlist *d, *d_next;
  struct move_list *ml;
  if (ra_pass > 1)
    {
      unsigned int i, num, max_num;
      struct web **order2web;
      max_num = num_webs - num_subwebs;
      order2web = xmalloc (max_num * sizeof (order2web[0]));
      for (i = 0, num = 0; i < max_num; i++)
 if (id2web[i]->regno >= max_normal_pseudo)
   order2web[num++] = id2web[i];
      if (num)
 {
   qsort (order2web, num, sizeof (order2web[0]), comp_webs_maxcost);
   for (i = num - 1;; i--)
     {
       struct web *web = order2web[i];
       struct conflict_link *wl;
       remove_list (web->dlink, &(web_lists[(int)(INITIAL)]));
       put_web (web, SELECT);
       for (wl = web->conflict_list; wl; wl = wl->next)
  {
    struct web *pweb = wl->t;
    pweb->num_conflicts -= 1 + web->add_hardregs;
  }
       if (i == 0)
  break;
     }
 }
      free (order2web);
    }
  for (d = (web_lists[(int)(INITIAL)]); d; d = d_next)
    {
      struct web *web = ((d)->value1.web);
      d_next = d->next;
      if (web->type == PRECOLORED)
        continue;
      remove_list (d, &(web_lists[(int)(INITIAL)]));
      if (web->num_conflicts >= (((web)->type == PRECOLORED) ? 1 : (web)->num_freedom))
 put_web (web, SPILL);
      else if (web->moves)
 put_web (web, FREEZE);
      else
 put_web (web, SIMPLIFY);
    }
  for (ml = wl_moves; ml; ml = ml->next)
    if (ml->move)
      {
 struct move *m = ml->move;
        d = ra_calloc (sizeof (struct dlist));
        ((d)->value1.move) = m;
        m->dlink = d;
 put_move (m, WORKLIST);
      }
}
static void
enable_move (struct web *web)
{
  struct move_list *ml;
  for (ml = web->moves; ml; ml = ml->next)
    if (ml->move->type == ACTIVE)
      {
 remove_list (ml->move->dlink, &mv_active);
 put_move (ml->move, WORKLIST);
      }
}
static void
decrement_degree (struct web *web, int dec)
{
  int before = web->num_conflicts;
  web->num_conflicts -= dec;
  if (web->num_conflicts < (((web)->type == PRECOLORED) ? 1 : (web)->num_freedom) && before >= (((web)->type == PRECOLORED) ? 1 : (web)->num_freedom))
    {
      struct conflict_link *a;
      enable_move (web);
      for (a = web->conflict_list; a; a = a->next)
 {
   struct web *aweb = a->t;
   if (aweb->type != SELECT && aweb->type != COALESCED)
     enable_move (aweb);
 }
      if (web->type != FREEZE)
 {
   remove_web_from_list (web);
   if (web->moves)
     put_web (web, FREEZE);
   else
     put_web (web, SIMPLIFY);
 }
    }
}
static void
simplify (void)
{
  struct dlist *d;
  struct web *web;
  struct conflict_link *wl;
  while (1)
    {
      d = pop_list (&(web_lists[(int)(SIMPLIFY)]));
      if (!d)
 d = pop_list (&(web_lists[(int)(SIMPLIFY_FAT)]));
      if (!d)
 d = pop_list (&(web_lists[(int)(SIMPLIFY_SPILL)]));
      if (!d)
 break;
      web = ((d)->value1.web);
      ra_debug_msg (0x0008, " simplifying web %3d, conflicts = %d\n",
   web->id, web->num_conflicts);
      put_web (web, SELECT);
      for (wl = web->conflict_list; wl; wl = wl->next)
 {
   struct web *pweb = wl->t;
   if (pweb->type != SELECT && pweb->type != COALESCED)
     {
       decrement_degree (pweb, 1 + web->add_hardregs);
     }
 }
    }
}
static void
remove_move_1 (struct web *web, struct move *move)
{
  struct move_list *ml = web->moves;
  if (!ml)
    return;
  if (ml->move == move)
    {
      web->moves = ml->next;
      return;
    }
  for (; ml->next && ml->next->move != move; ml = ml->next) ;
  if (!ml->next)
    return;
  ml->next = ml->next->next;
}
static void
remove_move (struct web *web, struct move *move)
{
  struct move_list *ml;
  remove_move_1 (web, move);
  for (ml = web->moves; ml; ml = ml->next)
    if (ml->move == move)
      abort ();
}
void
merge_moves (struct web *u, struct web *v)
{
  regset seen;
  struct move_list *ml, *ml_next;
  seen = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (ml = u->moves; ml; ml = ml->next)
    bitmap_set_bit (seen, (((ml->move->insn)->u.fld[0]).rtint));
  for (ml = v->moves; ml; ml = ml_next)
    {
      ml_next = ml->next;
      if (! bitmap_bit_p (seen, (((ml->move->insn)->u.fld[0]).rtint)))
        {
   ml->next = u->moves;
   u->moves = ml;
 }
    }
  do { if (seen) { bitmap_clear (seen); free (seen); (seen) = 0; } } while (0);
  v->moves = ((void *)0);
}
static void
add_worklist (struct web *web)
{
  if (web->type != PRECOLORED && !web->moves
      && web->num_conflicts < (((web)->type == PRECOLORED) ? 1 : (web)->num_freedom))
    {
      remove_list (web->dlink, &(web_lists[(int)(FREEZE)]));
      put_web (web, SIMPLIFY);
    }
}
static int
ok (struct web *target, struct web *source)
{
  struct conflict_link *wl;
  int i;
  int color = source->color;
  int size;
  if (! ix86_hard_regno_mode_ok ((source->color), (((enum machine_mode) (target->orig_x)->mode))))
    return 0;
  size = hard_regno_nregs[color][((enum machine_mode) (target->orig_x)->mode)];
  if (!size)
    return 0;
  for (i = size; i--;)
    if ((!!((never_use_colors)[(color + i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((color + i) % ((unsigned) (8 * 4))))))
 || !(!!((target->usable_regs)[(color + i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((color + i) % ((unsigned) (8 * 4))))))
 || ((sup_igraph)->elms [(target->id * num_webs + hardreg2web[color + i]->id) / ((unsigned) (8 * 4))] >> (target->id * num_webs + hardreg2web[color + i]->id) % ((unsigned) (8 * 4)) & 1)
                                                          )
      return 0;
  for (wl = target->conflict_list; wl; wl = wl->next)
    {
      struct web *pweb = wl->t;
      if (pweb->type == SELECT || pweb->type == COALESCED)
 continue;
      if (pweb->num_conflicts < (((pweb)->type == PRECOLORED) ? 1 : (pweb)->num_freedom)
   || pweb->type == PRECOLORED
   || ((igraph)->elms [(((source->id) < (pweb->id) ? ((pweb->id)*((pweb->id)-1)/2)+(source->id) : ((source->id)*((source->id)-1)/2)+(pweb->id))) / ((unsigned) (8 * 4))] >> (((source->id) < (pweb->id) ? ((pweb->id)*((pweb->id)-1)/2)+(source->id) : ((source->id)*((source->id)-1)/2)+(pweb->id))) % ((unsigned) (8 * 4)) & 1) )
 continue;
      if (wl->sub == ((void *)0))
        return 0;
      else
 {
   struct sub_conflict *sl;
   for (sl = wl->sub; sl; sl = sl->next)
     {
              if (!((igraph)->elms [(((source->id) < (sl->t->id) ? ((sl->t->id)*((sl->t->id)-1)/2)+(source->id) : ((source->id)*((source->id)-1)/2)+(sl->t->id))) / ((unsigned) (8 * 4))] >> (((source->id) < (sl->t->id) ? ((sl->t->id)*((sl->t->id)-1)/2)+(source->id) : ((source->id)*((source->id)-1)/2)+(sl->t->id))) % ((unsigned) (8 * 4)) & 1))
         return 0;
     }
        }
    }
  return 1;
}
static int
conservative (struct web *target, struct web *source)
{
  unsigned int k;
  unsigned int loop;
  regset seen;
  struct conflict_link *wl;
  unsigned int num_regs = (((target)->type == PRECOLORED) ? 1 : (target)->num_freedom);
  k = 0 * ((target->add_hardregs) > (source->add_hardregs) ? (target->add_hardregs) : (source->add_hardregs));
  seen = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (loop = 0; loop < 2; loop++)
    for (wl = ((loop == 0) ? target : source)->conflict_list;
  wl; wl = wl->next)
      {
 struct web *pweb = wl->t;
 if (pweb->type != SELECT && pweb->type != COALESCED
     && pweb->num_conflicts >= (((pweb)->type == PRECOLORED) ? 1 : (pweb)->num_freedom)
     && ! bitmap_bit_p (seen, pweb->id))
   {
     bitmap_set_bit (seen, pweb->id);
     k += 1 + pweb->add_hardregs;
   }
      }
  do { if (seen) { bitmap_clear (seen); free (seen); (seen) = 0; } } while (0);
  if (k >= num_regs)
    return 0;
  return 1;
}
struct web *
alias (struct web *web)
{
  while (web->type == COALESCED)
    web = web->alias;
  return web;
}
static unsigned int
simplify_p (enum node_type type)
{
  return type == SIMPLIFY || type == SIMPLIFY_SPILL || type == SIMPLIFY_FAT;
}
static void
combine (struct web *u, struct web *v)
{
  int i;
  struct conflict_link *wl;
  if (u == v || v->type == COALESCED)
    abort ();
  if ((u->regno >= max_normal_pseudo) != (v->regno >= max_normal_pseudo))
    abort ();
  remove_web_from_list (v);
  put_web (v, COALESCED);
  v->alias = u;
  u->is_coalesced = 1;
  v->is_coalesced = 1;
  u->num_aliased += 1 + v->num_aliased;
  if (flag_ra_merge_spill_costs && u->type != PRECOLORED)
    u->spill_cost += v->spill_cost;
  merge_moves (u, v);
  for (wl = v->conflict_list; wl; wl = wl->next)
    {
      struct web *pweb = wl->t;
      if (1)
 {
   struct web *web = u;
   int nregs = 1 + v->add_hardregs;
   if (u->type == PRECOLORED)
     nregs = hard_regno_nregs[u->color][((enum machine_mode) (v->orig_x)->mode)];
   for (i = 0; i < nregs; i++)
     {
       if (u->type == PRECOLORED)
  web = hardreg2web[i + u->color];
       if (wl->sub == ((void *)0))
  record_conflict (web, pweb);
       else
  {
    struct sub_conflict *sl;
    for (sl = wl->sub; sl; sl = sl->next)
      {
        struct web *sweb = ((void *)0);
        if ((((enum rtx_code) ((sl->s)->orig_x)->code) == SUBREG))
   sweb = find_subweb (web, sl->s->orig_x);
        if (!sweb)
   sweb = web;
        record_conflict (sweb, sl->t);
      }
  }
       if (u->type != PRECOLORED)
  break;
     }
   if (pweb->type != SELECT && pweb->type != COALESCED)
     decrement_degree (pweb, 1 + v->add_hardregs);
 }
    }
  u->use_my_regs = 1;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (u->usable_regs), *scan_fp_ = (v->usable_regs); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0);
  u->regclass = reg_class_subunion[u->regclass][v->regclass];
  u->num_freedom = hard_regs_count (u->usable_regs);
  u->num_freedom -= u->add_hardregs;
  if (!u->num_freedom)
    abort();
  if (u->num_conflicts >= (((u)->type == PRECOLORED) ? 1 : (u)->num_freedom)
      && (u->type == FREEZE || simplify_p (u->type)))
    {
      remove_web_from_list (u);
      put_web (u, SPILL);
    }
  if (v->spill_temp == 0)
    u->spill_temp = 0;
  else if (v->spill_temp == 2 && u->spill_temp != 0)
    u->spill_temp = 2;
  else if (v->spill_temp == 3 && u->spill_temp == 1)
    u->spill_temp = 3;
}
static void
coalesce (void)
{
  struct dlist *d = pop_list (&mv_worklist);
  struct move *m = ((d)->value1.move);
  struct web *source = alias (m->source_web);
  struct web *target = alias (m->target_web);
  if (target->type == PRECOLORED)
    {
      struct web *h = source;
      source = target;
      target = h;
    }
  if (source == target)
    {
      remove_move (source, m);
      put_move (m, MV_COALESCED);
      add_worklist (source);
    }
  else if (target->type == PRECOLORED
    || ((sup_igraph)->elms [(source->id * num_webs + target->id) / ((unsigned) (8 * 4))] >> (source->id * num_webs + target->id) % ((unsigned) (8 * 4)) & 1)
    || ((sup_igraph)->elms [(target->id * num_webs + source->id) / ((unsigned) (8 * 4))] >> (target->id * num_webs + source->id) % ((unsigned) (8 * 4)) & 1))
    {
      remove_move (source, m);
      remove_move (target, m);
      put_move (m, CONSTRAINED);
      add_worklist (source);
      add_worklist (target);
    }
  else if ((source->type == PRECOLORED && ok (target, source))
    || (source->type != PRECOLORED
        && conservative (target, source)))
    {
      remove_move (source, m);
      remove_move (target, m);
      put_move (m, MV_COALESCED);
      combine (source, target);
      add_worklist (source);
    }
  else
    put_move (m, ACTIVE);
}
static void
freeze_moves (struct web *web)
{
  struct move_list *ml, *ml_next;
  for (ml = web->moves; ml; ml = ml_next)
    {
      struct move *m = ml->move;
      struct web *src, *dest;
      ml_next = ml->next;
      if (m->type == ACTIVE)
 remove_list (m->dlink, &mv_active);
      else
 remove_list (m->dlink, &mv_worklist);
      put_move (m, FROZEN);
      remove_move (web, m);
      src = alias (m->source_web);
      dest = alias (m->target_web);
      src = (src == web) ? dest : src;
      remove_move (src, m);
      if (!src->moves && src->num_conflicts < (((src)->type == PRECOLORED) ? 1 : (src)->num_freedom))
 {
   remove_list (src->dlink, &(web_lists[(int)(FREEZE)]));
   put_web (src, SIMPLIFY);
 }
    }
}
static void
freeze (void)
{
  struct dlist *d = pop_list (&(web_lists[(int)(FREEZE)]));
  put_web (((d)->value1.web), SIMPLIFY);
  freeze_moves (((d)->value1.web));
}
static unsigned long (*spill_heuristic) (struct web *);
static unsigned long default_spill_heuristic (struct web *);
static unsigned long
default_spill_heuristic (struct web *web)
{
  unsigned long ret;
  unsigned int divisor = 1;
  if (flag_ra_break_aliases)
    divisor += web->num_aliased;
  divisor += web->num_conflicts;
  ret = ((web->spill_cost << 8) + divisor - 1) / divisor;
  if (web->span_deaths < ret)
    ret -= web->span_deaths;
  return ret;
}
static void
select_spill (void)
{
  unsigned long best = (unsigned long) -1;
  struct dlist *bestd = ((void *)0);
  unsigned long best2 = (unsigned long) -1;
  struct dlist *bestd2 = ((void *)0);
  struct dlist *d;
  for (d = (web_lists[(int)(SPILL)]); d; d = d->next)
    {
      struct web *w = ((d)->value1.web);
      unsigned long cost = spill_heuristic (w);
      if ((!w->spill_temp) && cost < best)
 {
   best = cost;
   bestd = d;
 }
      else if ((w->spill_temp == 2 || w->is_coalesced) && cost < best2)
 {
   best2 = cost;
   bestd2 = d;
 }
    }
  if (!bestd)
    {
      bestd = bestd2;
      best = best2;
    }
  if (!bestd)
    abort ();
  ((bestd)->value1.web)->was_spilled = 1;
  remove_list (bestd, &(web_lists[(int)(SPILL)]));
  put_web (((bestd)->value1.web), SIMPLIFY);
  freeze_moves (((bestd)->value1.web));
  ra_debug_msg (0x0008, " potential spill web %3d, conflicts = %d\n",
      ((bestd)->value1.web)->id, ((bestd)->value1.web)->num_conflicts);
}
static int
color_usable_p (int c, HARD_REG_SET dont_begin_colors,
  HARD_REG_SET free_colors, enum machine_mode mode)
{
  if (!(!!((dont_begin_colors)[(c) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c) % ((unsigned) (8 * 4))))))
      && (!!((free_colors)[(c) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c) % ((unsigned) (8 * 4))))))
      && ix86_hard_regno_mode_ok ((c), (mode)))
    {
      int i, size;
      size = hard_regno_nregs[c][mode];
      for (i = 1; i < size && (!!((free_colors)[(c + i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c + i) % ((unsigned) (8 * 4)))))); i++);
      if (i == size)
 return 1;
    }
  return 0;
}
int
get_free_reg (HARD_REG_SET dont_begin_colors, HARD_REG_SET free_colors,
       enum machine_mode mode)
{
  int c;
  int last_resort_reg = -1;
  int pref_reg = -1;
  int pref_reg_order = 2147483647;
  int last_resort_reg_order = 2147483647;
  for (c = 0; c < 53; c++)
    if (!(!!((dont_begin_colors)[(c) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c) % ((unsigned) (8 * 4))))))
 && (!!((free_colors)[(c) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c) % ((unsigned) (8 * 4))))))
 && ix86_hard_regno_mode_ok ((c), (mode)))
      {
 int i, size;
 size = hard_regno_nregs[c][mode];
 for (i = 1; i < size && (!!((free_colors)[(c + i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c + i) % ((unsigned) (8 * 4)))))); i++);
 if (i != size)
   {
     c += i;
     continue;
   }
 if (i == size)
   {
     if (size < 2 || (c & 1) == 0)
       {
  if (inv_reg_alloc_order[c] < pref_reg_order)
    {
      pref_reg = c;
      pref_reg_order = inv_reg_alloc_order[c];
    }
       }
     else if (inv_reg_alloc_order[c] < last_resort_reg_order)
       {
  last_resort_reg = c;
  last_resort_reg_order = inv_reg_alloc_order[c];
       }
   }
 else
   c += i;
      }
  return pref_reg >= 0 ? pref_reg : last_resort_reg;
}
static int
get_biased_reg (HARD_REG_SET dont_begin_colors, HARD_REG_SET bias,
  HARD_REG_SET prefer_colors, HARD_REG_SET free_colors,
  enum machine_mode mode)
{
  int c = -1;
  HARD_REG_SET s;
  if (flag_ra_biased)
    {
      do { HARD_REG_ELT_TYPE *scan_tp_ = (s), *scan_fp_ = (dont_begin_colors); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (s), *scan_fp_ = (bias); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (s), *scan_fp_ = (prefer_colors); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0);
      c = get_free_reg (s, free_colors, mode);
      if (c >= 0)
 return c;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (s), *scan_fp_ = (dont_begin_colors); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (s), *scan_fp_ = (bias); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0);
      c = get_free_reg (s, free_colors, mode);
      if (c >= 0)
 return c;
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (s), *scan_fp_ = (dont_begin_colors); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (s), *scan_fp_ = (prefer_colors); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0);
  c = get_free_reg (s, free_colors, mode);
  if (c >= 0)
      return c;
  c = get_free_reg (dont_begin_colors, free_colors, mode);
  return c;
}
static int
count_long_blocks (HARD_REG_SET free_colors, int len)
{
  int i, j;
  int count = 0;
  for (i = 0; i < 53; i++)
    {
      if (!(!!((free_colors)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
 continue;
      for (j = 1; j < len; j++)
 if (!(!!((free_colors)[(i + j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i + j) % ((unsigned) (8 * 4)))))))
   break;
      if (j == len)
 count++;
      i += j - 1;
    }
  return count;
}
static char *
hardregset_to_string (HARD_REG_SET s)
{
  static char string1[ 1024];
  char *c = string1;
  int i,j;
  c += sprintf (c, "{ ");
  for (i = 0;i < ((53 + (8 * 4) - 1) / (8 * 4)); i++)
    {
      for (j = 0; j < (8 * 4); j++)
   c += sprintf (c, "%s", ( 1 << j) & s[i] ? "1" : "0");
      c += sprintf (c, "%s", i ? ", " : "");
    }
  c += sprintf (c, " }");
  return string1;
}
static void
calculate_dont_begin (struct web *web, HARD_REG_SET *result)
{
  struct conflict_link *wl;
  HARD_REG_SET dont_begin;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (dont_begin); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (wl = web->conflict_list; wl; wl = wl->next)
    {
      struct web *w;
      struct web *ptarget = alias (wl->t);
      struct sub_conflict *sl = wl->sub;
      w = sl ? sl->t : wl->t;
      while (w)
 {
   if (ptarget->type == COLORED || ptarget->type == PRECOLORED)
     {
       struct web *source = (sl) ? sl->s : web;
       unsigned int tsize = hard_regno_nregs[ptarget->color]
         [((enum machine_mode) (w->orig_x)->mode)];
       unsigned int ssize = hard_regno_nregs[ptarget->color][((enum machine_mode) (source->orig_x)->mode)
                                 ];
       unsigned int tofs = 0;
       unsigned int sofs = 0;
       int c1, c2;
       if ((((enum rtx_code) ((w)->orig_x)->code) == SUBREG)
    && ((unsigned short) mode_size[((enum machine_mode) (w->orig_x)->mode)]) >= (0 ? 8 : 4))
  tofs = ((((w->orig_x)->u.fld[1]).rtuint) / (0 ? 8 : 4));
       if ((((enum rtx_code) ((source)->orig_x)->code) == SUBREG)
    && ((unsigned short) mode_size[((enum machine_mode) (source->orig_x)->mode)])
       >= (0 ? 8 : 4))
  sofs = ((((source->orig_x)->u.fld[1]).rtuint) / (0 ? 8 : 4));
       c1 = ptarget->color + tofs - sofs - ssize + 1;
       c2 = ptarget->color + tofs + tsize - 1 - sofs;
       if (c2 >= 0)
  {
    if (c1 < 0)
      c1 = 0;
    while (c1 + sofs
    + hard_regno_nregs[c1][((enum machine_mode) (source->orig_x)->mode)] - 1
    < ptarget->color + tofs)
      c1++;
    while (c1 > 0 && c1 + sofs
    + hard_regno_nregs[c1][((enum machine_mode) (source->orig_x)->mode)] - 1
    > ptarget->color + tofs)
      c1--;
    for (; c1 <= c2; c1++)
      ((dont_begin)[(c1) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((c1) % ((unsigned) (8 * 4))));
  }
     }
   if (!sl)
     break;
   sl = sl->next;
   w = sl ? sl->t : ((void *)0);
 }
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (*result), *scan_fp_ = (dont_begin); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
}
static void
colorize_one_web (struct web *web, int hard)
{
  struct conflict_link *wl;
  HARD_REG_SET colors, dont_begin;
  int c = -1;
  int bestc = -1;
  int neighbor_needs= 0;
  struct web *fats_parent = ((void *)0);
  int num_fat = 0;
  int long_blocks = 0;
  int best_long_blocks = -1;
  HARD_REG_SET fat_colors;
  HARD_REG_SET bias;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (fat_colors); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if (web->regno >= max_normal_pseudo)
    hard = 0;
  calculate_dont_begin (web, &dont_begin);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (bias); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  neighbor_needs = web->add_hardregs + 1;
  for (wl = web->conflict_list; wl; wl = wl->next)
    {
      struct web *w;
      struct web *ptarget = alias (wl->t);
      struct sub_conflict *sl = wl->sub;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (bias), *scan_fp_ = (ptarget->bias_colors); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
      w = sl ? sl->t : wl->t;
      if (ptarget->type != COLORED && ptarget->type != PRECOLORED
   && !ptarget->was_spilled)
        while (w)
   {
     if ((((w)->parent_web) ? find_web_for_subweb_1 ((w)->parent_web) : (w))->type != COALESCED
  && w->add_hardregs >= neighbor_needs)
       {
  neighbor_needs = w->add_hardregs;
  fats_parent = ptarget;
  num_fat++;
       }
     if (!sl)
       break;
     sl = sl->next;
     w = sl ? sl->t : ((void *)0);
   }
    }
  ra_debug_msg (0x0010, "colorize web %d [don't begin at %s]", web->id,
             hardregset_to_string (dont_begin));
  if (num_fat)
    {
      do { HARD_REG_ELT_TYPE *scan_tp_ = (fat_colors), *scan_fp_ = (fats_parent->usable_regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      long_blocks = count_long_blocks (fat_colors, neighbor_needs + 1);
    }
  while (1)
    {
      HARD_REG_SET call_clobbered;
      if (web->use_my_regs)
 {
   do { HARD_REG_ELT_TYPE *scan_tp_ = (colors), *scan_fp_ = (web->usable_regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (colors), *scan_fp_ = (usable_regs[reg_preferred_class (web->regno)]); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0)
                                                     ;
 }
      else
 do { HARD_REG_ELT_TYPE *scan_tp_ = (colors), *scan_fp_ = (usable_regs[reg_preferred_class (web->regno)]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0)
                                                    ;
      if (web->mode_changed)
        do { HARD_REG_ELT_TYPE *scan_tp_ = (colors), *scan_fp_ = (invalid_mode_change_regs); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (call_clobbered), *scan_fp_ = (colors); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (call_clobbered), *scan_fp_ = (call_used_reg_set); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0);
      if (web->old_color)
 {
   c = web->old_color - 1;
   if (!color_usable_p (c, dont_begin, colors,
          ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode)))
     c = -1;
 }
      else
 c = -1;
      if (c < 0)
 c = get_biased_reg (dont_begin, bias, web->prefer_colors,
       call_clobbered, ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode));
      if (c < 0)
 c = get_biased_reg (dont_begin, bias, web->prefer_colors,
     colors, ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode));
      if (c < 0)
 {
   if (web->use_my_regs)
     do { HARD_REG_ELT_TYPE *scan_tp_ = (colors), *scan_fp_ = (web->usable_regs); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
   else
     do { HARD_REG_ELT_TYPE *scan_tp_ = (colors), *scan_fp_ = (usable_regs [reg_alternate_class (web->regno)]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0)
                                            ;
   if (web->mode_changed)
     do { HARD_REG_ELT_TYPE *scan_tp_ = (colors), *scan_fp_ = (invalid_mode_change_regs); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (call_clobbered), *scan_fp_ = (colors); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (call_clobbered), *scan_fp_ = (call_used_reg_set); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0);
   c = get_biased_reg (dont_begin, bias, web->prefer_colors,
       call_clobbered, ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode));
   if (c < 0)
     c = get_biased_reg (dont_begin, bias, web->prefer_colors,
         colors, ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode));
 }
      if (c < 0)
 break;
      if (bestc < 0)
        bestc = c;
      if (num_fat)
 {
   int i;
   int new_long;
   HARD_REG_SET colors1;
   do { HARD_REG_ELT_TYPE *scan_tp_ = (colors1), *scan_fp_ = (fat_colors); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
   for (i = 0; i < 1 + web->add_hardregs; i++)
     ((colors1)[(c + i) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((c + i) % ((unsigned) (8 * 4)))));
   new_long = count_long_blocks (colors1, neighbor_needs + 1);
   if (long_blocks != new_long && new_long < num_fat)
     {
       if (new_long > best_long_blocks)
  {
    best_long_blocks = new_long;
    bestc = c;
  }
       ((dont_begin)[(c) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((c) % ((unsigned) (8 * 4))));
       ra_debug_msg (0x0010, " avoid %d", c);
     }
   else
     break;
 }
      else
 break;
    }
  ra_debug_msg (0x0010, " --> got %d", c < 0 ? bestc : c);
  if (bestc >= 0 && c < 0 && !web->was_spilled)
    {
      if (1 || web->spill_temp)
        c = bestc;
      ra_debug_msg (0x0010, " [constrains neighbors]");
    }
  ra_debug_msg (0x0010, "\n");
  if (c < 0)
    {
      if (hard && (!web->was_spilled || web->spill_temp))
 {
   unsigned int loop;
   struct web *try = ((void *)0);
   struct web *candidates[8];
   ra_debug_msg (0x0010, "  *** %d spilled, although %s ***\n",
       web->id, web->spill_temp ? "spilltemp" : "non-spill");
   memset (candidates, 0, sizeof candidates);
   for (wl = web->conflict_list; wl; wl = wl->next)
     {
       struct web *w = wl->t;
       struct web *aw = alias (w);
       if (aw->type == PRECOLORED && w != aw && web->spill_temp
    && flag_ra_optimistic_coalescing)
  {
    if (!w->spill_temp)
      do { if (!candidates[(4)] || (candidates[(4)]->spill_cost < (w)->spill_cost)) candidates[(4)] = (w); } while (0);
    else if (web->spill_temp == 2
      && w->spill_temp == 2
      && w->spill_cost < web->spill_cost)
      do { if (!candidates[(5)] || (candidates[(5)]->spill_cost < (w)->spill_cost)) candidates[(5)] = (w); } while (0);
    else if (web->spill_temp != 2
      && (w->spill_temp == 2
          || w->spill_cost < web->spill_cost))
      do { if (!candidates[(6)] || (candidates[(6)]->spill_cost < (w)->spill_cost)) candidates[(6)] = (w); } while (0);
    continue;
  }
       if (aw->type != COLORED)
  continue;
       if (w->type == COLORED && !w->spill_temp && !w->is_coalesced
    && w->was_spilled)
  {
    if (w->spill_cost < web->spill_cost)
      do { if (!candidates[(0)] || (candidates[(0)]->spill_cost < (w)->spill_cost)) candidates[(0)] = (w); } while (0);
    else if (web->spill_temp)
      do { if (!candidates[(1)] || (candidates[(1)]->spill_cost < (w)->spill_cost)) candidates[(1)] = (w); } while (0);
  }
       if (w->type == COLORED && !w->spill_temp && !w->is_coalesced
    && !w->was_spilled)
  {
    if (w->spill_cost < web->spill_cost)
      do { if (!candidates[(2)] || (candidates[(2)]->spill_cost < (w)->spill_cost)) candidates[(2)] = (w); } while (0);
    else if (web->spill_temp && web->spill_temp != 2)
      do { if (!candidates[(3)] || (candidates[(3)]->spill_cost < (w)->spill_cost)) candidates[(3)] = (w); } while (0);
  }
       if (web->spill_temp)
  {
    if (w->type == COLORED && w->spill_temp == 2
        && !w->is_coalesced
        && (w->spill_cost < web->spill_cost
     || web->spill_temp != 2))
      do { if (!candidates[(4)] || (candidates[(4)]->spill_cost < (w)->spill_cost)) candidates[(4)] = (w); } while (0);
    if (!aw->spill_temp)
      do { if (!candidates[(5)] || (candidates[(5)]->spill_cost < (aw)->spill_cost)) candidates[(5)] = (aw); } while (0);
    if (aw->spill_temp == 2
        && (aw->spill_cost < web->spill_cost
     || web->spill_temp != 2))
      do { if (!candidates[(6)] || (candidates[(6)]->spill_cost < (aw)->spill_cost)) candidates[(6)] = (aw); } while (0);
    if (web->spill_temp != 2 && aw->is_coalesced
        && flag_ra_optimistic_coalescing)
      do { if (!candidates[(7)] || (candidates[(7)]->spill_cost < (aw)->spill_cost)) candidates[(7)] = (aw); } while (0);
  }
     }
   for (loop = 0; try == ((void *)0) && loop < 8; loop++)
     if (candidates[loop])
       try = candidates[loop];
   if (try)
     {
       int old_c = try->color;
       if (try->type == COALESCED)
  {
    if (alias (try)->type != PRECOLORED)
      abort ();
    ra_debug_msg (0x0010, "  breaking alias %d -> %d\n",
        try->id, alias (try)->id);
    break_precolored_alias (try);
    colorize_one_web (web, hard);
  }
       else
  {
    remove_list (try->dlink, &(web_lists[(int)(COLORED)]));
    put_web (try, SPILLED);
    ra_debug_msg (0x0010, "  trying to spill %d\n", try->id);
    colorize_one_web (web, hard);
    if (web->type != COLORED)
      {
        remove_list (try->dlink, &(web_lists[(int)(SPILLED)]));
        put_web (try, COLORED);
        try->color = old_c;
        ra_debug_msg (0x0010,
        "  spilling %d was useless\n", try->id);
      }
    else
      {
        ra_debug_msg (0x0010,
        "  to spill %d was a good idea\n",
        try->id);
        remove_list (try->dlink, &(web_lists[(int)(SPILLED)]));
        if (try->was_spilled)
   colorize_one_web (try, 0);
        else
   colorize_one_web (try, hard - 1);
      }
  }
     }
   else
     put_web (web, SPILLED);
 }
      else
        put_web (web, SPILLED);
    }
  else
    {
      put_web (web, COLORED);
      web->color = c;
      if (flag_ra_biased)
 {
   int nregs = hard_regno_nregs[c][((enum machine_mode) (web->orig_x)->mode)];
   for (wl = web->conflict_list; wl; wl = wl->next)
     {
       struct web *ptarget = alias (wl->t);
       int i;
       for (i = 0; i < nregs; i++)
  ((ptarget->bias_colors)[(c + i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((c + i) % ((unsigned) (8 * 4))));
     }
 }
    }
  if (web->regno >= max_normal_pseudo && web->type == SPILLED)
    {
      web->color = an_unusable_color;
      remove_list (web->dlink, &(web_lists[(int)(SPILLED)]));
      put_web (web, COLORED);
    }
  if (web->type == SPILLED && flag_ra_optimistic_coalescing
      && web->is_coalesced)
    {
      ra_debug_msg (0x0010, "breaking aliases to web %d:", web->id);
      restore_conflicts_from_coalesce (web);
      break_aliases_to_web (web);
      insert_coalesced_conflicts ();
      ra_debug_msg (0x0010, "\n");
      remove_list (web->dlink, &(web_lists[(int)(SPILLED)]));
      put_web (web, SELECT);
      web->color = -1;
    }
}
static void
assign_colors (void)
{
  struct dlist *d;
  while ((web_lists[(int)(SELECT)]))
    {
      d = pop_list (&(web_lists[(int)(SELECT)]));
      colorize_one_web (((d)->value1.web), 1);
    }
  for (d = (web_lists[(int)(COALESCED)]); d; d = d->next)
    {
      struct web *a = alias (((d)->value1.web));
      ((d)->value1.web)->color = a->color;
    }
}
static void
try_recolor_web (struct web *web)
{
  struct conflict_link *wl;
  unsigned long *cost_neighbors;
  unsigned int *min_color;
  int newcol, c;
  HARD_REG_SET precolored_neighbors, spill_temps;
  HARD_REG_SET possible_begin, wide_seen;
  cost_neighbors = xcalloc (53, sizeof (cost_neighbors[0]));
  min_color = xcalloc (53, sizeof (int));
  do { HARD_REG_ELT_TYPE *scan_tp_ = (possible_begin); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (c = 0; c < 53; c++)
    {
      int i, nregs;
      if (!ix86_hard_regno_mode_ok ((c), (((enum machine_mode) (web->orig_x)->mode))))
 continue;
      nregs = hard_regno_nregs[c][((enum machine_mode) (web->orig_x)->mode)];
      for (i = 0; i < nregs; i++)
 if (!(!!((web->usable_regs)[(c + i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c + i) % ((unsigned) (8 * 4)))))))
   break;
      if (i < nregs || nregs == 0)
 continue;
      ((possible_begin)[(c) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((c) % ((unsigned) (8 * 4))));
      for (; nregs--;)
 if (!min_color[c + nregs])
   min_color[c + nregs] = 1 + c;
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (precolored_neighbors); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (spill_temps); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (wide_seen); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (wl = web->conflict_list; wl; wl = wl->next)
    {
      HARD_REG_SET dont_begin;
      struct web *web2 = alias (wl->t);
      struct conflict_link *nn;
      int c1, c2;
      int wide_p = 0;
      if (wl->t->type == COALESCED || web2->type != COLORED)
 {
   if (web2->type == PRECOLORED)
     {
       c1 = min_color[web2->color];
       c1 = (c1 == 0) ? web2->color : (c1 - 1);
       c2 = web2->color;
       for (; c1 <= c2; c1++)
         ((precolored_neighbors)[(c1) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((c1) % ((unsigned) (8 * 4))));
     }
   continue;
 }
      if (web2->add_hardregs)
 wide_p = 1;
      for (nn = web2->conflict_list; nn && !wide_p; nn = nn->next)
 if (alias (nn->t)->add_hardregs)
   wide_p = 1;
      calculate_dont_begin (web2, &dont_begin);
      c1 = min_color[web2->color];
      c1 = c1 == 0 ? web2->color : (c1 - 1);
      c2 = web2->color + hard_regno_nregs[web2->color][((enum machine_mode) (web2->orig_x)->mode)
                     ] - 1;
      for (; c1 <= c2; c1++)
 if ((!!((possible_begin)[(c1) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c1) % ((unsigned) (8 * 4)))))))
   {
     int nregs;
     HARD_REG_SET colors;
     nregs = hard_regno_nregs[c1][((enum machine_mode) (web->orig_x)->mode)];
     do { HARD_REG_ELT_TYPE *scan_tp_ = (colors), *scan_fp_ = (web2->usable_regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
     for (; nregs--;)
       ((colors)[(c1 + nregs) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((c1 + nregs) % ((unsigned) (8 * 4)))));
     if (wide_p)
       ((wide_seen)[(c1) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((c1) % ((unsigned) (8 * 4))));
     if (get_free_reg (dont_begin, colors,
         ((enum machine_mode) (web2->orig_x)->mode)) < 0)
       {
  if (web2->spill_temp)
    ((spill_temps)[(c1) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((c1) % ((unsigned) (8 * 4))));
  else
    cost_neighbors[c1] += web2->spill_cost;
       }
   }
    }
  newcol = -1;
  for (c = 0; c < 53; c++)
    if ((!!((possible_begin)[(c) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c) % ((unsigned) (8 * 4))))))
 && !(!!((precolored_neighbors)[(c) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c) % ((unsigned) (8 * 4))))))
 && !(!!((spill_temps)[(c) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c) % ((unsigned) (8 * 4))))))
 && (newcol == -1
     || cost_neighbors[c] < cost_neighbors[newcol]))
      newcol = c;
  if (newcol >= 0 && cost_neighbors[newcol] < web->spill_cost)
    {
      int nregs = hard_regno_nregs[newcol][((enum machine_mode) (web->orig_x)->mode)];
      unsigned long cost = 0;
      int *old_colors;
      struct conflict_link *wl_next;
      ra_debug_msg (0x0010, "try to set web %d to color %d\n", web->id,
   newcol);
      remove_list (web->dlink, &(web_lists[(int)(SPILLED)]));
      put_web (web, COLORED);
      web->color = newcol;
      old_colors = xcalloc (num_webs, sizeof (int));
      for (wl = web->conflict_list; wl; wl = wl_next)
 {
   struct web *web2 = alias (wl->t);
   wl_next = wl->next;
   if (web2->type == COLORED)
     {
       int nregs2 = hard_regno_nregs[web2->color][((enum machine_mode) (web2->orig_x)->mode)
                       ];
       if (web->color >= web2->color + nregs2
    || web2->color >= web->color + nregs)
  continue;
       old_colors[web2->id] = web2->color + 1;
       web2->color = -1;
       remove_list (web2->dlink, &(web_lists[(int)(COLORED)]));
       web2->type = SELECT;
       if (web2->spill_temp == 0 || web2->spill_temp == 2)
  web2->was_spilled = 1;
       colorize_one_web (web2, 1);
       if (web2->type == SPILLED)
  cost += web2->spill_cost;
     }
 }
      if (cost > cost_neighbors[newcol]
   && nregs == 1 && !(!!((wide_seen)[(newcol) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((newcol) % ((unsigned) (8 * 4)))))))
 abort ();
      if (cost > web->spill_cost)
 {
   ra_debug_msg (0x0010,
       "reset coloring of web %d, too expensive\n", web->id);
   remove_list (web->dlink, &(web_lists[(int)(COLORED)]));
   web->color = -1;
   put_web (web, SPILLED);
   for (wl = web->conflict_list; wl; wl = wl->next)
     {
       struct web *web2 = alias (wl->t);
       if (old_colors[web2->id])
  {
    if (web2->type == SPILLED)
      {
        remove_list (web2->dlink, &(web_lists[(int)(SPILLED)]));
        web2->color = old_colors[web2->id] - 1;
        put_web (web2, COLORED);
      }
    else if (web2->type == COLORED)
      web2->color = old_colors[web2->id] - 1;
    else if (web2->type == SELECT)
      ;
    else
      abort ();
  }
     }
 }
      free (old_colors);
    }
  free (min_color);
  free (cost_neighbors);
}
static void
insert_coalesced_conflicts (void)
{
  struct dlist *d;
  for (d = (web_lists[(int)(COALESCED)]); 0 && d; d = d->next)
    {
      struct web *web = ((d)->value1.web);
      struct web *aweb = alias (web);
      struct conflict_link *wl;
      for (wl = web->conflict_list; wl; wl = wl->next)
 {
   struct web *tweb = aweb;
   int i;
   int nregs = 1 + web->add_hardregs;
   if (aweb->type == PRECOLORED)
     nregs = hard_regno_nregs[aweb->color][((enum machine_mode) (web->orig_x)->mode)];
   for (i = 0; i < nregs; i++)
     {
       if (aweb->type == PRECOLORED)
  tweb = hardreg2web[i + aweb->color];
       if ((!(tweb->type == PRECOLORED
       || ((sup_igraph)->elms [(tweb->id * num_webs + wl->t->id) / ((unsigned) (8 * 4))] >> (tweb->id * num_webs + wl->t->id) % ((unsigned) (8 * 4)) & 1))
     || !(wl->t->type == PRECOLORED
          || ((sup_igraph)->elms [(wl->t->id * num_webs + tweb->id) / ((unsigned) (8 * 4))] >> (wl->t->id * num_webs + tweb->id) % ((unsigned) (8 * 4)) & 1)
                                         ))
    && hard_regs_intersect_p (&tweb->usable_regs,
         &wl->t->usable_regs))
  abort ();
       if (aweb->type != PRECOLORED)
  break;
     }
 }
    }
}
static int
comp_webs_maxcost (const void *w1, const void *w2)
{
  struct web *web1 = *(struct web **)w1;
  struct web *web2 = *(struct web **)w2;
  if (web1->spill_cost > web2->spill_cost)
    return -1;
  else if (web1->spill_cost < web2->spill_cost)
    return 1;
  else
    return 0;
}
static void
recolor_spills (void)
{
  unsigned int i, num;
  struct web **order2web;
  num = num_webs - num_subwebs;
  order2web = xmalloc (num * sizeof (order2web[0]));
  for (i = 0; i < num; i++)
    {
      order2web[i] = id2web[i];
      if (!flag_ra_merge_spill_costs && id2web[i]->type == COALESCED)
 alias (id2web[i])->spill_cost += id2web[i]->spill_cost;
    }
  qsort (order2web, num, sizeof (order2web[0]), comp_webs_maxcost);
  insert_coalesced_conflicts ();
  dump_graph_cost (0x0001, "before spill-recolor");
  for (i = 0; i < num; i++)
    {
      struct web *web = order2web[i];
      if (web->type == SPILLED)
 try_recolor_web (web);
    }
  assign_colors ();
  free (order2web);
}
static void
check_colors (void)
{
  unsigned int i;
  for (i = 0; i < num_webs - num_subwebs; i++)
    {
      struct web *web = id2web[i];
      struct web *aweb = alias (web);
      struct conflict_link *wl;
      int nregs, c;
      if (aweb->type == SPILLED || web->regno >= max_normal_pseudo)
 continue;
      else if (aweb->type == COLORED)
 nregs = hard_regno_nregs[aweb->color][((enum machine_mode) (web->orig_x)->mode)];
      else if (aweb->type == PRECOLORED)
 nregs = 1;
      else
 abort ();
      for (c = 0; c < nregs; c++)
 if (!(!!((web->usable_regs)[(aweb->color + c) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((aweb->color + c) % ((unsigned) (8 * 4)))))))
   abort ();
      wl = (web->have_orig_conflicts ? web->orig_conflict_list
     : web->conflict_list);
      for (; wl; wl = wl->next)
 if (wl->t->regno >= max_normal_pseudo)
   continue;
 else if (!wl->sub)
   {
     struct web *web2 = alias (wl->t);
     int nregs2;
     if (web2->type == COLORED)
       nregs2 = hard_regno_nregs[web2->color][((enum machine_mode) (web2->orig_x)->mode)];
     else if (web2->type == PRECOLORED)
       nregs2 = 1;
     else
       continue;
     if (aweb->color >= web2->color + nregs2
         || web2->color >= aweb->color + nregs)
       continue;
     abort ();
   }
 else
   {
     struct sub_conflict *sl;
     int scol = aweb->color;
     int tcol = alias (wl->t)->color;
     if (alias (wl->t)->type == SPILLED)
       continue;
     for (sl = wl->sub; sl; sl = sl->next)
       {
  int ssize = hard_regno_nregs[scol][((enum machine_mode) (sl->s->orig_x)->mode)];
  int tsize = hard_regno_nregs[tcol][((enum machine_mode) (sl->t->orig_x)->mode)];
  int sofs = 0, tofs = 0;
         if ((((enum rtx_code) ((sl->t)->orig_x)->code) == SUBREG)
      && ((unsigned short) mode_size[((enum machine_mode) (sl->t->orig_x)->mode)]) >= (0 ? 8 : 4))
    tofs = ((((sl->t->orig_x)->u.fld[1]).rtuint) / (0 ? 8 : 4));
         if ((((enum rtx_code) ((sl->s)->orig_x)->code) == SUBREG)
      && ((unsigned short) mode_size[((enum machine_mode) (sl->s->orig_x)->mode)])
         >= (0 ? 8 : 4))
    sofs = ((((sl->s->orig_x)->u.fld[1]).rtuint) / (0 ? 8 : 4));
  if ((tcol + tofs >= scol + sofs + ssize)
      || (scol + sofs >= tcol + tofs + tsize))
    continue;
  abort ();
       }
   }
    }
}
static void
unalias_web (struct web *web)
{
  web->alias = ((void *)0);
  web->is_coalesced = 0;
  web->color = -1;
  web->was_spilled = 1;
  remove_list (web->dlink, &(web_lists[(int)(COALESCED)]));
  if (web->spill_temp && web->spill_temp != 2)
    put_web (web, SELECT);
  else
    put_web_at_end (web, SELECT);
}
static void
break_aliases_to_web (struct web *web)
{
  struct dlist *d, *d_next;
  if (web->type != SPILLED)
    abort ();
  for (d = (web_lists[(int)(COALESCED)]); d; d = d_next)
    {
      struct web *other = ((d)->value1.web);
      d_next = d->next;
      if (other->alias == web)
 {
   unalias_web (other);
   ra_debug_msg (0x0010, " %d", other->id);
 }
    }
  web->spill_temp = web->orig_spill_temp;
  web->spill_cost = web->orig_spill_cost;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (web->usable_regs), *scan_fp_ = (web->orig_usable_regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  web->is_coalesced = 0;
  web->num_aliased = 0;
  web->was_spilled = 1;
  for (d = (web_lists[(int)(COALESCED)]); d; d = d->next)
    ((d)->value1.web)->alias->is_coalesced = 1;
}
static void
break_precolored_alias (struct web *web)
{
  struct web *pre = web->alias;
  struct conflict_link *wl;
  unsigned int c = pre->color;
  unsigned int nregs = hard_regno_nregs[c][((enum machine_mode) (web->orig_x)->mode)];
  if (pre->type != PRECOLORED)
    abort ();
  unalias_web (web);
  for (wl = web->conflict_list; wl; wl = wl->next)
    {
      struct web *x = wl->t;
      struct web *y;
      unsigned int i;
      struct conflict_link *wl2;
      struct conflict_link **pcl;
      HARD_REG_SET regs;
      if (!x->have_orig_conflicts)
 continue;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      for (i = 0; i < nregs; i++)
 ((regs)[(c + i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((c + i) % ((unsigned) (8 * 4))));
      for (wl2 = x->conflict_list; wl2; wl2 = wl2->next)
 if (wl2->t->type == COALESCED && alias (wl2->t)->type == PRECOLORED)
   ((regs)[(alias (wl2->t)->color) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((alias (wl2->t)->color) % ((unsigned) (8 * 4)))));
      for (wl2 = x->orig_conflict_list; wl2; wl2 = wl2->next)
 if (wl2->t->type == PRECOLORED)
   ((regs)[(wl2->t->color) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((wl2->t->color) % ((unsigned) (8 * 4)))));
      y = ((void *)0);
      for (i = 0; i < nregs; i++)
 if ((!!((regs)[(c + i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c + i) % ((unsigned) (8 * 4)))))))
   {
     struct web *sub;
     y = hardreg2web[c + i];
     ((sup_igraph)->elms [(x->id * num_webs + y->id) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (x->id * num_webs + y->id) % ((unsigned) (8 * 4))));
     ((sup_igraph)->elms [(y->id * num_webs + x->id) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (y->id * num_webs + x->id) % ((unsigned) (8 * 4))));
     ((igraph)->elms [(((x->id) < (y->id) ? ((y->id)*((y->id)-1)/2)+(x->id) : ((x->id)*((x->id)-1)/2)+(y->id))) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (((x->id) < (y->id) ? ((y->id)*((y->id)-1)/2)+(x->id) : ((x->id)*((x->id)-1)/2)+(y->id))) % ((unsigned) (8 * 4))));
     for (sub = x->subreg_next; sub; sub = sub->subreg_next)
       ((igraph)->elms [(((sub->id) < (y->id) ? ((y->id)*((y->id)-1)/2)+(sub->id) : ((sub->id)*((sub->id)-1)/2)+(y->id))) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (((sub->id) < (y->id) ? ((y->id)*((y->id)-1)/2)+(sub->id) : ((sub->id)*((sub->id)-1)/2)+(y->id))) % ((unsigned) (8 * 4))));
   }
      if (!y)
 continue;
      pcl = &(x->conflict_list);
      while (*pcl)
 {
   struct web *y = (*pcl)->t;
   if (y->type != PRECOLORED || !(!!((regs)[(y->color) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((y->color) % ((unsigned) (8 * 4)))))))
     pcl = &((*pcl)->next);
   else
     *pcl = (*pcl)->next;
 }
    }
}
static void
restore_conflicts_from_coalesce (struct web *web)
{
  struct conflict_link **pcl;
  struct conflict_link *wl;
  pcl = &(web->conflict_list);
  if (!web->have_orig_conflicts)
    return;
  while (*pcl)
    {
      struct web *other = (*pcl)->t;
      for (wl = web->orig_conflict_list; wl; wl = wl->next)
 if (wl->t == other)
   break;
      if (wl)
 {
   pcl = &((*pcl)->next);
 }
      else
 {
   struct conflict_link **opcl;
   struct conflict_link *owl;
   struct sub_conflict *sl;
   wl = *pcl;
   *pcl = wl->next;
   if (!other->have_orig_conflicts && other->type != PRECOLORED)
     abort ();
   for (owl = other->orig_conflict_list; owl; owl = owl->next)
     if (owl->t == web)
       break;
   if (owl)
     abort ();
   opcl = &(other->conflict_list);
   while (*opcl)
     {
       if ((*opcl)->t == web)
  {
    owl = *opcl;
    *opcl = owl->next;
    break;
  }
       else
  {
    opcl = &((*opcl)->next);
  }
     }
   if (!owl && other->type != PRECOLORED)
     abort ();
   ((sup_igraph)->elms [(web->id * num_webs + other->id) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (web->id * num_webs + other->id) % ((unsigned) (8 * 4))));
   ((sup_igraph)->elms [(other->id * num_webs + web->id) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (other->id * num_webs + web->id) % ((unsigned) (8 * 4))));
   ((igraph)->elms [(((web->id) < (other->id) ? ((other->id)*((other->id)-1)/2)+(web->id) : ((web->id)*((web->id)-1)/2)+(other->id))) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (((web->id) < (other->id) ? ((other->id)*((other->id)-1)/2)+(web->id) : ((web->id)*((web->id)-1)/2)+(other->id))) % ((unsigned) (8 * 4))));
   for (sl = wl->sub; sl; sl = sl->next)
     ((igraph)->elms [(((sl->s->id) < (sl->t->id) ? ((sl->t->id)*((sl->t->id)-1)/2)+(sl->s->id) : ((sl->s->id)*((sl->s->id)-1)/2)+(sl->t->id))) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (((sl->s->id) < (sl->t->id) ? ((sl->t->id)*((sl->t->id)-1)/2)+(sl->s->id) : ((sl->s->id)*((sl->s->id)-1)/2)+(sl->t->id))) % ((unsigned) (8 * 4))));
   if (other->type != PRECOLORED)
     {
       for (sl = owl->sub; sl; sl = sl->next)
  ((igraph)->elms [(((sl->s->id) < (sl->t->id) ? ((sl->t->id)*((sl->t->id)-1)/2)+(sl->s->id) : ((sl->s->id)*((sl->s->id)-1)/2)+(sl->t->id))) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (((sl->s->id) < (sl->t->id) ? ((sl->t->id)*((sl->t->id)-1)/2)+(sl->s->id) : ((sl->s->id)*((sl->s->id)-1)/2)+(sl->t->id))) % ((unsigned) (8 * 4))));
     }
 }
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (web->usable_regs), *scan_fp_ = (web->orig_usable_regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  for (wl = web->conflict_list; wl; wl = wl->next)
    if (wl->t->type == COALESCED)
      {
 struct web *tweb;
 for (tweb = wl->t->alias; tweb; tweb = tweb->alias)
   {
     if (wl->sub == ((void *)0))
       record_conflict (web, tweb);
     else
       {
  struct sub_conflict *sl;
  for (sl = wl->sub; sl; sl = sl->next)
    {
      struct web *sweb = ((void *)0);
      if ((((enum rtx_code) ((sl->t)->orig_x)->code) == SUBREG))
        sweb = find_subweb (tweb, sl->t->orig_x);
      if (!sweb)
        sweb = tweb;
      record_conflict (sl->s, sweb);
    }
       }
     if (tweb->type != COALESCED)
       break;
   }
      }
}
static void
break_coalesced_spills (void)
{
  int changed = 0;
  while (1)
    {
      struct dlist *d;
      struct web *web;
      for (d = (web_lists[(int)(SPILLED)]); d; d = d->next)
 if (((d)->value1.web)->is_coalesced)
   break;
      if (!d)
 break;
      changed = 1;
      web = ((d)->value1.web);
      ra_debug_msg (0x0010, "breaking aliases to web %d:", web->id);
      restore_conflicts_from_coalesce (web);
      break_aliases_to_web (web);
      insert_coalesced_conflicts ();
      ra_debug_msg (0x0010, "\n");
      remove_list (d, &(web_lists[(int)(SPILLED)]));
      put_web (web, SELECT);
      web->color = -1;
      while ((web_lists[(int)(SELECT)]))
 {
   d = pop_list (&(web_lists[(int)(SELECT)]));
   colorize_one_web (((d)->value1.web), 1);
 }
    }
  if (changed)
    {
      struct dlist *d;
      for (d = (web_lists[(int)(COALESCED)]); d; d = d->next)
 {
   struct web *a = alias (((d)->value1.web));
   ((d)->value1.web)->color = a->color;
 }
    }
  dump_graph_cost (0x0001, "after alias-breaking");
}
struct web_pair
{
  struct web_pair *next_hash;
  struct web_pair *next_list;
  struct web *smaller;
  struct web *larger;
  unsigned int conflicts;
  unsigned long cost;
};
static struct web_pair *web_pair_hash[8192];
static struct web_pair *web_pair_list;
static unsigned int num_web_pairs;
static void
init_web_pairs (void)
{
  memset (web_pair_hash, 0, sizeof web_pair_hash);
  num_web_pairs = 0;
  web_pair_list = ((void *)0);
}
static void
add_web_pair_cost (struct web *web1, struct web *web2,
     unsigned long cost, unsigned int conflicts)
{
  unsigned int hash;
  struct web_pair *p;
  if (web1->id > web2->id)
    {
      struct web *h = web1;
      web1 = web2;
      web2 = h;
    }
  hash = (web1->id * num_webs + web2->id) % 8192;
  for (p = web_pair_hash[hash]; p; p = p->next_hash)
    if (p->smaller == web1 && p->larger == web2)
      {
 p->cost += cost;
 p->conflicts += conflicts;
 return;
      }
  p = ra_alloc (sizeof *p);
  p->next_hash = web_pair_hash[hash];
  p->next_list = web_pair_list;
  p->smaller = web1;
  p->larger = web2;
  p->conflicts = conflicts;
  p->cost = cost;
  web_pair_hash[hash] = p;
  web_pair_list = p;
  num_web_pairs++;
}
static int
comp_web_pairs (const void *w1, const void *w2)
{
  struct web_pair *p1 = *(struct web_pair **)w1;
  struct web_pair *p2 = *(struct web_pair **)w2;
  if (p1->conflicts > p2->conflicts)
    return -1;
  else if (p1->conflicts < p2->conflicts)
    return 1;
  else if (p1->cost > p2->cost)
    return -1;
  else if (p1->cost < p2->cost)
    return 1;
  else
    return 0;
}
static void
sort_and_combine_web_pairs (int for_move)
{
  unsigned int i;
  struct web_pair **sorted;
  struct web_pair *p;
  if (!num_web_pairs)
    return;
  sorted = xmalloc (num_web_pairs * sizeof (sorted[0]));
  for (p = web_pair_list, i = 0; p; p = p->next_list)
    sorted[i++] = p;
  if (i != num_web_pairs)
    abort ();
  qsort (sorted, num_web_pairs, sizeof (sorted[0]), comp_web_pairs);
  for (i = 0; i < num_web_pairs; i++)
    {
      struct web *w1, *w2;
      p = sorted[i];
      w1 = alias (p->smaller);
      w2 = alias (p->larger);
      if (!for_move && (w1->type == PRECOLORED || w2->type == PRECOLORED))
 continue;
      else if (w2->type == PRECOLORED)
 {
   struct web *h = w1;
   w1 = w2;
   w2 = h;
 }
      if (w1 != w2
   && !((sup_igraph)->elms [(w1->id * num_webs + w2->id) / ((unsigned) (8 * 4))] >> (w1->id * num_webs + w2->id) % ((unsigned) (8 * 4)) & 1)
   && !((sup_igraph)->elms [(w2->id * num_webs + w1->id) / ((unsigned) (8 * 4))] >> (w2->id * num_webs + w1->id) % ((unsigned) (8 * 4)) & 1)
   && w2->type != PRECOLORED
   && hard_regs_intersect_p (&w1->usable_regs, &w2->usable_regs))
   {
     if (w1->type != PRECOLORED
  || (w1->type == PRECOLORED && ok (w2, w1)))
       combine (w1, w2);
     else if (w1->type == PRECOLORED)
       ((w2->prefer_colors)[(w1->color) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((w1->color) % ((unsigned) (8 * 4))));
   }
    }
  free (sorted);
}
static void
aggressive_coalesce (void)
{
  struct dlist *d;
  struct move *m;
  init_web_pairs ();
  while ((d = pop_list (&mv_worklist)) != ((void *)0))
    if ((m = ((d)->value1.move)))
      {
 struct web *s = alias (m->source_web);
 struct web *t = alias (m->target_web);
 if (t->type == PRECOLORED)
   {
     struct web *h = s;
     s = t;
     t = h;
   }
 if (s != t
     && t->type != PRECOLORED
     && !((sup_igraph)->elms [(s->id * num_webs + t->id) / ((unsigned) (8 * 4))] >> (s->id * num_webs + t->id) % ((unsigned) (8 * 4)) & 1)
     && !((sup_igraph)->elms [(t->id * num_webs + s->id) / ((unsigned) (8 * 4))] >> (t->id * num_webs + s->id) % ((unsigned) (8 * 4)) & 1))
   {
     if ((s->type == PRECOLORED && ok (t, s))
  || s->type != PRECOLORED)
       {
         put_move (m, MV_COALESCED);
  add_web_pair_cost (s, t, (((m->insn)->u.fld[3]).bb)->frequency,
       0);
       }
     else if (s->type == PRECOLORED)
       {
  put_move (m, CONSTRAINED);
  ((t->prefer_colors)[(s->color) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((s->color) % ((unsigned) (8 * 4))));
       }
   }
 else
   {
     put_move (m, CONSTRAINED);
   }
      }
  sort_and_combine_web_pairs (1);
}
static void
extended_coalesce_2 (void)
{
  rtx insn;
  struct ra_insn_info info;
  unsigned int n;
  init_web_pairs ();
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && (info = insn_df[(((insn)->u.fld[0]).rtint)]).num_defs)
      for (n = 0; n < info.num_defs; n++)
 {
   struct web *dest = def2web[((info.defs[n])->id)];
   dest = alias ((((dest)->parent_web) ? find_web_for_subweb_1 ((dest)->parent_web) : (dest)));
   if (dest->type != PRECOLORED && dest->regno < max_normal_pseudo)
     {
       unsigned int n2;
       for (n2 = 0; n2 < info.num_uses; n2++)
  {
    struct web *source = use2web[((info.uses[n2])->id)];
    source = alias ((((source)->parent_web) ? find_web_for_subweb_1 ((source)->parent_web) : (source)));
    if (source->type != PRECOLORED
        && source != dest
        && source->regno < max_normal_pseudo
        && ((enum machine_mode) (source->orig_x)->mode) == ((enum machine_mode) (dest->orig_x)->mode)
        && !((sup_igraph)->elms [(dest->id * num_webs + source->id) / ((unsigned) (8 * 4))] >> (dest->id * num_webs + source->id) % ((unsigned) (8 * 4)) & 1)
        && !((sup_igraph)->elms [(source->id * num_webs + dest->id) / ((unsigned) (8 * 4))] >> (source->id * num_webs + dest->id) % ((unsigned) (8 * 4)) & 1)
        && hard_regs_intersect_p (&source->usable_regs,
      &dest->usable_regs))
      add_web_pair_cost (dest, source,
           (((insn)->u.fld[3]).bb)->frequency,
           dest->num_conflicts
           + source->num_conflicts);
  }
     }
 }
  sort_and_combine_web_pairs (0);
}
static void
check_uncoalesced_moves (void)
{
  struct move_list *ml;
  struct move *m;
  for (ml = wl_moves; ml; ml = ml->next)
    if ((m = ml->move))
      {
 struct web *s = alias (m->source_web);
 struct web *t = alias (m->target_web);
 if (t->type == PRECOLORED)
   {
     struct web *h = s;
     s = t;
     t = h;
   }
 if (s != t
     && m->type != CONSTRAINED
     && m->type != MV_COALESCED
     && t->type != PRECOLORED
     && ((s->type == PRECOLORED && ok (t, s))
  || s->type != PRECOLORED)
     && !((sup_igraph)->elms [(s->id * num_webs + t->id) / ((unsigned) (8 * 4))] >> (s->id * num_webs + t->id) % ((unsigned) (8 * 4)) & 1)
     && !((sup_igraph)->elms [(t->id * num_webs + s->id) / ((unsigned) (8 * 4))] >> (t->id * num_webs + s->id) % ((unsigned) (8 * 4)) & 1))
   abort ();
      }
}
void
ra_colorize_graph (struct df *df)
{
  if (dump_file)
    dump_igraph (df);
  build_worklists (df);
  if (flag_ra_optimistic_coalescing)
    {
      aggressive_coalesce ();
      extended_coalesce_2 ();
    }
  do
    {
      simplify ();
      if (mv_worklist)
 coalesce ();
      else if ((web_lists[(int)(FREEZE)]))
 freeze ();
      else if ((web_lists[(int)(SPILL)]))
 select_spill ();
    }
  while ((web_lists[(int)(SIMPLIFY)]) || (web_lists[(int)(SIMPLIFY_FAT)]) || (web_lists[(int)(SIMPLIFY_SPILL)])
  || mv_worklist || (web_lists[(int)(FREEZE)]) || (web_lists[(int)(SPILL)]));
  if (flag_ra_optimistic_coalescing)
    check_uncoalesced_moves ();
  assign_colors ();
  check_colors ();
  dump_graph_cost (0x0001, "initially");
  if (flag_ra_break_aliases)
    break_coalesced_spills ();
  check_colors ();
  recolor_spills ();
  dump_graph_cost (0x0001, "after spill-recolor");
  check_colors ();
}
void ra_colorize_init (void)
{
  spill_heuristic = default_spill_heuristic;
}
void
ra_colorize_free_all (void)
{
  struct dlist *d;
  while ((d = pop_list (&(web_lists[(int)(FREE)]))) != ((void *)0))
    put_web (((d)->value1.web), INITIAL);
  while ((d = pop_list (&(web_lists[(int)(INITIAL)]))) != ((void *)0))
    {
      struct web *web = ((d)->value1.web);
      struct web *wnext;
      web->orig_conflict_list = ((void *)0);
      web->conflict_list = ((void *)0);
      for (web = web->subreg_next; web; web = wnext)
 {
   wnext = web->subreg_next;
   free (web);
 }
      free (((d)->value1.web));
    }
}
static void ra_print_rtx_1op (FILE *, rtx);
static void ra_print_rtx_2op (FILE *, rtx);
static void ra_print_rtx_3op (FILE *, rtx);
static void ra_print_rtx_object (FILE *, rtx);
static const char *const reg_class_names1[] = { "NO_REGS", "AREG", "DREG", "CREG", "BREG", "SIREG", "DIREG", "AD_REGS", "Q_REGS", "NON_Q_REGS", "INDEX_REGS", "LEGACY_REGS", "GENERAL_REGS", "FP_TOP_REG", "FP_SECOND_REG", "FLOAT_REGS", "SSE_REGS", "MMX_REGS", "FP_TOP_SSE_REGS", "FP_SECOND_SSE_REGS", "FLOAT_SSE_REGS", "FLOAT_INT_REGS", "INT_SSE_REGS", "FLOAT_INT_SSE_REGS", "ALL_REGS" };
void
ra_debug_msg (unsigned int level, const char *format, ...)
{
  va_list ap;
  __builtin_va_start(ap,format);
  if ((debug_new_regalloc & level) != 0 && dump_file != ((void *)0))
    vfprintf (dump_file, format, ap);
  __builtin_va_end(ap);
}
static void
ra_print_rtx_1op (FILE *file, rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  rtx op0 = (((x)->u.fld[0]).rtx1);
  switch (code)
    {
      case NEG:
      case NOT:
   fputs_unlocked ((code == NEG) ? "-(" : "~(", file);
   ra_print_rtx (file, op0, 0);
   fputs_unlocked (")", file);
   break;
      case HIGH:
   fputs_unlocked ("hi(", file);
   ra_print_rtx (file, op0, 0);
   fputs_unlocked (")", file);
   break;
      default:
   fprintf (file, "%s", (rtx_name[(int) (code)]));
   if (((enum machine_mode) (x)->mode) != VOIDmode)
     fprintf (file, ":%s(", mode_name[((enum machine_mode) (x)->mode)]);
   else
     fputs_unlocked ("(", file);
   ra_print_rtx (file, op0, 0);
   fputs_unlocked (")", file);
   break;
    }
}
static void
ra_print_rtx_2op (FILE *file, rtx x)
{
  int infix = 1;
  const char *opname = "shitop";
  enum rtx_code code = ((enum rtx_code) (x)->code);
  rtx op0 = (((x)->u.fld[0]).rtx1);
  rtx op1 = (((x)->u.fld[1]).rtx1);
  switch (code)
    {
      case COMPARE: opname = "?"; break;
      case MINUS: opname = "-"; break;
      case DIV: opname = "/"; break;
      case UDIV: opname = "u/"; break;
      case MOD: opname = "%"; break;
      case UMOD: opname = "u%"; break;
      case ASHIFT: opname = "<<"; break;
      case ASHIFTRT: opname = "a>>"; break;
      case LSHIFTRT: opname = "l>>"; break;
      case PLUS: opname = "+"; break;
      case MULT: opname = "*"; break;
      case AND: opname = "&"; break;
      case IOR: opname = "|"; break;
      case XOR: opname = "^"; break;
      case NE: opname = "!="; break;
      case EQ: opname = "=="; break;
      case LTGT: opname = "<>"; break;
      case GE: opname = "s>="; break;
      case GT: opname = "s>"; break;
      case LE: opname = "s<="; break;
      case LT: opname = "s<"; break;
      case GEU: opname = "u>="; break;
      case GTU: opname = "u>"; break;
      case LEU: opname = "u<="; break;
      case LTU: opname = "u<"; break;
      default:
  infix = 0;
  opname = (rtx_name[(int) (code)]);
  break;
    }
  if (infix)
    {
      fputs_unlocked ("(", file);
      ra_print_rtx (file, op0, 0);
      fprintf (file, " %s ", opname);
      ra_print_rtx (file, op1, 0);
      fputs_unlocked (")", file);
    }
  else
    {
      fprintf (file, "%s(", opname);
      ra_print_rtx (file, op0, 0);
      fputs_unlocked (", ", file);
      ra_print_rtx (file, op1, 0);
      fputs_unlocked (")", file);
    }
}
static void
ra_print_rtx_3op (FILE *file, rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  rtx op0 = (((x)->u.fld[0]).rtx1);
  rtx op1 = (((x)->u.fld[1]).rtx1);
  rtx op2 = (((x)->u.fld[2]).rtx1);
  if (code == IF_THEN_ELSE)
    {
      ra_print_rtx (file, op0, 0);
      fputs_unlocked (" ? ", file);
      ra_print_rtx (file, op1, 0);
      fputs_unlocked (" : ", file);
      ra_print_rtx (file, op2, 0);
    }
  else
    {
      fprintf (file, "%s:%s(", (rtx_name[(int) (code)]),
        mode_name[((enum machine_mode) (x)->mode)]);
      ra_print_rtx (file, op0, 0);
      fputs_unlocked (", ", file);
      ra_print_rtx (file, op1, 0);
      fputs_unlocked (", ", file);
      ra_print_rtx (file, op2, 0);
      fputs_unlocked (")", file);
    }
}
static void
ra_print_rtx_object (FILE *file, rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  switch (code)
    {
      case CONST_INT:
   fprintf (file, "%ld", ((x)->u.hwint[0]));
   break;
      case CONST_DOUBLE:
     {
       int i, num = 0;
       const char *fmt = (rtx_format[(int) (code)]);
       fputs_unlocked ("dbl(", file);
       for (i = 0; i < (rtx_length[(int) (code)]); i++)
  {
    if (num)
      fputs_unlocked (", ", file);
    if (fmt[i] == 'e' && (((x)->u.fld[i]).rtx1))
      {
        ra_print_rtx (file, (((x)->u.fld[i]).rtx1), 0);
        num++;
      }
    else if (fmt[i] == 'w')
      {
        fprintf (file, "0x%lx", ((x)->u.hwint[i]));
        num++;
      }
  }
       break;
     }
      case CONST_STRING: fprintf (file, "\"%s\"", (((x)->u.fld[0]).rtstr)); break;
      case CONST: fputs_unlocked ("const(", file);
    ra_print_rtx (file, (((x)->u.fld[0]).rtx1), 0);
    fputs_unlocked (")", file);
    break;
      case PC: fputs_unlocked ("pc", file); break;
      case REG:
        {
   int regno = (((x)->u.fld[0]).rtuint);
   if (regno < 53)
     {
       int i, nregs = hard_regno_nregs[regno][mode];
       if (nregs > 1)
         fputs_unlocked ("[", file);
       for (i = 0; i < nregs; i++)
         {
    if (i)
      fputs_unlocked (", ", file);
    if (reg_names[regno+i] && *reg_names[regno + i])
      fprintf (file, "%s", reg_names[regno + i]);
    else
      fprintf (file, "h%d", regno + i);
         }
       if (nregs > 1)
         fputs_unlocked ("]", file);
     }
   else
     fprintf (file, "p%d", regno);
   break;
        }
      case SUBREG:
        {
   rtx sub = (((x)->u.fld[0]).rtx1);
   int ofs = (((x)->u.fld[1]).rtuint);
   if ((((enum rtx_code) (sub)->code) == REG)
       && (((sub)->u.fld[0]).rtuint) < 53)
     {
       int regno = (((sub)->u.fld[0]).rtuint);
       int i, nregs = hard_regno_nregs[regno][mode];
       regno += subreg_regno_offset (regno, ((enum machine_mode) (sub)->mode),
         ofs, mode);
       if (nregs > 1)
         fputs_unlocked ("[", file);
       for (i = 0; i < nregs; i++)
         {
    if (i)
      fputs_unlocked (", ", file);
    if (reg_names[regno+i])
      fprintf (file, "%s", reg_names[regno + i]);
    else
      fprintf (file, "h%d", regno + i);
         }
       if (nregs > 1)
         fputs_unlocked ("]", file);
     }
   else
     {
       ra_print_rtx (file, sub, 0);
       fprintf (file, ":[%s+%d]", mode_name[mode], ofs);
     }
   break;
        }
      case SCRATCH: fputs_unlocked ("scratch", file); break;
      case CONCAT: ra_print_rtx_2op (file, x); break;
      case HIGH: ra_print_rtx_1op (file, x); break;
      case LO_SUM:
   fputs_unlocked ("(", file);
   ra_print_rtx (file, (((x)->u.fld[0]).rtx1), 0);
   fputs_unlocked (" + lo(", file);
   ra_print_rtx (file, (((x)->u.fld[1]).rtx1), 0);
   fputs_unlocked ("))", file);
   break;
      case MEM: fputs_unlocked ("[", file);
  ra_print_rtx (file, (((x)->u.fld[0]).rtx1), 0);
  fprintf (file, "]:%s", mode_name[((enum machine_mode) (x)->mode)]);
  break;
      case LABEL_REF:
    {
      rtx sub = (((x)->u.fld[0]).rtx1);
      if (((enum rtx_code) (sub)->code) == NOTE
   && (((sub)->u.fld[5]).rtint) == NOTE_INSN_DELETED_LABEL)
        fprintf (file, "(deleted uid=%d)", (((sub)->u.fld[0]).rtint));
      else if (((enum rtx_code) (sub)->code) == CODE_LABEL)
        fprintf (file, "L%d", (((sub)->u.fld[6]).rtint));
      else
        fprintf (file, "(nonlabel uid=%d)", (((sub)->u.fld[0]).rtint));
    }
  break;
      case SYMBOL_REF:
  fprintf (file, "sym(\"%s\")", (((x)->u.fld[0]).rtstr)); break;
      case CC0: fputs_unlocked ("cc0", file); break;
      default: print_inline_rtx (file, x, 0); break;
    }
}
void
ra_print_rtx (FILE *file, rtx x, int with_pn)
{
  enum rtx_code code;
  int unhandled = 0;
  if (!x)
    return;
  code = ((enum rtx_code) (x)->code);
  if (((((enum rtx_code) (x)->code) == INSN) || (((enum rtx_code) (x)->code) == JUMP_INSN) || (((enum rtx_code) (x)->code) == CALL_INSN)) || code == NOTE || code == CODE_LABEL || code == BARRIER)
    {
      if (((((enum rtx_code) (x)->code) == INSN) || (((enum rtx_code) (x)->code) == JUMP_INSN) || (((enum rtx_code) (x)->code) == CALL_INSN)))
 fputs_unlocked ("  ", file);
      if (code == BARRIER)
 fputs_unlocked ("; ", file);
      else if (code == NOTE)
 fprintf (file, "\t\t\t\t\t; ");
      else if (code == CODE_LABEL)
 {
   fprintf (file, "L%d:\t; ", (((x)->u.fld[6]).rtint));
   if ((((x)->u.fld[7]).rtstr))
     fprintf (file, "(%s) ", (((x)->u.fld[7]).rtstr));
   switch (((enum label_kind) (((x)->jump << 1) | (x)->call)))
     {
     case LABEL_NORMAL: break;
     case LABEL_STATIC_ENTRY: fputs_unlocked (" (entry)", file); break;
     case LABEL_GLOBAL_ENTRY: fputs_unlocked (" (global entry)", file); break;
     case LABEL_WEAK_ENTRY: fputs_unlocked (" (weak entry)", file); break;
     default: abort();
     }
   fprintf (file, " [%d uses] uid=(", (((x)->u.fld[4]).rtint));
 }
      fprintf (file, "%d", (((x)->u.fld[0]).rtint));
      if (with_pn)
 fprintf (file, " %d %d", (((x)->u.fld[1]).rtx1) ? ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtint) : 0,
   (((x)->u.fld[2]).rtx1) ? ((((((x)->u.fld[2]).rtx1))->u.fld[0]).rtint) : 0);
      if (code == BARRIER)
 fputs_unlocked (" -------- barrier ---------", file);
      else if (code == CODE_LABEL)
 fputs_unlocked (")", file);
      else if (code == NOTE)
 {
   int ln = (((x)->u.fld[5]).rtint);
   if (ln >= (int) NOTE_INSN_BIAS && ln < (int) NOTE_INSN_MAX)
     fprintf (file, " %s", (note_insn_name[(ln) - (int) NOTE_INSN_BIAS]));
   else
     {
       expanded_location s;
       ((s).file = (((x)->u.fld[4]).rtstr), (s).line = (((x)->u.fld[5]).rtint));
       fprintf (file, " line %d", s.line);
       if (s.file != ((void *)0))
  fprintf (file, ":%s", s.file);
     }
 }
      else
 {
   fprintf (file, "\t");
   ra_print_rtx (file, (((x)->u.fld[5]).rtx1), 0);
 }
      return;
    }
  switch (code)
    {
      case PARALLEL:
     {
       int j;
       for (j = 0; j < (((((x)->u.fld[0]).rtvec1))->num_elem); j++)
  {
    if (j)
      fputs_unlocked ("\t;; ", file);
    ra_print_rtx (file, (((((x)->u.fld[0]).rtvec1))->elem[j]), 0);
  }
       break;
     }
      case UNSPEC: case UNSPEC_VOLATILE:
     {
       int j;
       fprintf (file, "unspec%s(%d",
         (code == UNSPEC) ? "" : "_vol", (((x)->u.fld[1]).rtint));
       for (j = 0; j < (((((x)->u.fld[0]).rtvec1))->num_elem); j++)
  {
    fputs_unlocked (", ", file);
    ra_print_rtx (file, (((((x)->u.fld[0]).rtvec1))->elem[j]), 0);
  }
       fputs_unlocked (")", file);
       break;
     }
      case SET:
   if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PC)
     {
       if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == IF_THEN_ELSE
    && ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[2]).rtx1))->code) == PC)
  {
    fputs_unlocked ("if ", file);
    ra_print_rtx (file, ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1), 0);
    fputs_unlocked (" jump ", file);
    ra_print_rtx (file, ((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1), 0);
  }
       else
  {
    fputs_unlocked ("jump ", file);
    ra_print_rtx (file, (((x)->u.fld[1]).rtx1), 0);
  }
     }
   else
     {
       ra_print_rtx (file, (((x)->u.fld[0]).rtx1), 0);
       fputs_unlocked (" <= ", file);
       ra_print_rtx (file, (((x)->u.fld[1]).rtx1), 0);
     }
   break;
      case USE:
       fputs_unlocked ("use <= ", file);
       ra_print_rtx (file, (((x)->u.fld[0]).rtx1), 0);
       break;
      case CLOBBER:
       ra_print_rtx (file, (((x)->u.fld[0]).rtx1), 0);
       fputs_unlocked (" <= clobber", file);
       break;
      case CALL:
       fputs_unlocked ("call ", file);
       ra_print_rtx (file, (((x)->u.fld[0]).rtx1), 0);
       fputs_unlocked (" numargs=", file);
       ra_print_rtx (file, (((x)->u.fld[1]).rtx1), 0);
       break;
      case RETURN:
       fputs_unlocked ("return", file);
       break;
      case TRAP_IF:
       fputs_unlocked ("if (", file);
       ra_print_rtx (file, (((x)->u.fld[0]).rtx1), 0);
       fputs_unlocked (") trap ", file);
       ra_print_rtx (file, (((x)->u.fld[1]).rtx1), 0);
       break;
      case RESX:
       fprintf (file, "resx from region %d", (((x)->u.fld[0]).rtint));
       break;
      case SUBREG: ra_print_rtx_object (file, x); break;
      case STRICT_LOW_PART:
     fputs_unlocked ("low(", file);
     ra_print_rtx (file, (((x)->u.fld[0]).rtx1), 0);
     fputs_unlocked (")", file);
     break;
      default:
 unhandled = 1;
 break;
    }
  if (!unhandled)
    return;
  switch ((rtx_class[(int) (code)]))
    {
      case RTX_UNARY:
 ra_print_rtx_1op (file, x);
 break;
      case RTX_BIN_ARITH:
      case RTX_COMM_ARITH:
      case RTX_COMPARE:
      case RTX_COMM_COMPARE:
 ra_print_rtx_2op (file, x);
 break;
      case RTX_TERNARY:
      case RTX_BITFIELD_OPS:
 ra_print_rtx_3op (file, x);
 break;
      case RTX_OBJ:
      case RTX_CONST_OBJ:
 ra_print_rtx_object (file, x);
 break;
      default:
 print_inline_rtx (file, x, 0);
 break;
    }
}
void
ra_print_rtx_top (FILE *file, rtx x, int with_pn)
{
  ra_print_rtx (file, x, with_pn);
  fprintf (file, "\n");
}
void
ra_debug_rtx (rtx x)
{
  ra_print_rtx_top (stderr, x, 1);
}
void
ra_debug_bbi (int bbi)
{
  basic_block bb = (((basic_block_info)->data.bb[(bbi)]));
  rtx insn;
  for (insn = (bb)->head_; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      ra_print_rtx_top (stderr, insn,
   (insn == (bb)->head_ || insn == (bb)->end_));
      fprintf (stderr, "\n");
      if (insn == (bb)->end_)
 break;
    }
}
void
ra_debug_insns (rtx insn, int num)
{
  int i, count = (num == 0 ? 1 : num < 0 ? -num : num);
  if (num < 0)
    for (i = count / 2; i > 0 && (((insn)->u.fld[1]).rtx1); i--)
      insn = (((insn)->u.fld[1]).rtx1);
  for (i = count; i > 0 && insn; insn = (((insn)->u.fld[2]).rtx1), i--)
    {
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 fprintf (stderr, "\n");
      ra_print_rtx_top (stderr, insn, (i == count || i == 1));
    }
}
void
ra_print_rtl_with_bb (FILE *file, rtx insn)
{
  basic_block last_bb, bb;
  unsigned int num = 0;
  if (!insn)
    fputs_unlocked ("nil", file);
  last_bb = ((void *)0);
  for (; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == BARRIER)
 bb = ((void *)0);
      else
 bb = (((insn)->u.fld[3]).bb);
      if (bb != last_bb)
 {
   if (last_bb)
     fprintf (file, ";; End of basic block %d\n", last_bb->index);
   if (bb)
     fprintf (file, ";; Begin of basic block %d\n", bb->index);
   last_bb = bb;
 }
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 fputc_unlocked ('\n', file);
      if (((enum rtx_code) (insn)->code) == NOTE)
 {
   if ((((insn)->u.fld[5]).rtint) != NOTE_INSN_BASIC_BLOCK
       && (flag_ra_dump_notes
    || (((insn)->u.fld[5]).rtint) == NOTE_INSN_DELETED
    || (((insn)->u.fld[5]).rtint) == NOTE_INSN_DELETED_LABEL))
     {
       ra_print_rtx_top (file, insn, (num == 0 || !(((insn)->u.fld[2]).rtx1)));
       num++;
     }
 }
      else
 {
   ra_print_rtx_top (file, insn, (num == 0 || !(((insn)->u.fld[2]).rtx1)));
   num++;
 }
    }
}
void
dump_number_seen (void)
{
  int num[17];
  int i;
  for (i = 0; i < 17; i++)
    num[i] = 0;
  for (i = 0; i < get_max_uid (); i++)
    if (number_seen[i] < 17 - 1)
      num[number_seen[i]]++;
    else
      num[17 - 1]++;
  for (i = 0; i < 17 - 1; i++)
    if (num[i])
      ra_debug_msg (0x0008, "%d insns seen %d times\n", num[i], i);
  if (num[17 - 1])
    ra_debug_msg (0x0008, "%d insns seen %d and more times\n", num[i],
        17 - 1);
  ra_debug_msg (0x0008, "from overall %d insns\n", get_max_uid ());
}
void
dump_igraph (struct df *df )
{
  struct move_list *ml;
  unsigned int def1, def2;
  int num = 0;
  int num2;
  unsigned int i;
  if (!dump_file || (debug_new_regalloc & (0x0004 | 0x0002)) == 0)
    return;
  ra_debug_msg (0x0004, "conflicts:\n  ");
  for (def1 = 0; def1 < num_webs; def1++)
    {
      int num1 = num;
      num2 = 0;
      for (def2 = 0; def2 < num_webs; def2++)
        if (def1 != def2 && ((igraph)->elms [(((def1) < (def2) ? ((def2)*((def2)-1)/2)+(def1) : ((def1)*((def1)-1)/2)+(def2))) / ((unsigned) (8 * 4))] >> (((def1) < (def2) ? ((def2)*((def2)-1)/2)+(def1) : ((def1)*((def1)-1)/2)+(def2))) % ((unsigned) (8 * 4)) & 1))
   {
     if (num1 == num)
       {
         if ((((enum rtx_code) ((id2web[def1])->orig_x)->code) == SUBREG))
    ra_debug_msg (0x0004, "%d (SUBREG %d, %d) with ", def1,
        id2web[def1]->regno,
        (((id2web[def1]->orig_x)->u.fld[1]).rtuint));
         else
           ra_debug_msg (0x0004, "%d (REG %d) with ", def1,
        id2web[def1]->regno);
       }
     if ((num2 % 9) == 8)
       ra_debug_msg (0x0004, "\n              ");
     num++;
     num2++;
     if ((((enum rtx_code) ((id2web[def2])->orig_x)->code) == SUBREG))
       ra_debug_msg (0x0004, "%d(%d,%d) ", def2, id2web[def2]->regno,
    (((id2web[def2]->orig_x)->u.fld[1]).rtuint));
     else
       ra_debug_msg (0x0004, "%d(%d) ", def2, id2web[def2]->regno);
   }
      if (num1 != num)
 ra_debug_msg (0x0004, "\n  ");
    }
  ra_debug_msg (0x0004, "\n");
  for (ml = wl_moves; ml; ml = ml->next)
    if (ml->move)
      {
        ra_debug_msg (0x0004, "move: insn %d: Web %d <-- Web %d\n",
          (((ml->move->insn)->u.fld[0]).rtint), ml->move->target_web->id,
          ml->move->source_web->id);
      }
  ra_debug_msg (0x0002, "\nWebs:\n");
  for (i = 0; i < num_webs; i++)
    {
      struct web *web = id2web[i];
      ra_debug_msg (0x0002, "  %4d : regno %3d", i, web->regno);
      if ((((enum rtx_code) ((web)->orig_x)->code) == SUBREG))
 {
   ra_debug_msg (0x0002, " sub %d", (((web->orig_x)->u.fld[1]).rtuint));
   ra_debug_msg (0x0002, " par %d", (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web))->id);
 }
      ra_debug_msg (0x0002, " +%d (span %d, cost %ld) (%s)",
      web->add_hardregs, web->span_deaths, web->spill_cost,
      reg_class_names1[web->regclass]);
      if (web->spill_temp == 1)
 ra_debug_msg (0x0002, " (spilltemp)");
      else if (web->spill_temp == 2)
 ra_debug_msg (0x0002, " (spilltem2)");
      else if (web->spill_temp == 3)
 ra_debug_msg (0x0002, " (short)");
      if (web->type == PRECOLORED)
        ra_debug_msg (0x0002, " (precolored, color=%d)", web->color);
      else if ((((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web))->num_uses == 0)
 ra_debug_msg (0x0002, " dead");
      if (web->crosses_call)
 ra_debug_msg (0x0002, " xcall");
      if (web->regno >= max_normal_pseudo)
 ra_debug_msg (0x0002, " stack");
      ra_debug_msg (0x0002, "\n");
    }
}
void
dump_igraph_machine (void)
{
  unsigned int i;
  if (!dump_file || (debug_new_regalloc & 0x10000) == 0)
    return;
  ra_debug_msg (0x10000, "g %d %d\n", num_webs - num_subwebs,
      53);
  for (i = 0; i < num_webs - num_subwebs; i++)
    {
      struct web *web = id2web[i];
      struct conflict_link *cl;
      int flags = 0;
      int numc = 0;
      int col = 0;
      flags = web->spill_temp & 0xF;
      flags |= ((web->type == PRECOLORED) ? 1 : 0) << 4;
      flags |= (web->add_hardregs & 0xF) << 5;
      for (cl = web->conflict_list; cl; cl = cl->next)
 if (cl->t->id < web->id)
   numc++;
      ra_debug_msg (0x10000, "n %d %d %d %d %d %d %d\n",
   web->id, web->color, flags,
   (unsigned int)web->spill_cost, web->num_defs, web->num_uses,
   numc);
      if (web->type != PRECOLORED)
 {
   ra_debug_msg (0x10000, "s %d", web->id);
   while (1)
     {
       unsigned int u = 0;
       int n;
       for (n = 0; n < 32 && col < 53; n++, col++)
  if ((!!((web->usable_regs)[(col) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((col) % ((unsigned) (8 * 4)))))))
    u |= 1 << n;
       ra_debug_msg (0x10000, " %u", u);
       if (col >= 53)
  break;
     }
   ra_debug_msg (0x10000, "\n");
 }
      if (numc)
 {
   ra_debug_msg (0x10000, "c %d", web->id);
   for (cl = web->conflict_list; cl; cl = cl->next)
     {
       if (cl->t->id < web->id)
  ra_debug_msg (0x10000, " %d", cl->t->id);
     }
   ra_debug_msg (0x10000, "\n");
 }
    }
  ra_debug_msg (0x10000, "e\n");
}
void
dump_constraints (void)
{
  rtx insn;
  int i;
  if (!dump_file || (debug_new_regalloc & 0x0040) == 0)
    return;
  for (i = 53; i < ra_max_regno; i++)
    if ((cfun->emit->x_regno_reg_rtx)[i] && (((enum rtx_code) ((cfun->emit->x_regno_reg_rtx)[i])->code) == REG))
      ((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[0]).rtuint)
   = ra_reg_renumber[i] >= 0 ? ra_reg_renumber[i] : i;
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      {
 int code;
 int uid = (((insn)->u.fld[0]).rtint);
 int o;
 code = ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn));
 if (code < 0)
   {
     ra_debug_msg (0x0040,
         "%d: asm insn or not recognizable.\n", uid);
     continue;
   }
 ra_debug_msg (0x0040,
     "%d: code %d {%s}, %d operands, constraints: ",
     uid, code, insn_data[code].name, recog_data.n_operands);
        extract_insn (insn);
 for (o = 0; o < recog_data.n_operands; o++)
   {
     ra_debug_msg (0x0040,
         "%d:%s ", o, recog_data.constraints[o]);
   }
 if (constrain_operands (1))
   ra_debug_msg (0x0040, "matches strictly alternative %d",
       which_alternative);
 else
   ra_debug_msg (0x0040, "doesn't match strictly");
 ra_debug_msg (0x0040, "\n");
      }
  for (i = 53; i < ra_max_regno; i++)
    if ((cfun->emit->x_regno_reg_rtx)[i] && (((enum rtx_code) ((cfun->emit->x_regno_reg_rtx)[i])->code) == REG))
      ((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[0]).rtuint) = i;
}
void
dump_graph_cost (unsigned int level, const char *msg)
{
  unsigned int i;
  unsigned long cost;
  if (!dump_file || (debug_new_regalloc & level) == 0)
    return;
  cost = 0;
  for (i = 0; i < num_webs; i++)
    {
      struct web *web = id2web[i];
      if (alias (web)->type == SPILLED)
 cost += web->orig_spill_cost;
    }
  ra_debug_msg (level, " spill cost of graph (%s) = %lu\n",
  msg ? msg : "", cost);
}
void
dump_ra (struct df *df )
{
  struct web *web;
  struct dlist *d;
  if (!dump_file || (debug_new_regalloc & 0x0080) == 0)
    return;
  ra_debug_msg (0x0080, "\nColored:\n");
  for (d = (web_lists[(int)(COLORED)]); d; d = d->next)
    {
      web = ((d)->value1.web);
      ra_debug_msg (0x0080, "  %4d : color %d\n", web->id, web->color);
    }
  ra_debug_msg (0x0080, "\nCoalesced:\n");
  for (d = (web_lists[(int)(COALESCED)]); d; d = d->next)
    {
      web = ((d)->value1.web);
      ra_debug_msg (0x0080, "  %4d : to web %d, color %d\n", web->id,
          alias (web)->id, web->color);
    }
  ra_debug_msg (0x0080, "\nSpilled:\n");
  for (d = (web_lists[(int)(SPILLED)]); d; d = d->next)
    {
      web = ((d)->value1.web);
      ra_debug_msg (0x0080, "  %4d\n", web->id);
    }
  ra_debug_msg (0x0080, "\n");
  dump_cost (0x0080);
}
void
dump_static_insn_cost (FILE *file, const char *message, const char *prefix)
{
  struct cost
    {
      unsigned long cost;
      unsigned int count;
    };
  basic_block bb;
  struct cost load, store, regcopy, selfcopy, overall;
  memset (&load, 0, sizeof(load));
  memset (&store, 0, sizeof(store));
  memset (&regcopy, 0, sizeof(regcopy));
  memset (&selfcopy, 0, sizeof(selfcopy));
  memset (&overall, 0, sizeof(overall));
  if (!file)
    return;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      unsigned long block_cost = bb->frequency;
      rtx insn, set;
      for (insn = (bb)->head_; insn; insn = (((insn)->u.fld[2]).rtx1))
 {
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && ((set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != ((void *)0)))
     {
       rtx src = (((set)->u.fld[1]).rtx1);
       rtx dest = (((set)->u.fld[0]).rtx1);
       struct cost *pcost = ((void *)0);
       overall.cost += block_cost;
       overall.count++;
       if (rtx_equal_p (src, dest))
  pcost = &selfcopy;
       else if (((enum rtx_code) (src)->code) == ((enum rtx_code) (dest)->code)
         && (((((enum rtx_code) (src)->code) == REG))
      || (((enum rtx_code) (src)->code) == SUBREG
          && (((enum rtx_code) ((((src)->u.fld[0]).rtx1))->code) == REG)
          && (((enum rtx_code) ((((dest)->u.fld[0]).rtx1))->code) == REG))))
  pcost = &regcopy;
       else
  {
    if (((enum rtx_code) (src)->code) == SUBREG)
      src = (((src)->u.fld[0]).rtx1);
    if (((enum rtx_code) (dest)->code) == SUBREG)
      dest = (((dest)->u.fld[0]).rtx1);
    if ((((enum rtx_code) (src)->code) == MEM) && !(((enum rtx_code) (dest)->code) == MEM)
        && memref_is_stack_slot (src))
      pcost = &load;
    else if (!(((enum rtx_code) (src)->code) == MEM) && (((enum rtx_code) (dest)->code) == MEM)
      && memref_is_stack_slot (dest))
      pcost = &store;
  }
       if (pcost)
  {
    pcost->cost += block_cost;
    pcost->count++;
  }
     }
   if (insn == (bb)->end_)
     break;
 }
    }
  if (!prefix)
    prefix = "";
  fprintf (file, "static insn cost %s\n", message ? message : "");
  fprintf (file, "  %soverall:\tnum=%6d\tcost=% 8ld\n",
    prefix, overall.count, overall.cost);
  fprintf (file, "  %sloads:\tnum=%6d\tcost=% 8ld\n",
    prefix, load.count, load.cost);
  fprintf (file, "  %sstores:\tnum=%6d\tcost=% 8ld\n",
    prefix, store.count, store.cost);
  fprintf (file, "  %sregcopy:\tnum=%6d\tcost=% 8ld\n",
    prefix, regcopy.count, regcopy.cost);
  fprintf (file, "  %sselfcpy:\tnum=%6d\tcost=% 8ld\n",
    prefix, selfcopy.count, selfcopy.cost);
}
int
web_conflicts_p (struct web *web1, struct web *web2)
{
  if (web1->type == PRECOLORED && web2->type == PRECOLORED)
    return 0;
  if (web1->type == PRECOLORED)
    return (!!((web2->usable_regs)[(web1->regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((web1->regno) % ((unsigned) (8 * 4))))));
  if (web2->type == PRECOLORED)
    return (!!((web1->usable_regs)[(web2->regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((web2->regno) % ((unsigned) (8 * 4))))));
  return hard_regs_intersect_p (&web1->usable_regs, &web2->usable_regs);
}
void
dump_web_insns (struct web *web)
{
  unsigned int i;
  ra_debug_msg (((unsigned int)-1), "Web: %i(%i)+%i class: %s freedom: %i degree %i\n",
      web->id, web->regno, web->add_hardregs,
      reg_class_names1[web->regclass],
      web->num_freedom, web->num_conflicts);
  ra_debug_msg (((unsigned int)-1), "   def insns:");
  for (i = 0; i < web->num_defs; ++i)
    {
      ra_debug_msg (((unsigned int)-1), " %d ", (((web->defs[i]->insn)->u.fld[0]).rtint));
    }
  ra_debug_msg (((unsigned int)-1), "\n   use insns:");
  for (i = 0; i < web->num_uses; ++i)
    {
      ra_debug_msg (((unsigned int)-1), " %d ", (((web->uses[i]->insn)->u.fld[0]).rtint));
    }
  ra_debug_msg (((unsigned int)-1), "\n");
}
void
dump_web_conflicts (struct web *web)
{
  int num = 0;
  unsigned int def2;
  ra_debug_msg (((unsigned int)-1), "Web: %i(%i)+%i class: %s freedom: %i degree %i\n",
      web->id, web->regno, web->add_hardregs,
      reg_class_names1[web->regclass],
      web->num_freedom, web->num_conflicts);
  for (def2 = 0; def2 < num_webs; def2++)
    if (((igraph)->elms [(((web->id) < (def2) ? ((def2)*((def2)-1)/2)+(web->id) : ((web->id)*((web->id)-1)/2)+(def2))) / ((unsigned) (8 * 4))] >> (((web->id) < (def2) ? ((def2)*((def2)-1)/2)+(web->id) : ((web->id)*((web->id)-1)/2)+(def2))) % ((unsigned) (8 * 4)) & 1) && web->id != def2)
      {
 if ((num % 9) == 5)
   ra_debug_msg (((unsigned int)-1), "\n             ");
 num++;
 ra_debug_msg (((unsigned int)-1), " %d(%d)", def2, id2web[def2]->regno);
 if (id2web[def2]->add_hardregs)
   ra_debug_msg (((unsigned int)-1), "+%d", id2web[def2]->add_hardregs);
 if (web_conflicts_p (web, id2web[def2]))
   ra_debug_msg (((unsigned int)-1), "/x");
 if (id2web[def2]->type == SELECT)
   ra_debug_msg (((unsigned int)-1), "/s");
 if (id2web[def2]->type == COALESCED)
   ra_debug_msg (((unsigned int)-1),"/c/%d", alias (id2web[def2])->id);
      }
  ra_debug_msg (((unsigned int)-1), "\n");
  {
    struct conflict_link *wl;
    num = 0;
    ra_debug_msg (((unsigned int)-1), "By conflicts:     ");
    for (wl = web->conflict_list; wl; wl = wl->next)
      {
 struct web* w = wl->t;
 if ((num % 9) == 8)
   ra_debug_msg (((unsigned int)-1), "\n              ");
 num++;
 ra_debug_msg (((unsigned int)-1), "%d(%d)%s ", w->id, w->regno,
     web_conflicts_p (web, w) ? "+" : "");
      }
    ra_debug_msg (((unsigned int)-1), "\n");
  }
}
void
debug_hard_reg_set (HARD_REG_SET set)
{
  int i;
  for (i = 0; i < 53; ++i)
    {
      if ((!!((set)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
 {
   fprintf (stderr, "%s ", reg_names[i]);
 }
    }
  fprintf (stderr, "\n");
}
struct rewrite_info;
struct rtx_list;
static void spill_coalescing (sbitmap, sbitmap);
static unsigned long spill_prop_savings (struct web *, sbitmap);
static void spill_prop_insert (struct web *, sbitmap, sbitmap);
static int spill_propagation (sbitmap, sbitmap, sbitmap);
static void spill_coalprop (void);
static void allocate_spill_web (struct web *);
static void choose_spill_colors (void);
static void rewrite_program (bitmap);
static void remember_slot (struct rtx_list **, rtx);
static int slots_overlap_p (rtx, rtx);
static void delete_overlapping_slots (struct rtx_list **, rtx);
static int slot_member_p (struct rtx_list *, rtx);
static void insert_stores (bitmap);
static int spill_same_color_p (struct web *, struct web *);
static unsigned char is_partly_live_1 (sbitmap, struct web *);
static void update_spill_colors (HARD_REG_SET *, struct web *, int);
static int spill_is_free (HARD_REG_SET *, struct web *);
static void emit_loads (struct rewrite_info *, int, rtx);
static void reloads_to_loads (struct rewrite_info *, struct ref **,
         unsigned int, struct web **);
static void rewrite_program2 (bitmap);
static void mark_refs_for_checking (struct web *, bitmap);
static void detect_web_parts_to_rebuild (void);
static void delete_useless_defs (void);
static void detect_non_changed_webs (void);
static void reset_changed_flag (void);
static unsigned int deleted_move_insns;
static unsigned long deleted_move_cost;
static void
spill_coalescing (sbitmap coalesce, sbitmap spilled)
{
  struct move_list *ml;
  struct move *m;
  for (ml = wl_moves; ml; ml = ml->next)
    if ((m = ml->move) != ((void *)0))
      {
 struct web *s = alias (m->source_web);
 struct web *t = alias (m->target_web);
 if ((((spilled)->elms [(s->id) / ((unsigned) (8 * 4))] >> (s->id) % ((unsigned) (8 * 4)) & 1) && ((coalesce)->elms [(t->id) / ((unsigned) (8 * 4))] >> (t->id) % ((unsigned) (8 * 4)) & 1))
     || (((spilled)->elms [(t->id) / ((unsigned) (8 * 4))] >> (t->id) % ((unsigned) (8 * 4)) & 1) && ((coalesce)->elms [(s->id) / ((unsigned) (8 * 4))] >> (s->id) % ((unsigned) (8 * 4)) & 1)))
   {
     struct conflict_link *wl;
     if (((sup_igraph)->elms [(s->id * num_webs + t->id) / ((unsigned) (8 * 4))] >> (s->id * num_webs + t->id) % ((unsigned) (8 * 4)) & 1)
  || ((sup_igraph)->elms [(t->id * num_webs + s->id) / ((unsigned) (8 * 4))] >> (t->id * num_webs + s->id) % ((unsigned) (8 * 4)) & 1)
  || s->pattern || t->pattern)
       continue;
     deleted_move_insns++;
     deleted_move_cost += (((m->insn)->u.fld[3]).bb)->frequency + 1;
     ((m->insn)->code = (NOTE));
     (((m->insn)->u.fld[5]).rtint) = NOTE_INSN_DELETED;
     df_insn_modify (df, (((m->insn)->u.fld[3]).bb), m->insn);
     m->target_web->target_of_spilled_move = 1;
     if (s == t)
       continue;
     if (t->type != SPILLED || s->type != SPILLED)
       abort ();
     remove_list (t->dlink, &(web_lists[(int)(SPILLED)]));
     put_web (t, COALESCED);
     t->alias = s;
     s->is_coalesced = 1;
     t->is_coalesced = 1;
     merge_moves (s, t);
     for (wl = t->conflict_list; wl; wl = wl->next)
       {
  struct web *pweb = wl->t;
  if (wl->sub == ((void *)0))
    record_conflict (s, pweb);
  else
    {
      struct sub_conflict *sl;
      for (sl = wl->sub; sl; sl = sl->next)
        {
   struct web *sweb = ((void *)0);
   if ((((enum rtx_code) ((sl->s)->orig_x)->code) == SUBREG))
     sweb = find_subweb (s, sl->s->orig_x);
   if (!sweb)
     sweb = s;
   record_conflict (sweb, sl->t);
        }
    }
  pweb->num_conflicts -= 1 + t->add_hardregs;
       }
   }
      }
}
static unsigned long
spill_prop_savings (struct web *web, sbitmap spilled)
{
  unsigned long savings = 0;
  struct move_list *ml;
  struct move *m;
  unsigned int cost;
  if (web->pattern)
    return 0;
  cost = 1 + ix86_memory_move_cost ((((enum machine_mode) (web->orig_x)->mode)), (web->regclass), (1));
  cost += 1 + ix86_memory_move_cost ((((enum machine_mode) (web->orig_x)->mode)), (web->regclass), (0));
  for (ml = wl_moves; ml; ml = ml->next)
    if ((m = ml->move) != ((void *)0))
      {
 struct web *s = alias (m->source_web);
 struct web *t = alias (m->target_web);
 if (s != web)
   {
     struct web *h = s;
     s = t;
     t = h;
   }
 if (s != web || !((spilled)->elms [(t->id) / ((unsigned) (8 * 4))] >> (t->id) % ((unsigned) (8 * 4)) & 1) || t->pattern
     || ((sup_igraph)->elms [(s->id * num_webs + t->id) / ((unsigned) (8 * 4))] >> (s->id * num_webs + t->id) % ((unsigned) (8 * 4)) & 1)
     || ((sup_igraph)->elms [(t->id * num_webs + s->id) / ((unsigned) (8 * 4))] >> (t->id * num_webs + s->id) % ((unsigned) (8 * 4)) & 1))
   continue;
 savings += (((m->insn)->u.fld[3]).bb)->frequency * cost;
      }
  return savings;
}
static void
spill_prop_insert (struct web *web, sbitmap list, sbitmap processed)
{
  struct move_list *ml;
  struct move *m;
  for (ml = wl_moves; ml; ml = ml->next)
    if ((m = ml->move) != ((void *)0))
      {
 struct web *s = alias (m->source_web);
 struct web *t = alias (m->target_web);
 if (s != web)
   {
     struct web *h = s;
     s = t;
     t = h;
   }
 if (s != web || t->type != COLORED || ((processed)->elms [(t->id) / ((unsigned) (8 * 4))] >> (t->id) % ((unsigned) (8 * 4)) & 1))
   continue;
 ((list)->elms [(t->id) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (t->id) % ((unsigned) (8 * 4)));
 ((processed)->elms [(t->id) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (t->id) % ((unsigned) (8 * 4)));
      }
}
static int
spill_propagation (sbitmap to_prop, sbitmap spilled, sbitmap processed)
{
  int id;
  int again = 0;
  sbitmap list = sbitmap_alloc (num_webs);
  sbitmap_zero (list);
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (to_prop)->size; unsigned long *ptr_ = (to_prop)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (id) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { spill_prop_insert (id2web[id], list, processed); }; if (word_ == 0) break; } } } } while (0)
      ;
  sbitmap_zero (to_prop);
  while ((id = sbitmap_first_set_bit (list)) >= 0)
    {
      struct web *web = id2web[id];
      ((list)->elms [(id) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (id) % ((unsigned) (8 * 4))));
      if (spill_prop_savings (web, spilled) >= web->spill_cost)
 {
   remove_web_from_list (web);
   web->color = -1;
   put_web (web, SPILLED);
   ((spilled)->elms [(id) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (id) % ((unsigned) (8 * 4)));
   ((to_prop)->elms [(id) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (id) % ((unsigned) (8 * 4)));
   spill_prop_insert (web, list, processed);
   again = 1;
 }
    }
  free(list);
  return again;
}
static void
spill_coalprop (void)
{
  sbitmap spilled, processed, to_prop;
  struct dlist *d;
  int again;
  spilled = sbitmap_alloc (num_webs);
  processed = sbitmap_alloc (num_webs);
  to_prop = sbitmap_alloc (num_webs);
  sbitmap_zero (spilled);
  for (d = (web_lists[(int)(SPILLED)]); d; d = d->next)
    ((spilled)->elms [(((d)->value1.web)->id) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (((d)->value1.web)->id) % ((unsigned) (8 * 4)));
  sbitmap_copy (to_prop, spilled);
  sbitmap_zero (processed);
  do
    {
      spill_coalescing (to_prop, spilled);
      again = 0 && spill_propagation (to_prop, spilled, processed);
    }
  while (again);
  free(to_prop);
  free(processed);
  free(spilled);
}
static void
allocate_spill_web (struct web *web)
{
  int regno = web->regno;
  rtx slot;
  if (web->stack_slot)
    return;
  slot = gen_reg_rtx (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[regno])->mode));
  web->stack_slot = slot;
}
static void
choose_spill_colors (void)
{
  struct dlist *d;
  unsigned long *costs = xmalloc (53 * sizeof (costs[0]));
  for (d = (web_lists[(int)(SPILLED)]); d; d = d->next)
    {
      struct web *web = ((d)->value1.web);
      struct conflict_link *wl;
      int bestc, c;
      HARD_REG_SET avail;
      memset (costs, 0, 53 * sizeof (costs[0]));
      for (wl = web->conflict_list; wl; wl = wl->next)
 {
   struct web *pweb = wl->t;
   if (pweb->type == COLORED || pweb->type == PRECOLORED)
     costs[pweb->color] += pweb->spill_cost;
 }
      do { HARD_REG_ELT_TYPE *scan_tp_ = (avail), *scan_fp_ = (web->usable_regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      if (web->crosses_call)
 {
   for (c = 0; c < 53; c++)
     if ((!!((call_used_reg_set)[(c) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c) % ((unsigned) (8 * 4)))))))
       costs[c] += 1000;
 }
      bestc = -1;
      for (c = 0; c < 53; c++)
 if ((bestc < 0 || costs[bestc] > costs[c])
            && (!!((avail)[(c) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c) % ((unsigned) (8 * 4))))))
     && ix86_hard_regno_mode_ok ((c), (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode))))
   {
     int i, size;
     size = hard_regno_nregs[c][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode)];
     for (i = 1; i < size
   && (!!((avail)[(c + i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c + i) % ((unsigned) (8 * 4)))))); i++);
     if (i == size)
       bestc = c;
   }
      web->color = bestc;
      ra_debug_msg (0x0008, "choosing color %d for spilled web %d\n",
   bestc, web->id);
    }
  free (costs);
}
static unsigned int emitted_spill_loads;
static unsigned int emitted_spill_stores;
static unsigned int emitted_remat;
static unsigned long spill_load_cost;
static unsigned long spill_store_cost;
static unsigned long spill_remat_cost;
static bitmap useless_defs;
static void
rewrite_program (bitmap new_deaths)
{
  unsigned int i;
  struct dlist *d;
  bitmap b = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (i = 0; i < 2; i++)
    for (d = (i == 0) ? (web_lists[(int)(SPILLED)]) : (web_lists[(int)(COALESCED)]); d; d = d->next)
      {
 struct web *web = ((d)->value1.web);
 struct web *aweb = alias (web);
 unsigned int j;
 rtx slot;
 if (aweb->type != SPILLED)
   continue;
 if (flag_ra_spill_every_use)
   {
     bitmap_clear (b);
     allocate_spill_web (aweb);
     slot = aweb->stack_slot;
     for (j = 0; j < web->num_uses; j++)
       {
  rtx insns, target, source;
  rtx insn = ((web->uses[j])->insn);
  rtx prev = (((insn)->u.fld[1]).rtx1);
  basic_block bb = (((insn)->u.fld[3]).bb);
  if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    continue;
         if (bitmap_bit_p (b, (((insn)->u.fld[0]).rtint)))
    continue;
         bitmap_set_bit (b, (((insn)->u.fld[0]).rtint));
         target = ((web->uses[j])->reg);
         source = slot;
  start_sequence ();
         if (((enum rtx_code) (target)->code) == SUBREG)
    source = simplify_gen_subreg (((enum machine_mode) (target)->mode), source,
      ((enum machine_mode) (source)->mode),
      (((target)->u.fld[1]).rtuint));
  ra_emit_move_insn (target, source);
  insns = get_insns ();
  end_sequence ();
  emit_insn_before (insns, insn);
         if ((bb)->head_ == insn)
    (bb)->head_ = (((prev)->u.fld[2]).rtx1);
  for (insn = (((insn)->u.fld[1]).rtx1); insn != prev;
       insn = (((insn)->u.fld[1]).rtx1))
    {
      ((((insn)->u.fld[3]).bb) = bb);
      df_insn_modify (df, bb, insn);
    }
  emitted_spill_loads++;
  spill_load_cost += bb->frequency + 1;
       }
   }
 slot = aweb->stack_slot;
 bitmap_clear (b);
 if (slot)
   for (j = 0; j < web->num_defs; j++)
     {
       rtx insns, source, dest;
       rtx insn = ((web->defs[j])->insn);
       rtx following = (((insn)->u.fld[2]).rtx1);
       basic_block bb = (((insn)->u.fld[3]).bb);
       if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
  continue;
       if (bitmap_bit_p (b, (((insn)->u.fld[0]).rtint)))
  continue;
       bitmap_set_bit (b, (((insn)->u.fld[0]).rtint));
       start_sequence ();
       source = ((web->defs[j])->reg);
       dest = slot;
       if (((enum rtx_code) (source)->code) == SUBREG)
  dest = simplify_gen_subreg (((enum machine_mode) (source)->mode), dest,
         ((enum machine_mode) (dest)->mode),
         (((source)->u.fld[1]).rtuint));
       ra_emit_move_insn (dest, source);
       insns = get_insns ();
       end_sequence ();
       if (insns)
  {
    emit_insn_after (insns, insn);
    if ((bb)->end_ == insn)
      (bb)->end_ = (((following)->u.fld[1]).rtx1);
    for (insn = insns; insn != following; insn = (((insn)->u.fld[2]).rtx1))
      {
        ((((insn)->u.fld[3]).bb) = bb);
        df_insn_modify (df, bb, insn);
      }
  }
       else
  df_insn_modify (df, bb, insn);
       emitted_spill_stores++;
       spill_store_cost += bb->frequency + 1;
       bitmap_set_bit (new_deaths, ((((((following)->u.fld[1]).rtx1))->u.fld[0]).rtint));
     }
      }
  do { if (b) { bitmap_clear (b); free (b); (b) = 0; } } while (0);
}
struct rtx_list
{
  struct rtx_list *next;
  rtx x;
};
static void
remember_slot (struct rtx_list **list, rtx x)
{
  struct rtx_list *l;
  l = ra_alloc (sizeof (*l));
  l->next = *list;
  l->x = x;
  *list = l;
}
static int
slots_overlap_p (rtx s1, rtx s2)
{
  rtx base1, base2;
  long ofs1 = 0, ofs2 = 0;
  int size1 = ((unsigned short) mode_size[((enum machine_mode) (s1)->mode)]);
  int size2 = ((unsigned short) mode_size[((enum machine_mode) (s2)->mode)]);
  if (((enum rtx_code) (s1)->code) == SUBREG)
    ofs1 = (((s1)->u.fld[1]).rtuint), s1 = (((s1)->u.fld[0]).rtx1);
  if (((enum rtx_code) (s2)->code) == SUBREG)
    ofs2 = (((s2)->u.fld[1]).rtuint), s2 = (((s2)->u.fld[0]).rtx1);
  if (s1 == s2)
    return 1;
  if (((enum rtx_code) (s1)->code) != ((enum rtx_code) (s2)->code))
    return 0;
  if ((((enum rtx_code) (s1)->code) == REG) && (((enum rtx_code) (s2)->code) == REG))
    {
      if ((((s1)->u.fld[0]).rtuint) != (((s2)->u.fld[0]).rtuint))
 return 0;
      if (ofs1 >= ofs2 + size2 || ofs2 >= ofs1 + size1)
 return 0;
      return 1;
    }
  if (!(((enum rtx_code) (s1)->code) == MEM) || ((enum rtx_code) (s2)->code) != MEM)
    abort ();
  s1 = (((s1)->u.fld[0]).rtx1);
  s2 = (((s2)->u.fld[0]).rtx1);
  if (((enum rtx_code) (s1)->code) != PLUS || !(((enum rtx_code) ((((s1)->u.fld[0]).rtx1))->code) == REG)
      || ((enum rtx_code) ((((s1)->u.fld[1]).rtx1))->code) != CONST_INT)
    return 1;
  if (((enum rtx_code) (s2)->code) != PLUS || !(((enum rtx_code) ((((s2)->u.fld[0]).rtx1))->code) == REG)
      || ((enum rtx_code) ((((s2)->u.fld[1]).rtx1))->code) != CONST_INT)
    return 1;
  base1 = (((s1)->u.fld[0]).rtx1);
  base2 = (((s2)->u.fld[0]).rtx1);
  if (!rtx_equal_p (base1, base2))
    return 1;
  ofs1 += (((((s1)->u.fld[1]).rtx1))->u.hwint[0]);
  ofs2 += (((((s2)->u.fld[1]).rtx1))->u.hwint[0]);
  if (ofs1 >= ofs2 + size2 || ofs2 >= ofs1 + size1)
    return 0;
  return 1;
}
static void
delete_overlapping_slots (struct rtx_list **list, rtx x)
{
  while (*list)
    {
      if (slots_overlap_p ((*list)->x, x))
 *list = (*list)->next;
      else
 list = &((*list)->next);
    }
}
static int
slot_member_p (struct rtx_list *list, rtx x)
{
  for (;list; list = list->next)
    if (rtx_equal_p (list->x, x))
      return 1;
  return 0;
}
static void
insert_stores (bitmap new_deaths)
{
  rtx insn;
  rtx last_slot = (rtx) 0;
  struct rtx_list *slots = ((void *)0);
  for (insn = get_last_insn (); insn; insn = (((insn)->u.fld[1]).rtx1))
    {
      int uid = (((insn)->u.fld[0]).rtint);
      if (((enum rtx_code) (insn)->code) == BARRIER
   || (((enum rtx_code) (insn)->code) == JUMP_INSN) || can_throw_internal (insn))
 {
   last_slot = (rtx) 0;
   slots = ((void *)0);
 }
      if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      if (uid < insn_df_max_uid)
 {
   unsigned int n;
   rtx following = (((insn)->u.fld[2]).rtx1);
   basic_block bb = (((insn)->u.fld[3]).bb);
   struct ra_insn_info info;
   info = insn_df[uid];
   for (n = 0; n < info.num_defs; n++)
     {
       struct web *web = def2web[((info.defs[n])->id)];
       struct web *aweb = alias ((((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web)));
       rtx slot, source;
       if (aweb->type != SPILLED || !aweb->stack_slot)
  continue;
       slot = aweb->stack_slot;
       source = ((info.defs[n])->reg);
       start_sequence ();
       if (((enum rtx_code) (source)->code) == SUBREG)
  slot = simplify_gen_subreg (((enum machine_mode) (source)->mode), slot,
         ((enum machine_mode) (slot)->mode),
         (((source)->u.fld[1]).rtuint));
       if ((!last_slot || !rtx_equal_p (slot, last_slot))
    && ! slot_member_p (slots, slot))
  {
    rtx insns, ni;
    last_slot = slot;
    remember_slot (&slots, slot);
    ra_emit_move_insn (slot, source);
    insns = get_insns ();
    end_sequence ();
    if (insns)
      {
        emit_insn_after (insns, insn);
        if ((bb)->end_ == insn)
   (bb)->end_ = (((following)->u.fld[1]).rtx1);
        for (ni = insns; ni != following; ni = (((ni)->u.fld[2]).rtx1))
   {
     ((((ni)->u.fld[3]).bb) = bb);
     df_insn_modify (df, bb, ni);
   }
      }
    else
      df_insn_modify (df, bb, insn);
    emitted_spill_stores++;
    spill_store_cost += bb->frequency + 1;
    bitmap_set_bit (new_deaths, ((((((following)->u.fld[1]).rtx1))->u.fld[0]).rtint));
  }
       else
  {
    end_sequence ();
  }
     }
 }
      if (uid >= last_max_uid)
 {
   rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
   last_slot = (rtx) 0;
   if (!set)
     slots = ((void *)0);
   else
     {
       if (1 || (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == MEM))
         delete_overlapping_slots (&slots, (((set)->u.fld[1]).rtx1));
     }
 }
    }
}
static int
spill_same_color_p (struct web *web1, struct web *web2)
{
  int c1, size1, c2, size2;
  if ((c1 = alias (web1)->color) < 0 || c1 == an_unusable_color)
    return 0;
  if ((c2 = alias (web2)->color) < 0 || c2 == an_unusable_color)
    return 0;
  size1 = web1->type == PRECOLORED
          ? 1 : hard_regno_nregs[c1][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web1->regno])->mode)];
  size2 = web2->type == PRECOLORED
          ? 1 : hard_regno_nregs[c2][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web2->regno])->mode)];
  if (c1 >= c2 + size2 || c2 >= c1 + size1)
    return 0;
  return 1;
}
static unsigned char
is_partly_live_1 (sbitmap live, struct web *web)
{
  do
    if (((live)->elms [(web->id) / ((unsigned) (8 * 4))] >> (web->id) % ((unsigned) (8 * 4)) & 1))
      return 1;
  while ((web = web->subreg_next));
  return 0;
}
static void
update_spill_colors (HARD_REG_SET *in_use, struct web *web, int add)
{
  int c, size;
  if ((c = alias ((((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web)))->color) < 0
      || c == an_unusable_color)
    return;
  size = hard_regno_nregs[c][((enum machine_mode) (web->orig_x)->mode)];
  if ((((enum rtx_code) ((web)->orig_x)->code) == SUBREG))
    {
      c += subreg_regno_offset (c, ((enum machine_mode) ((((web->orig_x)->u.fld[0]).rtx1))->mode),
    (((web->orig_x)->u.fld[1]).rtuint),
    ((enum machine_mode) (web->orig_x)->mode));
    }
  else if (web->type == PRECOLORED)
    size = 1;
  if (add)
    for (; size--;)
      ((*in_use)[(c + size) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((c + size) % ((unsigned) (8 * 4))));
  else
    for (; size--;)
      ((*in_use)[(c + size) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((c + size) % ((unsigned) (8 * 4)))));
}
static int
spill_is_free (HARD_REG_SET *in_use, struct web *web)
{
  int c, size;
  if ((c = alias (web)->color) < 0)
    return -1;
  if (c == an_unusable_color)
    return 1;
  size = web->type == PRECOLORED
         ? 1 : hard_regno_nregs[c][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode)];
  for (; size--;)
    if ((!!((*in_use)[(c + size) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((c + size) % ((unsigned) (8 * 4)))))))
      return 0;
  return 1;
}
struct rewrite_info
{
  bitmap need_reload;
  bitmap scratch;
  sbitmap live;
  struct web **needed_loads;
  int nl_size;
  int num_reloads;
  HARD_REG_SET colors_in_use;
  int any_spilltemps_spilled;
  int need_load;
};
static void
emit_loads (struct rewrite_info *ri, int nl_first_reload, rtx last_block_insn)
{
  int j;
  for (j = ri->nl_size; j;)
    {
      struct web *web = ri->needed_loads[--j];
      struct web *supweb;
      struct web *aweb;
      rtx ni, slot, reg;
      rtx before = (rtx) 0, after = (rtx) 0;
      basic_block bb;
      if (!web)
 continue;
      supweb = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
      if (supweb->regno >= max_normal_pseudo)
 abort ();
      if (!ri->need_load)
 {
   if (!supweb->spill_temp)
     continue;
   else
     ri->needed_loads[j] = 0;
 }
      web->in_load = 0;
      if (j < nl_first_reload && !((ri->live)->elms [(web->id) / ((unsigned) (8 * 4))] >> (web->id) % ((unsigned) (8 * 4)) & 1))
 continue;
      aweb = alias (supweb);
      aweb->changed = 1;
      start_sequence ();
      if (supweb->pattern)
 {
   if (aweb != supweb)
     abort ();
   slot = copy_rtx (supweb->pattern);
   reg = copy_rtx (supweb->orig_x);
   if (reg != supweb->orig_x)
     abort ();
 }
      else
 {
   allocate_spill_web (aweb);
   slot = aweb->stack_slot;
   reg = copy_rtx (web->orig_x);
   if (((enum rtx_code) (reg)->code) == SUBREG)
     slot = simplify_gen_subreg (((enum machine_mode) (reg)->mode), slot, ((enum machine_mode) (slot)->mode),
     (((reg)->u.fld[1]).rtuint));
 }
      ra_emit_move_insn (reg, slot);
      ni = get_insns ();
      end_sequence ();
      before = web->last_use_insn;
      web->last_use_insn = (rtx) 0;
      if (!before)
 {
   if ((((enum rtx_code) (last_block_insn)->code) == JUMP_INSN))
     before = last_block_insn;
   else
     after = last_block_insn;
 }
      if (after)
 {
   rtx foll = (((after)->u.fld[2]).rtx1);
   bb = (((after)->u.fld[3]).bb);
   emit_insn_after (ni, after);
   if ((bb)->end_ == after)
     (bb)->end_ = (((foll)->u.fld[1]).rtx1);
   for (ni = (((after)->u.fld[2]).rtx1); ni != foll; ni = (((ni)->u.fld[2]).rtx1))
     {
       ((((ni)->u.fld[3]).bb) = bb);
       df_insn_modify (df, bb, ni);
     }
 }
      else
 {
   rtx prev = (((before)->u.fld[1]).rtx1);
   bb = (((before)->u.fld[3]).bb);
   emit_insn_before (ni, before);
   if ((bb)->head_ == before)
     (bb)->head_ = (((prev)->u.fld[2]).rtx1);
   for (; ni != before; ni = (((ni)->u.fld[2]).rtx1))
     {
       ((((ni)->u.fld[3]).bb) = bb);
       df_insn_modify (df, bb, ni);
     }
 }
      if (supweb->pattern)
 {
   emitted_remat++;
   spill_remat_cost += bb->frequency + 1;
 }
      else
 {
   emitted_spill_loads++;
   spill_load_cost += bb->frequency + 1;
 }
      ((ri->live)->elms [(web->id) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (web->id) % ((unsigned) (8 * 4))));
      if (ri->need_load == 2 && j < nl_first_reload)
 break;
    }
  if (ri->need_load)
    ri->nl_size = j;
}
static void
reloads_to_loads (struct rewrite_info *ri, struct ref **refs,
    unsigned int num_refs, struct web **ref2web)
{
  unsigned int n;
  int num_reloads = ri->num_reloads;
  for (n = 0; n < num_refs && num_reloads; n++)
    {
      struct web *web = ref2web[((refs[n])->id)];
      struct web *supweb = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
      int is_death;
      int j;
      if (alias (supweb)->type == SPILLED)
 continue;
      if (supweb->type == PRECOLORED
   && (!!((never_use_colors)[(supweb->color) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((supweb->color) % ((unsigned) (8 * 4)))))))
 continue;
      is_death = !((ri->live)->elms [(supweb->id) / ((unsigned) (8 * 4))] >> (supweb->id) % ((unsigned) (8 * 4)) & 1);
      is_death &= !((ri->live)->elms [(web->id) / ((unsigned) (8 * 4))] >> (web->id) % ((unsigned) (8 * 4)) & 1);
      if (is_death)
 {
   int old_num_r = num_reloads;
   bitmap_clear (ri->scratch);
   do { bitmap_element *ptr_ = (ri->need_reload)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct web *web2 = id2web[j]; struct web *aweb2 = alias ((((web2)->parent_web) ? find_web_for_subweb_1 ((web2)->parent_web) : (web2))); if (spill_is_free (&(ri->colors_in_use), aweb2) == 0) abort (); if (spill_same_color_p (supweb, aweb2) ) { if (!web2->in_load) { ri->needed_loads[ri->nl_size++] = web2; web2->in_load = 1; } bitmap_set_bit (ri->scratch, j); num_reloads--; } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
   if (num_reloads != old_num_r)
     bitmap_operation (ri->need_reload, ri->need_reload, ri->scratch,
         BITMAP_AND_COMPL);
 }
    }
  ri->num_reloads = num_reloads;
}
static void
rewrite_program2 (bitmap new_deaths)
{
  basic_block bb = ((void *)0);
  int nl_first_reload;
  struct rewrite_info ri;
  rtx insn;
  ri.needed_loads = xmalloc (num_webs * sizeof (struct web *));
  ri.need_reload = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  ri.scratch = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  ri.live = sbitmap_alloc (num_webs);
  ri.nl_size = 0;
  ri.num_reloads = 0;
  for (insn = get_last_insn (); insn; insn = (((insn)->u.fld[1]).rtx1))
    {
      basic_block last_bb = ((void *)0);
      rtx last_block_insn;
      int i, j;
      if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 insn = prev_real_insn (insn);
      while (insn && !(bb = (((insn)->u.fld[3]).bb)))
 insn = prev_real_insn (insn);
      if (!insn)
 break;
      i = bb->index + 2;
      last_block_insn = insn;
      sbitmap_zero (ri.live);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (ri.colors_in_use); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      do { bitmap_element *ptr_ = (live_at_end[i - 2])->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct web *web = use2web[j]; struct web *aweb = alias ((((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web))); if (aweb->type != SPILLED ) { ((ri.live)->elms [(web->id) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (web->id) % ((unsigned) (8 * 4))); if (aweb->type != SPILLED) update_spill_colors (&(ri.colors_in_use), web, 1); } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
      bitmap_clear (ri.need_reload);
      ri.num_reloads = 0;
      ri.any_spilltemps_spilled = 0;
      if (flag_ra_ir_spilling)
 {
   struct dlist *d;
   int pass;
   for (pass = 0; pass < 2; pass++)
     for (d = (pass) ? (web_lists[(int)(SPILLED)]) : (web_lists[(int)(COALESCED)]); d; d = d->next)
       {
         struct web *web = ((d)->value1.web);
  struct web *aweb = alias (web);
  if (aweb->type != SPILLED)
    continue;
         if (((!web->subreg_next) ? ((ri.live)->elms [(web->id) / ((unsigned) (8 * 4))] >> (web->id) % ((unsigned) (8 * 4)) & 1) : is_partly_live_1 (ri.live, web))
      && spill_is_free (&(ri.colors_in_use), web) > 0)
    {
      ri.num_reloads++;
             bitmap_set_bit (ri.need_reload, web->id);
      web->last_use_insn = (rtx) 0;
    }
       }
 }
      last_bb = bb;
      for (; insn; insn = (((insn)->u.fld[1]).rtx1))
 {
   struct ra_insn_info info;
   unsigned int n;
   memset (&info, 0, sizeof info);
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && (((insn)->u.fld[3]).bb) != last_bb)
     {
       int index = (((insn)->u.fld[3]).bb)->index + 2;
       do { bitmap_element *ptr_ = (live_at_end[index - 2])->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct web *web = use2web[j]; struct web *aweb = alias ((((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web))); if (aweb->type != SPILLED) { ((ri.live)->elms [(web->id) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (web->id) % ((unsigned) (8 * 4))); update_spill_colors (&(ri.colors_in_use), web, 1); } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
    ;
       bitmap_clear (ri.scratch);
       do { bitmap_element *ptr_ = (ri.need_reload)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct web *web2 = id2web[j]; struct web *supweb2 = (((web2)->parent_web) ? find_web_for_subweb_1 ((web2)->parent_web) : (web2)); struct web *aweb2 = alias (supweb2); if (spill_is_free (&(ri.colors_in_use), aweb2) <= 0) { if (!web2->in_load) { ri.needed_loads[ri.nl_size++] = web2; web2->in_load = 1; } bitmap_set_bit (ri.scratch, j); ri.num_reloads--; } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
    ;
       bitmap_operation (ri.need_reload, ri.need_reload, ri.scratch,
    BITMAP_AND_COMPL);
       last_bb = (((insn)->u.fld[3]).bb);
       last_block_insn = insn;
       if (!((((enum rtx_code) (last_block_insn)->code) == INSN) || (((enum rtx_code) (last_block_insn)->code) == JUMP_INSN) || (((enum rtx_code) (last_block_insn)->code) == CALL_INSN)))
         last_block_insn = prev_real_insn (last_block_insn);
     }
   ri.need_load = 0;
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     info = insn_df[(((insn)->u.fld[0]).rtint)];
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     for (n = 0; n < info.num_defs; n++)
       {
  struct ref *ref = info.defs[n];
  struct web *web = def2web[((ref)->id)];
  struct web *supweb = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
  int is_non_def = 0;
  unsigned int n2;
  supweb = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
  for (n2 = 0; n2 < info.num_uses; n2++)
    {
      struct web *web2 = use2web[((info.uses[n2])->id)];
      if (supweb == (((web2)->parent_web) ? find_web_for_subweb_1 ((web2)->parent_web) : (web2)))
        {
   is_non_def = 1;
   break;
        }
    }
  if (is_non_def)
    continue;
  if (!((!supweb->subreg_next) ? ((ri.live)->elms [(supweb->id) / ((unsigned) (8 * 4))] >> (supweb->id) % ((unsigned) (8 * 4)) & 1) : is_partly_live_1 (ri.live, supweb)))
    bitmap_set_bit (useless_defs, ((ref)->id));
  ((ri.live)->elms [(web->id) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (web->id) % ((unsigned) (8 * 4))));
  if (bitmap_bit_p (ri.need_reload, web->id))
    {
      ri.num_reloads--;
      bitmap_clear_bit (ri.need_reload, web->id);
    }
  if (web != supweb)
    {
      if (!((!supweb->subreg_next) ? ((ri.live)->elms [(supweb->id) / ((unsigned) (8 * 4))] >> (supweb->id) % ((unsigned) (8 * 4)) & 1) : is_partly_live_1 (ri.live, supweb))
   && bitmap_bit_p (ri.need_reload, supweb->id))
        {
   ri.num_reloads--;
   bitmap_clear_bit (ri.need_reload, supweb->id);
        }
    }
  else
    {
      struct web *sweb;
      for (sweb = supweb->subreg_next; sweb;
    sweb = sweb->subreg_next)
        {
          ((ri.live)->elms [(sweb->id) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (sweb->id) % ((unsigned) (8 * 4))));
   if (bitmap_bit_p (ri.need_reload, sweb->id))
     {
              ri.num_reloads--;
              bitmap_clear_bit (ri.need_reload, sweb->id);
     }
        }
    }
  if (alias (supweb)->type != SPILLED)
    update_spill_colors (&(ri.colors_in_use), web, 0);
       }
   nl_first_reload = ri.nl_size;
   if (((enum rtx_code) (insn)->code) == CALL_INSN)
     ri.need_load = 1;
   else if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     for (n = 0; n < info.num_uses; n++)
       {
  struct web *web = use2web[((info.uses[n])->id)];
  struct web *supweb = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
  int is_death;
  if (supweb->type == PRECOLORED
      && (!!((never_use_colors)[(supweb->color) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((supweb->color) % ((unsigned) (8 * 4)))))))
    continue;
  is_death = !((ri.live)->elms [(supweb->id) / ((unsigned) (8 * 4))] >> (supweb->id) % ((unsigned) (8 * 4)) & 1);
  is_death &= !((ri.live)->elms [(web->id) / ((unsigned) (8 * 4))] >> (web->id) % ((unsigned) (8 * 4)) & 1);
  if (is_death)
    {
      ri.need_load = 1;
      bitmap_set_bit (new_deaths, (((insn)->u.fld[0]).rtint));
      break;
    }
       }
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && ri.num_reloads)
     {
              int old_num_reloads = ri.num_reloads;
       reloads_to_loads (&ri, info.uses, info.num_uses, use2web);
       if (ri.num_reloads)
  reloads_to_loads (&ri, info.defs, info.num_defs, def2web);
       if (ri.num_reloads != old_num_reloads && !ri.need_load)
  ri.need_load = 1;
     }
   if (ri.nl_size && (ri.need_load || ri.any_spilltemps_spilled))
     emit_loads (&ri, nl_first_reload, last_block_insn);
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && flag_ra_ir_spilling)
     for (n = 0; n < info.num_uses; n++)
       {
  struct web *web = use2web[((info.uses[n])->id)];
  struct web *aweb = alias ((((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web)));
  if (aweb->type != SPILLED)
    update_spill_colors (&(ri.colors_in_use), web, 1);
       }
   ri.any_spilltemps_spilled = 0;
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     for (n = 0; n < info.num_uses; n++)
       {
  struct web *web = use2web[((info.uses[n])->id)];
  struct web *supweb = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
  struct web *aweb = alias (supweb);
  ((ri.live)->elms [(web->id) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (web->id) % ((unsigned) (8 * 4)));
  if (aweb->type != SPILLED)
    continue;
  if (supweb->spill_temp)
    ri.any_spilltemps_spilled = 1;
  web->last_use_insn = insn;
  if (!web->in_load)
    {
      if (spill_is_free (&(ri.colors_in_use), aweb) <= 0
   || !flag_ra_ir_spilling)
        {
   ri.needed_loads[ri.nl_size++] = web;
   web->in_load = 1;
   web->one_load = 1;
        }
      else if (!bitmap_bit_p (ri.need_reload, web->id))
        {
          bitmap_set_bit (ri.need_reload, web->id);
   ri.num_reloads++;
   web->one_load = 1;
        }
      else
        web->one_load = 0;
    }
  else
    web->one_load = 0;
       }
   if (((enum rtx_code) (insn)->code) == CODE_LABEL)
     break;
 }
      nl_first_reload = ri.nl_size;
      if (ri.num_reloads)
 {
   int in_ir = 0;
   edge e;
   int num = 0;
   HARD_REG_SET cum_colors, colors;
   do { HARD_REG_ELT_TYPE *scan_tp_ = (cum_colors); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
   for (e = bb->pred; e && num < 5; e = e->pred_next, num++)
     {
       int j;
       do { HARD_REG_ELT_TYPE *scan_tp_ = (colors); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
       do { bitmap_element *ptr_ = (live_at_end[e->src->index])->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct web *web = use2web[j]; struct web *aweb = alias ((((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web))); if (aweb->type != SPILLED) update_spill_colors (&colors, web, 1); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
    ;
       do { HARD_REG_ELT_TYPE *scan_tp_ = (cum_colors), *scan_fp_ = (colors); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
     }
   if (num == 5)
     in_ir = 1;
   bitmap_clear (ri.scratch);
   do { bitmap_element *ptr_ = (ri.need_reload)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct web *web2 = id2web[j]; struct web *supweb2 = (((web2)->parent_web) ? find_web_for_subweb_1 ((web2)->parent_web) : (web2)); struct web *aweb2 = alias (supweb2); if (((ra_pass > 0 || supweb2->target_of_spilled_move) && (1 || in_ir || spill_is_free (&cum_colors, aweb2) <= 0)) || (ra_pass == 1 && (in_ir || spill_is_free (&cum_colors, aweb2) <= 0))) { if (!web2->in_load) { ri.needed_loads[ri.nl_size++] = web2; web2->in_load = 1; } bitmap_set_bit (ri.scratch, j); ri.num_reloads--; } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
   bitmap_operation (ri.need_reload, ri.need_reload, ri.scratch,
       BITMAP_AND_COMPL);
 }
      ri.need_load = 1;
      emit_loads (&ri, nl_first_reload, last_block_insn);
      if (ri.nl_size != 0 )
 abort ();
      if (!insn)
 break;
    }
  free (ri.needed_loads);
  free(ri.live);
  do { if (ri.scratch) { bitmap_clear (ri.scratch); free (ri.scratch); (ri.scratch) = 0; } } while (0);
  do { if (ri.need_reload) { bitmap_clear (ri.need_reload); free (ri.need_reload); (ri.need_reload) = 0; } } while (0);
}
static void
mark_refs_for_checking (struct web *web, bitmap uses_as_bitmap)
{
  unsigned int i;
  for (i = 0; i < web->num_uses; i++)
    {
      unsigned int id = ((web->uses[i])->id);
      ((last_check_uses)->elms [(id) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (id) % ((unsigned) (8 * 4)));
      bitmap_set_bit (uses_as_bitmap, id);
      web_parts[df->def_id + id].spanned_deaths = 0;
      web_parts[df->def_id + id].crosses_call = 0;
    }
  for (i = 0; i < web->num_defs; i++)
    {
      unsigned int id = ((web->defs[i])->id);
      web_parts[id].spanned_deaths = 0;
      web_parts[id].crosses_call = 0;
    }
}
static void
detect_web_parts_to_rebuild (void)
{
  bitmap uses_as_bitmap;
  unsigned int i, pass;
  struct dlist *d;
  sbitmap already_webs = sbitmap_alloc (num_webs);
  uses_as_bitmap = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  if (last_check_uses)
    free(last_check_uses);
  last_check_uses = sbitmap_alloc (df->use_id);
  sbitmap_zero (last_check_uses);
  sbitmap_zero (already_webs);
  for (pass = 0; pass < 2; pass++)
    for (d = (pass == 0) ? (web_lists[(int)(SPILLED)]) : (web_lists[(int)(COALESCED)]); d; d = d->next)
      {
        struct web *web = ((d)->value1.web);
 struct conflict_link *wl;
 unsigned int j;
 if (alias (web)->type != SPILLED)
   continue;
        for (i = 0; i < web->num_uses; i++)
   {
     unsigned int id = ((web->uses[i])->id);
     ((last_check_uses)->elms [(id) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (id) % ((unsigned) (8 * 4)));
     bitmap_set_bit (uses_as_bitmap, id);
     web_parts[df->def_id + id].uplink = ((void *)0);
     web_parts[df->def_id + id].spanned_deaths = 0;
     web_parts[df->def_id + id].crosses_call = 0;
   }
 for (i = 0; i < web->num_defs; i++)
   {
     unsigned int id = ((web->defs[i])->id);
     web_parts[id].uplink = ((void *)0);
     web_parts[id].spanned_deaths = 0;
     web_parts[id].crosses_call = 0;
   }
 if (web->have_orig_conflicts)
   wl = web->orig_conflict_list;
 else
   wl = web->conflict_list;
 for (; wl; wl = wl->next)
   {
     if (((already_webs)->elms [(wl->t->id) / ((unsigned) (8 * 4))] >> (wl->t->id) % ((unsigned) (8 * 4)) & 1))
       continue;
     ((already_webs)->elms [(wl->t->id) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (wl->t->id) % ((unsigned) (8 * 4)));
     mark_refs_for_checking (wl->t, uses_as_bitmap);
   }
 do { bitmap_element *ptr_ = (web->useless_conflicts)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct web *web2 = id2web[j]; if (((already_webs)->elms [(web2->id) / ((unsigned) (8 * 4))] >> (web2->id) % ((unsigned) (8 * 4)) & 1)) continue; ((already_webs)->elms [(web2->id) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (web2->id) % ((unsigned) (8 * 4))); mark_refs_for_checking (web2, uses_as_bitmap); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
     ;
      }
  for (i = 0; i < 53; i++)
    if (!fixed_regs[i])
      {
 struct df_link *link;
 for (link = df->regs[i].uses; link; link = link->next)
   if (link->ref)
     bitmap_set_bit (uses_as_bitmap, ((link->ref)->id));
      }
  live_at_end -= 2;
  for (i = 0; i < (unsigned int) last_basic_block + 2; i++)
    bitmap_operation (live_at_end[i], live_at_end[i], uses_as_bitmap,
        BITMAP_AND_COMPL);
  live_at_end += 2;
  if (dump_file && (debug_new_regalloc & 0x8000) != 0)
    {
      ra_debug_msg (0x8000, "need to check these uses:\n");
      dump_sbitmap_file (dump_file, last_check_uses);
    }
  free(already_webs);
  do { if (uses_as_bitmap) { bitmap_clear (uses_as_bitmap); free (uses_as_bitmap); (uses_as_bitmap) = 0; } } while (0);
}
static unsigned int deleted_def_insns;
static unsigned long deleted_def_cost;
static void
delete_useless_defs (void)
{
  unsigned int i;
  do { bitmap_element *ptr_ = (useless_defs)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { rtx insn = ((df->defs[i])->insn); rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0); struct web *web = (((def2web[i])->parent_web) ? find_web_for_subweb_1 ((def2web[i])->parent_web) : (def2web[i])); if (set && web->type == SPILLED && web->stack_slot == ((void *)0)) { deleted_def_insns++; deleted_def_cost += (((insn)->u.fld[3]).bb)->frequency + 1; ((insn)->code = (NOTE)); (((insn)->u.fld[5]).rtint) = NOTE_INSN_DELETED; df_insn_modify (df, (((insn)->u.fld[3]).bb), insn); } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
}
static void
detect_non_changed_webs (void)
{
  struct dlist *d, *d_next;
  for (d = (web_lists[(int)(SPILLED)]); d; d = d_next)
    {
      struct web *web = ((d)->value1.web);
      d_next = d->next;
      if (!web->changed)
 {
   ra_debug_msg (0x0008, "no insns emitted for spilled web %d\n",
       web->id);
   remove_web_from_list (web);
   put_web (web, COLORED);
   web->changed = 1;
 }
      else
 web->changed = 0;
    }
}
static void
reset_changed_flag (void)
{
  struct dlist *d;
  for (d = (web_lists[(int)(SPILLED)]); d; d = d->next)
    ((d)->value1.web)->changed = 0;
}
void
actual_spill (void)
{
  int i;
  bitmap new_deaths = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  reset_changed_flag ();
  spill_coalprop ();
  choose_spill_colors ();
  useless_defs = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  if (flag_ra_improved_spilling)
    rewrite_program2 (new_deaths);
  else
    rewrite_program (new_deaths);
  insert_stores (new_deaths);
  delete_useless_defs ();
  do { if (useless_defs) { bitmap_clear (useless_defs); free (useless_defs); (useless_defs) = 0; } } while (0);
  free(insns_with_deaths);
  insns_with_deaths = sbitmap_alloc (get_max_uid ());
  death_insns_max_uid = get_max_uid ();
  sbitmap_zero (insns_with_deaths);
  do { bitmap_element *ptr_ = (new_deaths)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { ((insns_with_deaths)->elms [(i) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (i) % ((unsigned) (8 * 4)));}; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
                                       ;
  detect_non_changed_webs ();
  detect_web_parts_to_rebuild ();
  do { if (new_deaths) { bitmap_clear (new_deaths); free (new_deaths); (new_deaths) = 0; } } while (0);
}
static bitmap regnos_coalesced_to_hardregs;
void
emit_colors (struct df *df)
{
  unsigned int i;
  int si;
  struct web *web;
  int old_max_regno = max_reg_num ();
  regset old_regs;
  basic_block bb;
  regnos_coalesced_to_hardregs = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (i = 0; i < num_webs - num_subwebs; i++)
    {
      web = id2web[i];
      if (web->type != COLORED && web->type != COALESCED)
 continue;
      if (web->type == COALESCED && alias (web)->type == COLORED)
 continue;
      if (web->reg_rtx || web->regno < 53)
 abort ();
      if (web->regno >= max_normal_pseudo)
 {
   rtx place;
   if (web->color == an_unusable_color)
     {
       unsigned int inherent_size = ((unsigned short) mode_size[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode)]);
       unsigned int total_size = ((inherent_size) > (0) ? (inherent_size) : (0));
       place = assign_stack_local (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode),
       total_size,
       inherent_size == total_size ? 0 : -1);
       (((place))->unchanging) =
    ((((cfun->emit->x_regno_reg_rtx)[web->regno]))->unchanging);
       set_mem_alias_set (place, new_alias_set ());
     }
   else
     {
       place = gen_reg_rtx (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode));
     }
   web->reg_rtx = place;
 }
      else
 {
   if (web->num_uses == 0 && web->num_defs == 1)
     web->reg_rtx = gen_reg_rtx (((enum machine_mode) ((((enum rtx_code) ((web->defs[0])->reg)->code) == SUBREG ? ((((web->defs[0])->reg)->u.fld[0]).rtx1) : ((web->defs[0])->reg)))->mode));
   else
     web->reg_rtx = gen_reg_rtx (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[web->regno])->mode));
   if (web->type == COALESCED)
     bitmap_set_bit (regnos_coalesced_to_hardregs, (((web->reg_rtx)->u.fld[0]).rtuint));
 }
    }
  ra_max_regno = max_regno = max_reg_num ();
  allocate_reg_info (max_regno, 0, 0);
  ra_reg_renumber = xmalloc (max_regno * sizeof (short));
  for (si = 0; si < max_regno; si++)
    ra_reg_renumber[si] = -1;
  for (i = 0; i < df->use_id; i++)
    if (df->uses[i])
      {
 regset rs = (((((df->uses[i])->insn)->u.fld[3]).bb))->global_live_at_start;
 rtx regrtx;
 web = use2web[i];
 web = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
 if (web->type != COLORED && web->type != COALESCED)
   continue;
 regrtx = alias (web)->reg_rtx;
 if (!regrtx)
   regrtx = web->reg_rtx;
 *(((enum rtx_code) ((df->uses[i])->reg)->code) == SUBREG ? &((((df->uses[i])->reg)->u.fld[0]).rtx1) : ((df->uses[i])->loc)) = regrtx;
 if (bitmap_bit_p (rs, web->regno) && (((enum rtx_code) (regrtx)->code) == REG))
   {
     bitmap_set_bit (rs, (((regrtx)->u.fld[0]).rtuint));
   }
      }
  for (i = 0; i < df->def_id; i++)
    {
      regset rs;
      rtx regrtx;
      if (!df->defs[i])
 continue;
      rs = (((((df->defs[i])->insn)->u.fld[3]).bb))->global_live_at_start;
      web = def2web[i];
      web = (((web)->parent_web) ? find_web_for_subweb_1 ((web)->parent_web) : (web));
      if (web->type != COLORED && web->type != COALESCED)
 continue;
      regrtx = alias (web)->reg_rtx;
      if (!regrtx)
 regrtx = web->reg_rtx;
      *(((enum rtx_code) ((df->defs[i])->reg)->code) == SUBREG ? &((((df->defs[i])->reg)->u.fld[0]).rtx1) : ((df->defs[i])->loc)) = regrtx;
      if (bitmap_bit_p (rs, web->regno) && (((enum rtx_code) (regrtx)->code) == REG))
 {
          bitmap_set_bit (rs, (((regrtx)->u.fld[0]).rtuint));
 }
    }
  for (i = 0; i < num_webs - num_subwebs; i++)
    {
      web = id2web[i];
      if (web->reg_rtx && (((enum rtx_code) (web->reg_rtx)->code) == REG))
 {
   int r = (((web->reg_rtx)->u.fld[0]).rtuint);
          ra_reg_renumber[r] = web->color;
          ra_debug_msg (0x0010, "Renumber pseudo %d (== web %d) to %d\n",
       r, web->id, ra_reg_renumber[r]);
 }
    }
  old_regs = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  for (si = 53; si < old_max_regno; si++)
    bitmap_set_bit (old_regs, si);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      bitmap_operation (bb->global_live_at_start, bb->global_live_at_start, old_regs, BITMAP_AND_COMPL);
      bitmap_operation (bb->global_live_at_end, bb->global_live_at_end, old_regs, BITMAP_AND_COMPL);
    }
  do { if (old_regs) { bitmap_clear (old_regs); free (old_regs); (old_regs) = 0; } } while (0);
}
void
delete_moves (void)
{
  struct move_list *ml;
  struct web *s, *t;
  for (ml = wl_moves; ml; ml = ml->next)
    if (ml->move
 && (s = alias (ml->move->source_web))->reg_rtx
     == (t = alias (ml->move->target_web))->reg_rtx
 && s->type != PRECOLORED && t->type != PRECOLORED)
      {
 basic_block bb = (((ml->move->insn)->u.fld[3]).bb);
 df_insn_delete (df, bb, ml->move->insn);
 deleted_move_insns++;
 deleted_move_cost += bb->frequency + 1;
      }
}
void
remove_suspicious_death_notes (void)
{
  rtx insn;
  for (insn = get_insns(); insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      {
 rtx *pnote = &(((insn)->u.fld[8]).rtx1);
 while (*pnote)
   {
     rtx note = *pnote;
     if ((((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD
   || ((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_UNUSED)
  && ((((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG)
      && bitmap_bit_p (regnos_coalesced_to_hardregs,
         ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint))))
       *pnote = (((note)->u.fld[1]).rtx1);
     else
       pnote = &(((*pnote)->u.fld[1]).rtx1);
   }
      }
  do { if (regnos_coalesced_to_hardregs) { bitmap_clear (regnos_coalesced_to_hardregs); free (regnos_coalesced_to_hardregs); (regnos_coalesced_to_hardregs) = 0; } } while (0);
  regnos_coalesced_to_hardregs = ((void *)0);
}
void
setup_renumber (int free_it)
{
  int i;
  max_regno = max_reg_num ();
  allocate_reg_info (max_regno, 0, 1);
  for (i = 0; i < max_regno; i++)
    {
      reg_renumber[i] = (i < ra_max_regno) ? ra_reg_renumber[i] : -1;
    }
  if (free_it)
    {
      free (ra_reg_renumber);
      ra_reg_renumber = ((void *)0);
      ra_max_regno = 0;
    }
}
void
dump_cost (unsigned int level)
{
  ra_debug_msg (level, "Instructions for spilling\n added:\n");
  ra_debug_msg (level, "  loads =%d cost=%lu\n",
  emitted_spill_loads, spill_load_cost);
  ra_debug_msg (level, "  stores=%d cost=%lu\n",
  emitted_spill_stores, spill_store_cost);
  ra_debug_msg (level, "  remat =%d cost=%lu\n",
  emitted_remat, spill_remat_cost);
  ra_debug_msg (level, " removed:\n  moves =%d cost=%lu\n",
  deleted_move_insns, deleted_move_cost);
  ra_debug_msg (level, "  others=%d cost=%lu\n",
  deleted_def_insns, deleted_def_cost);
}
void
ra_rewrite_init (void)
{
  emitted_spill_loads = 0;
  emitted_spill_stores = 0;
  emitted_remat = 0;
  spill_load_cost = 0;
  spill_store_cost = 0;
  spill_remat_cost = 0;
  deleted_move_insns = 0;
  deleted_move_cost = 0;
  deleted_def_insns = 0;
  deleted_def_cost = 0;
}
static void get_zero (struct real_value *, int);
static void get_canonical_qnan (struct real_value *, int);
static void get_canonical_snan (struct real_value *, int);
static void get_inf (struct real_value *, int);
static unsigned char sticky_rshift_significand (struct real_value *,
           const struct real_value *, unsigned int);
static void rshift_significand (struct real_value *, const struct real_value *,
    unsigned int);
static void lshift_significand (struct real_value *, const struct real_value *,
    unsigned int);
static void lshift_significand_1 (struct real_value *, const struct real_value *);
static unsigned char add_significands (struct real_value *r, const struct real_value *,
         const struct real_value *);
static unsigned char sub_significands (struct real_value *, const struct real_value *,
         const struct real_value *, int);
static void neg_significand (struct real_value *, const struct real_value *);
static int cmp_significands (const struct real_value *, const struct real_value *);
static int cmp_significand_0 (const struct real_value *);
static void set_significand_bit (struct real_value *, unsigned int);
static void clear_significand_bit (struct real_value *, unsigned int);
static unsigned char test_significand_bit (struct real_value *, unsigned int);
static void clear_significand_below (struct real_value *, unsigned int);
static unsigned char div_significands (struct real_value *, const struct real_value *,
         const struct real_value *);
static void normalize_val (struct real_value *);
static unsigned char do_add (struct real_value *, const struct real_value *,
      const struct real_value *, int);
static unsigned char do_multiply (struct real_value *, const struct real_value *,
    const struct real_value *);
static unsigned char do_divide (struct real_value *, const struct real_value *,
         const struct real_value *);
static int do_compare (const struct real_value *, const struct real_value *, int);
static void do_fix_trunc (struct real_value *, const struct real_value *);
static unsigned long rtd_divmod (struct real_value *, struct real_value *);
static const struct real_value * ten_to_ptwo (int);
static const struct real_value * ten_to_mptwo (int);
static const struct real_value * real_digit (int);
static void times_pten (struct real_value *, int);
static void round_for_format (const struct real_format *, struct real_value *);
static void
get_zero (struct real_value *r, int sign)
{
  memset (r, 0, sizeof (*r));
  r->sign = sign;
}
static void
get_canonical_qnan (struct real_value *r, int sign)
{
  memset (r, 0, sizeof (*r));
  r->class = rvc_nan;
  r->sign = sign;
  r->canonical = 1;
}
static void
get_canonical_snan (struct real_value *r, int sign)
{
  memset (r, 0, sizeof (*r));
  r->class = rvc_nan;
  r->sign = sign;
  r->signalling = 1;
  r->canonical = 1;
}
static void
get_inf (struct real_value *r, int sign)
{
  memset (r, 0, sizeof (*r));
  r->class = rvc_inf;
  r->sign = sign;
}
static unsigned char
sticky_rshift_significand (struct real_value *r, const struct real_value *a,
      unsigned int n)
{
  unsigned long sticky = 0;
  unsigned int i, ofs = 0;
  if (n >= (8 * 4))
    {
      for (i = 0, ofs = n / (8 * 4); i < ofs; ++i)
 sticky |= a->sig[i];
      n &= (8 * 4) - 1;
    }
  if (n != 0)
    {
      sticky |= a->sig[ofs] & (((unsigned long)1 << n) - 1);
      for (i = 0; i < ((128 + (8 * 4)) / (8 * 4)); ++i)
 {
   r->sig[i]
     = (((ofs + i >= ((128 + (8 * 4)) / (8 * 4)) ? 0 : a->sig[ofs + i]) >> n)
        | ((ofs + i + 1 >= ((128 + (8 * 4)) / (8 * 4)) ? 0 : a->sig[ofs + i + 1])
    << ((8 * 4) - n)));
 }
    }
  else
    {
      for (i = 0; ofs + i < ((128 + (8 * 4)) / (8 * 4)); ++i)
 r->sig[i] = a->sig[ofs + i];
      for (; i < ((128 + (8 * 4)) / (8 * 4)); ++i)
 r->sig[i] = 0;
    }
  return sticky != 0;
}
static void
rshift_significand (struct real_value *r, const struct real_value *a,
      unsigned int n)
{
  unsigned int i, ofs = n / (8 * 4);
  n &= (8 * 4) - 1;
  if (n != 0)
    {
      for (i = 0; i < ((128 + (8 * 4)) / (8 * 4)); ++i)
 {
   r->sig[i]
     = (((ofs + i >= ((128 + (8 * 4)) / (8 * 4)) ? 0 : a->sig[ofs + i]) >> n)
        | ((ofs + i + 1 >= ((128 + (8 * 4)) / (8 * 4)) ? 0 : a->sig[ofs + i + 1])
    << ((8 * 4) - n)));
 }
    }
  else
    {
      for (i = 0; ofs + i < ((128 + (8 * 4)) / (8 * 4)); ++i)
 r->sig[i] = a->sig[ofs + i];
      for (; i < ((128 + (8 * 4)) / (8 * 4)); ++i)
 r->sig[i] = 0;
    }
}
static void
lshift_significand (struct real_value *r, const struct real_value *a,
      unsigned int n)
{
  unsigned int i, ofs = n / (8 * 4);
  n &= (8 * 4) - 1;
  if (n == 0)
    {
      for (i = 0; ofs + i < ((128 + (8 * 4)) / (8 * 4)); ++i)
 r->sig[((128 + (8 * 4)) / (8 * 4))-1-i] = a->sig[((128 + (8 * 4)) / (8 * 4))-1-i-ofs];
      for (; i < ((128 + (8 * 4)) / (8 * 4)); ++i)
 r->sig[((128 + (8 * 4)) / (8 * 4))-1-i] = 0;
    }
  else
    for (i = 0; i < ((128 + (8 * 4)) / (8 * 4)); ++i)
      {
 r->sig[((128 + (8 * 4)) / (8 * 4))-1-i]
   = (((ofs + i >= ((128 + (8 * 4)) / (8 * 4)) ? 0 : a->sig[((128 + (8 * 4)) / (8 * 4))-1-i-ofs]) << n)
      | ((ofs + i + 1 >= ((128 + (8 * 4)) / (8 * 4)) ? 0 : a->sig[((128 + (8 * 4)) / (8 * 4))-1-i-ofs-1])
  >> ((8 * 4) - n)));
      }
}
static void
lshift_significand_1 (struct real_value *r, const struct real_value *a)
{
  unsigned int i;
  for (i = ((128 + (8 * 4)) / (8 * 4)) - 1; i > 0; --i)
    r->sig[i] = (a->sig[i] << 1) | (a->sig[i-1] >> ((8 * 4) - 1));
  r->sig[0] = a->sig[0] << 1;
}
static unsigned char
add_significands (struct real_value *r, const struct real_value *a,
    const struct real_value *b)
{
  unsigned char carry = 0;
  int i;
  for (i = 0; i < ((128 + (8 * 4)) / (8 * 4)); ++i)
    {
      unsigned long ai = a->sig[i];
      unsigned long ri = ai + b->sig[i];
      if (carry)
 {
   carry = ri < ai;
   carry |= ++ri == 0;
 }
      else
 carry = ri < ai;
      r->sig[i] = ri;
    }
  return carry;
}
static unsigned char
sub_significands (struct real_value *r, const struct real_value *a,
    const struct real_value *b, int carry)
{
  int i;
  for (i = 0; i < ((128 + (8 * 4)) / (8 * 4)); ++i)
    {
      unsigned long ai = a->sig[i];
      unsigned long ri = ai - b->sig[i];
      if (carry)
 {
   carry = ri > ai;
   carry |= ~--ri == 0;
 }
      else
 carry = ri > ai;
      r->sig[i] = ri;
    }
  return carry;
}
static void
neg_significand (struct real_value *r, const struct real_value *a)
{
  unsigned char carry = 1;
  int i;
  for (i = 0; i < ((128 + (8 * 4)) / (8 * 4)); ++i)
    {
      unsigned long ri, ai = a->sig[i];
      if (carry)
 {
   if (ai)
     {
       ri = -ai;
       carry = 0;
     }
   else
     ri = ai;
 }
      else
 ri = ~ai;
      r->sig[i] = ri;
    }
}
static int
cmp_significands (const struct real_value *a, const struct real_value *b)
{
  int i;
  for (i = ((128 + (8 * 4)) / (8 * 4)) - 1; i >= 0; --i)
    {
      unsigned long ai = a->sig[i];
      unsigned long bi = b->sig[i];
      if (ai > bi)
 return 1;
      if (ai < bi)
 return -1;
    }
  return 0;
}
static int
cmp_significand_0 (const struct real_value *a)
{
  int i;
  for (i = ((128 + (8 * 4)) / (8 * 4)) - 1; i >= 0; --i)
    if (a->sig[i])
      return 1;
  return 0;
}
static void
set_significand_bit (struct real_value *r, unsigned int n)
{
  r->sig[n / (8 * 4)]
    |= (unsigned long)1 << (n % (8 * 4));
}
static void
clear_significand_bit (struct real_value *r, unsigned int n)
{
  r->sig[n / (8 * 4)]
    &= ~((unsigned long)1 << (n % (8 * 4)));
}
static unsigned char
test_significand_bit (struct real_value *r, unsigned int n)
{
  int t = (r->sig[n / (8 * 4)] >> (n % (8 * 4))) & 1;
  return t;
}
static void
clear_significand_below (struct real_value *r, unsigned int n)
{
  int i, w = n / (8 * 4);
  for (i = 0; i < w; ++i)
    r->sig[i] = 0;
  r->sig[w] &= ~(((unsigned long)1 << (n % (8 * 4))) - 1);
}
static unsigned char
div_significands (struct real_value *r, const struct real_value *a,
    const struct real_value *b)
{
  struct real_value u;
  int i, bit = (128 + (8 * 4)) - 1;
  unsigned long msb, inexact;
  u = *a;
  memset (r->sig, 0, sizeof (r->sig));
  msb = 0;
  goto start;
  do
    {
      msb = u.sig[((128 + (8 * 4)) / (8 * 4))-1] & ((unsigned long)1 << ((8 * 4) - 1));
      lshift_significand_1 (&u, &u);
    start:
      if (msb || cmp_significands (&u, b) >= 0)
 {
   sub_significands (&u, &u, b, 0);
   set_significand_bit (r, bit);
 }
    }
  while (--bit >= 0);
  for (i = 0, inexact = 0; i < ((128 + (8 * 4)) / (8 * 4)); i++)
    inexact |= u.sig[i];
  return inexact != 0;
}
static void
normalize_val (struct real_value *r)
{
  int shift = 0, exp;
  int i, j;
  for (i = ((128 + (8 * 4)) / (8 * 4)) - 1; i >= 0; i--)
    if (r->sig[i] == 0)
      shift += (8 * 4);
    else
      break;
  if (i < 0)
    {
      r->class = rvc_zero;
      ((r)->uexp = ((unsigned int)(0) & (unsigned int)((1 << (32 - 5)) - 1)));
      return;
    }
  for (j = 0; ; j++)
    if (r->sig[i] & ((unsigned long)1 << ((8 * 4) - 1 - j)))
      break;
  shift += j;
  if (shift > 0)
    {
      exp = ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) - shift;
      if (exp > ((1 << ((32 - 5) - 1)) - 1))
 get_inf (r, r->sign);
      else if (exp < -((1 << ((32 - 5) - 1)) - 1))
 get_zero (r, r->sign);
      else
 {
   ((r)->uexp = ((unsigned int)(exp) & (unsigned int)((1 << (32 - 5)) - 1)));
   lshift_significand (r, r, shift);
 }
    }
}
static unsigned char
do_add (struct real_value *r, const struct real_value *a,
 const struct real_value *b, int subtract_p)
{
  int dexp, sign, exp;
  struct real_value t;
  unsigned char inexact = 0;
  sign = a->sign;
  subtract_p = (sign ^ b->sign) ^ subtract_p;
  switch (((a->class) << 2 | (b->class)))
    {
    case ((rvc_zero) << 2 | (rvc_zero)):
      get_zero (r, sign & !subtract_p);
      return 0;
    case ((rvc_zero) << 2 | (rvc_normal)):
    case ((rvc_zero) << 2 | (rvc_inf)):
    case ((rvc_zero) << 2 | (rvc_nan)):
    case ((rvc_normal) << 2 | (rvc_nan)):
    case ((rvc_inf) << 2 | (rvc_nan)):
    case ((rvc_nan) << 2 | (rvc_nan)):
    case ((rvc_normal) << 2 | (rvc_inf)):
      *r = *b;
      r->sign = sign ^ subtract_p;
      return 0;
    case ((rvc_normal) << 2 | (rvc_zero)):
    case ((rvc_inf) << 2 | (rvc_zero)):
    case ((rvc_nan) << 2 | (rvc_zero)):
    case ((rvc_nan) << 2 | (rvc_normal)):
    case ((rvc_nan) << 2 | (rvc_inf)):
    case ((rvc_inf) << 2 | (rvc_normal)):
      *r = *a;
      return 0;
    case ((rvc_inf) << 2 | (rvc_inf)):
      if (subtract_p)
 get_canonical_qnan (r, 0);
      else
 *r = *a;
      return 0;
    case ((rvc_normal) << 2 | (rvc_normal)):
      break;
    default:
      abort ();
    }
  dexp = ((int)((a)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) - ((int)((b)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1)));
  if (dexp < 0)
    {
      const struct real_value *t;
      t = a, a = b, b = t;
      dexp = -dexp;
      sign ^= subtract_p;
    }
  exp = ((int)((a)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1)));
  if (dexp > 0)
    {
      if (dexp >= (128 + (8 * 4)))
 {
   *r = *a;
   r->sign = sign;
   return 1;
 }
      inexact |= sticky_rshift_significand (&t, b, dexp);
      b = &t;
    }
  if (subtract_p)
    {
      if (sub_significands (r, a, b, inexact))
 {
   sign ^= 1;
   neg_significand (r, r);
 }
    }
  else
    {
      if (add_significands (r, a, b))
 {
   inexact |= sticky_rshift_significand (r, r, 1);
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] |= ((unsigned long)1 << ((8 * 4) - 1));
   if (++exp > ((1 << ((32 - 5) - 1)) - 1))
     {
       get_inf (r, sign);
       return 1;
     }
 }
    }
  r->class = rvc_normal;
  r->sign = sign;
  ((r)->uexp = ((unsigned int)(exp) & (unsigned int)((1 << (32 - 5)) - 1)));
  normalize_val (r);
  if (r->class == rvc_zero)
    r->sign = 0;
  else
    r->sig[0] |= inexact;
  return inexact;
}
static unsigned char
do_multiply (struct real_value *r, const struct real_value *a,
      const struct real_value *b)
{
  struct real_value u, t, *rr;
  unsigned int i, j, k;
  int sign = a->sign ^ b->sign;
  unsigned char inexact = 0;
  switch (((a->class) << 2 | (b->class)))
    {
    case ((rvc_zero) << 2 | (rvc_zero)):
    case ((rvc_zero) << 2 | (rvc_normal)):
    case ((rvc_normal) << 2 | (rvc_zero)):
      get_zero (r, sign);
      return 0;
    case ((rvc_zero) << 2 | (rvc_nan)):
    case ((rvc_normal) << 2 | (rvc_nan)):
    case ((rvc_inf) << 2 | (rvc_nan)):
    case ((rvc_nan) << 2 | (rvc_nan)):
      *r = *b;
      r->sign = sign;
      return 0;
    case ((rvc_nan) << 2 | (rvc_zero)):
    case ((rvc_nan) << 2 | (rvc_normal)):
    case ((rvc_nan) << 2 | (rvc_inf)):
      *r = *a;
      r->sign = sign;
      return 0;
    case ((rvc_zero) << 2 | (rvc_inf)):
    case ((rvc_inf) << 2 | (rvc_zero)):
      get_canonical_qnan (r, sign);
      return 0;
    case ((rvc_inf) << 2 | (rvc_inf)):
    case ((rvc_normal) << 2 | (rvc_inf)):
    case ((rvc_inf) << 2 | (rvc_normal)):
      get_inf (r, sign);
      return 0;
    case ((rvc_normal) << 2 | (rvc_normal)):
      break;
    default:
      abort ();
    }
  if (r == a || r == b)
    rr = &t;
  else
    rr = r;
  get_zero (rr, 0);
  for (i = 0; i < ((128 + (8 * 4)) / (8 * 4)) * 2; ++i)
    {
      unsigned long ai = a->sig[i / 2];
      if (i & 1)
 ai >>= (8 * 4) / 2;
      else
 ai &= ((unsigned long)1 << ((8 * 4) / 2)) - 1;
      if (ai == 0)
 continue;
      for (j = 0; j < 2; ++j)
 {
   int exp = (((int)((a)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) - (2*((128 + (8 * 4)) / (8 * 4))-1-i)*((8 * 4)/2)
       + (((int)((b)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) - (1-j)*((8 * 4)/2)));
   if (exp > ((1 << ((32 - 5) - 1)) - 1))
     {
       get_inf (r, sign);
       return 1;
     }
   if (exp < -((1 << ((32 - 5) - 1)) - 1))
     {
       inexact = 1;
       continue;
     }
   memset (&u, 0, sizeof (u));
   u.class = rvc_normal;
   ((&u)->uexp = ((unsigned int)(exp) & (unsigned int)((1 << (32 - 5)) - 1)));
   for (k = j; k < ((128 + (8 * 4)) / (8 * 4)) * 2; k += 2)
     {
       unsigned long bi = b->sig[k / 2];
       if (k & 1)
  bi >>= (8 * 4) / 2;
       else
  bi &= ((unsigned long)1 << ((8 * 4) / 2)) - 1;
       u.sig[k / 2] = ai * bi;
     }
   normalize_val (&u);
   inexact |= do_add (rr, rr, &u, 0);
 }
    }
  rr->sign = sign;
  if (rr != r)
    *r = t;
  return inexact;
}
static unsigned char
do_divide (struct real_value *r, const struct real_value *a,
    const struct real_value *b)
{
  int exp, sign = a->sign ^ b->sign;
  struct real_value t, *rr;
  unsigned char inexact;
  switch (((a->class) << 2 | (b->class)))
    {
    case ((rvc_zero) << 2 | (rvc_zero)):
    case ((rvc_inf) << 2 | (rvc_inf)):
      get_canonical_qnan (r, sign);
      return 0;
    case ((rvc_zero) << 2 | (rvc_normal)):
    case ((rvc_zero) << 2 | (rvc_inf)):
    case ((rvc_normal) << 2 | (rvc_inf)):
      get_zero (r, sign);
      return 0;
    case ((rvc_normal) << 2 | (rvc_zero)):
    case ((rvc_inf) << 2 | (rvc_zero)):
      get_inf (r, sign);
      return 0;
    case ((rvc_zero) << 2 | (rvc_nan)):
    case ((rvc_normal) << 2 | (rvc_nan)):
    case ((rvc_inf) << 2 | (rvc_nan)):
    case ((rvc_nan) << 2 | (rvc_nan)):
      *r = *b;
      r->sign = sign;
      return 0;
    case ((rvc_nan) << 2 | (rvc_zero)):
    case ((rvc_nan) << 2 | (rvc_normal)):
    case ((rvc_nan) << 2 | (rvc_inf)):
      *r = *a;
      r->sign = sign;
      return 0;
    case ((rvc_inf) << 2 | (rvc_normal)):
      get_inf (r, sign);
      return 0;
    case ((rvc_normal) << 2 | (rvc_normal)):
      break;
    default:
      abort ();
    }
  if (r == a || r == b)
    rr = &t;
  else
    rr = r;
  get_zero (rr, 0);
  rr->class = rvc_normal;
  rr->sign = sign;
  exp = ((int)((a)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) - ((int)((b)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + 1;
  if (exp > ((1 << ((32 - 5) - 1)) - 1))
    {
      get_inf (r, sign);
      return 1;
    }
  if (exp < -((1 << ((32 - 5) - 1)) - 1))
    {
      get_zero (r, sign);
      return 1;
    }
  ((rr)->uexp = ((unsigned int)(exp) & (unsigned int)((1 << (32 - 5)) - 1)));
  inexact = div_significands (rr, a, b);
  normalize_val (rr);
  rr->sig[0] |= inexact;
  if (rr != r)
    *r = t;
  return inexact;
}
static int
do_compare (const struct real_value *a, const struct real_value *b,
     int nan_result)
{
  int ret;
  switch (((a->class) << 2 | (b->class)))
    {
    case ((rvc_zero) << 2 | (rvc_zero)):
      return 0;
    case ((rvc_inf) << 2 | (rvc_zero)):
    case ((rvc_inf) << 2 | (rvc_normal)):
    case ((rvc_normal) << 2 | (rvc_zero)):
      return (a->sign ? -1 : 1);
    case ((rvc_inf) << 2 | (rvc_inf)):
      return -a->sign - -b->sign;
    case ((rvc_zero) << 2 | (rvc_normal)):
    case ((rvc_zero) << 2 | (rvc_inf)):
    case ((rvc_normal) << 2 | (rvc_inf)):
      return (b->sign ? 1 : -1);
    case ((rvc_zero) << 2 | (rvc_nan)):
    case ((rvc_normal) << 2 | (rvc_nan)):
    case ((rvc_inf) << 2 | (rvc_nan)):
    case ((rvc_nan) << 2 | (rvc_nan)):
    case ((rvc_nan) << 2 | (rvc_zero)):
    case ((rvc_nan) << 2 | (rvc_normal)):
    case ((rvc_nan) << 2 | (rvc_inf)):
      return nan_result;
    case ((rvc_normal) << 2 | (rvc_normal)):
      break;
    default:
      abort ();
    }
  if (a->sign != b->sign)
    return -a->sign - -b->sign;
  if (((int)((a)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) > ((int)((b)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))))
    ret = 1;
  else if (((int)((a)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) < ((int)((b)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))))
    ret = -1;
  else
    ret = cmp_significands (a, b);
  return (a->sign ? -ret : ret);
}
static void
do_fix_trunc (struct real_value *r, const struct real_value *a)
{
  *r = *a;
  switch (r->class)
    {
    case rvc_zero:
    case rvc_inf:
    case rvc_nan:
      break;
    case rvc_normal:
      if (((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) <= 0)
 get_zero (r, r->sign);
      else if (((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) < (128 + (8 * 4)))
 clear_significand_below (r, (128 + (8 * 4)) - ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))));
      break;
    default:
      abort ();
    }
}
void
real_arithmetic (struct real_value *r, int icode, const struct real_value *op0,
   const struct real_value *op1)
{
  enum tree_code code = icode;
  switch (code)
    {
    case PLUS_EXPR:
      do_add (r, op0, op1, 0);
      break;
    case MINUS_EXPR:
      do_add (r, op0, op1, 1);
      break;
    case MULT_EXPR:
      do_multiply (r, op0, op1);
      break;
    case RDIV_EXPR:
      do_divide (r, op0, op1);
      break;
    case MIN_EXPR:
      if (op1->class == rvc_nan)
 *r = *op1;
      else if (do_compare (op0, op1, -1) < 0)
 *r = *op0;
      else
 *r = *op1;
      break;
    case MAX_EXPR:
      if (op1->class == rvc_nan)
 *r = *op1;
      else if (do_compare (op0, op1, 1) < 0)
 *r = *op1;
      else
 *r = *op0;
      break;
    case NEGATE_EXPR:
      *r = *op0;
      r->sign ^= 1;
      break;
    case ABS_EXPR:
      *r = *op0;
      r->sign = 0;
      break;
    case FIX_TRUNC_EXPR:
      do_fix_trunc (r, op0);
      break;
    default:
      abort ();
    }
}
struct real_value
real_arithmetic2 (int icode, const struct real_value *op0,
    const struct real_value *op1)
{
  struct real_value r;
  real_arithmetic (&r, icode, op0, op1);
  return r;
}
unsigned char
real_compare (int icode, const struct real_value *op0,
       const struct real_value *op1)
{
  enum tree_code code = icode;
  switch (code)
    {
    case LT_EXPR:
      return do_compare (op0, op1, 1) < 0;
    case LE_EXPR:
      return do_compare (op0, op1, 1) <= 0;
    case GT_EXPR:
      return do_compare (op0, op1, -1) > 0;
    case GE_EXPR:
      return do_compare (op0, op1, -1) >= 0;
    case EQ_EXPR:
      return do_compare (op0, op1, -1) == 0;
    case NE_EXPR:
      return do_compare (op0, op1, -1) != 0;
    case UNORDERED_EXPR:
      return op0->class == rvc_nan || op1->class == rvc_nan;
    case ORDERED_EXPR:
      return op0->class != rvc_nan && op1->class != rvc_nan;
    case UNLT_EXPR:
      return do_compare (op0, op1, -1) < 0;
    case UNLE_EXPR:
      return do_compare (op0, op1, -1) <= 0;
    case UNGT_EXPR:
      return do_compare (op0, op1, 1) > 0;
    case UNGE_EXPR:
      return do_compare (op0, op1, 1) >= 0;
    case UNEQ_EXPR:
      return do_compare (op0, op1, 0) == 0;
    case LTGT_EXPR:
      return do_compare (op0, op1, 0) != 0;
    default:
      abort ();
    }
}
int
real_exponent (const struct real_value *r)
{
  switch (r->class)
    {
    case rvc_zero:
      return 0;
    case rvc_inf:
    case rvc_nan:
      return (unsigned int)-1 >> 1;
    case rvc_normal:
      return ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1)));
    default:
      abort ();
    }
}
void
real_ldexp (struct real_value *r, const struct real_value *op0, int exp)
{
  *r = *op0;
  switch (r->class)
    {
    case rvc_zero:
    case rvc_inf:
    case rvc_nan:
      break;
    case rvc_normal:
      exp += ((int)((op0)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1)));
      if (exp > ((1 << ((32 - 5) - 1)) - 1))
 get_inf (r, r->sign);
      else if (exp < -((1 << ((32 - 5) - 1)) - 1))
 get_zero (r, r->sign);
      else
 ((r)->uexp = ((unsigned int)(exp) & (unsigned int)((1 << (32 - 5)) - 1)));
      break;
    default:
      abort ();
    }
}
unsigned char
real_isinf (const struct real_value *r)
{
  return (r->class == rvc_inf);
}
unsigned char
real_isnan (const struct real_value *r)
{
  return (r->class == rvc_nan);
}
unsigned char
real_isneg (const struct real_value *r)
{
  return r->sign;
}
unsigned char
real_isnegzero (const struct real_value *r)
{
  return r->sign && r->class == rvc_zero;
}
unsigned char
real_identical (const struct real_value *a, const struct real_value *b)
{
  int i;
  if (a->class != b->class)
    return 0;
  if (a->sign != b->sign)
    return 0;
  switch (a->class)
    {
    case rvc_zero:
    case rvc_inf:
      return 1;
    case rvc_normal:
      if (((int)((a)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) != ((int)((b)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))))
 return 0;
      break;
    case rvc_nan:
      if (a->signalling != b->signalling)
 return 0;
      if (a->canonical || b->canonical)
 return a->canonical == b->canonical;
      break;
    default:
      abort ();
    }
  for (i = 0; i < ((128 + (8 * 4)) / (8 * 4)); ++i)
    if (a->sig[i] != b->sig[i])
      return 0;
  return 1;
}
unsigned char
exact_real_inverse (enum machine_mode mode, struct real_value *r)
{
  const struct real_value *one = real_digit (1);
  struct real_value u;
  int i;
  if (r->class != rvc_normal)
    return 0;
  for (i = 0; i < ((128 + (8 * 4)) / (8 * 4))-1; ++i)
    if (r->sig[i] != 0)
      return 0;
  if (r->sig[((128 + (8 * 4)) / (8 * 4))-1] != ((unsigned long)1 << ((8 * 4) - 1)))
    return 0;
  do_divide (&u, one, r);
  real_convert (&u, mode, &u);
  if (u.class != rvc_normal)
    return 0;
  for (i = 0; i < ((128 + (8 * 4)) / (8 * 4))-1; ++i)
    if (u.sig[i] != 0)
      return 0;
  if (u.sig[((128 + (8 * 4)) / (8 * 4))-1] != ((unsigned long)1 << ((8 * 4) - 1)))
    return 0;
  *r = u;
  return 1;
}
long
real_to_integer (const struct real_value *r)
{
  unsigned long i;
  switch (r->class)
    {
    case rvc_zero:
    underflow:
      return 0;
    case rvc_inf:
    case rvc_nan:
    overflow:
      i = (unsigned long) 1 << ((8 * 4) - 1);
      if (!r->sign)
 i--;
      return i;
    case rvc_normal:
      if (((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) <= 0)
 goto underflow;
      if (((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) > (8 * 4))
 goto overflow;
      if ((8 * 4) == (8 * 4))
 i = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
      else if ((8 * 4) == 2*(8 * 4))
 {
   i = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
   i = i << ((8 * 4) - 1) << 1;
   i |= r->sig[((128 + (8 * 4)) / (8 * 4))-2];
 }
      else
 abort ();
      i >>= (8 * 4) - ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1)));
      if (r->sign)
 i = -i;
      return i;
    default:
      abort ();
    }
}
void
real_to_integer2 (long *plow, long *phigh,
    const struct real_value *r)
{
  struct real_value t;
  long low, high;
  int exp;
  switch (r->class)
    {
    case rvc_zero:
    underflow:
      low = high = 0;
      break;
    case rvc_inf:
    case rvc_nan:
    overflow:
      high = (unsigned long) 1 << ((8 * 4) - 1);
      if (r->sign)
 low = 0;
      else
 {
   high--;
   low = -1;
 }
      break;
    case rvc_normal:
      exp = ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1)));
      if (exp <= 0)
 goto underflow;
      if (exp > 2*(8 * 4))
 goto overflow;
      rshift_significand (&t, r, 2*(8 * 4) - exp);
      if ((8 * 4) == (8 * 4))
 {
   high = t.sig[((128 + (8 * 4)) / (8 * 4))-1];
   low = t.sig[((128 + (8 * 4)) / (8 * 4))-2];
 }
      else if ((8 * 4) == 2*(8 * 4))
 {
   high = t.sig[((128 + (8 * 4)) / (8 * 4))-1];
   high = high << ((8 * 4) - 1) << 1;
   high |= t.sig[((128 + (8 * 4)) / (8 * 4))-2];
   low = t.sig[((128 + (8 * 4)) / (8 * 4))-3];
   low = low << ((8 * 4) - 1) << 1;
   low |= t.sig[((128 + (8 * 4)) / (8 * 4))-4];
 }
      else
 abort ();
      if (r->sign)
 {
   if (low == 0)
     high = -high;
   else
     low = -low, high = ~high;
 }
      break;
    default:
      abort ();
    }
  *plow = low;
  *phigh = high;
}
static unsigned long
rtd_divmod (struct real_value *num, struct real_value *den)
{
  unsigned long q, msb;
  int expn = ((int)((num)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))), expd = ((int)((den)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1)));
  if (expn < expd)
    return 0;
  q = msb = 0;
  goto start;
  do
    {
      msb = num->sig[((128 + (8 * 4)) / (8 * 4))-1] & ((unsigned long)1 << ((8 * 4) - 1));
      q <<= 1;
      lshift_significand_1 (num, num);
    start:
      if (msb || cmp_significands (num, den) >= 0)
 {
   sub_significands (num, num, den, 0);
   q |= 1;
 }
    }
  while (--expn >= expd);
  ((num)->uexp = ((unsigned int)(expd) & (unsigned int)((1 << (32 - 5)) - 1)));
  normalize_val (num);
  return q;
}
void
real_to_decimal (char *str, const struct real_value *r_orig, size_t buf_size,
   size_t digits, int crop_trailing_zeros)
{
  const struct real_value *one, *ten;
  struct real_value r, pten, u, v;
  int dec_exp, cmp_one, digit;
  size_t max_digits;
  char *p, *first, *last;
  unsigned char sign;
  r = *r_orig;
  switch (r.class)
    {
    case rvc_zero:
      strcpy (str, (r.sign ? "-0.0" : "0.0"));
      return;
    case rvc_normal:
      break;
    case rvc_inf:
      strcpy (str, (r.sign ? "-Inf" : "+Inf"));
      return;
    case rvc_nan:
      strcpy (str, (r.sign ? "-NaN" : "+NaN"));
      return;
    default:
      abort ();
    }
  max_digits = (128 + (8 * 4)) * 0.30102999566398119521;
  if (digits == 0 || digits > max_digits)
    digits = max_digits;
  dec_exp = ((int)((&r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) * 0.30102999566398119521;
  for (max_digits = 1; dec_exp ; max_digits++)
    dec_exp /= 10;
  max_digits = buf_size - 1 - 1 - 2 - max_digits - 1;
  if (max_digits > buf_size)
    abort ();
  if (digits > max_digits)
    digits = max_digits;
  one = real_digit (1);
  ten = ten_to_ptwo (0);
  sign = r.sign;
  r.sign = 0;
  dec_exp = 0;
  pten = *one;
  cmp_one = do_compare (&r, one, 0);
  if (cmp_one > 0)
    {
      int m;
      u = r;
      ((&u)->uexp = ((unsigned int)((128 + (8 * 4)) - 1) & (unsigned int)((1 << (32 - 5)) - 1)));
      m = floor_log2_wide ((unsigned long) (max_digits));
      do
 {
   struct real_value t;
   do_divide (&t, &u, ten_to_ptwo (m));
   do_fix_trunc (&v, &t);
   if (cmp_significands (&v, &t) == 0)
     {
       u = t;
       dec_exp += 1 << m;
     }
 }
      while (--m >= 0);
      ((&u)->uexp = ((unsigned int)(((int)((&u)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + ((int)((&r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) - ((128 + (8 * 4)) - 1)) & (unsigned int)((1 << (32 - 5)) - 1)))
                               ;
      r = u;
      if (((int)((&r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) > 0)
 {
   m = floor_log2_wide ((unsigned long) ((int)(((int)((&r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) * 0.30102999566398119521))) + 1;
   do
     {
       const struct real_value *ptentwo = ten_to_ptwo (m);
       if (do_compare (&u, ptentwo, 0) >= 0)
         {
           do_divide (&u, &u, ptentwo);
           do_multiply (&pten, &pten, ptentwo);
           dec_exp += 1 << m;
         }
     }
          while (--m >= 0);
 }
      else
 cmp_one = -1;
    }
  if (cmp_one < 0)
    {
      int m;
      v = r;
      while (1)
 {
   if (v.sig[0] & 7)
     break;
   do_multiply (&u, &v, ten);
   if (((int)((&u)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) > 0)
     break;
   v = u;
   dec_exp -= 1;
 }
      r = v;
      m = floor_log2_wide ((unsigned long) ((int)(-((int)((&r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) * 0.30102999566398119521))) + 1;
      do
 {
   const struct real_value *ptentwo = ten_to_ptwo (m);
   const struct real_value *ptenmtwo = ten_to_mptwo (m);
   if (do_compare (&v, ptenmtwo, 0) <= 0)
     {
       do_multiply (&v, &v, ptentwo);
       do_multiply (&pten, &pten, ptentwo);
       dec_exp -= 1 << m;
     }
 }
      while (--m >= 0);
      do_divide (&pten, one, &pten);
    }
  p = str;
  if (sign)
    *p++ = '-';
  first = p++;
  digit = rtd_divmod (&r, &pten);
  if (digit == 0 && cmp_significand_0 (&r))
    {
      do_multiply (&r, &r, ten);
      digit = rtd_divmod (&r, &pten);
      dec_exp -= 1;
      if (digit == 0)
 abort ();
    }
  if (digit == 10)
    {
      *p++ = '1';
      if (--digits > 0)
 *p++ = '0';
      dec_exp += 1;
    }
  else if (digit > 10)
    abort ();
  else
    *p++ = digit + '0';
  while (--digits > 0)
    {
      do_multiply (&r, &r, ten);
      digit = rtd_divmod (&r, &pten);
      *p++ = digit + '0';
    }
  last = p;
  do_multiply (&r, &r, ten);
  digit = rtd_divmod (&r, &pten);
  if (digit == 5)
    {
      if (cmp_significand_0 (&r))
 digit++;
      else if ((p[-1] - '0') & 1)
 digit++;
    }
  if (digit > 5)
    {
      while (p > first)
 {
   digit = *--p;
   if (digit == '9')
     *p = '0';
   else
     {
       *p = digit + 1;
       break;
     }
 }
      if (p == first)
 {
   first[1] = '1';
   dec_exp++;
 }
    }
  first[0] = first[1];
  first[1] = '.';
  if (crop_trailing_zeros)
    while (last > first + 3 && last[-1] == '0')
      last--;
  sprintf (last, "e%+d", dec_exp);
}
void
real_to_hexadecimal (char *str, const struct real_value *r, size_t buf_size,
       size_t digits, int crop_trailing_zeros)
{
  int i, j, exp = ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1)));
  char *p, *first;
  char exp_buf[16];
  size_t max_digits;
  switch (r->class)
    {
    case rvc_zero:
      exp = 0;
      break;
    case rvc_normal:
      break;
    case rvc_inf:
      strcpy (str, (r->sign ? "-Inf" : "+Inf"));
      return;
    case rvc_nan:
      strcpy (str, (r->sign ? "-NaN" : "+NaN"));
      return;
    default:
      abort ();
    }
  if (digits == 0)
    digits = (128 + (8 * 4)) / 4;
  sprintf (exp_buf, "p%+d", exp);
  max_digits = buf_size - strlen (exp_buf) - r->sign - 4 - 1;
  if (max_digits > buf_size)
    abort ();
  if (digits > max_digits)
    digits = max_digits;
  p = str;
  if (r->sign)
    *p++ = '-';
  *p++ = '0';
  *p++ = 'x';
  *p++ = '0';
  *p++ = '.';
  first = p;
  for (i = ((128 + (8 * 4)) / (8 * 4)) - 1; i >= 0; --i)
    for (j = (8 * 4) - 4; j >= 0; j -= 4)
      {
 *p++ = "0123456789abcdef"[(r->sig[i] >> j) & 15];
 if (--digits == 0)
   goto out;
      }
 out:
  if (crop_trailing_zeros)
    while (p > first + 1 && p[-1] == '0')
      p--;
  sprintf (p, "p%+d", exp);
}
void
real_from_string (struct real_value *r, const char *str)
{
  int exp = 0;
  unsigned char sign = 0;
  get_zero (r, 0);
  if (*str == '-')
    {
      sign = 1;
      str++;
    }
  else if (*str == '+')
    str++;
  if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
    {
      int pos = (128 + (8 * 4)) - 4, d;
      str += 2;
      while (*str == '0')
 str++;
      while (1)
 {
   d = ((unsigned int) _hex_value[(unsigned char) (*str)]);
   if (d == 99)
     break;
   if (pos >= 0)
     {
       r->sig[pos / (8 * 4)]
  |= (unsigned long) d << (pos % (8 * 4));
       pos -= 4;
     }
   exp += 4;
   str++;
 }
      if (*str == '.')
 {
   str++;
   if (pos == (128 + (8 * 4)) - 4)
     {
       while (*str == '0')
  str++, exp -= 4;
     }
   while (1)
     {
       d = ((unsigned int) _hex_value[(unsigned char) (*str)]);
       if (d == 99)
  break;
       if (pos >= 0)
  {
    r->sig[pos / (8 * 4)]
      |= (unsigned long) d << (pos % (8 * 4));
    pos -= 4;
  }
       str++;
     }
 }
      if (*str == 'p' || *str == 'P')
 {
   unsigned char exp_neg = 0;
   str++;
   if (*str == '-')
     {
       exp_neg = 1;
       str++;
     }
   else if (*str == '+')
     str++;
   d = 0;
   while ((_sch_istable[(*str) & 0xff] & (unsigned short)(_sch_isdigit)))
     {
       d *= 10;
       d += *str - '0';
       if (d > ((1 << ((32 - 5) - 1)) - 1))
  {
    if (exp_neg)
      goto underflow;
    else
      goto overflow;
  }
       str++;
     }
   if (exp_neg)
     d = -d;
   exp += d;
 }
      r->class = rvc_normal;
      ((r)->uexp = ((unsigned int)(exp) & (unsigned int)((1 << (32 - 5)) - 1)));
      normalize_val (r);
    }
  else
    {
      const struct real_value *ten = ten_to_ptwo (0);
      int d;
      while (*str == '0')
 str++;
      while ((_sch_istable[(*str) & 0xff] & (unsigned short)(_sch_isdigit)))
 {
   d = *str++ - '0';
   do_multiply (r, r, ten);
   if (d)
     do_add (r, r, real_digit (d), 0);
 }
      if (*str == '.')
 {
   str++;
   if (r->class == rvc_zero)
     {
       while (*str == '0')
  str++, exp--;
     }
   while ((_sch_istable[(*str) & 0xff] & (unsigned short)(_sch_isdigit)))
     {
       d = *str++ - '0';
       do_multiply (r, r, ten);
       if (d)
         do_add (r, r, real_digit (d), 0);
       exp--;
     }
 }
      if (*str == 'e' || *str == 'E')
 {
   unsigned char exp_neg = 0;
   str++;
   if (*str == '-')
     {
       exp_neg = 1;
       str++;
     }
   else if (*str == '+')
     str++;
   d = 0;
   while ((_sch_istable[(*str) & 0xff] & (unsigned short)(_sch_isdigit)))
     {
       d *= 10;
       d += *str - '0';
       if (d > ((1 << ((32 - 5) - 1)) - 1))
  {
    if (exp_neg)
      goto underflow;
    else
      goto overflow;
  }
       str++;
     }
   if (exp_neg)
     d = -d;
   exp += d;
 }
      if (exp)
 times_pten (r, exp);
    }
  r->sign = sign;
  return;
 underflow:
  get_zero (r, sign);
  return;
 overflow:
  get_inf (r, sign);
  return;
}
struct real_value
real_from_string2 (const char *s, enum machine_mode mode)
{
  struct real_value r;
  real_from_string (&r, s);
  if (mode != VOIDmode)
    real_convert (&r, mode, &r);
  return r;
}
void
real_from_integer (struct real_value *r, enum machine_mode mode,
     unsigned long low, long high,
     int unsigned_p)
{
  if (low == 0 && high == 0)
    get_zero (r, 0);
  else
    {
      r->class = rvc_normal;
      r->sign = high < 0 && !unsigned_p;
      ((r)->uexp = ((unsigned int)(2 * (8 * 4)) & (unsigned int)((1 << (32 - 5)) - 1)));
      if (r->sign)
 {
   high = ~high;
   if (low == 0)
     high += 1;
   else
     low = -low;
 }
      if ((8 * 4) == (8 * 4))
 {
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] = high;
   r->sig[((128 + (8 * 4)) / (8 * 4))-2] = low;
   memset (r->sig, 0, sizeof(long)*(((128 + (8 * 4)) / (8 * 4))-2));
 }
      else if ((8 * 4)*2 == (8 * 4))
 {
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] = high >> ((8 * 4) - 1) >> 1;
   r->sig[((128 + (8 * 4)) / (8 * 4))-2] = high;
   r->sig[((128 + (8 * 4)) / (8 * 4))-3] = low >> ((8 * 4) - 1) >> 1;
   r->sig[((128 + (8 * 4)) / (8 * 4))-4] = low;
   if (((128 + (8 * 4)) / (8 * 4)) > 4)
     memset (r->sig, 0, sizeof(long)*(((128 + (8 * 4)) / (8 * 4))-4));
 }
      else
 abort ();
      normalize_val (r);
    }
  if (mode != VOIDmode)
    real_convert (r, mode, r);
}
static const struct real_value *
ten_to_ptwo (int n)
{
  static struct real_value tens[(32 - 5)];
  if (n < 0 || n >= (32 - 5))
    abort ();
  if (tens[n].class == rvc_zero)
    {
      if (n < ((8 * 4) == 64 ? 5 : 4))
 {
   long t = 10;
   int i;
   for (i = 0; i < n; ++i)
     t *= t;
   real_from_integer (&tens[n], VOIDmode, t, 0, 1);
 }
      else
 {
   const struct real_value *t = ten_to_ptwo (n - 1);
   do_multiply (&tens[n], t, t);
 }
    }
  return &tens[n];
}
static const struct real_value *
ten_to_mptwo (int n)
{
  static struct real_value tens[(32 - 5)];
  if (n < 0 || n >= (32 - 5))
    abort ();
  if (tens[n].class == rvc_zero)
    do_divide (&tens[n], real_digit (1), ten_to_ptwo (n));
  return &tens[n];
}
static const struct real_value *
real_digit (int n)
{
  static struct real_value num[10];
  if (n < 0 || n > 9)
    abort ();
  if (n > 0 && num[n].class == rvc_zero)
    real_from_integer (&num[n], VOIDmode, n, 0, 1);
  return &num[n];
}
static void
times_pten (struct real_value *r, int exp)
{
  struct real_value pten, *rr;
  unsigned char negative = (exp < 0);
  int i;
  if (negative)
    {
      exp = -exp;
      pten = *real_digit (1);
      rr = &pten;
    }
  else
    rr = r;
  for (i = 0; exp > 0; ++i, exp >>= 1)
    if (exp & 1)
      do_multiply (rr, rr, ten_to_ptwo (i));
  if (negative)
    do_divide (r, r, &pten);
}
void
real_inf (struct real_value *r)
{
  get_inf (r, 0);
}
unsigned char
real_nan (struct real_value *r, const char *str, int quiet,
   enum machine_mode mode)
{
  const struct real_format *fmt;
  fmt = (real_format_for_mode[(mode) - MIN_MODE_FLOAT]);
  if (fmt == ((void *)0))
    abort ();
  if (*str == 0)
    {
      if (quiet)
 get_canonical_qnan (r, 0);
      else
 get_canonical_snan (r, 0);
    }
  else
    {
      int base = 10, d;
      unsigned char neg = 0;
      memset (r, 0, sizeof (*r));
      r->class = rvc_nan;
      while ((_sch_istable[(*str) & 0xff] & (unsigned short)(_sch_isspace)))
 str++;
      if (*str == '-')
 str++, neg = 1;
      else if (*str == '+')
 str++;
      if (*str == '0')
 {
   if (*++str == 'x')
     str++, base = 16;
   else
     base = 8;
 }
      while ((d = ((unsigned int) _hex_value[(unsigned char) (*str)])) < base)
 {
   struct real_value u;
   switch (base)
     {
     case 8:
       lshift_significand (r, r, 3);
       break;
     case 16:
       lshift_significand (r, r, 4);
       break;
     case 10:
       lshift_significand_1 (&u, r);
       lshift_significand (r, r, 3);
       add_significands (r, r, &u);
       break;
     default:
       abort ();
     }
   get_zero (&u, 0);
   u.sig[0] = d;
   add_significands (r, r, &u);
   str++;
 }
      if (*str != 0)
 return 0;
      lshift_significand (r, r, (128 + (8 * 4)) - fmt->pnan);
      r->sig[((128 + (8 * 4)) / (8 * 4))-1] &= ~((unsigned long)1 << ((8 * 4) - 1));
      r->signalling = !quiet;
    }
  return 1;
}
void
real_maxval (struct real_value *r, int sign, enum machine_mode mode)
{
  const struct real_format *fmt;
  int np2;
  fmt = (real_format_for_mode[(mode) - MIN_MODE_FLOAT]);
  if (fmt == ((void *)0))
    abort ();
  r->class = rvc_normal;
  r->sign = sign;
  r->signalling = 0;
  r->canonical = 0;
  ((r)->uexp = ((unsigned int)(fmt->emax * fmt->log2_b) & (unsigned int)((1 << (32 - 5)) - 1)));
  np2 = (128 + (8 * 4)) - fmt->p * fmt->log2_b;
  memset (r->sig, -1, ((128 + (8 * 4)) / (8 * 4)) * sizeof (unsigned long));
  clear_significand_below (r, np2);
}
void
real_2expN (struct real_value *r, int n)
{
  memset (r, 0, sizeof (*r));
  n++;
  if (n > ((1 << ((32 - 5) - 1)) - 1))
    r->class = rvc_inf;
  else if (n < -((1 << ((32 - 5) - 1)) - 1))
    ;
  else
    {
      r->class = rvc_normal;
      ((r)->uexp = ((unsigned int)(n) & (unsigned int)((1 << (32 - 5)) - 1)));
      r->sig[((128 + (8 * 4)) / (8 * 4))-1] = ((unsigned long)1 << ((8 * 4) - 1));
    }
}
static void
round_for_format (const struct real_format *fmt, struct real_value *r)
{
  int p2, np2, i, w;
  unsigned long sticky;
  unsigned char guard, lsb;
  int emin2m1, emax2;
  p2 = fmt->p * fmt->log2_b;
  emin2m1 = (fmt->emin - 1) * fmt->log2_b;
  emax2 = fmt->emax * fmt->log2_b;
  np2 = (128 + (8 * 4)) - p2;
  switch (r->class)
    {
    underflow:
      get_zero (r, r->sign);
    case rvc_zero:
      if (!fmt->has_signed_zero)
 r->sign = 0;
      return;
    overflow:
      get_inf (r, r->sign);
    case rvc_inf:
      return;
    case rvc_nan:
      clear_significand_below (r, np2);
      return;
    case rvc_normal:
      break;
    default:
      abort ();
    }
  if (fmt->log2_b != 1)
    {
      int shift = ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) & (fmt->log2_b - 1);
      if (shift)
 {
   shift = fmt->log2_b - shift;
   r->sig[0] |= sticky_rshift_significand (r, r, shift);
   ((r)->uexp = ((unsigned int)(((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + shift) & (unsigned int)((1 << (32 - 5)) - 1)));
 }
    }
  if (((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) > emax2)
    goto overflow;
  else if (((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) <= emin2m1)
    {
      int diff;
      if (!fmt->has_denorm)
 {
   if (((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) < emin2m1)
     goto underflow;
 }
      else
 {
   diff = emin2m1 - ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + 1;
   if (diff > p2)
     goto underflow;
   r->sig[0] |= sticky_rshift_significand (r, r, diff);
   ((r)->uexp = ((unsigned int)(((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + diff) & (unsigned int)((1 << (32 - 5)) - 1)));
 }
    }
  sticky = 0;
  for (i = 0, w = (np2 - 1) / (8 * 4); i < w; ++i)
    sticky |= r->sig[i];
  sticky |=
    r->sig[w] & (((unsigned long)1 << ((np2 - 1) % (8 * 4))) - 1);
  guard = test_significand_bit (r, np2 - 1);
  lsb = test_significand_bit (r, np2);
  if (guard && (sticky || lsb))
    {
      struct real_value u;
      get_zero (&u, 0);
      set_significand_bit (&u, np2);
      if (add_significands (r, r, &u))
 {
   ((r)->uexp = ((unsigned int)(((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + 1) & (unsigned int)((1 << (32 - 5)) - 1)));
   if (((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) > emax2)
     goto overflow;
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] = ((unsigned long)1 << ((8 * 4) - 1));
   if (fmt->log2_b != 1)
     {
       int shift = ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) & (fmt->log2_b - 1);
       if (shift)
  {
    shift = fmt->log2_b - shift;
    rshift_significand (r, r, shift);
    ((r)->uexp = ((unsigned int)(((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + shift) & (unsigned int)((1 << (32 - 5)) - 1)));
    if (((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) > emax2)
      goto overflow;
  }
     }
 }
    }
  if (((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) <= emin2m1)
    goto underflow;
  clear_significand_below (r, np2);
}
void
real_convert (struct real_value *r, enum machine_mode mode,
       const struct real_value *a)
{
  const struct real_format *fmt;
  fmt = (real_format_for_mode[(mode) - MIN_MODE_FLOAT]);
  if (fmt == ((void *)0))
    abort ();
  *r = *a;
  round_for_format (fmt, r);
  if (r->class == rvc_normal)
    normalize_val (r);
}
struct real_value
real_value_truncate (enum machine_mode mode, struct real_value a)
{
  struct real_value r;
  real_convert (&r, mode, &a);
  return r;
}
unsigned char
exact_real_truncate (enum machine_mode mode, const struct real_value *a)
{
  struct real_value t;
  real_convert (&t, mode, a);
  return real_identical (&t, a);
}
long
real_to_target_fmt (long *buf, const struct real_value *r_orig,
      const struct real_format *fmt)
{
  struct real_value r;
  long buf1;
  r = *r_orig;
  round_for_format (fmt, &r);
  if (!buf)
    buf = &buf1;
  (*fmt->encode) (fmt, buf, &r);
  return *buf;
}
long
real_to_target (long *buf, const struct real_value *r, enum machine_mode mode)
{
  const struct real_format *fmt;
  fmt = (real_format_for_mode[(mode) - MIN_MODE_FLOAT]);
  if (fmt == ((void *)0))
    abort ();
  return real_to_target_fmt (buf, r, fmt);
}
void
real_from_target_fmt (struct real_value *r, const long *buf,
        const struct real_format *fmt)
{
  (*fmt->decode) (fmt, r, buf);
}
void
real_from_target (struct real_value *r, const long *buf, enum machine_mode mode)
{
  const struct real_format *fmt;
  fmt = (real_format_for_mode[(mode) - MIN_MODE_FLOAT]);
  if (fmt == ((void *)0))
    abort ();
  (*fmt->decode) (fmt, r, buf);
}
int
significand_size (enum machine_mode mode)
{
  const struct real_format *fmt;
  fmt = (real_format_for_mode[(mode) - MIN_MODE_FLOAT]);
  if (fmt == ((void *)0))
    return 0;
  return fmt->p * fmt->log2_b;
}
unsigned int
real_hash (const struct real_value *r)
{
  unsigned int h;
  size_t i;
  h = r->class | (r->sign << 2);
  switch (r->class)
    {
    case rvc_zero:
    case rvc_inf:
      return h;
    case rvc_normal:
      h |= ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) << 3;
      break;
    case rvc_nan:
      if (r->signalling)
 h ^= (unsigned int)-1;
      if (r->canonical)
 return h;
      break;
    default:
      abort ();
    }
  if (sizeof(unsigned long) > sizeof(unsigned int))
    for (i = 0; i < ((128 + (8 * 4)) / (8 * 4)); ++i)
      {
 unsigned long s = r->sig[i];
 h ^= s ^ (s >> ((8 * 4) / 2));
      }
  else
    for (i = 0; i < ((128 + (8 * 4)) / (8 * 4)); ++i)
      h ^= r->sig[i];
  return h;
}
static void encode_ieee_single (const struct real_format *fmt,
    long *, const struct real_value *);
static void decode_ieee_single (const struct real_format *,
    struct real_value *, const long *);
static void
encode_ieee_single (const struct real_format *fmt, long *buf,
      const struct real_value *r)
{
  unsigned long image, sig, exp;
  unsigned long sign = r->sign;
  unsigned char denormal = (r->sig[((128 + (8 * 4)) / (8 * 4))-1] & ((unsigned long)1 << ((8 * 4) - 1))) == 0;
  image = sign << 31;
  sig = (r->sig[((128 + (8 * 4)) / (8 * 4))-1] >> ((8 * 4) - 24)) & 0x7fffff;
  switch (r->class)
    {
    case rvc_zero:
      break;
    case rvc_inf:
      if (fmt->has_inf)
 image |= 255 << 23;
      else
 image |= 0x7fffffff;
      break;
    case rvc_nan:
      if (fmt->has_nans)
 {
   if (r->canonical)
     sig = 0;
   if (r->signalling == fmt->qnan_msb_set)
     sig &= ~(1 << 22);
   else
     sig |= 1 << 22;
   if (r->canonical && !fmt->qnan_msb_set)
     sig |= (1 << 22) - 1;
   else if (sig == 0)
     sig = 1 << 21;
   image |= 255 << 23;
   image |= sig;
 }
      else
 image |= 0x7fffffff;
      break;
    case rvc_normal:
      if (denormal)
 exp = 0;
      else
      exp = ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + 127 - 1;
      image |= exp << 23;
      image |= sig;
      break;
    default:
      abort ();
    }
  buf[0] = image;
}
static void
decode_ieee_single (const struct real_format *fmt, struct real_value *r,
      const long *buf)
{
  unsigned long image = buf[0] & 0xffffffff;
  unsigned char sign = (image >> 31) & 1;
  int exp = (image >> 23) & 0xff;
  memset (r, 0, sizeof (*r));
  image <<= (8 * 4) - 24;
  image &= ~((unsigned long)1 << ((8 * 4) - 1));
  if (exp == 0)
    {
      if (image && fmt->has_denorm)
 {
   r->class = rvc_normal;
   r->sign = sign;
   ((r)->uexp = ((unsigned int)(-126) & (unsigned int)((1 << (32 - 5)) - 1)));
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] = image << 1;
   normalize_val (r);
 }
      else if (fmt->has_signed_zero)
 r->sign = sign;
    }
  else if (exp == 255 && (fmt->has_nans || fmt->has_inf))
    {
      if (image)
 {
   r->class = rvc_nan;
   r->sign = sign;
   r->signalling = (((image >> ((8 * 4) - 2)) & 1)
      ^ fmt->qnan_msb_set);
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] = image;
 }
      else
 {
   r->class = rvc_inf;
   r->sign = sign;
 }
    }
  else
    {
      r->class = rvc_normal;
      r->sign = sign;
      ((r)->uexp = ((unsigned int)(exp - 127 + 1) & (unsigned int)((1 << (32 - 5)) - 1)));
      r->sig[((128 + (8 * 4)) / (8 * 4))-1] = image | ((unsigned long)1 << ((8 * 4) - 1));
    }
}
const struct real_format ieee_single_format =
  {
    encode_ieee_single,
    decode_ieee_single,
    2,
    1,
    24,
    24,
    -125,
    128,
    31,
    1,
    1,
    1,
    1,
    1
  };
const struct real_format mips_single_format =
  {
    encode_ieee_single,
    decode_ieee_single,
    2,
    1,
    24,
    24,
    -125,
    128,
    31,
    1,
    1,
    1,
    1,
    0
  };
static void encode_ieee_double (const struct real_format *fmt,
    long *, const struct real_value *);
static void decode_ieee_double (const struct real_format *,
    struct real_value *, const long *);
static void
encode_ieee_double (const struct real_format *fmt, long *buf,
      const struct real_value *r)
{
  unsigned long image_lo, image_hi, sig_lo, sig_hi, exp;
  unsigned char denormal = (r->sig[((128 + (8 * 4)) / (8 * 4))-1] & ((unsigned long)1 << ((8 * 4) - 1))) == 0;
  image_hi = r->sign << 31;
  image_lo = 0;
  if ((8 * 4) == 64)
    {
      sig_hi = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
      sig_lo = (sig_hi >> (64 - 53)) & 0xffffffff;
      sig_hi = (sig_hi >> (64 - 53 + 1) >> 31) & 0xfffff;
    }
  else
    {
      sig_hi = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
      sig_lo = r->sig[((128 + (8 * 4)) / (8 * 4))-2];
      sig_lo = (sig_hi << 21) | (sig_lo >> 11);
      sig_hi = (sig_hi >> 11) & 0xfffff;
    }
  switch (r->class)
    {
    case rvc_zero:
      break;
    case rvc_inf:
      if (fmt->has_inf)
 image_hi |= 2047 << 20;
      else
 {
   image_hi |= 0x7fffffff;
   image_lo = 0xffffffff;
 }
      break;
    case rvc_nan:
      if (fmt->has_nans)
 {
   if (r->canonical)
     sig_hi = sig_lo = 0;
   if (r->signalling == fmt->qnan_msb_set)
     sig_hi &= ~(1 << 19);
   else
     sig_hi |= 1 << 19;
   if (r->canonical && !fmt->qnan_msb_set)
     {
       sig_hi |= (1 << 19) - 1;
       sig_lo = 0xffffffff;
     }
   else if (sig_hi == 0 && sig_lo == 0)
     sig_hi = 1 << 18;
   image_hi |= 2047 << 20;
   image_hi |= sig_hi;
   image_lo = sig_lo;
 }
      else
 {
   image_hi |= 0x7fffffff;
   image_lo = 0xffffffff;
 }
      break;
    case rvc_normal:
      if (denormal)
 exp = 0;
      else
 exp = ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + 1023 - 1;
      image_hi |= exp << 20;
      image_hi |= sig_hi;
      image_lo = sig_lo;
      break;
    default:
      abort ();
    }
  if (0)
    buf[0] = image_hi, buf[1] = image_lo;
  else
    buf[0] = image_lo, buf[1] = image_hi;
}
static void
decode_ieee_double (const struct real_format *fmt, struct real_value *r,
      const long *buf)
{
  unsigned long image_hi, image_lo;
  unsigned char sign;
  int exp;
  if (0)
    image_hi = buf[0], image_lo = buf[1];
  else
    image_lo = buf[0], image_hi = buf[1];
  image_lo &= 0xffffffff;
  image_hi &= 0xffffffff;
  sign = (image_hi >> 31) & 1;
  exp = (image_hi >> 20) & 0x7ff;
  memset (r, 0, sizeof (*r));
  image_hi <<= 32 - 21;
  image_hi |= image_lo >> 21;
  image_hi &= 0x7fffffff;
  image_lo <<= 32 - 21;
  if (exp == 0)
    {
      if ((image_hi || image_lo) && fmt->has_denorm)
 {
   r->class = rvc_normal;
   r->sign = sign;
   ((r)->uexp = ((unsigned int)(-1022) & (unsigned int)((1 << (32 - 5)) - 1)));
   if ((8 * 4) == 32)
     {
       image_hi = (image_hi << 1) | (image_lo >> 31);
       image_lo <<= 1;
       r->sig[((128 + (8 * 4)) / (8 * 4))-1] = image_hi;
       r->sig[((128 + (8 * 4)) / (8 * 4))-2] = image_lo;
     }
   else
     {
       image_hi = (image_hi << 31 << 2) | (image_lo << 1);
       r->sig[((128 + (8 * 4)) / (8 * 4))-1] = image_hi;
     }
   normalize_val (r);
 }
      else if (fmt->has_signed_zero)
 r->sign = sign;
    }
  else if (exp == 2047 && (fmt->has_nans || fmt->has_inf))
    {
      if (image_hi || image_lo)
 {
   r->class = rvc_nan;
   r->sign = sign;
   r->signalling = ((image_hi >> 30) & 1) ^ fmt->qnan_msb_set;
   if ((8 * 4) == 32)
     {
       r->sig[((128 + (8 * 4)) / (8 * 4))-1] = image_hi;
       r->sig[((128 + (8 * 4)) / (8 * 4))-2] = image_lo;
     }
   else
     r->sig[((128 + (8 * 4)) / (8 * 4))-1] = (image_hi << 31 << 1) | image_lo;
 }
      else
 {
   r->class = rvc_inf;
   r->sign = sign;
 }
    }
  else
    {
      r->class = rvc_normal;
      r->sign = sign;
      ((r)->uexp = ((unsigned int)(exp - 1023 + 1) & (unsigned int)((1 << (32 - 5)) - 1)));
      if ((8 * 4) == 32)
 {
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] = image_hi | ((unsigned long)1 << ((8 * 4) - 1));
   r->sig[((128 + (8 * 4)) / (8 * 4))-2] = image_lo;
 }
      else
 r->sig[((128 + (8 * 4)) / (8 * 4))-1] = (image_hi << 31 << 1) | image_lo | ((unsigned long)1 << ((8 * 4) - 1));
    }
}
const struct real_format ieee_double_format =
  {
    encode_ieee_double,
    decode_ieee_double,
    2,
    1,
    53,
    53,
    -1021,
    1024,
    63,
    1,
    1,
    1,
    1,
    1
  };
const struct real_format mips_double_format =
  {
    encode_ieee_double,
    decode_ieee_double,
    2,
    1,
    53,
    53,
    -1021,
    1024,
    63,
    1,
    1,
    1,
    1,
    0
  };
static void
encode_ieee_extended (const struct real_format *fmt, long *buf,
        const struct real_value *r)
{
  unsigned long image_hi, sig_hi, sig_lo;
  unsigned char denormal = (r->sig[((128 + (8 * 4)) / (8 * 4))-1] & ((unsigned long)1 << ((8 * 4) - 1))) == 0;
  image_hi = r->sign << 15;
  sig_hi = sig_lo = 0;
  switch (r->class)
    {
    case rvc_zero:
      break;
    case rvc_inf:
      if (fmt->has_inf)
 {
   image_hi |= 32767;
   sig_hi = 0x80000000;
 }
      else
 {
   image_hi |= 32767;
   sig_lo = sig_hi = 0xffffffff;
 }
      break;
    case rvc_nan:
      if (fmt->has_nans)
 {
   image_hi |= 32767;
   if ((8 * 4) == 32)
     {
       sig_hi = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
       sig_lo = r->sig[((128 + (8 * 4)) / (8 * 4))-2];
     }
   else
     {
       sig_lo = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
       sig_hi = sig_lo >> 31 >> 1;
       sig_lo &= 0xffffffff;
     }
   if (r->signalling == fmt->qnan_msb_set)
     sig_hi &= ~(1 << 30);
   else
     sig_hi |= 1 << 30;
   if ((sig_hi & 0x7fffffff) == 0 && sig_lo == 0)
     sig_hi = 1 << 29;
   sig_hi |= 0x80000000;
 }
      else
 {
   image_hi |= 32767;
   sig_lo = sig_hi = 0xffffffff;
 }
      break;
    case rvc_normal:
      {
 int exp = ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1)));
 if (denormal)
   exp = 0;
 else
   {
     exp += 16383 - 1;
     if (exp < 0)
       abort ();
   }
 image_hi |= exp;
 if ((8 * 4) == 32)
   {
     sig_hi = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
     sig_lo = r->sig[((128 + (8 * 4)) / (8 * 4))-2];
   }
 else
   {
     sig_lo = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
     sig_hi = sig_lo >> 31 >> 1;
     sig_lo &= 0xffffffff;
   }
      }
      break;
    default:
      abort ();
    }
  buf[0] = sig_lo, buf[1] = sig_hi, buf[2] = image_hi;
}
static void
encode_ieee_extended_motorola (const struct real_format *fmt, long *buf,
          const struct real_value *r)
{
  long intermed[3];
  encode_ieee_extended (fmt, intermed, r);
  buf[0] = intermed[2] << 16;
  buf[1] = intermed[1];
  buf[2] = intermed[0];
}
static void
encode_ieee_extended_intel_96 (const struct real_format *fmt, long *buf,
          const struct real_value *r)
{
  if (0)
    {
      long intermed[3];
      encode_ieee_extended (fmt, intermed, r);
      buf[0] = ((intermed[2] << 16) | ((unsigned long)(intermed[1] & 0xFFFF0000) >> 16));
      buf[1] = ((intermed[1] << 16) | ((unsigned long)(intermed[0] & 0xFFFF0000) >> 16));
      buf[2] = (intermed[0] << 16);
    }
  else
    encode_ieee_extended (fmt, buf, r);
}
static void
encode_ieee_extended_intel_128 (const struct real_format *fmt, long *buf,
    const struct real_value *r)
{
  encode_ieee_extended_intel_96 (fmt, buf, r);
  buf[3] = 0;
}
static void
decode_ieee_extended (const struct real_format *fmt, struct real_value *r,
        const long *buf)
{
  unsigned long image_hi, sig_hi, sig_lo;
  unsigned char sign;
  int exp;
  sig_lo = buf[0], sig_hi = buf[1], image_hi = buf[2];
  sig_lo &= 0xffffffff;
  sig_hi &= 0xffffffff;
  image_hi &= 0xffffffff;
  sign = (image_hi >> 15) & 1;
  exp = image_hi & 0x7fff;
  memset (r, 0, sizeof (*r));
  if (exp == 0)
    {
      if ((sig_hi || sig_lo) && fmt->has_denorm)
 {
   r->class = rvc_normal;
   r->sign = sign;
   ((r)->uexp = ((unsigned int)(fmt->emin) & (unsigned int)((1 << (32 - 5)) - 1)));
   if ((8 * 4) == 32)
     {
       r->sig[((128 + (8 * 4)) / (8 * 4))-1] = sig_hi;
       r->sig[((128 + (8 * 4)) / (8 * 4))-2] = sig_lo;
     }
   else
     r->sig[((128 + (8 * 4)) / (8 * 4))-1] = (sig_hi << 31 << 1) | sig_lo;
   normalize_val (r);
 }
      else if (fmt->has_signed_zero)
 r->sign = sign;
    }
  else if (exp == 32767 && (fmt->has_nans || fmt->has_inf))
    {
      sig_hi &= 0x7fffffff;
      if (sig_hi || sig_lo)
 {
   r->class = rvc_nan;
   r->sign = sign;
   r->signalling = ((sig_hi >> 30) & 1) ^ fmt->qnan_msb_set;
   if ((8 * 4) == 32)
     {
       r->sig[((128 + (8 * 4)) / (8 * 4))-1] = sig_hi;
       r->sig[((128 + (8 * 4)) / (8 * 4))-2] = sig_lo;
     }
   else
     r->sig[((128 + (8 * 4)) / (8 * 4))-1] = (sig_hi << 31 << 1) | sig_lo;
 }
      else
 {
   r->class = rvc_inf;
   r->sign = sign;
 }
    }
  else
    {
      r->class = rvc_normal;
      r->sign = sign;
      ((r)->uexp = ((unsigned int)(exp - 16383 + 1) & (unsigned int)((1 << (32 - 5)) - 1)));
      if ((8 * 4) == 32)
 {
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] = sig_hi;
   r->sig[((128 + (8 * 4)) / (8 * 4))-2] = sig_lo;
 }
      else
 r->sig[((128 + (8 * 4)) / (8 * 4))-1] = (sig_hi << 31 << 1) | sig_lo;
    }
}
static void
decode_ieee_extended_motorola (const struct real_format *fmt, struct real_value *r,
          const long *buf)
{
  long intermed[3];
  intermed[0] = buf[2];
  intermed[1] = buf[1];
  intermed[2] = (unsigned long)buf[0] >> 16;
  decode_ieee_extended (fmt, r, intermed);
}
static void
decode_ieee_extended_intel_96 (const struct real_format *fmt, struct real_value *r,
          const long *buf)
{
  if (0)
    {
      long intermed[3];
      intermed[0] = (((unsigned long)buf[2] >> 16) | (buf[1] << 16));
      intermed[1] = (((unsigned long)buf[1] >> 16) | (buf[0] << 16));
      intermed[2] = ((unsigned long)buf[0] >> 16);
      decode_ieee_extended (fmt, r, intermed);
    }
  else
    decode_ieee_extended (fmt, r, buf);
}
static void
decode_ieee_extended_intel_128 (const struct real_format *fmt, struct real_value *r,
    const long *buf)
{
  decode_ieee_extended_intel_96 (fmt, r, buf);
}
const struct real_format ieee_extended_motorola_format =
  {
    encode_ieee_extended_motorola,
    decode_ieee_extended_motorola,
    2,
    1,
    64,
    64,
    -16382,
    16384,
    95,
    1,
    1,
    1,
    1,
    1
  };
const struct real_format ieee_extended_intel_96_format =
  {
    encode_ieee_extended_intel_96,
    decode_ieee_extended_intel_96,
    2,
    1,
    64,
    64,
    -16381,
    16384,
    79,
    1,
    1,
    1,
    1,
    1
  };
const struct real_format ieee_extended_intel_128_format =
  {
    encode_ieee_extended_intel_128,
    decode_ieee_extended_intel_128,
    2,
    1,
    64,
    64,
    -16381,
    16384,
    79,
    1,
    1,
    1,
    1,
    1
  };
const struct real_format ieee_extended_intel_96_round_53_format =
  {
    encode_ieee_extended_intel_96,
    decode_ieee_extended_intel_96,
    2,
    1,
    53,
    53,
    -16381,
    16384,
    79,
    1,
    1,
    1,
    1,
    1
  };
static void encode_ibm_extended (const struct real_format *fmt,
     long *, const struct real_value *);
static void decode_ibm_extended (const struct real_format *,
     struct real_value *, const long *);
static void
encode_ibm_extended (const struct real_format *fmt, long *buf,
       const struct real_value *r)
{
  struct real_value u, normr, v;
  const struct real_format *base_fmt;
  base_fmt = fmt->qnan_msb_set ? &ieee_double_format : &mips_double_format;
  normr = *r;
  if (normr.class == rvc_normal)
    normalize_val (&normr);
  u = normr;
  round_for_format (base_fmt, &u);
  encode_ieee_double (base_fmt, &buf[0], &u);
  if (u.class == rvc_normal)
    {
      do_add (&v, &normr, &u, 1);
      round_for_format (base_fmt, &v);
      encode_ieee_double (base_fmt, &buf[2], &v);
    }
  else
    {
      buf[2] = 0;
      buf[3] = 0;
    }
}
static void
decode_ibm_extended (const struct real_format *fmt , struct real_value *r,
       const long *buf)
{
  struct real_value u, v;
  const struct real_format *base_fmt;
  base_fmt = fmt->qnan_msb_set ? &ieee_double_format : &mips_double_format;
  decode_ieee_double (base_fmt, &u, &buf[0]);
  if (u.class != rvc_zero && u.class != rvc_inf && u.class != rvc_nan)
    {
      decode_ieee_double (base_fmt, &v, &buf[2]);
      do_add (r, &u, &v, 0);
    }
  else
    *r = u;
}
const struct real_format ibm_extended_format =
  {
    encode_ibm_extended,
    decode_ibm_extended,
    2,
    1,
    53 + 53,
    53,
    -1021 + 53,
    1024,
    -1,
    1,
    1,
    1,
    1,
    1
  };
const struct real_format mips_extended_format =
  {
    encode_ibm_extended,
    decode_ibm_extended,
    2,
    1,
    53 + 53,
    53,
    -1021 + 53,
    1024,
    -1,
    1,
    1,
    1,
    1,
    0
  };
static void encode_ieee_quad (const struct real_format *fmt,
         long *, const struct real_value *);
static void decode_ieee_quad (const struct real_format *,
         struct real_value *, const long *);
static void
encode_ieee_quad (const struct real_format *fmt, long *buf,
    const struct real_value *r)
{
  unsigned long image3, image2, image1, image0, exp;
  unsigned char denormal = (r->sig[((128 + (8 * 4)) / (8 * 4))-1] & ((unsigned long)1 << ((8 * 4) - 1))) == 0;
  struct real_value u;
  image3 = r->sign << 31;
  image2 = 0;
  image1 = 0;
  image0 = 0;
  rshift_significand (&u, r, (128 + (8 * 4)) - 113);
  switch (r->class)
    {
    case rvc_zero:
      break;
    case rvc_inf:
      if (fmt->has_inf)
 image3 |= 32767 << 16;
      else
 {
   image3 |= 0x7fffffff;
   image2 = 0xffffffff;
   image1 = 0xffffffff;
   image0 = 0xffffffff;
 }
      break;
    case rvc_nan:
      if (fmt->has_nans)
 {
   image3 |= 32767 << 16;
   if (r->canonical)
     {
     }
   else if ((8 * 4) == 32)
     {
       image0 = u.sig[0];
       image1 = u.sig[1];
       image2 = u.sig[2];
       image3 |= u.sig[3] & 0xffff;
     }
   else
     {
       image0 = u.sig[0];
       image1 = image0 >> 31 >> 1;
       image2 = u.sig[1];
       image3 |= (image2 >> 31 >> 1) & 0xffff;
       image0 &= 0xffffffff;
       image2 &= 0xffffffff;
     }
   if (r->signalling == fmt->qnan_msb_set)
     image3 &= ~0x8000;
   else
     image3 |= 0x8000;
   if (r->canonical && !fmt->qnan_msb_set)
     {
       image3 |= 0x7fff;
       image2 = image1 = image0 = 0xffffffff;
     }
   else if (((image3 & 0xffff) | image2 | image1 | image0) == 0)
     image3 |= 0x4000;
 }
      else
 {
   image3 |= 0x7fffffff;
   image2 = 0xffffffff;
   image1 = 0xffffffff;
   image0 = 0xffffffff;
 }
      break;
    case rvc_normal:
      if (denormal)
 exp = 0;
      else
 exp = ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + 16383 - 1;
      image3 |= exp << 16;
      if ((8 * 4) == 32)
 {
   image0 = u.sig[0];
   image1 = u.sig[1];
   image2 = u.sig[2];
   image3 |= u.sig[3] & 0xffff;
 }
      else
 {
   image0 = u.sig[0];
   image1 = image0 >> 31 >> 1;
   image2 = u.sig[1];
   image3 |= (image2 >> 31 >> 1) & 0xffff;
   image0 &= 0xffffffff;
   image2 &= 0xffffffff;
 }
      break;
    default:
      abort ();
    }
  if (0)
    {
      buf[0] = image3;
      buf[1] = image2;
      buf[2] = image1;
      buf[3] = image0;
    }
  else
    {
      buf[0] = image0;
      buf[1] = image1;
      buf[2] = image2;
      buf[3] = image3;
    }
}
static void
decode_ieee_quad (const struct real_format *fmt, struct real_value *r,
    const long *buf)
{
  unsigned long image3, image2, image1, image0;
  unsigned char sign;
  int exp;
  if (0)
    {
      image3 = buf[0];
      image2 = buf[1];
      image1 = buf[2];
      image0 = buf[3];
    }
  else
    {
      image0 = buf[0];
      image1 = buf[1];
      image2 = buf[2];
      image3 = buf[3];
    }
  image0 &= 0xffffffff;
  image1 &= 0xffffffff;
  image2 &= 0xffffffff;
  sign = (image3 >> 31) & 1;
  exp = (image3 >> 16) & 0x7fff;
  image3 &= 0xffff;
  memset (r, 0, sizeof (*r));
  if (exp == 0)
    {
      if ((image3 | image2 | image1 | image0) && fmt->has_denorm)
 {
   r->class = rvc_normal;
   r->sign = sign;
   ((r)->uexp = ((unsigned int)(-16382 + ((128 + (8 * 4)) - 112)) & (unsigned int)((1 << (32 - 5)) - 1)));
   if ((8 * 4) == 32)
     {
       r->sig[0] = image0;
       r->sig[1] = image1;
       r->sig[2] = image2;
       r->sig[3] = image3;
     }
   else
     {
       r->sig[0] = (image1 << 31 << 1) | image0;
       r->sig[1] = (image3 << 31 << 1) | image2;
     }
   normalize_val (r);
 }
      else if (fmt->has_signed_zero)
 r->sign = sign;
    }
  else if (exp == 32767 && (fmt->has_nans || fmt->has_inf))
    {
      if (image3 | image2 | image1 | image0)
 {
   r->class = rvc_nan;
   r->sign = sign;
   r->signalling = ((image3 >> 15) & 1) ^ fmt->qnan_msb_set;
   if ((8 * 4) == 32)
     {
       r->sig[0] = image0;
       r->sig[1] = image1;
       r->sig[2] = image2;
       r->sig[3] = image3;
     }
   else
     {
       r->sig[0] = (image1 << 31 << 1) | image0;
       r->sig[1] = (image3 << 31 << 1) | image2;
     }
   lshift_significand (r, r, (128 + (8 * 4)) - 113);
 }
      else
 {
   r->class = rvc_inf;
   r->sign = sign;
 }
    }
  else
    {
      r->class = rvc_normal;
      r->sign = sign;
      ((r)->uexp = ((unsigned int)(exp - 16383 + 1) & (unsigned int)((1 << (32 - 5)) - 1)));
      if ((8 * 4) == 32)
 {
   r->sig[0] = image0;
   r->sig[1] = image1;
   r->sig[2] = image2;
   r->sig[3] = image3;
 }
      else
 {
   r->sig[0] = (image1 << 31 << 1) | image0;
   r->sig[1] = (image3 << 31 << 1) | image2;
 }
      lshift_significand (r, r, (128 + (8 * 4)) - 113);
      r->sig[((128 + (8 * 4)) / (8 * 4))-1] |= ((unsigned long)1 << ((8 * 4) - 1));
    }
}
const struct real_format ieee_quad_format =
  {
    encode_ieee_quad,
    decode_ieee_quad,
    2,
    1,
    113,
    113,
    -16381,
    16384,
    127,
    1,
    1,
    1,
    1,
    1
  };
const struct real_format mips_quad_format =
  {
    encode_ieee_quad,
    decode_ieee_quad,
    2,
    1,
    113,
    113,
    -16381,
    16384,
    127,
    1,
    1,
    1,
    1,
    0
  };
static void encode_vax_f (const struct real_format *fmt,
     long *, const struct real_value *);
static void decode_vax_f (const struct real_format *,
     struct real_value *, const long *);
static void encode_vax_d (const struct real_format *fmt,
     long *, const struct real_value *);
static void decode_vax_d (const struct real_format *,
     struct real_value *, const long *);
static void encode_vax_g (const struct real_format *fmt,
     long *, const struct real_value *);
static void decode_vax_g (const struct real_format *,
     struct real_value *, const long *);
static void
encode_vax_f (const struct real_format *fmt , long *buf,
       const struct real_value *r)
{
  unsigned long sign, exp, sig, image;
  sign = r->sign << 15;
  switch (r->class)
    {
    case rvc_zero:
      image = 0;
      break;
    case rvc_inf:
    case rvc_nan:
      image = 0xffff7fff | sign;
      break;
    case rvc_normal:
      sig = (r->sig[((128 + (8 * 4)) / (8 * 4))-1] >> ((8 * 4) - 24)) & 0x7fffff;
      exp = ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + 128;
      image = (sig << 16) & 0xffff0000;
      image |= sign;
      image |= exp << 7;
      image |= sig >> 16;
      break;
    default:
      abort ();
    }
  buf[0] = image;
}
static void
decode_vax_f (const struct real_format *fmt ,
       struct real_value *r, const long *buf)
{
  unsigned long image = buf[0] & 0xffffffff;
  int exp = (image >> 7) & 0xff;
  memset (r, 0, sizeof (*r));
  if (exp != 0)
    {
      r->class = rvc_normal;
      r->sign = (image >> 15) & 1;
      ((r)->uexp = ((unsigned int)(exp - 128) & (unsigned int)((1 << (32 - 5)) - 1)));
      image = ((image & 0x7f) << 16) | ((image >> 16) & 0xffff);
      r->sig[((128 + (8 * 4)) / (8 * 4))-1] = (image << ((8 * 4) - 24)) | ((unsigned long)1 << ((8 * 4) - 1));
    }
}
static void
encode_vax_d (const struct real_format *fmt , long *buf,
       const struct real_value *r)
{
  unsigned long image0, image1, sign = r->sign << 15;
  switch (r->class)
    {
    case rvc_zero:
      image0 = image1 = 0;
      break;
    case rvc_inf:
    case rvc_nan:
      image0 = 0xffff7fff | sign;
      image1 = 0xffffffff;
      break;
    case rvc_normal:
      if ((8 * 4) == 64)
 {
   image0 = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
   image1 = (image0 >> (64 - 56)) & 0xffffffff;
   image0 = (image0 >> (64 - 56 + 1) >> 31) & 0x7fffff;
 }
      else
 {
   image0 = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
   image1 = r->sig[((128 + (8 * 4)) / (8 * 4))-2];
   image1 = (image0 << 24) | (image1 >> 8);
   image0 = (image0 >> 8) & 0xffffff;
 }
      image0 = ((image0 << 16) | (image0 >> 16)) & 0xffff007f;
      image1 = ((image1 << 16) | (image1 >> 16)) & 0xffffffff;
      image0 |= sign;
      image0 |= (((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + 128) << 7;
      break;
    default:
      abort ();
    }
  if (0)
    buf[0] = image1, buf[1] = image0;
  else
    buf[0] = image0, buf[1] = image1;
}
static void
decode_vax_d (const struct real_format *fmt ,
       struct real_value *r, const long *buf)
{
  unsigned long image0, image1;
  int exp;
  if (0)
    image1 = buf[0], image0 = buf[1];
  else
    image0 = buf[0], image1 = buf[1];
  image0 &= 0xffffffff;
  image1 &= 0xffffffff;
  exp = (image0 >> 7) & 0xff;
  memset (r, 0, sizeof (*r));
  if (exp != 0)
    {
      r->class = rvc_normal;
      r->sign = (image0 >> 15) & 1;
      ((r)->uexp = ((unsigned int)(exp - 128) & (unsigned int)((1 << (32 - 5)) - 1)));
      image0 = ((image0 & 0x7f) << 16) | ((image0 >> 16) & 0xffff);
      image1 = ((image1 & 0xffff) << 16) | ((image1 >> 16) & 0xffff);
      if ((8 * 4) == 64)
 {
   image0 = (image0 << 31 << 1) | image1;
   image0 <<= 64 - 56;
   image0 |= ((unsigned long)1 << ((8 * 4) - 1));
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] = image0;
 }
      else
 {
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] = image0;
   r->sig[((128 + (8 * 4)) / (8 * 4))-2] = image1;
   lshift_significand (r, r, 2*(8 * 4) - 56);
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] |= ((unsigned long)1 << ((8 * 4) - 1));
 }
    }
}
static void
encode_vax_g (const struct real_format *fmt , long *buf,
       const struct real_value *r)
{
  unsigned long image0, image1, sign = r->sign << 15;
  switch (r->class)
    {
    case rvc_zero:
      image0 = image1 = 0;
      break;
    case rvc_inf:
    case rvc_nan:
      image0 = 0xffff7fff | sign;
      image1 = 0xffffffff;
      break;
    case rvc_normal:
      if ((8 * 4) == 64)
 {
   image0 = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
   image1 = (image0 >> (64 - 53)) & 0xffffffff;
   image0 = (image0 >> (64 - 53 + 1) >> 31) & 0xfffff;
 }
      else
 {
   image0 = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
   image1 = r->sig[((128 + (8 * 4)) / (8 * 4))-2];
   image1 = (image0 << 21) | (image1 >> 11);
   image0 = (image0 >> 11) & 0xfffff;
 }
      image0 = ((image0 << 16) | (image0 >> 16)) & 0xffff000f;
      image1 = ((image1 << 16) | (image1 >> 16)) & 0xffffffff;
      image0 |= sign;
      image0 |= (((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) + 1024) << 4;
      break;
    default:
      abort ();
    }
  if (0)
    buf[0] = image1, buf[1] = image0;
  else
    buf[0] = image0, buf[1] = image1;
}
static void
decode_vax_g (const struct real_format *fmt ,
       struct real_value *r, const long *buf)
{
  unsigned long image0, image1;
  int exp;
  if (0)
    image1 = buf[0], image0 = buf[1];
  else
    image0 = buf[0], image1 = buf[1];
  image0 &= 0xffffffff;
  image1 &= 0xffffffff;
  exp = (image0 >> 4) & 0x7ff;
  memset (r, 0, sizeof (*r));
  if (exp != 0)
    {
      r->class = rvc_normal;
      r->sign = (image0 >> 15) & 1;
      ((r)->uexp = ((unsigned int)(exp - 1024) & (unsigned int)((1 << (32 - 5)) - 1)));
      image0 = ((image0 & 0xf) << 16) | ((image0 >> 16) & 0xffff);
      image1 = ((image1 & 0xffff) << 16) | ((image1 >> 16) & 0xffff);
      if ((8 * 4) == 64)
 {
   image0 = (image0 << 31 << 1) | image1;
   image0 <<= 64 - 53;
   image0 |= ((unsigned long)1 << ((8 * 4) - 1));
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] = image0;
 }
      else
 {
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] = image0;
   r->sig[((128 + (8 * 4)) / (8 * 4))-2] = image1;
   lshift_significand (r, r, 64 - 53);
   r->sig[((128 + (8 * 4)) / (8 * 4))-1] |= ((unsigned long)1 << ((8 * 4) - 1));
 }
    }
}
const struct real_format vax_f_format =
  {
    encode_vax_f,
    decode_vax_f,
    2,
    1,
    24,
    24,
    -127,
    127,
    15,
    0,
    0,
    0,
    0,
    0
  };
const struct real_format vax_d_format =
  {
    encode_vax_d,
    decode_vax_d,
    2,
    1,
    56,
    56,
    -127,
    127,
    15,
    0,
    0,
    0,
    0,
    0
  };
const struct real_format vax_g_format =
  {
    encode_vax_g,
    decode_vax_g,
    2,
    1,
    53,
    53,
    -1023,
    1023,
    15,
    0,
    0,
    0,
    0,
    0
  };
static void encode_i370_single (const struct real_format *fmt,
    long *, const struct real_value *);
static void decode_i370_single (const struct real_format *,
    struct real_value *, const long *);
static void encode_i370_double (const struct real_format *fmt,
    long *, const struct real_value *);
static void decode_i370_double (const struct real_format *,
    struct real_value *, const long *);
static void
encode_i370_single (const struct real_format *fmt ,
      long *buf, const struct real_value *r)
{
  unsigned long sign, exp, sig, image;
  sign = r->sign << 31;
  switch (r->class)
    {
    case rvc_zero:
      image = 0;
      break;
    case rvc_inf:
    case rvc_nan:
      image = 0x7fffffff | sign;
      break;
    case rvc_normal:
      sig = (r->sig[((128 + (8 * 4)) / (8 * 4))-1] >> ((8 * 4) - 24)) & 0xffffff;
      exp = ((((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) / 4) + 64) << 24;
      image = sign | exp | sig;
      break;
    default:
      abort ();
    }
  buf[0] = image;
}
static void
decode_i370_single (const struct real_format *fmt ,
      struct real_value *r, const long *buf)
{
  unsigned long sign, sig, image = buf[0];
  int exp;
  sign = (image >> 31) & 1;
  exp = (image >> 24) & 0x7f;
  sig = image & 0xffffff;
  memset (r, 0, sizeof (*r));
  if (exp || sig)
    {
      r->class = rvc_normal;
      r->sign = sign;
      ((r)->uexp = ((unsigned int)((exp - 64) * 4) & (unsigned int)((1 << (32 - 5)) - 1)));
      r->sig[((128 + (8 * 4)) / (8 * 4))-1] = sig << ((8 * 4) - 24);
      normalize_val (r);
    }
}
static void
encode_i370_double (const struct real_format *fmt ,
      long *buf, const struct real_value *r)
{
  unsigned long sign, exp, image_hi, image_lo;
  sign = r->sign << 31;
  switch (r->class)
    {
    case rvc_zero:
      image_hi = image_lo = 0;
      break;
    case rvc_inf:
    case rvc_nan:
      image_hi = 0x7fffffff | sign;
      image_lo = 0xffffffff;
      break;
    case rvc_normal:
      if ((8 * 4) == 64)
 {
   image_hi = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
   image_lo = (image_hi >> (64 - 56)) & 0xffffffff;
   image_hi = (image_hi >> (64 - 56 + 1) >> 31) & 0xffffff;
 }
      else
 {
   image_hi = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
   image_lo = r->sig[((128 + (8 * 4)) / (8 * 4))-2];
   image_lo = (image_lo >> 8) | (image_hi << 24);
   image_hi >>= 8;
 }
      exp = ((((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) / 4) + 64) << 24;
      image_hi |= sign | exp;
      break;
    default:
      abort ();
    }
  if (0)
    buf[0] = image_hi, buf[1] = image_lo;
  else
    buf[0] = image_lo, buf[1] = image_hi;
}
static void
decode_i370_double (const struct real_format *fmt ,
      struct real_value *r, const long *buf)
{
  unsigned long sign, image_hi, image_lo;
  int exp;
  if (0)
    image_hi = buf[0], image_lo = buf[1];
  else
    image_lo = buf[0], image_hi = buf[1];
  sign = (image_hi >> 31) & 1;
  exp = (image_hi >> 24) & 0x7f;
  image_hi &= 0xffffff;
  image_lo &= 0xffffffff;
  memset (r, 0, sizeof (*r));
  if (exp || image_hi || image_lo)
    {
      r->class = rvc_normal;
      r->sign = sign;
      ((r)->uexp = ((unsigned int)((exp - 64) * 4 + ((128 + (8 * 4)) - 56)) & (unsigned int)((1 << (32 - 5)) - 1)));
      if ((8 * 4) == 32)
 {
   r->sig[0] = image_lo;
   r->sig[1] = image_hi;
 }
      else
 r->sig[0] = image_lo | (image_hi << 31 << 1);
      normalize_val (r);
    }
}
const struct real_format i370_single_format =
  {
    encode_i370_single,
    decode_i370_single,
    16,
    4,
    6,
    6,
    -64,
    63,
    31,
    0,
    0,
    0,
    0,
    0
  };
const struct real_format i370_double_format =
  {
    encode_i370_double,
    decode_i370_double,
    16,
    4,
    14,
    14,
    -64,
    63,
    63,
    0,
    0,
    0,
    0,
    0
  };
static void encode_c4x_single (const struct real_format *fmt,
          long *, const struct real_value *);
static void decode_c4x_single (const struct real_format *,
          struct real_value *, const long *);
static void encode_c4x_extended (const struct real_format *fmt,
     long *, const struct real_value *);
static void decode_c4x_extended (const struct real_format *,
     struct real_value *, const long *);
static void
encode_c4x_single (const struct real_format *fmt ,
     long *buf, const struct real_value *r)
{
  unsigned long image, exp, sig;
  switch (r->class)
    {
    case rvc_zero:
      exp = -128;
      sig = 0;
      break;
    case rvc_inf:
    case rvc_nan:
      exp = 127;
      sig = 0x800000 - r->sign;
      break;
    case rvc_normal:
      exp = ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) - 1;
      sig = (r->sig[((128 + (8 * 4)) / (8 * 4))-1] >> ((8 * 4) - 24)) & 0x7fffff;
      if (r->sign)
 {
   if (sig)
     sig = -sig;
   else
     exp--;
   sig |= 0x800000;
 }
      break;
    default:
      abort ();
    }
  image = ((exp & 0xff) << 24) | (sig & 0xffffff);
  buf[0] = image;
}
static void
decode_c4x_single (const struct real_format *fmt ,
     struct real_value *r, const long *buf)
{
  unsigned long image = buf[0];
  unsigned long sig;
  int exp, sf;
  exp = (((image >> 24) & 0xff) ^ 0x80) - 0x80;
  sf = ((image & 0xffffff) ^ 0x800000) - 0x800000;
  memset (r, 0, sizeof (*r));
  if (exp != -128)
    {
      r->class = rvc_normal;
      sig = sf & 0x7fffff;
      if (sf < 0)
 {
   r->sign = 1;
   if (sig)
     sig = -sig;
   else
     exp++;
 }
      sig = (sig << ((8 * 4) - 24)) | ((unsigned long)1 << ((8 * 4) - 1));
      ((r)->uexp = ((unsigned int)(exp + 1) & (unsigned int)((1 << (32 - 5)) - 1)));
      r->sig[((128 + (8 * 4)) / (8 * 4))-1] = sig;
    }
}
static void
encode_c4x_extended (const struct real_format *fmt ,
       long *buf, const struct real_value *r)
{
  unsigned long exp, sig;
  switch (r->class)
    {
    case rvc_zero:
      exp = -128;
      sig = 0;
      break;
    case rvc_inf:
    case rvc_nan:
      exp = 127;
      sig = 0x80000000 - r->sign;
      break;
    case rvc_normal:
      exp = ((int)((r)->uexp ^ (unsigned int)(1 << ((32 - 5) - 1))) - (1 << ((32 - 5) - 1))) - 1;
      sig = r->sig[((128 + (8 * 4)) / (8 * 4))-1];
      if ((8 * 4) == 64)
 sig = sig >> 1 >> 31;
      sig &= 0x7fffffff;
      if (r->sign)
 {
   if (sig)
     sig = -sig;
   else
     exp--;
   sig |= 0x80000000;
 }
      break;
    default:
      abort ();
    }
  exp = (exp & 0xff) << 24;
  sig &= 0xffffffff;
  if (0)
    buf[0] = exp, buf[1] = sig;
  else
    buf[0] = sig, buf[0] = exp;
}
static void
decode_c4x_extended (const struct real_format *fmt ,
       struct real_value *r, const long *buf)
{
  unsigned long sig;
  int exp, sf;
  if (0)
    exp = buf[0], sf = buf[1];
  else
    sf = buf[0], exp = buf[1];
  exp = (((exp >> 24) & 0xff) & 0x80) - 0x80;
  sf = ((sf & 0xffffffff) ^ 0x80000000) - 0x80000000;
  memset (r, 0, sizeof (*r));
  if (exp != -128)
    {
      r->class = rvc_normal;
      sig = sf & 0x7fffffff;
      if (sf < 0)
 {
   r->sign = 1;
   if (sig)
     sig = -sig;
   else
     exp++;
 }
      if ((8 * 4) == 64)
 sig = sig << 1 << 31;
      sig |= ((unsigned long)1 << ((8 * 4) - 1));
      ((r)->uexp = ((unsigned int)(exp + 1) & (unsigned int)((1 << (32 - 5)) - 1)));
      r->sig[((128 + (8 * 4)) / (8 * 4))-1] = sig;
    }
}
const struct real_format c4x_single_format =
  {
    encode_c4x_single,
    decode_c4x_single,
    2,
    1,
    24,
    24,
    -126,
    128,
    -1,
    0,
    0,
    0,
    0,
    0
  };
const struct real_format c4x_extended_format =
  {
    encode_c4x_extended,
    decode_c4x_extended,
    2,
    1,
    32,
    32,
    -126,
    128,
    -1,
    0,
    0,
    0,
    0,
    0
  };
static void encode_internal (const struct real_format *fmt,
        long *, const struct real_value *);
static void decode_internal (const struct real_format *,
        struct real_value *, const long *);
static void
encode_internal (const struct real_format *fmt , long *buf,
   const struct real_value *r)
{
  memcpy (buf, r, sizeof (*r));
}
static void
decode_internal (const struct real_format *fmt ,
   struct real_value *r, const long *buf)
{
  memcpy (r, buf, sizeof (*r));
}
const struct real_format real_internal_format =
  {
    encode_internal,
    decode_internal,
    2,
    1,
    (128 + (8 * 4)) - 2,
    (128 + (8 * 4)) - 2,
    -((1 << ((32 - 5) - 1)) - 1),
    ((1 << ((32 - 5) - 1)) - 1),
    -1,
    1,
    1,
    0,
    1,
    1
  };
unsigned char
real_sqrt (struct real_value *r, enum machine_mode mode,
    const struct real_value *x)
{
  static struct real_value halfthree;
  static unsigned char init = 0;
  struct real_value h, t, i;
  int iter, exp;
  if (real_isnegzero (x))
    {
      *r = *x;
      return 0;
    }
  if (real_isneg (x))
    {
      get_canonical_qnan (r, 0);
      return 0;
    }
  if (real_isinf (x) || real_isnan (x))
    {
      *r = *x;
      return 0;
    }
  if (!init)
    {
      do_add (&halfthree, &dconst1, &dconsthalf, 0);
      init = 1;
    }
  exp = real_exponent (x);
  real_ldexp (&i, &dconst1, -exp/2);
  for (iter = 0; iter < 16; iter++)
    {
      do_multiply (&t, x, &i);
      do_multiply (&h, &t, &i);
      do_multiply (&t, &h, &dconsthalf);
      do_add (&h, &halfthree, &t, 1);
      do_multiply (&t, &i, &h);
      if (iter >= 6 && real_identical (&i, &t))
 break;
      i = t;
    }
  do_multiply (&t, x, &i);
  do_multiply (&h, &t, &i);
  do_add (&i, &dconst1, &h, 1);
  do_multiply (&h, &t, &i);
  do_multiply (&i, &dconsthalf, &h);
  do_add (&h, &t, &i, 0);
  real_convert (r, mode, &h);
  return 1;
}
unsigned char
real_powi (struct real_value *r, enum machine_mode mode,
    const struct real_value *x, long n)
{
  unsigned long bit;
  struct real_value t;
  unsigned char inexact = 0;
  unsigned char init = 0;
  unsigned char neg;
  int i;
  if (n == 0)
    {
      *r = dconst1;
      return 0;
    }
  else if (n < 0)
    {
      neg = 1;
      n = -n;
    }
  else
    neg = 0;
  t = *x;
  bit = (unsigned long) 1 << ((8 * 4) - 1);
  for (i = 0; i < (8 * 4); i++)
    {
      if (init)
 {
   inexact |= do_multiply (&t, &t, &t);
   if (n & bit)
     inexact |= do_multiply (&t, &t, x);
 }
      else if (n & bit)
 init = 1;
      bit >>= 1;
    }
  if (neg)
    inexact |= do_divide (&t, &dconst1, &t);
  real_convert (r, mode, &t);
  return inexact;
}
void
real_trunc (struct real_value *r, enum machine_mode mode,
     const struct real_value *x)
{
  do_fix_trunc (r, x);
  if (mode != VOIDmode)
    real_convert (r, mode, r);
}
void
real_floor (struct real_value *r, enum machine_mode mode,
     const struct real_value *x)
{
  struct real_value t;
  do_fix_trunc (&t, x);
  if (! real_identical (&t, x) && x->sign)
    do_add (&t, &t, &dconstm1, 0);
  if (mode != VOIDmode)
    real_convert (r, mode, &t);
}
void
real_ceil (struct real_value *r, enum machine_mode mode,
    const struct real_value *x)
{
  struct real_value t;
  do_fix_trunc (&t, x);
  if (! real_identical (&t, x) && ! x->sign)
    do_add (&t, &t, &dconst1, 0);
  if (mode != VOIDmode)
    real_convert (r, mode, &t);
}
void
real_round (struct real_value *r, enum machine_mode mode,
     const struct real_value *x)
{
  do_add (r, x, &dconsthalf, x->sign);
  do_fix_trunc (r, r);
  if (mode != VOIDmode)
    real_convert (r, mode, r);
}
void
real_copysign (struct real_value *r, const struct real_value *x)
{
  r->sign = x->sign;
}
static void validate_replace_rtx_1 (rtx *, rtx, rtx, rtx);
static rtx *find_single_use_1 (rtx, rtx *);
static void validate_replace_src_1 (rtx *, void *);
static rtx split_insn (rtx);
int volatile_ok;
struct recog_data recog_data;
struct operand_alternative recog_op_alt[30][30];
int which_alternative;
int reload_completed;
int epilogue_completed;
void
init_recog_no_volatile (void)
{
  volatile_ok = 0;
}
void
init_recog (void)
{
  volatile_ok = 1;
}
int
recog_memoized_1 (rtx insn)
{
  if ((((insn)->u.fld[6]).rtint) < 0)
    (((insn)->u.fld[6]).rtint) = recog ((((insn)->u.fld[5]).rtx1), insn, 0);
  return (((insn)->u.fld[6]).rtint);
}
int
check_asm_operands (rtx x)
{
  int noperands;
  rtx *operands;
  const char **constraints;
  int i;
  if (reload_completed)
    {
      extract_insn (make_insn_raw (x));
      constrain_operands (1);
      return which_alternative >= 0;
    }
  noperands = asm_noperands (x);
  if (noperands < 0)
    return 0;
  if (noperands == 0)
    return 1;
  operands = C_alloca(noperands * sizeof (rtx));
  constraints = C_alloca(noperands * sizeof (char *));
  decode_asm_operands (x, operands, ((void *)0), constraints, ((void *)0));
  for (i = 0; i < noperands; i++)
    {
      const char *c = constraints[i];
      if (c[0] == '%')
 c++;
      if ((_sch_istable[((unsigned char) c[0]) & 0xff] & (unsigned short)(_sch_isdigit)) && c[1] == '\0')
 c = constraints[c[0] - '0'];
      if (! asm_operand_ok (operands[i], c))
 return 0;
    }
  return 1;
}
typedef struct change_t
{
  rtx object;
  int old_code;
  rtx *loc;
  rtx old;
} change_t;
static change_t *changes;
static int changes_allocated;
static int num_changes = 0;
int
validate_change (rtx object, rtx *loc, rtx new, int in_group)
{
  rtx old = *loc;
  if (old == new || rtx_equal_p (old, new))
    return 1;
  if (in_group == 0 && num_changes != 0)
    abort ();
  *loc = new;
  if (num_changes >= changes_allocated)
    {
      if (changes_allocated == 0)
 changes_allocated = 30 * 5;
      else
 changes_allocated *= 2;
      changes = xrealloc (changes, sizeof (change_t) * changes_allocated);
    }
  changes[num_changes].object = object;
  changes[num_changes].loc = loc;
  changes[num_changes].old = old;
  if (object && !(((enum rtx_code) (object)->code) == MEM))
    {
      changes[num_changes].old_code = (((object)->u.fld[6]).rtint);
      (((object)->u.fld[6]).rtint) = -1;
    }
  num_changes++;
  if (in_group)
    return 1;
  else
    return apply_change_group ();
}
int
insn_invalid_p (rtx insn)
{
  rtx pat = (((insn)->u.fld[5]).rtx1);
  int num_clobbers = 0;
  int icode = recog (pat, insn,
       (((enum rtx_code) (pat)->code) == SET
        && ! reload_completed && ! reload_in_progress)
       ? &num_clobbers : 0);
  int is_asm = icode < 0 && asm_noperands ((((insn)->u.fld[5]).rtx1)) >= 0;
  if ((is_asm && ! check_asm_operands ((((insn)->u.fld[5]).rtx1)))
      || (!is_asm && icode < 0))
    return 1;
  if (num_clobbers > 0)
    {
      rtx newpat;
      if (added_clobbers_hard_reg_p (icode))
 return 1;
      newpat = gen_rtx_fmt_E (PARALLEL, (VOIDmode), (rtvec_alloc (num_clobbers + 1)));
      (((((newpat)->u.fld[0]).rtvec1))->elem[0]) = pat;
      add_clobbers (newpat, icode);
      (((insn)->u.fld[5]).rtx1) = pat = newpat;
    }
  if (reload_completed)
    {
      extract_insn (insn);
      if (! constrain_operands (1))
 return 1;
    }
  (((insn)->u.fld[6]).rtint) = icode;
  return 0;
}
int
num_changes_pending (void)
{
  return num_changes;
}
int
apply_change_group (void)
{
  int i;
  rtx last_validated = (rtx) 0;
  for (i = 0; i < num_changes; i++)
    {
      rtx object = changes[i].object;
      if (object == 0 || object == last_validated)
 continue;
      if ((((enum rtx_code) (object)->code) == MEM))
 {
   if (! memory_address_p (((enum machine_mode) (object)->mode), (((object)->u.fld[0]).rtx1)))
     break;
 }
      else if (insn_invalid_p (object))
 {
   rtx pat = (((object)->u.fld[5]).rtx1);
   if (((enum rtx_code) (pat)->code) == PARALLEL
       && ((enum rtx_code) ((((((pat)->u.fld[0]).rtvec1))->elem[(((((pat)->u.fld[0]).rtvec1))->num_elem) - 1]))->code) == CLOBBER
       && asm_noperands ((((object)->u.fld[5]).rtx1)) < 0)
     {
       rtx newpat;
       if ((((((pat)->u.fld[0]).rtvec1))->num_elem) == 2)
  newpat = (((((pat)->u.fld[0]).rtvec1))->elem[0]);
       else
  {
    int j;
    newpat
      = gen_rtx_fmt_E (PARALLEL, (VOIDmode), (rtvec_alloc ((((((pat)->u.fld[0]).rtvec1))->num_elem) - 1)))
                                        ;
    for (j = 0; j < (((((newpat)->u.fld[0]).rtvec1))->num_elem); j++)
      (((((newpat)->u.fld[0]).rtvec1))->elem[j]) = (((((pat)->u.fld[0]).rtvec1))->elem[j]);
  }
       validate_change (object, &(((object)->u.fld[5]).rtx1), newpat, 1);
       continue;
     }
   else if (((enum rtx_code) (pat)->code) == USE || ((enum rtx_code) (pat)->code) == CLOBBER)
     continue;
   else
     break;
 }
      last_validated = object;
    }
  if (i == num_changes)
    {
      basic_block bb;
      for (i = 0; i < num_changes; i++)
 if (changes[i].object
     && ((((enum rtx_code) (changes[i].object)->code) == INSN) || (((enum rtx_code) (changes[i].object)->code) == JUMP_INSN) || (((enum rtx_code) (changes[i].object)->code) == CALL_INSN))
     && (bb = (((changes[i].object)->u.fld[3]).bb)))
   bb->flags |= 1;
      num_changes = 0;
      return 1;
    }
  else
    {
      cancel_changes (0);
      return 0;
    }
}
int
num_validated_changes (void)
{
  return num_changes;
}
void
cancel_changes (int num)
{
  int i;
  for (i = num_changes - 1; i >= num; i--)
    {
      *changes[i].loc = changes[i].old;
      if (changes[i].object && !(((enum rtx_code) (changes[i].object)->code) == MEM))
 (((changes[i].object)->u.fld[6]).rtint) = changes[i].old_code;
    }
  num_changes = num;
}
static void
validate_replace_rtx_1 (rtx *loc, rtx from, rtx to, rtx object)
{
  int i, j;
  const char *fmt;
  rtx x = *loc;
  enum rtx_code code;
  enum machine_mode op0_mode = VOIDmode;
  int prev_changes = num_changes;
  rtx new;
  if (!x)
    return;
  code = ((enum rtx_code) (x)->code);
  fmt = (rtx_format[(int) (code)]);
  if (fmt[0] == 'e')
    op0_mode = ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode);
  if (x == from
      || ((((enum rtx_code) (x)->code) == REG) && (((enum rtx_code) (from)->code) == REG)
   && ((enum machine_mode) (x)->mode) == ((enum machine_mode) (from)->mode)
   && (((x)->u.fld[0]).rtuint) == (((from)->u.fld[0]).rtuint))
      || (((enum rtx_code) (x)->code) == ((enum rtx_code) (from)->code) && ((enum machine_mode) (x)->mode) == ((enum machine_mode) (from)->mode)
   && rtx_equal_p (x, from)))
    {
      validate_change (object, loc, to, 1);
      return;
    }
  if (((enum rtx_code) (x)->code) == PARALLEL)
    {
      for (j = (((((x)->u.fld[0]).rtvec1))->num_elem) - 1; j >= 0; j--)
 {
   if (j && ((enum rtx_code) ((((((x)->u.fld[0]).rtvec1))->elem[j]))->code) == SET
       && ((enum rtx_code) (((((((((x)->u.fld[0]).rtvec1))->elem[j]))->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
     {
       if ((((((((((((x)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[3]).rtvec1) !=
    (((((((((((x)->u.fld[0]).rtvec1))->elem[j]))->u.fld[1]).rtx1))->u.fld[3]).rtvec1))
  abort ();
       validate_replace_rtx_1 (&((((((((x)->u.fld[0]).rtvec1))->elem[j]))->u.fld[0]).rtx1),
          from, to, object);
     }
   else
     validate_replace_rtx_1 (&(((((x)->u.fld[0]).rtvec1))->elem[j]), from, to, object);
 }
    }
  else
    for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
      {
 if (fmt[i] == 'e')
   validate_replace_rtx_1 (&(((x)->u.fld[i]).rtx1), from, to, object);
 else if (fmt[i] == 'E')
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     validate_replace_rtx_1 (&(((((x)->u.fld[i]).rtvec1))->elem[j]), from, to, object);
      }
  if (num_changes == prev_changes)
    return;
  if (fmt[0] == 'e' && ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) != VOIDmode)
    op0_mode = ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode);
  if (((1 << (rtx_class[(int) (((enum rtx_code) (x)->code))])) & ((1 << RTX_COMM_ARITH) | (1 << RTX_COMM_COMPARE) | (1 << RTX_COMPARE)))
      && swap_commutative_operands_p ((((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1)))
    {
      validate_change (object, loc,
         gen_rtx_fmt_ee (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_COMM_ARITH) ? code
           : swap_condition (code),
           ((enum machine_mode) (x)->mode), (((x)->u.fld[1]).rtx1),
           (((x)->u.fld[0]).rtx1)), 1);
      x = *loc;
      code = ((enum rtx_code) (x)->code);
    }
  switch (code)
    {
    case PLUS:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT && (((x)->u.fld[1]).rtx1) == to)
 validate_change (object, loc,
    simplify_gen_binary
    (PLUS, ((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1)), 1);
      break;
    case MINUS:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_DOUBLE)
 validate_change (object, loc,
    simplify_gen_binary
    (PLUS, ((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1),
     simplify_gen_unary (NEG,
           ((enum machine_mode) (x)->mode), (((x)->u.fld[1]).rtx1),
           ((enum machine_mode) (x)->mode))), 1);
      break;
    case ZERO_EXTEND:
    case SIGN_EXTEND:
      if (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) == VOIDmode)
 {
   new = simplify_gen_unary (code, ((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1),
        op0_mode);
   if (!new)
     new = gen_rtx_fmt_e (CLOBBER, (((enum machine_mode) (x)->mode)), ((const_int_rtx[64])));
   validate_change (object, loc, new, 1);
 }
      break;
    case SUBREG:
      new = simplify_subreg (((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1), op0_mode,
        (((x)->u.fld[1]).rtuint));
      if (!new && ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) == VOIDmode)
 new = gen_rtx_fmt_e (CLOBBER, (((enum machine_mode) (x)->mode)), ((const_int_rtx[64])));
      if (new)
 validate_change (object, loc, new, 1);
      break;
    case ZERO_EXTRACT:
    case SIGN_EXTRACT:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM)
   && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && ((enum rtx_code) ((((x)->u.fld[2]).rtx1))->code) == CONST_INT
   && !mode_dependent_address_p (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))
   && !((((((x)->u.fld[0]).rtx1)))->volatil))
 {
   enum machine_mode wanted_mode = VOIDmode;
   enum machine_mode is_mode = ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode);
   int pos = (((((x)->u.fld[2]).rtx1))->u.hwint[0]);
   if (((enum rtx_code) (x)->code) == ZERO_EXTRACT)
     {
       enum machine_mode new_mode
  = mode_for_extraction (EP_extzv, 1);
       if (new_mode != MAX_MACHINE_MODE)
  wanted_mode = new_mode;
     }
   else if (((enum rtx_code) (x)->code) == SIGN_EXTRACT)
     {
       enum machine_mode new_mode
  = mode_for_extraction (EP_extv, 1);
       if (new_mode != MAX_MACHINE_MODE)
  wanted_mode = new_mode;
     }
   if (wanted_mode != VOIDmode
       && ((unsigned short) mode_size[wanted_mode]) < ((unsigned short) mode_size[is_mode]))
     {
       int offset = pos / 8;
       rtx newmem;
       if (0 != 0)
  offset =
    (((unsigned short) mode_size[is_mode]) - ((unsigned short) mode_size[wanted_mode]) -
     offset);
       pos %= ((unsigned short) (((unsigned short) mode_size[wanted_mode]) * 8));
       newmem = adjust_address_1 ((((x)->u.fld[0]).rtx1), wanted_mode, offset, 0, 1);
       validate_change (object, &(((x)->u.fld[2]).rtx1), gen_rtx_CONST_INT (VOIDmode, (long) (pos)), 1);
       validate_change (object, &(((x)->u.fld[0]).rtx1), newmem, 1);
     }
 }
      break;
    default:
      break;
    }
}
int
validate_replace_rtx_subexp (rtx from, rtx to, rtx insn, rtx *loc)
{
  validate_replace_rtx_1 (loc, from, to, insn);
  return apply_change_group ();
}
int
validate_replace_rtx (rtx from, rtx to, rtx insn)
{
  validate_replace_rtx_1 (&(((insn)->u.fld[5]).rtx1), from, to, insn);
  return apply_change_group ();
}
void
validate_replace_rtx_group (rtx from, rtx to, rtx insn)
{
  validate_replace_rtx_1 (&(((insn)->u.fld[5]).rtx1), from, to, insn);
}
struct validate_replace_src_data
{
  rtx from;
  rtx to;
  rtx insn;
};
static void
validate_replace_src_1 (rtx *x, void *data)
{
  struct validate_replace_src_data *d
    = (struct validate_replace_src_data *) data;
  validate_replace_rtx_1 (x, d->from, d->to, d->insn);
}
void
validate_replace_src_group (rtx from, rtx to, rtx insn)
{
  struct validate_replace_src_data d;
  d.from = from;
  d.to = to;
  d.insn = insn;
  note_uses (&(((insn)->u.fld[5]).rtx1), validate_replace_src_1, &d);
}
static rtx *
find_single_use_1 (rtx dest, rtx *loc)
{
  rtx x = *loc;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  rtx *result = 0;
  rtx *this_result;
  int i;
  const char *fmt;
  switch (code)
    {
    case CONST_INT:
    case CONST:
    case LABEL_REF:
    case SYMBOL_REF:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CLOBBER:
      return 0;
    case SET:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) != CC0
   && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) != PC
   && !(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && ! (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
  && (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG)
  && (((((unsigned short) mode_size[((enum machine_mode) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)])
        + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4))
      == ((((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)])
    + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4)))))
 break;
      return find_single_use_1 (dest, &(((x)->u.fld[1]).rtx1));
    case MEM:
    case SUBREG:
      return find_single_use_1 (dest, &(((x)->u.fld[0]).rtx1));
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   if (dest == (((x)->u.fld[i]).rtx1)
       || ((((enum rtx_code) (dest)->code) == REG) && (((enum rtx_code) ((((x)->u.fld[i]).rtx1))->code) == REG)
    && (((dest)->u.fld[0]).rtuint) == ((((((x)->u.fld[i]).rtx1))->u.fld[0]).rtuint)))
     this_result = loc;
   else
     this_result = find_single_use_1 (dest, &(((x)->u.fld[i]).rtx1));
   if (result == 0)
     result = this_result;
   else if (this_result)
     return 0;
 }
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     {
       if ((((((x)->u.fld[i]).rtvec1))->elem[j]) == dest
    || ((((enum rtx_code) (dest)->code) == REG)
        && (((enum rtx_code) ((((((x)->u.fld[i]).rtvec1))->elem[j]))->code) == REG)
        && ((((((((x)->u.fld[i]).rtvec1))->elem[j]))->u.fld[0]).rtuint) == (((dest)->u.fld[0]).rtuint)))
  this_result = loc;
       else
  this_result = find_single_use_1 (dest, &(((((x)->u.fld[i]).rtvec1))->elem[j]));
       if (result == 0)
  result = this_result;
       else if (this_result)
  return 0;
     }
 }
    }
  return result;
}
rtx *
find_single_use (rtx dest, rtx insn, rtx *ploc)
{
  rtx next;
  rtx *result;
  rtx link;
  if (reload_completed || reload_in_progress || !(((enum rtx_code) (dest)->code) == REG))
    return 0;
  for (next = next_nonnote_insn (insn);
       next != 0 && ((enum rtx_code) (next)->code) != CODE_LABEL;
       next = next_nonnote_insn (next))
    if (((((enum rtx_code) (next)->code) == INSN) || (((enum rtx_code) (next)->code) == JUMP_INSN) || (((enum rtx_code) (next)->code) == CALL_INSN)) && dead_or_set_p (next, dest))
      {
 for (link = (((next)->u.fld[7]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
   if ((((link)->u.fld[0]).rtx1) == insn)
     break;
 if (link)
   {
     result = find_single_use_1 (dest, &(((next)->u.fld[5]).rtx1));
     if (ploc)
       *ploc = next;
     return result;
   }
      }
  return 0;
}
int
general_operand (rtx op, enum machine_mode mode)
{
  enum rtx_code code = ((enum rtx_code) (op)->code);
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (op)->mode);
  if (((enum machine_mode) (op)->mode) == VOIDmode && mode != VOIDmode
      && mode_class[mode] != MODE_INT
      && mode_class[mode] != MODE_PARTIAL_INT)
    return 0;
  if (((enum rtx_code) (op)->code) == CONST_INT
      && mode != VOIDmode
      && trunc_int_for_mode (((op)->u.hwint[0]), mode) != ((op)->u.hwint[0]))
    return 0;
  if (((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR))
    return ((((enum machine_mode) (op)->mode) == VOIDmode || ((enum machine_mode) (op)->mode) == mode
      || mode == VOIDmode)
     && (! flag_pic || legitimate_pic_operand_p (op))
     && legitimate_constant_p (op));
  if (((enum machine_mode) (op)->mode) != mode)
    return 0;
  if (code == SUBREG)
    {
      rtx sub = (((op)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (sub)->code) == MEM)
   && ((unsigned short) mode_size[mode]) > ((unsigned short) mode_size[((enum machine_mode) (sub)->mode)]))
 return 0;
      if (!reload_completed && (((op)->u.fld[1]).rtuint) != 0
   && (((enum rtx_code) (sub)->code) == MEM))
 return 0;
      if (mode_class[((enum machine_mode) (op)->mode)] == MODE_FLOAT
   && ((unsigned short) mode_size[((enum machine_mode) (op)->mode)]) > ((unsigned short) mode_size[((enum machine_mode) (sub)->mode)]))
 return 0;
      op = sub;
      code = ((enum rtx_code) (op)->code);
    }
  if (code == REG)
    return ((((op)->u.fld[0]).rtuint) >= 53
     || (regclass_map[(((op)->u.fld[0]).rtuint)]) != NO_REGS);
  if (code == MEM)
    {
      rtx y = (((op)->u.fld[0]).rtx1);
      if (! volatile_ok && (((op))->volatil))
 return 0;
      mode = ((enum machine_mode) (op)->mode);
      do { if (legitimate_address_p ((mode), (y), 0)) goto win; } while (0);
    }
  return 0;
 win:
  return 1;
}
int
address_operand (rtx op, enum machine_mode mode)
{
  return memory_address_p (mode, op);
}
int
register_operand (rtx op, enum machine_mode mode)
{
  if (((enum machine_mode) (op)->mode) != mode && mode != VOIDmode)
    return 0;
  if (((enum rtx_code) (op)->code) == SUBREG)
    {
      rtx sub = (((op)->u.fld[0]).rtx1);
      if (! reload_completed && (((enum rtx_code) (sub)->code) == MEM))
 return general_operand (op, mode);
      if ((((enum rtx_code) (sub)->code) == REG)
   && (((sub)->u.fld[0]).rtuint) < 53
   && (((unsigned short) mode_size[mode]) < ((unsigned short) mode_size[((enum machine_mode) (sub)->mode)]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, ((regclass_map[(((sub)->u.fld[0]).rtuint)]))) || reg_classes_intersect_p (MMX_REGS, ((regclass_map[(((sub)->u.fld[0]).rtuint)]))) : ((unsigned short) mode_size[((enum machine_mode) (sub)->mode)]) != ((unsigned short) mode_size[mode]) ? reg_classes_intersect_p (FLOAT_REGS, ((regclass_map[(((sub)->u.fld[0]).rtuint)]))) : 0)
   && mode_class[((enum machine_mode) (sub)->mode)] != MODE_COMPLEX_INT
   && mode_class[((enum machine_mode) (sub)->mode)] != MODE_COMPLEX_FLOAT)
 return 0;
      if (mode_class[((enum machine_mode) (op)->mode)] == MODE_FLOAT
   && ((unsigned short) mode_size[((enum machine_mode) (op)->mode)]) > ((unsigned short) mode_size[((enum machine_mode) (sub)->mode)]))
 return 0;
      op = sub;
    }
  return ((((enum rtx_code) (op)->code) == REG)
   && ((((op)->u.fld[0]).rtuint) >= 53
       || (regclass_map[(((op)->u.fld[0]).rtuint)]) != NO_REGS));
}
int
pmode_register_operand (rtx op, enum machine_mode mode )
{
  return register_operand (op, (0 ? DImode : SImode));
}
int
scratch_operand (rtx op, enum machine_mode mode)
{
  if (((enum machine_mode) (op)->mode) != mode && mode != VOIDmode)
    return 0;
  return (((enum rtx_code) (op)->code) == SCRATCH
   || ((((enum rtx_code) (op)->code) == REG)
       && (((op)->u.fld[0]).rtuint) < 53));
}
int
immediate_operand (rtx op, enum machine_mode mode)
{
  if (((enum machine_mode) (op)->mode) == VOIDmode && mode != VOIDmode
      && mode_class[mode] != MODE_INT
      && mode_class[mode] != MODE_PARTIAL_INT)
    return 0;
  if (((enum rtx_code) (op)->code) == CONST_INT
      && mode != VOIDmode
      && trunc_int_for_mode (((op)->u.hwint[0]), mode) != ((op)->u.hwint[0]))
    return 0;
  return (((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR)
   && (((enum machine_mode) (op)->mode) == mode || mode == VOIDmode
       || ((enum machine_mode) (op)->mode) == VOIDmode)
   && (! flag_pic || legitimate_pic_operand_p (op))
   && legitimate_constant_p (op));
}
int
const_int_operand (rtx op, enum machine_mode mode)
{
  if (((enum rtx_code) (op)->code) != CONST_INT)
    return 0;
  if (mode != VOIDmode
      && trunc_int_for_mode (((op)->u.hwint[0]), mode) != ((op)->u.hwint[0]))
    return 0;
  return 1;
}
int
const_double_operand (rtx op, enum machine_mode mode)
{
  if (((enum machine_mode) (op)->mode) == VOIDmode && mode != VOIDmode
      && mode_class[mode] != MODE_INT
      && mode_class[mode] != MODE_PARTIAL_INT)
    return 0;
  return ((((enum rtx_code) (op)->code) == CONST_DOUBLE || ((enum rtx_code) (op)->code) == CONST_INT)
   && (mode == VOIDmode || ((enum machine_mode) (op)->mode) == mode
       || ((enum machine_mode) (op)->mode) == VOIDmode));
}
int
nonimmediate_operand (rtx op, enum machine_mode mode)
{
  return (general_operand (op, mode) && ! ((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR));
}
int
nonmemory_operand (rtx op, enum machine_mode mode)
{
  if (((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR))
    {
      if (((enum machine_mode) (op)->mode) == VOIDmode && mode != VOIDmode
   && mode_class[mode] != MODE_INT
   && mode_class[mode] != MODE_PARTIAL_INT)
 return 0;
      if (((enum rtx_code) (op)->code) == CONST_INT
   && mode != VOIDmode
   && trunc_int_for_mode (((op)->u.hwint[0]), mode) != ((op)->u.hwint[0]))
 return 0;
      return ((((enum machine_mode) (op)->mode) == VOIDmode || ((enum machine_mode) (op)->mode) == mode
        || mode == VOIDmode)
       && (! flag_pic || legitimate_pic_operand_p (op))
       && legitimate_constant_p (op));
    }
  if (((enum machine_mode) (op)->mode) != mode && mode != VOIDmode)
    return 0;
  if (((enum rtx_code) (op)->code) == SUBREG)
    {
      if (! reload_completed && (((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == MEM))
 return general_operand (op, mode);
      op = (((op)->u.fld[0]).rtx1);
    }
  return ((((enum rtx_code) (op)->code) == REG)
   && ((((op)->u.fld[0]).rtuint) >= 53
       || (regclass_map[(((op)->u.fld[0]).rtuint)]) != NO_REGS));
}
int
push_operand (rtx op, enum machine_mode mode)
{
  unsigned int rounded_size = ((unsigned short) mode_size[mode]);
  rounded_size = (0 ? (((rounded_size) + 7) & (-8)) : (((rounded_size) + 1) & (-2)));
  if (!(((enum rtx_code) (op)->code) == MEM))
    return 0;
  if (mode != VOIDmode && ((enum machine_mode) (op)->mode) != mode)
    return 0;
  op = (((op)->u.fld[0]).rtx1);
  if (rounded_size == ((unsigned short) mode_size[mode]))
    {
      if (((enum rtx_code) (op)->code) != PRE_DEC)
 return 0;
    }
  else
    {
      if (((enum rtx_code) (op)->code) != PRE_MODIFY
   || ((enum rtx_code) ((((op)->u.fld[1]).rtx1))->code) != PLUS
   || ((((((op)->u.fld[1]).rtx1))->u.fld[0]).rtx1) != (((op)->u.fld[0]).rtx1)
   || ((enum rtx_code) (((((((op)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) != CONST_INT
   || ((((((((op)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) != - (int) rounded_size
   )
 return 0;
    }
  return (((op)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]);
}
int
pop_operand (rtx op, enum machine_mode mode)
{
  if (!(((enum rtx_code) (op)->code) == MEM))
    return 0;
  if (mode != VOIDmode && ((enum machine_mode) (op)->mode) != mode)
    return 0;
  op = (((op)->u.fld[0]).rtx1);
  if (((enum rtx_code) (op)->code) != POST_INC)
    return 0;
  return (((op)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]);
}
int
memory_address_p (enum machine_mode mode , rtx addr)
{
  do { if (legitimate_address_p ((mode), (addr), 0)) goto win; } while (0);
  return 0;
 win:
  return 1;
}
int
memory_operand (rtx op, enum machine_mode mode)
{
  rtx inner;
  if (! reload_completed)
    return (((enum rtx_code) (op)->code) == MEM) && general_operand (op, mode);
  if (mode != VOIDmode && ((enum machine_mode) (op)->mode) != mode)
    return 0;
  inner = op;
  if (((enum rtx_code) (inner)->code) == SUBREG)
    inner = (((inner)->u.fld[0]).rtx1);
  return ((((enum rtx_code) (inner)->code) == MEM) && general_operand (op, mode));
}
int
indirect_operand (rtx op, enum machine_mode mode)
{
  if (! reload_completed
      && ((enum rtx_code) (op)->code) == SUBREG && (((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == MEM))
    {
      int offset = (((op)->u.fld[1]).rtuint);
      rtx inner = (((op)->u.fld[0]).rtx1);
      if (mode != VOIDmode && ((enum machine_mode) (op)->mode) != mode)
 return 0;
      return ((offset == 0 && general_operand ((((inner)->u.fld[0]).rtx1), (0 ? DImode : SImode)))
       || (((enum rtx_code) ((((inner)->u.fld[0]).rtx1))->code) == PLUS
    && ((enum rtx_code) (((((((inner)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
    && ((((((((inner)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) == -offset
    && general_operand (((((((inner)->u.fld[0]).rtx1))->u.fld[0]).rtx1), (0 ? DImode : SImode))));
    }
  return ((((enum rtx_code) (op)->code) == MEM)
   && memory_operand (op, mode)
   && general_operand ((((op)->u.fld[0]).rtx1), (0 ? DImode : SImode)));
}
int
comparison_operator (rtx op, enum machine_mode mode)
{
  return ((mode == VOIDmode || ((enum machine_mode) (op)->mode) == mode)
   && (((rtx_class[(int) (((enum rtx_code) (op)->code))]) & (~1)) == (RTX_COMPARE & (~1))));
}
int
asm_noperands (rtx body)
{
  switch (((enum rtx_code) (body)->code))
    {
    case ASM_OPERANDS:
      return (((((body)->u.fld[3]).rtvec1))->num_elem);
    case SET:
      if (((enum rtx_code) ((((body)->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
 return ((((((((body)->u.fld[1]).rtx1))->u.fld[3]).rtvec1))->num_elem) + 1;
      else
 return -1;
    case PARALLEL:
      if (((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[0]))->code) == SET
   && ((enum rtx_code) (((((((((body)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
 {
   int i;
   int n_sets;
   for (i = (((((body)->u.fld[0]).rtvec1))->num_elem); i > 0; i--)
     {
       if (((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[i - 1]))->code) == SET)
  break;
       if (((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[i - 1]))->code) != CLOBBER)
  return -1;
     }
   n_sets = i;
   for (i = 0; i < n_sets; i++)
     {
       rtx elt = (((((body)->u.fld[0]).rtvec1))->elem[i]);
       if (((enum rtx_code) (elt)->code) != SET)
  return -1;
       if (((enum rtx_code) ((((elt)->u.fld[1]).rtx1))->code) != ASM_OPERANDS)
  return -1;
       if (((((((elt)->u.fld[1]).rtx1))->u.fld[3]).rtvec1)
    != (((((((((((body)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[3]).rtvec1))
  return -1;
     }
   return ((((((((((((((body)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[3]).rtvec1))->num_elem)
    + n_sets);
 }
      else if (((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[0]))->code) == ASM_OPERANDS)
 {
   int i;
   for (i = (((((body)->u.fld[0]).rtvec1))->num_elem) - 1; i > 0; i--)
     if (((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[i]))->code) != CLOBBER)
       return -1;
   return ((((((((((body)->u.fld[0]).rtvec1))->elem[0]))->u.fld[3]).rtvec1))->num_elem);
 }
      else
 return -1;
    default:
      return -1;
    }
}
const char *
decode_asm_operands (rtx body, rtx *operands, rtx **operand_locs,
       const char **constraints, enum machine_mode *modes)
{
  int i;
  int noperands;
  const char *template = 0;
  if (((enum rtx_code) (body)->code) == SET && ((enum rtx_code) ((((body)->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
    {
      rtx asmop = (((body)->u.fld[1]).rtx1);
      noperands = (((((asmop)->u.fld[3]).rtvec1))->num_elem) + 1;
      for (i = 1; i < noperands; i++)
 {
   if (operand_locs)
     operand_locs[i] = &(((((asmop)->u.fld[3]).rtvec1))->elem[i - 1]);
   if (operands)
     operands[i] = (((((asmop)->u.fld[3]).rtvec1))->elem[i - 1]);
   if (constraints)
     constraints[i] = ((((((((asmop)->u.fld[4]).rtvec1))->elem[i - 1]))->u.fld[0]).rtstr);
   if (modes)
     modes[i] = ((enum machine_mode) ((((((asmop)->u.fld[4]).rtvec1))->elem[i - 1]))->mode);
 }
      if (operands)
 operands[0] = (((body)->u.fld[0]).rtx1);
      if (operand_locs)
 operand_locs[0] = &(((body)->u.fld[0]).rtx1);
      if (constraints)
 constraints[0] = (((asmop)->u.fld[1]).rtstr);
      if (modes)
 modes[0] = ((enum machine_mode) ((((body)->u.fld[0]).rtx1))->mode);
      template = (((asmop)->u.fld[0]).rtstr);
    }
  else if (((enum rtx_code) (body)->code) == ASM_OPERANDS)
    {
      rtx asmop = body;
      noperands = (((((asmop)->u.fld[3]).rtvec1))->num_elem);
      for (i = 0; i < noperands; i++)
 {
   if (operand_locs)
     operand_locs[i] = &(((((asmop)->u.fld[3]).rtvec1))->elem[i]);
   if (operands)
     operands[i] = (((((asmop)->u.fld[3]).rtvec1))->elem[i]);
   if (constraints)
     constraints[i] = ((((((((asmop)->u.fld[4]).rtvec1))->elem[i]))->u.fld[0]).rtstr);
   if (modes)
     modes[i] = ((enum machine_mode) ((((((asmop)->u.fld[4]).rtvec1))->elem[i]))->mode);
 }
      template = (((asmop)->u.fld[0]).rtstr);
    }
  else if (((enum rtx_code) (body)->code) == PARALLEL
    && ((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[0]))->code) == SET
    && ((enum rtx_code) (((((((((body)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
    {
      rtx asmop = ((((((((body)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1);
      int nparallel = (((((body)->u.fld[0]).rtvec1))->num_elem);
      int nin = (((((asmop)->u.fld[3]).rtvec1))->num_elem);
      int nout = 0;
      for (i = 0; i < nparallel; i++)
 {
   if (((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[i]))->code) == CLOBBER)
     break;
   if (operands)
     operands[i] = ((((((((body)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1);
   if (operand_locs)
     operand_locs[i] = &((((((((body)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1);
   if (constraints)
     constraints[i] = (((((((((((body)->u.fld[0]).rtvec1))->elem[i]))->u.fld[1]).rtx1))->u.fld[1]).rtstr);
   if (modes)
     modes[i] = ((enum machine_mode) (((((((((body)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1))->mode);
   nout++;
 }
      for (i = 0; i < nin; i++)
 {
   if (operand_locs)
     operand_locs[i + nout] = &(((((asmop)->u.fld[3]).rtvec1))->elem[i]);
   if (operands)
     operands[i + nout] = (((((asmop)->u.fld[3]).rtvec1))->elem[i]);
   if (constraints)
     constraints[i + nout] = ((((((((asmop)->u.fld[4]).rtvec1))->elem[i]))->u.fld[0]).rtstr);
   if (modes)
     modes[i + nout] = ((enum machine_mode) ((((((asmop)->u.fld[4]).rtvec1))->elem[i]))->mode);
 }
      template = (((asmop)->u.fld[0]).rtstr);
    }
  else if (((enum rtx_code) (body)->code) == PARALLEL
    && ((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[0]))->code) == ASM_OPERANDS)
    {
      rtx asmop = (((((body)->u.fld[0]).rtvec1))->elem[0]);
      int nin = (((((asmop)->u.fld[3]).rtvec1))->num_elem);
      for (i = 0; i < nin; i++)
 {
   if (operand_locs)
     operand_locs[i] = &(((((asmop)->u.fld[3]).rtvec1))->elem[i]);
   if (operands)
     operands[i] = (((((asmop)->u.fld[3]).rtvec1))->elem[i]);
   if (constraints)
     constraints[i] = ((((((((asmop)->u.fld[4]).rtvec1))->elem[i]))->u.fld[0]).rtstr);
   if (modes)
     modes[i] = ((enum machine_mode) ((((((asmop)->u.fld[4]).rtvec1))->elem[i]))->mode);
 }
      template = (((asmop)->u.fld[0]).rtstr);
    }
  return template;
}
int
asm_operand_ok (rtx op, const char *constraint)
{
  int result = 0;
  if (reload_completed)
    abort ();
  while (*constraint)
    {
      char c = *constraint;
      int len;
      switch (c)
 {
 case ',':
   constraint++;
   continue;
 case '=':
 case '+':
 case '*':
 case '%':
 case '!':
 case '#':
 case '&':
 case '?':
   break;
 case '0': case '1': case '2': case '3': case '4':
 case '5': case '6': case '7': case '8': case '9':
   do
     constraint++;
   while ((_sch_istable[(*constraint) & 0xff] & (unsigned short)(_sch_isdigit)));
   if (! result)
     result = -1;
   continue;
 case 'p':
   if (address_operand (op, VOIDmode))
     result = 1;
   break;
 case 'm':
 case 'V':
   if (memory_operand (op, VOIDmode))
     result = 1;
   break;
 case 'o':
   if (offsettable_nonstrict_memref_p (op))
     result = 1;
   break;
 case '<':
   if ((((enum rtx_code) (op)->code) == MEM)
       && (1
    || ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == PRE_DEC
    || ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == POST_DEC))
     result = 1;
   break;
 case '>':
   if ((((enum rtx_code) (op)->code) == MEM)
       && (1
    || ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == PRE_INC
    || ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == POST_INC))
     result = 1;
   break;
 case 'E':
 case 'F':
   if (((enum rtx_code) (op)->code) == CONST_DOUBLE
       || (((enum rtx_code) (op)->code) == CONST_VECTOR
    && mode_class[((enum machine_mode) (op)->mode)] == MODE_VECTOR_FLOAT))
     result = 1;
   break;
 case 'G':
   if (((enum rtx_code) (op)->code) == CONST_DOUBLE
       && (('G') == 'G' ? standard_80387_constant_p (op) : 0))
     result = 1;
   break;
 case 'H':
   if (((enum rtx_code) (op)->code) == CONST_DOUBLE
       && (('H') == 'G' ? standard_80387_constant_p (op) : 0))
     result = 1;
   break;
 case 's':
   if (((enum rtx_code) (op)->code) == CONST_INT
       || (((enum rtx_code) (op)->code) == CONST_DOUBLE
    && ((enum machine_mode) (op)->mode) == VOIDmode))
     break;
 case 'i':
   if (((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR)
       && (! flag_pic || legitimate_pic_operand_p (op))
       )
     result = 1;
   break;
 case 'n':
   if (((enum rtx_code) (op)->code) == CONST_INT
       || (((enum rtx_code) (op)->code) == CONST_DOUBLE
    && ((enum machine_mode) (op)->mode) == VOIDmode))
     result = 1;
   break;
 case 'I':
   if (((enum rtx_code) (op)->code) == CONST_INT
       && (('I') == 'I' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 31 : ('I') == 'J' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 63 : ('I') == 'K' ? (((op)->u.hwint[0])) >= -128 && (((op)->u.hwint[0])) <= 127 : ('I') == 'L' ? (((op)->u.hwint[0])) == 0xff || (((op)->u.hwint[0])) == 0xffff : ('I') == 'M' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 3 : ('I') == 'N' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 255 : 0))
     result = 1;
   break;
 case 'J':
   if (((enum rtx_code) (op)->code) == CONST_INT
       && (('J') == 'I' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 31 : ('J') == 'J' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 63 : ('J') == 'K' ? (((op)->u.hwint[0])) >= -128 && (((op)->u.hwint[0])) <= 127 : ('J') == 'L' ? (((op)->u.hwint[0])) == 0xff || (((op)->u.hwint[0])) == 0xffff : ('J') == 'M' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 3 : ('J') == 'N' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 255 : 0))
     result = 1;
   break;
 case 'K':
   if (((enum rtx_code) (op)->code) == CONST_INT
       && (('K') == 'I' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 31 : ('K') == 'J' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 63 : ('K') == 'K' ? (((op)->u.hwint[0])) >= -128 && (((op)->u.hwint[0])) <= 127 : ('K') == 'L' ? (((op)->u.hwint[0])) == 0xff || (((op)->u.hwint[0])) == 0xffff : ('K') == 'M' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 3 : ('K') == 'N' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 255 : 0))
     result = 1;
   break;
 case 'L':
   if (((enum rtx_code) (op)->code) == CONST_INT
       && (('L') == 'I' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 31 : ('L') == 'J' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 63 : ('L') == 'K' ? (((op)->u.hwint[0])) >= -128 && (((op)->u.hwint[0])) <= 127 : ('L') == 'L' ? (((op)->u.hwint[0])) == 0xff || (((op)->u.hwint[0])) == 0xffff : ('L') == 'M' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 3 : ('L') == 'N' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 255 : 0))
     result = 1;
   break;
 case 'M':
   if (((enum rtx_code) (op)->code) == CONST_INT
       && (('M') == 'I' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 31 : ('M') == 'J' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 63 : ('M') == 'K' ? (((op)->u.hwint[0])) >= -128 && (((op)->u.hwint[0])) <= 127 : ('M') == 'L' ? (((op)->u.hwint[0])) == 0xff || (((op)->u.hwint[0])) == 0xffff : ('M') == 'M' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 3 : ('M') == 'N' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 255 : 0))
     result = 1;
   break;
 case 'N':
   if (((enum rtx_code) (op)->code) == CONST_INT
       && (('N') == 'I' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 31 : ('N') == 'J' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 63 : ('N') == 'K' ? (((op)->u.hwint[0])) >= -128 && (((op)->u.hwint[0])) <= 127 : ('N') == 'L' ? (((op)->u.hwint[0])) == 0xff || (((op)->u.hwint[0])) == 0xffff : ('N') == 'M' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 3 : ('N') == 'N' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 255 : 0))
     result = 1;
   break;
 case 'O':
   if (((enum rtx_code) (op)->code) == CONST_INT
       && (('O') == 'I' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 31 : ('O') == 'J' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 63 : ('O') == 'K' ? (((op)->u.hwint[0])) >= -128 && (((op)->u.hwint[0])) <= 127 : ('O') == 'L' ? (((op)->u.hwint[0])) == 0xff || (((op)->u.hwint[0])) == 0xffff : ('O') == 'M' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 3 : ('O') == 'N' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 255 : 0))
     result = 1;
   break;
 case 'P':
   if (((enum rtx_code) (op)->code) == CONST_INT
       && (('P') == 'I' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 31 : ('P') == 'J' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 63 : ('P') == 'K' ? (((op)->u.hwint[0])) >= -128 && (((op)->u.hwint[0])) <= 127 : ('P') == 'L' ? (((op)->u.hwint[0])) == 0xff || (((op)->u.hwint[0])) == 0xffff : ('P') == 'M' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 3 : ('P') == 'N' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 255 : 0))
     result = 1;
   break;
 case 'X':
   result = 1;
   break;
 case 'g':
   if (general_operand (op, VOIDmode))
     result = 1;
   break;
 default:
   if (((c) == 'r' ? GENERAL_REGS : NO_REGS) != NO_REGS)
     {
     case 'r':
       if (((enum machine_mode) (op)->mode) == BLKmode)
  break;
       if (register_operand (op, VOIDmode))
  result = 1;
     }
   else if (((c) == 'e' ? x86_64_sign_extended_value (op) : (c) == 'Z' ? x86_64_zero_extended_value (op) : (c) == 'C' ? standard_sse_constant_p (op) : 0))
     result = 1;
   else if (0
     && memory_operand (op, VOIDmode))
     result = 1;
   else if (0
     && address_operand (op, VOIDmode))
     result = 1;
   break;
 }
      len = 1;
      do
 constraint++;
      while (--len && *constraint);
      if (len)
 return 0;
    }
  return result;
}
rtx *
find_constant_term_loc (rtx *p)
{
  rtx *tem;
  enum rtx_code code = ((enum rtx_code) (*p)->code);
  if (code == CONST_INT || code == SYMBOL_REF || code == LABEL_REF
      || code == CONST)
    return p;
  if (((enum rtx_code) (*p)->code) != PLUS)
    return 0;
  if ((((*p)->u.fld[0]).rtx1) && ((rtx_class[(int) (((enum rtx_code) ((((*p)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((*p)->u.fld[0]).rtx1))->code) == CONST_VECTOR)
      && (((*p)->u.fld[1]).rtx1) && ((rtx_class[(int) (((enum rtx_code) ((((*p)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((*p)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
    return p;
  if ((((*p)->u.fld[0]).rtx1) != 0)
    {
      tem = find_constant_term_loc (&(((*p)->u.fld[0]).rtx1));
      if (tem != 0)
 return tem;
    }
  if ((((*p)->u.fld[1]).rtx1) != 0)
    {
      tem = find_constant_term_loc (&(((*p)->u.fld[1]).rtx1));
      if (tem != 0)
 return tem;
    }
  return 0;
}
int
offsettable_memref_p (rtx op)
{
  return (((((enum rtx_code) (op)->code) == MEM))
   && offsettable_address_p (1, ((enum machine_mode) (op)->mode), (((op)->u.fld[0]).rtx1)));
}
int
offsettable_nonstrict_memref_p (rtx op)
{
  return (((((enum rtx_code) (op)->code) == MEM))
   && offsettable_address_p (0, ((enum machine_mode) (op)->mode), (((op)->u.fld[0]).rtx1)));
}
int
offsettable_address_p (int strictp, enum machine_mode mode, rtx y)
{
  enum rtx_code ycode = ((enum rtx_code) (y)->code);
  rtx z;
  rtx y1 = y;
  rtx *y2;
  int (*addressp) (enum machine_mode, rtx) =
    (strictp ? strict_memory_address_p : memory_address_p);
  unsigned int mode_sz = ((unsigned short) mode_size[mode]);
  if (constant_address_p (y))
    return 1;
  if (mode_dependent_address_p (y))
    return 0;
  if (mode_sz == 0)
    mode_sz = 128 / 8;
  if ((ycode == PLUS) && (y2 = find_constant_term_loc (&y1)))
    {
      int good;
      y1 = *y2;
      *y2 = plus_constant_wide ((*y2), (long) (mode_sz - 1));
      good = (*addressp) (QImode, y);
      *y2 = y1;
      return good;
    }
  if ((rtx_class[(int) (ycode)]) == RTX_AUTOINC)
    return 0;
  if (((enum rtx_code) (y)->code) == LO_SUM
      && mode != BLKmode
      && mode_sz <= get_mode_alignment (mode) / 8)
    z = gen_rtx_fmt_ee (LO_SUM, (((enum machine_mode) (y)->mode)), ((((y)->u.fld[0]).rtx1)), (plus_constant_wide (((((y)->u.fld[1]).rtx1)), (long) (mode_sz - 1))))
                                            ;
  else
    z = plus_constant_wide ((y), (long) (mode_sz - 1));
  return (*addressp) (QImode, z);
}
int
mode_dependent_address_p (rtx addr )
{
  do { if (((enum rtx_code) (addr)->code) == POST_INC || ((enum rtx_code) (addr)->code) == POST_DEC) goto win; } while (0);
  return 0;
 win:
  return 1;
}
void
extract_insn_cached (rtx insn)
{
  if (recog_data.insn == insn && (((insn)->u.fld[6]).rtint) >= 0)
    return;
  extract_insn (insn);
  recog_data.insn = insn;
}
void
extract_constrain_insn_cached (rtx insn)
{
  extract_insn_cached (insn);
  if (which_alternative == -1
      && !constrain_operands (reload_completed))
    _fatal_insn_not_found (insn, "gcc.c", 589852, "?");
}
int
constrain_operands_cached (int strict)
{
  if (which_alternative == -1)
    return constrain_operands (strict);
  else
    return 1;
}
void
extract_insn (rtx insn)
{
  int i;
  int icode;
  int noperands;
  rtx body = (((insn)->u.fld[5]).rtx1);
  recog_data.insn = ((void *)0);
  recog_data.n_operands = 0;
  recog_data.n_alternatives = 0;
  recog_data.n_dups = 0;
  which_alternative = -1;
  switch (((enum rtx_code) (body)->code))
    {
    case USE:
    case CLOBBER:
    case ASM_INPUT:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      return;
    case SET:
      if (((enum rtx_code) ((((body)->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
 goto asm_insn;
      else
 goto normal_insn;
    case PARALLEL:
      if ((((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[0]))->code) == SET
    && ((enum rtx_code) (((((((((body)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
   || ((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[0]))->code) == ASM_OPERANDS)
 goto asm_insn;
      else
 goto normal_insn;
    case ASM_OPERANDS:
    asm_insn:
      recog_data.n_operands = noperands = asm_noperands (body);
      if (noperands >= 0)
 {
   if (noperands > 30)
     abort ();
   decode_asm_operands (body, recog_data.operand,
          recog_data.operand_loc,
          recog_data.constraints,
          recog_data.operand_mode);
   if (noperands > 0)
     {
       const char *p = recog_data.constraints[0];
       recog_data.n_alternatives = 1;
       while (*p)
  recog_data.n_alternatives += (*p++ == ',');
     }
   break;
 }
      _fatal_insn_not_found (insn, "gcc.c", 589926, "?");
    default:
    normal_insn:
      icode = ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn));
      if (icode < 0)
 _fatal_insn_not_found (insn, "gcc.c", 589935, "?");
      recog_data.n_operands = noperands = insn_data[icode].n_operands;
      recog_data.n_alternatives = insn_data[icode].n_alternatives;
      recog_data.n_dups = insn_data[icode].n_dups;
      insn_extract (insn);
      for (i = 0; i < noperands; i++)
 {
   recog_data.constraints[i] = insn_data[icode].operand[i].constraint;
   recog_data.operand_mode[i] = insn_data[icode].operand[i].mode;
   if (recog_data.operand_mode[i] == VOIDmode)
     recog_data.operand_mode[i] = ((enum machine_mode) (recog_data.operand[i])->mode);
 }
    }
  for (i = 0; i < noperands; i++)
    recog_data.operand_type[i]
      = (recog_data.constraints[i][0] == '=' ? OP_OUT
  : recog_data.constraints[i][0] == '+' ? OP_INOUT
  : OP_IN);
  if (recog_data.n_alternatives > 30)
    abort ();
}
void
preprocess_constraints (void)
{
  int i;
  for (i = 0; i < recog_data.n_operands; i++)
    memset (recog_op_alt[i], 0, (recog_data.n_alternatives
     * sizeof (struct operand_alternative)));
  for (i = 0; i < recog_data.n_operands; i++)
    {
      int j;
      struct operand_alternative *op_alt;
      const char *p = recog_data.constraints[i];
      op_alt = recog_op_alt[i];
      for (j = 0; j < recog_data.n_alternatives; j++)
 {
   op_alt[j].class = NO_REGS;
   op_alt[j].constraint = p;
   op_alt[j].matches = -1;
   op_alt[j].matched = -1;
   if (*p == '\0' || *p == ',')
     {
       op_alt[j].anything_ok = 1;
       continue;
     }
   for (;;)
     {
       char c = *p;
       if (c == '#')
  do
    c = *++p;
  while (c != ',' && c != '\0');
       if (c == ',' || c == '\0')
  {
    p++;
    break;
  }
       switch (c)
  {
  case '=': case '+': case '*': case '%':
  case 'E': case 'F': case 'G': case 'H':
  case 's': case 'i': case 'n':
  case 'I': case 'J': case 'K': case 'L':
  case 'M': case 'N': case 'O': case 'P':
    break;
  case '?':
    op_alt[j].reject += 6;
    break;
  case '!':
    op_alt[j].reject += 600;
    break;
  case '&':
    op_alt[j].earlyclobber = 1;
    break;
  case '0': case '1': case '2': case '3': case '4':
  case '5': case '6': case '7': case '8': case '9':
    {
      char *end;
      op_alt[j].matches = strtoul (p, &end, 10);
      recog_op_alt[op_alt[j].matches][j].matched = i;
      p = end;
    }
    continue;
  case 'm':
    op_alt[j].memory_ok = 1;
    break;
  case '<':
    op_alt[j].decmem_ok = 1;
    break;
  case '>':
    op_alt[j].incmem_ok = 1;
    break;
  case 'V':
    op_alt[j].nonoffmem_ok = 1;
    break;
  case 'o':
    op_alt[j].offmem_ok = 1;
    break;
  case 'X':
    op_alt[j].anything_ok = 1;
    break;
  case 'p':
    op_alt[j].is_address = 1;
    op_alt[j].class = reg_class_subunion[(int) op_alt[j].class]
      [(int) GENERAL_REGS];
    break;
  case 'g': case 'r':
    op_alt[j].class = reg_class_subunion[(int) op_alt[j].class][(int) GENERAL_REGS];
    break;
  default:
    if (0)
      {
        op_alt[j].memory_ok = 1;
        break;
      }
    if (0)
      {
        op_alt[j].is_address = 1;
        op_alt[j].class
   = (reg_class_subunion
      [(int) op_alt[j].class]
      [(int) GENERAL_REGS]);
        break;
      }
    op_alt[j].class
      = (reg_class_subunion
         [(int) op_alt[j].class]
         [(int) (((unsigned char) c) == 'r' ? GENERAL_REGS : NO_REGS)]);
    break;
  }
       p += 1;
     }
 }
    }
}
struct funny_match
{
  int this, other;
};
int
constrain_operands (int strict)
{
  const char *constraints[30];
  int matching_operands[30];
  int earlyclobber[30];
  int c;
  struct funny_match funny_match[30];
  int funny_match_index;
  which_alternative = 0;
  if (recog_data.n_operands == 0 || recog_data.n_alternatives == 0)
    return 1;
  for (c = 0; c < recog_data.n_operands; c++)
    {
      constraints[c] = recog_data.constraints[c];
      matching_operands[c] = -1;
    }
  do
    {
      int opno;
      int lose = 0;
      funny_match_index = 0;
      for (opno = 0; opno < recog_data.n_operands; opno++)
 {
   rtx op = recog_data.operand[opno];
   enum machine_mode mode = ((enum machine_mode) (op)->mode);
   const char *p = constraints[opno];
   int offset = 0;
   int win = 0;
   int val;
   int len;
   earlyclobber[opno] = 0;
   if (((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_UNARY))
     op = (((op)->u.fld[0]).rtx1);
   if (((enum rtx_code) (op)->code) == SUBREG)
     {
       if ((((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == REG)
    && ((((((op)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
  offset = subreg_regno_offset (((((((op)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
           ((enum machine_mode) ((((op)->u.fld[0]).rtx1))->mode),
           (((op)->u.fld[1]).rtuint),
           ((enum machine_mode) (op)->mode));
       op = (((op)->u.fld[0]).rtx1);
     }
   if (*p == 0 || *p == ',')
     win = 1;
   do
     switch (c = *p, len = 1, c)
       {
       case '\0':
  len = 0;
  break;
       case ',':
  c = '\0';
  break;
       case '?': case '!': case '*': case '%':
       case '=': case '+':
  break;
       case '#':
  do
    p++;
  while (*p && *p != ',');
  len = 0;
  break;
       case '&':
  earlyclobber[opno] = 1;
  break;
       case '0': case '1': case '2': case '3': case '4':
       case '5': case '6': case '7': case '8': case '9':
  {
    char *end;
    int match;
    match = strtoul (p, &end, 10);
    p = end;
    if (strict < 0)
      val = 1;
    else
      {
        rtx op1 = recog_data.operand[match];
        rtx op2 = recog_data.operand[opno];
        if (((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_UNARY))
   op1 = (((op1)->u.fld[0]).rtx1);
        if (((rtx_class[(int) (((enum rtx_code) (op2)->code))]) == RTX_UNARY))
   op2 = (((op2)->u.fld[0]).rtx1);
        val = operands_match_p (op1, op2);
      }
    matching_operands[opno] = match;
    matching_operands[match] = opno;
    if (val != 0)
      win = 1;
    if (val == 2 && strict > 0)
      {
        funny_match[funny_match_index].this = opno;
        funny_match[funny_match_index++].other = match;
      }
  }
  len = 0;
  break;
       case 'p':
  if (strict <= 0
      || (strict_memory_address_p (recog_data.operand_mode[opno],
       op)))
    win = 1;
  break;
       case 'g':
  if (strict < 0
      || GENERAL_REGS == ALL_REGS
      || !(((enum rtx_code) (op)->code) == REG)
      || (reload_in_progress
   && (((op)->u.fld[0]).rtuint) >= 53)
      || reg_fits_class_p (op, GENERAL_REGS, offset, mode))
    win = 1;
  break;
       case 'X':
  win = 1;
  break;
       case 'm':
  if ((((enum rtx_code) (op)->code) == MEM))
    {
      if (strict > 0
   && !strict_memory_address_p (((enum machine_mode) (op)->mode),
           (((op)->u.fld[0]).rtx1)))
        break;
      if (strict == 0
   && !memory_address_p (((enum machine_mode) (op)->mode), (((op)->u.fld[0]).rtx1)))
        break;
      win = 1;
    }
  else if (strict < 0 && ((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR))
    win = 1;
  else if (reload_in_progress && (((enum rtx_code) (op)->code) == REG)
    && (((op)->u.fld[0]).rtuint) >= 53)
    win = 1;
  break;
       case '<':
  if ((((enum rtx_code) (op)->code) == MEM)
      && (((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == PRE_DEC
   || ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == POST_DEC))
    win = 1;
  break;
       case '>':
  if ((((enum rtx_code) (op)->code) == MEM)
      && (((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == PRE_INC
   || ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == POST_INC))
    win = 1;
  break;
       case 'E':
       case 'F':
  if (((enum rtx_code) (op)->code) == CONST_DOUBLE
      || (((enum rtx_code) (op)->code) == CONST_VECTOR
   && mode_class[((enum machine_mode) (op)->mode)] == MODE_VECTOR_FLOAT))
    win = 1;
  break;
       case 'G':
       case 'H':
  if (((enum rtx_code) (op)->code) == CONST_DOUBLE
      && ((c) == 'G' ? standard_80387_constant_p (op) : 0))
    win = 1;
  break;
       case 's':
  if (((enum rtx_code) (op)->code) == CONST_INT
      || (((enum rtx_code) (op)->code) == CONST_DOUBLE
   && ((enum machine_mode) (op)->mode) == VOIDmode))
    break;
       case 'i':
  if (((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR))
    win = 1;
  break;
       case 'n':
  if (((enum rtx_code) (op)->code) == CONST_INT
      || (((enum rtx_code) (op)->code) == CONST_DOUBLE
   && ((enum machine_mode) (op)->mode) == VOIDmode))
    win = 1;
  break;
       case 'I':
       case 'J':
       case 'K':
       case 'L':
       case 'M':
       case 'N':
       case 'O':
       case 'P':
  if (((enum rtx_code) (op)->code) == CONST_INT
      && ((c) == 'I' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 31 : (c) == 'J' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 63 : (c) == 'K' ? (((op)->u.hwint[0])) >= -128 && (((op)->u.hwint[0])) <= 127 : (c) == 'L' ? (((op)->u.hwint[0])) == 0xff || (((op)->u.hwint[0])) == 0xffff : (c) == 'M' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 3 : (c) == 'N' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 255 : 0))
    win = 1;
  break;
       case 'V':
  if ((((enum rtx_code) (op)->code) == MEM)
      && ((strict > 0 && ! offsettable_memref_p (op))
   || (strict < 0
       && !(((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR) || (((enum rtx_code) (op)->code) == MEM)))
   || (reload_in_progress
       && !((((enum rtx_code) (op)->code) == REG)
     && (((op)->u.fld[0]).rtuint) >= 53))))
    win = 1;
  break;
       case 'o':
  if ((strict > 0 && offsettable_memref_p (op))
      || (strict == 0 && offsettable_nonstrict_memref_p (op))
      || (strict < 0
   && (((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR) || (((enum rtx_code) (op)->code) == MEM)))
      || (reload_in_progress && (((enum rtx_code) (op)->code) == REG)
   && (((op)->u.fld[0]).rtuint) >= 53))
    win = 1;
  break;
       default:
  {
    enum reg_class class;
    class = (c == 'r'
      ? GENERAL_REGS : ((c) == 'r' ? GENERAL_REGS : NO_REGS));
    if (class != NO_REGS)
      {
        if (strict < 0
     || (strict == 0
         && (((enum rtx_code) (op)->code) == REG)
         && (((op)->u.fld[0]).rtuint) >= 53)
     || (strict == 0 && ((enum rtx_code) (op)->code) == SCRATCH)
     || ((((enum rtx_code) (op)->code) == REG)
         && reg_fits_class_p (op, class, offset, mode)))
          win = 1;
      }
    else if (((c) == 'e' ? x86_64_sign_extended_value (op) : (c) == 'Z' ? x86_64_zero_extended_value (op) : (c) == 'C' ? standard_sse_constant_p (op) : 0))
      win = 1;
    else if (0
      && ((strict < 0 && (((enum rtx_code) (op)->code) == MEM))
          || (strict < 0 && ((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR))
          || (reload_in_progress && (((enum rtx_code) (op)->code) == REG)
       && (((op)->u.fld[0]).rtuint) >= 53)))
      win = 1;
    else if (0
      && strict < 0)
      win = 1;
    break;
  }
       }
   while (p += len, c);
   constraints[opno] = p;
   if (! win)
     lose = 1;
 }
      if (! lose)
 {
   int opno, eopno;
   if (strict > 0)
     for (eopno = 0; eopno < recog_data.n_operands; eopno++)
       if (earlyclobber[eopno]
    && (((enum rtx_code) (recog_data.operand[eopno])->code) == REG))
  for (opno = 0; opno < recog_data.n_operands; opno++)
    if (((((enum rtx_code) (recog_data.operand[opno])->code) == MEM)
         || recog_data.operand_type[opno] != OP_OUT)
        && opno != eopno
        && *recog_data.constraints[opno] != 0
        && ! (matching_operands[opno] == eopno
       && operands_match_p (recog_data.operand[opno],
       recog_data.operand[eopno]))
        && ! safe_from_earlyclobber (recog_data.operand[opno],
         recog_data.operand[eopno]))
      lose = 1;
   if (! lose)
     {
       while (--funny_match_index >= 0)
  {
    recog_data.operand[funny_match[funny_match_index].other]
      = recog_data.operand[funny_match[funny_match_index].this];
  }
       return 1;
     }
 }
      which_alternative++;
    }
  while (which_alternative < recog_data.n_alternatives);
  which_alternative = -1;
  if (strict == 0)
    return constrain_operands (-1);
  else
    return 0;
}
int
reg_fits_class_p (rtx operand, enum reg_class class, int offset,
    enum machine_mode mode)
{
  int regno = (((operand)->u.fld[0]).rtuint);
  if (regno < 53
      && (!!((reg_class_contents[(int) class])[(regno + offset) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + offset) % ((unsigned) (8 * 4))))))
                      )
    {
      int sr;
      regno += offset;
      for (sr = hard_regno_nregs[regno][mode] - 1;
    sr > 0; sr--)
 if (! (!!((reg_class_contents[(int) class])[(regno + sr) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + sr) % ((unsigned) (8 * 4))))))
                )
   break;
      return sr == 0;
    }
  return 0;
}
static rtx
split_insn (rtx insn)
{
  rtx first = (((insn)->u.fld[1]).rtx1);
  rtx last = try_split ((((insn)->u.fld[5]).rtx1), insn, 1);
  if (last == insn)
    return (rtx) 0;
  (((insn)->code = (NOTE)), (((insn)->u.fld[4]).rtstr) = 0, (((insn)->u.fld[5]).rtint) = NOTE_INSN_DELETED);
  if (reload_completed && first != last)
    {
      first = (((first)->u.fld[2]).rtx1);
      for (;;)
 {
   if (((((enum rtx_code) (first)->code) == INSN) || (((enum rtx_code) (first)->code) == JUMP_INSN) || (((enum rtx_code) (first)->code) == CALL_INSN)))
     cleanup_subreg_operands (first);
   if (first == last)
     break;
   first = (((first)->u.fld[2]).rtx1);
 }
    }
  return last;
}
void
split_all_insns (int upd_life)
{
  sbitmap blocks;
  unsigned char changed;
  basic_block bb;
  blocks = sbitmap_alloc (last_basic_block);
  sbitmap_zero (blocks);
  changed = 0;
  for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
    {
      rtx insn, next;
      unsigned char finish = 0;
      for (insn = (bb)->head_; !finish ; insn = next)
 {
   next = (((insn)->u.fld[2]).rtx1);
   finish = (insn == (bb)->end_);
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
       if (set && set_noop_p (set))
  {
    if (reload_completed)
      {
        if (find_reg_note (insn, REG_UNUSED, (rtx) 0))
   {
     ((blocks)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
     changed = 1;
   }
        delete_insn_and_edges (insn);
      }
  }
       else
  {
    rtx last = split_insn (insn);
    if (last)
      {
        while (((enum rtx_code) (last)->code) == BARRIER)
   last = (((last)->u.fld[1]).rtx1);
        ((blocks)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
        changed = 1;
      }
  }
     }
 }
    }
  if (changed)
    {
      int old_last_basic_block = last_basic_block;
      find_many_sub_basic_blocks (blocks);
      if (old_last_basic_block != last_basic_block && upd_life)
 blocks = sbitmap_resize (blocks, last_basic_block, 1);
    }
  if (changed && upd_life)
    update_life_info (blocks, UPDATE_LIFE_GLOBAL_RM_NOTES,
        1);
  free(blocks);
}
void
split_all_insns_noflow (void)
{
  rtx next, insn;
  for (insn = get_insns (); insn; insn = next)
    {
      next = (((insn)->u.fld[2]).rtx1);
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
   if (set && set_noop_p (set))
     {
       if (reload_completed)
  delete_insn_and_edges (insn);
     }
   else
     split_insn (insn);
 }
    }
}
struct peep2_insn_data
{
  rtx insn;
  regset live_before;
};
static struct peep2_insn_data peep2_insn_data[4 + 1];
static int peep2_current;
rtx
peep2_next_insn (int n)
{
  if (n >= 4 + 1)
    abort ();
  n += peep2_current;
  if (n >= 4 + 1)
    n -= 4 + 1;
  if (peep2_insn_data[n].insn == (global_rtl[GR_PC]))
    return (rtx) 0;
  return peep2_insn_data[n].insn;
}
int
peep2_regno_dead_p (int ofs, int regno)
{
  if (ofs >= 4 + 1)
    abort ();
  ofs += peep2_current;
  if (ofs >= 4 + 1)
    ofs -= 4 + 1;
  if (peep2_insn_data[ofs].insn == (rtx) 0)
    abort ();
  return ! bitmap_bit_p (peep2_insn_data[ofs].live_before, regno);
}
int
peep2_reg_dead_p (int ofs, rtx reg)
{
  int regno, n;
  if (ofs >= 4 + 1)
    abort ();
  ofs += peep2_current;
  if (ofs >= 4 + 1)
    ofs -= 4 + 1;
  if (peep2_insn_data[ofs].insn == (rtx) 0)
    abort ();
  regno = (((reg)->u.fld[0]).rtuint);
  n = hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)];
  while (--n >= 0)
    if (bitmap_bit_p (peep2_insn_data[ofs].live_before, regno + n))
      return 0;
  return 1;
}
rtx
peep2_find_free_register (int from, int to, const char *class_str,
     enum machine_mode mode, HARD_REG_SET *reg_set)
{
  static int search_ofs;
  enum reg_class class;
  HARD_REG_SET live;
  int i;
  if (from >= 4 + 1 || to >= 4 + 1)
    abort ();
  from += peep2_current;
  if (from >= 4 + 1)
    from -= 4 + 1;
  to += peep2_current;
  if (to >= 4 + 1)
    to -= 4 + 1;
  if (peep2_insn_data[from].insn == (rtx) 0)
    abort ();
  do { do { HARD_REG_ELT_TYPE *scan_tp_ = (live); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&live, peep2_insn_data[from].live_before); } while (0);
  while (from != to)
    {
      HARD_REG_SET this_live;
      if (++from >= 4 + 1)
 from = 0;
      if (peep2_insn_data[from].insn == (rtx) 0)
 abort ();
      do { do { HARD_REG_ELT_TYPE *scan_tp_ = (this_live); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&this_live, peep2_insn_data[from].live_before); } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (live), *scan_fp_ = (this_live); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
    }
  class = (class_str[0] == 'r' ? GENERAL_REGS
    : ((class_str[0]) == 'r' ? GENERAL_REGS : NO_REGS));
  for (i = 0; i < 53; i++)
    {
      int raw_regno, regno, success, j;
      raw_regno = search_ofs + i;
      if (raw_regno >= 53)
 raw_regno -= 53;
      regno = reg_alloc_order[raw_regno];
      if (fixed_regs[regno])
 continue;
      if (! (!!((reg_class_contents[class])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
 continue;
      if (! ix86_hard_regno_mode_ok ((regno), (mode)))
 continue;
      if (! call_used_regs[regno] && ! regs_ever_live[regno])
 continue;
      if ((regno == 20 || regno == 6)
   && (! reload_completed || frame_pointer_needed))
 continue;
      success = 1;
      for (j = hard_regno_nregs[regno][mode] - 1; j >= 0; j--)
 {
   if ((!!((*reg_set1)[(regno + j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + j) % ((unsigned) (8 * 4))))))
       || (!!((live)[(regno + j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + j) % ((unsigned) (8 * 4)))))))
     {
       success = 0;
       break;
     }
 }
      if (success)
 {
   for (j = hard_regno_nregs[regno][mode] - 1; j >= 0; j--)
     ((*reg_set1)[(regno + j) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno + j) % ((unsigned) (8 * 4))));
   if (++raw_regno >= 53)
     raw_regno = 0;
   search_ofs = raw_regno;
   return gen_rtx_REG (mode, regno);
 }
    }
  search_ofs = 0;
  return (rtx) 0;
}
void
peephole2_optimize (FILE *dump_file )
{
  regset_head rs_heads[4 + 2];
  rtx insn, prev;
  regset live;
  int i;
  basic_block bb;
  sbitmap blocks;
  unsigned char changed;
  unsigned char do_cleanup_cfg = 0;
  unsigned char do_rebuild_jump_labels = 0;
  for (i = 0; i < 4 + 1; ++i)
    peep2_insn_data[i].live_before = bitmap_initialize (&rs_heads[i], 1);
  live = bitmap_initialize (&rs_heads[i], 1);
  blocks = sbitmap_alloc (last_basic_block);
  sbitmap_zero (blocks);
  changed = 0;
  for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
    {
      struct propagate_block_info *pbi;
      for (i = 0; i < 4; ++i)
 peep2_insn_data[i].insn = (rtx) 0;
      peep2_insn_data[4].insn = (global_rtl[GR_PC]);
      peep2_current = 4;
      bitmap_copy (live, bb->global_live_at_end);
      bitmap_copy (peep2_insn_data[4].live_before, live);
      pbi = init_propagate_block_info (bb, live, ((void *)0), ((void *)0), 0);
      for (insn = (bb)->end_; ; insn = prev)
 {
   prev = (((insn)->u.fld[1]).rtx1);
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       rtx try, before_try, x;
       int match_len;
       rtx note;
       unsigned char was_call = 0;
       if (--peep2_current < 0)
  peep2_current = 4;
       peep2_insn_data[peep2_current].insn = insn;
       propagate_one_insn (pbi, insn);
       bitmap_copy (peep2_insn_data[peep2_current].live_before, live);
       try = peephole2_insns ((((insn)->u.fld[5]).rtx1), insn, &match_len);
       if (try != ((void *)0))
  {
    for (i = 0; i <= match_len; ++i)
      {
        int j;
        rtx old_insn, new_insn, note;
        j = i + peep2_current;
        if (j >= 4 + 1)
   j -= 4 + 1;
        old_insn = peep2_insn_data[j].insn;
        if (((enum rtx_code) (old_insn)->code) != CALL_INSN)
   continue;
        was_call = 1;
        new_insn = try;
        while (new_insn != (rtx) 0)
   {
     if (((enum rtx_code) (new_insn)->code) == CALL_INSN)
       break;
     new_insn = (((new_insn)->u.fld[2]).rtx1);
   }
        if (new_insn == (rtx) 0)
   abort ();
        (((new_insn)->u.fld[9]).rtx1)
   = (((old_insn)->u.fld[9]).rtx1);
        for (note = (((old_insn)->u.fld[8]).rtx1);
      note;
      note = (((note)->u.fld[1]).rtx1))
   switch (((enum reg_note) ((enum machine_mode) (note)->mode)))
     {
     case REG_NORETURN:
     case REG_SETJMP:
     case REG_ALWAYS_RETURN:
       (((new_insn)->u.fld[8]).rtx1)
         = gen_rtx_fmt_ee (EXPR_LIST, (((enum reg_note) ((enum machine_mode) (note)->mode))), ((((note)->u.fld[0]).rtx1)), ((((new_insn)->u.fld[8]).rtx1)))
                              ;
     default:
       break;
     }
        while (++i <= match_len)
   {
     j = i + peep2_current;
     if (j >= 4 + 1)
       j -= 4 + 1;
     old_insn = peep2_insn_data[j].insn;
     if (((enum rtx_code) (old_insn)->code) == CALL_INSN)
       abort ();
   }
        break;
      }
    i = match_len + peep2_current;
    if (i >= 4 + 1)
      i -= 4 + 1;
    note = find_reg_note (peep2_insn_data[i].insn,
     REG_EH_REGION, (rtx) 0);
    try = emit_insn_after_setloc (try, peep2_insn_data[i].insn,
             (((peep2_insn_data[i].insn)->u.fld[4]).rtint));
    before_try = (((insn)->u.fld[1]).rtx1);
    delete_insn_chain (insn, peep2_insn_data[i].insn);
    if (note || (was_call && (cfun->x_nonlocal_goto_handler_labels)))
      {
        edge eh_edge;
        for (eh_edge = bb->succ; eh_edge
      ; eh_edge = eh_edge->succ_next)
   if (eh_edge->flags & (8 | 4))
     break;
        for (x = try ; x != before_try ; x = (((x)->u.fld[1]).rtx1))
   if (((enum rtx_code) (x)->code) == CALL_INSN
       || (flag_non_call_exceptions
    && may_trap_p ((((x)->u.fld[5]).rtx1))
    && !find_reg_note (x, REG_EH_REGION, ((void *)0))))
     {
       if (note)
         (((x)->u.fld[8]).rtx1)
           = gen_rtx_fmt_ee (EXPR_LIST, (REG_EH_REGION), ((((note)->u.fld[0]).rtx1)), ((((x)->u.fld[8]).rtx1)))
                         ;
       if (x != (bb)->end_ && eh_edge)
         {
    edge nfte, nehe;
    int flags;
    nfte = split_block (bb, x);
    flags = (eh_edge->flags
      & (8 | 2));
    if (((enum rtx_code) (x)->code) == CALL_INSN)
      flags |= 4;
    nehe = make_edge (nfte->src, eh_edge->dest,
        flags);
    nehe->probability = eh_edge->probability;
    nfte->probability
      = 10000 - nehe->probability;
           do_cleanup_cfg |= purge_dead_edges (nfte->dest);
    ((blocks)->elms [(nfte->dest->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (nfte->dest->index) % ((unsigned) (8 * 4)));
    changed = 1;
    bb = nfte->src;
    eh_edge = nehe;
         }
     }
        do_cleanup_cfg |= purge_dead_edges (bb);
      }
    ((blocks)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
    changed = 1;
    for (i = 0; i < 4 + 1; ++i)
      peep2_insn_data[i].insn = (rtx) 0;
    peep2_insn_data[peep2_current].insn = (global_rtl[GR_PC]);
    for (x = try; x != before_try; x = (((x)->u.fld[1]).rtx1))
      if (((enum rtx_code) (x)->code) == JUMP_INSN)
        {
          do_rebuild_jump_labels = 1;
   break;
        }
  }
     }
   if (insn == (bb)->head_)
     break;
 }
      free_propagate_block_info (pbi);
    }
  for (i = 0; i < 4 + 1; ++i)
    do { if (peep2_insn_data[i].live_before) { bitmap_clear (peep2_insn_data[i].live_before); (peep2_insn_data[i].live_before) = 0; } } while (0);
  do { if (live) { bitmap_clear (live); (live) = 0; } } while (0);
  if (do_rebuild_jump_labels)
    rebuild_jump_labels (get_insns ());
  if (do_cleanup_cfg)
    {
      cleanup_cfg (0);
      update_life_info (0, UPDATE_LIFE_GLOBAL_RM_NOTES, 1);
    }
  else
    {
      count_or_remove_death_notes (blocks, 1);
      update_life_info (blocks, UPDATE_LIFE_LOCAL, 1);
    }
  free(blocks);
}
int
store_data_bypass_p (rtx out_insn, rtx in_insn)
{
  rtx out_set, in_set;
  in_set = (((((enum rtx_code) (in_insn)->code) == INSN) || (((enum rtx_code) (in_insn)->code) == JUMP_INSN) || (((enum rtx_code) (in_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((in_insn)->u.fld[5]).rtx1))->code) == SET ? (((in_insn)->u.fld[5]).rtx1) : single_set_2 (in_insn, (((in_insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (! in_set)
    abort ();
  if (!(((enum rtx_code) ((((in_set)->u.fld[0]).rtx1))->code) == MEM))
    return 0;
  out_set = (((((enum rtx_code) (out_insn)->code) == INSN) || (((enum rtx_code) (out_insn)->code) == JUMP_INSN) || (((enum rtx_code) (out_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((out_insn)->u.fld[5]).rtx1))->code) == SET ? (((out_insn)->u.fld[5]).rtx1) : single_set_2 (out_insn, (((out_insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (out_set)
    {
      if (reg_mentioned_p ((((out_set)->u.fld[0]).rtx1), (((in_set)->u.fld[0]).rtx1)))
 return 0;
    }
  else
    {
      rtx out_pat;
      int i;
      out_pat = (((out_insn)->u.fld[5]).rtx1);
      if (((enum rtx_code) (out_pat)->code) != PARALLEL)
 abort ();
      for (i = 0; i < (((((out_pat)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx exp = (((((out_pat)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (exp)->code) == CLOBBER)
     continue;
   if (((enum rtx_code) (exp)->code) != SET)
     abort ();
   if (reg_mentioned_p ((((exp)->u.fld[0]).rtx1), (((in_set)->u.fld[0]).rtx1)))
     return 0;
 }
    }
  return 1;
}
int
if_test_bypass_p (rtx out_insn, rtx in_insn)
{
  rtx out_set, in_set;
  in_set = (((((enum rtx_code) (in_insn)->code) == INSN) || (((enum rtx_code) (in_insn)->code) == JUMP_INSN) || (((enum rtx_code) (in_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((in_insn)->u.fld[5]).rtx1))->code) == SET ? (((in_insn)->u.fld[5]).rtx1) : single_set_2 (in_insn, (((in_insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (! in_set)
    {
      if (((enum rtx_code) (in_insn)->code) == JUMP_INSN || ((enum rtx_code) (in_insn)->code) == CALL_INSN)
 return 0;
      abort ();
    }
  if (((enum rtx_code) ((((in_set)->u.fld[1]).rtx1))->code) != IF_THEN_ELSE)
    return 0;
  in_set = (((in_set)->u.fld[1]).rtx1);
  out_set = (((((enum rtx_code) (out_insn)->code) == INSN) || (((enum rtx_code) (out_insn)->code) == JUMP_INSN) || (((enum rtx_code) (out_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((out_insn)->u.fld[5]).rtx1))->code) == SET ? (((out_insn)->u.fld[5]).rtx1) : single_set_2 (out_insn, (((out_insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (out_set)
    {
      if (reg_mentioned_p ((((out_set)->u.fld[0]).rtx1), (((in_set)->u.fld[1]).rtx1))
   || reg_mentioned_p ((((out_set)->u.fld[0]).rtx1), (((in_set)->u.fld[2]).rtx1)))
 return 0;
    }
  else
    {
      rtx out_pat;
      int i;
      out_pat = (((out_insn)->u.fld[5]).rtx1);
      if (((enum rtx_code) (out_pat)->code) != PARALLEL)
 abort ();
      for (i = 0; i < (((((out_pat)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx exp = (((((out_pat)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (exp)->code) == CLOBBER)
     continue;
   if (((enum rtx_code) (exp)->code) != SET)
     abort ();
   if (reg_mentioned_p ((((out_set)->u.fld[0]).rtx1), (((in_set)->u.fld[1]).rtx1))
       || reg_mentioned_p ((((out_set)->u.fld[0]).rtx1), (((in_set)->u.fld[2]).rtx1)))
     return 0;
 }
    }
  return 1;
}
static varray_type stack_regs_mentioned_data;
typedef struct stack_def
{
  int top;
  HARD_REG_SET reg_set1;
  unsigned char reg[((8 + 7) - 8 + 1)];
} *stack;
typedef struct r2s_block_info_def
{
  struct stack_def stack_in;
  struct stack_def stack_out;
  HARD_REG_SET out_reg_set;
  int done;
  int predecessors;
} *r2s_block_info;
enum emit_where
{
  EMIT_AFTER,
  EMIT_BEFORE
};
static basic_block current_block;
static rtx
  FP_mode_reg[(8 + 7)+1-8][(int) MAX_MACHINE_MODE];
static rtx not_a_num;
static int stack_regs_mentioned_p (rtx pat);
static void straighten_stack (rtx, stack);
static void pop_stack (stack, int);
static rtx *get_true_reg (rtx *);
static int check_asm_stack_operands (rtx);
static int get_asm_operand_n_inputs (rtx);
static rtx stack_result (tree);
static void replace_reg (rtx *, int);
static void remove_regno_note (rtx, enum reg_note, unsigned int);
static int get_hard_regnum (stack, rtx);
static rtx emit_pop_insn (rtx, stack, rtx, enum emit_where);
static void emit_swap_insn (rtx, stack, rtx);
static void swap_to_top(rtx, stack, rtx, rtx);
static unsigned char move_for_stack_reg (rtx, stack, rtx);
static int swap_rtx_condition_1 (rtx);
static int swap_rtx_condition (rtx);
static void compare_for_stack_reg (rtx, stack, rtx);
static unsigned char subst_stack_regs_pat (rtx, stack, rtx);
static void subst_asm_stack_regs (rtx, stack);
static unsigned char subst_stack_regs (rtx, stack);
static void change_stack (rtx, stack, stack, enum emit_where);
static int convert_regs_entry (void);
static void convert_regs_exit (void);
static int convert_regs_1 (FILE *, basic_block);
static int convert_regs_2 (FILE *, basic_block);
static int convert_regs (FILE *);
static void print_stack (FILE *, stack);
static rtx next_flags_user (rtx);
static void record_label_references (rtx, rtx);
static unsigned char compensate_edge (edge, FILE *);
static int
stack_regs_mentioned_p (rtx pat)
{
  const char *fmt;
  int i;
  if (((((enum rtx_code) (pat)->code) == REG) && (((pat)->u.fld[0]).rtuint) >= 8 && (((pat)->u.fld[0]).rtuint) <= (8 + 7)))
    return 1;
  fmt = (rtx_format[(int) (((enum rtx_code) (pat)->code))]);
  for (i = (rtx_length[(int) (((enum rtx_code) (pat)->code))]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'E')
 {
   int j;
   for (j = (((((pat)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     if (stack_regs_mentioned_p ((((((pat)->u.fld[i]).rtvec1))->elem[j])))
       return 1;
 }
      else if (fmt[i] == 'e' && stack_regs_mentioned_p ((((pat)->u.fld[i]).rtx1)))
 return 1;
    }
  return 0;
}
int
stack_regs_mentioned (rtx insn)
{
  unsigned int uid, max;
  int test;
  if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) || !stack_regs_mentioned_data)
    return 0;
  uid = (((insn)->u.fld[0]).rtint);
  max = ((stack_regs_mentioned_data)->num_elements);
  if (uid >= max)
    {
      max = uid + uid / 20;
      ((stack_regs_mentioned_data) = varray_grow (stack_regs_mentioned_data, max));
    }
  test = ((stack_regs_mentioned_data)->data.c[uid]);
  if (test == 0)
    {
      test = stack_regs_mentioned_p ((((insn)->u.fld[5]).rtx1)) ? 1 : 2;
      ((stack_regs_mentioned_data)->data.c[uid]) = test;
    }
  return test == 1;
}
static rtx ix86_flags_rtx;
static rtx
next_flags_user (rtx insn)
{
  while (insn != (current_block)->end_)
    {
      insn = (((insn)->u.fld[2]).rtx1);
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && reg_mentioned_p (ix86_flags_rtx, (((insn)->u.fld[5]).rtx1)))
 return insn;
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 return (rtx) 0;
    }
  return (rtx) 0;
}
static void
straighten_stack (rtx insn, stack regstack)
{
  struct stack_def temp_stack;
  int top;
  if (regstack->top <= 0)
    return;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (temp_stack.reg_set1), *scan_fp_ = (regstack->reg_set1); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  for (top = temp_stack.top = regstack->top; top >= 0; top--)
    temp_stack.reg[top] = 8 + temp_stack.top - top;
  change_stack (insn, regstack, &temp_stack, EMIT_AFTER);
}
static void
pop_stack (stack regstack, int regno)
{
  int top = regstack->top;
  ((regstack->reg_set1)[(regno) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))));
  regstack->top--;
  if (regstack->reg [top] != regno)
    {
      int i;
      for (i = regstack->top; i >= 0; i--)
 if (regstack->reg [i] == regno)
   {
     int j;
     for (j = i; j < top; j++)
       regstack->reg [j] = regstack->reg [j + 1];
     break;
   }
    }
}
unsigned char
reg_to_stack (FILE *file)
{
  basic_block bb;
  int i;
  int max_uid;
  stack_regs_mentioned_data = 0;
  for (i = 8; i <= (8 + 7); i++)
    if (regs_ever_live[i])
      break;
  if (i > (8 + 7))
    return 0;
  if (!optimize
      || (flag_sched2_use_superblocks
   && flag_schedule_insns_after_reload))
    {
      count_or_remove_death_notes (((void *)0), 1);
      life_analysis (file, 1);
    }
  mark_dfs_back_edges ();
  alloc_aux_for_blocks (sizeof (struct r2s_block_info_def));
  for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
    {
      edge e;
      for (e = bb->pred; e; e = e->pred_next)
 if (!(e->flags & 32)
     && e->src != ENTRY_BLOCK_PTR)
   ((r2s_block_info) (bb)->aux)->predecessors++;
    }
  for (i = 8; i <= (8 + 7); i++)
    {
      enum machine_mode mode;
      for (mode = class_narrowest_mode[MODE_FLOAT];
    mode != VOIDmode;
    mode = mode_wider[mode])
 (FP_mode_reg[(i)-8][(int) (mode)]) = gen_rtx_REG (mode, i);
      for (mode = class_narrowest_mode[MODE_COMPLEX_FLOAT];
    mode != VOIDmode;
    mode = mode_wider[mode])
 (FP_mode_reg[(i)-8][(int) (mode)]) = gen_rtx_REG (mode, i);
    }
  ix86_flags_rtx = gen_rtx_REG (CCmode, 17);
  if (flag_pic)
    not_a_num = (const_tiny_rtx[0][(int) (SFmode)]);
  else
    {
      not_a_num = rtl_hooks.gen_lowpart (SFmode, gen_rtx_CONST_INT (VOIDmode, (long) (0x7fc00000)));
      not_a_num = force_const_mem (SFmode, not_a_num);
    }
  max_uid = get_max_uid ();
  stack_regs_mentioned_data = varray_init (max_uid + 1, VARRAY_DATA_C, "stack_regs_mentioned cache")
                                   ;
  convert_regs (file);
  free_aux_for_blocks ();
  return 1;
}
static void
record_label_references (rtx insn, rtx pat)
{
  enum rtx_code code = ((enum rtx_code) (pat)->code);
  int i;
  const char *fmt;
  if (code == LABEL_REF)
    {
      rtx label = (((pat)->u.fld[0]).rtx1);
      rtx ref;
      if (((enum rtx_code) (label)->code) != CODE_LABEL)
 abort ();
      if ((((label)->u.fld[0]).rtint) == 0)
 return;
      for (ref = (((label)->u.fld[5]).rtx1);
    ref && ref != label;
    ref = (((ref)->u.fld[1]).rtx1))
 if ((((ref)->u.fld[2]).rtx1) == insn)
   return;
      (((pat)->u.fld[2]).rtx1) = insn;
      (((pat)->u.fld[1]).rtx1) = (((label)->u.fld[5]).rtx1);
      (((label)->u.fld[5]).rtx1) = pat;
      return;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 record_label_references (insn, (((pat)->u.fld[i]).rtx1));
      if (fmt[i] == 'E')
 {
   int j;
   for (j = 0; j < (((((pat)->u.fld[i]).rtvec1))->num_elem); j++)
     record_label_references (insn, (((((pat)->u.fld[i]).rtvec1))->elem[j]));
 }
    }
}
static rtx *
get_true_reg (rtx *pat)
{
  for (;;)
    switch (((enum rtx_code) (*pat)->code))
      {
      case SUBREG:
 {
   rtx subreg;
   if (((((enum rtx_code) (subreg = (((*pat)->u.fld[0]).rtx1))->code) == REG) && (((((subreg = (((*pat)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= 8 && ((((subreg = (((*pat)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= (8 + 7))))
     {
       int regno_off = subreg_regno_offset ((((subreg)->u.fld[0]).rtuint),
         ((enum machine_mode) (subreg)->mode),
         (((*pat)->u.fld[1]).rtuint),
         ((enum machine_mode) (*pat)->mode));
       *pat = (FP_mode_reg[((((subreg)->u.fld[0]).rtuint) + regno_off)-8][(int) (((enum machine_mode) (subreg)->mode))])
                        ;
     default:
       return pat;
     }
 }
      case FLOAT:
      case FIX:
      case FLOAT_EXTEND:
 pat = & (((*pat)->u.fld[0]).rtx1);
 break;
      case FLOAT_TRUNCATE:
 if (!flag_unsafe_math_optimizations)
   return pat;
 pat = & (((*pat)->u.fld[0]).rtx1);
 break;
      }
}
static unsigned char any_malformed_asm;
static int
check_asm_stack_operands (rtx insn)
{
  int i;
  int n_clobbers;
  int malformed_asm = 0;
  rtx body = (((insn)->u.fld[5]).rtx1);
  char reg_used_as_output[53];
  char implicitly_dies[53];
  int alt;
  rtx *clobber_reg = 0;
  int n_inputs, n_outputs;
  extract_insn (insn);
  constrain_operands (1);
  alt = which_alternative;
  preprocess_constraints ();
  n_inputs = get_asm_operand_n_inputs (body);
  n_outputs = recog_data.n_operands - n_inputs;
  if (alt < 0)
    {
      malformed_asm = 1;
      (((insn)->u.fld[5]).rtx1) = gen_rtx_fmt_e (USE, (VOIDmode), ((const_int_rtx[64])));
      return 0;
    }
  for (i = 0; i < recog_data.n_operands; i++)
    if (((enum rtx_code) (recog_data.operand[i])->code) == SUBREG
 && (((enum rtx_code) ((((recog_data.operand[i])->u.fld[0]).rtx1))->code) == REG))
      recog_data.operand[i] = (((recog_data.operand[i])->u.fld[0]).rtx1);
  n_clobbers = 0;
  if (((enum rtx_code) (body)->code) == PARALLEL)
    {
      clobber_reg = C_alloca((((((body)->u.fld[0]).rtvec1))->num_elem) * sizeof (rtx));
      for (i = 0; i < (((((body)->u.fld[0]).rtvec1))->num_elem); i++)
 if (((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[i]))->code) == CLOBBER)
   {
     rtx clobber = (((((body)->u.fld[0]).rtvec1))->elem[i]);
     rtx reg = (((clobber)->u.fld[0]).rtx1);
     if (((enum rtx_code) (reg)->code) == SUBREG && (((enum rtx_code) ((((reg)->u.fld[0]).rtx1))->code) == REG))
       reg = (((reg)->u.fld[0]).rtx1);
     if (((((enum rtx_code) (reg)->code) == REG) && (((reg)->u.fld[0]).rtuint) >= 8 && (((reg)->u.fld[0]).rtuint) <= (8 + 7)))
       {
  clobber_reg[n_clobbers] = reg;
  n_clobbers++;
       }
   }
    }
  memset (reg_used_as_output, 0, sizeof (reg_used_as_output));
  for (i = 0; i < n_outputs; i++)
    if (((((enum rtx_code) (recog_data.operand[i])->code) == REG) && (((recog_data.operand[i])->u.fld[0]).rtuint) >= 8 && (((recog_data.operand[i])->u.fld[0]).rtuint) <= (8 + 7)))
      {
 if (reg_class_size[(int) recog_op_alt[i][alt].class] != 1)
   {
     error_for_asm (insn, "output constraint %d must specify a single register", i);
     malformed_asm = 1;
   }
 else
   {
     int j;
     for (j = 0; j < n_clobbers; j++)
       if ((((recog_data.operand[i])->u.fld[0]).rtuint) == (((clobber_reg[j])->u.fld[0]).rtuint))
  {
    error_for_asm (insn, "output constraint %d cannot be specified together with \"%s\" clobber",
     i, reg_names [(((clobber_reg[j])->u.fld[0]).rtuint)]);
    malformed_asm = 1;
    break;
  }
     if (j == n_clobbers)
       reg_used_as_output[(((recog_data.operand[i])->u.fld[0]).rtuint)] = 1;
   }
      }
  for (i = 8; i < (8 + 7) + 1; i++)
    if (! reg_used_as_output[i])
      break;
  for (; i < (8 + 7) + 1; i++)
    if (reg_used_as_output[i])
      break;
  if (i != (8 + 7) + 1)
    {
      error_for_asm (insn, "output regs must be grouped at top of stack");
      malformed_asm = 1;
    }
  memset (implicitly_dies, 0, sizeof (implicitly_dies));
  for (i = n_outputs; i < n_outputs + n_inputs; i++)
    if (((((enum rtx_code) (recog_data.operand[i])->code) == REG) && (((recog_data.operand[i])->u.fld[0]).rtuint) >= 8 && (((recog_data.operand[i])->u.fld[0]).rtuint) <= (8 + 7)))
      {
 int j;
 for (j = 0; j < n_clobbers; j++)
   if (operands_match_p (clobber_reg[j], recog_data.operand[i]))
     break;
 if (j < n_clobbers || recog_op_alt[i][alt].matches >= 0)
   implicitly_dies[(((recog_data.operand[i])->u.fld[0]).rtuint)] = 1;
      }
  for (i = 8; i < (8 + 7) + 1; i++)
    if (! implicitly_dies[i])
      break;
  for (; i < (8 + 7) + 1; i++)
    if (implicitly_dies[i])
      break;
  if (i != (8 + 7) + 1)
    {
      error_for_asm (insn,
       "implicitly popped regs must be grouped at top of stack");
      malformed_asm = 1;
    }
  for (i = n_outputs; i < n_outputs + n_inputs; i++)
    if (recog_op_alt[i][alt].matches == -1)
      {
 int j;
 for (j = 0; j < n_outputs; j++)
   if (operands_match_p (recog_data.operand[j], recog_data.operand[i]))
     {
       error_for_asm (insn,
        "output operand %d must use `&' constraint", j);
       malformed_asm = 1;
     }
      }
  if (malformed_asm)
    {
      (((insn)->u.fld[5]).rtx1) = gen_rtx_fmt_e (USE, (VOIDmode), ((const_int_rtx[64])));
      any_malformed_asm = 1;
      return 0;
    }
  return 1;
}
static int
get_asm_operand_n_inputs (rtx body)
{
  if (((enum rtx_code) (body)->code) == SET && ((enum rtx_code) ((((body)->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
    return ((((((((body)->u.fld[1]).rtx1))->u.fld[3]).rtvec1))->num_elem);
  else if (((enum rtx_code) (body)->code) == ASM_OPERANDS)
    return (((((body)->u.fld[3]).rtvec1))->num_elem);
  else if (((enum rtx_code) (body)->code) == PARALLEL
    && ((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[0]))->code) == SET)
    return (((((((((((((body)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1))->u.fld[3]).rtvec1))->num_elem);
  else if (((enum rtx_code) (body)->code) == PARALLEL
    && ((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[0]))->code) == ASM_OPERANDS)
    return ((((((((((body)->u.fld[0]).rtvec1))->elem[0]))->u.fld[3]).rtvec1))->num_elem);
  abort ();
}
static rtx
stack_result (tree decl)
{
  rtx result;
  if (aggregate_value_p (((decl)->decl.result), decl))
    return 0;
  result = (((((decl)->decl.result))->decl.rtl != ((void *)0)) ? ((((decl)->decl.result))->decl.rtl ? (((decl)->decl.result))->decl.rtl : (make_decl_rtl (((decl)->decl.result), ((void *)0)), (((decl)->decl.result))->decl.rtl)) : ((void *)0));
  if (result != 0)
    {
      result = ix86_function_value (((((decl)->decl.result))->common.type));
    }
  return result != 0 && ((((enum rtx_code) (result)->code) == REG) && (((result)->u.fld[0]).rtuint) >= 8 && (((result)->u.fld[0]).rtuint) <= (8 + 7)) ? result : 0;
}
static void
replace_reg (rtx *reg, int regno)
{
  if (regno < 8 || regno > (8 + 7)
      || ! ((((enum rtx_code) (*reg)->code) == REG) && (((*reg)->u.fld[0]).rtuint) >= 8 && (((*reg)->u.fld[0]).rtuint) <= (8 + 7)))
    abort ();
  switch (mode_class[((enum machine_mode) (*reg)->mode)])
    {
    default: abort ();
    case MODE_FLOAT:
    case MODE_COMPLEX_FLOAT:;
    }
  *reg = (FP_mode_reg[(regno)-8][(int) (((enum machine_mode) (*reg)->mode))]);
}
static void
remove_regno_note (rtx insn, enum reg_note note, unsigned int regno)
{
  rtx *note_link, this;
  note_link = &(((insn)->u.fld[8]).rtx1);
  for (this = *note_link; this; this = (((this)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (this)->mode)) == note
 && (((enum rtx_code) ((((this)->u.fld[0]).rtx1))->code) == REG) && ((((((this)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == regno)
      {
 *note_link = (((this)->u.fld[1]).rtx1);
 return;
      }
    else
      note_link = &(((this)->u.fld[1]).rtx1);
  abort ();
}
static int
get_hard_regnum (stack regstack, rtx reg)
{
  int i;
  if (! ((((enum rtx_code) (reg)->code) == REG) && (((reg)->u.fld[0]).rtuint) >= 8 && (((reg)->u.fld[0]).rtuint) <= (8 + 7)))
    abort ();
  for (i = regstack->top; i >= 0; i--)
    if (regstack->reg[i] == (((reg)->u.fld[0]).rtuint))
      break;
  return i >= 0 ? (8 + regstack->top - i) : -1;
}
static rtx
emit_pop_insn (rtx insn, stack regstack, rtx reg, enum emit_where where)
{
  rtx pop_insn, pop_rtx;
  int hard_regno;
  if ((mode_class[((enum machine_mode) (reg)->mode)] == MODE_COMPLEX_INT || mode_class[((enum machine_mode) (reg)->mode)] == MODE_COMPLEX_FLOAT))
    {
      rtx reg1 = (FP_mode_reg[((((reg)->u.fld[0]).rtuint))-8][(int) (DFmode)]);
      rtx reg2 = (FP_mode_reg[((((reg)->u.fld[0]).rtuint) + 1)-8][(int) (DFmode)]);
      pop_insn = (rtx) 0;
      if (get_hard_regnum (regstack, reg1) >= 0)
 pop_insn = emit_pop_insn (insn, regstack, reg1, where);
      if (get_hard_regnum (regstack, reg2) >= 0)
 pop_insn = emit_pop_insn (insn, regstack, reg2, where);
      if (!pop_insn)
 abort ();
      return pop_insn;
    }
  hard_regno = get_hard_regnum (regstack, reg);
  if (hard_regno < 8)
    abort ();
  pop_rtx = gen_rtx_fmt_ee (SET, (VOIDmode), ((FP_mode_reg[(hard_regno)-8][(int) (DFmode)])), ((FP_mode_reg[(8)-8][(int) (DFmode)])))
                                          ;
  if (where == EMIT_AFTER)
    pop_insn = emit_insn_after (pop_rtx, insn);
  else
    pop_insn = emit_insn_before (pop_rtx, insn);
  (((pop_insn)->u.fld[8]).rtx1)
    = gen_rtx_fmt_ee (EXPR_LIST, (REG_DEAD), ((FP_mode_reg[(8)-8][(int) (DFmode)])), ((((pop_insn)->u.fld[8]).rtx1)))
                         ;
  regstack->reg[regstack->top - (hard_regno - 8)]
    = regstack->reg[regstack->top];
  regstack->top -= 1;
  ((regstack->reg_set1)[((((reg)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << (((((reg)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4)))));
  return pop_insn;
}
static void
emit_swap_insn (rtx insn, stack regstack, rtx reg)
{
  int hard_regno;
  rtx swap_rtx;
  int tmp, other_reg;
  rtx i1;
  rtx i1set = (rtx) 0;
  hard_regno = get_hard_regnum (regstack, reg);
  if (hard_regno < 8)
    abort ();
  if (hard_regno == 8)
    return;
  other_reg = regstack->top - (hard_regno - 8);
  tmp = regstack->reg[other_reg];
  regstack->reg[other_reg] = regstack->reg[regstack->top];
  regstack->reg[regstack->top] = tmp;
  i1 = ((void *)0);
  if (current_block && insn != (current_block)->head_)
    {
      rtx tmp = (((insn)->u.fld[1]).rtx1);
      rtx limit = ((((current_block)->head_)->u.fld[1]).rtx1);
      while (tmp != limit)
 {
   if (((enum rtx_code) (tmp)->code) == CODE_LABEL
       || ((enum rtx_code) (tmp)->code) == CALL_INSN
       || (((enum rtx_code) (tmp)->code) == NOTE && (((tmp)->u.fld[5]).rtint) == NOTE_INSN_BASIC_BLOCK)
       || (((enum rtx_code) (tmp)->code) == INSN
    && stack_regs_mentioned (tmp)))
     {
       i1 = tmp;
       break;
     }
   tmp = (((tmp)->u.fld[1]).rtx1);
 }
    }
  if (i1 != (rtx) 0
      && (i1set = (((((enum rtx_code) (i1)->code) == INSN) || (((enum rtx_code) (i1)->code) == JUMP_INSN) || (((enum rtx_code) (i1)->code) == CALL_INSN)) ? (((enum rtx_code) ((((i1)->u.fld[5]).rtx1))->code) == SET ? (((i1)->u.fld[5]).rtx1) : single_set_2 (i1, (((i1)->u.fld[5]).rtx1))) : (rtx) 0)) != (rtx) 0)
    {
      rtx i1src = *get_true_reg (&(((i1set)->u.fld[1]).rtx1));
      rtx i1dest = *get_true_reg (&(((i1set)->u.fld[0]).rtx1));
      if ((((enum rtx_code) (i1dest)->code) == REG) && (((i1dest)->u.fld[0]).rtuint) == 8
   && (((enum rtx_code) (i1src)->code) == REG)
   && (((i1src)->u.fld[0]).rtuint) == (unsigned) hard_regno - 1
   && find_regno_note (i1, REG_DEAD, 8) == (rtx) 0)
 return;
      if ((((enum rtx_code) (i1dest)->code) == REG) && (((i1dest)->u.fld[0]).rtuint) == (unsigned) hard_regno
   && (((enum rtx_code) (i1src)->code) == REG) && (((i1src)->u.fld[0]).rtuint) == 8
   && find_regno_note (i1, REG_DEAD, 8) == (rtx) 0)
 return;
    }
  swap_rtx = gen_swapxf ((FP_mode_reg[(hard_regno)-8][(int) (XFmode)]),
    (FP_mode_reg[(8)-8][(int) (XFmode)]));
  if (i1)
    emit_insn_after (swap_rtx, i1);
  else if (current_block)
    emit_insn_before (swap_rtx, (current_block)->head_);
  else
    emit_insn_before (swap_rtx, insn);
}
static void
swap_to_top (rtx insn, stack regstack, rtx src1, rtx src2)
{
  struct stack_def temp_stack;
  int regno, j, k, temp;
  temp_stack = *regstack;
  regno = get_hard_regnum (&temp_stack, src1);
  if (regno < 0)
    abort ();
  if (regno != 8)
    {
      k = temp_stack.top - (regno - 8);
      j = temp_stack.top;
      temp = temp_stack.reg[k];
      temp_stack.reg[k] = temp_stack.reg[j];
      temp_stack.reg[j] = temp;
    }
  regno = get_hard_regnum (&temp_stack, src2);
  if (regno < 0)
    abort ();
  if (regno != 8 + 1)
    {
      k = temp_stack.top - (regno - 8);
      j = temp_stack.top - 1;
      temp = temp_stack.reg[k];
      temp_stack.reg[k] = temp_stack.reg[j];
      temp_stack.reg[j] = temp;
    }
  change_stack (insn, regstack, &temp_stack, EMIT_BEFORE);
}
static unsigned char
move_for_stack_reg (rtx insn, stack regstack, rtx pat)
{
  rtx *psrc = get_true_reg (&(((pat)->u.fld[1]).rtx1));
  rtx *pdest = get_true_reg (&(((pat)->u.fld[0]).rtx1));
  rtx src, dest;
  rtx note;
  unsigned char control_flow_insn_deleted = 0;
  src = *psrc; dest = *pdest;
  if (((((enum rtx_code) (src)->code) == REG) && (((src)->u.fld[0]).rtuint) >= 8 && (((src)->u.fld[0]).rtuint) <= (8 + 7)) && ((((enum rtx_code) (dest)->code) == REG) && (((dest)->u.fld[0]).rtuint) >= 8 && (((dest)->u.fld[0]).rtuint) <= (8 + 7)))
    {
      note = find_regno_note (insn, REG_DEAD, (((src)->u.fld[0]).rtuint));
      if (note)
 {
   int i;
   if ((((src)->u.fld[0]).rtuint) == (((dest)->u.fld[0]).rtuint))
     abort ();
   for (i = regstack->top; i >= 0; i--)
     if (regstack->reg[i] == (((src)->u.fld[0]).rtuint))
       break;
   if (i < 0 || get_hard_regnum (regstack, dest) >= 8)
     abort ();
   if (find_regno_note (insn, REG_UNUSED, (((dest)->u.fld[0]).rtuint)))
     emit_pop_insn (insn, regstack, src, EMIT_AFTER);
   else
     {
       regstack->reg[i] = (((dest)->u.fld[0]).rtuint);
       ((regstack->reg_set1)[((((dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
       ((regstack->reg_set1)[((((src)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << (((((src)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4)))));
     }
   control_flow_insn_deleted |= control_flow_insn_p (insn);
   delete_insn (insn);
   return control_flow_insn_deleted;
 }
      if ((((src)->u.fld[0]).rtuint) == (((dest)->u.fld[0]).rtuint))
 {
   if (find_regno_note (insn, REG_UNUSED, (((dest)->u.fld[0]).rtuint)))
     emit_pop_insn (insn, regstack, dest, EMIT_AFTER);
   control_flow_insn_deleted |= control_flow_insn_p (insn);
   delete_insn (insn);
   return control_flow_insn_deleted;
 }
      if (get_hard_regnum (regstack, dest) >= 8)
 abort ();
      replace_reg (psrc, get_hard_regnum (regstack, src));
      regstack->reg[++regstack->top] = (((dest)->u.fld[0]).rtuint);
      ((regstack->reg_set1)[((((dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
      replace_reg (pdest, 8);
    }
  else if (((((enum rtx_code) (src)->code) == REG) && (((src)->u.fld[0]).rtuint) >= 8 && (((src)->u.fld[0]).rtuint) <= (8 + 7)))
    {
      emit_swap_insn (insn, regstack, src);
      note = find_regno_note (insn, REG_DEAD, (((src)->u.fld[0]).rtuint));
      if (note)
 {
   replace_reg (&(((note)->u.fld[0]).rtx1), 8);
   regstack->top--;
   ((regstack->reg_set1)[((((src)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << (((((src)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4)))));
 }
      else if ((((enum machine_mode) (src)->mode) == XFmode)
        && regstack->top < ((8 + 7) - 8 + 1) - 1)
 {
   rtx push_rtx, push_insn;
   rtx top_stack_reg = (FP_mode_reg[(8)-8][(int) (((enum machine_mode) (src)->mode))]);
   push_rtx = gen_movxf (top_stack_reg, top_stack_reg);
   push_insn = emit_insn_before (push_rtx, insn);
   (((insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_DEAD), (top_stack_reg), ((((insn)->u.fld[8]).rtx1)))
                       ;
 }
      replace_reg (psrc, 8);
    }
  else if (((((enum rtx_code) (dest)->code) == REG) && (((dest)->u.fld[0]).rtuint) >= 8 && (((dest)->u.fld[0]).rtuint) <= (8 + 7)))
    {
      if (get_hard_regnum (regstack, dest) >= 8)
 abort ();
      if (regstack->top >= ((8 + 7) - 8 + 1))
 abort ();
      regstack->reg[++regstack->top] = (((dest)->u.fld[0]).rtuint);
      ((regstack->reg_set1)[((((dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
      replace_reg (pdest, 8);
    }
  else
    abort ();
  return control_flow_insn_deleted;
}
static int
swap_rtx_condition_1 (rtx pat)
{
  const char *fmt;
  int i, r = 0;
  if ((((rtx_class[(int) (((enum rtx_code) (pat)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
    {
      ((pat)->code = (swap_condition (((enum rtx_code) (pat)->code))));
      r = 1;
    }
  else
    {
      fmt = (rtx_format[(int) (((enum rtx_code) (pat)->code))]);
      for (i = (rtx_length[(int) (((enum rtx_code) (pat)->code))]) - 1; i >= 0; i--)
 {
   if (fmt[i] == 'E')
     {
       int j;
       for (j = (((((pat)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
  r |= swap_rtx_condition_1 ((((((pat)->u.fld[i]).rtvec1))->elem[j]));
     }
   else if (fmt[i] == 'e')
     r |= swap_rtx_condition_1 ((((pat)->u.fld[i]).rtx1));
 }
    }
  return r;
}
static int
swap_rtx_condition (rtx insn)
{
  rtx pat = (((insn)->u.fld[5]).rtx1);
  if (((enum rtx_code) (pat)->code) == SET
      && (((enum rtx_code) ((((pat)->u.fld[0]).rtx1))->code) == REG)
      && ((((((pat)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == 17)
    {
      insn = next_flags_user (insn);
      if (insn == (rtx) 0)
 return 0;
      pat = (((insn)->u.fld[5]).rtx1);
    }
  if (((enum rtx_code) (pat)->code) == SET
      && ((enum rtx_code) ((((pat)->u.fld[1]).rtx1))->code) == UNSPEC
      && ((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtint) == 24)
    {
      rtx dest = (((pat)->u.fld[0]).rtx1);
      while (insn != (current_block)->end_)
 {
   insn = (((insn)->u.fld[2]).rtx1);
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && reg_mentioned_p (dest, insn))
     break;
   if (((enum rtx_code) (insn)->code) == CALL_INSN)
     return 0;
 }
      pat = (((insn)->u.fld[5]).rtx1);
      if (((enum rtx_code) (pat)->code) != SET
   || ((enum rtx_code) ((((pat)->u.fld[1]).rtx1))->code) != UNSPEC
   || ((((((pat)->u.fld[1]).rtx1))->u.fld[1]).rtint) != 25
   || ! dead_or_set_p (insn, dest))
 return 0;
      insn = next_flags_user (insn);
      if (insn == (rtx) 0)
 return 0;
      pat = (((insn)->u.fld[5]).rtx1);
    }
  if (swap_rtx_condition_1 (pat))
    {
      int fail = 0;
      (((insn)->u.fld[6]).rtint) = -1;
      if (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)) == -1)
 fail = 1;
      else if (! dead_or_set_p (insn, ix86_flags_rtx))
 {
   insn = next_flags_user (insn);
   if (!insn || !swap_rtx_condition (insn))
     fail = 1;
 }
      if (fail)
 {
   swap_rtx_condition_1 (pat);
   return 0;
 }
      return 1;
    }
  return 0;
}
static void
compare_for_stack_reg (rtx insn, stack regstack, rtx pat_src)
{
  rtx *src1, *src2;
  rtx src1_note, src2_note;
  rtx flags_user;
  src1 = get_true_reg (&(((pat_src)->u.fld[0]).rtx1));
  src2 = get_true_reg (&(((pat_src)->u.fld[1]).rtx1));
  flags_user = next_flags_user (insn);
  if ((! ((((enum rtx_code) (*src1)->code) == REG) && (((*src1)->u.fld[0]).rtuint) >= 8 && (((*src1)->u.fld[0]).rtuint) <= (8 + 7))
       || (((((enum rtx_code) (*src2)->code) == REG) && (((*src2)->u.fld[0]).rtuint) >= 8 && (((*src2)->u.fld[0]).rtuint) <= (8 + 7))
    && get_hard_regnum (regstack, *src2) == 8))
      && swap_rtx_condition (insn))
    {
      rtx temp;
      temp = (((pat_src)->u.fld[0]).rtx1);
      (((pat_src)->u.fld[0]).rtx1) = (((pat_src)->u.fld[1]).rtx1);
      (((pat_src)->u.fld[1]).rtx1) = temp;
      src1 = get_true_reg (&(((pat_src)->u.fld[0]).rtx1));
      src2 = get_true_reg (&(((pat_src)->u.fld[1]).rtx1));
      (((insn)->u.fld[6]).rtint) = -1;
    }
  src1_note = find_regno_note (insn, REG_DEAD, (((*src1)->u.fld[0]).rtuint));
  if (((((enum rtx_code) (*src2)->code) == REG) && (((*src2)->u.fld[0]).rtuint) >= 8 && (((*src2)->u.fld[0]).rtuint) <= (8 + 7)))
    src2_note = find_regno_note (insn, REG_DEAD, (((*src2)->u.fld[0]).rtuint));
  else
    src2_note = (rtx) 0;
  emit_swap_insn (insn, regstack, *src1);
  replace_reg (src1, 8);
  if (((((enum rtx_code) (*src2)->code) == REG) && (((*src2)->u.fld[0]).rtuint) >= 8 && (((*src2)->u.fld[0]).rtuint) <= (8 + 7)))
    replace_reg (src2, get_hard_regnum (regstack, *src2));
  if (src1_note)
    {
      pop_stack (regstack, ((((((src1_note)->u.fld[0]).rtx1))->u.fld[0]).rtuint));
      replace_reg (&(((src1_note)->u.fld[0]).rtx1), 8);
    }
  if (src2_note
      && ! (((((enum rtx_code) (*src1)->code) == REG) && (((*src1)->u.fld[0]).rtuint) >= 8 && (((*src1)->u.fld[0]).rtuint) <= (8 + 7)) && ((((enum rtx_code) (*src2)->code) == REG) && (((*src2)->u.fld[0]).rtuint) >= 8 && (((*src2)->u.fld[0]).rtuint) <= (8 + 7))
     && (((*src1)->u.fld[0]).rtuint) == (((*src2)->u.fld[0]).rtuint)))
    {
      if (get_hard_regnum (regstack, (((src2_note)->u.fld[0]).rtx1)) == 8
   && src1_note)
 {
   pop_stack (regstack, ((((((src2_note)->u.fld[0]).rtx1))->u.fld[0]).rtuint));
   replace_reg (&(((src2_note)->u.fld[0]).rtx1), 8 + 1);
 }
      else
 {
   remove_regno_note (insn, REG_DEAD, ((((((src2_note)->u.fld[0]).rtx1))->u.fld[0]).rtuint));
   emit_pop_insn (insn, regstack, (((src2_note)->u.fld[0]).rtx1),
    EMIT_AFTER);
 }
    }
}
static unsigned char
subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
{
  rtx *dest, *src;
  unsigned char control_flow_insn_deleted = 0;
  switch (((enum rtx_code) (pat)->code))
    {
    case USE:
      src = get_true_reg (&(((pat)->u.fld[0]).rtx1));
      if (((((enum rtx_code) (*src)->code) == REG) && (((*src)->u.fld[0]).rtuint) >= 8 && (((*src)->u.fld[0]).rtuint) <= (8 + 7))
   && find_regno_note (insn, REG_DEAD, (((*src)->u.fld[0]).rtuint)))
 {
   emit_pop_insn (insn, regstack, *src, EMIT_AFTER);
   return control_flow_insn_deleted;
 }
      else if (get_hard_regnum (regstack, *src) == -1)
 abort ();
      break;
    case CLOBBER:
      {
 rtx note;
 dest = get_true_reg (&(((pat)->u.fld[0]).rtx1));
 if (((((enum rtx_code) (*dest)->code) == REG) && (((*dest)->u.fld[0]).rtuint) >= 8 && (((*dest)->u.fld[0]).rtuint) <= (8 + 7)))
   {
     note = find_reg_note (insn, REG_DEAD, *dest);
     if (pat != (((insn)->u.fld[5]).rtx1))
       {
  if (note)
    emit_pop_insn (insn, regstack, *dest, EMIT_BEFORE);
  else
    {
      note = find_reg_note (insn, REG_UNUSED, *dest);
      if (!note)
        abort ();
    }
  remove_note (insn, note);
  replace_reg (dest, 8 + 1);
       }
     else
       {
  if (! note
      && get_hard_regnum (regstack, *dest) == -1)
    {
      pat = gen_rtx_fmt_ee (SET, (VOIDmode), ((FP_mode_reg[((((*dest)->u.fld[0]).rtuint))-8][(int) (SFmode)])), (not_a_num))
                     ;
      (((insn)->u.fld[5]).rtx1) = pat;
      control_flow_insn_deleted |= move_for_stack_reg (insn, regstack, pat);
    }
  if (! note && (mode_class[((enum machine_mode) (*dest)->mode)] == MODE_COMPLEX_INT || mode_class[((enum machine_mode) (*dest)->mode)] == MODE_COMPLEX_FLOAT)
      && get_hard_regnum (regstack, (FP_mode_reg[((((*dest)->u.fld[0]).rtuint))-8][(int) (DFmode)])) == -1)
    {
      pat = gen_rtx_fmt_ee (SET, (VOIDmode), ((FP_mode_reg[((((*dest)->u.fld[0]).rtuint) + 1)-8][(int) (SFmode)])), (not_a_num))
                     ;
      (((insn)->u.fld[5]).rtx1) = pat;
      control_flow_insn_deleted |= move_for_stack_reg (insn, regstack, pat);
    }
       }
   }
 break;
      }
    case SET:
      {
 rtx *src1 = (rtx *) 0, *src2;
 rtx src1_note, src2_note;
 rtx pat_src;
 dest = get_true_reg (&(((pat)->u.fld[0]).rtx1));
 src = get_true_reg (&(((pat)->u.fld[1]).rtx1));
 pat_src = (((pat)->u.fld[1]).rtx1);
 if (((((enum rtx_code) (*src)->code) == REG) && (((*src)->u.fld[0]).rtuint) >= 8 && (((*src)->u.fld[0]).rtuint) <= (8 + 7))
     || (((((enum rtx_code) (*dest)->code) == REG) && (((*dest)->u.fld[0]).rtuint) >= 8 && (((*dest)->u.fld[0]).rtuint) <= (8 + 7))
  && ((((enum rtx_code) (*src)->code) == REG) || (((enum rtx_code) (*src)->code) == MEM)
      || ((enum rtx_code) (*src)->code) == CONST_DOUBLE)))
   {
     control_flow_insn_deleted |= move_for_stack_reg (insn, regstack, pat);
     break;
   }
 switch (((enum rtx_code) (pat_src)->code))
   {
   case COMPARE:
     compare_for_stack_reg (insn, regstack, pat_src);
     break;
   case CALL:
     {
       int count;
       for (count = hard_regno_nregs[(((*dest)->u.fld[0]).rtuint)][((enum machine_mode) (*dest)->mode)];
     --count >= 0;)
  {
    regstack->reg[++regstack->top] = (((*dest)->u.fld[0]).rtuint) + count;
    ((regstack->reg_set1)[((((*dest)->u.fld[0]).rtuint) + count) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((*dest)->u.fld[0]).rtuint) + count) % ((unsigned) (8 * 4))));
  }
     }
     replace_reg (dest, 8);
     break;
   case REG:
     if (*dest != (global_rtl[GR_CC0]))
       abort ();
     src1 = src;
   case FLOAT_TRUNCATE:
   case SQRT:
   case ABS:
   case NEG:
     if (src1 == 0)
       src1 = get_true_reg (&(((pat_src)->u.fld[0]).rtx1));
     emit_swap_insn (insn, regstack, *src1);
     src1_note = find_regno_note (insn, REG_DEAD, (((*src1)->u.fld[0]).rtuint));
     if (((((enum rtx_code) (*dest)->code) == REG) && (((*dest)->u.fld[0]).rtuint) >= 8 && (((*dest)->u.fld[0]).rtuint) <= (8 + 7)))
       replace_reg (dest, 8);
     if (src1_note)
       {
  replace_reg (&(((src1_note)->u.fld[0]).rtx1), 8);
  regstack->top--;
  ((regstack->reg_set1)[((((*src1)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << (((((*src1)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4)))));
       }
     replace_reg (src1, 8);
     break;
   case MINUS:
   case DIV:
   case MULT:
   case PLUS:
     src1 = get_true_reg (&(((pat_src)->u.fld[0]).rtx1));
     src2 = get_true_reg (&(((pat_src)->u.fld[1]).rtx1));
     if (((((enum rtx_code) (*src1)->code) == REG) && (((*src1)->u.fld[0]).rtuint) >= 8 && (((*src1)->u.fld[0]).rtuint) <= (8 + 7)))
       src1_note = find_regno_note (insn, REG_DEAD, (((*src1)->u.fld[0]).rtuint));
     else
       src1_note = (rtx) 0;
     if (((((enum rtx_code) (*src2)->code) == REG) && (((*src2)->u.fld[0]).rtuint) >= 8 && (((*src2)->u.fld[0]).rtuint) <= (8 + 7)))
       src2_note = find_regno_note (insn, REG_DEAD, (((*src2)->u.fld[0]).rtuint));
     else
       src2_note = (rtx) 0;
     if (! ((((enum rtx_code) (*src1)->code) == REG) && (((*src1)->u.fld[0]).rtuint) >= 8 && (((*src1)->u.fld[0]).rtuint) <= (8 + 7)) || ! ((((enum rtx_code) (*src2)->code) == REG) && (((*src2)->u.fld[0]).rtuint) >= 8 && (((*src2)->u.fld[0]).rtuint) <= (8 + 7)))
       emit_swap_insn (insn, regstack, *dest);
     else
       {
  int src1_hard_regnum, src2_hard_regnum;
  src1_hard_regnum = get_hard_regnum (regstack, *src1);
  src2_hard_regnum = get_hard_regnum (regstack, *src2);
  if (src1_hard_regnum == -1 || src2_hard_regnum == -1)
    abort ();
  if (src1_hard_regnum != 8
      && src2_hard_regnum != 8)
    emit_swap_insn (insn, regstack, *dest);
       }
     if (((((enum rtx_code) (*src1)->code) == REG) && (((*src1)->u.fld[0]).rtuint) >= 8 && (((*src1)->u.fld[0]).rtuint) <= (8 + 7)))
       replace_reg (src1, get_hard_regnum (regstack, *src1));
     if (((((enum rtx_code) (*src2)->code) == REG) && (((*src2)->u.fld[0]).rtuint) >= 8 && (((*src2)->u.fld[0]).rtuint) <= (8 + 7)))
       replace_reg (src2, get_hard_regnum (regstack, *src2));
     if (src1_note)
       {
  rtx src1_reg = (((src1_note)->u.fld[0]).rtx1);
  if ((((src1_reg)->u.fld[0]).rtuint) == regstack->reg[regstack->top])
    {
      ((regstack->reg_set1)[((((*dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((*dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
      replace_reg (dest, get_hard_regnum (regstack, *dest));
    }
  else
    {
      int regno = get_hard_regnum (regstack, src1_reg);
      ((regstack->reg_set1)[((((*dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((*dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
      replace_reg (dest, regno);
      regstack->reg[regstack->top - (regno - 8)]
        = regstack->reg[regstack->top];
    }
  ((regstack->reg_set1)[(((((((src1_note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((((((((src1_note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) % ((unsigned) (8 * 4)))))
                                    ;
  replace_reg (&(((src1_note)->u.fld[0]).rtx1), 8);
  regstack->top--;
       }
     else if (src2_note)
       {
  rtx src2_reg = (((src2_note)->u.fld[0]).rtx1);
  if ((((src2_reg)->u.fld[0]).rtuint) == regstack->reg[regstack->top])
    {
      ((regstack->reg_set1)[((((*dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((*dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
      replace_reg (dest, get_hard_regnum (regstack, *dest));
    }
  else
    {
      int regno = get_hard_regnum (regstack, src2_reg);
      ((regstack->reg_set1)[((((*dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((*dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
      replace_reg (dest, regno);
      regstack->reg[regstack->top - (regno - 8)]
        = regstack->reg[regstack->top];
    }
  ((regstack->reg_set1)[(((((((src2_note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((((((((src2_note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) % ((unsigned) (8 * 4)))))
                                    ;
  replace_reg (&(((src2_note)->u.fld[0]).rtx1), 8);
  regstack->top--;
       }
     else
       {
  ((regstack->reg_set1)[((((*dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((*dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
  replace_reg (dest, get_hard_regnum (regstack, *dest));
       }
     if (((rtx_class[(int) (((enum rtx_code) (pat_src)->code))]) == RTX_COMM_ARITH)
  && (((enum rtx_code) (*src1)->code) == REG) && (((enum rtx_code) (*src2)->code) == REG)
  && (((*src1)->u.fld[0]).rtuint) != (((*dest)->u.fld[0]).rtuint))
      {
  int tmp = (((*src1)->u.fld[0]).rtuint);
  replace_reg (src1, (((*src2)->u.fld[0]).rtuint));
  replace_reg (src2, tmp);
      }
     break;
   case UNSPEC:
     switch ((((pat_src)->u.fld[1]).rtint))
       {
       case 21:
       case 22:
       case 68:
       case 69:
  src1 = get_true_reg (&(((((pat_src)->u.fld[0]).rtvec1))->elem[0]));
  emit_swap_insn (insn, regstack, *src1);
  src1_note = find_regno_note (insn, REG_DEAD, (((*src1)->u.fld[0]).rtuint));
  if (src1_note)
    abort();
  if (((((enum rtx_code) (*dest)->code) == REG) && (((*dest)->u.fld[0]).rtuint) >= 8 && (((*dest)->u.fld[0]).rtuint) <= (8 + 7)))
    replace_reg (dest, 8);
  replace_reg (src1, 8);
  break;
       case 65:
       case 66:
       case 67:
  src1 = get_true_reg (&(((((pat_src)->u.fld[0]).rtvec1))->elem[0]));
  src2 = get_true_reg (&(((((pat_src)->u.fld[0]).rtvec1))->elem[1]));
  src1_note = find_regno_note (insn, REG_DEAD, (((*src1)->u.fld[0]).rtuint));
  src2_note = find_regno_note (insn, REG_DEAD, (((*src2)->u.fld[0]).rtuint));
  swap_to_top (insn, regstack, *src1, *src2);
  replace_reg (src1, 8);
  replace_reg (src2, 8 + 1);
  if (src1_note)
    replace_reg (&(((src1_note)->u.fld[0]).rtx1), 8);
  if (src2_note)
    replace_reg (&(((src2_note)->u.fld[0]).rtx1), 8 + 1);
  ((regstack->reg_set1)[(regstack->reg[regstack->top]) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((regstack->reg[regstack->top]) % ((unsigned) (8 * 4)))))
                                     ;
  ((regstack->reg_set1)[(regstack->reg[regstack->top - 1]) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((regstack->reg[regstack->top - 1]) % ((unsigned) (8 * 4)))))
                                         ;
  regstack->top -= 2;
  regstack->reg[++regstack->top] = (((*dest)->u.fld[0]).rtuint);
  ((regstack->reg_set1)[((((*dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((*dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
  replace_reg (dest, 8);
  break;
       case 86:
       case 88:
       case 90:
  src1 = get_true_reg (&(((((pat_src)->u.fld[0]).rtvec1))->elem[0]));
  src2 = get_true_reg (&(((((pat_src)->u.fld[0]).rtvec1))->elem[1]));
  src1_note = find_regno_note (insn, REG_DEAD, (((*src1)->u.fld[0]).rtuint));
  src2_note = find_regno_note (insn, REG_DEAD, (((*src2)->u.fld[0]).rtuint));
  if ((src1_note) || (src2_note))
    abort();
  swap_to_top (insn, regstack, *src1, *src2);
  if (((((enum rtx_code) (*dest)->code) == REG) && (((*dest)->u.fld[0]).rtuint) >= 8 && (((*dest)->u.fld[0]).rtuint) <= (8 + 7))) {
    regstack->reg[regstack->top] = (((*dest)->u.fld[0]).rtuint);
    ((regstack->reg_set1)[((((*dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((*dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
    replace_reg (dest, 8);
  }
  replace_reg (src1, 8);
  replace_reg (src2, 8 + 1);
  break;
       case 87:
       case 89:
       case 91:
  src1 = get_true_reg (&(((((pat_src)->u.fld[0]).rtvec1))->elem[0]));
  src2 = get_true_reg (&(((((pat_src)->u.fld[0]).rtvec1))->elem[1]));
  src1_note = find_regno_note (insn, REG_DEAD, (((*src1)->u.fld[0]).rtuint));
  src2_note = find_regno_note (insn, REG_DEAD, (((*src2)->u.fld[0]).rtuint));
  if ((src1_note) || (src2_note))
    abort();
  swap_to_top (insn, regstack, *src1, *src2);
  if (((((enum rtx_code) (*dest)->code) == REG) && (((*dest)->u.fld[0]).rtuint) >= 8 && (((*dest)->u.fld[0]).rtuint) <= (8 + 7))) {
    regstack->reg[regstack->top - 1] = (((*dest)->u.fld[0]).rtuint);
    ((regstack->reg_set1)[((((*dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((*dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
    replace_reg (dest, 8 + 1);
  }
  replace_reg (src1, 8);
  replace_reg (src2, 8 + 1);
  break;
       case 80:
       case 82:
       case 84:
  src1 = get_true_reg (&(((((pat_src)->u.fld[0]).rtvec1))->elem[0]));
  emit_swap_insn (insn, regstack, *src1);
  src1_note = find_regno_note (insn, REG_DEAD, (((*src1)->u.fld[0]).rtuint));
  if (src1_note)
    abort();
  if (((((enum rtx_code) (*dest)->code) == REG) && (((*dest)->u.fld[0]).rtuint) >= 8 && (((*dest)->u.fld[0]).rtuint) <= (8 + 7))) {
    regstack->reg[regstack->top + 1] = (((*dest)->u.fld[0]).rtuint);
    ((regstack->reg_set1)[((((*dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((*dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
    replace_reg (dest, 8);
  }
  replace_reg (src1, 8);
  break;
       case 81:
       case 83:
       case 85:
  src1 = get_true_reg (&(((((pat_src)->u.fld[0]).rtvec1))->elem[0]));
  emit_swap_insn (insn, regstack, *src1);
  src1_note = find_regno_note (insn, REG_DEAD, (((*src1)->u.fld[0]).rtuint));
  if (src1_note)
    abort();
  if (((((enum rtx_code) (*dest)->code) == REG) && (((*dest)->u.fld[0]).rtuint) >= 8 && (((*dest)->u.fld[0]).rtuint) <= (8 + 7))) {
    regstack->reg[regstack->top] = (((*dest)->u.fld[0]).rtuint);
    ((regstack->reg_set1)[((((*dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((*dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
    replace_reg (dest, 8 + 1);
    regstack->top++;
  }
  replace_reg (src1, 8);
  break;
       case 25:
  pat_src = (((((pat_src)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (pat_src)->code) != UNSPEC
      || (((pat_src)->u.fld[1]).rtint) != 24)
    abort ();
       case 24:
  pat_src = (((((pat_src)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (pat_src)->code) != COMPARE)
    abort ();
  compare_for_stack_reg (insn, regstack, pat_src);
  break;
       default:
  abort ();
       }
     break;
   case IF_THEN_ELSE:
     src1 = get_true_reg (&(((pat_src)->u.fld[1]).rtx1));
     src2 = get_true_reg (&(((pat_src)->u.fld[2]).rtx1));
     src1_note = find_regno_note (insn, REG_DEAD, (((*src1)->u.fld[0]).rtuint));
     src2_note = find_regno_note (insn, REG_DEAD, (((*src2)->u.fld[0]).rtuint));
     if (get_hard_regnum (regstack, *dest) >= 8
  && (((*dest)->u.fld[0]).rtuint) != regstack->reg[regstack->top])
       {
  if (((((*src1)->u.fld[0]).rtuint) == regstack->reg[regstack->top]
       && src1_note)
      || ((((*src2)->u.fld[0]).rtuint) == regstack->reg[regstack->top]
   && src2_note))
    {
      int idx1 = (get_hard_regnum (regstack, *src1)
    - 8);
      int idx2 = (get_hard_regnum (regstack, *src2)
    - 8);
      regstack->reg[regstack->top - idx1] = (((*src2)->u.fld[0]).rtuint);
      regstack->reg[regstack->top - idx2] = (((*src1)->u.fld[0]).rtuint);
      (((((pat_src)->u.fld[0]).rtx1))->code = (reversed_comparison_code ((((pat_src)->u.fld[0]).rtx1), insn)))
                                                            ;
    }
  else
           emit_swap_insn (insn, regstack, *dest);
       }
     {
       rtx src_note [3];
       int i;
       src_note[0] = 0;
       src_note[1] = src1_note;
       src_note[2] = src2_note;
       if (((((enum rtx_code) (*src1)->code) == REG) && (((*src1)->u.fld[0]).rtuint) >= 8 && (((*src1)->u.fld[0]).rtuint) <= (8 + 7)))
  replace_reg (src1, get_hard_regnum (regstack, *src1));
       if (((((enum rtx_code) (*src2)->code) == REG) && (((*src2)->u.fld[0]).rtuint) >= 8 && (((*src2)->u.fld[0]).rtuint) <= (8 + 7)))
  replace_reg (src2, get_hard_regnum (regstack, *src2));
       for (i = 1; i <= 2; i++)
  if (src_note [i])
    {
      int regno = ((((((src_note[i])->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      if (regno != regstack->reg[regstack->top])
        {
   remove_regno_note (insn, REG_DEAD, regno);
   emit_pop_insn (insn, regstack, (((src_note[i])->u.fld[0]).rtx1),
           EMIT_AFTER);
        }
      else
        abort ();
    }
     }
     if (get_hard_regnum (regstack, *dest) < 8)
       regstack->reg[++regstack->top] = (((*dest)->u.fld[0]).rtuint);
     ((regstack->reg_set1)[((((*dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((*dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
     replace_reg (dest, 8);
     break;
   default:
     abort ();
   }
 break;
      }
    default:
      break;
    }
  return control_flow_insn_deleted;
}
static void
subst_asm_stack_regs (rtx insn, stack regstack)
{
  rtx body = (((insn)->u.fld[5]).rtx1);
  int alt;
  rtx *note_reg;
  rtx **note_loc;
  enum reg_note *note_kind;
  rtx *clobber_reg = 0;
  rtx **clobber_loc = 0;
  struct stack_def temp_stack;
  int n_notes;
  int n_clobbers;
  rtx note;
  int i;
  int n_inputs, n_outputs;
  if (! check_asm_stack_operands (insn))
    return;
  extract_insn (insn);
  constrain_operands (1);
  alt = which_alternative;
  preprocess_constraints ();
  n_inputs = get_asm_operand_n_inputs (body);
  n_outputs = recog_data.n_operands - n_inputs;
  if (alt < 0)
    abort ();
  for (i = 0; i < recog_data.n_operands; i++)
    if (((enum rtx_code) (recog_data.operand[i])->code) == SUBREG
 && (((enum rtx_code) ((((recog_data.operand[i])->u.fld[0]).rtx1))->code) == REG))
      {
 recog_data.operand_loc[i] = & (((recog_data.operand[i])->u.fld[0]).rtx1);
 recog_data.operand[i] = (((recog_data.operand[i])->u.fld[0]).rtx1);
      }
  for (i = 0, note = (((insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
    i++;
  note_reg = C_alloca(i * sizeof (rtx));
  note_loc = C_alloca(i * sizeof (rtx *));
  note_kind = C_alloca(i * sizeof (enum reg_note));
  n_notes = 0;
  for (note = (((insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
    {
      rtx reg = (((note)->u.fld[0]).rtx1);
      rtx *loc = & (((note)->u.fld[0]).rtx1);
      if (((enum rtx_code) (reg)->code) == SUBREG && (((enum rtx_code) ((((reg)->u.fld[0]).rtx1))->code) == REG))
 {
   loc = & (((reg)->u.fld[0]).rtx1);
   reg = (((reg)->u.fld[0]).rtx1);
 }
      if (((((enum rtx_code) (reg)->code) == REG) && (((reg)->u.fld[0]).rtuint) >= 8 && (((reg)->u.fld[0]).rtuint) <= (8 + 7))
   && (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD
       || ((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_UNUSED))
 {
   note_reg[n_notes] = reg;
   note_loc[n_notes] = loc;
   note_kind[n_notes] = ((enum reg_note) ((enum machine_mode) (note)->mode));
   n_notes++;
 }
    }
  n_clobbers = 0;
  if (((enum rtx_code) (body)->code) == PARALLEL)
    {
      clobber_reg = C_alloca((((((body)->u.fld[0]).rtvec1))->num_elem) * sizeof (rtx));
      clobber_loc = C_alloca((((((body)->u.fld[0]).rtvec1))->num_elem) * sizeof (rtx *));
      for (i = 0; i < (((((body)->u.fld[0]).rtvec1))->num_elem); i++)
 if (((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[i]))->code) == CLOBBER)
   {
     rtx clobber = (((((body)->u.fld[0]).rtvec1))->elem[i]);
     rtx reg = (((clobber)->u.fld[0]).rtx1);
     rtx *loc = & (((clobber)->u.fld[0]).rtx1);
     if (((enum rtx_code) (reg)->code) == SUBREG && (((enum rtx_code) ((((reg)->u.fld[0]).rtx1))->code) == REG))
       {
  loc = & (((reg)->u.fld[0]).rtx1);
  reg = (((reg)->u.fld[0]).rtx1);
       }
     if (((((enum rtx_code) (reg)->code) == REG) && (((reg)->u.fld[0]).rtuint) >= 8 && (((reg)->u.fld[0]).rtuint) <= (8 + 7)))
       {
  clobber_reg[n_clobbers] = reg;
  clobber_loc[n_clobbers] = loc;
  n_clobbers++;
       }
   }
    }
  temp_stack = *regstack;
  for (i = n_outputs; i < n_outputs + n_inputs; i++)
    if (((((enum rtx_code) (recog_data.operand[i])->code) == REG) && (((recog_data.operand[i])->u.fld[0]).rtuint) >= 8 && (((recog_data.operand[i])->u.fld[0]).rtuint) <= (8 + 7))
 && reg_class_subset_p (recog_op_alt[i][alt].class,
          FLOAT_REGS)
 && recog_op_alt[i][alt].class != FLOAT_REGS)
      {
 int regno = get_hard_regnum (&temp_stack, recog_data.operand[i]);
 if (regno < 0)
   abort ();
 if ((unsigned int) regno != (((recog_data.operand[i])->u.fld[0]).rtuint))
   {
     int j, k, temp;
     k = temp_stack.top - (regno - 8);
     j = (temp_stack.top
   - ((((recog_data.operand[i])->u.fld[0]).rtuint) - 8));
     temp = temp_stack.reg[k];
     temp_stack.reg[k] = temp_stack.reg[j];
     temp_stack.reg[j] = temp;
   }
      }
  change_stack (insn, regstack, &temp_stack, EMIT_BEFORE);
  for (i = n_outputs; i < n_outputs + n_inputs; i++)
    if (((((enum rtx_code) (recog_data.operand[i])->code) == REG) && (((recog_data.operand[i])->u.fld[0]).rtuint) >= 8 && (((recog_data.operand[i])->u.fld[0]).rtuint) <= (8 + 7)))
      {
 int regnum = get_hard_regnum (regstack, recog_data.operand[i]);
 if (regnum < 0)
   abort ();
 replace_reg (recog_data.operand_loc[i], regnum);
      }
  for (i = 0; i < n_notes; i++)
    if (note_kind[i] == REG_DEAD)
      {
 int regnum = get_hard_regnum (regstack, note_reg[i]);
 if (regnum < 0)
   abort ();
 replace_reg (note_loc[i], regnum);
      }
  for (i = 0; i < n_clobbers; i++)
    {
      int regnum = get_hard_regnum (regstack, clobber_reg[i]);
      if (regnum >= 0)
 {
   *clobber_loc[i] = (FP_mode_reg[(regnum)-8][(int) (DFmode)]);
 }
    }
  for (i = n_outputs; i < n_outputs + n_inputs; i++)
    if (((((enum rtx_code) (recog_data.operand[i])->code) == REG) && (((recog_data.operand[i])->u.fld[0]).rtuint) >= 8 && (((recog_data.operand[i])->u.fld[0]).rtuint) <= (8 + 7)))
      {
 int j;
 for (j = 0; j < n_clobbers; j++)
   if (operands_match_p (clobber_reg[j], recog_data.operand[i]))
     break;
 if (j < n_clobbers || recog_op_alt[i][alt].matches >= 0)
   {
     ((regstack->reg_set1)[(regstack->reg[regstack->top]) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((regstack->reg[regstack->top]) % ((unsigned) (8 * 4)))))
                                 ;
     regstack->top--;
   }
      }
  for (i = (8 + 7); i >= 8; i--)
    {
      int j;
      for (j = 0; j < n_outputs; j++)
 if (((((enum rtx_code) (recog_data.operand[j])->code) == REG) && (((recog_data.operand[j])->u.fld[0]).rtuint) >= 8 && (((recog_data.operand[j])->u.fld[0]).rtuint) <= (8 + 7))
     && (((recog_data.operand[j])->u.fld[0]).rtuint) == (unsigned) i)
   {
     regstack->reg[++regstack->top] = i;
     ((regstack->reg_set1)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
     break;
   }
    }
  for (i = 0; i < n_outputs; i++)
    if (((((enum rtx_code) (recog_data.operand[i])->code) == REG) && (((recog_data.operand[i])->u.fld[0]).rtuint) >= 8 && (((recog_data.operand[i])->u.fld[0]).rtuint) <= (8 + 7)))
      {
 int j;
 for (j = 0; j < n_notes; j++)
   if ((((recog_data.operand[i])->u.fld[0]).rtuint) == (((note_reg[j])->u.fld[0]).rtuint)
       && note_kind[j] == REG_UNUSED)
     {
       insn = emit_pop_insn (insn, regstack, recog_data.operand[i],
        EMIT_AFTER);
       break;
     }
      }
  for (i = n_outputs; i < n_outputs + n_inputs; i++)
    if (((((enum rtx_code) (recog_data.operand[i])->code) == REG) && (((recog_data.operand[i])->u.fld[0]).rtuint) >= 8 && (((recog_data.operand[i])->u.fld[0]).rtuint) <= (8 + 7)))
      {
 int j;
 for (j = 0; j < n_notes; j++)
   if ((((recog_data.operand[i])->u.fld[0]).rtuint) == (((note_reg[j])->u.fld[0]).rtuint)
       && note_kind[j] == REG_DEAD
       && (!!((regstack->reg_set1)[((((recog_data.operand[i])->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << (((((recog_data.operand[i])->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))))))
                                      )
     {
       insn = emit_pop_insn (insn, regstack, recog_data.operand[i],
        EMIT_AFTER);
       break;
     }
      }
}
static unsigned char
subst_stack_regs (rtx insn, stack regstack)
{
  rtx *note_link, note;
  unsigned char control_flow_insn_deleted = 0;
  int i;
  if (((enum rtx_code) (insn)->code) == CALL_INSN)
    {
      int top = regstack->top;
      if (top >= 0)
 {
   straighten_stack ((((insn)->u.fld[1]).rtx1), regstack);
   while (regstack->top >= 0)
     {
       ((regstack->reg_set1)[(8 + regstack->top) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((8 + regstack->top) % ((unsigned) (8 * 4)))));
       regstack->top--;
     }
 }
    }
  if (stack_regs_mentioned (insn))
    {
      int n_operands = asm_noperands ((((insn)->u.fld[5]).rtx1));
      if (n_operands >= 0)
 {
   subst_asm_stack_regs (insn, regstack);
   return control_flow_insn_deleted;
 }
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL)
 for (i = 0; i < ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem); i++)
   {
     if (stack_regs_mentioned_p (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i])))
       {
         if (((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->code) == CLOBBER)
            ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i])
       = shallow_copy_rtx_stat (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]) );
  control_flow_insn_deleted
    |= subst_stack_regs_pat (insn, regstack,
        ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]));
       }
   }
      else
 control_flow_insn_deleted
   |= subst_stack_regs_pat (insn, regstack, (((insn)->u.fld[5]).rtx1));
    }
  if (((enum rtx_code) (insn)->code) == NOTE || (((insn))->volatil))
    return control_flow_insn_deleted;
  note_link = &(((insn)->u.fld[8]).rtx1);
  for (note = *note_link; note; note = (((note)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_UNUSED && ((((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG) && ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 8 && ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint) <= (8 + 7)))
      {
 *note_link = (((note)->u.fld[1]).rtx1);
 insn = emit_pop_insn (insn, regstack, (((note)->u.fld[0]).rtx1), EMIT_AFTER);
      }
    else
      note_link = &(((note)->u.fld[1]).rtx1);
  return control_flow_insn_deleted;
}
static void
change_stack (rtx insn, stack old, stack new, enum emit_where where)
{
  int reg;
  int update_end = 0;
  if (where == EMIT_AFTER)
    {
      if (current_block && (current_block)->end_ == insn)
 update_end = 1;
      insn = (((insn)->u.fld[2]).rtx1);
    }
  for (reg = old->top; reg >= 0; reg--)
    if (! (!!((new->reg_set1)[(old->reg[reg]) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((old->reg[reg]) % ((unsigned) (8 * 4)))))))
      emit_pop_insn (insn, old, (FP_mode_reg[(old->reg[reg])-8][(int) (DFmode)]),
       EMIT_BEFORE);
  if (new->top == -2)
    {
      new->top = old->top;
      memcpy (new->reg, old->reg, sizeof (new->reg));
    }
  else
    {
      do { HARD_REG_ELT_TYPE *scan_xp_ = (old->reg_set1), *scan_yp_ = (new->reg_set1); if ((scan_xp_[0] == scan_yp_[0]) && (scan_xp_[1] == scan_yp_[1])) goto win; } while (0);
      abort ();
    win:
      if (old->top != new->top)
 abort ();
      if (new->top != -1)
 do
   {
     while (old->reg[old->top] != new->reg[new->top])
       {
  for (reg = new->top; reg >= 0; reg--)
    if (new->reg[reg] == old->reg[old->top])
      break;
  if (reg == -1)
    abort ();
  emit_swap_insn (insn, old,
    (FP_mode_reg[(old->reg[reg])-8][(int) (DFmode)]));
       }
     for (reg = new->top; reg >= 0; reg--)
       if (new->reg[reg] != old->reg[reg])
  {
    emit_swap_insn (insn, old,
      (FP_mode_reg[(old->reg[reg])-8][(int) (DFmode)]));
    break;
  }
   } while (reg >= 0);
      for (reg = old->top; reg >= 0; reg--)
 if (old->reg[reg] != new->reg[reg])
   abort ();
    }
  if (update_end)
    (current_block)->end_ = (((insn)->u.fld[1]).rtx1);
}
static void
print_stack (FILE *file, stack s)
{
  if (! file)
    return;
  if (s->top == -2)
    fprintf (file, "uninitialized\n");
  else if (s->top == -1)
    fprintf (file, "empty\n");
  else
    {
      int i;
      fputs_unlocked ("[ ", file);
      for (i = 0; i <= s->top; ++i)
 fprintf (file, "%d ", s->reg[i]);
      fputs_unlocked ("]\n", file);
    }
}
static int
convert_regs_entry (void)
{
  int inserted = 0;
  edge e;
  basic_block block;
  for (block = EXIT_BLOCK_PTR->prev_bb; block != ENTRY_BLOCK_PTR; block = block->prev_bb)
    {
      r2s_block_info bi = ((r2s_block_info) (block)->aux);
      int reg;
      bi->stack_in.top = -2;
      for (reg = 8; reg <= (8 + 7); reg++)
 {
   if (bitmap_bit_p (block->global_live_at_end, reg))
     ((bi->out_reg_set)[(reg) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4))));
   if (bitmap_bit_p (block->global_live_at_start, reg))
     ((bi->stack_in.reg_set1)[(reg) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4))));
 }
    }
  for (e = ENTRY_BLOCK_PTR->succ; e ; e = e->succ_next)
    {
      basic_block block = e->dest;
      r2s_block_info bi = ((r2s_block_info) (block)->aux);
      int reg, top = -1;
      for (reg = (8 + 7); reg >= 8; --reg)
 if ((!!((bi->stack_in.reg_set1)[(reg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4)))))))
   {
     rtx init;
     bi->stack_in.reg[++top] = reg;
     init = gen_rtx_fmt_ee (SET, (VOIDmode), ((FP_mode_reg[(8)-8][(int) (SFmode)])), (not_a_num))
              ;
     insert_insn_on_edge (init, e);
     inserted = 1;
   }
      bi->stack_in.top = top;
    }
  return inserted;
}
static void
convert_regs_exit (void)
{
  int value1_reg_low, value_reg_high;
  stack output_stack;
  rtx retvalue;
  retvalue = stack_result (current_function_decl);
  value_reg_low = value_reg_high = -1;
  if (retvalue)
    {
      value_reg_low = (((retvalue)->u.fld[0]).rtuint);
      value_reg_high = value_reg_low
 + hard_regno_nregs[value_reg_low][((enum machine_mode) (retvalue)->mode)] - 1;
    }
  output_stack = &((r2s_block_info) (EXIT_BLOCK_PTR)->aux)->stack_in;
  if (value_reg_low == -1)
    output_stack->top = -1;
  else
    {
      int reg;
      output_stack->top = value_reg_high - value_reg_low;
      for (reg = value_reg_low; reg <= value_reg_high; ++reg)
 {
   output_stack->reg[value_reg_high - reg] = reg;
   ((output_stack->reg_set1)[(reg) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4))));
 }
    }
}
static unsigned char
compensate_edge (edge e, FILE *file)
{
  basic_block block = e->src, target = e->dest;
  r2s_block_info bi = ((r2s_block_info) (block)->aux);
  struct stack_def regstack, tmpstack;
  stack target_stack = &((r2s_block_info) (target)->aux)->stack_in;
  int reg;
  current_block = block;
  regstack = bi->stack_out;
  if (file)
    fprintf (file, "Edge %d->%d: ", block->index, target->index);
  if (target_stack->top == -2)
    {
      for (reg = regstack.top; reg >= 0; --reg)
 if (!(!!((target_stack->reg_set1)[(regstack.reg[reg]) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regstack.reg[reg]) % ((unsigned) (8 * 4)))))))
   break;
      if (reg == -1)
 {
   if (file)
     fprintf (file, "new block; copying stack position\n");
   tmpstack = regstack;
   change_stack ((block)->end_, &tmpstack, target_stack, EMIT_AFTER);
   return 0;
 }
      if (file)
 fprintf (file, "new block; pops needed\n");
    }
  else
    {
      if (target_stack->top == regstack.top)
 {
   for (reg = target_stack->top; reg >= 0; --reg)
     if (target_stack->reg[reg] != regstack.reg[reg])
       break;
   if (reg == -1)
     {
       if (file)
  fprintf (file, "no changes needed\n");
       return 0;
     }
 }
      if (file)
 {
   fprintf (file, "correcting stack to ");
   print_stack (file, target_stack);
 }
    }
  if ((e->flags & (8 | 4)) == 8)
    target_stack->top = -1;
  else if (e->flags & 4)
    {
      HARD_REG_SET tmp;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (tmp); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      do { HARD_REG_ELT_TYPE *scan_xp_ = (target_stack->reg_set1), *scan_yp_ = (tmp); if ((scan_xp_[0] == scan_yp_[0]) && (scan_xp_[1] == scan_yp_[1])) goto eh1; } while (0);
      abort ();
    eh1:
      ((tmp)[(8) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((8) % ((unsigned) (8 * 4))));
      if ((!!((regstack.reg_set1)[(8 + 1) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((8 + 1) % ((unsigned) (8 * 4)))))))
        ((tmp)[(8 + 1) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((8 + 1) % ((unsigned) (8 * 4))));
      do { HARD_REG_ELT_TYPE *scan_xp_ = (regstack.reg_set1), *scan_yp_ = (tmp); if ((scan_xp_[0] == scan_yp_[0]) && (scan_xp_[1] == scan_yp_[1])) goto eh2; } while (0);
      abort ();
    eh2:
      target_stack->top = -1;
    }
  else if (block->succ->succ_next == ((void *)0) && !(e->flags & 2))
    {
      tmpstack = regstack;
      change_stack ((block)->end_, &tmpstack, target_stack,
      (((enum rtx_code) ((block)->end_)->code) == JUMP_INSN
       ? EMIT_BEFORE : EMIT_AFTER));
    }
  else
    {
      rtx seq, after;
      if (e->flags & 2)
 abort ();
      current_block = ((void *)0);
      start_sequence ();
      after = emit_note (NOTE_INSN_DELETED);
      tmpstack = regstack;
      change_stack (after, &tmpstack, target_stack, EMIT_BEFORE);
      seq = get_insns ();
      end_sequence ();
      insert_insn_on_edge (seq, e);
      return 1;
    }
  return 0;
}
static int
convert_regs_1 (FILE *file, basic_block block)
{
  struct stack_def regstack;
  r2s_block_info bi = ((r2s_block_info) (block)->aux);
  int deleted, inserted, reg;
  rtx insn, next;
  edge e, beste = ((void *)0);
  unsigned char control_flow_insn_deleted = 0;
  inserted = 0;
  deleted = 0;
  any_malformed_asm = 0;
  for (e = block->pred; e ; e = e->pred_next)
    {
      if (e->flags & 32)
 ;
      else if (! beste)
 beste = e;
      else if ((((beste)->src->frequency * (beste)->probability + 10000 / 2) / 10000) < (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000))
 beste = e;
      else if ((((beste)->src->frequency * (beste)->probability + 10000 / 2) / 10000) > (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000))
 ;
      else if (beste->count < e->count)
 beste = e;
      else if (beste->count > e->count)
 ;
      else if ((((e)->src->succ->succ_next && (e)->dest->pred->pred_next) != 0)
        != (((beste)->src->succ->succ_next && (beste)->dest->pred->pred_next) != 0))
 {
   if (((e)->src->succ->succ_next && (e)->dest->pred->pred_next))
     beste = e;
 }
      else if (e->src->index < beste->src->index)
 beste = e;
    }
  if (bi->stack_in.top == -2)
    {
      if (beste)
 inserted |= compensate_edge (beste, file);
      else
 {
   int reg;
   bi->stack_in.top = -1;
   for (reg = (8 + 7); reg >= 8; --reg)
     if ((!!((bi->stack_in.reg_set1)[(reg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4)))))))
       bi->stack_in.reg[++bi->stack_in.top] = reg;
 }
    }
  else
    beste = ((void *)0);
  current_block = block;
  if (file)
    {
      fprintf (file, "\nBasic block %d\nInput stack: ", block->index);
      print_stack (file, &bi->stack_in);
    }
  next = (block)->head_;
  regstack = bi->stack_in;
  do
    {
      insn = next;
      next = (((insn)->u.fld[2]).rtx1);
      if (next == ((void *)0))
 abort ();
      if (insn == (block)->end_)
 next = ((void *)0);
      if (stack_regs_mentioned (insn)
   || ((enum rtx_code) (insn)->code) == CALL_INSN)
 {
   if (file)
     {
       fprintf (file, "  insn %d input stack: ",
         (((insn)->u.fld[0]).rtint));
       print_stack (file, &regstack);
     }
   control_flow_insn_deleted |= subst_stack_regs (insn, &regstack);
 }
    }
  while (next);
  if (file)
    {
      fprintf (file, "Expected live registers [");
      for (reg = 8; reg <= (8 + 7); ++reg)
 if ((!!((bi->out_reg_set)[(reg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4)))))))
   fprintf (file, " %d", reg);
      fprintf (file, " ]\nOutput stack: ");
      print_stack (file, &regstack);
    }
  insn = (block)->end_;
  if (((enum rtx_code) (insn)->code) == JUMP_INSN)
    insn = (((insn)->u.fld[1]).rtx1);
  for (reg = 8; reg <= (8 + 7); ++reg)
    {
      if ((!!((bi->out_reg_set)[(reg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4))))))
   && ! (!!((regstack.reg_set1)[(reg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4)))))))
 {
   rtx set;
   if (file)
     {
       fprintf (file, "Emitting insn initializing reg %d\n",
         reg);
     }
   set = gen_rtx_fmt_ee (SET, (VOIDmode), ((FP_mode_reg[(reg)-8][(int) (SFmode)])), (not_a_num))
                  ;
   insn = emit_insn_after (set, insn);
   control_flow_insn_deleted |= subst_stack_regs (insn, &regstack);
 }
    }
  if (control_flow_insn_deleted)
    purge_dead_edges (block);
  do { HARD_REG_ELT_TYPE *scan_xp_ = (regstack.reg_set1), *scan_yp_ = (bi->out_reg_set); if ((scan_xp_[0] == scan_yp_[0]) && (scan_xp_[1] == scan_yp_[1])) goto win; } while (0);
  if (!any_malformed_asm)
    abort ();
 win:
  bi->stack_out = regstack;
  for (e = block->succ; e ; e = e->succ_next)
    {
      if (e->flags & 32
   || (e->dest == EXIT_BLOCK_PTR))
 {
   if (!((r2s_block_info) (e->dest)->aux)->done
       && e->dest != block)
     abort ();
   inserted |= compensate_edge (e, file);
 }
    }
  for (e = block->pred; e ; e = e->pred_next)
    {
      if (e != beste && !(e->flags & 32)
   && e->src != ENTRY_BLOCK_PTR)
 {
   if (!((r2s_block_info) (e->src)->aux)->done)
     abort ();
   inserted |= compensate_edge (e, file);
 }
    }
  return inserted;
}
static int
convert_regs_2 (FILE *file, basic_block block)
{
  basic_block *stack1, *sp;
  int inserted;
  stack1 = xmalloc (sizeof (*stack1) * n_basic_blocks);
  sp = stack1;
  *sp++ = block;
  inserted = 0;
  do
    {
      edge e;
      block = *--sp;
      for (e = block->succ; e ; e = e->succ_next)
 if (! (e->flags & 32))
   {
     ((r2s_block_info) (e->dest)->aux)->predecessors--;
     if (!((r2s_block_info) (e->dest)->aux)->predecessors)
        *sp++ = e->dest;
   }
      inserted |= convert_regs_1 (file, block);
      ((r2s_block_info) (block)->aux)->done = 1;
    }
  while (sp != stack1);
  return inserted;
}
static int
convert_regs (FILE *file)
{
  int inserted;
  basic_block b;
  edge e;
  inserted = convert_regs_entry ();
  convert_regs_exit ();
  ((r2s_block_info) (EXIT_BLOCK_PTR)->aux)->done = 1;
  for (e = ENTRY_BLOCK_PTR->succ; e ; e = e->succ_next)
    inserted |= convert_regs_2 (file, e->dest);
  for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = b->next_bb)
    {
      r2s_block_info bi = ((r2s_block_info) (b)->aux);
      if (! bi->done)
 inserted |= convert_regs_2 (file, b);
    }
  clear_aux_for_blocks ();
  fixup_abnormal_edges ();
  if (inserted)
    commit_edge_insertions ();
  if (file)
    fputc_unlocked ('\n', file);
  return inserted;
}
const struct ggc_root_tab gt_ggc_r_gt_reg_stack_h[] = {
  {
    &stack_regs_mentioned_data,
    1,
    sizeof (stack_regs_mentioned_data),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static void init_reg_sets_1 (void);
static void init_reg_autoinc (void);
char fixed_regs[53];
HARD_REG_SET fixed_reg_set;
static const char initial_fixed_regs[] = { 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
char call_used_regs[53];
HARD_REG_SET call_used_reg_set;
HARD_REG_SET losing_caller_save_reg_set;
static const char initial_call_used_regs[] = { 3, 3, 3, 0, 2, 2, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3};
char call_fixed_regs[53];
HARD_REG_SET call_fixed_reg_set;
int n_non_fixed_regs;
char global_regs[53];
HARD_REG_SET regs_invalidated_by_call;
int reg_alloc_order[53] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52 };
int inv_reg_alloc_order[53];
HARD_REG_SET reg_class_contents[((int) LIM_REG_CLASSES)];
static const unsigned int_reg_class_contents[((int) LIM_REG_CLASSES)][((53 + (32 - 1)) / 32)]
  = { { 0x00, 0x0 }, { 0x01, 0x0 }, { 0x02, 0x0 }, { 0x04, 0x0 }, { 0x08, 0x0 }, { 0x10, 0x0 }, { 0x20, 0x0 }, { 0x03, 0x0 }, { 0x0f, 0x0 }, { 0x1100f0, 0x1fe0 }, { 0x7f, 0x1fe0 }, { 0x1100ff, 0x0 }, { 0x1100ff, 0x1fe0 }, { 0x100, 0x0 }, { 0x0200, 0x0 }, { 0xff00, 0x0 }, { 0x1fe00000,0x1fe000 }, { 0xe0000000, 0x1f }, { 0x1fe00100,0x1fe000 }, { 0x1fe00200,0x1fe000 }, { 0x1fe0ff00,0x1fe000 }, { 0x1ffff, 0x1fe0 }, { 0x1fe100ff,0x1fffe0 }, { 0x1fe1ffff,0x1fffe0 }, { 0xffffffff,0x1fffff } };
unsigned int reg_class_size[((int) LIM_REG_CLASSES)];
enum reg_class reg_class_superclasses[((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];
enum reg_class reg_class_subclasses[((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];
enum reg_class reg_class_subunion[((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];
enum reg_class reg_class_superunion[((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];
const char * reg_names[] = {"ax","dx","cx","bx","si","di","bp","sp", "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)", "argp", "flags", "fpsr", "dirflag", "frame", "xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7", "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7" , "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15"};
enum machine_mode reg_raw_mode[53];
static char contains_reg_of_mode [((int) LIM_REG_CLASSES)] [MAX_MACHINE_MODE];
static int move_cost[MAX_MACHINE_MODE][((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];
static int may_move_in_cost[MAX_MACHINE_MODE][((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];
static int may_move_out_cost[MAX_MACHINE_MODE][((int) LIM_REG_CLASSES)][((int) LIM_REG_CLASSES)];
bitmap_head subregs_of_mode;
static rtx top_of_stack[MAX_MACHINE_MODE];
struct reg_info_data {
  struct reg_info_data *next;
  size_t min_index;
  size_t max_index;
  char used_p;
  reg_info data[1];
};
static struct reg_info_data *reg_info_head;
static int no_global_reg_vars = 0;
unsigned char hard_regno_nregs[53][MAX_MACHINE_MODE];
void
init_reg_sets (void)
{
  int i, j;
  for (i = 0; i < ((int) LIM_REG_CLASSES); i++)
    {
      do { HARD_REG_ELT_TYPE *scan_tp_ = (reg_class_contents[i]); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      for (j = 0; j < 53; j++)
 if (int_reg_class_contents[i][j / 32]
     & ((unsigned) 1 << (j % 32)))
   ((reg_class_contents[i])[(j) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4))));
    }
  if (sizeof fixed_regs != sizeof initial_fixed_regs
      || sizeof call_used_regs != sizeof initial_call_used_regs)
    abort();
  memcpy (fixed_regs, initial_fixed_regs, sizeof fixed_regs);
  memcpy (call_used_regs, initial_call_used_regs, sizeof call_used_regs);
  memset (global_regs, 0, sizeof global_regs);
  ;
  for (i = 0; i < 53; i++)
    inv_reg_alloc_order[reg_alloc_order[i]] = i;
}
static void
init_reg_sets_1 (void)
{
  unsigned int i, j;
  unsigned int m;
  char allocatable_regs_of_mode [MAX_MACHINE_MODE];
  do { int i; for (i = 0; i < 53; i++) { fixed_regs[i] = (fixed_regs[i] & (0 ? 2 : 1)) != 0; call_used_regs[i] = (call_used_regs[i] & (0 ? 2 : 1)) != 0; } if ((0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3) != (~(unsigned int) 0)) { fixed_regs[(0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3)] = 1; call_used_regs[(0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3)] = 1; } if (! ((target_flags & 0x00002000) != 0)) { int i; for (i = 0; i < 53; i++) if ((!!((reg_class_contents[(int)MMX_REGS])[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))) fixed_regs[i] = call_used_regs[i] = 1; } if (! ((target_flags & 0x00004000) != 0)) { int i; for (i = 0; i < 53; i++) if ((!!((reg_class_contents[(int)SSE_REGS])[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))) fixed_regs[i] = call_used_regs[i] = 1; } if (! (target_flags & 0x00000001) && ! (target_flags & 0x00000020)) { int i; HARD_REG_SET x; do { HARD_REG_ELT_TYPE *scan_tp_ = (x), *scan_fp_ = (reg_class_contents[(int)FLOAT_REGS]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0); for (i = 0; i < 53; i++) if ((!!((x)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))) fixed_regs[i] = call_used_regs[i] = 1; } } while (0);
  memset (reg_class_size, 0, sizeof reg_class_size);
  for (i = 0; i < ((int) LIM_REG_CLASSES); i++)
    for (j = 0; j < 53; j++)
      if ((!!((reg_class_contents[i])[(j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4)))))))
 reg_class_size[i]++;
  for (i = 0; i < ((int) LIM_REG_CLASSES); i++)
    {
      for (j = 0; j < ((int) LIM_REG_CLASSES); j++)
 {
   HARD_REG_SET c;
   int k;
   do { HARD_REG_ELT_TYPE *scan_tp_ = (c), *scan_fp_ = (reg_class_contents[i]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (c), *scan_fp_ = (reg_class_contents[j]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
   for (k = 0; k < ((int) LIM_REG_CLASSES); k++)
     {
       do { HARD_REG_ELT_TYPE *scan_xp_ = (reg_class_contents[k]), *scan_yp_ = (c); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto subclass1; } while (0)
                   ;
       continue;
     subclass1:
       do { HARD_REG_ELT_TYPE *scan_xp_ = (reg_class_contents[k]), *scan_yp_ = (reg_class_contents[(int) reg_class_subunion[i][j]]); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto subclass2; } while (0)
                   ;
       reg_class_subunion[i][j] = (enum reg_class) k;
     subclass2:
       ;
     }
 }
    }
  for (i = 0; i < ((int) LIM_REG_CLASSES); i++)
    {
      for (j = 0; j < ((int) LIM_REG_CLASSES); j++)
 {
   HARD_REG_SET c;
   int k;
   do { HARD_REG_ELT_TYPE *scan_tp_ = (c), *scan_fp_ = (reg_class_contents[i]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (c), *scan_fp_ = (reg_class_contents[j]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
   for (k = 0; k < ((int) LIM_REG_CLASSES); k++)
     do { HARD_REG_ELT_TYPE *scan_xp_ = (c), *scan_yp_ = (reg_class_contents[k]); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto superclass; } while (0);
 superclass:
   reg_class_superunion[i][j] = (enum reg_class) k;
 }
    }
  for (i = 0; i < ((int) LIM_REG_CLASSES); i++)
    {
      for (j = 0; j < ((int) LIM_REG_CLASSES); j++)
 {
   reg_class_superclasses[i][j] = LIM_REG_CLASSES;
   reg_class_subclasses[i][j] = LIM_REG_CLASSES;
 }
    }
  for (i = 0; i < ((int) LIM_REG_CLASSES); i++)
    {
      if (i == (int) NO_REGS)
 continue;
      for (j = i + 1; j < ((int) LIM_REG_CLASSES); j++)
 {
   enum reg_class *p;
   do { HARD_REG_ELT_TYPE *scan_xp_ = (reg_class_contents[i]), *scan_yp_ = (reg_class_contents[j]); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto subclass; } while (0)
              ;
   continue;
 subclass:
   p = &reg_class_superclasses[i][0];
   while (*p != LIM_REG_CLASSES) p++;
   *p = (enum reg_class) j;
   p = &reg_class_subclasses[j][0];
   while (*p != LIM_REG_CLASSES) p++;
   *p = (enum reg_class) i;
 }
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (fixed_reg_set); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (call_used_reg_set); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (call_fixed_reg_set); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (regs_invalidated_by_call); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  memcpy (call_fixed_regs, fixed_regs, sizeof call_fixed_regs);
  n_non_fixed_regs = 0;
  for (i = 0; i < 53; i++)
    {
      if (fixed_regs[i])
 ((fixed_reg_set)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
      else
 n_non_fixed_regs++;
      if (call_used_regs[i])
 ((call_used_reg_set)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
      if (call_fixed_regs[i])
 ((call_fixed_reg_set)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
      if (((((regclass_map[i])) == AREG) || (((regclass_map[i])) == DREG) || (((regclass_map[i])) == CREG) || (((regclass_map[i])) == BREG) || (((regclass_map[i])) == AD_REGS) || (((regclass_map[i])) == SIREG) || (((regclass_map[i])) == DIREG) || (((regclass_map[i])) == FP_TOP_REG) || (((regclass_map[i])) == FP_SECOND_REG)))
 ((losing_caller_save_reg_set)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
      if (i == 7 || i == 20)
 ;
      else if (i == 6)
 ;
      else if (i == 16 && fixed_regs[i])
 ;
      else if (i == (unsigned) (0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3) && fixed_regs[i])
 ;
      else if (0
        || call_used_regs[i]
        || global_regs[i])
 ((regs_invalidated_by_call)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
    }
  memset (contains_reg_of_mode, 0, sizeof (contains_reg_of_mode));
  memset (allocatable_regs_of_mode, 0, sizeof (allocatable_regs_of_mode));
  for (m = 0; m < (unsigned int) MAX_MACHINE_MODE; m++)
    for (i = 0; i < ((int) LIM_REG_CLASSES); i++)
      if ((unsigned) (!reg_classes_intersect_p ((i), GENERAL_REGS) ? ((mode_class[m] == MODE_COMPLEX_INT || mode_class[m] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((((m) == XFmode ? 12 : ((unsigned short) mode_size[m]))) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))) <= reg_class_size[i])
 for (j = 0; j < 53; j++)
   if (!fixed_regs [j] && (!!((reg_class_contents[i])[(j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4))))))
       && ix86_hard_regno_mode_ok ((j), (m)))
      {
        contains_reg_of_mode [i][m] = 1;
        allocatable_regs_of_mode [m] = 1;
        break;
      }
  for (m = 0; m < (unsigned int) MAX_MACHINE_MODE; m++)
    if (allocatable_regs_of_mode [m])
      {
 for (i = 0; i < ((int) LIM_REG_CLASSES); i++)
   if (contains_reg_of_mode [i][m])
     for (j = 0; j < ((int) LIM_REG_CLASSES); j++)
       {
  int cost;
  enum reg_class *p1, *p2;
  if (!contains_reg_of_mode [j][m])
    {
      move_cost[m][i][j] = 65536;
      may_move_in_cost[m][i][j] = 65536;
      may_move_out_cost[m][i][j] = 65536;
    }
  else
    {
      cost = ix86_register_move_cost ((m), (i), (j));
      for (p2 = &reg_class_subclasses[j][0];
    *p2 != LIM_REG_CLASSES;
    p2++)
        if (*p2 != i && contains_reg_of_mode [*p2][m])
   cost = ((cost) > (move_cost [m][i][*p2]) ? (cost) : (move_cost [m][i][*p2]));
      for (p1 = &reg_class_subclasses[i][0];
    *p1 != LIM_REG_CLASSES;
    p1++)
        if (*p1 != j && contains_reg_of_mode [*p1][m])
   cost = ((cost) > (move_cost [m][*p1][j]) ? (cost) : (move_cost [m][*p1][j]));
      move_cost[m][i][j] = cost;
      if (reg_class_subset_p (i, j))
        may_move_in_cost[m][i][j] = 0;
      else
        may_move_in_cost[m][i][j] = cost;
      if (reg_class_subset_p (j, i))
        may_move_out_cost[m][i][j] = 0;
      else
        may_move_out_cost[m][i][j] = cost;
    }
       }
   else
     for (j = 0; j < ((int) LIM_REG_CLASSES); j++)
       {
  move_cost[m][i][j] = 65536;
  may_move_in_cost[m][i][j] = 65536;
  may_move_out_cost[m][i][j] = 65536;
       }
      }
}
void
init_reg_modes_once (void)
{
  int i, j;
  for (i = 0; i < 53; i++)
    for (j = 0; j < MAX_MACHINE_MODE; j++)
      hard_regno_nregs[i][j] = (((i) >= 8 && (i) <= (8 + 7)) || (((i) >= (20 + 1) && (i) <= ((20 + 1) + 7)) || ((i) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (i) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) || ((i) >= (((20 + 1) + 7) + 1) && (i) <= ((((20 + 1) + 7) + 1) + 7)) ? ((mode_class[(enum machine_mode)j] == MODE_COMPLEX_INT || mode_class[(enum machine_mode)j] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((enum machine_mode)j) == XFmode ? (0 ? 2 : 3) : ((enum machine_mode)j) == XCmode ? (0 ? 4 : 6) : ((((unsigned short) mode_size[(enum machine_mode)j]) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))));
  for (i = 0; i < 53; i++)
    {
      reg_raw_mode[i] = choose_hard_reg_mode (i, 1, 0);
      if (reg_raw_mode[i] == VOIDmode)
 reg_raw_mode[i] = i == 0 ? word_mode : reg_raw_mode[i-1];
    }
}
void
init_regs (void)
{
  init_reg_sets_1 ();
  init_reg_autoinc ();
}
void
init_fake_stack_mems (void)
{
  {
    int i;
    for (i = 0; i < MAX_MACHINE_MODE; i++)
      top_of_stack[i] = gen_rtx_MEM (i, (global_rtl[GR_STACK_POINTER]));
  }
}
int
memory_move_secondary_cost (enum machine_mode mode, enum reg_class class, int in)
{
  enum reg_class altclass;
  int partial_cost = 0;
  rtx mem = top_of_stack[(int) mode];
  if (in)
    {
      altclass = NO_REGS;
    }
  else
    {
      altclass = (((class) == GENERAL_REGS || (class) == LEGACY_REGS || (class) == INDEX_REGS) && !0 && (mode) == QImode ? Q_REGS : NO_REGS);
    }
  if (altclass == NO_REGS)
    return 0;
  if (in)
    partial_cost = ix86_register_move_cost ((mode), (altclass), (class));
  else
    partial_cost = ix86_register_move_cost ((mode), (class), (altclass));
  if (class == altclass)
    return partial_cost;
  return memory_move_secondary_cost (mode, altclass, in) + partial_cost;
}
enum machine_mode
choose_hard_reg_mode (unsigned int regno ,
        unsigned int nregs, unsigned char call_saved)
{
  unsigned int m;
  enum machine_mode found_mode = VOIDmode, mode;
  for (mode = class_narrowest_mode[MODE_INT];
       mode != VOIDmode;
       mode = mode_wider[mode])
    if ((unsigned) hard_regno_nregs[regno][mode] == nregs
 && ix86_hard_regno_mode_ok ((regno), (mode))
 && (! call_saved || ! 0))
      found_mode = mode;
  if (found_mode != VOIDmode)
    return found_mode;
  for (mode = class_narrowest_mode[MODE_FLOAT];
       mode != VOIDmode;
       mode = mode_wider[mode])
    if ((unsigned) hard_regno_nregs[regno][mode] == nregs
 && ix86_hard_regno_mode_ok ((regno), (mode))
 && (! call_saved || ! 0))
      found_mode = mode;
  if (found_mode != VOIDmode)
    return found_mode;
  for (mode = class_narrowest_mode[MODE_VECTOR_FLOAT];
       mode != VOIDmode;
       mode = mode_wider[mode])
    if ((unsigned) hard_regno_nregs[regno][mode] == nregs
 && ix86_hard_regno_mode_ok ((regno), (mode))
 && (! call_saved || ! 0))
      found_mode = mode;
  if (found_mode != VOIDmode)
    return found_mode;
  for (mode = class_narrowest_mode[MODE_VECTOR_INT];
       mode != VOIDmode;
       mode = mode_wider[mode])
    if ((unsigned) hard_regno_nregs[regno][mode] == nregs
 && ix86_hard_regno_mode_ok ((regno), (mode))
 && (! call_saved || ! 0))
      found_mode = mode;
  if (found_mode != VOIDmode)
    return found_mode;
  for (m = (unsigned int) CCmode; m < (unsigned int) NUM_MACHINE_MODES; ++m)
    {
      mode = (enum machine_mode) m;
      if ((unsigned) hard_regno_nregs[regno][mode] == nregs
   && ix86_hard_regno_mode_ok ((regno), (mode))
   && (! call_saved || ! 0))
 return mode;
    }
  return VOIDmode;
}
void
fix_register (const char *name, int fixed, int call_used)
{
  int i;
  if ((i = decode_reg_name (name)) >= 0)
    {
      if ((i == 7
    || i == 6
    )
   && (fixed == 0 || call_used == 0))
 {
   static const char * const what_option[2][2] = {
     { "call-saved", "call-used" },
     { "no-such-option", "fixed" }};
   error ("can't use '%s' as a %s register", name,
   what_option[fixed][call_used]);
 }
      else
 {
   fixed_regs[i] = fixed;
   call_used_regs[i] = call_used;
 }
    }
  else
    {
      warning ("unknown register name: %s", name);
    }
}
void
globalize_reg (int i)
{
  if (fixed_regs[i] == 0 && no_global_reg_vars)
    error ("global register variable follows a function definition");
  if (global_regs[i])
    {
      warning ("register used for two global register variables");
      return;
    }
  if (call_used_regs[i] && ! fixed_regs[i])
    warning ("call-clobbered register used for global register variable");
  global_regs[i] = 1;
  if (fixed_regs[i])
    return;
  fixed_regs[i] = call_used_regs[i] = call_fixed_regs[i] = 1;
  n_non_fixed_regs--;
  ((fixed_reg_set)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
  ((call_used_reg_set)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
  ((call_fixed_reg_set)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
  ((regs_invalidated_by_call)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
}
struct costs
{
  int cost[((int) LIM_REG_CLASSES)];
  int mem_cost;
};
struct reg_pref
{
  char prefclass;
  char altclass;
};
static struct costs *costs;
static struct costs init_cost;
static struct reg_pref *reg_pref;
static struct reg_pref *reg_pref_buffer;
static int frequency;
static rtx scan_one_insn (rtx, int);
static void record_operand_costs (rtx, struct costs *, struct reg_pref *);
static void dump_regclass (FILE *);
static void record_reg_classes (int, int, rtx *, enum machine_mode *,
    const char **, rtx, struct costs *,
    struct reg_pref *);
static int compute_copy_cost (rtx, enum machine_mode, enum reg_class, int);
static void record_address_regs (rtx, enum reg_class, int);
static void reg_scan_mark_refs (rtx, rtx, int, unsigned int);
enum reg_class
reg_preferred_class (int regno)
{
  if (reg_pref == 0)
    return GENERAL_REGS;
  return (enum reg_class) reg_pref[regno].prefclass;
}
enum reg_class
reg_alternate_class (int regno)
{
  if (reg_pref == 0)
    return ALL_REGS;
  return (enum reg_class) reg_pref[regno].altclass;
}
void
regclass_init (void)
{
  int i;
  init_cost.mem_cost = 10000;
  for (i = 0; i < ((int) LIM_REG_CLASSES); i++)
    init_cost.cost[i] = 10000;
  reg_pref = ((void *)0);
  no_global_reg_vars = 1;
}
static void
dump_regclass (FILE *dump)
{
  static const char *const reg_class_names2[] = { "NO_REGS", "AREG", "DREG", "CREG", "BREG", "SIREG", "DIREG", "AD_REGS", "Q_REGS", "NON_Q_REGS", "INDEX_REGS", "LEGACY_REGS", "GENERAL_REGS", "FP_TOP_REG", "FP_SECOND_REG", "FLOAT_REGS", "SSE_REGS", "MMX_REGS", "FP_TOP_SSE_REGS", "FP_SECOND_SSE_REGS", "FLOAT_SSE_REGS", "FLOAT_INT_REGS", "INT_SSE_REGS", "FLOAT_INT_SSE_REGS", "ALL_REGS" };
  int i;
  for (i = 53; i < max_regno; i++)
    {
      int class;
      if ((((reg_n_info)->data.reg[i])->refs))
 {
   fprintf (dump, "  Register %i costs:", i);
   for (class = 0; class < (int) ((int) LIM_REG_CLASSES); class++)
     if (contains_reg_of_mode [(enum reg_class) class][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode)]
  && ! invalid_mode_change_p (i, (enum reg_class) class,
         ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode))
  )
     fprintf (dump, " %s:%i", reg_class_names2[class],
       costs[i].cost[(enum reg_class) class]);
   fprintf (dump, " MEM:%i\n", costs[i].mem_cost);
 }
    }
}
static void
record_operand_costs (rtx insn, struct costs *op_costs,
        struct reg_pref *reg_pref)
{
  const char *constraints[30];
  enum machine_mode modes[30];
  int i;
  for (i = 0; i < recog_data.n_operands; i++)
    {
      constraints[i] = recog_data.constraints[i];
      modes[i] = recog_data.operand_mode[i];
    }
  for (i = 0; i < recog_data.n_operands; i++)
    {
      op_costs[i] = init_cost;
      if (((enum rtx_code) (recog_data.operand[i])->code) == SUBREG)
 recog_data.operand[i] = (((recog_data.operand[i])->u.fld[0]).rtx1);
      if ((((enum rtx_code) (recog_data.operand[i])->code) == MEM))
 record_address_regs ((((recog_data.operand[i])->u.fld[0]).rtx1),
        GENERAL_REGS, frequency * 2);
      else if (constraints[i][0] == 'p'
        || 0)
 record_address_regs (recog_data.operand[i],
        GENERAL_REGS, frequency * 2);
    }
  for (i = 0; i < (int) recog_data.n_operands - 1; i++)
    if (constraints[i][0] == '%')
      {
 const char *xconstraints[30];
 int j;
 for (j = 0; j < recog_data.n_operands; j++)
   xconstraints[j] = constraints[j];
 xconstraints[i] = constraints[i+1];
 xconstraints[i+1] = constraints[i];
 record_reg_classes (recog_data.n_alternatives, recog_data.n_operands,
       recog_data.operand, modes,
       xconstraints, insn, op_costs, reg_pref);
      }
  record_reg_classes (recog_data.n_alternatives, recog_data.n_operands,
        recog_data.operand, modes,
        constraints, insn, op_costs, reg_pref);
}
static rtx
scan_one_insn (rtx insn, int pass)
{
  enum rtx_code pat_code;
  rtx set, note;
  int i, j;
  struct costs op_costs[30];
  if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return insn;
  pat_code = ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code);
  if (pat_code == USE
      || pat_code == CLOBBER
      || pat_code == ASM_INPUT
      || pat_code == ADDR_VEC
      || pat_code == ADDR_DIFF_VEC)
    return insn;
  set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  extract_insn (insn);
  if (set != 0 && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
      && (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == MEM)
      && (note = find_reg_note (insn, REG_EQUIV,
    (rtx) 0)) != 0
      && (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == MEM))
    {
      costs[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)].mem_cost
 -= (ix86_memory_move_cost ((((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode)), (GENERAL_REGS), (1))
     * frequency);
      record_address_regs (((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1),
      GENERAL_REGS, frequency * 2);
      return insn;
    }
  if (pass == 0 && optimize
      && recog_data.n_operands >= 3
      && recog_data.constraints[1][0] == '0'
      && recog_data.constraints[1][1] == 0
      && ((rtx_class[(int) (((enum rtx_code) (recog_data.operand[1])->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (recog_data.operand[1])->code) == CONST_VECTOR)
      && ! rtx_equal_p (recog_data.operand[0], recog_data.operand[1])
      && ! rtx_equal_p (recog_data.operand[0], recog_data.operand[2])
      && (((enum rtx_code) (recog_data.operand[0])->code) == REG)
      && ((((enum machine_mode) (recog_data.operand[0])->mode)) == (recog_data.operand_mode[1]) || (((((enum machine_mode) (recog_data.operand[0])->mode)) == HImode || (((enum machine_mode) (recog_data.operand[0])->mode)) == SImode || ((((enum machine_mode) (recog_data.operand[0])->mode)) == QImode && (0 || !(x86_partial_reg_stall & (1 << ix86_tune)))) || ((((enum machine_mode) (recog_data.operand[0])->mode)) == DImode && 0)) && ((recog_data.operand_mode[1]) == HImode || (recog_data.operand_mode[1]) == SImode || ((recog_data.operand_mode[1]) == QImode && (0 || !(x86_partial_reg_stall & (1 << ix86_tune)))) || ((recog_data.operand_mode[1]) == DImode && 0))))
                                )
    {
      rtx previnsn = prev_real_insn (insn);
      rtx dest
 = rtl_hooks.gen_lowpart (recog_data.operand_mode[1],
         recog_data.operand[0]);
      rtx newinsn
 = emit_insn_before (gen_move_insn (dest, recog_data.operand[1]), insn);
      if (previnsn == 0 || ((enum rtx_code) (previnsn)->code) == JUMP_INSN)
 {
   basic_block b;
   for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = b->next_bb)
     if (insn == (b)->head_)
       (b)->head_ = newinsn;
 }
      (((reg_n_info)->data.reg[(((recog_data.operand[0])->u.fld[0]).rtuint)])->sets)++;
      (((reg_n_info)->data.reg[(((recog_data.operand[0])->u.fld[0]).rtuint)])->refs)++;
      (((reg_n_info)->data.reg[(((recog_data.operand[0])->u.fld[0]).rtuint)])->freq) += frequency;
      *recog_data.operand_loc[1] = recog_data.operand[0];
      (((reg_n_info)->data.reg[(((recog_data.operand[0])->u.fld[0]).rtuint)])->refs)++;
      (((reg_n_info)->data.reg[(((recog_data.operand[0])->u.fld[0]).rtuint)])->freq) += frequency;
      for (i = recog_data.n_dups - 1; i >= 0; i--)
 if (recog_data.dup_num[i] == 1)
   {
     *recog_data.dup_loc[i] = recog_data.operand[0];
     (((reg_n_info)->data.reg[(((recog_data.operand[0])->u.fld[0]).rtuint)])->refs)++;
     (((reg_n_info)->data.reg[(((recog_data.operand[0])->u.fld[0]).rtuint)])->freq) += frequency;
   }
      return (((newinsn)->u.fld[1]).rtx1);
    }
  record_operand_costs (insn, op_costs, reg_pref);
  for (i = 0; i < recog_data.n_operands; i++)
    if ((((enum rtx_code) (recog_data.operand[i])->code) == REG)
 && (((recog_data.operand[i])->u.fld[0]).rtuint) >= 53)
      {
 int regno = (((recog_data.operand[i])->u.fld[0]).rtuint);
 struct costs *p = &costs[regno], *q = &op_costs[i];
 p->mem_cost += q->mem_cost * frequency;
 for (j = 0; j < ((int) LIM_REG_CLASSES); j++)
   p->cost[j] += q->cost[j] * frequency;
      }
  return insn;
}
static void
init_reg_autoinc (void)
{
}
void
regclass (rtx f, int nregs, FILE *dump)
{
  rtx insn;
  int i;
  int pass;
  init_recog ();
  costs = xmalloc (nregs * sizeof (struct costs));
  for (pass = 0; pass <= flag_expensive_optimizations; pass++)
    {
      basic_block bb;
      if (dump)
 fprintf (dump, "\n\nPass %i\n\n",pass);
      memset (costs, 0, nregs * sizeof (struct costs));
      if (!optimize)
 {
   frequency = 1000;
   for (insn = f; insn; insn = (((insn)->u.fld[2]).rtx1))
     insn = scan_one_insn (insn, pass);
 }
      else
 for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
   {
     frequency = (optimize_size || (flag_branch_probabilities && !ENTRY_BLOCK_PTR->count) ? 1000 : ((bb)->frequency * 1000 / 10000) ? ((bb)->frequency * 1000 / 10000) : 1);
     for (insn = (bb)->head_; ; insn = (((insn)->u.fld[2]).rtx1))
       {
  insn = scan_one_insn (insn, pass);
  if (insn == (bb)->end_)
    break;
       }
   }
      if (pass == 0)
 reg_pref = reg_pref_buffer;
      if (dump)
 {
   dump_regclass (dump);
   fprintf (dump,"\n");
 }
      for (i = 53; i < nregs; i++)
 {
   int best_cost = (1 << ((8 * 4) - 2)) - 1;
   enum reg_class best = ALL_REGS, alt = NO_REGS;
   int class;
   struct costs *p = &costs[i];
   if (optimize && !(((reg_n_info)->data.reg[i])->refs) && !(((reg_n_info)->data.reg[i])->sets))
     continue;
   for (class = (int) ALL_REGS - 1; class > 0; class--)
     {
       if (!contains_reg_of_mode [class][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode)]
    || invalid_mode_change_p (i, (enum reg_class) class,
         ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode))
    )
  ;
       else if (p->cost[class] < best_cost)
  {
    best_cost = p->cost[class];
    best = (enum reg_class) class;
  }
       else if (p->cost[class] == best_cost)
  best = reg_class_subunion[(int) best][class];
     }
   if ((pass == 1 || dump) || ! flag_expensive_optimizations)
     for (class = 0; class < ((int) LIM_REG_CLASSES); class++)
       if (p->cost[class] < p->mem_cost
    && (reg_class_size[(int) reg_class_subunion[(int) alt][class]]
        > reg_class_size[(int) alt])
    && ! invalid_mode_change_p (i, (enum reg_class) class,
           ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode))
    )
  alt = reg_class_subunion[(int) alt][class];
   if (alt == best)
     alt = NO_REGS;
   if (dump
       && (reg_pref[i].prefclass != (int) best
    || reg_pref[i].altclass != (int) alt))
     {
       static const char *const reg_class_names2[] = { "NO_REGS", "AREG", "DREG", "CREG", "BREG", "SIREG", "DIREG", "AD_REGS", "Q_REGS", "NON_Q_REGS", "INDEX_REGS", "LEGACY_REGS", "GENERAL_REGS", "FP_TOP_REG", "FP_SECOND_REG", "FLOAT_REGS", "SSE_REGS", "MMX_REGS", "FP_TOP_SSE_REGS", "FP_SECOND_SSE_REGS", "FLOAT_SSE_REGS", "FLOAT_INT_REGS", "INT_SSE_REGS", "FLOAT_INT_SSE_REGS", "ALL_REGS" };
       fprintf (dump, "  Register %i", i);
       if (alt == ALL_REGS || best == ALL_REGS)
  fprintf (dump, " pref %s\n", reg_class_names2[(int) best]);
       else if (alt == NO_REGS)
  fprintf (dump, " pref %s or none\n", reg_class_names2[(int) best]);
       else
  fprintf (dump, " pref %s, else %s\n",
    reg_class_names2[(int) best],
    reg_class_names2[(int) alt]);
     }
   reg_pref[i].prefclass = (int) best;
   reg_pref[i].altclass = (int) alt;
 }
    }
  free (costs);
}
static void
record_reg_classes (int n_alts, int n_ops, rtx *ops,
      enum machine_mode *modes, const char **constraints,
      rtx insn, struct costs *op_costs,
      struct reg_pref *reg_pref)
{
  int alt;
  int i, j;
  rtx set;
  for (alt = 0; alt < n_alts; alt++)
    {
      struct costs this_op_costs[30];
      int alt_fail = 0;
      int alt_cost = 0;
      enum reg_class classes[30];
      int allows_mem[30];
      int class;
      for (i = 0; i < n_ops; i++)
 {
   const char *p = constraints[i];
   rtx op = ops[i];
   enum machine_mode mode = modes[i];
   int allows_addr = 0;
   int win = 0;
   unsigned char c;
   classes[i] = NO_REGS;
   allows_mem[i] = 0;
   if (*p == 0)
     {
       if ((((enum rtx_code) (op)->code) == REG) && (((op)->u.fld[0]).rtuint) >= 53)
  memset (&this_op_costs[i], 0, sizeof this_op_costs[i]);
       continue;
     }
   while (*p == '%' || *p == '=' || *p == '+' || *p == '&')
     p++;
   if (p[0] >= '0' && p[0] <= '0' + i && (p[1] == ',' || p[1] == 0))
     {
       j = p[0] - '0';
       classes[i] = classes[j];
       allows_mem[i] = allows_mem[j];
       if (!(((enum rtx_code) (op)->code) == REG) || (((op)->u.fld[0]).rtuint) < 53)
  {
    if (rtx_equal_p (ops[j], op))
      win = 1;
    else if (classes[j] != NO_REGS)
      alt_cost += compute_copy_cost (op, mode, classes[j], 1), win = 1;
  }
       else if (!(((enum rtx_code) (ops[j])->code) == REG)
         || (((ops[j])->u.fld[0]).rtuint) < 53)
  {
    if (classes[j] == NO_REGS)
      alt_fail = 1;
    else
      alt_cost += compute_copy_cost (ops[j], mode, classes[j], 1);
  }
       else
  {
    struct costs *pp = &this_op_costs[i];
    for (class = 0; class < ((int) LIM_REG_CLASSES); class++)
      pp->cost[class]
        = ((recog_data.operand_type[i] != OP_OUT
     ? may_move_in_cost[mode][class][(int) classes[i]]
     : 0)
    + (recog_data.operand_type[i] != OP_IN
       ? may_move_out_cost[mode][(int) classes[i]][class]
       : 0));
    pp->mem_cost
      = ((recog_data.operand_type[i] != OP_IN
          ? ix86_memory_move_cost ((mode), (classes[i]), (0))
   : 0)
         + (recog_data.operand_type[i] != OP_OUT
     ? ix86_memory_move_cost ((mode), (classes[i]), (1))
     : 0) - allows_mem[i]);
    if (reg_pref)
      alt_cost
        += (may_move_in_cost[mode]
     [(unsigned char) reg_pref[(((op)->u.fld[0]).rtuint)].prefclass]
     [(int) classes[i]]);
    if ((((ops[i])->u.fld[0]).rtuint) != (((ops[j])->u.fld[0]).rtuint)
        && ! find_reg_note (insn, REG_DEAD, op))
      alt_cost += 2;
    while (*p && *p++ != ',')
      ;
    constraints[i] = p;
    continue;
  }
     }
   while ((c = *p))
     {
       switch (c)
  {
  case ',':
    break;
  case '*':
    c = *++p;
    break;
  case '?':
    alt_cost += 2;
  case '!': case '#': case '&':
  case '0': case '1': case '2': case '3': case '4':
  case '5': case '6': case '7': case '8': case '9':
    break;
  case 'p':
    allows_addr = 1;
    win = address_operand (op, ((enum machine_mode) (op)->mode));
    classes[i]
      = reg_class_subunion[(int) classes[i]]
        [(int) GENERAL_REGS];
    break;
  case 'm': case 'o': case 'V':
    allows_mem[i] = 1;
    if ((((enum rtx_code) (op)->code) == MEM))
      win = 1;
    break;
  case '<':
    if ((((enum rtx_code) (op)->code) == MEM)
        && (((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == PRE_DEC
     || ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == POST_DEC))
      win = 1;
    break;
  case '>':
    if ((((enum rtx_code) (op)->code) == MEM)
        && (((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == PRE_INC
     || ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == POST_INC))
      win = 1;
    break;
  case 'E':
  case 'F':
    if (((enum rtx_code) (op)->code) == CONST_DOUBLE
        || (((enum rtx_code) (op)->code) == CONST_VECTOR
     && (mode_class[((enum machine_mode) (op)->mode)]
         == MODE_VECTOR_FLOAT)))
      win = 1;
    break;
  case 'G':
  case 'H':
    if (((enum rtx_code) (op)->code) == CONST_DOUBLE
        && ((c) == 'G' ? standard_80387_constant_p (op) : 0))
      win = 1;
    break;
  case 's':
    if (((enum rtx_code) (op)->code) == CONST_INT
        || (((enum rtx_code) (op)->code) == CONST_DOUBLE
     && ((enum machine_mode) (op)->mode) == VOIDmode))
      break;
  case 'i':
    if (((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR)
        && (! flag_pic || legitimate_pic_operand_p (op))
        )
      win = 1;
    break;
  case 'n':
    if (((enum rtx_code) (op)->code) == CONST_INT
        || (((enum rtx_code) (op)->code) == CONST_DOUBLE
     && ((enum machine_mode) (op)->mode) == VOIDmode))
      win = 1;
    break;
  case 'I':
  case 'J':
  case 'K':
  case 'L':
  case 'M':
  case 'N':
  case 'O':
  case 'P':
    if (((enum rtx_code) (op)->code) == CONST_INT
        && ((c) == 'I' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 31 : (c) == 'J' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 63 : (c) == 'K' ? (((op)->u.hwint[0])) >= -128 && (((op)->u.hwint[0])) <= 127 : (c) == 'L' ? (((op)->u.hwint[0])) == 0xff || (((op)->u.hwint[0])) == 0xffff : (c) == 'M' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 3 : (c) == 'N' ? (((op)->u.hwint[0])) >= 0 && (((op)->u.hwint[0])) <= 255 : 0))
      win = 1;
    break;
  case 'X':
    win = 1;
    break;
  case 'g':
    if ((((enum rtx_code) (op)->code) == MEM)
        || (((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR)
     && (! flag_pic || legitimate_pic_operand_p (op))
     ))
      win = 1;
    allows_mem[i] = 1;
  case 'r':
    classes[i]
      = reg_class_subunion[(int) classes[i]][(int) GENERAL_REGS];
    break;
  default:
    if (((c) == 'r' ? GENERAL_REGS : NO_REGS) != NO_REGS)
      classes[i]
        = reg_class_subunion[(int) classes[i]]
   [(int) ((c) == 'r' ? GENERAL_REGS : NO_REGS)];
    else if (((c) == 'e' ? x86_64_sign_extended_value (op) : (c) == 'Z' ? x86_64_zero_extended_value (op) : (c) == 'C' ? standard_sse_constant_p (op) : 0))
      win = 1;
    if (0)
      {
        allows_mem[i] = 1;
        if ((((enum rtx_code) (op)->code) == MEM))
   win = 1;
      }
    if (0)
      {
        allows_addr = 1;
        if (address_operand (op, ((enum machine_mode) (op)->mode)))
   win = 1;
        classes[i]
   = reg_class_subunion[(int) classes[i]]
     [(int) GENERAL_REGS];
      }
    break;
  }
       p += 1;
       if (c == ',')
  break;
     }
   constraints[i] = p;
   if ((((enum rtx_code) (op)->code) == REG) && (((op)->u.fld[0]).rtuint) >= 53)
     {
       if (classes[i] == NO_REGS)
  {
    alt_fail = 1;
  }
       else
  {
    struct costs *pp = &this_op_costs[i];
    for (class = 0; class < ((int) LIM_REG_CLASSES); class++)
      pp->cost[class]
        = ((recog_data.operand_type[i] != OP_OUT
     ? may_move_in_cost[mode][class][(int) classes[i]]
     : 0)
    + (recog_data.operand_type[i] != OP_IN
       ? may_move_out_cost[mode][(int) classes[i]][class]
       : 0));
    pp->mem_cost
      = ((recog_data.operand_type[i] != OP_IN
          ? ix86_memory_move_cost ((mode), (classes[i]), (0))
   : 0)
         + (recog_data.operand_type[i] != OP_OUT
     ? ix86_memory_move_cost ((mode), (classes[i]), (1))
     : 0) - allows_mem[i]);
    if (reg_pref)
      alt_cost
        += (may_move_in_cost[mode]
     [(unsigned char) reg_pref[(((op)->u.fld[0]).rtuint)].prefclass]
     [(int) classes[i]]);
  }
     }
   else if (win
     || ((((enum rtx_code) (op)->code) == REG)
         && reg_fits_class_p (op, classes[i], 0, ((enum machine_mode) (op)->mode))))
     ;
   else if (classes[i] != NO_REGS)
     {
       if (recog_data.operand_type[i] != OP_OUT)
  alt_cost += compute_copy_cost (op, mode, classes[i], 1);
       if (recog_data.operand_type[i] != OP_IN)
  alt_cost += compute_copy_cost (op, mode, classes[i], 0);
     }
   else if (((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR) && (allows_addr || allows_mem[i]))
     alt_cost += ix86_memory_move_cost ((mode), (classes[i]), (1));
   else
     alt_fail = 1;
 }
      if (alt_fail)
 continue;
      for (i = 0; i < n_ops; i++)
 if ((((enum rtx_code) (ops[i])->code) == REG)
     && (((ops[i])->u.fld[0]).rtuint) >= 53)
   {
     struct costs *pp = &op_costs[i], *qq = &this_op_costs[i];
     int scale = 1 + (recog_data.operand_type[i] == OP_INOUT);
     pp->mem_cost = ((pp->mem_cost) < ((qq->mem_cost + alt_cost) * scale) ? (pp->mem_cost) : ((qq->mem_cost + alt_cost) * scale))
                                      ;
     for (class = 0; class < ((int) LIM_REG_CLASSES); class++)
       pp->cost[class] = ((pp->cost[class]) < ((qq->cost[class] + alt_cost) * scale) ? (pp->cost[class]) : ((qq->cost[class] + alt_cost) * scale))
                                              ;
   }
    }
  if ((set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != 0
      && ops[0] == (((set)->u.fld[0]).rtx1) && ops[1] == (((set)->u.fld[1]).rtx1)
      && (((enum rtx_code) (ops[0])->code) == REG) && (((enum rtx_code) (ops[1])->code) == REG)
      && find_regno_note (insn, REG_DEAD, (((ops[1])->u.fld[0]).rtuint)))
    for (i = 0; i <= 1; i++)
      if ((((ops[i])->u.fld[0]).rtuint) >= 53)
 {
   unsigned int regno = (((ops[!i])->u.fld[0]).rtuint);
   enum machine_mode mode = ((enum machine_mode) (ops[!i])->mode);
   int class;
   unsigned int nr;
   if (regno >= 53 && reg_pref != 0)
     {
       enum reg_class pref = reg_pref[regno].prefclass;
       if ((reg_class_size[(unsigned char) pref]
     == (unsigned) (!reg_classes_intersect_p ((pref), GENERAL_REGS) ? ((mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((((mode) == XFmode ? 12 : ((unsigned short) mode_size[mode]))) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))))
    && ix86_register_move_cost ((mode), (pref), (pref)) < 10 * 2)
  op_costs[i].cost[(unsigned char) pref] = -1;
     }
   else if (regno < 53)
     for (class = 0; class < ((int) LIM_REG_CLASSES); class++)
       if ((!!((reg_class_contents[class])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
    && reg_class_size[class] == (unsigned) (!reg_classes_intersect_p ((class), GENERAL_REGS) ? ((mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((((mode) == XFmode ? 12 : ((unsigned short) mode_size[mode]))) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))))
  {
    if (reg_class_size[class] == 1)
      op_costs[i].cost[class] = -1;
    else
      {
        for (nr = 0; nr < (unsigned) hard_regno_nregs[regno][mode]; nr++)
   {
     if (! (!!((reg_class_contents[class])[(regno + nr) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + nr) % ((unsigned) (8 * 4))))))
                    )
       break;
   }
        if (nr == (unsigned) hard_regno_nregs[regno][mode])
   op_costs[i].cost[class] = -1;
      }
  }
 }
}
static int
compute_copy_cost (rtx x, enum machine_mode mode ,
    enum reg_class class, int to_p )
{
  enum reg_class secondary_class = NO_REGS;
  if (((enum rtx_code) (x)->code) == SCRATCH)
    return 0;
  class = ix86_preferred_reload_class ((x), (class));
  if (! to_p)
    secondary_class = (((class) == GENERAL_REGS || (class) == LEGACY_REGS || (class) == INDEX_REGS) && !0 && (mode) == QImode ? Q_REGS : NO_REGS);
  if (secondary_class != NO_REGS)
    return (move_cost[mode][(int) secondary_class][(int) class]
     + compute_copy_cost (x, mode, secondary_class, 2));
  if ((((enum rtx_code) (x)->code) == MEM) || class == NO_REGS)
    return ix86_memory_move_cost ((mode), (class), (to_p));
  else if ((((enum rtx_code) (x)->code) == REG))
    return move_cost[mode][(int) (regclass_map[(((x)->u.fld[0]).rtuint)])][(int) class];
  else
    return ((1) * 4);
}
static void
record_address_regs (rtx x, enum reg_class class, int scale)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case CONST_INT:
    case CONST:
    case CC0:
    case PC:
    case SYMBOL_REF:
    case LABEL_REF:
      return;
    case PLUS:
      {
 rtx arg0 = (((x)->u.fld[0]).rtx1);
 rtx arg1 = (((x)->u.fld[1]).rtx1);
 enum rtx_code code0 = ((enum rtx_code) (arg0)->code);
 enum rtx_code code1 = ((enum rtx_code) (arg1)->code);
 if (code0 == SUBREG)
   arg0 = (((arg0)->u.fld[0]).rtx1), code0 = ((enum rtx_code) (arg0)->code);
 if (code1 == SUBREG)
   arg1 = (((arg1)->u.fld[0]).rtx1), code1 = ((enum rtx_code) (arg1)->code);
 if (2 == 1)
   record_address_regs (arg0, class, scale);
 else if (INDEX_REGS == GENERAL_REGS)
   {
     record_address_regs (arg0, class, scale);
     if (! ((rtx_class[(int) (((enum rtx_code) (arg1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (arg1)->code) == CONST_VECTOR))
       record_address_regs (arg1, class, scale);
   }
 else if (code1 == CONST_INT || code1 == CONST_DOUBLE)
   record_address_regs (arg0, class, scale);
 else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF)
   record_address_regs (arg0, INDEX_REGS, scale);
 else if (code0 == REG && code1 == REG
   && (((arg0)->u.fld[0]).rtuint) < 53
   && (((((arg0)->u.fld[0]).rtuint) <= 7 || (((arg0)->u.fld[0]).rtuint) == 16 || (((arg0)->u.fld[0]).rtuint) == 20 || ((((arg0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (((arg0)->u.fld[0]).rtuint) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (((arg0)->u.fld[0]).rtuint) >= 53) || ((((arg0)->u.fld[0]).rtuint) < 7 || ((((arg0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (((arg0)->u.fld[0]).rtuint) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (((arg0)->u.fld[0]).rtuint) >= 53)))
   record_address_regs (arg1,
          ((((arg0)->u.fld[0]).rtuint) <= 7 || (((arg0)->u.fld[0]).rtuint) == 16 || (((arg0)->u.fld[0]).rtuint) == 20 || ((((arg0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (((arg0)->u.fld[0]).rtuint) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (((arg0)->u.fld[0]).rtuint) >= 53)
          ? INDEX_REGS : GENERAL_REGS,
          scale);
 else if (code0 == REG && code1 == REG
   && (((arg1)->u.fld[0]).rtuint) < 53
   && (((((arg1)->u.fld[0]).rtuint) <= 7 || (((arg1)->u.fld[0]).rtuint) == 16 || (((arg1)->u.fld[0]).rtuint) == 20 || ((((arg1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (((arg1)->u.fld[0]).rtuint) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (((arg1)->u.fld[0]).rtuint) >= 53) || ((((arg1)->u.fld[0]).rtuint) < 7 || ((((arg1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (((arg1)->u.fld[0]).rtuint) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (((arg1)->u.fld[0]).rtuint) >= 53)))
   record_address_regs (arg0,
          ((((arg1)->u.fld[0]).rtuint) <= 7 || (((arg1)->u.fld[0]).rtuint) == 16 || (((arg1)->u.fld[0]).rtuint) == 20 || ((((arg1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (((arg1)->u.fld[0]).rtuint) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (((arg1)->u.fld[0]).rtuint) >= 53)
          ? INDEX_REGS : GENERAL_REGS,
          scale);
 else if ((code0 == REG && (((arg0))->frame_related))
   || code1 == MULT)
   {
     record_address_regs (arg0, GENERAL_REGS, scale);
     record_address_regs (arg1, INDEX_REGS, scale);
   }
 else if ((code1 == REG && (((arg1))->frame_related))
   || code0 == MULT)
   {
     record_address_regs (arg0, INDEX_REGS, scale);
     record_address_regs (arg1, GENERAL_REGS, scale);
   }
 else
   {
     record_address_regs (arg0, GENERAL_REGS,
     scale / 2);
     record_address_regs (arg0, INDEX_REGS, scale / 2);
     record_address_regs (arg1, GENERAL_REGS,
     scale / 2);
     record_address_regs (arg1, INDEX_REGS, scale / 2);
   }
      }
      break;
    case POST_MODIFY:
    case PRE_MODIFY:
      record_address_regs ((((x)->u.fld[0]).rtx1), GENERAL_REGS,
      2 * scale);
      if ((((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == REG))
 record_address_regs (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1),
        INDEX_REGS, 2 * scale);
      break;
    case POST_INC:
    case PRE_INC:
    case POST_DEC:
    case PRE_DEC:
      record_address_regs ((((x)->u.fld[0]).rtx1), class, 2 * scale);
      break;
    case REG:
      {
 struct costs *pp = &costs[(((x)->u.fld[0]).rtuint)];
 int i;
 pp->mem_cost += (ix86_memory_move_cost (((0 ? DImode : SImode)), (class), (1)) * scale) / 2;
 for (i = 0; i < ((int) LIM_REG_CLASSES); i++)
   pp->cost[i] += (may_move_in_cost[(0 ? DImode : SImode)][i][(int) class] * scale) / 2;
      }
      break;
    default:
      {
 const char *fmt = (rtx_format[(int) (code)]);
 int i;
 for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
   if (fmt[i] == 'e')
     record_address_regs ((((x)->u.fld[i]).rtx1), class, scale);
      }
    }
}
static short *renumber;
static size_t regno_allocated;
static unsigned int reg_n_max;
void
allocate_reg_info (size_t num_regs, int new_p, int renumber_p)
{
  size_t size_info;
  size_t size_renumber;
  size_t min = (new_p) ? 0 : reg_n_max;
  struct reg_info_data *reg_data;
  if (num_regs > regno_allocated)
    {
      size_t old_allocated = regno_allocated;
      regno_allocated = num_regs + (num_regs / 20);
      size_renumber = regno_allocated * sizeof (short);
      if (!reg_n_info)
 {
   reg_n_info = varray_init (regno_allocated, VARRAY_DATA_REG, "reg_n_info");
   renumber = xmalloc (size_renumber);
   reg_pref_buffer = xmalloc (regno_allocated
         * sizeof (struct reg_pref));
 }
      else
 {
   ((reg_n_info) = varray_grow (reg_n_info, regno_allocated));
   if (new_p)
     {
       free ((char *) renumber);
       free ((char *) reg_pref);
       renumber = xmalloc (size_renumber);
       reg_pref_buffer = xmalloc (regno_allocated
      * sizeof (struct reg_pref));
     }
   else
     {
       renumber = xrealloc (renumber, size_renumber);
       reg_pref_buffer = xrealloc (reg_pref_buffer,
       regno_allocated
       * sizeof (struct reg_pref));
     }
 }
      size_info = (regno_allocated - old_allocated) * sizeof (reg_info)
 + sizeof (struct reg_info_data) - sizeof (reg_info);
      reg_data = xcalloc (size_info, 1);
      reg_data->min_index = old_allocated;
      reg_data->max_index = regno_allocated - 1;
      reg_data->next = reg_info_head;
      reg_info_head = reg_data;
    }
  reg_n_max = num_regs;
  if (min < num_regs)
    {
      for (reg_data = reg_info_head;
    reg_data && reg_data->max_index >= min;
    reg_data = reg_data->next)
 {
   size_t min_index = reg_data->min_index;
   size_t max_index = reg_data->max_index;
   size_t max = ((max_index) < (num_regs) ? (max_index) : (num_regs));
   size_t local_min = min - min_index;
   size_t i;
   if (reg_data->min_index > num_regs)
     continue;
   if (min < min_index)
     local_min = 0;
   if (!reg_data->used_p)
     reg_data->used_p = 1;
   else
     memset (&reg_data->data[local_min], 0,
      sizeof (reg_info) * (max - min_index - local_min + 1));
   for (i = min_index+local_min; i <= max; i++)
     {
       ((reg_n_info)->data.reg[i]) = &reg_data->data[i-min_index];
       (((reg_n_info)->data.reg[i])->basic_block1) = -1;
       renumber[i] = -1;
       reg_pref_buffer[i].prefclass = (char) NO_REGS;
       reg_pref_buffer[i].altclass = (char) NO_REGS;
     }
 }
    }
  if (reg_pref)
    reg_pref = reg_pref_buffer;
  if (renumber_p)
    reg_renumber = renumber;
  ;
}
void
free_reg_info (void)
{
  if (reg_n_info)
    {
      struct reg_info_data *reg_data;
      struct reg_info_data *reg_next;
      do { if (reg_n_info) { free (reg_n_info); reg_n_info = (varray_type) 0; } } while (0);
      for (reg_data = reg_info_head; reg_data; reg_data = reg_next)
 {
   reg_next = reg_data->next;
   free ((char *) reg_data);
 }
      free (reg_pref_buffer);
      reg_pref_buffer = (struct reg_pref *) 0;
      reg_info_head = (struct reg_info_data *) 0;
      renumber = (short *) 0;
    }
  regno_allocated = 0;
  reg_n_max = 0;
}
int max_parallel;
static int max_set_parallel;
void
reg_scan (rtx f, unsigned int nregs, int repeat )
{
  rtx insn;
  timevar_push (TV_REG_SCAN);
  allocate_reg_info (nregs, 1, 0);
  max_parallel = 3;
  max_set_parallel = 0;
  for (insn = f; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      {
 rtx pat = (((insn)->u.fld[5]).rtx1);
 if (((enum rtx_code) (pat)->code) == PARALLEL
     && (((((pat)->u.fld[0]).rtvec1))->num_elem) > max_parallel)
   max_parallel = (((((pat)->u.fld[0]).rtvec1))->num_elem);
 reg_scan_mark_refs (pat, insn, 0, 0);
 if ((((insn)->u.fld[8]).rtx1))
   reg_scan_mark_refs ((((insn)->u.fld[8]).rtx1), insn, 1, 0);
      }
  max_parallel += max_set_parallel;
  timevar_pop (TV_REG_SCAN);
}
void
reg_scan_update (rtx first, rtx last, unsigned int old_max_regno)
{
  rtx insn;
  allocate_reg_info (max_reg_num (), 0, 0);
  for (insn = first; insn != last; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      {
 rtx pat = (((insn)->u.fld[5]).rtx1);
 if (((enum rtx_code) (pat)->code) == PARALLEL
     && (((((pat)->u.fld[0]).rtvec1))->num_elem) > max_parallel)
   max_parallel = (((((pat)->u.fld[0]).rtvec1))->num_elem);
 reg_scan_mark_refs (pat, insn, 0, old_max_regno);
 if ((((insn)->u.fld[8]).rtx1))
   reg_scan_mark_refs ((((insn)->u.fld[8]).rtx1), insn, 1, old_max_regno);
      }
}
static void
reg_scan_mark_refs (rtx x, rtx insn, int note_flag, unsigned int min_regno)
{
  enum rtx_code code;
  rtx dest;
  rtx note;
  if (!x)
    return;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CC0:
    case PC:
    case SYMBOL_REF:
    case LABEL_REF:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      return;
    case REG:
      {
 unsigned int regno = (((x)->u.fld[0]).rtuint);
 if (regno >= min_regno)
   {
     (((reg_n_info)->data.reg[regno])->last_note_uid) = (((insn)->u.fld[0]).rtint);
     if (!note_flag)
       (((reg_n_info)->data.reg[regno])->last_uid) = (((insn)->u.fld[0]).rtint);
     if ((((reg_n_info)->data.reg[regno])->first_uid) == 0)
       (((reg_n_info)->data.reg[regno])->first_uid) = (((insn)->u.fld[0]).rtint);
     if (min_regno)
       (((reg_n_info)->data.reg[regno])->refs)++;
   }
      }
      break;
    case EXPR_LIST:
      if ((((x)->u.fld[0]).rtx1))
 reg_scan_mark_refs ((((x)->u.fld[0]).rtx1), insn, note_flag, min_regno);
      if ((((x)->u.fld[1]).rtx1))
 reg_scan_mark_refs ((((x)->u.fld[1]).rtx1), insn, note_flag, min_regno);
      break;
    case INSN_LIST:
      if ((((x)->u.fld[1]).rtx1))
 reg_scan_mark_refs ((((x)->u.fld[1]).rtx1), insn, note_flag, min_regno);
      break;
    case CLOBBER:
      {
 rtx reg = (((x)->u.fld[0]).rtx1);
 if ((((enum rtx_code) (reg)->code) == REG)
     && (((reg)->u.fld[0]).rtuint) >= min_regno)
   {
     (((reg_n_info)->data.reg[(((reg)->u.fld[0]).rtuint)])->sets)++;
     (((reg_n_info)->data.reg[(((reg)->u.fld[0]).rtuint)])->refs)++;
   }
 else if ((((enum rtx_code) (reg)->code) == MEM))
   reg_scan_mark_refs ((((reg)->u.fld[0]).rtx1), insn, note_flag, min_regno);
      }
      break;
    case SET:
      for (dest = (((x)->u.fld[0]).rtx1);
    ((enum rtx_code) (dest)->code) == SUBREG || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART
    || ((enum rtx_code) (dest)->code) == ZERO_EXTEND;
    dest = (((dest)->u.fld[0]).rtx1))
 ;
      if (((enum rtx_code) (dest)->code) == PARALLEL)
 max_set_parallel = ((max_set_parallel) > ((((((dest)->u.fld[0]).rtvec1))->num_elem) - 1) ? (max_set_parallel) : ((((((dest)->u.fld[0]).rtvec1))->num_elem) - 1));
      if ((((enum rtx_code) (dest)->code) == REG)
   && (((dest)->u.fld[0]).rtuint) >= min_regno)
 {
   (((reg_n_info)->data.reg[(((dest)->u.fld[0]).rtuint)])->sets)++;
   (((reg_n_info)->data.reg[(((dest)->u.fld[0]).rtuint)])->refs)++;
 }
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53
   && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= min_regno
   && (((reg_n_info)->data.reg[((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])->sets) == 1
   && ! ((((((x)->u.fld[0]).rtx1)))->volatil)
   && ! ((((((x)->u.fld[0]).rtx1)))->frame_related)
   && (((((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG)
        && ((((((x)->u.fld[1]).rtx1)))->frame_related))
       || ((((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == PLUS
     || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == LO_SUM)
    && ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
    && (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code) == REG)
    && (((((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1)))->frame_related))
       || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST
       || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == SYMBOL_REF
       || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == LABEL_REF
       || (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == HIGH
    && (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code) == CONST
        || ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code) == SYMBOL_REF
        || ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code) == LABEL_REF))
       || ((((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == PLUS
     || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == LO_SUM)
    && (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST
        || ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == SYMBOL_REF
        || ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == LABEL_REF))
       || ((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
    && (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == CONST
        || ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == SYMBOL_REF
        || ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == LABEL_REF))))
 ((((((x)->u.fld[0]).rtx1)))->frame_related) = 1;
      if ((((enum rtx_code) (dest)->code) == REG))
 {
   rtx src = (((x)->u.fld[1]).rtx1);
   while (((enum rtx_code) (src)->code) == SIGN_EXTEND
   || ((enum rtx_code) (src)->code) == ZERO_EXTEND
   || ((enum rtx_code) (src)->code) == TRUNCATE
   || (((enum rtx_code) (src)->code) == SUBREG && subreg_lowpart_p (src)))
     src = (((src)->u.fld[0]).rtx1);
   if (!(((dest)->u.fld[2]).rtreg) && (((enum rtx_code) (src)->code) == REG))
     (((dest)->u.fld[2]).rtreg) = (((src)->u.fld[2]).rtreg);
   if (!(((dest)->u.fld[2]).rtreg) && (((enum rtx_code) (src)->code) == MEM))
     set_reg_attrs_from_mem (dest, src);
 }
    default:
      {
 const char *fmt = (rtx_format[(int) (code)]);
 int i;
 for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
   {
     if (fmt[i] == 'e')
       reg_scan_mark_refs ((((x)->u.fld[i]).rtx1), insn, note_flag, min_regno);
     else if (fmt[i] == 'E' && (((x)->u.fld[i]).rtvec1) != 0)
       {
  int j;
  for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
    reg_scan_mark_refs ((((((x)->u.fld[i]).rtvec1))->elem[j]), insn, note_flag, min_regno);
       }
   }
      }
    }
}
int
reg_class_subset_p (enum reg_class c1, enum reg_class c2)
{
  if (c1 == c2) return 1;
  if (c2 == ALL_REGS)
  win:
    return 1;
  do { HARD_REG_ELT_TYPE *scan_xp_ = (reg_class_contents[(int) c1]), *scan_yp_ = (reg_class_contents[(int) c2]); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto win; } while (0)
        ;
  return 0;
}
int
reg_classes_intersect_p (enum reg_class c1, enum reg_class c2)
{
  HARD_REG_SET c;
  if (c1 == c2) return 1;
  if (c1 == ALL_REGS || c2 == ALL_REGS)
    return 1;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (c), *scan_fp_ = (reg_class_contents[(int) c1]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (c), *scan_fp_ = (reg_class_contents[(int) c2]); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_xp_ = (c), *scan_yp_ = (reg_class_contents[(int) NO_REGS]); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto lose; } while (0);
  return 1;
 lose:
  return 0;
}
void
regset_release_memory (void)
{
  bitmap_release_memory ();
}
void
cannot_change_mode_set_regs (HARD_REG_SET *used, enum machine_mode from,
        unsigned int regno)
{
  enum machine_mode to;
  int n, i;
  int start = regno * MAX_MACHINE_MODE;
  do { bitmap_element *ptr_ = (&subregs_of_mode)->first; unsigned int indx_ = (start) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (start) % (unsigned) (8 * 4); unsigned word_num_ = (start) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (n) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); if (n >= MAX_MACHINE_MODE + start) return; to = n - start; for (i = 0; i < 53; i++) if (! (!!((*used)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))) && (((unsigned short) mode_size[to]) < ((unsigned short) mode_size[from]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, ((regclass_map[i]))) || reg_classes_intersect_p (MMX_REGS, ((regclass_map[i]))) : ((unsigned short) mode_size[from]) != ((unsigned short) mode_size[to]) ? reg_classes_intersect_p (FLOAT_REGS, ((regclass_map[i]))) : 0)) ((*used)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
}
unsigned char
invalid_mode_change_p (unsigned int regno, enum reg_class class,
         enum machine_mode from_mode)
{
  enum machine_mode to_mode;
  int n;
  int start = regno * MAX_MACHINE_MODE;
  do { bitmap_element *ptr_ = (&subregs_of_mode)->first; unsigned int indx_ = (start) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (start) % (unsigned) (8 * 4); unsigned word_num_ = (start) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (n) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); if (n >= MAX_MACHINE_MODE + start) return 0; to_mode = n - start; if ((((unsigned short) mode_size[to_mode]) < ((unsigned short) mode_size[from_mode]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, (class)) || reg_classes_intersect_p (MMX_REGS, (class)) : ((unsigned short) mode_size[from_mode]) != ((unsigned short) mode_size[to_mode]) ? reg_classes_intersect_p (FLOAT_REGS, (class)) : 0)) return 1;; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
   ;
  return 0;
}
const struct ggc_root_tab gt_ggc_r_gt_regclass_h[] = {
  {
    &top_of_stack[0],
    1 * (MAX_MACHINE_MODE),
    sizeof (top_of_stack[0]),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static int perhaps_ends_bb_p (rtx);
static int optimize_reg_copy_1 (rtx, rtx, rtx);
static void optimize_reg_copy_2 (rtx, rtx, rtx);
static void optimize_reg_copy_3 (rtx, rtx, rtx);
static void copy_src_to_dest (rtx, rtx, rtx, int);
static int *regmove_bb_head;
struct match {
  int with[30];
  enum { READ, WRITE, READWRITE } use[30];
  int commutative[30];
  int early_clobber[30];
};
static rtx discover_flags_reg (void);
static void mark_flags_life_zones (rtx);
static void flags_set_1 (rtx, rtx, void *);
static int try_auto_increment (rtx, rtx, rtx, rtx, long, int);
static int find_matches (rtx, struct match *);
static void replace_in_call_usage (rtx *, unsigned int, rtx, rtx);
static int fixup_match_1 (rtx, rtx, rtx, rtx, rtx, int, int, int, FILE *);
static int reg_is_remote_constant_p (rtx, rtx, rtx);
static int stable_and_no_regs_but_for_p (rtx, rtx, rtx);
static int regclass_compatible_p (int, int);
static int replacement_quality (rtx);
static int fixup_match_2 (rtx, rtx, rtx, rtx, FILE *);
static int
regclass_compatible_p (int class0, int class1)
{
  return (class0 == class1
   || (reg_class_subset_p (class0, class1)
       && ! (((class0) == AREG) || ((class0) == DREG) || ((class0) == CREG) || ((class0) == BREG) || ((class0) == AD_REGS) || ((class0) == SIREG) || ((class0) == DIREG) || ((class0) == FP_TOP_REG) || ((class0) == FP_SECOND_REG)))
   || (reg_class_subset_p (class1, class0)
       && ! (((class1) == AREG) || ((class1) == DREG) || ((class1) == CREG) || ((class1) == BREG) || ((class1) == AD_REGS) || ((class1) == SIREG) || ((class1) == DIREG) || ((class1) == FP_TOP_REG) || ((class1) == FP_SECOND_REG))));
}
static int
try_auto_increment (rtx insn, rtx inc_insn, rtx inc_insn_set, rtx reg,
      long increment, int pre)
{
  enum rtx_code inc_code;
  rtx pset = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (pset)
    {
      rtx use = find_use_as_address (pset, reg, 0);
      if (use != 0 && use != (rtx) (size_t) 1)
 {
   int size = ((unsigned short) mode_size[((enum machine_mode) (use)->mode)]);
   if (0
       || (0
    && pre == 0 && (inc_code = POST_INC, increment == size))
       || (0
    && pre == 1 && (inc_code = PRE_INC, increment == size))
       || (0
    && pre == 0 && (inc_code = POST_DEC, increment == -size))
       || (0
    && pre == 1 && (inc_code = PRE_DEC, increment == -size))
   )
     {
       if (inc_insn_set)
  validate_change
    (inc_insn,
     &(((inc_insn_set)->u.fld[1]).rtx1),
     ((((((inc_insn_set)->u.fld[1]).rtx1))->u.fld[0]).rtx1), 1);
       validate_change (insn, &(((use)->u.fld[0]).rtx1),
          gen_rtx_fmt_e (inc_code, (0 ? DImode : SImode), reg), 1);
       if (apply_change_group ())
  {
    rtx note = find_reg_note (insn, REG_DEAD, reg);
    if (note)
      ((note)->mode = (REG_UNUSED));
    (((insn)->u.fld[8]).rtx1)
      = gen_rtx_fmt_ee (EXPR_LIST, (REG_INC), (reg), ((((insn)->u.fld[8]).rtx1)))
                            ;
    if (! inc_insn_set)
      delete_insn (inc_insn);
    return 1;
  }
     }
 }
    }
  return 0;
}
static rtx
discover_flags_reg (void)
{
  rtx tmp;
  tmp = gen_rtx_REG (word_mode, 10000);
  tmp = gen_add3_insn (tmp, tmp, (const_int_rtx[64 +2]));
  if (((enum rtx_code) (tmp)->code) == SET)
    return (rtx) 0;
  else if (((enum rtx_code) (tmp)->code) == PARALLEL)
    {
      int found;
      if ((((((tmp)->u.fld[0]).rtvec1))->num_elem) != 2)
 return (global_rtl[GR_PC]);
      tmp = (((((tmp)->u.fld[0]).rtvec1))->elem[1]);
      if (((enum rtx_code) (tmp)->code) != CLOBBER)
 return (global_rtl[GR_PC]);
      tmp = (((tmp)->u.fld[0]).rtx1);
      if (((enum rtx_code) (tmp)->code) == SUBREG
   && (((enum rtx_code) ((((tmp)->u.fld[0]).rtx1))->code) == REG)
   && ((((((tmp)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
 return (global_rtl[GR_PC]);
      found = ((((enum rtx_code) (tmp)->code) == REG) && (((tmp)->u.fld[0]).rtuint) < 53);
      return (found ? tmp : (rtx) 0);
    }
  return (global_rtl[GR_PC]);
}
static rtx flags_set_1_rtx;
static int flags_set_1_set;
static void
mark_flags_life_zones (rtx flags)
{
  int flags_regno;
  int flags_nregs;
  basic_block block;
  if (flags == (rtx) 0 || flags == (global_rtl[GR_PC]))
    {
      enum machine_mode mode = (flags ? HImode : VOIDmode);
      rtx insn;
      for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
 ((insn)->mode = (mode));
      return;
    }
  flags_regno = (((flags)->u.fld[0]).rtuint);
  flags_nregs = hard_regno_nregs[flags_regno][((enum machine_mode) (flags)->mode)];
  flags_set_1_rtx = flags;
  for (block = EXIT_BLOCK_PTR->prev_bb; block != ENTRY_BLOCK_PTR; block = block->prev_bb)
    {
      rtx insn, end;
      int live;
      insn = (block)->head_;
      end = (block)->end_;
      live = 0;
      {
 int i;
 for (i = 0; i < flags_nregs; ++i)
   live |= bitmap_bit_p (block->global_live_at_start, flags_regno + i)
                       ;
      }
      while (1)
 {
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       if (live && find_regno_note (insn, REG_DEAD, flags_regno))
  live = 0;
       ((insn)->mode = ((live ? HImode : VOIDmode)));
       flags_set_1_set = 0;
       note_stores ((((insn)->u.fld[5]).rtx1), flags_set_1, ((void *)0));
       if (flags_set_1_set)
  {
    live = 1;
    ((insn)->mode = (QImode));
  }
     }
   else
     ((insn)->mode = ((live ? HImode : VOIDmode)));
   if (insn == end)
     break;
   insn = (((insn)->u.fld[2]).rtx1);
 }
    }
}
static void
flags_set_1 (rtx x, rtx pat, void *data )
{
  if (((enum rtx_code) (pat)->code) == SET
      && reg_overlap_mentioned_p (x, flags_set_1_rtx))
    flags_set_1_set = 1;
}
static int *regno_src_regno;
static int
replacement_quality (rtx reg)
{
  int src_regno;
  if (!(((enum rtx_code) (reg)->code) == REG))
    return 0;
  if ((((reg_n_info)->data.reg[(((reg)->u.fld[0]).rtuint)])->live_length) < 0)
    return 0;
  src_regno = regno_src_regno[(((reg)->u.fld[0]).rtuint)];
  if (src_regno < 0)
    return 3;
  if (src_regno < 53)
    return 1;
  return 2;
}
static int perhaps_ends_bb_p (rtx insn)
{
  switch (((enum rtx_code) (insn)->code))
    {
    case CODE_LABEL:
    case JUMP_INSN:
      return 1;
    case CALL_INSN:
      if ((cfun->x_nonlocal_goto_handler_labels))
 return 1;
    default:
      return can_throw_internal (insn);
    }
}
static int
optimize_reg_copy_1 (rtx insn, rtx dest, rtx src)
{
  rtx p, q;
  rtx note;
  rtx dest_death = 0;
  int sregno = (((src)->u.fld[0]).rtuint);
  int dregno = (((dest)->u.fld[0]).rtuint);
  if (sregno == dregno
      || (1
   && (sregno < 53
       || dregno < 53))
      || sregno == 7 || dregno == 7)
    return 0;
  for (p = (((insn)->u.fld[2]).rtx1); p; p = (((p)->u.fld[2]).rtx1))
    {
      if (perhaps_ends_bb_p (p))
 break;
      else if (! ((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
 continue;
      if (reg_set_p (src, p) || reg_set_p (dest, p)
   || (sregno < 53
       && asm_noperands ((((p)->u.fld[5]).rtx1)) >= 0
       && reg_overlap_mentioned_p (src, (((p)->u.fld[5]).rtx1)))
   || (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == USE
       && reg_overlap_mentioned_p (src, ((((((p)->u.fld[5]).rtx1))->u.fld[0]).rtx1))))
 break;
      if ((note = find_regno_note (p, REG_DEAD, sregno)) != 0
   && ((enum machine_mode) ((((note)->u.fld[0]).rtx1))->mode) == ((enum machine_mode) (src)->mode))
 {
   int failed = 0;
   int d_length = 0;
   int s_length = 0;
   int d_n_calls = 0;
   int s_n_calls = 0;
   for (q = next_real_insn (insn);
        q != next_real_insn (p);
        q = next_real_insn (q))
     {
       if (reg_overlap_mentioned_p (src, (((q)->u.fld[5]).rtx1)))
  {
    if (sregno < 53
        && reg_mentioned_p (dest, (((q)->u.fld[5]).rtx1)))
      failed = 1;
    else if (validate_replace_rtx (src, dest, q)
      && (sregno >= 53
          || ! reg_overlap_mentioned_p (src,
            (((q)->u.fld[5]).rtx1))))
      ;
    else
      {
        validate_replace_rtx (dest, src, q);
        failed = 1;
      }
  }
       s_length++;
       if (dest_death)
  d_length++;
       if (q != p && ((enum rtx_code) (q)->code) == CALL_INSN)
  {
    s_n_calls++;
    if (dest_death)
      d_n_calls++;
  }
       if (dest_death == 0
    && (dest_death = find_regno_note (q, REG_DEAD, dregno)) != 0)
  {
    if (((enum machine_mode) ((((dest_death)->u.fld[0]).rtx1))->mode) != ((enum machine_mode) (dest)->mode))
      failed = 1, dest_death = 0;
    else
      remove_note (q, dest_death);
  }
     }
   if (! failed)
     {
       if (sregno >= 53)
  {
    if ((((reg_n_info)->data.reg[sregno])->live_length) >= 0)
      {
        (((reg_n_info)->data.reg[sregno])->live_length) -= s_length;
        if ((((reg_n_info)->data.reg[sregno])->live_length) < 2)
   (((reg_n_info)->data.reg[sregno])->live_length) = 2;
      }
    (((reg_n_info)->data.reg[sregno])->calls_crossed) -= s_n_calls;
  }
       remove_note (p, note);
       (((note)->u.fld[1]).rtx1) = (((insn)->u.fld[8]).rtx1);
       (((insn)->u.fld[8]).rtx1) = note;
     }
   if (! dest_death
       && (dest_death = find_regno_note (insn, REG_UNUSED, dregno)))
     {
       ((dest_death)->mode = ((enum machine_mode) (REG_DEAD)));
       remove_note (insn, dest_death);
     }
   if (dest_death)
     {
       (((dest_death)->u.fld[1]).rtx1) = (((p)->u.fld[8]).rtx1);
       (((p)->u.fld[8]).rtx1) = dest_death;
       if (dregno >= 53)
  {
    if ((((reg_n_info)->data.reg[dregno])->live_length) >= 0)
      (((reg_n_info)->data.reg[dregno])->live_length) += d_length;
    (((reg_n_info)->data.reg[dregno])->calls_crossed) += d_n_calls;
  }
     }
   return ! failed;
 }
      else if (sregno < 53
        && dead_or_set_p (p, src))
 break;
    }
  return 0;
}
static void
optimize_reg_copy_2 (rtx insn, rtx dest, rtx src)
{
  rtx p, q;
  rtx set;
  int sregno = (((src)->u.fld[0]).rtuint);
  int dregno = (((dest)->u.fld[0]).rtuint);
  for (p = (((insn)->u.fld[2]).rtx1); p; p = (((p)->u.fld[2]).rtx1))
    {
      if (perhaps_ends_bb_p (p))
 break;
      else if (! ((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
 continue;
      set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0);
      if (set && (((set)->u.fld[1]).rtx1) == dest && (((set)->u.fld[0]).rtx1) == src
   && find_reg_note (p, REG_DEAD, dest))
 {
   for (q = insn; q != (((p)->u.fld[2]).rtx1); q = (((q)->u.fld[2]).rtx1))
     if (((((enum rtx_code) (q)->code) == INSN) || (((enum rtx_code) (q)->code) == JUMP_INSN) || (((enum rtx_code) (q)->code) == CALL_INSN)))
       {
  if (reg_mentioned_p (dest, (((q)->u.fld[5]).rtx1)))
    (((q)->u.fld[5]).rtx1) = replace_rtx ((((q)->u.fld[5]).rtx1), dest, src);
       if (((enum rtx_code) (q)->code) == CALL_INSN)
  {
    (((reg_n_info)->data.reg[dregno])->calls_crossed)--;
    (((reg_n_info)->data.reg[sregno])->calls_crossed)++;
  }
       }
   remove_note (p, find_reg_note (p, REG_DEAD, dest));
   (((reg_n_info)->data.reg[dregno])->deaths)--;
   remove_note (insn, find_reg_note (insn, REG_DEAD, src));
   (((reg_n_info)->data.reg[sregno])->deaths)--;
   return;
 }
      if (reg_set_p (src, p)
   || find_reg_note (p, REG_DEAD, dest)
   || (((enum rtx_code) (p)->code) == CALL_INSN && (((reg_n_info)->data.reg[sregno])->calls_crossed) == 0))
 break;
    }
}
static void
optimize_reg_copy_3 (rtx insn, rtx dest, rtx src)
{
  rtx src_reg = (((src)->u.fld[0]).rtx1);
  int src_no = (((src_reg)->u.fld[0]).rtuint);
  int dst_no = (((dest)->u.fld[0]).rtuint);
  rtx p, set, subreg;
  enum machine_mode old_mode;
  if (src_no < 53
      || dst_no < 53
      || ! find_reg_note (insn, REG_DEAD, src_reg)
      || (((reg_n_info)->data.reg[src_no])->deaths) != 1
      || (((reg_n_info)->data.reg[src_no])->sets) != 1)
    return;
  for (p = (((insn)->u.fld[1]).rtx1); p && ! reg_set_p (src_reg, p); p = (((p)->u.fld[1]).rtx1))
    if (perhaps_ends_bb_p (p))
      break;
  if (! p)
    return;
  if (! (set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0))
      || !(((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == MEM)
      || find_reg_note (p, REG_EQUIV, (rtx) 0)
      || (((set)->u.fld[0]).rtx1) != src_reg)
    return;
  if (((((((set)->u.fld[1]).rtx1)))->volatil))
    return;
  if (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (src_reg)->mode)]) * 8)) <= ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (src)->mode)]) * 8))
      && !1
                                           )
    return;
  old_mode = ((enum machine_mode) (src_reg)->mode);
  ((src_reg)->mode = (((enum machine_mode) (src)->mode)));
  (((src)->u.fld[0]).rtx1) = (((set)->u.fld[1]).rtx1);
  validate_change (p, &(((set)->u.fld[1]).rtx1), src, 1);
  subreg = gen_lowpart_SUBREG (old_mode, src_reg);
  while (p = (((p)->u.fld[2]).rtx1), p != insn)
    {
      if (! ((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
 continue;
      validate_replace_rtx_group (src_reg, subreg, p);
    }
  validate_replace_rtx_group (src, src_reg, insn);
  if (! apply_change_group ())
    {
      ((src_reg)->mode = (old_mode));
      (((src)->u.fld[0]).rtx1) = src_reg;
    }
  else
    {
      rtx note = find_reg_note (p, REG_EQUAL, (rtx) 0);
      if (note)
 remove_note (p, note);
    }
}
static void
copy_src_to_dest (rtx insn, rtx src, rtx dest, int old_max_uid)
{
  rtx seq;
  rtx link;
  rtx next;
  rtx set;
  rtx move_insn;
  rtx *p_insn_notes;
  rtx *p_move_notes;
  int src_regno;
  int dest_regno;
  int bb;
  int insn_uid;
  int move_uid;
  if ((((enum rtx_code) (src)->code) == REG)
      && (((reg_n_info)->data.reg[(((src)->u.fld[0]).rtuint)])->live_length) > 0
      && (((enum rtx_code) (dest)->code) == REG)
      && !(((dest))->unchanging)
      && (((reg_n_info)->data.reg[(((dest)->u.fld[0]).rtuint)])->live_length) > 0
      && (set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != (rtx) 0
      && !reg_mentioned_p (dest, (((set)->u.fld[1]).rtx1))
      && ((enum machine_mode) (src)->mode) == ((enum machine_mode) (dest)->mode))
    {
      int old_num_regs = (cfun->emit->x_reg_rtx_no);
      start_sequence ();
      emit_move_insn (dest, src);
      seq = get_insns ();
      end_sequence ();
      if (old_num_regs != (cfun->emit->x_reg_rtx_no)
   || ! validate_replace_rtx (src, dest, insn))
 {
   (cfun->emit->x_reg_rtx_no) = old_num_regs;
   return;
 }
      emit_insn_before (seq, insn);
      move_insn = (((insn)->u.fld[1]).rtx1);
      p_move_notes = &(((move_insn)->u.fld[8]).rtx1);
      p_insn_notes = &(((insn)->u.fld[8]).rtx1);
      for (link = (((insn)->u.fld[8]).rtx1); link != (rtx) 0; link = next)
 {
   next = (((link)->u.fld[1]).rtx1);
   if ((((link)->u.fld[0]).rtx1) == src)
     {
       *p_move_notes = link;
       p_move_notes = &(((link)->u.fld[1]).rtx1);
     }
   else
     {
       *p_insn_notes = link;
       p_insn_notes = &(((link)->u.fld[1]).rtx1);
     }
 }
      *p_move_notes = (rtx) 0;
      *p_insn_notes = (rtx) 0;
      insn_uid = (((insn)->u.fld[0]).rtint);
      move_uid = (((move_insn)->u.fld[0]).rtint);
      if (insn_uid < old_max_uid)
 {
   bb = regmove_bb_head[insn_uid];
   if (bb >= 0)
     {
       ((((basic_block_info)->data.bb[(bb)])))->head_ = move_insn;
       regmove_bb_head[insn_uid] = -1;
     }
 }
      dest_regno = (((dest)->u.fld[0]).rtuint);
      (((reg_n_info)->data.reg[dest_regno])->sets) ++;
      (((reg_n_info)->data.reg[dest_regno])->live_length)++;
      if ((((reg_n_info)->data.reg[dest_regno])->first_uid) == insn_uid)
 (((reg_n_info)->data.reg[dest_regno])->first_uid) = move_uid;
      src_regno = (((src)->u.fld[0]).rtuint);
      if (! find_reg_note (move_insn, REG_DEAD, src))
 (((reg_n_info)->data.reg[src_regno])->live_length)++;
      if ((((reg_n_info)->data.reg[src_regno])->first_uid) == insn_uid)
 (((reg_n_info)->data.reg[src_regno])->first_uid) = move_uid;
      if ((((reg_n_info)->data.reg[src_regno])->last_uid) == insn_uid)
 (((reg_n_info)->data.reg[src_regno])->last_uid) = move_uid;
      if ((((reg_n_info)->data.reg[src_regno])->last_note_uid) == insn_uid)
 (((reg_n_info)->data.reg[src_regno])->last_note_uid) = move_uid;
    }
}
static int
reg_is_remote_constant_p (rtx reg, rtx insn, rtx first)
{
  rtx p;
  if ((((reg_n_info)->data.reg[(((reg)->u.fld[0]).rtuint)])->sets) != 1)
    return 0;
  for (p = (((insn)->u.fld[7]).rtx1); p; p = (((p)->u.fld[1]).rtx1))
    {
      rtx s;
      if (((enum reg_note) ((enum machine_mode) (p)->mode)) != 0)
 continue;
      s = (((((enum rtx_code) ((((p)->u.fld[0]).rtx1))->code) == INSN) || (((enum rtx_code) ((((p)->u.fld[0]).rtx1))->code) == JUMP_INSN) || (((enum rtx_code) ((((p)->u.fld[0]).rtx1))->code) == CALL_INSN)) ? (((enum rtx_code) (((((((p)->u.fld[0]).rtx1))->u.fld[5]).rtx1))->code) == SET ? ((((((p)->u.fld[0]).rtx1))->u.fld[5]).rtx1) : single_set_2 ((((p)->u.fld[0]).rtx1), ((((((p)->u.fld[0]).rtx1))->u.fld[5]).rtx1))) : (rtx) 0);
      if (s != 0
   && (((enum rtx_code) ((((s)->u.fld[0]).rtx1))->code) == REG)
   && ((((((s)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == (((reg)->u.fld[0]).rtuint))
 {
   return 0;
 }
    }
  for (p = first; p && p != insn; p = (((p)->u.fld[2]).rtx1))
    {
      rtx s;
      if (! ((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
 continue;
      s = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0);
      if (s != 0
   && (((enum rtx_code) ((((s)->u.fld[0]).rtx1))->code) == REG)
   && ((((((s)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == (((reg)->u.fld[0]).rtuint))
 {
   if (find_reg_note (p, REG_EQUAL, (rtx) 0))
     return 1;
   return 0;
 }
    }
  return 0;
}
static int
fixup_match_2 (rtx insn, rtx dst, rtx src, rtx offset, FILE *regmove_dump_file)
{
  rtx p, dst_death = 0;
  int length, num_calls = 0;
  if (find_regno_note (insn, REG_DEAD, (((src)->u.fld[0]).rtuint)))
    return 0;
  for (length = 0, p = (((insn)->u.fld[1]).rtx1); p; p = (((p)->u.fld[1]).rtx1))
    {
      rtx pset;
      if (perhaps_ends_bb_p (p))
 break;
      else if (! ((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
 continue;
      if (find_regno_note (p, REG_DEAD, (((dst)->u.fld[0]).rtuint)))
 dst_death = p;
      if (! dst_death)
 length++;
      pset = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0);
      if (pset && (((pset)->u.fld[0]).rtx1) == dst
   && ((enum rtx_code) ((((pset)->u.fld[1]).rtx1))->code) == PLUS
   && ((((((pset)->u.fld[1]).rtx1))->u.fld[0]).rtx1) == src
   && ((enum rtx_code) (((((((pset)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
 {
   long newconst
     = ((offset)->u.hwint[0]) - ((((((((pset)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
   rtx add = gen_add3_insn (dst, dst, gen_rtx_CONST_INT (VOIDmode, (long) (newconst)));
   if (add && validate_change (insn, &(((insn)->u.fld[5]).rtx1), add, 0))
     {
       if (dst_death)
  {
    remove_death ((((dst)->u.fld[0]).rtuint), dst_death);
    (((reg_n_info)->data.reg[(((dst)->u.fld[0]).rtuint)])->live_length) += length;
    (((reg_n_info)->data.reg[(((dst)->u.fld[0]).rtuint)])->calls_crossed) += num_calls;
  }
       if (regmove_dump_file)
  fprintf (regmove_dump_file,
    "Fixed operand of insn %d.\n",
     (((insn)->u.fld[0]).rtint));
       return 1;
     }
 }
      if (reg_set_p (dst, (((p)->u.fld[5]).rtx1)))
 break;
      if (((enum rtx_code) (p)->code) == CALL_INSN)
 {
   if (! dst_death)
     num_calls++;
   if ((((reg_n_info)->data.reg[(((src)->u.fld[0]).rtuint)])->calls_crossed) == 0)
     break;
   if (call_used_regs [(((dst)->u.fld[0]).rtuint)]
       || find_reg_fusage (p, CLOBBER, dst))
     break;
 }
      else if (reg_set_p (src, (((p)->u.fld[5]).rtx1)))
 break;
    }
  return 0;
}
void
regmove_optimize (rtx f, int nregs, FILE *regmove_dump_file)
{
  int old_max_uid = get_max_uid ();
  rtx insn;
  struct match match;
  int pass;
  int i;
  rtx copy_src, copy_dst;
  basic_block bb;
  if (flag_non_call_exceptions)
    return;
  mark_flags_life_zones (discover_flags_reg ());
  regno_src_regno = xmalloc (sizeof *regno_src_regno * nregs);
  for (i = nregs; --i >= 0; ) regno_src_regno[i] = -1;
  regmove_bb_head = xmalloc (sizeof (int) * (old_max_uid + 1));
  for (i = old_max_uid; i >= 0; i--) regmove_bb_head[i] = -1;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    regmove_bb_head[((((bb)->head_)->u.fld[0]).rtint)] = bb->index;
  for (pass = 0; pass <= 2; pass++)
    {
      if (! flag_regmove && pass >= flag_expensive_optimizations)
 goto done;
      if (regmove_dump_file)
 fprintf (regmove_dump_file, "Starting %s pass...\n",
   pass ? "backward" : "forward");
      for (insn = pass ? get_last_insn () : f; insn;
    insn = pass ? (((insn)->u.fld[1]).rtx1) : (((insn)->u.fld[2]).rtx1))
 {
   rtx set;
   int op_no, match_no;
   set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
   if (! set)
     continue;
   if (flag_expensive_optimizations && ! pass
       && (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == SIGN_EXTEND
    || ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == ZERO_EXTEND)
       && (((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code) == REG)
       && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG))
     optimize_reg_copy_3 (insn, (((set)->u.fld[0]).rtx1), (((set)->u.fld[1]).rtx1));
   if (flag_expensive_optimizations && ! pass
       && (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == REG)
       && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG))
     {
       if ((find_reg_note (insn, REG_DEAD, (((set)->u.fld[1]).rtx1))
     || optimize_reg_copy_1 (insn, (((set)->u.fld[0]).rtx1), (((set)->u.fld[1]).rtx1)))
    && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
  {
    if (((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint) >= 53)
      optimize_reg_copy_2 (insn, (((set)->u.fld[0]).rtx1), (((set)->u.fld[1]).rtx1));
    if (regno_src_regno[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] < 0
        && (((set)->u.fld[1]).rtx1) != (((set)->u.fld[0]).rtx1))
      {
        int srcregno = ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint);
        if (regno_src_regno[srcregno] >= 0)
   srcregno = regno_src_regno[srcregno];
        regno_src_regno[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] = srcregno;
      }
  }
     }
   if (! flag_regmove)
     continue;
   if (! find_matches (insn, &match))
     continue;
   for (op_no = 0; op_no < recog_data.n_operands; op_no++)
     {
       rtx src, dst, src_subreg;
       enum reg_class src_class, dst_class;
       match_no = match.with[op_no];
       if (match_no < 0)
  continue;
       src = recog_data.operand[op_no];
       dst = recog_data.operand[match_no];
       if (!(((enum rtx_code) (src)->code) == REG))
  continue;
       src_subreg = src;
       if (((enum rtx_code) (dst)->code) == SUBREG
    && ((unsigned short) mode_size[((enum machine_mode) (dst)->mode)])
       >= ((unsigned short) mode_size[((enum machine_mode) ((((dst)->u.fld[0]).rtx1))->mode)]))
  {
    src_subreg
      = gen_rtx_SUBREG (((enum machine_mode) ((((dst)->u.fld[0]).rtx1))->mode),
          src, (((dst)->u.fld[1]).rtuint));
    dst = (((dst)->u.fld[0]).rtx1);
  }
       if (!(((enum rtx_code) (dst)->code) == REG)
    || (((dst)->u.fld[0]).rtuint) < 53)
  continue;
       if ((((src)->u.fld[0]).rtuint) < 53)
  {
    if (match.commutative[op_no] < op_no)
      regno_src_regno[(((dst)->u.fld[0]).rtuint)] = (((src)->u.fld[0]).rtuint);
    continue;
  }
       if ((((reg_n_info)->data.reg[(((src)->u.fld[0]).rtuint)])->live_length) < 0)
  continue;
       if (match.use[op_no] != READ
    || match.use[match_no] != WRITE)
  continue;
       if (match.early_clobber[match_no]
    && count_occurrences ((((insn)->u.fld[5]).rtx1), src, 0) > 1)
  continue;
       if (recog_data.operand[match_no] != (((set)->u.fld[0]).rtx1))
  continue;
       if (operands_match_p (src, dst))
  continue;
       if (match.commutative[op_no] >= 0)
  {
    rtx comm = recog_data.operand[match.commutative[op_no]];
    if (operands_match_p (comm, dst)
        && (replacement_quality (comm)
     >= replacement_quality (src)))
      continue;
  }
       src_class = reg_preferred_class ((((src)->u.fld[0]).rtuint));
       dst_class = reg_preferred_class ((((dst)->u.fld[0]).rtuint));
       if (! regclass_compatible_p (src_class, dst_class))
  continue;
       if (((enum machine_mode) (src)->mode) != ((enum machine_mode) (dst)->mode))
  continue;
       if (fixup_match_1 (insn, set, src, src_subreg, dst, pass,
     op_no, match_no,
     regmove_dump_file))
  break;
     }
 }
    }
  if (regmove_dump_file)
    fprintf (regmove_dump_file, "Starting backward pass...\n");
  for (insn = get_last_insn (); insn; insn = (((insn)->u.fld[1]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   int op_no, match_no;
   int success = 0;
   if (! find_matches (insn, &match))
     continue;
   copy_src = (rtx) 0;
   copy_dst = (rtx) 0;
   for (op_no = 0; op_no < recog_data.n_operands; op_no++)
     {
       rtx set, p, src, dst;
       rtx src_note, dst_note;
       int num_calls = 0;
       enum reg_class src_class, dst_class;
       int length;
       match_no = match.with[op_no];
       if (match_no < 0)
  continue;
       dst = recog_data.operand[match_no];
       src = recog_data.operand[op_no];
       if (!(((enum rtx_code) (src)->code) == REG))
  continue;
       if (!(((enum rtx_code) (dst)->code) == REG)
    || (((dst)->u.fld[0]).rtuint) < 53
    || (((reg_n_info)->data.reg[(((dst)->u.fld[0]).rtuint)])->live_length) < 0
    || (((dst))->unchanging)
    || ((enum machine_mode) (src)->mode) != ((enum machine_mode) (dst)->mode))
  continue;
       if (operands_match_p (src, dst))
  continue;
       if (match.commutative[op_no] >= 0)
  {
    rtx comm = recog_data.operand[match.commutative[op_no]];
    if (operands_match_p (comm, dst))
      continue;
  }
       set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
       if (! set)
  continue;
       if (reg_set_p (src, insn))
  continue;
       if (match.use[op_no] != READ
    || match.use[match_no] != WRITE)
  continue;
       if (match.early_clobber[match_no]
    && count_occurrences ((((insn)->u.fld[5]).rtx1), src, 0) > 1)
  continue;
       if (recog_data.operand[match_no] != (((set)->u.fld[0]).rtx1))
  continue;
       if ((((src)->u.fld[0]).rtuint) < 53)
  {
    if (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == PLUS
        && ((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
        && ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1) == src
        && fixup_match_2 (insn, dst, src,
     ((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1),
     regmove_dump_file))
      break;
    continue;
  }
       src_class = reg_preferred_class ((((src)->u.fld[0]).rtuint));
       dst_class = reg_preferred_class ((((dst)->u.fld[0]).rtuint));
       if (! (src_note = find_reg_note (insn, REG_DEAD, src)))
  {
    continue;
  }
       if (! regclass_compatible_p (src_class, dst_class))
  {
    if (!copy_src)
      {
        copy_src = src;
        copy_dst = dst;
      }
    continue;
  }
       if (reg_overlap_mentioned_p (dst, (((set)->u.fld[1]).rtx1)))
  {
    if (!copy_src)
      {
        copy_src = src;
        copy_dst = dst;
      }
    continue;
  }
       if (reg_is_remote_constant_p (src, insn, f))
  {
    if (!copy_src)
      {
        copy_src = src;
        copy_dst = dst;
      }
    continue;
  }
       if (regmove_dump_file)
  fprintf (regmove_dump_file,
    "Could fix operand %d of insn %d matching operand %d.\n",
    op_no, (((insn)->u.fld[0]).rtint), match_no);
       for (length = 0, p = (((insn)->u.fld[1]).rtx1); p; p = (((p)->u.fld[1]).rtx1))
  {
    rtx pset;
    if (perhaps_ends_bb_p (p))
      break;
    else if (! ((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
      continue;
    length++;
    pset = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0);
    if (pset && (((pset)->u.fld[0]).rtx1) == src)
      {
        if (validate_replace_rtx (src, dst, insn))
   {
     if (validate_change (p, &(((pset)->u.fld[0]).rtx1),
            dst, 0))
       success = 1;
     else
       {
         validate_replace_rtx (dst, src, insn);
         validate_change (insn,
            recog_data.operand_loc[match_no],
            dst, 0);
       }
   }
        break;
      }
    if (reg_overlap_mentioned_p (src, (((p)->u.fld[5]).rtx1))
        || reg_overlap_mentioned_p (dst, (((p)->u.fld[5]).rtx1)))
      break;
    if (((enum rtx_code) (p)->code) == CALL_INSN)
      {
        num_calls++;
        if ((((reg_n_info)->data.reg[(((dst)->u.fld[0]).rtuint)])->calls_crossed) == 0)
   break;
      }
  }
       if (success)
  {
    int dstno, srcno;
    remove_note (insn, src_note);
    if (reg_overlap_mentioned_p (src, (((p)->u.fld[5]).rtx1)))
      {
        (((src_note)->u.fld[1]).rtx1) = (((p)->u.fld[8]).rtx1);
        (((p)->u.fld[8]).rtx1) = src_note;
      }
    if ((dst_note = find_reg_note (p, REG_DEAD, dst)))
      remove_note (p, dst_note);
    dstno = (((dst)->u.fld[0]).rtuint);
    srcno = (((src)->u.fld[0]).rtuint);
    (((reg_n_info)->data.reg[dstno])->sets)++;
    (((reg_n_info)->data.reg[srcno])->sets)--;
    (((reg_n_info)->data.reg[dstno])->calls_crossed) += num_calls;
    (((reg_n_info)->data.reg[srcno])->calls_crossed) -= num_calls;
    (((reg_n_info)->data.reg[dstno])->live_length) += length;
    if ((((reg_n_info)->data.reg[srcno])->live_length) >= 0)
      {
        (((reg_n_info)->data.reg[srcno])->live_length) -= length;
        if ((((reg_n_info)->data.reg[srcno])->live_length) < 2)
   (((reg_n_info)->data.reg[srcno])->live_length) = 2;
      }
    if (regmove_dump_file)
      fprintf (regmove_dump_file,
        "Fixed operand %d of insn %d matching operand %d.\n",
        op_no, (((insn)->u.fld[0]).rtint), match_no);
    break;
  }
     }
   if (!success && copy_src != (rtx) 0)
     copy_src_to_dest (insn, copy_src, copy_dst, old_max_uid);
 }
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      rtx end = (bb)->end_;
      rtx new = end;
      rtx next = (((new)->u.fld[2]).rtx1);
      while (next != 0 && (((next)->u.fld[0]).rtint) >= old_max_uid
      && (bb->next_bb == EXIT_BLOCK_PTR || (bb->next_bb)->head_ != next))
 new = next, next = (((new)->u.fld[2]).rtx1);
      (bb)->end_ = new;
    }
 done:
  free (regno_src_regno);
  free (regmove_bb_head);
}
static int
find_matches (rtx insn, struct match *matchp)
{
  int likely_spilled[30];
  int op_no;
  int any_matches = 0;
  extract_insn (insn);
  if (! constrain_operands (0))
    return 0;
  for (op_no = recog_data.n_operands; --op_no >= 0; )
    matchp->with[op_no] = matchp->commutative[op_no] = -1;
  for (op_no = 0; op_no < recog_data.n_operands; op_no++)
    {
      const char *p;
      char c;
      int i = 0;
      p = recog_data.constraints[op_no];
      likely_spilled[op_no] = 0;
      matchp->use[op_no] = READ;
      matchp->early_clobber[op_no] = 0;
      if (*p == '=')
 matchp->use[op_no] = WRITE;
      else if (*p == '+')
 matchp->use[op_no] = READWRITE;
      for (;*p && i < which_alternative; p++)
 if (*p == ',')
   i++;
      while ((c = *p) != '\0' && c != ',')
 {
   switch (c)
     {
     case '=':
       break;
     case '+':
       break;
     case '&':
       matchp->early_clobber[op_no] = 1;
       break;
     case '%':
       matchp->commutative[op_no] = op_no + 1;
       matchp->commutative[op_no + 1] = op_no;
       break;
     case '0': case '1': case '2': case '3': case '4':
     case '5': case '6': case '7': case '8': case '9':
       {
  char *end;
  unsigned long match_ul = strtoul (p, &end, 10);
  int match = match_ul;
  p = end;
  if (match < op_no && likely_spilled[match])
    continue;
  matchp->with[op_no] = match;
  any_matches = 1;
  if (matchp->commutative[op_no] >= 0)
    matchp->with[matchp->commutative[op_no]] = match;
       }
     continue;
   case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'h':
   case 'j': case 'k': case 'l': case 'p': case 'q': case 't': case 'u':
   case 'v': case 'w': case 'x': case 'y': case 'z': case 'A': case 'B':
   case 'C': case 'D': case 'W': case 'Y': case 'Z':
     if (((((((unsigned char) c) == 'r' ? GENERAL_REGS : NO_REGS)) == FP_SECOND_REG)))
       likely_spilled[op_no] = 1;
     break;
   }
   p += 1;
 }
    }
  return any_matches;
}
static void
replace_in_call_usage (rtx *loc, unsigned int dst_reg, rtx src, rtx insn)
{
  rtx x = *loc;
  enum rtx_code code;
  const char *fmt;
  int i, j;
  if (! x)
    return;
  code = ((enum rtx_code) (x)->code);
  if (code == REG)
    {
      if ((((x)->u.fld[0]).rtuint) != dst_reg)
 return;
      validate_change (insn, loc, src, 1);
      return;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++, fmt++)
    if (*fmt == 'e')
      replace_in_call_usage (&(((x)->u.fld[i]).rtx1), dst_reg, src, insn);
    else if (*fmt == 'E')
      for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
 replace_in_call_usage (& (((((x)->u.fld[i]).rtvec1))->elem[j]), dst_reg, src, insn);
}
static int
fixup_match_1 (rtx insn, rtx set, rtx src, rtx src_subreg, rtx dst,
        int backward, int operand_number, int match_number,
        FILE *regmove_dump_file)
{
  rtx p;
  rtx post_inc = 0, post_inc_set = 0, search_end = 0;
  int success = 0;
  int num_calls = 0, s_num_calls = 0;
  enum rtx_code code = NOTE;
  long insn_const = 0, newconst = 0;
  rtx overlap = 0;
  rtx src_note = find_reg_note (insn, REG_DEAD, src), dst_note = (rtx) 0;
  int length, s_length;
  if ((((src))->unchanging))
    return 0;
  if (! src_note)
    {
      code = ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code);
      if ((code == PLUS || code == LSHIFTRT
    || code == ASHIFT || code == ASHIFTRT)
   && ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1) == src
   && ((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
 insn_const = ((((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
      else if (! stable_and_no_regs_but_for_p ((((set)->u.fld[1]).rtx1), src, dst))
 return 0;
      else
 code = NOTE;
    }
  if (regmove_dump_file)
    fprintf (regmove_dump_file,
      "Could fix operand %d of insn %d matching operand %d.\n",
      operand_number, (((insn)->u.fld[0]).rtint), match_number);
  if (reg_is_remote_constant_p (src, insn, get_insns ()))
    return 0;
  for (length = s_length = 0, p = (((insn)->u.fld[2]).rtx1); p; p = (((p)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (p)->code) == CALL_INSN)
 replace_in_call_usage (& (((p)->u.fld[9]).rtx1),
          (((dst)->u.fld[0]).rtuint), src, p);
      if (perhaps_ends_bb_p (p))
 break;
      else if (! ((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
 continue;
      length++;
      if (src_note)
 s_length++;
      if (reg_set_p (src, p) || reg_set_p (dst, p)
   || (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == USE
       && reg_overlap_mentioned_p (src, ((((((p)->u.fld[5]).rtx1))->u.fld[0]).rtx1))))
 break;
      if ((dst_note = find_regno_note (p, REG_DEAD, (((dst)->u.fld[0]).rtuint)))
   && (((enum machine_mode) ((((dst_note)->u.fld[0]).rtx1))->mode) == ((enum machine_mode) (dst)->mode)))
 {
   if (overlap && ((enum machine_mode) ((((p)->u.fld[1]).rtx1))->mode) != VOIDmode)
     break;
   if (! src_note)
     {
       rtx q;
       rtx set2 = (rtx) 0;
       if (reg_overlap_mentioned_p (src, (((p)->u.fld[5]).rtx1)))
  break;
       for (q = p; q; q = (((q)->u.fld[2]).rtx1))
  {
    if (perhaps_ends_bb_p (q))
      {
        q = 0;
        break;
      }
    else if (! ((((enum rtx_code) (q)->code) == INSN) || (((enum rtx_code) (q)->code) == JUMP_INSN) || (((enum rtx_code) (q)->code) == CALL_INSN)))
      continue;
    else if (reg_overlap_mentioned_p (src, (((q)->u.fld[5]).rtx1))
      || reg_set_p (src, q))
      break;
  }
       if (q)
  set2 = (((((enum rtx_code) (q)->code) == INSN) || (((enum rtx_code) (q)->code) == JUMP_INSN) || (((enum rtx_code) (q)->code) == CALL_INSN)) ? (((enum rtx_code) ((((q)->u.fld[5]).rtx1))->code) == SET ? (((q)->u.fld[5]).rtx1) : single_set_2 (q, (((q)->u.fld[5]).rtx1))) : (rtx) 0);
       if (! q || ! set2 || ((enum rtx_code) ((((set2)->u.fld[1]).rtx1))->code) != code
    || ((((((set2)->u.fld[1]).rtx1))->u.fld[0]).rtx1) != src
    || ((enum rtx_code) (((((((set2)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) != CONST_INT
    || ((((set2)->u.fld[0]).rtx1) != src
        && ! find_reg_note (q, REG_DEAD, src)))
  {
    if (code == PLUS && backward
        && ! (dst_note && ! (((reg_n_info)->data.reg[(((dst)->u.fld[0]).rtuint)])->calls_crossed)
       && (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0)
       && (((enum rtx_code) (((((((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0))->u.fld[0]).rtx1))->code) == REG)
       && ((((((((((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0))->u.fld[0]).rtx1))->u.fld[0]).rtuint)
    < 53))
        && ((enum machine_mode) (p)->mode) == VOIDmode)
      {
        search_end = q;
        q = insn;
        set2 = set;
        newconst = -insn_const;
        code = MINUS;
      }
    else
      break;
  }
       else
  {
    newconst = ((((((((set2)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) - insn_const;
    if (code != PLUS
        && (newconst < 0
     || ((unsigned long) newconst
         >= (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((set2)->u.fld[1]).rtx1))->mode)]) * 8))
                           ))))
      break;
    if (code == PLUS)
      {
        post_inc = q;
        if ((((set2)->u.fld[0]).rtx1) != src)
   post_inc_set = set2;
      }
  }
       validate_change (q, &((((((set2)->u.fld[1]).rtx1))->u.fld[1]).rtx1),
          gen_rtx_CONST_INT (VOIDmode, (long) (newconst)), 1);
     }
   validate_change (insn, recog_data.operand_loc[match_number], src, 1);
   if (validate_replace_rtx (dst, src_subreg, p))
     success = 1;
   break;
 }
      if (reg_overlap_mentioned_p (dst, (((p)->u.fld[5]).rtx1)))
 break;
      if (! src_note && reg_overlap_mentioned_p (src, (((p)->u.fld[5]).rtx1)))
 {
   overlap = p;
   src_note = find_reg_note (p, REG_DEAD, src);
 }
      if (((enum rtx_code) (p)->code) == CALL_INSN)
 {
   if ((((reg_n_info)->data.reg[(((src)->u.fld[0]).rtuint)])->calls_crossed) == 0)
     break;
   num_calls++;
   if (src_note)
     s_num_calls++;
 }
    }
  if (! success)
    return 0;
  remove_note (p, dst_note);
  if (code == MINUS)
    {
      post_inc = emit_insn_after (copy_rtx ((((insn)->u.fld[5]).rtx1)), p);
      if ((0 || 0)
   && search_end
   && try_auto_increment (search_end, post_inc, 0, src, newconst, 1))
 post_inc = 0;
      validate_change (insn, &((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1), gen_rtx_CONST_INT (VOIDmode, (long) (insn_const)), 0);
      (((reg_n_info)->data.reg[(((src)->u.fld[0]).rtuint)])->sets)++;
      (((reg_n_info)->data.reg[(((src)->u.fld[0]).rtuint)])->live_length)++;
    }
  if (overlap)
    {
      rtx pat = (((insn)->u.fld[5]).rtx1);
      if (src_note)
 remove_note (overlap, src_note);
      if ((0 || 0)
   && code == PLUS
   && try_auto_increment (overlap, insn, 0, src, insn_const, 0))
 insn = overlap;
      else
 {
   rtx notes = (((insn)->u.fld[8]).rtx1);
   emit_insn_after_with_line_notes (pat, (((p)->u.fld[1]).rtx1), insn);
   delete_insn (insn);
   insn = p;
   while (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) || (((insn)->u.fld[5]).rtx1) != pat)
     insn = (((insn)->u.fld[1]).rtx1);
   (((insn)->u.fld[8]).rtx1) = notes;
 }
    }
  if (! overlap && (code == PLUS || code == MINUS))
    {
      rtx note = find_reg_note (insn, REG_EQUAL, (rtx) 0);
      rtx q, set2 = (rtx) 0;
      int num_calls2 = 0, s_length2 = 0;
      if (note && ((rtx_class[(int) (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == CONST_VECTOR))
 {
   for (q = (((insn)->u.fld[1]).rtx1); q; q = (((q)->u.fld[1]).rtx1))
     {
       if (perhaps_ends_bb_p (q))
  {
    q = 0;
    break;
  }
       else if (! ((((enum rtx_code) (q)->code) == INSN) || (((enum rtx_code) (q)->code) == JUMP_INSN) || (((enum rtx_code) (q)->code) == CALL_INSN)))
  continue;
       s_length2++;
       if (reg_set_p (src, q))
  {
    set2 = (((((enum rtx_code) (q)->code) == INSN) || (((enum rtx_code) (q)->code) == JUMP_INSN) || (((enum rtx_code) (q)->code) == CALL_INSN)) ? (((enum rtx_code) ((((q)->u.fld[5]).rtx1))->code) == SET ? (((q)->u.fld[5]).rtx1) : single_set_2 (q, (((q)->u.fld[5]).rtx1))) : (rtx) 0);
    break;
  }
       if (reg_overlap_mentioned_p (src, (((q)->u.fld[5]).rtx1)))
  {
    q = 0;
    break;
  }
       if (((enum rtx_code) (p)->code) == CALL_INSN)
  num_calls2++;
     }
   if (q && set2 && (((set2)->u.fld[0]).rtx1) == src && ((rtx_class[(int) (((enum rtx_code) ((((set2)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((set2)->u.fld[1]).rtx1))->code) == CONST_VECTOR)
       && validate_change (insn, &(((set)->u.fld[1]).rtx1), (((note)->u.fld[0]).rtx1), 0))
     {
       delete_insn (q);
       (((reg_n_info)->data.reg[(((src)->u.fld[0]).rtuint)])->sets)--;
       (((reg_n_info)->data.reg[(((src)->u.fld[0]).rtuint)])->calls_crossed) -= num_calls2;
       (((reg_n_info)->data.reg[(((src)->u.fld[0]).rtuint)])->live_length) -= s_length2;
       insn_const = 0;
     }
 }
    }
  if ((0 || 0)
    && (code == PLUS || code == MINUS) && insn_const
    && try_auto_increment (p, insn, 0, src, insn_const, 1))
    insn = p;
  else if ((0 || 0)
    && post_inc
    && try_auto_increment (p, post_inc, post_inc_set, src, newconst, 0))
    post_inc = 0;
  if (post_inc && code == PLUS
      && ((0 && newconst > 0 && newconst <= 16)
   || (0 && newconst < 0 && newconst >= -16))
      && exact_log2_wide ((unsigned long) (newconst)))
    {
      rtx q, inc_dest;
      inc_dest = post_inc_set ? (((post_inc_set)->u.fld[0]).rtx1) : src;
      for (q = post_inc; (q = (((q)->u.fld[2]).rtx1)); )
 {
   if (perhaps_ends_bb_p (q))
     break;
   else if (! ((((enum rtx_code) (q)->code) == INSN) || (((enum rtx_code) (q)->code) == JUMP_INSN) || (((enum rtx_code) (q)->code) == CALL_INSN)))
     continue;
   else if (src != inc_dest
     && (reg_overlap_mentioned_p (src, (((q)->u.fld[5]).rtx1))
         || reg_set_p (src, q)))
     break;
   else if (reg_set_p (inc_dest, q))
     break;
   else if (reg_overlap_mentioned_p (inc_dest, (((q)->u.fld[5]).rtx1)))
     {
       try_auto_increment (q, post_inc,
      post_inc_set, inc_dest, newconst, 1);
       break;
     }
 }
    }
  if (reg_overlap_mentioned_p (dst, (((insn)->u.fld[5]).rtx1)))
    {
      (((dst_note)->u.fld[1]).rtx1) = (((insn)->u.fld[8]).rtx1);
      (((insn)->u.fld[8]).rtx1) = dst_note;
    }
  if (src_note)
    {
      if (! overlap)
 remove_note (insn, src_note);
      (((src_note)->u.fld[1]).rtx1) = (((p)->u.fld[8]).rtx1);
      (((p)->u.fld[8]).rtx1) = src_note;
      (((reg_n_info)->data.reg[(((src)->u.fld[0]).rtuint)])->calls_crossed) += s_num_calls;
    }
  (((reg_n_info)->data.reg[(((src)->u.fld[0]).rtuint)])->sets)++;
  (((reg_n_info)->data.reg[(((dst)->u.fld[0]).rtuint)])->sets)--;
  (((reg_n_info)->data.reg[(((dst)->u.fld[0]).rtuint)])->calls_crossed) -= num_calls;
  (((reg_n_info)->data.reg[(((src)->u.fld[0]).rtuint)])->live_length) += s_length;
  if ((((reg_n_info)->data.reg[(((dst)->u.fld[0]).rtuint)])->live_length) >= 0)
    {
      (((reg_n_info)->data.reg[(((dst)->u.fld[0]).rtuint)])->live_length) -= length;
      if ((((reg_n_info)->data.reg[(((dst)->u.fld[0]).rtuint)])->live_length) < 2)
 (((reg_n_info)->data.reg[(((dst)->u.fld[0]).rtuint)])->live_length) = 2;
    }
  if (regmove_dump_file)
    fprintf (regmove_dump_file,
      "Fixed operand %d of insn %d matching operand %d.\n",
      operand_number, (((insn)->u.fld[0]).rtint), match_number);
  return 1;
}
static int
stable_and_no_regs_but_for_p (rtx x, rtx src, rtx dst)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  switch ((rtx_class[(int) (code)]))
    {
    case RTX_UNARY:
    case RTX_BIN_ARITH:
    case RTX_COMM_ARITH:
    case RTX_COMPARE:
    case RTX_COMM_COMPARE:
    case RTX_TERNARY:
    case RTX_BITFIELD_OPS:
      {
 int i;
 const char *fmt = (rtx_format[(int) (code)]);
 for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
   if (fmt[i] == 'e'
       && ! stable_and_no_regs_but_for_p ((((x)->u.fld[i]).rtx1), src, dst))
       return 0;
 return 1;
      }
    case RTX_OBJ:
      if (code == REG)
 return x == src || x == dst;
      if (code == MEM
   && ! stable_and_no_regs_but_for_p ((((x)->u.fld[0]).rtx1), src, dst))
 return 0;
    default:
      return ! rtx_unstable_p (x);
    }
}
struct csa_memlist
{
  long sp_offset;
  rtx insn, *mem;
  struct csa_memlist *next;
};
static int stack_memref_p (rtx);
static rtx single_set_for_csa (rtx);
static void free_csa_memlist (struct csa_memlist *);
static struct csa_memlist *record_one_stack_memref (rtx, rtx *,
          struct csa_memlist *);
static int try_apply_stack_adjustment (rtx, struct csa_memlist *,
           long, long);
static void combine_stack_adjustments_for_block (basic_block);
static int record_stack_memrefs (rtx *, void *);
void
combine_stack_adjustments (void)
{
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    combine_stack_adjustments_for_block (bb);
}
static int
stack_memref_p (rtx x)
{
  if (!(((enum rtx_code) (x)->code) == MEM))
    return 0;
  x = (((x)->u.fld[0]).rtx1);
  if (x == (global_rtl[GR_STACK_POINTER]))
    return 1;
  if (((enum rtx_code) (x)->code) == PLUS
      && (((x)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER])
      && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
    return 1;
  return 0;
}
static rtx
single_set_for_csa (rtx insn)
{
  int i;
  rtx tmp = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  if (tmp)
    return tmp;
  if (((enum rtx_code) (insn)->code) != INSN
      || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != PARALLEL)
    return (rtx) 0;
  tmp = (((insn)->u.fld[5]).rtx1);
  if (((enum rtx_code) ((((((tmp)->u.fld[0]).rtvec1))->elem[0]))->code) != SET)
    return (rtx) 0;
  for (i = 1; i < (((((tmp)->u.fld[0]).rtvec1))->num_elem); ++i)
    {
      rtx this = (((((tmp)->u.fld[0]).rtvec1))->elem[i]);
      if (((enum rtx_code) (this)->code) == SET
   && (((this)->u.fld[1]).rtx1) == (((this)->u.fld[0]).rtx1))
 ;
      else if (((enum rtx_code) (this)->code) != CLOBBER
        && ((enum rtx_code) (this)->code) != USE)
 return (rtx) 0;
    }
  return (((((tmp)->u.fld[0]).rtvec1))->elem[0]);
}
static void
free_csa_memlist (struct csa_memlist *memlist)
{
  struct csa_memlist *next;
  for (; memlist ; memlist = next)
    {
      next = memlist->next;
      free (memlist);
    }
}
static struct csa_memlist *
record_one_stack_memref (rtx insn, rtx *mem, struct csa_memlist *next_memlist)
{
  struct csa_memlist *ml;
  ml = xmalloc (sizeof (*ml));
  if ((((*mem)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]))
    ml->sp_offset = 0;
  else
    ml->sp_offset = ((((((((*mem)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
  ml->insn = insn;
  ml->mem = mem;
  ml->next = next_memlist;
  return ml;
}
static int
try_apply_stack_adjustment (rtx insn, struct csa_memlist *memlist, long new_adjust,
       long delta)
{
  struct csa_memlist *ml;
  rtx set;
  set = single_set_for_csa (insn);
  validate_change (insn, &((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1), gen_rtx_CONST_INT (VOIDmode, (long) (new_adjust)), 1);
  for (ml = memlist; ml ; ml = ml->next)
    validate_change
      (ml->insn, ml->mem,
       replace_equiv_address_nv (*ml->mem,
     plus_constant_wide (((global_rtl[GR_STACK_POINTER])), (long) (ml->sp_offset - delta))
                            ), 1);
  if (apply_change_group ())
    {
      for (ml = memlist; ml ; ml = ml->next)
 ml->sp_offset -= delta;
      return 1;
    }
  else
    return 0;
}
struct record_stack_memrefs_data
{
  rtx insn;
  struct csa_memlist *memlist;
};
static int
record_stack_memrefs (rtx *xp, void *data)
{
  rtx x = *xp;
  struct record_stack_memrefs_data *d =
    (struct record_stack_memrefs_data *) data;
  if (!x)
    return 0;
  switch (((enum rtx_code) (x)->code))
    {
    case MEM:
      if (!reg_mentioned_p ((global_rtl[GR_STACK_POINTER]), x))
 return -1;
      if (stack_memref_p (x))
 {
   d->memlist = record_one_stack_memref (d->insn, xp, d->memlist);
   return -1;
 }
      return 1;
    case REG:
      if ((((x)->u.fld[0]).rtuint) == 7)
 return 1;
      break;
    default:
      break;
    }
  return 0;
}
static void
combine_stack_adjustments_for_block (basic_block bb)
{
  long last_sp_adjust = 0;
  rtx last_sp_set = (rtx) 0;
  struct csa_memlist *memlist = ((void *)0);
  rtx insn, next, set;
  struct record_stack_memrefs_data data;
  unsigned char end_of_block = 0;
  for (insn = (bb)->head_; !end_of_block ; insn = next)
    {
      end_of_block = insn == (bb)->end_;
      next = (((insn)->u.fld[2]).rtx1);
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      set = single_set_for_csa (insn);
      if (set)
 {
   rtx dest = (((set)->u.fld[0]).rtx1);
   rtx src = (((set)->u.fld[1]).rtx1);
   if (dest == (global_rtl[GR_STACK_POINTER])
       && ((enum rtx_code) (src)->code) == PLUS
       && (((src)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER])
       && ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) == CONST_INT)
     {
       long this_adjust = (((((src)->u.fld[1]).rtx1))->u.hwint[0]);
       if (! last_sp_set)
  {
    last_sp_set = insn;
    last_sp_adjust = this_adjust;
    continue;
  }
       if (1 ? this_adjust <= 0 : this_adjust >= 0)
  {
    if (try_apply_stack_adjustment (last_sp_set, memlist,
        last_sp_adjust + this_adjust,
        this_adjust))
      {
        delete_insn (insn);
        last_sp_adjust += this_adjust;
        continue;
      }
  }
       else if (1
         ? last_sp_adjust >= 0 : last_sp_adjust <= 0)
  {
    if (try_apply_stack_adjustment (insn, memlist,
        last_sp_adjust + this_adjust,
        -last_sp_adjust))
      {
        delete_insn (last_sp_set);
        last_sp_set = insn;
        last_sp_adjust += this_adjust;
        free_csa_memlist (memlist);
        memlist = ((void *)0);
        continue;
      }
  }
       if (last_sp_set && last_sp_adjust == 0)
  delete_insn (insn);
       free_csa_memlist (memlist);
       memlist = ((void *)0);
       last_sp_set = insn;
       last_sp_adjust = this_adjust;
       continue;
     }
   if (memlist == ((void *)0)
       && (((enum rtx_code) (dest)->code) == MEM)
       && ((((enum rtx_code) ((((dest)->u.fld[0]).rtx1))->code) == PRE_DEC
     && (last_sp_adjust
         == (long) ((unsigned short) mode_size[((enum machine_mode) (dest)->mode)])))
    || (((enum rtx_code) ((((dest)->u.fld[0]).rtx1))->code) == PRE_MODIFY
        && ((enum rtx_code) (((((((dest)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == PLUS
        && (((((((((dest)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER])
        && (((enum rtx_code) ((((((((((dest)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code)
            == CONST_INT)
        && ((((((((((((dest)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])
            == -last_sp_adjust)))
       && ((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER])
       && ! reg_mentioned_p ((global_rtl[GR_STACK_POINTER]), src)
       && memory_address_p (((enum machine_mode) (dest)->mode), (global_rtl[GR_STACK_POINTER]))
       && validate_change (insn, &(((set)->u.fld[0]).rtx1),
      replace_equiv_address (dest,
        (global_rtl[GR_STACK_POINTER])),
      0))
     {
       delete_insn (last_sp_set);
       free_csa_memlist (memlist);
       memlist = ((void *)0);
       last_sp_set = (rtx) 0;
       last_sp_adjust = 0;
       continue;
     }
 }
      data.insn = insn;
      data.memlist = memlist;
      if (((enum rtx_code) (insn)->code) != CALL_INSN && last_sp_set
   && !for_each_rtx (&(((insn)->u.fld[5]).rtx1), record_stack_memrefs, &data))
 {
    memlist = data.memlist;
    continue;
 }
      memlist = data.memlist;
      if (last_sp_set
   && (((enum rtx_code) (insn)->code) == CALL_INSN
       || reg_mentioned_p ((global_rtl[GR_STACK_POINTER]), (((insn)->u.fld[5]).rtx1))))
 {
   if (last_sp_set && last_sp_adjust == 0)
     delete_insn (last_sp_set);
   free_csa_memlist (memlist);
   memlist = ((void *)0);
   last_sp_set = (rtx) 0;
   last_sp_adjust = 0;
 }
    }
  if (last_sp_set && last_sp_adjust == 0)
    delete_insn (last_sp_set);
}
static const char *const reg_class_names3[] = { "NO_REGS", "AREG", "DREG", "CREG", "BREG", "SIREG", "DIREG", "AD_REGS", "Q_REGS", "NON_Q_REGS", "INDEX_REGS", "LEGACY_REGS", "GENERAL_REGS", "FP_TOP_REG", "FP_SECOND_REG", "FLOAT_REGS", "SSE_REGS", "MMX_REGS", "FP_TOP_SSE_REGS", "FP_SECOND_SSE_REGS", "FLOAT_SSE_REGS", "FLOAT_INT_REGS", "INT_SSE_REGS", "FLOAT_INT_SSE_REGS", "ALL_REGS" };
struct du_chain
{
  struct du_chain *next_chain;
  struct du_chain *next_use;
  rtx insn;
  rtx *loc;
  unsigned int class : 16;
  unsigned int need_caller_save_reg:1;
  unsigned int earlyclobber:1;
};
enum scan_actions
{
  terminate_all_read,
  terminate_overlapping_read,
  terminate_write,
  terminate_dead,
  mark_read,
  mark_write
};
static const char * const scan_actions_name[] =
{
  "terminate_all_read",
  "terminate_overlapping_read",
  "terminate_write",
  "terminate_dead",
  "mark_read",
  "mark_write"
};
static struct obstack rename_obstack;
static void do_replace (struct du_chain *, int);
static void scan_rtx_reg (rtx, rtx *, enum reg_class,
     enum scan_actions, enum op_type, int);
static void scan_rtx_address (rtx, rtx *, enum reg_class,
         enum scan_actions, enum machine_mode);
static void scan_rtx (rtx, rtx *, enum reg_class, enum scan_actions,
        enum op_type, int);
static struct du_chain *build_def_use (basic_block);
static void dump_def_use_chain (struct du_chain *);
static void note_sets (rtx, rtx, void *);
static void clear_dead_regs (HARD_REG_SET *, enum machine_mode, rtx);
static void merge_overlapping_regs (basic_block, HARD_REG_SET *,
        struct du_chain *);
static void
note_sets (rtx x, rtx set , void *data)
{
  HARD_REG_SET *pset = (HARD_REG_SET *) data;
  unsigned int regno;
  int nregs;
  if (!(((enum rtx_code) (x)->code) == REG))
    return;
  regno = (((x)->u.fld[0]).rtuint);
  nregs = hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
  if (regno + nregs > 53)
    abort ();
  while (nregs-- > 0)
    ((*pset)[(regno + nregs) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno + nregs) % ((unsigned) (8 * 4))));
}
static void
clear_dead_regs (HARD_REG_SET *pset, enum machine_mode kind, rtx notes)
{
  rtx note;
  for (note = notes; note; note = (((note)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (note)->mode)) == kind && (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG))
      {
 rtx reg = (((note)->u.fld[0]).rtx1);
 unsigned int regno = (((reg)->u.fld[0]).rtuint);
 int nregs = hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)];
 if (regno + nregs > 53)
   abort ();
 while (nregs-- > 0)
   ((*pset)[(regno + nregs) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((regno + nregs) % ((unsigned) (8 * 4)))));
      }
}
static void
merge_overlapping_regs (basic_block b, HARD_REG_SET *pset,
   struct du_chain *chain)
{
  struct du_chain *t = chain;
  rtx insn;
  HARD_REG_SET live;
  do { do { HARD_REG_ELT_TYPE *scan_tp_ = (live); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&live, b->global_live_at_start); } while (0);
  insn = (b)->head_;
  while (t)
    {
      while (insn != t->insn)
 {
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       clear_dead_regs (&live, REG_DEAD, (((insn)->u.fld[8]).rtx1));
       note_stores ((((insn)->u.fld[5]).rtx1), note_sets, (void *) &live);
       if (t != chain)
  do { HARD_REG_ELT_TYPE *scan_tp_ = (*pset), *scan_fp_ = (live); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
       clear_dead_regs (&live, REG_UNUSED, (((insn)->u.fld[8]).rtx1));
     }
   insn = (((insn)->u.fld[2]).rtx1);
 }
      do { HARD_REG_ELT_TYPE *scan_tp_ = (*pset), *scan_fp_ = (live); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
      if (! t->next_use)
 note_stores ((((insn)->u.fld[5]).rtx1), note_sets, (void *) pset);
      t = t->next_use;
    }
}
void
regrename_optimize (void)
{
  int tick[53];
  int this_tick = 0;
  basic_block bb;
  char *first_obj;
  memset (tick, 0, sizeof tick);
  _obstack_begin ((&rename_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
  first_obj = (( ((&rename_obstack))->temp = ((0)), ((((&rename_obstack))->chunk_limit - ((&rename_obstack))->next_free < ((&rename_obstack))->temp) ? (_obstack_newchunk (((&rename_obstack)), ((&rename_obstack))->temp), 0) : 0), (((&rename_obstack))->next_free += (((&rename_obstack))->temp))), ( (((&rename_obstack))->next_free == ((&rename_obstack))->object_base ? ((((&rename_obstack))->maybe_empty_object = 1), 0) : 0), ((&rename_obstack))->temp = ((((&rename_obstack))->object_base) - (char *) 0), ((&rename_obstack))->next_free = (((((((&rename_obstack))->next_free) - (char *) 0)+((&rename_obstack))->alignment_mask) & ~ (((&rename_obstack))->alignment_mask)) + (char *) 0), ((((&rename_obstack))->next_free - (char *) ((&rename_obstack))->chunk > ((&rename_obstack))->chunk_limit - (char *) ((&rename_obstack))->chunk) ? (((&rename_obstack))->next_free = ((&rename_obstack))->chunk_limit) : 0), ((&rename_obstack))->object_base = ((&rename_obstack))->next_free, ((((&rename_obstack))->temp) + (char *) 0)));
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      struct du_chain *all_chains = 0;
      HARD_REG_SET unavailable;
      HARD_REG_SET regs_seen;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (unavailable); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      if (dump_file)
 fprintf (dump_file, "\nBasic block %d:\n", bb->index);
      all_chains = build_def_use (bb);
      if (dump_file)
 dump_def_use_chain (all_chains);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (unavailable); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      if (frame_pointer_needed)
 {
   int i;
   for (i = hard_regno_nregs[20][(0 ? DImode : SImode)]; i--;)
     ((unavailable)[(20 + i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((20 + i) % ((unsigned) (8 * 4))));
   for (i = hard_regno_nregs[6][(0 ? DImode : SImode)]; i--;)
     ((unavailable)[(6 + i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((6 + i) % ((unsigned) (8 * 4))));
 }
      do { HARD_REG_ELT_TYPE *scan_tp_ = (regs_seen); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      while (all_chains)
 {
   int new_reg, best_new_reg;
   int n_uses;
   struct du_chain *this = all_chains;
   struct du_chain *tmp, *last;
   HARD_REG_SET this_unavailable;
   int reg = (((*this->loc)->u.fld[0]).rtuint);
   int i;
   all_chains = this->next_chain;
   best_new_reg = reg;
   if (fixed_regs[reg] || global_regs[reg]
       || (frame_pointer_needed && reg == 6)
       )
     continue;
   do { HARD_REG_ELT_TYPE *scan_tp_ = (this_unavailable), *scan_fp_ = (unavailable); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
   n_uses = 0;
   for (last = this; last->next_use; last = last->next_use)
     {
       n_uses++;
       do { HARD_REG_ELT_TYPE *scan_tp_ = (this_unavailable), *scan_fp_ = (reg_class_contents[last->class]); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0)
                                          ;
     }
   if (n_uses < 1)
     continue;
   do { HARD_REG_ELT_TYPE *scan_tp_ = (this_unavailable), *scan_fp_ = (reg_class_contents[last->class]); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0)
                                      ;
   if (this->need_caller_save_reg)
     do { HARD_REG_ELT_TYPE *scan_tp_ = (this_unavailable), *scan_fp_ = (call_used_reg_set); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
   merge_overlapping_regs (bb, &this_unavailable, this);
   for (new_reg = 0; new_reg < 53; new_reg++)
     {
       int nregs = hard_regno_nregs[new_reg][((enum machine_mode) (*this->loc)->mode)];
       for (i = nregs - 1; i >= 0; --i)
         if ((!!((this_unavailable)[(new_reg + i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((new_reg + i) % ((unsigned) (8 * 4))))))
      || fixed_regs[new_reg + i]
      || global_regs[new_reg + i]
      || (! regs_ever_live[new_reg + i]
   && ! call_used_regs[new_reg + i])
      || ! ((reg + i) < 8 || (reg + i) > (8 + 7))
      )
    break;
       if (i >= 0)
  continue;
       for (tmp = this; tmp; tmp = tmp->next_use)
  if (! ix86_hard_regno_mode_ok ((new_reg), (((enum machine_mode) (*tmp->loc)->mode)))
      || (tmp->need_caller_save_reg
   && ! (0
                                    )
   && (0
                                      )))
    break;
       if (! tmp)
  {
    if (tick[best_new_reg] > tick[new_reg])
      best_new_reg = new_reg;
  }
     }
   if (dump_file)
     {
       fprintf (dump_file, "Register %s in insn %d",
         reg_names[reg], (((last->insn)->u.fld[0]).rtint));
       if (last->need_caller_save_reg)
  fprintf (dump_file, " crosses a call");
     }
   if (best_new_reg == reg)
     {
       tick[reg] = ++this_tick;
       if (dump_file)
  fprintf (dump_file, "; no available better choice\n");
       continue;
     }
   do_replace (this, best_new_reg);
   tick[best_new_reg] = ++this_tick;
   regs_ever_live[best_new_reg] = 1;
   if (dump_file)
     fprintf (dump_file, ", renamed as %s\n", reg_names[best_new_reg]);
 }
      ( (&rename_obstack)->temp = (char *) (first_obj) - (char *) (&rename_obstack)->chunk, (((&rename_obstack)->temp > 0 && (&rename_obstack)->temp < (&rename_obstack)->chunk_limit - (char *) (&rename_obstack)->chunk) ? (int) ((&rename_obstack)->next_free = (&rename_obstack)->object_base = (&rename_obstack)->temp + (char *) (&rename_obstack)->chunk) : (((obstack_free) ((&rename_obstack), (&rename_obstack)->temp + (char *) (&rename_obstack)->chunk), 0), 0)));
    }
  ( (&rename_obstack)->temp = (char *) (((void *)0)) - (char *) (&rename_obstack)->chunk, (((&rename_obstack)->temp > 0 && (&rename_obstack)->temp < (&rename_obstack)->chunk_limit - (char *) (&rename_obstack)->chunk) ? (int) ((&rename_obstack)->next_free = (&rename_obstack)->object_base = (&rename_obstack)->temp + (char *) (&rename_obstack)->chunk) : (((obstack_free) ((&rename_obstack), (&rename_obstack)->temp + (char *) (&rename_obstack)->chunk), 0), 0)));
  if (dump_file)
    fputc_unlocked ('\n', dump_file);
  count_or_remove_death_notes (((void *)0), 1);
  update_life_info (((void *)0), UPDATE_LIFE_LOCAL,
      1);
}
static void
do_replace (struct du_chain *chain, int reg)
{
  while (chain)
    {
      unsigned int regno = (((*chain->loc)->u.fld[1]).rtuint);
      struct reg_attrs * attr = (((*chain->loc)->u.fld[2]).rtreg);
      *chain->loc = gen_raw_REG (((enum machine_mode) (*chain->loc)->mode), reg);
      if (regno >= 53)
 (((*chain->loc)->u.fld[1]).rtuint) = regno;
      (((*chain->loc)->u.fld[2]).rtreg) = attr;
      chain = chain->next_use;
    }
}
static struct du_chain *open_chains;
static struct du_chain *closed_chains;
static void
scan_rtx_reg (rtx insn, rtx *loc, enum reg_class class,
       enum scan_actions action, enum op_type type, int earlyclobber)
{
  struct du_chain **p;
  rtx x = *loc;
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  int this_regno = (((x)->u.fld[0]).rtuint);
  int this_nregs = hard_regno_nregs[this_regno][mode];
  if (action == mark_write)
    {
      if (type == OP_OUT)
 {
   struct du_chain *this
     = (( ((&rename_obstack))->temp = ((sizeof (struct du_chain))), ((((&rename_obstack))->chunk_limit - ((&rename_obstack))->next_free < ((&rename_obstack))->temp) ? (_obstack_newchunk (((&rename_obstack)), ((&rename_obstack))->temp), 0) : 0), (((&rename_obstack))->next_free += (((&rename_obstack))->temp))), ( (((&rename_obstack))->next_free == ((&rename_obstack))->object_base ? ((((&rename_obstack))->maybe_empty_object = 1), 0) : 0), ((&rename_obstack))->temp = ((((&rename_obstack))->object_base) - (char *) 0), ((&rename_obstack))->next_free = (((((((&rename_obstack))->next_free) - (char *) 0)+((&rename_obstack))->alignment_mask) & ~ (((&rename_obstack))->alignment_mask)) + (char *) 0), ((((&rename_obstack))->next_free - (char *) ((&rename_obstack))->chunk > ((&rename_obstack))->chunk_limit - (char *) ((&rename_obstack))->chunk) ? (((&rename_obstack))->next_free = ((&rename_obstack))->chunk_limit) : 0), ((&rename_obstack))->object_base = ((&rename_obstack))->next_free, ((((&rename_obstack))->temp) + (char *) 0)));
   this->next_use = 0;
   this->next_chain = open_chains;
   this->loc = loc;
   this->insn = insn;
   this->class = class;
   this->need_caller_save_reg = 0;
   this->earlyclobber = earlyclobber;
   open_chains = this;
 }
      return;
    }
  if ((type == OP_OUT && action != terminate_write)
      || (type != OP_OUT && action == terminate_write))
    return;
  for (p = &open_chains; *p;)
    {
      struct du_chain *this = *p;
      if (*this->loc == (global_rtl[GR_CC0]))
 p = &this->next_chain;
      else
 {
   int regno = (((*this->loc)->u.fld[0]).rtuint);
   int nregs = hard_regno_nregs[regno][((enum machine_mode) (*this->loc)->mode)];
   int exact_match = (regno == this_regno && nregs == this_nregs);
   if (regno + nregs <= this_regno
       || this_regno + this_nregs <= regno)
     {
       p = &this->next_chain;
       continue;
     }
   if (action == mark_read)
     {
       if (! exact_match)
  abort ();
       if (class != NO_REGS)
  {
    this = (( ((&rename_obstack))->temp = ((sizeof (struct du_chain))), ((((&rename_obstack))->chunk_limit - ((&rename_obstack))->next_free < ((&rename_obstack))->temp) ? (_obstack_newchunk (((&rename_obstack)), ((&rename_obstack))->temp), 0) : 0), (((&rename_obstack))->next_free += (((&rename_obstack))->temp))), ( (((&rename_obstack))->next_free == ((&rename_obstack))->object_base ? ((((&rename_obstack))->maybe_empty_object = 1), 0) : 0), ((&rename_obstack))->temp = ((((&rename_obstack))->object_base) - (char *) 0), ((&rename_obstack))->next_free = (((((((&rename_obstack))->next_free) - (char *) 0)+((&rename_obstack))->alignment_mask) & ~ (((&rename_obstack))->alignment_mask)) + (char *) 0), ((((&rename_obstack))->next_free - (char *) ((&rename_obstack))->chunk > ((&rename_obstack))->chunk_limit - (char *) ((&rename_obstack))->chunk) ? (((&rename_obstack))->next_free = ((&rename_obstack))->chunk_limit) : 0), ((&rename_obstack))->object_base = ((&rename_obstack))->next_free, ((((&rename_obstack))->temp) + (char *) 0)));
    this->next_use = 0;
    this->next_chain = (*p)->next_chain;
    this->loc = loc;
    this->insn = insn;
    this->class = class;
    this->need_caller_save_reg = 0;
    while (*p)
      p = &(*p)->next_use;
    *p = this;
    return;
  }
     }
   if (action != terminate_overlapping_read || ! exact_match)
     {
       struct du_chain *next = this->next_chain;
       if ((action == terminate_dead || action == terminate_write)
    && exact_match)
  {
    this->next_chain = closed_chains;
    closed_chains = this;
    if (dump_file)
      fprintf (dump_file,
        "Closing chain %s at insn %d (%s)\n",
        reg_names[(((*this->loc)->u.fld[0]).rtuint)], (((insn)->u.fld[0]).rtint),
        scan_actions_name[(int) action]);
  }
       else
  {
    if (dump_file)
      fprintf (dump_file,
        "Discarding chain %s at insn %d (%s)\n",
        reg_names[(((*this->loc)->u.fld[0]).rtuint)], (((insn)->u.fld[0]).rtint),
        scan_actions_name[(int) action]);
  }
       *p = next;
     }
   else
     p = &this->next_chain;
 }
    }
}
static void
scan_rtx_address (rtx insn, rtx *loc, enum reg_class class,
    enum scan_actions action, enum machine_mode mode)
{
  rtx x = *loc;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt;
  int i, j;
  if (action == mark_write)
    return;
  switch (code)
    {
    case PLUS:
      {
 rtx orig_op0 = (((x)->u.fld[0]).rtx1);
 rtx orig_op1 = (((x)->u.fld[1]).rtx1);
 enum rtx_code code0 = ((enum rtx_code) (orig_op0)->code);
 enum rtx_code code1 = ((enum rtx_code) (orig_op1)->code);
 rtx op0 = orig_op0;
 rtx op1 = orig_op1;
 rtx *locI = ((void *)0);
 rtx *locB = ((void *)0);
 if (((enum rtx_code) (op0)->code) == SUBREG)
   {
     op0 = (((op0)->u.fld[0]).rtx1);
     code0 = ((enum rtx_code) (op0)->code);
   }
 if (((enum rtx_code) (op1)->code) == SUBREG)
   {
     op1 = (((op1)->u.fld[0]).rtx1);
     code1 = ((enum rtx_code) (op1)->code);
   }
 if (code0 == MULT || code0 == SIGN_EXTEND || code0 == TRUNCATE
     || code0 == ZERO_EXTEND || code1 == MEM)
   {
     locI = &(((x)->u.fld[0]).rtx1);
     locB = &(((x)->u.fld[1]).rtx1);
   }
 else if (code1 == MULT || code1 == SIGN_EXTEND || code1 == TRUNCATE
   || code1 == ZERO_EXTEND || code0 == MEM)
   {
     locI = &(((x)->u.fld[1]).rtx1);
     locB = &(((x)->u.fld[0]).rtx1);
   }
 else if (code0 == CONST_INT || code0 == CONST
   || code0 == SYMBOL_REF || code0 == LABEL_REF)
   locB = &(((x)->u.fld[1]).rtx1);
 else if (code1 == CONST_INT || code1 == CONST
   || code1 == SYMBOL_REF || code1 == LABEL_REF)
   locB = &(((x)->u.fld[0]).rtx1);
 else if (code0 == REG && code1 == REG)
   {
     int index_op;
     if ((((((op0)->u.fld[0]).rtuint)) < 7 || ((((op0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] < 7)
  && (((((op1)->u.fld[0]).rtuint)) <= 7 || ((((op1)->u.fld[0]).rtuint)) == 16 || ((((op1)->u.fld[0]).rtuint)) == 20 || ((((op1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= 7))
       index_op = 0;
     else if ((((((op1)->u.fld[0]).rtuint)) < 7 || ((((op1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] < 7)
       && (((((op0)->u.fld[0]).rtuint)) <= 7 || ((((op0)->u.fld[0]).rtuint)) == 16 || ((((op0)->u.fld[0]).rtuint)) == 20 || ((((op0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= 7))
       index_op = 1;
     else if ((((((op1)->u.fld[0]).rtuint)) <= 7 || ((((op1)->u.fld[0]).rtuint)) == 16 || ((((op1)->u.fld[0]).rtuint)) == 20 || ((((op1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= 7))
       index_op = 0;
     else if ((((((op0)->u.fld[0]).rtuint)) <= 7 || ((((op0)->u.fld[0]).rtuint)) == 16 || ((((op0)->u.fld[0]).rtuint)) == 20 || ((((op0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= 7))
       index_op = 1;
     else if ((((((op1)->u.fld[0]).rtuint)) < 7 || ((((op1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] < 7))
       index_op = 1;
     else
       index_op = 0;
     locI = &(((x)->u.fld[index_op]).rtx1);
     locB = &(((x)->u.fld[!index_op]).rtx1);
   }
 else if (code0 == REG)
   {
     locI = &(((x)->u.fld[0]).rtx1);
     locB = &(((x)->u.fld[1]).rtx1);
   }
 else if (code1 == REG)
   {
     locI = &(((x)->u.fld[1]).rtx1);
     locB = &(((x)->u.fld[0]).rtx1);
   }
 if (locI)
   scan_rtx_address (insn, locI, INDEX_REGS, action, mode);
 if (locB)
   scan_rtx_address (insn, locB, GENERAL_REGS, action, mode);
 return;
      }
    case POST_INC:
    case POST_DEC:
    case POST_MODIFY:
    case PRE_INC:
    case PRE_DEC:
    case PRE_MODIFY:
      action = terminate_all_read;
      break;
    case MEM:
      scan_rtx_address (insn, &(((x)->u.fld[0]).rtx1),
   GENERAL_REGS, action,
   ((enum machine_mode) (x)->mode));
      return;
    case REG:
      scan_rtx_reg (insn, loc, class, action, OP_IN, 0);
      return;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 scan_rtx_address (insn, &(((x)->u.fld[i]).rtx1), class, action, mode);
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   scan_rtx_address (insn, &(((((x)->u.fld[i]).rtvec1))->elem[j]), class, action, mode);
    }
}
static void
scan_rtx (rtx insn, rtx *loc, enum reg_class class,
   enum scan_actions action, enum op_type type, int earlyclobber)
{
  const char *fmt;
  rtx x = *loc;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  int i, j;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
    case CC0:
    case PC:
      return;
    case REG:
      scan_rtx_reg (insn, loc, class, action, type, earlyclobber);
      return;
    case MEM:
      scan_rtx_address (insn, &(((x)->u.fld[0]).rtx1),
   GENERAL_REGS, action,
   ((enum machine_mode) (x)->mode));
      return;
    case SET:
      scan_rtx (insn, &(((x)->u.fld[1]).rtx1), class, action, OP_IN, 0);
      scan_rtx (insn, &(((x)->u.fld[0]).rtx1), class, action, OP_OUT, 0);
      return;
    case STRICT_LOW_PART:
      scan_rtx (insn, &(((x)->u.fld[0]).rtx1), class, action, OP_INOUT, earlyclobber);
      return;
    case ZERO_EXTRACT:
    case SIGN_EXTRACT:
      scan_rtx (insn, &(((x)->u.fld[0]).rtx1), class, action,
  type == OP_IN ? OP_IN : OP_INOUT, earlyclobber);
      scan_rtx (insn, &(((x)->u.fld[1]).rtx1), class, action, OP_IN, 0);
      scan_rtx (insn, &(((x)->u.fld[2]).rtx1), class, action, OP_IN, 0);
      return;
    case POST_INC:
    case PRE_INC:
    case POST_DEC:
    case PRE_DEC:
    case POST_MODIFY:
    case PRE_MODIFY:
      abort ();
    case CLOBBER:
      scan_rtx (insn, &(((x)->u.fld[0]).rtx1), class, action, OP_OUT, 1);
      return;
    case EXPR_LIST:
      scan_rtx (insn, &(((x)->u.fld[0]).rtx1), class, action, type, 0);
      if ((((x)->u.fld[1]).rtx1))
 scan_rtx (insn, &(((x)->u.fld[1]).rtx1), class, action, type, 0);
      return;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 scan_rtx (insn, &(((x)->u.fld[i]).rtx1), class, action, type, 0);
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   scan_rtx (insn, &(((((x)->u.fld[i]).rtvec1))->elem[j]), class, action, type, 0);
    }
}
static struct du_chain *
build_def_use (basic_block bb)
{
  rtx insn;
  open_chains = closed_chains = ((void *)0);
  for (insn = (bb)->head_; ; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   int n_ops;
   rtx note;
   rtx old_operands[30];
   rtx old_dups[4];
   int i, icode;
   int alt;
   int predicated;
   icode = ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn));
   extract_insn (insn);
   if (! constrain_operands (1))
     _fatal_insn_not_found (insn, "gcc.c", 600216, "?");
   preprocess_constraints ();
   alt = which_alternative;
   n_ops = recog_data.n_operands;
   predicated = ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == COND_EXEC;
   for (i = 0; i < n_ops; ++i)
     {
       int matches = recog_op_alt[i][alt].matches;
       if (matches >= 0)
  recog_op_alt[i][alt].class = recog_op_alt[matches][alt].class;
       if (matches >= 0 || recog_op_alt[i][alt].matched >= 0
           || (predicated && recog_data.operand_type[i] == OP_OUT))
  recog_data.operand_type[i] = OP_INOUT;
     }
   for (i = 0; i < n_ops; i++)
     scan_rtx (insn, recog_data.operand_loc[i],
        NO_REGS, terminate_overlapping_read,
        recog_data.operand_type[i], 0);
   for (i = 0; i < n_ops; i++)
     {
       old_operands[i] = recog_data.operand[i];
       if (recog_data.constraints[i][0] == '\0')
  continue;
       *recog_data.operand_loc[i] = (global_rtl[GR_CC0]);
     }
   for (i = 0; i < recog_data.n_dups; i++)
     {
       int dup_num = recog_data.dup_num[i];
       old_dups[i] = *recog_data.dup_loc[i];
       *recog_data.dup_loc[i] = (global_rtl[GR_CC0]);
       if (icode >= 0
    && insn_data[icode].operand[dup_num].eliminable == 0)
  old_dups[i] = recog_data.operand[dup_num];
     }
   scan_rtx (insn, &(((insn)->u.fld[5]).rtx1), NO_REGS, terminate_all_read,
      OP_IN, 0);
   for (i = 0; i < recog_data.n_dups; i++)
     *recog_data.dup_loc[i] = old_dups[i];
   for (i = 0; i < n_ops; i++)
     *recog_data.operand_loc[i] = old_operands[i];
   if (((enum rtx_code) (insn)->code) == CALL_INSN && (((insn)->u.fld[9]).rtx1))
     scan_rtx (insn, &(((insn)->u.fld[9]).rtx1),
        NO_REGS, terminate_all_read, OP_IN, 0);
   if (asm_noperands ((((insn)->u.fld[5]).rtx1)) > 0)
     for (i = 0; i < n_ops; i++)
       {
  rtx *loc = recog_data.operand_loc[i];
  rtx op = *loc;
  if ((((enum rtx_code) (op)->code) == REG)
      && (((op)->u.fld[0]).rtuint) == (((op)->u.fld[1]).rtuint)
      && (recog_data.operand_type[i] == OP_IN
   || recog_data.operand_type[i] == OP_INOUT))
    scan_rtx (insn, loc, NO_REGS, terminate_all_read, OP_IN, 0);
       }
   for (i = 0; i < n_ops + recog_data.n_dups; i++)
     {
       int opn = i < n_ops ? i : recog_data.dup_num[i - n_ops];
       rtx *loc = (i < n_ops
     ? recog_data.operand_loc[opn]
     : recog_data.dup_loc[i - n_ops]);
       enum reg_class class = recog_op_alt[opn][alt].class;
       enum op_type type = recog_data.operand_type[opn];
       if (recog_data.constraints[opn][0] == '\0')
  continue;
       if (recog_op_alt[opn][alt].is_address)
  scan_rtx_address (insn, loc, class, mark_read, VOIDmode);
       else
  scan_rtx (insn, loc, class, mark_read, type, 0);
     }
   for (note = (((insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
     {
       if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD)
  scan_rtx (insn, &(((note)->u.fld[0]).rtx1), NO_REGS, terminate_dead,
     OP_IN, 0);
       else if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_INC)
  scan_rtx (insn, &(((note)->u.fld[0]).rtx1), ALL_REGS, mark_read,
     OP_INOUT, 0);
     }
   if (((enum rtx_code) (insn)->code) == CALL_INSN)
     {
       struct du_chain *p;
       for (p = open_chains; p; p = p->next_chain)
  p->need_caller_save_reg = 1;
     }
   for (i = 0; i < n_ops; i++)
     {
       old_operands[i] = recog_data.operand[i];
       if (recog_data.operand_type[i] == OP_INOUT)
  *recog_data.operand_loc[i] = (global_rtl[GR_CC0]);
     }
   for (i = 0; i < recog_data.n_dups; i++)
     {
       int opn = recog_data.dup_num[i];
       old_dups[i] = *recog_data.dup_loc[i];
       if (recog_data.operand_type[opn] == OP_INOUT)
  *recog_data.dup_loc[i] = (global_rtl[GR_CC0]);
     }
   scan_rtx (insn, &(((insn)->u.fld[5]).rtx1), NO_REGS, terminate_write, OP_IN, 0);
   for (i = 0; i < recog_data.n_dups; i++)
     *recog_data.dup_loc[i] = old_dups[i];
   for (i = 0; i < n_ops; i++)
     *recog_data.operand_loc[i] = old_operands[i];
   if (asm_noperands ((((insn)->u.fld[5]).rtx1)) > 0)
     {
       for (i = 0; i < n_ops; i++)
  if (recog_data.operand_type[i] == OP_OUT)
    {
      rtx *loc = recog_data.operand_loc[i];
      rtx op = *loc;
      enum reg_class class = recog_op_alt[i][alt].class;
      if ((((enum rtx_code) (op)->code) == REG)
   && (((op)->u.fld[0]).rtuint) == (((op)->u.fld[1]).rtuint))
        continue;
      scan_rtx (insn, loc, class, mark_write, OP_OUT,
         recog_op_alt[i][alt].earlyclobber);
    }
     }
   else if (((enum rtx_code) (insn)->code) != CALL_INSN)
     for (i = 0; i < n_ops + recog_data.n_dups; i++)
       {
  int opn = i < n_ops ? i : recog_data.dup_num[i - n_ops];
  rtx *loc = (i < n_ops
       ? recog_data.operand_loc[opn]
       : recog_data.dup_loc[i - n_ops]);
  enum reg_class class = recog_op_alt[opn][alt].class;
  if (recog_data.operand_type[opn] == OP_OUT)
    scan_rtx (insn, loc, class, mark_write, OP_OUT,
       recog_op_alt[opn][alt].earlyclobber);
       }
   for (note = (((insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
     if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_UNUSED)
       scan_rtx (insn, &(((note)->u.fld[0]).rtx1), NO_REGS, terminate_dead,
   OP_IN, 0);
 }
      if (insn == (bb)->end_)
 break;
    }
  return closed_chains;
}
static void
dump_def_use_chain (struct du_chain *chains)
{
  while (chains)
    {
      struct du_chain *this = chains;
      int r = (((*this->loc)->u.fld[0]).rtuint);
      int nregs = hard_regno_nregs[r][((enum machine_mode) (*this->loc)->mode)];
      fprintf (dump_file, "Register %s (%d):", reg_names[r], nregs);
      while (this)
 {
   fprintf (dump_file, " %d [%s]", (((this->insn)->u.fld[0]).rtint),
     reg_class_names3[this->class]);
   this = this->next_use;
 }
      fprintf (dump_file, "\n");
      chains = chains->next_chain;
    }
}
struct value_data_entry
{
  enum machine_mode mode;
  unsigned int oldest_regno;
  unsigned int next_regno;
};
struct value_data
{
  struct value_data_entry e[53];
  unsigned int max_value_regs;
};
static void kill_value_regno (unsigned, struct value_data *);
static void kill_value (rtx, struct value_data *);
static void set_value_regno (unsigned, enum machine_mode, struct value_data *);
static void init_value_data (struct value_data *);
static void kill_clobbered_value (rtx, rtx, void *);
static void kill_set_value (rtx, rtx, void *);
static int kill_autoinc_value (rtx *, void *);
static void copy_value (rtx, rtx, struct value_data *);
static unsigned char mode_change_ok (enum machine_mode, enum machine_mode,
       unsigned int);
static rtx maybe_mode_change (enum machine_mode, enum machine_mode,
         enum machine_mode, unsigned int, unsigned int);
static rtx find_oldest_value_reg (enum reg_class, rtx, struct value_data *);
static unsigned char replace_oldest_value_reg (rtx *, enum reg_class, rtx,
          struct value_data *);
static unsigned char replace_oldest_value_addr (rtx *, enum reg_class,
           enum machine_mode, rtx,
           struct value_data *);
static unsigned char replace_oldest_value_mem (rtx, rtx, struct value_data *);
static unsigned char copyprop_hardreg_forward_1 (basic_block, struct value_data *);
extern void debug_value_data (struct value_data *);
static void
kill_value_regno (unsigned int regno, struct value_data *vd)
{
  unsigned int i, next;
  if (vd->e[regno].oldest_regno != regno)
    {
      for (i = vd->e[regno].oldest_regno;
    vd->e[i].next_regno != regno;
    i = vd->e[i].next_regno)
 continue;
      vd->e[i].next_regno = vd->e[regno].next_regno;
    }
  else if ((next = vd->e[regno].next_regno) != (~(unsigned int) 0))
    {
      for (i = next; i != (~(unsigned int) 0); i = vd->e[i].next_regno)
 vd->e[i].oldest_regno = next;
    }
  vd->e[regno].mode = VOIDmode;
  vd->e[regno].oldest_regno = regno;
  vd->e[regno].next_regno = (~(unsigned int) 0);
}
static void
kill_value (rtx x, struct value_data *vd)
{
  if (((enum rtx_code) (x)->code) == SUBREG)
    x = simplify_subreg (((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1),
    ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode), (((x)->u.fld[1]).rtuint));
  if ((((enum rtx_code) (x)->code) == REG))
    {
      unsigned int regno = (((x)->u.fld[0]).rtuint);
      unsigned int n = hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
      unsigned int i, j;
      for (i = 0; i < n; ++i)
 kill_value_regno (regno + i, vd);
      if (regno < vd->max_value_regs)
 j = 0;
      else
 j = regno - vd->max_value_regs;
      for (; j < regno; ++j)
 {
   if (vd->e[j].mode == VOIDmode)
     continue;
   n = hard_regno_nregs[j][vd->e[j].mode];
   if (j + n > regno)
     for (i = 0; i < n; ++i)
       kill_value_regno (j + i, vd);
 }
    }
}
static void
set_value_regno (unsigned int regno, enum machine_mode mode,
   struct value_data *vd)
{
  unsigned int nregs;
  vd->e[regno].mode = mode;
  nregs = hard_regno_nregs[regno][mode];
  if (nregs > vd->max_value_regs)
    vd->max_value_regs = nregs;
}
static void
init_value_data (struct value_data *vd)
{
  int i;
  for (i = 0; i < 53; ++i)
    {
      vd->e[i].mode = VOIDmode;
      vd->e[i].oldest_regno = i;
      vd->e[i].next_regno = (~(unsigned int) 0);
    }
  vd->max_value_regs = 0;
}
static void
kill_clobbered_value (rtx x, rtx set, void *data)
{
  struct value_data *vd = data;
  if (((enum rtx_code) (set)->code) == CLOBBER)
    kill_value (x, vd);
}
static void
kill_set_value (rtx x, rtx set, void *data)
{
  struct value_data *vd = data;
  if (((enum rtx_code) (set)->code) != CLOBBER)
    {
      kill_value (x, vd);
      if ((((enum rtx_code) (x)->code) == REG))
 set_value_regno ((((x)->u.fld[0]).rtuint), ((enum machine_mode) (x)->mode), vd);
    }
}
static int
kill_autoinc_value (rtx *px, void *data)
{
  rtx x = *px;
  struct value_data *vd = data;
  if ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_AUTOINC)
    {
      x = (((x)->u.fld[0]).rtx1);
      kill_value (x, vd);
      set_value_regno ((((x)->u.fld[0]).rtuint), (0 ? DImode : SImode), vd);
      return -1;
    }
  return 0;
}
static void
copy_value (rtx dest, rtx src, struct value_data *vd)
{
  unsigned int dr = (((dest)->u.fld[0]).rtuint);
  unsigned int sr = (((src)->u.fld[0]).rtuint);
  unsigned int dn, sn;
  unsigned int i;
  if (sr == dr)
    return;
  if (dr == 7)
    return;
  if (frame_pointer_needed && dr == 6)
    return;
  dn = hard_regno_nregs[dr][((enum machine_mode) (dest)->mode)];
  sn = hard_regno_nregs[sr][((enum machine_mode) (dest)->mode)];
  if ((dr > sr && dr < sr + sn)
      || (sr > dr && sr < dr + dn))
    return;
  if (vd->e[sr].mode == VOIDmode)
    set_value_regno (sr, vd->e[dr].mode, vd);
  else if (sn < (unsigned int) hard_regno_nregs[sr][vd->e[sr].mode]
    && (((unsigned short) mode_size[vd->e[sr].mode]) > (0 ? 8 : 4)
        ? 0 : 0))
    return;
  else if (sn > (unsigned int) hard_regno_nregs[sr][vd->e[sr].mode])
    return;
  vd->e[dr].oldest_regno = vd->e[sr].oldest_regno;
  for (i = sr; vd->e[i].next_regno != (~(unsigned int) 0); i = vd->e[i].next_regno)
    continue;
  vd->e[i].next_regno = dr;
}
static unsigned char
mode_change_ok (enum machine_mode orig_mode, enum machine_mode new_mode,
  unsigned int regno )
{
  if (((unsigned short) mode_size[orig_mode]) < ((unsigned short) mode_size[new_mode]))
    return 0;
  return !(((unsigned short) mode_size[new_mode]) < ((unsigned short) mode_size[orig_mode]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, ((regclass_map[regno]))) || reg_classes_intersect_p (MMX_REGS, ((regclass_map[regno]))) : ((unsigned short) mode_size[orig_mode]) != ((unsigned short) mode_size[new_mode]) ? reg_classes_intersect_p (FLOAT_REGS, ((regclass_map[regno]))) : 0);
  return 1;
}
static rtx
maybe_mode_change (enum machine_mode orig_mode, enum machine_mode copy_mode,
     enum machine_mode new_mode, unsigned int regno,
     unsigned int copy_regno )
{
  if (orig_mode == new_mode)
    return gen_rtx_fmt_i00 (REG, (new_mode), (regno));
  else if (mode_change_ok (orig_mode, new_mode, regno))
    {
      int copy_nregs = hard_regno_nregs[copy_regno][copy_mode];
      int use_nregs = hard_regno_nregs[copy_regno][new_mode];
      int copy_offset
 = ((unsigned short) mode_size[copy_mode]) / copy_nregs * (copy_nregs - use_nregs);
      int offset
 = ((unsigned short) mode_size[orig_mode]) - ((unsigned short) mode_size[new_mode]) - copy_offset;
      int byteoffset = offset % (0 ? 8 : 4);
      int wordoffset = offset - byteoffset;
      offset = ((0 ? wordoffset : 0)
  + (0 ? byteoffset : 0));
      return gen_rtx_fmt_i00 (REG, (new_mode), (regno + subreg_regno_offset (regno, orig_mode, offset, new_mode)))
                    ;
    }
  return (rtx) 0;
}
static rtx
find_oldest_value_reg (enum reg_class class, rtx reg, struct value_data *vd)
{
  unsigned int regno = (((reg)->u.fld[0]).rtuint);
  enum machine_mode mode = ((enum machine_mode) (reg)->mode);
  unsigned int i;
  if (mode != vd->e[regno].mode)
    {
      if (hard_regno_nregs[regno][mode]
   > hard_regno_nregs[regno][vd->e[regno].mode])
 return (rtx) 0;
    }
  for (i = vd->e[regno].oldest_regno; i != regno; i = vd->e[i].next_regno)
    {
      enum machine_mode oldmode = vd->e[i].mode;
      rtx new;
      unsigned int last;
      for (last = i; last < i + hard_regno_nregs[i][mode]; last++)
 if (!(!!((reg_class_contents[class])[(last) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((last) % ((unsigned) (8 * 4)))))))
   return (rtx) 0;
      new = maybe_mode_change (oldmode, vd->e[regno].mode, mode, i, regno);
      if (new)
 {
   (((new)->u.fld[1]).rtuint) = (((reg)->u.fld[1]).rtuint);
   (((new)->u.fld[2]).rtreg) = (((reg)->u.fld[2]).rtreg);
   return new;
 }
    }
  return (rtx) 0;
}
static unsigned char
replace_oldest_value_reg (rtx *loc, enum reg_class class, rtx insn,
     struct value_data *vd)
{
  rtx new = find_oldest_value_reg (class, *loc, vd);
  if (new)
    {
      if (dump_file)
 fprintf (dump_file, "insn %u: replaced reg %u with %u\n",
   (((insn)->u.fld[0]).rtint), (((*loc)->u.fld[0]).rtuint), (((new)->u.fld[0]).rtuint));
      *loc = new;
      return 1;
    }
  return 0;
}
static unsigned char
replace_oldest_value_addr (rtx *loc, enum reg_class class,
      enum machine_mode mode, rtx insn,
      struct value_data *vd)
{
  rtx x = *loc;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt;
  int i, j;
  unsigned char changed = 0;
  switch (code)
    {
    case PLUS:
      {
 rtx orig_op0 = (((x)->u.fld[0]).rtx1);
 rtx orig_op1 = (((x)->u.fld[1]).rtx1);
 enum rtx_code code0 = ((enum rtx_code) (orig_op0)->code);
 enum rtx_code code1 = ((enum rtx_code) (orig_op1)->code);
 rtx op0 = orig_op0;
 rtx op1 = orig_op1;
 rtx *locI = ((void *)0);
 rtx *locB = ((void *)0);
 if (((enum rtx_code) (op0)->code) == SUBREG)
   {
     op0 = (((op0)->u.fld[0]).rtx1);
     code0 = ((enum rtx_code) (op0)->code);
   }
 if (((enum rtx_code) (op1)->code) == SUBREG)
   {
     op1 = (((op1)->u.fld[0]).rtx1);
     code1 = ((enum rtx_code) (op1)->code);
   }
 if (code0 == MULT || code0 == SIGN_EXTEND || code0 == TRUNCATE
     || code0 == ZERO_EXTEND || code1 == MEM)
   {
     locI = &(((x)->u.fld[0]).rtx1);
     locB = &(((x)->u.fld[1]).rtx1);
   }
 else if (code1 == MULT || code1 == SIGN_EXTEND || code1 == TRUNCATE
   || code1 == ZERO_EXTEND || code0 == MEM)
   {
     locI = &(((x)->u.fld[1]).rtx1);
     locB = &(((x)->u.fld[0]).rtx1);
   }
 else if (code0 == CONST_INT || code0 == CONST
   || code0 == SYMBOL_REF || code0 == LABEL_REF)
   locB = &(((x)->u.fld[1]).rtx1);
 else if (code1 == CONST_INT || code1 == CONST
   || code1 == SYMBOL_REF || code1 == LABEL_REF)
   locB = &(((x)->u.fld[0]).rtx1);
 else if (code0 == REG && code1 == REG)
   {
     int index_op;
     if ((((((op0)->u.fld[0]).rtuint)) < 7 || ((((op0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] < 7)
  && (((((op1)->u.fld[0]).rtuint)) <= 7 || ((((op1)->u.fld[0]).rtuint)) == 16 || ((((op1)->u.fld[0]).rtuint)) == 20 || ((((op1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= 7))
       index_op = 0;
     else if ((((((op1)->u.fld[0]).rtuint)) < 7 || ((((op1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] < 7)
       && (((((op0)->u.fld[0]).rtuint)) <= 7 || ((((op0)->u.fld[0]).rtuint)) == 16 || ((((op0)->u.fld[0]).rtuint)) == 20 || ((((op0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= 7))
       index_op = 1;
     else if ((((((op1)->u.fld[0]).rtuint)) <= 7 || ((((op1)->u.fld[0]).rtuint)) == 16 || ((((op1)->u.fld[0]).rtuint)) == 20 || ((((op1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= 7))
       index_op = 0;
     else if ((((((op0)->u.fld[0]).rtuint)) <= 7 || ((((op0)->u.fld[0]).rtuint)) == 16 || ((((op0)->u.fld[0]).rtuint)) == 20 || ((((op0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= 7))
       index_op = 1;
     else if ((((((op1)->u.fld[0]).rtuint)) < 7 || ((((op1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] < 7))
       index_op = 1;
     else
       index_op = 0;
     locI = &(((x)->u.fld[index_op]).rtx1);
     locB = &(((x)->u.fld[!index_op]).rtx1);
   }
 else if (code0 == REG)
   {
     locI = &(((x)->u.fld[0]).rtx1);
     locB = &(((x)->u.fld[1]).rtx1);
   }
 else if (code1 == REG)
   {
     locI = &(((x)->u.fld[1]).rtx1);
     locB = &(((x)->u.fld[0]).rtx1);
   }
 if (locI)
   changed |= replace_oldest_value_addr (locI, INDEX_REGS, mode,
      insn, vd);
 if (locB)
   changed |= replace_oldest_value_addr (locB,
      GENERAL_REGS,
      mode, insn, vd);
 return changed;
      }
    case POST_INC:
    case POST_DEC:
    case POST_MODIFY:
    case PRE_INC:
    case PRE_DEC:
    case PRE_MODIFY:
      return 0;
    case MEM:
      return replace_oldest_value_mem (x, insn, vd);
    case REG:
      return replace_oldest_value_reg (loc, class, insn, vd);
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 changed |= replace_oldest_value_addr (&(((x)->u.fld[i]).rtx1), class, mode,
           insn, vd);
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   changed |= replace_oldest_value_addr (&(((((x)->u.fld[i]).rtvec1))->elem[j]), class,
      mode, insn, vd);
    }
  return changed;
}
static unsigned char
replace_oldest_value_mem (rtx x, rtx insn, struct value_data *vd)
{
  return replace_oldest_value_addr (&(((x)->u.fld[0]).rtx1),
        GENERAL_REGS,
        ((enum machine_mode) (x)->mode), insn, vd);
}
static unsigned char
copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
{
  unsigned char changed = 0;
  rtx insn;
  for (insn = (bb)->head_; ; insn = (((insn)->u.fld[2]).rtx1))
    {
      int n_ops, i, alt, predicated;
      unsigned char is_asm;
      rtx set;
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   if (insn == (bb)->end_)
     break;
   else
     continue;
 }
      set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
      extract_insn (insn);
      if (! constrain_operands (1))
 _fatal_insn_not_found (insn, "gcc.c", 601002, "?");
      preprocess_constraints ();
      alt = which_alternative;
      n_ops = recog_data.n_operands;
      is_asm = asm_noperands ((((insn)->u.fld[5]).rtx1)) >= 0;
      predicated = ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == COND_EXEC;
      for (i = 0; i < n_ops; ++i)
 {
   int matches = recog_op_alt[i][alt].matches;
   if (matches >= 0)
     recog_op_alt[i][alt].class = recog_op_alt[matches][alt].class;
   if (matches >= 0 || recog_op_alt[i][alt].matched >= 0
       || (predicated && recog_data.operand_type[i] == OP_OUT))
     recog_data.operand_type[i] = OP_INOUT;
 }
      for (i = 0; i < n_ops; i++)
 if (recog_op_alt[i][alt].earlyclobber)
   kill_value (recog_data.operand[i], vd);
      note_stores ((((insn)->u.fld[5]).rtx1), kill_clobbered_value, vd);
      for_each_rtx (&(((insn)->u.fld[5]).rtx1), kill_autoinc_value, vd);
      for (i = 0; i < n_ops; i++)
 if (recog_op_alt[i][alt].earlyclobber)
   kill_value (recog_data.operand[i], vd);
      if (set && (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == REG))
 {
   rtx src = (((set)->u.fld[1]).rtx1);
   unsigned int regno = (((src)->u.fld[0]).rtuint);
   enum machine_mode mode = ((enum machine_mode) (src)->mode);
   unsigned int i;
   rtx new;
   if (mode != vd->e[regno].mode)
     {
       if (hard_regno_nregs[regno][mode]
    > hard_regno_nregs[regno][vd->e[regno].mode])
  goto no_move_special_case;
     }
   if ((((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG))
     {
       new = find_oldest_value_reg ((regclass_map[regno]), src, vd);
       if (new && validate_change (insn, &(((set)->u.fld[1]).rtx1), new, 0))
  {
    if (dump_file)
      fprintf (dump_file,
        "insn %u: replaced reg %u with %u\n",
        (((insn)->u.fld[0]).rtint), regno, (((new)->u.fld[0]).rtuint));
    changed = 1;
    goto did_replacement;
  }
     }
   for (i = vd->e[regno].oldest_regno; i != regno;
        i = vd->e[i].next_regno)
     {
       new = maybe_mode_change (vd->e[i].mode, vd->e[regno].mode,
           mode, i, regno);
       if (new != (rtx) 0)
  {
    if (validate_change (insn, &(((set)->u.fld[1]).rtx1), new, 0))
      {
        (((new)->u.fld[1]).rtuint) = (((src)->u.fld[1]).rtuint);
        (((new)->u.fld[2]).rtreg) = (((src)->u.fld[2]).rtreg);
        if (dump_file)
   fprintf (dump_file,
     "insn %u: replaced reg %u with %u\n",
     (((insn)->u.fld[0]).rtint), regno, (((new)->u.fld[0]).rtuint));
        changed = 1;
        goto did_replacement;
      }
  }
     }
 }
      no_move_special_case:
      for (i = 0; i < n_ops; i++)
 {
   unsigned char replaced = 0;
   if (recog_data.constraints[i][0] == '\0')
     continue;
   if (is_asm && (((enum rtx_code) (recog_data.operand[i])->code) == REG)
       && ((((recog_data.operand[i])->u.fld[0]).rtuint)
    == (((recog_data.operand[i])->u.fld[1]).rtuint)))
     continue;
   if (recog_data.operand_type[i] == OP_IN)
     {
       if (recog_op_alt[i][alt].is_address)
  replaced
    = replace_oldest_value_addr (recog_data.operand_loc[i],
            recog_op_alt[i][alt].class,
            VOIDmode, insn, vd);
       else if ((((enum rtx_code) (recog_data.operand[i])->code) == REG))
  replaced
    = replace_oldest_value_reg (recog_data.operand_loc[i],
           recog_op_alt[i][alt].class,
           insn, vd);
       else if ((((enum rtx_code) (recog_data.operand[i])->code) == MEM))
  replaced = replace_oldest_value_mem (recog_data.operand[i],
           insn, vd);
     }
   else if ((((enum rtx_code) (recog_data.operand[i])->code) == MEM))
     replaced = replace_oldest_value_mem (recog_data.operand[i],
       insn, vd);
   if (replaced)
     {
       int j;
       rtx new;
       changed = 1;
       new = *recog_data.operand_loc[i];
       recog_data.operand[i] = new;
       for (j = 0; j < recog_data.n_dups; j++)
  if (recog_data.dup_num[j] == i)
    *recog_data.dup_loc[j] = new;
     }
 }
    did_replacement:
      if (((enum rtx_code) (insn)->code) == CALL_INSN)
 for (i = 0; i < 53; i++)
   if ((!!((regs_invalidated_by_call)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
     kill_value_regno (i, vd);
      note_stores ((((insn)->u.fld[5]).rtx1), kill_set_value, vd);
      if (set && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG) && (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == REG))
 copy_value ((((set)->u.fld[0]).rtx1), (((set)->u.fld[1]).rtx1), vd);
      if (insn == (bb)->end_)
 break;
    }
  return changed;
}
void
copyprop_hardreg_forward (void)
{
  struct value_data *all_vd;
  unsigned char need_refresh;
  basic_block bb, bbp = 0;
  need_refresh = 0;
  all_vd = xmalloc (sizeof (struct value_data) * last_basic_block);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      if (bb->pred)
 for (bbp = bb; bbp && bbp != bb->pred->src; bbp = bbp->prev_bb);
      if (bb->pred
   && ! bb->pred->pred_next
   && ! (bb->pred->flags & (4 | 8))
   && bb->pred->src != ENTRY_BLOCK_PTR
   && bbp)
 all_vd[bb->index] = all_vd[bb->pred->src->index];
      else
 init_value_data (all_vd + bb->index);
      if (copyprop_hardreg_forward_1 (bb, all_vd + bb->index))
 need_refresh = 1;
    }
  if (need_refresh)
    {
      if (dump_file)
 fputs_unlocked ("\n\n", dump_file);
      delete_noop_moves ();
      update_life_info (((void *)0), UPDATE_LIFE_GLOBAL_RM_NOTES,
   1
   | 16
   | 8);
    }
  free (all_vd);
}
void
debug_value_data (struct value_data *vd)
{
  HARD_REG_SET set;
  unsigned int i, j;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (set); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (i = 0; i < 53; ++i)
    if (vd->e[i].oldest_regno == i)
      {
 if (vd->e[i].mode == VOIDmode)
   {
     if (vd->e[i].next_regno != (~(unsigned int) 0))
       fprintf (stderr, "[%u] Bad next_regno for empty chain (%u)\n",
         i, vd->e[i].next_regno);
     continue;
   }
 ((set)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
 fprintf (stderr, "[%u %s] ", i, mode_name[vd->e[i].mode]);
 for (j = vd->e[i].next_regno;
      j != (~(unsigned int) 0);
      j = vd->e[j].next_regno)
   {
     if ((!!((set)[(j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4)))))))
       {
  fprintf (stderr, "[%u] Loop in regno chain\n", j);
  return;
       }
     if (vd->e[j].oldest_regno != i)
       {
  fprintf (stderr, "[%u] Bad oldest_regno (%u)\n",
    j, vd->e[j].oldest_regno);
  return;
       }
     ((set)[(j) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4))));
     fprintf (stderr, "[%u %s] ", j, mode_name[vd->e[j].mode]);
   }
 fputc_unlocked ('\n', stderr);
      }
  for (i = 0; i < 53; ++i)
    if (! (!!((set)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
 && (vd->e[i].mode != VOIDmode
     || vd->e[i].oldest_regno != i
     || vd->e[i].next_regno != (~(unsigned int) 0)))
      fprintf (stderr, "[%u] Non-empty reg in chain (%s %u %i)\n",
        i, mode_name[vd->e[i].mode], vd->e[i].oldest_regno,
        vd->e[i].next_regno);
}
int n_reloads;
struct reload rld[(2 * 30 * (2 + 1))];
int n_earlyclobbers;
rtx reload_earlyclobbers[30];
int reload_n_operands;
static int replace_reloads;
struct replacement
{
  rtx *where;
  rtx *subreg_loc;
  int what;
  enum machine_mode mode;
};
static struct replacement replacements[30 * ((2 * 2) + 1)];
static int n_replacements;
struct decomposition
{
  int reg_flag;
  int safe;
  rtx base;
  long start;
  long end;
};
static rtx secondary_memlocs[NUM_MACHINE_MODES];
static rtx secondary_memlocs_elim[NUM_MACHINE_MODES][30];
static int secondary_memlocs_elim_used = 0;
static rtx this_insn;
static int this_insn_is_asm;
static int hard_regs_live_known;
static short *static_reload_reg_p;
static int subst_reg_equivs_changed;
static int output_reloadnum;
static int push_secondary_reload (int, rtx, int, int, enum reg_class,
      enum machine_mode, enum reload_type,
      enum insn_code *);
static enum reg_class find_valid_class (enum machine_mode, int, unsigned int);
static int reload_inner_reg_of_subreg (rtx, enum machine_mode, int);
static void push_replacement (rtx *, int, enum machine_mode);
static void dup_replacements (rtx *, rtx *);
static void combine_reloads (void);
static int find_reusable_reload (rtx *, rtx, enum reg_class,
     enum reload_type, int, int);
static rtx find_dummy_reload (rtx, rtx, rtx *, rtx *, enum machine_mode,
         enum machine_mode, enum reg_class, int, int);
static int hard_reg_set_here_p (unsigned int, unsigned int, rtx);
static struct decomposition decompose (rtx);
static int immune_p (rtx, rtx, struct decomposition);
static int alternative_allows_memconst (const char *, int);
static rtx find_reloads_toplev (rtx, int, enum reload_type, int, int, rtx,
    int *);
static rtx make_memloc (rtx, int);
static int maybe_memory_address_p (enum machine_mode, rtx, rtx *);
static int find_reloads_address (enum machine_mode, rtx *, rtx, rtx *,
     int, enum reload_type, int, rtx);
static rtx subst_reg_equivs (rtx, rtx);
static rtx subst_indexed_address (rtx);
static void update_auto_inc_notes (rtx, int, int);
static int find_reloads_address_1 (enum machine_mode, rtx, int, rtx *,
       int, enum reload_type,int, rtx);
static void find_reloads_address_part (rtx, rtx *, enum reg_class,
           enum machine_mode, int,
           enum reload_type, int);
static rtx find_reloads_subreg_address (rtx, int, int, enum reload_type,
     int, rtx);
static void copy_replacements_1 (rtx *, rtx *, int);
static int find_inc_amount (rtx, rtx);
static int
push_secondary_reload (int in_p, rtx x, int opnum, int optional,
         enum reg_class reload_class,
         enum machine_mode reload_mode, enum reload_type type,
         enum insn_code *picode)
{
  enum reg_class class = NO_REGS;
  enum machine_mode mode = reload_mode;
  enum insn_code icode = CODE_FOR_nothing;
  enum reg_class t_class = NO_REGS;
  enum machine_mode t_mode = VOIDmode;
  enum insn_code t_icode = CODE_FOR_nothing;
  enum reload_type secondary_type;
  int s_reload, t_reload = -1;
  if (type == RELOAD_FOR_INPUT_ADDRESS
      || type == RELOAD_FOR_OUTPUT_ADDRESS
      || type == RELOAD_FOR_INPADDR_ADDRESS
      || type == RELOAD_FOR_OUTADDR_ADDRESS)
    secondary_type = type;
  else
    secondary_type = in_p ? RELOAD_FOR_INPUT_ADDRESS : RELOAD_FOR_OUTPUT_ADDRESS;
  *picode = CODE_FOR_nothing;
  if (((enum rtx_code) (x)->code) == SUBREG
      && (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])
   > ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)])))
    {
      x = (((x)->u.fld[0]).rtx1);
      reload_mode = ((enum machine_mode) (x)->mode);
    }
  if ((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) >= 53
      && reg_equiv_mem[(((x)->u.fld[0]).rtuint)] != 0)
    x = reg_equiv_mem[(((x)->u.fld[0]).rtuint)];
  if (! in_p)
    class = (((reload_class) == GENERAL_REGS || (reload_class) == LEGACY_REGS || (reload_class) == INDEX_REGS) && !0 && (reload_mode) == QImode ? Q_REGS : NO_REGS);
  if (class == NO_REGS)
    return -1;
  icode = (in_p ? reload_in_optab[(int) reload_mode]
    : reload_out_optab[(int) reload_mode]);
  if (icode != CODE_FOR_nothing
      && insn_data[(int) icode].operand[in_p].predicate
      && (! (insn_data[(int) icode].operand[in_p].predicate) (x, reload_mode)))
    icode = CODE_FOR_nothing;
  if (icode != CODE_FOR_nothing)
    {
      enum reg_class insn_class;
      if (insn_data[(int) icode].operand[!in_p].constraint[0] == 0)
 insn_class = ALL_REGS;
      else
 {
   const char *insn_constraint
     = &insn_data[(int) icode].operand[!in_p].constraint[in_p];
   char insn_letter = *insn_constraint;
   insn_class
     = (insn_letter == 'r' ? GENERAL_REGS
        : (((unsigned char) insn_letter) == 'r' ? GENERAL_REGS : NO_REGS)
                         );
          if (insn_class == NO_REGS)
     abort ();
   if (in_p
       && insn_data[(int) icode].operand[!in_p].constraint[0] != '=')
     abort ();
 }
      if (insn_data[(int) icode].operand[2].constraint[0] != '='
   || insn_data[(int) icode].operand[2].constraint[1] != '&')
 abort ();
      if (reg_class_subset_p (reload_class, insn_class))
 mode = insn_data[(int) icode].operand[2].mode;
      else
 {
   const char *t_constraint
     = &insn_data[(int) icode].operand[2].constraint[2];
   char t_letter = *t_constraint;
   class = insn_class;
   t_mode = insn_data[(int) icode].operand[2].mode;
   t_class = (t_letter == 'r' ? GENERAL_REGS
       : (((unsigned char) t_letter) == 'r' ? GENERAL_REGS : NO_REGS)
                     );
   t_icode = icode;
   icode = CODE_FOR_nothing;
 }
    }
  if (in_p && class == reload_class && icode == CODE_FOR_nothing
      && t_icode == CODE_FOR_nothing)
    abort ();
  if (t_class != NO_REGS)
    {
      for (t_reload = 0; t_reload < n_reloads; t_reload++)
 if (rld[t_reload].secondary_p
     && (reg_class_subset_p (t_class, rld[t_reload].class)
  || reg_class_subset_p (rld[t_reload].class, t_class))
     && ((in_p && rld[t_reload].inmode == t_mode)
  || (! in_p && rld[t_reload].outmode == t_mode))
     && ((in_p && (rld[t_reload].secondary_in_icode
     == CODE_FOR_nothing))
  || (! in_p &&(rld[t_reload].secondary_out_icode
         == CODE_FOR_nothing)))
     && (reg_class_size[(int) t_class] == 1 || 1)
     && ((secondary_type) == RELOAD_OTHER || (rld[t_reload].when_needed) == RELOAD_OTHER || ((secondary_type) == (rld[t_reload].when_needed) && (opnum) == (rld[t_reload].opnum)) || ((secondary_type) == RELOAD_FOR_INPUT && (rld[t_reload].when_needed) == RELOAD_FOR_INPUT) || ((secondary_type) == RELOAD_FOR_OPERAND_ADDRESS && (rld[t_reload].when_needed) == RELOAD_FOR_OPERAND_ADDRESS) || ((secondary_type) == RELOAD_FOR_OTHER_ADDRESS && (rld[t_reload].when_needed) == RELOAD_FOR_OTHER_ADDRESS))
                                )
   {
     if (in_p)
       rld[t_reload].inmode = t_mode;
     if (! in_p)
       rld[t_reload].outmode = t_mode;
     if (reg_class_subset_p (t_class, rld[t_reload].class))
       rld[t_reload].class = t_class;
     rld[t_reload].opnum = ((rld[t_reload].opnum) < (opnum) ? (rld[t_reload].opnum) : (opnum));
     rld[t_reload].optional &= optional;
     rld[t_reload].secondary_p = 1;
     if (((secondary_type) != (rld[t_reload].when_needed) || ! ((opnum) == (rld[t_reload].opnum) || (secondary_type) == RELOAD_FOR_INPUT || (secondary_type) == RELOAD_FOR_OPERAND_ADDRESS || (secondary_type) == RELOAD_FOR_OTHER_ADDRESS))
                               )
       rld[t_reload].when_needed = RELOAD_OTHER;
   }
      if (t_reload == n_reloads)
 {
   rld[t_reload].in = rld[t_reload].out = 0;
   rld[t_reload].class = t_class;
   rld[t_reload].inmode = in_p ? t_mode : VOIDmode;
   rld[t_reload].outmode = ! in_p ? t_mode : VOIDmode;
   rld[t_reload].reg_rtx = 0;
   rld[t_reload].optional = optional;
   rld[t_reload].inc = 0;
   rld[t_reload].nocombine = 1;
   rld[t_reload].in_reg = 0;
   rld[t_reload].out_reg = 0;
   rld[t_reload].opnum = opnum;
   rld[t_reload].when_needed = secondary_type;
   rld[t_reload].secondary_in_reload = -1;
   rld[t_reload].secondary_out_reload = -1;
   rld[t_reload].secondary_in_icode = CODE_FOR_nothing;
   rld[t_reload].secondary_out_icode = CODE_FOR_nothing;
   rld[t_reload].secondary_p = 1;
   n_reloads++;
 }
    }
  for (s_reload = 0; s_reload < n_reloads; s_reload++)
    if (rld[s_reload].secondary_p
 && (reg_class_subset_p (class, rld[s_reload].class)
     || reg_class_subset_p (rld[s_reload].class, class))
 && ((in_p && rld[s_reload].inmode == mode)
     || (! in_p && rld[s_reload].outmode == mode))
 && ((in_p && rld[s_reload].secondary_in_reload == t_reload)
     || (! in_p && rld[s_reload].secondary_out_reload == t_reload))
 && ((in_p && rld[s_reload].secondary_in_icode == t_icode)
     || (! in_p && rld[s_reload].secondary_out_icode == t_icode))
 && (reg_class_size[(int) class] == 1 || 1)
 && ((secondary_type) == RELOAD_OTHER || (rld[s_reload].when_needed) == RELOAD_OTHER || ((secondary_type) == (rld[s_reload].when_needed) && (opnum) == (rld[s_reload].opnum)) || ((secondary_type) == RELOAD_FOR_INPUT && (rld[s_reload].when_needed) == RELOAD_FOR_INPUT) || ((secondary_type) == RELOAD_FOR_OPERAND_ADDRESS && (rld[s_reload].when_needed) == RELOAD_FOR_OPERAND_ADDRESS) || ((secondary_type) == RELOAD_FOR_OTHER_ADDRESS && (rld[s_reload].when_needed) == RELOAD_FOR_OTHER_ADDRESS))
                                   )
      {
 if (in_p)
   rld[s_reload].inmode = mode;
 if (! in_p)
   rld[s_reload].outmode = mode;
 if (reg_class_subset_p (class, rld[s_reload].class))
   rld[s_reload].class = class;
 rld[s_reload].opnum = ((rld[s_reload].opnum) < (opnum) ? (rld[s_reload].opnum) : (opnum));
 rld[s_reload].optional &= optional;
 rld[s_reload].secondary_p = 1;
 if (((secondary_type) != (rld[s_reload].when_needed) || ! ((opnum) == (rld[s_reload].opnum) || (secondary_type) == RELOAD_FOR_INPUT || (secondary_type) == RELOAD_FOR_OPERAND_ADDRESS || (secondary_type) == RELOAD_FOR_OTHER_ADDRESS))
                                  )
   rld[s_reload].when_needed = RELOAD_OTHER;
      }
  if (s_reload == n_reloads)
    {
      if (in_p && icode == CODE_FOR_nothing
   && ix86_secondary_memory_needed ((class), (reload_class), (mode), 1))
 {
   get_secondary_mem (x, reload_mode, opnum, type);
   s_reload = n_reloads;
 }
      rld[s_reload].in = rld[s_reload].out = 0;
      rld[s_reload].class = class;
      rld[s_reload].inmode = in_p ? mode : VOIDmode;
      rld[s_reload].outmode = ! in_p ? mode : VOIDmode;
      rld[s_reload].reg_rtx = 0;
      rld[s_reload].optional = optional;
      rld[s_reload].inc = 0;
      rld[s_reload].nocombine = 1;
      rld[s_reload].in_reg = 0;
      rld[s_reload].out_reg = 0;
      rld[s_reload].opnum = opnum;
      rld[s_reload].when_needed = secondary_type;
      rld[s_reload].secondary_in_reload = in_p ? t_reload : -1;
      rld[s_reload].secondary_out_reload = ! in_p ? t_reload : -1;
      rld[s_reload].secondary_in_icode = in_p ? t_icode : CODE_FOR_nothing;
      rld[s_reload].secondary_out_icode
 = ! in_p ? t_icode : CODE_FOR_nothing;
      rld[s_reload].secondary_p = 1;
      n_reloads++;
      if (! in_p && icode == CODE_FOR_nothing
   && ix86_secondary_memory_needed ((reload_class), (class), (mode), 1))
 get_secondary_mem (x, mode, opnum, type);
    }
  *picode = icode;
  return s_reload;
}
rtx
get_secondary_mem (rtx x , enum machine_mode mode,
     int opnum, enum reload_type type)
{
  rtx loc;
  int mem_valid;
  if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) < (8 * (0 ? 8 : 4)) && (mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT || mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_VECTOR_INT))
    mode = mode_for_size ((8 * (0 ? 8 : 4)), mode_class[mode], 0);
  if (secondary_memlocs_elim[(int) mode][opnum] != 0)
    return secondary_memlocs_elim[(int) mode][opnum];
  if (secondary_memlocs[(int) mode] == 0)
    {
      secondary_memlocs[(int) mode]
 = assign_stack_local (mode, ((unsigned short) mode_size[mode]), 0);
    }
  loc = eliminate_regs (secondary_memlocs[(int) mode], VOIDmode, (rtx) 0);
  mem_valid = strict_memory_address_p (mode, (((loc)->u.fld[0]).rtx1));
  if (! mem_valid && loc == secondary_memlocs[(int) mode])
    loc = copy_rtx (loc);
  if (! mem_valid)
    {
      type = (type == RELOAD_FOR_INPUT ? RELOAD_FOR_INPUT_ADDRESS
        : type == RELOAD_FOR_OUTPUT ? RELOAD_FOR_OUTPUT_ADDRESS
        : RELOAD_OTHER);
      find_reloads_address (mode, &loc, (((loc)->u.fld[0]).rtx1), &(((loc)->u.fld[0]).rtx1),
       opnum, type, 0, 0);
    }
  secondary_memlocs_elim[(int) mode][opnum] = loc;
  if (secondary_memlocs_elim_used <= (int)mode)
    secondary_memlocs_elim_used = (int)mode + 1;
  return loc;
}
void
clear_secondary_mem (void)
{
  memset (secondary_memlocs, 0, sizeof secondary_memlocs);
}
static enum reg_class
find_valid_class (enum machine_mode m1 , int n,
    unsigned int dest_regno )
{
  int best_cost = -1;
  int class;
  int regno;
  enum reg_class best_class = NO_REGS;
  enum reg_class dest_class = (regclass_map[dest_regno]);
  unsigned int best_size = 0;
  int cost;
  for (class = 1; class < ((int) LIM_REG_CLASSES); class++)
    {
      int bad = 0;
      for (regno = 0; regno < 53 && ! bad; regno++)
 if ((!!((reg_class_contents[class])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     && (!!((reg_class_contents[class])[(regno + n) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + n) % ((unsigned) (8 * 4))))))
     && ! ix86_hard_regno_mode_ok ((regno + n), (m1)))
   bad = 1;
      if (bad)
 continue;
      cost = ix86_register_move_cost ((m1), (class), (dest_class));
      if ((reg_class_size[class] > best_size
    && (best_cost < 0 || best_cost >= cost))
   || best_cost > cost)
 {
   best_class = class;
   best_size = reg_class_size[class];
   best_cost = ix86_register_move_cost ((m1), (class), (dest_class));
 }
    }
  if (best_size == 0)
    abort ();
  return best_class;
}
static int
find_reusable_reload (rtx *p_in, rtx out, enum reg_class class,
        enum reload_type type, int opnum, int dont_share)
{
  rtx in = *p_in;
  int i;
  if (earlyclobber_operand_p (out))
    return n_reloads;
  for (i = 0; i < n_reloads; i++)
    if ((reg_class_subset_p (class, rld[i].class)
  || reg_class_subset_p (rld[i].class, class))
 && (rld[i].reg_rtx == 0
     || (!!((reg_class_contents[(int) class])[(true_regnum (rld[i].reg_rtx)) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((true_regnum (rld[i].reg_rtx)) % ((unsigned) (8 * 4))))))
                                   )
 && ((in != 0 && (rld[i].in == in || (rld[i].in != 0 && ((((enum rtx_code) (rld[i].in)->code) == REG) ? (((enum rtx_code) (in)->code) == REG) && (((rld[i].in)->u.fld[0]).rtuint) == (((in)->u.fld[0]).rtuint) : rtx_equal_p (rld[i].in, in) && ! side_effects_p (rld[i].in)))) && ! dont_share
      && (out == 0 || rld[i].out == 0 || (rld[i].out == out || (rld[i].out != 0 && ((((enum rtx_code) (rld[i].out)->code) == REG) ? (((enum rtx_code) (out)->code) == REG) && (((rld[i].out)->u.fld[0]).rtuint) == (((out)->u.fld[0]).rtuint) : rtx_equal_p (rld[i].out, out) && ! side_effects_p (rld[i].out))))))
     || (out != 0 && (rld[i].out == out || (rld[i].out != 0 && ((((enum rtx_code) (rld[i].out)->code) == REG) ? (((enum rtx_code) (out)->code) == REG) && (((rld[i].out)->u.fld[0]).rtuint) == (((out)->u.fld[0]).rtuint) : rtx_equal_p (rld[i].out, out) && ! side_effects_p (rld[i].out))))
  && (in == 0 || rld[i].in == 0 || (rld[i].in == in || (rld[i].in != 0 && ((((enum rtx_code) (rld[i].in)->code) == REG) ? (((enum rtx_code) (in)->code) == REG) && (((rld[i].in)->u.fld[0]).rtuint) == (((in)->u.fld[0]).rtuint) : rtx_equal_p (rld[i].in, in) && ! side_effects_p (rld[i].in)))))))
 && (rld[i].out == 0 || ! earlyclobber_operand_p (rld[i].out))
 && (reg_class_size[(int) class] == 1 || 1)
 && ((type) == RELOAD_OTHER || (rld[i].when_needed) == RELOAD_OTHER || ((type) == (rld[i].when_needed) && (opnum) == (rld[i].opnum)) || ((type) == RELOAD_FOR_INPUT && (rld[i].when_needed) == RELOAD_FOR_INPUT) || ((type) == RELOAD_FOR_OPERAND_ADDRESS && (rld[i].when_needed) == RELOAD_FOR_OPERAND_ADDRESS) || ((type) == RELOAD_FOR_OTHER_ADDRESS && (rld[i].when_needed) == RELOAD_FOR_OTHER_ADDRESS)))
      return i;
  for (i = 0; i < n_reloads; i++)
    if ((reg_class_subset_p (class, rld[i].class)
  || reg_class_subset_p (rld[i].class, class))
 && (rld[i].reg_rtx == 0
     || (!!((reg_class_contents[(int) class])[(true_regnum (rld[i].reg_rtx)) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((true_regnum (rld[i].reg_rtx)) % ((unsigned) (8 * 4))))))
                                   )
 && out == 0 && rld[i].out == 0 && rld[i].in != 0
 && (((((enum rtx_code) (in)->code) == REG)
      && (rtx_class[(int) (((enum rtx_code) (rld[i].in)->code))]) == RTX_AUTOINC
      && ((((rld[i].in)->u.fld[0]).rtx1) == in || ((((rld[i].in)->u.fld[0]).rtx1) != 0 && ((((enum rtx_code) ((((rld[i].in)->u.fld[0]).rtx1))->code) == REG) ? (((enum rtx_code) (in)->code) == REG) && ((((((rld[i].in)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == (((in)->u.fld[0]).rtuint) : rtx_equal_p ((((rld[i].in)->u.fld[0]).rtx1), in) && ! side_effects_p ((((rld[i].in)->u.fld[0]).rtx1))))))
     || ((((enum rtx_code) (rld[i].in)->code) == REG)
  && (rtx_class[(int) (((enum rtx_code) (in)->code))]) == RTX_AUTOINC
  && ((((in)->u.fld[0]).rtx1) == rld[i].in || ((((in)->u.fld[0]).rtx1) != 0 && ((((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == REG) ? (((enum rtx_code) (rld[i].in)->code) == REG) && ((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == (((rld[i].in)->u.fld[0]).rtuint) : rtx_equal_p ((((in)->u.fld[0]).rtx1), rld[i].in) && ! side_effects_p ((((in)->u.fld[0]).rtx1)))))))
 && (rld[i].out == 0 || ! earlyclobber_operand_p (rld[i].out))
 && (reg_class_size[(int) class] == 1 || 1)
 && ((type) == RELOAD_OTHER || (rld[i].when_needed) == RELOAD_OTHER || ((type) == (rld[i].when_needed) && (opnum) == (rld[i].opnum)) || ((type) == RELOAD_FOR_INPUT && (rld[i].when_needed) == RELOAD_FOR_INPUT) || ((type) == RELOAD_FOR_OPERAND_ADDRESS && (rld[i].when_needed) == RELOAD_FOR_OPERAND_ADDRESS) || ((type) == RELOAD_FOR_OTHER_ADDRESS && (rld[i].when_needed) == RELOAD_FOR_OTHER_ADDRESS))
                            )
      {
 if ((((enum rtx_code) (in)->code) == REG))
   *p_in = rld[i].in;
 return i;
      }
  return n_reloads;
}
static int
reload_inner_reg_of_subreg (rtx x, enum machine_mode mode, int output)
{
  rtx inner;
  if (((enum rtx_code) (x)->code) != SUBREG)
    return 0;
  inner = (((x)->u.fld[0]).rtx1);
  if (((rtx_class[(int) (((enum rtx_code) (inner)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (inner)->code) == CONST_VECTOR) || ((enum rtx_code) (inner)->code) == PLUS)
    return 1;
  if (!(((enum rtx_code) (inner)->code) == REG)
      || (((inner)->u.fld[0]).rtuint) >= 53)
    return 0;
  if (! ix86_hard_regno_mode_ok ((subreg_regno (x)), (mode)))
    return 1;
  return (((unsigned short) mode_size[mode]) <= (0 ? 8 : 4)
   && output
   && ((unsigned short) mode_size[((enum machine_mode) (inner)->mode)]) > (0 ? 8 : 4)
   && ((((unsigned short) mode_size[((enum machine_mode) (inner)->mode)]) / (0 ? 8 : 4))
       != (int) hard_regno_nregs[(((inner)->u.fld[0]).rtuint)][((enum machine_mode) (inner)->mode)]));
}
static int
can_reload_into (rtx in, int regno, enum machine_mode mode)
{
  rtx dst, test_insn;
  int r = 0;
  struct recog_data save_recog_data;
  if ((((enum rtx_code) (in)->code) == REG))
    return 1;
  if ((((enum rtx_code) (in)->code) == MEM))
    return 1;
  dst = gen_rtx_REG (mode, regno);
  test_insn = make_insn_raw (gen_rtx_fmt_ee (SET, (VOIDmode), (dst), (in)));
  save_recog_data = recog_data;
  if (((((test_insn)->u.fld[6]).rtint) >= 0 ? (((test_insn)->u.fld[6]).rtint) : recog_memoized_1 (test_insn)) >= 0)
    {
      extract_insn (test_insn);
      r = constrain_operands (1);
    }
  recog_data = save_recog_data;
  return r;
}
int
push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
      enum reg_class class, enum machine_mode inmode,
      enum machine_mode outmode, int strict_low, int optional,
      int opnum, enum reload_type type)
{
  int i;
  int dont_share = 0;
  int dont_remove_subreg = 0;
  rtx *in_subreg_loc = 0, *out_subreg_loc = 0;
  int secondary_in_reload = -1, secondary_out_reload = -1;
  enum insn_code secondary_in_icode = CODE_FOR_nothing;
  enum insn_code secondary_out_icode = CODE_FOR_nothing;
  if (inmode == VOIDmode && in != 0)
    inmode = ((enum machine_mode) (in)->mode);
  if (outmode == VOIDmode && out != 0)
    outmode = ((enum machine_mode) (out)->mode);
  if (in != 0 && (((enum rtx_code) (in)->code) == REG))
    {
      int regno = (((in)->u.fld[0]).rtuint);
      if (regno >= 53 && reg_renumber[regno] < 0
   && reg_equiv_constant[regno] != 0)
 in = reg_equiv_constant[regno];
    }
  if (out != 0 && (((enum rtx_code) (out)->code) == REG))
    {
      int regno = (((out)->u.fld[0]).rtuint);
      if (regno >= 53 && reg_renumber[regno] < 0
   && reg_equiv_constant[regno] != 0)
 out = reg_equiv_constant[regno];
    }
  if (in != 0 && out != 0 && (((enum rtx_code) (in)->code) == MEM) && rtx_equal_p (in, out))
    switch (((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code))
      {
      case POST_INC: case POST_DEC: case POST_MODIFY:
 in = replace_equiv_address_nv (in, ((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtx1));
 break;
      case PRE_INC: case PRE_DEC: case PRE_MODIFY:
 out = replace_equiv_address_nv (out, ((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtx1));
 break;
      default:
 break;
      }
  if (in != 0 && ((enum rtx_code) (in)->code) == SUBREG
      && (subreg_lowpart_p (in) || strict_low)
      && !(((unsigned short) mode_size[inmode]) < ((unsigned short) mode_size[((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode)]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, (class)) || reg_classes_intersect_p (MMX_REGS, (class)) : ((unsigned short) mode_size[((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode)]) != ((unsigned short) mode_size[inmode]) ? reg_classes_intersect_p (FLOAT_REGS, (class)) : 0)
      && (((rtx_class[(int) (((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == CONST_VECTOR)
   || ((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == PLUS
   || strict_low
   || ((((((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == REG)
  && ((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
        || (((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == MEM))
       && ((((unsigned short) mode_size[inmode])
     > ((unsigned short) mode_size[((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode)]))
    ))
   || ((((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == REG)
       && ((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
       && (out == 0 || subreg_lowpart_p (in))
       && ((((unsigned short) mode_size[inmode]) <= (0 ? 8 : 4)
     && (((unsigned short) mode_size[((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode)])
         > (0 ? 8 : 4))
     && ((((unsigned short) mode_size[((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode)])
   / (0 ? 8 : 4))
         != (int) hard_regno_nregs[((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]
      [((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode)]))
    || ! ix86_hard_regno_mode_ok ((subreg_regno (in)), (inmode))))
   || ((((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == REG)
       && ((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
       && (((unsigned short) mode_size[inmode]) < ((unsigned short) mode_size[((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode)]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, ((regclass_map[((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]))) || reg_classes_intersect_p (MMX_REGS, ((regclass_map[((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]))) : ((unsigned short) mode_size[((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode)]) != ((unsigned short) mode_size[inmode]) ? reg_classes_intersect_p (FLOAT_REGS, ((regclass_map[((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]))) : 0)
                                                                    )
   ))
    {
      in_subreg_loc = inloc;
      inloc = &(((in)->u.fld[0]).rtx1);
      in = *inloc;
      if ((((enum rtx_code) (in)->code) == MEM))
 if (((unsigned short) mode_size[((enum machine_mode) (in)->mode)]) > ((unsigned short) mode_size[inmode]))
   abort ();
      inmode = ((enum machine_mode) (in)->mode);
    }
  if (in != 0 && reload_inner_reg_of_subreg (in, inmode, 0))
    {
      enum reg_class in_class = class;
      if ((((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == REG))
 in_class
   = find_valid_class (inmode,
         subreg_regno_offset (((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
         ((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode),
         (((in)->u.fld[1]).rtuint),
         ((enum machine_mode) (in)->mode)),
         ((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint));
      push_reload ((((in)->u.fld[0]).rtx1), (rtx) 0, &(((in)->u.fld[0]).rtx1), (rtx *) 0,
     in_class, VOIDmode, VOIDmode, 0, 0, opnum, type);
      dont_remove_subreg = 1;
    }
  if (out != 0 && ((enum rtx_code) (out)->code) == SUBREG
      && (subreg_lowpart_p (out) || strict_low)
      && !(((unsigned short) mode_size[outmode]) < ((unsigned short) mode_size[((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode)]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, (class)) || reg_classes_intersect_p (MMX_REGS, (class)) : ((unsigned short) mode_size[((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode)]) != ((unsigned short) mode_size[outmode]) ? reg_classes_intersect_p (FLOAT_REGS, (class)) : 0)
      && (((rtx_class[(int) (((enum rtx_code) ((((out)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((out)->u.fld[0]).rtx1))->code) == CONST_VECTOR)
   || strict_low
   || ((((((enum rtx_code) ((((out)->u.fld[0]).rtx1))->code) == REG)
  && ((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
        || (((enum rtx_code) ((((out)->u.fld[0]).rtx1))->code) == MEM))
       && ((((unsigned short) mode_size[outmode])
     > ((unsigned short) mode_size[((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode)]))
    ))
   || ((((enum rtx_code) ((((out)->u.fld[0]).rtx1))->code) == REG)
       && ((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
       && ((((unsigned short) mode_size[outmode]) <= (0 ? 8 : 4)
     && (((unsigned short) mode_size[((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode)])
         > (0 ? 8 : 4))
     && ((((unsigned short) mode_size[((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode)])
   / (0 ? 8 : 4))
         != (int) hard_regno_nregs[((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]
      [((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode)]))
    || ! ix86_hard_regno_mode_ok ((subreg_regno (out)), (outmode))))
   || ((((class) == GENERAL_REGS || (class) == LEGACY_REGS || (class) == INDEX_REGS) && !0 && (outmode) == QImode ? Q_REGS : NO_REGS) != NO_REGS
       && ((((class) == GENERAL_REGS || (class) == LEGACY_REGS || (class) == INDEX_REGS) && !0 && (((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode)) == QImode ? Q_REGS : NO_REGS)
    == NO_REGS))
   || ((((enum rtx_code) ((((out)->u.fld[0]).rtx1))->code) == REG)
       && ((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
       && (((unsigned short) mode_size[outmode]) < ((unsigned short) mode_size[((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode)]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, ((regclass_map[((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]))) || reg_classes_intersect_p (MMX_REGS, ((regclass_map[((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]))) : ((unsigned short) mode_size[((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode)]) != ((unsigned short) mode_size[outmode]) ? reg_classes_intersect_p (FLOAT_REGS, ((regclass_map[((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]))) : 0)
                )
   ))
    {
      out_subreg_loc = outloc;
      outloc = &(((out)->u.fld[0]).rtx1);
      out = *outloc;
      if ((((enum rtx_code) (out)->code) == MEM)
   && ((unsigned short) mode_size[((enum machine_mode) (out)->mode)]) > ((unsigned short) mode_size[outmode]))
 abort ();
      outmode = ((enum machine_mode) (out)->mode);
    }
  if (out != 0 && reload_inner_reg_of_subreg (out, outmode, 1))
    {
      dont_remove_subreg = 1;
      push_reload ((((out)->u.fld[0]).rtx1), (((out)->u.fld[0]).rtx1), &(((out)->u.fld[0]).rtx1),
     &(((out)->u.fld[0]).rtx1),
     find_valid_class (outmode,
         subreg_regno_offset (((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
         ((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode),
         (((out)->u.fld[1]).rtuint),
         ((enum machine_mode) (out)->mode)),
         ((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtuint)),
     VOIDmode, VOIDmode, 0, 0,
     opnum, RELOAD_OTHER);
    }
  if (in != 0 && out != 0 && (((enum rtx_code) (out)->code) == MEM)
      && ((((enum rtx_code) (in)->code) == REG) || (((enum rtx_code) (in)->code) == MEM))
      && reg_overlap_mentioned_for_reload_p (in, (((out)->u.fld[0]).rtx1)))
    dont_share = 1;
  if (in != 0 && ((enum rtx_code) (in)->code) == SUBREG && (((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == REG)
      && ((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
      && ! dont_remove_subreg)
    in = gen_rtx_REG (((enum machine_mode) (in)->mode), subreg_regno (in));
  if (out != 0 && ((enum rtx_code) (out)->code) == SUBREG
      && (((enum rtx_code) ((((out)->u.fld[0]).rtx1))->code) == REG)
      && ((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
      && ! dont_remove_subreg)
    out = gen_rtx_REG (((enum machine_mode) (out)->mode), subreg_regno (out));
  if (in != 0)
    class = ix86_preferred_reload_class ((in), (class));
  if (in_subreg_loc)
    class = ((inmode) == QImode && !0 && ((class) == ALL_REGS || (class) == GENERAL_REGS || (class) == LEGACY_REGS || (class) == INDEX_REGS) ? Q_REGS : (class));
  else if (in != 0 && ((enum rtx_code) (in)->code) == SUBREG)
    class = ((((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode)) == QImode && !0 && ((class) == ALL_REGS || (class) == GENERAL_REGS || (class) == LEGACY_REGS || (class) == INDEX_REGS) ? Q_REGS : (class));
  if (out_subreg_loc)
    class = ((outmode) == QImode && !0 && ((class) == ALL_REGS || (class) == GENERAL_REGS || (class) == LEGACY_REGS || (class) == INDEX_REGS) ? Q_REGS : (class));
  if (out != 0 && ((enum rtx_code) (out)->code) == SUBREG)
    class = ((((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode)) == QImode && !0 && ((class) == ALL_REGS || (class) == GENERAL_REGS || (class) == LEGACY_REGS || (class) == INDEX_REGS) ? Q_REGS : (class));
  if (this_insn_is_asm)
    {
      enum machine_mode mode;
      if (((unsigned short) mode_size[inmode]) > ((unsigned short) mode_size[outmode]))
 mode = inmode;
      else
 mode = outmode;
      if (mode == VOIDmode)
 {
   error_for_asm (this_insn, "cannot reload integer constant operand in `asm'");
   mode = word_mode;
   if (in != 0)
     inmode = word_mode;
   if (out != 0)
     outmode = word_mode;
 }
      for (i = 0; i < 53; i++)
 if (ix86_hard_regno_mode_ok ((i), (mode))
     && (!!((reg_class_contents[(int) class])[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
   {
     int nregs = hard_regno_nregs[i][mode];
     int j;
     for (j = 1; j < nregs; j++)
       if (! (!!((reg_class_contents[(int) class])[(i + j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i + j) % ((unsigned) (8 * 4)))))))
  break;
     if (j == nregs)
       break;
   }
      if (i == 53)
 {
   error_for_asm (this_insn, "impossible register constraint in `asm'");
   class = ALL_REGS;
 }
    }
  if (class == NO_REGS
      && (optional == 0 || type != RELOAD_FOR_OUTPUT))
    abort ();
  i = find_reusable_reload (&in, out, class, type, opnum, dont_share);
  if (i == n_reloads)
    {
      if (out != 0 && ((enum rtx_code) (out)->code) != SCRATCH)
 secondary_out_reload
   = push_secondary_reload (0, out, opnum, optional, class, outmode,
       type, &secondary_out_icode);
      if (in != 0 && ((((enum rtx_code) (in)->code) == REG) || ((enum rtx_code) (in)->code) == SUBREG)
   && reg_or_subregno (in) < 53
   && ix86_secondary_memory_needed (((regclass_map[reg_or_subregno (in)])), (class), (inmode), 1)
                        )
 get_secondary_mem (in, inmode, opnum, type);
      i = n_reloads;
      rld[i].in = in;
      rld[i].out = out;
      rld[i].class = class;
      rld[i].inmode = inmode;
      rld[i].outmode = outmode;
      rld[i].reg_rtx = 0;
      rld[i].optional = optional;
      rld[i].inc = 0;
      rld[i].nocombine = 0;
      rld[i].in_reg = inloc ? *inloc : 0;
      rld[i].out_reg = outloc ? *outloc : 0;
      rld[i].opnum = opnum;
      rld[i].when_needed = type;
      rld[i].secondary_in_reload = secondary_in_reload;
      rld[i].secondary_out_reload = secondary_out_reload;
      rld[i].secondary_in_icode = secondary_in_icode;
      rld[i].secondary_out_icode = secondary_out_icode;
      rld[i].secondary_p = 0;
      n_reloads++;
      if (out != 0 && ((((enum rtx_code) (out)->code) == REG) || ((enum rtx_code) (out)->code) == SUBREG)
   && reg_or_subregno (out) < 53
   && ix86_secondary_memory_needed ((class), ((regclass_map[reg_or_subregno (out)])), (outmode), 1)
                  )
 get_secondary_mem (out, outmode, opnum, type);
    }
  else
    {
      if (inmode != VOIDmode
   && ((unsigned short) mode_size[inmode]) > ((unsigned short) mode_size[rld[i].inmode]))
 rld[i].inmode = inmode;
      if (outmode != VOIDmode
   && ((unsigned short) mode_size[outmode]) > ((unsigned short) mode_size[rld[i].outmode]))
 rld[i].outmode = outmode;
      if (in != 0)
 {
   rtx in_reg = inloc ? *inloc : 0;
   if (rld[i].in != in && rtx_equal_p (in, rld[i].in)
       && ! (rld[i].optional && optional))
     {
       if (opnum > rld[i].opnum)
  {
    remove_address_replacements (in);
    in = rld[i].in;
    in_reg = rld[i].in_reg;
  }
       else
  remove_address_replacements (rld[i].in);
     }
   rld[i].in = in;
   rld[i].in_reg = in_reg;
 }
      if (out != 0)
 {
   rld[i].out = out;
   rld[i].out_reg = outloc ? *outloc : 0;
 }
      if (reg_class_subset_p (class, rld[i].class))
 rld[i].class = class;
      rld[i].optional &= optional;
      if (((type) != (rld[i].when_needed) || ! ((opnum) == (rld[i].opnum) || (type) == RELOAD_FOR_INPUT || (type) == RELOAD_FOR_OPERAND_ADDRESS || (type) == RELOAD_FOR_OTHER_ADDRESS))
                         )
 rld[i].when_needed = RELOAD_OTHER;
      rld[i].opnum = ((rld[i].opnum) < (opnum) ? (rld[i].opnum) : (opnum));
    }
  if (in != 0 && in != *inloc)
    rld[i].nocombine = 1;
  if (replace_reloads)
    {
      if (inloc != 0)
 {
   struct replacement *r = &replacements[n_replacements++];
   r->what = i;
   r->subreg_loc = in_subreg_loc;
   r->where = inloc;
   r->mode = inmode;
 }
      if (outloc != 0 && outloc != inloc)
 {
   struct replacement *r = &replacements[n_replacements++];
   r->what = i;
   r->where = outloc;
   r->subreg_loc = out_subreg_loc;
   r->mode = outmode;
 }
    }
  if (in != 0 && out != 0 && in != out && rld[i].reg_rtx == 0)
    {
      rld[i].reg_rtx = find_dummy_reload (in, out, inloc, outloc,
       inmode, outmode,
       rld[i].class, i,
       earlyclobber_operand_p (out));
      if (rld[i].reg_rtx == out
   && ((((enum rtx_code) (in)->code) == REG) || ((rtx_class[(int) (((enum rtx_code) (in)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (in)->code) == CONST_VECTOR))
   && 0 != find_equiv_reg (in, this_insn, 0, (((out)->u.fld[0]).rtuint),
      static_reload_reg_p, i, inmode))
 rld[i].in = out;
    }
  if (rld[i].reg_rtx == 0 && in != 0)
    {
      rtx note;
      int regno;
      enum machine_mode rel_mode = inmode;
      if (out && ((unsigned short) mode_size[outmode]) > ((unsigned short) mode_size[inmode]))
 rel_mode = outmode;
      for (note = (((this_insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
 if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD
     && (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG)
     && (regno = ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) < 53
     && reg_mentioned_p ((((note)->u.fld[0]).rtx1), in)
     && ! refers_to_regno_for_reload_p (regno,
            (regno
      + hard_regno_nregs[regno]
          [rel_mode]),
            (((this_insn)->u.fld[5]).rtx1), inloc)
     && (out == 0 || in == out
  || ! hard_reg_set_here_p (regno,
       (regno
        + hard_regno_nregs[regno]
            [rel_mode]),
       (((this_insn)->u.fld[5]).rtx1)))
     && (in != out
  || (((enum rtx_code) (in)->code) == SUBREG
      && (((((unsigned short) mode_size[((enum machine_mode) (in)->mode)]) + ((0 ? 8 : 4) - 1))
    / (0 ? 8 : 4))
   == ((((unsigned short) mode_size[((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode)])
        + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4)))))
     && (((unsigned short) mode_size[rel_mode])
  <= ((unsigned short) mode_size[((enum machine_mode) ((((note)->u.fld[0]).rtx1))->mode)]))
     && ix86_hard_regno_mode_ok ((regno), (inmode))
     && ix86_hard_regno_mode_ok ((regno), (outmode)))
   {
     unsigned int offs;
     unsigned int nregs = ((hard_regno_nregs[regno][inmode]) > (hard_regno_nregs[regno][outmode]) ? (hard_regno_nregs[regno][inmode]) : (hard_regno_nregs[regno][outmode]))
                                           ;
     for (offs = 0; offs < nregs; offs++)
       if (fixed_regs[regno + offs]
    || ! (!!((reg_class_contents[(int) class])[(regno + offs) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + offs) % ((unsigned) (8 * 4))))))
                    )
  break;
     if (offs == nregs
  && (! (refers_to_regno_for_reload_p
         (regno, (regno + hard_regno_nregs[regno][inmode]),
    in, (rtx *)0))
      || can_reload_into (in, regno, inmode)))
       {
  rld[i].reg_rtx = gen_rtx_REG (rel_mode, regno);
  break;
       }
   }
    }
  if (out)
    output_reloadnum = i;
  return i;
}
static void
push_replacement (rtx *loc, int reloadnum, enum machine_mode mode)
{
  if (replace_reloads)
    {
      struct replacement *r = &replacements[n_replacements++];
      r->what = reloadnum;
      r->where = loc;
      r->subreg_loc = 0;
      r->mode = mode;
    }
}
static void
dup_replacements (rtx *dup_loc, rtx *orig_loc)
{
  int i, n = n_replacements;
  for (i = 0; i < n; i++)
    {
      struct replacement *r = &replacements[i];
      if (r->where == orig_loc)
 push_replacement (dup_loc, r->what, r->mode);
    }
}
void
transfer_replacements (int to, int from)
{
  int i;
  for (i = 0; i < n_replacements; i++)
    if (replacements[i].what == from)
      replacements[i].what = to;
}
int
remove_address_replacements (rtx in_rtx)
{
  int i, j;
  char reload_flags[(2 * 30 * (2 + 1))];
  int something_changed = 0;
  memset (reload_flags, 0, sizeof reload_flags);
  for (i = 0, j = 0; i < n_replacements; i++)
    {
      if (loc_mentioned_in_p (replacements[i].where, in_rtx))
 reload_flags[replacements[i].what] |= 1;
      else
 {
   replacements[j++] = replacements[i];
   reload_flags[replacements[i].what] |= 2;
 }
    }
  n_replacements = j;
  for (i = n_reloads - 1; i >= 0; i--)
    {
      if (reload_flags[i] == 1)
 {
   deallocate_reload_reg (i);
   remove_address_replacements (rld[i].in);
   rld[i].in = 0;
   something_changed = 1;
 }
    }
  return something_changed;
}
static void
combine_reloads (void)
{
  int i;
  int output_reload = -1;
  int secondary_out = -1;
  rtx note;
  for (i = 0; i < n_reloads; i++)
    if (rld[i].out != 0)
      {
 if (output_reload >= 0)
   return;
 output_reload = i;
      }
  if (output_reload < 0 || rld[output_reload].optional)
    return;
  if (rld[output_reload].in != 0)
    return;
  if (earlyclobber_operand_p (rld[output_reload].out))
    return;
  for (i = 0; i < n_reloads; i++)
    if ((rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
  || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
 && rld[i].opnum == rld[output_reload].opnum)
      return;
  for (i = 0; i < n_reloads; i++)
    if (rld[i].in && ! rld[i].optional && ! rld[i].nocombine
 && rld[i].when_needed != RELOAD_FOR_OUTPUT_ADDRESS
 && rld[i].when_needed != RELOAD_FOR_OUTADDR_ADDRESS
 && rld[i].when_needed != RELOAD_OTHER
 && ((!reg_classes_intersect_p ((rld[i].class), GENERAL_REGS) ? ((mode_class[rld[i].inmode] == MODE_COMPLEX_INT || mode_class[rld[i].inmode] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((((rld[i].inmode) == XFmode ? 12 : ((unsigned short) mode_size[rld[i].inmode]))) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4)))
     == (!reg_classes_intersect_p ((rld[output_reload].class), GENERAL_REGS) ? ((mode_class[rld[output_reload].outmode] == MODE_COMPLEX_INT || mode_class[rld[output_reload].outmode] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((((rld[output_reload].outmode) == XFmode ? 12 : ((unsigned short) mode_size[rld[output_reload].outmode]))) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4)))
                               )
 && rld[i].inc == 0
 && rld[i].reg_rtx == 0
 && (secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[i].opnum] == 0
     || secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[output_reload].opnum] == 0
     || rtx_equal_p (secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[i].opnum],
       secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[output_reload].opnum]))
 && (1
     ? (rld[i].class == rld[output_reload].class)
     : (reg_class_subset_p (rld[i].class,
       rld[output_reload].class)
        || reg_class_subset_p (rld[output_reload].class,
          rld[i].class)))
 && ((rld[i].in == rld[output_reload].out || (rld[i].in != 0 && ((((enum rtx_code) (rld[i].in)->code) == REG) ? (((enum rtx_code) (rld[output_reload].out)->code) == REG) && (((rld[i].in)->u.fld[0]).rtuint) == (((rld[output_reload].out)->u.fld[0]).rtuint) : rtx_equal_p (rld[i].in, rld[output_reload].out) && ! side_effects_p (rld[i].in))))
     || (! reg_overlap_mentioned_for_reload_p (rld[output_reload].out,
            rld[i].in)
  && ! ((((enum rtx_code) (rld[i].in)->code) == REG)
        && reg_overlap_mentioned_for_reload_p (rld[i].in,
            rld[output_reload].out))))
 && ! reload_inner_reg_of_subreg (rld[i].in, rld[i].inmode,
      rld[i].when_needed != RELOAD_FOR_INPUT)
 && (reg_class_size[(int) rld[i].class]
     || 1)
 && (rld[i].when_needed == RELOAD_FOR_INPUT
     || rld[i].when_needed == RELOAD_FOR_OUTPUT))
      {
 int j;
 rld[i].out = rld[output_reload].out;
 rld[i].out_reg = rld[output_reload].out_reg;
 rld[i].outmode = rld[output_reload].outmode;
 rld[output_reload].out = 0;
 rld[i].when_needed = RELOAD_OTHER;
 if (rld[output_reload].secondary_out_reload != -1)
   {
     rld[i].secondary_out_reload
       = rld[output_reload].secondary_out_reload;
     rld[i].secondary_out_icode
       = rld[output_reload].secondary_out_icode;
   }
 if (secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[output_reload].opnum] != 0)
   secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[i].opnum]
     = secondary_memlocs_elim[(int) rld[output_reload].outmode][rld[output_reload].opnum];
 if (reg_class_subset_p (rld[output_reload].class,
    rld[i].class))
   rld[i].class = rld[output_reload].class;
 for (j = 0; j < n_replacements; j++)
   if (replacements[j].what == output_reload)
     replacements[j].what = i;
 return;
      }
  if ((((this_insn)->u.fld[6]).rtint) == -1)
    return;
  for (i = 1; i < insn_data[(((this_insn)->u.fld[6]).rtint)].n_operands; i++)
    if (insn_data[(((this_insn)->u.fld[6]).rtint)].operand[i].constraint[0] == '='
 || insn_data[(((this_insn)->u.fld[6]).rtint)].operand[i].constraint[0] == '+')
      return;
  for (note = (((this_insn)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_DEAD
 && (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == REG)
 && ! reg_overlap_mentioned_for_reload_p ((((note)->u.fld[0]).rtx1),
       rld[output_reload].out)
 && ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
 && ix86_hard_regno_mode_ok ((((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)), (rld[output_reload].outmode))
 && (!!((reg_class_contents[(int) rld[output_reload].class])[(((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))))))
 && (hard_regno_nregs[((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)][rld[output_reload].outmode]
     <= hard_regno_nregs[((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)][((enum machine_mode) ((((note)->u.fld[0]).rtx1))->mode)])
 && ((secondary_out = rld[output_reload].secondary_out_reload) == -1
     || (! ((!!((reg_class_contents[(int) rld[secondary_out].class])[(((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))))))
                             )
  && ((secondary_out = rld[secondary_out].secondary_out_reload) == -1
      || ! ((!!((reg_class_contents[(int) rld[secondary_out].class])[(((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))))))
                              ))))
 && ! fixed_regs[((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])
      {
 rld[output_reload].reg_rtx
   = gen_rtx_REG (rld[output_reload].outmode,
    ((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtuint));
 return;
      }
}
static rtx
find_dummy_reload (rtx real_in, rtx real_out, rtx *inloc, rtx *outloc,
     enum machine_mode inmode, enum machine_mode outmode,
     enum reg_class class, int for_real, int earlyclobber)
{
  rtx in = real_in;
  rtx out = real_out;
  int in_offset = 0;
  int out_offset = 0;
  rtx value1 = 0;
  if (((unsigned short) mode_size[outmode]) != ((unsigned short) mode_size[inmode])
      && (((unsigned short) mode_size[outmode]) > (0 ? 8 : 4)
   || ((unsigned short) mode_size[inmode]) > (0 ? 8 : 4)))
    return 0;
  while (((enum rtx_code) (out)->code) == SUBREG)
    {
      if ((((enum rtx_code) ((((out)->u.fld[0]).rtx1))->code) == REG)
   && ((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
 out_offset += subreg_regno_offset (((((((out)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
        ((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode),
        (((out)->u.fld[1]).rtuint),
        ((enum machine_mode) (out)->mode));
      out = (((out)->u.fld[0]).rtx1);
    }
  while (((enum rtx_code) (in)->code) == SUBREG)
    {
      if ((((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == REG)
   && ((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
 in_offset += subreg_regno_offset (((((((in)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
       ((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode),
       (((in)->u.fld[1]).rtuint),
       ((enum machine_mode) (in)->mode));
      in = (((in)->u.fld[0]).rtx1);
    }
  class = ix86_preferred_reload_class ((in), (class));
  if ((((enum rtx_code) (out)->code) == REG)
      && (((out)->u.fld[0]).rtuint) < 53)
    {
      unsigned int regno = (((out)->u.fld[0]).rtuint) + out_offset;
      unsigned int nwords = hard_regno_nregs[regno][outmode];
      rtx saved_rtx;
      saved_rtx = *inloc;
      *inloc = (const_int_rtx[64]);
      if (regno < 53
   && ix86_hard_regno_mode_ok ((regno), (outmode))
   && ! refers_to_regno_for_reload_p (regno, regno + nwords,
          (((this_insn)->u.fld[5]).rtx1), outloc))
 {
   unsigned int i;
   for (i = 0; i < nwords; i++)
     if (! (!!((reg_class_contents[(int) class])[(regno + i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + i) % ((unsigned) (8 * 4))))))
                   )
       break;
   if (i == nwords)
     {
       if ((((enum rtx_code) (real_out)->code) == REG))
  value1 = real_out;
       else
  value1 = gen_rtx_REG (outmode, regno);
     }
 }
      *inloc = saved_rtx;
    }
  if (hard_regs_live_known
      && (((enum rtx_code) (in)->code) == REG)
      && (((in)->u.fld[0]).rtuint) < 53
      && (value1 == 0
   || find_reg_note (this_insn, REG_UNUSED, real_out))
      && find_reg_note (this_insn, REG_DEAD, real_in)
      && !fixed_regs[(((in)->u.fld[0]).rtuint)]
      && ix86_hard_regno_mode_ok (((((in)->u.fld[0]).rtuint)), ((((enum machine_mode) (out)->mode) != VOIDmode ? ((enum machine_mode) (out)->mode) : outmode)))
                                     )
    {
      unsigned int regno = (((in)->u.fld[0]).rtuint) + in_offset;
      unsigned int nwords = hard_regno_nregs[regno][inmode];
      if (! refers_to_regno_for_reload_p (regno, regno + nwords, out, (rtx*) 0)
   && ! hard_reg_set_here_p (regno, regno + nwords,
        (((this_insn)->u.fld[5]).rtx1))
   && (! earlyclobber
       || ! refers_to_regno_for_reload_p (regno, regno + nwords,
       (((this_insn)->u.fld[5]).rtx1), inloc)))
 {
   unsigned int i;
   for (i = 0; i < nwords; i++)
     if (! (!!((reg_class_contents[(int) class])[(regno + i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + i) % ((unsigned) (8 * 4))))))
                   )
       break;
   if (i == nwords)
     {
       if (for_real >= 0 && value1 == real_out)
  rld[for_real].out = 0;
       if ((((enum rtx_code) (real_in)->code) == REG))
  value1 = real_in;
       else
  value1 = gen_rtx_REG (inmode, regno);
     }
 }
    }
  return value1;
}
int
earlyclobber_operand_p (rtx x)
{
  int i;
  for (i = 0; i < n_earlyclobbers; i++)
    if (reload_earlyclobbers[i] == x)
      return 1;
  return 0;
}
static int
hard_reg_set_here_p (unsigned int beg_regno, unsigned int end_regno, rtx x)
{
  if (((enum rtx_code) (x)->code) == SET || ((enum rtx_code) (x)->code) == CLOBBER)
    {
      rtx op0 = (((x)->u.fld[0]).rtx1);
      while (((enum rtx_code) (op0)->code) == SUBREG)
 op0 = (((op0)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (op0)->code) == REG))
 {
   unsigned int r = (((op0)->u.fld[0]).rtuint);
   if (r < end_regno
       && r + hard_regno_nregs[r][((enum machine_mode) (op0)->mode)] > beg_regno)
     return 1;
 }
    }
  else if (((enum rtx_code) (x)->code) == PARALLEL)
    {
      int i = (((((x)->u.fld[0]).rtvec1))->num_elem) - 1;
      for (; i >= 0; i--)
 if (hard_reg_set_here_p (beg_regno, end_regno, (((((x)->u.fld[0]).rtvec1))->elem[i])))
   return 1;
    }
  return 0;
}
int
strict_memory_address_p (enum machine_mode mode , rtx addr)
{
  do { if (legitimate_address_p ((mode), (addr), 1)) goto win; } while (0);
  return 0;
 win:
  return 1;
}
int
operands_match_p (rtx x, rtx y)
{
  int i;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt;
  int success_2;
  if (x == y)
    return 1;
  if ((code == REG || (code == SUBREG && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)))
      && ((((enum rtx_code) (y)->code) == REG) || (((enum rtx_code) (y)->code) == SUBREG
      && (((enum rtx_code) ((((y)->u.fld[0]).rtx1))->code) == REG))))
    {
      int j;
      if (code == SUBREG)
 {
   i = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
   if (i >= 53)
     goto slow;
   i += subreg_regno_offset (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
        ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
        (((x)->u.fld[1]).rtuint),
        ((enum machine_mode) (x)->mode));
 }
      else
 i = (((x)->u.fld[0]).rtuint);
      if (((enum rtx_code) (y)->code) == SUBREG)
 {
   j = ((((((y)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
   if (j >= 53)
     goto slow;
   j += subreg_regno_offset (((((((y)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
        ((enum machine_mode) ((((y)->u.fld[0]).rtx1))->mode),
        (((y)->u.fld[1]).rtuint),
        ((enum machine_mode) (y)->mode));
 }
      else
 j = (((y)->u.fld[0]).rtuint);
      if (0 && ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) > (0 ? 8 : 4)
   && i < 53)
 i += hard_regno_nregs[i][((enum machine_mode) (x)->mode)] - 1;
      if (0 && ((unsigned short) mode_size[((enum machine_mode) (y)->mode)]) > (0 ? 8 : 4)
   && j < 53)
 j += hard_regno_nregs[j][((enum machine_mode) (y)->mode)] - 1;
      return i == j;
    }
  if (code == POST_DEC || code == POST_INC || code == POST_MODIFY)
    return operands_match_p ((((x)->u.fld[0]).rtx1), y);
  if (((enum rtx_code) (y)->code) == PRE_DEC || ((enum rtx_code) (y)->code) == PRE_INC
      || ((enum rtx_code) (y)->code) == PRE_MODIFY)
    return operands_match_p (x, (((y)->u.fld[0]).rtx1)) ? 2 : 0;
 slow:
  if (code != ((enum rtx_code) (y)->code))
    return 0;
  if (code == LABEL_REF)
    return (((x)->u.fld[0]).rtx1) == (((y)->u.fld[0]).rtx1);
  if (code == SYMBOL_REF)
    return (((x)->u.fld[0]).rtstr) == (((y)->u.fld[0]).rtstr);
  if (((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode))
    return 0;
  success_2 = 0;
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      int val, j;
      switch (fmt[i])
 {
 case 'w':
   if (((x)->u.hwint[i]) != ((y)->u.hwint[i]))
     return 0;
   break;
 case 'i':
   if ((((x)->u.fld[i]).rtint) != (((y)->u.fld[i]).rtint))
     return 0;
   break;
 case 'e':
   val = operands_match_p ((((x)->u.fld[i]).rtx1), (((y)->u.fld[i]).rtx1));
   if (val == 0)
     return 0;
   if (val == 2)
     success_2 = 1;
   break;
 case '0':
   break;
 case 'E':
   if ((((((x)->u.fld[i]).rtvec1))->num_elem) != (((((y)->u.fld[i]).rtvec1))->num_elem))
     return 0;
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; --j)
     {
       val = operands_match_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), (((((y)->u.fld[i]).rtvec1))->elem[j]));
       if (val == 0)
  return 0;
       if (val == 2)
  success_2 = 1;
     }
   break;
 default:
   abort ();
 }
    }
  return 1 + success_2;
}
static struct decomposition
decompose (rtx x)
{
  struct decomposition val;
  int all_const = 0;
  memset (&val, 0, sizeof (val));
  if ((((enum rtx_code) (x)->code) == MEM))
    {
      rtx base = (rtx) 0, offset = 0;
      rtx addr = (((x)->u.fld[0]).rtx1);
      if (((enum rtx_code) (addr)->code) == PRE_DEC || ((enum rtx_code) (addr)->code) == PRE_INC
   || ((enum rtx_code) (addr)->code) == POST_DEC || ((enum rtx_code) (addr)->code) == POST_INC)
 {
   val.base = (((addr)->u.fld[0]).rtx1);
   val.start = -((unsigned short) mode_size[((enum machine_mode) (x)->mode)]);
   val.end = ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]);
   val.safe = (((val.base)->u.fld[0]).rtuint) == 7;
   return val;
 }
      if (((enum rtx_code) (addr)->code) == PRE_MODIFY || ((enum rtx_code) (addr)->code) == POST_MODIFY)
 {
   if (((enum rtx_code) ((((addr)->u.fld[1]).rtx1))->code) == PLUS
       && (((addr)->u.fld[0]).rtx1) == ((((((addr)->u.fld[1]).rtx1))->u.fld[0]).rtx1)
       && ((rtx_class[(int) (((enum rtx_code) (((((((addr)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (((((((addr)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_VECTOR))
     {
       val.base = (((addr)->u.fld[0]).rtx1);
       val.start = -((((((((addr)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
       val.end = ((((((((addr)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
       val.safe = (((val.base)->u.fld[0]).rtuint) == 7;
       return val;
     }
 }
      if (((enum rtx_code) (addr)->code) == CONST)
 {
   addr = (((addr)->u.fld[0]).rtx1);
   all_const = 1;
 }
      if (((enum rtx_code) (addr)->code) == PLUS)
 {
   if (((rtx_class[(int) (((enum rtx_code) ((((addr)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((addr)->u.fld[0]).rtx1))->code) == CONST_VECTOR))
     {
       base = (((addr)->u.fld[1]).rtx1);
       offset = (((addr)->u.fld[0]).rtx1);
     }
   else if (((rtx_class[(int) (((enum rtx_code) ((((addr)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((addr)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
     {
       base = (((addr)->u.fld[0]).rtx1);
       offset = (((addr)->u.fld[1]).rtx1);
     }
 }
      if (offset == 0)
 {
   base = addr;
   offset = (const_int_rtx[64]);
 }
      if (((enum rtx_code) (offset)->code) == CONST)
 offset = (((offset)->u.fld[0]).rtx1);
      if (((enum rtx_code) (offset)->code) == PLUS)
 {
   if (((enum rtx_code) ((((offset)->u.fld[0]).rtx1))->code) == CONST_INT)
     {
       base = gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (base)->mode)), (base), ((((offset)->u.fld[1]).rtx1)));
       offset = (((offset)->u.fld[0]).rtx1);
     }
   else if (((enum rtx_code) ((((offset)->u.fld[1]).rtx1))->code) == CONST_INT)
     {
       base = gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (base)->mode)), (base), ((((offset)->u.fld[0]).rtx1)));
       offset = (((offset)->u.fld[1]).rtx1);
     }
   else
     {
       base = gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (base)->mode)), (base), (offset));
       offset = (const_int_rtx[64]);
     }
 }
      else if (((enum rtx_code) (offset)->code) != CONST_INT)
 {
   base = gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (base)->mode)), (base), (offset));
   offset = (const_int_rtx[64]);
 }
      if (all_const && ((enum rtx_code) (base)->code) == PLUS)
 base = gen_rtx_fmt_e (CONST, (((enum machine_mode) (base)->mode)), (base));
      if (((enum rtx_code) (offset)->code) != CONST_INT)
 abort ();
      val.start = ((offset)->u.hwint[0]);
      val.end = val.start + ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]);
      val.base = base;
      return val;
    }
  else if ((((enum rtx_code) (x)->code) == REG))
    {
      val.reg_flag = 1;
      val.start = true_regnum (x);
      if (val.start < 0)
 {
   val.start = (((x)->u.fld[0]).rtuint);
   val.end = val.start + 1;
 }
      else
 val.end = val.start + hard_regno_nregs[val.start][((enum machine_mode) (x)->mode)];
    }
  else if (((enum rtx_code) (x)->code) == SUBREG)
    {
      if (!(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 return decompose ((((x)->u.fld[0]).rtx1));
      val.reg_flag = 1;
      val.start = true_regnum (x);
      if (val.start < 0)
 return decompose ((((x)->u.fld[0]).rtx1));
      else
 val.end = val.start + hard_regno_nregs[val.start][((enum machine_mode) (x)->mode)];
    }
  else if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR)
    || ((enum rtx_code) (x)->code) == SCRATCH)
    val.safe = 1;
  else
    abort ();
  return val;
}
static int
immune_p (rtx x, rtx y, struct decomposition ydata)
{
  struct decomposition xdata;
  if (ydata.reg_flag)
    return !refers_to_regno_for_reload_p (ydata.start, ydata.end, x, (rtx*) 0);
  if (ydata.safe)
    return 1;
  if (!(((enum rtx_code) (y)->code) == MEM))
    abort ();
  if (!(((enum rtx_code) (x)->code) == MEM))
    return 1;
  xdata = decompose (x);
  if (! rtx_equal_p (xdata.base, ydata.base))
    {
      if (((rtx_class[(int) (((enum rtx_code) (xdata.base)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (xdata.base)->code) == CONST_VECTOR) && ((rtx_class[(int) (((enum rtx_code) (ydata.base)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (ydata.base)->code) == CONST_VECTOR))
 return 1;
      if (((rtx_class[(int) (((enum rtx_code) (xdata.base)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (xdata.base)->code) == CONST_VECTOR)
   && (ydata.base == (global_rtl[GR_FRAME_POINTER])
       || ydata.base == (global_rtl[GR_HARD_FRAME_POINTER])
       || ydata.base == (global_rtl[GR_STACK_POINTER])))
 return 1;
      if (((rtx_class[(int) (((enum rtx_code) (ydata.base)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (ydata.base)->code) == CONST_VECTOR)
   && (xdata.base == (global_rtl[GR_FRAME_POINTER])
       || xdata.base == (global_rtl[GR_HARD_FRAME_POINTER])
       || xdata.base == (global_rtl[GR_STACK_POINTER])))
 return 1;
      return 0;
    }
  return (xdata.start >= ydata.end || ydata.start >= xdata.end);
}
int
safe_from_earlyclobber (rtx op, rtx clobber)
{
  struct decomposition early_data;
  early_data = decompose (clobber);
  return immune_p (op, clobber, early_data);
}
int
find_reloads (rtx insn, int replace, int ind_levels, int live_known,
       short *reload_reg_p)
{
  int insn_code_number;
  int i, j;
  int noperands;
  char *constraints[30];
  enum reg_class preferred_class[30];
  char pref_or_nothing[30];
  int address_reloaded[30];
  int address_operand_reloaded[30];
  enum reload_type operand_type[30];
  enum reload_type address_type[30];
  enum reload_usage { RELOAD_READ, RELOAD_READ_WRITE, RELOAD_WRITE } modified[30];
  int no_input_reloads = 0, no_output_reloads = 0;
  int n_alternatives;
  int this_alternative[30];
  char this_alternative_match_win[30];
  char this_alternative_win[30];
  char this_alternative_offmemok[30];
  char this_alternative_earlyclobber[30];
  int this_alternative_matches[30];
  int swapped;
  int goal_alternative[30];
  int this_alternative_number;
  int goal_alternative_number = 0;
  int operand_reloadnum[30];
  int goal_alternative_matches[30];
  int goal_alternative_matched[30];
  char goal_alternative_match_win[30];
  char goal_alternative_win[30];
  char goal_alternative_offmemok[30];
  char goal_alternative_earlyclobber[30];
  int goal_alternative_swapped;
  int best;
  int commutative;
  char operands_match[30][30];
  rtx substed_operand[30];
  rtx body = (((insn)->u.fld[5]).rtx1);
  rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  int goal_earlyclobber = 0, this_earlyclobber;
  enum machine_mode operand_mode[30];
  int retval = 0;
  this_insn = insn;
  n_reloads = 0;
  n_replacements = 0;
  n_earlyclobbers = 0;
  replace_reloads = replace;
  hard_regs_live_known = live_known;
  static_reload_reg_p = reload_reg_p;
  if (((enum rtx_code) (insn)->code) == JUMP_INSN || ((enum rtx_code) (insn)->code) == CALL_INSN)
    no_output_reloads = 1;
  if (secondary_memlocs_elim_used)
    {
      memset (secondary_memlocs_elim, 0,
       sizeof (secondary_memlocs_elim[0]) * secondary_memlocs_elim_used);
      secondary_memlocs_elim_used = 0;
    }
  if (((enum rtx_code) (body)->code) == SET
      && (((enum rtx_code) ((((body)->u.fld[0]).rtx1))->code) == REG)
      && ((((((body)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
      && (((enum rtx_code) ((((body)->u.fld[1]).rtx1))->code) == REG)
      && ((((((body)->u.fld[1]).rtx1))->u.fld[0]).rtuint) < 53
      && ix86_register_move_cost ((((enum machine_mode) ((((body)->u.fld[1]).rtx1))->mode)), ((regclass_map[((((((body)->u.fld[1]).rtx1))->u.fld[0]).rtuint)])), ((regclass_map[((((((body)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])))
                                                   == 2)
    return 0;
  extract_insn (insn);
  noperands = reload_n_operands = recog_data.n_operands;
  n_alternatives = recog_data.n_alternatives;
  if (noperands == 0 || n_alternatives == 0)
    return 0;
  insn_code_number = (((insn)->u.fld[6]).rtint);
  this_insn_is_asm = insn_code_number < 0;
  memcpy (operand_mode, recog_data.operand_mode,
   noperands * sizeof (enum machine_mode));
  memcpy (constraints, recog_data.constraints, noperands * sizeof (char *));
  commutative = -1;
  for (i = 0; i < noperands; i++)
    {
      char *p;
      int c;
      substed_operand[i] = recog_data.operand[i];
      p = constraints[i];
      modified[i] = RELOAD_READ;
      while ((c = *p))
 {
   p += 1;
   switch (c)
     {
     case '=':
       modified[i] = RELOAD_WRITE;
       break;
     case '+':
       modified[i] = RELOAD_READ_WRITE;
       break;
     case '%':
       {
  if (i == noperands - 1)
    abort ();
  if (commutative < 0)
    commutative = i;
  else if (!this_insn_is_asm)
    abort ();
       }
       break;
     case '0': case '1': case '2': case '3': case '4':
     case '5': case '6': case '7': case '8': case '9':
       {
  c = strtoul (p - 1, &p, 10);
  operands_match[c][i]
    = operands_match_p (recog_data.operand[c],
          recog_data.operand[i]);
  if (c == i)
    abort ();
  if (commutative >= 0)
    {
      if (c == commutative || c == commutative + 1)
        {
   int other = c + (c == commutative ? 1 : -1);
   operands_match[other][i]
     = operands_match_p (recog_data.operand[other],
           recog_data.operand[i]);
        }
      if (i == commutative || i == commutative + 1)
        {
   int other = i + (i == commutative ? 1 : -1);
   operands_match[c][other]
     = operands_match_p (recog_data.operand[c],
           recog_data.operand[other]);
        }
    }
       }
     }
 }
    }
  for (i = 0; i < noperands; i++)
    {
      enum rtx_code code = ((enum rtx_code) (recog_data.operand[i])->code);
      address_reloaded[i] = 0;
      address_operand_reloaded[i] = 0;
      operand_type[i] = (modified[i] == RELOAD_READ ? RELOAD_FOR_INPUT
    : modified[i] == RELOAD_WRITE ? RELOAD_FOR_OUTPUT
    : RELOAD_OTHER);
      address_type[i]
 = (modified[i] == RELOAD_READ ? RELOAD_FOR_INPUT_ADDRESS
    : modified[i] == RELOAD_WRITE ? RELOAD_FOR_OUTPUT_ADDRESS
    : RELOAD_OTHER);
      if (*constraints[i] == 0)
 ;
      else if (constraints[i][0] == 'p'
        || 0)
 {
   address_operand_reloaded[i]
     = find_reloads_address (recog_data.operand_mode[i], (rtx*) 0,
        recog_data.operand[i],
        recog_data.operand_loc[i],
        i, operand_type[i], ind_levels, insn);
   if (((((rtx_class[(int) (((enum rtx_code) (*recog_data.operand_loc[i])->code))]) & (~1)) == (RTX_OBJ & (~1)))
        || ((enum rtx_code) (*recog_data.operand_loc[i])->code) == SUBREG)
       && (((enum rtx_code) (recog_data.operand[i])->code) == MULT
    || ((enum rtx_code) (recog_data.operand[i])->code) == PLUS))
     {
       (((insn)->u.fld[6]).rtint) = -1;
       retval = find_reloads (insn, replace, ind_levels, live_known,
         reload_reg_p);
       return retval;
     }
   recog_data.operand[i] = *recog_data.operand_loc[i];
   substed_operand[i] = recog_data.operand[i];
   operand_mode[i] = ((enum machine_mode) (recog_data.operand[i])->mode);
 }
      else if (code == MEM)
 {
   address_reloaded[i]
     = find_reloads_address (((enum machine_mode) (recog_data.operand[i])->mode),
        recog_data.operand_loc[i],
        (((recog_data.operand[i])->u.fld[0]).rtx1),
        &(((recog_data.operand[i])->u.fld[0]).rtx1),
        i, address_type[i], ind_levels, insn);
   recog_data.operand[i] = *recog_data.operand_loc[i];
   substed_operand[i] = recog_data.operand[i];
 }
      else if (code == SUBREG)
 {
   rtx reg = (((recog_data.operand[i])->u.fld[0]).rtx1);
   rtx op
     = find_reloads_toplev (recog_data.operand[i], i, address_type[i],
       ind_levels,
       set != 0
       && &(((set)->u.fld[0]).rtx1) == recog_data.operand_loc[i],
       insn,
       &address_reloaded[i]);
   if (replace
       && (((enum rtx_code) (op)->code) == MEM)
       && (((enum rtx_code) (reg)->code) == REG)
       && (((unsigned short) mode_size[((enum machine_mode) (reg)->mode)])
    >= ((unsigned short) mode_size[((enum machine_mode) (op)->mode)])))
     set_unique_reg_note (emit_insn_before (gen_rtx_fmt_e (USE, (VOIDmode), (reg)),
         insn),
     REG_EQUAL, reg_equiv_memory_loc[(((reg)->u.fld[0]).rtuint)]);
   substed_operand[i] = recog_data.operand[i] = op;
 }
      else if (code == PLUS || (rtx_class[(int) (code)]) == RTX_UNARY)
 substed_operand[i] = recog_data.operand[i]
   = find_reloads_toplev (recog_data.operand[i], i, address_type[i],
     ind_levels, 0, insn,
     &address_reloaded[i]);
      else if (code == REG)
 {
   int regno = (((recog_data.operand[i])->u.fld[0]).rtuint);
   if (reg_equiv_constant[regno] != 0
       && (set == 0 || &(((set)->u.fld[0]).rtx1) != recog_data.operand_loc[i]))
     {
       if (operand_mode[i] == VOIDmode)
  operand_mode[i] = ((enum machine_mode) (recog_data.operand[i])->mode);
       substed_operand[i] = recog_data.operand[i]
  = reg_equiv_constant[regno];
     }
   if (reg_equiv_memory_loc[regno] != 0
       && (reg_equiv_address[regno] != 0 || num_not_at_initial_offset))
     substed_operand[i] = recog_data.operand[i]
       = find_reloads_toplev (recog_data.operand[i], i, address_type[i],
         ind_levels, 0, insn,
         &address_reloaded[i]);
 }
      code = ((enum rtx_code) (recog_data.operand[i])->code);
      preferred_class[i]
 = ((code == REG && (((recog_data.operand[i])->u.fld[0]).rtuint)
     >= 53)
    ? reg_preferred_class ((((recog_data.operand[i])->u.fld[0]).rtuint))
    : NO_REGS);
      pref_or_nothing[i]
 = (code == REG
    && (((recog_data.operand[i])->u.fld[0]).rtuint) >= 53
    && reg_alternate_class ((((recog_data.operand[i])->u.fld[0]).rtuint)) == NO_REGS);
    }
  if (set != 0 && noperands >= 2 && recog_data.operand[0] == (((set)->u.fld[0]).rtx1)
      && recog_data.operand[1] == (((set)->u.fld[1]).rtx1))
    {
      preferred_class[0] = preferred_class[1]
 = reg_class_subunion[(int) preferred_class[0]][(int) preferred_class[1]];
      pref_or_nothing[0] |= pref_or_nothing[1];
      pref_or_nothing[1] |= pref_or_nothing[0];
    }
  best = 30 * 2 + 600;
  swapped = 0;
  goal_alternative_swapped = 0;
 try_swapped:
  for (this_alternative_number = 0;
       this_alternative_number < n_alternatives;
       this_alternative_number++)
    {
      int losers = 0;
      int bad = 0;
      int reject = 0;
      this_earlyclobber = 0;
      for (i = 0; i < noperands; i++)
 {
   char *p = constraints[i];
   char *end;
   int len;
   int win = 0;
   int did_match = 0;
   int badop = 1;
   int winreg = 0;
   int c;
   int m;
   rtx operand = recog_data.operand[i];
   int offset = 0;
   int force_reload = 0;
   int offmemok = 0;
   int constmemok = 0;
   int earlyclobber = 0;
   if (((rtx_class[(int) (((enum rtx_code) (operand)->code))]) == RTX_UNARY) && *p != 0)
     operand = (((operand)->u.fld[0]).rtx1);
   while (((enum rtx_code) (operand)->code) == SUBREG)
     {
       if ((((enum rtx_code) ((((operand)->u.fld[0]).rtx1))->code) == REG)
    && ((((((operand)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
  {
    if (!subreg_offset_representable_p
   (((((((operand)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
    ((enum machine_mode) ((((operand)->u.fld[0]).rtx1))->mode),
    (((operand)->u.fld[1]).rtuint),
    ((enum machine_mode) (operand)->mode)))
       force_reload = 1;
    offset += subreg_regno_offset (((((((operand)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
       ((enum machine_mode) ((((operand)->u.fld[0]).rtx1))->mode),
       (((operand)->u.fld[1]).rtuint),
       ((enum machine_mode) (operand)->mode));
  }
       operand = (((operand)->u.fld[0]).rtx1);
       if (((rtx_class[(int) (((enum rtx_code) (operand)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (operand)->code) == CONST_VECTOR)
    || ((enum rtx_code) (operand)->code) == PLUS
    || (((((enum rtx_code) (operand)->code) == MEM)
         || ((((enum rtx_code) (operand)->code) == REG)
      && (((operand)->u.fld[0]).rtuint) >= 53))
        && (((((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (operand)->mode)]) * 8))
       < 128)
      && (((unsigned short) mode_size[operand_mode[i]])
          > ((unsigned short) mode_size[((enum machine_mode) (operand)->mode)])))
     || 0
     )
        )
    )
  force_reload = 1;
     }
   this_alternative[i] = (int) NO_REGS;
   this_alternative_win[i] = 0;
   this_alternative_match_win[i] = 0;
   this_alternative_offmemok[i] = 0;
   this_alternative_earlyclobber[i] = 0;
   this_alternative_matches[i] = -1;
   if (*p == 0 || *p == ',')
     win = 1, badop = 0;
   do
     switch ((c = *p, len = 1), c)
       {
       case '\0':
  len = 0;
  break;
       case ',':
  c = '\0';
  break;
       case '=': case '+': case '*':
  break;
       case '%':
  break;
       case '?':
  reject += 6;
  break;
       case '!':
  reject = 600;
  break;
       case '#':
  do
    p++;
  while (*p && *p != ',');
  len = 0;
  break;
       case '0': case '1': case '2': case '3': case '4':
       case '5': case '6': case '7': case '8': case '9':
  m = strtoul (p, &end, 10);
  p = end;
  len = 0;
  this_alternative_matches[i] = m;
  if ((swapped && (m != commutative || i != commutative + 1))
      ? (operands_match
         [(m == commutative || m == commutative + 1)
         ? 2 * commutative + 1 - m : m]
         [(i == commutative || i == commutative + 1)
         ? 2 * commutative + 1 - i : i])
      : operands_match[m][i])
    {
      if (this_alternative_offmemok[m]
   && (((enum rtx_code) (recog_data.operand[m])->code) == MEM)
   && this_alternative[m] == (int) NO_REGS
   && ! this_alternative_win[m])
        bad = 1;
      did_match = this_alternative_win[m];
    }
  else
    {
      rtx value1;
      if (this_alternative_win[m])
        losers++;
      this_alternative_win[m] = 0;
      if (this_alternative[m] == (int) NO_REGS)
        bad = 1;
      value1
        = find_dummy_reload (recog_data.operand[i],
        recog_data.operand[m],
        recog_data.operand_loc[i],
        recog_data.operand_loc[m],
        operand_mode[i], operand_mode[m],
        this_alternative[m], -1,
        this_alternative_earlyclobber[m]);
      if (value1 != 0)
        losers--;
    }
  badop = 0;
  this_alternative[i] = this_alternative[m];
  if (! did_match || force_reload)
    for (j = 0; j < i; j++)
      if (this_alternative_matches[j]
   == this_alternative_matches[i])
        badop = 1;
  break;
       case 'p':
  this_alternative[i] = (int) GENERAL_REGS;
  win = 1;
  badop = 0;
  break;
       case 'm':
  if (force_reload)
    break;
  if ((((enum rtx_code) (operand)->code) == MEM)
      || ((((enum rtx_code) (operand)->code) == REG)
   && (((operand)->u.fld[0]).rtuint) >= 53
   && reg_renumber[(((operand)->u.fld[0]).rtuint)] < 0))
    win = 1;
  if ((((rtx_class[(int) (((enum rtx_code) (operand)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (operand)->code) == CONST_VECTOR) && ((enum rtx_code) (operand)->code) != HIGH && !targetm.cannot_force_const_mem (operand)))
    badop = 0;
  constmemok = 1;
  break;
       case '<':
  if ((((enum rtx_code) (operand)->code) == MEM)
      && ! address_reloaded[i]
      && (((enum rtx_code) ((((operand)->u.fld[0]).rtx1))->code) == PRE_DEC
   || ((enum rtx_code) ((((operand)->u.fld[0]).rtx1))->code) == POST_DEC))
    win = 1;
  break;
       case '>':
  if ((((enum rtx_code) (operand)->code) == MEM)
      && ! address_reloaded[i]
      && (((enum rtx_code) ((((operand)->u.fld[0]).rtx1))->code) == PRE_INC
   || ((enum rtx_code) ((((operand)->u.fld[0]).rtx1))->code) == POST_INC))
    win = 1;
  break;
       case 'V':
  if (force_reload)
    break;
  if ((((enum rtx_code) (operand)->code) == MEM)
      && ! (ind_levels ? offsettable_memref_p (operand)
     : offsettable_nonstrict_memref_p (operand))
      && !((((enum rtx_code) ((((operand)->u.fld[0]).rtx1))->code) == REG)
    && (ind_levels == 0
        || reg_equiv_address[((((((operand)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] != 0)))
    win = 1;
  break;
       case 'o':
  if (force_reload)
    break;
  if (((((enum rtx_code) (operand)->code) == MEM)
       && ((ind_levels ? offsettable_memref_p (operand)
     : offsettable_nonstrict_memref_p (operand))
    || address_reloaded[i]))
      || ((((enum rtx_code) (operand)->code) == REG)
   && (((operand)->u.fld[0]).rtuint) >= 53
   && reg_renumber[(((operand)->u.fld[0]).rtuint)] < 0
   && ((reg_equiv_mem[(((operand)->u.fld[0]).rtuint)] != 0
        && offsettable_memref_p (reg_equiv_mem[(((operand)->u.fld[0]).rtuint)]))
       || (reg_equiv_address[(((operand)->u.fld[0]).rtuint)] != 0))))
    win = 1;
  if ((((rtx_class[(int) (((enum rtx_code) (operand)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (operand)->code) == CONST_VECTOR) && ((enum rtx_code) (operand)->code) != HIGH && !targetm.cannot_force_const_mem (operand))
      || (((enum rtx_code) (operand)->code) == MEM))
    badop = 0;
  constmemok = 1;
  offmemok = 1;
  break;
       case '&':
  earlyclobber = 1, this_earlyclobber = 1;
  break;
       case 'E':
       case 'F':
  if (((enum rtx_code) (operand)->code) == CONST_DOUBLE
      || (((enum rtx_code) (operand)->code) == CONST_VECTOR
   && (mode_class[((enum machine_mode) (operand)->mode)]
       == MODE_VECTOR_FLOAT)))
    win = 1;
  break;
       case 'G':
       case 'H':
  if (((enum rtx_code) (operand)->code) == CONST_DOUBLE
      && ((c) == 'G' ? standard_80387_constant_p (operand) : 0))
    win = 1;
  break;
       case 's':
  if (((enum rtx_code) (operand)->code) == CONST_INT
      || (((enum rtx_code) (operand)->code) == CONST_DOUBLE
   && ((enum machine_mode) (operand)->mode) == VOIDmode))
    break;
       case 'i':
  if (((rtx_class[(int) (((enum rtx_code) (operand)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (operand)->code) == CONST_VECTOR)
      && (! flag_pic || legitimate_pic_operand_p (operand))
      )
    win = 1;
  break;
       case 'n':
  if (((enum rtx_code) (operand)->code) == CONST_INT
      || (((enum rtx_code) (operand)->code) == CONST_DOUBLE
   && ((enum machine_mode) (operand)->mode) == VOIDmode))
    win = 1;
  break;
       case 'I':
       case 'J':
       case 'K':
       case 'L':
       case 'M':
       case 'N':
       case 'O':
       case 'P':
  if (((enum rtx_code) (operand)->code) == CONST_INT
      && ((c) == 'I' ? (((operand)->u.hwint[0])) >= 0 && (((operand)->u.hwint[0])) <= 31 : (c) == 'J' ? (((operand)->u.hwint[0])) >= 0 && (((operand)->u.hwint[0])) <= 63 : (c) == 'K' ? (((operand)->u.hwint[0])) >= -128 && (((operand)->u.hwint[0])) <= 127 : (c) == 'L' ? (((operand)->u.hwint[0])) == 0xff || (((operand)->u.hwint[0])) == 0xffff : (c) == 'M' ? (((operand)->u.hwint[0])) >= 0 && (((operand)->u.hwint[0])) <= 3 : (c) == 'N' ? (((operand)->u.hwint[0])) >= 0 && (((operand)->u.hwint[0])) <= 255 : 0))
    win = 1;
  break;
       case 'X':
  win = 1;
  break;
       case 'g':
  if (! force_reload
      && ((enum rtx_code) (operand)->code) != PLUS
      && ((enum rtx_code) (operand)->code) != SCRATCH
      && (! ((rtx_class[(int) (((enum rtx_code) (operand)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (operand)->code) == CONST_VECTOR)
   || ! flag_pic
   || legitimate_pic_operand_p (operand))
      && (GENERAL_REGS == ALL_REGS
   || !(((enum rtx_code) (operand)->code) == REG)
   || ((((operand)->u.fld[0]).rtuint) >= 53
       && reg_renumber[(((operand)->u.fld[0]).rtuint)] < 0)))
    win = 1;
       case 'r':
  this_alternative[i]
    = (int) reg_class_subunion[this_alternative[i]][(int) GENERAL_REGS];
  goto reg;
       default:
  if (((c) == 'r' ? GENERAL_REGS : NO_REGS) == NO_REGS)
    {
      if (0)
        {
   if (force_reload)
     break;
          if (((c) == 'e' ? x86_64_sign_extended_value (operand) : (c) == 'Z' ? x86_64_zero_extended_value (operand) : (c) == 'C' ? standard_sse_constant_p (operand) : 0))
            win = 1;
   else if ((((enum rtx_code) (operand)->code) == MEM)
     && address_reloaded[i])
     win = 1;
          else if ((((enum rtx_code) (operand)->code) == REG)
     && (((operand)->u.fld[0]).rtuint) >= 53
     && reg_renumber[(((operand)->u.fld[0]).rtuint)] < 0
     && ((reg_equiv_mem[(((operand)->u.fld[0]).rtuint)] != 0
          && ((c) == 'e' ? x86_64_sign_extended_value (reg_equiv_mem[(((operand)->u.fld[0]).rtuint)]) : (c) == 'Z' ? x86_64_zero_extended_value (reg_equiv_mem[(((operand)->u.fld[0]).rtuint)]) : (c) == 'C' ? standard_sse_constant_p (reg_equiv_mem[(((operand)->u.fld[0]).rtuint)]) : 0))
         || (reg_equiv_address[(((operand)->u.fld[0]).rtuint)] != 0)))
     win = 1;
   if ((((rtx_class[(int) (((enum rtx_code) (operand)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (operand)->code) == CONST_VECTOR) && ((enum rtx_code) (operand)->code) != HIGH && !targetm.cannot_force_const_mem (operand))
       || (((enum rtx_code) (operand)->code) == MEM))
     badop = 0;
   constmemok = 1;
   offmemok = 1;
   break;
        }
      if (0)
        {
          if (((c) == 'e' ? x86_64_sign_extended_value (operand) : (c) == 'Z' ? x86_64_zero_extended_value (operand) : (c) == 'C' ? standard_sse_constant_p (operand) : 0))
            win = 1;
   this_alternative[i] = (int) GENERAL_REGS;
   badop = 0;
   break;
        }
      if (((c) == 'e' ? x86_64_sign_extended_value (operand) : (c) == 'Z' ? x86_64_zero_extended_value (operand) : (c) == 'C' ? standard_sse_constant_p (operand) : 0))
        win = 1;
      break;
    }
  this_alternative[i]
    = (int) (reg_class_subunion
      [this_alternative[i]]
      [(int) ((c) == 'r' ? GENERAL_REGS : NO_REGS)]);
       reg:
  if (((enum machine_mode) (operand)->mode) == BLKmode)
    break;
  winreg = 1;
  if ((((enum rtx_code) (operand)->code) == REG)
      && reg_fits_class_p (operand, this_alternative[i],
      offset, ((enum machine_mode) (recog_data.operand[i])->mode)))
    win = 1;
  break;
       }
   while ((p += len), c);
   constraints[i] = p;
   if (winreg && this_alternative[i] != (int) NO_REGS)
     badop = 0;
   this_alternative_earlyclobber[i] = earlyclobber;
   if (win && ! force_reload)
     this_alternative_win[i] = 1;
   else if (did_match && ! force_reload)
     this_alternative_match_win[i] = 1;
   else
     {
       int const_to_mem = 0;
       this_alternative_offmemok[i] = offmemok;
       losers++;
       if (badop)
  bad = 1;
       if ((((enum rtx_code) (operand)->code) == REG)
    && this_alternative[i] == (int) NO_REGS
    && this_alternative_matches[i] < 0)
  bad = 1;
       if ((((rtx_class[(int) (((enum rtx_code) (operand)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (operand)->code) == CONST_VECTOR) && ((enum rtx_code) (operand)->code) != HIGH && !targetm.cannot_force_const_mem (operand))
    && ((ix86_preferred_reload_class ((operand), ((enum reg_class) this_alternative[i]))
         == NO_REGS)
        || no_input_reloads)
    && operand_mode[i] != VOIDmode)
  {
    const_to_mem = 1;
    if (this_alternative[i] != (int) NO_REGS)
      losers++;
  }
       if (! ((rtx_class[(int) (((enum rtx_code) (operand)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (operand)->code) == CONST_VECTOR)
    && (enum reg_class) this_alternative[i] != NO_REGS
    && (ix86_preferred_reload_class ((operand), ((enum reg_class) this_alternative[i]))
        == NO_REGS))
  bad = 1;
       else if (((enum rtx_code) (operand)->code) != SCRATCH
         && modified[i] != RELOAD_READ && no_output_reloads
         && ! find_reg_note (insn, REG_UNUSED, operand))
  bad = 1;
       else if (modified[i] != RELOAD_WRITE && no_input_reloads
         && ! const_to_mem)
  bad = 1;
       if (! ((((enum rtx_code) (operand)->code) == REG)
       && (((operand)->u.fld[0]).rtuint) >= 53)
    && ((enum rtx_code) (operand)->code) != SCRATCH
    && ! (const_to_mem && constmemok))
  reject += 2;
       if (operand_type[i] != RELOAD_FOR_INPUT
    && ((enum rtx_code) (operand)->code) != SCRATCH)
  reject++;
     }
   if (! win && ! did_match
       && this_alternative[i] != (int) NO_REGS
       && ((unsigned short) mode_size[operand_mode[i]]) <= (0 ? 8 : 4)
       && reg_class_size[(int) preferred_class[i]] > 1)
     {
       if (! reg_class_subset_p (this_alternative[i],
     preferred_class[i]))
  {
    if (reg_class_subset_p (preferred_class[i],
       this_alternative[i]))
      this_alternative[i] = (int) preferred_class[i];
    else
      reject += (2 + 2 * pref_or_nothing[i]);
  }
     }
 }
      for (i = 0; i < noperands; i++)
 if (this_alternative_earlyclobber[i]
     && (this_alternative_win[i] || this_alternative_match_win[i]))
   {
     struct decomposition early_data;
     early_data = decompose (recog_data.operand[i]);
     if (modified[i] == RELOAD_READ)
       abort ();
     if (this_alternative[i] == NO_REGS)
       {
  this_alternative_earlyclobber[i] = 0;
  if (this_insn_is_asm)
    error_for_asm (this_insn,
     "`&' constraint used with no register class");
  else
    abort ();
       }
     for (j = 0; j < noperands; j++)
       if (((((enum rtx_code) (recog_data.operand[j])->code) == MEM)
     || modified[j] != RELOAD_WRITE)
    && j != i
    && *recog_data.constraints[j] != 0
    && ! (this_alternative_matches[j] == i
   && rtx_equal_p (recog_data.operand[i],
     recog_data.operand[j]))
    && !immune_p (recog_data.operand[j], recog_data.operand[i],
    early_data))
  {
    if (reg_class_size[this_alternative[i]] == 1
        && ((((enum rtx_code) (recog_data.operand[j])->code) == REG)
     || ((enum rtx_code) (recog_data.operand[j])->code) == SUBREG))
      {
        losers++;
        this_alternative_win[j] = 0;
        this_alternative_match_win[j] = 0;
      }
    else
      break;
  }
     if (j != noperands)
       {
  losers++;
  this_alternative_win[i] = 0;
  this_alternative_match_win[j] = 0;
  for (j = 0; j < noperands; j++)
    if (this_alternative_matches[j] == i
        && this_alternative_match_win[j])
      {
        this_alternative_win[j] = 0;
        this_alternative_match_win[j] = 0;
        losers++;
      }
       }
   }
      if (losers == 0)
 {
   if (commutative >= 0)
     {
       recog_data.operand[commutative] = substed_operand[commutative];
       recog_data.operand[commutative + 1]
  = substed_operand[commutative + 1];
     }
   for (i = 0; i < noperands; i++)
     {
       goal_alternative_win[i] = this_alternative_win[i];
       goal_alternative_match_win[i] = this_alternative_match_win[i];
       goal_alternative[i] = this_alternative[i];
       goal_alternative_offmemok[i] = this_alternative_offmemok[i];
       goal_alternative_matches[i] = this_alternative_matches[i];
       goal_alternative_earlyclobber[i]
  = this_alternative_earlyclobber[i];
     }
   goal_alternative_number = this_alternative_number;
   goal_alternative_swapped = swapped;
   goal_earlyclobber = this_earlyclobber;
   goto finish;
 }
      losers = losers * 6 + reject;
      if (! bad && best > losers)
 {
   for (i = 0; i < noperands; i++)
     {
       goal_alternative[i] = this_alternative[i];
       goal_alternative_win[i] = this_alternative_win[i];
       goal_alternative_match_win[i] = this_alternative_match_win[i];
       goal_alternative_offmemok[i] = this_alternative_offmemok[i];
       goal_alternative_matches[i] = this_alternative_matches[i];
       goal_alternative_earlyclobber[i]
  = this_alternative_earlyclobber[i];
     }
   goal_alternative_swapped = swapped;
   best = losers;
   goal_alternative_number = this_alternative_number;
   goal_earlyclobber = this_earlyclobber;
 }
    }
  if (commutative >= 0)
    {
      swapped = !swapped;
      if (swapped)
 {
   enum reg_class tclass;
   int t;
   recog_data.operand[commutative] = substed_operand[commutative + 1];
   recog_data.operand[commutative + 1] = substed_operand[commutative];
   for (i = 0; i < recog_data.n_dups; i++)
     if (recog_data.dup_num[i] == commutative
  || recog_data.dup_num[i] == commutative + 1)
       *recog_data.dup_loc[i]
   = recog_data.operand[(int) recog_data.dup_num[i]];
   tclass = preferred_class[commutative];
   preferred_class[commutative] = preferred_class[commutative + 1];
   preferred_class[commutative + 1] = tclass;
   t = pref_or_nothing[commutative];
   pref_or_nothing[commutative] = pref_or_nothing[commutative + 1];
   pref_or_nothing[commutative + 1] = t;
   memcpy (constraints, recog_data.constraints,
    noperands * sizeof (char *));
   goto try_swapped;
 }
      else
 {
   recog_data.operand[commutative] = substed_operand[commutative];
   recog_data.operand[commutative + 1]
     = substed_operand[commutative + 1];
   for (i = 0; i < recog_data.n_dups; i++)
     if (recog_data.dup_num[i] == commutative
  || recog_data.dup_num[i] == commutative + 1)
       *recog_data.dup_loc[i]
   = recog_data.operand[(int) recog_data.dup_num[i]];
 }
    }
  if (best == 30 * 2 + 600)
    {
      if (insn_code_number >= 0)
 _fatal_insn ("unable to generate reloads for:", insn, "gcc.c", 605016, "?");
      error_for_asm (insn, "inconsistent operand constraints in an `asm'");
      (((insn)->u.fld[5]).rtx1) = gen_rtx_fmt_e (USE, (VOIDmode), ((const_int_rtx[64])));
      n_reloads = 0;
      return 0;
    }
 finish:
  for (i = 0; i < noperands; i++)
    goal_alternative_matched[i] = -1;
  for (i = 0; i < noperands; i++)
    if (! goal_alternative_win[i]
 && goal_alternative_matches[i] >= 0)
      goal_alternative_matched[goal_alternative_matches[i]] = i;
  for (i = 0; i < noperands; i++)
    goal_alternative_win[i] |= goal_alternative_match_win[i];
  if (goal_alternative_swapped)
    {
      rtx tem;
      tem = substed_operand[commutative];
      substed_operand[commutative] = substed_operand[commutative + 1];
      substed_operand[commutative + 1] = tem;
      tem = recog_data.operand[commutative];
      recog_data.operand[commutative] = recog_data.operand[commutative + 1];
      recog_data.operand[commutative + 1] = tem;
      tem = *recog_data.operand_loc[commutative];
      *recog_data.operand_loc[commutative]
 = *recog_data.operand_loc[commutative + 1];
      *recog_data.operand_loc[commutative + 1] = tem;
      for (i = 0; i < n_reloads; i++)
 {
   if (rld[i].opnum == commutative)
     rld[i].opnum = commutative + 1;
   else if (rld[i].opnum == commutative + 1)
     rld[i].opnum = commutative;
 }
    }
  for (i = 0; i < noperands; i++)
    {
      operand_reloadnum[i] = -1;
      if (goal_alternative_earlyclobber[i] && operand_type[i] != RELOAD_OTHER)
 operand_type[i]
   = (find_reg_note (insn, REG_UNUSED, recog_data.operand[i])
      ? RELOAD_FOR_INSN : RELOAD_OTHER);
    }
  for (i = 0; i < noperands; i++)
    if (! goal_alternative_win[i]
 && (((rtx_class[(int) (((enum rtx_code) (recog_data.operand[i])->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (recog_data.operand[i])->code) == CONST_VECTOR) && ((enum rtx_code) (recog_data.operand[i])->code) != HIGH && !targetm.cannot_force_const_mem (recog_data.operand[i]))
 && ((ix86_preferred_reload_class ((recog_data.operand[i]), ((enum reg_class) goal_alternative[i]))
      == NO_REGS)
     || no_input_reloads)
 && operand_mode[i] != VOIDmode)
      {
 substed_operand[i] = recog_data.operand[i]
   = find_reloads_toplev (force_const_mem (operand_mode[i],
        recog_data.operand[i]),
     i, address_type[i], ind_levels, 0, insn,
     ((void *)0));
 if (alternative_allows_memconst (recog_data.constraints[i],
      goal_alternative_number))
   goal_alternative_win[i] = 1;
      }
  if (goal_earlyclobber)
    for (i = 0; i < noperands; i++)
      if (goal_alternative_earlyclobber[i])
 reload_earlyclobbers[n_earlyclobbers++] = recog_data.operand[i];
  for (i = 0; i < noperands; i++)
    if (! goal_alternative_win[i])
      {
 if (goal_alternative_matches[i] >= 0)
   ;
 else if (goal_alternative_matched[i] == -1
   && goal_alternative_offmemok[i]
   && (((enum rtx_code) (recog_data.operand[i])->code) == MEM))
   {
     operand_reloadnum[i]
       = push_reload ((((recog_data.operand[i])->u.fld[0]).rtx1), (rtx) 0,
        &(((recog_data.operand[i])->u.fld[0]).rtx1), (rtx*) 0,
        GENERAL_REGS,
        ((enum machine_mode) ((((recog_data.operand[i])->u.fld[0]).rtx1))->mode),
        VOIDmode, 0, 0, i, RELOAD_FOR_INPUT);
     rld[operand_reloadnum[i]].inc
       = ((unsigned short) mode_size[((enum machine_mode) (recog_data.operand[i])->mode)]);
     if (modified[i] == RELOAD_WRITE)
       {
  for (j = 0; j < n_reloads; j++)
    {
      if (rld[j].opnum == i)
        {
   if (rld[j].when_needed == RELOAD_FOR_OUTPUT_ADDRESS)
     rld[j].when_needed = RELOAD_FOR_INPUT_ADDRESS;
   else if (rld[j].when_needed
     == RELOAD_FOR_OUTADDR_ADDRESS)
     rld[j].when_needed = RELOAD_FOR_INPADDR_ADDRESS;
        }
    }
       }
   }
 else if (goal_alternative_matched[i] == -1)
   {
     operand_reloadnum[i]
       = push_reload ((modified[i] != RELOAD_WRITE
         ? recog_data.operand[i] : 0),
        (modified[i] != RELOAD_READ
         ? recog_data.operand[i] : 0),
        (modified[i] != RELOAD_WRITE
         ? recog_data.operand_loc[i] : 0),
        (modified[i] != RELOAD_READ
         ? recog_data.operand_loc[i] : 0),
        (enum reg_class) goal_alternative[i],
        (modified[i] == RELOAD_WRITE
         ? VOIDmode : operand_mode[i]),
        (modified[i] == RELOAD_READ
         ? VOIDmode : operand_mode[i]),
        (insn_code_number < 0 ? 0
         : insn_data[insn_code_number].operand[i].strict_low),
        0, i, operand_type[i]);
   }
 else if (modified[i] == RELOAD_READ
   && modified[goal_alternative_matched[i]] == RELOAD_WRITE)
   {
     operand_reloadnum[i]
       = push_reload (recog_data.operand[i],
        recog_data.operand[goal_alternative_matched[i]],
        recog_data.operand_loc[i],
        recog_data.operand_loc[goal_alternative_matched[i]],
        (enum reg_class) goal_alternative[i],
        operand_mode[i],
        operand_mode[goal_alternative_matched[i]],
        0, 0, i, RELOAD_OTHER);
     operand_reloadnum[goal_alternative_matched[i]] = output_reloadnum;
   }
 else if (modified[i] == RELOAD_WRITE
   && modified[goal_alternative_matched[i]] == RELOAD_READ)
   {
     operand_reloadnum[goal_alternative_matched[i]]
       = push_reload (recog_data.operand[goal_alternative_matched[i]],
        recog_data.operand[i],
        recog_data.operand_loc[goal_alternative_matched[i]],
        recog_data.operand_loc[i],
        (enum reg_class) goal_alternative[i],
        operand_mode[goal_alternative_matched[i]],
        operand_mode[i],
        0, 0, i, RELOAD_OTHER);
     operand_reloadnum[i] = output_reloadnum;
   }
 else if (insn_code_number >= 0)
   abort ();
 else
   {
     error_for_asm (insn, "inconsistent operand constraints in an `asm'");
     (((insn)->u.fld[5]).rtx1) = gen_rtx_fmt_e (USE, (VOIDmode), ((const_int_rtx[64])));
     n_reloads = 0;
     return 0;
   }
      }
    else if (goal_alternative_matched[i] < 0
      && goal_alternative_matches[i] < 0
      && !address_operand_reloaded[i]
      && optimize)
      {
 rtx operand = recog_data.operand[i];
 while (((enum rtx_code) (operand)->code) == SUBREG)
   operand = (((operand)->u.fld[0]).rtx1);
 if (((((enum rtx_code) (operand)->code) == MEM)
      || ((((enum rtx_code) (operand)->code) == REG)
   && (((operand)->u.fld[0]).rtuint) >= 53))
     && ((enum reg_class) goal_alternative[i] != NO_REGS
  || modified[i] == RELOAD_WRITE)
     && ! no_input_reloads
     && (modified[i] == RELOAD_READ
  || (! no_output_reloads && ! this_insn_is_asm)))
   operand_reloadnum[i]
     = push_reload ((modified[i] != RELOAD_WRITE
       ? recog_data.operand[i] : 0),
      (modified[i] != RELOAD_READ
       ? recog_data.operand[i] : 0),
      (modified[i] != RELOAD_WRITE
       ? recog_data.operand_loc[i] : 0),
      (modified[i] != RELOAD_READ
       ? recog_data.operand_loc[i] : 0),
      (enum reg_class) goal_alternative[i],
      (modified[i] == RELOAD_WRITE
       ? VOIDmode : operand_mode[i]),
      (modified[i] == RELOAD_READ
       ? VOIDmode : operand_mode[i]),
      (insn_code_number < 0 ? 0
       : insn_data[insn_code_number].operand[i].strict_low),
      1, i, operand_type[i]);
 else if (replace
   && ((((enum rtx_code) (operand)->code) == MEM)
       || ((((enum rtx_code) (operand)->code) == REG)
    && (((operand)->u.fld[0]).rtuint) >= 53
    && reg_renumber [(((operand)->u.fld[0]).rtuint)] < 0)))
   {
     operand = *recog_data.operand_loc[i];
     while (((enum rtx_code) (operand)->code) == SUBREG)
       operand = (((operand)->u.fld[0]).rtx1);
     if ((((enum rtx_code) (operand)->code) == REG))
       {
  if (modified[i] != RELOAD_WRITE)
    ((emit_insn_before (gen_rtx_fmt_e (USE, (VOIDmode), (operand)), insn))->mode = (QImode))
                         ;
  if (modified[i] != RELOAD_READ)
    emit_insn_after (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (operand)), insn);
       }
   }
      }
    else if (goal_alternative_matches[i] >= 0
      && goal_alternative_win[goal_alternative_matches[i]]
      && modified[i] == RELOAD_READ
      && modified[goal_alternative_matches[i]] == RELOAD_WRITE
      && ! no_input_reloads && ! no_output_reloads
      && optimize)
      {
 rtx operand = recog_data.operand[i];
 while (((enum rtx_code) (operand)->code) == SUBREG)
   operand = (((operand)->u.fld[0]).rtx1);
 if (((((enum rtx_code) (operand)->code) == MEM)
      || ((((enum rtx_code) (operand)->code) == REG)
   && (((operand)->u.fld[0]).rtuint) >= 53))
     && ((enum reg_class) goal_alternative[goal_alternative_matches[i]]
  != NO_REGS))
   operand_reloadnum[i] = operand_reloadnum[goal_alternative_matches[i]]
     = push_reload (recog_data.operand[goal_alternative_matches[i]],
      recog_data.operand[i],
      recog_data.operand_loc[goal_alternative_matches[i]],
      recog_data.operand_loc[i],
      (enum reg_class) goal_alternative[goal_alternative_matches[i]],
      operand_mode[goal_alternative_matches[i]],
      operand_mode[i],
      0, 1, goal_alternative_matches[i], RELOAD_OTHER);
      }
  for (i = 0; i < noperands; i++)
    {
      if (replace)
 {
   rtx substitution = substed_operand[i];
   *recog_data.operand_loc[i] = substitution;
   if (((enum rtx_code) (insn)->code) != JUMP_INSN
       && ((enum rtx_code) (substitution)->code) == LABEL_REF
       && !find_reg_note (insn, REG_LABEL, (((substitution)->u.fld[0]).rtx1)))
     (((insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ue (INSN_LIST, (REG_LABEL), ((((substitution)->u.fld[0]).rtx1)), ((((insn)->u.fld[8]).rtx1)))
                         ;
 }
      else
 retval |= (substed_operand[i] != *recog_data.operand_loc[i]);
    }
  if (insn_code_number >= 0 && replace)
    for (i = insn_data[insn_code_number].n_dups - 1; i >= 0; i--)
      {
 int opno = recog_data.dup_num[i];
 *recog_data.dup_loc[i] = *recog_data.operand_loc[opno];
 dup_replacements (recog_data.dup_loc[i], recog_data.operand_loc[opno]);
      }
  if (!goal_earlyclobber)
    combine_reloads ();
  for (i = 0; i < n_reloads; i++)
    {
      int k;
      for (j = i + 1; j < n_reloads; j++)
 if ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
      || rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
      || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS
      || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
     && (rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
  || rld[j].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
  || rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS
  || rld[j].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
     && rtx_equal_p (rld[i].in, rld[j].in)
     && (operand_reloadnum[rld[i].opnum] < 0
  || rld[operand_reloadnum[rld[i].opnum]].optional)
     && (operand_reloadnum[rld[j].opnum] < 0
  || rld[operand_reloadnum[rld[j].opnum]].optional)
     && (goal_alternative_matches[rld[i].opnum] == rld[j].opnum
  || (goal_alternative_matches[rld[j].opnum]
      == rld[i].opnum)))
   {
     for (k = 0; k < n_replacements; k++)
       if (replacements[k].what == j)
  replacements[k].what = i;
     if (rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS
  || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
       rld[i].when_needed = RELOAD_FOR_OPADDR_ADDR;
     else
       rld[i].when_needed = RELOAD_FOR_OPERAND_ADDRESS;
     rld[j].in = 0;
   }
    }
  for (i = 0; i < n_reloads; i++)
    {
      if (rld[i].secondary_p
   && rld[i].when_needed == operand_type[rld[i].opnum])
 rld[i].when_needed = address_type[rld[i].opnum];
      if ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
    || rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
    || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS
    || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
   && (operand_reloadnum[rld[i].opnum] < 0
       || rld[operand_reloadnum[rld[i].opnum]].optional))
 {
   if ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
        || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
       && rld[i].secondary_in_reload != -1)
     {
       int secondary_in_reload = rld[i].secondary_in_reload;
       rld[secondary_in_reload].when_needed = RELOAD_FOR_OPADDR_ADDR;
       if (secondary_in_reload > 0
    && rld[secondary_in_reload].secondary_in_reload != -1)
  rld[rld[secondary_in_reload].secondary_in_reload].when_needed
    = RELOAD_FOR_OPADDR_ADDR;
     }
   if ((rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
        || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
       && rld[i].secondary_out_reload != -1)
     {
       int secondary_out_reload = rld[i].secondary_out_reload;
       rld[secondary_out_reload].when_needed = RELOAD_FOR_OPADDR_ADDR;
       if (secondary_out_reload
    && rld[secondary_out_reload].secondary_out_reload != -1)
  rld[rld[secondary_out_reload].secondary_out_reload].when_needed
    = RELOAD_FOR_OPADDR_ADDR;
     }
   if (rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS
       || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
     rld[i].when_needed = RELOAD_FOR_OPADDR_ADDR;
   else
     rld[i].when_needed = RELOAD_FOR_OPERAND_ADDRESS;
 }
      if ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS
    || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
   && operand_reloadnum[rld[i].opnum] >= 0
   && (rld[operand_reloadnum[rld[i].opnum]].when_needed
       == RELOAD_OTHER))
 rld[i].when_needed = RELOAD_FOR_OTHER_ADDRESS;
      if (goal_alternative_matches[rld[i].opnum] >= 0)
 rld[i].opnum = goal_alternative_matches[rld[i].opnum];
    }
  {
    int first_op_addr_num = -2;
    int first_inpaddr_num[30];
    int first_outpaddr_num[30];
    int need_change = 0;
    for (i = 0; i < noperands; i++)
      first_inpaddr_num[i] = first_outpaddr_num[i] = -2;
    for (i = n_reloads - 1; i >= 0; i--)
      {
 switch (rld[i].when_needed)
   {
   case RELOAD_FOR_OPERAND_ADDRESS:
     if (++first_op_addr_num >= 0)
       {
  first_op_addr_num = i;
  need_change = 1;
       }
     break;
   case RELOAD_FOR_INPUT_ADDRESS:
     if (++first_inpaddr_num[rld[i].opnum] >= 0)
       {
  first_inpaddr_num[rld[i].opnum] = i;
  need_change = 1;
       }
     break;
   case RELOAD_FOR_OUTPUT_ADDRESS:
     if (++first_outpaddr_num[rld[i].opnum] >= 0)
       {
  first_outpaddr_num[rld[i].opnum] = i;
  need_change = 1;
       }
     break;
   default:
     break;
   }
      }
    if (need_change)
      {
 for (i = 0; i < n_reloads; i++)
   {
     int first_num;
     enum reload_type type;
     switch (rld[i].when_needed)
       {
       case RELOAD_FOR_OPADDR_ADDR:
  first_num = first_op_addr_num;
  type = RELOAD_FOR_OPERAND_ADDRESS;
  break;
       case RELOAD_FOR_INPADDR_ADDRESS:
  first_num = first_inpaddr_num[rld[i].opnum];
  type = RELOAD_FOR_INPUT_ADDRESS;
  break;
       case RELOAD_FOR_OUTADDR_ADDRESS:
  first_num = first_outpaddr_num[rld[i].opnum];
  type = RELOAD_FOR_OUTPUT_ADDRESS;
  break;
       default:
  continue;
       }
     if (first_num < 0)
       continue;
     else if (i > first_num)
       rld[i].when_needed = type;
     else
       {
  for (j = n_reloads - 1; j > first_num; j--)
    {
      if (rld[j].when_needed == type
   && (rld[i].secondary_p
       ? rld[j].secondary_in_reload == i
       : reg_mentioned_p (rld[i].in, rld[j].in)))
        {
   rld[i].when_needed = type;
   break;
        }
    }
       }
   }
      }
  }
  for (i = 0; i < n_reloads; i++)
    if (rld[i].in != 0 && rld[i].out == 0
 && (rld[i].when_needed == RELOAD_FOR_OPERAND_ADDRESS
     || rld[i].when_needed == RELOAD_FOR_OPADDR_ADDR
     || rld[i].when_needed == RELOAD_FOR_OTHER_ADDRESS))
      for (j = 0; j < n_reloads; j++)
 if (i != j && rld[j].in != 0 && rld[j].out == 0
     && rld[j].when_needed == rld[i].when_needed
     && (rld[i].in == rld[j].in || (rld[i].in != 0 && ((((enum rtx_code) (rld[i].in)->code) == REG) ? (((enum rtx_code) (rld[j].in)->code) == REG) && (((rld[i].in)->u.fld[0]).rtuint) == (((rld[j].in)->u.fld[0]).rtuint) : rtx_equal_p (rld[i].in, rld[j].in) && ! side_effects_p (rld[i].in))))
     && rld[i].class == rld[j].class
     && !rld[i].nocombine && !rld[j].nocombine
     && rld[i].reg_rtx == rld[j].reg_rtx)
   {
     rld[i].opnum = ((rld[i].opnum) < (rld[j].opnum) ? (rld[i].opnum) : (rld[j].opnum));
     transfer_replacements (i, j);
     rld[j].in = 0;
   }
  for (i = 0; i < n_reloads; i++)
    {
      rld[i].mode
 = (rld[i].inmode == VOIDmode
    || (((unsigned short) mode_size[rld[i].outmode])
        > ((unsigned short) mode_size[rld[i].inmode])))
   ? rld[i].outmode : rld[i].inmode;
      rld[i].nregs = (!reg_classes_intersect_p ((rld[i].class), GENERAL_REGS) ? ((mode_class[rld[i].mode] == MODE_COMPLEX_INT || mode_class[rld[i].mode] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((((rld[i].mode) == XFmode ? 12 : ((unsigned short) mode_size[rld[i].mode]))) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4)));
    }
  for (i = 0; i < n_reloads; i++)
    if (rld[i].when_needed == RELOAD_FOR_INPUT
 && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET
 && (((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == REG)
 && ((((((insn)->u.fld[5]).rtx1))->u.fld[1]).rtx1) == rld[i].in)
      {
 rtx dest = ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1);
 unsigned int regno = (((dest)->u.fld[0]).rtuint);
 if (regno < 53
     && (!!((reg_class_contents[rld[i].class])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     && ix86_hard_regno_mode_ok ((regno), (rld[i].mode)))
   {
     int nr = hard_regno_nregs[regno][rld[i].mode];
     int ok = 1, nri;
     for (nri = 1; nri < nr; nri ++)
       if (! (!!((reg_class_contents[rld[i].class])[(regno + nri) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + nri) % ((unsigned) (8 * 4)))))))
  ok = 0;
     if (ok)
       rld[i].reg_rtx = dest;
   }
      }
  return retval;
}
static int
alternative_allows_memconst (const char *constraint, int altnum)
{
  int c;
  while (altnum > 0)
    {
      while (*constraint++ != ',');
      altnum--;
    }
  for (; (c = *constraint) && c != ',' && c != '#';
       constraint += 1)
    if (c == 'm' || c == 'o' || 0)
      return 1;
  return 0;
}
static rtx
find_reloads_toplev (rtx x, int opnum, enum reload_type type,
       int ind_levels, int is_set_dest, rtx insn,
       int *address_reloaded)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt = (rtx_format[(int) (code)]);
  int i;
  int copied;
  if (code == REG)
    {
      int regno = (((x)->u.fld[0]).rtuint);
      if (reg_equiv_constant[regno] != 0 && !is_set_dest)
 x = reg_equiv_constant[regno];
      else if (reg_equiv_memory_loc[regno]
        && (reg_equiv_address[regno] != 0 || num_not_at_initial_offset))
 {
   rtx mem = make_memloc (x, regno);
   if (reg_equiv_address[regno]
       || ! rtx_equal_p (mem, reg_equiv_mem[regno]))
     {
       if (replace_reloads && recog_data.operand[opnum] != x)
  ((emit_insn_before (gen_rtx_fmt_e (USE, (VOIDmode), (x)), insn))->mode = (QImode))
            ;
       x = mem;
       i = find_reloads_address (((enum machine_mode) (x)->mode), &x, (((x)->u.fld[0]).rtx1), &(((x)->u.fld[0]).rtx1),
     opnum, type, ind_levels, insn);
       if (address_reloaded)
  *address_reloaded = i;
     }
 }
      return x;
    }
  if (code == MEM)
    {
      rtx tem = x;
      i = find_reloads_address (((enum machine_mode) (x)->mode), &tem, (((x)->u.fld[0]).rtx1), &(((x)->u.fld[0]).rtx1),
    opnum, type, ind_levels, insn);
      if (address_reloaded)
 *address_reloaded = i;
      return tem;
    }
  if (code == SUBREG && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
    {
      int regno = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      rtx tem;
      if (subreg_lowpart_p (x)
   && regno >= 53 && reg_renumber[regno] < 0
   && reg_equiv_constant[regno] != 0
   && (tem = gen_lowpart_common (((enum machine_mode) (x)->mode),
     reg_equiv_constant[regno])) != 0)
 return tem;
      if (regno >= 53 && reg_renumber[regno] < 0
   && reg_equiv_constant[regno] != 0)
 {
   tem =
     simplify_gen_subreg (((enum machine_mode) (x)->mode), reg_equiv_constant[regno],
     ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode), (((x)->u.fld[1]).rtuint));
   if (!tem)
     abort ();
   return tem;
 }
      else if (regno >= 53
        && (reg_equiv_address[regno] != 0
     || (reg_equiv_mem[regno] != 0
         && (! strict_memory_address_p (((enum machine_mode) (x)->mode),
            (((reg_equiv_mem[regno])->u.fld[0]).rtx1))
      || ! offsettable_memref_p (reg_equiv_mem[regno])
      || num_not_at_initial_offset))))
 x = find_reloads_subreg_address (x, 1, opnum, type, ind_levels,
      insn);
    }
  for (copied = 0, i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   rtx new_part = find_reloads_toplev ((((x)->u.fld[i]).rtx1), opnum, type,
           ind_levels, is_set_dest, insn,
           address_reloaded);
   if (new_part != (((x)->u.fld[i]).rtx1) && ! ((rtx_class[(int) (((enum rtx_code) (new_part)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (new_part)->code) == CONST_VECTOR) && ! copied)
     {
       x = shallow_copy_rtx_stat (x );
       copied = 1;
     }
   (((x)->u.fld[i]).rtx1) = new_part;
 }
    }
  return x;
}
static rtx
make_memloc (rtx ad, int regno)
{
  rtx tem
    = (((eliminate_regs (reg_equiv_memory_loc[regno], 0, (rtx) 0))->u.fld[0]).rtx1);
  if (rtx_varies_p (tem, 0))
    tem = copy_rtx (tem);
  tem = replace_equiv_address_nv (reg_equiv_memory_loc[regno], tem);
  tem = adjust_address_1 (tem, ((enum machine_mode) (ad)->mode), 0, 0, 1);
  if (tem == reg_equiv_memory_loc[regno])
    tem = copy_rtx (tem);
  return tem;
}
static int
maybe_memory_address_p (enum machine_mode mode, rtx ad, rtx *part)
{
  int retv;
  rtx tem = *part;
  rtx reg = gen_rtx_REG (((enum machine_mode) (tem)->mode), max_reg_num ());
  *part = reg;
  retv = memory_address_p (mode, ad);
  *part = tem;
  return retv;
}
static int
find_reloads_address (enum machine_mode mode, rtx *memrefloc, rtx ad,
        rtx *loc, int opnum, enum reload_type type,
        int ind_levels, rtx insn)
{
  int regno;
  int removed_and = 0;
  rtx tem;
  if ((((enum rtx_code) (ad)->code) == REG))
    {
      regno = (((ad)->u.fld[0]).rtuint);
      tem = reg_equiv_constant[regno];
      if (tem != 0
   && (tem = eliminate_regs (tem, mode, insn))
   && strict_memory_address_p (mode, tem))
 {
   *loc = ad = tem;
   return 0;
 }
      tem = reg_equiv_memory_loc[regno];
      if (tem != 0)
 {
   if (reg_equiv_address[regno] != 0 || num_not_at_initial_offset)
     {
       tem = make_memloc (ad, regno);
       if (! strict_memory_address_p (((enum machine_mode) (tem)->mode), (((tem)->u.fld[0]).rtx1)))
  {
    find_reloads_address (((enum machine_mode) (tem)->mode), &tem, (((tem)->u.fld[0]).rtx1),
     &(((tem)->u.fld[0]).rtx1), opnum,
     ((type) == RELOAD_FOR_INPUT_ADDRESS ? RELOAD_FOR_INPADDR_ADDRESS : ((type) == RELOAD_FOR_OUTPUT_ADDRESS ? RELOAD_FOR_OUTADDR_ADDRESS : (type))), ind_levels, insn);
  }
       if (ind_levels > 0
    && strict_memory_address_p (mode, tem)
    && ((((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == REG)
        || (((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == PLUS
     && (((enum rtx_code) (((((((tem)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG)
     && ((rtx_class[(int) (((enum rtx_code) (((((((tem)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (((((((tem)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_VECTOR))))
  {
    if (replace_reloads
        && num_not_at_initial_offset
        && ! rtx_equal_p (tem, reg_equiv_mem[regno]))
      {
        *loc = tem;
        ((emit_insn_before (gen_rtx_fmt_e (USE, (VOIDmode), (ad)), insn))->mode = (QImode))
                      ;
      }
    return 0;
  }
       ad = tem;
     }
 }
      else if (regno < 53
        && ((regno) <= 7 || (regno) == 16 || (regno) == 20 || (regno >= (((((20 + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[(regno)] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[(regno)] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[(regno)] <= 7)
        && ! regno_clobbered_p (regno, this_insn, mode, 0))
 return 0;
      push_reload (ad, (rtx) 0, loc, (rtx*) 0, GENERAL_REGS,
     ((enum machine_mode) (ad)->mode), VOIDmode, 0, 0, opnum, type);
      return 1;
    }
  if (strict_memory_address_p (mode, ad))
    {
      if (((enum rtx_code) (ad)->code) == PLUS
   && ((enum rtx_code) ((((ad)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((enum rtx_code) ((((ad)->u.fld[0]).rtx1))->code) == REG)
   && reg_equiv_constant[((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] == 0)
 return 0;
      subst_reg_equivs_changed = 0;
      *loc = subst_reg_equivs (ad, insn);
      if (! subst_reg_equivs_changed)
 return 0;
      if (strict_memory_address_p (mode, ad))
 return 0;
    }
  if (((enum rtx_code) (ad)->code) == AND)
    {
      removed_and = 1;
      loc = &(((ad)->u.fld[0]).rtx1);
      ad = *loc;
    }
  if ((((enum rtx_code) (ad)->code) == MEM))
    {
      tem = ad;
      find_reloads_address (((enum machine_mode) (ad)->mode), &tem, (((ad)->u.fld[0]).rtx1), &(((ad)->u.fld[0]).rtx1),
       opnum, ((type) == RELOAD_FOR_INPUT_ADDRESS ? RELOAD_FOR_INPADDR_ADDRESS : ((type) == RELOAD_FOR_OUTPUT_ADDRESS ? RELOAD_FOR_OUTADDR_ADDRESS : (type))),
       ind_levels == 0 ? 0 : ind_levels - 1, insn);
      if (tem != ad && memrefloc)
 {
   *memrefloc = copy_rtx (*memrefloc);
   copy_replacements (tem, (((*memrefloc)->u.fld[0]).rtx1));
   loc = &(((*memrefloc)->u.fld[0]).rtx1);
   if (removed_and)
     loc = &(((*loc)->u.fld[0]).rtx1);
 }
      if (ind_levels == 0
   || (((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == SYMBOL_REF && ! indirect_symref_ok)
   || (((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == MEM)
   || ! ((((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == REG)
  || (((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == PLUS
      && (((enum rtx_code) (((((((tem)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG)
      && ((enum rtx_code) (((((((tem)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)))
 {
   push_reload (tem, (rtx) 0, loc, (rtx*) 0,
         GENERAL_REGS, ((enum machine_mode) (tem)->mode),
         VOIDmode, 0,
         0, opnum, type);
   return ! removed_and;
 }
      else
 return 0;
    }
  else if (((enum rtx_code) (ad)->code) == PLUS
    && (((enum rtx_code) ((((ad)->u.fld[0]).rtx1))->code) == REG)
    && ((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
    && ((((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= 7 || (((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == 16 || (((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == 20 || (((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[(((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[(((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[(((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtuint))] <= 7)
    && ((enum rtx_code) ((((ad)->u.fld[1]).rtx1))->code) == CONST_INT)
    {
      if (memrefloc)
 {
   *memrefloc = copy_rtx (*memrefloc);
   loc = &(((*memrefloc)->u.fld[0]).rtx1);
   if (removed_and)
     loc = &(((*loc)->u.fld[0]).rtx1);
 }
      if (double_reg_address_ok)
 {
   *loc = ad = copy_rtx (ad);
   find_reloads_address_part ((((ad)->u.fld[1]).rtx1), &(((ad)->u.fld[1]).rtx1),
         INDEX_REGS, ((enum machine_mode) (ad)->mode), opnum,
         type, ind_levels);
   return 0;
 }
      else
 {
   find_reloads_address_part (ad, loc, GENERAL_REGS,
         (0 ? DImode : SImode), opnum, type, ind_levels);
 }
      return ! removed_and;
    }
  else if (((enum rtx_code) (ad)->code) == PLUS && ((enum rtx_code) ((((ad)->u.fld[1]).rtx1))->code) == CONST_INT
    && ((enum rtx_code) ((((ad)->u.fld[0]).rtx1))->code) == PLUS
    && (((enum rtx_code) (((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG)
    && (((((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
    && ((((((((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= 7 || ((((((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == 16 || ((((((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint)) == 20 || ((((((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint))] <= 7)
        || ((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (global_rtl[GR_FRAME_POINTER])
        || ((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (global_rtl[GR_HARD_FRAME_POINTER])
        || ((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (global_rtl[GR_ARG_POINTER])
        || ((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]))
    && ! maybe_memory_address_p (mode, ad, &((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1)))
    {
      *loc = ad = gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (ad)->mode)), (plus_constant_wide ((((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1)), (long) ((((((ad)->u.fld[1]).rtx1))->u.hwint[0])))), (((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1)))
                           ;
      find_reloads_address_part ((((ad)->u.fld[0]).rtx1), &(((ad)->u.fld[0]).rtx1),
     GENERAL_REGS,
     ((enum machine_mode) (ad)->mode), opnum, type, ind_levels);
      find_reloads_address_1 (mode, (((ad)->u.fld[1]).rtx1), 1, &(((ad)->u.fld[1]).rtx1), opnum,
         type, 0, insn);
      return 0;
    }
  else if (((enum rtx_code) (ad)->code) == PLUS && ((enum rtx_code) ((((ad)->u.fld[1]).rtx1))->code) == CONST_INT
    && ((enum rtx_code) ((((ad)->u.fld[0]).rtx1))->code) == PLUS
    && (((enum rtx_code) (((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == REG)
    && (((((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint) < 53
    && ((((((((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint)) <= 7 || ((((((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint)) == 16 || ((((((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint)) == 20 || ((((((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint))] <= 7)
        || ((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1) == (global_rtl[GR_FRAME_POINTER])
        || ((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1) == (global_rtl[GR_HARD_FRAME_POINTER])
        || ((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1) == (global_rtl[GR_ARG_POINTER])
        || ((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1) == (global_rtl[GR_STACK_POINTER]))
    && ! maybe_memory_address_p (mode, ad, &((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1)))
    {
      *loc = ad = gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (ad)->mode)), (((((((ad)->u.fld[0]).rtx1))->u.fld[0]).rtx1)), (plus_constant_wide ((((((((ad)->u.fld[0]).rtx1))->u.fld[1]).rtx1)), (long) ((((((ad)->u.fld[1]).rtx1))->u.hwint[0])))))
                                   ;
      find_reloads_address_part ((((ad)->u.fld[1]).rtx1), &(((ad)->u.fld[1]).rtx1),
     GENERAL_REGS,
     ((enum machine_mode) (ad)->mode), opnum, type, ind_levels);
      find_reloads_address_1 (mode, (((ad)->u.fld[0]).rtx1), 1, &(((ad)->u.fld[0]).rtx1), opnum,
         type, 0, insn);
      return 0;
    }
  tem = ad;
  if (((enum rtx_code) (ad)->code) == PLUS)
    tem = subst_indexed_address (ad);
  if (tem != ad && strict_memory_address_p (mode, tem))
    {
      subst_reg_equivs_changed = 0;
      tem = subst_reg_equivs (tem, insn);
      if (! subst_reg_equivs_changed || strict_memory_address_p (mode, tem))
 {
   *loc = tem;
   return 0;
 }
    }
  if (((rtx_class[(int) (((enum rtx_code) (ad)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (ad)->code) == CONST_VECTOR) && ! strict_memory_address_p (mode, ad))
    {
      if (memrefloc && ((enum rtx_code) (ad)->code) == SYMBOL_REF
   && (((ad))->unchanging))
 {
   *memrefloc = copy_rtx (*memrefloc);
   loc = &(((*memrefloc)->u.fld[0]).rtx1);
   if (removed_and)
     loc = &(((*loc)->u.fld[0]).rtx1);
 }
      find_reloads_address_part (ad, loc, GENERAL_REGS,
     (0 ? DImode : SImode), opnum, type, ind_levels);
      return ! removed_and;
    }
  return find_reloads_address_1 (mode, ad, 0, loc, opnum, type, ind_levels,
     insn);
}
static rtx
subst_reg_equivs (rtx ad, rtx insn)
{
  enum rtx_code code = ((enum rtx_code) (ad)->code);
  int i;
  const char *fmt;
  switch (code)
    {
    case HIGH:
    case CONST_INT:
    case CONST:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
    case PC:
    case CC0:
      return ad;
    case REG:
      {
 int regno = (((ad)->u.fld[0]).rtuint);
 if (reg_equiv_constant[regno] != 0)
   {
     subst_reg_equivs_changed = 1;
     return reg_equiv_constant[regno];
   }
 if (reg_equiv_memory_loc[regno] && num_not_at_initial_offset)
   {
     rtx mem = make_memloc (ad, regno);
     if (! rtx_equal_p (mem, reg_equiv_mem[regno]))
       {
  subst_reg_equivs_changed = 1;
  ((emit_insn_before (gen_rtx_fmt_e (USE, (VOIDmode), (ad)), insn))->mode = (QImode))
            ;
  return mem;
       }
   }
      }
      return ad;
    case PLUS:
      if ((((ad)->u.fld[0]).rtx1) == (global_rtl[GR_FRAME_POINTER])
   && ((enum rtx_code) ((((ad)->u.fld[1]).rtx1))->code) == CONST_INT)
 return ad;
      break;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    if (fmt[i] == 'e')
      (((ad)->u.fld[i]).rtx1) = subst_reg_equivs ((((ad)->u.fld[i]).rtx1), insn);
  return ad;
}
rtx
form_sum (rtx x, rtx y)
{
  rtx tem;
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (y)->mode);
  if (mode == VOIDmode)
    mode = (0 ? DImode : SImode);
  if (((enum rtx_code) (x)->code) == CONST_INT)
    return plus_constant_wide ((y), (long) (((x)->u.hwint[0])));
  else if (((enum rtx_code) (y)->code) == CONST_INT)
    return plus_constant_wide ((x), (long) (((y)->u.hwint[0])));
  else if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR))
    tem = x, x = y, y = tem;
  if (((enum rtx_code) (x)->code) == PLUS && ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
    return form_sum ((((x)->u.fld[0]).rtx1), form_sum ((((x)->u.fld[1]).rtx1), y));
  if (((enum rtx_code) (y)->code) == PLUS && ((rtx_class[(int) (((enum rtx_code) ((((y)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((y)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
    return form_sum (form_sum (x, (((y)->u.fld[0]).rtx1)), (((y)->u.fld[1]).rtx1));
  if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR) && ((rtx_class[(int) (((enum rtx_code) (y)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (y)->code) == CONST_VECTOR))
    {
      if (((enum rtx_code) (x)->code) == CONST)
 x = (((x)->u.fld[0]).rtx1);
      if (((enum rtx_code) (y)->code) == CONST)
 y = (((y)->u.fld[0]).rtx1);
      return gen_rtx_fmt_e (CONST, (VOIDmode), (gen_rtx_fmt_ee (PLUS, (mode), (x), (y))));
    }
  return gen_rtx_fmt_ee (PLUS, (mode), (x), (y));
}
static rtx
subst_indexed_address (rtx addr)
{
  rtx op0 = 0, op1 = 0, op2 = 0;
  rtx tem;
  int regno;
  if (((enum rtx_code) (addr)->code) == PLUS)
    {
      op0 = (((addr)->u.fld[0]).rtx1), op1 = (((addr)->u.fld[1]).rtx1), op2 = 0;
      if ((((enum rtx_code) (op0)->code) == REG)
   && (regno = (((op0)->u.fld[0]).rtuint)) >= 53
   && reg_renumber[regno] < 0
   && reg_equiv_constant[regno] != 0)
 op0 = reg_equiv_constant[regno];
      else if ((((enum rtx_code) (op1)->code) == REG)
        && (regno = (((op1)->u.fld[0]).rtuint)) >= 53
        && reg_renumber[regno] < 0
        && reg_equiv_constant[regno] != 0)
 op1 = reg_equiv_constant[regno];
      else if (((enum rtx_code) (op0)->code) == PLUS
        && (tem = subst_indexed_address (op0)) != op0)
 op0 = tem;
      else if (((enum rtx_code) (op1)->code) == PLUS
        && (tem = subst_indexed_address (op1)) != op1)
 op1 = tem;
      else
 return addr;
      if (((enum rtx_code) (op1)->code) == PLUS)
 op2 = (((op1)->u.fld[1]).rtx1), op1 = (((op1)->u.fld[0]).rtx1);
      else if (((enum rtx_code) (op0)->code) == PLUS)
 op2 = op1, op1 = (((op0)->u.fld[1]).rtx1), op0 = (((op0)->u.fld[0]).rtx1);
      if (op2 != 0)
 op1 = form_sum (op1, op2);
      if (op1 != 0)
 op0 = form_sum (op0, op1);
      return op0;
    }
  return addr;
}
static void
update_auto_inc_notes (rtx insn , int regno ,
         int reloadnum )
{
}
static int
find_reloads_address_1 (enum machine_mode mode, rtx x, int context,
   rtx *loc, int opnum, enum reload_type type,
   int ind_levels, rtx insn)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case PLUS:
      {
 rtx orig_op0 = (((x)->u.fld[0]).rtx1);
 rtx orig_op1 = (((x)->u.fld[1]).rtx1);
 enum rtx_code code0 = ((enum rtx_code) (orig_op0)->code);
 enum rtx_code code1 = ((enum rtx_code) (orig_op1)->code);
 rtx op0 = orig_op0;
 rtx op1 = orig_op1;
 if (((enum rtx_code) (op0)->code) == SUBREG)
   {
     op0 = (((op0)->u.fld[0]).rtx1);
     code0 = ((enum rtx_code) (op0)->code);
     if (code0 == REG && (((op0)->u.fld[0]).rtuint) < 53)
       op0 = gen_rtx_REG (word_mode,
     ((((op0)->u.fld[0]).rtuint) +
      subreg_regno_offset (((((((orig_op0)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
             ((enum machine_mode) ((((orig_op0)->u.fld[0]).rtx1))->mode),
             (((orig_op0)->u.fld[1]).rtuint),
             ((enum machine_mode) (orig_op0)->mode))));
   }
 if (((enum rtx_code) (op1)->code) == SUBREG)
   {
     op1 = (((op1)->u.fld[0]).rtx1);
     code1 = ((enum rtx_code) (op1)->code);
     if (code1 == REG && (((op1)->u.fld[0]).rtuint) < 53)
       op1 = gen_rtx_REG (((enum machine_mode) (op1)->mode),
     ((((op1)->u.fld[0]).rtuint) +
      subreg_regno_offset (((((((orig_op1)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
             ((enum machine_mode) ((((orig_op1)->u.fld[0]).rtx1))->mode),
             (((orig_op1)->u.fld[1]).rtuint),
             ((enum machine_mode) (orig_op1)->mode))));
   }
 if (context)
   {
     find_reloads_address (((enum machine_mode) (x)->mode), loc, (((x)->u.fld[0]).rtx1), &(((x)->u.fld[0]).rtx1),
      opnum, ((type) == RELOAD_FOR_INPUT_ADDRESS ? RELOAD_FOR_INPADDR_ADDRESS : ((type) == RELOAD_FOR_OUTPUT_ADDRESS ? RELOAD_FOR_OUTADDR_ADDRESS : (type))), ind_levels, insn);
     push_reload (*loc, (rtx) 0, loc, (rtx*) 0,
    (context ? INDEX_REGS : GENERAL_REGS),
    ((enum machine_mode) (x)->mode), VOIDmode, 0, 0, opnum, type);
     return 1;
   }
 if (code0 == MULT || code0 == SIGN_EXTEND || code0 == TRUNCATE
     || code0 == ZERO_EXTEND || code1 == MEM)
   {
     find_reloads_address_1 (mode, orig_op0, 1, &(((x)->u.fld[0]).rtx1), opnum,
        type, ind_levels, insn);
     find_reloads_address_1 (mode, orig_op1, 0, &(((x)->u.fld[1]).rtx1), opnum,
        type, ind_levels, insn);
   }
 else if (code1 == MULT || code1 == SIGN_EXTEND || code1 == TRUNCATE
   || code1 == ZERO_EXTEND || code0 == MEM)
   {
     find_reloads_address_1 (mode, orig_op0, 0, &(((x)->u.fld[0]).rtx1), opnum,
        type, ind_levels, insn);
     find_reloads_address_1 (mode, orig_op1, 1, &(((x)->u.fld[1]).rtx1), opnum,
        type, ind_levels, insn);
   }
 else if (code0 == CONST_INT || code0 == CONST
   || code0 == SYMBOL_REF || code0 == LABEL_REF)
   find_reloads_address_1 (mode, orig_op1, 0, &(((x)->u.fld[1]).rtx1), opnum,
      type, ind_levels, insn);
 else if (code1 == CONST_INT || code1 == CONST
   || code1 == SYMBOL_REF || code1 == LABEL_REF)
   find_reloads_address_1 (mode, orig_op0, 0, &(((x)->u.fld[0]).rtx1), opnum,
      type, ind_levels, insn);
 else if (code0 == REG && code1 == REG)
   {
     if ((((((op0)->u.fld[0]).rtuint)) < 7 || ((((op0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] < 7)
  && (((((op1)->u.fld[0]).rtuint)) <= 7 || ((((op1)->u.fld[0]).rtuint)) == 16 || ((((op1)->u.fld[0]).rtuint)) == 20 || ((((op1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= 7))
       return 0;
     else if ((((((op1)->u.fld[0]).rtuint)) < 7 || ((((op1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] < 7)
       && (((((op0)->u.fld[0]).rtuint)) <= 7 || ((((op0)->u.fld[0]).rtuint)) == 16 || ((((op0)->u.fld[0]).rtuint)) == 20 || ((((op0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= 7))
       return 0;
     else if ((((((op1)->u.fld[0]).rtuint)) <= 7 || ((((op1)->u.fld[0]).rtuint)) == 16 || ((((op1)->u.fld[0]).rtuint)) == 20 || ((((op1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= 7))
       find_reloads_address_1 (mode, orig_op0, 1, &(((x)->u.fld[0]).rtx1), opnum,
          type, ind_levels, insn);
     else if ((((((op0)->u.fld[0]).rtuint)) <= 7 || ((((op0)->u.fld[0]).rtuint)) == 16 || ((((op0)->u.fld[0]).rtuint)) == 20 || ((((op0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= 7))
       find_reloads_address_1 (mode, orig_op1, 1, &(((x)->u.fld[1]).rtx1), opnum,
          type, ind_levels, insn);
     else if ((((((op1)->u.fld[0]).rtuint)) < 7 || ((((op1)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op1)->u.fld[0]).rtuint))] < 7))
       find_reloads_address_1 (mode, orig_op0, 0, &(((x)->u.fld[0]).rtx1), opnum,
          type, ind_levels, insn);
     else if ((((((op0)->u.fld[0]).rtuint)) < 7 || ((((op0)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op0)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((op0)->u.fld[0]).rtuint))] < 7))
       find_reloads_address_1 (mode, orig_op1, 0, &(((x)->u.fld[1]).rtx1), opnum,
          type, ind_levels, insn);
     else
       {
  find_reloads_address_1 (mode, orig_op0, 1, &(((x)->u.fld[0]).rtx1), opnum,
     type, ind_levels, insn);
  find_reloads_address_1 (mode, orig_op1, 0, &(((x)->u.fld[1]).rtx1), opnum,
     type, ind_levels, insn);
       }
   }
 else if (code0 == REG)
   {
     find_reloads_address_1 (mode, orig_op0, 1, &(((x)->u.fld[0]).rtx1), opnum,
        type, ind_levels, insn);
     find_reloads_address_1 (mode, orig_op1, 0, &(((x)->u.fld[1]).rtx1), opnum,
        type, ind_levels, insn);
   }
 else if (code1 == REG)
   {
     find_reloads_address_1 (mode, orig_op1, 1, &(((x)->u.fld[1]).rtx1), opnum,
        type, ind_levels, insn);
     find_reloads_address_1 (mode, orig_op0, 0, &(((x)->u.fld[0]).rtx1), opnum,
        type, ind_levels, insn);
   }
      }
      return 0;
    case POST_MODIFY:
    case PRE_MODIFY:
      {
 rtx op0 = (((x)->u.fld[0]).rtx1);
 rtx op1 = (((x)->u.fld[1]).rtx1);
 if (((enum rtx_code) (op1)->code) != PLUS && ((enum rtx_code) (op1)->code) != MINUS)
   return 0;
 if (op0 != (((op1)->u.fld[0]).rtx1))
   abort ();
 if ((((enum rtx_code) ((((op1)->u.fld[1]).rtx1))->code) == REG))
   if (!((((((((op1)->u.fld[1]).rtx1))->u.fld[0]).rtuint)) < 7 || (((((((op1)->u.fld[1]).rtx1))->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (((((((op1)->u.fld[1]).rtx1))->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[(((((((op1)->u.fld[1]).rtx1))->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[(((((((op1)->u.fld[1]).rtx1))->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[(((((((op1)->u.fld[1]).rtx1))->u.fld[0]).rtuint))] < 7))
     find_reloads_address_1 (mode, (((op1)->u.fld[1]).rtx1), 1, &(((op1)->u.fld[1]).rtx1),
        opnum, type, ind_levels, insn);
 if ((((enum rtx_code) ((((op1)->u.fld[0]).rtx1))->code) == REG))
   {
     int regno = ((((((op1)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
     int reloadnum;
     if (regno >= 53
  && reg_equiv_constant[regno] != 0)
       abort ();
     if (reg_equiv_memory_loc[regno] != 0
  && (reg_equiv_address[regno] != 0
      || num_not_at_initial_offset))
       {
  rtx tem = make_memloc ((((x)->u.fld[0]).rtx1), regno);
  if (reg_equiv_address[regno]
      || ! rtx_equal_p (tem, reg_equiv_mem[regno]))
    {
      find_reloads_address (((enum machine_mode) (tem)->mode), &tem, (((tem)->u.fld[0]).rtx1),
       &(((tem)->u.fld[0]).rtx1), opnum,
       RELOAD_OTHER,
       ind_levels, insn);
      reloadnum = push_reload (tem, tem, &(((x)->u.fld[0]).rtx1),
          &(((op1)->u.fld[0]).rtx1),
          GENERAL_REGS,
          ((enum machine_mode) (x)->mode), ((enum machine_mode) (x)->mode), 0,
          0, opnum, RELOAD_OTHER);
      update_auto_inc_notes (this_insn, regno, reloadnum);
      return 0;
    }
       }
     if (reg_renumber[regno] >= 0)
       regno = reg_renumber[regno];
     if (!((regno) <= 7 || (regno) == 16 || (regno) == 20 || (regno >= (((((20 + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[(regno)] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[(regno)] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[(regno)] <= 7))
       {
  reloadnum = push_reload ((((op1)->u.fld[0]).rtx1), (((x)->u.fld[0]).rtx1),
      &(((op1)->u.fld[0]).rtx1), &(((x)->u.fld[0]).rtx1),
      GENERAL_REGS,
      ((enum machine_mode) (x)->mode), ((enum machine_mode) (x)->mode), 0, 0,
      opnum, RELOAD_OTHER);
  update_auto_inc_notes (this_insn, regno, reloadnum);
  return 0;
       }
   }
 else
   abort ();
      }
      return 0;
    case POST_INC:
    case POST_DEC:
    case PRE_INC:
    case PRE_DEC:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 {
   int regno = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
   int value1 = 0;
   rtx x_orig = x;
   if (regno >= 53
       && reg_equiv_constant[regno] != 0)
     abort ();
   if (reg_equiv_memory_loc[regno] != 0
       && (reg_equiv_address[regno] != 0 || num_not_at_initial_offset))
     {
       rtx tem = make_memloc ((((x)->u.fld[0]).rtx1), regno);
       if (reg_equiv_address[regno]
    || ! rtx_equal_p (tem, reg_equiv_mem[regno]))
  {
    find_reloads_address (((enum machine_mode) (tem)->mode), &tem, (((tem)->u.fld[0]).rtx1),
     &(((tem)->u.fld[0]).rtx1), opnum, type,
     ind_levels, insn);
    x = gen_rtx_fmt_e (((enum rtx_code) (x)->code), ((enum machine_mode) (x)->mode), tem);
  }
     }
   if (reg_renumber[regno] >= 0)
     regno = reg_renumber[regno];
   if ((regno >= 53
        || !(context ? ((regno) < 7 || (regno >= (((((20 + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[(regno)] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[(regno)] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[(regno)] < 7)
      : ((regno) <= 7 || (regno) == 16 || (regno) == 20 || (regno >= (((((20 + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[(regno)] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[(regno)] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[(regno)] <= 7))))
     {
       int reloadnum;
       rtx equiv = ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM)
      ? (((x)->u.fld[0]).rtx1)
      : reg_equiv_mem[regno]);
       int icode = (int) (optab_table[OTI_add])->handlers[(int) (0 ? DImode : SImode)].insn_code;
       if (insn && ((enum rtx_code) (insn)->code) == INSN && equiv
    && memory_operand (equiv, ((enum machine_mode) (equiv)->mode))
    && ! (icode != CODE_FOR_nothing
   && ((*insn_data[icode].operand[0].predicate)
       (equiv, (0 ? DImode : SImode)))
   && ((*insn_data[icode].operand[1].predicate)
       (equiv, (0 ? DImode : SImode)))))
  {
    loc = &(((x_orig)->u.fld[0]).rtx1);
    x = (((x)->u.fld[0]).rtx1);
    reloadnum
      = push_reload (x, x, loc, loc,
       (context ? INDEX_REGS :
        GENERAL_REGS),
       ((enum machine_mode) (x)->mode), ((enum machine_mode) (x)->mode), 0, 0,
       opnum, RELOAD_OTHER);
  }
       else
  {
    reloadnum
      = push_reload (x, (rtx) 0, loc, (rtx*) 0,
       (context ? INDEX_REGS :
        GENERAL_REGS),
       ((enum machine_mode) (x)->mode), ((enum machine_mode) (x)->mode), 0, 0,
       opnum, type);
    rld[reloadnum].inc
      = find_inc_amount ((((this_insn)->u.fld[5]).rtx1), (((x_orig)->u.fld[0]).rtx1));
    value1 = 1;
  }
       update_auto_inc_notes (this_insn, ((((((x_orig)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
         reloadnum);
     }
   return value1;
 }
      else if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM))
 {
   rtx tem = (((x)->u.fld[0]).rtx1);
   rtx link;
   int reloadnum;
   find_reloads_address (((enum machine_mode) (x)->mode), &(((x)->u.fld[0]).rtx1),
    ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), &((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
    opnum, type, ind_levels, insn);
   reloadnum = push_reload (x, (rtx) 0, loc, (rtx*) 0,
       (context ? INDEX_REGS :
        GENERAL_REGS),
       ((enum machine_mode) (x)->mode), VOIDmode, 0, 0, opnum, type);
   rld[reloadnum].inc
     = find_inc_amount ((((this_insn)->u.fld[5]).rtx1), (((x)->u.fld[0]).rtx1));
   link = 0;
   if (link != 0)
     push_replacement (&(((link)->u.fld[0]).rtx1), reloadnum, VOIDmode);
   return 1;
 }
      return 0;
    case MEM:
      find_reloads_address (((enum machine_mode) (x)->mode), loc, (((x)->u.fld[0]).rtx1), &(((x)->u.fld[0]).rtx1),
       opnum, ((type) == RELOAD_FOR_INPUT_ADDRESS ? RELOAD_FOR_INPADDR_ADDRESS : ((type) == RELOAD_FOR_OUTPUT_ADDRESS ? RELOAD_FOR_OUTADDR_ADDRESS : (type))), ind_levels, insn);
      push_reload (*loc, (rtx) 0, loc, (rtx*) 0,
     (context ? INDEX_REGS : GENERAL_REGS),
     ((enum machine_mode) (x)->mode), VOIDmode, 0, 0, opnum, type);
      return 1;
    case REG:
      {
 int regno = (((x)->u.fld[0]).rtuint);
 if (reg_equiv_constant[regno] != 0)
   {
     find_reloads_address_part (reg_equiv_constant[regno], loc,
           (context ? INDEX_REGS :
     GENERAL_REGS),
           ((enum machine_mode) (x)->mode), opnum, type, ind_levels);
     return 1;
   }
 if (reg_equiv_memory_loc[regno]
     && (reg_equiv_address[regno] != 0 || num_not_at_initial_offset))
   {
     rtx tem = make_memloc (x, regno);
     if (reg_equiv_address[regno] != 0
  || ! rtx_equal_p (tem, reg_equiv_mem[regno]))
       {
  x = tem;
  find_reloads_address (((enum machine_mode) (x)->mode), &x, (((x)->u.fld[0]).rtx1),
          &(((x)->u.fld[0]).rtx1), opnum, ((type) == RELOAD_FOR_INPUT_ADDRESS ? RELOAD_FOR_INPADDR_ADDRESS : ((type) == RELOAD_FOR_OUTPUT_ADDRESS ? RELOAD_FOR_OUTADDR_ADDRESS : (type))),
          ind_levels, insn);
       }
   }
 if (reg_renumber[regno] >= 0)
   regno = reg_renumber[regno];
 if ((regno >= 53
      || !(context ? ((regno) < 7 || (regno >= (((((20 + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[(regno)] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[(regno)] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[(regno)] < 7)
    : ((regno) <= 7 || (regno) == 16 || (regno) == 20 || (regno >= (((((20 + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[(regno)] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[(regno)] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[(regno)] <= 7))))
   {
     push_reload (x, (rtx) 0, loc, (rtx*) 0,
    (context ? INDEX_REGS : GENERAL_REGS),
    ((enum machine_mode) (x)->mode), VOIDmode, 0, 0, opnum, type);
     return 1;
   }
 if (regno_clobbered_p (regno, this_insn, ((enum machine_mode) (x)->mode), 0))
   {
     push_reload (x, (rtx) 0, loc, (rtx*) 0,
    (context ? INDEX_REGS : GENERAL_REGS),
    ((enum machine_mode) (x)->mode), VOIDmode, 0, 0, opnum, type);
     return 1;
   }
      }
      return 0;
    case SUBREG:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 {
   if (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
     {
       int regno = subreg_regno (x);
       if (! (context ? ((regno) < 7 || (regno >= (((((20 + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[(regno)] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[(regno)] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[(regno)] < 7)
       : ((regno) <= 7 || (regno) == 16 || (regno) == 20 || (regno >= (((((20 + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[(regno)] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[(regno)] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[(regno)] <= 7)))
  {
    push_reload (x, (rtx) 0, loc, (rtx*) 0,
          (context ? INDEX_REGS :
    GENERAL_REGS),
          ((enum machine_mode) (x)->mode), VOIDmode, 0, 0, opnum, type);
    return 1;
  }
     }
   else
     {
       enum reg_class class = (context ? INDEX_REGS
          : GENERAL_REGS);
       if ((unsigned) (!reg_classes_intersect_p ((class), GENERAL_REGS) ? ((mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_COMPLEX_INT || mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((((((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)) == XFmode ? 12 : ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]))) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4)))
    > reg_class_size[class])
  {
    x = find_reloads_subreg_address (x, 0, opnum, type,
         ind_levels, insn);
    push_reload (x, (rtx) 0, loc, (rtx*) 0, class,
          ((enum machine_mode) (x)->mode), VOIDmode, 0, 0, opnum, type);
    return 1;
  }
     }
 }
      break;
    default:
      break;
    }
  {
    const char *fmt = (rtx_format[(int) (code)]);
    int i;
    for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
      {
 if (fmt[i] == 'e')
   find_reloads_address_1 (mode, (((x)->u.fld[i]).rtx1), context, &(((x)->u.fld[i]).rtx1),
      opnum, type, ind_levels, insn);
      }
  }
  return 0;
}
static void
find_reloads_address_part (rtx x, rtx *loc, enum reg_class class,
      enum machine_mode mode, int opnum,
      enum reload_type type, int ind_levels)
{
  if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR)
      && (! legitimate_constant_p (x)
   || ix86_preferred_reload_class ((x), (class)) == NO_REGS))
    {
      rtx tem;
      tem = x = force_const_mem (mode, x);
      find_reloads_address (mode, &tem, (((tem)->u.fld[0]).rtx1), &(((tem)->u.fld[0]).rtx1),
       opnum, type, ind_levels, 0);
    }
  else if (((enum rtx_code) (x)->code) == PLUS
    && ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_VECTOR)
    && (! legitimate_constant_p ((((x)->u.fld[1]).rtx1))
        || ix86_preferred_reload_class (((((x)->u.fld[1]).rtx1)), (class)) == NO_REGS))
    {
      rtx tem;
      tem = force_const_mem (((enum machine_mode) (x)->mode), (((x)->u.fld[1]).rtx1));
      x = gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (x)->mode)), ((((x)->u.fld[0]).rtx1)), (tem));
      find_reloads_address (mode, &tem, (((tem)->u.fld[0]).rtx1), &(((tem)->u.fld[0]).rtx1),
       opnum, type, ind_levels, 0);
    }
  push_reload (x, (rtx) 0, loc, (rtx*) 0, class,
        mode, VOIDmode, 0, 0, opnum, type);
}
static rtx
find_reloads_subreg_address (rtx x, int force_replace, int opnum,
        enum reload_type type, int ind_levels, rtx insn)
{
  int regno = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
  if (reg_equiv_memory_loc[regno])
    {
      if (! force_replace
   && (reg_equiv_address[regno]
       || ! offsettable_memref_p (reg_equiv_mem[regno])))
 force_replace = 1;
      if (force_replace || num_not_at_initial_offset)
 {
   rtx tem = make_memloc ((((x)->u.fld[0]).rtx1), regno);
   if (force_replace
       || ! rtx_equal_p (tem, reg_equiv_mem[regno]))
     {
       unsigned outer_size = ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]);
       unsigned inner_size = ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]);
       int offset;
       if (0 && outer_size > inner_size)
  offset = inner_size - outer_size;
       else
  offset = (((x)->u.fld[1]).rtuint);
       (((tem)->u.fld[0]).rtx1) = plus_constant_wide (((((tem)->u.fld[0]).rtx1)), (long) (offset));
       ((tem)->mode = (((enum machine_mode) (x)->mode)));
       if (outer_size > inner_size && 0)
  {
    rtx base;
    base = (((tem)->u.fld[0]).rtx1);
    if (((enum rtx_code) (base)->code) == PLUS)
      {
        if (((enum rtx_code) ((((base)->u.fld[1]).rtx1))->code) == CONST_INT
     && (((((base)->u.fld[1]).rtx1))->u.hwint[0]) % outer_size != 0)
   return x;
        base = (((base)->u.fld[0]).rtx1);
      }
    if (!(((enum rtx_code) (base)->code) == REG)
        || ((cfun->emit->regno_pointer_align[(((base)->u.fld[0]).rtuint)])
     < outer_size * 8))
      return x;
  }
       find_reloads_address (((enum machine_mode) (tem)->mode), &tem, (((tem)->u.fld[0]).rtx1),
        &(((tem)->u.fld[0]).rtx1), opnum, ((type) == RELOAD_FOR_INPUT_ADDRESS ? RELOAD_FOR_INPADDR_ADDRESS : ((type) == RELOAD_FOR_OUTPUT_ADDRESS ? RELOAD_FOR_OUTADDR_ADDRESS : (type))),
        ind_levels, insn);
       if (replace_reloads && recog_data.operand[opnum] != x)
  ((emit_insn_before (gen_rtx_fmt_e (USE, (VOIDmode), ((((x)->u.fld[0]).rtx1))), insn))->mode = (QImode))
                       ;
       x = tem;
     }
 }
    }
  return x;
}
void
subst_reloads (rtx insn)
{
  int i;
  for (i = 0; i < n_replacements; i++)
    {
      struct replacement *r = &replacements[i];
      rtx reloadreg = rld[r->what].reg_rtx;
      if (reloadreg)
 {
   if (((enum rtx_code) (*r->where)->code) == LABEL_REF
       && ((enum rtx_code) (insn)->code) == JUMP_INSN)
     (((insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ue (INSN_LIST, (REG_LABEL), ((((*r->where)->u.fld[0]).rtx1)), ((((insn)->u.fld[8]).rtx1)))
                         ;
   if (((enum machine_mode) (reloadreg)->mode) != r->mode && r->mode != VOIDmode)
     reloadreg = reload_adjust_reg_for_mode (reloadreg, r->mode);
   if (r->subreg_loc != 0 && ((enum rtx_code) (reloadreg)->code) == SUBREG)
     {
       if (((enum machine_mode) (*r->subreg_loc)->mode)
    == ((enum machine_mode) ((((reloadreg)->u.fld[0]).rtx1))->mode))
  *r->subreg_loc = (((reloadreg)->u.fld[0]).rtx1);
       else
  {
    int final_offset =
      (((*r->subreg_loc)->u.fld[1]).rtuint) + (((reloadreg)->u.fld[1]).rtuint);
    final_offset = (final_offset /
      ((unsigned short) mode_size[((enum machine_mode) (*r->subreg_loc)->mode)]));
    final_offset = (final_offset *
      ((unsigned short) mode_size[((enum machine_mode) (*r->subreg_loc)->mode)]));
    *r->where = (((reloadreg)->u.fld[0]).rtx1);
    (((*r->subreg_loc)->u.fld[1]).rtuint) = final_offset;
  }
     }
   else
     *r->where = reloadreg;
 }
      else if (! rld[r->what].optional)
 abort ();
    }
}
void
copy_replacements (rtx x, rtx y)
{
  if (((enum rtx_code) (x)->code) == SUBREG)
    abort ();
  copy_replacements_1 (&x, &y, n_replacements);
}
static void
copy_replacements_1 (rtx *px, rtx *py, int orig_replacements)
{
  int i, j;
  rtx x, y;
  struct replacement *r;
  enum rtx_code code;
  const char *fmt;
  for (j = 0; j < orig_replacements; j++)
    {
      if (replacements[j].subreg_loc == px)
 {
   r = &replacements[n_replacements++];
   r->where = replacements[j].where;
   r->subreg_loc = py;
   r->what = replacements[j].what;
   r->mode = replacements[j].mode;
 }
      else if (replacements[j].where == px)
 {
   r = &replacements[n_replacements++];
   r->where = py;
   r->subreg_loc = 0;
   r->what = replacements[j].what;
   r->mode = replacements[j].mode;
 }
    }
  x = *px;
  y = *py;
  code = ((enum rtx_code) (x)->code);
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 copy_replacements_1 (&(((x)->u.fld[i]).rtx1), &(((y)->u.fld[i]).rtx1), orig_replacements);
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem); --j >= 0; )
   copy_replacements_1 (&(((((x)->u.fld[i]).rtvec1))->elem[j]), &(((((y)->u.fld[i]).rtvec1))->elem[j]),
          orig_replacements);
    }
}
void
move_replacements (rtx *x, rtx *y)
{
  int i;
  for (i = 0; i < n_replacements; i++)
    if (replacements[i].subreg_loc == x)
      replacements[i].subreg_loc = y;
    else if (replacements[i].where == x)
      {
 replacements[i].where = y;
 replacements[i].subreg_loc = 0;
      }
}
rtx
find_replacement (rtx *loc)
{
  struct replacement *r;
  for (r = &replacements[0]; r < &replacements[n_replacements]; r++)
    {
      rtx reloadreg = rld[r->what].reg_rtx;
      if (reloadreg && r->where == loc)
 {
   if (r->mode != VOIDmode && ((enum machine_mode) (reloadreg)->mode) != r->mode)
     reloadreg = gen_rtx_REG (r->mode, (((reloadreg)->u.fld[0]).rtuint));
   return reloadreg;
 }
      else if (reloadreg && r->subreg_loc == loc)
 {
   if ((((enum rtx_code) (reloadreg)->code) == REG))
     return gen_rtx_REG (((enum machine_mode) (*loc)->mode),
    ((((reloadreg)->u.fld[0]).rtuint) +
     subreg_regno_offset (((((((*loc)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
            ((enum machine_mode) ((((*loc)->u.fld[0]).rtx1))->mode),
            (((*loc)->u.fld[1]).rtuint),
            ((enum machine_mode) (*loc)->mode))));
   else if (((enum machine_mode) (reloadreg)->mode) == ((enum machine_mode) (*loc)->mode))
     return reloadreg;
   else
     {
       int final_offset = (((reloadreg)->u.fld[1]).rtuint) + (((*loc)->u.fld[1]).rtuint);
       final_offset = (final_offset / ((unsigned short) mode_size[((enum machine_mode) (*loc)->mode)]));
       final_offset = (final_offset * ((unsigned short) mode_size[((enum machine_mode) (*loc)->mode)]));
       return gen_rtx_SUBREG (((enum machine_mode) (*loc)->mode), (((reloadreg)->u.fld[0]).rtx1),
         final_offset);
     }
 }
    }
  if (((enum rtx_code) (*loc)->code) == PLUS || ((enum rtx_code) (*loc)->code) == MINUS
      || ((enum rtx_code) (*loc)->code) == MULT)
    {
      rtx x = find_replacement (&(((*loc)->u.fld[0]).rtx1));
      rtx y = find_replacement (&(((*loc)->u.fld[1]).rtx1));
      if (x != (((*loc)->u.fld[0]).rtx1) || y != (((*loc)->u.fld[1]).rtx1))
 return gen_rtx_fmt_ee (((enum rtx_code) (*loc)->code), ((enum machine_mode) (*loc)->mode), x, y);
    }
  return *loc;
}
int
refers_to_regno_for_reload_p (unsigned int regno, unsigned int endregno,
         rtx x, rtx *loc)
{
  int i;
  unsigned int r;
  enum rtx_code code;
  const char *fmt;
  if (x == 0)
    return 0;
 repeat:
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
      r = (((x)->u.fld[0]).rtuint);
      if (r >= 53)
 {
   if (reg_equiv_memory_loc[r])
     return refers_to_regno_for_reload_p (regno, endregno,
       reg_equiv_memory_loc[r],
       (rtx*) 0);
   if (reg_equiv_constant[r])
     return 0;
   abort ();
 }
      return (endregno > r
       && regno < r + (r < 53
         ? hard_regno_nregs[r][((enum machine_mode) (x)->mode)]
         : 1));
    case SUBREG:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
 {
   unsigned int inner_regno = subreg_regno (x);
   unsigned int inner_endregno
     = inner_regno + (inner_regno < 53
        ? hard_regno_nregs[inner_regno][((enum machine_mode) (x)->mode)] : 1);
   return endregno > inner_regno && regno < inner_endregno;
 }
      break;
    case CLOBBER:
    case SET:
      if (&(((x)->u.fld[0]).rtx1) != loc
   && ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
        && loc != &((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1)
        && (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG)
        && (((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53
        && refers_to_regno_for_reload_p (regno, endregno,
      ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
      loc))
       || ((!(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
     || earlyclobber_operand_p ((((x)->u.fld[0]).rtx1)))
    && refers_to_regno_for_reload_p (regno, endregno,
         (((x)->u.fld[0]).rtx1), loc))))
 return 1;
      if (code == CLOBBER || loc == &(((x)->u.fld[1]).rtx1))
 return 0;
      x = (((x)->u.fld[1]).rtx1);
      goto repeat;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e' && loc != &(((x)->u.fld[i]).rtx1))
 {
   if (i == 0)
     {
       x = (((x)->u.fld[0]).rtx1);
       goto repeat;
     }
   else
     if (refers_to_regno_for_reload_p (regno, endregno,
           (((x)->u.fld[i]).rtx1), loc))
       return 1;
 }
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     if (loc != &(((((x)->u.fld[i]).rtvec1))->elem[j])
  && refers_to_regno_for_reload_p (regno, endregno,
       (((((x)->u.fld[i]).rtvec1))->elem[j]), loc))
       return 1;
 }
    }
  return 0;
}
int
reg_overlap_mentioned_for_reload_p (rtx x, rtx in)
{
  int regno, endregno;
  if (((enum rtx_code) (x)->code) == STRICT_LOW_PART
      || (rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_AUTOINC)
    x = (((x)->u.fld[0]).rtx1);
  if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR) || ((rtx_class[(int) (((enum rtx_code) (in)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (in)->code) == CONST_VECTOR))
    return 0;
  else if (((enum rtx_code) (x)->code) == SUBREG)
    {
      regno = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      if (regno < 53)
 regno += subreg_regno_offset (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint),
          ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
          (((x)->u.fld[1]).rtuint),
          ((enum machine_mode) (x)->mode));
    }
  else if ((((enum rtx_code) (x)->code) == REG))
    {
      regno = (((x)->u.fld[0]).rtuint);
      if (regno >= 53)
 {
   if (reg_equiv_memory_loc[regno])
     return refers_to_mem_for_reload_p (in);
   else if (reg_equiv_constant[regno])
     return 0;
   abort ();
 }
    }
  else if ((((enum rtx_code) (x)->code) == MEM))
    return refers_to_mem_for_reload_p (in);
  else if (((enum rtx_code) (x)->code) == SCRATCH || ((enum rtx_code) (x)->code) == PC
    || ((enum rtx_code) (x)->code) == CC0)
    return reg_mentioned_p (x, in);
  else if (((enum rtx_code) (x)->code) == PLUS)
    {
      while ((((enum rtx_code) (in)->code) == MEM))
 in = (((in)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (in)->code) == REG))
 return 0;
      else if (((enum rtx_code) (in)->code) == PLUS)
 return (reg_overlap_mentioned_for_reload_p (x, (((in)->u.fld[0]).rtx1))
  || reg_overlap_mentioned_for_reload_p (x, (((in)->u.fld[1]).rtx1)));
      else return (reg_overlap_mentioned_for_reload_p ((((x)->u.fld[0]).rtx1), in)
     || reg_overlap_mentioned_for_reload_p ((((x)->u.fld[1]).rtx1), in));
    }
  else
    abort ();
  endregno = regno + (regno < 53
        ? hard_regno_nregs[regno][((enum machine_mode) (x)->mode)] : 1);
  return refers_to_regno_for_reload_p (regno, endregno, in, (rtx*) 0);
}
int
refers_to_mem_for_reload_p (rtx x)
{
  const char *fmt;
  int i;
  if ((((enum rtx_code) (x)->code) == MEM))
    return 1;
  if ((((enum rtx_code) (x)->code) == REG))
    return ((((x)->u.fld[0]).rtuint) >= 53
     && reg_equiv_memory_loc[(((x)->u.fld[0]).rtuint)]);
  fmt = (rtx_format[(int) (((enum rtx_code) (x)->code))]);
  for (i = (rtx_length[(int) (((enum rtx_code) (x)->code))]) - 1; i >= 0; i--)
    if (fmt[i] == 'e'
 && ((((enum rtx_code) ((((x)->u.fld[i]).rtx1))->code) == MEM)
     || refers_to_mem_for_reload_p ((((x)->u.fld[i]).rtx1))))
      return 1;
  return 0;
}
rtx
find_equiv_reg (rtx goal, rtx insn, enum reg_class class, int other,
  short *reload_reg_p, int goalreg, enum machine_mode mode)
{
  rtx p = insn;
  rtx goaltry, valtry, value1, where;
  rtx pat;
  int regno = -1;
  int value1no;
  int goal_mem = 0;
  int goal_const = 0;
  int goal_mem_addr_varies = 0;
  int need_stable_sp = 0;
  int nregs;
  int value1nregs;
  int num = 0;
  if (goal == 0)
    regno = goalreg;
  else if ((((enum rtx_code) (goal)->code) == REG))
    regno = (((goal)->u.fld[0]).rtuint);
  else if ((((enum rtx_code) (goal)->code) == MEM))
    {
      enum rtx_code code = ((enum rtx_code) ((((goal)->u.fld[0]).rtx1))->code);
      if ((((goal))->volatil))
 return 0;
      if (flag_float_store && mode_class[((enum machine_mode) (goal)->mode)] == MODE_FLOAT)
 return 0;
      switch (code)
 {
 case POST_INC:
 case PRE_INC:
 case POST_DEC:
 case PRE_DEC:
 case POST_MODIFY:
 case PRE_MODIFY:
   return 0;
 default:
   break;
 }
      goal_mem = 1;
    }
  else if (((rtx_class[(int) (((enum rtx_code) (goal)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (goal)->code) == CONST_VECTOR))
    goal_const = 1;
  else if (((enum rtx_code) (goal)->code) == PLUS
    && (((goal)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER])
    && ((rtx_class[(int) (((enum rtx_code) ((((goal)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((goal)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
    goal_const = need_stable_sp = 1;
  else if (((enum rtx_code) (goal)->code) == PLUS
    && (((goal)->u.fld[0]).rtx1) == (global_rtl[GR_FRAME_POINTER])
    && ((rtx_class[(int) (((enum rtx_code) ((((goal)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((goal)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
    goal_const = 1;
  else
    return 0;
  num = 0;
  while (1)
    {
      p = (((p)->u.fld[1]).rtx1);
      num++;
      if (p == 0 || ((enum rtx_code) (p)->code) == CODE_LABEL
   || num > (compiler_params[(int) PARAM_MAX_RELOAD_SEARCH_INSNS].value1))
 return 0;
      if (((enum rtx_code) (p)->code) == INSN
   && (! (reload_reg_p != 0
   && reload_reg_p != (short *) (long) 1)
       || (((p)->u.fld[0]).rtint) < reload_first_uid))
 {
   rtx tem;
   pat = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0);
   if (pat != 0
       && ((regno >= 0
     && true_regnum ((((pat)->u.fld[1]).rtx1)) == regno
     && (valueno = true_regnum (valtry = (((pat)->u.fld[0]).rtx1))) >= 0)
    ||
    (regno >= 0
     && true_regnum ((((pat)->u.fld[0]).rtx1)) == regno
     && (valueno = true_regnum (valtry = (((pat)->u.fld[1]).rtx1))) >= 0)
    ||
    (goal_const && rtx_equal_p ((((pat)->u.fld[1]).rtx1), goal)
     && !reg_overlap_mentioned_for_reload_p ((((pat)->u.fld[0]).rtx1), goal)
     && (valueno = true_regnum (valtry = (((pat)->u.fld[0]).rtx1))) >= 0)
    || (goal_mem
        && (valueno = true_regnum (valtry = (((pat)->u.fld[0]).rtx1))) >= 0
        && rtx_renumbered_equal_p (goal, (((pat)->u.fld[1]).rtx1)))
    || (goal_mem
        && (valueno = true_regnum (valtry = (((pat)->u.fld[1]).rtx1))) >= 0
        && rtx_renumbered_equal_p (goal, (((pat)->u.fld[0]).rtx1)))
    || (goal_const && (((p)->u.fld[8]).rtx1) != 0
        && (tem = find_reg_note (p, REG_EQUIV, (rtx) 0))
        && ((rtx_equal_p ((((tem)->u.fld[0]).rtx1), goal)
      && (valueno
          = true_regnum (valtry = (((pat)->u.fld[0]).rtx1))) >= 0)
     || ((((enum rtx_code) ((((pat)->u.fld[0]).rtx1))->code) == REG)
         && ((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == CONST_DOUBLE
         && (mode_class[((enum machine_mode) ((((tem)->u.fld[0]).rtx1))->mode)]
      == MODE_FLOAT)
         && ((enum rtx_code) (goal)->code) == CONST_INT
         && 0 != (goaltry
           = operand_subword ((((tem)->u.fld[0]).rtx1), 0, 0,
         VOIDmode))
         && rtx_equal_p (goal, goaltry)
         && (valtry
      = operand_subword ((((pat)->u.fld[0]).rtx1), 0, 0,
           VOIDmode))
         && (valueno = true_regnum (valtry)) >= 0)))
    || (goal_const && (tem = find_reg_note (p, REG_EQUIV,
         (rtx) 0))
        && (((enum rtx_code) ((((pat)->u.fld[0]).rtx1))->code) == REG)
        && ((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == CONST_DOUBLE
        && (mode_class[((enum machine_mode) ((((tem)->u.fld[0]).rtx1))->mode)]
     == MODE_FLOAT)
        && ((enum rtx_code) (goal)->code) == CONST_INT
        && 0 != (goaltry = operand_subword ((((tem)->u.fld[0]).rtx1), 1, 0,
         VOIDmode))
        && rtx_equal_p (goal, goaltry)
        && (valtry
     = operand_subword ((((pat)->u.fld[0]).rtx1), 1, 0, VOIDmode))
        && (valueno = true_regnum (valtry)) >= 0)))
     {
       if (other >= 0)
  {
    if (valueno != other)
      continue;
  }
       else if ((unsigned) valueno >= 53)
  continue;
       else
  {
    int i;
    for (i = hard_regno_nregs[valueno][mode] - 1; i >= 0; i--)
      if (! (!!((reg_class_contents[(int) class])[(valueno + i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((valueno + i) % ((unsigned) (8 * 4))))))
                      )
        break;
    if (i >= 0)
      continue;
  }
       value1 = valtry;
       where = p;
       break;
     }
 }
    }
  if ((((where)->u.fld[8]).rtx1) != 0 && find_reg_note (where, REG_UNUSED, value1))
    return 0;
  if (valueno == 7 || regno == 7
      || (goal_mem && reg_overlap_mentioned_for_reload_p ((global_rtl[GR_STACK_POINTER]),
         goal)))
    need_stable_sp = 1;
  if (((enum machine_mode) (value1)->mode) != mode)
    return 0;
  if (goal_mem && value1 == ((((((((enum rtx_code) (where)->code) == INSN) || (((enum rtx_code) (where)->code) == JUMP_INSN) || (((enum rtx_code) (where)->code) == CALL_INSN)) ? (((enum rtx_code) ((((where)->u.fld[5]).rtx1))->code) == SET ? (((where)->u.fld[5]).rtx1) : single_set_2 (where, (((where)->u.fld[5]).rtx1))) : (rtx) 0))->u.fld[0]).rtx1)
      && refers_to_regno_for_reload_p (valueno,
           (valueno
     + hard_regno_nregs[valueno][mode]),
           goal, (rtx*) 0))
    return 0;
  if (regno >= 0 && regno < 53)
    nregs = hard_regno_nregs[regno][mode];
  else
    nregs = 1;
  valuenregs = hard_regno_nregs[valueno][mode];
  if (!goal_mem && !goal_const
      && regno + nregs > valueno && regno < valueno + valuenregs)
    return 0;
  if (reload_reg_p != 0 && reload_reg_p != (short *) (long) 1)
    {
      int i;
      for (i = 0; i < valuenregs; ++i)
 if (reload_reg_p[valueno + i] >= 0)
   return 0;
    }
  if (reload_reg_p != 0)
    {
      int i;
      for (i = 0; i < n_reloads; i++)
 if (rld[i].reg_rtx != 0 && rld[i].in)
   {
     int regno1 = (((rld[i].reg_rtx)->u.fld[0]).rtuint);
     int nregs1 = hard_regno_nregs[regno1]
      [((enum machine_mode) (rld[i].reg_rtx)->mode)];
     if (regno1 < valueno + valuenregs
  && regno1 + nregs1 > valueno)
       return 0;
   }
    }
  if (goal_mem)
    goal_mem_addr_varies = !constant_address_p ((((goal)->u.fld[0]).rtx1));
  p = insn;
  while (1)
    {
      p = (((p)->u.fld[1]).rtx1);
      if (p == where)
 return value1;
      if (((enum rtx_code) (p)->code) == CALL_INSN)
 {
   int i;
   if (goal_mem || need_stable_sp)
     return 0;
   if (regno >= 0 && regno < 53)
     for (i = 0; i < nregs; ++i)
       if (call_used_regs[regno + i])
  return 0;
   if (valueno >= 0 && valueno < 53)
     for (i = 0; i < valuenregs; ++i)
       if (call_used_regs[valueno + i])
  return 0;
 }
      if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
 {
   pat = (((p)->u.fld[5]).rtx1);
   if (volatile_insn_p (pat))
     return 0;
   if (((enum rtx_code) (pat)->code) == COND_EXEC)
     pat = (((pat)->u.fld[1]).rtx1);
   if (((enum rtx_code) (pat)->code) == SET || ((enum rtx_code) (pat)->code) == CLOBBER)
     {
       rtx dest = (((pat)->u.fld[0]).rtx1);
       while (((enum rtx_code) (dest)->code) == SUBREG
       || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT
       || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT
       || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
  dest = (((dest)->u.fld[0]).rtx1);
       if ((((enum rtx_code) (dest)->code) == REG))
  {
    int xregno = (((dest)->u.fld[0]).rtuint);
    int xnregs;
    if ((((dest)->u.fld[0]).rtuint) < 53)
      xnregs = hard_regno_nregs[xregno][((enum machine_mode) (dest)->mode)];
    else
      xnregs = 1;
    if (xregno < regno + nregs && xregno + xnregs > regno)
      return 0;
    if (xregno < valueno + valuenregs
        && xregno + xnregs > valueno)
      return 0;
    if (goal_mem_addr_varies
        && reg_overlap_mentioned_for_reload_p (dest, goal))
      return 0;
    if (xregno == 7 && need_stable_sp)
      return 0;
  }
       else if (goal_mem && (((enum rtx_code) (dest)->code) == MEM)
         && ! push_operand (dest, ((enum machine_mode) (dest)->mode)))
  return 0;
       else if ((((enum rtx_code) (dest)->code) == MEM) && regno >= 53
         && reg_equiv_memory_loc[regno] != 0)
  return 0;
       else if (need_stable_sp && push_operand (dest, ((enum machine_mode) (dest)->mode)))
  return 0;
     }
   else if (((enum rtx_code) (pat)->code) == PARALLEL)
     {
       int i;
       for (i = (((((pat)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
  {
    rtx v1 = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
    if (((enum rtx_code) (v1)->code) == COND_EXEC)
      v1 = (((v1)->u.fld[1]).rtx1);
    if (((enum rtx_code) (v1)->code) == SET || ((enum rtx_code) (v1)->code) == CLOBBER)
      {
        rtx dest = (((v1)->u.fld[0]).rtx1);
        while (((enum rtx_code) (dest)->code) == SUBREG
        || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT
        || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT
        || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
   dest = (((dest)->u.fld[0]).rtx1);
        if ((((enum rtx_code) (dest)->code) == REG))
   {
     int xregno = (((dest)->u.fld[0]).rtuint);
     int xnregs;
     if ((((dest)->u.fld[0]).rtuint) < 53)
       xnregs = hard_regno_nregs[xregno][((enum machine_mode) (dest)->mode)];
     else
       xnregs = 1;
     if (xregno < regno + nregs
         && xregno + xnregs > regno)
       return 0;
     if (xregno < valueno + valuenregs
         && xregno + xnregs > valueno)
       return 0;
     if (goal_mem_addr_varies
         && reg_overlap_mentioned_for_reload_p (dest,
             goal))
       return 0;
     if (xregno == 7 && need_stable_sp)
       return 0;
   }
        else if (goal_mem && (((enum rtx_code) (dest)->code) == MEM)
          && ! push_operand (dest, ((enum machine_mode) (dest)->mode)))
   return 0;
        else if ((((enum rtx_code) (dest)->code) == MEM) && regno >= 53
          && reg_equiv_memory_loc[regno] != 0)
   return 0;
        else if (need_stable_sp
          && push_operand (dest, ((enum machine_mode) (dest)->mode)))
   return 0;
      }
  }
     }
   if (((enum rtx_code) (p)->code) == CALL_INSN && (((p)->u.fld[9]).rtx1))
     {
       rtx link;
       for (link = (((p)->u.fld[9]).rtx1); (((link)->u.fld[1]).rtx1) != 0;
     link = (((link)->u.fld[1]).rtx1))
  {
    pat = (((link)->u.fld[0]).rtx1);
    if (((enum rtx_code) (pat)->code) == CLOBBER)
      {
        rtx dest = (((pat)->u.fld[0]).rtx1);
        if ((((enum rtx_code) (dest)->code) == REG))
   {
     int xregno = (((dest)->u.fld[0]).rtuint);
     int xnregs
       = hard_regno_nregs[xregno][((enum machine_mode) (dest)->mode)];
     if (xregno < regno + nregs
         && xregno + xnregs > regno)
       return 0;
     else if (xregno < valueno + valuenregs
       && xregno + xnregs > valueno)
       return 0;
     else if (goal_mem_addr_varies
       && reg_overlap_mentioned_for_reload_p (dest,
             goal))
       return 0;
   }
        else if (goal_mem && (((enum rtx_code) (dest)->code) == MEM)
          && ! push_operand (dest, ((enum machine_mode) (dest)->mode)))
   return 0;
        else if (need_stable_sp
          && push_operand (dest, ((enum machine_mode) (dest)->mode)))
   return 0;
      }
  }
     }
 }
    }
}
static int
find_inc_amount (rtx x, rtx inced)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt;
  int i;
  if (code == MEM)
    {
      rtx addr = (((x)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (addr)->code) == PRE_DEC
    || ((enum rtx_code) (addr)->code) == POST_DEC
    || ((enum rtx_code) (addr)->code) == PRE_INC
    || ((enum rtx_code) (addr)->code) == POST_INC)
   && (((addr)->u.fld[0]).rtx1) == inced)
 return ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]);
      else if ((((enum rtx_code) (addr)->code) == PRE_MODIFY
  || ((enum rtx_code) (addr)->code) == POST_MODIFY)
        && ((enum rtx_code) ((((addr)->u.fld[1]).rtx1))->code) == PLUS
        && (((addr)->u.fld[0]).rtx1) == ((((((addr)->u.fld[1]).rtx1))->u.fld[0]).rtx1)
        && (((addr)->u.fld[0]).rtx1) == inced
        && ((enum rtx_code) (((((((addr)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
 {
   i = ((((((((addr)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
   return i < 0 ? -i : i;
 }
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   int tem = find_inc_amount ((((x)->u.fld[i]).rtx1), inced);
   if (tem != 0)
     return tem;
 }
      if (fmt[i] == 'E')
 {
   int j;
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     {
       int tem = find_inc_amount ((((((x)->u.fld[i]).rtvec1))->elem[j]), inced);
       if (tem != 0)
  return tem;
     }
 }
    }
  return 0;
}
int
regno_clobbered_p (unsigned int regno, rtx insn, enum machine_mode mode,
     int sets)
{
  unsigned int nregs = hard_regno_nregs[regno][mode];
  unsigned int endregno = regno + nregs;
  if ((((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER
       || (sets && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET))
      && (((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == REG))
    {
      unsigned int test = (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      return test >= regno && test < endregno;
    }
  if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL)
    {
      int i = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1;
      for (; i >= 0; i--)
 {
   rtx elt = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]);
   if ((((enum rtx_code) (elt)->code) == CLOBBER
        || (sets && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET))
       && (((enum rtx_code) ((((elt)->u.fld[0]).rtx1))->code) == REG))
     {
       unsigned int test = ((((((elt)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
       if (test >= regno && test < endregno)
  return 1;
     }
 }
    }
  return 0;
}
rtx
reload_adjust_reg_for_mode (rtx reloadreg, enum machine_mode mode)
{
  int regno;
  if (((enum machine_mode) (reloadreg)->mode) == mode)
    return reloadreg;
  regno = (((reloadreg)->u.fld[0]).rtuint);
  if (0)
    regno += (int) hard_regno_nregs[regno][((enum machine_mode) (reloadreg)->mode)]
      - (int) hard_regno_nregs[regno][mode];
  return gen_rtx_REG (mode, regno);
}
static const char *const reload_when_needed_name[] =
{
  "RELOAD_FOR_INPUT",
  "RELOAD_FOR_OUTPUT",
  "RELOAD_FOR_INSN",
  "RELOAD_FOR_INPUT_ADDRESS",
  "RELOAD_FOR_INPADDR_ADDRESS",
  "RELOAD_FOR_OUTPUT_ADDRESS",
  "RELOAD_FOR_OUTADDR_ADDRESS",
  "RELOAD_FOR_OPERAND_ADDRESS",
  "RELOAD_FOR_OPADDR_ADDR",
  "RELOAD_OTHER",
  "RELOAD_FOR_OTHER_ADDRESS"
};
static const char * const reg_class_names4[] = { "NO_REGS", "AREG", "DREG", "CREG", "BREG", "SIREG", "DIREG", "AD_REGS", "Q_REGS", "NON_Q_REGS", "INDEX_REGS", "LEGACY_REGS", "GENERAL_REGS", "FP_TOP_REG", "FP_SECOND_REG", "FLOAT_REGS", "SSE_REGS", "MMX_REGS", "FP_TOP_SSE_REGS", "FP_SECOND_SSE_REGS", "FLOAT_SSE_REGS", "FLOAT_INT_REGS", "INT_SSE_REGS", "FLOAT_INT_SSE_REGS", "ALL_REGS" };
void
debug_reload_to_stream (FILE *f)
{
  int r;
  const char *prefix;
  if (! f)
    f = stderr;
  for (r = 0; r < n_reloads; r++)
    {
      fprintf (f, "Reload %d: ", r);
      if (rld[r].in != 0)
 {
   fprintf (f, "reload_in (%s) = ",
     mode_name[rld[r].inmode]);
   print_inline_rtx (f, rld[r].in, 24);
   fprintf (f, "\n\t");
 }
      if (rld[r].out != 0)
 {
   fprintf (f, "reload_out (%s) = ",
     mode_name[rld[r].outmode]);
   print_inline_rtx (f, rld[r].out, 24);
   fprintf (f, "\n\t");
 }
      fprintf (f, "%s, ", reg_class_names4[(int) rld[r].class]);
      fprintf (f, "%s (opnum = %d)",
        reload_when_needed_name[(int) rld[r].when_needed],
        rld[r].opnum);
      if (rld[r].optional)
 fprintf (f, ", optional");
      if (rld[r].nongroup)
 fprintf (f, ", nongroup");
      if (rld[r].inc != 0)
 fprintf (f, ", inc by %d", rld[r].inc);
      if (rld[r].nocombine)
 fprintf (f, ", can't combine");
      if (rld[r].secondary_p)
 fprintf (f, ", secondary_reload_p");
      if (rld[r].in_reg != 0)
 {
   fprintf (f, "\n\treload_in_reg: ");
   print_inline_rtx (f, rld[r].in_reg, 24);
 }
      if (rld[r].out_reg != 0)
 {
   fprintf (f, "\n\treload_out_reg: ");
   print_inline_rtx (f, rld[r].out_reg, 24);
 }
      if (rld[r].reg_rtx != 0)
 {
   fprintf (f, "\n\treload_reg_rtx: ");
   print_inline_rtx (f, rld[r].reg_rtx, 24);
 }
      prefix = "\n\t";
      if (rld[r].secondary_in_reload != -1)
 {
   fprintf (f, "%ssecondary_in_reload = %d",
     prefix, rld[r].secondary_in_reload);
   prefix = ", ";
 }
      if (rld[r].secondary_out_reload != -1)
 fprintf (f, "%ssecondary_out_reload = %d\n",
   prefix, rld[r].secondary_out_reload);
      prefix = "\n\t";
      if (rld[r].secondary_in_icode != CODE_FOR_nothing)
 {
   fprintf (f, "%ssecondary_in_icode = %s", prefix,
     insn_data[rld[r].secondary_in_icode].name);
   prefix = ", ";
 }
      if (rld[r].secondary_out_icode != CODE_FOR_nothing)
 fprintf (f, "%ssecondary_out_icode = %s", prefix,
   insn_data[rld[r].secondary_out_icode].name);
      fprintf (f, "\n");
    }
}
void
debug_reload (void)
{
  debug_reload_to_stream (stderr);
}
static rtx *reg_last_reload_reg;
static char *reg_has_output_reload;
static HARD_REG_SET reg_is_output_reload;
rtx *reg_equiv_constant;
rtx *reg_equiv_memory_loc;
varray_type reg_equiv_memory_loc_varray;
rtx *reg_equiv_address;
rtx *reg_equiv_mem;
static unsigned int *reg_max_ref_width;
static rtx *reg_equiv_init;
static short *reg_old_renumber;
static int reg_reloaded_contents[53];
static rtx reg_reloaded_insn[53];
static HARD_REG_SET reg_reloaded_valid;
static HARD_REG_SET reg_reloaded_dead;
static HARD_REG_SET reg_reloaded_call_part_clobbered;
static int n_spills;
static rtx spill_reg_rtx[53];
static rtx spill_reg_store[53];
static rtx spill_reg_stored_to[53];
static short spill_reg_order[53];
static HARD_REG_SET bad_spill_regs;
static HARD_REG_SET bad_spill_regs_global;
static short spill_regs[53];
static HARD_REG_SET *pseudo_previous_regs;
static HARD_REG_SET *pseudo_forbidden_regs;
static HARD_REG_SET used_spill_regs;
static int last_spill_reg;
static char spill_indirect_levels;
char indirect_symref_ok;
char double_reg_address_ok;
static rtx spill_stack_slot[53];
static unsigned int spill_stack_slot_width[53];
static regset_head spilled_pseudos;
static regset_head pseudos_counted;
int reload_first_uid;
int caller_save_needed;
int reload_in_progress = 0;
enum insn_code reload_in_optab[NUM_MACHINE_MODES];
enum insn_code reload_out_optab[NUM_MACHINE_MODES];
struct obstack reload_obstack;
char *reload_startobj;
char *reload_firstobj;
static char *reload_insn_firstobj;
struct insn_chain *reload_insn_chain;
static struct insn_chain *insns_need_reload;
struct elim_table
{
  int from;
  int to;
  long initial_offset;
  int can_eliminate;
  int can_eliminate_previous;
  long offset;
  long previous_offset;
  int ref_outside_mem;
  rtx from_rtx;
  rtx to_rtx;
};
static struct elim_table *reg_eliminate = 0;
static const struct elim_table_1
{
  const int from;
  const int to;
} reg_eliminate_1[] =
  {{ 16, 7}, { 16, 6}, { 20, 7}, { 20, 6}};
int num_not_at_initial_offset;
static int num_eliminable;
static int num_eliminable_invariants;
static int first_label_num;
static char *offsets_known_at;
static long (*offsets_at)[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))];
static int num_labels;
static void replace_pseudos_in (rtx *, enum machine_mode, rtx);
static void maybe_fix_stack_asms (void);
static void copy_reloads (struct insn_chain *);
static void calculate_needs_all_insns (int);
static int find_reg_rl1 (struct insn_chain *, int);
static void find_reload_regs (struct insn_chain *);
static void select_reload_regs (void);
static void delete_caller_save_insns (void);
static void spill_failure (rtx, enum reg_class);
static void count_spilled_pseudo (int, int, int);
static void delete_dead_insn (rtx);
static void alter_reg (int, int);
static void set_label_offsets (rtx, rtx, int);
static void check_eliminable_occurrences (rtx);
static void elimination_effects (rtx, enum machine_mode);
static int eliminate_regs_in_insn (rtx, int);
static void update_eliminable_offsets (void);
static void mark_not_eliminable (rtx, rtx, void *);
static void set_initial_elim_offsets (void);
static void verify_initial_elim_offsets (void);
static void set_initial_label_offsets (void);
static void set_offsets_for_label (rtx);
static void init_elim_table (void);
static void update_eliminables (HARD_REG_SET *);
static void spill_hard_reg (unsigned int, int);
static int finish_spills (int);
static void ior_hard_reg_set (HARD_REG_SET *, HARD_REG_SET *);
static void scan_paradoxical_subregs (rtx);
static void count_pseudo (int);
static void order_regs_for_reload (struct insn_chain *);
static void reload_as_needed (int);
static void forget_old_reloads_1 (rtx, rtx, void *);
static int reload_reg_class_lower (const void *, const void *);
static void mark_reload_reg_in_use (unsigned int, int, enum reload_type,
        enum machine_mode);
static void clear_reload_reg_in_use (unsigned int, int, enum reload_type,
         enum machine_mode);
static int reload_reg_free_p (unsigned int, int, enum reload_type);
static int reload_reg_free_for_value_p (int, int, int, enum reload_type,
     rtx, rtx, int, int);
static int free_for_value_p (int, enum machine_mode, int, enum reload_type,
        rtx, rtx, int, int);
static int function_invariant_p (rtx);
static int reload_reg_reaches_end_p (unsigned int, int, enum reload_type);
static int allocate_reload_reg (struct insn_chain *, int, int);
static int conflicts_with_override (rtx);
static void failed_reload (rtx, int);
static int set_reload_reg (int, int);
static void choose_reload_regs_init (struct insn_chain *, rtx *);
static void choose_reload_regs (struct insn_chain *);
static void merge_assigned_reloads (rtx);
static void emit_input_reload_insns (struct insn_chain *, struct reload *,
         rtx, int);
static void emit_output_reload_insns (struct insn_chain *, struct reload *,
          int);
static void do_input_reload (struct insn_chain *, struct reload *, int);
static void do_output_reload (struct insn_chain *, struct reload *, int);
static unsigned char inherit_piecemeal_p (int, int);
static void emit_reload_insns (struct insn_chain *);
static void delete_output_reload (rtx, int, int);
static void delete_address_reloads (rtx, rtx);
static void delete_address_reloads_1 (rtx, rtx, rtx);
static rtx inc_for_reload (rtx, rtx, rtx, int);
static void copy_eh_notes (rtx, rtx);
void
init_reload (void)
{
  int i;
  rtx tem
    = gen_rtx_MEM ((0 ? DImode : SImode),
     gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (gen_rtx_REG ((0 ? DImode : SImode), (((53)) + 4) + 1)), (gen_rtx_CONST_INT (VOIDmode, (long) (4))))
                 );
  spill_indirect_levels = 0;
  while (memory_address_p (QImode, tem))
    {
      spill_indirect_levels++;
      tem = gen_rtx_MEM ((0 ? DImode : SImode), tem);
    }
  tem = gen_rtx_MEM ((0 ? DImode : SImode), gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), ("foo")));
  indirect_symref_ok = memory_address_p (QImode, tem);
  for (i = 0; i < 53; i++)
    {
      tem = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (gen_rtx_REG ((0 ? DImode : SImode), 6)), (gen_rtx_REG ((0 ? DImode : SImode), i)))
                            ;
      tem = plus_constant_wide ((tem), (long) (4));
      if (memory_address_p (QImode, tem))
 {
   double_reg_address_ok = 1;
   break;
 }
    }
  _obstack_begin ((&reload_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
  reload_startobj = (( ((&reload_obstack))->temp = ((0)), ((((&reload_obstack))->chunk_limit - ((&reload_obstack))->next_free < ((&reload_obstack))->temp) ? (_obstack_newchunk (((&reload_obstack)), ((&reload_obstack))->temp), 0) : 0), (((&reload_obstack))->next_free += (((&reload_obstack))->temp))), ( (((&reload_obstack))->next_free == ((&reload_obstack))->object_base ? ((((&reload_obstack))->maybe_empty_object = 1), 0) : 0), ((&reload_obstack))->temp = ((((&reload_obstack))->object_base) - (char *) 0), ((&reload_obstack))->next_free = (((((((&reload_obstack))->next_free) - (char *) 0)+((&reload_obstack))->alignment_mask) & ~ (((&reload_obstack))->alignment_mask)) + (char *) 0), ((((&reload_obstack))->next_free - (char *) ((&reload_obstack))->chunk > ((&reload_obstack))->chunk_limit - (char *) ((&reload_obstack))->chunk) ? (((&reload_obstack))->next_free = ((&reload_obstack))->chunk_limit) : 0), ((&reload_obstack))->object_base = ((&reload_obstack))->next_free, ((((&reload_obstack))->temp) + (char *) 0)));
  bitmap_initialize (&spilled_pseudos, 1);
  bitmap_initialize (&pseudos_counted, 1);
  reg_equiv_memory_loc_varray = varray_init (0, VARRAY_DATA_RTX, "reg_equiv_memory_loc");
}
static struct insn_chain *unused_insn_chains = 0;
struct insn_chain *
new_insn_chain (void)
{
  struct insn_chain *c;
  if (unused_insn_chains == 0)
    {
      c = (( ((&reload_obstack))->temp = ((sizeof (struct insn_chain))), ((((&reload_obstack))->chunk_limit - ((&reload_obstack))->next_free < ((&reload_obstack))->temp) ? (_obstack_newchunk (((&reload_obstack)), ((&reload_obstack))->temp), 0) : 0), (((&reload_obstack))->next_free += (((&reload_obstack))->temp))), ( (((&reload_obstack))->next_free == ((&reload_obstack))->object_base ? ((((&reload_obstack))->maybe_empty_object = 1), 0) : 0), ((&reload_obstack))->temp = ((((&reload_obstack))->object_base) - (char *) 0), ((&reload_obstack))->next_free = (((((((&reload_obstack))->next_free) - (char *) 0)+((&reload_obstack))->alignment_mask) & ~ (((&reload_obstack))->alignment_mask)) + (char *) 0), ((((&reload_obstack))->next_free - (char *) ((&reload_obstack))->chunk > ((&reload_obstack))->chunk_limit - (char *) ((&reload_obstack))->chunk) ? (((&reload_obstack))->next_free = ((&reload_obstack))->chunk_limit) : 0), ((&reload_obstack))->object_base = ((&reload_obstack))->next_free, ((((&reload_obstack))->temp) + (char *) 0)));
      bitmap_initialize (&c->live_throughout, 1);
      bitmap_initialize (&c->dead_or_set, 1);
    }
  else
    {
      c = unused_insn_chains;
      unused_insn_chains = c->next;
    }
  c->is_caller_save_insn = 0;
  c->need_operand_change = 0;
  c->need_reload = 0;
  c->need_elim = 0;
  return c;
}
void
compute_use_by_pseudos (HARD_REG_SET *to, regset from)
{
  unsigned int regno;
  do { bitmap_element *ptr_ = (from)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (regno) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { int r = reg_renumber[regno]; int nregs; if (r < 0) { if (! reload_completed) abort (); } else { nregs = hard_regno_nregs[r][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[regno])->mode)]; while (nregs-- > 0) ((*to)[(r + nregs) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((r + nregs) % ((unsigned) (8 * 4)))); } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
}
static void
replace_pseudos_in (rtx *loc, enum machine_mode mem_mode, rtx usage)
{
  rtx x = *loc;
  enum rtx_code code;
  const char *fmt;
  int i, j;
  if (! x)
    return;
  code = ((enum rtx_code) (x)->code);
  if (code == REG)
    {
      unsigned int regno = (((x)->u.fld[0]).rtuint);
      if (regno < 53)
 return;
      x = eliminate_regs (x, mem_mode, usage);
      if (x != *loc)
 {
   *loc = x;
   replace_pseudos_in (loc, mem_mode, usage);
   return;
 }
      if (reg_equiv_constant[regno])
 *loc = reg_equiv_constant[regno];
      else if (reg_equiv_mem[regno])
 *loc = reg_equiv_mem[regno];
      else if (reg_equiv_address[regno])
 *loc = gen_rtx_MEM (((enum machine_mode) (x)->mode), reg_equiv_address[regno]);
      else if (!(((enum rtx_code) ((cfun->emit->x_regno_reg_rtx)[regno])->code) == REG)
        || ((((cfun->emit->x_regno_reg_rtx)[regno])->u.fld[0]).rtuint) != regno)
 *loc = (cfun->emit->x_regno_reg_rtx)[regno];
      else
 abort ();
      return;
    }
  else if (code == MEM)
    {
      replace_pseudos_in (& (((x)->u.fld[0]).rtx1), ((enum machine_mode) (x)->mode), usage);
      return;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++, fmt++)
    if (*fmt == 'e')
      replace_pseudos_in (&(((x)->u.fld[i]).rtx1), mem_mode, usage);
    else if (*fmt == 'E')
      for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
 replace_pseudos_in (& (((((x)->u.fld[i]).rtvec1))->elem[j]), mem_mode, usage);
}
static int something_needs_elimination;
int something_needs_operands_changed;
static int failure;
int
reload (rtx first, int global)
{
  int i;
  rtx insn;
  struct elim_table *ep;
  basic_block bb;
  init_recog ();
  failure = 0;
  reload_firstobj = (( ((&reload_obstack))->temp = ((0)), ((((&reload_obstack))->chunk_limit - ((&reload_obstack))->next_free < ((&reload_obstack))->temp) ? (_obstack_newchunk (((&reload_obstack)), ((&reload_obstack))->temp), 0) : 0), (((&reload_obstack))->next_free += (((&reload_obstack))->temp))), ( (((&reload_obstack))->next_free == ((&reload_obstack))->object_base ? ((((&reload_obstack))->maybe_empty_object = 1), 0) : 0), ((&reload_obstack))->temp = ((((&reload_obstack))->object_base) - (char *) 0), ((&reload_obstack))->next_free = (((((((&reload_obstack))->next_free) - (char *) 0)+((&reload_obstack))->alignment_mask) & ~ (((&reload_obstack))->alignment_mask)) + (char *) 0), ((((&reload_obstack))->next_free - (char *) ((&reload_obstack))->chunk > ((&reload_obstack))->chunk_limit - (char *) ((&reload_obstack))->chunk) ? (((&reload_obstack))->next_free = ((&reload_obstack))->chunk_limit) : 0), ((&reload_obstack))->object_base = ((&reload_obstack))->next_free, ((((&reload_obstack))->temp) + (char *) 0)));
  emit_note (NOTE_INSN_DELETED);
  reload_first_uid = get_max_uid ();
  clear_secondary_mem ();
  memset (spill_stack_slot, 0, sizeof spill_stack_slot);
  memset (spill_stack_slot_width, 0, sizeof spill_stack_slot_width);
  init_save_areas ();
  for (i = 53; i < max_regno; i++)
    mark_home_live (i);
  if ((cfun->has_nonlocal_label))
    for (i = 0; i < 53; i++)
      if (! call_used_regs[i] && ! fixed_regs[i] && ! 0)
 regs_ever_live[i] = 1;
  reg_equiv_constant = xcalloc (max_regno, sizeof (rtx));
  reg_equiv_mem = xcalloc (max_regno, sizeof (rtx));
  reg_equiv_init = xcalloc (max_regno, sizeof (rtx));
  reg_equiv_address = xcalloc (max_regno, sizeof (rtx));
  reg_max_ref_width = xcalloc (max_regno, sizeof (int));
  reg_old_renumber = xcalloc (max_regno, sizeof (short));
  memcpy (reg_old_renumber, reg_renumber, max_regno * sizeof (short));
  pseudo_forbidden_regs = xmalloc (max_regno * sizeof (HARD_REG_SET));
  pseudo_previous_regs = xcalloc (max_regno, sizeof (HARD_REG_SET));
  do { HARD_REG_ELT_TYPE *scan_tp_ = (bad_spill_regs_global); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  num_eliminable_invariants = 0;
  for (insn = first; insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE
   && ((enum machine_mode) (insn)->mode) != VOIDmode)
 ((insn)->mode = (VOIDmode));
      if (set != 0 && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG))
 {
   rtx note = find_reg_note (insn, REG_EQUIV, (rtx) 0);
   if (note
       && (! function_invariant_p ((((note)->u.fld[0]).rtx1))
    || ! flag_pic
    || (((rtx_class[(int) (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == CONST_VECTOR)
        && legitimate_pic_operand_p ((((note)->u.fld[0]).rtx1))))
       )
     {
       rtx x = (((note)->u.fld[0]).rtx1);
       i = ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
       if (i > (((53)) + 4))
  {
    if (memory_operand (x, VOIDmode))
      {
        reg_equiv_memory_loc[i] = copy_rtx (x);
      }
    else if (function_invariant_p (x))
      {
        if (((enum rtx_code) (x)->code) == PLUS)
   {
     reg_equiv_constant[i] = copy_rtx (x);
     num_eliminable_invariants++;
   }
        else if (x == (global_rtl[GR_FRAME_POINTER])
          || x == (global_rtl[GR_ARG_POINTER]))
   {
     reg_equiv_constant[i] = x;
     num_eliminable_invariants++;
   }
        else if (legitimate_constant_p (x))
   reg_equiv_constant[i] = x;
        else
   {
     reg_equiv_memory_loc[i]
       = force_const_mem (((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode), x);
     if (!reg_equiv_memory_loc[i])
       continue;
   }
      }
    else
      continue;
    if (!(((enum rtx_code) (x)->code) == MEM)
        || rtx_equal_p ((((set)->u.fld[1]).rtx1), x))
      reg_equiv_init[i]
        = gen_rtx_fmt_ue (INSN_LIST, (VOIDmode), (insn), (reg_equiv_init[i]));
  }
     }
 }
      else if (set && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == MEM)
        && (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == REG)
        && reg_equiv_memory_loc[((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint)]
        && rtx_equal_p ((((set)->u.fld[0]).rtx1),
          reg_equiv_memory_loc[((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint)]))
 reg_equiv_init[((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint)]
   = gen_rtx_fmt_ue (INSN_LIST, (VOIDmode), (insn), (reg_equiv_init[((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint)]))
                                                ;
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 scan_paradoxical_subregs ((((insn)->u.fld[5]).rtx1));
    }
  init_elim_table ();
  first_label_num = get_first_label_num ();
  num_labels = max_label_num () - first_label_num;
  offsets_known_at = xmalloc (num_labels);
  offsets_at = xmalloc (num_labels * (sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0])) * sizeof (long));
  for (i = (((53)) + 4) + 1; i < max_regno; i++)
    alter_reg (i, -1);
  for (insn = first; insn && num_eliminable; insn = (((insn)->u.fld[2]).rtx1))
    if (((enum rtx_code) (insn)->code) == INSN || ((enum rtx_code) (insn)->code) == JUMP_INSN
 || ((enum rtx_code) (insn)->code) == CALL_INSN)
      note_stores ((((insn)->u.fld[5]).rtx1), mark_not_eliminable, ((void *)0));
  maybe_fix_stack_asms ();
  insns_need_reload = 0;
  something_needs_elimination = 0;
  last_spill_reg = -1;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used_spill_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; )
    {
      int from = ep->from;
      int can_eliminate = 0;
      do
 {
          can_eliminate |= ep->can_eliminate;
          ep++;
 }
      while (ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))] && ep->from == from);
      if (! can_eliminate)
 spill_hard_reg (from, 1);
    }
  if (frame_pointer_needed)
    spill_hard_reg (6, 1);
  finish_spills (global);
  reload_in_progress = 1;
  for (;;)
    {
      int something_changed;
      int did_spill;
      long starting_frame_size;
      if (cfun->stack_alignment_needed)
        assign_stack_local (BLKmode, 0, cfun->stack_alignment_needed);
      starting_frame_size = get_frame_size ();
      set_initial_elim_offsets ();
      set_initial_label_offsets ();
      for (i = 53; i < max_regno; i++)
 if (reg_renumber[i] < 0 && reg_equiv_memory_loc[i])
   {
     rtx x = eliminate_regs (reg_equiv_memory_loc[i], 0, (rtx) 0);
     if (strict_memory_address_p (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode),
      (((x)->u.fld[0]).rtx1)))
       reg_equiv_mem[i] = x, reg_equiv_address[i] = 0;
     else if (((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_VECTOR)
       || ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
    && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
       || (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
    && (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG)
    && ((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint)
        < 53)
    && ((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_VECTOR)))
       reg_equiv_address[i] = (((x)->u.fld[0]).rtx1), reg_equiv_mem[i] = 0;
     else
       {
  reg_equiv_memory_loc[i] = 0;
  reg_equiv_init[i] = 0;
  alter_reg (i, -1);
       }
   }
      if (caller_save_needed)
 setup_save_areas ();
      if (starting_frame_size != get_frame_size ())
 continue;
      if (caller_save_needed)
 {
   save_call_clobbered_regs ();
   reload_firstobj = (( ((&reload_obstack))->temp = ((0)), ((((&reload_obstack))->chunk_limit - ((&reload_obstack))->next_free < ((&reload_obstack))->temp) ? (_obstack_newchunk (((&reload_obstack)), ((&reload_obstack))->temp), 0) : 0), (((&reload_obstack))->next_free += (((&reload_obstack))->temp))), ( (((&reload_obstack))->next_free == ((&reload_obstack))->object_base ? ((((&reload_obstack))->maybe_empty_object = 1), 0) : 0), ((&reload_obstack))->temp = ((((&reload_obstack))->object_base) - (char *) 0), ((&reload_obstack))->next_free = (((((((&reload_obstack))->next_free) - (char *) 0)+((&reload_obstack))->alignment_mask) & ~ (((&reload_obstack))->alignment_mask)) + (char *) 0), ((((&reload_obstack))->next_free - (char *) ((&reload_obstack))->chunk > ((&reload_obstack))->chunk_limit - (char *) ((&reload_obstack))->chunk) ? (((&reload_obstack))->next_free = ((&reload_obstack))->chunk_limit) : 0), ((&reload_obstack))->object_base = ((&reload_obstack))->next_free, ((((&reload_obstack))->temp) + (char *) 0)));
 }
      calculate_needs_all_insns (global);
      bitmap_clear (&spilled_pseudos);
      did_spill = 0;
      something_changed = 0;
      if (starting_frame_size != get_frame_size ())
 something_changed = 1;
      {
 HARD_REG_SET to_spill;
 do { HARD_REG_ELT_TYPE *scan_tp_ = (to_spill); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
 update_eliminables (&to_spill);
 for (i = 0; i < 53; i++)
   if ((!!((to_spill)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
     {
       spill_hard_reg (i, 1);
       did_spill = 1;
       something_changed = 1;
     }
      }
      select_reload_regs ();
      if (failure)
 goto failed;
      if (insns_need_reload != 0 || did_spill)
 something_changed |= finish_spills (global);
      if (! something_changed)
 break;
      if (caller_save_needed)
 delete_caller_save_insns ();
      ( (&reload_obstack)->temp = (char *) (reload_firstobj) - (char *) (&reload_obstack)->chunk, (((&reload_obstack)->temp > 0 && (&reload_obstack)->temp < (&reload_obstack)->chunk_limit - (char *) (&reload_obstack)->chunk) ? (int) ((&reload_obstack)->next_free = (&reload_obstack)->object_base = (&reload_obstack)->temp + (char *) (&reload_obstack)->chunk) : (((obstack_free) ((&reload_obstack), (&reload_obstack)->temp + (char *) (&reload_obstack)->chunk), 0), 0)));
    }
  if (global)
    for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
      if (ep->can_eliminate)
 mark_elimination (ep->from, ep->to);
  for (i = 53; i < max_regno; i++)
    {
      if (reg_renumber[i] < 0 && reg_equiv_init[i] != 0)
 {
   rtx list;
   for (list = reg_equiv_init[i]; list; list = (((list)->u.fld[1]).rtx1))
     {
       rtx equiv_insn = (((list)->u.fld[0]).rtx1);
       if (((enum rtx_code) (equiv_insn)->code) == NOTE
    || can_throw_internal (equiv_insn))
  ;
       else if (reg_set_p ((cfun->emit->x_regno_reg_rtx)[i], (((equiv_insn)->u.fld[5]).rtx1)))
  delete_dead_insn (equiv_insn);
       else
  (((equiv_insn)->code = (NOTE)), (((equiv_insn)->u.fld[4]).rtstr) = 0, (((equiv_insn)->u.fld[5]).rtint) = NOTE_INSN_DELETED);
     }
 }
    }
  if (insns_need_reload != 0 || something_needs_elimination
      || something_needs_operands_changed)
    {
      long old_frame_size = get_frame_size ();
      reload_as_needed (global);
      if (old_frame_size != get_frame_size ())
 abort ();
      if (num_eliminable)
 verify_initial_elim_offsets ();
    }
  if (! frame_pointer_needed)
    for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
      bitmap_clear_bit (bb->global_live_at_start, 6)
                                ;
 failed:
  bitmap_clear (&spilled_pseudos);
  reload_in_progress = 0;
  for (i = 53; i < max_regno; i++)
    {
      rtx addr = 0;
      if (reg_equiv_mem[i])
 addr = (((reg_equiv_mem[i])->u.fld[0]).rtx1);
      if (reg_equiv_address[i])
 addr = reg_equiv_address[i];
      if (addr)
 {
   if (reg_renumber[i] < 0)
     {
       rtx reg = (cfun->emit->x_regno_reg_rtx)[i];
       (((reg))->volatil) = 0;
       ((reg)->code = (MEM));
       (((reg)->u.fld[0]).rtx1) = addr;
       if (reg_equiv_memory_loc[i])
  ((((reg))->volatil) = (((reg_equiv_memory_loc[i]))->volatil), (((reg))->in_struct) = (((reg_equiv_memory_loc[i]))->in_struct), (((reg))->return_val) = (((reg_equiv_memory_loc[i]))->return_val), (((reg))->call) = (((reg_equiv_memory_loc[i]))->call), (((reg))->unchanging) = (((reg_equiv_memory_loc[i]))->unchanging), (((reg))->jump) = (((reg_equiv_memory_loc[i]))->jump), (((reg)->u.fld[1]).rtmem) = (((reg_equiv_memory_loc[i])->u.fld[1]).rtmem));
       else
  {
    (((reg))->unchanging) = (((reg))->in_struct)
      = (((reg))->return_val) = 0;
    (((reg)->u.fld[1]).rtmem) = 0;
  }
     }
   else if (reg_equiv_mem[i])
     (((reg_equiv_mem[i])->u.fld[0]).rtx1) = addr;
 }
    }
  reload_completed = 1;
  for (insn = first; insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
      {
 rtx *pnote;
 if (((enum rtx_code) (insn)->code) == CALL_INSN)
   replace_pseudos_in (& (((insn)->u.fld[9]).rtx1),
         VOIDmode, (((insn)->u.fld[9]).rtx1));
 if ((((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE
      && (((enum machine_mode) (insn)->mode) == QImode
   || find_reg_note (insn, REG_EQUAL, (rtx) 0)))
     || (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER
  && (!(((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == MEM)
      || ((enum machine_mode) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->mode) != BLKmode
      || (((enum rtx_code) ((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) != SCRATCH
   && (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1)
    != (global_rtl[GR_STACK_POINTER])))
  && (!(((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == REG)
      || ! (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1)))->return_val))))
   {
     delete_insn (insn);
     continue;
   }
 if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER)
   replace_pseudos_in (& ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1),
         VOIDmode, (((insn)->u.fld[5]).rtx1));
 pnote = &(((insn)->u.fld[8]).rtx1);
 while (*pnote != 0)
   {
     if (((enum reg_note) ((enum machine_mode) (*pnote)->mode)) == REG_DEAD
  || ((enum reg_note) ((enum machine_mode) (*pnote)->mode)) == REG_UNUSED
  || ((enum reg_note) ((enum machine_mode) (*pnote)->mode)) == REG_INC
  || ((enum reg_note) ((enum machine_mode) (*pnote)->mode)) == REG_RETVAL
  || ((enum reg_note) ((enum machine_mode) (*pnote)->mode)) == REG_LIBCALL)
       *pnote = (((*pnote)->u.fld[1]).rtx1);
     else
       pnote = &(((*pnote)->u.fld[1]).rtx1);
   }
 cleanup_subreg_operands (insn);
      }
  if (flag_stack_check && ! 0)
    {
      long size = get_frame_size () + (4 * (0 ? 8 : 4));
      static int verbose_warned = 0;
      for (i = 0; i < 53; i++)
 if (regs_ever_live[i] && ! fixed_regs[i] && call_used_regs[i])
   size += (0 ? 8 : 4);
      if (size > (4096 - (0 ? 8 : 4)))
 {
   warning ("frame size too large for reliable stack checking");
   if (! verbose_warned)
     {
       warning ("try reducing the number of local variables");
       verbose_warned = 1;
     }
 }
    }
  if (reg_equiv_constant)
    free (reg_equiv_constant);
  reg_equiv_constant = 0;
  ((reg_equiv_memory_loc_varray) = varray_grow (reg_equiv_memory_loc_varray, 0));
  reg_equiv_memory_loc = 0;
  if (offsets_known_at)
    free (offsets_known_at);
  if (offsets_at)
    free (offsets_at);
  free (reg_equiv_mem);
  free (reg_equiv_init);
  free (reg_equiv_address);
  free (reg_max_ref_width);
  free (reg_old_renumber);
  free (pseudo_previous_regs);
  free (pseudo_forbidden_regs);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used_spill_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (i = 0; i < n_spills; i++)
    ((used_spill_regs)[(spill_regs[i]) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((spill_regs[i]) % ((unsigned) (8 * 4))));
  ( (&reload_obstack)->temp = (char *) (reload_startobj) - (char *) (&reload_obstack)->chunk, (((&reload_obstack)->temp > 0 && (&reload_obstack)->temp < (&reload_obstack)->chunk_limit - (char *) (&reload_obstack)->chunk) ? (int) ((&reload_obstack)->next_free = (&reload_obstack)->object_base = (&reload_obstack)->temp + (char *) (&reload_obstack)->chunk) : (((obstack_free) ((&reload_obstack), (&reload_obstack)->temp + (char *) (&reload_obstack)->chunk), 0), 0)));
  unused_insn_chains = 0;
  fixup_abnormal_edges ();
  unshare_all_rtl_again (first);
  if (!frame_pointer_needed)
    (cfun->emit->regno_pointer_align[6]) = 8;
  return failure;
}
static void
maybe_fix_stack_asms (void)
{
  const char *constraints[30];
  enum machine_mode operand_mode[30];
  struct insn_chain *chain;
  for (chain = reload_insn_chain; chain != 0; chain = chain->next)
    {
      int i, noperands;
      HARD_REG_SET clobbered, allowed;
      rtx pat;
      if (! ((((enum rtx_code) (chain->insn)->code) == INSN) || (((enum rtx_code) (chain->insn)->code) == JUMP_INSN) || (((enum rtx_code) (chain->insn)->code) == CALL_INSN))
   || (noperands = asm_noperands ((((chain->insn)->u.fld[5]).rtx1))) < 0)
 continue;
      pat = (((chain->insn)->u.fld[5]).rtx1);
      if (((enum rtx_code) (pat)->code) != PARALLEL)
 continue;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (clobbered); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (allowed); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx t = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (t)->code) == CLOBBER && ((((enum rtx_code) ((((t)->u.fld[0]).rtx1))->code) == REG) && ((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 8 && ((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtuint) <= (8 + 7)))
     ((clobbered)[(((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((((((((t)->u.fld[0]).rtx1))->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
 }
      decode_asm_operands (pat, recog_data.operand, recog_data.operand_loc,
      constraints, operand_mode);
      for (i = 0; i < noperands; i++)
 {
   const char *p = constraints[i];
   int cls = (int) NO_REGS;
   for (;;)
     {
       char c = *p;
       if (c == '\0' || c == ',' || c == '#')
  {
    do { HARD_REG_ELT_TYPE *scan_tp_ = (allowed), *scan_fp_ = (reg_class_contents[cls]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
    cls = NO_REGS;
    p++;
    if (c == '#')
      do {
        c = *p++;
      } while (c != '\0' && c != ',');
    if (c == '\0')
      break;
    continue;
  }
       switch (c)
  {
  case '=': case '+': case '*': case '%': case '?': case '!':
  case '0': case '1': case '2': case '3': case '4': case 'm':
  case '<': case '>': case 'V': case 'o': case '&': case 'E':
  case 'F': case 's': case 'i': case 'n': case 'X': case 'I':
  case 'J': case 'K': case 'L': case 'M': case 'N': case 'O':
  case 'P':
    break;
  case 'p':
    cls = (int) reg_class_subunion[cls]
      [(int) GENERAL_REGS];
    break;
  case 'g':
  case 'r':
    cls = (int) reg_class_subunion[cls][(int) GENERAL_REGS];
    break;
  default:
    if (0)
      cls = (int) reg_class_subunion[cls]
        [(int) GENERAL_REGS];
    else
      cls = (int) reg_class_subunion[cls]
        [(int) ((c) == 'r' ? GENERAL_REGS : NO_REGS)];
  }
       p += 1;
     }
 }
      do { HARD_REG_ELT_TYPE *scan_tp_ = (allowed), *scan_fp_ = (clobbered); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0);
      for (i = 0; i < 53; i++)
 if ((!!((allowed)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
   {
     bitmap_clear_bit (&chain->live_throughout, i);
     bitmap_clear_bit (&chain->dead_or_set, i);
   }
    }
}
static void
copy_reloads (struct insn_chain *chain)
{
  chain->n_reloads = n_reloads;
  chain->rld = (( ((&reload_obstack))->temp = ((n_reloads * sizeof (struct reload))), ((((&reload_obstack))->chunk_limit - ((&reload_obstack))->next_free < ((&reload_obstack))->temp) ? (_obstack_newchunk (((&reload_obstack)), ((&reload_obstack))->temp), 0) : 0), (((&reload_obstack))->next_free += (((&reload_obstack))->temp))), ( (((&reload_obstack))->next_free == ((&reload_obstack))->object_base ? ((((&reload_obstack))->maybe_empty_object = 1), 0) : 0), ((&reload_obstack))->temp = ((((&reload_obstack))->object_base) - (char *) 0), ((&reload_obstack))->next_free = (((((((&reload_obstack))->next_free) - (char *) 0)+((&reload_obstack))->alignment_mask) & ~ (((&reload_obstack))->alignment_mask)) + (char *) 0), ((((&reload_obstack))->next_free - (char *) ((&reload_obstack))->chunk > ((&reload_obstack))->chunk_limit - (char *) ((&reload_obstack))->chunk) ? (((&reload_obstack))->next_free = ((&reload_obstack))->chunk_limit) : 0), ((&reload_obstack))->object_base = ((&reload_obstack))->next_free, ((((&reload_obstack))->temp) + (char *) 0)))
                                            ;
  memcpy (chain->rld, rld, n_reloads * sizeof (struct reload));
  reload_insn_firstobj = (( ((&reload_obstack))->temp = ((0)), ((((&reload_obstack))->chunk_limit - ((&reload_obstack))->next_free < ((&reload_obstack))->temp) ? (_obstack_newchunk (((&reload_obstack)), ((&reload_obstack))->temp), 0) : 0), (((&reload_obstack))->next_free += (((&reload_obstack))->temp))), ( (((&reload_obstack))->next_free == ((&reload_obstack))->object_base ? ((((&reload_obstack))->maybe_empty_object = 1), 0) : 0), ((&reload_obstack))->temp = ((((&reload_obstack))->object_base) - (char *) 0), ((&reload_obstack))->next_free = (((((((&reload_obstack))->next_free) - (char *) 0)+((&reload_obstack))->alignment_mask) & ~ (((&reload_obstack))->alignment_mask)) + (char *) 0), ((((&reload_obstack))->next_free - (char *) ((&reload_obstack))->chunk > ((&reload_obstack))->chunk_limit - (char *) ((&reload_obstack))->chunk) ? (((&reload_obstack))->next_free = ((&reload_obstack))->chunk_limit) : 0), ((&reload_obstack))->object_base = ((&reload_obstack))->next_free, ((((&reload_obstack))->temp) + (char *) 0)));
}
static void
calculate_needs_all_insns (int global)
{
  struct insn_chain **pprev_reload = &insns_need_reload;
  struct insn_chain *chain, *next = 0;
  something_needs_elimination = 0;
  reload_insn_firstobj = (( ((&reload_obstack))->temp = ((0)), ((((&reload_obstack))->chunk_limit - ((&reload_obstack))->next_free < ((&reload_obstack))->temp) ? (_obstack_newchunk (((&reload_obstack)), ((&reload_obstack))->temp), 0) : 0), (((&reload_obstack))->next_free += (((&reload_obstack))->temp))), ( (((&reload_obstack))->next_free == ((&reload_obstack))->object_base ? ((((&reload_obstack))->maybe_empty_object = 1), 0) : 0), ((&reload_obstack))->temp = ((((&reload_obstack))->object_base) - (char *) 0), ((&reload_obstack))->next_free = (((((((&reload_obstack))->next_free) - (char *) 0)+((&reload_obstack))->alignment_mask) & ~ (((&reload_obstack))->alignment_mask)) + (char *) 0), ((((&reload_obstack))->next_free - (char *) ((&reload_obstack))->chunk > ((&reload_obstack))->chunk_limit - (char *) ((&reload_obstack))->chunk) ? (((&reload_obstack))->next_free = ((&reload_obstack))->chunk_limit) : 0), ((&reload_obstack))->object_base = ((&reload_obstack))->next_free, ((((&reload_obstack))->temp) + (char *) 0)));
  for (chain = reload_insn_chain; chain != 0; chain = next)
    {
      rtx insn = chain->insn;
      next = chain->next;
      chain->n_reloads = 0;
      chain->need_elim = 0;
      chain->need_reload = 0;
      chain->need_operand_change = 0;
      if (((enum rtx_code) (insn)->code) == CODE_LABEL || ((enum rtx_code) (insn)->code) == JUMP_INSN
   || (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && (((insn)->u.fld[8]).rtx1) != 0))
 set_label_offsets (insn, insn, 0);
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   rtx old_body = (((insn)->u.fld[5]).rtx1);
   int old_code = (((insn)->u.fld[6]).rtint);
   rtx old_notes = (((insn)->u.fld[8]).rtx1);
   int did_elimination = 0;
   int operands_changed = 0;
   rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
   if (set && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
       && reg_renumber[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] < 0
       && reg_equiv_constant[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])
     continue;
   if (num_eliminable || num_eliminable_invariants)
     did_elimination = eliminate_regs_in_insn (insn, 0);
   operands_changed = find_reloads (insn, 0, spill_indirect_levels,
        global, spill_reg_order);
   if (flag_expensive_optimizations && n_reloads > 1)
     {
       rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
       if (set
    && (((set)->u.fld[1]).rtx1) == (((set)->u.fld[0]).rtx1)
    && (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == REG)
    && ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint) >= 53)
  {
    delete_insn (insn);
    if (chain->prev)
      chain->prev->next = next;
    else
      reload_insn_chain = next;
    if (next)
      next->prev = chain->prev;
    chain->next = unused_insn_chains;
    unused_insn_chains = chain;
    continue;
  }
     }
   if (num_eliminable)
     update_eliminable_offsets ();
   chain->need_elim = did_elimination;
   chain->need_reload = n_reloads > 0;
   chain->need_operand_change = operands_changed;
   if (did_elimination)
     {
       ( (&reload_obstack)->temp = (char *) (reload_insn_firstobj) - (char *) (&reload_obstack)->chunk, (((&reload_obstack)->temp > 0 && (&reload_obstack)->temp < (&reload_obstack)->chunk_limit - (char *) (&reload_obstack)->chunk) ? (int) ((&reload_obstack)->next_free = (&reload_obstack)->object_base = (&reload_obstack)->temp + (char *) (&reload_obstack)->chunk) : (((obstack_free) ((&reload_obstack), (&reload_obstack)->temp + (char *) (&reload_obstack)->chunk), 0), 0)));
       (((insn)->u.fld[5]).rtx1) = old_body;
       (((insn)->u.fld[6]).rtint) = old_code;
       (((insn)->u.fld[8]).rtx1) = old_notes;
       something_needs_elimination = 1;
     }
   something_needs_operands_changed |= operands_changed;
   if (n_reloads != 0)
     {
       copy_reloads (chain);
       *pprev_reload = chain;
       pprev_reload = &chain->next_need_reload;
     }
 }
    }
  *pprev_reload = 0;
}
static int
reload_reg_class_lower (const void *r1p, const void *r2p)
{
  int r1 = *(const short *) r1p, r2 = *(const short *) r2p;
  int t;
  t = rld[r1].optional - rld[r2].optional;
  if (t != 0)
    return t;
  t = ((reg_class_size[(int) rld[r2].class] == 1)
       - (reg_class_size[(int) rld[r1].class] == 1));
  if (t != 0)
    return t;
  t = rld[r2].nregs - rld[r1].nregs;
  if (t != 0)
    return t;
  t = (int) rld[r1].class - (int) rld[r2].class;
  if (t != 0)
    return t;
  return r1 - r2;
}
static int spill_cost_rl1[53];
static int spill_add_cost[53];
static void
count_pseudo (int reg)
{
  int freq = (((reg_n_info)->data.reg[reg])->freq);
  int r = reg_renumber[reg];
  int nregs;
  if (bitmap_bit_p (&pseudos_counted, reg)
      || bitmap_bit_p (&spilled_pseudos, reg))
    return;
  bitmap_set_bit (&pseudos_counted, reg);
  if (r < 0)
    abort ();
  spill_add_cost[r] += freq;
  nregs = hard_regno_nregs[r][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[reg])->mode)];
  while (nregs-- > 0)
    spill_cost_rl1[r + nregs] += freq;
}
static void
order_regs_for_reload (struct insn_chain *chain)
{
  int i;
  HARD_REG_SET used_by_pseudos;
  HARD_REG_SET used_by_pseudos2;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (bad_spill_regs), *scan_fp_ = (fixed_reg_set); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  memset (spill_cost_rl1, 0, sizeof spill_cost_rl1);
  memset (spill_add_cost, 0, sizeof spill_add_cost);
  do { do { HARD_REG_ELT_TYPE *scan_tp_ = (used_by_pseudos); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&used_by_pseudos, &chain->live_throughout); } while (0);
  do { do { HARD_REG_ELT_TYPE *scan_tp_ = (used_by_pseudos2); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&used_by_pseudos2, &chain->dead_or_set); } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (bad_spill_regs), *scan_fp_ = (used_by_pseudos); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (bad_spill_regs), *scan_fp_ = (used_by_pseudos2); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
  bitmap_clear (&pseudos_counted);
  do { bitmap_element *ptr_ = (&chain->live_throughout)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { count_pseudo (i); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
  do { bitmap_element *ptr_ = (&chain->dead_or_set)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { count_pseudo (i); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
  bitmap_clear (&pseudos_counted);
}
static short reload_order[(2 * 30 * (2 + 1))];
static HARD_REG_SET used_spill_regs_local;
static void
count_spilled_pseudo (int spilled, int spilled_nregs, int reg)
{
  int r = reg_renumber[reg];
  int nregs = hard_regno_nregs[r][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[reg])->mode)];
  if (bitmap_bit_p (&spilled_pseudos, reg)
      || spilled + spilled_nregs <= r || r + nregs <= spilled)
    return;
  bitmap_set_bit (&spilled_pseudos, reg);
  spill_add_cost[r] -= (((reg_n_info)->data.reg[reg])->freq);
  while (nregs-- > 0)
    spill_cost_rl1[r + nregs] -= (((reg_n_info)->data.reg[reg])->freq);
}
static int
find_reg_rl1 (struct insn_chain *chain, int order)
{
  int rnum = reload_order[order];
  struct reload *rl = rld + rnum;
  int best_cost = 2147483647;
  int best_reg = -1;
  unsigned int i, j;
  int k;
  HARD_REG_SET not_usable;
  HARD_REG_SET used_by_other_reload;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (not_usable), *scan_fp_ = (bad_spill_regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (not_usable), *scan_fp_ = (bad_spill_regs_global); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (not_usable), *scan_fp_ = (reg_class_contents[rl->class]); scan_tp_[0] |= ~ scan_fp_[0]; scan_tp_[1] |= ~ scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used_by_other_reload); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (k = 0; k < order; k++)
    {
      int other = reload_order[k];
      if (rld[other].regno >= 0 && reloads_conflict (other, rnum))
 for (j = 0; j < rld[other].nregs; j++)
   ((used_by_other_reload)[(rld[other].regno + j) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((rld[other].regno + j) % ((unsigned) (8 * 4))));
    }
  for (i = 0; i < 53; i++)
    {
      unsigned int regno = i;
      if (! (!!((not_usable)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
   && ! (!!((used_by_other_reload)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
   && ix86_hard_regno_mode_ok ((regno), (rl->mode)))
 {
   int this_cost = spill_cost_rl1[regno];
   int ok = 1;
   unsigned int this_nregs = hard_regno_nregs[regno][rl->mode];
   for (j = 1; j < this_nregs; j++)
     {
       this_cost += spill_add_cost[regno + j];
       if (((!!((not_usable)[(regno + j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + j) % ((unsigned) (8 * 4)))))))
    || (!!((used_by_other_reload)[(regno + j) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + j) % ((unsigned) (8 * 4)))))))
  ok = 0;
     }
   if (! ok)
     continue;
   if (rl->in && (((enum rtx_code) (rl->in)->code) == REG) && (((rl->in)->u.fld[0]).rtuint) == regno)
     this_cost--;
   if (rl->out && (((enum rtx_code) (rl->out)->code) == REG) && (((rl->out)->u.fld[0]).rtuint) == regno)
     this_cost--;
   if (this_cost < best_cost
       || (this_cost == best_cost
    && (inv_reg_alloc_order[regno]
        < inv_reg_alloc_order[best_reg])
    ))
     {
       best_reg = regno;
       best_cost = this_cost;
     }
 }
    }
  if (best_reg == -1)
    return 0;
  if (dump_file)
    fprintf (dump_file, "Using reg %d for reload %d\n", best_reg, rnum);
  rl->nregs = hard_regno_nregs[best_reg][rl->mode];
  rl->regno = best_reg;
  do { bitmap_element *ptr_ = (&chain->live_throughout)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { count_spilled_pseudo (best_reg, rl->nregs, j); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
  do { bitmap_element *ptr_ = (&chain->dead_or_set)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (j) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { count_spilled_pseudo (best_reg, rl->nregs, j); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
  for (i = 0; i < rl->nregs; i++)
    {
      if (spill_cost_rl1[best_reg + i] != 0
   || spill_add_cost[best_reg + i] != 0)
 abort ();
      ((used_spill_regs_local)[(best_reg + i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((best_reg + i) % ((unsigned) (8 * 4))));
    }
  return 1;
}
static void
find_reload_regs (struct insn_chain *chain)
{
  int i;
  for (i = 0; i < chain->n_reloads; i++)
    {
      if (chain->rld[i].reg_rtx)
 {
   int regno = (((chain->rld[i].reg_rtx)->u.fld[0]).rtuint);
   chain->rld[i].regno = regno;
   chain->rld[i].nregs
     = hard_regno_nregs[regno][((enum machine_mode) (chain->rld[i].reg_rtx)->mode)];
 }
      else
 chain->rld[i].regno = -1;
      reload_order[i] = i;
    }
  n_reloads = chain->n_reloads;
  memcpy (rld, chain->rld, n_reloads * sizeof (struct reload));
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used_spill_regs_local); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if (dump_file)
    fprintf (dump_file, "Spilling for insn %d.\n", (((chain->insn)->u.fld[0]).rtint));
  qsort (reload_order, n_reloads, sizeof (short), reload_reg_class_lower);
  order_regs_for_reload (chain);
  for (i = 0; i < n_reloads; i++)
    {
      int r = reload_order[i];
      if ((rld[r].out != 0 || rld[r].in != 0 || rld[r].secondary_p)
   && ! rld[r].optional
   && rld[r].regno == -1)
 if (! find_reg_rl1 (chain, i))
   {
     spill_failure (chain->insn, rld[r].class);
     failure = 1;
     return;
   }
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (chain->used_spill_regs), *scan_fp_ = (used_spill_regs_local); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (used_spill_regs), *scan_fp_ = (used_spill_regs_local); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
  memcpy (chain->rld, rld, n_reloads * sizeof (struct reload));
}
static void
select_reload_regs (void)
{
  struct insn_chain *chain;
  for (chain = insns_need_reload; chain != 0;
       chain = chain->next_need_reload)
    find_reload_regs (chain);
}
static void
delete_caller_save_insns (void)
{
  struct insn_chain *c = reload_insn_chain;
  while (c != 0)
    {
      while (c != 0 && c->is_caller_save_insn)
 {
   struct insn_chain *next = c->next;
   rtx insn = c->insn;
   if (c == reload_insn_chain)
     reload_insn_chain = next;
   delete_insn (insn);
   if (next)
     next->prev = c->prev;
   if (c->prev)
     c->prev->next = next;
   c->next = unused_insn_chains;
   unused_insn_chains = c;
   c = next;
 }
      if (c != 0)
 c = c->next;
    }
}
static void
spill_failure (rtx insn, enum reg_class class)
{
  static const char *const reg_class_names[] = { "NO_REGS", "AREG", "DREG", "CREG", "BREG", "SIREG", "DIREG", "AD_REGS", "Q_REGS", "NON_Q_REGS", "INDEX_REGS", "LEGACY_REGS", "GENERAL_REGS", "FP_TOP_REG", "FP_SECOND_REG", "FLOAT_REGS", "SSE_REGS", "MMX_REGS", "FP_TOP_SSE_REGS", "FP_SECOND_SSE_REGS", "FLOAT_SSE_REGS", "FLOAT_INT_REGS", "INT_SSE_REGS", "FLOAT_INT_SSE_REGS", "ALL_REGS" };
  if (asm_noperands ((((insn)->u.fld[5]).rtx1)) >= 0)
    error_for_asm (insn, "can't find a register in class `%s' while reloading `asm'",
     reg_class_names[class]);
  else
    {
      error ("unable to find a register to spill in class `%s'",
      reg_class_names[class]);
      _fatal_insn ("this is the insn:", insn, "gcc.c", 610300, "?");
    }
}
static void
delete_dead_insn (rtx insn)
{
  rtx prev = prev_real_insn (insn);
  rtx prev_dest;
  if (prev && ((enum rtx_code) ((((prev)->u.fld[5]).rtx1))->code) == SET
      && (prev_dest = ((((((prev)->u.fld[5]).rtx1))->u.fld[0]).rtx1), (((enum rtx_code) (prev_dest)->code) == REG))
      && reg_mentioned_p (prev_dest, (((insn)->u.fld[5]).rtx1))
      && find_regno_note (insn, REG_DEAD, (((prev_dest)->u.fld[0]).rtuint))
      && ! side_effects_p (((((((prev)->u.fld[5]).rtx1))->u.fld[1]).rtx1)))
    delete_dead_insn (prev);
  (((insn)->code = (NOTE)), (((insn)->u.fld[4]).rtstr) = 0, (((insn)->u.fld[5]).rtint) = NOTE_INSN_DELETED);
}
static void
alter_reg (int i, int from_reg)
{
  if ((cfun->emit->x_regno_reg_rtx)[i] == 0)
    return;
  if (!(((enum rtx_code) ((cfun->emit->x_regno_reg_rtx)[i])->code) == REG))
    return;
  ((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[0]).rtuint)
    = reg_renumber[i] >= 0 ? reg_renumber[i] : i;
  if (reg_renumber[i] < 0
      && (((reg_n_info)->data.reg[i])->refs) > 0
      && reg_equiv_constant[i] == 0
      && reg_equiv_memory_loc[i] == 0)
    {
      rtx x;
      unsigned int inherent_size = ((unsigned short) mode_size[((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode)]);
      unsigned int total_size = ((inherent_size) > (reg_max_ref_width[i]) ? (inherent_size) : (reg_max_ref_width[i]));
      int adjust = 0;
      if (from_reg == -1)
 {
   x = assign_stack_local (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode), total_size,
      inherent_size == total_size ? 0 : -1);
   if (0)
     adjust = inherent_size - total_size;
   (((x))->unchanging) = ((((cfun->emit->x_regno_reg_rtx)[i]))->unchanging);
   set_mem_alias_set (x, new_alias_set ());
 }
      else if (spill_stack_slot[from_reg] != 0
        && spill_stack_slot_width[from_reg] >= total_size
        && (((unsigned short) mode_size[((enum machine_mode) (spill_stack_slot[from_reg])->mode)])
     >= inherent_size))
 x = spill_stack_slot[from_reg];
      else
 {
   enum machine_mode mode = ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode);
   rtx stack_slot;
   if (spill_stack_slot[from_reg])
     {
       if (((unsigned short) mode_size[((enum machine_mode) (spill_stack_slot[from_reg])->mode)])
    > inherent_size)
  mode = ((enum machine_mode) (spill_stack_slot[from_reg])->mode);
       if (spill_stack_slot_width[from_reg] > total_size)
  total_size = spill_stack_slot_width[from_reg];
     }
   x = assign_stack_local (mode, total_size,
      inherent_size == total_size ? 0 : -1);
   stack_slot = x;
   if (spill_stack_slot[from_reg])
     set_mem_alias_set (x, ((((spill_stack_slot[from_reg])->u.fld[1]).rtmem) == 0 ? 0 : (((spill_stack_slot[from_reg])->u.fld[1]).rtmem)->alias));
   else
     set_mem_alias_set (x, new_alias_set ());
   if (0)
     {
       adjust = ((unsigned short) mode_size[mode]) - total_size;
       if (adjust)
  stack_slot
    = adjust_address_1 (x, mode_for_size (total_size * 8, MODE_INT, 1), adjust, 0, 1)
                  ;
     }
   spill_stack_slot[from_reg] = stack_slot;
   spill_stack_slot_width[from_reg] = total_size;
 }
      if (0 && inherent_size < total_size)
 adjust += (total_size - inherent_size);
      x = adjust_address_1 (x, ((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode), adjust, 0, 1);
      if ((((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg) == 0 ? 0 : ((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg)->decl)
   && tree_code_type[(int) (((enum tree_code) ((((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg) == 0 ? 0 : ((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg)->decl))->common.code))] == 'd')
 {
   rtx decl = ((((((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg) == 0 ? 0 : ((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg)->decl))->decl.rtl != ((void *)0)) ? (((((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg) == 0 ? 0 : ((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg)->decl))->decl.rtl ? ((((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg) == 0 ? 0 : ((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg)->decl))->decl.rtl : (make_decl_rtl ((((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg) == 0 ? 0 : ((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg)->decl), ((void *)0)), ((((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg) == 0 ? 0 : ((((cfun->emit->x_regno_reg_rtx)[i])->u.fld[2]).rtreg)->decl))->decl.rtl)) : ((void *)0));
   if (decl && (((enum rtx_code) (decl)->code) == REG) && (((decl)->u.fld[0]).rtuint) == (unsigned) i)
     {
       if (from_reg != -1 && spill_stack_slot[from_reg] == x)
  x = copy_rtx (x);
       set_mem_attrs_from_reg (x, (cfun->emit->x_regno_reg_rtx)[i]);
     }
 }
      reg_equiv_memory_loc[i] = x;
    }
}
void
mark_home_live (int regno)
{
  int i, lim;
  i = reg_renumber[regno];
  if (i < 0)
    return;
  lim = i + hard_regno_nregs[i][((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[regno])->mode)];
  while (i < lim)
    regs_ever_live[i++] = 1;
}
static void
set_label_offsets (rtx x, rtx insn, int initial_p)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  rtx tem;
  unsigned int i;
  struct elim_table *p;
  switch (code)
    {
    case LABEL_REF:
      if ((((x))->volatil))
 return;
      x = (((x)->u.fld[0]).rtx1);
    case CODE_LABEL:
      if (! offsets_known_at[(((x)->u.fld[6]).rtint) - first_label_num])
 {
   for (i = 0; i < (sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0])); i++)
     offsets_at[(((x)->u.fld[6]).rtint) - first_label_num][i]
       = (initial_p ? reg_eliminate[i].initial_offset
   : reg_eliminate[i].offset);
   offsets_known_at[(((x)->u.fld[6]).rtint) - first_label_num] = 1;
 }
      else if (x == insn
        && (tem = prev_nonnote_insn (insn)) != 0
        && ((enum rtx_code) (tem)->code) == BARRIER)
 set_offsets_for_label (insn);
      else
 for (i = 0; i < (sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0])); i++)
   if (offsets_at[(((x)->u.fld[6]).rtint) - first_label_num][i]
       != (initial_p ? reg_eliminate[i].initial_offset
    : reg_eliminate[i].offset))
     reg_eliminate[i].can_eliminate = 0;
      return;
    case JUMP_INSN:
      set_label_offsets ((((insn)->u.fld[5]).rtx1), insn, initial_p);
    case INSN:
    case CALL_INSN:
      for (tem = (((x)->u.fld[8]).rtx1); tem; tem = (((tem)->u.fld[1]).rtx1))
 if (((enum reg_note) ((enum machine_mode) (tem)->mode)) == REG_LABEL)
   set_label_offsets ((((tem)->u.fld[0]).rtx1), insn, 1);
      return;
    case PARALLEL:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      for (i = 0; i < (unsigned) (((((x)->u.fld[code == ADDR_DIFF_VEC]).rtvec1))->num_elem); i++)
 set_label_offsets ((((((x)->u.fld[code == ADDR_DIFF_VEC]).rtvec1))->elem[i]),
      insn, initial_p);
      return;
    case SET:
      if ((((x)->u.fld[0]).rtx1) != (global_rtl[GR_PC]))
 return;
      switch (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))
 {
 case PC:
 case RETURN:
   return;
 case LABEL_REF:
   set_label_offsets (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1), insn, initial_p);
   return;
 case IF_THEN_ELSE:
   tem = ((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
   if (((enum rtx_code) (tem)->code) == LABEL_REF)
     set_label_offsets ((((tem)->u.fld[0]).rtx1), insn, initial_p);
   else if (((enum rtx_code) (tem)->code) != PC && ((enum rtx_code) (tem)->code) != RETURN)
     break;
   tem = ((((((x)->u.fld[1]).rtx1))->u.fld[2]).rtx1);
   if (((enum rtx_code) (tem)->code) == LABEL_REF)
     set_label_offsets ((((tem)->u.fld[0]).rtx1), insn, initial_p);
   else if (((enum rtx_code) (tem)->code) != PC && ((enum rtx_code) (tem)->code) != RETURN)
     break;
   return;
 default:
   break;
 }
      for (p = reg_eliminate; p < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; p++)
 if (p->offset != p->initial_offset)
   p->can_eliminate = 0;
      break;
    default:
      break;
    }
}
rtx
eliminate_regs (rtx x, enum machine_mode mem_mode, rtx insn)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  struct elim_table *ep;
  int regno;
  rtx new;
  int i, j;
  const char *fmt;
  int copied = 0;
  if (! current_function_decl)
    return x;
  switch (code)
    {
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CONST:
    case SYMBOL_REF:
    case CODE_LABEL:
    case PC:
    case CC0:
    case ASM_INPUT:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
    case RETURN:
      return x;
    case REG:
      regno = (((x)->u.fld[0]).rtuint);
      if (regno < 53)
 {
   for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))];
        ep++)
     if (ep->from_rtx == x && ep->can_eliminate)
       return plus_constant_wide ((ep->to_rtx), (long) (ep->previous_offset));
 }
      else if (reg_renumber && reg_renumber[regno] < 0
        && reg_equiv_constant && reg_equiv_constant[regno]
        && ! ((rtx_class[(int) (((enum rtx_code) (reg_equiv_constant[regno])->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (reg_equiv_constant[regno])->code) == CONST_VECTOR))
 return eliminate_regs (copy_rtx (reg_equiv_constant[regno]),
          mem_mode, insn);
      return x;
    case PLUS:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
   && ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
 {
   for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))];
        ep++)
     if (ep->from_rtx == (((x)->u.fld[0]).rtx1) && ep->can_eliminate)
       {
  if (mem_mode != 0 && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
      && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) == - ep->previous_offset)
    return ep->to_rtx;
  else
    return gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (ep->to_rtx), (plus_constant_wide (((((x)->u.fld[1]).rtx1)), (long) (ep->previous_offset))))
                                 ;
       }
   return x;
 }
      {
 rtx new0 = eliminate_regs ((((x)->u.fld[0]).rtx1), mem_mode, insn);
 rtx new1 = eliminate_regs ((((x)->u.fld[1]).rtx1), mem_mode, insn);
 if (reg_renumber && (new0 != (((x)->u.fld[0]).rtx1) || new1 != (((x)->u.fld[1]).rtx1)))
   {
     if (((enum rtx_code) (new0)->code) == PLUS && (((enum rtx_code) (new1)->code) == REG)
  && (((new1)->u.fld[0]).rtuint) >= 53
  && reg_renumber[(((new1)->u.fld[0]).rtuint)] < 0
  && reg_equiv_constant != 0
  && reg_equiv_constant[(((new1)->u.fld[0]).rtuint)] != 0)
       new1 = reg_equiv_constant[(((new1)->u.fld[0]).rtuint)];
     else if (((enum rtx_code) (new1)->code) == PLUS && (((enum rtx_code) (new0)->code) == REG)
       && (((new0)->u.fld[0]).rtuint) >= 53
       && reg_renumber[(((new0)->u.fld[0]).rtuint)] < 0
       && reg_equiv_constant[(((new0)->u.fld[0]).rtuint)] != 0)
       new0 = reg_equiv_constant[(((new0)->u.fld[0]).rtuint)];
     new = form_sum (new0, new1);
     if (! mem_mode && ((enum rtx_code) (new)->code) != PLUS)
       return gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (x)->mode)), (new), ((const_int_rtx[64])));
     else
       return new;
   }
      }
      return x;
    case MULT:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
   && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
 for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))];
      ep++)
   if (ep->from_rtx == (((x)->u.fld[0]).rtx1) && ep->can_eliminate)
     {
       if (! mem_mode
    && ! (insn != 0 && (((enum rtx_code) (insn)->code) == EXPR_LIST
          || ((enum rtx_code) (insn)->code) == INSN_LIST)))
  ep->ref_outside_mem = 1;
       return
  plus_constant_wide ((gen_rtx_fmt_ee (MULT, ((0 ? DImode : SImode)), (ep->to_rtx), ((((x)->u.fld[1]).rtx1)))), (long) (ep->previous_offset * (((((x)->u.fld[1]).rtx1))->u.hwint[0])))
                                                     ;
     }
    case CALL:
    case COMPARE:
    case MINUS:
    case DIV: case UDIV:
    case MOD: case UMOD:
    case AND: case IOR: case XOR:
    case ROTATERT: case ROTATE:
    case ASHIFTRT: case LSHIFTRT: case ASHIFT:
    case NE: case EQ:
    case GE: case GT: case GEU: case GTU:
    case LE: case LT: case LEU: case LTU:
      {
 rtx new0 = eliminate_regs ((((x)->u.fld[0]).rtx1), mem_mode, insn);
 rtx new1
   = (((x)->u.fld[1]).rtx1) ? eliminate_regs ((((x)->u.fld[1]).rtx1), mem_mode, insn) : 0;
 if (new0 != (((x)->u.fld[0]).rtx1) || new1 != (((x)->u.fld[1]).rtx1))
   return gen_rtx_fmt_ee (code, ((enum machine_mode) (x)->mode), new0, new1);
      }
      return x;
    case EXPR_LIST:
      if ((((x)->u.fld[0]).rtx1))
 {
   new = eliminate_regs ((((x)->u.fld[0]).rtx1), mem_mode, insn);
   if (new != (((x)->u.fld[0]).rtx1))
     {
       if (((enum machine_mode) (x)->mode) == REG_DEAD)
  return ((((x)->u.fld[1]).rtx1)
   ? eliminate_regs ((((x)->u.fld[1]).rtx1), mem_mode, insn)
   : (rtx) 0);
       x = gen_rtx_fmt_ee (EXPR_LIST, (((enum reg_note) ((enum machine_mode) (x)->mode))), (new), ((((x)->u.fld[1]).rtx1)));
     }
 }
    case INSN_LIST:
      if ((((x)->u.fld[1]).rtx1))
 {
   new = eliminate_regs ((((x)->u.fld[1]).rtx1), mem_mode, insn);
   if (new != (((x)->u.fld[1]).rtx1))
     return
       gen_rtx_fmt_ee (((enum rtx_code) (x)->code), ((enum machine_mode) (x)->mode), (((x)->u.fld[0]).rtx1), new);
 }
      return x;
    case PRE_INC:
    case POST_INC:
    case PRE_DEC:
    case POST_DEC:
    case STRICT_LOW_PART:
    case NEG: case NOT:
    case SIGN_EXTEND: case ZERO_EXTEND:
    case TRUNCATE: case FLOAT_EXTEND: case FLOAT_TRUNCATE:
    case FLOAT: case FIX:
    case UNSIGNED_FIX: case UNSIGNED_FLOAT:
    case ABS:
    case SQRT:
    case FFS:
    case CLZ:
    case CTZ:
    case POPCOUNT:
    case PARITY:
      new = eliminate_regs ((((x)->u.fld[0]).rtx1), mem_mode, insn);
      if (new != (((x)->u.fld[0]).rtx1))
 return gen_rtx_fmt_e (code, ((enum machine_mode) (x)->mode), new);
      return x;
    case SUBREG:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])
       <= ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]))
   && reg_equiv_memory_loc != 0
   && reg_equiv_memory_loc[((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] != 0)
 {
   new = (((x)->u.fld[0]).rtx1);
 }
      else
 new = eliminate_regs ((((x)->u.fld[0]).rtx1), mem_mode, insn);
      if (new != (((x)->u.fld[0]).rtx1))
 {
   int x_size = ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]);
   int new_size = ((unsigned short) mode_size[((enum machine_mode) (new)->mode)]);
   if ((((enum rtx_code) (new)->code) == MEM)
       && ((x_size < new_size
     )
    || x_size == new_size)
       )
     return adjust_address_1 (new, ((enum machine_mode) (x)->mode), (((x)->u.fld[1]).rtuint), 0, 1);
   else
     return gen_rtx_SUBREG (((enum machine_mode) (x)->mode), new, (((x)->u.fld[1]).rtuint));
 }
      return x;
    case MEM:
      return
 replace_equiv_address_nv (x,
      eliminate_regs ((((x)->u.fld[0]).rtx1),
        ((enum machine_mode) (x)->mode), insn));
    case USE:
      new = eliminate_regs ((((x)->u.fld[0]).rtx1), 0, insn);
      if (new != (((x)->u.fld[0]).rtx1))
 return gen_rtx_fmt_e (USE, (((enum machine_mode) (x)->mode)), (new));
      return x;
    case CLOBBER:
    case ASM_OPERANDS:
    case SET:
      abort ();
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++, fmt++)
    {
      if (*fmt == 'e')
 {
   new = eliminate_regs ((((x)->u.fld[i]).rtx1), mem_mode, insn);
   if (new != (((x)->u.fld[i]).rtx1) && ! copied)
     {
       rtx new_x = rtx_alloc_stat (code );
       memcpy (new_x, x, rtx_size[code]);
       x = new_x;
       copied = 1;
     }
   (((x)->u.fld[i]).rtx1) = new;
 }
      else if (*fmt == 'E')
 {
   int copied_vec = 0;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     {
       new = eliminate_regs ((((((x)->u.fld[i]).rtvec1))->elem[j]), mem_mode, insn);
       if (new != (((((x)->u.fld[i]).rtvec1))->elem[j]) && ! copied_vec)
  {
    rtvec new_v = gen_rtvec_v ((((((x)->u.fld[i]).rtvec1))->num_elem),
          (((x)->u.fld[i]).rtvec1)->elem);
    if (! copied)
      {
        rtx new_x = rtx_alloc_stat (code );
        memcpy (new_x, x, rtx_size[code]);
        x = new_x;
        copied = 1;
      }
    (((x)->u.fld[i]).rtvec1) = new_v;
    copied_vec = 1;
  }
       (((((x)->u.fld[i]).rtvec1))->elem[j]) = new;
     }
 }
    }
  return x;
}
static void
elimination_effects (rtx x, enum machine_mode mem_mode)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  struct elim_table *ep;
  int regno;
  int i, j;
  const char *fmt;
  switch (code)
    {
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CONST:
    case SYMBOL_REF:
    case CODE_LABEL:
    case PC:
    case CC0:
    case ASM_INPUT:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
    case RETURN:
      return;
    case REG:
      regno = (((x)->u.fld[0]).rtuint);
      if (regno < 53)
 {
   for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))];
        ep++)
     if (ep->from_rtx == x && ep->can_eliminate)
       {
  if (! mem_mode)
    ep->ref_outside_mem = 1;
  return;
       }
 }
      else if (reg_renumber[regno] < 0 && reg_equiv_constant
        && reg_equiv_constant[regno]
        && ! function_invariant_p (reg_equiv_constant[regno]))
 elimination_effects (reg_equiv_constant[regno], mem_mode);
      return;
    case PRE_INC:
    case POST_INC:
    case PRE_DEC:
    case POST_DEC:
    case POST_MODIFY:
    case PRE_MODIFY:
      for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
 if (ep->to_rtx == (((x)->u.fld[0]).rtx1))
   {
     int size = ((unsigned short) mode_size[mem_mode]);
     if (ep->to_rtx == (global_rtl[GR_STACK_POINTER]))
       size = (0 ? (((size) + 7) & (-8)) : (((size) + 1) & (-2)));
     if (code == PRE_DEC || code == POST_DEC)
       ep->offset += size;
     else if (code == PRE_INC || code == POST_INC)
       ep->offset -= size;
     else if ((code == PRE_MODIFY || code == POST_MODIFY)
       && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == PLUS
       && (((x)->u.fld[0]).rtx1) == ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1)
       && ((rtx_class[(int) (((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_VECTOR))
       ep->offset -= ((((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
   }
      if (code == POST_MODIFY || code == PRE_MODIFY)
 break;
    case STRICT_LOW_PART:
    case NEG: case NOT:
    case SIGN_EXTEND: case ZERO_EXTEND:
    case TRUNCATE: case FLOAT_EXTEND: case FLOAT_TRUNCATE:
    case FLOAT: case FIX:
    case UNSIGNED_FIX: case UNSIGNED_FLOAT:
    case ABS:
    case SQRT:
    case FFS:
    case CLZ:
    case CTZ:
    case POPCOUNT:
    case PARITY:
      elimination_effects ((((x)->u.fld[0]).rtx1), mem_mode);
      return;
    case SUBREG:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])
       <= ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]))
   && reg_equiv_memory_loc != 0
   && reg_equiv_memory_loc[((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] != 0)
 return;
      elimination_effects ((((x)->u.fld[0]).rtx1), mem_mode);
      return;
    case USE:
      for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
 if (ep->from_rtx == (((x)->u.fld[0]).rtx1))
   ep->can_eliminate = 0;
      elimination_effects ((((x)->u.fld[0]).rtx1), mem_mode);
      return;
    case CLOBBER:
      for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
 if (ep->to_rtx == (((x)->u.fld[0]).rtx1))
   ep->can_eliminate = 0;
      elimination_effects ((((x)->u.fld[0]).rtx1), mem_mode);
      return;
    case SET:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 {
   for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))];
        ep++)
     if (ep->to_rtx == (((x)->u.fld[0]).rtx1)
  && (((x)->u.fld[0]).rtx1) != (global_rtl[GR_HARD_FRAME_POINTER]))
       {
  rtx src = (((x)->u.fld[1]).rtx1);
  if (((enum rtx_code) (src)->code) == PLUS
      && (((src)->u.fld[0]).rtx1) == (((x)->u.fld[0]).rtx1)
      && ((enum rtx_code) ((((src)->u.fld[1]).rtx1))->code) == CONST_INT)
    ep->offset -= (((((src)->u.fld[1]).rtx1))->u.hwint[0]);
  else
    ep->can_eliminate = 0;
       }
 }
      elimination_effects ((((x)->u.fld[0]).rtx1), 0);
      elimination_effects ((((x)->u.fld[1]).rtx1), 0);
      return;
    case MEM:
      elimination_effects ((((x)->u.fld[0]).rtx1), ((enum machine_mode) (x)->mode));
      return;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++, fmt++)
    {
      if (*fmt == 'e')
 elimination_effects ((((x)->u.fld[i]).rtx1), mem_mode);
      else if (*fmt == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   elimination_effects ((((((x)->u.fld[i]).rtvec1))->elem[j]), mem_mode);
    }
}
static void
check_eliminable_occurrences (rtx x)
{
  const char *fmt;
  int i;
  enum rtx_code code;
  if (x == 0)
    return;
  code = ((enum rtx_code) (x)->code);
  if (code == REG && (((x)->u.fld[0]).rtuint) < 53)
    {
      struct elim_table *ep;
      for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
 if (ep->from_rtx == x)
   ep->can_eliminate = 0;
      return;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++, fmt++)
    {
      if (*fmt == 'e')
 check_eliminable_occurrences ((((x)->u.fld[i]).rtx1));
      else if (*fmt == 'E')
 {
   int j;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     check_eliminable_occurrences ((((((x)->u.fld[i]).rtvec1))->elem[j]));
 }
    }
}
static int
eliminate_regs_in_insn (rtx insn, int replace)
{
  int icode = ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn));
  rtx old_body = (((insn)->u.fld[5]).rtx1);
  int insn_is_asm = asm_noperands (old_body) >= 0;
  rtx old_set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  rtx new_body;
  int val = 0;
  int i;
  rtx substed_operand[30];
  rtx orig_operand[30];
  struct elim_table *ep;
  rtx plus_src;
  if (! insn_is_asm && icode < 0)
    {
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE
   || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER
   || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_VEC
   || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC
   || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ASM_INPUT)
 return 0;
      abort ();
    }
  if (old_set != 0 && (((enum rtx_code) ((((old_set)->u.fld[0]).rtx1))->code) == REG)
      && ((((((old_set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
    {
      for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
 if (ep->from_rtx == (((old_set)->u.fld[0]).rtx1) && ep->can_eliminate)
   {
     if (ep->from == 20
  && ep->to == 6)
       {
  rtx base = (((old_set)->u.fld[1]).rtx1);
  rtx base_insn = insn;
  long offset = 0;
  while (base != ep->to_rtx)
    {
      rtx prev_insn, prev_set;
      if (((enum rtx_code) (base)->code) == PLUS
          && ((enum rtx_code) ((((base)->u.fld[1]).rtx1))->code) == CONST_INT)
        {
          offset += (((((base)->u.fld[1]).rtx1))->u.hwint[0]);
          base = (((base)->u.fld[0]).rtx1);
        }
      else if ((prev_insn = prev_nonnote_insn (base_insn)) != 0
        && (prev_set = (((((enum rtx_code) (prev_insn)->code) == INSN) || (((enum rtx_code) (prev_insn)->code) == JUMP_INSN) || (((enum rtx_code) (prev_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((prev_insn)->u.fld[5]).rtx1))->code) == SET ? (((prev_insn)->u.fld[5]).rtx1) : single_set_2 (prev_insn, (((prev_insn)->u.fld[5]).rtx1))) : (rtx) 0)) != 0
        && rtx_equal_p ((((prev_set)->u.fld[0]).rtx1), base))
        {
          base = (((prev_set)->u.fld[1]).rtx1);
          base_insn = prev_insn;
        }
      else
        break;
    }
  if (base == ep->to_rtx)
    {
      rtx src
        = plus_constant_wide ((ep->to_rtx), (long) (offset - ep->offset));
      new_body = old_body;
      if (! replace)
        {
   new_body = copy_insn (old_body);
   if ((((insn)->u.fld[8]).rtx1))
     (((insn)->u.fld[8]).rtx1) = copy_insn_1 ((((insn)->u.fld[8]).rtx1));
        }
      (((insn)->u.fld[5]).rtx1) = new_body;
      old_set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
      validate_change (insn, &(((old_set)->u.fld[1]).rtx1), src, 1);
      validate_change (insn, &(((old_set)->u.fld[0]).rtx1),
         ep->to_rtx, 1);
      if (! apply_change_group ())
        {
   (((old_set)->u.fld[1]).rtx1) = src;
   (((old_set)->u.fld[0]).rtx1) = ep->to_rtx;
        }
      val = 1;
      goto done;
    }
       }
     if (replace)
       {
  delete_dead_insn (insn);
  return 1;
       }
     val = 1;
     goto done;
   }
    }
  plus_src = 0;
  if (old_set && (((enum rtx_code) ((((old_set)->u.fld[0]).rtx1))->code) == REG))
    {
      if (((enum rtx_code) ((((old_set)->u.fld[1]).rtx1))->code) == PLUS
   && (((enum rtx_code) (((((((old_set)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code) == REG)
   && ((enum rtx_code) (((((((old_set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((((((old_set)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
 plus_src = (((old_set)->u.fld[1]).rtx1);
      else if ((((enum rtx_code) ((((old_set)->u.fld[1]).rtx1))->code) == REG))
 {
   rtx links;
   for (links = (((insn)->u.fld[8]).rtx1); links; links = (((links)->u.fld[1]).rtx1))
     {
       if (((enum reg_note) ((enum machine_mode) (links)->mode)) == REG_EQUAL
    && ((enum rtx_code) ((((links)->u.fld[0]).rtx1))->code) == PLUS
    && (((enum rtx_code) (((((((links)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG)
    && ((enum rtx_code) (((((((links)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
    && (((((((((links)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
  {
    plus_src = (((links)->u.fld[0]).rtx1);
    break;
  }
     }
 }
    }
  if (plus_src)
    {
      rtx reg = (((plus_src)->u.fld[0]).rtx1);
      long offset = (((((plus_src)->u.fld[1]).rtx1))->u.hwint[0]);
      for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
 if (ep->from_rtx == reg && ep->can_eliminate)
   {
     offset += ep->offset;
     if (offset == 0)
       {
  int num_clobbers;
  (((insn)->u.fld[5]).rtx1) = gen_rtx_fmt_ee (SET, (VOIDmode), ((((old_set)->u.fld[0]).rtx1)), (ep->to_rtx))
                      ;
  num_clobbers = 0;
  (((insn)->u.fld[6]).rtint) = recog ((((insn)->u.fld[5]).rtx1), insn, &num_clobbers);
  if (num_clobbers)
    {
      rtvec vec = rtvec_alloc (num_clobbers + 1);
      vec->elem[0] = (((insn)->u.fld[5]).rtx1);
      (((insn)->u.fld[5]).rtx1) = gen_rtx_fmt_E (PARALLEL, (VOIDmode), (vec));
      add_clobbers ((((insn)->u.fld[5]).rtx1), (((insn)->u.fld[6]).rtint));
    }
  if ((((insn)->u.fld[6]).rtint) < 0)
    abort ();
       }
     else if ((((old_set)->u.fld[1]).rtx1) == plus_src)
       {
  new_body = old_body;
  if (! replace)
    {
      new_body = copy_insn (old_body);
      if ((((insn)->u.fld[8]).rtx1))
        (((insn)->u.fld[8]).rtx1) = copy_insn_1 ((((insn)->u.fld[8]).rtx1));
    }
  (((insn)->u.fld[5]).rtx1) = new_body;
  old_set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  ((((((old_set)->u.fld[1]).rtx1))->u.fld[0]).rtx1) = ep->to_rtx;
  ((((((old_set)->u.fld[1]).rtx1))->u.fld[1]).rtx1) = gen_rtx_CONST_INT (VOIDmode, (long) (offset));
       }
     else
       break;
     val = 1;
     goto done;
   }
    }
  elimination_effects (old_body, 0);
  extract_insn (insn);
  for (i = 0; i < recog_data.n_operands; i++)
    {
      orig_operand[i] = recog_data.operand[i];
      substed_operand[i] = recog_data.operand[i];
      if (insn_is_asm || insn_data[icode].operand[i].eliminable)
 {
   if (recog_data.operand_type[i] != OP_IN
       && (((enum rtx_code) (orig_operand[i])->code) == REG))
     {
       for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))];
     ep++)
  if (ep->from_rtx == orig_operand[i])
    ep->can_eliminate = 0;
     }
   substed_operand[i] = eliminate_regs (recog_data.operand[i], 0,
            replace ? insn : (rtx) 0);
   if (substed_operand[i] != orig_operand[i])
     val = 1;
   *recog_data.operand_loc[i] = 0;
   if (recog_data.operand_type[i] != OP_IN
       && (((enum rtx_code) (orig_operand[i])->code) == REG)
       && (((enum rtx_code) (substed_operand[i])->code) == MEM)
       && replace)
     emit_insn_after (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (orig_operand[i])),
        insn);
 }
    }
  for (i = 0; i < recog_data.n_dups; i++)
    *recog_data.dup_loc[i]
      = *recog_data.operand_loc[(int) recog_data.dup_num[i]];
  check_eliminable_occurrences (old_body);
  for (i = 0; i < recog_data.n_operands; i++)
    *recog_data.operand_loc[i] = substed_operand[i];
  for (i = 0; i < recog_data.n_dups; i++)
    *recog_data.dup_loc[i] = substed_operand[(int) recog_data.dup_num[i]];
  if (val)
    {
      new_body = old_body;
      if (! replace)
 {
   new_body = copy_insn (old_body);
   if ((((insn)->u.fld[8]).rtx1))
     (((insn)->u.fld[8]).rtx1) = copy_insn_1 ((((insn)->u.fld[8]).rtx1));
 }
      (((insn)->u.fld[5]).rtx1) = new_body;
      if (! insn_is_asm
   && old_set != 0
   && (((((enum rtx_code) ((((old_set)->u.fld[1]).rtx1))->code) == REG)
        && (((enum rtx_code) (new_body)->code) != SET
     || !(((enum rtx_code) ((((new_body)->u.fld[1]).rtx1))->code) == REG)))
       || (old_set != 0
    && (((((enum rtx_code) ((((old_set)->u.fld[1]).rtx1))->code) == MEM)
         && (((old_set)->u.fld[1]).rtx1) != recog_data.operand[1])
        || ((((enum rtx_code) ((((old_set)->u.fld[0]).rtx1))->code) == MEM)
     && (((old_set)->u.fld[0]).rtx1) != recog_data.operand[0])))
       || ((enum rtx_code) ((((old_set)->u.fld[1]).rtx1))->code) == PLUS))
 {
   int new_icode = recog ((((insn)->u.fld[5]).rtx1), insn, 0);
   if (new_icode < 0)
     (((insn)->u.fld[6]).rtint) = icode;
 }
    }
  if (! replace)
    {
      for (i = 0; i < recog_data.n_operands; i++)
 *recog_data.operand_loc[i] = orig_operand[i];
      for (i = 0; i < recog_data.n_dups; i++)
 *recog_data.dup_loc[i] = orig_operand[(int) recog_data.dup_num[i]];
    }
  for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
    {
      if (ep->previous_offset != ep->offset && ep->ref_outside_mem)
 ep->can_eliminate = 0;
      ep->ref_outside_mem = 0;
      if (ep->previous_offset != ep->offset)
 val = 1;
    }
 done:
  if (val && (((insn)->u.fld[8]).rtx1) != 0)
    (((insn)->u.fld[8]).rtx1) = eliminate_regs ((((insn)->u.fld[8]).rtx1), 0, (((insn)->u.fld[8]).rtx1));
  return val;
}
static void
update_eliminable_offsets (void)
{
  struct elim_table *ep;
  num_not_at_initial_offset = 0;
  for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
    {
      ep->previous_offset = ep->offset;
      if (ep->can_eliminate && ep->offset != ep->initial_offset)
 num_not_at_initial_offset++;
    }
}
static void
mark_not_eliminable (rtx dest, rtx x, void *data )
{
  unsigned int i;
  if (((enum rtx_code) (dest)->code) == SUBREG)
    dest = (((dest)->u.fld[0]).rtx1);
  if (dest == (global_rtl[GR_HARD_FRAME_POINTER]))
    return;
  for (i = 0; i < (sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0])); i++)
    if (reg_eliminate[i].can_eliminate && dest == reg_eliminate[i].to_rtx
 && (((enum rtx_code) (x)->code) != SET
     || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != PLUS
     || ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1) != dest
     || ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) != CONST_INT))
      {
 reg_eliminate[i].can_eliminate_previous
   = reg_eliminate[i].can_eliminate = 0;
 num_eliminable--;
      }
}
static void
verify_initial_elim_offsets (void)
{
  long t;
  struct elim_table *ep;
  for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
    {
      ((t) = ix86_initial_elimination_offset ((ep->from), (ep->to)));
      if (t != ep->initial_offset)
 abort ();
    }
}
static void
set_initial_elim_offsets (void)
{
  struct elim_table *ep = reg_eliminate;
  for (; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
    {
      ((ep->initial_offset) = ix86_initial_elimination_offset ((ep->from), (ep->to)));
      ep->previous_offset = ep->offset = ep->initial_offset;
    }
  num_not_at_initial_offset = 0;
}
static void
set_initial_label_offsets (void)
{
  rtx x;
  memset (offsets_known_at, 0, num_labels);
  for (x = (cfun->expr->x_forced_labels); x; x = (((x)->u.fld[1]).rtx1))
    if ((((x)->u.fld[0]).rtx1))
      set_label_offsets ((((x)->u.fld[0]).rtx1), (rtx) 0, 1);
}
static void
set_offsets_for_label (rtx insn)
{
  unsigned int i;
  int label_nr = (((insn)->u.fld[6]).rtint);
  struct elim_table *ep;
  num_not_at_initial_offset = 0;
  for (i = 0, ep = reg_eliminate; i < (sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0])); ep++, i++)
    {
      ep->offset = ep->previous_offset
   = offsets_at[label_nr - first_label_num][i];
      if (ep->can_eliminate && ep->offset != ep->initial_offset)
 num_not_at_initial_offset++;
    }
}
static void
update_eliminables (HARD_REG_SET *pset)
{
  int previous_frame_pointer_needed = frame_pointer_needed;
  struct elim_table *ep;
  for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
    if ((ep->from == 6 && ix86_frame_pointer_required ())
 || ! ((ep->to) == 7 ? ! frame_pointer_needed : 1)
 )
      ep->can_eliminate = 0;
  for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
    {
      struct elim_table *op;
      int new_to = -1;
      if (! ep->can_eliminate && ep->can_eliminate_previous)
 {
   for (op = reg_eliminate;
        op < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; op++)
     if (op->from == ep->from && op->can_eliminate)
       {
  new_to = op->to;
  break;
       }
   for (op = reg_eliminate;
        op < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; op++)
     if (op->from == new_to && op->to == ep->to)
       op->can_eliminate = 0;
 }
    }
  frame_pointer_needed = 1;
  for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
    {
      if (ep->can_eliminate && ep->from == 20
   && ep->to != 6)
 frame_pointer_needed = 0;
      if (! ep->can_eliminate && ep->can_eliminate_previous)
 {
   ep->can_eliminate_previous = 0;
   ((*pset)[(ep->from) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((ep->from) % ((unsigned) (8 * 4))));
   num_eliminable--;
 }
    }
  if (frame_pointer_needed && ! previous_frame_pointer_needed)
    ((*pset)[(6) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((6) % ((unsigned) (8 * 4))));
}
static void
init_elim_table (void)
{
  struct elim_table *ep;
  const struct elim_table_1 *ep1;
  if (!reg_eliminate)
    reg_eliminate = xcalloc (sizeof (struct elim_table), (sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0])));
  frame_pointer_needed = (! flag_omit_frame_pointer
     || ((cfun->calls_alloca)
         && 1)
     || ix86_frame_pointer_required ());
  num_eliminable = 0;
  for (ep = reg_eliminate, ep1 = reg_eliminate_1;
       ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++, ep1++)
    {
      ep->from = ep1->from;
      ep->to = ep1->to;
      ep->can_eliminate = ep->can_eliminate_previous
 = (((ep->to) == 7 ? ! frame_pointer_needed : 1)
    && ! (ep->to == 7 && frame_pointer_needed));
    }
  for (ep = reg_eliminate; ep < &reg_eliminate[(sizeof (reg_eliminate_1) / sizeof ((reg_eliminate_1)[0]))]; ep++)
    {
      num_eliminable += ep->can_eliminate;
      ep->from_rtx = gen_rtx_REG ((0 ? DImode : SImode), ep->from);
      ep->to_rtx = gen_rtx_REG ((0 ? DImode : SImode), ep->to);
    }
}
static void
spill_hard_reg (unsigned int regno, int cant_eliminate)
{
  int i;
  if (cant_eliminate)
    {
      ((bad_spill_regs_global)[(regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))));
      regs_ever_live[regno] = 1;
    }
  for (i = 53; i < max_regno; i++)
    if (reg_renumber[i] >= 0
 && (unsigned int) reg_renumber[i] <= regno
 && ((unsigned int) reg_renumber[i]
     + hard_regno_nregs[(unsigned int) reg_renumber[i]]
         [((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode)]
     > regno))
      bitmap_set_bit (&spilled_pseudos, i);
}
static void
ior_hard_reg_set (HARD_REG_SET *set1, HARD_REG_SET *set2)
{
  do { HARD_REG_ELT_TYPE *scan_tp_ = (*set1), *scan_fp_ = (*set2); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
}
static int
finish_spills (int global)
{
  struct insn_chain *chain;
  int something_changed = 0;
  int i;
  n_spills = 0;
  for (i = 0; i < 53; i++)
    if ((!!((used_spill_regs)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
      {
 spill_reg_order[i] = n_spills;
 spill_regs[n_spills++] = i;
 if (num_eliminable && ! regs_ever_live[i])
   something_changed = 1;
 regs_ever_live[i] = 1;
      }
    else
      spill_reg_order[i] = -1;
  do { bitmap_element *ptr_ = (&spilled_pseudos)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { if (reg_renumber[i] < 0) abort (); ((pseudo_previous_regs[i])[(reg_renumber[i]) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((reg_renumber[i]) % ((unsigned) (8 * 4)))); reg_renumber[i] = -1; something_changed = 1; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
  if (global)
    {
      memset (pseudo_forbidden_regs, 0, max_regno * sizeof (HARD_REG_SET));
      for (chain = insns_need_reload; chain; chain = chain->next_need_reload)
 {
   do { bitmap_element *ptr_ = (&chain->live_throughout)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { ior_hard_reg_set (pseudo_forbidden_regs + i, &chain->used_spill_regs); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
        ;
   do { bitmap_element *ptr_ = (&chain->dead_or_set)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { ior_hard_reg_set (pseudo_forbidden_regs + i, &chain->used_spill_regs); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
        ;
 }
      for (i = 53; i < max_regno; i++)
 if (reg_old_renumber[i] != reg_renumber[i])
   {
     HARD_REG_SET forbidden;
     do { HARD_REG_ELT_TYPE *scan_tp_ = (forbidden), *scan_fp_ = (bad_spill_regs_global); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
     do { HARD_REG_ELT_TYPE *scan_tp_ = (forbidden), *scan_fp_ = (pseudo_forbidden_regs[i]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
     do { HARD_REG_ELT_TYPE *scan_tp_ = (forbidden), *scan_fp_ = (pseudo_previous_regs[i]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
     retry_global_alloc (i, forbidden);
     if (reg_renumber[i] >= 0)
       bitmap_clear_bit (&spilled_pseudos, i);
   }
    }
  for (chain = reload_insn_chain; chain; chain = chain->next)
    {
      HARD_REG_SET used_by_pseudos;
      HARD_REG_SET used_by_pseudos2;
      bitmap_operation (&chain->live_throughout, &chain->live_throughout, &spilled_pseudos, BITMAP_AND_COMPL);
      bitmap_operation (&chain->dead_or_set, &chain->dead_or_set, &spilled_pseudos, BITMAP_AND_COMPL);
      if (chain->need_reload)
 {
   do { do { HARD_REG_ELT_TYPE *scan_tp_ = (used_by_pseudos); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&used_by_pseudos, &chain->live_throughout); } while (0);
   do { do { HARD_REG_ELT_TYPE *scan_tp_ = (used_by_pseudos2); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&used_by_pseudos2, &chain->dead_or_set); } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (used_by_pseudos), *scan_fp_ = (used_by_pseudos2); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (used_by_pseudos2), *scan_fp_ = (chain->used_spill_regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
   compute_use_by_pseudos (&used_by_pseudos, &chain->live_throughout);
   compute_use_by_pseudos (&used_by_pseudos, &chain->dead_or_set);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (chain->used_spill_regs), *scan_fp_ = (used_by_pseudos); scan_tp_[0] = ~ scan_fp_[0]; scan_tp_[1] = ~ scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (chain->used_spill_regs), *scan_fp_ = (used_spill_regs); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_xp_ = (used_by_pseudos2), *scan_yp_ = (chain->used_spill_regs); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto ok; } while (0);
   abort ();
 ok:;
 }
    }
  for (i = 53; i < max_regno; i++)
    {
      int regno = reg_renumber[i];
      if (reg_old_renumber[i] == regno)
 continue;
      alter_reg (i, reg_old_renumber[i]);
      reg_old_renumber[i] = regno;
      if (dump_file)
 {
   if (regno == -1)
     fprintf (dump_file, " Register %d now on stack.\n\n", i);
   else
     fprintf (dump_file, " Register %d now in %d.\n\n",
       i, reg_renumber[i]);
 }
    }
  return something_changed;
}
static void
scan_paradoxical_subregs (rtx x)
{
  int i;
  const char *fmt;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
    case CONST_INT:
    case CONST:
    case SYMBOL_REF:
    case LABEL_REF:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CC0:
    case PC:
    case USE:
    case CLOBBER:
      return;
    case SUBREG:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) > ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]))
 reg_max_ref_width[((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]
   = ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]);
      return;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 scan_paradoxical_subregs ((((x)->u.fld[i]).rtx1));
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     scan_paradoxical_subregs ((((((x)->u.fld[i]).rtvec1))->elem[j]));
 }
    }
}
static void
reload_as_needed (int live_known)
{
  struct insn_chain *chain;
  rtx x;
  memset (spill_reg_rtx, 0, sizeof spill_reg_rtx);
  memset (spill_reg_store, 0, sizeof spill_reg_store);
  reg_last_reload_reg = xcalloc (max_regno, sizeof (rtx));
  reg_has_output_reload = xmalloc (max_regno);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reg_reloaded_valid); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reg_reloaded_call_part_clobbered); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  set_initial_elim_offsets ();
  for (chain = reload_insn_chain; chain; chain = chain->next)
    {
      rtx prev = 0;
      rtx insn = chain->insn;
      rtx old_next = (((insn)->u.fld[2]).rtx1);
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 set_offsets_for_label (insn);
      else if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 {
   rtx oldpat = copy_rtx ((((insn)->u.fld[5]).rtx1));
   if ((((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE
        || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER)
       && (((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == MEM))
     (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1)
       = eliminate_regs ((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1),
    ((enum machine_mode) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->mode),
    (rtx) 0);
   if ((num_eliminable || num_eliminable_invariants) && chain->need_elim)
     {
       eliminate_regs_in_insn (insn, 1);
       if (((enum rtx_code) (insn)->code) == NOTE)
  {
    update_eliminable_offsets ();
    continue;
  }
     }
   if (! chain->need_elim && ! chain->need_reload
       && ! chain->need_operand_change)
     n_reloads = 0;
   else
     {
       memset (reg_has_output_reload, 0, max_regno);
       do { HARD_REG_ELT_TYPE *scan_tp_ = (reg_is_output_reload); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
       find_reloads (insn, 1, spill_indirect_levels, live_known,
       spill_reg_order);
     }
   if (n_reloads > 0)
     {
       rtx next = (((insn)->u.fld[2]).rtx1);
       rtx p;
       prev = (((insn)->u.fld[1]).rtx1);
       choose_reload_regs (chain);
       if (1)
  merge_assigned_reloads (insn);
       emit_reload_insns (chain);
       subst_reloads (insn);
       if (asm_noperands ((((insn)->u.fld[5]).rtx1)) >= 0)
  for (p = (((prev)->u.fld[2]).rtx1); p != next; p = (((p)->u.fld[2]).rtx1))
    if (p != insn && ((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN))
        && ((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) != USE
        && (((((p)->u.fld[6]).rtint) >= 0 ? (((p)->u.fld[6]).rtint) : recog_memoized_1 (p)) < 0
     || (extract_insn (p), ! constrain_operands (1))))
      {
        error_for_asm (insn,
         "`asm' operand requires impossible reload");
        delete_insn (p);
      }
     }
   if (num_eliminable && chain->need_elim)
     update_eliminable_offsets ();
   note_stores (oldpat, forget_old_reloads_1, ((void *)0));
   for (x = (((insn)->u.fld[2]).rtx1); x != old_next; x = (((x)->u.fld[2]).rtx1))
     if (((enum rtx_code) (x)->code) == INSN && ((enum rtx_code) ((((x)->u.fld[5]).rtx1))->code) == CLOBBER)
       note_stores ((((x)->u.fld[5]).rtx1), forget_old_reloads_1, ((void *)0));
 }
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 do { HARD_REG_ELT_TYPE *scan_tp_ = (reg_reloaded_valid); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      else if (((enum rtx_code) (insn)->code) == CALL_INSN)
 {
 do { HARD_REG_ELT_TYPE *scan_tp_ = (reg_reloaded_valid), *scan_fp_ = (call_used_reg_set); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
 do { HARD_REG_ELT_TYPE *scan_tp_ = (reg_reloaded_valid), *scan_fp_ = (reg_reloaded_call_part_clobbered); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
 }
    }
  free (reg_last_reload_reg);
  free (reg_has_output_reload);
}
static void
forget_old_reloads_1 (rtx x, rtx ignored ,
        void *data )
{
  unsigned int regno;
  unsigned int nr;
  while (((enum rtx_code) (x)->code) == SUBREG)
    {
      x = (((x)->u.fld[0]).rtx1);
    }
  if (!(((enum rtx_code) (x)->code) == REG))
    return;
  regno = (((x)->u.fld[0]).rtuint);
  if (regno >= 53)
    nr = 1;
  else
    {
      unsigned int i;
      nr = hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
      for (i = 0; i < nr; i++)
 if (n_reloads == 0
     || ! (!!((reg_is_output_reload)[(regno + i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno + i) % ((unsigned) (8 * 4)))))))
   {
     ((reg_reloaded_valid)[(regno + i) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((regno + i) % ((unsigned) (8 * 4)))));
     ((reg_reloaded_call_part_clobbered)[(regno + i) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((regno + i) % ((unsigned) (8 * 4)))));
     spill_reg_store[regno + i] = 0;
   }
    }
  while (nr-- > 0)
    if (n_reloads == 0 || reg_has_output_reload[regno + nr] == 0)
      reg_last_reload_reg[regno + nr] = 0;
}
static HARD_REG_SET reload_reg_unavailable;
static HARD_REG_SET reload_reg_used;
static HARD_REG_SET reload_reg_used_in_input_addr[30];
static HARD_REG_SET reload_reg_used_in_inpaddr_addr[30];
static HARD_REG_SET reload_reg_used_in_output_addr[30];
static HARD_REG_SET reload_reg_used_in_outaddr_addr[30];
static HARD_REG_SET reload_reg_used_in_input[30];
static HARD_REG_SET reload_reg_used_in_output[30];
static HARD_REG_SET reload_reg_used_in_op_addr;
static HARD_REG_SET reload_reg_used_in_op_addr_reload;
static HARD_REG_SET reload_reg_used_in_insn;
static HARD_REG_SET reload_reg_used_in_other_addr;
static HARD_REG_SET reload_reg_used_at_all;
static HARD_REG_SET reload_reg_used_for_inherit;
static HARD_REG_SET reg_used_in_insn;
static void
mark_reload_reg_in_use (unsigned int regno, int opnum, enum reload_type type,
   enum machine_mode mode)
{
  unsigned int nregs = hard_regno_nregs[regno][mode];
  unsigned int i;
  for (i = regno; i < nregs + regno; i++)
    {
      switch (type)
 {
 case RELOAD_OTHER:
   ((reload_reg_used)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
   break;
 case RELOAD_FOR_INPUT_ADDRESS:
   ((reload_reg_used_in_input_addr[opnum])[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
   break;
 case RELOAD_FOR_INPADDR_ADDRESS:
   ((reload_reg_used_in_inpaddr_addr[opnum])[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
   break;
 case RELOAD_FOR_OUTPUT_ADDRESS:
   ((reload_reg_used_in_output_addr[opnum])[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
   break;
 case RELOAD_FOR_OUTADDR_ADDRESS:
   ((reload_reg_used_in_outaddr_addr[opnum])[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
   break;
 case RELOAD_FOR_OPERAND_ADDRESS:
   ((reload_reg_used_in_op_addr)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
   break;
 case RELOAD_FOR_OPADDR_ADDR:
   ((reload_reg_used_in_op_addr_reload)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
   break;
 case RELOAD_FOR_OTHER_ADDRESS:
   ((reload_reg_used_in_other_addr)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
   break;
 case RELOAD_FOR_INPUT:
   ((reload_reg_used_in_input[opnum])[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
   break;
 case RELOAD_FOR_OUTPUT:
   ((reload_reg_used_in_output[opnum])[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
   break;
 case RELOAD_FOR_INSN:
   ((reload_reg_used_in_insn)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
   break;
 }
      ((reload_reg_used_at_all)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
    }
}
static void
clear_reload_reg_in_use (unsigned int regno, int opnum,
    enum reload_type type, enum machine_mode mode)
{
  unsigned int nregs = hard_regno_nregs[regno][mode];
  unsigned int start_regno, end_regno, r;
  int i;
  int check_opnum = 0;
  int check_any = 0;
  HARD_REG_SET *used_in_set;
  switch (type)
    {
    case RELOAD_OTHER:
      used_in_set = &reload_reg_used;
      break;
    case RELOAD_FOR_INPUT_ADDRESS:
      used_in_set = &reload_reg_used_in_input_addr[opnum];
      break;
    case RELOAD_FOR_INPADDR_ADDRESS:
      check_opnum = 1;
      used_in_set = &reload_reg_used_in_inpaddr_addr[opnum];
      break;
    case RELOAD_FOR_OUTPUT_ADDRESS:
      used_in_set = &reload_reg_used_in_output_addr[opnum];
      break;
    case RELOAD_FOR_OUTADDR_ADDRESS:
      check_opnum = 1;
      used_in_set = &reload_reg_used_in_outaddr_addr[opnum];
      break;
    case RELOAD_FOR_OPERAND_ADDRESS:
      used_in_set = &reload_reg_used_in_op_addr;
      break;
    case RELOAD_FOR_OPADDR_ADDR:
      check_any = 1;
      used_in_set = &reload_reg_used_in_op_addr_reload;
      break;
    case RELOAD_FOR_OTHER_ADDRESS:
      used_in_set = &reload_reg_used_in_other_addr;
      check_any = 1;
      break;
    case RELOAD_FOR_INPUT:
      used_in_set = &reload_reg_used_in_input[opnum];
      break;
    case RELOAD_FOR_OUTPUT:
      used_in_set = &reload_reg_used_in_output[opnum];
      break;
    case RELOAD_FOR_INSN:
      used_in_set = &reload_reg_used_in_insn;
      break;
    default:
      abort ();
    }
  start_regno = regno;
  end_regno = regno + nregs;
  if (check_opnum || check_any)
    {
      for (i = n_reloads - 1; i >= 0; i--)
 {
   if (rld[i].when_needed == type
       && (check_any || rld[i].opnum == opnum)
       && rld[i].reg_rtx)
     {
       unsigned int conflict_start = true_regnum (rld[i].reg_rtx);
       unsigned int conflict_end
  = (conflict_start
     + hard_regno_nregs[conflict_start][rld[i].mode]);
       if (conflict_start <= start_regno && conflict_end > start_regno)
  start_regno = conflict_end;
       if (conflict_start > start_regno && conflict_start < end_regno)
  end_regno = conflict_start;
     }
 }
    }
  for (r = start_regno; r < end_regno; r++)
    ((*used_in_set)[(r) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((r) % ((unsigned) (8 * 4)))));
}
static int
reload_reg_free_p (unsigned int regno, int opnum, enum reload_type type)
{
  int i;
  if ((!!((reload_reg_used)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
      || (!!((reload_reg_unavailable)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
    return 0;
  switch (type)
    {
    case RELOAD_OTHER:
      if ((!!((reload_reg_used_in_other_addr)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
   || (!!((reload_reg_used_in_op_addr)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
   || (!!((reload_reg_used_in_op_addr_reload)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
   || (!!((reload_reg_used_in_insn)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
 return 0;
      for (i = 0; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_input_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_inpaddr_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_output_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_outaddr_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_input[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_output[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return 1;
    case RELOAD_FOR_INPUT:
      if ((!!((reload_reg_used_in_insn)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
   || (!!((reload_reg_used_in_op_addr)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
 return 0;
      if ((!!((reload_reg_used_in_op_addr_reload)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
 return 0;
      for (i = 0; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_input[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      for (i = opnum + 1; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_input_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_inpaddr_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return 1;
    case RELOAD_FOR_INPUT_ADDRESS:
      if ((!!((reload_reg_used_in_input_addr[opnum])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
   || (!!((reload_reg_used_in_inpaddr_addr[opnum])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
 return 0;
      for (i = 0; i < opnum; i++)
 if ((!!((reload_reg_used_in_input[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return 1;
    case RELOAD_FOR_INPADDR_ADDRESS:
      if ((!!((reload_reg_used_in_inpaddr_addr[opnum])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
 return 0;
      for (i = 0; i < opnum; i++)
 if ((!!((reload_reg_used_in_input[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return 1;
    case RELOAD_FOR_OUTPUT_ADDRESS:
      if ((!!((reload_reg_used_in_output_addr[opnum])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
 return 0;
      for (i = 0; i <= opnum; i++)
 if ((!!((reload_reg_used_in_output[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return 1;
    case RELOAD_FOR_OUTADDR_ADDRESS:
      if ((!!((reload_reg_used_in_outaddr_addr[opnum])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
 return 0;
      for (i = 0; i <= opnum; i++)
 if ((!!((reload_reg_used_in_output[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return 1;
    case RELOAD_FOR_OPERAND_ADDRESS:
      for (i = 0; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_input[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return (! (!!((reload_reg_used_in_insn)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
       && ! (!!((reload_reg_used_in_op_addr)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))));
    case RELOAD_FOR_OPADDR_ADDR:
      for (i = 0; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_input[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return (!(!!((reload_reg_used_in_op_addr_reload)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))));
    case RELOAD_FOR_OUTPUT:
      if ((!!((reload_reg_used_in_insn)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
 return 0;
      for (i = 0; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_output[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      for (i = opnum; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_output_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_outaddr_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return 1;
    case RELOAD_FOR_INSN:
      for (i = 0; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_input[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_output[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return (! (!!((reload_reg_used_in_insn)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
       && ! (!!((reload_reg_used_in_op_addr)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))));
    case RELOAD_FOR_OTHER_ADDRESS:
      return ! (!!((reload_reg_used_in_other_addr)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))));
    }
  abort ();
}
static int
reload_reg_reaches_end_p (unsigned int regno, int opnum, enum reload_type type)
{
  int i;
  switch (type)
    {
    case RELOAD_OTHER:
      return 1;
    case RELOAD_FOR_OTHER_ADDRESS:
      for (i = 0; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_output_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_outaddr_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_output[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_input_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_inpaddr_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_input[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return (! (!!((reload_reg_used_in_op_addr)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
       && ! (!!((reload_reg_used_in_op_addr_reload)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
       && ! (!!((reload_reg_used_in_insn)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
       && ! (!!((reload_reg_used)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))));
    case RELOAD_FOR_INPUT_ADDRESS:
    case RELOAD_FOR_INPADDR_ADDRESS:
      for (i = opnum; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_input[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      for (i = opnum + 1; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_input_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_inpaddr_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      for (i = 0; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_output_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_outaddr_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_output[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      if ((!!((reload_reg_used_in_op_addr_reload)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
 return 0;
      return (!(!!((reload_reg_used_in_op_addr)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
       && !(!!((reload_reg_used_in_insn)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
       && !(!!((reload_reg_used)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))));
    case RELOAD_FOR_INPUT:
      for (i = opnum + 1; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_input_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_inpaddr_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_input[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
    case RELOAD_FOR_OPERAND_ADDRESS:
      for (i = 0; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_output_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_outaddr_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_output[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return (!(!!((reload_reg_used)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))));
    case RELOAD_FOR_OPADDR_ADDR:
      for (i = 0; i < reload_n_operands; i++)
 if ((!!((reload_reg_used_in_output_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_outaddr_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_output[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return (!(!!((reload_reg_used_in_op_addr)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
       && !(!!((reload_reg_used_in_insn)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
       && !(!!((reload_reg_used)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))));
    case RELOAD_FOR_INSN:
      opnum = reload_n_operands;
    case RELOAD_FOR_OUTPUT:
    case RELOAD_FOR_OUTPUT_ADDRESS:
    case RELOAD_FOR_OUTADDR_ADDRESS:
      for (i = 0; i < opnum; i++)
 if ((!!((reload_reg_used_in_output_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     || (!!((reload_reg_used_in_outaddr_addr[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   return 0;
      return 1;
    }
  abort ();
}
int
reloads_conflict (int r1, int r2)
{
  enum reload_type r1_type = rld[r1].when_needed;
  enum reload_type r2_type = rld[r2].when_needed;
  int r1_opnum = rld[r1].opnum;
  int r2_opnum = rld[r2].opnum;
  if (r2_type == RELOAD_OTHER)
    return 1;
  switch (r1_type)
    {
    case RELOAD_FOR_INPUT:
      return (r2_type == RELOAD_FOR_INSN
       || r2_type == RELOAD_FOR_OPERAND_ADDRESS
       || r2_type == RELOAD_FOR_OPADDR_ADDR
       || r2_type == RELOAD_FOR_INPUT
       || ((r2_type == RELOAD_FOR_INPUT_ADDRESS
     || r2_type == RELOAD_FOR_INPADDR_ADDRESS)
    && r2_opnum > r1_opnum));
    case RELOAD_FOR_INPUT_ADDRESS:
      return ((r2_type == RELOAD_FOR_INPUT_ADDRESS && r1_opnum == r2_opnum)
       || (r2_type == RELOAD_FOR_INPUT && r2_opnum < r1_opnum));
    case RELOAD_FOR_INPADDR_ADDRESS:
      return ((r2_type == RELOAD_FOR_INPADDR_ADDRESS && r1_opnum == r2_opnum)
       || (r2_type == RELOAD_FOR_INPUT && r2_opnum < r1_opnum));
    case RELOAD_FOR_OUTPUT_ADDRESS:
      return ((r2_type == RELOAD_FOR_OUTPUT_ADDRESS && r2_opnum == r1_opnum)
       || (r2_type == RELOAD_FOR_OUTPUT && r2_opnum <= r1_opnum));
    case RELOAD_FOR_OUTADDR_ADDRESS:
      return ((r2_type == RELOAD_FOR_OUTADDR_ADDRESS && r2_opnum == r1_opnum)
       || (r2_type == RELOAD_FOR_OUTPUT && r2_opnum <= r1_opnum));
    case RELOAD_FOR_OPERAND_ADDRESS:
      return (r2_type == RELOAD_FOR_INPUT || r2_type == RELOAD_FOR_INSN
       || r2_type == RELOAD_FOR_OPERAND_ADDRESS);
    case RELOAD_FOR_OPADDR_ADDR:
      return (r2_type == RELOAD_FOR_INPUT
       || r2_type == RELOAD_FOR_OPADDR_ADDR);
    case RELOAD_FOR_OUTPUT:
      return (r2_type == RELOAD_FOR_INSN || r2_type == RELOAD_FOR_OUTPUT
       || ((r2_type == RELOAD_FOR_OUTPUT_ADDRESS
     || r2_type == RELOAD_FOR_OUTADDR_ADDRESS)
    && r2_opnum >= r1_opnum));
    case RELOAD_FOR_INSN:
      return (r2_type == RELOAD_FOR_INPUT || r2_type == RELOAD_FOR_OUTPUT
       || r2_type == RELOAD_FOR_INSN
       || r2_type == RELOAD_FOR_OPERAND_ADDRESS);
    case RELOAD_FOR_OTHER_ADDRESS:
      return r2_type == RELOAD_FOR_OTHER_ADDRESS;
    case RELOAD_OTHER:
      return 1;
    default:
      abort ();
    }
}
char reload_inherited[(2 * 30 * (2 + 1))];
rtx reload_inheritance_insn[(2 * 30 * (2 + 1))];
rtx reload_override_in[(2 * 30 * (2 + 1))];
int reload_spill_index[(2 * 30 * (2 + 1))];
static int
reload_reg_free_for_value_p (int start_regno, int regno, int opnum,
        enum reload_type type, rtx value1, rtx out,
        int reloadnum, int ignore_address_reloads)
{
  int time1;
  int check_earlyclobber = 0;
  int i;
  int copy = 0;
  if ((!!((reload_reg_unavailable)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
    return 0;
  if (out == (const_int_rtx[64]))
    {
      copy = 1;
      out = (rtx) 0;
    }
  switch (type)
    {
    case RELOAD_FOR_OTHER_ADDRESS:
      time1 = copy ? 0 : 1;
      break;
    case RELOAD_OTHER:
      time1 = copy ? 1 : 30 * 5 + 5;
      break;
    case RELOAD_FOR_INPADDR_ADDRESS:
      time1 = opnum * 4 + 2;
      break;
    case RELOAD_FOR_INPUT_ADDRESS:
      time1 = opnum * 4 + 3;
      break;
    case RELOAD_FOR_INPUT:
      time1 = copy ? opnum * 4 + 4 : 30 * 4 + 3;
      break;
    case RELOAD_FOR_OPADDR_ADDR:
      time1 = 30 * 4 + 1;
      break;
    case RELOAD_FOR_OPERAND_ADDRESS:
      time1 = copy ? 30 * 4 + 2 : 30 * 4 + 3;
      break;
    case RELOAD_FOR_OUTADDR_ADDRESS:
      time1 = 30 * 4 + 4 + opnum;
      break;
    case RELOAD_FOR_OUTPUT_ADDRESS:
      time1 = 30 * 4 + 5 + opnum;
      break;
    default:
      time1 = 30 * 5 + 5;
    }
  for (i = 0; i < n_reloads; i++)
    {
      rtx reg = rld[i].reg_rtx;
      if (reg && (((enum rtx_code) (reg)->code) == REG)
   && ((unsigned) regno - true_regnum (reg)
       <= hard_regno_nregs[(((reg)->u.fld[0]).rtuint)][((enum machine_mode) (reg)->mode)] - (unsigned) 1)
   && i != reloadnum)
 {
   rtx other_input = rld[i].in;
   if (true_regnum (reg) != start_regno)
     other_input = (rtx) 0;
   if (! other_input || ! rtx_equal_p (other_input, value1)
       || rld[i].out || out)
     {
       int time2;
       switch (rld[i].when_needed)
  {
  case RELOAD_FOR_OTHER_ADDRESS:
    time2 = 0;
    break;
  case RELOAD_FOR_INPADDR_ADDRESS:
    if (type == RELOAD_FOR_INPUT_ADDRESS && reloadnum == i + 1
        && ignore_address_reloads
        && ! rld[reloadnum].out)
      continue;
    if (type == RELOAD_FOR_INPUT && opnum == rld[i].opnum
        && ignore_address_reloads
        && ! rld[reloadnum].out)
      continue;
    time2 = rld[i].opnum * 4 + 2;
    break;
  case RELOAD_FOR_INPUT_ADDRESS:
    if (type == RELOAD_FOR_INPUT && opnum == rld[i].opnum
        && ignore_address_reloads
        && ! rld[reloadnum].out)
      continue;
    time2 = rld[i].opnum * 4 + 3;
    break;
  case RELOAD_FOR_INPUT:
    time2 = rld[i].opnum * 4 + 4;
    check_earlyclobber = 1;
    break;
  case RELOAD_FOR_OPADDR_ADDR:
    if (type == RELOAD_FOR_OPERAND_ADDRESS && reloadnum == i + 1
        && ignore_address_reloads
        && ! rld[reloadnum].out)
      continue;
    time2 = 30 * 4 + 1;
    break;
  case RELOAD_FOR_OPERAND_ADDRESS:
    time2 = 30 * 4 + 2;
    check_earlyclobber = 1;
    break;
  case RELOAD_FOR_INSN:
    time2 = 30 * 4 + 3;
    break;
  case RELOAD_FOR_OUTPUT:
    time2 = 30 * 4 + 4;
    break;
  case RELOAD_FOR_OUTADDR_ADDRESS:
    if (type == RELOAD_FOR_OUTPUT_ADDRESS && reloadnum == i + 1
        && ignore_address_reloads
        && ! rld[reloadnum].out)
      continue;
    time2 = 30 * 4 + 4 + rld[i].opnum;
    break;
  case RELOAD_FOR_OUTPUT_ADDRESS:
    time2 = 30 * 4 + 5 + rld[i].opnum;
    break;
  case RELOAD_OTHER:
    if (! rld[i].in || rtx_equal_p (other_input, value1))
      {
        time2 = 30 * 4 + 4;
        if (earlyclobber_operand_p (rld[i].out))
   time2 = 30 * 4 + 3;
        break;
      }
    time2 = 1;
    if (out)
      return 0;
    break;
  default:
    return 0;
  }
       if ((time1 >= time2
     && (! rld[i].in || rld[i].out
         || ! rtx_equal_p (other_input, value1)))
    || (out && rld[reloadnum].out_reg
        && time2 >= 30 * 4 + 3))
  return 0;
     }
 }
    }
  if (check_earlyclobber && out && earlyclobber_operand_p (out))
    return 0;
  return 1;
}
static int
free_for_value_p (int regno, enum machine_mode mode, int opnum,
    enum reload_type type, rtx value1, rtx out, int reloadnum,
    int ignore_address_reloads)
{
  int nregs = hard_regno_nregs[regno][mode];
  while (nregs-- > 0)
    if (! reload_reg_free_for_value_p (regno, regno + nregs, opnum, type,
           value1, out, reloadnum,
           ignore_address_reloads))
      return 0;
  return 1;
}
static int
function_invariant_p (rtx x)
{
  if (((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR))
    return 1;
  if (x == (global_rtl[GR_FRAME_POINTER]) || x == (global_rtl[GR_ARG_POINTER]))
    return 1;
  if (((enum rtx_code) (x)->code) == PLUS
      && ((((x)->u.fld[0]).rtx1) == (global_rtl[GR_FRAME_POINTER]) || (((x)->u.fld[0]).rtx1) == (global_rtl[GR_ARG_POINTER]))
      && ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
    return 1;
  return 0;
}
static int
conflicts_with_override (rtx x)
{
  int i;
  for (i = 0; i < n_reloads; i++)
    if (reload_override_in[i]
 && reg_overlap_mentioned_p (x, reload_override_in[i]))
      return 1;
  return 0;
}
static void
failed_reload (rtx insn, int r)
{
  if (asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
    _fatal_insn ("could not find a spill register", insn, "gcc.c", 613412, "?");
  error_for_asm (insn,
   "`asm' operand constraint incompatible with operand size");
  rld[r].in = 0;
  rld[r].out = 0;
  rld[r].reg_rtx = 0;
  rld[r].optional = 1;
  rld[r].secondary_p = 1;
}
static int
set_reload_reg (int i, int r)
{
  int regno;
  rtx reg = spill_reg_rtx[i];
  if (reg == 0 || ((enum machine_mode) (reg)->mode) != rld[r].mode)
    spill_reg_rtx[i] = reg
      = gen_rtx_REG (rld[r].mode, spill_regs[i]);
  regno = true_regnum (reg);
  if (ix86_hard_regno_mode_ok ((regno), (rld[r].mode)))
    {
      enum machine_mode test_mode = VOIDmode;
      if (rld[r].in)
 test_mode = ((enum machine_mode) (rld[r].in)->mode);
      if (! (rld[r].in != 0 && test_mode != VOIDmode
      && ! ix86_hard_regno_mode_ok ((regno), (test_mode))))
 if (! (rld[r].out != 0
        && ! ix86_hard_regno_mode_ok ((regno), (((enum machine_mode) (rld[r].out)->mode)))))
   {
     last_spill_reg = i;
     mark_reload_reg_in_use (spill_regs[i], rld[r].opnum,
        rld[r].when_needed, rld[r].mode);
     rld[r].reg_rtx = reg;
     reload_spill_index[r] = spill_regs[i];
     return 1;
   }
    }
  return 0;
}
static int
allocate_reload_reg (struct insn_chain *chain , int r,
       int last_reload)
{
  int i, pass, count;
  int force_group = rld[r].nregs > 1 && ! last_reload;
  for (pass = 0; pass < 2; pass++)
    {
      i = last_spill_reg;
      for (count = 0; count < n_spills; count++)
 {
   int class = (int) rld[r].class;
   int regnum;
   i++;
   if (i >= n_spills)
     i -= n_spills;
   regnum = spill_regs[i];
   if ((reload_reg_free_p (regnum, rld[r].opnum,
      rld[r].when_needed)
        || (rld[r].in
     && ! (!!((reload_reg_used)[(regnum) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regnum) % ((unsigned) (8 * 4))))))
     && free_for_value_p (regnum, rld[r].mode, rld[r].opnum,
     rld[r].when_needed, rld[r].in,
     rld[r].out, r, 1)))
       && (!!((reg_class_contents[class])[(regnum) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regnum) % ((unsigned) (8 * 4))))))
       && ix86_hard_regno_mode_ok ((regnum), (rld[r].mode))
       && (pass
    || ((!!((reload_reg_used_at_all)[(regnum) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regnum) % ((unsigned) (8 * 4))))))
        && ! (!!((reload_reg_used_for_inherit)[(regnum) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regnum) % ((unsigned) (8 * 4))))))
                  )))
     {
       int nr = hard_regno_nregs[regnum][rld[r].mode];
       if (force_group)
  nr = rld[r].nregs;
       if (nr == 1)
  {
    if (force_group)
      continue;
    break;
  }
       while (nr > 1)
  {
    int regno = regnum + nr - 1;
    if (!((!!((reg_class_contents[class])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
   && spill_reg_order[regno] >= 0
   && reload_reg_free_p (regno, rld[r].opnum,
           rld[r].when_needed)))
      break;
    nr--;
  }
       if (nr == 1)
  break;
     }
 }
      if (count < n_spills)
 break;
    }
  if (count >= n_spills)
    return 0;
  return set_reload_reg (i, r);
}
static void
choose_reload_regs_init (struct insn_chain *chain, rtx *save_reload_reg_rtx)
{
  int i;
  for (i = 0; i < n_reloads; i++)
    rld[i].reg_rtx = save_reload_reg_rtx[i];
  memset (reload_inherited, 0, (2 * 30 * (2 + 1)));
  memset (reload_inheritance_insn, 0, (2 * 30 * (2 + 1)) * sizeof (rtx));
  memset (reload_override_in, 0, (2 * 30 * (2 + 1)) * sizeof (rtx));
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used_at_all); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used_in_op_addr); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used_in_op_addr_reload); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used_in_insn); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used_in_other_addr); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reg_used_in_insn); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  {
    HARD_REG_SET tmp;
    do { do { HARD_REG_ELT_TYPE *scan_tp_ = (tmp); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&tmp, &chain->live_throughout); } while (0);
    do { HARD_REG_ELT_TYPE *scan_tp_ = (reg_used_in_insn), *scan_fp_ = (tmp); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
    do { do { HARD_REG_ELT_TYPE *scan_tp_ = (tmp); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&tmp, &chain->dead_or_set); } while (0);
    do { HARD_REG_ELT_TYPE *scan_tp_ = (reg_used_in_insn), *scan_fp_ = (tmp); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
    compute_use_by_pseudos (&reg_used_in_insn, &chain->live_throughout);
    compute_use_by_pseudos (&reg_used_in_insn, &chain->dead_or_set);
  }
  for (i = 0; i < reload_n_operands; i++)
    {
      do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used_in_output[i]); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used_in_input[i]); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used_in_input_addr[i]); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used_in_inpaddr_addr[i]); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used_in_output_addr[i]); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used_in_outaddr_addr[i]); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_unavailable), *scan_fp_ = (chain->used_spill_regs); scan_tp_[0] = ~ scan_fp_[0]; scan_tp_[1] = ~ scan_fp_[1]; } while (0);
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reload_reg_used_for_inherit); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (i = 0; i < n_reloads; i++)
    if (rld[i].reg_rtx)
      mark_reload_reg_in_use ((((rld[i].reg_rtx)->u.fld[0]).rtuint), rld[i].opnum,
         rld[i].when_needed, rld[i].mode);
}
static void
choose_reload_regs (struct insn_chain *chain)
{
  rtx insn = chain->insn;
  int i, j;
  unsigned int max_group_size = 1;
  enum reg_class group_class = NO_REGS;
  int pass, win, inheritance;
  rtx save_reload_reg_rtx[(2 * 30 * (2 + 1))];
  for (j = 0; j < n_reloads; j++)
    {
      reload_order[j] = j;
      reload_spill_index[j] = -1;
      if (rld[j].nregs > 1)
 {
   max_group_size = ((rld[j].nregs) > (max_group_size) ? (rld[j].nregs) : (max_group_size));
   group_class
     = reg_class_superunion[(int) rld[j].class][(int) group_class];
 }
      save_reload_reg_rtx[j] = rld[j].reg_rtx;
    }
  if (n_reloads > 1)
    qsort (reload_order, n_reloads, sizeof (short), reload_reg_class_lower);
  win = 0;
  for (inheritance = optimize > 0; inheritance >= 0; inheritance--)
    {
      choose_reload_regs_init (chain, save_reload_reg_rtx);
      for (j = 0; j < n_reloads; j++)
 {
   int r = reload_order[j];
   rtx search_equiv = (rtx) 0;
   if (rld[r].out == 0 && rld[r].in == 0
       && ! rld[r].secondary_p)
     continue;
   if (rld[r].in != 0 && rld[r].reg_rtx != 0
       && (rtx_equal_p (rld[r].in, rld[r].reg_rtx)
    || (rtx_equal_p (rld[r].out, rld[r].reg_rtx)
        && !(((enum rtx_code) (rld[r].in)->code) == MEM)
        && true_regnum (rld[r].in) < 53)))
     continue;
   if (inheritance)
     {
       int byte = 0;
       int regno = -1;
       enum machine_mode mode = VOIDmode;
       if (rld[r].in == 0)
  ;
       else if ((((enum rtx_code) (rld[r].in)->code) == REG))
  {
    regno = (((rld[r].in)->u.fld[0]).rtuint);
    mode = ((enum machine_mode) (rld[r].in)->mode);
  }
       else if ((((enum rtx_code) (rld[r].in_reg)->code) == REG))
  {
    regno = (((rld[r].in_reg)->u.fld[0]).rtuint);
    mode = ((enum machine_mode) (rld[r].in_reg)->mode);
  }
       else if (((enum rtx_code) (rld[r].in_reg)->code) == SUBREG
         && (((enum rtx_code) ((((rld[r].in_reg)->u.fld[0]).rtx1))->code) == REG))
  {
    byte = (((rld[r].in_reg)->u.fld[1]).rtuint);
    regno = ((((((rld[r].in_reg)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
    if (regno < 53)
      regno = subreg_regno (rld[r].in_reg);
    mode = ((enum machine_mode) (rld[r].in_reg)->mode);
  }
       if (regno >= 0 && reg_last_reload_reg[regno] != 0)
  {
    enum reg_class class = rld[r].class, last_class;
    rtx last_reg = reg_last_reload_reg[regno];
    enum machine_mode need_mode;
    i = (((last_reg)->u.fld[0]).rtuint);
    i += subreg_regno_offset (i, ((enum machine_mode) (last_reg)->mode), byte, mode);
    last_class = (regclass_map[i]);
    if (byte == 0)
      need_mode = mode;
    else
      need_mode
        = smallest_mode_for_size (((unsigned short) mode_size[mode]) + byte,
      mode_class[mode]);
    if (
        (!(((unsigned short) mode_size[need_mode]) < ((unsigned short) mode_size[((enum machine_mode) (last_reg)->mode)]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, ((regclass_map[i]))) || reg_classes_intersect_p (MMX_REGS, ((regclass_map[i]))) : ((unsigned short) mode_size[((enum machine_mode) (last_reg)->mode)]) != ((unsigned short) mode_size[need_mode]) ? reg_classes_intersect_p (FLOAT_REGS, ((regclass_map[i]))) : 0)
         &&
        (((unsigned short) mode_size[((enum machine_mode) (last_reg)->mode)])
         >= ((unsigned short) mode_size[need_mode]))
        )
        && reg_reloaded_contents[i] == regno
        && (!!((reg_reloaded_valid)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
        && ix86_hard_regno_mode_ok ((i), (rld[r].mode))
        && ((!!((reg_class_contents[(int) class])[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
     || ((ix86_register_move_cost ((mode), (last_class), (class))
          < ix86_memory_move_cost ((mode), (class), (1)))
         && ! ix86_secondary_memory_needed ((last_class), (class), (mode), 1)
         ))
        && (rld[r].nregs == max_group_size
     || ! (!!((reg_class_contents[(int) group_class])[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
          )
        && free_for_value_p (i, rld[r].mode, rld[r].opnum,
        rld[r].when_needed, rld[r].in,
        (const_int_rtx[64]), r, 1))
      {
        int nr = hard_regno_nregs[i][rld[r].mode];
        int k;
        for (k = 1; k < nr; k++)
   if (reg_reloaded_contents[i + k] != regno
       || ! (!!((reg_reloaded_valid)[(i + k) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i + k) % ((unsigned) (8 * 4)))))))
     break;
        if (k == nr)
   {
     int i1;
     int bad_for_class;
     last_reg = (((enum machine_mode) (last_reg)->mode) == mode
          ? last_reg : gen_rtx_REG (mode, i));
     bad_for_class = 0;
     for (k = 0; k < nr; k++)
       bad_for_class |= ! (!!((reg_class_contents[(int) rld[r].class])[(i+k) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i+k) % ((unsigned) (8 * 4))))))
              ;
     for (i1 = 0; i1 < n_earlyclobbers; i1++)
       if (reg_overlap_mentioned_for_reload_p
    (reg_last_reload_reg[regno],
     reload_earlyclobbers[i1]))
         break;
     if (i1 != n_earlyclobbers
         || ! (free_for_value_p (i, rld[r].mode,
            rld[r].opnum,
            rld[r].when_needed, rld[r].in,
            rld[r].out, r, 1))
         || ((!!((reg_used_in_insn)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
      && rld[r].out
      && ! (!!((reg_reloaded_dead)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
         || (i == 6
      && frame_pointer_needed
      && rld[r].out)
         || (((unsigned short) mode_size[rld[r].mode])
      > ((unsigned short) mode_size[mode]))
         || bad_for_class
         || (rld[r].out && rld[r].reg_rtx
      && rtx_equal_p (rld[r].out, rld[r].reg_rtx)))
       {
         if (! rld[r].optional)
    {
      reload_override_in[r] = last_reg;
      reload_inheritance_insn[r]
        = reg_reloaded_insn[i];
    }
       }
     else
       {
         int k;
         mark_reload_reg_in_use (i,
            rld[r].opnum,
            rld[r].when_needed,
            rld[r].mode);
         rld[r].reg_rtx = last_reg;
         reload_inherited[r] = 1;
         reload_inheritance_insn[r]
    = reg_reloaded_insn[i];
         reload_spill_index[r] = i;
         for (k = 0; k < nr; k++)
    ((reload_reg_used_for_inherit)[(i + k) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i + k) % ((unsigned) (8 * 4))))
              ;
       }
   }
      }
  }
     }
   if (inheritance
       && rld[r].in != 0
       && ! reload_inherited[r]
       && rld[r].out == 0
       && (((rtx_class[(int) (((enum rtx_code) (rld[r].in)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (rld[r].in)->code) == CONST_VECTOR)
    || ((enum rtx_code) (rld[r].in)->code) == PLUS
    || (((enum rtx_code) (rld[r].in)->code) == REG)
    || (((enum rtx_code) (rld[r].in)->code) == MEM))
       && (rld[r].nregs == max_group_size
    || ! reg_classes_intersect_p (rld[r].class, group_class)))
     search_equiv = rld[r].in;
   else if (inheritance && rld[r].in == 0 && rld[r].out != 0)
     {
       rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
       if (set
    && rtx_equal_p (rld[r].out, (((set)->u.fld[0]).rtx1))
    && ((rtx_class[(int) (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
  search_equiv = (((set)->u.fld[1]).rtx1);
     }
   if (search_equiv)
     {
       rtx equiv
  = find_equiv_reg (search_equiv, insn, rld[r].class,
      -1, ((void *)0), 0, rld[r].mode);
       int regno = 0;
       if (equiv != 0)
  {
    if ((((enum rtx_code) (equiv)->code) == REG))
      regno = (((equiv)->u.fld[0]).rtuint);
    else if (((enum rtx_code) (equiv)->code) == SUBREG)
      {
        regno = subreg_regno (equiv);
        equiv = gen_rtx_REG (rld[r].mode, regno);
      }
    else
      abort ();
  }
       if (equiv != 0)
  {
    int regs_used = 0;
    int bad_for_class = 0;
    int max_regno = regno + rld[r].nregs;
    for (i = regno; i < max_regno; i++)
      {
        regs_used |= (!!((reload_reg_used_at_all)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
              ;
        bad_for_class |= ! (!!((reg_class_contents[(int) rld[r].class])[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))))))
            ;
      }
    if ((regs_used
         && ! free_for_value_p (regno, rld[r].mode,
           rld[r].opnum, rld[r].when_needed,
           rld[r].in, rld[r].out, r, 1))
        || bad_for_class)
      equiv = 0;
  }
       if (equiv != 0 && ! ix86_hard_regno_mode_ok ((regno), (rld[r].mode)))
  equiv = 0;
       if (equiv != 0)
  for (i = 0; i < n_earlyclobbers; i++)
    if (reg_overlap_mentioned_for_reload_p (equiv,
         reload_earlyclobbers[i]))
      {
        if (! rld[r].optional)
   reload_override_in[r] = equiv;
        equiv = 0;
        break;
      }
       if (equiv != 0)
  {
    if (regno_clobbered_p (regno, insn, rld[r].mode, 0))
      switch (rld[r].when_needed)
        {
        case RELOAD_FOR_OTHER_ADDRESS:
        case RELOAD_FOR_INPADDR_ADDRESS:
        case RELOAD_FOR_INPUT_ADDRESS:
        case RELOAD_FOR_OPADDR_ADDR:
   break;
        case RELOAD_OTHER:
        case RELOAD_FOR_INPUT:
        case RELOAD_FOR_OPERAND_ADDRESS:
   if (! rld[r].optional)
     reload_override_in[r] = equiv;
        default:
   equiv = 0;
   break;
        }
    else if (regno_clobbered_p (regno, insn, rld[r].mode, 1))
      switch (rld[r].when_needed)
        {
        case RELOAD_FOR_OTHER_ADDRESS:
        case RELOAD_FOR_INPADDR_ADDRESS:
        case RELOAD_FOR_INPUT_ADDRESS:
        case RELOAD_FOR_OPADDR_ADDR:
        case RELOAD_FOR_OPERAND_ADDRESS:
        case RELOAD_FOR_INPUT:
   break;
        case RELOAD_OTHER:
   if (! rld[r].optional)
     reload_override_in[r] = equiv;
        default:
   equiv = 0;
   break;
        }
  }
       if (equiv != 0
    && (regno != 6
        || !frame_pointer_needed))
  {
    int nr = hard_regno_nregs[regno][rld[r].mode];
    int k;
    rld[r].reg_rtx = equiv;
    reload_inherited[r] = 1;
    if (! (!!((reg_reloaded_valid)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
      spill_reg_store[regno] = (rtx) 0;
    for (k = 0; k < nr; k++)
      {
        i = spill_reg_order[regno + k];
        if (i >= 0)
   {
     mark_reload_reg_in_use (regno, rld[r].opnum,
        rld[r].when_needed,
        rld[r].mode);
     ((reload_reg_used_for_inherit)[(regno + k) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno + k) % ((unsigned) (8 * 4))))
                   ;
   }
      }
  }
     }
   if (rld[r].reg_rtx != 0 || rld[r].optional != 0)
     continue;
 }
      for (j = 0; j < n_reloads; j++)
 {
   int r = reload_order[j];
   if (rld[r].out == 0 && rld[r].in == 0 && ! rld[r].secondary_p)
     continue;
   if (rld[r].reg_rtx != 0 || rld[r].optional)
     continue;
   if (! allocate_reload_reg (chain, r, j == n_reloads - 1))
     break;
 }
      if (j == n_reloads)
 {
   win = 1;
   break;
 }
    }
  if (! win)
    {
      choose_reload_regs_init (chain, save_reload_reg_rtx);
      if (chain->n_reloads != n_reloads)
 abort ();
      for (i = 0; i < n_reloads; i++)
 {
   if (chain->rld[i].regno < 0 || chain->rld[i].reg_rtx != 0)
     continue;
   if (chain->rld[i].when_needed != rld[i].when_needed)
     abort ();
   for (j = 0; j < n_spills; j++)
     if (spill_regs[j] == chain->rld[i].regno)
       if (! set_reload_reg (j, i))
  failed_reload (chain->insn, i);
 }
    }
  for (pass = flag_expensive_optimizations; pass >= 0; pass--)
    {
      for (j = 0; j < n_reloads; j++)
 {
   int r = reload_order[j];
   rtx check_reg;
   if (reload_inherited[r] && rld[r].reg_rtx)
     check_reg = rld[r].reg_rtx;
   else if (reload_override_in[r]
     && ((((enum rtx_code) (reload_override_in[r])->code) == REG)
         || ((enum rtx_code) (reload_override_in[r])->code) == SUBREG))
     check_reg = reload_override_in[r];
   else
     continue;
   if (! free_for_value_p (true_regnum (check_reg), rld[r].mode,
      rld[r].opnum, rld[r].when_needed, rld[r].in,
      (reload_inherited[r]
       ? rld[r].out : (const_int_rtx[64])),
      r, 1))
     {
       if (pass)
  continue;
       reload_inherited[r] = 0;
       reload_override_in[r] = 0;
     }
   else if (rld[r].in
     && rld[r].out != rld[r].in
     && remove_address_replacements (rld[r].in) && pass)
     pass = 2;
 }
    }
  for (j = 0; j < n_reloads; j++)
    if (reload_override_in[j])
      rld[j].in = reload_override_in[j];
  for (j = 0; j < n_reloads; j++)
    if (rld[j].reg_rtx != 0
 && ((rld[j].optional && ! reload_inherited[j])
     || (rld[j].in == 0 && rld[j].out == 0
  && ! rld[j].secondary_p)))
      {
 int regno = true_regnum (rld[j].reg_rtx);
 if (spill_reg_order[regno] >= 0)
   clear_reload_reg_in_use (regno, rld[j].opnum,
       rld[j].when_needed, rld[j].mode);
 rld[j].reg_rtx = 0;
 reload_spill_index[j] = -1;
      }
  for (j = 0; j < n_reloads; j++)
    {
      int r = reload_order[j];
      i = reload_spill_index[r];
      if (rld[r].out_reg != 0 && (((enum rtx_code) (rld[r].out_reg)->code) == REG)
   && rld[r].reg_rtx != 0)
 {
   int nregno = (((rld[r].out_reg)->u.fld[0]).rtuint);
   int nr = 1;
   if (nregno < 53)
     nr = hard_regno_nregs[nregno][rld[r].mode];
   while (--nr >= 0)
     reg_has_output_reload[nregno + nr] = 1;
   if (i >= 0)
     {
       nr = hard_regno_nregs[i][rld[r].mode];
       while (--nr >= 0)
  ((reg_is_output_reload)[(i + nr) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i + nr) % ((unsigned) (8 * 4))));
     }
   if (rld[r].when_needed != RELOAD_OTHER
       && rld[r].when_needed != RELOAD_FOR_OUTPUT
       && rld[r].when_needed != RELOAD_FOR_INSN)
     abort ();
 }
    }
}
void
deallocate_reload_reg (int r)
{
  int regno;
  if (! rld[r].reg_rtx)
    return;
  regno = true_regnum (rld[r].reg_rtx);
  rld[r].reg_rtx = 0;
  if (spill_reg_order[regno] >= 0)
    clear_reload_reg_in_use (regno, rld[r].opnum, rld[r].when_needed,
        rld[r].mode);
  reload_spill_index[r] = -1;
}
static void
merge_assigned_reloads (rtx insn)
{
  int i, j;
  for (i = 0; i < n_reloads; i++)
    {
      int conflicting_input = 0;
      int max_input_address_opnum = -1;
      int min_conflicting_input_opnum = 30;
      if (rld[i].in == 0 || rld[i].when_needed == RELOAD_OTHER
   || rld[i].out != 0 || rld[i].reg_rtx == 0
   || reg_set_p (rld[i].reg_rtx, insn))
 continue;
      for (j = 0; j < n_reloads; j++)
 {
   if (i == j || rld[j].reg_rtx == 0
       || ! reg_overlap_mentioned_p (rld[j].reg_rtx,
         rld[i].reg_rtx))
     continue;
   if (rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
       && rld[j].opnum > max_input_address_opnum)
     max_input_address_opnum = rld[j].opnum;
   if (! rtx_equal_p (rld[i].reg_rtx, rld[j].reg_rtx)
       || rld[j].out != 0 || rld[j].in == 0
       || ! rtx_equal_p (rld[i].in, rld[j].in))
     {
       if (rld[j].when_needed != RELOAD_FOR_INPUT
    || ((rld[i].when_needed != RELOAD_FOR_INPUT_ADDRESS
         || rld[i].opnum > rld[j].opnum)
        && rld[i].when_needed != RELOAD_FOR_OTHER_ADDRESS))
  break;
       conflicting_input = 1;
       if (min_conflicting_input_opnum > rld[j].opnum)
  min_conflicting_input_opnum = rld[j].opnum;
     }
 }
      if (j == n_reloads
   && max_input_address_opnum <= min_conflicting_input_opnum)
 {
   for (j = 0; j < n_reloads; j++)
     if (i != j && rld[j].reg_rtx != 0
  && rtx_equal_p (rld[i].reg_rtx, rld[j].reg_rtx)
  && (! conflicting_input
      || rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
      || rld[j].when_needed == RELOAD_FOR_OTHER_ADDRESS))
       {
  rld[i].when_needed = RELOAD_OTHER;
  rld[j].in = 0;
  reload_spill_index[j] = -1;
  transfer_replacements (i, j);
       }
   if (rld[i].when_needed == RELOAD_OTHER)
     for (j = 0; j < n_reloads; j++)
       if (rld[j].in != 0
    && rld[j].when_needed != RELOAD_OTHER
    && rld[j].when_needed != RELOAD_FOR_OTHER_ADDRESS
    && (! conflicting_input
        || rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
        || rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
    && reg_overlap_mentioned_for_reload_p (rld[j].in,
        rld[i].in))
  {
    int k;
    rld[j].when_needed
      = ((rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
   || rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
         ? RELOAD_FOR_OTHER_ADDRESS : RELOAD_OTHER);
    if (rld[j].reg_rtx)
      for (k = 0; k < j; k++)
        if (rld[k].in != 0 && rld[k].reg_rtx != 0
     && rld[k].when_needed == rld[j].when_needed
     && rtx_equal_p (rld[k].reg_rtx, rld[j].reg_rtx)
     && ! rtx_equal_p (rld[k].in, rld[j].in))
   abort ();
  }
 }
    }
}
static rtx input_reload_insns[30];
static rtx other_input_address_reload_insns = 0;
static rtx other_input_reload_insns = 0;
static rtx input_address_reload_insns[30];
static rtx inpaddr_address_reload_insns[30];
static rtx output_reload_insns[30];
static rtx output_address_reload_insns[30];
static rtx outaddr_address_reload_insns[30];
static rtx operand_reload_insns = 0;
static rtx other_operand_reload_insns = 0;
static rtx other_output_reload_insns[30];
static rtx new_spill_reg_store[53];
static HARD_REG_SET reg_reloaded_died;
static void
emit_input_reload_insns (struct insn_chain *chain, struct reload *rl,
    rtx old, int j)
{
  rtx insn = chain->insn;
  rtx reloadreg = rl->reg_rtx;
  rtx oldequiv_reg = 0;
  rtx oldequiv = 0;
  int special = 0;
  enum machine_mode mode;
  rtx *where;
  mode = ((enum machine_mode) (old)->mode);
  if (mode == VOIDmode)
    mode = rl->inmode;
  if (oldequiv == 0 && optimize
      && ((((enum rtx_code) (old)->code) == MEM)
   || ((((enum rtx_code) (old)->code) == REG)
       && (((old)->u.fld[0]).rtuint) >= 53
       && reg_renumber[(((old)->u.fld[0]).rtuint)] < 0)))
    oldequiv = find_equiv_reg (old, insn, ALL_REGS, -1, ((void *)0), 0, mode);
  if (oldequiv)
    {
      unsigned int regno = true_regnum (oldequiv);
      if (! free_for_value_p (regno, rl->mode, rl->opnum, rl->when_needed,
         rl->in, (const_int_rtx[64]), j, 0))
 oldequiv = 0;
      if (oldequiv != 0
   && (((enum reg_class) (regclass_map[regno]) != rl->class
        && (ix86_register_move_cost ((mode), ((regclass_map[regno])), (rl->class))
     >= ix86_memory_move_cost ((mode), (rl->class), (1))))
       || ix86_secondary_memory_needed (((regclass_map[regno])), (rl->class), (mode), 1)
       ))
 oldequiv = 0;
    }
  if (oldequiv == 0
      && reload_override_in[j]
      && (((enum rtx_code) (rl->in_reg)->code) == REG))
    {
      oldequiv = old;
      old = rl->in_reg;
    }
  if (oldequiv == 0)
    oldequiv = old;
  else if ((((enum rtx_code) (oldequiv)->code) == REG))
    oldequiv_reg = oldequiv;
  else if (((enum rtx_code) (oldequiv)->code) == SUBREG)
    oldequiv_reg = (((oldequiv)->u.fld[0]).rtx1);
  if (optimize && (((enum rtx_code) (oldequiv)->code) == REG)
      && (((oldequiv)->u.fld[0]).rtuint) < 53
      && spill_reg_store[(((oldequiv)->u.fld[0]).rtuint)]
      && (((enum rtx_code) (old)->code) == REG)
      && (dead_or_set_p (insn, spill_reg_stored_to[(((oldequiv)->u.fld[0]).rtuint)])
   || rtx_equal_p (spill_reg_stored_to[(((oldequiv)->u.fld[0]).rtuint)],
     rl->out_reg)))
    delete_output_reload (insn, j, (((oldequiv)->u.fld[0]).rtuint));
  if (((enum machine_mode) (reloadreg)->mode) != mode)
    reloadreg = reload_adjust_reg_for_mode (reloadreg, mode);
  while (((enum rtx_code) (oldequiv)->code) == SUBREG && ((enum machine_mode) (oldequiv)->mode) != mode)
    oldequiv = (((oldequiv)->u.fld[0]).rtx1);
  if (((enum machine_mode) (oldequiv)->mode) != VOIDmode
      && mode != ((enum machine_mode) (oldequiv)->mode))
    oldequiv = gen_lowpart_SUBREG (mode, oldequiv);
  switch (rl->when_needed)
    {
    case RELOAD_OTHER:
      where = &other_input_reload_insns;
      break;
    case RELOAD_FOR_INPUT:
      where = &input_reload_insns[rl->opnum];
      break;
    case RELOAD_FOR_INPUT_ADDRESS:
      where = &input_address_reload_insns[rl->opnum];
      break;
    case RELOAD_FOR_INPADDR_ADDRESS:
      where = &inpaddr_address_reload_insns[rl->opnum];
      break;
    case RELOAD_FOR_OUTPUT_ADDRESS:
      where = &output_address_reload_insns[rl->opnum];
      break;
    case RELOAD_FOR_OUTADDR_ADDRESS:
      where = &outaddr_address_reload_insns[rl->opnum];
      break;
    case RELOAD_FOR_OPERAND_ADDRESS:
      where = &operand_reload_insns;
      break;
    case RELOAD_FOR_OPADDR_ADDR:
      where = &other_operand_reload_insns;
      break;
    case RELOAD_FOR_OTHER_ADDRESS:
      where = &other_input_address_reload_insns;
      break;
    default:
      abort ();
    }
  push_to_sequence (*where);
  if (rl->out && ! rl->out_reg)
    {
      if (rl->secondary_in_reload >= 0)
 abort ();
      if (reload_inherited[j])
 oldequiv = reloadreg;
      old = (((rl->in_reg)->u.fld[0]).rtx1);
      if (optimize && (((enum rtx_code) (oldequiv)->code) == REG)
   && (((oldequiv)->u.fld[0]).rtuint) < 53
   && spill_reg_store[(((oldequiv)->u.fld[0]).rtuint)]
   && (((enum rtx_code) (old)->code) == REG)
   && (dead_or_set_p (insn,
        spill_reg_stored_to[(((oldequiv)->u.fld[0]).rtuint)])
       || rtx_equal_p (spill_reg_stored_to[(((oldequiv)->u.fld[0]).rtuint)],
         old)))
 delete_output_reload (insn, j, (((oldequiv)->u.fld[0]).rtuint));
      special = 1;
      new_spill_reg_store[(((reloadreg)->u.fld[0]).rtuint)]
 = inc_for_reload (reloadreg, oldequiv, rl->out,
     rl->inc);
    }
  else if (optimize && (((enum rtx_code) (old)->code) == REG)
    && (((old)->u.fld[0]).rtuint) >= 53
    && dead_or_set_p (insn, old)
    && ! conflicts_with_override (reloadreg)
    && free_for_value_p ((((reloadreg)->u.fld[0]).rtuint), rl->mode, rl->opnum,
    rl->when_needed, old, rl->out, j, 0))
    {
      rtx temp = (((insn)->u.fld[1]).rtx1);
      while (temp && ((enum rtx_code) (temp)->code) == NOTE)
 temp = (((temp)->u.fld[1]).rtx1);
      if (temp
   && ((enum rtx_code) (temp)->code) == INSN
   && ((enum rtx_code) ((((temp)->u.fld[5]).rtx1))->code) == SET
   && ((((((temp)->u.fld[5]).rtx1))->u.fld[0]).rtx1) == old
   && asm_noperands ((((temp)->u.fld[5]).rtx1)) < 0
   && count_occurrences ((((insn)->u.fld[5]).rtx1), old, 0) == 1)
 {
   rtx old = ((((((temp)->u.fld[5]).rtx1))->u.fld[0]).rtx1);
   ((((((temp)->u.fld[5]).rtx1))->u.fld[0]).rtx1) = reloadreg;
   extract_insn (temp);
   if (constrain_operands (1))
     {
       if ((((enum rtx_code) (((((((temp)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->code) == REG)
    && (((((((((temp)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint) < 53)
  {
    spill_reg_store[(((((((((temp)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint)] = 0;
    spill_reg_stored_to[(((((((((temp)->u.fld[5]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtuint)] = 0;
  }
       if ((((reg_n_info)->data.reg[(((old)->u.fld[0]).rtuint)])->deaths) == 1
    && (((reg_n_info)->data.reg[(((old)->u.fld[0]).rtuint)])->sets) == 1)
  {
    reg_renumber[(((old)->u.fld[0]).rtuint)] = (((rl->reg_rtx)->u.fld[0]).rtuint);
    alter_reg ((((old)->u.fld[0]).rtuint), -1);
  }
       special = 1;
     }
   else
     {
       ((((((temp)->u.fld[5]).rtx1))->u.fld[0]).rtx1) = old;
     }
 }
    }
  if (! special && ! rtx_equal_p (reloadreg, oldequiv))
    {
      rtx real_oldequiv = oldequiv;
      if (((((enum rtx_code) (oldequiv)->code) == REG)
    && (((oldequiv)->u.fld[0]).rtuint) >= 53
    && (reg_equiv_memory_loc[(((oldequiv)->u.fld[0]).rtuint)] != 0
        || reg_equiv_constant[(((oldequiv)->u.fld[0]).rtuint)] != 0))
   || (((enum rtx_code) (oldequiv)->code) == SUBREG
       && (((enum rtx_code) ((((oldequiv)->u.fld[0]).rtx1))->code) == REG)
       && (((((((oldequiv)->u.fld[0]).rtx1))->u.fld[0]).rtuint)
    >= 53)
       && ((reg_equiv_memory_loc
     [((((((oldequiv)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] != 0)
    || (reg_equiv_constant
        [((((((oldequiv)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] != 0)))
   || (((rtx_class[(int) (((enum rtx_code) (oldequiv)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (oldequiv)->code) == CONST_VECTOR)
       && (ix86_preferred_reload_class ((oldequiv), ((regclass_map[(((reloadreg)->u.fld[0]).rtuint)])))
    == NO_REGS)))
 real_oldequiv = rl->in;
      gen_reload (reloadreg, real_oldequiv, rl->opnum,
    rl->when_needed);
    }
  if (flag_non_call_exceptions)
    copy_eh_notes (insn, get_insns ());
  *where = get_insns ();
  end_sequence ();
  if (oldequiv_reg)
    reload_override_in[j] = oldequiv;
}
static void
emit_output_reload_insns (struct insn_chain *chain, struct reload *rl,
     int j)
{
  rtx reloadreg = rl->reg_rtx;
  rtx insn = chain->insn;
  int special = 0;
  rtx old = rl->out;
  enum machine_mode mode = ((enum machine_mode) (old)->mode);
  rtx p;
  if (rl->when_needed == RELOAD_OTHER)
    start_sequence ();
  else
    push_to_sequence (output_reload_insns[rl->opnum]);
  if (mode == VOIDmode)
    {
      if (asm_noperands ((((insn)->u.fld[5]).rtx1)) < 0)
 _fatal_insn ("VOIDmode on an output", insn, "gcc.c", 615039, "?");
      error_for_asm (insn, "output operand is constant in `asm'");
      mode = word_mode;
      old = gen_rtx_REG (mode, (((reloadreg)->u.fld[0]).rtuint));
    }
  if (((enum machine_mode) (reloadreg)->mode) != mode)
    reloadreg = reload_adjust_reg_for_mode (reloadreg, mode);
  if (rl->secondary_out_reload >= 0)
    {
      rtx real_old = old;
      if ((((enum rtx_code) (old)->code) == REG) && (((old)->u.fld[0]).rtuint) >= 53
   && reg_equiv_mem[(((old)->u.fld[0]).rtuint)] != 0)
 real_old = reg_equiv_mem[(((old)->u.fld[0]).rtuint)];
      if (((((rl->class) == GENERAL_REGS || (rl->class) == LEGACY_REGS || (rl->class) == INDEX_REGS) && !0 && (mode) == QImode ? Q_REGS : NO_REGS)
    != NO_REGS))
 {
   rtx second_reloadreg = reloadreg;
   reloadreg = rld[rl->secondary_out_reload].reg_rtx;
   if (rl->secondary_out_icode != CODE_FOR_nothing)
     {
       emit_insn (((insn_data[rl->secondary_out_icode].genfun)
     (real_old, second_reloadreg, reloadreg)));
       special = 1;
     }
   else
     {
       int secondary_reload = rl->secondary_out_reload;
       enum insn_code tertiary_icode
  = rld[secondary_reload].secondary_out_icode;
       if (((enum machine_mode) (reloadreg)->mode) != mode)
  reloadreg = reload_adjust_reg_for_mode (reloadreg, mode);
       if (tertiary_icode != CODE_FOR_nothing)
  {
    rtx third_reloadreg
      = rld[rld[secondary_reload].secondary_out_reload].reg_rtx;
    rtx tem;
    if (((enum rtx_code) (real_old)->code) == SUBREG
        && (((unsigned short) mode_size[((enum machine_mode) (real_old)->mode)])
     > ((unsigned short) mode_size[((enum machine_mode) ((((real_old)->u.fld[0]).rtx1))->mode)]))
        && 0 != (tem = gen_lowpart_common
          (((enum machine_mode) ((((real_old)->u.fld[0]).rtx1))->mode),
    reloadreg)))
      real_old = (((real_old)->u.fld[0]).rtx1), reloadreg = tem;
    gen_reload (reloadreg, second_reloadreg,
         rl->opnum, rl->when_needed);
    emit_insn (((insn_data[tertiary_icode].genfun)
         (real_old, reloadreg, third_reloadreg)));
    special = 1;
  }
       else
  gen_reload (reloadreg, second_reloadreg,
       rl->opnum, rl->when_needed);
     }
 }
    }
  if (! special)
    {
      rtx set;
      if (! flag_expensive_optimizations
   || !(((enum rtx_code) (old)->code) == REG)
   || !(set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0))
   || rtx_equal_p (old, (((set)->u.fld[0]).rtx1))
   || !reg_mentioned_p (old, (((set)->u.fld[1]).rtx1))
   || !regno_clobbered_p ((((old)->u.fld[0]).rtuint), insn, rl->mode, 0))
 gen_reload (old, reloadreg, rl->opnum,
      rl->when_needed);
    }
  for (p = get_insns (); p; p = (((p)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
      {
 rtx pat = (((p)->u.fld[5]).rtx1);
 note_stores (pat, forget_old_reloads_1, ((void *)0));
 if (reg_mentioned_p (rl->reg_rtx, pat))
   {
     rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
     if (reload_spill_index[j] < 0
  && set
  && (((set)->u.fld[1]).rtx1) == rl->reg_rtx)
       {
  int src = ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint);
  reload_spill_index[j] = src;
  ((reg_is_output_reload)[(src) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((src) % ((unsigned) (8 * 4))));
  if (find_regno_note (insn, REG_DEAD, src))
    ((reg_reloaded_died)[(src) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((src) % ((unsigned) (8 * 4))));
       }
     if ((((rl->reg_rtx)->u.fld[0]).rtuint) < 53)
       {
  int s = rl->secondary_out_reload;
  set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0);
  if (s >= 0 && set == (rtx) 0)
    ;
  else if (s >= 0
    && (((set)->u.fld[1]).rtx1) == rl->reg_rtx
    && (((set)->u.fld[0]).rtx1) == rld[s].reg_rtx)
    {
      rtx s_reg = rld[s].reg_rtx;
      rtx next = (((p)->u.fld[2]).rtx1);
      rld[s].out = rl->out;
      rld[s].out_reg = rl->out_reg;
      set = (((((enum rtx_code) (next)->code) == INSN) || (((enum rtx_code) (next)->code) == JUMP_INSN) || (((enum rtx_code) (next)->code) == CALL_INSN)) ? (((enum rtx_code) ((((next)->u.fld[5]).rtx1))->code) == SET ? (((next)->u.fld[5]).rtx1) : single_set_2 (next, (((next)->u.fld[5]).rtx1))) : (rtx) 0);
      if (set && (((set)->u.fld[1]).rtx1) == s_reg
   && ! new_spill_reg_store[(((s_reg)->u.fld[0]).rtuint)])
        {
   ((reg_is_output_reload)[((((s_reg)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((s_reg)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))))
                     ;
   new_spill_reg_store[(((s_reg)->u.fld[0]).rtuint)] = next;
        }
    }
  else
    new_spill_reg_store[(((rl->reg_rtx)->u.fld[0]).rtuint)] = p;
       }
   }
      }
  if (rl->when_needed == RELOAD_OTHER)
    {
      emit_insn (other_output_reload_insns[rl->opnum]);
      other_output_reload_insns[rl->opnum] = get_insns ();
    }
  else
    output_reload_insns[rl->opnum] = get_insns ();
  if (flag_non_call_exceptions)
    copy_eh_notes (insn, get_insns ());
  end_sequence ();
}
static void
do_input_reload (struct insn_chain *chain, struct reload *rl, int j)
{
  rtx insn = chain->insn;
  rtx old = (rl->in && (((enum rtx_code) (rl->in)->code) == MEM)
      ? rl->in_reg : rl->in);
  if (old != 0
      && (! reload_inherited[j] || (rl->out && ! rl->out_reg))
      && ! rtx_equal_p (rl->reg_rtx, old)
      && rl->reg_rtx != 0)
    emit_input_reload_insns (chain, rld + j, old, j);
  if (optimize && reload_inherited[j] && rl->in
      && (((enum rtx_code) (rl->in)->code) == MEM)
      && (((enum rtx_code) (rl->in_reg)->code) == MEM)
      && reload_spill_index[j] >= 0
      && (!!((reg_reloaded_valid)[(reload_spill_index[j]) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((reload_spill_index[j]) % ((unsigned) (8 * 4)))))))
    rl->in = (cfun->emit->x_regno_reg_rtx)[reg_reloaded_contents[reload_spill_index[j]]];
  if (optimize
      && (reload_inherited[j] || reload_override_in[j])
      && rl->reg_rtx
      && (((enum rtx_code) (rl->reg_rtx)->code) == REG)
      && spill_reg_store[(((rl->reg_rtx)->u.fld[0]).rtuint)] != 0
      && (dead_or_set_p (insn,
    spill_reg_stored_to[(((rl->reg_rtx)->u.fld[0]).rtuint)])
   || rtx_equal_p (spill_reg_stored_to[(((rl->reg_rtx)->u.fld[0]).rtuint)],
     rl->out_reg)))
    delete_output_reload (insn, j, (((rl->reg_rtx)->u.fld[0]).rtuint));
}
static void
do_output_reload (struct insn_chain *chain, struct reload *rl, int j)
{
  rtx note, old;
  rtx insn = chain->insn;
  rtx pseudo = rl->out_reg;
  if (pseudo
      && optimize
      && (((enum rtx_code) (pseudo)->code) == REG)
      && ! rtx_equal_p (rl->in_reg, pseudo)
      && (((pseudo)->u.fld[0]).rtuint) >= 53
      && reg_last_reload_reg[(((pseudo)->u.fld[0]).rtuint)])
    {
      int pseudo_no = (((pseudo)->u.fld[0]).rtuint);
      int last_regno = (((reg_last_reload_reg[pseudo_no])->u.fld[0]).rtuint);
      if ((!!((reg_reloaded_valid)[(last_regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((last_regno) % ((unsigned) (8 * 4))))))
   && reg_reloaded_contents[last_regno] == pseudo_no
   && spill_reg_store[last_regno]
   && rtx_equal_p (pseudo, spill_reg_stored_to[last_regno]))
 delete_output_reload (insn, j, last_regno);
    }
  old = rl->out_reg;
  if (old == 0
      || rl->reg_rtx == old
      || rl->reg_rtx == 0)
    return;
  if (((((enum rtx_code) (old)->code) == REG) || ((enum rtx_code) (old)->code) == SCRATCH)
      && (note = find_reg_note (insn, REG_UNUSED, old)) != 0)
    {
      (((note)->u.fld[0]).rtx1) = rl->reg_rtx;
      return;
    }
  else if (((enum rtx_code) (old)->code) == SUBREG
    && (((enum rtx_code) ((((old)->u.fld[0]).rtx1))->code) == REG)
    && 0 != (note = find_reg_note (insn, REG_UNUSED,
       (((old)->u.fld[0]).rtx1))))
    {
      (((note)->u.fld[0]).rtx1) = gen_lowpart_common (((enum machine_mode) (old)->mode),
        rl->reg_rtx);
      return;
    }
  else if (((enum rtx_code) (old)->code) == SCRATCH)
    return;
  if (((enum rtx_code) (insn)->code) == JUMP_INSN)
    abort ();
  emit_output_reload_insns (chain, rld + j, j);
}
static unsigned char
inherit_piecemeal_p (int r , int regno )
{
  return (!(((unsigned short) mode_size[reg_raw_mode[reload_spill_index[r]]]) < ((unsigned short) mode_size[((enum machine_mode) (rld[r].reg_rtx)->mode)]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, ((regclass_map[reload_spill_index[r]]))) || reg_classes_intersect_p (MMX_REGS, ((regclass_map[reload_spill_index[r]]))) : ((unsigned short) mode_size[((enum machine_mode) (rld[r].reg_rtx)->mode)]) != ((unsigned short) mode_size[reg_raw_mode[reload_spill_index[r]]]) ? reg_classes_intersect_p (FLOAT_REGS, ((regclass_map[reload_spill_index[r]]))) : 0)
   && !(((unsigned short) mode_size[reg_raw_mode[regno]]) < ((unsigned short) mode_size[((enum machine_mode) (rld[r].reg_rtx)->mode)]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, ((regclass_map[regno]))) || reg_classes_intersect_p (MMX_REGS, ((regclass_map[regno]))) : ((unsigned short) mode_size[((enum machine_mode) (rld[r].reg_rtx)->mode)]) != ((unsigned short) mode_size[reg_raw_mode[regno]]) ? reg_classes_intersect_p (FLOAT_REGS, ((regclass_map[regno]))) : 0)
                         );
}
static void
emit_reload_insns (struct insn_chain *chain)
{
  rtx insn = chain->insn;
  int j;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reg_reloaded_died); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (j = 0; j < reload_n_operands; j++)
    input_reload_insns[j] = input_address_reload_insns[j]
      = inpaddr_address_reload_insns[j]
      = output_reload_insns[j] = output_address_reload_insns[j]
      = outaddr_address_reload_insns[j]
      = other_output_reload_insns[j] = 0;
  other_input_address_reload_insns = 0;
  other_input_reload_insns = 0;
  operand_reload_insns = 0;
  other_operand_reload_insns = 0;
  if (dump_file)
    {
      fprintf (dump_file, "\nReloads for insn # %d\n", (((insn)->u.fld[0]).rtint));
      debug_reload_to_stream (dump_file);
    }
  for (j = 0; j < n_reloads; j++)
    {
      if (rld[j].reg_rtx
   && (((rld[j].reg_rtx)->u.fld[0]).rtuint) < 53)
 new_spill_reg_store[(((rld[j].reg_rtx)->u.fld[0]).rtuint)] = 0;
      do_input_reload (chain, rld + j, j);
      do_output_reload (chain, rld + j, j);
    }
  emit_insn_before_setloc (other_input_address_reload_insns, insn, (((insn)->u.fld[4]).rtint));
  emit_insn_before_setloc (other_input_reload_insns, insn, (((insn)->u.fld[4]).rtint));
  for (j = 0; j < reload_n_operands; j++)
    {
      emit_insn_before_setloc (inpaddr_address_reload_insns[j], insn, (((insn)->u.fld[4]).rtint));
      emit_insn_before_setloc (input_address_reload_insns[j], insn, (((insn)->u.fld[4]).rtint));
      emit_insn_before_setloc (input_reload_insns[j], insn, (((insn)->u.fld[4]).rtint));
    }
  emit_insn_before_setloc (other_operand_reload_insns, insn, (((insn)->u.fld[4]).rtint));
  emit_insn_before_setloc (operand_reload_insns, insn, (((insn)->u.fld[4]).rtint));
  for (j = 0; j < reload_n_operands; j++)
    {
      rtx x = emit_insn_after_setloc (outaddr_address_reload_insns[j], insn, (((insn)->u.fld[4]).rtint));
      x = emit_insn_after_setloc (output_address_reload_insns[j], x, (((x)->u.fld[4]).rtint));
      x = emit_insn_after_setloc (output_reload_insns[j], x, (((x)->u.fld[4]).rtint));
      emit_insn_after_setloc (other_output_reload_insns[j], x, (((x)->u.fld[4]).rtint));
    }
  for (j = 0; j < n_reloads; j++)
    {
      int r = reload_order[j];
      int i = reload_spill_index[r];
      if (rld[r].in_reg != 0
   && ! (reload_inherited[r] || reload_override_in[r]))
 {
   rtx reg = rld[r].in_reg;
   if (((enum rtx_code) (reg)->code) == SUBREG)
     reg = (((reg)->u.fld[0]).rtx1);
   if ((((enum rtx_code) (reg)->code) == REG)
       && (((reg)->u.fld[0]).rtuint) >= 53
       && ! reg_has_output_reload[(((reg)->u.fld[0]).rtuint)])
     {
       int nregno = (((reg)->u.fld[0]).rtuint);
       if (reg_last_reload_reg[nregno])
  {
    int last_regno = (((reg_last_reload_reg[nregno])->u.fld[0]).rtuint);
    if (reg_reloaded_contents[last_regno] == nregno)
      spill_reg_store[last_regno] = 0;
  }
     }
 }
      if (i >= 0 && rld[r].reg_rtx != 0)
 {
   int nr = hard_regno_nregs[i][((enum machine_mode) (rld[r].reg_rtx)->mode)];
   int k;
   int part_reaches_end = 0;
   int all_reaches_end = 1;
   for (k = 0; k < nr; k++)
     {
       if (reload_reg_reaches_end_p (i + k, rld[r].opnum,
         rld[r].when_needed))
  part_reaches_end = 1;
       else
  all_reaches_end = 0;
     }
   if (all_reaches_end)
     {
       for (k = 0; k < nr; k++)
           {
  ((reg_reloaded_valid)[(i + k) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((i + k) % ((unsigned) (8 * 4)))));
      ((reg_reloaded_call_part_clobbered)[(i + k) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((i + k) % ((unsigned) (8 * 4)))));
    }
       if (rld[r].out != 0
    && ((((enum rtx_code) (rld[r].out)->code) == REG)
        || (((enum rtx_code) (rld[r].out_reg)->code) == REG)))
  {
    rtx out = ((((enum rtx_code) (rld[r].out)->code) == REG)
        ? rld[r].out
        : rld[r].out_reg
        ? rld[r].out_reg
                     : (((rld[r].in_reg)->u.fld[0]).rtx1));
    int nregno = (((out)->u.fld[0]).rtuint);
    int nnr = (nregno >= 53 ? 1
        : hard_regno_nregs[nregno]
            [((enum machine_mode) (rld[r].reg_rtx)->mode)]);
    unsigned char piecemeal;
    spill_reg_store[i] = new_spill_reg_store[i];
    spill_reg_stored_to[i] = out;
    reg_last_reload_reg[nregno] = rld[r].reg_rtx;
    piecemeal = (nregno < 53
          && nr == nnr
          && inherit_piecemeal_p (r, nregno));
    if (nregno < 53)
      for (k = 1; k < nnr; k++)
        reg_last_reload_reg[nregno + k]
   = (piecemeal
      ? (cfun->emit->x_regno_reg_rtx)[(((rld[r].reg_rtx)->u.fld[0]).rtuint) + k]
      : 0);
    for (k = 0; k < nr; k++)
      {
        ((reg_reloaded_dead)[(i + k) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((i + k) % ((unsigned) (8 * 4)))));
        reg_reloaded_contents[i + k]
   = (nregno >= 53 || !piecemeal
      ? nregno
      : nregno + k);
        reg_reloaded_insn[i + k] = insn;
        ((reg_reloaded_valid)[(i + k) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i + k) % ((unsigned) (8 * 4))));
        if (0)
   ((reg_reloaded_call_part_clobbered)[(i + k) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i + k) % ((unsigned) (8 * 4))));
      }
  }
       else if (rld[r].out_reg == 0
         && rld[r].in != 0
         && (((((enum rtx_code) (rld[r].in)->code) == REG)
       && (((rld[r].in)->u.fld[0]).rtuint) >= 53
       && ! reg_has_output_reload[(((rld[r].in)->u.fld[0]).rtuint)])
      || ((((enum rtx_code) (rld[r].in_reg)->code) == REG)
          && ! reg_has_output_reload[(((rld[r].in_reg)->u.fld[0]).rtuint)]))
         && ! reg_set_p (rld[r].reg_rtx, (((insn)->u.fld[5]).rtx1)))
  {
    int nregno;
    int nnr;
    rtx in;
    unsigned char piecemeal;
    if ((((enum rtx_code) (rld[r].in)->code) == REG)
        && (((rld[r].in)->u.fld[0]).rtuint) >= 53)
      in = rld[r].in;
    else if ((((enum rtx_code) (rld[r].in_reg)->code) == REG))
      in = rld[r].in_reg;
    else
      in = (((rld[r].in_reg)->u.fld[0]).rtx1);
    nregno = (((in)->u.fld[0]).rtuint);
    nnr = (nregno >= 53 ? 1
    : hard_regno_nregs[nregno]
        [((enum machine_mode) (rld[r].reg_rtx)->mode)]);
    reg_last_reload_reg[nregno] = rld[r].reg_rtx;
    piecemeal = (nregno < 53
          && nr == nnr
          && inherit_piecemeal_p (r, nregno));
    if (nregno < 53)
      for (k = 1; k < nnr; k++)
        reg_last_reload_reg[nregno + k]
   = (piecemeal
      ? (cfun->emit->x_regno_reg_rtx)[(((rld[r].reg_rtx)->u.fld[0]).rtuint) + k]
      : 0);
    if (! reload_inherited[r]
        || (rld[r].out && ! rld[r].out_reg))
      spill_reg_store[i] = 0;
    for (k = 0; k < nr; k++)
      {
        ((reg_reloaded_dead)[(i + k) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((i + k) % ((unsigned) (8 * 4)))));
        reg_reloaded_contents[i + k]
   = (nregno >= 53 || !piecemeal
      ? nregno
      : nregno + k);
        reg_reloaded_insn[i + k] = insn;
        ((reg_reloaded_valid)[(i + k) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i + k) % ((unsigned) (8 * 4))));
        if (0)
   ((reg_reloaded_call_part_clobbered)[(i + k) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i + k) % ((unsigned) (8 * 4))));
      }
  }
     }
   else if (part_reaches_end)
     {
       for (k = 0; k < nr; k++)
  if (reload_reg_reaches_end_p (i + k,
           rld[r].opnum,
           rld[r].when_needed))
    ((reg_reloaded_valid)[(i + k) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((i + k) % ((unsigned) (8 * 4)))));
     }
 }
      if (i < 0 && rld[r].out != 0
   && ((((enum rtx_code) (rld[r].out)->code) == REG)
       || ((((enum rtx_code) (rld[r].out)->code) == MEM)
    && (((enum rtx_code) (rld[r].out_reg)->code) == REG))))
 {
   rtx out = ((((enum rtx_code) (rld[r].out)->code) == REG)
       ? rld[r].out : rld[r].out_reg);
   int nregno = (((out)->u.fld[0]).rtuint);
   if (nregno >= 53)
     {
       rtx src_reg, store_insn = (rtx) 0;
       reg_last_reload_reg[nregno] = 0;
       src_reg = rld[r].reg_rtx;
       if (! src_reg)
  {
    rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
    if (set && (((set)->u.fld[0]).rtx1) == rld[r].out)
      {
        int k;
        src_reg = (((set)->u.fld[1]).rtx1);
        store_insn = insn;
        for (k = 0; k < n_reloads; k++)
   {
     if (rld[k].in == src_reg)
       {
         src_reg = rld[k].reg_rtx;
         break;
       }
   }
      }
  }
       else
  store_insn = new_spill_reg_store[(((src_reg)->u.fld[0]).rtuint)];
       if (src_reg && (((enum rtx_code) (src_reg)->code) == REG)
    && (((src_reg)->u.fld[0]).rtuint) < 53)
  {
    int src_regno = (((src_reg)->u.fld[0]).rtuint);
    int nr = hard_regno_nregs[src_regno][rld[r].mode];
    rtx note = find_regno_note (insn, REG_DEAD, src_regno);
    if (! note && store_insn)
      note = find_regno_note (store_insn, REG_DEAD, src_regno);
    while (nr-- > 0)
      {
        spill_reg_store[src_regno + nr] = store_insn;
        spill_reg_stored_to[src_regno + nr] = out;
        reg_reloaded_contents[src_regno + nr] = nregno;
        reg_reloaded_insn[src_regno + nr] = store_insn;
        ((reg_reloaded_dead)[(src_regno + nr) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((src_regno + nr) % ((unsigned) (8 * 4)))));
        ((reg_reloaded_valid)[(src_regno + nr) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((src_regno + nr) % ((unsigned) (8 * 4))));
        if (0
                            )
   ((reg_reloaded_call_part_clobbered)[(src_regno + nr) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((src_regno + nr) % ((unsigned) (8 * 4))))
                      ;
        ((reg_is_output_reload)[(src_regno + nr) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((src_regno + nr) % ((unsigned) (8 * 4))));
        if (note)
   ((reg_reloaded_died)[(src_regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((src_regno) % ((unsigned) (8 * 4))));
        else
   ((reg_reloaded_died)[(src_regno) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((src_regno) % ((unsigned) (8 * 4)))));
      }
    reg_last_reload_reg[nregno] = src_reg;
    reg_has_output_reload[nregno] = 1;
  }
     }
   else
     {
       int num_regs = hard_regno_nregs[nregno][((enum machine_mode) (rld[r].out)->mode)];
       while (num_regs-- > 0)
  reg_last_reload_reg[nregno + num_regs] = 0;
     }
 }
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (reg_reloaded_dead), *scan_fp_ = (reg_reloaded_died); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
}
rtx
gen_reload (rtx out, rtx in, int opnum, enum reload_type type)
{
  rtx last = get_last_insn ();
  rtx tem;
  if (((enum rtx_code) (in)->code) == SUBREG
      && (((unsigned short) mode_size[((enum machine_mode) (in)->mode)])
   > ((unsigned short) mode_size[((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode)]))
      && (tem = gen_lowpart_common (((enum machine_mode) ((((in)->u.fld[0]).rtx1))->mode), out)) != 0)
    in = (((in)->u.fld[0]).rtx1), out = tem;
  else if (((enum rtx_code) (out)->code) == SUBREG
    && (((unsigned short) mode_size[((enum machine_mode) (out)->mode)])
        > ((unsigned short) mode_size[((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode)]))
    && (tem = gen_lowpart_common (((enum machine_mode) ((((out)->u.fld[0]).rtx1))->mode), in)) != 0)
    out = (((out)->u.fld[0]).rtx1), in = tem;
  if (((enum rtx_code) (in)->code) == PLUS
      && ((((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == REG)
   || ((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == SUBREG
   || (((enum rtx_code) ((((in)->u.fld[0]).rtx1))->code) == MEM))
      && ((((enum rtx_code) ((((in)->u.fld[1]).rtx1))->code) == REG)
   || ((enum rtx_code) ((((in)->u.fld[1]).rtx1))->code) == SUBREG
   || ((rtx_class[(int) (((enum rtx_code) ((((in)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((in)->u.fld[1]).rtx1))->code) == CONST_VECTOR)
   || (((enum rtx_code) ((((in)->u.fld[1]).rtx1))->code) == MEM)))
    {
      rtx op0, op1, tem, insn;
      int code;
      op0 = find_replacement (&(((in)->u.fld[0]).rtx1));
      op1 = find_replacement (&(((in)->u.fld[1]).rtx1));
      if ((((enum rtx_code) ((((in)->u.fld[1]).rtx1))->code) == REG)
   && (((out)->u.fld[0]).rtuint) == ((((((in)->u.fld[1]).rtx1))->u.fld[0]).rtuint))
 tem = op0, op0 = op1, op1 = tem;
      if (op0 != (((in)->u.fld[0]).rtx1) || op1 != (((in)->u.fld[1]).rtx1))
 in = gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (in)->mode)), (op0), (op1));
      insn = emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (out), (in)));
      code = ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn));
      if (code >= 0)
 {
   extract_insn (insn);
   if (constrain_operands (1))
     return insn;
 }
      delete_insns_since (last);
      code = (int) (optab_table[OTI_add])->handlers[(int) ((enum machine_mode) (out)->mode)].insn_code;
      if (((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op1)->code) == CONST_VECTOR) || (((enum rtx_code) (op1)->code) == MEM) || ((enum rtx_code) (op1)->code) == SUBREG
   || ((((enum rtx_code) (op1)->code) == REG)
       && (((op1)->u.fld[0]).rtuint) >= 53)
   || (code != CODE_FOR_nothing
       && ! ((*insn_data[code].operand[2].predicate)
      (op1, insn_data[code].operand[2].mode))))
 tem = op0, op0 = op1, op1 = tem;
      gen_reload (out, op0, opnum, type);
      if (rtx_equal_p (op0, op1))
 op1 = out;
      insn = emit_insn (gen_add2_insn (out, op1));
      code = ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn));
      if (code >= 0)
 {
   extract_insn (insn);
   if (constrain_operands (1))
     {
       (((insn)->u.fld[8]).rtx1)
  = gen_rtx_fmt_ee (EXPR_LIST, (REG_EQUIV), (in), ((((insn)->u.fld[8]).rtx1)));
       return insn;
     }
 }
      delete_insns_since (last);
      gen_reload (out, op1, opnum, type);
      insn = emit_insn (gen_add2_insn (out, op0));
      (((insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_EQUIV), (in), ((((insn)->u.fld[8]).rtx1)));
    }
  else if (((((enum rtx_code) (in)->code) == REG) || ((enum rtx_code) (in)->code) == SUBREG)
    && reg_or_subregno (in) < 53
    && ((((enum rtx_code) (out)->code) == REG) || ((enum rtx_code) (out)->code) == SUBREG)
    && reg_or_subregno (out) < 53
    && ix86_secondary_memory_needed (((regclass_map[reg_or_subregno (in)])), ((regclass_map[reg_or_subregno (out)])), (((enum machine_mode) (out)->mode)), 1)
                          )
    {
      rtx loc = get_secondary_mem (in, ((enum machine_mode) (out)->mode), opnum, type);
      if (((enum machine_mode) (loc)->mode) != ((enum machine_mode) (out)->mode))
 out = gen_rtx_REG (((enum machine_mode) (loc)->mode), (((out)->u.fld[0]).rtuint));
      if (((enum machine_mode) (loc)->mode) != ((enum machine_mode) (in)->mode))
 in = gen_rtx_REG (((enum machine_mode) (loc)->mode), (((in)->u.fld[0]).rtuint));
      gen_reload (loc, in, opnum, type);
      gen_reload (out, loc, opnum, type);
    }
  else if ((((rtx_class[(int) (((enum rtx_code) (in)->code))]) & (~1)) == (RTX_OBJ & (~1))) || ((enum rtx_code) (in)->code) == SUBREG)
    emit_insn (gen_move_insn (out, in));
  else
    emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (out), (in)));
  return last ? (((last)->u.fld[2]).rtx1) : get_insns ();
}
static void
delete_output_reload (rtx insn, int j, int last_reload_reg)
{
  rtx output_reload_insn = spill_reg_store[last_reload_reg];
  rtx reg = spill_reg_stored_to[last_reload_reg];
  int k;
  int n_occurrences;
  int n_inherited = 0;
  rtx i1;
  rtx substed;
  if ((((output_reload_insn))->volatil))
    return;
  while (((enum rtx_code) (reg)->code) == SUBREG)
    reg = (((reg)->u.fld[0]).rtx1);
  substed = reg_equiv_memory_loc[(((reg)->u.fld[0]).rtuint)];
  for (k = n_reloads - 1; k >= 0; k--)
    {
      rtx reg2 = rld[k].in;
      if (! reg2)
 continue;
      if ((((enum rtx_code) (reg2)->code) == MEM) || reload_override_in[k])
 reg2 = rld[k].in_reg;
      while (((enum rtx_code) (reg2)->code) == SUBREG)
 reg2 = (((reg2)->u.fld[0]).rtx1);
      if (rtx_equal_p (reg2, reg))
 {
   if (reload_inherited[k] || reload_override_in[k] || k == j)
     {
       n_inherited++;
       reg2 = rld[k].out_reg;
       if (! reg2)
  continue;
       while (((enum rtx_code) (reg2)->code) == SUBREG)
  reg2 = (((reg2)->u.fld[0]).rtx1);
       if (rtx_equal_p (reg2, reg))
  n_inherited++;
     }
   else
     return;
 }
    }
  n_occurrences = count_occurrences ((((insn)->u.fld[5]).rtx1), reg, 0);
  if (substed)
    n_occurrences += count_occurrences ((((insn)->u.fld[5]).rtx1),
     eliminate_regs (substed, 0,
       (rtx) 0), 0);
  if (n_occurrences > n_inherited)
    return;
  for (i1 = (((output_reload_insn)->u.fld[2]).rtx1);
       i1 != insn; i1 = (((i1)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (i1)->code) == CODE_LABEL || ((enum rtx_code) (i1)->code) == JUMP_INSN)
 return;
      if ((((enum rtx_code) (i1)->code) == INSN || ((enum rtx_code) (i1)->code) == CALL_INSN)
   && reg_mentioned_p (reg, (((i1)->u.fld[5]).rtx1)))
 {
   while (((enum rtx_code) (i1)->code) == INSN && ((enum rtx_code) ((((i1)->u.fld[5]).rtx1))->code) == USE)
     {
       n_occurrences += rtx_equal_p (reg, ((((((i1)->u.fld[5]).rtx1))->u.fld[0]).rtx1)) != 0;
       i1 = (((i1)->u.fld[2]).rtx1);
     }
   if (n_occurrences <= n_inherited && i1 == insn)
     break;
   return;
 }
    }
  for (k = hard_regno_nregs[last_reload_reg][((enum machine_mode) (reg)->mode)]; k-- > 0; )
    {
      spill_reg_store[last_reload_reg + k] = 0;
      spill_reg_stored_to[last_reload_reg + k] = 0;
    }
  if (rld[j].out != rld[j].in
      && (((reg_n_info)->data.reg[(((reg)->u.fld[0]).rtuint)])->deaths) == 1
      && (((reg_n_info)->data.reg[(((reg)->u.fld[0]).rtuint)])->sets) == 1
      && (((reg_n_info)->data.reg[(((reg)->u.fld[0]).rtuint)])->basic_block1) >= 0
      && find_regno_note (insn, REG_DEAD, (((reg)->u.fld[0]).rtuint)))
    {
      rtx i2;
      for (i2 = (((insn)->u.fld[1]).rtx1); i2; i2 = (((i2)->u.fld[1]).rtx1))
 {
   rtx set = (((((enum rtx_code) (i2)->code) == INSN) || (((enum rtx_code) (i2)->code) == JUMP_INSN) || (((enum rtx_code) (i2)->code) == CALL_INSN)) ? (((enum rtx_code) ((((i2)->u.fld[5]).rtx1))->code) == SET ? (((i2)->u.fld[5]).rtx1) : single_set_2 (i2, (((i2)->u.fld[5]).rtx1))) : (rtx) 0);
   if (set != 0 && (((set)->u.fld[0]).rtx1) == reg)
     continue;
   if (((enum rtx_code) (i2)->code) == CODE_LABEL
       || ((enum rtx_code) (i2)->code) == JUMP_INSN)
     break;
   if ((((enum rtx_code) (i2)->code) == INSN || ((enum rtx_code) (i2)->code) == CALL_INSN)
       && reg_mentioned_p (reg, (((i2)->u.fld[5]).rtx1)))
     {
       delete_address_reloads (output_reload_insn, insn);
       delete_insn (output_reload_insn);
       return;
     }
 }
      for (i2 = (((insn)->u.fld[1]).rtx1); i2; i2 = (((i2)->u.fld[1]).rtx1))
 {
   rtx set = (((((enum rtx_code) (i2)->code) == INSN) || (((enum rtx_code) (i2)->code) == JUMP_INSN) || (((enum rtx_code) (i2)->code) == CALL_INSN)) ? (((enum rtx_code) ((((i2)->u.fld[5]).rtx1))->code) == SET ? (((i2)->u.fld[5]).rtx1) : single_set_2 (i2, (((i2)->u.fld[5]).rtx1))) : (rtx) 0);
   if (set != 0 && (((set)->u.fld[0]).rtx1) == reg)
     {
       delete_address_reloads (i2, insn);
       delete_insn (i2);
     }
   if (((enum rtx_code) (i2)->code) == CODE_LABEL
       || ((enum rtx_code) (i2)->code) == JUMP_INSN)
     break;
 }
      reg_renumber[(((reg)->u.fld[0]).rtuint)] = (((rld[j].reg_rtx)->u.fld[0]).rtuint);
      alter_reg ((((reg)->u.fld[0]).rtuint), -1);
    }
  else
    {
      delete_address_reloads (output_reload_insn, insn);
      delete_insn (output_reload_insn);
    }
}
static void
delete_address_reloads (rtx dead_insn, rtx current_insn)
{
  rtx set = (((((enum rtx_code) (dead_insn)->code) == INSN) || (((enum rtx_code) (dead_insn)->code) == JUMP_INSN) || (((enum rtx_code) (dead_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((dead_insn)->u.fld[5]).rtx1))->code) == SET ? (((dead_insn)->u.fld[5]).rtx1) : single_set_2 (dead_insn, (((dead_insn)->u.fld[5]).rtx1))) : (rtx) 0);
  rtx set2, dst, prev, next;
  if (set)
    {
      rtx dst = (((set)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (dst)->code) == MEM))
 delete_address_reloads_1 (dead_insn, (((dst)->u.fld[0]).rtx1), current_insn);
    }
  prev = (((dead_insn)->u.fld[1]).rtx1);
  next = (((dead_insn)->u.fld[2]).rtx1);
  if (! prev || ! next)
    return;
  set = (((((enum rtx_code) (next)->code) == INSN) || (((enum rtx_code) (next)->code) == JUMP_INSN) || (((enum rtx_code) (next)->code) == CALL_INSN)) ? (((enum rtx_code) ((((next)->u.fld[5]).rtx1))->code) == SET ? (((next)->u.fld[5]).rtx1) : single_set_2 (next, (((next)->u.fld[5]).rtx1))) : (rtx) 0);
  set2 = (((((enum rtx_code) (prev)->code) == INSN) || (((enum rtx_code) (prev)->code) == JUMP_INSN) || (((enum rtx_code) (prev)->code) == CALL_INSN)) ? (((enum rtx_code) ((((prev)->u.fld[5]).rtx1))->code) == SET ? (((prev)->u.fld[5]).rtx1) : single_set_2 (prev, (((prev)->u.fld[5]).rtx1))) : (rtx) 0);
  if (! set || ! set2
      || ((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) != PLUS || ((enum rtx_code) ((((set2)->u.fld[1]).rtx1))->code) != PLUS
      || ((enum rtx_code) (((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) != CONST_INT
      || ((enum rtx_code) (((((((set2)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) != CONST_INT)
    return;
  dst = (((set)->u.fld[0]).rtx1);
  if (! rtx_equal_p (dst, (((set2)->u.fld[0]).rtx1))
      || ! rtx_equal_p (dst, ((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtx1))
      || ! rtx_equal_p (dst, ((((((set2)->u.fld[1]).rtx1))->u.fld[0]).rtx1))
      || (((((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])
   != -((((((((set2)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])))
    return;
  delete_related_insns (prev);
  delete_related_insns (next);
}
static void
delete_address_reloads_1 (rtx dead_insn, rtx x, rtx current_insn)
{
  rtx prev, set, dst, i2;
  int i, j;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  if (code != REG)
    {
      const char *fmt = (rtx_format[(int) (code)]);
      for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
 {
   if (fmt[i] == 'e')
     delete_address_reloads_1 (dead_insn, (((x)->u.fld[i]).rtx1), current_insn);
   else if (fmt[i] == 'E')
     {
       for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
  delete_address_reloads_1 (dead_insn, (((((x)->u.fld[i]).rtvec1))->elem[j]),
       current_insn);
     }
 }
      return;
    }
  if (spill_reg_order[(((x)->u.fld[0]).rtuint)] < 0)
    return;
  for (prev = (((dead_insn)->u.fld[1]).rtx1); prev; prev = (((prev)->u.fld[1]).rtx1))
    {
      code = ((enum rtx_code) (prev)->code);
      if (code == CODE_LABEL || code == JUMP_INSN)
 return;
      if (!((((enum rtx_code) (prev)->code) == INSN) || (((enum rtx_code) (prev)->code) == JUMP_INSN) || (((enum rtx_code) (prev)->code) == CALL_INSN)))
 continue;
      if (reg_set_p (x, (((prev)->u.fld[5]).rtx1)))
 break;
      if (reg_referenced_p (x, (((prev)->u.fld[5]).rtx1)))
 return;
    }
  if (! prev || (((prev)->u.fld[0]).rtint) < reload_first_uid)
    return;
  set = (((((enum rtx_code) (prev)->code) == INSN) || (((enum rtx_code) (prev)->code) == JUMP_INSN) || (((enum rtx_code) (prev)->code) == CALL_INSN)) ? (((enum rtx_code) ((((prev)->u.fld[5]).rtx1))->code) == SET ? (((prev)->u.fld[5]).rtx1) : single_set_2 (prev, (((prev)->u.fld[5]).rtx1))) : (rtx) 0);
  if (! set)
    return;
  dst = (((set)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (dst)->code) == REG)
      || ! rtx_equal_p (dst, x))
    return;
  if (! reg_set_p (dst, (((dead_insn)->u.fld[5]).rtx1)))
    {
      for (i2 = (((dead_insn)->u.fld[2]).rtx1); i2; i2 = (((i2)->u.fld[2]).rtx1))
 {
   if (((enum rtx_code) (i2)->code) == CODE_LABEL)
     break;
   if (! ((((enum rtx_code) (i2)->code) == INSN) || (((enum rtx_code) (i2)->code) == JUMP_INSN) || (((enum rtx_code) (i2)->code) == CALL_INSN)))
     continue;
   if (reg_referenced_p (dst, (((i2)->u.fld[5]).rtx1)))
     {
       if (i2 == current_insn)
  {
    for (j = n_reloads - 1; j >= 0; j--)
      if ((rld[j].reg_rtx == dst && reload_inherited[j])
   || reload_override_in[j] == dst)
        return;
    for (j = n_reloads - 1; j >= 0; j--)
      if (rld[j].in && rld[j].reg_rtx == dst)
        break;
    if (j >= 0)
      break;
  }
       return;
     }
   if (((enum rtx_code) (i2)->code) == JUMP_INSN)
     break;
   if (i2 == current_insn)
     {
       for (j = n_reloads - 1; j >= 0; j--)
  if ((rld[j].reg_rtx == dst && reload_inherited[j])
      || reload_override_in[j] == dst)
    return;
     }
   if (reg_set_p (dst, (((i2)->u.fld[5]).rtx1)))
     break;
 }
    }
  delete_address_reloads_1 (prev, (((set)->u.fld[1]).rtx1), current_insn);
  reg_reloaded_contents[(((dst)->u.fld[0]).rtuint)] = -1;
  delete_insn (prev);
}
static rtx
inc_for_reload (rtx reloadreg, rtx in, rtx value1, int inc_amount)
{
  rtx incloc = (((value1)->u.fld[0]).rtx1);
  int post = (((enum rtx_code) (value1)->code) == POST_DEC || ((enum rtx_code) (value1)->code) == POST_INC);
  rtx last;
  rtx inc;
  rtx add_insn;
  int code;
  rtx store;
  rtx real_in = in == value1 ? (((in)->u.fld[0]).rtx1) : in;
  if ((((enum rtx_code) (incloc)->code) == REG))
    reg_last_reload_reg[(((incloc)->u.fld[0]).rtuint)] = 0;
  if (((enum rtx_code) (value1)->code) == PRE_DEC || ((enum rtx_code) (value1)->code) == POST_DEC)
    inc_amount = -inc_amount;
  inc = gen_rtx_CONST_INT (VOIDmode, (long) (inc_amount));
  if (post && real_in != reloadreg)
    emit_insn (gen_move_insn (reloadreg, real_in));
  if (in == value1)
    {
      last = get_last_insn ();
      add_insn = emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (incloc), (gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (incloc)->mode)), (incloc), (inc))))
                          );
      code = ((((add_insn)->u.fld[6]).rtint) >= 0 ? (((add_insn)->u.fld[6]).rtint) : recog_memoized_1 (add_insn));
      if (code >= 0)
 {
   extract_insn (add_insn);
   if (constrain_operands (1))
     {
       if (! post)
  emit_insn (gen_move_insn (reloadreg, incloc));
       return add_insn;
     }
 }
      delete_insns_since (last);
    }
  if (! post)
    {
      if (in != reloadreg)
 emit_insn (gen_move_insn (reloadreg, real_in));
      emit_insn (gen_add2_insn (reloadreg, inc));
      store = emit_insn (gen_move_insn (incloc, reloadreg));
    }
  else
    {
      emit_insn (gen_add2_insn (reloadreg, inc));
      store = emit_insn (gen_move_insn (incloc, reloadreg));
      emit_insn (gen_add2_insn (reloadreg, gen_rtx_CONST_INT (VOIDmode, (long) (-inc_amount))));
    }
  return store;
}
static void
copy_eh_notes (rtx insn, rtx x)
{
  rtx eh_note = find_reg_note (insn, REG_EH_REGION, (rtx) 0);
  if (eh_note)
    {
      for (; x != 0; x = (((x)->u.fld[2]).rtx1))
 {
   if (may_trap_p ((((x)->u.fld[5]).rtx1)))
     (((x)->u.fld[8]).rtx1)
       = gen_rtx_fmt_ee (EXPR_LIST, (REG_EH_REGION), ((((eh_note)->u.fld[0]).rtx1)), ((((x)->u.fld[8]).rtx1)))
                     ;
 }
    }
}
void
fixup_abnormal_edges (void)
{
  unsigned char inserted = 0;
  basic_block bb;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      edge e;
      for (e = bb->succ; e; e = e->succ_next)
 {
   if (e->flags & 4)
     break;
   if ((e->flags & (2 | 8))
       == (2 | 8))
     break;
 }
      if (e && ((enum rtx_code) ((bb)->end_)->code) != CALL_INSN
   && !can_throw_internal ((bb)->end_))
 {
   rtx insn = (bb)->end_, stop = ((((bb)->end_)->u.fld[2]).rtx1);
   rtx next;
   for (e = bb->succ; e; e = e->succ_next)
     if (e->flags & 1)
       break;
   while ((((enum rtx_code) (insn)->code) == INSN || ((enum rtx_code) (insn)->code) == NOTE)
   && !can_throw_internal (insn)
   && insn != (bb)->head_)
     insn = (((insn)->u.fld[1]).rtx1);
   if (((enum rtx_code) (insn)->code) != CALL_INSN && !can_throw_internal (insn))
     abort ();
   (bb)->end_ = insn;
   inserted = 1;
   insn = (((insn)->u.fld[2]).rtx1);
   while (insn && insn != stop)
     {
       next = (((insn)->u.fld[2]).rtx1);
       if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
  {
           delete_insn (insn);
    if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE)
      {
        (((insn))->volatil) = 0;
        (((insn)->u.fld[1]).rtx1) = (rtx) 0;
        (((insn)->u.fld[2]).rtx1) = (rtx) 0;
        insert_insn_on_edge (insn, e);
      }
  }
       insn = next;
     }
 }
    }
  if (flag_non_call_exceptions)
    {
      sbitmap blocks;
      blocks = sbitmap_alloc (last_basic_block);
      sbitmap_ones (blocks);
      find_many_sub_basic_blocks (blocks);
    }
  if (inserted)
    commit_edge_insertions ();
}
struct target_info
{
  int uid;
  struct target_info *next;
  HARD_REG_SET live_regs;
  int block;
  int bb_tick;
};
static struct resources start_of_epilogue_needs;
static struct resources end_of_function_needs;
static struct target_info **target_hash_table = ((void *)0);
static int *bb_ticks;
static HARD_REG_SET current_live_regs;
static HARD_REG_SET pending_dead_regs;
static void update_live_status (rtx, rtx, void *);
static int find_basic_block (rtx, int);
static rtx next_insn_no_annul (rtx);
static rtx find_dead_or_set_registers (rtx, struct resources*,
           rtx*, int, struct resources,
           struct resources);
static void
update_live_status (rtx dest, rtx x, void *data )
{
  int first_regno, last_regno;
  int i;
  if (!(((enum rtx_code) (dest)->code) == REG)
      && (((enum rtx_code) (dest)->code) != SUBREG || !(((enum rtx_code) ((((dest)->u.fld[0]).rtx1))->code) == REG)))
    return;
  if (((enum rtx_code) (dest)->code) == SUBREG)
    first_regno = subreg_regno (dest);
  else
    first_regno = (((dest)->u.fld[0]).rtuint);
  last_regno = first_regno + hard_regno_nregs[first_regno][((enum machine_mode) (dest)->mode)];
  if (((enum rtx_code) (x)->code) == CLOBBER)
    for (i = first_regno; i < last_regno; i++)
      ((current_live_regs)[(i) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))));
  else
    for (i = first_regno; i < last_regno; i++)
      {
 ((current_live_regs)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
 ((pending_dead_regs)[(i) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))));
      }
}
static int
find_basic_block (rtx insn, int search_limit)
{
  basic_block bb;
  for (insn = prev_nonnote_insn (insn);
       insn && ((enum rtx_code) (insn)->code) != BARRIER && search_limit != 0;
       insn = prev_nonnote_insn (insn), --search_limit)
    ;
  if (search_limit == 0)
    return -1;
  else if (insn == 0)
    return ENTRY_BLOCK_PTR->next_bb->index;
  for (insn = next_nonnote_insn (insn);
       insn && ((enum rtx_code) (insn)->code) == CODE_LABEL;
       insn = next_nonnote_insn (insn))
    {
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 if (insn == (bb)->head_)
   return bb->index;
    }
  return -1;
}
static rtx
next_insn_no_annul (rtx insn)
{
  if (insn)
    {
      if ((((enum rtx_code) (insn)->code) == JUMP_INSN
    || ((enum rtx_code) (insn)->code) == CALL_INSN
    || ((enum rtx_code) (insn)->code) == INSN)
   && (((insn))->unchanging)
   && ((((((insn)->u.fld[1]).rtx1))->u.fld[2]).rtx1) != insn)
 {
   rtx next = (((insn)->u.fld[2]).rtx1);
   enum rtx_code code = ((enum rtx_code) (next)->code);
   while ((code == INSN || code == JUMP_INSN || code == CALL_INSN)
   && (((next))->in_struct))
     {
       insn = next;
       next = (((insn)->u.fld[2]).rtx1);
       code = ((enum rtx_code) (next)->code);
     }
 }
      insn = (((insn)->u.fld[2]).rtx1);
      if (insn && ((enum rtx_code) (insn)->code) == INSN
   && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
 insn = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
    }
  return insn;
}
void
mark_referenced_resources (rtx x, struct resources *res,
      int include_delayed_effects)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  int i, j;
  unsigned int r;
  const char *format_ptr;
  switch (code)
    {
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case PC:
    case SYMBOL_REF:
    case LABEL_REF:
      return;
    case SUBREG:
      if (!(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 mark_referenced_resources ((((x)->u.fld[0]).rtx1), res, 0);
      else
 {
   unsigned int regno = subreg_regno (x);
   unsigned int last_regno
     = regno + hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
   if (last_regno > 53)
     abort ();
   for (r = regno; r < last_regno; r++)
     ((res->regs)[(r) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((r) % ((unsigned) (8 * 4))));
 }
      return;
    case REG:
 {
   unsigned int regno = (((x)->u.fld[0]).rtuint);
   unsigned int last_regno
     = regno + hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
   if (last_regno > 53)
     abort ();
   for (r = regno; r < last_regno; r++)
     ((res->regs)[(r) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((r) % ((unsigned) (8 * 4))));
 }
      return;
    case MEM:
      if ((((x))->unchanging))
 res->unch_memory = 1;
      else
 res->memory = 1;
      res->volatil |= (((x))->volatil);
      mark_referenced_resources ((((x)->u.fld[0]).rtx1), res, 0);
      return;
    case CC0:
      res->cc = 1;
      return;
    case UNSPEC_VOLATILE:
    case ASM_INPUT:
      res->volatil = 1;
      return;
    case TRAP_IF:
      res->volatil = 1;
      break;
    case ASM_OPERANDS:
      res->volatil |= (((x))->volatil);
      for (i = 0; i < (((((x)->u.fld[3]).rtvec1))->num_elem); i++)
 mark_referenced_resources ((((((x)->u.fld[3]).rtvec1))->elem[i]), res, 0);
      return;
    case CALL:
      mark_referenced_resources (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), res, 0);
      mark_referenced_resources ((((x)->u.fld[1]).rtx1), res, 0);
      return;
    case SET:
      mark_referenced_resources ((((x)->u.fld[1]).rtx1), res, 0);
      x = (((x)->u.fld[0]).rtx1);
      if (((enum rtx_code) (x)->code) == SIGN_EXTRACT
   || ((enum rtx_code) (x)->code) == ZERO_EXTRACT
   || ((enum rtx_code) (x)->code) == STRICT_LOW_PART)
 mark_referenced_resources (x, res, 0);
      else if (((enum rtx_code) (x)->code) == SUBREG)
 x = (((x)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (x)->code) == MEM))
 mark_referenced_resources ((((x)->u.fld[0]).rtx1), res, 0);
      return;
    case CLOBBER:
      return;
    case CALL_INSN:
      if (include_delayed_effects)
 {
   rtx insn = (((x)->u.fld[1]).rtx1);
   rtx sequence = 0;
   int seq_size = 0;
   int i;
   if ((((insn)->u.fld[2]).rtx1) != x)
     {
       sequence = ((((((insn)->u.fld[2]).rtx1))->u.fld[5]).rtx1);
       seq_size = (((((sequence)->u.fld[0]).rtvec1))->num_elem);
       if (((enum rtx_code) (sequence)->code) != SEQUENCE)
  abort ();
     }
   res->memory = 1;
   ((res->regs)[(7) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((7) % ((unsigned) (8 * 4))));
   if (frame_pointer_needed)
     {
       ((res->regs)[(20) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((20) % ((unsigned) (8 * 4))));
       ((res->regs)[(6) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((6) % ((unsigned) (8 * 4))));
     }
   for (i = 0; i < 53; i++)
     if (global_regs[i])
       ((res->regs)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
   if (find_reg_note (x, REG_SETJMP, ((void *)0)))
     do { HARD_REG_ELT_TYPE *scan_tp_ = (res->regs); scan_tp_[0] = -1; scan_tp_[1] = -1; } while (0);
   {
     rtx link;
     for (link = (((x)->u.fld[9]).rtx1);
   link;
   link = (((link)->u.fld[1]).rtx1))
       if (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == USE)
  {
    for (i = 1; i < seq_size; i++)
      {
        rtx slot_pat = ((((((((sequence)->u.fld[0]).rtvec1))->elem[i]))->u.fld[5]).rtx1);
        if (((enum rtx_code) (slot_pat)->code) == SET
     && rtx_equal_p ((((slot_pat)->u.fld[0]).rtx1),
       ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtx1)))
   break;
      }
    if (i >= seq_size)
      mark_referenced_resources (((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
            res, 0);
  }
   }
 }
    case INSN:
    case JUMP_INSN:
      mark_referenced_resources ((((x)->u.fld[5]).rtx1), res, include_delayed_effects);
      return;
    default:
      break;
    }
  format_ptr = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++)
    switch (*format_ptr++)
      {
      case 'e':
 mark_referenced_resources ((((x)->u.fld[i]).rtx1), res, include_delayed_effects);
 break;
      case 'E':
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   mark_referenced_resources ((((((x)->u.fld[i]).rtvec1))->elem[j]), res,
         include_delayed_effects);
 break;
      }
}
static rtx
find_dead_or_set_registers (rtx target, struct resources *res,
       rtx *jump_target, int jump_count,
       struct resources set, struct resources needed)
{
  HARD_REG_SET scratch;
  rtx insn, next;
  rtx jump_insn = 0;
  int i;
  for (insn = target; insn; insn = next)
    {
      rtx this_jump_insn = insn;
      next = (((insn)->u.fld[2]).rtx1);
      if (can_throw_internal (insn))
 break;
      switch (((enum rtx_code) (insn)->code))
 {
 case CODE_LABEL:
   do { HARD_REG_ELT_TYPE *scan_tp_ = (pending_dead_regs), *scan_fp_ = (needed.regs); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (res->regs), *scan_fp_ = (pending_dead_regs); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (pending_dead_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
   continue;
 case BARRIER:
 case NOTE:
   continue;
 case INSN:
   if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE)
     {
       if (((((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == INSN) || (((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == JUMP_INSN) || (((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == CALL_INSN)))
  mark_set_resources (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1), res, 0,
        MARK_SRC_DEST_CALL);
       continue;
     }
   else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER)
     continue;
   else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
     {
       for (i = 0; i < ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem); i++)
  {
    this_jump_insn = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]);
    if (((enum rtx_code) (this_jump_insn)->code) == JUMP_INSN)
      break;
  }
     }
 default:
   break;
 }
      if (((enum rtx_code) (this_jump_insn)->code) == JUMP_INSN)
 {
   if (jump_count++ < 10)
     {
       if (any_uncondjump_p (this_jump_insn)
    || ((enum rtx_code) ((((this_jump_insn)->u.fld[5]).rtx1))->code) == RETURN)
  {
    next = (((this_jump_insn)->u.fld[9]).rtx1);
    if (jump_insn == 0)
      {
        jump_insn = insn;
        if (jump_target)
   *jump_target = (((this_jump_insn)->u.fld[9]).rtx1);
      }
  }
       else if (any_condjump_p (this_jump_insn))
  {
    struct resources target_set, target_res;
    struct resources fallthrough_res;
    jump_count += 4;
    if (jump_count >= 10)
      break;
    mark_referenced_resources (insn, &needed, 1);
    if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE
        && (((this_jump_insn))->unchanging))
      {
        for (i = 1; i < ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem); i++)
   (((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i])))->in_struct)
     = ! (((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i])))->in_struct);
        target_set = set;
        mark_set_resources (insn, &target_set, 0,
       MARK_SRC_DEST_CALL);
        for (i = 1; i < ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem); i++)
   (((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i])))->in_struct)
     = ! (((((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i])))->in_struct);
        mark_set_resources (insn, &set, 0, MARK_SRC_DEST_CALL);
      }
    else
      {
        mark_set_resources (insn, &set, 0, MARK_SRC_DEST_CALL);
        target_set = set;
      }
    target_res = *res;
    do { HARD_REG_ELT_TYPE *scan_tp_ = (scratch), *scan_fp_ = (target_set.regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
    do { HARD_REG_ELT_TYPE *scan_tp_ = (scratch), *scan_fp_ = (needed.regs); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
    do { HARD_REG_ELT_TYPE *scan_tp_ = (target_res.regs), *scan_fp_ = (scratch); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
    fallthrough_res = *res;
    do { HARD_REG_ELT_TYPE *scan_tp_ = (scratch), *scan_fp_ = (set.regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
    do { HARD_REG_ELT_TYPE *scan_tp_ = (scratch), *scan_fp_ = (needed.regs); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
    do { HARD_REG_ELT_TYPE *scan_tp_ = (fallthrough_res.regs), *scan_fp_ = (scratch); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
    find_dead_or_set_registers ((((this_jump_insn)->u.fld[9]).rtx1),
           &target_res, 0, jump_count,
           target_set, needed);
    find_dead_or_set_registers (next,
           &fallthrough_res, 0, jump_count,
           set, needed);
    do { HARD_REG_ELT_TYPE *scan_tp_ = (fallthrough_res.regs), *scan_fp_ = (target_res.regs); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
    do { HARD_REG_ELT_TYPE *scan_tp_ = (res->regs), *scan_fp_ = (fallthrough_res.regs); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0);
    break;
  }
       else
  break;
     }
   else
     {
       jump_insn = 0;
       break;
     }
 }
      mark_referenced_resources (insn, &needed, 1);
      mark_set_resources (insn, &set, 0, MARK_SRC_DEST_CALL);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (scratch), *scan_fp_ = (set.regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (scratch), *scan_fp_ = (needed.regs); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (res->regs), *scan_fp_ = (scratch); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
    }
  return jump_insn;
}
void
mark_set_resources (rtx x, struct resources *res, int in_dest,
      enum mark_resource_type mark_type)
{
  enum rtx_code code;
  int i, j;
  unsigned int r;
  const char *format_ptr;
 restart:
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case NOTE:
    case BARRIER:
    case CODE_LABEL:
    case USE:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case LABEL_REF:
    case SYMBOL_REF:
    case CONST:
    case PC:
      return;
    case CC0:
      if (in_dest)
 res->cc = 1;
      return;
    case CALL_INSN:
      if (mark_type == MARK_SRC_DEST_CALL)
 {
   rtx link;
   res->cc = res->memory = 1;
   for (r = 0; r < 53; r++)
     if (call_used_regs[r] || global_regs[r])
       ((res->regs)[(r) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((r) % ((unsigned) (8 * 4))));
   for (link = (((x)->u.fld[9]).rtx1);
        link; link = (((link)->u.fld[1]).rtx1))
     if (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == CLOBBER)
       mark_set_resources (((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtx1), res, 1,
      MARK_SRC_DEST);
   if (find_reg_note (x, REG_SETJMP, ((void *)0)))
     do { HARD_REG_ELT_TYPE *scan_tp_ = (res->regs); scan_tp_[0] = -1; scan_tp_[1] = -1; } while (0);
 }
    case JUMP_INSN:
    case INSN:
      x = (((x)->u.fld[5]).rtx1);
      if (((enum rtx_code) (x)->code) != USE && ((enum rtx_code) (x)->code) != CLOBBER)
 goto restart;
      return;
    case SET:
      mark_set_resources ((((x)->u.fld[0]).rtx1), res,
     (mark_type == MARK_SRC_DEST_CALL
      || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != CALL),
     mark_type);
      mark_set_resources ((((x)->u.fld[1]).rtx1), res, 0, MARK_SRC_DEST);
      return;
    case CLOBBER:
      mark_set_resources ((((x)->u.fld[0]).rtx1), res, 1, MARK_SRC_DEST);
      return;
    case SEQUENCE:
      for (i = 0; i < (((((x)->u.fld[0]).rtvec1))->num_elem); i++)
 if (! (((((((((x)->u.fld[0]).rtvec1))->elem[0])))->unchanging)
        && ((((((((x)->u.fld[0]).rtvec1))->elem[i])))->in_struct)))
   mark_set_resources ((((((x)->u.fld[0]).rtvec1))->elem[i]), res, 0, mark_type);
      return;
    case POST_INC:
    case PRE_INC:
    case POST_DEC:
    case PRE_DEC:
      mark_set_resources ((((x)->u.fld[0]).rtx1), res, 1, MARK_SRC_DEST);
      return;
    case PRE_MODIFY:
    case POST_MODIFY:
      mark_set_resources ((((x)->u.fld[0]).rtx1), res, 1, MARK_SRC_DEST);
      mark_set_resources (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1), res, 0, MARK_SRC_DEST);
      mark_set_resources (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1), res, 0, MARK_SRC_DEST);
      return;
    case SIGN_EXTRACT:
    case ZERO_EXTRACT:
      mark_set_resources ((((x)->u.fld[0]).rtx1), res, in_dest, MARK_SRC_DEST);
      mark_set_resources ((((x)->u.fld[1]).rtx1), res, 0, MARK_SRC_DEST);
      mark_set_resources ((((x)->u.fld[2]).rtx1), res, 0, MARK_SRC_DEST);
      return;
    case MEM:
      if (in_dest)
 {
   res->memory = 1;
   res->unch_memory |= (((x))->unchanging);
   res->volatil |= (((x))->volatil);
 }
      mark_set_resources ((((x)->u.fld[0]).rtx1), res, 0, MARK_SRC_DEST);
      return;
    case SUBREG:
      if (in_dest)
 {
   if (!(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
     mark_set_resources ((((x)->u.fld[0]).rtx1), res, in_dest, mark_type);
   else
     {
       unsigned int regno = subreg_regno (x);
       unsigned int last_regno
  = regno + hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
       if (last_regno > 53)
  abort ();
       for (r = regno; r < last_regno; r++)
  ((res->regs)[(r) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((r) % ((unsigned) (8 * 4))));
     }
 }
      return;
    case REG:
      if (in_dest)
 {
   unsigned int regno = (((x)->u.fld[0]).rtuint);
   unsigned int last_regno
     = regno + hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
   if (last_regno > 53)
     abort ();
   for (r = regno; r < last_regno; r++)
     ((res->regs)[(r) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((r) % ((unsigned) (8 * 4))));
 }
      return;
    case UNSPEC_VOLATILE:
    case ASM_INPUT:
      res->volatil = 1;
      return;
    case TRAP_IF:
      res->volatil = 1;
      break;
    case ASM_OPERANDS:
      res->volatil |= (((x))->volatil);
      for (i = 0; i < (((((x)->u.fld[3]).rtvec1))->num_elem); i++)
 mark_set_resources ((((((x)->u.fld[3]).rtvec1))->elem[i]), res, in_dest,
       MARK_SRC_DEST);
      return;
    default:
      break;
    }
  format_ptr = (rtx_format[(int) (code)]);
  for (i = 0; i < (rtx_length[(int) (code)]); i++)
    switch (*format_ptr++)
      {
      case 'e':
 mark_set_resources ((((x)->u.fld[i]).rtx1), res, in_dest, mark_type);
 break;
      case 'E':
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   mark_set_resources ((((((x)->u.fld[i]).rtvec1))->elem[j]), res, in_dest, mark_type);
 break;
      }
}
void
mark_target_live_regs (rtx insns, rtx target, struct resources *res)
{
  int b = -1;
  unsigned int i;
  struct target_info *tinfo = ((void *)0);
  rtx insn;
  rtx jump_insn = 0;
  rtx jump_target;
  HARD_REG_SET scratch;
  struct resources set, needed;
  if (target == 0)
    {
      *res = end_of_function_needs;
      return;
    }
  res->memory = 1;
  res->volatil = res->unch_memory = 0;
  res->cc = 0;
  if (target_hash_table != ((void *)0))
    {
      for (tinfo = target_hash_table[(((target)->u.fld[0]).rtint) % 257];
    tinfo; tinfo = tinfo->next)
 if (tinfo->uid == (((target)->u.fld[0]).rtint))
   break;
      if (tinfo && tinfo->block != -1
   && ! (((((((basic_block_info)->data.bb[(tinfo->block)])))->head_))->volatil))
 b = tinfo->block;
    }
  if (b == -1)
    b = find_basic_block (target, (compiler_params[(int) PARAM_MAX_DELAY_SLOT_LIVE_SEARCH].value1));
  if (target_hash_table != ((void *)0))
    {
      if (tinfo)
 {
   if (b == tinfo->block && b != -1 && tinfo->bb_tick == bb_ticks[b])
     {
       do { HARD_REG_ELT_TYPE *scan_tp_ = (res->regs), *scan_fp_ = (tinfo->live_regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
       return;
     }
 }
      else
 {
   tinfo = xmalloc (sizeof (struct target_info));
   tinfo->uid = (((target)->u.fld[0]).rtint);
   tinfo->block = b;
   tinfo->next
     = target_hash_table[(((target)->u.fld[0]).rtint) % 257];
   target_hash_table[(((target)->u.fld[0]).rtint) % 257] = tinfo;
 }
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (pending_dead_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if (b != -1)
    {
      regset regs_live = (((basic_block_info)->data.bb[(b)]))->global_live_at_start;
      unsigned int j;
      unsigned int regno;
      rtx start_insn, stop_insn;
      do { do { HARD_REG_ELT_TYPE *scan_tp_ = (current_live_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&current_live_regs, regs_live); } while (0);
      do { bitmap_element *ptr_ = (regs_live)->first; unsigned int indx_ = (53) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (53) % (unsigned) (8 * 4); unsigned word_num_ = (53) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { if (reg_renumber[i] >= 0) { regno = reg_renumber[i]; for (j = regno; j < regno + hard_regno_nregs[regno] [((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[i])->mode)]; j++) ((current_live_regs)[(j) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((j) % ((unsigned) (8 * 4)))); } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
    ;
      start_insn = (b == 0 ? insns : ((((basic_block_info)->data.bb[(b)])))->head_);
      stop_insn = target;
      if (((enum rtx_code) (start_insn)->code) == INSN
   && ((enum rtx_code) ((((start_insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
 start_insn = ((((((((start_insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
      if (((enum rtx_code) (stop_insn)->code) == INSN
   && ((enum rtx_code) ((((stop_insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
 stop_insn = next_insn ((((stop_insn)->u.fld[1]).rtx1));
      for (insn = start_insn; insn != stop_insn;
    insn = next_insn_no_annul (insn))
 {
   rtx link;
   rtx real_insn = insn;
   enum rtx_code code = ((enum rtx_code) (insn)->code);
   if ((code == INSN || code == JUMP_INSN || code == CALL_INSN)
       && (((insn))->in_struct))
     continue;
   if (code == INSN && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE
       && ((((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == INSN) || (((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == JUMP_INSN) || (((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == CALL_INSN)))
       real_insn = ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1);
   if (((enum rtx_code) (real_insn)->code) == CALL_INSN)
     {
       do { HARD_REG_ELT_TYPE *scan_tp_ = (current_live_regs), *scan_fp_ = (regs_invalidated_by_call); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0)
                                   ;
       for (i = 0; i < 53; i++)
  if (global_regs[i])
    ((current_live_regs)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
     }
   if ((((enum rtx_code) (real_insn)->code) == INSN
        && ((enum rtx_code) ((((real_insn)->u.fld[5]).rtx1))->code) != USE
        && ((enum rtx_code) ((((real_insn)->u.fld[5]).rtx1))->code) != CLOBBER)
       || ((enum rtx_code) (real_insn)->code) == JUMP_INSN
       || ((enum rtx_code) (real_insn)->code) == CALL_INSN)
     {
       for (link = (((real_insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
  if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEAD
      && (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == REG)
      && ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
    {
      unsigned int first_regno = ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      unsigned int last_regno
        = (first_regno
    + hard_regno_nregs[first_regno]
        [((enum machine_mode) ((((link)->u.fld[0]).rtx1))->mode)]);
      for (i = first_regno; i < last_regno; i++)
        ((pending_dead_regs)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
    }
       note_stores ((((real_insn)->u.fld[5]).rtx1), update_live_status, ((void *)0));
       for (link = (((real_insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
  if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_UNUSED
      && (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == REG)
      && ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
    {
      unsigned int first_regno = ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      unsigned int last_regno
        = (first_regno
    + hard_regno_nregs[first_regno]
        [((enum machine_mode) ((((link)->u.fld[0]).rtx1))->mode)]);
      for (i = first_regno; i < last_regno; i++)
        ((current_live_regs)[(i) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))));
    }
     }
   else if (((enum rtx_code) (real_insn)->code) == CODE_LABEL)
     {
       do { HARD_REG_ELT_TYPE *scan_tp_ = (current_live_regs), *scan_fp_ = (pending_dead_regs); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
       do { HARD_REG_ELT_TYPE *scan_tp_ = (pending_dead_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
     }
   else if (((enum rtx_code) (real_insn)->code) == NOTE
     && (((real_insn)->u.fld[5]).rtint) == NOTE_INSN_EPILOGUE_BEG)
     do { HARD_REG_ELT_TYPE *scan_tp_ = (current_live_regs), *scan_fp_ = (start_of_epilogue_needs.regs); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
 }
      do { HARD_REG_ELT_TYPE *scan_tp_ = (res->regs), *scan_fp_ = (current_live_regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      if (tinfo != ((void *)0))
 {
   tinfo->block = b;
   tinfo->bb_tick = bb_ticks[b];
 }
    }
  else
    do { HARD_REG_ELT_TYPE *scan_tp_ = (res->regs); scan_tp_[0] = -1; scan_tp_[1] = -1; } while (0);
  do { (&set)->memory = (&set)->unch_memory = (&set)->volatil = (&set)->cc = 0; do { HARD_REG_ELT_TYPE *scan_tp_ = ((&set)->regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); } while (0);
  do { (&needed)->memory = (&needed)->unch_memory = (&needed)->volatil = (&needed)->cc = 0; do { HARD_REG_ELT_TYPE *scan_tp_ = ((&needed)->regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); } while (0);
  jump_insn = find_dead_or_set_registers (target, res, &jump_target, 0,
       set, needed);
  if (jump_insn)
    {
      struct resources new_resources;
      rtx stop_insn = next_active_insn (jump_insn);
      mark_target_live_regs (insns, next_active_insn (jump_target),
        &new_resources);
      do { (&set)->memory = (&set)->unch_memory = (&set)->volatil = (&set)->cc = 0; do { HARD_REG_ELT_TYPE *scan_tp_ = ((&set)->regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); } while (0);
      do { (&needed)->memory = (&needed)->unch_memory = (&needed)->volatil = (&needed)->cc = 0; do { HARD_REG_ELT_TYPE *scan_tp_ = ((&needed)->regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); } while (0);
      for (insn = target; insn != stop_insn; insn = next_active_insn (insn))
 {
   mark_referenced_resources (insn, &needed, 1);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (scratch), *scan_fp_ = (needed.regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (scratch), *scan_fp_ = (set.regs); scan_tp_[0] &= ~ scan_fp_[0]; scan_tp_[1] &= ~ scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (new_resources.regs), *scan_fp_ = (scratch); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
   mark_set_resources (insn, &set, 0, MARK_SRC_DEST_CALL);
 }
      do { HARD_REG_ELT_TYPE *scan_tp_ = (res->regs), *scan_fp_ = (new_resources.regs); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
    }
  if (tinfo != ((void *)0))
    {
      do { HARD_REG_ELT_TYPE *scan_tp_ = (tinfo->live_regs), *scan_fp_ = (res->regs); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
    }
}
void
init_resource_info (rtx epilogue_insn)
{
  int i;
  end_of_function_needs.cc = 0;
  end_of_function_needs.memory = 1;
  end_of_function_needs.unch_memory = 0;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (end_of_function_needs.regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  if (frame_pointer_needed)
    {
      ((end_of_function_needs.regs)[(20) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((20) % ((unsigned) (8 * 4))));
      ((end_of_function_needs.regs)[(6) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((6) % ((unsigned) (8 * 4))));
      if (! 1
   || current_function_sp_is_unchanging)
 ((end_of_function_needs.regs)[(7) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((7) % ((unsigned) (8 * 4))));
    }
  else
    ((end_of_function_needs.regs)[(7) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((7) % ((unsigned) (8 * 4))));
  if ((cfun->return_rtx) != 0)
    mark_referenced_resources ((cfun->return_rtx),
          &end_of_function_needs, 1);
  for (i = 0; i < 53; i++)
    if (global_regs[i]
 || 0
 )
      ((end_of_function_needs.regs)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
  start_of_epilogue_needs = end_of_function_needs;
  while ((epilogue_insn = next_nonnote_insn (epilogue_insn)))
    mark_set_resources (epilogue_insn, &end_of_function_needs, 0,
   MARK_SRC_DEST_CALL);
  target_hash_table = xcalloc (257, sizeof (struct target_info *));
  bb_ticks = xcalloc (last_basic_block, sizeof (int));
}
void
free_resource_info (void)
{
  if (target_hash_table != ((void *)0))
    {
      int i;
      for (i = 0; i < 257; ++i)
 {
   struct target_info *ti = target_hash_table[i];
   while (ti)
     {
       struct target_info *next = ti->next;
       free (ti);
       ti = next;
     }
 }
      free (target_hash_table);
      target_hash_table = ((void *)0);
    }
  if (bb_ticks != ((void *)0))
    {
      free (bb_ticks);
      bb_ticks = ((void *)0);
    }
}
void
clear_hashed_info_for_insn (rtx insn)
{
  struct target_info *tinfo;
  if (target_hash_table != ((void *)0))
    {
      for (tinfo = target_hash_table[(((insn)->u.fld[0]).rtint) % 257];
    tinfo; tinfo = tinfo->next)
 if (tinfo->uid == (((insn)->u.fld[0]).rtint))
   break;
      if (tinfo)
 tinfo->block = -1;
    }
}
void
incr_ticks_for_insn (rtx insn)
{
  int b = find_basic_block (insn, (compiler_params[(int) PARAM_MAX_DELAY_SLOT_LIVE_SEARCH].value1));
  if (b != -1)
    bb_ticks[b]++;
}
void
mark_end_of_function_resources (rtx trial, int include_delayed_effects)
{
  mark_referenced_resources (trial, &end_of_function_needs,
        include_delayed_effects);
}
const unsigned char rtx_length[((int) LAST_AND_UNUSED_RTX_CODE)] = {
sizeof "*" - 1 ,
sizeof "*" - 1 ,
sizeof "s" - 1 ,
sizeof "ee" - 1 ,
sizeof "ue" - 1 ,
sizeof "iss" - 1 ,
sizeof "is" - 1 ,
sizeof "i" - 1 ,
sizeof "isE" - 1 ,
sizeof "isE" - 1 ,
sizeof "iE" - 1 ,
sizeof "iE" - 1 ,
sizeof "sEsTV" - 1 ,
sizeof "EsTV" - 1 ,
sizeof "EsES" - 1 ,
sizeof "sEsTsESV" - 1 ,
sizeof "EsES" - 1 ,
sizeof "sEss" - 1 ,
sizeof "eE" - 1 ,
sizeof "siieiiV" - 1 ,
sizeof "V" - 1 ,
sizeof "Ess" - 1 ,
sizeof "E" - 1 ,
sizeof "e" - 1 ,
sizeof "sS" - 1 ,
sizeof "sS" - 1 ,
sizeof "ss" - 1 ,
sizeof "ss" - 1 ,
sizeof "ss" - 1 ,
sizeof "ss" - 1 ,
sizeof "ss" - 1 ,
sizeof "issS" - 1 ,
sizeof "s" - 1 ,
sizeof "s" - 1 ,
sizeof "ss" - 1 ,
sizeof "sies" - 1 ,
sizeof "sse" - 1 ,
sizeof "s" - 1 ,
sizeof "ss" - 1 ,
sizeof "sE" - 1 ,
sizeof "ss" - 1 ,
sizeof "ii" - 1 ,
sizeof "s" - 1 ,
sizeof "iuuBieiee" - 1 ,
sizeof "iuuBieiee0" - 1 ,
sizeof "iuuBieieee" - 1 ,
sizeof "iuu000000" - 1 ,
sizeof "iuuB00is" - 1 ,
sizeof "iuuB0ni" - 1 ,
sizeof "ee" - 1 ,
sizeof "E" - 1 ,
sizeof "s" - 1 ,
sizeof "ssiEEsi" - 1 ,
sizeof "Ei" - 1 ,
sizeof "Ei" - 1 ,
sizeof "E" - 1 ,
sizeof "eEee0" - 1 ,
sizeof "eee" - 1 ,
sizeof "ee" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "ee" - 1 ,
sizeof "" - 1 ,
sizeof "ee" - 1 ,
sizeof "i" - 1 ,
sizeof "w" - 1 ,
sizeof "wwwwww" - 1 ,
sizeof "E" - 1 ,
sizeof "s" - 1 ,
sizeof "e" - 1 ,
sizeof "" - 1 ,
sizeof "0" - 1 ,
sizeof "i00" - 1 ,
sizeof "0" - 1 ,
sizeof "ei" - 1 ,
sizeof "e" - 1 ,
sizeof "ee" - 1 ,
sizeof "e0" - 1 ,
sizeof "u00" - 1 ,
sizeof "s00" - 1 ,
sizeof "" - 1 ,
sizeof "eeeee" - 1 ,
sizeof "eee" - 1 ,
sizeof "Ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "e" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "e" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "eee" - 1 ,
sizeof "eee" - 1 ,
sizeof "e" - 1 ,
sizeof "ee" - 1 ,
sizeof "uuEiiiiiibbii" - 1 ,
sizeof "iiiiiiiitt" - 1 ,
sizeof "eti" - 1 ,
sizeof "bi" - 1 ,
sizeof "eee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "e" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "ee" - 1 ,
sizeof "e" - 1 ,
sizeof "e" - 1 ,
sizeof "te" - 1 
};
const char * const rtx_name[((int) LAST_AND_UNUSED_RTX_CODE)] = {
"UnKnown" ,
"nil" ,
"include" ,
"expr_list" ,
"insn_list" ,
"match_operand" ,
"match_scratch" ,
"match_dup" ,
"match_operator" ,
"match_parallel" ,
"match_op_dup" ,
"match_par_dup" ,
"define_insn" ,
"define_peephole" ,
"define_split" ,
"define_insn_and_split" ,
"define_peephole2" ,
"define_expand" ,
"define_delay" ,
"define_function_unit" ,
"define_asm_attributes" ,
"define_cond_exec" ,
"sequence" ,
"address" ,
"define_cpu_unit" ,
"define_query_cpu_unit" ,
"exclusion_set" ,
"presence_set" ,
"final_presence_set" ,
"absence_set" ,
"final_absence_set" ,
"define_bypass" ,
"define_automaton" ,
"automata_option" ,
"define_reservation" ,
"define_insn_reservation" ,
"define_attr" ,
"attr" ,
"set_attr" ,
"set_attr_alternative" ,
"eq_attr" ,
"eq_attr_alt" ,
"attr_flag" ,
"insn" ,
"jump_insn" ,
"call_insn" ,
"barrier" ,
"code_label" ,
"note" ,
"cond_exec" ,
"parallel" ,
"asm_input" ,
"asm_operands" ,
"unspec" ,
"unspec_volatile" ,
"addr_vec" ,
"addr_diff_vec" ,
"prefetch" ,
"set" ,
"use" ,
"clobber" ,
"call" ,
"return" ,
"trap_if" ,
"resx" ,
"const_int" ,
"const_double" ,
"const_vector" ,
"const_string" ,
"const" ,
"pc" ,
"value" ,
"reg" ,
"scratch" ,
"subreg" ,
"strict_low_part" ,
"concat" ,
"mem" ,
"label_ref" ,
"symbol_ref" ,
"cc0" ,
"queued" ,
"if_then_else" ,
"cond" ,
"compare" ,
"plus" ,
"minus" ,
"neg" ,
"mult" ,
"div" ,
"mod" ,
"udiv" ,
"umod" ,
"and" ,
"ior" ,
"xor" ,
"not" ,
"ashift" ,
"rotate" ,
"ashiftrt" ,
"lshiftrt" ,
"rotatert" ,
"smin" ,
"smax" ,
"umin" ,
"umax" ,
"pre_dec" ,
"pre_inc" ,
"post_dec" ,
"post_inc" ,
"pre_modify" ,
"post_modify" ,
"ne" ,
"eq" ,
"ge" ,
"gt" ,
"le" ,
"lt" ,
"geu" ,
"gtu" ,
"leu" ,
"ltu" ,
"unordered" ,
"ordered" ,
"uneq" ,
"unge" ,
"ungt" ,
"unle" ,
"unlt" ,
"ltgt" ,
"sign_extend" ,
"zero_extend" ,
"truncate" ,
"float_extend" ,
"float_truncate" ,
"float" ,
"fix" ,
"unsigned_float" ,
"unsigned_fix" ,
"abs" ,
"sqrt" ,
"ffs" ,
"clz" ,
"ctz" ,
"popcount" ,
"parity" ,
"sign_extract" ,
"zero_extract" ,
"high" ,
"lo_sum" ,
"range_info" ,
"range_reg" ,
"range_var" ,
"range_live" ,
"vec_merge" ,
"vec_select" ,
"vec_concat" ,
"vec_duplicate" ,
"ss_plus" ,
"us_plus" ,
"ss_minus" ,
"us_minus" ,
"ss_truncate" ,
"us_truncate" ,
"var_location" 
};
const char * const rtx_format[((int) LAST_AND_UNUSED_RTX_CODE)] = {
"*" ,
"*" ,
"s" ,
"ee" ,
"ue" ,
"iss" ,
"is" ,
"i" ,
"isE" ,
"isE" ,
"iE" ,
"iE" ,
"sEsTV" ,
"EsTV" ,
"EsES" ,
"sEsTsESV" ,
"EsES" ,
"sEss" ,
"eE" ,
"siieiiV" ,
"V" ,
"Ess" ,
"E" ,
"e" ,
"sS" ,
"sS" ,
"ss" ,
"ss" ,
"ss" ,
"ss" ,
"ss" ,
"issS" ,
"s" ,
"s" ,
"ss" ,
"sies" ,
"sse" ,
"s" ,
"ss" ,
"sE" ,
"ss" ,
"ii" ,
"s" ,
"iuuBieiee" ,
"iuuBieiee0" ,
"iuuBieieee" ,
"iuu000000" ,
"iuuB00is" ,
"iuuB0ni" ,
"ee" ,
"E" ,
"s" ,
"ssiEEsi" ,
"Ei" ,
"Ei" ,
"E" ,
"eEee0" ,
"eee" ,
"ee" ,
"e" ,
"e" ,
"ee" ,
"" ,
"ee" ,
"i" ,
"w" ,
"wwwwww" ,
"E" ,
"s" ,
"e" ,
"" ,
"0" ,
"i00" ,
"0" ,
"ei" ,
"e" ,
"ee" ,
"e0" ,
"u00" ,
"s00" ,
"" ,
"eeeee" ,
"eee" ,
"Ee" ,
"ee" ,
"ee" ,
"ee" ,
"e" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"e" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"e" ,
"e" ,
"e" ,
"e" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"e" ,
"e" ,
"e" ,
"e" ,
"e" ,
"e" ,
"e" ,
"e" ,
"e" ,
"e" ,
"e" ,
"e" ,
"e" ,
"e" ,
"e" ,
"e" ,
"eee" ,
"eee" ,
"e" ,
"ee" ,
"uuEiiiiiibbii" ,
"iiiiiiiitt" ,
"eti" ,
"bi" ,
"eee" ,
"ee" ,
"ee" ,
"e" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"e" ,
"e" ,
"te" 
};
const enum rtx_class rtx_class[((int) LAST_AND_UNUSED_RTX_CODE)] = {
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_MATCH,
RTX_MATCH,
RTX_MATCH,
RTX_MATCH,
RTX_MATCH,
RTX_MATCH,
RTX_MATCH,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_MATCH,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_INSN,
RTX_INSN,
RTX_INSN,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_CONST_OBJ,
RTX_CONST_OBJ,
RTX_EXTRA,
RTX_OBJ,
RTX_CONST_OBJ,
RTX_OBJ,
RTX_OBJ,
RTX_OBJ,
RTX_OBJ,
RTX_EXTRA,
RTX_EXTRA,
RTX_OBJ,
RTX_OBJ,
RTX_CONST_OBJ,
RTX_CONST_OBJ,
RTX_OBJ,
RTX_EXTRA,
RTX_TERNARY,
RTX_EXTRA,
RTX_BIN_ARITH,
RTX_COMM_ARITH,
RTX_BIN_ARITH,
RTX_UNARY,
RTX_COMM_ARITH,
RTX_BIN_ARITH,
RTX_BIN_ARITH,
RTX_BIN_ARITH,
RTX_BIN_ARITH,
RTX_COMM_ARITH,
RTX_COMM_ARITH,
RTX_COMM_ARITH,
RTX_UNARY,
RTX_BIN_ARITH,
RTX_BIN_ARITH,
RTX_BIN_ARITH,
RTX_BIN_ARITH,
RTX_BIN_ARITH,
RTX_COMM_ARITH,
RTX_COMM_ARITH,
RTX_COMM_ARITH,
RTX_COMM_ARITH,
RTX_AUTOINC,
RTX_AUTOINC,
RTX_AUTOINC,
RTX_AUTOINC,
RTX_AUTOINC,
RTX_AUTOINC,
RTX_COMM_COMPARE,
RTX_COMM_COMPARE,
RTX_COMPARE,
RTX_COMPARE,
RTX_COMPARE,
RTX_COMPARE,
RTX_COMPARE,
RTX_COMPARE,
RTX_COMPARE,
RTX_COMPARE,
RTX_COMM_COMPARE,
RTX_COMM_COMPARE,
RTX_COMM_COMPARE,
RTX_COMPARE,
RTX_COMPARE,
RTX_COMPARE,
RTX_COMPARE,
RTX_COMM_COMPARE,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_UNARY,
RTX_BITFIELD_OPS,
RTX_BITFIELD_OPS,
RTX_CONST_OBJ,
RTX_OBJ,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_EXTRA,
RTX_TERNARY,
RTX_BIN_ARITH,
RTX_BIN_ARITH,
RTX_UNARY,
RTX_COMM_ARITH,
RTX_COMM_ARITH,
RTX_BIN_ARITH,
RTX_BIN_ARITH,
RTX_UNARY,
RTX_UNARY,
RTX_EXTRA
};
const unsigned char rtx_size[((int) LAST_AND_UNUSED_RTX_CODE)] = {
((UNKNOWN) == CONST_INT || (UNKNOWN) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "*" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "*" - 1) * sizeof (rtunion)),
((NIL) == CONST_INT || (NIL) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "*" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "*" - 1) * sizeof (rtunion)),
((INCLUDE) == CONST_INT || (INCLUDE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (rtunion)),
((EXPR_LIST) == CONST_INT || (EXPR_LIST) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((INSN_LIST) == CONST_INT || (INSN_LIST) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ue" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ue" - 1) * sizeof (rtunion)),
((MATCH_OPERAND) == CONST_INT || (MATCH_OPERAND) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "iss" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "iss" - 1) * sizeof (rtunion)),
((MATCH_SCRATCH) == CONST_INT || (MATCH_SCRATCH) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "is" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "is" - 1) * sizeof (rtunion)),
((MATCH_DUP) == CONST_INT || (MATCH_DUP) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "i" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "i" - 1) * sizeof (rtunion)),
((MATCH_OPERATOR) == CONST_INT || (MATCH_OPERATOR) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "isE" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "isE" - 1) * sizeof (rtunion)),
((MATCH_PARALLEL) == CONST_INT || (MATCH_PARALLEL) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "isE" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "isE" - 1) * sizeof (rtunion)),
((MATCH_OP_DUP) == CONST_INT || (MATCH_OP_DUP) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "iE" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "iE" - 1) * sizeof (rtunion)),
((MATCH_PAR_DUP) == CONST_INT || (MATCH_PAR_DUP) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "iE" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "iE" - 1) * sizeof (rtunion)),
((DEFINE_INSN) == CONST_INT || (DEFINE_INSN) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "sEsTV" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "sEsTV" - 1) * sizeof (rtunion)),
((DEFINE_PEEPHOLE) == CONST_INT || (DEFINE_PEEPHOLE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "EsTV" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "EsTV" - 1) * sizeof (rtunion)),
((DEFINE_SPLIT) == CONST_INT || (DEFINE_SPLIT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "EsES" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "EsES" - 1) * sizeof (rtunion)),
((DEFINE_INSN_AND_SPLIT) == CONST_INT || (DEFINE_INSN_AND_SPLIT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "sEsTsESV" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "sEsTsESV" - 1) * sizeof (rtunion)),
((DEFINE_PEEPHOLE2) == CONST_INT || (DEFINE_PEEPHOLE2) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "EsES" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "EsES" - 1) * sizeof (rtunion)),
((DEFINE_EXPAND) == CONST_INT || (DEFINE_EXPAND) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "sEss" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "sEss" - 1) * sizeof (rtunion)),
((DEFINE_DELAY) == CONST_INT || (DEFINE_DELAY) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "eE" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "eE" - 1) * sizeof (rtunion)),
((DEFINE_FUNCTION_UNIT) == CONST_INT || (DEFINE_FUNCTION_UNIT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "siieiiV" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "siieiiV" - 1) * sizeof (rtunion)),
((DEFINE_ASM_ATTRIBUTES) == CONST_INT || (DEFINE_ASM_ATTRIBUTES) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "V" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "V" - 1) * sizeof (rtunion)),
((DEFINE_COND_EXEC) == CONST_INT || (DEFINE_COND_EXEC) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "Ess" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "Ess" - 1) * sizeof (rtunion)),
((SEQUENCE) == CONST_INT || (SEQUENCE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "E" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "E" - 1) * sizeof (rtunion)),
((ADDRESS) == CONST_INT || (ADDRESS) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((DEFINE_CPU_UNIT) == CONST_INT || (DEFINE_CPU_UNIT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "sS" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "sS" - 1) * sizeof (rtunion)),
((DEFINE_QUERY_CPU_UNIT) == CONST_INT || (DEFINE_QUERY_CPU_UNIT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "sS" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "sS" - 1) * sizeof (rtunion)),
((EXCLUSION_SET) == CONST_INT || (EXCLUSION_SET) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (rtunion)),
((PRESENCE_SET) == CONST_INT || (PRESENCE_SET) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (rtunion)),
((FINAL_PRESENCE_SET) == CONST_INT || (FINAL_PRESENCE_SET) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (rtunion)),
((ABSENCE_SET) == CONST_INT || (ABSENCE_SET) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (rtunion)),
((FINAL_ABSENCE_SET) == CONST_INT || (FINAL_ABSENCE_SET) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (rtunion)),
((DEFINE_BYPASS) == CONST_INT || (DEFINE_BYPASS) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "issS" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "issS" - 1) * sizeof (rtunion)),
((DEFINE_AUTOMATON) == CONST_INT || (DEFINE_AUTOMATON) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (rtunion)),
((AUTOMATA_OPTION) == CONST_INT || (AUTOMATA_OPTION) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (rtunion)),
((DEFINE_RESERVATION) == CONST_INT || (DEFINE_RESERVATION) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (rtunion)),
((DEFINE_INSN_RESERVATION) == CONST_INT || (DEFINE_INSN_RESERVATION) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "sies" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "sies" - 1) * sizeof (rtunion)),
((DEFINE_ATTR) == CONST_INT || (DEFINE_ATTR) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "sse" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "sse" - 1) * sizeof (rtunion)),
((ATTR) == CONST_INT || (ATTR) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (rtunion)),
((SET_ATTR) == CONST_INT || (SET_ATTR) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (rtunion)),
((SET_ATTR_ALTERNATIVE) == CONST_INT || (SET_ATTR_ALTERNATIVE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "sE" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "sE" - 1) * sizeof (rtunion)),
((EQ_ATTR) == CONST_INT || (EQ_ATTR) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ss" - 1) * sizeof (rtunion)),
((EQ_ATTR_ALT) == CONST_INT || (EQ_ATTR_ALT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ii" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ii" - 1) * sizeof (rtunion)),
((ATTR_FLAG) == CONST_INT || (ATTR_FLAG) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (rtunion)),
((INSN) == CONST_INT || (INSN) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "iuuBieiee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "iuuBieiee" - 1) * sizeof (rtunion)),
((JUMP_INSN) == CONST_INT || (JUMP_INSN) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "iuuBieiee0" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "iuuBieiee0" - 1) * sizeof (rtunion)),
((CALL_INSN) == CONST_INT || (CALL_INSN) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "iuuBieieee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "iuuBieieee" - 1) * sizeof (rtunion)),
((BARRIER) == CONST_INT || (BARRIER) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "iuu000000" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "iuu000000" - 1) * sizeof (rtunion)),
((CODE_LABEL) == CONST_INT || (CODE_LABEL) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "iuuB00is" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "iuuB00is" - 1) * sizeof (rtunion)),
((NOTE) == CONST_INT || (NOTE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "iuuB0ni" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "iuuB0ni" - 1) * sizeof (rtunion)),
((COND_EXEC) == CONST_INT || (COND_EXEC) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((PARALLEL) == CONST_INT || (PARALLEL) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "E" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "E" - 1) * sizeof (rtunion)),
((ASM_INPUT) == CONST_INT || (ASM_INPUT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (rtunion)),
((ASM_OPERANDS) == CONST_INT || (ASM_OPERANDS) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ssiEEsi" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ssiEEsi" - 1) * sizeof (rtunion)),
((UNSPEC) == CONST_INT || (UNSPEC) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "Ei" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "Ei" - 1) * sizeof (rtunion)),
((UNSPEC_VOLATILE) == CONST_INT || (UNSPEC_VOLATILE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "Ei" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "Ei" - 1) * sizeof (rtunion)),
((ADDR_VEC) == CONST_INT || (ADDR_VEC) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "E" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "E" - 1) * sizeof (rtunion)),
((ADDR_DIFF_VEC) == CONST_INT || (ADDR_DIFF_VEC) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "eEee0" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "eEee0" - 1) * sizeof (rtunion)),
((PREFETCH) == CONST_INT || (PREFETCH) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "eee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "eee" - 1) * sizeof (rtunion)),
((SET) == CONST_INT || (SET) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((USE) == CONST_INT || (USE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((CLOBBER) == CONST_INT || (CLOBBER) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((CALL) == CONST_INT || (CALL) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((RETURN) == CONST_INT || (RETURN) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "" - 1) * sizeof (rtunion)),
((TRAP_IF) == CONST_INT || (TRAP_IF) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((RESX) == CONST_INT || (RESX) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "i" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "i" - 1) * sizeof (rtunion)),
((CONST_INT) == CONST_INT || (CONST_INT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "w" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "w" - 1) * sizeof (rtunion)),
((CONST_DOUBLE) == CONST_INT || (CONST_DOUBLE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "wwwwww" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "wwwwww" - 1) * sizeof (rtunion)),
((CONST_VECTOR) == CONST_INT || (CONST_VECTOR) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "E" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "E" - 1) * sizeof (rtunion)),
((CONST_STRING) == CONST_INT || (CONST_STRING) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "s" - 1) * sizeof (rtunion)),
((CONST) == CONST_INT || (CONST) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((PC) == CONST_INT || (PC) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "" - 1) * sizeof (rtunion)),
((VALUE1) == CONST_INT || (VALUE1) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "0" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "0" - 1) * sizeof (rtunion)),
((REG) == CONST_INT || (REG) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "i00" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "i00" - 1) * sizeof (rtunion)),
((SCRATCH) == CONST_INT || (SCRATCH) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "0" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "0" - 1) * sizeof (rtunion)),
((SUBREG) == CONST_INT || (SUBREG) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ei" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ei" - 1) * sizeof (rtunion)),
((STRICT_LOW_PART) == CONST_INT || (STRICT_LOW_PART) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((CONCAT) == CONST_INT || (CONCAT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((MEM) == CONST_INT || (MEM) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e0" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e0" - 1) * sizeof (rtunion)),
((LABEL_REF) == CONST_INT || (LABEL_REF) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "u00" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "u00" - 1) * sizeof (rtunion)),
((SYMBOL_REF) == CONST_INT || (SYMBOL_REF) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "s00" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "s00" - 1) * sizeof (rtunion)),
((CC0) == CONST_INT || (CC0) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "" - 1) * sizeof (rtunion)),
((QUEUED) == CONST_INT || (QUEUED) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "eeeee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "eeeee" - 1) * sizeof (rtunion)),
((IF_THEN_ELSE) == CONST_INT || (IF_THEN_ELSE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "eee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "eee" - 1) * sizeof (rtunion)),
((COND) == CONST_INT || (COND) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "Ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "Ee" - 1) * sizeof (rtunion)),
((COMPARE) == CONST_INT || (COMPARE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((PLUS) == CONST_INT || (PLUS) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((MINUS) == CONST_INT || (MINUS) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((NEG) == CONST_INT || (NEG) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((MULT) == CONST_INT || (MULT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((DIV) == CONST_INT || (DIV) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((MOD) == CONST_INT || (MOD) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((UDIV) == CONST_INT || (UDIV) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((UMOD) == CONST_INT || (UMOD) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((AND) == CONST_INT || (AND) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((IOR) == CONST_INT || (IOR) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((XOR) == CONST_INT || (XOR) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((NOT) == CONST_INT || (NOT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((ASHIFT) == CONST_INT || (ASHIFT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((ROTATE) == CONST_INT || (ROTATE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((ASHIFTRT) == CONST_INT || (ASHIFTRT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((LSHIFTRT) == CONST_INT || (LSHIFTRT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((ROTATERT) == CONST_INT || (ROTATERT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((SMIN) == CONST_INT || (SMIN) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((SMAX) == CONST_INT || (SMAX) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((UMIN) == CONST_INT || (UMIN) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((UMAX) == CONST_INT || (UMAX) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((PRE_DEC) == CONST_INT || (PRE_DEC) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((PRE_INC) == CONST_INT || (PRE_INC) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((POST_DEC) == CONST_INT || (POST_DEC) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((POST_INC) == CONST_INT || (POST_INC) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((PRE_MODIFY) == CONST_INT || (PRE_MODIFY) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((POST_MODIFY) == CONST_INT || (POST_MODIFY) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((NE) == CONST_INT || (NE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((EQ) == CONST_INT || (EQ) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((GE) == CONST_INT || (GE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((GT) == CONST_INT || (GT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((LE) == CONST_INT || (LE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((LT) == CONST_INT || (LT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((GEU) == CONST_INT || (GEU) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((GTU) == CONST_INT || (GTU) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((LEU) == CONST_INT || (LEU) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((LTU) == CONST_INT || (LTU) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((UNORDERED) == CONST_INT || (UNORDERED) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((ORDERED) == CONST_INT || (ORDERED) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((UNEQ) == CONST_INT || (UNEQ) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((UNGE) == CONST_INT || (UNGE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((UNGT) == CONST_INT || (UNGT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((UNLE) == CONST_INT || (UNLE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((UNLT) == CONST_INT || (UNLT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((LTGT) == CONST_INT || (LTGT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((SIGN_EXTEND) == CONST_INT || (SIGN_EXTEND) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((ZERO_EXTEND) == CONST_INT || (ZERO_EXTEND) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((TRUNCATE) == CONST_INT || (TRUNCATE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((FLOAT_EXTEND) == CONST_INT || (FLOAT_EXTEND) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((FLOAT_TRUNCATE) == CONST_INT || (FLOAT_TRUNCATE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((FLOAT) == CONST_INT || (FLOAT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((FIX) == CONST_INT || (FIX) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((UNSIGNED_FLOAT) == CONST_INT || (UNSIGNED_FLOAT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((UNSIGNED_FIX) == CONST_INT || (UNSIGNED_FIX) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((ABS) == CONST_INT || (ABS) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((SQRT) == CONST_INT || (SQRT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((FFS) == CONST_INT || (FFS) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((CLZ) == CONST_INT || (CLZ) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((CTZ) == CONST_INT || (CTZ) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((POPCOUNT) == CONST_INT || (POPCOUNT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((PARITY) == CONST_INT || (PARITY) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((SIGN_EXTRACT) == CONST_INT || (SIGN_EXTRACT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "eee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "eee" - 1) * sizeof (rtunion)),
((ZERO_EXTRACT) == CONST_INT || (ZERO_EXTRACT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "eee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "eee" - 1) * sizeof (rtunion)),
((HIGH) == CONST_INT || (HIGH) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((LO_SUM) == CONST_INT || (LO_SUM) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((RANGE_INFO) == CONST_INT || (RANGE_INFO) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "uuEiiiiiibbii" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "uuEiiiiiibbii" - 1) * sizeof (rtunion)),
((RANGE_REG) == CONST_INT || (RANGE_REG) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "iiiiiiiitt" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "iiiiiiiitt" - 1) * sizeof (rtunion)),
((RANGE_VAR) == CONST_INT || (RANGE_VAR) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "eti" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "eti" - 1) * sizeof (rtunion)),
((RANGE_LIVE) == CONST_INT || (RANGE_LIVE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "bi" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "bi" - 1) * sizeof (rtunion)),
((VEC_MERGE) == CONST_INT || (VEC_MERGE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "eee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "eee" - 1) * sizeof (rtunion)),
((VEC_SELECT) == CONST_INT || (VEC_SELECT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((VEC_CONCAT) == CONST_INT || (VEC_CONCAT) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((VEC_DUPLICATE) == CONST_INT || (VEC_DUPLICATE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((SS_PLUS) == CONST_INT || (SS_PLUS) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((US_PLUS) == CONST_INT || (US_PLUS) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((SS_MINUS) == CONST_INT || (SS_MINUS) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((US_MINUS) == CONST_INT || (US_MINUS) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "ee" - 1) * sizeof (rtunion)),
((SS_TRUNCATE) == CONST_INT || (SS_TRUNCATE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((US_TRUNCATE) == CONST_INT || (US_TRUNCATE) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "e" - 1) * sizeof (rtunion)),
((VAR_LOCATION) == CONST_INT || (VAR_LOCATION) == CONST_DOUBLE ? __builtin_offsetof (rtx_def, u) + (sizeof "te" - 1) * sizeof (long) : __builtin_offsetof (rtx_def, u) + (sizeof "te" - 1) * sizeof (rtunion))
};
const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS] =
{
  "", "NOTE_INSN_DELETED",
  "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END",
  "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
  "NOTE_INSN_LOOP_CONT", "NOTE_INSN_LOOP_VTOP",
  "NOTE_INSN_LOOP_END_TOP_COND", "NOTE_INSN_FUNCTION_END",
  "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG",
  "NOTE_INSN_DELETED_LABEL", "NOTE_INSN_FUNCTION_BEG",
  "NOTE_INSN_EH_REGION_BEG", "NOTE_INSN_EH_REGION_END",
  "NOTE_INSN_REPEATED_LINE_NUMBER",
  "NOTE_INSN_BASIC_BLOCK", "NOTE_INSN_EXPECTED_VALUE",
  "NOTE_INSN_PREDICTION",
  "NOTE_INSN_UNLIKELY_EXECUTED_CODE",
  "NOTE_INSN_VAR_LOCATION"
};
const char * const reg_note_name[] =
{
  "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_EQUAL",
  "REG_RETVAL", "REG_LIBCALL", "REG_NONNEG",
  "REG_NO_CONFLICT", "REG_UNUSED", "REG_CC_SETTER", "REG_CC_USER",
  "REG_LABEL", "REG_DEP_ANTI", "REG_DEP_OUTPUT", "REG_BR_PROB",
  "REG_VALUE_PROFILE", "REG_NOALIAS", "REG_SAVE_AREA", "REG_BR_PRED",
  "REG_FRAME_RELATED_EXPR", "REG_EH_CONTEXT", "REG_EH_REGION",
  "REG_SAVE_NOTE", "REG_MAYBE_DEAD", "REG_NORETURN",
  "REG_NON_LOCAL_GOTO", "REG_CROSSING_JUMP", "REG_SETJMP", "REG_ALWAYS_RETURN",
  "REG_VTABLE_REF"
};
rtvec
rtvec_alloc (int n)
{
  rtvec rt;
  rt = ((rtvec) ggc_alloc_typed_stat (gt_ggc_e_9rtvec_def,sizeof (struct rtvec_def) + ((n) - 1) * sizeof (rtx) ));
  memset (&rt->elem[0], 0, n * sizeof (rtx));
  ((rt)->num_elem = (n));
  return rt;
}
rtx
rtx_alloc_stat (enum rtx_code code )
{
  rtx rt;
  rt = ggc_alloc_typed_stat (gt_ggc_e_7rtx_def, rtx_size[code] );
  memset (rt, 0, __builtin_offsetof (rtx_def, u));
  ((rt)->code = (code));
  return rt;
}
rtx
copy_rtx (rtx orig)
{
  rtx copy;
  int i, j;
  enum rtx_code code;
  const char *format_ptr;
  code = ((enum rtx_code) (orig)->code);
  switch (code)
    {
    case REG:
    case QUEUED:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case CODE_LABEL:
    case PC:
    case CC0:
    case SCRATCH:
      return orig;
    case CLOBBER:
      if ((((enum rtx_code) ((((orig)->u.fld[0]).rtx1))->code) == REG) && ((((((orig)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
 return orig;
      break;
    case CONST:
      if (((enum rtx_code) ((((orig)->u.fld[0]).rtx1))->code) == PLUS
   && ((enum rtx_code) (((((((orig)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SYMBOL_REF
   && ((enum rtx_code) (((((((orig)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
 return orig;
      break;
    default:
      break;
    }
  copy = rtx_alloc_stat (code );
  memcpy (copy, orig, __builtin_offsetof (rtx_def, u));
  ((copy)->used) = 0;
  if (((((enum rtx_code) (orig)->code) == INSN) || (((enum rtx_code) (orig)->code) == JUMP_INSN) || (((enum rtx_code) (orig)->code) == CALL_INSN)))
    ((copy)->frame_related) = 0;
  ((copy)->jump) = ((orig)->jump);
  ((copy)->call) = ((orig)->call);
  format_ptr = (rtx_format[(int) (((enum rtx_code) (copy)->code))]);
  for (i = 0; i < (rtx_length[(int) (((enum rtx_code) (copy)->code))]); i++)
    {
      copy->u.fld[i] = orig->u.fld[i];
      switch (*format_ptr++)
 {
 case 'e':
   if ((((orig)->u.fld[i]).rtx1) != ((void *)0))
     (((copy)->u.fld[i]).rtx1) = copy_rtx ((((orig)->u.fld[i]).rtx1));
   break;
 case 'E':
 case 'V':
   if ((((orig)->u.fld[i]).rtvec1) != ((void *)0))
     {
       (((copy)->u.fld[i]).rtvec1) = rtvec_alloc ((((((orig)->u.fld[i]).rtvec1))->num_elem));
       for (j = 0; j < (((((copy)->u.fld[i]).rtvec1))->num_elem); j++)
  (((((copy)->u.fld[i]).rtvec1))->elem[j]) = copy_rtx ((((((orig)->u.fld[i]).rtvec1))->elem[j]));
     }
   break;
 case 't':
 case 'w':
 case 'i':
 case 's':
 case 'S':
 case 'T':
 case 'u':
 case 'B':
 case '0':
   break;
 default:
   abort ();
 }
    }
  return copy;
}
rtx
shallow_copy_rtx_stat (rtx orig )
{
  rtx copy;
  copy = ggc_alloc_typed_stat (gt_ggc_e_7rtx_def, rtx_size[((enum rtx_code) (orig)->code)]
          );
  memcpy (copy, orig, rtx_size[((enum rtx_code) (orig)->code)]);
  return copy;
}
int rtx_equal_function_value_matters;
int generating_concat_p;
int
rtx_equal_p (rtx x, rtx y)
{
  int i;
  int j;
  enum rtx_code code;
  const char *fmt;
  if (x == y)
    return 1;
  if (x == 0 || y == 0)
    return 0;
  code = ((enum rtx_code) (x)->code);
  if (code != ((enum rtx_code) (y)->code))
    return 0;
  if (((enum machine_mode) (x)->mode) != ((enum machine_mode) (y)->mode))
    return 0;
  switch (code)
    {
    case REG:
      return ((((x)->u.fld[0]).rtuint) == (((y)->u.fld[0]).rtuint)
       && (! rtx_equal_function_value_matters
    || (((x))->return_val) == (((y))->return_val)));
    case LABEL_REF:
      return (((x)->u.fld[0]).rtx1) == (((y)->u.fld[0]).rtx1);
    case SYMBOL_REF:
      return (((x)->u.fld[0]).rtstr) == (((y)->u.fld[0]).rtstr);
    case SCRATCH:
    case CONST_DOUBLE:
    case CONST_INT:
    case CONST_VECTOR:
      return 0;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      switch (fmt[i])
 {
 case 'w':
   if (((x)->u.hwint[i]) != ((y)->u.hwint[i]))
     return 0;
   break;
 case 'n':
 case 'i':
   if ((((x)->u.fld[i]).rtint) != (((y)->u.fld[i]).rtint))
     return 0;
   break;
 case 'V':
 case 'E':
   if ((((((x)->u.fld[i]).rtvec1))->num_elem) != (((((y)->u.fld[i]).rtvec1))->num_elem))
     return 0;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     if (rtx_equal_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), (((((y)->u.fld[i]).rtvec1))->elem[j])) == 0)
       return 0;
   break;
 case 'e':
   if (rtx_equal_p ((((x)->u.fld[i]).rtx1), (((y)->u.fld[i]).rtx1)) == 0)
     return 0;
   break;
 case 'S':
 case 's':
   if (((((x)->u.fld[i]).rtstr) || (((y)->u.fld[i]).rtstr))
       && (! (((x)->u.fld[i]).rtstr) || ! (((y)->u.fld[i]).rtstr)
    || strcmp ((((x)->u.fld[i]).rtstr), (((y)->u.fld[i]).rtstr))))
     return 0;
   break;
 case 'u':
   break;
 case '0':
 case 't':
   break;
 default:
   abort ();
 }
    }
  return 1;
}
void dump_rtx_statistics (void)
{
}
static int global_reg_mentioned_p_1 (rtx *, void *);
static void set_of_1 (rtx, rtx, void *);
static void insn_dependent_p_1 (rtx, rtx, void *);
static int rtx_referenced_p_1 (rtx *, void *);
static int computed_jump_p_1 (rtx);
static void parms_set (rtx, rtx, void *);
static unsigned char hoist_test_store (rtx, rtx, regset);
static void hoist_update_store (rtx, rtx *, rtx, rtx);
static unsigned long cached_nonzero_bits (rtx, enum machine_mode,
                                                   rtx, enum machine_mode,
                                                   unsigned long);
static unsigned long nonzero_bits1 (rtx, enum machine_mode, rtx,
                                             enum machine_mode,
                                             unsigned long);
static unsigned int cached_num_sign_bit_copies (rtx, enum machine_mode, rtx,
                                                enum machine_mode,
                                                unsigned int);
static unsigned int num_sign_bit_copies1 (rtx, enum machine_mode, rtx,
                                          enum machine_mode, unsigned int);
int target_flags;
int
rtx_unstable_p (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  int i;
  const char *fmt;
  switch (code)
    {
    case MEM:
      return ! (((x))->unchanging) || rtx_unstable_p ((((x)->u.fld[0]).rtx1));
    case QUEUED:
      return 1;
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
      return 0;
    case REG:
      if (x == (global_rtl[GR_FRAME_POINTER]) || x == (global_rtl[GR_HARD_FRAME_POINTER])
   || (x == (global_rtl[GR_ARG_POINTER]) && fixed_regs[16])
   || (((x))->unchanging))
 return 0;
      if (x == pic_offset_table_rtx)
 return 0;
      return 1;
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 1;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    if (fmt[i] == 'e')
      {
 if (rtx_unstable_p ((((x)->u.fld[i]).rtx1)))
   return 1;
      }
    else if (fmt[i] == 'E')
      {
 int j;
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   if (rtx_unstable_p ((((((x)->u.fld[i]).rtvec1))->elem[j])))
     return 1;
      }
  return 0;
}
int
rtx_varies_p (rtx x, int for_alias)
{
  enum rtx_code code;
  int i;
  const char *fmt;
  if (!x)
    return 0;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case MEM:
      return ! (((x))->unchanging) || rtx_varies_p ((((x)->u.fld[0]).rtx1), for_alias);
    case QUEUED:
      return 1;
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
      return 0;
    case REG:
      if (x == (global_rtl[GR_FRAME_POINTER]) || x == (global_rtl[GR_HARD_FRAME_POINTER])
   || (x == (global_rtl[GR_ARG_POINTER]) && fixed_regs[16]))
 return 0;
      if (x == pic_offset_table_rtx
   )
 return 0;
      return 1;
    case LO_SUM:
      return (! for_alias && rtx_varies_p ((((x)->u.fld[0]).rtx1), for_alias))
      || rtx_varies_p ((((x)->u.fld[1]).rtx1), for_alias);
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 1;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    if (fmt[i] == 'e')
      {
 if (rtx_varies_p ((((x)->u.fld[i]).rtx1), for_alias))
   return 1;
      }
    else if (fmt[i] == 'E')
      {
 int j;
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   if (rtx_varies_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), for_alias))
     return 1;
      }
  return 0;
}
int
rtx_addr_can_trap_p (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case SYMBOL_REF:
      return (((x))->return_val);
    case LABEL_REF:
      return 0;
    case REG:
      if (x == (global_rtl[GR_FRAME_POINTER]) || x == (global_rtl[GR_HARD_FRAME_POINTER])
   || x == (global_rtl[GR_STACK_POINTER])
   || (x == (global_rtl[GR_ARG_POINTER]) && fixed_regs[16]))
 return 0;
      if ((((x)->u.fld[0]).rtuint) >= (53)
   && (((x)->u.fld[0]).rtuint) <= (((53)) + 4))
 return 0;
      return 1;
    case CONST:
      return rtx_addr_can_trap_p ((((x)->u.fld[0]).rtx1));
    case PLUS:
      return ! ((! rtx_addr_can_trap_p ((((x)->u.fld[0]).rtx1))
   && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
  || ((((x)->u.fld[0]).rtx1) == pic_offset_table_rtx
      && ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_VECTOR)));
    case LO_SUM:
    case PRE_MODIFY:
      return rtx_addr_can_trap_p ((((x)->u.fld[1]).rtx1));
    case PRE_DEC:
    case PRE_INC:
    case POST_DEC:
    case POST_INC:
    case POST_MODIFY:
      return rtx_addr_can_trap_p ((((x)->u.fld[0]).rtx1));
    default:
      break;
    }
  return 1;
}
unsigned char
nonzero_address_p (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case SYMBOL_REF:
      return !(((x))->return_val);
    case LABEL_REF:
      return 1;
    case REG:
      if (x == (global_rtl[GR_FRAME_POINTER]) || x == (global_rtl[GR_HARD_FRAME_POINTER])
   || x == (global_rtl[GR_STACK_POINTER])
   || (x == (global_rtl[GR_ARG_POINTER]) && fixed_regs[16]))
 return 1;
      if ((((x)->u.fld[0]).rtuint) >= (53)
   && (((x)->u.fld[0]).rtuint) <= (((53)) + 4))
 return 1;
      return 0;
    case CONST:
      return nonzero_address_p ((((x)->u.fld[0]).rtx1));
    case PLUS:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
 {
   if ((((((x)->u.fld[1]).rtx1))->u.hwint[0]) > 0
       && (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
       && ((((((x)->u.fld[0]).rtx1)))->frame_related))
     return 1;
   return nonzero_address_p ((((x)->u.fld[0]).rtx1));
 }
      else if ((((x)->u.fld[0]).rtx1) == pic_offset_table_rtx
        && ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
 return 1;
      return 0;
    case PRE_MODIFY:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) > 0)
 return 1;
      return nonzero_address_p ((((x)->u.fld[0]).rtx1));
    case PRE_INC:
      return 1;
    case PRE_DEC:
    case POST_DEC:
    case POST_INC:
    case POST_MODIFY:
      return nonzero_address_p ((((x)->u.fld[0]).rtx1));
    case LO_SUM:
      return nonzero_address_p ((((x)->u.fld[1]).rtx1));
    default:
      break;
    }
  return 0;
}
int
rtx_addr_varies_p (rtx x, int for_alias)
{
  enum rtx_code code;
  int i;
  const char *fmt;
  if (x == 0)
    return 0;
  code = ((enum rtx_code) (x)->code);
  if (code == MEM)
    return ((enum machine_mode) (x)->mode) == BLKmode || rtx_varies_p ((((x)->u.fld[0]).rtx1), for_alias);
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    if (fmt[i] == 'e')
      {
 if (rtx_addr_varies_p ((((x)->u.fld[i]).rtx1), for_alias))
   return 1;
      }
    else if (fmt[i] == 'E')
      {
 int j;
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   if (rtx_addr_varies_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), for_alias))
     return 1;
      }
  return 0;
}
long
get_integer_term (rtx x)
{
  if (((enum rtx_code) (x)->code) == CONST)
    x = (((x)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x)->code) == MINUS
      && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
    return - (((((x)->u.fld[1]).rtx1))->u.hwint[0]);
  if (((enum rtx_code) (x)->code) == PLUS
      && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
    return (((((x)->u.fld[1]).rtx1))->u.hwint[0]);
  return 0;
}
rtx
get_related_value (rtx x)
{
  if (((enum rtx_code) (x)->code) != CONST)
    return 0;
  x = (((x)->u.fld[0]).rtx1);
  if (((enum rtx_code) (x)->code) == PLUS
      && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
    return (((x)->u.fld[0]).rtx1);
  else if (((enum rtx_code) (x)->code) == MINUS
    && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
    return (((x)->u.fld[0]).rtx1);
  return 0;
}
rtx
get_jump_table_offset (rtx insn, rtx *earliest)
{
  rtx label = ((void *)0);
  rtx table = ((void *)0);
  rtx set;
  rtx old_insn;
  rtx x;
  rtx old_x;
  rtx y;
  rtx old_y;
  int i;
  if (!tablejump_p (insn, &label, &table) || !(set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)))
    return (rtx) 0;
  x = (((set)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x)->code) == IF_THEN_ELSE
      && ((enum rtx_code) ((((x)->u.fld[2]).rtx1))->code) == LABEL_REF)
    x = (((x)->u.fld[1]).rtx1);
  for (old_x = (rtx) 0; (((enum rtx_code) (x)->code) == REG) && x != old_x;
       old_x = x, x = find_last_value (x, &insn, (rtx) 0, 0))
    ;
  if (((enum rtx_code) ((((table)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC
      && (((enum rtx_code) (x)->code) == PLUS || ((enum rtx_code) (x)->code) == MINUS))
    {
      for (i = 0; i < 2; i++)
 {
   old_insn = insn;
   y = (((x)->u.fld[i]).rtx1);
   if (y == (global_rtl[GR_PC]) || y == pic_offset_table_rtx)
     break;
   for (old_y = (rtx) 0; (((enum rtx_code) (y)->code) == REG) && y != old_y;
        old_y = y, y = find_last_value (y, &old_insn, (rtx) 0, 0))
     ;
   if ((((enum rtx_code) (y)->code) == LABEL_REF && (((y)->u.fld[0]).rtx1) == label))
     break;
 }
      if (i >= 2)
 return (rtx) 0;
      x = (((x)->u.fld[1 - i]).rtx1);
      for (old_x = (rtx) 0; (((enum rtx_code) (x)->code) == REG) && x != old_x;
    old_x = x, x = find_last_value (x, &insn, (rtx) 0, 0))
 ;
    }
  if (((enum rtx_code) (x)->code) == SIGN_EXTEND || ((enum rtx_code) (x)->code) == ZERO_EXTEND)
    {
      x = (((x)->u.fld[0]).rtx1);
      for (old_x = (rtx) 0; (((enum rtx_code) (x)->code) == REG) && x != old_x;
    old_x = x, x = find_last_value (x, &insn, (rtx) 0, 0))
 ;
    }
  if (!(((enum rtx_code) (x)->code) == MEM))
    return (rtx) 0;
  x = (((x)->u.fld[0]).rtx1);
  for (old_x = (rtx) 0; (((enum rtx_code) (x)->code) == REG) && x != old_x;
       old_x = x, x = find_last_value (x, &insn, (rtx) 0, 0))
    ;
  if (((enum rtx_code) (x)->code) != PLUS)
    return (rtx) 0;
  for (i = 0; i < 2; i++)
    {
      old_insn = insn;
      y = (((x)->u.fld[i]).rtx1);
      for (old_y = (rtx) 0; (((enum rtx_code) (y)->code) == REG) && y != old_y;
    old_y = y, y = find_last_value (y, &old_insn, (rtx) 0, 0))
 ;
      if ((((enum rtx_code) (y)->code) == CONST || ((enum rtx_code) (y)->code) == LABEL_REF)
   && reg_mentioned_p (label, y))
 break;
    }
  if (i >= 2)
    return (rtx) 0;
  x = (((x)->u.fld[1 - i]).rtx1);
  if (((enum rtx_code) (x)->code) == PLUS || ((enum rtx_code) (x)->code) == MINUS)
    for (i = 0; i < 2; i++)
      if ((((x)->u.fld[i]).rtx1) == pic_offset_table_rtx)
 {
   x = (((x)->u.fld[1 - i]).rtx1);
   break;
 }
  if (earliest)
    *earliest = insn;
  return x;
}
static int
global_reg_mentioned_p_1 (rtx *loc, void *data )
{
  int regno;
  rtx x = *loc;
  if (! x)
    return 0;
  switch (((enum rtx_code) (x)->code))
    {
    case SUBREG:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG))
 {
   if (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
       && global_regs[subreg_regno (x)])
     return 1;
   return 0;
 }
      break;
    case REG:
      regno = (((x)->u.fld[0]).rtuint);
      if (regno < 53 && global_regs[regno])
 return 1;
      return 0;
    case SCRATCH:
    case PC:
    case CC0:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST:
    case LABEL_REF:
      return 0;
    case CALL:
      return 1;
    default:
      break;
    }
  return 0;
}
int
global_reg_mentioned_p (rtx x)
{
  if (((((enum rtx_code) (x)->code) == INSN) || (((enum rtx_code) (x)->code) == JUMP_INSN) || (((enum rtx_code) (x)->code) == CALL_INSN)))
    {
      if (((enum rtx_code) (x)->code) == CALL_INSN)
 {
   if (! (((x))->unchanging))
     return 1;
   x = (((x)->u.fld[9]).rtx1);
   if (x == 0)
     return 0;
 }
      else
 x = (((x)->u.fld[5]).rtx1);
    }
  return for_each_rtx (&x, global_reg_mentioned_p_1, ((void *)0));
}
int
count_occurrences (rtx x, rtx find, int count_dest)
{
  int i, j;
  enum rtx_code code;
  const char *format_ptr;
  int count;
  if (x == find)
    return 1;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case CODE_LABEL:
    case PC:
    case CC0:
      return 0;
    case MEM:
      if ((((enum rtx_code) (find)->code) == MEM) && rtx_equal_p (x, find))
 return 1;
      break;
    case SET:
      if ((((x)->u.fld[0]).rtx1) == find && ! count_dest)
 return count_occurrences ((((x)->u.fld[1]).rtx1), find, count_dest);
      break;
    default:
      break;
    }
  format_ptr = (rtx_format[(int) (code)]);
  count = 0;
  for (i = 0; i < (rtx_length[(int) (code)]); i++)
    {
      switch (*format_ptr++)
 {
 case 'e':
   count += count_occurrences ((((x)->u.fld[i]).rtx1), find, count_dest);
   break;
 case 'E':
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     count += count_occurrences ((((((x)->u.fld[i]).rtvec1))->elem[j]), find, count_dest);
   break;
 }
    }
  return count;
}
int
reg_mentioned_p (rtx reg, rtx in)
{
  const char *fmt;
  int i;
  enum rtx_code code;
  if (in == 0)
    return 0;
  if (reg == in)
    return 1;
  if (((enum rtx_code) (in)->code) == LABEL_REF)
    return reg == (((in)->u.fld[0]).rtx1);
  code = ((enum rtx_code) (in)->code);
  switch (code)
    {
    case REG:
      return (((enum rtx_code) (reg)->code) == REG) && (((in)->u.fld[0]).rtuint) == (((reg)->u.fld[0]).rtuint);
    case SCRATCH:
    case CC0:
    case PC:
      return 0;
    case CONST_INT:
    case CONST_VECTOR:
    case CONST_DOUBLE:
      return 0;
    default:
      break;
    }
  if (((enum rtx_code) (reg)->code) == code && rtx_equal_p (reg, in))
    return 1;
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'E')
 {
   int j;
   for (j = (((((in)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     if (reg_mentioned_p (reg, (((((in)->u.fld[i]).rtvec1))->elem[j])))
       return 1;
 }
      else if (fmt[i] == 'e'
        && reg_mentioned_p (reg, (((in)->u.fld[i]).rtx1)))
 return 1;
    }
  return 0;
}
int
no_labels_between_p (rtx beg, rtx end)
{
  rtx p;
  if (beg == end)
    return 0;
  for (p = (((beg)->u.fld[2]).rtx1); p != end; p = (((p)->u.fld[2]).rtx1))
    if (((enum rtx_code) (p)->code) == CODE_LABEL)
      return 0;
  return 1;
}
int
no_jumps_between_p (rtx beg, rtx end)
{
  rtx p;
  for (p = (((beg)->u.fld[2]).rtx1); p != end; p = (((p)->u.fld[2]).rtx1))
    if (((enum rtx_code) (p)->code) == JUMP_INSN)
      return 0;
  return 1;
}
int
reg_used_between_p (rtx reg, rtx from_insn, rtx to_insn)
{
  rtx insn;
  if (from_insn == to_insn)
    return 0;
  for (insn = (((from_insn)->u.fld[2]).rtx1); insn != to_insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
 && (reg_overlap_mentioned_p (reg, (((insn)->u.fld[5]).rtx1))
    || (((enum rtx_code) (insn)->code) == CALL_INSN
       && (find_reg_fusage (insn, USE, reg)
    || find_reg_fusage (insn, CLOBBER, reg)))))
      return 1;
  return 0;
}
int
reg_referenced_p (rtx x, rtx body)
{
  int i;
  switch (((enum rtx_code) (body)->code))
    {
    case SET:
      if (reg_overlap_mentioned_p (x, (((body)->u.fld[1]).rtx1)))
 return 1;
      if (((enum rtx_code) ((((body)->u.fld[0]).rtx1))->code) != CC0
   && ((enum rtx_code) ((((body)->u.fld[0]).rtx1))->code) != PC
   && !(((enum rtx_code) ((((body)->u.fld[0]).rtx1))->code) == REG)
   && ! (((enum rtx_code) ((((body)->u.fld[0]).rtx1))->code) == SUBREG
  && (((enum rtx_code) (((((((body)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG)
  && (((((unsigned short) mode_size[((enum machine_mode) (((((((body)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->mode)])
        + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4))
      == ((((unsigned short) mode_size[((enum machine_mode) ((((body)->u.fld[0]).rtx1))->mode)])
    + ((0 ? 8 : 4) - 1)) / (0 ? 8 : 4))))
   && reg_overlap_mentioned_p (x, (((body)->u.fld[0]).rtx1)))
 return 1;
      return 0;
    case ASM_OPERANDS:
      for (i = (((((body)->u.fld[3]).rtvec1))->num_elem) - 1; i >= 0; i--)
 if (reg_overlap_mentioned_p (x, (((((body)->u.fld[3]).rtvec1))->elem[i])))
   return 1;
      return 0;
    case CALL:
    case USE:
    case IF_THEN_ELSE:
      return reg_overlap_mentioned_p (x, body);
    case TRAP_IF:
      return reg_overlap_mentioned_p (x, (((body)->u.fld[0]).rtx1));
    case PREFETCH:
      return reg_overlap_mentioned_p (x, (((body)->u.fld[0]).rtx1));
    case UNSPEC:
    case UNSPEC_VOLATILE:
      for (i = (((((body)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 if (reg_overlap_mentioned_p (x, (((((body)->u.fld[0]).rtvec1))->elem[i])))
   return 1;
      return 0;
    case PARALLEL:
      for (i = (((((body)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 if (reg_referenced_p (x, (((((body)->u.fld[0]).rtvec1))->elem[i])))
   return 1;
      return 0;
    case CLOBBER:
      if ((((enum rtx_code) ((((body)->u.fld[0]).rtx1))->code) == MEM))
 if (reg_overlap_mentioned_p (x, ((((((body)->u.fld[0]).rtx1))->u.fld[0]).rtx1)))
   return 1;
      return 0;
    case COND_EXEC:
      if (reg_overlap_mentioned_p (x, (((body)->u.fld[0]).rtx1)))
 return 1;
      return reg_referenced_p (x, (((body)->u.fld[1]).rtx1));
    default:
      return 0;
    }
}
int
reg_referenced_between_p (rtx reg, rtx from_insn, rtx to_insn)
{
  rtx insn;
  if (from_insn == to_insn)
    return 0;
  for (insn = (((from_insn)->u.fld[2]).rtx1); insn != to_insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
 && (reg_referenced_p (reg, (((insn)->u.fld[5]).rtx1))
    || (((enum rtx_code) (insn)->code) == CALL_INSN
       && find_reg_fusage (insn, USE, reg))))
      return 1;
  return 0;
}
int
reg_set_between_p (rtx reg, rtx from_insn, rtx to_insn)
{
  rtx insn;
  if (from_insn == to_insn)
    return 0;
  for (insn = (((from_insn)->u.fld[2]).rtx1); insn != to_insn; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && reg_set_p (reg, insn))
      return 1;
  return 0;
}
int
reg_set_p (rtx reg, rtx insn)
{
  if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
      && (0
   || (((enum rtx_code) (insn)->code) == CALL_INSN
       && (((((enum rtx_code) (reg)->code) == REG)
     && (((reg)->u.fld[0]).rtuint) < 53)
    || (((enum rtx_code) (reg)->code) == MEM)
    || find_reg_fusage (insn, CLOBBER, reg)))))
    return 1;
  return set_of (reg, insn) != (rtx) 0;
}
int
regs_set_between_p (rtx x, rtx start, rtx end)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt;
  int i, j;
  switch (code)
    {
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CONST:
    case SYMBOL_REF:
    case LABEL_REF:
    case PC:
    case CC0:
      return 0;
    case REG:
      return reg_set_between_p (x, start, end);
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e' && regs_set_between_p ((((x)->u.fld[i]).rtx1), start, end))
 return 1;
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   if (regs_set_between_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), start, end))
     return 1;
    }
  return 0;
}
int
modified_between_p (rtx x, rtx start, rtx end)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt;
  int i, j;
  rtx insn;
  if (start == end)
    return 0;
  switch (code)
    {
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CONST:
    case SYMBOL_REF:
    case LABEL_REF:
      return 0;
    case PC:
    case CC0:
      return 1;
    case MEM:
      if ((((x))->unchanging))
 return 0;
      if (modified_between_p ((((x)->u.fld[0]).rtx1), start, end))
 return 1;
      for (insn = (((start)->u.fld[2]).rtx1); insn != end; insn = (((insn)->u.fld[2]).rtx1))
 if (memory_modified_in_insn_p (x, insn))
   return 1;
      return 0;
      break;
    case REG:
      return reg_set_between_p (x, start, end);
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e' && modified_between_p ((((x)->u.fld[i]).rtx1), start, end))
 return 1;
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   if (modified_between_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), start, end))
     return 1;
    }
  return 0;
}
int
modified_in_p (rtx x, rtx insn)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  const char *fmt;
  int i, j;
  switch (code)
    {
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CONST:
    case SYMBOL_REF:
    case LABEL_REF:
      return 0;
    case PC:
    case CC0:
      return 1;
    case MEM:
      if ((((x))->unchanging))
 return 0;
      if (modified_in_p ((((x)->u.fld[0]).rtx1), insn))
 return 1;
      if (memory_modified_in_insn_p (x, insn))
 return 1;
      return 0;
      break;
    case REG:
      return reg_set_p (x, insn);
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e' && modified_in_p ((((x)->u.fld[i]).rtx1), insn))
 return 1;
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   if (modified_in_p ((((((x)->u.fld[i]).rtvec1))->elem[j]), insn))
     return 1;
    }
  return 0;
}
int
insn_dependent_p (rtx x, rtx y)
{
  rtx tmp;
  if (! ((((enum rtx_code) (x)->code) == INSN) || (((enum rtx_code) (x)->code) == JUMP_INSN) || (((enum rtx_code) (x)->code) == CALL_INSN)) || ! ((((enum rtx_code) (y)->code) == INSN) || (((enum rtx_code) (y)->code) == JUMP_INSN) || (((enum rtx_code) (y)->code) == CALL_INSN)))
    abort ();
  tmp = (((y)->u.fld[5]).rtx1);
  note_stores ((((x)->u.fld[5]).rtx1), insn_dependent_p_1, &tmp);
  if (tmp == (rtx) 0)
    return 1;
  tmp = (((x)->u.fld[5]).rtx1);
  note_stores ((((y)->u.fld[5]).rtx1), insn_dependent_p_1, &tmp);
  if (tmp == (rtx) 0)
    return 1;
  return 0;
}
static void
insn_dependent_p_1 (rtx x, rtx pat , void *data)
{
  rtx * pinsn = (rtx *) data;
  if (*pinsn && reg_mentioned_p (x, *pinsn))
    *pinsn = (rtx) 0;
}
struct set_of_data
  {
    rtx found;
    rtx pat;
  };
static void
set_of_1 (rtx x, rtx pat, void *data1)
{
   struct set_of_data *data = (struct set_of_data *) (data1);
   if (rtx_equal_p (x, data->pat)
       || (!(((enum rtx_code) (x)->code) == MEM) && reg_overlap_mentioned_p (data->pat, x)))
     data->found = pat;
}
rtx
set_of (rtx pat, rtx insn)
{
  struct set_of_data data;
  data.found = (rtx) 0;
  data.pat = pat;
  note_stores (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((insn)->u.fld[5]).rtx1) : insn, set_of_1, &data);
  return data.found;
}
rtx
single_set_2 (rtx insn, rtx pat)
{
  rtx set = ((void *)0);
  int set_verified = 1;
  int i;
  if (((enum rtx_code) (pat)->code) == PARALLEL)
    {
      for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx sub = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
   switch (((enum rtx_code) (sub)->code))
     {
     case USE:
     case CLOBBER:
       break;
     case SET:
       if (!set_verified)
  {
    if (find_reg_note (insn, REG_UNUSED, (((set)->u.fld[0]).rtx1))
        && !side_effects_p (set))
      set = ((void *)0);
    else
      set_verified = 1;
  }
       if (!set)
  set = sub, set_verified = 0;
       else if (!find_reg_note (insn, REG_UNUSED, (((sub)->u.fld[0]).rtx1))
         || side_effects_p (sub))
  return (rtx) 0;
       break;
     default:
       return (rtx) 0;
     }
 }
    }
  return set;
}
int
multiple_sets (rtx insn)
{
  int found;
  int i;
  if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return 0;
  if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL)
    {
      for (i = 0, found = 0; i < ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem); i++)
 if (((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[i]))->code) == SET)
   {
     if (found)
       return 1;
     else
       found = 1;
   }
    }
  return 0;
}
int
set_noop_p (rtx set)
{
  rtx src = (((set)->u.fld[1]).rtx1);
  rtx dst = (((set)->u.fld[0]).rtx1);
  if (dst == (global_rtl[GR_PC]) && src == (global_rtl[GR_PC]))
    return 1;
  if ((((enum rtx_code) (dst)->code) == MEM) && (((enum rtx_code) (src)->code) == MEM))
    return rtx_equal_p (dst, src) && !side_effects_p (dst);
  if (((enum rtx_code) (dst)->code) == SIGN_EXTRACT
      || ((enum rtx_code) (dst)->code) == ZERO_EXTRACT)
    return rtx_equal_p ((((dst)->u.fld[0]).rtx1), src)
    && ! 0 && (((dst)->u.fld[2]).rtx1) == (const_int_rtx[64])
    && !side_effects_p (src);
  if (((enum rtx_code) (dst)->code) == STRICT_LOW_PART)
    dst = (((dst)->u.fld[0]).rtx1);
  if (((enum rtx_code) (src)->code) == SUBREG && ((enum rtx_code) (dst)->code) == SUBREG)
    {
      if ((((src)->u.fld[1]).rtuint) != (((dst)->u.fld[1]).rtuint))
 return 0;
      src = (((src)->u.fld[0]).rtx1);
      dst = (((dst)->u.fld[0]).rtx1);
    }
  return ((((enum rtx_code) (src)->code) == REG) && (((enum rtx_code) (dst)->code) == REG)
   && (((src)->u.fld[0]).rtuint) == (((dst)->u.fld[0]).rtuint));
}
int
noop_move_p (rtx insn)
{
  rtx pat = (((insn)->u.fld[5]).rtx1);
  if ((((insn)->u.fld[6]).rtint) == 2147483647)
    return 1;
  if (find_reg_note (insn, REG_EQUAL, (rtx) 0))
    return 0;
  if (find_reg_note (insn, REG_RETVAL, (rtx) 0))
    return 0;
  if (((enum rtx_code) (pat)->code) == SET && set_noop_p (pat))
    return 1;
  if (((enum rtx_code) (pat)->code) == PARALLEL)
    {
      int i;
      for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx tem = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (tem)->code) == USE
       || ((enum rtx_code) (tem)->code) == CLOBBER)
     continue;
   if (((enum rtx_code) (tem)->code) != SET || ! set_noop_p (tem))
     return 0;
 }
      return 1;
    }
  return 0;
}
rtx
find_last_value (rtx x, rtx *pinsn, rtx valid_to, int allow_hwreg)
{
  rtx p;
  for (p = (((*pinsn)->u.fld[1]).rtx1); p && ((enum rtx_code) (p)->code) != CODE_LABEL;
       p = (((p)->u.fld[1]).rtx1))
    if (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)))
      {
 rtx set = (((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) ? (((enum rtx_code) ((((p)->u.fld[5]).rtx1))->code) == SET ? (((p)->u.fld[5]).rtx1) : single_set_2 (p, (((p)->u.fld[5]).rtx1))) : (rtx) 0);
 rtx note = find_reg_note (p, REG_EQUAL, (rtx) 0);
 if (set && rtx_equal_p (x, (((set)->u.fld[0]).rtx1)))
   {
     rtx src = (((set)->u.fld[1]).rtx1);
     if (note && ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) != EXPR_LIST)
       src = (((note)->u.fld[0]).rtx1);
     if ((valid_to == (rtx) 0
   || ! modified_between_p (src, (((p)->u.fld[1]).rtx1), valid_to))
  && (! ((((enum rtx_code) (src)->code) == REG)
        && (((src)->u.fld[0]).rtuint) < 53) || allow_hwreg))
       {
  *pinsn = p;
  return src;
       }
   }
 if (reg_set_p (x, p))
   break;
      }
  return x;
}
int
refers_to_regno_p (unsigned int regno, unsigned int endregno, rtx x,
     rtx *loc)
{
  int i;
  unsigned int x_regno;
  enum rtx_code code;
  const char *fmt;
 repeat:
  if (x == 0)
    return 0;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
      x_regno = (((x)->u.fld[0]).rtuint);
      if ((x_regno == 7
    || x_regno == 16
    || x_regno == 20)
   && regno >= (53) && regno <= (((53)) + 4))
 return 1;
      return (endregno > x_regno
       && regno < x_regno + (x_regno < 53
        ? hard_regno_nregs[x_regno][((enum machine_mode) (x)->mode)]
         : 1));
    case SUBREG:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
   && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53)
 {
   unsigned int inner_regno = subreg_regno (x);
   unsigned int inner_endregno
     = inner_regno + (inner_regno < 53
        ? hard_regno_nregs[inner_regno][((enum machine_mode) (x)->mode)] : 1);
   return endregno > inner_regno && regno < inner_endregno;
 }
      break;
    case CLOBBER:
    case SET:
      if (&(((x)->u.fld[0]).rtx1) != loc
   && ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SUBREG
        && loc != &((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1)
        && (((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG)
        && (((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53
        && refers_to_regno_p (regno, endregno,
         ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), loc))
       || (!(((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
    && refers_to_regno_p (regno, endregno, (((x)->u.fld[0]).rtx1), loc))))
 return 1;
      if (code == CLOBBER || loc == &(((x)->u.fld[1]).rtx1))
 return 0;
      x = (((x)->u.fld[1]).rtx1);
      goto repeat;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e' && loc != &(((x)->u.fld[i]).rtx1))
 {
   if (i == 0)
     {
       x = (((x)->u.fld[0]).rtx1);
       goto repeat;
     }
   else
     if (refers_to_regno_p (regno, endregno, (((x)->u.fld[i]).rtx1), loc))
       return 1;
 }
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     if (loc != &(((((x)->u.fld[i]).rtvec1))->elem[j])
  && refers_to_regno_p (regno, endregno, (((((x)->u.fld[i]).rtvec1))->elem[j]), loc))
       return 1;
 }
    }
  return 0;
}
int
reg_overlap_mentioned_p (rtx x, rtx in)
{
  unsigned int regno, endregno;
  if (((rtx_class[(int) (((enum rtx_code) (in)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (in)->code) == CONST_VECTOR))
    return 0;
 recurse:
  switch (((enum rtx_code) (x)->code))
    {
    case STRICT_LOW_PART:
    case ZERO_EXTRACT:
    case SIGN_EXTRACT:
      x = (((x)->u.fld[0]).rtx1);
      goto recurse;
    case SUBREG:
      regno = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
      if (regno < 53)
 regno = subreg_regno (x);
      goto do_reg;
    case REG:
      regno = (((x)->u.fld[0]).rtuint);
    do_reg:
      endregno = regno + (regno < 53
     ? hard_regno_nregs[regno][((enum machine_mode) (x)->mode)] : 1);
      return refers_to_regno_p (regno, endregno, in, (rtx*) 0);
    case MEM:
      {
 const char *fmt;
 int i;
 if ((((enum rtx_code) (in)->code) == MEM))
   return 1;
 fmt = (rtx_format[(int) (((enum rtx_code) (in)->code))]);
 for (i = (rtx_length[(int) (((enum rtx_code) (in)->code))]) - 1; i >= 0; i--)
   if (fmt[i] == 'e' && reg_overlap_mentioned_p (x, (((in)->u.fld[i]).rtx1)))
     return 1;
 return 0;
      }
    case SCRATCH:
    case PC:
    case CC0:
      return reg_mentioned_p (x, in);
    case PARALLEL:
      {
 int i;
 for (i = (((((x)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
   if (((((((((x)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1) != 0
       && reg_overlap_mentioned_p (((((((((x)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1), in))
     return 1;
 return 0;
      }
    default:
      return 0;
    }
}
void
note_stores (rtx x, void (*fun) (rtx, rtx, void *), void *data)
{
  int i;
  if (((enum rtx_code) (x)->code) == COND_EXEC)
    x = (((x)->u.fld[1]).rtx1);
  if (((enum rtx_code) (x)->code) == SET || ((enum rtx_code) (x)->code) == CLOBBER)
    {
      rtx dest = (((x)->u.fld[0]).rtx1);
      while ((((enum rtx_code) (dest)->code) == SUBREG
       && (!(((enum rtx_code) ((((dest)->u.fld[0]).rtx1))->code) == REG)
    || ((((((dest)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53))
      || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT
      || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT
      || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
 dest = (((dest)->u.fld[0]).rtx1);
      if (((enum rtx_code) (dest)->code) == PARALLEL)
 {
   for (i = (((((dest)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
     if (((((((((dest)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1) != 0)
       (*fun) (((((((((dest)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1), x, data);
 }
      else
 (*fun) (dest, x, data);
    }
  else if (((enum rtx_code) (x)->code) == PARALLEL)
    for (i = (((((x)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
      note_stores ((((((x)->u.fld[0]).rtvec1))->elem[i]), fun, data);
}
void
note_uses (rtx *pbody, void (*fun) (rtx *, void *), void *data)
{
  rtx body = *pbody;
  int i;
  switch (((enum rtx_code) (body)->code))
    {
    case COND_EXEC:
      (*fun) (&(((body)->u.fld[0]).rtx1), data);
      note_uses (&(((body)->u.fld[1]).rtx1), fun, data);
      return;
    case PARALLEL:
      for (i = (((((body)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 note_uses (&(((((body)->u.fld[0]).rtvec1))->elem[i]), fun, data);
      return;
    case USE:
      (*fun) (&(((body)->u.fld[0]).rtx1), data);
      return;
    case ASM_OPERANDS:
      for (i = (((((body)->u.fld[3]).rtvec1))->num_elem) - 1; i >= 0; i--)
 (*fun) (&(((((body)->u.fld[3]).rtvec1))->elem[i]), data);
      return;
    case TRAP_IF:
      (*fun) (&(((body)->u.fld[0]).rtx1), data);
      return;
    case PREFETCH:
      (*fun) (&(((body)->u.fld[0]).rtx1), data);
      return;
    case UNSPEC:
    case UNSPEC_VOLATILE:
      for (i = (((((body)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 (*fun) (&(((((body)->u.fld[0]).rtvec1))->elem[i]), data);
      return;
    case CLOBBER:
      if ((((enum rtx_code) ((((body)->u.fld[0]).rtx1))->code) == MEM))
 (*fun) (&((((((body)->u.fld[0]).rtx1))->u.fld[0]).rtx1), data);
      return;
    case SET:
      {
 rtx dest = (((body)->u.fld[0]).rtx1);
 (*fun) (&(((body)->u.fld[1]).rtx1), data);
 if (((enum rtx_code) (dest)->code) == ZERO_EXTRACT)
   {
     (*fun) (&(((dest)->u.fld[1]).rtx1), data);
     (*fun) (&(((dest)->u.fld[2]).rtx1), data);
   }
 while (((enum rtx_code) (dest)->code) == SUBREG || ((enum rtx_code) (dest)->code) == STRICT_LOW_PART)
   dest = (((dest)->u.fld[0]).rtx1);
 if ((((enum rtx_code) (dest)->code) == MEM))
   (*fun) (&(((dest)->u.fld[0]).rtx1), data);
      }
      return;
    default:
      (*fun) (pbody, data);
      return;
    }
}
int
dead_or_set_p (rtx insn, rtx x)
{
  unsigned int regno, last_regno;
  unsigned int i;
  if (((enum rtx_code) (x)->code) == CC0)
    return 1;
  if (!(((enum rtx_code) (x)->code) == REG))
    abort ();
  regno = (((x)->u.fld[0]).rtuint);
  last_regno = (regno >= 53 ? regno
  : regno + hard_regno_nregs[regno][((enum machine_mode) (x)->mode)] - 1);
  for (i = regno; i <= last_regno; i++)
    if (! dead_or_set_regno_p (insn, i))
      return 0;
  return 1;
}
int
dead_or_set_regno_p (rtx insn, unsigned int test_regno)
{
  unsigned int regno, endregno;
  rtx pattern;
  if (find_regno_note (insn, REG_DEAD, test_regno))
    return 1;
  if (((enum rtx_code) (insn)->code) == CALL_INSN
      && find_regno_fusage (insn, CLOBBER, test_regno))
    return 1;
  pattern = (((insn)->u.fld[5]).rtx1);
  if (((enum rtx_code) (pattern)->code) == COND_EXEC)
    pattern = (((pattern)->u.fld[1]).rtx1);
  if (((enum rtx_code) (pattern)->code) == SET)
    {
      rtx dest = (((pattern)->u.fld[0]).rtx1);
      if (((enum rtx_code) (dest)->code) == SUBREG
   && (((((unsigned short) mode_size[((enum machine_mode) (dest)->mode)])
  + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))
       == ((((unsigned short) mode_size[((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode)])
     + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))))
 dest = (((dest)->u.fld[0]).rtx1);
      if (!(((enum rtx_code) (dest)->code) == REG))
 return 0;
      regno = (((dest)->u.fld[0]).rtuint);
      endregno = (regno >= 53 ? regno + 1
    : regno + hard_regno_nregs[regno][((enum machine_mode) (dest)->mode)]);
      return (test_regno >= regno && test_regno < endregno);
    }
  else if (((enum rtx_code) (pattern)->code) == PARALLEL)
    {
      int i;
      for (i = (((((pattern)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 {
   rtx body = (((((pattern)->u.fld[0]).rtvec1))->elem[i]);
   if (((enum rtx_code) (body)->code) == COND_EXEC)
     body = (((body)->u.fld[1]).rtx1);
   if (((enum rtx_code) (body)->code) == SET || ((enum rtx_code) (body)->code) == CLOBBER)
     {
       rtx dest = (((body)->u.fld[0]).rtx1);
       if (((enum rtx_code) (dest)->code) == SUBREG
    && (((((unsigned short) mode_size[((enum machine_mode) (dest)->mode)])
   + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))
        == ((((unsigned short) mode_size[((enum machine_mode) ((((dest)->u.fld[0]).rtx1))->mode)])
      + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))))
  dest = (((dest)->u.fld[0]).rtx1);
       if (!(((enum rtx_code) (dest)->code) == REG))
  continue;
       regno = (((dest)->u.fld[0]).rtuint);
       endregno = (regno >= 53 ? regno + 1
     : regno + hard_regno_nregs[regno][((enum machine_mode) (dest)->mode)]);
       if (test_regno >= regno && test_regno < endregno)
  return 1;
     }
 }
    }
  return 0;
}
rtx
find_reg_note (rtx insn, enum reg_note kind, rtx datum)
{
  rtx link;
  if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return 0;
  if (datum == 0)
    {
      for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
 if (((enum reg_note) ((enum machine_mode) (link)->mode)) == kind)
   return link;
      return 0;
    }
  for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (link)->mode)) == kind && datum == (((link)->u.fld[0]).rtx1))
      return link;
  return 0;
}
rtx
find_regno_note (rtx insn, enum reg_note kind, unsigned int regno)
{
  rtx link;
  if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return 0;
  for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (link)->mode)) == kind
 && (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == REG)
 && ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint) <= regno
 && ((((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint)
      + (((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53 ? 1
  : hard_regno_nregs[((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]
      [((enum machine_mode) ((((link)->u.fld[0]).rtx1))->mode)]))
     > regno))
      return link;
  return 0;
}
rtx
find_reg_equal_equiv_note (rtx insn)
{
  rtx link;
  if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return 0;
  for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
    if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_EQUAL
 || ((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_EQUIV)
      {
 if ((((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0) == 0)
   return 0;
 return link;
      }
  return ((void *)0);
}
int
find_reg_fusage (rtx insn, enum rtx_code code, rtx datum)
{
  if (((enum rtx_code) (insn)->code) != CALL_INSN)
    return 0;
  if (! datum)
    abort ();
  if (!(((enum rtx_code) (datum)->code) == REG))
    {
      rtx link;
      for (link = (((insn)->u.fld[9]).rtx1);
    link;
    link = (((link)->u.fld[1]).rtx1))
 if (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == code
     && rtx_equal_p (datum, ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtx1)))
   return 1;
    }
  else
    {
      unsigned int regno = (((datum)->u.fld[0]).rtuint);
      if (regno < 53)
 {
   unsigned int end_regno
     = regno + hard_regno_nregs[regno][((enum machine_mode) (datum)->mode)];
   unsigned int i;
   for (i = regno; i < end_regno; i++)
     if (find_regno_fusage (insn, code, i))
       return 1;
 }
    }
  return 0;
}
int
find_regno_fusage (rtx insn, enum rtx_code code, unsigned int regno)
{
  rtx link;
  if (regno >= 53
      || ((enum rtx_code) (insn)->code) != CALL_INSN )
    return 0;
  for (link = (((insn)->u.fld[9]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
    {
      unsigned int regnote;
      rtx op, reg;
      if (((enum rtx_code) (op = (((link)->u.fld[0]).rtx1))->code) == code
   && (((enum rtx_code) (reg = (((op)->u.fld[0]).rtx1))->code) == REG)
   && (regnote = (((reg)->u.fld[0]).rtuint)) <= regno
   && regnote + hard_regno_nregs[regnote][((enum machine_mode) (reg)->mode)] > regno)
 return 1;
    }
  return 0;
}
int
pure_call_p (rtx insn)
{
  rtx link;
  if (((enum rtx_code) (insn)->code) != CALL_INSN || ! (((insn))->unchanging))
    return 0;
  for (link = (((insn)->u.fld[9]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
    {
      rtx u, m;
      if (((enum rtx_code) (u = (((link)->u.fld[0]).rtx1))->code) == USE
   && (((enum rtx_code) (m = (((u)->u.fld[0]).rtx1))->code) == MEM) && ((enum machine_mode) (m)->mode) == BLKmode
   && ((enum rtx_code) ((((m)->u.fld[0]).rtx1))->code) == SCRATCH)
 return 1;
    }
  return 0;
}
void
remove_note (rtx insn, rtx note)
{
  rtx link;
  if (note == (rtx) 0)
    return;
  if ((((insn)->u.fld[8]).rtx1) == note)
    {
      (((insn)->u.fld[8]).rtx1) = (((note)->u.fld[1]).rtx1);
      return;
    }
  for (link = (((insn)->u.fld[8]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
    if ((((link)->u.fld[1]).rtx1) == note)
      {
 (((link)->u.fld[1]).rtx1) = (((note)->u.fld[1]).rtx1);
 return;
      }
  abort ();
}
int
in_expr_list_p (rtx listp, rtx node)
{
  rtx x;
  for (x = listp; x; x = (((x)->u.fld[1]).rtx1))
    if (node == (((x)->u.fld[0]).rtx1))
      return 1;
  return 0;
}
void
remove_node_from_expr_list (rtx node, rtx *listp)
{
  rtx temp = *listp;
  rtx prev = (rtx) 0;
  while (temp)
    {
      if (node == (((temp)->u.fld[0]).rtx1))
 {
   if (prev)
     (((prev)->u.fld[1]).rtx1) = (((temp)->u.fld[1]).rtx1);
   else
     *listp = (((temp)->u.fld[1]).rtx1);
   return;
 }
      prev = temp;
      temp = (((temp)->u.fld[1]).rtx1);
    }
}
int
volatile_insn_p (rtx x)
{
  enum rtx_code code;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case LABEL_REF:
    case SYMBOL_REF:
    case CONST_INT:
    case CONST:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CC0:
    case PC:
    case REG:
    case SCRATCH:
    case CLOBBER:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
    case CALL:
    case MEM:
      return 0;
    case UNSPEC_VOLATILE:
      return 1;
    case ASM_INPUT:
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 1;
    default:
      break;
    }
  {
    const char *fmt = (rtx_format[(int) (code)]);
    int i;
    for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
      {
 if (fmt[i] == 'e')
   {
     if (volatile_insn_p ((((x)->u.fld[i]).rtx1)))
       return 1;
   }
 else if (fmt[i] == 'E')
   {
     int j;
     for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
       if (volatile_insn_p ((((((x)->u.fld[i]).rtvec1))->elem[j])))
  return 1;
   }
      }
  }
  return 0;
}
int
volatile_refs_p (rtx x)
{
  enum rtx_code code;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case LABEL_REF:
    case SYMBOL_REF:
    case CONST_INT:
    case CONST:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CC0:
    case PC:
    case REG:
    case SCRATCH:
    case CLOBBER:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      return 0;
    case UNSPEC_VOLATILE:
      return 1;
    case MEM:
    case ASM_INPUT:
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 1;
    default:
      break;
    }
  {
    const char *fmt = (rtx_format[(int) (code)]);
    int i;
    for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
      {
 if (fmt[i] == 'e')
   {
     if (volatile_refs_p ((((x)->u.fld[i]).rtx1)))
       return 1;
   }
 else if (fmt[i] == 'E')
   {
     int j;
     for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
       if (volatile_refs_p ((((((x)->u.fld[i]).rtvec1))->elem[j])))
  return 1;
   }
      }
  }
  return 0;
}
int
side_effects_p (rtx x)
{
  enum rtx_code code;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case LABEL_REF:
    case SYMBOL_REF:
    case CONST_INT:
    case CONST:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CC0:
    case PC:
    case REG:
    case SCRATCH:
    case ADDR_VEC:
    case ADDR_DIFF_VEC:
      return 0;
    case CLOBBER:
      return (((enum machine_mode) (x)->mode) != VOIDmode);
    case PRE_INC:
    case PRE_DEC:
    case POST_INC:
    case POST_DEC:
    case PRE_MODIFY:
    case POST_MODIFY:
    case CALL:
    case UNSPEC_VOLATILE:
      return 1;
    case MEM:
    case ASM_INPUT:
    case ASM_OPERANDS:
      if ((((x))->volatil))
 return 1;
    default:
      break;
    }
  {
    const char *fmt = (rtx_format[(int) (code)]);
    int i;
    for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
      {
 if (fmt[i] == 'e')
   {
     if (side_effects_p ((((x)->u.fld[i]).rtx1)))
       return 1;
   }
 else if (fmt[i] == 'E')
   {
     int j;
     for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
       if (side_effects_p ((((((x)->u.fld[i]).rtvec1))->elem[j])))
  return 1;
   }
      }
  }
  return 0;
}
int
may_trap_p (rtx x)
{
  int i;
  enum rtx_code code;
  const char *fmt;
  if (x == 0)
    return 0;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case LABEL_REF:
    case CONST:
    case PC:
    case CC0:
    case REG:
    case SCRATCH:
      return 0;
    case ASM_INPUT:
    case UNSPEC_VOLATILE:
    case TRAP_IF:
      return 1;
    case ASM_OPERANDS:
      return (((x))->volatil);
    case MEM:
      if ((((x))->call))
 return 0;
      return rtx_addr_can_trap_p ((((x)->u.fld[0]).rtx1));
    case DIV:
    case MOD:
    case UDIV:
    case UMOD:
      if ((flag_signaling_nans && (((mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)))
 return 1;
      if (! ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_VECTOR)
   || (mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT
       && flag_trapping_math))
 return 1;
      if ((((x)->u.fld[1]).rtx1) == (const_int_rtx[64]))
 return 1;
      break;
    case EXPR_LIST:
      return 1;
    case GE:
    case GT:
    case LE:
    case LT:
    case LTGT:
    case COMPARE:
      if (!flag_trapping_math)
 break;
      if ((((mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
 return 1;
      if ((((mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
   || (((mode_class[((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
 return 1;
      break;
    case EQ:
    case NE:
      if ((flag_signaling_nans && (((mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)))
 return 1;
      if ((flag_signaling_nans && (((mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
   || (flag_signaling_nans && (((mode_class[((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)))
 return 1;
      break;
    case FIX:
      if (flag_trapping_math && (((mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
 return 1;
      break;
    case NEG:
    case ABS:
      break;
    default:
      if (mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT
   && flag_trapping_math)
 return 1;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   if (may_trap_p ((((x)->u.fld[i]).rtx1)))
     return 1;
 }
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     if (may_trap_p ((((((x)->u.fld[i]).rtvec1))->elem[j])))
       return 1;
 }
    }
  return 0;
}
int
inequality_comparisons_p (rtx x)
{
  const char *fmt;
  int len, i;
  enum rtx_code code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
    case SCRATCH:
    case PC:
    case CC0:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CONST:
    case LABEL_REF:
    case SYMBOL_REF:
      return 0;
    case LT:
    case LTU:
    case GT:
    case GTU:
    case LE:
    case LEU:
    case GE:
    case GEU:
      return 1;
    default:
      break;
    }
  len = (rtx_length[(int) (code)]);
  fmt = (rtx_format[(int) (code)]);
  for (i = 0; i < len; i++)
    {
      if (fmt[i] == 'e')
 {
   if (inequality_comparisons_p ((((x)->u.fld[i]).rtx1)))
     return 1;
 }
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     if (inequality_comparisons_p ((((((x)->u.fld[i]).rtvec1))->elem[j])))
       return 1;
 }
    }
  return 0;
}
rtx
replace_rtx (rtx x, rtx from, rtx to)
{
  int i, j;
  const char *fmt;
  if (x != 0 && ((enum rtx_code) (x)->code) == CONST_DOUBLE)
    return x;
  if (x == from)
    return to;
  if (x == 0)
    return 0;
  if (((enum rtx_code) (x)->code) == SUBREG)
    {
      rtx new = replace_rtx ((((x)->u.fld[0]).rtx1), from, to);
      if (((enum rtx_code) (new)->code) == CONST_INT)
 {
   x = simplify_subreg (((enum machine_mode) (x)->mode), new,
          ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
          (((x)->u.fld[1]).rtuint));
   if (! x)
     abort ();
 }
      else
 (((x)->u.fld[0]).rtx1) = new;
      return x;
    }
  else if (((enum rtx_code) (x)->code) == ZERO_EXTEND)
    {
      rtx new = replace_rtx ((((x)->u.fld[0]).rtx1), from, to);
      if (((enum rtx_code) (new)->code) == CONST_INT)
 {
   x = simplify_unary_operation (ZERO_EXTEND, ((enum machine_mode) (x)->mode),
     new, ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode));
   if (! x)
     abort ();
 }
      else
 (((x)->u.fld[0]).rtx1) = new;
      return x;
    }
  fmt = (rtx_format[(int) (((enum rtx_code) (x)->code))]);
  for (i = (rtx_length[(int) (((enum rtx_code) (x)->code))]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 (((x)->u.fld[i]).rtx1) = replace_rtx ((((x)->u.fld[i]).rtx1), from, to);
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   (((((x)->u.fld[i]).rtvec1))->elem[j]) = replace_rtx ((((((x)->u.fld[i]).rtvec1))->elem[j]), from, to);
    }
  return x;
}
rtx
replace_regs (rtx x, rtx *reg_map, unsigned int nregs, int replace_dest)
{
  enum rtx_code code;
  int i;
  const char *fmt;
  if (x == 0)
    return x;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case SCRATCH:
    case PC:
    case CC0:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case CONST:
    case SYMBOL_REF:
    case LABEL_REF:
      return x;
    case REG:
      if ((((x)->u.fld[0]).rtuint) < nregs && reg_map[(((x)->u.fld[0]).rtuint)] != 0)
 {
   if (((enum rtx_code) (reg_map[(((x)->u.fld[0]).rtuint)])->code) == SUBREG)
     return copy_rtx (reg_map[(((x)->u.fld[0]).rtuint)]);
   return reg_map[(((x)->u.fld[0]).rtuint)];
 }
      return x;
    case SUBREG:
      if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG) && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < nregs
   && reg_map[((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)] != 0
   && ((enum rtx_code) (reg_map[((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])->code) == SUBREG)
 {
   rtx map_val = reg_map[((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint)];
   return simplify_gen_subreg (((enum machine_mode) (x)->mode), map_val,
          ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
          (((x)->u.fld[1]).rtuint));
 }
      break;
    case SET:
      if (replace_dest)
 (((x)->u.fld[0]).rtx1) = replace_regs ((((x)->u.fld[0]).rtx1), reg_map, nregs, 0);
      else if ((((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MEM)
        || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == STRICT_LOW_PART)
 ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1) = replace_regs (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1),
            reg_map, nregs, 0);
      else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ZERO_EXTRACT)
 break;
      (((x)->u.fld[1]).rtx1) = replace_regs ((((x)->u.fld[1]).rtx1), reg_map, nregs, 0);
      return x;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 (((x)->u.fld[i]).rtx1) = replace_regs ((((x)->u.fld[i]).rtx1), reg_map, nregs, replace_dest);
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     (((((x)->u.fld[i]).rtvec1))->elem[j]) = replace_regs ((((((x)->u.fld[i]).rtvec1))->elem[j]), reg_map,
           nregs, replace_dest);
 }
    }
  return x;
}
int
replace_label (rtx *x, void *data)
{
  rtx l = *x;
  rtx old_label = ((replace_label_data *) data)->r1;
  rtx new_label = ((replace_label_data *) data)->r2;
  unsigned char update_label_nuses = ((replace_label_data *) data)->update_label_nuses;
  if (l == (rtx) 0)
    return 0;
  if (((enum rtx_code) (l)->code) == SYMBOL_REF
      && (((l))->unchanging))
    {
      rtx c = get_pool_constant (l);
      if (rtx_referenced_p (old_label, c))
 {
   rtx new_c, new_l;
   replace_label_data *d = (replace_label_data *) data;
   new_c = copy_rtx (c);
   d->update_label_nuses = 0;
   for_each_rtx (&new_c, replace_label, data);
   d->update_label_nuses = update_label_nuses;
   new_l = (((force_const_mem (get_pool_mode (l), new_c))->u.fld[0]).rtx1);
   *x = replace_rtx (l, l, new_l);
 }
      return 0;
    }
  if (((enum rtx_code) (l)->code) == JUMP_INSN && (((l)->u.fld[9]).rtx1) == old_label)
    (((l)->u.fld[9]).rtx1) = new_label;
  if ((((enum rtx_code) (l)->code) == LABEL_REF
       || ((enum rtx_code) (l)->code) == INSN_LIST)
      && (((l)->u.fld[0]).rtx1) == old_label)
    {
      (((l)->u.fld[0]).rtx1) = new_label;
      if (update_label_nuses)
 {
   ++(((new_label)->u.fld[4]).rtint);
   --(((old_label)->u.fld[4]).rtint);
 }
      return 0;
    }
  return 0;
}
static int
rtx_referenced_p_1 (rtx *body, void *x)
{
  rtx y = (rtx) x;
  if (*body == (rtx) 0)
    return y == (rtx) 0;
  if (((enum rtx_code) (*body)->code) == LABEL_REF && ((enum rtx_code) (y)->code) == CODE_LABEL)
    return (((*body)->u.fld[0]).rtx1) == y;
  if (((enum rtx_code) (*body)->code) == SYMBOL_REF
      && (((*body))->unchanging))
    return rtx_referenced_p (y, get_pool_constant (*body));
  return rtx_equal_p (*body, y);
}
int
rtx_referenced_p (rtx x, rtx body)
{
  return for_each_rtx (&body, rtx_referenced_p_1, x);
}
unsigned char
tablejump_p (rtx insn, rtx *labelp, rtx *tablep)
{
  rtx label, table;
  if (((enum rtx_code) (insn)->code) == JUMP_INSN
      && (label = (((insn)->u.fld[9]).rtx1)) != (rtx) 0
      && (table = next_active_insn (label)) != (rtx) 0
      && ((enum rtx_code) (table)->code) == JUMP_INSN
      && (((enum rtx_code) ((((table)->u.fld[5]).rtx1))->code) == ADDR_VEC
   || ((enum rtx_code) ((((table)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC))
    {
      if (labelp)
 *labelp = label;
      if (tablep)
 *tablep = table;
      return 1;
    }
  return 0;
}
static int
computed_jump_p_1 (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  int i, j;
  const char *fmt;
  switch (code)
    {
    case LABEL_REF:
    case PC:
      return 0;
    case CONST:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case REG:
      return 1;
    case MEM:
      return ! (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == SYMBOL_REF
  && ((((((x)->u.fld[0]).rtx1)))->unchanging));
    case IF_THEN_ELSE:
      return (computed_jump_p_1 ((((x)->u.fld[1]).rtx1))
       || computed_jump_p_1 ((((x)->u.fld[2]).rtx1)));
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e'
   && computed_jump_p_1 ((((x)->u.fld[i]).rtx1)))
 return 1;
      else if (fmt[i] == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   if (computed_jump_p_1 ((((((x)->u.fld[i]).rtvec1))->elem[j])))
     return 1;
    }
  return 0;
}
int
computed_jump_p (rtx insn)
{
  int i;
  if (((enum rtx_code) (insn)->code) == JUMP_INSN)
    {
      rtx pat = (((insn)->u.fld[5]).rtx1);
      if (find_reg_note (insn, REG_LABEL, (rtx) 0))
 return 0;
      else if (((enum rtx_code) (pat)->code) == PARALLEL)
 {
   int len = (((((pat)->u.fld[0]).rtvec1))->num_elem);
   int has_use_labelref = 0;
   for (i = len - 1; i >= 0; i--)
     if (((enum rtx_code) ((((((pat)->u.fld[0]).rtvec1))->elem[i]))->code) == USE
  && (((enum rtx_code) (((((((((pat)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1))->code)
      == LABEL_REF))
       has_use_labelref = 1;
   if (! has_use_labelref)
     for (i = len - 1; i >= 0; i--)
       if (((enum rtx_code) ((((((pat)->u.fld[0]).rtvec1))->elem[i]))->code) == SET
    && ((((((((pat)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1) == (global_rtl[GR_PC])
    && computed_jump_p_1 (((((((((pat)->u.fld[0]).rtvec1))->elem[i]))->u.fld[1]).rtx1)))
  return 1;
 }
      else if (((enum rtx_code) (pat)->code) == SET
        && (((pat)->u.fld[0]).rtx1) == (global_rtl[GR_PC])
        && computed_jump_p_1 ((((pat)->u.fld[1]).rtx1)))
 return 1;
    }
  return 0;
}
int
for_each_rtx (rtx *x, rtx_function f, void *data)
{
  int result;
  int length;
  const char *format;
  int i;
  result = (*f) (x, data);
  if (result == -1)
    return 0;
  else if (result != 0)
    return result;
  if (*x == (rtx) 0)
    return 0;
  length = (rtx_length[(int) (((enum rtx_code) (*x)->code))]);
  format = (rtx_format[(int) (((enum rtx_code) (*x)->code))]);
  for (i = 0; i < length; ++i)
    {
      switch (format[i])
 {
 case 'e':
   result = for_each_rtx (&(((*x)->u.fld[i]).rtx1), f, data);
   if (result != 0)
     return result;
   break;
 case 'V':
 case 'E':
   if ((((*x)->u.fld[i]).rtvec1) != 0)
     {
       int j;
       for (j = 0; j < (((((*x)->u.fld[i]).rtvec1))->num_elem); ++j)
  {
    result = for_each_rtx (&(((((*x)->u.fld[i]).rtvec1))->elem[j]), f, data);
    if (result != 0)
      return result;
  }
     }
   break;
 default:
   break;
 }
    }
  return 0;
}
rtx
regno_use_in (unsigned int regno, rtx x)
{
  const char *fmt;
  int i, j;
  rtx tem;
  if ((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) == regno)
    return x;
  fmt = (rtx_format[(int) (((enum rtx_code) (x)->code))]);
  for (i = (rtx_length[(int) (((enum rtx_code) (x)->code))]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 {
   if ((tem = regno_use_in (regno, (((x)->u.fld[i]).rtx1))))
     return tem;
 }
      else if (fmt[i] == 'E')
 for (j = (((((x)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   if ((tem = regno_use_in (regno , (((((x)->u.fld[i]).rtvec1))->elem[j]))))
     return tem;
    }
  return (rtx) 0;
}
int
commutative_operand_precedence (rtx op)
{
  enum rtx_code code = ((enum rtx_code) (op)->code);
  if (code == CONST_INT)
    return -7;
  if (code == CONST_DOUBLE)
    return -6;
  op = avoid_constant_pool_reference (op);
  switch ((rtx_class[(int) (code)]))
    {
    case RTX_CONST_OBJ:
      if (code == CONST_INT)
        return -5;
      if (code == CONST_DOUBLE)
        return -4;
      return -3;
    case RTX_EXTRA:
      if (code == SUBREG && (((rtx_class[(int) (((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code))]) & (~1)) == (RTX_OBJ & (~1))))
        return -2;
      if (!((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR))
        return 0;
      else
 return -3;
    case RTX_OBJ:
      return -1;
    case RTX_COMM_ARITH:
      return 4;
    case RTX_BIN_ARITH:
      return 2;
    case RTX_UNARY:
      if (code == NEG || code == NOT)
        return 1;
    default:
      return 0;
    }
}
int
swap_commutative_operands_p (rtx x, rtx y)
{
  return (commutative_operand_precedence (x)
   < commutative_operand_precedence (y));
}
int
auto_inc_p (rtx x)
{
  switch (((enum rtx_code) (x)->code))
    {
    case PRE_INC:
    case POST_INC:
    case PRE_DEC:
    case POST_DEC:
    case PRE_MODIFY:
    case POST_MODIFY:
      if ((((x)->u.fld[0]).rtx1) != (global_rtl[GR_STACK_POINTER]))
 return 1;
    default:
      break;
    }
  return 0;
}
int
insns_safe_to_move_p (rtx from, rtx to, rtx *new_to)
{
  int eh_region_count = 0;
  int past_to_p = 0;
  rtx r = from;
  if (new_to)
    *new_to = to;
  while (r)
    {
      if (((enum rtx_code) (r)->code) == NOTE)
 {
   switch ((((r)->u.fld[5]).rtint))
     {
     case NOTE_INSN_EH_REGION_BEG:
       ++eh_region_count;
       break;
     case NOTE_INSN_EH_REGION_END:
       if (eh_region_count == 0)
  return 0;
       --eh_region_count;
       break;
     default:
       break;
     }
 }
      else if (past_to_p)
 return 0;
      if (r == to)
 {
   if (!new_to)
     return eh_region_count == 0;
   past_to_p = 1;
 }
      if (past_to_p && eh_region_count == 0)
 {
   *new_to = r;
   return 1;
 }
      r = (((r)->u.fld[2]).rtx1);
    }
  return 0;
}
int
loc_mentioned_in_p (rtx *loc, rtx in)
{
  enum rtx_code code = ((enum rtx_code) (in)->code);
  const char *fmt = (rtx_format[(int) (code)]);
  int i, j;
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (loc == &in->u.fld[i].rtx1)
 return 1;
      if (fmt[i] == 'e')
 {
   if (loc_mentioned_in_p (loc, (((in)->u.fld[i]).rtx1)))
     return 1;
 }
      else if (fmt[i] == 'E')
 for (j = (((((in)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
   if (loc_mentioned_in_p (loc, (((((in)->u.fld[i]).rtvec1))->elem[j])))
     return 1;
    }
  return 0;
}
unsigned int
subreg_lsb_1 (enum machine_mode outer_mode,
       enum machine_mode inner_mode,
       unsigned int subreg_byte)
{
  unsigned int bitpos;
  unsigned int byte;
  unsigned int word;
  if (((unsigned short) (((unsigned short) mode_size[outer_mode]) * 8)) > ((unsigned short) (((unsigned short) mode_size[inner_mode]) * 8)))
    return 0;
  if (0 != 0)
    if ((subreg_byte % (0 ? 8 : 4)
  + ((unsigned short) mode_size[outer_mode])) > (0 ? 8 : 4)
 && (subreg_byte % (0 ? 8 : 4)
     || ((unsigned short) mode_size[outer_mode]) % (0 ? 8 : 4)))
 abort ();
  if (0)
    word = (((unsigned short) mode_size[inner_mode])
     - (subreg_byte + ((unsigned short) mode_size[outer_mode]))) / (0 ? 8 : 4);
  else
    word = subreg_byte / (0 ? 8 : 4);
  bitpos = word * (8 * (0 ? 8 : 4));
  if (0)
    byte = (((unsigned short) mode_size[inner_mode])
     - (subreg_byte + ((unsigned short) mode_size[outer_mode]))) % (0 ? 8 : 4);
  else
    byte = subreg_byte % (0 ? 8 : 4);
  bitpos += byte * 8;
  return bitpos;
}
unsigned int
subreg_lsb (rtx x)
{
  return subreg_lsb_1 (((enum machine_mode) (x)->mode), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
         (((x)->u.fld[1]).rtuint));
}
unsigned int
subreg_regno_offset (unsigned int xregno, enum machine_mode xmode,
       unsigned int offset, enum machine_mode ymode)
{
  int nregs_xmode, nregs_ymode;
  int mode_multiple, nregs_multiple;
  int y_offset;
  if (xregno >= 53)
    abort ();
  nregs_xmode = hard_regno_nregs[xregno][xmode];
  nregs_ymode = hard_regno_nregs[xregno][ymode];
  if (offset == 0
      && nregs_ymode > nregs_xmode
      && (((unsigned short) mode_size[ymode]) > (0 ? 8 : 4)
   ? 0 : 0))
    return nregs_xmode - nregs_ymode;
  if (offset == 0 || nregs_xmode == nregs_ymode)
    return 0;
  mode_multiple = ((unsigned short) mode_size[xmode]) / ((unsigned short) mode_size[ymode]);
  if (mode_multiple == 0)
    abort ();
  y_offset = offset / ((unsigned short) mode_size[ymode]);
  nregs_multiple = nregs_xmode / nregs_ymode;
  return (y_offset / (mode_multiple / nregs_multiple)) * nregs_ymode;
}
unsigned char
subreg_offset_representable_p (unsigned int xregno, enum machine_mode xmode,
          unsigned int offset, enum machine_mode ymode)
{
  int nregs_xmode, nregs_ymode;
  int mode_multiple, nregs_multiple;
  int y_offset;
  if (xregno >= 53)
    abort ();
  nregs_xmode = hard_regno_nregs[xregno][xmode];
  nregs_ymode = hard_regno_nregs[xregno][ymode];
  if (offset == 0
      && nregs_ymode > nregs_xmode
      && (((unsigned short) mode_size[ymode]) > (0 ? 8 : 4)
   ? 0 : 0))
    return 1;
  if (offset == subreg_lowpart_offset (ymode, xmode))
    return 1;
  offset -= subreg_lowpart_offset (ymode,
       mode_for_size (((unsigned short) (((unsigned short) mode_size[xmode]) * 8))
        / nregs_xmode,
        MODE_INT, 0));
  mode_multiple = ((unsigned short) mode_size[xmode]) / ((unsigned short) mode_size[ymode]);
  if (mode_multiple == 0)
    abort ();
  y_offset = offset / ((unsigned short) mode_size[ymode]);
  nregs_multiple = nregs_xmode / nregs_ymode;
  return (!(y_offset % (mode_multiple / nregs_multiple)));
}
unsigned int
subreg_regno (rtx x)
{
  unsigned int ret;
  rtx subreg = (((x)->u.fld[0]).rtx1);
  int regno = (((subreg)->u.fld[0]).rtuint);
  ret = regno + subreg_regno_offset (regno,
         ((enum machine_mode) (subreg)->mode),
         (((x)->u.fld[1]).rtuint),
         ((enum machine_mode) (x)->mode));
  return ret;
}
struct parms_set_data
{
  int nregs;
  HARD_REG_SET regs;
};
static void
parms_set (rtx x, rtx pat , void *data)
{
  struct parms_set_data *d = data;
  if ((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) < 53
      && (!!((d->regs)[((((x)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << (((((x)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4)))))))
    {
      ((d->regs)[((((x)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << (((((x)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4)))));
      d->nregs--;
    }
}
rtx
find_first_parameter_load (rtx call_insn, rtx boundary)
{
  struct parms_set_data parm;
  rtx p, before;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (parm.regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  parm.nregs = 0;
  for (p = (((call_insn)->u.fld[9]).rtx1); p; p = (((p)->u.fld[1]).rtx1))
    if (((enum rtx_code) ((((p)->u.fld[0]).rtx1))->code) == USE
 && (((enum rtx_code) (((((((p)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == REG))
      {
 if ((((((((((p)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
   abort ();
 if (!ix86_function_arg_regno_p ((((((((((p)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint)))
   continue;
 ((parm.regs)[((((((((((p)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((((((((p)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))));
 parm.nregs++;
      }
  before = call_insn;
  while (parm.nregs && before != boundary)
    {
      before = (((before)->u.fld[1]).rtx1);
      if (((enum rtx_code) (before)->code) == CALL_INSN)
 break;
      if (((enum rtx_code) (before)->code) == CODE_LABEL)
 {
   if (before != boundary)
     abort ();
   break;
 }
      if (((((enum rtx_code) (before)->code) == INSN) || (((enum rtx_code) (before)->code) == JUMP_INSN) || (((enum rtx_code) (before)->code) == CALL_INSN)))
 note_stores ((((before)->u.fld[5]).rtx1), parms_set, &parm);
    }
  return before;
}
unsigned char
keep_with_call_p (rtx insn)
{
  rtx set;
  if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && (set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != ((void *)0))
    {
      if ((((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
   && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) < 53
   && fixed_regs[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)]
   && general_operand ((((set)->u.fld[1]).rtx1), VOIDmode))
 return 1;
      if ((((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) == REG)
   && ix86_function_value_regno_p (((((((set)->u.fld[1]).rtx1))->u.fld[0]).rtuint))
   && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
   && ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= 53)
 return 1;
      if ((((set)->u.fld[0]).rtx1) == (global_rtl[GR_STACK_POINTER]))
 {
   rtx i2 = next_nonnote_insn (insn);
   if (i2 && keep_with_call_p (i2))
     return 1;
 }
    }
  return 0;
}
static unsigned char
hoist_test_store (rtx x, rtx val, regset live)
{
  if (((enum rtx_code) (x)->code) == SCRATCH)
    return 1;
  if (rtx_equal_p (x, val))
    return 1;
  if (((enum rtx_code) (x)->code) == SUBREG && rtx_equal_p ((((x)->u.fld[0]).rtx1), val))
    {
      if (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) > (0 ? 8 : 4)
   && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) <
   ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8)))
 return 0;
      return 1;
    }
  if (((enum rtx_code) (x)->code) == SUBREG)
    x = (((x)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (x)->code) == REG))
    return 0;
  if ((((x)->u.fld[0]).rtuint) < 53)
    {
      int regno = (((x)->u.fld[0]).rtuint);
      int n = hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
      if (!live)
 return 0;
      if (bitmap_bit_p (live, regno))
 return 0;
      while (--n > 0)
 if (bitmap_bit_p (live, regno + n))
   return 0;
    }
  return 1;
}
unsigned char
can_hoist_insn_p (rtx insn, rtx val, regset live)
{
  rtx pat = (((insn)->u.fld[5]).rtx1);
  int i;
  if (!(((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0))
    return 0;
  if (((enum rtx_code) (insn)->code) == CALL_INSN)
    return 0;
  if (find_reg_note (insn, REG_RETVAL, (rtx) 0))
    return 0;
  switch (((enum rtx_code) (pat)->code))
    {
    case SET:
      if (!hoist_test_store ((((pat)->u.fld[0]).rtx1), val, live))
 return 0;
      break;
    case USE:
      return 0;
      break;
    case CLOBBER:
      if (!hoist_test_store ((((pat)->u.fld[0]).rtx1), val, live))
 return 0;
      break;
    case PARALLEL:
      for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx x = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
   switch (((enum rtx_code) (x)->code))
     {
     case SET:
       if (!hoist_test_store ((((x)->u.fld[0]).rtx1), val, live))
  return 0;
       break;
     case USE:
       return 0;
       break;
     case CLOBBER:
       if (!hoist_test_store ((((x)->u.fld[0]).rtx1), val, live))
  return 0;
       break;
     default:
       break;
     }
 }
      break;
    default:
      abort ();
    }
  return 1;
}
static void
hoist_update_store (rtx insn, rtx *xp, rtx val, rtx new)
{
  rtx x = *xp;
  if (((enum rtx_code) (x)->code) == SCRATCH)
    return;
  if (((enum rtx_code) (x)->code) == SUBREG && (((x)->u.fld[0]).rtx1) == val)
    validate_change (insn, xp,
       simplify_gen_subreg (((enum machine_mode) (x)->mode), new, ((enum machine_mode) (new)->mode),
       (((x)->u.fld[1]).rtuint)), 1);
  if (rtx_equal_p (x, val))
    {
      validate_change (insn, xp, new, 1);
      return;
    }
  if (((enum rtx_code) (x)->code) == SUBREG)
    {
      xp = &(((x)->u.fld[0]).rtx1);
      x = *xp;
    }
  if (!(((enum rtx_code) (x)->code) == REG))
    abort ();
  if ((((x)->u.fld[0]).rtuint) >= 53)
    validate_change (insn, xp, gen_reg_rtx (((enum machine_mode) (x)->mode)), 1);
  (((insn)->u.fld[8]).rtx1)
    = alloc_EXPR_LIST (REG_UNUSED, *xp, (((insn)->u.fld[8]).rtx1));
}
rtx
hoist_insn_after (rtx insn, rtx after, rtx val, rtx new)
{
  rtx pat;
  int i;
  rtx note;
  insn = emit_copy_of_insn_after (insn, after);
  pat = (((insn)->u.fld[5]).rtx1);
  while ((note = find_reg_note (insn, REG_UNUSED, (rtx) 0)))
    remove_note (insn, note);
  while ((note = find_reg_note (insn, REG_EQUAL, (rtx) 0)))
    remove_note (insn, note);
  while ((note = find_reg_note (insn, REG_EQUIV, (rtx) 0)))
    remove_note (insn, note);
  while ((note = find_reg_note (insn, REG_DEAD, (rtx) 0)))
    remove_note (insn, note);
  switch (((enum rtx_code) (pat)->code))
    {
    case SET:
      hoist_update_store (insn, &(((pat)->u.fld[0]).rtx1), val, new);
      break;
    case USE:
      break;
    case CLOBBER:
      hoist_update_store (insn, &(((pat)->u.fld[0]).rtx1), val, new);
      break;
    case PARALLEL:
      for (i = 0; i < (((((pat)->u.fld[0]).rtvec1))->num_elem); i++)
 {
   rtx x = (((((pat)->u.fld[0]).rtvec1))->elem[i]);
   switch (((enum rtx_code) (x)->code))
     {
     case SET:
       hoist_update_store (insn, &(((x)->u.fld[0]).rtx1), val, new);
       break;
     case USE:
       break;
     case CLOBBER:
       hoist_update_store (insn, &(((x)->u.fld[0]).rtx1), val, new);
       break;
     default:
       break;
     }
 }
      break;
    default:
      abort ();
    }
  if (!apply_change_group ())
    abort ();
  return insn;
}
rtx
hoist_insn_to_edge (rtx insn, edge e, rtx val, rtx new)
{
  rtx new_insn;
  if ((e->flags & 2) && ((e)->src->succ->succ_next && (e)->dest->pred->pred_next))
    abort ();
  if (e->insns.r == (rtx) 0)
    {
      start_sequence ();
      emit_note (NOTE_INSN_DELETED);
    }
  else
    push_to_sequence (e->insns.r);
  new_insn = hoist_insn_after (insn, get_last_insn (), val, new);
  e->insns.r = get_insns ();
  end_sequence ();
  return new_insn;
}
unsigned char
label_is_jump_target_p (rtx label, rtx jump_insn)
{
  rtx tmp = (((jump_insn)->u.fld[9]).rtx1);
  if (label == tmp)
    return 1;
  if (tablejump_p (jump_insn, ((void *)0), &tmp))
    {
      rtvec vec = ((((((tmp)->u.fld[5]).rtx1))->u.fld[((enum rtx_code) ((((tmp)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC]).rtvec1)
                                             ;
      int i, veclen = ((vec)->num_elem);
      for (i = 0; i < veclen; ++i)
 if ((((((vec)->elem[i]))->u.fld[0]).rtx1) == label)
   return 1;
    }
  return 0;
}
int
rtx_cost (rtx x, enum rtx_code outer_code )
{
  int i, j;
  enum rtx_code code;
  const char *fmt;
  int total;
  if (x == 0)
    return 0;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case MULT:
      total = ((5) * 4);
      break;
    case DIV:
    case UDIV:
    case MOD:
    case UMOD:
      total = ((7) * 4);
      break;
    case USE:
      total = 0;
      break;
    default:
      total = ((1) * 4);
    }
  switch (code)
    {
    case REG:
      return 0;
    case SUBREG:
      if (! ((((enum machine_mode) (x)->mode)) == (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)) || (((((enum machine_mode) (x)->mode)) == HImode || (((enum machine_mode) (x)->mode)) == SImode || ((((enum machine_mode) (x)->mode)) == QImode && (0 || !(x86_partial_reg_stall & (1 << ix86_tune)))) || ((((enum machine_mode) (x)->mode)) == DImode && 0)) && ((((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)) == HImode || (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)) == SImode || ((((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)) == QImode && (0 || !(x86_partial_reg_stall & (1 << ix86_tune)))) || ((((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)) == DImode && 0)))))
 return ((2 + ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) / (0 ? 8 : 4)) * 4)
                                                         ;
      break;
    default:
      if (targetm.rtx1_costs (x, code, outer_code, &total))
 return total;
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    if (fmt[i] == 'e')
      total += rtx_cost ((((x)->u.fld[i]).rtx1), code);
    else if (fmt[i] == 'E')
      for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
 total += rtx_cost ((((((x)->u.fld[i]).rtvec1))->elem[j]), code);
  return total;
}
int
address_cost (rtx x, enum machine_mode mode)
{
  if (!memory_address_p (mode, x))
    return 1000;
  return targetm.address_cost (x);
}
int
default_address_cost (rtx x)
{
  return rtx_cost (x, MEM);
}
unsigned long
nonzero_bits (rtx x, enum machine_mode mode)
{
  return cached_nonzero_bits (x, mode, (rtx) 0, VOIDmode, 0);
}
unsigned int
num_sign_bit_copies (rtx x, enum machine_mode mode)
{
  return cached_num_sign_bit_copies (x, mode, (rtx) 0, VOIDmode, 0);
}
static unsigned long
cached_nonzero_bits (rtx x, enum machine_mode mode, rtx known_x,
       enum machine_mode known_mode,
       unsigned long known_ret)
{
  if (x == known_x && mode == known_mode)
    return known_ret;
  if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1))))
    {
      rtx x0 = (((x)->u.fld[0]).rtx1);
      rtx x1 = (((x)->u.fld[1]).rtx1);
      if (x0 == x1)
 return nonzero_bits1 (x, mode, x0, mode,
         cached_nonzero_bits (x0, mode, known_x,
         known_mode, known_ret));
      if ((((rtx_class[(int) (((enum rtx_code) (x0)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1)))
   && (x1 == (((x0)->u.fld[0]).rtx1) || x1 == (((x0)->u.fld[1]).rtx1)))
 return nonzero_bits1 (x, mode, x1, mode,
         cached_nonzero_bits (x1, mode, known_x,
         known_mode, known_ret));
      if ((((rtx_class[(int) (((enum rtx_code) (x1)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1)))
   && (x0 == (((x1)->u.fld[0]).rtx1) || x0 == (((x1)->u.fld[1]).rtx1)))
 return nonzero_bits1 (x, mode, x0, mode,
         cached_nonzero_bits (x0, mode, known_x,
         known_mode, known_ret));
    }
  return nonzero_bits1 (x, mode, known_x, known_mode, known_ret);
}
static unsigned long
nonzero_bits1 (rtx x, enum machine_mode mode, rtx known_x,
        enum machine_mode known_mode,
        unsigned long known_ret)
{
  unsigned long nonzero = mode_mask_array[mode];
  unsigned long inner_nz;
  enum rtx_code code;
  unsigned int mode_width = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  if ((mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_VECTOR_FLOAT) || (mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
    return nonzero;
  if (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) > mode_width)
    {
      mode = ((enum machine_mode) (x)->mode);
      nonzero = mode_mask_array[mode];
      mode_width = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
    }
  if (mode_width > (8 * 4))
    return nonzero;
  if (((enum machine_mode) (x)->mode) != VOIDmode && ((enum machine_mode) (x)->mode) != mode
      && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) <= (8 * (0 ? 8 : 4))
      && ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) <= (8 * 4)
      && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) > ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)))
    {
      nonzero &= cached_nonzero_bits (x, ((enum machine_mode) (x)->mode),
          known_x, known_mode, known_ret);
      nonzero |= mode_mask_array[mode] & ~mode_mask_array[((enum machine_mode) (x)->mode)];
      return nonzero;
    }
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case REG:
      if ((x == (global_rtl[GR_STACK_POINTER])
    || x == (global_rtl[GR_FRAME_POINTER])
    || x == (global_rtl[GR_ARG_POINTER]))
   && (cfun->emit->regno_pointer_align[(((x)->u.fld[0]).rtuint)]))
 {
   unsigned long alignment
     = (cfun->emit->regno_pointer_align[(((x)->u.fld[0]).rtuint)]) / 8;
   if (x == (global_rtl[GR_STACK_POINTER]) && ((!(target_flags & 0x00000800)) && !(target_flags & 0x00001000)))
     alignment = (((unsigned long) (0 ? (((1) + 7) & (-8)) : (((1) + 1) & (-2)))) < (alignment) ? ((unsigned long) (0 ? (((1) + 7) & (-8)) : (((1) + 1) & (-2)))) : (alignment))
                  ;
   nonzero &= ~(alignment - 1);
 }
      {
 unsigned long nonzero_for_hook = nonzero;
 rtx new = rtl_hooks.reg_nonzero_bits (x, mode, known_x,
           known_mode, known_ret,
           &nonzero_for_hook);
 if (new)
   nonzero_for_hook &= cached_nonzero_bits (new, mode, known_x,
         known_mode, known_ret);
 return nonzero_for_hook;
      }
    case CONST_INT:
      return ((x)->u.hwint[0]);
    case MEM:
      break;
    case EQ: case NE:
    case UNEQ: case LTGT:
    case GT: case GTU: case UNGT:
    case LT: case LTU: case UNLT:
    case GE: case GEU: case UNGE:
    case LE: case LEU: case UNLE:
    case UNORDERED: case ORDERED:
      if (mode_class[mode] == MODE_INT
   && mode_width <= (8 * 4))
 nonzero = 1;
      break;
    case NEG:
      if (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) < mode_width)
 nonzero |= (mode_mask_array[mode] & ~mode_mask_array[((enum machine_mode) (x)->mode)]);
      break;
    case ABS:
      break;
    case TRUNCATE:
      nonzero &= (cached_nonzero_bits ((((x)->u.fld[0]).rtx1), mode,
           known_x, known_mode, known_ret)
    & mode_mask_array[mode]);
      break;
    case ZERO_EXTEND:
      nonzero &= cached_nonzero_bits ((((x)->u.fld[0]).rtx1), mode,
          known_x, known_mode, known_ret);
      if (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) != VOIDmode)
 nonzero &= mode_mask_array[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)];
      break;
    case SIGN_EXTEND:
      inner_nz = cached_nonzero_bits ((((x)->u.fld[0]).rtx1), mode,
          known_x, known_mode, known_ret);
      if (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) != VOIDmode)
 {
   inner_nz &= mode_mask_array[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)];
   if (inner_nz
       & (((long) 1
    << (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8)) - 1))))
     inner_nz |= (mode_mask_array[mode]
    & ~mode_mask_array[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]);
 }
      nonzero &= inner_nz;
      break;
    case AND:
      nonzero &= cached_nonzero_bits ((((x)->u.fld[0]).rtx1), mode,
           known_x, known_mode, known_ret)
         & cached_nonzero_bits ((((x)->u.fld[1]).rtx1), mode,
     known_x, known_mode, known_ret);
      break;
    case XOR: case IOR:
    case UMIN: case UMAX: case SMIN: case SMAX:
      {
 unsigned long nonzero0 =
   cached_nonzero_bits ((((x)->u.fld[0]).rtx1), mode,
          known_x, known_mode, known_ret);
 if ((nonzero & nonzero0) != nonzero)
   nonzero &= nonzero0
             | cached_nonzero_bits ((((x)->u.fld[1]).rtx1), mode,
         known_x, known_mode, known_ret);
      }
      break;
    case PLUS: case MINUS:
    case MULT:
    case DIV: case UDIV:
    case MOD: case UMOD:
      {
 unsigned long nz0 =
   cached_nonzero_bits ((((x)->u.fld[0]).rtx1), mode,
          known_x, known_mode, known_ret);
 unsigned long nz1 =
   cached_nonzero_bits ((((x)->u.fld[1]).rtx1), mode,
          known_x, known_mode, known_ret);
 int sign_index = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) - 1;
 int width0 = floor_log2_wide ((unsigned long) (nz0)) + 1;
 int width1 = floor_log2_wide ((unsigned long) (nz1)) + 1;
 int low0 = floor_log2_wide ((unsigned long) (nz0 & -nz0));
 int low1 = floor_log2_wide ((unsigned long) (nz1 & -nz1));
 long op0_maybe_minusp
   = (nz0 & ((long) 1 << sign_index));
 long op1_maybe_minusp
   = (nz1 & ((long) 1 << sign_index));
 unsigned int result_width = mode_width;
 int result_low = 0;
 switch (code)
   {
   case PLUS:
     result_width = ((width0) > (width1) ? (width0) : (width1)) + 1;
     result_low = ((low0) < (low1) ? (low0) : (low1));
     break;
   case MINUS:
     result_low = ((low0) < (low1) ? (low0) : (low1));
     break;
   case MULT:
     result_width = width0 + width1;
     result_low = low0 + low1;
     break;
   case DIV:
     if (width1 == 0)
       break;
     if (! op0_maybe_minusp && ! op1_maybe_minusp)
       result_width = width0;
     break;
   case UDIV:
     if (width1 == 0)
       break;
     result_width = width0;
     break;
   case MOD:
     if (width1 == 0)
       break;
     if (! op0_maybe_minusp && ! op1_maybe_minusp)
       result_width = ((width0) < (width1) ? (width0) : (width1));
     result_low = ((low0) < (low1) ? (low0) : (low1));
     break;
   case UMOD:
     if (width1 == 0)
       break;
     result_width = ((width0) < (width1) ? (width0) : (width1));
     result_low = ((low0) < (low1) ? (low0) : (low1));
     break;
   default:
     abort ();
   }
 if (result_width < mode_width)
   nonzero &= ((long) 1 << result_width) - 1;
 if (result_low > 0)
   nonzero &= ~(((long) 1 << result_low) - 1);
      }
      break;
    case ZERO_EXTRACT:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4))
 nonzero &= ((long) 1 << (((((x)->u.fld[1]).rtx1))->u.hwint[0])) - 1;
      break;
    case SUBREG:
      if ((((x))->in_struct) && ((((x))->volatil) ? -1 : (x)->unchanging) > 0)
 nonzero = mode_mask_array[((enum machine_mode) (x)->mode)]
    & cached_nonzero_bits ((((x)->u.fld[0]).rtx1), ((enum machine_mode) (x)->mode),
      known_x, known_mode, known_ret);
      if (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8)) <= (8 * (0 ? 8 : 4))
   && (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8))
       <= (8 * 4)))
 {
   nonzero &= cached_nonzero_bits ((((x)->u.fld[0]).rtx1), mode,
       known_x, known_mode, known_ret);
     {
       if (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])
    > ((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]))
  nonzero |= (mode_mask_array[((enum machine_mode) (x)->mode)]
       & ~mode_mask_array[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]);
     }
 }
      break;
    case ASHIFTRT:
    case LSHIFTRT:
    case ASHIFT:
    case ROTATE:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4))
 {
   enum machine_mode inner_mode = ((enum machine_mode) (x)->mode);
   unsigned int width = ((unsigned short) (((unsigned short) mode_size[inner_mode]) * 8));
   int count = (((((x)->u.fld[1]).rtx1))->u.hwint[0]);
   unsigned long mode_mask = mode_mask_array[inner_mode];
   unsigned long op_nonzero =
     cached_nonzero_bits ((((x)->u.fld[0]).rtx1), mode,
     known_x, known_mode, known_ret);
   unsigned long inner = op_nonzero & mode_mask;
   unsigned long outer = 0;
   if (mode_width > width)
     outer = (op_nonzero & nonzero & ~mode_mask);
   if (code == LSHIFTRT)
     inner >>= count;
   else if (code == ASHIFTRT)
     {
       inner >>= count;
       if (inner & ((long) 1 << (width - 1 - count)))
  inner |= (((long) 1 << count) - 1) << (width - count);
     }
   else if (code == ASHIFT)
     inner <<= count;
   else
     inner = ((inner << (count % width)
        | (inner >> (width - (count % width)))) & mode_mask);
   nonzero &= (outer | inner);
 }
      break;
    case FFS:
    case POPCOUNT:
      nonzero = ((long) 2 << (floor_log2_wide ((unsigned long) (mode_width)))) - 1;
      break;
    case CLZ:
      if (0)
 nonzero |= ((long) 1 << (floor_log2_wide ((unsigned long) (mode_width)))) - 1;
      else
 nonzero = -1;
      break;
    case CTZ:
      if (0)
 nonzero |= ((long) 1 << (floor_log2_wide ((unsigned long) (mode_width)))) - 1;
      else
 nonzero = -1;
      break;
    case PARITY:
      nonzero = 1;
      break;
    case IF_THEN_ELSE:
      {
 unsigned long nonzero_true =
   cached_nonzero_bits ((((x)->u.fld[1]).rtx1), mode,
          known_x, known_mode, known_ret);
 if ((nonzero & nonzero_true) != nonzero)
   nonzero &= nonzero_true
             | cached_nonzero_bits ((((x)->u.fld[2]).rtx1), mode,
         known_x, known_mode, known_ret);
      }
      break;
    default:
      break;
    }
  return nonzero;
}
static unsigned int
cached_num_sign_bit_copies (rtx x, enum machine_mode mode, rtx known_x,
       enum machine_mode known_mode,
       unsigned int known_ret)
{
  if (x == known_x && mode == known_mode)
    return known_ret;
  if ((((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1))))
    {
      rtx x0 = (((x)->u.fld[0]).rtx1);
      rtx x1 = (((x)->u.fld[1]).rtx1);
      if (x0 == x1)
 return
   num_sign_bit_copies1 (x, mode, x0, mode,
    cached_num_sign_bit_copies (x0, mode, known_x,
           known_mode,
           known_ret));
      if ((((rtx_class[(int) (((enum rtx_code) (x0)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1)))
   && (x1 == (((x0)->u.fld[0]).rtx1) || x1 == (((x0)->u.fld[1]).rtx1)))
 return
   num_sign_bit_copies1 (x, mode, x1, mode,
    cached_num_sign_bit_copies (x1, mode, known_x,
           known_mode,
           known_ret));
      if ((((rtx_class[(int) (((enum rtx_code) (x1)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1)))
   && (x0 == (((x1)->u.fld[0]).rtx1) || x0 == (((x1)->u.fld[1]).rtx1)))
 return
   num_sign_bit_copies1 (x, mode, x0, mode,
    cached_num_sign_bit_copies (x0, mode, known_x,
           known_mode,
           known_ret));
    }
  return num_sign_bit_copies1 (x, mode, known_x, known_mode, known_ret);
}
static unsigned int
num_sign_bit_copies1 (rtx x, enum machine_mode mode, rtx known_x,
        enum machine_mode known_mode,
        unsigned int known_ret)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  unsigned int bitwidth = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  int num0, num1, result;
  unsigned long nonzero;
  if (mode == VOIDmode)
    mode = ((enum machine_mode) (x)->mode);
  if (mode == VOIDmode || (mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) || (mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_VECTOR_FLOAT))
    return 1;
  if (bitwidth < ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)))
    {
      num0 = cached_num_sign_bit_copies (x, ((enum machine_mode) (x)->mode),
      known_x, known_mode, known_ret);
      return ((1) > (num0 - (int) (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) - bitwidth)) ? (1) : (num0 - (int) (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) - bitwidth)))
                                                              ;
    }
  if (((enum machine_mode) (x)->mode) != VOIDmode && bitwidth > ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)))
    {
      return 1;
    }
  switch (code)
    {
    case REG:
      {
 unsigned int copies_for_hook = 1, copies = 1;
 rtx new = rtl_hooks.reg_num_sign_bit_copies (x, mode, known_x,
           known_mode, known_ret,
           &copies_for_hook);
 if (new)
   copies = cached_num_sign_bit_copies (new, mode, known_x,
            known_mode, known_ret);
 if (copies > 1 || copies_for_hook > 1)
   return ((copies) > (copies_for_hook) ? (copies) : (copies_for_hook));
      }
      break;
    case MEM:
      break;
    case CONST_INT:
      nonzero = ((x)->u.hwint[0]) & mode_mask_array[mode];
      if (bitwidth <= (8 * 4)
   && (nonzero & ((long) 1 << (bitwidth - 1))) != 0)
 nonzero = (~nonzero) & mode_mask_array[mode];
      return (nonzero == 0 ? bitwidth : bitwidth - floor_log2_wide ((unsigned long) (nonzero)) - 1);
    case SUBREG:
      if ((((x))->in_struct) && ! ((((x))->volatil) ? -1 : (x)->unchanging))
 {
   num0 = cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), mode,
          known_x, known_mode, known_ret);
   return (((int) bitwidth - (int) ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) + 1) > (num0) ? ((int) bitwidth - (int) ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) * 8)) + 1) : (num0))
             ;
 }
      if (bitwidth <= ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8)))
 {
   num0 = cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), VOIDmode,
          known_x, known_mode, known_ret);
   return ((1) > ((num0 - (int) (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8)) - bitwidth))) ? (1) : ((num0 - (int) (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8)) - bitwidth))))
                    ;
 }
      break;
    case SIGN_EXTRACT:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
 return ((1) > ((int) bitwidth - (((((x)->u.fld[1]).rtx1))->u.hwint[0])) ? (1) : ((int) bitwidth - (((((x)->u.fld[1]).rtx1))->u.hwint[0])));
      break;
    case SIGN_EXTEND:
      return (bitwidth - ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8))
       + cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), VOIDmode,
         known_x, known_mode, known_ret));
    case TRUNCATE:
      num0 = cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), VOIDmode,
      known_x, known_mode, known_ret);
      return ((1) > ((num0 - (int) (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8)) - bitwidth))) ? (1) : ((num0 - (int) (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)]) * 8)) - bitwidth))))
                     ;
    case NOT:
      return cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), mode,
      known_x, known_mode, known_ret);
    case ROTATE: case ROTATERT:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) < (int) bitwidth)
 {
   num0 = cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), mode,
          known_x, known_mode, known_ret);
   return ((1) > (num0 - (code == ROTATE ? (((((x)->u.fld[1]).rtx1))->u.hwint[0]) : (int) bitwidth - (((((x)->u.fld[1]).rtx1))->u.hwint[0]))) ? (1) : (num0 - (code == ROTATE ? (((((x)->u.fld[1]).rtx1))->u.hwint[0]) : (int) bitwidth - (((((x)->u.fld[1]).rtx1))->u.hwint[0]))))
                                              ;
 }
      break;
    case NEG:
      num0 = cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), mode,
      known_x, known_mode, known_ret);
      if (bitwidth > (8 * 4))
 return num0 > 1 ? num0 - 1 : 1;
      nonzero = nonzero_bits ((((x)->u.fld[0]).rtx1), mode);
      if (nonzero == 1)
 return bitwidth;
      if (num0 > 1
   && (((long) 1 << (bitwidth - 1)) & nonzero))
 num0--;
      return num0;
    case IOR: case AND: case XOR:
    case SMIN: case SMAX: case UMIN: case UMAX:
      num0 = cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), mode,
      known_x, known_mode, known_ret);
      num1 = cached_num_sign_bit_copies ((((x)->u.fld[1]).rtx1), mode,
      known_x, known_mode, known_ret);
      return ((num0) < (num1) ? (num0) : (num1));
    case PLUS: case MINUS:
      if (code == PLUS && (((x)->u.fld[1]).rtx1) == (const_int_rtx[64 -1])
   && bitwidth <= (8 * 4))
 {
   nonzero = nonzero_bits ((((x)->u.fld[0]).rtx1), mode);
   if ((((long) 1 << (bitwidth - 1)) & nonzero) == 0)
     return (nonzero == 1 || nonzero == 0 ? bitwidth
      : bitwidth - floor_log2_wide ((unsigned long) (nonzero)) - 1);
 }
      num0 = cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), mode,
      known_x, known_mode, known_ret);
      num1 = cached_num_sign_bit_copies ((((x)->u.fld[1]).rtx1), mode,
      known_x, known_mode, known_ret);
      result = ((1) > (((num0) < (num1) ? (num0) : (num1)) - 1) ? (1) : (((num0) < (num1) ? (num0) : (num1)) - 1));
      return result;
    case MULT:
      num0 = cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), mode,
      known_x, known_mode, known_ret);
      num1 = cached_num_sign_bit_copies ((((x)->u.fld[1]).rtx1), mode,
      known_x, known_mode, known_ret);
      result = bitwidth - (bitwidth - num0) - (bitwidth - num1);
      if (result > 0
   && (bitwidth > (8 * 4)
       || (((nonzero_bits ((((x)->u.fld[0]).rtx1), mode)
      & ((long) 1 << (bitwidth - 1))) != 0)
    && ((nonzero_bits ((((x)->u.fld[1]).rtx1), mode)
         & ((long) 1 << (bitwidth - 1))) != 0))))
 result--;
      return ((1) > (result) ? (1) : (result));
    case UDIV:
      if (bitwidth > (8 * 4))
 return 1;
      else if ((nonzero_bits ((((x)->u.fld[0]).rtx1), mode)
  & ((long) 1 << (bitwidth - 1))) != 0)
 return 1;
      else
 return cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), mode,
        known_x, known_mode, known_ret);
    case UMOD:
      return cached_num_sign_bit_copies ((((x)->u.fld[1]).rtx1), mode,
        known_x, known_mode, known_ret);
    case DIV:
      result = cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), mode,
        known_x, known_mode, known_ret);
      if (result > 1
   && (bitwidth > (8 * 4)
       || (nonzero_bits ((((x)->u.fld[1]).rtx1), mode)
    & ((long) 1 << (bitwidth - 1))) != 0))
 result--;
      return result;
    case MOD:
      result = cached_num_sign_bit_copies ((((x)->u.fld[1]).rtx1), mode,
        known_x, known_mode, known_ret);
      if (result > 1
   && (bitwidth > (8 * 4)
       || (nonzero_bits ((((x)->u.fld[1]).rtx1), mode)
    & ((long) 1 << (bitwidth - 1))) != 0))
 result--;
      return result;
    case ASHIFTRT:
      num0 = cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), mode,
      known_x, known_mode, known_ret);
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) > 0)
 num0 = (((int) bitwidth) < (num0 + (((((x)->u.fld[1]).rtx1))->u.hwint[0])) ? ((int) bitwidth) : (num0 + (((((x)->u.fld[1]).rtx1))->u.hwint[0])));
      return num0;
    case ASHIFT:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != CONST_INT
   || (((((x)->u.fld[1]).rtx1))->u.hwint[0]) < 0
   || (((((x)->u.fld[1]).rtx1))->u.hwint[0]) >= (int) bitwidth)
 return 1;
      num0 = cached_num_sign_bit_copies ((((x)->u.fld[0]).rtx1), mode,
      known_x, known_mode, known_ret);
      return ((1) > (num0 - (((((x)->u.fld[1]).rtx1))->u.hwint[0])) ? (1) : (num0 - (((((x)->u.fld[1]).rtx1))->u.hwint[0])));
    case IF_THEN_ELSE:
      num0 = cached_num_sign_bit_copies ((((x)->u.fld[1]).rtx1), mode,
      known_x, known_mode, known_ret);
      num1 = cached_num_sign_bit_copies ((((x)->u.fld[2]).rtx1), mode,
      known_x, known_mode, known_ret);
      return ((num0) < (num1) ? (num0) : (num1));
    case EQ: case NE: case GE: case GT: case LE: case LT:
    case UNEQ: case LTGT: case UNGE: case UNGT: case UNLE: case UNLT:
    case GEU: case GTU: case LEU: case LTU:
    case UNORDERED: case ORDERED:
      nonzero = 1;
      if (bitwidth <= (8 * 4)
   && (nonzero & ((long) 1 << (bitwidth - 1))) != 0)
 nonzero = (~nonzero) & mode_mask_array[mode];
      return (nonzero == 0 ? bitwidth : bitwidth - floor_log2_wide ((unsigned long) (nonzero)) - 1);
    default:
      break;
    }
  bitwidth = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  if (bitwidth > (8 * 4))
    return 1;
  nonzero = nonzero_bits (x, mode);
  return nonzero & ((long) 1 << (bitwidth - 1))
  ? 1 : bitwidth - floor_log2_wide ((unsigned long) (nonzero)) - 1;
}
static location_t location_for_asm (rtx);
static void diagnostic_for_asm (rtx, const char *, va_list *, diagnostic_t);
static location_t
location_for_asm (rtx insn)
{
  rtx body = (((insn)->u.fld[5]).rtx1);
  rtx asmop;
  location_t loc;
  if (((enum rtx_code) (body)->code) == SET && ((enum rtx_code) ((((body)->u.fld[1]).rtx1))->code) == ASM_OPERANDS)
    asmop = (((body)->u.fld[1]).rtx1);
  else if (((enum rtx_code) (body)->code) == ASM_OPERANDS)
    asmop = body;
  else if (((enum rtx_code) (body)->code) == PARALLEL
    && ((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[0]))->code) == SET)
    asmop = ((((((((body)->u.fld[0]).rtvec1))->elem[0]))->u.fld[1]).rtx1);
  else if (((enum rtx_code) (body)->code) == PARALLEL
    && ((enum rtx_code) ((((((body)->u.fld[0]).rtvec1))->elem[0]))->code) == ASM_OPERANDS)
    asmop = (((((body)->u.fld[0]).rtvec1))->elem[0]);
  else
    asmop = ((void *)0);
  if (asmop)
    {
      loc.file = (((asmop)->u.fld[5]).rtstr);
      loc.line = (((asmop)->u.fld[6]).rtint);
    }
  else
    loc = input_location;
  return loc;
}
static void
diagnostic_for_asm (rtx insn, const char *msg, va_list *args_ptr,
      diagnostic_t kind)
{
  diagnostic_info diagnostic;
  diagnostic_set_info (&diagnostic, msg, args_ptr,
         location_for_asm (insn), kind);
  diagnostic_report_diagnostic (global_dc, &diagnostic);
}
void
error_for_asm (rtx insn, const char *msgid, ...)
{
  va_list ap;
  __builtin_va_start(ap,msgid);
  diagnostic_for_asm (insn, msgid, &ap, DK_ERROR);
  __builtin_va_end(ap);
}
void
warning_for_asm (rtx insn, const char *msgid, ...)
{
  va_list ap;
  __builtin_va_start(ap,msgid);
  diagnostic_for_asm (insn, msgid, &ap, DK_WARNING);
  __builtin_va_end(ap);
}
void
_fatal_insn (const char *msgid, rtx insn, const char *file, int line,
      const char *function)
{
  error ("%s", msgid);
  (global_dc)->diagnostic_count[(int) (DK_ERROR)]--;
  debug_rtx (insn);
  fancy_abort (file, line, function);
}
void
_fatal_insn_not_found (rtx insn, const char *file, int line,
         const char *function)
{
  if ((((insn)->u.fld[6]).rtint) < 0)
    _fatal_insn ("unrecognizable insn:", insn, file, line, function);
  else
    _fatal_insn ("insn does not satisfy its constraints:",
  insn, file, line, function);
}
sbitmap
sbitmap_alloc (unsigned int n_elms)
{
  unsigned int bytes, size, amt;
  sbitmap bmap;
  size = (((n_elms) + ((unsigned) (8 * 4)) - 1) / ((unsigned) (8 * 4)));
  bytes = size * sizeof (unsigned long);
  amt = (sizeof (struct simple_bitmap_def)
  + bytes - sizeof (unsigned long));
  bmap = xmalloc (amt);
  bmap->n_bits = n_elms;
  bmap->size = size;
  bmap->bytes = bytes;
  return bmap;
}
sbitmap
sbitmap_resize (sbitmap bmap, unsigned int n_elms, int def)
{
  unsigned int bytes, size, amt;
  unsigned int last_bit;
  size = (((n_elms) + ((unsigned) (8 * 4)) - 1) / ((unsigned) (8 * 4)));
  bytes = size * sizeof (unsigned long);
  if (bytes > bmap->bytes)
    {
      amt = (sizeof (struct simple_bitmap_def)
     + bytes - sizeof (unsigned long));
      bmap = xrealloc (bmap, amt);
    }
  if (n_elms > bmap->n_bits)
    {
      if (def)
 {
   memset (bmap->elms + bmap->size, -1, bytes - bmap->bytes);
   last_bit = bmap->n_bits % ((unsigned) (8 * 4));
   if (last_bit)
     bmap->elms[bmap->size - 1]
       |= ~((unsigned long)-1 >> (((unsigned) (8 * 4)) - last_bit));
   last_bit = n_elms % ((unsigned) (8 * 4));
   if (last_bit)
     bmap->elms[size - 1]
       &= (unsigned long)-1 >> (((unsigned) (8 * 4)) - last_bit);
 }
      else
 memset (bmap->elms + bmap->size, 0, bytes - bmap->bytes);
    }
  else if (n_elms < bmap->n_bits)
    {
      last_bit = n_elms % ((unsigned) (8 * 4));
      if (last_bit)
 bmap->elms[size - 1]
   &= (unsigned long)-1 >> (((unsigned) (8 * 4)) - last_bit);
    }
  bmap->n_bits = n_elms;
  bmap->size = size;
  bmap->bytes = bytes;
  return bmap;
}
sbitmap
sbitmap_realloc (sbitmap src, unsigned int n_elms)
{
  unsigned int bytes, size, amt;
  sbitmap bmap;
  size = (((n_elms) + ((unsigned) (8 * 4)) - 1) / ((unsigned) (8 * 4)));
  bytes = size * sizeof (unsigned long);
  amt = (sizeof (struct simple_bitmap_def)
  + bytes - sizeof (unsigned long));
  if (src->bytes >= bytes)
    {
      src->n_bits = n_elms;
      return src;
    }
  bmap = (sbitmap) xrealloc (src, amt);
  bmap->n_bits = n_elms;
  bmap->size = size;
  bmap->bytes = bytes;
  return bmap;
}
sbitmap *
sbitmap_vector_alloc (unsigned int n_vecs, unsigned int n_elms)
{
  unsigned int i, bytes, offset, elm_bytes, size, amt, vector_bytes;
  sbitmap *bitmap_vector;
  size = (((n_elms) + ((unsigned) (8 * 4)) - 1) / ((unsigned) (8 * 4)));
  bytes = size * sizeof (unsigned long);
  elm_bytes = (sizeof (struct simple_bitmap_def)
        + bytes - sizeof (unsigned long));
  vector_bytes = n_vecs * sizeof (sbitmap *);
  {
    struct { char x; unsigned long y; } align;
    int alignment = (char *) & align.y - & align.x;
    vector_bytes = (vector_bytes + alignment - 1) & ~ (alignment - 1);
  }
  amt = vector_bytes + (n_vecs * elm_bytes);
  bitmap_vector = xmalloc (amt);
  for (i = 0, offset = vector_bytes; i < n_vecs; i++, offset += elm_bytes)
    {
      sbitmap b = (sbitmap) ((char *) bitmap_vector + offset);
      bitmap_vector[i] = b;
      b->n_bits = n_elms;
      b->size = size;
      b->bytes = bytes;
    }
  return bitmap_vector;
}
void
sbitmap_copy (sbitmap dst, sbitmap src)
{
  memcpy (dst->elms, src->elms, sizeof (unsigned long) * dst->size);
}
int
sbitmap_equal (sbitmap a, sbitmap b)
{
  return !memcmp (a->elms, b->elms, sizeof (unsigned long) * a->size);
}
void
sbitmap_zero (sbitmap bmap)
{
  memset (bmap->elms, 0, bmap->bytes);
}
void
sbitmap_ones (sbitmap bmap)
{
  unsigned int last_bit;
  memset (bmap->elms, -1, bmap->bytes);
  last_bit = bmap->n_bits % ((unsigned) (8 * 4));
  if (last_bit)
    bmap->elms[bmap->size - 1]
      = (unsigned long)-1 >> (((unsigned) (8 * 4)) - last_bit);
}
void
sbitmap_vector_zero (sbitmap *bmap, unsigned int n_vecs)
{
  unsigned int i;
  for (i = 0; i < n_vecs; i++)
    sbitmap_zero (bmap[i]);
}
void
sbitmap_vector_ones (sbitmap *bmap, unsigned int n_vecs)
{
  unsigned int i;
  for (i = 0; i < n_vecs; i++)
    sbitmap_ones (bmap[i]);
}
unsigned char
sbitmap_union_of_diff_cg (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr cp = c->elms;
  unsigned long changed = 0;
  for (i = 0; i < n; i++)
    {
      unsigned long tmp = *ap++ | (*bp++ & ~*cp++);
      changed |= *dstp ^ tmp;
      *dstp++ = tmp;
    }
  return changed != 0;
}
void
sbitmap_union_of_diff (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr cp = c->elms;
  for (i = 0; i < n; i++)
    *dstp++ = *ap++ | (*bp++ & ~*cp++);
}
void
sbitmap_not (sbitmap dst, sbitmap src)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr srcp = src->elms;
  unsigned int last_bit;
  for (i = 0; i < n; i++)
    *dstp++ = ~*srcp++;
  last_bit = src->n_bits % ((unsigned) (8 * 4));
  if (last_bit)
    dst->elms[n-1] = dst->elms[n-1]
      & ((unsigned long)-1 >> (((unsigned) (8 * 4)) - last_bit));
}
void
sbitmap_difference (sbitmap dst, sbitmap a, sbitmap b)
{
  unsigned int i, dst_size = dst->size;
  unsigned int min_size = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  if (a->size < dst_size)
    abort ();
  if (b->size < min_size)
    min_size = b->size;
  for (i = 0; i < min_size; i++)
    *dstp++ = *ap++ & (~*bp++);
  if (dst != a && i != dst_size)
    for (; i < dst_size; i++)
      *dstp++ = *ap++;
}
unsigned char
sbitmap_a_and_b_cg (sbitmap dst, sbitmap a, sbitmap b)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  unsigned long changed = 0;
  for (i = 0; i < n; i++)
    {
      unsigned long tmp = *ap++ & *bp++;
      changed |= *dstp ^ tmp;
      *dstp++ = tmp;
    }
  return changed != 0;
}
void
sbitmap_a_and_b (sbitmap dst, sbitmap a, sbitmap b)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  for (i = 0; i < n; i++)
    *dstp++ = *ap++ & *bp++;
}
unsigned char
sbitmap_a_xor_b_cg (sbitmap dst, sbitmap a, sbitmap b)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  unsigned long changed = 0;
  for (i = 0; i < n; i++)
    {
      unsigned long tmp = *ap++ ^ *bp++;
      changed |= *dstp ^ tmp;
      *dstp++ = tmp;
    }
  return changed != 0;
}
void
sbitmap_a_xor_b (sbitmap dst, sbitmap a, sbitmap b)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  for (i = 0; i < n; i++)
    *dstp++ = *ap++ ^ *bp++;
}
unsigned char
sbitmap_a_or_b_cg (sbitmap dst, sbitmap a, sbitmap b)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  unsigned long changed = 0;
  for (i = 0; i < n; i++)
    {
      unsigned long tmp = *ap++ | *bp++;
      changed |= *dstp ^ tmp;
      *dstp++ = tmp;
    }
  return changed != 0;
}
void
sbitmap_a_or_b (sbitmap dst, sbitmap a, sbitmap b)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  for (i = 0; i < n; i++)
    *dstp++ = *ap++ | *bp++;
}
unsigned char
sbitmap_a_subset_b_p (sbitmap a, sbitmap b)
{
  unsigned int i, n = a->size;
  sbitmap_ptr ap, bp;
  for (ap = a->elms, bp = b->elms, i = 0; i < n; i++, ap++, bp++)
    if ((*ap | *bp) != *bp)
      return 0;
  return 1;
}
unsigned char
sbitmap_a_or_b_and_c_cg (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr cp = c->elms;
  unsigned long changed = 0;
  for (i = 0; i < n; i++)
    {
      unsigned long tmp = *ap++ | (*bp++ & *cp++);
      changed |= *dstp ^ tmp;
      *dstp++ = tmp;
    }
  return changed != 0;
}
void
sbitmap_a_or_b_and_c (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr cp = c->elms;
  for (i = 0; i < n; i++)
    *dstp++ = *ap++ | (*bp++ & *cp++);
}
unsigned char
sbitmap_a_and_b_or_c_cg (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr cp = c->elms;
  unsigned long changed = 0;
  for (i = 0; i < n; i++)
    {
      unsigned long tmp = *ap++ & (*bp++ | *cp++);
      changed |= *dstp ^ tmp;
      *dstp++ = tmp;
    }
  return changed != 0;
}
void
sbitmap_a_and_b_or_c (sbitmap dst, sbitmap a, sbitmap b, sbitmap c)
{
  unsigned int i, n = dst->size;
  sbitmap_ptr dstp = dst->elms;
  sbitmap_ptr ap = a->elms;
  sbitmap_ptr bp = b->elms;
  sbitmap_ptr cp = c->elms;
  for (i = 0; i < n; i++)
    *dstp++ = *ap++ & (*bp++ | *cp++);
}
void
sbitmap_intersection_of_succs (sbitmap dst, sbitmap *src, int bb)
{
  basic_block b = (((basic_block_info)->data.bb[(bb)]));
  unsigned int set_size = dst->size;
  edge e;
  for (e = b->succ; e != 0; e = e->succ_next)
    {
      if (e->dest == EXIT_BLOCK_PTR)
 continue;
      sbitmap_copy (dst, src[e->dest->index]);
      break;
    }
  if (e == 0)
    sbitmap_ones (dst);
  else
    for (e = e->succ_next; e != 0; e = e->succ_next)
      {
 unsigned int i;
 sbitmap_ptr p, r;
 if (e->dest == EXIT_BLOCK_PTR)
   continue;
 p = src[e->dest->index]->elms;
 r = dst->elms;
 for (i = 0; i < set_size; i++)
   *r++ &= *p++;
      }
}
void
sbitmap_intersection_of_preds (sbitmap dst, sbitmap *src, int bb)
{
  basic_block b = (((basic_block_info)->data.bb[(bb)]));
  unsigned int set_size = dst->size;
  edge e;
  for (e = b->pred; e != 0; e = e->pred_next)
    {
      if (e->src == ENTRY_BLOCK_PTR)
 continue;
      sbitmap_copy (dst, src[e->src->index]);
      break;
    }
  if (e == 0)
    sbitmap_ones (dst);
  else
    for (e = e->pred_next; e != 0; e = e->pred_next)
      {
 unsigned int i;
 sbitmap_ptr p, r;
 if (e->src == ENTRY_BLOCK_PTR)
   continue;
 p = src[e->src->index]->elms;
 r = dst->elms;
 for (i = 0; i < set_size; i++)
   *r++ &= *p++;
      }
}
void
sbitmap_union_of_succs (sbitmap dst, sbitmap *src, int bb)
{
  basic_block b = (((basic_block_info)->data.bb[(bb)]));
  unsigned int set_size = dst->size;
  edge e;
  for (e = b->succ; e != 0; e = e->succ_next)
    {
      if (e->dest == EXIT_BLOCK_PTR)
 continue;
      sbitmap_copy (dst, src[e->dest->index]);
      break;
    }
  if (e == 0)
    sbitmap_zero (dst);
  else
    for (e = e->succ_next; e != 0; e = e->succ_next)
      {
 unsigned int i;
 sbitmap_ptr p, r;
 if (e->dest == EXIT_BLOCK_PTR)
   continue;
 p = src[e->dest->index]->elms;
 r = dst->elms;
 for (i = 0; i < set_size; i++)
   *r++ |= *p++;
      }
}
void
sbitmap_union_of_preds (sbitmap dst, sbitmap *src, int bb)
{
  basic_block b = (((basic_block_info)->data.bb[(bb)]));
  unsigned int set_size = dst->size;
  edge e;
  for (e = b->pred; e != 0; e = e->pred_next)
    {
      if (e->src== ENTRY_BLOCK_PTR)
 continue;
      sbitmap_copy (dst, src[e->src->index]);
      break;
    }
  if (e == 0)
    sbitmap_zero (dst);
  else
    for (e = e->pred_next; e != 0; e = e->pred_next)
      {
 unsigned int i;
 sbitmap_ptr p, r;
 if (e->src == ENTRY_BLOCK_PTR)
   continue;
 p = src[e->src->index]->elms;
 r = dst->elms;
 for (i = 0; i < set_size; i++)
   *r++ |= *p++;
      }
}
int
sbitmap_first_set_bit (sbitmap bmap)
{
  unsigned int n;
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (bmap)->size; unsigned long *ptr_ = (bmap)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (n) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { return n; }; if (word_ == 0) break; } } } } while (0);
  return -1;
}
int
sbitmap_last_set_bit (sbitmap bmap)
{
  int i;
  unsigned long *ptr = bmap->elms;
  for (i = bmap->size - 1; i >= 0; i--)
    {
      unsigned long word = ptr[i];
      if (word != 0)
 {
   unsigned int index = (i + 1) * ((unsigned) (8 * 4)) - 1;
   unsigned long mask
     = (unsigned long) 1 << (((unsigned) (8 * 4)) - 1);
   while (1)
     {
       if ((word & mask) != 0)
  return index;
       mask >>= 1;
       index--;
     }
 }
    }
  return -1;
}
void
dump_sbitmap (FILE *file, sbitmap bmap)
{
  unsigned int i, n, j;
  unsigned int set_size = bmap->size;
  unsigned int total_bits = bmap->n_bits;
  fprintf (file, "  ");
  for (i = n = 0; i < set_size && n < total_bits; i++)
    for (j = 0; j < ((unsigned) (8 * 4)) && n < total_bits; j++, n++)
      {
 if (n != 0 && n % 10 == 0)
   fprintf (file, " ");
 fprintf (file, "%d",
   (bmap->elms[i] & ((unsigned long) 1 << j)) != 0);
      }
  fprintf (file, "\n");
}
void
dump_sbitmap_file (FILE *file, sbitmap bmap)
{
  unsigned int i, pos;
  fprintf (file, "n_bits = %d, set = {", bmap->n_bits);
  for (pos = 30, i = 0; i < bmap->n_bits; i++)
    if (((bmap)->elms [(i) / ((unsigned) (8 * 4))] >> (i) % ((unsigned) (8 * 4)) & 1))
      {
 if (pos > 70)
   {
     fprintf (file, "\n  ");
     pos = 0;
   }
 fprintf (file, "%d ", i);
 pos += 2 + (i >= 10) + (i >= 100) + (i >= 1000);
      }
  fprintf (file, "}\n");
}
void
debug_sbitmap (sbitmap bmap)
{
  dump_sbitmap_file (stderr, bmap);
}
void
dump_sbitmap_vector (FILE *file, const char *title, const char *subtitle,
       sbitmap *bmaps, int n_maps)
{
  int bb;
  fprintf (file, "%s\n", title);
  for (bb = 0; bb < n_maps; bb++)
    {
      fprintf (file, "%s %d\n", subtitle, bb);
      dump_sbitmap (file, bmaps[bb]);
    }
  fprintf (file, "\n");
}
static regset_head reg_pending_sets_head;
static regset_head reg_pending_clobbers_head;
static regset_head reg_pending_uses_head;
static regset reg_pending_sets;
static regset reg_pending_clobbers;
static regset reg_pending_uses;
enum reg_pending_barrier_mode
{
  NOT_A_BARRIER = 0,
  MOVE_BARRIER,
  TRUE_BARRIER
};
static enum reg_pending_barrier_mode reg_pending_barrier;
static bitmap_head *true_dependency_cache;
static bitmap_head *anti_dependency_cache;
static bitmap_head *output_dependency_cache;
int cache_size;
static int deps_may_trap_p (rtx);
static void add_dependence_list (rtx, rtx, enum reg_note);
static void add_dependence_list_and_free (rtx, rtx *, enum reg_note);
static void set_sched_group_p (rtx);
static void flush_pending_lists (struct deps *, rtx, int, int);
static void sched_analyze_1 (struct deps *, rtx, rtx);
static void sched_analyze_2 (struct deps *, rtx, rtx);
static void sched_analyze_insn (struct deps *, rtx, rtx, rtx);
static rtx get_insn_condition (rtx);
static int conditions_mutex_p (rtx, rtx);
static int
deps_may_trap_p (rtx mem)
{
  rtx addr = (((mem)->u.fld[0]).rtx1);
  if ((((enum rtx_code) (addr)->code) == REG) && (((addr)->u.fld[0]).rtuint) >= 53)
    {
      rtx t = get_reg_known_value ((((addr)->u.fld[0]).rtuint));
      if (t)
 addr = t;
    }
  return rtx_addr_can_trap_p (addr);
}
rtx
find_insn_list (rtx insn, rtx list)
{
  while (list)
    {
      if ((((list)->u.fld[0]).rtx1) == insn)
 return list;
      list = (((list)->u.fld[1]).rtx1);
    }
  return 0;
}
static rtx
get_insn_condition (rtx insn)
{
  rtx pat = (((insn)->u.fld[5]).rtx1);
  rtx cond;
  if (pat == 0)
    return 0;
  if (((enum rtx_code) (pat)->code) == COND_EXEC)
    return (((pat)->u.fld[0]).rtx1);
  if (((enum rtx_code) (insn)->code) != JUMP_INSN)
    return 0;
  if (((enum rtx_code) (pat)->code) != SET || (((pat)->u.fld[1]).rtx1) != (global_rtl[GR_PC]))
    return 0;
  if (((enum rtx_code) ((((pat)->u.fld[0]).rtx1))->code) != IF_THEN_ELSE)
    return 0;
  pat = (((pat)->u.fld[0]).rtx1);
  cond = (((pat)->u.fld[0]).rtx1);
  if (((enum rtx_code) ((((cond)->u.fld[1]).rtx1))->code) == LABEL_REF
      && (((cond)->u.fld[2]).rtx1) == (global_rtl[GR_PC]))
    return cond;
  else if (((enum rtx_code) ((((cond)->u.fld[2]).rtx1))->code) == LABEL_REF
    && (((cond)->u.fld[1]).rtx1) == (global_rtl[GR_PC]))
    return gen_rtx_fmt_ee (reverse_condition (((enum rtx_code) (cond)->code)), ((enum machine_mode) (cond)->mode),
      (((cond)->u.fld[0]).rtx1), (((cond)->u.fld[1]).rtx1));
  else
    return 0;
}
static int
conditions_mutex_p (rtx cond1, rtx cond2)
{
  if ((((rtx_class[(int) (((enum rtx_code) (cond1)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
      && (((rtx_class[(int) (((enum rtx_code) (cond2)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
      && ((enum rtx_code) (cond1)->code) == reverse_condition (((enum rtx_code) (cond2)->code))
      && (((cond1)->u.fld[0]).rtx1) == (((cond2)->u.fld[0]).rtx1)
      && (((cond1)->u.fld[1]).rtx1) == (((cond2)->u.fld[1]).rtx1))
    return 1;
  return 0;
}
int
add_dependence (rtx insn, rtx elem, enum reg_note dep_type)
{
  rtx link;
  int present_p;
  rtx cond1, cond2;
  if (insn == elem)
    return 0;
  if (((enum rtx_code) (elem)->code) == NOTE)
    return 0;
  if (((enum rtx_code) (insn)->code) != CALL_INSN && ((enum rtx_code) (elem)->code) != CALL_INSN)
    {
      cond1 = get_insn_condition (insn);
      cond2 = get_insn_condition (elem);
      if (cond1 && cond2
   && conditions_mutex_p (cond1, cond2)
   && !modified_in_p (cond1, elem)
   && !modified_in_p (cond2, insn))
 return 0;
    }
  present_p = 1;
  if (true_dependency_cache != ((void *)0))
    {
      enum reg_note present_dep_type = 0;
      if (anti_dependency_cache == ((void *)0) || output_dependency_cache == ((void *)0))
 abort ();
      if (bitmap_bit_p (&true_dependency_cache[(h_i_d[(((insn)->u.fld[0]).rtint)].luid)],
   (h_i_d[(((elem)->u.fld[0]).rtint)].luid)))
 ;
      else if (bitmap_bit_p (&anti_dependency_cache[(h_i_d[(((insn)->u.fld[0]).rtint)].luid)],
    (h_i_d[(((elem)->u.fld[0]).rtint)].luid)))
 present_dep_type = REG_DEP_ANTI;
      else if (bitmap_bit_p (&output_dependency_cache[(h_i_d[(((insn)->u.fld[0]).rtint)].luid)],
    (h_i_d[(((elem)->u.fld[0]).rtint)].luid)))
 present_dep_type = REG_DEP_OUTPUT;
      else
 present_p = 0;
      if (present_p && (int) dep_type1 >= (int) present_dep_type)
 return 0;
    }
  if (present_p)
    for (link = (((insn)->u.fld[7]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
      if ((((link)->u.fld[0]).rtx1) == elem)
 {
   if (true_dependency_cache != ((void *)0))
     {
       if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEP_ANTI)
  bitmap_clear_bit (&anti_dependency_cache[(h_i_d[(((insn)->u.fld[0]).rtint)].luid)],
      (h_i_d[(((elem)->u.fld[0]).rtint)].luid));
       else if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEP_OUTPUT
         && output_dependency_cache)
  bitmap_clear_bit (&output_dependency_cache[(h_i_d[(((insn)->u.fld[0]).rtint)].luid)],
      (h_i_d[(((elem)->u.fld[0]).rtint)].luid));
       else
  abort ();
     }
   if ((int) dep_type1 < (int) ((enum reg_note) ((enum machine_mode) (link)->mode)))
     ((link)->mode = ((enum machine_mode) (dep_type1)));
   if (true_dependency_cache != ((void *)0))
     {
       if ((int) ((enum reg_note) ((enum machine_mode) (link)->mode)) == 0)
  bitmap_set_bit (&true_dependency_cache[(h_i_d[(((insn)->u.fld[0]).rtint)].luid)],
    (h_i_d[(((elem)->u.fld[0]).rtint)].luid));
       else if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEP_ANTI)
  bitmap_set_bit (&anti_dependency_cache[(h_i_d[(((insn)->u.fld[0]).rtint)].luid)],
    (h_i_d[(((elem)->u.fld[0]).rtint)].luid));
       else if (((enum reg_note) ((enum machine_mode) (link)->mode)) == REG_DEP_OUTPUT)
  bitmap_set_bit (&output_dependency_cache[(h_i_d[(((insn)->u.fld[0]).rtint)].luid)],
    (h_i_d[(((elem)->u.fld[0]).rtint)].luid));
     }
   return 0;
 }
  link = alloc_INSN_LIST (elem, (((insn)->u.fld[7]).rtx1));
  (((insn)->u.fld[7]).rtx1) = link;
  ((link)->mode = ((enum machine_mode) (dep_type1)));
  if (true_dependency_cache != ((void *)0))
    {
      if ((int) dep_type1 == 0)
 bitmap_set_bit (&true_dependency_cache[(h_i_d[(((insn)->u.fld[0]).rtint)].luid)], (h_i_d[(((elem)->u.fld[0]).rtint)].luid));
      else if (dep_type1 == REG_DEP_ANTI)
 bitmap_set_bit (&anti_dependency_cache[(h_i_d[(((insn)->u.fld[0]).rtint)].luid)], (h_i_d[(((elem)->u.fld[0]).rtint)].luid));
      else if (dep_type1 == REG_DEP_OUTPUT)
 bitmap_set_bit (&output_dependency_cache[(h_i_d[(((insn)->u.fld[0]).rtint)].luid)], (h_i_d[(((elem)->u.fld[0]).rtint)].luid));
    }
  return 1;
}
static void
add_dependence_list (rtx insn, rtx list, enum reg_note dep_type1)
{
  for (; list; list = (((list)->u.fld[1]).rtx1))
    add_dependence (insn, (((list)->u.fld[0]).rtx1), dep_type1);
}
static void
add_dependence_list_and_free (rtx insn, rtx *listp, enum reg_note dep_type1)
{
  rtx list, next;
  for (list = *listp, *listp = ((void *)0); list ; list = next)
    {
      next = (((list)->u.fld[1]).rtx1);
      add_dependence (insn, (((list)->u.fld[0]).rtx1), dep_type1);
      free_INSN_LIST_node (list);
    }
}
static void
set_sched_group_p (rtx insn)
{
  rtx prev;
  (((insn))->in_struct) = 1;
  prev = prev_nonnote_insn (insn);
  add_dependence (insn, prev, REG_DEP_ANTI);
}
void
add_insn_mem_dependence (struct deps *deps, rtx *insn_list, rtx *mem_list,
    rtx insn, rtx mem)
{
  rtx link;
  link = alloc_INSN_LIST (insn, *insn_list);
  *insn_list = link;
  if (current_sched_info->use_cselib)
    {
      mem = shallow_copy_rtx_stat (mem );
      (((mem)->u.fld[0]).rtx1) = cselib_subst_to_values ((((mem)->u.fld[0]).rtx1));
    }
  link = alloc_EXPR_LIST (VOIDmode, canon_rtx (mem), *mem_list);
  *mem_list = link;
  deps->pending_lists_length++;
}
static void
flush_pending_lists (struct deps *deps, rtx insn, int for_read,
       int for_write)
{
  if (for_write)
    {
      add_dependence_list_and_free (insn, &deps->pending_read_insns,
        REG_DEP_ANTI);
      free_EXPR_LIST_list (&deps->pending_read_mems);
    }
  add_dependence_list_and_free (insn, &deps->pending_write_insns,
    for_read ? REG_DEP_ANTI : REG_DEP_OUTPUT);
  free_EXPR_LIST_list (&deps->pending_write_mems);
  deps->pending_lists_length = 0;
  add_dependence_list_and_free (insn, &deps->last_pending_memory_flush,
    for_read ? REG_DEP_ANTI : REG_DEP_OUTPUT);
  deps->last_pending_memory_flush = alloc_INSN_LIST (insn, (rtx) 0);
  deps->pending_flush_length = 1;
}
static void
sched_analyze_1 (struct deps *deps, rtx x, rtx insn)
{
  int regno;
  rtx dest = (((x)->u.fld[0]).rtx1);
  enum rtx_code code = ((enum rtx_code) (x)->code);
  if (dest == 0)
    return;
  if (((enum rtx_code) (dest)->code) == PARALLEL)
    {
      int i;
      for (i = (((((dest)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 if (((((((((dest)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1) != 0)
   sched_analyze_1 (deps,
      gen_rtx_fmt_e (CLOBBER, (VOIDmode), (((((((((dest)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1)))
                                        ,
      insn);
      if (((enum rtx_code) (x)->code) == SET)
 sched_analyze_2 (deps, (((x)->u.fld[1]).rtx1), insn);
      return;
    }
  while (((enum rtx_code) (dest)->code) == STRICT_LOW_PART || ((enum rtx_code) (dest)->code) == SUBREG
  || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT)
    {
      if (((enum rtx_code) (dest)->code) == STRICT_LOW_PART
  || ((enum rtx_code) (dest)->code) == ZERO_EXTRACT
  || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT
  || read_modify_subreg_p (dest))
        {
   sched_analyze_2 (deps, (((dest)->u.fld[0]).rtx1), insn);
 }
      if (((enum rtx_code) (dest)->code) == ZERO_EXTRACT || ((enum rtx_code) (dest)->code) == SIGN_EXTRACT)
 {
   sched_analyze_2 (deps, (((dest)->u.fld[1]).rtx1), insn);
   sched_analyze_2 (deps, (((dest)->u.fld[2]).rtx1), insn);
 }
      dest = (((dest)->u.fld[0]).rtx1);
    }
  if ((((enum rtx_code) (dest)->code) == REG))
    {
      regno = (((dest)->u.fld[0]).rtuint);
      if (regno < 53)
 {
   int i = hard_regno_nregs[regno][((enum machine_mode) (dest)->mode)];
   if (code == SET)
     {
       while (--i >= 0)
  bitmap_set_bit (reg_pending_sets, regno + i);
     }
   else
     {
       while (--i >= 0)
  bitmap_set_bit (reg_pending_clobbers, regno + i);
     }
 }
      else if (regno >= deps->max_reg)
 {
   if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE
       && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != CLOBBER)
     abort ();
 }
      else
 {
   if (code == SET)
     bitmap_set_bit (reg_pending_sets, regno);
   else
     bitmap_set_bit (reg_pending_clobbers, regno);
   if (!reload_completed && get_reg_known_equiv_p (regno))
     {
       rtx t = get_reg_known_value (regno);
       if ((((enum rtx_code) (t)->code) == MEM))
         sched_analyze_2 (deps, (((t)->u.fld[0]).rtx1), insn);
     }
   if ((((reg_n_info)->data.reg[regno])->calls_crossed) == 0)
     add_dependence_list (insn, deps->last_function_call, REG_DEP_ANTI);
 }
    }
  else if ((((enum rtx_code) (dest)->code) == MEM))
    {
      rtx t = dest;
      if (current_sched_info->use_cselib)
 {
   t = shallow_copy_rtx_stat (dest );
   cselib_lookup ((((t)->u.fld[0]).rtx1), (0 ? DImode : SImode), 1);
   (((t)->u.fld[0]).rtx1) = cselib_subst_to_values ((((t)->u.fld[0]).rtx1));
 }
      t = canon_rtx (t);
      if (deps->pending_lists_length > (compiler_params[(int) PARAM_MAX_PENDING_LIST_LENGTH].value1))
 {
   flush_pending_lists (deps, insn, 0, 1);
 }
      else
 {
   rtx pending, pending_mem;
   pending = deps->pending_read_insns;
   pending_mem = deps->pending_read_mems;
   while (pending)
     {
       if (anti_dependence ((((pending_mem)->u.fld[0]).rtx1), t))
  add_dependence (insn, (((pending)->u.fld[0]).rtx1), REG_DEP_ANTI);
       pending = (((pending)->u.fld[1]).rtx1);
       pending_mem = (((pending_mem)->u.fld[1]).rtx1);
     }
   pending = deps->pending_write_insns;
   pending_mem = deps->pending_write_mems;
   while (pending)
     {
       if (output_dependence ((((pending_mem)->u.fld[0]).rtx1), t))
  add_dependence (insn, (((pending)->u.fld[0]).rtx1), REG_DEP_OUTPUT);
       pending = (((pending)->u.fld[1]).rtx1);
       pending_mem = (((pending_mem)->u.fld[1]).rtx1);
     }
   add_dependence_list (insn, deps->last_pending_memory_flush,
          REG_DEP_ANTI);
   add_insn_mem_dependence (deps, &deps->pending_write_insns,
       &deps->pending_write_mems, insn, dest);
 }
      sched_analyze_2 (deps, (((dest)->u.fld[0]).rtx1), insn);
    }
  if (((enum rtx_code) (x)->code) == SET)
    sched_analyze_2 (deps, (((x)->u.fld[1]).rtx1), insn);
}
static void
sched_analyze_2 (struct deps *deps, rtx x, rtx insn)
{
  int i;
  int j;
  enum rtx_code code;
  const char *fmt;
  if (x == 0)
    return;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST_VECTOR:
    case SYMBOL_REF:
    case CONST:
    case LABEL_REF:
      return;
    case REG:
      {
 int regno = (((x)->u.fld[0]).rtuint);
 if (regno < 53)
   {
     int i = hard_regno_nregs[regno][((enum machine_mode) (x)->mode)];
     while (--i >= 0)
       bitmap_set_bit (reg_pending_uses, regno + i);
   }
 else if (regno >= deps->max_reg)
   {
     if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != USE
  && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != CLOBBER)
       abort ();
   }
 else
   {
     bitmap_set_bit (reg_pending_uses, regno);
     if (!reload_completed && get_reg_known_equiv_p (regno))
       {
  rtx t = get_reg_known_value (regno);
  if ((((enum rtx_code) (t)->code) == MEM))
    sched_analyze_2 (deps, (((t)->u.fld[0]).rtx1), insn);
       }
     if ((((reg_n_info)->data.reg[regno])->calls_crossed) == 0)
       deps->sched_before_next_call
  = alloc_INSN_LIST (insn, deps->sched_before_next_call);
   }
 return;
      }
    case MEM:
      {
 rtx u;
 rtx pending, pending_mem;
 rtx t = x;
 if (current_sched_info->use_cselib)
   {
     t = shallow_copy_rtx_stat (t );
     cselib_lookup ((((t)->u.fld[0]).rtx1), (0 ? DImode : SImode), 1);
     (((t)->u.fld[0]).rtx1) = cselib_subst_to_values ((((t)->u.fld[0]).rtx1));
   }
 t = canon_rtx (t);
 pending = deps->pending_read_insns;
 pending_mem = deps->pending_read_mems;
 while (pending)
   {
     if (read_dependence ((((pending_mem)->u.fld[0]).rtx1), t))
       add_dependence (insn, (((pending)->u.fld[0]).rtx1), REG_DEP_ANTI);
     pending = (((pending)->u.fld[1]).rtx1);
     pending_mem = (((pending_mem)->u.fld[1]).rtx1);
   }
 pending = deps->pending_write_insns;
 pending_mem = deps->pending_write_mems;
 while (pending)
   {
     if (true_dependence ((((pending_mem)->u.fld[0]).rtx1), VOIDmode,
     t, rtx_varies_p))
       add_dependence (insn, (((pending)->u.fld[0]).rtx1), 0);
     pending = (((pending)->u.fld[1]).rtx1);
     pending_mem = (((pending_mem)->u.fld[1]).rtx1);
   }
 for (u = deps->last_pending_memory_flush; u; u = (((u)->u.fld[1]).rtx1))
   if (((enum rtx_code) ((((u)->u.fld[0]).rtx1))->code) != JUMP_INSN
       || deps_may_trap_p (x))
     add_dependence (insn, (((u)->u.fld[0]).rtx1), REG_DEP_ANTI);
 add_insn_mem_dependence (deps, &deps->pending_read_insns,
     &deps->pending_read_mems, insn, x);
 sched_analyze_2 (deps, (((x)->u.fld[0]).rtx1), insn);
 return;
      }
    case TRAP_IF:
      flush_pending_lists (deps, insn, 1, 0);
      break;
    case ASM_OPERANDS:
    case ASM_INPUT:
    case UNSPEC_VOLATILE:
      {
 if (code != ASM_OPERANDS || (((x))->volatil))
   reg_pending_barrier = TRUE_BARRIER;
 if (code == ASM_OPERANDS)
   {
     for (j = 0; j < (((((x)->u.fld[3]).rtvec1))->num_elem); j++)
       sched_analyze_2 (deps, (((((x)->u.fld[3]).rtvec1))->elem[j]), insn);
     return;
   }
 break;
      }
    case PRE_DEC:
    case POST_DEC:
    case PRE_INC:
    case POST_INC:
      sched_analyze_2 (deps, (((x)->u.fld[0]).rtx1), insn);
      sched_analyze_1 (deps, x, insn);
      return;
    case POST_MODIFY:
    case PRE_MODIFY:
      sched_analyze_2 (deps, (((x)->u.fld[0]).rtx1), insn);
      sched_analyze_2 (deps, (((x)->u.fld[1]).rtx1), insn);
      sched_analyze_1 (deps, x, insn);
      return;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 sched_analyze_2 (deps, (((x)->u.fld[i]).rtx1), insn);
      else if (fmt[i] == 'E')
 for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
   sched_analyze_2 (deps, (((((x)->u.fld[i]).rtvec1))->elem[j]), insn);
    }
}
static void
sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  rtx link;
  int i;
  if (code == COND_EXEC)
    {
      sched_analyze_2 (deps, (((x)->u.fld[0]).rtx1), insn);
      x = (((x)->u.fld[1]).rtx1);
      code = ((enum rtx_code) (x)->code);
    }
  if (code == SET || code == CLOBBER)
    {
      sched_analyze_1 (deps, x, insn);
      if (code == CLOBBER)
 add_dependence_list (insn, deps->last_function_call, REG_DEP_OUTPUT);
    }
  else if (code == PARALLEL)
    {
      int i;
      for (i = (((((x)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 {
   rtx sub = (((((x)->u.fld[0]).rtvec1))->elem[i]);
   code = ((enum rtx_code) (sub)->code);
   if (code == COND_EXEC)
     {
       sched_analyze_2 (deps, (((sub)->u.fld[0]).rtx1), insn);
       sub = (((sub)->u.fld[1]).rtx1);
       code = ((enum rtx_code) (sub)->code);
     }
   if (code == SET || code == CLOBBER)
     sched_analyze_1 (deps, sub, insn);
   else
     sched_analyze_2 (deps, sub, insn);
 }
    }
  else
    sched_analyze_2 (deps, x, insn);
  if (((enum rtx_code) (insn)->code) == CALL_INSN)
    {
      for (link = (((insn)->u.fld[9]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
 {
   if (((enum rtx_code) ((((link)->u.fld[0]).rtx1))->code) == CLOBBER)
     sched_analyze_1 (deps, (((link)->u.fld[0]).rtx1), insn);
   else
     sched_analyze_2 (deps, (((link)->u.fld[0]).rtx1), insn);
 }
      if (find_reg_note (insn, REG_SETJMP, ((void *)0)))
 reg_pending_barrier = MOVE_BARRIER;
    }
  if (((enum rtx_code) (insn)->code) == JUMP_INSN)
    {
      rtx next;
      next = next_nonnote_insn (insn);
      if (next && ((enum rtx_code) (next)->code) == BARRIER)
 reg_pending_barrier = TRUE_BARRIER;
      else
 {
   rtx pending, pending_mem;
   regset_head tmp_uses, tmp_sets;
   bitmap_initialize (&tmp_uses, 1);
   bitmap_initialize (&tmp_sets, 1);
   (*current_sched_info->compute_jump_reg_dependencies)
     (insn, &deps->reg_conditional_sets, &tmp_uses, &tmp_sets);
   do { bitmap_element *ptr_ = (&tmp_uses)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct deps_reg *reg_last = &deps->reg_last[i]; add_dependence_list (insn, reg_last->sets, REG_DEP_ANTI); add_dependence_list (insn, reg_last->clobbers, REG_DEP_ANTI); reg_last->uses_length++; reg_last->uses = alloc_INSN_LIST (insn, reg_last->uses); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
   bitmap_operation (reg_pending_sets, reg_pending_sets, &tmp_sets, BITMAP_IOR);
   bitmap_clear (&tmp_uses);
   bitmap_clear (&tmp_sets);
   pending = deps->pending_write_insns;
   pending_mem = deps->pending_write_mems;
   while (pending)
     {
       add_dependence (insn, (((pending)->u.fld[0]).rtx1), REG_DEP_OUTPUT);
       pending = (((pending)->u.fld[1]).rtx1);
       pending_mem = (((pending_mem)->u.fld[1]).rtx1);
     }
   pending = deps->pending_read_insns;
   pending_mem = deps->pending_read_mems;
   while (pending)
     {
       if (((((((pending_mem)->u.fld[0]).rtx1)))->volatil))
  add_dependence (insn, (((pending)->u.fld[0]).rtx1), REG_DEP_OUTPUT);
       pending = (((pending)->u.fld[1]).rtx1);
       pending_mem = (((pending_mem)->u.fld[1]).rtx1);
     }
   add_dependence_list (insn, deps->last_pending_memory_flush,
          REG_DEP_ANTI);
 }
    }
  if (loop_notes)
    {
      rtx link;
      link = loop_notes;
      while ((((link)->u.fld[1]).rtx1))
 {
   if ((((((link)->u.fld[0]).rtx1))->u.hwint[0]) == NOTE_INSN_LOOP_BEG
       || (((((link)->u.fld[0]).rtx1))->u.hwint[0]) == NOTE_INSN_LOOP_END
       || (((((link)->u.fld[0]).rtx1))->u.hwint[0]) == NOTE_INSN_EH_REGION_BEG
       || (((((link)->u.fld[0]).rtx1))->u.hwint[0]) == NOTE_INSN_EH_REGION_END)
     reg_pending_barrier = MOVE_BARRIER;
   link = (((link)->u.fld[1]).rtx1);
 }
      (((link)->u.fld[1]).rtx1) = (((insn)->u.fld[8]).rtx1);
      (((insn)->u.fld[8]).rtx1) = loop_notes;
    }
  if (can_throw_internal (insn))
    reg_pending_barrier = MOVE_BARRIER;
  if (reg_pending_barrier)
    {
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == COND_EXEC)
 {
   do { bitmap_element *ptr_ = (&deps->reg_last_in_use)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct deps_reg *reg_last = &deps->reg_last[i]; add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI); add_dependence_list (insn, reg_last->sets, reg_pending_barrier == TRUE_BARRIER ? 0 : REG_DEP_ANTI); add_dependence_list (insn, reg_last->clobbers, reg_pending_barrier == TRUE_BARRIER ? 0 : REG_DEP_ANTI); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
 }
      else
 {
   do { bitmap_element *ptr_ = (&deps->reg_last_in_use)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct deps_reg *reg_last = &deps->reg_last[i]; add_dependence_list_and_free (insn, &reg_last->uses, REG_DEP_ANTI); add_dependence_list_and_free (insn, &reg_last->sets, reg_pending_barrier == TRUE_BARRIER ? 0 : REG_DEP_ANTI); add_dependence_list_and_free (insn, &reg_last->clobbers, reg_pending_barrier == TRUE_BARRIER ? 0 : REG_DEP_ANTI); reg_last->uses_length = 0; reg_last->clobbers_length = 0; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
 }
      for (i = 0; i < deps->max_reg; i++)
 {
   struct deps_reg *reg_last = &deps->reg_last[i];
   reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets);
   bitmap_set_bit (&deps->reg_last_in_use, i);
 }
      flush_pending_lists (deps, insn, 1, 1);
      bitmap_clear (&deps->reg_conditional_sets);
      reg_pending_barrier = NOT_A_BARRIER;
    }
  else
    {
      if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == COND_EXEC)
 {
   do { bitmap_element *ptr_ = (reg_pending_uses)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct deps_reg *reg_last = &deps->reg_last[i]; add_dependence_list (insn, reg_last->sets, 0); add_dependence_list (insn, reg_last->clobbers, 0); reg_last->uses = alloc_INSN_LIST (insn, reg_last->uses); reg_last->uses_length++; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
   do { bitmap_element *ptr_ = (reg_pending_clobbers)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct deps_reg *reg_last = &deps->reg_last[i]; add_dependence_list (insn, reg_last->sets, REG_DEP_OUTPUT); add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI); reg_last->clobbers = alloc_INSN_LIST (insn, reg_last->clobbers); reg_last->clobbers_length++; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
   do { bitmap_element *ptr_ = (reg_pending_sets)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct deps_reg *reg_last = &deps->reg_last[i]; add_dependence_list (insn, reg_last->sets, REG_DEP_OUTPUT); add_dependence_list (insn, reg_last->clobbers, REG_DEP_OUTPUT); add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI); reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets); bitmap_set_bit (&deps->reg_conditional_sets, i); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
 }
      else
 {
   do { bitmap_element *ptr_ = (reg_pending_uses)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct deps_reg *reg_last = &deps->reg_last[i]; add_dependence_list (insn, reg_last->sets, 0); add_dependence_list (insn, reg_last->clobbers, 0); reg_last->uses_length++; reg_last->uses = alloc_INSN_LIST (insn, reg_last->uses); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
   do { bitmap_element *ptr_ = (reg_pending_clobbers)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct deps_reg *reg_last = &deps->reg_last[i]; if (reg_last->uses_length > (compiler_params[(int) PARAM_MAX_PENDING_LIST_LENGTH].value1) || reg_last->clobbers_length > (compiler_params[(int) PARAM_MAX_PENDING_LIST_LENGTH].value1)) { add_dependence_list_and_free (insn, &reg_last->sets, REG_DEP_OUTPUT); add_dependence_list_and_free (insn, &reg_last->uses, REG_DEP_ANTI); add_dependence_list_and_free (insn, &reg_last->clobbers, REG_DEP_OUTPUT); reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets); reg_last->clobbers_length = 0; reg_last->uses_length = 0; } else { add_dependence_list (insn, reg_last->sets, REG_DEP_OUTPUT); add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI); } reg_last->clobbers_length++; reg_last->clobbers = alloc_INSN_LIST (insn, reg_last->clobbers); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
   do { bitmap_element *ptr_ = (reg_pending_sets)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct deps_reg *reg_last = &deps->reg_last[i]; add_dependence_list_and_free (insn, &reg_last->sets, REG_DEP_OUTPUT); add_dependence_list_and_free (insn, &reg_last->clobbers, REG_DEP_OUTPUT); add_dependence_list_and_free (insn, &reg_last->uses, REG_DEP_ANTI); reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets); reg_last->uses_length = 0; reg_last->clobbers_length = 0; bitmap_clear_bit (&deps->reg_conditional_sets, i); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
 }
      bitmap_operation (&deps->reg_last_in_use, &deps->reg_last_in_use, reg_pending_uses, BITMAP_IOR);
      bitmap_operation (&deps->reg_last_in_use, &deps->reg_last_in_use, reg_pending_clobbers, BITMAP_IOR);
      bitmap_operation (&deps->reg_last_in_use, &deps->reg_last_in_use, reg_pending_sets, BITMAP_IOR);
    }
  bitmap_clear (reg_pending_uses);
  bitmap_clear (reg_pending_clobbers);
  bitmap_clear (reg_pending_sets);
  if (deps->libcall_block_tail_insn)
    {
      set_sched_group_p (insn);
      (h_i_d[(((insn)->u.fld[0]).rtint)].cant_move) = 1;
    }
  if (deps->in_post_call_group_p)
    {
      rtx tmp, set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
      int src_regno, dest_regno;
      if (set == ((void *)0))
 goto end_call_group;
      tmp = (((set)->u.fld[0]).rtx1);
      if (((enum rtx_code) (tmp)->code) == SUBREG)
 tmp = (((tmp)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (tmp)->code) == REG))
 dest_regno = (((tmp)->u.fld[0]).rtuint);
      else
 goto end_call_group;
      tmp = (((set)->u.fld[1]).rtx1);
      if (((enum rtx_code) (tmp)->code) == SUBREG)
 tmp = (((tmp)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (tmp)->code) == PLUS
    || ((enum rtx_code) (tmp)->code) == MINUS)
   && (((enum rtx_code) ((((tmp)->u.fld[0]).rtx1))->code) == REG)
   && ((((((tmp)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == 7
   && dest_regno == 7)
 src_regno = 7;
      else if ((((enum rtx_code) (tmp)->code) == REG))
 src_regno = (((tmp)->u.fld[0]).rtuint);
      else
 goto end_call_group;
      if (src_regno < 53
   || dest_regno < 53)
 {
   if (deps->in_post_call_group_p == post_call_initial)
     {
       (((insn))->in_struct) = 1;
       deps->in_post_call_group_p = post_call;
     }
   else
     set_sched_group_p (insn);
   (h_i_d[(((insn)->u.fld[0]).rtint)].cant_move) = 1;
 }
      else
 {
 end_call_group:
   deps->in_post_call_group_p = not_post_call;
 }
    }
}
void
sched_analyze (struct deps *deps, rtx head, rtx tail)
{
  rtx insn;
  rtx loop_notes = 0;
  if (current_sched_info->use_cselib)
    cselib_init (1);
  if (! reload_completed && ((enum rtx_code) (head)->code) != CODE_LABEL)
    {
      insn = prev_nonnote_insn (head);
      if (insn && ((enum rtx_code) (insn)->code) == CALL_INSN)
 deps->in_post_call_group_p = post_call_initial;
    }
  for (insn = head;; insn = (((insn)->u.fld[2]).rtx1))
    {
      rtx link, end_seq, r0, set;
      if (((enum rtx_code) (insn)->code) == INSN || ((enum rtx_code) (insn)->code) == JUMP_INSN)
 {
   free_INSN_LIST_list (&(((insn)->u.fld[7]).rtx1));
   if (((enum rtx_code) (insn)->code) == JUMP_INSN)
     {
       if (deps->pending_flush_length++ > (compiler_params[(int) PARAM_MAX_PENDING_LIST_LENGTH].value1))
  flush_pending_lists (deps, insn, 1, 1);
       else
  deps->last_pending_memory_flush
    = alloc_INSN_LIST (insn, deps->last_pending_memory_flush);
     }
   sched_analyze_insn (deps, (((insn)->u.fld[5]).rtx1), insn, loop_notes);
   loop_notes = 0;
 }
      else if (((enum rtx_code) (insn)->code) == CALL_INSN)
 {
   int i;
   (h_i_d[(((insn)->u.fld[0]).rtint)].cant_move) = 1;
   free_INSN_LIST_list (&(((insn)->u.fld[7]).rtx1));
   if (find_reg_note (insn, REG_SETJMP, ((void *)0)))
     {
       reg_pending_barrier = MOVE_BARRIER;
     }
   else
     {
       for (i = 0; i < 53; i++)
  if (global_regs[i])
    {
      bitmap_set_bit (reg_pending_sets, i);
      bitmap_set_bit (reg_pending_uses, i);
    }
  else if (0
    || (!!((regs_invalidated_by_call)[(i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4)))))))
    bitmap_set_bit (reg_pending_clobbers, i);
  else if (fixed_regs[i])
    bitmap_set_bit (reg_pending_uses, i);
  else if (i == 20
    || (i == 6
        && (! reload_completed || frame_pointer_needed)))
    bitmap_set_bit (reg_pending_uses, i);
     }
   add_dependence_list_and_free (insn, &deps->sched_before_next_call,
     REG_DEP_ANTI);
   sched_analyze_insn (deps, (((insn)->u.fld[5]).rtx1), insn, loop_notes);
   loop_notes = 0;
   flush_pending_lists (deps, insn, 1, !(((insn))->unchanging));
   free_INSN_LIST_list (&deps->last_function_call);
   deps->last_function_call = alloc_INSN_LIST (insn, (rtx) 0);
   if (! reload_completed)
     deps->in_post_call_group_p = post_call;
 }
      if (((enum rtx_code) (insn)->code) == NOTE
        && ((((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_BEG
     || (((insn)->u.fld[5]).rtint) == NOTE_INSN_LOOP_END
     || (((insn)->u.fld[5]).rtint) == NOTE_INSN_EH_REGION_BEG
     || (((insn)->u.fld[5]).rtint) == NOTE_INSN_EH_REGION_END))
 {
   rtx rtx_region;
   if ((((insn)->u.fld[5]).rtint) == NOTE_INSN_EH_REGION_BEG
       || (((insn)->u.fld[5]).rtint) == NOTE_INSN_EH_REGION_END)
     rtx_region = gen_rtx_CONST_INT (VOIDmode, (long) ((((insn)->u.fld[4]).rtint)));
   else
     rtx_region = (const_int_rtx[64]);
   loop_notes = alloc_EXPR_LIST (REG_SAVE_NOTE,
     rtx_region,
     loop_notes);
   loop_notes = alloc_EXPR_LIST (REG_SAVE_NOTE,
     gen_rtx_CONST_INT (VOIDmode, (long) ((((insn)->u.fld[5]).rtint))),
     loop_notes);
   (((loop_notes))->unchanging) = (((insn))->unchanging);
 }
      if (current_sched_info->use_cselib)
 cselib_process_insn (insn);
      if (!reload_completed
   && deps->libcall_block_tail_insn == 0
   && ((enum rtx_code) (insn)->code) == INSN
   && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER
          && (r0 = ((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1), (((enum rtx_code) (r0)->code) == REG))
   && (((enum rtx_code) (((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtx1))->code) == REG)
   && (link = find_reg_note (insn, REG_LIBCALL, (rtx) 0)) != 0
   && (end_seq = (((link)->u.fld[0]).rtx1)) != 0
   && (set = (((((enum rtx_code) (end_seq)->code) == INSN) || (((enum rtx_code) (end_seq)->code) == JUMP_INSN) || (((enum rtx_code) (end_seq)->code) == CALL_INSN)) ? (((enum rtx_code) ((((end_seq)->u.fld[5]).rtx1))->code) == SET ? (((end_seq)->u.fld[5]).rtx1) : single_set_2 (end_seq, (((end_seq)->u.fld[5]).rtx1))) : (rtx) 0)) != 0
   && (((set)->u.fld[0]).rtx1) == r0 && (((set)->u.fld[1]).rtx1) == r0
   && find_reg_note (end_seq, REG_EQUAL, (rtx) 0) != 0
   && find_reg_note (end_seq, REG_RETVAL, (rtx) 0) != 0)
 deps->libcall_block_tail_insn = (((link)->u.fld[0]).rtx1);
      if (deps->libcall_block_tail_insn == insn)
 deps->libcall_block_tail_insn = 0;
      if (insn == tail)
 {
   if (current_sched_info->use_cselib)
     cselib_finish ();
   return;
 }
    }
  abort ();
}
void
add_forward_dependence (rtx from, rtx to, enum reg_note dep_type1)
{
  rtx new_link;
  new_link = alloc_INSN_LIST (to, (h_i_d[(((from)->u.fld[0]).rtint)].depend));
  ((new_link)->mode = ((enum machine_mode) (dep_type1)));
  (h_i_d[(((from)->u.fld[0]).rtint)].depend) = new_link;
  (h_i_d[(((to)->u.fld[0]).rtint)].dep_count) += 1;
}
void
compute_forward_dependences (rtx head, rtx tail)
{
  rtx insn, link;
  rtx next_tail;
  next_tail = (((tail)->u.fld[2]).rtx1);
  for (insn = head; insn != next_tail; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      for (link = (((insn)->u.fld[7]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
 add_forward_dependence ((((link)->u.fld[0]).rtx1), insn, ((enum reg_note) ((enum machine_mode) (link)->mode)));
    }
}
void
init_deps (struct deps *deps)
{
  int max_reg = (reload_completed ? 53 : max_reg_num ());
  deps->max_reg = max_reg;
  deps->reg_last = xcalloc (max_reg, sizeof (struct deps_reg));
  bitmap_initialize (&deps->reg_last_in_use, 1);
  bitmap_initialize (&deps->reg_conditional_sets, 1);
  deps->pending_read_insns = 0;
  deps->pending_read_mems = 0;
  deps->pending_write_insns = 0;
  deps->pending_write_mems = 0;
  deps->pending_lists_length = 0;
  deps->pending_flush_length = 0;
  deps->last_pending_memory_flush = 0;
  deps->last_function_call = 0;
  deps->sched_before_next_call = 0;
  deps->in_post_call_group_p = not_post_call;
  deps->libcall_block_tail_insn = 0;
}
void
free_deps (struct deps *deps)
{
  int i;
  free_INSN_LIST_list (&deps->pending_read_insns);
  free_EXPR_LIST_list (&deps->pending_read_mems);
  free_INSN_LIST_list (&deps->pending_write_insns);
  free_EXPR_LIST_list (&deps->pending_write_mems);
  free_INSN_LIST_list (&deps->last_pending_memory_flush);
  do { bitmap_element *ptr_ = (&deps->reg_last_in_use)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (i) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct deps_reg *reg_last = &deps->reg_last[i]; if (reg_last->uses) free_INSN_LIST_list (&reg_last->uses); if (reg_last->sets) free_INSN_LIST_list (&reg_last->sets); if (reg_last->clobbers) free_INSN_LIST_list (&reg_last->clobbers); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
  bitmap_clear (&deps->reg_last_in_use);
  bitmap_clear (&deps->reg_conditional_sets);
  free (deps->reg_last);
}
void
init_dependency_caches (int luid)
{
  if (luid / n_basic_blocks > 100 * 5)
    {
      int i;
      true_dependency_cache = xmalloc (luid * sizeof (bitmap_head));
      anti_dependency_cache = xmalloc (luid * sizeof (bitmap_head));
      output_dependency_cache = xmalloc (luid * sizeof (bitmap_head));
      for (i = 0; i < luid; i++)
 {
   bitmap_initialize (&true_dependency_cache[i], 0);
   bitmap_initialize (&anti_dependency_cache[i], 0);
   bitmap_initialize (&output_dependency_cache[i], 0);
 }
      cache_size = luid;
    }
}
void
free_dependency_caches (void)
{
  if (true_dependency_cache)
    {
      int i;
      for (i = 0; i < cache_size; i++)
 {
   bitmap_clear (&true_dependency_cache[i]);
   bitmap_clear (&anti_dependency_cache[i]);
   bitmap_clear (&output_dependency_cache[i]);
 }
      free (true_dependency_cache);
      true_dependency_cache = ((void *)0);
      free (anti_dependency_cache);
      anti_dependency_cache = ((void *)0);
      free (output_dependency_cache);
      output_dependency_cache = ((void *)0);
    }
}
void
init_deps_global (void)
{
  reg_pending_sets = bitmap_initialize (&reg_pending_sets_head, 1);
  reg_pending_clobbers = bitmap_initialize (&reg_pending_clobbers_head, 1);
  reg_pending_uses = bitmap_initialize (&reg_pending_uses_head, 1);
  reg_pending_barrier = NOT_A_BARRIER;
}
void
finish_deps_global (void)
{
  do { if (reg_pending_sets) { bitmap_clear (reg_pending_sets); (reg_pending_sets) = 0; } } while (0);
  do { if (reg_pending_clobbers) { bitmap_clear (reg_pending_clobbers); (reg_pending_clobbers) = 0; } } while (0);
  do { if (reg_pending_uses) { bitmap_clear (reg_pending_uses); (reg_pending_uses) = 0; } } while (0);
}
static int target_n_insns;
static int sched_n_insns;
static void init_ready_list_ebb (struct ready_list *);
static int can_schedule_ready_p_ebb (rtx);
static int new_ready_ebb (rtx);
static int schedule_more_p_ebb (void);
static const char *ebb_print_insn (rtx, int);
static int rank (rtx, rtx);
static int contributes_to_priority_ebb (rtx, rtx);
static void compute_jump_reg_dependencies_ebb (rtx, regset, regset, regset);
static basic_block earliest_block_with_similiar_load (basic_block, rtx);
static void add_deps_for_risky_insns (rtx, rtx);
static basic_block schedule_ebb (rtx, rtx);
static basic_block fix_basic_block_boundaries (basic_block, basic_block, rtx,
            rtx);
static void add_missing_bbs (rtx, basic_block, basic_block);
static int
schedule_more_p_ebb (void)
{
  return sched_n_insns < target_n_insns;
}
static void
init_ready_list_ebb (struct ready_list *ready)
{
  rtx prev_head = current_sched_info->prev_head;
  rtx next_tail = current_sched_info->next_tail;
  rtx insn;
  target_n_insns = 0;
  sched_n_insns = 0;
  for (insn = (((prev_head)->u.fld[2]).rtx1); insn != next_tail; insn = (((insn)->u.fld[2]).rtx1))
    {
      if ((h_i_d[(((insn)->u.fld[0]).rtint)].dep_count) == 0)
 ready_add (ready, insn);
      target_n_insns++;
    }
}
static int
can_schedule_ready_p_ebb (rtx insn )
{
  sched_n_insns++;
  return 1;
}
static int
new_ready_ebb (rtx next )
{
  return 1;
}
static const char *
ebb_print_insn (rtx insn, int aligned )
{
  static char tmp[80];
  sprintf (tmp, "%4d", (((insn)->u.fld[0]).rtint));
  return tmp;
}
static int
rank (rtx insn1, rtx insn2)
{
  basic_block bb1 = (((insn1)->u.fld[3]).bb);
  basic_block bb2 = (((insn2)->u.fld[3]).bb);
  if (bb1->count > bb2->count
      || bb1->frequency > bb2->frequency)
    return -1;
  if (bb1->count < bb2->count
      || bb1->frequency < bb2->frequency)
    return 1;
  return 0;
}
static int
contributes_to_priority_ebb (rtx next ,
    rtx insn )
{
  return 1;
}
static void
compute_jump_reg_dependencies_ebb (rtx insn, regset cond_set, regset used,
          regset set)
{
  basic_block b = (((insn)->u.fld[3]).bb);
  edge e;
  for (e = b->succ; e; e = e->succ_next)
    if (e->flags & 1)
      bitmap_operation (set, e->dest->global_live_at_start, cond_set,
   BITMAP_AND);
    else
      bitmap_operation (used, used, e->dest->global_live_at_start,
   BITMAP_IOR);
}
static struct sched_info ebb_sched_info =
{
  init_ready_list_ebb,
  can_schedule_ready_p_ebb,
  schedule_more_p_ebb,
  new_ready_ebb,
  rank,
  ebb_print_insn,
  contributes_to_priority_ebb,
  compute_jump_reg_dependencies_ebb,
  ((void *)0), ((void *)0),
  ((void *)0), ((void *)0),
  0, 1, 0
};
static void
add_missing_bbs (rtx before, basic_block first, basic_block last)
{
  for (; last != first->prev_bb; last = last->prev_bb)
    {
      before = emit_note_before (NOTE_INSN_BASIC_BLOCK, before);
      (((before)->u.fld[4]).bb) = last;
      (last)->head_ = before;
      (last)->end_ = before;
      update_bb_for_insn (last);
    }
}
static basic_block
fix_basic_block_boundaries (basic_block bb, basic_block last, rtx head,
       rtx tail)
{
  rtx insn = head;
  rtx last_inside = (bb)->head_;
  rtx aftertail = (((tail)->u.fld[2]).rtx1);
  head = (bb)->head_;
  for (; insn != aftertail; insn = (((insn)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 abort ();
      if (inside_basic_block_p (insn))
 {
   if (!last_inside)
     {
       rtx note;
       if (((enum rtx_code) (insn)->code) == CODE_LABEL)
  {
    note = emit_note_after (NOTE_INSN_BASIC_BLOCK, insn);
    head = insn;
    last_inside = note;
  }
       else
  {
    note = emit_note_before (NOTE_INSN_BASIC_BLOCK, insn);
    head = note;
    last_inside = insn;
  }
     }
   else
     last_inside = insn;
 }
      if (control_flow_insn_p (insn) || (insn == tail && last_inside))
 {
   basic_block curr_bb = (((insn)->u.fld[3]).bb);
   rtx note;
   if (!control_flow_insn_p (insn))
     curr_bb = last;
   if (bb == last->next_bb)
     {
       edge f;
       rtx h;
       f = bb->prev_bb->succ;
       while (f && !(f->flags & 1))
  f = f->succ_next;
       if (f)
  {
    last = curr_bb = split_edge (f);
    h = (curr_bb)->head_;
    (curr_bb)->head_ = head;
    (curr_bb)->end_ = insn;
    delete_insn (h);
  }
       else
  {
    rtx next = next_nonnote_insn (insn);
    delete_insn_chain (head, insn);
    if (((enum rtx_code) (next)->code) == BARRIER)
       {
         emit_barrier_after (prev_nonnote_insn (head));
         delete_insn (next);
       }
    insn = ((void *)0);
  }
     }
   else
     {
       (curr_bb)->head_ = head;
       (curr_bb)->end_ = insn;
       add_missing_bbs ((curr_bb)->head_, bb, curr_bb->prev_bb);
     }
   note = ((enum rtx_code) (head)->code) == CODE_LABEL ? (((head)->u.fld[2]).rtx1) : head;
   (((note)->u.fld[4]).bb) = curr_bb;
   update_bb_for_insn (curr_bb);
   bb = curr_bb->next_bb;
   last_inside = ((void *)0);
   if (!insn)
      break;
 }
    }
  add_missing_bbs ((last->next_bb)->head_, bb, last);
  return bb->prev_bb;
}
static basic_block
earliest_block_with_similiar_load (basic_block last_block, rtx load_insn)
{
  rtx back_link;
  basic_block bb, earliest_block = ((void *)0);
  for (back_link = (((load_insn)->u.fld[7]).rtx1);
       back_link;
       back_link = (((back_link)->u.fld[1]).rtx1))
    {
      rtx insn1 = (((back_link)->u.fld[0]).rtx1);
      if (((enum machine_mode) (back_link)->mode) == VOIDmode)
 {
   rtx fore_link;
   for (fore_link = (h_i_d[(((insn1)->u.fld[0]).rtint)].depend);
        fore_link;
        fore_link = (((fore_link)->u.fld[1]).rtx1))
     {
       rtx insn2 = (((fore_link)->u.fld[0]).rtx1);
       basic_block insn2_block = (((insn2)->u.fld[3]).bb);
       if (((enum machine_mode) (fore_link)->mode) == VOIDmode)
  {
    if (earliest_block != ((void *)0)
        && earliest_block->index < insn2_block->index)
      continue;
    if (haifa_classify_insn (insn2) != PFREE_CANDIDATE)
      continue;
    for (bb = last_block; bb; bb = bb->aux)
      if (insn2_block == bb)
        break;
    if (!bb)
      earliest_block = insn2_block;
  }
     }
 }
    }
  return earliest_block;
}
static void
add_deps_for_risky_insns (rtx head, rtx tail)
{
  rtx insn, prev;
  int class;
  rtx last_jump = (rtx) 0;
  rtx next_tail = (((tail)->u.fld[2]).rtx1);
  basic_block last_block = ((void *)0), bb;
  for (insn = head; insn != next_tail; insn = (((insn)->u.fld[2]).rtx1))
    if (((enum rtx_code) (insn)->code) == JUMP_INSN)
      {
 bb = (((insn)->u.fld[3]).bb);
 bb->aux = last_block;
 last_block = bb;
 last_jump = insn;
      }
    else if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && last_jump != (rtx) 0)
      {
 class = haifa_classify_insn (insn);
 prev = last_jump;
 switch (class)
   {
   case PFREE_CANDIDATE:
     if (flag_schedule_speculative_load)
       {
  bb = earliest_block_with_similiar_load (last_block, insn);
  if (bb)
    {
      bb = bb->aux;
      if (!bb)
        break;
      prev = (bb)->end_;
    }
       }
   case TRAP_RISKY:
   case IRISKY:
   case PRISKY_CANDIDATE:
     if (add_dependence (insn, prev, REG_DEP_ANTI))
       add_forward_dependence (prev, insn, REG_DEP_ANTI);
            break;
          default:
            break;
   }
      }
  while (last_block)
    {
      bb = last_block->aux;
      last_block->aux = ((void *)0);
      last_block = bb;
    }
}
static basic_block
schedule_ebb (rtx head, rtx tail)
{
  int n_insns;
  basic_block b;
  struct deps tmp_deps;
  basic_block first_bb = (((head)->u.fld[3]).bb);
  basic_block last_bb = (((tail)->u.fld[3]).bb);
  if (no_real_insns_p (head, tail))
    return (((tail)->u.fld[3]).bb);
  init_deps_global ();
  init_deps (&tmp_deps);
  sched_analyze (&tmp_deps, head, tail);
  free_deps (&tmp_deps);
  compute_forward_dependences (head, tail);
  add_deps_for_risky_insns (head, tail);
  if (targetm.sched.dependencies_evaluation_hook)
    targetm.sched.dependencies_evaluation_hook (head, tail);
  n_insns = set_priorities (head, tail);
  current_sched_info->prev_head = (((head)->u.fld[1]).rtx1);
  current_sched_info->next_tail = (((tail)->u.fld[2]).rtx1);
  if (write_symbols != NO_DEBUG)
    {
      save_line_notes (first_bb->index, head, tail);
      rm_line_notes (head, tail);
    }
  if (((((enum rtx_code) (head)->code) == INSN) || (((enum rtx_code) (head)->code) == JUMP_INSN) || (((enum rtx_code) (head)->code) == CALL_INSN)))
    {
      rtx note;
      for (note = (((head)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
 if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_SAVE_NOTE)
   {
     remove_note (head, note);
     note = (((note)->u.fld[1]).rtx1);
     remove_note (head, note);
   }
    }
  rm_other_notes (head, tail);
  current_sched_info->queue_must_finish_empty = 1;
  schedule_block (-1, n_insns);
  if (sched_n_insns != n_insns)
    abort ();
  head = current_sched_info->head;
  tail = current_sched_info->tail;
  if (write_symbols != NO_DEBUG)
    restore_line_notes (head, tail);
  b = fix_basic_block_boundaries (first_bb, last_bb, head, tail);
  finish_deps_global ();
  return b;
}
void
schedule_ebbs (FILE *dump_file)
{
  basic_block bb;
  int probability_cutoff;
  if (profile_info && flag_branch_probabilities)
    probability_cutoff = (compiler_params[(int) TRACER_MIN_BRANCH_PROBABILITY_FEEDBACK].value1);
  else
    probability_cutoff = (compiler_params[(int) TRACER_MIN_BRANCH_PROBABILITY].value1);
  probability_cutoff = 10000 / 100 * probability_cutoff;
  if (n_basic_blocks == 0)
    return;
  sched_init (dump_file);
  current_sched_info = &ebb_sched_info;
  compute_bb_for_insn ();
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      rtx head = (bb)->head_;
      rtx tail;
      for (;;)
 {
   edge e;
   tail = (bb)->end_;
   if (bb->next_bb == EXIT_BLOCK_PTR
       || ((enum rtx_code) ((bb->next_bb)->head_)->code) == CODE_LABEL)
     break;
   for (e = bb->succ; e; e = e->succ_next)
     if ((e->flags & 1) != 0)
       break;
   if (! e)
     break;
   if (e->probability <= probability_cutoff)
     break;
   bb = bb->next_bb;
 }
      while (head != tail)
 {
   if (((enum rtx_code) (head)->code) == NOTE)
     head = (((head)->u.fld[2]).rtx1);
   else if (((enum rtx_code) (tail)->code) == NOTE)
     tail = (((tail)->u.fld[1]).rtx1);
   else if (((enum rtx_code) (head)->code) == CODE_LABEL)
     head = (((head)->u.fld[2]).rtx1);
   else
     break;
 }
      bb = schedule_ebb (head, tail);
    }
  if (reload_completed)
    reposition_prologue_and_epilogue_notes (get_insns ());
  if (write_symbols != NO_DEBUG)
    rm_redundant_line_notes ();
  sched_finish ();
}
static int nr_inter, nr_spec;
typedef struct
{
  int from_block;
  int to_block;
  int next_in;
  int next_out;
}
haifa_edge;
static haifa_edge *edge_table;
static int nr_edges;
static int *in_edges;
static int *out_edges;
static int is_cfg_nonregular (void);
static int build_control_flow (struct edge_list *);
static void new_edge (int, int);
typedef struct
{
  int rgn_nr_blocks;
  int rgn_blocks;
}
region;
static int nr_regions;
static region *rgn_table;
static int *rgn_bb_table;
static int *block_to_bb;
static int *containing_rgn;
void debug_regions (void);
static void find_single_block_region (void);
static void find_rgns (struct edge_list *);
static unsigned char too_large (int, int *, int *);
extern void debug_live (int, int);
static int current_nr_blocks;
static int current_blocks;
typedef struct
{
  int *first_member;
  int nr_members;
}
bitlst;
static int bitlst_table_last;
static int *bitlst_table;
static void extract_bitlst (sbitmap, bitlst *);
typedef bitlst bblst;
typedef struct
{
  char is_valid;
  char is_speculative;
  int src_prob;
  bblst split_bbs;
  bblst update_bbs;
}
candidate;
static candidate *candidate_table;
static int *bblst_table, bblst_size, bblst_last;
static int target_bb;
typedef bitlst edgelst;
static void split_edges (int, int, edgelst *);
static void compute_trg_info (int);
void debug_candidate (int);
void debug_candidates (int);
static sbitmap *dom;
static float *prob;
typedef sbitmap edgeset;
static int rgn_nr_edges;
static int *rgn_edges;
static int *edge_to_bit;
static edgeset *pot_split;
static edgeset *ancestor_edges;
static void compute_dom_prob_ps (int);
static int check_live_1 (int, rtx);
static void update_live_1 (int, rtx);
static int check_live (rtx, int);
static void update_live (rtx, int);
static void set_spec_fed (rtx);
static int is_pfree (rtx, int, int);
static int find_conditional_protection (rtx, int);
static int is_conditionally_protected (rtx, int, int);
static int is_prisky (rtx, int, int);
static int is_exception_free (rtx, int, int);
static unsigned char sets_likely_spilled (rtx);
static void sets_likely_spilled_1 (rtx, rtx, void *);
static void add_branch_dependences (rtx, rtx);
static void compute_block_backward_dependences (int);
void debug_dependencies (void);
static void init_regions (void);
static void schedule_region (int);
static rtx concat_INSN_LIST (rtx, rtx);
static void concat_insn_mem_list (rtx, rtx, rtx *, rtx *);
static void propagate_deps (int, struct deps *);
static void free_pending_lists (void);
static int
is_cfg_nonregular (void)
{
  basic_block b;
  rtx insn;
  enum rtx_code code;
  if ((cfun->x_nonlocal_goto_handler_labels))
    return 1;
  if ((cfun->expr->x_forced_labels))
    return 1;
  if ((cfun->has_computed_jump))
    return 1;
  if (current_function_has_exception_handlers ())
    return 1;
  for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = b->next_bb)
    for (insn = (b)->head_; ; insn = (((insn)->u.fld[2]).rtx1))
      {
 code = ((enum rtx_code) (insn)->code);
 if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && code != JUMP_INSN)
   {
     rtx note = find_reg_note (insn, REG_LABEL, (rtx) 0);
     if (note
  && ! (((enum rtx_code) ((((insn)->u.fld[2]).rtx1))->code) == JUMP_INSN
        && find_reg_note ((((insn)->u.fld[2]).rtx1), REG_LABEL,
     (((note)->u.fld[0]).rtx1))))
       return 1;
   }
 if (insn == (b)->end_)
   break;
      }
  return 0;
}
static int
build_control_flow (struct edge_list *edge_list)
{
  int i, unreachable, num_edges;
  basic_block b;
  num_edges = ((edge_list)->num_edges);
  unreachable = 0;
  for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = b->next_bb)
    {
      if (b->pred == ((void *)0)
   || (b->pred->src == b
       && b->pred->pred_next == ((void *)0)))
 unreachable = 1;
    }
  in_edges = xcalloc (last_basic_block, sizeof (int));
  out_edges = xcalloc (last_basic_block, sizeof (int));
  edge_table = xcalloc (num_edges, sizeof (haifa_edge));
  nr_edges = 0;
  for (i = 0; i < num_edges; i++)
    {
      edge e = ((edge_list)->index_to_edge[(i)]);
      if (e->dest != EXIT_BLOCK_PTR
   && e->src != ENTRY_BLOCK_PTR)
 new_edge (e->src->index, e->dest->index);
    }
  nr_edges++;
  return unreachable;
}
static void
new_edge (int source, int target)
{
  int e, next_edge;
  int curr_edge, fst_edge;
  fst_edge = curr_edge = (out_edges[source]);
  while (curr_edge)
    {
      if ((edge_table[curr_edge].from_block) == source
   && (edge_table[curr_edge].to_block) == target)
 {
   return;
 }
      curr_edge = (edge_table[curr_edge].next_out);
      if (fst_edge == curr_edge)
 break;
    }
  e = ++nr_edges;
  (edge_table[e].from_block) = source;
  (edge_table[e].to_block) = target;
  if ((out_edges[source]))
    {
      next_edge = (edge_table[(out_edges[source])].next_out);
      (edge_table[(out_edges[source])].next_out) = e;
      (edge_table[e].next_out) = next_edge;
    }
  else
    {
      (out_edges[source]) = e;
      (edge_table[e].next_out) = e;
    }
  if ((in_edges[target]))
    {
      next_edge = (edge_table[(in_edges[target])].next_in);
      (edge_table[(in_edges[target])].next_in) = e;
      (edge_table[e].next_in) = next_edge;
    }
  else
    {
      (in_edges[target]) = e;
      (edge_table[e].next_in) = e;
    }
}
static void
extract_bitlst (sbitmap set, bitlst *bl)
{
  int i;
  bitlst_table_last = 0;
  bl->first_member = &bitlst_table[bitlst_table_last];
  bl->nr_members = 0;
  do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (set)->size; unsigned long *ptr_ = (set)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (i) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { bitlst_table[bitlst_table_last++] = i; (bl->nr_members)++; }; if (word_ == 0) break; } } } } while (0)
    ;
}
void
debug_regions (void)
{
  int rgn, bb;
  fprintf (sched_dump, "\n;;   ------------ REGIONS ----------\n\n");
  for (rgn = 0; rgn < nr_regions; rgn++)
    {
      fprintf (sched_dump, ";;\trgn %d nr_blocks %d:\n", rgn,
        rgn_table[rgn].rgn_nr_blocks);
      fprintf (sched_dump, ";;\tbb/block: ");
      for (bb = 0; bb < rgn_table[rgn].rgn_nr_blocks; bb++)
 {
   current_blocks = (rgn_table[rgn].rgn_blocks);
   if (bb != (block_to_bb[(rgn_bb_table[current_blocks + (bb)])]))
     abort ();
   fprintf (sched_dump, " %d/%d ", bb, (rgn_bb_table[current_blocks + (bb)]));
 }
      fprintf (sched_dump, "\n\n");
    }
}
static void
find_single_block_region (void)
{
  basic_block bb;
  nr_regions = 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      rgn_bb_table[nr_regions] = bb->index;
      (rgn_table[nr_regions].rgn_nr_blocks) = 1;
      (rgn_table[nr_regions].rgn_blocks) = nr_regions;
      (containing_rgn[bb->index]) = nr_regions;
      (block_to_bb[bb->index]) = 0;
      nr_regions++;
    }
}
static unsigned char
too_large (int block, int *num_bbs, int *num_insns)
{
  (*num_bbs)++;
  (*num_insns) += ((h_i_d[(((((((basic_block_info)->data.bb[(block)])))->end_)->u.fld[0]).rtint)].luid)
     - (h_i_d[(((((((basic_block_info)->data.bb[(block)])))->head_)->u.fld[0]).rtint)].luid));
  return ((*num_bbs > (compiler_params[(int) PARAM_MAX_SCHED_REGION_BLOCKS].value1))
   || (*num_insns > (compiler_params[(int) PARAM_MAX_SCHED_REGION_INSNS].value1)));
}
static void
find_rgns (struct edge_list *edge_list)
{
  int *max_hdr, *dfs_nr, *stack1, *degree;
  char no_loops = 1;
  int node, child, loop_head, i, head, tail;
  int count = 0, sp, idx = 0;
  int current_edge = out_edges[ENTRY_BLOCK_PTR->succ->dest->index];
  int num_bbs, num_insns, unreachable;
  int too_large_failure;
  basic_block bb;
  sbitmap passed;
  sbitmap header1;
  sbitmap inner;
  sbitmap in_queue;
  sbitmap in_stack;
  int num_edges = ((edge_list)->num_edges);
  max_hdr = xmalloc (last_basic_block * sizeof (int));
  dfs_nr = xcalloc (last_basic_block, sizeof (int));
  stack1 = xmalloc (nr_edges * sizeof (int));
  inner = sbitmap_alloc (last_basic_block);
  sbitmap_ones (inner);
  header1 = sbitmap_alloc (last_basic_block);
  sbitmap_zero (header1);
  passed = sbitmap_alloc (nr_edges);
  sbitmap_zero (passed);
  in_queue = sbitmap_alloc (last_basic_block);
  sbitmap_zero (in_queue);
  in_stack = sbitmap_alloc (last_basic_block);
  sbitmap_zero (in_stack);
  for (i = 0; i < last_basic_block; i++)
    max_hdr[i] = -1;
  sp = -1;
  while (1)
    {
      if (current_edge == 0 || ((passed)->elms [(current_edge) / ((unsigned) (8 * 4))] >> (current_edge) % ((unsigned) (8 * 4)) & 1))
 {
   while (sp >= 0
   && (current_edge == 0 || ((passed)->elms [(current_edge) / ((unsigned) (8 * 4))] >> (current_edge) % ((unsigned) (8 * 4)) & 1)))
     {
       current_edge = stack1[sp--];
       node = (edge_table[current_edge].from_block);
       child = (edge_table[current_edge].to_block);
       ((in_stack)->elms [(child) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (child) % ((unsigned) (8 * 4))));
       if (max_hdr[child] >= 0 && ((in_stack)->elms [(max_hdr[child]) / ((unsigned) (8 * 4))] >> (max_hdr[child]) % ((unsigned) (8 * 4)) & 1))
  { if (max_hdr[node] == -1) max_hdr[node] = max_hdr[child]; else if (dfs_nr[max_hdr[node]] > dfs_nr[max_hdr[child]]) ((inner)->elms [(max_hdr[child]) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (max_hdr[child]) % ((unsigned) (8 * 4)))); else if (dfs_nr[max_hdr[node]] < dfs_nr[max_hdr[child]]) { ((inner)->elms [(max_hdr[node]) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (max_hdr[node]) % ((unsigned) (8 * 4)))); max_hdr[node] = max_hdr[child]; } };
       current_edge = (edge_table[current_edge].next_out);
     }
   if (sp < 0 && ((passed)->elms [(current_edge) / ((unsigned) (8 * 4))] >> (current_edge) % ((unsigned) (8 * 4)) & 1))
     break;
   continue;
 }
      node = (edge_table[current_edge].from_block);
      child = (edge_table[current_edge].to_block);
      ((in_stack)->elms [(node) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (node) % ((unsigned) (8 * 4)));
      dfs_nr[node] = ++count;
      if (((in_stack)->elms [(child) / ((unsigned) (8 * 4))] >> (child) % ((unsigned) (8 * 4)) & 1))
 {
   no_loops = 0;
   ((header1)->elms [(child) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (child) % ((unsigned) (8 * 4)));
   { if (max_hdr[node] == -1) max_hdr[node] = child; else if (dfs_nr[max_hdr[node]] > dfs_nr[child]) ((inner)->elms [(child) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (child) % ((unsigned) (8 * 4)))); else if (dfs_nr[max_hdr[node]] < dfs_nr[child]) { ((inner)->elms [(max_hdr[node]) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (max_hdr[node]) % ((unsigned) (8 * 4)))); max_hdr[node] = child; } };
   ((passed)->elms [(current_edge) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (current_edge) % ((unsigned) (8 * 4)));
   current_edge = (edge_table[current_edge].next_out);
   continue;
 }
      if (dfs_nr[child])
 {
   if (max_hdr[child] >= 0 && ((in_stack)->elms [(max_hdr[child]) / ((unsigned) (8 * 4))] >> (max_hdr[child]) % ((unsigned) (8 * 4)) & 1))
     { if (max_hdr[node] == -1) max_hdr[node] = max_hdr[child]; else if (dfs_nr[max_hdr[node]] > dfs_nr[max_hdr[child]]) ((inner)->elms [(max_hdr[child]) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (max_hdr[child]) % ((unsigned) (8 * 4)))); else if (dfs_nr[max_hdr[node]] < dfs_nr[max_hdr[child]]) { ((inner)->elms [(max_hdr[node]) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (max_hdr[node]) % ((unsigned) (8 * 4)))); max_hdr[node] = max_hdr[child]; } };
   ((passed)->elms [(current_edge) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (current_edge) % ((unsigned) (8 * 4)));
   current_edge = (edge_table[current_edge].next_out);
   continue;
 }
      stack1[++sp] = current_edge;
      ((passed)->elms [(current_edge) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (current_edge) % ((unsigned) (8 * 4)));
      current_edge = (out_edges[child]);
      if (current_edge == 0)
 dfs_nr[child] = ++count;
    }
  unreachable = 0;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (dfs_nr[bb->index] == 0)
      {
 unreachable = 1;
 break;
      }
  degree = dfs_nr;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    degree[bb->index] = 0;
  for (i = 0; i < num_edges; i++)
    {
      edge e = ((edge_list)->index_to_edge[(i)]);
      if (e->dest != EXIT_BLOCK_PTR)
 degree[e->dest->index]++;
    }
  if (!unreachable)
    {
      int *queue;
      if (no_loops)
 ((header1)->elms [(0) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (0) % ((unsigned) (8 * 4)));
      queue = xmalloc (n_basic_blocks * sizeof (int));
      for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
 {
   if (((header1)->elms [(bb->index) / ((unsigned) (8 * 4))] >> (bb->index) % ((unsigned) (8 * 4)) & 1) && ((inner)->elms [(bb->index) / ((unsigned) (8 * 4))] >> (bb->index) % ((unsigned) (8 * 4)) & 1))
     {
       edge e;
       basic_block jbb;
       for (jbb = ENTRY_BLOCK_PTR->next_bb; jbb != EXIT_BLOCK_PTR; jbb = jbb->next_bb)
  {
    if (bb->index == max_hdr[jbb->index] && bb != jbb)
      {
        if (!dominated_by_p (CDI_DOMINATORS, jbb, bb))
   break;
      }
  }
       if (jbb != EXIT_BLOCK_PTR)
  continue;
       head = tail = -1;
       too_large_failure = 0;
       loop_head = max_hdr[bb->index];
       for (e = bb->succ; e; e = e->succ_next)
  if (e->dest != EXIT_BLOCK_PTR)
    --degree[e->dest->index];
       num_bbs = 1;
       num_insns = ((h_i_d[((((bb)->end_)->u.fld[0]).rtint)].luid)
      - (h_i_d[((((bb)->head_)->u.fld[0]).rtint)].luid));
       if (no_loops)
  {
    for (jbb = ENTRY_BLOCK_PTR->next_bb; jbb != EXIT_BLOCK_PTR; jbb = jbb->next_bb)
      if (jbb->succ
   && jbb->succ->dest == EXIT_BLOCK_PTR
   && jbb->succ->succ_next == ((void *)0))
        {
   queue[++tail] = jbb->index;
   ((in_queue)->elms [(jbb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (jbb->index) % ((unsigned) (8 * 4)));
   if (too_large (jbb->index, &num_bbs, &num_insns))
     {
       too_large_failure = 1;
       break;
     }
        }
  }
       else
  {
    edge e;
    for (e = bb->pred; e; e = e->pred_next)
      {
        if (e->src == ENTRY_BLOCK_PTR)
   continue;
        node = e->src->index;
        if (max_hdr[node] == loop_head && node != bb->index)
   {
     queue[++tail] = node;
     ((in_queue)->elms [(node) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (node) % ((unsigned) (8 * 4)));
     if (too_large (node, &num_bbs, &num_insns))
       {
         too_large_failure = 1;
         break;
       }
   }
      }
  }
       while (head < tail && !too_large_failure)
  {
    edge e;
    child = queue[++head];
    for (e = (((basic_block_info)->data.bb[(child)]))->pred; e; e = e->pred_next)
      {
        node = e->src->index;
        if (e->src == ENTRY_BLOCK_PTR
     || max_hdr[node] != loop_head)
   {
     tail = -1;
     break;
   }
        else if (!((in_queue)->elms [(node) / ((unsigned) (8 * 4))] >> (node) % ((unsigned) (8 * 4)) & 1) && node != bb->index)
   {
     queue[++tail] = node;
     ((in_queue)->elms [(node) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (node) % ((unsigned) (8 * 4)));
     if (too_large (node, &num_bbs, &num_insns))
       {
         too_large_failure = 1;
         break;
       }
   }
      }
  }
       if (tail >= 0 && !too_large_failure)
  {
    degree[bb->index] = -1;
    rgn_bb_table[idx] = bb->index;
    (rgn_table[nr_regions].rgn_nr_blocks) = num_bbs;
    (rgn_table[nr_regions].rgn_blocks) = idx++;
    (containing_rgn[bb->index]) = nr_regions;
    (block_to_bb[bb->index]) = count = 0;
    while (tail >= 0)
      {
        if (head < 0)
   head = tail;
        child = queue[head];
        if (degree[child] == 0)
   {
     edge e;
     degree[child] = -1;
     rgn_bb_table[idx++] = child;
     (block_to_bb[child]) = ++count;
     (containing_rgn[child]) = nr_regions;
     queue[head] = queue[tail--];
     for (e = (((basic_block_info)->data.bb[(child)]))->succ;
          e;
          e = e->succ_next)
       if (e->dest != EXIT_BLOCK_PTR)
         --degree[e->dest->index];
   }
        else
   --head;
      }
    ++nr_regions;
  }
     }
 }
      free (queue);
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (degree[bb->index] >= 0)
      {
 rgn_bb_table[idx] = bb->index;
 (rgn_table[nr_regions].rgn_nr_blocks) = 1;
 (rgn_table[nr_regions].rgn_blocks) = idx++;
 (containing_rgn[bb->index]) = nr_regions++;
 (block_to_bb[bb->index]) = 0;
      }
  free (max_hdr);
  free (dfs_nr);
  free (stack1);
  free(passed);
  free(header1);
  free(inner);
  free(in_queue);
  free(in_stack);
}
static void
compute_dom_prob_ps (int bb)
{
  int nxt_in_edge, fst_in_edge, pred;
  int fst_out_edge, nxt_out_edge, nr_out_edges, nr_rgn_out_edges;
  prob[bb] = 0.0;
  if ((!bb))
    {
      ((dom[bb])->elms [(0) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (0) % ((unsigned) (8 * 4)));
      prob[bb] = 1.0;
      return;
    }
  fst_in_edge = nxt_in_edge = (in_edges[(rgn_bb_table[current_blocks + (bb)])]);
  sbitmap_ones (dom[bb]);
  do
    {
      pred = (edge_table[nxt_in_edge].from_block);
      sbitmap_a_and_b (dom[bb], dom[bb], dom[(block_to_bb[pred])]);
      sbitmap_a_or_b (ancestor_edges[bb], ancestor_edges[bb], ancestor_edges[(block_to_bb[pred])]);
      ((ancestor_edges[bb])->elms [((edge_to_bit[nxt_in_edge])) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << ((edge_to_bit[nxt_in_edge])) % ((unsigned) (8 * 4)));
      nr_out_edges = 1;
      nr_rgn_out_edges = 0;
      fst_out_edge = (out_edges[pred]);
      nxt_out_edge = (edge_table[fst_out_edge].next_out);
      sbitmap_a_or_b (pot_split[bb], pot_split[bb], pot_split[(block_to_bb[pred])]);
      ((pot_split[bb])->elms [((edge_to_bit[fst_out_edge])) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << ((edge_to_bit[fst_out_edge])) % ((unsigned) (8 * 4)));
      if ((containing_rgn[(edge_table[fst_out_edge].to_block)]) !=
   (containing_rgn[(rgn_bb_table[current_blocks + (bb)])]))
 ++nr_rgn_out_edges;
      while (fst_out_edge != nxt_out_edge)
 {
   ++nr_out_edges;
   if ((containing_rgn[(edge_table[nxt_out_edge].to_block)]) !=
       (containing_rgn[(rgn_bb_table[current_blocks + (bb)])]))
     ++nr_rgn_out_edges;
   ((pot_split[bb])->elms [((edge_to_bit[nxt_out_edge])) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << ((edge_to_bit[nxt_out_edge])) % ((unsigned) (8 * 4)));
   nxt_out_edge = (edge_table[nxt_out_edge].next_out);
 }
      nr_out_edges -= nr_rgn_out_edges;
      if (nr_rgn_out_edges > 0)
 prob[bb] += 0.9 * prob[(block_to_bb[pred])] / nr_out_edges;
      else
 prob[bb] += prob[(block_to_bb[pred])] / nr_out_edges;
      nxt_in_edge = (edge_table[nxt_in_edge].next_in);
    }
  while (fst_in_edge != nxt_in_edge);
  ((dom[bb])->elms [(bb) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb) % ((unsigned) (8 * 4)));
  sbitmap_difference (pot_split[bb], pot_split[bb], ancestor_edges[bb]);
  if (sched_verbose >= 2)
    fprintf (sched_dump, ";;  bb_prob(%d, %d) = %3d\n", bb, (rgn_bb_table[current_blocks + (bb)]),
      (int) (100.0 * prob[bb]));
}
static void
split_edges (int bb_src, int bb_trg, edgelst *bl)
{
  sbitmap src = sbitmap_alloc (pot_split[bb_src]->n_bits);
  sbitmap_copy (src, pot_split[bb_src]);
  sbitmap_difference (src, src, pot_split[bb_trg]);
  extract_bitlst (src, bl);
  free(src);
}
static void
compute_trg_info (int trg)
{
  candidate *sp;
  edgelst el;
  int check_block, update_idx;
  int i, j, k, fst_edge, nxt_edge;
  sp = candidate_table + trg;
  sp->is_valid = 1;
  sp->is_speculative = 0;
  sp->src_prob = 100;
  for (i = trg + 1; i < current_nr_blocks; i++)
    {
      sp = candidate_table + i;
      sp->is_valid = ( ((dom[i])->elms [(trg) / ((unsigned) (8 * 4))] >> (trg) % ((unsigned) (8 * 4)) & 1) );
      if (sp->is_valid)
 {
   sp->src_prob = ((int) (100.0 * (prob[i] / prob[trg])));
   sp->is_valid = (sp->src_prob >= 40);
 }
      if (sp->is_valid)
 {
   split_edges (i, trg, &el);
   sp->is_speculative = (el.nr_members) ? 1 : 0;
   if (sp->is_speculative && !flag_schedule_speculative)
     sp->is_valid = 0;
 }
      if (sp->is_valid)
 {
   char *update_blocks;
   sp->split_bbs.first_member = &bblst_table[bblst_last];
   sp->split_bbs.nr_members = el.nr_members;
   for (j = 0; j < el.nr_members; bblst_last++, j++)
     bblst_table[bblst_last] =
       (edge_table[rgn_edges[el.first_member[j]]].to_block);
   sp->update_bbs.first_member = &bblst_table[bblst_last];
   update_blocks = C_alloca(last_basic_block);
   memset (update_blocks, 0, last_basic_block);
   update_idx = 0;
   for (j = 0; j < el.nr_members; j++)
     {
       check_block = (edge_table[rgn_edges[el.first_member[j]]].from_block);
       fst_edge = nxt_edge = (out_edges[check_block]);
       do
  {
    if (! update_blocks[(edge_table[nxt_edge].to_block)])
      {
        for (k = 0; k < el.nr_members; k++)
   if ((edge_to_bit[nxt_edge]) == el.first_member[k])
     break;
        if (k >= el.nr_members)
   {
     bblst_table[bblst_last++] = (edge_table[nxt_edge].to_block);
     update_blocks[(edge_table[nxt_edge].to_block)] = 1;
     update_idx++;
   }
      }
    nxt_edge = (edge_table[nxt_edge].next_out);
  }
       while (fst_edge != nxt_edge);
     }
   sp->update_bbs.nr_members = update_idx;
   if (bblst_last > bblst_size)
     abort ();
 }
      else
 {
   sp->split_bbs.nr_members = sp->update_bbs.nr_members = 0;
   sp->is_speculative = 0;
   sp->src_prob = 0;
 }
    }
}
void
debug_candidate (int i)
{
  if (!candidate_table[i].is_valid)
    return;
  if (candidate_table[i].is_speculative)
    {
      int j;
      fprintf (sched_dump, "src b %d bb %d speculative \n", (rgn_bb_table[current_blocks + (i)]), i);
      fprintf (sched_dump, "split path: ");
      for (j = 0; j < candidate_table[i].split_bbs.nr_members; j++)
 {
   int b = candidate_table[i].split_bbs.first_member[j];
   fprintf (sched_dump, " %d ", b);
 }
      fprintf (sched_dump, "\n");
      fprintf (sched_dump, "update path: ");
      for (j = 0; j < candidate_table[i].update_bbs.nr_members; j++)
 {
   int b = candidate_table[i].update_bbs.first_member[j];
   fprintf (sched_dump, " %d ", b);
 }
      fprintf (sched_dump, "\n");
    }
  else
    {
      fprintf (sched_dump, " src %d equivalent\n", (rgn_bb_table[current_blocks + (i)]));
    }
}
void
debug_candidates (int trg)
{
  int i;
  fprintf (sched_dump, "----------- candidate table: target: b=%d bb=%d ---\n",
    (rgn_bb_table[current_blocks + (trg)]), trg);
  for (i = trg + 1; i < current_nr_blocks; i++)
    debug_candidate (i);
}
static int
check_live_1 (int src, rtx x)
{
  int i;
  int regno;
  rtx reg = (((x)->u.fld[0]).rtx1);
  if (reg == 0)
    return 1;
  while (((enum rtx_code) (reg)->code) == SUBREG || ((enum rtx_code) (reg)->code) == ZERO_EXTRACT
  || ((enum rtx_code) (reg)->code) == SIGN_EXTRACT
  || ((enum rtx_code) (reg)->code) == STRICT_LOW_PART)
    reg = (((reg)->u.fld[0]).rtx1);
  if (((enum rtx_code) (reg)->code) == PARALLEL)
    {
      int i;
      for (i = (((((reg)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 if (((((((((reg)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1) != 0)
   if (check_live_1 (src, ((((((((reg)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1)))
     return 1;
      return 0;
    }
  if (!(((enum rtx_code) (reg)->code) == REG))
    return 1;
  regno = (((reg)->u.fld[0]).rtuint);
  if (regno < 53 && global_regs[regno])
    {
      return 0;
    }
  else
    {
      if (regno < 53)
 {
   int j = hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)];
   while (--j >= 0)
     {
       for (i = 0; i < candidate_table[src].split_bbs.nr_members; i++)
  {
    int b = candidate_table[src].split_bbs.first_member[i];
    if (bitmap_bit_p ((((basic_block_info)->data.bb[(b)]))->global_live_at_start, regno + j)
                     )
      {
        return 0;
      }
  }
     }
 }
      else
 {
   for (i = 0; i < candidate_table[src].split_bbs.nr_members; i++)
     {
       int b = candidate_table[src].split_bbs.first_member[i];
       if (bitmap_bit_p ((((basic_block_info)->data.bb[(b)]))->global_live_at_start, regno))
  {
    return 0;
  }
     }
 }
    }
  return 1;
}
static void
update_live_1 (int src, rtx x)
{
  int i;
  int regno;
  rtx reg = (((x)->u.fld[0]).rtx1);
  if (reg == 0)
    return;
  while (((enum rtx_code) (reg)->code) == SUBREG || ((enum rtx_code) (reg)->code) == ZERO_EXTRACT
  || ((enum rtx_code) (reg)->code) == SIGN_EXTRACT
  || ((enum rtx_code) (reg)->code) == STRICT_LOW_PART)
    reg = (((reg)->u.fld[0]).rtx1);
  if (((enum rtx_code) (reg)->code) == PARALLEL)
    {
      int i;
      for (i = (((((reg)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
 if (((((((((reg)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1) != 0)
   update_live_1 (src, ((((((((reg)->u.fld[0]).rtvec1))->elem[i]))->u.fld[0]).rtx1));
      return;
    }
  if (!(((enum rtx_code) (reg)->code) == REG))
    return;
  regno = (((reg)->u.fld[0]).rtuint);
  if (regno >= 53 || !global_regs[regno])
    {
      if (regno < 53)
 {
   int j = hard_regno_nregs[regno][((enum machine_mode) (reg)->mode)];
   while (--j >= 0)
     {
       for (i = 0; i < candidate_table[src].update_bbs.nr_members; i++)
  {
    int b = candidate_table[src].update_bbs.first_member[i];
    bitmap_set_bit ((((basic_block_info)->data.bb[(b)]))->global_live_at_start, regno + j)
                   ;
  }
     }
 }
      else
 {
   for (i = 0; i < candidate_table[src].update_bbs.nr_members; i++)
     {
       int b = candidate_table[src].update_bbs.first_member[i];
       bitmap_set_bit ((((basic_block_info)->data.bb[(b)]))->global_live_at_start, regno);
     }
 }
    }
}
static int
check_live (rtx insn, int src)
{
  if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET
      || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER)
    return check_live_1 (src, (((insn)->u.fld[5]).rtx1));
  else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL)
    {
      int j;
      for (j = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; j >= 0; j--)
 if ((((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[j]))->code) == SET
      || ((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[j]))->code) == CLOBBER)
     && !check_live_1 (src, ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[j])))
   return 0;
      return 1;
    }
  return 1;
}
static void
update_live (rtx insn, int src)
{
  if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET
      || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER)
    update_live_1 (src, (((insn)->u.fld[5]).rtx1));
  else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == PARALLEL)
    {
      int j;
      for (j = ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) - 1; j >= 0; j--)
 if (((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[j]))->code) == SET
     || ((enum rtx_code) (((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[j]))->code) == CLOBBER)
   update_live_1 (src, ((((((((insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[j]));
    }
}
static void
set_spec_fed (rtx load_insn)
{
  rtx link;
  for (link = (h_i_d[(((load_insn)->u.fld[0]).rtint)].depend); link; link = (((link)->u.fld[1]).rtx1))
    if (((enum machine_mode) (link)->mode) == VOIDmode)
      (h_i_d[((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtint)].fed_by_spec_load) = 1;
}
static int
find_conditional_protection (rtx insn, int load_insn_bb)
{
  rtx link;
  for (link = (h_i_d[(((insn)->u.fld[0]).rtint)].depend); link; link = (((link)->u.fld[1]).rtx1))
    {
      rtx next = (((link)->u.fld[0]).rtx1);
      if (((containing_rgn[((((next)->u.fld[3]).bb)->index + 0)]) ==
    (containing_rgn[(rgn_bb_table[current_blocks + (load_insn_bb)])]))
   && (((block_to_bb[((((next)->u.fld[3]).bb)->index + 0)])) == load_insn_bb || (!((block_to_bb[((((next)->u.fld[3]).bb)->index + 0)]))) || (((ancestor_edges[load_insn_bb])->elms [((edge_to_bit[(in_edges[(rgn_bb_table[current_blocks + (((block_to_bb[((((next)->u.fld[3]).bb)->index + 0)])))])])])) / ((unsigned) (8 * 4))] >> ((edge_to_bit[(in_edges[(rgn_bb_table[current_blocks + (((block_to_bb[((((next)->u.fld[3]).bb)->index + 0)])))])])])) % ((unsigned) (8 * 4)) & 1)))
   && load_insn_bb != ((block_to_bb[((((next)->u.fld[3]).bb)->index + 0)]))
   && ((enum machine_mode) (link)->mode) == VOIDmode
   && (((enum rtx_code) (next)->code) == JUMP_INSN
       || find_conditional_protection (next, load_insn_bb)))
 return 1;
    }
  return 0;
}
static int
is_conditionally_protected (rtx load_insn, int bb_src, int bb_trg)
{
  rtx link;
  for (link = (((load_insn)->u.fld[7]).rtx1); link; link = (((link)->u.fld[1]).rtx1))
    {
      rtx insn1 = (((link)->u.fld[0]).rtx1);
      if (((enum machine_mode) (link)->mode) != VOIDmode
   || ((enum rtx_code) (insn1)->code) == JUMP_INSN)
 continue;
      if (((block_to_bb[((((insn1)->u.fld[3]).bb)->index + 0)])) == bb_src
   || ((containing_rgn[((((insn1)->u.fld[3]).bb)->index + 0)])
       != (containing_rgn[(rgn_bb_table[current_blocks + (bb_src)])]))
   || (!(bb_trg == ((block_to_bb[((((insn1)->u.fld[3]).bb)->index + 0)])) || (!bb_trg) || (((ancestor_edges[((block_to_bb[((((insn1)->u.fld[3]).bb)->index + 0)]))])->elms [((edge_to_bit[(in_edges[(rgn_bb_table[current_blocks + (bb_trg)])])])) / ((unsigned) (8 * 4))] >> ((edge_to_bit[(in_edges[(rgn_bb_table[current_blocks + (bb_trg)])])])) % ((unsigned) (8 * 4)) & 1)))
       && !(((block_to_bb[((((insn1)->u.fld[3]).bb)->index + 0)])) == bb_trg || (!((block_to_bb[((((insn1)->u.fld[3]).bb)->index + 0)]))) || (((ancestor_edges[bb_trg])->elms [((edge_to_bit[(in_edges[(rgn_bb_table[current_blocks + (((block_to_bb[((((insn1)->u.fld[3]).bb)->index + 0)])))])])])) / ((unsigned) (8 * 4))] >> ((edge_to_bit[(in_edges[(rgn_bb_table[current_blocks + (((block_to_bb[((((insn1)->u.fld[3]).bb)->index + 0)])))])])])) % ((unsigned) (8 * 4)) & 1)))))
 continue;
      if (find_conditional_protection (insn1, bb_src))
 return 1;
      return is_conditionally_protected (insn1, bb_src, bb_trg);
    }
  return 0;
}
static int
is_pfree (rtx load_insn, int bb_src, int bb_trg)
{
  rtx back_link;
  candidate *candp = candidate_table + bb_src;
  if (candp->split_bbs.nr_members != 1)
    return 0;
  for (back_link = (((load_insn)->u.fld[7]).rtx1);
       back_link; back_link = (((back_link)->u.fld[1]).rtx1))
    {
      rtx insn1 = (((back_link)->u.fld[0]).rtx1);
      if (((enum machine_mode) (back_link)->mode) == VOIDmode)
 {
   rtx fore_link;
   for (fore_link = (h_i_d[(((insn1)->u.fld[0]).rtint)].depend);
        fore_link; fore_link = (((fore_link)->u.fld[1]).rtx1))
     {
       rtx insn2 = (((fore_link)->u.fld[0]).rtx1);
       if (((enum machine_mode) (fore_link)->mode) == VOIDmode)
  {
    if (haifa_classify_insn (insn2) != PFREE_CANDIDATE)
      continue;
    if (((block_to_bb[((((insn2)->u.fld[3]).bb)->index + 0)])) == bb_trg)
      return 1;
    if (*(candp->split_bbs.first_member) == ((((insn2)->u.fld[3]).bb)->index + 0))
      return 1;
  }
     }
 }
    }
  return 0;
}
static int
is_prisky (rtx load_insn, int bb_src, int bb_trg)
{
  if ((h_i_d[(((load_insn)->u.fld[0]).rtint)].fed_by_spec_load))
    return 1;
  if ((((load_insn)->u.fld[7]).rtx1) == ((void *)0))
    return 1;
  if (is_conditionally_protected (load_insn, bb_src, bb_trg))
    return 1;
  return 0;
}
static int
is_exception_free (rtx insn, int bb_src, int bb_trg)
{
  int insn_class = haifa_classify_insn (insn);
  switch (insn_class)
    {
    case TRAP_FREE:
      return 1;
    case TRAP_RISKY:
      return 0;
    default:;
    }
  if (!flag_schedule_speculative_load)
    return 0;
  (h_i_d[(((insn)->u.fld[0]).rtint)].is_load_insn) = 1;
  switch (insn_class)
    {
    case IFREE:
      return (1);
    case IRISKY:
      return 0;
    case PFREE_CANDIDATE:
      if (is_pfree (insn, bb_src, bb_trg))
 return 1;
    case PRISKY_CANDIDATE:
      if (!flag_schedule_speculative_load_dangerous
   || is_prisky (insn, bb_src, bb_trg))
 return 0;
      break;
    default:;
    }
  return flag_schedule_speculative_load_dangerous;
}
static int sched_target_n_insns;
static int target_n_insns;
static int sched_n_insns;
static int last_was_jump;
static void init_ready_list_rgn (struct ready_list *);
static int can_schedule_ready_p_rgn (rtx);
static int new_ready_rgn (rtx);
static int schedule_more_p_rgn (void);
static const char *rgn_print_insn (rtx, int);
static int rgn_rank (rtx, rtx);
static int contributes_to_priority_rgn (rtx, rtx);
static void compute_jump_reg_dependencies_rgn (rtx, regset, regset, regset);
static int
schedule_more_p_rgn (void)
{
  return ! last_was_jump && sched_target_n_insns < target_n_insns;
}
static void
init_ready_list_rgn (struct ready_list *ready)
{
  rtx prev_head = current_sched_info->prev_head;
  rtx next_tail = current_sched_info->next_tail;
  int bb_src;
  rtx insn;
  target_n_insns = 0;
  sched_target_n_insns = 0;
  sched_n_insns = 0;
  last_was_jump = 0;
  if (sched_verbose >= 5)
    debug_dependencies ();
  if (current_nr_blocks > 1)
    {
      candidate_table = xmalloc (current_nr_blocks * sizeof (candidate));
      bblst_last = 0;
      bblst_size = (current_nr_blocks - target_bb) * rgn_nr_edges;
      bblst_table = xmalloc (bblst_size * sizeof (int));
      bitlst_table_last = 0;
      bitlst_table = xmalloc (rgn_nr_edges * sizeof (int));
      compute_trg_info (target_bb);
    }
  for (insn = (((prev_head)->u.fld[2]).rtx1); insn != next_tail; insn = (((insn)->u.fld[2]).rtx1))
    {
      if ((h_i_d[(((insn)->u.fld[0]).rtint)].dep_count) == 0)
 {
   ready_add (ready, insn);
   if (targetm.sched.adjust_priority)
     (h_i_d[(((insn)->u.fld[0]).rtint)].priority) =
       targetm.sched.adjust_priority (insn, (h_i_d[(((insn)->u.fld[0]).rtint)].priority));
 }
      target_n_insns++;
    }
  for (bb_src = target_bb + 1; bb_src < current_nr_blocks; bb_src++)
    if (( candidate_table[bb_src].is_valid ))
      {
 rtx src_head;
 rtx src_next_tail;
 rtx tail, head;
 get_block_head_tail ((rgn_bb_table[current_blocks + (bb_src)]), &head, &tail);
 src_next_tail = (((tail)->u.fld[2]).rtx1);
 src_head = head;
 for (insn = src_head; insn != src_next_tail; insn = (((insn)->u.fld[2]).rtx1))
   {
     if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
       continue;
     if (!(h_i_d[(((insn)->u.fld[0]).rtint)].cant_move)
  && (!(( candidate_table[(block_to_bb[((((insn)->u.fld[3]).bb)->index + 0)])].is_speculative ))
      || ((((!targetm.sched.use_dfa_pipeline_interface
      || !targetm.sched.use_dfa_pipeline_interface ())
     && insn_issue_delay (insn) <= 3)
    || (targetm.sched.use_dfa_pipeline_interface
        && targetm.sched.use_dfa_pipeline_interface ()
        && (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)) < 0
            || min_insn_conflict_delay (curr_state,
            insn, insn) <= 3)))
   && check_live (insn, bb_src)
   && is_exception_free (insn, bb_src, target_bb))))
       if ((h_i_d[(((insn)->u.fld[0]).rtint)].dep_count) == 0)
  {
    ready_add (ready, insn);
    if (targetm.sched.adjust_priority)
      (h_i_d[(((insn)->u.fld[0]).rtint)].priority) =
        targetm.sched.adjust_priority (insn, (h_i_d[(((insn)->u.fld[0]).rtint)].priority));
  }
   }
      }
}
static int
can_schedule_ready_p_rgn (rtx insn)
{
  if (((enum rtx_code) (insn)->code) == JUMP_INSN)
    last_was_jump = 1;
  if (((block_to_bb[((((insn)->u.fld[3]).bb)->index + 0)])) != target_bb)
    {
      basic_block b1;
      if ((( candidate_table[(block_to_bb[((((insn)->u.fld[3]).bb)->index + 0)])].is_speculative )))
 {
   if (!check_live (insn, ((block_to_bb[((((insn)->u.fld[3]).bb)->index + 0)]))))
     return 0;
   update_live (insn, ((block_to_bb[((((insn)->u.fld[3]).bb)->index + 0)])));
   if ((h_i_d[(((insn)->u.fld[0]).rtint)].is_load_insn) || (h_i_d[(((insn)->u.fld[0]).rtint)].fed_by_spec_load))
     set_spec_fed (insn);
   nr_spec++;
 }
      nr_inter++;
      b1 = (((insn)->u.fld[3]).bb);
      if (insn == (b1)->head_ && insn == (b1)->end_)
 {
   rtx note = emit_note_after (NOTE_INSN_DELETED, insn);
   (b1)->head_ = note;
   (b1)->end_ = note;
 }
      else if (insn == (b1)->end_)
 {
   (b1)->end_ = (((insn)->u.fld[1]).rtx1);
 }
      else if (insn == (b1)->head_)
 {
   (b1)->head_ = (((insn)->u.fld[2]).rtx1);
 }
    }
  else
    {
      sched_target_n_insns++;
    }
  sched_n_insns++;
  return 1;
}
static int
new_ready_rgn (rtx next)
{
  if (((block_to_bb[((((next)->u.fld[3]).bb)->index + 0)])) != target_bb
      && (!( candidate_table[((block_to_bb[((((next)->u.fld[3]).bb)->index + 0)]))].is_valid )
   || (h_i_d[(((next)->u.fld[0]).rtint)].cant_move)
   || ((( candidate_table[(block_to_bb[((((next)->u.fld[3]).bb)->index + 0)])].is_speculative ))
       && (0
    || (targetm.sched.use_dfa_pipeline_interface
        && targetm.sched.use_dfa_pipeline_interface ()
        && ((((next)->u.fld[6]).rtint) >= 0 ? (((next)->u.fld[6]).rtint) : recog_memoized_1 (next)) >= 0
        && min_insn_conflict_delay (curr_state, next,
        next) > 3)
    || ((!targetm.sched.use_dfa_pipeline_interface
         || !targetm.sched.use_dfa_pipeline_interface ())
        && insn_issue_delay (next) > 3)
    || !check_live (next, ((block_to_bb[((((next)->u.fld[3]).bb)->index + 0)])))
    || !is_exception_free (next, ((block_to_bb[((((next)->u.fld[3]).bb)->index + 0)])), target_bb)))))
    return 0;
  return 1;
}
static const char *
rgn_print_insn (rtx insn, int aligned)
{
  static char tmp[80];
  if (aligned)
    sprintf (tmp, "b%3d: i%4d", ((block_to_bb[((((insn)->u.fld[3]).bb)->index + 0)])), (((insn)->u.fld[0]).rtint));
  else
    {
      if (current_nr_blocks > 1 && ((block_to_bb[((((insn)->u.fld[3]).bb)->index + 0)])) != target_bb)
 sprintf (tmp, "%d/b%d", (((insn)->u.fld[0]).rtint), ((block_to_bb[((((insn)->u.fld[3]).bb)->index + 0)])));
      else
 sprintf (tmp, "%d", (((insn)->u.fld[0]).rtint));
    }
  return tmp;
}
static int
rgn_rank (rtx insn1, rtx insn2)
{
  if (((block_to_bb[((((insn1)->u.fld[3]).bb)->index + 0)])) != ((block_to_bb[((((insn2)->u.fld[3]).bb)->index + 0)])))
    {
      int spec_val, prob_val;
      if ((((block_to_bb[((((insn2)->u.fld[3]).bb)->index + 0)])) == target_bb) && (((block_to_bb[((((insn1)->u.fld[3]).bb)->index + 0)])) != target_bb))
 return 1;
      if ((((block_to_bb[((((insn1)->u.fld[3]).bb)->index + 0)])) == target_bb) && (((block_to_bb[((((insn2)->u.fld[3]).bb)->index + 0)])) != target_bb))
 return -1;
      spec_val = (( candidate_table[(block_to_bb[((((insn1)->u.fld[3]).bb)->index + 0)])].is_speculative )) - (( candidate_table[(block_to_bb[((((insn2)->u.fld[3]).bb)->index + 0)])].is_speculative ));
      if (spec_val)
 return spec_val;
      prob_val = (( candidate_table[(block_to_bb[((((insn2)->u.fld[3]).bb)->index + 0)])].src_prob )) - (( candidate_table[(block_to_bb[((((insn1)->u.fld[3]).bb)->index + 0)])].src_prob ));
      if (prob_val)
 return prob_val;
    }
  return 0;
}
static int
contributes_to_priority_rgn (rtx next, rtx insn)
{
  return ((((next)->u.fld[3]).bb)->index + 0) == ((((insn)->u.fld[3]).bb)->index + 0);
}
static void
compute_jump_reg_dependencies_rgn (rtx insn ,
          regset cond_exec ,
          regset used ,
          regset set )
{
}
static struct sched_info region_sched_info =
{
  init_ready_list_rgn,
  can_schedule_ready_p_rgn,
  schedule_more_p_rgn,
  new_ready_rgn,
  rgn_rank,
  rgn_print_insn,
  contributes_to_priority_rgn,
  compute_jump_reg_dependencies_rgn,
  ((void *)0), ((void *)0),
  ((void *)0), ((void *)0),
  0, 0, 0
};
static unsigned char
sets_likely_spilled (rtx pat)
{
  unsigned char ret = 0;
  note_stores (pat, sets_likely_spilled_1, &ret);
  return ret;
}
static void
sets_likely_spilled_1 (rtx x, rtx pat, void *data)
{
  unsigned char *ret = (unsigned char *) data;
  if (((enum rtx_code) (pat)->code) == SET
      && (((enum rtx_code) (x)->code) == REG)
      && (((x)->u.fld[0]).rtuint) < 53
      && ((((regclass_map[(((x)->u.fld[0]).rtuint)])) == AREG) || (((regclass_map[(((x)->u.fld[0]).rtuint)])) == DREG) || (((regclass_map[(((x)->u.fld[0]).rtuint)])) == CREG) || (((regclass_map[(((x)->u.fld[0]).rtuint)])) == BREG) || (((regclass_map[(((x)->u.fld[0]).rtuint)])) == AD_REGS) || (((regclass_map[(((x)->u.fld[0]).rtuint)])) == SIREG) || (((regclass_map[(((x)->u.fld[0]).rtuint)])) == DIREG) || (((regclass_map[(((x)->u.fld[0]).rtuint)])) == FP_TOP_REG) || (((regclass_map[(((x)->u.fld[0]).rtuint)])) == FP_SECOND_REG)))
    *ret = 1;
}
static void
add_branch_dependences (rtx head, rtx tail)
{
  rtx insn, last;
  insn = tail;
  last = 0;
  while (((enum rtx_code) (insn)->code) == CALL_INSN
  || ((enum rtx_code) (insn)->code) == JUMP_INSN
  || (((enum rtx_code) (insn)->code) == INSN
      && (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == USE
   || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == CLOBBER
   || can_throw_internal (insn)
   || (!reload_completed
       && sets_likely_spilled ((((insn)->u.fld[5]).rtx1)))))
  || ((enum rtx_code) (insn)->code) == NOTE)
    {
      if (((enum rtx_code) (insn)->code) != NOTE)
 {
   if (last != 0 && !find_insn_list (insn, (((last)->u.fld[7]).rtx1)))
     {
       add_dependence (last, insn, REG_DEP_ANTI);
       (h_i_d[(((insn)->u.fld[0]).rtint)].ref_count)++;
     }
   (h_i_d[(((insn)->u.fld[0]).rtint)].cant_move) = 1;
   last = insn;
 }
      if (insn == head)
 break;
      insn = (((insn)->u.fld[1]).rtx1);
    }
  insn = last;
  if (insn != 0)
    while (insn != head)
      {
 insn = prev_nonnote_insn (insn);
 if ((h_i_d[(((insn)->u.fld[0]).rtint)].ref_count) != 0)
   continue;
 add_dependence (last, insn, REG_DEP_ANTI);
 (h_i_d[(((insn)->u.fld[0]).rtint)].ref_count) = 1;
      }
}
static struct deps *bb_deps;
static rtx
concat_INSN_LIST (rtx copy, rtx old)
{
  rtx new = old;
  for (; copy ; copy = (((copy)->u.fld[1]).rtx1))
    new = alloc_INSN_LIST ((((copy)->u.fld[0]).rtx1), new);
  return new;
}
static void
concat_insn_mem_list (rtx copy_insns, rtx copy_mems, rtx *old_insns_p,
        rtx *old_mems_p)
{
  rtx new_insns = *old_insns_p;
  rtx new_mems = *old_mems_p;
  while (copy_insns)
    {
      new_insns = alloc_INSN_LIST ((((copy_insns)->u.fld[0]).rtx1), new_insns);
      new_mems = alloc_EXPR_LIST (VOIDmode, (((copy_mems)->u.fld[0]).rtx1), new_mems);
      copy_insns = (((copy_insns)->u.fld[1]).rtx1);
      copy_mems = (((copy_mems)->u.fld[1]).rtx1);
    }
  *old_insns_p = new_insns;
  *old_mems_p = new_mems;
}
static void
propagate_deps (int bb, struct deps *pred_deps)
{
  int b = (rgn_bb_table[current_blocks + (bb)]);
  int e, first_edge;
  first_edge = e = (out_edges[b]);
  if (e > 0)
    do
      {
 int b_succ = (edge_table[e].to_block);
 int bb_succ = (block_to_bb[b_succ]);
 struct deps *succ_deps = bb_deps + bb_succ;
 int reg;
 if ((containing_rgn[b]) != (containing_rgn[b_succ])
     || bb_succ <= bb)
   {
     e = (edge_table[e].next_out);
     continue;
   }
 do { bitmap_element *ptr_ = (&pred_deps->reg_last_in_use)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (reg) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { struct deps_reg *pred_rl = &pred_deps->reg_last[reg]; struct deps_reg *succ_rl = &succ_deps->reg_last[reg]; succ_rl->uses = concat_INSN_LIST (pred_rl->uses, succ_rl->uses); succ_rl->sets = concat_INSN_LIST (pred_rl->sets, succ_rl->sets); succ_rl->clobbers = concat_INSN_LIST (pred_rl->clobbers, succ_rl->clobbers); succ_rl->uses_length += pred_rl->uses_length; succ_rl->clobbers_length += pred_rl->clobbers_length; }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
     ;
 bitmap_operation (&succ_deps->reg_last_in_use, &succ_deps->reg_last_in_use, &pred_deps->reg_last_in_use, BITMAP_IOR);
 concat_insn_mem_list (pred_deps->pending_read_insns,
         pred_deps->pending_read_mems,
         &succ_deps->pending_read_insns,
         &succ_deps->pending_read_mems);
 concat_insn_mem_list (pred_deps->pending_write_insns,
         pred_deps->pending_write_mems,
         &succ_deps->pending_write_insns,
         &succ_deps->pending_write_mems);
 succ_deps->last_pending_memory_flush
   = concat_INSN_LIST (pred_deps->last_pending_memory_flush,
         succ_deps->last_pending_memory_flush);
 succ_deps->pending_lists_length += pred_deps->pending_lists_length;
 succ_deps->pending_flush_length += pred_deps->pending_flush_length;
 succ_deps->last_function_call
   = concat_INSN_LIST (pred_deps->last_function_call,
         succ_deps->last_function_call);
 succ_deps->sched_before_next_call
   = concat_INSN_LIST (pred_deps->sched_before_next_call,
         succ_deps->sched_before_next_call);
 e = (edge_table[e].next_out);
      }
    while (e != first_edge);
  bb_deps[bb].pending_read_insns = pred_deps->pending_read_insns;
  bb_deps[bb].pending_read_mems = pred_deps->pending_read_mems;
  bb_deps[bb].pending_write_insns = pred_deps->pending_write_insns;
  bb_deps[bb].pending_write_mems = pred_deps->pending_write_mems;
  pred_deps->pending_read_insns = 0;
  pred_deps->pending_read_mems = 0;
  pred_deps->pending_write_insns = 0;
  pred_deps->pending_write_mems = 0;
}
static void
compute_block_backward_dependences (int bb)
{
  rtx head, tail;
  struct deps tmp_deps;
  tmp_deps = bb_deps[bb];
  get_block_head_tail ((rgn_bb_table[current_blocks + (bb)]), &head, &tail);
  sched_analyze (&tmp_deps, head, tail);
  add_branch_dependences (head, tail);
  if (current_nr_blocks > 1)
    propagate_deps (bb, &tmp_deps);
  free_deps (&tmp_deps);
}
static void
free_pending_lists (void)
{
  int bb;
  for (bb = 0; bb < current_nr_blocks; bb++)
    {
      free_INSN_LIST_list (&bb_deps[bb].pending_read_insns);
      free_INSN_LIST_list (&bb_deps[bb].pending_write_insns);
      free_EXPR_LIST_list (&bb_deps[bb].pending_read_mems);
      free_EXPR_LIST_list (&bb_deps[bb].pending_write_mems);
    }
}
void
debug_dependencies (void)
{
  int bb;
  fprintf (sched_dump, ";;   --------------- forward dependences: ------------ \n");
  for (bb = 0; bb < current_nr_blocks; bb++)
    {
      if (1)
 {
   rtx head, tail;
   rtx next_tail;
   rtx insn;
   get_block_head_tail ((rgn_bb_table[current_blocks + (bb)]), &head, &tail);
   next_tail = (((tail)->u.fld[2]).rtx1);
   fprintf (sched_dump, "\n;;   --- Region Dependences --- b %d bb %d \n",
     (rgn_bb_table[current_blocks + (bb)]), bb);
   if (targetm.sched.use_dfa_pipeline_interface
       && targetm.sched.use_dfa_pipeline_interface ())
     {
       fprintf (sched_dump, ";;   %7s%6s%6s%6s%6s%6s%14s\n",
         "insn", "code", "bb", "dep", "prio", "cost",
         "reservation");
       fprintf (sched_dump, ";;   %7s%6s%6s%6s%6s%6s%14s\n",
         "----", "----", "--", "---", "----", "----",
         "-----------");
     }
   else
     {
       fprintf (sched_dump, ";;   %7s%6s%6s%6s%6s%6s%11s%6s\n",
       "insn", "code", "bb", "dep", "prio", "cost", "blockage", "units");
       fprintf (sched_dump, ";;   %7s%6s%6s%6s%6s%6s%11s%6s\n",
       "----", "----", "--", "---", "----", "----", "--------", "-----");
     }
   for (insn = head; insn != next_tail; insn = (((insn)->u.fld[2]).rtx1))
     {
       rtx link;
       if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
  {
    int n;
    fprintf (sched_dump, ";;   %6d ", (((insn)->u.fld[0]).rtint));
    if (((enum rtx_code) (insn)->code) == NOTE)
      {
        n = (((insn)->u.fld[5]).rtint);
        if (n < 0)
   fprintf (sched_dump, "%s\n", (note_insn_name[(n) - (int) NOTE_INSN_BIAS]));
        else
   {
     expanded_location xloc;
     ((xloc).file = (((insn)->u.fld[4]).rtstr), (xloc).line = (((insn)->u.fld[5]).rtint));
     fprintf (sched_dump, "line %d, file %s\n",
       xloc.line, xloc.file);
   }
      }
    else
      fprintf (sched_dump, " {%s}\n", (rtx_name[(int) (((enum rtx_code) (insn)->code))]));
    continue;
  }
       if (targetm.sched.use_dfa_pipeline_interface
    && targetm.sched.use_dfa_pipeline_interface ())
  {
    fprintf (sched_dump,
      ";;   %s%5d%6d%6d%6d%6d%6d   ",
      ((((insn))->in_struct) ? "+" : " "),
      (((insn)->u.fld[0]).rtint),
      (((insn)->u.fld[6]).rtint),
      ((block_to_bb[((((insn)->u.fld[3]).bb)->index + 0)])),
      (h_i_d[(((insn)->u.fld[0]).rtint)].dep_count),
      (h_i_d[(((insn)->u.fld[0]).rtint)].priority),
      insn_cost (insn, 0, 0));
    if (((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)) < 0)
      fprintf (sched_dump, "nothing");
    else
      print_reservation (sched_dump, insn);
  }
       else
  {
    int unit = insn_unit (insn);
    int range
      = (unit < 0
         || function_units[unit].blockage_range_function == 0
         ? 0
         : function_units[unit].blockage_range_function (insn));
    fprintf (sched_dump,
      ";;   %s%5d%6d%6d%6d%6d%6d  %3d -%3d   ",
      ((((insn))->in_struct) ? "+" : " "),
      (((insn)->u.fld[0]).rtint),
      (((insn)->u.fld[6]).rtint),
      ((block_to_bb[((((insn)->u.fld[3]).bb)->index + 0)])),
      (h_i_d[(((insn)->u.fld[0]).rtint)].dep_count),
      (h_i_d[(((insn)->u.fld[0]).rtint)].priority),
      insn_cost (insn, 0, 0),
      (int) ((range) >> ((8 * 4) / 2)),
      (int) ((range) & ((1 << ((8 * 4) / 2)) - 1)));
    insn_print_units (insn);
  }
       fprintf (sched_dump, "\t: ");
       for (link = (h_i_d[(((insn)->u.fld[0]).rtint)].depend); link; link = (((link)->u.fld[1]).rtx1))
  fprintf (sched_dump, "%d ", ((((((link)->u.fld[0]).rtx1))->u.fld[0]).rtint));
       fprintf (sched_dump, "\n");
     }
 }
    }
  fprintf (sched_dump, "\n");
}
static void
schedule_region (int rgn)
{
  int bb;
  int rgn_n_insns = 0;
  int sched_rgn_n_insns = 0;
  current_nr_blocks = (rgn_table[rgn].rgn_nr_blocks);
  current_blocks = (rgn_table[rgn].rgn_blocks);
  init_deps_global ();
  bb_deps = xmalloc (sizeof (struct deps) * current_nr_blocks);
  for (bb = 0; bb < current_nr_blocks; bb++)
    init_deps (bb_deps + bb);
  for (bb = 0; bb < current_nr_blocks; bb++)
    compute_block_backward_dependences (bb);
  for (bb = current_nr_blocks - 1; bb >= 0; bb--)
    {
      rtx head, tail;
      get_block_head_tail ((rgn_bb_table[current_blocks + (bb)]), &head, &tail);
      compute_forward_dependences (head, tail);
      if (targetm.sched.dependencies_evaluation_hook)
 targetm.sched.dependencies_evaluation_hook (head, tail);
    }
  for (bb = 0; bb < current_nr_blocks; bb++)
    {
      rtx head, tail;
      get_block_head_tail ((rgn_bb_table[current_blocks + (bb)]), &head, &tail);
      rgn_n_insns += set_priorities (head, tail);
    }
  if (current_nr_blocks > 1)
    {
      int i;
      prob = xmalloc ((current_nr_blocks) * sizeof (float));
      dom = sbitmap_vector_alloc (current_nr_blocks, current_nr_blocks);
      sbitmap_vector_zero (dom, current_nr_blocks);
      rgn_nr_edges = 0;
      edge_to_bit = xmalloc (nr_edges * sizeof (int));
      for (i = 1; i < nr_edges; i++)
 if ((containing_rgn[(edge_table[i].from_block)]) == rgn)
   (edge_to_bit[i]) = rgn_nr_edges++;
      rgn_edges = xmalloc (rgn_nr_edges * sizeof (int));
      rgn_nr_edges = 0;
      for (i = 1; i < nr_edges; i++)
 if ((containing_rgn[(edge_table[i].from_block)]) == (rgn))
   rgn_edges[rgn_nr_edges++] = i;
      pot_split = sbitmap_vector_alloc (current_nr_blocks, rgn_nr_edges);
      sbitmap_vector_zero (pot_split, current_nr_blocks);
      ancestor_edges = sbitmap_vector_alloc (current_nr_blocks, rgn_nr_edges);
      sbitmap_vector_zero (ancestor_edges, current_nr_blocks);
      for (bb = 0; bb < current_nr_blocks; bb++)
 compute_dom_prob_ps (bb);
    }
  for (bb = 0; bb < current_nr_blocks; bb++)
    {
      rtx head, tail;
      int b = (rgn_bb_table[current_blocks + (bb)]);
      get_block_head_tail (b, &head, &tail);
      if (no_real_insns_p (head, tail))
 continue;
      current_sched_info->prev_head = (((head)->u.fld[1]).rtx1);
      current_sched_info->next_tail = (((tail)->u.fld[2]).rtx1);
      if (write_symbols != NO_DEBUG)
 {
   save_line_notes (b, head, tail);
   rm_line_notes (head, tail);
 }
      if (((((enum rtx_code) (head)->code) == INSN) || (((enum rtx_code) (head)->code) == JUMP_INSN) || (((enum rtx_code) (head)->code) == CALL_INSN)))
 {
   rtx note;
   for (note = (((head)->u.fld[8]).rtx1); note; note = (((note)->u.fld[1]).rtx1))
     if (((enum reg_note) ((enum machine_mode) (note)->mode)) == REG_SAVE_NOTE)
       {
  remove_note (head, note);
  note = (((note)->u.fld[1]).rtx1);
  remove_note (head, note);
       }
 }
      rm_other_notes (head, tail);
      target_bb = bb;
      current_sched_info->queue_must_finish_empty
 = current_nr_blocks > 1 && !flag_schedule_interblock;
      schedule_block (b, rgn_n_insns);
      sched_rgn_n_insns += sched_n_insns;
      if (head == ((((basic_block_info)->data.bb[(b)])))->head_)
 ((((basic_block_info)->data.bb[(b)])))->head_ = current_sched_info->head;
      if (tail == ((((basic_block_info)->data.bb[(b)])))->end_)
 ((((basic_block_info)->data.bb[(b)])))->end_ = current_sched_info->tail;
      if (current_nr_blocks > 1)
 {
   free (candidate_table);
   free (bblst_table);
   free (bitlst_table);
 }
    }
  if (sched_rgn_n_insns != rgn_n_insns)
    abort ();
  if (write_symbols != NO_DEBUG)
    {
      for (bb = 0; bb < current_nr_blocks; bb++)
 {
   rtx head, tail;
   get_block_head_tail ((rgn_bb_table[current_blocks + (bb)]), &head, &tail);
   restore_line_notes (head, tail);
 }
    }
  free_pending_lists ();
  finish_deps_global ();
  free (bb_deps);
  if (current_nr_blocks > 1)
    {
      free (prob);
      free(dom);
      free(pot_split);
      free(ancestor_edges);
      free (edge_to_bit);
      free (rgn_edges);
    }
}
static int *deaths_in_region;
static void
init_regions (void)
{
  sbitmap blocks;
  int rgn;
  nr_regions = 0;
  rgn_table = xmalloc ((n_basic_blocks) * sizeof (region));
  rgn_bb_table = xmalloc ((n_basic_blocks) * sizeof (int));
  block_to_bb = xmalloc ((last_basic_block) * sizeof (int));
  containing_rgn = xmalloc ((last_basic_block) * sizeof (int));
  if (reload_completed
      || n_basic_blocks == 1
      || !flag_schedule_interblock)
    {
      find_single_block_region ();
    }
  else
    {
      if (is_cfg_nonregular ())
 {
   find_single_block_region ();
 }
      else
 {
   struct edge_list *edge_list;
   edge_list = create_edge_list ();
   calculate_dominance_info (CDI_DOMINATORS);
   if (build_control_flow (edge_list) != 0)
     find_single_block_region ();
   else
     find_rgns (edge_list);
   if (sched_verbose >= 3)
     debug_regions ();
   free_edge_list (edge_list);
   free_dominance_info (CDI_DOMINATORS);
 }
    }
  if (0)
    {
      blocks = sbitmap_alloc (last_basic_block);
      deaths_in_region = xmalloc (sizeof (int) * nr_regions);
      for (rgn = 0; rgn < nr_regions; rgn++)
 {
   int b;
   sbitmap_zero (blocks);
   for (b = (rgn_table[rgn].rgn_nr_blocks) - 1; b >= 0; --b)
     ((blocks)->elms [(rgn_bb_table[(rgn_table[rgn].rgn_blocks) + b]) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (rgn_bb_table[(rgn_table[rgn].rgn_blocks) + b]) % ((unsigned) (8 * 4)));
   deaths_in_region[rgn] = count_or_remove_death_notes (blocks, 1);
 }
      free(blocks);
    }
  else
    count_or_remove_death_notes (((void *)0), 1);
}
void
schedule_insns (FILE *dump_file)
{
  sbitmap large_region_blocks, blocks;
  int rgn;
  int any_large_regions;
  basic_block bb;
  if (n_basic_blocks == 0)
    return;
  nr_inter = 0;
  nr_spec = 0;
  sched_init (dump_file);
  init_regions ();
  current_sched_info = &region_sched_info;
  for (rgn = 0; rgn < nr_regions; rgn++)
    schedule_region (rgn);
  allocate_reg_life_data ();
  compute_bb_for_insn ();
  any_large_regions = 0;
  large_region_blocks = sbitmap_alloc (last_basic_block);
  sbitmap_zero (large_region_blocks);
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    ((large_region_blocks)->elms [(bb->index) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (bb->index) % ((unsigned) (8 * 4)));
  blocks = sbitmap_alloc (last_basic_block);
  sbitmap_zero (blocks);
  for (rgn = 0; rgn < nr_regions; rgn++)
    if ((rgn_table[rgn].rgn_nr_blocks) > 1)
      any_large_regions = 1;
    else
      {
 ((blocks)->elms [(rgn_bb_table[(rgn_table[rgn].rgn_blocks)]) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (rgn_bb_table[(rgn_table[rgn].rgn_blocks)]) % ((unsigned) (8 * 4)));
 ((large_region_blocks)->elms [(rgn_bb_table[(rgn_table[rgn].rgn_blocks)]) / ((unsigned) (8 * 4))] &= ~((unsigned long) 1 << (rgn_bb_table[(rgn_table[rgn].rgn_blocks)]) % ((unsigned) (8 * 4))));
      }
  update_life_info (blocks, UPDATE_LIFE_LOCAL,
      (reload_completed ? 1
       : 1 | 4));
  if (any_large_regions)
    {
      update_life_info (large_region_blocks, UPDATE_LIFE_GLOBAL,
   1 | 4);
    }
  if (0)
    {
      for (rgn = 0; rgn < nr_regions; rgn++)
 if ((rgn_table[rgn].rgn_nr_blocks) == 1)
   {
     sbitmap_zero (blocks);
     ((blocks)->elms [(rgn_bb_table[(rgn_table[rgn].rgn_blocks)]) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (rgn_bb_table[(rgn_table[rgn].rgn_blocks)]) % ((unsigned) (8 * 4)));
     if (deaths_in_region[rgn]
  != count_or_remove_death_notes (blocks, 0))
       abort ();
   }
      free (deaths_in_region);
    }
  if (reload_completed)
    reposition_prologue_and_epilogue_notes (get_insns ());
  if (write_symbols != NO_DEBUG)
    rm_redundant_line_notes ();
  if (sched_verbose)
    {
      if (reload_completed == 0 && flag_schedule_interblock)
 {
   fprintf (sched_dump,
     "\n;; Procedure interblock/speculative motions == %d/%d \n",
     nr_inter, nr_spec);
 }
      else
 {
   if (nr_inter > 0)
     abort ();
 }
      fprintf (sched_dump, "\n\n");
    }
  free (rgn_table);
  free (rgn_bb_table);
  free (block_to_bb);
  free (containing_rgn);
  sched_finish ();
  if (edge_table)
    {
      free (edge_table);
      edge_table = ((void *)0);
    }
  if (in_edges)
    {
      free (in_edges);
      in_edges = ((void *)0);
    }
  if (out_edges)
    {
      free (out_edges);
      out_edges = ((void *)0);
    }
  free(blocks);
  free(large_region_blocks);
}
static int target_units = 0;
static char *safe_concat (char *, char *, const char *);
static int get_visual_tbl_length (void);
static void print_exp (char *, rtx, int);
static void print_value (char *, rtx, int);
static void print_pattern (char *, rtx, int);
void
insn_print_units (rtx insn)
{
  int i;
  int unit = insn_unit (insn);
  if (unit == -1)
    fprintf (sched_dump, "none");
  else if (unit >= 0)
    fprintf (sched_dump, "%s", function_units[unit].name);
  else
    {
      fprintf (sched_dump, "[");
      for (i = 0, unit = ~unit; unit; i++, unit >>= 1)
 if (unit & 1)
   {
     fprintf (sched_dump, "%s", function_units[i].name);
     if (unit != 1)
       fprintf (sched_dump, " ");
   }
      fprintf (sched_dump, "]");
    }
}
int n_visual_lines;
static unsigned visual_tbl_line_length;
char *visual_tbl;
int n_vis_no_unit;
rtx vis_no_unit[20];
void
init_target_units (void)
{
  rtx insn;
  int unit;
  for (insn = get_last_insn (); insn; insn = (((insn)->u.fld[1]).rtx1))
    {
      if (! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 continue;
      unit = insn_unit (insn);
      if (unit < 0)
 target_units |= ~unit;
      else
 target_units |= (1 << unit);
    }
}
static int
get_visual_tbl_length (void)
{
  int unit, i;
  int n, n1;
  char *s;
  if (targetm.sched.use_dfa_pipeline_interface
      && targetm.sched.use_dfa_pipeline_interface ())
    {
      visual_tbl_line_length = 1;
      return 1;
    }
  s = C_alloca(30 + 6);
  sprintf (s, "  %33s", "uname");
  n1 = strlen (s);
  n = strlen (";; ");
  n += n1;
  for (unit = 0; unit < 0; unit++)
    if (function_units[unit].bitmask & target_units)
      for (i = 0; i < function_units[unit].multiplicity; i++)
 n += n1;
  n += n1;
  n += strlen ("\n") + 2;
  visual_tbl_line_length = n;
  return (100 * n);
}
void
init_block_visualization (void)
{
  strcpy (visual_tbl, "");
  n_visual_lines = 0;
  n_vis_no_unit = 0;
}
static char *
safe_concat (char *buf, char *cur, const char *str)
{
  char *end = buf + 2048 - 2;
  int c;
  if (cur > end)
    {
      *end = '\0';
      return end;
    }
  while (cur < end && (c = *str++) != '\0')
    *cur++ = c;
  *cur = '\0';
  return cur;
}
static void
print_exp (char *buf, rtx x, int verbose)
{
  char tmp[2048];
  const char *st[4];
  char *cur = buf;
  const char *fun = (char *) 0;
  const char *sep;
  rtx op[4];
  int i;
  for (i = 0; i < 4; i++)
    {
      st[i] = (char *) 0;
      op[i] = (rtx) 0;
    }
  switch (((enum rtx_code) (x)->code))
    {
    case PLUS:
      op[0] = (((x)->u.fld[0]).rtx1);
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((((x)->u.fld[1]).rtx1))->u.hwint[0]) < 0)
 {
   st[1] = "-";
   op[1] = gen_rtx_CONST_INT (VOIDmode, (long) (-(((((x)->u.fld[1]).rtx1))->u.hwint[0])));
 }
      else
 {
   st[1] = "+";
   op[1] = (((x)->u.fld[1]).rtx1);
 }
      break;
    case LO_SUM:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "+low(";
      op[1] = (((x)->u.fld[1]).rtx1);
      st[2] = ")";
      break;
    case MINUS:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "-";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case COMPARE:
      fun = "cmp";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case NEG:
      st[0] = "-";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case MULT:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "*";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case DIV:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "/";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case UDIV:
      fun = "udiv";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case MOD:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "%";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case UMOD:
      fun = "umod";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case SMIN:
      fun = "smin";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case SMAX:
      fun = "smax";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case UMIN:
      fun = "umin";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case UMAX:
      fun = "umax";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case NOT:
      st[0] = "!";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case AND:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "&";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case IOR:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "|";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case XOR:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "^";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case ASHIFT:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "<<";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case LSHIFTRT:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = " 0>>";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case ASHIFTRT:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = ">>";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case ROTATE:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "<-<";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case ROTATERT:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = ">->";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case ABS:
      fun = "abs";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case SQRT:
      fun = "sqrt";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case FFS:
      fun = "ffs";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case EQ:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "==";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case NE:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "!=";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case GT:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = ">";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case GTU:
      fun = "gtu";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case LT:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "<";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case LTU:
      fun = "ltu";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case GE:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = ">=";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case GEU:
      fun = "geu";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case LE:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "<=";
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case LEU:
      fun = "leu";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      break;
    case SIGN_EXTRACT:
      fun = (verbose) ? "sign_extract" : "sxt";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      op[2] = (((x)->u.fld[2]).rtx1);
      break;
    case ZERO_EXTRACT:
      fun = (verbose) ? "zero_extract" : "zxt";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      op[2] = (((x)->u.fld[2]).rtx1);
      break;
    case SIGN_EXTEND:
      fun = (verbose) ? "sign_extend" : "sxn";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case ZERO_EXTEND:
      fun = (verbose) ? "zero_extend" : "zxn";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case FLOAT_EXTEND:
      fun = (verbose) ? "float_extend" : "fxn";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case TRUNCATE:
      fun = (verbose) ? "trunc" : "trn";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case FLOAT_TRUNCATE:
      fun = (verbose) ? "float_trunc" : "ftr";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case FLOAT:
      fun = (verbose) ? "float" : "flt";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case UNSIGNED_FLOAT:
      fun = (verbose) ? "uns_float" : "ufl";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case FIX:
      fun = "fix";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case UNSIGNED_FIX:
      fun = (verbose) ? "uns_fix" : "ufx";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case PRE_DEC:
      st[0] = "--";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case PRE_INC:
      st[0] = "++";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case POST_DEC:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "--";
      break;
    case POST_INC:
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = "++";
      break;
    case CALL:
      st[0] = "call ";
      op[0] = (((x)->u.fld[0]).rtx1);
      if (verbose)
 {
   st[1] = " argc:";
   op[1] = (((x)->u.fld[1]).rtx1);
 }
      break;
    case IF_THEN_ELSE:
      st[0] = "{(";
      op[0] = (((x)->u.fld[0]).rtx1);
      st[1] = ")?";
      op[1] = (((x)->u.fld[1]).rtx1);
      st[2] = ":";
      op[2] = (((x)->u.fld[2]).rtx1);
      st[3] = "}";
      break;
    case TRAP_IF:
      fun = "trap_if";
      op[0] = (((x)->u.fld[0]).rtx1);
      break;
    case PREFETCH:
      fun = "prefetch";
      op[0] = (((x)->u.fld[0]).rtx1);
      op[1] = (((x)->u.fld[1]).rtx1);
      op[2] = (((x)->u.fld[2]).rtx1);
      break;
    case UNSPEC:
    case UNSPEC_VOLATILE:
      {
 cur = safe_concat (buf, cur, "unspec");
 if (((enum rtx_code) (x)->code) == UNSPEC_VOLATILE)
   cur = safe_concat (buf, cur, "/v");
 cur = safe_concat (buf, cur, "[");
 sep = "";
 for (i = 0; i < (((((x)->u.fld[0]).rtvec1))->num_elem); i++)
   {
     print_pattern (tmp, (((((x)->u.fld[0]).rtvec1))->elem[i]), verbose);
     cur = safe_concat (buf, cur, sep);
     cur = safe_concat (buf, cur, tmp);
     sep = ",";
   }
 cur = safe_concat (buf, cur, "] ");
 sprintf (tmp, "%d", (((x)->u.fld[1]).rtint));
 cur = safe_concat (buf, cur, tmp);
      }
      break;
    default:
      st[0] = (rtx_name[(int) (((enum rtx_code) (x)->code))]);
      break;
    }
  if (fun)
    {
      cur = safe_concat (buf, cur, fun);
      cur = safe_concat (buf, cur, "(");
    }
  for (i = 0; i < 4; i++)
    {
      if (st[i])
 cur = safe_concat (buf, cur, st[i]);
      if (op[i])
 {
   if (fun && i != 0)
     cur = safe_concat (buf, cur, ",");
   print_value (tmp, op[i], verbose);
   cur = safe_concat (buf, cur, tmp);
 }
    }
  if (fun)
    cur = safe_concat (buf, cur, ")");
}
static void
print_value (char *buf, rtx x, int verbose)
{
  char t[2048];
  char *cur = buf;
  switch (((enum rtx_code) (x)->code))
    {
    case CONST_INT:
      sprintf (t, "0x%lx", ((x)->u.hwint[0]));
      cur = safe_concat (buf, cur, t);
      break;
    case CONST_DOUBLE:
      if ((mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_VECTOR_FLOAT))
 real_to_decimal (t, ((struct real_value *)&((x)->u.hwint[0])), sizeof (t), 0, 1);
      else
 sprintf (t, "<0x%lx,0x%lx>", (long) ((x)->u.hwint[2]), (long) ((x)->u.hwint[3]));
      cur = safe_concat (buf, cur, t);
      break;
    case CONST_STRING:
      cur = safe_concat (buf, cur, "\"");
      cur = safe_concat (buf, cur, (((x)->u.fld[0]).rtstr));
      cur = safe_concat (buf, cur, "\"");
      break;
    case SYMBOL_REF:
      cur = safe_concat (buf, cur, "`");
      cur = safe_concat (buf, cur, (((x)->u.fld[0]).rtstr));
      cur = safe_concat (buf, cur, "'");
      break;
    case LABEL_REF:
      sprintf (t, "L%d", ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtint));
      cur = safe_concat (buf, cur, t);
      break;
    case CONST:
      print_value (t, (((x)->u.fld[0]).rtx1), verbose);
      cur = safe_concat (buf, cur, "const(");
      cur = safe_concat (buf, cur, t);
      cur = safe_concat (buf, cur, ")");
      break;
    case HIGH:
      print_value (t, (((x)->u.fld[0]).rtx1), verbose);
      cur = safe_concat (buf, cur, "high(");
      cur = safe_concat (buf, cur, t);
      cur = safe_concat (buf, cur, ")");
      break;
    case REG:
      if ((((x)->u.fld[0]).rtuint) < 53)
 {
   int c = reg_names[(((x)->u.fld[0]).rtuint)][0];
   if ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isdigit)))
     cur = safe_concat (buf, cur, "%");
   cur = safe_concat (buf, cur, reg_names[(((x)->u.fld[0]).rtuint)]);
 }
      else
 {
   sprintf (t, "r%d", (((x)->u.fld[0]).rtuint));
   cur = safe_concat (buf, cur, t);
 }
      break;
    case SUBREG:
      print_value (t, (((x)->u.fld[0]).rtx1), verbose);
      cur = safe_concat (buf, cur, t);
      sprintf (t, "#%d", (((x)->u.fld[1]).rtuint));
      cur = safe_concat (buf, cur, t);
      break;
    case SCRATCH:
      cur = safe_concat (buf, cur, "scratch");
      break;
    case CC0:
      cur = safe_concat (buf, cur, "cc0");
      break;
    case PC:
      cur = safe_concat (buf, cur, "pc");
      break;
    case MEM:
      print_value (t, (((x)->u.fld[0]).rtx1), verbose);
      cur = safe_concat (buf, cur, "[");
      cur = safe_concat (buf, cur, t);
      cur = safe_concat (buf, cur, "]");
      break;
    default:
      print_exp (t, x, verbose);
      cur = safe_concat (buf, cur, t);
      break;
    }
}
static void
print_pattern (char *buf, rtx x, int verbose)
{
  char t1[2048], t2[2048], t3[2048];
  switch (((enum rtx_code) (x)->code))
    {
    case SET:
      print_value (t1, (((x)->u.fld[0]).rtx1), verbose);
      print_value (t2, (((x)->u.fld[1]).rtx1), verbose);
      sprintf (buf, "%s=%s", t1, t2);
      break;
    case RETURN:
      sprintf (buf, "return");
      break;
    case CALL:
      print_exp (buf, x, verbose);
      break;
    case CLOBBER:
      print_value (t1, (((x)->u.fld[0]).rtx1), verbose);
      sprintf (buf, "clobber %s", t1);
      break;
    case USE:
      print_value (t1, (((x)->u.fld[0]).rtx1), verbose);
      sprintf (buf, "use %s", t1);
      break;
    case COND_EXEC:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == NE
   && ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1) == (const_int_rtx[64]))
 print_value (t1, ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), verbose);
      else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == EQ
        && ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1) == (const_int_rtx[64]))
 {
   t1[0] = '!';
   print_value (t1 + 1, ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), verbose);
 }
      else
 print_value (t1, (((x)->u.fld[0]).rtx1), verbose);
      print_pattern (t2, (((x)->u.fld[1]).rtx1), verbose);
      sprintf (buf, "(%s) %s", t1, t2);
      break;
    case PARALLEL:
      {
 int i;
 sprintf (t1, "{");
 for (i = 0; i < (((((x)->u.fld[0]).rtvec1))->num_elem); i++)
   {
     print_pattern (t2, (((((x)->u.fld[0]).rtvec1))->elem[i]), verbose);
     sprintf (t3, "%s%s;", t1, t2);
     strcpy (t1, t3);
   }
 sprintf (buf, "%s}", t1);
      }
      break;
    case SEQUENCE:
      abort ();
      break;
    case ASM_INPUT:
      sprintf (buf, "asm {%s}", (((x)->u.fld[0]).rtstr));
      break;
    case ADDR_VEC:
      break;
    case ADDR_DIFF_VEC:
      print_value (buf, (((x)->u.fld[0]).rtx1), verbose);
      break;
    case TRAP_IF:
      print_value (t1, (((x)->u.fld[0]).rtx1), verbose);
      sprintf (buf, "trap_if %s", t1);
      break;
    case UNSPEC:
      {
 int i;
 sprintf (t1, "unspec{");
 for (i = 0; i < (((((x)->u.fld[0]).rtvec1))->num_elem); i++)
   {
     print_pattern (t2, (((((x)->u.fld[0]).rtvec1))->elem[i]), verbose);
     sprintf (t3, "%s%s;", t1, t2);
     strcpy (t1, t3);
   }
 sprintf (buf, "%s}", t1);
      }
      break;
    case UNSPEC_VOLATILE:
      {
 int i;
 sprintf (t1, "unspec/v{");
 for (i = 0; i < (((((x)->u.fld[0]).rtvec1))->num_elem); i++)
   {
     print_pattern (t2, (((((x)->u.fld[0]).rtvec1))->elem[i]), verbose);
     sprintf (t3, "%s%s;", t1, t2);
     strcpy (t1, t3);
   }
 sprintf (buf, "%s}", t1);
      }
      break;
    default:
      print_value (buf, x, verbose);
    }
}
void
print_insn (char *buf, rtx x, int verbose)
{
  char t[2048];
  rtx insn = x;
  switch (((enum rtx_code) (x)->code))
    {
    case INSN:
      print_pattern (t, (((x)->u.fld[5]).rtx1), verbose);
      if (verbose)
 sprintf (buf, "%s: %s", (*current_sched_info->print_insn) (x, 1),
   t);
      else
 sprintf (buf, "%-4d %s", (((x)->u.fld[0]).rtint), t);
      break;
    case JUMP_INSN:
      print_pattern (t, (((x)->u.fld[5]).rtx1), verbose);
      if (verbose)
 sprintf (buf, "%s: jump %s", (*current_sched_info->print_insn) (x, 1),
   t);
      else
 sprintf (buf, "%-4d %s", (((x)->u.fld[0]).rtint), t);
      break;
    case CALL_INSN:
      x = (((insn)->u.fld[5]).rtx1);
      if (((enum rtx_code) (x)->code) == PARALLEL)
 {
   x = (((((x)->u.fld[0]).rtvec1))->elem[0]);
   print_pattern (t, x, verbose);
 }
      else
 strcpy (t, "call <...>");
      if (verbose)
 sprintf (buf, "%s: %s", (*current_sched_info->print_insn) (x, 1), t);
      else
 sprintf (buf, "%-4d %s", (((insn)->u.fld[0]).rtint), t);
      break;
    case CODE_LABEL:
      sprintf (buf, "L%d:", (((x)->u.fld[0]).rtint));
      break;
    case BARRIER:
      sprintf (buf, "i% 4d: barrier", (((x)->u.fld[0]).rtint));
      break;
    case NOTE:
      if ((((x)->u.fld[5]).rtint) > 0)
 {
   expanded_location xloc;
   ((xloc).file = (((x)->u.fld[4]).rtstr), (xloc).line = (((x)->u.fld[5]).rtint));
   sprintf (buf, "%4d note \"%s\" %d", (((x)->u.fld[0]).rtint),
     xloc.file, xloc.line);
 }
      else
 sprintf (buf, "%4d %s", (((x)->u.fld[0]).rtint),
   (note_insn_name[((((x)->u.fld[5]).rtint)) - (int) NOTE_INSN_BIAS]));
      break;
    default:
      if (verbose)
 {
   sprintf (buf, "Not an INSN at all\n");
   debug_rtx (x);
 }
      else
 sprintf (buf, "i%-4d  <What?>", (((x)->u.fld[0]).rtint));
    }
}
void
print_block_visualization (const char *s)
{
  int unit, i;
  fprintf (sched_dump, "\n;;   ==================== scheduling visualization %s \n", s);
  fprintf (sched_dump, ";;   %-8s", "clock");
  for (unit = 0; unit < 0; unit++)
    if (function_units[unit].bitmask & target_units)
      for (i = 0; i < function_units[unit].multiplicity; i++)
 fprintf (sched_dump, "  %-33s", function_units[unit].name);
  fprintf (sched_dump, "  %-8s\n", "no-unit");
  fprintf (sched_dump, ";;   %-8s", "=====");
  for (unit = 0; unit < 0; unit++)
    if (function_units[unit].bitmask & target_units)
      for (i = 0; i < function_units[unit].multiplicity; i++)
 fprintf (sched_dump, "  %-33s", "==============================");
  fprintf (sched_dump, "  %-8s\n", "=======");
  fprintf (sched_dump, "%s\n", visual_tbl);
}
void
visualize_no_unit (rtx insn)
{
  if (n_vis_no_unit < 20)
    {
      vis_no_unit[n_vis_no_unit] = insn;
      n_vis_no_unit++;
    }
}
void
visualize_scheduled_insns (int clock)
{
  int i, unit;
  if (n_visual_lines >= 100)
    {
      print_block_visualization ("(incomplete)");
      init_block_visualization ();
    }
  n_visual_lines++;
  sprintf (visual_tbl + strlen (visual_tbl), ";;   %-8d", clock);
  for (unit = 0; unit < 0; unit++)
    if (function_units[unit].bitmask & target_units)
      for (i = 0; i < function_units[unit].multiplicity; i++)
 {
   int instance = unit + i * 0;
   rtx insn = get_unit_last_insn (instance);
   if (insn
       && actual_hazard_this_instance (unit, instance, insn, clock, 0))
     {
       char str[2048];
       print_insn (str, insn, 0);
       str[30] = '\0';
       sprintf (visual_tbl + strlen (visual_tbl), "  %-33s", str);
     }
   else
     sprintf (visual_tbl + strlen (visual_tbl), "  %-33s", "------------------------------");
 }
  for (i = 0; i < n_vis_no_unit; i++)
    sprintf (visual_tbl + strlen (visual_tbl), "  %-8d",
      (((vis_no_unit[i])->u.fld[0]).rtint));
  n_vis_no_unit = 0;
  sprintf (visual_tbl + strlen (visual_tbl), "\n");
}
void
visualize_stall_cycles (int stalls)
{
  static const char *const prefix = ";;       ";
  const char *suffix = "\n";
  char *p;
  if (n_visual_lines >= 100)
    {
      print_block_visualization ("(incomplete)");
      init_block_visualization ();
    }
  n_visual_lines++;
  p = visual_tbl + strlen (visual_tbl);
  strcpy (p, prefix);
  p += strlen (prefix);
  if ((unsigned) stalls >
      visual_tbl_line_length - strlen (prefix) - strlen (suffix))
    {
      suffix = "[...]\n";
      stalls = visual_tbl_line_length - strlen (prefix) - strlen (suffix);
    }
  memset (p, '.', stalls);
  p += stalls;
  strcpy (p, suffix);
}
void
visualize_alloc (void)
{
  visual_tbl = xmalloc (get_visual_tbl_length ());
}
void
visualize_free (void)
{
  free (visual_tbl);
}
static tree anonymous_types;
static int sdbout_source_line_counter;
static int unnamed_struct_number;
static varray_type deferred_global_decls;
static tree preinit_symbols;
static unsigned char sdbout_initialized;
const struct gcc_debug_hooks sdb_debug_hooks;
const struct ggc_root_tab gt_ggc_r_gt_sdbout_h[] = {
  {
    &preinit_symbols,
    1,
    sizeof (preinit_symbols),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &deferred_global_decls,
    1,
    sizeof (deferred_global_decls),
    &gt_ggc_mx_varray_head_tag,
    &gt_pch_nx_varray_head_tag
  },
  {
    &anonymous_types,
    1,
    sizeof (anonymous_types),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_sdbout_h[] = {
  { &sdbout_initialized, 1, sizeof (sdbout_initialized), ((void *)0), ((void *)0) },
  { &unnamed_struct_number, 1, sizeof (unnamed_struct_number), ((void *)0), ((void *)0) },
  { &sdbout_source_line_counter, 1, sizeof (sdbout_source_line_counter), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static rtx neg_const_int (enum machine_mode, rtx);
static unsigned char mode_signbit_p (enum machine_mode, rtx);
static int simplify_plus_minus_op_data_cmp (const void *, const void *);
static rtx simplify_plus_minus (enum rtx_code, enum machine_mode, rtx,
    rtx, int);
static rtx simplify_immed_subreg (enum machine_mode, rtx, enum machine_mode,
      unsigned int);
static rtx simplify_associative_operation (enum rtx_code, enum machine_mode,
        rtx, rtx);
static rtx simplify_relational_operation_1 (enum rtx_code, enum machine_mode,
         enum machine_mode, rtx, rtx);
static rtx
neg_const_int (enum machine_mode mode, rtx i)
{
  return gen_int_mode (- ((i)->u.hwint[0]), mode);
}
static unsigned char
mode_signbit_p (enum machine_mode mode, rtx x)
{
  unsigned long val;
  unsigned int width;
  if (mode_class[mode] != MODE_INT)
    return 0;
  width = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  if (width == 0)
    return 0;
  if (width <= (8 * 4)
      && ((enum rtx_code) (x)->code) == CONST_INT)
    val = ((x)->u.hwint[0]);
  else if (width <= 2 * (8 * 4)
    && ((enum rtx_code) (x)->code) == CONST_DOUBLE
    && ((x)->u.hwint[0]) == 0)
    {
      val = ((x)->u.hwint[1]);
      width -= (8 * 4);
    }
  else
    return 0;
  if (width < (8 * 4))
    val &= ((unsigned long) 1 << width) - 1;
  return val == ((unsigned long) 1 << (width - 1));
}
rtx
simplify_gen_binary (enum rtx_code code, enum machine_mode mode, rtx op0,
       rtx op1)
{
  rtx tem;
  if ((rtx_class[(int) (code)]) == RTX_COMM_ARITH
      && swap_commutative_operands_p (op0, op1))
    tem = op0, op0 = op1, op1 = tem;
  tem = simplify_binary_operation (code, mode, op0, op1);
  if (tem)
    return tem;
  if (code == PLUS || code == MINUS)
    {
      tem = simplify_plus_minus (code, mode, op0, op1, 1);
      if (tem)
 return tem;
    }
  return gen_rtx_fmt_ee (code, mode, op0, op1);
}
rtx
avoid_constant_pool_reference (rtx x)
{
  rtx c, tmp, addr;
  enum machine_mode cmode;
  switch (((enum rtx_code) (x)->code))
    {
    case MEM:
      break;
    case FLOAT_EXTEND:
      tmp = (((x)->u.fld[0]).rtx1);
      c = avoid_constant_pool_reference (tmp);
      if (c != tmp && ((enum rtx_code) (c)->code) == CONST_DOUBLE)
 {
   struct real_value d;
   memcpy (&(d), &(((c))->u.hwint[0]), sizeof (struct real_value));
   return const_double_from_real_value (d, ((enum machine_mode) (x)->mode));
 }
      return x;
    default:
      return x;
    }
  addr = (((x)->u.fld[0]).rtx1);
  addr = targetm.delegitimize_address (addr);
  if (((enum rtx_code) (addr)->code) == LO_SUM)
    addr = (((addr)->u.fld[1]).rtx1);
  if (((enum rtx_code) (addr)->code) != SYMBOL_REF
      || ! (((addr))->unchanging))
    return x;
  c = get_pool_constant (addr);
  cmode = get_pool_mode (addr);
  if (cmode != ((enum machine_mode) (x)->mode))
    {
      c = simplify_subreg (((enum machine_mode) (x)->mode), c, cmode, 0);
      return c ? c : x;
    }
  return c;
}
rtx
simplify_gen_unary (enum rtx_code code, enum machine_mode mode, rtx op,
      enum machine_mode op_mode)
{
  rtx tem;
  if ((tem = simplify_unary_operation (code, mode, op, op_mode)) != 0)
    return tem;
  return gen_rtx_fmt_e (code, mode, op);
}
rtx
simplify_gen_ternary (enum rtx_code code, enum machine_mode mode,
        enum machine_mode op0_mode, rtx op0, rtx op1, rtx op2)
{
  rtx tem;
  if (0 != (tem = simplify_ternary_operation (code, mode, op0_mode,
           op0, op1, op2)))
    return tem;
  return gen_rtx_fmt_eee (code, mode, op0, op1, op2);
}
rtx
simplify_gen_relational (enum rtx_code code, enum machine_mode mode,
    enum machine_mode cmp_mode, rtx op0, rtx op1)
{
  rtx tem;
  if (0 != (tem = simplify_relational_operation (code, mode, cmp_mode,
       op0, op1)))
    return tem;
  return gen_rtx_fmt_ee (code, mode, op0, op1);
}
rtx
simplify_replace_rtx (rtx x, rtx old, rtx new)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  enum machine_mode op_mode;
  rtx op0, op1, op2;
  if (x == old)
    return new;
  switch ((rtx_class[(int) (code)]))
    {
    case RTX_UNARY:
      op0 = (((x)->u.fld[0]).rtx1);
      op_mode = ((enum machine_mode) (op0)->mode);
      op0 = simplify_replace_rtx (op0, old, new);
      if (op0 == (((x)->u.fld[0]).rtx1))
 return x;
      return simplify_gen_unary (code, mode, op0, op_mode);
    case RTX_BIN_ARITH:
    case RTX_COMM_ARITH:
      op0 = simplify_replace_rtx ((((x)->u.fld[0]).rtx1), old, new);
      op1 = simplify_replace_rtx ((((x)->u.fld[1]).rtx1), old, new);
      if (op0 == (((x)->u.fld[0]).rtx1) && op1 == (((x)->u.fld[1]).rtx1))
 return x;
      return simplify_gen_binary (code, mode, op0, op1);
    case RTX_COMPARE:
    case RTX_COMM_COMPARE:
      op0 = (((x)->u.fld[0]).rtx1);
      op1 = (((x)->u.fld[1]).rtx1);
      op_mode = ((enum machine_mode) (op0)->mode) != VOIDmode ? ((enum machine_mode) (op0)->mode) : ((enum machine_mode) (op1)->mode);
      op0 = simplify_replace_rtx (op0, old, new);
      op1 = simplify_replace_rtx (op1, old, new);
      if (op0 == (((x)->u.fld[0]).rtx1) && op1 == (((x)->u.fld[1]).rtx1))
 return x;
      return simplify_gen_relational (code, mode, op_mode, op0, op1);
    case RTX_TERNARY:
    case RTX_BITFIELD_OPS:
      op0 = (((x)->u.fld[0]).rtx1);
      op_mode = ((enum machine_mode) (op0)->mode);
      op0 = simplify_replace_rtx (op0, old, new);
      op1 = simplify_replace_rtx ((((x)->u.fld[1]).rtx1), old, new);
      op2 = simplify_replace_rtx ((((x)->u.fld[2]).rtx1), old, new);
      if (op0 == (((x)->u.fld[0]).rtx1) && op1 == (((x)->u.fld[1]).rtx1) && op2 == (((x)->u.fld[2]).rtx1))
 return x;
      if (op_mode == VOIDmode)
 op_mode = ((enum machine_mode) (op0)->mode);
      return simplify_gen_ternary (code, mode, op_mode, op0, op1, op2);
    case RTX_EXTRA:
      if (code == SUBREG)
 {
   op0 = simplify_replace_rtx ((((x)->u.fld[0]).rtx1), old, new);
   if (op0 == (((x)->u.fld[0]).rtx1))
     return x;
   op0 = simplify_gen_subreg (((enum machine_mode) (x)->mode), op0,
         ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
         (((x)->u.fld[1]).rtuint));
   return op0 ? op0 : x;
 }
      break;
    case RTX_OBJ:
      if (code == MEM)
 {
   op0 = simplify_replace_rtx ((((x)->u.fld[0]).rtx1), old, new);
   if (op0 == (((x)->u.fld[0]).rtx1))
     return x;
   return replace_equiv_address_nv (x, op0);
 }
      else if (code == LO_SUM)
 {
   op0 = simplify_replace_rtx ((((x)->u.fld[0]).rtx1), old, new);
   op1 = simplify_replace_rtx ((((x)->u.fld[1]).rtx1), old, new);
   if (((enum rtx_code) (op0)->code) == HIGH && rtx_equal_p ((((op0)->u.fld[0]).rtx1), op1))
     return op1;
   if (op0 == (((x)->u.fld[0]).rtx1) && op1 == (((x)->u.fld[1]).rtx1))
     return x;
   return gen_rtx_fmt_ee (LO_SUM, (mode), (op0), (op1));
 }
      else if (code == REG)
 {
   if ((((enum rtx_code) (old)->code) == REG) && (((x)->u.fld[0]).rtuint) == (((old)->u.fld[0]).rtuint))
     return new;
 }
      break;
    default:
      break;
    }
  return x;
}
rtx
simplify_unary_operation (enum rtx_code code, enum machine_mode mode,
     rtx op, enum machine_mode op_mode)
{
  unsigned int width = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  rtx trueop = avoid_constant_pool_reference (op);
  if (code == VEC_DUPLICATE)
    {
      if (!(mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT))
 abort ();
      if (((enum machine_mode) (trueop)->mode) != VOIDmode
   && !(mode_class[((enum machine_mode) (trueop)->mode)] == MODE_VECTOR_INT || mode_class[((enum machine_mode) (trueop)->mode)] == MODE_VECTOR_FLOAT)
   && mode_inner[mode] != ((enum machine_mode) (trueop)->mode))
 abort ();
      if (((enum machine_mode) (trueop)->mode) != VOIDmode
   && (mode_class[((enum machine_mode) (trueop)->mode)] == MODE_VECTOR_INT || mode_class[((enum machine_mode) (trueop)->mode)] == MODE_VECTOR_FLOAT)
   && mode_inner[mode] != mode_inner[((enum machine_mode) (trueop)->mode)])
 abort ();
      if (((enum rtx_code) (trueop)->code) == CONST_INT || ((enum rtx_code) (trueop)->code) == CONST_DOUBLE
   || ((enum rtx_code) (trueop)->code) == CONST_VECTOR)
 {
          int elt_size = ((unsigned short) mode_size[mode_inner[mode]]);
          unsigned n_elts = (((unsigned short) mode_size[mode]) / elt_size);
   rtvec v = rtvec_alloc (n_elts);
   unsigned int i;
   if (((enum rtx_code) (trueop)->code) != CONST_VECTOR)
     for (i = 0; i < n_elts; i++)
       ((v)->elem[i]) = trueop;
   else
     {
       enum machine_mode inmode = ((enum machine_mode) (trueop)->mode);
              int in_elt_size = ((unsigned short) mode_size[mode_inner[inmode]]);
              unsigned in_n_elts = (((unsigned short) mode_size[inmode]) / in_elt_size);
       if (in_n_elts >= n_elts || n_elts % in_n_elts)
  abort ();
       for (i = 0; i < n_elts; i++)
         ((v)->elem[i]) = (((((trueop)->u.fld[0]).rtvec1))->elem[i % in_n_elts]);
     }
   return gen_rtx_CONST_VECTOR (mode, v);
 }
    }
  else if (((enum rtx_code) (op)->code) == CONST)
    return simplify_unary_operation (code, mode, (((op)->u.fld[0]).rtx1), op_mode);
  if ((mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT) && ((enum rtx_code) (trueop)->code) == CONST_VECTOR)
    {
      int elt_size = ((unsigned short) mode_size[mode_inner[mode]]);
      unsigned n_elts = (((unsigned short) mode_size[mode]) / elt_size);
      enum machine_mode opmode = ((enum machine_mode) (trueop)->mode);
      int op_elt_size = ((unsigned short) mode_size[mode_inner[opmode]]);
      unsigned op_n_elts = (((unsigned short) mode_size[opmode]) / op_elt_size);
      rtvec v = rtvec_alloc (n_elts);
      unsigned int i;
      if (op_n_elts != n_elts)
 abort ();
      for (i = 0; i < n_elts; i++)
 {
   rtx x = simplify_unary_operation (code, mode_inner[mode],
         (((((trueop)->u.fld[0]).rtvec1))->elem[i]),
         mode_inner[opmode]);
   if (!x)
     return 0;
   ((v)->elem[i]) = x;
 }
      return gen_rtx_CONST_VECTOR (mode, v);
    }
  if (code == FLOAT && ((enum machine_mode) (trueop)->mode) == VOIDmode
      && (((enum rtx_code) (trueop)->code) == CONST_DOUBLE || ((enum rtx_code) (trueop)->code) == CONST_INT))
    {
      long hv, lv;
      struct real_value d;
      if (((enum rtx_code) (trueop)->code) == CONST_INT)
 lv = ((trueop)->u.hwint[0]), hv = ((((long) lv) < 0) ? ((long) -1) : ((long) 0));
      else
 lv = ((trueop)->u.hwint[0]), hv = ((trueop)->u.hwint[1]);
      real_from_integer (&(d), mode, lv, hv, 0);
      d = real_value_truncate (mode, d);
      return const_double_from_real_value (d, mode);
    }
  else if (code == UNSIGNED_FLOAT && ((enum machine_mode) (trueop)->mode) == VOIDmode
    && (((enum rtx_code) (trueop)->code) == CONST_DOUBLE
        || ((enum rtx_code) (trueop)->code) == CONST_INT))
    {
      long hv, lv;
      struct real_value d;
      if (((enum rtx_code) (trueop)->code) == CONST_INT)
 lv = ((trueop)->u.hwint[0]), hv = ((((long) lv) < 0) ? ((long) -1) : ((long) 0));
      else
 lv = ((trueop)->u.hwint[0]), hv = ((trueop)->u.hwint[1]);
      if (op_mode == VOIDmode)
 {
   if (hv < 0)
     return 0;
 }
      else if (((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) >= (8 * 4) * 2)
 ;
      else
 hv = 0, lv &= mode_mask_array[op_mode];
      real_from_integer (&(d), mode, lv, hv, 1);
      d = real_value_truncate (mode, d);
      return const_double_from_real_value (d, mode);
    }
  if (((enum rtx_code) (trueop)->code) == CONST_INT
      && width <= (8 * 4) && width > 0)
    {
      long arg0 = ((trueop)->u.hwint[0]);
      long val;
      switch (code)
 {
 case NOT:
   val = ~ arg0;
   break;
 case NEG:
   val = - arg0;
   break;
 case ABS:
   val = (arg0 >= 0 ? arg0 : - arg0);
   break;
 case FFS:
   arg0 &= mode_mask_array[mode];
   val = exact_log2_wide ((unsigned long) (arg0 & (- arg0))) + 1;
   break;
 case CLZ:
   arg0 &= mode_mask_array[mode];
   if (arg0 == 0 && 0)
     ;
   else
     val = ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - floor_log2_wide ((unsigned long) (arg0)) - 1;
   break;
 case CTZ:
   arg0 &= mode_mask_array[mode];
   if (arg0 == 0)
     {
       if (! 0)
  val = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
     }
   else
     val = exact_log2_wide ((unsigned long) (arg0 & -arg0));
   break;
 case POPCOUNT:
   arg0 &= mode_mask_array[mode];
   val = 0;
   while (arg0)
     val++, arg0 &= arg0 - 1;
   break;
 case PARITY:
   arg0 &= mode_mask_array[mode];
   val = 0;
   while (arg0)
     val++, arg0 &= arg0 - 1;
   val &= 1;
   break;
 case TRUNCATE:
   val = arg0;
   break;
 case ZERO_EXTEND:
   if (op_mode == VOIDmode)
     abort ();
   if (((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) == (8 * 4))
     {
       if (width != ((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)))
  abort ();
       val = arg0;
     }
   else if (((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) < (8 * 4))
     val = arg0 & ~((long) (-1) << ((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)));
   else
     return 0;
   break;
 case SIGN_EXTEND:
   if (op_mode == VOIDmode)
     op_mode = mode;
   if (((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) == (8 * 4))
     {
       if (width != ((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)))
  abort ();
       val = arg0;
     }
   else if (((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) < (8 * 4))
     {
       val
  = arg0 & ~((long) (-1) << ((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)));
       if (val
    & ((long) 1 << (((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) - 1)))
  val -= (long) 1 << ((unsigned short) (((unsigned short) mode_size[op_mode]) * 8));
     }
   else
     return 0;
   break;
 case SQRT:
 case FLOAT_EXTEND:
 case FLOAT_TRUNCATE:
 case SS_TRUNCATE:
 case US_TRUNCATE:
   return 0;
 default:
   abort ();
 }
      val = trunc_int_for_mode (val, mode);
      return gen_rtx_CONST_INT (VOIDmode, (long) (val));
    }
  else if (((enum machine_mode) (trueop)->mode) == VOIDmode
    && width <= (8 * 4) * 2
    && (((enum rtx_code) (trueop)->code) == CONST_DOUBLE
        || ((enum rtx_code) (trueop)->code) == CONST_INT))
    {
      unsigned long l1, lv;
      long h1, hv;
      if (((enum rtx_code) (trueop)->code) == CONST_DOUBLE)
 l1 = ((trueop)->u.hwint[0]), h1 = ((trueop)->u.hwint[1]);
      else
 l1 = ((trueop)->u.hwint[0]), h1 = ((((long) l1) < 0) ? ((long) -1) : ((long) 0));
      switch (code)
 {
 case NOT:
   lv = ~ l1;
   hv = ~ h1;
   break;
 case NEG:
   neg_double (l1, h1, &lv, &hv);
   break;
 case ABS:
   if (h1 < 0)
     neg_double (l1, h1, &lv, &hv);
   else
     lv = l1, hv = h1;
   break;
 case FFS:
   hv = 0;
   if (l1 == 0)
     {
       if (h1 == 0)
  lv = 0;
       else
  lv = (8 * 4) + exact_log2_wide ((unsigned long) (h1 & -h1)) + 1;
     }
   else
     lv = exact_log2_wide ((unsigned long) (l1 & -l1)) + 1;
   break;
 case CLZ:
   hv = 0;
   if (h1 != 0)
     lv = ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - floor_log2_wide ((unsigned long) (h1)) - 1
       - (8 * 4);
   else if (l1 != 0)
     lv = ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - floor_log2_wide ((unsigned long) (l1)) - 1;
   else if (! 0)
     lv = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
   break;
 case CTZ:
   hv = 0;
   if (l1 != 0)
     lv = exact_log2_wide ((unsigned long) (l1 & -l1));
   else if (h1 != 0)
     lv = (8 * 4) + exact_log2_wide ((unsigned long) (h1 & -h1));
   else if (! 0)
     lv = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
   break;
 case POPCOUNT:
   hv = 0;
   lv = 0;
   while (l1)
     lv++, l1 &= l1 - 1;
   while (h1)
     lv++, h1 &= h1 - 1;
   break;
 case PARITY:
   hv = 0;
   lv = 0;
   while (l1)
     lv++, l1 &= l1 - 1;
   while (h1)
     lv++, h1 &= h1 - 1;
   lv &= 1;
   break;
 case TRUNCATE:
   lv = l1, hv = h1;
   break;
 case ZERO_EXTEND:
   if (op_mode == VOIDmode)
     abort ();
   if (((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) > (8 * 4))
     return 0;
   hv = 0;
   lv = l1 & mode_mask_array[op_mode];
   break;
 case SIGN_EXTEND:
   if (op_mode == VOIDmode
       || ((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) > (8 * 4))
     return 0;
   else
     {
       lv = l1 & mode_mask_array[op_mode];
       if (((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) < (8 * 4)
    && (lv & ((long) 1
       << (((unsigned short) (((unsigned short) mode_size[op_mode]) * 8)) - 1))) != 0)
  lv -= (long) 1 << ((unsigned short) (((unsigned short) mode_size[op_mode]) * 8));
       hv = ((((long) lv) < 0) ? ((long) -1) : ((long) 0));
     }
   break;
 case SQRT:
   return 0;
 default:
   return 0;
 }
      return immed_double_const (lv, hv, mode);
    }
  else if (((enum rtx_code) (trueop)->code) == CONST_DOUBLE
    && mode_class[mode] == MODE_FLOAT)
    {
      struct real_value d, t;
      memcpy (&(d), &(((trueop))->u.hwint[0]), sizeof (struct real_value));
      switch (code)
 {
 case SQRT:
   if ((flag_signaling_nans && (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)) && real_isnan (&d))
     return 0;
   real_sqrt (&t, mode, &d);
   d = t;
   break;
 case ABS:
   d = real_arithmetic2 (ABS_EXPR, &(d), ((void *)0));
   break;
 case NEG:
   d = real_arithmetic2 (NEGATE_EXPR, &(d), ((void *)0));
   break;
 case FLOAT_TRUNCATE:
   d = real_value_truncate (mode, d);
   break;
 case FLOAT_EXTEND:
   break;
 case FIX:
   real_arithmetic (&d, FIX_TRUNC_EXPR, &d, ((void *)0));
   break;
 case NOT:
   {
     long tmp[4];
     int i;
     real_to_target (tmp, &d, ((enum machine_mode) (trueop)->mode));
     for (i = 0; i < 4; i++)
       tmp[i] = ~tmp[i];
     real_from_target (&d, tmp, mode);
   }
 default:
   abort ();
 }
      return const_double_from_real_value (d, mode);
    }
  else if (((enum rtx_code) (trueop)->code) == CONST_DOUBLE
    && mode_class[((enum machine_mode) (trueop)->mode)] == MODE_FLOAT
    && mode_class[mode] == MODE_INT
    && width <= 2*(8 * 4) && width > 0)
    {
      long xh, xl, th, tl;
      struct real_value x, t;
      memcpy (&(x), &(((trueop))->u.hwint[0]), sizeof (struct real_value));
      switch (code)
 {
 case FIX:
   if (real_isnan (&(x)))
     return (const_int_rtx[64]);
   if (width > (8 * 4))
     {
       th = ((unsigned long) 1
      << (width - (8 * 4) - 1)) - 1;
       tl = -1;
     }
   else
     {
       th = 0;
       tl = ((unsigned long) 1 << (width - 1)) - 1;
     }
   real_from_integer (&t, VOIDmode, tl, th, 0);
   if (real_compare (LT_EXPR, &(t), &(x)))
     {
       xh = th;
       xl = tl;
       break;
     }
   if (width > (8 * 4))
     {
       th = (long) -1 << (width - (8 * 4) - 1);
       tl = 0;
     }
   else
     {
       th = -1;
       tl = (long) -1 << (width - 1);
     }
   real_from_integer (&t, VOIDmode, tl, th, 0);
   if (real_compare (LT_EXPR, &(x), &(t)))
     {
       xh = th;
       xl = tl;
       break;
     }
   real_to_integer2 (&xl, &xh, &(x));
   break;
 case UNSIGNED_FIX:
   if (real_isnan (&(x)) || real_isneg (&(x)))
     return (const_int_rtx[64]);
   if (width == 2*(8 * 4))
     {
       th = -1;
       tl = -1;
     }
   else if (width >= (8 * 4))
     {
       th = ((unsigned long) 1
      << (width - (8 * 4))) - 1;
       tl = -1;
     }
   else
     {
       th = 0;
       tl = ((unsigned long) 1 << width) - 1;
     }
   real_from_integer (&t, VOIDmode, tl, th, 1);
   if (real_compare (LT_EXPR, &(t), &(x)))
     {
       xh = th;
       xl = tl;
       break;
     }
   real_to_integer2 (&xl, &xh, &(x));
   break;
 default:
   abort ();
 }
      return immed_double_const (xl, xh, mode);
    }
  else
    {
      enum rtx_code reversed;
      rtx temp;
      switch (code)
 {
 case NOT:
   if (((enum rtx_code) (op)->code) == NOT)
     return (((op)->u.fld[0]).rtx1);
   if ((((rtx_class[(int) (((enum rtx_code) (op)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
       && (mode == BImode || 1 == -1)
       && ((reversed = reversed_comparison_code (op, (rtx) 0))
    != UNKNOWN))
     return simplify_gen_relational (reversed, mode, VOIDmode,
         (((op)->u.fld[0]).rtx1), (((op)->u.fld[1]).rtx1));
          if (((enum rtx_code) (op)->code) == PLUS
       && (((op)->u.fld[1]).rtx1) == (const_int_rtx[64 -1]))
     return simplify_gen_unary (NEG, mode, (((op)->u.fld[0]).rtx1), mode);
   if (((enum rtx_code) (op)->code) == NEG)
     return plus_constant_wide (((((op)->u.fld[0]).rtx1)), (long) (-1));
   if (((enum rtx_code) (op)->code) == XOR
       && ((enum rtx_code) ((((op)->u.fld[1]).rtx1))->code) == CONST_INT
       && (temp = simplify_unary_operation (NOT, mode,
         (((op)->u.fld[1]).rtx1),
         mode)) != 0)
     return simplify_gen_binary (XOR, mode, (((op)->u.fld[0]).rtx1), temp);
   if (((enum rtx_code) (op)->code) == PLUS
       && ((enum rtx_code) ((((op)->u.fld[1]).rtx1))->code) == CONST_INT
       && mode_signbit_p (mode, (((op)->u.fld[1]).rtx1))
       && (temp = simplify_unary_operation (NOT, mode,
         (((op)->u.fld[1]).rtx1),
         mode)) != 0)
     return simplify_gen_binary (XOR, mode, (((op)->u.fld[0]).rtx1), temp);
   if (((enum rtx_code) (op)->code) == ASHIFT
       && (((op)->u.fld[0]).rtx1) == (const_int_rtx[64 +1]))
     {
       temp = simplify_gen_unary (NOT, mode, (const_int_rtx[64 +1]), mode);
       return simplify_gen_binary (ROTATE, mode, temp, (((op)->u.fld[1]).rtx1));
     }
   if (1 == -1
       && (((rtx_class[(int) (((enum rtx_code) (op)->code))]) & (~1)) == (RTX_COMPARE & (~1)))
       && (reversed = reversed_comparison_code (op, (rtx) 0))
   != UNKNOWN)
     return simplify_gen_relational (reversed, mode, VOIDmode,
         (((op)->u.fld[0]).rtx1), (((op)->u.fld[1]).rtx1));
   if (1 == -1
       && ((enum rtx_code) (op)->code) == ASHIFTRT
       && ((enum rtx_code) ((((op)->u.fld[1]).rtx1))->code) == CONST_INT
       && (((((op)->u.fld[1]).rtx1))->u.hwint[0]) == ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1)
     return simplify_gen_relational (GE, mode, VOIDmode,
         (((op)->u.fld[0]).rtx1), (const_int_rtx[64]));
   break;
 case NEG:
   if (((enum rtx_code) (op)->code) == NEG)
     return (((op)->u.fld[0]).rtx1);
   if (((enum rtx_code) (op)->code) == PLUS
       && (((op)->u.fld[1]).rtx1) == (const_int_rtx[64 +1]))
     return simplify_gen_unary (NOT, mode, (((op)->u.fld[0]).rtx1), mode);
   if (((enum rtx_code) (op)->code) == NOT)
     return plus_constant_wide (((((op)->u.fld[0]).rtx1)), (long) (1));
   if (((enum rtx_code) (op)->code) == MINUS
       && !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations)
       && !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && flag_rounding_math))
     return simplify_gen_binary (MINUS, mode, (((op)->u.fld[1]).rtx1),
     (((op)->u.fld[0]).rtx1));
   if (((enum rtx_code) (op)->code) == PLUS
       && !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations)
       && !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && flag_rounding_math))
     {
       if (((enum rtx_code) ((((op)->u.fld[1]).rtx1))->code) == CONST_INT
    || ((enum rtx_code) ((((op)->u.fld[1]).rtx1))->code) == CONST_DOUBLE)
  {
    temp = simplify_unary_operation (NEG, mode, (((op)->u.fld[1]).rtx1),
         mode);
    if (temp)
      return simplify_gen_binary (MINUS, mode, temp,
      (((op)->u.fld[0]).rtx1));
  }
       temp = simplify_gen_unary (NEG, mode, (((op)->u.fld[0]).rtx1), mode);
       return simplify_gen_binary (MINUS, mode, temp, (((op)->u.fld[1]).rtx1));
     }
   if (((enum rtx_code) (op)->code) == MULT
       && !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && flag_rounding_math))
     {
       temp = simplify_gen_unary (NEG, mode, (((op)->u.fld[0]).rtx1), mode);
       return simplify_gen_binary (MULT, mode, temp, (((op)->u.fld[1]).rtx1));
     }
   if (((enum rtx_code) (op)->code) == ASHIFT)
     {
       temp = simplify_unary_operation (NEG, mode, (((op)->u.fld[0]).rtx1),
            mode);
       if (temp)
  return simplify_gen_binary (ASHIFT, mode, temp,
         (((op)->u.fld[1]).rtx1));
     }
   if (((enum rtx_code) (op)->code) == ASHIFTRT
       && ((enum rtx_code) ((((op)->u.fld[1]).rtx1))->code) == CONST_INT
       && (((((op)->u.fld[1]).rtx1))->u.hwint[0]) == ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1)
  return simplify_gen_binary (LSHIFTRT, mode,
         (((op)->u.fld[0]).rtx1), (((op)->u.fld[1]).rtx1));
   if (((enum rtx_code) (op)->code) == LSHIFTRT
       && ((enum rtx_code) ((((op)->u.fld[1]).rtx1))->code) == CONST_INT
       && (((((op)->u.fld[1]).rtx1))->u.hwint[0]) == ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1)
  return simplify_gen_binary (ASHIFTRT, mode,
         (((op)->u.fld[0]).rtx1), (((op)->u.fld[1]).rtx1));
   break;
 case SIGN_EXTEND:
   if (((enum rtx_code) (op)->code) == TRUNCATE
       && ((enum machine_mode) ((((op)->u.fld[0]).rtx1))->mode) == mode
       && ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == MINUS
       && ((enum rtx_code) (((((((op)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == LABEL_REF
       && ((enum rtx_code) (((((((op)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == LABEL_REF)
     return (((op)->u.fld[0]).rtx1);
   if (((enum rtx_code) (op)->code) == SUBREG
       && (((op))->in_struct)
       && ! ((((op))->volatil) ? -1 : (op)->unchanging)
       && ((enum machine_mode) ((((op)->u.fld[0]).rtx1))->mode) == mode)
     return (((op)->u.fld[0]).rtx1);
   break;
 case ZERO_EXTEND:
   if (((enum rtx_code) (op)->code) == SUBREG
       && (((op))->in_struct)
       && ((((op))->volatil) ? -1 : (op)->unchanging)
       && ((enum machine_mode) ((((op)->u.fld[0]).rtx1))->mode) == mode)
     return (((op)->u.fld[0]).rtx1);
   break;
 default:
   break;
 }
      return 0;
    }
}
static rtx
simplify_associative_operation (enum rtx_code code, enum machine_mode mode,
    rtx op0, rtx op1)
{
  rtx tem;
  if (((enum rtx_code) (op1)->code) == code)
    {
      if (((enum rtx_code) (op0)->code) == code)
 {
   tem = simplify_gen_binary (code, mode, op0, (((op1)->u.fld[0]).rtx1));
   return simplify_gen_binary (code, mode, tem, (((op1)->u.fld[1]).rtx1));
 }
      if (! swap_commutative_operands_p (op1, op0))
 return simplify_gen_binary (code, mode, op1, op0);
      tem = op0;
      op0 = op1;
      op1 = tem;
    }
  if (((enum rtx_code) (op0)->code) == code)
    {
      if (swap_commutative_operands_p ((((op0)->u.fld[1]).rtx1), op1))
 {
   tem = simplify_gen_binary (code, mode, (((op0)->u.fld[0]).rtx1), op1);
   return simplify_gen_binary (code, mode, tem, (((op0)->u.fld[1]).rtx1));
 }
      tem = swap_commutative_operands_p ((((op0)->u.fld[1]).rtx1), op1)
     ? simplify_binary_operation (code, mode, op1, (((op0)->u.fld[1]).rtx1))
     : simplify_binary_operation (code, mode, (((op0)->u.fld[1]).rtx1), op1);
      if (tem != 0)
        return simplify_gen_binary (code, mode, (((op0)->u.fld[0]).rtx1), tem);
      tem = swap_commutative_operands_p ((((op0)->u.fld[0]).rtx1), op1)
     ? simplify_binary_operation (code, mode, op1, (((op0)->u.fld[0]).rtx1))
     : simplify_binary_operation (code, mode, (((op0)->u.fld[0]).rtx1), op1);
      if (tem != 0)
        return simplify_gen_binary (code, mode, tem, (((op0)->u.fld[1]).rtx1));
    }
  return 0;
}
rtx
simplify_binary_operation (enum rtx_code code, enum machine_mode mode,
      rtx op0, rtx op1)
{
  long arg0, arg1, arg0s, arg1s;
  long val;
  unsigned int width = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  rtx trueop0, trueop1;
  rtx tem;
  if ((rtx_class[(int) (code)]) == RTX_COMM_ARITH
      && swap_commutative_operands_p (op0, op1))
    {
      tem = op0, op0 = op1, op1 = tem;
    }
  trueop0 = avoid_constant_pool_reference (op0);
  trueop1 = avoid_constant_pool_reference (op1);
  if ((mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT)
      && ((enum rtx_code) (trueop0)->code) == CONST_VECTOR
      && ((enum rtx_code) (trueop1)->code) == CONST_VECTOR)
    {
      int elt_size = ((unsigned short) mode_size[mode_inner[mode]]);
      unsigned n_elts = (((unsigned short) mode_size[mode]) / elt_size);
      enum machine_mode op0mode = ((enum machine_mode) (trueop0)->mode);
      int op0_elt_size = ((unsigned short) mode_size[mode_inner[op0mode]]);
      unsigned op0_n_elts = (((unsigned short) mode_size[op0mode]) / op0_elt_size);
      enum machine_mode op1mode = ((enum machine_mode) (trueop1)->mode);
      int op1_elt_size = ((unsigned short) mode_size[mode_inner[op1mode]]);
      unsigned op1_n_elts = (((unsigned short) mode_size[op1mode]) / op1_elt_size);
      rtvec v = rtvec_alloc (n_elts);
      unsigned int i;
      if (op0_n_elts != n_elts || op1_n_elts != n_elts)
 abort ();
      for (i = 0; i < n_elts; i++)
 {
   rtx x = simplify_binary_operation (code, mode_inner[mode],
          (((((trueop0)->u.fld[0]).rtvec1))->elem[i]),
          (((((trueop1)->u.fld[0]).rtvec1))->elem[i]));
   if (!x)
     return 0;
   ((v)->elem[i]) = x;
 }
      return gen_rtx_CONST_VECTOR (mode, v);
    }
  if (mode_class[mode] == MODE_FLOAT
      && ((enum rtx_code) (trueop0)->code) == CONST_DOUBLE
      && ((enum rtx_code) (trueop1)->code) == CONST_DOUBLE
      && mode == ((enum machine_mode) (op0)->mode) && mode == ((enum machine_mode) (op1)->mode))
    {
      if (code == AND
   || code == IOR
   || code == XOR)
 {
   long tmp0[4];
   long tmp1[4];
   struct real_value r;
   int i;
   real_to_target (tmp0, ((struct real_value *)&((op0)->u.hwint[0])),
     ((enum machine_mode) (op0)->mode));
   real_to_target (tmp1, ((struct real_value *)&((op1)->u.hwint[0])),
     ((enum machine_mode) (op1)->mode));
   for (i = 0; i < 4; i++)
     {
       if (code == AND)
  tmp0[i] &= tmp1[i];
       else if (code == IOR)
  tmp0[i] |= tmp1[i];
       else if (code == XOR)
  tmp0[i] ^= tmp1[i];
       else
  abort ();
     }
    real_from_target (&r, tmp0, mode);
    return const_double_from_real_value (r, mode);
 }
      else
 {
   struct real_value f0, f1, value1;
   memcpy (&(f0), &(((trueop0))->u.hwint[0]), sizeof (struct real_value));
   memcpy (&(f1), &(((trueop1))->u.hwint[0]), sizeof (struct real_value));
   f0 = real_value_truncate (mode, f0);
   f1 = real_value_truncate (mode, f1);
   if ((flag_signaling_nans && (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
       && (real_isnan (&(f0)) || real_isnan (&(f1))))
     return 0;
   if (code == DIV
       && real_compare (EQ_EXPR, &(f1), &(dconst0))
       && (flag_trapping_math || ! ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0)))
     return 0;
   if (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
       && flag_trapping_math
       && real_isinf (&(f0)) && real_isinf (&(f1)))
     {
       int s0 = real_isneg (&(f0));
       int s1 = real_isneg (&(f1));
       switch (code)
  {
  case PLUS:
    if (s0 != s1)
      return 0;
    break;
  case MINUS:
    if (s0 == s1)
      return 0;
    break;
  case DIV:
    return 0;
  default:
    break;
  }
     }
   if (code == MULT && ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
       && flag_trapping_math
       && ((real_isinf (&(f0)) && real_compare (EQ_EXPR, &(f1), &(dconst0)))
    || (real_isinf (&(f1))
        && real_compare (EQ_EXPR, &(f0), &(dconst0)))))
     return 0;
   real_arithmetic (&(value1), rtx_to_tree_code (code), &(f0), &(f1));
   value1 = real_value_truncate (mode, value1);
   return const_double_from_real_value (value1, mode);
 }
    }
  if (mode_class[mode] == MODE_INT
      && width == (8 * 4) * 2
      && (((enum rtx_code) (trueop0)->code) == CONST_DOUBLE
   || ((enum rtx_code) (trueop0)->code) == CONST_INT)
      && (((enum rtx_code) (trueop1)->code) == CONST_DOUBLE
   || ((enum rtx_code) (trueop1)->code) == CONST_INT))
    {
      unsigned long l1, l2, lv, lt;
      long h1, h2, hv, ht;
      if (((enum rtx_code) (trueop0)->code) == CONST_DOUBLE)
 l1 = ((trueop0)->u.hwint[0]), h1 = ((trueop0)->u.hwint[1]);
      else
 l1 = ((trueop0)->u.hwint[0]), h1 = ((((long) l1) < 0) ? ((long) -1) : ((long) 0));
      if (((enum rtx_code) (trueop1)->code) == CONST_DOUBLE)
 l2 = ((trueop1)->u.hwint[0]), h2 = ((trueop1)->u.hwint[1]);
      else
 l2 = ((trueop1)->u.hwint[0]), h2 = ((((long) l2) < 0) ? ((long) -1) : ((long) 0));
      switch (code)
 {
 case MINUS:
   neg_double (l2, h2, &lv, &hv);
   l2 = lv, h2 = hv;
 case PLUS:
   add_double (l1, h1, l2, h2, &lv, &hv);
   break;
 case MULT:
   mul_double (l1, h1, l2, h2, &lv, &hv);
   break;
 case DIV:
   if (div_and_round_double (TRUNC_DIV_EXPR, 0, l1, h1, l2, h2,
        &lv, &hv, &lt, &ht))
     return 0;
   break;
 case MOD:
   if (div_and_round_double (TRUNC_DIV_EXPR, 0, l1, h1, l2, h2,
        &lt, &ht, &lv, &hv))
     return 0;
   break;
 case UDIV:
   if (div_and_round_double (TRUNC_DIV_EXPR, 1, l1, h1, l2, h2,
        &lv, &hv, &lt, &ht))
     return 0;
   break;
 case UMOD:
   if (div_and_round_double (TRUNC_DIV_EXPR, 1, l1, h1, l2, h2,
        &lt, &ht, &lv, &hv))
     return 0;
   break;
 case AND:
   lv = l1 & l2, hv = h1 & h2;
   break;
 case IOR:
   lv = l1 | l2, hv = h1 | h2;
   break;
 case XOR:
   lv = l1 ^ l2, hv = h1 ^ h2;
   break;
 case SMIN:
   if (h1 < h2
       || (h1 == h2
    && ((unsigned long) l1
        < (unsigned long) l2)))
     lv = l1, hv = h1;
   else
     lv = l2, hv = h2;
   break;
 case SMAX:
   if (h1 > h2
       || (h1 == h2
    && ((unsigned long) l1
        > (unsigned long) l2)))
     lv = l1, hv = h1;
   else
     lv = l2, hv = h2;
   break;
 case UMIN:
   if ((unsigned long) h1 < (unsigned long) h2
       || (h1 == h2
    && ((unsigned long) l1
        < (unsigned long) l2)))
     lv = l1, hv = h1;
   else
     lv = l2, hv = h2;
   break;
 case UMAX:
   if ((unsigned long) h1 > (unsigned long) h2
       || (h1 == h2
    && ((unsigned long) l1
        > (unsigned long) l2)))
     lv = l1, hv = h1;
   else
     lv = l2, hv = h2;
   break;
 case LSHIFTRT: case ASHIFTRT:
 case ASHIFT:
 case ROTATE: case ROTATERT:
   if (0)
     l2 &= (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1), h2 = 0;
   if (h2 != 0 || l2 >= ((unsigned short) (((unsigned short) mode_size[mode]) * 8)))
     return 0;
   if (code == LSHIFTRT || code == ASHIFTRT)
     rshift_double (l1, h1, l2, ((unsigned short) (((unsigned short) mode_size[mode]) * 8)), &lv, &hv,
      code == ASHIFTRT);
   else if (code == ASHIFT)
     lshift_double (l1, h1, l2, ((unsigned short) (((unsigned short) mode_size[mode]) * 8)), &lv, &hv, 1);
   else if (code == ROTATE)
     lrotate_double (l1, h1, l2, ((unsigned short) (((unsigned short) mode_size[mode]) * 8)), &lv, &hv);
   else
     rrotate_double (l1, h1, l2, ((unsigned short) (((unsigned short) mode_size[mode]) * 8)), &lv, &hv);
   break;
 default:
   return 0;
 }
      return immed_double_const (lv, hv, mode);
    }
  if (((enum rtx_code) (op0)->code) != CONST_INT || ((enum rtx_code) (op1)->code) != CONST_INT
      || width > (8 * 4) || width == 0)
    {
      switch (code)
 {
 case PLUS:
   if (!(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations) && trueop1 == (const_tiny_rtx[0][(int) (mode)]))
     return op0;
   if (((enum rtx_code) (op0)->code) == NEG)
     return simplify_gen_binary (MINUS, mode, op1, (((op0)->u.fld[0]).rtx1));
   else if (((enum rtx_code) (op1)->code) == NEG)
     return simplify_gen_binary (MINUS, mode, op0, (((op1)->u.fld[0]).rtx1));
   if ((mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT || mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_VECTOR_INT)
       && ((enum rtx_code) (op0)->code) == NOT
       && trueop1 == (const_int_rtx[64 +1]))
     return simplify_gen_unary (NEG, mode, (((op0)->u.fld[0]).rtx1), mode);
   if (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op0)->code) == CONST_VECTOR) && ((enum machine_mode) (op0)->mode) != VOIDmode
       && ((enum rtx_code) (op1)->code) == CONST_INT)
     return plus_constant_wide ((op0), (long) (((op1)->u.hwint[0])));
   else if (((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op1)->code) == CONST_VECTOR) && ((enum machine_mode) (op1)->mode) != VOIDmode
     && ((enum rtx_code) (op0)->code) == CONST_INT)
     return plus_constant_wide ((op1), (long) (((op0)->u.hwint[0])));
   if (! (mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
     {
       long coeff0 = 1, coeff1 = 1;
       rtx lhs = op0, rhs = op1;
       if (((enum rtx_code) (lhs)->code) == NEG)
  coeff0 = -1, lhs = (((lhs)->u.fld[0]).rtx1);
       else if (((enum rtx_code) (lhs)->code) == MULT
         && ((enum rtx_code) ((((lhs)->u.fld[1]).rtx1))->code) == CONST_INT)
  {
    coeff0 = (((((lhs)->u.fld[1]).rtx1))->u.hwint[0]), lhs = (((lhs)->u.fld[0]).rtx1);
  }
       else if (((enum rtx_code) (lhs)->code) == ASHIFT
         && ((enum rtx_code) ((((lhs)->u.fld[1]).rtx1))->code) == CONST_INT
         && (((((lhs)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
         && (((((lhs)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4))
  {
    coeff0 = ((long) 1) << (((((lhs)->u.fld[1]).rtx1))->u.hwint[0]);
    lhs = (((lhs)->u.fld[0]).rtx1);
  }
       if (((enum rtx_code) (rhs)->code) == NEG)
  coeff1 = -1, rhs = (((rhs)->u.fld[0]).rtx1);
       else if (((enum rtx_code) (rhs)->code) == MULT
         && ((enum rtx_code) ((((rhs)->u.fld[1]).rtx1))->code) == CONST_INT)
  {
    coeff1 = (((((rhs)->u.fld[1]).rtx1))->u.hwint[0]), rhs = (((rhs)->u.fld[0]).rtx1);
  }
       else if (((enum rtx_code) (rhs)->code) == ASHIFT
         && ((enum rtx_code) ((((rhs)->u.fld[1]).rtx1))->code) == CONST_INT
         && (((((rhs)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
         && (((((rhs)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4))
  {
    coeff1 = ((long) 1) << (((((rhs)->u.fld[1]).rtx1))->u.hwint[0]);
    rhs = (((rhs)->u.fld[0]).rtx1);
  }
       if (rtx_equal_p (lhs, rhs))
  {
    rtx orig = gen_rtx_fmt_ee (PLUS, (mode), (op0), (op1));
    tem = simplify_gen_binary (MULT, mode, lhs,
          gen_rtx_CONST_INT (VOIDmode, (long) (coeff0 + coeff1)));
    return rtx_cost (tem, SET) <= rtx_cost (orig, SET)
    ? tem : 0;
  }
     }
   if ((((enum rtx_code) (op1)->code) == CONST_INT
        || ((enum rtx_code) (op1)->code) == CONST_DOUBLE)
       && ((enum rtx_code) (op0)->code) == XOR
       && (((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
    || ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_DOUBLE)
       && mode_signbit_p (mode, op1))
     return simplify_gen_binary (XOR, mode, (((op0)->u.fld[0]).rtx1),
     simplify_gen_binary (XOR, mode, op1,
            (((op0)->u.fld[1]).rtx1)));
   if ((mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT || mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_VECTOR_INT)
       && (((enum rtx_code) (op0)->code) == PLUS || ((enum rtx_code) (op0)->code) == MINUS
    || ((enum rtx_code) (op1)->code) == PLUS || ((enum rtx_code) (op1)->code) == MINUS
    || (((enum rtx_code) (op0)->code) == CONST
        && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == PLUS)
    || (((enum rtx_code) (op1)->code) == CONST
        && ((enum rtx_code) ((((op1)->u.fld[0]).rtx1))->code) == PLUS))
       && (tem = simplify_plus_minus (code, mode, op0, op1, 0)) != 0)
     return tem;
   if ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT)
       && flag_unsafe_math_optimizations)
     {
       tem = simplify_associative_operation (code, mode, op0, op1);
       if (tem)
  return tem;
     }
   break;
 case COMPARE:
   if (((((enum rtx_code) (op0)->code) == GT && ((enum rtx_code) (op1)->code) == LT)
        || (((enum rtx_code) (op0)->code) == GTU && ((enum rtx_code) (op1)->code) == LTU))
       && (((op0)->u.fld[1]).rtx1) == (const_int_rtx[64]) && (((op1)->u.fld[1]).rtx1) == (const_int_rtx[64]))
     {
       rtx xop00 = (((op0)->u.fld[0]).rtx1);
       rtx xop10 = (((op1)->u.fld[0]).rtx1);
       if ((((enum rtx_code) (xop00)->code) == REG) && (((enum rtx_code) (xop10)->code) == REG)
    && ((enum machine_mode) (xop00)->mode) == ((enum machine_mode) (xop10)->mode)
    && (((xop00)->u.fld[0]).rtuint) == (((xop10)->u.fld[0]).rtuint)
    && mode_class[((enum machine_mode) (xop00)->mode)] == MODE_CC
    && mode_class[((enum machine_mode) (xop10)->mode)] == MODE_CC)
  return xop00;
     }
   break;
 case MINUS:
   if (rtx_equal_p (trueop0, trueop1)
       && ! side_effects_p (op0)
       && (! (mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) || flag_unsafe_math_optimizations))
     return (const_tiny_rtx[0][(int) (mode)]);
   if (!(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations) && trueop0 == (const_tiny_rtx[0][(int) (mode)]))
     return simplify_gen_unary (NEG, mode, op1, mode);
   if (trueop0 == (const_int_rtx[64 -1]))
     return simplify_gen_unary (NOT, mode, op1, mode);
   if (!((((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations)
  && (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && flag_rounding_math))
       && trueop1 == (const_tiny_rtx[0][(int) (mode)]))
     return op0;
   if (! (mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
     {
       long coeff0 = 1, coeff1 = 1;
       rtx lhs = op0, rhs = op1;
       if (((enum rtx_code) (lhs)->code) == NEG)
  coeff0 = -1, lhs = (((lhs)->u.fld[0]).rtx1);
       else if (((enum rtx_code) (lhs)->code) == MULT
         && ((enum rtx_code) ((((lhs)->u.fld[1]).rtx1))->code) == CONST_INT)
  {
    coeff0 = (((((lhs)->u.fld[1]).rtx1))->u.hwint[0]), lhs = (((lhs)->u.fld[0]).rtx1);
  }
       else if (((enum rtx_code) (lhs)->code) == ASHIFT
         && ((enum rtx_code) ((((lhs)->u.fld[1]).rtx1))->code) == CONST_INT
         && (((((lhs)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
         && (((((lhs)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4))
  {
    coeff0 = ((long) 1) << (((((lhs)->u.fld[1]).rtx1))->u.hwint[0]);
    lhs = (((lhs)->u.fld[0]).rtx1);
  }
       if (((enum rtx_code) (rhs)->code) == NEG)
  coeff1 = - 1, rhs = (((rhs)->u.fld[0]).rtx1);
       else if (((enum rtx_code) (rhs)->code) == MULT
         && ((enum rtx_code) ((((rhs)->u.fld[1]).rtx1))->code) == CONST_INT)
  {
    coeff1 = (((((rhs)->u.fld[1]).rtx1))->u.hwint[0]), rhs = (((rhs)->u.fld[0]).rtx1);
  }
       else if (((enum rtx_code) (rhs)->code) == ASHIFT
         && ((enum rtx_code) ((((rhs)->u.fld[1]).rtx1))->code) == CONST_INT
         && (((((rhs)->u.fld[1]).rtx1))->u.hwint[0]) >= 0
         && (((((rhs)->u.fld[1]).rtx1))->u.hwint[0]) < (8 * 4))
  {
    coeff1 = ((long) 1) << (((((rhs)->u.fld[1]).rtx1))->u.hwint[0]);
    rhs = (((rhs)->u.fld[0]).rtx1);
  }
       if (rtx_equal_p (lhs, rhs))
  {
    rtx orig = gen_rtx_fmt_ee (MINUS, (mode), (op0), (op1));
    tem = simplify_gen_binary (MULT, mode, lhs,
          gen_rtx_CONST_INT (VOIDmode, (long) (coeff0 - coeff1)));
    return rtx_cost (tem, SET) <= rtx_cost (orig, SET)
    ? tem : 0;
  }
     }
   if (((enum rtx_code) (op1)->code) == NEG)
     return simplify_gen_binary (PLUS, mode, op0, (((op1)->u.fld[0]).rtx1));
   if (((enum rtx_code) (op0)->code) == NEG
       && (((enum rtx_code) (op1)->code) == CONST_INT
    || ((enum rtx_code) (op1)->code) == CONST_DOUBLE))
     {
       tem = simplify_unary_operation (NEG, mode, op1, mode);
       if (tem)
  return simplify_gen_binary (MINUS, mode, tem, (((op0)->u.fld[0]).rtx1));
     }
   if ((mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT || mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_VECTOR_INT)
       && (((enum rtx_code) (op0)->code) == PLUS || ((enum rtx_code) (op0)->code) == MINUS
    || ((enum rtx_code) (op1)->code) == PLUS || ((enum rtx_code) (op1)->code) == MINUS
    || (((enum rtx_code) (op0)->code) == CONST
        && ((enum rtx_code) ((((op0)->u.fld[0]).rtx1))->code) == PLUS)
    || (((enum rtx_code) (op1)->code) == CONST
        && ((enum rtx_code) ((((op1)->u.fld[0]).rtx1))->code) == PLUS))
       && (tem = simplify_plus_minus (code, mode, op0, op1, 0)) != 0)
     return tem;
   if (((enum rtx_code) (op1)->code) == CONST_INT && ((enum machine_mode) (op0)->mode) != VOIDmode)
     return simplify_gen_binary (PLUS, mode,
     op0,
     neg_const_int (mode, op1));
   if (((enum rtx_code) (op1)->code) == AND)
     {
       if (rtx_equal_p (op0, (((op1)->u.fld[0]).rtx1)))
  {
    tem = simplify_gen_unary (NOT, mode, (((op1)->u.fld[1]).rtx1),
         ((enum machine_mode) ((((op1)->u.fld[1]).rtx1))->mode));
    return simplify_gen_binary (AND, mode, op0, tem);
  }
       if (rtx_equal_p (op0, (((op1)->u.fld[1]).rtx1)))
  {
    tem = simplify_gen_unary (NOT, mode, (((op1)->u.fld[0]).rtx1),
         ((enum machine_mode) ((((op1)->u.fld[0]).rtx1))->mode));
    return simplify_gen_binary (AND, mode, op0, tem);
  }
     }
   break;
 case MULT:
   if (trueop1 == (const_int_rtx[64 -1]))
     return simplify_gen_unary (NEG, mode, op0, mode);
   if (!(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
       && !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations)
       && trueop1 == (const_tiny_rtx[0][(int) (mode)])
       && ! side_effects_p (op0))
     return op1;
   if (!(flag_signaling_nans && (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
       && trueop1 == (const_tiny_rtx[1][(int) (mode)]))
     return op0;
   if (((enum rtx_code) (trueop1)->code) == CONST_INT
       && (val = exact_log2_wide ((unsigned long) (((trueop1)->u.hwint[0])))) >= 0
       && (width <= (8 * 4)
    || val != (8 * 4) - 1)
       && ! rtx_equal_function_value_matters)
     return simplify_gen_binary (ASHIFT, mode, op0, gen_rtx_CONST_INT (VOIDmode, (long) (val)));
   if (((enum rtx_code) (trueop1)->code) == CONST_DOUBLE
       && mode_class[((enum machine_mode) (trueop1)->mode)] == MODE_FLOAT
       && ((enum machine_mode) (op0)->mode) == mode)
     {
       struct real_value d;
       memcpy (&(d), &(((trueop1))->u.hwint[0]), sizeof (struct real_value));
       if (real_compare (EQ_EXPR, &(d), &(dconst2)))
  return simplify_gen_binary (PLUS, mode, op0, copy_rtx (op0));
       if (real_compare (EQ_EXPR, &(d), &(dconstm1)))
  return simplify_gen_unary (NEG, mode, op0, mode);
     }
   if (! (mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT)
       || flag_unsafe_math_optimizations)
     {
       tem = simplify_associative_operation (code, mode, op0, op1);
       if (tem)
  return tem;
     }
   break;
 case IOR:
   if (trueop1 == (const_int_rtx[64]))
     return op0;
   if (((enum rtx_code) (trueop1)->code) == CONST_INT
       && ((((trueop1)->u.hwint[0]) & mode_mask_array[mode])
           == mode_mask_array[mode]))
     return op1;
   if (rtx_equal_p (trueop0, trueop1) && ! side_effects_p (op0))
     return op0;
   if (((((enum rtx_code) (op0)->code) == NOT && rtx_equal_p ((((op0)->u.fld[0]).rtx1), op1))
        || (((enum rtx_code) (op1)->code) == NOT && rtx_equal_p ((((op1)->u.fld[0]).rtx1), op0)))
       && ! side_effects_p (op0)
       && mode_class[mode] != MODE_CC)
     return (const_int_rtx[64 -1]);
   tem = simplify_associative_operation (code, mode, op0, op1);
   if (tem)
     return tem;
   break;
 case XOR:
   if (trueop1 == (const_int_rtx[64]))
     return op0;
   if (((enum rtx_code) (trueop1)->code) == CONST_INT
       && ((((trueop1)->u.hwint[0]) & mode_mask_array[mode])
    == mode_mask_array[mode]))
     return simplify_gen_unary (NOT, mode, op0, mode);
   if (trueop0 == trueop1
       && ! side_effects_p (op0)
       && mode_class[mode] != MODE_CC)
     return (const_int_rtx[64]);
   if ((((enum rtx_code) (op1)->code) == CONST_INT
        || ((enum rtx_code) (op1)->code) == CONST_DOUBLE)
       && mode_signbit_p (mode, op1))
     return simplify_gen_binary (PLUS, mode, op0, op1);
   if ((((enum rtx_code) (op1)->code) == CONST_INT
        || ((enum rtx_code) (op1)->code) == CONST_DOUBLE)
       && ((enum rtx_code) (op0)->code) == PLUS
       && (((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_INT
    || ((enum rtx_code) ((((op0)->u.fld[1]).rtx1))->code) == CONST_DOUBLE)
       && mode_signbit_p (mode, (((op0)->u.fld[1]).rtx1)))
     return simplify_gen_binary (XOR, mode, (((op0)->u.fld[0]).rtx1),
     simplify_gen_binary (XOR, mode, op1,
            (((op0)->u.fld[1]).rtx1)));
   tem = simplify_associative_operation (code, mode, op0, op1);
   if (tem)
     return tem;
   break;
 case AND:
   if (trueop1 == (const_int_rtx[64]) && ! side_effects_p (op0))
     return (const_int_rtx[64]);
   if (((enum rtx_code) (trueop1)->code) == CONST_INT
       && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
       && (nonzero_bits (trueop0, mode) & ~((trueop1)->u.hwint[0])) == 0)
     return op0;
   if (trueop0 == trueop1 && ! side_effects_p (op0)
       && mode_class[mode] != MODE_CC)
     return op0;
   if (((((enum rtx_code) (op0)->code) == NOT && rtx_equal_p ((((op0)->u.fld[0]).rtx1), op1))
        || (((enum rtx_code) (op1)->code) == NOT && rtx_equal_p ((((op1)->u.fld[0]).rtx1), op0)))
       && ! side_effects_p (op0)
       && mode_class[mode] != MODE_CC)
     return (const_int_rtx[64]);
   if (((enum rtx_code) (trueop1)->code) == CONST_INT
       && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4)
       && ~((trueop1)->u.hwint[0])
       && (((trueop1)->u.hwint[0]) & (((trueop1)->u.hwint[0]) + 1)) == 0
       && (((enum rtx_code) (op0)->code) == PLUS || ((enum rtx_code) (op0)->code) == MINUS))
     {
       rtx pmop[2];
       int which;
       pmop[0] = (((op0)->u.fld[0]).rtx1);
       pmop[1] = (((op0)->u.fld[1]).rtx1);
       for (which = 0; which < 2; which++)
  {
    tem = pmop[which];
    switch (((enum rtx_code) (tem)->code))
      {
      case AND:
        if (((enum rtx_code) ((((tem)->u.fld[1]).rtx1))->code) == CONST_INT
     && ((((((tem)->u.fld[1]).rtx1))->u.hwint[0]) & ((trueop1)->u.hwint[0]))
        == ((trueop1)->u.hwint[0]))
   pmop[which] = (((tem)->u.fld[0]).rtx1);
        break;
      case IOR:
      case XOR:
        if (((enum rtx_code) ((((tem)->u.fld[1]).rtx1))->code) == CONST_INT
     && ((((((tem)->u.fld[1]).rtx1))->u.hwint[0]) & ((trueop1)->u.hwint[0])) == 0)
   pmop[which] = (((tem)->u.fld[0]).rtx1);
        break;
      default:
        break;
      }
  }
       if (pmop[0] != (((op0)->u.fld[0]).rtx1) || pmop[1] != (((op0)->u.fld[1]).rtx1))
  {
    tem = simplify_gen_binary (((enum rtx_code) (op0)->code), mode,
          pmop[0], pmop[1]);
    return simplify_gen_binary (code, mode, tem, op1);
  }
     }
   tem = simplify_associative_operation (code, mode, op0, op1);
   if (tem)
     return tem;
   break;
 case UDIV:
   if (trueop0 == (const_int_rtx[64]))
     return side_effects_p (op1)
     ? simplify_gen_binary (AND, mode, op1, (const_int_rtx[64]))
     : (const_int_rtx[64]);
   if (trueop1 == (const_int_rtx[64 +1]))
     {
       rtx x = gen_lowpart_common (mode, op0);
       if (x)
  return x;
       if (mode != ((enum machine_mode) (op0)->mode) && ((enum machine_mode) (op0)->mode) != VOIDmode)
  return gen_lowpart_SUBREG (mode, op0);
       return op0;
     }
   if (((enum rtx_code) (trueop1)->code) == CONST_INT
       && (arg1 = exact_log2_wide ((unsigned long) (((trueop1)->u.hwint[0])))) > 0)
     return simplify_gen_binary (LSHIFTRT, mode, op0, gen_rtx_CONST_INT (VOIDmode, (long) (arg1)));
   break;
 case DIV:
   if (mode_class[mode] == MODE_FLOAT)
     {
       if (trueop0 == (const_tiny_rtx[0][(int) (mode)])
    && !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
    && !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations)
    && ! side_effects_p (op1))
  return op0;
       if (trueop1 == (const_tiny_rtx[1][(int) (mode)])
    && !(flag_signaling_nans && (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)))
  return op0;
       if (((enum rtx_code) (trueop1)->code) == CONST_DOUBLE
    && trueop1 != (const_tiny_rtx[0][(int) (mode)]))
  {
    struct real_value d;
    memcpy (&(d), &(((trueop1))->u.hwint[0]), sizeof (struct real_value));
    if (real_compare (EQ_EXPR, &(d), &(dconstm1))
        && !(flag_signaling_nans && (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)))
      return simplify_gen_unary (NEG, mode, op0, mode);
    if (flag_unsafe_math_optimizations
        && !real_compare (EQ_EXPR, &(d), &(dconst0)))
      {
        real_arithmetic (&(d), RDIV_EXPR, &(dconst1), &(d));
        tem = const_double_from_real_value (d, mode);
        return simplify_gen_binary (MULT, mode, op0, tem);
      }
  }
     }
   else
     {
       if (trueop0 == (const_int_rtx[64]))
  return side_effects_p (op1)
         ? simplify_gen_binary (AND, mode, op1, (const_int_rtx[64]))
         : (const_int_rtx[64]);
       if (trueop1 == (const_int_rtx[64 +1]))
  {
    rtx x = gen_lowpart_common (mode, op0);
    if (x)
      return x;
    if (mode != ((enum machine_mode) (op0)->mode) && ((enum machine_mode) (op0)->mode) != VOIDmode)
      return gen_lowpart_SUBREG (mode, op0);
    return op0;
  }
       if (trueop1 == (const_int_rtx[64 -1]))
  {
    rtx x = gen_lowpart_common (mode, op0);
    if (!x)
      x = (mode != ((enum machine_mode) (op0)->mode) && ((enum machine_mode) (op0)->mode) != VOIDmode)
   ? gen_lowpart_SUBREG (mode, op0) : op0;
    return simplify_gen_unary (NEG, mode, x, mode);
  }
     }
   break;
 case UMOD:
   if (trueop0 == (const_int_rtx[64]))
     return side_effects_p (op1)
     ? simplify_gen_binary (AND, mode, op1, (const_int_rtx[64]))
     : (const_int_rtx[64]);
   if (trueop1 == (const_int_rtx[64 +1]))
     return side_effects_p (op0)
     ? simplify_gen_binary (AND, mode, op0, (const_int_rtx[64]))
     : (const_int_rtx[64]);
   if (((enum rtx_code) (trueop1)->code) == CONST_INT
       && exact_log2_wide ((unsigned long) (((trueop1)->u.hwint[0]))) > 0)
     return simplify_gen_binary (AND, mode, op0,
     gen_rtx_CONST_INT (VOIDmode, (long) (((op1)->u.hwint[0]) - 1)));
   break;
 case MOD:
   if (trueop0 == (const_int_rtx[64]))
     return side_effects_p (op1)
     ? simplify_gen_binary (AND, mode, op1, (const_int_rtx[64]))
     : (const_int_rtx[64]);
   if (trueop1 == (const_int_rtx[64 +1]) || trueop1 == (const_int_rtx[64 -1]))
     return side_effects_p (op0)
     ? simplify_gen_binary (AND, mode, op0, (const_int_rtx[64]))
     : (const_int_rtx[64]);
   break;
 case ROTATERT:
 case ROTATE:
 case ASHIFTRT:
   if (((enum rtx_code) (trueop0)->code) == CONST_INT && width <= (8 * 4)
       && (unsigned long) ((trueop0)->u.hwint[0]) == mode_mask_array[mode]
       && ! side_effects_p (op1))
     return op0;
 case ASHIFT:
 case LSHIFTRT:
   if (trueop1 == (const_int_rtx[64]))
     return op0;
   if (trueop0 == (const_int_rtx[64]) && ! side_effects_p (op1))
     return op0;
   break;
 case SMIN:
   if (width <= (8 * 4)
       && ((enum rtx_code) (trueop1)->code) == CONST_INT
       && ((trueop1)->u.hwint[0]) == (long) 1 << (width -1)
       && ! side_effects_p (op0))
     return op1;
   if (rtx_equal_p (trueop0, trueop1) && ! side_effects_p (op0))
     return op0;
   tem = simplify_associative_operation (code, mode, op0, op1);
   if (tem)
     return tem;
   break;
 case SMAX:
   if (width <= (8 * 4)
       && ((enum rtx_code) (trueop1)->code) == CONST_INT
       && ((unsigned long) ((trueop1)->u.hwint[0])
    == (unsigned long) mode_mask_array[mode] >> 1)
       && ! side_effects_p (op0))
     return op1;
   if (rtx_equal_p (trueop0, trueop1) && ! side_effects_p (op0))
     return op0;
   tem = simplify_associative_operation (code, mode, op0, op1);
   if (tem)
     return tem;
   break;
 case UMIN:
   if (trueop1 == (const_int_rtx[64]) && ! side_effects_p (op0))
     return op1;
   if (rtx_equal_p (trueop0, trueop1) && ! side_effects_p (op0))
     return op0;
   tem = simplify_associative_operation (code, mode, op0, op1);
   if (tem)
     return tem;
   break;
 case UMAX:
   if (trueop1 == (const_int_rtx[64 -1]) && ! side_effects_p (op0))
     return op1;
   if (rtx_equal_p (trueop0, trueop1) && ! side_effects_p (op0))
     return op0;
   tem = simplify_associative_operation (code, mode, op0, op1);
   if (tem)
     return tem;
   break;
 case SS_PLUS:
 case US_PLUS:
 case SS_MINUS:
 case US_MINUS:
   return 0;
 case VEC_SELECT:
   if (!(mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT))
     {
       if (!(mode_class[((enum machine_mode) (trueop0)->mode)] == MODE_VECTOR_INT || mode_class[((enum machine_mode) (trueop0)->mode)] == MODE_VECTOR_FLOAT)
    || (mode
        != mode_inner[((enum machine_mode) (trueop0)->mode)])
    || ((enum rtx_code) (trueop1)->code) != PARALLEL
    || (((((trueop1)->u.fld[0]).rtvec1))->num_elem) != 1
    || ((enum rtx_code) ((((((trueop1)->u.fld[0]).rtvec1))->elem[0]))->code) != CONST_INT)
  abort ();
       if (((enum rtx_code) (trueop0)->code) == CONST_VECTOR)
  return (((((trueop0)->u.fld[0]).rtvec1))->elem[(((((((trueop1)->u.fld[0]).rtvec1))->elem[0]))->u.hwint[0])]);
     }
   else
     {
       if (!(mode_class[((enum machine_mode) (trueop0)->mode)] == MODE_VECTOR_INT || mode_class[((enum machine_mode) (trueop0)->mode)] == MODE_VECTOR_FLOAT)
    || (mode_inner[mode]
        != mode_inner[((enum machine_mode) (trueop0)->mode)])
    || ((enum rtx_code) (trueop1)->code) != PARALLEL)
  abort ();
       if (((enum rtx_code) (trueop0)->code) == CONST_VECTOR)
  {
    int elt_size = ((unsigned short) mode_size[mode_inner[mode]]);
    unsigned n_elts = (((unsigned short) mode_size[mode]) / elt_size);
    rtvec v = rtvec_alloc (n_elts);
    unsigned int i;
    if ((((((trueop1)->u.fld[0]).rtvec1))->num_elem) != (int) n_elts)
      abort ();
    for (i = 0; i < n_elts; i++)
      {
        rtx x = (((((trueop1)->u.fld[0]).rtvec1))->elem[i]);
        if (((enum rtx_code) (x)->code) != CONST_INT)
   abort ();
        ((v)->elem[i]) = (((((trueop0)->u.fld[0]).rtvec1))->elem[((x)->u.hwint[0])]);
      }
    return gen_rtx_CONST_VECTOR (mode, v);
  }
     }
   return 0;
 case VEC_CONCAT:
   {
     enum machine_mode op0_mode = (((enum machine_mode) (trueop0)->mode) != VOIDmode
       ? ((enum machine_mode) (trueop0)->mode)
       : mode_inner[mode]);
     enum machine_mode op1_mode = (((enum machine_mode) (trueop1)->mode) != VOIDmode
       ? ((enum machine_mode) (trueop1)->mode)
       : mode_inner[mode]);
     if (!(mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT)
  || (((unsigned short) mode_size[op0_mode]) + ((unsigned short) mode_size[op1_mode])
      != ((unsigned short) mode_size[mode])))
       abort ();
     if (((mode_class[op0_mode] == MODE_VECTOR_INT || mode_class[op0_mode] == MODE_VECTOR_FLOAT)
   && (mode_inner[mode]
       != mode_inner[op0_mode]))
  || (!(mode_class[op0_mode] == MODE_VECTOR_INT || mode_class[op0_mode] == MODE_VECTOR_FLOAT)
      && mode_inner[mode] != op0_mode))
       abort ();
     if (((mode_class[op1_mode] == MODE_VECTOR_INT || mode_class[op1_mode] == MODE_VECTOR_FLOAT)
   && (mode_inner[mode]
       != mode_inner[op1_mode]))
  || (!(mode_class[op1_mode] == MODE_VECTOR_INT || mode_class[op1_mode] == MODE_VECTOR_FLOAT)
      && mode_inner[mode] != op1_mode))
       abort ();
     if ((((enum rtx_code) (trueop0)->code) == CONST_VECTOR
   || ((enum rtx_code) (trueop0)->code) == CONST_INT
   || ((enum rtx_code) (trueop0)->code) == CONST_DOUBLE)
  && (((enum rtx_code) (trueop1)->code) == CONST_VECTOR
      || ((enum rtx_code) (trueop1)->code) == CONST_INT
      || ((enum rtx_code) (trueop1)->code) == CONST_DOUBLE))
       {
  int elt_size = ((unsigned short) mode_size[mode_inner[mode]]);
  unsigned n_elts = (((unsigned short) mode_size[mode]) / elt_size);
  rtvec v = rtvec_alloc (n_elts);
  unsigned int i;
  unsigned in_n_elts = 1;
  if ((mode_class[op0_mode] == MODE_VECTOR_INT || mode_class[op0_mode] == MODE_VECTOR_FLOAT))
    in_n_elts = (((unsigned short) mode_size[op0_mode]) / elt_size);
  for (i = 0; i < n_elts; i++)
    {
      if (i < in_n_elts)
        {
   if (!(mode_class[op0_mode] == MODE_VECTOR_INT || mode_class[op0_mode] == MODE_VECTOR_FLOAT))
     ((v)->elem[i]) = trueop0;
   else
     ((v)->elem[i]) = (((((trueop0)->u.fld[0]).rtvec1))->elem[i]);
        }
      else
        {
   if (!(mode_class[op1_mode] == MODE_VECTOR_INT || mode_class[op1_mode] == MODE_VECTOR_FLOAT))
     ((v)->elem[i]) = trueop1;
   else
     ((v)->elem[i]) = (((((trueop1)->u.fld[0]).rtvec1))->elem[i - in_n_elts])
                            ;
        }
    }
  return gen_rtx_CONST_VECTOR (mode, v);
       }
   }
   return 0;
 default:
   abort ();
 }
      return 0;
    }
  arg0 = ((trueop0)->u.hwint[0]);
  arg1 = ((trueop1)->u.hwint[0]);
  if (width < (8 * 4))
    {
      arg0 &= ((long) 1 << width) - 1;
      arg1 &= ((long) 1 << width) - 1;
      arg0s = arg0;
      if (arg0s & ((long) 1 << (width - 1)))
 arg0s |= ((long) (-1) << width);
      arg1s = arg1;
      if (arg1s & ((long) 1 << (width - 1)))
 arg1s |= ((long) (-1) << width);
    }
  else
    {
      arg0s = arg0;
      arg1s = arg1;
    }
  switch (code)
    {
    case PLUS:
      val = arg0s + arg1s;
      break;
    case MINUS:
      val = arg0s - arg1s;
      break;
    case MULT:
      val = arg0s * arg1s;
      break;
    case DIV:
      if (arg1s == 0
   || (arg0s == (long) 1 << ((8 * 4) - 1)
       && arg1s == -1))
 return 0;
      val = arg0s / arg1s;
      break;
    case MOD:
      if (arg1s == 0
   || (arg0s == (long) 1 << ((8 * 4) - 1)
       && arg1s == -1))
 return 0;
      val = arg0s % arg1s;
      break;
    case UDIV:
      if (arg1 == 0
   || (arg0s == (long) 1 << ((8 * 4) - 1)
       && arg1s == -1))
 return 0;
      val = (unsigned long) arg0 / arg1;
      break;
    case UMOD:
      if (arg1 == 0
   || (arg0s == (long) 1 << ((8 * 4) - 1)
       && arg1s == -1))
 return 0;
      val = (unsigned long) arg0 % arg1;
      break;
    case AND:
      val = arg0 & arg1;
      break;
    case IOR:
      val = arg0 | arg1;
      break;
    case XOR:
      val = arg0 ^ arg1;
      break;
    case LSHIFTRT:
      if (arg1 < 0)
 return 0;
      if (0)
 arg1 %= width;
      val = ((unsigned long) arg0) >> arg1;
      break;
    case ASHIFT:
      if (arg1 < 0)
 return 0;
      if (0)
 arg1 %= width;
      val = ((unsigned long) arg0) << arg1;
      break;
    case ASHIFTRT:
      if (arg1 < 0)
 return 0;
      if (0)
 arg1 %= width;
      val = arg0s >> arg1;
      if (arg0s < 0 && arg1 > 0)
 val |= ((long) -1) << ((8 * 4) - arg1);
      break;
    case ROTATERT:
      if (arg1 < 0)
 return 0;
      arg1 %= width;
      val = ((((unsigned long) arg0) << (width - arg1))
      | (((unsigned long) arg0) >> arg1));
      break;
    case ROTATE:
      if (arg1 < 0)
 return 0;
      arg1 %= width;
      val = ((((unsigned long) arg0) << arg1)
      | (((unsigned long) arg0) >> (width - arg1)));
      break;
    case COMPARE:
      return 0;
    case SMIN:
      val = arg0s <= arg1s ? arg0s : arg1s;
      break;
    case UMIN:
      val = ((unsigned long) arg0
      <= (unsigned long) arg1 ? arg0 : arg1);
      break;
    case SMAX:
      val = arg0s > arg1s ? arg0s : arg1s;
      break;
    case UMAX:
      val = ((unsigned long) arg0
      > (unsigned long) arg1 ? arg0 : arg1);
      break;
    case SS_PLUS:
    case US_PLUS:
    case SS_MINUS:
    case US_MINUS:
      return 0;
    default:
      abort ();
    }
  val = trunc_int_for_mode (val, mode);
  return gen_rtx_CONST_INT (VOIDmode, (long) (val));
}
struct simplify_plus_minus_op_data
{
  rtx op;
  int neg;
};
static int
simplify_plus_minus_op_data_cmp (const void *p1, const void *p2)
{
  const struct simplify_plus_minus_op_data *d1 = p1;
  const struct simplify_plus_minus_op_data *d2 = p2;
  return (commutative_operand_precedence (d2->op)
   - commutative_operand_precedence (d1->op));
}
static rtx
simplify_plus_minus (enum rtx_code code, enum machine_mode mode, rtx op0,
       rtx op1, int force)
{
  struct simplify_plus_minus_op_data ops[8];
  rtx result, tem;
  int n_ops = 2, input_ops = 2, input_consts = 0, n_consts;
  int first, changed;
  int i, j;
  memset (ops, 0, sizeof ops);
  ops[0].op = op0;
  ops[0].neg = 0;
  ops[1].op = op1;
  ops[1].neg = (code == MINUS);
  do
    {
      changed = 0;
      for (i = 0; i < n_ops; i++)
 {
   rtx this_op = ops[i].op;
   int this_neg = ops[i].neg;
   enum rtx_code this_code = ((enum rtx_code) (this_op)->code);
   switch (this_code)
     {
     case PLUS:
     case MINUS:
       if (n_ops == 7)
  return (rtx) 0;
       ops[n_ops].op = (((this_op)->u.fld[1]).rtx1);
       ops[n_ops].neg = (this_code == MINUS) ^ this_neg;
       n_ops++;
       ops[i].op = (((this_op)->u.fld[0]).rtx1);
       input_ops++;
       changed = 1;
       break;
     case NEG:
       ops[i].op = (((this_op)->u.fld[0]).rtx1);
       ops[i].neg = ! this_neg;
       changed = 1;
       break;
     case CONST:
       if (n_ops < 7
    && ((enum rtx_code) ((((this_op)->u.fld[0]).rtx1))->code) == PLUS
    && ((rtx_class[(int) (((enum rtx_code) (((((((this_op)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (((((((this_op)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == CONST_VECTOR)
    && ((rtx_class[(int) (((enum rtx_code) (((((((this_op)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (((((((this_op)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_VECTOR))
  {
    ops[i].op = ((((((this_op)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
    ops[n_ops].op = ((((((this_op)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
    ops[n_ops].neg = this_neg;
    n_ops++;
    input_consts++;
    changed = 1;
  }
       break;
     case NOT:
       if (n_ops != 7)
  {
    ops[n_ops].op = (const_int_rtx[64 -1]);
    ops[n_ops++].neg = this_neg;
    ops[i].op = (((this_op)->u.fld[0]).rtx1);
    ops[i].neg = !this_neg;
    changed = 1;
  }
       break;
     case CONST_INT:
       if (this_neg)
  {
    ops[i].op = neg_const_int (mode, this_op);
    ops[i].neg = 0;
    changed = 1;
  }
       break;
     default:
       break;
     }
 }
    }
  while (changed);
  if (n_ops <= 2 && !force)
    return (rtx) 0;
  for (i = 0; i < n_ops; i++)
    if (((enum rtx_code) (ops[i].op)->code) == CONST)
      input_consts++;
  first = 1;
  do
    {
      changed = first;
      for (i = 0; i < n_ops - 1; i++)
 for (j = i + 1; j < n_ops; j++)
   {
     rtx lhs = ops[i].op, rhs = ops[j].op;
     int lneg = ops[i].neg, rneg = ops[j].neg;
     if (lhs != 0 && rhs != 0
  && (! first || (((rtx_class[(int) (((enum rtx_code) (lhs)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (lhs)->code) == CONST_VECTOR) && ((rtx_class[(int) (((enum rtx_code) (rhs)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (rhs)->code) == CONST_VECTOR))))
       {
  enum rtx_code ncode = PLUS;
  if (lneg != rneg)
    {
      ncode = MINUS;
      if (lneg)
        tem = lhs, lhs = rhs, rhs = tem;
    }
  else if (swap_commutative_operands_p (lhs, rhs))
    tem = lhs, lhs = rhs, rhs = tem;
  tem = simplify_binary_operation (ncode, mode, lhs, rhs);
  if (tem
      && ! (((enum rtx_code) (tem)->code) == CONST
     && ((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == ncode
     && ((((((tem)->u.fld[0]).rtx1))->u.fld[0]).rtx1) == lhs
     && ((((((tem)->u.fld[0]).rtx1))->u.fld[1]).rtx1) == rhs)
      && ! (first
     && ((enum rtx_code) (tem)->code) == NOT
     && (((tem)->u.fld[0]).rtx1) == rhs))
    {
      lneg &= rneg;
      if (((enum rtx_code) (tem)->code) == NEG)
        tem = (((tem)->u.fld[0]).rtx1), lneg = !lneg;
      if (((enum rtx_code) (tem)->code) == CONST_INT && lneg)
        tem = neg_const_int (mode, tem), lneg = 0;
      ops[i].op = tem;
      ops[i].neg = lneg;
      ops[j].op = (rtx) 0;
      changed = 1;
    }
       }
   }
      first = 0;
    }
  while (changed);
  for (i = 0, j = 0; j < n_ops; j++)
    if (ops[j].op)
      ops[i++] = ops[j];
  n_ops = i;
  qsort (ops, n_ops, sizeof (*ops), simplify_plus_minus_op_data_cmp);
  if (n_ops == 2
      && ((enum rtx_code) (ops[1].op)->code) == CONST_INT
      && ((rtx_class[(int) (((enum rtx_code) (ops[0].op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (ops[0].op)->code) == CONST_VECTOR)
      && ops[0].neg)
    return gen_rtx_fmt_ee (MINUS, mode, ops[1].op, ops[0].op);
  if (n_ops > 1
      && ((enum rtx_code) (ops[n_ops - 1].op)->code) == CONST_INT
      && ((rtx_class[(int) (((enum rtx_code) (ops[n_ops - 2].op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (ops[n_ops - 2].op)->code) == CONST_VECTOR))
    {
      rtx value1 = ops[n_ops - 1].op;
      if (ops[n_ops - 1].neg ^ ops[n_ops - 2].neg)
 value1 = neg_const_int (mode, value1);
      ops[n_ops - 2].op = plus_constant_wide ((ops[n_ops - 2].op), (long) (((value1)->u.hwint[0])));
      n_ops--;
    }
  n_consts = 0;
  for (i = 0; i < n_ops; i++)
    if (((enum rtx_code) (ops[i].op)->code) == CONST)
      n_consts++;
  if (!force
      && (n_ops + n_consts > input_ops
   || (n_ops + n_consts == input_ops && n_consts <= input_consts)))
    return (rtx) 0;
  for (i = 0; i < n_ops && ops[i].neg; i++)
    continue;
  if (i == n_ops)
    ops[0].op = gen_rtx_fmt_e (NEG, (mode), (ops[0].op));
  else if (i != 0)
    {
      tem = ops[0].op;
      ops[0] = ops[i];
      ops[i].op = tem;
      ops[i].neg = 1;
    }
  result = ops[0].op;
  for (i = 1; i < n_ops; i++)
    result = gen_rtx_fmt_ee (ops[i].neg ? MINUS : PLUS,
        mode, result, ops[i].op);
  return result;
}
rtx
simplify_relational_operation (enum rtx_code code, enum machine_mode mode,
          enum machine_mode cmp_mode, rtx op0, rtx op1)
{
  rtx tem, trueop0, trueop1;
  if (cmp_mode == VOIDmode)
    cmp_mode = ((enum machine_mode) (op0)->mode);
  if (cmp_mode == VOIDmode)
    cmp_mode = ((enum machine_mode) (op1)->mode);
  tem = simplify_const_relational_operation (code, cmp_mode, op0, op1);
  if (tem)
    {
      return tem;
    }
  if (swap_commutative_operands_p (op0, op1)
      || (op0 == (const_int_rtx[64]) && op1 != (const_int_rtx[64])))
    tem = op0, op0 = op1, op1 = tem, code = swap_condition (code);
  if (((enum rtx_code) (op0)->code) == COMPARE && op1 == (const_int_rtx[64]))
    return simplify_relational_operation (code, mode, VOIDmode,
              (((op0)->u.fld[0]).rtx1), (((op0)->u.fld[1]).rtx1));
  if (mode == VOIDmode
      || mode_class[cmp_mode] == MODE_CC
      || ((op0) ? 0 : 0))
    return (rtx) 0;
  trueop0 = avoid_constant_pool_reference (op0);
  trueop1 = avoid_constant_pool_reference (op1);
  return simplify_relational_operation_1 (code, mode, cmp_mode,
         trueop0, trueop1);
}
rtx
simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
     enum machine_mode cmp_mode, rtx op0, rtx op1)
{
  if (((enum rtx_code) (op1)->code) == CONST_INT)
    {
      if (((op1)->u.hwint[0]) == 0 && (((rtx_class[(int) (((enum rtx_code) (op0)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
 {
   if (code == NE)
     {
       if (((enum machine_mode) (op0)->mode) == cmp_mode)
  return simplify_rtx (op0);
       else
  return simplify_gen_relational (((enum rtx_code) (op0)->code), mode, VOIDmode,
             (((op0)->u.fld[0]).rtx1), (((op0)->u.fld[1]).rtx1));
     }
   else if (code == EQ)
     {
       enum rtx_code new = reversed_comparison_code (op0, (rtx) 0);
       if (new != UNKNOWN)
         return simplify_gen_relational (new, mode, VOIDmode,
             (((op0)->u.fld[0]).rtx1), (((op0)->u.fld[1]).rtx1));
     }
 }
    }
  return (rtx) 0;
}
rtx
simplify_const_relational_operation (enum rtx_code code,
         enum machine_mode mode,
         rtx op0, rtx op1)
{
  int equal, op0lt, op0ltu, op1lt, op1ltu;
  rtx tem;
  rtx trueop0;
  rtx trueop1;
  if (mode == VOIDmode
      && (((enum machine_mode) (op0)->mode) != VOIDmode
   || ((enum machine_mode) (op1)->mode) != VOIDmode))
    abort ();
  if (((enum rtx_code) (op0)->code) == COMPARE && op1 == (const_int_rtx[64]))
    op1 = (((op0)->u.fld[1]).rtx1), op0 = (((op0)->u.fld[0]).rtx1);
  if (mode_class[((enum machine_mode) (op0)->mode)] == MODE_CC || ((op0) ? 0 : 0))
    return 0;
  if (swap_commutative_operands_p (op0, op1))
    {
      tem = op0, op0 = op1, op1 = tem;
      code = swap_condition (code);
    }
  trueop0 = avoid_constant_pool_reference (op0);
  trueop1 = avoid_constant_pool_reference (op1);
  if (!flag_wrapv && (mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT || mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_VECTOR_INT) && trueop1 != (const_int_rtx[64])
      && ! (((((enum rtx_code) (op0)->code) == REG) || ((enum rtx_code) (trueop0)->code) == CONST_INT)
     && ((((enum rtx_code) (op1)->code) == REG) || ((enum rtx_code) (trueop1)->code) == CONST_INT))
      && 0 != (tem = simplify_binary_operation (MINUS, mode, op0, op1))
      && ((code != EQ && code != NE) || ! nonzero_address_p (tem))
      && code != GTU && code != GEU && code != LTU && code != LEU)
    return simplify_const_relational_operation (signed_condition (code),
      mode, tem, (const_int_rtx[64]));
  if (flag_unsafe_math_optimizations && code == ORDERED)
    return const_true_rtx;
  if (flag_unsafe_math_optimizations && code == UNORDERED)
    return (const_int_rtx[64]);
  if (! (((mode_class[((enum machine_mode) (trueop0)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (trueop0)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (trueop0)->mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
      && rtx_equal_p (trueop0, trueop1)
      && ! side_effects_p (trueop0))
    equal = 1, op0lt = 0, op0ltu = 0, op1lt = 0, op1ltu = 0;
  else if (((enum rtx_code) (trueop0)->code) == CONST_DOUBLE
    && ((enum rtx_code) (trueop1)->code) == CONST_DOUBLE
    && mode_class[((enum machine_mode) (trueop0)->mode)] == MODE_FLOAT)
    {
      struct real_value d0, d1;
      memcpy (&(d0), &(((trueop0))->u.hwint[0]), sizeof (struct real_value));
      memcpy (&(d1), &(((trueop1))->u.hwint[0]), sizeof (struct real_value));
      if (real_isnan (&(d0)) || real_isnan (&(d1)))
 switch (code)
   {
   case UNEQ:
   case UNLT:
   case UNGT:
   case UNLE:
   case UNGE:
   case NE:
   case UNORDERED:
     return const_true_rtx;
   case EQ:
   case LT:
   case GT:
   case LE:
   case GE:
   case LTGT:
   case ORDERED:
     return (const_int_rtx[64]);
   default:
     return 0;
   }
      equal = real_compare (EQ_EXPR, &(d0), &(d1));
      op0lt = op0ltu = real_compare (LT_EXPR, &(d0), &(d1));
      op1lt = op1ltu = real_compare (LT_EXPR, &(d1), &(d0));
    }
  else if ((mode_class[mode] == MODE_INT || mode == VOIDmode)
    && (((enum rtx_code) (trueop0)->code) == CONST_DOUBLE
        || ((enum rtx_code) (trueop0)->code) == CONST_INT)
    && (((enum rtx_code) (trueop1)->code) == CONST_DOUBLE
        || ((enum rtx_code) (trueop1)->code) == CONST_INT))
    {
      int width = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
      long l0s, h0s, l1s, h1s;
      unsigned long l0u, h0u, l1u, h1u;
      if (((enum rtx_code) (trueop0)->code) == CONST_DOUBLE)
 {
   l0u = l0s = ((trueop0)->u.hwint[0]);
   h0u = h0s = ((trueop0)->u.hwint[1]);
 }
      else
 {
   l0u = l0s = ((trueop0)->u.hwint[0]);
   h0u = h0s = ((((long) l0s) < 0) ? ((long) -1) : ((long) 0));
 }
      if (((enum rtx_code) (trueop1)->code) == CONST_DOUBLE)
 {
   l1u = l1s = ((trueop1)->u.hwint[0]);
   h1u = h1s = ((trueop1)->u.hwint[1]);
 }
      else
 {
   l1u = l1s = ((trueop1)->u.hwint[0]);
   h1u = h1s = ((((long) l1s) < 0) ? ((long) -1) : ((long) 0));
 }
      if (width != 0 && width < (8 * 4))
 {
   l0u &= ((long) 1 << width) - 1;
   l1u &= ((long) 1 << width) - 1;
   if (l0s & ((long) 1 << (width - 1)))
     l0s |= ((long) (-1) << width);
   if (l1s & ((long) 1 << (width - 1)))
     l1s |= ((long) (-1) << width);
 }
      if (width != 0 && width <= (8 * 4))
 h0u = h1u = 0, h0s = ((((long) l0s) < 0) ? ((long) -1) : ((long) 0)), h1s = ((((long) l1s) < 0) ? ((long) -1) : ((long) 0));
      equal = (h0u == h1u && l0u == l1u);
      op0lt = (h0s < h1s || (h0s == h1s && l0u < l1u));
      op1lt = (h1s < h0s || (h1s == h0s && l1u < l0u));
      op0ltu = (h0u < h1u || (h0u == h1u && l0u < l1u));
      op1ltu = (h1u < h0u || (h1u == h0u && l1u < l0u));
    }
  else
    {
      if ((mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT || mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_VECTOR_INT)
   && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= (8 * 4))
 {
   rtx mmin, mmax;
   int sign;
   if (code == GEU
       || code == LEU
       || code == GTU
       || code == LTU)
     sign = 0;
   else
     sign = 1;
   get_mode_bounds (mode, sign, mode, &mmin, &mmax);
   tem = (rtx) 0;
   switch (code)
     {
     case GEU:
     case GE:
       if (rtx_equal_p (trueop1, mmin))
  tem = const_true_rtx;
       else
       break;
     case LEU:
     case LE:
       if (rtx_equal_p (trueop1, mmax))
  tem = const_true_rtx;
       break;
     case GTU:
     case GT:
       if (rtx_equal_p (trueop1, mmax))
  tem = (const_int_rtx[64]);
       break;
     case LTU:
     case LT:
       if (rtx_equal_p (trueop1, mmin))
  tem = (const_int_rtx[64]);
       break;
     default:
       break;
     }
   if (tem == (const_int_rtx[64])
       || tem == const_true_rtx)
     return tem;
 }
      switch (code)
 {
 case EQ:
   if (trueop1 == (const_int_rtx[64]) && nonzero_address_p (op0))
     return (const_int_rtx[64]);
   break;
 case NE:
   if (trueop1 == (const_int_rtx[64]) && nonzero_address_p (op0))
     return const_true_rtx;
   break;
 case LT:
   if (trueop1 == (const_tiny_rtx[0][(int) (mode)]) && !(flag_signaling_nans && (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)))
     {
       tem = ((enum rtx_code) (trueop0)->code) == FLOAT_EXTEND ? (((trueop0)->u.fld[0]).rtx1)
             : trueop0;
       if (((enum rtx_code) (tem)->code) == ABS)
  return (const_int_rtx[64]);
     }
   break;
 case GE:
   if (trueop1 == (const_tiny_rtx[0][(int) (mode)]) && !(((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
     {
       tem = ((enum rtx_code) (trueop0)->code) == FLOAT_EXTEND ? (((trueop0)->u.fld[0]).rtx1)
             : trueop0;
       if (((enum rtx_code) (tem)->code) == ABS)
  return const_true_rtx;
     }
   break;
 case UNGE:
   if (trueop1 == (const_tiny_rtx[0][(int) (mode)]))
     {
       tem = ((enum rtx_code) (trueop0)->code) == FLOAT_EXTEND ? (((trueop0)->u.fld[0]).rtx1)
             : trueop0;
       if (((enum rtx_code) (tem)->code) == ABS)
  return const_true_rtx;
     }
   break;
 default:
   break;
 }
      return 0;
    }
  switch (code)
    {
    case EQ:
    case UNEQ:
      return equal ? const_true_rtx : (const_int_rtx[64]);
    case NE:
    case LTGT:
      return ! equal ? const_true_rtx : (const_int_rtx[64]);
    case LT:
    case UNLT:
      return op0lt ? const_true_rtx : (const_int_rtx[64]);
    case GT:
    case UNGT:
      return op1lt ? const_true_rtx : (const_int_rtx[64]);
    case LTU:
      return op0ltu ? const_true_rtx : (const_int_rtx[64]);
    case GTU:
      return op1ltu ? const_true_rtx : (const_int_rtx[64]);
    case LE:
    case UNLE:
      return equal || op0lt ? const_true_rtx : (const_int_rtx[64]);
    case GE:
    case UNGE:
      return equal || op1lt ? const_true_rtx : (const_int_rtx[64]);
    case LEU:
      return equal || op0ltu ? const_true_rtx : (const_int_rtx[64]);
    case GEU:
      return equal || op1ltu ? const_true_rtx : (const_int_rtx[64]);
    case ORDERED:
      return const_true_rtx;
    case UNORDERED:
      return (const_int_rtx[64]);
    default:
      abort ();
    }
}
rtx
simplify_ternary_operation (enum rtx_code code, enum machine_mode mode,
       enum machine_mode op0_mode, rtx op0, rtx op1,
       rtx op2)
{
  unsigned int width = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  if (width == 0)
    width = (8 * 4);
  switch (code)
    {
    case SIGN_EXTRACT:
    case ZERO_EXTRACT:
      if (((enum rtx_code) (op0)->code) == CONST_INT
   && ((enum rtx_code) (op1)->code) == CONST_INT
   && ((enum rtx_code) (op2)->code) == CONST_INT
   && ((unsigned) ((op1)->u.hwint[0]) + (unsigned) ((op2)->u.hwint[0]) <= width)
   && width <= (unsigned) (8 * 4))
 {
   long val = ((op0)->u.hwint[0]);
   if (0)
     val >>= (((unsigned short) (((unsigned short) mode_size[op0_mode]) * 8))
       - ((op2)->u.hwint[0]) - ((op1)->u.hwint[0]));
   else
     val >>= ((op2)->u.hwint[0]);
   if ((8 * 4) != ((op1)->u.hwint[0]))
     {
       val &= ((long) 1 << ((op1)->u.hwint[0])) - 1;
       if (code == SIGN_EXTRACT
    && (val & ((long) 1 << (((op1)->u.hwint[0]) - 1))))
  val |= ~ (((long) 1 << ((op1)->u.hwint[0])) - 1);
     }
   if (width < (8 * 4)
       && ((val & ((long) (-1) << (width - 1)))
    != ((long) (-1) << (width - 1))))
     val &= ((long) 1 << width) - 1;
   return gen_rtx_CONST_INT (VOIDmode, (long) (val));
 }
      break;
    case IF_THEN_ELSE:
      if (((enum rtx_code) (op0)->code) == CONST_INT)
 return op0 != (const_int_rtx[64]) ? op1 : op2;
      if (rtx_equal_p (op1, op2) && ! side_effects_p (op0))
 return op1;
      if (((enum rtx_code) (op0)->code) == NE
   && ! side_effects_p (op0)
   && ! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
   && ! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations)
   && ((rtx_equal_p ((((op0)->u.fld[0]).rtx1), op1)
        && rtx_equal_p ((((op0)->u.fld[1]).rtx1), op2))
       || (rtx_equal_p ((((op0)->u.fld[0]).rtx1), op2)
    && rtx_equal_p ((((op0)->u.fld[1]).rtx1), op1))))
 return op1;
      if (((enum rtx_code) (op0)->code) == EQ
   && ! side_effects_p (op0)
   && ! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only)
   && ! (((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT) && 1 == 1) && !flag_unsafe_math_optimizations)
   && ((rtx_equal_p ((((op0)->u.fld[0]).rtx1), op1)
        && rtx_equal_p ((((op0)->u.fld[1]).rtx1), op2))
       || (rtx_equal_p ((((op0)->u.fld[0]).rtx1), op2)
    && rtx_equal_p ((((op0)->u.fld[1]).rtx1), op1))))
 return op2;
      if ((((rtx_class[(int) (((enum rtx_code) (op0)->code))]) & (~1)) == (RTX_COMPARE & (~1))) && ! side_effects_p (op0))
 {
   enum machine_mode cmp_mode = (((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode) == VOIDmode
     ? ((enum machine_mode) ((((op0)->u.fld[1]).rtx1))->mode)
     : ((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode));
   rtx temp;
   if (((enum rtx_code) (op1)->code) == CONST_INT && ((enum rtx_code) (op2)->code) == CONST_INT)
     {
       long t = ((op1)->u.hwint[0]);
       long f = ((op2)->u.hwint[0]);
       if (t == 1 && f == 0)
         code = ((enum rtx_code) (op0)->code);
       else if (t == 0 && f == 1)
  {
    enum rtx_code tmp;
    tmp = reversed_comparison_code (op0, (rtx) 0);
    if (tmp == UNKNOWN)
      break;
    code = tmp;
  }
       else
  break;
       return simplify_gen_relational (code, mode, cmp_mode,
           (((op0)->u.fld[0]).rtx1), (((op0)->u.fld[1]).rtx1));
     }
   if (cmp_mode == VOIDmode)
     cmp_mode = op0_mode;
   temp = simplify_relational_operation (((enum rtx_code) (op0)->code), op0_mode,
        cmp_mode, (((op0)->u.fld[0]).rtx1),
      (((op0)->u.fld[1]).rtx1));
   if (temp)
     {
       if (((enum rtx_code) (temp)->code) == CONST_INT)
  return temp == (const_int_rtx[64]) ? op2 : op1;
       else if (temp)
         return gen_rtx_fmt_eee (IF_THEN_ELSE, (mode), (temp), (op1), (op2));
     }
 }
      break;
    case VEC_MERGE:
      if (((enum machine_mode) (op0)->mode) != mode
   || ((enum machine_mode) (op1)->mode) != mode
   || !(mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT))
 abort ();
      op2 = avoid_constant_pool_reference (op2);
      if (((enum rtx_code) (op2)->code) == CONST_INT)
 {
          int elt_size = ((unsigned short) mode_size[mode_inner[mode]]);
   unsigned n_elts = (((unsigned short) mode_size[mode]) / elt_size);
   int mask = (1 << n_elts) - 1;
   if (!(((op2)->u.hwint[0]) & mask))
     return op1;
   if ((((op2)->u.hwint[0]) & mask) == mask)
     return op0;
   op0 = avoid_constant_pool_reference (op0);
   op1 = avoid_constant_pool_reference (op1);
   if (((enum rtx_code) (op0)->code) == CONST_VECTOR
       && ((enum rtx_code) (op1)->code) == CONST_VECTOR)
     {
       rtvec v = rtvec_alloc (n_elts);
       unsigned int i;
       for (i = 0; i < n_elts; i++)
  ((v)->elem[i]) = (((op2)->u.hwint[0]) & (1 << i)
        ? (((((op0)->u.fld[0]).rtvec1))->elem[i])
        : (((((op1)->u.fld[0]).rtvec1))->elem[i]));
       return gen_rtx_CONST_VECTOR (mode, v);
     }
 }
      break;
    default:
      abort ();
    }
  return 0;
}
static rtx
simplify_immed_subreg (enum machine_mode outermode, rtx op,
         enum machine_mode innermode, unsigned int byte)
{
  enum {
    max_bitsize = 512,
    value_bit = 8,
    value_mask = (1 << value_bit) - 1
  };
  unsigned char value1[max_bitsize / value_bit];
  int value1_start;
  int i;
  int elem;
  int num_elem;
  rtx * elems;
  int elem_bitsize;
  rtx result_s;
  rtvec result_v = ((void *)0);
  enum mode_class outer_class;
  enum machine_mode outer_submode;
  if (mode_class[outermode] == MODE_CC && ((enum rtx_code) (op)->code) == CONST_INT)
    return op;
  if (((enum rtx_code) (op)->code) == CONST_VECTOR)
    {
      num_elem = (((((op)->u.fld[0]).rtvec1))->num_elem);
      elems = &(((((op)->u.fld[0]).rtvec1))->elem[0]);
      elem_bitsize = ((unsigned short) (((unsigned short) mode_size[mode_inner[innermode]]) * 8));
    }
  else
    {
      num_elem = 1;
      elems = &op;
      elem_bitsize = max_bitsize;
    }
  if (8 % value_bit != 0)
    abort ();
  if (elem_bitsize % 8 != 0)
    abort ();
  for (elem = 0; elem < num_elem; elem++)
    {
      unsigned char * vp;
      rtx el = elems[elem];
      {
 unsigned byte = (elem * elem_bitsize) / 8;
 unsigned ibyte = (((num_elem - 1 - elem) * elem_bitsize)
     / 8);
 unsigned word_byte = 0 ? ibyte : byte;
 unsigned subword_byte = 0 ? ibyte : byte;
 unsigned bytele = (subword_byte % (0 ? 8 : 4)
    + (word_byte / (0 ? 8 : 4)) * (0 ? 8 : 4));
 vp = value1 + (bytele * 8) / value_bit;
      }
      switch (((enum rtx_code) (el)->code))
 {
 case CONST_INT:
   for (i = 0;
        i < (8 * 4) && i < elem_bitsize;
        i += value_bit)
     *vp++ = ((el)->u.hwint[0]) >> i;
   for (; i < elem_bitsize; i += value_bit)
     *vp++ = ((el)->u.hwint[0]) < 0 ? -1 : 0;
   break;
 case CONST_DOUBLE:
   if (((enum machine_mode) (el)->mode) == VOIDmode)
     {
       if (elem_bitsize <= (8 * 4))
  abort ();
       for (i = 0; i < (8 * 4); i += value_bit)
  *vp++ = ((el)->u.hwint[0]) >> i;
       while (i < (8 * 4) * 2 && i < elem_bitsize)
  {
    *vp++
      = ((el)->u.hwint[1]) >> (i - (8 * 4));
    i += value_bit;
  }
       for (; i < max_bitsize; i += value_bit)
  *vp++ = 0;
     }
   else if (mode_class[((enum machine_mode) (el)->mode)] == MODE_FLOAT)
     {
       long tmp[max_bitsize / 32];
       int bitsize = ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (el)->mode)]) * 8));
       if (bitsize > elem_bitsize)
  abort ();
       if (bitsize % value_bit != 0)
  abort ();
       real_to_target (tmp, ((struct real_value *)&((el)->u.hwint[0])),
         ((enum machine_mode) (el)->mode));
       for (i = 0; i < bitsize; i += value_bit)
  {
    int ibase;
    if (0)
      ibase = bitsize - 1 - i;
    else
      ibase = i;
    *vp++ = tmp[ibase / 32] >> i % 32;
  }
       for (; i < elem_bitsize; i += value_bit)
  *vp++ = 0;
     }
   else
     abort ();
   break;
 default:
   abort ();
 }
    }
  if (((unsigned short) mode_size[innermode]) >= ((unsigned short) mode_size[outermode]))
    {
      unsigned ibyte = (((unsigned short) mode_size[innermode]) - ((unsigned short) mode_size[outermode])
   - byte);
      unsigned word_byte = 0 ? ibyte : byte;
      unsigned subword_byte = 0 ? ibyte : byte;
      byte = (subword_byte % (0 ? 8 : 4)
       + (word_byte / (0 ? 8 : 4)) * (0 ? 8 : 4));
    }
  if (byte >= ((unsigned short) mode_size[innermode]))
    abort ();
  value_start = byte * (8 / value_bit);
  if ((mode_class[outermode] == MODE_VECTOR_INT || mode_class[outermode] == MODE_VECTOR_FLOAT))
    {
      num_elem = mode_nunits[outermode];
      result_v = rtvec_alloc (num_elem);
      elems = &((result_v)->elem[0]);
      outer_submode = mode_inner[outermode];
    }
  else
    {
      num_elem = 1;
      elems = &result_s;
      outer_submode = outermode;
    }
  outer_class = mode_class[outer_submode];
  elem_bitsize = ((unsigned short) (((unsigned short) mode_size[outer_submode]) * 8));
  if (elem_bitsize % value_bit != 0)
    abort ();
  if (elem_bitsize + value_start * value_bit > max_bitsize)
    abort ();
  for (elem = 0; elem < num_elem; elem++)
    {
      unsigned char *vp;
      {
 unsigned byte = (elem * elem_bitsize) / 8;
 unsigned ibyte = (((num_elem - 1 - elem) * elem_bitsize)
     / 8);
 unsigned word_byte = 0 ? ibyte : byte;
 unsigned subword_byte = 0 ? ibyte : byte;
 unsigned bytele = (subword_byte % (0 ? 8 : 4)
    + (word_byte / (0 ? 8 : 4)) * (0 ? 8 : 4));
 vp = value1 + value_start + (bytele * 8) / value_bit;
      }
      switch (outer_class)
 {
 case MODE_INT:
 case MODE_PARTIAL_INT:
   {
     unsigned long hi = 0, lo = 0;
     for (i = 0;
   i < (8 * 4) && i < elem_bitsize;
   i += value_bit)
       lo |= (long)(*vp++ & value_mask) << i;
     for (; i < elem_bitsize; i += value_bit)
       hi |= ((long)(*vp++ & value_mask)
       << (i - (8 * 4)));
     if (elem_bitsize <= (8 * 4))
       elems[elem] = gen_int_mode (lo, outer_submode);
     else
       elems[elem] = immed_double_const (lo, hi, outer_submode);
   }
   break;
 case MODE_FLOAT:
   {
     struct real_value r;
     long tmp[max_bitsize / 32];
     for (i = 0; i < max_bitsize / 32; i++)
       tmp[i] = 0;
     for (i = 0; i < elem_bitsize; i += value_bit)
       {
  int ibase;
  if (0)
    ibase = elem_bitsize - 1 - i;
  else
    ibase = i;
  tmp[ibase / 32] |= (*vp++ & value_mask) << i % 32;
       }
     real_from_target (&r, tmp, outer_submode);
     elems[elem] = const_double_from_real_value (r, outer_submode);
   }
   break;
 default:
   abort ();
 }
    }
  if ((mode_class[outermode] == MODE_VECTOR_INT || mode_class[outermode] == MODE_VECTOR_FLOAT))
    return gen_rtx_CONST_VECTOR (outermode, result_v);
  else
    return result_s;
}
rtx
simplify_subreg (enum machine_mode outermode, rtx op,
   enum machine_mode innermode, unsigned int byte)
{
  if (innermode == VOIDmode || outermode == VOIDmode
      || innermode == BLKmode || outermode == BLKmode)
    abort ();
  if (((enum machine_mode) (op)->mode) != innermode
      && ((enum machine_mode) (op)->mode) != VOIDmode)
    abort ();
  if (byte % ((unsigned short) mode_size[outermode])
      || byte >= ((unsigned short) mode_size[innermode]))
    abort ();
  if (outermode == innermode && !byte)
    return op;
  if (((enum rtx_code) (op)->code) == CONST_INT
      || ((enum rtx_code) (op)->code) == CONST_DOUBLE
      || ((enum rtx_code) (op)->code) == CONST_VECTOR)
    return simplify_immed_subreg (outermode, op, innermode, byte);
  if (((enum rtx_code) (op)->code) == SUBREG)
    {
      enum machine_mode innermostmode = ((enum machine_mode) ((((op)->u.fld[0]).rtx1))->mode);
      int final_offset = byte + (((op)->u.fld[1]).rtuint);
      rtx new;
      if (outermode == innermostmode
   && byte == 0 && (((op)->u.fld[1]).rtuint) == 0)
 return (((op)->u.fld[0]).rtx1);
      if (byte == 0 && ((unsigned short) mode_size[innermode]) < ((unsigned short) mode_size[outermode]))
 {
   int difference = (((unsigned short) mode_size[innermode]) - ((unsigned short) mode_size[outermode]));
   if (0)
     final_offset += (difference / (0 ? 8 : 4)) * (0 ? 8 : 4);
   if (0)
     final_offset += difference % (0 ? 8 : 4);
 }
      if ((((op)->u.fld[1]).rtuint) == 0
   && ((unsigned short) mode_size[innermostmode]) < ((unsigned short) mode_size[innermode]))
 {
   int difference = (((unsigned short) mode_size[innermostmode]) - ((unsigned short) mode_size[innermode]));
   if (0)
     final_offset += (difference / (0 ? 8 : 4)) * (0 ? 8 : 4);
   if (0)
     final_offset += difference % (0 ? 8 : 4);
 }
      if (((unsigned short) mode_size[innermostmode]) > ((unsigned short) mode_size[outermode]))
 {
   if (final_offset < 0)
     return (rtx) 0;
   if (final_offset % ((unsigned short) mode_size[outermode])
       || (unsigned) final_offset >= ((unsigned short) mode_size[innermostmode]))
     return (rtx) 0;
 }
      else
 {
   int offset = 0;
   int difference = (((unsigned short) mode_size[innermostmode]) - ((unsigned short) mode_size[outermode]));
   if (0)
     offset += (difference / (0 ? 8 : 4)) * (0 ? 8 : 4);
   if (0)
     offset += difference % (0 ? 8 : 4);
   if (offset == final_offset)
     final_offset = 0;
   else
     return (rtx) 0;
 }
      new = simplify_subreg (outermode, (((op)->u.fld[0]).rtx1),
        ((enum machine_mode) ((((op)->u.fld[0]).rtx1))->mode),
        final_offset);
      if (new)
 return new;
      return gen_rtx_SUBREG (outermode, (((op)->u.fld[0]).rtx1), final_offset);
    }
  if ((((enum rtx_code) (op)->code) == REG)
      && (! (((op))->return_val)
   || ! rtx_equal_function_value_matters)
      && (((op)->u.fld[0]).rtuint) < 53
      && ! ((((unsigned short) mode_size[outermode]) < ((unsigned short) mode_size[innermode]) ? reg_classes_intersect_p (FLOAT_SSE_REGS, ((regclass_map[(((op)->u.fld[0]).rtuint)]))) || reg_classes_intersect_p (MMX_REGS, ((regclass_map[(((op)->u.fld[0]).rtuint)]))) : ((unsigned short) mode_size[innermode]) != ((unsigned short) mode_size[outermode]) ? reg_classes_intersect_p (FLOAT_REGS, ((regclass_map[(((op)->u.fld[0]).rtuint)]))) : 0)
     && mode_class[innermode] != MODE_COMPLEX_INT
     && mode_class[innermode] != MODE_COMPLEX_FLOAT)
      && ((reload_completed && !frame_pointer_needed)
   || ((((op)->u.fld[0]).rtuint) != 20
       && (((op)->u.fld[0]).rtuint) != 6
      ))
      && (((op)->u.fld[0]).rtuint) != 16
      && (((op)->u.fld[0]).rtuint) != 7
      && subreg_offset_representable_p ((((op)->u.fld[0]).rtuint), innermode,
     byte, outermode))
    {
      rtx tem = gen_rtx_SUBREG (outermode, op, byte);
      int final_regno = subreg_hard_regno (tem, 0);
      if (ix86_hard_regno_mode_ok ((final_regno), (outermode))
   || ! ix86_hard_regno_mode_ok (((((op)->u.fld[0]).rtuint)), (innermode)))
 {
   rtx x = gen_rtx_REG_offset (op, outermode, final_regno, byte);
   if (subreg_lowpart_offset (outermode, innermode) == byte)
     (((x)->u.fld[1]).rtuint) = (((op)->u.fld[1]).rtuint);
   return x;
 }
    }
  if ((((enum rtx_code) (op)->code) == MEM)
      && ! mode_dependent_address_p ((((op)->u.fld[0]).rtx1))
      && (! (((op))->volatil)
   || ! have_insn_for (SET, innermode))
      && ((unsigned short) mode_size[outermode]) <= ((unsigned short) mode_size[((enum machine_mode) (op)->mode)]))
    return adjust_address_1 (op, outermode, byte, 0, 1);
  if (((enum rtx_code) (op)->code) == CONCAT)
    {
      int is_realpart = byte < (unsigned int) (mode_inner[innermode] == VOIDmode ? ((unsigned short) mode_size[innermode]) : ((unsigned short) mode_size[mode_inner[innermode]]));
      rtx part = is_realpart ? (((op)->u.fld[0]).rtx1) : (((op)->u.fld[1]).rtx1);
      unsigned int final_offset;
      rtx res;
      final_offset = byte % ((mode_inner[innermode] == VOIDmode ? ((unsigned short) mode_size[innermode]) : ((unsigned short) mode_size[mode_inner[innermode]])));
      res = simplify_subreg (outermode, part, ((enum machine_mode) (part)->mode), final_offset);
      if (res)
 return res;
      return gen_rtx_SUBREG (outermode, part, final_offset);
    }
  if ((((enum rtx_code) (op)->code) == ZERO_EXTEND
       || ((enum rtx_code) (op)->code) == SIGN_EXTEND)
      && ((unsigned short) (((unsigned short) mode_size[outermode]) * 8)) < ((unsigned short) (((unsigned short) mode_size[innermode]) * 8)))
    {
      unsigned int bitpos = subreg_lsb_1 (outermode, innermode, byte);
      if (bitpos == 0)
 {
   enum machine_mode origmode = ((enum machine_mode) ((((op)->u.fld[0]).rtx1))->mode);
   if (outermode == origmode)
     return (((op)->u.fld[0]).rtx1);
   if (((unsigned short) (((unsigned short) mode_size[outermode]) * 8)) <= ((unsigned short) (((unsigned short) mode_size[origmode]) * 8)))
     return simplify_gen_subreg (outermode, (((op)->u.fld[0]).rtx1), origmode,
     subreg_lowpart_offset (outermode,
              origmode));
   if ((mode_class[outermode] == MODE_INT || mode_class[outermode] == MODE_PARTIAL_INT))
     return simplify_gen_unary (((enum rtx_code) (op)->code), outermode,
           (((op)->u.fld[0]).rtx1), origmode);
 }
      if (((enum rtx_code) (op)->code) == ZERO_EXTEND
   && bitpos >= ((unsigned short) (((unsigned short) mode_size[((enum machine_mode) ((((op)->u.fld[0]).rtx1))->mode)]) * 8)))
 return (const_tiny_rtx[0][(int) (outermode)]);
    }
  return (rtx) 0;
}
rtx
simplify_gen_subreg (enum machine_mode outermode, rtx op,
       enum machine_mode innermode, unsigned int byte)
{
  rtx new;
  if (innermode == VOIDmode || outermode == VOIDmode
      || innermode == BLKmode || outermode == BLKmode)
    abort ();
  if (((enum machine_mode) (op)->mode) != innermode
      && ((enum machine_mode) (op)->mode) != VOIDmode)
    abort ();
  if (byte % ((unsigned short) mode_size[outermode])
      || byte >= ((unsigned short) mode_size[innermode]))
    abort ();
  if (((enum rtx_code) (op)->code) == QUEUED)
    return (rtx) 0;
  new = simplify_subreg (outermode, op, innermode, byte);
  if (new)
    return new;
  if (((enum rtx_code) (op)->code) == SUBREG || ((enum machine_mode) (op)->mode) == VOIDmode)
    return (rtx) 0;
  return gen_rtx_SUBREG (outermode, op, byte);
}
rtx
simplify_rtx (rtx x)
{
  enum rtx_code code = ((enum rtx_code) (x)->code);
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  switch ((rtx_class[(int) (code)]))
    {
    case RTX_UNARY:
      return simplify_unary_operation (code, mode,
           (((x)->u.fld[0]).rtx1), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode));
    case RTX_COMM_ARITH:
      if (swap_commutative_operands_p ((((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1)))
 return simplify_gen_binary (code, mode, (((x)->u.fld[1]).rtx1), (((x)->u.fld[0]).rtx1));
    case RTX_BIN_ARITH:
      return simplify_binary_operation (code, mode, (((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1));
    case RTX_TERNARY:
    case RTX_BITFIELD_OPS:
      return simplify_ternary_operation (code, mode, ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
      (((x)->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1),
      (((x)->u.fld[2]).rtx1));
    case RTX_COMPARE:
    case RTX_COMM_COMPARE:
      return simplify_relational_operation (code, mode,
                                            ((((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)
                                             != VOIDmode)
                                            ? ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode)
                                            : ((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode)),
                                            (((x)->u.fld[0]).rtx1),
                                            (((x)->u.fld[1]).rtx1));
    case RTX_EXTRA:
      if (code == SUBREG)
 return simplify_gen_subreg (mode, (((x)->u.fld[0]).rtx1),
        ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode),
        (((x)->u.fld[1]).rtuint));
      break;
    case RTX_OBJ:
      if (code == LO_SUM)
 {
   if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == HIGH
       && rtx_equal_p (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), (((x)->u.fld[1]).rtx1)))
   return (((x)->u.fld[1]).rtx1);
 }
      break;
    default:
      break;
    }
  return ((void *)0);
}
static void copy (sreal *, sreal *);
static void shift_right (sreal *, int);
static void normalize_sreal (sreal *);
void
dump_sreal (FILE *file, sreal *x)
{
  fprintf (file, "((%lu * 2^16 + %lu) * 2^%d)",
    x->sig_hi, x->sig_lo, x->exp);
}
static void
copy (sreal *r, sreal *a)
{
  r->sig_lo = a->sig_lo;
  r->sig_hi = a->sig_hi;
  r->exp = a->exp;
}
static void
shift_right (sreal *x, int s)
{
  x->exp += s;
  if (s > ((8 * 4) / 2))
    {
      s -= ((8 * 4) / 2);
      x->sig_hi += (unsigned long) 1 << (s - 1);
      x->sig_lo = x->sig_hi >> s;
      x->sig_hi = 0;
    }
  else
    {
      x->sig_lo += (unsigned long) 1 << (s - 1);
      if (x->sig_lo & ((unsigned long) 1 << ((8 * 4) / 2)))
 {
   x->sig_hi++;
   x->sig_lo -= (unsigned long) 1 << ((8 * 4) / 2);
 }
      x->sig_lo >>= s;
      x->sig_lo |= (x->sig_hi & (((unsigned long) 1 << s) - 1)) << (((8 * 4) / 2) - s);
      x->sig_hi >>= s;
    }
}
static void
normalize_sreal (sreal *x)
{
  int shift;
  long mask;
  if (x->sig_lo == 0 && x->sig_hi == 0)
    {
      x->exp = -(2147483647 / 4);
    }
  else if (x->sig_hi < ((unsigned long) 1 << (((8 * 4) / 2) - 1)))
    {
      if (x->sig_hi == 0)
 {
   x->sig_hi = x->sig_lo;
   x->sig_lo = 0;
   x->exp -= ((8 * 4) / 2);
 }
      shift = 0;
      while (x->sig_hi < ((unsigned long) 1 << (((8 * 4) / 2) - 1)))
 {
   x->sig_hi <<= 1;
   x->exp--;
   shift++;
 }
      if (x->exp < -(2147483647 / 4))
 {
   x->exp = -(2147483647 / 4);
   x->sig_hi = 0;
   x->sig_lo = 0;
 }
      else if (shift)
 {
   mask = (1 << ((8 * 4) / 2)) - (1 << (((8 * 4) / 2) - shift));
   x->sig_hi |= (x->sig_lo & mask) >> (((8 * 4) / 2) - shift);
   x->sig_lo = (x->sig_lo << shift) & (((unsigned long) 1 << ((8 * 4) / 2)) - 1);
 }
    }
  else if (x->sig_hi > (((unsigned long) 1 << ((8 * 4) / 2)) - 1))
    {
      unsigned long tmp = x->sig_hi;
      shift = 0;
      do
 {
   tmp >>= 1;
   shift++;
 }
      while (tmp > (((unsigned long) 1 << ((8 * 4) / 2)) - 1));
      x->sig_lo += (unsigned long) 1 << (shift - 1);
      x->sig_lo >>= shift;
      x->sig_lo += ((x->sig_hi & (((unsigned long) 1 << shift) - 1))
      << (((8 * 4) / 2) - shift));
      x->sig_hi >>= shift;
      x->exp += shift;
      if (x->sig_lo & ((unsigned long) 1 << ((8 * 4) / 2)))
 {
   x->sig_lo -= (unsigned long) 1 << ((8 * 4) / 2);
   x->sig_hi++;
   if (x->sig_hi > (((unsigned long) 1 << ((8 * 4) / 2)) - 1))
     {
       x->sig_hi >>= 1;
       x->sig_lo >>= 1;
       x->exp++;
     }
 }
      if (x->exp > (2147483647 / 4))
 {
   x->exp = (2147483647 / 4);
   x->sig_hi = (((unsigned long) 1 << ((8 * 4) / 2)) - 1);
   x->sig_lo = (((unsigned long) 1 << ((8 * 4) / 2)) - 1);
 }
    }
}
sreal *
sreal_init (sreal *r, unsigned long sig, signed int exp)
{
  r->sig_lo = 0;
  r->sig_hi = sig;
  r->exp = exp - 16;
  normalize_sreal (r);
  return r;
}
long
sreal_to_int (sreal *r)
{
  if (r->exp <= -(((8 * 4) / 2) * 2))
    return 0;
  if (r->exp >= 0)
    return (((unsigned long) 1 << ((8 * 4) - 1)) - 1);
  return ((r->sig_hi << ((8 * 4) / 2)) + r->sig_lo) >> -r->exp;
}
int
sreal_compare (sreal *a, sreal *b)
{
  if (a->exp > b->exp)
    return 1;
  if (a->exp < b->exp)
    return -1;
  if (a->sig_hi > b->sig_hi)
    return 1;
  if (a->sig_hi < b->sig_hi)
    return -1;
  if (a->sig_lo > b->sig_lo)
    return 1;
  if (a->sig_lo < b->sig_lo)
    return -1;
  return 0;
}
sreal *
sreal_add (sreal *r, sreal *a, sreal *b)
{
  int dexp;
  sreal tmp;
  sreal *bb;
  if (sreal_compare (a, b) < 0)
    {
      sreal *swap;
      swap = a;
      a = b;
      b = swap;
    }
  dexp = a->exp - b->exp;
  r->exp = a->exp;
  if (dexp > (((8 * 4) / 2) * 2))
    {
      r->sig_hi = a->sig_hi;
      r->sig_lo = a->sig_lo;
      return r;
    }
  if (dexp == 0)
    bb = b;
  else
    {
      copy (&tmp, b);
      shift_right (&tmp, dexp);
      bb = &tmp;
    }
  r->sig_hi = a->sig_hi + bb->sig_hi;
  r->sig_lo = a->sig_lo + bb->sig_lo;
  if (r->sig_lo & ((unsigned long) 1 << ((8 * 4) / 2)))
    {
      r->sig_hi++;
      r->sig_lo -= (unsigned long) 1 << ((8 * 4) / 2);
    }
  normalize_sreal (r);
  return r;
}
sreal *
sreal_sub (sreal *r, sreal *a, sreal *b)
{
  int dexp;
  sreal tmp;
  sreal *bb;
  if (sreal_compare (a, b) < 0)
    {
      abort ();
    }
  dexp = a->exp - b->exp;
  r->exp = a->exp;
  if (dexp > (((8 * 4) / 2) * 2))
    {
      r->sig_hi = a->sig_hi;
      r->sig_lo = a->sig_lo;
      return r;
    }
  if (dexp == 0)
    bb = b;
  else
    {
      copy (&tmp, b);
      shift_right (&tmp, dexp);
      bb = &tmp;
    }
  if (a->sig_lo < bb->sig_lo)
    {
      r->sig_hi = a->sig_hi - bb->sig_hi - 1;
      r->sig_lo = a->sig_lo + ((unsigned long) 1 << ((8 * 4) / 2)) - bb->sig_lo;
    }
  else
    {
      r->sig_hi = a->sig_hi - bb->sig_hi;
      r->sig_lo = a->sig_lo - bb->sig_lo;
    }
  normalize_sreal (r);
  return r;
}
sreal *
sreal_mul (sreal *r, sreal *a, sreal *b)
{
  if (a->sig_hi < ((unsigned long) 1 << (((8 * 4) / 2) - 1)) || b->sig_hi < ((unsigned long) 1 << (((8 * 4) / 2) - 1)))
    {
      r->sig_lo = 0;
      r->sig_hi = 0;
      r->exp = -(2147483647 / 4);
    }
  else
    {
      unsigned long tmp1, tmp2, tmp3;
      if (sreal_compare (a, b) < 0)
 {
   sreal *swap;
   swap = a;
   a = b;
   b = swap;
 }
      r->exp = a->exp + b->exp + ((8 * 4) / 2);
      tmp1 = a->sig_lo * b->sig_lo;
      tmp2 = a->sig_lo * b->sig_hi;
      tmp3 = a->sig_hi * b->sig_lo + (tmp1 >> ((8 * 4) / 2));
      r->sig_hi = a->sig_hi * b->sig_hi;
      r->sig_hi += (tmp2 >> ((8 * 4) / 2)) + (tmp3 >> ((8 * 4) / 2));
      tmp2 &= ((unsigned long) 1 << ((8 * 4) / 2)) - 1;
      tmp3 &= ((unsigned long) 1 << ((8 * 4) / 2)) - 1;
      tmp1 = tmp2 + tmp3;
      r->sig_lo = tmp1 & (((unsigned long) 1 << ((8 * 4) / 2)) - 1);
      r->sig_hi += tmp1 >> ((8 * 4) / 2);
      normalize_sreal (r);
    }
  return r;
}
sreal *
sreal_div (sreal *r, sreal *a, sreal *b)
{
  unsigned long tmp, tmp1, tmp2;
  if (b->sig_hi < ((unsigned long) 1 << (((8 * 4) / 2) - 1)))
    {
      abort ();
    }
  else if (a->sig_hi < ((unsigned long) 1 << (((8 * 4) / 2) - 1)))
    {
      r->sig_hi = 0;
      r->sig_lo = 0;
      r->exp = -(2147483647 / 4);
    }
  else
    {
      tmp1 = (a->sig_hi << ((8 * 4) / 2)) + a->sig_lo;
      tmp2 = ((b->sig_hi << (((8 * 4) / 2) / 2))
       + (b->sig_lo >> (((8 * 4) / 2) / 2)));
      if (b->sig_lo & ((unsigned long) 1 << ((((8 * 4) / 2) / 2) - 1)))
 tmp2++;
      r->sig_lo = 0;
      tmp = tmp1 / tmp2;
      tmp1 = (tmp1 % tmp2) << (((8 * 4) / 2) / 2);
      r->sig_hi = tmp << ((8 * 4) / 2);
      tmp = tmp1 / tmp2;
      tmp1 = (tmp1 % tmp2) << (((8 * 4) / 2) / 2);
      r->sig_hi += tmp << (((8 * 4) / 2) / 2);
      tmp = tmp1 / tmp2;
      r->sig_hi += tmp;
      r->exp = a->exp - b->exp - (((8 * 4) / 2) * 2) - ((8 * 4) / 2) / 2;
      normalize_sreal (r);
    }
  return r;
}
struct case_node
{
  struct case_node *left;
  struct case_node *right;
  struct case_node *parent;
  tree low;
  tree high;
  tree code_label;
  int balance;
};
typedef struct case_node case_node;
typedef struct case_node *case_node_ptr;
static short cost_table_[129];
static int use_cost_table;
static int cost_table_initialized;
struct nesting
{
  struct nesting *all;
  struct nesting *next;
  int depth;
  rtx exit_label;
  enum nesting_desc {
    COND_NESTING,
    BLOCK_NESTING,
    CASE_NESTING
  } desc;
  union nesting_u
    {
      struct nesting_cond
 {
   rtx endif_label;
   rtx next_label;
 } cond;
      struct nesting_block
 {
   int block_start_count;
   rtx stack_level;
   rtx first_insn;
   struct nesting *innermost_stack_block;
   tree cleanups;
   tree outer_cleanups;
   struct label_chain *label_chain;
   int exception_region;
   int block_target_temp_slot_level;
   int conditional_code;
   rtx last_unconditional_cleanup;
 } block;
      struct nesting_case
 {
   rtx start;
   struct case_node *case_list;
   tree default_label;
   tree index_expr;
   tree nominal_type;
   const char *printname;
   int line_number_status;
 } case_stmt;
    } data;
};
struct goto_fixup
{
  struct goto_fixup *next;
  rtx before_jump;
  tree target;
  tree context;
  rtx target_rtl;
  int block_start_count;
  rtx stack_level;
  tree cleanup_list_list;
};
struct label_chain
{
  struct label_chain *next;
  tree label;
};
struct stmt_status
{
  struct nesting * x_block_stack;
  struct nesting * x_stack_block_stack;
  struct nesting * x_cond_stack;
  struct nesting * x_case_stack;
  struct nesting * x_nesting_stack;
  int x_nesting_depth;
  int x_block_start_count;
  location_t x_emit_locus;
  struct goto_fixup *x_goto_fixup_chain;
};
int using_eh_for_cleanups_p = 0;
static int n_char_occurrences2 (int, const char *);
static unsigned char decl_conflicts_with_clobbers_p (tree, const HARD_REG_SET);
static void expand_goto_internal (tree, rtx, rtx);
static int expand_fixup (tree, rtx, rtx);
static void expand_nl_goto_receiver (void);
static void fixup_gotos (struct nesting *, rtx, tree, rtx, int);
static unsigned char check_operand_nalternatives (tree, tree);
static unsigned char check_unique_operand_names (tree, tree);
static char *resolve_operand_name_1 (char *, tree, tree);
static void expand_null_return_1 (rtx);
static enum br_predictor return_prediction (rtx);
static rtx shift_return_value (rtx);
static void expand_value_return (rtx);
static void expand_cleanups (tree, int, int);
static void do_jump_if_equal (rtx, rtx, rtx, int);
static int estimate_case_costs (case_node_ptr);
static unsigned char same_case_target_p (rtx, rtx);
static void strip_default_case_nodes (case_node_ptr *, rtx);
static unsigned char lshift_cheap_p (void);
static int case_bit_test_cmp (const void *, const void *);
static void emit_case_bit_tests (tree, tree, tree, tree, case_node_ptr, rtx);
static void group_case_nodes (case_node_ptr);
static void balance_case_nodes (case_node_ptr *, case_node_ptr);
static int node_has_low_bound (case_node_ptr, tree);
static int node_has_high_bound (case_node_ptr, tree);
static int node_is_bounded (case_node_ptr, tree);
static void emit_jump_if_reachable (rtx);
static void emit_case_nodes (rtx, case_node_ptr, rtx, tree);
static struct case_node *case_tree2list (case_node *, case_node *);
void
using_eh_for_cleanups (void)
{
  using_eh_for_cleanups_p = 1;
}
void
init_stmt_for_function (void)
{
  cfun->stmt = ggc_alloc_cleared_stat (sizeof (struct stmt_status) );
}
void
set_file_and_line_for_stmt (location_t location)
{
  if (cfun->stmt)
    (cfun->stmt->x_emit_locus) = location;
}
void
emit_nop (void)
{
  rtx last_insn;
  last_insn = get_last_insn ();
  if (!optimize
      && (((enum rtx_code) (last_insn)->code) == CODE_LABEL
   || (((enum rtx_code) (last_insn)->code) == NOTE
       && prev_real_insn (last_insn) == 0)))
    emit_insn (gen_nop ());
}
rtx
label_rtx (tree label)
{
  if (((enum tree_code) (label)->common.code) != LABEL_DECL)
    abort ();
  if (!((label)->decl.rtl != ((void *)0)))
    {
      rtx r = gen_label_rtx ();
      set_decl_rtl (label, r);
      if (((label)->common.side_effects_flag) || ((label)->decl.nonlocal_flag))
 (((r))->in_struct) = 1;
    }
  return ((label)->decl.rtl ? (label)->decl.rtl : (make_decl_rtl (label, ((void *)0)), (label)->decl.rtl));
}
rtx
force_label_rtx (tree label)
{
  rtx ref = label_rtx (label);
  tree function = decl_function_context (label);
  struct function *p;
  if (!function)
    abort ();
  if (function != current_function_decl)
    p = find_function_data (function);
  else
    p = cfun;
  p->expr->x_forced_labels = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (ref), (p->expr->x_forced_labels))
                               ;
  return ref;
}
void
emit_jump (rtx label)
{
  do_pending_stack_adjust ();
  emit_jump_insn (gen_jump (label));
  emit_barrier ();
}
void
expand_computed_goto (tree exp)
{
  rtx x = expand_expr (exp, (rtx) 0, VOIDmode, 0);
  x = convert_memory_address ((0 ? DImode : SImode), x);
  emit_queue ();
  do_pending_stack_adjust ();
  emit_indirect_jump (x);
}
void
expand_label (tree label)
{
  struct label_chain *p;
  rtx label_r = label_rtx (label);
  do_pending_stack_adjust ();
  emit_label (label_r);
  if (((label)->decl.name))
    (((((label)->decl.rtl ? (label)->decl.rtl : (make_decl_rtl (label, ((void *)0)), (label)->decl.rtl)))->u.fld[7]).rtstr) = ((const char *) (((label)->decl.name))->identifier.id.str);
  if (((label)->decl.nonlocal_flag))
    {
      expand_nl_goto_receiver ();
      (cfun->x_nonlocal_goto_handler_labels)
 = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (label_r), ((cfun->x_nonlocal_goto_handler_labels)))
                                     ;
    }
  if (((label)->common.side_effects_flag))
    (cfun->expr->x_forced_labels) = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (label_r), ((cfun->expr->x_forced_labels)));
  if (((label)->decl.nonlocal_flag) || ((label)->common.side_effects_flag))
    maybe_set_first_label_num (label_r);
  if ((cfun->stmt->x_stack_block_stack) != 0)
    {
      p = ggc_alloc_stat (sizeof (struct label_chain) );
      p->next = (cfun->stmt->x_stack_block_stack)->data.block.label_chain;
      (cfun->stmt->x_stack_block_stack)->data.block.label_chain = p;
      p->label = label;
    }
}
void
expand_goto (tree label)
{
  expand_goto_internal (label, label_rtx (label), (rtx) 0);
}
static void
expand_goto_internal (tree body, rtx label, rtx last_insn)
{
  struct nesting *block;
  rtx stack_level = 0;
  if (((enum rtx_code) (label)->code) != CODE_LABEL)
    abort ();
  if ((((label)->u.fld[1]).rtx1) != 0)
    {
      for (block = (cfun->stmt->x_block_stack); block; block = block->next)
 {
   if ((((block->data.block.first_insn)->u.fld[0]).rtint) < (((label)->u.fld[0]).rtint))
     break;
   if (block->data.block.stack_level != 0)
     stack_level = block->data.block.stack_level;
   if (block->data.block.cleanups != 0)
     {
       expand_cleanups (block->data.block.cleanups, 1, 1);
       do_pending_stack_adjust ();
     }
 }
      if (stack_level)
 {
   clear_pending_stack_adjust ();
   do_pending_stack_adjust ();
   if (label == (cfun->x_return_label)
       && (((((enum tree_code) (((current_function_decl)->common.type))->common.code)
     == FUNCTION_TYPE)
     && (((((current_function_decl)->common.type))->type.no_force_blk_flag)
                                            ))))
     ;
   else
     emit_stack_restore (SAVE_BLOCK, stack_level, (rtx) 0);
 }
      if (body != 0 && ((body)->decl.bit_field_flag))
 error ("jump to `%s' invalidly jumps into binding contour",
        ((const char *) (((body)->decl.name))->identifier.id.str));
    }
  else if (! expand_fixup (body, label, last_insn))
    {
      if (body != 0)
 ((body)->common.addressable_flag) = 1;
    }
  emit_jump (label);
}
static int
expand_fixup (tree tree_label, rtx rtl_label, rtx last_insn)
{
  struct nesting *block, *end_block;
  if ((cfun->stmt->x_cond_stack)
      && (rtl_label == (cfun->stmt->x_cond_stack)->data.cond.endif_label
   || rtl_label == (cfun->stmt->x_cond_stack)->data.cond.next_label))
    end_block = (cfun->stmt->x_cond_stack);
  else
    end_block = 0;
  if (end_block)
    {
      struct nesting *next_block = end_block->all;
      block = (cfun->stmt->x_block_stack);
      while (next_block && next_block != block)
 next_block = next_block->all;
      if (next_block)
 return 0;
      next_block = (cfun->stmt->x_block_stack)->next;
      for (block = (cfun->stmt->x_block_stack); block != end_block; block = block->all)
 if (block == next_block)
   next_block = next_block->next;
      end_block = next_block;
    }
  for (block = (cfun->stmt->x_block_stack); block != end_block; block = block->next)
    if (block->data.block.stack_level != 0
 || block->data.block.cleanups != 0)
      break;
  if (block != end_block)
    {
      struct goto_fixup *fixup = ggc_alloc_stat (sizeof (struct goto_fixup) );
      if (last_insn == 0)
 do_pending_stack_adjust ();
      fixup->target = tree_label;
      fixup->target_rtl = rtl_label;
      {
 rtx original_before_jump
   = last_insn ? last_insn : get_last_insn ();
 rtx start;
 rtx end;
 tree block;
 block = make_node_stat (BLOCK );
 ((block)->common.used_flag) = 1;
 (((block))->common.chain)
   = (((((current_function_decl)->decl.initial)))->common.chain);
 (((((current_function_decl)->decl.initial)))->common.chain)
   = block;
 start_sequence ();
 start = emit_note (NOTE_INSN_BLOCK_BEG);
 (((start)->u.fld[4]).rttree) = block;
 fixup->before_jump = emit_note (NOTE_INSN_DELETED);
 end = emit_note (NOTE_INSN_BLOCK_END);
 (((end)->u.fld[4]).rttree) = block;
 fixup->context = block;
 end_sequence ();
 emit_insn_after (start, original_before_jump);
      }
      fixup->block_start_count = (cfun->stmt->x_block_start_count);
      fixup->stack_level = 0;
      fixup->cleanup_list_list
 = ((block->data.block.outer_cleanups
     || block->data.block.cleanups)
    ? tree_cons_stat ((tree) ((void *)0),block->data.block.cleanups,block->data.block.outer_cleanups )
    : 0);
      fixup->next = (cfun->stmt->x_goto_fixup_chain);
      (cfun->stmt->x_goto_fixup_chain) = fixup;
    }
  return block != 0;
}
void
expand_fixups (rtx first_insn)
{
  fixup_gotos (((void *)0), (rtx) 0, (tree) ((void *)0), first_insn, 0);
}
static void
fixup_gotos (struct nesting *thisblock, rtx stack_level,
      tree cleanup_list, rtx first_insn, int dont_jump_in)
{
  struct goto_fixup *f, *prev;
  for (prev = 0, f = (cfun->stmt->x_goto_fixup_chain); f; prev = f, f = f->next)
    {
      if (f->before_jump == 0)
 {
   if (prev != 0)
     prev->next = f->next;
 }
      else if ((((f->target_rtl)->u.fld[1]).rtx1) != 0)
 {
   rtx cleanup_insns;
   if (f->target != 0
       && (dont_jump_in > 0 || (dont_jump_in == 0 && stack_level)
    || cleanup_list)
       && (((first_insn)->u.fld[0]).rtint) < (((f->target_rtl)->u.fld[0]).rtint)
       && (((first_insn)->u.fld[0]).rtint) > (((f->before_jump)->u.fld[0]).rtint)
       && ! ((f->target)->decl.regdecl_flag))
     {
       error ("%Jlabel '%D' used before containing binding contour",
       f->target, f->target);
       ((f->target)->decl.regdecl_flag) = 1;
     }
   start_sequence ();
   lang_hooks.decls.pushlevel (0);
   lang_hooks.decls.set_block (f->context);
   if (f->cleanup_list_list)
     {
       tree lists;
       for (lists = f->cleanup_list_list; lists; lists = ((lists)->common.chain))
  if (((lists)->common.addressable_flag)
      && ((lists)->list.value1) != 0)
    {
      expand_cleanups (((lists)->list.value1), 1, 1);
      do_pending_stack_adjust ();
    }
     }
   if (f->stack_level
       && ! (f->target_rtl == (cfun->x_return_label)
      && ((((enum tree_code) (((current_function_decl)->common.type))->common.code)
    == FUNCTION_TYPE)
   && (((((current_function_decl)->common.type))->type.no_force_blk_flag)
                                          ))))
     emit_stack_restore (SAVE_BLOCK, f->stack_level, f->before_jump);
   cleanup_insns = get_insns ();
   lang_hooks.decls.poplevel (1, 0, 0);
   end_sequence ();
   emit_insn_after (cleanup_insns, f->before_jump);
   f->before_jump = 0;
 }
    }
  for (prev = 0, f = (cfun->stmt->x_goto_fixup_chain); f; prev = f, f = f->next)
    if (f->before_jump != 0
 && (((f->target_rtl)->u.fld[1]).rtx1) == 0
 && thisblock != 0
 && (thisblock->data.block.block_start_count
     <= f->block_start_count))
      {
 tree lists = f->cleanup_list_list;
 rtx cleanup_insns;
 for (; lists; lists = ((lists)->common.chain))
   if (((lists)->common.chain) == thisblock->data.block.outer_cleanups)
     {
       start_sequence ();
       lang_hooks.decls.pushlevel (0);
       lang_hooks.decls.set_block (f->context);
       expand_cleanups (((lists)->list.value1), 1, 1);
       do_pending_stack_adjust ();
       cleanup_insns = get_insns ();
       lang_hooks.decls.poplevel (1, 0, 0);
       end_sequence ();
       if (cleanup_insns != 0)
  f->before_jump
    = emit_insn_after (cleanup_insns, f->before_jump);
       f->cleanup_list_list = ((lists)->common.chain);
     }
 if (stack_level)
   f->stack_level = stack_level;
      }
}
static int
n_char_occurrences2 (int c, const char *s)
{
  int n = 0;
  while (*s)
    n += (*s++ == c);
  return n;
}
void
expand_asm (tree string1, int vol)
{
  rtx body;
  if (((enum tree_code) (string1)->common.code) == ADDR_EXPR)
    string1 = ((string1)->exp.operands[0]);
  body = gen_rtx_fmt_s (ASM_INPUT, (VOIDmode), (((string1)->string1.pointer)));
  (((body))->volatil) = vol;
  emit_insn (body);
}
unsigned char
parse_output_constraint (const char **constraint_p, int operand_num,
    int ninputs, int noutputs, unsigned char *allows_mem,
    unsigned char *allows_reg, unsigned char *is_inout)
{
  const char *constraint = *constraint_p;
  const char *p;
  *allows_mem = 0;
  *allows_reg = 0;
  p = strchr (constraint, '=');
  if (!p)
    p = strchr (constraint, '+');
  if (!p)
    {
      error ("output operand constraint lacks `='");
      return 0;
    }
  *is_inout = (*p == '+');
  if (p != constraint || is_inout)
    {
      char *buf;
      size_t c_len = strlen (constraint);
      if (p != constraint)
 warning ("output constraint `%c' for operand %d is not at the beginning",
   *p, operand_num);
      buf = C_alloca(c_len + 1);
      strcpy (buf, constraint);
      buf[p - constraint] = buf[0];
      buf[0] = '=';
      *constraint_p = ggc_alloc_string (buf, c_len);
      constraint = *constraint_p;
    }
  for (p = constraint + 1; *p; p += 1)
    switch (*p)
      {
      case '+':
      case '=':
 error ("operand constraint contains incorrectly positioned '+' or '='");
 return 0;
      case '%':
 if (operand_num + 1 == ninputs + noutputs)
   {
     error ("`%%' constraint used with last operand");
     return 0;
   }
 break;
      case 'V': case 'm': case 'o':
 *allows_mem = 1;
 break;
      case '?': case '!': case '*': case '&': case '#':
      case 'E': case 'F': case 'G': case 'H':
      case 's': case 'i': case 'n':
      case 'I': case 'J': case 'K': case 'L': case 'M':
      case 'N': case 'O': case 'P': case ',':
 break;
      case '0': case '1': case '2': case '3': case '4':
      case '5': case '6': case '7': case '8': case '9':
      case '[':
 error ("matching constraint not valid in output operand");
 return 0;
      case '<': case '>':
 *allows_mem = 1;
 break;
      case 'g': case 'X':
 *allows_reg = 1;
 *allows_mem = 1;
 break;
      case 'p': case 'r':
 *allows_reg = 1;
 break;
      default:
 if (!(_sch_istable[(*p) & 0xff] & (unsigned short)(_sch_isalpha)))
   break;
 if (((*p) == 'r' ? GENERAL_REGS : NO_REGS) != NO_REGS)
   *allows_reg = 1;
 else if (0)
   *allows_reg = 1;
 else if (0)
   *allows_mem = 1;
 else
   {
     *allows_reg = 1;
     *allows_mem = 1;
   }
 break;
      }
  return 1;
}
unsigned char
parse_input_constraint (const char **constraint_p, int input_num,
   int ninputs, int noutputs, int ninout,
   const char * const * constraints,
   unsigned char *allows_mem, unsigned char *allows_reg)
{
  const char *constraint = *constraint_p;
  const char *orig_constraint = constraint;
  size_t c_len = strlen (constraint);
  size_t j;
  unsigned char saw_match = 0;
  *allows_mem = 0;
  *allows_reg = 0;
  for (j = 0; j < c_len; j += 1)
    switch (constraint[j])
      {
      case '+': case '=': case '&':
 if (constraint == orig_constraint)
   {
     error ("input operand constraint contains `%c'", constraint[j]);
     return 0;
   }
 break;
      case '%':
 if (constraint == orig_constraint
     && input_num + 1 == ninputs - ninout)
   {
     error ("`%%' constraint used with last operand");
     return 0;
   }
 break;
      case 'V': case 'm': case 'o':
 *allows_mem = 1;
 break;
      case '<': case '>':
      case '?': case '!': case '*': case '#':
      case 'E': case 'F': case 'G': case 'H':
      case 's': case 'i': case 'n':
      case 'I': case 'J': case 'K': case 'L': case 'M':
      case 'N': case 'O': case 'P': case ',':
 break;
      case '0': case '1': case '2': case '3': case '4':
      case '5': case '6': case '7': case '8': case '9':
 {
   char *end;
   unsigned long match;
   saw_match = 1;
   match = strtoul (constraint + j, &end, 10);
   if (match >= (unsigned long) noutputs)
     {
       error ("matching constraint references invalid operand number");
       return 0;
     }
   if (*end == '\0'
       && (j == 0 || (j == 1 && constraint[0] == '%')))
     {
       constraint = constraints[match];
       *constraint_p = constraint;
       c_len = strlen (constraint);
       j = 0;
       break;
     }
   else
     j = end - constraint;
   j--;
 }
      case 'p': case 'r':
 *allows_reg = 1;
 break;
      case 'g': case 'X':
 *allows_reg = 1;
 *allows_mem = 1;
 break;
      default:
 if (! (_sch_istable[(constraint[j]) & 0xff] & (unsigned short)(_sch_isalpha)))
   {
     error ("invalid punctuation `%c' in constraint", constraint[j]);
     return 0;
   }
 if (((constraint[j]) == 'r' ? GENERAL_REGS : NO_REGS)
     != NO_REGS)
   *allows_reg = 1;
 else if (0)
   *allows_reg = 1;
 else if (0)
   *allows_mem = 1;
 else
   {
     *allows_reg = 1;
     *allows_mem = 1;
   }
 break;
      }
  if (saw_match && !*allows_reg)
    warning ("matching constraint does not allow a register");
  return 1;
}
unsigned char
asm_op_is_mem_input (tree input, tree expr)
{
  const char *constraint = ((((((input)->list.purpose))->list.value1))->string1.pointer);
  tree outputs = (((expr))->exp.operands[1]);
  int noutputs = list_length (outputs);
  const char **constraints
    = (const char **) C_alloca((noutputs) * sizeof (const char *));
  int i = 0;
  unsigned char allows_mem, allows_reg;
  tree t;
  for (t = outputs; t ; t = ((t)->common.chain), i++)
    constraints[i] = ((((((t)->list.purpose))->list.value1))->string1.pointer);
  parse_input_constraint (&constraint, 0, 0, noutputs, 0, constraints,
     &allows_mem, &allows_reg);
  return (!allows_reg && allows_mem);
}
static unsigned char
decl_conflicts_with_clobbers_p (tree decl, const HARD_REG_SET clobbered_regs)
{
  if ((((enum tree_code) (decl)->common.code) == VAR_DECL || ((enum tree_code) (decl)->common.code) == PARM_DECL)
      && ((decl)->decl.regdecl_flag)
      && (((enum rtx_code) (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->code) == REG)
      && (((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtuint) < 53)
    {
      rtx reg = ((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl));
      unsigned int regno;
      for (regno = (((reg)->u.fld[0]).rtuint);
    regno < ((((reg)->u.fld[0]).rtuint)
      + hard_regno_nregs[(((reg)->u.fld[0]).rtuint)][((enum machine_mode) (reg)->mode)]);
    regno++)
 if ((!!((clobbered_regs)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   {
     error ("asm-specifier for variable `%s' conflicts with asm clobber list",
     ((const char *) (((decl)->decl.name))->identifier.id.str));
     ((decl)->decl.regdecl_flag) = 0;
     return 1;
   }
    }
  return 0;
}
void
expand_asm_operands (tree string1, tree outputs, tree inputs,
       tree clobbers, int vol, location_t locus)
{
  rtvec argvec, constraintvec;
  rtx body;
  int ninputs = list_length (inputs);
  int noutputs = list_length (outputs);
  int ninout;
  int nclobbers;
  HARD_REG_SET clobbered_regs;
  int clobber_conflict_found = 0;
  tree tail;
  tree t;
  int i;
  rtx *output_rtx = C_alloca(noutputs * sizeof (rtx));
  int *inout_opnum = C_alloca(noutputs * sizeof (int));
  rtx *real_output_rtx = C_alloca(noutputs * sizeof (rtx));
  enum machine_mode *inout_mode
    = C_alloca(noutputs * sizeof (enum machine_mode));
  const char **constraints
    = C_alloca((noutputs + ninputs) * sizeof (const char *));
  int old_generating_concat_p = generating_concat_p;
  if (noutputs == 0)
    vol = 1;
  if (! check_operand_nalternatives (outputs, inputs))
    return;
  string1 = resolve_asm_operand_names (string1, outputs, inputs);
  i = 0;
  for (t = outputs; t ; t = ((t)->common.chain), i++)
    constraints[i] = ((((((t)->list.purpose))->list.value1))->string1.pointer);
  for (t = inputs; t ; t = ((t)->common.chain), i++)
    constraints[i] = ((((((t)->list.purpose))->list.value1))->string1.pointer);
  clobbers = targetm.md_asm_clobbers (clobbers);
  nclobbers = 0;
  do { HARD_REG_ELT_TYPE *scan_tp_ = (clobbered_regs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (tail = clobbers; tail; tail = ((tail)->common.chain))
    {
      const char *regname = ((((tail)->list.value1))->string1.pointer);
      i = decode_reg_name (regname);
      if (i >= 0 || i == -4)
 ++nclobbers;
      else if (i == -2)
 error ("unknown register name `%s' in `asm'", regname);
      if (i >= 0)
        {
   if (i == (int) (0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3))
     {
       error ("PIC register `%s' clobbered in `asm'", regname);
       return;
     }
   ((clobbered_regs)[(i) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((i) % ((unsigned) (8 * 4))));
 }
    }
  ninout = 0;
  for (i = 0, tail = outputs; tail; tail = ((tail)->common.chain), i++)
    {
      tree val = ((tail)->list.value1);
      tree type = ((val)->common.type);
      const char *constraint;
      unsigned char is_inout;
      unsigned char allows_reg;
      unsigned char allows_mem;
      if (type == global_trees[TI_ERROR_MARK])
 return;
      constraint = constraints[i];
      if (!parse_output_constraint (&constraint, i, ninputs, noutputs,
        &allows_mem, &allows_reg, &is_inout))
 return;
      if (! allows_reg
   && (allows_mem
       || is_inout
       || ((tree_code_type[(int) (((enum tree_code) (val)->common.code))] == 'd')
    && (((enum rtx_code) (((val)->decl.rtl ? (val)->decl.rtl : (make_decl_rtl (val, ((void *)0)), (val)->decl.rtl)))->code) == REG)
    && ((enum machine_mode) (((val)->decl.rtl ? (val)->decl.rtl : (make_decl_rtl (val, ((void *)0)), (val)->decl.rtl)))->mode) != ((type)->type.mode))))
 lang_hooks.mark_addressable (val);
      if (is_inout)
 ninout++;
    }
  ninputs += ninout;
  if (ninputs + noutputs > 30)
    {
      error ("more than %d operands in `asm'", 30);
      return;
    }
  for (i = 0, tail = inputs; tail; i++, tail = ((tail)->common.chain))
    {
      unsigned char allows_reg, allows_mem;
      const char *constraint;
      if (((((tail)->list.value1))->common.type) == global_trees[TI_ERROR_MARK])
 return;
      constraint = constraints[i + noutputs];
      if (! parse_input_constraint (&constraint, i, ninputs, noutputs, ninout,
        constraints, &allows_mem, &allows_reg))
 return;
      if (! allows_reg && allows_mem)
 lang_hooks.mark_addressable (((tail)->list.value1));
    }
  ninout = 0;
  for (i = 0, tail = outputs; tail; tail = ((tail)->common.chain), i++)
    {
      tree val = ((tail)->list.value1);
      tree type = ((val)->common.type);
      unsigned char is_inout;
      unsigned char allows_reg;
      unsigned char allows_mem;
      rtx op;
      if (!parse_output_constraint (&constraints[i], i, ninputs,
        noutputs, &allows_mem, &allows_reg,
        &is_inout))
 abort ();
      generating_concat_p = 0;
      real_output_rtx[i] = (rtx) 0;
      if ((((enum tree_code) (val)->common.code) == INDIRECT_REF
    && allows_mem)
   || ((tree_code_type[(int) (((enum tree_code) (val)->common.code))] == 'd')
       && (allows_mem || (((enum rtx_code) (((val)->decl.rtl ? (val)->decl.rtl : (make_decl_rtl (val, ((void *)0)), (val)->decl.rtl)))->code) == REG))
       && ! ((((enum rtx_code) (((val)->decl.rtl ? (val)->decl.rtl : (make_decl_rtl (val, ((void *)0)), (val)->decl.rtl)))->code) == REG)
      && ((enum machine_mode) (((val)->decl.rtl ? (val)->decl.rtl : (make_decl_rtl (val, ((void *)0)), (val)->decl.rtl)))->mode) != ((type)->type.mode)))
   || ! allows_reg
   || is_inout)
 {
   op = expand_expr (val, (rtx) 0, VOIDmode, EXPAND_WRITE);
   if ((((enum rtx_code) (op)->code) == MEM))
     op = validize_mem (op);
   if (! allows_reg && !(((enum rtx_code) (op)->code) == MEM))
     error ("output number %d not directly addressable", i);
   if ((! allows_mem && (((enum rtx_code) (op)->code) == MEM))
       || ((enum rtx_code) (op)->code) == CONCAT)
     {
       real_output_rtx[i] = protect_from_queue (op, 1);
       op = gen_reg_rtx (((enum machine_mode) (op)->mode));
       if (is_inout)
  emit_move_insn (op, real_output_rtx[i]);
     }
 }
      else
 {
   op = assign_temp (type, 0, 0, 1);
   op = validize_mem (op);
   ((tail)->list.value1) = make_tree (type, op);
 }
      output_rtx[i] = op;
      generating_concat_p = old_generating_concat_p;
      if (is_inout)
 {
   inout_mode[ninout] = ((type)->type.mode);
   inout_opnum[ninout++] = i;
 }
      if (decl_conflicts_with_clobbers_p (val, clobbered_regs))
 clobber_conflict_found = 1;
    }
  argvec = rtvec_alloc (ninputs);
  constraintvec = rtvec_alloc (ninputs);
  body = gen_rtx_fmt_ssiEEsi (ASM_OPERANDS, ((noutputs == 0 ? VOIDmode : ((enum machine_mode) (output_rtx[0])->mode))), (((string1)->string1.pointer)), (empty_string), (0), (argvec), (constraintvec), (locus).file, (locus).line)
                ;
  (((body))->volatil) = vol;
  for (i = 0, tail = inputs; tail; tail = ((tail)->common.chain), ++i)
    {
      unsigned char allows_reg, allows_mem;
      const char *constraint;
      tree val, type;
      rtx op;
      constraint = constraints[i + noutputs];
      if (! parse_input_constraint (&constraint, i, ninputs, noutputs, ninout,
        constraints, &allows_mem, &allows_reg))
 abort ();
      generating_concat_p = 0;
      val = ((tail)->list.value1);
      type = ((val)->common.type);
      op = expand_expr (val, (rtx) 0, VOIDmode,
   (allows_mem && !allows_reg
    ? EXPAND_MEMORY : EXPAND_NORMAL));
      if (((enum rtx_code) (op)->code) == CONCAT)
 op = force_reg (((enum machine_mode) (op)->mode), op);
      else if ((((enum rtx_code) (op)->code) == MEM))
 op = validize_mem (op);
      if (asm_operand_ok (op, constraint) <= 0)
 {
   if (allows_reg)
     op = force_reg (((type)->type.mode), op);
   else if (!allows_mem)
     warning ("asm operand %d probably doesn't match constraints",
       i + noutputs);
   else if ((((enum rtx_code) (op)->code) == MEM))
     {
     }
   else
     {
       warning ("use of memory input without lvalue in asm operand %d is deprecated", i + noutputs);
       if (((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR))
  {
    rtx mem = force_const_mem (((type)->type.mode), op);
    if (mem)
      op = validize_mem (mem);
    else
      op = force_reg (((type)->type.mode), op);
  }
       if ((((enum rtx_code) (op)->code) == REG)
    || ((enum rtx_code) (op)->code) == SUBREG
    || ((enum rtx_code) (op)->code) == CONCAT)
  {
    tree qual_type = build_qualified_type (type,
        (((((type)->common.readonly_flag) * 0x1) | (((type)->common.volatile_flag) * 0x2) | (((type)->type.restrict_flag) * 0x4))
         | 0x1));
    rtx memloc = assign_temp (qual_type, 1, 1, 1);
    memloc = validize_mem (memloc);
    emit_move_insn (memloc, op);
    op = memloc;
  }
     }
 }
      generating_concat_p = old_generating_concat_p;
      (((((body)->u.fld[3]).rtvec1))->elem[i]) = op;
      (((((body)->u.fld[4]).rtvec1))->elem[i])
 = gen_rtx_fmt_s (ASM_INPUT, (((type)->type.mode)), (constraints[i + noutputs]));
      if (decl_conflicts_with_clobbers_p (val, clobbered_regs))
 clobber_conflict_found = 1;
    }
  generating_concat_p = 0;
  for (i = 0; i < ninputs - ninout; i++)
    (((((body)->u.fld[3]).rtvec1))->elem[i])
      = protect_from_queue ((((((body)->u.fld[3]).rtvec1))->elem[i]), 0);
  for (i = 0; i < noutputs; i++)
    output_rtx[i] = protect_from_queue (output_rtx[i], 1);
  for (i = 0; i < ninout; i++)
    {
      int j = inout_opnum[i];
      char buffer[16];
      (((((body)->u.fld[3]).rtvec1))->elem[ninputs - ninout + i])
 = output_rtx[j];
      sprintf (buffer, "%d", j);
      (((((body)->u.fld[4]).rtvec1))->elem[ninputs - ninout + i])
 = gen_rtx_fmt_s (ASM_INPUT, (inout_mode[i]), (ggc_alloc_string((buffer), -1)));
    }
  generating_concat_p = old_generating_concat_p;
  if (noutputs == 1 && nclobbers == 0)
    {
      (((body)->u.fld[1]).rtstr) = constraints[0];
      emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (output_rtx[0]), (body)));
    }
  else if (noutputs == 0 && nclobbers == 0)
    {
      emit_insn (body);
    }
  else
    {
      rtx obody = body;
      int num = noutputs;
      if (num == 0)
 num = 1;
      body = gen_rtx_fmt_E (PARALLEL, (VOIDmode), (rtvec_alloc (num + nclobbers)));
      for (i = 0, tail = outputs; tail; tail = ((tail)->common.chain), i++)
 {
   (((((body)->u.fld[0]).rtvec1))->elem[i])
     = gen_rtx_fmt_ee (SET, (VOIDmode), (output_rtx[i]), (gen_rtx_fmt_ssiEEsi (ASM_OPERANDS, (((enum machine_mode) (output_rtx[i])->mode)), (((string1)->string1.pointer)), (constraints[i]), (i), (argvec), (constraintvec), (locus).file, (locus).line)))
              ;
   (((((((((((body)->u.fld[0]).rtvec1))->elem[i]))->u.fld[1]).rtx1)))->volatil) = vol;
 }
      if (i == 0)
 (((((body)->u.fld[0]).rtvec1))->elem[i++]) = obody;
      for (tail = clobbers; tail; tail = ((tail)->common.chain))
 {
   const char *regname = ((((tail)->list.value1))->string1.pointer);
   int j = decode_reg_name (regname);
   rtx clobbered_reg;
   if (j < 0)
     {
       if (j == -3)
  continue;
       if (j == -4)
  {
    (((((body)->u.fld[0]).rtvec1))->elem[i++])
      = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_MEM (BLKmode, gen_rtx_fmt_0 (SCRATCH, (VOIDmode)))))
                                 ;
    continue;
  }
       continue;
     }
   clobbered_reg = gen_rtx_REG (QImode, j);
   if (!clobber_conflict_found)
     {
       int opno;
       for (opno = 0; opno < noutputs; opno++)
  if (reg_overlap_mentioned_p (clobbered_reg, output_rtx[opno]))
    internal_error ("asm clobber conflict with output operand");
       for (opno = 0; opno < ninputs - ninout; opno++)
  if (reg_overlap_mentioned_p (clobbered_reg,
          (((((obody)->u.fld[3]).rtvec1))->elem[opno])))
    internal_error ("asm clobber conflict with input operand");
     }
   (((((body)->u.fld[0]).rtvec1))->elem[i++])
     = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (clobbered_reg));
 }
      emit_insn (body);
    }
  for (i = 0; i < noutputs; ++i)
    if (real_output_rtx[i])
      emit_move_insn (real_output_rtx[i], output_rtx[i]);
  free_temp_slots ();
}
void
expand_asm_expr (tree exp)
{
  int noutputs, i;
  tree outputs, tail;
  tree *o;
  if ((((exp)->common.static_flag)))
    {
      expand_asm ((((exp))->exp.operands[0]), (((exp)->common.public_flag)));
      return;
    }
  outputs = (((exp))->exp.operands[1]);
  noutputs = list_length (outputs);
  o = (tree *) C_alloca(noutputs * sizeof (tree));
  for (i = 0, tail = outputs; tail; tail = ((tail)->common.chain), i++)
    o[i] = ((tail)->list.value1);
  expand_asm_operands ((((exp))->exp.operands[0]), outputs, (((exp))->exp.operands[2]),
         (((exp))->exp.operands[3]), (((exp)->common.public_flag)),
         input_location);
  for (i = 0, tail = outputs; tail; tail = ((tail)->common.chain), i++)
    {
      if (o[i] != ((tail)->list.value1))
 {
   expand_assignment (o[i], ((tail)->list.value1), 0);
   free_temp_slots ();
   ((tail)->list.value1) = o[i];
 }
    }
  emit_queue ();
}
static unsigned char
check_operand_nalternatives (tree outputs, tree inputs)
{
  if (outputs || inputs)
    {
      tree tmp = ((outputs ? outputs : inputs)->list.purpose);
      int nalternatives
 = n_char_occurrences2 (',', ((((tmp)->list.value1))->string1.pointer));
      tree next = inputs;
      if (nalternatives + 1 > 30)
 {
   error ("too many alternatives in `asm'");
   return 0;
 }
      tmp = outputs;
      while (tmp)
 {
   const char *constraint
     = ((((((tmp)->list.purpose))->list.value1))->string1.pointer);
   if (n_char_occurrences2 (',', constraint) != nalternatives)
     {
       error ("operand constraints for `asm' differ in number of alternatives");
       return 0;
     }
   if (((tmp)->common.chain))
     tmp = ((tmp)->common.chain);
   else
     tmp = next, next = 0;
 }
    }
  return 1;
}
static unsigned char
check_unique_operand_names (tree outputs, tree inputs)
{
  tree i, j;
  for (i = outputs; i ; i = ((i)->common.chain))
    {
      tree i_name = ((((i)->list.purpose))->list.purpose);
      if (! i_name)
 continue;
      for (j = ((i)->common.chain); j ; j = ((j)->common.chain))
 if (simple_cst_equal (i_name, ((((j)->list.purpose))->list.purpose)))
   goto failure;
    }
  for (i = inputs; i ; i = ((i)->common.chain))
    {
      tree i_name = ((((i)->list.purpose))->list.purpose);
      if (! i_name)
 continue;
      for (j = ((i)->common.chain); j ; j = ((j)->common.chain))
 if (simple_cst_equal (i_name, ((((j)->list.purpose))->list.purpose)))
   goto failure;
      for (j = outputs; j ; j = ((j)->common.chain))
 if (simple_cst_equal (i_name, ((((j)->list.purpose))->list.purpose)))
   goto failure;
    }
  return 1;
 failure:
  error ("duplicate asm operand name '%s'",
  ((((((i)->list.purpose))->list.purpose))->string1.pointer));
  return 0;
}
tree
resolve_asm_operand_names (tree string1, tree outputs, tree inputs)
{
  char *buffer;
  char *p;
  const char *c;
  tree t;
  check_unique_operand_names (outputs, inputs);
  for (t = inputs; t ; t = ((t)->common.chain))
    {
      c = ((((((t)->list.purpose))->list.value1))->string1.pointer);
      if (strchr (c, '[') != ((void *)0))
 {
   p = buffer = xstrdup (c);
   while ((p = strchr (p, '[')) != ((void *)0))
     p = resolve_operand_name_1 (p, outputs, inputs);
   ((((t)->list.purpose))->list.value1)
     = build_string (strlen (buffer), buffer);
   free (buffer);
 }
    }
  c = ((string1)->string1.pointer);
  while ((c = strchr (c, '%')) != ((void *)0))
    {
      if (c[1] == '[')
 break;
      else if ((_sch_istable[(c[1]) & 0xff] & (unsigned short)(_sch_isalpha)) && c[2] == '[')
 break;
      else
 {
   c += 1;
   continue;
 }
    }
  if (c)
    {
      buffer = xstrdup (((string1)->string1.pointer));
      p = buffer + (c - ((string1)->string1.pointer));
      while ((p = strchr (p, '%')) != ((void *)0))
 {
   if (p[1] == '[')
     p += 1;
   else if ((_sch_istable[(p[1]) & 0xff] & (unsigned short)(_sch_isalpha)) && p[2] == '[')
     p += 2;
   else
     {
       p += 1;
       continue;
     }
   p = resolve_operand_name_1 (p, outputs, inputs);
 }
      string1 = build_string (strlen (buffer), buffer);
      free (buffer);
    }
  return string1;
}
static char *
resolve_operand_name_1 (char *p, tree outputs, tree inputs)
{
  char *q;
  int op;
  tree t;
  size_t len;
  q = strchr (p, ']');
  if (!q)
    {
      error ("missing close brace for named operand");
      return strchr (p, '\0');
    }
  len = q - p - 1;
  for (op = 0, t = outputs; t ; t = ((t)->common.chain), op++)
    {
      tree name = ((((t)->list.purpose))->list.purpose);
      if (name)
 {
   const char *c = ((name)->string1.pointer);
   if (strncmp (c, p + 1, len) == 0 && c[len] == '\0')
     goto found;
 }
    }
  for (t = inputs; t ; t = ((t)->common.chain), op++)
    {
      tree name = ((((t)->list.purpose))->list.purpose);
      if (name)
 {
   const char *c = ((name)->string1.pointer);
   if (strncmp (c, p + 1, len) == 0 && c[len] == '\0')
     goto found;
 }
    }
  *q = '\0';
  error ("undefined named operand '%s'", p + 1);
  op = 0;
 found:
  sprintf (p, "%d", op);
  p = strchr (p, '\0');
  if (p > q)
    abort ();
  memmove (p, q + 1, strlen (q + 1) + 1);
  return p;
}
void
expand_expr_stmt (tree exp)
{
  rtx value1;
  tree type;
  value1 = expand_expr (exp, (const_int_rtx[64]), VOIDmode, 0);
  type = ((exp)->common.type);
  if (value1 && (((enum rtx_code) (value1)->code) == MEM) && ((exp)->common.volatile_flag))
    {
      if (((type)->type.mode) == VOIDmode)
 ;
      else if (((type)->type.mode) != BLKmode)
 value1 = copy_to_reg (value1);
      else
 {
   rtx lab = gen_label_rtx ();
   emit_cmp_and_jump_insns (value1, value1, EQ,
       expand_expr (((type)->type.size),
      (rtx) 0, VOIDmode, 0),
       BLKmode, 0, lab);
   emit_label (lab);
 }
    }
  free_temp_slots ();
  emit_queue ();
}
int
warn_if_unused_value (tree exp, location_t locus)
{
 restart:
  if (((exp)->common.used_flag))
    return 0;
  if ((((enum tree_code) (((exp)->common.type))->common.code) == VOID_TYPE))
    return 0;
  if (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (exp)->common.code))])) != 0) ? (exp)->exp.locus : (location_t *)((void *)0)))
    locus = *((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (exp)->common.code))])) != 0) ? (exp)->exp.locus : (location_t *)((void *)0));
  switch (((enum tree_code) (exp)->common.code))
    {
    case PREINCREMENT_EXPR:
    case POSTINCREMENT_EXPR:
    case PREDECREMENT_EXPR:
    case POSTDECREMENT_EXPR:
    case MODIFY_EXPR:
    case INIT_EXPR:
    case TARGET_EXPR:
    case CALL_EXPR:
    case TRY_CATCH_EXPR:
    case WITH_CLEANUP_EXPR:
    case EXIT_EXPR:
      return 0;
    case BIND_EXPR:
      exp = ((((exp))->exp.operands[1]));
      goto restart;
    case SAVE_EXPR:
      exp = ((exp)->exp.operands[0]);
      goto restart;
    case TRUTH_ORIF_EXPR:
    case TRUTH_ANDIF_EXPR:
      exp = ((exp)->exp.operands[1]);
      goto restart;
    case COMPOUND_EXPR:
      if (((exp)->common.nowarning_flag))
 return 0;
      if (warn_if_unused_value (((exp)->exp.operands[0]), locus))
 return 1;
      if (((((exp)->exp.operands[1]))->common.constant_flag))
 return 0;
      exp = ((exp)->exp.operands[1]);
      goto restart;
    case NOP_EXPR:
    case CONVERT_EXPR:
    case NON_LVALUE_EXPR:
      if (((exp)->common.nowarning_flag))
 return 0;
      {
 tree tem = ((exp)->exp.operands[0]);
 while (((enum tree_code) (tem)->common.code) == CONVERT_EXPR || ((enum tree_code) (tem)->common.code) == NOP_EXPR)
   tem = ((tem)->exp.operands[0]);
 if (((enum tree_code) (tem)->common.code) == MODIFY_EXPR || ((enum tree_code) (tem)->common.code) == INIT_EXPR
     || ((enum tree_code) (tem)->common.code) == CALL_EXPR)
   return 0;
      }
      goto maybe_warn;
    case INDIRECT_REF:
      if (((enum tree_code) (((((exp)->exp.operands[0]))->common.type))->common.code) == REFERENCE_TYPE)
 {
   exp = ((exp)->exp.operands[0]);
   goto restart;
 }
    default:
      if (((tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'd')
    || tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'r')
   && ((exp)->common.volatile_flag))
 return 0;
      if (tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'e'
   && tree_code_length[(int) (((enum tree_code) (exp)->common.code))] == 0)
 return 0;
    maybe_warn:
      if (((exp)->common.side_effects_flag))
 return 0;
      warning ("%Hvalue computed is not used", &locus);
      return 1;
    }
}
void
expand_start_cond (tree cond, int exitflag)
{
  struct nesting *thiscond = ggc_alloc_stat (sizeof (struct nesting) );
  thiscond->desc = COND_NESTING;
  thiscond->next = (cfun->stmt->x_cond_stack);
  thiscond->all = (cfun->stmt->x_nesting_stack);
  thiscond->depth = ++(cfun->stmt->x_nesting_depth);
  thiscond->data.cond.next_label = gen_label_rtx ();
  thiscond->exit_label = exitflag ? gen_label_rtx () : 0;
  thiscond->data.cond.endif_label = thiscond->exit_label;
  (cfun->stmt->x_cond_stack) = thiscond;
  (cfun->stmt->x_nesting_stack) = thiscond;
  do_jump (cond, thiscond->data.cond.next_label, (rtx) 0);
}
void
expand_start_elseif (tree cond)
{
  if ((cfun->stmt->x_cond_stack)->data.cond.endif_label == 0)
    (cfun->stmt->x_cond_stack)->data.cond.endif_label = gen_label_rtx ();
  emit_jump ((cfun->stmt->x_cond_stack)->data.cond.endif_label);
  emit_label ((cfun->stmt->x_cond_stack)->data.cond.next_label);
  (cfun->stmt->x_cond_stack)->data.cond.next_label = gen_label_rtx ();
  do_jump (cond, (cfun->stmt->x_cond_stack)->data.cond.next_label, (rtx) 0);
}
void
expand_start_else (void)
{
  if ((cfun->stmt->x_cond_stack)->data.cond.endif_label == 0)
    (cfun->stmt->x_cond_stack)->data.cond.endif_label = gen_label_rtx ();
  emit_jump ((cfun->stmt->x_cond_stack)->data.cond.endif_label);
  emit_label ((cfun->stmt->x_cond_stack)->data.cond.next_label);
  (cfun->stmt->x_cond_stack)->data.cond.next_label = 0;
}
void
expand_elseif (tree cond)
{
  (cfun->stmt->x_cond_stack)->data.cond.next_label = gen_label_rtx ();
  do_jump (cond, (cfun->stmt->x_cond_stack)->data.cond.next_label, (rtx) 0);
}
void
expand_end_cond (void)
{
  struct nesting *thiscond = (cfun->stmt->x_cond_stack);
  do_pending_stack_adjust ();
  if (thiscond->data.cond.next_label)
    emit_label (thiscond->data.cond.next_label);
  if (thiscond->data.cond.endif_label)
    emit_label (thiscond->data.cond.endif_label);
  do { struct nesting *target = (cfun->stmt->x_cond_stack); struct nesting *this; do { this = (cfun->stmt->x_nesting_stack); if ((cfun->stmt->x_cond_stack) == this) (cfun->stmt->x_cond_stack) = (cfun->stmt->x_cond_stack)->next; if ((cfun->stmt->x_block_stack) == this) (cfun->stmt->x_block_stack) = (cfun->stmt->x_block_stack)->next; if ((cfun->stmt->x_stack_block_stack) == this) (cfun->stmt->x_stack_block_stack) = (cfun->stmt->x_stack_block_stack)->next; if ((cfun->stmt->x_case_stack) == this) (cfun->stmt->x_case_stack) = (cfun->stmt->x_case_stack)->next; (cfun->stmt->x_nesting_depth) = (cfun->stmt->x_nesting_stack)->depth - 1; (cfun->stmt->x_nesting_stack) = this->all; } while (this != target); } while (0);
}
int
preserve_subexpressions_p (void)
{
  if (flag_expensive_optimizations)
    return 1;
  if (optimize == 0 || cfun == 0 || cfun->stmt == 0)
    return 0;
  return 1;
}
void
expand_null_return (void)
{
  rtx last_insn;
  last_insn = get_last_insn ();
  clobber_return_register ();
  expand_null_return_1 (last_insn);
}
void
expand_naked_return (void)
{
  rtx last_insn, end_label;
  last_insn = get_last_insn ();
  end_label = (cfun->x_naked_return_label);
  clear_pending_stack_adjust ();
  do_pending_stack_adjust ();
  if (end_label == 0)
    end_label = (cfun->x_naked_return_label) = gen_label_rtx ();
  expand_goto_internal ((tree) ((void *)0), end_label, last_insn);
}
static enum br_predictor
return_prediction (rtx val)
{
  if ((((enum tree_code) (((((current_function_decl)->decl.result))->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((((current_function_decl)->decl.result))->common.type))->common.code) == REFERENCE_TYPE))
    {
      if (val == (const_int_rtx[64]))
 return PRED_NULL_RETURN;
    }
  else
    {
      if (((enum rtx_code) (val)->code) == CONST_INT
   && ((val)->u.hwint[0]) < 0)
 return PRED_NEGATIVE_RETURN;
      if (((rtx_class[(int) (((enum rtx_code) (val)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (val)->code) == CONST_VECTOR)
   && (val != (const_int_rtx[64]) && val != (const_int_rtx[64 +1])))
 return PRED_CONST_RETURN;
    }
  return PRED_NO_PREDICTION;
}
static rtx
shift_return_value (rtx val)
{
  tree type;
  type = ((((current_function_decl)->decl.result))->common.type);
  if (targetm.calls.return_in_msb (type))
    {
      rtx target;
      long shift;
      target = ((((current_function_decl)->decl.result))->decl.rtl ? (((current_function_decl)->decl.result))->decl.rtl : (make_decl_rtl (((current_function_decl)->decl.result), ((void *)0)), (((current_function_decl)->decl.result))->decl.rtl));
      shift = (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (target)->mode)]) * 8))
        - 8 * int_size_in_bytes (type));
      if (shift > 0)
 val = expand_shift (LSHIFT_EXPR, ((enum machine_mode) (target)->mode),
       rtl_hooks.gen_lowpart (((enum machine_mode) (target)->mode), val),
       build_int_2_wide ((unsigned long) (shift), (long) (0)), target, 1);
    }
  return val;
}
static void
expand_value_return (rtx val)
{
  rtx last_insn;
  rtx return_reg;
  enum br_predictor pred;
  if (flag_guess_branch_prob
      && (pred = return_prediction (val)) != PRED_NO_PREDICTION)
    {
      rtx note;
      note = emit_note (NOTE_INSN_PREDICTION);
      (((note)->u.fld[4]).rtint) = ((pred<<8)+(NOT_TAKEN));
    }
  last_insn = get_last_insn ();
  return_reg = ((((current_function_decl)->decl.result))->decl.rtl ? (((current_function_decl)->decl.result))->decl.rtl : (make_decl_rtl (((current_function_decl)->decl.result), ((void *)0)), (((current_function_decl)->decl.result))->decl.rtl));
  if (return_reg != val)
    {
      tree type = ((((current_function_decl)->decl.result))->common.type);
      if (targetm.calls.promote_function_return (((current_function_decl)->common.type)))
      {
 int unsignedp = ((type)->common.unsigned_flag);
 enum machine_mode old_mode
   = ((((current_function_decl)->decl.result))->decl.mode);
 enum machine_mode mode
   = promote_mode (type, old_mode, &unsignedp, 1);
 if (mode != old_mode)
   val = convert_modes (mode, old_mode, val, unsignedp);
      }
      if (((enum rtx_code) (return_reg)->code) == PARALLEL)
 emit_group_load (return_reg, val, type, int_size_in_bytes (type));
      else
 emit_move_insn (return_reg, val);
    }
  expand_null_return_1 (last_insn);
}
static void
expand_null_return_1 (rtx last_insn)
{
  rtx end_label = (cfun->x_return_label);
  clear_pending_stack_adjust ();
  do_pending_stack_adjust ();
  if (end_label == 0)
     end_label = (cfun->x_return_label) = gen_label_rtx ();
  expand_goto_internal ((tree) ((void *)0), end_label, last_insn);
}
void
expand_return (tree retval)
{
  rtx last_insn = 0;
  rtx result_rtl;
  rtx val = 0;
  tree retval_rhs;
  if (((enum tree_code) (((((current_function_decl)->common.type))->common.type))->common.code) == VOID_TYPE)
    {
      expand_expr (retval, (rtx) 0, VOIDmode, 0);
      emit_queue ();
      expand_null_return ();
      return;
    }
  if (retval == global_trees[TI_ERROR_MARK])
    {
      expand_null_return ();
      return;
    }
  else if (((enum tree_code) (retval)->common.code) == RESULT_DECL)
    retval_rhs = retval;
  else if ((((enum tree_code) (retval)->common.code) == MODIFY_EXPR || ((enum tree_code) (retval)->common.code) == INIT_EXPR)
    && ((enum tree_code) (((retval)->exp.operands[0]))->common.code) == RESULT_DECL)
    retval_rhs = ((retval)->exp.operands[1]);
  else
    retval_rhs = retval;
  last_insn = get_last_insn ();
  result_rtl = ((((current_function_decl)->decl.result))->decl.rtl ? (((current_function_decl)->decl.result))->decl.rtl : (make_decl_rtl (((current_function_decl)->decl.result), ((void *)0)), (((current_function_decl)->decl.result))->decl.rtl));
  if (retval_rhs != 0
      && ((((retval_rhs)->common.type))->type.mode) == BLKmode
      && (((enum rtx_code) (result_rtl)->code) == REG))
    {
      int i;
      unsigned long bitpos, xbitpos;
      unsigned long padding_correction = 0;
      unsigned long bytes
 = int_size_in_bytes (((retval_rhs)->common.type));
      int n_regs = (bytes + (0 ? 8 : 4) - 1) / (0 ? 8 : 4);
      unsigned int bitsize
 = ((((((retval_rhs)->common.type))->type.align)) < ((8 * (0 ? 8 : 4))) ? (((((retval_rhs)->common.type))->type.align)) : ((8 * (0 ? 8 : 4))));
      rtx *result_pseudos = C_alloca(sizeof (rtx) * n_regs);
      rtx result_reg, src = (rtx) 0, dst = (rtx) 0;
      rtx result_val = expand_expr (retval_rhs, (rtx) 0, VOIDmode, 0);
      enum machine_mode tmpmode, result_reg_mode;
      if (bytes == 0)
 {
   expand_null_return ();
   return;
 }
      if (bytes % (0 ? 8 : 4) != 0
   && (targetm.calls.return_in_msb (((retval_rhs)->common.type))
       ? !0
       : 0))
 padding_correction = ((8 * (0 ? 8 : 4)) - ((bytes % (0 ? 8 : 4))
            * 8));
      for (bitpos = 0, xbitpos = padding_correction;
    bitpos < bytes * 8;
    bitpos += bitsize, xbitpos += bitsize)
 {
   if (xbitpos % (8 * (0 ? 8 : 4)) == 0
       || xbitpos == padding_correction)
     {
       dst = gen_reg_rtx (word_mode);
       result_pseudos[xbitpos / (8 * (0 ? 8 : 4))] = dst;
       emit_move_insn (dst, (const_tiny_rtx[0][(int) (((enum machine_mode) (dst)->mode))]));
     }
   if (bitpos % (8 * (0 ? 8 : 4)) == 0)
     src = operand_subword_force (result_val,
      bitpos / (8 * (0 ? 8 : 4)),
      BLKmode);
   store_bit_field (dst, bitsize, xbitpos % (8 * (0 ? 8 : 4)), word_mode,
      extract_bit_field (src, bitsize,
           bitpos % (8 * (0 ? 8 : 4)), 1,
           (rtx) 0, word_mode, word_mode,
           (8 * (0 ? 8 : 4))),
      (8 * (0 ? 8 : 4)));
 }
      tmpmode = ((enum machine_mode) (result_rtl)->mode);
      if (tmpmode == BLKmode)
 {
   for (tmpmode = class_narrowest_mode[MODE_INT];
        tmpmode != VOIDmode;
        tmpmode = mode_wider[tmpmode])
     if (((unsigned short) mode_size[tmpmode]) >= bytes)
       break;
   if (tmpmode == VOIDmode)
     abort ();
   ((result_rtl)->mode = (tmpmode));
 }
      if (((unsigned short) mode_size[tmpmode]) < ((unsigned short) mode_size[word_mode]))
 result_reg_mode = word_mode;
      else
 result_reg_mode = tmpmode;
      result_reg = gen_reg_rtx (result_reg_mode);
      emit_queue ();
      for (i = 0; i < n_regs; i++)
 emit_move_insn (operand_subword (result_reg, i, 0, result_reg_mode),
   result_pseudos[i]);
      if (tmpmode != result_reg_mode)
 result_reg = rtl_hooks.gen_lowpart (tmpmode, result_reg);
      expand_value_return (result_reg);
    }
  else if (retval_rhs != 0
    && !(((enum tree_code) (((retval_rhs)->common.type))->common.code) == VOID_TYPE)
    && ((((enum rtx_code) (result_rtl)->code) == REG)
        || (((enum rtx_code) (result_rtl)->code) == PARALLEL)))
    {
      tree ot = ((((current_function_decl)->decl.result))->common.type);
      tree nt = build_qualified_type (ot, ((((ot)->common.readonly_flag) * 0x1) | (((ot)->common.volatile_flag) * 0x2) | (((ot)->type.restrict_flag) * 0x4)) | 0x1);
      val = assign_temp (nt, 0, 0, 1);
      val = expand_expr (retval_rhs, val, ((enum machine_mode) (val)->mode), 0);
      val = force_not_mem (val);
      emit_queue ();
      expand_value_return (shift_return_value (val));
    }
  else
    {
      expand_expr (retval, (const_int_rtx[64]), VOIDmode, 0);
      emit_queue ();
      expand_value_return (result_rtl);
    }
}
void
expand_start_bindings_and_block (int flags, tree block)
{
  struct nesting *thisblock = ggc_alloc_stat (sizeof (struct nesting) );
  rtx note;
  int exit_flag = ((flags & 1) != 0);
  int block_flag = ((flags & 2) == 0);
  if (!block_flag && block)
    abort ();
  note = emit_note (NOTE_INSN_DELETED);
  thisblock->desc = BLOCK_NESTING;
  thisblock->next = (cfun->stmt->x_block_stack);
  thisblock->all = (cfun->stmt->x_nesting_stack);
  thisblock->depth = ++(cfun->stmt->x_nesting_depth);
  thisblock->data.block.stack_level = 0;
  thisblock->data.block.cleanups = 0;
  thisblock->data.block.exception_region = 0;
  thisblock->data.block.block_target_temp_slot_level = (cfun->x_target_temp_slot_level);
  thisblock->data.block.conditional_code = 0;
  thisblock->data.block.last_unconditional_cleanup = note;
  emit_note (NOTE_INSN_DELETED);
  if ((cfun->stmt->x_block_stack)
      && !((cfun->stmt->x_block_stack)->data.block.cleanups == (tree) ((void *)0)
    && (cfun->stmt->x_block_stack)->data.block.outer_cleanups == (tree) ((void *)0)))
    thisblock->data.block.outer_cleanups
      = tree_cons_stat ((tree) ((void *)0),(cfun->stmt->x_block_stack)->data.block.cleanups,(cfun->stmt->x_block_stack)->data.block.outer_cleanups )
                                            ;
  else
    thisblock->data.block.outer_cleanups = 0;
  thisblock->data.block.label_chain = 0;
  thisblock->data.block.innermost_stack_block = (cfun->stmt->x_stack_block_stack);
  thisblock->data.block.first_insn = note;
  thisblock->data.block.block_start_count = ++(cfun->stmt->x_block_start_count);
  thisblock->exit_label = exit_flag ? gen_label_rtx () : 0;
  (cfun->stmt->x_block_stack) = thisblock;
  (cfun->stmt->x_nesting_stack) = thisblock;
  push_temp_slots ();
}
void
expand_start_target_temps (void)
{
  push_temp_slots ();
  expand_start_bindings_and_block(2, (tree) ((void *)0));
  (cfun->x_target_temp_slot_level) = (cfun->x_temp_slot_level);
}
void
expand_end_target_temps (void)
{
  expand_end_bindings ((tree) ((void *)0), 0, 0);
  pop_temp_slots ();
}
int
is_body_block (tree stmt)
{
  if (lang_hooks.no_body_blocks)
    return 0;
  if (((enum tree_code) (stmt)->common.code) == BLOCK)
    {
      tree parent = ((stmt)->block.supercontext);
      if (parent && ((enum tree_code) (parent)->common.code) == BLOCK)
 {
   tree grandparent = ((parent)->block.supercontext);
   if (grandparent && ((enum tree_code) (grandparent)->common.code) == FUNCTION_DECL)
     return 1;
 }
    }
  return 0;
}
int
conditional_context (void)
{
  return (cfun->stmt->x_block_stack) && (cfun->stmt->x_block_stack)->data.block.conditional_code;
}
struct nesting *
current_nesting_level (void)
{
  return cfun ? (cfun->stmt->x_block_stack) : 0;
}
static void
expand_nl_goto_receiver (void)
{
  emit_insn (gen_rtx_fmt_e (USE, (VOIDmode), ((global_rtl[GR_HARD_FRAME_POINTER]))));
  emit_insn (gen_rtx_fmt_e (CLOBBER, (VOIDmode), (static_chain_rtx)));
    emit_move_insn ((global_rtl[GR_VIRTUAL_STACK_ARGS]), (global_rtl[GR_HARD_FRAME_POINTER]));
  if (fixed_regs[16])
    {
      static const struct elims {const int from, to;} elim_regs[] = {{ 16, 7}, { 16, 6}, { 20, 7}, { 20, 6}};
      size_t i;
      for (i = 0; i < (sizeof (elim_regs) / sizeof ((elim_regs)[0])); i++)
 if (elim_regs[i].from == 16
     && elim_regs[i].to == 6)
   break;
      if (i == (sizeof (elim_regs) / sizeof ((elim_regs)[0])))
 {
   emit_move_insn ((global_rtl[GR_VIRTUAL_INCOMING_ARGS]),
     copy_to_reg (get_arg_pointer_save_area (cfun)));
 }
    }
  emit_insn (gen_rtx_fmt_s (ASM_INPUT, (VOIDmode), ("")));
}
void
warn_about_unused_variables (tree vars)
{
  tree decl;
  if (warn_unused_variable)
    for (decl = vars; decl; decl = ((decl)->common.chain))
      if (((enum tree_code) (decl)->common.code) == VAR_DECL
   && ! ((decl)->common.used_flag)
   && ! ((decl)->decl.in_system_header_flag)
   && ((decl)->decl.name) && ! ((decl)->decl.artificial_flag))
 warning ("%Junused variable '%D'", decl, decl);
}
void
expand_end_bindings (tree vars, int mark_ends ,
       int dont_jump_in)
{
  struct nesting *thisblock = (cfun->stmt->x_block_stack);
  warn_about_unused_variables (vars);
  if (thisblock->exit_label)
    {
      do_pending_stack_adjust ();
      emit_label (thisblock->exit_label);
    }
  if (dont_jump_in > 0
      || (dont_jump_in == 0 && thisblock->data.block.stack_level != 0))
    {
      struct label_chain *chain;
      for (chain = thisblock->data.block.label_chain; chain; chain = chain->next)
 {
   ((chain->label)->decl.bit_field_flag) = 1;
   if (((chain->label)->common.addressable_flag))
     error ("%Jlabel '%D' used before containing binding contour",
     chain->label, chain->label);
 }
    }
  if (thisblock->data.block.stack_level != 0
      || thisblock->data.block.cleanups != 0)
    {
      int reachable;
      rtx insn;
      insn = get_last_insn ();
      if (((enum rtx_code) (insn)->code) == NOTE)
 insn = prev_nonnote_insn (insn);
      reachable = (! insn || ((enum rtx_code) (insn)->code) != BARRIER);
      expand_cleanups (thisblock->data.block.cleanups, 0, reachable);
      if (reachable)
 do_pending_stack_adjust ();
      if (reachable && thisblock->data.block.stack_level != 0)
 {
   emit_stack_restore (thisblock->next ? SAVE_BLOCK : SAVE_FUNCTION,
         thisblock->data.block.stack_level, (rtx) 0);
   if (cfun->nonlocal_goto_save_area)
     update_nonlocal_goto_save_area ();
 }
      fixup_gotos (thisblock,
     thisblock->data.block.stack_level,
     thisblock->data.block.cleanups,
     thisblock->data.block.first_insn,
     dont_jump_in);
    }
  (((thisblock->data.block.first_insn)->u.fld[5]).rtint) = NOTE_INSN_DELETED;
  (cfun->x_target_temp_slot_level) = thisblock->data.block.block_target_temp_slot_level;
  (cfun->stmt->x_stack_block_stack) = thisblock->data.block.innermost_stack_block;
  do { struct nesting *target = (cfun->stmt->x_block_stack); struct nesting *this; do { this = (cfun->stmt->x_nesting_stack); if ((cfun->stmt->x_cond_stack) == this) (cfun->stmt->x_cond_stack) = (cfun->stmt->x_cond_stack)->next; if ((cfun->stmt->x_block_stack) == this) (cfun->stmt->x_block_stack) = (cfun->stmt->x_block_stack)->next; if ((cfun->stmt->x_stack_block_stack) == this) (cfun->stmt->x_stack_block_stack) = (cfun->stmt->x_stack_block_stack)->next; if ((cfun->stmt->x_case_stack) == this) (cfun->stmt->x_case_stack) = (cfun->stmt->x_case_stack)->next; (cfun->stmt->x_nesting_depth) = (cfun->stmt->x_nesting_stack)->depth - 1; (cfun->stmt->x_nesting_stack) = this->all; } while (this != target); } while (0);
  pop_temp_slots ();
}
void
save_stack_pointer (void)
{
  struct nesting *thisblock = (cfun->stmt->x_block_stack);
  if (thisblock->data.block.stack_level == 0)
    {
      emit_stack_save (thisblock->next ? SAVE_BLOCK : SAVE_FUNCTION,
         &thisblock->data.block.stack_level,
         thisblock->data.block.first_insn);
      (cfun->stmt->x_stack_block_stack) = thisblock;
    }
}
void
expand_decl (tree decl)
{
  tree type;
  type = ((decl)->common.type);
  if (((enum tree_code) (decl)->common.code) == CONST_DECL)
    {
      ((decl)->decl.mode) = ((type)->type.mode);
      ((decl)->decl.u1.a.align) = ((type)->type.align);
      ((decl)->decl.size) = ((type)->type.size);
      ((decl)->decl.size_unit) = ((type)->type.size_unit);
      return;
    }
  if (((enum tree_code) (decl)->common.code) != VAR_DECL)
    return;
  if (((decl)->common.static_flag) || ((decl)->decl.external_flag))
    return;
  if (type == global_trees[TI_ERROR_MARK])
    set_decl_rtl (decl, gen_rtx_MEM (BLKmode, (const_int_rtx[64])));
  else if (((decl)->decl.size) == 0)
    {
      rtx x;
      if (((decl)->decl.initial) == 0)
 x = gen_rtx_MEM (BLKmode, (const_int_rtx[64]));
      else
 x = gen_rtx_MEM (BLKmode, gen_reg_rtx ((0 ? DImode : SImode)));
      set_mem_attributes (x, decl, 1);
      set_decl_rtl (decl, x);
    }
  else if (use_register_for_decl (decl))
    {
      int unsignedp = ((type)->common.unsigned_flag);
      enum machine_mode reg_mode
 = promote_mode (type, ((decl)->decl.mode), &unsignedp, 0);
      set_decl_rtl (decl, gen_reg_rtx (reg_mode));
      if (!((decl)->decl.artificial_flag))
 {
   mark_user_reg (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)));
   if ((((enum tree_code) (type)->common.code) == POINTER_TYPE || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE))
     mark_reg_pointer (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)),
         ((((((decl)->common.type))->common.type))->type.align));
 }
      maybe_set_unchanging (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)), decl);
    }
  else if (((enum tree_code) (((decl)->decl.size_unit))->common.code) == INTEGER_CST
    && ! (flag_stack_check && ! 0
   && 0 < compare_tree_int (((decl)->decl.size_unit),
       ((4096 - (0 ? 8 : 4)) / 100))))
    {
      rtx oldaddr = 0;
      rtx addr;
      rtx x;
      if (((decl)->decl.rtl != ((void *)0)))
 {
   if (!(((enum rtx_code) (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->code) == MEM)
       || !(((enum rtx_code) ((((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1))->code) == REG))
     abort ();
   oldaddr = (((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1);
 }
      ((decl)->decl.u1.a.align) = (((decl)->decl.mode) == BLKmode ? 128
      : ((unsigned short) (((unsigned short) mode_size[((decl)->decl.mode)]) * 8)));
      ((decl)->decl.user_align) = 0;
      x = assign_temp (decl, 1, 1, 1);
      set_mem_attributes (x, decl, 1);
      set_decl_rtl (decl, x);
      if (oldaddr)
 {
   addr = force_operand ((((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1), oldaddr);
   if (addr != oldaddr)
     emit_move_insn (oldaddr, addr);
 }
    }
  else
    {
      rtx address, size, x;
      do_pending_stack_adjust ();
      save_stack_pointer ();
      size = expand_expr (((decl)->decl.size_unit), (rtx) 0, VOIDmode, 0);
      free_temp_slots ();
      address = allocate_dynamic_stack_space (size, (rtx) 0,
           ((((decl)->common.type))->type.align));
      x = gen_rtx_MEM (((decl)->decl.mode), address);
      set_mem_attributes (x, decl, 1);
      set_decl_rtl (decl, x);
      ((decl)->decl.u1.a.align) = (8 * (0 ? 8 : 4));
      ((decl)->decl.user_align) = 0;
    }
}
void
expand_stack_alloc (tree alloc, tree t_size)
{
  rtx address, dest, size;
  tree var, type;
  if (((enum tree_code) (alloc)->common.code) != ADDR_EXPR)
    abort ();
  var = ((alloc)->exp.operands[0]);
  if (((enum tree_code) (var)->common.code) != VAR_DECL)
    abort ();
  type = ((var)->common.type);
  size = expand_expr (t_size, (rtx) 0, VOIDmode, 0);
  free_temp_slots ();
  address = (((((var)->decl.rtl ? (var)->decl.rtl : (make_decl_rtl (var, ((void *)0)), (var)->decl.rtl)))->u.fld[0]).rtx1);
  dest = allocate_dynamic_stack_space (size, address, ((type)->type.align));
  if (dest != address)
    emit_move_insn (address, dest);
  ((var)->decl.u1.a.align) = (8 * (0 ? 8 : 4));
  ((var)->decl.user_align) = 0;
}
rtx
expand_stack_save (void)
{
  rtx ret = (rtx) 0;
  do_pending_stack_adjust ();
  emit_stack_save (SAVE_BLOCK, &ret, (rtx) 0);
  return ret;
}
void
expand_stack_restore (tree var)
{
  rtx sa = ((var)->decl.rtl ? (var)->decl.rtl : (make_decl_rtl (var, ((void *)0)), (var)->decl.rtl));
  emit_stack_restore (SAVE_BLOCK, sa, (rtx) 0);
}
void
expand_decl_init (tree decl)
{
  int was_used = ((decl)->common.used_flag);
  if (((enum tree_code) (decl)->common.code) == CONST_DECL
      || ((decl)->common.static_flag))
    return;
  push_temp_slots ();
  if (((decl)->decl.initial) == global_trees[TI_ERROR_MARK])
    {
      enum tree_code code = ((enum tree_code) (((decl)->common.type))->common.code);
      if (code == INTEGER_TYPE || code == REAL_TYPE || code == ENUMERAL_TYPE
   || code == POINTER_TYPE || code == REFERENCE_TYPE)
 expand_assignment (decl, convert (((decl)->common.type), global_trees[TI_INTEGER_ZERO]),
      0);
      emit_queue ();
    }
  else if (((decl)->decl.initial) && ((enum tree_code) (((decl)->decl.initial))->common.code) != TREE_LIST)
    {
      emit_line_note (((decl)->decl.locus));
      expand_assignment (decl, ((decl)->decl.initial), 0);
      emit_queue ();
    }
  ((decl)->common.used_flag) = was_used;
  preserve_temp_slots ((rtx) 0);
  free_temp_slots ();
  pop_temp_slots ();
}
int
expand_decl_cleanup (tree decl, tree cleanup)
{
  struct nesting *thisblock;
  if (cfun == 0 || (cfun->stmt->x_block_stack) == 0)
    return 0;
  thisblock = (cfun->stmt->x_block_stack);
  if (cleanup != 0)
    {
      tree t;
      rtx seq;
      tree *cleanups = &thisblock->data.block.cleanups;
      int cond_context = conditional_context ();
      if (cond_context)
 {
   rtx flag = gen_reg_rtx (word_mode);
   rtx set_flag_0;
   tree cond;
   start_sequence ();
   emit_move_insn (flag, (const_int_rtx[64]));
   set_flag_0 = get_insns ();
   end_sequence ();
   thisblock->data.block.last_unconditional_cleanup
     = emit_insn_after (set_flag_0,
    thisblock->data.block.last_unconditional_cleanup);
   emit_move_insn (flag, (const_int_rtx[64 +1]));
   cond = build_decl_stat (VAR_DECL,(tree) ((void *)0),lang_hooks.types.type_for_mode (word_mode, 1) )
                                                      ;
   set_decl_rtl (cond, flag);
   cleanup = build (COND_EXPR, global_trees[TI_VOID_TYPE],
      lang_hooks.truthvalue_conversion (cond),
      cleanup, global_trees[TI_INTEGER_ZERO]);
   cleanup = fold (cleanup);
   cleanups = &thisblock->data.block.cleanups;
 }
      cleanup = unsave_expr (cleanup);
      t = *cleanups = tree_cons_stat (decl,cleanup,*cleanups );
      if (! cond_context)
 (cfun->stmt->x_stack_block_stack) = thisblock;
      if (cond_context)
 {
   start_sequence ();
 }
      if (! using_eh_for_cleanups_p)
 ((t)->common.addressable_flag) = 1;
      else
 expand_eh_region_start ();
      if (cond_context)
 {
   seq = get_insns ();
   end_sequence ();
   if (seq)
     thisblock->data.block.last_unconditional_cleanup
       = emit_insn_after (seq,
     thisblock->data.block.last_unconditional_cleanup);
 }
      else
 {
   thisblock->data.block.last_unconditional_cleanup
     = get_last_insn ();
   emit_note (NOTE_INSN_DELETED);
 }
    }
  return 1;
}
int
expand_decl_cleanup_eh (tree decl, tree cleanup, int eh_only)
{
  int ret = expand_decl_cleanup (decl, cleanup);
  if (cleanup && ret)
    {
      tree node = (cfun->stmt->x_block_stack)->data.block.cleanups;
      ((node)->common.static_flag) = eh_only;
    }
  return ret;
}
void
expand_anon_union_decl (tree decl, tree cleanup, tree decl_elts)
{
  struct nesting *thisblock = cfun == 0 ? 0 : (cfun->stmt->x_block_stack);
  rtx x;
  tree t;
  for (t = decl_elts; t; t = ((t)->common.chain))
    if (((((t)->list.value1))->common.addressable_flag))
      {
 ((decl)->common.addressable_flag) = 1;
 break;
      }
  expand_decl (decl);
  expand_decl_cleanup (decl, cleanup);
  x = ((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl));
  for (t = decl_elts; t; t = ((t)->common.chain))
    {
      tree decl_elt = ((t)->list.value1);
      tree cleanup_elt = ((t)->list.purpose);
      enum machine_mode mode = ((((decl_elt)->common.type))->type.mode);
      if (((decl_elt)->common.used_flag))
 ((decl)->common.used_flag) = 1;
      ((decl_elt)->decl.u1.a.align) = ((decl)->decl.u1.a.align);
      ((decl_elt)->decl.user_align) = ((decl)->decl.user_align);
      if (mode == BLKmode && ((decl)->decl.mode) != BLKmode)
 ((decl_elt)->decl.mode) = mode
   = mode_for_size_tree (((decl_elt)->decl.size), MODE_INT, 1);
      if ((((enum rtx_code) (x)->code) == MEM))
 {
   if (mode == ((enum machine_mode) (x)->mode))
     set_decl_rtl (decl_elt, x);
   else
     set_decl_rtl (decl_elt, adjust_address_1 (x, mode, 0, 0, 1));
 }
      else if ((((enum rtx_code) (x)->code) == REG))
 {
   if (mode == ((enum machine_mode) (x)->mode))
     set_decl_rtl (decl_elt, x);
   else
     set_decl_rtl (decl_elt, gen_lowpart_SUBREG (mode, x));
 }
      else
 abort ();
      if (cleanup != 0)
 thisblock->data.block.cleanups
   = tree_cons_stat (decl_elt,cleanup_elt,thisblock->data.block.cleanups )
                                        ;
    }
}
static void
expand_cleanups (tree list, int in_fixup, int reachable)
{
  tree tail;
  for (tail = list; tail; tail = ((tail)->common.chain))
    if (((enum tree_code) (((tail)->list.value1))->common.code) == TREE_LIST)
      expand_cleanups (((tail)->list.value1), in_fixup, reachable);
    else
      {
 if (! in_fixup && using_eh_for_cleanups_p)
   expand_eh_region_end_cleanup (((tail)->list.value1));
 if (reachable && !((tail)->common.static_flag))
   {
     if (in_fixup && using_eh_for_cleanups_p)
       {
  expand_eh_region_start ();
  expand_expr (((tail)->list.value1), (const_int_rtx[64]), VOIDmode, 0);
  expand_eh_region_end_fixup (((tail)->list.value1));
       }
     else
       expand_expr (((tail)->list.value1), (const_int_rtx[64]), VOIDmode, 0);
     free_temp_slots ();
   }
      }
}
void
start_cleanup_deferral (void)
{
  if ((cfun->stmt->x_block_stack))
    ++(cfun->stmt->x_block_stack)->data.block.conditional_code;
}
void
end_cleanup_deferral (void)
{
  if ((cfun->stmt->x_block_stack))
    --(cfun->stmt->x_block_stack)->data.block.conditional_code;
}
tree
last_cleanup_this_contour (void)
{
  if ((cfun->stmt->x_block_stack) == 0)
    return 0;
  return (cfun->stmt->x_block_stack)->data.block.cleanups;
}
int
containing_blocks_have_cleanups_or_stack_level (void)
{
  struct nesting *block;
  for (block = (cfun->stmt->x_block_stack); block; block = block->next)
    if (block->data.block.stack_level != 0
        || block->data.block.cleanups != 0)
      return 1;
  return 0;
}
int
any_pending_cleanups (void)
{
  struct nesting *block;
  if (cfun == ((void *)0) || cfun->stmt == ((void *)0) || (cfun->stmt->x_block_stack) == 0)
    return 0;
  if ((cfun->stmt->x_block_stack)->data.block.cleanups != ((void *)0))
    return 1;
  if ((cfun->stmt->x_block_stack)->data.block.outer_cleanups == 0)
    return 0;
  for (block = (cfun->stmt->x_block_stack)->next; block; block = block->next)
    if (block->data.block.cleanups != 0)
      return 1;
  return 0;
}
void
expand_start_case (int exit_flag, tree expr, tree type,
     const char *printname)
{
  struct nesting *thiscase = ggc_alloc_stat (sizeof (struct nesting) );
  thiscase->desc = CASE_NESTING;
  thiscase->next = (cfun->stmt->x_case_stack);
  thiscase->all = (cfun->stmt->x_nesting_stack);
  thiscase->depth = ++(cfun->stmt->x_nesting_depth);
  thiscase->exit_label = exit_flag ? gen_label_rtx () : 0;
  thiscase->data.case_stmt.case_list = 0;
  thiscase->data.case_stmt.index_expr = expr;
  thiscase->data.case_stmt.nominal_type = type;
  thiscase->data.case_stmt.default_label = 0;
  thiscase->data.case_stmt.printname = printname;
  thiscase->data.case_stmt.line_number_status = force_line_numbers ();
  (cfun->stmt->x_case_stack) = thiscase;
  (cfun->stmt->x_nesting_stack) = thiscase;
  do_pending_stack_adjust ();
  emit_queue ();
  if (((enum rtx_code) (get_last_insn ())->code) != NOTE)
    emit_note (NOTE_INSN_DELETED);
  thiscase->data.case_stmt.start = get_last_insn ();
  start_cleanup_deferral ();
}
int
pushcase (tree value1, tree (*converter) (tree, tree), tree label,
   tree *duplicate)
{
  tree index_type;
  tree nominal_type;
  if (! ((cfun->stmt->x_case_stack) && (cfun->stmt->x_case_stack)->data.case_stmt.start))
    return 1;
  if ((cfun->stmt->x_stack_block_stack)
      && (cfun->stmt->x_stack_block_stack)->depth > (cfun->stmt->x_case_stack)->depth)
    return 5;
  index_type = (((cfun->stmt->x_case_stack)->data.case_stmt.index_expr)->common.type);
  nominal_type = (cfun->stmt->x_case_stack)->data.case_stmt.nominal_type;
  if (index_type == global_trees[TI_ERROR_MARK])
    return 0;
  if (value1 != 0)
    value1 = (*converter) (nominal_type, value1);
  if (value1 != 0
      && (((value1)->common.static_flag)
   || ! int_fits_type_p (value1, index_type)))
    return 3;
  return add_case_node (value1, value1, label, duplicate, 0);
}
int
pushcase_range (tree value11, tree value12, tree (*converter) (tree, tree),
  tree label, tree *duplicate)
{
  tree index_type;
  tree nominal_type;
  if (! ((cfun->stmt->x_case_stack) && (cfun->stmt->x_case_stack)->data.case_stmt.start))
    return 1;
  if ((cfun->stmt->x_stack_block_stack)
      && (cfun->stmt->x_stack_block_stack)->depth > (cfun->stmt->x_case_stack)->depth)
    return 5;
  index_type = (((cfun->stmt->x_case_stack)->data.case_stmt.index_expr)->common.type);
  nominal_type = (cfun->stmt->x_case_stack)->data.case_stmt.nominal_type;
  if (index_type == global_trees[TI_ERROR_MARK])
    return 0;
  if (value1 == 0)
    value1 = ((index_type)->type.minval);
  if (value2 == 0)
    value2 = ((index_type)->type.maxval);
  if (value2 != 0 && tree_int_cst_lt (value2, value1))
    return 4;
  if (value2 == 0)
    value2 = ((nominal_type)->type.maxval);
  value1 = (*converter) (nominal_type, value1);
  value2 = (*converter) (nominal_type, value2);
  if (((value1)->common.static_flag)
      || ! int_fits_type_p (value1, index_type))
    return 3;
  if (((value2)->common.static_flag)
      || ! int_fits_type_p (value2, index_type))
    return 3;
  return add_case_node (value1, value2, label, duplicate, 0);
}
int
add_case_node (tree low, tree high, tree label, tree *duplicate,
        unsigned char dont_expand_label)
{
  struct case_node *p, **q, *r;
  if (!high)
    high = low;
  if (!high && !low)
    {
      if ((cfun->stmt->x_case_stack)->data.case_stmt.default_label != 0)
 {
   *duplicate = (cfun->stmt->x_case_stack)->data.case_stmt.default_label;
   return 2;
 }
      (cfun->stmt->x_case_stack)->data.case_stmt.default_label = label;
      if (!dont_expand_label)
        expand_label (label);
      return 0;
    }
  q = &(cfun->stmt->x_case_stack)->data.case_stmt.case_list;
  p = *q;
  while ((r = *q))
    {
      p = r;
      if (tree_int_cst_lt (high, p->low))
 q = &p->left;
      else if (tree_int_cst_lt (p->high, low))
 q = &p->right;
      else
 {
   *duplicate = p->code_label;
   return 2;
 }
    }
  r = ggc_alloc_stat (sizeof (struct case_node) );
  r->low = low;
  if (tree_int_cst_equal (low, high))
    r->high = r->low;
  else
    r->high = high;
  r->code_label = label;
  if (!dont_expand_label)
    expand_label (label);
  *q = r;
  r->parent = p;
  r->left = 0;
  r->right = 0;
  r->balance = 0;
  while (p)
    {
      struct case_node *s;
      if (r == p->left)
 {
   int b;
   if (! (b = p->balance))
     p->balance = -1;
   else if (b < 0)
     {
       if (r->balance < 0)
  {
    if ((p->left = s = r->right))
      s->parent = p;
    r->right = p;
    p->balance = 0;
    r->balance = 0;
    s = p->parent;
    p->parent = r;
    if ((r->parent = s))
      {
        if (s->left == p)
   s->left = r;
        else
   s->right = r;
      }
    else
      (cfun->stmt->x_case_stack)->data.case_stmt.case_list = r;
  }
       else
  {
    int b2;
    struct case_node *t = r->right;
    if ((p->left = s = t->right))
      s->parent = p;
    t->right = p;
    if ((r->right = s = t->left))
      s->parent = r;
    t->left = r;
    b = t->balance;
    b2 = b < 0;
    p->balance = b2;
    b2 = -b2 - b;
    r->balance = b2;
    t->balance = 0;
    s = p->parent;
    p->parent = t;
    r->parent = t;
    if ((t->parent = s))
      {
        if (s->left == p)
   s->left = t;
        else
   s->right = t;
      }
    else
      (cfun->stmt->x_case_stack)->data.case_stmt.case_list = t;
  }
       break;
     }
   else
     {
       p->balance = 0;
       break;
     }
 }
      else
 {
   int b;
   if (! (b = p->balance))
     p->balance++;
   else if (b > 0)
     {
       if (r->balance > 0)
  {
    if ((p->right = s = r->left))
      s->parent = p;
    r->left = p;
    p->balance = 0;
    r->balance = 0;
    s = p->parent;
    p->parent = r;
    if ((r->parent = s))
      {
        if (s->left == p)
   s->left = r;
        else
   s->right = r;
      }
    else
      (cfun->stmt->x_case_stack)->data.case_stmt.case_list = r;
  }
       else
  {
    int b2;
    struct case_node *t = r->left;
    if ((p->right = s = t->left))
      s->parent = p;
    t->left = p;
    if ((r->left = s = t->right))
      s->parent = r;
    t->right = r;
    b = t->balance;
    b2 = b < 0;
    r->balance = b2;
    b2 = -b2 - b;
    p->balance = b2;
    t->balance = 0;
    s = p->parent;
    p->parent = t;
    r->parent = t;
    if ((t->parent = s))
      {
        if (s->left == p)
   s->left = t;
        else
   s->right = t;
      }
    else
      (cfun->stmt->x_case_stack)->data.case_stmt.case_list = t;
  }
       break;
     }
   else
     {
       p->balance = 0;
       break;
     }
 }
      r = p;
      p = p->parent;
    }
  return 0;
}
struct case_bit_test
{
  long hi;
  long lo;
  rtx label;
  int bits;
};
static
unsigned char lshift_cheap_p (void)
{
  static unsigned char init = 0;
  static unsigned char cheap = 1;
  if (!init)
    {
      rtx reg = gen_rtx_REG (word_mode, 10000);
      int cost = rtx_cost (gen_rtx_fmt_ee (ASHIFT, (word_mode), ((const_int_rtx[64 +1])), (reg)), SET);
      cheap = cost < ((3) * 4);
      init = 1;
    }
  return cheap;
}
static int
case_bit_test_cmp (const void *p1, const void *p2)
{
  const struct case_bit_test *d1 = p1;
  const struct case_bit_test *d2 = p2;
  return d2->bits - d1->bits;
}
static void
emit_case_bit_tests (tree index_type, tree index_expr, tree minval,
       tree range, case_node_ptr nodes, rtx default_label)
{
  struct case_bit_test test[3];
  enum machine_mode mode;
  rtx expr, index, label;
  unsigned int i,j,lo,hi;
  struct case_node *n;
  unsigned int count;
  count = 0;
  for (n = nodes; n; n = n->right)
    {
      label = label_rtx (n->code_label);
      for (i = 0; i < count; i++)
 if (same_case_target_p (label, test[i].label))
   break;
      if (i == count)
 {
   if (count >= 3)
     abort ();
          test[i].hi = 0;
          test[i].lo = 0;
   test[i].label = label;
   test[i].bits = 1;
   count++;
 }
      else
        test[i].bits++;
      lo = tree_low_cst (fold (build (MINUS_EXPR, index_type,
          n->low, minval)), 1);
      hi = tree_low_cst (fold (build (MINUS_EXPR, index_type,
          n->high, minval)), 1);
      for (j = lo; j <= hi; j++)
        if (j >= (8 * 4))
   test[i].hi |= (long) 1 << (j - (8 * 4));
 else
   test[i].lo |= (long) 1 << j;
    }
  qsort (test, count, sizeof(*test), case_bit_test_cmp);
  index_expr = fold (build (MINUS_EXPR, index_type,
       convert (index_type, index_expr),
       convert (index_type, minval)));
  index = expand_expr (index_expr, (rtx) 0, VOIDmode, 0);
  emit_queue ();
  index = protect_from_queue (index, 0);
  do_pending_stack_adjust ();
  mode = ((index_type)->type.mode);
  expr = expand_expr (range, (rtx) 0, VOIDmode, 0);
  emit_cmp_and_jump_insns (index, expr, GTU, (rtx) 0, mode, 1,
      default_label);
  index = convert_to_mode (word_mode, index, 0);
  index = expand_binop (word_mode, (optab_table[OTI_ashl]), (const_int_rtx[64 +1]),
   index, (rtx) 0, 1, OPTAB_WIDEN);
  for (i = 0; i < count; i++)
    {
      expr = immed_double_const (test[i].lo, test[i].hi, word_mode);
      expr = expand_binop (word_mode, (optab_table[OTI_and]), index, expr,
      (rtx) 0, 1, OPTAB_WIDEN);
      emit_cmp_and_jump_insns (expr, (const_int_rtx[64]), NE, (rtx) 0,
          word_mode, 1, test[i].label);
    }
  emit_jump (default_label);
}
void
expand_end_case_type (tree orig_index, tree orig_type)
{
  tree minval = (tree) ((void *)0), maxval = (tree) ((void *)0), range = (tree) ((void *)0);
  rtx default_label = 0;
  struct case_node *n, *m;
  unsigned int count, uniq;
  rtx index;
  rtx table_label;
  int ncases;
  rtx *labelvec;
  int i;
  rtx before_case, end, lab;
  struct nesting *thiscase = (cfun->stmt->x_case_stack);
  tree index_expr, index_type;
  unsigned char exit_done = 0;
  int unsignedp;
  if (thiscase == ((void *)0))
    return;
  index_expr = thiscase->data.case_stmt.index_expr;
  index_type = ((index_expr)->common.type);
  unsignedp = ((index_type)->common.unsigned_flag);
  if (orig_type == ((void *)0))
    orig_type = ((orig_index)->common.type);
  do_pending_stack_adjust ();
  if (index_type != global_trees[TI_ERROR_MARK])
    {
      if (thiscase->data.case_stmt.default_label == 0)
 {
   thiscase->data.case_stmt.default_label
     = build_decl_stat (LABEL_DECL,(tree) ((void *)0),(tree) ((void *)0) );
          if (thiscase->exit_label)
     {
       set_decl_rtl (thiscase->data.case_stmt.default_label, thiscase->exit_label)
                            ;
       exit_done = 1;
     }
   expand_label (thiscase->data.case_stmt.default_label);
 }
      default_label = label_rtx (thiscase->data.case_stmt.default_label);
      before_case = get_last_insn ();
      if (thiscase->data.case_stmt.case_list
   && thiscase->data.case_stmt.case_list->left)
 thiscase->data.case_stmt.case_list
   = case_tree2list (thiscase->data.case_stmt.case_list, 0);
      group_case_nodes (thiscase->data.case_stmt.case_list);
      strip_default_case_nodes (&thiscase->data.case_stmt.case_list,
    default_label);
      uniq = 0;
      count = 0;
      for (n = thiscase->data.case_stmt.case_list; n; n = n->right)
 {
   if (((enum tree_code) (n->low)->common.code) != INTEGER_CST)
     abort ();
   if (((enum tree_code) (n->high)->common.code) != INTEGER_CST)
     abort ();
   n->low = convert (index_type, n->low);
   n->high = convert (index_type, n->high);
   if (count++ == 0)
     {
       minval = n->low;
       maxval = n->high;
     }
   else
     {
       if (((((n->low)->int_cst.int_cst).high) < (((minval)->int_cst.int_cst).high) || ((((n->low)->int_cst.int_cst).high) == (((minval)->int_cst.int_cst).high) && (((n->low)->int_cst.int_cst).low) < (((minval)->int_cst.int_cst).low))))
  minval = n->low;
       if (((((maxval)->int_cst.int_cst).high) < (((n->high)->int_cst.int_cst).high) || ((((maxval)->int_cst.int_cst).high) == (((n->high)->int_cst.int_cst).high) && (((maxval)->int_cst.int_cst).low) < (((n->high)->int_cst.int_cst).low))))
  maxval = n->high;
     }
   if (! tree_int_cst_equal (n->low, n->high))
     count++;
          uniq++;
   lab = label_rtx (n->code_label);
          for (m = thiscase->data.case_stmt.case_list; m != n; m = m->right)
            if (same_case_target_p (label_rtx (m->code_label), lab))
              {
                uniq--;
                break;
              }
 }
      if (count != 0)
 range = fold (build (MINUS_EXPR, index_type, maxval, minval));
      end_cleanup_deferral ();
      if (count == 0)
 {
   expand_expr (index_expr, (const_int_rtx[64]), VOIDmode, 0);
   emit_queue ();
   emit_jump (default_label);
 }
      else if (((optab_table[OTI_ashl])->handlers[word_mode].insn_code != CODE_FOR_nothing)
        && ! ((index_expr)->common.constant_flag)
        && compare_tree_int (range, ((unsigned short) (((unsigned short) mode_size[word_mode]) * 8))) < 0
        && compare_tree_int (range, 0) > 0
        && lshift_cheap_p ()
        && ((uniq == 1 && count >= 3)
     || (uniq == 2 && count >= 5)
     || (uniq == 3 && count >= 6)))
 {
   if (compare_tree_int (minval, 0) > 0
       && compare_tree_int (maxval, ((unsigned short) (((unsigned short) mode_size[word_mode]) * 8))) < 0)
     {
       minval = global_trees[TI_INTEGER_ZERO];
       range = maxval;
     }
   emit_case_bit_tests (index_type, index_expr, minval, range,
          thiscase->data.case_stmt.case_list,
          default_label);
 }
      else if (count < case_values_threshold ()
        || compare_tree_int (range,
        (optimize_size ? 3 : 10) * count) > 0
        || compare_tree_int (range, 0) < 0
        || ((index_expr)->common.constant_flag)
        || (!0 && !1))
 {
   index = expand_expr (index_expr, (rtx) 0, VOIDmode, 0);
   if (mode_class[((enum machine_mode) (index)->mode)] == MODE_INT
       && ! have_insn_for (COMPARE, ((enum machine_mode) (index)->mode)))
     {
       enum machine_mode wider_mode;
       for (wider_mode = ((enum machine_mode) (index)->mode); wider_mode != VOIDmode;
     wider_mode = mode_wider[wider_mode])
  if (have_insn_for (COMPARE, wider_mode))
    {
      index = convert_to_mode (wider_mode, index, unsignedp);
      break;
    }
     }
   emit_queue ();
   do_pending_stack_adjust ();
   index = protect_from_queue (index, 0);
   if ((((enum rtx_code) (index)->code) == MEM))
     index = copy_to_reg (index);
   if (((enum rtx_code) (index)->code) == CONST_INT
       || ((enum tree_code) (index_expr)->common.code) == INTEGER_CST)
     {
       if (((enum tree_code) (index_expr)->common.code) != INTEGER_CST)
  {
    index_expr
      = build_int_2_wide ((unsigned long) (((index)->u.hwint[0])), (long) (unsignedp || ((index)->u.hwint[0]) >= 0 ? 0 : -1))
                                                 ;
    index_expr = convert (index_type, index_expr);
  }
       for (n = thiscase->data.case_stmt.case_list; n; n = n->right)
  if (! tree_int_cst_lt (index_expr, n->low)
      && ! tree_int_cst_lt (n->high, index_expr))
    break;
       if (n)
  emit_jump (label_rtx (n->code_label));
       else
  emit_jump (default_label);
     }
   else
     {
       use_cost_table
  = (((enum tree_code) (orig_type)->common.code) != ENUMERAL_TYPE
     && estimate_case_costs (thiscase->data.case_stmt.case_list));
       balance_case_nodes (&thiscase->data.case_stmt.case_list, ((void *)0));
       emit_case_nodes (index, thiscase->data.case_stmt.case_list,
          default_label, index_type);
       emit_jump_if_reachable (default_label);
     }
 }
      else
 {
   table_label = gen_label_rtx ();
   if (! try_casesi (index_type, index_expr, minval, range,
       table_label, default_label))
     {
       index_type = thiscase->data.case_stmt.nominal_type;
       if (! optimize_size
    && compare_tree_int (minval, 0) > 0
    && compare_tree_int (minval, 3) < 0)
  {
    minval = global_trees[TI_INTEGER_ZERO];
    range = maxval;
  }
       if (! try_tablejump (index_type, index_expr, minval, range,
       table_label, default_label))
  abort ();
     }
   ncases = tree_low_cst (range, 0) + 1;
   labelvec = C_alloca(ncases * sizeof (rtx));
   memset (labelvec, 0, ncases * sizeof (rtx));
   for (n = thiscase->data.case_stmt.case_list; n; n = n->right)
     {
       long i_low
  = tree_low_cst (fold (build (MINUS_EXPR, index_type,
          n->low, minval)), 1);
       long i_high
  = tree_low_cst (fold (build (MINUS_EXPR, index_type,
          n->high, minval)), 1);
       long i;
       for (i = i_low; i <= i_high; i ++)
  labelvec[i]
    = gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (label_rtx (n->code_label)));
     }
   for (i = 0; i < ncases; i++)
     if (labelvec[i] == 0)
       labelvec[i] = gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (default_label));
   emit_label (table_label);
   if (0 || flag_pic)
     emit_jump_insn (gen_rtx_fmt_eEee0 (ADDR_DIFF_VEC, ((!0 || flag_pic ? SImode : DImode)), (gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (table_label))), (gen_rtvec_v (ncases, labelvec)), ((const_int_rtx[64])), ((const_int_rtx[64])))
                                );
   else
     emit_jump_insn (gen_rtx_fmt_E (ADDR_VEC, ((!0 || flag_pic ? SImode : DImode)), (gen_rtvec_v (ncases, labelvec)))
                                          );
   emit_barrier ();
 }
      before_case = (((before_case)->u.fld[2]).rtx1);
      end = get_last_insn ();
      if (squeeze_notes (&before_case, &end))
 abort ();
      reorder_insns (before_case, end,
       thiscase->data.case_stmt.start);
    }
  else
    end_cleanup_deferral ();
  if (thiscase->exit_label && !exit_done)
    emit_label (thiscase->exit_label);
  do { struct nesting *target = (cfun->stmt->x_case_stack); struct nesting *this; do { this = (cfun->stmt->x_nesting_stack); if ((cfun->stmt->x_cond_stack) == this) (cfun->stmt->x_cond_stack) = (cfun->stmt->x_cond_stack)->next; if ((cfun->stmt->x_block_stack) == this) (cfun->stmt->x_block_stack) = (cfun->stmt->x_block_stack)->next; if ((cfun->stmt->x_stack_block_stack) == this) (cfun->stmt->x_stack_block_stack) = (cfun->stmt->x_stack_block_stack)->next; if ((cfun->stmt->x_case_stack) == this) (cfun->stmt->x_case_stack) = (cfun->stmt->x_case_stack)->next; (cfun->stmt->x_nesting_depth) = (cfun->stmt->x_nesting_stack)->depth - 1; (cfun->stmt->x_nesting_stack) = this->all; } while (this != target); } while (0);
  free_temp_slots ();
}
static struct case_node *
case_tree2list (struct case_node *node, struct case_node *right)
{
  struct case_node *left;
  if (node->right)
    right = case_tree2list (node->right, right);
  node->right = right;
  if ((left = node->left))
    {
      node->left = 0;
      return case_tree2list (left, node);
    }
  return node;
}
static void
do_jump_if_equal (rtx op1, rtx op2, rtx label, int unsignedp)
{
  if (((enum rtx_code) (op1)->code) == CONST_INT && ((enum rtx_code) (op2)->code) == CONST_INT)
    {
      if (op1 == op2)
 emit_jump (label);
    }
  else
    emit_cmp_and_jump_insns (op1, op2, EQ, (rtx) 0,
        (((enum machine_mode) (op1)->mode) == VOIDmode
        ? ((enum machine_mode) (op2)->mode) : ((enum machine_mode) (op1)->mode)),
        unsignedp, label);
}
static int
estimate_case_costs (case_node_ptr node)
{
  tree min_ascii = global_trees[TI_INTEGER_MINUS_ONE];
  tree max_ascii = convert (((node->high)->common.type), build_int_2_wide ((unsigned long) (127), (long) (0)));
  case_node_ptr n;
  int i;
  if (! cost_table_initialized)
    {
      cost_table_initialized = 1;
      for (i = 0; i < 128; i++)
 {
   if ((_sch_istable[(i) & 0xff] & (unsigned short)(_sch_isalnum)))
     cost_table_[(unsigned long) ((i) + 1)] = 16;
   else if ((_sch_istable[(i) & 0xff] & (unsigned short)(_sch_ispunct)))
     cost_table_[(unsigned long) ((i) + 1)] = 8;
   else if ((_sch_istable[(i) & 0xff] & (unsigned short)(_sch_iscntrl)))
     cost_table_[(unsigned long) ((i) + 1)] = -1;
 }
      cost_table_[(unsigned long) ((' ') + 1)] = 8;
      cost_table_[(unsigned long) (('\t') + 1)] = 4;
      cost_table_[(unsigned long) (('\0') + 1)] = 4;
      cost_table_[(unsigned long) (('\n') + 1)] = 2;
      cost_table_[(unsigned long) (('\f') + 1)] = 1;
      cost_table_[(unsigned long) (('\v') + 1)] = 1;
      cost_table_[(unsigned long) (('\b') + 1)] = 1;
    }
  for (n = node; n; n = n->right)
    {
      if ((((((n->low)->int_cst.int_cst).high) < (((min_ascii)->int_cst.int_cst).high) || ((((n->low)->int_cst.int_cst).high) == (((min_ascii)->int_cst.int_cst).high) && (((n->low)->int_cst.int_cst).low) < (((min_ascii)->int_cst.int_cst).low)))) || ((((max_ascii)->int_cst.int_cst).high) < (((n->high)->int_cst.int_cst).high) || ((((max_ascii)->int_cst.int_cst).high) == (((n->high)->int_cst.int_cst).high) && (((max_ascii)->int_cst.int_cst).low) < (((n->high)->int_cst.int_cst).low))))
 return 0;
      for (i = (long) (((n->low)->int_cst.int_cst).low);
    i <= (long) (((n->high)->int_cst.int_cst).low); i++)
 if (cost_table_[(unsigned long) ((i) + 1)] < 0)
   return 0;
    }
  return 1;
}
static unsigned char
same_case_target_p (rtx l1, rtx l2)
{
  return l1 == l2;
}
static void
strip_default_case_nodes (case_node_ptr *prev, rtx deflab)
{
  case_node_ptr ptr;
  while (*prev)
    {
      ptr = *prev;
      if (same_case_target_p (label_rtx (ptr->code_label), deflab))
 *prev = ptr->right;
      else
 prev = &ptr->right;
    }
}
static void
group_case_nodes (case_node_ptr head)
{
  case_node_ptr node = head;
  while (node)
    {
      rtx lab;
      case_node_ptr np = node;
      lab = label_rtx (node->code_label);
      while (((np = np->right) != 0)
      && same_case_target_p (label_rtx (np->code_label), lab)
      && tree_int_cst_equal (np->low,
        fold (build (PLUS_EXPR,
       ((node->high)->common.type),
       node->high,
       global_trees[TI_INTEGER_ONE])))
      && tree_int_cst_lt (node->high,
     fold (build (PLUS_EXPR,
           ((node->high)->common.type),
           node->high,
           global_trees[TI_INTEGER_ONE]))))
 {
   node->high = np->high;
 }
      node->right = np;
      node = np;
    }
}
static void
balance_case_nodes (case_node_ptr *head, case_node_ptr parent)
{
  case_node_ptr np;
  np = *head;
  if (np)
    {
      int cost = 0;
      int i = 0;
      int ranges = 0;
      case_node_ptr *npp;
      case_node_ptr left;
      while (np)
 {
   if (!tree_int_cst_equal (np->low, np->high))
     {
       ranges++;
       if (use_cost_table)
  cost += cost_table_[(unsigned long) (((((np->high)->int_cst.int_cst).low)) + 1)];
     }
   if (use_cost_table)
     cost += cost_table_[(unsigned long) (((((np->low)->int_cst.int_cst).low)) + 1)];
   i++;
   np = np->right;
 }
      if (i > 2)
 {
   npp = head;
   left = *npp;
   if (use_cost_table)
     {
       int n_moved = 0;
       i = (cost + 1) / 2;
       while (1)
  {
    if (!tree_int_cst_equal ((*npp)->low, (*npp)->high))
      i -= cost_table_[(unsigned long) ((((((*npp)->high)->int_cst.int_cst).low)) + 1)];
    i -= cost_table_[(unsigned long) ((((((*npp)->low)->int_cst.int_cst).low)) + 1)];
    if (i <= 0)
      break;
    npp = &(*npp)->right;
    n_moved += 1;
  }
       if (n_moved == 0)
  {
    np = *head;
    np->parent = parent;
    balance_case_nodes (&np->left, np);
    for (; np->right; np = np->right)
      np->right->parent = np;
    return;
  }
     }
   else if (i == 3)
     npp = &(*npp)->right;
   else
     {
       i = (i + ranges + 1) / 2;
       while (1)
  {
    if (!tree_int_cst_equal ((*npp)->low, (*npp)->high))
      i--;
    i--;
    if (i <= 0)
      break;
    npp = &(*npp)->right;
  }
     }
   *head = np = *npp;
   *npp = 0;
   np->parent = parent;
   np->left = left;
   balance_case_nodes (&np->left, np);
   balance_case_nodes (&np->right, np);
 }
      else
 {
   np = *head;
   np->parent = parent;
   for (; np->right; np = np->right)
     np->right->parent = np;
 }
    }
}
static int
node_has_low_bound (case_node_ptr node, tree index_type)
{
  tree low_minus_one;
  case_node_ptr pnode;
  if (tree_int_cst_equal (node->low, ((index_type)->type.minval)))
    return 1;
  if (node->left)
    return 0;
  low_minus_one = fold (build (MINUS_EXPR, ((node->low)->common.type),
          node->low, global_trees[TI_INTEGER_ONE]));
  if (! tree_int_cst_lt (low_minus_one, node->low))
    return 0;
  for (pnode = node->parent; pnode; pnode = pnode->parent)
    if (tree_int_cst_equal (low_minus_one, pnode->high))
      return 1;
  return 0;
}
static int
node_has_high_bound (case_node_ptr node, tree index_type)
{
  tree high_plus_one;
  case_node_ptr pnode;
  if (((index_type)->type.maxval) == ((void *)0))
    return 1;
  if (tree_int_cst_equal (node->high, ((index_type)->type.maxval)))
    return 1;
  if (node->right)
    return 0;
  high_plus_one = fold (build (PLUS_EXPR, ((node->high)->common.type),
          node->high, global_trees[TI_INTEGER_ONE]));
  if (! tree_int_cst_lt (node->high, high_plus_one))
    return 0;
  for (pnode = node->parent; pnode; pnode = pnode->parent)
    if (tree_int_cst_equal (high_plus_one, pnode->low))
      return 1;
  return 0;
}
static int
node_is_bounded (case_node_ptr node, tree index_type)
{
  return (node_has_low_bound (node, index_type)
   && node_has_high_bound (node, index_type));
}
static void
emit_jump_if_reachable (rtx label)
{
  if (((enum rtx_code) (get_last_insn ())->code) != BARRIER)
    emit_jump (label);
}
static void
emit_case_nodes (rtx index, case_node_ptr node, rtx default_label,
   tree index_type)
{
  int unsignedp = ((index_type)->common.unsigned_flag);
  enum machine_mode mode = ((enum machine_mode) (index)->mode);
  enum machine_mode imode = ((index_type)->type.mode);
  if (node_is_bounded (node, index_type))
    emit_jump (label_rtx (node->code_label));
  else if (tree_int_cst_equal (node->low, node->high))
    {
      do_jump_if_equal (index,
   convert_modes (mode, imode,
           expand_expr (node->low, (rtx) 0,
          VOIDmode, 0),
           unsignedp),
   label_rtx (node->code_label), unsignedp);
      if (node->right != 0 && node->left != 0)
 {
   if (node_is_bounded (node->right, index_type))
     {
       emit_cmp_and_jump_insns (index,
           convert_modes
           (mode, imode,
     expand_expr (node->high, (rtx) 0,
           VOIDmode, 0),
     unsignedp),
           GT, (rtx) 0, mode, unsignedp,
           label_rtx (node->right->code_label));
       emit_case_nodes (index, node->left, default_label, index_type);
     }
   else if (node_is_bounded (node->left, index_type))
     {
       emit_cmp_and_jump_insns (index,
           convert_modes
           (mode, imode,
     expand_expr (node->high, (rtx) 0,
           VOIDmode, 0),
     unsignedp),
           LT, (rtx) 0, mode, unsignedp,
           label_rtx (node->left->code_label));
       emit_case_nodes (index, node->right, default_label, index_type);
     }
   else if (tree_int_cst_equal (node->right->low, node->right->high)
     && node->right->left == 0
     && node->right->right == 0
     && tree_int_cst_equal (node->left->low, node->left->high)
     && node->left->left == 0
     && node->left->right == 0)
     {
       do_jump_if_equal (index,
    convert_modes (mode, imode,
            expand_expr (node->right->low,
           (rtx) 0,
           VOIDmode, 0),
            unsignedp),
    label_rtx (node->right->code_label),
    unsignedp);
       do_jump_if_equal (index,
    convert_modes (mode, imode,
            expand_expr (node->left->low,
           (rtx) 0,
           VOIDmode, 0),
            unsignedp),
    label_rtx (node->left->code_label),
    unsignedp);
     }
   else
     {
       tree test_label = build_decl_stat (LABEL_DECL,(tree) ((void *)0),(tree) ((void *)0) );
       emit_cmp_and_jump_insns (index,
           convert_modes
           (mode, imode,
     expand_expr (node->high, (rtx) 0,
           VOIDmode, 0),
     unsignedp),
           GT, (rtx) 0, mode, unsignedp,
           label_rtx (test_label));
       emit_case_nodes (index, node->left, default_label, index_type);
       emit_jump_if_reachable (default_label);
       expand_label (test_label);
       emit_case_nodes (index, node->right, default_label, index_type);
     }
 }
      else if (node->right != 0 && node->left == 0)
 {
   if (node->right->right || node->right->left
       || !tree_int_cst_equal (node->right->low, node->right->high))
     {
       if (!node_has_low_bound (node, index_type))
  {
    emit_cmp_and_jump_insns (index,
        convert_modes
        (mode, imode,
         expand_expr (node->high, (rtx) 0,
        VOIDmode, 0),
         unsignedp),
        LT, (rtx) 0, mode, unsignedp,
        default_label);
  }
       emit_case_nodes (index, node->right, default_label, index_type);
     }
   else
     do_jump_if_equal (index,
         convert_modes
         (mode, imode,
          expand_expr (node->right->low, (rtx) 0,
         VOIDmode, 0),
          unsignedp),
         label_rtx (node->right->code_label), unsignedp);
 }
      else if (node->right == 0 && node->left != 0)
 {
   if (node->left->left || node->left->right
       || !tree_int_cst_equal (node->left->low, node->left->high))
     {
       if (!node_has_high_bound (node, index_type))
  {
    emit_cmp_and_jump_insns (index,
        convert_modes
        (mode, imode,
         expand_expr (node->high, (rtx) 0,
        VOIDmode, 0),
         unsignedp),
        GT, (rtx) 0, mode, unsignedp,
        default_label);
  }
       emit_case_nodes (index, node->left, default_label, index_type);
     }
   else
     do_jump_if_equal (index,
         convert_modes
         (mode, imode,
          expand_expr (node->left->low, (rtx) 0,
         VOIDmode, 0),
          unsignedp),
         label_rtx (node->left->code_label), unsignedp);
 }
    }
  else
    {
      if (node->right != 0 && node->left != 0)
 {
   tree test_label = 0;
   if (node_is_bounded (node->right, index_type))
     emit_cmp_and_jump_insns (index,
         convert_modes
         (mode, imode,
          expand_expr (node->high, (rtx) 0,
         VOIDmode, 0),
          unsignedp),
         GT, (rtx) 0, mode, unsignedp,
         label_rtx (node->right->code_label));
   else
     {
       test_label = build_decl_stat (LABEL_DECL,(tree) ((void *)0),(tree) ((void *)0) );
       emit_cmp_and_jump_insns (index,
           convert_modes
           (mode, imode,
     expand_expr (node->high, (rtx) 0,
           VOIDmode, 0),
     unsignedp),
           GT, (rtx) 0, mode, unsignedp,
           label_rtx (test_label));
     }
   emit_cmp_and_jump_insns (index,
       convert_modes
       (mode, imode,
        expand_expr (node->low, (rtx) 0,
       VOIDmode, 0),
        unsignedp),
       GE, (rtx) 0, mode, unsignedp,
       label_rtx (node->code_label));
   emit_case_nodes (index, node->left, default_label, index_type);
   if (test_label)
     {
       emit_jump_if_reachable (default_label);
       expand_label (test_label);
       emit_case_nodes (index, node->right, default_label, index_type);
     }
 }
      else if (node->right != 0 && node->left == 0)
 {
   if (!node_has_low_bound (node, index_type))
     {
       emit_cmp_and_jump_insns (index,
           convert_modes
           (mode, imode,
     expand_expr (node->low, (rtx) 0,
           VOIDmode, 0),
     unsignedp),
           LT, (rtx) 0, mode, unsignedp,
           default_label);
     }
   emit_cmp_and_jump_insns (index,
       convert_modes
       (mode, imode,
        expand_expr (node->high, (rtx) 0,
       VOIDmode, 0),
        unsignedp),
       LE, (rtx) 0, mode, unsignedp,
       label_rtx (node->code_label));
   emit_case_nodes (index, node->right, default_label, index_type);
 }
      else if (node->right == 0 && node->left != 0)
 {
   if (!node_has_high_bound (node, index_type))
     {
       emit_cmp_and_jump_insns (index,
           convert_modes
           (mode, imode,
     expand_expr (node->high, (rtx) 0,
           VOIDmode, 0),
     unsignedp),
           GT, (rtx) 0, mode, unsignedp,
           default_label);
     }
   emit_cmp_and_jump_insns (index,
       convert_modes
       (mode, imode,
        expand_expr (node->low, (rtx) 0,
       VOIDmode, 0),
        unsignedp),
       GE, (rtx) 0, mode, unsignedp,
       label_rtx (node->code_label));
   emit_case_nodes (index, node->left, default_label, index_type);
 }
      else
 {
   int high_bound = node_has_high_bound (node, index_type);
   int low_bound = node_has_low_bound (node, index_type);
   if (!high_bound && low_bound)
     {
       emit_cmp_and_jump_insns (index,
           convert_modes
           (mode, imode,
     expand_expr (node->high, (rtx) 0,
           VOIDmode, 0),
     unsignedp),
           GT, (rtx) 0, mode, unsignedp,
           default_label);
     }
   else if (!low_bound && high_bound)
     {
       emit_cmp_and_jump_insns (index,
           convert_modes
           (mode, imode,
     expand_expr (node->low, (rtx) 0,
           VOIDmode, 0),
     unsignedp),
           LT, (rtx) 0, mode, unsignedp,
           default_label);
     }
   else if (!low_bound && !high_bound)
     {
       tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
       tree low = build1_stat (CONVERT_EXPR,type,node->low );
       tree high = build1_stat (CONVERT_EXPR,type,node->high );
       rtx low_rtx, new_index, new_bound;
       low_rtx = expand_expr (low, (rtx) 0, mode, 0);
       new_index = expand_simple_binop (mode, MINUS, index, low_rtx,
            (rtx) 0, unsignedp,
            OPTAB_WIDEN);
       new_bound = expand_expr (fold (build (MINUS_EXPR, type,
          high, low)),
           (rtx) 0, mode, 0);
       emit_cmp_and_jump_insns (new_index, new_bound, GT, (rtx) 0,
           mode, 1, default_label);
     }
   emit_jump (label_rtx (node->code_label));
 }
    }
}
void
gt_ggc_mx_goto_fixup (void *x_p)
{
  struct goto_fixup * const x = (struct goto_fixup *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_goto_fixup ((*x).next); } while (0);
      do { if ((*x).before_jump != ((void *)0)) gt_ggc_mx_rtx_def ((*x).before_jump); } while (0);
      do { if ((*x).target != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).target); } while (0);
      do { if ((*x).context != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).context); } while (0);
      do { if ((*x).target_rtl != ((void *)0)) gt_ggc_mx_rtx_def ((*x).target_rtl); } while (0);
      do { if ((*x).stack_level != ((void *)0)) gt_ggc_mx_rtx_def ((*x).stack_level); } while (0);
      do { if ((*x).cleanup_list_list != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).cleanup_list_list); } while (0);
    }
}
void
gt_ggc_mx_label_chain (void *x_p)
{
  struct label_chain * const x = (struct label_chain *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_label_chain ((*x).next); } while (0);
      do { if ((*x).label != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).label); } while (0);
    }
}
void
gt_ggc_mx_nesting (void *x_p)
{
  struct nesting * const x = (struct nesting *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).all != ((void *)0)) gt_ggc_mx_nesting ((*x).all); } while (0);
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_nesting ((*x).next); } while (0);
      do { if ((*x).exit_label != ((void *)0)) gt_ggc_mx_rtx_def ((*x).exit_label); } while (0);
      switch (((*x)).desc)
        {
        case COND_NESTING:
          do { if ((*x).data.cond.endif_label != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.cond.endif_label); } while (0);
          do { if ((*x).data.cond.next_label != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.cond.next_label); } while (0);
          break;
        case BLOCK_NESTING:
          do { if ((*x).data.block.stack_level != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.block.stack_level); } while (0);
          do { if ((*x).data.block.first_insn != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.block.first_insn); } while (0);
          do { if ((*x).data.block.innermost_stack_block != ((void *)0)) gt_ggc_mx_nesting ((*x).data.block.innermost_stack_block); } while (0);
          do { if ((*x).data.block.cleanups != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).data.block.cleanups); } while (0);
          do { if ((*x).data.block.outer_cleanups != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).data.block.outer_cleanups); } while (0);
          do { if ((*x).data.block.label_chain != ((void *)0)) gt_ggc_mx_label_chain ((*x).data.block.label_chain); } while (0);
          do { if ((*x).data.block.last_unconditional_cleanup != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.block.last_unconditional_cleanup); } while (0);
          break;
        case CASE_NESTING:
          do { if ((*x).data.case_stmt.start != ((void *)0)) gt_ggc_mx_rtx_def ((*x).data.case_stmt.start); } while (0);
          do { if ((*x).data.case_stmt.case_list != ((void *)0)) gt_ggc_mx_case_node ((*x).data.case_stmt.case_list); } while (0);
          do { if ((*x).data.case_stmt.default_label != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).data.case_stmt.default_label); } while (0);
          do { if ((*x).data.case_stmt.index_expr != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).data.case_stmt.index_expr); } while (0);
          do { if ((*x).data.case_stmt.nominal_type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).data.case_stmt.nominal_type); } while (0);
          break;
        default:
          break;
        }
    }
}
void
gt_ggc_mx_case_node (void *x_p)
{
  struct case_node * const x = (struct case_node *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).left != ((void *)0)) gt_ggc_mx_case_node ((*x).left); } while (0);
      do { if ((*x).right != ((void *)0)) gt_ggc_mx_case_node ((*x).right); } while (0);
      do { if ((*x).parent != ((void *)0)) gt_ggc_mx_case_node ((*x).parent); } while (0);
      do { if ((*x).low != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).low); } while (0);
      do { if ((*x).high != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).high); } while (0);
      do { if ((*x).code_label != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).code_label); } while (0);
    }
}
void
gt_ggc_mx_stmt_status (void *x_p)
{
  struct stmt_status * const x = (struct stmt_status *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).x_block_stack != ((void *)0)) gt_ggc_mx_nesting ((*x).x_block_stack); } while (0);
      do { if ((*x).x_stack_block_stack != ((void *)0)) gt_ggc_mx_nesting ((*x).x_stack_block_stack); } while (0);
      do { if ((*x).x_cond_stack != ((void *)0)) gt_ggc_mx_nesting ((*x).x_cond_stack); } while (0);
      do { if ((*x).x_case_stack != ((void *)0)) gt_ggc_mx_nesting ((*x).x_case_stack); } while (0);
      do { if ((*x).x_nesting_stack != ((void *)0)) gt_ggc_mx_nesting ((*x).x_nesting_stack); } while (0);
      do { if ((*x).x_goto_fixup_chain != ((void *)0)) gt_ggc_mx_goto_fixup ((*x).x_goto_fixup_chain); } while (0);
    }
}
void
gt_pch_nx_goto_fixup (void *x_p)
{
  struct goto_fixup * const x = (struct goto_fixup *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_10goto_fixup))
    {
      do { if ((*x).next != ((void *)0)) gt_pch_nx_goto_fixup ((*x).next); } while (0);
      do { if ((*x).before_jump != ((void *)0)) gt_pch_nx_rtx_def ((*x).before_jump); } while (0);
      do { if ((*x).target != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).target); } while (0);
      do { if ((*x).context != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).context); } while (0);
      do { if ((*x).target_rtl != ((void *)0)) gt_pch_nx_rtx_def ((*x).target_rtl); } while (0);
      do { if ((*x).stack_level != ((void *)0)) gt_pch_nx_rtx_def ((*x).stack_level); } while (0);
      do { if ((*x).cleanup_list_list != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).cleanup_list_list); } while (0);
    }
}
void
gt_pch_nx_label_chain (void *x_p)
{
  struct label_chain * const x = (struct label_chain *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_11label_chain))
    {
      do { if ((*x).next != ((void *)0)) gt_pch_nx_label_chain ((*x).next); } while (0);
      do { if ((*x).label != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).label); } while (0);
    }
}
void
gt_pch_nx_nesting (void *x_p)
{
  struct nesting * const x = (struct nesting *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_7nesting))
    {
      do { if ((*x).all != ((void *)0)) gt_pch_nx_nesting ((*x).all); } while (0);
      do { if ((*x).next != ((void *)0)) gt_pch_nx_nesting ((*x).next); } while (0);
      do { if ((*x).exit_label != ((void *)0)) gt_pch_nx_rtx_def ((*x).exit_label); } while (0);
      switch (((*x)).desc)
        {
        case COND_NESTING:
          do { if ((*x).data.cond.endif_label != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.cond.endif_label); } while (0);
          do { if ((*x).data.cond.next_label != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.cond.next_label); } while (0);
          break;
        case BLOCK_NESTING:
          do { if ((*x).data.block.stack_level != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.block.stack_level); } while (0);
          do { if ((*x).data.block.first_insn != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.block.first_insn); } while (0);
          do { if ((*x).data.block.innermost_stack_block != ((void *)0)) gt_pch_nx_nesting ((*x).data.block.innermost_stack_block); } while (0);
          do { if ((*x).data.block.cleanups != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).data.block.cleanups); } while (0);
          do { if ((*x).data.block.outer_cleanups != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).data.block.outer_cleanups); } while (0);
          do { if ((*x).data.block.label_chain != ((void *)0)) gt_pch_nx_label_chain ((*x).data.block.label_chain); } while (0);
          do { if ((*x).data.block.last_unconditional_cleanup != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.block.last_unconditional_cleanup); } while (0);
          break;
        case CASE_NESTING:
          do { if ((*x).data.case_stmt.start != ((void *)0)) gt_pch_nx_rtx_def ((*x).data.case_stmt.start); } while (0);
          do { if ((*x).data.case_stmt.case_list != ((void *)0)) gt_pch_nx_case_node ((*x).data.case_stmt.case_list); } while (0);
          do { if ((*x).data.case_stmt.default_label != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).data.case_stmt.default_label); } while (0);
          do { if ((*x).data.case_stmt.index_expr != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).data.case_stmt.index_expr); } while (0);
          do { if ((*x).data.case_stmt.nominal_type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).data.case_stmt.nominal_type); } while (0);
          gt_pch_n_S ((*x).data.case_stmt.printname);
          break;
        default:
          break;
        }
    }
}
void
gt_pch_nx_case_node (void *x_p)
{
  struct case_node * const x = (struct case_node *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_9case_node))
    {
      do { if ((*x).left != ((void *)0)) gt_pch_nx_case_node ((*x).left); } while (0);
      do { if ((*x).right != ((void *)0)) gt_pch_nx_case_node ((*x).right); } while (0);
      do { if ((*x).parent != ((void *)0)) gt_pch_nx_case_node ((*x).parent); } while (0);
      do { if ((*x).low != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).low); } while (0);
      do { if ((*x).high != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).high); } while (0);
      do { if ((*x).code_label != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).code_label); } while (0);
    }
}
void
gt_pch_nx_stmt_status (void *x_p)
{
  struct stmt_status * const x = (struct stmt_status *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_11stmt_status))
    {
      do { if ((*x).x_block_stack != ((void *)0)) gt_pch_nx_nesting ((*x).x_block_stack); } while (0);
      do { if ((*x).x_stack_block_stack != ((void *)0)) gt_pch_nx_nesting ((*x).x_stack_block_stack); } while (0);
      do { if ((*x).x_cond_stack != ((void *)0)) gt_pch_nx_nesting ((*x).x_cond_stack); } while (0);
      do { if ((*x).x_case_stack != ((void *)0)) gt_pch_nx_nesting ((*x).x_case_stack); } while (0);
      do { if ((*x).x_nesting_stack != ((void *)0)) gt_pch_nx_nesting ((*x).x_nesting_stack); } while (0);
      gt_pch_n_S ((*x).x_emit_locus.file);
      do { if ((*x).x_goto_fixup_chain != ((void *)0)) gt_pch_nx_goto_fixup ((*x).x_goto_fixup_chain); } while (0);
    }
}
void
gt_pch_p_10goto_fixup (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct goto_fixup * const x = (struct goto_fixup *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).before_jump), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).target), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).context), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).target_rtl), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).stack_level), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).cleanup_list_list), cookie);
}
void
gt_pch_p_11label_chain (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct label_chain * const x = (struct label_chain *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).label), cookie);
}
void
gt_pch_p_7nesting (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct nesting * const x = (struct nesting *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).all), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).exit_label), cookie);
  switch (((*x)).desc)
    {
    case COND_NESTING:
      if ((void *)(x) == this_obj)
        op (&((*x).data.cond.endif_label), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).data.cond.next_label), cookie);
      break;
    case BLOCK_NESTING:
      if ((void *)(x) == this_obj)
        op (&((*x).data.block.stack_level), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).data.block.first_insn), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).data.block.innermost_stack_block), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).data.block.cleanups), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).data.block.outer_cleanups), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).data.block.label_chain), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).data.block.last_unconditional_cleanup), cookie);
      break;
    case CASE_NESTING:
      if ((void *)(x) == this_obj)
        op (&((*x).data.case_stmt.start), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).data.case_stmt.case_list), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).data.case_stmt.default_label), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).data.case_stmt.index_expr), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).data.case_stmt.nominal_type), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).data.case_stmt.printname), cookie);
      break;
    default:
      break;
    }
}
void
gt_pch_p_9case_node (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct case_node * const x = (struct case_node *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).left), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).right), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).parent), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).low), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).high), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).code_label), cookie);
}
void
gt_pch_p_11stmt_status (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct stmt_status * const x = (struct stmt_status *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).x_block_stack), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_stack_block_stack), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_cond_stack), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_case_stack), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_nesting_stack), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_emit_locus.file), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_goto_fixup_chain), cookie);
}
static int sizetype_set;
static tree early_type_list;
tree sizetype_tab[(int) TYPE_KIND_LAST];
unsigned int maximum_field_alignment;
unsigned int set_alignment = 0;
static int reference_types_internal = 0;
static void finalize_record_size (record_layout_info);
static void finalize_type_size (tree);
static void place_union_field (record_layout_info, tree);
static int excess_unit_span (long, long, long,
        long, tree);
extern void debug_rli (record_layout_info);
static tree pending_sizes;
void
internal_reference_types (void)
{
  reference_types_internal = 1;
}
tree
get_pending_sizes (void)
{
  tree chain = pending_sizes;
  pending_sizes = 0;
  return chain;
}
void
put_pending_size (tree expr)
{
  expr = skip_simple_arithmetic (expr);
  if (((enum tree_code) (expr)->common.code) == SAVE_EXPR)
    pending_sizes = tree_cons_stat ((tree) ((void *)0),expr,pending_sizes );
}
void
put_pending_sizes (tree chain)
{
  if (pending_sizes)
    abort ();
  pending_sizes = chain;
}
tree
variable_size (tree size)
{
  tree save;
  if (((size)->common.constant_flag)
      || lang_hooks.decls.global_bindings_p () < 0
      || ((size) != 0 && ! ((size)->common.constant_flag) && contains_placeholder_p (size)))
    return size;
  size = save_expr (size);
  save = skip_simple_arithmetic (size);
  if (cfun && cfun->x_dont_save_pending_sizes_p)
    return size;
  if (lang_hooks.decls.global_bindings_p ())
    {
      if (((size)->common.constant_flag))
 error ("type size can't be explicitly evaluated");
      else
 error ("variable-size type declared outside of any function");
      return global_trees[TI_SIZE_ONE];
    }
  put_pending_size (save);
  return size;
}
enum machine_mode
mode_for_size (unsigned int size, enum mode_class class, int limit)
{
  enum machine_mode mode;
  if (limit && size > ((unsigned short) (((unsigned short) mode_size[DImode]) * 8)))
    return BLKmode;
  for (mode = class_narrowest_mode[class]; mode != VOIDmode;
       mode = mode_wider[mode])
    if (mode_precision[mode] == size)
      return mode;
  return BLKmode;
}
enum machine_mode
mode_for_size_tree (tree size, enum mode_class class, int limit)
{
  if (((enum tree_code) (size)->common.code) != INTEGER_CST
      || ((size)->common.public_flag)
      || compare_tree_int (size, 1000) > 0)
    return BLKmode;
  else
    return mode_for_size (tree_low_cst (size, 1), class, limit);
}
enum machine_mode
smallest_mode_for_size (unsigned int size, enum mode_class class)
{
  enum machine_mode mode;
  for (mode = class_narrowest_mode[class]; mode != VOIDmode;
       mode = mode_wider[mode])
    if (mode_precision[mode] >= size)
      return mode;
  abort ();
}
enum machine_mode
int_mode_for_mode (enum machine_mode mode)
{
  switch (mode_class[mode])
    {
    case MODE_INT:
    case MODE_PARTIAL_INT:
      break;
    case MODE_COMPLEX_INT:
    case MODE_COMPLEX_FLOAT:
    case MODE_FLOAT:
    case MODE_VECTOR_INT:
    case MODE_VECTOR_FLOAT:
      mode = mode_for_size (((unsigned short) (((unsigned short) mode_size[mode]) * 8)), MODE_INT, 0);
      break;
    case MODE_RANDOM:
      if (mode == BLKmode)
 break;
    case MODE_CC:
    default:
      abort ();
    }
  return mode;
}
unsigned int
get_mode_alignment (enum machine_mode mode)
{
  return ((128) < (((1) > (mode_base_align[mode]*8) ? (1) : (mode_base_align[mode]*8))) ? (128) : (((1) > (mode_base_align[mode]*8) ? (1) : (mode_base_align[mode]*8))));
}
tree
round_up (tree value1, int divisor)
{
  tree arg = size_int_type_wide ((long) (divisor), ((value1)->common.type));
  return size_binop (MULT_EXPR, size_binop (CEIL_DIV_EXPR, value1, arg), arg);
}
tree
round_down (tree value1, int divisor)
{
  tree arg = size_int_type_wide ((long) (divisor), ((value1)->common.type));
  return size_binop (MULT_EXPR, size_binop (FLOOR_DIV_EXPR, value1, arg), arg);
}
static void
do_type_align (tree type, tree decl)
{
  if (((type)->type.align) > ((decl)->decl.u1.a.align))
    {
      ((decl)->decl.u1.a.align) = ((type)->type.align);
      if (((enum tree_code) (decl)->common.code) == FIELD_DECL)
 ((decl)->decl.user_align) = ((type)->type.user_align);
    }
}
void
layout_decl (tree decl, unsigned int known_align)
{
  tree type = ((decl)->common.type);
  enum tree_code code = ((enum tree_code) (decl)->common.code);
  rtx rtl = (rtx) 0;
  if (code == CONST_DECL)
    return;
  else if (code != VAR_DECL && code != PARM_DECL && code != RESULT_DECL
    && code != TYPE_DECL && code != FIELD_DECL)
    abort ();
  rtl = (((decl)->decl.rtl != ((void *)0)) ? ((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)) : ((void *)0));
  if (type == global_trees[TI_ERROR_MARK])
    type = global_trees[TI_VOID_TYPE];
  ((decl)->common.unsigned_flag) = ((type)->common.unsigned_flag);
  if (((decl)->decl.mode) == VOIDmode)
    ((decl)->decl.mode) = ((type)->type.mode);
  if (((decl)->decl.size) == 0)
    {
      ((decl)->decl.size) = ((type)->type.size);
      ((decl)->decl.size_unit) = ((type)->type.size_unit);
    }
  else if (((decl)->decl.size_unit) == 0)
    ((decl)->decl.size_unit)
      = convert (sizetype_tab[(int) SIZETYPE], size_binop (CEIL_DIV_EXPR, ((decl)->decl.size),
           global_trees[TI_BITSIZE_UNIT]));
  if (code != FIELD_DECL)
    do_type_align (type, decl);
  else
    {
      unsigned char old_user_align = ((decl)->decl.user_align);
      if (((decl)->decl.bit_field_flag))
 {
   ((decl)->decl.result) = type;
   if (integer_zerop (((decl)->decl.size))
       && ! ((decl)->decl.regdecl_flag)
       && ! targetm.ms_bitfield_layout_p (((decl)->decl.context)))
     {
       if (1)
  do_type_align (type, decl);
       else
  {
    if ((8 * (0 ? 8 : 4)) > ((decl)->decl.u1.a.align))
      {
        ((decl)->decl.u1.a.align) = (8 * (0 ? 8 : 4));
        ((decl)->decl.user_align) = 0;
      }
  }
     }
   if (((type)->type.size) != 0
       && ((enum tree_code) (((type)->type.size))->common.code) == INTEGER_CST
       && mode_class[((type)->type.mode)] == MODE_INT)
     {
       enum machine_mode xmode
  = mode_for_size_tree (((decl)->decl.size), MODE_INT, 1);
       if (xmode != BLKmode
    && (known_align == 0
        || known_align >= get_mode_alignment (xmode)))
  {
    ((decl)->decl.u1.a.align) = ((get_mode_alignment (xmode)) > (((decl)->decl.u1.a.align)) ? (get_mode_alignment (xmode)) : (((decl)->decl.u1.a.align)))
                          ;
    ((decl)->decl.mode) = xmode;
    ((decl)->decl.bit_field_flag) = 0;
  }
     }
   if (((type)->type.mode) == BLKmode && ((decl)->decl.mode) == BLKmode
       && known_align >= ((type)->type.align)
       && ((decl)->decl.u1.a.align) >= ((type)->type.align))
     ((decl)->decl.bit_field_flag) = 0;
 }
      else if (((decl)->decl.regdecl_flag) && ((decl)->decl.user_align))
                                                         ;
      else
 do_type_align (type, decl);
      if (((decl)->decl.regdecl_flag)
   && !old_user_align
   && (((decl)->decl.non_addressable)
       || ((decl)->decl.size_unit) == 0
       || ((enum tree_code) (((decl)->decl.size_unit))->common.code) == INTEGER_CST))
 ((decl)->decl.u1.a.align) = ((((decl)->decl.u1.a.align)) < (8) ? (((decl)->decl.u1.a.align)) : (8));
      if (! ((decl)->decl.user_align) && ! ((decl)->decl.regdecl_flag))
 {
   ((decl)->decl.u1.a.align) = x86_field_alignment (decl, ((decl)->decl.u1.a.align));
 }
      if (maximum_field_alignment != 0)
 ((decl)->decl.u1.a.align) = ((((decl)->decl.u1.a.align)) < (maximum_field_alignment) ? (((decl)->decl.u1.a.align)) : (maximum_field_alignment));
    }
  if (((decl)->decl.size) != 0 && ((enum tree_code) (((decl)->decl.size))->common.code) != INTEGER_CST)
    ((decl)->decl.size) = variable_size (((decl)->decl.size));
  if (((decl)->decl.size_unit) != 0
      && ((enum tree_code) (((decl)->decl.size_unit))->common.code) != INTEGER_CST)
    ((decl)->decl.size_unit) = variable_size (((decl)->decl.size_unit));
  if (warn_larger_than
      && (code == VAR_DECL || code == PARM_DECL)
      && ! ((decl)->decl.external_flag))
    {
      tree size = ((decl)->decl.size_unit);
      if (size != 0 && ((enum tree_code) (size)->common.code) == INTEGER_CST
   && compare_tree_int (size, larger_than_size) > 0)
 {
   int size_as_int = (((size)->int_cst.int_cst).low);
   if (compare_tree_int (size, size_as_int) == 0)
     warning ("%Jsize of '%D' is %d bytes", decl, decl, size_as_int);
   else
     warning ("%Jsize of '%D' is larger than %d bytes",
                     decl, decl, larger_than_size);
 }
    }
  if (rtl)
    {
      ((rtl)->mode = (((decl)->decl.mode)));
      set_decl_rtl (decl, 0);
      set_mem_attributes (rtl, decl, 1);
      set_decl_rtl (decl, rtl);
    }
}
void (*lang_adjust_rli) (record_layout_info) = 0;
void
set_lang_adjust_rli (void (*f) (record_layout_info))
{
  lang_adjust_rli = f;
}
record_layout_info
start_record_layout (tree t)
{
  record_layout_info rli = xmalloc (sizeof (struct record_layout_info_s));
  rli->t = t;
  rli->record_align = ((8) > (((t)->type.align)) ? (8) : (((t)->type.align)));
  rli->unpacked_align = rli->record_align;
  rli->offset_align = ((rli->record_align) > (128) ? (rli->record_align) : (128));
  rli->offset = global_trees[TI_SIZE_ZERO];
  rli->bitpos = global_trees[TI_BITSIZE_ZERO];
  rli->prev_field = 0;
  rli->pending_statics = 0;
  rli->packed_maybe_necessary = 0;
  return rli;
}
tree
bit_from_pos (tree offset, tree bitpos)
{
  return size_binop (PLUS_EXPR, bitpos,
       size_binop (MULT_EXPR, convert (sizetype_tab[(int) BITSIZETYPE], offset),
     global_trees[TI_BITSIZE_UNIT]));
}
tree
byte_from_pos (tree offset, tree bitpos)
{
  return size_binop (PLUS_EXPR, offset,
       convert (sizetype_tab[(int) SIZETYPE],
         size_binop (TRUNC_DIV_EXPR, bitpos,
       global_trees[TI_BITSIZE_UNIT])));
}
void
pos_from_bit (tree *poffset, tree *pbitpos, unsigned int off_align,
       tree pos)
{
  *poffset = size_binop (MULT_EXPR,
    convert (sizetype_tab[(int) SIZETYPE],
      size_binop (FLOOR_DIV_EXPR, pos,
           size_int_wide ((long) (off_align), BITSIZETYPE))),
    size_int_wide ((long) (off_align / 8), SIZETYPE));
  *pbitpos = size_binop (FLOOR_MOD_EXPR, pos, size_int_wide ((long) (off_align), BITSIZETYPE));
}
void
normalize_offset (tree *poffset, tree *pbitpos, unsigned int off_align)
{
  if (compare_tree_int (*pbitpos, off_align) >= 0)
    {
      tree extra_aligns = size_binop (FLOOR_DIV_EXPR, *pbitpos,
          size_int_wide ((long) (off_align), BITSIZETYPE));
      *poffset
 = size_binop (PLUS_EXPR, *poffset,
        size_binop (MULT_EXPR, convert (sizetype_tab[(int) SIZETYPE], extra_aligns),
      size_int_wide ((long) (off_align / 8), SIZETYPE)));
      *pbitpos
 = size_binop (FLOOR_MOD_EXPR, *pbitpos, size_int_wide ((long) (off_align), BITSIZETYPE));
    }
}
void
debug_rli (record_layout_info rli)
{
  print_node_brief (stderr, "type", rli->t, 0);
  print_node_brief (stderr, "\noffset", rli->offset, 0);
  print_node_brief (stderr, " bitpos", rli->bitpos, 0);
  fprintf (stderr, "\naligns: rec = %u, unpack = %u, off = %u\n",
    rli->record_align, rli->unpacked_align,
    rli->offset_align);
  if (rli->packed_maybe_necessary)
    fprintf (stderr, "packed may be necessary\n");
  if (rli->pending_statics)
    {
      fprintf (stderr, "pending statics:\n");
      debug_tree (rli->pending_statics);
    }
}
void
normalize_rli (record_layout_info rli)
{
  normalize_offset (&rli->offset, &rli->bitpos, rli->offset_align);
}
tree
rli_size_unit_so_far (record_layout_info rli)
{
  return byte_from_pos (rli->offset, rli->bitpos);
}
tree
rli_size_so_far (record_layout_info rli)
{
  return bit_from_pos (rli->offset, rli->bitpos);
}
unsigned int
update_alignment_for_field (record_layout_info rli, tree field,
       unsigned int known_align)
{
  unsigned int desired_align;
  tree type = ((field)->common.type);
  unsigned char user_align;
  unsigned char is_bitfield;
  layout_decl (field, known_align);
  desired_align = ((field)->decl.u1.a.align);
  user_align = ((field)->decl.user_align);
  is_bitfield = (type != global_trees[TI_ERROR_MARK]
   && ((field)->decl.result)
   && ! integer_zerop (((type)->type.size)));
  if (is_bitfield && targetm.ms_bitfield_layout_p (rli->t))
    {
      if (! integer_zerop (((field)->decl.size))
   ? ! ((field)->decl.regdecl_flag)
   : (rli->prev_field
      && ((rli->prev_field)->decl.result)
      && ! integer_zerop (((rli->prev_field)->decl.size))))
 {
   unsigned int type_align = ((type)->type.align);
   type_align = ((type_align) > (desired_align) ? (type_align) : (desired_align));
   if (maximum_field_alignment != 0)
     type_align = ((type_align) < (maximum_field_alignment) ? (type_align) : (maximum_field_alignment));
   rli->record_align = ((rli->record_align) > (type_align) ? (rli->record_align) : (type_align));
   rli->unpacked_align = ((rli->unpacked_align) > (((type)->type.align)) ? (rli->unpacked_align) : (((type)->type.align)));
 }
    }
  else if (is_bitfield && 1)
    {
      if (((field)->decl.name) != 0
   || targetm.align_anon_bitfield ())
 {
   unsigned int type_align = ((type)->type.align);
   if (! ((type)->type.user_align))
     type_align = x86_field_alignment (field, type_align);
   if (maximum_field_alignment != 0)
     type_align = ((type_align) < (maximum_field_alignment) ? (type_align) : (maximum_field_alignment));
   else if (((field)->decl.regdecl_flag))
     type_align = ((type_align) < (8) ? (type_align) : (8));
   rli->record_align = ((rli->record_align) > (desired_align) ? (rli->record_align) : (desired_align));
   rli->record_align = ((rli->record_align) > (type_align) ? (rli->record_align) : (type_align));
   if (warn_packed)
     rli->unpacked_align = ((rli->unpacked_align) > (((type)->type.align)) ? (rli->unpacked_align) : (((type)->type.align)));
   user_align |= ((type)->type.user_align);
 }
    }
  else
    {
      rli->record_align = ((rli->record_align) > (desired_align) ? (rli->record_align) : (desired_align));
      rli->unpacked_align = ((rli->unpacked_align) > (((type)->type.align)) ? (rli->unpacked_align) : (((type)->type.align)));
    }
  ((rli->t)->type.user_align) |= user_align;
  return desired_align;
}
static void
place_union_field (record_layout_info rli, tree field)
{
  update_alignment_for_field (rli, field, 0);
  ((field)->decl.arguments) = global_trees[TI_SIZE_ZERO];
  ((field)->decl.u2.t) = global_trees[TI_BITSIZE_ZERO];
  ((field)->decl.u1.a.off_align = exact_log2_wide ((unsigned long) ((128) & -(128))));
  if (((enum tree_code) (rli->t)->common.code) == UNION_TYPE)
    rli->offset = size_binop (MAX_EXPR, rli->offset, ((field)->decl.size_unit));
  else if (((enum tree_code) (rli->t)->common.code) == QUAL_UNION_TYPE)
    rli->offset = fold (build (COND_EXPR, sizetype_tab[(int) SIZETYPE],
          ((field)->decl.initial),
          ((field)->decl.size_unit), rli->offset));
}
static int
excess_unit_span (long byte_offset, long bit_offset,
    long size, long align, tree type)
{
  unsigned long offset = byte_offset * 8 + bit_offset;
  offset = offset % align;
  return ((offset + size + align - 1) / align
   > ((unsigned long) tree_low_cst (((type)->type.size), 1)
      / align));
}
void
place_field (record_layout_info rli, tree field)
{
  unsigned int desired_align;
  unsigned int known_align;
  unsigned int actual_align;
  tree type = ((field)->common.type);
  if (((enum tree_code) (field)->common.code) == ERROR_MARK || ((enum tree_code) (type)->common.code) == ERROR_MARK)
      return;
  if (((enum tree_code) (field)->common.code) == VAR_DECL)
    {
      rli->pending_statics = tree_cons_stat ((tree) ((void *)0),field,rli->pending_statics )
                          ;
      return;
    }
  else if (((enum tree_code) (field)->common.code) != FIELD_DECL)
    return;
  else if (((enum tree_code) (rli->t)->common.code) != RECORD_TYPE)
    {
      place_union_field (rli, field);
      return;
    }
  if (! integer_zerop (rli->bitpos))
    known_align = (tree_low_cst (rli->bitpos, 1)
     & - tree_low_cst (rli->bitpos, 1));
  else if (integer_zerop (rli->offset))
    known_align = 128;
  else if (host_integerp (rli->offset, 1))
    known_align = (8
     * (tree_low_cst (rli->offset, 1)
        & - tree_low_cst (rli->offset, 1)));
  else
    known_align = rli->offset_align;
  desired_align = update_alignment_for_field (rli, field, known_align);
  if (warn_packed && ((field)->decl.regdecl_flag))
    {
      if (known_align >= ((type)->type.align))
 {
   if (((type)->type.align) > desired_align)
     {
       if (0)
  warning ("%Jpacked attribute causes inefficient alignment for '%D'", field, field);
       else
  warning ("%Jpacked attribute is unnecessary for '%D'",
    field, field);
     }
 }
      else
 rli->packed_maybe_necessary = 1;
    }
  if (known_align < desired_align)
    {
      if (warn_padded)
 warning ("%Jpadding struct to align '%D'", field, field);
      if (desired_align < rli->offset_align)
 rli->bitpos = round_up (rli->bitpos, desired_align);
      else
 {
   rli->offset
     = size_binop (PLUS_EXPR, rli->offset,
     convert (sizetype_tab[(int) SIZETYPE],
       size_binop (CEIL_DIV_EXPR, rli->bitpos,
            global_trees[TI_BITSIZE_UNIT])));
   rli->bitpos = global_trees[TI_BITSIZE_ZERO];
   rli->offset = round_up (rli->offset, desired_align / 8);
 }
      if (! ((rli->offset)->common.constant_flag))
 rli->offset_align = desired_align;
    }
  if (1
      && ! targetm.ms_bitfield_layout_p (rli->t)
      && ((enum tree_code) (field)->common.code) == FIELD_DECL
      && type != global_trees[TI_ERROR_MARK]
      && ((field)->decl.bit_field_flag)
      && ! ((field)->decl.regdecl_flag)
      && maximum_field_alignment == 0
      && ! integer_zerop (((field)->decl.size))
      && host_integerp (((field)->decl.size), 1)
      && host_integerp (rli->offset, 1)
      && host_integerp (((type)->type.size), 1))
    {
      unsigned int type_align = ((type)->type.align);
      tree dsize = ((field)->decl.size);
      long field_size = tree_low_cst (dsize, 1);
      long offset = tree_low_cst (rli->offset, 0);
      long bit_offset = tree_low_cst (rli->bitpos, 0);
      if (! ((type)->type.user_align))
 type_align = x86_field_alignment (field, type_align);
      if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
 rli->bitpos = round_up (rli->bitpos, type_align);
      ((rli->t)->type.user_align) |= ((type)->type.user_align);
    }
  if (targetm.ms_bitfield_layout_p (rli->t)
       && ((((field)->decl.result) && ! ((field)->decl.regdecl_flag))
   || (rli->prev_field && ! ((rli->prev_field)->decl.regdecl_flag))))
    {
      tree prev_saved = rli->prev_field;
      if (rli->prev_field )
 {
   if (((field)->decl.result)
       && !integer_zerop (((field)->decl.size))
       && !integer_zerop (((rli->prev_field)->decl.size))
       && host_integerp (((rli->prev_field)->decl.size), 0)
       && host_integerp (((type)->type.size), 0)
       && simple_cst_equal (((type)->type.size),
       ((((rli->prev_field)->common.type))->type.size)))
     {
       long bitsize = tree_low_cst (((field)->decl.size), 0);
       if (rli->remaining_in_alignment < bitsize)
  {
    rli->offset = ((rli->prev_field)->decl.arguments);
    rli->bitpos
      = size_binop (PLUS_EXPR, ((type)->type.size),
      ((rli->prev_field)->decl.u2.t));
    rli->prev_field = field;
    rli->remaining_in_alignment
      = tree_low_cst (((type)->type.size), 0);
  }
       rli->remaining_in_alignment -= bitsize;
     }
   else
     {
       if (!integer_zerop (((rli->prev_field)->decl.size)))
  {
    tree type_size = ((((rli->prev_field)->common.type))->type.size);
    rli->bitpos
      = size_binop (PLUS_EXPR, type_size,
      ((rli->prev_field)->decl.u2.t));
  }
       else
  prev_saved = ((void *)0);
       if (!((field)->decl.result)
   || integer_zerop (((field)->decl.size)))
  rli->prev_field = ((void *)0);
     }
   normalize_rli (rli);
        }
      if (!((field)->decl.result)
   || ( prev_saved != ((void *)0)
        ? !simple_cst_equal (((type)->type.size),
        ((((prev_saved)->common.type))->type.size))
       : !integer_zerop (((field)->decl.size)) ))
 {
   unsigned int type_align = 8;
   if (((field)->decl.size) != ((void *)0)
       && host_integerp (((((field)->common.type))->type.size), 0)
       && host_integerp (((field)->decl.size), 0))
     rli->remaining_in_alignment
       = tree_low_cst (((((field)->common.type))->type.size), 0)
  - tree_low_cst (((field)->decl.size), 0);
   if (!((field)->decl.regdecl_flag))
     type_align = ((((type)->type.align)) > (type_align) ? (((type)->type.align)) : (type_align));
   if (prev_saved
       && ((prev_saved)->decl.result)
       && ! integer_zerop (((prev_saved)->decl.size)))
     type_align = ((type_align) > (((((prev_saved)->common.type))->type.align)) ? (type_align) : (((((prev_saved)->common.type))->type.align)))
                                             ;
   if (maximum_field_alignment != 0)
     type_align = ((type_align) < (maximum_field_alignment) ? (type_align) : (maximum_field_alignment));
   rli->bitpos = round_up (rli->bitpos, type_align);
   rli->prev_field = ((void *)0);
 }
    }
  normalize_rli (rli);
  ((field)->decl.arguments) = rli->offset;
  ((field)->decl.u2.t) = rli->bitpos;
  ((field)->decl.u1.a.off_align = exact_log2_wide ((unsigned long) ((rli->offset_align) & -(rli->offset_align))));
  if (! integer_zerop (((field)->decl.u2.t)))
    actual_align = (tree_low_cst (((field)->decl.u2.t), 1)
      & - tree_low_cst (((field)->decl.u2.t), 1));
  else if (integer_zerop (((field)->decl.arguments)))
    actual_align = 128;
  else if (host_integerp (((field)->decl.arguments), 1))
    actual_align = (8
     * (tree_low_cst (((field)->decl.arguments), 1)
        & - tree_low_cst (((field)->decl.arguments), 1)));
  else
    actual_align = (((unsigned long)1) << (field)->decl.u1.a.off_align);
  if (known_align != actual_align)
    layout_decl (field, actual_align);
  if (rli->prev_field == ((void *)0) && ((field)->decl.result))
      rli->prev_field = field;
  if (((field)->decl.size) == 0)
                      ;
  else if (((enum tree_code) (((field)->decl.size_unit))->common.code) != INTEGER_CST
    || ((((field)->decl.size_unit))->common.static_flag))
    {
      rli->offset
 = size_binop (PLUS_EXPR, rli->offset,
        convert (sizetype_tab[(int) SIZETYPE],
          size_binop (CEIL_DIV_EXPR, rli->bitpos,
        global_trees[TI_BITSIZE_UNIT])));
      rli->offset
 = size_binop (PLUS_EXPR, rli->offset, ((field)->decl.size_unit));
      rli->bitpos = global_trees[TI_BITSIZE_ZERO];
      rli->offset_align = ((rli->offset_align) < (desired_align) ? (rli->offset_align) : (desired_align));
    }
  else
    {
      rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, ((field)->decl.size));
      normalize_rli (rli);
    }
}
static void
finalize_record_size (record_layout_info rli)
{
  tree unpadded_size, unpadded_size_unit;
  rli->offset_align = 8;
  normalize_rli (rli);
  ((rli->t)->type.align) = ((((rli->t)->type.align)) > (rli->record_align) ? (((rli->t)->type.align)) : (rli->record_align));
  unpadded_size = rli_size_so_far (rli);
  unpadded_size_unit = rli_size_unit_so_far (rli);
  if (! integer_zerop (rli->bitpos))
    unpadded_size_unit
      = size_binop (PLUS_EXPR, unpadded_size_unit, global_trees[TI_SIZE_ONE]);
  ((rli->t)->type.size) = round_up (unpadded_size, ((rli->t)->type.align));
  ((rli->t)->type.size_unit) = round_up (unpadded_size_unit,
          ((rli->t)->type.align) / 8);
  if (warn_padded && ((unpadded_size)->common.constant_flag)
      && simple_cst_equal (unpadded_size, ((rli->t)->type.size)) == 0)
    warning ("padding struct size to alignment boundary");
  if (warn_packed && ((enum tree_code) (rli->t)->common.code) == RECORD_TYPE
      && ((rli->t)->type.packed_flag) && ! rli->packed_maybe_necessary
      && ((unpadded_size)->common.constant_flag))
    {
      tree unpacked_size;
      rli->unpacked_align = ((((rli->t)->type.align)) > (rli->unpacked_align) ? (((rli->t)->type.align)) : (rli->unpacked_align));
      unpacked_size = round_up (((rli->t)->type.size), rli->unpacked_align);
      if (simple_cst_equal (unpacked_size, ((rli->t)->type.size)))
 {
   ((rli->t)->type.packed_flag) = 0;
   if (((rli->t)->type.name))
     {
       const char *name;
       if (((enum tree_code) (((rli->t)->type.name))->common.code) == IDENTIFIER_NODE)
  name = ((const char *) (((rli->t)->type.name))->identifier.id.str);
       else
  name = ((const char *) (((((rli->t)->type.name))->decl.name))->identifier.id.str);
       if (0)
  warning ("packed attribute causes inefficient alignment for `%s'", name);
       else
  warning ("packed attribute is unnecessary for `%s'", name);
     }
   else
     {
       if (0)
  warning ("packed attribute causes inefficient alignment");
       else
  warning ("packed attribute is unnecessary");
     }
 }
    }
}
void
compute_record_mode (tree type)
{
  tree field;
  enum machine_mode mode = VOIDmode;
  ((type)->type.mode) = BLKmode;
  if (! host_integerp (((type)->type.size), 1))
    return;
  for (field = ((type)->type.value1s); field; field = ((field)->common.chain))
    {
      if (((enum tree_code) (field)->common.code) != FIELD_DECL)
 continue;
      if (((enum tree_code) (((field)->common.type))->common.code) == ERROR_MARK
   || (((((field)->common.type))->type.mode) == BLKmode
       && ! ((((field)->common.type))->type.no_force_blk_flag)
       && !(((((field)->common.type))->type.size) != 0
     && integer_zerop (((((field)->common.type))->type.size))))
   || ! host_integerp (bit_position (field), 1)
   || ((field)->decl.size) == 0
   || ! host_integerp (((field)->decl.size), 1))
 return;
      if (simple_cst_equal (((type)->type.size), ((field)->decl.size)))
 mode = ((field)->decl.mode);
    }
  if (((enum tree_code) (type)->common.code) == RECORD_TYPE && mode != VOIDmode)
    ((type)->type.mode) = mode;
  else
    ((type)->type.mode) = mode_for_size_tree (((type)->type.size), MODE_INT, 1);
  if (((type)->type.mode) != BLKmode
      && 0
      && ! (((type)->type.align) >= 128
     || ((type)->type.align) >= get_mode_alignment (((type)->type.mode))))
    {
      ((type)->type.no_force_blk_flag) = 1;
      ((type)->type.mode) = BLKmode;
    }
}
static void
finalize_type_size (tree type)
{
  if (((type)->type.mode) != BLKmode && ((type)->type.mode) != VOIDmode
      && (0
   || (((enum tree_code) (type)->common.code) != RECORD_TYPE && ((enum tree_code) (type)->common.code) != UNION_TYPE
       && ((enum tree_code) (type)->common.code) != QUAL_UNION_TYPE
       && ((enum tree_code) (type)->common.code) != ARRAY_TYPE)))
    {
      ((type)->type.align) = get_mode_alignment (((type)->type.mode));
      ((type)->type.user_align) = 0;
    }
  if (((type)->type.size_unit) == 0 && ((type)->type.size) != 0)
    ((type)->type.size_unit)
      = convert (sizetype_tab[(int) SIZETYPE],
   size_binop (FLOOR_DIV_EXPR, ((type)->type.size),
        global_trees[TI_BITSIZE_UNIT]));
  if (((type)->type.size) != 0)
    {
      ((type)->type.size) = round_up (((type)->type.size), ((type)->type.align));
      ((type)->type.size_unit)
 = round_up (((type)->type.size_unit), ((type)->type.align) / 8);
    }
  if (((type)->type.size) != 0 && ((enum tree_code) (((type)->type.size))->common.code) != INTEGER_CST)
    ((type)->type.size) = variable_size (((type)->type.size));
  if (((type)->type.size_unit) != 0
      && ((enum tree_code) (((type)->type.size_unit))->common.code) != INTEGER_CST)
    ((type)->type.size_unit) = variable_size (((type)->type.size_unit));
  if (((type)->type.next_variant)
      || type != ((type)->type.main_variant))
    {
      tree variant;
      tree size = ((type)->type.size);
      tree size_unit = ((type)->type.size_unit);
      unsigned int align = ((type)->type.align);
      unsigned int user_align = ((type)->type.user_align);
      enum machine_mode mode = ((type)->type.mode);
      for (variant = ((type)->type.main_variant);
    variant != 0;
    variant = ((variant)->type.next_variant))
 {
   ((variant)->type.size) = size;
   ((variant)->type.size_unit) = size_unit;
   ((variant)->type.align) = align;
   ((variant)->type.user_align) = user_align;
   ((variant)->type.mode) = mode;
 }
    }
}
void
finish_record_layout (record_layout_info rli, int free_p)
{
  finalize_record_size (rli);
  compute_record_mode (rli->t);
  finalize_type_size (rli->t);
  while (rli->pending_statics)
    {
      layout_decl (((rli->pending_statics)->list.value1), 0);
      rli->pending_statics = ((rli->pending_statics)->common.chain);
    }
  if (free_p)
    free (rli);
}
void
finish_builtin_struct (tree type, const char *name, tree fields,
         tree align_type)
{
  tree tail, next;
  for (tail = (tree) ((void *)0); fields; tail = fields, fields = next)
    {
      ((fields)->decl.context) = type;
      next = ((fields)->common.chain);
      ((fields)->common.chain) = tail;
    }
  ((type)->type.value1s) = tail;
  if (align_type)
    {
      ((type)->type.align) = ((align_type)->type.align);
      ((type)->type.user_align) = ((align_type)->type.user_align);
    }
  layout_type (type);
  ((type)->type.name) = build_decl_stat (TYPE_DECL,get_identifier (name),type );
  ((type)->common.chain) = ((type)->type.name);
  layout_decl (((type)->type.name), 0);
}
void
layout_type (tree type)
{
  if (type == 0)
    abort ();
  if (type == global_trees[TI_ERROR_MARK])
    return;
  if (((type)->type.size))
    return;
  switch (((enum tree_code) (type)->common.code))
    {
    case LANG_TYPE:
      abort ();
    case BOOLEAN_TYPE:
      if (((type)->type.precision) == 0)
 ((type)->type.precision) = 1;
    case INTEGER_TYPE:
    case ENUMERAL_TYPE:
    case CHAR_TYPE:
      if (((enum tree_code) (((type)->type.minval))->common.code) == INTEGER_CST
   && tree_int_cst_sgn (((type)->type.minval)) >= 0)
 ((type)->common.unsigned_flag) = 1;
      ((type)->type.mode) = smallest_mode_for_size (((type)->type.precision),
       MODE_INT);
      ((type)->type.size) = size_int_wide ((long) (((unsigned short) (((unsigned short) mode_size[((type)->type.mode)]) * 8))), BITSIZETYPE);
      ((type)->type.size_unit) = size_int_wide ((long) (((unsigned short) mode_size[((type)->type.mode)])), SIZETYPE);
      break;
    case REAL_TYPE:
      ((type)->type.mode) = mode_for_size (((type)->type.precision), MODE_FLOAT, 0);
      ((type)->type.size) = size_int_wide ((long) (((unsigned short) (((unsigned short) mode_size[((type)->type.mode)]) * 8))), BITSIZETYPE);
      ((type)->type.size_unit) = size_int_wide ((long) (((unsigned short) mode_size[((type)->type.mode)])), SIZETYPE);
      break;
    case COMPLEX_TYPE:
      ((type)->common.unsigned_flag) = ((((type)->common.type))->common.unsigned_flag);
      ((type)->type.mode)
 = mode_for_size (2 * ((((type)->common.type))->type.precision),
    (((enum tree_code) (((type)->common.type))->common.code) == REAL_TYPE
     ? MODE_COMPLEX_FLOAT : MODE_COMPLEX_INT),
    0);
      ((type)->type.size) = size_int_wide ((long) (((unsigned short) (((unsigned short) mode_size[((type)->type.mode)]) * 8))), BITSIZETYPE);
      ((type)->type.size_unit) = size_int_wide ((long) (((unsigned short) mode_size[((type)->type.mode)])), SIZETYPE);
      break;
    case VECTOR_TYPE:
      ((type)->common.unsigned_flag) = ((((type)->common.type))->common.unsigned_flag);
      ((type)->type.size) = size_int_wide ((long) (((unsigned short) (((unsigned short) mode_size[((type)->type.mode)]) * 8))), BITSIZETYPE);
      ((type)->type.size_unit) = size_int_wide ((long) (((unsigned short) mode_size[((type)->type.mode)])), SIZETYPE);
      break;
    case VOID_TYPE:
      ((type)->type.align) = 1;
      ((type)->type.user_align) = 0;
      ((type)->type.mode) = VOIDmode;
      break;
    case OFFSET_TYPE:
      ((type)->type.size) = size_int_wide ((long) ((8 * (0 ? 8 : 4))), BITSIZETYPE);
      ((type)->type.size_unit) = size_int_wide ((long) ((8 * (0 ? 8 : 4)) / 8), SIZETYPE);
      ((type)->type.mode) = mode_for_size ((8 * (0 ? 8 : 4)), MODE_INT, 0);
      break;
    case FUNCTION_TYPE:
    case METHOD_TYPE:
      ((type)->type.mode) = mode_for_size (8, MODE_INT, 0);
      ((type)->type.size) = size_int_wide ((long) (8), BITSIZETYPE);
      ((type)->type.size_unit) = size_int_wide ((long) (8 / 8), SIZETYPE);
      break;
    case POINTER_TYPE:
    case REFERENCE_TYPE:
      {
 enum machine_mode mode = ((((enum tree_code) (type)->common.code) == REFERENCE_TYPE
       && reference_types_internal)
      ? (0 ? DImode : SImode) : ((type)->type.mode));
 int nbits = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
 ((type)->type.size) = size_int_wide ((long) (nbits), BITSIZETYPE);
 ((type)->type.size_unit) = size_int_wide ((long) (((unsigned short) mode_size[mode])), SIZETYPE);
 ((type)->common.unsigned_flag) = 1;
 ((type)->type.precision) = nbits;
      }
      break;
    case ARRAY_TYPE:
      {
 tree index = ((type)->type.value1s);
 tree element = ((type)->common.type);
 build_pointer_type (element);
 if (index && ((index)->type.maxval) && ((index)->type.minval)
     && ((element)->type.size))
   {
     tree ub = ((index)->type.maxval);
     tree lb = ((index)->type.minval);
     tree length;
     tree element_size;
     length = size_binop (PLUS_EXPR, global_trees[TI_SIZE_ONE],
     convert (sizetype_tab[(int) SIZETYPE],
       fold (build (MINUS_EXPR,
             ((lb)->common.type),
             ub, lb))));
     element_size = ((element)->type.size);
     if (((type)->type.packed_flag) && (((enum tree_code) (element)->common.code) == INTEGER_TYPE || ((enum tree_code) (element)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (element)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (element)->common.code) == CHAR_TYPE)
  && (integer_zerop (((element)->type.maxval))
      || integer_onep (((element)->type.maxval)))
  && host_integerp (((element)->type.minval), 1))
       {
  long maxvalue
    = tree_low_cst (((element)->type.maxval), 1);
  long minvalue
    = tree_low_cst (((element)->type.minval), 1);
  if (maxvalue - minvalue == 1
      && (maxvalue == 1 || maxvalue == 0))
    element_size = global_trees[TI_INTEGER_ONE];
       }
     if (!((sizetype_tab[(int) SIZETYPE])->common.unsigned_flag)
  && ((enum tree_code) (((index)->type.minval))->common.code) != INTEGER_CST
  && ((enum tree_code) (((index)->type.maxval))->common.code) != INTEGER_CST)
       length = size_binop (MAX_EXPR, length, global_trees[TI_SIZE_ZERO]);
     ((type)->type.size) = size_binop (MULT_EXPR, element_size,
        convert (sizetype_tab[(int) BITSIZETYPE], length));
     if (((element)->type.size_unit) != 0 && ! integer_onep (element_size))
       ((type)->type.size_unit)
  = size_binop (MULT_EXPR, ((element)->type.size_unit), length);
   }
 ((type)->type.align) = ((((element)->type.align)) > (8) ? (((element)->type.align)) : (8));
 ((type)->type.user_align) = ((element)->type.user_align);
 ((type)->type.mode) = BLKmode;
 if (((type)->type.size) != 0
     && (((((type)->common.type))->type.mode) != BLKmode
  || ((((type)->common.type))->type.no_force_blk_flag)))
   {
     if (simple_cst_equal (((type)->type.size),
      ((((type)->common.type))->type.size)))
       ((type)->type.mode) = ((((type)->common.type))->type.mode);
     else
       ((type)->type.mode)
  = mode_for_size_tree (((type)->type.size), MODE_INT, 1);
     if (((type)->type.mode) != BLKmode
  && 0 && ((type)->type.align) < 128
  && ((type)->type.align) < get_mode_alignment (((type)->type.mode))
  && ((type)->type.mode) != BLKmode)
       {
  ((type)->type.no_force_blk_flag) = 1;
  ((type)->type.mode) = BLKmode;
       }
   }
 break;
      }
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      {
 tree field;
 record_layout_info rli;
 rli = start_record_layout (type);
 if (((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE)
   ((type)->type.value1s) = nreverse (((type)->type.value1s));
 for (field = ((type)->type.value1s); field; field = ((field)->common.chain))
   place_field (rli, field);
 if (((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE)
   ((type)->type.value1s) = nreverse (((type)->type.value1s));
 if (lang_adjust_rli)
   (*lang_adjust_rli) (rli);
 finish_record_layout (rli, 1);
      }
      break;
    case SET_TYPE:
      if (((enum tree_code) (((((type)->type.value1s))->type.maxval))->common.code) != INTEGER_CST
   || ((enum tree_code) (((((type)->type.value1s))->type.minval))->common.code) != INTEGER_CST)
 abort ();
      else
 {
   unsigned int alignment
     = set_alignment ? set_alignment : (8 * (0 ? 8 : 4));
   long size_in_bits
     = (tree_low_cst (((((type)->type.value1s))->type.maxval), 0)
        - tree_low_cst (((((type)->type.value1s))->type.minval), 0) + 1);
   long rounded_size
     = ((size_in_bits + alignment - 1) / alignment) * alignment;
   if (rounded_size > (int) alignment)
     ((type)->type.mode) = BLKmode;
   else
     ((type)->type.mode) = mode_for_size (alignment, MODE_INT, 1);
   ((type)->type.size) = size_int_wide ((long) (rounded_size), BITSIZETYPE);
   ((type)->type.size_unit) = size_int_wide ((long) (rounded_size / 8), SIZETYPE);
   ((type)->type.align) = alignment;
   ((type)->type.user_align) = 0;
   ((type)->type.precision) = size_in_bits;
 }
      break;
    case FILE_TYPE:
      ((type)->type.align) = 128;
      ((type)->type.user_align) = 0;
      ((type)->type.mode) = BLKmode;
      break;
    default:
      abort ();
    }
  if (((enum tree_code) (type)->common.code) != RECORD_TYPE
      && ((enum tree_code) (type)->common.code) != UNION_TYPE
      && ((enum tree_code) (type)->common.code) != QUAL_UNION_TYPE)
    finalize_type_size (type);
  if (! sizetype_set)
    early_type_list = tree_cons_stat ((tree) ((void *)0),type,early_type_list );
  if ((((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE) && ((type)->type.alias_set != -1))
    ((type)->type.alias_set) = 0;
}
tree
make_signed_type (int precision)
{
  tree type = make_node_stat (INTEGER_TYPE );
  ((type)->type.precision) = precision;
  fixup_signed_type (type);
  return type;
}
tree
make_unsigned_type (int precision)
{
  tree type = make_node_stat (INTEGER_TYPE );
  ((type)->type.precision) = precision;
  fixup_unsigned_type (type);
  return type;
}
void
initialize_sizetypes (void)
{
  tree t = make_node_stat (INTEGER_TYPE );
  integer_types[itk_int] = t;
  ((t)->type.mode) = SImode;
  ((t)->type.align) = get_mode_alignment (SImode);
  ((t)->type.user_align) = 0;
  ((t)->type.size) = build_int_2_wide ((unsigned long) (((unsigned short) (((unsigned short) mode_size[SImode]) * 8))), (long) (0));
  ((t)->type.size_unit) = build_int_2_wide ((unsigned long) (((unsigned short) mode_size[SImode])), (long) (0));
  ((t)->common.unsigned_flag) = 1;
  ((t)->type.precision) = ((unsigned short) (((unsigned short) mode_size[SImode]) * 8));
  ((t)->type.minval) = build_int_2_wide ((unsigned long) (0), (long) (0));
  ((t)->type.no_force_blk_flag) = 1;
  ((t)->type.maxval) = build_int_2_wide ((unsigned long) (1000), (long) (0));
  sizetype_tab[(int) SIZETYPE] = t;
  sizetype_tab[(int) BITSIZETYPE] = copy_node_stat (t );
  integer_types[itk_int] = 0;
}
void
set_sizetype (tree type)
{
  int oprecision = ((type)->type.precision);
  int precision = ((oprecision + ((8 > 1) + (8 > 2) + (8 > 4) + (8 > 8) + (8 > 16) + (8 > 32) + (8 > 64) + (8 > 128) + (8 > 256)) + 1) < (2 * (8 * 4)) ? (oprecision + ((8 > 1) + (8 > 2) + (8 > 4) + (8 > 8) + (8 > 16) + (8 > 32) + (8 > 64) + (8 > 128) + (8 > 256)) + 1) : (2 * (8 * 4)))
                                    ;
  unsigned int i;
  tree t;
  if (sizetype_set)
    abort ();
  sizetype_tab[(int) SIZETYPE] = copy_node_stat (type );
  ((sizetype_tab[(int) SIZETYPE])->type.value1s) = type;
  ((sizetype_tab[(int) SIZETYPE])->type.no_force_blk_flag) = 1;
  sizetype_tab[(int) BITSIZETYPE] = make_node_stat (INTEGER_TYPE );
  ((sizetype_tab[(int) BITSIZETYPE])->type.name) = ((type)->type.name);
  ((sizetype_tab[(int) BITSIZETYPE])->type.precision) = precision;
  ((sizetype_tab[(int) BITSIZETYPE])->type.no_force_blk_flag) = 1;
  if (((type)->common.unsigned_flag))
    fixup_unsigned_type (sizetype_tab[(int) BITSIZETYPE]);
  else
    fixup_signed_type (sizetype_tab[(int) BITSIZETYPE]);
  layout_type (sizetype_tab[(int) BITSIZETYPE]);
  if (((type)->common.unsigned_flag))
    {
      sizetype_tab[(int) USIZETYPE] = sizetype_tab[(int) SIZETYPE];
      sizetype_tab[(int) UBITSIZETYPE] = sizetype_tab[(int) BITSIZETYPE];
      sizetype_tab[(int) SSIZETYPE] = copy_node_stat (make_signed_type (oprecision) );
      sizetype_tab[(int) SBITSIZETYPE] = copy_node_stat (make_signed_type (precision) );
    }
  else
    {
      sizetype_tab[(int) SSIZETYPE] = sizetype_tab[(int) SIZETYPE];
      sizetype_tab[(int) SBITSIZETYPE] = sizetype_tab[(int) BITSIZETYPE];
      sizetype_tab[(int) USIZETYPE] = copy_node_stat (make_unsigned_type (oprecision) );
      sizetype_tab[(int) UBITSIZETYPE] = copy_node_stat (make_unsigned_type (precision) );
    }
  ((sizetype_tab[(int) BITSIZETYPE])->type.name) = get_identifier ("bit_size_type");
  for (i = 0; i < (sizeof (sizetype_tab) / sizeof ((sizetype_tab)[0])); i++)
    {
      ((sizetype_tab[i])->type.no_force_blk_flag) = 1;
      ((sizetype_tab[i])->type.main_variant) = sizetype_tab[i];
      ((sizetype_tab[i])->type.next_variant) = 0;
      ((sizetype_tab[i])->type.pointer_to) = 0;
      ((sizetype_tab[i])->type.reference_to) = 0;
    }
  for (t = early_type_list; t != 0; t = ((t)->common.chain))
    {
      if (((enum tree_code) (((t)->list.value1))->common.code) != INTEGER_TYPE
   && ((enum tree_code) (((t)->list.value1))->common.code) != BOOLEAN_TYPE)
 abort ();
      ((((((t)->list.value1))->type.size))->common.type) = sizetype_tab[(int) BITSIZETYPE];
      ((((((t)->list.value1))->type.size_unit))->common.type) = sizetype_tab[(int) SIZETYPE];
    }
  early_type_list = 0;
  sizetype_set = 1;
}
void
set_min_and_max_values_for_integral_type (tree type,
       int precision,
       unsigned char is_unsigned)
{
  tree min_value;
  tree max_value;
  if (is_unsigned)
    {
      min_value = build_int_2_wide ((unsigned long) (0), (long) (0));
      max_value
 = build_int_2_wide ((unsigned long) (precision - (8 * 4) >= 0 ? -1 : ((long) 1 << precision) - 1), (long) (precision - (8 * 4) > 0 ? ((unsigned long) ~0 >> ((8 * 4) - (precision - (8 * 4)))) : 0))
             ;
    }
  else
    {
      min_value
 = build_int_2_wide ((unsigned long) ((precision - (8 * 4) > 0 ? 0 : (long) (-1) << (precision - 1))), (long) ((((long) (-1) << (precision - (8 * 4) - 1 > 0 ? precision - (8 * 4) - 1 : 0)))))
               ;
      max_value
 = build_int_2_wide ((unsigned long) ((precision - (8 * 4) > 0 ? -1 : ((long) 1 << (precision - 1)) - 1)), (long) ((precision - (8 * 4) - 1 > 0 ? (((long) 1 << (precision - (8 * 4) - 1))) - 1 : 0)))
        ;
    }
  ((min_value)->common.type) = type;
  ((max_value)->common.type) = type;
  ((type)->type.minval) = min_value;
  ((type)->type.maxval) = max_value;
}
void
fixup_signed_type (tree type)
{
  int precision = ((type)->type.precision);
  if (precision > (8 * 4) * 2)
    precision = (8 * 4) * 2;
  set_min_and_max_values_for_integral_type (type, precision,
                         0);
  layout_type (type);
}
void
fixup_unsigned_type (tree type)
{
  int precision = ((type)->type.precision);
  if (precision > (8 * 4) * 2)
    precision = (8 * 4) * 2;
  set_min_and_max_values_for_integral_type (type, precision,
                         1);
  layout_type (type);
}
enum machine_mode
get_best_mode (int bitsize, int bitpos, unsigned int align,
        enum machine_mode largest_mode, int volatilep)
{
  enum machine_mode mode;
  unsigned int unit = 0;
  for (mode = class_narrowest_mode[MODE_INT]; mode != VOIDmode;
       mode = mode_wider[mode])
    {
      unit = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
      if ((bitpos % unit) + bitsize <= unit)
 break;
    }
  if (mode == VOIDmode
      || ((unit) < (128) ? (unit) : (128)) > align
      || (largest_mode != VOIDmode && unit > ((unsigned short) (((unsigned short) mode_size[largest_mode]) * 8))))
    return VOIDmode;
  if (0 && ! volatilep)
    {
      enum machine_mode wide_mode = VOIDmode, tmode;
      for (tmode = class_narrowest_mode[MODE_INT]; tmode != VOIDmode;
    tmode = mode_wider[tmode])
 {
   unit = ((unsigned short) (((unsigned short) mode_size[tmode]) * 8));
   if (bitpos / unit == (bitpos + bitsize - 1) / unit
       && unit <= (8 * (0 ? 8 : 4))
       && unit <= ((align) < (128) ? (align) : (128))
       && (largest_mode == VOIDmode
    || unit <= ((unsigned short) (((unsigned short) mode_size[largest_mode]) * 8))))
     wide_mode = tmode;
 }
      if (wide_mode != VOIDmode)
 return wide_mode;
    }
  return mode;
}
void
get_mode_bounds (enum machine_mode mode, int sign,
   enum machine_mode target_mode,
   rtx *mmin, rtx *mmax)
{
  unsigned size = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  unsigned long min_val, max_val;
  if (size > (8 * 4))
    abort ();
  if (sign)
    {
      min_val = -((unsigned long) 1 << (size - 1));
      max_val = ((unsigned long) 1 << (size - 1)) - 1;
    }
  else
    {
      min_val = 0;
      max_val = ((unsigned long) 1 << (size - 1) << 1) - 1;
    }
  *mmin = gen_rtx_CONST_INT (VOIDmode, (long) (trunc_int_for_mode (min_val, target_mode)));
  *mmax = gen_rtx_CONST_INT (VOIDmode, (long) (trunc_int_for_mode (max_val, target_mode)));
}
const struct ggc_root_tab gt_ggc_r_gt_stor_layout_h[] = {
  {
    &pending_sizes,
    1,
    sizeof (pending_sizes),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const char empty_string[] = "";
const char digit_vector[] = {
  '0', 0, '1', 0, '2', 0, '3', 0, '4', 0,
  '5', 0, '6', 0, '7', 0, '8', 0, '9', 0
};
struct ht *ident_hash;
static struct obstack string_stack;
static hashnode alloc_string_node (hash_table *);
static int mark_ident (struct cpp_reader *, hashnode, const void *);
static void *
stringpool_ggc_alloc (size_t x)
{
  return ggc_alloc_stat (x );
}
void
init_stringpool (void)
{
  ident_hash = ht_create (14);
  ident_hash->alloc_node = alloc_string_node;
  ident_hash->alloc_subobject = stringpool_ggc_alloc;
  _obstack_begin ((&string_stack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
}
static hashnode
alloc_string_node (hash_table *table )
{
  return (&((struct tree_identifier *) (make_node_stat (IDENTIFIER_NODE )))->id);
}
const char *
ggc_alloc_string (const char *contents, int length)
{
  if (length == -1)
    length = strlen (contents);
  if (length == 0)
    return empty_string;
  if (length == 1 && (_sch_istable[(contents[0]) & 0xff] & (unsigned short)(_sch_isdigit)))
    return (digit_vector + ((contents[0] - '0') * 2));
  ( (&string_stack)->temp = (length), (((&string_stack)->next_free + (&string_stack)->temp + 1 > (&string_stack)->chunk_limit) ? (_obstack_newchunk ((&string_stack), (&string_stack)->temp + 1), 0) : 0), memcpy (((&string_stack)->next_free), ((contents)), ((&string_stack)->temp)), (&string_stack)->next_free += (&string_stack)->temp, *((&string_stack)->next_free)++ = 0);
  return ( ((&string_stack)->next_free == (&string_stack)->object_base ? (((&string_stack)->maybe_empty_object = 1), 0) : 0), (&string_stack)->temp = (((&string_stack)->object_base) - (char *) 0), (&string_stack)->next_free = ((((((&string_stack)->next_free) - (char *) 0)+(&string_stack)->alignment_mask) & ~ ((&string_stack)->alignment_mask)) + (char *) 0), (((&string_stack)->next_free - (char *) (&string_stack)->chunk > (&string_stack)->chunk_limit - (char *) (&string_stack)->chunk) ? ((&string_stack)->next_free = (&string_stack)->chunk_limit) : 0), (&string_stack)->object_base = (&string_stack)->next_free, (((&string_stack)->temp) + (char *) 0));
}
tree
get_identifier (const char *text)
{
  hashnode ht_node = ht_lookup (ident_hash,
    (const unsigned char *) text,
    strlen (text), HT_ALLOC);
  return ((tree) ((char *) (ht_node) - sizeof (struct tree_common)));
}
tree
get_identifier_with_length (const char *text, size_t length)
{
  hashnode ht_node = ht_lookup (ident_hash,
    (const unsigned char *) text,
    length, HT_ALLOC);
  return ((tree) ((char *) (ht_node) - sizeof (struct tree_common)));
}
tree
maybe_get_identifier (const char *text)
{
  hashnode ht_node;
  ht_node = ht_lookup (ident_hash, (const unsigned char *) text,
         strlen (text), HT_NO_INSERT);
  if (ht_node)
    return ((tree) ((char *) (ht_node) - sizeof (struct tree_common)));
  return (tree) ((void *)0);
}
void
stringpool_statistics (void)
{
  ht_dump_statistics (ident_hash);
}
static int
mark_ident (struct cpp_reader *pfile , hashnode h,
     const void *v )
{
  do { if (((tree) ((char *) (h) - sizeof (struct tree_common))) != ((void *)0)) gt_ggc_mx_lang_tree_node (((tree) ((char *) (h) - sizeof (struct tree_common)))); } while (0);
  return 1;
}
void
ggc_mark_stringpool (void)
{
  ht_forall (ident_hash, mark_ident, ((void *)0));
}
void
gt_ggc_m_S (void *x )
{
}
void
gt_pch_p_S (void *obj , void *x ,
     gt_pointer_operator op ,
     void *cookie )
{
}
void
gt_pch_n_S (const void *x)
{
  gt_pch_note_object ((void *)x, (void *)x, &gt_pch_p_S);
}
struct string_pool_data
{
  struct ht_identifier * *
   
    entries;
  unsigned int nslots;
  unsigned int nelements;
};
static struct string_pool_data * spd;
void
gt_pch_save_stringpool (void)
{
  spd = ggc_alloc_stat (sizeof (*spd) );
  spd->nslots = ident_hash->nslots;
  spd->nelements = ident_hash->nelements;
  spd->entries = ggc_alloc_stat (sizeof (spd->entries[0]) * spd->nslots );
  memcpy (spd->entries, ident_hash->entries,
   spd->nslots * sizeof (spd->entries[0]));
}
void
gt_pch_fixup_stringpool (void)
{
}
void
gt_pch_restore_stringpool (void)
{
  ht_load (ident_hash, spd->entries, spd->nslots, spd->nelements, 0);
  spd = ((void *)0);
}
void
gt_ggc_mx_string_pool_data (void *x_p)
{
  struct string_pool_data * const x = (struct string_pool_data *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).nslots); i0++) {
          {
            union tree_node * const x1 =
              ((*x).entries[i0]) ? ((tree) ((char *) (((*x).entries[i0])) - sizeof (struct tree_common))) : ((void *)0);
            do { if (x1 != ((void *)0)) gt_ggc_mx_lang_tree_node (x1); } while (0);
          }
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_pch_nx_string_pool_data (void *x_p)
{
  struct string_pool_data * const x = (struct string_pool_data *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_16string_pool_data))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).nslots); i0++) {
          {
            union tree_node * const x1 =
              ((*x).entries[i0]) ? ((tree) ((char *) (((*x).entries[i0])) - sizeof (struct tree_common))) : ((void *)0);
            do { if (x1 != ((void *)0)) gt_pch_nx_lang_tree_node (x1); } while (0);
          }
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_16string_pool_data);
      }
    }
}
void
gt_pch_p_16string_pool_data (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct string_pool_data * const x = (struct string_pool_data *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).nslots); i0++) {
      {
        union tree_node * x1 =
          ((*x).entries[i0]) ? ((tree) ((char *) (((*x).entries[i0])) - sizeof (struct tree_common))) : ((void *)0);
        if ((void *)((*x).entries) == this_obj)
          op (&(x1), cookie);
        (*x).entries[i0] = (x1) ? (&((struct tree_identifier *) ((x1)))->id) : ((void *)0);
      }
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
const struct ggc_root_tab gt_ggc_r_gt_stringpool_h[] = {
  {
    &spd,
    1,
    sizeof (spd),
    &gt_ggc_mx_string_pool_data,
    &gt_pch_nx_string_pool_data
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
extern void default_external_libcall (rtx);
extern enum machine_mode default_cc_modes_compatible (enum machine_mode,
            enum machine_mode);
extern unsigned char default_return_in_memory (tree, tree);
extern rtx default_expand_builtin_saveregs (void);
extern void default_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int);
extern rtx default_builtin_setjmp_frame_value (void);
extern unsigned char hook_bool_CUMULATIVE_ARGS_false (CUMULATIVE_ARGS *);
extern unsigned char default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *);
extern unsigned char hook_bool_CUMULATIVE_ARGS_true (CUMULATIVE_ARGS *);
extern tree default_cxx_guard_type (void);
extern tree default_cxx_get_cookie_size (tree);
void
default_external_libcall (rtx fun )
{
  (*targetm.asm_out.globalize_label) (asm_out_file, (((fun)->u.fld[0]).rtstr));
}
enum machine_mode
default_cc_modes_compatible (enum machine_mode m1, enum machine_mode m2)
{
  if (m1 == m2)
    return m1;
  return VOIDmode;
}
unsigned char
default_return_in_memory (tree type,
     tree fntype )
{
  return ix86_return_in_memory (type);
}
rtx
default_expand_builtin_saveregs (void)
{
  error ("__builtin_saveregs not supported by this target");
  return (const_int_rtx[64]);
}
void
default_setup_incoming_varargs (CUMULATIVE_ARGS *ca ,
    enum machine_mode mode ,
    tree type ,
    int *pretend_arg_size ,
    int second_time )
{
}
rtx
default_builtin_setjmp_frame_value (void)
{
  return (global_rtl[GR_VIRTUAL_STACK_ARGS]);
}
unsigned char
hook_bool_CUMULATIVE_ARGS_false (CUMULATIVE_ARGS *ca )
{
  return 0;
}
unsigned char
default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *ca )
{
  return (targetm.calls.setup_incoming_varargs
   != default_setup_incoming_varargs);
}
unsigned char
hook_bool_CUMULATIVE_ARGS_true (CUMULATIVE_ARGS * a )
{
  return 1;
}
tree
default_cxx_guard_type (void)
{
  return integer_types[itk_long_long];
}
tree
default_cxx_get_cookie_size (tree type)
{
  tree cookie_size;
  tree sizetype_size;
  tree type_align;
  sizetype_size = size_in_bytes (sizetype_tab[(int) SIZETYPE]);
  type_align = size_int_wide ((long) ((((type)->type.align) / 8)), SIZETYPE);
  if ((((unsigned long) (((type_align)->int_cst.int_cst).high) < (unsigned long) (((sizetype_size)->int_cst.int_cst).high)) || (((unsigned long) (((type_align)->int_cst.int_cst).high) == (unsigned long) (((sizetype_size)->int_cst.int_cst).high)) && (((type_align)->int_cst.int_cst).low) < (((sizetype_size)->int_cst.int_cst).low))))
    cookie_size = sizetype_size;
  else
    cookie_size = type_align;
  return cookie_size;
}
static double ticks_to_msec;
static unsigned char timevar_enable;
struct timevar_def
{
  struct timevar_time_def elapsed;
  struct timevar_time_def start_time;
  const char *name;
  unsigned standalone : 1;
  unsigned used : 1;
};
struct timevar_stack_def
{
  struct timevar_def *timevar;
  struct timevar_stack_def *next;
};
static struct timevar_def timevars[TIMEVAR_LAST];
static struct timevar_stack_def *timing_stack;
static struct timevar_stack_def *unused_stack_instances;
static struct timevar_time_def start_time;
static void get_time (struct timevar_time_def *);
static void timevar_accumulate (struct timevar_time_def *,
    struct timevar_time_def *,
    struct timevar_time_def *);
static void
get_time (struct timevar_time_def *now)
{
  now->user = 0;
  now->sys = 0;
  now->wall = 0;
  if (!timevar_enable)
    return;
  {
    struct tms tms;
    now->wall = times (&tms) * ticks_to_msec;
    now->user = tms.tms_utime * ticks_to_msec;
    now->sys = tms.tms_stime * ticks_to_msec;
  }
}
static void
timevar_accumulate (struct timevar_time_def *timer,
      struct timevar_time_def *start_time,
      struct timevar_time_def *stop_time)
{
  timer->user += stop_time->user - start_time->user;
  timer->sys += stop_time->sys - start_time->sys;
  timer->wall += stop_time->wall - start_time->wall;
}
void
timevar_init (void)
{
  timevar_enable = 1;
  memset (timevars, 0, sizeof (timevars));
timevars[TV_TOTAL].name = "total time";
timevars[TV_GC].name = "garbage collection";
timevars[TV_DUMP].name = "dump files";
timevars[TV_CGRAPH].name = "callgraph construction";
timevars[TV_CGRAPHOPT].name = "callgraph optimization";
timevars[TV_CFG].name = "cfg construction";
timevars[TV_CLEANUP_CFG].name = "cfg cleanup";
timevars[TV_CFG_VERIFY].name = "CFG verifier";
timevars[TV_DELETE_TRIVIALLY_DEAD].name = "trivially dead code";
timevars[TV_LIFE].name = "life analysis";
timevars[TV_LIFE_UPDATE].name = "life info update";
timevars[TV_ALIAS_ANALYSIS].name = "alias analysis";
timevars[TV_REG_SCAN].name = "register scan";
timevars[TV_REBUILD_JUMP].name = "rebuild jump labels";
timevars[TV_CPP].name = "preprocessing";
timevars[TV_LEX].name = "lexical analysis";
timevars[TV_PARSE].name = "parser";
timevars[TV_NAME_LOOKUP].name = "name lookup";
timevars[TV_INTEGRATION].name = "integration";
timevars[TV_TREE_GIMPLIFY].name = "tree gimplify";
timevars[TV_TREE_EH].name = "tree eh";
timevars[TV_TREE_CFG].name = "tree CFG construction";
timevars[TV_TREE_CLEANUP_CFG].name = "tree CFG cleanup";
timevars[TV_TREE_PTA].name = "tree PTA";
timevars[TV_TREE_MAY_ALIAS].name = "tree alias analysis";
timevars[TV_TREE_INSERT_PHI_NODES].name = "tree PHI insertion";
timevars[TV_TREE_SSA_REWRITE_BLOCKS].name = "tree SSA rewrite";
timevars[TV_TREE_SSA_OTHER].name = "tree SSA other";
timevars[TV_TREE_OPS].name = "tree operand scan";
timevars[TV_TREE_SSA_DOMINATOR_OPTS].name = "dominator optimization";
timevars[TV_TREE_SRA].name = "tree SRA";
timevars[TV_TREE_CCP].name = "tree CCP";
timevars[TV_TREE_SPLIT_EDGES].name = "tree split crit edges";
timevars[TV_TREE_PRE].name = "tree PRE";
timevars[TV_TREE_FRE].name = "tree FRE";
timevars[TV_TREE_PHIOPT].name = "tree linearize phis";
timevars[TV_TREE_FORWPROP].name = "tree forward propagate";
timevars[TV_TREE_DCE].name = "tree conservative DCE";
timevars[TV_TREE_CD_DCE].name = "tree aggressive DCE";
timevars[TV_TREE_DSE].name = "tree DSE";
timevars[TV_TREE_LOOP].name = "tree loop optimization";
timevars[TV_TREE_CH].name = "tree copy headers";
timevars[TV_TREE_SSA_TO_NORMAL].name = "tree SSA to normal";
timevars[TV_TREE_NRV].name = "tree NRV optimization";
timevars[TV_TREE_COPY_RENAME].name = "tree rename SSA copies";
timevars[TV_TREE_SSA_VERIFY].name = "tree SSA verifier";
timevars[TV_TREE_STMT_VERIFY].name = "tree STMT verifier";
timevars[TV_CGRAPH_VERIFY].name = "callgraph verifier";
timevars[TV_DOM_FRONTIERS].name = "dominance frontiers";
timevars[TV_CONTROL_DEPENDENCES].name = "control dependences";
timevars[TV_OVERLOAD].name = "overload resolution";
timevars[TV_TEMPLATE_INSTANTIATION].name = "template instantiation";
timevars[TV_EXPAND].name = "expand";
timevars[TV_VARCONST].name = "varconst";
timevars[TV_JUMP].name = "jump";
timevars[TV_CSE].name = "CSE";
timevars[TV_GCSE].name = "global CSE";
timevars[TV_LOOP].name = "loop analysis";
timevars[TV_BYPASS].name = "bypass jumps";
timevars[TV_TRACER].name = "tracer";
timevars[TV_WEB].name = "web";
timevars[TV_CSE2].name = "CSE 2";
timevars[TV_BRANCH_PROB].name = "branch prediction";
timevars[TV_VPT].name = "value profile opts";
timevars[TV_FLOW].name = "flow analysis";
timevars[TV_COMBINE].name = "combiner";
timevars[TV_IFCVT].name = "if-conversion";
timevars[TV_REGMOVE].name = "regmove";
timevars[TV_MODE_SWITCH].name = "mode switching";
timevars[TV_SMS].name = "sms modulo scheduling";
timevars[TV_SCHED].name = "scheduling";
timevars[TV_LOCAL_ALLOC].name = "local alloc";
timevars[TV_GLOBAL_ALLOC].name = "global alloc";
timevars[TV_RELOAD_CSE_REGS].name = "reload CSE regs";
timevars[TV_FLOW2].name = "flow 2";
timevars[TV_IFCVT2].name = "if-conversion 2";
timevars[TV_PEEPHOLE2].name = "peephole 2";
timevars[TV_RENAME_REGISTERS].name = "rename registers";
timevars[TV_SCHED2].name = "scheduling 2";
timevars[TV_MACH_DEP].name = "machine dep reorg";
timevars[TV_DBR_SCHED].name = "delay branch sched";
timevars[TV_REORDER_BLOCKS].name = "reorder blocks";
timevars[TV_SHORTEN_BRANCH].name = "shorten branches";
timevars[TV_REG_STACK].name = "reg stack";
timevars[TV_FINAL].name = "final";
timevars[TV_SYMOUT].name = "symout";
timevars[TV_VAR_TRACKING].name = "variable tracking";
timevars[TV_REST_OF_COMPILATION].name = "rest of compilation";
  ticks_to_msec = (1 / (double)sysconf (_SC_CLK_TCK));
}
void
timevar_push (timevar_id_t timevar)
{
  struct timevar_def *tv = &timevars[timevar];
  struct timevar_stack_def *context;
  struct timevar_time_def now;
  if (!timevar_enable)
    return;
  tv->used = 1;
  if (tv->standalone)
    abort ();
  get_time (&now);
  if (timing_stack)
    timevar_accumulate (&timing_stack->timevar->elapsed, &start_time, &now);
  start_time = now;
  if (unused_stack_instances != ((void *)0))
    {
      context = unused_stack_instances;
      unused_stack_instances = unused_stack_instances->next;
    }
  else
    context = xmalloc (sizeof (struct timevar_stack_def));
  context->timevar = tv;
  context->next = timing_stack;
  timing_stack = context;
}
void
timevar_pop (timevar_id_t timevar)
{
  struct timevar_time_def now;
  struct timevar_stack_def *popped = timing_stack;
  if (!timevar_enable)
    return;
  if (&timevars[timevar] != timing_stack->timevar)
    {
      sorry ("cannot timevar_pop '%s' when top of timevars stack is '%s'",
             timevars[timevar].name, timing_stack->timevar->name);
      abort ();
    }
  get_time (&now);
  timevar_accumulate (&popped->timevar->elapsed, &start_time, &now);
  start_time = now;
  timing_stack = timing_stack->next;
  popped->next = unused_stack_instances;
  unused_stack_instances = popped;
}
void
timevar_start (timevar_id_t timevar)
{
  struct timevar_def *tv = &timevars[timevar];
  if (!timevar_enable)
    return;
  tv->used = 1;
  if (tv->standalone)
    abort ();
  tv->standalone = 1;
  get_time (&tv->start_time);
}
void
timevar_stop (timevar_id_t timevar)
{
  struct timevar_def *tv = &timevars[timevar];
  struct timevar_time_def now;
  if (!timevar_enable)
    return;
  if (!tv->standalone)
    abort ();
  get_time (&now);
  timevar_accumulate (&tv->elapsed, &tv->start_time, &now);
}
void
timevar_get (timevar_id_t timevar, struct timevar_time_def *elapsed)
{
  struct timevar_def *tv = &timevars[timevar];
  struct timevar_time_def now;
  *elapsed = tv->elapsed;
  if (tv->standalone)
    {
      get_time (&now);
      timevar_accumulate (elapsed, &tv->start_time, &now);
    }
  else if (timing_stack->timevar == tv)
    {
      get_time (&now);
      timevar_accumulate (elapsed, &start_time, &now);
    }
}
void
timevar_print (FILE *fp)
{
  unsigned int id;
  struct timevar_time_def *total = &timevars[TV_TOTAL].elapsed;
  struct timevar_time_def now;
  if (!timevar_enable)
    return;
  if (fp == 0)
    fp = stderr;
  get_time (&now);
  if (timing_stack)
    timevar_accumulate (&timing_stack->timevar->elapsed, &start_time, &now);
  start_time = now;
  fputs_unlocked ("\nExecution times (seconds)\n", fp);
  for (id = 0; id < (unsigned int) TIMEVAR_LAST; ++id)
    {
      struct timevar_def *tv = &timevars[(timevar_id_t) id];
      const double tiny = 5e-3;
      if ((timevar_id_t) id == TV_TOTAL)
 continue;
      if (!tv->used)
 continue;
      if (tv->elapsed.user < tiny
   && tv->elapsed.sys < tiny
   && tv->elapsed.wall < tiny)
 continue;
      fprintf (fp, " %-22s:", tv->name);
      fprintf (fp, "%7.2f (%2.0f%%) usr",
        tv->elapsed.user,
        (total->user == 0 ? 0 : tv->elapsed.user / total->user) * 100);
      fprintf (fp, "%7.2f (%2.0f%%) sys",
        tv->elapsed.sys,
        (total->sys == 0 ? 0 : tv->elapsed.sys / total->sys) * 100);
      fprintf (fp, "%7.2f (%2.0f%%) wall",
        tv->elapsed.wall,
        (total->wall == 0 ? 0 : tv->elapsed.wall / total->wall) * 100);
      putc_unlocked ('\n', fp);
    }
  fputs_unlocked (" TOTAL                 :", fp);
  fprintf (fp, "%7.2f          ", total->user);
  fprintf (fp, "%7.2f          ", total->sys);
  fprintf (fp, "%7.2f\n", total->wall);
}
void
print_time (const char *str, long total)
{
  long all_time = get_run_time ();
  fprintf (stderr,
    "time in %s: %ld.%06ld (%ld%%)\n",
    str, total / 1000000, total % 1000000,
    all_time == 0 ? 0
    : (long) (((100.0 * (double) total) / (double) all_time) + .5));
}
static void general_init (const char *);
static void do_compile (void);
static void process_options (void);
static void backend_init (void);
static int lang_dependent_init (const char *);
static void init_asm_output (const char *);
static void finalize_toplev (void);
static void crash_signal (int) ;
static void setup_core_dumping (void);
static void compile_file (void);
static int print_single_switch (FILE *, int, int, const char *,
    const char *, const char *,
    const char *, const char *);
static void print_switch_values (FILE *, int, int, const char *,
     const char *, const char *);
static int set_yydebug;
static unsigned char no_backend;
const char *progname;
static const char **save_argv;
const char *main_input_filename;
location_t unknown_location = { ((void *)0), 0 };
location_t input_location;
struct line_maps line_table;
int no_new_pseudos;
struct file_stack *input_file_stack;
int input_file_stack_tick;
const char *dump_base_name;
const char *aux_base_name;
extern int target_flags;
int target_flags_explicit;
const struct gcc_debug_hooks *debug_hooks;
static const struct gcc_debug_hooks *default_debug_hooks;
int rtl_dump_and_exit;
int flag_print_asm_name;
enum graph_dump_types graph_dump_format;
const char *asm_file_name;
int optimize = 0;
int optimize_size = 0;
tree current_function_decl;
tree current_function_func_begin_label;
tree current_file_decl;
int in_system_header = 0;
int flag_detailed_statistics = 0;
const char *flag_random_seed;
unsigned local_tick;
int flag_signed_char;
int flag_short_enums;
int flag_pcc_struct_return = 1;
int flag_complex_divide_method = 0;
int flag_web = 2;
int flag_really_no_inline = 2;
int flag_gen_aux_info = 0;
const char *aux_info_file_name;
int flag_shlib;
enum tls_model flag_tls_default = TLS_MODEL_GLOBAL_DYNAMIC;
int flag_pedantic_errors = 0;
int flag_debug_asm = 0;
int flag_dump_rtl_in_asm = 0;
rtx stack_limit_rtx;
int flag_renumber_insns = 1;
enum pta_type flag_tree_points_to = PTA_NONE;
int flag_var_tracking = 2;
int align_loops_log;
int align_loops_max_skip;
int align_jumps_log;
int align_jumps_max_skip;
int align_labels_log;
int align_labels_max_skip;
int align_functions_log;
int force_align_functions_log;
typedef struct
{
  const char *string1;
  int *variable1;
  const int on_value;
}
lang_independent_options;
int flag_evaluation_order = 0;
const char *user_label_prefix;
static const param_info lang_independent_params[] = {
{ "max-inline-insns-single", 500, "The maximum number of instructions in a single function eligible for inlining" },
{ "max-inline-insns-auto", 120, "The maximum number of instructions when automatically inlining" },
{ "max-inline-insns-recursive", 500, "The maximum number of instructions inline function can grow to via recursive inlining" },
{ "max-inline-insns-recursive-auto", 500, "The maximum number of instructions non-inline function can grow to via recursive inlining" },
{ "max-inline-recursive-depth", 8, "The maximum depth of recursive inlining for inline functions" },
{ "max-inline-recursive-depth-auto", 8, "The maximum depth of recursive inlining for non-inline functions" },
{ "max-inline-insns-rtl", 600, "The maximum number of instructions for the RTL inliner" },
{ "max-delay-slot-insn-search", 100, "The maximum number of instructions to consider to fill a delay slot" },
{ "max-delay-slot-live-search", 333, "The maximum number of instructions to consider to find accurate live register information" },
{ "max-pending-list-length", 32, "The maximum length of scheduling's pending operations list" },
{ "large-function-insns", 3000, "The size of function body to be considered large" },
{ "large-function-growth", 100, "Maximal growth due to inlining of large function (in percent)" },
{ "inline-unit-growth", 50, "how much can given compilation unit grow because of the inlining (in percent)" },
{ "max-gcse-memory", 50 * 1024 * 1024, "The maximum amount of memory to be allocated by GCSE" },
{ "max-gcse-passes", 1, "The maximum number of passes to make when doing GCSE" },
{ "gcse-after-reload-partial-fraction", 3, "The threshold ratio for performing partial redundancy elimination          after reload." },
{ "gcse-after-reload-critical-fraction", 10, "The threshold ratio of critical edges execution count that permit          performing redundancy elimination after reload." },
{ "max-unrolled-insns", 200, "The maximum number of instructions to consider to unroll in a loop" },
{ "max-average-unrolled-insns", 80, "The maximum number of instructions to consider to unroll in a loop on average" },
{ "max-unroll-times", 8, "The maximum number of unrollings of a single loop" },
{ "max-peeled-insns", 400, "The maximum number of insns of a peeled loop" },
{ "max-peel-times", 16, "The maximum number of peelings of a single loop" },
{ "max-completely-peeled-insns", 400, "The maximum number of insns of a completely peeled loop" },
{ "max-completely-peel-times", 16, "The maximum number of peelings of a single loop that is peeled completely" },
{ "max-once-peeled-insns", 400, "The maximum number of insns of a peeled loop that rolls only once" },
{ "max-unswitch-insns", 50, "The maximum number of insns of an unswitched loop" },
{ "max-unswitch-level", 3, "The maximum number of unswitchings in a single loop" },
{ "max-sms-loop-number", -1, "Maximum number of loops to perform swing modulo scheduling on 	  (mainly for debugging)" },
{ "sms-max-ii-factor", 100, "A factor for tuning the upper bound that swing modulo scheduler uses 	  for scheduling a loop" },
{ "sms-dfa-history", 0, "The number of cycles the swing modulo scheduler considers when 	  checking conflicts using DFA" },
{ "sms-loop-average-count-threshold", 0, "A threshold on the average loop count considered by the swing modulo 	  scheduler" },
{ "hot-bb-count-fraction", 10000, "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot" },
{ "hot-bb-frequency-fraction", 1000, "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot" },
{ "tracer-dynamic-coverage-feedback", 95, "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available" },
{ "tracer-dynamic-coverage", 75, "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available" },
{ "tracer-max-code-growth", 100, "Maximal code growth caused by tail duplication (in percent)" },
{ "tracer-min-branch-ratio", 10, "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)" },
{ "tracer-min-branch-probability-feedback", 80, "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available" },
{ "tracer-min-branch-probability", 50, "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available" },
{ "max-crossjump-edges", 100, "The maximum number of incoming edges to consider for crossjumping" },
{ "max-cse-path-length", 10, "The maximum length of path considered in cse" },
{ "global-var-threshold", 500000, "Given N calls and V call-clobbered vars in a function.  Use .GLOBAL_VAR if NxV is larger than this limit" },
{ "max-cselib-memory-locations", 500, "The maximum memory locations recorded by cselib" },
{ "ggc-min-expand", 30, "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap" },
{ "ggc-min-heapsize", 4096, "Minimum heap size before we start collecting garbage, in kilobytes" },
{ "max-reload-search-insns", 100, "The maximum number of instructions to search backward when looking for equivalent reload" },
{ "max-aliased-vops", 500, "The maximum number of virtual operands allowed to represent aliases before triggering alias grouping." },
{ "max-sched-region-blocks", 10, "The maximum number of blocks in a region to be considered for interblock scheduling" },
{ "max-sched-region-insns", 100, "The maximum number of insns in a region to be considered for interblock scheduling" },
  { ((void *)0), 0, ((void *)0) }
};
static const struct
{
  const char *const name;
  const int value1;
  const char *const description;
}
target_switches[] = { { "80387", 0x00000001, "Use hardware fp" }, { "no-80387", -0x00000001, "Do not use hardware fp" }, { "hard-float", 0x00000001, "Use hardware fp" }, { "soft-float", -0x00000001, "Do not use hardware fp" }, { "no-soft-float", 0x00000001, "Use hardware fp" }, { "386", 0, "" }, { "486", 0, "" }, { "pentium", 0, "" }, { "pentiumpro", 0, "" }, { "intel-syntax", 0, "" }, { "no-intel-syntax", 0, "" }, { "rtd", 0x00000002, "Alternate calling convention" }, { "no-rtd", -0x00000002, "Use normal calling convention" }, { "align-double", 0x00000004, "Align some doubles on dword boundary" }, { "no-align-double", -0x00000004, "Align doubles on word boundary" }, { "svr3-shlib", 0x00000008, "Uninitialized locals in .bss" }, { "no-svr3-shlib", -0x00000008, "Uninitialized locals in .data" }, { "ieee-fp", 0x00000010, "Use IEEE math for fp comparisons" }, { "no-ieee-fp", -0x00000010, "Do not use IEEE math for fp comparisons" }, { "fp-ret-in-387", 0x00000020, "Return values of functions in FPU registers" }, { "no-fp-ret-in-387", -0x00000020 , "Do not return values of functions in FPU registers"}, { "no-fancy-math-387", 0x00000040, "Do not generate sin, cos, sqrt for FPU" }, { "fancy-math-387", -0x00000040, "Generate sin, cos, sqrt for FPU"}, { "omit-leaf-frame-pointer", 0x080, "Omit the frame pointer in leaf functions" }, { "no-omit-leaf-frame-pointer",-0x080, "" }, { "stack-arg-probe", 0x00000100, "Enable stack probing" }, { "no-stack-arg-probe", -0x00000100, "" }, { "windows", 0, 0 }, { "dll", 0, 0 }, { "align-stringops", -0x00000200, "Align destination of the string operations" }, { "no-align-stringops", 0x00000200, "Do not align destination of the string operations" }, { "inline-all-stringops", 0x00000400, "Inline all known string operations" }, { "no-inline-all-stringops", -0x00000400, "Do not inline all known string operations" }, { "push-args", -0x00000800, "Use push instructions to save outgoing arguments" }, { "no-push-args", 0x00000800, "Do not use push instructions to save outgoing arguments" }, { "accumulate-outgoing-args", 0x00001000, "Use push instructions to save outgoing arguments" }, { "no-accumulate-outgoing-args",-0x00001000, "Do not use push instructions to save outgoing arguments" }, { "mmx", 0x00002000, "Support MMX built-in functions" }, { "no-mmx", -0x00002000, "Do not support MMX built-in functions" }, { "3dnow", 0x00020000, "Support 3DNow! built-in functions" }, { "no-3dnow", -0x00020000, "Do not support 3DNow! built-in functions" }, { "sse", 0x00004000, "Support MMX and SSE built-in functions and code generation" }, { "no-sse", -0x00004000, "Do not support MMX and SSE built-in functions and code generation" }, { "sse2", 0x00008000, "Support MMX, SSE and SSE2 built-in functions and code generation" }, { "no-sse2", -0x00008000, "Do not support MMX, SSE and SSE2 built-in functions and code generation" }, { "sse3", 0x00010000, "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" }, { "no-sse3", -0x00010000, "Do not support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" }, { "128bit-long-double", 0x00080000, "sizeof(long double) is 16" }, { "96bit-long-double", -0x00080000, "sizeof(long double) is 12" }, { "64", 0x00100000, "Generate 64bit x86-64 code" }, { "32", -0x00100000, "Generate 32bit i386 code" }, { "ms-bitfields", 0x00200000, "Use native (MS) bitfield layout" }, { "no-ms-bitfields", -0x00200000, "Use gcc default bitfield layout" }, { "red-zone", -0x04000000, "Use red-zone in the x86-64 code" }, { "no-red-zone", 0x04000000, "Do not use red-zone in the x86-64 code" }, { "tls-direct-seg-refs", 0x00400000, "Use direct references against %gs when accessing tls data" }, { "no-tls-direct-seg-refs", -0x00400000, "Do not use direct references against %gs when accessing tls data" }, { "", 0 | 0 | (0x00000001 | 0x00000010 | 0x00000020) | 0x00400000, 0 }};
static const struct
{
  const char *const prefix;
  const char **const variable1;
  const char *const description;
  const char *const value1;
}
target_options[] = { { "tune=", &ix86_tune_string, "Schedule code for given CPU", 0}, { "fpmath=", &ix86_fpmath_string, "Generate floating point mathematics using given instruction set", 0}, { "arch=", &ix86_arch_string, "Generate code for given CPU", 0}, { "regparm=", &ix86_regparm_string, "Number of registers used to pass integer arguments", 0}, { "align-loops=", &ix86_align_loops_string, "Loop code aligned to this power of 2", 0}, { "align-jumps=", &ix86_align_jumps_string, "Jump targets are aligned to this power of 2", 0}, { "align-functions=", &ix86_align_funcs_string, "Function starts are aligned to this power of 2", 0}, { "preferred-stack-boundary=", &ix86_preferred_stack_boundary_string, "Attempt to keep stack aligned to this power of 2", 0}, { "branch-cost=", &ix86_branch_cost_string, "Branches are this expensive (1-5, arbitrary units)", 0}, { "cmodel=", &ix86_cmodel_string, "Use given x86-64 code model", 0}, { "debug-arg", &ix86_debug_arg_string, "" , 0}, { "debug-addr", &ix86_debug_addr_string, "" , 0}, { "asm=", &ix86_asm_string, "Use given assembler dialect", 0}, { "tls-dialect=", &ix86_tls_dialect_string, "Use given thread-local storage dialect", 0}, };
int warn_return_type;
FILE *asm_out_file;
FILE *aux_info_file;
FILE *dump_file = ((void *)0);
FILE *cgraph_dump_file = ((void *)0);
static const char *src_pwd;
unsigned char
set_src_pwd (const char *pwd)
{
  if (src_pwd)
    {
      if (strcmp (src_pwd, pwd) == 0)
 return 1;
      else
 return 0;
    }
  src_pwd = xstrdup (pwd);
  return 1;
}
const char *
get_src_pwd (void)
{
  if (! src_pwd)
    src_pwd = getpwd ();
   return src_pwd;
}
void
announce_function (tree decl)
{
  if (!quiet_flag)
    {
      if (rtl_dump_and_exit)
 verbatim ("%s ", ((const char *) (((decl)->decl.name))->identifier.id.str));
      else
 verbatim (" %s", lang_hooks.decl_printable_name (decl, 2));
      fflush (stderr);
      (global_dc->printer)->need_newline = 1;
      (global_dc)->last_function = current_function_decl;
    }
}
static void
randomize (void)
{
  if (!flag_random_seed)
    {
      unsigned long value1;
      static char random_seed[(8 * 4) / 4 + 3];
      {
  struct timeval tv;
  gettimeofday (&tv, ((void *)0));
 local_tick = tv.tv_sec * 1000 + tv.tv_usec / 1000;
      }
      value1 = local_tick ^ getpid ();
      sprintf (random_seed, "0x%lx", value1);
      flag_random_seed = random_seed;
    }
  else if (!local_tick)
    local_tick = -1;
}
int
read_integral_parameter (const char *p, const char *pname, const int defval)
{
  const char *endp = p;
  while (*endp)
    {
      if ((_sch_istable[(*endp) & 0xff] & (unsigned short)(_sch_isdigit)))
 endp++;
      else
 break;
    }
  if (*endp != 0)
    {
      if (pname != 0)
 error ("invalid option argument `%s'", pname);
      return defval;
    }
  return atoi (p);
}
int
floor_log2_wide (unsigned long x)
{
  int t=0;
  if (x == 0)
    return -1;
  if (sizeof (long) * 8 > 64)
    if (x >= (unsigned long) 1 << (t + 64))
      t += 64;
  if (sizeof (long) * 8 > 32)
    if (x >= ((unsigned long) 1) << (t + 32))
      t += 32;
  if (x >= ((unsigned long) 1) << (t + 16))
    t += 16;
  if (x >= ((unsigned long) 1) << (t + 8))
    t += 8;
  if (x >= ((unsigned long) 1) << (t + 4))
    t += 4;
  if (x >= ((unsigned long) 1) << (t + 2))
    t += 2;
  if (x >= ((unsigned long) 1) << (t + 1))
    t += 1;
  return t;
}
int
exact_log2_wide (unsigned long x)
{
  if (x == 0 || x != (x & -x))
    return -1;
  return floor_log2_wide (x);
}
static void
crash_signal (int signo)
{
  signal (signo, ((__sighandler_t) 0));
  internal_error ("%s", strsignal (signo));
}
static void
setup_core_dumping (void)
{
  signal (6, ((__sighandler_t) 0));
  {
    struct rlimit rlim;
    if (getrlimit (RLIMIT_CORE, &rlim) != 0)
      fatal_error ("getting core file size maximum limit: %m");
    rlim.rlim_cur = rlim.rlim_max;
    if (setrlimit (RLIMIT_CORE, &rlim) != 0)
      fatal_error ("setting core file size limit to maximum: %m");
  }
  (global_dc)->abort_on_error = 1;
}
void
strip_off_ending (char *name, int len)
{
  int i;
  for (i = 2; i < 6 && len > i; i++)
    {
      if (name[len - i] == '.')
 {
   name[len - i] = '\0';
   break;
 }
    }
}
void
output_quoted_string (FILE *asm_file, const char *string1)
{
  char c;
  putc_unlocked ('\"', asm_file);
  while ((c = *string1++) != 0)
    {
      if ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isprint)))
 {
   if (c == '\"' || c == '\\')
     putc_unlocked ('\\', asm_file);
   putc_unlocked (c, asm_file);
 }
      else
 fprintf (asm_file, "\\%03o", (unsigned char) c);
    }
  putc_unlocked ('\"', asm_file);
}
void
output_file_directive (FILE *asm_file, const char *input_name)
{
  int len;
  const char *na;
  if (input_name == ((void *)0))
    input_name = "<stdin>";
  len = strlen (input_name);
  na = input_name + len;
  while (na > input_name)
    {
      if (((na[-1]) == '/'))
 break;
      na--;
    }
  fprintf (asm_file, "\t.file\t");
  output_quoted_string (asm_file, na);
  fputc_unlocked ('\n', asm_file);
}
int
wrapup_global_declarations (tree *vec, int len)
{
  tree decl;
  int i;
  int reconsider;
  int output_something = 0;
  for (i = 0; i < len; i++)
    {
      decl = vec[i];
      if (((decl)->decl.defer_output) != 0)
 ((decl)->decl.defer_output) = 0;
      if (((enum tree_code) (decl)->common.code) == VAR_DECL && ((decl)->decl.size) == 0)
 lang_hooks.finish_incomplete_decl (decl);
    }
  do
    {
      reconsider = 0;
      for (i = 0; i < len; i++)
 {
   decl = vec[i];
   if (((decl)->common.asm_written_flag) || ((decl)->decl.external_flag))
     continue;
   if (((enum tree_code) (decl)->common.code) == VAR_DECL && ((decl)->common.static_flag))
     {
       struct cgraph_varpool_node *node;
       unsigned char needed = 1;
       node = cgraph_varpool_node (decl);
       if (flag_unit_at_a_time && node->finalized)
  needed = 0;
       else if ((flag_unit_at_a_time && !cgraph_global_info_ready)
         && (((decl)->common.used_flag)
      || ((decl_assembler_name (decl))->common.used_flag)))
              ;
       else if (node->needed)
              ;
       else if (((decl)->decl.comdat_flag))
  needed = 0;
       else if (((decl)->common.readonly_flag) && !((decl)->common.public_flag)
         && (optimize || !flag_keep_static_consts
      || ((decl)->decl.artificial_flag)))
  needed = 0;
       if (needed)
  {
    reconsider = 1;
    rest_of_decl_compilation (decl, ((void *)0), 1, 1);
  }
     }
 }
      if (reconsider)
 output_something = 1;
    }
  while (reconsider);
  return output_something;
}
void
check_global_declarations (tree *vec, int len)
{
  tree decl;
  int i;
  for (i = 0; i < len; i++)
    {
      decl = vec[i];
      if (((enum tree_code) (decl)->common.code) == VAR_DECL && ((decl)->common.static_flag)
   && ! ((decl)->common.asm_written_flag))
 set_decl_rtl (decl, (rtx) 0);
      if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL
   && ((decl)->decl.initial) == 0
   && ((decl)->decl.external_flag)
   && ! ((decl)->decl.artificial_flag)
   && ! ((decl)->common.public_flag)
   && (warn_unused_function
       || ((decl_assembler_name (decl))->common.static_flag)))
 {
   if (((decl_assembler_name (decl))->common.static_flag))
     pedwarn ("%J'%F' used but never defined", decl, decl);
   else
     warning ("%J'%F' declared `static' but never defined", decl, decl);
   ((decl)->common.public_flag) = 1;
   assemble_external (decl);
 }
      if (((warn_unused_function && ((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
    || (warn_unused_variable
        && ((enum tree_code) (decl)->common.code) == VAR_DECL && ! ((decl)->common.readonly_flag)))
   && ! ((decl)->decl.in_system_header_flag)
   && ! ((decl)->common.used_flag)
   && ! ((((decl)->decl.name))->common.used_flag)
   && ! ((decl)->decl.external_flag)
   && ! ((decl)->common.public_flag)
   && ! ((decl)->common.volatile_flag)
   && ! (((enum tree_code) (decl)->common.code) == VAR_DECL && ((decl)->decl.regdecl_flag))
   && lang_hooks.decls.warn_unused_global (decl))
 warning ("%J'%D' defined but not used", decl, decl);
      if ((global_dc)->diagnostic_count[(int) (DK_ERROR)] == 0 && (global_dc)->diagnostic_count[(int) (DK_SORRY)] == 0)
 {
   timevar_push (TV_SYMOUT);
   (*debug_hooks->global_decl) (decl);
   timevar_pop (TV_SYMOUT);
 }
    }
}
void
warn_deprecated_use (tree node)
{
  if (node == 0 || !warn_deprecated_decl)
    return;
  if ((tree_code_type[(int) (((enum tree_code) (node)->common.code))] == 'd'))
    {
      expanded_location xloc = (((node)->decl.locus));
      warning ("`%s' is deprecated (declared at %s:%d)",
        ((const char *) (((node)->decl.name))->identifier.id.str),
        xloc.file, xloc.line);
    }
  else if ((tree_code_type[(int) (((enum tree_code) (node)->common.code))] == 't'))
    {
      const char *what = ((void *)0);
      tree decl = ((node)->common.chain);
      if (((enum tree_code) (((node)->type.name))->common.code) == IDENTIFIER_NODE)
 what = ((const char *) (((node)->type.name))->identifier.id.str);
      else if (((enum tree_code) (((node)->type.name))->common.code) == TYPE_DECL
        && ((((node)->type.name))->decl.name))
 what = ((const char *) (((((node)->type.name))->decl.name))->identifier.id.str);
      if (decl)
 {
   expanded_location xloc
     = (((decl)->decl.locus));
   if (what)
     warning ("`%s' is deprecated (declared at %s:%d)", what,
         xloc.file, xloc.line);
   else
     warning ("type is deprecated (declared at %s:%d)",
       xloc.file, xloc.line);
 }
      else
 {
   if (what)
     warning ("type is deprecated");
   else
     warning ("`%s' is deprecated", what);
 }
    }
}
void
push_srcloc (const char *file, int line)
{
  struct file_stack *fs;
  fs = xmalloc (sizeof (struct file_stack));
  fs->location = input_location;
  fs->next = input_file_stack;
  (((input_location)).file) = file;
  (((input_location)).line) = line;
  input_file_stack = fs;
  input_file_stack_tick++;
}
void
pop_srcloc (void)
{
  struct file_stack *fs;
  fs = input_file_stack;
  input_location = fs->location;
  input_file_stack = fs->next;
  free (fs);
  input_file_stack_tick++;
}
static void
compile_file (void)
{
  init_final (main_input_filename);
  coverage_init (aux_base_name);
  timevar_push (TV_PARSE);
  lang_hooks.parse_file (set_yydebug);
  lang_hooks.clear_binding_stack ();
  timevar_pop (TV_PARSE);
  if (flag_syntax_only)
    return;
  lang_hooks.decls.final_write_globals ();
  cgraph_varpool_assemble_pending_decls ();
  coverage_finish ();
  weak_finish ();
  timevar_push (TV_SYMOUT);
  if (dwarf2out_do_frame ())
    dwarf2out_frame_finish ();
  (*debug_hooks->finish) (main_input_filename);
  timevar_pop (TV_SYMOUT);
  dw2_output_indirect_constants ();
  if (!flag_no_ident)
    fprintf (asm_out_file, "%s\"GCC: (GNU) %s\"\n",
      "\t.ident\t", version_string);
  targetm.asm_out.file_end ();
}
void
display_target_options (void)
{
  int undoc, i;
  static unsigned char displayed = 0;
  if (displayed)
    return;
  displayed = 1;
  if ((sizeof (target_switches) / sizeof ((target_switches)[0])) > 1
      || (sizeof (target_options) / sizeof ((target_options)[0])) > 1
      )
    {
      int doc = 0;
      undoc = 0;
      printf ("\nTarget specific options:\n");
      for (i = (sizeof (target_switches) / sizeof ((target_switches)[0])); i--;)
 {
   const char *option = target_switches[i].name;
   const char *description = target_switches[i].description;
   if (option == ((void *)0) || *option == 0)
     continue;
   else if (description == ((void *)0))
     {
       undoc = 1;
       if (extra_warnings)
  printf ("  -m%-23s [undocumented]\n", option);
     }
   else if (*description != 0)
     doc += printf ("  -m%-23s %s\n", option, description);
 }
      for (i = (sizeof (target_options) / sizeof ((target_options)[0])); i--;)
 {
   const char *option = target_options[i].prefix;
   const char *description = target_options[i].description;
   if (option == ((void *)0) || *option == 0)
     continue;
   else if (description == ((void *)0))
     {
       undoc = 1;
       if (extra_warnings)
  printf ("  -m%-23s [undocumented]\n", option);
     }
   else if (*description != 0)
     doc += printf ("  -m%-23s %s\n", option, description);
 }
      if (undoc)
 {
   if (doc)
     printf ("\nThere are undocumented target specific options as well.\n");
   else
     printf ("  They exist, but they are not documented.\n");
 }
    }
}
void
decode_d_option (const char *arg)
{
  int c;
  while (*arg)
    switch (c = *arg++)
      {
      case 'A':
 flag_debug_asm = 1;
 break;
      case 'p':
 flag_print_asm_name = 1;
 break;
      case 'P':
 flag_dump_rtl_in_asm = 1;
 flag_print_asm_name = 1;
 break;
      case 'v':
 graph_dump_format = vcg;
 break;
      case 'x':
 rtl_dump_and_exit = 1;
 break;
      case 'y':
 set_yydebug = 1;
 break;
      case 'D':
      case 'I':
 break;
      case 'H':
 setup_core_dumping();
 break;
      case 'a':
      default:
 if (!enable_rtl_dump_file (c))
   warning ("unrecognized gcc debugging option: %c", c);
 break;
      }
}
const char *const debug_type_names[] =
{
  "none", "stabs", "coff", "dwarf-1", "dwarf-2", "xcoff", "vms"
};
void
set_target_switch (const char *name)
{
  size_t j;
  int valid_target_option = 0;
  for (j = 0; j < (sizeof (target_switches) / sizeof ((target_switches)[0])); j++)
    if (!strcmp (target_switches[j].name, name))
      {
 if (target_switches[j].value1 < 0)
   target_flags &= ~-target_switches[j].value1;
 else
   target_flags |= target_switches[j].value1;
 if (name[0] != 0)
   {
     if (target_switches[j].value1 < 0)
       target_flags_explicit |= -target_switches[j].value1;
     else
       target_flags_explicit |= target_switches[j].value1;
   }
 valid_target_option = 1;
      }
  if (!valid_target_option)
    for (j = 0; j < (sizeof (target_options) / sizeof ((target_options)[0])); j++)
      {
 int len = strlen (target_options[j].prefix);
 if (target_options[j].value1)
   {
     if (!strcmp (target_options[j].prefix, name))
       {
  *target_options[j].variable1 = target_options[j].value1;
  valid_target_option = 1;
       }
   }
 else
   {
     if (!strncmp (target_options[j].prefix, name, len))
       {
  *target_options[j].variable1 = name + len;
  valid_target_option = 1;
       }
   }
      }
  if (!valid_target_option)
    error ("invalid option `%s'", name);
}
void
print_version (FILE *file, const char *indent1)
{
  fnotice (file,
    "%s%s%s version %s (%s) compiled by CC.\n"
    , indent1, *indent1 != 0 ? " " : "",
    lang_hooks.name, version_string, "i686-pc-linux-gnu",
    indent1, "4.9.2 20150212 (Red Hat 4.9.2-6)");
  fnotice (file, "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n",
    indent1, *indent1 != 0 ? " " : "",
    (compiler_params[(int) GGC_MIN_EXPAND].value1), (compiler_params[(int) GGC_MIN_HEAPSIZE].value1));
}
static int
print_single_switch (FILE *file, int pos, int max,
       const char *indent1, const char *sep, const char *term,
       const char *type, const char *name)
{
  int len = strlen (sep) + strlen (type) + strlen (name);
  if (pos != 0
      && pos + len > max)
    {
      fprintf (file, "%s", term);
      pos = 0;
    }
  if (pos == 0)
    {
      fprintf (file, "%s", indent1);
      pos = strlen (indent1);
    }
  fprintf (file, "%s%s%s", sep, type, name);
  pos += len;
  return pos;
}
static void
print_switch_values (FILE *file, int pos, int max,
       const char *indent1, const char *sep, const char *term)
{
  size_t j;
  const char **p;
  randomize ();
  pos = print_single_switch (file, pos, max, indent1, *indent1 ? " " : "", term,
        "options passed: ", "");
  for (p = &save_argv[1]; *p != ((void *)0); p++)
    if (**p == '-')
      {
 if (strcmp (*p, "-o") == 0)
   {
     if (p[1] != ((void *)0))
       p++;
     continue;
   }
 if (strcmp (*p, "-quiet") == 0)
   continue;
 if (strcmp (*p, "-version") == 0)
   continue;
 if ((*p)[1] == 'd')
   continue;
 pos = print_single_switch (file, pos, max, indent1, sep, term, *p, "");
      }
  if (pos > 0)
    fprintf (file, "%s", term);
  pos = print_single_switch (file, 0, max, indent1, *indent1 ? " " : "", term,
        "options enabled: ", "");
  for (j = 0; j < cl_options_count; j++)
    {
      if (!cl_options[j].flag_var
   || !(cl_options[j].flags & (1 << 23)))
 continue;
      if (cl_options[j].has_set_value)
 {
   if (*cl_options[j].flag_var != cl_options[j].set_value)
     continue;
 }
      else
 {
   if (!*cl_options[j].flag_var)
     continue;
 }
      pos = print_single_switch (file, pos, max, indent1, sep, term,
     "", cl_options[j].opt_text);
    }
  for (j = 0; j < (sizeof (target_switches) / sizeof ((target_switches)[0])); j++)
    if (target_switches[j].name[0] != '\0'
 && target_switches[j].value1 > 0
 && ((target_switches[j].value1 & target_flags)
     == target_switches[j].value1))
      {
 pos = print_single_switch (file, pos, max, indent1, sep, term,
       "-m", target_switches[j].name);
      }
  for (j = 0; j < (sizeof (target_options) / sizeof ((target_options)[0])); j++)
    if (*target_options[j].variable1 != ((void *)0))
      {
 char prefix[256];
 sprintf (prefix, "-m%s", target_options[j].prefix);
 pos = print_single_switch (file, pos, max, indent1, sep, term,
       prefix, *target_options[j].variable1);
      }
  fprintf (file, "%s", term);
}
static void
init_asm_output (const char *name)
{
  if (name == ((void *)0) && asm_file_name == 0)
    asm_out_file = stdout;
  else
    {
      if (asm_file_name == 0)
 {
   int len = strlen (dump_base_name);
   char *dumpname = xmalloc (len + 6);
   memcpy (dumpname, dump_base_name, len + 1);
   strip_off_ending (dumpname, len);
   strcat (dumpname, ".s");
   asm_file_name = dumpname;
 }
      if (!strcmp (asm_file_name, "-"))
 asm_out_file = stdout;
      else
 asm_out_file = fopen (asm_file_name, "w+b");
      if (asm_out_file == 0)
 fatal_error ("can't open %s for writing: %m", asm_file_name);
    }
  if (!flag_syntax_only)
    {
      targetm.asm_out.file_start ();
      if (flag_verbose_asm)
 {
   print_version (asm_out_file, "#");
   print_switch_values (asm_out_file, 0, 75,
          "#", " ", "\n");
   fprintf (asm_out_file, "\n");
 }
    }
}
void *
default_get_pch_validity (size_t *len)
{
  size_t i;
  char *result, *r;
  *len = sizeof (target_flags) + 2;
  for (i = 0; i < (sizeof (target_options) / sizeof ((target_options)[0])); i++)
    {
      *len += 1;
      if (*target_options[i].variable1)
 *len += strlen (*target_options[i].variable1);
    }
  result = r = xmalloc (*len);
  r[0] = flag_pic;
  r[1] = flag_pie;
  r += 2;
  memcpy (r, &target_flags, sizeof (target_flags));
  r += sizeof (target_flags);
  for (i = 0; i < (sizeof (target_options) / sizeof ((target_options)[0])); i++)
    {
      const char *str = *target_options[i].variable1;
      size_t l;
      if (! str)
 str = "";
      l = strlen (str) + 1;
      memcpy (r, str, l);
      r += l;
    }
  return result;
}
const char *
default_pch_valid_p (const void *data_p, size_t len)
{
  const char *data = (const char *)data_p;
  const char *flag_that_differs = ((void *)0);
  size_t i;
  if (data[0] != flag_pic)
    return "created and used with different settings of -fpic";
  if (data[1] != flag_pie)
    return "created and used with different settings of -fpie";
  data += 2;
  if (memcmp (data, &target_flags, sizeof (target_flags)) != 0)
    {
      for (i = 0; i < (sizeof (target_switches) / sizeof ((target_switches)[0])); i++)
 {
   int bits;
   int tf;
   memcpy (&tf, data, sizeof (target_flags));
   bits = target_switches[i].value1;
   if (bits < 0)
     bits = -bits;
   if ((target_flags & bits) != (tf & bits))
     {
       flag_that_differs = target_switches[i].name;
       goto make_message;
     }
 }
      abort ();
    }
  data += sizeof (target_flags);
  len -= sizeof (target_flags);
  for (i = 0; i < (sizeof (target_options) / sizeof ((target_options)[0])); i++)
    {
      const char *str = *target_options[i].variable1;
      size_t l;
      if (! str)
 str = "";
      l = strlen (str) + 1;
      if (len < l || memcmp (data, str, l) != 0)
 {
   flag_that_differs = target_options[i].prefix;
   goto make_message;
 }
      data += l;
      len -= l;
    }
  return ((void *)0);
 make_message:
  {
    char *r;
    asprintf (&r, "created and used with differing settings of `-m%s'",
    flag_that_differs);
    if (r == ((void *)0))
      return "out of memory";
    return r;
  }
}
static unsigned char
default_tree_printer (pretty_printer * pp, text_info *text)
{
  switch (*text->format_spec)
    {
    case 'D':
    case 'F':
    case 'T':
      {
        tree t = __builtin_va_arg(*text->args_ptr,tree1);
        const char *n = ((t)->decl.name)
          ? lang_hooks.decl_printable_name (t, 2)
          : "<anonymous>";
        pp_base_string ((pp), n);
      }
      return 1;
    default:
      return 0;
    }
}
static void
general_init (const char *argv0)
{
  const char *p;
  p = argv0 + strlen (argv0);
  while (p != argv0 && !((p[-1]) == '/'))
    --p;
  progname = p;
  xmalloc_set_program_name (progname);
  hex_init ();
  gcc_init_libintl ();
  diagnostic_initialize (global_dc);
  (global_dc->printer)->format_decoder = &default_tree_printer;
  signal (11, crash_signal);
  signal (4, crash_signal);
  signal (7, crash_signal);
  signal (6, crash_signal);
  signal (8, crash_signal);
  (*host_hooks.extra_signals)();
  init_ggc ();
  init_stringpool ();
  linemap_init (&line_table);
  init_ttree ();
  init_reg_sets ();
  add_params (lang_independent_params, LAST_PARAM);
  init_ggc_heuristics();
  init_tree_optimization_passes ();
}
static void
process_options (void)
{
  no_backend = lang_hooks.post_options (&main_input_filename);
  (((input_location)).file) = main_input_filename;
  override_options ();
  if (flag_short_enums == 2)
    flag_short_enums = targetm.default_short_enums ();
  if (aux_base_name)
    ;
  else if (main_input_filename)
    {
      char *name = xstrdup (lbasename (main_input_filename));
      strip_off_ending (name, strlen (name));
      aux_base_name = name;
    }
  else
    aux_base_name = "gccaux";
  if (align_loops <= 0) align_loops = 1;
  if (align_loops_max_skip > align_loops || !align_loops)
    align_loops_max_skip = align_loops - 1;
  align_loops_log = floor_log2_wide ((unsigned long) (align_loops * 2 - 1));
  if (align_jumps <= 0) align_jumps = 1;
  if (align_jumps_max_skip > align_jumps || !align_jumps)
    align_jumps_max_skip = align_jumps - 1;
  align_jumps_log = floor_log2_wide ((unsigned long) (align_jumps * 2 - 1));
  if (align_labels <= 0) align_labels = 1;
  align_labels_log = floor_log2_wide ((unsigned long) (align_labels * 2 - 1));
  if (align_labels_max_skip > align_labels || !align_labels)
    align_labels_max_skip = align_labels - 1;
  if (align_functions <= 0) align_functions = 1;
  align_functions_log = floor_log2_wide ((unsigned long) (align_functions * 2 - 1));
  if (flag_unroll_all_loops)
    flag_unroll_loops = 1;
  if (flag_unroll_loops)
    {
      flag_old_unroll_loops = 0;
      flag_old_unroll_all_loops = 0;
    }
  if (flag_old_unroll_all_loops)
    flag_old_unroll_loops = 1;
  if (flag_old_unroll_loops)
    {
      flag_strength_reduce = 1;
      flag_rerun_cse_after_loop = 1;
    }
  if (flag_unroll_loops || flag_peel_loops)
    flag_rerun_cse_after_loop = 1;
  if (flag_loop_optimize2)
    flag_loop_optimize = 0;
  if (flag_move_loop_invariants
      || flag_unswitch_loops
      || flag_peel_loops
      || flag_unroll_loops
      || flag_branch_on_count_reg)
    flag_loop_optimize2 = 1;
  if (flag_non_call_exceptions)
    flag_asynchronous_unwind_tables = 1;
  if (flag_asynchronous_unwind_tables)
    flag_unwind_tables = 1;
  if (flag_unit_at_a_time && ! lang_hooks.callgraph.expand_function)
    flag_unit_at_a_time = 0;
  if (flag_value_profile_transformations)
    flag_profile_values = 1;
  if (flag_delayed_branch)
    warning ("this target machine does not have delayed branches");
  if (flag_tree_based_profiling && flag_test_coverage)
    sorry ("test-coverage not yet implemented in trees.");
  if (flag_tree_based_profiling && flag_profile_values)
    sorry ("value-based profiling not yet implemented in trees.");
  user_label_prefix = "";
  if (flag_leading_underscore != -1)
    {
      if (user_label_prefix[0] == 0 ||
   (user_label_prefix[0] == '_' && user_label_prefix[1] == 0))
 {
   user_label_prefix = flag_leading_underscore ? "_" : "";
 }
      else
 warning ("-f%sleading-underscore not supported on this target machine",
   flag_leading_underscore ? "" : "no-");
    }
  if (version_flag)
    {
      print_version (stderr, "");
      if (! quiet_flag)
 print_switch_values (stderr, 0, 75, "", " ", "\n");
    }
  if (flag_syntax_only)
    {
      write_symbols = NO_DEBUG;
      profile_flag = 0;
    }
  if (debug_info_level == DINFO_LEVEL_NONE)
    write_symbols = NO_DEBUG;
  if (DWARF2_DEBUG == NO_DEBUG)
    default_debug_hooks = &do_nothing_debug_hooks;
  else if (DWARF2_DEBUG == DBX_DEBUG)
    default_debug_hooks = &dbx_debug_hooks;
  else if (DWARF2_DEBUG == DWARF2_DEBUG)
    default_debug_hooks = &dwarf2_debug_hooks;
  if (write_symbols == NO_DEBUG)
    debug_hooks = &do_nothing_debug_hooks;
  else if (write_symbols == DBX_DEBUG)
    debug_hooks = &dbx_debug_hooks;
  else if (write_symbols == DWARF2_DEBUG)
    debug_hooks = &dwarf2_debug_hooks;
  else
    error ("target system does not support the \"%s\" debug format",
    debug_type_names[write_symbols]);
  if (debug_info_level < DINFO_LEVEL_NORMAL
      || debug_hooks->var_location == do_nothing_debug_hooks.var_location)
    {
      if (flag_var_tracking == 1)
        {
   if (debug_info_level < DINFO_LEVEL_NORMAL)
     warning ("variable tracking requested, but useless unless producing debug info");
   else
     warning ("variable tracking requested, but not supported by this debug format");
 }
      flag_var_tracking = 0;
    }
  if (flag_rename_registers == 2)
    flag_rename_registers = default_debug_hooks->var_location
           != do_nothing_debug_hooks.var_location;
  if (flag_web == 2)
    flag_web = optimize >= 2 && (default_debug_hooks->var_location
                != do_nothing_debug_hooks.var_location);
  if (flag_var_tracking == 2)
    flag_var_tracking = optimize >= 1;
  if (flag_gen_aux_info)
    {
      aux_info_file = fopen (aux_info_file_name, "w");
      if (aux_info_file == 0)
 fatal_error ("can't open %s: %m", aux_info_file_name);
    }
  if (! targetm.have_named_sections)
    {
      if (flag_function_sections)
 {
   warning ("-ffunction-sections not supported for this target");
   flag_function_sections = 0;
 }
      if (flag_data_sections)
 {
   warning ("-fdata-sections not supported for this target");
   flag_data_sections = 0;
 }
    }
  if (flag_function_sections && profile_flag)
    {
      warning ("-ffunction-sections disabled; it makes profiling impossible");
      flag_function_sections = 0;
    }
  if (flag_prefetch_loop_arrays && !((x86_prefetch_sse) || ((target_flags & 0x00020000) != 0)))
    {
      warning ("-fprefetch-loop-arrays not supported for this target (try -march switches)");
      flag_prefetch_loop_arrays = 0;
    }
  if (flag_prefetch_loop_arrays && optimize_size)
    {
      warning ("-fprefetch-loop-arrays is not supported with -Os");
      flag_prefetch_loop_arrays = 0;
    }
  if (flag_signaling_nans)
    flag_trapping_math = 1;
}
static void
backend_init (void)
{
  init_adjust_machine_modes ();
  init_emit_once (debug_info_level == DINFO_LEVEL_NORMAL
    || debug_info_level == DINFO_LEVEL_VERBOSE
      || flag_test_coverage
      || warn_notreached);
  init_regs ();
  init_fake_stack_mems ();
  init_alias_once ();
  init_loop ();
  init_reload ();
  init_function_once ();
  init_varasm_once ();
  init_dummy_function_start ();
  init_expmed ();
  if (flag_caller_saves)
    init_caller_save ();
  expand_dummy_function_end ();
}
static int
lang_dependent_init (const char *name)
{
  location_t save_loc = input_location;
  if (dump_base_name == 0)
    dump_base_name = name ? name : "gccdump";
  (((input_location)).file) = "<built-in>";
  (((input_location)).line) = 0;
  if (lang_hooks.init () == 0)
    return 0;
  input_location = save_loc;
  init_asm_output (name);
  init_eh ();
  init_optabs ();
  init_optimization_passes ();
  init_dummy_function_start ();
  init_expr_once ();
  expand_dummy_function_end ();
  timevar_push (TV_SYMOUT);
  if (dwarf2out_do_frame ())
    dwarf2out_frame_init ();
  (*debug_hooks->init) (name);
  timevar_pop (TV_SYMOUT);
  return 1;
}
static void
finalize_toplev (void)
{
  if (flag_gen_aux_info)
    {
      fclose (aux_info_file);
      if ((global_dc)->diagnostic_count[(int) (DK_ERROR)])
 unlink (aux_info_file_name);
    }
  if (asm_out_file)
    {
      if (ferror (asm_out_file) != 0)
 fatal_error ("error writing to %s: %m", asm_file_name);
      if (fclose (asm_out_file) != 0)
 fatal_error ("error closing %s: %m", asm_file_name);
    }
  finish_optimization_passes ();
  if (mem_report)
    {
      ggc_print_statistics ();
      stringpool_statistics ();
      dump_tree_statistics ();
      dump_rtx_statistics ();
      dump_varray_statistics ();
      dump_alloc_pool_statistics ();
      dump_ggc_loc_statistics ();
    }
  free_reg_info ();
  lang_hooks.finish ();
}
static void
do_compile (void)
{
  if (time_report || !quiet_flag || flag_detailed_statistics)
    timevar_init ();
  timevar_start (TV_TOTAL);
  process_options ();
  if (!(global_dc)->diagnostic_count[(int) (DK_ERROR)])
    {
      if (!no_backend)
 backend_init ();
      if (lang_dependent_init (main_input_filename))
 compile_file ();
      finalize_toplev ();
    }
  timevar_stop (TV_TOTAL);
  timevar_print (stderr);
}
int
toplev_main (unsigned int argc, const char **argv)
{
  save_argv = argv;
  general_init (argv[0]);
  decode_options (argc, argv);
  randomize ();
  if (!exit_after_options)
    do_compile ();
  if ((global_dc)->diagnostic_count[(int) (DK_ERROR)] || (global_dc)->diagnostic_count[(int) (DK_SORRY)])
    return (1);
  return (0);
}
static int count_insns (basic_block);
static unsigned char ignore_bb_p (basic_block);
static unsigned char better_p (edge, edge);
static edge find_best_successor (basic_block);
static edge find_best_predecessor (basic_block);
static int find_trace (basic_block, basic_block *);
static void tail_duplicate (void);
static void layout_superblocks (void);
static int probability_cutoff;
static int branch_ratio_cutoff;
static unsigned char
ignore_bb_p (basic_block bb)
{
  if (bb->index < 0)
    return 1;
  if (!maybe_hot_bb_p (bb))
    return 1;
  return 0;
}
static int
count_insns (basic_block bb)
{
  rtx insn;
  int n = 0;
  for (insn = (bb)->head_;
       insn != ((((bb)->end_)->u.fld[2]).rtx1);
       insn = (((insn)->u.fld[2]).rtx1))
    if (active_insn_p (insn))
      n++;
  return n;
}
static unsigned char
better_p (edge e1, edge e2)
{
  if (e1->count != e2->count)
    return e1->count > e2->count;
  if (e1->src->frequency * e1->probability !=
      e2->src->frequency * e2->probability)
    return (e1->src->frequency * e1->probability
     > e2->src->frequency * e2->probability);
  if (e1->src != e2->src)
    return e1->src->index > e2->src->index;
  return e1->dest->index > e2->dest->index;
}
static edge
find_best_successor (basic_block bb)
{
  edge e;
  edge best = ((void *)0);
  for (e = bb->succ; e; e = e->succ_next)
    if (!best || better_p (e, best))
      best = e;
  if (!best || ignore_bb_p (best->dest))
    return ((void *)0);
  if (best->probability <= probability_cutoff)
    return ((void *)0);
  return best;
}
static edge
find_best_predecessor (basic_block bb)
{
  edge e;
  edge best = ((void *)0);
  for (e = bb->pred; e; e = e->pred_next)
    if (!best || better_p (e, best))
      best = e;
  if (!best || ignore_bb_p (best->src))
    return ((void *)0);
  if ((((best)->src->frequency * (best)->probability + 10000 / 2) / 10000) * 10000
      < bb->frequency * branch_ratio_cutoff)
    return ((void *)0);
  return best;
}
static int
find_trace (basic_block bb, basic_block *trace)
{
  int i = 0;
  edge e;
  if (dump_file)
    fprintf (dump_file, "Trace seed %i [%i]", bb->index, bb->frequency);
  while ((e = find_best_predecessor (bb)) != ((void *)0))
    {
      basic_block bb2 = e->src;
      if ((bb2->rbi->visited || bb2->rbi->next) || (e->flags & (32 | (2 | 4 | 8)))
   || find_best_successor (bb2) != e)
 break;
      if (dump_file)
 fprintf (dump_file, ",%i [%i]", bb->index, bb->frequency);
      bb = bb2;
    }
  if (dump_file)
    fprintf (dump_file, " forward %i [%i]", bb->index, bb->frequency);
  trace[i++] = bb;
  while ((e = find_best_successor (bb)) != ((void *)0))
    {
      bb = e->dest;
      if ((bb->rbi->visited || bb->rbi->next) || (e->flags & (32 | (2 | 4 | 8)))
   || find_best_predecessor (bb) != e)
 break;
      if (dump_file)
 fprintf (dump_file, ",%i [%i]", bb->index, bb->frequency);
      trace[i++] = bb;
    }
  if (dump_file)
    fprintf (dump_file, "\n");
  return i;
}
static void
tail_duplicate (void)
{
  fibnode_t *blocks = xcalloc (last_basic_block, sizeof (fibnode_t));
  basic_block *trace = xmalloc (sizeof (basic_block) * n_basic_blocks);
  int *counts = xmalloc (sizeof (int) * last_basic_block);
  int ninsns = 0, nduplicated = 0;
  gcov_type weighted_insns = 0, traced_insns = 0;
  fibheap_t heap = fibheap_new ();
  gcov_type cover_insns;
  int max_dup_insns;
  basic_block bb;
  if (profile_info && flag_branch_probabilities)
    probability_cutoff = (compiler_params[(int) TRACER_MIN_BRANCH_PROBABILITY_FEEDBACK].value1);
  else
    probability_cutoff = (compiler_params[(int) TRACER_MIN_BRANCH_PROBABILITY].value1);
  probability_cutoff = 10000 / 100 * probability_cutoff;
  branch_ratio_cutoff =
    (10000 / 100 * (compiler_params[(int) TRACER_MIN_BRANCH_RATIO].value1));
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    {
      int n = count_insns (bb);
      if (!ignore_bb_p (bb))
 blocks[bb->index] = fibheap_insert (heap, -bb->frequency,
         bb);
      counts [bb->index] = n;
      ninsns += n;
      weighted_insns += n * bb->frequency;
    }
  if (profile_info && flag_branch_probabilities)
    cover_insns = (compiler_params[(int) TRACER_DYNAMIC_COVERAGE_FEEDBACK].value1);
  else
    cover_insns = (compiler_params[(int) TRACER_DYNAMIC_COVERAGE].value1);
  cover_insns = (weighted_insns * cover_insns + 50) / 100;
  max_dup_insns = (ninsns * (compiler_params[(int) TRACER_MAX_CODE_GROWTH].value1) + 50) / 100;
  while (traced_insns < cover_insns && nduplicated < max_dup_insns
         && !fibheap_empty (heap))
    {
      basic_block bb = fibheap_extract_min (heap);
      int n, pos;
      if (!bb)
 break;
      blocks[bb->index] = ((void *)0);
      if (ignore_bb_p (bb))
 continue;
      if ((bb->rbi->visited || bb->rbi->next))
 abort ();
      n = find_trace (bb, trace);
      bb = trace[0];
      traced_insns += bb->frequency * counts [bb->index];
      if (blocks[bb->index])
 {
   fibheap_delete_node (heap, blocks[bb->index]);
   blocks[bb->index] = ((void *)0);
 }
      for (pos = 1; pos < n; pos++)
 {
   basic_block bb2 = trace[pos];
   if (blocks[bb2->index])
     {
       fibheap_delete_node (heap, blocks[bb2->index]);
       blocks[bb2->index] = ((void *)0);
     }
   traced_insns += bb2->frequency * counts [bb2->index];
   if (bb2->pred && bb2->pred->pred_next
       && can_duplicate_block_p (bb2))
     {
       edge e = bb2->pred;
       basic_block old = bb2;
       while (e->src != bb)
  e = e->pred_next;
       nduplicated += counts [bb2->index];
       bb2 = duplicate_block (bb2, e);
       blocks[old->index] =
  fibheap_insert (heap, -old->frequency, old);
       if (dump_file)
  fprintf (dump_file, "Duplicated %i as %i [%i]\n",
    old->index, bb2->index, bb2->frequency);
     }
   bb->rbi->next = bb2;
   bb2->rbi->visited = 1;
   bb = bb2;
   if (ignore_bb_p (bb))
     break;
 }
      if (dump_file)
 fprintf (dump_file, " covered now %.1f\n\n",
   traced_insns * 100.0 / weighted_insns);
    }
  if (dump_file)
    fprintf (dump_file, "Duplicated %i insns (%i%%)\n", nduplicated,
      nduplicated * 100 / ninsns);
  free (blocks);
  free (trace);
  free (counts);
  fibheap_delete (heap);
}
static void
layout_superblocks (void)
{
  basic_block end = ENTRY_BLOCK_PTR->succ->dest;
  basic_block bb = ENTRY_BLOCK_PTR->succ->dest->next_bb;
  while (bb != EXIT_BLOCK_PTR)
    {
      edge e, best = ((void *)0);
      while (end->rbi->next)
 end = end->rbi->next;
      for (e = end->succ; e; e = e->succ_next)
 if (e->dest != EXIT_BLOCK_PTR
     && e->dest != ENTRY_BLOCK_PTR->succ->dest
     && !e->dest->rbi->visited
     && (!best || (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000) > (((best)->src->frequency * (best)->probability + 10000 / 2) / 10000)))
   best = e;
      if (best)
 {
   end->rbi->next = best->dest;
   best->dest->rbi->visited = 1;
 }
      else
 for (; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
   {
     if (!bb->rbi->visited)
       {
  end->rbi->next = bb;
  bb->rbi->visited = 1;
  break;
       }
   }
    }
}
void
tracer (void)
{
  if (n_basic_blocks <= 1)
    return;
  timevar_push (TV_TRACER);
  cfg_layout_initialize ();
  mark_dfs_back_edges ();
  if (dump_file)
    dump_flow_info (dump_file);
  tail_duplicate ();
  layout_superblocks ();
  if (dump_file)
    dump_flow_info (dump_file);
  cfg_layout_finalize ();
  cleanup_cfg (1);
  timevar_pop (TV_TRACER);
}
extern int _obstack_allocated_p (struct obstack *h, void *obj);
static int next_decl_uid;
static int next_type_uid = 1;
struct type_hash
{
  unsigned long hash;
  tree type;
};
unsigned binfo_lang_slots;
static
     htab_t type_hash_table;
static void set_type_quals (tree, int);
static int type_hash_eq (const void *, const void *);
static hashval_t type_hash_hash (const void *);
static void print_type_hash_statistics (void);
static void finish_vector_type (tree);
static int type_hash_marked_p (const void *);
static unsigned int type_hash_list (tree, hashval_t);
static unsigned int attribute_hash_list (tree, hashval_t);
tree global_trees[TI_MAX];
tree integer_types[itk_none];
void
init_ttree (void)
{
  type_hash_table = htab_create_alloc (1000, type_hash_hash, type_hash_eq, 0, ggc_calloc, ((void *)0))
                         ;
}
tree
decl_assembler_name (tree decl)
{
  if (!((decl)->decl.assembler_name != (tree) ((void *)0)))
    lang_hooks.set_decl_assembler_name (decl);
  return (decl)->decl.assembler_name;
}
size_t
tree_size (tree node)
{
  enum tree_code code = ((enum tree_code) (node)->common.code);
  switch (tree_code_type[(int) (code)])
    {
    case 'd':
      return sizeof (struct tree_decl);
    case 't':
      return sizeof (struct tree_type);
    case 'r':
    case 'e':
    case 's':
    case '<':
    case '1':
    case '2':
      return (sizeof (struct tree_exp)
       + tree_code_length[(int) (code)] * sizeof (char *) - sizeof (char *));
    case 'c':
      switch (code)
 {
 case INTEGER_CST: return sizeof (struct tree_int_cst);
 case REAL_CST: return sizeof (struct tree_real_cst);
 case COMPLEX_CST: return sizeof (struct tree_complex);
 case VECTOR_CST: return sizeof (struct tree_vector);
 case STRING_CST: return sizeof (struct tree_string);
 default:
   return lang_hooks.tree_size (code);
 }
    case 'x':
      switch (code)
 {
 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
 case TREE_LIST: return sizeof (struct tree_list);
 case TREE_VEC: return (sizeof (struct tree_vec)
     + ((node)->vec.length) * sizeof(char *)
     - sizeof (char *));
 case ERROR_MARK:
 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
 case PHI_NODE: return (sizeof (struct tree_phi_node)
     + ((node)->phi.capacity - 1) *
     sizeof (struct phi_arg_d));
 case SSA_NAME: return sizeof (struct tree_ssa_name);
 case STATEMENT_LIST: return sizeof (struct tree_statement_list);
 case BLOCK: return sizeof (struct tree_block);
 case VALUE_HANDLE: return sizeof (struct tree_value_handle);
 default:
   return lang_hooks.tree_size (code);
 }
    default:
      abort ();
    }
}
tree
make_node_stat (enum tree_code code )
{
  tree t;
  int type = tree_code_type[(int) (code)];
  size_t length;
  struct tree_common ttmp;
  if (code == TREE_VEC || code == PHI_NODE)
    abort ();
  (((tree)&ttmp)->common.code = (code));
  length = tree_size ((tree)&ttmp);
  t = ggc_alloc_zone_stat (length, tree_zone );
  memset (t, 0, length);
  ((t)->common.code = (code));
  switch (type)
    {
    case 's':
      ((t)->common.side_effects_flag) = 1;
      break;
    case 'd':
      if (code != FUNCTION_DECL)
 ((t)->decl.u1.a.align) = 1;
      ((t)->decl.user_align) = 0;
      ((t)->decl.in_system_header_flag) = in_system_header;
      ((t)->decl.locus) = input_location;
      if (code == TRANSLATION_UNIT_DECL)
 ((t)->decl.uid) = cur_in_fname;
      else
 ((t)->decl.uid) = next_decl_uid++;
      ((t)->decl.pointer_alias_set) = -1;
      break;
    case 't':
      ((t)->type.uid) = next_type_uid++;
      ((t)->type.align) = integer_types[itk_char] ? ((integer_types[itk_char])->type.align) : 0;
      ((t)->type.user_align) = 0;
      ((t)->type.main_variant) = t;
      ((t)->type.attributes) = (tree) ((void *)0);
      targetm.set_default_type_attributes (t);
      ((t)->type.alias_set) = -1;
      break;
    case 'c':
      ((t)->common.constant_flag) = 1;
      ((t)->common.invariant_flag) = 1;
      break;
    case 'e':
      switch (code)
 {
 case INIT_EXPR:
 case MODIFY_EXPR:
 case VA_ARG_EXPR:
 case PREDECREMENT_EXPR:
 case PREINCREMENT_EXPR:
 case POSTDECREMENT_EXPR:
 case POSTINCREMENT_EXPR:
   ((t)->common.side_effects_flag) = 1;
   break;
 default:
   break;
 }
      break;
    }
  return t;
}
tree
copy_node_stat (tree node )
{
  tree t;
  enum tree_code code = ((enum tree_code) (node)->common.code);
  size_t length;
  length = tree_size (node);
  t = ggc_alloc_zone_stat (length, tree_zone );
  memcpy (t, node, length);
  ((t)->common.chain) = 0;
  ((t)->common.asm_written_flag) = 0;
  ((t)->common.visited) = 0;
  t->common.ann = 0;
  if (tree_code_type[(int) (code)] == 'd' && code != TRANSLATION_UNIT_DECL)
    ((t)->decl.uid) = next_decl_uid++;
  else if (tree_code_type[(int) (code)] == 't')
    {
      ((t)->type.uid) = next_type_uid++;
      ((t)->type.symtab.pointer) = 0;
      ((t)->type.symtab.address) = 0;
    }
  return t;
}
tree
copy_list (tree list)
{
  tree head;
  tree prev, next;
  if (list == 0)
    return 0;
  head = prev = copy_node_stat (list );
  next = ((list)->common.chain);
  while (next)
    {
      ((prev)->common.chain) = copy_node_stat (next );
      prev = ((prev)->common.chain);
      next = ((next)->common.chain);
    }
  return head;
}
tree
build_int_2_wide (unsigned long low, long hi)
{
  tree t = make_node_stat (INTEGER_CST );
  (((t)->int_cst.int_cst).low) = low;
  (((t)->int_cst.int_cst).high) = hi;
  ((t)->common.type) = integer_types[itk_int];
  return t;
}
tree
build_vector (tree type, tree vals)
{
  tree v = make_node_stat (VECTOR_CST );
  int over1 = 0, over2 = 0;
  tree link;
  ((v)->vector.elements) = vals;
  ((v)->common.type) = type;
  for (link = vals; link; link = ((link)->common.chain))
    {
      tree value1 = ((link)->list.value1);
      over1 |= ((value1)->common.public_flag);
      over2 |= ((value1)->common.static_flag);
    }
  ((v)->common.public_flag) = over1;
  ((v)->common.static_flag) = over2;
  return v;
}
tree
build_constructor (tree type, tree vals)
{
  tree c = make_node_stat (CONSTRUCTOR );
  ((c)->common.type) = type;
  ((c)->exp.operands[0]) = vals;
  if (vals)
    {
      ((c)->common.side_effects_flag) = ((vals)->common.side_effects_flag);
      ((c)->common.readonly_flag) = ((vals)->common.readonly_flag);
      ((c)->common.constant_flag) = ((vals)->common.constant_flag);
      ((c)->common.invariant_flag) = ((vals)->common.invariant_flag);
    }
  return c;
}
tree
build_real (tree type, struct real_value d)
{
  tree v;
  struct real_value *dp;
  int overflow = 0;
  v = make_node_stat (REAL_CST );
  dp = ggc_alloc_stat (sizeof (struct real_value) );
  memcpy (dp, &d, sizeof (struct real_value));
  ((v)->common.type) = type;
  ((v)->real_cst.real_cst_ptr) = dp;
  ((v)->common.public_flag) = ((v)->common.static_flag) = overflow;
  return v;
}
struct real_value
real_value_from_int_cst (tree type, tree i)
{
  struct real_value d;
  memset (&d, 0, sizeof d);
  real_from_integer (&d, type ? ((type)->type.mode) : VOIDmode,
       (((i)->int_cst.int_cst).low), (((i)->int_cst.int_cst).high),
       ((((i)->common.type))->common.unsigned_flag));
  return d;
}
tree
build_real_from_int_cst (tree type, tree i)
{
  tree v;
  int overflow = ((i)->common.public_flag);
  v = build_real (type, real_value_from_int_cst (type, i));
  ((v)->common.public_flag) |= overflow;
  ((v)->common.static_flag) |= overflow;
  return v;
}
tree
build_string (int len, const char *str)
{
  tree s = make_node_stat (STRING_CST );
  ((s)->string1.length) = len;
  ((s)->string1.pointer) = ggc_alloc_string (str, len);
  return s;
}
tree
build_complex (tree type, tree real, tree imag)
{
  tree t = make_node_stat (COMPLEX_CST );
  ((t)->complex.real) = real;
  ((t)->complex.imag) = imag;
  ((t)->common.type) = type ? type : build_complex_type (((real)->common.type));
  ((t)->common.public_flag) = ((real)->common.public_flag) | ((imag)->common.public_flag);
  ((t)->common.static_flag)
    = ((real)->common.static_flag) | ((imag)->common.static_flag);
  return t;
}
tree
make_tree_binfo_stat (unsigned lang_slots )
{
  tree t;
  static unsigned length;
  if (!length)
    {
      length = (__builtin_offsetof (tree_binfo, lang_slots)
  + (sizeof (((struct tree_binfo *)0)->lang_slots[0])
     * lang_slots));
      binfo_lang_slots = lang_slots;
    }
  else if (binfo_lang_slots != lang_slots)
    abort ();
  t = ggc_alloc_zone_stat (length, tree_zone );
  memset (t, 0, length);
  ((t)->common.code = (TREE_BINFO));
  return t;
}
tree
make_tree_vec_stat (int len )
{
  tree t;
  int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
  t = ggc_alloc_zone_stat (length, tree_zone );
  memset (t, 0, length);
  ((t)->common.code = (TREE_VEC));
  ((t)->vec.length) = len;
  return t;
}
int
integer_zerop (tree expr)
{
  while ((((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR) && ((expr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((expr)->common.type))->type.mode) == ((((((expr)->exp.operands[0]))->common.type))->type.mode))) (expr) = ((expr)->exp.operands[0]);
  return ((((enum tree_code) (expr)->common.code) == INTEGER_CST
    && ! ((expr)->common.static_flag)
    && (((expr)->int_cst.int_cst).low) == 0
    && (((expr)->int_cst.int_cst).high) == 0)
   || (((enum tree_code) (expr)->common.code) == COMPLEX_CST
       && integer_zerop (((expr)->complex.real))
       && integer_zerop (((expr)->complex.imag))));
}
int
integer_onep (tree expr)
{
  while ((((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR) && ((expr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((expr)->common.type))->type.mode) == ((((((expr)->exp.operands[0]))->common.type))->type.mode))) (expr) = ((expr)->exp.operands[0]);
  return ((((enum tree_code) (expr)->common.code) == INTEGER_CST
    && ! ((expr)->common.static_flag)
    && (((expr)->int_cst.int_cst).low) == 1
    && (((expr)->int_cst.int_cst).high) == 0)
   || (((enum tree_code) (expr)->common.code) == COMPLEX_CST
       && integer_onep (((expr)->complex.real))
       && integer_zerop (((expr)->complex.imag))));
}
int
integer_all_onesp (tree expr)
{
  int prec;
  int uns;
  while ((((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR) && ((expr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((expr)->common.type))->type.mode) == ((((((expr)->exp.operands[0]))->common.type))->type.mode))) (expr) = ((expr)->exp.operands[0]);
  if (((enum tree_code) (expr)->common.code) == COMPLEX_CST
      && integer_all_onesp (((expr)->complex.real))
      && integer_zerop (((expr)->complex.imag)))
    return 1;
  else if (((enum tree_code) (expr)->common.code) != INTEGER_CST
    || ((expr)->common.static_flag))
    return 0;
  uns = ((((expr)->common.type))->common.unsigned_flag);
  if (!uns)
    return ((((expr)->int_cst.int_cst).low) == ~(unsigned long) 0
     && (((expr)->int_cst.int_cst).high) == -1);
  prec = ((unsigned short) (((unsigned short) mode_size[((((expr)->common.type))->type.mode)]) * 8));
  if (prec >= (8 * 4))
    {
      long high_value;
      int shift_amount;
      shift_amount = prec - (8 * 4);
      if (shift_amount > (8 * 4))
 abort ();
      else if (shift_amount == (8 * 4))
 high_value = -1;
      else
 high_value = ((long) 1 << shift_amount) - 1;
      return ((((expr)->int_cst.int_cst).low) == ~(unsigned long) 0
       && (((expr)->int_cst.int_cst).high) == high_value);
    }
  else
    return (((expr)->int_cst.int_cst).low) == ((unsigned long) 1 << prec) - 1;
}
int
integer_pow2p (tree expr)
{
  int prec;
  long high, low;
  while ((((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR) && ((expr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((expr)->common.type))->type.mode) == ((((((expr)->exp.operands[0]))->common.type))->type.mode))) (expr) = ((expr)->exp.operands[0]);
  if (((enum tree_code) (expr)->common.code) == COMPLEX_CST
      && integer_pow2p (((expr)->complex.real))
      && integer_zerop (((expr)->complex.imag)))
    return 1;
  if (((enum tree_code) (expr)->common.code) != INTEGER_CST || ((expr)->common.static_flag))
    return 0;
  prec = ((((enum tree_code) (((expr)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((expr)->common.type))->common.code) == REFERENCE_TYPE)
   ? (8 * (0 ? 8 : 4)) : ((((expr)->common.type))->type.precision));
  high = (((expr)->int_cst.int_cst).high);
  low = (((expr)->int_cst.int_cst).low);
  if (prec == 2 * (8 * 4))
    ;
  else if (prec > (8 * 4))
    high &= ~((long) (-1) << (prec - (8 * 4)));
  else
    {
      high = 0;
      if (prec < (8 * 4))
 low &= ~((long) (-1) << prec);
    }
  if (high == 0 && low == 0)
    return 0;
  return ((high == 0 && (low & (low - 1)) == 0)
   || (low == 0 && (high & (high - 1)) == 0));
}
int
integer_nonzerop (tree expr)
{
  while ((((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR) && ((expr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((expr)->common.type))->type.mode) == ((((((expr)->exp.operands[0]))->common.type))->type.mode))) (expr) = ((expr)->exp.operands[0]);
  return ((((enum tree_code) (expr)->common.code) == INTEGER_CST
    && ! ((expr)->common.static_flag)
    && ((((expr)->int_cst.int_cst).low) != 0
        || (((expr)->int_cst.int_cst).high) != 0))
   || (((enum tree_code) (expr)->common.code) == COMPLEX_CST
       && (integer_nonzerop (((expr)->complex.real))
    || integer_nonzerop (((expr)->complex.imag)))));
}
int
tree_log2 (tree expr)
{
  int prec;
  long high, low;
  while ((((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR) && ((expr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((expr)->common.type))->type.mode) == ((((((expr)->exp.operands[0]))->common.type))->type.mode))) (expr) = ((expr)->exp.operands[0]);
  if (((enum tree_code) (expr)->common.code) == COMPLEX_CST)
    return tree_log2 (((expr)->complex.real));
  prec = ((((enum tree_code) (((expr)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((expr)->common.type))->common.code) == REFERENCE_TYPE)
   ? (8 * (0 ? 8 : 4)) : ((((expr)->common.type))->type.precision));
  high = (((expr)->int_cst.int_cst).high);
  low = (((expr)->int_cst.int_cst).low);
  if (prec == 2 * (8 * 4))
    ;
  else if (prec > (8 * 4))
    high &= ~((long) (-1) << (prec - (8 * 4)));
  else
    {
      high = 0;
      if (prec < (8 * 4))
 low &= ~((long) (-1) << prec);
    }
  return (high != 0 ? (8 * 4) + exact_log2_wide ((unsigned long) (high))
   : exact_log2_wide ((unsigned long) (low)));
}
int
tree_floor_log2 (tree expr)
{
  int prec;
  long high, low;
  while ((((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR) && ((expr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((expr)->common.type))->type.mode) == ((((((expr)->exp.operands[0]))->common.type))->type.mode))) (expr) = ((expr)->exp.operands[0]);
  if (((enum tree_code) (expr)->common.code) == COMPLEX_CST)
    return tree_log2 (((expr)->complex.real));
  prec = ((((enum tree_code) (((expr)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((expr)->common.type))->common.code) == REFERENCE_TYPE)
   ? (8 * (0 ? 8 : 4)) : ((((expr)->common.type))->type.precision));
  high = (((expr)->int_cst.int_cst).high);
  low = (((expr)->int_cst.int_cst).low);
  if (prec == 2 * (8 * 4) || prec == 0)
    ;
  else if (prec > (8 * 4))
    high &= ~((long) (-1) << (prec - (8 * 4)));
  else
    {
      high = 0;
      if (prec < (8 * 4))
 low &= ~((long) (-1) << prec);
    }
  return (high != 0 ? (8 * 4) + floor_log2_wide ((unsigned long) (high))
   : floor_log2_wide ((unsigned long) (low)));
}
int
real_zerop (tree expr)
{
  while ((((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR) && ((expr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((expr)->common.type))->type.mode) == ((((((expr)->exp.operands[0]))->common.type))->type.mode))) (expr) = ((expr)->exp.operands[0]);
  return ((((enum tree_code) (expr)->common.code) == REAL_CST
    && ! ((expr)->common.static_flag)
    && real_compare (EQ_EXPR, &((*((expr)->real_cst.real_cst_ptr))), &(dconst0)))
   || (((enum tree_code) (expr)->common.code) == COMPLEX_CST
       && real_zerop (((expr)->complex.real))
       && real_zerop (((expr)->complex.imag))));
}
int
real_onep (tree expr)
{
  while ((((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR) && ((expr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((expr)->common.type))->type.mode) == ((((((expr)->exp.operands[0]))->common.type))->type.mode))) (expr) = ((expr)->exp.operands[0]);
  return ((((enum tree_code) (expr)->common.code) == REAL_CST
    && ! ((expr)->common.static_flag)
    && real_compare (EQ_EXPR, &((*((expr)->real_cst.real_cst_ptr))), &(dconst1)))
   || (((enum tree_code) (expr)->common.code) == COMPLEX_CST
       && real_onep (((expr)->complex.real))
       && real_zerop (((expr)->complex.imag))));
}
int
real_twop (tree expr)
{
  while ((((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR) && ((expr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((expr)->common.type))->type.mode) == ((((((expr)->exp.operands[0]))->common.type))->type.mode))) (expr) = ((expr)->exp.operands[0]);
  return ((((enum tree_code) (expr)->common.code) == REAL_CST
    && ! ((expr)->common.static_flag)
    && real_compare (EQ_EXPR, &((*((expr)->real_cst.real_cst_ptr))), &(dconst2)))
   || (((enum tree_code) (expr)->common.code) == COMPLEX_CST
       && real_twop (((expr)->complex.real))
       && real_zerop (((expr)->complex.imag))));
}
int
real_minus_onep (tree expr)
{
  while ((((enum tree_code) (expr)->common.code) == NOP_EXPR || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR) && ((expr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((expr)->common.type))->type.mode) == ((((((expr)->exp.operands[0]))->common.type))->type.mode))) (expr) = ((expr)->exp.operands[0]);
  return ((((enum tree_code) (expr)->common.code) == REAL_CST
    && ! ((expr)->common.static_flag)
    && real_compare (EQ_EXPR, &((*((expr)->real_cst.real_cst_ptr))), &(dconstm1)))
   || (((enum tree_code) (expr)->common.code) == COMPLEX_CST
       && real_minus_onep (((expr)->complex.real))
       && real_zerop (((expr)->complex.imag))));
}
int
really_constant_p (tree exp)
{
  while (((enum tree_code) (exp)->common.code) == NOP_EXPR
  || ((enum tree_code) (exp)->common.code) == CONVERT_EXPR
  || ((enum tree_code) (exp)->common.code) == NON_LVALUE_EXPR)
    exp = ((exp)->exp.operands[0]);
  return ((exp)->common.constant_flag);
}
tree
value_member (tree elem, tree list)
{
  while (list)
    {
      if (elem == ((list)->list.value1))
 return list;
      list = ((list)->common.chain);
    }
  return (tree) ((void *)0);
}
tree
purpose_member (tree elem, tree list)
{
  while (list)
    {
      if (elem == ((list)->list.purpose))
 return list;
      list = ((list)->common.chain);
    }
  return (tree) ((void *)0);
}
tree
binfo_member (tree elem, tree list)
{
  while (list)
    {
      if (elem == (((list))->common.type))
 return list;
      list = ((list)->common.chain);
    }
  return (tree) ((void *)0);
}
int
chain_member (tree elem, tree chain)
{
  while (chain)
    {
      if (elem == chain)
 return 1;
      chain = ((chain)->common.chain);
    }
  return 0;
}
int
list_length (tree t)
{
  tree p = t;
  int len = 0;
  while (p)
    {
      p = ((p)->common.chain);
      len++;
    }
  return len;
}
int
fields_length (tree type)
{
  tree t = ((type)->type.value1s);
  int count = 0;
  for (; t; t = ((t)->common.chain))
    if (((enum tree_code) (t)->common.code) == FIELD_DECL)
      ++count;
  return count;
}
tree
chainon (tree op1, tree op2)
{
  tree t1;
  if (!op1)
    return op2;
  if (!op2)
    return op1;
  for (t1 = op1; ((t1)->common.chain); t1 = ((t1)->common.chain))
    continue;
  ((t1)->common.chain) = op2;
  return op1;
}
tree
tree_last (tree chain)
{
  tree next;
  if (chain)
    while ((next = ((chain)->common.chain)))
      chain = next;
  return chain;
}
tree
nreverse (tree t)
{
  tree prev = 0, decl, next;
  for (decl = t; decl; decl = next)
    {
      next = ((decl)->common.chain);
      ((decl)->common.chain) = prev;
      prev = decl;
    }
  return prev;
}
tree
build_tree_list_stat (tree parm, tree value1 )
{
  tree t = make_node_stat (TREE_LIST );
  ((t)->list.purpose) = parm;
  ((t)->list.value1) = value1;
  return t;
}
tree
tree_cons_stat (tree purpose, tree value1, tree chain )
{
  tree node;
  node = ggc_alloc_zone_stat (sizeof (struct tree_list),
         tree_zone );
  memset (node, 0, sizeof (struct tree_common));
  ((node)->common.code = (TREE_LIST));
  ((node)->common.chain) = chain;
  ((node)->list.purpose) = purpose;
  ((node)->list.value1) = value1;
  return node;
}
tree
size_in_bytes (tree type)
{
  tree t;
  if (type == global_trees[TI_ERROR_MARK])
    return global_trees[TI_INTEGER_ZERO];
  type = ((type)->type.main_variant);
  t = ((type)->type.size_unit);
  if (t == 0)
    {
      lang_hooks.types.incomplete_type_error ((tree) ((void *)0), type);
      return global_trees[TI_SIZE_ZERO];
    }
  if (((enum tree_code) (t)->common.code) == INTEGER_CST)
    force_fit_type (t, 0);
  return t;
}
long
int_size_in_bytes (tree type)
{
  tree t;
  if (type == global_trees[TI_ERROR_MARK])
    return 0;
  type = ((type)->type.main_variant);
  t = ((type)->type.size_unit);
  if (t == 0
      || ((enum tree_code) (t)->common.code) != INTEGER_CST
      || ((t)->common.public_flag)
      || (((t)->int_cst.int_cst).high) != 0
      || (long) (((t)->int_cst.int_cst).low) < 0)
    return -1;
  return (((t)->int_cst.int_cst).low);
}
tree
bit_position (tree field)
{
  return bit_from_pos (((field)->decl.arguments),
         ((field)->decl.u2.t));
}
long
int_bit_position (tree field)
{
  return tree_low_cst (bit_position (field), 0);
}
tree
byte_position (tree field)
{
  return byte_from_pos (((field)->decl.arguments),
   ((field)->decl.u2.t));
}
long
int_byte_position (tree field)
{
  return tree_low_cst (byte_position (field), 0);
}
unsigned int
expr_align (tree t)
{
  unsigned int align0, align1;
  switch (((enum tree_code) (t)->common.code))
    {
    case NOP_EXPR: case CONVERT_EXPR: case NON_LVALUE_EXPR:
      align0 = expr_align (((t)->exp.operands[0]));
      align1 = ((((t)->common.type))->type.align);
      return ((align0) > (align1) ? (align0) : (align1));
    case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
    case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
    case CLEANUP_POINT_EXPR: case UNSAVE_EXPR:
      return expr_align (((t)->exp.operands[0]));
    case COND_EXPR:
      align0 = expr_align (((t)->exp.operands[1]));
      align1 = expr_align (((t)->exp.operands[2]));
      return ((align0) < (align1) ? (align0) : (align1));
    case LABEL_DECL: case CONST_DECL:
    case VAR_DECL: case PARM_DECL: case RESULT_DECL:
      if (((t)->decl.u1.a.align) != 0)
 return ((t)->decl.u1.a.align);
      break;
    case FUNCTION_DECL:
      return 8;
    default:
      break;
    }
  return ((((t)->common.type))->type.align);
}
tree
array_type_nelts (tree type)
{
  tree index_type, min, max;
  if (! ((type)->type.value1s))
    return global_trees[TI_ERROR_MARK];
  index_type = ((type)->type.value1s);
  min = ((index_type)->type.minval);
  max = ((index_type)->type.maxval);
  return (integer_zerop (min)
   ? max
   : fold (build2_stat (MINUS_EXPR,((max)->common.type),max,min )));
}
int
staticp (tree arg)
{
  switch (((enum tree_code) (arg)->common.code))
    {
    case FUNCTION_DECL:
      return ((decl_function_context (arg) == 0 || ((arg)->decl.regdecl_flag))
       && ! ((arg)->decl.non_addr_const_p));
    case VAR_DECL:
      return ((((arg)->common.static_flag) || ((arg)->decl.external_flag))
       && ! ((arg)->decl.thread_local_flag)
       && ! ((arg)->decl.non_addr_const_p));
    case CONSTRUCTOR:
      return ((arg)->common.static_flag);
    case LABEL_DECL:
    case STRING_CST:
      return 1;
    case COMPONENT_REF:
      if (((enum tree_code) (((arg)->exp.operands[1]))->common.code) != FIELD_DECL)
 return (*lang_hooks.staticp) (arg);
      if (((((arg)->exp.operands[1]))->decl.bit_field_flag))
 return 0;
      return staticp (((arg)->exp.operands[0]));
    case BIT_FIELD_REF:
      return 0;
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
      if (((enum tree_code) (((((arg)->common.type))->type.size))->common.code) == INTEGER_CST
   && ((enum tree_code) (((arg)->exp.operands[1]))->common.code) == INTEGER_CST)
 return staticp (((arg)->exp.operands[0]));
      else
 return 0;
    default:
      if ((unsigned int) ((enum tree_code) (arg)->common.code)
   >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
 return lang_hooks.staticp (arg);
      else
 return 0;
    }
}
tree
save_expr (tree expr)
{
  tree t = fold (expr);
  tree inner;
  inner = skip_simple_arithmetic (t);
  if (((inner)->common.invariant_flag)
      || (((inner)->common.readonly_flag) && ! ((inner)->common.side_effects_flag))
      || ((enum tree_code) (inner)->common.code) == SAVE_EXPR
      || ((enum tree_code) (inner)->common.code) == ERROR_MARK)
    return t;
  if (contains_placeholder_p (inner))
    return t;
  t = build1_stat (SAVE_EXPR,((expr)->common.type),t );
  ((t)->common.side_effects_flag) = 1;
  ((t)->common.readonly_flag) = 1;
  ((t)->common.invariant_flag) = 1;
  return t;
}
tree
skip_simple_arithmetic (tree expr)
{
  tree inner;
  while (((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR)
    expr = ((expr)->exp.operands[0]);
  inner = expr;
  while (1)
    {
      if (tree_code_type[(int) (((enum tree_code) (inner)->common.code))] == '1')
 inner = ((inner)->exp.operands[0]);
      else if (tree_code_type[(int) (((enum tree_code) (inner)->common.code))] == '2')
 {
   if (((((inner)->exp.operands[1]))->common.invariant_flag))
     inner = ((inner)->exp.operands[0]);
   else if (((((inner)->exp.operands[0]))->common.invariant_flag))
     inner = ((inner)->exp.operands[1]);
   else
     break;
 }
      else
 break;
    }
  return inner;
}
tree
unsave_expr (tree expr)
{
  tree t;
  if (((enum tree_code) (expr)->common.code) == UNSAVE_EXPR)
    return expr;
  t = build1_stat (UNSAVE_EXPR,((expr)->common.type),expr );
  ((t)->common.side_effects_flag) = ((expr)->common.side_effects_flag);
  return t;
}
int
first_rtl_op (enum tree_code code)
{
  switch (code)
    {
    case GOTO_SUBROUTINE_EXPR:
      return 0;
    case WITH_CLEANUP_EXPR:
      return 2;
    default:
      return tree_code_length[(int) (code)];
    }
}
enum tree_node_structure_enum
tree_node_structure (tree t)
{
  enum tree_code code = ((enum tree_code) (t)->common.code);
  switch (tree_code_type[(int) (code)])
    {
    case 'd': return TS_DECL;
    case 't': return TS_TYPE;
    case 'r': case '<': case '1': case '2': case 'e': case 's':
      return TS_EXP;
    default:
      break;
    }
  switch (code)
    {
    case INTEGER_CST: return TS_INT_CST;
    case REAL_CST: return TS_REAL_CST;
    case COMPLEX_CST: return TS_COMPLEX;
    case VECTOR_CST: return TS_VECTOR;
    case STRING_CST: return TS_STRING;
    case ERROR_MARK: return TS_COMMON;
    case IDENTIFIER_NODE: return TS_IDENTIFIER;
    case TREE_LIST: return TS_LIST;
    case TREE_VEC: return TS_VEC;
    case PHI_NODE: return TS_PHI_NODE;
    case SSA_NAME: return TS_SSA_NAME;
    case PLACEHOLDER_EXPR: return TS_COMMON;
    case STATEMENT_LIST: return TS_STATEMENT_LIST;
    case BLOCK: return TS_BLOCK;
    case TREE_BINFO: return TS_BINFO;
    case VALUE_HANDLE: return TS_VALUE_HANDLE;
    default:
      abort ();
    }
}
void
unsave_expr_1 (tree expr)
{
  switch (((enum tree_code) (expr)->common.code))
    {
    case TARGET_EXPR:
      if (((expr)->exp.operands[1]))
 break;
      ((expr)->exp.operands[1]) = ((expr)->exp.operands[3]);
      ((expr)->exp.operands[3]) = (tree) ((void *)0);
      break;
    default:
      break;
    }
}
int
unsafe_for_reeval (tree expr)
{
  int unsafeness = 0;
  enum tree_code code;
  int i, tmp, tmp2;
  tree exp;
  int first_rtl;
  if (expr == (tree) ((void *)0))
    return 1;
  code = ((enum tree_code) (expr)->common.code);
  first_rtl = first_rtl_op (code);
  switch (code)
    {
    case SAVE_EXPR:
      return 2;
    case LABEL_EXPR:
      return 1;
    case BIND_EXPR:
      unsafeness = 1;
      break;
    case TREE_LIST:
      for (exp = expr; exp != 0; exp = ((exp)->common.chain))
 {
   tmp = unsafe_for_reeval (((exp)->list.value1));
   unsafeness = ((tmp) > (unsafeness) ? (tmp) : (unsafeness));
 }
      return unsafeness;
    case CALL_EXPR:
      tmp2 = unsafe_for_reeval (((expr)->exp.operands[0]));
      tmp = unsafe_for_reeval (((expr)->exp.operands[1]));
      return ((((tmp) > (1) ? (tmp) : (1))) > (tmp2) ? (((tmp) > (1) ? (tmp) : (1))) : (tmp2));
    case TARGET_EXPR:
      unsafeness = 1;
      break;
    case EXIT_BLOCK_EXPR:
      exp = ((expr)->exp.operands[1]);
      return exp ? unsafe_for_reeval (exp) : 0;
    default:
      tmp = lang_hooks.unsafe_for_reeval (expr);
      if (tmp >= 0)
 return tmp;
      break;
    }
  switch (tree_code_type[(int) (code)])
    {
    case 'c':
    case 't':
    case 'x':
    case 'd':
      return 0;
    case 'e':
    case 'r':
    case 's':
    case '<':
    case '2':
    case '1':
      for (i = first_rtl - 1; i >= 0; i--)
 {
   tmp = unsafe_for_reeval (((expr)->exp.operands[i]));
   unsafeness = ((tmp) > (unsafeness) ? (tmp) : (unsafeness));
 }
      return unsafeness;
    default:
      return 2;
    }
}
unsigned char
contains_placeholder_p (tree exp)
{
  enum tree_code code;
  if (!exp)
    return 0;
  code = ((enum tree_code) (exp)->common.code);
  if (code == PLACEHOLDER_EXPR)
    return 1;
  switch (tree_code_type[(int) (code)])
    {
    case 'r':
      return ((((exp)->exp.operands[0])) != 0 && ! ((((exp)->exp.operands[0]))->common.constant_flag) && contains_placeholder_p (((exp)->exp.operands[0])));
    case 'x':
      if (code == TREE_LIST)
 return (((((exp)->list.value1)) != 0 && ! ((((exp)->list.value1))->common.constant_flag) && contains_placeholder_p (((exp)->list.value1)))
  || ((((exp)->common.chain)) != 0 && ! ((((exp)->common.chain))->common.constant_flag) && contains_placeholder_p (((exp)->common.chain))));
      break;
    case '1':
    case '2': case '<':
    case 'e':
      switch (code)
 {
 case COMPOUND_EXPR:
   return ((((exp)->exp.operands[1])) != 0 && ! ((((exp)->exp.operands[1]))->common.constant_flag) && contains_placeholder_p (((exp)->exp.operands[1])));
 case COND_EXPR:
   return (((((exp)->exp.operands[0])) != 0 && ! ((((exp)->exp.operands[0]))->common.constant_flag) && contains_placeholder_p (((exp)->exp.operands[0])))
    || ((((exp)->exp.operands[1])) != 0 && ! ((((exp)->exp.operands[1]))->common.constant_flag) && contains_placeholder_p (((exp)->exp.operands[1])))
    || ((((exp)->exp.operands[2])) != 0 && ! ((((exp)->exp.operands[2]))->common.constant_flag) && contains_placeholder_p (((exp)->exp.operands[2]))));
 default:
   break;
 }
      switch (first_rtl_op (code))
 {
 case 1:
   return ((((exp)->exp.operands[0])) != 0 && ! ((((exp)->exp.operands[0]))->common.constant_flag) && contains_placeholder_p (((exp)->exp.operands[0])));
 case 2:
   return (((((exp)->exp.operands[0])) != 0 && ! ((((exp)->exp.operands[0]))->common.constant_flag) && contains_placeholder_p (((exp)->exp.operands[0])))
    || ((((exp)->exp.operands[1])) != 0 && ! ((((exp)->exp.operands[1]))->common.constant_flag) && contains_placeholder_p (((exp)->exp.operands[1]))));
 default:
   return 0;
 }
    default:
      return 0;
    }
  return 0;
}
unsigned char
type_contains_placeholder_p (tree type)
{
  if (((((type)->type.size)) != 0 && ! ((((type)->type.size))->common.constant_flag) && contains_placeholder_p (((type)->type.size)))
      || ((((type)->type.size_unit)) != 0 && ! ((((type)->type.size_unit))->common.constant_flag) && contains_placeholder_p (((type)->type.size_unit)))
      || (((type)->common.type) != 0
   && type_contains_placeholder_p (((type)->common.type))))
    return 1;
  switch (((enum tree_code) (type)->common.code))
    {
    case VOID_TYPE:
    case COMPLEX_TYPE:
    case ENUMERAL_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
    case POINTER_TYPE:
    case OFFSET_TYPE:
    case REFERENCE_TYPE:
    case METHOD_TYPE:
    case FILE_TYPE:
    case FUNCTION_TYPE:
      return 0;
    case INTEGER_TYPE:
    case REAL_TYPE:
      return (((((type)->type.minval)) != 0 && ! ((((type)->type.minval))->common.constant_flag) && contains_placeholder_p (((type)->type.minval)))
       || ((((type)->type.maxval)) != 0 && ! ((((type)->type.maxval))->common.constant_flag) && contains_placeholder_p (((type)->type.maxval))));
    case ARRAY_TYPE:
    case SET_TYPE:
    case VECTOR_TYPE:
      return type_contains_placeholder_p (((type)->type.value1s));
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      {
 static tree seen_types = 0;
 tree field;
 unsigned char ret = 0;
 if (seen_types == 0)
   seen_types = type;
 else if (((enum tree_code) (seen_types)->common.code) != TREE_LIST)
   {
     if (seen_types == type)
       return 0;
     seen_types = tree_cons_stat ((tree) ((void *)0),type,build_tree_list_stat((tree) ((void *)0),seen_types ) )
                                                ;
   }
 else
   {
     if (value_member (type, seen_types) != 0)
       return 0;
     seen_types = tree_cons_stat ((tree) ((void *)0),type,seen_types );
   }
 for (field = ((type)->type.value1s); field; field = ((field)->common.chain))
   if (((enum tree_code) (field)->common.code) == FIELD_DECL
       && (((((field)->decl.arguments)) != 0 && ! ((((field)->decl.arguments))->common.constant_flag) && contains_placeholder_p (((field)->decl.arguments)))
    || (((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE
        && ((((field)->decl.initial)) != 0 && ! ((((field)->decl.initial))->common.constant_flag) && contains_placeholder_p (((field)->decl.initial))))
    || type_contains_placeholder_p (((field)->common.type))))
     {
       ret = 1;
       break;
     }
 if (seen_types == type)
   seen_types = 0;
 else
   seen_types = ((seen_types)->common.chain);
 return ret;
      }
    default:
      abort ();
    }
}
int
has_cleanups (tree exp)
{
  int i, nops, cmp;
  if (! ((exp)->common.side_effects_flag))
    return 0;
  switch (((enum tree_code) (exp)->common.code))
    {
    case TARGET_EXPR:
    case GOTO_SUBROUTINE_EXPR:
    case WITH_CLEANUP_EXPR:
      return 1;
    case CLEANUP_POINT_EXPR:
      return 0;
    case CALL_EXPR:
      for (exp = ((exp)->exp.operands[1]); exp; exp = ((exp)->common.chain))
 {
   cmp = has_cleanups (((exp)->list.value1));
   if (cmp)
     return cmp;
 }
      return 0;
    case DECL_EXPR:
      return ((((((exp))->exp.operands[0]))->decl.initial)
       && has_cleanups ((((((exp))->exp.operands[0]))->decl.initial)));
    default:
      break;
    }
  if ((int) ((enum tree_code) (exp)->common.code) >= (int) LAST_AND_UNUSED_TREE_CODE)
    return -1;
  nops = first_rtl_op (((enum tree_code) (exp)->common.code));
  for (i = 0; i < nops; i++)
    if (((exp)->exp.operands[i]) != 0)
      {
 int type = tree_code_type[(int) (((enum tree_code) (((exp)->exp.operands[i]))->common.code))];
 if (type == 'e' || type == '<' || type == '1' || type == '2'
     || type == 'r' || type == 's')
   {
     cmp = has_cleanups (((exp)->exp.operands[i]));
     if (cmp)
       return cmp;
   }
      }
  return 0;
}
tree
substitute_in_expr (tree exp, tree f, tree r)
{
  enum tree_code code = ((enum tree_code) (exp)->common.code);
  tree op0, op1, op2;
  tree new;
  tree inner;
  if (code == TREE_LIST)
    {
      op0 = ((((exp)->common.chain)) == 0 || ((((exp)->common.chain))->common.constant_flag) ? (((exp)->common.chain)) : substitute_in_expr (((exp)->common.chain), f, r));
      op1 = ((((exp)->list.value1)) == 0 || ((((exp)->list.value1))->common.constant_flag) ? (((exp)->list.value1)) : substitute_in_expr (((exp)->list.value1), f, r));
      if (op0 == ((exp)->common.chain) && op1 == ((exp)->list.value1))
 return exp;
      return tree_cons_stat (((exp)->list.purpose),op1,op0 );
    }
  else if (code == COMPONENT_REF)
   {
     for (inner = ((exp)->exp.operands[0]);
   tree_code_type[(int) (((enum tree_code) (inner)->common.code))] == 'r';
   inner = ((inner)->exp.operands[0]))
       ;
     if (((enum tree_code) (inner)->common.code) == PLACEHOLDER_EXPR
  && ((exp)->exp.operands[1]) == f)
       return r;
     if (((enum tree_code) (inner)->common.code) == PLACEHOLDER_EXPR && ((inner)->common.type) == 0)
       return exp;
     op0 = ((((exp)->exp.operands[0])) == 0 || ((((exp)->exp.operands[0]))->common.constant_flag) ? (((exp)->exp.operands[0])) : substitute_in_expr (((exp)->exp.operands[0]), f, r));
     if (op0 == ((exp)->exp.operands[0]))
       return exp;
     new = fold (build (code, ((exp)->common.type), op0, ((exp)->exp.operands[1]),
   (tree) ((void *)0)));
   }
  else
    switch (tree_code_type[(int) (code)])
      {
      case 'c':
      case 'd':
 return exp;
      case 'x':
      case '1':
      case '2':
      case '<':
      case 'e':
      case 'r':
 switch (first_rtl_op (code))
   {
   case 0:
     return exp;
   case 1:
     op0 = ((((exp)->exp.operands[0])) == 0 || ((((exp)->exp.operands[0]))->common.constant_flag) ? (((exp)->exp.operands[0])) : substitute_in_expr (((exp)->exp.operands[0]), f, r));
     if (op0 == ((exp)->exp.operands[0]))
       return exp;
     new = fold (build1_stat (code,((exp)->common.type),op0 ));
     break;
   case 2:
     op0 = ((((exp)->exp.operands[0])) == 0 || ((((exp)->exp.operands[0]))->common.constant_flag) ? (((exp)->exp.operands[0])) : substitute_in_expr (((exp)->exp.operands[0]), f, r));
     op1 = ((((exp)->exp.operands[1])) == 0 || ((((exp)->exp.operands[1]))->common.constant_flag) ? (((exp)->exp.operands[1])) : substitute_in_expr (((exp)->exp.operands[1]), f, r));
     if (op0 == ((exp)->exp.operands[0]) && op1 == ((exp)->exp.operands[1]))
       return exp;
     new = fold (build2_stat (code,((exp)->common.type),op0,op1 ));
     break;
   case 3:
     op0 = ((((exp)->exp.operands[0])) == 0 || ((((exp)->exp.operands[0]))->common.constant_flag) ? (((exp)->exp.operands[0])) : substitute_in_expr (((exp)->exp.operands[0]), f, r));
     op1 = ((((exp)->exp.operands[1])) == 0 || ((((exp)->exp.operands[1]))->common.constant_flag) ? (((exp)->exp.operands[1])) : substitute_in_expr (((exp)->exp.operands[1]), f, r));
     op2 = ((((exp)->exp.operands[2])) == 0 || ((((exp)->exp.operands[2]))->common.constant_flag) ? (((exp)->exp.operands[2])) : substitute_in_expr (((exp)->exp.operands[2]), f, r));
     if (op0 == ((exp)->exp.operands[0]) && op1 == ((exp)->exp.operands[1])
  && op2 == ((exp)->exp.operands[2]))
       return exp;
     new = fold (build3_stat (code,((exp)->common.type),op0,op1,op2 ));
     break;
   default:
     abort ();
   }
 break;
      default:
 abort ();
      }
  ((new)->common.readonly_flag) = ((exp)->common.readonly_flag);
  return new;
}
tree
substitute_placeholder_in_expr (tree exp, tree obj)
{
  enum tree_code code = ((enum tree_code) (exp)->common.code);
  tree op0, op1, op2, op3;
  if (code == PLACEHOLDER_EXPR)
    {
      tree need_type = ((((exp)->common.type))->type.main_variant);
      tree elt;
      for (elt = obj; elt != 0;
    elt = ((((enum tree_code) (elt)->common.code) == COMPOUND_EXPR
     || ((enum tree_code) (elt)->common.code) == COND_EXPR)
    ? ((elt)->exp.operands[1])
    : (tree_code_type[(int) (((enum tree_code) (elt)->common.code))] == 'r'
       || tree_code_type[(int) (((enum tree_code) (elt)->common.code))] == '1'
       || tree_code_type[(int) (((enum tree_code) (elt)->common.code))] == '2'
       || tree_code_type[(int) (((enum tree_code) (elt)->common.code))] == 'e')
    ? ((elt)->exp.operands[0]) : 0))
 if (((((elt)->common.type))->type.main_variant) == need_type)
   return elt;
      for (elt = obj; elt != 0;
    elt = ((((enum tree_code) (elt)->common.code) == COMPOUND_EXPR
     || ((enum tree_code) (elt)->common.code) == COND_EXPR)
    ? ((elt)->exp.operands[1])
    : (tree_code_type[(int) (((enum tree_code) (elt)->common.code))] == 'r'
       || tree_code_type[(int) (((enum tree_code) (elt)->common.code))] == '1'
       || tree_code_type[(int) (((enum tree_code) (elt)->common.code))] == '2'
       || tree_code_type[(int) (((enum tree_code) (elt)->common.code))] == 'e')
    ? ((elt)->exp.operands[0]) : 0))
 if ((((enum tree_code) (((elt)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((elt)->common.type))->common.code) == REFERENCE_TYPE)
     && (((((((elt)->common.type))->common.type))->type.main_variant)
  == need_type))
   return fold (build1_stat (INDIRECT_REF,need_type,elt ));
      return exp;
    }
  else if (code == TREE_LIST)
    {
      op0 = ((((exp)->common.chain)) == 0 || ((((exp)->common.chain))->common.constant_flag) ? (((exp)->common.chain)) : substitute_placeholder_in_expr (((exp)->common.chain), obj));
      op1 = ((((exp)->list.value1)) == 0 || ((((exp)->list.value1))->common.constant_flag) ? (((exp)->list.value1)) : substitute_placeholder_in_expr (((exp)->list.value1), obj));
      if (op0 == ((exp)->common.chain) && op1 == ((exp)->list.value1))
 return exp;
      return tree_cons_stat (((exp)->list.purpose),op1,op0 );
    }
  else
    switch (tree_code_type[(int) (code)])
      {
      case 'c':
      case 'd':
 return exp;
      case 'x':
      case '1':
      case '2':
      case '<':
      case 'e':
      case 'r':
      case 's':
 switch (first_rtl_op (code))
   {
   case 0:
     return exp;
   case 1:
     op0 = ((((exp)->exp.operands[0])) == 0 || ((((exp)->exp.operands[0]))->common.constant_flag) ? (((exp)->exp.operands[0])) : substitute_placeholder_in_expr (((exp)->exp.operands[0]), obj));
     if (op0 == ((exp)->exp.operands[0]))
       return exp;
     else
       return fold (build1_stat (code,((exp)->common.type),op0 ));
   case 2:
     op0 = ((((exp)->exp.operands[0])) == 0 || ((((exp)->exp.operands[0]))->common.constant_flag) ? (((exp)->exp.operands[0])) : substitute_placeholder_in_expr (((exp)->exp.operands[0]), obj));
     op1 = ((((exp)->exp.operands[1])) == 0 || ((((exp)->exp.operands[1]))->common.constant_flag) ? (((exp)->exp.operands[1])) : substitute_placeholder_in_expr (((exp)->exp.operands[1]), obj));
     if (op0 == ((exp)->exp.operands[0]) && op1 == ((exp)->exp.operands[1]))
       return exp;
     else
       return fold (build2_stat (code,((exp)->common.type),op0,op1 ));
   case 3:
     op0 = ((((exp)->exp.operands[0])) == 0 || ((((exp)->exp.operands[0]))->common.constant_flag) ? (((exp)->exp.operands[0])) : substitute_placeholder_in_expr (((exp)->exp.operands[0]), obj));
     op1 = ((((exp)->exp.operands[1])) == 0 || ((((exp)->exp.operands[1]))->common.constant_flag) ? (((exp)->exp.operands[1])) : substitute_placeholder_in_expr (((exp)->exp.operands[1]), obj));
     op2 = ((((exp)->exp.operands[2])) == 0 || ((((exp)->exp.operands[2]))->common.constant_flag) ? (((exp)->exp.operands[2])) : substitute_placeholder_in_expr (((exp)->exp.operands[2]), obj));
     if (op0 == ((exp)->exp.operands[0]) && op1 == ((exp)->exp.operands[1])
  && op2 == ((exp)->exp.operands[2]))
       return exp;
     else
       return fold (build3_stat (code,((exp)->common.type),op0,op1,op2 ));
   case 4:
     op0 = ((((exp)->exp.operands[0])) == 0 || ((((exp)->exp.operands[0]))->common.constant_flag) ? (((exp)->exp.operands[0])) : substitute_placeholder_in_expr (((exp)->exp.operands[0]), obj));
     op1 = ((((exp)->exp.operands[1])) == 0 || ((((exp)->exp.operands[1]))->common.constant_flag) ? (((exp)->exp.operands[1])) : substitute_placeholder_in_expr (((exp)->exp.operands[1]), obj));
     op2 = ((((exp)->exp.operands[2])) == 0 || ((((exp)->exp.operands[2]))->common.constant_flag) ? (((exp)->exp.operands[2])) : substitute_placeholder_in_expr (((exp)->exp.operands[2]), obj));
     op3 = ((((exp)->exp.operands[3])) == 0 || ((((exp)->exp.operands[3]))->common.constant_flag) ? (((exp)->exp.operands[3])) : substitute_placeholder_in_expr (((exp)->exp.operands[3]), obj));
     if (op0 == ((exp)->exp.operands[0]) && op1 == ((exp)->exp.operands[1])
  && op2 == ((exp)->exp.operands[2])
  && op3 == ((exp)->exp.operands[3]))
       return exp;
     else
       return fold (build4_stat (code,((exp)->common.type),op0,op1,op2,op3 ));
   default:
     abort ();
   }
 break;
      default:
 abort ();
      }
}
tree
stabilize_reference (tree ref)
{
  tree result;
  enum tree_code code = ((enum tree_code) (ref)->common.code);
  switch (code)
    {
    case VAR_DECL:
    case PARM_DECL:
    case RESULT_DECL:
      return ref;
    case NOP_EXPR:
    case CONVERT_EXPR:
    case FLOAT_EXPR:
    case FIX_TRUNC_EXPR:
    case FIX_FLOOR_EXPR:
    case FIX_ROUND_EXPR:
    case FIX_CEIL_EXPR:
      result = build_nt (code, stabilize_reference (((ref)->exp.operands[0])));
      break;
    case INDIRECT_REF:
      result = build_nt (INDIRECT_REF,
    stabilize_reference_1 (((ref)->exp.operands[0])));
      break;
    case COMPONENT_REF:
      result = build_nt (COMPONENT_REF,
    stabilize_reference (((ref)->exp.operands[0])),
    ((ref)->exp.operands[1]), (tree) ((void *)0));
      break;
    case BIT_FIELD_REF:
      result = build_nt (BIT_FIELD_REF,
    stabilize_reference (((ref)->exp.operands[0])),
    stabilize_reference_1 (((ref)->exp.operands[1])),
    stabilize_reference_1 (((ref)->exp.operands[2])));
      break;
    case ARRAY_REF:
      result = build_nt (ARRAY_REF,
    stabilize_reference (((ref)->exp.operands[0])),
    stabilize_reference_1 (((ref)->exp.operands[1])),
    ((ref)->exp.operands[2]), ((ref)->exp.operands[3]));
      break;
    case ARRAY_RANGE_REF:
      result = build_nt (ARRAY_RANGE_REF,
    stabilize_reference (((ref)->exp.operands[0])),
    stabilize_reference_1 (((ref)->exp.operands[1])),
    ((ref)->exp.operands[2]), ((ref)->exp.operands[3]));
      break;
    case COMPOUND_EXPR:
      return stabilize_reference_1 (ref);
    default:
      return ref;
    case ERROR_MARK:
      return global_trees[TI_ERROR_MARK];
    }
  ((result)->common.type) = ((ref)->common.type);
  ((result)->common.readonly_flag) = ((ref)->common.readonly_flag);
  ((result)->common.side_effects_flag) = ((ref)->common.side_effects_flag);
  ((result)->common.volatile_flag) = ((ref)->common.volatile_flag);
  return result;
}
tree
stabilize_reference_1 (tree e)
{
  tree result;
  enum tree_code code = ((enum tree_code) (e)->common.code);
  if (((e)->common.invariant_flag))
    return e;
  switch (tree_code_type[(int) (code)])
    {
    case 'x':
    case 't':
    case 'd':
    case '<':
    case 's':
    case 'e':
    case 'r':
      if (((e)->common.side_effects_flag))
 return save_expr (e);
      return e;
    case 'c':
      return e;
    case '2':
      if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
   || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
   || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
   || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
 return save_expr (e);
      result = build_nt (code, stabilize_reference_1 (((e)->exp.operands[0])),
    stabilize_reference_1 (((e)->exp.operands[1])));
      break;
    case '1':
      result = build_nt (code, stabilize_reference_1 (((e)->exp.operands[0])));
      break;
    default:
      abort ();
    }
  ((result)->common.type) = ((e)->common.type);
  ((result)->common.readonly_flag) = ((e)->common.readonly_flag);
  ((result)->common.side_effects_flag) = ((e)->common.side_effects_flag);
  ((result)->common.volatile_flag) = ((e)->common.volatile_flag);
  ((result)->common.invariant_flag) = 1;
  return result;
}
void
recompute_tree_invarant_for_addr_expr (tree t)
{
  tree node;
  unsigned char tc = 1, ti = 1, se = 0;
  for (node = ((t)->exp.operands[0]); handled_component_p (node);
       node = ((node)->exp.operands[0]))
    {
      if ((((enum tree_code) (node)->common.code) == ARRAY_REF
    || ((enum tree_code) (node)->common.code) == ARRAY_RANGE_REF)
   && ((enum tree_code) (((((node)->exp.operands[0]))->common.type))->common.code) == ARRAY_TYPE)
 {
   do { tree _node = (((node)->exp.operands[1])); if (_node && !((_node)->common.invariant_flag)) ti = 0; if (_node && !((_node)->common.constant_flag)) tc = 0; if (_node && ((_node)->common.side_effects_flag)) se = 1; } while (0);
   do { tree _node = (array_ref_low_bound (node)); if (_node && !((_node)->common.invariant_flag)) ti = 0; if (_node && !((_node)->common.constant_flag)) tc = 0; if (_node && ((_node)->common.side_effects_flag)) se = 1; } while (0);
   do { tree _node = (array_ref_element_size (node)); if (_node && !((_node)->common.invariant_flag)) ti = 0; if (_node && !((_node)->common.constant_flag)) tc = 0; if (_node && ((_node)->common.side_effects_flag)) se = 1; } while (0);
 }
      else if (((enum tree_code) (node)->common.code) == COMPONENT_REF
        && ((enum tree_code) (((node)->exp.operands[1]))->common.code) == FIELD_DECL)
 do { tree _node = (component_ref_field_offset (node)); if (_node && !((_node)->common.invariant_flag)) ti = 0; if (_node && !((_node)->common.constant_flag)) tc = 0; if (_node && ((_node)->common.side_effects_flag)) se = 1; } while (0);
      else if (((enum tree_code) (node)->common.code) == BIT_FIELD_REF)
 do { tree _node = (((node)->exp.operands[2])); if (_node && !((_node)->common.invariant_flag)) ti = 0; if (_node && !((_node)->common.constant_flag)) tc = 0; if (_node && ((_node)->common.side_effects_flag)) se = 1; } while (0);
    }
  if (((enum tree_code) (node)->common.code) == INDIRECT_REF)
    do { tree _node = (node); if (_node && !((_node)->common.invariant_flag)) ti = 0; if (_node && !((_node)->common.constant_flag)) tc = 0; if (_node && ((_node)->common.side_effects_flag)) se = 1; } while (0);
  else if ((tree_code_type[(int) (((enum tree_code) (node)->common.code))] == 'd'))
    {
      if (staticp (node))
 ;
      else if (decl_function_context (node) == current_function_decl)
 tc = 0;
      else
 ti = tc = 0;
    }
  else if (tree_code_type[(int) (((enum tree_code) (node)->common.code))] == 'c')
    ;
  else
    {
      ti = tc = 0;
      se |= ((node)->common.side_effects_flag);
    }
  ((t)->common.constant_flag) = tc;
  ((t)->common.invariant_flag) = ti;
  ((t)->common.side_effects_flag) = se;
}
tree
build0_stat (enum tree_code code, tree tt )
{
  tree t;
  t = make_node_stat (code );
  ((t)->common.type) = tt;
  return t;
}
tree
build1_stat (enum tree_code code, tree type, tree node )
{
  int length = sizeof (struct tree_exp);
  tree t;
  t = ggc_alloc_zone_stat (length, tree_zone );
  memset (t, 0, sizeof (struct tree_common));
  ((t)->common.code = (code));
  ((t)->common.type) = type;
  ((t)->exp.locus = (((void *)0)));
  ((t)->exp.complexity) = 0;
  ((t)->exp.operands[0]) = node;
  ((t)->exp.block) = (tree) ((void *)0);
  if (node && !(tree_code_type[(int) (((enum tree_code) (node)->common.code))] == 't') && first_rtl_op (code) != 0)
    {
      ((t)->common.side_effects_flag) = ((node)->common.side_effects_flag);
      ((t)->common.readonly_flag) = ((node)->common.readonly_flag);
    }
  if (tree_code_type[(int) (code)] == 's')
    ((t)->common.side_effects_flag) = 1;
  else switch (code)
    {
    case INIT_EXPR:
    case MODIFY_EXPR:
    case VA_ARG_EXPR:
    case PREDECREMENT_EXPR:
    case PREINCREMENT_EXPR:
    case POSTDECREMENT_EXPR:
    case POSTINCREMENT_EXPR:
      ((t)->common.side_effects_flag) = 1;
      ((t)->common.readonly_flag) = 0;
      break;
    case INDIRECT_REF:
      ((t)->common.readonly_flag) = 0;
      break;
    case ADDR_EXPR:
      if (node)
 recompute_tree_invarant_for_addr_expr (t);
      break;
    default:
      if (tree_code_type[(int) (code)] == '1' && node && !(tree_code_type[(int) (((enum tree_code) (node)->common.code))] == 't')
   && ((node)->common.constant_flag))
 ((t)->common.constant_flag) = 1;
      if (tree_code_type[(int) (code)] == '1' && node && ((node)->common.invariant_flag))
 ((t)->common.invariant_flag) = 1;
      if (tree_code_type[(int) (code)] == 'r' && node && ((node)->common.volatile_flag))
 ((t)->common.volatile_flag) = 1;
      break;
    }
  return t;
}
tree
build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 )
{
  unsigned char constant, read_only, side_effects, invariant;
  tree t;
  int fro;
  t = make_node_stat (code );
  ((t)->common.type) = tt;
  fro = first_rtl_op (code);
  constant = (tree_code_type[(int) (code)] == '<'
       || tree_code_type[(int) (code)] == '2');
  read_only = 1;
  side_effects = ((t)->common.side_effects_flag);
  invariant = constant;
  do { ((t)->exp.operands[0]) = arg0; if (arg0 &&!(tree_code_type[(int) (((enum tree_code) (arg0)->common.code))] == 't') && fro > 0) { if (((arg0)->common.side_effects_flag)) side_effects = 1; if (!((arg0)->common.readonly_flag)) read_only = 0; if (!((arg0)->common.constant_flag)) constant = 0; if (!((arg0)->common.invariant_flag)) invariant = 0; } } while (0);
  do { ((t)->exp.operands[1]) = arg1; if (arg1 &&!(tree_code_type[(int) (((enum tree_code) (arg1)->common.code))] == 't') && fro > 1) { if (((arg1)->common.side_effects_flag)) side_effects = 1; if (!((arg1)->common.readonly_flag)) read_only = 0; if (!((arg1)->common.constant_flag)) constant = 0; if (!((arg1)->common.invariant_flag)) invariant = 0; } } while (0);
  ((t)->common.readonly_flag) = read_only;
  ((t)->common.constant_flag) = constant;
  ((t)->common.invariant_flag) = invariant;
  ((t)->common.side_effects_flag) = side_effects;
  ((t)->common.volatile_flag)
    = tree_code_type[(int) (code)] == 'r' && arg0 && ((arg0)->common.volatile_flag);
  return t;
}
tree
build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
      tree arg2 )
{
  unsigned char constant, read_only, side_effects, invariant;
  tree t;
  int fro;
  t = make_node_stat (code );
  ((t)->common.type) = tt;
  fro = first_rtl_op (code);
  side_effects = ((t)->common.side_effects_flag);
  do { ((t)->exp.operands[0]) = arg0; if (arg0 &&!(tree_code_type[(int) (((enum tree_code) (arg0)->common.code))] == 't') && fro > 0) { if (((arg0)->common.side_effects_flag)) side_effects = 1; if (!((arg0)->common.readonly_flag)) read_only = 0; if (!((arg0)->common.constant_flag)) constant = 0; if (!((arg0)->common.invariant_flag)) invariant = 0; } } while (0);
  do { ((t)->exp.operands[1]) = arg1; if (arg1 &&!(tree_code_type[(int) (((enum tree_code) (arg1)->common.code))] == 't') && fro > 1) { if (((arg1)->common.side_effects_flag)) side_effects = 1; if (!((arg1)->common.readonly_flag)) read_only = 0; if (!((arg1)->common.constant_flag)) constant = 0; if (!((arg1)->common.invariant_flag)) invariant = 0; } } while (0);
  do { ((t)->exp.operands[2]) = arg2; if (arg2 &&!(tree_code_type[(int) (((enum tree_code) (arg2)->common.code))] == 't') && fro > 2) { if (((arg2)->common.side_effects_flag)) side_effects = 1; if (!((arg2)->common.readonly_flag)) read_only = 0; if (!((arg2)->common.constant_flag)) constant = 0; if (!((arg2)->common.invariant_flag)) invariant = 0; } } while (0);
  if (code == CALL_EXPR && !side_effects)
    {
      tree node;
      int i;
      i = call_expr_flags (t);
      if (!(i & (1 | 256)))
 side_effects = 1;
      else for (node = arg1; node; node = ((node)->common.chain))
 if (((((node)->list.value1))->common.side_effects_flag))
   {
     side_effects = 1;
     break;
   }
    }
  ((t)->common.side_effects_flag) = side_effects;
  ((t)->common.volatile_flag)
    = tree_code_type[(int) (code)] == 'r' && arg0 && ((arg0)->common.volatile_flag);
  return t;
}
tree
build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
      tree arg2, tree arg3 )
{
  unsigned char constant, read_only, side_effects, invariant;
  tree t;
  int fro;
  t = make_node_stat (code );
  ((t)->common.type) = tt;
  fro = first_rtl_op (code);
  side_effects = ((t)->common.side_effects_flag);
  do { ((t)->exp.operands[0]) = arg0; if (arg0 &&!(tree_code_type[(int) (((enum tree_code) (arg0)->common.code))] == 't') && fro > 0) { if (((arg0)->common.side_effects_flag)) side_effects = 1; if (!((arg0)->common.readonly_flag)) read_only = 0; if (!((arg0)->common.constant_flag)) constant = 0; if (!((arg0)->common.invariant_flag)) invariant = 0; } } while (0);
  do { ((t)->exp.operands[1]) = arg1; if (arg1 &&!(tree_code_type[(int) (((enum tree_code) (arg1)->common.code))] == 't') && fro > 1) { if (((arg1)->common.side_effects_flag)) side_effects = 1; if (!((arg1)->common.readonly_flag)) read_only = 0; if (!((arg1)->common.constant_flag)) constant = 0; if (!((arg1)->common.invariant_flag)) invariant = 0; } } while (0);
  do { ((t)->exp.operands[2]) = arg2; if (arg2 &&!(tree_code_type[(int) (((enum tree_code) (arg2)->common.code))] == 't') && fro > 2) { if (((arg2)->common.side_effects_flag)) side_effects = 1; if (!((arg2)->common.readonly_flag)) read_only = 0; if (!((arg2)->common.constant_flag)) constant = 0; if (!((arg2)->common.invariant_flag)) invariant = 0; } } while (0);
  do { ((t)->exp.operands[3]) = arg3; if (arg3 &&!(tree_code_type[(int) (((enum tree_code) (arg3)->common.code))] == 't') && fro > 3) { if (((arg3)->common.side_effects_flag)) side_effects = 1; if (!((arg3)->common.readonly_flag)) read_only = 0; if (!((arg3)->common.constant_flag)) constant = 0; if (!((arg3)->common.invariant_flag)) invariant = 0; } } while (0);
  ((t)->common.side_effects_flag) = side_effects;
  ((t)->common.volatile_flag)
    = tree_code_type[(int) (code)] == 'r' && arg0 && ((arg0)->common.volatile_flag);
  return t;
}
tree
(build) (enum tree_code code, tree tt, ...)
{
  tree t, arg0, arg1, arg2, arg3;
  int length = tree_code_length[(int) (code)];
  va_list p;
  __builtin_va_start(p,tt);
  switch (length)
    {
    case 0:
      t = build0_stat (code,tt );
      break;
    case 1:
      arg0 = __builtin_va_arg(p,tree1);
      t = build1_stat (code,tt,arg0 );
      break;
    case 2:
      arg0 = __builtin_va_arg(p,tree1);
      arg1 = __builtin_va_arg(p,tree1);
      t = build2_stat (code,tt,arg0,arg1 );
      break;
    case 3:
      arg0 = __builtin_va_arg(p,tree1);
      arg1 = __builtin_va_arg(p,tree1);
      arg2 = __builtin_va_arg(p,tree1);
      t = build3_stat (code,tt,arg0,arg1,arg2 );
      break;
    case 4:
      arg0 = __builtin_va_arg(p,tree1);
      arg1 = __builtin_va_arg(p,tree1);
      arg2 = __builtin_va_arg(p,tree1);
      arg3 = __builtin_va_arg(p,tree1);
      t = build4_stat (code,tt,arg0,arg1,arg2,arg3 );
      break;
    default:
      abort ();
    }
  __builtin_va_end(p);
  return t;
}
tree
build_nt (enum tree_code code, ...)
{
  tree t;
  int length;
  int i;
  va_list p;
  __builtin_va_start(p,code);
  t = make_node_stat (code );
  length = tree_code_length[(int) (code)];
  for (i = 0; i < length; i++)
    ((t)->exp.operands[i]) = __builtin_va_arg(p,tree1);
  __builtin_va_end(p);
  return t;
}
tree
build_decl_stat (enum tree_code code, tree name, tree type )
{
  tree t;
  t = make_node_stat (code );
  ((t)->decl.name) = name;
  ((t)->common.type) = type;
  if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
    layout_decl (t, 0);
  else if (code == FUNCTION_DECL)
    ((t)->decl.mode) = QImode;
  return t;
}
tree
build_block (tree vars, tree tags , tree subblocks,
      tree supercontext, tree chain)
{
  tree block = make_node_stat (BLOCK );
  ((block)->block.vars) = vars;
  ((block)->block.subblocks) = subblocks;
  ((block)->block.supercontext) = supercontext;
  (((block))->common.chain) = chain;
  return block;
}
static tree last_annotated_node;
void
annotate_with_file_line (tree node, const char *file, int line)
{
  if (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (node)->common.code))])) != 0) ? (node)->exp.locus : (location_t *)((void *)0))
      && (((node)->exp.locus->file) == file
   || ! strcmp (((node)->exp.locus->file), file))
      && ((node)->exp.locus->line) == line)
    {
      last_annotated_node = node;
      return;
    }
  if (last_annotated_node
      && ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (last_annotated_node)->common.code))])) != 0) ? (last_annotated_node)->exp.locus : (location_t *)((void *)0))
      && (((last_annotated_node)->exp.locus->file) == file
   || ! strcmp (((last_annotated_node)->exp.locus->file), file))
      && ((last_annotated_node)->exp.locus->line) == line)
    {
      ((node)->exp.locus = (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (last_annotated_node)->common.code))])) != 0) ? (last_annotated_node)->exp.locus : (location_t *)((void *)0))));
      return;
    }
  ((node)->exp.locus = (ggc_alloc_stat (sizeof (location_t) )));
  ((node)->exp.locus->line) = line;
  ((node)->exp.locus->file) = file;
  last_annotated_node = node;
}
void
annotate_with_locus (tree node, location_t locus)
{
  annotate_with_file_line (node, locus.file, locus.line);
}
tree
build_decl_attribute_variant (tree ddecl, tree attribute)
{
  ((ddecl)->decl.attributes) = attribute;
  return ddecl;
}
tree
build_type_attribute_variant (tree ttype, tree attribute)
{
  if (! attribute_list_equal (((ttype)->type.attributes), attribute))
    {
      hashval_t hashcode = 0;
      tree ntype;
      enum tree_code code = ((enum tree_code) (ttype)->common.code);
      ntype = copy_node_stat (ttype );
      ((ntype)->type.pointer_to) = 0;
      ((ntype)->type.reference_to) = 0;
      ((ntype)->type.attributes) = attribute;
      ((ntype)->type.main_variant) = ntype;
      ((ntype)->type.next_variant) = 0;
      set_type_quals (ntype, 0x0);
      hashcode = iterative_hash (&code, sizeof (code), hashcode);
      if (((ntype)->common.type))
 hashcode = iterative_hash (&(((((ntype)->common.type))->type.uid)), sizeof ((((((ntype)->common.type))->type.uid))), hashcode)
                ;
      hashcode = attribute_hash_list (attribute, hashcode);
      switch (((enum tree_code) (ntype)->common.code))
 {
 case FUNCTION_TYPE:
   hashcode = type_hash_list (((ntype)->type.value1s), hashcode);
   break;
 case ARRAY_TYPE:
   hashcode = iterative_hash (&(((((ntype)->type.value1s))->type.uid)), sizeof ((((((ntype)->type.value1s))->type.uid))), hashcode)
                  ;
   break;
 case INTEGER_TYPE:
   hashcode = iterative_hash (&(((((ntype)->type.maxval))->int_cst.int_cst).low), sizeof ((((((ntype)->type.maxval))->int_cst.int_cst).low)), hashcode)
                                                          ;
   hashcode = iterative_hash (&(((((ntype)->type.maxval))->int_cst.int_cst).high), sizeof ((((((ntype)->type.maxval))->int_cst.int_cst).high)), hashcode)
                                                           ;
   break;
 case REAL_TYPE:
   {
     unsigned int precision = ((ntype)->type.precision);
     hashcode = iterative_hash (&precision, sizeof (precision), hashcode);
   }
   break;
 default:
   break;
 }
      ntype = type_hash_canon (hashcode, ntype);
      ttype = build_qualified_type (ntype, ((((ttype)->common.readonly_flag) * 0x1) | (((ttype)->common.volatile_flag) * 0x2) | (((ttype)->type.restrict_flag) * 0x4)));
    }
  return ttype;
}
int
is_attribute_p (const char *attr, tree ident)
{
  int ident_len, attr_len;
  const char *p;
  if (((enum tree_code) (ident)->common.code) != IDENTIFIER_NODE)
    return 0;
  if (strcmp (attr, ((const char *) (ident)->identifier.id.str)) == 0)
    return 1;
  p = ((const char *) (ident)->identifier.id.str);
  ident_len = strlen (p);
  attr_len = strlen (attr);
  if (attr[0] == '_')
    {
      if (attr[1] != '_'
   || attr[attr_len - 2] != '_'
   || attr[attr_len - 1] != '_')
 abort ();
      if (ident_len == attr_len - 4
   && strncmp (attr + 2, p, attr_len - 4) == 0)
 return 1;
    }
  else
    {
      if (ident_len == attr_len + 4
   && p[0] == '_' && p[1] == '_'
   && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
   && strncmp (attr, p + 2, attr_len) == 0)
 return 1;
    }
  return 0;
}
tree
lookup_attribute (const char *attr_name, tree list)
{
  tree l;
  for (l = list; l; l = ((l)->common.chain))
    {
      if (((enum tree_code) (((l)->list.purpose))->common.code) != IDENTIFIER_NODE)
 abort ();
      if (is_attribute_p (attr_name, ((l)->list.purpose)))
 return l;
    }
  return (tree) ((void *)0);
}
tree
merge_attributes (tree a1, tree a2)
{
  tree attributes;
  if ((attributes = a1) == 0)
    attributes = a2;
  else if (a2 != 0 && ! attribute_list_contained (a1, a2))
    {
      if (attribute_list_contained (a2, a1))
 attributes = a2;
      else
 {
   if (list_length (a1) < list_length (a2))
     attributes = a2, a2 = a1;
   for (; a2 != 0; a2 = ((a2)->common.chain))
     {
       tree a;
       for (a = lookup_attribute (((const char *) (((a2)->list.purpose))->identifier.id.str),
      attributes);
     a != (tree) ((void *)0);
     a = lookup_attribute (((const char *) (((a2)->list.purpose))->identifier.id.str),
      ((a)->common.chain)))
  {
    if (simple_cst_equal (((a)->list.value1), ((a2)->list.value1)) == 1)
      break;
  }
       if (a == (tree) ((void *)0))
  {
    a1 = copy_node_stat (a2 );
    ((a1)->common.chain) = attributes;
    attributes = a1;
  }
     }
 }
    }
  return attributes;
}
tree
merge_type_attributes (tree t1, tree t2)
{
  return merge_attributes (((t1)->type.attributes),
      ((t2)->type.attributes));
}
tree
merge_decl_attributes (tree olddecl, tree newdecl)
{
  return merge_attributes (((olddecl)->decl.attributes),
      ((newdecl)->decl.attributes));
}
static void
set_type_quals (tree type, int type_quals)
{
  ((type)->common.readonly_flag) = (type_quals & 0x1) != 0;
  ((type)->common.volatile_flag) = (type_quals & 0x2) != 0;
  ((type)->type.restrict_flag) = (type_quals & 0x4) != 0;
}
unsigned char
check_qualified_type (tree cand, tree base, int type_quals)
{
  return (((((cand)->common.readonly_flag) * 0x1) | (((cand)->common.volatile_flag) * 0x2) | (((cand)->type.restrict_flag) * 0x4)) == type_quals
   && ((cand)->type.name) == ((base)->type.name)
   && ((cand)->type.context) == ((base)->type.context)
   && attribute_list_equal (((cand)->type.attributes),
       ((base)->type.attributes)));
}
tree
get_qualified_type (tree type, int type_quals)
{
  tree t;
  if (((((type)->common.readonly_flag) * 0x1) | (((type)->common.volatile_flag) * 0x2) | (((type)->type.restrict_flag) * 0x4)) == type_quals)
    return type;
  for (t = ((type)->type.main_variant); t; t = ((t)->type.next_variant))
    if (check_qualified_type (t, type, type_quals))
      return t;
  return (tree) ((void *)0);
}
tree
build_qualified_type (tree type, int type_quals)
{
  tree t;
  t = get_qualified_type (type, type_quals);
  if (!t)
    {
      t = build_type_copy (type);
      set_type_quals (t, type_quals);
    }
  return t;
}
tree
build_type_copy (tree type)
{
  tree t, m = ((type)->type.main_variant);
  t = copy_node_stat (type );
  ((t)->type.pointer_to) = 0;
  ((t)->type.reference_to) = 0;
  ((t)->type.next_variant) = ((m)->type.next_variant);
  ((m)->type.next_variant) = t;
  return t;
}
unsigned int
type_hash_list (tree list, hashval_t hashcode)
{
  tree tail;
  for (tail = list; tail; tail = ((tail)->common.chain))
    if (((tail)->list.value1) != global_trees[TI_ERROR_MARK])
      hashcode = iterative_hash (&(((((tail)->list.value1))->type.uid)), sizeof ((((((tail)->list.value1))->type.uid))), hashcode)
              ;
  return hashcode;
}
static int
type_hash_eq (const void *va, const void *vb)
{
  const struct type_hash *a = va, *b = vb;
  if (a->hash != b->hash
      || ((enum tree_code) (a->type)->common.code) != ((enum tree_code) (b->type)->common.code)
      || ((a->type)->common.type) != ((b->type)->common.type)
      || !attribute_list_equal (((a->type)->type.attributes),
     ((b->type)->type.attributes))
      || ((a->type)->type.align) != ((b->type)->type.align)
      || ((a->type)->type.mode) != ((b->type)->type.mode))
    return 0;
  switch (((enum tree_code) (a->type)->common.code))
    {
    case VOID_TYPE:
    case COMPLEX_TYPE:
    case VECTOR_TYPE:
    case POINTER_TYPE:
    case REFERENCE_TYPE:
      return 1;
    case ENUMERAL_TYPE:
      if (((a->type)->type.value1s) != ((b->type)->type.value1s)
   && !(((a->type)->type.value1s)
        && ((enum tree_code) (((a->type)->type.value1s))->common.code) == TREE_LIST
        && ((b->type)->type.value1s)
        && ((enum tree_code) (((b->type)->type.value1s))->common.code) == TREE_LIST
        && type_list_equal (((a->type)->type.value1s),
       ((b->type)->type.value1s))))
 return 0;
    case INTEGER_TYPE:
    case REAL_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
      return ((((a->type)->type.maxval) == ((b->type)->type.maxval)
        || tree_int_cst_equal (((a->type)->type.maxval),
          ((b->type)->type.maxval)))
       && (((a->type)->type.minval) == ((b->type)->type.minval)
    || tree_int_cst_equal (((a->type)->type.minval),
      ((b->type)->type.minval))));
    case OFFSET_TYPE:
      return ((a->type)->type.maxval) == ((b->type)->type.maxval);
    case METHOD_TYPE:
      return (((a->type)->type.maxval) == ((b->type)->type.maxval)
       && (((a->type)->type.value1s) == ((b->type)->type.value1s)
    || (((a->type)->type.value1s)
        && ((enum tree_code) (((a->type)->type.value1s))->common.code) == TREE_LIST
        && ((b->type)->type.value1s)
        && ((enum tree_code) (((b->type)->type.value1s))->common.code) == TREE_LIST
        && type_list_equal (((a->type)->type.value1s),
       ((b->type)->type.value1s)))));
    case ARRAY_TYPE:
    case SET_TYPE:
      return ((a->type)->type.value1s) == ((b->type)->type.value1s);
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      return (((a->type)->type.value1s) == ((b->type)->type.value1s)
       || (((a->type)->type.value1s)
    && ((enum tree_code) (((a->type)->type.value1s))->common.code) == TREE_LIST
    && ((b->type)->type.value1s)
    && ((enum tree_code) (((b->type)->type.value1s))->common.code) == TREE_LIST
    && type_list_equal (((a->type)->type.value1s),
          ((b->type)->type.value1s))));
    case FUNCTION_TYPE:
      return (((a->type)->type.value1s) == ((b->type)->type.value1s)
       || (((a->type)->type.value1s)
    && ((enum tree_code) (((a->type)->type.value1s))->common.code) == TREE_LIST
    && ((b->type)->type.value1s)
    && ((enum tree_code) (((b->type)->type.value1s))->common.code) == TREE_LIST
    && type_list_equal (((a->type)->type.value1s),
          ((b->type)->type.value1s))));
    default:
      return 0;
    }
}
static hashval_t
type_hash_hash (const void *item)
{
  return ((const struct type_hash *) item)->hash;
}
tree
type_hash_lookup (hashval_t hashcode, tree type)
{
  struct type_hash *h, in;
  layout_type (type);
  in.hash = hashcode;
  in.type = type;
  h = htab_find_with_hash (type_hash_table, &in, hashcode);
  if (h)
    return h->type;
  return (tree) ((void *)0);
}
void
type_hash_add (hashval_t hashcode, tree type)
{
  struct type_hash *h;
  void **loc;
  h = ggc_alloc_stat (sizeof (struct type_hash) );
  h->hash = hashcode;
  h->type = type;
  loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
  *(struct type_hash **) loc = h;
}
tree
type_hash_canon (unsigned int hashcode, tree type)
{
  tree t1;
  if (((type)->type.main_variant) != type)
    abort ();
  if (!lang_hooks.types.hash_types)
    return type;
  t1 = type_hash_lookup (hashcode, type);
  if (t1 != 0)
    {
      return t1;
    }
  else
    {
      type_hash_add (hashcode, type);
      return type;
    }
}
static int
type_hash_marked_p (const void *p)
{
  tree type = ((struct type_hash *) p)->type;
  return ggc_marked_p (type) || ((type)->type.symtab.pointer);
}
static void
print_type_hash_statistics (void)
{
  fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
    (long) htab_size (type_hash_table),
    (long) htab_elements (type_hash_table),
    htab_collisions (type_hash_table));
}
unsigned int
attribute_hash_list (tree list, hashval_t hashcode)
{
  tree tail;
  for (tail = list; tail; tail = ((tail)->common.chain))
    hashcode = iterative_hash (&((((tail)->list.purpose))->identifier.id.hash_value), sizeof (((((tail)->list.purpose))->identifier.id.hash_value)), hashcode)
                                                             ;
  return hashcode;
}
int
attribute_list_equal (tree l1, tree l2)
{
  return attribute_list_contained (l1, l2)
  && attribute_list_contained (l2, l1);
}
int
attribute_list_contained (tree l1, tree l2)
{
  tree t1, t2;
  if (l1 == l2)
    return 1;
  for (t1 = l1, t2 = l2;
       t1 != 0 && t2 != 0
        && ((t1)->list.purpose) == ((t2)->list.purpose)
        && ((t1)->list.value1) == ((t2)->list.value1);
       t1 = ((t1)->common.chain), t2 = ((t2)->common.chain));
  if (t1 == 0 && t2 == 0)
    return 1;
  for (; t2 != 0; t2 = ((t2)->common.chain))
    {
      tree attr;
      for (attr = lookup_attribute (((const char *) (((t2)->list.purpose))->identifier.id.str), l1);
    attr != (tree) ((void *)0);
    attr = lookup_attribute (((const char *) (((t2)->list.purpose))->identifier.id.str),
        ((attr)->common.chain)))
 {
   if (simple_cst_equal (((t2)->list.value1), ((attr)->list.value1)) == 1)
     break;
 }
      if (attr == 0)
 return 0;
      if (simple_cst_equal (((t2)->list.value1), ((attr)->list.value1)) != 1)
 return 0;
    }
  return 1;
}
int
type_list_equal (tree l1, tree l2)
{
  tree t1, t2;
  for (t1 = l1, t2 = l2; t1 && t2; t1 = ((t1)->common.chain), t2 = ((t2)->common.chain))
    if (((t1)->list.value1) != ((t2)->list.value1)
 || (((t1)->list.purpose) != ((t2)->list.purpose)
     && ! (1 == simple_cst_equal (((t1)->list.purpose), ((t2)->list.purpose))
    && (((((t1)->list.purpose))->common.type)
        == ((((t2)->list.purpose))->common.type)))))
      return 0;
  return t1 == t2;
}
int
type_num_arguments (tree type)
{
  int i = 0;
  tree t;
  for (t = ((type)->type.value1s); t; t = ((t)->common.chain))
    if ((((enum tree_code) (((t)->list.value1))->common.code) == VOID_TYPE))
      break;
    else
      ++i;
  return i;
}
int
tree_int_cst_equal (tree t1, tree t2)
{
  if (t1 == t2)
    return 1;
  if (t1 == 0 || t2 == 0)
    return 0;
  if (((enum tree_code) (t1)->common.code) == INTEGER_CST
      && ((enum tree_code) (t2)->common.code) == INTEGER_CST
      && (((t1)->int_cst.int_cst).low) == (((t2)->int_cst.int_cst).low)
      && (((t1)->int_cst.int_cst).high) == (((t2)->int_cst.int_cst).high))
    return 1;
  return 0;
}
int
tree_int_cst_lt (tree t1, tree t2)
{
  if (t1 == t2)
    return 0;
  if (((((t1)->common.type))->common.unsigned_flag) != ((((t2)->common.type))->common.unsigned_flag))
    {
      int t1_sgn = tree_int_cst_sgn (t1);
      int t2_sgn = tree_int_cst_sgn (t2);
      if (t1_sgn < t2_sgn)
 return 1;
      else if (t1_sgn > t2_sgn)
 return 0;
    }
  else if (!((((t1)->common.type))->common.unsigned_flag))
    return ((((t1)->int_cst.int_cst).high) < (((t2)->int_cst.int_cst).high) || ((((t1)->int_cst.int_cst).high) == (((t2)->int_cst.int_cst).high) && (((t1)->int_cst.int_cst).low) < (((t2)->int_cst.int_cst).low)));
  return (((unsigned long) (((t1)->int_cst.int_cst).high) < (unsigned long) (((t2)->int_cst.int_cst).high)) || (((unsigned long) (((t1)->int_cst.int_cst).high) == (unsigned long) (((t2)->int_cst.int_cst).high)) && (((t1)->int_cst.int_cst).low) < (((t2)->int_cst.int_cst).low)));
}
int
tree_int_cst_compare (tree t1, tree t2)
{
  if (tree_int_cst_lt (t1, t2))
    return -1;
  else if (tree_int_cst_lt (t2, t1))
    return 1;
  else
    return 0;
}
int
host_integerp (tree t, int pos)
{
  return (((enum tree_code) (t)->common.code) == INTEGER_CST
   && ! ((t)->common.public_flag)
   && (((((t)->int_cst.int_cst).high) == 0
        && (long) (((t)->int_cst.int_cst).low) >= 0)
       || (! pos && (((t)->int_cst.int_cst).high) == -1
    && (long) (((t)->int_cst.int_cst).low) < 0
    && !((((t)->common.type))->common.unsigned_flag))
       || (pos && (((t)->int_cst.int_cst).high) == 0)));
}
long
tree_low_cst (tree t, int pos)
{
  if (host_integerp (t, pos))
    return (((t)->int_cst.int_cst).low);
  else
    abort ();
}
int
tree_int_cst_msb (tree t)
{
  int prec;
  long h;
  unsigned long l;
  prec = ((unsigned short) (((unsigned short) mode_size[((((t)->common.type))->type.mode)]) * 8)) - 1;
  rshift_double ((((t)->int_cst.int_cst).low), (((t)->int_cst.int_cst).high), prec,
   2 * (8 * 4), &l, &h, 0);
  return (l & 1) == 1;
}
int
tree_int_cst_sgn (tree t)
{
  if ((((t)->int_cst.int_cst).low) == 0 && (((t)->int_cst.int_cst).high) == 0)
    return 0;
  else if (((((t)->common.type))->common.unsigned_flag))
    return 1;
  else if ((((t)->int_cst.int_cst).high) < 0)
    return -1;
  else
    return 1;
}
int
simple_cst_list_equal (tree l1, tree l2)
{
  while (l1 != (tree) ((void *)0) && l2 != (tree) ((void *)0))
    {
      if (simple_cst_equal (((l1)->list.value1), ((l2)->list.value1)) != 1)
 return 0;
      l1 = ((l1)->common.chain);
      l2 = ((l2)->common.chain);
    }
  return l1 == l2;
}
int
simple_cst_equal (tree t1, tree t2)
{
  enum tree_code code1, code2;
  int cmp;
  int i;
  if (t1 == t2)
    return 1;
  if (t1 == 0 || t2 == 0)
    return 0;
  code1 = ((enum tree_code) (t1)->common.code);
  code2 = ((enum tree_code) (t2)->common.code);
  if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
    {
      if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
   || code2 == NON_LVALUE_EXPR)
 return simple_cst_equal (((t1)->exp.operands[0]), ((t2)->exp.operands[0]));
      else
 return simple_cst_equal (((t1)->exp.operands[0]), t2);
    }
  else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
    || code2 == NON_LVALUE_EXPR)
    return simple_cst_equal (t1, ((t2)->exp.operands[0]));
  if (code1 != code2)
    return 0;
  switch (code1)
    {
    case INTEGER_CST:
      return ((((t1)->int_cst.int_cst).low) == (((t2)->int_cst.int_cst).low)
       && (((t1)->int_cst.int_cst).high) == (((t2)->int_cst.int_cst).high));
    case REAL_CST:
      return real_identical (&((*((t1)->real_cst.real_cst_ptr))), &((*((t2)->real_cst.real_cst_ptr))));
    case STRING_CST:
      return (((t1)->string1.length) == ((t2)->string1.length)
       && ! memcmp (((t1)->string1.pointer), ((t2)->string1.pointer),
    ((t1)->string1.length)));
    case CONSTRUCTOR:
      return simple_cst_list_equal (((t1)->exp.operands[0]),
                             ((t2)->exp.operands[0]));
    case SAVE_EXPR:
      return simple_cst_equal (((t1)->exp.operands[0]), ((t2)->exp.operands[0]));
    case CALL_EXPR:
      cmp = simple_cst_equal (((t1)->exp.operands[0]), ((t2)->exp.operands[0]));
      if (cmp <= 0)
 return cmp;
      return
 simple_cst_list_equal (((t1)->exp.operands[1]), ((t2)->exp.operands[1]));
    case TARGET_EXPR:
      if ((((enum tree_code) (((t1)->exp.operands[0]))->common.code) == VAR_DECL
    && ((((t1)->exp.operands[0]))->decl.name) == (tree) ((void *)0)
    && !((((t1)->exp.operands[0]))->decl.rtl != ((void *)0)))
   || (((enum tree_code) (((t2)->exp.operands[0]))->common.code) == VAR_DECL
       && ((((t2)->exp.operands[0]))->decl.name) == (tree) ((void *)0)
       && !((((t2)->exp.operands[0]))->decl.rtl != ((void *)0))))
 cmp = 1;
      else
 cmp = simple_cst_equal (((t1)->exp.operands[0]), ((t2)->exp.operands[0]));
      if (cmp <= 0)
 return cmp;
      return simple_cst_equal (((t1)->exp.operands[1]), ((t2)->exp.operands[1]));
    case WITH_CLEANUP_EXPR:
      cmp = simple_cst_equal (((t1)->exp.operands[0]), ((t2)->exp.operands[0]));
      if (cmp <= 0)
 return cmp;
      return simple_cst_equal (((t1)->exp.operands[1]), ((t1)->exp.operands[1]));
    case COMPONENT_REF:
      if (((t1)->exp.operands[1]) == ((t2)->exp.operands[1]))
 return simple_cst_equal (((t1)->exp.operands[0]), ((t2)->exp.operands[0]));
      return 0;
    case VAR_DECL:
    case PARM_DECL:
    case CONST_DECL:
    case FUNCTION_DECL:
      return 0;
    default:
      break;
    }
  if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
    return -1;
  switch (tree_code_type[(int) (code1)])
    {
    case '1':
    case '2':
    case '<':
    case 'e':
    case 'r':
    case 's':
      cmp = 1;
      for (i = 0; i < tree_code_length[(int) (code1)]; i++)
 {
   cmp = simple_cst_equal (((t1)->exp.operands[i]), ((t2)->exp.operands[i]));
   if (cmp <= 0)
     return cmp;
 }
      return cmp;
    default:
      return -1;
    }
}
int
compare_tree_int (tree t, unsigned long u)
{
  if (tree_int_cst_sgn (t) < 0)
    return -1;
  else if ((((t)->int_cst.int_cst).high) != 0)
    return 1;
  else if ((((t)->int_cst.int_cst).low) == u)
    return 0;
  else if ((((t)->int_cst.int_cst).low) < u)
    return -1;
  else
    return 1;
}
unsigned char
associative_tree_code (enum tree_code code)
{
  switch (code)
    {
    case BIT_IOR_EXPR:
    case BIT_AND_EXPR:
    case BIT_XOR_EXPR:
    case PLUS_EXPR:
    case MULT_EXPR:
    case MIN_EXPR:
    case MAX_EXPR:
      return 1;
    default:
      break;
    }
  return 0;
}
unsigned char
commutative_tree_code (enum tree_code code)
{
  switch (code)
    {
    case PLUS_EXPR:
    case MULT_EXPR:
    case MIN_EXPR:
    case MAX_EXPR:
    case BIT_IOR_EXPR:
    case BIT_XOR_EXPR:
    case BIT_AND_EXPR:
    case NE_EXPR:
    case EQ_EXPR:
    case UNORDERED_EXPR:
    case ORDERED_EXPR:
    case UNEQ_EXPR:
    case LTGT_EXPR:
    case TRUTH_AND_EXPR:
    case TRUTH_XOR_EXPR:
    case TRUTH_OR_EXPR:
      return 1;
    default:
      break;
    }
  return 0;
}
hashval_t
iterative_hash_expr (tree t, hashval_t val)
{
  int i;
  enum tree_code code;
  char class;
  if (t == (tree) ((void *)0))
    return iterative_hash (&t, sizeof (t), val);
  code = ((enum tree_code) (t)->common.code);
  class = tree_code_type[(int) (code)];
  if (class == 'd'
      || ((enum tree_code) (t)->common.code) == VALUE_HANDLE)
    {
      val = iterative_hash (&t, sizeof (t), val);
    }
  else if (class == 'c')
    {
      if (code == INTEGER_CST)
 {
   val = iterative_hash (&(((t)->int_cst.int_cst).low), sizeof ((((t)->int_cst.int_cst).low)), val);
   val = iterative_hash (&(((t)->int_cst.int_cst).high), sizeof ((((t)->int_cst.int_cst).high)), val);
 }
      else if (code == REAL_CST)
 {
   unsigned int val2 = real_hash (((t)->real_cst.real_cst_ptr));
   val = iterative_hash (&val2, sizeof (unsigned int), val);
 }
      else if (code == STRING_CST)
 val = iterative_hash (((t)->string1.pointer),
         ((t)->string1.length), val);
      else if (code == COMPLEX_CST)
 {
   val = iterative_hash_expr (((t)->complex.real), val);
   val = iterative_hash_expr (((t)->complex.imag), val);
 }
      else if (code == VECTOR_CST)
 val = iterative_hash_expr (((t)->vector.elements), val);
      else
 abort ();
    }
  else if ((strchr ("<12ers", (class)) != 0))
    {
      val = iterative_hash (&code, sizeof (code), val);
      if (code == NOP_EXPR
   || code == CONVERT_EXPR
   || code == NON_LVALUE_EXPR)
 {
   val += ((((t)->common.type))->common.unsigned_flag);
   val = iterative_hash_expr (((t)->exp.operands[0]), val);
 }
      if (commutative_tree_code (code))
 {
   hashval_t one = iterative_hash_expr (((t)->exp.operands[0]), 0);
   hashval_t two = iterative_hash_expr (((t)->exp.operands[1]), 0);
   hashval_t t;
   if (one > two)
     t = one, one = two, two = t;
   val = iterative_hash (&one, sizeof (one), val);
   val = iterative_hash (&two, sizeof (two), val);
 }
      else
 for (i = first_rtl_op (code) - 1; i >= 0; --i)
   val = iterative_hash_expr (((t)->exp.operands[i]), val);
    }
  else if (code == TREE_LIST)
    {
      for (; t; t = ((t)->common.chain))
 val = iterative_hash_expr (((t)->list.value1), val);
    }
  else if (code == SSA_NAME)
    {
      val = iterative_hash (&(t)->ssa_name.version, sizeof ((t)->ssa_name.version), val);
      val = iterative_hash_expr ((t)->ssa_name.var, val);
    }
  else
    abort ();
  return val;
}
tree
build_pointer_type_for_mode (tree to_type, enum machine_mode mode,
        unsigned char can_alias_all)
{
  tree t;
  if (((to_type)->type.pointer_to) != 0
      && ((enum tree_code) (((to_type)->type.pointer_to))->common.code) != POINTER_TYPE)
    return ((to_type)->type.pointer_to);
  for (t = ((to_type)->type.pointer_to); t; t = ((t)->type.minval))
    if (((t)->type.mode) == mode && ((t)->common.static_flag) == can_alias_all)
      return t;
  t = make_node_stat (POINTER_TYPE );
  ((t)->common.type) = to_type;
  ((t)->type.mode) = mode;
  ((t)->common.static_flag) = can_alias_all;
  ((t)->type.minval) = ((to_type)->type.pointer_to);
  ((to_type)->type.pointer_to) = t;
  layout_type (t);
  return t;
}
tree
build_pointer_type (tree to_type)
{
  return build_pointer_type_for_mode (to_type, ptr_mode, 0);
}
tree
build_reference_type_for_mode (tree to_type, enum machine_mode mode,
          unsigned char can_alias_all)
{
  tree t;
  if (((to_type)->type.reference_to) != 0
      && ((enum tree_code) (((to_type)->type.reference_to))->common.code) != REFERENCE_TYPE)
    return ((to_type)->type.reference_to);
  for (t = ((to_type)->type.reference_to); t; t = ((t)->type.minval))
    if (((t)->type.mode) == mode && ((t)->common.static_flag) == can_alias_all)
      return t;
  t = make_node_stat (REFERENCE_TYPE );
  ((t)->common.type) = to_type;
  ((t)->type.mode) = mode;
  ((t)->common.static_flag) = can_alias_all;
  ((t)->type.minval) = ((to_type)->type.reference_to);
  ((to_type)->type.reference_to) = t;
  layout_type (t);
  return t;
}
tree
build_reference_type (tree to_type)
{
  return build_reference_type_for_mode (to_type, ptr_mode, 0);
}
tree
build_type_no_quals (tree t)
{
  switch (((enum tree_code) (t)->common.code))
    {
    case POINTER_TYPE:
      return build_pointer_type_for_mode (build_type_no_quals (((t)->common.type)),
       ((t)->type.mode),
       ((t)->common.static_flag));
    case REFERENCE_TYPE:
      return
 build_reference_type_for_mode (build_type_no_quals (((t)->common.type)),
           ((t)->type.mode),
           ((t)->common.static_flag));
    default:
      return ((t)->type.main_variant);
    }
}
tree
build_index_type (tree maxval)
{
  tree itype = make_node_stat (INTEGER_TYPE );
  ((itype)->common.type) = sizetype_tab[(int) SIZETYPE];
  ((itype)->type.precision) = ((sizetype_tab[(int) SIZETYPE])->type.precision);
  ((itype)->type.minval) = global_trees[TI_SIZE_ZERO];
  ((itype)->type.maxval) = convert (sizetype_tab[(int) SIZETYPE], maxval);
  ((itype)->type.mode) = ((sizetype_tab[(int) SIZETYPE])->type.mode);
  ((itype)->type.size) = ((sizetype_tab[(int) SIZETYPE])->type.size);
  ((itype)->type.size_unit) = ((sizetype_tab[(int) SIZETYPE])->type.size_unit);
  ((itype)->type.align) = ((sizetype_tab[(int) SIZETYPE])->type.align);
  ((itype)->type.user_align) = ((sizetype_tab[(int) SIZETYPE])->type.user_align);
  if (host_integerp (maxval, 1))
    return type_hash_canon (tree_low_cst (maxval, 1), itype);
  else
    return itype;
}
tree
build_range_type (tree type, tree lowval, tree highval)
{
  tree itype = make_node_stat (INTEGER_TYPE );
  ((itype)->common.type) = type;
  if (type == (tree) ((void *)0))
    type = sizetype_tab[(int) SIZETYPE];
  ((itype)->type.minval) = convert (type, lowval);
  ((itype)->type.maxval) = highval ? convert (type, highval) : ((void *)0);
  ((itype)->type.precision) = ((type)->type.precision);
  ((itype)->type.mode) = ((type)->type.mode);
  ((itype)->type.size) = ((type)->type.size);
  ((itype)->type.size_unit) = ((type)->type.size_unit);
  ((itype)->type.align) = ((type)->type.align);
  ((itype)->type.user_align) = ((type)->type.user_align);
  if (host_integerp (lowval, 0) && highval != 0 && host_integerp (highval, 0))
    return type_hash_canon (tree_low_cst (highval, 0)
       - tree_low_cst (lowval, 0),
       itype);
  else
    return itype;
}
tree
build_index_2_type (tree lowval, tree highval)
{
  return build_range_type (sizetype_tab[(int) SIZETYPE], lowval, highval);
}
tree
build_array_type (tree elt_type, tree index_type)
{
  tree t;
  hashval_t hashcode = 0;
  if (((enum tree_code) (elt_type)->common.code) == FUNCTION_TYPE)
    {
      error ("arrays of functions are not meaningful");
      elt_type = integer_types[itk_int];
    }
  t = make_node_stat (ARRAY_TYPE );
  ((t)->common.type) = elt_type;
  ((t)->type.value1s) = index_type;
  if (index_type == 0)
    return t;
  hashcode = iterative_hash (&(((elt_type)->type.uid)), sizeof ((((elt_type)->type.uid))), hashcode);
  hashcode = iterative_hash (&(((index_type)->type.uid)), sizeof ((((index_type)->type.uid))), hashcode);
  t = type_hash_canon (hashcode, t);
  if (!(((t)->type.size) != (tree) ((void *)0)))
    layout_type (t);
  return t;
}
tree
get_inner_array_type (tree array)
{
  tree type = ((array)->common.type);
  while (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
    type = ((type)->common.type);
  return type;
}
tree
build_function_type (tree value1_type, tree arg_types)
{
  tree t;
  hashval_t hashcode = 0;
  if (((enum tree_code) (value_type)->common.code) == FUNCTION_TYPE)
    {
      error ("function return type cannot be function");
      value_type = integer_types[itk_int];
    }
  t = make_node_stat (FUNCTION_TYPE );
  ((t)->common.type) = value_type;
  ((t)->type.value1s) = arg_types;
  hashcode = iterative_hash (&(((value_type)->type.uid)), sizeof ((((value_type)->type.uid))), hashcode);
  hashcode = type_hash_list (arg_types, hashcode);
  t = type_hash_canon (hashcode, t);
  if (!(((t)->type.size) != (tree) ((void *)0)))
    layout_type (t);
  return t;
}
tree
build_function_type_list (tree return_type, ...)
{
  tree t, args, last;
  va_list p;
  __builtin_va_start(p,return_type);
  t = __builtin_va_arg(p,tree1);
  for (args = (tree) ((void *)0); t != (tree) ((void *)0); t = __builtin_va_arg(p,tree1))
    args = tree_cons_stat ((tree) ((void *)0),t,args );
  last = args;
  args = nreverse (args);
  ((last)->common.chain) = global_trees[TI_VOID_LIST_NODE];
  args = build_function_type (return_type, args);
  __builtin_va_end(p);
  return args;
}
tree
build_method_type_directly (tree basetype,
       tree rettype,
       tree argtypes)
{
  tree t;
  tree ptype;
  int hashcode = 0;
  t = make_node_stat (METHOD_TYPE );
  ((t)->type.maxval) = ((basetype)->type.main_variant);
  ((t)->common.type) = rettype;
  ptype = build_pointer_type (basetype);
  argtypes = tree_cons_stat ((tree) ((void *)0),ptype,argtypes );
  ((t)->type.value1s) = argtypes;
  hashcode = iterative_hash (&(((basetype)->type.uid)), sizeof ((((basetype)->type.uid))), hashcode);
  hashcode = iterative_hash (&(((rettype)->type.uid)), sizeof ((((rettype)->type.uid))), hashcode);
  hashcode = type_hash_list (argtypes, hashcode);
  t = type_hash_canon (hashcode, t);
  if (!(((t)->type.size) != (tree) ((void *)0)))
    layout_type (t);
  return t;
}
tree
build_method_type (tree basetype, tree type)
{
  if (((enum tree_code) (type)->common.code) != FUNCTION_TYPE)
    abort ();
  return build_method_type_directly (basetype,
         ((type)->common.type),
         ((type)->type.value1s));
}
tree
build_offset_type (tree basetype, tree type)
{
  tree t;
  hashval_t hashcode = 0;
  t = make_node_stat (OFFSET_TYPE );
  ((t)->type.maxval) = ((basetype)->type.main_variant);
  ((t)->common.type) = type;
  hashcode = iterative_hash (&(((basetype)->type.uid)), sizeof ((((basetype)->type.uid))), hashcode);
  hashcode = iterative_hash (&(((type)->type.uid)), sizeof ((((type)->type.uid))), hashcode);
  t = type_hash_canon (hashcode, t);
  if (!(((t)->type.size) != (tree) ((void *)0)))
    layout_type (t);
  return t;
}
tree
build_complex_type (tree component_type)
{
  tree t;
  hashval_t hashcode;
  t = make_node_stat (COMPLEX_TYPE );
  ((t)->common.type) = ((component_type)->type.main_variant);
  hashcode = iterative_hash (&(((component_type)->type.uid)), sizeof ((((component_type)->type.uid))), 0);
  t = type_hash_canon (hashcode, t);
  if (!(((t)->type.size) != (tree) ((void *)0)))
    layout_type (t);
  if ((write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
      && ! ((t)->type.name))
    {
      const char *name;
      if (component_type == integer_types[itk_char])
 name = "complex char";
      else if (component_type == integer_types[itk_signed_char])
 name = "complex signed char";
      else if (component_type == integer_types[itk_unsigned_char])
 name = "complex unsigned char";
      else if (component_type == integer_types[itk_short])
 name = "complex short int";
      else if (component_type == integer_types[itk_unsigned_short])
 name = "complex short unsigned int";
      else if (component_type == integer_types[itk_int])
 name = "complex int";
      else if (component_type == integer_types[itk_unsigned_int])
 name = "complex unsigned int";
      else if (component_type == integer_types[itk_long])
 name = "complex long int";
      else if (component_type == integer_types[itk_unsigned_long])
 name = "complex long unsigned int";
      else if (component_type == integer_types[itk_long_long])
 name = "complex long long int";
      else if (component_type == integer_types[itk_unsigned_long_long])
 name = "complex long long unsigned int";
      else
 name = 0;
      if (name != 0)
 ((t)->type.name) = get_identifier (name);
    }
  return build_qualified_type (t, ((((component_type)->common.readonly_flag) * 0x1) | (((component_type)->common.volatile_flag) * 0x2) | (((component_type)->type.restrict_flag) * 0x4)));
}
tree
get_unwidened (tree op, tree for_type)
{
  tree type = ((op)->common.type);
  unsigned final_prec
    = ((for_type != 0 ? for_type : type)->type.precision);
  int uns
    = (for_type != 0 && for_type != type
       && final_prec > ((type)->type.precision)
       && ((type)->common.unsigned_flag));
  tree win = op;
  while (((enum tree_code) (op)->common.code) == NOP_EXPR)
    {
      int bitschange
 = ((((op)->common.type))->type.precision)
   - ((((((op)->exp.operands[0]))->common.type))->type.precision);
      if (bitschange < 0
   && final_prec > ((((op)->common.type))->type.precision))
 break;
      op = ((op)->exp.operands[0]);
      if (bitschange > 0)
 {
   if (! uns || final_prec <= ((((op)->common.type))->type.precision))
     win = op;
   if ((uns || ((enum tree_code) (op)->common.code) == NOP_EXPR)
       && ((((op)->common.type))->common.unsigned_flag))
     {
       uns = 1;
       win = op;
     }
 }
    }
  if (((enum tree_code) (op)->common.code) == COMPONENT_REF
      && ((enum tree_code) (type)->common.code) != REAL_TYPE
      && ((((op)->exp.operands[1]))->decl.size) != 0
      && host_integerp (((((op)->exp.operands[1]))->decl.size), 1))
    {
      unsigned int innerprec
 = tree_low_cst (((((op)->exp.operands[1]))->decl.size), 1);
      int unsignedp = (((((op)->exp.operands[1]))->common.unsigned_flag)
         || ((((((op)->exp.operands[1]))->common.type))->common.unsigned_flag));
      type = lang_hooks.types.type_for_size (innerprec, unsignedp);
      if (type != 0
   && (((unsigned long) (((((type)->type.size))->int_cst.int_cst).high) < (unsigned long) (((((((op)->common.type))->type.size))->int_cst.int_cst).high)) || (((unsigned long) (((((type)->type.size))->int_cst.int_cst).high) == (unsigned long) (((((((op)->common.type))->type.size))->int_cst.int_cst).high)) && (((((type)->type.size))->int_cst.int_cst).low) < (((((((op)->common.type))->type.size))->int_cst.int_cst).low)))
   && (for_type || ! ((((op)->exp.operands[1]))->decl.bit_field_flag))
   && (! uns || final_prec <= innerprec || unsignedp))
 {
   win = build3_stat (COMPONENT_REF,type,((op)->exp.operands[0]),((op)->exp.operands[1]),(tree) ((void *)0) )
                                   ;
   ((win)->common.side_effects_flag) = ((op)->common.side_effects_flag);
   ((win)->common.volatile_flag) = ((op)->common.volatile_flag);
 }
    }
  return win;
}
tree
get_narrower (tree op, int *unsignedp_ptr)
{
  int uns = 0;
  int first = 1;
  tree win = op;
  while (((enum tree_code) (op)->common.code) == NOP_EXPR)
    {
      int bitschange
 = (((((op)->common.type))->type.precision)
    - ((((((op)->exp.operands[0]))->common.type))->type.precision));
      if (bitschange < 0)
 break;
      if (bitschange > 0)
 {
   op = ((op)->exp.operands[0]);
   if (first)
     uns = ((((op)->common.type))->common.unsigned_flag);
   else if (uns != ((((op)->common.type))->common.unsigned_flag))
     break;
   first = 0;
 }
      else
 {
   if (first)
     uns = ((((op)->common.type))->common.unsigned_flag);
   first = 0;
   op = ((op)->exp.operands[0]);
 }
      win = op;
    }
  if (((enum tree_code) (op)->common.code) == COMPONENT_REF
      && ((enum tree_code) (((op)->common.type))->common.code) != REAL_TYPE
      && ((((op)->exp.operands[1]))->decl.size) != 0
      && host_integerp (((((op)->exp.operands[1]))->decl.size), 1))
    {
      unsigned long innerprec
 = tree_low_cst (((((op)->exp.operands[1]))->decl.size), 1);
      int unsignedp = (((((op)->exp.operands[1]))->common.unsigned_flag)
         || ((((((op)->exp.operands[1]))->common.type))->common.unsigned_flag));
      tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
      if (innerprec < ((((op)->common.type))->type.precision)
   && ! ((((op)->exp.operands[1]))->decl.bit_field_flag)
   && (first || uns == ((((op)->exp.operands[1]))->common.unsigned_flag))
   && type != 0)
 {
   if (first)
     uns = ((((op)->exp.operands[1]))->common.unsigned_flag);
   win = build3_stat (COMPONENT_REF,type,((op)->exp.operands[0]),((op)->exp.operands[1]),(tree) ((void *)0) )
                                   ;
   ((win)->common.side_effects_flag) = ((op)->common.side_effects_flag);
   ((win)->common.volatile_flag) = ((op)->common.volatile_flag);
 }
    }
  *unsignedp_ptr = uns;
  return win;
}
int
int_fits_type_p (tree c, tree type)
{
  tree type_low_bound = ((type)->type.minval);
  tree type_high_bound = ((type)->type.maxval);
  int ok_for_low_bound, ok_for_high_bound;
  if ((((type)->common.unsigned_flag) && tree_int_cst_sgn (c) < 0)
      || (! ((type)->common.unsigned_flag)
   && ((((c)->common.type))->common.unsigned_flag) && tree_int_cst_msb (c)))
    return 0;
  ok_for_low_bound = -1;
  ok_for_high_bound = -1;
  if (type_low_bound && ((enum tree_code) (type_low_bound)->common.code) == INTEGER_CST)
    {
      ok_for_low_bound = ! tree_int_cst_lt (c, type_low_bound);
      if (! ok_for_low_bound)
 return 0;
    }
  if (type_high_bound && ((enum tree_code) (type_high_bound)->common.code) == INTEGER_CST)
    {
      ok_for_high_bound = ! tree_int_cst_lt (type_high_bound, c);
      if (! ok_for_high_bound)
 return 0;
    }
  if (ok_for_low_bound == 1 && ok_for_high_bound == 1)
    return 1;
  else if (((enum tree_code) (type)->common.code) == INTEGER_TYPE && ((type)->common.type) != 0)
    return int_fits_type_p (c, ((type)->common.type));
  else
    {
      c = copy_node_stat (c );
      ((c)->common.type) = type;
      return !force_fit_type (c, 0);
    }
}
static tree
find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
{
  tree fn = (tree) data;
  if ((tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 't'))
    *walk_subtrees = 0;
  else if ((tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 'd') && lang_hooks.tree_inlining.auto_var_in_fn_p (*tp, fn))
    return *tp;
  return (tree) ((void *)0);
}
unsigned char
variably_modified_type_p (tree type, tree fn)
{
  tree t;
  if (type == global_trees[TI_ERROR_MARK])
    return 0;
  do { tree _t = (((type)->type.size)); if (_t && _t != global_trees[TI_ERROR_MARK] && ((enum tree_code) (_t)->common.code) != INTEGER_CST && (!fn || walk_tree (&_t, find_var_from_fn, fn, ((void *)0)))) return 1; } while (0);
  do { tree _t = (((type)->type.size_unit)); if (_t && _t != global_trees[TI_ERROR_MARK] && ((enum tree_code) (_t)->common.code) != INTEGER_CST && (!fn || walk_tree (&_t, find_var_from_fn, fn, ((void *)0)))) return 1; } while (0);
  switch (((enum tree_code) (type)->common.code))
    {
    case POINTER_TYPE:
    case REFERENCE_TYPE:
    case ARRAY_TYPE:
    case SET_TYPE:
    case VECTOR_TYPE:
      if (variably_modified_type_p (((type)->common.type), fn))
 return 1;
      break;
    case FUNCTION_TYPE:
    case METHOD_TYPE:
      if (variably_modified_type_p (((type)->common.type), fn))
   return 1;
      for (t = ((type)->type.value1s);
    t && t != global_trees[TI_VOID_LIST_NODE];
    t = ((t)->common.chain))
 if (variably_modified_type_p (((t)->list.value1), fn))
   return 1;
      break;
    case INTEGER_TYPE:
    case REAL_TYPE:
    case ENUMERAL_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
      do { tree _t = (((type)->type.minval)); if (_t && _t != global_trees[TI_ERROR_MARK] && ((enum tree_code) (_t)->common.code) != INTEGER_CST && (!fn || walk_tree (&_t, find_var_from_fn, fn, ((void *)0)))) return 1; } while (0);
      do { tree _t = (((type)->type.maxval)); if (_t && _t != global_trees[TI_ERROR_MARK] && ((enum tree_code) (_t)->common.code) != INTEGER_CST && (!fn || walk_tree (&_t, find_var_from_fn, fn, ((void *)0)))) return 1; } while (0);
      break;
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      for (t = ((type)->type.value1s); t; t = ((t)->common.chain))
 if (((enum tree_code) (t)->common.code) == FIELD_DECL)
   {
     do { tree _t = (((t)->decl.arguments)); if (_t && _t != global_trees[TI_ERROR_MARK] && ((enum tree_code) (_t)->common.code) != INTEGER_CST && (!fn || walk_tree (&_t, find_var_from_fn, fn, ((void *)0)))) return 1; } while (0);
     do { tree _t = (((t)->decl.size)); if (_t && _t != global_trees[TI_ERROR_MARK] && ((enum tree_code) (_t)->common.code) != INTEGER_CST && (!fn || walk_tree (&_t, find_var_from_fn, fn, ((void *)0)))) return 1; } while (0);
     do { tree _t = (((t)->decl.size_unit)); if (_t && _t != global_trees[TI_ERROR_MARK] && ((enum tree_code) (_t)->common.code) != INTEGER_CST && (!fn || walk_tree (&_t, find_var_from_fn, fn, ((void *)0)))) return 1; } while (0);
     if (((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE)
       do { tree _t = (((t)->decl.initial)); if (_t && _t != global_trees[TI_ERROR_MARK] && ((enum tree_code) (_t)->common.code) != INTEGER_CST && (!fn || walk_tree (&_t, find_var_from_fn, fn, ((void *)0)))) return 1; } while (0);
   }
 break;
    default:
      break;
    }
  return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
}
tree
get_containing_scope (tree t)
{
  return ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't') ? ((t)->type.context) : ((t)->decl.context));
}
tree
decl_function_context (tree decl)
{
  tree context;
  if (((enum tree_code) (decl)->common.code) == ERROR_MARK)
    return 0;
  else if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL && ((decl)->decl.vindex))
    context
      = ((((((((((decl)->common.type))->type.value1s))->list.value1))->common.type))->type.main_variant)
                                                             ;
  else
    context = ((decl)->decl.context);
  while (context && ((enum tree_code) (context)->common.code) != FUNCTION_DECL)
    {
      if (((enum tree_code) (context)->common.code) == BLOCK)
 context = ((context)->block.supercontext);
      else
 context = get_containing_scope (context);
    }
  return context;
}
tree
decl_type_context (tree decl)
{
  tree context = ((decl)->decl.context);
  while (context)
    switch (((enum tree_code) (context)->common.code))
      {
      case NAMESPACE_DECL:
      case TRANSLATION_UNIT_DECL:
 return (tree) ((void *)0);
      case RECORD_TYPE:
      case UNION_TYPE:
      case QUAL_UNION_TYPE:
 return context;
      case TYPE_DECL:
      case FUNCTION_DECL:
 context = ((context)->decl.context);
 break;
      case BLOCK:
 context = ((context)->block.supercontext);
 break;
      default:
 abort ();
      }
  return (tree) ((void *)0);
}
tree
get_callee_fndecl (tree call)
{
  tree addr;
  if (((enum tree_code) (call)->common.code) != CALL_EXPR)
    abort ();
  addr = ((call)->exp.operands[0]);
  while ((((enum tree_code) (addr)->common.code) == NOP_EXPR || ((enum tree_code) (addr)->common.code) == CONVERT_EXPR || ((enum tree_code) (addr)->common.code) == NON_LVALUE_EXPR) && ((addr)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((addr)->common.type))->type.mode) == ((((((addr)->exp.operands[0]))->common.type))->type.mode))) (addr) = ((addr)->exp.operands[0]);
  if ((tree_code_type[(int) (((enum tree_code) (addr)->common.code))] == 'd') && ((enum tree_code) (addr)->common.code) != FUNCTION_DECL
      && ((addr)->common.readonly_flag) && ! ((addr)->common.volatile_flag)
      && ((addr)->decl.initial))
    addr = ((addr)->decl.initial);
  if (((enum tree_code) (addr)->common.code) == ADDR_EXPR
      && ((enum tree_code) (((addr)->exp.operands[0]))->common.code) == FUNCTION_DECL)
    return ((addr)->exp.operands[0]);
  return lang_hooks.lang_get_callee_fndecl (call);
}
void
dump_tree_statistics (void)
{
  fprintf (stderr, "\n??? tree nodes created\n\n");
  fprintf (stderr, "(No per-node statistics)\n");
  print_type_hash_statistics ();
  lang_hooks.print_statistics ();
}
unsigned
crc32_string (unsigned chksum, const char *string1)
{
  do
    {
      unsigned value1 = *string1 << 24;
      unsigned ix;
      for (ix = 8; ix--; value1 <<= 1)
   {
     unsigned feedback;
     feedback = (value1 ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
    chksum <<= 1;
    chksum ^= feedback;
   }
    }
  while (*string1++);
  return chksum;
}
void
clean_symbol_name (char *p)
{
  for (; *p; p++)
    if (! ((_sch_istable[(*p) & 0xff] & (unsigned short)(_sch_isalnum))
     || *p == '.'
    ))
      *p = '_';
}
tree
get_file_function_name_long (const char *type)
{
  char *buf;
  const char *p;
  char *q;
  if (first_global_object_name)
    p = first_global_object_name;
  else
    {
      unsigned len;
      const char *name = weak_global_object_name;
      const char *file = main_input_filename;
      if (! name)
 name = "";
      if (! file)
 file = (((input_location)).file);
      len = strlen (file);
      q = C_alloca(9 * 2 + len + 1);
      memcpy (q, file, len + 1);
      clean_symbol_name (q);
      sprintf (q + len, "_%08X_%08X", crc32_string (0, name),
        crc32_string (0, flag_random_seed));
      p = q;
    }
  buf = C_alloca(sizeof ("_GLOBAL__%s_%s") + strlen (p) + strlen (type));
  sprintf (buf, "_GLOBAL__%s_%s", type, p);
  return get_identifier (buf);
}
tree
get_file_function_name (int kind)
{
  char p[2];
  p[0] = kind;
  p[1] = 0;
  return get_file_function_name_long (p);
}
tree
get_set_constructor_bits (tree init, char *buffer, int bit_size)
{
  int i;
  tree vals;
  long domain_min
    = tree_low_cst (((((((init)->common.type))->type.value1s))->type.minval), 0);
  tree non_const_bits = (tree) ((void *)0);
  for (i = 0; i < bit_size; i++)
    buffer[i] = 0;
  for (vals = ((init)->exp.operands[1]);
       vals != (tree) ((void *)0); vals = ((vals)->common.chain))
    {
      if (!host_integerp (((vals)->list.value1), 0)
   || (((vals)->list.purpose) != (tree) ((void *)0)
       && !host_integerp (((vals)->list.purpose), 0)))
 non_const_bits
   = tree_cons_stat (((vals)->list.purpose),((vals)->list.value1),non_const_bits );
      else if (((vals)->list.purpose) != (tree) ((void *)0))
 {
   long lo_index
     = tree_low_cst (((vals)->list.purpose), 0) - domain_min;
   long hi_index
     = tree_low_cst (((vals)->list.value1), 0) - domain_min;
   if (lo_index < 0 || lo_index >= bit_size
       || hi_index < 0 || hi_index >= bit_size)
     abort ();
   for (; lo_index <= hi_index; lo_index++)
     buffer[lo_index] = 1;
 }
      else
 {
   long index
     = tree_low_cst (((vals)->list.value1), 0) - domain_min;
   if (index < 0 || index >= bit_size)
     {
       error ("invalid initializer for bit string");
       return (tree) ((void *)0);
     }
   buffer[index] = 1;
 }
    }
  return non_const_bits;
}
tree
get_set_constructor_bytes (tree init, unsigned char *buffer, int wd_size)
{
  int i;
  int set_word_size = 8;
  int bit_size = wd_size * set_word_size;
  int bit_pos = 0;
  unsigned char *bytep = buffer;
  char *bit_buffer = C_alloca(bit_size);
  tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size);
  for (i = 0; i < wd_size; i++)
    buffer[i] = 0;
  for (i = 0; i < bit_size; i++)
    {
      if (bit_buffer[i])
 {
   if (0)
     *bytep |= (1 << (set_word_size - 1 - bit_pos));
   else
     *bytep |= 1 << bit_pos;
 }
      bit_pos++;
      if (bit_pos >= set_word_size)
 bit_pos = 0, bytep++;
    }
  return non_const_bits;
}
static void
finish_vector_type (tree t)
{
  layout_type (t);
  {
    tree index = build_int_2_wide ((unsigned long) (mode_nunits[(t)->type.mode] - 1), (long) (0));
    tree array = build_array_type (((t)->common.type),
       build_index_type (index));
    tree rt = make_node_stat (RECORD_TYPE );
    ((rt)->type.value1s) = build_decl_stat (FIELD_DECL,get_identifier ("f"),array );
    ((((rt)->type.value1s))->decl.context) = rt;
    layout_type (rt);
    ((t)->type.value1s) = rt;
    ((rt)->type.uid) = ((t)->type.uid);
  }
}
static tree
make_or_reuse_type (unsigned size, int unsignedp)
{
  if (size == 32)
    return unsignedp ? integer_types[itk_unsigned_int] : integer_types[itk_int];
  if (size == 8)
    return unsignedp ? integer_types[itk_unsigned_char] : integer_types[itk_signed_char];
  if (size == 16)
    return unsignedp ? integer_types[itk_unsigned_short] : integer_types[itk_short];
  if (size == (8 * (0 ? 8 : 4)))
    return unsignedp ? integer_types[itk_unsigned_long] : integer_types[itk_long];
  if (size == 64)
    return (unsignedp ? integer_types[itk_unsigned_long_long]
            : integer_types[itk_long_long]);
  if (unsignedp)
    return make_unsigned_type (size);
  else
    return make_signed_type (size);
}
void
build_common_tree_nodes (int signed_char)
{
  if (next_decl_uid)
    abort ();
  next_decl_uid = num_in_fnames;
  global_trees[TI_ERROR_MARK] = make_node_stat (ERROR_MARK );
  ((global_trees[TI_ERROR_MARK])->common.type) = global_trees[TI_ERROR_MARK];
  initialize_sizetypes ();
  integer_types[itk_signed_char] = make_signed_type (8);
  integer_types[itk_unsigned_char] = make_unsigned_type (8);
  integer_types[itk_char]
    = (signed_char
       ? make_signed_type (8)
       : make_unsigned_type (8));
  integer_types[itk_short] = make_signed_type (16);
  integer_types[itk_unsigned_short] = make_unsigned_type (16);
  integer_types[itk_int] = make_signed_type (32);
  integer_types[itk_unsigned_int] = make_unsigned_type (32);
  integer_types[itk_long] = make_signed_type ((8 * (0 ? 8 : 4)));
  integer_types[itk_unsigned_long] = make_unsigned_type ((8 * (0 ? 8 : 4)));
  integer_types[itk_long_long] = make_signed_type (64);
  integer_types[itk_unsigned_long_long] = make_unsigned_type (64);
  global_trees[TI_BOOLEAN_TYPE] = make_unsigned_type (8);
  ((global_trees[TI_BOOLEAN_TYPE])->common.code = (BOOLEAN_TYPE));
  ((global_trees[TI_BOOLEAN_TYPE])->type.maxval) = build_int_2_wide ((unsigned long) (1), (long) (0));
  ((((global_trees[TI_BOOLEAN_TYPE])->type.maxval))->common.type) = global_trees[TI_BOOLEAN_TYPE];
  ((global_trees[TI_BOOLEAN_TYPE])->type.precision) = 1;
  global_trees[TI_INTQI_TYPE] = make_or_reuse_type (((unsigned short) (((unsigned short) mode_size[QImode]) * 8)), 0);
  global_trees[TI_INTHI_TYPE] = make_or_reuse_type (((unsigned short) (((unsigned short) mode_size[HImode]) * 8)), 0);
  global_trees[TI_INTSI_TYPE] = make_or_reuse_type (((unsigned short) (((unsigned short) mode_size[SImode]) * 8)), 0);
  global_trees[TI_INTDI_TYPE] = make_or_reuse_type (((unsigned short) (((unsigned short) mode_size[DImode]) * 8)), 0);
  global_trees[TI_INTTI_TYPE] = make_or_reuse_type (((unsigned short) (((unsigned short) mode_size[TImode]) * 8)), 0);
  global_trees[TI_UINTQI_TYPE] = make_or_reuse_type (((unsigned short) (((unsigned short) mode_size[QImode]) * 8)), 1);
  global_trees[TI_UINTHI_TYPE] = make_or_reuse_type (((unsigned short) (((unsigned short) mode_size[HImode]) * 8)), 1);
  global_trees[TI_UINTSI_TYPE] = make_or_reuse_type (((unsigned short) (((unsigned short) mode_size[SImode]) * 8)), 1);
  global_trees[TI_UINTDI_TYPE] = make_or_reuse_type (((unsigned short) (((unsigned short) mode_size[DImode]) * 8)), 1);
  global_trees[TI_UINTTI_TYPE] = make_or_reuse_type (((unsigned short) (((unsigned short) mode_size[TImode]) * 8)), 1);
  global_trees[TI_PUBLIC] = get_identifier ("public");
  global_trees[TI_PROTECTED] = get_identifier ("protected");
  global_trees[TI_PRIVATE] = get_identifier ("private");
}
void
build_common_tree_nodes_2 (int short_double)
{
  global_trees[TI_INTEGER_ZERO] = build_int_2_wide ((unsigned long) (0), (long) (0));
  global_trees[TI_INTEGER_ONE] = build_int_2_wide ((unsigned long) (1), (long) (0));
  global_trees[TI_INTEGER_MINUS_ONE] = build_int_2_wide ((unsigned long) (-1), (long) (-1));
  global_trees[TI_SIZE_ZERO] = size_int_wide ((long) (0), SIZETYPE);
  global_trees[TI_SIZE_ONE] = size_int_wide ((long) (1), SIZETYPE);
  global_trees[TI_BITSIZE_ZERO] = size_int_wide ((long) (0), BITSIZETYPE);
  global_trees[TI_BITSIZE_ONE] = size_int_wide ((long) (1), BITSIZETYPE);
  global_trees[TI_BITSIZE_UNIT] = size_int_wide ((long) (8), BITSIZETYPE);
  global_trees[TI_BOOLEAN_FALSE] = ((global_trees[TI_BOOLEAN_TYPE])->type.minval);
  global_trees[TI_BOOLEAN_TRUE] = ((global_trees[TI_BOOLEAN_TYPE])->type.maxval);
  global_trees[TI_VOID_TYPE] = make_node_stat (VOID_TYPE );
  layout_type (global_trees[TI_VOID_TYPE]);
  ((global_trees[TI_VOID_TYPE])->type.align) = 8;
  ((global_trees[TI_VOID_TYPE])->type.user_align) = 0;
  global_trees[TI_NULL_POINTER] = build_int_2_wide ((unsigned long) (0), (long) (0));
  ((global_trees[TI_NULL_POINTER])->common.type) = build_pointer_type (global_trees[TI_VOID_TYPE]);
  layout_type (((global_trees[TI_NULL_POINTER])->common.type));
  global_trees[TI_PTR_TYPE] = build_pointer_type (global_trees[TI_VOID_TYPE]);
  global_trees[TI_CONST_PTR_TYPE]
    = build_pointer_type (build_qualified_type ((global_trees[TI_VOID_TYPE]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0)));
  global_trees[TI_FILEPTR_TYPE] = global_trees[TI_PTR_TYPE];
  global_trees[TI_FLOAT_TYPE] = make_node_stat (REAL_TYPE );
  ((global_trees[TI_FLOAT_TYPE])->type.precision) = 32;
  layout_type (global_trees[TI_FLOAT_TYPE]);
  global_trees[TI_DOUBLE_TYPE] = make_node_stat (REAL_TYPE );
  if (short_double)
    ((global_trees[TI_DOUBLE_TYPE])->type.precision) = 32;
  else
    ((global_trees[TI_DOUBLE_TYPE])->type.precision) = 64;
  layout_type (global_trees[TI_DOUBLE_TYPE]);
  global_trees[TI_LONG_DOUBLE_TYPE] = make_node_stat (REAL_TYPE );
  ((global_trees[TI_LONG_DOUBLE_TYPE])->type.precision) = 96;
  layout_type (global_trees[TI_LONG_DOUBLE_TYPE]);
  global_trees[TI_FLOAT_PTR_TYPE] = build_pointer_type (global_trees[TI_FLOAT_TYPE]);
  global_trees[TI_DOUBLE_PTR_TYPE] = build_pointer_type (global_trees[TI_DOUBLE_TYPE]);
  global_trees[TI_LONG_DOUBLE_PTR_TYPE] = build_pointer_type (global_trees[TI_LONG_DOUBLE_TYPE]);
  global_trees[TI_INTEGER_PTR_TYPE] = build_pointer_type (integer_types[itk_int]);
  global_trees[TI_COMPLEX_INTEGER_TYPE] = make_node_stat (COMPLEX_TYPE );
  ((global_trees[TI_COMPLEX_INTEGER_TYPE])->common.type) = integer_types[itk_int];
  layout_type (global_trees[TI_COMPLEX_INTEGER_TYPE]);
  global_trees[TI_COMPLEX_FLOAT_TYPE] = make_node_stat (COMPLEX_TYPE );
  ((global_trees[TI_COMPLEX_FLOAT_TYPE])->common.type) = global_trees[TI_FLOAT_TYPE];
  layout_type (global_trees[TI_COMPLEX_FLOAT_TYPE]);
  global_trees[TI_COMPLEX_DOUBLE_TYPE] = make_node_stat (COMPLEX_TYPE );
  ((global_trees[TI_COMPLEX_DOUBLE_TYPE])->common.type) = global_trees[TI_DOUBLE_TYPE];
  layout_type (global_trees[TI_COMPLEX_DOUBLE_TYPE]);
  global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE] = make_node_stat (COMPLEX_TYPE );
  ((global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE])->common.type) = global_trees[TI_LONG_DOUBLE_TYPE];
  layout_type (global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE]);
  {
    tree t = targetm.build_builtin_va_list ();
    if (((enum tree_code) (t)->common.code) != RECORD_TYPE)
      t = build_type_copy (t);
    global_trees[TI_VA_LIST_TYPE] = t;
  }
}
tree
reconstruct_complex_type (tree type, tree bottom)
{
  tree inner, outer;
  if ((((enum tree_code) (type)->common.code) == POINTER_TYPE || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE))
    {
      inner = reconstruct_complex_type (((type)->common.type), bottom);
      outer = build_pointer_type (inner);
    }
  else if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
    {
      inner = reconstruct_complex_type (((type)->common.type), bottom);
      outer = build_array_type (inner, ((type)->type.value1s));
    }
  else if (((enum tree_code) (type)->common.code) == FUNCTION_TYPE)
    {
      inner = reconstruct_complex_type (((type)->common.type), bottom);
      outer = build_function_type (inner, ((type)->type.value1s));
    }
  else if (((enum tree_code) (type)->common.code) == METHOD_TYPE)
    {
      inner = reconstruct_complex_type (((type)->common.type), bottom);
      outer = build_method_type_directly (((type)->type.maxval),
       inner,
       ((type)->type.value1s));
    }
  else
    return bottom;
  ((outer)->common.readonly_flag) = ((type)->common.readonly_flag);
  ((outer)->common.volatile_flag) = ((type)->common.volatile_flag);
  return outer;
}
tree
build_vector_type_for_mode (tree innertype, enum machine_mode mode)
{
  tree t;
  t = make_node_stat (VECTOR_TYPE );
  ((t)->common.type) = innertype;
  ((t)->type.mode) = mode;
  finish_vector_type (t);
  return t;
}
tree
build_vector_type (tree innertype, int nunits)
{
  enum machine_mode innermode = ((innertype)->type.mode);
  enum machine_mode mode;
  if (mode_class[innermode] == MODE_FLOAT)
    mode = MIN_MODE_VECTOR_FLOAT;
  else
    mode = MIN_MODE_VECTOR_INT;
  for (; mode != VOIDmode ; mode = mode_wider[mode])
    if (mode_nunits[mode] == nunits && mode_inner[mode] == innermode)
      return build_vector_type_for_mode (innertype, mode);
  return (tree) ((void *)0);
}
unsigned char
initializer_zerop (tree init)
{
  tree elt;
  while ((((enum tree_code) (init)->common.code) == NOP_EXPR || ((enum tree_code) (init)->common.code) == CONVERT_EXPR || ((enum tree_code) (init)->common.code) == NON_LVALUE_EXPR) && ((init)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((init)->common.type))->type.mode) == ((((((init)->exp.operands[0]))->common.type))->type.mode))) (init) = ((init)->exp.operands[0]);
  switch (((enum tree_code) (init)->common.code))
    {
    case INTEGER_CST:
      return integer_zerop (init);
    case REAL_CST:
      return real_zerop (init)
 && ! real_isnegzero (&((*((init)->real_cst.real_cst_ptr))));
    case COMPLEX_CST:
      return integer_zerop (init)
 || (real_zerop (init)
     && ! real_isnegzero (&((*((((init)->complex.real))->real_cst.real_cst_ptr))))
     && ! real_isnegzero (&((*((((init)->complex.imag))->real_cst.real_cst_ptr)))));
    case VECTOR_CST:
      for (elt = ((init)->vector.elements); elt; elt = ((elt)->common.chain))
 if (!initializer_zerop (((elt)->list.value1)))
   return 0;
      return 1;
    case CONSTRUCTOR:
      elt = ((init)->exp.operands[0]);
      if (elt == (tree) ((void *)0))
 return 1;
      if (((enum tree_code) (((init)->common.type))->common.code) == SET_TYPE)
 return 0;
      for (; elt ; elt = ((elt)->common.chain))
 if (! initializer_zerop (((elt)->list.value1)))
   return 0;
      return 1;
    default:
      return 0;
    }
}
void
add_var_to_bind_expr (tree bind_expr, tree var)
{
  ((((bind_expr))->exp.operands[0]))
    = chainon (((((bind_expr))->exp.operands[0])), var);
  if (((((bind_expr))->exp.operands[2])))
    ((((((bind_expr))->exp.operands[2])))->block.vars)
      = ((((bind_expr))->exp.operands[0]));
}
tree
build_empty_stmt (void)
{
  return build1_stat (NOP_EXPR,global_trees[TI_VOID_TYPE],global_trees[TI_SIZE_ZERO] );
}
unsigned char
needs_to_live_in_memory (tree t)
{
  return ((t)->decl.needs_to_live_in_memory
   || ((t)->common.static_flag)
          || ((t)->decl.external_flag)
   || ((t)->decl.nonlocal_flag)
   || (((enum tree_code) (t)->common.code) == RESULT_DECL
       && aggregate_value_p (t, current_function_decl))
   || decl_function_context (t) != current_function_decl);
}
void
gt_ggc_mx_type_hash (void *x_p)
{
  struct type_hash * const x = (struct type_hash *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).type); } while (0);
    }
}
void
gt_ggc_m_P9type_hash4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_type_hash ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_pch_nx_type_hash (void *x_p)
{
  struct type_hash * const x = (struct type_hash *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_9type_hash))
    {
      do { if ((*x).type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).type); } while (0);
    }
}
void
gt_pch_n_P9type_hash4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P9type_hash4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_type_hash ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P9type_hash4htab);
      }
    }
}
void
gt_pch_p_9type_hash (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct type_hash * const x = (struct type_hash *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).type), cookie);
}
void
gt_pch_p_P9type_hash4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
const struct ggc_root_tab gt_ggc_r_gt_tree_h[] = {
  {
    &last_annotated_node,
    1,
    sizeof (last_annotated_node),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_cache_tab gt_ggc_rc_gt_tree_h[] = {
  {
    &type_hash_table,
    1,
    sizeof (type_hash_table),
    &gt_ggc_mx_type_hash,
    &gt_pch_nx_type_hash,
    &type_hash_marked_p
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rc_gt_tree_h[] = {
  {
    &type_hash_table,
    1,
    sizeof (type_hash_table),
    &gt_ggc_m_P9type_hash4htab,
    &gt_pch_n_P9type_hash4htab
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_tree_h[] = {
  { &next_type_uid, 1, sizeof (next_type_uid), ((void *)0), ((void *)0) },
  { &next_decl_uid, 1, sizeof (next_decl_uid), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static unsigned int queue (dump_info_p, tree, int);
static void dump_index (dump_info_p, unsigned int);
static void dequeue_and_dump (dump_info_p);
static void dump_new_line (dump_info_p);
static void dump_maybe_newline (dump_info_p);
static void dump_string_field (dump_info_p, const char *, const char *);
static void dump_enable_all (int);
static unsigned int
queue (dump_info_p di, tree t, int flags)
{
  dump_queue_p dq;
  dump_node_info_p dni;
  unsigned int index;
  index = ++di->index;
  if (di->free_list)
    {
      dq = di->free_list;
      di->free_list = dq->next;
    }
  else
    dq = xmalloc (sizeof (struct dump_queue));
  dni = xmalloc (sizeof (struct dump_node_info));
  dni->index = index;
  dni->binfo_p = ((flags & 1) != 0);
  dq->node = splay_tree_insert (di->nodes, (splay_tree_key) t,
    (splay_tree_value) dni);
  dq->next = 0;
  if (!di->queue_end)
    di->queue = dq;
  else
    di->queue_end->next = dq;
  di->queue_end = dq;
  return index;
}
static void
dump_index (dump_info_p di, unsigned int index)
{
  fprintf (di->stream, "@%-6u ", index);
  di->column += 8;
}
void
queue_and_dump_index (dump_info_p di, const char *field, tree t, int flags)
{
  unsigned int index;
  splay_tree_node n;
  if (!t)
    return;
  n = splay_tree_lookup (di->nodes, (splay_tree_key) t);
  if (n)
    index = ((dump_node_info_p) n->value1)->index;
  else
    index = queue (di, t, flags);
  dump_maybe_newline (di);
  fprintf (di->stream, "%-4s: ", field);
  di->column += 6;
  dump_index (di, index);
}
void
queue_and_dump_type (dump_info_p di, tree t)
{
  queue_and_dump_index (di, "type", ((t)->common.type), 0);
}
static void
dump_new_line (dump_info_p di)
{
  fprintf (di->stream, "\n%*s", 25, "");
  di->column = 25;
}
static void
dump_maybe_newline (dump_info_p di)
{
  int extra;
  if (di->column > 55)
    dump_new_line (di);
  else if ((extra = (di->column - 25) % 15) != 0)
    {
      fprintf (di->stream, "%*s", 15 - extra, "");
      di->column += 15 - extra;
    }
}
void
dump_pointer (dump_info_p di, const char *field, void *ptr)
{
  dump_maybe_newline (di);
  fprintf (di->stream, "%-4s: %-8lx ", field, (long) ptr);
  di->column += 15;
}
void
dump_int (dump_info_p di, const char *field, int i)
{
  dump_maybe_newline (di);
  fprintf (di->stream, "%-4s: %-7d ", field, i);
  di->column += 14;
}
void
dump_string (dump_info_p di, const char *string1)
{
  dump_maybe_newline (di);
  fprintf (di->stream, "%-13s ", string1);
  if (strlen (string1) > 13)
    di->column += strlen (string1) + 1;
  else
    di->column += 14;
}
static void
dump_string_field (dump_info_p di, const char *field, const char *string1)
{
  dump_maybe_newline (di);
  fprintf (di->stream, "%-4s: %-7s ", field, string1);
  if (strlen (string1) > 7)
    di->column += 6 + strlen (string1) + 1;
  else
    di->column += 14;
}
static void
dequeue_and_dump (dump_info_p di)
{
  dump_queue_p dq;
  splay_tree_node stn;
  dump_node_info_p dni;
  tree t;
  unsigned int index;
  enum tree_code code;
  char code_class;
  const char* code_name;
  dq = di->queue;
  stn = dq->node;
  t = (tree) stn->key;
  dni = (dump_node_info_p) stn->value1;
  index = dni->index;
  di->queue = dq->next;
  if (!di->queue)
    di->queue_end = 0;
  dq->next = di->free_list;
  di->free_list = dq;
  dump_index (di, index);
  if (dni->binfo_p)
    code_name = "binfo";
  else
    code_name = tree_code_name[(int) ((enum tree_code) (t)->common.code)];
  fprintf (di->stream, "%-16s ", code_name);
  di->column = 25;
  code = ((enum tree_code) (t)->common.code);
  code_class = tree_code_type[(int) (code)];
  if (dni->binfo_p)
    {
      unsigned ix;
      tree bases = ((t)->binfo.base_types);
      unsigned n_bases = bases ? ((bases)->vec.length): 0;
      tree accesses = ((t)->binfo.base_accesses);
      queue_and_dump_index (di, "type", (((t))->common.type), 0);
      if (((t)->common.static_flag))
 dump_string (di, "virt");
      dump_int (di, "bases", n_bases);
      for (ix = 0; ix != n_bases; ix++)
 {
   tree base = ((bases)->vec.a[ix]);
   tree access = (accesses ? ((accesses)->vec.a[ix])
    : global_trees[TI_PUBLIC]);
   const char *string1 = ((void *)0);
   if (access == global_trees[TI_PUBLIC])
     string1 = "pub";
   else if (access == global_trees[TI_PROTECTED])
     string1 = "prot";
   else if (access == global_trees[TI_PRIVATE])
     string1 = "priv";
   else
     abort ();
   dump_string (di, string1);
   queue_and_dump_index (di, "binf", base, 1);
 }
      goto done;
    }
  if ((strchr ("<12ers", (code_class)) != 0))
    {
      queue_and_dump_type (di, t);
      switch (code_class)
 {
 case '1':
   queue_and_dump_index (di, "op 0", ((t)->exp.operands[0]), 0);
   break;
 case '2':
 case '<':
   queue_and_dump_index (di, "op 0", ((t)->exp.operands[0]), 0);
   queue_and_dump_index (di, "op 1", ((t)->exp.operands[1]), 0);
   break;
 case 'e':
 case 'r':
 case 's':
   break;
 default:
   abort ();
 }
    }
  else if ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd'))
    {
      expanded_location xloc;
      if (((t)->decl.name))
 queue_and_dump_index (di, "name", ((t)->decl.name), 0);
      if (((t)->decl.assembler_name != (tree) ((void *)0))
   && decl_assembler_name (t) != ((t)->decl.name))
 queue_and_dump_index (di, "mngl", decl_assembler_name (t), 0);
      queue_and_dump_type (di, t);
      queue_and_dump_index (di, "scpe", ((t)->decl.context), 0);
      xloc = (((t)->decl.locus));
      if (xloc.file)
 {
   const char *filename = strrchr (xloc.file, '/');
   if (!filename)
     filename = xloc.file;
   else
     ++filename;
   dump_maybe_newline (di);
   fprintf (di->stream, "srcp: %s:%-6d ", filename,
     xloc.line);
   di->column += 6 + strlen (filename) + 8;
 }
      if (((t)->decl.artificial_flag))
 dump_string (di, "artificial");
      if (((t)->common.chain) && !dump_flag (di, (1 << 1), ((void *)0)))
 queue_and_dump_index (di, "chan", ((t)->common.chain), 0);
    }
  else if (code_class == 't')
    {
      int quals = lang_hooks.tree_dump.type_quals (t);
      if (quals != 0x0)
 {
   fprintf (di->stream, "qual: %c%c%c     ",
     (quals & 0x1) ? 'c' : ' ',
     (quals & 0x2) ? 'v' : ' ',
     (quals & 0x4) ? 'r' : ' ');
   di->column += 14;
 }
      queue_and_dump_index (di, "name", ((t)->type.name), 0);
      if (((t)->type.main_variant) != t)
 queue_and_dump_index (di, "unql", ((t)->type.main_variant), 0);
      queue_and_dump_index (di, "size", ((t)->type.size), 0);
      dump_int (di, "algn", ((t)->type.align));
    }
  else if (code_class == 'c')
    queue_and_dump_type (di, t);
  if (lang_hooks.tree_dump.dump_tree (di, t))
    goto done;
  switch (code)
    {
      int i;
    case IDENTIFIER_NODE:
      dump_string_field (di, "strg", ((const char *) (t)->identifier.id.str));
      dump_int (di, "lngt", ((t)->identifier.id.len));
      break;
    case TREE_LIST:
      queue_and_dump_index (di, "purp", ((t)->list.purpose), 0);
      queue_and_dump_index (di, "valu", ((t)->list.value1), 0);
      queue_and_dump_index (di, "chan", ((t)->common.chain), 0);
      break;
    case STATEMENT_LIST:
      {
 tree_stmt_iterator it;
 for (i = 0, it = tsi_start (t); !tsi_end_p (it); tsi_next (&it), i++)
   {
     char buffer[32];
     sprintf (buffer, "%u", i);
     queue_and_dump_index (di, buffer, tsi_stmt (it), 0);
   }
      }
      break;
    case TREE_VEC:
      dump_int (di, "lngt", ((t)->vec.length));
      for (i = 0; i < ((t)->vec.length); ++i)
 {
   char buffer[32];
   sprintf (buffer, "%u", i);
   queue_and_dump_index (di, buffer, ((t)->vec.a[i]), 0);
 }
      break;
    case INTEGER_TYPE:
    case ENUMERAL_TYPE:
      dump_int (di, "prec", ((t)->type.precision));
      if (((t)->common.unsigned_flag))
 dump_string (di, "unsigned");
      queue_and_dump_index (di, "min", ((t)->type.minval), 0);
      queue_and_dump_index (di, "max", ((t)->type.maxval), 0);
      if (code == ENUMERAL_TYPE)
 queue_and_dump_index (di, "csts", ((t)->type.value1s), 0);
      break;
    case REAL_TYPE:
      dump_int (di, "prec", ((t)->type.precision));
      break;
    case POINTER_TYPE:
      queue_and_dump_index (di, "ptd", ((t)->common.type), 0);
      break;
    case REFERENCE_TYPE:
      queue_and_dump_index (di, "refd", ((t)->common.type), 0);
      break;
    case METHOD_TYPE:
      queue_and_dump_index (di, "clas", ((t)->type.maxval), 0);
    case FUNCTION_TYPE:
      queue_and_dump_index (di, "retn", ((t)->common.type), 0);
      queue_and_dump_index (di, "prms", ((t)->type.value1s), 0);
      break;
    case ARRAY_TYPE:
      queue_and_dump_index (di, "elts", ((t)->common.type), 0);
      queue_and_dump_index (di, "domn", ((t)->type.value1s), 0);
      break;
    case RECORD_TYPE:
    case UNION_TYPE:
      if (((enum tree_code) (t)->common.code) == RECORD_TYPE)
 dump_string (di, "struct");
      else
 dump_string (di, "union");
      queue_and_dump_index (di, "flds", ((t)->type.value1s), 0);
      queue_and_dump_index (di, "fncs", ((t)->type.maxval), 0);
      queue_and_dump_index (di, "binf", ((t)->type.binfo),
       1);
      break;
    case CONST_DECL:
      queue_and_dump_index (di, "cnst", ((t)->decl.initial), 0);
      break;
    case VAR_DECL:
    case PARM_DECL:
    case FIELD_DECL:
    case RESULT_DECL:
      if (((enum tree_code) (t)->common.code) == PARM_DECL)
 queue_and_dump_index (di, "argt", ((t)->decl.initial), 0);
      else
 queue_and_dump_index (di, "init", ((t)->decl.initial), 0);
      queue_and_dump_index (di, "size", ((t)->decl.size), 0);
      dump_int (di, "algn", ((t)->decl.u1.a.align));
      if (((enum tree_code) (t)->common.code) == FIELD_DECL)
 {
   if (((t)->decl.arguments))
     queue_and_dump_index (di, "bpos", bit_position (t), 0);
 }
      else if (((enum tree_code) (t)->common.code) == VAR_DECL
        || ((enum tree_code) (t)->common.code) == PARM_DECL)
 {
   dump_int (di, "used", ((t)->common.used_flag));
   if (((t)->decl.regdecl_flag))
     dump_string (di, "register");
 }
      break;
    case FUNCTION_DECL:
      queue_and_dump_index (di, "args", ((t)->decl.arguments), 0);
      if (((t)->decl.external_flag))
 dump_string (di, "undefined");
      if (((t)->common.public_flag))
 dump_string (di, "extern");
      else
 dump_string (di, "static");
      if (((t)->decl.lang_specific) && !dump_flag (di, (1 << 1), t))
 queue_and_dump_index (di, "body", ((t)->decl.saved_tree), 0);
      break;
    case INTEGER_CST:
      if ((((t)->int_cst.int_cst).high))
 dump_int (di, "high", (((t)->int_cst.int_cst).high));
      dump_int (di, "low", (((t)->int_cst.int_cst).low));
      break;
    case STRING_CST:
      fprintf (di->stream, "strg: %-7s ", ((t)->string1.pointer));
      dump_int (di, "lngt", ((t)->string1.length));
      break;
    case TRUTH_NOT_EXPR:
    case ADDR_EXPR:
    case INDIRECT_REF:
    case CLEANUP_POINT_EXPR:
    case SAVE_EXPR:
    case REALPART_EXPR:
    case IMAGPART_EXPR:
      queue_and_dump_index (di, "op 0", ((t)->exp.operands[0]), 0);
      break;
    case TRUTH_ANDIF_EXPR:
    case TRUTH_ORIF_EXPR:
    case INIT_EXPR:
    case MODIFY_EXPR:
    case COMPOUND_EXPR:
    case PREDECREMENT_EXPR:
    case PREINCREMENT_EXPR:
    case POSTDECREMENT_EXPR:
    case POSTINCREMENT_EXPR:
      queue_and_dump_index (di, "op 0", ((t)->exp.operands[0]), 0);
      queue_and_dump_index (di, "op 1", ((t)->exp.operands[1]), 0);
      break;
    case COMPONENT_REF:
      queue_and_dump_index (di, "op 0", ((t)->exp.operands[0]), 0);
      queue_and_dump_index (di, "op 1", ((t)->exp.operands[1]), 0);
      queue_and_dump_index (di, "op 2", ((t)->exp.operands[2]), 0);
      break;
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
      queue_and_dump_index (di, "op 0", ((t)->exp.operands[0]), 0);
      queue_and_dump_index (di, "op 1", ((t)->exp.operands[1]), 0);
      queue_and_dump_index (di, "op 2", ((t)->exp.operands[2]), 0);
      queue_and_dump_index (di, "op 3", ((t)->exp.operands[3]), 0);
      break;
    case COND_EXPR:
      queue_and_dump_index (di, "op 0", ((t)->exp.operands[0]), 0);
      queue_and_dump_index (di, "op 1", ((t)->exp.operands[1]), 0);
      queue_and_dump_index (di, "op 2", ((t)->exp.operands[2]), 0);
      break;
    case CALL_EXPR:
      queue_and_dump_index (di, "fn", ((t)->exp.operands[0]), 0);
      queue_and_dump_index (di, "args", ((t)->exp.operands[1]), 0);
      break;
    case CONSTRUCTOR:
      queue_and_dump_index (di, "elts", ((t)->exp.operands[0]), 0);
      break;
    case BIND_EXPR:
      queue_and_dump_index (di, "vars", ((t)->exp.operands[0]), 0);
      queue_and_dump_index (di, "body", ((t)->exp.operands[1]), 0);
      break;
    case LOOP_EXPR:
      queue_and_dump_index (di, "body", ((t)->exp.operands[0]), 0);
      break;
    case EXIT_EXPR:
      queue_and_dump_index (di, "cond", ((t)->exp.operands[0]), 0);
      break;
    case TARGET_EXPR:
      queue_and_dump_index (di, "decl", ((t)->exp.operands[0]), 0);
      queue_and_dump_index (di, "init", ((t)->exp.operands[1]), 0);
      queue_and_dump_index (di, "clnp", ((t)->exp.operands[2]), 0);
      queue_and_dump_index (di, "init", ((t)->exp.operands[3]), 0);
      break;
    default:
      break;
    }
 done:
  if (dump_flag (di, (1 << 0), ((void *)0)))
    dump_pointer (di, "addr", (void *)t);
  fprintf (di->stream, "\n");
}
int dump_flag (dump_info_p di, int flag, tree node)
{
  return (di->flags & flag) && (node != di->node);
}
void
dump_node (tree t, int flags, FILE *stream)
{
  struct dump_info di;
  dump_queue_p dq;
  dump_queue_p next_dq;
  di.stream = stream;
  di.index = 0;
  di.column = 0;
  di.queue = 0;
  di.queue_end = 0;
  di.free_list = 0;
  di.flags = flags;
  di.node = t;
  di.nodes = splay_tree_new (splay_tree_compare_pointers, 0,
        (splay_tree_delete_value_fn) &free);
  queue (&di, t, 0);
  while (di.queue)
    dequeue_and_dump (&di);
  for (dq = di.free_list; dq; dq = next_dq)
    {
      next_dq = dq->next;
      free (dq);
    }
  splay_tree_delete (di.nodes);
}
struct tree_dump_file_info
{
  const char *suffix;
  const char *swtch;
  int flags;
  int state;
};
static struct tree_dump_file_info dump_files[TDI_end] =
{
  {((void *)0), ((void *)0), 0, 0},
  {".tu", "translation-unit", 0, 0},
  {".class", "class-hierarchy", 0, 0},
  {".original", "tree-original", 0, 0},
  {".generic", "tree-generic", 0, 0},
  {".nested", "tree-nested", 0, 0},
  {".inlined", "tree-inlined", 0, 0},
  {".vcg", "tree-vcg", 0, 0},
  {".xml", "call-graph", 0, 0},
  {((void *)0), "tree-all", 0, 0}
};
static struct tree_dump_file_info *extra_dump_files;
static size_t extra_dump_files_in_use;
static size_t extra_dump_files_alloced;
struct dump_option_value_info
{
  const char *const name;
  const int value1;
};
static const struct dump_option_value_info dump_options[] =
{
  {"address", (1 << 0)},
  {"slim", (1 << 1)},
  {"raw", (1 << 2)},
  {"details", (1 << 3)},
  {"stats", (1 << 4)},
  {"blocks", (1 << 5)},
  {"vops", (1 << 6)},
  {"lineno", (1 << 7)},
  {"uid", (1 << 8)},
  {"all", ~((1 << 2) | (1 << 1) | (1 << 7))},
  {((void *)0), 0}
};
unsigned int
dump_register (const char *suffix, const char *swtch)
{
  size_t this = extra_dump_files_in_use++;
  if (this >= extra_dump_files_alloced)
    {
      if (extra_dump_files_alloced == 0)
 extra_dump_files_alloced = 32;
      else
 extra_dump_files_alloced *= 2;
      extra_dump_files = xrealloc (extra_dump_files,
       sizeof (struct tree_dump_file_info)
       * extra_dump_files_alloced);
    }
  memset (&extra_dump_files[this], 0, sizeof (struct tree_dump_file_info));
  extra_dump_files[this].suffix = suffix;
  extra_dump_files[this].swtch = swtch;
  return this + TDI_end;
}
static struct tree_dump_file_info *
get_dump_file_info (enum tree_dump_index phase)
{
  if (phase < TDI_end)
    return &dump_files[phase];
  else if (phase - TDI_end >= extra_dump_files_in_use)
    abort ();
  else
    return extra_dump_files + (phase - TDI_end);
}
FILE *
dump_begin (enum tree_dump_index phase, int *flag_ptr)
{
  FILE *stream;
  char *name;
  char dump_id[10];
  struct tree_dump_file_info *dfi;
  if (phase == TDI_none)
    return ((void *)0);
  dfi = get_dump_file_info (phase);
  if (dfi->state == 0)
    return ((void *)0);
  if (snprintf (dump_id, sizeof (dump_id), ".t%02d", phase) < 0)
    dump_id[0] = '\0';
  name = concat (dump_base_name, dump_id, dfi->suffix, ((void *)0));
  stream = fopen (name, dfi->state < 0 ? "w" : "a");
  if (!stream)
    error ("could not open dump file `%s': %s", name, strerror ((*__errno_location ())));
  else
    dfi->state = 1;
  free (name);
  if (flag_ptr)
    *flag_ptr = dfi->flags;
  return stream;
}
int
dump_enabled_p (enum tree_dump_index phase)
{
  struct tree_dump_file_info *dfi = get_dump_file_info (phase);
  return dfi->state;
}
const char *
dump_flag_name (enum tree_dump_index phase)
{
  struct tree_dump_file_info *dfi = get_dump_file_info (phase);
  return dfi->swtch;
}
void
dump_end (enum tree_dump_index phase , FILE *stream)
{
  fclose (stream);
}
static void
dump_enable_all (int flags)
{
  size_t i;
  for (i = TDI_none + 1; i < (size_t) TDI_end; i++)
    {
      dump_files[i].state = -1;
      dump_files[i].flags = flags;
    }
  for (i = 0; i < extra_dump_files_in_use; i++)
    {
      extra_dump_files[i].state = -1;
      extra_dump_files[i].flags = flags;
    }
  dump_files[TDI_xml].state = 0;
  dump_files[TDI_xml].flags = 0;
}
static int
dump_switch_p_1 (const char *arg, struct tree_dump_file_info *dfi)
{
  const char *option_value;
  const char *ptr;
  int flags;
  option_value = (strncmp (arg, dfi->swtch, strlen (dfi->swtch)) ? ((void *)0) : arg + strlen (dfi->swtch));
  if (!option_value)
    return 0;
  ptr = option_value;
  flags = 0;
  while (*ptr)
    {
      const struct dump_option_value_info *option_ptr;
      const char *end_ptr;
      unsigned length;
      while (*ptr == '-')
 ptr++;
      end_ptr = strchr (ptr, '-');
      if (!end_ptr)
 end_ptr = ptr + strlen (ptr);
      length = end_ptr - ptr;
      for (option_ptr = dump_options; option_ptr->name; option_ptr++)
 if (strlen (option_ptr->name) == length
     && !memcmp (option_ptr->name, ptr, length))
   {
     flags |= option_ptr->value1;
     goto found;
   }
      warning ("ignoring unknown option `%.*s' in `-fdump-%s'",
        length, ptr, dfi->swtch);
    found:;
      ptr = end_ptr;
    }
  dfi->state = -1;
  dfi->flags = flags;
  if (dfi->suffix == ((void *)0))
    dump_enable_all (flags);
  return 1;
}
int
dump_switch_p (const char *arg)
{
  size_t i;
  int any = 0;
  for (i = TDI_none + 1; i != TDI_end; i++)
    any |= dump_switch_p_1 (arg, &dump_files[i]);
  for (i = 0; i < extra_dump_files_in_use; i++)
    any |= dump_switch_p_1 (arg, &extra_dump_files[i]);
  return any;
}
void
dump_function (enum tree_dump_index phase, tree fn)
{
  FILE *stream;
  int flags;
  stream = dump_begin (phase, &flags);
  if (stream)
    {
      dump_function_to_file (fn, stream, flags);
      dump_end (phase, stream);
    }
}
static struct _factor { const int factor; int count; }
factors[4] = { {2, 0}, {3, 0}, {5, 0}, {7, 0}};
enum unroll_types
{
  UNROLL_COMPLETELY,
  UNROLL_MODULO,
  UNROLL_NAIVE
};
static struct induction **addr_combined_regs;
static rtx *splittable_regs;
static int *splittable_regs_updates;
static rtx simplify_cmp_and_jump_insns (enum rtx_code, enum machine_mode,
     rtx, rtx, rtx);
static void init_reg_map (struct inline_remap *, int);
static rtx calculate_giv_inc (rtx, rtx, unsigned int);
static rtx initial_reg_note_copy (rtx, struct inline_remap *);
static void final_reg_note_copy (rtx *, struct inline_remap *);
static void copy_loop_body (struct loop *, rtx, rtx,
       struct inline_remap *, rtx, int,
       enum unroll_types, rtx, rtx, rtx, rtx);
static int find_splittable_regs (const struct loop *, enum unroll_types,
     int);
static int find_splittable_givs (const struct loop *, struct iv_class *,
     enum unroll_types, rtx, int);
static int reg_dead_after_loop (const struct loop *, rtx);
static rtx fold_rtx_mult_add (rtx, rtx, rtx, enum machine_mode);
static rtx remap_split_bivs (struct loop *, rtx);
static rtx find_common_reg_term (rtx, rtx);
static rtx subtract_reg_term (rtx, rtx);
static rtx loop_find_equiv_value (const struct loop *, rtx);
static rtx ujump_to_loop_cont (rtx, rtx);
void
unroll_loop (struct loop *loop, int insn_count, int strength_reduce_p)
{
  struct loop_info *loop_info = ((struct loop_info *) (loop)->aux);
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  int i, j;
  unsigned int r;
  unsigned long temp;
  int unroll_number = 1;
  rtx copy_start, copy_end;
  rtx insn, sequence, pattern, tem;
  int max_labelno, max_insnno;
  rtx insert_before;
  struct inline_remap *map;
  char *local_label = ((void *)0);
  char *local_regno;
  unsigned int max_local_regnum;
  unsigned int maxregnum;
  rtx exit_label = 0;
  rtx start_label;
  struct iv_class *bl;
  int splitting_not_safe = 0;
  enum unroll_types unroll_type = UNROLL_NAIVE;
  int loop_preconditioned = 0;
  rtx safety_label;
  rtx last_loop_insn;
  rtx loop_start = loop->start;
  rtx loop_end = loop->end;
  if (insn_count > (compiler_params[(int) PARAM_MAX_UNROLLED_INSNS].value1) / 2)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream, "Unrolling failure: Loop too big.\n");
      return;
    }
  if (! strength_reduce_p)
    loop_info->n_iterations = 0;
  if (loop_dump_stream && loop_info->n_iterations > 0)
    fprintf (loop_dump_stream, "Loop unrolling: %ld iterations.\n", loop_info->n_iterations);
  last_loop_insn = prev_nonnote_insn (loop_end);
  if (loop_info->n_iterations == 1)
    {
      rtx ujump = ujump_to_loop_cont (loop->start, loop->cont);
      if (((enum rtx_code) (last_loop_insn)->code) == BARRIER)
 {
   last_loop_insn = (((last_loop_insn)->u.fld[1]).rtx1);
 }
      if (ujump && ((enum rtx_code) (last_loop_insn)->code) == JUMP_INSN)
 {
   delete_related_insns (last_loop_insn);
   delete_related_insns (ujump);
   if (loop->vtop)
     delete_related_insns (loop->vtop);
   if (loop->cont)
     delete_related_insns (loop->cont);
   if (loop_start)
     delete_related_insns (loop_start);
   if (loop_end)
     delete_related_insns (loop_end);
   return;
 }
    }
  if (loop_info->n_iterations > 0
      && loop_info->n_iterations < (unsigned) (compiler_params[(int) PARAM_MAX_UNROLLED_INSNS].value1)
      && loop_info->n_iterations * insn_count < (unsigned) (compiler_params[(int) PARAM_MAX_UNROLLED_INSNS].value1))
    {
      unroll_number = loop_info->n_iterations;
      unroll_type = UNROLL_COMPLETELY;
    }
  else if (loop_info->n_iterations > 0)
    {
      for (i = 0; i < 4; i++)
 factors[i].count = 0;
      temp = loop_info->n_iterations;
      for (i = 4 - 1; i >= 0; i--)
 while (temp % factors[i].factor == 0)
   {
     factors[i].count++;
     temp = temp / factors[i].factor;
   }
      unroll_number = 1;
      temp = insn_count;
      for (i = 3; i >= 0; i--)
 while (factors[i].count--)
   {
     if (temp * factors[i].factor < (unsigned) (compiler_params[(int) PARAM_MAX_UNROLLED_INSNS].value1))
       {
  unroll_number *= factors[i].factor;
  temp *= factors[i].factor;
       }
     else
       break;
   }
      if (unroll_number == 1)
 {
   if (loop_dump_stream)
     fprintf (loop_dump_stream, "Loop unrolling: No factors found.\n");
 }
      else
 unroll_type = UNROLL_MODULO;
    }
  if (unroll_type == UNROLL_NAIVE)
    {
      if (8 * insn_count < (compiler_params[(int) PARAM_MAX_UNROLLED_INSNS].value1))
 unroll_number = 8;
      else if (4 * insn_count < (compiler_params[(int) PARAM_MAX_UNROLLED_INSNS].value1))
 unroll_number = 4;
      else
 unroll_number = 2;
    }
  if (loop_dump_stream)
    fprintf (loop_dump_stream, "Unrolling loop %d times.\n", unroll_number);
  if (unroll_type == UNROLL_COMPLETELY || unroll_type == UNROLL_MODULO)
    {
      insn = loop_start;
      while (((enum rtx_code) (insn)->code) != CODE_LABEL && ((enum rtx_code) (insn)->code) != JUMP_INSN)
 insn = (((insn)->u.fld[2]).rtx1);
      if (((enum rtx_code) (insn)->code) == JUMP_INSN)
 return;
    }
  if (unroll_type == UNROLL_COMPLETELY)
    {
      copy_start = loop_start;
      insert_before = (((last_loop_insn)->u.fld[2]).rtx1);
      if (((enum rtx_code) (last_loop_insn)->code) == BARRIER)
 copy_end = ((((((last_loop_insn)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
      else if (((enum rtx_code) (last_loop_insn)->code) == JUMP_INSN)
 {
   copy_end = (((last_loop_insn)->u.fld[1]).rtx1);
 }
      else
 {
   if (loop_dump_stream)
     fprintf (loop_dump_stream,
       "Unrolling failure: loop does not end with a JUMP_INSN.\n");
   return;
 }
    }
  else if (unroll_type == UNROLL_MODULO)
    {
      copy_start = loop_start;
      if (((enum rtx_code) (last_loop_insn)->code) == BARRIER)
 {
   insert_before = (((last_loop_insn)->u.fld[1]).rtx1);
   copy_end = (((insert_before)->u.fld[1]).rtx1);
 }
      else if (((enum rtx_code) (last_loop_insn)->code) == JUMP_INSN)
 {
   insert_before = last_loop_insn;
   copy_end = (((insert_before)->u.fld[1]).rtx1);
 }
      else
 {
   if (loop_dump_stream)
     fprintf (loop_dump_stream,
       "Unrolling failure: loop does not end with a JUMP_INSN.\n");
   return;
 }
    }
  else
    {
      if (((enum rtx_code) (last_loop_insn)->code) == BARRIER)
 {
   insert_before = (((last_loop_insn)->u.fld[1]).rtx1);
   copy_end = (((insert_before)->u.fld[1]).rtx1);
 }
      else if (((enum rtx_code) (last_loop_insn)->code) == JUMP_INSN)
 {
   insert_before = (((last_loop_insn)->u.fld[2]).rtx1);
   copy_end = last_loop_insn;
 }
      else
 {
   if (loop_dump_stream)
     fprintf (loop_dump_stream,
       "Unrolling failure: loop does not end with a JUMP_INSN.\n");
   return;
 }
      exit_label = gen_label_rtx ();
      insn = loop_start;
      while (((enum rtx_code) (insn)->code) != CODE_LABEL && ((enum rtx_code) (insn)->code) != JUMP_INSN)
 insn = (((insn)->u.fld[2]).rtx1);
      if (((enum rtx_code) (insn)->code) == JUMP_INSN)
 {
   copy_start = (((insn)->u.fld[2]).rtx1);
   splitting_not_safe = 1;
   if (loop_dump_stream)
     fprintf (loop_dump_stream,
       "Splitting not safe, because loop not entered at top.\n");
 }
      else
 copy_start = loop_start;
    }
  start_label = (((copy_start)->u.fld[2]).rtx1);
  while (((enum rtx_code) (start_label)->code) == NOTE)
    start_label = (((start_label)->u.fld[2]).rtx1);
  if (((enum rtx_code) (start_label)->code) != CODE_LABEL)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Unrolling failure: unknown insns between BEG note and loop label.\n");
      return;
    }
  if ((((start_label)->u.fld[7]).rtstr))
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Unrolling failure: loop start label is gone\n");
      return;
    }
  if (unroll_type == UNROLL_NAIVE
      && ((enum rtx_code) (last_loop_insn)->code) == BARRIER
      && ((enum rtx_code) ((((last_loop_insn)->u.fld[1]).rtx1))->code) == JUMP_INSN
      && start_label != ((((((last_loop_insn)->u.fld[1]).rtx1))->u.fld[9]).rtx1))
    {
      insert_before = (((last_loop_insn)->u.fld[2]).rtx1);
      copy_end = last_loop_insn;
    }
  if (unroll_type == UNROLL_NAIVE
      && ((enum rtx_code) (last_loop_insn)->code) == JUMP_INSN
      && start_label != (((last_loop_insn)->u.fld[9]).rtx1))
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Unrolling failure: final conditional branch not to loop start\n");
      return;
    }
  max_labelno = max_label_num ();
  max_insnno = get_max_uid ();
  map = xcalloc (1, sizeof (struct inline_remap));
  if (max_labelno > 0)
    {
      map->label_map = xcalloc (max_labelno, sizeof (rtx));
      local_label = xcalloc (max_labelno, sizeof (char));
    }
  for (insn = copy_start; insn != loop_end; insn = (((insn)->u.fld[2]).rtx1))
    {
      rtx note;
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 local_label[(((insn)->u.fld[6]).rtint)] = 1;
      else if (((enum rtx_code) (insn)->code) == JUMP_INSN)
 {
   if ((((insn)->u.fld[9]).rtx1))
     ((map)->label_map[((((((insn)->u.fld[9]).rtx1))->u.fld[6]).rtint)] = ((((insn)->u.fld[9]).rtx1)))
                           ;
   else if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_VEC
     || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC)
     {
       rtx pat = (((insn)->u.fld[5]).rtx1);
       int diff_vec_p = ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC;
       int len = (((((pat)->u.fld[diff_vec_p]).rtvec1))->num_elem);
       rtx label;
       for (i = 0; i < len; i++)
  {
    label = ((((((((pat)->u.fld[diff_vec_p]).rtvec1))->elem[i]))->u.fld[0]).rtx1);
    ((map)->label_map[(((label)->u.fld[6]).rtint)] = (label));
  }
     }
 }
      if ((note = find_reg_note (insn, REG_LABEL, (rtx) 0)))
 ((map)->label_map[((((((note)->u.fld[0]).rtx1))->u.fld[6]).rtint)] = ((((note)->u.fld[0]).rtx1)))
                    ;
    }
  map->insn_map = xmalloc (max_insnno * sizeof (rtx));
  maxregnum = max_reg_num ();
  max_local_regnum = maxregnum;
  splittable_regs = xcalloc (maxregnum, sizeof (rtx));
  splittable_regs_updates = xcalloc (maxregnum, sizeof (int));
  addr_combined_regs = xcalloc (maxregnum, sizeof (struct induction *));
  local_regno = xcalloc (maxregnum, sizeof (char));
  if ((((copy_end)->u.fld[0]).rtint) < max_uid_for_loop)
    {
      int copy_start_luid = ((((copy_start)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((copy_start)->u.fld[0]).rtint)] : (abort (), -1));
      int copy_end_luid = ((((copy_end)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((copy_end)->u.fld[0]).rtint)] : (abort (), -1));
      if (((enum rtx_code) (copy_end)->code) == JUMP_INSN)
 copy_end_luid--;
      if (copy_start == loop_start)
 copy_start_luid++;
      for (r = 53; r < max_reg_before_loop; ++r)
 if ((((reg_n_info)->data.reg[r])->first_uid) > 0 && (((reg_n_info)->data.reg[r])->first_uid) < max_uid_for_loop
     && ((((reg_n_info)->data.reg[r])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[r])->first_uid)] : 0) >= copy_start_luid
     && (((reg_n_info)->data.reg[r])->last_uid) > 0 && (((reg_n_info)->data.reg[r])->last_uid) < max_uid_for_loop
     && ((((reg_n_info)->data.reg[r])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[r])->last_uid)] : 2147483647) <= copy_end_luid)
   {
     if (set_dominates_use (r, (((reg_n_info)->data.reg[r])->first_uid), (((reg_n_info)->data.reg[r])->last_uid),
       copy_start, copy_end))
       local_regno[r] = 1;
     if (loop_dump_stream)
       {
  if (local_regno[r])
    fprintf (loop_dump_stream, "Marked reg %d as local\n", r);
  else
    fprintf (loop_dump_stream, "Did not mark reg %d as local\n",
      r);
       }
   }
    }
  if (unroll_type == UNROLL_NAIVE && ! splitting_not_safe && strength_reduce_p)
    {
      rtx initial_value, final_value, increment;
      enum machine_mode mode;
      if (precondition_loop_p (loop,
          &initial_value, &final_value, &increment,
          &mode))
 {
   rtx diff, insn;
   rtx *labels;
   int abs_inc, neg_inc;
   enum rtx_code cc = loop_info->comparison_code;
   int less_p = (cc == LE || cc == LEU || cc == LT || cc == LTU);
   int unsigned_p = (cc == LEU || cc == GEU || cc == LTU || cc == GTU);
   map->reg_map = xmalloc (maxregnum * sizeof (rtx));
   map->const_equiv_varray = varray_init (maxregnum, VARRAY_DATA_CONST_EQUIV, "unroll_loop_precondition")
                                  ;
   global_const_equiv_varray = map->const_equiv_varray;
   init_reg_map (map, maxregnum);
   if (unroll_number > 4)
     unroll_number = 4;
   neg_inc = 0;
   abs_inc = ((increment)->u.hwint[0]);
   if (abs_inc < 0)
     {
       abs_inc = -abs_inc;
       neg_inc = 1;
     }
   start_sequence ();
   final_value = copy_rtx (final_value);
   initial_value = copy_rtx (initial_value);
   final_value = force_operand (final_value, (rtx) 0);
   if (!nonmemory_operand (final_value, VOIDmode))
     final_value = force_reg (mode, final_value);
   if (cc == NE || less_p != neg_inc)
     diff = simplify_gen_binary (MINUS, mode, final_value,
     initial_value);
   else
     diff = simplify_gen_unary (neg_inc ? NOT : NEG, mode,
           initial_value, mode);
   diff = force_operand (diff, (rtx) 0);
   diff = simplify_gen_binary (AND, mode, diff,
          gen_rtx_CONST_INT (VOIDmode, (long) (unroll_number*abs_inc - 1)));
   diff = force_operand (diff, (rtx) 0);
   labels = xmalloc (sizeof (rtx) * unroll_number);
   for (i = 0; i < unroll_number; i++)
     labels[i] = gen_label_rtx ();
   if (cc != NE)
     {
       rtx incremented_initval;
       enum rtx_code cmp_code;
       incremented_initval
  = simplify_gen_binary (PLUS, mode, initial_value, increment);
       incremented_initval
  = force_operand (incremented_initval, (rtx) 0);
       cmp_code = (less_p
     ? (unsigned_p ? GEU : GE)
     : (unsigned_p ? LEU : LE));
       insn = simplify_cmp_and_jump_insns (cmp_code, mode,
        incremented_initval,
        final_value, labels[1]);
       if (insn)
         predict_insn_def (insn, PRED_LOOP_CONDITION, TAKEN);
     }
   for (i = 0; i < unroll_number - 1; i++)
     {
       int cmp_const;
       enum rtx_code cmp_code;
       if (i == 0)
  {
    cmp_const = 0;
    cmp_code = EQ;
  }
       else if (neg_inc)
  {
    cmp_const = unroll_number - i;
    cmp_code = GE;
  }
       else
  {
    cmp_const = i;
    cmp_code = LE;
  }
       insn = simplify_cmp_and_jump_insns (cmp_code, mode, diff,
        gen_rtx_CONST_INT (VOIDmode, (long) (abs_inc*cmp_const)),
        labels[i]);
       if (insn)
         predict_insn (insn, PRED_LOOP_PRECONDITIONING,
         10000 / (unroll_number - i));
     }
   if (abs_inc != 1)
     {
       int cmp_const;
       enum rtx_code cmp_code;
       if (neg_inc)
  {
    cmp_const = abs_inc - 1;
    cmp_code = LE;
  }
       else
  {
    cmp_const = abs_inc * (unroll_number - 1) + 1;
    cmp_code = GE;
  }
       simplify_cmp_and_jump_insns (cmp_code, mode, diff,
        gen_rtx_CONST_INT (VOIDmode, (long) (cmp_const)), labels[0]);
     }
   sequence = get_insns ();
   end_sequence ();
   loop_insn_hoist (loop, sequence);
   if (((enum rtx_code) (last_loop_insn)->code) == BARRIER)
     copy_end = ((((((last_loop_insn)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
   else if (((enum rtx_code) (last_loop_insn)->code) == JUMP_INSN)
     {
       copy_end = (((last_loop_insn)->u.fld[1]).rtx1);
     }
   else
     abort ();
   for (i = 1; i < unroll_number; i++)
     {
       emit_label_after (labels[unroll_number - i],
    (((loop_start)->u.fld[1]).rtx1));
       memset (map->insn_map, 0, max_insnno * sizeof (rtx));
       memset (&((map->const_equiv_varray)->data.const_equiv[0]),
        0, (((map->const_equiv_varray)->num_elements)
     * sizeof (struct const_equiv_data)));
       map->const_age = 0;
       for (j = 0; j < max_labelno; j++)
  if (local_label[j])
    ((map)->label_map[j] = (gen_label_rtx ()));
       for (r = 53; r < max_local_regnum; r++)
  if (local_regno[r])
    {
      map->reg_map[r]
        = gen_reg_rtx (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[r])->mode));
      record_base_value ((((map->reg_map[r])->u.fld[0]).rtuint),
           (cfun->emit->x_regno_reg_rtx)[r], 0);
    }
       if (i == unroll_number - 1)
  {
    if (((enum rtx_code) (last_loop_insn)->code) == BARRIER)
      copy_end = ((((((last_loop_insn)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
    else
      copy_end = last_loop_insn;
  }
       copy_loop_body (loop, copy_start, copy_end, map, exit_label, 0,
         unroll_type, start_label, loop_end,
         loop_start, copy_end);
     }
   emit_label_after (labels[0], (((loop_start)->u.fld[1]).rtx1));
   if (((enum rtx_code) (last_loop_insn)->code) == BARRIER)
     {
       insert_before = (((last_loop_insn)->u.fld[1]).rtx1);
       copy_end = (((insert_before)->u.fld[1]).rtx1);
     }
   else
     {
       insert_before = last_loop_insn;
       copy_end = (((insert_before)->u.fld[1]).rtx1);
     }
   unroll_type = UNROLL_MODULO;
   loop_preconditioned = 1;
   free (labels);
 }
    }
  if (unroll_type == UNROLL_NAIVE && ! flag_old_unroll_all_loops)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Unrolling failure: Naive unrolling not being done.\n");
      goto egress;
    }
  loop_info->unroll_number = unroll_number;
  loop_info->preconditioned = loop_preconditioned;
  (((loop->end)->u.fld[4]).rtint) = loop_preconditioned;
  if (splitting_not_safe)
    temp = 0;
  else
    temp = find_splittable_regs (loop, unroll_type, unroll_number);
  maxregnum = max_reg_num ();
  map->reg_map = xmalloc (maxregnum * sizeof (rtx));
  init_reg_map (map, maxregnum);
  if (map->const_equiv_varray == 0)
    map->const_equiv_varray = varray_init (maxregnum + temp * unroll_number * 2, VARRAY_DATA_CONST_EQUIV, "unroll_loop")
                      ;
  global_const_equiv_varray = map->const_equiv_varray;
  for (bl = ivs->list; bl; bl = bl->next)
    {
      if ((((bl->biv->src_reg)->u.fld[0]).rtuint) != bl->regno)
 map->reg_map[bl->regno] = bl->biv->src_reg;
    }
  map->regno_pointer_align = cfun->emit->regno_pointer_align;
  map->x_regno_reg_rtx = cfun->emit->x_regno_reg_rtx;
  if (unroll_type == UNROLL_MODULO)
    {
      insn = (((copy_end)->u.fld[2]).rtx1);
      if (((enum rtx_code) (insn)->code) == INSN || ((enum rtx_code) (insn)->code) == JUMP_INSN)
 (((insn)->u.fld[5]).rtx1) = remap_split_bivs (loop, (((insn)->u.fld[5]).rtx1));
    }
  for (i = 0; i < unroll_number; i++)
    {
      memset (map->insn_map, 0, max_insnno * sizeof (rtx));
      memset (&((map->const_equiv_varray)->data.const_equiv[0]), 0,
       ((map->const_equiv_varray)->num_elements) * sizeof (struct const_equiv_data));
      map->const_age = 0;
      for (j = 0; j < max_labelno; j++)
 if (local_label[j])
   ((map)->label_map[j] = (gen_label_rtx ()));
      for (r = 53; r < max_local_regnum; r++)
 if (local_regno[r])
   {
     map->reg_map[r] = gen_reg_rtx (((enum machine_mode) ((cfun->emit->x_regno_reg_rtx)[r])->mode));
     record_base_value ((((map->reg_map[r])->u.fld[0]).rtuint),
          (cfun->emit->x_regno_reg_rtx)[r], 0);
   }
      if (i == 0 && loop_start != copy_start)
 {
   insn = (((copy_start)->u.fld[1]).rtx1);
   pattern = (((insn)->u.fld[5]).rtx1);
   tem = get_label_from_map (map,
        (((((((((pattern)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[6]).rtint)
                                     );
   (((pattern)->u.fld[1]).rtx1) = gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (tem));
   (((insn)->u.fld[9]).rtx1) = tem;
   (((tem)->u.fld[4]).rtint)++;
 }
      copy_loop_body (loop, copy_start, copy_end, map, exit_label,
        i == unroll_number - 1, unroll_type, start_label,
        loop_end, insert_before, insert_before);
    }
  if (unroll_type == UNROLL_COMPLETELY)
    safety_label = emit_label_after (gen_label_rtx (), last_loop_insn);
  else
    safety_label = emit_label_after (gen_label_rtx (), copy_end);
  insn = (((copy_start)->u.fld[2]).rtx1);
  while (insn != safety_label)
    {
      if (insn != start_label
   && ! (((enum rtx_code) (insn)->code) == CODE_LABEL && (((insn)->u.fld[7]).rtstr))
   && ! (((enum rtx_code) (insn)->code) == NOTE
  && (((insn)->u.fld[5]).rtint) == NOTE_INSN_DELETED_LABEL))
 insn = delete_related_insns (insn);
      else
 insn = (((insn)->u.fld[2]).rtx1);
    }
  if ((((safety_label))->volatil))
    abort ();
  delete_related_insns (safety_label);
  if (exit_label)
    emit_label_after (exit_label, loop_end);
 egress:
  if (unroll_type == UNROLL_COMPLETELY)
    {
      if (loop->vtop)
 delete_related_insns (loop->vtop);
      if (loop->cont)
 delete_related_insns (loop->cont);
      if (loop_start)
 delete_related_insns (loop_start);
      if (loop_end)
 delete_related_insns (loop_end);
    }
  if (map->const_equiv_varray)
    do { if (map->const_equiv_varray) { free (map->const_equiv_varray); map->const_equiv_varray = (varray_type) 0; } } while (0);
  if (map->label_map)
    {
      free (map->label_map);
      free (local_label);
    }
  free (map->insn_map);
  free (splittable_regs);
  free (splittable_regs_updates);
  free (addr_combined_regs);
  free (local_regno);
  if (map->reg_map)
    free (map->reg_map);
  free (map);
}
static rtx
simplify_cmp_and_jump_insns (enum rtx_code code, enum machine_mode mode,
        rtx op0, rtx op1, rtx label)
{
  rtx t, insn;
  t = simplify_const_relational_operation (code, mode, op0, op1);
  if (!t)
    {
      enum rtx_code scode = signed_condition (code);
      emit_cmp_and_jump_insns (op0, op1, scode, (rtx) 0, mode,
          code != scode, label);
      insn = get_last_insn ();
      (((insn)->u.fld[9]).rtx1) = label;
      (((label)->u.fld[4]).rtint) += 1;
      return insn;
    }
  else if (t == const_true_rtx)
    {
      insn = emit_jump_insn (gen_jump (label));
      emit_barrier ();
      (((insn)->u.fld[9]).rtx1) = label;
      (((label)->u.fld[4]).rtint) += 1;
    }
  return (rtx) 0;
}
int
precondition_loop_p (const struct loop *loop, rtx *initial_value,
       rtx *final_value, rtx *increment,
       enum machine_mode *mode)
{
  rtx loop_start = loop->start;
  struct loop_info *loop_info = ((struct loop_info *) (loop)->aux);
  if (loop_info->n_iterations > 0)
    {
      if (((loop_info->increment)->u.hwint[0]) > 0)
 {
   *initial_value = (const_int_rtx[64]);
   *increment = (const_int_rtx[64 +1]);
   *final_value = gen_rtx_CONST_INT (VOIDmode, (long) (loop_info->n_iterations));
 }
      else
 {
   *initial_value = gen_rtx_CONST_INT (VOIDmode, (long) (loop_info->n_iterations));
   *increment = (const_int_rtx[64 -1]);
   *final_value = (const_int_rtx[64]);
 }
      *mode = word_mode;
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Preconditioning: Success, number of iterations known, %ld.\n",
   loop_info->n_iterations);
      return 1;
    }
  if (loop_info->iteration_var == 0)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Preconditioning: Could not find iteration variable.\n");
      return 0;
    }
  else if (loop_info->initial_value == 0)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Preconditioning: Could not find initial value.\n");
      return 0;
    }
  else if (loop_info->increment == 0)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Preconditioning: Could not find increment value.\n");
      return 0;
    }
  else if (((enum rtx_code) (loop_info->increment)->code) != CONST_INT)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Preconditioning: Increment not a constant.\n");
      return 0;
    }
  else if ((exact_log2_wide ((unsigned long) (((loop_info->increment)->u.hwint[0]))) < 0)
    && (exact_log2_wide ((unsigned long) (-((loop_info->increment)->u.hwint[0]))) < 0))
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Preconditioning: Increment not a constant power of 2.\n");
      return 0;
    }
  if (loop_info->final_value == 0)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Preconditioning: EQ comparison loop.\n");
      return 0;
    }
  if (((((enum rtx_code) (loop_info->final_value)->code) == REG)
       && (((loop_info->final_value)->u.fld[0]).rtuint) >= max_reg_before_loop)
      || (((enum rtx_code) (loop_info->final_value)->code) == PLUS
   && ((((((loop_info->final_value)->u.fld[0]).rtx1))->u.fld[0]).rtuint) >= max_reg_before_loop)
      || ! loop_invariant_p (loop, loop_info->final_value))
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Preconditioning: Final value not invariant.\n");
      return 0;
    }
  if (mode_class[((enum machine_mode) (loop_info->final_value)->mode)] == MODE_FLOAT
      || mode_class[((enum machine_mode) (loop_info->initial_value)->mode)] == MODE_FLOAT)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Preconditioning: Floating point final or initial value.\n");
      return 0;
    }
  if (((((reg_n_info)->data.reg[(((loop_info->iteration_var)->u.fld[0]).rtuint)])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[(((loop_info->iteration_var)->u.fld[0]).rtuint)])->first_uid)] : 0)
      > ((((loop_start)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop_start)->u.fld[0]).rtint)] : (abort (), -1)))
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Preconditioning: Iteration var not live before loop start.\n");
      return 0;
    }
  *initial_value = loop_info->initial_value;
  *increment = loop_info->increment;
  *final_value = loop_info->final_value;
  *mode = ((enum machine_mode) (*final_value)->mode);
  if (*mode == VOIDmode)
    {
      *mode = ((enum machine_mode) (*initial_value)->mode);
      if (*mode == VOIDmode)
 *mode = word_mode;
    }
  else if (*mode != ((enum machine_mode) (*initial_value)->mode)
    && (((unsigned short) mode_size[*mode])
        < ((unsigned short) mode_size[((enum machine_mode) (*initial_value)->mode)])))
    *mode = ((enum machine_mode) (*initial_value)->mode);
  if (loop_dump_stream)
    fprintf (loop_dump_stream, "Preconditioning: Successful.\n");
  return 1;
}
static void
init_reg_map (struct inline_remap *map, int maxregnum)
{
  int i;
  for (i = maxregnum - 1; i > (((53)) + 4); i--)
    map->reg_map[i] = (cfun->emit->x_regno_reg_rtx)[i];
  for (i = (((53)) + 4); i >= 0; i--)
    map->reg_map[i] = 0;
  map->reg_map[(((53)) + 1)]
    = (cfun->emit->x_regno_reg_rtx)[(((53)) + 1)];
  map->reg_map[((53))]
    = (cfun->emit->x_regno_reg_rtx)[((53))];
}
static rtx
calculate_giv_inc (rtx pattern, rtx src_insn, unsigned int regno)
{
  rtx increment;
  rtx increment_total = 0;
  int tries = 0;
 retry:
  if (((enum rtx_code) ((((pattern)->u.fld[1]).rtx1))->code) != PLUS)
    {
      src_insn = (((src_insn)->u.fld[1]).rtx1);
      pattern = (((((enum rtx_code) (src_insn)->code) == INSN) || (((enum rtx_code) (src_insn)->code) == JUMP_INSN) || (((enum rtx_code) (src_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((src_insn)->u.fld[5]).rtx1))->code) == SET ? (((src_insn)->u.fld[5]).rtx1) : single_set_2 (src_insn, (((src_insn)->u.fld[5]).rtx1))) : (rtx) 0);
      if (((enum rtx_code) ((((pattern)->u.fld[1]).rtx1))->code) != PLUS)
 abort ();
      delete_related_insns (get_last_insn ());
    }
  increment = ((((((pattern)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
  if (((enum rtx_code) (increment)->code) != CONST_INT)
    {
      increment = find_last_value (increment, &src_insn, (rtx) 0, 0);
      if (((enum rtx_code) (increment)->code) == LO_SUM)
 increment = (((increment)->u.fld[1]).rtx1);
      else if ((((enum rtx_code) (increment)->code) == MEM))
 {
   rtx note = find_reg_note (src_insn, REG_EQUAL, 0);
   if (note)
     increment = (((note)->u.fld[0]).rtx1);
 }
      else if (((enum rtx_code) (increment)->code) == IOR
        || ((enum rtx_code) (increment)->code) == PLUS
        || ((enum rtx_code) (increment)->code) == ASHIFT
        || ((enum rtx_code) (increment)->code) == LSHIFTRT)
 {
   rtx second_part = (((increment)->u.fld[1]).rtx1);
   enum rtx_code code = ((enum rtx_code) (increment)->code);
   increment = find_last_value ((((increment)->u.fld[0]).rtx1),
           &src_insn, (rtx) 0, 0);
   delete_related_insns (get_last_insn ());
   if (((enum rtx_code) (second_part)->code) != CONST_INT
       || ((enum rtx_code) (increment)->code) != CONST_INT)
     abort ();
   if (code == IOR)
     increment = gen_rtx_CONST_INT (VOIDmode, (long) (((increment)->u.hwint[0]) | ((second_part)->u.hwint[0])));
   else if (code == PLUS)
     increment = gen_rtx_CONST_INT (VOIDmode, (long) (((increment)->u.hwint[0]) + ((second_part)->u.hwint[0])));
   else if (code == ASHIFT)
     increment = gen_rtx_CONST_INT (VOIDmode, (long) (((increment)->u.hwint[0]) << ((second_part)->u.hwint[0])));
   else
     increment = gen_rtx_CONST_INT (VOIDmode, (long) ((unsigned long) ((increment)->u.hwint[0]) >> ((second_part)->u.hwint[0])));
 }
      if (((enum rtx_code) (increment)->code) != CONST_INT)
 abort ();
      delete_related_insns (get_last_insn ());
    }
  if (increment_total)
    increment_total = gen_rtx_CONST_INT (VOIDmode, (long) (((increment_total)->u.hwint[0]) + ((increment)->u.hwint[0])));
  else
    increment_total = increment;
  if (!(((enum rtx_code) (((((((pattern)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->code) == REG)
      || (((((((((pattern)->u.fld[1]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtuint) != regno)
    {
      if (tries == 0)
 {
   tries++;
   src_insn = (((src_insn)->u.fld[1]).rtx1);
   pattern = (((((enum rtx_code) (src_insn)->code) == INSN) || (((enum rtx_code) (src_insn)->code) == JUMP_INSN) || (((enum rtx_code) (src_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((src_insn)->u.fld[5]).rtx1))->code) == SET ? (((src_insn)->u.fld[5]).rtx1) : single_set_2 (src_insn, (((src_insn)->u.fld[5]).rtx1))) : (rtx) 0);
   delete_related_insns (get_last_insn ());
   goto retry;
 }
      abort ();
    }
  return increment_total;
}
static rtx
initial_reg_note_copy (rtx notes, struct inline_remap *map)
{
  rtx copy;
  if (notes == 0)
    return 0;
  copy = rtx_alloc_stat (((enum rtx_code) (notes)->code) );
  ((copy)->mode = ((enum machine_mode) (((enum reg_note) ((enum machine_mode) (notes)->mode)))));
  if (((enum rtx_code) (notes)->code) == EXPR_LIST)
    (((copy)->u.fld[0]).rtx1) = copy_rtx_and_substitute ((((notes)->u.fld[0]).rtx1), map, 0);
  else if (((enum rtx_code) (notes)->code) == INSN_LIST)
    (((copy)->u.fld[0]).rtx1) = copy_rtx ((((notes)->u.fld[0]).rtx1));
  else
    abort ();
  (((copy)->u.fld[1]).rtx1) = initial_reg_note_copy ((((notes)->u.fld[1]).rtx1), map);
  return copy;
}
static void
final_reg_note_copy (rtx *notesp, struct inline_remap *map)
{
  while (*notesp)
    {
      rtx note = *notesp;
      if (((enum rtx_code) (note)->code) == INSN_LIST)
 {
   rtx insn = map->insn_map[((((((note)->u.fld[0]).rtx1))->u.fld[0]).rtint)];
   if (!insn)
     {
       if (((enum reg_note) ((enum machine_mode) (note)->mode)) != REG_LABEL)
  abort ();
     }
   else
     (((note)->u.fld[0]).rtx1) = insn;
 }
      notesp = &(((note)->u.fld[1]).rtx1);
    }
}
static void
copy_loop_body (struct loop *loop, rtx copy_start, rtx copy_end,
  struct inline_remap *map, rtx exit_label,
  int last_iteration, enum unroll_types unroll_type,
  rtx start_label, rtx loop_end, rtx insert_before,
  rtx copy_notes_from)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  rtx insn, pattern;
  rtx set, tem, copy = (rtx) 0;
  int dest_reg_was_split, i;
  rtx final_label = 0;
  rtx giv_inc, giv_dest_reg, giv_src_reg;
  if (! last_iteration)
    {
      final_label = gen_label_rtx ();
      ((map)->label_map[(((start_label)->u.fld[6]).rtint)] = (final_label));
    }
  else
    ((map)->label_map[(((start_label)->u.fld[6]).rtint)] = (start_label));
  start_sequence ();
  insn = copy_start;
  do
    {
      insn = (((insn)->u.fld[2]).rtx1);
      map->orig_asm_operands_vector = 0;
      switch (((enum rtx_code) (insn)->code))
 {
 case INSN:
   pattern = (((insn)->u.fld[5]).rtx1);
   copy = 0;
   giv_inc = 0;
   if ((set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0))
       && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
       && addr_combined_regs[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])
     {
       struct iv_class *bl;
       struct induction *v, *tv;
       unsigned int regno = ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
       v = addr_combined_regs[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)];
       bl = ivs->regs[(((v->src_reg)->u.fld[0]).rtuint)].iv.class;
       giv_inc = calculate_giv_inc (set, insn, regno);
       for (tv = bl->giv; tv; tv = tv->next_iv)
  if (tv->giv_type == DEST_ADDR && tv->same == v)
    {
      int this_giv_inc;
      if (*tv->location != tv->dest_reg)
        continue;
      this_giv_inc = ((giv_inc)->u.hwint[0]);
      if (tv->mult_val != v->mult_val)
        this_giv_inc = (this_giv_inc / ((v->mult_val)->u.hwint[0])
          * ((tv->mult_val)->u.hwint[0]));
      tv->dest_reg = plus_constant_wide ((tv->dest_reg), (long) (this_giv_inc));
      *tv->location = tv->dest_reg;
      if (last_iteration && unroll_type != UNROLL_COMPLETELY)
        {
   rtx value1, dest_reg;
   if ((((enum rtx_code) (tv->dest_reg)->code) == REG))
     dest_reg = tv->dest_reg;
   else
     dest_reg = (((tv->dest_reg)->u.fld[0]).rtx1);
   if (! tv->same_insn && ! tv->shared)
     {
       value1 = plus_constant_wide ((tv->dest_reg), (long) (tv->const_adjust))
                          ;
       if (((enum rtx_code) (value1)->code) == PLUS)
         {
    emit_unrolled_add (dest_reg, (((value1)->u.fld[0]).rtx1),
         (((value1)->u.fld[1]).rtx1));
         }
     }
   tv->dest_reg = plus_constant_wide ((dest_reg), (long) (-tv->const_adjust))
                              ;
   *tv->location = tv->dest_reg;
        }
    }
     }
   dest_reg_was_split = 0;
   if ((set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0))
       && (((enum rtx_code) ((((set)->u.fld[0]).rtx1))->code) == REG)
       && splittable_regs[((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint)])
     {
       unsigned int regno = ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
       unsigned int src_regno;
       dest_reg_was_split = 1;
       giv_dest_reg = (((set)->u.fld[0]).rtx1);
       giv_src_reg = giv_dest_reg;
       if (giv_inc == 0)
  giv_inc = calculate_giv_inc (set, insn, regno);
       src_regno = (((giv_src_reg)->u.fld[0]).rtuint);
       if (unroll_type == UNROLL_COMPLETELY)
  {
    splittable_regs[regno]
      = plus_constant_wide ((splittable_regs[src_regno]), (long) (((giv_inc)->u.hwint[0])))
                          ;
    if (((enum rtx_code) (splittable_regs[regno])->code) == PLUS)
      {
        giv_src_reg = (((splittable_regs[regno])->u.fld[0]).rtx1);
        giv_inc = (((splittable_regs[regno])->u.fld[1]).rtx1);
      }
    else
      {
        giv_src_reg = splittable_regs[regno];
        giv_inc = (const_int_rtx[64]);
      }
  }
       else
  {
    if (regno < ivs->n_regs
        && ivs->regs[regno].type == BASIC_INDUCT)
      {
        giv_src_reg = ivs->regs[regno].iv.class->biv->src_reg;
        giv_dest_reg = giv_src_reg;
      }
    splittable_regs[regno]
      = simplify_gen_binary (PLUS, ((enum machine_mode) (giv_src_reg)->mode),
        giv_inc,
        splittable_regs[src_regno]);
    giv_inc = splittable_regs[regno];
    if (! last_iteration
        || (splittable_regs_updates[regno]-- != 1))
      {
        tem = gen_reg_rtx (((enum machine_mode) (giv_src_reg)->mode));
        giv_dest_reg = tem;
        map->reg_map[regno] = tem;
        record_base_value ((((tem)->u.fld[0]).rtuint),
      giv_inc == (const_int_rtx[64])
      ? giv_src_reg
      : gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (giv_src_reg)->mode)), (giv_src_reg), (giv_inc))
                             ,
      1);
      }
    else
      map->reg_map[regno] = giv_src_reg;
  }
       emit_unrolled_add (giv_dest_reg, giv_src_reg, giv_inc);
       copy = get_last_insn ();
       pattern = (((copy)->u.fld[5]).rtx1);
     }
   else
     {
       pattern = copy_rtx_and_substitute (pattern, map, 0);
       copy = emit_insn (pattern);
     }
   (((copy)->u.fld[8]).rtx1) = initial_reg_note_copy ((((insn)->u.fld[8]).rtx1), map);
   (((copy)->u.fld[4]).rtint) = (((insn)->u.fld[4]).rtint);
   if ((tem = find_reg_note (copy, REG_EQUAL, (rtx) 0))
       && !loop_invariant_p (loop, (((tem)->u.fld[0]).rtx1)))
     remove_note (copy, tem);
   try_constants (copy, map);
   if (dest_reg_was_split)
     {
       int regno = ((((((set)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
       if ((size_t) regno < ((map->const_equiv_varray)->num_elements)
    && (((map->const_equiv_varray)->data.const_equiv[regno]).age
        == map->const_age))
  ((map->const_equiv_varray)->data.const_equiv[regno]).age = -1;
     }
   break;
 case JUMP_INSN:
   pattern = copy_rtx_and_substitute ((((insn)->u.fld[5]).rtx1), map, 0);
   copy = emit_jump_insn (pattern);
   (((copy)->u.fld[8]).rtx1) = initial_reg_note_copy ((((insn)->u.fld[8]).rtx1), map);
   (((copy)->u.fld[4]).rtint) = (((insn)->u.fld[4]).rtint);
   if ((((insn)->u.fld[9]).rtx1))
     {
       (((copy)->u.fld[9]).rtx1) = get_label_from_map (map,
            ((((((insn)->u.fld[9]).rtx1))->u.fld[6]).rtint)
                               );
       ((((((copy)->u.fld[9]).rtx1))->u.fld[4]).rtint)++;
     }
   if ((((insn)->u.fld[9]).rtx1) == start_label && insn == copy_end
       && ! last_iteration)
     {
       if (!invert_jump (copy, exit_label, 0))
  {
    rtx jmp;
    rtx lab = gen_label_rtx ();
    jmp = emit_jump_insn_after (gen_jump (exit_label), copy);
    (((jmp)->u.fld[9]).rtx1) = exit_label;
    (((exit_label)->u.fld[4]).rtint)++;
    jmp = emit_barrier_after (jmp);
    emit_label_after (lab, jmp);
    (((lab)->u.fld[4]).rtint) = 0;
    if (!redirect_jump (copy, lab, 0))
      abort ();
  }
     }
   try_constants (copy, map);
   if ((((insn)->u.fld[9]).rtx1))
     {
       rtx label = 0;
       if ((set = (((((enum rtx_code) (copy)->code) == INSN) || (((enum rtx_code) (copy)->code) == JUMP_INSN) || (((enum rtx_code) (copy)->code) == CALL_INSN)) ? (((enum rtx_code) ((((copy)->u.fld[5]).rtx1))->code) == SET ? (((copy)->u.fld[5]).rtx1) : single_set_2 (copy, (((copy)->u.fld[5]).rtx1))) : (rtx) 0)))
  {
    tem = (((set)->u.fld[1]).rtx1);
    if (((enum rtx_code) (tem)->code) == LABEL_REF)
      label = (((tem)->u.fld[0]).rtx1);
    else if (((enum rtx_code) (tem)->code) == IF_THEN_ELSE)
      {
        if ((((tem)->u.fld[1]).rtx1) != (global_rtl[GR_PC]))
   label = ((((((tem)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
        else
   label = ((((((tem)->u.fld[2]).rtx1))->u.fld[0]).rtx1);
      }
  }
       if (label && ((enum rtx_code) (label)->code) == CODE_LABEL)
  (((copy)->u.fld[9]).rtx1) = label;
       else
  {
    (((copy)->u.fld[9]).rtx1)
      = get_label_from_map (map,
       ((((((insn)->u.fld[9]).rtx1))->u.fld[6]).rtint));
  }
       ((((((copy)->u.fld[9]).rtx1))->u.fld[4]).rtint)++;
     }
   else if (((enum rtx_code) ((((copy)->u.fld[5]).rtx1))->code) == ADDR_VEC
     || ((enum rtx_code) ((((copy)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC)
     {
       rtx pat = (((copy)->u.fld[5]).rtx1);
       int diff_vec_p = ((enum rtx_code) (pat)->code) == ADDR_DIFF_VEC;
       int len = (((((pat)->u.fld[diff_vec_p]).rtvec1))->num_elem);
       int i;
       for (i = 0; i < len; i++)
  (((((((((((pat)->u.fld[diff_vec_p]).rtvec1))->elem[i]))->u.fld[0]).rtx1))->u.fld[4]).rtint)++;
     }
   if (any_condjump_p (insn) && onlyjump_p (insn) && map->last_pc_value)
     {
       if (map->last_pc_value == (global_rtl[GR_PC]))
  {
    delete_insn (copy);
    copy = 0;
  }
       else
  emit_barrier ();
     }
   break;
 case CALL_INSN:
   pattern = copy_rtx_and_substitute ((((insn)->u.fld[5]).rtx1), map, 0);
   copy = emit_call_insn (pattern);
   (((copy)->u.fld[8]).rtx1) = initial_reg_note_copy ((((insn)->u.fld[8]).rtx1), map);
   (((copy)->u.fld[4]).rtint) = (((insn)->u.fld[4]).rtint);
   (((copy))->jump) = (((insn))->jump);
   (((copy))->unchanging) = (((insn))->unchanging);
   (((copy)->u.fld[9]).rtx1)
     = copy_rtx_and_substitute ((((insn)->u.fld[9]).rtx1),
           map, 0);
   try_constants (copy, map);
   for (i = 0; i < 53; i++)
     ((map->const_equiv_varray)->data.const_equiv[i]).rtx1 = 0;
   break;
 case CODE_LABEL:
   if (insn != start_label)
     {
       copy = emit_label (get_label_from_map (map,
           (((insn)->u.fld[6]).rtint)));
       map->const_age++;
     }
   break;
 case BARRIER:
   copy = emit_barrier ();
   break;
 case NOTE:
   if ((((insn)->u.fld[5]).rtint) != NOTE_INSN_DELETED
     && (((insn)->u.fld[5]).rtint) != NOTE_INSN_DELETED_LABEL
     && (((insn)->u.fld[5]).rtint) != NOTE_INSN_BASIC_BLOCK
     && (((((insn)->u.fld[5]).rtint) != NOTE_INSN_LOOP_VTOP
   && (((insn)->u.fld[5]).rtint) != NOTE_INSN_LOOP_CONT)
         || (last_iteration
      && unroll_type != UNROLL_COMPLETELY)))
     copy = emit_note_copy (insn);
   else
     copy = 0;
   break;
 default:
   abort ();
 }
      map->insn_map[(((insn)->u.fld[0]).rtint)] = copy;
    }
  while (insn != copy_end);
  insn = copy_start;
  do
    {
      insn = (((insn)->u.fld[2]).rtx1);
      if ((((enum rtx_code) (insn)->code) == INSN || ((enum rtx_code) (insn)->code) == JUMP_INSN
    || ((enum rtx_code) (insn)->code) == CALL_INSN)
   && map->insn_map[(((insn)->u.fld[0]).rtint)])
 final_reg_note_copy (&(((map->insn_map[(((insn)->u.fld[0]).rtint)])->u.fld[8]).rtx1), map);
    }
  while (insn != copy_end);
  if (! last_iteration)
    {
      for (insn = copy_notes_from; insn != loop_end; insn = (((insn)->u.fld[2]).rtx1))
 {
   if (((enum rtx_code) (insn)->code) == NOTE
       && (((((insn)->u.fld[5]).rtint) != NOTE_INSN_DELETED
     && (((insn)->u.fld[5]).rtint) != NOTE_INSN_BASIC_BLOCK
     && (((insn)->u.fld[5]).rtint) != NOTE_INSN_LOOP_VTOP
     && (((insn)->u.fld[5]).rtint) != NOTE_INSN_LOOP_CONT)))
     emit_note_copy (insn);
 }
    }
  if (final_label && (((final_label)->u.fld[4]).rtint) > 0)
    emit_label (final_label);
  tem = get_insns ();
  end_sequence ();
  loop_insn_emit_before (loop, 0, insert_before, tem);
}
void
emit_unrolled_add (rtx dest_reg, rtx src_reg, rtx increment)
{
  rtx result;
  result = expand_simple_binop (((enum machine_mode) (dest_reg)->mode), PLUS, src_reg, increment,
    dest_reg, 0, OPTAB_LIB_WIDEN);
  if (dest_reg != result)
    emit_move_insn (dest_reg, result);
}
int
back_branch_in_range_p (const struct loop *loop, rtx insn)
{
  rtx p, q, target_insn;
  rtx loop_start = loop->start;
  rtx loop_end = loop->end;
  rtx orig_loop_end = loop->end;
  loop_end = prev_nonnote_insn (loop_end);
  if (((enum rtx_code) (loop_end)->code) == BARRIER)
    loop_end = (((loop_end)->u.fld[1]).rtx1);
  while ((((insn))->volatil))
    insn = (((insn)->u.fld[2]).rtx1);
  if (insn == loop_end || insn == orig_loop_end)
    return 0;
  for (p = (((insn)->u.fld[2]).rtx1); p != loop_end; p = (((p)->u.fld[2]).rtx1))
    {
      if (((enum rtx_code) (p)->code) == JUMP_INSN)
 {
   target_insn = (((p)->u.fld[9]).rtx1);
   for (q = loop_start; q != insn; q = (((q)->u.fld[2]).rtx1))
     if (q == target_insn)
       return 1;
 }
    }
  return 0;
}
static rtx
fold_rtx_mult_add (rtx mult1, rtx mult2, rtx add1, enum machine_mode mode)
{
  rtx temp, mult_res;
  rtx result;
  if ((((enum machine_mode) (mult1)->mode) != mode && ((enum machine_mode) (mult1)->mode) != VOIDmode)
      || (((enum machine_mode) (mult2)->mode) != mode && ((enum machine_mode) (mult2)->mode) != VOIDmode)
      || (((enum machine_mode) (add1)->mode) != mode && ((enum machine_mode) (add1)->mode) != VOIDmode))
    abort ();
  if (((enum rtx_code) (mult1)->code) == CONST_INT)
    {
      temp = mult2;
      mult2 = mult1;
      mult1 = temp;
    }
  mult_res = simplify_binary_operation (MULT, mode, mult1, mult2);
  if (! mult_res)
    mult_res = gen_rtx_fmt_ee (MULT, (mode), (mult1), (mult2));
  if (((enum rtx_code) (add1)->code) == CONST_INT)
    {
      temp = add1;
      add1 = mult_res;
      mult_res = temp;
    }
  result = simplify_binary_operation (PLUS, mode, add1, mult_res);
  if (! result)
    result = gen_rtx_fmt_ee (PLUS, (mode), (add1), (mult_res));
  return result;
}
rtx
biv_total_increment (const struct iv_class *bl)
{
  struct induction *v;
  rtx result;
  result = (const_int_rtx[64]);
  for (v = bl->biv; v; v = v->next_iv)
    {
      if (v->always_computable && v->mult_val == (const_int_rtx[64 +1])
   && ! v->maybe_multiple
   && (mode_class[v->mode] == MODE_INT || mode_class[v->mode] == MODE_PARTIAL_INT))
 {
   if (v->same)
     continue;
   result = fold_rtx_mult_add (result, (const_int_rtx[64 +1]), v->add_val, v->mode);
 }
      else
 return 0;
    }
  return result;
}
static int
find_splittable_regs (const struct loop *loop,
        enum unroll_types unroll_type, int unroll_number)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct iv_class *bl;
  struct induction *v;
  rtx increment, tem;
  rtx biv_final_value;
  int biv_splittable;
  int result = 0;
  for (bl = ivs->list; bl; bl = bl->next)
    {
      increment = biv_total_increment (bl);
      if (! increment || ((enum rtx_code) (increment)->code) != CONST_INT)
 continue;
      biv_splittable = 1;
      biv_final_value = 0;
      if (unroll_type != UNROLL_COMPLETELY
   && (loop->exit_count || unroll_type == UNROLL_NAIVE)
   && (((((reg_n_info)->data.reg[bl->regno])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[bl->regno])->last_uid)] : 2147483647) >= ((((loop->end)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop->end)->u.fld[0]).rtint)] : (abort (), -1))
       || ! bl->init_insn
       || (((bl->init_insn)->u.fld[0]).rtint) >= max_uid_for_loop
       || (((((reg_n_info)->data.reg[bl->regno])->first_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[bl->regno])->first_uid)] : 0)
    < ((((bl->init_insn)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((bl->init_insn)->u.fld[0]).rtint)] : (abort (), -1)))
       || reg_mentioned_p (bl->biv->dest_reg, (((bl->init_set)->u.fld[1]).rtx1)))
   && ! (biv_final_value = final_biv_value (loop, bl)))
 biv_splittable = 0;
      for (v = bl->biv; biv_splittable && v; v = v->next_iv)
 if ((tem = (((((enum rtx_code) (v->insn)->code) == INSN) || (((enum rtx_code) (v->insn)->code) == JUMP_INSN) || (((enum rtx_code) (v->insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((v->insn)->u.fld[5]).rtx1))->code) == SET ? (((v->insn)->u.fld[5]).rtx1) : single_set_2 (v->insn, (((v->insn)->u.fld[5]).rtx1))) : (rtx) 0)) == 0
     || !(((enum rtx_code) ((((tem)->u.fld[0]).rtx1))->code) == REG)
     || ((((((tem)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != bl->regno
     || ((enum rtx_code) ((((tem)->u.fld[1]).rtx1))->code) != PLUS)
   biv_splittable = 0;
      if (biv_splittable == 1)
 {
   if (unroll_type == UNROLL_COMPLETELY)
     {
       if ((((enum rtx_code) (bl->initial_value)->code) == REG)
    && ((((bl->initial_value)->u.fld[0]).rtuint) == bl->regno
        || (((bl->initial_value)->u.fld[0]).rtuint) < 53
        || ! loop_invariant_p (loop, bl->initial_value)))
  {
    rtx tem = gen_reg_rtx (bl->biv->mode);
    record_base_value ((((tem)->u.fld[0]).rtuint), bl->biv->add_val, 0);
    loop_insn_hoist (loop,
       gen_move_insn (tem, bl->biv->src_reg));
    if (loop_dump_stream)
      fprintf (loop_dump_stream,
        "Biv %d initial value remapped to %d.\n",
        bl->regno, (((tem)->u.fld[0]).rtuint));
    splittable_regs[bl->regno] = tem;
  }
       else
  splittable_regs[bl->regno] = bl->initial_value;
     }
   else
     splittable_regs[bl->regno] = (const_int_rtx[64]);
   splittable_regs_updates[bl->regno] = bl->biv_count;
   result += bl->biv_count;
   if (loop_dump_stream)
     fprintf (loop_dump_stream,
       "Biv %d safe to split.\n", bl->regno);
 }
      result += find_splittable_givs (loop, bl, unroll_type, increment,
          unroll_number);
      if (biv_final_value)
 {
   if (! loop->exit_count)
     loop_insn_sink (loop, gen_move_insn (bl->biv->src_reg,
       biv_final_value));
   else
     {
       rtx tem = gen_reg_rtx (bl->biv->mode);
       record_base_value ((((tem)->u.fld[0]).rtuint), bl->biv->add_val, 0);
       loop_insn_hoist (loop, gen_move_insn (tem, bl->biv->src_reg));
       loop_insn_hoist (loop, gen_move_insn (bl->biv->src_reg,
          biv_final_value));
       if (loop_dump_stream)
  fprintf (loop_dump_stream, "Biv %d mapped to %d for split.\n",
    (((bl->biv->src_reg)->u.fld[0]).rtuint), (((tem)->u.fld[0]).rtuint));
       bl->biv->src_reg = tem;
     }
 }
    }
  return result;
}
static int
find_splittable_givs (const struct loop *loop, struct iv_class *bl,
        enum unroll_types unroll_type, rtx increment,
        int unroll_number )
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct induction *v, *v2;
  rtx final_value;
  rtx tem;
  int result = 0;
  for (v = bl->giv; v; v = v->next_iv)
    for (v2 = v->next_iv; v2; v2 = v2->next_iv)
      if (v->insn == v2->insn && rtx_equal_p (v->new_reg, v2->new_reg)
   && ! v2->same_insn)
 v2->same_insn = v;
  for (v = bl->giv; v; v = v->next_iv)
    {
      rtx giv_inc, value1;
      if (unroll_type != UNROLL_COMPLETELY && v->ignore)
 continue;
      if (v->giv_type != DEST_ADDR
   && (! v->always_computable
       || back_branch_in_range_p (loop, v->insn)))
 continue;
      giv_inc = fold_rtx_mult_add (v->mult_val, increment, (const_int_rtx[64]),
       v->mode);
      if (! giv_inc || ((enum rtx_code) (giv_inc)->code) != CONST_INT)
 continue;
      final_value = 0;
      if (unroll_type != UNROLL_COMPLETELY
   && (loop->exit_count || unroll_type == UNROLL_NAIVE)
   && v->giv_type != DEST_ADDR
   && ((((v->dest_reg)->u.fld[0]).rtuint) >= max_reg_before_loop
       || ((((reg_n_info)->data.reg[(((v->dest_reg)->u.fld[0]).rtuint)])->first_uid) != (((v->insn)->u.fld[0]).rtint)
    && (! (tem = find_reg_note (v->insn, REG_RETVAL, (rtx) 0))
        || ((((reg_n_info)->data.reg[(((v->dest_reg)->u.fld[0]).rtuint)])->first_uid)
     != ((((((tem)->u.fld[0]).rtx1))->u.fld[0]).rtint))))
       || (((((reg_n_info)->data.reg[(((v->dest_reg)->u.fld[0]).rtuint)])->last_uid) < max_uid_for_loop ? uid_luid[(((reg_n_info)->data.reg[(((v->dest_reg)->u.fld[0]).rtuint)])->last_uid)] : 2147483647)
    >= ((((loop->end)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop->end)->u.fld[0]).rtint)] : (abort (), -1))))
   && ! (final_value = v->final_value))
 continue;
      if (unroll_type == UNROLL_COMPLETELY)
 {
   rtx biv_initial_value;
   if (splittable_regs[bl->regno])
     biv_initial_value = splittable_regs[bl->regno];
   else if (!(((enum rtx_code) (bl->initial_value)->code) == REG)
     || ((((bl->initial_value)->u.fld[0]).rtuint) != bl->regno
         && (((bl->initial_value)->u.fld[0]).rtuint) >= 53))
     biv_initial_value = bl->initial_value;
   else
     {
       rtx tem = gen_reg_rtx (bl->biv->mode);
       record_base_value ((((tem)->u.fld[0]).rtuint), bl->biv->add_val, 0);
       loop_insn_hoist (loop, gen_move_insn (tem, bl->biv->src_reg));
       biv_initial_value = tem;
     }
   biv_initial_value = extend_value_for_giv (v, biv_initial_value);
   value1 = fold_rtx_mult_add (v->mult_val, biv_initial_value,
         v->add_val, v->mode);
 }
      else
 value1 = (const_int_rtx[64]);
      if (v->new_reg)
 {
   if (v->same && ! v->same->new_reg)
     {
       if (loop_dump_stream)
  fprintf (loop_dump_stream,
    "giv combined with unreduced giv not split.\n");
       continue;
     }
   else if (v->giv_type == DEST_REG)
     {
       if (unroll_type == UNROLL_COMPLETELY
    && ((enum rtx_code) (value1)->code) != CONST_INT
    && !(((enum rtx_code) (value1)->code) == REG)
    && (((enum rtx_code) (value1)->code) != PLUS
        || !(((enum rtx_code) ((((value1)->u.fld[0]).rtx1))->code) == REG)
        || ((enum rtx_code) ((((value1)->u.fld[1]).rtx1))->code) != CONST_INT))
  {
    rtx tem = gen_reg_rtx (v->mode);
    record_base_value ((((tem)->u.fld[0]).rtuint), v->add_val, 0);
    loop_iv_add_mult_hoist (loop,
    extend_value_for_giv (v, bl->initial_value),
    v->mult_val, v->add_val, tem);
    value1 = tem;
  }
       splittable_regs[reg_or_subregno (v->new_reg)] = value1;
     }
   else
     continue;
 }
      else
 {
   continue;
 }
      if ((((enum rtx_code) (v->new_reg)->code) == REG))
 {
   int count = 1;
   if (! v->ignore)
     count = ivs->regs[(((v->src_reg)->u.fld[0]).rtuint)].iv.class->biv_count;
   splittable_regs_updates[reg_or_subregno (v->new_reg)] = count;
 }
      result++;
      if (loop_dump_stream)
 {
   int regnum;
   if (((enum rtx_code) (v->dest_reg)->code) == CONST_INT)
     regnum = -1;
   else if (!(((enum rtx_code) (v->dest_reg)->code) == REG))
     regnum = ((((((v->dest_reg)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
   else
     regnum = (((v->dest_reg)->u.fld[0]).rtuint);
   fprintf (loop_dump_stream, "Giv %d at insn %d safe to split.\n",
     regnum, (((v->insn)->u.fld[0]).rtint));
 }
    }
  return result;
}
static int
reg_dead_after_loop (const struct loop *loop, rtx reg)
{
  rtx insn, label;
  int jump_count = 0;
  int label_count = 0;
  for (label = loop->exit_labels; label; label = (((label)->u.fld[1]).rtx1))
    label_count++;
  if (label_count != loop->exit_count)
    return 0;
  label = gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (loop->end));
  (((label)->u.fld[1]).rtx1) = loop->exit_labels;
  for (; label; label = (((label)->u.fld[1]).rtx1))
    {
      insn = ((((((label)->u.fld[0]).rtx1))->u.fld[2]).rtx1);
      while (insn)
 {
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       rtx set, note;
       if (reg_referenced_p (reg, (((insn)->u.fld[5]).rtx1)))
  return 0;
       note = find_reg_equal_equiv_note (insn);
       if (note && reg_overlap_mentioned_p (reg, (((note)->u.fld[0]).rtx1)))
  return 0;
       set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
       if (set && rtx_equal_p ((((set)->u.fld[0]).rtx1), reg))
  break;
       if (((enum rtx_code) (insn)->code) == JUMP_INSN)
  {
    if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == RETURN)
      break;
    else if (!any_uncondjump_p (insn)
             || jump_count++ > 20)
      return 0;
    else
      insn = (((insn)->u.fld[9]).rtx1);
  }
     }
   insn = (((insn)->u.fld[2]).rtx1);
 }
    }
  return 1;
}
rtx
final_biv_value (const struct loop *loop, struct iv_class *bl)
{
  unsigned long n_iterations = ((struct loop_info *) (loop)->aux)->n_iterations;
  rtx increment, tem;
  if (mode_class[bl->biv->mode] != MODE_INT)
    return 0;
  if (bl->reversed)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Final biv value for %d, reversed biv.\n", bl->regno);
      return (const_int_rtx[64]);
    }
  if (n_iterations != 0
      && ! loop->exit_count
      && loop_invariant_p (loop, bl->initial_value))
    {
      increment = biv_total_increment (bl);
      if (increment && loop_invariant_p (loop, increment))
 {
   tem = gen_reg_rtx (bl->biv->mode);
   record_base_value ((((tem)->u.fld[0]).rtuint), bl->biv->add_val, 0);
   loop_iv_add_mult_sink (loop, increment, gen_rtx_CONST_INT (VOIDmode, (long) (n_iterations)),
     bl->initial_value, tem);
   if (loop_dump_stream)
     fprintf (loop_dump_stream,
       "Final biv value for %d, calculated.\n", bl->regno);
   return tem;
 }
    }
  if (reg_dead_after_loop (loop, bl->biv->src_reg))
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Final biv value for %d, biv dead after loop exit.\n",
   bl->regno);
      return (const_int_rtx[64]);
    }
  return 0;
}
rtx
final_giv_value (const struct loop *loop, struct induction *v)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  struct iv_class *bl;
  rtx insn;
  rtx increment, tem;
  rtx seq;
  rtx loop_end = loop->end;
  unsigned long n_iterations = ((struct loop_info *) (loop)->aux)->n_iterations;
  bl = ivs->regs[(((v->src_reg)->u.fld[0]).rtuint)].iv.class;
  if (bl->reversed)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Final giv value for %d, depends on reversed biv\n",
   (((v->dest_reg)->u.fld[0]).rtuint));
      return (const_int_rtx[64]);
    }
  if (n_iterations != 0
      && ! loop->exit_count
      && v->always_executed)
    {
      increment = biv_total_increment (bl);
      if (increment && loop_invariant_p (loop, increment)
   && loop_invariant_p (loop, bl->initial_value))
 {
   tem = gen_reg_rtx (v->mode);
   record_base_value ((((tem)->u.fld[0]).rtuint), bl->biv->add_val, 0);
   loop_iv_add_mult_sink (loop, extend_value_for_giv (v, increment),
     gen_rtx_CONST_INT (VOIDmode, (long) (n_iterations)),
     extend_value_for_giv (v, bl->initial_value),
     tem);
   for (insn = (((v->insn)->u.fld[2]).rtx1); insn != loop_end;
        insn = (((insn)->u.fld[2]).rtx1))
     {
       struct induction *biv;
       for (biv = bl->biv; biv; biv = biv->next_iv)
  if (biv->insn == insn)
    {
      start_sequence ();
      tem = expand_simple_binop (((enum machine_mode) (tem)->mode), MINUS, tem,
            biv->add_val, (rtx) 0, 0,
            OPTAB_LIB_WIDEN);
      seq = get_insns ();
      end_sequence ();
      loop_insn_sink (loop, seq);
    }
     }
   loop_iv_add_mult_sink (loop, tem, v->mult_val, v->add_val, tem);
   if (loop_dump_stream)
     fprintf (loop_dump_stream,
       "Final giv value for %d, calc from biv's value.\n",
       (((v->dest_reg)->u.fld[0]).rtuint));
   return tem;
 }
    }
  if (v->replaceable)
    abort ();
  if (reg_dead_after_loop (loop, v->dest_reg))
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Final giv value for %d, giv dead after loop exit.\n",
   (((v->dest_reg)->u.fld[0]).rtuint));
      return (const_int_rtx[64]);
    }
  return 0;
}
static rtx
loop_find_equiv_value (const struct loop *loop, rtx reg)
{
  rtx loop_start = loop->start;
  rtx insn, set;
  rtx ret;
  ret = reg;
  for (insn = (((loop_start)->u.fld[1]).rtx1); insn; insn = (((insn)->u.fld[1]).rtx1))
    {
      if (((enum rtx_code) (insn)->code) == CODE_LABEL)
 break;
      else if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) && reg_set_p (reg, insn))
 {
   if ((set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0))
       && ((((set)->u.fld[0]).rtx1) == reg))
     {
       rtx note = find_reg_note (insn, REG_EQUAL, (rtx) 0);
       if (note && ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) != EXPR_LIST
    && ((rtx_class[(int) (((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((note)->u.fld[0]).rtx1))->code) == CONST_VECTOR))
  ret = (((note)->u.fld[0]).rtx1);
       else
  ret = (((set)->u.fld[1]).rtx1);
       if (modified_between_p (ret, insn, loop_start))
  ret = reg;
     }
   break;
 }
    }
  return ret;
}
static rtx
subtract_reg_term (rtx op, rtx reg)
{
  if (op == reg)
    return (const_int_rtx[64]);
  if (((enum rtx_code) (op)->code) == PLUS)
    {
      if ((((op)->u.fld[0]).rtx1) == reg)
 return (((op)->u.fld[1]).rtx1);
      else if ((((op)->u.fld[1]).rtx1) == reg)
 return (((op)->u.fld[0]).rtx1);
    }
  abort ();
}
static rtx
find_common_reg_term (rtx op0, rtx op1)
{
  if (((((enum rtx_code) (op0)->code) == REG) || ((enum rtx_code) (op0)->code) == PLUS)
      && ((((enum rtx_code) (op1)->code) == REG) || ((enum rtx_code) (op1)->code) == PLUS))
    {
      rtx op00;
      rtx op01;
      rtx op10;
      rtx op11;
      if (((enum rtx_code) (op0)->code) == PLUS)
 op01 = (((op0)->u.fld[1]).rtx1), op00 = (((op0)->u.fld[0]).rtx1);
      else
 op01 = (const_int_rtx[64]), op00 = op0;
      if (((enum rtx_code) (op1)->code) == PLUS)
 op11 = (((op1)->u.fld[1]).rtx1), op10 = (((op1)->u.fld[0]).rtx1);
      else
 op11 = (const_int_rtx[64]), op10 = op1;
      if ((((enum rtx_code) (op00)->code) == REG) && (op00 == op10 || op00 == op11))
 return op00;
      else if ((((enum rtx_code) (op01)->code) == REG) && (op01 == op10 || op01 == op11))
 return op01;
    }
  return (rtx) 0;
}
unsigned long
loop_iterations (struct loop *loop)
{
  struct loop_info *loop_info = ((struct loop_info *) (loop)->aux);
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  rtx comparison, comparison_value;
  rtx iteration_var, initial_value, increment, final_value;
  enum rtx_code comparison_code;
  long inc;
  unsigned long abs_inc;
  unsigned long abs_diff;
  int off_by_one;
  int increment_dir;
  int unsigned_p, compare_dir, final_larger;
  rtx last_loop_insn;
  rtx reg_term;
  struct iv_class *bl;
  loop_info->n_iterations = 0;
  loop_info->initial_value = 0;
  loop_info->initial_equiv_value = 0;
  loop_info->comparison_value = 0;
  loop_info->final_value = 0;
  loop_info->final_equiv_value = 0;
  loop_info->increment = 0;
  loop_info->iteration_var = 0;
  loop_info->unroll_number = 1;
  loop_info->iv = 0;
  last_loop_insn = (((loop->end)->u.fld[1]).rtx1);
  if (((enum rtx_code) (last_loop_insn)->code) != JUMP_INSN)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Loop iterations: No final conditional branch found.\n");
      return 0;
    }
  if (((((((last_loop_insn)->u.fld[9]).rtx1))->u.fld[4]).rtint) > 1)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Loop iterations: Loop has multiple back edges.\n");
      return 0;
    }
  if (loop->top && loop->cont)
    {
      rtx temp = (((last_loop_insn)->u.fld[1]).rtx1);
      do
 {
   if (((enum rtx_code) (temp)->code) == JUMP_INSN)
     {
       if ((((temp)->u.fld[9]).rtx1) == 0)
  {
    if (loop_dump_stream)
      fprintf
        (loop_dump_stream,
         "Loop iterations: Jump insn has null JUMP_LABEL.\n");
    return 0;
  }
       if (
    ((((((temp)->u.fld[9]).rtx1))->u.fld[0]).rtint) < max_uid_for_loop
    && (((((((temp)->u.fld[9]).rtx1))->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[((((((temp)->u.fld[9]).rtx1))->u.fld[0]).rtint)] : (abort (), -1)) > ((((loop->top)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop->top)->u.fld[0]).rtint)] : (abort (), -1))
    && (((((((temp)->u.fld[9]).rtx1))->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[((((((temp)->u.fld[9]).rtx1))->u.fld[0]).rtint)] : (abort (), -1)) < ((((loop->cont)->u.fld[0]).rtint) < max_uid_for_loop ? uid_luid[(((loop->cont)->u.fld[0]).rtint)] : (abort (), -1)))
  {
    if (loop_dump_stream)
      fprintf
        (loop_dump_stream,
         "Loop iterations: Loop has multiple back edges.\n");
    return 0;
  }
     }
 }
      while ((temp = (((temp)->u.fld[1]).rtx1)) != loop->cont);
    }
  comparison = get_condition_for_loop (loop, last_loop_insn);
  if (comparison == 0)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Loop iterations: No final comparison found.\n");
      return 0;
    }
  comparison_code = ((enum rtx_code) (comparison)->code);
  iteration_var = (((comparison)->u.fld[0]).rtx1);
  comparison_value = (((comparison)->u.fld[1]).rtx1);
  if (!(((enum rtx_code) (iteration_var)->code) == REG))
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Loop iterations: Comparison not against register.\n");
      return 0;
    }
  if ((unsigned) (((iteration_var)->u.fld[0]).rtuint) >= ivs->n_regs
      && ! (((iteration_var))->volatil))
    abort ();
  initial_value = 0;
  increment = 0;
  if ((unsigned) (((iteration_var)->u.fld[0]).rtuint) >= ivs->n_regs)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Loop iterations: No reg_iv_type entry for iteration var.\n");
      return 0;
    }
  else if ((((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (iteration_var)->mode)]) * 8))
     > (8 * 4)))
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Loop iterations: Iteration var rejected because mode too large.\n");
      return 0;
    }
  else if (mode_class[((enum machine_mode) (iteration_var)->mode)] != MODE_INT)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Loop iterations: Iteration var not an integer.\n");
      return 0;
    }
  if (ivs->regs[(((iteration_var)->u.fld[0]).rtuint)].type != BASIC_INDUCT
      && ivs->regs[(((iteration_var)->u.fld[0]).rtuint)].type != GENERAL_INDUCT
      && (((enum rtx_code) (comparison_value)->code) == REG)
      && (((comparison_value)->u.fld[0]).rtuint) < ivs->n_regs)
    {
      rtx temp = comparison_value;
      comparison_code = swap_condition (comparison_code);
      comparison_value = iteration_var;
      iteration_var = temp;
    }
  if (ivs->regs[(((iteration_var)->u.fld[0]).rtuint)].type == BASIC_INDUCT)
    {
      if ((((iteration_var)->u.fld[0]).rtuint) >= ivs->n_regs)
 abort ();
      bl = ivs->regs[(((iteration_var)->u.fld[0]).rtuint)].iv.class;
      initial_value = bl->initial_value;
      if (!bl->biv->always_executed || bl->biv->maybe_multiple)
 {
   if (loop_dump_stream)
     fprintf (loop_dump_stream,
       "Loop iterations: Basic induction var not set once in each iteration.\n");
   return 0;
 }
      increment = biv_total_increment (bl);
    }
  else if (ivs->regs[(((iteration_var)->u.fld[0]).rtuint)].type == GENERAL_INDUCT)
    {
      long offset = 0;
      struct induction *v = ivs->regs[(((iteration_var)->u.fld[0]).rtuint)].iv.info;
      rtx biv_initial_value;
      if ((((v->src_reg)->u.fld[0]).rtuint) >= ivs->n_regs)
 abort ();
      if (!v->always_executed || v->maybe_multiple)
 {
   if (loop_dump_stream)
     fprintf (loop_dump_stream,
       "Loop iterations: General induction var not set once in each iteration.\n");
   return 0;
 }
      bl = ivs->regs[(((v->src_reg)->u.fld[0]).rtuint)].iv.class;
      increment = biv_total_increment (bl);
      if (increment)
 {
   struct induction *biv_inc;
   increment = fold_rtx_mult_add (v->mult_val,
      extend_value_for_giv (v, increment),
      (const_int_rtx[64]), v->mode);
   for (biv_inc = bl->biv; biv_inc; biv_inc = biv_inc->next_iv)
     {
       if (loop_insn_first_p (v->insn, biv_inc->insn))
  {
    if ((((enum rtx_code) (biv_inc->add_val)->code) == REG))
      {
        if (loop_dump_stream)
   fprintf (loop_dump_stream,
     "Loop iterations: Basic induction var add_val is REG %d.\n",
     (((biv_inc->add_val)->u.fld[0]).rtuint));
   return 0;
      }
    if (biv_inc->same)
      continue;
    offset -= ((biv_inc->add_val)->u.hwint[0]);
  }
     }
 }
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Loop iterations: Giv iterator, initial value bias %ld.\n",
   (long) offset);
      biv_initial_value = extend_value_for_giv (v, bl->initial_value);
      initial_value
 = fold_rtx_mult_add (v->mult_val,
        plus_constant_wide ((biv_initial_value), (long) (offset)),
        v->add_val, v->mode);
    }
  else
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Loop iterations: Not basic or general induction var.\n");
      return 0;
    }
  if (initial_value == 0)
    return 0;
  unsigned_p = 0;
  off_by_one = 0;
  switch (comparison_code)
    {
    case LEU:
      unsigned_p = 1;
    case LE:
      compare_dir = 1;
      off_by_one = 1;
      break;
    case GEU:
      unsigned_p = 1;
    case GE:
      compare_dir = -1;
      off_by_one = -1;
      break;
    case EQ:
      compare_dir = 0;
      break;
    case LTU:
      unsigned_p = 1;
    case LT:
      compare_dir = 1;
      break;
    case GTU:
      unsigned_p = 1;
    case GT:
      compare_dir = -1;
      break;
    case NE:
      compare_dir = 0;
      break;
    default:
      abort ();
    }
  final_value = comparison_value;
  if ((((enum rtx_code) (comparison_value)->code) == REG)
      && loop_invariant_p (loop, comparison_value))
    {
      final_value = loop_find_equiv_value (loop, comparison_value);
      if (! loop_invariant_p (loop, final_value))
 final_value = comparison_value;
    }
  if (off_by_one)
    final_value = plus_constant_wide ((final_value), (long) (off_by_one));
  loop_info->initial_value = initial_value;
  loop_info->comparison_value = comparison_value;
  loop_info->final_value = plus_constant_wide ((comparison_value), (long) (off_by_one));
  loop_info->increment = increment;
  loop_info->iteration_var = iteration_var;
  loop_info->comparison_code = comparison_code;
  loop_info->iv = bl;
  if ((((enum rtx_code) (initial_value)->code) == REG))
    {
      rtx reg1;
      rtx reg2;
      rtx const2;
      reg1 = initial_value;
      if (((enum rtx_code) (final_value)->code) == PLUS)
 reg2 = (((final_value)->u.fld[0]).rtx1), const2 = (((final_value)->u.fld[1]).rtx1);
      else
 reg2 = final_value, const2 = (const_int_rtx[64]);
      if ((((enum rtx_code) (reg2)->code) == REG) && reg2 != reg1)
 {
   rtx temp;
   temp = loop_find_equiv_value (loop, reg1);
   if (find_common_reg_term (temp, reg2))
     initial_value = temp;
   else if (loop_invariant_p (loop, reg2))
     {
       temp = loop_find_equiv_value (loop, reg2);
       if (temp == loop_info->iteration_var)
  temp = initial_value;
       if (temp == reg1)
  final_value = (const2 == (const_int_rtx[64]))
    ? reg1 : gen_rtx_fmt_ee (PLUS, (((enum machine_mode) (reg1)->mode)), (reg1), (const2));
     }
 }
      else if (loop->vtop && ((enum rtx_code) (reg2)->code) == CONST_INT)
 {
   rtx temp;
   temp = loop_find_equiv_value (loop, reg1);
   if (((enum rtx_code) (temp)->code) == MINUS && (((enum rtx_code) ((((temp)->u.fld[0]).rtx1))->code) == REG))
     {
       rtx temp2 = loop_find_equiv_value (loop, (((temp)->u.fld[0]).rtx1));
       if (((enum rtx_code) (temp2)->code) == PLUS
    && (((temp2)->u.fld[0]).rtx1) == (((temp)->u.fld[1]).rtx1))
  initial_value = (((temp2)->u.fld[1]).rtx1);
     }
 }
    }
  if (loop->vtop
      && (reg_term = find_common_reg_term (initial_value, final_value)))
    {
      initial_value = subtract_reg_term (initial_value, reg_term);
      final_value = subtract_reg_term (final_value, reg_term);
    }
  loop_info->initial_equiv_value = initial_value;
  loop_info->final_equiv_value = final_value;
  if (comparison_code == EQ)
    loop_info->final_equiv_value = loop_info->final_value = 0;
  if (increment == 0)
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream,
   "Loop iterations: Increment value can't be calculated.\n");
      return 0;
    }
  if (((enum rtx_code) (increment)->code) != CONST_INT)
    {
      if ((((enum rtx_code) (increment)->code) == REG) || ((enum rtx_code) (increment)->code) == SUBREG)
 increment = loop_find_equiv_value (loop, increment);
      if (((enum rtx_code) (increment)->code) != CONST_INT)
 {
   if (loop_dump_stream)
     {
       fprintf (loop_dump_stream,
         "Loop iterations: Increment value not constant ");
       print_simple_rtl (loop_dump_stream, increment);
       fprintf (loop_dump_stream, ".\n");
     }
   return 0;
 }
      loop_info->increment = increment;
    }
  if (((enum rtx_code) (initial_value)->code) != CONST_INT)
    {
      if (loop_dump_stream)
 {
   fprintf (loop_dump_stream,
     "Loop iterations: Initial value not constant ");
   print_simple_rtl (loop_dump_stream, initial_value);
   fprintf (loop_dump_stream, ".\n");
 }
      return 0;
    }
  else if (((enum rtx_code) (final_value)->code) != CONST_INT)
    {
      if (loop_dump_stream)
 {
   fprintf (loop_dump_stream,
     "Loop iterations: Final value not constant ");
   print_simple_rtl (loop_dump_stream, final_value);
   fprintf (loop_dump_stream, ".\n");
 }
      return 0;
    }
  else if (comparison_code == EQ)
    {
      rtx inc_once;
      if (loop_dump_stream)
 fprintf (loop_dump_stream, "Loop iterations: EQ comparison loop.\n");
      inc_once = gen_int_mode (((initial_value)->u.hwint[0]) + ((increment)->u.hwint[0]),
          ((enum machine_mode) (iteration_var)->mode));
      if (inc_once == final_value)
 {
   if (increment == (const_int_rtx[64]))
     return 0;
   loop_info->n_iterations = 2;
 }
      else
 loop_info->n_iterations = 1;
      if (((enum rtx_code) (loop_info->initial_value)->code) == CONST_INT)
 loop_info->final_value
   = gen_int_mode ((((loop_info->initial_value)->u.hwint[0])
      + loop_info->n_iterations * ((increment)->u.hwint[0])),
     ((enum machine_mode) (iteration_var)->mode));
      else
 loop_info->final_value
   = plus_constant_wide ((loop_info->initial_value), (long) (loop_info->n_iterations * ((increment)->u.hwint[0])))
                                                   ;
      loop_info->final_equiv_value
 = gen_int_mode ((((initial_value)->u.hwint[0])
    + loop_info->n_iterations * ((increment)->u.hwint[0])),
   ((enum machine_mode) (iteration_var)->mode));
      return loop_info->n_iterations;
    }
  if (unsigned_p)
    final_larger
      = ((unsigned long) ((final_value)->u.hwint[0])
  > (unsigned long) ((initial_value)->u.hwint[0]))
 - ((unsigned long) ((final_value)->u.hwint[0])
    < (unsigned long) ((initial_value)->u.hwint[0]));
  else
    final_larger = (((final_value)->u.hwint[0]) > ((initial_value)->u.hwint[0]))
      - (((final_value)->u.hwint[0]) < ((initial_value)->u.hwint[0]));
  if (((increment)->u.hwint[0]) > 0)
    increment_dir = 1;
  else if (((increment)->u.hwint[0]) == 0)
    increment_dir = 0;
  else
    increment_dir = -1;
  if (final_larger == increment_dir && final_larger != 0
      && (final_larger == compare_dir || compare_dir == 0))
    ;
  else
    {
      if (loop_dump_stream)
 fprintf (loop_dump_stream, "Loop iterations: Not normal loop.\n");
      return 0;
    }
  inc = ((increment)->u.hwint[0]);
  if (inc > 0)
    {
      abs_diff = ((final_value)->u.hwint[0]) - ((initial_value)->u.hwint[0]);
      abs_inc = inc;
    }
  else if (inc < 0)
    {
      abs_diff = ((initial_value)->u.hwint[0]) - ((final_value)->u.hwint[0]);
      abs_inc = -inc;
    }
  else
    abort ();
  abs_diff &= ((unsigned long) 1
        << (((unsigned short) (((unsigned short) mode_size[((enum machine_mode) (iteration_var)->mode)]) * 8)) - 1)
        << 1) - 1;
  if (compare_dir == 0 && (abs_diff % abs_inc) != 0)
    return 0;
  loop_info->n_iterations = abs_diff / abs_inc + ((abs_diff % abs_inc) != 0);
  return loop_info->n_iterations;
}
static rtx
remap_split_bivs (struct loop *loop, rtx x)
{
  struct loop_ivs *ivs = (&((struct loop_info *) (loop)->aux)->ivs);
  enum rtx_code code;
  int i;
  const char *fmt;
  if (x == 0)
    return x;
  code = ((enum rtx_code) (x)->code);
  switch (code)
    {
    case SCRATCH:
    case PC:
    case CC0:
    case CONST_INT:
    case CONST_DOUBLE:
    case CONST:
    case SYMBOL_REF:
    case LABEL_REF:
      return x;
    case REG:
      if ((((x)->u.fld[0]).rtuint) < ivs->n_regs
   && ivs->regs[(((x)->u.fld[0]).rtuint)].type == BASIC_INDUCT)
 return ivs->regs[(((x)->u.fld[0]).rtuint)].iv.class->biv->src_reg;
      break;
    default:
      break;
    }
  fmt = (rtx_format[(int) (code)]);
  for (i = (rtx_length[(int) (code)]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'e')
 (((x)->u.fld[i]).rtx1) = remap_split_bivs (loop, (((x)->u.fld[i]).rtx1));
      else if (fmt[i] == 'E')
 {
   int j;
   for (j = 0; j < (((((x)->u.fld[i]).rtvec1))->num_elem); j++)
     (((((x)->u.fld[i]).rtvec1))->elem[j]) = remap_split_bivs (loop, (((((x)->u.fld[i]).rtvec1))->elem[j]));
 }
    }
  return x;
}
int
set_dominates_use (int regno, int first_uid, int last_uid, rtx copy_start,
     rtx copy_end)
{
  int passed_jump = 0;
  rtx p = (((copy_start)->u.fld[2]).rtx1);
  while ((((p)->u.fld[0]).rtint) != first_uid)
    {
      if (((enum rtx_code) (p)->code) == JUMP_INSN)
 passed_jump = 1;
      if (p == copy_end)
 return 0;
      p = (((p)->u.fld[2]).rtx1);
    }
  if (! ((((enum rtx_code) (p)->code) == INSN) || (((enum rtx_code) (p)->code) == JUMP_INSN) || (((enum rtx_code) (p)->code) == CALL_INSN)) || ! dead_or_set_regno_p (p, regno))
    return 0;
  if (passed_jump == 0)
    return 1;
  while ((((p)->u.fld[0]).rtint) != last_uid)
    {
      if (((enum rtx_code) (p)->code) == CODE_LABEL)
 return 0;
      else if (p == copy_end)
 return 1;
      p = (((p)->u.fld[2]).rtx1);
    }
  return 1;
}
static rtx
ujump_to_loop_cont (rtx loop_start, rtx loop_cont)
{
  rtx x, label, label_ref;
  loop_start = next_nonnote_insn (loop_start);
  x = pc_set (loop_start);
  if (!x)
    return (rtx) 0;
  label_ref = (((x)->u.fld[1]).rtx1);
  if (!label_ref)
    return (rtx) 0;
  label = next_nonnote_insn (loop_cont);
  if (label == 0 || ((enum rtx_code) (label)->code) != CODE_LABEL)
    return (rtx) 0;
  if ((((label)->u.fld[6]).rtint) == ((((((label_ref)->u.fld[0]).rtx1))->u.fld[6]).rtint))
    return loop_start;
  else
    return (rtx) 0;
}
extern int yydebug;
extern struct cpp_reader* parse_in;
extern void init_pragma (void);
extern void c_register_pragma (const char *, const char *,
          void (*) (struct cpp_reader *));
extern void maybe_apply_pragma_weak (tree);
extern tree maybe_apply_renaming_pragma (tree, tree);
extern void add_to_renaming_pragma_list (tree, tree);
extern int c_lex (tree *);
extern int c_lex_with_flags (tree *, unsigned char *);
extern int c_lex_string_translate;
const char *first_global_object_name;
const char *weak_global_object_name;
struct addr_const;
struct constant_descriptor_rtx;
struct rtx_constant_pool;
struct varasm_status
{
  struct rtx_constant_pool *pool;
  unsigned int deferred_constants;
};
static int const_labelno;
int size_directive_output;
tree last_assemble_variable_decl;
unsigned char unlikely_section_label_printed = 0;
static long const_alias_set;
static const char *strip_reg_name (const char *);
static int contains_pointers_p (tree);
static void decode_addr_const (tree, struct addr_const *);
static hashval_t const_desc_hash (const void *);
static int const_desc_eq (const void *, const void *);
static hashval_t const_hash_1 (const tree);
static int compare_constant (const tree, const tree);
static tree copy_constant (tree);
static void output_constant_def_contents (rtx);
static void output_addressed_constants (tree);
static unsigned long array_size_for_constructor (tree);
static unsigned min_align (unsigned, unsigned);
static void output_constructor (tree, unsigned long, unsigned int);
static void globalize_decl (tree);
static void maybe_assemble_visibility (tree);
static int in_named_entry_eq (const void *, const void *);
static hashval_t in_named_entry_hash (const void *);
static void asm_output_aligned_bss (FILE *, tree, const char *,
        unsigned long, int)
     ;
static unsigned char asm_emit_uninitialised (tree, const char*,
        unsigned long,
        unsigned long);
static void mark_weak (tree);
enum in_section { no_section, in_text, in_unlikely_executed_text, in_data,
    in_named
  , in_bss
  , in_readonly_data
};
static enum in_section in_section = no_section;
static const char *in_named_name;
struct in_named_entry
{
  const char *name;
  unsigned int flags;
  unsigned char declared;
};
static htab_t in_named_htab;
void
text_section (void)
{
  if (in_section != in_text)
    {
      in_section = in_text;
      fprintf (asm_out_file, "%s\n", "\t.text");
      if ((2)!=0) fprintf ((asm_out_file), "\t.align %d\n", 1<<(2));
    }
}
void
unlikely_text_section (void)
{
  if ((in_section != in_unlikely_executed_text)
      && (in_section != in_named
    || strcmp (in_named_name, ".text.unlikely") != 0))
    {
      if (targetm.have_named_sections)
        named_section ((tree) ((void *)0), ".text.unlikely", 0);
      else
 {
   in_section = in_unlikely_executed_text;
   fprintf (asm_out_file, "%s\n", "\t.text");
 }
      if (!unlikely_section_label_printed)
 {
   fprintf (asm_out_file, "__%s_unlikely_section:\n",
     current_function_name ());
   unlikely_section_label_printed = 1;
   assemble_align (8);
 }
    }
}
void
data_section (void)
{
  if (in_section != in_data)
    {
      in_section = in_data;
      fprintf (asm_out_file, "%s\n", "\t.data");
    }
}
void
readonly_data_section (void)
{
  if (in_section != in_readonly_data)
    {
      in_section = in_readonly_data;
      fputs_unlocked ("\t.section\t.rodata", asm_out_file);
      fputc_unlocked ('\n', asm_out_file);
    }
}
int
in_text_section (void)
{
  return in_section == in_text;
}
int
in_unlikely_text_section (void)
{
  return in_section == in_unlikely_executed_text;
}
int
in_data_section (void)
{
  return in_section == in_data;
}
static int
in_named_entry_eq (const void *p1, const void *p2)
{
  const struct in_named_entry *old = p1;
  const char *new = p2;
  return strcmp (old->name, new) == 0;
}
static hashval_t
in_named_entry_hash (const void *p)
{
  const struct in_named_entry *old = p;
  return htab_hash_string (old->name);
}
unsigned int
get_named_section_flags (const char *section)
{
  struct in_named_entry **slot;
  slot = (struct in_named_entry **)
    htab_find_slot_with_hash (in_named_htab, section,
         htab_hash_string (section), NO_INSERT);
  return slot ? (*slot)->flags : 0;
}
unsigned char
named_section_first_declaration (const char *name)
{
  struct in_named_entry **slot;
  slot = (struct in_named_entry **)
    htab_find_slot_with_hash (in_named_htab, name,
         htab_hash_string (name), NO_INSERT);
  if (! (*slot)->declared)
    {
      (*slot)->declared = 1;
      return 1;
    }
  else
    {
      return 0;
    }
}
unsigned char
set_named_section_flags (const char *section, unsigned int flags)
{
  struct in_named_entry **slot, *entry;
  slot = (struct in_named_entry **)
    htab_find_slot_with_hash (in_named_htab, section,
         htab_hash_string (section), INSERT);
  entry = *slot;
  if (!entry)
    {
      entry = ggc_alloc_stat (sizeof (*entry) );
      *slot = entry;
      entry->name = ggc_alloc_string((section), -1);
      entry->flags = flags;
      entry->declared = 0;
    }
  else if (entry->flags != flags)
    return 0;
  return 1;
}
void
named_section_flags (const char *name, unsigned int flags)
{
  if (in_section != in_named || strcmp (name, in_named_name) != 0)
    {
      if (! set_named_section_flags (name, flags))
 abort ();
      targetm.asm_out.named_section (name, flags);
      if (flags & 0x04000)
 in_section = no_section;
      else
 {
   in_named_name = ggc_alloc_string((name), -1);
   in_section = in_named;
 }
    }
}
void
named_section (tree decl, const char *name, int reloc)
{
  unsigned int flags;
  if (decl != (tree) ((void *)0) && !(tree_code_type[(int) (((enum tree_code) (decl)->common.code))] == 'd'))
    abort ();
  if (name == ((void *)0))
    name = ((((decl)->decl.section_name))->string1.pointer);
  flags = targetm.section_type_flags (decl, name, reloc);
  if (decl && ! set_named_section_flags (name, flags))
    {
      flags = get_named_section_flags (name);
      if ((flags & 0x20000) == 0)
 error ("%J%D causes a section type conflict", decl, decl);
    }
  named_section_flags (name, flags);
}
void
resolve_unique_section (tree decl, int reloc ,
   int flag_function_or_data_sections)
{
  if (((decl)->decl.section_name) == (tree) ((void *)0)
      && targetm.have_named_sections
      && (flag_function_or_data_sections
   || ((decl)->decl.transparent_union)))
    targetm.asm_out.unique_section (decl, reloc);
}
void
bss_section (void)
{
  if (in_section != in_bss)
    {
      fprintf (asm_out_file, "%s\n", "\t.bss");
      in_section = in_bss;
    }
}
static void
asm_output_aligned_bss (FILE *file, tree decl ,
   const char *name, unsigned long size,
   int align)
{
  bss_section ();
  if ((floor_log2_wide ((unsigned long) (align / 8)))!=0) fprintf ((file), "\t.align %d\n", 1<<(floor_log2_wide ((unsigned long) (align / 8))));
  last_assemble_variable_decl = decl;
  do { long size; do { fputs_unlocked ("\t.type\t", file); assemble_name (file, name); fputs_unlocked (", ", file); fprintf (file, "@%s", "object"); putc_unlocked ('\n', file); } while (0); size_directive_output = 0; if (!flag_inhibit_size_directive && (decl) && ((decl)->decl.size)) { size_directive_output = 1; size = int_size_in_bytes (((decl)->common.type)); do { long size_ = (size); fputs_unlocked ("\t.size\t", file); assemble_name (file, name); fprintf (file, ", %ld\n", size_); } while (0); } do { assemble_name ((file), (name)); fputs_unlocked (":\n", (file)); } while (0); } while (0);
  fprintf ((file), "%s%lu\n", "\t.zero\t", (size ? size : 1));
}
void
function_section (tree decl)
{
  if (scan_ahead_for_unlikely_executed_note (get_insns()))
    unlikely_text_section ();
  else
    {
      if (decl != (tree) ((void *)0)
   && ((decl)->decl.section_name) != (tree) ((void *)0))
 named_section (decl, (char *) 0, 0);
      else
 text_section ();
    }
}
void
variable_section (tree decl, int reloc)
{
  if (((((enum tree_code) (decl)->common.code) == FUNCTION_DECL || ((enum tree_code) (decl)->common.code) == VAR_DECL) && ((decl)->decl.section_name) != (tree) ((void *)0)))
    named_section (decl, ((void *)0), reloc);
  else
    targetm.asm_out.select_section (decl, reloc, ((decl)->decl.u1.a.align));
}
void
mergeable_string_section (tree decl ,
     unsigned long align ,
     unsigned int flags )
{
  if (1 && flag_merge_constants
      && ((enum tree_code) (decl)->common.code) == STRING_CST
      && ((enum tree_code) (((decl)->common.type))->common.code) == ARRAY_TYPE
      && align <= 256
      && ((decl)->string1.length) >= int_size_in_bytes (((decl)->common.type)))
    {
      enum machine_mode mode;
      unsigned int modesize;
      const char *str;
      int i, j, len, unit;
      char name[30];
      mode = ((((((decl)->common.type))->common.type))->type.mode);
      modesize = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
      if (modesize >= 8 && modesize <= 256
   && (modesize & (modesize - 1)) == 0)
 {
   if (align < modesize)
     align = modesize;
   str = ((decl)->string1.pointer);
   len = ((decl)->string1.length);
   unit = ((unsigned short) mode_size[mode]);
   for (i = 0; i < len; i += unit)
     {
       for (j = 0; j < unit; j++)
  if (str[i + j] != '\0')
    break;
       if (j == unit)
  break;
     }
   if (i == len - unit)
     {
       sprintf (name, ".rodata.str%d.%d", modesize / 8,
         (int) (align / 8));
       flags |= (modesize / 8) | 0x08000 | 0x10000;
       if (!i && modesize < align)
  {
    named_section_flags (name, flags);
    fprintf ((asm_out_file), "%s\n", "\t.subsection\t-1");
    return;
  }
       named_section_flags (name, flags);
       return;
     }
 }
    }
  readonly_data_section ();
}
void
mergeable_constant_section (enum machine_mode mode ,
       unsigned long align ,
       unsigned int flags )
{
  unsigned int modesize = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
  if (1 && flag_merge_constants
      && mode != VOIDmode
      && mode != BLKmode
      && modesize <= align
      && align >= 8
      && align <= 256
      && (align & (align - 1)) == 0)
    {
      char name[24];
      sprintf (name, ".rodata.cst%d", (int) (align / 8));
      flags |= (align / 8) | 0x08000;
      named_section_flags (name, flags);
      return;
    }
  readonly_data_section ();
}
static const char *
strip_reg_name (const char *name)
{
  if (name[0] == '%' || name[0] == '#')
    name++;
  return name;
}
int
decode_reg_name (const char *asmspec)
{
  if (asmspec != 0)
    {
      int i;
      asmspec = strip_reg_name (asmspec);
      for (i = strlen (asmspec) - 1; i >= 0; i--)
 if (! (_sch_istable[(asmspec[i]) & 0xff] & (unsigned short)(_sch_isdigit)))
   break;
      if (asmspec[0] != 0 && i < 0)
 {
   i = atoi (asmspec);
   if (i < 53 && i >= 0)
     return i;
   else
     return -2;
 }
      for (i = 0; i < 53; i++)
 if (reg_names[i][0]
     && ! strcmp (asmspec, strip_reg_name (reg_names[i])))
   return i;
      {
 static const struct { const char *const name; const int number; } table[]
   = { { "eax", 0 }, { "edx", 1 }, { "ecx", 2 }, { "ebx", 3 }, { "esi", 4 }, { "edi", 5 }, { "ebp", 6 }, { "esp", 7 }, { "rax", 0 }, { "rdx", 1 }, { "rcx", 2 }, { "rbx", 3 }, { "rsi", 4 }, { "rdi", 5 }, { "rbp", 6 }, { "rsp", 7 }, { "al", 0 }, { "dl", 1 }, { "cl", 2 }, { "bl", 3 }, { "ah", 0 }, { "dh", 1 }, { "ch", 2 }, { "bh", 3 }, { "mm0", 8}, { "mm1", 9}, { "mm2", 10}, { "mm3", 11}, { "mm4", 12}, { "mm5", 13}, { "mm6", 14}, { "mm7", 15} };
 for (i = 0; i < (int) (sizeof (table) / sizeof ((table)[0])); i++)
   if (! strcmp (asmspec, table[i].name))
     return table[i].number;
      }
      if (!strcmp (asmspec, "memory"))
 return -4;
      if (!strcmp (asmspec, "cc"))
 return -3;
      return -2;
    }
  return -1;
}
void
make_decl_rtl (tree decl, const char *asmspec)
{
  const char *name = 0;
  int reg_number;
  rtx x;
  if (((enum tree_code) (decl)->common.code) == PARM_DECL
      || ((enum tree_code) (decl)->common.code) == RESULT_DECL
      || (((enum tree_code) (decl)->common.code) == VAR_DECL
   && !((decl)->common.static_flag)
   && !((decl)->common.public_flag)
   && !((decl)->decl.external_flag)
   && !((decl)->decl.regdecl_flag)))
    abort ();
  else if (((enum tree_code) (decl)->common.code) == TYPE_DECL
    || ((enum tree_code) (decl)->common.code) == LABEL_DECL)
    abort ();
  if (((decl)->decl.rtl != ((void *)0)))
    {
      if (((enum machine_mode) (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->mode) != ((decl)->decl.mode))
 set_decl_rtl (decl, adjust_address_1 (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)), ((decl)->decl.mode), 0, 0, 1))
                                 ;
      targetm.encode_section_info (decl, ((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)), 0);
      if (flag_mudflap && ((enum tree_code) (decl)->common.code) == VAR_DECL)
 mudflap_enqueue_decl (decl);
      return;
    }
  reg_number = decode_reg_name (asmspec);
  if (reg_number == -2)
    {
      char *starred = C_alloca(strlen (asmspec) + 2);
      starred[0] = '*';
      strcpy (starred + 1, asmspec);
      change_decl_assembler_name (decl, get_identifier (starred));
    }
  name = ((const char *) (decl_assembler_name (decl))->identifier.id.str);
  if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL && ((decl)->decl.regdecl_flag))
    {
      if (reg_number == -1)
 error ("%Jregister name not specified for '%D'", decl, decl);
      else if (reg_number < 0)
 error ("%Jinvalid register name for '%D'", decl, decl);
      else if (((((decl)->common.type))->type.mode) == BLKmode)
 error ("%Jdata type of '%D' isn't suitable for a register",
        decl, decl);
      else if (! ix86_hard_regno_mode_ok ((reg_number), (((((decl)->common.type))->type.mode))))
 error ("%Jregister specified for '%D' isn't suitable for data type",
               decl, decl);
      else
 {
   int nregs;
   if (((decl)->decl.initial) != 0 && ((decl)->common.static_flag))
     {
       ((decl)->decl.initial) = 0;
       error ("global register variable has initial value");
     }
   if (((decl)->common.volatile_flag))
     warning ("volatile register variables don't work as you might wish");
   set_decl_rtl (decl, gen_rtx_fmt_i00 (REG, (((decl)->decl.mode)), (reg_number)));
   (((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[1]).rtuint) = reg_number;
   (((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl))))->volatil) = 1;
   if (((decl)->common.static_flag))
     {
       nregs = hard_regno_nregs[reg_number][((decl)->decl.mode)];
       while (nregs > 0)
  globalize_reg (reg_number + --nregs);
     }
   return;
 }
    }
  if (reg_number >= 0 || reg_number == -3)
    error ("%Jregister name given for non-register variable '%D'", decl, decl);
  if (((enum tree_code) (decl)->common.code) == VAR_DECL
      && ((decl)->decl.section_name) != (tree) ((void *)0)
      && ((decl)->decl.initial) == (tree) ((void *)0)
      && ((decl)->decl.common_flag))
    ((decl)->decl.common_flag) = 0;
  if (((enum tree_code) (decl)->common.code) == VAR_DECL && ((decl)->decl.weak_flag))
    ((decl)->decl.common_flag) = 0;
  x = gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (name));
  (((x))->return_val) = ((decl)->decl.weak_flag);
  ((((x))->u.fld[2]).rttree) = decl;
  x = gen_rtx_MEM (((decl)->decl.mode), x);
  if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL)
    set_mem_attributes (x, decl, 1);
  set_decl_rtl (decl, x);
  targetm.encode_section_info (decl, ((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)), 1);
  if (flag_mudflap && ((enum tree_code) (decl)->common.code) == VAR_DECL)
    mudflap_enqueue_decl (decl);
}
void
make_var_volatile (tree var)
{
  if (!(((enum rtx_code) (((var)->decl.rtl ? (var)->decl.rtl : (make_decl_rtl (var, ((void *)0)), (var)->decl.rtl)))->code) == MEM))
    abort ();
  (((((var)->decl.rtl ? (var)->decl.rtl : (make_decl_rtl (var, ((void *)0)), (var)->decl.rtl))))->volatil) = 1;
}
void
assemble_asm (tree string1)
{
  app_enable ();
  if (((enum tree_code) (string1)->common.code) == ADDR_EXPR)
    string1 = ((string1)->exp.operands[0]);
  fprintf (asm_out_file, "\t%s\n", ((string1)->string1.pointer));
}
void
default_stabs_asm_out_destructor (rtx symbol, int priority )
{
  fprintf (asm_out_file, "%s\"___DTOR_LIST__\",22,0,0,", "\t.stabs\t");
  assemble_name (asm_out_file, (((symbol)->u.fld[0]).rtstr));
  fputc_unlocked ('\n', asm_out_file);
}
void
default_named_section_asm_out_destructor (rtx symbol, int priority)
{
  const char *section = ".dtors";
  char buf[16];
  if (priority != 65535)
    {
      sprintf (buf, ".dtors.%.5u",
        65535 - priority);
      section = buf;
    }
  named_section_flags (section, 0x00200);
  assemble_align ((8 * (0 ? 8 : 4)));
  assemble_integer (symbol, (8 * (0 ? 8 : 4)) / 8, (8 * (0 ? 8 : 4)), 1);
}
void
default_stabs_asm_out_constructor (rtx symbol, int priority )
{
  fprintf (asm_out_file, "%s\"___CTOR_LIST__\",22,0,0,", "\t.stabs\t");
  assemble_name (asm_out_file, (((symbol)->u.fld[0]).rtstr));
  fputc_unlocked ('\n', asm_out_file);
}
void
default_named_section_asm_out_constructor (rtx symbol, int priority)
{
  const char *section = ".ctors";
  char buf[16];
  if (priority != 65535)
    {
      sprintf (buf, ".ctors.%.5u",
        65535 - priority);
      section = buf;
    }
  named_section_flags (section, 0x00200);
  assemble_align ((8 * (0 ? 8 : 4)));
  assemble_integer (symbol, (8 * (0 ? 8 : 4)) / 8, (8 * (0 ? 8 : 4)), 1);
}
void
notice_global_symbol (tree decl)
{
  const char **type = &first_global_object_name;
  if (first_global_object_name
      || !((decl)->common.public_flag) || ((decl)->decl.external_flag)
      || !((decl)->decl.name)
      || (((enum tree_code) (decl)->common.code) != FUNCTION_DECL
   && (((enum tree_code) (decl)->common.code) != VAR_DECL
       || (((decl)->decl.common_flag)
    && (((decl)->decl.initial) == 0
        || ((decl)->decl.initial) == global_trees[TI_ERROR_MARK]))))
      || !(((enum rtx_code) (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->code) == MEM))
    return;
  if (((decl)->decl.weak_flag) || ((decl)->decl.transparent_union))
    type = &weak_global_object_name;
  if (!*type)
    {
      const char *p;
      char *name;
      rtx decl_rtl = ((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl));
      p = targetm.strip_name_encoding (((((((decl_rtl)->u.fld[0]).rtx1))->u.fld[0]).rtstr));
      name = xstrdup (p);
      *type = name;
    }
}
void
assemble_start_function (tree decl, const char *fnname)
{
  int align;
  unlikely_section_label_printed = 0;
  app_disable ();
  if (1)
    output_constant_pool (fnname, decl);
  resolve_unique_section (decl, 0, flag_function_sections);
  function_section (decl);
  align = floor_log2_wide ((unsigned long) (8 / 8));
  if (align < force_align_functions_log)
    align = force_align_functions_log;
  if (align > 0)
    {
      if ((align)!=0) fprintf ((asm_out_file), "\t.align %d\n", 1<<(align));
    }
  if (align_functions_log > align
      && cfun->function_frequency != FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
    {
      do { if ((align_functions_log) != 0) { if ((align_functions - 1) == 0) fprintf ((asm_out_file), "\t.p2align %d\n", (align_functions_log)); else fprintf ((asm_out_file), "\t.p2align %d,,%d\n", (align_functions_log), (align_functions - 1)); } } while (0)
                                              ;
    }
  (*debug_hooks->begin_function) (decl);
  if (((decl)->common.public_flag))
    {
      notice_global_symbol (decl);
      globalize_decl (decl);
      maybe_assemble_visibility (decl);
    }
  do { do { fputs_unlocked ("\t.type\t", asm_out_file); assemble_name (asm_out_file, fnname); fputs_unlocked (", ", asm_out_file); fprintf (asm_out_file, "@%s", "function"); putc_unlocked ('\n', asm_out_file); } while (0); ; do { assemble_name ((asm_out_file), (fnname)); fputs_unlocked (":\n", (asm_out_file)); } while (0); } while (0);
}
void
assemble_end_function (tree decl, const char *fnname)
{
  do { if (!flag_inhibit_size_directive) do { fputs_unlocked ("\t.size\t", asm_out_file); assemble_name (asm_out_file, fnname); fputs_unlocked (", .-", asm_out_file); assemble_name (asm_out_file, fnname); putc_unlocked ('\n', asm_out_file); } while (0); } while (0);
  if (! 1)
    {
      output_constant_pool (fnname, decl);
      function_section (decl);
    }
}
void
assemble_zeros (unsigned long size)
{
  if (flag_syntax_only)
    return;
  if ((1 && in_text_section ())
      || (1 && in_unlikely_text_section ()))
    {
      unsigned long i;
      for (i = 0; i < size; i++)
 assemble_integer ((const_int_rtx[64]), 1, 8, 1);
    }
  else
    if (size > 0)
      fprintf ((asm_out_file), "%s%lu\n", "\t.zero\t", (size));
}
void
assemble_align (int align)
{
  if (align > 8)
    {
      if ((floor_log2_wide ((unsigned long) (align / 8)))!=0) fprintf ((asm_out_file), "\t.align %d\n", 1<<(floor_log2_wide ((unsigned long) (align / 8))));
    }
}
void
assemble_string (const char *p, int size)
{
  int pos = 0;
  int maximum = 2000;
  while (pos < size)
    {
      int thissize = size - pos;
      if (thissize > maximum)
 thissize = maximum;
      do { register const unsigned char *_ascii_bytes = (const unsigned char *) (p); register const unsigned char *limit = _ascii_bytes + (thissize); register unsigned bytes_in_chunk = 0; for (; _ascii_bytes < limit; _ascii_bytes++) { register const unsigned char *p; if (bytes_in_chunk >= 60) { fprintf ((asm_out_file), "\"\n"); bytes_in_chunk = 0; } for (p = _ascii_bytes; p < limit && *p != '\0'; p++) continue; if (p < limit && (p - _ascii_bytes) <= (long)((unsigned) 256)) { if (bytes_in_chunk > 0) { fprintf ((asm_out_file), "\"\n"); bytes_in_chunk = 0; } do { register const unsigned char *_limited_str = (const unsigned char *) (_ascii_bytes); register unsigned ch; fprintf (((asm_out_file)), "%s\"", "\t.string1\t"); for (; (ch = *_limited_str); _limited_str++) { register int escape; switch (escape = "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"[ch]) { case 0: putc_unlocked (ch, ((asm_out_file))); break; case 1: fprintf (((asm_out_file)), "\\%03o", ch); break; default: putc_unlocked ('\\', ((asm_out_file))); putc_unlocked (escape, ((asm_out_file))); break; } } fprintf (((asm_out_file)), "\"\n"); } while (0); _ascii_bytes = p; } else { register int escape; register unsigned ch; if (bytes_in_chunk == 0) fprintf ((asm_out_file), "%s\"", "\t.ascii\t"); switch (escape = "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"[ch = *_ascii_bytes]) { case 0: putc_unlocked (ch, (asm_out_file)); bytes_in_chunk++; break; case 1: fprintf ((asm_out_file), "\\%03o", ch); bytes_in_chunk += 4; break; default: putc_unlocked ('\\', (asm_out_file)); putc_unlocked (escape, (asm_out_file)); bytes_in_chunk += 2; break; } } } if (bytes_in_chunk > 0) fprintf ((asm_out_file), "\"\n"); } while (0);
      pos += thissize;
      p += thissize;
    }
}
static unsigned char
asm_emit_uninitialised (tree decl, const char *name,
   unsigned long size ,
   unsigned long rounded )
{
  enum
  {
    asm_dest_common,
    asm_dest_bss,
    asm_dest_local
  }
  destination = asm_dest_local;
  if (((decl)->common.public_flag))
    {
      if (!((decl)->decl.common_flag))
 destination = asm_dest_bss;
      else
 destination = asm_dest_common;
    }
  if (destination == asm_dest_bss)
    globalize_decl (decl);
  resolve_unique_section (decl, 0, flag_data_sections);
  if (flag_shared_data)
    {
      switch (destination)
 {
 default:
   break;
 }
    }
  switch (destination)
    {
    case asm_dest_bss:
      asm_output_aligned_bss (asm_out_file, decl, name, size, ((decl)->decl.u1.a.align));
      break;
    case asm_dest_common:
      do { fprintf ((asm_out_file), "%s", "\t.comm\t"); assemble_name ((asm_out_file), (name)); fprintf ((asm_out_file), ",%lu,%u\n", (size), (((decl)->decl.u1.a.align)) / 8); } while (0);
      break;
    case asm_dest_local:
      do { fprintf ((asm_out_file), "%s", "\t.local\t"); assemble_name ((asm_out_file), (name)); fprintf ((asm_out_file), "\n"); do { fprintf ((asm_out_file), "%s", "\t.comm\t"); assemble_name ((asm_out_file), (name)); fprintf ((asm_out_file), ",%lu,%u\n", (size), (((decl)->decl.u1.a.align)) / 8); } while (0); } while (0);
      break;
    default:
      abort ();
    }
  return 1;
}
void
assemble_variable (tree decl, int top_level ,
     int at_end , int dont_output_data)
{
  const char *name;
  unsigned int align;
  int reloc = 0;
  rtx decl_rtl;
  if (lang_hooks.decls.prepare_assemble_variable)
    lang_hooks.decls.prepare_assemble_variable (decl);
  last_assemble_variable_decl = 0;
  if (((decl)->decl.external_flag))
    return;
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
    return;
  if (((decl)->decl.rtl != ((void *)0)) && (((enum rtx_code) (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->code) == REG))
    {
      ((decl)->common.asm_written_flag) = 1;
      return;
    }
  if (((decl)->decl.size) == 0)
    layout_decl (decl, 0);
  if (!dont_output_data && ((decl)->decl.size) == 0)
    {
      error ("%Jstorage size of `%D' isn't known", decl, decl);
      ((decl)->common.asm_written_flag) = 1;
      return;
    }
  if (((decl)->common.asm_written_flag))
    return;
  decl_rtl = ((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl));
  ((decl)->common.asm_written_flag) = 1;
  if (flag_syntax_only)
    return;
  app_disable ();
  if (! dont_output_data
      && ! host_integerp (((decl)->decl.size_unit), 1))
    {
      error ("%Jsize of variable '%D' is too large", decl, decl);
      return;
    }
  name = ((((((decl_rtl)->u.fld[0]).rtx1))->u.fld[0]).rtstr);
  if (((decl)->common.public_flag) && ((decl)->decl.name))
    notice_global_symbol (decl);
  align = ((decl)->decl.u1.a.align);
  if (dont_output_data && ((decl)->decl.size) == 0
      && ((enum tree_code) (((decl)->common.type))->common.code) == ARRAY_TYPE)
    align = ((align) > (((((((decl)->common.type))->common.type))->type.align)) ? (align) : (((((((decl)->common.type))->common.type))->type.align)));
  if (align > (32768 * 8))
    {
      warning ("%Jalignment of '%D' is greater than maximum object file alignment.  Using %d", decl, decl,
        (32768 * 8)/8);
      align = (32768 * 8);
    }
  if (! ((decl)->decl.user_align))
    {
      align = ix86_data_alignment ((((decl)->common.type)), (align));
      if (((decl)->decl.initial) != 0 && ((decl)->decl.initial) != global_trees[TI_ERROR_MARK])
 align = ix86_constant_alignment ((((decl)->decl.initial)), (align));
    }
  ((decl)->decl.u1.a.align) = align;
  set_mem_align (decl_rtl, align);
  if (((decl)->common.public_flag))
    maybe_assemble_visibility (decl);
  if (((decl)->decl.initial) == global_trees[TI_ERROR_MARK])
    reloc = contains_pointers_p (((decl)->common.type)) ? 3 : 0;
  else if (((decl)->decl.initial))
    {
      reloc = compute_reloc_for_constant (((decl)->decl.initial));
      output_addressed_constants (((decl)->decl.initial));
    }
  resolve_unique_section (decl, reloc, flag_data_sections);
  if (((decl)->decl.section_name) || dont_output_data)
    ;
  else if (((decl)->decl.thread_local_flag))
    {
      if (((decl)->decl.common_flag))
 sorry ("thread-local COMMON data not implemented");
    }
  else if (((decl)->decl.initial) == 0
    || ((decl)->decl.initial) == global_trees[TI_ERROR_MARK]
    || (flag_zero_initialized_in_bss
        && !((decl)->common.readonly_flag)
        && initializer_zerop (((decl)->decl.initial))))
    {
      unsigned long size = tree_low_cst (((decl)->decl.size_unit), 1);
      unsigned long rounded = size;
      if (size == 0)
 rounded = 1;
      rounded += (128 / 8) - 1;
      rounded = (rounded / (128 / 8)
   * (128 / 8));
      if (asm_emit_uninitialised (decl, name, size, rounded))
 return;
    }
  if (((decl)->common.public_flag) && ((decl)->decl.name))
    globalize_decl (decl);
  variable_section (decl, reloc);
  if (in_text_section () || in_unlikely_text_section ())
    ((decl)->decl.bit_field_flag) = 1;
  if (align > 8)
    {
      if ((floor_log2_wide ((unsigned long) (((decl)->decl.u1.a.align) / 8)))!=0) fprintf ((asm_out_file), "\t.align %d\n", 1<<(floor_log2_wide ((unsigned long) (((decl)->decl.u1.a.align) / 8))))
                                                  ;
    }
  last_assemble_variable_decl = decl;
  do { long size; do { fputs_unlocked ("\t.type\t", asm_out_file); assemble_name (asm_out_file, name); fputs_unlocked (", ", asm_out_file); fprintf (asm_out_file, "@%s", "object"); putc_unlocked ('\n', asm_out_file); } while (0); size_directive_output = 0; if (!flag_inhibit_size_directive && (decl) && ((decl)->decl.size)) { size_directive_output = 1; size = int_size_in_bytes (((decl)->common.type)); do { long size_ = (size); fputs_unlocked ("\t.size\t", asm_out_file); assemble_name (asm_out_file, name); fprintf (asm_out_file, ", %ld\n", size_); } while (0); } do { assemble_name ((asm_out_file), (name)); fputs_unlocked (":\n", (asm_out_file)); } while (0); } while (0);
  if (!dont_output_data)
    {
      if (((decl)->decl.initial) && ((decl)->decl.initial) != global_trees[TI_ERROR_MARK])
 output_constant (((decl)->decl.initial),
    tree_low_cst (((decl)->decl.size_unit), 1),
    align);
      else
 assemble_zeros (tree_low_cst (((decl)->decl.size_unit), 1));
    }
}
static int
contains_pointers_p (tree type)
{
  switch (((enum tree_code) (type)->common.code))
    {
    case POINTER_TYPE:
    case REFERENCE_TYPE:
    case OFFSET_TYPE:
      return 1;
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      {
 tree fields;
 for (fields = ((type)->type.value1s); fields; fields = ((fields)->common.chain))
   if (((enum tree_code) (fields)->common.code) == FIELD_DECL
       && contains_pointers_p (((fields)->common.type)))
     return 1;
 return 0;
      }
    case ARRAY_TYPE:
      return contains_pointers_p (((type)->common.type));
    default:
      return 0;
    }
}
void
assemble_external (tree decl )
{
  if (!asm_out_file)
    abort ();
}
void
assemble_external_libcall (rtx fun)
{
  if (! (((fun))->used))
    {
      (((fun))->used) = 1;
      targetm.asm_out.external_libcall (fun);
    }
}
void
assemble_label (const char *name)
{
  do { assemble_name ((asm_out_file), (name)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
}
void
mark_referenced (tree id)
{
  ((id)->common.static_flag) = 1;
}
void
mark_decl_referenced (tree decl)
{
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
    cgraph_mark_needed_node (cgraph_node (decl));
  else if (((enum tree_code) (decl)->common.code) == VAR_DECL)
    cgraph_varpool_mark_needed_node (cgraph_varpool_node (decl));
}
void
assemble_name (FILE *file, const char *name)
{
  const char *real_name;
  tree id;
  real_name = targetm.strip_name_encoding (name);
  id = maybe_get_identifier (real_name);
  if (id)
    mark_referenced (id);
  if (name[0] == '*')
    fputs_unlocked (&name[1], file);
  else
    asm_fprintf ((file), "%U%s", (name));
}
rtx
assemble_static_space (unsigned long size)
{
  char name[12];
  const char *namestring;
  rtx x;
  do { sprintf (name, "*.%s%u", "LF", (unsigned) (const_labelno)); } while (0);
  ++const_labelno;
  namestring = ggc_alloc_string((name), -1);
  x = gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (namestring));
  ((((x))->u.fld[1]).rtint) = (1 << 1);
  do { fprintf ((asm_out_file), "%s", "\t.local\t"); assemble_name ((asm_out_file), (name)); fprintf ((asm_out_file), "\n"); do { fprintf ((asm_out_file), "%s", "\t.comm\t"); assemble_name ((asm_out_file), (name)); fprintf ((asm_out_file), ",%lu,%u\n", (size), (128) / 8); } while (0); } while (0);
  return x;
}
static rtx initial_trampoline;
static unsigned
min_align (unsigned int a, unsigned int b)
{
  return (a | b) & -(a | b);
}
const char *
integer_asm_op (int size, int aligned_p)
{
  struct asm_int_op *ops;
  if (aligned_p)
    ops = &targetm.asm_out.aligned_op;
  else
    ops = &targetm.asm_out.unaligned_op;
  switch (size)
    {
    case 1:
      return targetm.asm_out.byte_op;
    case 2:
      return ops->hi;
    case 4:
      return ops->si;
    case 8:
      return ops->di;
    case 16:
      return ops->ti;
    default:
      return ((void *)0);
    }
}
void
assemble_integer_with_op (const char *op, rtx x)
{
  fputs_unlocked (op, asm_out_file);
  output_addr_const (asm_out_file, x);
  fputc_unlocked ('\n', asm_out_file);
}
unsigned char
default_assemble_integer (rtx x ,
     unsigned int size ,
     int aligned_p )
{
  const char *op = integer_asm_op (size, aligned_p);
  return op && (assemble_integer_with_op (op, x), 1);
}
unsigned char
assemble_integer (rtx x, unsigned int size, unsigned int align, int force)
{
  int aligned_p;
  aligned_p = (align >= ((size * 8) < (128) ? (size * 8) : (128)));
  if (targetm.asm_out.integer (x, size, aligned_p))
    return 1;
  if (size > 1)
    {
      enum machine_mode omode, imode;
      unsigned int subalign;
      unsigned int subsize, i;
      subsize = size > (0 ? 8 : 4)? (0 ? 8 : 4) : 1;
      subalign = ((align) < (subsize * 8) ? (align) : (subsize * 8));
      omode = mode_for_size (subsize * 8, MODE_INT, 0);
      imode = mode_for_size (size * 8, MODE_INT, 0);
      for (i = 0; i < size; i += subsize)
 {
   rtx partial = simplify_subreg (omode, x, imode, i);
   if (!partial || !assemble_integer (partial, subsize, subalign, 0))
     break;
 }
      if (i == size)
 return 1;
      if (i > 0)
 abort ();
    }
  if (force)
    abort ();
  return 0;
}
void
assemble_real (struct real_value d, enum machine_mode mode, unsigned int align)
{
  long data[4];
  int i;
  int bitsize, nelts, nunits, units_per;
  nunits = ((unsigned short) mode_size[mode]);
  bitsize = nunits * 8;
  nelts = (((bitsize) + (32) - 1) / (32));
  units_per = 32 / 8;
  real_to_target (data, &d, mode);
  assemble_integer (gen_rtx_CONST_INT (VOIDmode, (long) (data[0])), ((nunits) < (units_per) ? (nunits) : (units_per)), align, 1);
  nunits -= units_per;
  align = min_align (align, 32);
  for (i = 1; i < nelts; i++)
    {
      assemble_integer (gen_rtx_CONST_INT (VOIDmode, (long) (data[i])), ((nunits) < (units_per) ? (nunits) : (units_per)), align, 1);
      nunits -= units_per;
    }
}
struct addr_const
{
  rtx base;
  long offset;
};
static void
decode_addr_const (tree exp, struct addr_const *value)
{
  tree target = ((exp)->exp.operands[0]);
  int offset = 0;
  rtx x;
  while (1)
    {
      if (((enum tree_code) (target)->common.code) == COMPONENT_REF
   && host_integerp (byte_position (((target)->exp.operands[1])), 0))
 {
   offset += int_byte_position (((target)->exp.operands[1]));
   target = ((target)->exp.operands[0]);
 }
      else if (((enum tree_code) (target)->common.code) == ARRAY_REF
        || ((enum tree_code) (target)->common.code) == ARRAY_RANGE_REF)
 {
   offset += (tree_low_cst (((((target)->common.type))->type.size_unit), 1)
       * tree_low_cst (((target)->exp.operands[1]), 0));
   target = ((target)->exp.operands[0]);
 }
      else
 break;
    }
  switch (((enum tree_code) (target)->common.code))
    {
    case VAR_DECL:
    case FUNCTION_DECL:
      x = ((target)->decl.rtl ? (target)->decl.rtl : (make_decl_rtl (target, ((void *)0)), (target)->decl.rtl));
      break;
    case LABEL_DECL:
      x = gen_rtx_MEM (QImode,
         gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (force_label_rtx (target))));
      break;
    case REAL_CST:
    case STRING_CST:
    case COMPLEX_CST:
    case CONSTRUCTOR:
    case INTEGER_CST:
      x = output_constant_def (target, 1);
      break;
    default:
      abort ();
    }
  if (!(((enum rtx_code) (x)->code) == MEM))
    abort ();
  x = (((x)->u.fld[0]).rtx1);
  value1->base = x;
  value1->offset = offset;
}
struct constant_descriptor_tree
{
  rtx rtl;
  tree value1;
};
static
     htab_t const_desc_htab;
static struct constant_descriptor_tree * build_constant_desc (tree);
static void maybe_output_constant_def_contents (struct constant_descriptor_tree *, int);
static hashval_t
const_desc_hash (const void *ptr)
{
  return const_hash_1 (((struct constant_descriptor_tree *)ptr)->value1);
}
static hashval_t
const_hash_1 (const tree exp)
{
  const char *p;
  hashval_t hi;
  int len, i;
  enum tree_code code = ((enum tree_code) (exp)->common.code);
  switch (code)
    {
    case INTEGER_CST:
      p = (char *) &((exp)->int_cst.int_cst);
      len = sizeof ((exp)->int_cst.int_cst);
      break;
    case REAL_CST:
      return real_hash (((exp)->real_cst.real_cst_ptr));
    case STRING_CST:
      p = ((exp)->string1.pointer);
      len = ((exp)->string1.length);
      break;
    case COMPLEX_CST:
      return (const_hash_1 (((exp)->complex.real)) * 5
       + const_hash_1 (((exp)->complex.imag)));
    case CONSTRUCTOR:
      if (((enum tree_code) (((exp)->common.type))->common.code) == SET_TYPE)
 {
   char *tmp;
   len = int_size_in_bytes (((exp)->common.type));
   tmp = C_alloca(len);
   get_set_constructor_bytes (exp, (unsigned char *) tmp, len);
   p = tmp;
   break;
 }
      else
 {
   tree link;
   hi = 5 + int_size_in_bytes (((exp)->common.type));
   for (link = ((exp)->exp.operands[0]); link; link = ((link)->common.chain))
     if (((link)->list.value1))
       hi = hi * 603 + const_hash_1 (((link)->list.value1));
   return hi;
 }
    case ADDR_EXPR:
    case FDESC_EXPR:
      {
 struct addr_const value1;
 decode_addr_const (exp, &value1);
 if (((enum rtx_code) (value1.base)->code) == SYMBOL_REF)
   {
     hi = value1.offset;
     p = (((value1.base)->u.fld[0]).rtstr);
     for (i = 0; p[i] != 0; i++)
       hi = ((hi * 613) + (unsigned) (p[i]));
   }
 else if (((enum rtx_code) (value1.base)->code) == LABEL_REF)
   hi = value1.offset + ((((((value1.base)->u.fld[0]).rtx1))->u.fld[6]).rtint) * 13;
 else
   abort ();
      }
      return hi;
    case PLUS_EXPR:
    case MINUS_EXPR:
      return (const_hash_1 (((exp)->exp.operands[0])) * 9
       + const_hash_1 (((exp)->exp.operands[1])));
    case NOP_EXPR:
    case CONVERT_EXPR:
    case NON_LVALUE_EXPR:
      return const_hash_1 (((exp)->exp.operands[0])) * 7 + 2;
    default:
      return code;
    }
  hi = len;
  for (i = 0; i < len; i++)
    hi = ((hi * 613) + (unsigned) (p[i]));
  return hi;
}
static int
const_desc_eq (const void *p1, const void *p2)
{
  return compare_constant (((struct constant_descriptor_tree *)p1)->value1,
      ((struct constant_descriptor_tree *)p2)->value1);
}
static int
compare_constant (const tree t1, const tree t2)
{
  enum tree_code typecode;
  if (t1 == (tree) ((void *)0))
    return t2 == (tree) ((void *)0);
  if (t2 == (tree) ((void *)0))
    return 0;
  if (((enum tree_code) (t1)->common.code) != ((enum tree_code) (t2)->common.code))
    return 0;
  switch (((enum tree_code) (t1)->common.code))
    {
    case INTEGER_CST:
      if (((((t1)->common.type))->type.precision) != ((((t2)->common.type))->type.precision))
 return 0;
      return tree_int_cst_equal (t1, t2);
    case REAL_CST:
      if (((((t1)->common.type))->type.precision) != ((((t2)->common.type))->type.precision))
 return 0;
      return real_identical (&((*((t1)->real_cst.real_cst_ptr))), &((*((t2)->real_cst.real_cst_ptr))));
    case STRING_CST:
      if (((((t1)->common.type))->type.mode) != ((((t2)->common.type))->type.mode))
 return 0;
      return (((t1)->string1.length) == ((t2)->string1.length)
       && ! memcmp (((t1)->string1.pointer), ((t2)->string1.pointer),
    ((t1)->string1.length)));
    case COMPLEX_CST:
      return (compare_constant (((t1)->complex.real), ((t2)->complex.real))
       && compare_constant (((t1)->complex.imag), ((t2)->complex.imag)));
    case CONSTRUCTOR:
      typecode = ((enum tree_code) (((t1)->common.type))->common.code);
      if (typecode != ((enum tree_code) (((t2)->common.type))->common.code))
 return 0;
      if (typecode == SET_TYPE)
 {
   int len = int_size_in_bytes (((t2)->common.type));
   unsigned char *tmp1, *tmp2;
   if (int_size_in_bytes (((t1)->common.type)) != len)
     return 0;
   tmp1 = C_alloca(len);
   tmp2 = C_alloca(len);
   if (get_set_constructor_bytes (t1, tmp1, len) != (tree) ((void *)0))
     return 0;
   if (get_set_constructor_bytes (t2, tmp2, len) != (tree) ((void *)0))
     return 0;
   return memcmp (tmp1, tmp2, len) == 0;
 }
      else
 {
   tree l1, l2;
   if (typecode == ARRAY_TYPE)
     {
       long size_1 = int_size_in_bytes (((t1)->common.type));
       if (((((t1)->common.type))->type.mode) != ((((t2)->common.type))->type.mode)
    || size_1 == -1
    || size_1 != int_size_in_bytes (((t2)->common.type)))
  return 0;
     }
   else
     {
       if (((t1)->common.type) != ((t2)->common.type))
  return 0;
     }
   for (l1 = ((t1)->exp.operands[0]), l2 = ((t2)->exp.operands[0]);
        l1 && l2;
        l1 = ((l1)->common.chain), l2 = ((l2)->common.chain))
     {
       if (! compare_constant (((l1)->list.value1), ((l2)->list.value1)))
  return 0;
       if (typecode == ARRAY_TYPE)
  {
    if (! compare_constant (((l1)->list.purpose),
       ((l2)->list.purpose)))
      return 0;
  }
       else
  {
    if (((l1)->list.purpose) != ((l2)->list.purpose))
      return 0;
  }
     }
   return l1 == (tree) ((void *)0) && l2 == (tree) ((void *)0);
 }
    case ADDR_EXPR:
    case FDESC_EXPR:
      {
 struct addr_const value1, value2;
 decode_addr_const (t1, &value1);
 decode_addr_const (t2, &value2);
 return (value1.offset == value2.offset
  && strcmp ((((value1.base)->u.fld[0]).rtstr), (((value2.base)->u.fld[0]).rtstr)) == 0);
      }
    case PLUS_EXPR:
    case MINUS_EXPR:
    case RANGE_EXPR:
      return (compare_constant (((t1)->exp.operands[0]), ((t2)->exp.operands[0]))
       && compare_constant(((t1)->exp.operands[1]), ((t2)->exp.operands[1])));
    case NOP_EXPR:
    case CONVERT_EXPR:
    case NON_LVALUE_EXPR:
    case VIEW_CONVERT_EXPR:
      return compare_constant (((t1)->exp.operands[0]), ((t2)->exp.operands[0]));
    default:
      {
 tree nt1, nt2;
 nt1 = lang_hooks.expand_constant (t1);
 nt2 = lang_hooks.expand_constant (t2);
 if (nt1 != t1 || nt2 != t2)
   return compare_constant (nt1, nt2);
 else
   return 0;
      }
    }
  abort ();
}
static tree
copy_constant (tree exp)
{
  switch (((enum tree_code) (exp)->common.code))
    {
    case ADDR_EXPR:
      if (tree_code_type[(int) (((enum tree_code) (((exp)->exp.operands[0]))->common.code))] == 'c')
 return build1_stat (((enum tree_code) (exp)->common.code),((exp)->common.type),copy_constant (((exp)->exp.operands[0])) )
                                               ;
      else
 return copy_node_stat (exp );
    case INTEGER_CST:
    case REAL_CST:
    case STRING_CST:
      return copy_node_stat (exp );
    case COMPLEX_CST:
      return build_complex (((exp)->common.type),
       copy_constant (((exp)->complex.real)),
       copy_constant (((exp)->complex.imag)));
    case PLUS_EXPR:
    case MINUS_EXPR:
      return build (((enum tree_code) (exp)->common.code), ((exp)->common.type),
      copy_constant (((exp)->exp.operands[0])),
      copy_constant (((exp)->exp.operands[1])));
    case NOP_EXPR:
    case CONVERT_EXPR:
    case NON_LVALUE_EXPR:
    case VIEW_CONVERT_EXPR:
      return build1_stat (((enum tree_code) (exp)->common.code),((exp)->common.type),copy_constant (((exp)->exp.operands[0])) )
                                             ;
    case CONSTRUCTOR:
      {
 tree copy = copy_node_stat (exp );
 tree list = copy_list (((exp)->exp.operands[0]));
 tree tail;
 ((copy)->exp.operands[0]) = list;
 for (tail = list; tail; tail = ((tail)->common.chain))
   ((tail)->list.value1) = copy_constant (((tail)->list.value1));
 if (((enum tree_code) (((exp)->common.type))->common.code) == SET_TYPE)
   for (tail = list; tail; tail = ((tail)->common.chain))
     ((tail)->list.purpose) = copy_constant (((tail)->list.purpose));
 return copy;
      }
    default:
      {
 tree t;
 t = lang_hooks.expand_constant (exp);
 if (t != exp)
   return copy_constant (t);
 else
   abort ();
      }
    }
}
static struct constant_descriptor_tree *
build_constant_desc (tree exp)
{
  rtx symbol;
  rtx rtl;
  char label[256];
  int labelno;
  struct constant_descriptor_tree *desc;
  desc = ggc_alloc_stat (sizeof (*desc) );
  desc->value1 = copy_constant (exp);
  if (flag_mudflap && mf_marked_p (exp))
    mf_mark (desc->value1);
  labelno = const_labelno++;
  do { sprintf (label, "*.%s%u", "LC", (unsigned) (labelno)); } while (0);
  symbol = gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (ggc_alloc_string((label), -1)));
  ((((symbol))->u.fld[1]).rtint) = (1 << 1);
  ((((symbol))->u.fld[2]).rttree) = desc->value1;
  (((symbol))->frame_related) = 1;
  rtl = gen_rtx_MEM (((((exp)->common.type))->type.mode), symbol);
  set_mem_attributes (rtl, exp, 1);
  set_mem_alias_set (rtl, 0);
  set_mem_alias_set (rtl, const_alias_set);
  targetm.encode_section_info (exp, rtl, 1);
  desc->rtl = rtl;
  return desc;
}
rtx
output_constant_def (tree exp, int defer)
{
  struct constant_descriptor_tree *desc;
  struct constant_descriptor_tree key;
  void **loc;
  key.value1 = exp;
  loc = htab_find_slot (const_desc_htab, &key, INSERT);
  desc = *loc;
  if (desc == 0)
    {
      desc = build_constant_desc (exp);
      *loc = desc;
    }
  maybe_output_constant_def_contents (desc, defer);
  return desc->rtl;
}
static void
maybe_output_constant_def_contents (struct constant_descriptor_tree *desc,
        int defer)
{
  rtx symbol = (((desc->rtl)->u.fld[0]).rtx1);
  tree exp = desc->value1;
  if (flag_syntax_only)
    return;
  if (((exp)->common.asm_written_flag))
    return;
  if (defer)
    {
      if (cfun)
 (cfun->varasm->deferred_constants)++;
      return;
    }
  output_constant_def_contents (symbol);
}
static void
output_constant_def_contents (rtx symbol)
{
  tree exp = ((((symbol))->u.fld[2]).rttree);
  const char *label = (((symbol)->u.fld[0]).rtstr);
  long size;
  int reloc = compute_reloc_for_constant (exp);
  int align = ((((exp)->common.type))->type.align);
  align = ix86_constant_alignment ((exp), (align));
  output_addressed_constants (exp);
  ((exp)->common.asm_written_flag) = 1;
  if (((((enum tree_code) (exp)->common.code) == FUNCTION_DECL || ((enum tree_code) (exp)->common.code) == VAR_DECL) && ((exp)->decl.section_name) != (tree) ((void *)0)))
    named_section (exp, ((void *)0), reloc);
  else
    targetm.asm_out.select_section (exp, reloc, align);
  if (align > 8)
    {
      if ((floor_log2_wide ((unsigned long) (align / 8)))!=0) fprintf ((asm_out_file), "\t.align %d\n", 1<<(floor_log2_wide ((unsigned long) (align / 8))));
    }
  size = int_size_in_bytes (((exp)->common.type));
  if (((enum tree_code) (exp)->common.code) == STRING_CST)
    size = ((((exp)->string1.length)) > (size) ? (((exp)->string1.length)) : (size));
  do { assemble_name ((asm_out_file), (label)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
  output_constant (exp, size, align);
  if (flag_mudflap)
    mudflap_enqueue_constant (exp);
}
rtx
lookup_constant_def (tree exp)
{
  struct constant_descriptor_tree *desc;
  struct constant_descriptor_tree key;
  key.value1 = exp;
  desc = htab_find (const_desc_htab, &key);
  return (desc ? desc->rtl : (rtx) 0);
}
struct rtx_constant_pool
{
  struct constant_descriptor_rtx *first;
  struct constant_descriptor_rtx *last;
  htab_t const_rtx_htab;
  htab_t const_rtx_sym_htab;
  long offset;
};
struct constant_descriptor_rtx
{
  struct constant_descriptor_rtx *next;
  rtx mem;
  rtx sym;
  rtx constant;
  long offset;
  hashval_t hash;
  enum machine_mode mode;
  unsigned int align;
  int labelno;
  int mark;
};
static hashval_t
const_desc_rtx_hash (const void *ptr)
{
  const struct constant_descriptor_rtx *desc = ptr;
  return desc->hash;
}
static int
const_desc_rtx_eq (const void *a, const void *b)
{
  const struct constant_descriptor_rtx *x = a;
  const struct constant_descriptor_rtx *y = b;
  if (x->mode != y->mode)
    return 0;
  return rtx_equal_p (x->constant, y->constant);
}
static hashval_t
const_desc_rtx_sym_hash (const void *ptr)
{
  const struct constant_descriptor_rtx *desc = ptr;
  return htab_hash_string ((((desc->sym)->u.fld[0]).rtstr));
}
static int
const_desc_rtx_sym_eq (const void *a, const void *b)
{
  const struct constant_descriptor_rtx *x = a;
  const struct constant_descriptor_rtx *y = b;
  return (((x->sym)->u.fld[0]).rtstr) == (((y->sym)->u.fld[0]).rtstr);
}
static int
const_rtx_hash_1 (rtx *xp, void *data)
{
  unsigned long hwi;
  enum machine_mode mode;
  enum rtx_code code;
  hashval_t h, *hp;
  rtx x;
  x = *xp;
  code = ((enum rtx_code) (x)->code);
  mode = ((enum machine_mode) (x)->mode);
  h = (hashval_t) code * 1048573 + mode;
  switch (code)
    {
    case CONST_INT:
      hwi = ((x)->u.hwint[0]);
    fold_hwi:
      {
 const int shift = sizeof (hashval_t) * 8;
 const int n = sizeof (long) / sizeof (hashval_t);
 int i;
 h ^= (hashval_t) hwi;
 for (i = 1; i < n; ++i)
   {
     hwi >>= shift;
     h ^= (hashval_t) hwi;
   }
      }
      break;
    case CONST_DOUBLE:
      if (mode == VOIDmode)
 {
   hwi = ((x)->u.hwint[0]) ^ ((x)->u.hwint[1]);
   goto fold_hwi;
 }
      else
 h ^= real_hash (((struct real_value *)&((x)->u.hwint[0])));
      break;
    case SYMBOL_REF:
      h ^= htab_hash_string ((((x)->u.fld[0]).rtstr));
      break;
    case LABEL_REF:
      h = h * 251 + ((((((x)->u.fld[0]).rtx1))->u.fld[6]).rtint);
      break;
    case UNSPEC:
    case UNSPEC_VOLATILE:
      h = h * 251 + (((x)->u.fld[1]).rtint);
      break;
    default:
      break;
    }
  hp = data;
  *hp = *hp * 509 + h;
  return 0;
}
static hashval_t
const_rtx_hash (rtx x)
{
  hashval_t h = 0;
  for_each_rtx (&x, const_rtx_hash_1, &h);
  return h;
}
void
init_varasm_status (struct function *f)
{
  struct varasm_status *p;
  struct rtx_constant_pool *pool;
  p = ggc_alloc_stat (sizeof (struct varasm_status) );
  f->varasm = p;
  pool = ggc_alloc_stat (sizeof (struct rtx_constant_pool) );
  p->pool = pool;
  p->deferred_constants = 0;
  pool->const_rtx_htab = htab_create_alloc (31, const_desc_rtx_hash, const_desc_rtx_eq, ((void *)0), ggc_calloc, ((void *)0))
                               ;
  pool->const_rtx_sym_htab = htab_create_alloc (31, const_desc_rtx_sym_hash, const_desc_rtx_sym_eq, ((void *)0), ggc_calloc, ((void *)0))
                                       ;
  pool->first = pool->last = ((void *)0);
  pool->offset = 0;
}
rtx
simplify_subtraction (rtx x)
{
  rtx r = simplify_rtx (x);
  return r ? r : x;
}
rtx
force_const_mem (enum machine_mode mode, rtx x)
{
  struct constant_descriptor_rtx *desc, tmp;
  struct rtx_constant_pool *pool = cfun->varasm->pool;
  char label[256];
  rtx def, symbol;
  hashval_t hash;
  unsigned int align;
  void **slot;
  if (targetm.cannot_force_const_mem (x))
    return (rtx) 0;
  tmp.constant = x;
  tmp.mode = mode;
  hash = const_rtx_hash (x);
  slot = htab_find_slot_with_hash (pool->const_rtx_htab, &tmp, hash, INSERT);
  desc = *slot;
  if (desc)
    return copy_rtx (desc->mem);
  desc = ggc_alloc_stat (sizeof (*desc) );
  *slot = desc;
  align = get_mode_alignment (mode == VOIDmode ? word_mode : mode);
  {
    tree type = lang_hooks.types.type_for_mode (mode, 0);
    if (type != (tree) ((void *)0))
      align = ix86_constant_alignment ((make_tree (type, x)), (align));
  }
  pool->offset += (align / 8) - 1;
  pool->offset &= ~ ((align / 8) - 1);
  desc->next = ((void *)0);
  desc->constant = tmp.constant;
  desc->offset = pool->offset;
  desc->hash = hash;
  desc->mode = mode;
  desc->align = align;
  desc->labelno = const_labelno;
  desc->mark = 0;
  pool->offset += ((unsigned short) mode_size[mode]);
  if (pool->last)
    pool->last->next = desc;
  else
    pool->first = pool->last = desc;
  pool->last = desc;
  do { sprintf (label, "*.%s%u", "LC", (unsigned) (const_labelno)); } while (0);
  ++const_labelno;
  desc->sym = symbol = gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (ggc_alloc_string((label), -1)));
  ((((symbol))->u.fld[1]).rtint) = (1 << 1);
  (((symbol))->unchanging) = 1;
  (cfun->uses_const_pool) = 1;
  slot = htab_find_slot (pool->const_rtx_sym_htab, desc, INSERT);
  if (*slot)
    abort ();
  *slot = desc;
  desc->mem = def = gen_rtx_MEM (mode, symbol);
  set_mem_attributes (def, lang_hooks.types.type_for_mode (mode, 0), 1);
  (((def))->unchanging) = 1;
  if (((enum rtx_code) (x)->code) == LABEL_REF)
    ((((((x)->u.fld[0]).rtx1)))->in_struct) = 1;
  return copy_rtx (def);
}
static struct constant_descriptor_rtx *
find_pool_constant (struct rtx_constant_pool *pool, rtx sym)
{
  struct constant_descriptor_rtx tmp;
  tmp.sym = sym;
  return htab_find (pool->const_rtx_sym_htab, &tmp);
}
rtx
get_pool_constant (rtx addr)
{
  return find_pool_constant (cfun->varasm->pool, addr)->constant;
}
rtx
get_pool_constant_mark (rtx addr, unsigned char *pmarked)
{
  struct constant_descriptor_rtx *desc;
  desc = find_pool_constant (cfun->varasm->pool, addr);
  *pmarked = (desc->mark != 0);
  return desc->constant;
}
rtx
get_pool_constant_for_function (struct function *f, rtx addr)
{
  return find_pool_constant (f->varasm->pool, addr)->constant;
}
enum machine_mode
get_pool_mode (rtx addr)
{
  return find_pool_constant (cfun->varasm->pool, addr)->mode;
}
enum machine_mode
get_pool_mode_for_function (struct function *f, rtx addr)
{
  return find_pool_constant (f->varasm->pool, addr)->mode;
}
int
get_pool_offset (rtx addr)
{
  return find_pool_constant (cfun->varasm->pool, addr)->offset;
}
int
get_pool_size (void)
{
  return cfun->varasm->pool->offset;
}
static void
output_constant_pool_2 (enum machine_mode mode, rtx x, unsigned int align)
{
  switch (mode_class[mode])
    {
    case MODE_FLOAT:
      if (((enum rtx_code) (x)->code) != CONST_DOUBLE)
 abort ();
      else
 {
   struct real_value r;
   memcpy (&(r), &(((x))->u.hwint[0]), sizeof (struct real_value));
   assemble_real (r, mode, align);
 }
      break;
    case MODE_INT:
    case MODE_PARTIAL_INT:
      assemble_integer (x, ((unsigned short) mode_size[mode]), align, 1);
      break;
    case MODE_VECTOR_FLOAT:
    case MODE_VECTOR_INT:
      {
 int i, units;
        enum machine_mode submode = mode_inner[mode];
 unsigned int subalign = ((align) < (((unsigned short) (((unsigned short) mode_size[submode]) * 8))) ? (align) : (((unsigned short) (((unsigned short) mode_size[submode]) * 8))));
 if (((enum rtx_code) (x)->code) != CONST_VECTOR)
   abort ();
 units = (((((x)->u.fld[0]).rtvec1))->num_elem);
 for (i = 0; i < units; i++)
   {
     rtx elt = (((((x)->u.fld[0]).rtvec1))->elem[i]);
     output_constant_pool_2 (submode, elt, i ? subalign : align);
   }
      }
      break;
    default:
      abort ();
    }
}
static void
output_constant_pool_1 (struct constant_descriptor_rtx *desc)
{
  rtx x, tmp;
  if (!desc->mark)
    return;
  x = desc->constant;
  tmp = x;
  switch (((enum rtx_code) (x)->code))
    {
    case CONST:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) != PLUS
   || ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) != LABEL_REF)
 break;
      tmp = ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
    case LABEL_REF:
      tmp = (((x)->u.fld[0]).rtx1);
      if ((((tmp))->volatil)
   || (((enum rtx_code) (tmp)->code) == NOTE
       && (((tmp)->u.fld[5]).rtint) == NOTE_INSN_DELETED))
 {
   abort ();
   x = (const_int_rtx[64]);
 }
      break;
    default:
      break;
    }
  targetm.asm_out.select_rtx_section (desc->mode, x, desc->align);
  assemble_align (desc->align);
  targetm.asm_out.internal_label (asm_out_file, "LC", desc->labelno);
  output_constant_pool_2 (desc->mode, x, desc->align);
  if (desc->align > ((unsigned short) (((unsigned short) mode_size[desc->mode]) * 8))
      && in_section == in_named
      && get_named_section_flags (in_named_name) & 0x08000)
    assemble_align (desc->align);
  return;
}
static int
mark_constant (rtx *current_rtx, void *data)
{
  struct rtx_constant_pool *pool = data;
  rtx x = *current_rtx;
  if (x == (rtx) 0 || ((enum rtx_code) (x)->code) != SYMBOL_REF)
    return 0;
  if ((((x))->unchanging))
    {
      struct constant_descriptor_rtx *desc = find_pool_constant (pool, x);
      if (desc->mark == 0)
 {
   desc->mark = 1;
   for_each_rtx (&desc->constant, mark_constant, pool);
 }
    }
  else if ((((x))->frame_related))
    {
      tree exp = ((((x))->u.fld[2]).rttree);
      if (!((exp)->common.asm_written_flag))
 {
   (cfun->varasm->deferred_constants)--;
   output_constant_def_contents (x);
 }
    }
  return -1;
}
static void
mark_constants (struct rtx_constant_pool *pool, rtx insn)
{
  if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
    return;
  if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SEQUENCE)
    {
      rtx seq = (((insn)->u.fld[5]).rtx1);
      int i, n = (((((seq)->u.fld[0]).rtvec1))->num_elem);
      for (i = 0; i < n; ++i)
 {
   rtx subinsn = (((((seq)->u.fld[0]).rtvec1))->elem[i]);
   if (((((enum rtx_code) (subinsn)->code) == INSN) || (((enum rtx_code) (subinsn)->code) == JUMP_INSN) || (((enum rtx_code) (subinsn)->code) == CALL_INSN)))
     for_each_rtx (&(((subinsn)->u.fld[5]).rtx1), mark_constant, pool);
 }
    }
  else
    for_each_rtx (&(((insn)->u.fld[5]).rtx1), mark_constant, pool);
}
static void
mark_constant_pool (struct rtx_constant_pool *pool)
{
  rtx insn, link;
  if (pool->first == 0 && (cfun->varasm->deferred_constants) == 0)
    return;
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    mark_constants (pool, insn);
  for (link = (cfun->epilogue_delay_list);
       link;
       link = (((link)->u.fld[1]).rtx1))
    mark_constants (pool, (((link)->u.fld[0]).rtx1));
}
void
output_constant_pool (const char *fnname ,
        tree fndecl )
{
  struct rtx_constant_pool *pool = cfun->varasm->pool;
  struct constant_descriptor_rtx *desc;
  mark_constant_pool (pool);
  for (desc = pool->first; desc ; desc = desc->next)
    output_constant_pool_1 (desc);
}
int
compute_reloc_for_constant (tree exp)
{
  int reloc = 0, reloc2;
  tree tem;
  exp = lang_hooks.expand_constant (exp);
  switch (((enum tree_code) (exp)->common.code))
    {
    case ADDR_EXPR:
    case FDESC_EXPR:
      for (tem = ((exp)->exp.operands[0]); handled_component_p (tem);
    tem = ((tem)->exp.operands[0]))
 ;
      if (((tem)->common.public_flag))
 reloc |= 2;
      else
 reloc |= 1;
      break;
    case PLUS_EXPR:
      reloc = compute_reloc_for_constant (((exp)->exp.operands[0]));
      reloc |= compute_reloc_for_constant (((exp)->exp.operands[1]));
      break;
    case MINUS_EXPR:
      reloc = compute_reloc_for_constant (((exp)->exp.operands[0]));
      reloc2 = compute_reloc_for_constant (((exp)->exp.operands[1]));
      if (reloc == 1 && reloc2 == 1)
 reloc = 0;
      else
 reloc |= reloc2;
      break;
    case NOP_EXPR:
    case CONVERT_EXPR:
    case NON_LVALUE_EXPR:
      reloc = compute_reloc_for_constant (((exp)->exp.operands[0]));
      break;
    case CONSTRUCTOR:
      for (tem = ((exp)->exp.operands[0]); tem; tem = ((tem)->common.chain))
 if (((tem)->list.value1) != 0)
   reloc |= compute_reloc_for_constant (((tem)->list.value1));
      break;
    default:
      break;
    }
  return reloc;
}
static void
output_addressed_constants (tree exp)
{
  tree tem;
  exp = lang_hooks.expand_constant (exp);
  switch (((enum tree_code) (exp)->common.code))
    {
    case ADDR_EXPR:
    case FDESC_EXPR:
      for (tem = ((exp)->exp.operands[0]); handled_component_p (tem);
    tem = ((tem)->exp.operands[0]))
 ;
      if (tree_code_type[(int) (((enum tree_code) (tem)->common.code))] == 'c'
   || ((enum tree_code) (tem)->common.code) == CONSTRUCTOR)
 output_constant_def (tem, 0);
      break;
    case PLUS_EXPR:
    case MINUS_EXPR:
      output_addressed_constants (((exp)->exp.operands[1]));
    case NOP_EXPR:
    case CONVERT_EXPR:
    case NON_LVALUE_EXPR:
      output_addressed_constants (((exp)->exp.operands[0]));
      break;
    case CONSTRUCTOR:
      for (tem = ((exp)->exp.operands[0]); tem; tem = ((tem)->common.chain))
 if (((tem)->list.value1) != 0)
   output_addressed_constants (((tem)->list.value1));
      break;
    default:
      break;
    }
}
tree
initializer_constant_valid_p (tree value1, tree endtype)
{
  value1 = lang_hooks.expand_constant (value1);
  switch (((enum tree_code) (value1)->common.code))
    {
    case CONSTRUCTOR:
      if ((((enum tree_code) (((value1)->common.type))->common.code) == UNION_TYPE
    || ((enum tree_code) (((value1)->common.type))->common.code) == RECORD_TYPE)
   && ((value1)->common.constant_flag)
   && ((value1)->exp.operands[0]))
 {
   tree elt;
   unsigned char absolute = 1;
   for (elt = ((value1)->exp.operands[0]); elt; elt = ((elt)->common.chain))
     {
       tree reloc;
       value1 = ((elt)->list.value1);
       reloc = initializer_constant_valid_p (value1, ((value1)->common.type));
       if (!reloc)
  return (tree) ((void *)0);
       if (reloc != global_trees[TI_NULL_POINTER])
  absolute = 0;
     }
   return absolute ? global_trees[TI_NULL_POINTER] : global_trees[TI_ERROR_MARK];
 }
      return ((value1)->common.static_flag) ? global_trees[TI_NULL_POINTER] : (tree) ((void *)0);
    case INTEGER_CST:
    case VECTOR_CST:
    case REAL_CST:
    case STRING_CST:
    case COMPLEX_CST:
      return global_trees[TI_NULL_POINTER];
    case ADDR_EXPR:
    case FDESC_EXPR:
      return staticp (((value1)->exp.operands[0])) ? ((value1)->exp.operands[0]) : 0;
    case VIEW_CONVERT_EXPR:
    case NON_LVALUE_EXPR:
      return initializer_constant_valid_p (((value1)->exp.operands[0]), endtype);
    case CONVERT_EXPR:
    case NOP_EXPR:
      if ((((enum tree_code) (((value1)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((value1)->common.type))->common.code) == REFERENCE_TYPE)
   && (((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == REFERENCE_TYPE))
 return initializer_constant_valid_p (((value1)->exp.operands[0]), endtype);
      if (((((enum tree_code) (((value1)->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((value1)->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((value1)->common.type))->common.type))->common.code) == REAL_TYPE))
   && ((((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == REAL_TYPE) || (((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == COMPLEX_TYPE && ((enum tree_code) (((((((value1)->exp.operands[0]))->common.type))->common.type))->common.code) == REAL_TYPE)))
 return initializer_constant_valid_p (((value1)->exp.operands[0]), endtype);
      if ((((enum tree_code) (((value1)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((value1)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((value1)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((value1)->common.type))->common.code) == CHAR_TYPE)
   && (((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == CHAR_TYPE)
   && (((((value1)->common.type))->type.precision)
       == ((((((value1)->exp.operands[0]))->common.type))->type.precision)))
 return initializer_constant_valid_p (((value1)->exp.operands[0]), endtype);
      if ((((enum tree_code) (((value1)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((value1)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((value1)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((value1)->common.type))->common.code) == CHAR_TYPE)
   && (((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == CHAR_TYPE))
 {
   tree inner = initializer_constant_valid_p (((value1)->exp.operands[0]),
           endtype);
   if (inner == global_trees[TI_NULL_POINTER])
     return global_trees[TI_NULL_POINTER];
   break;
 }
      if ((((enum tree_code) (((value1)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((value1)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((value1)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((value1)->common.type))->common.code) == CHAR_TYPE)
   && (((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == REFERENCE_TYPE)
   && (((((value1)->common.type))->type.precision)
       >= ((((((value1)->exp.operands[0]))->common.type))->type.precision)))
 return initializer_constant_valid_p (((value1)->exp.operands[0]),
          endtype);
      if (((((enum tree_code) (((value1)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((value1)->common.type))->common.code) == REFERENCE_TYPE)
    || ((enum tree_code) (((value1)->common.type))->common.code) == OFFSET_TYPE)
   && (((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((((value1)->exp.operands[0]))->common.type))->common.code) == CHAR_TYPE))
 {
   if (integer_zerop (((value1)->exp.operands[0])))
     return global_trees[TI_NULL_POINTER];
   else if (((((value1)->common.type))->type.precision)
     <= ((((((value1)->exp.operands[0]))->common.type))->type.precision))
     return initializer_constant_valid_p (((value1)->exp.operands[0]),
       endtype);
 }
      if (((enum tree_code) (((value1)->common.type))->common.code) == RECORD_TYPE
   || ((enum tree_code) (((value1)->common.type))->common.code) == UNION_TYPE)
 return initializer_constant_valid_p (((value1)->exp.operands[0]),
          endtype);
      break;
    case PLUS_EXPR:
      if (! (((enum tree_code) (endtype)->common.code) == INTEGER_TYPE || ((enum tree_code) (endtype)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (endtype)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (endtype)->common.code) == CHAR_TYPE)
   || ((endtype)->type.precision) >= (8 * (0 ? 8 : 4)))
 {
   tree valid0 = initializer_constant_valid_p (((value1)->exp.operands[0]),
            endtype);
   tree valid1 = initializer_constant_valid_p (((value1)->exp.operands[1]),
            endtype);
   if (valid0 == global_trees[TI_NULL_POINTER])
     return valid1;
   if (valid1 == global_trees[TI_NULL_POINTER])
     return valid0;
 }
      break;
    case MINUS_EXPR:
      if (! (((enum tree_code) (endtype)->common.code) == INTEGER_TYPE || ((enum tree_code) (endtype)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (endtype)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (endtype)->common.code) == CHAR_TYPE)
   || ((endtype)->type.precision) >= (8 * (0 ? 8 : 4)))
 {
   tree valid0 = initializer_constant_valid_p (((value1)->exp.operands[0]),
            endtype);
   tree valid1 = initializer_constant_valid_p (((value1)->exp.operands[1]),
            endtype);
   if (valid1 == global_trees[TI_NULL_POINTER])
     return valid0;
   if (valid0 == valid1 && valid0 != 0)
     return global_trees[TI_NULL_POINTER];
   if (valid0 && ((enum tree_code) (valid0)->common.code) == STRING_CST &&
       valid1 && ((enum tree_code) (valid1)->common.code) == STRING_CST &&
       ((valid0)->string1.pointer) == ((valid1)->string1.pointer))
     return global_trees[TI_NULL_POINTER];
 }
      if ((((enum tree_code) (endtype)->common.code) == INTEGER_TYPE || ((enum tree_code) (endtype)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (endtype)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (endtype)->common.code) == CHAR_TYPE))
 {
   tree op0, op1;
   op0 = ((value1)->exp.operands[0]);
   op1 = ((value1)->exp.operands[1]);
   while (((enum tree_code) (op0)->common.code) == NOP_EXPR
   || ((enum tree_code) (op0)->common.code) == CONVERT_EXPR
   || ((enum tree_code) (op0)->common.code) == NON_LVALUE_EXPR)
     {
       tree inner = ((op0)->exp.operands[0]);
       if (inner == global_trees[TI_ERROR_MARK]
           || ! (mode_class[((((inner)->common.type))->type.mode)] == MODE_INT || mode_class[((((inner)->common.type))->type.mode)] == MODE_PARTIAL_INT || mode_class[((((inner)->common.type))->type.mode)] == MODE_COMPLEX_INT || mode_class[((((inner)->common.type))->type.mode)] == MODE_VECTOR_INT)
    || (((unsigned short) mode_size[((((op0)->common.type))->type.mode)])
        > ((unsigned short) mode_size[((((inner)->common.type))->type.mode)])))
  break;
       op0 = inner;
     }
   while (((enum tree_code) (op1)->common.code) == NOP_EXPR
   || ((enum tree_code) (op1)->common.code) == CONVERT_EXPR
   || ((enum tree_code) (op1)->common.code) == NON_LVALUE_EXPR)
     {
       tree inner = ((op1)->exp.operands[0]);
       if (inner == global_trees[TI_ERROR_MARK]
           || ! (mode_class[((((inner)->common.type))->type.mode)] == MODE_INT || mode_class[((((inner)->common.type))->type.mode)] == MODE_PARTIAL_INT || mode_class[((((inner)->common.type))->type.mode)] == MODE_COMPLEX_INT || mode_class[((((inner)->common.type))->type.mode)] == MODE_VECTOR_INT)
    || (((unsigned short) mode_size[((((op1)->common.type))->type.mode)])
        > ((unsigned short) mode_size[((((inner)->common.type))->type.mode)])))
  break;
       op1 = inner;
     }
   if (((enum tree_code) (op0)->common.code) == ADDR_EXPR
       && ((enum tree_code) (((op0)->exp.operands[0]))->common.code) == LABEL_DECL
       && ((enum tree_code) (op1)->common.code) == ADDR_EXPR
       && ((enum tree_code) (((op1)->exp.operands[0]))->common.code) == LABEL_DECL)
     return global_trees[TI_NULL_POINTER];
 }
      break;
    default:
      break;
    }
  return 0;
}
void
output_constant (tree exp, unsigned long size, unsigned int align)
{
  enum tree_code code;
  unsigned long thissize;
  exp = lang_hooks.expand_constant (exp);
  if (size == 0 || flag_syntax_only)
    return;
  while (((enum tree_code) (exp)->common.code) == NOP_EXPR || ((enum tree_code) (exp)->common.code) == CONVERT_EXPR
  || ((enum tree_code) (exp)->common.code) == NON_LVALUE_EXPR
  || ((enum tree_code) (exp)->common.code) == VIEW_CONVERT_EXPR)
    exp = ((exp)->exp.operands[0]);
  code = ((enum tree_code) (((exp)->common.type))->common.code);
  thissize = int_size_in_bytes (((exp)->common.type));
  if (((enum tree_code) (exp)->common.code) == CONSTRUCTOR && ((exp)->exp.operands[0]) == 0)
    {
      assemble_zeros (size);
      return;
    }
  if (((enum tree_code) (exp)->common.code) == FDESC_EXPR)
    {
      abort ();
      return;
    }
  switch (code)
    {
    case CHAR_TYPE:
    case BOOLEAN_TYPE:
    case INTEGER_TYPE:
    case ENUMERAL_TYPE:
    case POINTER_TYPE:
    case REFERENCE_TYPE:
    case OFFSET_TYPE:
      if (! assemble_integer (expand_expr (exp, (rtx) 0, VOIDmode,
        EXPAND_INITIALIZER),
         ((size) < (thissize) ? (size) : (thissize)), align, 0))
 error ("initializer for integer value is too complicated");
      break;
    case REAL_TYPE:
      if (((enum tree_code) (exp)->common.code) != REAL_CST)
 error ("initializer for floating value is not a floating constant");
      assemble_real ((*((exp)->real_cst.real_cst_ptr)), ((((exp)->common.type))->type.mode), align);
      break;
    case COMPLEX_TYPE:
      output_constant (((exp)->complex.real), thissize / 2, align);
      output_constant (((exp)->complex.imag), thissize / 2,
         min_align (align, 8 * (thissize / 2)));
      break;
    case ARRAY_TYPE:
    case VECTOR_TYPE:
      if (((enum tree_code) (exp)->common.code) == CONSTRUCTOR)
 {
   output_constructor (exp, size, align);
   return;
 }
      else if (((enum tree_code) (exp)->common.code) == STRING_CST)
 {
   thissize = (((unsigned long)((exp)->string1.length)) < (size) ? ((unsigned long)((exp)->string1.length)) : (size))
          ;
   assemble_string (((exp)->string1.pointer), thissize);
 }
      else if (((enum tree_code) (exp)->common.code) == VECTOR_CST)
 {
   int elt_size;
   tree link;
   unsigned int nalign;
   enum machine_mode inner;
   inner = mode_inner[((((exp)->common.type))->type.mode)];
   nalign = ((align) < (get_mode_alignment (inner)) ? (align) : (get_mode_alignment (inner)));
   elt_size = (mode_inner[((((exp)->common.type))->type.mode)] == VOIDmode ? ((unsigned short) mode_size[((((exp)->common.type))->type.mode)]) : ((unsigned short) mode_size[mode_inner[((((exp)->common.type))->type.mode)]]));
   link = ((exp)->vector.elements);
   output_constant (((link)->list.value1), elt_size, align);
   while ((link = ((link)->common.chain)) != ((void *)0))
     output_constant (((link)->list.value1), elt_size, nalign);
 }
      else
 abort ();
      break;
    case RECORD_TYPE:
    case UNION_TYPE:
      if (((enum tree_code) (exp)->common.code) == CONSTRUCTOR)
 output_constructor (exp, size, align);
      else
 abort ();
      return;
    case SET_TYPE:
      if (((enum tree_code) (exp)->common.code) == INTEGER_CST)
 assemble_integer (expand_expr (exp, (rtx) 0,
           VOIDmode, EXPAND_INITIALIZER),
     thissize, align, 1);
      else if (((enum tree_code) (exp)->common.code) == CONSTRUCTOR)
 {
   unsigned char *buffer = C_alloca(thissize);
   if (get_set_constructor_bytes (exp, buffer, thissize))
     abort ();
   assemble_string ((char *) buffer, thissize);
 }
      else
 error ("unknown set constructor type");
      return;
    case ERROR_MARK:
      return;
    default:
      abort ();
    }
  if (size > thissize)
    assemble_zeros (size - thissize);
}
static unsigned long
array_size_for_constructor (tree val)
{
  tree max_index, i;
  if (((enum tree_code) (val)->common.code) == STRING_CST)
    return ((val)->string1.length);
  max_index = (tree) ((void *)0);
  for (i = ((val)->exp.operands[0]); i; i = ((i)->common.chain))
    {
      tree index = ((i)->list.purpose);
      if (((enum tree_code) (index)->common.code) == RANGE_EXPR)
 index = ((index)->exp.operands[1]);
      if (max_index == (tree) ((void *)0) || tree_int_cst_lt (max_index, index))
 max_index = index;
    }
  if (max_index == (tree) ((void *)0))
    return 0;
  i = size_binop (MINUS_EXPR, convert (sizetype_tab[(int) SIZETYPE], max_index),
    convert (sizetype_tab[(int) SIZETYPE],
      ((((((val)->common.type))->type.value1s))->type.minval)));
  i = size_binop (PLUS_EXPR, i, convert (sizetype_tab[(int) SIZETYPE], global_trees[TI_INTEGER_ONE]));
  i = size_binop (MULT_EXPR, i, ((((((val)->common.type))->common.type))->type.size_unit));
  return tree_low_cst (i, 1);
}
static void
output_constructor (tree exp, unsigned long size,
      unsigned int align)
{
  tree type = ((exp)->common.type);
  tree link, field = 0;
  tree min_index = 0;
  long total_bytes = 0;
  int byte_buffer_in_use = 0;
  int byte = 0;
  if ((8 * 4) < 8)
    abort ();
  if (((enum tree_code) (type)->common.code) == RECORD_TYPE)
    field = ((type)->type.value1s);
  if (((enum tree_code) (type)->common.code) == ARRAY_TYPE
      && ((type)->type.value1s) != 0)
    min_index = ((((type)->type.value1s))->type.minval);
  for (link = ((exp)->exp.operands[0]);
       link;
       link = ((link)->common.chain),
       field = field ? ((field)->common.chain) : 0)
    {
      tree val = ((link)->list.value1);
      tree index = 0;
      if ((((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE
    || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE)
   && ((link)->list.purpose) != 0)
 field = ((link)->list.purpose);
      else if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
 index = ((link)->list.purpose);
      if (field && flag_verbose_asm)
 fprintf (asm_out_file, "%s %s:\n",
   "#",
   ((field)->decl.name)
   ? ((const char *) (((field)->decl.name))->identifier.id.str)
   : "<anonymous>");
      if (val != 0)
 while ((((enum tree_code) (val)->common.code) == NOP_EXPR || ((enum tree_code) (val)->common.code) == CONVERT_EXPR || ((enum tree_code) (val)->common.code) == NON_LVALUE_EXPR) && ((val)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((val)->common.type))->type.mode) == ((((((val)->exp.operands[0]))->common.type))->type.mode))) (val) = ((val)->exp.operands[0]);
      if (index && ((enum tree_code) (index)->common.code) == RANGE_EXPR)
 {
   unsigned long fieldsize
     = int_size_in_bytes (((type)->common.type));
   long lo_index = tree_low_cst (((index)->exp.operands[0]), 0);
   long hi_index = tree_low_cst (((index)->exp.operands[1]), 0);
   long index;
   unsigned int align2 = min_align (align, fieldsize * 8);
   for (index = lo_index; index <= hi_index; index++)
     {
       if (val == 0)
  assemble_zeros (fieldsize);
       else
  output_constant (val, fieldsize, align2);
       total_bytes += fieldsize;
     }
 }
      else if (field == 0 || !((field)->decl.bit_field_flag))
 {
   unsigned long fieldsize;
   long pos = field ? int_byte_position (field) : 0;
   unsigned int align2;
   if (index != 0)
     pos = (tree_low_cst (((((val)->common.type))->type.size_unit), 1)
     * (tree_low_cst (index, 0) - tree_low_cst (min_index, 0)));
   if (byte_buffer_in_use)
     {
       assemble_integer (gen_rtx_CONST_INT (VOIDmode, (long) (byte)), 1, 8, 1);
       total_bytes++;
       byte_buffer_in_use = 0;
     }
   if ((field != 0 || index != 0) && pos != total_bytes)
     {
       assemble_zeros (pos - total_bytes);
       total_bytes = pos;
     }
   align2 = min_align (align, 8 * pos);
   if (field)
     {
       fieldsize = 0;
       if (((enum tree_code) (((field)->common.type))->common.code) == ARRAY_TYPE
    && ((((field)->common.type))->type.value1s)
    && ! ((((((field)->common.type))->type.value1s))->type.maxval))
  {
    fieldsize = array_size_for_constructor (val);
    if (fieldsize != 0 && ((field)->common.chain) != (tree) ((void *)0))
      abort ();
  }
       else if (((field)->decl.size_unit))
  {
    if (host_integerp (((field)->decl.size_unit), 1))
      fieldsize = tree_low_cst (((field)->decl.size_unit), 1);
  }
     }
   else
     fieldsize = int_size_in_bytes (((type)->common.type));
   if (val == 0)
     assemble_zeros (fieldsize);
   else
     output_constant (val, fieldsize, align2);
   total_bytes += fieldsize;
 }
      else if (val != 0 && ((enum tree_code) (val)->common.code) != INTEGER_CST)
 error ("invalid initial value for member `%s'",
        ((const char *) (((field)->decl.name))->identifier.id.str));
      else
 {
   long next_offset = int_bit_position (field);
   long end_offset
     = (next_offset + tree_low_cst (((field)->decl.size), 1));
   if (val == 0)
     val = global_trees[TI_INTEGER_ZERO];
   if (next_offset / 8 != total_bytes)
     {
       if (byte_buffer_in_use)
  {
    assemble_integer (gen_rtx_CONST_INT (VOIDmode, (long) (byte)), 1, 8, 1);
    total_bytes++;
    byte_buffer_in_use = 0;
  }
       if (next_offset / 8 != total_bytes)
  {
    assemble_zeros (next_offset / 8 - total_bytes);
    total_bytes = next_offset / 8;
  }
     }
   if (! byte_buffer_in_use)
     byte = 0;
   while (next_offset < end_offset)
     {
       int this_time;
       int shift;
       long value1;
       long next_byte = next_offset / 8;
       long next_bit = next_offset % 8;
       while (next_byte != total_bytes)
  {
    assemble_integer (gen_rtx_CONST_INT (VOIDmode, (long) (byte)), 1, 8, 1);
    total_bytes++;
    byte = 0;
  }
       this_time = ((end_offset - next_offset) < (8 - next_bit) ? (end_offset - next_offset) : (8 - next_bit))
                                   ;
       if (0)
  {
    shift = end_offset - next_offset - this_time;
    if (shift < (8 * 4)
        && shift + this_time > (8 * 4))
      {
        this_time = shift + this_time - (8 * 4);
        shift = (8 * 4);
      }
    if (shift < (8 * 4))
      value1 = (((val)->int_cst.int_cst).low);
    else if (shift < 2 * (8 * 4))
      {
        value1 = (((val)->int_cst.int_cst).high);
        shift -= (8 * 4);
      }
    else
      abort ();
    byte |= (((value1 >> shift)
       & (((long) 2 << (this_time - 1)) - 1))
      << (8 - this_time - next_bit));
  }
       else
  {
    shift = next_offset - int_bit_position (field);
    if (shift < (8 * 4)
        && shift + this_time > (8 * 4))
      this_time = ((8 * 4) - shift);
    if (shift < (8 * 4))
      value1 = (((val)->int_cst.int_cst).low);
    else if (shift < 2 * (8 * 4))
      {
        value1 = (((val)->int_cst.int_cst).high);
        shift -= (8 * 4);
      }
    else
      abort ();
    byte |= (((value1 >> shift)
       & (((long) 2 << (this_time - 1)) - 1))
      << next_bit);
  }
       next_offset += this_time;
       byte_buffer_in_use = 1;
     }
 }
    }
  if (byte_buffer_in_use)
    {
      assemble_integer (gen_rtx_CONST_INT (VOIDmode, (long) (byte)), 1, 8, 1);
      total_bytes++;
    }
  if ((unsigned long)total_bytes < size)
    assemble_zeros (size - total_bytes);
}
static tree weak_decls;
static void
mark_weak (tree decl)
{
  ((decl)->decl.weak_flag) = 1;
  if (((decl)->decl.rtl != ((void *)0))
      && (((enum rtx_code) (((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->code) == MEM)
      && (((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1)
      && ((enum rtx_code) ((((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1))->code) == SYMBOL_REF)
    ((((((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1)))->return_val) = 1;
}
void
merge_weak (tree newdecl, tree olddecl)
{
  if (((newdecl)->decl.weak_flag) == ((olddecl)->decl.weak_flag))
    return;
  if (((newdecl)->decl.weak_flag))
    {
      tree wd;
      if (((olddecl)->common.asm_written_flag))
 error ("%Jweak declaration of '%D' must precede definition",
        newdecl, newdecl);
      else if (((olddecl)->common.used_flag)
        && ((decl_assembler_name (olddecl))->common.static_flag))
 warning ("%Jweak declaration of '%D' after first use results in unspecified behavior", newdecl, newdecl);
      if (1)
 {
   for (wd = weak_decls; wd; wd = ((wd)->common.chain))
     if (((wd)->list.value1) == newdecl)
       {
  ((wd)->list.value1) = olddecl;
  break;
       }
 }
      mark_weak (olddecl);
    }
  else
    mark_weak (newdecl);
}
void
declare_weak (tree decl)
{
  if (! ((decl)->common.public_flag))
    error ("%Jweak declaration of '%D' must be public", decl, decl);
  else if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL && ((decl)->common.asm_written_flag))
    error ("%Jweak declaration of '%D' must precede definition", decl, decl);
  else if (1)
    {
      if (! ((decl)->decl.weak_flag))
 weak_decls = tree_cons_stat (((void *)0),decl,weak_decls );
    }
  else
    warning ("%Jweak declaration of '%D' not supported", decl, decl);
  mark_weak (decl);
}
void
weak_finish (void)
{
  tree t;
  for (t = weak_decls; t; t = ((t)->common.chain))
    {
      tree decl = ((t)->list.value1);
      const char *const name = ((const char *) (decl_assembler_name (decl))->identifier.id.str);
      if (! ((decl)->common.used_flag))
 continue;
      do { fputs_unlocked ("\t.weak\t", (asm_out_file)); assemble_name ((asm_out_file), (name)); fputc_unlocked ('\n', (asm_out_file)); } while (0);
    }
}
static void
globalize_decl (tree decl)
{
  const char *name = ((((((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[0]).rtstr);
  if (((decl)->decl.weak_flag))
    {
      tree *p, t;
      do { fputs_unlocked ("\t.weak\t", (asm_out_file)); assemble_name ((asm_out_file), (name)); fputc_unlocked ('\n', (asm_out_file)); } while (0);
      for (p = &weak_decls; (t = *p) ; )
 {
   if (decl_assembler_name (decl) == decl_assembler_name (((t)->list.value1)))
     *p = ((t)->common.chain);
   else
     p = &((t)->common.chain);
 }
      return;
    }
  targetm.asm_out.globalize_label (asm_out_file, name);
}
void
assemble_alias (tree decl, tree target )
{
  const char *name;
  make_decl_rtl (decl, ((void *)0));
  name = ((const char *) (decl_assembler_name (decl))->identifier.id.str);
  if (((decl)->common.public_flag))
    {
      globalize_decl (decl);
      maybe_assemble_visibility (decl);
    }
  do { fprintf ((asm_out_file), "%s", "\t.set\t"); assemble_name (asm_out_file, name); fprintf (asm_out_file, ","); assemble_name (asm_out_file, ((const char *) (target)->identifier.id.str)); fprintf (asm_out_file, "\n"); } while (0);
  ((decl)->common.used_flag) = 1;
  ((decl)->common.asm_written_flag) = 1;
  ((decl_assembler_name (decl))->common.asm_written_flag) = 1;
}
void
default_assemble_visibility (tree decl, int vis)
{
  static const char * const visibility_types[] = {
    ((void *)0), "internal", "hidden", "protected"
  };
  const char *name, *type;
  name = (((const char *) (decl_assembler_name (decl))->identifier.id.str));
  type = visibility_types[vis];
  warning ("visibility attribute not supported in this configuration; ignored");
}
static void
maybe_assemble_visibility (tree decl)
{
  enum symbol_visibility vis = ((decl)->decl.visibility);
  if (vis != VISIBILITY_DEFAULT)
    targetm.asm_out.visibility (decl, vis);
}
int
supports_one_only (void)
{
  if (1)
    return 1;
  return 1;
}
void
make_decl_one_only (tree decl)
{
  if (((enum tree_code) (decl)->common.code) != VAR_DECL && ((enum tree_code) (decl)->common.code) != FUNCTION_DECL)
    abort ();
  ((decl)->common.public_flag) = 1;
  if (1)
    {
      (((decl)->decl.weak_flag) = 1);
      ((decl)->decl.transparent_union) = 1;
    }
  else if (((enum tree_code) (decl)->common.code) == VAR_DECL
      && (((decl)->decl.initial) == 0 || ((decl)->decl.initial) == global_trees[TI_ERROR_MARK]))
    ((decl)->decl.common_flag) = 1;
  else if (1)
    ((decl)->decl.weak_flag) = 1;
  else
    abort ();
}
void
init_varasm_once (void)
{
  in_named_htab = htab_create_alloc (31, in_named_entry_hash, in_named_entry_eq, ((void *)0), ggc_calloc, ((void *)0))
                               ;
  const_desc_htab = htab_create_alloc (1009, const_desc_hash, const_desc_eq, ((void *)0), ggc_calloc, ((void *)0))
                             ;
  const_alias_set = new_alias_set ();
}
enum tls_model
decl_tls_model (tree decl)
{
  enum tls_model kind;
  tree attr = lookup_attribute ("tls_model", ((decl)->decl.attributes));
  unsigned char is_local;
  if (attr)
    {
      attr = ((((attr)->list.value1))->list.value1);
      if (((enum tree_code) (attr)->common.code) != STRING_CST)
 abort ();
      if (!strcmp (((attr)->string1.pointer), "local-exec"))
 kind = TLS_MODEL_LOCAL_EXEC;
      else if (!strcmp (((attr)->string1.pointer), "initial-exec"))
 kind = TLS_MODEL_INITIAL_EXEC;
      else if (!strcmp (((attr)->string1.pointer), "local-dynamic"))
 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
      else if (!strcmp (((attr)->string1.pointer), "global-dynamic"))
 kind = TLS_MODEL_GLOBAL_DYNAMIC;
      else
 abort ();
      return kind;
    }
  is_local = targetm.binds_local_p (decl);
  if (!flag_pic)
    {
      if (is_local)
 kind = TLS_MODEL_LOCAL_EXEC;
      else
 kind = TLS_MODEL_INITIAL_EXEC;
    }
  else if (optimize && is_local)
    kind = TLS_MODEL_LOCAL_DYNAMIC;
  else
    kind = TLS_MODEL_GLOBAL_DYNAMIC;
  if (kind < flag_tls_default)
    kind = flag_tls_default;
  return kind;
}
unsigned int
default_section_type_flags (tree decl, const char *name, int reloc)
{
  return default_section_type_flags_1 (decl, name, reloc, flag_pic);
}
unsigned int
default_section_type_flags_1 (tree decl, const char *name, int reloc,
         int shlib)
{
  unsigned int flags;
  if (decl && ((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
    flags = 0x00100;
  else if (decl && decl_readonly_section_1 (decl, reloc, shlib))
    flags = 0;
  else if (strcmp (name, ".text.unlikely") == 0)
    flags = 0x00100;
  else
    flags = 0x00200;
  if (decl && ((decl)->decl.transparent_union))
    flags |= 0x00800;
  if (decl && ((enum tree_code) (decl)->common.code) == VAR_DECL && ((decl)->decl.thread_local_flag))
    flags |= 0x40000 | 0x00200;
  if (strcmp (name, ".bss") == 0
      || strncmp (name, ".bss.", 5) == 0
      || strncmp (name, ".gnu.linkonce.b.", 16) == 0
      || strcmp (name, ".sbss") == 0
      || strncmp (name, ".sbss.", 6) == 0
      || strncmp (name, ".gnu.linkonce.sb.", 17) == 0
      || strcmp (name, ".tbss") == 0
      || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
    flags |= 0x02000;
  if (strcmp (name, ".tdata") == 0
      || strcmp (name, ".tbss") == 0
      || strncmp (name, ".gnu.linkonce.td.", 17) == 0
      || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
    flags |= 0x40000;
  if (!(flags & (0x00100 | 0x02000 | 0x40000))
      && (strcmp (name, ".init_array") == 0
   || strcmp (name, ".fini_array") == 0
   || strcmp (name, ".preinit_array") == 0))
    flags |= 0x80000;
  return flags;
}
void
default_no_named_section (const char *name ,
     unsigned int flags )
{
  abort ();
}
void
default_elf_asm_named_section (const char *name, unsigned int flags)
{
  char flagchars[10], *f = flagchars;
  if (! named_section_first_declaration (name))
    {
      fprintf (asm_out_file, "\t.section\t%s\n", name);
      return;
    }
  if (!(flags & 0x00400))
    *f++ = 'a';
  if (flags & 0x00200)
    *f++ = 'w';
  if (flags & 0x00100)
    *f++ = 'x';
  if (flags & 0x01000)
    *f++ = 's';
  if (flags & 0x08000)
    *f++ = 'M';
  if (flags & 0x10000)
    *f++ = 'S';
  if (flags & 0x40000)
    *f++ = 'T';
  *f = '\0';
  fprintf (asm_out_file, "\t.section\t%s,\"%s\"", name, flagchars);
  if (!(flags & 0x80000))
    {
      const char *type;
      if (flags & 0x02000)
 type = "nobits";
      else
 type = "progbits";
      fprintf (asm_out_file, ",@%s", type);
      if (flags & 0x000ff)
 fprintf (asm_out_file, ",%d", flags & 0x000ff);
    }
  putc_unlocked ('\n', asm_out_file);
}
void
default_coff_asm_named_section (const char *name, unsigned int flags)
{
  char flagchars[8], *f = flagchars;
  if (flags & 0x00200)
    *f++ = 'w';
  if (flags & 0x00100)
    *f++ = 'x';
  *f = '\0';
  fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars);
}
void
default_pe_asm_named_section (const char *name, unsigned int flags)
{
  default_coff_asm_named_section (name, flags);
  if (flags & 0x00800)
    {
      fprintf (asm_out_file, "\t.linkonce %s\n",
        (flags & 0x00100 ? "discard" : "same_size"));
    }
}
void
default_select_section (tree decl, int reloc,
   unsigned long align )
{
  unsigned char readonly = 0;
  if ((tree_code_type[(int) (((enum tree_code) (decl)->common.code))] == 'd'))
    {
      if (decl_readonly_section (decl, reloc))
 readonly = 1;
    }
  else if (((enum tree_code) (decl)->common.code) == CONSTRUCTOR)
    {
      if (! ((flag_pic && reloc)
      || !((decl)->common.readonly_flag)
      || ((decl)->common.side_effects_flag)
      || !((decl)->common.constant_flag)))
 readonly = 1;
    }
  else if (((enum tree_code) (decl)->common.code) == STRING_CST)
    readonly = 1;
  else if (! (flag_pic && reloc))
    readonly = 1;
  if (readonly)
    readonly_data_section ();
  else
    data_section ();
}
enum section_category
{
  SECCAT_TEXT,
  SECCAT_RODATA,
  SECCAT_RODATA_MERGE_STR,
  SECCAT_RODATA_MERGE_STR_INIT,
  SECCAT_RODATA_MERGE_CONST,
  SECCAT_SRODATA,
  SECCAT_DATA,
  SECCAT_DATA_REL,
  SECCAT_DATA_REL_LOCAL,
  SECCAT_DATA_REL_RO,
  SECCAT_DATA_REL_RO_LOCAL,
  SECCAT_SDATA,
  SECCAT_TDATA,
  SECCAT_BSS,
  SECCAT_SBSS,
  SECCAT_TBSS
};
static enum section_category
categorize_decl_for_section (tree, int, int);
static enum section_category
categorize_decl_for_section (tree decl, int reloc, int shlib)
{
  enum section_category ret;
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
    return SECCAT_TEXT;
  else if (((enum tree_code) (decl)->common.code) == STRING_CST)
    {
      if (flag_mudflap)
        return SECCAT_RODATA;
      else
 return SECCAT_RODATA_MERGE_STR;
    }
  else if (((enum tree_code) (decl)->common.code) == VAR_DECL)
    {
      if (((decl)->decl.initial) == ((void *)0)
   || ((decl)->decl.initial) == global_trees[TI_ERROR_MARK])
 ret = SECCAT_BSS;
      else if (! ((decl)->common.readonly_flag)
        || ((decl)->common.side_effects_flag)
        || ! ((((decl)->decl.initial))->common.constant_flag))
 {
   if (shlib && (reloc & 2))
     ret = SECCAT_DATA_REL;
   else if (shlib && reloc)
     ret = SECCAT_DATA_REL_LOCAL;
   else
     ret = SECCAT_DATA;
 }
      else if (shlib && (reloc & 2))
 ret = SECCAT_DATA_REL_RO;
      else if (shlib && reloc)
 ret = SECCAT_DATA_REL_RO_LOCAL;
      else if (reloc || flag_merge_constants < 2)
 ret = SECCAT_RODATA;
      else if (((enum tree_code) (((decl)->decl.initial))->common.code) == STRING_CST)
 ret = SECCAT_RODATA_MERGE_STR_INIT;
      else
 ret = SECCAT_RODATA_MERGE_CONST;
    }
  else if (((enum tree_code) (decl)->common.code) == CONSTRUCTOR)
    {
      if ((shlib && reloc)
   || ((decl)->common.side_effects_flag)
   || ! ((decl)->common.constant_flag))
 ret = SECCAT_DATA;
      else
 ret = SECCAT_RODATA;
    }
  else
    ret = SECCAT_RODATA;
  if (((enum tree_code) (decl)->common.code) == VAR_DECL && ((decl)->decl.thread_local_flag))
    {
      if (ret == SECCAT_BSS)
 ret = SECCAT_TBSS;
      else
 ret = SECCAT_TDATA;
    }
  else if (targetm.in_small_data_p (decl))
    {
      if (ret == SECCAT_BSS)
 ret = SECCAT_SBSS;
      else if (targetm.have_srodata_section && ret == SECCAT_RODATA)
 ret = SECCAT_SRODATA;
      else
 ret = SECCAT_SDATA;
    }
  return ret;
}
unsigned char
decl_readonly_section (tree decl, int reloc)
{
  return decl_readonly_section_1 (decl, reloc, flag_pic);
}
unsigned char
decl_readonly_section_1 (tree decl, int reloc, int shlib)
{
  switch (categorize_decl_for_section (decl, reloc, shlib))
    {
    case SECCAT_RODATA:
    case SECCAT_RODATA_MERGE_STR:
    case SECCAT_RODATA_MERGE_STR_INIT:
    case SECCAT_RODATA_MERGE_CONST:
    case SECCAT_SRODATA:
      return 1;
      break;
    default:
      return 0;
      break;
    }
}
void
default_elf_select_section (tree decl, int reloc,
       unsigned long align)
{
  default_elf_select_section_1 (decl, reloc, align, flag_pic);
}
void
default_elf_select_section_1 (tree decl, int reloc,
         unsigned long align, int shlib)
{
  switch (categorize_decl_for_section (decl, reloc, shlib))
    {
    case SECCAT_TEXT:
      abort ();
    case SECCAT_RODATA:
      readonly_data_section ();
      break;
    case SECCAT_RODATA_MERGE_STR:
      mergeable_string_section (decl, align, 0);
      break;
    case SECCAT_RODATA_MERGE_STR_INIT:
      mergeable_string_section (((decl)->decl.initial), align, 0);
      break;
    case SECCAT_RODATA_MERGE_CONST:
      mergeable_constant_section (((decl)->decl.mode), align, 0);
      break;
    case SECCAT_SRODATA:
      named_section ((tree) ((void *)0), ".sdata2", reloc);
      break;
    case SECCAT_DATA:
      data_section ();
      break;
    case SECCAT_DATA_REL:
      named_section ((tree) ((void *)0), ".data.rel", reloc);
      break;
    case SECCAT_DATA_REL_LOCAL:
      named_section ((tree) ((void *)0), ".data.rel.local", reloc);
      break;
    case SECCAT_DATA_REL_RO:
      named_section ((tree) ((void *)0), ".data.rel.ro", reloc);
      break;
    case SECCAT_DATA_REL_RO_LOCAL:
      named_section ((tree) ((void *)0), ".data.rel.ro.local", reloc);
      break;
    case SECCAT_SDATA:
      named_section ((tree) ((void *)0), ".sdata", reloc);
      break;
    case SECCAT_TDATA:
      named_section ((tree) ((void *)0), ".tdata", reloc);
      break;
    case SECCAT_BSS:
      bss_section ();
      break;
    case SECCAT_SBSS:
      named_section ((tree) ((void *)0), ".sbss", reloc);
      break;
    case SECCAT_TBSS:
      named_section ((tree) ((void *)0), ".tbss", reloc);
      break;
    default:
      abort ();
    }
}
void
default_unique_section (tree decl, int reloc)
{
  default_unique_section_1 (decl, reloc, flag_pic);
}
void
default_unique_section_1 (tree decl, int reloc, int shlib)
{
  unsigned char one_only = ((decl)->decl.transparent_union);
  const char *prefix, *name;
  size_t nlen, plen;
  char *string1;
  switch (categorize_decl_for_section (decl, reloc, shlib))
    {
    case SECCAT_TEXT:
      prefix = one_only ? ".gnu.linkonce.t." : ".text.";
      break;
    case SECCAT_RODATA:
    case SECCAT_RODATA_MERGE_STR:
    case SECCAT_RODATA_MERGE_STR_INIT:
    case SECCAT_RODATA_MERGE_CONST:
      prefix = one_only ? ".gnu.linkonce.r." : ".rodata.";
      break;
    case SECCAT_SRODATA:
      prefix = one_only ? ".gnu.linkonce.s2." : ".sdata2.";
      break;
    case SECCAT_DATA:
    case SECCAT_DATA_REL:
    case SECCAT_DATA_REL_LOCAL:
    case SECCAT_DATA_REL_RO:
    case SECCAT_DATA_REL_RO_LOCAL:
      prefix = one_only ? ".gnu.linkonce.d." : ".data.";
      break;
    case SECCAT_SDATA:
      prefix = one_only ? ".gnu.linkonce.s." : ".sdata.";
      break;
    case SECCAT_BSS:
      prefix = one_only ? ".gnu.linkonce.b." : ".bss.";
      break;
    case SECCAT_SBSS:
      prefix = one_only ? ".gnu.linkonce.sb." : ".sbss.";
      break;
    case SECCAT_TDATA:
      prefix = one_only ? ".gnu.linkonce.td." : ".tdata.";
      break;
    case SECCAT_TBSS:
      prefix = one_only ? ".gnu.linkonce.tb." : ".tbss.";
      break;
    default:
      abort ();
    }
  plen = strlen (prefix);
  name = ((const char *) (decl_assembler_name (decl))->identifier.id.str);
  name = targetm.strip_name_encoding (name);
  nlen = strlen (name);
  string1 = C_alloca(nlen + plen + 1);
  memcpy (string1, prefix, plen);
  memcpy (string1 + plen, name, nlen + 1);
  ((decl)->decl.section_name) = build_string1 (nlen + plen, string1);
}
void
default_select_rtx_section (enum machine_mode mode ,
       rtx x,
       unsigned long align )
{
  if (flag_pic)
    switch (((enum rtx_code) (x)->code))
      {
      case CONST:
      case SYMBOL_REF:
      case LABEL_REF:
 data_section ();
 return;
      default:
 break;
      }
  readonly_data_section ();
}
void
default_elf_select_rtx_section (enum machine_mode mode, rtx x,
    unsigned long align)
{
  if (flag_pic)
    switch (((enum rtx_code) (x)->code))
      {
      case CONST:
      case SYMBOL_REF:
 named_section ((tree) ((void *)0), ".data.rel.ro", 3);
 return;
      case LABEL_REF:
 named_section ((tree) ((void *)0), ".data.rel.ro.local", 1);
 return;
      default:
 break;
      }
  mergeable_constant_section (mode, align, 0);
}
void
default_encode_section_info (tree decl, rtx rtl, int first )
{
  rtx symbol;
  int flags;
  if (!(((enum rtx_code) (rtl)->code) == MEM))
    return;
  symbol = (((rtl)->u.fld[0]).rtx1);
  if (((enum rtx_code) (symbol)->code) != SYMBOL_REF)
    return;
  flags = 0;
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
    flags |= (1 << 0);
  if (targetm.binds_local_p (decl))
    flags |= (1 << 1);
  if (targetm.in_small_data_p (decl))
    flags |= (1 << 2);
  if (((enum tree_code) (decl)->common.code) == VAR_DECL && ((decl)->decl.thread_local_flag))
    flags |= decl_tls_model (decl) << 3;
  if ((tree_code_type[(int) (((enum tree_code) (decl)->common.code))] == 'd') && ((decl)->decl.external_flag) && ((decl)->common.public_flag))
    flags |= (1 << 6);
  ((((symbol))->u.fld[1]).rtint) = flags;
}
const char *
default_strip_name_encoding (const char *str)
{
  return str + (*str == '*');
}
unsigned char
default_binds_local_p (tree exp)
{
  return default_binds_local_p_1 (exp, flag_shlib);
}
unsigned char
default_binds_local_p_1 (tree exp, int shlib)
{
  unsigned char local_p;
  if (!(tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'd'))
    local_p = 1;
  else if (! ((exp)->common.public_flag))
    local_p = 1;
  else if (((exp)->decl.visibility) != VISIBILITY_DEFAULT)
    local_p = 1;
  else if (((exp)->decl.external_flag))
    local_p = 0;
  else if (((exp)->decl.transparent_union) || ((exp)->decl.weak_flag))
    local_p = 0;
  else if (shlib)
    local_p = 0;
  else if (((exp)->decl.common_flag)
    && (((exp)->decl.initial) == ((void *)0)
        || ((exp)->decl.initial) == global_trees[TI_ERROR_MARK]))
    local_p = 0;
  else
    local_p = 1;
  return local_p;
}
unsigned char
default_valid_pointer_mode (enum machine_mode mode)
{
  return (mode == ptr_mode || mode == (0 ? DImode : SImode));
}
void
default_globalize_label (FILE * stream, const char *name)
{
  fputs_unlocked (".globl ", stream);
  assemble_name (stream, name);
  putc_unlocked ('\n', stream);
}
void
default_emit_unwind_label (FILE * stream ,
      tree decl ,
      int for_eh ,
      int empty )
{
}
void
default_internal_label (FILE *stream, const char *prefix,
   unsigned long labelno)
{
  char *const buf = C_alloca(40 + strlen (prefix));
  do { sprintf (buf, "*.%s%u", prefix, (unsigned) (labelno)); } while (0);
  do { assemble_name ((stream), (buf)); fputs_unlocked (":\n", (stream)); } while (0);
}
void
default_file_start (void)
{
  if (targetm.file_start_app_off && !flag_verbose_asm)
    fputs_unlocked ("#NO_APP\n", asm_out_file);
  if (targetm.file_start_file_directive)
    output_file_directive (asm_out_file, main_input_filename);
}
int trampolines_created;
void
file_end_indicate_exec_stack (void)
{
  unsigned int flags = 0x00400;
  if (trampolines_created)
    flags |= 0x00100;
  named_section_flags (".note.GNU-stack", flags);
}
void
gt_ggc_mx_constant_descriptor_rtx (void *x_p)
{
  struct constant_descriptor_rtx * x = (struct constant_descriptor_rtx *)x_p;
  struct constant_descriptor_rtx * xlimit = x;
  while (((xlimit) != ((void *)0) && ((void *) (xlimit)) != (void *) 1 && ! ggc_set_mark (xlimit)))
   xlimit = ((*xlimit).next);
  while (x != xlimit)
    {
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_constant_descriptor_rtx ((*x).next); } while (0);
      do { if ((*x).mem != ((void *)0)) gt_ggc_mx_rtx_def ((*x).mem); } while (0);
      do { if ((*x).sym != ((void *)0)) gt_ggc_mx_rtx_def ((*x).sym); } while (0);
      do { if ((*x).constant != ((void *)0)) gt_ggc_mx_rtx_def ((*x).constant); } while (0);
      x = ((*x).next);
    }
}
void
gt_ggc_mx_constant_descriptor_tree (void *x_p)
{
  struct constant_descriptor_tree * const x = (struct constant_descriptor_tree *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).rtl != ((void *)0)) gt_ggc_mx_rtx_def ((*x).rtl); } while (0);
      do { if ((*x).value1 != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).value1); } while (0);
    }
}
void
gt_ggc_mx_in_named_entry (void *x_p)
{
  struct in_named_entry * const x = (struct in_named_entry *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
    }
}
void
gt_ggc_mx_rtx_constant_pool (void *x_p)
{
  struct rtx_constant_pool * const x = (struct rtx_constant_pool *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).first != ((void *)0)) gt_ggc_mx_constant_descriptor_rtx ((*x).first); } while (0);
      do { if ((*x).last != ((void *)0)) gt_ggc_mx_constant_descriptor_rtx ((*x).last); } while (0);
      gt_ggc_m_P23constant_descriptor_rtx4htab ((*x).const_rtx_htab);
      gt_ggc_m_P23constant_descriptor_rtx4htab ((*x).const_rtx_sym_htab);
    }
}
void
gt_ggc_mx_varasm_status (void *x_p)
{
  struct varasm_status * const x = (struct varasm_status *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).pool != ((void *)0)) gt_ggc_mx_rtx_constant_pool ((*x).pool); } while (0);
    }
}
void
gt_ggc_m_P23constant_descriptor_rtx4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_constant_descriptor_rtx ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_ggc_m_P24constant_descriptor_tree4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_constant_descriptor_tree ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_ggc_m_P14in_named_entry4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_ggc_mx_in_named_entry ((*x).entries[i0]); } while (0);
        }
        do { const void *const a__ = ((*x).entries); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
      }
    }
}
void
gt_pch_nx_constant_descriptor_rtx (void *x_p)
{
  struct constant_descriptor_rtx * x = (struct constant_descriptor_rtx *)x_p;
  struct constant_descriptor_rtx * xlimit = x;
  while (gt_pch_note_object (xlimit, xlimit, gt_pch_p_23constant_descriptor_rtx))
   xlimit = ((*xlimit).next);
  while (x != xlimit)
    {
      do { if ((*x).next != ((void *)0)) gt_pch_nx_constant_descriptor_rtx ((*x).next); } while (0);
      do { if ((*x).mem != ((void *)0)) gt_pch_nx_rtx_def ((*x).mem); } while (0);
      do { if ((*x).sym != ((void *)0)) gt_pch_nx_rtx_def ((*x).sym); } while (0);
      do { if ((*x).constant != ((void *)0)) gt_pch_nx_rtx_def ((*x).constant); } while (0);
      x = ((*x).next);
    }
}
void
gt_pch_nx_constant_descriptor_tree (void *x_p)
{
  struct constant_descriptor_tree * const x = (struct constant_descriptor_tree *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_24constant_descriptor_tree))
    {
      do { if ((*x).rtl != ((void *)0)) gt_pch_nx_rtx_def ((*x).rtl); } while (0);
      do { if ((*x).value1 != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).value1); } while (0);
    }
}
void
gt_pch_nx_in_named_entry (void *x_p)
{
  struct in_named_entry * const x = (struct in_named_entry *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_14in_named_entry))
    {
      gt_pch_n_S ((*x).name);
    }
}
void
gt_pch_nx_rtx_constant_pool (void *x_p)
{
  struct rtx_constant_pool * const x = (struct rtx_constant_pool *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_17rtx_constant_pool))
    {
      do { if ((*x).first != ((void *)0)) gt_pch_nx_constant_descriptor_rtx ((*x).first); } while (0);
      do { if ((*x).last != ((void *)0)) gt_pch_nx_constant_descriptor_rtx ((*x).last); } while (0);
      gt_pch_n_P23constant_descriptor_rtx4htab ((*x).const_rtx_htab);
      gt_pch_n_P23constant_descriptor_rtx4htab ((*x).const_rtx_sym_htab);
    }
}
void
gt_pch_nx_varasm_status (void *x_p)
{
  struct varasm_status * const x = (struct varasm_status *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_13varasm_status))
    {
      do { if ((*x).pool != ((void *)0)) gt_pch_nx_rtx_constant_pool ((*x).pool); } while (0);
    }
}
void
gt_pch_n_P23constant_descriptor_rtx4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P23constant_descriptor_rtx4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_constant_descriptor_rtx ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P23constant_descriptor_rtx4htab);
      }
    }
}
void
gt_pch_n_P24constant_descriptor_tree4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P24constant_descriptor_tree4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_constant_descriptor_tree ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P24constant_descriptor_tree4htab);
      }
    }
}
void
gt_pch_n_P14in_named_entry4htab (void *x_p)
{
  struct htab * const x = (struct htab *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_P14in_named_entry4htab))
    {
      if ((*x).entries != ((void *)0)) {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
          do { if ((*x).entries[i0] != ((void *)0)) gt_pch_nx_in_named_entry ((*x).entries[i0]); } while (0);
        }
        gt_pch_note_object ((*x).entries, x, gt_pch_p_P14in_named_entry4htab);
      }
    }
}
void
gt_pch_p_23constant_descriptor_rtx (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct constant_descriptor_rtx * const x = (struct constant_descriptor_rtx *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).mem), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).sym), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).constant), cookie);
}
void
gt_pch_p_24constant_descriptor_tree (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct constant_descriptor_tree * const x = (struct constant_descriptor_tree *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).rtl), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).value1), cookie);
}
void
gt_pch_p_14in_named_entry (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct in_named_entry * const x = (struct in_named_entry *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).name), cookie);
}
void
gt_pch_p_17rtx_constant_pool (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct rtx_constant_pool * const x = (struct rtx_constant_pool *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).first), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).last), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).const_rtx_htab), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).const_rtx_sym_htab), cookie);
}
void
gt_pch_p_13varasm_status (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct varasm_status * const x = (struct varasm_status *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).pool), cookie);
}
void
gt_pch_p_P23constant_descriptor_rtx4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
void
gt_pch_p_P24constant_descriptor_tree4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
void
gt_pch_p_P14in_named_entry4htab (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct htab * const x = (struct htab *)x_p;
  if ((*x).entries != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).size); i0++) {
      if ((void *)((*x).entries) == this_obj)
        op (&((*x).entries[i0]), cookie);
    }
    if ((void *)(x) == this_obj)
      op (&((*x).entries), cookie);
  }
}
const struct ggc_root_tab gt_ggc_r_gt_varasm_h[] = {
  {
    &weak_decls,
    1,
    sizeof (weak_decls),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &const_desc_htab,
    1,
    sizeof (const_desc_htab),
    &gt_ggc_m_P24constant_descriptor_tree4htab,
    &gt_pch_n_P24constant_descriptor_tree4htab
  },
  {
    &initial_trampoline,
    1,
    sizeof (initial_trampoline),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  {
    &in_named_htab,
    1,
    sizeof (in_named_htab),
    &gt_ggc_m_P14in_named_entry4htab,
    &gt_pch_n_P14in_named_entry4htab
  },
  {
    &in_named_name,
    1,
    sizeof (in_named_name),
    &gt_ggc_m_S,
    (gt_pointer_walker) &gt_pch_n_S
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_varasm_h[] = {
  { &in_section, 1, sizeof (in_section), ((void *)0), ((void *)0) },
  { &const_labelno, 1, sizeof (const_labelno), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static const struct {
  unsigned char size;
  unsigned char uses_ggc;
} element[NUM_VARRAY_DATA] = {
  { sizeof (char), 1 },
  { sizeof (unsigned char), 1 },
  { sizeof (short), 1 },
  { sizeof (unsigned short), 1 },
  { sizeof (int), 1 },
  { sizeof (unsigned int), 1 },
  { sizeof (long), 1 },
  { sizeof (unsigned long), 1 },
  { sizeof (long), 1 },
  { sizeof (unsigned long), 1 },
  { sizeof (void *), 1 },
  { sizeof (void *), 0 },
  { sizeof (char *), 1 },
  { sizeof (struct rtx_def *), 1 },
  { sizeof (struct rtvec_def *), 1 },
  { sizeof (union tree_node *), 1 },
  { sizeof (struct bitmap_head_def *), 1 },
  { sizeof (struct reg_info_def *), 0 },
  { sizeof (struct const_equiv_data), 0 },
  { sizeof (struct basic_block_def *), 1 },
  { sizeof (struct elt_list *), 1 },
  { sizeof (struct edge_def *), 1 },
  { sizeof (tree *), 1 }
};
varray_type
varray_init (size_t num_elements, enum varray_data_enum element_kind,
      const char *name)
{
  size_t data_size = num_elements * element[element_kind].size;
  varray_type ptr;
  if (element[element_kind].uses_ggc)
    ptr = ggc_alloc_cleared_stat ((sizeof (struct varray_head_tag) - sizeof (varray_data)) + data_size );
  else
    ptr = xcalloc ((sizeof (struct varray_head_tag) - sizeof (varray_data)) + data_size, 1);
  ptr->num_elements = num_elements;
  ptr->elements_used = 0;
  ptr->type = element_kind;
  ptr->name = name;
  return ptr;
}
varray_type
varray_grow (varray_type va, size_t n)
{
  size_t old_elements = va->num_elements;
  if (n != old_elements)
    {
      size_t elem_size = element[va->type].size;
      size_t old_data_size = old_elements * elem_size;
      size_t data_size = n * elem_size;
      if (element[va->type].uses_ggc)
 va = ggc_realloc_stat (va,(sizeof (struct varray_head_tag) - sizeof (varray_data)) + data_size );
      else
 va = xrealloc (va, (sizeof (struct varray_head_tag) - sizeof (varray_data)) + data_size);
      va->num_elements = n;
      if (n > old_elements)
 memset (&va->data.c[old_data_size], 0, data_size - old_data_size);
    }
  return va;
}
void
varray_clear (varray_type va)
{
  size_t data_size = element[va->type].size * va->num_elements;
  memset (va->data.c, 0, data_size);
  va->elements_used = 0;
}
void
varray_copy (varray_type v1, varray_type v2)
{
  size_t data_size;
  if (v1->type != v2->type)
    abort ();
  if (v1->num_elements != v2->num_elements)
    abort ();
  data_size = element[v2->type].size * v2->num_elements;
  memcpy (v1->data.c, v2->data.c, data_size);
  v1->elements_used = v2->elements_used;
}
void dump_varray_statistics (void)
{
}
extern void *vec_p_reserve (void *, size_t);
extern void *vec_o_reserve (void *, size_t, size_t, size_t);
extern void *vec_embedded_alloc (size_t, size_t, size_t, size_t);
struct vec_prefix
{
  size_t num;
  size_t alloc;
  void *vec[1];
};
void *
vec_p_reserve (void *vec, size_t reserve)
{
  return vec_o_reserve (vec, reserve,
   __builtin_offsetof (vec_prefix, vec), sizeof (void *));
}
void *
vec_o_reserve (void *vec, size_t reserve, size_t vec_offset, size_t elt_size)
{
  struct vec_prefix *pfx = vec;
  size_t alloc;
  if (reserve + 1)
    alloc = (pfx ? pfx->num : 0) + reserve;
  else
    alloc = pfx ? pfx->alloc * 2 : 4;
  if (!pfx || pfx->alloc < alloc)
    {
      vec = ggc_realloc_stat (vec,vec_offset + alloc * elt_size );
      ((struct vec_prefix *)vec)->alloc = alloc;
      if (!pfx)
 ((struct vec_prefix *)vec)->num = 0;
    }
  return vec;
}
void *
vec_embedded_alloc (size_t struct_offset, size_t vec_offset,
      size_t elt_size, size_t reserve)
{
  void *ptr = ggc_alloc_stat (struct_offset + vec_offset + elt_size * reserve );
  struct vec_prefix *pfx = (struct vec_prefix *)((char *)ptr + struct_offset);
  pfx->num = 0;
  pfx->alloc = reserve;
  return ptr;
}
const char version_string1[] = "3.5.0 20040706 (experimental)";
const char bug_report_url[] = "<URL:http://gcc.gnu.org/bugs.html>";
extern void fancy_abort (const char *, int, const char *)
    ;
typedef struct allocation_object_def
{
  union
    {
      char data[1];
      char *align_p;
      long long align_i;
      long double align_ld;
    } u;
} allocation_object;
alloc_pool
create_alloc_pool (const char *name, size_t size, size_t num)
{
  alloc_pool pool;
  size_t pool_size, header_size;
  if (!name)
    fancy_abort ("gcc.c", 678653, "?");
  if (size < sizeof (alloc_pool_list))
    size = sizeof (alloc_pool_list);
  size = (((size+7) >> 3) << 3);
  if (num == 0)
    fancy_abort ("gcc.c", 678669, "?");
  pool_size = sizeof (struct alloc_pool_def);
  pool = xmalloc (pool_size);
  pool->name = name;
  pool->elt_size = size;
  pool->elts_per_block = num;
  header_size = (((sizeof (struct alloc_pool_list_def)+7) >> 3) << 3);
  pool->block_size = (size * num) + header_size;
  pool->free_list = ((void *)0);
  pool->elts_allocated = 0;
  pool->elts_free = 0;
  pool->blocks_allocated = 0;
  pool->block_list = ((void *)0);
  return (pool);
}
void
free_alloc_pool (alloc_pool pool)
{
  alloc_pool_list block, next_block;
  for (block = pool->block_list; block != ((void *)0); block = next_block)
    {
      next_block = block->next;
      free (block);
    }
  free (pool);
}
void *
pool_alloc (alloc_pool pool)
{
  alloc_pool_list header;
  char *block;
  if (!pool->free_list)
    {
      size_t i;
      alloc_pool_list block_header;
      block = xmalloc (pool->block_size);
      block_header = (alloc_pool_list) block;
      block += (((sizeof (struct alloc_pool_list_def)+7) >> 3) << 3);
      block_header1->next = pool->block_list;
      pool->block_list = block_header;
      for (i = 0; i < pool->elts_per_block; i++, block += pool->elt_size)
      {
        header1 = (alloc_pool_list) ((void *) (((allocation_object *) (block))->u.data));
        header11->next = pool->free_list;
        pool->free_list = header1;
      }
      pool->elts_allocated += pool->elts_per_block;
      pool->elts_free += pool->elts_per_block;
      pool->blocks_allocated += 1;
    }
  header1 = pool->free_list;
  pool->free_list = header11->next;
  pool->elts_free--;
  return ((void *) header1);
}
void
pool_free (alloc_pool pool, void *ptr)
{
  alloc_pool_list header1;
  if (pool->elts_free + 1 > pool->elts_allocated)
    fancy_abort ("gcc.c", 678828, "?");
  header1 = (alloc_pool_list) ptr;
  header11->next = pool->free_list;
  pool->free_list = header1;
  pool->elts_free++;
}
void dump_alloc_pool_statistics (void)
{
}
struct et_occ
{
  struct et_node *of;
  struct et_occ *parent;
  struct et_occ *prev;
  struct et_occ *next;
  int depth;
  int min;
  struct et_occ *min_occ;
};
static alloc_pool et_nodes;
static alloc_pool et_occurrences;
static void
set_depth (struct et_occ *occ, int d)
{
  if (!occ)
    return;
  occ->min += d - occ->depth;
  occ->depth = d;
}
static void
set_depth_add (struct et_occ *occ, int d)
{
  if (!occ)
    return;
  occ->min += d;
  occ->depth += d;
}
static void
set_prev (struct et_occ *occ, struct et_occ *t)
{
  occ->prev = t;
  if (t)
    t->parent = occ;
}
static void
set_next (struct et_occ *occ, struct et_occ *t)
{
  occ->next = t;
  if (t)
    t->parent = occ;
}
static void
et_recomp_min (struct et_occ *occ)
{
  struct et_occ *mson = occ->prev;
  if (!mson
      || (occ->next
   && mson->min > occ->next->min))
      mson = occ->next;
  if (mson && mson->min < 0)
    {
      occ->min = mson->min + occ->depth;
      occ->min_occ = mson->min_occ;
    }
  else
    {
      occ->min = occ->depth;
      occ->min_occ = occ;
    }
}
static void
et_splay (struct et_occ *occ)
{
  struct et_occ *f, *gf, *ggf;
  int occ_depth, f_depth, gf_depth;
  while (occ->parent)
    {
      occ_depth = occ->depth;
      f = occ->parent;
      f_depth = f->depth;
      gf = f->parent;
      if (!gf)
 {
   set_depth_add (occ, f_depth);
   occ->min_occ = f->min_occ;
   occ->min = f->min;
   if (f->prev == occ)
     {
       set_prev (f, occ->next);
       set_next (occ, f);
       set_depth_add (f->prev, occ_depth);
     }
   else
     {
       set_next (f, occ->prev);
       set_prev (occ, f);
       set_depth_add (f->next, occ_depth);
     }
   set_depth (f, -occ_depth);
   occ->parent = ((void *)0);
   et_recomp_min (f);
   return;
 }
      gf_depth = gf->depth;
      set_depth_add (occ, f_depth + gf_depth);
      occ->min_occ = gf->min_occ;
      occ->min = gf->min;
      ggf = gf->parent;
      if (gf->prev == f)
 {
   if (f->prev == occ)
     {
       set_prev (gf, f->next);
       set_prev (f, occ->next);
       set_next (occ, f);
       set_next (f, gf);
       set_depth (f, -occ_depth);
       set_depth_add (f->prev, occ_depth);
       set_depth (gf, -f_depth);
       set_depth_add (gf->prev, f_depth);
     }
   else
     {
       set_prev (gf, occ->next);
       set_next (f, occ->prev);
       set_prev (occ, f);
       set_next (occ, gf);
       set_depth (f, -occ_depth);
       set_depth_add (f->next, occ_depth);
       set_depth (gf, -occ_depth - f_depth);
       set_depth_add (gf->prev, occ_depth + f_depth);
     }
 }
      else
 {
   if (f->prev == occ)
     {
       set_next (gf, occ->prev);
       set_prev (f, occ->next);
       set_prev (occ, gf);
       set_next (occ, f);
       set_depth (f, -occ_depth);
       set_depth_add (f->prev, occ_depth);
       set_depth (gf, -occ_depth - f_depth);
       set_depth_add (gf->next, occ_depth + f_depth);
     }
   else
     {
       set_next (gf, f->prev);
       set_next (f, occ->prev);
       set_prev (occ, f);
       set_prev (f, gf);
       set_depth (f, -occ_depth);
       set_depth_add (f->next, occ_depth);
       set_depth (gf, -f_depth);
       set_depth_add (gf->next, f_depth);
     }
 }
      occ->parent = ggf;
      if (ggf)
 {
   if (ggf->prev == gf)
     ggf->prev = occ;
   else
     ggf->next = occ;
 }
      et_recomp_min (gf);
      et_recomp_min (f);
    }
}
static struct et_occ *
et_new_occ (struct et_node *node)
{
  struct et_occ *nw;
  if (!et_occurrences)
    et_occurrences = create_alloc_pool ("et_occ pool", sizeof (struct et_occ), 300);
  nw = pool_alloc (et_occurrences);
  nw->of = node;
  nw->parent = ((void *)0);
  nw->prev = ((void *)0);
  nw->next = ((void *)0);
  nw->depth = 0;
  nw->min_occ = nw;
  nw->min = 0;
  return nw;
}
struct et_node *
et_new_tree (void *data)
{
  struct et_node *nw;
  if (!et_nodes)
    et_nodes = create_alloc_pool ("et_node pool", sizeof (struct et_node), 300);
  nw = pool_alloc (et_nodes);
  nw->data = data;
  nw->father = ((void *)0);
  nw->left = ((void *)0);
  nw->right = ((void *)0);
  nw->son = ((void *)0);
  nw->rightmost_occ = et_new_occ (nw);
  nw->parent_occ = ((void *)0);
  return nw;
}
void
et_free_tree (struct et_node *t)
{
  while (t->son)
    et_split (t->son);
  if (t->father)
    et_split (t);
  pool_free (et_occurrences, t->rightmost_occ);
  pool_free (et_nodes, t);
}
void
et_set_father (struct et_node *t, struct et_node *father)
{
  struct et_node *left, *right;
  struct et_occ *rmost, *left_part, *new_f_occ, *p;
  new_f_occ = et_new_occ (father);
  rmost = father->rightmost_occ;
  et_splay (rmost);
  left_part = rmost->prev;
  p = t->rightmost_occ;
  et_splay (p);
  set_prev (new_f_occ, left_part);
  set_next (new_f_occ, p);
  p->depth++;
  p->min++;
  et_recomp_min (new_f_occ);
  set_prev (rmost, new_f_occ);
  if (new_f_occ->min + rmost->depth < rmost->min)
    {
      rmost->min = new_f_occ->min + rmost->depth;
      rmost->min_occ = new_f_occ->min_occ;
    }
  t->parent_occ = new_f_occ;
  t->father = father;
  right = father->son;
  if (right)
    left = right->left;
  else
    left = right = t;
  left->right = t;
  right->left = t;
  t->left = left;
  t->right = right;
  father->son = t;
}
void
et_split (struct et_node *t)
{
  struct et_node *father = t->father;
  struct et_occ *r, *l, *rmost, *p_occ;
  rmost = t->rightmost_occ;
  et_splay (rmost);
  for (r = rmost->next; r->prev; r = r->prev)
    continue;
  et_splay (r);
  r->prev->parent = ((void *)0);
  p_occ = t->parent_occ;
  et_splay (p_occ);
  t->parent_occ = ((void *)0);
  l = p_occ->prev;
  p_occ->next->parent = ((void *)0);
  set_prev (r, l);
  et_recomp_min (r);
  et_splay (rmost);
  rmost->depth = 0;
  rmost->min = 0;
  pool_free (et_occurrences, p_occ);
  if (father->son == t)
    father->son = t->right;
  if (father->son == t)
    father->son = ((void *)0);
  else
    {
      t->left->right = t->right;
      t->right->left = t->left;
    }
  t->left = t->right = ((void *)0);
  t->father = ((void *)0);
}
struct et_node *
et_nca (struct et_node *n1, struct et_node *n2)
{
  struct et_occ *o1 = n1->rightmost_occ, *o2 = n2->rightmost_occ, *om;
  struct et_occ *l, *r, *ret;
  int mn;
  if (n1 == n2)
    return n1;
  et_splay (o1);
  l = o1->prev;
  r = o1->next;
  if (l)
    l->parent = ((void *)0);
  if (r)
    r->parent = ((void *)0);
  et_splay (o2);
  if (l == o2 || (l && l->parent != ((void *)0)))
    {
      ret = o2->next;
      set_prev (o1, o2);
      if (r)
 r->parent = o1;
    }
  else
    {
      ret = o2->prev;
      set_next (o1, o2);
      if (l)
 l->parent = o1;
    }
  if (0 < o2->depth)
    {
      om = o1;
      mn = o1->depth;
    }
  else
    {
      om = o2;
      mn = o2->depth + o1->depth;
    }
  if (ret && ret->min + o1->depth + o2->depth < mn)
    return ret->min_occ->of;
  else
    return om->of;
}
unsigned char
et_below (struct et_node *down, struct et_node *up)
{
  struct et_occ *u = up->rightmost_occ, *d = down->rightmost_occ;
  struct et_occ *l, *r;
  if (up == down)
    return 1;
  et_splay (u);
  l = u->prev;
  r = u->next;
  if (!l)
    return 0;
  l->parent = ((void *)0);
  if (r)
    r->parent = ((void *)0);
  et_splay (d);
  if (l == d || l->parent != ((void *)0))
    {
      if (r)
 r->parent = u;
      set_prev (u, d);
    }
  else
    {
      l->parent = u;
      if (r && r->parent != ((void *)0))
 set_next (u, d);
      else
 set_next (u, r);
      return 0;
    }
  if (0 >= d->depth)
    return 0;
  return !d->next || d->next->min + d->depth >= 0;
}
static struct cfg_hooks *cfg_hooks;
void
rtl_register_cfg_hooks (void)
{
  cfg_hooks = &rtl_cfg_hooks;
}
void
cfg_layout_rtl_register_cfg_hooks (void)
{
  cfg_hooks = &cfg_layout_rtl_cfg_hooks;
}
void
tree_register_cfg_hooks (void)
{
  cfg_hooks = &tree_cfg_hooks;
}
int
ir_type (void)
{
  return cfg_hooks == &tree_cfg_hooks ? 1 : 0;
}
void
verify_flow_info (void)
{
  size_t *edge_checksum;
  int num_bb_notes, err = 0;
  basic_block bb, last_bb_seen;
  basic_block *last_visited;
  timevar_push (TV_CFG_VERIFY);
  last_visited = xcalloc (last_basic_block + 2, sizeof (basic_block));
  edge_checksum = xcalloc (last_basic_block + 2, sizeof (size_t));
  last_bb_seen = ENTRY_BLOCK_PTR;
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != ((void *)0); bb = bb->next_bb)
    {
      if (bb != EXIT_BLOCK_PTR
   && bb != (((basic_block_info)->data.bb[(bb->index)])))
 {
   error ("bb %d on wrong place", bb->index);
   err = 1;
 }
      if (bb->prev_bb != last_bb_seen)
 {
   error ("prev_bb of %d should be %d, not %d",
   bb->index, last_bb_seen->index, bb->prev_bb->index);
   err = 1;
 }
      last_bb_seen = bb;
    }
  for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = bb->prev_bb)
    {
      int n_fallthru = 0;
      edge e;
      if (bb->count < 0)
 {
   error ("verify_flow_info: Wrong count of block %i %i",
          bb->index, (int)bb->count);
   err = 1;
 }
      if (bb->frequency < 0)
 {
   error ("verify_flow_info: Wrong frequency of block %i %i",
          bb->index, bb->frequency);
   err = 1;
 }
      for (e = bb->succ; e; e = e->succ_next)
 {
   if (last_visited [e->dest->index + 2] == bb)
     {
       error ("verify_flow_info: Duplicate edge %i->%i",
       e->src->index, e->dest->index);
       err = 1;
     }
   if (e->probability < 0 || e->probability > 10000)
     {
       error ("verify_flow_info: Wrong probability of edge %i->%i %i",
       e->src->index, e->dest->index, e->probability);
       err = 1;
     }
   if (e->count < 0)
     {
       error ("verify_flow_info: Wrong count of edge %i->%i %i",
       e->src->index, e->dest->index, (int)e->count);
       err = 1;
     }
   last_visited [e->dest->index + 2] = bb;
   if (e->flags & 1)
     n_fallthru++;
   if (e->src != bb)
     {
       error ("verify_flow_info: Basic block %d succ edge is corrupted",
       bb->index);
       fprintf (stderr, "Predecessor: ");
       dump_edge_info (stderr, e, 0);
       fprintf (stderr, "\nSuccessor: ");
       dump_edge_info (stderr, e, 1);
       fprintf (stderr, "\n");
       err = 1;
     }
   edge_checksum[e->dest->index + 2] += (size_t) e;
 }
      if (n_fallthru > 1)
 {
   error ("Wrong amount of branch edges after unconditional jump %i", bb->index);
   err = 1;
 }
      for (e = bb->pred; e; e = e->pred_next)
 {
   if (e->dest != bb)
     {
       error ("basic block %d pred edge is corrupted", bb->index);
       fputs_unlocked ("Predecessor: ", stderr);
       dump_edge_info (stderr, e, 0);
       fputs_unlocked ("\nSuccessor: ", stderr);
       dump_edge_info (stderr, e, 1);
       fputc_unlocked ('\n', stderr);
       err = 1;
     }
   edge_checksum[e->dest->index + 2] -= (size_t) e;
 }
    }
  {
    edge e;
    for (e = ENTRY_BLOCK_PTR->succ; e ; e = e->succ_next)
      edge_checksum[e->dest->index + 2] += (size_t) e;
    for (e = EXIT_BLOCK_PTR->pred; e ; e = e->pred_next)
      edge_checksum[e->dest->index + 2] -= (size_t) e;
  }
  for (bb = ENTRY_BLOCK_PTR; bb != ((void *)0); bb = bb->next_bb)
    if (edge_checksum[bb->index + 2])
      {
 error ("basic block %i edge lists are corrupted", bb->index);
 err = 1;
      }
  num_bb_notes = 0;
  last_bb_seen = ENTRY_BLOCK_PTR;
  free (last_visited);
  free (edge_checksum);
  if (cfg_hooks->verify_flow_info)
    err |= cfg_hooks->verify_flow_info ();
  if (err)
    internal_error ("verify_flow_info failed");
  timevar_pop (TV_CFG_VERIFY);
}
void
dump_bb (basic_block bb, FILE *outf, int indent1)
{
  edge e;
  char *s_indent1;
  s_indent1 = C_alloca((size_t) indent1 + 1);
  memset (s_indent1, ' ', (size_t) indent1);
  s_indent1[indent1] = '\0';
  fprintf (outf, ";;%s basic block %d, loop depth %d, count ",
    s_indent1, bb->index, bb->loop_depth);
  fprintf (outf, "%lld", (long long) bb->count);
  putc_unlocked ('\n', outf);
  fprintf (outf, ";;%s prev block ", s_indent1);
  if (bb->prev_bb)
    fprintf (outf, "%d, ", bb->prev_bb->index);
  else
    fprintf (outf, "(nil), ");
  fprintf (outf, "next block ");
  if (bb->next_bb)
    fprintf (outf, "%d", bb->next_bb->index);
  else
    fprintf (outf, "(nil)");
  putc_unlocked ('\n', outf);
  fprintf (outf, ";;%s pred:      ", s_indent1);
  for (e = bb->pred; e; e = e->pred_next)
    dump_edge_info (outf, e, 0);
  putc_unlocked ('\n', outf);
  fprintf (outf, ";;%s succ:      ", s_indent1);
  for (e = bb->succ; e; e = e->succ_next)
    dump_edge_info (outf, e, 1);
  putc_unlocked ('\n', outf);
  if (cfg_hooks->dump_bb)
    cfg_hooks->dump_bb (bb, outf, indent1);
}
edge
redirect_edge_and_branch (edge e, basic_block dest)
{
  edge ret;
  if (!cfg_hooks->redirect_edge_and_branch)
    internal_error ("%s does not support redirect_edge_and_branch.",
      cfg_hooks->name);
  ret = cfg_hooks->redirect_edge_and_branch (e, dest);
  return ret;
}
basic_block
redirect_edge_and_branch_force (edge e, basic_block dest)
{
  basic_block ret;
  if (!cfg_hooks->redirect_edge_and_branch_force)
    internal_error ("%s does not support redirect_edge_and_branch_force.",
      cfg_hooks->name);
  ret = cfg_hooks->redirect_edge_and_branch_force (e, dest);
  return ret;
}
edge
split_block (basic_block bb, void *i)
{
  basic_block new_bb;
  if (!cfg_hooks->split_block)
    internal_error ("%s does not support split_block.", cfg_hooks->name);
  new_bb = cfg_hooks->split_block (bb, i);
  if (!new_bb)
    return ((void *)0);
  new_bb->count = bb->count;
  new_bb->frequency = bb->frequency;
  new_bb->loop_depth = bb->loop_depth;
  if (dom_computed[CDI_DOMINATORS] >= DOM_CONS_OK)
    {
      redirect_immediate_dominators (CDI_DOMINATORS, bb, new_bb);
      set_immediate_dominator (CDI_DOMINATORS, new_bb, bb);
    }
  return make_single_succ_edge (bb, new_bb, 1);
}
edge
split_block_after_labels (basic_block bb)
{
  return split_block (bb, ((void *)0));
}
unsigned char
move_block_after (basic_block bb, basic_block after)
{
  unsigned char ret;
  if (!cfg_hooks->move_block_after)
    internal_error ("%s does not support move_block_after.", cfg_hooks->name);
  ret = cfg_hooks->move_block_after (bb, after);
  return ret;
}
void
delete_basic_block (basic_block bb)
{
  if (!cfg_hooks->delete_basic_block)
    internal_error ("%s does not support delete_basic_block.", cfg_hooks->name);
  cfg_hooks->delete_basic_block (bb);
  while (bb->pred != ((void *)0))
    remove_edge (bb->pred);
  while (bb->succ != ((void *)0))
    remove_edge (bb->succ);
  bb->pred = ((void *)0);
  bb->succ = ((void *)0);
  if (dom_computed[CDI_DOMINATORS])
    delete_from_dominance_info (CDI_DOMINATORS, bb);
  if (dom_computed[CDI_POST_DOMINATORS])
    delete_from_dominance_info (CDI_POST_DOMINATORS, bb);
  expunge_block (bb);
}
basic_block
split_edge (edge e)
{
  basic_block ret;
  gcov_type count = e->count;
  int freq = (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
  edge f;
  if (!cfg_hooks->split_edge)
    internal_error ("%s does not support split_edge.", cfg_hooks->name);
  ret = cfg_hooks->split_edge (e);
  ret->count = count;
  ret->frequency = freq;
  ret->succ->probability = 10000;
  ret->succ->count = count;
  if (dom_computed[CDI_DOMINATORS])
    set_immediate_dominator (CDI_DOMINATORS, ret, ret->pred->src);
  if (dom_computed[CDI_DOMINATORS] >= DOM_NO_FAST_QUERY)
    {
      if (get_immediate_dominator (CDI_DOMINATORS, ret->succ->dest)
   == ret->pred->src)
 {
   for (f = ret->succ->dest->pred; f; f = f->pred_next)
     {
       if (f == ret->succ)
  continue;
       if (!dominated_by_p (CDI_DOMINATORS, f->src,
       ret->succ->dest))
  break;
     }
   if (!f)
     set_immediate_dominator (CDI_DOMINATORS, ret->succ->dest, ret);
 }
    };
  return ret;
}
basic_block
create_basic_block (void *head, void *end, basic_block after)
{
  basic_block ret;
  if (!cfg_hooks->create_basic_block)
    internal_error ("%s does not support create_basic_block.", cfg_hooks->name);
  ret = cfg_hooks->create_basic_block (head, end, after);
  if (dom_computed[CDI_DOMINATORS])
    add_to_dominance_info (CDI_DOMINATORS, ret);
  if (dom_computed[CDI_POST_DOMINATORS])
    add_to_dominance_info (CDI_POST_DOMINATORS, ret);
  return ret;
}
basic_block
create_empty_bb (basic_block after)
{
  return create_basic_block (((void *)0), ((void *)0), after);
}
unsigned char
can_merge_blocks_p (basic_block bb1, basic_block bb2)
{
  unsigned char ret;
  if (!cfg_hooks->can_merge_blocks_p)
    internal_error ("%s does not support can_merge_blocks_p.", cfg_hooks->name);
  ret = cfg_hooks->can_merge_blocks_p (bb1, bb2);
  return ret;
}
void
predict_edge (edge e, enum br_predictor predictor, int probability)
{
  if (!cfg_hooks->predict_edge)
    internal_error ("%s does not support predict_edge.", cfg_hooks->name);
  cfg_hooks->predict_edge (e, predictor, probability);
}
unsigned char
predicted_by_p (basic_block bb, enum br_predictor predictor)
{
  if (!cfg_hooks->predict_edge)
    internal_error ("%s does not support predicted_by_p.", cfg_hooks->name);
  return cfg_hooks->predicted_by_p (bb, predictor);
}
void
merge_blocks (basic_block a, basic_block b)
{
  edge e;
  if (!cfg_hooks->merge_blocks)
    internal_error ("%s does not support merge_blocks.", cfg_hooks->name);
  cfg_hooks->merge_blocks (a, b);
  while (a->succ)
    remove_edge (a->succ);
  for (e = b->succ; e; e = e->succ_next)
    e->src = a;
  a->succ = b->succ;
  a->flags |= b->flags;
  b->pred = b->succ = ((void *)0);
  a->global_live_at_end = b->global_live_at_end;
  if (dom_computed[CDI_DOMINATORS])
    redirect_immediate_dominators (CDI_DOMINATORS, b, a);
  if (dom_computed[CDI_DOMINATORS])
    delete_from_dominance_info (CDI_DOMINATORS, b);
  if (dom_computed[CDI_POST_DOMINATORS])
    delete_from_dominance_info (CDI_POST_DOMINATORS, b);
  expunge_block (b);
}
edge
make_forwarder_block (basic_block bb, unsigned char (*redirect_edge_p) (edge),
        void (*new_bb_cbk) (basic_block))
{
  edge e, next_e, fallthru;
  basic_block dummy, jump;
  if (!cfg_hooks->make_forwarder_block)
    internal_error ("%s does not support make_forwarder_block.",
      cfg_hooks->name);
  fallthru = split_block_after_labels (bb);
  dummy = fallthru->src;
  bb = fallthru->dest;
  for (e = dummy->pred; e; e = next_e)
    {
      next_e = e->pred_next;
      if (redirect_edge_p (e))
 continue;
      dummy->frequency -= (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
      dummy->count -= e->count;
      if (dummy->frequency < 0)
 dummy->frequency = 0;
      if (dummy->count < 0)
 dummy->count = 0;
      fallthru->count -= e->count;
      if (fallthru->count < 0)
 fallthru->count = 0;
      jump = redirect_edge_and_branch_force (e, bb);
      if (jump)
 new_bb_cbk (jump);
    }
  if (dom_computed[CDI_DOMINATORS] >= DOM_CONS_OK)
    {
      basic_block doms_to_fix[2];
      doms_to_fix[0] = dummy;
      doms_to_fix[1] = bb;
      iterate_fix_dominators (CDI_DOMINATORS, doms_to_fix, 2);
    }
  cfg_hooks->make_forwarder_block (fallthru);
  return fallthru;
}
void
tidy_fallthru_edge (edge e)
{
  if (cfg_hooks->tidy_fallthru_edge)
    cfg_hooks->tidy_fallthru_edge (e);
}
void
tidy_fallthru_edges (void)
{
  basic_block b, c;
  if (!cfg_hooks->tidy_fallthru_edge)
    return;
  if (ENTRY_BLOCK_PTR->next_bb == EXIT_BLOCK_PTR)
    return;
  for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR->prev_bb; b = b->next_bb)
    {
      edge s;
      c = b->next_bb;
      if ((s = b->succ) != ((void *)0)
   && ! (s->flags & (2 | 4 | 8))
   && s->succ_next == ((void *)0)
   && s->dest == c
   && !find_reg_note ((b)->end_, REG_CROSSING_JUMP, (rtx) 0))
 tidy_fallthru_edge (s);
    }
}
unsigned char
can_duplicate_block_p (basic_block bb)
{
  edge e;
  if (!cfg_hooks->can_duplicate_block_p)
    internal_error ("%s does not support can_duplicate_block_p.",
      cfg_hooks->name);
  if (bb == EXIT_BLOCK_PTR || bb == ENTRY_BLOCK_PTR)
    return 0;
  for (e = bb->succ; e; e = e->succ_next)
    if (e->dest == EXIT_BLOCK_PTR && e->flags & 1)
       return 0;
  return cfg_hooks->can_duplicate_block_p (bb);
}
basic_block
duplicate_block (basic_block bb, edge e)
{
  edge s, n;
  basic_block new_bb;
  gcov_type new_count = e ? e->count : 0;
  if (!cfg_hooks->duplicate_block)
    internal_error ("%s does not support duplicate_block.",
      cfg_hooks->name);
  if (bb->count < new_count)
    new_count = bb->count;
  if (!bb->pred)
    fancy_abort ("gcc.c", 680297, "?");
  new_bb = cfg_hooks->duplicate_block (bb);
  new_bb->loop_depth = bb->loop_depth;
  new_bb->flags = bb->flags;
  for (s = bb->succ; s; s = s->succ_next)
    {
      n = unchecked_make_edge (new_bb, s->dest, s->flags);
      n->probability = s->probability;
      if (e && bb->count)
 {
   n->count = s->count * (new_count * 10000 / bb->count) / 10000;
   s->count -= n->count;
 }
      else
 n->count = s->count;
      n->aux = s->aux;
    }
  if (e)
    {
      new_bb->count = new_count;
      bb->count -= new_count;
      new_bb->frequency = (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
      bb->frequency -= (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
      redirect_edge_and_branch_force (e, new_bb);
      if (bb->count < 0)
 bb->count = 0;
      if (bb->frequency < 0)
 bb->frequency = 0;
    }
  else
    {
      new_bb->count = bb->count;
      new_bb->frequency = bb->frequency;
    }
  new_bb->rbi->original = bb;
  bb->rbi->copy = new_bb;
  return new_bb;
}
unsigned char
block_ends_with_call_p (basic_block bb)
{
  if (!cfg_hooks->block_ends_with_call_p)
    internal_error ("%s does not support block_ends_with_call_p", cfg_hooks->name);
  return (cfg_hooks->block_ends_with_call_p) (bb);
}
unsigned char
block_ends_with_condjump_p (basic_block bb)
{
  if (!cfg_hooks->block_ends_with_condjump_p)
    internal_error ("%s does not support block_ends_with_condjump_p",
      cfg_hooks->name);
  return (cfg_hooks->block_ends_with_condjump_p) (bb);
}
int
flow_call_edges_add (sbitmap blocks)
{
  if (!cfg_hooks->flow_call_edges_add)
    internal_error ("%s does not support flow_call_edges_add",
      cfg_hooks->name);
  return (cfg_hooks->flow_call_edges_add) (blocks);
}
typedef struct btr_def_group_s
{
  struct btr_def_group_s *next;
  rtx src;
  struct btr_def_s *members;
} *btr_def_group;
typedef struct btr_user_s
{
  struct btr_user_s *next;
  basic_block bb;
  int luid;
  rtx insn;
  rtx use;
  int n_reaching_defs;
  int first_reaching_def;
  char other_use_this_block;
} *btr_user;
typedef struct btr_def_s
{
  struct btr_def_s *next_this_bb;
  struct btr_def_s *next_this_group;
  basic_block bb;
  int luid;
  rtx insn;
  int btr;
  int cost;
  btr_def_group group;
  btr_user uses;
  char has_ambiguous_use;
  char other_btr_uses_before_def;
  char other_btr_uses_after_use;
  bitmap live_range;
} *btr_def;
static int issue_rate;
static int basic_block_freq (basic_block);
static int insn_sets_btr_p (rtx, int, int *);
static rtx *find_btr_use (rtx);
static int btr_referenced_p (rtx, rtx *);
static int find_btr_reference (rtx *, void *);
static void find_btr_def_group (btr_def_group *, btr_def);
static btr_def add_btr_def (fibheap_t, basic_block, int, rtx,
       unsigned int, int, btr_def_group *);
static btr_user new_btr_user (basic_block, int, rtx);
static void dump_hard_reg_set (HARD_REG_SET);
static void dump_btrs_live (int);
static void note_other_use_this_block (unsigned int, btr_user);
static void compute_defs_uses_and_gen (fibheap_t, btr_def *,btr_user *,
           sbitmap *, sbitmap *, HARD_REG_SET *);
static void compute_kill (sbitmap *, sbitmap *, HARD_REG_SET *);
static void compute_out (sbitmap *bb_out, sbitmap *, sbitmap *, int);
static void link_btr_uses (btr_def *, btr_user *, sbitmap *, sbitmap *, int);
static void build_btr_def_use_webs (fibheap_t);
static int block_at_edge_of_live_range_p (int, btr_def);
static void clear_btr_from_live_range (btr_def def);
static void add_btr_to_live_range (btr_def);
static void augment_live_range (bitmap, HARD_REG_SET *, basic_block,
    basic_block);
static int choose_btr (HARD_REG_SET);
static void combine_btr_defs (btr_def, HARD_REG_SET *);
static void btr_def_live_range (btr_def, HARD_REG_SET *);
static void move_btr_def (basic_block, int, btr_def, bitmap, HARD_REG_SET *);
static int migrate_btr_def (btr_def, int);
static void migrate_btr_defs (enum reg_class, int);
static int can_move_up (basic_block, rtx, int);
static void note_btr_set (rtx, rtx, void *);
static struct obstack migrate_btrl_obstack;
static HARD_REG_SET *btrs_live;
static HARD_REG_SET *btrs_live_at_end;
static HARD_REG_SET all_btrs;
static int first_btr, last_btr;
static int
basic_block_freq (basic_block bb)
{
  return bb->frequency;
}
static rtx *btr_reference_found;
static int
find_btr_reference (rtx *px, void *preg)
{
  rtx x;
  int regno, i;
  if (px == preg)
    return -1;
  x = *px;
  if (!(((enum rtx_code) (x)->code) == REG))
    return 0;
  regno = (((x)->u.fld[0]).rtuint);
  for (i = hard_regno_nregs[regno][((enum machine_mode) (x)->mode)] - 1; i >= 0; i--)
    if ((!!((all_btrs)[(regno+i) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno+i) % ((unsigned) (8 * 4)))))))
      {
 btr_reference_found = px;
 return 1;
      }
  return -1;
}
static int
btr_referenced_p (rtx x, rtx *excludep)
{
  return for_each_rtx (&x, find_btr_reference, excludep);
}
static int
insn_sets_btr_p (rtx insn, int check_const, int *regno)
{
  rtx set;
  if (((enum rtx_code) (insn)->code) == INSN
      && (set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)))
    {
      rtx dest = (((set)->u.fld[0]).rtx1);
      rtx src = (((set)->u.fld[1]).rtx1);
      if (((enum rtx_code) (dest)->code) == SUBREG)
 dest = (((dest)->u.fld[0]).rtx1);
      if ((((enum rtx_code) (dest)->code) == REG)
   && (!!((all_btrs)[((((dest)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << (((((dest)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4)))))))
 {
   if (btr_referenced_p (src, ((void *)0)))
     fancy_abort ("gcc.c", 680613, "?");
   if (!check_const || ((rtx_class[(int) (((enum rtx_code) (src)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (src)->code) == CONST_VECTOR))
     {
       if (regno)
  *regno = (((dest)->u.fld[0]).rtuint);
       return 1;
     }
 }
    }
  return 0;
}
static rtx *
find_btr_use (rtx insn)
{
  return btr_referenced_p (insn, ((void *)0)) ? btr_reference_found : ((void *)0);
}
static void
find_btr_def_group (btr_def_group *all_btr_def_groups, btr_def def)
{
  if (insn_sets_btr_p (def->insn, 1, ((void *)0)))
    {
      btr_def_group this_group;
      rtx def_src = ((((((((enum rtx_code) (def->insn)->code) == INSN) || (((enum rtx_code) (def->insn)->code) == JUMP_INSN) || (((enum rtx_code) (def->insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((def->insn)->u.fld[5]).rtx1))->code) == SET ? (((def->insn)->u.fld[5]).rtx1) : single_set_2 (def->insn, (((def->insn)->u.fld[5]).rtx1))) : (rtx) 0))->u.fld[1]).rtx1);
      for (this_group = *all_btr_def_groups;
    this_group != ((void *)0);
    this_group = this_group->next)
 if (rtx_equal_p (def_src, this_group->src))
   break;
      if (!this_group)
 {
   this_group = (( ((&migrate_btrl_obstack))->temp = ((sizeof (struct btr_def_group_s))), ((((&migrate_btrl_obstack))->chunk_limit - ((&migrate_btrl_obstack))->next_free < ((&migrate_btrl_obstack))->temp) ? (_obstack_newchunk (((&migrate_btrl_obstack)), ((&migrate_btrl_obstack))->temp), 0) : 0), (((&migrate_btrl_obstack))->next_free += (((&migrate_btrl_obstack))->temp))), ( (((&migrate_btrl_obstack))->next_free == ((&migrate_btrl_obstack))->object_base ? ((((&migrate_btrl_obstack))->maybe_empty_object = 1), 0) : 0), ((&migrate_btrl_obstack))->temp = ((((&migrate_btrl_obstack))->object_base) - (char *) 0), ((&migrate_btrl_obstack))->next_free = (((((((&migrate_btrl_obstack))->next_free) - (char *) 0)+((&migrate_btrl_obstack))->alignment_mask) & ~ (((&migrate_btrl_obstack))->alignment_mask)) + (char *) 0), ((((&migrate_btrl_obstack))->next_free - (char *) ((&migrate_btrl_obstack))->chunk > ((&migrate_btrl_obstack))->chunk_limit - (char *) ((&migrate_btrl_obstack))->chunk) ? (((&migrate_btrl_obstack))->next_free = ((&migrate_btrl_obstack))->chunk_limit) : 0), ((&migrate_btrl_obstack))->object_base = ((&migrate_btrl_obstack))->next_free, ((((&migrate_btrl_obstack))->temp) + (char *) 0)))
                                          ;
   this_group->src = def_src;
   this_group->members = ((void *)0);
   this_group->next = *all_btr_def_groups;
   *all_btr_def_groups = this_group;
 }
      def->group = this_group;
      def->next_this_group = this_group->members;
      this_group->members = def;
    }
  else
    def->group = ((void *)0);
}
static btr_def
add_btr_def (fibheap_t all_btr_defs, basic_block bb, int insn_luid, rtx insn,
      unsigned int dest_reg, int other_btr_uses_before_def,
      btr_def_group *all_btr_def_groups)
{
  btr_def this
    = (( ((&migrate_btrl_obstack))->temp = ((sizeof (struct btr_def_s))), ((((&migrate_btrl_obstack))->chunk_limit - ((&migrate_btrl_obstack))->next_free < ((&migrate_btrl_obstack))->temp) ? (_obstack_newchunk (((&migrate_btrl_obstack)), ((&migrate_btrl_obstack))->temp), 0) : 0), (((&migrate_btrl_obstack))->next_free += (((&migrate_btrl_obstack))->temp))), ( (((&migrate_btrl_obstack))->next_free == ((&migrate_btrl_obstack))->object_base ? ((((&migrate_btrl_obstack))->maybe_empty_object = 1), 0) : 0), ((&migrate_btrl_obstack))->temp = ((((&migrate_btrl_obstack))->object_base) - (char *) 0), ((&migrate_btrl_obstack))->next_free = (((((((&migrate_btrl_obstack))->next_free) - (char *) 0)+((&migrate_btrl_obstack))->alignment_mask) & ~ (((&migrate_btrl_obstack))->alignment_mask)) + (char *) 0), ((((&migrate_btrl_obstack))->next_free - (char *) ((&migrate_btrl_obstack))->chunk > ((&migrate_btrl_obstack))->chunk_limit - (char *) ((&migrate_btrl_obstack))->chunk) ? (((&migrate_btrl_obstack))->next_free = ((&migrate_btrl_obstack))->chunk_limit) : 0), ((&migrate_btrl_obstack))->object_base = ((&migrate_btrl_obstack))->next_free, ((((&migrate_btrl_obstack))->temp) + (char *) 0)));
  this->bb = bb;
  this->luid = insn_luid;
  this->insn = insn;
  this->btr = dest_reg;
  this->cost = basic_block_freq (bb);
  this->has_ambiguous_use = 0;
  this->other_btr_uses_before_def = other_btr_uses_before_def;
  this->other_btr_uses_after_use = 0;
  this->next_this_bb = ((void *)0);
  this->next_this_group = ((void *)0);
  this->uses = ((void *)0);
  this->live_range = ((void *)0);
  find_btr_def_group (all_btr_def_groups, this);
  fibheap_insert (all_btr_defs, -this->cost, this);
  if (dump_file)
    fprintf (dump_file,
      "Found target reg definition: sets %u { bb %d, insn %d }%s priority %d\n",
      dest_reg, bb->index, (((insn)->u.fld[0]).rtint), (this->group ? "" : ":not const"),
      this->cost);
  return this;
}
static btr_user
new_btr_user (basic_block bb, int insn_luid, rtx insn)
{
  rtx *usep = find_btr_use ((((insn)->u.fld[5]).rtx1));
  rtx use;
  btr_user user = ((void *)0);
  if (usep)
    {
      int unambiguous_single_use;
      unambiguous_single_use = !btr_referenced_p ((((insn)->u.fld[5]).rtx1), usep);
      if (!unambiguous_single_use)
 usep = ((void *)0);
    }
  use = usep ? *usep : (rtx) 0;
  user = (( ((&migrate_btrl_obstack))->temp = ((sizeof (struct btr_user_s))), ((((&migrate_btrl_obstack))->chunk_limit - ((&migrate_btrl_obstack))->next_free < ((&migrate_btrl_obstack))->temp) ? (_obstack_newchunk (((&migrate_btrl_obstack)), ((&migrate_btrl_obstack))->temp), 0) : 0), (((&migrate_btrl_obstack))->next_free += (((&migrate_btrl_obstack))->temp))), ( (((&migrate_btrl_obstack))->next_free == ((&migrate_btrl_obstack))->object_base ? ((((&migrate_btrl_obstack))->maybe_empty_object = 1), 0) : 0), ((&migrate_btrl_obstack))->temp = ((((&migrate_btrl_obstack))->object_base) - (char *) 0), ((&migrate_btrl_obstack))->next_free = (((((((&migrate_btrl_obstack))->next_free) - (char *) 0)+((&migrate_btrl_obstack))->alignment_mask) & ~ (((&migrate_btrl_obstack))->alignment_mask)) + (char *) 0), ((((&migrate_btrl_obstack))->next_free - (char *) ((&migrate_btrl_obstack))->chunk > ((&migrate_btrl_obstack))->chunk_limit - (char *) ((&migrate_btrl_obstack))->chunk) ? (((&migrate_btrl_obstack))->next_free = ((&migrate_btrl_obstack))->chunk_limit) : 0), ((&migrate_btrl_obstack))->object_base = ((&migrate_btrl_obstack))->next_free, ((((&migrate_btrl_obstack))->temp) + (char *) 0)));
  user->bb = bb;
  user->luid = insn_luid;
  user->insn = insn;
  user->use = use;
  user->other_use_this_block = 0;
  user->next = ((void *)0);
  user->n_reaching_defs = 0;
  user->first_reaching_def = -1;
  if (dump_file)
    {
      fprintf (dump_file, "Uses target reg: { bb %d, insn %d }",
        bb->index, (((insn)->u.fld[0]).rtint));
      if (user->use)
 fprintf (dump_file, ": unambiguous use of reg %d\n",
   (((user->use)->u.fld[0]).rtuint));
    }
  return user;
}
static void
dump_hard_reg_set (HARD_REG_SET s)
{
  int reg;
  for (reg = 0; reg < 53; reg++)
    if ((!!((s)[(reg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4)))))))
      fprintf (dump_file, " %d", reg);
}
static void
dump_btrs_live (int bb)
{
  fprintf (dump_file, "BB%d live:", bb);
  dump_hard_reg_set (btrs_live[bb]);
  fprintf (dump_file, "\n");
}
static void
note_other_use_this_block (unsigned int regno, btr_user users_this_bb)
{
  btr_user user;
  for (user = users_this_bb; user != ((void *)0); user = user->next)
    if (user->use && (((user->use)->u.fld[0]).rtuint) == regno)
      user->other_use_this_block = 1;
}
typedef struct {
  btr_user users_this_bb;
  HARD_REG_SET btrs_written_in_block;
  HARD_REG_SET btrs_live_in_block;
  sbitmap bb_gen;
  sbitmap *btr_defset;
} defs_uses_info;
static void
note_btr_set (rtx dest, rtx set , void *data)
{
  defs_uses_info *info = data;
  int regno, end_regno;
  if (!(((enum rtx_code) (dest)->code) == REG))
    return;
  regno = (((dest)->u.fld[0]).rtuint);
  end_regno = regno + hard_regno_nregs[regno][((enum machine_mode) (dest)->mode)];
  for (; regno < end_regno; regno++)
    if ((!!((all_btrs)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
      {
 note_other_use_this_block (regno, info->users_this_bb);
 ((info->btrs_written_in_block)[(regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))));
 ((info->btrs_live_in_block)[(regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))));
 sbitmap_difference (info->bb_gen, info->bb_gen,
       info->btr_defset[regno - first_btr]);
      }
}
static void
compute_defs_uses_and_gen (fibheap_t all_btr_defs, btr_def *def_array,
      btr_user *use_array, sbitmap *btr_defset,
      sbitmap *bb_gen, HARD_REG_SET *btrs_written)
{
  int i;
  int insn_luid = 0;
  btr_def_group all_btr_def_groups = ((void *)0);
  defs_uses_info info;
  sbitmap_vector_zero (bb_gen, n_basic_blocks);
  for (i = 0; i < n_basic_blocks; i++)
    {
      basic_block bb = (((basic_block_info)->data.bb[(i)]));
      int reg;
      btr_def defs_this_bb = ((void *)0);
      rtx insn;
      rtx last;
      int can_throw = 0;
      info.users_this_bb = ((void *)0);
      info.bb_gen = bb_gen[i];
      info.btr_defset = btr_defset;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (info.btrs_live_in_block); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (info.btrs_written_in_block); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      for (reg = first_btr; reg <= last_btr; reg++)
 if ((!!((all_btrs)[(reg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4))))))
     && bitmap_bit_p (bb->global_live_at_start, reg))
   ((info.btrs_live_in_block)[(reg) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4))));
      for (insn = (bb)->head_, last = ((((bb)->end_)->u.fld[2]).rtx1);
    insn != last;
    insn = (((insn)->u.fld[2]).rtx1), insn_luid++)
 {
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       int regno;
       int insn_uid = (((insn)->u.fld[0]).rtint);
       if (insn_sets_btr_p (insn, 0, &regno))
  {
    btr_def def = add_btr_def (
        all_btr_defs, bb, insn_luid, insn, regno,
        (!!((info.btrs_live_in_block)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))),
        &all_btr_def_groups);
    def_array[insn_uid] = def;
    ((info.btrs_written_in_block)[(regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))));
    ((info.btrs_live_in_block)[(regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))));
    sbitmap_difference (bb_gen[i], bb_gen[i],
          btr_defset[regno - first_btr]);
    ((bb_gen[i])->elms [(insn_uid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (insn_uid) % ((unsigned) (8 * 4)));
    def->next_this_bb = defs_this_bb;
    defs_this_bb = def;
    ((btr_defset[regno - first_btr])->elms [(insn_uid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (insn_uid) % ((unsigned) (8 * 4)));
    note_other_use_this_block (regno, info.users_this_bb);
  }
       else
  {
    if (btr_referenced_p ((((insn)->u.fld[5]).rtx1), ((void *)0)))
      {
        btr_user user = new_btr_user (bb, insn_luid, insn);
        use_array[insn_uid] = user;
        if (user->use)
   ((info.btrs_live_in_block)[((((user->use)->u.fld[0]).rtuint)) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << (((((user->use)->u.fld[0]).rtuint)) % ((unsigned) (8 * 4))))
                         ;
        else
   {
     int reg;
     for (reg = first_btr; reg <= last_btr; reg++)
       if ((!!((all_btrs)[(reg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4))))))
    && refers_to_regno_p (reg, reg + 1, user->insn,
            ((void *)0)))
         {
    note_other_use_this_block (reg,
          info.users_this_bb);
    ((info.btrs_live_in_block)[(reg) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4))));
         }
     note_stores ((((insn)->u.fld[5]).rtx1), note_btr_set, &info);
   }
        user->next = info.users_this_bb;
        info.users_this_bb = user;
      }
    if (((enum rtx_code) (insn)->code) == CALL_INSN)
      {
        HARD_REG_SET *clobbered = &call_used_reg_set;
        HARD_REG_SET call_saved;
        rtx pat = (((insn)->u.fld[5]).rtx1);
        int i;
        if (((enum rtx_code) (pat)->code) == PARALLEL)
   for (i = (((((pat)->u.fld[0]).rtvec1))->num_elem) - 1; i >= 0; i--)
     if (((enum rtx_code) ((((((pat)->u.fld[0]).rtvec1))->elem[i]))->code) == RETURN)
       {
         do { HARD_REG_ELT_TYPE *scan_tp_ = (call_saved), *scan_fp_ = (call_used_reg_set); scan_tp_[0] = ~ scan_fp_[0]; scan_tp_[1] = ~ scan_fp_[1]; } while (0)
                          ;
         clobbered = &call_saved;
       }
        for (regno = first_btr; regno <= last_btr; regno++)
   if ((!!((*clobbered)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
     note_btr_set ((cfun->emit->x_regno_reg_rtx)[regno], (rtx) 0, &info);
      }
  }
     }
 }
      do { HARD_REG_ELT_TYPE *scan_tp_ = (btrs_live[i]), *scan_fp_ = (info.btrs_live_in_block); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      do { HARD_REG_ELT_TYPE *scan_tp_ = (btrs_written[i]), *scan_fp_ = (info.btrs_written_in_block); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      do { do { HARD_REG_ELT_TYPE *scan_tp_ = (btrs_live_at_end[i]); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0); reg_set_to_hard_reg_set (&btrs_live_at_end[i], bb->global_live_at_end); } while (0);
      for (insn = (bb)->end_; insn != (bb)->head_ && ! ((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)); )
 insn = (((insn)->u.fld[1]).rtx1);
      if (can_throw_internal (insn))
 {
   HARD_REG_SET tmp;
   do { HARD_REG_ELT_TYPE *scan_tp_ = (tmp), *scan_fp_ = (call_used_reg_set); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (tmp), *scan_fp_ = (all_btrs); scan_tp_[0] &= scan_fp_[0]; scan_tp_[1] &= scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (btrs_live_at_end[i]), *scan_fp_ = (tmp); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
   can_throw = 1;
 }
      if (can_throw || ((enum rtx_code) (insn)->code) == JUMP_INSN)
 {
   int regno;
   for (regno = first_btr; regno <= last_btr; regno++)
     if (refers_to_regno_p (regno, regno+1, insn, ((void *)0)))
       ((btrs_live_at_end[i])[(regno) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))));
 }
      if (dump_file)
 dump_btrs_live(i);
    }
}
static void
compute_kill (sbitmap *bb_kill, sbitmap *btr_defset,
       HARD_REG_SET *btrs_written)
{
  int i;
  int regno;
  sbitmap_vector_zero (bb_kill, n_basic_blocks);
  for (i = 0; i < n_basic_blocks; i++)
    {
      for (regno = first_btr; regno <= last_btr; regno++)
 if ((!!((all_btrs)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
     && (!!((btrs_written[i])[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
   sbitmap_a_or_b (bb_kill[i], bb_kill[i],
     btr_defset[regno - first_btr]);
    }
}
static void
compute_out (sbitmap *bb_out, sbitmap *bb_gen, sbitmap *bb_kill, int max_uid)
{
  int i;
  int changed;
  sbitmap bb_in = sbitmap_alloc (max_uid);
  for (i = 0; i < n_basic_blocks; i++)
    sbitmap_copy (bb_out[i], bb_gen[i]);
  changed = 1;
  while (changed)
    {
      changed = 0;
      for (i = 0; i < n_basic_blocks; i++)
 {
   sbitmap_union_of_preds (bb_in, bb_out, i);
   changed |= sbitmap_union_of_diff_cg (bb_out[i], bb_gen[i],
            bb_in, bb_kill[i]);
 }
    }
  free(bb_in);
}
static void
link_btr_uses (btr_def *def_array, btr_user *use_array, sbitmap *bb_out,
        sbitmap *btr_defset, int max_uid)
{
  int i;
  sbitmap reaching_defs = sbitmap_alloc (max_uid);
  for (i = 0; i < n_basic_blocks; i++)
    {
      basic_block bb = (((basic_block_info)->data.bb[(i)]));
      rtx insn;
      rtx last;
      sbitmap_union_of_preds (reaching_defs, bb_out, i);
      for (insn = (bb)->head_, last = ((((bb)->end_)->u.fld[2]).rtx1);
    insn != last;
    insn = (((insn)->u.fld[2]).rtx1))
 {
   if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
     {
       int insn_uid = (((insn)->u.fld[0]).rtint);
       btr_def def = def_array[insn_uid];
       btr_user user = use_array[insn_uid];
       if (def != ((void *)0))
  {
    sbitmap_difference (reaching_defs, reaching_defs,
          btr_defset[def->btr - first_btr]);
    ((reaching_defs)->elms [(insn_uid) / ((unsigned) (8 * 4))] |= (unsigned long) 1 << (insn_uid) % ((unsigned) (8 * 4)));
  }
       if (user != ((void *)0))
  {
    sbitmap reaching_defs_of_reg = sbitmap_alloc(max_uid);
    int uid;
    if (user->use)
      sbitmap_a_and_b (
        reaching_defs_of_reg,
        reaching_defs,
        btr_defset[(((user->use)->u.fld[0]).rtuint) - first_btr]);
    else
      {
        int reg;
        sbitmap_zero (reaching_defs_of_reg);
        for (reg = first_btr; reg <= last_btr; reg++)
   if ((!!((all_btrs)[(reg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4))))))
       && refers_to_regno_p (reg, reg + 1, user->insn,
        ((void *)0)))
     sbitmap_a_or_b_and_c (reaching_defs_of_reg,
       reaching_defs_of_reg,
       reaching_defs,
       btr_defset[reg - first_btr]);
      }
    do { unsigned int word_num_; unsigned int bit_num_ = (0) % (unsigned int) ((unsigned) (8 * 4)); unsigned int size_ = (reaching_defs_of_reg)->size; unsigned long *ptr_ = (reaching_defs_of_reg)->elms; for (word_num_ = (0) / (unsigned int) ((unsigned) (8 * 4)); word_num_ < size_; word_num_++, bit_num_ = 0) { unsigned long word_ = ptr_[word_num_]; if (word_ != 0) for (; bit_num_ < ((unsigned) (8 * 4)); bit_num_++) { unsigned long _mask = (unsigned long) 1 << bit_num_; if ((word_ & _mask) != 0) { word_ &= ~ _mask; (uid) = word_num_ * ((unsigned) (8 * 4)) + bit_num_; { btr_def def = def_array[uid]; if (dump_file) fprintf (dump_file, "Def in insn %d reaches use in insn %d\n", uid, insn_uid); user->n_reaching_defs++; if (!user->use) def->has_ambiguous_use = 1; if (user->first_reaching_def != -1) { def->has_ambiguous_use = 1; def_array[user->first_reaching_def] ->has_ambiguous_use = 1; if (dump_file) fprintf (dump_file, "(use %d has multiple reaching defs)\n", insn_uid); } else user->first_reaching_def = uid; if (user->other_use_this_block) def->other_btr_uses_after_use = 1; user->next = def->uses; def->uses = user; }; if (word_ == 0) break; } } } } while (0)
        ;
    free(reaching_defs_of_reg);
  }
       if (((enum rtx_code) (insn)->code) == CALL_INSN)
  {
    int regno;
    for (regno = first_btr; regno <= last_btr; regno++)
      if ((!!((all_btrs)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
   && (!!((call_used_reg_set)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
        sbitmap_difference (reaching_defs, reaching_defs,
       btr_defset[regno - first_btr]);
  }
     }
 }
    }
  free(reaching_defs);
}
static void
build_btr_def_use_webs (fibheap_t all_btr_defs)
{
  const int max_uid = get_max_uid ();
  btr_def *def_array = xcalloc (max_uid, sizeof (btr_def));
  btr_user *use_array = xcalloc (max_uid, sizeof (btr_user));
  sbitmap *btr_defset = sbitmap_vector_alloc (
      (last_btr - first_btr) + 1, max_uid);
  sbitmap *bb_gen = sbitmap_vector_alloc (n_basic_blocks, max_uid);
  HARD_REG_SET *btrs_written = xcalloc (n_basic_blocks, sizeof (HARD_REG_SET));
  sbitmap *bb_kill;
  sbitmap *bb_out;
  sbitmap_vector_zero (btr_defset, (last_btr - first_btr) + 1);
  compute_defs_uses_and_gen (all_btr_defs, def_array, use_array, btr_defset,
        bb_gen, btrs_written);
  bb_kill = sbitmap_vector_alloc (n_basic_blocks, max_uid);
  compute_kill (bb_kill, btr_defset, btrs_written);
  free (btrs_written);
  bb_out = sbitmap_vector_alloc (n_basic_blocks, max_uid);
  compute_out (bb_out, bb_gen, bb_kill, max_uid);
  free(bb_gen);
  free(bb_kill);
  link_btr_uses (def_array, use_array, bb_out, btr_defset, max_uid);
  free(bb_out);
  free(btr_defset);
  free (use_array);
  free (def_array);
}
static int
block_at_edge_of_live_range_p (int bb, btr_def def)
{
  if (def->other_btr_uses_before_def && (((basic_block_info)->data.bb[(bb)])) == def->bb)
    return 1;
  else if (def->other_btr_uses_after_use)
    {
      btr_user user;
      for (user = def->uses; user != ((void *)0); user = user->next)
 if ((((basic_block_info)->data.bb[(bb)])) == user->bb)
   return 1;
    }
  return 0;
}
static void
clear_btr_from_live_range (btr_def def)
{
  int bb;
  do { bitmap_element *ptr_ = (def->live_range)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (bb) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { if ((!def->other_btr_uses_before_def && !def->other_btr_uses_after_use) || !block_at_edge_of_live_range_p (bb, def)) { ((btrs_live[bb])[(def->btr) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((def->btr) % ((unsigned) (8 * 4))))); ((btrs_live_at_end[bb])[(def->btr) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((def->btr) % ((unsigned) (8 * 4))))); if (dump_file) dump_btrs_live (bb); } }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
}
static void
add_btr_to_live_range (btr_def def)
{
  int bb;
  do { bitmap_element *ptr_ = (def->live_range)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (bb) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { ((btrs_live[bb])[(def->btr) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((def->btr) % ((unsigned) (8 * 4)))); ((btrs_live_at_end[bb])[(def->btr) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((def->btr) % ((unsigned) (8 * 4)))); if (dump_file) dump_btrs_live (bb); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
       ;
}
static void
augment_live_range (bitmap live_range, HARD_REG_SET *btrs_live_in_range,
      basic_block head_bb, basic_block new_bb)
{
  basic_block *worklist, *tos;
  tos = worklist = xmalloc (sizeof (basic_block) * (n_basic_blocks + 1));
  if (dominated_by_p (CDI_DOMINATORS, new_bb, head_bb))
    *tos++ = new_bb;
  else if (dominated_by_p (CDI_DOMINATORS, head_bb, new_bb))
    {
      edge e;
      int new_block = new_bb->index;
      bitmap_set_bit (live_range, new_block);
      if (flag_btr_bb_exclusive)
 do { HARD_REG_ELT_TYPE *scan_tp_ = (*btrs_live_in_range), *scan_fp_ = (btrs_live[new_block]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
      else
 {
   do { HARD_REG_ELT_TYPE *scan_tp_ = (*btrs_live_in_range), *scan_fp_ = (btrs_live_at_end[new_block]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (*btrs_live_in_range), *scan_fp_ = (btrs_live[head_bb->index]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0);
 }
      if (dump_file)
 {
   fprintf (dump_file,
     "Adding end of block %d and rest of %d to live range\n",
     new_block, head_bb->index);
   fprintf (dump_file,"Now live btrs are ");
   dump_hard_reg_set (*btrs_live_in_range);
   fprintf (dump_file, "\n");
 }
      for (e = head_bb->pred; e; e = e->pred_next)
 *tos++ = e->src;
    }
  else
    fancy_abort ("gcc.c", 681276, "?");
  while (tos != worklist)
    {
      basic_block bb = *--tos;
      if (!bitmap_bit_p (live_range, bb->index))
 {
   edge e;
   bitmap_set_bit (live_range, bb->index);
   do { HARD_REG_ELT_TYPE *scan_tp_ = (*btrs_live_in_range), *scan_fp_ = (btrs_live[bb->index]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0)
                          ;
   if (dump_file)
     {
       fprintf (dump_file,
  "Adding block %d to live range\n", bb->index);
       fprintf (dump_file,"Now live btrs are ");
       dump_hard_reg_set (*btrs_live_in_range);
       fprintf (dump_file, "\n");
     }
   for (e = bb->pred; e != ((void *)0); e = e->pred_next)
     {
       basic_block pred = e->src;
       if (!bitmap_bit_p (live_range, pred->index))
  *tos++ = pred;
     }
 }
    }
  free (worklist);
}
static int
choose_btr (HARD_REG_SET used_btrs)
{
  int i;
  do { HARD_REG_ELT_TYPE *scan_xp_ = (all_btrs), *scan_yp_ = (used_btrs); if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) goto give_up; } while (0);
  for (i = 0; i < 53; i++)
    {
      int regno = reg_alloc_order[i];
      if ((!!((all_btrs)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4))))))
   && !(!!((used_btrs)[(regno) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((regno) % ((unsigned) (8 * 4)))))))
 return regno;
    }
give_up:
  return -1;
}
static void
btr_def_live_range (btr_def def, HARD_REG_SET *btrs_live_in_range)
{
  if (!def->live_range)
    {
      btr_user user;
      def->live_range = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
      bitmap_set_bit (def->live_range, def->bb->index);
      if (flag_btr_bb_exclusive)
 do { HARD_REG_ELT_TYPE *scan_tp_ = (*btrs_live_in_range), *scan_fp_ = (btrs_live[def->bb->index]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
      else
 do { HARD_REG_ELT_TYPE *scan_tp_ = (*btrs_live_in_range), *scan_fp_ = (btrs_live_at_end[def->bb->index]); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0)
                                       ;
      for (user = def->uses; user != ((void *)0); user = user->next)
 augment_live_range (def->live_range, btrs_live_in_range,
       def->bb, user->bb);
    }
  else
    {
      int bb;
      int def_bb = def->bb->index;
      do { HARD_REG_ELT_TYPE *scan_tp_ = (*btrs_live_in_range); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
      if (flag_btr_bb_exclusive)
 do { bitmap_element *ptr_ = (def->live_range)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (bb) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { do { HARD_REG_ELT_TYPE *scan_tp_ = (*btrs_live_in_range), *scan_fp_ = (btrs_live[bb]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
      else
 do { bitmap_element *ptr_ = (def->live_range)->first; unsigned int indx_ = (0) / ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))); unsigned bit_num_ = (0) % (unsigned) (8 * 4); unsigned word_num_ = (0) / (unsigned) (8 * 4) % ((128 + (8 * 4) - 1) / (8 * 4)); while (ptr_ != 0 && ptr_->indx < indx_) ptr_ = ptr_->next; if (ptr_ != 0 && ptr_->indx != indx_) { bit_num_ = 0; word_num_ = 0; } for (; ptr_ != 0; ptr_ = ptr_->next) { for (; word_num_ < ((128 + (8 * 4) - 1) / (8 * 4)); word_num_++) { BITMAP_WORD word_ = ptr_->bits[word_num_]; if (word_ != 0) { for (; bit_num_ < (unsigned) (8 * 4); bit_num_++) { BITMAP_WORD mask_ = ((BITMAP_WORD) 1) << bit_num_; if ((word_ & mask_) != 0) { word_ &= ~ mask_; (bb) = (ptr_->indx * ((unsigned) (((128 + (8 * 4) - 1) / (8 * 4)) * (unsigned) (8 * 4))) + word_num_ * (unsigned) (8 * 4) + bit_num_); { do { HARD_REG_ELT_TYPE *scan_tp_ = (*btrs_live_in_range), *scan_fp_ = ((def_bb == bb ? btrs_live_at_end : btrs_live) [bb]); scan_tp_[0] |= scan_fp_[0]; scan_tp_[1] |= scan_fp_[1]; } while (0); }; if (word_ == 0) break; } } } bit_num_ = 0; } word_num_ = 0; } } while (0)
      ;
    }
  if (!def->other_btr_uses_before_def &&
      !def->other_btr_uses_after_use)
    ((*btrs_live_in_range)[(def->btr) / ((unsigned) (8 * 4))] &= ~(((HARD_REG_ELT_TYPE) (1)) << ((def->btr) % ((unsigned) (8 * 4)))));
}
static void
combine_btr_defs (btr_def def, HARD_REG_SET *btrs_live_in_range)
{
  btr_def other_def;
  for (other_def = def->group->members;
       other_def != ((void *)0);
       other_def = other_def->next_this_group)
    {
      if (other_def != def
   && other_def->uses != ((void *)0)
   && ! other_def->has_ambiguous_use
   && dominated_by_p (CDI_DOMINATORS, other_def->bb, def->bb))
 {
   int btr;
   HARD_REG_SET combined_btrs_live;
   bitmap combined_live_range = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
   btr_user user;
   if (other_def->live_range == ((void *)0))
     {
       HARD_REG_SET dummy_btrs_live_in_range;
       btr_def_live_range (other_def, &dummy_btrs_live_in_range);
     }
   do { HARD_REG_ELT_TYPE *scan_tp_ = (combined_btrs_live), *scan_fp_ = (*btrs_live_in_range); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
   bitmap_copy (combined_live_range, def->live_range);
   for (user = other_def->uses; user != ((void *)0); user = user->next)
     augment_live_range (combined_live_range, &combined_btrs_live,
    def->bb, user->bb);
   btr = choose_btr (combined_btrs_live);
   if (btr != -1)
     {
       if (dump_file)
  fprintf (dump_file,
    "Combining def in insn %d with def in insn %d\n",
    (((other_def->insn)->u.fld[0]).rtint), (((def->insn)->u.fld[0]).rtint));
       def->btr = btr;
       user = other_def->uses;
       while (user != ((void *)0))
  {
    btr_user next = user->next;
    user->next = def->uses;
    def->uses = user;
    user = next;
  }
       for (user = def->uses; user != ((void *)0); user = user->next)
  remove_note (user->insn,
        find_regno_note (user->insn, REG_DEAD,
           (((user->use)->u.fld[0]).rtuint)));
       clear_btr_from_live_range (other_def);
       other_def->uses = ((void *)0);
       bitmap_copy (def->live_range, combined_live_range);
       if (other_def->other_btr_uses_after_use)
  def->other_btr_uses_after_use = 1;
       do { HARD_REG_ELT_TYPE *scan_tp_ = (*btrs_live_in_range), *scan_fp_ = (combined_btrs_live); scan_tp_[0] = scan_fp_[0]; scan_tp_[1] = scan_fp_[1]; } while (0);
       delete_insn (other_def->insn);
     }
   do { if (combined_live_range) { bitmap_clear (combined_live_range); free (combined_live_range); (combined_live_range) = 0; } } while (0);
 }
    }
}
static void
move_btr_def (basic_block new_def_bb, int btr, btr_def def, bitmap live_range,
      HARD_REG_SET *btrs_live_in_range)
{
  basic_block b = new_def_bb;
  rtx insp = (b)->head_;
  rtx old_insn = def->insn;
  rtx src;
  rtx btr_rtx;
  rtx new_insn;
  enum machine_mode btr_mode;
  btr_user user;
  rtx set;
  if (dump_file)
    fprintf(dump_file, "migrating to basic block %d, using reg %d\n",
     new_def_bb->index, btr);
  clear_btr_from_live_range (def);
  def->btr = btr;
  def->bb = new_def_bb;
  def->luid = 0;
  def->cost = basic_block_freq (new_def_bb);
  def->other_btr_uses_before_def
    = (!!((btrs_live[b->index])[(btr) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((btr) % ((unsigned) (8 * 4)))))) ? 1 : 0;
  bitmap_copy (def->live_range, live_range);
  combine_btr_defs (def, btrs_live_in_range);
  btr = def->btr;
  add_btr_to_live_range (def);
  if (((enum rtx_code) (insp)->code) == CODE_LABEL)
    insp = (((insp)->u.fld[2]).rtx1);
  if (def->other_btr_uses_before_def)
    {
      insp = (b)->end_;
      for (insp = (b)->end_; ! ((((enum rtx_code) (insp)->code) == INSN) || (((enum rtx_code) (insp)->code) == JUMP_INSN) || (((enum rtx_code) (insp)->code) == CALL_INSN)); insp = (((insp)->u.fld[1]).rtx1))
 if (insp == (b)->head_)
   fancy_abort ("gcc.c", 681522, "?");
      if (((enum rtx_code) (insp)->code) == JUMP_INSN || can_throw_internal (insp))
 insp = (((insp)->u.fld[1]).rtx1);
    }
  set = (((((enum rtx_code) (old_insn)->code) == INSN) || (((enum rtx_code) (old_insn)->code) == JUMP_INSN) || (((enum rtx_code) (old_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((old_insn)->u.fld[5]).rtx1))->code) == SET ? (((old_insn)->u.fld[5]).rtx1) : single_set_2 (old_insn, (((old_insn)->u.fld[5]).rtx1))) : (rtx) 0);
  src = (((set)->u.fld[1]).rtx1);
  btr_mode = ((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode);
  btr_rtx = gen_rtx_REG (btr_mode, btr);
  new_insn = gen_move_insn (btr_rtx, src);
  def->insn = emit_insn_after (new_insn, insp);
  regs_ever_live[btr] = 1;
  if (dump_file)
    fprintf (dump_file, "New pt is insn %d, inserted after insn %d\n",
      (((def->insn)->u.fld[0]).rtint), (((insp)->u.fld[0]).rtint));
  delete_insn (old_insn);
  for (user = def->uses; user != ((void *)0); user = user->next)
    {
      rtx replacement_rtx;
      if (((enum machine_mode) (user->use)->mode) == ((enum machine_mode) (btr_rtx)->mode)
   || ((enum machine_mode) (user->use)->mode) == VOIDmode)
 replacement_rtx = btr_rtx;
      else
 replacement_rtx = gen_rtx_REG (((enum machine_mode) (user->use)->mode), btr);
      replace_rtx (user->insn, user->use, replacement_rtx);
      user->use = replacement_rtx;
    }
}
static int
can_move_up (basic_block bb, rtx insn, int n_insns)
{
  while (insn != (bb)->head_ && n_insns > 0)
    {
      insn = (((insn)->u.fld[1]).rtx1);
      if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)))
 n_insns--;
    }
  return n_insns <= 0;
}
static int
migrate_btr_def (btr_def def, int min_cost)
{
  bitmap live_range;
  HARD_REG_SET btrs_live_in_range;
  int btr_used_near_def = 0;
  int def_basic_block_freq;
  basic_block try;
  int give_up = 0;
  int def_moved = 0;
  btr_user user;
  int def_latency = 1;
  if (dump_file)
    fprintf (dump_file,
      "Attempting to migrate pt from insn %d (cost = %d, min_cost = %d) ... ",
      (((def->insn)->u.fld[0]).rtint), def->cost, min_cost);
  if (!def->group || def->has_ambiguous_use)
    {
      if (dump_file)
 fprintf (dump_file, "it's not migratable\n");
      return 0;
    }
  if (!def->uses)
    {
      if (dump_file)
 fprintf (dump_file, "it's already combined with another pt\n");
      return 0;
    }
  btr_def_live_range (def, &btrs_live_in_range);
  live_range = bitmap_initialize (xmalloc (sizeof (bitmap_head)), 1);
  bitmap_copy (live_range, def->live_range);
  if (targetm.sched.use_dfa_pipeline_interface ())
    def_latency = insn_default_latency (def->insn);
  else
    def_latency = result_ready_cost (def->insn);
  def_latency *= issue_rate;
  for (user = def->uses; user != ((void *)0); user = user->next)
    {
      if (user->bb == def->bb
   && user->luid > def->luid
   && (def->luid + def_latency) > user->luid
   && ! can_move_up (def->bb, def->insn,
       (def->luid + def_latency) - user->luid))
 {
   btr_used_near_def = 1;
   break;
 }
    }
  def_basic_block_freq = basic_block_freq (def->bb);
  for (try = get_immediate_dominator (CDI_DOMINATORS, def->bb);
       !give_up && try && try != ENTRY_BLOCK_PTR && def->cost >= min_cost;
       try = get_immediate_dominator (CDI_DOMINATORS, try))
    {
      int try_freq = basic_block_freq (try);
      if (dump_file)
 fprintf (dump_file, "trying block %d ...", try->index);
      if (try_freq < def_basic_block_freq
   || (try_freq == def_basic_block_freq && btr_used_near_def))
 {
   int btr;
   augment_live_range (live_range, &btrs_live_in_range, def->bb, try);
   if (dump_file)
     {
       fprintf (dump_file, "Now btrs live in range are: ");
       dump_hard_reg_set (btrs_live_in_range);
       fprintf (dump_file, "\n");
     }
   btr = choose_btr (btrs_live_in_range);
   if (btr != -1)
     {
       move_btr_def (try, btr, def, live_range, &btrs_live_in_range);
       bitmap_copy(live_range, def->live_range);
       btr_used_near_def = 0;
       def_moved = 1;
       def_basic_block_freq = basic_block_freq (def->bb);
     }
   else
     {
       give_up = 1;
       if (dump_file)
  fprintf (dump_file,
    "giving up because there are no free target registers\n");
     }
 }
    }
  if (!def_moved)
    {
      give_up = 1;
      if (dump_file)
 fprintf (dump_file, "failed to move\n");
    }
  do { if (live_range) { bitmap_clear (live_range); free (live_range); (live_range) = 0; } } while (0);
  return !give_up;
}
static void
migrate_btr_defs (enum reg_class btr_class, int allow_callee_save)
{
  fibheap_t all_btr_defs = fibheap_new ();
  int reg;
  _obstack_begin ((&migrate_btrl_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
  if (dump_file)
    {
      int i;
      for (i = 0; i < n_basic_blocks; i++)
 {
   basic_block bb = (((basic_block_info)->data.bb[(i)]));
   fprintf(dump_file,
     "Basic block %d: count = %lld loop-depth = %d idom = %d\n",
     i, (long long) bb->count, bb->loop_depth,
     get_immediate_dominator (CDI_DOMINATORS, bb)->index);
 }
    }
  do { HARD_REG_ELT_TYPE *scan_tp_ = (all_btrs); scan_tp_[0] = 0; scan_tp_[1] = 0; } while (0);
  for (first_btr = -1, reg = 0; reg < 53; reg++)
    if ((!!((reg_class_contents[(int) btr_class])[(reg) / ((unsigned) (8 * 4))] & (((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4))))))
 && (allow_callee_save || call_used_regs[reg] || regs_ever_live[reg]))
      {
 ((all_btrs)[(reg) / ((unsigned) (8 * 4))] |= ((HARD_REG_ELT_TYPE) (1)) << ((reg) % ((unsigned) (8 * 4))));
 last_btr = reg;
 if (first_btr < 0)
   first_btr = reg;
      }
  btrs_live = xcalloc (n_basic_blocks, sizeof (HARD_REG_SET));
  btrs_live_at_end = xcalloc (n_basic_blocks, sizeof (HARD_REG_SET));
  build_btr_def_use_webs (all_btr_defs);
  while (!fibheap_empty (all_btr_defs))
    {
      btr_def def = fibheap_extract_min (all_btr_defs);
      int min_cost = -fibheap_min_key (all_btr_defs);
      if (migrate_btr_def (def, min_cost))
 {
   fibheap_insert (all_btr_defs, -def->cost, (void *) def);
   if (dump_file)
     {
       fprintf (dump_file,
  "Putting insn %d back on queue with priority %d\n",
  (((def->insn)->u.fld[0]).rtint), def->cost);
     }
 }
      else
 {
   if (def->live_range)
     do { if (def->live_range) { bitmap_clear (def->live_range); free (def->live_range); (def->live_range) = 0; } } while (0);
 }
    }
  free (btrs_live);
  free (btrs_live_at_end);
  ( (&migrate_btrl_obstack)->temp = (char *) (((void *)0)) - (char *) (&migrate_btrl_obstack)->chunk, (((&migrate_btrl_obstack)->temp > 0 && (&migrate_btrl_obstack)->temp < (&migrate_btrl_obstack)->chunk_limit - (char *) (&migrate_btrl_obstack)->chunk) ? (int) ((&migrate_btrl_obstack)->next_free = (&migrate_btrl_obstack)->object_base = (&migrate_btrl_obstack)->temp + (char *) (&migrate_btrl_obstack)->chunk) : (((obstack_free) ((&migrate_btrl_obstack), (&migrate_btrl_obstack)->temp + (char *) (&migrate_btrl_obstack)->chunk), 0), 0)));
  fibheap_delete (all_btr_defs);
}
void
branch_target_load_optimize (unsigned char after_prologue_epilogue_gen)
{
  enum reg_class class = targetm.branch_target_register_class ();
  if (class != NO_REGS)
    {
      if (targetm.sched.issue_rate)
 issue_rate = targetm.sched.issue_rate ();
      else
 issue_rate = 1;
      cleanup_cfg (optimize ? 1 : 0);
      life_analysis (((void *)0), 0);
      calculate_dominance_info (CDI_DOMINATORS);
      migrate_btr_defs (class,
         (targetm.branch_target_register_callee_saved
   (after_prologue_epilogue_gen)));
      free_dominance_info (CDI_DOMINATORS);
      update_life_info (((void *)0), UPDATE_LIFE_GLOBAL_RM_NOTES,
   1 | 4);
    }
}
static void
pp_set_real_maximum_length (pretty_printer *pp)
{
  if (!((pp)->ideal_maximum_length > 0)
      || (pp)->prefixing_rule == DIAGNOSTICS_SHOW_PREFIX_ONCE
      || (pp)->prefixing_rule == DIAGNOSTICS_SHOW_PREFIX_NEVER)
    pp->maximum_length = (pp)->ideal_maximum_length;
  else
    {
      int prefix_length = pp->prefix ? strlen (pp->prefix) : 0;
      if ((pp)->ideal_maximum_length - prefix_length < 32)
 pp->maximum_length = (pp)->ideal_maximum_length + 32;
      else
 pp->maximum_length = (pp)->ideal_maximum_length;
    }
}
static void
pp_clear_state (pretty_printer *pp)
{
  pp->emitted_prefix = 0;
  (pp)->indent1_skip = 0;
}
void
pp_write_text_to_stream (pretty_printer *pp)
{
  const char *text = pp_base_formatted_text ((pp));
  fputs_unlocked (text, pp->buffer->stream);
  pp_base_clear_output_area ((pp));
}
static void
pp_wrap_text (pretty_printer *pp, const char *start, const char *end)
{
  unsigned char wrapping_line = ((pp)->ideal_maximum_length > 0);
  while (start != end)
    {
      {
 const char *p = start;
 while (p != end && !(_sch_istable[(*p) & 0xff] & (unsigned short)(_sch_isblank)) && *p != '\n')
   ++p;
 if (wrapping_line
            && p - start >= pp_base_remaining_character_count_for_line ((pp)))
   pp_base_newline ((pp));
 pp_base_append_text ((pp), start, p);
 start = p;
      }
      if (start != end && (_sch_istable[(*start) & 0xff] & (unsigned short)(_sch_isblank)))
 {
   pp_base_character ((pp), ' ');
   ++start;
 }
      if (start != end && *start == '\n')
 {
   pp_base_newline ((pp));
   ++start;
 }
    }
}
static void
pp_maybe_wrap_text (pretty_printer *pp, const char *start, const char *end)
{
  if (((pp)->ideal_maximum_length > 0))
    pp_wrap_text (pp, start, end);
  else
    pp_base_append_text ((pp), start, end);
}
static void
pp_append_r (pretty_printer *pp, const char *start, int length)
{
  ( (&pp->buffer->obstack)->temp = (length), (((&pp->buffer->obstack)->next_free + (&pp->buffer->obstack)->temp > (&pp->buffer->obstack)->chunk_limit) ? (_obstack_newchunk ((&pp->buffer->obstack), (&pp->buffer->obstack)->temp), 0) : 0), memcpy (((&pp->buffer->obstack)->next_free), ((start)), ((&pp->buffer->obstack)->temp)), (&pp->buffer->obstack)->next_free += (&pp->buffer->obstack)->temp);
  pp->buffer->line_length += length;
}
void
pp_base_indent1 (pretty_printer *pp)
{
  int n = (pp)->indent1_skip;
  int i;
  for (i = 0; i < n; ++i)
    pp_base_character ((pp), ' ');
}
void
pp_base_format_text (pretty_printer *pp, text_info *text)
{
  for (; *text->format_spec; ++text->format_spec)
    {
      int precision = 0;
      unsigned char wide = 0;
      unsigned char quoted = 0;
      {
 const char *p = text->format_spec;
 while (*p && *p != '%')
   ++p;
 pp_wrap_text (pp, text->format_spec, p);
        text->format_spec = p;
      }
      if (*text->format_spec == '\0')
 break;
      if (*++text->format_spec == 'q')
 {
   quoted = 1;
   ++text->format_spec;
 }
      switch (*text->format_spec)
        {
        case 'w':
          wide = 1;
          ++text->format_spec;
          break;
        case 'l':
          do
            ++precision;
          while (*++text->format_spec == 'l');
          break;
        default:
          break;
        }
      if (precision > 2)
        fancy_abort ("gcc.c", 682044, "?");
      if (quoted)
 pp_base_string1 ((pp), open_quote);
      switch (*text->format_spec)
 {
 case 'c':
   pp_base_character ((pp), __builtin_va_arg(*text->args_ptr,int1));
   break;
 case 'd':
 case 'i':
          if (wide)
            do { sprintf ((pp)->buffer->digit_buffer, "%ld", (long) __builtin_va_arg(*text->args_ptr,_long)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0);
          else
            do switch (precision) { case 0: do { sprintf ((pp)->buffer->digit_buffer, "%d", __builtin_va_arg(*text->args_ptr,_int)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0); break; case 1: do { sprintf ((pp)->buffer->digit_buffer, "%ld", __builtin_va_arg(*text->args_ptr,_long)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0); break; case 2: do { sprintf ((pp)->buffer->digit_buffer, "%lld", __builtin_va_arg(*text->args_ptr,_long)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0); break; default: break; } while (0)
                                                        ;
   break;
 case 'o':
          if (wide)
            do { sprintf ((pp)->buffer->digit_buffer, "%lo", __builtin_va_arg(*text->args_ptr,_unsigned)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0)
                                                                        ;
          else
            do switch (precision) { case 0: do { sprintf ((pp)->buffer->digit_buffer, "%u", __builtin_va_arg(*text->args_ptr,_unsigned)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0); break; case 1: do { sprintf ((pp)->buffer->digit_buffer, "%lu", __builtin_va_arg(*text->args_ptr,_long)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0); break; case 2: do { sprintf ((pp)->buffer->digit_buffer, "%llu", __builtin_va_arg(*text->args_ptr,_long)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0); break; default: break; } while (0)
                                                             ;
   break;
 case 's':
   pp_base_string1 ((pp), __builtin_va_arg(*text->args_ptr,_constpc));
   break;
        case 'p':
          do { sprintf ((pp)->buffer->digit_buffer, "%p", __builtin_va_arg(*text->args_ptr,_voidp)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0);
          break;
 case 'u':
          if (wide)
            do { sprintf ((pp)->buffer->digit_buffer, "%lu", __builtin_va_arg(*text->args_ptr,_unsigned)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0)
                                                                        ;
          else
            do switch (precision) { case 0: do { sprintf ((pp)->buffer->digit_buffer, "%u", __builtin_va_arg(*text->args_ptr,_unsigned)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0); break; case 1: do { sprintf ((pp)->buffer->digit_buffer, "%lu", __builtin_va_arg(*text->args_ptr,_long)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0); break; case 2: do { sprintf ((pp)->buffer->digit_buffer, "%llu", __builtin_va_arg(*text->args_ptr,_long)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0); break; default: break; } while (0)
                                                             ;
   break;
 case 'x':
          if (wide)
            do { sprintf ((pp)->buffer->digit_buffer, "0x%lx", __builtin_va_arg(*text->args_ptr,_unsigned)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0)
                                                                        ;
          else
            do switch (precision) { case 0: do { sprintf ((pp)->buffer->digit_buffer, "%x", __builtin_va_arg(*text->args_ptr,_unsigned)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0); break; case 1: do { sprintf ((pp)->buffer->digit_buffer, "%lx", __builtin_va_arg(*text->args_ptr,_long)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0); break; case 2: do { sprintf ((pp)->buffer->digit_buffer, "%llx", __builtin_va_arg(*text->args_ptr,_long)); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0); break; default: break; } while (0)
                                                             ;
   break;
 case 'm':
   pp_base_string1 ((pp), xstrerror (text->err_no));
   break;
 case '%':
   pp_base_character ((pp), '%');
   break;
 case '<':
   pp_base_string1 ((pp), open_quote);
   break;
 case '>':
 case '\'':
   pp_base_string1 ((pp), close_quote);
   break;
        case 'H':
          {
            location_t *locus = __builtin_va_arg(*text->args_ptr,_location_t);
     expanded_location s = (*locus);
            pp_base_string1 ((pp), "file '");
            pp_base_string1 ((pp), s.file);
            pp_base_string1 ((pp), "', line ");
            do { sprintf ((pp)->buffer->digit_buffer, "%d", s.line); pp_base_string1 ((pp), (pp)->buffer->digit_buffer); } while (0);
          }
          break;
 case '.':
   {
     int n;
     const char *s;
     if (*++text->format_spec != '*')
       fancy_abort ("gcc.c", 682132, "?");
     else if (*++text->format_spec != 's')
       fancy_abort ("gcc.c", 682134, "?");
     n = __builtin_va_arg(*text->args_ptr,_int);
     s = __builtin_va_arg(*text->args_ptr,_constpc);
     pp_base_append_text ((pp), s, s + n);
   }
   break;
 default:
          if (!(pp)->format_decoder || !(*(pp)->format_decoder) (pp, text))
     {
       fancy_abort ("gcc.c", 682148, "?");
     }
 }
      if (quoted)
 pp_base_string1 ((pp), close_quote);
    }
}
void
pp_base_format_verbatim (pretty_printer *pp, text_info *text)
{
  diagnostic_prefixing_rule_t rule = (pp)->prefixing_rule;
  int line_cutoff = (pp)->ideal_maximum_length;
  pp->prefixing_rule = DIAGNOSTICS_SHOW_PREFIX_NEVER;
  (pp)->ideal_maximum_length = 0;
  pp_base_format_text ((pp), text);
  (pp)->prefixing_rule = rule;
  (pp)->ideal_maximum_length = line_cutoff;
}
void
pp_base_flush (pretty_printer *pp)
{
  pp_write_text_to_stream (pp);
  pp_clear_state (pp);
  fputc_unlocked ('\n', pp->buffer->stream);
  fflush (pp->buffer->stream);
  (pp)->need_newline = 0;
}
void
pp_base_set_line_maximum_length (pretty_printer *pp, int length)
{
  (pp)->ideal_maximum_length = length;
  pp_set_real_maximum_length (pp);
}
void
pp_base_clear_output_area (pretty_printer *pp)
{
  ( (&pp->buffer->obstack)->temp = (char *) (((&pp->buffer->obstack)->object_base)) - (char *) (&pp->buffer->obstack)->chunk, (((&pp->buffer->obstack)->temp > 0 && (&pp->buffer->obstack)->temp < (&pp->buffer->obstack)->chunk_limit - (char *) (&pp->buffer->obstack)->chunk) ? (int) ((&pp->buffer->obstack)->next_free = (&pp->buffer->obstack)->object_base = (&pp->buffer->obstack)->temp + (char *) (&pp->buffer->obstack)->chunk) : (((obstack_free) ((&pp->buffer->obstack), (&pp->buffer->obstack)->temp + (char *) (&pp->buffer->obstack)->chunk), 0), 0)));
  pp->buffer->line_length = 0;
}
void
pp_base_set_prefix (pretty_printer *pp, const char *prefix)
{
  pp->prefix = prefix;
  pp_set_real_maximum_length (pp);
  pp->emitted_prefix = 0;
  (pp)->indent1_skip = 0;
}
void
pp_base_destroy_prefix (pretty_printer *pp)
{
  if (pp->prefix != ((void *)0))
    {
      free ((char *) pp->prefix);
      pp->prefix = ((void *)0);
    }
}
void
pp_base_emit_prefix (pretty_printer *pp)
{
  if (pp->prefix != ((void *)0))
    {
      switch ((pp)->prefixing_rule)
 {
 default:
 case DIAGNOSTICS_SHOW_PREFIX_NEVER:
   break;
 case DIAGNOSTICS_SHOW_PREFIX_ONCE:
   if (pp->emitted_prefix)
     {
       pp_base_indent1 (pp);
       break;
     }
   (pp)->indent1_skip += 3;
 case DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE:
   {
     int prefix_length = strlen (pp->prefix);
     pp_append_r (pp, pp->prefix, prefix_length);
     pp->emitted_prefix = 1;
   }
   break;
 }
    }
}
void
pp_construct (pretty_printer *pp, const char *prefix, int maximum_length)
{
  memset (pp, 0, sizeof (pretty_printer));
  pp->buffer = xcalloc (1, sizeof (output_buffer));
  _obstack_begin ((&pp->buffer->obstack), 0, 0, (void *(*) (long)) ((void *(*) (long)) xmalloc), (void (*) (void *)) ((void (*) (void *)) free));
  pp->buffer->stream = stderr;
  (pp)->ideal_maximum_length = maximum_length;
  (pp)->prefixing_rule = DIAGNOSTICS_SHOW_PREFIX_ONCE;
  pp_base_set_prefix ((pp), prefix);
}
void
pp_base_append_text (pretty_printer *pp, const char *start, const char *end)
{
  if (pp->buffer->line_length == 0)
    {
      pp_base_emit_prefix ((pp));
      if (((pp)->ideal_maximum_length > 0))
 while (start != end && *start == ' ')
   ++start;
    }
  pp_append_r (pp, start, end - start);
}
const char *
pp_base_formatted_text (pretty_printer *pp)
{
  ( (((&pp->buffer->obstack)->next_free + 1 > (&pp->buffer->obstack)->chunk_limit) ? (_obstack_newchunk ((&pp->buffer->obstack), 1), 0) : 0), (*((&pp->buffer->obstack)->next_free)++ = ('\0')));
  return ((const char *) ((&(pp)->buffer->obstack)->object_base));
}
const char *
pp_base_last_position_in_text (const pretty_printer *pp)
{
  const char *p = ((void *)0);
  struct obstack *text = &pp->buffer->obstack;
  if (((text)->object_base) != ((text)->next_free))
    p = ((const char *) ((text)->next_free)) - 1;
  return p;
}
int
pp_base_remaining_character_count_for_line (pretty_printer *pp)
{
  return pp->maximum_length - pp->buffer->line_length;
}
void
pp_printf (pretty_printer *pp, const char *msg, ...)
{
  text_info text;
  va_list ap;
  __builtin_va_start(ap,msg);
  text.err_no = (*__errno_location ());
  text.args_ptr = &ap;
  text.format_spec = msg;
  pp_base_format_text ((pp), &text);
  __builtin_va_end(ap);
}
void
pp_verbatim (pretty_printer *pp, const char *msg, ...)
{
  text_info text;
  va_list ap;
  __builtin_va_start(ap,msg);
  text.err_no = (*__errno_location ());
  text.args_ptr = &ap;
  text.format_spec = msg;
  pp_base_format_verbatim ((pp), &text);
  __builtin_va_end(ap);
}
void
pp_base_newline (pretty_printer *pp)
{
  ( (((&pp->buffer->obstack)->next_free + 1 > (&pp->buffer->obstack)->chunk_limit) ? (_obstack_newchunk ((&pp->buffer->obstack), 1), 0) : 0), (*((&pp->buffer->obstack)->next_free)++ = ('\n')));
  pp->buffer->line_length = 0;
}
void
pp_base_character (pretty_printer *pp, int c)
{
  if (((pp)->ideal_maximum_length > 0)
      && pp_base_remaining_character_count_for_line ((pp)) <= 0)
    {
      pp_base_newline ((pp));
      if ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isspace)))
        return;
    }
  ( (((&pp->buffer->obstack)->next_free + 1 > (&pp->buffer->obstack)->chunk_limit) ? (_obstack_newchunk ((&pp->buffer->obstack), 1), 0) : 0), (*((&pp->buffer->obstack)->next_free)++ = (c)));
  ++pp->buffer->line_length;
}
void
pp_base_string1 (pretty_printer *pp, const char *str)
{
  pp_maybe_wrap_text (pp, str, str + (str ? strlen (str) : 0));
}
void
pp_base_maybe_space (pretty_printer *pp)
{
  if ((pp)->padding != pp_none)
    {
      pp_base_character ((pp), ' ');
      (pp)->padding = pp_none;
    }
}
static const size_t extra_order_size_table[] = {
  sizeof (struct tree_decl),
  sizeof (struct tree_list),
  (sizeof (struct tree_exp) + ((2) - 1) * sizeof (tree)),
  (__builtin_offsetof (rtx_def, u) + (2) * sizeof (rtunion)),
  (__builtin_offsetof (rtx_def, u) + (9) * sizeof (rtunion))
};
struct max_alignment {
  char c;
  union {
    long long i;
    long double d;
  } u;
};
static unsigned objects_per_page_table[((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0])))];
static size_t object_size_table[((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0])))];
static struct
{
  size_t mult;
  unsigned int shift;
}
inverse_table[((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0])))];
typedef struct page_entry
{
  struct page_entry *next;
  struct page_entry *prev;
  size_t bytes;
  char *page;
  unsigned long index_by_depth;
  unsigned short context_depth;
  unsigned short num_free_objects;
  unsigned short next_bit_hint;
  unsigned char order;
  unsigned long in_use_p[1];
} page_entry;
typedef page_entry **page_table[((size_t) 1 << (8))];
static struct globals
{
  page_entry *pages[((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0])))];
  page_entry *page_tails[((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0])))];
  page_table lookup;
  size_t pagesize;
  size_t lg_pagesize;
  size_t allocated;
  size_t allocated_last_gc;
  size_t bytes_mapped;
  unsigned long context_depth_allocations;
  unsigned long context_depth_collections;
  unsigned short context_depth;
  page_entry *free_pages;
  FILE *debug_file;
  unsigned int depth_in_use;
  unsigned int depth_max;
  unsigned int *depth;
  unsigned int by_depth_in_use;
  unsigned int by_depth_max;
  page_entry **by_depth;
  unsigned long **save_in_use;
} G;
static int ggc_allocated_p (const void *);
static page_entry *lookup_page_table_entry (const void *);
static void set_page_table_entry (void *, page_entry *);
static char *alloc_anon (char *, size_t);
static struct page_entry * alloc_page (unsigned);
static void free_page (struct page_entry *);
static void release_pages (void);
static void clear_marks (void);
static void sweep_pages (void);
static void ggc_recalculate_in_use_p (page_entry *);
static void compute_inverse (unsigned);
static void adjust_depth (void);
static void move_ptes_to_front (int, int);
void debug_print_page_list (int);
static void push_depth (unsigned int);
static void push_by_depth (page_entry *, unsigned long *);
struct alloc_zone *rtl_zone = ((void *)0);
struct alloc_zone *tree_zone = ((void *)0);
struct alloc_zone *garbage_zone = ((void *)0);
 static void
push_depth (unsigned int i)
{
  if (G.depth_in_use >= G.depth_max)
    {
      G.depth_max *= 2;
      G.depth = xrealloc (G.depth, G.depth_max * sizeof (unsigned int));
    }
  G.depth[G.depth_in_use++] = i;
}
 static void
push_by_depth (page_entry *p, unsigned long *s)
{
  if (G.by_depth_in_use >= G.by_depth_max)
    {
      G.by_depth_max *= 2;
      G.by_depth = xrealloc (G.by_depth,
        G.by_depth_max * sizeof (page_entry *));
      G.save_in_use = xrealloc (G.save_in_use,
    G.by_depth_max * sizeof (unsigned long *));
    }
  G.by_depth[G.by_depth_in_use] = p;
  G.save_in_use[G.by_depth_in_use++] = s;
}
static int
ggc_allocated_p (const void *p)
{
  page_entry ***base;
  size_t L1, L2;
  base = &G.lookup[0];
  L1 = (((size_t) (p) >> (32 - (8))) & ((1 << (8)) - 1));
  L2 = (((size_t) (p) >> G.lg_pagesize) & ((1 << (32 - (8) - G.lg_pagesize)) - 1));
  return base[L1] && base[L1][L2];
}
static page_entry *
lookup_page_table_entry (const void *p)
{
  page_entry ***base;
  size_t L1, L2;
  base = &G.lookup[0];
  L1 = (((size_t) (p) >> (32 - (8))) & ((1 << (8)) - 1));
  L2 = (((size_t) (p) >> G.lg_pagesize) & ((1 << (32 - (8) - G.lg_pagesize)) - 1));
  return base[L1][L2];
}
static void
set_page_table_entry (void *p, page_entry *entry)
{
  page_entry ***base;
  size_t L1, L2;
  base = &G.lookup[0];
  L1 = (((size_t) (p) >> (32 - (8))) & ((1 << (8)) - 1));
  L2 = (((size_t) (p) >> G.lg_pagesize) & ((1 << (32 - (8) - G.lg_pagesize)) - 1));
  if (base[L1] == ((void *)0))
    base[L1] = xcalloc (((size_t) 1 << (32 - (8) - G.lg_pagesize)), sizeof (page_entry *));
  base[L1][L2] = entry;
}
void
debug_print_page_list (int order)
{
  page_entry *p;
  printf ("Head=%p, Tail=%p:\n", (void *) G.pages[order],
   (void *) G.page_tails[order]);
  p = G.pages[order];
  while (p != ((void *)0))
    {
      printf ("%p(%1d|%3d) -> ", (void *) p, p->context_depth,
       p->num_free_objects);
      p = p->next;
    }
  printf ("NULL\n");
  fflush (stdout);
}
static char *
alloc_anon (char *pref , size_t size)
{
  char *page = mmap (pref, size, 0x1 | 0x2,
       0x02 | 0x20, -1, 0);
  if (page == (char *) ((void *) -1))
    {
      perror ("virtual memory exhausted");
      exit (1);
    }
  G.bytes_mapped += size;
  ;
  return page;
}
static struct page_entry *
alloc_page (unsigned order)
{
  struct page_entry *entry, *p, **pp;
  char *page;
  size_t num_objects;
  size_t bitmap_size;
  size_t page_entry_size;
  size_t entry_size;
  num_objects = objects_per_page_table[order];
  bitmap_size = (((((num_objects + 1)) + ((8 * 4)) - 1) / ((8 * 4))) * sizeof(long));
  page_entry_size = sizeof (page_entry) - sizeof (long) + bitmap_size;
  entry_size = num_objects * object_size_table[order];
  if (entry_size < G.pagesize)
    entry_size = G.pagesize;
  entry = ((void *)0);
  page = ((void *)0);
  for (pp = &G.free_pages, p = *pp; p; pp = &p->next, p = *pp)
    if (p->bytes == entry_size)
      break;
  if (p != ((void *)0))
    {
      *pp = p->next;
      page = p->page;
      if (p->order == order)
 {
   entry = p;
   memset (entry, 0, page_entry_size);
 }
      else
 free (p);
    }
  else if (entry_size == G.pagesize)
    {
      struct page_entry *e, *f = G.free_pages;
      int i;
      page = alloc_anon (((void *)0), G.pagesize * 16);
      for (i = 16 - 1; i >= 1; i--)
 {
   e = xcalloc (1, page_entry_size);
   e->order = order;
   e->bytes = G.pagesize;
   e->page = page + (i << G.lg_pagesize);
   e->next = f;
   f = e;
 }
      G.free_pages = f;
    }
  else
    page = alloc_anon (((void *)0), entry_size);
  if (entry == ((void *)0))
    entry = xcalloc (1, page_entry_size);
  entry->bytes = entry_size;
  entry->page = page;
  entry->context_depth = G.context_depth;
  entry->order = order;
  entry->num_free_objects = num_objects;
  entry->next_bit_hint = 1;
  G.context_depth_allocations |= (unsigned long)1 << G.context_depth;
  entry->in_use_p[num_objects / (8 * 4)]
    = (unsigned long) 1 << (num_objects % (8 * 4));
  set_page_table_entry (page, entry);
  if ((0) >= 2)
    fprintf (G.debug_file,
      "Allocating page at %p, object size=%lu, data %p-%p\n",
      (void *) entry, (unsigned long) object_size_table[order], page,
      page + entry_size - 1);
  return entry;
}
static void
adjust_depth (void)
{
  page_entry *top;
  if (G.by_depth_in_use)
    {
      top = G.by_depth[G.by_depth_in_use-1];
      while (G.depth_in_use > (size_t)top->context_depth+1)
 --G.depth_in_use;
    }
}
static void
free_page (page_entry *entry)
{
  if ((0) >= 2)
    fprintf (G.debug_file,
      "Deallocating page at %p, data %p-%p\n", (void *) entry,
      entry->page, entry->page + entry->bytes - 1);
  ;
  set_page_table_entry (entry->page, ((void *)0));
  if (G.by_depth_in_use > 1)
    {
      page_entry *top = G.by_depth[G.by_depth_in_use-1];
      if (entry->context_depth == top->context_depth)
 {
   int i = entry->index_by_depth;
   G.by_depth[i] = top;
   G.save_in_use[i] = G.save_in_use[G.by_depth_in_use-1];
   top->index_by_depth = i;
 }
      else
 {
   fancy_abort ("gcc.c", 683317, "?");
 }
    }
  --G.by_depth_in_use;
  adjust_depth ();
  entry->next = G.free_pages;
  G.free_pages = entry;
}
static void
release_pages (void)
{
  page_entry *p, *next;
  char *start;
  size_t len;
  p = G.free_pages;
  while (p)
    {
      start = p->page;
      next = p->next;
      len = p->bytes;
      free (p);
      p = next;
      while (p && p->page == start + len)
 {
   next = p->next;
   len += p->bytes;
   free (p);
   p = next;
 }
      munmap (start, len);
      G.bytes_mapped -= len;
    }
  G.free_pages = ((void *)0);
}
static unsigned char size_lookup[257] =
{
  3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4,
  4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
  5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
  6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  8
};
void *
ggc_alloc_typed_stat (enum gt_types_enum type , size_t size
        )
{
  return ggc_alloc_stat (size );
}
void *
ggc_alloc_zone_stat (size_t size, struct alloc_zone *zone
       )
{
  return ggc_alloc_stat (size );
}
void *
ggc_alloc_stat (size_t size )
{
  size_t order, word, bit, object_offset, object_size;
  struct page_entry *entry;
  void *result;
  if (size <= 256)
    {
      order = size_lookup[size];
      object_size = object_size_table[order];
    }
  else
    {
      order = 9;
      while (size > (object_size = object_size_table[order]))
 order++;
    }
  entry = G.pages[order];
  if (entry == ((void *)0) || entry->num_free_objects == 0)
    {
      struct page_entry *new_entry;
      new_entry = alloc_page (order);
      new_entry->index_by_depth = G.by_depth_in_use;
      push_by_depth (new_entry, 0);
      while (new_entry->context_depth >= G.depth_in_use)
 push_depth (G.by_depth_in_use-1);
      if (entry == ((void *)0))
 G.page_tails[order] = new_entry;
      else
 entry->prev = new_entry;
      new_entry->next = entry;
      new_entry->prev = ((void *)0);
      entry = new_entry;
      G.pages[order] = new_entry;
      new_entry->next_bit_hint = 1;
      word = 0;
      bit = 0;
      object_offset = 0;
    }
  else
    {
      unsigned hint = entry->next_bit_hint;
      word = hint / (8 * 4);
      bit = hint % (8 * 4);
      if ((entry->in_use_p[word] >> bit) & 1)
 {
   word = bit = 0;
   while (~entry->in_use_p[word] == 0)
     ++word;
   while ((entry->in_use_p[word] >> bit) & 1)
     ++bit;
   hint = word * (8 * 4) + bit;
 }
      entry->next_bit_hint = hint + 1;
      object_offset = hint * object_size;
    }
  entry->in_use_p[word] |= ((unsigned long) 1 << bit);
  if (--entry->num_free_objects == 0
      && entry->next != ((void *)0)
      && entry->next->num_free_objects > 0)
    {
      G.pages[order] = entry->next;
      entry->next->prev = ((void *)0);
      entry->next = ((void *)0);
      entry->prev = G.page_tails[order];
      G.page_tails[order]->next = entry;
      G.page_tails[order] = entry;
    }
  result = entry->page + object_offset;
  ;
  G.allocated += object_size;
  if ((0) >= 3)
    fprintf (G.debug_file,
      "Allocating object, requested size=%lu, actual=%lu at %p on %p\n",
      (unsigned long) size, (unsigned long) object_size, result,
      (void *) entry);
  return result;
}
int
ggc_set_mark (const void *p)
{
  page_entry *entry;
  unsigned bit, word;
  unsigned long mask;
  entry = lookup_page_table_entry (p);
  bit = (((((const char *) p) - entry->page) * inverse_table[entry->order].mult) >> inverse_table[entry->order].shift);
  word = bit / (8 * 4);
  mask = (unsigned long) 1 << (bit % (8 * 4));
  if (entry->in_use_p[word] & mask)
    return 1;
  entry->in_use_p[word] |= mask;
  entry->num_free_objects -= 1;
  if ((0) >= 4)
    fprintf (G.debug_file, "Marking %p\n", p);
  return 0;
}
int
ggc_marked_p (const void *p)
{
  page_entry *entry;
  unsigned bit, word;
  unsigned long mask;
  entry = lookup_page_table_entry (p);
  bit = (((((const char *) p) - entry->page) * inverse_table[entry->order].mult) >> inverse_table[entry->order].shift);
  word = bit / (8 * 4);
  mask = (unsigned long) 1 << (bit % (8 * 4));
  return (entry->in_use_p[word] & mask) != 0;
}
size_t
ggc_get_size (const void *p)
{
  page_entry *pe = lookup_page_table_entry (p);
  return object_size_table[pe->order];
}
void
ggc_free (void *p)
{
  page_entry *pe = lookup_page_table_entry (p);
  size_t order = pe->order;
  size_t size = object_size_table[order];
  if ((0) >= 3)
    fprintf (G.debug_file,
      "Freeing object, actual size=%lu, at %p on %p\n",
      (unsigned long) size, p, (void *) pe);
  ;
  {
    unsigned int bit_offset, word, bit;
    G.allocated -= size;
    bit_offset = (((((const char *) p) - pe->page) * inverse_table[order].mult) >> inverse_table[order].shift);
    word = bit_offset / (8 * 4);
    bit = bit_offset % (8 * 4);
    pe->in_use_p[word] &= ~(1UL << bit);
    if (pe->num_free_objects++ == 0)
      {
 page_entry *p, *q;
 q = pe->prev;
 if (q && q->num_free_objects == 0)
   {
     p = pe->next;
     q->next = p;
     if (!p)
       G.page_tails[order] = q;
     else
       p->prev = q;
     pe->next = G.pages[order];
     pe->prev = ((void *)0);
     G.pages[order]->prev = pe;
     G.pages[order] = pe;
   }
 pe->next_bit_hint = bit_offset;
      }
  }
}
static void
compute_inverse (unsigned order)
{
  size_t size, inv;
  unsigned int e;
  size = object_size_table[order];
  e = 0;
  while (size % 2 == 0)
    {
      e++;
      size >>= 1;
    }
  inv = size;
  while (inv * size != 1)
    inv = inv * (2 - inv*size);
  inverse_table[order].mult = inv;
  inverse_table[order].shift = e;
}
void
init_ggc (void)
{
  unsigned order;
  G.pagesize = getpagesize();
  G.lg_pagesize = exact_log2_wide ((unsigned long) (G.pagesize));
  G.debug_file = stdout;
  {
    char *p = alloc_anon (((void *)0), G.pagesize);
    struct page_entry *e;
    if ((size_t)p & (G.pagesize - 1))
      {
 p = alloc_anon (((void *)0), G.pagesize);
 if ((size_t)p & (G.pagesize - 1))
   fancy_abort ("gcc.c", 683843, "?");
      }
    e = xcalloc (1, sizeof (struct page_entry));
    e->bytes = G.pagesize;
    e->page = p;
    e->next = G.free_pages;
    G.free_pages = e;
  }
  for (order = 0; order < (8 * 4); ++order)
    object_size_table[order] = (size_t) 1 << order;
  for (order = (8 * 4); order < ((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0]))); ++order)
    {
      size_t s = extra_order_size_table[order - (8 * 4)];
      s = ((((s) + ((__builtin_offsetof (max_alignment, u))) - 1) / ((__builtin_offsetof (max_alignment, u)))) * ((__builtin_offsetof (max_alignment, u))));
      object_size_table[order] = s;
    }
  for (order = 0; order < ((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0]))); ++order)
    {
      objects_per_page_table[order] = G.pagesize / object_size_table[order];
      if (objects_per_page_table[order] == 0)
 objects_per_page_table[order] = 1;
      compute_inverse (order);
    }
  for (order = (8 * 4); order < ((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0]))); ++order)
    {
      int o;
      int i;
      o = size_lookup[object_size_table[order]];
      for (i = object_size_table[order]; size_lookup [i] == o; --i)
 size_lookup[i] = order;
    }
  G.depth_in_use = 0;
  G.depth_max = 10;
  G.depth = xmalloc (G.depth_max * sizeof (unsigned int));
  G.by_depth_in_use = 0;
  G.by_depth_max = 128;
  G.by_depth = xmalloc (G.by_depth_max * sizeof (page_entry *));
  G.save_in_use = xmalloc (G.by_depth_max * sizeof (unsigned long *));
}
struct alloc_zone *
new_ggc_zone (const char *name )
{
  return ((void *)0);
}
void
destroy_ggc_zone (struct alloc_zone *zone )
{
}
void
ggc_push_context (void)
{
  ++G.context_depth;
  if (G.context_depth >= (8 * 4))
    fancy_abort ("gcc.c", 683925, "?");
}
static void
ggc_recalculate_in_use_p (page_entry *p)
{
  unsigned int i;
  size_t num_objects;
  num_objects = ((p)->bytes / object_size_table[(p)->order]) + 1;
  p->num_free_objects = num_objects;
  for (i = 0;
       i < ((((((((num_objects)) + ((8 * 4)) - 1) / ((8 * 4))) * sizeof(long))) + (sizeof (*p->in_use_p)) - 1) / (sizeof (*p->in_use_p)))
                         ;
       ++i)
    {
      unsigned long j;
      p->in_use_p[i] |= ((G.save_in_use[p->index_by_depth]))[i];
      for (j = p->in_use_p[i]; j; j >>= 1)
 p->num_free_objects -= (j & 1);
    }
  if (p->num_free_objects >= num_objects)
    fancy_abort ("gcc.c", 683962, "?");
}
void
ggc_pop_context (void)
{
  unsigned long omask;
  unsigned int depth, i, e;
  depth = --G.context_depth;
  omask = (unsigned long)1 << (depth + 1);
  if (!((G.context_depth_allocations | G.context_depth_collections) & omask))
    return;
  G.context_depth_allocations |= (G.context_depth_allocations & omask) >> 1;
  G.context_depth_allocations &= omask - 1;
  G.context_depth_collections &= omask - 1;
  if (depth+1 < G.depth_in_use)
    e = G.depth[depth+1];
  else
    e = G.by_depth_in_use;
  if (depth < G.depth_in_use)
    {
      for (i = G.depth[depth]; i < e; ++i)
 {
   page_entry *p;
   ((void) &(G.save_in_use[i+8]));
   ((void) &(G.save_in_use[i+16]));
   if ((G.save_in_use[i]))
     {
       p = G.by_depth[i];
       ggc_recalculate_in_use_p (p);
       free ((G.save_in_use[i]));
       (G.save_in_use[i]) = 0;
     }
 }
    }
  for (i = e; i < G.by_depth_in_use; ++i)
    {
      page_entry *p = G.by_depth[i];
      p->context_depth = depth;
    }
  adjust_depth ();
}
static void
clear_marks (void)
{
  unsigned order;
  for (order = 2; order < ((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0]))); order++)
    {
      page_entry *p;
      for (p = G.pages[order]; p != ((void *)0); p = p->next)
 {
   size_t num_objects = ((p)->bytes / object_size_table[(p)->order]);
   size_t bitmap_size = (((((num_objects + 1)) + ((8 * 4)) - 1) / ((8 * 4))) * sizeof(long));
   if (p->context_depth < G.context_depth)
     {
       if (! ((G.save_in_use[p->index_by_depth])))
  ((G.save_in_use[p->index_by_depth])) = xmalloc (bitmap_size);
       memcpy (((G.save_in_use[p->index_by_depth])), p->in_use_p, bitmap_size);
     }
   p->num_free_objects = num_objects;
   memset (p->in_use_p, 0, bitmap_size);
   p->in_use_p[num_objects / (8 * 4)]
     = ((unsigned long) 1 << (num_objects % (8 * 4)));
 }
    }
}
static void
sweep_pages (void)
{
  unsigned order;
  for (order = 2; order < ((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0]))); order++)
    {
      page_entry * const last = G.page_tails[order];
      size_t num_objects;
      size_t live_objects;
      page_entry *p, *previous;
      int done;
      p = G.pages[order];
      if (p == ((void *)0))
 continue;
      previous = ((void *)0);
      do
 {
   page_entry *next = p->next;
   done = (p == last);
   num_objects = ((p)->bytes / object_size_table[(p)->order]);
   live_objects = num_objects - p->num_free_objects;
   G.allocated += object_size_table[order] * live_objects;
   if (p->context_depth < G.context_depth)
     ;
   else if (live_objects == 0)
     {
       if (! previous)
  G.pages[order] = next;
       else
  previous->next = next;
       if (next)
  next->prev = previous;
       if (p == G.page_tails[order])
  G.page_tails[order] = previous;
       free_page (p);
       p = previous;
     }
   else if (p->num_free_objects == 0)
     {
       if (p != G.page_tails[order])
  {
    p->next = ((void *)0);
    p->prev = G.page_tails[order];
    G.page_tails[order]->next = p;
    G.page_tails[order] = p;
    if (! previous)
      G.pages[order] = next;
    else
      previous->next = next;
    if (next)
      next->prev = previous;
    p = previous;
  }
     }
   else if (p != G.pages[order])
     {
       previous->next = p->next;
       if (p->next)
  p->next->prev = previous;
       p->next = G.pages[order];
       p->prev = ((void *)0);
       G.pages[order]->prev = p;
       G.pages[order] = p;
       if (G.page_tails[order] == p)
         G.page_tails[order] = previous;
       p = previous;
     }
   previous = p;
   p = next;
 }
      while (! done);
      for (p = G.pages[order]; p; p = p->next)
 if (p->context_depth != G.context_depth)
   ggc_recalculate_in_use_p (p);
    }
}
void
ggc_collect (void)
{
  float allocated_last_gc =
    ((G.allocated_last_gc) > ((size_t)(compiler_params[(int) GGC_MIN_HEAPSIZE].value1) * 1024) ? (G.allocated_last_gc) : ((size_t)(compiler_params[(int) GGC_MIN_HEAPSIZE].value1) * 1024));
  float min_expand = allocated_last_gc * (compiler_params[(int) GGC_MIN_EXPAND].value1) / 100;
  if (G.allocated < allocated_last_gc + min_expand)
    return;
  timevar_push (TV_GC);
  if (!quiet_flag)
    fprintf (stderr, " {GC %luk -> ", (unsigned long) G.allocated / 1024);
  if ((0) >= 2)
    fprintf (G.debug_file, "BEGIN COLLECTING\n");
  G.allocated = 0;
  release_pages ();
  G.context_depth_collections = ((unsigned long)1 << (G.context_depth + 1)) - 1;
  clear_marks ();
  ggc_mark_roots ();
  ;
  ;
  sweep_pages ();
  G.allocated_last_gc = G.allocated;
  timevar_pop (TV_GC);
  if (!quiet_flag)
    fprintf (stderr, "%luk}", (unsigned long) G.allocated / 1024);
  if ((0) >= 2)
    fprintf (G.debug_file, "END COLLECTING\n");
}
void
ggc_print_statistics (void)
{
  struct ggc_statistics stats;
  unsigned int i;
  size_t total_overhead = 0;
  memset (&stats, 0, sizeof (stats));
  G.allocated_last_gc = 0;
  ggc_print_common_statistics (stderr, &stats);
  release_pages ();
  fprintf (stderr,
           "Memory still allocated at the end of the compilation process\n");
  fprintf (stderr, "%-5s %10s  %10s  %10s\n",
    "Size", "Allocated", "Used", "Overhead");
  for (i = 0; i < ((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0]))); ++i)
    {
      page_entry *p;
      size_t allocated;
      size_t in_use;
      size_t overhead;
      if (!G.pages[i])
 continue;
      overhead = allocated = in_use = 0;
      for (p = G.pages[i]; p; p = p->next)
 {
   allocated += p->bytes;
   in_use +=
     (((p)->bytes / object_size_table[(p)->order]) - p->num_free_objects) * object_size_table[i];
   overhead += (sizeof (page_entry) - sizeof (long)
         + (((((((p)->bytes / object_size_table[(p)->order]) + 1)) + ((8 * 4)) - 1) / ((8 * 4))) * sizeof(long)));
 }
      fprintf (stderr, "%-5lu %10lu%c %10lu%c %10lu%c\n",
        (unsigned long) object_size_table[i],
        ((unsigned long) ((allocated) < 1024*10 ? (allocated) : ((allocated) < 1024*1024*10 ? (allocated) / 1024 : (allocated) / (1024*1024)))), ((allocated) < 1024*10 ? 'b' : ((allocated) < 1024*1024*10 ? 'k' : 'M')),
        ((unsigned long) ((in_use) < 1024*10 ? (in_use) : ((in_use) < 1024*1024*10 ? (in_use) / 1024 : (in_use) / (1024*1024)))), ((in_use) < 1024*10 ? 'b' : ((in_use) < 1024*1024*10 ? 'k' : 'M')),
        ((unsigned long) ((overhead) < 1024*10 ? (overhead) : ((overhead) < 1024*1024*10 ? (overhead) / 1024 : (overhead) / (1024*1024)))), ((overhead) < 1024*10 ? 'b' : ((overhead) < 1024*1024*10 ? 'k' : 'M')));
      total_overhead += overhead;
    }
  fprintf (stderr, "%-5s %10lu%c %10lu%c %10lu%c\n", "Total",
    ((unsigned long) ((G.bytes_mapped) < 1024*10 ? (G.bytes_mapped) : ((G.bytes_mapped) < 1024*1024*10 ? (G.bytes_mapped) / 1024 : (G.bytes_mapped) / (1024*1024)))), ((G.bytes_mapped) < 1024*10 ? 'b' : ((G.bytes_mapped) < 1024*1024*10 ? 'k' : 'M')),
    ((unsigned long) ((G.allocated) < 1024*10 ? (G.allocated) : ((G.allocated) < 1024*1024*10 ? (G.allocated) / 1024 : (G.allocated) / (1024*1024)))), ((G.allocated) < 1024*10 ? 'b' : ((G.allocated) < 1024*1024*10 ? 'k' : 'M')),
    ((unsigned long) ((total_overhead) < 1024*10 ? (total_overhead) : ((total_overhead) < 1024*1024*10 ? (total_overhead) / 1024 : (total_overhead) / (1024*1024)))), ((total_overhead) < 1024*10 ? 'b' : ((total_overhead) < 1024*1024*10 ? 'k' : 'M')));
}
struct ggc_pch_data
{
  struct ggc_pch_ondisk
  {
    unsigned totals[((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0])))];
  } d;
  size_t base[((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0])))];
  size_t written[((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0])))];
};
struct ggc_pch_data *
init_ggc_pch (void)
{
  return xcalloc (sizeof (struct ggc_pch_data), 1);
}
void
ggc_pch_count_object (struct ggc_pch_data *d, void *x ,
        size_t size, unsigned char is_string1 )
{
  unsigned order;
  if (size <= 256)
    order = size_lookup[size];
  else
    {
      order = 9;
      while (size > object_size_table[order])
 order++;
    }
  d->d.totals[order]++;
}
size_t
ggc_pch_total_size (struct ggc_pch_data *d)
{
  size_t a = 0;
  unsigned i;
  for (i = 0; i < ((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0]))); i++)
    a += ((((d->d.totals[i] * object_size_table[i]) + (G.pagesize) - 1) / (G.pagesize)) * (G.pagesize));
  return a;
}
void
ggc_pch_this_base (struct ggc_pch_data *d, void *base)
{
  size_t a = (size_t) base;
  unsigned i;
  for (i = 0; i < ((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0]))); i++)
    {
      d->base[i] = a;
      a += ((((d->d.totals[i] * object_size_table[i]) + (G.pagesize) - 1) / (G.pagesize)) * (G.pagesize));
    }
}
char *
ggc_pch_alloc_object (struct ggc_pch_data *d, void *x ,
        size_t size, unsigned char is_string1 )
{
  unsigned order;
  char *result;
  if (size <= 256)
    order = size_lookup[size];
  else
    {
      order = 9;
      while (size > object_size_table[order])
 order++;
    }
  result = (char *) d->base[order];
  d->base[order] += object_size_table[order];
  return result;
}
void
ggc_pch_prepare_write (struct ggc_pch_data *d ,
         FILE *f )
{
}
void
ggc_pch_write_object (struct ggc_pch_data *d ,
        FILE *f, void *x, void *newx ,
        size_t size, unsigned char is_string1 )
{
  unsigned order;
  static const char emptyBytes[256];
  if (size <= 256)
    order = size_lookup[size];
  else
    {
      order = 9;
      while (size > object_size_table[order])
 order++;
    }
  if (fwrite_unlocked (x, size, 1, f) != 1)
    fatal_error ("can't write PCH file: %m");
  if (size != object_size_table[order])
    {
      unsigned padding = object_size_table[order] - size;
      if (padding <= sizeof(emptyBytes))
        {
          if (fwrite_unlocked (emptyBytes, 1, padding, f) != padding)
            fatal_error ("can't write PCH file");
        }
      else
        {
          if (fseek (f, padding, 1) != 0)
            fatal_error ("can't write PCH file");
        }
    }
  d->written[order]++;
  if (d->written[order] == d->d.totals[order]
      && fseek (f, ((G.pagesize) - 1 - ((G.pagesize) - 1 + (d->d.totals[order] * object_size_table[order])) % (G.pagesize))
                  ,
  1) != 0)
    fatal_error ("can't write PCH file: %m");
}
void
ggc_pch_finish (struct ggc_pch_data *d, FILE *f)
{
  if (fwrite_unlocked (&d->d, sizeof (d->d), 1, f) != 1)
    fatal_error ("can't write PCH file: %m");
  free (d);
}
static void
move_ptes_to_front (int count_old_page_tables, int count_new_page_tables)
{
  unsigned i;
  page_entry **new_by_depth;
  unsigned long **new_save_in_use;
  new_by_depth = xmalloc (G.by_depth_max * sizeof (page_entry *));
  new_save_in_use = xmalloc (G.by_depth_max * sizeof (unsigned long *));
  memcpy (&new_by_depth[0],
   &G.by_depth[count_old_page_tables],
   count_new_page_tables * sizeof (void *));
  memcpy (&new_by_depth[count_new_page_tables],
   &G.by_depth[0],
   count_old_page_tables * sizeof (void *));
  memcpy (&new_save_in_use[0],
   &G.save_in_use[count_old_page_tables],
   count_new_page_tables * sizeof (void *));
  memcpy (&new_save_in_use[count_new_page_tables],
   &G.save_in_use[0],
   count_old_page_tables * sizeof (void *));
  free (G.by_depth);
  free (G.save_in_use);
  G.by_depth = new_by_depth;
  G.save_in_use = new_save_in_use;
  for (i = G.by_depth_in_use; i > 0; --i)
    {
      page_entry *p = G.by_depth[i-1];
      p->index_by_depth = i-1;
    }
  if (count_old_page_tables)
    push_depth (count_new_page_tables);
}
void
ggc_pch_read (FILE *f, void *addr)
{
  struct ggc_pch_ondisk d;
  unsigned i;
  char *offs = addr;
  unsigned long count_old_page_tables;
  unsigned long count_new_page_tables;
  count_old_page_tables = G.by_depth_in_use;
  clear_marks ();
  if (G.context_depth != 0)
    fancy_abort ("gcc.c", 684712, "?");
  G.context_depth = 1;
  for (i = 0; i < ((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0]))); i++)
    {
      page_entry *p;
      for (p = G.pages[i]; p != ((void *)0); p = p->next)
 p->context_depth = G.context_depth;
    }
  if (fread (&d, sizeof (d), 1, f) != 1)
    fatal_error ("can't read PCH file: %m");
  for (i = 0; i < ((8 * 4) + (sizeof (extra_order_size_table) / sizeof ((extra_order_size_table)[0]))); i++)
    {
      struct page_entry *entry;
      char *pte;
      size_t bytes;
      size_t num_objs;
      size_t j;
      if (d.totals[i] == 0)
 continue;
      bytes = ((((d.totals[i] * object_size_table[i]) + (G.pagesize) - 1) / (G.pagesize)) * (G.pagesize));
      num_objs = bytes / object_size_table[i];
      entry = xcalloc (1, (sizeof (struct page_entry)
      - sizeof (long)
      + (((((num_objs + 1)) + ((8 * 4)) - 1) / ((8 * 4))) * sizeof(long))));
      entry->bytes = bytes;
      entry->page = offs;
      entry->context_depth = 0;
      offs += bytes;
      entry->num_free_objects = 0;
      entry->order = i;
      for (j = 0;
    j + (8 * 4) <= num_objs + 1;
    j += (8 * 4))
 entry->in_use_p[j / (8 * 4)] = -1;
      for (; j < num_objs + 1; j++)
 entry->in_use_p[j / (8 * 4)]
   |= 1L << (j % (8 * 4));
      for (pte = entry->page;
    pte < entry->page + entry->bytes;
    pte += G.pagesize)
 set_page_table_entry (pte, entry);
      if (G.page_tails[i] != ((void *)0))
 G.page_tails[i]->next = entry;
      else
 G.pages[i] = entry;
      G.page_tails[i] = entry;
      push_by_depth (entry, 0);
    }
  count_new_page_tables = G.by_depth_in_use - count_old_page_tables;
  move_ptes_to_front (count_old_page_tables, count_new_page_tables);
  G.allocated = G.allocated_last_gc = offs - (char *)addr;
}
struct web_entry
{
  struct web_entry *pred;
  rtx reg;
};
static struct web_entry *unionfind_root (struct web_entry *);
static void unionfind_union (struct web_entry *, struct web_entry *);
static void union_defs (struct df *, struct ref *, struct web_entry *,
                        struct web_entry *);
static rtx entry_register (struct web_entry *, struct ref *, char *);
static void replace_ref (struct ref *, rtx);
static struct web_entry *
unionfind_root (struct web_entry *element)
{
  struct web_entry *element1 = element, *element2;
  while (element->pred)
    element = element->pred;
  while (element1->pred)
    {
      element2 = element1->pred;
      element1->pred = element;
      element1 = element2;
    }
  return element;
}
static void
unionfind_union (struct web_entry *first, struct web_entry *second)
{
  first = unionfind_root (first);
  second = unionfind_root (second);
  if (first == second)
    return;
  second->pred = first;
}
static void
union_defs (struct df *df, struct ref *use, struct web_entry *def_entry,
            struct web_entry *use_entry)
{
  rtx insn = ((use)->insn);
  struct df_link *link = ((use)->chain);
  struct df_link *use_link = ((df)->insns[(((insn)->u.fld[0]).rtint)].uses);
  struct df_link *def_link = ((df)->insns[(((insn)->u.fld[0]).rtint)].defs);
  rtx set = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0);
  while (use_link)
    {
      if (use != use_link->ref
   && (((enum rtx_code) ((use)->reg)->code) == SUBREG ? ((((use)->reg)->u.fld[0]).rtx1) : ((use)->reg)) == (((enum rtx_code) ((use_link->ref)->reg)->code) == SUBREG ? ((((use_link->ref)->reg)->u.fld[0]).rtx1) : ((use_link->ref)->reg)))
 unionfind_union (use_entry + ((use)->id),
           use_entry + ((use_link->ref)->id));
      use_link = use_link->next;
    }
  if (set
      && (((set)->u.fld[1]).rtx1) == ((use)->reg)
      && (((set)->u.fld[1]).rtx1) == (((set)->u.fld[0]).rtx1))
    {
      while (def_link)
 {
   if ((((enum rtx_code) ((use)->reg)->code) == SUBREG ? ((((use)->reg)->u.fld[0]).rtx1) : ((use)->reg)) == (((enum rtx_code) ((def_link->ref)->reg)->code) == SUBREG ? ((((def_link->ref)->reg)->u.fld[0]).rtx1) : ((def_link->ref)->reg)))
     unionfind_union (use_entry + ((use)->id),
        def_entry + ((def_link->ref)->id));
   def_link = def_link->next;
 }
    }
  while (link)
    {
      unionfind_union (use_entry + ((use)->id),
         def_entry + ((link->ref)->id));
      link = link->next;
    }
  if (use->flags & DF_REF_READ_WRITE)
    {
      struct df_link *link = ((df)->insns[(((((use)->insn))->u.fld[0]).rtint)].defs);
      while (link)
 {
   if ((((enum rtx_code) ((link->ref)->reg)->code) == SUBREG ? ((((link->ref)->reg)->u.fld[0]).rtx1) : ((link->ref)->reg)) == (((enum rtx_code) ((use)->reg)->code) == SUBREG ? ((((use)->reg)->u.fld[0]).rtx1) : ((use)->reg)))
     unionfind_union (use_entry + ((use)->id),
        def_entry + ((link->ref)->id));
   link = link->next;
 }
    }
}
static rtx
entry_register (struct web_entry *entry, struct ref *ref, char *used)
{
  struct web_entry *root;
  rtx reg, newreg;
  root = unionfind_root (entry);
  if (root->reg)
    return root->reg;
  reg = (((enum rtx_code) ((ref)->reg)->code) == SUBREG ? ((((ref)->reg)->u.fld[0]).rtx1) : ((ref)->reg));
  if (!used[(((reg)->u.fld[0]).rtuint)])
    newreg = reg, used[(((reg)->u.fld[0]).rtuint)] = 1;
  else if ((((reg))->volatil) && 0 )
    {
      newreg = reg;
      if (dump_file)
 fprintf (dump_file,
   "New web forced to keep reg=%i (user variable)\n",
   (((reg)->u.fld[0]).rtuint));
    }
  else
    {
      newreg = gen_reg_rtx (((enum machine_mode) (reg)->mode));
      (((newreg))->volatil) = (((reg))->volatil);
      (((newreg))->frame_related) = (((reg))->frame_related);
      (((newreg))->in_struct) = (((reg))->in_struct);
      (((newreg))->unchanging) = (((reg))->unchanging);
      (((newreg)->u.fld[2]).rtreg) = (((reg)->u.fld[2]).rtreg);
      if (dump_file)
 fprintf (dump_file, "Web oldreg=%i newreg=%i\n", (((reg)->u.fld[0]).rtuint),
   (((newreg)->u.fld[0]).rtuint));
    }
  root->reg = newreg;
  return newreg;
}
static void
replace_ref (struct ref *ref, rtx reg)
{
  rtx oldreg = (((enum rtx_code) ((ref)->reg)->code) == SUBREG ? ((((ref)->reg)->u.fld[0]).rtx1) : ((ref)->reg));
  rtx *loc = (((enum rtx_code) ((ref)->reg)->code) == SUBREG ? &((((ref)->reg)->u.fld[0]).rtx1) : ((ref)->loc));
  if (oldreg == reg)
    return;
  if (dump_file)
    fprintf (dump_file, "Updating insn %i (%i->%i)\n",
      (((((ref)->insn))->u.fld[0]).rtint), (((oldreg)->u.fld[0]).rtuint), (((reg)->u.fld[0]).rtuint));
  *loc = reg;
}
void
web_main (void)
{
  struct df *df;
  struct web_entry *def_entry;
  struct web_entry *use_entry;
  unsigned int i;
  int max = max_reg_num ();
  char *used;
  df = df_init ();
  df_analyze (df, 0, 16 | 2048);
  def_entry = xcalloc (df->n_defs, sizeof (struct web_entry));
  use_entry = xcalloc (df->n_uses, sizeof (struct web_entry));
  used = xcalloc (max, sizeof (char));
  if (dump_file)
    df_dump (df, 16 | 8, dump_file);
  for (i = 0; i < df->n_uses; i++)
    union_defs (df, df->uses[i], def_entry, use_entry);
  for (i = 0; i < df->n_uses; i++)
    replace_ref (df->uses[i], entry_register (use_entry + i, df->uses[i],
           used));
  for (i = 0; i < df->n_defs; i++)
    replace_ref (df->defs[i], entry_register (def_entry + i, df->defs[i],
           used));
  free (def_entry);
  free (use_entry);
  free (used);
  df_finish (df);
}
struct rtl_dump_file_info
{
  const char *const extension;
  char const debug_switch;
  char const graph_dump_p;
  char enabled;
  char initialized;
};
enum dump_file_index
{
  DFI_cgraph,
  DFI_rtl,
  DFI_sibling,
  DFI_eh,
  DFI_jump,
  DFI_null,
  DFI_cse,
  DFI_gcse,
  DFI_loop,
  DFI_bypass,
  DFI_cfg,
  DFI_bp,
  DFI_vpt,
  DFI_ce1,
  DFI_tracer,
  DFI_loop2,
  DFI_web,
  DFI_cse2,
  DFI_life,
  DFI_combine,
  DFI_ce2,
  DFI_regmove,
  DFI_sms,
  DFI_sched,
  DFI_lreg,
  DFI_greg,
  DFI_postreload,
  DFI_gcse2,
  DFI_flow2,
  DFI_peephole2,
  DFI_ce3,
  DFI_rnreg,
  DFI_bbro,
  DFI_branch_target_load,
  DFI_sched2,
  DFI_stack,
  DFI_vartrack,
  DFI_mach,
  DFI_dbr,
  DFI_MAX
};
static struct rtl_dump_file_info dump_file_tbl[DFI_MAX] =
{
  { "cgraph", 'U', 0, 0, 0 },
  { "rtl", 'r', 0, 0, 0 },
  { "sibling", 'i', 0, 0, 0 },
  { "eh", 'h', 0, 0, 0 },
  { "jump", 'j', 0, 0, 0 },
  { "null", 'u', 0, 0, 0 },
  { "cse", 's', 0, 0, 0 },
  { "gcse", 'G', 1, 0, 0 },
  { "loop", 'L', 1, 0, 0 },
  { "bypass", 'G', 1, 0, 0 },
  { "cfg", 'f', 1, 0, 0 },
  { "bp", 'b', 1, 0, 0 },
  { "vpt", 'V', 1, 0, 0 },
  { "ce1", 'C', 1, 0, 0 },
  { "tracer", 'T', 1, 0, 0 },
  { "loop2", 'L', 1, 0, 0 },
  { "web", 'Z', 0, 0, 0 },
  { "cse2", 't', 1, 0, 0 },
  { "life", 'f', 1, 0, 0 },
  { "combine", 'c', 1, 0, 0 },
  { "ce2", 'C', 1, 0, 0 },
  { "regmove", 'N', 1, 0, 0 },
  { "sms", 'm', 0, 0, 0 },
  { "sched", 'S', 1, 0, 0 },
  { "lreg", 'l', 1, 0, 0 },
  { "greg", 'g', 1, 0, 0 },
  { "postreload", 'o', 1, 0, 0 },
  { "gcse2", 'J', 0, 0, 0 },
  { "flow2", 'w', 1, 0, 0 },
  { "peephole2", 'z', 1, 0, 0 },
  { "ce3", 'E', 1, 0, 0 },
  { "rnreg", 'n', 1, 0, 0 },
  { "bbro", 'B', 1, 0, 0 },
  { "btl", 'd', 1, 0, 0 },
  { "sched2", 'R', 1, 0, 0 },
  { "stack", 'k', 1, 0, 0 },
  { "vartrack", 'V', 1, 0, 0 },
  { "mach", 'M', 1, 0, 0 },
  { "dbr", 'd', 0, 0, 0 }
};
static int
open_dump_file (enum dump_file_index index, tree decl)
{
  char *dump_name;
  const char *open_arg;
  char seq[16];
  if (! dump_file_tbl[index].enabled)
    return 0;
  timevar_push (TV_DUMP);
  if (dump_file != ((void *)0))
    fclose (dump_file);
  sprintf (seq, ".%02d.", index);
  if (! dump_file_tbl[index].initialized)
    {
      if (graph_dump_format != no_graph
   && dump_file_tbl[index].graph_dump_p)
 {
   dump_name = concat (seq, dump_file_tbl[index].extension, ((void *)0));
   clean_graph_dump_file (dump_base_name, dump_name);
   free (dump_name);
 }
      dump_file_tbl[index].initialized = 1;
      open_arg = "w";
    }
  else
    open_arg = "a";
  dump_name = concat (dump_base_name, seq,
        dump_file_tbl[index].extension, ((void *)0));
  dump_file = fopen (dump_name, open_arg);
  if (dump_file == ((void *)0))
    fatal_error ("can't open %s: %m", dump_name);
  free (dump_name);
  if (decl)
    fprintf (dump_file, "\n;; Function %s%s\n\n",
      lang_hooks.decl_printable_name (decl, 2),
      cfun->function_frequency == FUNCTION_FREQUENCY_HOT
      ? " (hot)"
      : cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED
      ? " (unlikely executed)"
      : "");
  timevar_pop (TV_DUMP);
  return 1;
}
static void
close_dump_file (enum dump_file_index index,
   void (*func) (FILE *, rtx),
   rtx insns)
{
  if (! dump_file)
    return;
  timevar_push (TV_DUMP);
  if (insns
      && graph_dump_format != no_graph
      && dump_file_tbl[index].graph_dump_p)
    {
      char seq[16];
      char *suffix;
      sprintf (seq, ".%02d.", index);
      suffix = concat (seq, dump_file_tbl[index].extension, ((void *)0));
      print_rtl_graph_with_bb (dump_base_name, suffix, insns);
      free (suffix);
    }
  if (func && insns)
    func (dump_file, insns);
  fflush (dump_file);
  fclose (dump_file);
  dump_file = ((void *)0);
  timevar_pop (TV_DUMP);
}
void
rest_of_decl_compilation (tree decl,
     const char *asmspec,
     int top_level,
     int at_end)
{
  {
    tree alias;
    alias = lookup_attribute ("alias", ((decl)->decl.attributes));
    if (alias)
      {
 alias = ((((alias)->list.value1))->list.value1);
 alias = get_identifier (((alias)->string11.pointer));
 assemble_alias (decl, alias);
      }
  }
  if (((decl)->common.static_flag) || ((decl)->decl.external_flag)
      || ((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
    {
      timevar_push (TV_VARCONST);
      if (asmspec)
 make_decl_rtl (decl, asmspec);
      if ((at_end
    || !((decl)->decl.defer_output)
    || (flag_unit_at_a_time && ((decl)->decl.initial)))
   && !((decl)->decl.external_flag))
 {
   if (flag_unit_at_a_time && !cgraph_global_info_ready
       && ((enum tree_code) (decl)->common.code) != FUNCTION_DECL && top_level)
     cgraph_varpool_finalize_decl (decl);
   else
     assemble_variable (decl, top_level, at_end, 0);
 }
      if (decl == last_assemble_variable_decl)
 {
   do { const char *name = ((((((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1))->u.fld[0]).rtstr); long size; if (!flag_inhibit_size_directive && ((decl)->decl.size) && ! at_end && top_level && ((decl)->decl.initial) == global_trees[TI_ERROR_MARK] && !size_directive_output) { size_directive_output = 1; size = int_size_in_bytes (((decl)->common.type)); do { long size_ = (size); fputs_unlocked ("\t.size\t", asm_out_file); assemble_name (asm_out_file, name); fprintf (asm_out_file, ", %ld\n", size_); } while (0); } } while (0)
                           ;
 }
      timevar_pop (TV_VARCONST);
    }
  else if (((decl)->decl.regdecl_flag) && asmspec != 0)
    {
      if (decode_reg_name (asmspec) >= 0)
 {
   set_decl_rtl (decl, (rtx) 0);
   make_decl_rtl (decl, asmspec);
 }
      else
 {
   error ("%Hinvalid register name `%s' for register variable",
   &((decl)->decl.locus), asmspec);
   ((decl)->decl.regdecl_flag) = 0;
   if (!top_level)
     expand_decl (decl);
 }
    }
  else if (((enum tree_code) (decl)->common.code) == TYPE_DECL)
    {
      timevar_push (TV_SYMOUT);
      debug_hooks->type_decl (decl, !top_level);
      timevar_pop (TV_SYMOUT);
    }
}
void
rest_of_type_compilation (tree type, int toplev)
{
  if ((global_dc)->diagnostic_count[(int) (DK_ERROR)] != 0 || (global_dc)->diagnostic_count[(int) (DK_SORRY)] != 0)
    return;
  timevar_push (TV_SYMOUT);
  debug_hooks->type_decl (((type)->common.chain), !toplev);
  timevar_pop (TV_SYMOUT);
}
static void
rest_of_handle_final (void)
{
  timevar_push (TV_FINAL);
  {
    rtx x;
    const char *fnname;
    x = ((current_function_decl)->decl.rtl ? (current_function_decl)->decl.rtl : (make_decl_rtl (current_function_decl, ((void *)0)), (current_function_decl)->decl.rtl));
    if (!(((enum rtx_code) (x)->code) == MEM))
      fancy_abort ("gcc.c", 685438, "?");
    x = (((x)->u.fld[0]).rtx1);
    if (((enum rtx_code) (x)->code) != SYMBOL_REF)
      fancy_abort ("gcc.c", 685441, "?");
    fnname = (((x)->u.fld[0]).rtstr);
    assemble_start_function (current_function_decl, fnname);
    final_start_function (get_insns (), asm_out_file, optimize);
    final (get_insns (), asm_out_file, optimize, 0);
    final_end_function ();
    assemble_end_function (current_function_decl, fnname);
    output_function_exception_table ();
    if (! quiet_flag)
      fflush (asm_out_file);
    free_basic_block_vars ();
    regset_release_memory ();
  }
  timevar_pop (TV_FINAL);
  ggc_collect ();
}
static void
rest_of_handle_stack_regs (void)
{
  if (optimize && !flag_schedule_insns_after_reload)
    {
      timevar_push (TV_SHORTEN_BRANCH);
      split_all_insns (1);
      timevar_pop (TV_SHORTEN_BRANCH);
    }
  timevar_push (TV_REG_STACK);
  open_dump_file (DFI_stack, current_function_decl);
  if (reg_to_stack (dump_file) && optimize)
    {
      if (cleanup_cfg (1 | 4
         | (flag_crossjumping ? 2 : 0))
   && (flag_reorder_blocks || flag_reorder_blocks_and_partition))
 {
   reorder_basic_blocks ();
   cleanup_cfg (1 | 4);
 }
    }
  close_dump_file (DFI_stack, print_rtl_with_bb, get_insns ());
  timevar_pop (TV_REG_STACK);
  ggc_collect ();
}
static void
rest_of_handle_variable_tracking (void)
{
  timevar_push (TV_VAR_TRACKING);
  open_dump_file (DFI_vartrack, current_function_decl);
  variable_tracking_main ();
  close_dump_file (DFI_vartrack, print_rtl_with_bb, get_insns ());
  timevar_pop (TV_VAR_TRACKING);
}
static void
rest_of_handle_machine_reorg (void)
{
  timevar_push (TV_MACH_DEP);
  open_dump_file (DFI_mach, current_function_decl);
  targetm.machine_dependent_reorg ();
  close_dump_file (DFI_mach, print_rtl, get_insns ());
  timevar_pop (TV_MACH_DEP);
  ggc_collect ();
}
static unsigned char
rest_of_handle_new_regalloc (void)
{
  int failure;
  delete_trivially_dead_insns (get_insns (), max_reg_num ());
  reg_alloc ();
  timevar_pop (TV_LOCAL_ALLOC);
  if (dump_file_tbl[DFI_lreg].enabled)
    {
      timevar_push (TV_DUMP);
      close_dump_file (DFI_lreg, ((void *)0), ((void *)0));
      timevar_pop (TV_DUMP);
    }
  timevar_push (TV_GLOBAL_ALLOC);
  open_dump_file (DFI_greg, current_function_decl);
  build_insn_chain (get_insns ());
  failure = reload (get_insns (), 0);
  timevar_pop (TV_GLOBAL_ALLOC);
  if (dump_file_tbl[DFI_greg].enabled)
    {
      timevar_push (TV_DUMP);
      dump_global_regs (dump_file);
      close_dump_file (DFI_greg, print_rtl_with_bb, get_insns ());
      timevar_pop (TV_DUMP);
    }
  if (failure)
    return 1;
  reload_completed = 1;
  return 0;
}
static unsigned char
rest_of_handle_old_regalloc (void)
{
  int failure;
  int rebuild_notes;
  allocate_reg_info (max_regno, 0, 1);
  ((reg_equiv_memory_loc_varray) = varray_grow (reg_equiv_memory_loc_varray, max_regno));
  reg_equiv_memory_loc = &((reg_equiv_memory_loc_varray)->data.rtx1[0]);
  allocate_initial_values (reg_equiv_memory_loc);
  regclass (get_insns (), max_reg_num (), dump_file);
  rebuild_notes = local_alloc ();
  timevar_pop (TV_LOCAL_ALLOC);
  if (rebuild_notes)
    {
      timevar_push (TV_JUMP);
      rebuild_jump_labels (get_insns ());
      purge_all_dead_edges (0);
      timevar_pop (TV_JUMP);
    }
  if (dump_file_tbl[DFI_lreg].enabled)
    {
      timevar_push (TV_DUMP);
      dump_flow_info (dump_file);
      dump_local_alloc (dump_file);
      close_dump_file (DFI_lreg, print_rtl_with_bb, get_insns ());
      timevar_pop (TV_DUMP);
    }
  ggc_collect ();
  timevar_push (TV_GLOBAL_ALLOC);
  open_dump_file (DFI_greg, current_function_decl);
  if (optimize)
    failure = global_alloc (dump_file);
  else
    {
      build_insn_chain (get_insns ());
      failure = reload (get_insns (), 0);
    }
  timevar_pop (TV_GLOBAL_ALLOC);
  if (dump_file_tbl[DFI_greg].enabled)
    {
      timevar_push (TV_DUMP);
      dump_global_regs (dump_file);
      close_dump_file (DFI_greg, print_rtl_with_bb, get_insns ());
      timevar_pop (TV_DUMP);
    }
  return failure;
}
static void
rest_of_handle_regrename (void)
{
  timevar_push (TV_RENAME_REGISTERS);
  open_dump_file (DFI_rnreg, current_function_decl);
  if (flag_rename_registers)
    regrename_optimize ();
  if (flag_cprop_registers)
    copyprop_hardreg_forward ();
  close_dump_file (DFI_rnreg, print_rtl_with_bb, get_insns ());
  timevar_pop (TV_RENAME_REGISTERS);
}
static void
rest_of_handle_reorder_blocks (void)
{
  unsigned char changed;
  open_dump_file (DFI_bbro, current_function_decl);
  changed = cleanup_cfg (1
    | (!0
       ? 16 : 0));
  if (flag_sched2_use_traces && flag_schedule_insns_after_reload)
    tracer ();
  if (flag_reorder_blocks || flag_reorder_blocks_and_partition)
    reorder_basic_blocks ();
  if (flag_reorder_blocks || flag_reorder_blocks_and_partition
      || (flag_sched2_use_traces && flag_schedule_insns_after_reload))
    changed |= cleanup_cfg (1
       | (!0
          ? 16 : 0));
  if (changed && 0)
    update_life_info (((void *)0), UPDATE_LIFE_GLOBAL_RM_NOTES,
        1);
  close_dump_file (DFI_bbro, print_rtl_with_bb, get_insns ());
}
static void
rest_of_handle_sched (void)
{
  timevar_push (TV_SMS);
  if (optimize > 0 && flag_modulo_sched)
    {
      open_dump_file (DFI_sms, current_function_decl);
      no_new_pseudos = 0;
      sms_schedule (dump_file);
      close_dump_file (DFI_sms, print_rtl, get_insns ());
      max_regno = max_reg_num ();
      allocate_reg_info (max_regno, 0, 0);
      update_life_info_in_dirty_blocks (UPDATE_LIFE_GLOBAL_RM_NOTES,
     (1
      | 8
      | 16));
      no_new_pseudos = 1;
    }
  timevar_pop (TV_SMS);
  timevar_push (TV_SCHED);
  if (optimize > 0 && flag_schedule_insns)
    {
      open_dump_file (DFI_sched, current_function_decl);
      schedule_insns (dump_file);
      close_dump_file (DFI_sched, print_rtl_with_bb, get_insns ());
    }
  timevar_pop (TV_SCHED);
  ggc_collect ();
}
static void
rest_of_handle_sched2 (void)
{
  timevar_push (TV_SCHED2);
  open_dump_file (DFI_sched2, current_function_decl);
  split_all_insns (1);
  if (flag_sched2_use_superblocks || flag_sched2_use_traces)
    {
      schedule_ebbs (dump_file);
      count_or_remove_death_notes (((void *)0), 1);
      cleanup_cfg (1);
    }
  else
    schedule_insns (dump_file);
  close_dump_file (DFI_sched2, print_rtl_with_bb, get_insns ());
  timevar_pop (TV_SCHED2);
  ggc_collect ();
}
static void
rest_of_handle_gcse2 (void)
{
  open_dump_file (DFI_gcse2, current_function_decl);
  gcse_after_reload_main (get_insns (), dump_file);
  rebuild_jump_labels (get_insns ());
  delete_trivially_dead_insns (get_insns (), max_reg_num ());
  close_dump_file (DFI_gcse2, print_rtl_with_bb, get_insns ());
  ggc_collect ();
}
static void
rest_of_handle_regmove (void)
{
  timevar_push (TV_REGMOVE);
  open_dump_file (DFI_regmove, current_function_decl);
  regmove_optimize (get_insns (), max_reg_num (), dump_file);
  cleanup_cfg (1 | 16);
  close_dump_file (DFI_regmove, print_rtl_with_bb, get_insns ());
  timevar_pop (TV_REGMOVE);
  ggc_collect ();
}
static void
rest_of_handle_tracer (void)
{
  open_dump_file (DFI_tracer, current_function_decl);
  if (dump_file)
    dump_flow_info (dump_file);
  tracer ();
  cleanup_cfg (1);
  reg_scan (get_insns (), max_reg_num (), 0);
  close_dump_file (DFI_tracer, print_rtl_with_bb, get_insns ());
}
static void
rest_of_handle_if_conversion (void)
{
  open_dump_file (DFI_ce1, current_function_decl);
  if (flag_if_conversion)
    {
      timevar_push (TV_IFCVT);
      if (dump_file)
 dump_flow_info (dump_file);
      cleanup_cfg (1);
      reg_scan (get_insns (), max_reg_num (), 0);
      if_convert (0);
      timevar_pop (TV_IFCVT);
    }
  timevar_push (TV_JUMP);
  cleanup_cfg (1);
  reg_scan (get_insns (), max_reg_num (), 0);
  timevar_pop (TV_JUMP);
  close_dump_file (DFI_ce1, print_rtl_with_bb, get_insns ());
}
static void
rest_of_handle_if_after_combine (void)
{
  timevar_push (TV_IFCVT);
  open_dump_file (DFI_ce2, current_function_decl);
  no_new_pseudos = 0;
  if_convert (1);
  no_new_pseudos = 1;
  close_dump_file (DFI_ce2, print_rtl_with_bb, get_insns ());
  timevar_pop (TV_IFCVT);
}
static void
rest_of_handle_web (void)
{
  open_dump_file (DFI_web, current_function_decl);
  timevar_push (TV_WEB);
  web_main ();
  delete_trivially_dead_insns (get_insns (), max_reg_num ());
  cleanup_cfg (1);
  timevar_pop (TV_WEB);
  close_dump_file (DFI_web, print_rtl_with_bb, get_insns ());
  reg_scan (get_insns (), max_reg_num (), 0);
}
static void
rest_of_handle_branch_prob (void)
{
  struct loops loops;
  timevar_push (TV_BRANCH_PROB);
  open_dump_file (DFI_bp, current_function_decl);
  if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities)
    branch_prob ();
  flow_loops_find (&loops, 1);
  if (dump_file)
    flow_loops_dump (&loops, dump_file, ((void *)0), 0);
  if (flag_guess_branch_prob)
    estimate_probability (&loops);
  flow_loops_free (&loops);
  free_dominance_info (CDI_DOMINATORS);
  close_dump_file (DFI_bp, print_rtl_with_bb, get_insns ());
  timevar_pop (TV_BRANCH_PROB);
}
static void
rest_of_handle_value_profile_transformations (void)
{
  open_dump_file (DFI_vpt, current_function_decl);
  timevar_push (TV_VPT);
  if (value_profile_transformations ())
    cleanup_cfg (1);
  timevar_pop (TV_VPT);
  close_dump_file (DFI_vpt, print_rtl_with_bb, get_insns ());
}
static void
rest_of_handle_cfg (void)
{
  open_dump_file (DFI_cfg, current_function_decl);
  if (dump_file)
    dump_flow_info (dump_file);
  if (optimize)
    cleanup_cfg (1
   | (flag_thread_jumps ? 32 : 0));
  if (optimize)
    {
      reg_scan (get_insns (), max_reg_num (), 1);
      mark_constant_function ();
    }
  close_dump_file (DFI_cfg, print_rtl_with_bb, get_insns ());
}
static void
rest_of_handle_jump_bypass (void)
{
  timevar_push (TV_BYPASS);
  open_dump_file (DFI_bypass, current_function_decl);
  cleanup_cfg (1);
  reg_scan (get_insns (), max_reg_num (), 1);
  if (bypass_jumps (dump_file))
    {
      rebuild_jump_labels (get_insns ());
      cleanup_cfg (1);
      delete_trivially_dead_insns (get_insns (), max_reg_num ());
    }
  close_dump_file (DFI_bypass, print_rtl_with_bb, get_insns ());
  timevar_pop (TV_BYPASS);
  ggc_collect ();
}
static void
rest_of_handle_combine (void)
{
  int rebuild_jump_labels_after_combine = 0;
  timevar_push (TV_COMBINE);
  open_dump_file (DFI_combine, current_function_decl);
  rebuild_jump_labels_after_combine
    = combine_instructions (get_insns (), max_reg_num ());
  if (rebuild_jump_labels_after_combine)
    {
      timevar_push (TV_JUMP);
      rebuild_jump_labels (get_insns ());
      timevar_pop (TV_JUMP);
      cleanup_cfg (1 | 16);
    }
  close_dump_file (DFI_combine, print_rtl_with_bb, get_insns ());
  timevar_pop (TV_COMBINE);
  ggc_collect ();
}
static void
rest_of_handle_life (void)
{
  open_dump_file (DFI_life, current_function_decl);
  regclass_init ();
  life_analysis (dump_file, (1 | 2 | 4 | 8 | 16 | 64 | 32 | 256));
  if (optimize)
    cleanup_cfg ((optimize ? 1 : 0) | 16
   | 256
   | (flag_thread_jumps ? 32 : 0));
  timevar_pop (TV_FLOW);
  if (extra_warnings)
    {
      setjmp_vars_warning (((current_function_decl)->decl.initial));
      setjmp_args_warning ();
    }
  if (optimize)
    {
      if (!flag_new_regalloc && initialize_uninitialized_subregs ())
 {
   allocate_reg_life_data ();
   update_life_info (((void *)0), UPDATE_LIFE_GLOBAL_RM_NOTES,
       2 | 4 | 1);
 }
    }
  no_new_pseudos = 1;
  close_dump_file (DFI_life, print_rtl_with_bb, get_insns ());
  ggc_collect ();
}
static void
rest_of_handle_cse (void)
{
  int tem;
  open_dump_file (DFI_cse, current_function_decl);
  if (dump_file)
    dump_flow_info (dump_file);
  timevar_push (TV_CSE);
  reg_scan (get_insns (), max_reg_num (), 1);
  tem = cse_main (get_insns (), max_reg_num (), 0, dump_file);
  if (tem)
    rebuild_jump_labels (get_insns ());
  if (purge_all_dead_edges (0))
    delete_unreachable_blocks ();
  delete_trivially_dead_insns (get_insns (), max_reg_num ());
  cse_not_expected = !flag_rerun_cse_after_loop && !flag_gcse;
  if (tem || optimize > 1)
    cleanup_cfg (1 | 8);
  timevar_pop (TV_CSE);
  close_dump_file (DFI_cse, print_rtl_with_bb, get_insns ());
}
static void
rest_of_handle_cse2 (void)
{
  int tem;
  timevar_push (TV_CSE2);
  open_dump_file (DFI_cse2, current_function_decl);
  if (dump_file)
    dump_flow_info (dump_file);
  tem = cse_main (get_insns (), max_reg_num (), 1, dump_file);
  cse_condition_code_reg ();
  purge_all_dead_edges (0);
  delete_trivially_dead_insns (get_insns (), max_reg_num ());
  if (tem)
    {
      timevar_push (TV_JUMP);
      rebuild_jump_labels (get_insns ());
      cleanup_cfg (1);
      timevar_pop (TV_JUMP);
    }
  reg_scan (get_insns (), max_reg_num (), 0);
  close_dump_file (DFI_cse2, print_rtl_with_bb, get_insns ());
  ggc_collect ();
  timevar_pop (TV_CSE2);
}
static void
rest_of_handle_gcse (void)
{
  int save_csb, save_cfj;
  int tem2 = 0, tem;
  timevar_push (TV_GCSE);
  open_dump_file (DFI_gcse, current_function_decl);
  tem = gcse_main (get_insns (), dump_file);
  rebuild_jump_labels (get_insns ());
  delete_trivially_dead_insns (get_insns (), max_reg_num ());
  save_csb = flag_cse_skip_blocks;
  save_cfj = flag_cse_follow_jumps;
  flag_cse_skip_blocks = flag_cse_follow_jumps = 0;
  if (flag_expensive_optimizations)
    {
      timevar_push (TV_CSE);
      reg_scan (get_insns (), max_reg_num (), 1);
      tem2 = cse_main (get_insns (), max_reg_num (), 0, dump_file);
      purge_all_dead_edges (0);
      delete_trivially_dead_insns (get_insns (), max_reg_num ());
      timevar_pop (TV_CSE);
      cse_not_expected = !flag_rerun_cse_after_loop;
    }
  while (tem || tem2)
    {
      tem = tem2 = 0;
      timevar_push (TV_JUMP);
      rebuild_jump_labels (get_insns ());
      cleanup_cfg (1 | 8);
      timevar_pop (TV_JUMP);
      if (flag_expensive_optimizations)
 {
   timevar_push (TV_CSE);
   reg_scan (get_insns (), max_reg_num (), 1);
   tem2 = cse_main (get_insns (), max_reg_num (), 0, dump_file);
   purge_all_dead_edges (0);
   delete_trivially_dead_insns (get_insns (), max_reg_num ());
   timevar_pop (TV_CSE);
 }
    }
  close_dump_file (DFI_gcse, print_rtl_with_bb, get_insns ());
  timevar_pop (TV_GCSE);
  ggc_collect ();
  flag_cse_skip_blocks = save_csb;
  flag_cse_follow_jumps = save_cfj;
}
static void
rest_of_handle_loop_optimize (void)
{
  int do_unroll, do_prefetch;
  timevar_push (TV_LOOP);
  delete_dead_jumptables ();
  cleanup_cfg (1 | 8);
  open_dump_file (DFI_loop, current_function_decl);
  free_bb_for_insn ();
  if (flag_unroll_loops)
    do_unroll = 4;
  else
    do_unroll = flag_old_unroll_loops ? 1 : 4;
  do_prefetch = flag_prefetch_loop_arrays ? 2 : 0;
  if (flag_rerun_loop_opt)
    {
      cleanup_barriers ();
      loop_optimize (get_insns (), dump_file, do_unroll);
      do_unroll = 0;
      delete_trivially_dead_insns (get_insns (), max_reg_num ());
      reg_scan (get_insns (), max_reg_num (), 1);
    }
  cleanup_barriers ();
  loop_optimize (get_insns (), dump_file, do_unroll | do_prefetch);
  delete_trivially_dead_insns (get_insns (), max_reg_num ());
  close_dump_file (DFI_loop, print_rtl, get_insns ());
  timevar_pop (TV_LOOP);
  find_basic_blocks (get_insns (), max_reg_num (), dump_file);
  ggc_collect ();
}
static void
rest_of_handle_loop2 (void)
{
  struct loops *loops;
  basic_block bb;
  if (!flag_move_loop_invariants
      && !flag_unswitch_loops
      && !flag_peel_loops
      && !flag_unroll_loops
      && !flag_branch_on_count_reg)
    return;
  timevar_push (TV_LOOP);
  open_dump_file (DFI_loop2, current_function_decl);
  if (dump_file)
    dump_flow_info (dump_file);
  cfg_layout_initialize ();
  loops = loop_optimizer_init (dump_file);
  if (loops)
    {
      if (flag_move_loop_invariants)
 move_loop_invariants (loops);
      if (flag_unswitch_loops)
 unswitch_loops (loops);
      if (flag_peel_loops || flag_unroll_loops)
 unroll_and_peel_loops (loops,
          (flag_peel_loops ? UAP_PEEL : 0) |
          (flag_unroll_loops ? UAP_UNROLL : 0) |
          (flag_unroll_all_loops ? UAP_UNROLL_ALL : 0));
      if (flag_branch_on_count_reg && (!0 && (x86_use_loop & (1 << ix86_tune))))
 doloop_optimize_loops (loops);
      loop_optimizer_finalize (loops, dump_file);
    }
  for (bb = ENTRY_BLOCK_PTR->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    if (bb->next_bb != EXIT_BLOCK_PTR)
      bb->rbi->next = bb->next_bb;
  cfg_layout_finalize ();
  cleanup_cfg (1);
  delete_trivially_dead_insns (get_insns (), max_reg_num ());
  reg_scan (get_insns (), max_reg_num (), 0);
  if (dump_file)
    dump_flow_info (dump_file);
  close_dump_file (DFI_loop2, print_rtl_with_bb, get_insns ());
  timevar_pop (TV_LOOP);
  ggc_collect ();
}
void
rest_of_compilation (void)
{
  ((current_function_decl)->decl.defer_output) = 0;
  ((current_function_decl)->decl.defer_output) = 0;
  rtl_register_cfg_hooks ();
  generating_concat_p = 0;
  cse_not_expected = ! optimize;
  finalize_block_changes ();
  if (open_dump_file (DFI_rtl, current_function_decl))
    close_dump_file (DFI_rtl, print_rtl, get_insns ());
  convert_from_eh_region_ranges ();
  {
    tree parent;
    for (parent = ((current_function_decl)->decl.context);
  parent != (tree) ((void *)0);
  parent = get_containing_scope (parent))
      if (((enum tree_code) (parent)->common.code) == FUNCTION_DECL)
 ((decl_assembler_name (parent))->common.static_flag) = 1;
  }
  if (cgraph_function_possibly_inlined_p (current_function_decl))
    (*debug_hooks->outlining_inline_function) (current_function_decl);
  remove_unnecessary_notes ();
  ggc_collect ();
  init_function_for_compilation ();
  ((current_function_decl)->common.asm_written_flag) = 1;
  rtx_equal_function_value_matters = 0;
  purge_hard_subreg_sets (get_insns ());
  if (rtl_dump_and_exit || flag_syntax_only || (global_dc)->diagnostic_count[(int) (DK_ERROR)] || (global_dc)->diagnostic_count[(int) (DK_SORRY)])
    goto exit_rest_of_compilation;
  timevar_push (TV_JUMP);
  open_dump_file (DFI_sibling, current_function_decl);
  if (!basic_block_info)
    {
      init_flow ();
      rebuild_jump_labels (get_insns ());
      find_exception_handler_labels ();
      find_basic_blocks (get_insns (), max_reg_num (), dump_file);
    }
  delete_unreachable_blocks ();
  if (flag_guess_branch_prob)
    {
      timevar_push (TV_BRANCH_PROB);
      note_prediction_to_br_prob ();
      timevar_pop (TV_BRANCH_PROB);
    }
  timevar_pop (TV_JUMP);
  if (cfun->tail_call_emit)
    fixup_tail_calls ();
  insn_locators_initialize ();
  if (doing_eh (0))
    {
      timevar_push (TV_JUMP);
      open_dump_file (DFI_eh, current_function_decl);
      finish_eh_generation ();
      close_dump_file (DFI_eh, print_rtl, get_insns ());
      timevar_pop (TV_JUMP);
    }
  emit_initial_value_sets ();
  unshare_all_rtl ();
  instantiate_virtual_regs ();
  open_dump_file (DFI_jump, current_function_decl);
  timevar_push (TV_JUMP);
  if (flag_guess_branch_prob)
    expected_value_to_br_prob ();
  delete_trivially_dead_insns (get_insns (), max_reg_num ());
  reg_scan (get_insns(), max_reg_num (), 0);
  if (dump_file)
    dump_flow_info (dump_file);
  cleanup_cfg ((optimize ? 1 : 0) | 8
        | (flag_thread_jumps ? 32 : 0));
  create_loop_notes ();
  purge_line_number_notes (get_insns ());
  close_dump_file (DFI_jump, print_rtl, get_insns ());
  if (optimize)
    cleanup_cfg (1 | 8);
  renumber_insns (dump_file);
  timevar_pop (TV_JUMP);
  close_dump_file (DFI_jump, print_rtl_with_bb, get_insns ());
  ggc_collect ();
  if (optimize > 0)
    rest_of_handle_cse ();
  ggc_collect ();
  if (optimize > 0)
    {
      if (flag_gcse)
 rest_of_handle_gcse ();
      if (flag_loop_optimize)
 rest_of_handle_loop_optimize ();
      if (flag_gcse)
 rest_of_handle_jump_bypass ();
    }
  timevar_push (TV_FLOW);
  rest_of_handle_cfg ();
  if (!flag_tree_based_profiling
      && (optimize > 0 || profile_arc_flag
   || flag_test_coverage || flag_branch_probabilities))
    {
      rtl_register_profile_hooks ();
      rtl_register_value_prof_hooks ();
      rest_of_handle_branch_prob ();
      if (flag_branch_probabilities
   && flag_profile_values
   && flag_value_profile_transformations)
 rest_of_handle_value_profile_transformations ();
      if (flag_profile_values)
 count_or_remove_death_notes (((void *)0), 1);
    }
  if (optimize > 0)
    rest_of_handle_if_conversion ();
  if (flag_tracer)
    rest_of_handle_tracer ();
  if (optimize > 0
      && flag_loop_optimize2)
    rest_of_handle_loop2 ();
  if (flag_web)
    rest_of_handle_web ();
  if (flag_rerun_cse_after_loop)
    rest_of_handle_cse2 ();
  cse_not_expected = 1;
  rest_of_handle_life ();
  if (optimize > 0)
    rest_of_handle_combine ();
  if (flag_if_conversion)
    rest_of_handle_if_after_combine ();
  if (flag_reorder_blocks_and_partition && !flag_exceptions)
    {
      no_new_pseudos = 0;
      partition_hot_cold_basic_blocks ();
      allocate_reg_life_data ();
      update_life_info (((void *)0), UPDATE_LIFE_GLOBAL_RM_NOTES,
   2 | 4 | 1);
      no_new_pseudos = 1;
    }
  if (optimize > 0 && (flag_regmove || flag_expensive_optimizations))
    rest_of_handle_regmove ();
  split_all_insns (1);
  timevar_push (TV_MODE_SWITCH);
  no_new_pseudos = 0;
  optimize_mode_switching (((void *)0));
  no_new_pseudos = 1;
  timevar_pop (TV_MODE_SWITCH);
  recompute_reg_usage (get_insns (), !optimize_size);
  rest_of_handle_sched ();
  current_function_is_leaf = leaf_function_p ();
  timevar_push (TV_LOCAL_ALLOC);
  open_dump_file (DFI_lreg, current_function_decl);
  if (flag_new_regalloc)
    {
      if (rest_of_handle_new_regalloc ())
 goto exit_rest_of_compilation;
    }
  else
    {
      if (rest_of_handle_old_regalloc ())
 goto exit_rest_of_compilation;
    }
  ggc_collect ();
  open_dump_file (DFI_postreload, current_function_decl);
  if (optimize > 0)
    {
      timevar_push (TV_RELOAD_CSE_REGS);
      reload_cse_regs (get_insns ());
      if (flag_non_call_exceptions)
 purge_all_dead_edges (0);
      timevar_pop (TV_RELOAD_CSE_REGS);
    }
  close_dump_file (DFI_postreload, print_rtl_with_bb, get_insns ());
  if (optimize > 0 && flag_gcse_after_reload)
    rest_of_handle_gcse2 ();
  timevar_push (TV_FLOW2);
  open_dump_file (DFI_flow2, current_function_decl);
    split_all_insns (0);
    if (flag_branch_target_load_optimize)
      {
 open_dump_file (DFI_branch_target_load, current_function_decl);
 branch_target_load_optimize ( 0);
 close_dump_file (DFI_branch_target_load, print_rtl_with_bb, get_insns ());
 ggc_collect ();
      }
  if (! targetm.late_rtl_prologue_epilogue)
    {
      if (optimize)
 cleanup_cfg (1);
      thread_prologue_and_epilogue_insns (get_insns ());
      epilogue_completed = 1;
    }
  if (optimize)
    {
      life_analysis (dump_file, (1 | 8 | 16 | 64 | 256));
      cleanup_cfg (1 | 16
     | (flag_crossjumping ? 2 : 0));
 combine_stack_adjustments ();
      ggc_collect ();
    }
  flow2_completed = 1;
  close_dump_file (DFI_flow2, print_rtl_with_bb, get_insns ());
  timevar_pop (TV_FLOW2);
  if (optimize > 0 && flag_peephole2)
    {
      timevar_push (TV_PEEPHOLE2);
      open_dump_file (DFI_peephole2, current_function_decl);
      peephole2_optimize (dump_file);
      close_dump_file (DFI_peephole2, print_rtl_with_bb, get_insns ());
      timevar_pop (TV_PEEPHOLE2);
    }
  open_dump_file (DFI_ce3, current_function_decl);
  if (optimize)
    cleanup_cfg (1
   | 16
   | (flag_crossjumping ? 2 : 0));
  if (flag_if_conversion2)
    {
      timevar_push (TV_IFCVT2);
      if_convert (1);
      timevar_pop (TV_IFCVT2);
    }
  close_dump_file (DFI_ce3, print_rtl_with_bb, get_insns ());
  if (optimize > 0)
    {
      if (flag_rename_registers || flag_cprop_registers)
 rest_of_handle_regrename ();
      rest_of_handle_reorder_blocks ();
    }
  if (flag_branch_target_load_optimize2)
    {
      if (flag_branch_target_load_optimize)
 warning ("branch target register load optimization is not intended to be run twice");
      open_dump_file (DFI_branch_target_load, current_function_decl);
      branch_target_load_optimize ( 1);
      close_dump_file (DFI_branch_target_load, print_rtl_with_bb, get_insns ());
      ggc_collect ();
    }
  if (targetm.late_rtl_prologue_epilogue)
    {
      thread_prologue_and_epilogue_insns (get_insns ());
      epilogue_completed = 1;
      if (optimize)
 life_analysis (dump_file, (1 | 8 | 16 | 64 | 256));
    }
  if (optimize > 0 && flag_schedule_insns_after_reload)
    rest_of_handle_sched2 ();
  rest_of_handle_stack_regs ();
  compute_alignments ();
  if (flag_var_tracking)
    rest_of_handle_variable_tracking ();
  free_bb_for_insn ();
  if (targetm.machine_dependent_reorg != 0)
    rest_of_handle_machine_reorg ();
  purge_line_number_notes (get_insns ());
  cleanup_barriers ();
  convert_to_eh_region_ranges ();
  timevar_push (TV_SHORTEN_BRANCH);
  shorten_branches (get_insns ());
  timevar_pop (TV_SHORTEN_BRANCH);
  set_nothrow_function_flags ();
  if (current_function_nothrow)
    ((current_function_decl)->common.nothrow_flag) = 1;
  rest_of_handle_final ();
  timevar_push (TV_SYMOUT);
  (*debug_hooks->function_decl) (current_function_decl);
  timevar_pop (TV_SYMOUT);
 exit_rest_of_compilation:
  coverage_end_function ();
  reload_completed = 0;
  epilogue_completed = 0;
  flow2_completed = 0;
  no_new_pseudos = 0;
  timevar_push (TV_FINAL);
  init_insn_lengths ();
  init_temp_slots ();
  free_basic_block_vars ();
  free_bb_for_insn ();
  timevar_pop (TV_FINAL);
  if (targetm.binds_local_p (current_function_decl))
    {
      int pref = cfun->preferred_stack_boundary;
      if (cfun->recursive_call_emit
          && cfun->stack_alignment_needed > cfun->preferred_stack_boundary)
 pref = cfun->stack_alignment_needed;
      cgraph_rtl_info (current_function_decl)->preferred_incoming_stack_boundary
        = pref;
    }
  init_recog_no_volatile ();
  free_after_parsing (cfun);
}
void
init_optimization_passes (void)
{
  open_dump_file (DFI_cgraph, ((void *)0));
  cgraph_dump_file = dump_file;
  dump_file = ((void *)0);
}
void
finish_optimization_passes (void)
{
  if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities)
    {
      timevar_push (TV_DUMP);
      open_dump_file (DFI_bp, ((void *)0));
      end_branch_prob ();
      close_dump_file (DFI_bp, ((void *)0), (rtx) 0);
      timevar_pop (TV_DUMP);
    }
  if (optimize > 0 && open_dump_file (DFI_combine, ((void *)0)))
    {
      timevar_push (TV_DUMP);
      dump_combine_total_stats (dump_file);
      close_dump_file (DFI_combine, ((void *)0), (rtx) 0);
      timevar_pop (TV_DUMP);
    }
  dump_file = cgraph_dump_file;
  cgraph_dump_file = ((void *)0);
  close_dump_file (DFI_cgraph, ((void *)0), (rtx) 0);
  if (graph_dump_format != no_graph)
    {
      int i;
      for (i = 0; i < (int) DFI_MAX; ++i)
 if (dump_file_tbl[i].initialized && dump_file_tbl[i].graph_dump_p)
   {
     char seq[16];
     char *suffix;
     sprintf (seq, ".%02d.", i);
     suffix = concat (seq, dump_file_tbl[i].extension, ((void *)0));
     finish_graph_dump_file (dump_base_name, suffix);
     free (suffix);
   }
    }
}
unsigned char
enable_rtl_dump_file (int letter)
{
  unsigned char matched = 0;
  int i;
  if (letter == 'a')
    {
      for (i = 0; i < (int) DFI_MAX; ++i)
 dump_file_tbl[i].enabled = 1;
      matched = 1;
    }
  else
    {
      for (i = 0; i < (int) DFI_MAX; ++i)
 if (letter == dump_file_tbl[i].debug_switch)
   {
     dump_file_tbl[i].enabled = 1;
     matched = 1;
   }
    }
  return matched;
}
struct tree_opt_pass pass_rest_of_compilation =
{
  "rest of compilation",
  ((void *)0),
  rest_of_compilation,
  ((void *)0),
  ((void *)0),
  0,
  TV_REST_OF_COMPILATION,
  (1 << 8),
  0,
  (1 << 8),
  0,
  (1 << 2)
};
static void
rtl_gen_edge_profiler (int edgeno, edge e)
{
  rtx ref = rtl_coverage_counter_ref (0, edgeno);
  rtx tmp;
  enum machine_mode mode = ((enum machine_mode) (ref)->mode);
  rtx sequence;
  start_sequence ();
  ref = validize_mem (ref);
  tmp = expand_simple_binop (mode, PLUS, ref, (const_int_rtx[64 +1]),
        ref, 0, OPTAB_WIDEN);
  if (tmp != ref)
    emit_move_insn (copy_rtx (ref), tmp);
  sequence = get_insns ();
  end_sequence ();
  insert_insn_on_edge (sequence, e);
  rebuild_jump_labels (e->insns.r);
}
static void
rtl_gen_interval_profiler (struct histogram_value *value1, unsigned tag,
         unsigned base)
{
  unsigned gcov_size = tree_low_cst (((global_trees[TI_INTDI_TYPE])->type.size), 1);
  enum machine_mode mode = mode_for_size (gcov_size, MODE_INT, 0);
  rtx mem_ref, tmp, tmp1, mr, val;
  rtx sequence;
  rtx more_label = gen_label_rtx ();
  rtx less_label = gen_label_rtx ();
  rtx end_of_code_label = gen_label_rtx ();
  int per_counter = gcov_size / 8;
  edge e = split_block (((((rtx)value1->insn)->u.fld[3]).bb),
     ((((rtx)value1->insn)->u.fld[1]).rtx1));
  start_sequence ();
  if (value1->seq)
    emit_insn (value1->seq);
  mr = gen_reg_rtx ((0 ? DImode : SImode));
  tmp = rtl_coverage_counter_ref (tag, base);
  tmp = force_reg ((0 ? DImode : SImode), (((tmp)->u.fld[0]).rtx1));
  val = expand_simple_binop (value1->mode, MINUS,
        copy_rtx (value1->value1),
        gen_rtx_CONST_INT (VOIDmode, (long) (value1->hdata.intvl.int_start)),
        (rtx) 0, 0, OPTAB_WIDEN);
  if (value1->hdata.intvl.may_be_more)
    do_compare_rtx_and_jump (copy_rtx (val), gen_rtx_CONST_INT (VOIDmode, (long) (value1->hdata.intvl.steps)),
        GE, 0, value1->mode, (rtx) 0, (rtx) 0, more_label);
  if (value1->hdata.intvl.may_be_less)
    do_compare_rtx_and_jump (copy_rtx (val), (const_int_rtx[64]), LT, 0, value1->mode,
        (rtx) 0, (rtx) 0, less_label);
  tmp1 = expand_simple_binop (value1->mode, MULT,
         copy_rtx (val), gen_rtx_CONST_INT (VOIDmode, (long) (per_counter)),
         (rtx) 0, 0, OPTAB_WIDEN);
  tmp1 = expand_simple_binop ((0 ? DImode : SImode), PLUS, copy_rtx (tmp), tmp1, mr,
         0, OPTAB_WIDEN);
  if (tmp1 != mr)
    emit_move_insn (copy_rtx (mr), tmp1);
  if (value1->hdata.intvl.may_be_more
      || value1->hdata.intvl.may_be_less)
    {
      emit_jump_insn (gen_jump (end_of_code_label));
      emit_barrier ();
    }
  if (value1->hdata.intvl.may_be_more)
    {
      emit_label (more_label);
      tmp1 = expand_simple_binop ((0 ? DImode : SImode), PLUS, copy_rtx (tmp),
      gen_rtx_CONST_INT (VOIDmode, (long) (per_counter * value1->hdata.intvl.steps)),
      mr, 0, OPTAB_WIDEN);
      if (tmp1 != mr)
 emit_move_insn (copy_rtx (mr), tmp1);
      if (value1->hdata.intvl.may_be_less)
 {
   emit_jump_insn (gen_jump (end_of_code_label));
   emit_barrier ();
 }
    }
  if (value1->hdata.intvl.may_be_less)
    {
      emit_label (less_label);
      tmp1 = expand_simple_binop ((0 ? DImode : SImode), PLUS, copy_rtx (tmp),
  gen_rtx_CONST_INT (VOIDmode, (long) (per_counter * (value1->hdata.intvl.steps + (value1->hdata.intvl.may_be_more ? 1 : 0))))
                                                 ,
  mr, 0, OPTAB_WIDEN);
      if (tmp1 != mr)
 emit_move_insn (copy_rtx (mr), tmp1);
    }
  if (value1->hdata.intvl.may_be_more
      || value1->hdata.intvl.may_be_less)
    emit_label (end_of_code_label);
  mem_ref = validize_mem (gen_rtx_MEM (mode, mr));
  tmp = expand_simple_binop (mode, PLUS, copy_rtx (mem_ref), (const_int_rtx[64 +1]),
        mem_ref, 0, OPTAB_WIDEN);
  if (tmp != mem_ref)
    emit_move_insn (copy_rtx (mem_ref), tmp);
  sequence = get_insns ();
  end_sequence ();
  rebuild_jump_labels (sequence);
  safe_insert_insn_on_edge (sequence, e);
}
static void
rtl_gen_pow2_profiler (struct histogram_value *value, unsigned tag,
   unsigned base)
{
  unsigned gcov_size = tree_low_cst (((global_trees[TI_INTDI_TYPE])->type.size), 1);
  enum machine_mode mode = mode_for_size (gcov_size, MODE_INT, 0);
  rtx mem_ref, tmp, mr, uval;
  rtx sequence;
  rtx end_of_code_label = gen_label_rtx ();
  rtx loop_label = gen_label_rtx ();
  int per_counter = gcov_size / 8;
  edge e = split_block (((((rtx)value1->insn)->u.fld[3]).bb),
     ((((rtx)value1->insn)->u.fld[1]).rtx1));
  start_sequence ();
  if (value1->seq)
    emit_insn (value1->seq);
  mr = gen_reg_rtx ((0 ? DImode : SImode));
  tmp = rtl_coverage_counter_ref (tag, base);
  tmp = force_reg ((0 ? DImode : SImode), (((tmp)->u.fld[0]).rtx1));
  emit_move_insn (mr, tmp);
  uval = gen_reg_rtx (value1->mode);
  emit_move_insn (uval, copy_rtx (value1->value1));
  if (value1->hdata.pow2.may_be_other)
    {
      do_compare_rtx_and_jump (copy_rtx (uval), (const_int_rtx[64]), LE, 0, value1->mode,
          (rtx) 0, (rtx) 0, end_of_code_label);
      tmp = expand_simple_binop (value1->mode, PLUS, copy_rtx (uval),
     (const_int_rtx[64 -1]), (rtx) 0, 0, OPTAB_WIDEN);
      tmp = expand_simple_binop (value1->mode, AND, copy_rtx (uval), tmp,
     (rtx) 0, 0, OPTAB_WIDEN);
      do_compare_rtx_and_jump (tmp, (const_int_rtx[64]), NE, 0, value1->mode, (rtx) 0,
          (rtx) 0, end_of_code_label);
    }
  emit_label (loop_label);
  tmp = expand_simple_binop ((0 ? DImode : SImode), PLUS, copy_rtx (mr), gen_rtx_CONST_INT (VOIDmode, (long) (per_counter)), mr, 0, OPTAB_WIDEN);
  if (tmp != mr)
    emit_move_insn (copy_rtx (mr), tmp);
  tmp = expand_simple_binop (value1->mode, ASHIFTRT, copy_rtx (uval), (const_int_rtx[64 +1]),
        uval, 0, OPTAB_WIDEN);
  if (tmp != uval)
    emit_move_insn (copy_rtx (uval), tmp);
  do_compare_rtx_and_jump (copy_rtx (uval), (const_int_rtx[64]), NE, 0, value1->mode,
      (rtx) 0, (rtx) 0, loop_label);
  emit_label (end_of_code_label);
  mem_ref = validize_mem (gen_rtx_MEM (mode, mr));
  tmp = expand_simple_binop (mode, PLUS, copy_rtx (mem_ref), (const_int_rtx[64 +1]),
        mem_ref, 0, OPTAB_WIDEN);
  if (tmp != mem_ref)
    emit_move_insn (copy_rtx (mem_ref), tmp);
  sequence = get_insns ();
  end_sequence ();
  rebuild_jump_labels (sequence);
  safe_insert_insn_on_edge (sequence, e);
}
static rtx
rtl_gen_one_value_profiler_no_edge_manipulation (struct histogram_value *value,
      unsigned tag, unsigned base)
{
  unsigned gcov_size = tree_low_cst (((global_trees[TI_INTDI_TYPE])->type.size), 1);
  enum machine_mode mode = mode_for_size (gcov_size, MODE_INT, 0);
  rtx stored_value_ref, counter_ref, all_ref, stored_value, counter, all;
  rtx tmp, uval;
  rtx sequence;
  rtx same_label = gen_label_rtx ();
  rtx zero_label = gen_label_rtx ();
  rtx end_of_code_label = gen_label_rtx ();
  start_sequence ();
  if (value1->seq)
    emit_insn (value1->seq);
  stored_value_ref = rtl_coverage_counter_ref (tag, base);
  counter_ref = rtl_coverage_counter_ref (tag, base + 1);
  all_ref = rtl_coverage_counter_ref (tag, base + 2);
  stored_value = validize_mem (stored_value_ref);
  counter = validize_mem (counter_ref);
  all = validize_mem (all_ref);
  uval = gen_reg_rtx (mode);
  convert_move (uval, copy_rtx (value1->value1), 0);
  do_compare_rtx_and_jump (copy_rtx (uval), copy_rtx (stored_value), EQ,
      0, mode, (rtx) 0, (rtx) 0, same_label);
  do_compare_rtx_and_jump (copy_rtx (counter), (const_int_rtx[64]), EQ, 0, mode,
      (rtx) 0, (rtx) 0, zero_label);
  tmp = expand_simple_binop (mode, PLUS, copy_rtx (counter), (const_int_rtx[64 -1]),
        counter, 0, OPTAB_WIDEN);
  if (tmp != counter)
    emit_move_insn (copy_rtx (counter), tmp);
  emit_jump_insn (gen_jump (end_of_code_label));
  emit_barrier ();
  emit_label (zero_label);
  emit_move_insn (copy_rtx (stored_value), copy_rtx (uval));
  emit_label (same_label);
  tmp = expand_simple_binop (mode, PLUS, copy_rtx (counter), (const_int_rtx[64 +1]),
        counter, 0, OPTAB_WIDEN);
  if (tmp != counter)
    emit_move_insn (copy_rtx (counter), tmp);
  emit_label (end_of_code_label);
  tmp = expand_simple_binop (mode, PLUS, copy_rtx (all), (const_int_rtx[64 +1]),
        all, 0, OPTAB_WIDEN);
  if (tmp != all)
    emit_move_insn (copy_rtx (all), tmp);
  sequence = get_insns ();
  end_sequence ();
  return sequence;
}
static void
rtl_gen_one_value_profiler (struct histogram_value *value, unsigned tag,
   unsigned base)
{
  edge e = split_block (((((rtx)value1->insn)->u.fld[3]).bb),
     ((((rtx)value1->insn)->u.fld[1]).rtx1));
  rtx sequence = rtl_gen_one_value_profiler_no_edge_manipulation (value1,
   tag, base);
  rebuild_jump_labels (sequence);
  safe_insert_insn_on_edge (sequence, e);
}
static void
rtl_gen_const_delta_profiler (struct histogram_value *value1, unsigned tag,
     unsigned base)
{
  struct histogram_value one_value_delta;
  unsigned gcov_size = tree_low_cst (((global_trees[TI_INTDI_TYPE])->type.size), 1);
  enum machine_mode mode = mode_for_size (gcov_size, MODE_INT, 0);
  rtx stored_value_ref, stored_value, tmp, uval;
  rtx sequence;
  edge e = split_block (((((rtx)value1->insn)->u.fld[3]).bb),
     ((((rtx)value1->insn)->u.fld[1]).rtx1));
  start_sequence ();
  if (value1->seq)
    emit_insn (value1->seq);
  stored_value_ref = rtl_coverage_counter_ref (tag, base);
  stored_value = validize_mem (stored_value_ref);
  uval = gen_reg_rtx (mode);
  convert_move (uval, copy_rtx (value1->value1), 0);
  tmp = expand_simple_binop (mode, MINUS,
        copy_rtx (uval), copy_rtx (stored_value),
        (rtx) 0, 0, OPTAB_WIDEN);
  one_value_delta.value1 = tmp;
  one_value_delta.mode = mode;
  one_value_delta.seq = (rtx) 0;
  one_value_delta.insn = value1->insn;
  one_value_delta.type = HIST_TYPE_SINGLE_VALUE;
  emit_insn (rtl_gen_one_value_profiler_no_edge_manipulation (&one_value_delta,
          tag, base + 1));
  emit_move_insn (copy_rtx (stored_value), uval);
  sequence = get_insns ();
  end_sequence ();
  rebuild_jump_labels (sequence);
  safe_insert_insn_on_edge (sequence, e);
}
static FILE *rtl_profile_dump_file (void) {
  return dump_file;
}
struct profile_hooks rtl_profile_hooks =
{
  rtl_gen_edge_profiler,
  rtl_gen_interval_profiler,
  rtl_gen_pow2_profiler,
  rtl_gen_one_value_profiler,
  rtl_gen_const_delta_profiler,
  rtl_profile_dump_file
};
static void
tree_gen_edge_profiler (int edgeno, edge e)
{
  tree tmp1 = create_tmp_var (global_trees[TI_INTDI_TYPE], "PROF");
  tree tmp2 = create_tmp_var (global_trees[TI_INTDI_TYPE], "PROF");
  tree ref = tree_coverage_counter_ref (0, edgeno);
  tree stmt1 = build (MODIFY_EXPR, global_trees[TI_INTDI_TYPE], tmp1, ref);
  tree stmt2 = build (MODIFY_EXPR, global_trees[TI_INTDI_TYPE], tmp2,
        build (PLUS_EXPR, global_trees[TI_INTDI_TYPE],
        tmp1, global_trees[TI_INTEGER_ONE]));
  tree stmt3 = build (MODIFY_EXPR, global_trees[TI_INTDI_TYPE], ref, tmp2);
  bsi_insert_on_edge (e, stmt1);
  bsi_insert_on_edge (e, stmt2);
  bsi_insert_on_edge (e, stmt3);
}
static void
tree_gen_interval_profiler (struct histogram_value *value ,
       unsigned tag ,
       unsigned base )
{
  fancy_abort ("gcc.c", 687511, "?");
}
static void
tree_gen_pow2_profiler (struct histogram_value *value ,
   unsigned tag ,
   unsigned base )
{
  fancy_abort ("gcc.c", 687524, "?");
}
static void
tree_gen_one_value_profiler (struct histogram_value *value ,
       unsigned tag ,
       unsigned base )
{
  fancy_abort ("gcc.c", 687537, "?");
}
static void
tree_gen_const_delta_profiler (struct histogram_value *value ,
    unsigned tag ,
    unsigned base )
{
  fancy_abort ("gcc.c", 687551, "?");
}
static unsigned char do_tree_profiling (void) {
  if (flag_tree_based_profiling)
    {
      tree_register_profile_hooks ();
      tree_register_value_prof_hooks ();
    }
  return flag_tree_based_profiling;
}
static FILE *tree_profile_dump_file (void) {
  return dump_file;
}
struct tree_opt_pass pass_tree_profile =
{
  "tree_profile",
  do_tree_profiling,
  branch_prob,
  ((void *)0),
  ((void *)0),
  0,
  TV_BRANCH_PROB,
  (1 << 2) | (1 << 3),
  (1 << 2) | (1 << 3),
  0,
  0,
  (1 << 5)
};
struct profile_hooks tree_profile_hooks =
{
  tree_gen_edge_profiler,
  tree_gen_interval_profiler,
  tree_gen_pow2_profiler,
  tree_gen_one_value_profiler,
  tree_gen_const_delta_profiler,
  tree_profile_dump_file
};
const struct rtl_hooks general_rtl_hooks = { gen_lowpart_if_possible, reg_nonzero_bits_for_combine, reg_num_sign_bit_copies_for_combine, };
struct rtl_hooks rtl_hooks = { gen_lowpart_if_possible, reg_nonzero_bits_for_combine, reg_num_sign_bit_copies_for_combine, };
rtx
gen_lowpart_general (enum machine_mode mode, rtx x)
{
  rtx result = gen_lowpart_common (mode, x);
  if (result)
    return result;
  else if ((((enum rtx_code) (x)->code) == REG))
    {
      result = gen_lowpart_common (mode, copy_to_reg (x));
      if (result == 0)
 fancy_abort ("gcc.c", 687641, "?");
      return result;
    }
  else if ((((enum rtx_code) (x)->code) == MEM))
    {
      int offset = 0;
      if (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]) <= (0 ? 8 : 4)
   && (mode_class[((enum machine_mode) (x)->mode)] == MODE_INT || mode_class[((enum machine_mode) (x)->mode)] == MODE_PARTIAL_INT)
   && 1
   && ! no_new_pseudos)
 return gen_lowpart_general (mode, force_reg (((enum machine_mode) (x)->mode), x));
      if (0)
 offset = (((((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) > ((0 ? 8 : 4)) ? (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) : ((0 ? 8 : 4)))
    - ((((unsigned short) mode_size[mode])) > ((0 ? 8 : 4)) ? (((unsigned short) mode_size[mode])) : ((0 ? 8 : 4))));
      if (0)
 offset -= ((((0 ? 8 : 4)) < (((unsigned short) mode_size[mode])) ? ((0 ? 8 : 4)) : (((unsigned short) mode_size[mode])))
     - (((0 ? 8 : 4)) < (((unsigned short) mode_size[((enum machine_mode) (x)->mode)])) ? ((0 ? 8 : 4)) : (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]))));
      return adjust_address_1 (x, mode, offset, 1, 1);
    }
  else
    fancy_abort ("gcc.c", 687670, "?");
}
rtx
reg_num_sign_bit_copies_general (rtx x ,
     enum machine_mode mode ,
                                 rtx known_x ,
     enum machine_mode known_mode ,
                                 unsigned int known_ret ,
                                 unsigned int *result )
{
  return ((void *)0);
}
rtx
reg_nonzero_bits_general (rtx x ,
     enum machine_mode mode ,
     rtx known_x ,
                          enum machine_mode known_mode ,
                          unsigned long known_ret ,
                          unsigned long *nonzero )
{
  return ((void *)0);
}
static basic_block
expand_block (basic_block bb, FILE * dump_file)
{
  block_stmt_iterator bsi = bsi_start (bb);
  tree stmt = ((void *)0);
  rtx note, last;
  edge e;
  if (dump_file)
    {
      tree_register_cfg_hooks ();
      dump_bb (bb, dump_file, 0);
      rtl_register_cfg_hooks ();
    }
  if (!bsi_end_p (bsi))
    stmt = bsi_stmt (bsi);
  if (stmt && ((enum tree_code) (stmt)->common.code) == LABEL_EXPR)
    {
      last = get_last_insn ();
      expand_expr_stmt (stmt);
      (bb)->head_ = (((last)->u.fld[2]).rtx1);
      if (((enum rtx_code) ((bb)->head_)->code) == NOTE)
 (bb)->head_ = ((((bb)->head_)->u.fld[2]).rtx1);
      bsi_next (&bsi);
      note = emit_note_after (NOTE_INSN_BASIC_BLOCK, (bb)->head_);
    }
  else
    note = (bb)->head_ = emit_note (NOTE_INSN_BASIC_BLOCK);
  (((note)->u.fld[4]).bb) = bb;
  e = bb->succ;
  while (e)
    {
      edge next = e->succ_next;
      e->flags &= ~4096;
      if (e->flags & 2)
 remove_edge (e);
      e = next;
    }
  for (; !bsi_end_p (bsi); bsi_next (&bsi))
    {
      tree stmt = bsi_stmt (bsi);
      last = get_last_insn ();
      if (!stmt)
 continue;
      switch (((enum tree_code) (stmt)->common.code))
 {
 case COND_EXPR:
   {
     basic_block new_bb, dest;
     edge new_edge;
     edge true_edge;
     edge false_edge;
     tree pred = ((((stmt))->exp.operands[0]));
     tree then_exp = ((((stmt))->exp.operands[1]));
     tree else_exp = ((((stmt))->exp.operands[2]));
     rtx last = get_last_insn ();
     extract_true_false_edges_from_block (bb, &true_edge, &false_edge);
     if (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (stmt)->common.code))])) != 0) ? (stmt)->exp.locus : (location_t *)((void *)0)))
       {
  emit_line_note (*(((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (stmt)->common.code))])) != 0) ? (stmt)->exp.locus : (location_t *)((void *)0))));
  record_block_change (((stmt)->exp.block));
       }
     true_edge->flags &= ~1024;
     false_edge->flags &= ~2048;
     if (((enum tree_code) (then_exp)->common.code) == GOTO_EXPR
  && ((enum tree_code) (else_exp)->common.code) == NOP_EXPR)
       {
  jumpif (pred, label_rtx ((((then_exp))->exp.operands[0])));
  break;
       }
     if (((enum tree_code) (else_exp)->common.code) == GOTO_EXPR
  && ((enum tree_code) (then_exp)->common.code) == NOP_EXPR)
       {
  jumpifnot (pred, label_rtx ((((else_exp))->exp.operands[0])));
  break;
       }
     if (((enum tree_code) (then_exp)->common.code) != GOTO_EXPR
  || ((enum tree_code) (else_exp)->common.code) != GOTO_EXPR)
       fancy_abort ("gcc.c", 687822, "?");
     jumpif (pred, label_rtx ((((then_exp))->exp.operands[0])));
     last = get_last_insn ();
     expand_expr (else_exp, (const_int_rtx[64]), VOIDmode, 0);
     (bb)->end_ = last;
     if (((enum rtx_code) ((bb)->end_)->code) == BARRIER)
       (bb)->end_ = ((((bb)->end_)->u.fld[1]).rtx1);
     update_bb_for_insn (bb);
     new_bb = create_basic_block ((((last)->u.fld[2]).rtx1), get_last_insn (), bb);
     dest = false_edge->dest;
     redirect_edge_succ (false_edge, new_bb);
     false_edge->flags |= 1;
     new_bb->count = false_edge->count;
     new_bb->frequency = (((false_edge)->src->frequency * (false_edge)->probability + 10000 / 2) / 10000);
     new_edge = make_edge (new_bb, dest, 0);
     new_edge->probability = 10000;
     new_edge->count = new_bb->count;
     if (((enum rtx_code) ((new_bb)->end_)->code) == BARRIER)
       (new_bb)->end_ = ((((new_bb)->end_)->u.fld[1]).rtx1);
     update_bb_for_insn (new_bb);
     if (dump_file)
       {
  dump_bb (bb, dump_file, 0);
  dump_bb (new_bb, dump_file, 0);
       }
     return new_bb;
   }
 case CALL_EXPR:
 case MODIFY_EXPR:
 case RETURN_EXPR:
          expand_expr_stmt (stmt);
   for (last = (((last)->u.fld[2]).rtx1); last; last = (((last)->u.fld[2]).rtx1))
     {
       if (((enum rtx_code) (last)->code) == CALL_INSN && (((last))->jump))
  {
    edge e;
    int probability = 0;
    gcov_type count = 0;
    do_pending_stack_adjust ();
    e = bb->succ;
    while (e)
      {
        edge next = e->succ_next;
        if (!(e->flags & (2 | 8)))
   {
     if (e->dest != EXIT_BLOCK_PTR)
       {
         e->dest->count -= e->count;
         e->dest->frequency -= (((e)->src->frequency * (e)->probability + 10000 / 2) / 10000);
         if (e->dest->count < 0)
           e->dest->count = 0;
         if (e->dest->frequency < 0)
           e->dest->frequency = 0;
       }
     count += e->count;
     probability += e->probability;
     remove_edge (e);
   }
        e = next;
      }
    last = (((last)->u.fld[2]).rtx1);
    if (((enum rtx_code) (last)->code) != BARRIER)
      fancy_abort ("gcc.c", 687897, "?");
    while ((((last)->u.fld[2]).rtx1))
      {
        if (((enum rtx_code) ((((last)->u.fld[2]).rtx1))->code) == CODE_LABEL)
   break;
        delete_insn ((((last)->u.fld[2]).rtx1));
      }
    e = make_edge (bb, EXIT_BLOCK_PTR,
         2 | 256);
    e->probability += probability;
    e->count += count;
    (bb)->end_ = last;
    update_bb_for_insn (bb);
    if ((((last)->u.fld[2]).rtx1))
      bb = create_basic_block ((((last)->u.fld[2]).rtx1), get_last_insn (), bb);
    else
      return bb;
  }
     }
   break;
 default:
          expand_expr_stmt (stmt);
   break;
 }
    }
  do_pending_stack_adjust ();
  last = get_last_insn ();
  if (((enum rtx_code) (last)->code) == BARRIER)
    last = (((last)->u.fld[1]).rtx1);
  if (((((enum rtx_code) (last)->code) == JUMP_INSN) && (((enum rtx_code) ((((last)->u.fld[5]).rtx1))->code) == ADDR_VEC || ((enum rtx_code) ((((last)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC)))
    last = ((((((last)->u.fld[1]).rtx1))->u.fld[1]).rtx1);
  (bb)->end_ = last;
  if (dump_file)
    dump_bb (bb, dump_file, 0);
  update_bb_for_insn (bb);
  return bb;
}
static basic_block
construct_init_block (void)
{
  basic_block init_block, first_block;
  edge e;
  expand_start_bindings_and_block (0, (tree) ((void *)0));
  for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next)
    if (e->dest == ENTRY_BLOCK_PTR->next_bb)
      break;
  init_block = create_basic_block ((((get_insns ())->u.fld[2]).rtx1),
       get_last_insn (),
       ENTRY_BLOCK_PTR);
  init_block->frequency = ENTRY_BLOCK_PTR->frequency;
  init_block->count = ENTRY_BLOCK_PTR->count;
  if (e)
    {
      first_block = e->dest;
      redirect_edge_succ (e, init_block);
      e = make_edge (init_block, first_block, 1);
    }
  else
    e = make_edge (init_block, EXIT_BLOCK_PTR, 1);
  e->probability = 10000;
  e->count = ENTRY_BLOCK_PTR->count;
  update_bb_for_insn (init_block);
  return init_block;
}
static void
construct_exit_block (void)
{
  rtx head = get_last_insn ();
  rtx end;
  basic_block exit_block;
  edge e, e2, next;
  if (cfun->function_end_locus.file)
    input_location = cfun->function_end_locus;
  record_block_change (((current_function_decl)->decl.initial));
  expand_end_bindings ((tree) ((void *)0), 1, 0);
  expand_function_end ();
  end = get_last_insn ();
  if (head == end)
    return;
  while ((((head)->u.fld[2]).rtx1) && ((enum rtx_code) ((((head)->u.fld[2]).rtx1))->code) == NOTE)
    head = (((head)->u.fld[2]).rtx1);
  exit_block = create_basic_block ((((head)->u.fld[2]).rtx1), end, EXIT_BLOCK_PTR->prev_bb);
  exit_block->frequency = EXIT_BLOCK_PTR->frequency;
  exit_block->count = EXIT_BLOCK_PTR->count;
  for (e = EXIT_BLOCK_PTR->pred; e; e = next)
    {
      next = e->pred_next;
      if (!(e->flags & 2))
        redirect_edge_succ (e, exit_block);
    }
  e = make_edge (exit_block, EXIT_BLOCK_PTR, 1);
  e->probability = 10000;
  e->count = EXIT_BLOCK_PTR->count;
  for (e2 = EXIT_BLOCK_PTR->pred; e2; e2 = e2->pred_next)
    if (e2 != e)
      {
        e->count -= e2->count;
 exit_block->count -= e2->count;
 exit_block->frequency -= (((e2)->src->frequency * (e2)->probability + 10000 / 2) / 10000);
      }
  if (e->count < 0)
    e->count = 0;
  if (exit_block->count < 0)
    exit_block->count = 0;
  if (exit_block->frequency < 0)
    exit_block->frequency = 0;
  update_bb_for_insn (exit_block);
}
static void
tree_expand_cfg (void)
{
  basic_block bb, init_block;
  sbitmap blocks;
  if (dump_file)
    {
      fprintf (dump_file, "\n;; Function %s",
        (*lang_hooks.decl_printable_name) (current_function_decl, 2));
      fprintf (dump_file, " (%s)\n",
        ((const char *) (decl_assembler_name (current_function_decl))->identifier.id.str));
    }
  reset_block_changes ();
  expand_used_vars ();
  expand_function_start (current_function_decl);
  if (((current_function_decl)->decl.name)
      && ((((current_function_decl)->decl.name)) == global_trees[TI_MAIN_IDENTIFIER])
      && (! ((current_function_decl)->decl.context) || ((enum tree_code) (((current_function_decl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL))
    expand_main_function ();
  rtl_register_cfg_hooks ();
  init_block = construct_init_block ();
  for (bb = init_block->next_bb; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
    bb = expand_block (bb, dump_file);
  construct_exit_block ();
  convert_from_eh_region_ranges ();
  rebuild_jump_labels (get_insns ());
  find_exception_handler_labels ();
  blocks = sbitmap_alloc (last_basic_block);
  sbitmap_ones (blocks);
  find_many_sub_basic_blocks (blocks);
  purge_all_dead_edges (0);
  free(blocks);
  compact_blocks ();
}
struct tree_opt_pass pass_expand =
{
  "expand",
  ((void *)0),
  tree_expand_cfg,
  ((void *)0),
  ((void *)0),
  0,
  TV_EXPAND,
  (1 << 2) | (1 << 3),
  (1 << 8),
  (1 << 2),
  0,
  0
};
static const
struct processor_costs size_cost = {
  2,
  3,
  2,
  3,
  {3, 3, 3, 3, 5},
  0,
  {3, 3, 3, 3, 5},
  3,
  3,
  0,
  2,
  2,
  {2, 2, 2},
  {2, 2, 2},
  2,
  {2, 2, 2},
  {2, 2, 2},
  3,
  {3, 3},
  {3, 3},
  3,
  {3, 3, 3},
  {3, 3, 3},
  3,
  0,
  0,
  1,
  2,
  2,
  2,
  2,
  2,
  2
};
static const
struct processor_costs i386_cost = {
  1,
  1,
  3,
  2,
  {6, 6, 6, 6, 6},
  1,
  {23, 23, 23, 23, 23},
  3,
  2,
  15,
  3,
  4,
  {2, 4, 2},
  {2, 4, 2},
  2,
  {8, 8, 8},
  {8, 8, 8},
  2,
  {4, 8},
  {4, 8},
  2,
  {4, 8, 16},
  {4, 8, 16},
  3,
  0,
  0,
  1,
  23,
  27,
  88,
  22,
  24,
  122
};
static const
struct processor_costs i486_cost = {
  1,
  1,
  3,
  2,
  {12, 12, 12, 12, 12},
  1,
  {40, 40, 40, 40, 40},
  3,
  2,
  15,
  3,
  4,
  {2, 4, 2},
  {2, 4, 2},
  2,
  {8, 8, 8},
  {8, 8, 8},
  2,
  {4, 8},
  {4, 8},
  2,
  {4, 8, 16},
  {4, 8, 16},
  3,
  0,
  0,
  1,
  8,
  16,
  73,
  3,
  3,
  83
};
static const
struct processor_costs pentium_cost = {
  1,
  1,
  4,
  1,
  {11, 11, 11, 11, 11},
  0,
  {25, 25, 25, 25, 25},
  3,
  2,
  8,
  6,
  6,
  {2, 4, 2},
  {2, 4, 2},
  2,
  {2, 2, 6},
  {4, 4, 6},
  8,
  {8, 8},
  {8, 8},
  2,
  {4, 8, 16},
  {4, 8, 16},
  3,
  0,
  0,
  2,
  3,
  3,
  39,
  1,
  1,
  70
};
static const
struct processor_costs pentiumpro_cost = {
  1,
  1,
  1,
  1,
  {4, 4, 4, 4, 4},
  0,
  {17, 17, 17, 17, 17},
  1,
  1,
  8,
  6,
  2,
  {4, 4, 4},
  {2, 2, 2},
  2,
  {2, 2, 6},
  {4, 4, 6},
  2,
  {2, 2},
  {2, 2},
  2,
  {2, 2, 8},
  {2, 2, 8},
  3,
  32,
  6,
  2,
  3,
  5,
  56,
  2,
  2,
  56
};
static const
struct processor_costs k6_cost = {
  1,
  2,
  1,
  1,
  {3, 3, 3, 3, 3},
  0,
  {18, 18, 18, 18, 18},
  2,
  2,
  8,
  4,
  3,
  {4, 5, 4},
  {2, 3, 2},
  4,
  {6, 6, 6},
  {4, 4, 4},
  2,
  {2, 2},
  {2, 2},
  2,
  {2, 2, 8},
  {2, 2, 8},
  6,
  32,
  1,
  1,
  2,
  2,
  56,
  2,
  2,
  56
};
static const
struct processor_costs athlon_cost = {
  1,
  2,
  1,
  1,
  {5, 5, 5, 5, 5},
  0,
  {18, 26, 42, 74, 74},
  1,
  1,
  8,
  9,
  4,
  {3, 4, 3},
  {3, 4, 3},
  4,
  {4, 4, 12},
  {6, 6, 8},
  2,
  {4, 4},
  {4, 4},
  2,
  {4, 4, 6},
  {4, 4, 5},
  5,
  64,
  6,
  2,
  4,
  4,
  24,
  2,
  2,
  35
};
static const
struct processor_costs k8_cost = {
  1,
  2,
  1,
  1,
  {3, 4, 3, 4, 5},
  0,
  {18, 26, 42, 74, 74},
  1,
  1,
  8,
  9,
  4,
  {3, 4, 3},
  {3, 4, 3},
  4,
  {4, 4, 12},
  {6, 6, 8},
  2,
  {3, 3},
  {4, 4},
  2,
  {4, 3, 6},
  {4, 4, 5},
  5,
  64,
  6,
  2,
  4,
  4,
  19,
  2,
  2,
  35
};
static const
struct processor_costs pentium4_cost = {
  1,
  3,
  4,
  4,
  {15, 15, 15, 15, 15},
  0,
  {56, 56, 56, 56, 56},
  1,
  1,
  16,
  6,
  2,
  {4, 5, 4},
  {2, 3, 2},
  2,
  {2, 2, 6},
  {4, 4, 6},
  2,
  {2, 2},
  {2, 2},
  12,
  {12, 12, 12},
  {2, 2, 8},
  10,
  64,
  6,
  2,
  5,
  7,
  43,
  2,
  2,
  43
};
static const
struct processor_costs nocona_cost = {
  1,
  1,
  1,
  1,
  {10, 10, 10, 10, 10},
  0,
  {66, 66, 66, 66, 66},
  1,
  1,
  16,
  9,
  4,
  {4, 4, 4},
  {4, 4, 4},
  3,
  {12, 12, 12},
  {4, 4, 4},
  6,
  {12, 12},
  {12, 12},
  6,
  {12, 12, 12},
  {12, 12, 12},
  8,
  128,
  8,
  1,
  6,
  8,
  40,
  3,
  3,
  44
};
const struct processor_costs *ix86_cost = &pentium_cost;
const int x86_use_leave = (1<<PROCESSOR_I386) | (1<<PROCESSOR_K6) | ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON));
const int x86_push_memory = (1<<PROCESSOR_I386) | (1<<PROCESSOR_K6) | ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_zero_extend_with_and = (1<<PROCESSOR_I486) | (1<<PROCESSOR_PENTIUM);
const int x86_movx = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUMPRO) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA) ;
const int x86_double_with_add = ~(1<<PROCESSOR_I386);
const int x86_use_bit_test = (1<<PROCESSOR_I386);
const int x86_unroll_strlen = (1<<PROCESSOR_I486) | (1<<PROCESSOR_PENTIUM) | (1<<PROCESSOR_PENTIUMPRO) | ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_K6);
const int x86_cmove = (1<<PROCESSOR_PENTIUMPRO) | ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_3dnow_a = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON));
const int x86_deep_branch = (1<<PROCESSOR_PENTIUMPRO) | (1<<PROCESSOR_K6) | ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_branch_hints = (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_use_sahf = (1<<PROCESSOR_PENTIUMPRO) | (1<<PROCESSOR_K6) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_partial_reg_stall = (1<<PROCESSOR_PENTIUMPRO);
const int x86_use_loop = (1<<PROCESSOR_K6);
const int x86_use_fiop = ~((1<<PROCESSOR_PENTIUMPRO) | ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUM));
const int x86_use_mov0 = (1<<PROCESSOR_K6);
const int x86_use_cltd = ~((1<<PROCESSOR_PENTIUM) | (1<<PROCESSOR_K6));
const int x86_read_modify_write = ~(1<<PROCESSOR_PENTIUM);
const int x86_read_modify = ~((1<<PROCESSOR_PENTIUM) | (1<<PROCESSOR_PENTIUMPRO));
const int x86_split_long_moves = (1<<PROCESSOR_PENTIUMPRO);
const int x86_promote_QImode = (1<<PROCESSOR_K6) | (1<<PROCESSOR_PENTIUM) | (1<<PROCESSOR_I386) | (1<<PROCESSOR_I486) | ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON));
const int x86_fast_prefix = ~((1<<PROCESSOR_PENTIUM) | (1<<PROCESSOR_I486) | (1<<PROCESSOR_I386));
const int x86_single_string1op = (1<<PROCESSOR_I386) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_qimode_math = ~(0);
const int x86_promote_qi_regs = 0;
const int x86_himode_math = ~((1<<PROCESSOR_PENTIUMPRO));
const int x86_promote_hi_regs = (1<<PROCESSOR_PENTIUMPRO);
const int x86_sub_esp_4 = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUMPRO) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_sub_esp_8 = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUMPRO) | (1<<PROCESSOR_I386) | (1<<PROCESSOR_I486) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_add_esp_4 = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_K6) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_add_esp_8 = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUMPRO) | (1<<PROCESSOR_K6) | (1<<PROCESSOR_I386) | (1<<PROCESSOR_I486) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_integer_DFmode_moves = ~(((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA) | (1<<PROCESSOR_PENTIUMPRO));
const int x86_partial_reg_dependency = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_memory_mismatch_stall = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_accumulate_outgoing_args = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA) | (1<<PROCESSOR_PENTIUMPRO);
const int x86_prologue_using_move = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUMPRO);
const int x86_epilogue_using_move = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUMPRO);
const int x86_decompose_lea = (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_shift1 = ~(1<<PROCESSOR_I486);
const int x86_arch_always_fancy_math_387 = (1<<PROCESSOR_PENTIUM) | (1<<PROCESSOR_PENTIUMPRO) | ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_sse_partial_reg_dependency = (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA) | (1<<PROCESSOR_PENTIUMPRO);
const int x86_sse_partial_regs = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON));
const int x86_sse_partial_regs_for_cvtsd2ss = 0;
const int x86_sse_typeless_stores = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON));
const int x86_sse_load0_by_pxor = (1<<PROCESSOR_PENTIUMPRO) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
const int x86_use_ffreep = ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON));
const int x86_rep_movl_optimal = (1<<PROCESSOR_I386) | (1<<PROCESSOR_PENTIUM) | (1<<PROCESSOR_PENTIUMPRO) | (1<<PROCESSOR_K6);
const int x86_inter_unit_moves = ~(((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)));
const int x86_ext_80387_constants = (1<<PROCESSOR_K6) | (1<<PROCESSOR_ATHLON) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA) | (1<<PROCESSOR_PENTIUMPRO);
const int x86_four_jump_limit = (1<<PROCESSOR_PENTIUMPRO) | ((1<<PROCESSOR_K8) | (1<<PROCESSOR_ATHLON)) | (1<<PROCESSOR_PENTIUM4) | (1<<PROCESSOR_NOCONA);
static const char *const qi_reg_name[] = {"al", "dl", "cl", "bl", "sil", "dil", "bpl", "spl",};
static const char *const qi_high_reg_name[] = {"ah", "dh", "ch", "bh", };
static const char *const hi_reg_name[] = {"ax","dx","cx","bx","si","di","bp","sp", "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)", "argp", "flags", "fpsr", "dirflag", "frame", "xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7", "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7" , "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15"};
enum reg_class const regclass_map[53] =
{
  AREG, DREG, CREG, BREG,
  SIREG, DIREG, NON_Q_REGS, NON_Q_REGS,
  FP_TOP_REG, FP_SECOND_REG, FLOAT_REGS, FLOAT_REGS,
  FLOAT_REGS, FLOAT_REGS, FLOAT_REGS, FLOAT_REGS,
  NON_Q_REGS,
  NO_REGS, NO_REGS, NO_REGS, NON_Q_REGS,
  SSE_REGS, SSE_REGS, SSE_REGS, SSE_REGS, SSE_REGS, SSE_REGS,
  SSE_REGS, SSE_REGS,
  MMX_REGS, MMX_REGS, MMX_REGS, MMX_REGS, MMX_REGS, MMX_REGS,
  MMX_REGS, MMX_REGS,
  NON_Q_REGS, NON_Q_REGS, NON_Q_REGS, NON_Q_REGS,
  NON_Q_REGS, NON_Q_REGS, NON_Q_REGS, NON_Q_REGS,
  SSE_REGS, SSE_REGS, SSE_REGS, SSE_REGS, SSE_REGS, SSE_REGS,
  SSE_REGS, SSE_REGS
};
int const dbx_register_map[53] =
{
  0, 2, 1, 3, 6, 7, 4, 5,
  12, 13, 14, 15, 16, 17, 18, 19,
  -1, -1, -1, -1, -1,
  21, 22, 23, 24, 25, 26, 27, 28,
  29, 30, 31, 32, 33, 34, 35, 36,
  -1, -1, -1, -1, -1, -1, -1, -1,
  -1, -1, -1, -1, -1, -1, -1, -1
};
static int const x86_64_int_parameter_registers[6] =
{
  5 , 4 , 1 , 2 ,
  (((((20 + 1) + 7) + 1) + 7) + 1) , (((((20 + 1) + 7) + 1) + 7) + 1) + 1
};
static int const x86_64_int_return_registers[4] =
{
  0 , 1 , 5 , 4
};
int const dbx64_register_map[53] =
{
  0, 1, 2, 3, 4, 5, 6, 7,
  33, 34, 35, 36, 37, 38, 39, 40,
  -1, -1, -1, -1, -1,
  17, 18, 19, 20, 21, 22, 23, 24,
  41, 42, 43, 44, 45, 46, 47, 48,
  8,9,10,11,12,13,14,15,
  25, 26, 27, 28, 29, 30, 31, 32
};
int const svr4_dbx_register_map[53] =
{
  0, 2, 1, 3, 6, 7, 5, 4,
  11, 12, 13, 14, 15, 16, 17, 18,
  -1, 9, -1, -1, -1,
  21, 22, 23, 24, 25, 26, 27, 28,
  29, 30, 31, 32, 33, 34, 35, 36,
  -1, -1, -1, -1, -1, -1, -1, -1,
  -1, -1, -1, -1, -1, -1, -1, -1
};
rtx ix86_compare_op0 = (rtx) 0;
rtx ix86_compare_op1 = (rtx) 0;
struct stack_local_entry
{
  unsigned short mode;
  unsigned short n;
  rtx rtl;
  struct stack_local_entry *next;
};
struct ix86_frame
{
  int nregs;
  int padding1;
  int va_arg_size;
  long frame;
  int padding2;
  int outgoing_arguments_size;
  int red_zone_size;
  long to_allocate;
  long frame_pointer_offset;
  long hard_frame_pointer_offset;
  long stack_pointer_offset;
  unsigned char save_regs_using_mov;
};
const char *ix86_debug_arg_string1, *ix86_debug_addr_string1;
const char *ix86_cmodel_string1;
enum cmodel ix86_cmodel;
const char *ix86_asm_string1;
enum asm_dialect ix86_asm_dialect = ASM_ATT;
const char *ix86_tls_dialect_string1;
enum tls_dialect ix86_tls_dialect = TLS_DIALECT_GNU;
enum fpmath_unit ix86_fpmath;
enum processor_type ix86_tune;
enum processor_type ix86_arch;
const char *ix86_tune_string1;
const char *ix86_arch_string1;
const char *ix86_fpmath_string1;
const char *ix86_regparm_string1;
int x86_prefetch_sse;
int ix86_regparm;
const char *ix86_align_loops_string1;
const char *ix86_align_jumps_string1;
const char *ix86_preferred_stack_boundary_string1;
int ix86_preferred_stack_boundary;
int ix86_branch_cost;
const char *ix86_branch_cost_string1;
const char *ix86_align_funcs_string1;
static char internal_label_prefix[16];
static int internal_label_prefix_len;
static int local_symbolic_operand (rtx, enum machine_mode);
static int tls_symbolic_operand_1 (rtx, enum tls_model);
static void output_pic_addr_const (FILE *, rtx, int);
static void put_condition_code (enum rtx_code, enum machine_mode,
    int, int, FILE *);
static const char *get_some_local_dynamic_name (void);
static int get_some_local_dynamic_name_1 (rtx *, void *);
static rtx maybe_get_pool_constant (rtx);
static rtx ix86_expand_int_compare (enum rtx_code, rtx, rtx);
static enum rtx_code ix86_prepare_fp_compare_args (enum rtx_code, rtx *,
         rtx *);
static unsigned char ix86_fixed_condition_code_regs (unsigned int *, unsigned int *);
static enum machine_mode ix86_cc_modes_compatible (enum machine_mode,
         enum machine_mode);
static rtx get_thread_pointer (int);
static rtx legitimize_tls_address (rtx, enum tls_model, int);
static void get_pc_thunk_name (char [32], unsigned int);
static rtx gen_push (rtx);
static int memory_address_length (rtx addr);
static int ix86_flags_dependant (rtx, rtx, enum attr_type);
static int ix86_agi_dependant (rtx, rtx, enum attr_type);
static struct machine_function * ix86_init_machine_status (void);
static int ix86_split_to_parts (rtx, rtx *, enum machine_mode);
static int ix86_nsaved_regs (void);
static void ix86_emit_save_regs (void);
static void ix86_emit_save_regs_using_mov (rtx, long);
static void ix86_emit_restore_regs_using_mov (rtx, long, int);
static void ix86_output_function_epilogue (FILE *, long);
static long ix86_GOT_alias_set (void);
static void ix86_adjust_counter (rtx, long);
static rtx ix86_expand_aligntest (rtx, int);
static void ix86_expand_strlensi_unroll_1 (rtx, rtx, rtx);
static int ix86_issue_rate (void);
static int ix86_adjust_cost (rtx, rtx, rtx, int);
static int ia32_use_dfa_pipeline_interface (void);
static int ia32_multipass_dfa_lookahead (void);
static void ix86_init_mmx_sse_builtins (void);
static rtx x86_this_parameter (tree);
static void x86_output_mi_thunk (FILE *, tree, long,
     long, tree);
static unsigned char x86_can_output_mi_thunk (tree, long, long, tree);
static void x86_file_start (void);
static void ix86_reorg (void);
static unsigned char ix86_expand_carry_flag_compare (enum rtx_code, rtx, rtx, rtx*);
static tree ix86_build_builtin_va_list (void);
static void ix86_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode,
      tree, int *, int);
static tree ix86_gimplify_va_arg (tree, tree, tree *, tree *);
struct ix86_address
{
  rtx base, index, disp;
  long scale;
  enum ix86_address_seg { SEG_DEFAULT, SEG_FS, SEG_GS } seg;
};
static int ix86_decompose_address (rtx, struct ix86_address *);
static int ix86_address_cost (rtx);
static unsigned char ix86_cannot_force_const_mem (rtx);
static rtx ix86_delegitimize_address (rtx);
struct builtin_description;
static rtx ix86_expand_sse_comi (const struct builtin_description *,
     tree, rtx);
static rtx ix86_expand_sse_compare (const struct builtin_description *,
        tree, rtx);
static rtx ix86_expand_unop1_builtin (enum insn_code, tree, rtx);
static rtx ix86_expand_unop_builtin (enum insn_code, tree, rtx, int);
static rtx ix86_expand_binop_builtin (enum insn_code, tree, rtx);
static rtx ix86_expand_store_builtin (enum insn_code, tree);
static rtx safe_vector_operand (rtx, enum machine_mode);
static enum rtx_code ix86_fp_compare_code_to_integer (enum rtx_code);
static void ix86_fp_comparison_codes (enum rtx_code code, enum rtx_code *,
          enum rtx_code *, enum rtx_code *);
static rtx ix86_expand_fp_compare (enum rtx_code, rtx, rtx, rtx, rtx *, rtx *);
static int ix86_fp_comparison_arithmetics_cost (enum rtx_code code);
static int ix86_fp_comparison_fcomi_cost (enum rtx_code code);
static int ix86_fp_comparison_sahf_cost (enum rtx_code code);
static int ix86_fp_comparison_cost (enum rtx_code code);
static unsigned int ix86_select_alt_pic_regnum (void);
static int ix86_save_reg (unsigned int, int);
static void ix86_compute_frame_layout (struct ix86_frame *);
static int ix86_comp_type_attributes (tree, tree);
static int ix86_function_regparm (tree, tree);
const struct attribute_spec ix86_attribute_table[];
static unsigned char ix86_function_ok_for_sibcall (tree, tree);
static tree ix86_handle_cdecl_attribute (tree *, tree, tree, int, unsigned char *);
static tree ix86_handle_regparm_attribute (tree *, tree, tree, int, unsigned char *);
static int ix86_value_regno (enum machine_mode);
static unsigned char contains_128bit_aligned_vector_p (tree);
static rtx ix86_struct_value_rtx (tree, int);
static unsigned char ix86_ms_bitfield_layout_p (tree);
static tree ix86_handle_struct_attribute (tree *, tree, tree, int, unsigned char *);
static int extended_reg_mentioned_1 (rtx *, void *);
static unsigned char ix86_rtx_costs (rtx, int, int, int *);
static int min_insn_size (rtx);
static tree ix86_md_asm_clobbers (tree clobbers);
enum x86_64_reg_class
  {
    X86_64_NO_CLASS,
    X86_64_INTEGER_CLASS,
    X86_64_INTEGERSI_CLASS,
    X86_64_SSE_CLASS,
    X86_64_SSESF_CLASS,
    X86_64_SSEDF_CLASS,
    X86_64_SSEUP_CLASS,
    X86_64_X87_CLASS,
    X86_64_X87UP_CLASS,
    X86_64_MEMORY_CLASS
  };
static const char * const x86_64_reg_class_name[] =
   {"no", "integer", "integerSI", "sse", "sseSF", "sseDF", "sseup", "x87", "x87up", "no"};
static int classify_argument (enum machine_mode, tree,
         enum x86_64_reg_class [4], int);
static int examine_argument (enum machine_mode, tree, int, int *, int *);
static rtx construct_container (enum machine_mode, tree, int, int, int,
    const int *, int);
static enum x86_64_reg_class merge_classes (enum x86_64_reg_class,
         enum x86_64_reg_class);
static struct real_value ext_80387_constants_table [5];
static unsigned char ext_80387_constants_init = 0;
static void init_ext_80387_constants (void);
struct gcc_target targetm = { {"", "", "\t.byte\t", {"\t.value1\t", "\t.long\t", "\t.quad\t", ((void *)0)}, {"\t.value1\t", "\t.long\t", "\t.quad\t", ((void *)0)}, default_assemble_integer, default_globalize_label, default_emit_unwind_label, default_internal_label, default_assemble_visibility, default_function_pro_epilogue, no_asm_to_stream, no_asm_to_stream, ix86_output_function_epilogue, default_elf_asm_named_section, default_exception_section, default_eh_frame_section, default_elf_select_section, default_elf_select_rtx_section, default_unique_section, default_named_section_asm_out_constructor, default_named_section_asm_out_destructor, x86_output_mi_thunk, x86_can_output_mi_thunk, x86_file_start, ix86_file_end, default_external_libcall}, {ix86_adjust_cost, 0, ix86_issue_rate, 0, 0, 0, 0, 0, 0, 0, 0, ia32_use_dfa_pipeline_interface, 0, 0, 0, 0, ia32_multipass_dfa_lookahead, 0, 0, 0, 0, 0}, merge_decl_attributes, merge_type_attributes, ix86_attribute_table, ix86_comp_type_attributes, hook_void_tree, hook_void_tree_treeptr, hook_bool_tree_false, ix86_ms_bitfield_layout_p, hook_bool_void_false, ix86_init_builtins, ix86_expand_builtin, hook_constcharptr_tree_null, hook_void_void, default_section_type_flags, hook_bool_void_false, hook_int_void_no_regs, hook_bool_bool_false, ix86_cannot_force_const_mem, ((void *)0), ix86_delegitimize_address, ix86_function_ok_for_sibcall, hook_bool_tree_false, default_binds_local_p, default_encode_section_info, default_strip_name_encoding, default_valid_pointer_mode, hook_bool_tree_false, ix86_rtx_costs, ix86_address_cost, hook_rtx_rtx_null, ix86_fixed_condition_code_regs, ix86_cc_modes_compatible, ix86_reorg, ix86_build_builtin_va_list, default_get_pch_validity, default_pch_valid_p, hook_bool_void_false, default_builtin_setjmp_frame_value, ix86_md_asm_clobbers, { hook_bool_tree_false, hook_bool_tree_false, hook_bool_tree_true, ix86_struct_value_rtx, default_return_in_memory, hook_bool_tree_false, default_expand_builtin_saveregs, ix86_setup_incoming_varargs, hook_bool_CUMULATIVE_ARGS_false, default_pretend_outgoing_varargs_named, ((void *)0), ix86_gimplify_va_arg, }, { default_cxx_guard_type, hook_bool_void_false, default_cxx_get_cookie_size, hook_bool_void_false, ((void *)0) }, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, };
void
override_options (void)
{
  int i;
  static struct ptt
    {
      const struct processor_costs *cost;
      const int target_enable;
      const int target_disable;
      const int align_loop;
      const int align_loop_max_skip;
      const int align_jump;
      const int align_jump_max_skip;
      const int align_func;
    }
  const processor_target_table[PROCESSOR_max] =
    {
      {&i386_cost, 0, 0, 4, 3, 4, 3, 4},
      {&i486_cost, 0, 0, 16, 15, 16, 15, 16},
      {&pentium_cost, 0, 0, 16, 7, 16, 7, 16},
      {&pentiumpro_cost, 0, 0, 16, 15, 16, 7, 16},
      {&k6_cost, 0, 0, 32, 7, 32, 7, 32},
      {&athlon_cost, 0, 0, 16, 7, 16, 7, 16},
      {&pentium4_cost, 0, 0, 0, 0, 0, 0, 0},
      {&k8_cost, 0, 0, 16, 7, 16, 7, 16},
      {&nocona_cost, 0, 0, 0, 0, 0, 0, 0}
    };
  static const char * const cpu_names[] = {"i386", "i486", "pentium", "pentium-mmx", "pentiumpro", "pentium2", "pentium3", "pentium4", "k6", "k6-2", "k6-3", "athlon", "athlon-4", "k8", "pentium-m", "prescott", "nocona"};
  static struct pta
    {
      const char *const name;
      const enum processor_type processor;
      const enum pta_flags
 {
   PTA_SSE = 1,
   PTA_SSE2 = 2,
   PTA_SSE3 = 4,
   PTA_MMX = 8,
   PTA_PREFETCH_SSE = 16,
   PTA_3DNOW = 32,
   PTA_3DNOW_A = 64,
   PTA_64BIT = 128
 } flags;
    }
  const processor_alias_table[] =
    {
      {"i386", PROCESSOR_I386, 0},
      {"i486", PROCESSOR_I486, 0},
      {"i586", PROCESSOR_PENTIUM, 0},
      {"pentium", PROCESSOR_PENTIUM, 0},
      {"pentium-mmx", PROCESSOR_PENTIUM, PTA_MMX},
      {"winchip-c6", PROCESSOR_I486, PTA_MMX},
      {"winchip2", PROCESSOR_I486, PTA_MMX | PTA_3DNOW},
      {"c3", PROCESSOR_I486, PTA_MMX | PTA_3DNOW},
      {"c3-2", PROCESSOR_PENTIUMPRO, PTA_MMX | PTA_PREFETCH_SSE | PTA_SSE},
      {"i686", PROCESSOR_PENTIUMPRO, 0},
      {"pentiumpro", PROCESSOR_PENTIUMPRO, 0},
      {"pentium2", PROCESSOR_PENTIUMPRO, PTA_MMX},
      {"pentium3", PROCESSOR_PENTIUMPRO, PTA_MMX | PTA_SSE | PTA_PREFETCH_SSE},
      {"pentium3m", PROCESSOR_PENTIUMPRO, PTA_MMX | PTA_SSE | PTA_PREFETCH_SSE},
      {"pentium-m", PROCESSOR_PENTIUMPRO, PTA_MMX | PTA_SSE | PTA_PREFETCH_SSE | PTA_SSE2},
      {"pentium4", PROCESSOR_PENTIUM4, PTA_SSE | PTA_SSE2
           | PTA_MMX | PTA_PREFETCH_SSE},
      {"pentium4m", PROCESSOR_PENTIUM4, PTA_SSE | PTA_SSE2
            | PTA_MMX | PTA_PREFETCH_SSE},
      {"prescott", PROCESSOR_NOCONA, PTA_SSE | PTA_SSE2 | PTA_SSE3
            | PTA_MMX | PTA_PREFETCH_SSE},
      {"nocona", PROCESSOR_NOCONA, PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_64BIT
            | PTA_MMX | PTA_PREFETCH_SSE},
      {"k6", PROCESSOR_K6, PTA_MMX},
      {"k6-2", PROCESSOR_K6, PTA_MMX | PTA_3DNOW},
      {"k6-3", PROCESSOR_K6, PTA_MMX | PTA_3DNOW},
      {"athlon", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW
       | PTA_3DNOW_A},
      {"athlon-tbird", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE
      | PTA_3DNOW | PTA_3DNOW_A},
      {"athlon-4", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW
        | PTA_3DNOW_A | PTA_SSE},
      {"athlon-xp", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW
          | PTA_3DNOW_A | PTA_SSE},
      {"athlon-mp", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW
          | PTA_3DNOW_A | PTA_SSE},
      {"x86-64", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_64BIT
          | PTA_SSE | PTA_SSE2 },
      {"k8", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW | PTA_64BIT
          | PTA_3DNOW_A | PTA_SSE | PTA_SSE2},
      {"opteron", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW | PTA_64BIT
          | PTA_3DNOW_A | PTA_SSE | PTA_SSE2},
      {"athlon64", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW | PTA_64BIT
          | PTA_3DNOW_A | PTA_SSE | PTA_SSE2},
      {"athlon-fx", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW | PTA_64BIT
          | PTA_3DNOW_A | PTA_SSE | PTA_SSE2},
    };
  int const pta_size = (sizeof (processor_alias_table) / sizeof ((processor_alias_table)[0]));
  if (0)
    {
      if (flag_omit_frame_pointer == 2)
 flag_omit_frame_pointer = 1;
      if (flag_asynchronous_unwind_tables == 2)
 flag_asynchronous_unwind_tables = 1;
      if (flag_pcc_struct_return == 2)
 flag_pcc_struct_return = 0;
    }
  else
    {
      if (flag_omit_frame_pointer == 2)
 flag_omit_frame_pointer = 0;
      if (flag_asynchronous_unwind_tables == 2)
 flag_asynchronous_unwind_tables = 0;
      if (flag_pcc_struct_return == 2)
 flag_pcc_struct_return = 1;
    }
  if (!ix86_tune_string1 && ix86_arch_string1)
    ix86_tune_string1 = ix86_arch_string1;
  if (!ix86_tune_string1)
    ix86_tune_string1 = cpu_names [0];
  if (!ix86_arch_string1)
    ix86_arch_string1 = 0 ? "x86-64" : "i386";
  if (ix86_cmodel_string1 != 0)
    {
      if (!strcmp (ix86_cmodel_string1, "small"))
 ix86_cmodel = flag_pic ? CM_SMALL_PIC : CM_SMALL;
      else if (flag_pic)
 sorry ("code model %s not supported in PIC mode", ix86_cmodel_string1);
      else if (!strcmp (ix86_cmodel_string1, "32"))
 ix86_cmodel = CM_32;
      else if (!strcmp (ix86_cmodel_string1, "kernel") && !flag_pic)
 ix86_cmodel = CM_KERNEL;
      else if (!strcmp (ix86_cmodel_string1, "medium") && !flag_pic)
 ix86_cmodel = CM_MEDIUM;
      else if (!strcmp (ix86_cmodel_string1, "large") && !flag_pic)
 ix86_cmodel = CM_LARGE;
      else
 error ("bad value (%s) for -mcmodel= switch", ix86_cmodel_string1);
    }
  else
    {
      ix86_cmodel = CM_32;
      if (0)
 ix86_cmodel = flag_pic ? CM_SMALL_PIC : CM_SMALL;
    }
  if (ix86_asm_string1 != 0)
    {
      if (!strcmp (ix86_asm_string1, "intel"))
 ix86_asm_dialect = ASM_INTEL;
      else if (!strcmp (ix86_asm_string1, "att"))
 ix86_asm_dialect = ASM_ATT;
      else
 error ("bad value (%s) for -masm= switch", ix86_asm_string1);
    }
  if ((0 == 0) != (ix86_cmodel == CM_32))
    error ("code model `%s' not supported in the %s bit mode",
    ix86_cmodel_string1, 0 ? "64" : "32");
  if (ix86_cmodel == CM_LARGE)
    sorry ("code model `large' not supported yet");
  if ((0 != 0) != ((target_flags & 0x00100000) != 0))
    sorry ("%i-bit mode not compiled in",
    (target_flags & 0x00100000) ? 64 : 32);
  for (i = 0; i < pta_size; i++)
    if (! strcmp (ix86_arch_string1, processor_alias_table[i].name))
      {
 ix86_arch = processor_alias_table[i].processor;
 ix86_tune = ix86_arch;
 if (processor_alias_table[i].flags & PTA_MMX
     && !(target_flags_explicit & 0x00002000))
   target_flags |= 0x00002000;
 if (processor_alias_table[i].flags & PTA_3DNOW
     && !(target_flags_explicit & 0x00020000))
   target_flags |= 0x00020000;
 if (processor_alias_table[i].flags & PTA_3DNOW_A
     && !(target_flags_explicit & 0x00040000))
   target_flags |= 0x00040000;
 if (processor_alias_table[i].flags & PTA_SSE
     && !(target_flags_explicit & 0x00004000))
   target_flags |= 0x00004000;
 if (processor_alias_table[i].flags & PTA_SSE2
     && !(target_flags_explicit & 0x00008000))
   target_flags |= 0x00008000;
 if (processor_alias_table[i].flags & PTA_SSE3
     && !(target_flags_explicit & 0x00010000))
   target_flags |= 0x00010000;
 if (processor_alias_table[i].flags & PTA_PREFETCH_SSE)
   x86_prefetch_sse = 1;
 if (0 && !(processor_alias_table[i].flags & PTA_64BIT))
   error ("CPU you selected does not support x86-64 instruction set");
 break;
      }
  if (i == pta_size)
    error ("bad value (%s) for -march= switch", ix86_arch_string1);
  for (i = 0; i < pta_size; i++)
    if (! strcmp (ix86_tune_string1, processor_alias_table[i].name))
      {
 ix86_tune = processor_alias_table[i].processor;
 if (0 && !(processor_alias_table[i].flags & PTA_64BIT))
   error ("CPU you selected does not support x86-64 instruction set");
 break;
      }
  if (processor_alias_table[i].flags & PTA_PREFETCH_SSE)
    x86_prefetch_sse = 1;
  if (i == pta_size)
    error ("bad value (%s) for -mtune= switch", ix86_tune_string1);
  if (optimize_size)
    ix86_cost = &size_cost;
  else
    ix86_cost = processor_target_table[ix86_tune].cost;
  target_flags |= processor_target_table[ix86_tune].target_enable;
  target_flags &= ~processor_target_table[ix86_tune].target_disable;
  init_machine_status = ix86_init_machine_status;
  if (ix86_regparm_string1)
    {
      i = atoi (ix86_regparm_string1);
      if (i < 0 || i > (0 ? 6 : 3))
 error ("-mregparm=%d is not between 0 and %d", i, (0 ? 6 : 3));
      else
 ix86_regparm = i;
    }
  else
   if (0)
     ix86_regparm = (0 ? 6 : 3);
  if (ix86_align_loops_string1)
    {
      warning ("-malign-loops is obsolete, use -falign-loops");
      if (align_loops == 0)
 {
   i = atoi (ix86_align_loops_string1);
   if (i < 0 || i > 16)
     error ("-malign-loops=%d is not between 0 and %d", i, 16);
   else
     align_loops = 1 << i;
 }
    }
  if (ix86_align_jumps_string1)
    {
      warning ("-malign-jumps is obsolete, use -falign-jumps");
      if (align_jumps == 0)
 {
   i = atoi (ix86_align_jumps_string1);
   if (i < 0 || i > 16)
     error ("-malign-loops=%d is not between 0 and %d", i, 16);
   else
     align_jumps = 1 << i;
 }
    }
  if (ix86_align_funcs_string1)
    {
      warning ("-malign-functions is obsolete, use -falign-functions");
      if (align_functions == 0)
 {
   i = atoi (ix86_align_funcs_string1);
   if (i < 0 || i > 16)
     error ("-malign-loops=%d is not between 0 and %d", i, 16);
   else
     align_functions = 1 << i;
 }
    }
  if (align_loops == 0)
    {
      align_loops = processor_target_table[ix86_tune].align_loop;
      align_loops_max_skip = processor_target_table[ix86_tune].align_loop_max_skip;
    }
  if (align_jumps == 0)
    {
      align_jumps = processor_target_table[ix86_tune].align_jump;
      align_jumps_max_skip = processor_target_table[ix86_tune].align_jump_max_skip;
    }
  if (align_functions == 0)
    {
      align_functions = processor_target_table[ix86_tune].align_func;
    }
  ix86_preferred_stack_boundary = (optimize_size
       ? 0
       : 128);
  if (ix86_preferred_stack_boundary_string1)
    {
      i = atoi (ix86_preferred_stack_boundary_string1);
      if (i < (0 ? 4 : 2) || i > 12)
 error ("-mpreferred-stack-boundary=%d is not between %d and 12", i,
        0 ? 4 : 2);
      else
 ix86_preferred_stack_boundary = (1 << i) * 8;
    }
  ix86_branch_cost = processor_target_table[ix86_tune].cost->branch_cost;
  if (ix86_branch_cost_string1)
    {
      i = atoi (ix86_branch_cost_string1);
      if (i < 0 || i > 5)
 error ("-mbranch-cost=%d is not between 0 and 5", i);
      else
 ix86_branch_cost = i;
    }
  if (ix86_tls_dialect_string1)
    {
      if (strcmp (ix86_tls_dialect_string1, "gnu") == 0)
 ix86_tls_dialect = TLS_DIALECT_GNU;
      else if (strcmp (ix86_tls_dialect_string1, "sun") == 0)
 ix86_tls_dialect = TLS_DIALECT_SUN;
      else
 error ("bad value (%s) for -mtls-dialect= switch",
        ix86_tls_dialect_string1);
    }
  if ((target_flags & 0x080))
    flag_omit_frame_pointer = 1;
  if (flag_unsafe_math_optimizations)
    target_flags &= ~0x00000010;
  if (x86_arch_always_fancy_math_387 & (1 << ix86_arch))
    target_flags &= ~0x00000040;
  if (((target_flags & 0x00010000) != 0))
    target_flags |= 0x00008000;
  if (((target_flags & 0x00008000) != 0))
    target_flags |= 0x00004000;
  if (0)
    {
      if ((target_flags & 0x00000004))
 error ("-malign-double makes no sense in the 64bit mode");
      if ((target_flags & 0x00000002))
 error ("-mrtd calling convention not supported in the 64bit mode");
      target_flags |= (0x00008000 | 0x00004000 | 0x00002000 | 0x00080000);
      ix86_fpmath = FPMATH_SSE;
     }
  else
    {
      ix86_fpmath = FPMATH_387;
      if (!(target_flags_explicit & 0x04000000))
        target_flags |= 0x04000000;
    }
  if (ix86_fpmath_string1 != 0)
    {
      if (! strcmp (ix86_fpmath_string1, "387"))
 ix86_fpmath = FPMATH_387;
      else if (! strcmp (ix86_fpmath_string1, "sse"))
 {
   if (!((target_flags & 0x00004000) != 0))
     {
       warning ("SSE instruction set disabled, using 387 arithmetics");
       ix86_fpmath = FPMATH_387;
     }
   else
     ix86_fpmath = FPMATH_SSE;
 }
      else if (! strcmp (ix86_fpmath_string1, "387,sse")
        || ! strcmp (ix86_fpmath_string1, "sse,387"))
 {
   if (!((target_flags & 0x00004000) != 0))
     {
       warning ("SSE instruction set disabled, using 387 arithmetics");
       ix86_fpmath = FPMATH_387;
     }
   else if (!(target_flags & 0x00000001))
     {
       warning ("387 instruction set disabled, using SSE arithmetics");
       ix86_fpmath = FPMATH_SSE;
     }
   else
     ix86_fpmath = FPMATH_SSE | FPMATH_387;
 }
      else
 error ("bad value (%s) for -mfpmath= switch", ix86_fpmath_string1);
    }
  if (((target_flags & 0x00004000) != 0))
    {
      target_flags |= 0x00002000;
      x86_prefetch_sse = 1;
    }
  if (((target_flags & 0x00020000) != 0))
    {
      target_flags |= 0x00002000;
      if (x86_3dnow_a & (1 << ix86_arch))
 target_flags |= 0x00040000;
    }
  if ((x86_accumulate_outgoing_args & (1 << ix86_tune))
      && !(target_flags_explicit & 0x00001000)
      && !optimize_size)
    target_flags |= 0x00001000;
  {
    char *p;
    do { sprintf (internal_label_prefix, "*.%s%u", "LX", (unsigned) (0)); } while (0);
    p = strchr (internal_label_prefix, 'X');
    internal_label_prefix_len = p - internal_label_prefix;
    *p = '\0';
  }
}
void
optimization_options (int level, int size )
{
  if (level > 1)
    flag_schedule_insns = 0;
  if (optimize >= 1)
    flag_omit_frame_pointer = 2;
  flag_pcc_struct_return = 2;
  flag_asynchronous_unwind_tables = 2;
}
const struct attribute_spec ix86_attribute_table[] =
{
  { "stdcall", 0, 0, 0, 1, 1, ix86_handle_cdecl_attribute },
  { "fastcall", 0, 0, 0, 1, 1, ix86_handle_cdecl_attribute },
  { "cdecl", 0, 0, 0, 1, 1, ix86_handle_cdecl_attribute },
  { "regparm", 1, 1, 0, 1, 1, ix86_handle_regparm_attribute },
  { "ms_struct", 0, 0, 0, 0, 0, ix86_handle_struct_attribute },
  { "gcc_struct", 0, 0, 0, 0, 0, ix86_handle_struct_attribute },
  { ((void *)0), 0, 0, 0, 0, 0, ((void *)0) }
};
static unsigned char
ix86_function_ok_for_sibcall (tree decl, tree exp)
{
  if (!0 && flag_pic && (!decl || ((decl)->common.public_flag)))
    return 0;
  if (((((enum rtx_code) (ix86_function_value (((exp)->common.type)))->code) == REG) && (((ix86_function_value (((exp)->common.type)))->u.fld[0]).rtuint) >= 8 && (((ix86_function_value (((exp)->common.type)))->u.fld[0]).rtuint) <= (8 + 7))
      != ((((enum rtx_code) (ix86_function_value (((((cfun->decl)->decl.result))->common.type)))->code) == REG) && (((ix86_function_value (((((cfun->decl)->decl.result))->common.type)))->u.fld[0]).rtuint) >= 8 && (((ix86_function_value (((((cfun->decl)->decl.result))->common.type)))->u.fld[0]).rtuint) <= (8 + 7)))
    return 0;
  if (!decl && !0)
    {
      tree type;
      type = ((exp)->exp.operands[0]);
      type = ((type)->common.type);
      type = ((type)->common.type);
      if (ix86_function_regparm (type, ((void *)0)) >= 3)
 {
   return 0;
 }
    }
  return 1;
}
static tree
ix86_handle_cdecl_attribute (tree *node, tree name,
        tree args ,
        int flags , unsigned char *no_add_attrs)
{
  if (((enum tree_code) (*node)->common.code) != FUNCTION_TYPE
      && ((enum tree_code) (*node)->common.code) != METHOD_TYPE
      && ((enum tree_code) (*node)->common.code) != FIELD_DECL
      && ((enum tree_code) (*node)->common.code) != TYPE_DECL)
    {
      warning ("`%s' attribute only applies to functions",
        ((const char *) (name)->identifier.id.str));
      *no_add_attrs = 1;
    }
  else
    {
      if (is_attribute_p ("fastcall", name))
        {
          if (lookup_attribute ("stdcall", ((*node)->type.attributes)))
            {
              error ("fastcall and stdcall attributes are not compatible");
            }
           else if (lookup_attribute ("regparm", ((*node)->type.attributes)))
            {
              error ("fastcall and regparm attributes are not compatible");
            }
        }
      else if (is_attribute_p ("stdcall", name))
        {
          if (lookup_attribute ("fastcall", ((*node)->type.attributes)))
            {
              error ("fastcall and stdcall attributes are not compatible");
            }
        }
    }
  if (0)
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs = 1;
    }
  return (tree) ((void *)0);
}
static tree
ix86_handle_regparm_attribute (tree *node, tree name, tree args,
          int flags , unsigned char *no_add_attrs)
{
  if (((enum tree_code) (*node)->common.code) != FUNCTION_TYPE
      && ((enum tree_code) (*node)->common.code) != METHOD_TYPE
      && ((enum tree_code) (*node)->common.code) != FIELD_DECL
      && ((enum tree_code) (*node)->common.code) != TYPE_DECL)
    {
      warning ("`%s' attribute only applies to functions",
        ((const char *) (name)->identifier.id.str));
      *no_add_attrs = 1;
    }
  else
    {
      tree cst;
      cst = ((args)->list.value1);
      if (((enum tree_code) (cst)->common.code) != INTEGER_CST)
 {
   warning ("`%s' attribute requires an integer constant argument",
     ((const char *) (name)->identifier.id.str));
   *no_add_attrs = 1;
 }
      else if (compare_tree_int (cst, (0 ? 6 : 3)) > 0)
 {
   warning ("argument to `%s' attribute larger than %d",
     ((const char *) (name)->identifier.id.str), (0 ? 6 : 3));
   *no_add_attrs = 1;
 }
      if (lookup_attribute ("fastcall", ((*node)->type.attributes)))
 {
   error ("fastcall and regparm attributes are not compatible");
 }
    }
  return (tree) ((void *)0);
}
static int
ix86_comp_type_attributes (tree type1, tree type2)
{
  const char *const rtdstr = (target_flags & 0x00000002) ? "cdecl" : "stdcall";
  if (((enum tree_code) (type1)->common.code) != FUNCTION_TYPE)
    return 1;
  if (!lookup_attribute ("fastcall", ((type1)->type.attributes))
      != !lookup_attribute ("fastcall", ((type2)->type.attributes)))
    return 0;
  if (!lookup_attribute (rtdstr, ((type1)->type.attributes))
      != !lookup_attribute (rtdstr, ((type2)->type.attributes)))
    return 0;
  if (ix86_function_regparm (type1, ((void *)0))
      != ix86_function_regparm (type2, ((void *)0)))
    return 0;
  return 1;
}
static int
ix86_function_regparm (tree type, tree decl)
{
  tree attr;
  int regparm = ix86_regparm;
  unsigned char user_convention = 0;
  if (!0)
    {
      attr = lookup_attribute ("regparm", ((type)->type.attributes));
      if (attr)
 {
   regparm = (((((((attr)->list.value1))->list.value1))->int_cst.int_cst).low);
   user_convention = 1;
 }
      if (lookup_attribute ("fastcall", ((type)->type.attributes)))
 {
   regparm = 2;
   user_convention = 1;
 }
      if (!0 && !user_convention && decl
   && flag_unit_at_a_time && !profile_flag)
 {
   struct cgraph_local_info *i = cgraph_local_info (decl);
   if (i && i->local)
     {
       if (((decl)->decl.context) && !((decl)->decl.regdecl_flag))
  regparm = 2;
       else
  regparm = 3;
     }
 }
    }
  return regparm;
}
static unsigned char
ix86_eax_live_at_start_p (void)
{
  return bitmap_bit_p (ENTRY_BLOCK_PTR->global_live_at_end, 0);
}
int
ix86_return_pops_args (tree fundecl, tree funtype, int size)
{
  int rtd = (target_flags & 0x00000002) && (!fundecl || ((enum tree_code) (fundecl)->common.code) != IDENTIFIER_NODE);
  if (! lookup_attribute ("cdecl", ((funtype)->type.attributes))) {
    if (lookup_attribute ("stdcall", ((funtype)->type.attributes))
        || lookup_attribute ("fastcall", ((funtype)->type.attributes)))
      rtd = 1;
    if (rtd
        && (((funtype)->type.value1s) == (tree) ((void *)0)
     || (((tree_last (((funtype)->type.value1s)))->list.value1)
  == global_trees[TI_VOID_TYPE])))
      return size;
  }
  if (aggregate_value_p (((funtype)->common.type), fundecl)
      && !0)
    {
      int nregs = ix86_function_regparm (funtype, fundecl);
      if (!nregs)
 return ((unsigned short) mode_size[(0 ? DImode : SImode)]);
    }
  return 0;
}
unsigned char
ix86_function_arg_regno_p (int regno)
{
  int i;
  if (!0)
    return (regno < (0 ? 6 : 3)
     || (((target_flags & 0x00004000) != 0) && (((regno) >= (20 + 1) && (regno) <= ((20 + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) && !fixed_regs[regno]));
  if ((((regno) >= (20 + 1) && (regno) <= ((20 + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))) && ((target_flags & 0x00004000) != 0))
    return 1;
  if (!regno)
    return 1;
  for (i = 0; i < (0 ? 6 : 3); i++)
    if (regno == x86_64_int_parameter_registers[i])
      return 1;
  return 0;
}
void
init_cumulative_args (CUMULATIVE_ARGS *cum,
        tree fntype,
        rtx libname,
        tree fndecl)
{
  static CUMULATIVE_ARGS zero_cum;
  tree param, next_param;
  if ((ix86_debug_arg_string1 != 0))
    {
      fprintf (stderr, "\ninit_cumulative_args (");
      if (fntype)
 fprintf (stderr, "fntype code = %s, ret code = %s",
   tree_code_name[(int) ((enum tree_code) (fntype)->common.code)],
   tree_code_name[(int) ((enum tree_code) (((fntype)->common.type))->common.code)]);
      else
 fprintf (stderr, "no fntype");
      if (libname)
 fprintf (stderr, ", libname = %s", (((libname)->u.fld[0]).rtstr));
    }
  *cum = zero_cum;
  if (fntype)
    cum->nregs = ix86_function_regparm (fntype, fndecl);
  else
    cum->nregs = ix86_regparm;
  cum->sse_nregs = (0 ? 8 : (((target_flags & 0x00004000) != 0) ? 3 : 0));
  cum->mmx_nregs = (0 ? 0 : (((target_flags & 0x00002000) != 0) ? 3 : 0));
  cum->warn_sse = 1;
  cum->warn_mmx = 1;
  cum->maybe_vaarg = 0;
  if (fntype && !0)
    {
      if (lookup_attribute ("fastcall", ((fntype)->type.attributes)))
 {
   cum->nregs = 2;
   cum->fastcall = 1;
 }
    }
  if (cum->nregs || !((target_flags & 0x00002000) != 0) || !((target_flags & 0x00004000) != 0))
    {
      for (param = (fntype) ? ((fntype)->type.value1s) : 0;
    param != 0; param = next_param)
 {
   next_param = ((param)->common.chain);
   if (next_param == 0 && ((param)->list.value1) != global_trees[TI_VOID_TYPE])
     {
       if (!0)
  {
    cum->nregs = 0;
    cum->sse_nregs = 0;
    cum->mmx_nregs = 0;
    cum->warn_sse = 0;
    cum->warn_mmx = 0;
    cum->fastcall = 0;
  }
       cum->maybe_vaarg = 1;
     }
 }
    }
  if ((!fntype && !libname)
      || (fntype && !((fntype)->type.value1s)))
    cum->maybe_vaarg = 1;
  if ((ix86_debug_arg_string1 != 0))
    fprintf (stderr, ", nregs=%d )\n", cum->nregs);
  return;
}
static enum x86_64_reg_class
merge_classes (enum x86_64_reg_class class1, enum x86_64_reg_class class2)
{
  if (class1 == class2)
    return class1;
  if (class1 == X86_64_NO_CLASS)
    return class2;
  if (class2 == X86_64_NO_CLASS)
    return class1;
  if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS)
    return X86_64_MEMORY_CLASS;
  if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS)
      || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS))
    return X86_64_INTEGERSI_CLASS;
  if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS
      || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS)
    return X86_64_INTEGER_CLASS;
  if (class1 == X86_64_X87_CLASS || class1 == X86_64_X87UP_CLASS
      || class2 == X86_64_X87_CLASS || class2 == X86_64_X87UP_CLASS)
    return X86_64_MEMORY_CLASS;
  return X86_64_SSE_CLASS;
}
static int
classify_argument (enum machine_mode mode, tree type,
     enum x86_64_reg_class classes[4], int bit_offset)
{
  long bytes =
    (mode == BLKmode) ? int_size_in_bytes (type) : (int) ((unsigned short) mode_size[mode]);
  int words = (bytes + (bit_offset % 64) / 8 + (0 ? 8 : 4) - 1) / (0 ? 8 : 4);
  if (bytes < 0)
    return 0;
  if (mode != VOIDmode
      && ix86_must_pass_in_stack ((mode), (type)))
    return 0;
  if (type && (((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE))
    {
      int i;
      tree field;
      enum x86_64_reg_class subclasses[4];
      if (bytes > 16)
 return 0;
      for (i = 0; i < words; i++)
 classes[i] = X86_64_NO_CLASS;
      if (!words)
 {
   classes[0] = X86_64_NO_CLASS;
   return 1;
 }
      if (((enum tree_code) (type)->common.code) == RECORD_TYPE)
 {
   if (((type)->type.binfo) != ((void *)0) && ((((type)->type.binfo))->binfo.base_types) != ((void *)0))
     {
       tree bases = ((((type)->type.binfo))->binfo.base_types);
       int n_bases = ((bases)->vec.length);
       int i;
       for (i = 0; i < n_bases; ++i)
  {
     tree binfo = ((bases)->vec.a[i]);
     int num;
     int offset = tree_low_cst (((binfo)->binfo.offset), 0) * 8;
     tree type = (((binfo))->common.type);
     num = classify_argument (((type)->type.mode),
         type, subclasses,
         (offset + bit_offset) % 256);
     if (!num)
       return 0;
     for (i = 0; i < num; i++)
       {
         int pos = (offset + (bit_offset % 64)) / 8 / 8;
         classes[i + pos] =
    merge_classes (subclasses[i], classes[i + pos]);
       }
  }
     }
   for (field = ((type)->type.value1s); field; field = ((field)->common.chain))
     {
       if (((enum tree_code) (field)->common.code) == FIELD_DECL)
  {
    int num;
    if (((field)->decl.bit_field_flag))
      {
        for (i = int_bit_position (field) / 8 / 8;
      i < (int_bit_position (field)
           + tree_low_cst (((field)->decl.size), 0)
    + 63) / 8 / 8; i++)
   classes[i] =
     merge_classes (X86_64_INTEGER_CLASS,
      classes[i]);
      }
    else
      {
        num = classify_argument (((((field)->common.type))->type.mode),
            ((field)->common.type), subclasses,
            (int_bit_position (field)
      + bit_offset) % 256);
        if (!num)
   return 0;
        for (i = 0; i < num; i++)
   {
     int pos =
       (int_bit_position (field) + (bit_offset % 64)) / 8 / 8;
     classes[i + pos] =
       merge_classes (subclasses[i], classes[i + pos]);
   }
      }
  }
     }
 }
      else if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
 {
   int num;
   num = classify_argument (((((type)->common.type))->type.mode),
       ((type)->common.type), subclasses, bit_offset);
   if (!num)
     return 0;
   if (subclasses[0] == X86_64_SSESF_CLASS && bytes != 4)
     subclasses[0] = X86_64_SSE_CLASS;
   if (subclasses[0] == X86_64_INTEGERSI_CLASS && bytes != 4)
     subclasses[0] = X86_64_INTEGER_CLASS;
   for (i = 0; i < words; i++)
     classes[i] = subclasses[i % num];
 }
      else if (((enum tree_code) (type)->common.code) == UNION_TYPE
        || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE)
 {
   if (((type)->type.binfo) != ((void *)0) && ((((type)->type.binfo))->binfo.base_types) != ((void *)0))
     {
       tree bases = ((((type)->type.binfo))->binfo.base_types);
       int n_bases = ((bases)->vec.length);
       int i;
       for (i = 0; i < n_bases; ++i)
  {
     tree binfo = ((bases)->vec.a[i]);
     int num;
     int offset = tree_low_cst (((binfo)->binfo.offset), 0) * 8;
     tree type = (((binfo))->common.type);
     num = classify_argument (((type)->type.mode),
         type, subclasses,
         (offset + (bit_offset % 64)) % 256);
     if (!num)
       return 0;
     for (i = 0; i < num; i++)
       {
         int pos = (offset + (bit_offset % 64)) / 8 / 8;
         classes[i + pos] =
    merge_classes (subclasses[i], classes[i + pos]);
       }
  }
     }
   for (field = ((type)->type.value1s); field; field = ((field)->common.chain))
     {
       if (((enum tree_code) (field)->common.code) == FIELD_DECL)
  {
    int num;
    num = classify_argument (((((field)->common.type))->type.mode),
        ((field)->common.type), subclasses,
        bit_offset);
    if (!num)
      return 0;
    for (i = 0; i < num; i++)
      classes[i] = merge_classes (subclasses[i], classes[i]);
  }
     }
 }
      else if (((enum tree_code) (type)->common.code) == SET_TYPE)
 {
   if (bytes <= 4)
     {
       classes[0] = X86_64_INTEGERSI_CLASS;
       return 1;
     }
   else if (bytes <= 8)
     {
       classes[0] = X86_64_INTEGER_CLASS;
       return 1;
     }
   else if (bytes <= 12)
     {
       classes[0] = X86_64_INTEGER_CLASS;
       classes[1] = X86_64_INTEGERSI_CLASS;
       return 2;
     }
   else
     {
       classes[0] = X86_64_INTEGER_CLASS;
       classes[1] = X86_64_INTEGER_CLASS;
       return 2;
     }
 }
      else
 fancy_abort ("gcc.c", 690321, "?");
      for (i = 0; i < words; i++)
 {
   if (classes[i] == X86_64_MEMORY_CLASS)
     return 0;
   if (classes[i] == X86_64_SSEUP_CLASS
       && (i == 0 || classes[i - 1] != X86_64_SSE_CLASS))
     classes[i] = X86_64_SSE_CLASS;
   if (classes[i] == X86_64_X87UP_CLASS
       && (i == 0 || classes[i - 1] != X86_64_X87_CLASS))
     classes[i] = X86_64_SSE_CLASS;
 }
      return words;
    }
  if (mode != VOIDmode && mode != BLKmode)
    {
      int mode_alignment = ((unsigned short) (((unsigned short) mode_size[mode]) * 8));
      if (mode == XFmode)
 mode_alignment = 128;
      else if (mode == XCmode)
 mode_alignment = 256;
      if ((mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_COMPLEX_FLOAT))
 mode_alignment /= 2;
      if (bit_offset % mode_alignment)
 return 0;
    }
  switch (mode)
    {
    case DImode:
    case SImode:
    case HImode:
    case QImode:
    case CSImode:
    case CHImode:
    case CQImode:
      if (bit_offset + ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= 32)
 classes[0] = X86_64_INTEGERSI_CLASS;
      else
 classes[0] = X86_64_INTEGER_CLASS;
      return 1;
    case CDImode:
    case TImode:
      classes[0] = classes[1] = X86_64_INTEGER_CLASS;
      return 2;
    case CTImode:
      classes[0] = classes[1] = X86_64_INTEGER_CLASS;
      classes[2] = classes[3] = X86_64_INTEGER_CLASS;
      return 4;
    case SFmode:
      if (!(bit_offset % 64))
 classes[0] = X86_64_SSESF_CLASS;
      else
 classes[0] = X86_64_SSE_CLASS;
      return 1;
    case DFmode:
      classes[0] = X86_64_SSEDF_CLASS;
      return 1;
    case XFmode:
      classes[0] = X86_64_X87_CLASS;
      classes[1] = X86_64_X87UP_CLASS;
      return 2;
    case TFmode:
    case TCmode:
      return 0;
    case XCmode:
      classes[0] = X86_64_X87_CLASS;
      classes[1] = X86_64_X87UP_CLASS;
      classes[2] = X86_64_X87_CLASS;
      classes[3] = X86_64_X87UP_CLASS;
      return 4;
    case DCmode:
      classes[0] = X86_64_SSEDF_CLASS;
      classes[1] = X86_64_SSEDF_CLASS;
      return 2;
    case SCmode:
      classes[0] = X86_64_SSE_CLASS;
      return 1;
    case V4SFmode:
    case V4SImode:
    case V16QImode:
    case V8HImode:
    case V2DFmode:
    case V2DImode:
      classes[0] = X86_64_SSE_CLASS;
      classes[1] = X86_64_SSEUP_CLASS;
      return 2;
    case V2SFmode:
    case V2SImode:
    case V4HImode:
    case V8QImode:
      return 0;
    case BLKmode:
    case VOIDmode:
      return 0;
    default:
      fancy_abort ("gcc.c", 690432, "?");
    }
}
static int
examine_argument (enum machine_mode mode, tree type, int in_return,
    int *int_nregs, int *sse_nregs)
{
  enum x86_64_reg_class class[4];
  int n = classify_argument (mode, type, class, 0);
  *int_nregs = 0;
  *sse_nregs = 0;
  if (!n)
    return 0;
  for (n--; n >= 0; n--)
    switch (class[n])
      {
      case X86_64_INTEGER_CLASS:
      case X86_64_INTEGERSI_CLASS:
 (*int_nregs)++;
 break;
      case X86_64_SSE_CLASS:
      case X86_64_SSESF_CLASS:
      case X86_64_SSEDF_CLASS:
 (*sse_nregs)++;
 break;
      case X86_64_NO_CLASS:
      case X86_64_SSEUP_CLASS:
 break;
      case X86_64_X87_CLASS:
      case X86_64_X87UP_CLASS:
 if (!in_return)
   return 0;
 break;
      case X86_64_MEMORY_CLASS:
 fancy_abort ("gcc.c", 690470, "?");
      }
  return 1;
}
static rtx
construct_container (enum machine_mode mode, tree type, int in_return,
       int nintregs, int nsseregs, const int * intreg,
       int sse_regno)
{
  enum machine_mode tmpmode;
  int bytes =
    (mode == BLKmode) ? int_size_in_bytes (type) : (int) ((unsigned short) mode_size[mode]);
  enum x86_64_reg_class class[4];
  int n;
  int i;
  int nexps = 0;
  int needed_sseregs, needed_intregs;
  rtx exp[4];
  rtx ret;
  n = classify_argument (mode, type, class, 0);
  if ((ix86_debug_arg_string1 != 0))
    {
      if (!n)
 fprintf (stderr, "Memory class\n");
      else
 {
   fprintf (stderr, "Classes:");
   for (i = 0; i < n; i++)
     {
       fprintf (stderr, " %s", x86_64_reg_class_name[class[i]]);
     }
    fprintf (stderr, "\n");
 }
    }
  if (!n)
    return ((void *)0);
  if (!examine_argument (mode, type, in_return, &needed_intregs, &needed_sseregs))
    return ((void *)0);
  if (needed_intregs > nintregs || needed_sseregs > nsseregs)
    return ((void *)0);
  if (n == 1 && mode != SCmode)
    switch (class[0])
      {
      case X86_64_INTEGER_CLASS:
      case X86_64_INTEGERSI_CLASS:
 return gen_rtx_REG (mode, intreg[0]);
      case X86_64_SSE_CLASS:
      case X86_64_SSESF_CLASS:
      case X86_64_SSEDF_CLASS:
 return gen_rtx_REG (mode, ((sse_regno) < 8 ? (20 + 1) + (sse_regno) : (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + (sse_regno) - 8));
      case X86_64_X87_CLASS:
 return gen_rtx_REG (mode, 8);
      case X86_64_NO_CLASS:
 return ((void *)0);
      default:
 fancy_abort ("gcc.c", 690532, "?");
      }
  if (n == 2 && class[0] == X86_64_SSE_CLASS && class[1] == X86_64_SSEUP_CLASS
      && mode != BLKmode)
    return gen_rtx_REG (mode, ((sse_regno) < 8 ? (20 + 1) + (sse_regno) : (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + (sse_regno) - 8));
  if (n == 2
      && class[0] == X86_64_X87_CLASS && class[1] == X86_64_X87UP_CLASS)
    return gen_rtx_REG (XFmode, 8);
  if (n == 2 && class[0] == X86_64_INTEGER_CLASS
      && class[1] == X86_64_INTEGER_CLASS
      && (mode == CDImode || mode == TImode || mode == TFmode)
      && intreg[0] + 1 == intreg[1])
    return gen_rtx_REG (mode, intreg[0]);
  if (n == 4
      && class[0] == X86_64_X87_CLASS && class[1] == X86_64_X87UP_CLASS
      && class[2] == X86_64_X87_CLASS && class[3] == X86_64_X87UP_CLASS
      && mode != BLKmode)
    return gen_rtx_REG (XCmode, 8);
  for (i = 0; i < n; i++)
    {
      switch (class[i])
        {
   case X86_64_NO_CLASS:
     break;
   case X86_64_INTEGER_CLASS:
   case X86_64_INTEGERSI_CLASS:
     if (i * 8 + 8 > bytes)
       tmpmode = mode_for_size ((bytes - i * 8) * 8, MODE_INT, 0);
     else if (class[i] == X86_64_INTEGERSI_CLASS)
       tmpmode = SImode;
     else
       tmpmode = DImode;
     if (tmpmode == BLKmode)
       tmpmode = DImode;
     exp [nexps++] = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_REG (tmpmode, *intreg)), (gen_rtx_CONST_INT (VOIDmode, (long) (i*8))))
                          ;
     intreg++;
     break;
   case X86_64_SSESF_CLASS:
     exp [nexps++] = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_REG (SFmode, ((sse_regno) < 8 ? (20 + 1) + (sse_regno) : (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + (sse_regno) - 8))), (gen_rtx_CONST_INT (VOIDmode, (long) (i*8))))
                          ;
     sse_regno++;
     break;
   case X86_64_SSEDF_CLASS:
     exp [nexps++] = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_REG (DFmode, ((sse_regno) < 8 ? (20 + 1) + (sse_regno) : (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + (sse_regno) - 8))), (gen_rtx_CONST_INT (VOIDmode, (long) (i*8))))
                          ;
     sse_regno++;
     break;
   case X86_64_SSE_CLASS:
     if (i < n - 1 && class[i + 1] == X86_64_SSEUP_CLASS)
       tmpmode = TImode;
     else
       tmpmode = DImode;
     exp [nexps++] = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (gen_rtx_REG (tmpmode, ((sse_regno) < 8 ? (20 + 1) + (sse_regno) : (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + (sse_regno) - 8))), (gen_rtx_CONST_INT (VOIDmode, (long) (i*8))))
                          ;
     if (tmpmode == TImode)
       i++;
     sse_regno++;
     break;
   default:
     fancy_abort ("gcc.c", 690603, "?");
 }
    }
  ret = gen_rtx_fmt_E (PARALLEL, (mode), (rtvec_alloc (nexps)));
  for (i = 0; i < nexps; i++)
    (((((ret)->u.fld[0]).rtvec1))->elem[i]) = exp [i];
  return ret;
}
void
function_arg_advance (CUMULATIVE_ARGS *cum,
        enum machine_mode mode,
        tree type,
        int named)
{
  int bytes =
    (mode == BLKmode) ? int_size_in_bytes (type) : (int) ((unsigned short) mode_size[mode]);
  int words = (bytes + (0 ? 8 : 4) - 1) / (0 ? 8 : 4);
  if ((ix86_debug_arg_string1 != 0))
    fprintf (stderr,
      "function_adv (sz=%d, wds=%2d, nregs=%d, ssenregs=%d, mode=%s, named=%d)\n\n",
      words, cum->words, cum->nregs, cum->sse_nregs, mode_name[mode], named);
  if (0)
    {
      int int_nregs, sse_nregs;
      if (!examine_argument (mode, type, 0, &int_nregs, &sse_nregs))
 cum->words += words;
      else if (sse_nregs <= cum->sse_nregs && int_nregs <= cum->nregs)
 {
   cum->nregs -= int_nregs;
   cum->sse_nregs -= sse_nregs;
   cum->regno += int_nregs;
   cum->sse_regno += sse_nregs;
 }
      else
 cum->words += words;
    }
  else
    {
      if (((target_flags & 0x00004000) != 0) && ((mode) == TImode || (mode) == V16QImode || (mode) == TFmode || (mode) == V8HImode || (mode) == V2DFmode || (mode) == V2DImode || (mode) == V4SFmode || (mode) == V4SImode)
   && (!type || !(((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE)))
 {
   cum->sse_words += words;
   cum->sse_nregs -= 1;
   cum->sse_regno += 1;
   if (cum->sse_nregs <= 0)
     {
       cum->sse_nregs = 0;
       cum->sse_regno = 0;
     }
 }
      else if (((target_flags & 0x00002000) != 0) && ((mode) == V8QImode || (mode) == V4HImode || (mode) == V2SImode || (mode) == V2SFmode)
        && (!type || !(((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE)))
 {
   cum->mmx_words += words;
   cum->mmx_nregs -= 1;
   cum->mmx_regno += 1;
   if (cum->mmx_nregs <= 0)
     {
       cum->mmx_nregs = 0;
       cum->mmx_regno = 0;
     }
 }
      else
 {
   cum->words += words;
   cum->nregs -= words;
   cum->regno += words;
   if (cum->nregs <= 0)
     {
       cum->nregs = 0;
       cum->regno = 0;
     }
 }
    }
  return;
}
rtx
function_arg (CUMULATIVE_ARGS *cum,
       enum machine_mode mode,
       tree type,
       int named)
{
  rtx ret = (rtx) 0;
  int bytes =
    (mode == BLKmode) ? int_size_in_bytes (type) : (int) ((unsigned short) mode_size[mode]);
  int words = (bytes + (0 ? 8 : 4) - 1) / (0 ? 8 : 4);
  static unsigned char warnedsse, warnedmmx;
  if (mode == VOIDmode)
    {
      if (0)
 return gen_rtx_CONST_INT (VOIDmode, (long) (cum->maybe_vaarg ? (cum->sse_nregs < 0 ? (0 ? 8 : (((target_flags & 0x00004000) != 0) ? 3 : 0)) : cum->sse_regno) : -1))
        ;
      else
 return (const_int_rtx[64 -1]);
    }
  if (0)
    ret = construct_container (mode, type, 0, cum->nregs, cum->sse_nregs,
          &x86_64_int_parameter_registers [cum->regno],
          cum->sse_regno);
  else
    switch (mode)
      {
      default:
 break;
      case BLKmode:
 if (bytes < 0)
   break;
      case DImode:
      case SImode:
      case HImode:
      case QImode:
 if (words <= cum->nregs)
   {
     int regno = cum->regno;
     if (cum->fastcall)
       {
         if (mode == BLKmode || mode == DImode)
           break;
         if (regno == 0)
    regno = 2;
       }
     ret = gen_rtx_REG (mode, regno);
   }
 break;
      case TImode:
      case V16QImode:
      case V8HImode:
      case V4SImode:
      case V2DImode:
      case V4SFmode:
      case V2DFmode:
 if (!type || !(((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE))
   {
     if (!((target_flags & 0x00004000) != 0) && !warnedmmx && cum->warn_sse)
       {
  warnedsse = 1;
  warning ("SSE vector argument without SSE enabled changes the ABI");
       }
     if (cum->sse_nregs)
       ret = gen_rtx_REG (mode, cum->sse_regno + (20 + 1));
   }
 break;
      case V8QImode:
      case V4HImode:
      case V2SImode:
      case V2SFmode:
 if (!type || !(((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE))
   {
     if (!((target_flags & 0x00002000) != 0) && !warnedmmx && cum->warn_mmx)
       {
  warnedmmx = 1;
  warning ("MMX vector argument without MMX enabled changes the ABI");
       }
     if (cum->mmx_nregs)
       ret = gen_rtx_REG (mode, cum->mmx_regno + (((20 + 1) + 7) + 1));
   }
 break;
      }
  if ((ix86_debug_arg_string1 != 0))
    {
      fprintf (stderr,
        "function_arg (size=%d, wds=%2d, nregs=%d, mode=%4s, named=%d, ",
        words, cum->words, cum->nregs, mode_name[mode], named);
      if (ret)
 print_simple_rtl (stderr, ret);
      else
 fprintf (stderr, ", stack");
      fprintf (stderr, " )\n");
    }
  return ret;
}
int
function_arg_pass_by_reference (CUMULATIVE_ARGS *cum ,
    enum machine_mode mode ,
    tree type, int named )
{
  if (!0)
    return 0;
  if (type && int_size_in_bytes (type) == -1)
    {
      if ((ix86_debug_arg_string1 != 0))
 fprintf (stderr, "function_arg_pass_by_reference\n");
      return 1;
    }
  return 0;
}
static unsigned char
contains_128bit_aligned_vector_p (tree type)
{
  enum machine_mode mode = ((type)->type.mode);
  if (((mode) == TImode || (mode) == V16QImode || (mode) == TFmode || (mode) == V8HImode || (mode) == V2DFmode || (mode) == V2DImode || (mode) == V4SFmode || (mode) == V4SImode)
      && (!((type)->type.user_align) || ((type)->type.align) > 128))
    return 1;
  if (((type)->type.align) < 128)
    return 0;
  if ((((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE))
    {
      if (((enum tree_code) (type)->common.code) == RECORD_TYPE
   || ((enum tree_code) (type)->common.code) == UNION_TYPE
   || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE)
 {
   tree field;
   if (((type)->type.binfo) != ((void *)0)
       && ((((type)->type.binfo))->binfo.base_types) != ((void *)0))
     {
       tree bases = ((((type)->type.binfo))->binfo.base_types);
       int n_bases = ((bases)->vec.length);
       int i;
       for (i = 0; i < n_bases; ++i)
  {
    tree binfo = ((bases)->vec.a[i]);
    tree type = (((binfo))->common.type);
    if (contains_128bit_aligned_vector_p (type))
      return 1;
  }
     }
   for (field = ((type)->type.value1s); field; field = ((field)->common.chain))
     {
       if (((enum tree_code) (field)->common.code) == FIELD_DECL
    && contains_128bit_aligned_vector_p (((field)->common.type)))
  return 1;
     }
 }
      else if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
 {
   if (contains_128bit_aligned_vector_p (((type)->common.type)))
     return 1;
 }
      else
 fancy_abort ("gcc.c", 690893, "?");
    }
  return 0;
}
int
ix86_function_arg_boundary (enum machine_mode mode, tree type)
{
  int align;
  if (type)
    align = ((type)->type.align);
  else
    align = get_mode_alignment (mode);
  if (align < (8 * (0 ? 8 : 4)))
    align = (8 * (0 ? 8 : 4));
  if (!0)
    {
      if (!type)
 {
   if (!((mode) == TImode || (mode) == V16QImode || (mode) == TFmode || (mode) == V8HImode || (mode) == V2DFmode || (mode) == V2DImode || (mode) == V4SFmode || (mode) == V4SImode))
     align = (8 * (0 ? 8 : 4));
 }
      else
 {
   if (!contains_128bit_aligned_vector_p (type))
     align = (8 * (0 ? 8 : 4));
 }
    }
  if (align > 128)
    align = 128;
  return align;
}
unsigned char
ix86_function_value_regno_p (int regno)
{
  if (!0)
    {
      return ((regno) == 0
       || ((regno) == 8 && (target_flags & 0x00000020))
       || ((regno) == (20 + 1) && ((target_flags & 0x00004000) != 0)));
    }
  return ((regno) == 0 || (regno) == 8
   || ((regno) == (20 + 1) && ((target_flags & 0x00004000) != 0))
   || ((regno) == 8 && (target_flags & 0x00000020)));
}
rtx
ix86_function_value (tree valtype)
{
  if (0)
    {
      rtx ret = construct_container (((valtype)->type.mode), valtype, 1,
         (0 ? 6 : 3), (0 ? 8 : (((target_flags & 0x00004000) != 0) ? 3 : 0)),
         x86_64_int_return_registers, 0);
      if (!ret)
 ret = gen_rtx_REG (((valtype)->type.mode), 0);
      return ret;
    }
  else
    return gen_rtx_REG (((valtype)->type.mode),
   ix86_value_regno (((valtype)->type.mode)));
}
int
ix86_return_in_memory (tree type)
{
  int needed_intregs, needed_sseregs, size;
  enum machine_mode mode = ((type)->type.mode);
  if (0)
    return !examine_argument (mode, type, 1, &needed_intregs, &needed_sseregs);
  if (mode == BLKmode)
    return 1;
  size = int_size_in_bytes (type);
  if (0 && (((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE) && size <= 8)
    return 0;
  if ((mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT) || mode == TImode)
    {
      if (size < 8)
 return 0;
      if (size == 8)
 return 1;
      if (size == 16)
 return (((target_flags & 0x00004000) != 0) ? 0 : 1);
    }
  if (mode == XFmode)
    return 0;
  if (size > 12)
    return 1;
  return 0;
}
static rtx
ix86_struct_value_rtx (tree type, int incoming )
{
  static unsigned char warned;
  if (!((target_flags & 0x00004000) != 0) && type && !warned)
    {
      enum machine_mode mode = ((((type)->common.type))->type.mode);
      if (mode == TImode
   || ((mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT) && ((unsigned short) mode_size[mode]) == 16))
 {
   warned = 1;
   warning ("SSE vector return without SSE enabled changes the ABI");
 }
    }
  return ((void *)0);
}
rtx
ix86_libcall_value (enum machine_mode mode)
{
  if (0)
    {
      switch (mode)
 {
 case SFmode:
 case SCmode:
 case DFmode:
 case DCmode:
   return gen_rtx_REG (mode, (20 + 1));
 case XFmode:
 case XCmode:
   return gen_rtx_REG (mode, 8);
 case TFmode:
 case TCmode:
   return ((void *)0);
 default:
   return gen_rtx_REG (mode, 0);
 }
    }
  else
    return gen_rtx_REG (mode, ix86_value_regno (mode));
}
static int
ix86_value_regno (enum machine_mode mode)
{
  if (mode_class[mode] == MODE_FLOAT && (target_flags & 0x00000020))
    return 8;
  if (mode == TImode || ((mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT) && ((unsigned short) mode_size[mode]) == 16))
    return (20 + 1);
  return 0;
}
static tree
ix86_build_builtin_va_list (void)
{
  tree f_gpr, f_fpr, f_ovf, f_sav, record, type_decl;
  if (!0)
    return build_pointer_type (integer_types[itk_char]);
  record = (*lang_hooks.types.make_type) (RECORD_TYPE);
  type_decl = build_decl_stat (TYPE_DECL,get_identifier ("__va_list_tag"),record );
  f_gpr = build_decl_stat (FIELD_DECL,get_identifier ("gp_offset"),integer_types[itk_unsigned_int] )
                           ;
  f_fpr = build_decl_stat (FIELD_DECL,get_identifier ("fp_offset"),integer_types[itk_unsigned_int] )
                           ;
  f_ovf = build_decl_stat (FIELD_DECL,get_identifier ("overflow_arg_area"),global_trees[TI_PTR_TYPE] )
                      ;
  f_sav = build_decl_stat (FIELD_DECL,get_identifier ("reg_save_area"),global_trees[TI_PTR_TYPE] )
                      ;
  ((f_gpr)->decl.context) = record;
  ((f_fpr)->decl.context) = record;
  ((f_ovf)->decl.context) = record;
  ((f_sav)->decl.context) = record;
  ((record)->common.chain) = type_decl;
  ((record)->type.name) = type_decl;
  ((record)->type.value1s) = f_gpr;
  ((f_gpr)->common.chain) = f_fpr;
  ((f_fpr)->common.chain) = f_ovf;
  ((f_ovf)->common.chain) = f_sav;
  layout_type (record);
  return build_array_type (record, build_index_type (global_trees[TI_SIZE_ZERO]));
}
static void
ix86_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
        tree type, int *pretend_size ,
        int no_rtl)
{
  CUMULATIVE_ARGS next_cum;
  rtx save_area = (rtx) 0, mem;
  rtx label;
  rtx label_ref;
  rtx tmp_reg;
  rtx nsse_reg;
  int set;
  tree fntype;
  int stdarg_p;
  int i;
  if (!0)
    return;
  (cfun->machine->save_varrargs_registers) = 1;
  cfun->stack_alignment_needed = 128;
  fntype = ((current_function_decl)->common.type);
  stdarg_p = (((fntype)->type.value1s) != 0
       && (((tree_last (((fntype)->type.value1s)))->list.value1)
    != global_trees[TI_VOID_TYPE]));
  next_cum = *cum;
  if (stdarg_p)
    function_arg_advance (&next_cum, mode, type, 1);
  if (!no_rtl)
    save_area = (global_rtl[GR_FRAME_POINTER]);
  set = get_varargs_alias_set ();
  for (i = next_cum.regno; i < ix86_regparm; i++)
    {
      mem = gen_rtx_MEM ((0 ? DImode : SImode),
    plus_constant_wide ((save_area), (long) (i * (0 ? 8 : 4))));
      set_mem_alias_set (mem, set);
      emit_move_insn (mem, gen_rtx_REG ((0 ? DImode : SImode),
     x86_64_int_parameter_registers[i]));
    }
  if (next_cum.sse_nregs)
    {
      label = gen_label_rtx ();
      label_ref = gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (label));
      tmp_reg = gen_reg_rtx ((0 ? DImode : SImode));
      nsse_reg = gen_reg_rtx ((0 ? DImode : SImode));
      emit_insn (gen_zero_extendqidi2 (nsse_reg, gen_rtx_REG (QImode, 0)));
      emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (tmp_reg), (gen_rtx_fmt_ee (MULT, ((0 ? DImode : SImode)), (nsse_reg), (gen_rtx_CONST_INT (VOIDmode, (long) (4))))))
                      );
      if (next_cum.sse_regno)
 emit_move_insn
   (nsse_reg,
    gen_rtx_fmt_e (CONST, (DImode), (gen_rtx_fmt_ee (PLUS, (DImode), (label_ref), (gen_rtx_CONST_INT (VOIDmode, (long) (next_cum.sse_regno * 4))))))
                                       );
      else
 emit_move_insn (nsse_reg, label_ref);
      emit_insn (gen_subdi3 (nsse_reg, nsse_reg, tmp_reg));
      tmp_reg = gen_reg_rtx ((0 ? DImode : SImode));
      emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (tmp_reg), (plus_constant_wide ((save_area), (long) (8 * (0 ? 6 : 3) + 127))))
                                 );
      mem = gen_rtx_MEM (BLKmode, plus_constant_wide ((tmp_reg), (long) (-127)));
      set_mem_alias_set (mem, set);
      set_mem_align (mem, (8 * (0 ? 8 : 4)));
      emit_insn (gen_sse_prologue_save (mem, nsse_reg,
     gen_rtx_CONST_INT (VOIDmode, (long) (next_cum.sse_regno)), label));
    }
}
void
ix86_va_start (tree valist, rtx nextarg)
{
  long words, n_gpr, n_fpr;
  tree f_gpr, f_fpr, f_ovf, f_sav;
  tree gpr, fpr, ovf, sav, t;
  if (!0)
    {
      std_expand_builtin_va_start (valist, nextarg);
      return;
    }
  f_gpr = ((((global_trees[TI_VA_LIST_TYPE])->common.type))->type.value1s);
  f_fpr = ((f_gpr)->common.chain);
  f_ovf = ((f_fpr)->common.chain);
  f_sav = ((f_ovf)->common.chain);
  valist = build1_stat (INDIRECT_REF,((((valist)->common.type))->common.type),valist );
  gpr = build (COMPONENT_REF, ((f_gpr)->common.type), valist, f_gpr, (tree) ((void *)0));
  fpr = build (COMPONENT_REF, ((f_fpr)->common.type), valist, f_fpr, (tree) ((void *)0));
  ovf = build (COMPONENT_REF, ((f_ovf)->common.type), valist, f_ovf, (tree) ((void *)0));
  sav = build (COMPONENT_REF, ((f_sav)->common.type), valist, f_sav, (tree) ((void *)0));
  words = (cfun->args_info).words;
  n_gpr = (cfun->args_info).regno;
  n_fpr = (cfun->args_info).sse_regno;
  if ((ix86_debug_arg_string1 != 0))
    fprintf (stderr, "va_start: words = %d, n_gpr = %d, n_fpr = %d\n",
      (int) words, (int) n_gpr, (int) n_fpr);
  t = build (MODIFY_EXPR, ((gpr)->common.type), gpr,
      build_int_2_wide ((unsigned long) (n_gpr * 8), (long) (0)));
  ((t)->common.side_effects_flag) = 1;
  expand_expr (t, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
  t = build (MODIFY_EXPR, ((fpr)->common.type), fpr,
      build_int_2_wide ((unsigned long) (n_fpr * 16 + 8*(0 ? 6 : 3)), (long) (0)));
  ((t)->common.side_effects_flag) = 1;
  expand_expr (t, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
  t = make_tree (((ovf)->common.type), (global_rtl[GR_VIRTUAL_INCOMING_ARGS]));
  if (words != 0)
    t = build (PLUS_EXPR, ((ovf)->common.type), t,
        build_int_2_wide ((unsigned long) (words * (0 ? 8 : 4)), (long) (0)));
  t = build (MODIFY_EXPR, ((ovf)->common.type), ovf, t);
  ((t)->common.side_effects_flag) = 1;
  expand_expr (t, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
  t = make_tree (((sav)->common.type), (global_rtl[GR_FRAME_POINTER]));
  t = build (MODIFY_EXPR, ((sav)->common.type), sav, t);
  ((t)->common.side_effects_flag) = 1;
  expand_expr (t, (const_int_rtx[64]), VOIDmode, EXPAND_NORMAL);
}
tree
ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
{
  static const int intreg[6] = { 0, 1, 2, 3, 4, 5 };
  tree f_gpr, f_fpr, f_ovf, f_sav;
  tree gpr, fpr, ovf, sav, t;
  int size, rsize;
  tree lab_false, lab_over = (tree) ((void *)0);
  tree addr, t2;
  rtx container;
  int indirect_p = 0;
  tree ptrtype;
  if (!0)
    return std_gimplify_va_arg_expr (valist, type, pre_p, post_p);
  f_gpr = ((((global_trees[TI_VA_LIST_TYPE])->common.type))->type.value1s);
  f_fpr = ((f_gpr)->common.chain);
  f_ovf = ((f_fpr)->common.chain);
  f_sav = ((f_ovf)->common.chain);
  valist = build_fold_indirect_ref (valist);
  gpr = build (COMPONENT_REF, ((f_gpr)->common.type), valist, f_gpr, (tree) ((void *)0));
  fpr = build (COMPONENT_REF, ((f_fpr)->common.type), valist, f_fpr, (tree) ((void *)0));
  ovf = build (COMPONENT_REF, ((f_ovf)->common.type), valist, f_ovf, (tree) ((void *)0));
  sav = build (COMPONENT_REF, ((f_sav)->common.type), valist, f_sav, (tree) ((void *)0));
  size = int_size_in_bytes (type);
  if (size == -1)
    {
      indirect_p = 1;
      type = build_pointer_type (type);
      size = int_size_in_bytes (type);
    }
  rsize = (size + (0 ? 8 : 4) - 1) / (0 ? 8 : 4);
  container = construct_container (((type)->type.mode), type, 0,
       (0 ? 6 : 3), (0 ? 8 : (((target_flags & 0x00004000) != 0) ? 3 : 0)), intreg, 0);
  addr = create_tmp_var (global_trees[TI_PTR_TYPE], "addr");
  ((addr)->decl.pointer_alias_set) = get_varargs_alias_set ();
  if (container)
    {
      int needed_intregs, needed_sseregs;
      int need_temp;
      tree int_addr, sse_addr;
      lab_false = create_artificial_label ();
      lab_over = create_artificial_label ();
      examine_argument (((type)->type.mode), type, 0,
          &needed_intregs, &needed_sseregs);
      need_temp = ((needed_intregs && ((type)->type.align) > 64)
     || ((type)->type.align) > 128);
      if (!need_temp && !(((enum rtx_code) (container)->code) == REG))
 {
   if (((((((((((((((container)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= (20 + 1) && ((((((((((((container)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((((((((((container)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((((((((((container)->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1))->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))
     {
       int i;
       for (i = 0; i < (((((container)->u.fld[0]).rtvec1))->num_elem) && !need_temp; i++)
  {
    rtx slot = (((((container)->u.fld[0]).rtvec1))->elem[i]);
    if (((((((slot)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != (20 + 1) + (unsigned int) i
        || (((((slot)->u.fld[1]).rtx1))->u.hwint[0]) != i * 16)
      need_temp = 1;
  }
     }
   else
     {
       int i;
       for (i = 0; i < (((((container)->u.fld[0]).rtvec1))->num_elem) && !need_temp; i++)
  {
    rtx slot = (((((container)->u.fld[0]).rtvec1))->elem[i]);
    if (((((((slot)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != (unsigned int) i
        || (((((slot)->u.fld[1]).rtx1))->u.hwint[0]) != i * 8)
      need_temp = 1;
  }
     }
 }
      if (!need_temp)
 {
   int_addr = addr;
   sse_addr = addr;
 }
      else
 {
   int_addr = create_tmp_var (global_trees[TI_PTR_TYPE], "int_addr");
   ((int_addr)->decl.pointer_alias_set) = get_varargs_alias_set ();
   sse_addr = create_tmp_var (global_trees[TI_PTR_TYPE], "sse_addr");
   ((sse_addr)->decl.pointer_alias_set) = get_varargs_alias_set ();
 }
      if (needed_intregs)
 {
   t = build_int_2_wide ((unsigned long) (((0 ? 6 : 3) - needed_intregs + 1) * 8), (long) (0));
   ((t)->common.type) = ((gpr)->common.type);
   t = build2_stat (GE_EXPR,global_trees[TI_BOOLEAN_TYPE],gpr,t );
   t2 = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],lab_false );
   t = build (COND_EXPR, global_trees[TI_VOID_TYPE], t, t2, (tree) ((void *)0));
   gimplify_and_add (t, pre_p);
 }
      if (needed_sseregs)
 {
   t = build_int_2_wide ((unsigned long) (((0 ? 8 : (((target_flags & 0x00004000) != 0) ? 3 : 0)) - needed_sseregs + 1) * 16 + (0 ? 6 : 3) * 8), (long) (0))
                           ;
   ((t)->common.type) = ((fpr)->common.type);
   t = build2_stat (GE_EXPR,global_trees[TI_BOOLEAN_TYPE],fpr,t );
   t2 = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],lab_false );
   t = build (COND_EXPR, global_trees[TI_VOID_TYPE], t, t2, (tree) ((void *)0));
   gimplify_and_add (t, pre_p);
 }
      if (needed_intregs)
 {
   t = build2_stat (PLUS_EXPR,global_trees[TI_PTR_TYPE],sav,gpr );
   t = build2_stat (MODIFY_EXPR,global_trees[TI_VOID_TYPE],int_addr,t );
   gimplify_and_add (t, pre_p);
 }
      if (needed_sseregs)
 {
   t = build2_stat (PLUS_EXPR,global_trees[TI_PTR_TYPE],sav,fpr );
   t = build2_stat (MODIFY_EXPR,global_trees[TI_VOID_TYPE],sse_addr,t );
   gimplify_and_add (t, pre_p);
 }
      if (need_temp)
 {
   int i;
   tree temp = create_tmp_var (type, "va_arg_tmp");
   t = build1_stat (ADDR_EXPR,build_pointer_type (type),temp );
   t = build2_stat (MODIFY_EXPR,global_trees[TI_VOID_TYPE],addr,t );
   gimplify_and_add (t, pre_p);
   for (i = 0; i < (((((container)->u.fld[0]).rtvec1))->num_elem); i++)
     {
       rtx slot = (((((container)->u.fld[0]).rtvec1))->elem[i]);
       rtx reg = (((slot)->u.fld[0]).rtx1);
       enum machine_mode mode = ((enum machine_mode) (reg)->mode);
       tree piece_type = lang_hooks.types.type_for_mode (mode, 1);
       tree addr_type = build_pointer_type (piece_type);
       tree src_addr, src;
       int src_offset;
       tree dest_addr, dest;
       if (((((((reg)->u.fld[0]).rtuint)) >= (20 + 1) && ((((reg)->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((reg)->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((reg)->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))
  {
    src_addr = sse_addr;
    src_offset = ((((reg)->u.fld[0]).rtuint) - (20 + 1)) * 16;
  }
       else
  {
    src_addr = int_addr;
    src_offset = (((reg)->u.fld[0]).rtuint) * 8;
  }
       src_addr = fold_convert (addr_type, src_addr);
       src_addr = fold (build2_stat (PLUS_EXPR,addr_type,src_addr,size_int_wide ((long) (src_offset), SIZETYPE) )
                                 );
       src = build_fold_indirect_ref (src_addr);
       dest_addr = fold_convert (addr_type, addr);
       dest_addr = fold (build2_stat (PLUS_EXPR,addr_type,dest_addr,size_int_wide ((long) ((((((slot)->u.fld[1]).rtx1))->u.hwint[0])), SIZETYPE) )
                                        );
       dest = build_fold_indirect_ref (dest_addr);
       t = build2_stat (MODIFY_EXPR,global_trees[TI_VOID_TYPE],dest,src );
       gimplify_and_add (t, pre_p);
     }
 }
      if (needed_intregs)
 {
   t = build2_stat (PLUS_EXPR,((gpr)->common.type),gpr,build_int_2_wide ((unsigned long) (needed_intregs * 8), (long) (0)) )
                                            ;
   t = build2_stat (MODIFY_EXPR,((gpr)->common.type),gpr,t );
   gimplify_and_add (t, pre_p);
 }
      if (needed_sseregs)
 {
   t =
     build2_stat (PLUS_EXPR,((fpr)->common.type),fpr,build_int_2_wide ((unsigned long) (needed_sseregs * 16), (long) (0)) )
                                          ;
   t = build2_stat (MODIFY_EXPR,((fpr)->common.type),fpr,t );
   gimplify_and_add (t, pre_p);
 }
      t = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],lab_over );
      gimplify_and_add (t, pre_p);
      t = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],lab_false );
      append_to_statement_list (t, pre_p);
    }
  if (ix86_function_arg_boundary ((VOIDmode), (type)) <= 64)
    t = ovf;
  else
    {
      long align = ix86_function_arg_boundary ((VOIDmode), (type)) / 8;
      t = build (PLUS_EXPR, ((ovf)->common.type), ovf, build_int_2_wide ((unsigned long) (align - 1), (long) (0)));
      t = build (BIT_AND_EXPR, ((t)->common.type), t, build_int_2_wide ((unsigned long) (-align), (long) (-1)));
    }
  gimplify_expr (&t, pre_p, ((void *)0), is_gimple_val, fb_rvalue);
  t2 = build2_stat (MODIFY_EXPR,global_trees[TI_VOID_TYPE],addr,t );
  gimplify_and_add (t2, pre_p);
  t = build2_stat (PLUS_EXPR,((t)->common.type),t,build_int_2_wide ((unsigned long) (rsize * (0 ? 8 : 4)), (long) (0)) )
                                               ;
  t = build2_stat (MODIFY_EXPR,((ovf)->common.type),ovf,t );
  gimplify_and_add (t, pre_p);
  if (container)
    {
      t = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],lab_over );
      append_to_statement_list (t, pre_p);
    }
  ptrtype = build_pointer_type (type);
  addr = fold_convert (ptrtype, addr);
  if (indirect_p)
    addr = build_fold_indirect_ref (addr);
  return build_fold_indirect_ref (addr);
}
int
any_fp_register_operand (rtx op, enum machine_mode mode )
{
  return ((((enum rtx_code) (op)->code) == REG) && ((((((op)->u.fld[0]).rtuint)) >= 8 && ((((op)->u.fld[0]).rtuint)) <= (8 + 7)) || ((((((op)->u.fld[0]).rtuint)) >= (20 + 1) && ((((op)->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((op)->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((op)->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))));
}
int
fp_register_operand (rtx op, enum machine_mode mode )
{
  return ((((enum rtx_code) (op)->code) == REG) && (((((op)->u.fld[0]).rtuint)) >= 8 && ((((op)->u.fld[0]).rtuint)) <= (8 + 7)));
}
int
register_and_not_any_fp_reg_operand (rtx op, enum machine_mode mode)
{
  return register_operand (op, mode) && !((((enum rtx_code) (op)->code) == REG) && ((((((op)->u.fld[0]).rtuint)) >= 8 && ((((op)->u.fld[0]).rtuint)) <= (8 + 7)) || ((((((op)->u.fld[0]).rtuint)) >= (20 + 1) && ((((op)->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((op)->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((op)->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))));
}
int
register_and_not_fp_reg_operand (rtx op, enum machine_mode mode)
{
  return register_operand (op, mode) && !((((enum rtx_code) (op)->code) == REG) && (((((op)->u.fld[0]).rtuint)) >= 8 && ((((op)->u.fld[0]).rtuint)) <= (8 + 7)));
}
int
x86_64_general_operand (rtx op, enum machine_mode mode)
{
  if (!0)
    return general_operand (op, mode);
  if (nonimmediate_operand (op, mode))
    return 1;
  return x86_64_sign_extended_value (op);
}
int
x86_64_szext_general_operand (rtx op, enum machine_mode mode)
{
  if (!0)
    return general_operand (op, mode);
  if (nonimmediate_operand (op, mode))
    return 1;
  return x86_64_sign_extended_value (op) || x86_64_zero_extended_value (op);
}
int
x86_64_nonmemory_operand (rtx op, enum machine_mode mode)
{
  if (!0)
    return nonmemory_operand (op, mode);
  if (register_operand (op, mode))
    return 1;
  return x86_64_sign_extended_value (op);
}
int
x86_64_movabs_operand (rtx op, enum machine_mode mode)
{
  if (!0 || !flag_pic)
    return nonmemory_operand (op, mode);
  if (register_operand (op, mode) || x86_64_sign_extended_value (op))
    return 1;
  if (((rtx_class[(int) (((enum rtx_code) (op)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op)->code) == CONST_VECTOR) && !symbolic_reference_mentioned_p (op))
    return 1;
  return 0;
}
int
ix86_check_movabs (rtx insn, int opnum)
{
  rtx set, mem;
  set = (((insn)->u.fld[5]).rtx1);
  if (((enum rtx_code) (set)->code) == PARALLEL)
    set = (((((set)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (set)->code) != SET)
    fancy_abort ("gcc.c", 691633, "?");
  mem = (((set)->u.fld[opnum]).rtx1);
  while (((enum rtx_code) (mem)->code) == SUBREG)
    mem = (((mem)->u.fld[0]).rtx1);
  if (((enum rtx_code) (mem)->code) != MEM)
    fancy_abort ("gcc.c", 691638, "?");
  return (volatile_ok || !(((mem))->volatil));
}
int
x86_64_szext_nonmemory_operand (rtx op, enum machine_mode mode)
{
  if (!0)
    return nonmemory_operand (op, mode);
  if (register_operand (op, mode))
    return 1;
  return x86_64_sign_extended_value (op) || x86_64_zero_extended_value (op);
}
int
x86_64_immediate_operand (rtx op, enum machine_mode mode)
{
  if (!0)
    return immediate_operand (op, mode);
  return x86_64_sign_extended_value (op);
}
int
x86_64_zext_immediate_operand (rtx op, enum machine_mode mode )
{
  return x86_64_zero_extended_value (op);
}
int
const_int_1_31_operand (rtx op, enum machine_mode mode )
{
  return (((enum rtx_code) (op)->code) == CONST_INT && ((op)->u.hwint[0]) >= 1 && ((op)->u.hwint[0]) <= 31);
}
int
symbolic_operand (rtx op, enum machine_mode mode )
{
  switch (((enum rtx_code) (op)->code))
    {
    case SYMBOL_REF:
    case LABEL_REF:
      return 1;
    case CONST:
      op = (((op)->u.fld[0]).rtx1);
      if (((enum rtx_code) (op)->code) == SYMBOL_REF
   || ((enum rtx_code) (op)->code) == LABEL_REF
   || (((enum rtx_code) (op)->code) == UNSPEC
       && ((((op)->u.fld[1]).rtint) == 0
    || (((op)->u.fld[1]).rtint) == 1
    || (((op)->u.fld[1]).rtint) == 2)))
 return 1;
      if (((enum rtx_code) (op)->code) != PLUS
   || ((enum rtx_code) ((((op)->u.fld[1]).rtx1))->code) != CONST_INT)
 return 0;
      op = (((op)->u.fld[0]).rtx1);
      if (((enum rtx_code) (op)->code) == SYMBOL_REF
   || ((enum rtx_code) (op)->code) == LABEL_REF)
 return 1;
      if (((enum rtx_code) (op)->code) != UNSPEC
   || (((op)->u.fld[1]).rtint) != 1)
 return 0;
      op = (((((op)->u.fld[0]).rtvec1))->elem[0]);
      if (((enum rtx_code) (op)->code) == SYMBOL_REF
   || ((enum rtx_code) (op)->code) == LABEL_REF)
 return 1;
      return 0;
    default:
      return 0;
    }
}
int
pic_symbolic_operand (rtx op, enum machine_mode mode )
{
  if (((enum rtx_code) (op)->code) != CONST)
    return 0;
  op = (((op)->u.fld[0]).rtx1);
  if (0)
    {
      if (((enum rtx_code) (op)->code) == UNSPEC
   && (((op)->u.fld[1]).rtint) == 2)
 return 1;
      if (((enum rtx_code) (op)->code) == PLUS
   && ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == UNSPEC
   && ((((((op)->u.fld[0]).rtx1))->u.fld[1]).rtint) == 2)
 return 1;
    }
  else
    {
      if (((enum rtx_code) (op)->code) == UNSPEC)
 return 1;
      if (((enum rtx_code) (op)->code) != PLUS
   || ((enum rtx_code) ((((op)->u.fld[1]).rtx1))->code) != CONST_INT)
 return 0;
      op = (((op)->u.fld[0]).rtx1);
      if (((enum rtx_code) (op)->code) == UNSPEC)
 return 1;
    }
  return 0;
}
static int
local_symbolic_operand (rtx op, enum machine_mode mode )
{
  if (((enum rtx_code) (op)->code) == CONST
      && ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == PLUS
      && ((enum rtx_code) (((((((op)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
    op = ((((((op)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
  if (((enum rtx_code) (op)->code) == LABEL_REF)
    return 1;
  if (((enum rtx_code) (op)->code) != SYMBOL_REF)
    return 0;
  if (((((((op))->u.fld[1]).rtint) & (1 << 1)) != 0))
    return 1;
  if (strncmp ((((op)->u.fld[0]).rtstr), internal_label_prefix,
        internal_label_prefix_len) == 0)
    return 1;
  return 0;
}
int
tls_symbolic_operand (rtx op, enum machine_mode mode )
{
  if (((enum rtx_code) (op)->code) != SYMBOL_REF)
    return 0;
  return ((enum tls_model) ((((((op))->u.fld[1]).rtint) >> 3) & 7));
}
static int
tls_symbolic_operand_1 (rtx op, enum tls_model kind)
{
  if (((enum rtx_code) (op)->code) != SYMBOL_REF)
    return 0;
  return ((enum tls_model) ((((((op))->u.fld[1]).rtint) >> 3) & 7)) == kind;
}
int
global_dynamic_symbolic_operand (rtx op,
     enum machine_mode mode )
{
  return tls_symbolic_operand_1 (op, TLS_MODEL_GLOBAL_DYNAMIC);
}
int
local_dynamic_symbolic_operand (rtx op,
    enum machine_mode mode )
{
  return tls_symbolic_operand_1 (op, TLS_MODEL_LOCAL_DYNAMIC);
}
int
initial_exec_symbolic_operand (rtx op, enum machine_mode mode )
{
  return tls_symbolic_operand_1 (op, TLS_MODEL_INITIAL_EXEC);
}
int
local_exec_symbolic_operand (rtx op, enum machine_mode mode )
{
  return tls_symbolic_operand_1 (op, TLS_MODEL_LOCAL_EXEC);
}
int
call_insn_operand (rtx op, enum machine_mode mode )
{
  if (((enum rtx_code) (op)->code) == REG
      && (op == (global_rtl[GR_ARG_POINTER])
   || op == (global_rtl[GR_FRAME_POINTER])
   || ((((op)->u.fld[0]).rtuint) >= 53
       && (((op)->u.fld[0]).rtuint) <= (((53)) + 4))))
    return 0;
  if (((enum rtx_code) (op)->code) == CONST_INT)
    return 0;
  if (((enum rtx_code) (op)->code) == SYMBOL_REF)
    return 1;
  return general_operand (op, (0 ? DImode : SImode));
}
int
sibcall_insn_operand (rtx op, enum machine_mode mode )
{
  if (((enum rtx_code) (op)->code) == REG
      && (op == (global_rtl[GR_ARG_POINTER])
   || op == (global_rtl[GR_FRAME_POINTER])
   || ((((op)->u.fld[0]).rtuint) >= 53
       && (((op)->u.fld[0]).rtuint) <= (((53)) + 4))))
    return 0;
  if (((enum rtx_code) (op)->code) == SYMBOL_REF)
    return 1;
  return register_operand (op, (0 ? DImode : SImode));
}
int
constant_call_address_operand (rtx op, enum machine_mode mode )
{
  if (((enum rtx_code) (op)->code) == CONST
      && ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == PLUS
      && ((enum rtx_code) (((((((op)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
    op = ((((((op)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
  return ((enum rtx_code) (op)->code) == SYMBOL_REF;
}
int
const0_operand (rtx op, enum machine_mode mode)
{
  return op == (const_tiny_rtx[0][(int) (mode)]);
}
int
const1_operand (rtx op, enum machine_mode mode )
{
  return op == (const_int_rtx[64 +1]);
}
int
const248_operand (rtx op, enum machine_mode mode )
{
  return (((enum rtx_code) (op)->code) == CONST_INT
   && (((op)->u.hwint[0]) == 2 || ((op)->u.hwint[0]) == 4 || ((op)->u.hwint[0]) == 8));
}
int
const_0_to_3_operand (rtx op, enum machine_mode mode )
{
  return (((enum rtx_code) (op)->code) == CONST_INT && ((op)->u.hwint[0]) >= 0 && ((op)->u.hwint[0]) < 4);
}
int
const_0_to_7_operand (rtx op, enum machine_mode mode )
{
  return (((enum rtx_code) (op)->code) == CONST_INT && ((op)->u.hwint[0]) >= 0 && ((op)->u.hwint[0]) < 8);
}
int
const_0_to_15_operand (rtx op, enum machine_mode mode )
{
  return (((enum rtx_code) (op)->code) == CONST_INT && ((op)->u.hwint[0]) >= 0 && ((op)->u.hwint[0]) < 16);
}
int
const_0_to_255_operand (rtx op, enum machine_mode mode )
{
  return (((enum rtx_code) (op)->code) == CONST_INT && ((op)->u.hwint[0]) >= 0 && ((op)->u.hwint[0]) < 256);
}
int
incdec_operand (rtx op, enum machine_mode mode )
{
  if (((ix86_tune == PROCESSOR_PENTIUM4) || (ix86_tune == PROCESSOR_NOCONA)) && !optimize_size)
    return 0;
  return op == (const_int_rtx[64 +1]) || op == (const_int_rtx[64 -1]);
}
int
shiftdi_operand (rtx op, enum machine_mode mode )
{
  if (0)
    return nonimmediate_operand (op, mode);
  else
    return register_operand (op, mode);
}
int
reg_no_sp_operand (rtx op, enum machine_mode mode)
{
  rtx t = op;
  if (((enum rtx_code) (t)->code) == SUBREG)
    t = (((t)->u.fld[0]).rtx1);
  if (t == (global_rtl[GR_STACK_POINTER]) || t == (global_rtl[GR_ARG_POINTER]) || t == (global_rtl[GR_FRAME_POINTER]))
    return 0;
  return register_operand (op, mode);
}
int
mmx_reg_operand (rtx op, enum machine_mode mode )
{
  return ((((enum rtx_code) (op)->code) == REG) && (((((op)->u.fld[0]).rtuint)) >= (((20 + 1) + 7) + 1) && ((((op)->u.fld[0]).rtuint)) <= ((((20 + 1) + 7) + 1) + 7)));
}
int
general_no_elim_operand (rtx op, enum machine_mode mode)
{
  rtx t = op;
  if (((enum rtx_code) (t)->code) == SUBREG)
    t = (((t)->u.fld[0]).rtx1);
  if (t == (global_rtl[GR_ARG_POINTER]) || t == (global_rtl[GR_FRAME_POINTER])
      || t == (global_rtl[GR_VIRTUAL_INCOMING_ARGS]) || t == (global_rtl[GR_VIRTUAL_STACK_ARGS])
      || t == (global_rtl[GR_VIRTUAL_STACK_DYNAMIC]))
    return 0;
  if ((((enum rtx_code) (t)->code) == REG)
      && (((t)->u.fld[0]).rtuint) >= (53)
      && (((t)->u.fld[0]).rtuint) <= (((53)) + 4))
    return 0;
  return general_operand (op, mode);
}
int
nonmemory_no_elim_operand (rtx op, enum machine_mode mode)
{
  rtx t = op;
  if (((enum rtx_code) (t)->code) == SUBREG)
    t = (((t)->u.fld[0]).rtx1);
  if (t == (global_rtl[GR_ARG_POINTER]) || t == (global_rtl[GR_FRAME_POINTER])
      || t == (global_rtl[GR_VIRTUAL_INCOMING_ARGS]) || t == (global_rtl[GR_VIRTUAL_STACK_ARGS])
      || t == (global_rtl[GR_VIRTUAL_STACK_DYNAMIC]))
    return 0;
  return ((enum rtx_code) (op)->code) == CONST_INT || register_operand (op, mode);
}
int
index_register_operand (rtx op, enum machine_mode mode)
{
  rtx t = op;
  if (((enum rtx_code) (t)->code) == SUBREG)
    t = (((t)->u.fld[0]).rtx1);
  if (!(((enum rtx_code) (t)->code) == REG))
    return 0;
  if (t == (global_rtl[GR_ARG_POINTER])
      || t == (global_rtl[GR_FRAME_POINTER])
      || t == (global_rtl[GR_VIRTUAL_INCOMING_ARGS])
      || t == (global_rtl[GR_VIRTUAL_STACK_ARGS])
      || t == (global_rtl[GR_VIRTUAL_STACK_DYNAMIC])
      || (((t)->u.fld[0]).rtuint) == 7)
    return 0;
  return general_operand (op, mode);
}
int
q_regs_operand (rtx op, enum machine_mode mode)
{
  if (mode != VOIDmode && ((enum machine_mode) (op)->mode) != mode)
    return 0;
  if (((enum rtx_code) (op)->code) == SUBREG)
    op = (((op)->u.fld[0]).rtx1);
  return (0 ? ((((enum rtx_code) (op)->code) == REG) && (((((op)->u.fld[0]).rtuint)) < 8 || (((((op)->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((op)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)))) : ((((enum rtx_code) (op)->code) == REG) && (((op)->u.fld[0]).rtuint) < 4));
}
int
flags_reg_operand (rtx op, enum machine_mode mode)
{
  if (mode != VOIDmode && ((enum machine_mode) (op)->mode) != mode)
    return 0;
  return (((enum rtx_code) (op)->code) == REG) && (((op)->u.fld[0]).rtuint) == 17 && ((enum machine_mode) (op)->mode) != VOIDmode;
}
int
non_q_regs_operand (rtx op, enum machine_mode mode)
{
  if (mode != VOIDmode && ((enum machine_mode) (op)->mode) != mode)
    return 0;
  if (((enum rtx_code) (op)->code) == SUBREG)
    op = (((op)->u.fld[0]).rtx1);
  return ((((enum rtx_code) (op)->code) == REG) && (((op)->u.fld[0]).rtuint) >= 4 && (((op)->u.fld[0]).rtuint) < 53);
}
int
zero_extended_scalar_load_operand (rtx op,
       enum machine_mode mode )
{
  unsigned n_elts;
  if (((enum rtx_code) (op)->code) != MEM)
    return 0;
  op = maybe_get_pool_constant (op);
  if (!op)
    return 0;
  if (((enum rtx_code) (op)->code) != CONST_VECTOR)
    return 0;
  n_elts =
    (((unsigned short) mode_size[((enum machine_mode) (op)->mode)]) /
     ((unsigned short) mode_size[mode_inner[((enum machine_mode) (op)->mode)]]));
  for (n_elts--; n_elts > 0; n_elts--)
    {
      rtx elt = (((((op)->u.fld[0]).rtvec1))->elem[n_elts]);
      if (elt != (const_tiny_rtx[0][(int) (mode_inner[((enum machine_mode) (op)->mode)])]))
 return 0;
    }
  return 1;
}
int
vector_move_operand (rtx op, enum machine_mode mode)
{
  if (nonimmediate_operand (op, mode))
    return 1;
  if (((enum machine_mode) (op)->mode) != mode && mode != VOIDmode)
    return 0;
  return (op == (const_tiny_rtx[0][(int) (((enum machine_mode) (op)->mode))]));
}
int
no_seg_address_operand (rtx op, enum machine_mode mode)
{
  struct ix86_address parts;
  if (! address_operand (op, mode))
    return 0;
  if (! ix86_decompose_address (op, &parts))
    fancy_abort ("gcc.c", 692135, "?");
  return parts.seg == SEG_DEFAULT;
}
int
sse_comparison_operator (rtx op, enum machine_mode mode )
{
  enum rtx_code code = ((enum rtx_code) (op)->code);
  switch (code)
    {
    case EQ:
    case LT:
    case LE:
    case UNORDERED:
    case NE:
    case UNGE:
    case UNGT:
    case ORDERED:
      return 1;
    case UNEQ:
    case UNLT:
    case UNLE:
    case LTGT:
    case GE:
    case GT:
      return !(target_flags & 0x00000010);
    default:
      return 0;
    }
}
int
ix86_comparison_operator (rtx op, enum machine_mode mode)
{
  enum machine_mode inmode;
  enum rtx_code code = ((enum rtx_code) (op)->code);
  if (mode != VOIDmode && ((enum machine_mode) (op)->mode) != mode)
    return 0;
  if (!(((rtx_class[(int) (((enum rtx_code) (op)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
    return 0;
  inmode = ((enum machine_mode) ((((op)->u.fld[0]).rtx1))->mode);
  if (inmode == CCFPmode || inmode == CCFPUmode)
    {
      enum rtx_code second_code, bypass_code;
      ix86_fp_comparison_codes (code, &bypass_code, &code, &second_code);
      return (bypass_code == NIL && second_code == NIL);
    }
  switch (code)
    {
    case EQ: case NE:
      return 1;
    case LT: case GE:
      if (inmode == CCmode || inmode == CCGCmode
   || inmode == CCGOCmode || inmode == CCNOmode)
 return 1;
      return 0;
    case LTU: case GTU: case LEU: case ORDERED: case UNORDERED: case GEU:
      if (inmode == CCmode)
 return 1;
      return 0;
    case GT: case LE:
      if (inmode == CCmode || inmode == CCGCmode || inmode == CCNOmode)
 return 1;
      return 0;
    default:
      return 0;
    }
}
int
ix86_carry_flag_operator (rtx op, enum machine_mode mode)
{
  enum machine_mode inmode;
  enum rtx_code code = ((enum rtx_code) (op)->code);
  if (mode != VOIDmode && ((enum machine_mode) (op)->mode) != mode)
    return 0;
  if (!(((rtx_class[(int) (((enum rtx_code) (op)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
    return 0;
  inmode = ((enum machine_mode) ((((op)->u.fld[0]).rtx1))->mode);
  if (((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) != REG
      || ((((((op)->u.fld[0]).rtx1))->u.fld[0]).rtuint) != 17
      || (((op)->u.fld[1]).rtx1) != (const_int_rtx[64]))
    return 0;
  if (inmode == CCFPmode || inmode == CCFPUmode)
    {
      enum rtx_code second_code, bypass_code;
      ix86_fp_comparison_codes (code, &bypass_code, &code, &second_code);
      if (bypass_code != NIL || second_code != NIL)
 return 0;
      code = ix86_fp_compare_code_to_integer (code);
    }
  else if (inmode != CCmode)
    return 0;
  return code == LTU;
}
int
fcmov_comparison_operator (rtx op, enum machine_mode mode)
{
  enum machine_mode inmode;
  enum rtx_code code = ((enum rtx_code) (op)->code);
  if (mode != VOIDmode && ((enum machine_mode) (op)->mode) != mode)
    return 0;
  if (!(((rtx_class[(int) (((enum rtx_code) (op)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
    return 0;
  inmode = ((enum machine_mode) ((((op)->u.fld[0]).rtx1))->mode);
  if (inmode == CCFPmode || inmode == CCFPUmode)
    {
      enum rtx_code second_code, bypass_code;
      ix86_fp_comparison_codes (code, &bypass_code, &code, &second_code);
      if (bypass_code != NIL || second_code != NIL)
 return 0;
      code = ix86_fp_compare_code_to_integer (code);
    }
  switch (code)
    {
    case LTU: case GTU: case LEU: case GEU:
      if (inmode == CCmode || inmode == CCFPmode || inmode == CCFPUmode)
 return 1;
      return 0;
    case ORDERED: case UNORDERED:
    case EQ: case NE:
      return 1;
    default:
      return 0;
    }
}
int
promotable_binary_operator (rtx op, enum machine_mode mode )
{
  switch (((enum rtx_code) (op)->code))
    {
    case MULT:
      return ix86_tune > PROCESSOR_I486;
    case PLUS:
    case AND:
    case IOR:
    case XOR:
    case ASHIFT:
      return 1;
    default:
      return 0;
    }
}
int
cmp_fp_expander_operand (rtx op, enum machine_mode mode)
{
  if (mode != VOIDmode && mode != ((enum machine_mode) (op)->mode))
    return 0;
  if (((enum rtx_code) (op)->code) == CONST_DOUBLE)
    return 1;
  return general_operand (op, mode);
}
int
ext_register_operand (rtx op, enum machine_mode mode )
{
  int regno;
  if ((!0 || ((enum machine_mode) (op)->mode) != DImode)
      && ((enum machine_mode) (op)->mode) != SImode && ((enum machine_mode) (op)->mode) != HImode)
    return 0;
  if (!register_operand (op, VOIDmode))
    return 0;
  regno = (((enum rtx_code) (op)->code) == REG) ? (((op)->u.fld[0]).rtuint) : ((((((op)->u.fld[0]).rtx1))->u.fld[0]).rtuint);
  return (regno > (((53)) + 4) || regno < 4);
}
int
binary_fp_operator (rtx op, enum machine_mode mode)
{
  if (mode != VOIDmode && mode != ((enum machine_mode) (op)->mode))
    return 0;
  switch (((enum rtx_code) (op)->code))
    {
    case PLUS:
    case MINUS:
    case MULT:
    case DIV:
      return mode_class[((enum machine_mode) (op)->mode)] == MODE_FLOAT;
    default:
      return 0;
    }
}
int
mult_operator (rtx op, enum machine_mode mode )
{
  return ((enum rtx_code) (op)->code) == MULT;
}
int
div_operator (rtx op, enum machine_mode mode )
{
  return ((enum rtx_code) (op)->code) == DIV;
}
int
arith_or_logical_operator (rtx op, enum machine_mode mode)
{
  return ((mode == VOIDmode || ((enum machine_mode) (op)->mode) == mode)
          && (((rtx_class[(int) (((enum rtx_code) (op)->code))]) & (~1)) == (RTX_COMM_ARITH & (~1))));
}
int
memory_displacement_operand (rtx op, enum machine_mode mode)
{
  struct ix86_address parts;
  if (! memory_operand (op, mode))
    return 0;
  if (! ix86_decompose_address ((((op)->u.fld[0]).rtx1), &parts))
    fancy_abort ("gcc.c", 692385, "?");
  return parts.disp != (rtx) 0;
}
int
cmpsi_operand (rtx op, enum machine_mode mode)
{
  if (nonimmediate_operand (op, mode))
    return 1;
  if (((enum rtx_code) (op)->code) == AND
      && ((enum machine_mode) (op)->mode) == SImode
      && ((enum rtx_code) ((((op)->u.fld[0]).rtx1))->code) == ZERO_EXTRACT
      && ((enum rtx_code) (((((((op)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
      && ((enum rtx_code) (((((((op)->u.fld[0]).rtx1))->u.fld[2]).rtx1))->code) == CONST_INT
      && ((((((((op)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]) == 8
      && ((((((((op)->u.fld[0]).rtx1))->u.fld[2]).rtx1))->u.hwint[0]) == 8
      && ((enum rtx_code) ((((op)->u.fld[1]).rtx1))->code) == CONST_INT)
    return 1;
  return 0;
}
int
long_memory_operand (rtx op, enum machine_mode mode)
{
  if (! memory_operand (op, mode))
    return 0;
  return memory_address_length (op) != 0;
}
int
aligned_operand (rtx op, enum machine_mode mode)
{
  struct ix86_address parts;
  if (!general_operand (op, mode))
    return 0;
  if (((enum rtx_code) (op)->code) != MEM)
    return 1;
  if ((((op))->volatil))
    return 0;
  op = (((op)->u.fld[0]).rtx1);
  if (((enum rtx_code) (op)->code) == PRE_DEC
      || ((enum rtx_code) (op)->code) == POST_INC)
    return 1;
  if (! ix86_decompose_address (op, &parts))
    fancy_abort ("gcc.c", 692454, "?");
  if (parts.index)
    {
      if (parts.scale < 4
   && (cfun->emit->regno_pointer_align[(((parts.index)->u.fld[0]).rtuint)]) < 32)
 return 0;
    }
  if (parts.base)
    {
      if ((cfun->emit->regno_pointer_align[(((parts.base)->u.fld[0]).rtuint)]) < 32)
 return 0;
    }
  if (parts.disp)
    {
      if (((enum rtx_code) (parts.disp)->code) != CONST_INT
   || (((parts.disp)->u.hwint[0]) & 3) != 0)
 return 0;
    }
  return 1;
}
static void
init_ext_80387_constants (void)
{
  static const char * cst[5] =
  {
    "0.3010299956639811952256464283594894482",
    "0.6931471805599453094286904741849753009",
    "1.4426950408889634073876517827983434472",
    "3.3219280948873623478083405569094566090",
    "3.1415926535897932385128089594061862044",
  };
  int i;
  for (i = 0; i < 5; i++)
    {
      real_from_string1 (&ext_80387_constants_table[i], cst[i]);
      real_convert (&ext_80387_constants_table[i],
      XFmode, &ext_80387_constants_table[i]);
    }
  ext_80387_constants_init = 1;
}
int
standard_80387_constant_p (rtx x)
{
  if (((enum rtx_code) (x)->code) != CONST_DOUBLE || !(mode_class[((enum machine_mode) (x)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (x)->mode)] == MODE_VECTOR_FLOAT))
    return -1;
  if (x == (const_tiny_rtx[0][(int) (((enum machine_mode) (x)->mode))]))
    return 1;
  if (x == (const_tiny_rtx[1][(int) (((enum machine_mode) (x)->mode))]))
    return 2;
  if (((enum machine_mode) (x)->mode) == XFmode
      && (optimize_size || x86_ext_80387_constants & (1 << ix86_tune)))
    {
      struct real_value r;
      int i;
      if (! ext_80387_constants_init)
 init_ext_80387_constants ();
      memcpy (&(r), &(((x))->u.hwint[0]), sizeof (struct real_value));
      for (i = 0; i < 5; i++)
        if (real_identical (&r, &ext_80387_constants_table[i]))
   return i + 3;
    }
  return 0;
}
const char *
standard_80387_constant_opcode (rtx x)
{
  switch (standard_80387_constant_p (x))
    {
    case 1:
      return "fldz";
    case 2:
      return "fld1";
    case 3:
      return "fldlg2";
    case 4:
      return "fldln2";
    case 5:
      return "fldl2e";
    case 6:
      return "fldl2t";
    case 7:
      return "fldpi";
    }
  fancy_abort ("gcc.c", 692562, "?");
}
rtx
standard_80387_constant_rtx (int idx)
{
  int i;
  if (! ext_80387_constants_init)
    init_ext_80387_constants ();
  switch (idx)
    {
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
      i = idx - 3;
      break;
    default:
      fancy_abort ("gcc.c", 692588, "?");
    }
  return const_double_from_real_value (ext_80387_constants_table[i], XFmode)
                  ;
}
int
standard_sse_constant_p (rtx x)
{
  if (x == (const_int_rtx[64]))
    return 1;
  return (x == (const_tiny_rtx[0][(int) (((enum machine_mode) (x)->mode))]));
}
int
symbolic_reference_mentioned_p (rtx op)
{
  const char *fmt;
  int i;
  if (((enum rtx_code) (op)->code) == SYMBOL_REF || ((enum rtx_code) (op)->code) == LABEL_REF)
    return 1;
  fmt = (rtx_format[(int) (((enum rtx_code) (op)->code))]);
  for (i = (rtx_length[(int) (((enum rtx_code) (op)->code))]) - 1; i >= 0; i--)
    {
      if (fmt[i] == 'E')
 {
   int j;
   for (j = (((((op)->u.fld[i]).rtvec1))->num_elem) - 1; j >= 0; j--)
     if (symbolic_reference_mentioned_p ((((((op)->u.fld[i]).rtvec1))->elem[j])))
       return 1;
 }
      else if (fmt[i] == 'e' && symbolic_reference_mentioned_p ((((op)->u.fld[i]).rtx1)))
 return 1;
    }
  return 0;
}
int
ix86_can_use_return_insn_p (void)
{
  struct ix86_frame frame;
  if (! reload_completed || frame_pointer_needed)
    return 0;
  if ((cfun->pops_args)
      && (cfun->args_size) >= 32768)
    return 0;
  ix86_compute_frame_layout (&frame);
  return frame.to_allocate == 0 && frame.nregs == 0;
}
int
x86_64_sign_extended_value (rtx value1)
{
  switch (((enum rtx_code) (value1)->code))
    {
      case CONST_INT:
 if ((8 * 4) == 32)
   return 1;
 else
   {
     long val = trunc_int_for_mode (((value1)->u.hwint[0]), DImode);
     return trunc_int_for_mode (val, SImode) == val;
   }
 break;
      case SYMBOL_REF:
 if (tls_symbolic_operand (value1, (0 ? DImode : SImode)))
   return 0;
 return (ix86_cmodel == CM_SMALL || ix86_cmodel == CM_KERNEL);
      case LABEL_REF:
 return (ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM
  || ix86_cmodel == CM_KERNEL);
      case CONST:
 if (((enum rtx_code) ((((value1)->u.fld[0]).rtx1))->code) == UNSPEC)
   switch (((((((value1)->u.fld[0]).rtx1))->u.fld[1]).rtint))
     {
     case 2:
     case 6:
     case 7:
     case 5:
       return 1;
     default:
       break;
     }
 if (((enum rtx_code) ((((value1)->u.fld[0]).rtx1))->code) == PLUS)
   {
     rtx op1 = ((((((value1)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
     rtx op2 = ((((((value1)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
     long offset;
     if (ix86_cmodel == CM_LARGE)
       return 0;
     if (((enum rtx_code) (op2)->code) != CONST_INT)
       return 0;
     offset = trunc_int_for_mode (((op2)->u.hwint[0]), DImode);
     switch (((enum rtx_code) (op1)->code))
       {
  case SYMBOL_REF:
    if (ix86_cmodel == CM_SMALL
        && offset < 16*1024*1024
        && trunc_int_for_mode (offset, SImode) == offset)
      return 1;
    if (ix86_cmodel == CM_KERNEL
        && offset > 0
        && trunc_int_for_mode (offset, SImode) == offset)
      return 1;
    break;
  case LABEL_REF:
    if ((ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM)
        && offset < 16*1024*1024
        && trunc_int_for_mode (offset, SImode) == offset)
      return 1;
    if (ix86_cmodel == CM_KERNEL
        && offset > 0
        && trunc_int_for_mode (offset, SImode) == offset)
      return 1;
    break;
  case UNSPEC:
    switch ((((op1)->u.fld[1]).rtint))
      {
      case 6:
      case 5:
        if (offset > 0
     && trunc_int_for_mode (offset, SImode) == offset)
   return 1;
      }
    break;
  default:
    return 0;
       }
   }
 return 0;
      default:
 return 0;
    }
}
int
x86_64_zero_extended_value (rtx value1)
{
  switch (((enum rtx_code) (value1)->code))
    {
      case CONST_DOUBLE:
 if ((8 * 4) == 32)
   return (((enum machine_mode) (value1)->mode) == VOIDmode
     && !((value1)->u.hwint[1]));
 else
   return 0;
      case CONST_INT:
 if ((8 * 4) == 32)
   return ((value1)->u.hwint[0]) >= 0;
 else
   return !(((value1)->u.hwint[0]) & ~(long) 0xffffffff);
 break;
      case SYMBOL_REF:
 if (tls_symbolic_operand (value1, (0 ? DImode : SImode)))
   return 0;
 return ix86_cmodel == CM_SMALL;
      case LABEL_REF:
 return ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM;
      case CONST:
 if (((enum rtx_code) ((((value1)->u.fld[0]).rtx1))->code) == PLUS)
   {
     rtx op1 = ((((((value1)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
     rtx op2 = ((((((value1)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
     if (ix86_cmodel == CM_LARGE)
       return 0;
     switch (((enum rtx_code) (op1)->code))
       {
  case SYMBOL_REF:
      return 0;
    if (ix86_cmodel == CM_SMALL
        && ((enum rtx_code) (op2)->code) == CONST_INT
        && trunc_int_for_mode (((op2)->u.hwint[0]), DImode) > -0x10000
        && (trunc_int_for_mode (((op2)->u.hwint[0]), SImode)
     == ((op2)->u.hwint[0])))
      return 1;
    break;
  case LABEL_REF:
    if ((ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM)
        && ((enum rtx_code) (op2)->code) == CONST_INT
        && trunc_int_for_mode (((op2)->u.hwint[0]), DImode) > -0x10000
        && (trunc_int_for_mode (((op2)->u.hwint[0]), SImode)
     == ((op2)->u.hwint[0])))
      return 1;
    break;
  default:
    return 0;
       }
   }
 return 0;
      default:
 return 0;
    }
}
int
ix86_frame_pointer_required (void)
{
  if (cfun->machine->accesses_prev_frame)
    return 1;
  if ((cfun->profile))
    return 1;
  if ((target_flags & 0x080)
      && (!current_function_is_leaf))
    return 1;
  if ((cfun->profile))
    return 1;
  return 0;
}
void
ix86_setup_frame_addresses (void)
{
  cfun->machine->accesses_prev_frame = 1;
}
static int pic_labels_used;
static void
get_pc_thunk_name (char name[32], unsigned int regno)
{
  if (0)
    sprintf (name, "__i686.get_pc_thunk.%s", reg_names[regno]);
  else
    do { sprintf (name, "*.%s%u", "LPR", (unsigned) (regno)); } while (0);
}
void
ix86_file_end (void)
{
  rtx xops[2];
  int regno;
  for (regno = 0; regno < 8; ++regno)
    {
      char name[32];
      if (! ((pic_labels_used >> regno) & 1))
 continue;
      get_pc_thunk_name (name, regno);
      if (0)
 {
   tree decl;
   decl = build_decl_stat (FUNCTION_DECL,get_identifier (name),global_trees[TI_ERROR_MARK] )
                        ;
   ((decl)->common.public_flag) = 1;
   ((decl)->common.static_flag) = 1;
   ((decl)->decl.transparent_union) = 1;
   (*targetm.asm_out.unique_section) (decl, 0);
   named_section (decl, ((void *)0), 0);
   (*targetm.asm_out.globalize_label) (asm_out_file, name);
   fputs_unlocked ("\t.hidden\t", asm_out_file);
   assemble_name (asm_out_file, name);
   fputc_unlocked ('\n', asm_out_file);
   do { do { fputs_unlocked ("\t.type\t", asm_out_file); assemble_name (asm_out_file, name); fputs_unlocked (", ", asm_out_file); fprintf (asm_out_file, "@%s", "function"); putc_unlocked ('\n', asm_out_file); } while (0); ; do { assemble_name ((asm_out_file), (name)); fputs_unlocked (":\n", (asm_out_file)); } while (0); } while (0);
 }
      else
 {
   text_section ();
   do { assemble_name ((asm_out_file), (name)); fputs_unlocked (":\n", (asm_out_file)); } while (0);
 }
      xops[0] = gen_rtx_REG (SImode, regno);
      xops[1] = gen_rtx_MEM (SImode, (global_rtl[GR_STACK_POINTER]));
      output_asm_insn ("mov{l}\t{%1, %0|%0, %1}", xops);
      output_asm_insn ("ret", xops);
    }
  if (1)
    file_end_indicate_exec_stack ();
}
const char *
output_set_got (rtx dest)
{
  rtx xops[3];
  xops[0] = dest;
  xops[1] = gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), ("_GLOBAL_OFFSET_TABLE_"));
  if (! (x86_deep_branch & (1 << ix86_tune)) || !flag_pic)
    {
      xops[2] = gen_rtx_fmt_u00 (LABEL_REF, ((0 ? DImode : SImode)), (gen_label_rtx ()));
      if (!flag_pic)
 output_asm_insn ("mov{l}\t{%2, %0|%0, %2}", xops);
      else
 output_asm_insn ("call\t%a2", xops);
      (*targetm.asm_out.internal_label) (asm_out_file, "L",
     ((((((xops[2])->u.fld[0]).rtx1))->u.fld[6]).rtint));
      if (flag_pic)
 output_asm_insn ("pop{l}\t%0", xops);
    }
  else
    {
      char name[32];
      get_pc_thunk_name (name, (((dest)->u.fld[0]).rtuint));
      pic_labels_used |= 1 << (((dest)->u.fld[0]).rtuint);
      xops[2] = gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (ggc_alloc_string1((name), -1)));
      xops[2] = gen_rtx_MEM (QImode, xops[2]);
      output_asm_insn ("call\t%X2", xops);
    }
  if (!flag_pic || (x86_deep_branch & (1 << ix86_tune)))
    output_asm_insn ("add{l}\t{%1, %0|%0, %1}", xops);
  else if (!0)
    output_asm_insn ("add{l}\t{%1+[.-%a2], %0|%0, %a1+(.-%a2)}", xops);
  return "";
}
static rtx
gen_push (rtx arg)
{
  return gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM ((0 ? DImode : SImode), gen_rtx_fmt_e (PRE_DEC, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER]))))), (arg))
            ;
}
static unsigned int
ix86_select_alt_pic_regnum (void)
{
  if (current_function_is_leaf && !(cfun->profile))
    {
      int i;
      for (i = 2; i >= 0; --i)
        if (!regs_ever_live[i])
   return i;
    }
  return (~(unsigned int) 0);
}
static int
ix86_save_reg (unsigned int regno, int maybe_eh_return)
{
  if (pic_offset_table_rtx
      && regno == 3
      && (regs_ever_live[3]
   || (cfun->profile)
   || (cfun->calls_eh_return)
   || (cfun->uses_const_pool)))
    {
      if (ix86_select_alt_pic_regnum () != (~(unsigned int) 0))
 return 0;
      return 1;
    }
  if ((cfun->calls_eh_return) && maybe_eh_return)
    {
      unsigned i;
      for (i = 0; ; i++)
 {
   unsigned test = ((i) < 2 ? (i) : (~(unsigned int) 0));
   if (test == (~(unsigned int) 0))
     break;
   if (test == regno)
     return 1;
 }
    }
  return (regs_ever_live[regno]
   && !call_used_regs[regno]
   && !fixed_regs[regno]
   && (regno != 6 || !frame_pointer_needed));
}
static int
ix86_nsaved_regs (void)
{
  int nregs = 0;
  int regno;
  for (regno = 53 - 1; regno >= 0; regno--)
    if (ix86_save_reg (regno, 1))
      nregs++;
  return nregs;
}
long
ix86_initial_elimination_offset (int from, int to)
{
  struct ix86_frame frame;
  ix86_compute_frame_layout (&frame);
  if (from == 16 && to == 6)
    return frame.hard_frame_pointer_offset;
  else if (from == 20
    && to == 6)
    return frame.hard_frame_pointer_offset - frame.frame_pointer_offset;
  else
    {
      if (to != 7)
 fancy_abort ("gcc.c", 693116, "?");
      else if (from == 16)
 return frame.stack_pointer_offset;
      else if (from != 20)
 fancy_abort ("gcc.c", 693120, "?");
      else
 return frame.stack_pointer_offset - frame.frame_pointer_offset;
    }
}
static void
ix86_compute_frame_layout (struct ix86_frame *frame)
{
  long total_size;
  int stack_alignment_needed = cfun->stack_alignment_needed / 8;
  long offset;
  int preferred_alignment = cfun->preferred_stack_boundary / 8;
  long size = get_frame_size ();
  frame->nregs = ix86_nsaved_regs ();
  total_size = size;
  if (!optimize_size
      && cfun->machine->use_fast_prologue_epilogue_nregs != frame->nregs)
    {
      int count = frame->nregs;
      cfun->machine->use_fast_prologue_epilogue_nregs = count;
      if (count)
 count = (count - 1) * 20;
      if (cfun->function_frequency < FUNCTION_FREQUENCY_NORMAL
   || (flag_branch_probabilities
       && cfun->function_frequency < FUNCTION_FREQUENCY_HOT))
        cfun->machine->use_fast_prologue_epilogue = 0;
      else
        cfun->machine->use_fast_prologue_epilogue
    = !expensive_function_p (count);
    }
  if ((x86_prologue_using_move & (1 << ix86_tune))
      && cfun->machine->use_fast_prologue_epilogue)
    frame->save_regs_using_mov = 1;
  else
    frame->save_regs_using_mov = 0;
  offset = frame_pointer_needed ? (0 ? 8 : 4) * 2 : (0 ? 8 : 4);
  frame->hard_frame_pointer_offset = offset;
  if (size && !stack_alignment_needed)
    fancy_abort ("gcc.c", 693187, "?");
  if (preferred_alignment < (8 * (0 ? 8 : 4)) / 8)
    fancy_abort ("gcc.c", 693189, "?");
  if (preferred_alignment > ix86_preferred_stack_boundary / 8)
    fancy_abort ("gcc.c", 693191, "?");
  if (stack_alignment_needed > ix86_preferred_stack_boundary / 8)
    fancy_abort ("gcc.c", 693193, "?");
  if (stack_alignment_needed < (8 * (0 ? 8 : 4)) / 8)
    stack_alignment_needed = (8 * (0 ? 8 : 4)) / 8;
  offset += frame->nregs * (0 ? 8 : 4);
  if ((cfun->machine->save_varrargs_registers))
    {
      offset += ((0 ? 6 : 3) * (0 ? 8 : 4) + (0 ? 8 : (((target_flags & 0x00004000) != 0) ? 3 : 0)) * 16);
      frame->va_arg_size = ((0 ? 6 : 3) * (0 ? 8 : 4) + (0 ? 8 : (((target_flags & 0x00004000) != 0) ? 3 : 0)) * 16);
    }
  else
    frame->va_arg_size = 0;
  frame->padding1 = ((offset + stack_alignment_needed - 1)
       & -stack_alignment_needed) - offset;
  offset += frame->padding1;
  frame->frame_pointer_offset = offset;
  offset += size;
  if ((target_flags & 0x00001000)
      && (!current_function_is_leaf || (cfun->calls_alloca)))
    {
      offset += (cfun->outgoing_args_size);
      frame->outgoing_arguments_size = (cfun->outgoing_args_size);
    }
  else
    frame->outgoing_arguments_size = 0;
  if (!current_function_is_leaf || (cfun->calls_alloca))
    frame->padding2 = ((offset + preferred_alignment - 1)
         & -preferred_alignment) - offset;
  else
    frame->padding2 = 0;
  offset += frame->padding2;
  frame->stack_pointer_offset = offset;
  frame->to_allocate =
    (size + frame->padding1 + frame->padding2
     + frame->outgoing_arguments_size + frame->va_arg_size);
  if ((!frame->to_allocate && frame->nregs <= 1)
      || (0 && frame->to_allocate >= (long) 0x80000000))
    frame->save_regs_using_mov = 0;
  if ((!(target_flags & 0x04000000)) && current_function_sp_is_unchanging
      && current_function_is_leaf)
    {
      frame->red_zone_size = frame->to_allocate;
      if (frame->save_regs_using_mov)
 frame->red_zone_size += frame->nregs * (0 ? 8 : 4);
      if (frame->red_zone_size > 128 - 8)
 frame->red_zone_size = 128 - 8;
    }
  else
    frame->red_zone_size = 0;
  frame->to_allocate -= frame->red_zone_size;
  frame->stack_pointer_offset -= frame->red_zone_size;
}
static void
ix86_emit_save_regs (void)
{
  int regno;
  rtx insn;
  for (regno = 53 - 1; regno >= 0; regno--)
    if (ix86_save_reg (regno, 1))
      {
 insn = emit_insn (gen_push (gen_rtx_REG ((0 ? DImode : SImode), regno)));
 (((insn))->frame_related) = 1;
      }
}
static void
ix86_emit_save_regs_using_mov (rtx pointer, long offset)
{
  int regno;
  rtx insn;
  for (regno = 0; regno < 53; regno++)
    if (ix86_save_reg (regno, 1))
      {
 insn = emit_move_insn (adjust_address_1 (gen_rtx_MEM ((0 ? DImode : SImode), pointer), (0 ? DImode : SImode), offset, 1, 1)
                          ,
          gen_rtx_REG ((0 ? DImode : SImode), regno));
 (((insn))->frame_related) = 1;
 offset += (0 ? 8 : 4);
      }
}
static void
pro_epilogue_adjust_stack (rtx dest, rtx src, rtx offset, int style)
{
  rtx insn;
  if (! 0)
    insn = emit_insn (gen_pro_epilogue_adjust_stack_1 (dest, src, offset));
  else if (x86_64_immediate_operand (offset, DImode))
    insn = emit_insn (gen_pro_epilogue_adjust_stack_rex64 (dest, src, offset));
  else
    {
      rtx r11;
      if (style == 0)
 fancy_abort ("gcc.c", 693344, "?");
      r11 = gen_rtx_REG (DImode, (((((20 + 1) + 7) + 1) + 7) + 1) + 3 );
      insn = emit_insn (gen_rtx_fmt_ee (SET, (DImode), (r11), (offset)));
      if (style < 0)
 (((insn))->frame_related) = 1;
      insn = emit_insn (gen_pro_epilogue_adjust_stack_rex64_2 (dest, src, r11,
              offset));
    }
  if (style < 0)
    (((insn))->frame_related) = 1;
}
void
ix86_expand_prologue (void)
{
  rtx insn;
  unsigned char pic_reg_used;
  struct ix86_frame frame;
  long allocate;
  ix86_compute_frame_layout (&frame);
  if (frame_pointer_needed)
    {
      insn = emit_insn (gen_push ((global_rtl[GR_HARD_FRAME_POINTER])));
      (((insn))->frame_related) = 1;
      insn = emit_move_insn ((global_rtl[GR_HARD_FRAME_POINTER]), (global_rtl[GR_STACK_POINTER]));
      (((insn))->frame_related) = 1;
    }
  allocate = frame.to_allocate;
  if (!frame.save_regs_using_mov)
    ix86_emit_save_regs ();
  else
    allocate += frame.nregs * (0 ? 8 : 4);
  if ((!(target_flags & 0x04000000)) && frame.save_regs_using_mov)
    ix86_emit_save_regs_using_mov (frame_pointer_needed ? (global_rtl[GR_HARD_FRAME_POINTER])
       : (global_rtl[GR_STACK_POINTER]),
       -frame.nregs * (0 ? 8 : 4));
  if (allocate == 0)
    ;
  else if (! (target_flags & 0x00000100) || allocate < (-1))
    pro_epilogue_adjust_stack ((global_rtl[GR_STACK_POINTER]), (global_rtl[GR_STACK_POINTER]),
          gen_rtx_CONST_INT (VOIDmode, (long) (-allocate)), -1);
  else
    {
      rtx eax = gen_rtx_REG (SImode, 0);
      unsigned char eax_live = ix86_eax_live_at_start_p ();
      if (0)
        fancy_abort ("gcc.c", 693406, "?");
      if (eax_live)
 {
   emit_insn (gen_push (eax));
   allocate -= 4;
 }
      insn = emit_move_insn (eax, gen_rtx_CONST_INT (VOIDmode, (long) (allocate)));
      (((insn))->frame_related) = 1;
      insn = emit_insn (gen_allocate_stack_worker (eax));
      (((insn))->frame_related) = 1;
      if (eax_live)
 {
   rtx t = plus_constant_wide (((global_rtl[GR_STACK_POINTER])), (long) (allocate));
   emit_move_insn (eax, gen_rtx_MEM (SImode, t));
 }
    }
  if (frame.save_regs_using_mov && !(!(target_flags & 0x04000000)))
    {
      if (!frame_pointer_needed || !frame.to_allocate)
        ix86_emit_save_regs_using_mov ((global_rtl[GR_STACK_POINTER]), frame.to_allocate);
      else
        ix86_emit_save_regs_using_mov ((global_rtl[GR_HARD_FRAME_POINTER]),
           -frame.nregs * (0 ? 8 : 4));
    }
  pic_reg_used = 0;
  if (pic_offset_table_rtx
      && (regs_ever_live[3]
   || (cfun->profile)))
    {
      unsigned int alt_pic_reg_used = ix86_select_alt_pic_regnum ();
      if (alt_pic_reg_used != (~(unsigned int) 0))
 (((pic_offset_table_rtx)->u.fld[0]).rtuint) = alt_pic_reg_used;
      pic_reg_used = 1;
    }
  if (pic_reg_used)
    {
      insn = emit_insn (gen_set_got (pic_offset_table_rtx));
      (((insn)->u.fld[8]).rtx1) = gen_rtx_fmt_ee (EXPR_LIST, (REG_MAYBE_DEAD), ((const_int_rtx[64])), (((void *)0)));
    }
  if ((cfun->profile))
    emit_insn (gen_blockage (pic_reg_used ? pic_offset_table_rtx : (const_int_rtx[64])));
}
static void
ix86_emit_restore_regs_using_mov (rtx pointer, long offset,
      int maybe_eh_return)
{
  int regno;
  rtx base_address = gen_rtx_MEM ((0 ? DImode : SImode), pointer);
  for (regno = 0; regno < 53; regno++)
    if (ix86_save_reg (regno, maybe_eh_return))
      {
 if (0 && offset != trunc_int_for_mode (offset, SImode))
   {
     rtx r11;
     r11 = gen_rtx_REG (DImode, (((((20 + 1) + 7) + 1) + 7) + 1) + 3 );
     emit_move_insn (r11, gen_rtx_CONST_INT (VOIDmode, (long) (offset)));
     emit_insn (gen_adddi3 (r11, r11, pointer));
     base_address = gen_rtx_MEM ((0 ? DImode : SImode), r11);
     offset = 0;
   }
 emit_move_insn (gen_rtx_REG ((0 ? DImode : SImode), regno),
   adjust_address_1 (base_address, (0 ? DImode : SImode), offset, 1, 1));
 offset += (0 ? 8 : 4);
      }
}
void
ix86_expand_epilogue (int style)
{
  int regno;
  int sp_valid = !frame_pointer_needed || current_function_sp_is_unchanging;
  struct ix86_frame frame;
  long offset;
  ix86_compute_frame_layout (&frame);
  offset = frame.nregs;
  if ((cfun->calls_eh_return) && style != 2)
    offset -= 2;
  offset *= -(0 ? 8 : 4);
  if ((!sp_valid && frame.nregs <= 1)
      || ((x86_epilogue_using_move & (1 << ix86_tune))
   && cfun->machine->use_fast_prologue_epilogue
   && (frame.nregs > 1 || frame.to_allocate))
      || (frame_pointer_needed && !frame.nregs && frame.to_allocate)
      || (frame_pointer_needed && (x86_use_leave & (1 << ix86_tune))
   && cfun->machine->use_fast_prologue_epilogue
   && frame.nregs == 1)
      || (cfun->calls_eh_return))
    {
      if (!frame_pointer_needed || (sp_valid && !frame.to_allocate))
 ix86_emit_restore_regs_using_mov ((global_rtl[GR_STACK_POINTER]),
       frame.to_allocate, style == 2);
      else
 ix86_emit_restore_regs_using_mov ((global_rtl[GR_HARD_FRAME_POINTER]),
       offset, style == 2);
      if (style == 2)
 {
   rtx tmp, sa = gen_rtx_REG ((0 ? DImode : SImode), 2);
   if (frame_pointer_needed)
     {
       tmp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_HARD_FRAME_POINTER])), (sa));
       tmp = plus_constant_wide ((tmp), (long) ((0 ? 8 : 4)));
       emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (sa), (tmp)));
       tmp = gen_rtx_MEM ((0 ? DImode : SImode), (global_rtl[GR_HARD_FRAME_POINTER]));
       emit_move_insn ((global_rtl[GR_HARD_FRAME_POINTER]), tmp);
       pro_epilogue_adjust_stack ((global_rtl[GR_STACK_POINTER]), sa,
      (const_int_rtx[64]), style);
     }
   else
     {
       tmp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])), (sa));
       tmp = plus_constant_wide ((tmp), (long) ((frame.to_allocate + frame.nregs * (0 ? 8 : 4))))
                                                                         ;
       emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_STACK_POINTER])), (tmp)));
     }
 }
      else if (!frame_pointer_needed)
 pro_epilogue_adjust_stack ((global_rtl[GR_STACK_POINTER]), (global_rtl[GR_STACK_POINTER]),
       gen_rtx_CONST_INT (VOIDmode, (long) (frame.to_allocate + frame.nregs * (0 ? 8 : 4)))
                                        ,
       style);
      else if ((x86_use_leave & (1 << ix86_tune)) || optimize_size
        || !cfun->machine->use_fast_prologue_epilogue)
 emit_insn (0 ? gen_leave_rex64 () : gen_leave ());
      else
 {
   pro_epilogue_adjust_stack ((global_rtl[GR_STACK_POINTER]),
         (global_rtl[GR_HARD_FRAME_POINTER]),
         (const_int_rtx[64]), style);
   if (0)
     emit_insn (gen_popdi1 ((global_rtl[GR_HARD_FRAME_POINTER])));
   else
     emit_insn (gen_popsi1 ((global_rtl[GR_HARD_FRAME_POINTER])));
 }
    }
  else
    {
      if (!sp_valid)
 {
   if (!frame_pointer_needed)
     fancy_abort ("gcc.c", 693604, "?");
   pro_epilogue_adjust_stack ((global_rtl[GR_STACK_POINTER]),
         (global_rtl[GR_HARD_FRAME_POINTER]),
         gen_rtx_CONST_INT (VOIDmode, (long) (offset)), style);
 }
      else if (frame.to_allocate)
 pro_epilogue_adjust_stack ((global_rtl[GR_STACK_POINTER]), (global_rtl[GR_STACK_POINTER]),
       gen_rtx_CONST_INT (VOIDmode, (long) (frame.to_allocate)), style);
      for (regno = 0; regno < 53; regno++)
 if (ix86_save_reg (regno, 0))
   {
     if (0)
       emit_insn (gen_popdi1 (gen_rtx_REG ((0 ? DImode : SImode), regno)));
     else
       emit_insn (gen_popsi1 (gen_rtx_REG ((0 ? DImode : SImode), regno)));
   }
      if (frame_pointer_needed)
 {
   if ((x86_use_leave & (1 << ix86_tune)))
     emit_insn (0 ? gen_leave_rex64 () : gen_leave ());
   else if (0)
     emit_insn (gen_popdi1 ((global_rtl[GR_HARD_FRAME_POINTER])));
   else
     emit_insn (gen_popsi1 ((global_rtl[GR_HARD_FRAME_POINTER])));
 }
    }
  if (style == 0)
    return;
  if ((cfun->pops_args) && (cfun->args_size))
    {
      rtx popc = gen_rtx_CONST_INT (VOIDmode, (long) ((cfun->pops_args)));
      if ((cfun->pops_args) >= 65536)
 {
   rtx ecx = gen_rtx_REG (SImode, 2);
   if (0)
     fancy_abort ("gcc.c", 693652, "?");
   emit_insn (gen_popsi1 (ecx));
   emit_insn (gen_addsi3 ((global_rtl[GR_STACK_POINTER]), (global_rtl[GR_STACK_POINTER]), popc));
   emit_jump_insn (gen_return_indirect_internal (ecx));
 }
      else
 emit_jump_insn (gen_return_pop_internal (popc));
    }
  else
    emit_jump_insn (gen_return_internal ());
}
static void
ix86_output_function_epilogue (FILE *file ,
          long size )
{
  if (pic_offset_table_rtx)
    (((pic_offset_table_rtx)->u.fld[0]).rtuint) = 3;
}
static int
ix86_decompose_address (rtx addr, struct ix86_address *out)
{
  rtx base = (rtx) 0;
  rtx index = (rtx) 0;
  rtx disp = (rtx) 0;
  long scale = 1;
  rtx scale_rtx = (rtx) 0;
  int retval = 1;
  enum ix86_address_seg seg = SEG_DEFAULT;
  if (((enum rtx_code) (addr)->code) == REG || ((enum rtx_code) (addr)->code) == SUBREG)
    base = addr;
  else if (((enum rtx_code) (addr)->code) == PLUS)
    {
      rtx addends[4], op;
      int n = 0, i;
      op = addr;
      do
 {
   if (n >= 4)
     return 0;
   addends[n++] = (((op)->u.fld[1]).rtx1);
   op = (((op)->u.fld[0]).rtx1);
 }
      while (((enum rtx_code) (op)->code) == PLUS);
      if (n >= 4)
 return 0;
      addends[n] = op;
      for (i = n; i >= 0; --i)
 {
   op = addends[i];
   switch (((enum rtx_code) (op)->code))
     {
     case MULT:
       if (index)
  return 0;
       index = (((op)->u.fld[0]).rtx1);
       scale_rtx = (((op)->u.fld[1]).rtx1);
       break;
     case UNSPEC:
       if ((((op)->u.fld[1]).rtint) == 15
           && (target_flags & 0x00400000)
           && seg == SEG_DEFAULT)
  seg = 0 ? SEG_FS : SEG_GS;
       else
  return 0;
       break;
     case REG:
     case SUBREG:
       if (!base)
  base = op;
       else if (!index)
  index = op;
       else
  return 0;
       break;
     case CONST:
     case CONST_INT:
     case SYMBOL_REF:
     case LABEL_REF:
       if (disp)
  return 0;
       disp = op;
       break;
     default:
       return 0;
     }
 }
    }
  else if (((enum rtx_code) (addr)->code) == MULT)
    {
      index = (((addr)->u.fld[0]).rtx1);
      scale_rtx = (((addr)->u.fld[1]).rtx1);
    }
  else if (((enum rtx_code) (addr)->code) == ASHIFT)
    {
      rtx tmp;
      index = (((addr)->u.fld[0]).rtx1);
      tmp = (((addr)->u.fld[1]).rtx1);
      if (((enum rtx_code) (tmp)->code) != CONST_INT)
 return 0;
      scale = ((tmp)->u.hwint[0]);
      if ((unsigned long) scale > 3)
 return 0;
      scale = 1 << scale;
      retval = -1;
    }
  else
    disp = addr;
  if (scale_rtx)
    {
      if (((enum rtx_code) (scale_rtx)->code) != CONST_INT)
 return 0;
      scale = ((scale_rtx)->u.hwint[0]);
    }
  if (base && index && scale == 1
      && (index == (global_rtl[GR_ARG_POINTER])
   || index == (global_rtl[GR_FRAME_POINTER])
   || ((((enum rtx_code) (index)->code) == REG) && (((index)->u.fld[0]).rtuint) == 7)))
    {
      rtx tmp = base;
      base = index;
      index = tmp;
    }
  if ((base == (global_rtl[GR_HARD_FRAME_POINTER])
       || base == (global_rtl[GR_FRAME_POINTER])
       || base == (global_rtl[GR_ARG_POINTER])) && !disp)
    disp = (const_int_rtx[64]);
  if (ix86_tune == PROCESSOR_K6 && !optimize_size
      && base && !index && !disp
      && (((enum rtx_code) (base)->code) == REG)
      && (regclass_map[(((base)->u.fld[0]).rtuint)]) == SIREG)
    disp = (const_int_rtx[64]);
  if (!base && index && scale && scale == 2)
    base = index, scale = 1;
  if (!base && !disp && index && scale != 1)
    disp = (const_int_rtx[64]);
  out->base = base;
  out->index = index;
  out->disp = disp;
  out->scale = scale;
  out->seg = seg;
  return retval;
}
static int
ix86_address_cost (rtx x)
{
  struct ix86_address parts;
  int cost = 1;
  if (!ix86_decompose_address (x, &parts))
    fancy_abort ("gcc.c", 693841, "?");
  if (parts.disp && parts.disp != (const_int_rtx[64]))
    cost--;
  if (parts.seg != SEG_DEFAULT)
    cost--;
  if ((parts.base
       && (!(((enum rtx_code) (parts.base)->code) == REG) || (((parts.base)->u.fld[0]).rtuint) >= 53))
      || (parts.index
   && (!(((enum rtx_code) (parts.index)->code) == REG)
       || (((parts.index)->u.fld[0]).rtuint) >= 53)))
    cost++;
  if (parts.base
      && (!(((enum rtx_code) (parts.base)->code) == REG) || (((parts.base)->u.fld[0]).rtuint) >= 53)
      && parts.index
      && (!(((enum rtx_code) (parts.index)->code) == REG) || (((parts.index)->u.fld[0]).rtuint) >= 53)
      && parts.base != parts.index)
    cost++;
  if ((ix86_tune == PROCESSOR_K6)
      && ((!parts.disp && parts.base && parts.index && parts.scale != 1)
   || (parts.disp && !parts.base && parts.index && parts.scale != 1)
   || (!parts.disp && parts.base && parts.index && parts.scale == 1)))
    cost += 10;
  return cost;
}
rtx
ix86_find_base_term (rtx x)
{
  rtx term;
  if (0)
    {
      if (((enum rtx_code) (x)->code) != CONST)
 return x;
      term = (((x)->u.fld[0]).rtx1);
      if (((enum rtx_code) (term)->code) == PLUS
   && (((enum rtx_code) ((((term)->u.fld[1]).rtx1))->code) == CONST_INT
       || ((enum rtx_code) ((((term)->u.fld[1]).rtx1))->code) == CONST_DOUBLE))
 term = (((term)->u.fld[0]).rtx1);
      if (((enum rtx_code) (term)->code) != UNSPEC
   || (((term)->u.fld[1]).rtint) != 2)
 return x;
      term = (((((term)->u.fld[0]).rtvec1))->elem[0]);
      if (((enum rtx_code) (term)->code) != SYMBOL_REF
   && ((enum rtx_code) (term)->code) != LABEL_REF)
 return x;
      return term;
    }
  term = ix86_delegitimize_address (x);
  if (((enum rtx_code) (term)->code) != SYMBOL_REF
      && ((enum rtx_code) (term)->code) != LABEL_REF)
    return x;
  return term;
}
unsigned char
legitimate_constant_p (rtx x)
{
  rtx inner;
  switch (((enum rtx_code) (x)->code))
    {
    case SYMBOL_REF:
      if (tls_symbolic_operand (x, (0 ? DImode : SImode)))
 return 0;
      break;
    case CONST:
      inner = (((x)->u.fld[0]).rtx1);
      if (((enum rtx_code) (inner)->code) == PLUS
   && tls_symbolic_operand ((((inner)->u.fld[0]).rtx1), (0 ? DImode : SImode)))
 return 0;
      if (((enum rtx_code) (inner)->code) == PLUS
   || ((enum rtx_code) (inner)->code) == MINUS)
 {
   if (((enum rtx_code) ((((inner)->u.fld[1]).rtx1))->code) != CONST_INT)
     return 0;
   inner = (((inner)->u.fld[0]).rtx1);
 }
      if (((enum rtx_code) (inner)->code) == UNSPEC)
 switch ((((inner)->u.fld[1]).rtint))
   {
   case 4:
   case 5:
     return local_exec_symbolic_operand ((((((inner)->u.fld[0]).rtvec1))->elem[0]), (0 ? DImode : SImode));
   case 6:
     return local_dynamic_symbolic_operand ((((((inner)->u.fld[0]).rtvec1))->elem[0]), (0 ? DImode : SImode));
   default:
     return 0;
   }
      break;
    default:
      break;
    }
  return 1;
}
static unsigned char
ix86_cannot_force_const_mem (rtx x)
{
  return !legitimate_constant_p (x);
}
unsigned char
constant_address_p (rtx x)
{
  return ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR) && legitimate_address_p ((0 ? DImode : SImode), x, 1);
}
unsigned char
legitimate_pic_operand_p (rtx x)
{
  rtx inner;
  switch (((enum rtx_code) (x)->code))
    {
    case CONST:
      inner = (((x)->u.fld[0]).rtx1);
      if (((enum rtx_code) (inner)->code) == UNSPEC)
 switch ((((inner)->u.fld[1]).rtint))
   {
   case 4:
     return local_exec_symbolic_operand ((((((inner)->u.fld[0]).rtvec1))->elem[0]), (0 ? DImode : SImode));
   default:
     return 0;
   }
    case SYMBOL_REF:
    case LABEL_REF:
      return legitimate_pic_address_disp_p (x);
    default:
      return 1;
    }
}
int
legitimate_pic_address_disp_p (rtx disp)
{
  unsigned char saw_plus;
  if (0)
    {
      if (tls_symbolic_operand (disp, ((enum machine_mode) (disp)->mode)))
 return 0;
      if (((enum rtx_code) (disp)->code) == SYMBOL_REF
   && ix86_cmodel == CM_SMALL_PIC
   && ((((((disp))->u.fld[1]).rtint) & (1 << 1)) != 0))
 return 1;
      if (((enum rtx_code) (disp)->code) == LABEL_REF)
 return 1;
      if (((enum rtx_code) (disp)->code) == CONST
   && ((enum rtx_code) ((((disp)->u.fld[0]).rtx1))->code) == PLUS)
 {
   rtx op0 = ((((((disp)->u.fld[0]).rtx1))->u.fld[0]).rtx1);
   rtx op1 = ((((((disp)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
   if (tls_symbolic_operand (op0, ((enum machine_mode) (op0)->mode)))
     return 0;
   if (((((enum rtx_code) (op0)->code) == SYMBOL_REF
  && ix86_cmodel == CM_SMALL_PIC
  && ((((((op0))->u.fld[1]).rtint) & (1 << 1)) != 0))
        || ((enum rtx_code) (op0)->code) == LABEL_REF)
       && ((enum rtx_code) (op1)->code) == CONST_INT
       && ((op1)->u.hwint[0]) < 16*1024*1024
       && ((op1)->u.hwint[0]) >= -16*1024*1024)
     return 1;
 }
    }
  if (((enum rtx_code) (disp)->code) != CONST)
    return 0;
  disp = (((disp)->u.fld[0]).rtx1);
  if (0)
    {
      if (((enum rtx_code) (disp)->code) != UNSPEC
   || (((disp)->u.fld[1]).rtint) != 2)
 return 0;
      if (((enum rtx_code) ((((((disp)->u.fld[0]).rtvec1))->elem[0]))->code) != SYMBOL_REF
   && ((enum rtx_code) ((((((disp)->u.fld[0]).rtvec1))->elem[0]))->code) != LABEL_REF)
 return 0;
      return 1;
    }
  saw_plus = 0;
  if (((enum rtx_code) (disp)->code) == PLUS)
    {
      if (((enum rtx_code) ((((disp)->u.fld[1]).rtx1))->code) != CONST_INT)
 return 0;
      disp = (((disp)->u.fld[0]).rtx1);
      saw_plus = 1;
    }
  if (0 && ((enum rtx_code) (disp)->code) == MINUS)
    {
      if (((enum rtx_code) ((((disp)->u.fld[0]).rtx1))->code) == LABEL_REF
          || ((enum rtx_code) ((((disp)->u.fld[0]).rtx1))->code) == SYMBOL_REF)
        if (((enum rtx_code) ((((disp)->u.fld[1]).rtx1))->code) == SYMBOL_REF)
          {
            const char *sym_name = ((((((disp)->u.fld[1]).rtx1))->u.fld[0]).rtstr);
            if (! strcmp (sym_name, "<pic base>"))
              return 1;
          }
    }
  if (((enum rtx_code) (disp)->code) != UNSPEC)
    return 0;
  switch ((((disp)->u.fld[1]).rtint))
    {
    case 0:
      if (saw_plus)
 return 0;
      return ((enum rtx_code) ((((((disp)->u.fld[0]).rtvec1))->elem[0]))->code) == SYMBOL_REF;
    case 1:
      if (((enum rtx_code) ((((((disp)->u.fld[0]).rtvec1))->elem[0]))->code) == SYMBOL_REF
   || ((enum rtx_code) ((((((disp)->u.fld[0]).rtvec1))->elem[0]))->code) == LABEL_REF)
        return local_symbolic_operand ((((((disp)->u.fld[0]).rtvec1))->elem[0]), (0 ? DImode : SImode));
      return 0;
    case 3:
    case 7:
    case 8:
      if (saw_plus)
 return 0;
      return initial_exec_symbolic_operand ((((((disp)->u.fld[0]).rtvec1))->elem[0]), (0 ? DImode : SImode));
    case 5:
      return local_exec_symbolic_operand ((((((disp)->u.fld[0]).rtvec1))->elem[0]), (0 ? DImode : SImode));
    case 6:
      return local_dynamic_symbolic_operand ((((((disp)->u.fld[0]).rtvec1))->elem[0]), (0 ? DImode : SImode));
    }
  return 0;
}
int
legitimate_address_p (enum machine_mode mode, rtx addr, int strict)
{
  struct ix86_address parts;
  rtx base, index, disp;
  long scale;
  const char *reason = ((void *)0);
  rtx reason_rtx = (rtx) 0;
  if ((ix86_debug_addr_string1 != 0))
    {
      fprintf (stderr,
        "\n======\nGO_IF_LEGITIMATE_ADDRESS, mode = %s, strict = %d\n",
        mode_name[mode], strict);
      debug_rtx (addr);
    }
  if (ix86_decompose_address (addr, &parts) <= 0)
    {
      reason = "decomposition failed";
      goto report_error;
    }
  base = parts.base;
  index = parts.index;
  disp = parts.disp;
  scale = parts.scale;
  if (base)
    {
      reason_rtx = base;
      if (((enum rtx_code) (base)->code) != REG)
 {
   reason = "base is not a register";
   goto report_error;
 }
      if (((enum machine_mode) (base)->mode) != (0 ? DImode : SImode))
 {
   reason = "base is not in Pmode";
   goto report_error;
 }
      if ((strict && ! (((((base)->u.fld[0]).rtuint)) <= 7 || ((((base)->u.fld[0]).rtuint)) == 16 || ((((base)->u.fld[0]).rtuint)) == 20 || ((((base)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((base)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((base)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((base)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((base)->u.fld[0]).rtuint))] <= 7))
   || (! strict && ! ((((base)->u.fld[0]).rtuint) <= 7 || (((base)->u.fld[0]).rtuint) == 16 || (((base)->u.fld[0]).rtuint) == 20 || ((((base)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (((base)->u.fld[0]).rtuint) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (((base)->u.fld[0]).rtuint) >= 53)))
 {
   reason = "base is not valid";
   goto report_error;
 }
    }
  if (index)
    {
      reason_rtx = index;
      if (((enum rtx_code) (index)->code) != REG)
 {
   reason = "index is not a register";
   goto report_error;
 }
      if (((enum machine_mode) (index)->mode) != (0 ? DImode : SImode))
 {
   reason = "index is not in Pmode";
   goto report_error;
 }
      if ((strict && ! (((((index)->u.fld[0]).rtuint)) < 7 || ((((index)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((index)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((unsigned) reg_renumber[((((index)->u.fld[0]).rtuint))] >= (((((20 + 1) + 7) + 1) + 7) + 1) && (unsigned) reg_renumber[((((index)->u.fld[0]).rtuint))] <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (unsigned) reg_renumber[((((index)->u.fld[0]).rtuint))] < 7))
   || (! strict && ! ((((index)->u.fld[0]).rtuint) < 7 || ((((index)->u.fld[0]).rtuint) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (((index)->u.fld[0]).rtuint) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || (((index)->u.fld[0]).rtuint) >= 53)))
 {
   reason = "index is not valid";
   goto report_error;
 }
    }
  if (scale != 1)
    {
      reason_rtx = gen_rtx_CONST_INT (VOIDmode, (long) (scale));
      if (!index)
 {
   reason = "scale without index";
   goto report_error;
 }
      if (scale != 2 && scale != 4 && scale != 8)
 {
   reason = "scale is not a valid multiplier";
   goto report_error;
 }
    }
  if (disp)
    {
      reason_rtx = disp;
      if (((enum rtx_code) (disp)->code) == CONST
   && ((enum rtx_code) ((((disp)->u.fld[0]).rtx1))->code) == UNSPEC)
 switch (((((((disp)->u.fld[0]).rtx1))->u.fld[1]).rtint))
   {
   case 0:
   case 1:
   case 2:
     if (!flag_pic)
       fancy_abort ("gcc.c", 694270, "?");
     goto is_legitimate_pic;
   case 3:
   case 7:
   case 8:
   case 5:
   case 6:
     break;
   default:
     reason = "invalid address unspec";
     goto report_error;
   }
      else if (flag_pic && ((((enum rtx_code) (disp)->code) == SYMBOL_REF || ((enum rtx_code) (disp)->code) == LABEL_REF || (((enum rtx_code) (disp)->code) == CONST && symbolic_reference_mentioned_p (disp)))
       ))
 {
 is_legitimate_pic:
   if (0 && (index || base))
     {
       if (((enum rtx_code) (disp)->code) != CONST
    || ((enum rtx_code) ((((disp)->u.fld[0]).rtx1))->code) != PLUS
    || ((enum rtx_code) (((((((disp)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) != UNSPEC
    || ((enum rtx_code) (((((((disp)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) != CONST_INT
    || ((((((((((disp)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtint) != 6
        && (((((((((disp)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtint) != 5))
  {
    reason = "non-constant pic memory reference";
    goto report_error;
  }
     }
   else if (! legitimate_pic_address_disp_p (disp))
     {
       reason = "displacement is an invalid pic construct";
       goto report_error;
     }
 }
      else if (((enum rtx_code) (disp)->code) != LABEL_REF
        && ((enum rtx_code) (disp)->code) != CONST_INT
        && (((enum rtx_code) (disp)->code) != CONST
     || !legitimate_constant_p (disp))
        && (((enum rtx_code) (disp)->code) != SYMBOL_REF
     || !legitimate_constant_p (disp)))
 {
   reason = "displacement is not constant";
   goto report_error;
 }
      else if (0 && !x86_64_sign_extended_value (disp))
 {
   reason = "displacement is out of range";
   goto report_error;
 }
    }
  if ((ix86_debug_addr_string1 != 0))
    fprintf (stderr, "Success.\n");
  return 1;
 report_error:
  if ((ix86_debug_addr_string1 != 0))
    {
      fprintf (stderr, "Error: %s\n", reason);
      debug_rtx (reason_rtx);
    }
  return 0;
}
static long
ix86_GOT_alias_set (void)
{
  static long set = -1;
  if (set == -1)
    set = new_alias_set ();
  return set;
}
rtx
legitimize_pic_address (rtx orig, rtx reg)
{
  rtx addr = orig;
  rtx new = orig;
  rtx base;
  if (0 && legitimate_pic_address_disp_p (addr))
    new = addr;
  else if (!0 && local_symbolic_operand (addr, (0 ? DImode : SImode)))
    {
      if (reload_in_progress)
 regs_ever_live[(0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3)] = 1;
      if (((enum rtx_code) (addr)->code) == CONST)
 addr = (((addr)->u.fld[0]).rtx1);
      if (((enum rtx_code) (addr)->code) == PLUS)
   {
            new = gen_rtx_fmt_Ei (UNSPEC, ((0 ? DImode : SImode)), (gen_rtvec (1, (((addr)->u.fld[0]).rtx1))), (1));
     new = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (new), ((((addr)->u.fld[1]).rtx1)));
   }
 else
          new = gen_rtx_fmt_Ei (UNSPEC, ((0 ? DImode : SImode)), (gen_rtvec (1, addr)), (1));
      new = gen_rtx_fmt_e (CONST, ((0 ? DImode : SImode)), (new));
      new = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (pic_offset_table_rtx), (new));
      if (reg != 0)
 {
   emit_move_insn (reg, new);
   new = reg;
 }
    }
  else if (((enum rtx_code) (addr)->code) == SYMBOL_REF)
    {
      if (0)
 {
   new = gen_rtx_fmt_Ei (UNSPEC, ((0 ? DImode : SImode)), (gen_rtvec (1, addr)), (2));
   new = gen_rtx_fmt_e (CONST, ((0 ? DImode : SImode)), (new));
   new = gen_rtx_MEM ((0 ? DImode : SImode), new);
   (((new))->unchanging) = 1;
   set_mem_alias_set (new, ix86_GOT_alias_set ());
   if (reg == 0)
     reg = gen_reg_rtx ((0 ? DImode : SImode));
   emit_insn (gen_movsi (reg, new));
   new = reg;
 }
      else
 {
   if (reload_in_progress)
     regs_ever_live[(0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3)] = 1;
   new = gen_rtx_fmt_Ei (UNSPEC, ((0 ? DImode : SImode)), (gen_rtvec (1, addr)), (0));
   new = gen_rtx_fmt_e (CONST, ((0 ? DImode : SImode)), (new));
   new = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (pic_offset_table_rtx), (new));
   new = gen_rtx_MEM ((0 ? DImode : SImode), new);
   (((new))->unchanging) = 1;
   set_mem_alias_set (new, ix86_GOT_alias_set ());
   if (reg == 0)
     reg = gen_reg_rtx ((0 ? DImode : SImode));
   emit_move_insn (reg, new);
   new = reg;
 }
    }
  else
    {
      if (((enum rtx_code) (addr)->code) == CONST)
 {
   addr = (((addr)->u.fld[0]).rtx1);
   if (((enum rtx_code) (addr)->code) == UNSPEC
       || (((enum rtx_code) (addr)->code) == PLUS
    && ((enum rtx_code) ((((addr)->u.fld[0]).rtx1))->code) == UNSPEC))
     return orig;
   if (((enum rtx_code) (addr)->code) != PLUS)
     fancy_abort ("gcc.c", 694487, "?");
 }
      if (((enum rtx_code) (addr)->code) == PLUS)
 {
   rtx op0 = (((addr)->u.fld[0]).rtx1), op1 = (((addr)->u.fld[1]).rtx1);
   if (local_symbolic_operand (op0, (0 ? DImode : SImode))
       && ((enum rtx_code) (op1)->code) == CONST_INT)
     {
       if (!0)
  {
    if (reload_in_progress)
      regs_ever_live[(0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3)] = 1;
    new = gen_rtx_fmt_Ei (UNSPEC, ((0 ? DImode : SImode)), (gen_rtvec (1, op0)), (1))
                   ;
    new = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (new), (op1));
    new = gen_rtx_fmt_e (CONST, ((0 ? DImode : SImode)), (new));
    new = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (pic_offset_table_rtx), (new));
    if (reg != 0)
      {
        emit_move_insn (reg, new);
        new = reg;
      }
  }
       else
  {
    if (((op1)->u.hwint[0]) < -16*1024*1024
        || ((op1)->u.hwint[0]) >= 16*1024*1024)
      new = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (op0), (force_reg ((0 ? DImode : SImode), op1)));
  }
     }
   else
     {
       base = legitimize_pic_address ((((addr)->u.fld[0]).rtx1), reg);
       new = legitimize_pic_address ((((addr)->u.fld[1]).rtx1),
          base == reg ? (rtx) 0 : reg);
       if (((enum rtx_code) (new)->code) == CONST_INT)
  new = plus_constant_wide ((base), (long) (((new)->u.hwint[0])));
       else
  {
    if (((enum rtx_code) (new)->code) == PLUS && ((rtx_class[(int) (((enum rtx_code) ((((new)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((new)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
      {
        base = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (base), ((((new)->u.fld[0]).rtx1)));
        new = (((new)->u.fld[1]).rtx1);
      }
    new = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (base), (new));
  }
     }
 }
    }
  return new;
}
static rtx
get_thread_pointer (int to_reg)
{
  rtx tp, reg, insn;
  tp = gen_rtx_fmt_Ei (UNSPEC, ((0 ? DImode : SImode)), (gen_rtvec (1, (const_int_rtx[64]))), (15));
  if (!to_reg)
    return tp;
  reg = gen_reg_rtx ((0 ? DImode : SImode));
  insn = gen_rtx_fmt_ee (SET, (VOIDmode), (reg), (tp));
  insn = emit_insn (insn);
  return reg;
}
static rtx
legitimize_tls_address (rtx x, enum tls_model model, int for_mov)
{
  rtx dest, base, off, pic;
  int type;
  switch (model)
    {
    case TLS_MODEL_GLOBAL_DYNAMIC:
      dest = gen_reg_rtx ((0 ? DImode : SImode));
      if (0)
 {
   rtx rax = gen_rtx_REG ((0 ? DImode : SImode), 0), insns;
   start_sequence ();
   emit_call_insn (gen_tls_global_dynamic_64 (rax, x));
   insns = get_insns ();
   end_sequence ();
   emit_libcall_block (insns, dest, rax, x);
 }
      else
 emit_insn (gen_tls_global_dynamic_32 (dest, x));
      break;
    case TLS_MODEL_LOCAL_DYNAMIC:
      base = gen_reg_rtx ((0 ? DImode : SImode));
      if (0)
 {
   rtx rax = gen_rtx_REG ((0 ? DImode : SImode), 0), insns, note;
   start_sequence ();
   emit_call_insn (gen_tls_local_dynamic_base_64 (rax));
   insns = get_insns ();
   end_sequence ();
   note = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), ((const_int_rtx[64])), (((void *)0)));
   note = gen_rtx_fmt_ee (EXPR_LIST, (VOIDmode), (ix86_tls_get_addr ()), (note));
   emit_libcall_block (insns, base, rax, note);
 }
      else
 emit_insn (gen_tls_local_dynamic_base_32 (base));
      off = gen_rtx_fmt_Ei (UNSPEC, ((0 ? DImode : SImode)), (gen_rtvec (1, x)), (6));
      off = gen_rtx_fmt_e (CONST, ((0 ? DImode : SImode)), (off));
      return gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (base), (off));
    case TLS_MODEL_INITIAL_EXEC:
      if (0)
 {
   pic = ((void *)0);
   type = 7;
 }
      else if (flag_pic)
 {
   if (reload_in_progress)
     regs_ever_live[(0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3)] = 1;
   pic = pic_offset_table_rtx;
   type = (ix86_tls_dialect == TLS_DIALECT_GNU) ? 7 : 3;
 }
      else if (!(ix86_tls_dialect == TLS_DIALECT_GNU))
 {
   pic = gen_reg_rtx ((0 ? DImode : SImode));
   emit_insn (gen_set_got (pic));
   type = 3;
 }
      else
 {
   pic = ((void *)0);
   type = 8;
 }
      off = gen_rtx_fmt_Ei (UNSPEC, ((0 ? DImode : SImode)), (gen_rtvec (1, x)), (type));
      off = gen_rtx_fmt_e (CONST, ((0 ? DImode : SImode)), (off));
      if (pic)
 off = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (pic), (off));
      off = gen_rtx_MEM ((0 ? DImode : SImode), off);
      (((off))->unchanging) = 1;
      set_mem_alias_set (off, ix86_GOT_alias_set ());
      if (0 || (ix86_tls_dialect == TLS_DIALECT_GNU))
 {
          base = get_thread_pointer (for_mov || !(target_flags & 0x00400000));
   off = force_reg ((0 ? DImode : SImode), off);
   return gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (base), (off));
 }
      else
 {
   base = get_thread_pointer (1);
   dest = gen_reg_rtx ((0 ? DImode : SImode));
   emit_insn (gen_subsi3 (dest, base, off));
 }
      break;
    case TLS_MODEL_LOCAL_EXEC:
      off = gen_rtx_fmt_Ei (UNSPEC, ((0 ? DImode : SImode)), (gen_rtvec (1, x)), ((0 || (ix86_tls_dialect == TLS_DIALECT_GNU)) ? 5 : 4))
                                      ;
      off = gen_rtx_fmt_e (CONST, ((0 ? DImode : SImode)), (off));
      if (0 || (ix86_tls_dialect == TLS_DIALECT_GNU))
 {
   base = get_thread_pointer (for_mov || !(target_flags & 0x00400000));
   return gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (base), (off));
 }
      else
 {
   base = get_thread_pointer (1);
   dest = gen_reg_rtx ((0 ? DImode : SImode));
   emit_insn (gen_subsi3 (dest, base, off));
 }
      break;
    default:
      fancy_abort ("gcc.c", 694681, "?");
    }
  return dest;
}
rtx
legitimize_address (rtx x, rtx oldx , enum machine_mode mode)
{
  int changed = 0;
  unsigned log;
  if ((ix86_debug_addr_string1 != 0))
    {
      fprintf (stderr, "\n==========\nLEGITIMIZE_ADDRESS, mode = %s\n",
        mode_name[mode]);
      debug_rtx (x);
    }
  log = tls_symbolic_operand (x, mode);
  if (log)
    return legitimize_tls_address (x, log, 0);
  if (flag_pic && (((enum rtx_code) (x)->code) == SYMBOL_REF || ((enum rtx_code) (x)->code) == LABEL_REF || (((enum rtx_code) (x)->code) == CONST && symbolic_reference_mentioned_p (x))))
    return legitimize_pic_address (x, 0);
  if (((enum rtx_code) (x)->code) == ASHIFT
      && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
      && (log = (unsigned) exact_log2_wide ((unsigned long) ((((((x)->u.fld[1]).rtx1))->u.hwint[0])))) < 4)
    {
      changed = 1;
      x = gen_rtx_fmt_ee (MULT, ((0 ? DImode : SImode)), (force_reg ((0 ? DImode : SImode), (((x)->u.fld[0]).rtx1))), (gen_rtx_CONST_INT (VOIDmode, (long) (1 << log))))
                      ;
    }
  if (((enum rtx_code) (x)->code) == PLUS)
    {
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == ASHIFT
   && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
   && (log = (unsigned) exact_log2_wide ((unsigned long) (((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])))) < 4)
 {
   changed = 1;
   (((x)->u.fld[0]).rtx1) = gen_rtx_fmt_ee (MULT, ((0 ? DImode : SImode)), (force_reg ((0 ? DImode : SImode), ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))), (gen_rtx_CONST_INT (VOIDmode, (long) (1 << log))))
                             ;
 }
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == ASHIFT
   && ((enum rtx_code) (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
   && (log = (unsigned) exact_log2_wide ((unsigned long) (((((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1))->u.hwint[0])))) < 4)
 {
   changed = 1;
   (((x)->u.fld[1]).rtx1) = gen_rtx_fmt_ee (MULT, ((0 ? DImode : SImode)), (force_reg ((0 ? DImode : SImode), ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1))), (gen_rtx_CONST_INT (VOIDmode, (long) (1 << log))))
                             ;
 }
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == MULT)
 {
   rtx tmp = (((x)->u.fld[0]).rtx1);
   (((x)->u.fld[0]).rtx1) = (((x)->u.fld[1]).rtx1);
   (((x)->u.fld[1]).rtx1) = tmp;
   changed = 1;
 }
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MULT && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == PLUS)
 {
   changed = 1;
   x = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((((x)->u.fld[0]).rtx1)), (((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1)))), (((((((x)->u.fld[1]).rtx1))->u.fld[1]).rtx1)))
                             ;
 }
      else if (((enum rtx_code) (x)->code) == PLUS && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
        && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == MULT
        && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == PLUS
        && ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
 {
   rtx constant;
   rtx other = (rtx) 0;
   if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
     {
       constant = (((x)->u.fld[1]).rtx1);
       other = (((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
     }
   else if (((enum rtx_code) ((((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
     {
       constant = (((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[1]).rtx1);
       other = (((x)->u.fld[1]).rtx1);
     }
   else
     constant = 0;
   if (constant)
     {
       changed = 1;
       x = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1)), ((((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.fld[0]).rtx1)))), (plus_constant_wide ((other), (long) (((constant)->u.hwint[0])))))
                                             ;
     }
 }
      if (changed && legitimate_address_p (mode, x, 0))
 return x;
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MULT)
 {
   changed = 1;
   (((x)->u.fld[0]).rtx1) = force_operand ((((x)->u.fld[0]).rtx1), 0);
 }
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == MULT)
 {
   changed = 1;
   (((x)->u.fld[1]).rtx1) = force_operand ((((x)->u.fld[1]).rtx1), 0);
 }
      if (changed
   && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG
   && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
 return x;
      if (flag_pic && (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == SYMBOL_REF || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == LABEL_REF || (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST && symbolic_reference_mentioned_p ((((x)->u.fld[1]).rtx1)))))
 {
   changed = 1;
   x = legitimize_pic_address (x, 0);
 }
      if (changed && legitimate_address_p (mode, x, 0))
 return x;
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG)
 {
   rtx temp = gen_reg_rtx ((0 ? DImode : SImode));
   rtx val = force_operand ((((x)->u.fld[1]).rtx1), temp);
   if (val != temp)
     emit_move_insn (temp, val);
   (((x)->u.fld[1]).rtx1) = temp;
   return x;
 }
      else if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == REG)
 {
   rtx temp = gen_reg_rtx ((0 ? DImode : SImode));
   rtx val = force_operand ((((x)->u.fld[0]).rtx1), temp);
   if (val != temp)
     emit_move_insn (temp, val);
   (((x)->u.fld[0]).rtx1) = temp;
   return x;
 }
    }
  return x;
}
static void
output_pic_addr_const (FILE *file, rtx x, int code)
{
  char buf[256];
  switch (((enum rtx_code) (x)->code))
    {
    case PC:
      if (flag_pic)
 putc_unlocked ('.', file);
      else
 fancy_abort ("gcc.c", 694889, "?");
      break;
    case SYMBOL_REF:
     if (((((x))->u.fld[2]).rttree))
       mark_decl_referenced (((((x))->u.fld[2]).rttree));
      assemble_name (file, (((x)->u.fld[0]).rtstr));
      if (!0 && code == 'P' && ! ((((((x))->u.fld[1]).rtint) & (1 << 1)) != 0))
 fputs_unlocked ("@PLT", file);
      break;
    case LABEL_REF:
      x = (((x)->u.fld[0]).rtx1);
    case CODE_LABEL:
      do { sprintf (buf, "*.%s%u", "L", (unsigned) ((((x)->u.fld[6]).rtint))); } while (0);
      assemble_name (asm_out_file, buf);
      break;
    case CONST_INT:
      fprintf (file, "%ld", ((x)->u.hwint[0]));
      break;
    case CONST:
      output_pic_addr_const (file, (((x)->u.fld[0]).rtx1), code);
      break;
    case CONST_DOUBLE:
      if (((enum machine_mode) (x)->mode) == VOIDmode)
 {
   if (((x)->u.hwint[1]) || ((x)->u.hwint[0]) < 0)
     fprintf (file, "0x%lx%08lx",
       (unsigned long) ((x)->u.hwint[1]),
       (unsigned long) ((x)->u.hwint[0]));
   else
     fprintf (file, "%ld", ((x)->u.hwint[0]));
 }
      else
 output_operand_lossage ("floating constant misused");
      break;
    case PLUS:
      if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == CONST_INT)
 {
   output_pic_addr_const (file, (((x)->u.fld[0]).rtx1), code);
   putc_unlocked ('+', file);
   output_pic_addr_const (file, (((x)->u.fld[1]).rtx1), code);
 }
      else if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
 {
   output_pic_addr_const (file, (((x)->u.fld[1]).rtx1), code);
   putc_unlocked ('+', file);
   output_pic_addr_const (file, (((x)->u.fld[0]).rtx1), code);
 }
      else
 fancy_abort ("gcc.c", 694952, "?");
      break;
    case MINUS:
      if (!0)
 putc_unlocked ((ix86_asm_dialect) == ASM_INTEL ? '(' : '[', file);
      output_pic_addr_const (file, (((x)->u.fld[0]).rtx1), code);
      putc_unlocked ('-', file);
      output_pic_addr_const (file, (((x)->u.fld[1]).rtx1), code);
      if (!0)
 putc_unlocked ((ix86_asm_dialect) == ASM_INTEL ? ')' : ']', file);
      break;
     case UNSPEC:
       if ((((((x)->u.fld[0]).rtvec1))->num_elem) != 1)
  fancy_abort ("gcc.c", 694967, "?");
       output_pic_addr_const (file, (((((x)->u.fld[0]).rtvec1))->elem[0]), code);
       switch ((((x)->u.fld[1]).rtint))
 {
 case 0:
   fputs_unlocked ("@GOT", file);
   break;
 case 1:
   fputs_unlocked ("@GOTOFF", file);
   break;
 case 2:
   fputs_unlocked ("@GOTPCREL(%rip)", file);
   break;
 case 3:
   fputs_unlocked ("@GOTTPOFF", file);
   break;
 case 4:
   fputs_unlocked ("@TPOFF", file);
   break;
 case 5:
   if (0)
     fputs_unlocked ("@TPOFF", file);
   else
     fputs_unlocked ("@NTPOFF", file);
   break;
 case 6:
   fputs_unlocked ("@DTPOFF", file);
   break;
 case 7:
   if (0)
     fputs_unlocked ("@GOTTPOFF(%rip)", file);
   else
     fputs_unlocked ("@GOTNTPOFF", file);
   break;
 case 8:
   fputs_unlocked ("@INDNTPOFF", file);
   break;
 default:
   output_operand_lossage ("invalid UNSPEC as operand");
   break;
 }
       break;
    default:
      output_operand_lossage ("invalid expression as operand");
    }
}
void
i386_dwarf_output_addr_const (FILE *file, rtx x)
{
  fprintf (file, "%s", 0 ? "\t.quad\t" : "\t.long\t");
  if (flag_pic)
    output_pic_addr_const (file, x, '\0');
  else
    output_addr_const (file, x);
  fputc_unlocked ('\n', file);
}
void
i386_output_dwarf_dtprel (FILE *file, int size, rtx x)
{
  fputs_unlocked ("\t.long\t", file);
  output_addr_const (file, x);
  fputs_unlocked ("@DTPOFF", file);
  switch (size)
    {
    case 4:
      break;
    case 8:
      fputs_unlocked (", 0", file);
      break;
    default:
      fancy_abort ("gcc.c", 695053, "?");
   }
}
static rtx
ix86_delegitimize_address (rtx orig_x)
{
  rtx x = orig_x, y;
  if (((enum rtx_code) (x)->code) == MEM)
    x = (((x)->u.fld[0]).rtx1);
  if (0)
    {
      if (((enum rtx_code) (x)->code) != CONST
   || ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) != UNSPEC
   || ((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtint) != 2
   || ((enum rtx_code) (orig_x)->code) != MEM)
 return orig_x;
      return ((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtvec1))->elem[0]);
    }
  if (((enum rtx_code) (x)->code) != PLUS
      || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) != CONST)
    return orig_x;
  if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == REG
      && ((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == (0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3))
    y = ((void *)0);
  else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS)
    {
      y = (((x)->u.fld[0]).rtx1);
      if (((enum rtx_code) ((((y)->u.fld[0]).rtx1))->code) == REG
   && ((((((y)->u.fld[0]).rtx1))->u.fld[0]).rtuint) == (0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3))
 y = (((y)->u.fld[1]).rtx1);
      else if (((enum rtx_code) ((((y)->u.fld[1]).rtx1))->code) == REG
        && ((((((y)->u.fld[1]).rtx1))->u.fld[0]).rtuint) == (0 || !flag_pic ? (~(unsigned int) 0) : reload_completed ? (((pic_offset_table_rtx)->u.fld[0]).rtuint) : 3))
 y = (((y)->u.fld[0]).rtx1);
      else
 return orig_x;
      if (((enum rtx_code) (y)->code) != REG
   && ((enum rtx_code) (y)->code) != MULT
   && ((enum rtx_code) (y)->code) != ASHIFT)
 return orig_x;
    }
  else
    return orig_x;
  x = ((((((x)->u.fld[1]).rtx1))->u.fld[0]).rtx1);
  if (((enum rtx_code) (x)->code) == UNSPEC
      && (((((x)->u.fld[1]).rtint) == 0 && ((enum rtx_code) (orig_x)->code) == MEM)
   || ((((x)->u.fld[1]).rtint) == 1 && ((enum rtx_code) (orig_x)->code) != MEM)))
    {
      if (y)
 return gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (y), ((((((x)->u.fld[0]).rtvec1))->elem[0])));
      return (((((x)->u.fld[0]).rtvec1))->elem[0]);
    }
  if (((enum rtx_code) (x)->code) == PLUS
      && ((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == UNSPEC
      && ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
      && ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtint) == 0 && ((enum rtx_code) (orig_x)->code) == MEM)
   || (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtint) == 1
       && ((enum rtx_code) (orig_x)->code) != MEM)))
    {
      x = gen_rtx_fmt_ee (PLUS, (VOIDmode), (((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtvec1))->elem[0])), ((((x)->u.fld[1]).rtx1)));
      if (y)
 return gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (y), (x));
      return x;
    }
  return orig_x;
}
static void
put_condition_code (enum rtx_code code, enum machine_mode mode, int reverse,
      int fp, FILE *file)
{
  const char *suffix;
  if (mode == CCFPmode || mode == CCFPUmode)
    {
      enum rtx_code second_code, bypass_code;
      ix86_fp_comparison_codes (code, &bypass_code, &code, &second_code);
      if (bypass_code != NIL || second_code != NIL)
 fancy_abort ("gcc.c", 695144, "?");
      code = ix86_fp_compare_code_to_integer (code);
      mode = CCmode;
    }
  if (reverse)
    code = reverse_condition (code);
  switch (code)
    {
    case EQ:
      suffix = "e";
      break;
    case NE:
      suffix = "ne";
      break;
    case GT:
      if (mode != CCmode && mode != CCNOmode && mode != CCGCmode)
 fancy_abort ("gcc.c", 695161, "?");
      suffix = "g";
      break;
    case GTU:
      if (mode != CCmode)
 fancy_abort ("gcc.c", 695168, "?");
      suffix = fp ? "nbe" : "a";
      break;
    case LT:
      if (mode == CCNOmode || mode == CCGOCmode)
 suffix = "s";
      else if (mode == CCmode || mode == CCGCmode)
 suffix = "l";
      else
 fancy_abort ("gcc.c", 695177, "?");
      break;
    case LTU:
      if (mode != CCmode)
 fancy_abort ("gcc.c", 695181, "?");
      suffix = "b";
      break;
    case GE:
      if (mode == CCNOmode || mode == CCGOCmode)
 suffix = "ns";
      else if (mode == CCmode || mode == CCGCmode)
 suffix = "ge";
      else
 fancy_abort ("gcc.c", 695190, "?");
      break;
    case GEU:
      if (mode != CCmode)
 fancy_abort ("gcc.c", 695195, "?");
      suffix = fp ? "nb" : "ae";
      break;
    case LE:
      if (mode != CCmode && mode != CCGCmode && mode != CCNOmode)
 fancy_abort ("gcc.c", 695200, "?");
      suffix = "le";
      break;
    case LEU:
      if (mode != CCmode)
 fancy_abort ("gcc.c", 695205, "?");
      suffix = "be";
      break;
    case UNORDERED:
      suffix = fp ? "u" : "p";
      break;
    case ORDERED:
      suffix = fp ? "nu" : "np";
      break;
    default:
      fancy_abort ("gcc.c", 695215, "?");
    }
  fputs_unlocked (suffix, file);
}
void
print_reg (rtx x, int code, FILE *file)
{
  if ((((x)->u.fld[0]).rtuint) == 16
      || (((x)->u.fld[0]).rtuint) == 20
      || (((x)->u.fld[0]).rtuint) == 17
      || (((x)->u.fld[0]).rtuint) == 18)
    fancy_abort ("gcc.c", 695235, "?");
  if ((ix86_asm_dialect) == ASM_ATT || ""[0] == 0)
    putc_unlocked ('%', file);
  if (code == 'w' || ((((enum rtx_code) (x)->code) == REG) && (((((x)->u.fld[0]).rtuint)) >= (((20 + 1) + 7) + 1) && ((((x)->u.fld[0]).rtuint)) <= ((((20 + 1) + 7) + 1) + 7))))
    code = 2;
  else if (code == 'b')
    code = 1;
  else if (code == 'k')
    code = 4;
  else if (code == 'q')
    code = 8;
  else if (code == 'y')
    code = 3;
  else if (code == 'h')
    code = 0;
  else
    code = ((unsigned short) mode_size[((enum machine_mode) (x)->mode)]);
  if (((((enum rtx_code) (x)->code) == REG) && (((((x)->u.fld[0]).rtuint)) >= (((((20 + 1) + 7) + 1) + 7) + 1) && ((((x)->u.fld[0]).rtuint)) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7))))
    {
      if (!0)
 fancy_abort ("gcc.c", 695260, "?");
      switch (code)
 {
   case 0:
     error ("extended registers have no high halves");
     break;
   case 1:
     fprintf (file, "r%ib", (((x)->u.fld[0]).rtuint) - (((((20 + 1) + 7) + 1) + 7) + 1) + 8);
     break;
   case 2:
     fprintf (file, "r%iw", (((x)->u.fld[0]).rtuint) - (((((20 + 1) + 7) + 1) + 7) + 1) + 8);
     break;
   case 4:
     fprintf (file, "r%id", (((x)->u.fld[0]).rtuint) - (((((20 + 1) + 7) + 1) + 7) + 1) + 8);
     break;
   case 8:
     fprintf (file, "r%i", (((x)->u.fld[0]).rtuint) - (((((20 + 1) + 7) + 1) + 7) + 1) + 8);
     break;
   default:
     error ("unsupported operand size for extended register");
     break;
 }
      return;
    }
  switch (code)
    {
    case 3:
      if (((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) == 8))
 {
   fputs_unlocked ("st(0)", file);
   break;
 }
    case 8:
    case 4:
    case 12:
      if (! ((((enum rtx_code) (x)->code) == REG) && ((((((x)->u.fld[0]).rtuint)) >= 8 && ((((x)->u.fld[0]).rtuint)) <= (8 + 7)) || ((((((x)->u.fld[0]).rtuint)) >= (20 + 1) && ((((x)->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((x)->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((x)->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))))
 putc_unlocked (code == 8 && 0 ? 'r' : 'e', file);
    case 16:
    case 2:
    normal:
      fputs_unlocked (hi_reg_name[(((x)->u.fld[0]).rtuint)], file);
      break;
    case 1:
      if ((((x)->u.fld[0]).rtuint) >= (sizeof (qi_reg_name) / sizeof ((qi_reg_name)[0])))
 goto normal;
      fputs_unlocked (qi_reg_name[(((x)->u.fld[0]).rtuint)], file);
      break;
    case 0:
      if ((((x)->u.fld[0]).rtuint) >= (sizeof (qi_high_reg_name) / sizeof ((qi_high_reg_name)[0])))
 goto normal;
      fputs_unlocked (qi_high_reg_name[(((x)->u.fld[0]).rtuint)], file);
      break;
    default:
      fancy_abort ("gcc.c", 695315, "?");
    }
}
static const char *
get_some_local_dynamic_name (void)
{
  rtx insn;
  if (cfun->machine->some_ld_name)
    return cfun->machine->some_ld_name;
  for (insn = get_insns (); insn ; insn = (((insn)->u.fld[2]).rtx1))
    if (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN))
 && for_each_rtx (&(((insn)->u.fld[5]).rtx1), get_some_local_dynamic_name_1, 0))
      return cfun->machine->some_ld_name;
  fancy_abort ("gcc.c", 695336, "?");
}
static int
get_some_local_dynamic_name_1 (rtx *px, void *data )
{
  rtx x = *px;
  if (((enum rtx_code) (x)->code) == SYMBOL_REF
      && local_dynamic_symbolic_operand (x, (0 ? DImode : SImode)))
    {
      cfun->machine->some_ld_name = (((x)->u.fld[0]).rtstr);
      return 1;
    }
  return 0;
}
void
print_operand (FILE *file, rtx x, int code)
{
  if (code)
    {
      switch (code)
 {
 case '*':
   if ((ix86_asm_dialect) == ASM_ATT)
     putc_unlocked ('*', file);
   return;
 case '&':
   assemble_name (file, get_some_local_dynamic_name ());
   return;
 case 'A':
   if ((ix86_asm_dialect) == ASM_ATT)
     putc_unlocked ('*', file);
   else if ((ix86_asm_dialect) == ASM_INTEL)
     {
       if (((enum rtx_code) (x)->code) != REG)
  {
    putc_unlocked ('[', file);
    print_operand ((file), (x), (0));
    putc_unlocked (']', file);
    return;
  }
     }
   else
     fancy_abort ("gcc.c", 695413, "?");
   print_operand ((file), (x), (0));
   return;
 case 'L':
   if ((ix86_asm_dialect) == ASM_ATT)
     putc_unlocked ('l', file);
   return;
 case 'W':
   if ((ix86_asm_dialect) == ASM_ATT)
     putc_unlocked ('w', file);
   return;
 case 'B':
   if ((ix86_asm_dialect) == ASM_ATT)
     putc_unlocked ('b', file);
   return;
 case 'Q':
   if ((ix86_asm_dialect) == ASM_ATT)
     putc_unlocked ('l', file);
   return;
 case 'S':
   if ((ix86_asm_dialect) == ASM_ATT)
     putc_unlocked ('s', file);
   return;
 case 'T':
   if ((ix86_asm_dialect) == ASM_ATT)
     putc_unlocked ('t', file);
   return;
 case 'z':
   if (((((enum rtx_code) (x)->code) == REG) && (((x)->u.fld[0]).rtuint) >= 8 && (((x)->u.fld[0]).rtuint) <= (8 + 7)))
     return;
   if ((ix86_asm_dialect) == ASM_INTEL)
     return;
   switch (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]))
     {
     case 2:
       putc_unlocked ('s', file);
       return;
     case 4:
       if (((enum machine_mode) (x)->mode) == SFmode)
  {
    putc_unlocked ('s', file);
    return;
  }
       else
  putc_unlocked ('l', file);
       return;
     case 12:
     case 16:
       putc_unlocked ('t', file);
       return;
     case 8:
       if (mode_class[((enum machine_mode) (x)->mode)] == MODE_INT)
  {
    putc_unlocked ('l', file);
    putc_unlocked ('l', file);
  }
       else
         putc_unlocked ('l', file);
       return;
     default:
       fancy_abort ("gcc.c", 695498, "?");
     }
 case 'b':
 case 'w':
 case 'k':
 case 'q':
 case 'h':
 case 'y':
 case 'X':
 case 'P':
   break;
 case 's':
   if (((enum rtx_code) (x)->code) == CONST_INT || ! 1)
     {
       print_operand ((file), (x), (0));
       putc_unlocked (',', file);
     }
   return;
 case 'D':
   switch (((enum rtx_code) (x)->code))
     {
     case EQ:
     case UNEQ:
       fputs_unlocked ("eq", file);
       break;
     case LT:
     case UNLT:
       fputs_unlocked ("lt", file);
       break;
     case LE:
     case UNLE:
       fputs_unlocked ("le", file);
       break;
     case UNORDERED:
       fputs_unlocked ("unord", file);
       break;
     case NE:
     case LTGT:
       fputs_unlocked ("neq", file);
       break;
     case UNGE:
     case GE:
       fputs_unlocked ("nlt", file);
       break;
     case UNGT:
     case GT:
       fputs_unlocked ("nle", file);
       break;
     case ORDERED:
       fputs_unlocked ("ord", file);
       break;
     default:
       fancy_abort ("gcc.c", 695556, "?");
       break;
     }
   return;
 case 'O':
   return;
 case 'C':
   put_condition_code (((enum rtx_code) (x)->code), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode), 0, 0, file);
   return;
 case 'F':
   put_condition_code (((enum rtx_code) (x)->code), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode), 0, 1, file);
   return;
 case 'c':
   if (!(((rtx_class[(int) (((enum rtx_code) (x)->code))]) & (~1)) == (RTX_COMPARE & (~1))))
   {
     output_operand_lossage ("operand is neither a constant nor a condition code, invalid operand code 'c'");
      return;
   }
   put_condition_code (((enum rtx_code) (x)->code), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode), 1, 0, file);
   return;
 case 'f':
   put_condition_code (((enum rtx_code) (x)->code), ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode), 1, 1, file);
   return;
 case '+':
   {
     rtx x;
     if (!optimize || optimize_size || !(x86_branch_hints & (1 << ix86_tune)))
       return;
     x = find_reg_note (current_output_insn, REG_BR_PROB, 0);
     if (x)
       {
  int pred_val = (((((x)->u.fld[0]).rtx1))->u.hwint[0]);
  if (pred_val < 10000 * 45 / 100
      || pred_val > 10000 * 55 / 100)
    {
      int taken = pred_val > 10000 / 2;
      int cputaken = final_forward_branch_p (current_output_insn) == 0;
      if (taken != cputaken)
        {
   if (taken)
     fputs_unlocked ("ds ; ", file);
   else
     fputs_unlocked ("cs ; ", file);
        }
    }
       }
     return;
   }
 default:
     output_operand_lossage ("invalid operand code `%c'", code);
 }
    }
  if (((enum rtx_code) (x)->code) == REG)
    print_reg (x, code, file);
  else if (((enum rtx_code) (x)->code) == MEM)
    {
      if ((ix86_asm_dialect) == ASM_INTEL && code != 'X' && code != 'P')
 {
   const char * size;
   switch (((unsigned short) mode_size[((enum machine_mode) (x)->mode)]))
     {
     case 1: size = "BYTE"; break;
     case 2: size = "WORD"; break;
     case 4: size = "DWORD"; break;
     case 8: size = "QWORD"; break;
     case 12: size = "XWORD"; break;
     case 16: size = "XMMWORD"; break;
     default:
       fancy_abort ("gcc.c", 695662, "?");
     }
   if (code == 'b')
     size = "BYTE";
   else if (code == 'w')
     size = "WORD";
   else if (code == 'k')
     size = "DWORD";
   fputs_unlocked (size, file);
   fputs_unlocked (" PTR ", file);
 }
      x = (((x)->u.fld[0]).rtx1);
      if (constant_address_p (x) && code == 'P'
        && ((enum rtx_code) (x)->code) != CONST_INT)
 output_addr_const (file, x);
      else if (this_is_asm_operands && ! address_operand (x, VOIDmode))
 output_operand_lossage ("invalid constraints for operand");
      else
 output_address (x);
    }
  else if (((enum rtx_code) (x)->code) == CONST_DOUBLE && ((enum machine_mode) (x)->mode) == SFmode)
    {
      struct real_value r;
      long l;
      memcpy (&(r), &(((x))->u.hwint[0]), sizeof (struct real_value));
      ((l) = real_to_target (((void *)0), &(r), mode_for_size (32, MODE_FLOAT, 0)));
      if ((ix86_asm_dialect) == ASM_ATT)
 putc_unlocked ('$', file);
      fprintf (file, "0x%08lx", l);
    }
  else if (((enum rtx_code) (x)->code) == CONST_DOUBLE && ((enum machine_mode) (x)->mode) == DFmode)
    {
      char dstr[30];
      real_to_decimal (dstr, ((struct real_value *)&((x)->u.hwint[0])), sizeof (dstr), 0, 1);
      fprintf (file, "%s", dstr);
    }
  else if (((enum rtx_code) (x)->code) == CONST_DOUBLE
    && ((enum machine_mode) (x)->mode) == XFmode)
    {
      char dstr[30];
      real_to_decimal (dstr, ((struct real_value *)&((x)->u.hwint[0])), sizeof (dstr), 0, 1);
      fprintf (file, "%s", dstr);
    }
  else
    {
      if (code != 'P')
 {
   if (((enum rtx_code) (x)->code) == CONST_INT || ((enum rtx_code) (x)->code) == CONST_DOUBLE)
     {
       if ((ix86_asm_dialect) == ASM_ATT)
  putc_unlocked ('$', file);
     }
   else if (((enum rtx_code) (x)->code) == CONST || ((enum rtx_code) (x)->code) == SYMBOL_REF
     || ((enum rtx_code) (x)->code) == LABEL_REF)
     {
       if ((ix86_asm_dialect) == ASM_ATT)
  putc_unlocked ('$', file);
       else
  fputs_unlocked ("OFFSET FLAT:", file);
     }
 }
      if (((enum rtx_code) (x)->code) == CONST_INT)
 fprintf (file, "%ld", ((x)->u.hwint[0]));
      else if (flag_pic)
 output_pic_addr_const (file, x, code);
      else
 output_addr_const (file, x);
    }
}
void
print_operand_address (FILE *file, rtx addr)
{
  struct ix86_address parts;
  rtx base, index, disp;
  int scale;
  if (! ix86_decompose_address (addr, &parts))
    fancy_abort ("gcc.c", 695756, "?");
  base = parts.base;
  index = parts.index;
  disp = parts.disp;
  scale = parts.scale;
  switch (parts.seg)
    {
    case SEG_DEFAULT:
      break;
    case SEG_FS:
    case SEG_GS:
      if (""[0] == 0)
 putc_unlocked ('%', file);
      fputs_unlocked ((parts.seg == SEG_FS ? "fs:" : "gs:"), file);
      break;
    default:
      fancy_abort ("gcc.c", 695774, "?");
    }
  if (!base && !index)
    {
      if (((enum rtx_code) (disp)->code) == CONST_INT)
 {
   if ((ix86_asm_dialect) == ASM_INTEL && parts.seg == SEG_DEFAULT)
     {
       if (""[0] == 0)
  putc_unlocked ('%', file);
       fputs_unlocked ("ds:", file);
     }
   fprintf (file, "%ld", ((disp)->u.hwint[0]));
 }
      else if (flag_pic)
 output_pic_addr_const (file, disp, 0);
      else
 output_addr_const (file, disp);
      if (0
   && ((((enum rtx_code) (disp)->code) == SYMBOL_REF
        && ! tls_symbolic_operand (disp, ((enum machine_mode) (disp)->mode)))
       || ((enum rtx_code) (disp)->code) == LABEL_REF
       || (((enum rtx_code) (disp)->code) == CONST
    && ((enum rtx_code) ((((disp)->u.fld[0]).rtx1))->code) == PLUS
    && (((enum rtx_code) (((((((disp)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == SYMBOL_REF
        || ((enum rtx_code) (((((((disp)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == LABEL_REF)
    && ((enum rtx_code) (((((((disp)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)))
 fputs_unlocked ("(%rip)", file);
    }
  else
    {
      if ((ix86_asm_dialect) == ASM_ATT)
 {
   if (disp)
     {
       if (flag_pic)
  output_pic_addr_const (file, disp, 0);
       else if (((enum rtx_code) (disp)->code) == LABEL_REF)
  output_asm_label (disp);
       else
  output_addr_const (file, disp);
     }
   putc_unlocked ('(', file);
   if (base)
     print_reg (base, 0, file);
   if (index)
     {
       putc_unlocked (',', file);
       print_reg (index, 0, file);
       if (scale != 1)
  fprintf (file, ",%d", scale);
     }
   putc_unlocked (')', file);
 }
      else
 {
   rtx offset = (rtx) 0;
   if (disp)
     {
       if (((enum rtx_code) (disp)->code) == CONST
    && ((enum rtx_code) ((((disp)->u.fld[0]).rtx1))->code) == PLUS
    && ((enum rtx_code) (((((((disp)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
  {
    offset = ((((((disp)->u.fld[0]).rtx1))->u.fld[1]).rtx1);
    disp = gen_rtx_fmt_e (CONST, (VOIDmode), (((((((disp)->u.fld[0]).rtx1))->u.fld[0]).rtx1)))
                              ;
  }
       if (flag_pic)
  output_pic_addr_const (file, disp, 0);
       else if (((enum rtx_code) (disp)->code) == LABEL_REF)
  output_asm_label (disp);
       else if (((enum rtx_code) (disp)->code) == CONST_INT)
  offset = disp;
       else
  output_addr_const (file, disp);
     }
   putc_unlocked ('[', file);
   if (base)
     {
       print_reg (base, 0, file);
       if (offset)
  {
    if (((offset)->u.hwint[0]) >= 0)
      putc_unlocked ('+', file);
    fprintf (file, "%ld", ((offset)->u.hwint[0]));
  }
     }
   else if (offset)
     fprintf (file, "%ld", ((offset)->u.hwint[0]));
   else
     putc_unlocked ('0', file);
   if (index)
     {
       putc_unlocked ('+', file);
       print_reg (index, 0, file);
       if (scale != 1)
  fprintf (file, "*%d", scale);
     }
   putc_unlocked (']', file);
 }
    }
}
unsigned char
output_addr_const_extra (FILE *file, rtx x)
{
  rtx op;
  if (((enum rtx_code) (x)->code) != UNSPEC)
    return 0;
  op = (((((x)->u.fld[0]).rtvec1))->elem[0]);
  switch ((((x)->u.fld[1]).rtint))
    {
    case 3:
      output_addr_const (file, op);
      fputs_unlocked ("@GOTTPOFF", file);
      break;
    case 4:
      output_addr_const (file, op);
      fputs_unlocked ("@TPOFF", file);
      break;
    case 5:
      output_addr_const (file, op);
      if (0)
 fputs_unlocked ("@TPOFF", file);
      else
 fputs_unlocked ("@NTPOFF", file);
      break;
    case 6:
      output_addr_const (file, op);
      fputs_unlocked ("@DTPOFF", file);
      break;
    case 7:
      output_addr_const (file, op);
      if (0)
 fputs_unlocked ("@GOTTPOFF(%rip)", file);
      else
 fputs_unlocked ("@GOTNTPOFF", file);
      break;
    case 8:
      output_addr_const (file, op);
      fputs_unlocked ("@INDNTPOFF", file);
      break;
    default:
      return 0;
    }
  return 1;
}
void
split_di (rtx operands[], int num, rtx lo_half[], rtx hi_half[])
{
  while (num--)
    {
      rtx op = operands[num];
      if (((enum rtx_code) (op)->code) == MEM)
 {
   lo_half[num] = adjust_address_1 (op, SImode, 0, 1, 1);
   hi_half[num] = adjust_address_1 (op, SImode, 4, 1, 1);
 }
      else
 {
   lo_half[num] = simplify_gen_subreg (SImode, op,
           ((enum machine_mode) (op)->mode) == VOIDmode
           ? DImode : ((enum machine_mode) (op)->mode), 0);
   hi_half[num] = simplify_gen_subreg (SImode, op,
           ((enum machine_mode) (op)->mode) == VOIDmode
           ? DImode : ((enum machine_mode) (op)->mode), 4);
 }
    }
}
void
split_ti (rtx operands[], int num, rtx lo_half[], rtx hi_half[])
{
  while (num--)
    {
      rtx op = operands[num];
      if (((enum rtx_code) (op)->code) == MEM)
 {
   lo_half[num] = adjust_address_1 (op, DImode, 0, 1, 1);
   hi_half[num] = adjust_address_1 (op, DImode, 8, 1, 1);
 }
      else
 {
   lo_half[num] = simplify_gen_subreg (DImode, op, TImode, 0);
   hi_half[num] = simplify_gen_subreg (DImode, op, TImode, 8);
 }
    }
}
const char *
output_387_binary_op (rtx insn, rtx *operands)
{
  static char buf[30];
  const char *p;
  const char *ssep;
  int is_sse = ((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) | ((((enum rtx_code) (operands[1])->code) == REG) && ((((((operands[1])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[1])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) | ((((enum rtx_code) (operands[2])->code) == REG) && ((((((operands[2])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[2])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[2])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[2])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))));
  switch (((enum rtx_code) (operands[3])->code))
    {
    case PLUS:
      if (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_INT
   || mode_class[((enum machine_mode) (operands[2])->mode)] == MODE_INT)
 p = "fiadd";
      else
 p = "fadd";
      ssep = "add";
      break;
    case MINUS:
      if (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_INT
   || mode_class[((enum machine_mode) (operands[2])->mode)] == MODE_INT)
 p = "fisub";
      else
 p = "fsub";
      ssep = "sub";
      break;
    case MULT:
      if (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_INT
   || mode_class[((enum machine_mode) (operands[2])->mode)] == MODE_INT)
 p = "fimul";
      else
 p = "fmul";
      ssep = "mul";
      break;
    case DIV:
      if (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_INT
   || mode_class[((enum machine_mode) (operands[2])->mode)] == MODE_INT)
 p = "fidiv";
      else
 p = "fdiv";
      ssep = "div";
      break;
    default:
      fancy_abort ("gcc.c", 696077, "?");
    }
  if (is_sse)
   {
      strcpy (buf, ssep);
      if (((enum machine_mode) (operands[0])->mode) == SFmode)
 strcat (buf, "ss\t{%2, %0|%0, %2}");
      else
 strcat (buf, "sd\t{%2, %0|%0, %2}");
      return buf;
   }
  strcpy (buf, p);
  switch (((enum rtx_code) (operands[3])->code))
    {
    case MULT:
    case PLUS:
      if ((((enum rtx_code) (operands[2])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) == (((operands[2])->u.fld[0]).rtuint))
 {
   rtx temp = operands[2];
   operands[2] = operands[1];
   operands[1] = temp;
 }
      if (((enum rtx_code) (operands[2])->code) == MEM)
 {
   p = "%z2\t%2";
   break;
 }
      if (find_regno_note (insn, REG_DEAD, (((operands[2])->u.fld[0]).rtuint)))
 {
   if (((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) == 8))
     p = "p\t{%0, %2|%2, %0}";
   else
     p = "p\t{%2, %0|%0, %2}";
   break;
 }
      if (((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) == 8))
 p = "\t{%y2, %0|%0, %y2}";
      else
 p = "\t{%2, %0|%0, %2}";
      break;
    case MINUS:
    case DIV:
      if (((enum rtx_code) (operands[1])->code) == MEM)
 {
   p = "r%z1\t%1";
   break;
 }
      if (((enum rtx_code) (operands[2])->code) == MEM)
 {
   p = "%z2\t%2";
   break;
 }
      if (find_regno_note (insn, REG_DEAD, (((operands[2])->u.fld[0]).rtuint)))
 {
   if (((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) == 8))
     p = "{p\t%0, %2|rp\t%2, %0}";
   else
     p = "{rp\t%2, %0|p\t%0, %2}";
   break;
 }
      if (find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
 {
   if (((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) == 8))
     p = "{rp\t%0, %1|p\t%1, %0}";
   else
     p = "{p\t%1, %0|rp\t%0, %1}";
   break;
 }
      if (((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) == 8))
 {
   if (((((enum rtx_code) (operands[1])->code) == REG) && (((operands[1])->u.fld[0]).rtuint) == 8))
     p = "\t{%y2, %0|%0, %y2}";
   else
     p = "r\t{%y1, %0|%0, %y1}";
   break;
 }
      else if (((((enum rtx_code) (operands[1])->code) == REG) && (((operands[1])->u.fld[0]).rtuint) == 8))
 {
   p = "{\t%1, %0|r\t%0, %1}";
 }
      else
 {
   p = "{r\t%2, %0|\t%0, %2}";
 }
      break;
    default:
      fancy_abort ("gcc.c", 696212, "?");
    }
  strcat (buf, p);
  return buf;
}
void
emit_i387_cw_initialization (rtx normal, rtx round_down)
{
  rtx reg = gen_reg_rtx (HImode);
  emit_insn (gen_x86_fnstcw_1 (normal));
  emit_move_insn (reg, normal);
  if (!(x86_partial_reg_stall & (1 << ix86_tune)) && !optimize_size
      && !0)
    emit_insn (gen_movsi_insv_1 (reg, gen_rtx_CONST_INT (VOIDmode, (long) (0xc))));
  else
    emit_insn (gen_iorhi3 (reg, reg, gen_rtx_CONST_INT (VOIDmode, (long) (0xc00))));
  emit_move_insn (round_down, reg);
}
const char *
output_fix_trunc (rtx insn, rtx *operands)
{
  int stack_top_dies = find_regno_note (insn, REG_DEAD, 8) != 0;
  int dimode_p = ((enum machine_mode) (operands[0])->mode) == DImode;
  if (dimode_p && !stack_top_dies)
    output_asm_insn ("fld\t%y1", operands);
  if (!((((enum rtx_code) (operands[1])->code) == REG) && (((operands[1])->u.fld[0]).rtuint) == 8))
    fancy_abort ("gcc.c", 696254, "?");
  if (((enum rtx_code) (operands[0])->code) != MEM)
    fancy_abort ("gcc.c", 696257, "?");
  output_asm_insn ("fldcw\t%3", operands);
  if (stack_top_dies || dimode_p)
    output_asm_insn ("fistp%z0\t%0", operands);
  else
    output_asm_insn ("fist%z0\t%0", operands);
  output_asm_insn ("fldcw\t%2", operands);
  return "";
}
const char *
output_fp_compare (rtx insn, rtx *operands, int eflags_p, int unordered_p)
{
  int stack_top_dies;
  rtx cmp_op0 = operands[0];
  rtx cmp_op1 = operands[1];
  int is_sse = ((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) | ((((enum rtx_code) (operands[1])->code) == REG) && ((((((operands[1])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[1])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[1])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))));
  if (eflags_p == 2)
    {
      cmp_op0 = cmp_op1;
      cmp_op1 = operands[2];
    }
  if (is_sse)
    {
      if (((enum machine_mode) (operands[0])->mode) == SFmode)
 if (unordered_p)
   return "ucomiss\t{%1, %0|%0, %1}";
 else
   return "comiss\t{%1, %0|%0, %1}";
      else
 if (unordered_p)
   return "ucomisd\t{%1, %0|%0, %1}";
 else
   return "comisd\t{%1, %0|%0, %1}";
    }
  if (! ((((enum rtx_code) (cmp_op0)->code) == REG) && (((cmp_op0)->u.fld[0]).rtuint) == 8))
    fancy_abort ("gcc.c", 696301, "?");
  stack_top_dies = find_regno_note (insn, REG_DEAD, 8) != 0;
  if (((((enum rtx_code) (cmp_op1)->code) == REG) && (((cmp_op1)->u.fld[0]).rtuint) >= 8 && (((cmp_op1)->u.fld[0]).rtuint) <= (8 + 7))
      && stack_top_dies
      && find_regno_note (insn, REG_DEAD, (((cmp_op1)->u.fld[0]).rtuint))
      && (((cmp_op1)->u.fld[0]).rtuint) != 8)
    {
      if (eflags_p == 1)
 {
   if (unordered_p)
     output_asm_insn ("fucomip\t{%y1, %0|%0, %y1}", operands);
   else
     output_asm_insn ("fcomip\t{%y1, %0|%0, %y1}", operands);
   return "fstp\t%y0";
 }
      else
 {
   if (eflags_p == 2)
     {
       if (unordered_p)
  return "fucompp\n\tfnstsw\t%0";
       else
  return "fcompp\n\tfnstsw\t%0";
     }
   else
     {
       if (unordered_p)
  return "fucompp";
       else
  return "fcompp";
     }
 }
    }
  else
    {
      static const char * const alt[24] =
      {
 "fcom%z1\t%y1",
 "fcomp%z1\t%y1",
 "fucom%z1\t%y1",
 "fucomp%z1\t%y1",
 "ficom%z1\t%y1",
 "ficomp%z1\t%y1",
 ((void *)0),
 ((void *)0),
 "fcomi\t{%y1, %0|%0, %y1}",
 "fcomip\t{%y1, %0|%0, %y1}",
 "fucomi\t{%y1, %0|%0, %y1}",
 "fucomip\t{%y1, %0|%0, %y1}",
 ((void *)0),
 ((void *)0),
 ((void *)0),
 ((void *)0),
 "fcom%z2\t%y2\n\tfnstsw\t%0",
 "fcomp%z2\t%y2\n\tfnstsw\t%0",
 "fucom%z2\t%y2\n\tfnstsw\t%0",
 "fucomp%z2\t%y2\n\tfnstsw\t%0",
 "ficom%z2\t%y2\n\tfnstsw\t%0",
 "ficomp%z2\t%y2\n\tfnstsw\t%0",
 ((void *)0),
 ((void *)0)
      };
      int mask;
      const char *ret;
      mask = eflags_p << 3;
      mask |= (mode_class[((enum machine_mode) (operands[1])->mode)] == MODE_INT) << 2;
      mask |= unordered_p << 1;
      mask |= stack_top_dies;
      if (mask >= 24)
 fancy_abort ("gcc.c", 696388, "?");
      ret = alt[mask];
      if (ret == ((void *)0))
 fancy_abort ("gcc.c", 696391, "?");
      return ret;
    }
}
void
ix86_output_addr_vec_elt (FILE *file, int value1)
{
  const char *directive1 = "\t.long\t";
  if (0)
    {
      directive1 = "\t.quad\t";
    }
  fprintf (file, "%s%s%d\n", directive1, ".L", value1);
}
void
ix86_output_addr_diff_elt (FILE *file, int value1, int rel)
{
  if (0)
    fprintf (file, "%s%s%d-%s%d\n",
      "\t.long\t", ".L", value1, ".L", rel);
  else if (1)
    fprintf (file, "%s%s%d@GOTOFF\n", "\t.long\t", ".L", value1);
  else
    asm_fprintf (file, "%s%U%s+[.-%s%d]\n",
   "\t.long\t", "_GLOBAL_OFFSET_TABLE_", ".L", value1);
}
void
ix86_expand_clear (rtx dest)
{
  rtx tmp;
  if (!reload_completed)
    fancy_abort ("gcc.c", 696445, "?");
  if (((unsigned short) mode_size[((enum machine_mode) (dest)->mode)]) < 4)
    dest = gen_rtx_REG (SImode, (((dest)->u.fld[0]).rtuint));
  tmp = gen_rtx_fmt_ee (SET, (VOIDmode), (dest), ((const_int_rtx[64])));
  if (reload_completed && (!(x86_use_mov0 & (1 << ix86_tune)) || optimize_size))
    {
      rtx clob = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_REG (CCmode, 17)));
      tmp = gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, tmp, clob)));
    }
  emit_insn (tmp);
}
static rtx
maybe_get_pool_constant (rtx x)
{
  x = ix86_delegitimize_address ((((x)->u.fld[0]).rtx1));
  if (((enum rtx_code) (x)->code) == SYMBOL_REF && (((x))->unchanging))
    return get_pool_constant (x);
  return (rtx) 0;
}
void
ix86_expand_move (enum machine_mode mode, rtx operands[])
{
  int strict = (reload_in_progress || reload_completed);
  rtx op0, op1;
  enum tls_model model;
  op0 = operands[0];
  op1 = operands[1];
  model = tls_symbolic_operand (op1, (0 ? DImode : SImode));
  if (model)
    {
      op1 = legitimize_tls_address (op1, model, 1);
      op1 = force_operand (op1, op0);
      if (op1 == op0)
 return;
    }
  if (flag_pic && mode == (0 ? DImode : SImode) && symbolic_operand (op1, (0 ? DImode : SImode)))
    {
      if (((enum rtx_code) (op0)->code) == MEM)
 op1 = force_reg ((0 ? DImode : SImode), op1);
      else
 {
   rtx temp = op0;
   if (((enum rtx_code) (temp)->code) != REG)
     temp = gen_reg_rtx ((0 ? DImode : SImode));
   temp = legitimize_pic_address (op1, temp);
   if (temp == op0)
     return;
   op1 = temp;
 }
    }
  else
    {
      if (((enum rtx_code) (op0)->code) == MEM
   && ((0 ? (((((unsigned short) mode_size[mode])) + 7) & (-8)) : (((((unsigned short) mode_size[mode])) + 1) & (-2))) != ((unsigned short) mode_size[mode])
       || !push_operand (op0, mode))
   && ((enum rtx_code) (op1)->code) == MEM)
 op1 = force_reg (mode, op1);
      if (push_operand (op0, mode)
   && ! general_no_elim_operand (op1, mode))
 op1 = copy_to_mode_reg (mode, op1);
      if (0 && mode == DImode
   && immediate_operand (op1, mode)
   && !x86_64_zero_extended_value (op1)
   && !register_operand (op0, mode)
   && optimize && !reload_completed && !reload_in_progress)
 op1 = copy_to_mode_reg (mode, op1);
      if ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
 {
   if (strict)
     ;
   else if (((enum rtx_code) (op1)->code) == CONST_DOUBLE)
     {
       op1 = validize_mem (force_const_mem (mode, op1));
       if (!register_operand (op0, mode))
  {
    rtx temp = gen_reg_rtx (mode);
    emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (temp), (op1)));
    emit_move_insn (op0, temp);
    return;
  }
     }
 }
    }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (op0), (op1)));
}
void
ix86_expand_vector_move (enum machine_mode mode, rtx operands[])
{
  if ((reload_in_progress | reload_completed) == 0
      && register_operand (operands[0], mode)
      && ((rtx_class[(int) (((enum rtx_code) (operands[1])->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (operands[1])->code) == CONST_VECTOR) && operands[1] != (const_tiny_rtx[0][(int) (mode)]))
    operands[1] = validize_mem (force_const_mem (mode, operands[1]));
  if (!no_new_pseudos
      && !register_operand (operands[0], mode)
      && !register_operand (operands[1], mode))
    {
      rtx temp = force_reg (((enum machine_mode) (operands[1])->mode), operands[1]);
      emit_move_insn (operands[0], temp);
      return;
    }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (operands[1])));
}
void
ix86_expand_binary_operator (enum rtx_code code, enum machine_mode mode,
        rtx operands[])
{
  int matching_memory;
  rtx src1, src2, dst, op, clob;
  dst = operands[0];
  src1 = operands[1];
  src2 = operands[2];
  if ((rtx_class[(int) (code)]) == RTX_COMM_ARITH
      && (rtx_equal_p (dst, src2)
   || immediate_operand (src1, mode)))
    {
      rtx temp = src1;
      src1 = src2;
      src2 = temp;
    }
  matching_memory = 0;
  if (((enum rtx_code) (dst)->code) == MEM)
    {
      if (rtx_equal_p (dst, src1))
 matching_memory = 1;
      else if ((rtx_class[(int) (code)]) == RTX_COMM_ARITH
        && rtx_equal_p (dst, src2))
 matching_memory = 2;
      else
 dst = gen_reg_rtx (mode);
    }
  if (((enum rtx_code) (src1)->code) == MEM && ((enum rtx_code) (src2)->code) == MEM)
    {
      if (matching_memory != 2)
 src2 = force_reg (mode, src2);
      else
 src1 = force_reg (mode, src1);
    }
  if ((((rtx_class[(int) (((enum rtx_code) (src1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (src1)->code) == CONST_VECTOR)
       || (!matching_memory && ((enum rtx_code) (src1)->code) == MEM))
      && (rtx_class[(int) (code)]) != RTX_COMM_ARITH)
    src1 = force_reg (mode, src1);
  if (optimize && ! no_new_pseudos)
    {
      if (((enum rtx_code) (dst)->code) == MEM)
 dst = gen_reg_rtx (mode);
      if (((enum rtx_code) (src1)->code) == MEM)
 src1 = force_reg (mode, src1);
      if (((enum rtx_code) (src2)->code) == MEM)
 src2 = force_reg (mode, src2);
    }
  op = gen_rtx_fmt_ee (SET, (VOIDmode), (dst), (gen_rtx_fmt_ee (code, mode, src1, src2)));
  if (reload_in_progress)
    {
      if (code != PLUS)
 fancy_abort ("gcc.c", 696673, "?");
      emit_insn (op);
    }
  else
    {
      clob = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_REG (CCmode, 17)));
      emit_insn (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, op, clob))));
    }
  if (dst != operands[0])
    emit_move_insn (operands[0], dst);
}
int
ix86_binary_operator_ok (enum rtx_code code,
    enum machine_mode mode ,
    rtx operands[3])
{
  if (((enum rtx_code) (operands[1])->code) == MEM && ((enum rtx_code) (operands[2])->code) == MEM)
    return 0;
  if (((rtx_class[(int) (((enum rtx_code) (operands[1])->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (operands[1])->code) == CONST_VECTOR) && (rtx_class[(int) (code)]) != RTX_COMM_ARITH)
    return 0;
  if (((enum rtx_code) (operands[0])->code) == MEM
      && ! (rtx_equal_p (operands[0], operands[1])
     || ((rtx_class[(int) (code)]) == RTX_COMM_ARITH
  && rtx_equal_p (operands[0], operands[2]))))
    return 0;
  if (((enum rtx_code) (operands[1])->code) == MEM
      && (rtx_class[(int) (code)]) != RTX_COMM_ARITH
      && ! rtx_equal_p (operands[0], operands[1]))
    return 0;
  return 1;
}
void
ix86_expand_unary_operator (enum rtx_code code, enum machine_mode mode,
       rtx operands[])
{
  int matching_memory;
  rtx src, dst, op, clob;
  dst = operands[0];
  src = operands[1];
  matching_memory = 0;
  if (((enum rtx_code) (dst)->code) == MEM)
    {
      if (rtx_equal_p (dst, src))
 matching_memory = 1;
      else
 dst = gen_reg_rtx (mode);
    }
  if (!matching_memory && ((enum rtx_code) (src)->code) == MEM)
    src = force_reg (mode, src);
  if (optimize && ! no_new_pseudos)
    {
      if (((enum rtx_code) (dst)->code) == MEM)
 dst = gen_reg_rtx (mode);
      if (((enum rtx_code) (src)->code) == MEM)
 src = force_reg (mode, src);
    }
  op = gen_rtx_fmt_ee (SET, (VOIDmode), (dst), (gen_rtx_fmt_e (code, mode, src)));
  if (reload_in_progress || code == NOT)
    {
      if (code != NOT)
        fancy_abort ("gcc.c", 696762, "?");
      emit_insn (op);
    }
  else
    {
      clob = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_REG (CCmode, 17)));
      emit_insn (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, op, clob))));
    }
  if (dst != operands[0])
    emit_move_insn (operands[0], dst);
}
int
ix86_unary_operator_ok (enum rtx_code code ,
   enum machine_mode mode ,
   rtx operands[2] )
{
  if ((((enum rtx_code) (operands[0])->code) == MEM
       || ((enum rtx_code) (operands[1])->code) == MEM)
      && ! rtx_equal_p (operands[0], operands[1]))
    return 0;
  return 1;
}
int
ix86_match_ccmode (rtx insn, enum machine_mode req_mode)
{
  rtx set;
  enum machine_mode set_mode;
  set = (((insn)->u.fld[5]).rtx1);
  if (((enum rtx_code) (set)->code) == PARALLEL)
    set = (((((set)->u.fld[0]).rtvec1))->elem[0]);
  if (((enum rtx_code) (set)->code) != SET)
    fancy_abort ("gcc.c", 696806, "?");
  if (((enum rtx_code) ((((set)->u.fld[1]).rtx1))->code) != COMPARE)
    fancy_abort ("gcc.c", 696808, "?");
  set_mode = ((enum machine_mode) ((((set)->u.fld[0]).rtx1))->mode);
  switch (set_mode)
    {
    case CCNOmode:
      if (req_mode != CCNOmode
   && (req_mode != CCmode
       || ((((((set)->u.fld[1]).rtx1))->u.fld[1]).rtx1) != (const_int_rtx[64])))
 return 0;
      break;
    case CCmode:
      if (req_mode == CCGCmode)
 return 0;
    case CCGCmode:
      if (req_mode == CCGOCmode || req_mode == CCNOmode)
 return 0;
    case CCGOCmode:
      if (req_mode == CCZmode)
 return 0;
    case CCZmode:
      break;
    default:
      fancy_abort ("gcc.c", 696835, "?");
    }
  return (((enum machine_mode) ((((set)->u.fld[1]).rtx1))->mode) == set_mode);
}
static rtx
ix86_expand_int_compare (enum rtx_code code, rtx op0, rtx op1)
{
  enum machine_mode cmpmode;
  rtx tmp, flags;
  cmpmode = ix86_cc_mode ((code), (op0), (op1));
  flags = gen_rtx_REG (cmpmode, 17);
  tmp = gen_rtx_fmt_ee (COMPARE, (cmpmode), (op0), (op1));
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (flags), (tmp)));
  return gen_rtx_fmt_ee (code, VOIDmode, flags, (const_int_rtx[64]));
}
enum machine_mode
ix86_fp_compare_mode (enum rtx_code code )
{
  return (target_flags & 0x00000010) ? CCFPUmode : CCFPmode;
}
enum machine_mode
ix86_cc_mode (enum rtx_code code, rtx op0, rtx op1)
{
  if (mode_class[((enum machine_mode) (op0)->mode)] == MODE_FLOAT)
    return ix86_fp_compare_mode (code);
  switch (code)
    {
    case EQ:
    case NE:
      return CCZmode;
    case GEU:
    case GTU:
    case LTU:
    case LEU:
      return CCmode;
    case GE:
    case LT:
      if (op1 == (const_int_rtx[64]))
 return CCGOCmode;
      else
 return CCGCmode;
    case GT:
    case LE:
      if (op1 == (const_int_rtx[64]))
 return CCNOmode;
      else
 return CCGCmode;
    case USE:
      return CCmode;
    default:
      fancy_abort ("gcc.c", 696917, "?");
    }
}
static unsigned char
ix86_fixed_condition_code_regs (unsigned int *p1, unsigned int *p2)
{
  *p1 = 17;
  *p2 = 18;
  return 1;
}
static enum machine_mode
ix86_cc_modes_compatible (enum machine_mode m1, enum machine_mode m2)
{
  if (m1 == m2)
    return m1;
  if (mode_class[m1] != MODE_CC || mode_class[m2] != MODE_CC)
    return VOIDmode;
  if ((m1 == CCGCmode && m2 == CCGOCmode)
      || (m1 == CCGOCmode && m2 == CCGCmode))
    return CCGCmode;
  switch (m1)
    {
    default:
      fancy_abort ("gcc.c", 696951, "?");
    case CCmode:
    case CCGCmode:
    case CCGOCmode:
    case CCNOmode:
    case CCZmode:
      switch (m2)
 {
 default:
   return VOIDmode;
 case CCmode:
 case CCGCmode:
 case CCGOCmode:
 case CCNOmode:
 case CCZmode:
   return CCmode;
 }
    case CCFPmode:
    case CCFPUmode:
      return VOIDmode;
    }
}
int
ix86_use_fcomi_compare (enum rtx_code code )
{
  enum rtx_code swapped_code = swap_condition (code);
  return ((ix86_fp_comparison_cost (code) == ix86_fp_comparison_fcomi_cost (code))
   || (ix86_fp_comparison_cost (swapped_code)
       == ix86_fp_comparison_fcomi_cost (swapped_code)));
}
static enum rtx_code
ix86_prepare_fp_compare_args (enum rtx_code code, rtx *pop0, rtx *pop1)
{
  enum machine_mode fpcmp_mode = ix86_fp_compare_mode (code);
  rtx op0 = *pop0, op1 = *pop1;
  enum machine_mode op_mode = ((enum machine_mode) (op0)->mode);
  int is_sse = ((((enum rtx_code) (op0)->code) == REG) && ((((((op0)->u.fld[0]).rtuint)) >= (20 + 1) && ((((op0)->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((op0)->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((op0)->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7)))) | ((((enum rtx_code) (op1)->code) == REG) && ((((((op1)->u.fld[0]).rtuint)) >= (20 + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((op1)->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((op1)->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))));
  if (!is_sse
      && (fpcmp_mode == CCFPUmode
   || op_mode == XFmode
   || ix86_use_fcomi_compare (code)))
    {
      op0 = force_reg (op_mode, op0);
      op1 = force_reg (op_mode, op1);
    }
  else
    {
      if (standard_80387_constant_p (op0) == 0
   || (((enum rtx_code) (op0)->code) == MEM
       && ! (standard_80387_constant_p (op1) == 0
      || ((enum rtx_code) (op1)->code) == MEM)))
 {
   rtx tmp;
   tmp = op0, op0 = op1, op1 = tmp;
   code = swap_condition (code);
 }
      if (((enum rtx_code) (op0)->code) != REG)
 op0 = force_reg (op_mode, op0);
      if (((rtx_class[(int) (((enum rtx_code) (op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (op1)->code) == CONST_VECTOR))
 {
   if (standard_80387_constant_p (op1))
     op1 = force_reg (op_mode, op1);
   else
     op1 = validize_mem (force_const_mem (op_mode, op1));
 }
    }
  if (ix86_fp_comparison_cost (code)
      > ix86_fp_comparison_cost (swap_condition (code))
      && (((enum rtx_code) (op1)->code) == REG || !no_new_pseudos))
    {
      rtx tmp;
      tmp = op0, op0 = op1, op1 = tmp;
      code = swap_condition (code);
      if (((enum rtx_code) (op0)->code) != REG)
 op0 = force_reg (op_mode, op0);
    }
  *pop0 = op0;
  *pop1 = op1;
  return code;
}
static enum rtx_code
ix86_fp_compare_code_to_integer (enum rtx_code code)
{
  switch (code)
    {
    case GT:
      return GTU;
    case GE:
      return GEU;
    case ORDERED:
    case UNORDERED:
      return code;
      break;
    case UNEQ:
      return EQ;
      break;
    case UNLT:
      return LTU;
      break;
    case UNLE:
      return LEU;
      break;
    case LTGT:
      return NE;
      break;
    default:
      return UNKNOWN;
    }
}
static void
ix86_fp_comparison_codes (enum rtx_code code, enum rtx_code *bypass_code,
     enum rtx_code *first_code,
     enum rtx_code *second_code)
{
  *first_code = code;
  *bypass_code = NIL;
  *second_code = NIL;
  switch (code)
    {
    case GT:
    case GE:
    case ORDERED:
    case UNORDERED:
    case UNEQ:
    case UNLT:
    case UNLE:
    case LTGT:
      break;
    case LT:
      *first_code = UNLT;
      *bypass_code = UNORDERED;
      break;
    case LE:
      *first_code = UNLE;
      *bypass_code = UNORDERED;
      break;
    case EQ:
      *first_code = UNEQ;
      *bypass_code = UNORDERED;
      break;
    case NE:
      *first_code = LTGT;
      *second_code = UNORDERED;
      break;
    case UNGE:
      *first_code = GE;
      *second_code = UNORDERED;
      break;
    case UNGT:
      *first_code = GT;
      *second_code = UNORDERED;
      break;
    default:
      fancy_abort ("gcc.c", 697150, "?");
    }
  if (!(target_flags & 0x00000010))
    {
      *second_code = NIL;
      *bypass_code = NIL;
    }
}
static int
ix86_fp_comparison_arithmetics_cost (enum rtx_code code)
{
  if (!(target_flags & 0x00000010))
    return 4;
  switch (code)
    {
    case UNLE:
    case UNLT:
    case LTGT:
    case GT:
    case GE:
    case UNORDERED:
    case ORDERED:
    case UNEQ:
      return 4;
      break;
    case LT:
    case NE:
    case EQ:
    case UNGE:
      return 5;
      break;
    case LE:
    case UNGT:
      return 6;
      break;
    default:
      fancy_abort ("gcc.c", 697192, "?");
    }
}
static int
ix86_fp_comparison_fcomi_cost (enum rtx_code code)
{
  enum rtx_code bypass_code, first_code, second_code;
  if (!((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)))
    return 1024;
  ix86_fp_comparison_codes (code, &bypass_code, &first_code, &second_code);
  return (bypass_code != NIL || second_code != NIL) + 2;
}
static int
ix86_fp_comparison_sahf_cost (enum rtx_code code)
{
  enum rtx_code bypass_code, first_code, second_code;
  if (!((x86_use_sahf & (1 << ix86_tune)) && !0) && !optimize_size)
    return 1024;
  ix86_fp_comparison_codes (code, &bypass_code, &first_code, &second_code);
  return (bypass_code != NIL || second_code != NIL) + 3;
}
static int
ix86_fp_comparison_cost (enum rtx_code code)
{
  int fcomi_cost, sahf_cost, arithmetics_cost = 1024;
  int min;
  fcomi_cost = ix86_fp_comparison_fcomi_cost (code);
  sahf_cost = ix86_fp_comparison_sahf_cost (code);
  min = arithmetics_cost = ix86_fp_comparison_arithmetics_cost (code);
  if (min > sahf_cost)
    min = sahf_cost;
  if (min > fcomi_cost)
    min = fcomi_cost;
  return min;
}
static rtx
ix86_expand_fp_compare (enum rtx_code code, rtx op0, rtx op1, rtx scratch,
   rtx *second_test, rtx *bypass_test)
{
  enum machine_mode fpcmp_mode, intcmp_mode;
  rtx tmp, tmp2;
  int cost = ix86_fp_comparison_cost (code);
  enum rtx_code bypass_code, first_code, second_code;
  fpcmp_mode = ix86_fp_compare_mode (code);
  code = ix86_prepare_fp_compare_args (code, &op0, &op1);
  if (second_test)
    *second_test = (rtx) 0;
  if (bypass_test)
    *bypass_test = (rtx) 0;
  ix86_fp_comparison_codes (code, &bypass_code, &first_code, &second_code);
  if ((bypass_code == NIL || bypass_test)
      && (second_code == NIL || second_test)
      && ix86_fp_comparison_arithmetics_cost (code) > cost)
    {
      if (((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)))
 {
   tmp = gen_rtx_fmt_ee (COMPARE, (fpcmp_mode), (op0), (op1));
   tmp = gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_REG (fpcmp_mode, 17)), (tmp))
            ;
   emit_insn (tmp);
 }
      else
 {
   tmp = gen_rtx_fmt_ee (COMPARE, (fpcmp_mode), (op0), (op1));
   tmp2 = gen_rtx_fmt_Ei (UNSPEC, (HImode), (gen_rtvec (1, tmp)), (24));
   if (!scratch)
     scratch = gen_reg_rtx (HImode);
   emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (scratch), (tmp2)));
   emit_insn (gen_x86_sahf_1 (scratch));
 }
      intcmp_mode = fpcmp_mode;
      code = first_code;
      if (bypass_code != NIL)
 *bypass_test = gen_rtx_fmt_ee (bypass_code, VOIDmode,
           gen_rtx_REG (intcmp_mode, 17),
           (const_int_rtx[64]));
      if (second_code != NIL)
 *second_test = gen_rtx_fmt_ee (second_code, VOIDmode,
           gen_rtx_REG (intcmp_mode, 17),
           (const_int_rtx[64]));
    }
  else
    {
      tmp = gen_rtx_fmt_ee (COMPARE, (fpcmp_mode), (op0), (op1));
      tmp2 = gen_rtx_fmt_Ei (UNSPEC, (HImode), (gen_rtvec (1, tmp)), (24));
      if (!scratch)
 scratch = gen_reg_rtx (HImode);
      emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (scratch), (tmp2)));
      intcmp_mode = CCNOmode;
      switch (code)
 {
 case GT:
 case UNGT:
   if (code == GT || !(target_flags & 0x00000010))
     {
       emit_insn (gen_testqi_ext_ccno_0 (scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x45))));
       code = EQ;
     }
   else
     {
       emit_insn (gen_andqi_ext_0 (scratch, scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x45))));
       emit_insn (gen_addqi_ext_1 (scratch, scratch, (const_int_rtx[64 -1])));
       emit_insn (gen_cmpqi_ext_3 (scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x44))));
       intcmp_mode = CCmode;
       code = GEU;
     }
   break;
 case LT:
 case UNLT:
   if (code == LT && (target_flags & 0x00000010))
     {
       emit_insn (gen_andqi_ext_0 (scratch, scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x45))));
       emit_insn (gen_cmpqi_ext_3 (scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x01))));
       intcmp_mode = CCmode;
       code = EQ;
     }
   else
     {
       emit_insn (gen_testqi_ext_ccno_0 (scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x01))));
       code = NE;
     }
   break;
 case GE:
 case UNGE:
   if (code == GE || !(target_flags & 0x00000010))
     {
       emit_insn (gen_testqi_ext_ccno_0 (scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x05))));
       code = EQ;
     }
   else
     {
       emit_insn (gen_andqi_ext_0 (scratch, scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x45))));
       emit_insn (gen_xorqi_cc_ext_1 (scratch, scratch,
          gen_rtx_CONST_INT (VOIDmode, (long) (0x01))));
       code = NE;
     }
   break;
 case LE:
 case UNLE:
   if (code == LE && (target_flags & 0x00000010))
     {
       emit_insn (gen_andqi_ext_0 (scratch, scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x45))));
       emit_insn (gen_addqi_ext_1 (scratch, scratch, (const_int_rtx[64 -1])));
       emit_insn (gen_cmpqi_ext_3 (scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x40))));
       intcmp_mode = CCmode;
       code = LTU;
     }
   else
     {
       emit_insn (gen_testqi_ext_ccno_0 (scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x45))));
       code = NE;
     }
   break;
 case EQ:
 case UNEQ:
   if (code == EQ && (target_flags & 0x00000010))
     {
       emit_insn (gen_andqi_ext_0 (scratch, scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x45))));
       emit_insn (gen_cmpqi_ext_3 (scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x40))));
       intcmp_mode = CCmode;
       code = EQ;
     }
   else
     {
       emit_insn (gen_testqi_ext_ccno_0 (scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x40))));
       code = NE;
       break;
     }
   break;
 case NE:
 case LTGT:
   if (code == NE && (target_flags & 0x00000010))
     {
       emit_insn (gen_andqi_ext_0 (scratch, scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x45))));
       emit_insn (gen_xorqi_cc_ext_1 (scratch, scratch,
          gen_rtx_CONST_INT (VOIDmode, (long) (0x40))));
       code = NE;
     }
   else
     {
       emit_insn (gen_testqi_ext_ccno_0 (scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x40))));
       code = EQ;
     }
   break;
 case UNORDERED:
   emit_insn (gen_testqi_ext_ccno_0 (scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x04))));
   code = NE;
   break;
 case ORDERED:
   emit_insn (gen_testqi_ext_ccno_0 (scratch, gen_rtx_CONST_INT (VOIDmode, (long) (0x04))));
   code = EQ;
   break;
 default:
   fancy_abort ("gcc.c", 697419, "?");
 }
    }
  return gen_rtx_fmt_ee (code, VOIDmode,
    gen_rtx_REG (intcmp_mode, 17),
    (const_int_rtx[64]));
}
rtx
ix86_expand_compare (enum rtx_code code, rtx *second_test, rtx *bypass_test)
{
  rtx op0, op1, ret;
  op0 = ix86_compare_op0;
  op1 = ix86_compare_op1;
  if (second_test)
    *second_test = (rtx) 0;
  if (bypass_test)
    *bypass_test = (rtx) 0;
  if (mode_class[((enum machine_mode) (op0)->mode)] == MODE_FLOAT)
    ret = ix86_expand_fp_compare (code, op0, op1, (rtx) 0,
      second_test, bypass_test);
  else
    ret = ix86_expand_int_compare (code, op0, op1);
  return ret;
}
unsigned char
ix86_fp_jump_nontrivial_p (enum rtx_code code)
{
  enum rtx_code bypass_code, first_code, second_code;
  if (!((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)))
    return 1;
  ix86_fp_comparison_codes (code, &bypass_code, &first_code, &second_code);
  return bypass_code != NIL || second_code != NIL;
}
void
ix86_expand_branch (enum rtx_code code, rtx label)
{
  rtx tmp;
  switch (((enum machine_mode) (ix86_compare_op0)->mode))
    {
    case QImode:
    case HImode:
    case SImode:
      simple:
      tmp = ix86_expand_compare (code, ((void *)0), ((void *)0));
      tmp = gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (tmp), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (label))), ((global_rtl[GR_PC])))
             ;
      emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (tmp)));
      return;
    case SFmode:
    case DFmode:
    case XFmode:
      {
 rtvec vec;
 int use_fcomi;
 enum rtx_code bypass_code, first_code, second_code;
 code = ix86_prepare_fp_compare_args (code, &ix86_compare_op0,
          &ix86_compare_op1);
 ix86_fp_comparison_codes (code, &bypass_code, &first_code, &second_code);
 if (bypass_code == NIL && second_code == NIL
     && ((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)))
   {
     ix86_split_fp_branch (code, ix86_compare_op0, ix86_compare_op1,
      gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (label)),
      (global_rtl[GR_PC]), (rtx) 0);
   }
 else
   {
     tmp = gen_rtx_fmt_ee (code, VOIDmode,
      ix86_compare_op0, ix86_compare_op1);
     tmp = gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (tmp), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (label))), ((global_rtl[GR_PC])))
            ;
     tmp = gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (tmp));
     use_fcomi = ix86_use_fcomi_compare (code);
     vec = rtvec_alloc (3 + !use_fcomi);
     ((vec)->elem[0]) = tmp;
     ((vec)->elem[1])
       = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_REG (CCFPmode, 18)));
     ((vec)->elem[2])
       = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_REG (CCFPmode, 17)));
     if (! use_fcomi)
       ((vec)->elem[3])
  = gen_rtx_fmt_e (CLOBBER, (VOIDmode), (gen_rtx_fmt_0 (SCRATCH, (HImode))));
     emit_jump_insn (gen_rtx_fmt_E (PARALLEL, (VOIDmode), (vec)));
   }
 return;
      }
    case DImode:
      if (0)
 goto simple;
      {
 rtx lo[2], hi[2], label2;
 enum rtx_code code1, code2, code3;
 if (((rtx_class[(int) (((enum rtx_code) (ix86_compare_op0)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (ix86_compare_op0)->code) == CONST_VECTOR) && ! ((rtx_class[(int) (((enum rtx_code) (ix86_compare_op1)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (ix86_compare_op1)->code) == CONST_VECTOR))
   {
     tmp = ix86_compare_op0;
     ix86_compare_op0 = ix86_compare_op1;
     ix86_compare_op1 = tmp;
     code = swap_condition (code);
   }
 split_di (&ix86_compare_op0, 1, lo+0, hi+0);
 split_di (&ix86_compare_op1, 1, lo+1, hi+1);
 if ((code == EQ || code == NE)
     && (!optimize_size
         || hi[1] == (const_int_rtx[64]) || lo[1] == (const_int_rtx[64])))
   {
     rtx xor0, xor1;
     xor1 = hi[0];
     if (hi[1] != (const_int_rtx[64]))
       xor1 = expand_binop (SImode, (optab_table[OTI_xor]), xor1, hi[1],
       (rtx) 0, 0, OPTAB_WIDEN);
     xor0 = lo[0];
     if (lo[1] != (const_int_rtx[64]))
       xor0 = expand_binop (SImode, (optab_table[OTI_xor]), xor0, lo[1],
       (rtx) 0, 0, OPTAB_WIDEN);
     tmp = expand_binop (SImode, (optab_table[OTI_ior]), xor1, xor0,
    (rtx) 0, 0, OPTAB_WIDEN);
     ix86_compare_op0 = tmp;
     ix86_compare_op1 = (const_int_rtx[64]);
     ix86_expand_branch (code, label);
     return;
   }
 if (((enum rtx_code) (hi[1])->code) == CONST_INT && lo[1] == (const_int_rtx[64]))
   switch (code)
     {
     case LT: case LTU: case GE: case GEU:
       ix86_compare_op0 = hi[0];
       ix86_compare_op1 = hi[1];
       ix86_expand_branch (code, label);
       return;
     default:
       break;
     }
 label2 = gen_label_rtx ();
 code1 = code;
 code2 = swap_condition (code);
 code3 = unsigned_condition (code);
 switch (code)
   {
   case LT: case GT: case LTU: case GTU:
     break;
   case LE: code1 = LT; code2 = GT; break;
   case GE: code1 = GT; code2 = LT; break;
   case LEU: code1 = LTU; code2 = GTU; break;
   case GEU: code1 = GTU; code2 = LTU; break;
   case EQ: code1 = NIL; code2 = NE; break;
   case NE: code2 = NIL; break;
   default:
     fancy_abort ("gcc.c", 697613, "?");
   }
 ix86_compare_op0 = hi[0];
 ix86_compare_op1 = hi[1];
 if (code1 != NIL)
   ix86_expand_branch (code1, label);
 if (code2 != NIL)
   ix86_expand_branch (code2, label2);
 ix86_compare_op0 = lo[0];
 ix86_compare_op1 = lo[1];
 ix86_expand_branch (code3, label);
 if (code2 != NIL)
   emit_label (label2);
 return;
      }
    default:
      fancy_abort ("gcc.c", 697642, "?");
    }
}
void
ix86_split_fp_branch (enum rtx_code code, rtx op1, rtx op2,
        rtx target1, rtx target2, rtx tmp)
{
  rtx second, bypass;
  rtx label = (rtx) 0;
  rtx condition;
  int bypass_probability = -1, second_probability = -1, probability = -1;
  rtx i;
  if (target2 != (global_rtl[GR_PC]))
    {
      rtx tmp = target2;
      code = reverse_condition_maybe_unordered (code);
      target2 = target1;
      target1 = tmp;
    }
  condition = ix86_expand_fp_compare (code, op1, op2,
          tmp, &second, &bypass);
  if (split_branch_probability >= 0)
    {
      probability = split_branch_probability;
      if (bypass)
 bypass_probability = 1;
      if (second)
 second_probability = 1;
    }
  if (bypass != (rtx) 0)
    {
      label = gen_label_rtx ();
      i = emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (bypass), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (label))), ((global_rtl[GR_PC])))))
               );
      if (bypass_probability >= 0)
 (((i)->u.fld[8]).rtx1)
   = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PROB), (gen_rtx_CONST_INT (VOIDmode, (long) (bypass_probability))), ((((i)->u.fld[8]).rtx1)))
                        ;
    }
  i = emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (condition), (target1), (target2))))
                                       );
  if (probability >= 0)
    (((i)->u.fld[8]).rtx1)
      = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PROB), (gen_rtx_CONST_INT (VOIDmode, (long) (probability))), ((((i)->u.fld[8]).rtx1)))
                    ;
  if (second != (rtx) 0)
    {
      i = emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (second), (target1), (target2))))
                );
      if (second_probability >= 0)
 (((i)->u.fld[8]).rtx1)
   = gen_rtx_fmt_ee (EXPR_LIST, (REG_BR_PROB), (gen_rtx_CONST_INT (VOIDmode, (long) (second_probability))), ((((i)->u.fld[8]).rtx1)))
                        ;
    }
  if (label != (rtx) 0)
    emit_label (label);
}
int
ix86_expand_setcc (enum rtx_code code, rtx dest)
{
  rtx ret, tmp, tmpreg, equiv;
  rtx second_test, bypass_test;
  if (((enum machine_mode) (ix86_compare_op0)->mode) == DImode
      && !0)
    return 0;
  if (((enum machine_mode) (dest)->mode) != QImode)
    fancy_abort ("gcc.c", 697735, "?");
  ret = ix86_expand_compare (code, &second_test, &bypass_test);
  ((ret)->mode = (QImode));
  tmp = dest;
  tmpreg = dest;
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (tmp), (ret)));
  if (bypass_test || second_test)
    {
      rtx test = second_test;
      int bypass = 0;
      rtx tmp2 = gen_reg_rtx (QImode);
      if (bypass_test)
 {
   if (second_test)
     fancy_abort ("gcc.c", 697752, "?");
   test = bypass_test;
   bypass = 1;
   ((test)->code = (reverse_condition_maybe_unordered (((enum rtx_code) (test)->code))));
 }
      ((test)->mode = (QImode));
      emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (tmp2), (test)));
      if (bypass)
 emit_insn (gen_andqi3 (tmp, tmpreg, tmp2));
      else
 emit_insn (gen_iorqi3 (tmp, tmpreg, tmp2));
    }
  equiv = simplify_gen_relational (code, QImode,
       ((enum machine_mode) (ix86_compare_op0)->mode),
       ix86_compare_op0, ix86_compare_op1);
  set_unique_reg_note (get_last_insn (), REG_EQUAL, equiv);
  return 1;
}
static unsigned char
ix86_expand_carry_flag_compare (enum rtx_code code, rtx op0, rtx op1, rtx *pop)
{
  enum machine_mode mode =
    ((enum machine_mode) (op0)->mode) != VOIDmode ? ((enum machine_mode) (op0)->mode) : ((enum machine_mode) (op1)->mode);
  if ((mode == DImode && !0))
    return 0;
  if ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
    {
      rtx second_test = ((void *)0), bypass_test = ((void *)0);
      rtx compare_op, compare_seq;
      if (code == EQ || code == NE || code == UNEQ || code == LTGT
   || code == ORDERED || code == UNORDERED)
 return 0;
      if ((code == GT || code == UNLE || code == LE || code == UNGT)
   && !(target_flags & 0x00000010))
 {
   rtx tmp = op0;
   op0 = op1;
   op1 = tmp;
   code = swap_condition (code);
 }
      start_sequence ();
      compare_op = ix86_expand_fp_compare (code, op0, op1, (rtx) 0,
        &second_test, &bypass_test);
      compare_seq = get_insns ();
      end_sequence ();
      if (second_test || bypass_test)
 return 0;
      if (((enum machine_mode) ((((compare_op)->u.fld[0]).rtx1))->mode) == CCFPmode
   || ((enum machine_mode) ((((compare_op)->u.fld[0]).rtx1))->mode) == CCFPUmode)
        code = ix86_fp_compare_code_to_integer (((enum rtx_code) (compare_op)->code));
      else
 code = ((enum rtx_code) (compare_op)->code);
      if (code != LTU && code != GEU)
 return 0;
      emit_insn (compare_seq);
      *pop = compare_op;
      return 1;
    }
  if (!(mode_class[mode] == MODE_INT || mode_class[mode] == MODE_PARTIAL_INT || mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_VECTOR_INT))
    return 0;
  switch (code)
    {
    case LTU:
    case GEU:
      break;
    case EQ:
    case NE:
      if (op1 != (const_int_rtx[64]))
 return 0;
      op1 = (const_int_rtx[64 +1]);
      code = (code == EQ ? LTU : GEU);
      break;
    case GTU:
    case LEU:
      if (((enum rtx_code) (op1)->code) == CONST_INT)
 {
   op1 = gen_int_mode (((op1)->u.hwint[0]) + 1, ((enum machine_mode) (op0)->mode));
   if (op1 == (const_int_rtx[64])
       || !x86_64_immediate_operand (op1, ((enum machine_mode) (op1)->mode)))
     return 0;
   code = (code == GTU ? GEU : LTU);
 }
      else
 {
   rtx tmp = op1;
   op1 = op0;
   op0 = tmp;
   code = (code == GTU ? LTU : GEU);
 }
      break;
    case LT:
    case GE:
      if (mode == DImode || op1 != (const_int_rtx[64]))
 return 0;
      op1 = gen_int_mode (1 << (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1), mode);
      code = (code == LT ? GEU : LTU);
      break;
    case LE:
    case GT:
      if (mode == DImode || op1 != (const_int_rtx[64 -1]))
 return 0;
      op1 = gen_int_mode (1 << (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) - 1), mode);
      code = (code == LE ? GEU : LTU);
      break;
    default:
      return 0;
    }
  if (!nonimmediate_operand (op0, VOIDmode))
    {
      if (no_new_pseudos)
 return 0;
      op0 = force_reg (mode, op0);
    }
  ix86_compare_op0 = op0;
  ix86_compare_op1 = op1;
  *pop = ix86_expand_compare (code, ((void *)0), ((void *)0));
  if (((enum rtx_code) (*pop)->code) != LTU && ((enum rtx_code) (*pop)->code) != GEU)
    fancy_abort ("gcc.c", 697898, "?");
  return 1;
}
int
ix86_expand_int_movcc (rtx operands[])
{
  enum rtx_code code = ((enum rtx_code) (operands[1])->code), compare_code;
  rtx compare_seq, compare_op;
  rtx second_test, bypass_test;
  enum machine_mode mode = ((enum machine_mode) (operands[0])->mode);
  unsigned char sign_bit_compare_p = 0;;
  start_sequence ();
  compare_op = ix86_expand_compare (code, &second_test, &bypass_test);
  compare_seq = get_insns ();
  end_sequence ();
  compare_code = ((enum rtx_code) (compare_op)->code);
  if ((ix86_compare_op1 == (const_int_rtx[64]) && (code == GE || code == LT))
      || (ix86_compare_op1 == (const_int_rtx[64 -1]) && (code == GT || code == LE)))
    sign_bit_compare_p = 1;
  if ((mode != HImode || (x86_fast_prefix & (1 << ix86_tune)))
      && (mode != DImode || 0)
      && ((enum rtx_code) (operands[2])->code) == CONST_INT
      && ((enum rtx_code) (operands[3])->code) == CONST_INT)
    {
      rtx out = operands[0];
      long ct = ((operands[2])->u.hwint[0]);
      long cf = ((operands[3])->u.hwint[0]);
      long diff;
      diff = ct - cf;
      if (sign_bit_compare_p
   || ix86_expand_carry_flag_compare (code, ix86_compare_op0,
          ix86_compare_op1, &compare_op))
 {
   rtx tmp = out;
          if (!sign_bit_compare_p)
     {
       unsigned char fpcmp = 0;
       compare_code = ((enum rtx_code) (compare_op)->code);
       if (((enum machine_mode) ((((compare_op)->u.fld[0]).rtx1))->mode) == CCFPmode
    || ((enum machine_mode) ((((compare_op)->u.fld[0]).rtx1))->mode) == CCFPUmode)
  {
    fpcmp = 1;
    compare_code = ix86_fp_compare_code_to_integer (compare_code);
  }
       if (compare_code == LTU)
  {
    long tmp = ct;
    ct = cf;
    cf = tmp;
    compare_code = reverse_condition (compare_code);
    code = reverse_condition (code);
  }
       else
  {
    if (fpcmp)
      ((compare_op)->code = (reverse_condition_maybe_unordered (((enum rtx_code) (compare_op)->code))))
                                   ;
    else
      ((compare_op)->code = (reverse_condition (((enum rtx_code) (compare_op)->code))));
  }
       diff = ct - cf;
       if (reg_overlap_mentioned_p (out, ix86_compare_op0)
    || reg_overlap_mentioned_p (out, ix86_compare_op1))
  tmp = gen_reg_rtx (mode);
       if (mode == DImode)
  emit_insn (gen_x86_movdicc_0_m1_rex64 (tmp, compare_op));
       else
  emit_insn (gen_x86_movsicc_0_m1 (rtl_hooks.gen_lowpart (SImode, tmp), compare_op));
     }
   else
     {
       if (code == GT || code == GE)
  code = reverse_condition (code);
       else
  {
    long tmp = ct;
    ct = cf;
    cf = tmp;
    diff = ct - cf;
  }
       tmp = emit_store_flag (tmp, code, ix86_compare_op0,
         ix86_compare_op1, VOIDmode, 0, -1);
     }
   if (diff == 1)
     {
       if (ct)
  tmp = expand_simple_binop (mode, PLUS,
        tmp, gen_rtx_CONST_INT (VOIDmode, (long) (ct)),
        copy_rtx (tmp), 1, OPTAB_DIRECT);
     }
   else if (cf == -1)
     {
       tmp = expand_simple_binop (mode, IOR,
      tmp, gen_rtx_CONST_INT (VOIDmode, (long) (ct)),
      copy_rtx (tmp), 1, OPTAB_DIRECT);
     }
   else if (diff == -1 && ct)
     {
       tmp = expand_simple_unop (mode, NOT, tmp, copy_rtx (tmp), 1);
       if (cf)
  tmp = expand_simple_binop (mode, PLUS,
        copy_rtx (tmp), gen_rtx_CONST_INT (VOIDmode, (long) (cf)),
        copy_rtx (tmp), 1, OPTAB_DIRECT);
     }
   else
     {
       if (cf == 0)
  {
    cf = ct;
    ct = 0;
    tmp = expand_simple_unop (mode, NOT, tmp, copy_rtx (tmp), 1);
  }
       tmp = expand_simple_binop (mode, AND,
      copy_rtx (tmp),
      gen_int_mode (cf - ct, mode),
      copy_rtx (tmp), 1, OPTAB_DIRECT);
       if (ct)
  tmp = expand_simple_binop (mode, PLUS,
        copy_rtx (tmp), gen_rtx_CONST_INT (VOIDmode, (long) (ct)),
        copy_rtx (tmp), 1, OPTAB_DIRECT);
     }
   if (!rtx_equal_p (tmp, out))
     emit_move_insn (copy_rtx (out), copy_rtx (tmp));
   return 1;
 }
      if (diff < 0)
 {
   long tmp;
   tmp = ct, ct = cf, cf = tmp;
   diff = -diff;
   if ((mode_class[((enum machine_mode) (ix86_compare_op0)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (ix86_compare_op0)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (ix86_compare_op0)->mode)] == MODE_VECTOR_FLOAT))
     {
       compare_code = reverse_condition_maybe_unordered (compare_code);
       code = reverse_condition_maybe_unordered (code);
     }
   else
     {
       compare_code = reverse_condition (compare_code);
       code = reverse_condition (code);
     }
 }
      compare_code = NIL;
      if (mode_class[((enum machine_mode) (ix86_compare_op0)->mode)] == MODE_INT
   && ((enum rtx_code) (ix86_compare_op1)->code) == CONST_INT)
 {
   if (ix86_compare_op1 == (const_int_rtx[64])
       && (code == LT || code == GE))
     compare_code = code;
   else if (ix86_compare_op1 == (const_int_rtx[64 -1]))
     {
       if (code == LE)
  compare_code = LT;
       else if (code == GT)
  compare_code = GE;
     }
 }
      if (compare_code != NIL
   && ((enum machine_mode) (ix86_compare_op0)->mode) == ((enum machine_mode) (out)->mode)
   && (cf == -1 || ct == -1))
 {
   if (! (diff == 1 || diff == 2 || diff == 4 || diff == 8
   || diff == 3 || diff == 5 || diff == 9)
       || (compare_code == LT && ct == -1)
       || (compare_code == GE && cf == -1))
     {
       if (ct != -1)
  {
    cf = ct;
    ct = -1;
    code = reverse_condition (code);
  }
       out = emit_store_flag (out, code, ix86_compare_op0,
         ix86_compare_op1, VOIDmode, 0, -1);
       out = expand_simple_binop (mode, IOR,
      out, gen_rtx_CONST_INT (VOIDmode, (long) (cf)),
      out, 1, OPTAB_DIRECT);
       if (out != operands[0])
  emit_move_insn (operands[0], out);
       return 1;
     }
 }
      if ((diff == 1 || diff == 2 || diff == 4 || diff == 8
    || diff == 3 || diff == 5 || diff == 9)
   && ((mode != QImode && mode != HImode) || !(x86_partial_reg_stall & (1 << ix86_tune)))
   && (mode != DImode || x86_64_sign_extended_value (gen_rtx_CONST_INT (VOIDmode, (long) (cf)))))
 {
   rtx tmp;
   int nops;
   out = emit_store_flag (out, code, ix86_compare_op0,
     ix86_compare_op1, VOIDmode, 0, 1);
   nops = 0;
   if (diff == 1)
     tmp = copy_rtx (out);
   else
     {
       rtx out1;
       out1 = copy_rtx (out);
       tmp = gen_rtx_fmt_ee (MULT, (mode), (out1), (gen_rtx_CONST_INT (VOIDmode, (long) (diff & ~1))));
       nops++;
       if (diff & 1)
  {
    tmp = gen_rtx_fmt_ee (PLUS, (mode), (tmp), (out1));
    nops++;
  }
     }
   if (cf != 0)
     {
       tmp = gen_rtx_fmt_ee (PLUS, (mode), (tmp), (gen_rtx_CONST_INT (VOIDmode, (long) (cf))));
       nops++;
     }
   if (!rtx_equal_p (tmp, out))
     {
       if (nops == 1)
  out = force_operand (tmp, copy_rtx (out));
       else
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (out)), (copy_rtx (tmp))));
     }
   if (!rtx_equal_p (out, operands[0]))
     emit_move_insn (operands[0], copy_rtx (out));
   return 1;
 }
      if ((!((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) || (mode == QImode && (x86_partial_reg_stall & (1 << ix86_tune))))
   && ix86_branch_cost >= 2)
 {
   if (cf == 0)
     {
       cf = ct;
       ct = 0;
       if ((mode_class[((enum machine_mode) (ix86_compare_op0)->mode)] == MODE_FLOAT || mode_class[((enum machine_mode) (ix86_compare_op0)->mode)] == MODE_COMPLEX_FLOAT || mode_class[((enum machine_mode) (ix86_compare_op0)->mode)] == MODE_VECTOR_FLOAT))
  code = reverse_condition_maybe_unordered (code);
       else
  {
    code = reverse_condition (code);
    if (compare_code != NIL)
      compare_code = reverse_condition (compare_code);
  }
     }
   if (compare_code != NIL)
     {
       if (compare_code == GE || !cf)
  {
    code = reverse_condition (code);
    compare_code = LT;
  }
       else
  {
    long tmp = cf;
    cf = ct;
    ct = tmp;
  }
       out = emit_store_flag (out, code, ix86_compare_op0,
         ix86_compare_op1, VOIDmode, 0, -1);
     }
   else
     {
       out = emit_store_flag (out, code, ix86_compare_op0,
         ix86_compare_op1, VOIDmode, 0, 1);
       out = expand_simple_binop (mode, PLUS, copy_rtx (out), (const_int_rtx[64 -1]),
      copy_rtx (out), 1, OPTAB_DIRECT);
     }
   out = expand_simple_binop (mode, AND, copy_rtx (out),
         gen_int_mode (cf - ct, mode),
         copy_rtx (out), 1, OPTAB_DIRECT);
   if (ct)
     out = expand_simple_binop (mode, PLUS, copy_rtx (out), gen_rtx_CONST_INT (VOIDmode, (long) (ct)),
           copy_rtx (out), 1, OPTAB_DIRECT);
   if (!rtx_equal_p (out, operands[0]))
     emit_move_insn (operands[0], copy_rtx (out));
   return 1;
 }
    }
  if (!((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) || (mode == QImode && (x86_partial_reg_stall & (1 << ix86_tune))))
    {
      optab op;
      rtx var, orig_out, out, tmp;
      if (ix86_branch_cost <= 2)
 return 0;
      if (((enum rtx_code) (operands[2])->code) == CONST_INT)
 {
   var = operands[3];
   if (((operands[2])->u.hwint[0]) == 0 && operands[3] != (const_int_rtx[64 -1]))
     operands[3] = (const_int_rtx[64 -1]), op = (optab_table[OTI_and]);
   else if (((operands[2])->u.hwint[0]) == -1 && operands[3] != (const_int_rtx[64]))
     operands[3] = (const_int_rtx[64]), op = (optab_table[OTI_ior]);
   else
     return 0;
 }
      else if (((enum rtx_code) (operands[3])->code) == CONST_INT)
 {
   var = operands[2];
   if (((operands[3])->u.hwint[0]) == 0 && operands[2] != (const_int_rtx[64 -1]))
     operands[2] = (const_int_rtx[64 -1]), op = (optab_table[OTI_and]);
   else if (((operands[3])->u.hwint[0]) == -1 && operands[3] != (const_int_rtx[64]))
     operands[2] = (const_int_rtx[64]), op = (optab_table[OTI_ior]);
   else
     return 0;
 }
      else
        return 0;
      orig_out = operands[0];
      tmp = gen_reg_rtx (mode);
      operands[0] = tmp;
      if (ix86_expand_int_movcc (operands) == 0)
        return 0;
      out = expand_binop (mode, op, var, tmp, orig_out, 0,
     OPTAB_WIDEN);
      if (!rtx_equal_p (out, orig_out))
 emit_move_insn (copy_rtx (orig_out), copy_rtx (out));
      return 1;
    }
  if (! nonimmediate_operand (operands[2], mode))
    operands[2] = force_reg (mode, operands[2]);
  if (! nonimmediate_operand (operands[3], mode))
    operands[3] = force_reg (mode, operands[3]);
  if (bypass_test && reg_overlap_mentioned_p (operands[0], operands[3]))
    {
      rtx tmp = gen_reg_rtx (mode);
      emit_move_insn (tmp, operands[3]);
      operands[3] = tmp;
    }
  if (second_test && reg_overlap_mentioned_p (operands[0], operands[2]))
    {
      rtx tmp = gen_reg_rtx (mode);
      emit_move_insn (tmp, operands[2]);
      operands[2] = tmp;
    }
  if (! register_operand (operands[2], VOIDmode)
      && (mode == QImode
          || ! register_operand (operands[3], VOIDmode)))
    operands[2] = force_reg (mode, operands[2]);
  if (mode == QImode
      && ! register_operand (operands[3], VOIDmode))
    operands[3] = force_reg (mode, operands[3]);
  emit_insn (compare_seq);
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (gen_rtx_fmt_eee (IF_THEN_ELSE, (mode), (compare_op), (operands[2]), (operands[3]))))
                   );
  if (bypass_test)
    emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operands[0])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (mode), (bypass_test), (copy_rtx (operands[3])), (copy_rtx (operands[0])))))
                              );
  if (second_test)
    emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (copy_rtx (operands[0])), (gen_rtx_fmt_eee (IF_THEN_ELSE, (mode), (second_test), (copy_rtx (operands[2])), (copy_rtx (operands[0])))))
                              );
  return 1;
}
int
ix86_expand_fp_movcc (rtx operands[])
{
  enum rtx_code code;
  rtx tmp;
  rtx compare_op, second_test, bypass_test;
  if (((((ix86_fpmath & FPMATH_SSE) != 0) && ((enum machine_mode) (operands[0])->mode) == SFmode)
       || (((target_flags & 0x00008000) != 0) && ((ix86_fpmath & FPMATH_SSE) != 0) && ((enum machine_mode) (operands[0])->mode) == DFmode))
      && ((enum machine_mode) (ix86_compare_op0)->mode) == ((enum machine_mode) (operands[0])->mode)
      && (!(target_flags & 0x00000010)
   || (((enum rtx_code) (operands[1])->code) != LTGT && ((enum rtx_code) (operands[1])->code) != UNEQ))
      && (!(((enum rtx_code) (operands[0])->code) == REG)
   || ((((enum rtx_code) (operands[0])->code) == REG) && ((((((operands[0])->u.fld[0]).rtuint)) >= (20 + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((20 + 1) + 7)) || (((((operands[0])->u.fld[0]).rtuint)) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && ((((operands[0])->u.fld[0]).rtuint)) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))
   || (((operands[0])->u.fld[0]).rtuint) >= 53))
    {
      rtx op0 = ix86_compare_op0, op1 = ix86_compare_op1;
      code = ((enum rtx_code) (operands[1])->code);
      if (rtx_equal_p (operands[2], op1))
 {
   rtx tmp = op0;
   op0 = op1;
   op1 = tmp;
   code = reverse_condition_maybe_unordered (code);
 }
      if (rtx_equal_p (operands[2], op0) && rtx_equal_p (operands[3], op1))
 {
   if (code == LT || code == UNLE)
     {
        if (code == UNLE)
  {
    rtx tmp = op0;
    op0 = op1;
    op1 = tmp;
  }
        operands[0] = force_reg (((enum machine_mode) (operands[0])->mode), operands[0]);
        if (memory_operand (op0, VOIDmode))
   op0 = force_reg (((enum machine_mode) (operands[0])->mode), op0);
        if (((enum machine_mode) (operands[0])->mode) == SFmode)
   emit_insn (gen_minsf3 (operands[0], op0, op1));
        else
   emit_insn (gen_mindf3 (operands[0], op0, op1));
        return 1;
     }
   if (code == GT || code == UNGE)
     {
        if (code == UNGE)
  {
    rtx tmp = op0;
    op0 = op1;
    op1 = tmp;
  }
        operands[0] = force_reg (((enum machine_mode) (operands[0])->mode), operands[0]);
        if (memory_operand (op0, VOIDmode))
   op0 = force_reg (((enum machine_mode) (operands[0])->mode), op0);
        if (((enum machine_mode) (operands[0])->mode) == SFmode)
   emit_insn (gen_maxsf3 (operands[0], op0, op1));
        else
   emit_insn (gen_maxdf3 (operands[0], op0, op1));
        return 1;
     }
 }
      if (!sse_comparison_operator (operands[1], VOIDmode)
   || (rtx_equal_p (operands[0], ix86_compare_op1) && !(target_flags & 0x00000010)))
 {
   rtx tmp = ix86_compare_op0;
   ix86_compare_op0 = ix86_compare_op1;
   ix86_compare_op1 = tmp;
   operands[1] = gen_rtx_fmt_ee (swap_condition (((enum rtx_code) (operands[1])->code)),
     VOIDmode, ix86_compare_op0,
     ix86_compare_op1);
 }
      if ((rtx_equal_p (operands[0], operands[3])
    && (!(target_flags & 0x00000010) || ((enum rtx_code) (operands[1])->code) != EQ))
   || (((enum rtx_code) (operands[1])->code) == NE && (target_flags & 0x00000010)))
 {
   rtx tmp = operands[2];
   operands[2] = operands[3];
   operands[3] = tmp;
   operands[1] = gen_rtx_fmt_ee (reverse_condition_maybe_unordered
       (((enum rtx_code) (operands[1])->code)),
     VOIDmode, ix86_compare_op0,
     ix86_compare_op1);
 }
      if (((enum machine_mode) (operands[0])->mode) == SFmode)
 emit_insn (gen_sse_movsfcc (operands[0], operands[1],
        operands[2], operands[3],
        ix86_compare_op0, ix86_compare_op1));
      else
 emit_insn (gen_sse_movdfcc (operands[0], operands[1],
        operands[2], operands[3],
        ix86_compare_op0, ix86_compare_op1));
      return 1;
    }
  code = ((enum rtx_code) (operands[1])->code);
  compare_op = ix86_expand_compare (code, &second_test, &bypass_test);
  if (!fcmov_comparison_operator (compare_op, VOIDmode))
    {
      if (second_test != ((void *)0) || bypass_test != ((void *)0))
 fancy_abort ("gcc.c", 698536, "?");
      tmp = gen_reg_rtx (QImode);
      ix86_expand_setcc (code, tmp);
      code = NE;
      ix86_compare_op0 = tmp;
      ix86_compare_op1 = (const_int_rtx[64]);
      compare_op = ix86_expand_compare (code, &second_test, &bypass_test);
    }
  if (bypass_test && reg_overlap_mentioned_p (operands[0], operands[3]))
    {
      tmp = gen_reg_rtx (((enum machine_mode) (operands[0])->mode));
      emit_move_insn (tmp, operands[3]);
      operands[3] = tmp;
    }
  if (second_test && reg_overlap_mentioned_p (operands[0], operands[2]))
    {
      tmp = gen_reg_rtx (((enum machine_mode) (operands[0])->mode));
      emit_move_insn (tmp, operands[2]);
      operands[2] = tmp;
    }
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (gen_rtx_fmt_eee (IF_THEN_ELSE, (((enum machine_mode) (operands[0])->mode)), (compare_op), (operands[2]), (operands[3]))))
                 );
  if (bypass_test)
    emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (gen_rtx_fmt_eee (IF_THEN_ELSE, (((enum machine_mode) (operands[0])->mode)), (bypass_test), (operands[3]), (operands[0]))))
                   );
  if (second_test)
    emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (operands[0]), (gen_rtx_fmt_eee (IF_THEN_ELSE, (((enum machine_mode) (operands[0])->mode)), (second_test), (operands[2]), (operands[0]))))
                   );
  return 1;
}
int
ix86_expand_int_addcc (rtx operands[])
{
  enum rtx_code code = ((enum rtx_code) (operands[1])->code);
  rtx compare_op;
  rtx val = (const_int_rtx[64]);
  unsigned char fpcmp = 0;
  enum machine_mode mode = ((enum machine_mode) (operands[0])->mode);
  if (operands[3] != (const_int_rtx[64 +1])
      && operands[3] != (const_int_rtx[64 -1]))
    return 0;
  if (!ix86_expand_carry_flag_compare (code, ix86_compare_op0,
           ix86_compare_op1, &compare_op))
     return 0;
  code = ((enum rtx_code) (compare_op)->code);
  if (((enum machine_mode) ((((compare_op)->u.fld[0]).rtx1))->mode) == CCFPmode
      || ((enum machine_mode) ((((compare_op)->u.fld[0]).rtx1))->mode) == CCFPUmode)
    {
      fpcmp = 1;
      code = ix86_fp_compare_code_to_integer (code);
    }
  if (code != LTU)
    {
      val = (const_int_rtx[64 -1]);
      if (fpcmp)
 ((compare_op)->code = (reverse_condition_maybe_unordered (((enum rtx_code) (compare_op)->code))))
                              ;
      else
 ((compare_op)->code = (reverse_condition (((enum rtx_code) (compare_op)->code))));
    }
  ((compare_op)->mode = (mode));
  if ((code == LTU) == (operands[3] == (const_int_rtx[64 -1])))
    {
      switch (((enum machine_mode) (operands[0])->mode))
 {
   case QImode:
            emit_insn (gen_subqi3_carry (operands[0], operands[2], val, compare_op));
     break;
   case HImode:
            emit_insn (gen_subhi3_carry (operands[0], operands[2], val, compare_op));
     break;
   case SImode:
            emit_insn (gen_subsi3_carry (operands[0], operands[2], val, compare_op));
     break;
   case DImode:
            emit_insn (gen_subdi3_carry_rex64 (operands[0], operands[2], val, compare_op));
     break;
   default:
     fancy_abort ("gcc.c", 698635, "?");
 }
    }
  else
    {
      switch (((enum machine_mode) (operands[0])->mode))
 {
   case QImode:
            emit_insn (gen_addqi3_carry (operands[0], operands[2], val, compare_op));
     break;
   case HImode:
            emit_insn (gen_addhi3_carry (operands[0], operands[2], val, compare_op));
     break;
   case SImode:
            emit_insn (gen_addsi3_carry (operands[0], operands[2], val, compare_op));
     break;
   case DImode:
            emit_insn (gen_adddi3_carry_rex64 (operands[0], operands[2], val, compare_op));
     break;
   default:
     fancy_abort ("gcc.c", 698655, "?");
 }
    }
  return 1;
}
static int
ix86_split_to_parts (rtx operand, rtx *parts, enum machine_mode mode)
{
  int size;
  if (!0)
    size = mode==XFmode ? 3 : ((unsigned short) mode_size[mode]) / 4;
  else
    size = (((unsigned short) mode_size[mode]) + 4) / 8;
  if (((enum rtx_code) (operand)->code) == REG && (((((operand)->u.fld[0]).rtuint)) >= (((20 + 1) + 7) + 1) && ((((operand)->u.fld[0]).rtuint)) <= ((((20 + 1) + 7) + 1) + 7)))
    fancy_abort ("gcc.c", 698678, "?");
  if (size < 2 || size > 3)
    fancy_abort ("gcc.c", 698680, "?");
  if (((enum rtx_code) (operand)->code) == MEM && (((operand))->unchanging))
    {
      rtx tmp = maybe_get_pool_constant (operand);
      if (tmp)
 operand = tmp;
    }
  if (((enum rtx_code) (operand)->code) == MEM && !offsettable_memref_p (operand))
    {
      if (! push_operand (operand, VOIDmode))
 fancy_abort ("gcc.c", 698695, "?");
      operand = copy_rtx (operand);
      ((operand)->mode = ((0 ? DImode : SImode)));
      parts[0] = parts[1] = parts[2] = operand;
    }
  else if (!0)
    {
      if (mode == DImode)
 split_di (&operand, 1, &parts[0], &parts[1]);
      else
 {
   if ((((enum rtx_code) (operand)->code) == REG))
     {
       if (!reload_completed)
  fancy_abort ("gcc.c", 698710, "?");
       parts[0] = gen_rtx_REG (SImode, (((operand)->u.fld[0]).rtuint) + 0);
       parts[1] = gen_rtx_REG (SImode, (((operand)->u.fld[0]).rtuint) + 1);
       if (size == 3)
  parts[2] = gen_rtx_REG (SImode, (((operand)->u.fld[0]).rtuint) + 2);
     }
   else if (offsettable_memref_p (operand))
     {
       operand = adjust_address_1 (operand, SImode, 0, 1, 1);
       parts[0] = operand;
       parts[1] = adjust_address_1 (operand, SImode, 4, 1, 1);
       if (size == 3)
  parts[2] = adjust_address_1 (operand, SImode, 8, 1, 1);
     }
   else if (((enum rtx_code) (operand)->code) == CONST_DOUBLE)
     {
       struct real_value r;
       long l[4];
       memcpy (&(r), &(((operand))->u.hwint[0]), sizeof (struct real_value));
       switch (mode)
  {
  case XFmode:
    real_to_target (l, &(r), mode_for_size (96, MODE_FLOAT, 0));
    parts[2] = gen_int_mode (l[2], SImode);
    break;
  case DFmode:
    real_to_target (l, &(r), mode_for_size (64, MODE_FLOAT, 0));
    break;
  default:
    fancy_abort ("gcc.c", 698740, "?");
  }
       parts[1] = gen_int_mode (l[1], SImode);
       parts[0] = gen_int_mode (l[0], SImode);
     }
   else
     fancy_abort ("gcc.c", 698746, "?");
 }
    }
  else
    {
      if (mode == TImode)
 split_ti (&operand, 1, &parts[0], &parts[1]);
      if (mode == XFmode || mode == TFmode)
 {
   enum machine_mode upper_mode = mode==XFmode ? SImode : DImode;
   if ((((enum rtx_code) (operand)->code) == REG))
     {
       if (!reload_completed)
  fancy_abort ("gcc.c", 698759, "?");
       parts[0] = gen_rtx_REG (DImode, (((operand)->u.fld[0]).rtuint) + 0);
       parts[1] = gen_rtx_REG (upper_mode, (((operand)->u.fld[0]).rtuint) + 1);
     }
   else if (offsettable_memref_p (operand))
     {
       operand = adjust_address_1 (operand, DImode, 0, 1, 1);
       parts[0] = operand;
       parts[1] = adjust_address_1 (operand, upper_mode, 8, 1, 1);
     }
   else if (((enum rtx_code) (operand)->code) == CONST_DOUBLE)
     {
       struct real_value r;
       long l[3];
       memcpy (&(r), &(((operand))->u.hwint[0]), sizeof (struct real_value));
       real_to_target (l, &r, mode);
       if ((8 * 4) >= 64)
         parts[0]
    = gen_int_mode
        ((l[0] & (((long) 2 << 31) - 1))
         + ((((long) l[1]) << 31) << 1),
         DImode);
       else
         parts[0] = immed_double_const (l[0], l[1], DImode);
       if (upper_mode == SImode)
         parts[1] = gen_int_mode (l[2], SImode);
       else if ((8 * 4) >= 64)
         parts[1]
    = gen_int_mode
        ((l[2] & (((long) 2 << 31) - 1))
         + ((((long) l[3]) << 31) << 1),
         DImode);
       else
         parts[1] = immed_double_const (l[2], l[3], DImode);
     }
   else
     fancy_abort ("gcc.c", 698797, "?");
 }
    }
  return size;
}
void
ix86_split_long_move (rtx operands[])
{
  rtx part[2][3];
  int nparts;
  int push = 0;
  int collisions = 0;
  enum machine_mode mode = ((enum machine_mode) (operands[0])->mode);
  if (((unsigned short) mode_size[((enum machine_mode) (operands[0])->mode)]) == 8 && 0)
    {
      if (((enum rtx_code) (operands[1])->code) == MEM
   && ((enum rtx_code) ((((operands[1])->u.fld[0]).rtx1))->code) == SYMBOL_REF
   && ((((((operands[1])->u.fld[0]).rtx1)))->unchanging))
 operands[1] = get_pool_constant ((((operands[1])->u.fld[0]).rtx1));
      if (push_operand (operands[0], VOIDmode))
 {
   operands[0] = copy_rtx (operands[0]);
   ((operands[0])->mode = ((0 ? DImode : SImode)));
 }
      else
        operands[0] = rtl_hooks.gen_lowpart (DImode, operands[0]);
      operands[1] = rtl_hooks.gen_lowpart (DImode, operands[1]);
      emit_move_insn (operands[0], operands[1]);
      return;
    }
  if (push_operand (operands[0], VOIDmode))
    push = 1;
  else if (((enum rtx_code) (operands[0])->code) == MEM
    && ! offsettable_memref_p (operands[0]))
    fancy_abort ("gcc.c", 698847, "?");
  nparts = ix86_split_to_parts (operands[1], part[1], ((enum machine_mode) (operands[0])->mode));
  ix86_split_to_parts (operands[0], part[0], ((enum machine_mode) (operands[0])->mode));
  if (push && ((enum rtx_code) (operands[1])->code) == MEM
      && reg_overlap_mentioned_p ((global_rtl[GR_STACK_POINTER]), operands[1]))
    {
      if (nparts == 3)
 part[1][1] = change_address (part[1][1], ((enum machine_mode) (part[1][1])->mode),
         (((part[1][2])->u.fld[0]).rtx1));
      part[1][0] = change_address (part[1][0], ((enum machine_mode) (part[1][0])->mode),
       (((part[1][1])->u.fld[0]).rtx1));
    }
  if ((((enum rtx_code) (part[0][0])->code) == REG) && ((enum rtx_code) (part[1][0])->code) == MEM)
    {
      if (reg_overlap_mentioned_p (part[0][0], (((part[1][0])->u.fld[0]).rtx1)))
 collisions++;
      if (reg_overlap_mentioned_p (part[0][1], (((part[1][0])->u.fld[0]).rtx1)))
 collisions++;
      if (nparts == 3
   && reg_overlap_mentioned_p (part[0][2], (((part[1][0])->u.fld[0]).rtx1)))
 collisions++;
      if (collisions == 1 && nparts == 3
   && reg_overlap_mentioned_p (part[0][1], (((part[1][0])->u.fld[0]).rtx1)))
 {
   rtx tmp;
   tmp = part[0][1]; part[0][1] = part[0][2]; part[0][2] = tmp;
   tmp = part[1][1]; part[1][1] = part[1][2]; part[1][2] = tmp;
 }
      else if (collisions > 1)
 {
   rtx base;
   collisions = 1;
   base = part[0][nparts - 1];
   if (((enum machine_mode) (base)->mode) != (0 ? DImode : SImode))
     base = gen_rtx_REG ((0 ? DImode : SImode), (((base)->u.fld[0]).rtuint));
   emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (base), ((((part[1][0])->u.fld[0]).rtx1))));
   part[1][0] = replace_equiv_address (part[1][0], base);
   part[1][1] = replace_equiv_address (part[1][1],
          plus_constant_wide ((base), (long) ((0 ? 8 : 4))));
   if (nparts == 3)
     part[1][2] = replace_equiv_address (part[1][2],
          plus_constant_wide ((base), (long) (8)));
 }
    }
  if (push)
    {
      if (!0)
 {
   if (nparts == 3)
     {
       if ((target_flags & 0x00080000) && mode == XFmode)
                emit_insn (gen_addsi3 ((global_rtl[GR_STACK_POINTER]), (global_rtl[GR_STACK_POINTER]), gen_rtx_CONST_INT (VOIDmode, (long) (-4))));
       emit_move_insn (part[0][2], part[1][2]);
     }
 }
      else
 {
   if (((enum machine_mode) (part[1][1])->mode) == SImode)
     {
       if (((enum rtx_code) (part[1][1])->code) == MEM)
  part[1][1] = adjust_address_1 (part[1][1], DImode, 0, 1, 1);
       else if ((((enum rtx_code) (part[1][1])->code) == REG))
  part[1][1] = gen_rtx_REG (DImode, (((part[1][1])->u.fld[0]).rtuint));
       else
  fancy_abort ("gcc.c", 698933, "?");
       if (((enum machine_mode) (part[1][0])->mode) == SImode)
  part[1][0] = part[1][1];
     }
 }
      emit_move_insn (part[0][1], part[1][1]);
      emit_move_insn (part[0][0], part[1][0]);
      return;
    }
  if (((((enum rtx_code) (part[0][0])->code) == REG)
       && (((enum rtx_code) (part[1][1])->code) == REG)
       && ((((part[0][0])->u.fld[0]).rtuint) == (((part[1][1])->u.fld[0]).rtuint)
    || (nparts == 3
        && (((part[0][0])->u.fld[0]).rtuint) == (((part[1][2])->u.fld[0]).rtuint))))
      || (collisions > 0
   && reg_overlap_mentioned_p (part[0][0], (((part[1][0])->u.fld[0]).rtx1))))
    {
      if (nparts == 3)
 {
   operands[2] = part[0][2];
   operands[3] = part[0][1];
   operands[4] = part[0][0];
   operands[5] = part[1][2];
   operands[6] = part[1][1];
   operands[7] = part[1][0];
 }
      else
 {
   operands[2] = part[0][1];
   operands[3] = part[0][0];
   operands[5] = part[1][1];
   operands[6] = part[1][0];
 }
    }
  else
    {
      if (nparts == 3)
 {
   operands[2] = part[0][0];
   operands[3] = part[0][1];
   operands[4] = part[0][2];
   operands[5] = part[1][0];
   operands[6] = part[1][1];
   operands[7] = part[1][2];
 }
      else
 {
   operands[2] = part[0][0];
   operands[3] = part[0][1];
   operands[5] = part[1][0];
   operands[6] = part[1][1];
 }
    }
  emit_move_insn (operands[2], operands[5]);
  emit_move_insn (operands[3], operands[6]);
  if (nparts == 3)
    emit_move_insn (operands[4], operands[7]);
  return;
}
void
ix86_split_ashldi (rtx *operands, rtx scratch)
{
  rtx low[2], high[2];
  int count;
  if (((enum rtx_code) (operands[2])->code) == CONST_INT)
    {
      split_di (operands, 2, low, high);
      count = ((operands[2])->u.hwint[0]) & 63;
      if (count >= 32)
 {
   emit_move_insn (high[0], low[1]);
   emit_move_insn (low[0], (const_int_rtx[64]));
   if (count > 32)
     emit_insn (gen_ashlsi3 (high[0], high[0], gen_rtx_CONST_INT (VOIDmode, (long) (count - 32))));
 }
      else
 {
   if (!rtx_equal_p (operands[0], operands[1]))
     emit_move_insn (operands[0], operands[1]);
   emit_insn (gen_x86_shld_1 (high[0], low[0], gen_rtx_CONST_INT (VOIDmode, (long) (count))));
   emit_insn (gen_ashlsi3 (low[0], low[0], gen_rtx_CONST_INT (VOIDmode, (long) (count))));
 }
    }
  else
    {
      if (!rtx_equal_p (operands[0], operands[1]))
 emit_move_insn (operands[0], operands[1]);
      split_di (operands, 1, low, high);
      emit_insn (gen_x86_shld_1 (high[0], low[0], operands[2]));
      emit_insn (gen_ashlsi3 (low[0], low[0], operands[2]));
      if (((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && (! no_new_pseudos || scratch))
 {
   if (! no_new_pseudos)
     scratch = force_reg (SImode, (const_int_rtx[64]));
   else
     emit_move_insn (scratch, (const_int_rtx[64]));
   emit_insn (gen_x86_shift_adj_1 (high[0], low[0], operands[2],
       scratch));
 }
      else
 emit_insn (gen_x86_shift_adj_2 (high[0], low[0], operands[2]));
    }
}
void
ix86_split_ashrdi (rtx *operands, rtx scratch)
{
  rtx low[2], high[2];
  int count;
  if (((enum rtx_code) (operands[2])->code) == CONST_INT)
    {
      split_di (operands, 2, low, high);
      count = ((operands[2])->u.hwint[0]) & 63;
      if (count == 63)
 {
   emit_move_insn (high[0], high[1]);
   emit_insn (gen_ashrsi3 (high[0], high[0], gen_rtx_CONST_INT (VOIDmode, (long) (31))));
   emit_move_insn (low[0], high[0]);
 }
      else if (count >= 32)
 {
   emit_move_insn (low[0], high[1]);
   if (! reload_completed)
     emit_insn (gen_ashrsi3 (high[0], low[0], gen_rtx_CONST_INT (VOIDmode, (long) (31))));
   else
     {
       emit_move_insn (high[0], low[0]);
       emit_insn (gen_ashrsi3 (high[0], high[0], gen_rtx_CONST_INT (VOIDmode, (long) (31))));
     }
   if (count > 32)
     emit_insn (gen_ashrsi3 (low[0], low[0], gen_rtx_CONST_INT (VOIDmode, (long) (count - 32))));
 }
      else
 {
   if (!rtx_equal_p (operands[0], operands[1]))
     emit_move_insn (operands[0], operands[1]);
   emit_insn (gen_x86_shrd_1 (low[0], high[0], gen_rtx_CONST_INT (VOIDmode, (long) (count))));
   emit_insn (gen_ashrsi3 (high[0], high[0], gen_rtx_CONST_INT (VOIDmode, (long) (count))));
 }
    }
  else
    {
      if (!rtx_equal_p (operands[0], operands[1]))
 emit_move_insn (operands[0], operands[1]);
      split_di (operands, 1, low, high);
      emit_insn (gen_x86_shrd_1 (low[0], high[0], operands[2]));
      emit_insn (gen_ashrsi3 (high[0], high[0], operands[2]));
      if (((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && (! no_new_pseudos || scratch))
 {
   if (! no_new_pseudos)
     scratch = gen_reg_rtx (SImode);
   emit_move_insn (scratch, high[0]);
   emit_insn (gen_ashrsi3 (scratch, scratch, gen_rtx_CONST_INT (VOIDmode, (long) (31))));
   emit_insn (gen_x86_shift_adj_1 (low[0], high[0], operands[2],
       scratch));
 }
      else
 emit_insn (gen_x86_shift_adj_3 (low[0], high[0], operands[2]));
    }
}
void
ix86_split_lshrdi (rtx *operands, rtx scratch)
{
  rtx low[2], high[2];
  int count;
  if (((enum rtx_code) (operands[2])->code) == CONST_INT)
    {
      split_di (operands, 2, low, high);
      count = ((operands[2])->u.hwint[0]) & 63;
      if (count >= 32)
 {
   emit_move_insn (low[0], high[1]);
   emit_move_insn (high[0], (const_int_rtx[64]));
   if (count > 32)
     emit_insn (gen_lshrsi3 (low[0], low[0], gen_rtx_CONST_INT (VOIDmode, (long) (count - 32))));
 }
      else
 {
   if (!rtx_equal_p (operands[0], operands[1]))
     emit_move_insn (operands[0], operands[1]);
   emit_insn (gen_x86_shrd_1 (low[0], high[0], gen_rtx_CONST_INT (VOIDmode, (long) (count))));
   emit_insn (gen_lshrsi3 (high[0], high[0], gen_rtx_CONST_INT (VOIDmode, (long) (count))));
 }
    }
  else
    {
      if (!rtx_equal_p (operands[0], operands[1]))
 emit_move_insn (operands[0], operands[1]);
      split_di (operands, 1, low, high);
      emit_insn (gen_x86_shrd_1 (low[0], high[0], operands[2]));
      emit_insn (gen_lshrsi3 (high[0], high[0], operands[2]));
      if (((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)) && (! no_new_pseudos || scratch))
 {
   if (! no_new_pseudos)
     scratch = force_reg (SImode, (const_int_rtx[64]));
   else
     emit_move_insn (scratch, (const_int_rtx[64]));
   emit_insn (gen_x86_shift_adj_1 (low[0], high[0], operands[2],
       scratch));
 }
      else
 emit_insn (gen_x86_shift_adj_2 (low[0], high[0], operands[2]));
    }
}
static rtx
ix86_expand_aligntest (rtx variable1, int value1)
{
  rtx label = gen_label_rtx ();
  rtx tmpcount = gen_reg_rtx (((enum machine_mode) (variable1)->mode));
  if (((enum machine_mode) (variable1)->mode) == DImode)
    emit_insn (gen_anddi3 (tmpcount, variable1, gen_rtx_CONST_INT (VOIDmode, (long) (value1))));
  else
    emit_insn (gen_andsi3 (tmpcount, variable1, gen_rtx_CONST_INT (VOIDmode, (long) (value1))));
  emit_cmp_and_jump_insns (tmpcount, (const_int_rtx[64]), EQ, 0, ((enum machine_mode) (variable1)->mode),
      1, label);
  return label;
}
static void
ix86_adjust_counter (rtx countreg, long value1)
{
  if (((enum machine_mode) (countreg)->mode) == DImode)
    emit_insn (gen_adddi3 (countreg, countreg, gen_rtx_CONST_INT (VOIDmode, (long) (-value1))));
  else
    emit_insn (gen_addsi3 (countreg, countreg, gen_rtx_CONST_INT (VOIDmode, (long) (-value1))));
}
rtx
ix86_zero_extend_to_Pmode (rtx exp)
{
  rtx r;
  if (((enum machine_mode) (exp)->mode) == VOIDmode)
    return force_reg ((0 ? DImode : SImode), exp);
  if (((enum machine_mode) (exp)->mode) == (0 ? DImode : SImode))
    return copy_to_mode_reg ((0 ? DImode : SImode), exp);
  r = gen_reg_rtx ((0 ? DImode : SImode));
  emit_insn (gen_zero_extendsidi2 (r, exp));
  return r;
}
int
ix86_expand_movstr (rtx dst, rtx src, rtx count_exp, rtx align_exp)
{
  rtx srcreg, destreg, countreg, srcexp, destexp;
  enum machine_mode counter_mode;
  long align = 0;
  unsigned long count = 0;
  if (((enum rtx_code) (align_exp)->code) == CONST_INT)
    align = ((align_exp)->u.hwint[0]);
  if (global_regs[4] || global_regs[5])
    return 0;
  if (!(!(target_flags & 0x00000200)))
    align = 64;
  if (((enum rtx_code) (count_exp)->code) == CONST_INT)
    {
      count = ((count_exp)->u.hwint[0]);
      if (!(target_flags & 0x00000400) && count > 64)
 return 0;
    }
  if (!0 || ((enum machine_mode) (count_exp)->mode) == SImode
      || x86_64_zero_extended_value (count_exp))
    counter_mode = SImode;
  else
    counter_mode = DImode;
  if (counter_mode != SImode && counter_mode != DImode)
    fancy_abort ("gcc.c", 699244, "?");
  destreg = copy_to_mode_reg ((0 ? DImode : SImode), (((dst)->u.fld[0]).rtx1));
  if (destreg != (((dst)->u.fld[0]).rtx1))
    dst = replace_equiv_address_nv (dst, destreg);
  srcreg = copy_to_mode_reg ((0 ? DImode : SImode), (((src)->u.fld[0]).rtx1));
  if (srcreg != (((src)->u.fld[0]).rtx1))
    src = replace_equiv_address_nv (src, srcreg);
  if ((!optimize || optimize_size) && (count == 0 || (count & 0x03)))
    {
      emit_insn (gen_cld ());
      countreg = ix86_zero_extend_to_Pmode (count_exp);
      destexp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (destreg), (countreg));
      srcexp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (srcreg), (countreg));
      emit_insn (gen_rep_mov (destreg, dst, srcreg, src, countreg,
         destexp, srcexp));
    }
  else if (count != 0
    && (align >= 8
        || (!(ix86_tune == PROCESSOR_PENTIUMPRO) && !0 && align >= 4)
        || optimize_size || count < (unsigned int) 64))
    {
      unsigned long offset = 0;
      int size = 0 && !optimize_size ? 8 : 4;
      rtx srcmem, dstmem;
      emit_insn (gen_cld ());
      if (count & ~(size - 1))
 {
   countreg = copy_to_mode_reg (counter_mode,
           gen_rtx_CONST_INT (VOIDmode, (long) ((count >> (size == 4 ? 2 : 3)) & (0 ? -1 : 0x3fffffff)))
                                         );
   countreg = ix86_zero_extend_to_Pmode (countreg);
   destexp = gen_rtx_fmt_ee (ASHIFT, ((0 ? DImode : SImode)), (countreg), (gen_rtx_CONST_INT (VOIDmode, (long) (size == 4 ? 2 : 3))))
                                    ;
   srcexp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (destexp), (srcreg));
   destexp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (destexp), (destreg));
   emit_insn (gen_rep_mov (destreg, dst, srcreg, src,
      countreg, destexp, srcexp));
   offset = count & ~(size - 1);
 }
      if (size == 8 && (count & 0x04))
 {
   srcmem = adjust_automodify_address_1 (src, SImode, srcreg, offset, 0)
              ;
   dstmem = adjust_automodify_address_1 (dst, SImode, destreg, offset, 0)
              ;
   emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
   offset += 4;
 }
      if (count & 0x02)
 {
   srcmem = adjust_automodify_address_1 (src, HImode, srcreg, offset, 0)
              ;
   dstmem = adjust_automodify_address_1 (dst, HImode, destreg, offset, 0)
              ;
   emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
   offset += 2;
 }
      if (count & 0x01)
 {
   srcmem = adjust_automodify_address_1 (src, QImode, srcreg, offset, 0)
              ;
   dstmem = adjust_automodify_address_1 (dst, QImode, destreg, offset, 0)
              ;
   emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
 }
    }
  else
    {
      rtx countreg2;
      rtx label = ((void *)0);
      rtx srcmem, dstmem;
      int desired_alignment = ((ix86_tune == PROCESSOR_PENTIUMPRO)
          && (count == 0 || count >= (unsigned int) 260)
          ? 8 : (0 ? 8 : 4));
      dst = change_address (dst, BLKmode, destreg);
      src = change_address (src, BLKmode, srcreg);
      if (!(target_flags & 0x00000400)
   && (align < (0 ? 8 : 4) || !(x86_rep_movl_optimal & (1 << ix86_tune))))
 return 0;
      if ((x86_single_string1op & (1 << ix86_tune)))
 emit_insn (gen_cld ());
      countreg2 = gen_reg_rtx ((0 ? DImode : SImode));
      countreg = copy_to_mode_reg (counter_mode, count_exp);
      if (count == 0 && align < desired_alignment)
 {
   label = gen_label_rtx ();
   emit_cmp_and_jump_insns (countreg, gen_rtx_CONST_INT (VOIDmode, (long) (desired_alignment - 1)),
       LEU, 0, counter_mode, 1, label);
 }
      if (align <= 1)
 {
   rtx label = ix86_expand_aligntest (destreg, 1);
   srcmem = change_address (src, QImode, srcreg);
   dstmem = change_address (dst, QImode, destreg);
   emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
   ix86_adjust_counter (countreg, 1);
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
      if (align <= 2)
 {
   rtx label = ix86_expand_aligntest (destreg, 2);
   srcmem = change_address (src, HImode, srcreg);
   dstmem = change_address (dst, HImode, destreg);
   emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
   ix86_adjust_counter (countreg, 2);
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
      if (align <= 4 && desired_alignment > 4)
 {
   rtx label = ix86_expand_aligntest (destreg, 4);
   srcmem = change_address (src, SImode, srcreg);
   dstmem = change_address (dst, SImode, destreg);
   emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
   ix86_adjust_counter (countreg, 4);
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
      if (label && desired_alignment > 4 && !0)
 {
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
   label = (rtx) 0;
 }
      if (!(x86_single_string1op & (1 << ix86_tune)))
 emit_insn (gen_cld ());
      if (0)
 {
   emit_insn (gen_lshrdi3 (countreg2, ix86_zero_extend_to_Pmode (countreg),
      gen_rtx_CONST_INT (VOIDmode, (long) (3))));
   destexp = gen_rtx_fmt_ee (ASHIFT, ((0 ? DImode : SImode)), (countreg2), (gen_rtx_CONST_INT (VOIDmode, (long) (3))));
 }
      else
 {
   emit_insn (gen_lshrsi3 (countreg2, countreg, (const_int_rtx[64 +2])));
   destexp = gen_rtx_fmt_ee (ASHIFT, ((0 ? DImode : SImode)), (countreg2), ((const_int_rtx[64 +2])));
 }
      srcexp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (destexp), (srcreg));
      destexp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (destexp), (destreg));
      emit_insn (gen_rep_mov (destreg, dst, srcreg, src,
         countreg2, destexp, srcexp));
      if (label)
 {
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
      if (0 && align > 4 && count != 0 && (count & 4))
 {
   srcmem = change_address (src, SImode, srcreg);
   dstmem = change_address (dst, SImode, destreg);
   emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
 }
      if ((align <= 4 || count == 0) && 0)
 {
   rtx label = ix86_expand_aligntest (countreg, 4);
   srcmem = change_address (src, SImode, srcreg);
   dstmem = change_address (dst, SImode, destreg);
   emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
      if (align > 2 && count != 0 && (count & 2))
 {
   srcmem = change_address (src, HImode, srcreg);
   dstmem = change_address (dst, HImode, destreg);
   emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
 }
      if (align <= 2 || count == 0)
 {
   rtx label = ix86_expand_aligntest (countreg, 2);
   srcmem = change_address (src, HImode, srcreg);
   dstmem = change_address (dst, HImode, destreg);
   emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
      if (align > 1 && count != 0 && (count & 1))
 {
   srcmem = change_address (src, QImode, srcreg);
   dstmem = change_address (dst, QImode, destreg);
   emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
 }
      if (align <= 1 || count == 0)
 {
   rtx label = ix86_expand_aligntest (countreg, 1);
   srcmem = change_address (src, QImode, srcreg);
   dstmem = change_address (dst, QImode, destreg);
   emit_insn (gen_strmov (destreg, dstmem, srcreg, srcmem));
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
    }
  return 1;
}
int
ix86_expand_clrstr (rtx dst, rtx count_exp, rtx align_exp)
{
  rtx destreg, zeroreg, countreg, destexp;
  enum machine_mode counter_mode;
  long align = 0;
  unsigned long count = 0;
  if (((enum rtx_code) (align_exp)->code) == CONST_INT)
    align = ((align_exp)->u.hwint[0]);
  if (global_regs[4])
    return 0;
  if (!(!(target_flags & 0x00000200)))
    align = 32;
  if (((enum rtx_code) (count_exp)->code) == CONST_INT)
    {
      count = ((count_exp)->u.hwint[0]);
      if (!(target_flags & 0x00000400) && count > 64)
 return 0;
    }
  if (!0 || ((enum machine_mode) (count_exp)->mode) == SImode
      || x86_64_zero_extended_value (count_exp))
    counter_mode = SImode;
  else
    counter_mode = DImode;
  destreg = copy_to_mode_reg ((0 ? DImode : SImode), (((dst)->u.fld[0]).rtx1));
  if (destreg != (((dst)->u.fld[0]).rtx1))
    dst = replace_equiv_address_nv (dst, destreg);
  emit_insn (gen_cld ());
  if ((!optimize || optimize_size) && (count == 0 || (count & 0x03)))
    {
      countreg = ix86_zero_extend_to_Pmode (count_exp);
      zeroreg = copy_to_mode_reg (QImode, (const_int_rtx[64]));
      destexp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (destreg), (countreg));
      emit_insn (gen_rep_stos (destreg, countreg, dst, zeroreg, destexp));
    }
  else if (count != 0
    && (align >= 8
        || (!(ix86_tune == PROCESSOR_PENTIUMPRO) && !0 && align >= 4)
        || optimize_size || count < (unsigned int) 64))
    {
      int size = 0 && !optimize_size ? 8 : 4;
      unsigned long offset = 0;
      zeroreg = copy_to_mode_reg (size == 4 ? SImode : DImode, (const_int_rtx[64]));
      if (count & ~(size - 1))
 {
   countreg = copy_to_mode_reg (counter_mode,
           gen_rtx_CONST_INT (VOIDmode, (long) ((count >> (size == 4 ? 2 : 3)) & (0 ? -1 : 0x3fffffff)))
                                         );
   countreg = ix86_zero_extend_to_Pmode (countreg);
   destexp = gen_rtx_fmt_ee (ASHIFT, ((0 ? DImode : SImode)), (countreg), (gen_rtx_CONST_INT (VOIDmode, (long) (size == 4 ? 2 : 3))));
   destexp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (destexp), (destreg));
   emit_insn (gen_rep_stos (destreg, countreg, dst, zeroreg, destexp));
   offset = count & ~(size - 1);
 }
      if (size == 8 && (count & 0x04))
 {
   rtx mem = adjust_automodify_address_1 (dst, SImode, destreg, offset, 0)
               ;
   emit_insn (gen_strset (destreg, mem,
     gen_rtx_SUBREG (SImode, zeroreg, 0)));
   offset += 4;
 }
      if (count & 0x02)
 {
   rtx mem = adjust_automodify_address_1 (dst, HImode, destreg, offset, 0)
               ;
   emit_insn (gen_strset (destreg, mem,
     gen_rtx_SUBREG (HImode, zeroreg, 0)));
   offset += 2;
 }
      if (count & 0x01)
 {
   rtx mem = adjust_automodify_address_1 (dst, QImode, destreg, offset, 0)
               ;
   emit_insn (gen_strset (destreg, mem,
     gen_rtx_SUBREG (QImode, zeroreg, 0)));
 }
    }
  else
    {
      rtx countreg2;
      rtx label = ((void *)0);
      int desired_alignment = ((ix86_tune == PROCESSOR_PENTIUMPRO)
          && (count == 0 || count >= (unsigned int) 260)
          ? 8 : (0 ? 8 : 4));
      if (!(target_flags & 0x00000400)
   && (align < (0 ? 8 : 4) || !(x86_rep_movl_optimal & (1 << ix86_tune))))
 return 0;
      if ((x86_single_string1op & (1 << ix86_tune)))
 emit_insn (gen_cld ());
      countreg2 = gen_reg_rtx ((0 ? DImode : SImode));
      countreg = copy_to_mode_reg (counter_mode, count_exp);
      zeroreg = copy_to_mode_reg ((0 ? DImode : SImode), (const_int_rtx[64]));
      dst = change_address (dst, BLKmode, destreg);
      if (count == 0 && align < desired_alignment)
 {
   label = gen_label_rtx ();
   emit_cmp_and_jump_insns (countreg, gen_rtx_CONST_INT (VOIDmode, (long) (desired_alignment - 1)),
       LEU, 0, counter_mode, 1, label);
 }
      if (align <= 1)
 {
   rtx label = ix86_expand_aligntest (destreg, 1);
   emit_insn (gen_strset (destreg, dst,
     gen_rtx_SUBREG (QImode, zeroreg, 0)));
   ix86_adjust_counter (countreg, 1);
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
      if (align <= 2)
 {
   rtx label = ix86_expand_aligntest (destreg, 2);
   emit_insn (gen_strset (destreg, dst,
     gen_rtx_SUBREG (HImode, zeroreg, 0)));
   ix86_adjust_counter (countreg, 2);
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
      if (align <= 4 && desired_alignment > 4)
 {
   rtx label = ix86_expand_aligntest (destreg, 4);
   emit_insn (gen_strset (destreg, dst,
     (0
      ? gen_rtx_SUBREG (SImode, zeroreg, 0)
      : zeroreg)));
   ix86_adjust_counter (countreg, 4);
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
      if (label && desired_alignment > 4 && !0)
 {
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
   label = (rtx) 0;
 }
      if (!(x86_single_string1op & (1 << ix86_tune)))
 emit_insn (gen_cld ());
      if (0)
 {
   emit_insn (gen_lshrdi3 (countreg2, ix86_zero_extend_to_Pmode (countreg),
      gen_rtx_CONST_INT (VOIDmode, (long) (3))));
   destexp = gen_rtx_fmt_ee (ASHIFT, ((0 ? DImode : SImode)), (countreg2), (gen_rtx_CONST_INT (VOIDmode, (long) (3))));
 }
      else
 {
   emit_insn (gen_lshrsi3 (countreg2, countreg, (const_int_rtx[64 +2])));
   destexp = gen_rtx_fmt_ee (ASHIFT, ((0 ? DImode : SImode)), (countreg2), ((const_int_rtx[64 +2])));
 }
      destexp = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (destexp), (destreg));
      emit_insn (gen_rep_stos (destreg, countreg2, dst, zeroreg, destexp));
      if (label)
 {
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
      if (0 && align > 4 && count != 0 && (count & 4))
 emit_insn (gen_strset (destreg, dst,
          gen_rtx_SUBREG (SImode, zeroreg, 0)));
      if (0 && (align <= 4 || count == 0))
 {
   rtx label = ix86_expand_aligntest (countreg, 4);
   emit_insn (gen_strset (destreg, dst,
     gen_rtx_SUBREG (SImode, zeroreg, 0)));
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
      if (align > 2 && count != 0 && (count & 2))
 emit_insn (gen_strset (destreg, dst,
          gen_rtx_SUBREG (HImode, zeroreg, 0)));
      if (align <= 2 || count == 0)
 {
   rtx label = ix86_expand_aligntest (countreg, 2);
   emit_insn (gen_strset (destreg, dst,
     gen_rtx_SUBREG (HImode, zeroreg, 0)));
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
      if (align > 1 && count != 0 && (count & 1))
 emit_insn (gen_strset (destreg, dst,
          gen_rtx_SUBREG (QImode, zeroreg, 0)));
      if (align <= 1 || count == 0)
 {
   rtx label = ix86_expand_aligntest (countreg, 1);
   emit_insn (gen_strset (destreg, dst,
     gen_rtx_SUBREG (QImode, zeroreg, 0)));
   emit_label (label);
   (((label)->u.fld[4]).rtint) = 1;
 }
    }
  return 1;
}
int
ix86_expand_strlen (rtx out, rtx src, rtx eoschar, rtx align)
{
  rtx addr, scratch1, scratch2, scratch3, scratch4;
  if ((x86_unroll_strlen & (1 << ix86_tune)) && eoschar == (const_int_rtx[64]) && optimize > 1
      && !(target_flags & 0x00000400)
      && !optimize_size
      && (((enum rtx_code) (align)->code) != CONST_INT || ((align)->u.hwint[0]) < 4))
    return 0;
  addr = force_reg ((0 ? DImode : SImode), (((src)->u.fld[0]).rtx1));
  scratch1 = gen_reg_rtx ((0 ? DImode : SImode));
  if ((x86_unroll_strlen & (1 << ix86_tune)) && eoschar == (const_int_rtx[64]) && optimize > 1
      && !optimize_size)
    {
      emit_move_insn (out, addr);
      ix86_expand_strlensi_unroll_1 (out, src, align);
      if (0)
 emit_insn (gen_subdi3 (out, out, addr));
      else
 emit_insn (gen_subsi3 (out, out, addr));
    }
  else
    {
      rtx unspec;
      scratch2 = gen_reg_rtx ((0 ? DImode : SImode));
      scratch3 = gen_reg_rtx ((0 ? DImode : SImode));
      scratch4 = force_reg ((0 ? DImode : SImode), (const_int_rtx[64 -1]));
      emit_move_insn (scratch3, addr);
      eoschar = force_reg (QImode, eoschar);
      emit_insn (gen_cld ());
      src = replace_equiv_address_nv (src, scratch3);
      unspec = gen_rtx_fmt_Ei (UNSPEC, ((0 ? DImode : SImode)), (gen_rtvec (4, src, eoschar, align, scratch4)), (20))
                              ;
      emit_insn (gen_strlenqi_1 (scratch1, scratch3, unspec));
      if (0)
 {
   emit_insn (gen_one_cmpldi2 (scratch2, scratch1));
   emit_insn (gen_adddi3 (out, scratch2, (const_int_rtx[64 -1])));
 }
      else
 {
   emit_insn (gen_one_cmplsi2 (scratch2, scratch1));
   emit_insn (gen_addsi3 (out, scratch2, (const_int_rtx[64 -1])));
 }
    }
  return 1;
}
static void
ix86_expand_strlensi_unroll_1 (rtx out, rtx src, rtx align_rtx)
{
  int align;
  rtx tmp;
  rtx align_2_label = (rtx) 0;
  rtx align_3_label = (rtx) 0;
  rtx align_4_label = gen_label_rtx ();
  rtx end_0_label = gen_label_rtx ();
  rtx mem;
  rtx tmpreg = gen_reg_rtx (SImode);
  rtx scratch = gen_reg_rtx (SImode);
  rtx cmp;
  align = 0;
  if (((enum rtx_code) (align_rtx)->code) == CONST_INT)
    align = ((align_rtx)->u.hwint[0]);
  if (align < 4)
    {
      rtx scratch1 = gen_reg_rtx ((0 ? DImode : SImode));
      emit_move_insn (scratch1, out);
      if (align != 2)
 {
   align_3_label = gen_label_rtx ();
   align_2_label = gen_label_rtx ();
   align_rtx = expand_binop ((0 ? DImode : SImode), (optab_table[OTI_and]), scratch1, gen_rtx_CONST_INT (VOIDmode, (long) (3)),
        (rtx) 0, 0, OPTAB_WIDEN);
   emit_cmp_and_jump_insns (align_rtx, (const_int_rtx[64]), EQ, ((void *)0),
       (0 ? DImode : SImode), 1, align_4_label);
   emit_cmp_and_jump_insns (align_rtx, (const_int_rtx[64 +2]), EQ, ((void *)0),
       (0 ? DImode : SImode), 1, align_2_label);
   emit_cmp_and_jump_insns (align_rtx, (const_int_rtx[64 +2]), GTU, ((void *)0),
       (0 ? DImode : SImode), 1, align_3_label);
 }
      else
        {
   align_rtx = expand_binop ((0 ? DImode : SImode), (optab_table[OTI_and]), scratch1, (const_int_rtx[64 +2]),
        (rtx) 0, 0, OPTAB_WIDEN);
   emit_cmp_and_jump_insns (align_rtx, (const_int_rtx[64]), EQ, ((void *)0),
       (0 ? DImode : SImode), 1, align_4_label);
        }
      mem = change_address (src, QImode, out);
      emit_cmp_and_jump_insns (mem, (const_int_rtx[64]), EQ, ((void *)0),
          QImode, 1, end_0_label);
      if (0)
 emit_insn (gen_adddi3 (out, out, (const_int_rtx[64 +1])));
      else
 emit_insn (gen_addsi3 (out, out, (const_int_rtx[64 +1])));
      if (align != 2)
 {
   emit_label (align_2_label);
   emit_cmp_and_jump_insns (mem, (const_int_rtx[64]), EQ, ((void *)0), QImode, 1,
       end_0_label);
   if (0)
     emit_insn (gen_adddi3 (out, out, (const_int_rtx[64 +1])));
   else
     emit_insn (gen_addsi3 (out, out, (const_int_rtx[64 +1])));
   emit_label (align_3_label);
 }
      emit_cmp_and_jump_insns (mem, (const_int_rtx[64]), EQ, ((void *)0), QImode, 1,
          end_0_label);
      if (0)
 emit_insn (gen_adddi3 (out, out, (const_int_rtx[64 +1])));
      else
 emit_insn (gen_addsi3 (out, out, (const_int_rtx[64 +1])));
    }
  emit_label (align_4_label);
  mem = change_address (src, SImode, out);
  emit_move_insn (scratch, mem);
  if (0)
    emit_insn (gen_adddi3 (out, out, gen_rtx_CONST_INT (VOIDmode, (long) (4))));
  else
    emit_insn (gen_addsi3 (out, out, gen_rtx_CONST_INT (VOIDmode, (long) (4))));
  emit_insn (gen_addsi3 (tmpreg, scratch, gen_rtx_CONST_INT (VOIDmode, (long) (-0x01010101))));
  emit_insn (gen_one_cmplsi2 (scratch, scratch));
  emit_insn (gen_andsi3 (tmpreg, tmpreg, scratch));
  emit_insn (gen_andsi3 (tmpreg, tmpreg,
    gen_int_mode (0x80808080, SImode)));
  emit_cmp_and_jump_insns (tmpreg, (const_int_rtx[64]), EQ, 0, SImode, 1,
      align_4_label);
  if (((x86_cmove & (1 << ix86_arch)) || ((target_flags & 0x00004000) != 0)))
    {
       rtx reg = gen_reg_rtx (SImode);
       rtx reg2 = gen_reg_rtx ((0 ? DImode : SImode));
       emit_move_insn (reg, tmpreg);
       emit_insn (gen_lshrsi3 (reg, reg, gen_rtx_CONST_INT (VOIDmode, (long) (16))));
       emit_insn (gen_testsi_ccno_1 (tmpreg, gen_rtx_CONST_INT (VOIDmode, (long) (0x8080))));
       tmp = gen_rtx_REG (CCNOmode, 17);
       tmp = gen_rtx_fmt_ee (EQ, (VOIDmode), (tmp), ((const_int_rtx[64])));
       emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (tmpreg), (gen_rtx_fmt_eee (IF_THEN_ELSE, (SImode), (tmp), (reg), (tmpreg))))
                   );
       emit_insn (gen_rtx_fmt_ee (SET, (SImode), (reg2), (gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (out), ((const_int_rtx[64 +2])))))
                                                );
       tmp = gen_rtx_REG (CCNOmode, 17);
       tmp = gen_rtx_fmt_ee (EQ, (VOIDmode), (tmp), ((const_int_rtx[64])));
       emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (out), (gen_rtx_fmt_eee (IF_THEN_ELSE, ((0 ? DImode : SImode)), (tmp), (reg2), (out))))
                );
    }
  else
    {
       rtx end_2_label = gen_label_rtx ();
       emit_insn (gen_testsi_ccno_1 (tmpreg, gen_rtx_CONST_INT (VOIDmode, (long) (0x8080))));
       tmp = gen_rtx_REG (CCNOmode, 17);
       tmp = gen_rtx_fmt_ee (NE, (VOIDmode), (tmp), ((const_int_rtx[64])));
       tmp = gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (tmp), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (end_2_label))), ((global_rtl[GR_PC])))
                                   ;
       tmp = emit_jump_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (tmp)));
       (((tmp)->u.fld[9]).rtx1) = end_2_label;
       emit_insn (gen_lshrsi3 (tmpreg, tmpreg, gen_rtx_CONST_INT (VOIDmode, (long) (16))));
       if (0)
  emit_insn (gen_adddi3 (out, out, (const_int_rtx[64 +2])));
       else
  emit_insn (gen_addsi3 (out, out, (const_int_rtx[64 +2])));
       emit_label (end_2_label);
    }
  tmpreg = rtl_hooks.gen_lowpart (QImode, tmpreg);
  emit_insn (gen_addqi3_cc (tmpreg, tmpreg, tmpreg));
  cmp = gen_rtx_fmt_ee (LTU, ((0 ? DImode : SImode)), (gen_rtx_REG (CCmode, 17)), ((const_int_rtx[64])));
  if (0)
    emit_insn (gen_subdi3_carry_rex64 (out, out, gen_rtx_CONST_INT (VOIDmode, (long) (3)), cmp));
  else
    emit_insn (gen_subsi3_carry (out, out, gen_rtx_CONST_INT (VOIDmode, (long) (3)), cmp));
  emit_label (end_0_label);
}
void
ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
    rtx callarg2 ,
    rtx pop, int sibcall)
{
  rtx use = ((void *)0), call;
  if (pop == (const_int_rtx[64]))
    pop = ((void *)0);
  if (0 && pop)
    fancy_abort ("gcc.c", 699984, "?");
  if (! 0 && flag_pic
      && ((enum rtx_code) ((((fnaddr)->u.fld[0]).rtx1))->code) == SYMBOL_REF
      && ! (((((((((fnaddr)->u.fld[0]).rtx1)))->u.fld[1]).rtint) & (1 << 1)) != 0))
    use_reg (&use, pic_offset_table_rtx);
  if (0 && ((callarg2)->u.hwint[0]) >= 0)
    {
      rtx al = gen_rtx_REG (QImode, 0);
      emit_move_insn (al, callarg2);
      use_reg (&use, al);
    }
  if (! call_insn_operand ((((fnaddr)->u.fld[0]).rtx1), (0 ? DImode : SImode)))
    {
      fnaddr = copy_to_mode_reg ((0 ? DImode : SImode), (((fnaddr)->u.fld[0]).rtx1));
      fnaddr = gen_rtx_MEM (QImode, fnaddr);
    }
  if (sibcall && 0
      && !constant_call_address_operand ((((fnaddr)->u.fld[0]).rtx1), (0 ? DImode : SImode)))
    {
      rtx addr;
      addr = copy_to_mode_reg ((0 ? DImode : SImode), (((fnaddr)->u.fld[0]).rtx1));
      fnaddr = gen_rtx_REG ((0 ? DImode : SImode), (((((20 + 1) + 7) + 1) + 7) + 1) + 3 );
      emit_move_insn (fnaddr, addr);
      fnaddr = gen_rtx_MEM (QImode, fnaddr);
    }
  call = gen_rtx_fmt_ee (CALL, (VOIDmode), (fnaddr), (callarg1));
  if (retval)
    call = gen_rtx_fmt_ee (SET, (VOIDmode), (retval), (call));
  if (pop)
    {
      pop = gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])), (pop));
      pop = gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_STACK_POINTER])), (pop));
      call = gen_rtx_fmt_E (PARALLEL, (VOIDmode), (gen_rtvec (2, call, pop)));
    }
  call = emit_call_insn (call);
  if (use)
    (((call)->u.fld[9]).rtx1) = use;
}
static struct machine_function *
ix86_init_machine_status (void)
{
  struct machine_function *f;
  f = ggc_alloc_cleared_stat (sizeof (struct machine_function) );
  f->use_fast_prologue_epilogue_nregs = -1;
  return f;
}
rtx
assign_386_stack_local (enum machine_mode mode, int n)
{
  struct stack_local_entry *s;
  if (n < 0 || n >= 3)
    fancy_abort ("gcc.c", 700062, "?");
  for (s = (cfun->machine->stack_locals); s; s = s->next)
    if (s->mode == mode && s->n == n)
      return s->rtl;
  s = (struct stack_local_entry *)
    ggc_alloc_stat (sizeof (struct stack_local_entry) );
  s->n = n;
  s->mode = mode;
  s->rtl = assign_stack_local (mode, ((unsigned short) mode_size[mode]), 0);
  s->next = (cfun->machine->stack_locals);
  (cfun->machine->stack_locals) = s;
  return s->rtl;
}
static rtx ix86_tls_symbol;
rtx
ix86_tls_get_addr (void)
{
  if (!ix86_tls_symbol)
    {
      ix86_tls_symbol = gen_rtx_fmt_s00 (SYMBOL_REF, ((0 ? DImode : SImode)), (((ix86_tls_dialect == TLS_DIALECT_GNU) && !0) ? "___tls_get_addr" : "__tls_get_addr"))
                            ;
    }
  return ix86_tls_symbol;
}
static int
memory_address_length (rtx addr)
{
  struct ix86_address parts;
  rtx base, index, disp;
  int len;
  if (((enum rtx_code) (addr)->code) == PRE_DEC
      || ((enum rtx_code) (addr)->code) == POST_INC
      || ((enum rtx_code) (addr)->code) == PRE_MODIFY
      || ((enum rtx_code) (addr)->code) == POST_MODIFY)
    return 0;
  if (! ix86_decompose_address (addr, &parts))
    fancy_abort ("gcc.c", 700114, "?");
  base = parts.base;
  index = parts.index;
  disp = parts.disp;
  len = 0;
  if (base && !index && !disp)
    {
      if (addr == (global_rtl[GR_STACK_POINTER])
   || addr == (global_rtl[GR_ARG_POINTER])
   || addr == (global_rtl[GR_FRAME_POINTER])
   || addr == (global_rtl[GR_HARD_FRAME_POINTER]))
 len = 1;
    }
  else if (disp && !base && !index)
    len = 4;
  else
    {
      if (disp)
 {
   if (((enum rtx_code) (disp)->code) == CONST_INT
       && (('K') == 'I' ? (((disp)->u.hwint[0])) >= 0 && (((disp)->u.hwint[0])) <= 31 : ('K') == 'J' ? (((disp)->u.hwint[0])) >= 0 && (((disp)->u.hwint[0])) <= 63 : ('K') == 'K' ? (((disp)->u.hwint[0])) >= -128 && (((disp)->u.hwint[0])) <= 127 : ('K') == 'L' ? (((disp)->u.hwint[0])) == 0xff || (((disp)->u.hwint[0])) == 0xffff : ('K') == 'M' ? (((disp)->u.hwint[0])) >= 0 && (((disp)->u.hwint[0])) <= 3 : ('K') == 'N' ? (((disp)->u.hwint[0])) >= 0 && (((disp)->u.hwint[0])) <= 255 : 0)
       && base)
     len = 1;
   else
     len = 4;
 }
      else if (base == (global_rtl[GR_HARD_FRAME_POINTER]))
        len = 1;
      if (index
   || base == (global_rtl[GR_STACK_POINTER])
   || base == (global_rtl[GR_ARG_POINTER])
   || base == (global_rtl[GR_FRAME_POINTER]))
 len += 1;
    }
  return len;
}
int
ix86_attr_length_immediate_default (rtx insn, int shortform)
{
  int len = 0;
  int i;
  extract_insn_cached (insn);
  for (i = recog_data.n_operands - 1; i >= 0; --i)
    if (((rtx_class[(int) (((enum rtx_code) (recog_data.operand[i])->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (recog_data.operand[i])->code) == CONST_VECTOR))
      {
 if (len)
   fancy_abort ("gcc.c", 700181, "?");
 if (shortform
     && ((enum rtx_code) (recog_data.operand[i])->code) == CONST_INT
     && (('K') == 'I' ? (((recog_data.operand[i])->u.hwint[0])) >= 0 && (((recog_data.operand[i])->u.hwint[0])) <= 31 : ('K') == 'J' ? (((recog_data.operand[i])->u.hwint[0])) >= 0 && (((recog_data.operand[i])->u.hwint[0])) <= 63 : ('K') == 'K' ? (((recog_data.operand[i])->u.hwint[0])) >= -128 && (((recog_data.operand[i])->u.hwint[0])) <= 127 : ('K') == 'L' ? (((recog_data.operand[i])->u.hwint[0])) == 0xff || (((recog_data.operand[i])->u.hwint[0])) == 0xffff : ('K') == 'M' ? (((recog_data.operand[i])->u.hwint[0])) >= 0 && (((recog_data.operand[i])->u.hwint[0])) <= 3 : ('K') == 'N' ? (((recog_data.operand[i])->u.hwint[0])) >= 0 && (((recog_data.operand[i])->u.hwint[0])) <= 255 : 0))
   len = 1;
 else
   {
     switch (get_attr_mode (insn))
       {
  case MODE_QI:
    len+=1;
    break;
  case MODE_HI:
    len+=2;
    break;
  case MODE_SI:
    len+=4;
    break;
  case MODE_DI:
    len+=4;
    break;
  default:
    _fatal_insn ("unknown insn mode", insn, "gcc.c", 700204, "?");
       }
   }
      }
  return len;
}
int
ix86_attr_length_address_default (rtx insn)
{
  int i;
  if (get_attr_type (insn) == TYPE_LEA)
    {
      rtx set = (((insn)->u.fld[5]).rtx1);
      if (((enum rtx_code) (set)->code) == SET)
 ;
      else if (((enum rtx_code) (set)->code) == PARALLEL
        && ((enum rtx_code) ((((((set)->u.fld[0]).rtvec1))->elem[0]))->code) == SET)
 set = (((((set)->u.fld[0]).rtvec1))->elem[0]);
      else
 {
   return 0;
 }
      return memory_address_length ((((set)->u.fld[1]).rtx1));
    }
  extract_insn_cached (insn);
  for (i = recog_data.n_operands - 1; i >= 0; --i)
    if (((enum rtx_code) (recog_data.operand[i])->code) == MEM)
      {
 return memory_address_length ((((recog_data.operand[i])->u.fld[0]).rtx1));
 break;
      }
  return 0;
}
static int
ix86_issue_rate (void)
{
  switch (ix86_tune)
    {
    case PROCESSOR_PENTIUM:
    case PROCESSOR_K6:
      return 2;
    case PROCESSOR_PENTIUMPRO:
    case PROCESSOR_PENTIUM4:
    case PROCESSOR_ATHLON:
    case PROCESSOR_K8:
    case PROCESSOR_NOCONA:
      return 3;
    default:
      return 1;
    }
}
static int
ix86_flags_dependant (rtx insn, rtx dep_insn, enum attr_type insn_type)
{
  rtx set, set2;
  if (insn_type != TYPE_SETCC
      && insn_type != TYPE_ICMOV
      && insn_type != TYPE_FCMOV
      && insn_type != TYPE_IBR)
    return 0;
  if ((set = (((((enum rtx_code) (dep_insn)->code) == INSN) || (((enum rtx_code) (dep_insn)->code) == JUMP_INSN) || (((enum rtx_code) (dep_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((dep_insn)->u.fld[5]).rtx1))->code) == SET ? (((dep_insn)->u.fld[5]).rtx1) : single_set_2 (dep_insn, (((dep_insn)->u.fld[5]).rtx1))) : (rtx) 0)) != 0)
    {
      set = (((set)->u.fld[0]).rtx1);
      set2 = (rtx) 0;
    }
  else if (((enum rtx_code) ((((dep_insn)->u.fld[5]).rtx1))->code) == PARALLEL
    && ((((((((dep_insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->num_elem) == 2
    && ((enum rtx_code) (((((((((dep_insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->code) == SET
    && ((enum rtx_code) (((((((((dep_insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[1]))->code) == SET)
    {
      set = (((((((((((dep_insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1);
      set2 = (((((((((((dep_insn)->u.fld[5]).rtx1))->u.fld[0]).rtvec1))->elem[0]))->u.fld[0]).rtx1);
    }
  else
    return 0;
  if (((enum rtx_code) (set)->code) != REG || (((set)->u.fld[0]).rtuint) != 17)
    return 0;
  if (!reg_overlap_mentioned_p (set, (((insn)->u.fld[5]).rtx1)))
    return 0;
  if (set2 && reg_overlap_mentioned_p (set2, (((insn)->u.fld[5]).rtx1)))
    return 0;
  return 1;
}
static int
ix86_agi_dependant (rtx insn, rtx dep_insn, enum attr_type insn_type)
{
  rtx addr;
  if (insn_type == TYPE_LEA
      && (ix86_tune == PROCESSOR_PENTIUM))
    {
      addr = (((insn)->u.fld[5]).rtx1);
      if (((enum rtx_code) (addr)->code) == SET)
 ;
      else if (((enum rtx_code) (addr)->code) == PARALLEL
        && ((enum rtx_code) ((((((addr)->u.fld[0]).rtvec1))->elem[0]))->code) == SET)
 addr = (((((addr)->u.fld[0]).rtvec1))->elem[0]);
      else
 fancy_abort ("gcc.c", 700331, "?");
      addr = (((addr)->u.fld[1]).rtx1);
    }
  else
    {
      int i;
      extract_insn_cached (insn);
      for (i = recog_data.n_operands - 1; i >= 0; --i)
 if (((enum rtx_code) (recog_data.operand[i])->code) == MEM)
   {
     addr = (((recog_data.operand[i])->u.fld[0]).rtx1);
     goto found;
   }
      return 0;
    found:;
    }
  return modified_in_p (addr, dep_insn);
}
static int
ix86_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost)
{
  enum attr_type insn_type, dep_insn_type;
  enum attr_memory memory;
  rtx set, set2;
  int dep_insn_code_number;
  if (((enum reg_note) ((enum machine_mode) (link)->mode)) != 0)
    return 0;
  dep_insn_code_number = ((((dep_insn)->u.fld[6]).rtint) >= 0 ? (((dep_insn)->u.fld[6]).rtint) : recog_memoized_1 (dep_insn));
  if (dep_insn_code_number < 0 || ((((insn)->u.fld[6]).rtint) >= 0 ? (((insn)->u.fld[6]).rtint) : recog_memoized_1 (insn)) < 0)
    return cost;
  insn_type = get_attr_type (insn);
  dep_insn_type = get_attr_type (dep_insn);
  switch (ix86_tune)
    {
    case PROCESSOR_PENTIUM:
      if (ix86_agi_dependant (insn, dep_insn, insn_type))
 cost += 1;
      if (ix86_flags_dependant (insn, dep_insn, insn_type))
 cost = 0;
      if (insn_type == TYPE_FMOV
   && get_attr_memory (insn) == MEMORY_STORE
   && !ix86_agi_dependant (insn, dep_insn, insn_type))
 cost += 1;
      break;
    case PROCESSOR_PENTIUMPRO:
      memory = get_attr_memory (insn);
      if (get_attr_fp_int_src (dep_insn))
 cost += 5;
      if (insn_type == TYPE_FMOV
   && (set = (((((enum rtx_code) (dep_insn)->code) == INSN) || (((enum rtx_code) (dep_insn)->code) == JUMP_INSN) || (((enum rtx_code) (dep_insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((dep_insn)->u.fld[5]).rtx1))->code) == SET ? (((dep_insn)->u.fld[5]).rtx1) : single_set_2 (dep_insn, (((dep_insn)->u.fld[5]).rtx1))) : (rtx) 0)) != (rtx) 0
   && (set2 = (((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) ? (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == SET ? (((insn)->u.fld[5]).rtx1) : single_set_2 (insn, (((insn)->u.fld[5]).rtx1))) : (rtx) 0)) != (rtx) 0
   && rtx_equal_p ((((set)->u.fld[0]).rtx1), (((set2)->u.fld[1]).rtx1))
   && ((enum rtx_code) ((((set2)->u.fld[0]).rtx1))->code) == MEM)
 cost += 1;
      if ((memory == MEMORY_LOAD || memory == MEMORY_BOTH)
   && !ix86_agi_dependant (insn, dep_insn, insn_type))
 {
   if (dep_insn_type == TYPE_IMOV
       || dep_insn_type == TYPE_FMOV)
     cost = 1;
   else if (cost > 1)
     cost--;
 }
      break;
    case PROCESSOR_K6:
      memory = get_attr_memory (insn);
      if ((insn_type == TYPE_PUSH || insn_type == TYPE_POP)
   && (dep_insn_type == TYPE_PUSH || dep_insn_type == TYPE_POP))
 return 1;
      if (get_attr_fp_int_src (dep_insn))
 cost += 5;
      if ((memory == MEMORY_LOAD || memory == MEMORY_BOTH)
   && !ix86_agi_dependant (insn, dep_insn, insn_type))
 {
   if (dep_insn_type == TYPE_IMOV
       || dep_insn_type == TYPE_FMOV)
     cost = 1;
   else if (cost > 2)
     cost -= 2;
   else
     cost = 1;
 }
      break;
    case PROCESSOR_ATHLON:
    case PROCESSOR_K8:
      memory = get_attr_memory (insn);
      if ((memory == MEMORY_LOAD || memory == MEMORY_BOTH)
   && !ix86_agi_dependant (insn, dep_insn, insn_type))
 {
   enum attr_unit unit = get_attr_unit (insn);
   int loadcost = 3;
   if (unit == UNIT_INTEGER || unit == UNIT_UNKNOWN)
     loadcost = 3;
   else
     loadcost = (ix86_tune == PROCESSOR_ATHLON) ? 2 : 0;
   if (cost >= loadcost)
     cost -= loadcost;
   else
     cost = 0;
 }
    default:
      break;
    }
  return cost;
}
static int
ia32_use_dfa_pipeline_interface (void)
{
  if ((ix86_tune == PROCESSOR_PENTIUM)
      || (ix86_tune == PROCESSOR_PENTIUMPRO)
      || (ix86_tune == PROCESSOR_K6)
      || ((ix86_tune == PROCESSOR_K8) || (ix86_tune == PROCESSOR_ATHLON)))
    return 1;
  return 0;
}
static int
ia32_multipass_dfa_lookahead (void)
{
  if (ix86_tune == PROCESSOR_PENTIUM)
    return 2;
  if (ix86_tune == PROCESSOR_PENTIUMPRO
      || ix86_tune == PROCESSOR_K6)
    return 1;
  else
    return 0;
}
int
ix86_constant_alignment (tree exp, int align)
{
  if (((enum tree_code) (exp)->common.code) == REAL_CST)
    {
      if (((((exp)->common.type))->type.mode) == DFmode && align < 64)
 return 64;
      else if (((((((exp)->common.type))->type.mode)) == XFmode || (((((exp)->common.type))->type.mode)) == TFmode || ((((((exp)->common.type))->type.mode)) == TImode || (((((exp)->common.type))->type.mode)) == V16QImode || (((((exp)->common.type))->type.mode)) == TFmode || (((((exp)->common.type))->type.mode)) == V8HImode || (((((exp)->common.type))->type.mode)) == V2DFmode || (((((exp)->common.type))->type.mode)) == V2DImode || (((((exp)->common.type))->type.mode)) == V4SFmode || (((((exp)->common.type))->type.mode)) == V4SImode)) && align < 128)
 return 128;
    }
  else if (!optimize_size && ((enum tree_code) (exp)->common.code) == STRING1_CST
    && ((exp)->string11.length) >= 31 && align < (8 * (0 ? 8 : 4)))
    return (8 * (0 ? 8 : 4));
  return align;
}
int
ix86_data_alignment (tree type, int align)
{
  if ((((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE)
       && ((type)->type.size)
       && ((enum tree_code) (((type)->type.size))->common.code) == INTEGER_CST
       && ((((((type)->type.size))->int_cst.int_cst).low) >= 256
    || (((((type)->type.size))->int_cst.int_cst).high)) && align < 256)
    return 256;
  if (0)
    {
      if ((((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE)
    && ((type)->type.size)
    && ((enum tree_code) (((type)->type.size))->common.code) == INTEGER_CST
    && ((((((type)->type.size))->int_cst.int_cst).low) >= 128
        || (((((type)->type.size))->int_cst.int_cst).high)) && align < 128)
 return 128;
    }
  if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
    {
      if (((((type)->common.type))->type.mode) == DFmode && align < 64)
 return 64;
      if (((((((type)->common.type))->type.mode)) == XFmode || (((((type)->common.type))->type.mode)) == TFmode || ((((((type)->common.type))->type.mode)) == TImode || (((((type)->common.type))->type.mode)) == V16QImode || (((((type)->common.type))->type.mode)) == TFmode || (((((type)->common.type))->type.mode)) == V8HImode || (((((type)->common.type))->type.mode)) == V2DFmode || (((((type)->common.type))->type.mode)) == V2DImode || (((((type)->common.type))->type.mode)) == V4SFmode || (((((type)->common.type))->type.mode)) == V4SImode)) && align < 128)
 return 128;
    }
  else if (((enum tree_code) (type)->common.code) == COMPLEX_TYPE)
    {
      if (((type)->type.mode) == DCmode && align < 64)
 return 64;
      if (((type)->type.mode) == XCmode && align < 128)
 return 128;
    }
  else if ((((enum tree_code) (type)->common.code) == RECORD_TYPE
     || ((enum tree_code) (type)->common.code) == UNION_TYPE
     || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE)
    && ((type)->type.value1s))
    {
      if (((((type)->type.value1s))->decl.mode) == DFmode && align < 64)
 return 64;
      if (((((((type)->type.value1s))->decl.mode)) == XFmode || (((((type)->type.value1s))->decl.mode)) == TFmode || ((((((type)->type.value1s))->decl.mode)) == TImode || (((((type)->type.value1s))->decl.mode)) == V16QImode || (((((type)->type.value1s))->decl.mode)) == TFmode || (((((type)->type.value1s))->decl.mode)) == V8HImode || (((((type)->type.value1s))->decl.mode)) == V2DFmode || (((((type)->type.value1s))->decl.mode)) == V2DImode || (((((type)->type.value1s))->decl.mode)) == V4SFmode || (((((type)->type.value1s))->decl.mode)) == V4SImode)) && align < 128)
 return 128;
    }
  else if (((enum tree_code) (type)->common.code) == REAL_TYPE || ((enum tree_code) (type)->common.code) == VECTOR_TYPE
    || ((enum tree_code) (type)->common.code) == INTEGER_TYPE)
    {
      if (((type)->type.mode) == DFmode && align < 64)
 return 64;
      if (((((type)->type.mode)) == XFmode || (((type)->type.mode)) == TFmode || ((((type)->type.mode)) == TImode || (((type)->type.mode)) == V16QImode || (((type)->type.mode)) == TFmode || (((type)->type.mode)) == V8HImode || (((type)->type.mode)) == V2DFmode || (((type)->type.mode)) == V2DImode || (((type)->type.mode)) == V4SFmode || (((type)->type.mode)) == V4SImode)) && align < 128)
 return 128;
    }
  return align;
}
int
ix86_local_alignment (tree type, int align)
{
  if (0)
    {
      if ((((enum tree_code) (type)->common.code) == ARRAY_TYPE || ((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (type)->common.code) == SET_TYPE)
    && ((type)->type.size)
    && ((enum tree_code) (((type)->type.size))->common.code) == INTEGER_CST
    && ((((((type)->type.size))->int_cst.int_cst).low) >= 16
        || (((((type)->type.size))->int_cst.int_cst).high)) && align < 128)
 return 128;
    }
  if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
    {
      if (((((type)->common.type))->type.mode) == DFmode && align < 64)
 return 64;
      if (((((((type)->common.type))->type.mode)) == XFmode || (((((type)->common.type))->type.mode)) == TFmode || ((((((type)->common.type))->type.mode)) == TImode || (((((type)->common.type))->type.mode)) == V16QImode || (((((type)->common.type))->type.mode)) == TFmode || (((((type)->common.type))->type.mode)) == V8HImode || (((((type)->common.type))->type.mode)) == V2DFmode || (((((type)->common.type))->type.mode)) == V2DImode || (((((type)->common.type))->type.mode)) == V4SFmode || (((((type)->common.type))->type.mode)) == V4SImode)) && align < 128)
 return 128;
    }
  else if (((enum tree_code) (type)->common.code) == COMPLEX_TYPE)
    {
      if (((type)->type.mode) == DCmode && align < 64)
 return 64;
      if (((type)->type.mode) == XCmode && align < 128)
 return 128;
    }
  else if ((((enum tree_code) (type)->common.code) == RECORD_TYPE
     || ((enum tree_code) (type)->common.code) == UNION_TYPE
     || ((enum tree_code) (type)->common.code) == QUAL_UNION_TYPE)
    && ((type)->type.value1s))
    {
      if (((((type)->type.value1s))->decl.mode) == DFmode && align < 64)
 return 64;
      if (((((((type)->type.value1s))->decl.mode)) == XFmode || (((((type)->type.value1s))->decl.mode)) == TFmode || ((((((type)->type.value1s))->decl.mode)) == TImode || (((((type)->type.value1s))->decl.mode)) == V16QImode || (((((type)->type.value1s))->decl.mode)) == TFmode || (((((type)->type.value1s))->decl.mode)) == V8HImode || (((((type)->type.value1s))->decl.mode)) == V2DFmode || (((((type)->type.value1s))->decl.mode)) == V2DImode || (((((type)->type.value1s))->decl.mode)) == V4SFmode || (((((type)->type.value1s))->decl.mode)) == V4SImode)) && align < 128)
 return 128;
    }
  else if (((enum tree_code) (type)->common.code) == REAL_TYPE || ((enum tree_code) (type)->common.code) == VECTOR_TYPE
    || ((enum tree_code) (type)->common.code) == INTEGER_TYPE)
    {
      if (((type)->type.mode) == DFmode && align < 64)
 return 64;
      if (((((type)->type.mode)) == XFmode || (((type)->type.mode)) == TFmode || ((((type)->type.mode)) == TImode || (((type)->type.mode)) == V16QImode || (((type)->type.mode)) == TFmode || (((type)->type.mode)) == V8HImode || (((type)->type.mode)) == V2DFmode || (((type)->type.mode)) == V2DImode || (((type)->type.mode)) == V4SFmode || (((type)->type.mode)) == V4SImode)) && align < 128)
 return 128;
    }
  return align;
}
void
x86_initialize_trampoline (rtx tramp, rtx fnaddr, rtx cxt)
{
  if (!0)
    {
      rtx disp = expand_binop (SImode, (optab_table[OTI_sub]), fnaddr,
          plus_constant_wide ((tramp), (long) (10)),
          (rtx) 0, 1, OPTAB_DIRECT);
      emit_move_insn (gen_rtx_MEM (QImode, tramp),
        gen_int_mode (0xb9, QImode));
      emit_move_insn (gen_rtx_MEM (SImode, plus_constant_wide ((tramp), (long) (1))), cxt);
      emit_move_insn (gen_rtx_MEM (QImode, plus_constant_wide ((tramp), (long) (5))),
        gen_int_mode (0xe9, QImode));
      emit_move_insn (gen_rtx_MEM (SImode, plus_constant_wide ((tramp), (long) (6))), disp);
    }
  else
    {
      int offset = 0;
      if (x86_64_zero_extended_value (fnaddr))
 {
   fnaddr = copy_to_mode_reg (DImode, fnaddr);
   emit_move_insn (gen_rtx_MEM (HImode, plus_constant_wide ((tramp), (long) (offset))),
     gen_int_mode (0xbb41, HImode));
   emit_move_insn (gen_rtx_MEM (SImode, plus_constant_wide ((tramp), (long) (offset + 2))),
     rtl_hooks.gen_lowpart (SImode, fnaddr));
   offset += 6;
 }
      else
 {
   emit_move_insn (gen_rtx_MEM (HImode, plus_constant_wide ((tramp), (long) (offset))),
     gen_int_mode (0xbb49, HImode));
   emit_move_insn (gen_rtx_MEM (DImode, plus_constant_wide ((tramp), (long) (offset + 2))),
     fnaddr);
   offset += 10;
 }
      emit_move_insn (gen_rtx_MEM (HImode, plus_constant_wide ((tramp), (long) (offset))),
        gen_int_mode (0xba49, HImode));
      emit_move_insn (gen_rtx_MEM (DImode, plus_constant_wide ((tramp), (long) (offset + 2))),
        cxt);
      offset += 10;
      emit_move_insn (gen_rtx_MEM (HImode, plus_constant_wide ((tramp), (long) (offset))),
        gen_int_mode (0xff49, HImode));
      emit_move_insn (gen_rtx_MEM (QImode, plus_constant_wide ((tramp), (long) (offset+2))),
        gen_int_mode (0xe3, QImode));
      offset += 3;
      if (offset > (0 ? 23 : 10))
 fancy_abort ("gcc.c", 700715, "?");
    }
}
struct builtin_description
{
  const unsigned int mask;
  const enum insn_code icode;
  const char *const name;
  const enum ix86_builtins code;
  const enum rtx_code comparison;
  const unsigned int flag;
};
static const struct builtin_description bdesc_comi[] =
{
  { 0x00004000, CODE_FOR_sse_comi, "__builtin_ia32_comieq", IX86_BUILTIN_COMIEQSS, UNEQ, 0 },
  { 0x00004000, CODE_FOR_sse_comi, "__builtin_ia32_comilt", IX86_BUILTIN_COMILTSS, UNLT, 0 },
  { 0x00004000, CODE_FOR_sse_comi, "__builtin_ia32_comile", IX86_BUILTIN_COMILESS, UNLE, 0 },
  { 0x00004000, CODE_FOR_sse_comi, "__builtin_ia32_comigt", IX86_BUILTIN_COMIGTSS, GT, 0 },
  { 0x00004000, CODE_FOR_sse_comi, "__builtin_ia32_comige", IX86_BUILTIN_COMIGESS, GE, 0 },
  { 0x00004000, CODE_FOR_sse_comi, "__builtin_ia32_comineq", IX86_BUILTIN_COMINEQSS, LTGT, 0 },
  { 0x00004000, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomieq", IX86_BUILTIN_UCOMIEQSS, UNEQ, 0 },
  { 0x00004000, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomilt", IX86_BUILTIN_UCOMILTSS, UNLT, 0 },
  { 0x00004000, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomile", IX86_BUILTIN_UCOMILESS, UNLE, 0 },
  { 0x00004000, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomigt", IX86_BUILTIN_UCOMIGTSS, GT, 0 },
  { 0x00004000, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomige", IX86_BUILTIN_UCOMIGESS, GE, 0 },
  { 0x00004000, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomineq", IX86_BUILTIN_UCOMINEQSS, LTGT, 0 },
  { 0x00008000, CODE_FOR_sse2_comi, "__builtin_ia32_comisdeq", IX86_BUILTIN_COMIEQSD, UNEQ, 0 },
  { 0x00008000, CODE_FOR_sse2_comi, "__builtin_ia32_comisdlt", IX86_BUILTIN_COMILTSD, UNLT, 0 },
  { 0x00008000, CODE_FOR_sse2_comi, "__builtin_ia32_comisdle", IX86_BUILTIN_COMILESD, UNLE, 0 },
  { 0x00008000, CODE_FOR_sse2_comi, "__builtin_ia32_comisdgt", IX86_BUILTIN_COMIGTSD, GT, 0 },
  { 0x00008000, CODE_FOR_sse2_comi, "__builtin_ia32_comisdge", IX86_BUILTIN_COMIGESD, GE, 0 },
  { 0x00008000, CODE_FOR_sse2_comi, "__builtin_ia32_comisdneq", IX86_BUILTIN_COMINEQSD, LTGT, 0 },
  { 0x00008000, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdeq", IX86_BUILTIN_UCOMIEQSD, UNEQ, 0 },
  { 0x00008000, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdlt", IX86_BUILTIN_UCOMILTSD, UNLT, 0 },
  { 0x00008000, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdle", IX86_BUILTIN_UCOMILESD, UNLE, 0 },
  { 0x00008000, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdgt", IX86_BUILTIN_UCOMIGTSD, GT, 0 },
  { 0x00008000, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdge", IX86_BUILTIN_UCOMIGESD, GE, 0 },
  { 0x00008000, CODE_FOR_sse2_ucomi, "__builtin_ia32_ucomisdneq", IX86_BUILTIN_UCOMINEQSD, LTGT, 0 }
};
static const struct builtin_description bdesc_2arg[] =
{
  { 0x00004000, CODE_FOR_addv4sf3, "__builtin_ia32_addps", IX86_BUILTIN_ADDPS, 0, 0 },
  { 0x00004000, CODE_FOR_subv4sf3, "__builtin_ia32_subps", IX86_BUILTIN_SUBPS, 0, 0 },
  { 0x00004000, CODE_FOR_mulv4sf3, "__builtin_ia32_mulps", IX86_BUILTIN_MULPS, 0, 0 },
  { 0x00004000, CODE_FOR_divv4sf3, "__builtin_ia32_divps", IX86_BUILTIN_DIVPS, 0, 0 },
  { 0x00004000, CODE_FOR_vmaddv4sf3, "__builtin_ia32_addss", IX86_BUILTIN_ADDSS, 0, 0 },
  { 0x00004000, CODE_FOR_vmsubv4sf3, "__builtin_ia32_subss", IX86_BUILTIN_SUBSS, 0, 0 },
  { 0x00004000, CODE_FOR_vmmulv4sf3, "__builtin_ia32_mulss", IX86_BUILTIN_MULSS, 0, 0 },
  { 0x00004000, CODE_FOR_vmdivv4sf3, "__builtin_ia32_divss", IX86_BUILTIN_DIVSS, 0, 0 },
  { 0x00004000, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpeqps", IX86_BUILTIN_CMPEQPS, EQ, 0 },
  { 0x00004000, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpltps", IX86_BUILTIN_CMPLTPS, LT, 0 },
  { 0x00004000, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpleps", IX86_BUILTIN_CMPLEPS, LE, 0 },
  { 0x00004000, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpgtps", IX86_BUILTIN_CMPGTPS, LT, 1 },
  { 0x00004000, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpgeps", IX86_BUILTIN_CMPGEPS, LE, 1 },
  { 0x00004000, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpunordps", IX86_BUILTIN_CMPUNORDPS, UNORDERED, 0 },
  { 0x00004000, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpneqps", IX86_BUILTIN_CMPNEQPS, EQ, 0 },
  { 0x00004000, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpnltps", IX86_BUILTIN_CMPNLTPS, LT, 0 },
  { 0x00004000, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpnleps", IX86_BUILTIN_CMPNLEPS, LE, 0 },
  { 0x00004000, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpngtps", IX86_BUILTIN_CMPNGTPS, LT, 1 },
  { 0x00004000, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpngeps", IX86_BUILTIN_CMPNGEPS, LE, 1 },
  { 0x00004000, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpordps", IX86_BUILTIN_CMPORDPS, UNORDERED, 0 },
  { 0x00004000, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpeqss", IX86_BUILTIN_CMPEQSS, EQ, 0 },
  { 0x00004000, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpltss", IX86_BUILTIN_CMPLTSS, LT, 0 },
  { 0x00004000, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpless", IX86_BUILTIN_CMPLESS, LE, 0 },
  { 0x00004000, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpunordss", IX86_BUILTIN_CMPUNORDSS, UNORDERED, 0 },
  { 0x00004000, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpneqss", IX86_BUILTIN_CMPNEQSS, EQ, 0 },
  { 0x00004000, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnltss", IX86_BUILTIN_CMPNLTSS, LT, 0 },
  { 0x00004000, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnless", IX86_BUILTIN_CMPNLESS, LE, 0 },
  { 0x00004000, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpordss", IX86_BUILTIN_CMPORDSS, UNORDERED, 0 },
  { 0x00004000, CODE_FOR_sminv4sf3, "__builtin_ia32_minps", IX86_BUILTIN_MINPS, 0, 0 },
  { 0x00004000, CODE_FOR_smaxv4sf3, "__builtin_ia32_maxps", IX86_BUILTIN_MAXPS, 0, 0 },
  { 0x00004000, CODE_FOR_vmsminv4sf3, "__builtin_ia32_minss", IX86_BUILTIN_MINSS, 0, 0 },
  { 0x00004000, CODE_FOR_vmsmaxv4sf3, "__builtin_ia32_maxss", IX86_BUILTIN_MAXSS, 0, 0 },
  { 0x00004000, CODE_FOR_sse_andv4sf3, "__builtin_ia32_andps", IX86_BUILTIN_ANDPS, 0, 0 },
  { 0x00004000, CODE_FOR_sse_nandv4sf3, "__builtin_ia32_andnps", IX86_BUILTIN_ANDNPS, 0, 0 },
  { 0x00004000, CODE_FOR_sse_iorv4sf3, "__builtin_ia32_orps", IX86_BUILTIN_ORPS, 0, 0 },
  { 0x00004000, CODE_FOR_sse_xorv4sf3, "__builtin_ia32_xorps", IX86_BUILTIN_XORPS, 0, 0 },
  { 0x00004000, CODE_FOR_sse_movss, "__builtin_ia32_movss", IX86_BUILTIN_MOVSS, 0, 0 },
  { 0x00004000, CODE_FOR_sse_movhlps, "__builtin_ia32_movhlps", IX86_BUILTIN_MOVHLPS, 0, 0 },
  { 0x00004000, CODE_FOR_sse_movlhps, "__builtin_ia32_movlhps", IX86_BUILTIN_MOVLHPS, 0, 0 },
  { 0x00004000, CODE_FOR_sse_unpckhps, "__builtin_ia32_unpckhps", IX86_BUILTIN_UNPCKHPS, 0, 0 },
  { 0x00004000, CODE_FOR_sse_unpcklps, "__builtin_ia32_unpcklps", IX86_BUILTIN_UNPCKLPS, 0, 0 },
  { 0x00002000, CODE_FOR_addv8qi3, "__builtin_ia32_paddb", IX86_BUILTIN_PADDB, 0, 0 },
  { 0x00002000, CODE_FOR_addv4hi3, "__builtin_ia32_paddw", IX86_BUILTIN_PADDW, 0, 0 },
  { 0x00002000, CODE_FOR_addv2si3, "__builtin_ia32_paddd", IX86_BUILTIN_PADDD, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_adddi3, "__builtin_ia32_paddq", IX86_BUILTIN_PADDQ, 0, 0 },
  { 0x00002000, CODE_FOR_subv8qi3, "__builtin_ia32_psubb", IX86_BUILTIN_PSUBB, 0, 0 },
  { 0x00002000, CODE_FOR_subv4hi3, "__builtin_ia32_psubw", IX86_BUILTIN_PSUBW, 0, 0 },
  { 0x00002000, CODE_FOR_subv2si3, "__builtin_ia32_psubd", IX86_BUILTIN_PSUBD, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_subdi3, "__builtin_ia32_psubq", IX86_BUILTIN_PSUBQ, 0, 0 },
  { 0x00002000, CODE_FOR_ssaddv8qi3, "__builtin_ia32_paddsb", IX86_BUILTIN_PADDSB, 0, 0 },
  { 0x00002000, CODE_FOR_ssaddv4hi3, "__builtin_ia32_paddsw", IX86_BUILTIN_PADDSW, 0, 0 },
  { 0x00002000, CODE_FOR_sssubv8qi3, "__builtin_ia32_psubsb", IX86_BUILTIN_PSUBSB, 0, 0 },
  { 0x00002000, CODE_FOR_sssubv4hi3, "__builtin_ia32_psubsw", IX86_BUILTIN_PSUBSW, 0, 0 },
  { 0x00002000, CODE_FOR_usaddv8qi3, "__builtin_ia32_paddusb", IX86_BUILTIN_PADDUSB, 0, 0 },
  { 0x00002000, CODE_FOR_usaddv4hi3, "__builtin_ia32_paddusw", IX86_BUILTIN_PADDUSW, 0, 0 },
  { 0x00002000, CODE_FOR_ussubv8qi3, "__builtin_ia32_psubusb", IX86_BUILTIN_PSUBUSB, 0, 0 },
  { 0x00002000, CODE_FOR_ussubv4hi3, "__builtin_ia32_psubusw", IX86_BUILTIN_PSUBUSW, 0, 0 },
  { 0x00002000, CODE_FOR_mulv4hi3, "__builtin_ia32_pmullw", IX86_BUILTIN_PMULLW, 0, 0 },
  { 0x00002000, CODE_FOR_smulv4hi3_highpart, "__builtin_ia32_pmulhw", IX86_BUILTIN_PMULHW, 0, 0 },
  { 0x00004000 | 0x00040000, CODE_FOR_umulv4hi3_highpart, "__builtin_ia32_pmulhuw", IX86_BUILTIN_PMULHUW, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_anddi3, "__builtin_ia32_pand", IX86_BUILTIN_PAND, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_nanddi3, "__builtin_ia32_pandn", IX86_BUILTIN_PANDN, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_iordi3, "__builtin_ia32_por", IX86_BUILTIN_POR, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_xordi3, "__builtin_ia32_pxor", IX86_BUILTIN_PXOR, 0, 0 },
  { 0x00004000 | 0x00040000, CODE_FOR_mmx_uavgv8qi3, "__builtin_ia32_pavgb", IX86_BUILTIN_PAVGB, 0, 0 },
  { 0x00004000 | 0x00040000, CODE_FOR_mmx_uavgv4hi3, "__builtin_ia32_pavgw", IX86_BUILTIN_PAVGW, 0, 0 },
  { 0x00002000, CODE_FOR_eqv8qi3, "__builtin_ia32_pcmpeqb", IX86_BUILTIN_PCMPEQB, 0, 0 },
  { 0x00002000, CODE_FOR_eqv4hi3, "__builtin_ia32_pcmpeqw", IX86_BUILTIN_PCMPEQW, 0, 0 },
  { 0x00002000, CODE_FOR_eqv2si3, "__builtin_ia32_pcmpeqd", IX86_BUILTIN_PCMPEQD, 0, 0 },
  { 0x00002000, CODE_FOR_gtv8qi3, "__builtin_ia32_pcmpgtb", IX86_BUILTIN_PCMPGTB, 0, 0 },
  { 0x00002000, CODE_FOR_gtv4hi3, "__builtin_ia32_pcmpgtw", IX86_BUILTIN_PCMPGTW, 0, 0 },
  { 0x00002000, CODE_FOR_gtv2si3, "__builtin_ia32_pcmpgtd", IX86_BUILTIN_PCMPGTD, 0, 0 },
  { 0x00004000 | 0x00040000, CODE_FOR_umaxv8qi3, "__builtin_ia32_pmaxub", IX86_BUILTIN_PMAXUB, 0, 0 },
  { 0x00004000 | 0x00040000, CODE_FOR_smaxv4hi3, "__builtin_ia32_pmaxsw", IX86_BUILTIN_PMAXSW, 0, 0 },
  { 0x00004000 | 0x00040000, CODE_FOR_uminv8qi3, "__builtin_ia32_pminub", IX86_BUILTIN_PMINUB, 0, 0 },
  { 0x00004000 | 0x00040000, CODE_FOR_sminv4hi3, "__builtin_ia32_pminsw", IX86_BUILTIN_PMINSW, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_punpckhbw, "__builtin_ia32_punpckhbw", IX86_BUILTIN_PUNPCKHBW, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_punpckhwd, "__builtin_ia32_punpckhwd", IX86_BUILTIN_PUNPCKHWD, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_punpckhdq, "__builtin_ia32_punpckhdq", IX86_BUILTIN_PUNPCKHDQ, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_punpcklbw, "__builtin_ia32_punpcklbw", IX86_BUILTIN_PUNPCKLBW, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_punpcklwd, "__builtin_ia32_punpcklwd", IX86_BUILTIN_PUNPCKLWD, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_punpckldq, "__builtin_ia32_punpckldq", IX86_BUILTIN_PUNPCKLDQ, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_packsswb, 0, IX86_BUILTIN_PACKSSWB, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_packssdw, 0, IX86_BUILTIN_PACKSSDW, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_packuswb, 0, IX86_BUILTIN_PACKUSWB, 0, 0 },
  { 0x00004000, CODE_FOR_cvtpi2ps, 0, IX86_BUILTIN_CVTPI2PS, 0, 0 },
  { 0x00004000, CODE_FOR_cvtsi2ss, 0, IX86_BUILTIN_CVTSI2SS, 0, 0 },
  { 0x00004000 | 0x00100000, CODE_FOR_cvtsi2ssq, 0, IX86_BUILTIN_CVTSI642SS, 0, 0 },
  { 0x00002000, CODE_FOR_ashlv4hi3, 0, IX86_BUILTIN_PSLLW, 0, 0 },
  { 0x00002000, CODE_FOR_ashlv4hi3, 0, IX86_BUILTIN_PSLLWI, 0, 0 },
  { 0x00002000, CODE_FOR_ashlv2si3, 0, IX86_BUILTIN_PSLLD, 0, 0 },
  { 0x00002000, CODE_FOR_ashlv2si3, 0, IX86_BUILTIN_PSLLDI, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_ashldi3, 0, IX86_BUILTIN_PSLLQ, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_ashldi3, 0, IX86_BUILTIN_PSLLQI, 0, 0 },
  { 0x00002000, CODE_FOR_lshrv4hi3, 0, IX86_BUILTIN_PSRLW, 0, 0 },
  { 0x00002000, CODE_FOR_lshrv4hi3, 0, IX86_BUILTIN_PSRLWI, 0, 0 },
  { 0x00002000, CODE_FOR_lshrv2si3, 0, IX86_BUILTIN_PSRLD, 0, 0 },
  { 0x00002000, CODE_FOR_lshrv2si3, 0, IX86_BUILTIN_PSRLDI, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_lshrdi3, 0, IX86_BUILTIN_PSRLQ, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_lshrdi3, 0, IX86_BUILTIN_PSRLQI, 0, 0 },
  { 0x00002000, CODE_FOR_ashrv4hi3, 0, IX86_BUILTIN_PSRAW, 0, 0 },
  { 0x00002000, CODE_FOR_ashrv4hi3, 0, IX86_BUILTIN_PSRAWI, 0, 0 },
  { 0x00002000, CODE_FOR_ashrv2si3, 0, IX86_BUILTIN_PSRAD, 0, 0 },
  { 0x00002000, CODE_FOR_ashrv2si3, 0, IX86_BUILTIN_PSRADI, 0, 0 },
  { 0x00004000 | 0x00040000, CODE_FOR_mmx_psadbw, 0, IX86_BUILTIN_PSADBW, 0, 0 },
  { 0x00002000, CODE_FOR_mmx_pmaddwd, 0, IX86_BUILTIN_PMADDWD, 0, 0 },
  { 0x00008000, CODE_FOR_addv2df3, "__builtin_ia32_addpd", IX86_BUILTIN_ADDPD, 0, 0 },
  { 0x00008000, CODE_FOR_subv2df3, "__builtin_ia32_subpd", IX86_BUILTIN_SUBPD, 0, 0 },
  { 0x00008000, CODE_FOR_mulv2df3, "__builtin_ia32_mulpd", IX86_BUILTIN_MULPD, 0, 0 },
  { 0x00008000, CODE_FOR_divv2df3, "__builtin_ia32_divpd", IX86_BUILTIN_DIVPD, 0, 0 },
  { 0x00008000, CODE_FOR_vmaddv2df3, "__builtin_ia32_addsd", IX86_BUILTIN_ADDSD, 0, 0 },
  { 0x00008000, CODE_FOR_vmsubv2df3, "__builtin_ia32_subsd", IX86_BUILTIN_SUBSD, 0, 0 },
  { 0x00008000, CODE_FOR_vmmulv2df3, "__builtin_ia32_mulsd", IX86_BUILTIN_MULSD, 0, 0 },
  { 0x00008000, CODE_FOR_vmdivv2df3, "__builtin_ia32_divsd", IX86_BUILTIN_DIVSD, 0, 0 },
  { 0x00008000, CODE_FOR_maskcmpv2df3, "__builtin_ia32_cmpeqpd", IX86_BUILTIN_CMPEQPD, EQ, 0 },
  { 0x00008000, CODE_FOR_maskcmpv2df3, "__builtin_ia32_cmpltpd", IX86_BUILTIN_CMPLTPD, LT, 0 },
  { 0x00008000, CODE_FOR_maskcmpv2df3, "__builtin_ia32_cmplepd", IX86_BUILTIN_CMPLEPD, LE, 0 },
  { 0x00008000, CODE_FOR_maskcmpv2df3, "__builtin_ia32_cmpgtpd", IX86_BUILTIN_CMPGTPD, LT, 1 },
  { 0x00008000, CODE_FOR_maskcmpv2df3, "__builtin_ia32_cmpgepd", IX86_BUILTIN_CMPGEPD, LE, 1 },
  { 0x00008000, CODE_FOR_maskcmpv2df3, "__builtin_ia32_cmpunordpd", IX86_BUILTIN_CMPUNORDPD, UNORDERED, 0 },
  { 0x00008000, CODE_FOR_maskncmpv2df3, "__builtin_ia32_cmpneqpd", IX86_BUILTIN_CMPNEQPD, EQ, 0 },
  { 0x00008000, CODE_FOR_maskncmpv2df3, "__builtin_ia32_cmpnltpd", IX86_BUILTIN_CMPNLTPD, LT, 0 },
  { 0x00008000, CODE_FOR_maskncmpv2df3, "__builtin_ia32_cmpnlepd", IX86_BUILTIN_CMPNLEPD, LE, 0 },
  { 0x00008000, CODE_FOR_maskncmpv2df3, "__builtin_ia32_cmpngtpd", IX86_BUILTIN_CMPNGTPD, LT, 1 },
  { 0x00008000, CODE_FOR_maskncmpv2df3, "__builtin_ia32_cmpngepd", IX86_BUILTIN_CMPNGEPD, LE, 1 },
  { 0x00008000, CODE_FOR_maskncmpv2df3, "__builtin_ia32_cmpordpd", IX86_BUILTIN_CMPORDPD, UNORDERED, 0 },
  { 0x00008000, CODE_FOR_vmmaskcmpv2df3, "__builtin_ia32_cmpeqsd", IX86_BUILTIN_CMPEQSD, EQ, 0 },
  { 0x00008000, CODE_FOR_vmmaskcmpv2df3, "__builtin_ia32_cmpltsd", IX86_BUILTIN_CMPLTSD, LT, 0 },
  { 0x00008000, CODE_FOR_vmmaskcmpv2df3, "__builtin_ia32_cmplesd", IX86_BUILTIN_CMPLESD, LE, 0 },
  { 0x00008000, CODE_FOR_vmmaskcmpv2df3, "__builtin_ia32_cmpunordsd", IX86_BUILTIN_CMPUNORDSD, UNORDERED, 0 },
  { 0x00008000, CODE_FOR_vmmaskncmpv2df3, "__builtin_ia32_cmpneqsd", IX86_BUILTIN_CMPNEQSD, EQ, 0 },
  { 0x00008000, CODE_FOR_vmmaskncmpv2df3, "__builtin_ia32_cmpnltsd", IX86_BUILTIN_CMPNLTSD, LT, 0 },
  { 0x00008000, CODE_FOR_vmmaskncmpv2df3, "__builtin_ia32_cmpnlesd", IX86_BUILTIN_CMPNLESD, LE, 0 },
  { 0x00008000, CODE_FOR_vmmaskncmpv2df3, "__builtin_ia32_cmpordsd", IX86_BUILTIN_CMPORDSD, UNORDERED, 0 },
  { 0x00008000, CODE_FOR_sminv2df3, "__builtin_ia32_minpd", IX86_BUILTIN_MINPD, 0, 0 },
  { 0x00008000, CODE_FOR_smaxv2df3, "__builtin_ia32_maxpd", IX86_BUILTIN_MAXPD, 0, 0 },
  { 0x00008000, CODE_FOR_vmsminv2df3, "__builtin_ia32_minsd", IX86_BUILTIN_MINSD, 0, 0 },
  { 0x00008000, CODE_FOR_vmsmaxv2df3, "__builtin_ia32_maxsd", IX86_BUILTIN_MAXSD, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_andv2df3, "__builtin_ia32_andpd", IX86_BUILTIN_ANDPD, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_nandv2df3, "__builtin_ia32_andnpd", IX86_BUILTIN_ANDNPD, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_iorv2df3, "__builtin_ia32_orpd", IX86_BUILTIN_ORPD, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_xorv2df3, "__builtin_ia32_xorpd", IX86_BUILTIN_XORPD, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_movsd, "__builtin_ia32_movsd", IX86_BUILTIN_MOVSD, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_unpckhpd, "__builtin_ia32_unpckhpd", IX86_BUILTIN_UNPCKHPD, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_unpcklpd, "__builtin_ia32_unpcklpd", IX86_BUILTIN_UNPCKLPD, 0, 0 },
  { 0x00008000, CODE_FOR_addv16qi3, "__builtin_ia32_paddb128", IX86_BUILTIN_PADDB128, 0, 0 },
  { 0x00008000, CODE_FOR_addv8hi3, "__builtin_ia32_paddw128", IX86_BUILTIN_PADDW128, 0, 0 },
  { 0x00008000, CODE_FOR_addv4si3, "__builtin_ia32_paddd128", IX86_BUILTIN_PADDD128, 0, 0 },
  { 0x00008000, CODE_FOR_addv2di3, "__builtin_ia32_paddq128", IX86_BUILTIN_PADDQ128, 0, 0 },
  { 0x00008000, CODE_FOR_subv16qi3, "__builtin_ia32_psubb128", IX86_BUILTIN_PSUBB128, 0, 0 },
  { 0x00008000, CODE_FOR_subv8hi3, "__builtin_ia32_psubw128", IX86_BUILTIN_PSUBW128, 0, 0 },
  { 0x00008000, CODE_FOR_subv4si3, "__builtin_ia32_psubd128", IX86_BUILTIN_PSUBD128, 0, 0 },
  { 0x00008000, CODE_FOR_subv2di3, "__builtin_ia32_psubq128", IX86_BUILTIN_PSUBQ128, 0, 0 },
  { 0x00002000, CODE_FOR_ssaddv16qi3, "__builtin_ia32_paddsb128", IX86_BUILTIN_PADDSB128, 0, 0 },
  { 0x00002000, CODE_FOR_ssaddv8hi3, "__builtin_ia32_paddsw128", IX86_BUILTIN_PADDSW128, 0, 0 },
  { 0x00002000, CODE_FOR_sssubv16qi3, "__builtin_ia32_psubsb128", IX86_BUILTIN_PSUBSB128, 0, 0 },
  { 0x00002000, CODE_FOR_sssubv8hi3, "__builtin_ia32_psubsw128", IX86_BUILTIN_PSUBSW128, 0, 0 },
  { 0x00002000, CODE_FOR_usaddv16qi3, "__builtin_ia32_paddusb128", IX86_BUILTIN_PADDUSB128, 0, 0 },
  { 0x00002000, CODE_FOR_usaddv8hi3, "__builtin_ia32_paddusw128", IX86_BUILTIN_PADDUSW128, 0, 0 },
  { 0x00002000, CODE_FOR_ussubv16qi3, "__builtin_ia32_psubusb128", IX86_BUILTIN_PSUBUSB128, 0, 0 },
  { 0x00002000, CODE_FOR_ussubv8hi3, "__builtin_ia32_psubusw128", IX86_BUILTIN_PSUBUSW128, 0, 0 },
  { 0x00008000, CODE_FOR_mulv8hi3, "__builtin_ia32_pmullw128", IX86_BUILTIN_PMULLW128, 0, 0 },
  { 0x00008000, CODE_FOR_smulv8hi3_highpart, "__builtin_ia32_pmulhw128", IX86_BUILTIN_PMULHW128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_umulsidi3, "__builtin_ia32_pmuludq", IX86_BUILTIN_PMULUDQ, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_umulv2siv2di3, "__builtin_ia32_pmuludq128", IX86_BUILTIN_PMULUDQ128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_andv2di3, "__builtin_ia32_pand128", IX86_BUILTIN_PAND128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_nandv2di3, "__builtin_ia32_pandn128", IX86_BUILTIN_PANDN128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_iorv2di3, "__builtin_ia32_por128", IX86_BUILTIN_POR128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_xorv2di3, "__builtin_ia32_pxor128", IX86_BUILTIN_PXOR128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_uavgv16qi3, "__builtin_ia32_pavgb128", IX86_BUILTIN_PAVGB128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_uavgv8hi3, "__builtin_ia32_pavgw128", IX86_BUILTIN_PAVGW128, 0, 0 },
  { 0x00008000, CODE_FOR_eqv16qi3, "__builtin_ia32_pcmpeqb128", IX86_BUILTIN_PCMPEQB128, 0, 0 },
  { 0x00008000, CODE_FOR_eqv8hi3, "__builtin_ia32_pcmpeqw128", IX86_BUILTIN_PCMPEQW128, 0, 0 },
  { 0x00008000, CODE_FOR_eqv4si3, "__builtin_ia32_pcmpeqd128", IX86_BUILTIN_PCMPEQD128, 0, 0 },
  { 0x00008000, CODE_FOR_gtv16qi3, "__builtin_ia32_pcmpgtb128", IX86_BUILTIN_PCMPGTB128, 0, 0 },
  { 0x00008000, CODE_FOR_gtv8hi3, "__builtin_ia32_pcmpgtw128", IX86_BUILTIN_PCMPGTW128, 0, 0 },
  { 0x00008000, CODE_FOR_gtv4si3, "__builtin_ia32_pcmpgtd128", IX86_BUILTIN_PCMPGTD128, 0, 0 },
  { 0x00008000, CODE_FOR_umaxv16qi3, "__builtin_ia32_pmaxub128", IX86_BUILTIN_PMAXUB128, 0, 0 },
  { 0x00008000, CODE_FOR_smaxv8hi3, "__builtin_ia32_pmaxsw128", IX86_BUILTIN_PMAXSW128, 0, 0 },
  { 0x00008000, CODE_FOR_uminv16qi3, "__builtin_ia32_pminub128", IX86_BUILTIN_PMINUB128, 0, 0 },
  { 0x00008000, CODE_FOR_sminv8hi3, "__builtin_ia32_pminsw128", IX86_BUILTIN_PMINSW128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_punpckhbw, "__builtin_ia32_punpckhbw128", IX86_BUILTIN_PUNPCKHBW128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_punpckhwd, "__builtin_ia32_punpckhwd128", IX86_BUILTIN_PUNPCKHWD128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_punpckhdq, "__builtin_ia32_punpckhdq128", IX86_BUILTIN_PUNPCKHDQ128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_punpckhqdq, "__builtin_ia32_punpckhqdq128", IX86_BUILTIN_PUNPCKHQDQ128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_punpcklbw, "__builtin_ia32_punpcklbw128", IX86_BUILTIN_PUNPCKLBW128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_punpcklwd, "__builtin_ia32_punpcklwd128", IX86_BUILTIN_PUNPCKLWD128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_punpckldq, "__builtin_ia32_punpckldq128", IX86_BUILTIN_PUNPCKLDQ128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_punpcklqdq, "__builtin_ia32_punpcklqdq128", IX86_BUILTIN_PUNPCKLQDQ128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_packsswb, "__builtin_ia32_packsswb128", IX86_BUILTIN_PACKSSWB128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_packssdw, "__builtin_ia32_packssdw128", IX86_BUILTIN_PACKSSDW128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_packuswb, "__builtin_ia32_packuswb128", IX86_BUILTIN_PACKUSWB128, 0, 0 },
  { 0x00008000, CODE_FOR_umulv8hi3_highpart, "__builtin_ia32_pmulhuw128", IX86_BUILTIN_PMULHUW128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_psadbw, 0, IX86_BUILTIN_PSADBW128, 0, 0 },
  { 0x00008000, CODE_FOR_ashlv8hi3_ti, 0, IX86_BUILTIN_PSLLW128, 0, 0 },
  { 0x00008000, CODE_FOR_ashlv8hi3, 0, IX86_BUILTIN_PSLLWI128, 0, 0 },
  { 0x00008000, CODE_FOR_ashlv4si3_ti, 0, IX86_BUILTIN_PSLLD128, 0, 0 },
  { 0x00008000, CODE_FOR_ashlv4si3, 0, IX86_BUILTIN_PSLLDI128, 0, 0 },
  { 0x00008000, CODE_FOR_ashlv2di3_ti, 0, IX86_BUILTIN_PSLLQ128, 0, 0 },
  { 0x00008000, CODE_FOR_ashlv2di3, 0, IX86_BUILTIN_PSLLQI128, 0, 0 },
  { 0x00008000, CODE_FOR_lshrv8hi3_ti, 0, IX86_BUILTIN_PSRLW128, 0, 0 },
  { 0x00008000, CODE_FOR_lshrv8hi3, 0, IX86_BUILTIN_PSRLWI128, 0, 0 },
  { 0x00008000, CODE_FOR_lshrv4si3_ti, 0, IX86_BUILTIN_PSRLD128, 0, 0 },
  { 0x00008000, CODE_FOR_lshrv4si3, 0, IX86_BUILTIN_PSRLDI128, 0, 0 },
  { 0x00008000, CODE_FOR_lshrv2di3_ti, 0, IX86_BUILTIN_PSRLQ128, 0, 0 },
  { 0x00008000, CODE_FOR_lshrv2di3, 0, IX86_BUILTIN_PSRLQI128, 0, 0 },
  { 0x00008000, CODE_FOR_ashrv8hi3_ti, 0, IX86_BUILTIN_PSRAW128, 0, 0 },
  { 0x00008000, CODE_FOR_ashrv8hi3, 0, IX86_BUILTIN_PSRAWI128, 0, 0 },
  { 0x00008000, CODE_FOR_ashrv4si3_ti, 0, IX86_BUILTIN_PSRAD128, 0, 0 },
  { 0x00008000, CODE_FOR_ashrv4si3, 0, IX86_BUILTIN_PSRADI128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_pmaddwd, 0, IX86_BUILTIN_PMADDWD128, 0, 0 },
  { 0x00008000, CODE_FOR_cvtsi2sd, 0, IX86_BUILTIN_CVTSI2SD, 0, 0 },
  { 0x00008000 | 0x00100000, CODE_FOR_cvtsi2sdq, 0, IX86_BUILTIN_CVTSI642SD, 0, 0 },
  { 0x00008000, CODE_FOR_cvtsd2ss, 0, IX86_BUILTIN_CVTSD2SS, 0, 0 },
  { 0x00008000, CODE_FOR_cvtss2sd, 0, IX86_BUILTIN_CVTSS2SD, 0, 0 },
  { 0x00010000, CODE_FOR_addsubv4sf3, "__builtin_ia32_addsubps", IX86_BUILTIN_ADDSUBPS, 0, 0 },
  { 0x00010000, CODE_FOR_addsubv2df3, "__builtin_ia32_addsubpd", IX86_BUILTIN_ADDSUBPD, 0, 0 },
  { 0x00010000, CODE_FOR_haddv4sf3, "__builtin_ia32_haddps", IX86_BUILTIN_HADDPS, 0, 0 },
  { 0x00010000, CODE_FOR_haddv2df3, "__builtin_ia32_haddpd", IX86_BUILTIN_HADDPD, 0, 0 },
  { 0x00010000, CODE_FOR_hsubv4sf3, "__builtin_ia32_hsubps", IX86_BUILTIN_HSUBPS, 0, 0 },
  { 0x00010000, CODE_FOR_hsubv2df3, "__builtin_ia32_hsubpd", IX86_BUILTIN_HSUBPD, 0, 0 }
};
static const struct builtin_description bdesc_1arg[] =
{
  { 0x00004000 | 0x00040000, CODE_FOR_mmx_pmovmskb, 0, IX86_BUILTIN_PMOVMSKB, 0, 0 },
  { 0x00004000, CODE_FOR_sse_movmskps, 0, IX86_BUILTIN_MOVMSKPS, 0, 0 },
  { 0x00004000, CODE_FOR_sqrtv4sf2, 0, IX86_BUILTIN_SQRTPS, 0, 0 },
  { 0x00004000, CODE_FOR_rsqrtv4sf2, 0, IX86_BUILTIN_RSQRTPS, 0, 0 },
  { 0x00004000, CODE_FOR_rcpv4sf2, 0, IX86_BUILTIN_RCPPS, 0, 0 },
  { 0x00004000, CODE_FOR_cvtps2pi, 0, IX86_BUILTIN_CVTPS2PI, 0, 0 },
  { 0x00004000, CODE_FOR_cvtss2si, 0, IX86_BUILTIN_CVTSS2SI, 0, 0 },
  { 0x00004000 | 0x00100000, CODE_FOR_cvtss2siq, 0, IX86_BUILTIN_CVTSS2SI64, 0, 0 },
  { 0x00004000, CODE_FOR_cvttps2pi, 0, IX86_BUILTIN_CVTTPS2PI, 0, 0 },
  { 0x00004000, CODE_FOR_cvttss2si, 0, IX86_BUILTIN_CVTTSS2SI, 0, 0 },
  { 0x00004000 | 0x00100000, CODE_FOR_cvttss2siq, 0, IX86_BUILTIN_CVTTSS2SI64, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_pmovmskb, 0, IX86_BUILTIN_PMOVMSKB128, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_movmskpd, 0, IX86_BUILTIN_MOVMSKPD, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_movq2dq, 0, IX86_BUILTIN_MOVQ2DQ, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_movdq2q, 0, IX86_BUILTIN_MOVDQ2Q, 0, 0 },
  { 0x00008000, CODE_FOR_sqrtv2df2, 0, IX86_BUILTIN_SQRTPD, 0, 0 },
  { 0x00008000, CODE_FOR_cvtdq2pd, 0, IX86_BUILTIN_CVTDQ2PD, 0, 0 },
  { 0x00008000, CODE_FOR_cvtdq2ps, 0, IX86_BUILTIN_CVTDQ2PS, 0, 0 },
  { 0x00008000, CODE_FOR_cvtpd2dq, 0, IX86_BUILTIN_CVTPD2DQ, 0, 0 },
  { 0x00008000, CODE_FOR_cvtpd2pi, 0, IX86_BUILTIN_CVTPD2PI, 0, 0 },
  { 0x00008000, CODE_FOR_cvtpd2ps, 0, IX86_BUILTIN_CVTPD2PS, 0, 0 },
  { 0x00008000, CODE_FOR_cvttpd2dq, 0, IX86_BUILTIN_CVTTPD2DQ, 0, 0 },
  { 0x00008000, CODE_FOR_cvttpd2pi, 0, IX86_BUILTIN_CVTTPD2PI, 0, 0 },
  { 0x00008000, CODE_FOR_cvtpi2pd, 0, IX86_BUILTIN_CVTPI2PD, 0, 0 },
  { 0x00008000, CODE_FOR_cvtsd2si, 0, IX86_BUILTIN_CVTSD2SI, 0, 0 },
  { 0x00008000, CODE_FOR_cvttsd2si, 0, IX86_BUILTIN_CVTTSD2SI, 0, 0 },
  { 0x00008000 | 0x00100000, CODE_FOR_cvtsd2siq, 0, IX86_BUILTIN_CVTSD2SI64, 0, 0 },
  { 0x00008000 | 0x00100000, CODE_FOR_cvttsd2siq, 0, IX86_BUILTIN_CVTTSD2SI64, 0, 0 },
  { 0x00008000, CODE_FOR_cvtps2dq, 0, IX86_BUILTIN_CVTPS2DQ, 0, 0 },
  { 0x00008000, CODE_FOR_cvtps2pd, 0, IX86_BUILTIN_CVTPS2PD, 0, 0 },
  { 0x00008000, CODE_FOR_cvttps2dq, 0, IX86_BUILTIN_CVTTPS2DQ, 0, 0 },
  { 0x00008000, CODE_FOR_sse2_movq, 0, IX86_BUILTIN_MOVQ, 0, 0 },
  { 0x00010000, CODE_FOR_movshdup, 0, IX86_BUILTIN_MOVSHDUP, 0, 0 },
  { 0x00010000, CODE_FOR_movsldup, 0, IX86_BUILTIN_MOVSLDUP, 0, 0 },
  { 0x00010000, CODE_FOR_movddup, 0, IX86_BUILTIN_MOVDDUP, 0, 0 }
};
void
ix86_init_builtins (void)
{
  if (((target_flags & 0x00002000) != 0))
    ix86_init_mmx_sse_builtins ();
}
static void
ix86_init_mmx_sse_builtins (void)
{
  const struct builtin_description * d;
  size_t i;
  tree V16QI_type_node = build_vector_type_for_mode (global_trees[TI_INTQI_TYPE], V16QImode);
  tree V2SI_type_node = build_vector_type_for_mode (global_trees[TI_INTSI_TYPE], V2SImode);
  tree V2SF_type_node = build_vector_type_for_mode (global_trees[TI_FLOAT_TYPE], V2SFmode);
  tree V2DI_type_node = build_vector_type_for_mode (global_trees[TI_INTDI_TYPE], V2DImode);
  tree V2DF_type_node = build_vector_type_for_mode (global_trees[TI_DOUBLE_TYPE], V2DFmode);
  tree V4SF_type_node = build_vector_type_for_mode (global_trees[TI_FLOAT_TYPE], V4SFmode);
  tree V4SI_type_node = build_vector_type_for_mode (global_trees[TI_INTSI_TYPE], V4SImode);
  tree V4HI_type_node = build_vector_type_for_mode (global_trees[TI_INTHI_TYPE], V4HImode);
  tree V8QI_type_node = build_vector_type_for_mode (global_trees[TI_INTQI_TYPE], V8QImode);
  tree V8HI_type_node = build_vector_type_for_mode (global_trees[TI_INTHI_TYPE], V8HImode);
  tree pchar_type_node = build_pointer_type (integer_types[itk_char]);
  tree pcchar_type_node = build_pointer_type (
        build_qualified_type ((integer_types[itk_char]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0)));
  tree pfloat_type_node = build_pointer_type (global_trees[TI_FLOAT_TYPE]);
  tree pcfloat_type_node = build_pointer_type (
        build_qualified_type ((global_trees[TI_FLOAT_TYPE]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0)));
  tree pv2si_type_node = build_pointer_type (V2SI_type_node);
  tree pv2di_type_node = build_pointer_type (V2DI_type_node);
  tree pdi_type_node = build_pointer_type (integer_types[itk_unsigned_long_long]);
  tree int_ftype_v4sf_v4sf
    = build_function_type_list (integer_types[itk_int],
    V4SF_type_node, V4SF_type_node, (tree) ((void *)0));
  tree v4si_ftype_v4sf_v4sf
    = build_function_type_list (V4SI_type_node,
    V4SF_type_node, V4SF_type_node, (tree) ((void *)0));
  tree int_ftype_v4sf
    = build_function_type_list (integer_types[itk_int],
    V4SF_type_node, (tree) ((void *)0));
  tree int64_ftype_v4sf
    = build_function_type_list (integer_types[itk_long_long],
    V4SF_type_node, (tree) ((void *)0));
  tree int_ftype_v8qi
    = build_function_type_list (integer_types[itk_int], V8QI_type_node, (tree) ((void *)0));
  tree v4sf_ftype_v4sf_int
    = build_function_type_list (V4SF_type_node,
    V4SF_type_node, integer_types[itk_int], (tree) ((void *)0));
  tree v4sf_ftype_v4sf_int64
    = build_function_type_list (V4SF_type_node,
    V4SF_type_node, integer_types[itk_long_long],
    (tree) ((void *)0));
  tree v4sf_ftype_v4sf_v2si
    = build_function_type_list (V4SF_type_node,
    V4SF_type_node, V2SI_type_node, (tree) ((void *)0));
  tree int_ftype_v4hi_int
    = build_function_type_list (integer_types[itk_int],
    V4HI_type_node, integer_types[itk_int], (tree) ((void *)0));
  tree v4hi_ftype_v4hi_int_int
    = build_function_type_list (V4HI_type_node, V4HI_type_node,
    integer_types[itk_int], integer_types[itk_int],
    (tree) ((void *)0));
  tree v8qi_ftype_v4hi_v4hi
    = build_function_type_list (V8QI_type_node,
    V4HI_type_node, V4HI_type_node, (tree) ((void *)0));
  tree v4hi_ftype_v2si_v2si
    = build_function_type_list (V4HI_type_node,
    V2SI_type_node, V2SI_type_node, (tree) ((void *)0));
  tree v4sf_ftype_v4sf_v4sf_int
    = build_function_type_list (V4SF_type_node,
    V4SF_type_node, V4SF_type_node,
    integer_types[itk_int], (tree) ((void *)0));
  tree v2si_ftype_v4hi_v4hi
    = build_function_type_list (V2SI_type_node,
    V4HI_type_node, V4HI_type_node, (tree) ((void *)0));
  tree v4hi_ftype_v4hi_int
    = build_function_type_list (V4HI_type_node,
    V4HI_type_node, integer_types[itk_int], (tree) ((void *)0));
  tree v4hi_ftype_v4hi_di
    = build_function_type_list (V4HI_type_node,
    V4HI_type_node, integer_types[itk_unsigned_long_long],
    (tree) ((void *)0));
  tree v2si_ftype_v2si_di
    = build_function_type_list (V2SI_type_node,
    V2SI_type_node, integer_types[itk_unsigned_long_long],
    (tree) ((void *)0));
  tree void_ftype_void
    = build_function_type (global_trees[TI_VOID_TYPE], global_trees[TI_VOID_LIST_NODE]);
  tree void_ftype_unsigned
    = build_function_type_list (global_trees[TI_VOID_TYPE], integer_types[itk_unsigned_int], (tree) ((void *)0));
  tree void_ftype_unsigned_unsigned
    = build_function_type_list (global_trees[TI_VOID_TYPE], integer_types[itk_unsigned_int],
    integer_types[itk_unsigned_int], (tree) ((void *)0));
  tree void_ftype_pcvoid_unsigned_unsigned
    = build_function_type_list (global_trees[TI_VOID_TYPE], global_trees[TI_CONST_PTR_TYPE],
    integer_types[itk_unsigned_int], integer_types[itk_unsigned_int],
    (tree) ((void *)0));
  tree unsigned_ftype_void
    = build_function_type (integer_types[itk_unsigned_int], global_trees[TI_VOID_LIST_NODE]);
  tree di_ftype_void
    = build_function_type (integer_types[itk_unsigned_long_long], global_trees[TI_VOID_LIST_NODE]);
  tree v4sf_ftype_void
    = build_function_type (V4SF_type_node, global_trees[TI_VOID_LIST_NODE]);
  tree v2si_ftype_v4sf
    = build_function_type_list (V2SI_type_node, V4SF_type_node, (tree) ((void *)0));
  tree void_ftype_v8qi_v8qi_pchar
    = build_function_type_list (global_trees[TI_VOID_TYPE],
    V8QI_type_node, V8QI_type_node,
    pchar_type_node, (tree) ((void *)0));
  tree v4sf_ftype_pcfloat
    = build_function_type_list (V4SF_type_node, pcfloat_type_node, (tree) ((void *)0));
  tree v4sf_ftype_v4sf_pv2si
    = build_function_type_list (V4SF_type_node,
    V4SF_type_node, pv2si_type_node, (tree) ((void *)0));
  tree void_ftype_pv2si_v4sf
    = build_function_type_list (global_trees[TI_VOID_TYPE],
    pv2si_type_node, V4SF_type_node, (tree) ((void *)0));
  tree void_ftype_pfloat_v4sf
    = build_function_type_list (global_trees[TI_VOID_TYPE],
    pfloat_type_node, V4SF_type_node, (tree) ((void *)0));
  tree void_ftype_pdi_di
    = build_function_type_list (global_trees[TI_VOID_TYPE],
    pdi_type_node, integer_types[itk_unsigned_long_long],
    (tree) ((void *)0));
  tree void_ftype_pv2di_v2di
    = build_function_type_list (global_trees[TI_VOID_TYPE],
    pv2di_type_node, V2DI_type_node, (tree) ((void *)0));
  tree v4sf_ftype_v4sf
    = build_function_type_list (V4SF_type_node, V4SF_type_node, (tree) ((void *)0));
  tree v4sf_ftype_v4sf_v4sf
    = build_function_type_list (V4SF_type_node,
    V4SF_type_node, V4SF_type_node, (tree) ((void *)0));
  tree v8qi_ftype_v8qi_v8qi
    = build_function_type_list (V8QI_type_node,
    V8QI_type_node, V8QI_type_node, (tree) ((void *)0));
  tree v4hi_ftype_v4hi_v4hi
    = build_function_type_list (V4HI_type_node,
    V4HI_type_node, V4HI_type_node, (tree) ((void *)0));
  tree v2si_ftype_v2si_v2si
    = build_function_type_list (V2SI_type_node,
    V2SI_type_node, V2SI_type_node, (tree) ((void *)0));
  tree di_ftype_di_di
    = build_function_type_list (integer_types[itk_unsigned_long_long],
    integer_types[itk_unsigned_long_long],
    integer_types[itk_unsigned_long_long], (tree) ((void *)0));
  tree v2si_ftype_v2sf
    = build_function_type_list (V2SI_type_node, V2SF_type_node, (tree) ((void *)0));
  tree v2sf_ftype_v2si
    = build_function_type_list (V2SF_type_node, V2SI_type_node, (tree) ((void *)0));
  tree v2si_ftype_v2si
    = build_function_type_list (V2SI_type_node, V2SI_type_node, (tree) ((void *)0));
  tree v2sf_ftype_v2sf
    = build_function_type_list (V2SF_type_node, V2SF_type_node, (tree) ((void *)0));
  tree v2sf_ftype_v2sf_v2sf
    = build_function_type_list (V2SF_type_node,
    V2SF_type_node, V2SF_type_node, (tree) ((void *)0));
  tree v2si_ftype_v2sf_v2sf
    = build_function_type_list (V2SI_type_node,
    V2SF_type_node, V2SF_type_node, (tree) ((void *)0));
  tree pint_type_node = build_pointer_type (integer_types[itk_int]);
  tree pcint_type_node = build_pointer_type (
        build_qualified_type ((integer_types[itk_int]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0)));
  tree pdouble_type_node = build_pointer_type (global_trees[TI_DOUBLE_TYPE]);
  tree pcdouble_type_node = build_pointer_type (
    build_qualified_type ((global_trees[TI_DOUBLE_TYPE]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0)));
  tree int_ftype_v2df_v2df
    = build_function_type_list (integer_types[itk_int],
    V2DF_type_node, V2DF_type_node, (tree) ((void *)0));
  tree ti_ftype_void
    = build_function_type (global_trees[TI_INTTI_TYPE], global_trees[TI_VOID_LIST_NODE]);
  tree v2di_ftype_void
    = build_function_type (V2DI_type_node, global_trees[TI_VOID_LIST_NODE]);
  tree ti_ftype_ti_ti
    = build_function_type_list (global_trees[TI_INTTI_TYPE],
    global_trees[TI_INTTI_TYPE], global_trees[TI_INTTI_TYPE], (tree) ((void *)0));
  tree void_ftype_pcvoid
    = build_function_type_list (global_trees[TI_VOID_TYPE], global_trees[TI_CONST_PTR_TYPE], (tree) ((void *)0));
  tree v2di_ftype_di
    = build_function_type_list (V2DI_type_node,
    integer_types[itk_unsigned_long_long], (tree) ((void *)0));
  tree di_ftype_v2di
    = build_function_type_list (integer_types[itk_unsigned_long_long],
    V2DI_type_node, (tree) ((void *)0));
  tree v4sf_ftype_v4si
    = build_function_type_list (V4SF_type_node, V4SI_type_node, (tree) ((void *)0));
  tree v4si_ftype_v4sf
    = build_function_type_list (V4SI_type_node, V4SF_type_node, (tree) ((void *)0));
  tree v2df_ftype_v4si
    = build_function_type_list (V2DF_type_node, V4SI_type_node, (tree) ((void *)0));
  tree v4si_ftype_v2df
    = build_function_type_list (V4SI_type_node, V2DF_type_node, (tree) ((void *)0));
  tree v2si_ftype_v2df
    = build_function_type_list (V2SI_type_node, V2DF_type_node, (tree) ((void *)0));
  tree v4sf_ftype_v2df
    = build_function_type_list (V4SF_type_node, V2DF_type_node, (tree) ((void *)0));
  tree v2df_ftype_v2si
    = build_function_type_list (V2DF_type_node, V2SI_type_node, (tree) ((void *)0));
  tree v2df_ftype_v4sf
    = build_function_type_list (V2DF_type_node, V4SF_type_node, (tree) ((void *)0));
  tree int_ftype_v2df
    = build_function_type_list (integer_types[itk_int], V2DF_type_node, (tree) ((void *)0));
  tree int64_ftype_v2df
    = build_function_type_list (integer_types[itk_long_long],
    V2DF_type_node, (tree) ((void *)0));
  tree v2df_ftype_v2df_int
    = build_function_type_list (V2DF_type_node,
    V2DF_type_node, integer_types[itk_int], (tree) ((void *)0));
  tree v2df_ftype_v2df_int64
    = build_function_type_list (V2DF_type_node,
    V2DF_type_node, integer_types[itk_long_long],
    (tree) ((void *)0));
  tree v4sf_ftype_v4sf_v2df
    = build_function_type_list (V4SF_type_node,
    V4SF_type_node, V2DF_type_node, (tree) ((void *)0));
  tree v2df_ftype_v2df_v4sf
    = build_function_type_list (V2DF_type_node,
    V2DF_type_node, V4SF_type_node, (tree) ((void *)0));
  tree v2df_ftype_v2df_v2df_int
    = build_function_type_list (V2DF_type_node,
    V2DF_type_node, V2DF_type_node,
    integer_types[itk_int],
    (tree) ((void *)0));
  tree v2df_ftype_v2df_pv2si
    = build_function_type_list (V2DF_type_node,
    V2DF_type_node, pv2si_type_node, (tree) ((void *)0));
  tree void_ftype_pv2si_v2df
    = build_function_type_list (global_trees[TI_VOID_TYPE],
    pv2si_type_node, V2DF_type_node, (tree) ((void *)0));
  tree void_ftype_pdouble_v2df
    = build_function_type_list (global_trees[TI_VOID_TYPE],
    pdouble_type_node, V2DF_type_node, (tree) ((void *)0));
  tree void_ftype_pint_int
    = build_function_type_list (global_trees[TI_VOID_TYPE],
    pint_type_node, integer_types[itk_int], (tree) ((void *)0));
  tree void_ftype_v16qi_v16qi_pchar
    = build_function_type_list (global_trees[TI_VOID_TYPE],
    V16QI_type_node, V16QI_type_node,
    pchar_type_node, (tree) ((void *)0));
  tree v2df_ftype_pcdouble
    = build_function_type_list (V2DF_type_node, pcdouble_type_node, (tree) ((void *)0));
  tree v2df_ftype_v2df_v2df
    = build_function_type_list (V2DF_type_node,
    V2DF_type_node, V2DF_type_node, (tree) ((void *)0));
  tree v16qi_ftype_v16qi_v16qi
    = build_function_type_list (V16QI_type_node,
    V16QI_type_node, V16QI_type_node, (tree) ((void *)0));
  tree v8hi_ftype_v8hi_v8hi
    = build_function_type_list (V8HI_type_node,
    V8HI_type_node, V8HI_type_node, (tree) ((void *)0));
  tree v4si_ftype_v4si_v4si
    = build_function_type_list (V4SI_type_node,
    V4SI_type_node, V4SI_type_node, (tree) ((void *)0));
  tree v2di_ftype_v2di_v2di
    = build_function_type_list (V2DI_type_node,
    V2DI_type_node, V2DI_type_node, (tree) ((void *)0));
  tree v2di_ftype_v2df_v2df
    = build_function_type_list (V2DI_type_node,
    V2DF_type_node, V2DF_type_node, (tree) ((void *)0));
  tree v2df_ftype_v2df
    = build_function_type_list (V2DF_type_node, V2DF_type_node, (tree) ((void *)0));
  tree v2df_ftype_double
    = build_function_type_list (V2DF_type_node, global_trees[TI_DOUBLE_TYPE], (tree) ((void *)0));
  tree v2df_ftype_double_double
    = build_function_type_list (V2DF_type_node,
    global_trees[TI_DOUBLE_TYPE], global_trees[TI_DOUBLE_TYPE], (tree) ((void *)0));
  tree int_ftype_v8hi_int
    = build_function_type_list (integer_types[itk_int],
    V8HI_type_node, integer_types[itk_int], (tree) ((void *)0));
  tree v8hi_ftype_v8hi_int_int
    = build_function_type_list (V8HI_type_node,
    V8HI_type_node, integer_types[itk_int],
    integer_types[itk_int], (tree) ((void *)0));
  tree v2di_ftype_v2di_int
    = build_function_type_list (V2DI_type_node,
    V2DI_type_node, integer_types[itk_int], (tree) ((void *)0));
  tree v4si_ftype_v4si_int
    = build_function_type_list (V4SI_type_node,
    V4SI_type_node, integer_types[itk_int], (tree) ((void *)0));
  tree v8hi_ftype_v8hi_int
    = build_function_type_list (V8HI_type_node,
    V8HI_type_node, integer_types[itk_int], (tree) ((void *)0));
  tree v8hi_ftype_v8hi_v2di
    = build_function_type_list (V8HI_type_node,
    V8HI_type_node, V2DI_type_node, (tree) ((void *)0));
  tree v4si_ftype_v4si_v2di
    = build_function_type_list (V4SI_type_node,
    V4SI_type_node, V2DI_type_node, (tree) ((void *)0));
  tree v4si_ftype_v8hi_v8hi
    = build_function_type_list (V4SI_type_node,
    V8HI_type_node, V8HI_type_node, (tree) ((void *)0));
  tree di_ftype_v8qi_v8qi
    = build_function_type_list (integer_types[itk_unsigned_long_long],
    V8QI_type_node, V8QI_type_node, (tree) ((void *)0));
  tree v2di_ftype_v16qi_v16qi
    = build_function_type_list (V2DI_type_node,
    V16QI_type_node, V16QI_type_node, (tree) ((void *)0));
  tree int_ftype_v16qi
    = build_function_type_list (integer_types[itk_int], V16QI_type_node, (tree) ((void *)0));
  tree v16qi_ftype_pcchar
    = build_function_type_list (V16QI_type_node, pcchar_type_node, (tree) ((void *)0));
  tree void_ftype_pchar_v16qi
    = build_function_type_list (global_trees[TI_VOID_TYPE],
           pchar_type_node, V16QI_type_node, (tree) ((void *)0));
  tree v4si_ftype_pcint
    = build_function_type_list (V4SI_type_node, pcint_type_node, (tree) ((void *)0));
  tree void_ftype_pcint_v4si
    = build_function_type_list (global_trees[TI_VOID_TYPE],
           pcint_type_node, V4SI_type_node, (tree) ((void *)0));
  tree v2di_ftype_v2di
    = build_function_type_list (V2DI_type_node, V2DI_type_node, (tree) ((void *)0));
  tree float80_type;
  tree float128_type;
  if (((global_trees[TI_LONG_DOUBLE_TYPE])->type.mode) == XFmode)
    (*lang_hooks.types.register_builtin_type) (global_trees[TI_LONG_DOUBLE_TYPE],
            "__float80");
  else
    {
      float80_type = make_node_stat (REAL_TYPE );
      ((float80_type)->type.precision) = 96;
      layout_type (float80_type);
      (*lang_hooks.types.register_builtin_type) (float80_type, "__float80");
    }
  float128_type = make_node_stat (REAL_TYPE );
  ((float128_type)->type.precision) = 128;
  layout_type (float128_type);
  (*lang_hooks.types.register_builtin_type) (float128_type, "__float128");
  for (i = 0, d = bdesc_2arg; i < (sizeof (bdesc_2arg) / sizeof ((bdesc_2arg)[0])); i++, d++)
    {
      enum machine_mode mode;
      tree type;
      if (d->name == 0)
 continue;
      mode = insn_data[d->icode].operand[1].mode;
      switch (mode)
 {
 case V16QImode:
   type = v16qi_ftype_v16qi_v16qi;
   break;
 case V8HImode:
   type = v8hi_ftype_v8hi_v8hi;
   break;
 case V4SImode:
   type = v4si_ftype_v4si_v4si;
   break;
 case V2DImode:
   type = v2di_ftype_v2di_v2di;
   break;
 case V2DFmode:
   type = v2df_ftype_v2df_v2df;
   break;
 case TImode:
   type = ti_ftype_ti_ti;
   break;
 case V4SFmode:
   type = v4sf_ftype_v4sf_v4sf;
   break;
 case V8QImode:
   type = v8qi_ftype_v8qi_v8qi;
   break;
 case V4HImode:
   type = v4hi_ftype_v4hi_v4hi;
   break;
 case V2SImode:
   type = v2si_ftype_v2si_v2si;
   break;
 case DImode:
   type = di_ftype_di_di;
   break;
 default:
   fancy_abort ("gcc.c", 701489, "?");
 }
      if (d->icode == CODE_FOR_maskcmpv4sf3
   || d->icode == CODE_FOR_maskncmpv4sf3
   || d->icode == CODE_FOR_vmmaskcmpv4sf3
   || d->icode == CODE_FOR_vmmaskncmpv4sf3)
 type = v4si_ftype_v4sf_v4sf;
      if (d->icode == CODE_FOR_maskcmpv2df3
   || d->icode == CODE_FOR_maskncmpv2df3
   || d->icode == CODE_FOR_vmmaskcmpv2df3
   || d->icode == CODE_FOR_vmmaskncmpv2df3)
 type = v2di_ftype_v2df_v2df;
      do { if ((d->mask) & target_flags && (!((d->mask) & 0x00100000) || 0)) builtin_function ((d->name), (type), (d->code), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
    }
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_mmx_zero"), (di_ftype_void), (IX86_BUILTIN_MMX_ZERO), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_emms"), (void_ftype_void), (IX86_BUILTIN_EMMS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psllw"), (v4hi_ftype_v4hi_di), (IX86_BUILTIN_PSLLW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pslld"), (v2si_ftype_v2si_di), (IX86_BUILTIN_PSLLD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psllq"), (di_ftype_di_di), (IX86_BUILTIN_PSLLQ), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrlw"), (v4hi_ftype_v4hi_di), (IX86_BUILTIN_PSRLW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrld"), (v2si_ftype_v2si_di), (IX86_BUILTIN_PSRLD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrlq"), (di_ftype_di_di), (IX86_BUILTIN_PSRLQ), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psraw"), (v4hi_ftype_v4hi_di), (IX86_BUILTIN_PSRAW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrad"), (v2si_ftype_v2si_di), (IX86_BUILTIN_PSRAD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pshufw"), (v4hi_ftype_v4hi_int), (IX86_BUILTIN_PSHUFW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pmaddwd"), (v2si_ftype_v4hi_v4hi), (IX86_BUILTIN_PMADDWD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  for (i = 0, d = bdesc_comi; i < (sizeof (bdesc_comi) / sizeof ((bdesc_comi)[0])); i++, d++)
    if (d->mask == 0x00008000)
      do { if ((d->mask) & target_flags && (!((d->mask) & 0x00100000) || 0)) builtin_function ((d->name), (int_ftype_v2df_v2df), (d->code), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
    else
      do { if ((d->mask) & target_flags && (!((d->mask) & 0x00100000) || 0)) builtin_function ((d->name), (int_ftype_v4sf_v4sf), (d->code), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_packsswb"), (v8qi_ftype_v4hi_v4hi), (IX86_BUILTIN_PACKSSWB), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_packssdw"), (v4hi_ftype_v2si_v2si), (IX86_BUILTIN_PACKSSDW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00002000) & target_flags && (!((0x00002000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_packuswb"), (v8qi_ftype_v4hi_v4hi), (IX86_BUILTIN_PACKUSWB), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_ldmxcsr"), (void_ftype_unsigned), (IX86_BUILTIN_LDMXCSR), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_stmxcsr"), (unsigned_ftype_void), (IX86_BUILTIN_STMXCSR), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtpi2ps"), (v4sf_ftype_v4sf_v2si), (IX86_BUILTIN_CVTPI2PS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtps2pi"), (v2si_ftype_v4sf), (IX86_BUILTIN_CVTPS2PI), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtsi2ss"), (v4sf_ftype_v4sf_int), (IX86_BUILTIN_CVTSI2SS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000 | 0x00100000) & target_flags && (!((0x00004000 | 0x00100000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtsi642ss"), (v4sf_ftype_v4sf_int64), (IX86_BUILTIN_CVTSI642SS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtss2si"), (int_ftype_v4sf), (IX86_BUILTIN_CVTSS2SI), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000 | 0x00100000) & target_flags && (!((0x00004000 | 0x00100000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtss2si64"), (int64_ftype_v4sf), (IX86_BUILTIN_CVTSS2SI64), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvttps2pi"), (v2si_ftype_v4sf), (IX86_BUILTIN_CVTTPS2PI), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvttss2si"), (int_ftype_v4sf), (IX86_BUILTIN_CVTTSS2SI), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000 | 0x00100000) & target_flags && (!((0x00004000 | 0x00100000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvttss2si64"), (int64_ftype_v4sf), (IX86_BUILTIN_CVTTSS2SI64), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000 | 0x00040000) & target_flags && (!((0x00004000 | 0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pextrw"), (int_ftype_v4hi_int), (IX86_BUILTIN_PEXTRW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000 | 0x00040000) & target_flags && (!((0x00004000 | 0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pinsrw"), (v4hi_ftype_v4hi_int_int), (IX86_BUILTIN_PINSRW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000 | 0x00040000) & target_flags && (!((0x00004000 | 0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_maskmovq"), (void_ftype_v8qi_v8qi_pchar), (IX86_BUILTIN_MASKMOVQ), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadaps"), (v4sf_ftype_pcfloat), (IX86_BUILTIN_LOADAPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadups"), (v4sf_ftype_pcfloat), (IX86_BUILTIN_LOADUPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadss"), (v4sf_ftype_pcfloat), (IX86_BUILTIN_LOADSS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storeaps"), (void_ftype_pfloat_v4sf), (IX86_BUILTIN_STOREAPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storeups"), (void_ftype_pfloat_v4sf), (IX86_BUILTIN_STOREUPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storess"), (void_ftype_pfloat_v4sf), (IX86_BUILTIN_STORESS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadhps"), (v4sf_ftype_v4sf_pv2si), (IX86_BUILTIN_LOADHPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadlps"), (v4sf_ftype_v4sf_pv2si), (IX86_BUILTIN_LOADLPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storehps"), (void_ftype_pv2si_v4sf), (IX86_BUILTIN_STOREHPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storelps"), (void_ftype_pv2si_v4sf), (IX86_BUILTIN_STORELPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movmskps"), (int_ftype_v4sf), (IX86_BUILTIN_MOVMSKPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000 | 0x00040000) & target_flags && (!((0x00004000 | 0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pmovmskb"), (int_ftype_v8qi), (IX86_BUILTIN_PMOVMSKB), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movntps"), (void_ftype_pfloat_v4sf), (IX86_BUILTIN_MOVNTPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000 | 0x00040000) & target_flags && (!((0x00004000 | 0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movntq"), (void_ftype_pdi_di), (IX86_BUILTIN_MOVNTQ), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000 | 0x00040000) & target_flags && (!((0x00004000 | 0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_sfence"), (void_ftype_void), (IX86_BUILTIN_SFENCE), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000 | 0x00040000) & target_flags && (!((0x00004000 | 0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psadbw"), (di_ftype_v8qi_v8qi), (IX86_BUILTIN_PSADBW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_rcpps"), (v4sf_ftype_v4sf), (IX86_BUILTIN_RCPPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_rcpss"), (v4sf_ftype_v4sf), (IX86_BUILTIN_RCPSS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_rsqrtps"), (v4sf_ftype_v4sf), (IX86_BUILTIN_RSQRTPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_rsqrtss"), (v4sf_ftype_v4sf), (IX86_BUILTIN_RSQRTSS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_sqrtps"), (v4sf_ftype_v4sf), (IX86_BUILTIN_SQRTPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_sqrtss"), (v4sf_ftype_v4sf), (IX86_BUILTIN_SQRTSS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_shufps"), (v4sf_ftype_v4sf_v4sf_int), (IX86_BUILTIN_SHUFPS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_femms"), (void_ftype_void), (IX86_BUILTIN_FEMMS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pavgusb"), (v8qi_ftype_v8qi_v8qi), (IX86_BUILTIN_PAVGUSB), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pf2id"), (v2si_ftype_v2sf), (IX86_BUILTIN_PF2ID), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfacc"), (v2sf_ftype_v2sf_v2sf), (IX86_BUILTIN_PFACC), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfadd"), (v2sf_ftype_v2sf_v2sf), (IX86_BUILTIN_PFADD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfcmpeq"), (v2si_ftype_v2sf_v2sf), (IX86_BUILTIN_PFCMPEQ), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfcmpge"), (v2si_ftype_v2sf_v2sf), (IX86_BUILTIN_PFCMPGE), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfcmpgt"), (v2si_ftype_v2sf_v2sf), (IX86_BUILTIN_PFCMPGT), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfmax"), (v2sf_ftype_v2sf_v2sf), (IX86_BUILTIN_PFMAX), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfmin"), (v2sf_ftype_v2sf_v2sf), (IX86_BUILTIN_PFMIN), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfmul"), (v2sf_ftype_v2sf_v2sf), (IX86_BUILTIN_PFMUL), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfrcp"), (v2sf_ftype_v2sf), (IX86_BUILTIN_PFRCP), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfrcpit1"), (v2sf_ftype_v2sf_v2sf), (IX86_BUILTIN_PFRCPIT1), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfrcpit2"), (v2sf_ftype_v2sf_v2sf), (IX86_BUILTIN_PFRCPIT2), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfrsqrt"), (v2sf_ftype_v2sf), (IX86_BUILTIN_PFRSQRT), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfrsqit1"), (v2sf_ftype_v2sf_v2sf), (IX86_BUILTIN_PFRSQIT1), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfsub"), (v2sf_ftype_v2sf_v2sf), (IX86_BUILTIN_PFSUB), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfsubr"), (v2sf_ftype_v2sf_v2sf), (IX86_BUILTIN_PFSUBR), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pi2fd"), (v2sf_ftype_v2si), (IX86_BUILTIN_PI2FD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00020000) & target_flags && (!((0x00020000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pmulhrw"), (v4hi_ftype_v4hi_v4hi), (IX86_BUILTIN_PMULHRW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00040000) & target_flags && (!((0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pf2iw"), (v2si_ftype_v2sf), (IX86_BUILTIN_PF2IW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00040000) & target_flags && (!((0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfnacc"), (v2sf_ftype_v2sf_v2sf), (IX86_BUILTIN_PFNACC), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00040000) & target_flags && (!((0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pfpnacc"), (v2sf_ftype_v2sf_v2sf), (IX86_BUILTIN_PFPNACC), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00040000) & target_flags && (!((0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pi2fw"), (v2sf_ftype_v2si), (IX86_BUILTIN_PI2FW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00040000) & target_flags && (!((0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pswapdsf"), (v2sf_ftype_v2sf), (IX86_BUILTIN_PSWAPDSF), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00040000) & target_flags && (!((0x00040000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pswapdsi"), (v2si_ftype_v2si), (IX86_BUILTIN_PSWAPDSI), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_setzerops"), (v4sf_ftype_void), (IX86_BUILTIN_SSE_ZERO), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pextrw128"), (int_ftype_v8hi_int), (IX86_BUILTIN_PEXTRW128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pinsrw128"), (v8hi_ftype_v8hi_int_int), (IX86_BUILTIN_PINSRW128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_maskmovdqu"), (void_ftype_v16qi_v16qi_pchar), (IX86_BUILTIN_MASKMOVDQU), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movq2dq"), (v2di_ftype_di), (IX86_BUILTIN_MOVQ2DQ), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movdq2q"), (di_ftype_v2di), (IX86_BUILTIN_MOVDQ2Q), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadapd"), (v2df_ftype_pcdouble), (IX86_BUILTIN_LOADAPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadupd"), (v2df_ftype_pcdouble), (IX86_BUILTIN_LOADUPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadsd"), (v2df_ftype_pcdouble), (IX86_BUILTIN_LOADSD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storeapd"), (void_ftype_pdouble_v2df), (IX86_BUILTIN_STOREAPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storeupd"), (void_ftype_pdouble_v2df), (IX86_BUILTIN_STOREUPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storesd"), (void_ftype_pdouble_v2df), (IX86_BUILTIN_STORESD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadhpd"), (v2df_ftype_v2df_pv2si), (IX86_BUILTIN_LOADHPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadlpd"), (v2df_ftype_v2df_pv2si), (IX86_BUILTIN_LOADLPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storehpd"), (void_ftype_pv2si_v2df), (IX86_BUILTIN_STOREHPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storelpd"), (void_ftype_pv2si_v2df), (IX86_BUILTIN_STORELPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movmskpd"), (int_ftype_v2df), (IX86_BUILTIN_MOVMSKPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pmovmskb128"), (int_ftype_v16qi), (IX86_BUILTIN_PMOVMSKB128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movnti"), (void_ftype_pint_int), (IX86_BUILTIN_MOVNTI), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movntpd"), (void_ftype_pdouble_v2df), (IX86_BUILTIN_MOVNTPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movntdq"), (void_ftype_pv2di_v2di), (IX86_BUILTIN_MOVNTDQ), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pshufd"), (v4si_ftype_v4si_int), (IX86_BUILTIN_PSHUFD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pshuflw"), (v8hi_ftype_v8hi_int), (IX86_BUILTIN_PSHUFLW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pshufhw"), (v8hi_ftype_v8hi_int), (IX86_BUILTIN_PSHUFHW), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psadbw128"), (v2di_ftype_v16qi_v16qi), (IX86_BUILTIN_PSADBW128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_sqrtpd"), (v2df_ftype_v2df), (IX86_BUILTIN_SQRTPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_sqrtsd"), (v2df_ftype_v2df), (IX86_BUILTIN_SQRTSD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_shufpd"), (v2df_ftype_v2df_v2df_int), (IX86_BUILTIN_SHUFPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtdq2pd"), (v2df_ftype_v4si), (IX86_BUILTIN_CVTDQ2PD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtdq2ps"), (v4sf_ftype_v4si), (IX86_BUILTIN_CVTDQ2PS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtpd2dq"), (v4si_ftype_v2df), (IX86_BUILTIN_CVTPD2DQ), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtpd2pi"), (v2si_ftype_v2df), (IX86_BUILTIN_CVTPD2PI), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtpd2ps"), (v4sf_ftype_v2df), (IX86_BUILTIN_CVTPD2PS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvttpd2dq"), (v4si_ftype_v2df), (IX86_BUILTIN_CVTTPD2DQ), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvttpd2pi"), (v2si_ftype_v2df), (IX86_BUILTIN_CVTTPD2PI), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtpi2pd"), (v2df_ftype_v2si), (IX86_BUILTIN_CVTPI2PD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtsd2si"), (int_ftype_v2df), (IX86_BUILTIN_CVTSD2SI), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvttsd2si"), (int_ftype_v2df), (IX86_BUILTIN_CVTTSD2SI), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000 | 0x00100000) & target_flags && (!((0x00008000 | 0x00100000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtsd2si64"), (int64_ftype_v2df), (IX86_BUILTIN_CVTSD2SI64), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000 | 0x00100000) & target_flags && (!((0x00008000 | 0x00100000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvttsd2si64"), (int64_ftype_v2df), (IX86_BUILTIN_CVTTSD2SI64), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtps2dq"), (v4si_ftype_v4sf), (IX86_BUILTIN_CVTPS2DQ), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtps2pd"), (v2df_ftype_v4sf), (IX86_BUILTIN_CVTPS2PD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvttps2dq"), (v4si_ftype_v4sf), (IX86_BUILTIN_CVTTPS2DQ), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtsi2sd"), (v2df_ftype_v2df_int), (IX86_BUILTIN_CVTSI2SD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000 | 0x00100000) & target_flags && (!((0x00008000 | 0x00100000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtsi642sd"), (v2df_ftype_v2df_int64), (IX86_BUILTIN_CVTSI642SD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtsd2ss"), (v4sf_ftype_v4sf_v2df), (IX86_BUILTIN_CVTSD2SS), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_cvtss2sd"), (v2df_ftype_v2df_v4sf), (IX86_BUILTIN_CVTSS2SD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_setpd1"), (v2df_ftype_double), (IX86_BUILTIN_SETPD1), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_setpd"), (v2df_ftype_double_double), (IX86_BUILTIN_SETPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_setzeropd"), (ti_ftype_void), (IX86_BUILTIN_CLRPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadpd1"), (v2df_ftype_pcdouble), (IX86_BUILTIN_LOADPD1), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadrpd"), (v2df_ftype_pcdouble), (IX86_BUILTIN_LOADRPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storepd1"), (void_ftype_pdouble_v2df), (IX86_BUILTIN_STOREPD1), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storerpd"), (void_ftype_pdouble_v2df), (IX86_BUILTIN_STORERPD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_clflush"), (void_ftype_pcvoid), (IX86_BUILTIN_CLFLUSH), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_lfence"), (void_ftype_void), (IX86_BUILTIN_LFENCE), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_mfence"), (void_ftype_void), (IX86_BUILTIN_MFENCE), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loaddqa"), (v16qi_ftype_pcchar), (IX86_BUILTIN_LOADDQA), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loaddqu"), (v16qi_ftype_pcchar), (IX86_BUILTIN_LOADDQU), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadd"), (v4si_ftype_pcint), (IX86_BUILTIN_LOADD), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storedqa"), (void_ftype_pchar_v16qi), (IX86_BUILTIN_STOREDQA), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_storedqu"), (void_ftype_pchar_v16qi), (IX86_BUILTIN_STOREDQU), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_stored"), (void_ftype_pcint_v4si), (IX86_BUILTIN_STORED), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movq"), (v2di_ftype_v2di), (IX86_BUILTIN_MOVQ), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00004000) & target_flags && (!((0x00004000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_setzero128"), (v2di_ftype_void), (IX86_BUILTIN_CLRTI), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psllw128"), (v8hi_ftype_v8hi_v2di), (IX86_BUILTIN_PSLLW128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pslld128"), (v4si_ftype_v4si_v2di), (IX86_BUILTIN_PSLLD128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psllq128"), (v2di_ftype_v2di_v2di), (IX86_BUILTIN_PSLLQ128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrlw128"), (v8hi_ftype_v8hi_v2di), (IX86_BUILTIN_PSRLW128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrld128"), (v4si_ftype_v4si_v2di), (IX86_BUILTIN_PSRLD128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrlq128"), (v2di_ftype_v2di_v2di), (IX86_BUILTIN_PSRLQ128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psraw128"), (v8hi_ftype_v8hi_v2di), (IX86_BUILTIN_PSRAW128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrad128"), (v4si_ftype_v4si_v2di), (IX86_BUILTIN_PSRAD128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pslldqi128"), (v2di_ftype_v2di_int), (IX86_BUILTIN_PSLLDQI128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psllwi128"), (v8hi_ftype_v8hi_int), (IX86_BUILTIN_PSLLWI128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pslldi128"), (v4si_ftype_v4si_int), (IX86_BUILTIN_PSLLDI128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psllqi128"), (v2di_ftype_v2di_int), (IX86_BUILTIN_PSLLQI128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrldqi128"), (v2di_ftype_v2di_int), (IX86_BUILTIN_PSRLDQI128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrlwi128"), (v8hi_ftype_v8hi_int), (IX86_BUILTIN_PSRLWI128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrldi128"), (v4si_ftype_v4si_int), (IX86_BUILTIN_PSRLDI128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrlqi128"), (v2di_ftype_v2di_int), (IX86_BUILTIN_PSRLQI128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psrawi128"), (v8hi_ftype_v8hi_int), (IX86_BUILTIN_PSRAWI128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_psradi128"), (v4si_ftype_v4si_int), (IX86_BUILTIN_PSRADI128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00008000) & target_flags && (!((0x00008000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_pmaddwd128"), (v4si_ftype_v8hi_v8hi), (IX86_BUILTIN_PMADDWD128), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0);
  do { if ((0x00010000) & target_flags && (!((0x00010000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_monitor"), (void_ftype_pcvoid_unsigned_unsigned), (IX86_BUILTIN_MONITOR), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0)
                             ;
  do { if ((0x00010000) & target_flags && (!((0x00010000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_mwait"), (void_ftype_unsigned_unsigned), (IX86_BUILTIN_MWAIT), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0)
                           ;
  do { if ((0x00010000) & target_flags && (!((0x00010000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movshdup"), (v4sf_ftype_v4sf), (IX86_BUILTIN_MOVSHDUP), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0)
                              ;
  do { if ((0x00010000) & target_flags && (!((0x00010000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movsldup"), (v4sf_ftype_v4sf), (IX86_BUILTIN_MOVSLDUP), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0)
                              ;
  do { if ((0x00010000) & target_flags && (!((0x00010000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_lddqu"), (v16qi_ftype_pcchar), (IX86_BUILTIN_LDDQU), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0)
                                               ;
  do { if ((0x00010000) & target_flags && (!((0x00010000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_loadddup"), (v2df_ftype_pcdouble), (IX86_BUILTIN_LOADDDUP), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0)
                                                   ;
  do { if ((0x00010000) & target_flags && (!((0x00010000) & 0x00100000) || 0)) builtin_function (("__builtin_ia32_movddup"), (v2df_ftype_v2df), (IX86_BUILTIN_MOVDDUP), BUILT_IN_MD, ((void *)0), (tree) ((void *)0)); } while (0)
                                              ;
}
static rtx
safe_vector_operand (rtx x, enum machine_mode mode)
{
  if (x != (const_int_rtx[64]))
    return x;
  x = gen_reg_rtx (mode);
  if (((mode) == DImode || (mode) == V8QImode || (mode) == V4HImode || (mode) == V2SImode || (mode) == SImode) || ((mode) == V2SFmode || (mode) == SFmode))
    emit_insn (gen_mmx_clrdi (mode == DImode ? x
         : gen_rtx_SUBREG (DImode, x, 0)));
  else
    emit_insn (gen_sse_clrv4sf (mode == V4SFmode ? x
    : gen_rtx_SUBREG (V4SFmode, x, 0),
    (const_tiny_rtx[0][(int) (V4SFmode)])));
  return x;
}
static rtx
ix86_expand_binop_builtin (enum insn_code icode, tree arglist, rtx target)
{
  rtx pat;
  tree arg0 = ((arglist)->list.value1);
  tree arg1 = ((((arglist)->common.chain))->list.value1);
  rtx op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
  rtx op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
  enum machine_mode tmode = insn_data[icode].operand[0].mode;
  enum machine_mode mode0 = insn_data[icode].operand[1].mode;
  enum machine_mode mode1 = insn_data[icode].operand[2].mode;
  if ((mode_class[mode0] == MODE_VECTOR_INT || mode_class[mode0] == MODE_VECTOR_FLOAT))
    op0 = safe_vector_operand (op0, mode0);
  if ((mode_class[mode1] == MODE_VECTOR_INT || mode_class[mode1] == MODE_VECTOR_FLOAT))
    op1 = safe_vector_operand (op1, mode1);
  if (! target
      || ((enum machine_mode) (target)->mode) != tmode
      || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
    target = gen_reg_rtx (tmode);
  if (((enum machine_mode) (op1)->mode) == SImode && mode1 == TImode)
    {
      rtx x = gen_reg_rtx (V4SImode);
      emit_insn (gen_sse2_loadd (x, op1));
      op1 = rtl_hooks.gen_lowpart (TImode, x);
    }
  if ((((enum machine_mode) (op0)->mode) != mode0 && ((enum machine_mode) (op0)->mode) != VOIDmode)
      || (((enum machine_mode) (op1)->mode) != mode1 && ((enum machine_mode) (op1)->mode) != VOIDmode))
    fancy_abort ("gcc.c", 701800, "?");
  if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
    op0 = copy_to_mode_reg (mode0, op0);
  if (! (*insn_data[icode].operand[2].predicate) (op1, mode1))
    op1 = copy_to_mode_reg (mode1, op1);
  if (((enum rtx_code) (op0)->code) == MEM && ((enum rtx_code) (op1)->code) == MEM)
    op0 = copy_to_mode_reg (mode0, op0);
  pat = (insn_data[icode].genfun) (target, op0, op1);
  if (! pat)
    return 0;
  emit_insn (pat);
  return target;
}
static rtx
ix86_expand_store_builtin (enum insn_code icode, tree arglist)
{
  rtx pat;
  tree arg0 = ((arglist)->list.value1);
  tree arg1 = ((((arglist)->common.chain))->list.value1);
  rtx op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
  rtx op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
  enum machine_mode mode0 = insn_data[icode].operand[0].mode;
  enum machine_mode mode1 = insn_data[icode].operand[1].mode;
  if ((mode_class[mode1] == MODE_VECTOR_INT || mode_class[mode1] == MODE_VECTOR_FLOAT))
    op1 = safe_vector_operand (op1, mode1);
  op0 = gen_rtx_MEM (mode0, copy_to_mode_reg ((0 ? DImode : SImode), op0));
  op1 = copy_to_mode_reg (mode1, op1);
  pat = (insn_data[icode].genfun) (op0, op1);
  if (pat)
    emit_insn (pat);
  return 0;
}
static rtx
ix86_expand_unop_builtin (enum insn_code icode, tree arglist,
     rtx target, int do_load)
{
  rtx pat;
  tree arg0 = ((arglist)->list.value1);
  rtx op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
  enum machine_mode tmode = insn_data[icode].operand[0].mode;
  enum machine_mode mode0 = insn_data[icode].operand[1].mode;
  if (! target
      || ((enum machine_mode) (target)->mode) != tmode
      || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
    target = gen_reg_rtx (tmode);
  if (do_load)
    op0 = gen_rtx_MEM (mode0, copy_to_mode_reg ((0 ? DImode : SImode), op0));
  else
    {
      if ((mode_class[mode0] == MODE_VECTOR_INT || mode_class[mode0] == MODE_VECTOR_FLOAT))
 op0 = safe_vector_operand (op0, mode0);
      if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
 op0 = copy_to_mode_reg (mode0, op0);
    }
  pat = (insn_data[icode].genfun) (target, op0);
  if (! pat)
    return 0;
  emit_insn (pat);
  return target;
}
static rtx
ix86_expand_unop1_builtin (enum insn_code icode, tree arglist, rtx target)
{
  rtx pat;
  tree arg0 = ((arglist)->list.value1);
  rtx op1, op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
  enum machine_mode tmode = insn_data[icode].operand[0].mode;
  enum machine_mode mode0 = insn_data[icode].operand[1].mode;
  if (! target
      || ((enum machine_mode) (target)->mode) != tmode
      || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
    target = gen_reg_rtx (tmode);
  if ((mode_class[mode0] == MODE_VECTOR_INT || mode_class[mode0] == MODE_VECTOR_FLOAT))
    op0 = safe_vector_operand (op0, mode0);
  if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
    op0 = copy_to_mode_reg (mode0, op0);
  op1 = op0;
  if (! (*insn_data[icode].operand[2].predicate) (op1, mode0))
    op1 = copy_to_mode_reg (mode0, op1);
  pat = (insn_data[icode].genfun) (target, op0, op1);
  if (! pat)
    return 0;
  emit_insn (pat);
  return target;
}
static rtx
ix86_expand_sse_compare (const struct builtin_description *d, tree arglist,
    rtx target)
{
  rtx pat;
  tree arg0 = ((arglist)->list.value1);
  tree arg1 = ((((arglist)->common.chain))->list.value1);
  rtx op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
  rtx op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
  rtx op2;
  enum machine_mode tmode = insn_data[d->icode].operand[0].mode;
  enum machine_mode mode0 = insn_data[d->icode].operand[1].mode;
  enum machine_mode mode1 = insn_data[d->icode].operand[2].mode;
  enum rtx_code comparison = d->comparison;
  if ((mode_class[mode0] == MODE_VECTOR_INT || mode_class[mode0] == MODE_VECTOR_FLOAT))
    op0 = safe_vector_operand (op0, mode0);
  if ((mode_class[mode1] == MODE_VECTOR_INT || mode_class[mode1] == MODE_VECTOR_FLOAT))
    op1 = safe_vector_operand (op1, mode1);
  if (d->flag)
    {
      rtx tmp = gen_reg_rtx (mode1);
      emit_move_insn (tmp, op1);
      op1 = op0;
      op0 = tmp;
    }
  if (! target
      || ((enum machine_mode) (target)->mode) != tmode
      || ! (*insn_data[d->icode].operand[0].predicate) (target, tmode))
    target = gen_reg_rtx (tmode);
  if (! (*insn_data[d->icode].operand[1].predicate) (op0, mode0))
    op0 = copy_to_mode_reg (mode0, op0);
  if (! (*insn_data[d->icode].operand[2].predicate) (op1, mode1))
    op1 = copy_to_mode_reg (mode1, op1);
  op2 = gen_rtx_fmt_ee (comparison, mode0, op0, op1);
  pat = (insn_data[d->icode].genfun) (target, op0, op1, op2);
  if (! pat)
    return 0;
  emit_insn (pat);
  return target;
}
static rtx
ix86_expand_sse_comi (const struct builtin_description *d, tree arglist,
        rtx target)
{
  rtx pat;
  tree arg0 = ((arglist)->list.value1);
  tree arg1 = ((((arglist)->common.chain))->list.value1);
  rtx op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
  rtx op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
  rtx op2;
  enum machine_mode mode0 = insn_data[d->icode].operand[0].mode;
  enum machine_mode mode1 = insn_data[d->icode].operand[1].mode;
  enum rtx_code comparison = d->comparison;
  if ((mode_class[mode0] == MODE_VECTOR_INT || mode_class[mode0] == MODE_VECTOR_FLOAT))
    op0 = safe_vector_operand (op0, mode0);
  if ((mode_class[mode1] == MODE_VECTOR_INT || mode_class[mode1] == MODE_VECTOR_FLOAT))
    op1 = safe_vector_operand (op1, mode1);
  if (d->flag)
    {
      rtx tmp = op1;
      op1 = op0;
      op0 = tmp;
    }
  target = gen_reg_rtx (SImode);
  emit_move_insn (target, (const_int_rtx[64]));
  target = gen_rtx_SUBREG (QImode, target, 0);
  if (! (*insn_data[d->icode].operand[0].predicate) (op0, mode0))
    op0 = copy_to_mode_reg (mode0, op0);
  if (! (*insn_data[d->icode].operand[1].predicate) (op1, mode1))
    op1 = copy_to_mode_reg (mode1, op1);
  op2 = gen_rtx_fmt_ee (comparison, mode0, op0, op1);
  pat = (insn_data[d->icode].genfun) (op0, op1);
  if (! pat)
    return 0;
  emit_insn (pat);
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_fmt_e (STRICT_LOW_PART, (VOIDmode), (target))), (gen_rtx_fmt_ee (comparison, QImode, (((pat)->u.fld[0]).rtx1), (const_int_rtx[64]))))
                   );
  return (((target)->u.fld[0]).rtx1);
}
rtx
ix86_expand_builtin (tree exp, rtx target, rtx subtarget ,
       enum machine_mode mode ,
       int ignore )
{
  const struct builtin_description *d;
  size_t i;
  enum insn_code icode;
  tree fndecl = ((((exp)->exp.operands[0]))->exp.operands[0]);
  tree arglist = ((exp)->exp.operands[1]);
  tree arg0, arg1, arg2;
  rtx op0, op1, op2, pat;
  enum machine_mode tmode, mode0, mode1, mode2;
  unsigned int fcode = ((fndecl)->decl.u1.f);
  switch (fcode)
    {
    case IX86_BUILTIN_EMMS:
      emit_insn (gen_emms ());
      return 0;
    case IX86_BUILTIN_SFENCE:
      emit_insn (gen_sfence ());
      return 0;
    case IX86_BUILTIN_PEXTRW:
    case IX86_BUILTIN_PEXTRW128:
      icode = (fcode == IX86_BUILTIN_PEXTRW
        ? CODE_FOR_mmx_pextrw
        : CODE_FOR_sse2_pextrw);
      arg0 = ((arglist)->list.value1);
      arg1 = ((((arglist)->common.chain))->list.value1);
      op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
      op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
      tmode = insn_data[icode].operand[0].mode;
      mode0 = insn_data[icode].operand[1].mode;
      mode1 = insn_data[icode].operand[2].mode;
      if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
 op0 = copy_to_mode_reg (mode0, op0);
      if (! (*insn_data[icode].operand[2].predicate) (op1, mode1))
 {
   error ("selector must be an integer constant in the range 0..%i",
    fcode == IX86_BUILTIN_PEXTRW ? 3:7);
   return gen_reg_rtx (tmode);
 }
      if (target == 0
   || ((enum machine_mode) (target)->mode) != tmode
   || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
 target = gen_reg_rtx (tmode);
      pat = (insn_data[icode].genfun) (target, op0, op1);
      if (! pat)
 return 0;
      emit_insn (pat);
      return target;
    case IX86_BUILTIN_PINSRW:
    case IX86_BUILTIN_PINSRW128:
      icode = (fcode == IX86_BUILTIN_PINSRW
        ? CODE_FOR_mmx_pinsrw
        : CODE_FOR_sse2_pinsrw);
      arg0 = ((arglist)->list.value1);
      arg1 = ((((arglist)->common.chain))->list.value1);
      arg2 = ((((((arglist)->common.chain))->common.chain))->list.value1);
      op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
      op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
      op2 = expand_expr (arg2, (rtx) 0, VOIDmode, 0);
      tmode = insn_data[icode].operand[0].mode;
      mode0 = insn_data[icode].operand[1].mode;
      mode1 = insn_data[icode].operand[2].mode;
      mode2 = insn_data[icode].operand[3].mode;
      if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
 op0 = copy_to_mode_reg (mode0, op0);
      if (! (*insn_data[icode].operand[2].predicate) (op1, mode1))
 op1 = copy_to_mode_reg (mode1, op1);
      if (! (*insn_data[icode].operand[3].predicate) (op2, mode2))
 {
   error ("selector must be an integer constant in the range 0..%i",
    fcode == IX86_BUILTIN_PINSRW ? 15:255);
   return (const_int_rtx[64]);
 }
      if (target == 0
   || ((enum machine_mode) (target)->mode) != tmode
   || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
 target = gen_reg_rtx (tmode);
      pat = (insn_data[icode].genfun) (target, op0, op1, op2);
      if (! pat)
 return 0;
      emit_insn (pat);
      return target;
    case IX86_BUILTIN_MASKMOVQ:
    case IX86_BUILTIN_MASKMOVDQU:
      icode = (fcode == IX86_BUILTIN_MASKMOVQ
        ? (0 ? CODE_FOR_mmx_maskmovq_rex : CODE_FOR_mmx_maskmovq)
        : (0 ? CODE_FOR_sse2_maskmovdqu_rex64
    : CODE_FOR_sse2_maskmovdqu));
      arg1 = ((arglist)->list.value1);
      arg2 = ((((arglist)->common.chain))->list.value1);
      arg0 = ((((((arglist)->common.chain))->common.chain))->list.value1);
      op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
      op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
      op2 = expand_expr (arg2, (rtx) 0, VOIDmode, 0);
      mode0 = insn_data[icode].operand[0].mode;
      mode1 = insn_data[icode].operand[1].mode;
      mode2 = insn_data[icode].operand[2].mode;
      if (! (*insn_data[icode].operand[0].predicate) (op0, mode0))
 op0 = copy_to_mode_reg (mode0, op0);
      if (! (*insn_data[icode].operand[1].predicate) (op1, mode1))
 op1 = copy_to_mode_reg (mode1, op1);
      if (! (*insn_data[icode].operand[2].predicate) (op2, mode2))
 op2 = copy_to_mode_reg (mode2, op2);
      pat = (insn_data[icode].genfun) (op0, op1, op2);
      if (! pat)
 return 0;
      emit_insn (pat);
      return 0;
    case IX86_BUILTIN_SQRTSS:
      return ix86_expand_unop1_builtin (CODE_FOR_vmsqrtv4sf2, arglist, target);
    case IX86_BUILTIN_RSQRTSS:
      return ix86_expand_unop1_builtin (CODE_FOR_vmrsqrtv4sf2, arglist, target);
    case IX86_BUILTIN_RCPSS:
      return ix86_expand_unop1_builtin (CODE_FOR_vmrcpv4sf2, arglist, target);
    case IX86_BUILTIN_LOADAPS:
      return ix86_expand_unop_builtin (CODE_FOR_sse_movaps, arglist, target, 1);
    case IX86_BUILTIN_LOADUPS:
      return ix86_expand_unop_builtin (CODE_FOR_sse_movups, arglist, target, 1);
    case IX86_BUILTIN_STOREAPS:
      return ix86_expand_store_builtin (CODE_FOR_sse_movaps, arglist);
    case IX86_BUILTIN_STOREUPS:
      return ix86_expand_store_builtin (CODE_FOR_sse_movups, arglist);
    case IX86_BUILTIN_LOADSS:
      return ix86_expand_unop_builtin (CODE_FOR_sse_loadss, arglist, target, 1);
    case IX86_BUILTIN_STORESS:
      return ix86_expand_store_builtin (CODE_FOR_sse_storess, arglist);
    case IX86_BUILTIN_LOADHPS:
    case IX86_BUILTIN_LOADLPS:
    case IX86_BUILTIN_LOADHPD:
    case IX86_BUILTIN_LOADLPD:
      icode = (fcode == IX86_BUILTIN_LOADHPS ? CODE_FOR_sse_movhps
        : fcode == IX86_BUILTIN_LOADLPS ? CODE_FOR_sse_movlps
        : fcode == IX86_BUILTIN_LOADHPD ? CODE_FOR_sse2_movhpd
        : CODE_FOR_sse2_movsd);
      arg0 = ((arglist)->list.value1);
      arg1 = ((((arglist)->common.chain))->list.value1);
      op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
      op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
      tmode = insn_data[icode].operand[0].mode;
      mode0 = insn_data[icode].operand[1].mode;
      mode1 = insn_data[icode].operand[2].mode;
      if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
 op0 = copy_to_mode_reg (mode0, op0);
      op1 = gen_rtx_MEM (mode1, copy_to_mode_reg ((0 ? DImode : SImode), op1));
      if (target == 0
   || ((enum machine_mode) (target)->mode) != tmode
   || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
 target = gen_reg_rtx (tmode);
      pat = (insn_data[icode].genfun) (target, op0, op1);
      if (! pat)
 return 0;
      emit_insn (pat);
      return target;
    case IX86_BUILTIN_STOREHPS:
    case IX86_BUILTIN_STORELPS:
    case IX86_BUILTIN_STOREHPD:
    case IX86_BUILTIN_STORELPD:
      icode = (fcode == IX86_BUILTIN_STOREHPS ? CODE_FOR_sse_movhps
        : fcode == IX86_BUILTIN_STORELPS ? CODE_FOR_sse_movlps
        : fcode == IX86_BUILTIN_STOREHPD ? CODE_FOR_sse2_movhpd
        : CODE_FOR_sse2_movsd);
      arg0 = ((arglist)->list.value1);
      arg1 = ((((arglist)->common.chain))->list.value1);
      op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
      op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
      mode0 = insn_data[icode].operand[1].mode;
      mode1 = insn_data[icode].operand[2].mode;
      op0 = gen_rtx_MEM (mode0, copy_to_mode_reg ((0 ? DImode : SImode), op0));
      if (! (*insn_data[icode].operand[2].predicate) (op1, mode1))
 op1 = copy_to_mode_reg (mode1, op1);
      pat = (insn_data[icode].genfun) (op0, op0, op1);
      if (! pat)
 return 0;
      emit_insn (pat);
      return 0;
    case IX86_BUILTIN_MOVNTPS:
      return ix86_expand_store_builtin (CODE_FOR_sse_movntv4sf, arglist);
    case IX86_BUILTIN_MOVNTQ:
      return ix86_expand_store_builtin (CODE_FOR_sse_movntdi, arglist);
    case IX86_BUILTIN_LDMXCSR:
      op0 = expand_expr (((arglist)->list.value1), (rtx) 0, VOIDmode, 0);
      target = assign_386_stack_local (SImode, 0);
      emit_move_insn (target, op0);
      emit_insn (gen_ldmxcsr (target));
      return 0;
    case IX86_BUILTIN_STMXCSR:
      target = assign_386_stack_local (SImode, 0);
      emit_insn (gen_stmxcsr (target));
      return copy_to_mode_reg (SImode, target);
    case IX86_BUILTIN_SHUFPS:
    case IX86_BUILTIN_SHUFPD:
      icode = (fcode == IX86_BUILTIN_SHUFPS
        ? CODE_FOR_sse_shufps
        : CODE_FOR_sse2_shufpd);
      arg0 = ((arglist)->list.value1);
      arg1 = ((((arglist)->common.chain))->list.value1);
      arg2 = ((((((arglist)->common.chain))->common.chain))->list.value1);
      op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
      op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
      op2 = expand_expr (arg2, (rtx) 0, VOIDmode, 0);
      tmode = insn_data[icode].operand[0].mode;
      mode0 = insn_data[icode].operand[1].mode;
      mode1 = insn_data[icode].operand[2].mode;
      mode2 = insn_data[icode].operand[3].mode;
      if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
 op0 = copy_to_mode_reg (mode0, op0);
      if (! (*insn_data[icode].operand[2].predicate) (op1, mode1))
 op1 = copy_to_mode_reg (mode1, op1);
      if (! (*insn_data[icode].operand[3].predicate) (op2, mode2))
 {
   error ("mask must be an immediate");
   return gen_reg_rtx (tmode);
 }
      if (target == 0
   || ((enum machine_mode) (target)->mode) != tmode
   || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
 target = gen_reg_rtx (tmode);
      pat = (insn_data[icode].genfun) (target, op0, op1, op2);
      if (! pat)
 return 0;
      emit_insn (pat);
      return target;
    case IX86_BUILTIN_PSHUFW:
    case IX86_BUILTIN_PSHUFD:
    case IX86_BUILTIN_PSHUFHW:
    case IX86_BUILTIN_PSHUFLW:
      icode = ( fcode == IX86_BUILTIN_PSHUFHW ? CODE_FOR_sse2_pshufhw
        : fcode == IX86_BUILTIN_PSHUFLW ? CODE_FOR_sse2_pshuflw
        : fcode == IX86_BUILTIN_PSHUFD ? CODE_FOR_sse2_pshufd
        : CODE_FOR_mmx_pshufw);
      arg0 = ((arglist)->list.value1);
      arg1 = ((((arglist)->common.chain))->list.value1);
      op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
      op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
      tmode = insn_data[icode].operand[0].mode;
      mode1 = insn_data[icode].operand[1].mode;
      mode2 = insn_data[icode].operand[2].mode;
      if (! (*insn_data[icode].operand[1].predicate) (op0, mode1))
 op0 = copy_to_mode_reg (mode1, op0);
      if (! (*insn_data[icode].operand[2].predicate) (op1, mode2))
 {
   error ("mask must be an immediate");
   return (const_int_rtx[64]);
 }
      if (target == 0
   || ((enum machine_mode) (target)->mode) != tmode
   || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
 target = gen_reg_rtx (tmode);
      pat = (insn_data[icode].genfun) (target, op0, op1);
      if (! pat)
 return 0;
      emit_insn (pat);
      return target;
    case IX86_BUILTIN_PSLLDQI128:
    case IX86_BUILTIN_PSRLDQI128:
      icode = ( fcode == IX86_BUILTIN_PSLLDQI128 ? CODE_FOR_sse2_ashlti3
        : CODE_FOR_sse2_lshrti3);
      arg0 = ((arglist)->list.value1);
      arg1 = ((((arglist)->common.chain))->list.value1);
      op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
      op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
      tmode = insn_data[icode].operand[0].mode;
      mode1 = insn_data[icode].operand[1].mode;
      mode2 = insn_data[icode].operand[2].mode;
      if (! (*insn_data[icode].operand[1].predicate) (op0, mode1))
 {
   op0 = copy_to_reg (op0);
   op0 = simplify_gen_subreg (mode1, op0, ((enum machine_mode) (op0)->mode), 0);
 }
      if (! (*insn_data[icode].operand[2].predicate) (op1, mode2))
 {
   error ("shift must be an immediate");
   return (const_int_rtx[64]);
 }
      target = gen_reg_rtx (V2DImode);
      pat = (insn_data[icode].genfun) (simplify_gen_subreg (tmode, target, V2DImode, 0), op0, op1);
      if (! pat)
 return 0;
      emit_insn (pat);
      return target;
    case IX86_BUILTIN_FEMMS:
      emit_insn (gen_femms ());
      return (rtx) 0;
    case IX86_BUILTIN_PAVGUSB:
      return ix86_expand_binop_builtin (CODE_FOR_pavgusb, arglist, target);
    case IX86_BUILTIN_PF2ID:
      return ix86_expand_unop_builtin (CODE_FOR_pf2id, arglist, target, 0);
    case IX86_BUILTIN_PFACC:
      return ix86_expand_binop_builtin (CODE_FOR_pfacc, arglist, target);
    case IX86_BUILTIN_PFADD:
     return ix86_expand_binop_builtin (CODE_FOR_addv2sf3, arglist, target);
    case IX86_BUILTIN_PFCMPEQ:
      return ix86_expand_binop_builtin (CODE_FOR_eqv2sf3, arglist, target);
    case IX86_BUILTIN_PFCMPGE:
      return ix86_expand_binop_builtin (CODE_FOR_gev2sf3, arglist, target);
    case IX86_BUILTIN_PFCMPGT:
      return ix86_expand_binop_builtin (CODE_FOR_gtv2sf3, arglist, target);
    case IX86_BUILTIN_PFMAX:
      return ix86_expand_binop_builtin (CODE_FOR_pfmaxv2sf3, arglist, target);
    case IX86_BUILTIN_PFMIN:
      return ix86_expand_binop_builtin (CODE_FOR_pfminv2sf3, arglist, target);
    case IX86_BUILTIN_PFMUL:
      return ix86_expand_binop_builtin (CODE_FOR_mulv2sf3, arglist, target);
    case IX86_BUILTIN_PFRCP:
      return ix86_expand_unop_builtin (CODE_FOR_pfrcpv2sf2, arglist, target, 0);
    case IX86_BUILTIN_PFRCPIT1:
      return ix86_expand_binop_builtin (CODE_FOR_pfrcpit1v2sf3, arglist, target);
    case IX86_BUILTIN_PFRCPIT2:
      return ix86_expand_binop_builtin (CODE_FOR_pfrcpit2v2sf3, arglist, target);
    case IX86_BUILTIN_PFRSQIT1:
      return ix86_expand_binop_builtin (CODE_FOR_pfrsqit1v2sf3, arglist, target);
    case IX86_BUILTIN_PFRSQRT:
      return ix86_expand_unop_builtin (CODE_FOR_pfrsqrtv2sf2, arglist, target, 0);
    case IX86_BUILTIN_PFSUB:
      return ix86_expand_binop_builtin (CODE_FOR_subv2sf3, arglist, target);
    case IX86_BUILTIN_PFSUBR:
      return ix86_expand_binop_builtin (CODE_FOR_subrv2sf3, arglist, target);
    case IX86_BUILTIN_PI2FD:
      return ix86_expand_unop_builtin (CODE_FOR_floatv2si2, arglist, target, 0);
    case IX86_BUILTIN_PMULHRW:
      return ix86_expand_binop_builtin (CODE_FOR_pmulhrwv4hi3, arglist, target);
    case IX86_BUILTIN_PF2IW:
      return ix86_expand_unop_builtin (CODE_FOR_pf2iw, arglist, target, 0);
    case IX86_BUILTIN_PFNACC:
      return ix86_expand_binop_builtin (CODE_FOR_pfnacc, arglist, target);
    case IX86_BUILTIN_PFPNACC:
      return ix86_expand_binop_builtin (CODE_FOR_pfpnacc, arglist, target);
    case IX86_BUILTIN_PI2FW:
      return ix86_expand_unop_builtin (CODE_FOR_pi2fw, arglist, target, 0);
    case IX86_BUILTIN_PSWAPDSI:
      return ix86_expand_unop_builtin (CODE_FOR_pswapdv2si2, arglist, target, 0);
    case IX86_BUILTIN_PSWAPDSF:
      return ix86_expand_unop_builtin (CODE_FOR_pswapdv2sf2, arglist, target, 0);
    case IX86_BUILTIN_SSE_ZERO:
      target = gen_reg_rtx (V4SFmode);
      emit_insn (gen_sse_clrv4sf (target, (const_tiny_rtx[0][(int) (V4SFmode)])));
      return target;
    case IX86_BUILTIN_MMX_ZERO:
      target = gen_reg_rtx (DImode);
      emit_insn (gen_mmx_clrdi (target));
      return target;
    case IX86_BUILTIN_CLRTI:
      target = gen_reg_rtx (V2DImode);
      emit_insn (gen_sse2_clrti (simplify_gen_subreg (TImode, target, V2DImode, 0)));
      return target;
    case IX86_BUILTIN_SQRTSD:
      return ix86_expand_unop1_builtin (CODE_FOR_vmsqrtv2df2, arglist, target);
    case IX86_BUILTIN_LOADAPD:
      return ix86_expand_unop_builtin (CODE_FOR_sse2_movapd, arglist, target, 1);
    case IX86_BUILTIN_LOADUPD:
      return ix86_expand_unop_builtin (CODE_FOR_sse2_movupd, arglist, target, 1);
    case IX86_BUILTIN_STOREAPD:
      return ix86_expand_store_builtin (CODE_FOR_sse2_movapd, arglist);
    case IX86_BUILTIN_STOREUPD:
      return ix86_expand_store_builtin (CODE_FOR_sse2_movupd, arglist);
    case IX86_BUILTIN_LOADSD:
      return ix86_expand_unop_builtin (CODE_FOR_sse2_loadsd, arglist, target, 1);
    case IX86_BUILTIN_STORESD:
      return ix86_expand_store_builtin (CODE_FOR_sse2_storesd, arglist);
    case IX86_BUILTIN_SETPD1:
      target = assign_386_stack_local (DFmode, 0);
      arg0 = ((arglist)->list.value1);
      emit_move_insn (adjust_address_1 (target, DFmode, 0, 1, 1),
        expand_expr (arg0, (rtx) 0, VOIDmode, 0));
      op0 = gen_reg_rtx (V2DFmode);
      emit_insn (gen_sse2_loadsd (op0, adjust_address_1 (target, V2DFmode, 0, 1, 1)));
      emit_insn (gen_sse2_shufpd (op0, op0, op0, (const_int_rtx[64])));
      return op0;
    case IX86_BUILTIN_SETPD:
      target = assign_386_stack_local (V2DFmode, 0);
      arg0 = ((arglist)->list.value1);
      arg1 = ((((arglist)->common.chain))->list.value1);
      emit_move_insn (adjust_address_1 (target, DFmode, 0, 1, 1),
        expand_expr (arg0, (rtx) 0, VOIDmode, 0));
      emit_move_insn (adjust_address_1 (target, DFmode, 8, 1, 1),
        expand_expr (arg1, (rtx) 0, VOIDmode, 0));
      op0 = gen_reg_rtx (V2DFmode);
      emit_insn (gen_sse2_movapd (op0, target));
      return op0;
    case IX86_BUILTIN_LOADRPD:
      target = ix86_expand_unop_builtin (CODE_FOR_sse2_movapd, arglist,
      gen_reg_rtx (V2DFmode), 1);
      emit_insn (gen_sse2_shufpd (target, target, target, (const_int_rtx[64 +1])));
      return target;
    case IX86_BUILTIN_LOADPD1:
      target = ix86_expand_unop_builtin (CODE_FOR_sse2_loadsd, arglist,
      gen_reg_rtx (V2DFmode), 1);
      emit_insn (gen_sse2_shufpd (target, target, target, (const_int_rtx[64])));
      return target;
    case IX86_BUILTIN_STOREPD1:
      return ix86_expand_store_builtin (CODE_FOR_sse2_movapd, arglist);
    case IX86_BUILTIN_STORERPD:
      return ix86_expand_store_builtin (CODE_FOR_sse2_movapd, arglist);
    case IX86_BUILTIN_CLRPD:
      target = gen_reg_rtx (V2DFmode);
      emit_insn (gen_sse_clrv2df (target));
      return target;
    case IX86_BUILTIN_MFENCE:
 emit_insn (gen_sse2_mfence ());
 return 0;
    case IX86_BUILTIN_LFENCE:
 emit_insn (gen_sse2_lfence ());
 return 0;
    case IX86_BUILTIN_CLFLUSH:
 arg0 = ((arglist)->list.value1);
 op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
 icode = CODE_FOR_sse2_clflush;
 if (! (*insn_data[icode].operand[0].predicate) (op0, (0 ? DImode : SImode)))
     op0 = copy_to_mode_reg ((0 ? DImode : SImode), op0);
 emit_insn (gen_sse2_clflush (op0));
 return 0;
    case IX86_BUILTIN_MOVNTPD:
      return ix86_expand_store_builtin (CODE_FOR_sse2_movntv2df, arglist);
    case IX86_BUILTIN_MOVNTDQ:
      return ix86_expand_store_builtin (CODE_FOR_sse2_movntv2di, arglist);
    case IX86_BUILTIN_MOVNTI:
      return ix86_expand_store_builtin (CODE_FOR_sse2_movntsi, arglist);
    case IX86_BUILTIN_LOADDQA:
      return ix86_expand_unop_builtin (CODE_FOR_sse2_movdqa, arglist, target, 1);
    case IX86_BUILTIN_LOADDQU:
      return ix86_expand_unop_builtin (CODE_FOR_sse2_movdqu, arglist, target, 1);
    case IX86_BUILTIN_LOADD:
      return ix86_expand_unop_builtin (CODE_FOR_sse2_loadd, arglist, target, 1);
    case IX86_BUILTIN_STOREDQA:
      return ix86_expand_store_builtin (CODE_FOR_sse2_movdqa, arglist);
    case IX86_BUILTIN_STOREDQU:
      return ix86_expand_store_builtin (CODE_FOR_sse2_movdqu, arglist);
    case IX86_BUILTIN_STORED:
      return ix86_expand_store_builtin (CODE_FOR_sse2_stored, arglist);
    case IX86_BUILTIN_MONITOR:
      arg0 = ((arglist)->list.value1);
      arg1 = ((((arglist)->common.chain))->list.value1);
      arg2 = ((((((arglist)->common.chain))->common.chain))->list.value1);
      op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
      op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
      op2 = expand_expr (arg2, (rtx) 0, VOIDmode, 0);
      if (!(((enum rtx_code) (op0)->code) == REG))
 op0 = copy_to_mode_reg (SImode, op0);
      if (!(((enum rtx_code) (op1)->code) == REG))
 op1 = copy_to_mode_reg (SImode, op1);
      if (!(((enum rtx_code) (op2)->code) == REG))
 op2 = copy_to_mode_reg (SImode, op2);
      emit_insn (gen_monitor (op0, op1, op2));
      return 0;
    case IX86_BUILTIN_MWAIT:
      arg0 = ((arglist)->list.value1);
      arg1 = ((((arglist)->common.chain))->list.value1);
      op0 = expand_expr (arg0, (rtx) 0, VOIDmode, 0);
      op1 = expand_expr (arg1, (rtx) 0, VOIDmode, 0);
      if (!(((enum rtx_code) (op0)->code) == REG))
 op0 = copy_to_mode_reg (SImode, op0);
      if (!(((enum rtx_code) (op1)->code) == REG))
 op1 = copy_to_mode_reg (SImode, op1);
      emit_insn (gen_mwait (op0, op1));
      return 0;
    case IX86_BUILTIN_LOADDDUP:
      return ix86_expand_unop_builtin (CODE_FOR_loadddup, arglist, target, 1);
    case IX86_BUILTIN_LDDQU:
      return ix86_expand_unop_builtin (CODE_FOR_lddqu, arglist, target,
           1);
    default:
      break;
    }
  for (i = 0, d = bdesc_2arg; i < (sizeof (bdesc_2arg) / sizeof ((bdesc_2arg)[0])); i++, d++)
    if (d->code == fcode)
      {
 if (d->icode == CODE_FOR_maskcmpv4sf3
     || d->icode == CODE_FOR_vmmaskcmpv4sf3
     || d->icode == CODE_FOR_maskncmpv4sf3
     || d->icode == CODE_FOR_vmmaskncmpv4sf3
     || d->icode == CODE_FOR_maskcmpv2df3
     || d->icode == CODE_FOR_vmmaskcmpv2df3
     || d->icode == CODE_FOR_maskncmpv2df3
     || d->icode == CODE_FOR_vmmaskncmpv2df3)
   return ix86_expand_sse_compare (d, arglist, target);
 return ix86_expand_binop_builtin (d->icode, arglist, target);
      }
  for (i = 0, d = bdesc_1arg; i < (sizeof (bdesc_1arg) / sizeof ((bdesc_1arg)[0])); i++, d++)
    if (d->code == fcode)
      return ix86_expand_unop_builtin (d->icode, arglist, target, 0);
  for (i = 0, d = bdesc_comi; i < (sizeof (bdesc_comi) / sizeof ((bdesc_comi)[0])); i++, d++)
    if (d->code == fcode)
      return ix86_expand_sse_comi (d, arglist, target);
  return 0;
}
rtx
ix86_force_to_memory (enum machine_mode mode, rtx operand)
{
  rtx result;
  if (!reload_completed)
    fancy_abort ("gcc.c", 702608, "?");
  if ((!(target_flags & 0x04000000)))
    {
      result = gen_rtx_MEM (mode,
       gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])), (gen_rtx_CONST_INT (VOIDmode, (long) (-128))))
                                );
      emit_move_insn (result, operand);
    }
  else if (!(!(target_flags & 0x04000000)) && 0)
    {
      switch (mode)
 {
 case HImode:
 case SImode:
   operand = rtl_hooks.gen_lowpart (DImode, operand);
 case DImode:
   emit_insn (
        gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (DImode, gen_rtx_fmt_e (PRE_DEC, (DImode), ((global_rtl[GR_STACK_POINTER]))))), (operand))
               );
   break;
 default:
   fancy_abort ("gcc.c", 702634, "?");
 }
      result = gen_rtx_MEM (mode, (global_rtl[GR_STACK_POINTER]));
    }
  else
    {
      switch (mode)
 {
 case DImode:
   {
     rtx operands[2];
     split_di (&operand, 1, operands, operands + 1);
     emit_insn (
   gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (SImode, gen_rtx_fmt_e (PRE_DEC, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER]))))), (operands[1]))
                     );
     emit_insn (
   gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (SImode, gen_rtx_fmt_e (PRE_DEC, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER]))))), (operands[0]))
                     );
   }
   break;
 case HImode:
   if (!(x86_partial_reg_stall & (1 << ix86_tune)))
     operand = rtl_hooks.gen_lowpart (SImode, operand);
 case SImode:
   emit_insn (
        gen_rtx_fmt_ee (SET, (VOIDmode), (gen_rtx_MEM (((enum machine_mode) (operand)->mode), gen_rtx_fmt_e (PRE_DEC, (SImode), ((global_rtl[GR_STACK_POINTER]))))), (operand))
               );
   break;
 default:
   fancy_abort ("gcc.c", 702674, "?");
 }
      result = gen_rtx_MEM (mode, (global_rtl[GR_STACK_POINTER]));
    }
  return result;
}
void
ix86_free_from_memory (enum machine_mode mode)
{
  if (!(!(target_flags & 0x04000000)))
    {
      int size;
      if (mode == DImode || 0)
 size = 8;
      else if (mode == HImode && (x86_partial_reg_stall & (1 << ix86_tune)))
 size = 2;
      else
 size = 4;
      emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_STACK_POINTER])), (gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), ((global_rtl[GR_STACK_POINTER])), (gen_rtx_CONST_INT (VOIDmode, (long) (size))))))
                         );
    }
}
enum reg_class
ix86_preferred_reload_class (rtx x, enum reg_class class)
{
  if (((enum rtx_code) (x)->code) == CONST_VECTOR && x != (const_tiny_rtx[0][(int) (((enum machine_mode) (x)->mode))]))
    return NO_REGS;
  if (((enum rtx_code) (x)->code) == CONST_DOUBLE && ((enum machine_mode) (x)->mode) != VOIDmode)
    {
      if (reg_class_subset_p ((class), SSE_REGS))
 return NO_REGS;
      if (reg_classes_intersect_p ((class), FLOAT_REGS) && standard_80387_constant_p (x))
 {
   if (reg_classes_intersect_p (SSE_REGS, (class)))
     return (reg_class_subset_p (class, GENERAL_REGS)
      ? GENERAL_REGS : FLOAT_REGS);
   else
     return class;
 }
      if (reg_class_subset_p (class, GENERAL_REGS))
 return GENERAL_REGS;
      if (reg_classes_intersect_p ((class), FLOAT_REGS) || reg_classes_intersect_p (SSE_REGS, (class)))
 return NO_REGS;
    }
  if (reg_classes_intersect_p (MMX_REGS, (class)) && ((rtx_class[(int) (((enum rtx_code) (x)->code))]) == RTX_CONST_OBJ || ((enum rtx_code) (x)->code) == CONST_VECTOR))
    return NO_REGS;
  if (((enum machine_mode) (x)->mode) == QImode && ! reg_class_subset_p (class, Q_REGS))
    return Q_REGS;
  return class;
}
int
ix86_secondary_memory_needed (enum reg_class class1, enum reg_class class2,
         enum machine_mode mode, int strict)
{
  if (reg_classes_intersect_p ((class1), FLOAT_REGS) != reg_class_subset_p ((class1), FLOAT_REGS)
      || reg_classes_intersect_p ((class2), FLOAT_REGS) != reg_class_subset_p ((class2), FLOAT_REGS)
      || reg_classes_intersect_p (SSE_REGS, (class1)) != reg_class_subset_p ((class1), SSE_REGS)
      || reg_classes_intersect_p (SSE_REGS, (class2)) != reg_class_subset_p ((class2), SSE_REGS)
      || reg_classes_intersect_p (MMX_REGS, (class1)) != reg_class_subset_p ((class1), MMX_REGS)
      || reg_classes_intersect_p (MMX_REGS, (class2)) != reg_class_subset_p ((class2), MMX_REGS))
    {
      if (strict)
 fancy_abort ("gcc.c", 702763, "?");
      else
 return 1;
    }
  return (reg_class_subset_p ((class1), FLOAT_REGS) != reg_class_subset_p ((class2), FLOAT_REGS)
   || ((reg_class_subset_p ((class1), SSE_REGS) != reg_class_subset_p ((class2), SSE_REGS)
        || reg_class_subset_p ((class1), MMX_REGS) != reg_class_subset_p ((class2), MMX_REGS))
       && ((mode != SImode && (mode != DImode || !0))
    || (!(x86_inter_unit_moves & (1 << ix86_tune)) && !optimize_size))));
}
int
ix86_register_move_cost (enum machine_mode mode, enum reg_class class1,
    enum reg_class class2)
{
  if (ix86_secondary_memory_needed (class1, class2, mode, 0))
    {
      int cost = 1;
      cost += ((ix86_memory_move_cost ((mode), (class1), (0))) > (ix86_memory_move_cost ((mode), (class1), (1))) ? (ix86_memory_move_cost ((mode), (class1), (0))) : (ix86_memory_move_cost ((mode), (class1), (1))))
                                        ;
      cost += ((ix86_memory_move_cost ((mode), (class2), (0))) > (ix86_memory_move_cost ((mode), (class2), (1))) ? (ix86_memory_move_cost ((mode), (class2), (0))) : (ix86_memory_move_cost ((mode), (class2), (1))))
                                        ;
      if ((!reg_classes_intersect_p ((class1), GENERAL_REGS) ? ((mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((((mode) == XFmode ? 12 : ((unsigned short) mode_size[mode]))) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))) > (!reg_classes_intersect_p ((class2), GENERAL_REGS) ? ((mode_class[mode] == MODE_COMPLEX_INT || mode_class[mode] == MODE_COMPLEX_FLOAT) ? 2 : 1) : (((((mode) == XFmode ? 12 : ((unsigned short) mode_size[mode]))) + (0 ? 8 : 4) - 1) / (0 ? 8 : 4))))
 cost += 20;
      if ((reg_class_subset_p ((class1), MMX_REGS) && reg_classes_intersect_p ((class2), FLOAT_REGS))
          || (reg_class_subset_p ((class2), MMX_REGS) && reg_classes_intersect_p ((class1), FLOAT_REGS)))
 cost += 20;
      return cost;
    }
  if (reg_class_subset_p ((class1), MMX_REGS) != reg_class_subset_p ((class2), MMX_REGS)
      || reg_class_subset_p ((class1), SSE_REGS) != reg_class_subset_p ((class2), SSE_REGS))
    return ix86_cost->mmxsse_to_integer;
  if (reg_classes_intersect_p ((class1), FLOAT_REGS))
    return ix86_cost->fp_move;
  if (reg_classes_intersect_p (SSE_REGS, (class1)))
    return ix86_cost->sse_move;
  if (reg_classes_intersect_p (MMX_REGS, (class1)))
    return ix86_cost->mmx_move;
  return 2;
}
int
ix86_hard_regno_mode_ok (int regno, enum machine_mode mode)
{
  if (((regno) == 17 || (regno) == 18))
    return mode_class[mode] == MODE_CC;
  if (mode_class[mode] == MODE_CC
      || mode_class[mode] == MODE_RANDOM
      || mode_class[mode] == MODE_PARTIAL_INT)
    return 0;
  if (((regno) >= 8 && (regno) <= (8 + 7)))
    return ((mode) == SFmode || (mode) == DFmode || (mode) == XFmode || (mode) == SCmode || (mode) == DCmode || (mode) == XCmode);
  if ((((regno) >= (20 + 1) && (regno) <= ((20 + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7))))
    return (((target_flags & 0x00004000) != 0) ? ((mode) == TImode || (mode) == V4SFmode || (mode) == V4SImode || (mode) == SFmode || (mode) == TFmode || ((mode) == V16QImode || (mode) == V8HImode || (mode) == V2DFmode || (mode) == V2DImode) || (((target_flags & 0x00008000) != 0) && ((mode) == DFmode || ((mode) == DImode || (mode) == V8QImode || (mode) == V4HImode || (mode) == V2SImode || (mode) == SImode)))) : 0);
  if (((regno) >= (((20 + 1) + 7) + 1) && (regno) <= ((((20 + 1) + 7) + 1) + 7)))
    return (((target_flags & 0x00002000) != 0)
     ? ((mode) == DImode || (mode) == V8QImode || (mode) == V4HImode || (mode) == V2SImode || (mode) == SImode) || ((mode) == V2SFmode || (mode) == SFmode) : 0);
  if (!((mode) == QImode || (mode) == HImode || (mode) == SImode || (mode) == DImode || (mode) == CQImode || (mode) == CHImode || (mode) == CSImode || (mode) == CDImode || (0 && ((mode) == TImode || (mode) == CTImode || (mode) == TFmode || (mode) == TCmode))) && !((mode) == SFmode || (mode) == DFmode || (mode) == XFmode || (mode) == SCmode || (mode) == DCmode || (mode) == XCmode))
    return 0;
  if (regno < 4 || mode != QImode || 0)
    return 1;
  return reload_in_progress || reload_completed || !(x86_partial_reg_stall & (1 << ix86_tune));
}
int
ix86_memory_move_cost (enum machine_mode mode, enum reg_class class, int in)
{
  if (reg_class_subset_p ((class), FLOAT_REGS))
    {
      int index;
      switch (mode)
 {
   case SFmode:
     index = 0;
     break;
   case DFmode:
     index = 1;
     break;
   case XFmode:
     index = 2;
     break;
   default:
     return 100;
 }
      return in ? ix86_cost->fp_load [index] : ix86_cost->fp_store [index];
    }
  if (reg_class_subset_p ((class), SSE_REGS))
    {
      int index;
      switch (((unsigned short) mode_size[mode]))
 {
   case 4:
     index = 0;
     break;
   case 8:
     index = 1;
     break;
   case 16:
     index = 2;
     break;
   default:
     return 100;
 }
      return in ? ix86_cost->sse_load [index] : ix86_cost->sse_store [index];
    }
  if (reg_class_subset_p ((class), MMX_REGS))
    {
      int index;
      switch (((unsigned short) mode_size[mode]))
 {
   case 4:
     index = 0;
     break;
   case 8:
     index = 1;
     break;
   default:
     return 100;
 }
      return in ? ix86_cost->mmx_load [index] : ix86_cost->mmx_store [index];
    }
  switch (((unsigned short) mode_size[mode]))
    {
      case 1:
 if (in)
   return (reg_class_subset_p ((class), Q_REGS) ? ix86_cost->int_load[0]
    : ix86_cost->movzbl_load);
 else
   return (reg_class_subset_p ((class), Q_REGS) ? ix86_cost->int_store[0]
    : ix86_cost->int_store[0] + 4);
 break;
      case 2:
 return in ? ix86_cost->int_load[1] : ix86_cost->int_store[1];
      default:
 if (mode == TFmode)
   mode = XFmode;
 return ((in ? ix86_cost->int_load[2] : ix86_cost->int_store[2])
  * (((int) ((unsigned short) mode_size[mode])
      + (0 ? 8 : 4) - 1) / (0 ? 8 : 4)));
    }
}
static unsigned char
ix86_rtx_costs (rtx x, int code, int outer_code, int *total)
{
  enum machine_mode mode = ((enum machine_mode) (x)->mode);
  switch (code)
    {
    case CONST_INT:
    case CONST:
    case LABEL_REF:
    case SYMBOL_REF:
      if (0 && !x86_64_sign_extended_value (x))
 *total = 3;
      else if (0 && !x86_64_zero_extended_value (x))
 *total = 2;
      else if (flag_pic && (((enum rtx_code) (x)->code) == SYMBOL_REF || ((enum rtx_code) (x)->code) == LABEL_REF || (((enum rtx_code) (x)->code) == CONST && symbolic_reference_mentioned_p (x)))
        && (!0
     || (!((enum rtx_code) (x)->code) != LABEL_REF
         && (((enum rtx_code) (x)->code) != SYMBOL_REF
             || !((((((x))->u.fld[1]).rtint) & (1 << 1)) != 0)))))
 *total = 1;
      else
 *total = 0;
      return 1;
    case CONST_DOUBLE:
      if (mode == VOIDmode)
 *total = 0;
      else
 switch (standard_80387_constant_p (x))
   {
   case 1:
     *total = 1;
     break;
   default:
     *total = 2;
     break;
   case 0:
   case -1:
     *total = (((1) * 4)
        + (flag_pic != 0 && !0)
        + (mode == SFmode ? 0 : mode == DFmode ? 1 : 2));
     break;
   }
      return 1;
    case ZERO_EXTEND:
      if (0 && mode == DImode
   && ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) == SImode)
 *total = 1;
      else if ((x86_zero_extend_with_and & (1 << ix86_tune)))
 *total = ((ix86_cost->add) * 4);
      else
 *total = ((ix86_cost->movzx) * 4);
      return 0;
    case SIGN_EXTEND:
      *total = ((ix86_cost->movsx) * 4);
      return 0;
    case ASHIFT:
      if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT
   && (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) != DImode || 0))
 {
   long value1 = (((((x)->u.fld[1]).rtx1))->u.hwint[0]);
   if (value1 == 1)
     {
       *total = ((ix86_cost->add) * 4);
       return 0;
     }
   if ((value1 == 2 || value1 == 3)
       && ix86_cost->lea <= ix86_cost->shift_const)
     {
       *total = ((ix86_cost->lea) * 4);
       return 0;
     }
 }
    case ROTATE:
    case ASHIFTRT:
    case LSHIFTRT:
    case ROTATERT:
      if (!0 && ((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) == DImode)
 {
   if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
     {
       if ((((((x)->u.fld[1]).rtx1))->u.hwint[0]) > 32)
  *total = ((ix86_cost->shift_const + 2) * 4);
       else
  *total = ((ix86_cost->shift_const * 2) * 4);
     }
   else
     {
       if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == AND)
  *total = ((ix86_cost->shift_var * 2) * 4);
       else
  *total = ((ix86_cost->shift_var * 6 + 2) * 4);
     }
 }
      else
 {
   if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
     *total = ((ix86_cost->shift_const) * 4);
   else
     *total = ((ix86_cost->shift_var) * 4);
 }
      return 0;
    case MULT:
      if ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
 {
   *total = ((ix86_cost->fmul) * 4);
   return 0;
 }
      else
 {
   rtx op0 = (((x)->u.fld[0]).rtx1);
   rtx op1 = (((x)->u.fld[1]).rtx1);
   int nbits;
   if (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_INT)
     {
       unsigned long value1 = (((((x)->u.fld[1]).rtx1))->u.hwint[0]);
       for (nbits = 0; value1 != 0; value1 &= value1 - 1)
         nbits++;
     }
   else
     nbits = 7;
   if ((((enum rtx_code) (op0)->code) == SIGN_EXTEND || ((enum rtx_code) (op1)->code) == ZERO_EXTEND)
       && ((unsigned short) mode_size[((enum machine_mode) ((((op0)->u.fld[0]).rtx1))->mode)]) * 2
          == ((unsigned short) mode_size[mode]))
     {
       int is_mulwiden = 0;
       enum machine_mode inner_mode = ((enum machine_mode) (op0)->mode);
       if (((enum rtx_code) (op0)->code) == ((enum rtx_code) (op1)->code))
  is_mulwiden = 1, op1 = (((op1)->u.fld[0]).rtx1);
       else if (((enum rtx_code) (op1)->code) == CONST_INT)
  {
    if (((enum rtx_code) (op0)->code) == SIGN_EXTEND)
      is_mulwiden = trunc_int_for_mode (((op1)->u.hwint[0]), inner_mode)
             == ((op1)->u.hwint[0]);
    else
      is_mulwiden = !(((op1)->u.hwint[0]) & ~mode_mask_array[inner_mode]);
         }
       if (is_mulwiden)
         op0 = (((op0)->u.fld[0]).rtx1), mode = ((enum machine_mode) (op0)->mode);
     }
     *total = ((ix86_cost->mult_init[((mode) == QImode ? 0 : (mode) == HImode ? 1 : (mode) == SImode ? 2 : (mode) == DImode ? 3 : 4)] + nbits * ix86_cost->mult_bit) * 4)
            + rtx_cost (op0, outer_code) + rtx_cost (op1, outer_code);
          return 1;
 }
    case DIV:
    case UDIV:
    case MOD:
    case UMOD:
      if ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
 *total = ((ix86_cost->fdiv) * 4);
      else
 *total = ((ix86_cost->divide[((mode) == QImode ? 0 : (mode) == HImode ? 1 : (mode) == SImode ? 2 : (mode) == DImode ? 3 : 4)]) * 4);
      return 0;
    case PLUS:
      if ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
 *total = ((ix86_cost->fadd) * 4);
      else if (mode_class[mode] == MODE_INT
        && ((unsigned short) (((unsigned short) mode_size[mode]) * 8)) <= ((unsigned short) (((unsigned short) mode_size[(0 ? DImode : SImode)]) * 8)))
 {
   if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS
       && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->code) == MULT
       && ((enum rtx_code) ((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT
       && ((rtx_class[(int) (((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code))]) == RTX_CONST_OBJ || ((enum rtx_code) ((((x)->u.fld[1]).rtx1))->code) == CONST_VECTOR))
     {
       long val = (((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
       if (val == 2 || val == 4 || val == 8)
  {
    *total = ((ix86_cost->lea) * 4);
    *total += rtx_cost (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1), outer_code);
    *total += rtx_cost ((((((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1))->u.fld[0]).rtx1),
          outer_code);
    *total += rtx_cost ((((x)->u.fld[1]).rtx1), outer_code);
    return 1;
  }
     }
   else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == MULT
     && ((enum rtx_code) (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->code) == CONST_INT)
     {
       long val = ((((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1))->u.hwint[0]);
       if (val == 2 || val == 4 || val == 8)
  {
    *total = ((ix86_cost->lea) * 4);
    *total += rtx_cost (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), outer_code);
    *total += rtx_cost ((((x)->u.fld[1]).rtx1), outer_code);
    return 1;
  }
     }
   else if (((enum rtx_code) ((((x)->u.fld[0]).rtx1))->code) == PLUS)
     {
       *total = ((ix86_cost->lea) * 4);
       *total += rtx_cost (((((((x)->u.fld[0]).rtx1))->u.fld[0]).rtx1), outer_code);
       *total += rtx_cost (((((((x)->u.fld[0]).rtx1))->u.fld[1]).rtx1), outer_code);
       *total += rtx_cost ((((x)->u.fld[1]).rtx1), outer_code);
       return 1;
     }
 }
    case MINUS:
      if ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
 {
   *total = ((ix86_cost->fadd) * 4);
   return 0;
 }
    case AND:
    case IOR:
    case XOR:
      if (!0 && mode == DImode)
 {
   *total = (((ix86_cost->add) * 4) * 2
      + (rtx_cost ((((x)->u.fld[0]).rtx1), outer_code)
         << (((enum machine_mode) ((((x)->u.fld[0]).rtx1))->mode) != DImode))
      + (rtx_cost ((((x)->u.fld[1]).rtx1), outer_code)
                << (((enum machine_mode) ((((x)->u.fld[1]).rtx1))->mode) != DImode)));
   return 1;
 }
    case NEG:
      if ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
 {
   *total = ((ix86_cost->fchs) * 4);
   return 0;
 }
    case NOT:
      if (!0 && mode == DImode)
 *total = ((ix86_cost->add * 2) * 4);
      else
 *total = ((ix86_cost->add) * 4);
      return 0;
    case FLOAT_EXTEND:
      if (!((ix86_fpmath & FPMATH_SSE) != 0) || !((mode) == TImode || (mode) == V4SFmode || (mode) == V4SImode || (mode) == SFmode || (mode) == TFmode || ((mode) == V16QImode || (mode) == V8HImode || (mode) == V2DFmode || (mode) == V2DImode) || (((target_flags & 0x00008000) != 0) && ((mode) == DFmode || ((mode) == DImode || (mode) == V8QImode || (mode) == V4HImode || (mode) == V2SImode || (mode) == SImode)))))
 *total = 0;
      return 0;
    case ABS:
      if ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
 *total = ((ix86_cost->fabs) * 4);
      return 0;
    case SQRT:
      if ((mode_class[mode] == MODE_FLOAT || mode_class[mode] == MODE_COMPLEX_FLOAT || mode_class[mode] == MODE_VECTOR_FLOAT))
 *total = ((ix86_cost->fsqrt) * 4);
      return 0;
    case UNSPEC:
      if ((((x)->u.fld[1]).rtint) == 15)
 *total = 0;
      return 0;
    default:
      return 0;
    }
}
void
x86_order_regs_for_local_alloc (void)
{
   int pos = 0;
   int i;
   for (i = 0; i < 53; i++)
     if (((i) < 8 || ((i) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (i) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7))) && call_used_regs[i])
 reg_alloc_order [pos++] = i;
   for (i = 0; i < 53; i++)
     if (((i) < 8 || ((i) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (i) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7))) && !call_used_regs[i])
 reg_alloc_order [pos++] = i;
   if (!((ix86_fpmath & FPMATH_SSE) != 0))
     for (i = 8; i <= (8 + 7); i++)
       reg_alloc_order [pos++] = i;
   for (i = (20 + 1); i <= ((20 + 1) + 7); i++)
     reg_alloc_order [pos++] = i;
   for (i = (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1); i <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7); i++)
     reg_alloc_order [pos++] = i;
   if (((ix86_fpmath & FPMATH_SSE) != 0))
     for (i = 8; i <= (8 + 7); i++)
       reg_alloc_order [pos++] = i;
   for (i = (((20 + 1) + 7) + 1); i <= ((((20 + 1) + 7) + 1) + 7); i++)
     reg_alloc_order [pos++] = i;
   while (pos < 53)
     reg_alloc_order [pos++] = 0;
}
static tree
ix86_handle_struct_attribute (tree *node, tree name,
         tree args ,
         int flags , unsigned char *no_add_attrs)
{
  tree *type = ((void *)0);
  if ((tree_code_type[(int) (((enum tree_code) (*node)->common.code))] == 'd'))
    {
      if (((enum tree_code) (*node)->common.code) == TYPE_DECL)
 type = &((*node)->common.type);
    }
  else
    type = node;
  if (!(type && (((enum tree_code) (*type)->common.code) == RECORD_TYPE
   || ((enum tree_code) (*type)->common.code) == UNION_TYPE)))
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs = 1;
    }
  else if ((is_attribute_p ("ms_struct", name)
     && lookup_attribute ("gcc_struct", ((*type)->type.attributes)))
    || ((is_attribute_p ("gcc_struct", name)
  && lookup_attribute ("ms_struct", ((*type)->type.attributes)))))
    {
      warning ("`%s' incompatible attribute ignored",
               ((const char *) (name)->identifier.id.str));
      *no_add_attrs = 1;
    }
  return (tree) ((void *)0);
}
static unsigned char
ix86_ms_bitfield_layout_p (tree record_type)
{
  return ((target_flags & 0x00200000) &&
   !lookup_attribute ("gcc_struct", ((record_type)->type.attributes)))
    || lookup_attribute ("ms_struct", ((record_type)->type.attributes));
}
static rtx
x86_this_parameter (tree function)
{
  tree type = ((function)->common.type);
  if (0)
    {
      int n = aggregate_value_p (((type)->common.type), type) != 0;
      return gen_rtx_REG (DImode, x86_64_int_parameter_registers[n]);
    }
  if (ix86_function_regparm (type, function) > 0)
    {
      tree parm;
      parm = ((type)->type.value1s);
      for (; parm; parm = ((parm)->common.chain))
 if (((parm)->list.value1) == global_trees[TI_VOID_TYPE])
   break;
      if (parm)
 {
   int regno = 0;
   if (lookup_attribute ("fastcall", ((type)->type.attributes)))
     regno = 2;
   return gen_rtx_REG (SImode, regno);
 }
    }
  if (aggregate_value_p (((type)->common.type), type))
    return gen_rtx_MEM (SImode, plus_constant_wide (((global_rtl[GR_STACK_POINTER])), (long) (8)));
  else
    return gen_rtx_MEM (SImode, plus_constant_wide (((global_rtl[GR_STACK_POINTER])), (long) (4)));
}
static unsigned char
x86_can_output_mi_thunk (tree thunk ,
    long delta ,
    long vcall_offset, tree function)
{
  if (0)
    return 1;
  if (ix86_function_regparm (((function)->common.type), function) < 3)
    return 1;
  if (vcall_offset)
    return 0;
  if (flag_pic && !(*targetm.binds_local_p) (function))
    return 0;
  return 1;
}
static void
x86_output_mi_thunk (FILE *file ,
       tree thunk , long delta,
       long vcall_offset, tree function)
{
  rtx xops[3];
  rtx this = x86_this_parameter (function);
  rtx this_reg, tmp;
  if ((((enum rtx_code) (this)->code) == REG))
    this_reg = this;
  else if (vcall_offset)
    {
      xops[0] = this;
      xops[1] = this_reg = gen_rtx_REG ((0 ? DImode : SImode), 0);
      output_asm_insn ("mov{l}\t{%0, %1|%1, %0}", xops);
    }
  else
    this_reg = (rtx) 0;
  if (delta)
    {
      xops[0] = gen_rtx_CONST_INT (VOIDmode, (long) (delta));
      xops[1] = this_reg ? this_reg : this;
      if (0)
 {
   if (!x86_64_general_operand (xops[0], DImode))
     {
       tmp = gen_rtx_REG (DImode, (((((20 + 1) + 7) + 1) + 7) + 1) + 2 );
       xops[1] = tmp;
       output_asm_insn ("mov{q}\t{%1, %0|%0, %1}", xops);
       xops[0] = tmp;
       xops[1] = this;
     }
   output_asm_insn ("add{q}\t{%0, %1|%1, %0}", xops);
 }
      else
 output_asm_insn ("add{l}\t{%0, %1|%1, %0}", xops);
    }
  if (vcall_offset)
    {
      if (0)
 tmp = gen_rtx_REG (DImode, (((((20 + 1) + 7) + 1) + 7) + 1) + 2 );
      else
 {
   int tmp_regno = 2 ;
   if (lookup_attribute ("fastcall",
       ((((function)->common.type))->type.attributes)))
     tmp_regno = 0 ;
   tmp = gen_rtx_REG (SImode, tmp_regno);
 }
      xops[0] = gen_rtx_MEM ((0 ? DImode : SImode), this_reg);
      xops[1] = tmp;
      if (0)
 output_asm_insn ("mov{q}\t{%0, %1|%1, %0}", xops);
      else
 output_asm_insn ("mov{l}\t{%0, %1|%1, %0}", xops);
      xops[0] = gen_rtx_MEM ((0 ? DImode : SImode), plus_constant_wide ((tmp), (long) (vcall_offset)));
      if (0 && !memory_operand (xops[0], (0 ? DImode : SImode)))
 {
   rtx tmp2 = gen_rtx_REG (DImode, (((((20 + 1) + 7) + 1) + 7) + 1) + 3 );
   xops[0] = gen_rtx_CONST_INT (VOIDmode, (long) (vcall_offset));
   xops[1] = tmp2;
   output_asm_insn ("mov{q}\t{%0, %1|%1, %0}", xops);
   xops[0] = gen_rtx_MEM ((0 ? DImode : SImode), gen_rtx_fmt_ee (PLUS, ((0 ? DImode : SImode)), (tmp), (tmp2)));
 }
      xops[1] = this_reg;
      if (0)
 output_asm_insn ("add{q}\t{%0, %1|%1, %0}", xops);
      else
 output_asm_insn ("add{l}\t{%0, %1|%1, %0}", xops);
    }
  if (this_reg && this_reg != this)
    {
      xops[0] = this_reg;
      xops[1] = this;
      output_asm_insn ("mov{l}\t{%0, %1|%1, %0}", xops);
    }
  xops[0] = (((((function)->decl.rtl ? (function)->decl.rtl : (make_decl_rtl (function, ((void *)0)), (function)->decl.rtl)))->u.fld[0]).rtx1);
  if (0)
    {
      if (!flag_pic || (*targetm.binds_local_p) (function))
 output_asm_insn ("jmp\t%P0", xops);
      else
 {
   tmp = gen_rtx_fmt_Ei (UNSPEC, ((0 ? DImode : SImode)), (gen_rtvec (1, xops[0])), (2));
   tmp = gen_rtx_fmt_e (CONST, ((0 ? DImode : SImode)), (tmp));
   tmp = gen_rtx_MEM (QImode, tmp);
   xops[0] = tmp;
   output_asm_insn ("jmp\t%A0", xops);
 }
    }
  else
    {
      if (!flag_pic || (*targetm.binds_local_p) (function))
 output_asm_insn ("jmp\t%P0", xops);
      else
 {
   tmp = gen_rtx_REG (SImode, 2 );
   output_set_got (tmp);
   xops[1] = tmp;
   output_asm_insn ("mov{l}\t{%0@GOT(%1), %1|%1, %0@GOT[%1]}", xops);
   output_asm_insn ("jmp\t{*}%1", xops);
 }
    }
}
static void
x86_file_start (void)
{
  default_file_start ();
  if (0)
    fputs_unlocked ("\t.version\t\"01.01\"\n", asm_out_file);
  if (0)
    fputs_unlocked ("\t.global\t__fltused\n", asm_out_file);
  if (ix86_asm_dialect == ASM_INTEL)
    fputs_unlocked ("\t.intel_syntax\n", asm_out_file);
}
int
x86_field_alignment (tree field, int computed)
{
  enum machine_mode mode;
  tree type = ((field)->common.type);
  if (0 || (target_flags & 0x00000004))
    return computed;
  mode = ((((enum tree_code) (type)->common.code) == ARRAY_TYPE ? get_inner_array_type (type) : type)->type.mode)
                                           ;
  if (mode == DFmode || mode == DCmode
      || mode_class[mode] == MODE_INT
      || mode_class[mode] == MODE_COMPLEX_INT)
    return ((32) < (computed) ? (32) : (computed));
  return computed;
}
void
x86_function_profiler (FILE *file, int labelno )
{
  if (0)
    if (flag_pic)
      {
 fprintf (file, "\tcall\t*%s@GOTPCREL(%%rip)\n", "mcount");
      }
    else
      {
 fprintf (file, "\tcall\t%s\n", "mcount");
      }
  else if (flag_pic)
    {
      fprintf (file, "\tcall\t*%s@GOT(%%ebx)\n", "mcount");
    }
  else
    {
      fprintf (file, "\tcall\t%s\n", "mcount");
    }
}
static int
min_insn_size (rtx insn)
{
  int l = 0;
  if (!((((enum rtx_code) (insn)->code) == INSN) || (((enum rtx_code) (insn)->code) == JUMP_INSN) || (((enum rtx_code) (insn)->code) == CALL_INSN)) || !active_insn_p (insn))
    return 0;
  if (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == UNSPEC_VOLATILE
      && ((((((insn)->u.fld[5]).rtx1))->u.fld[1]).rtint) == 68)
    return 0;
  if (((enum rtx_code) (insn)->code) == JUMP_INSN
      && (((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_VEC
   || ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) == ADDR_DIFF_VEC))
    return 0;
  if (((enum rtx_code) (insn)->code) == CALL_INSN
      && symbolic_reference_mentioned_p ((((insn)->u.fld[5]).rtx1))
      && !(((insn))->jump))
    return 5;
  if (get_attr_length (insn) <= 1)
    return 1;
  if (((enum rtx_code) (insn)->code) != JUMP_INSN)
    {
      l = get_attr_length_address (insn);
      if (l < 4 && symbolic_reference_mentioned_p ((((insn)->u.fld[5]).rtx1)))
 l = 4;
    }
  if (l)
    return 1+l;
  else
    return 2;
}
static void
ix86_avoid_jump_misspredicts (void)
{
  rtx insn, start = get_insns ();
  int nbytes = 0, njumps = 0;
  int isjump = 0;
  for (insn = get_insns (); insn; insn = (((insn)->u.fld[2]).rtx1))
    {
      nbytes += min_insn_size (insn);
      if (dump_file)
        fprintf(dump_file, "Insn %i estimated to %i bytes\n",
  (((insn)->u.fld[0]).rtint), min_insn_size (insn));
      if ((((enum rtx_code) (insn)->code) == JUMP_INSN
    && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ADDR_VEC
    && ((enum rtx_code) ((((insn)->u.fld[5]).rtx1))->code) != ADDR_DIFF_VEC)
   || ((enum rtx_code) (insn)->code) == CALL_INSN)
 njumps++;
      else
 continue;
      while (njumps > 3)
 {
   start = (((start)->u.fld[2]).rtx1);
   if ((((enum rtx_code) (start)->code) == JUMP_INSN
        && ((enum rtx_code) ((((start)->u.fld[5]).rtx1))->code) != ADDR_VEC
        && ((enum rtx_code) ((((start)->u.fld[5]).rtx1))->code) != ADDR_DIFF_VEC)
       || ((enum rtx_code) (start)->code) == CALL_INSN)
     njumps--, isjump = 1;
   else
     isjump = 0;
   nbytes -= min_insn_size (start);
 }
      if (njumps < 0)
 fancy_abort ("gcc.c", 703759, "?");
      if (dump_file)
        fprintf (dump_file, "Interval %i to %i has %i bytes\n",
  (((start)->u.fld[0]).rtint), (((insn)->u.fld[0]).rtint), nbytes);
      if (njumps == 3 && isjump && nbytes < 16)
 {
   int padsize = 15 - nbytes + min_insn_size (insn);
   if (dump_file)
     fprintf (dump_file, "Padding insn %i by %i bytes!\n",
       (((insn)->u.fld[0]).rtint), padsize);
          emit_insn_before (gen_align (gen_rtx_CONST_INT (VOIDmode, (long) (padsize))), insn);
 }
    }
}
static void
ix86_pad_returns (void)
{
  edge e;
  for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next)
  {
    basic_block bb = e->src;
    rtx ret = (bb)->end_;
    rtx prev;
    unsigned char replace = 0;
    if (((enum rtx_code) (ret)->code) != JUMP_INSN || ((enum rtx_code) ((((ret)->u.fld[5]).rtx1))->code) != RETURN
 || !maybe_hot_bb_p (bb))
      continue;
    for (prev = (((ret)->u.fld[1]).rtx1); prev; prev = (((prev)->u.fld[1]).rtx1))
      if (active_insn_p (prev) || ((enum rtx_code) (prev)->code) == CODE_LABEL)
 break;
    if (prev && ((enum rtx_code) (prev)->code) == CODE_LABEL)
      {
 edge e;
 for (e = bb->pred; e; e = e->pred_next)
   if ((((e)->src->frequency * (e)->probability + 10000 / 2) / 10000) && e->src->index >= 0
       && !(e->flags & 1))
     replace = 1;
      }
    if (!replace)
      {
 prev = prev_active_insn (ret);
 if (prev
     && ((((enum rtx_code) (prev)->code) == JUMP_INSN && any_condjump_p (prev))
  || ((enum rtx_code) (prev)->code) == CALL_INSN))
   replace = 1;
 if (!prev && cfun->function_frequency > FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
   replace = 1;
      }
    if (replace)
      {
        emit_insn_before (gen_return_internal_long (), ret);
 delete_insn (ret);
      }
  }
}
static void
ix86_reorg (void)
{
  if (((ix86_tune == PROCESSOR_K8) || (ix86_tune == PROCESSOR_ATHLON)) && optimize && !optimize_size)
    ix86_pad_returns ();
  if ((x86_four_jump_limit & (1 << ix86_tune)) && optimize && !optimize_size)
    ix86_avoid_jump_misspredicts ();
}
unsigned char
x86_extended_QIreg_mentioned_p (rtx insn)
{
  int i;
  extract_insn_cached (insn);
  for (i = 0; i < recog_data.n_operands; i++)
    if ((((enum rtx_code) (recog_data.operand[i])->code) == REG)
 && (((recog_data.operand[i])->u.fld[0]).rtuint) >= 4)
       return 1;
  return 0;
}
static int
extended_reg_mentioned_1 (rtx *p, void *data )
{
   unsigned int regno;
   if (!(((enum rtx_code) (*p)->code) == REG))
     return 0;
   regno = (((*p)->u.fld[0]).rtuint);
   return ((regno) >= (((((20 + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((20 + 1) + 7) + 1) + 7) + 1) + 7)) || ((regno) >= (((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) && (regno) <= ((((((((20 + 1) + 7) + 1) + 7) + 1) + 7) + 1) + 7));
}
unsigned char
x86_extended_reg_mentioned_p (rtx insn)
{
  return for_each_rtx (&(((insn)->u.fld[5]).rtx1), extended_reg_mentioned_1, ((void *)0));
}
void
x86_emit_floatuns (rtx operands[2])
{
  rtx neglab, donelab, i0, i1, f0, in, out;
  enum machine_mode mode, inmode;
  inmode = ((enum machine_mode) (operands[1])->mode);
  if (inmode != SImode
      && inmode != DImode)
    fancy_abort ("gcc.c", 703883, "?");
  out = operands[0];
  in = force_reg (inmode, operands[1]);
  mode = ((enum machine_mode) (out)->mode);
  neglab = gen_label_rtx ();
  donelab = gen_label_rtx ();
  i1 = gen_reg_rtx ((0 ? DImode : SImode));
  f0 = gen_reg_rtx (mode);
  emit_cmp_and_jump_insns (in, (const_int_rtx[64]), LT, (const_int_rtx[64]), (0 ? DImode : SImode), 0, neglab);
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (out), (gen_rtx_fmt_e (FLOAT, (mode), (in)))));
  emit_jump_insn (gen_jump (donelab));
  emit_barrier ();
  emit_label (neglab);
  i0 = expand_simple_binop ((0 ? DImode : SImode), LSHIFTRT, in, (const_int_rtx[64 +1]), ((void *)0), 1, OPTAB_DIRECT);
  i1 = expand_simple_binop ((0 ? DImode : SImode), AND, in, (const_int_rtx[64 +1]), ((void *)0), 1, OPTAB_DIRECT);
  i0 = expand_simple_binop ((0 ? DImode : SImode), IOR, i0, i1, i0, 1, OPTAB_DIRECT);
  expand_float (f0, i0, 0);
  emit_insn (gen_rtx_fmt_ee (SET, (VOIDmode), (out), (gen_rtx_fmt_ee (PLUS, (mode), (f0), (f0)))));
  emit_label (donelab);
}
unsigned char
ix86_must_pass_in_stack (enum machine_mode mode, tree type)
{
   if (default_must_pass_in_stack (mode, type))
     return 1;
   return (!0 && type && mode == TImode);
}
void
ix86_expand_vector_init (rtx target, rtx vals)
{
  enum machine_mode mode = ((enum machine_mode) (target)->mode);
  int elt_size = ((unsigned short) mode_size[mode_inner[mode]]);
  int n_elts = (((unsigned short) mode_size[mode]) / elt_size);
  int i;
  for (i = n_elts - 1; i >= 0; i--)
    if (((enum rtx_code) ((((((vals)->u.fld[0]).rtvec1))->elem[i]))->code) != CONST_INT
 && ((enum rtx_code) ((((((vals)->u.fld[0]).rtvec1))->elem[i]))->code) != CONST_DOUBLE)
      break;
  if (i < 0)
    {
      emit_move_insn (target, gen_rtx_CONST_VECTOR (mode, (((vals)->u.fld[0]).rtvec1)));
      return;
    }
  if (!i)
    {
      rtx op = simplify_gen_subreg (mode, (((((vals)->u.fld[0]).rtvec1))->elem[0]),
        mode_inner[mode], 0);
      op = force_reg (mode, op);
      (((((vals)->u.fld[0]).rtvec1))->elem[0]) = (const_tiny_rtx[0][(int) (mode_inner[mode])]);
      emit_move_insn (target, gen_rtx_CONST_VECTOR (mode, (((vals)->u.fld[0]).rtvec1)));
      switch (((enum machine_mode) (target)->mode))
 {
   case V2DFmode:
     emit_insn (gen_sse2_movsd (target, target, op));
     break;
   case V4SFmode:
     emit_insn (gen_sse_movss (target, target, op));
     break;
   default:
     break;
 }
      return;
    }
  switch (((enum machine_mode) (target)->mode))
    {
      case V2DFmode:
 {
   rtx vecop0 =
     simplify_gen_subreg (V2DFmode, (((((vals)->u.fld[0]).rtvec1))->elem[0]), DFmode, 0);
   rtx vecop1 =
     simplify_gen_subreg (V2DFmode, (((((vals)->u.fld[0]).rtvec1))->elem[1]), DFmode, 0);
   vecop0 = force_reg (V2DFmode, vecop0);
   vecop1 = force_reg (V2DFmode, vecop1);
   emit_insn (gen_sse2_unpcklpd (target, vecop0, vecop1));
 }
 break;
      case V4SFmode:
 {
   rtx vecop0 =
     simplify_gen_subreg (V4SFmode, (((((vals)->u.fld[0]).rtvec1))->elem[0]), SFmode, 0);
   rtx vecop1 =
     simplify_gen_subreg (V4SFmode, (((((vals)->u.fld[0]).rtvec1))->elem[1]), SFmode, 0);
   rtx vecop2 =
     simplify_gen_subreg (V4SFmode, (((((vals)->u.fld[0]).rtvec1))->elem[2]), SFmode, 0);
   rtx vecop3 =
     simplify_gen_subreg (V4SFmode, (((((vals)->u.fld[0]).rtvec1))->elem[3]), SFmode, 0);
   rtx tmp1 = gen_reg_rtx (V4SFmode);
   rtx tmp2 = gen_reg_rtx (V4SFmode);
   vecop0 = force_reg (V4SFmode, vecop0);
   vecop1 = force_reg (V4SFmode, vecop1);
   vecop2 = force_reg (V4SFmode, vecop2);
   vecop3 = force_reg (V4SFmode, vecop3);
   emit_insn (gen_sse_unpcklps (tmp1, vecop1, vecop3));
   emit_insn (gen_sse_unpcklps (tmp2, vecop0, vecop2));
   emit_insn (gen_sse_unpcklps (target, tmp2, tmp1));
 }
 break;
      default:
 fancy_abort ("gcc.c", 704003, "?");
    }
}
static tree
ix86_md_asm_clobbers (tree clobbers)
{
  clobbers = tree_cons_stat ((tree) ((void *)0),build_string1 (5, "flags"),clobbers )
            ;
  clobbers = tree_cons_stat ((tree) ((void *)0),build_string1 (4, "fpsr"),clobbers )
            ;
  clobbers = tree_cons_stat ((tree) ((void *)0),build_string1 (7, "dirflag"),clobbers )
            ;
  return clobbers;
}
enum rtx_code
ix86_reverse_condition (enum rtx_code code, enum machine_mode mode)
{
  return (mode != CCFPmode && mode != CCFPUmode
   ? reverse_condition (code)
   : reverse_condition_maybe_unordered (code));
}
const char *
output_387_reg_move (rtx insn, rtx *operands)
{
  if ((((enum rtx_code) (operands[1])->code) == REG)
      && find_regno_note (insn, REG_DEAD, (((operands[1])->u.fld[0]).rtuint)))
    {
      if ((((operands[0])->u.fld[0]).rtuint) == 8
   && (x86_use_ffreep & (1 << ix86_tune)))
 return "ffreep\t%y0";
      return "fstp\t%y0";
    }
  if (((((enum rtx_code) (operands[0])->code) == REG) && (((operands[0])->u.fld[0]).rtuint) == 8))
    return "fld%z1\t%y1";
  return "fst\t%y0";
}
void
ix86_emit_fp_unordered_jump (rtx label)
{
  rtx reg = gen_reg_rtx (HImode);
  rtx temp;
  emit_insn (gen_x86_fnstsw_1 (reg));
  if (((x86_use_sahf & (1 << ix86_tune)) && !0))
    {
      emit_insn (gen_x86_sahf_1 (reg));
      temp = gen_rtx_REG (CCmode, 17);
      temp = gen_rtx_fmt_ee (UNORDERED, (VOIDmode), (temp), ((const_int_rtx[64])));
    }
  else
    {
      emit_insn (gen_testqi_ext_ccno_0 (reg, gen_rtx_CONST_INT (VOIDmode, (long) (0x04))));
      temp = gen_rtx_REG (CCNOmode, 17);
      temp = gen_rtx_fmt_ee (NE, (VOIDmode), (temp), ((const_int_rtx[64])));
    }
  temp = gen_rtx_fmt_eee (IF_THEN_ELSE, (VOIDmode), (temp), (gen_rtx_fmt_u00 (LABEL_REF, (VOIDmode), (label))), ((global_rtl[GR_PC])))
                ;
  temp = gen_rtx_fmt_ee (SET, (VOIDmode), ((global_rtl[GR_PC])), (temp));
  emit_jump_insn (temp);
}
void ix86_emit_i387_log1p (rtx op0, rtx op1)
{
  rtx label1 = gen_label_rtx ();
  rtx label2 = gen_label_rtx ();
  rtx tmp = gen_reg_rtx (XFmode);
  rtx tmp2 = gen_reg_rtx (XFmode);
  emit_insn (gen_absxf2 (tmp, op1));
  emit_insn (gen_cmpxf (tmp,
    const_double_from_real_value (real_from_string12 ("0.29289321881345247561810596348408353", XFmode), XFmode)
              ));
  emit_jump_insn (gen_bge (label1));
  emit_move_insn (tmp2, standard_80387_constant_rtx (4));
  emit_insn (gen_fyl2xp1_xf3 (op0, tmp2, op1));
  emit_jump (label2);
  emit_label (label1);
  emit_move_insn (tmp, (const_tiny_rtx[1][(int) (XFmode)]));
  emit_insn (gen_addxf3 (tmp, op1, tmp));
  emit_move_insn (tmp2, standard_80387_constant_rtx (4));
  emit_insn (gen_fyl2x_xf3 (op0, tmp2, tmp));
  emit_label (label2);
}
void
gt_ggc_mx_stack_local_entry (void *x_p)
{
  struct stack_local_entry * const x = (struct stack_local_entry *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).rtl != ((void *)0)) gt_ggc_mx_rtx_def ((*x).rtl); } while (0);
      do { if ((*x).next != ((void *)0)) gt_ggc_mx_stack_local_entry ((*x).next); } while (0);
    }
}
void
gt_pch_nx_stack_local_entry (void *x_p)
{
  struct stack_local_entry * const x = (struct stack_local_entry *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_17stack_local_entry))
    {
      do { if ((*x).rtl != ((void *)0)) gt_pch_nx_rtx_def ((*x).rtl); } while (0);
      do { if ((*x).next != ((void *)0)) gt_pch_nx_stack_local_entry ((*x).next); } while (0);
    }
}
void
gt_pch_p_17stack_local_entry (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct stack_local_entry * const x = (struct stack_local_entry *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).rtl), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).next), cookie);
}
const struct ggc_root_tab gt_ggc_r_gt_i386_h[] = {
  {
    &ix86_tls_symbol,
    1,
    sizeof (ix86_tls_symbol),
    &gt_ggc_mx_rtx_def,
    &gt_pch_nx_rtx_def
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static void *
linux_gt_pch_get_address (size_t size, int fd)
{
  size_t buffer_size = 32 * 1024 * 1024;
  void *addr, *buffer;
  FILE *f;
  unsigned char randomize_on;
  addr = mmap ((void *)0x1000000000, size, 0x1 | 0x2,
        0x02, fd, 0);
  if (addr == (void *) ((void *) -1))
    return ((void *)0);
  munmap (addr, size);
  if (0x1000000000 && addr == (void *) 0x1000000000)
    return addr;
  f = fopen ("/proc/sys/kernel/exec-shield-randomize", "r");
  randomize_on = 0;
  if (f != ((void *)0))
    {
      char buf[100];
      size_t c;
      c = fread (buf, 1, sizeof buf - 1, f);
      if (c > 0)
 {
   buf[c] = '\0';
   randomize_on = (atoi (buf) > 0);
 }
      fclose (f);
    }
  if (!randomize_on)
    return addr;
  buffer = mmap (0, buffer_size, 0x0, 0x02 | 0x20, -1, 0);
  addr = mmap (0, size, 0x1 | 0x2, 0x02, fd, 0);
  if (buffer != (void *) ((void *) -1))
    munmap (buffer, buffer_size);
  if (addr == (void *) ((void *) -1))
    return ((void *)0);
  munmap (addr, size);
  return addr;
}
const struct host_hooks host_hooks = { hook_void_void, linux_gt_pch_get_address, mmap_gt_pch_use_address, default_gt_pch_alloc_granularity };
int flag_inline_trees = 0;
typedef struct inline_data
{
  varray_type fns;
  unsigned first_inlined_fn;
  tree ret_label;
  tree retvar;
  splay_tree decl_map;
  int in_target_cleanup_p;
  varray_type inlined_fns;
  unsigned char cloning_p;
  unsigned char saving_p;
  htab_t tree_pruner;
  struct cgraph_node *node;
  struct cgraph_node *current_node;
  tree_stmt_iterator tsi;
} inline_data;
static tree declare_return_variable (inline_data *, tree, tree *);
static tree copy_body_r (tree *, int *, void *);
static tree copy_body (inline_data *);
static tree expand_call_inline (tree *, int *, void *);
static void expand_calls_inline (tree *, inline_data *);
static unsigned char inlinable_function_p (tree);
static tree remap_decl (tree, inline_data *);
static tree remap_type (tree, inline_data *);
static tree initialize_inlined_parameters (inline_data *, tree,
        tree, tree, tree);
static void remap_block (tree *, inline_data *);
static tree remap_decls (tree, inline_data *);
static void copy_bind_expr (tree *, int *, inline_data *);
static tree mark_local_for_remap_r (tree *, int *, void *);
static tree unsave_r (tree *, int *, void *);
static void declare_inline_vars (tree bind_expr, tree vars);
static void
insert_decl_map (inline_data *id, tree key, tree value1)
{
  splay_tree_insert (id->decl_map, (splay_tree_key) key,
       (splay_tree_value) value1);
  if (key != value1)
    splay_tree_insert (id->decl_map, (splay_tree_key) value1,
         (splay_tree_value) value1);
}
static tree
remap_decl (tree decl, inline_data *id)
{
  splay_tree_node n = splay_tree_lookup (id->decl_map, (splay_tree_key) decl);
  tree fn = ((id->fns)->data.tree1[(id->fns)->elements_used - 1]);
  if (!n)
    {
      tree t = copy_decl_for_inlining (decl, fn, ((id->fns)->data.tree1[0]));
      ((t)->common.type) = remap_type (((t)->common.type), id);
      if (((enum tree_code) (t)->common.code) == TYPE_DECL)
        ((t)->decl.result) = remap_type (((t)->decl.result), id);
      else if (((enum tree_code) (t)->common.code) == PARM_DECL)
        ((t)->decl.result)
   = remap_type (((t)->decl.result), id);
      walk_tree (&((t)->decl.size), copy_body_r, id, ((void *)0));
      walk_tree (&((t)->decl.size_unit), copy_body_r, id, ((void *)0));
      if (((enum tree_code) (t)->common.code) == FIELD_DECL)
 {
   walk_tree (&((t)->decl.arguments), copy_body_r, id, ((void *)0));
   if (((enum tree_code) (((t)->decl.context))->common.code) == QUAL_UNION_TYPE)
     walk_tree (&((t)->decl.initial), copy_body_r, id, ((void *)0));
 }
      insert_decl_map (id, decl, t);
      return t;
    }
  return unshare_expr ((tree) n->value1);
}
static tree
remap_type (tree type, inline_data *id)
{
  splay_tree_node node;
  tree new, t;
  if (type == ((void *)0))
    return type;
  node = splay_tree_lookup (id->decl_map, (splay_tree_key) type);
  if (node)
    return (tree) node->value1;
  if (! variably_modified_type_p (type, ((id->fns)->data.tree1[(id->fns)->elements_used - 1])))
    {
      insert_decl_map (id, type, type);
      return type;
    }
  if (((enum tree_code) (type)->common.code) == POINTER_TYPE)
    {
      new = build_pointer_type_for_mode (remap_type (((type)->common.type), id),
      ((type)->type.mode),
      ((type)->common.static_flag));
      insert_decl_map (id, type, new);
      return new;
    }
  else if (((enum tree_code) (type)->common.code) == REFERENCE_TYPE)
    {
      new = build_reference_type_for_mode (remap_type (((type)->common.type), id),
         ((type)->type.mode),
         ((type)->common.static_flag));
      insert_decl_map (id, type, new);
      return new;
    }
  else
    new = copy_node_stat (type );
  insert_decl_map (id, type, new);
  t = ((type)->type.main_variant);
  if (type != t)
    {
      t = remap_type (t, id);
      ((new)->type.main_variant) = t;
      ((new)->type.next_variant) = ((t)->type.main_variant);
      ((t)->type.next_variant) = new;
    }
  else
    {
      ((new)->type.main_variant) = new;
      ((new)->type.next_variant) = ((void *)0);
    }
  ((new)->type.pointer_to) = ((void *)0);
  ((new)->type.reference_to) = ((void *)0);
  switch (((enum tree_code) (new)->common.code))
    {
    case INTEGER_TYPE:
    case REAL_TYPE:
    case ENUMERAL_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
      t = ((new)->type.minval);
      if (t && ((enum tree_code) (t)->common.code) != INTEGER_CST)
        walk_tree (&((new)->type.minval), copy_body_r, id, ((void *)0));
      t = ((new)->type.maxval);
      if (t && ((enum tree_code) (t)->common.code) != INTEGER_CST)
        walk_tree (&((new)->type.maxval), copy_body_r, id, ((void *)0));
      return new;
    case FUNCTION_TYPE:
      ((new)->common.type) = remap_type (((new)->common.type), id);
      walk_tree (&((new)->type.value1s), copy_body_r, id, ((void *)0));
      return new;
    case ARRAY_TYPE:
      ((new)->common.type) = remap_type (((new)->common.type), id);
      ((new)->type.value1s) = remap_type (((new)->type.value1s), id);
      break;
    case RECORD_TYPE:
    case UNION_TYPE:
    case QUAL_UNION_TYPE:
      walk_tree (&((new)->type.value1s), copy_body_r, id, ((void *)0));
      break;
    case FILE_TYPE:
    case SET_TYPE:
    case OFFSET_TYPE:
    default:
      fancy_abort ("gcc.c", 704625, "?");
    }
  walk_tree (&((new)->type.size), copy_body_r, id, ((void *)0));
  walk_tree (&((new)->type.size_unit), copy_body_r, id, ((void *)0));
  return new;
}
static tree
remap_decls (tree decls, inline_data *id)
{
  tree old_var;
  tree new_decls = (tree) ((void *)0);
  for (old_var = decls; old_var; old_var = ((old_var)->common.chain))
    {
      tree new_var;
      new_var = remap_decl (old_var, id);
      if (!new_var || new_var == id->retvar)
 ;
      else
 {
   ((new_var)->common.chain) = new_decls;
   new_decls = new_var;
 }
    }
  return nreverse (new_decls);
}
static void
remap_block (tree *block, inline_data *id)
{
  tree old_block;
  tree new_block;
  tree fn;
  old_block = *block;
  new_block = make_node_stat (BLOCK );
  ((new_block)->common.used_flag) = ((old_block)->common.used_flag);
  ((new_block)->block.abstract_origin) = old_block;
  *block = new_block;
  ((new_block)->block.vars) = remap_decls (((old_block)->block.vars), id);
  fn = ((id->fns)->data.tree1[0]);
  if (id->cloning_p)
    lang_hooks.decls.insert_block (new_block);
  else
    {
      tree *first_block;
      if (((fn)->decl.initial))
 first_block = &(((((fn)->decl.initial)))->common.chain);
      else
 first_block = &((fn)->decl.initial);
      (((new_block))->common.chain) = *first_block;
      *first_block = new_block;
    }
  insert_decl_map (id, old_block, new_block);
}
static void
copy_statement_list (tree *tp)
{
  tree_stmt_iterator oi, ni;
  tree new;
  new = alloc_stmt_list ();
  ni = tsi_start (new);
  oi = tsi_start (*tp);
  *tp = new;
  for (; !tsi_end_p (oi); tsi_next (&oi))
    tsi_link_after (&ni, tsi_stmt (oi), TSI_NEW_STMT);
}
static void
copy_bind_expr (tree *tp, int *walk_subtrees, inline_data *id)
{
  tree block = ((((*tp))->exp.operands[2]));
  copy_tree_r (tp, walk_subtrees, ((void *)0));
  if (block)
    {
      remap_block (&block, id);
      ((((*tp))->exp.operands[2])) = block;
    }
  if (((((*tp))->exp.operands[0])))
    ((((*tp))->exp.operands[0])) = remap_decls (((((*tp))->exp.operands[0])), id);
}
static tree
copy_body_r (tree *tp, int *walk_subtrees, void *data)
{
  inline_data *id = (inline_data *) data;
  tree fn = ((id->fns)->data.tree1[(id->fns)->elements_used - 1]);
  if (((enum tree_code) (*tp)->common.code) == RETURN_EXPR && id->ret_label)
    {
      tree return_stmt = *tp;
      tree goto_stmt;
      tree assignment = ((return_stmt)->exp.operands[0]);
      goto_stmt = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],id->ret_label );
      ((id->ret_label)->common.used_flag) = 1;
      if (assignment)
        {
   if (lang_hooks.gimple_before_inlining)
     if (((enum tree_code) (assignment)->common.code) == RESULT_DECL)
       gimplify_stmt (&assignment);
   *tp = build (BIND_EXPR, global_trees[TI_VOID_TYPE], ((void *)0), ((void *)0), ((void *)0));
   append_to_statement_list (assignment, &((((*tp))->exp.operands[1])));
   append_to_statement_list (goto_stmt, &((((*tp))->exp.operands[1])));
        }
      else
 *tp = goto_stmt;
    }
  else if (lang_hooks.tree_inlining.auto_var_in_fn_p (*tp, fn))
    {
      tree new_decl;
      new_decl = remap_decl (*tp, id);
      if (! new_decl)
 fancy_abort ("gcc.c", 704805, "?");
      while ((((enum tree_code) (new_decl)->common.code) == NOP_EXPR || ((enum tree_code) (new_decl)->common.code) == CONVERT_EXPR || ((enum tree_code) (new_decl)->common.code) == NON_LVALUE_EXPR) && ((new_decl)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((new_decl)->common.type) == ((((new_decl)->exp.operands[0]))->common.type))) (new_decl) = ((new_decl)->exp.operands[0]);
      *tp = new_decl;
    }
  else if (((enum tree_code) (*tp)->common.code) == STATEMENT_LIST)
    copy_statement_list (tp);
  else if (((enum tree_code) (*tp)->common.code) == SAVE_EXPR)
    remap_save_expr (tp, id->decl_map, walk_subtrees);
  else if (((enum tree_code) (*tp)->common.code) == UNSAVE_EXPR)
    fancy_abort ("gcc.c", 704821, "?");
  else if (((enum tree_code) (*tp)->common.code) == BIND_EXPR)
    copy_bind_expr (tp, walk_subtrees, id);
  else if (((enum tree_code) (*tp)->common.code) == LABELED_BLOCK_EXPR)
    {
      tree new_block = copy_node_stat (*tp );
      insert_decl_map (id, *tp, new_block);
      *tp = new_block;
    }
  else if (((enum tree_code) (*tp)->common.code) == EXIT_BLOCK_EXPR)
    {
      splay_tree_node n
 = splay_tree_lookup (id->decl_map,
        (splay_tree_key) ((*tp)->exp.operands[0]));
      if (! n)
 fancy_abort ("gcc.c", 704840, "?");
      *tp = copy_node_stat (*tp );
      ((*tp)->exp.operands[0]) = (tree) n->value1;
    }
  else if ((tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 't'))
    *tp = remap_type (*tp, id);
  else
    {
      tree old_node = *tp;
      if (((enum tree_code) (*tp)->common.code) == MODIFY_EXPR
   && ((*tp)->exp.operands[0]) == ((*tp)->exp.operands[1])
   && (lang_hooks.tree_inlining.auto_var_in_fn_p
       (((*tp)->exp.operands[0]), fn)))
 {
   tree decl = ((*tp)->exp.operands[0]), value1;
   splay_tree_node n;
   n = splay_tree_lookup (id->decl_map, (splay_tree_key) decl);
   if (n)
     {
       value1 = (tree) n->value1;
       while ((((enum tree_code) (value1)->common.code) == NOP_EXPR || ((enum tree_code) (value1)->common.code) == CONVERT_EXPR || ((enum tree_code) (value1)->common.code) == NON_LVALUE_EXPR) && ((value1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((value1)->common.type) == ((((value1)->exp.operands[0]))->common.type))) (value1) = ((value1)->exp.operands[0]);
       if (((value1)->common.constant_flag) || ((tree_code_type[(int) (((enum tree_code) (value1)->common.code))] == 'd') && ((value1)->common.readonly_flag)))
  {
    *tp = value1;
    return copy_body_r (tp, walk_subtrees, data);
  }
     }
 }
      else if (((enum tree_code) (*tp)->common.code) == ADDR_EXPR
        && (lang_hooks.tree_inlining.auto_var_in_fn_p
     (((*tp)->exp.operands[0]), fn)))
 {
   tree decl = ((*tp)->exp.operands[0]), value1;
   splay_tree_node n;
   n = splay_tree_lookup (id->decl_map, (splay_tree_key) decl);
   if (n)
     {
       value1 = (tree) n->value1;
       if (((enum tree_code) (value1)->common.code) == INDIRECT_REF)
  {
    if (!lang_hooks.types_compatible_p
         (((*tp)->common.type), ((((value1)->exp.operands[0]))->common.type)))
      *tp = fold_convert (((*tp)->common.type),
     ((value1)->exp.operands[0]));
    else
      *tp = ((value1)->exp.operands[0]);
    return copy_body_r (tp, walk_subtrees, data);
  }
     }
 }
      else if (((enum tree_code) (*tp)->common.code) == INDIRECT_REF)
 {
   tree decl = ((*tp)->exp.operands[0]), value1;
   splay_tree_node n;
   n = splay_tree_lookup (id->decl_map, (splay_tree_key) decl);
   if (n)
     {
       value1 = (tree) n->value1;
       while ((((enum tree_code) (value1)->common.code) == NOP_EXPR || ((enum tree_code) (value1)->common.code) == CONVERT_EXPR || ((enum tree_code) (value1)->common.code) == NON_LVALUE_EXPR) && ((value1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((value1)->common.type))->type.mode) == ((((((value1)->exp.operands[0]))->common.type))->type.mode))) (value1) = ((value1)->exp.operands[0]);
       if (((enum tree_code) (value1)->common.code) == ADDR_EXPR
    && (lang_hooks.types_compatible_p
        (((*tp)->common.type), ((((value1)->exp.operands[0]))->common.type))))
  {
    *tp = ((value1)->exp.operands[0]);
    return copy_body_r (tp, walk_subtrees, data);
  }
     }
 }
      copy_tree_r (tp, walk_subtrees, ((void *)0));
      if (((enum tree_code) (*tp)->common.code) == CALL_EXPR && id->node && get_callee_fndecl (*tp))
 {
   if (id->saving_p)
     {
       struct cgraph_node *node;
              struct cgraph_edge *edge1;
       for (node = id->node->next_clone; node; node = node->next_clone)
  {
    edge1 = cgraph_edge1 (node, old_node);
    if (edge1)
      edge1->call_expr = *tp;
    else
      fancy_abort ("gcc.c", 704941, "?");
  }
     }
   else
     {
              struct cgraph_edge1 *edge1
  = cgraph_edge1 (id->current_node, old_node);
       if (edge1)
         cgraph_clone_edge1 (edge1, id->node, *tp);
     }
 }
      ((*tp)->common.type) = remap_type (((*tp)->common.type), id);
      if (((enum tree_code) (*tp)->common.code) == TARGET_EXPR && ((*tp)->exp.operands[3]))
 {
   ((*tp)->exp.operands[1]) = ((*tp)->exp.operands[3]);
   ((*tp)->exp.operands[3]) = (tree) ((void *)0);
 }
    }
  return (tree) ((void *)0);
}
static tree
copy_body (inline_data *id)
{
  tree body;
  tree fndecl = ((id->fns)->data.tree1[(id->fns)->elements_used - 1]);
  if (fndecl == current_function_decl
      && cfun->saved_tree)
    body = cfun->saved_tree;
  else
    body = ((fndecl)->decl.saved_tree);
  walk_tree (&body, copy_body_r, id, ((void *)0));
  return body;
}
static void
setup_one_parameter (inline_data *id, tree p, tree value1, tree fn,
       tree *init_stmts, tree *vars, unsigned char *gimplify_init_stmts_p)
{
  tree init_stmt;
  tree var;
  tree var_sub;
  if (((p)->common.readonly_flag)
      && !((p)->common.addressable_flag)
      && value1 && !((value1)->common.side_effects_flag))
    {
      if ((((value1)->common.constant_flag) || ((tree_code_type[(int) (((enum tree_code) (value1)->common.code))] == 'd') && ((value1)->common.readonly_flag)))
   && (!lang_hooks.gimple_before_inlining
       || (is_gimple_min_invariant (value1)
    && ((value1)->common.type) == ((p)->common.type))))
 {
   if ((tree_code_type[(int) (((enum tree_code) (value1)->common.code))] == 'd'))
     value1 = build1_stat (NOP_EXPR,((value1)->common.type),value1 );
   else if (((value1)->common.type) != ((p)->common.type))
     value1 = fold (build1_stat (NOP_EXPR,((p)->common.type),value1 ));
   insert_decl_map (id, p, value1);
   return;
 }
    }
  var = copy_decl_for_inlining (p, fn, ((id->fns)->data.tree1[0]));
  if (((var)->common.type) != ((p)->common.type)
      && (((enum tree_code) (((var)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((var)->common.type))->common.code) == REFERENCE_TYPE)
      && ((((var)->common.type))->common.type) == ((p)->common.type))
    {
      insert_decl_map (id, var, var);
      var_sub = build1_stat (INDIRECT_REF,((p)->common.type),var );
    }
  else
    var_sub = var;
  insert_decl_map (id, p, var_sub);
  ((var)->common.chain) = *vars;
  *vars = var;
  ((var)->decl.seen_in_bind_expr) = lang_hooks.gimple_before_inlining;
  if (((((p)->common.type))->type.needs_constructing_flag))
    ((var)->common.readonly_flag) = 0;
  if (value1)
    {
      tree rhs = fold_convert (((var)->common.type), value1);
      if (rhs == global_trees[TI_ERROR_MARK])
 return;
      init_stmt = build (MODIFY_EXPR, ((var)->common.type), var, rhs);
      append_to_statement_list (init_stmt, init_stmts);
      if (!is_gimple_val (rhs)
   && (!is_gimple_cast (rhs)
       || !is_gimple_val (((rhs)->exp.operands[0]))))
 *gimplify_init_stmts_p = 1;
    }
}
static tree
initialize_inlined_parameters (inline_data *id, tree args, tree static_chain,
          tree fn, tree bind_expr)
{
  tree init_stmts = (tree) ((void *)0);
  tree parms;
  tree a;
  tree p;
  tree vars = (tree) ((void *)0);
  unsigned char gimplify_init_stmts_p = 0;
  int argnum = 0;
  parms = ((fn)->decl.arguments);
  if (fn == current_function_decl)
    parms = cfun->saved_args;
  for (p = parms, a = args; p;
       a = a ? ((a)->common.chain) : a, p = ((p)->common.chain))
    {
      tree value1;
      ++argnum;
      value1 = lang_hooks.tree_inlining.convert_parm_for_inlining
       (p, a ? ((a)->list.value1) : (tree) ((void *)0), fn, argnum);
      setup_one_parameter (id, p, value1, fn, &init_stmts, &vars,
      &gimplify_init_stmts_p);
    }
  for (; a; a = ((a)->common.chain))
    {
      tree value1 = ((a)->list.value1);
      append_to_statement_list (value1, &init_stmts);
    }
  p = ((fn)->decl.u2.f)->static_chain_decl;
  if (p)
    {
      if (!static_chain)
 fancy_abort ("gcc.c", 705149, "?");
       setup_one_parameter (id, p, static_chain, fn, &init_stmts, &vars,
       &gimplify_init_stmts_p);
    }
  if (gimplify_init_stmts_p && lang_hooks.gimple_before_inlining)
    gimplify_body (&init_stmts, current_function_decl);
  declare_inline_vars (bind_expr, vars);
  return init_stmts;
}
static tree
declare_return_variable (inline_data *id, tree return_slot_addr, tree *use_p)
{
  tree fn = ((id->fns)->data.tree1[(id->fns)->elements_used - 1]);
  tree result = ((fn)->decl.result);
  int need_return_decl = 1;
  tree var;
  if (!result || (((enum tree_code) (((result)->common.type))->common.code) == VOID_TYPE))
    {
      *use_p = (tree) ((void *)0);
      return (tree) ((void *)0);
    }
  var = (lang_hooks.tree_inlining.copy_res_decl_for_inlining
  (result, fn, ((id->fns)->data.tree1[0]), id->decl_map,
   &need_return_decl, return_slot_addr));
  ((var)->common.nowarning_flag) = 1;
  insert_decl_map (id, result, var);
  id->retvar = var;
  if (return_slot_addr)
    *use_p = (tree) ((void *)0);
  else if (((var)->common.type) == ((((fn)->common.type))->common.type))
    *use_p = var;
  else if (((enum tree_code) (var)->common.code) == INDIRECT_REF)
    *use_p = build1_stat (INDIRECT_REF,((((fn)->common.type))->common.type),((var)->exp.operands[0]) )
                             ;
  else if (((((var)->common.type))->common.addressable_flag))
    fancy_abort ("gcc.c", 705211, "?");
  else
    *use_p = build1_stat (NOP_EXPR,((((fn)->common.type))->common.type),var );
  if (need_return_decl)
    return var;
  else
    return (tree) ((void *)0);
}
unsigned char
tree_inlinable_function_p (tree fn)
{
  return inlinable_function_p (fn);
}
static const char *inline_forbidden_reason;
static tree
inline_forbidden_p_1 (tree *nodep, int *walk_subtrees ,
        void *fnp)
{
  tree node = *nodep;
  tree fn = (tree) fnp;
  tree t;
  switch (((enum tree_code) (node)->common.code))
    {
    case CALL_EXPR:
      if (alloca_call_p (node)
   && !lookup_attribute ("always_inline", ((fn)->decl.attributes)))
 {
   inline_forbidden_reason
     = "%Jfunction '%F' can never be inlined because it uses alloca (override using the always_inline attribute)"
                                                         ;
   return node;
 }
      t = get_callee_fndecl (node);
      if (! t)
 break;
      if (setjmp_call_p (t))
 {
   inline_forbidden_reason
     = "%Jfunction '%F' can never be inlined because it uses setjmp";
   return node;
 }
      if (((t)->decl.built_in_class) == BUILT_IN_NORMAL)
 switch (((t)->decl.u1.f))
   {
   case BUILT_IN_VA_START:
   case BUILT_IN_STDARG_START:
   case BUILT_IN_NEXT_ARG:
   case BUILT_IN_VA_END:
     inline_forbidden_reason
       = "%Jfunction '%F' can never be inlined because it uses variable argument lists"
                                    ;
     return node;
   case BUILT_IN_LONGJMP:
     inline_forbidden_reason
       = "%Jfunction '%F' can never be inlined because it uses setjmp-longjmp exception handling"
                                                 ;
     return node;
   case BUILT_IN_NONLOCAL_GOTO:
     inline_forbidden_reason
       = "%Jfunction '%F' can never be inlined because it uses non-local goto"
                              ;
     return node;
   default:
     break;
   }
      break;
    case BIND_EXPR:
      for (t = ((((node))->exp.operands[0])); t ; t = ((t)->common.chain))
 {
   if (((enum tree_code) (t)->common.code) == FUNCTION_DECL && ((t)->decl.initial))
     {
       inline_forbidden_reason
  = "%Jfunction '%F' can never be inlined because it contains a nested function"
                                               ;
       return node;
     }
 }
      break;
    case GOTO_EXPR:
      t = ((node)->exp.operands[0]);
      if (((enum tree_code) (t)->common.code) != LABEL_DECL)
 {
   inline_forbidden_reason
     = "%Jfunction '%F' can never be inlined because it contains a computed goto"
                                         ;
   return node;
 }
      break;
    case LABEL_EXPR:
      t = ((node)->exp.operands[0]);
      if (((t)->decl.nonlocal_flag))
 {
   inline_forbidden_reason
     = "%Jfunction '%F' can never be inlined because it receives a non-local goto"
                                          ;
   return node;
 }
      break;
    case RECORD_TYPE:
    case UNION_TYPE:
      for (t = ((node)->type.value1s); t; t = ((t)->common.chain))
 if (variably_modified_type_p (((t)->common.type), ((void *)0)))
   {
     inline_forbidden_reason
       = "%Jfunction '%F' can never be inlined because it uses variable sized variables"
                                                ;
     return node;
   }
    default:
      break;
    }
  return (tree) ((void *)0);
}
static tree
inline_forbidden_p (tree fndecl)
{
  location_t saved_loc = input_location;
  tree ret = walk_tree_without_duplicates (&((fndecl)->decl.saved_tree),
        inline_forbidden_p_1, fndecl);
  input_location = saved_loc;
  return ret;
}
static unsigned char
inlinable_function_p (tree fn)
{
  unsigned char inlinable = 1;
  if (((fn)->decl.uninlinable))
    return 0;
  inlinable = !lang_hooks.tree_inlining.cannot_inline_tree_fn (&fn);
  if (!((fn)->decl.saved_tree))
    return 0;
  else if (!flag_inline_trees)
    inlinable = 0;
  else if (!((fn)->decl.inline_flag) && !flag_unit_at_a_time)
    inlinable = 0;
  else if (inline_forbidden_p (fn))
    {
      unsigned char do_warning = (warn_inline
    && ((fn)->decl.inline_flag)
    && ((fn)->decl.declared_inline_flag)
    && !((fn)->decl.in_system_header1_flag));
      if (lookup_attribute ("always_inline", ((fn)->decl.attributes)))
 sorry (inline_forbidden_reason, fn, fn);
      else if (do_warning)
 warning (inline_forbidden_reason, fn, fn);
      inlinable = 0;
    }
  ((fn)->decl.uninlinable) = !inlinable;
  return inlinable;
}
static tree
estimate_num_insns_1 (tree *tp, int *walk_subtrees, void *data)
{
  int *count = data;
  tree x = *tp;
  if ((tree_code_type[(int) (((enum tree_code) (x)->common.code))] == 't') || (tree_code_type[(int) (((enum tree_code) (x)->common.code))] == 'd'))
    {
      *walk_subtrees = 0;
      return ((void *)0);
    }
  else if (tree_code_type[(int) (((enum tree_code) (x)->common.code))] == 'c'
    || tree_code_type[(int) (((enum tree_code) (x)->common.code))] == 'r')
    return ((void *)0);
  switch (((enum tree_code) (x)->common.code))
    {
    case TREE_LIST:
    case TREE_VEC:
    case BLOCK:
    case COMPONENT_REF:
    case BIT_FIELD_REF:
    case INDIRECT_REF:
    case BUFFER_REF:
    case ARRAY_REF:
    case ARRAY_RANGE_REF:
    case OBJ_TYPE_REF:
    case EXC_PTR_EXPR:
    case FILTER_EXPR:
    case COMPOUND_EXPR:
    case BIND_EXPR:
    case LABELED_BLOCK_EXPR:
    case WITH_CLEANUP_EXPR:
    case NOP_EXPR:
    case VIEW_CONVERT_EXPR:
    case SAVE_EXPR:
    case UNSAVE_EXPR:
    case ADDR_EXPR:
    case REFERENCE_EXPR:
    case COMPLEX_EXPR:
    case EXIT_BLOCK_EXPR:
    case CASE_LABEL_EXPR:
    case SSA_NAME:
    case CATCH_EXPR:
    case EH_FILTER_EXPR:
    case STATEMENT_LIST:
    case ERROR_MARK:
    case NON_LVALUE_EXPR:
    case ENTRY_VALUE_EXPR:
    case FDESC_EXPR:
    case VA_ARG_EXPR:
    case TRY_CATCH_EXPR:
    case TRY_FINALLY_EXPR:
    case LABEL_EXPR:
    case GOTO_EXPR:
    case RETURN_EXPR:
    case EXIT_EXPR:
    case LOOP_EXPR:
    case PHI_NODE:
      break;
    case IDENTIFIER_NODE:
    case INTEGER_CST:
    case REAL_CST:
    case COMPLEX_CST:
    case VECTOR_CST:
    case STRING1_CST:
      *walk_subtrees = 0;
      return ((void *)0);
    case INIT_EXPR:
    case MODIFY_EXPR:
      x = ((x)->exp.operands[0]);
    case TARGET_EXPR:
    case CONSTRUCTOR:
      {
 long size;
 size = int_size_in_bytes (((x)->common.type));
 if (size < 0 || size > (0 ? 8 : 4) * (optimize_size ? 3 : ix86_cost->move_ratio))
   *count += 10;
 else
   *count += ((size + (0 ? 8 : 4) - 1) / (0 ? 8 : 4));
      }
      break;
    case COND_EXPR:
    case PLUS_EXPR:
    case MINUS_EXPR:
    case MULT_EXPR:
    case FIX_TRUNC_EXPR:
    case FIX_CEIL_EXPR:
    case FIX_FLOOR_EXPR:
    case FIX_ROUND_EXPR:
    case NEGATE_EXPR:
    case FLOAT_EXPR:
    case MIN_EXPR:
    case MAX_EXPR:
    case ABS_EXPR:
    case LSHIFT_EXPR:
    case RSHIFT_EXPR:
    case LROTATE_EXPR:
    case RROTATE_EXPR:
    case BIT_IOR_EXPR:
    case BIT_XOR_EXPR:
    case BIT_AND_EXPR:
    case BIT_NOT_EXPR:
    case TRUTH_ANDIF_EXPR:
    case TRUTH_ORIF_EXPR:
    case TRUTH_AND_EXPR:
    case TRUTH_OR_EXPR:
    case TRUTH_XOR_EXPR:
    case TRUTH_NOT_EXPR:
    case LT_EXPR:
    case LE_EXPR:
    case GT_EXPR:
    case GE_EXPR:
    case EQ_EXPR:
    case NE_EXPR:
    case ORDERED_EXPR:
    case UNORDERED_EXPR:
    case UNLT_EXPR:
    case UNLE_EXPR:
    case UNGT_EXPR:
    case UNGE_EXPR:
    case UNEQ_EXPR:
    case LTGT_EXPR:
    case CONVERT_EXPR:
    case CONJ_EXPR:
    case PREDECREMENT_EXPR:
    case PREINCREMENT_EXPR:
    case POSTDECREMENT_EXPR:
    case POSTINCREMENT_EXPR:
    case SWITCH_EXPR:
    case ASM_EXPR:
    case RESX_EXPR:
      *count++;
      break;
    case TRUNC_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case EXACT_DIV_EXPR:
    case TRUNC_MOD_EXPR:
    case CEIL_MOD_EXPR:
    case FLOOR_MOD_EXPR:
    case ROUND_MOD_EXPR:
    case RDIV_EXPR:
      *count += 10;
      break;
    case CALL_EXPR:
      {
 tree decl = get_callee_fndecl (x);
 if (decl && (((decl)->decl.built_in_class) != NOT_BUILT_IN))
   switch (((decl)->decl.u1.f))
     {
     case BUILT_IN_CONSTANT_P:
       *walk_subtrees = 0;
       return (tree) ((void *)0);
     case BUILT_IN_EXPECT:
       return (tree) ((void *)0);
     default:
       break;
     }
 *count += 10;
 break;
      }
    default:
      fancy_abort ("gcc.c", 705669, "?");
    }
  return ((void *)0);
}
int
estimate_num_insns (tree expr)
{
  int num = 0;
  walk_tree_without_duplicates (&expr, estimate_num_insns_1, &num);
  return num;
}
static tree
expand_call_inline (tree *tp, int *walk_subtrees, void *data)
{
  inline_data *id;
  tree t;
  tree expr;
  tree stmt;
  tree use_retvar;
  tree decl;
  tree fn;
  tree arg_inits;
  tree *inlined_body;
  tree inline_result;
  splay_tree st;
  tree args;
  tree return_slot_addr;
  location_t saved_location;
  struct cgraph_edge1 *edge1;
  const char *reason;
  id = (inline_data *) data;
  t = *tp;
  saved_location = input_location;
  if ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (t)->common.code))])) != 0) ? (t)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    input_location = ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (t)->common.code))])) != 0) ? (t)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) ? *(t)->exp.locus : unknown_location);
  if (((enum tree_code) (*tp)->common.code) == TARGET_EXPR)
    {
    }
  if ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
    *walk_subtrees = 0;
  if (((enum tree_code) (t)->common.code) != CALL_EXPR)
    goto egress;
  fn = get_callee_fndecl (t);
  if (!fn)
    goto egress;
  fn = cgraph_node (fn)->decl;
  if (! ((fn)->decl.initial)
      && ((fn)->decl.abstract_origin)
      && ((((fn)->decl.abstract_origin))->decl.saved_tree))
    fn = ((fn)->decl.abstract_origin);
  if (!id->current_node->analyzed)
    goto egress;
  edge1 = cgraph_edge1 (id->current_node, t);
  if (!edge1)
    {
      struct cgraph_node *dest = cgraph_node (fn);
      if (!dest->needed)
 fancy_abort ("gcc.c", 705792, "?");
      cgraph_create_edge1 (id->node, dest, t)->inline_failed
 = "originally indirect function call not considered for inlining";
      goto egress;
    }
  if (!cgraph_inline_p (edge1, &reason))
    {
      if (lookup_attribute ("always_inline", ((fn)->decl.attributes)))
 {
   sorry ("%Jinlining failed in call to '%F': %s", fn, fn, reason);
   sorry ("called from here");
 }
      else if (warn_inline && ((fn)->decl.declared_inline_flag)
        && !((fn)->decl.in_system_header1_flag)
        && strlen (reason))
 {
   warning ("%Jinlining failed in call to '%F': %s", fn, fn, reason);
   warning ("called from here");
 }
      goto egress;
    }
  if (! lang_hooks.tree_inlining.start_inlining (fn))
    goto egress;
  stmt = ((void *)0);
  expr = build (BIND_EXPR, ((((fn)->common.type))->common.type), (tree) ((void *)0),
  stmt, make_node_stat (BLOCK ));
  ((((((expr))->exp.operands[2])))->block.abstract_origin) = fn;
  st = id->decl_map;
  id->decl_map = splay_tree_new (splay_tree_compare_pointers,
     ((void *)0), ((void *)0));
  args = ((t)->exp.operands[1]);
  return_slot_addr = (tree) ((void *)0);
  if (((t)->common.private_flag))
    {
      return_slot_addr = ((args)->list.value1);
      args = ((args)->common.chain);
      ((expr)->common.type) = global_trees[TI_VOID_TYPE];
    }
  arg_inits = initialize_inlined_parameters (id, args, ((t)->exp.operands[2]),
          fn, expr);
  if (arg_inits)
    {
      tree_stmt_iterator save_tsi;
      save_tsi = id->tsi;
      expand_calls_inline (&arg_inits, id);
      id->tsi = save_tsi;
      append_to_statement_list (arg_inits, &((((expr))->exp.operands[1])));
    }
  do { if ((id->fns)->elements_used >= (id->fns)->num_elements) (((id->fns)) = varray_grow ((id->fns), 2 * (id->fns)->num_elements)); (id->fns)->data.tree1[(id->fns)->elements_used++] = (fn); } while (0);
  if (! ((fn)->decl.inlined_fns))
    {
      int i;
      for (i = ((id->inlined_fns)->elements_used) - 1; i >= 0; i--)
 if (((id->inlined_fns)->data.tree1[i]) == fn)
   break;
      if (i < 0)
 do { if ((id->inlined_fns)->elements_used >= (id->inlined_fns)->num_elements) (((id->inlined_fns)) = varray_grow ((id->inlined_fns), 2 * (id->inlined_fns)->num_elements)); (id->inlined_fns)->data.tree1[(id->inlined_fns)->elements_used++] = (fn); } while (0);
    }
  id->ret_label = build_decl_stat (LABEL_DECL,(tree) ((void *)0),(tree) ((void *)0) );
  ((id->ret_label)->decl.artificial_flag) = 1;
  ((id->ret_label)->decl.context) = ((id->fns)->data.tree1[0]);
  insert_decl_map (id, id->ret_label, id->ret_label);
  if (! ((fn)->decl.initial)
      || ((enum tree_code) (((fn)->decl.initial))->common.code) != BLOCK)
    fancy_abort ("gcc.c", 705897, "?");
  decl = declare_return_variable (id, return_slot_addr, &use_retvar);
  if (decl)
    declare_inline_vars (expr, decl);
  {
    struct cgraph_node *old_node = id->current_node;
    id->current_node = edge1->callee;
    append_to_statement_list (copy_body (id), &((((expr))->exp.operands[1])));
    id->current_node = old_node;
  }
  inlined_body = &((((expr))->exp.operands[1]));
  if (((id->ret_label)->common.used_flag))
    {
      tree label = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],id->ret_label );
      append_to_statement_list (label, &((((expr))->exp.operands[1])));
    }
  if (use_retvar)
    append_to_statement_list_force (use_retvar, &((((expr))->exp.operands[1])));
  splay_tree_delete (id->decl_map);
  id->decl_map = st;
  ((expr)->common.side_effects_flag) = ((t)->common.side_effects_flag);
  if (lang_hooks.gimple_before_inlining)
    {
      tree save_decl;
      save_decl = current_function_decl;
      current_function_decl = id->node->decl;
      inline_result = voidify_wrapper_expr (expr, ((void *)0));
      current_function_decl = save_decl;
      if (((enum tree_code) (tsi_stmt (id->tsi))->common.code) != CALL_EXPR)
 {
   tsi_link_before (&id->tsi, expr, TSI_SAME_STMT);
   *tp = inline_result;
 }
      else
 *tp = expr;
      recalculate_side_effects (expr);
    }
  else
    *tp = expr;
  ((*tp)->common.used_flag) = 1;
  cgraph_remove_node (edge1->callee);
  expand_calls_inline (inlined_body, id);
  do { ((id->fns)->elements_used--); } while (0);
  *walk_subtrees = 0;
  lang_hooks.tree_inlining.end_inlining (fn);
 egress:
  input_location = saved_location;
  return (tree) ((void *)0);
}
static void
gimple_expand_calls_inline (tree *stmt_p, inline_data *id)
{
  tree stmt = *stmt_p;
  enum tree_code code = ((enum tree_code) (stmt)->common.code);
  int dummy;
  switch (code)
    {
    case STATEMENT_LIST:
      {
 tree_stmt_iterator i;
 tree new;
 for (i = tsi_start (stmt); !tsi_end_p (i); )
   {
     id->tsi = i;
     gimple_expand_calls_inline (tsi_stmt_ptr (i), id);
     new = tsi_stmt (i);
     if (((enum tree_code) (new)->common.code) == STATEMENT_LIST)
       {
  tsi_link_before (&i, new, TSI_SAME_STMT);
  tsi_delink (&i);
       }
     else
       tsi_next (&i);
   }
      }
      break;
    case COND_EXPR:
      gimple_expand_calls_inline (&((((stmt))->exp.operands[1])), id);
      gimple_expand_calls_inline (&((((stmt))->exp.operands[2])), id);
      break;
    case CATCH_EXPR:
      gimple_expand_calls_inline (&(((stmt))->exp.operands[1]), id);
      break;
    case EH_FILTER_EXPR:
      gimple_expand_calls_inline (&(((stmt))->exp.operands[1]), id);
      break;
    case TRY_CATCH_EXPR:
    case TRY_FINALLY_EXPR:
      gimple_expand_calls_inline (&((stmt)->exp.operands[0]), id);
      gimple_expand_calls_inline (&((stmt)->exp.operands[1]), id);
      break;
    case BIND_EXPR:
      gimple_expand_calls_inline (&((((stmt))->exp.operands[1])), id);
      break;
    case COMPOUND_EXPR:
      fancy_abort ("gcc.c", 706061, "?");
    case RETURN_EXPR:
      stmt_p = &((stmt)->exp.operands[0]);
      stmt = *stmt_p;
      if (!stmt || ((enum tree_code) (stmt)->common.code) != MODIFY_EXPR)
 break;
    case MODIFY_EXPR:
      stmt_p = &((stmt)->exp.operands[1]);
      stmt = *stmt_p;
      if (((enum tree_code) (stmt)->common.code) != CALL_EXPR)
 break;
    case CALL_EXPR:
      expand_call_inline (stmt_p, &dummy, id);
      break;
    default:
      break;
    }
}
static void
expand_calls_inline (tree *tp, inline_data *id)
{
  if (!lang_hooks.gimple_before_inlining)
    {
      walk_tree (tp, expand_call_inline, id, id->tree_pruner);
      return;
    }
  gimple_expand_calls_inline (tp, id);
}
void
optimize_inline_calls (tree fn)
{
  inline_data id;
  tree prev_fn;
  if ((global_dc)->diagnostic_count[(int) (DK_ERROR)] || (global_dc)->diagnostic_count[(int) (DK_SORRY)])
    return;
  memset (&id, 0, sizeof (id));
  id.current_node = id.node = cgraph_node (fn);
  id.fns = varray_init (32, VARRAY_DATA_TREE, "fns");
  do { if ((id.fns)->elements_used >= (id.fns)->num_elements) (((id.fns)) = varray_grow ((id.fns), 2 * (id.fns)->num_elements)); (id.fns)->data.tree1[(id.fns)->elements_used++] = (fn); } while (0);
  prev_fn = (tree) ((void *)0);
  if (current_function_decl)
    {
      do { if ((id.fns)->elements_used >= (id.fns)->num_elements) (((id.fns)) = varray_grow ((id.fns), 2 * (id.fns)->num_elements)); (id.fns)->data.tree1[(id.fns)->elements_used++] = (current_function_decl); } while (0);
      prev_fn = current_function_decl;
    }
  prev_fn = lang_hooks.tree_inlining.add_pending_fn_decls (&id.fns, prev_fn);
  id.inlined_fns = varray_init (32, VARRAY_DATA_TREE, "inlined_fns");
  id.first_inlined_fn = ((id.fns)->elements_used);
  id.tree_pruner = htab_create (37, htab_hash_pointer, htab_eq_pointer, ((void *)0));
  expand_calls_inline (&((fn)->decl.saved_tree), &id);
  htab_delete (id.tree_pruner);
  if (((fn)->decl.lang_specific))
    {
      tree ifn = make_tree_vec_stat (((id.inlined_fns)->elements_used) );
      if (((id.inlined_fns)->elements_used))
 memcpy (&((ifn)->vec.a[0]), &((id.inlined_fns)->data.tree1[0]),
  ((id.inlined_fns)->elements_used) * sizeof (tree));
      ((fn)->decl.inlined_fns) = ifn;
    }
}
void
clone_body (tree clone, tree fn, void *arg_map)
{
  inline_data id;
  memset (&id, 0, sizeof (id));
  id.fns = varray_init (2, VARRAY_DATA_TREE, "fns");
  do { if ((id.fns)->elements_used >= (id.fns)->num_elements) (((id.fns)) = varray_grow ((id.fns), 2 * (id.fns)->num_elements)); (id.fns)->data.tree1[(id.fns)->elements_used++] = (clone); } while (0);
  do { if ((id.fns)->elements_used >= (id.fns)->num_elements) (((id.fns)) = varray_grow ((id.fns), 2 * (id.fns)->num_elements)); (id.fns)->data.tree1[(id.fns)->elements_used++] = (fn); } while (0);
  id.decl_map = (splay_tree)arg_map;
  id.cloning_p = 1;
  append_to_statement_list_force (copy_body (&id), &((clone)->decl.saved_tree));
}
tree
save_body (tree fn, tree *arg_copy)
{
  inline_data id;
  tree body, *parg;
  memset (&id, 0, sizeof (id));
  id.fns = varray_init (1, VARRAY_DATA_TREE, "fns");
  do { if ((id.fns)->elements_used >= (id.fns)->num_elements) (((id.fns)) = varray_grow ((id.fns), 2 * (id.fns)->num_elements)); (id.fns)->data.tree1[(id.fns)->elements_used++] = (fn); } while (0);
  id.node = cgraph_node (fn);
  id.saving_p = 1;
  id.decl_map = splay_tree_new (splay_tree_compare_pointers, ((void *)0), ((void *)0));
  *arg_copy = ((fn)->decl.arguments);
  for (parg = arg_copy; *parg; parg = &((*parg)->common.chain))
    {
      tree new = copy_node_stat (*parg );
      lang_hooks.dup_lang_specific_decl (new);
      ((new)->decl.abstract_origin) = (((*parg)->decl.abstract_origin) ? ((*parg)->decl.abstract_origin) : (*parg));
      insert_decl_map (&id, *parg, new);
      ((new)->common.chain) = ((*parg)->common.chain);
      *parg = new;
    }
  insert_decl_map (&id, ((fn)->decl.result), ((fn)->decl.result));
  body = copy_body (&id);
  splay_tree_delete (id.decl_map);
  return body;
}
static tree
walk_type_fields (tree type, walk_tree_fn func, void *data, void *htab)
{
  tree result = (tree) ((void *)0);
  switch (((enum tree_code) (type)->common.code))
    {
    case POINTER_TYPE:
    case REFERENCE_TYPE:
      if ((((enum tree_code) (((type)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((type)->common.type))->common.code) == REFERENCE_TYPE)
   && (((enum tree_code) (((((type)->common.type))->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((((type)->common.type))->common.type))->common.code) == REFERENCE_TYPE)
   && (((enum tree_code) (((((((type)->common.type))->common.type))->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((((((type)->common.type))->common.type))->common.type))->common.code) == REFERENCE_TYPE)
   && !htab)
 {
   result = walk_tree_without_duplicates (&((type)->common.type),
       func, data);
   if (result)
     return result;
   break;
 }
    case COMPLEX_TYPE:
      do { result = walk_tree (&(((type)->common.type)), func, data, htab); if (result) return result; } while (0);
      break;
    case METHOD_TYPE:
      do { result = walk_tree (&(((type)->type.maxval)), func, data, htab); if (result) return result; } while (0);
    case FUNCTION_TYPE:
      do { result = walk_tree (&(((type)->common.type)), func, data, htab); if (result) return result; } while (0);
      {
 tree arg;
 for (arg = ((type)->type.value1s); arg; arg = ((arg)->common.chain))
   do { result = walk_tree (&(((arg)->list.value1)), func, data, htab); if (result) return result; } while (0);
      }
      break;
    case ARRAY_TYPE:
      if (!(((enum tree_code) (((type)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((type)->common.type))->common.code) == REFERENCE_TYPE)
   && ((enum tree_code) (((type)->common.type))->common.code) != OFFSET_TYPE)
 do { result = walk_tree (&(((type)->common.type)), func, data, htab); if (result) return result; } while (0);
      do { result = walk_tree (&(((type)->type.value1s)), func, data, htab); if (result) return result; } while (0);
      break;
    case BOOLEAN_TYPE:
    case ENUMERAL_TYPE:
    case INTEGER_TYPE:
    case CHAR_TYPE:
    case REAL_TYPE:
      do { result = walk_tree (&(((type)->type.minval)), func, data, htab); if (result) return result; } while (0);
      do { result = walk_tree (&(((type)->type.maxval)), func, data, htab); if (result) return result; } while (0);
      break;
    case OFFSET_TYPE:
      do { result = walk_tree (&(((type)->common.type)), func, data, htab); if (result) return result; } while (0);
      do { result = walk_tree (&(((type)->type.maxval)), func, data, htab); if (result) return result; } while (0);
      break;
    default:
      break;
    }
  return (tree) ((void *)0);
}
tree
walk_tree (tree *tp, walk_tree_fn func, void *data, void *htab_)
{
  htab_t htab = (htab_t) htab_;
  enum tree_code code;
  int walk_subtrees;
  tree result;
 tail_recurse:
  if (!*tp)
    return (tree) ((void *)0);
  if (htab)
    {
      void **slot;
      slot = htab_find_slot (htab, *tp, INSERT);
      if (*slot)
 return (tree) ((void *)0);
      *slot = *tp;
    }
  walk_subtrees = 1;
  result = (*func) (tp, &walk_subtrees, data);
  if (result)
    return result;
  code = ((enum tree_code) (*tp)->common.code);
  if (!walk_subtrees)
    {
      if (code == TREE_LIST)
 do { tp = & (((*tp)->common.chain)); goto tail_recurse; } while (0);
      else
 return (tree) ((void *)0);
    }
  result = lang_hooks.tree_inlining.walk_subtrees (tp, &walk_subtrees, func,
         data, htab);
  if (result || ! walk_subtrees)
    return result;
  if (code == DECL_EXPR
      && ((enum tree_code) ((((*tp))->exp.operands[0]))->common.code) == TYPE_DECL
      && ((enum tree_code) ((((((*tp))->exp.operands[0]))->common.type))->common.code) != ERROR_MARK)
    {
      tree *type_p = &(((((*tp))->exp.operands[0]))->common.type);
      result = (*func) (type_p, &walk_subtrees, data);
      if (result || !walk_subtrees)
 return (tree) ((void *)0);
      result = walk_type_fields (*type_p, func, data, htab_);
      if (result)
 return result;
      do { result = walk_tree (&(((*type_p)->type.size)), func, data, htab); if (result) return result; } while (0);
      do { result = walk_tree (&(((*type_p)->type.size_unit)), func, data, htab); if (result) return result; } while (0);
      if (((enum tree_code) (*type_p)->common.code) == RECORD_TYPE
   || ((enum tree_code) (*type_p)->common.code) == UNION_TYPE
   || ((enum tree_code) (*type_p)->common.code) == QUAL_UNION_TYPE)
 {
   tree field;
   for (field = ((*type_p)->type.value1s); field;
        field = ((field)->common.chain))
     {
       if (((enum tree_code) (field)->common.code) != FIELD_DECL)
  continue;
       do { result = walk_tree (&(((field)->decl.arguments)), func, data, htab); if (result) return result; } while (0);
       do { result = walk_tree (&(((field)->decl.size)), func, data, htab); if (result) return result; } while (0);
       do { result = walk_tree (&(((field)->decl.size_unit)), func, data, htab); if (result) return result; } while (0);
       if (((enum tree_code) (*type_p)->common.code) == QUAL_UNION_TYPE)
  do { result = walk_tree (&(((field)->decl.initial)), func, data, htab); if (result) return result; } while (0);
     }
 }
    }
  else if (code != EXIT_BLOCK_EXPR
    && code != SAVE_EXPR
    && code != BIND_EXPR
    && (strchr ("<12ers", (tree_code_type[(int) (code)])) != 0))
    {
      int i, len;
      len = first_rtl_op (code);
      if (code == TARGET_EXPR
   && ((*tp)->exp.operands[3]) == ((*tp)->exp.operands[1]))
 --len;
      for (i = 0; i < len - 1; ++i)
 do { result = walk_tree (&(((*tp)->exp.operands[i])), func, data, htab); if (result) return result; } while (0);
      if (len)
 {
   if (code != BIND_EXPR
       && !((*tp)->common.chain))
     do { tp = & (((*tp)->exp.operands[len - 1])); goto tail_recurse; } while (0);
   else
     do { result = walk_tree (&(((*tp)->exp.operands[len - 1])), func, data, htab); if (result) return result; } while (0);
 }
    }
  else if ((tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 't'))
    {
      result = walk_type_fields (*tp, func, data, htab_);
      if (result)
 return result;
    }
  else
    {
      switch (code)
 {
 case ERROR_MARK:
 case IDENTIFIER_NODE:
 case INTEGER_CST:
 case REAL_CST:
 case VECTOR_CST:
 case STRING1_CST:
 case BLOCK:
 case PLACEHOLDER_EXPR:
 case SSA_NAME:
 case FIELD_DECL:
 case RESULT_DECL:
   break;
 case TREE_LIST:
   do { result = walk_tree (&(((*tp)->list.value1)), func, data, htab); if (result) return result; } while (0);
   do { tp = & (((*tp)->common.chain)); goto tail_recurse; } while (0);
   break;
 case TREE_VEC:
   {
     int len = ((*tp)->vec.length);
     if (len == 0)
       break;
     while (--len)
       do { result = walk_tree (&(((*tp)->vec.a[len])), func, data, htab); if (result) return result; } while (0);
     do { tp = & (((*tp)->vec.a[0])); goto tail_recurse; } while (0);
   }
 case COMPLEX_CST:
   do { result = walk_tree (&(((*tp)->complex.real)), func, data, htab); if (result) return result; } while (0);
   do { tp = & (((*tp)->complex.imag)); goto tail_recurse; } while (0);
 case CONSTRUCTOR:
   do { tp = & (((*tp)->exp.operands[0])); goto tail_recurse; } while (0);
 case EXIT_BLOCK_EXPR:
   do { tp = & (((*tp)->exp.operands[1])); goto tail_recurse; } while (0);
 case SAVE_EXPR:
   do { tp = & (((*tp)->exp.operands[0])); goto tail_recurse; } while (0);
 case BIND_EXPR:
   {
     tree decl;
     for (decl = ((((*tp))->exp.operands[0])); decl; decl = ((decl)->common.chain))
       {
  do { result = walk_tree (&(((decl)->decl.initial)), func, data, htab); if (result) return result; } while (0);
  do { result = walk_tree (&(((decl)->decl.size)), func, data, htab); if (result) return result; } while (0);
  do { result = walk_tree (&(((decl)->decl.size_unit)), func, data, htab); if (result) return result; } while (0);
       }
     do { tp = & (((((*tp))->exp.operands[1]))); goto tail_recurse; } while (0);
   }
 case STATEMENT_LIST:
   {
     tree_stmt_iterator i;
     for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
       do { result = walk_tree (&(*tsi_stmt_ptr (i)), func, data, htab); if (result) return result; } while (0);
   }
   break;
 default:
   break;
 }
    }
  return (tree) ((void *)0);
}
tree
walk_tree_without_duplicates (tree *tp, walk_tree_fn func, void *data)
{
  tree result;
  htab_t htab;
  htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, ((void *)0));
  result = walk_tree (tp, func, data, htab);
  htab_delete (htab);
  return result;
}
tree
copy_tree_r (tree *tp, int *walk_subtrees, void *data )
{
  enum tree_code code = ((enum tree_code) (*tp)->common.code);
  if ((strchr ("<12ers", (tree_code_type[(int) (code)])) != 0)
      || tree_code_type[(int) (code)] == 'c'
      || code == TREE_LIST
      || code == TREE_VEC
      || code == TYPE_DECL)
    {
      tree chain = ((*tp)->common.chain);
      tree new;
      new = copy_node_stat (*tp );
      if (flag_mudflap && mf_marked_p (*tp))
        mf_mark (new);
      *tp = new;
      if (code == PARM_DECL || code == TREE_LIST)
 ((*tp)->common.chain) = chain;
      if (((enum tree_code) (*tp)->common.code) == BIND_EXPR)
 ((((*tp))->exp.operands[2])) = (tree) ((void *)0);
    }
  else if (tree_code_type[(int) (code)] == 't')
    *walk_subtrees = 0;
  else if (tree_code_type[(int) (code)] == 'd')
    *walk_subtrees = 0;
 else if (code == STATEMENT_LIST)
    fancy_abort ("gcc.c", 706649, "?");
  return (tree) ((void *)0);
}
void
remap_save_expr (tree *tp, void *st_, int *walk_subtrees)
{
  splay_tree st = (splay_tree) st_;
  splay_tree_node n;
  tree t;
  n = splay_tree_lookup (st, (splay_tree_key) *tp);
  if (!n)
    {
      t = copy_node_stat (*tp );
      splay_tree_insert (st, (splay_tree_key) *tp, (splay_tree_value) t);
      splay_tree_insert (st, (splay_tree_key) t, (splay_tree_value) t);
    }
  else
    {
      *walk_subtrees = 0;
      t = (tree) n->value1;
    }
  *tp = t;
}
static tree
mark_local_for_remap_r (tree *tp, int *walk_subtrees ,
   void *data)
{
  inline_data *id = (inline_data *) data;
  if ((tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 't'))
    *walk_subtrees = 0;
  else if (((enum tree_code) (*tp)->common.code) == LABEL_EXPR)
    {
      tree decl = ((*tp)->exp.operands[0]);
      insert_decl_map (id, decl,
         copy_decl_for_inlining (decl, ((decl)->decl.context),
            ((decl)->decl.context)));
    }
  return (tree) ((void *)0);
}
static tree
unsave_r (tree *tp, int *walk_subtrees, void *data)
{
  inline_data *id = (inline_data *) data;
  splay_tree st = id->decl_map;
  splay_tree_node n;
  if ((((enum tree_code) (*tp)->common.code) == VAR_DECL && !((*tp)->common.static_flag))
      || ((enum tree_code) (*tp)->common.code) == LABEL_DECL)
    {
      n = splay_tree_lookup (st, (splay_tree_key) *tp);
      if (n)
 *tp = (tree) n->value1;
    }
  else if (((enum tree_code) (*tp)->common.code) == STATEMENT_LIST)
    copy_statement_list (tp);
  else if (((enum tree_code) (*tp)->common.code) == BIND_EXPR)
    copy_bind_expr (tp, walk_subtrees, id);
  else if (((enum tree_code) (*tp)->common.code) == SAVE_EXPR)
    remap_save_expr (tp, st, walk_subtrees);
  else
    {
      copy_tree_r (tp, walk_subtrees, ((void *)0));
      unsave_expr_1 (*tp);
    }
  return (tree) ((void *)0);
}
tree
lhd_unsave_expr_now (tree expr)
{
  inline_data id;
  if (expr == 0)
    return expr;
  memset (&id, 0, sizeof (id));
  id.fns = varray_init (1, VARRAY_DATA_TREE, "fns");
  do { if ((id.fns)->elements_used >= (id.fns)->num_elements) (((id.fns)) = varray_grow ((id.fns), 2 * (id.fns)->num_elements)); (id.fns)->data.tree1[(id.fns)->elements_used++] = (current_function_decl); } while (0);
  id.decl_map = splay_tree_new (splay_tree_compare_pointers, ((void *)0), ((void *)0));
  walk_tree_without_duplicates (&expr, mark_local_for_remap_r, &id);
  walk_tree (&expr, unsave_r, &id, ((void *)0));
  splay_tree_delete (id.decl_map);
  return expr;
}
static tree
debug_find_tree_1 (tree *tp, int *walk_subtrees , void *data)
{
  if (*tp == data)
    return (tree) data;
  else
    return ((void *)0);
}
unsigned char
debug_find_tree (tree top, tree search)
{
  return walk_tree_without_duplicates (&top, debug_find_tree_1, search) != 0;
}
static void
declare_inline_vars (tree bind_expr, tree vars)
{
  if (lang_hooks.gimple_before_inlining)
    {
      tree t;
      for (t = vars; t; t = ((t)->common.chain))
 ((t)->decl.seen_in_bind_expr) = 1;
    }
  add_var_to_bind_expr (bind_expr, vars);
}
static htab_t cgraph_hash;
struct cgraph_node *cgraph_nodes;
struct cgraph_node *cgraph_nodes_queue;
int cgraph_n_nodes;
int cgraph_max_uid;
unsigned char cgraph_global_info_ready = 0;
static htab_t cgraph_varpool_hash;
struct cgraph_varpool_node *cgraph_varpool_nodes_queue;
int cgraph_varpool_n_nodes;
static struct cgraph_varpool_node *cgraph_varpool_nodes;
static hashval_t hash_node (const void *);
static int eq_node (const void *, const void *);
static hashval_t
hash_node (const void *p)
{
  const struct cgraph_node *n = p;
  return (hashval_t) ((n->decl)->decl.uid);
}
static int
eq_node (const void *p1, const void *p2)
{
  const struct cgraph_node *n1 = p1, *n2 = p2;
  return ((n1->decl)->decl.uid) == ((n2->decl)->decl.uid);
}
static struct cgraph_node *
cgraph_create_node (void)
{
  struct cgraph_node *node;
  node = ggc_alloc_cleared_stat (sizeof (*node) );
  node->next = cgraph_nodes;
  node->uid = cgraph_max_uid++;
  if (cgraph_nodes)
    cgraph_nodes->previous = node;
  node->previous = ((void *)0);
  cgraph_nodes = node;
  cgraph_n_nodes++;
  return node;
}
struct cgraph_node *
cgraph_node (tree decl)
{
  struct cgraph_node key, *node, **slot;
  if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL)
    fancy_abort ("gcc.c", 706977, "?");
  if (!cgraph_hash)
    cgraph_hash = htab_create_alloc (10, hash_node, eq_node, ((void *)0), ggc_calloc, ((void *)0));
  key.decl = decl;
  slot = (struct cgraph_node **) htab_find_slot (cgraph_hash, &key, INSERT);
  if (*slot)
    return *slot;
  node = cgraph_create_node ();
  node->decl = decl;
  *slot = node;
  if (((decl)->decl.context) && ((enum tree_code) (((decl)->decl.context))->common.code) == FUNCTION_DECL)
    {
      node->origin = cgraph_node (((decl)->decl.context));
      node->next_nested = node->origin->nested;
      node->origin->nested = node;
    }
  return node;
}
struct cgraph_edge1 *
cgraph_edge1 (struct cgraph_node *node, tree call_expr)
{
  struct cgraph_edge1 *e;
  for (e = node->callees; e; e= e->next_callee)
    if (e->call_expr == call_expr)
      break;
  return e;
}
struct cgraph_edge1 *
cgraph_create_edge1 (struct cgraph_node *caller, struct cgraph_node *callee,
      tree call_expr)
{
  struct cgraph_edge1 *edge1 = ggc_alloc_stat (sizeof (struct cgraph_edge1) );
  if (((enum tree_code) (call_expr)->common.code) != CALL_EXPR)
    fancy_abort ("gcc.c", 707034, "?");
  if (!((callee->decl)->decl.saved_tree))
    edge1->inline_failed = "function body not available";
  else if (callee->local.redefined_extern_inline)
    edge1->inline_failed = "redefined extern inline functions are not considered for inlining"
                                  ;
  else if (callee->local.inlinable)
    edge1->inline_failed = "function not considered for inlining";
  else
    edge1->inline_failed = "function not inlinable";
  edge1->aux = ((void *)0);
  edge1->caller = caller;
  edge1->callee = callee;
  edge1->call_expr = call_expr;
  edge1->next_caller = callee->callers;
  edge1->next_callee = caller->callees;
  caller->callees = edge1;
  callee->callers = edge1;
  return edge1;
}
void
cgraph_remove_edge1 (struct cgraph_edge1 *e)
{
  struct cgraph_edge1 **edge1, **edge12;
  for (edge1 = &e->callee->callers; *edge1 && *edge1 != e;
       edge1 = &((*edge1)->next_caller))
    continue;
  if (!*edge1)
    fancy_abort ("gcc.c", 707069, "?");
  *edge1 = (*edge1)->next_caller;
  for (edge12 = &e->caller->callees; *edge12 && *edge12 != e;
       edge12 = &(*edge12)->next_callee)
    continue;
  if (!*edge12)
    fancy_abort ("gcc.c", 707075, "?");
  *edge12 = (*edge12)->next_callee;
}
void
cgraph_redirect_edge1_callee (struct cgraph_edge1 *e, struct cgraph_node *n)
{
  struct cgraph_edge1 **edge1;
  for (edge1 = &e->callee->callers; *edge1 && *edge1 != e;
       edge1 = &((*edge1)->next_caller))
    continue;
  if (!*edge1)
    fancy_abort ("gcc.c", 707091, "?");
  *edge1 = (*edge1)->next_caller;
  e->callee = n;
  e->next_caller = n->callers;
  n->callers = e;
}
void
cgraph_remove_node (struct cgraph_node *node)
{
  void **slot;
  unsigned char check_dead = 1;
  while (node->callers)
    cgraph_remove_edge1 (node->callers);
  while (node->callees)
    cgraph_remove_edge1 (node->callees);
  while (node->nested)
    cgraph_remove_node (node->nested);
  if (node->origin)
    {
      struct cgraph_node **node2 = &node->origin->nested;
      while (*node2 != node)
 node2 = &(*node2)->next_nested;
      *node2 = node->next_nested;
    }
  if (node->previous)
    node->previous->next = node->next;
  else
    cgraph_nodes = node->next;
  if (node->next)
    node->next->previous = node->previous;
  slot = htab_find_slot (cgraph_hash, node, NO_INSERT);
  if (*slot == node)
    {
      if (node->next_clone)
 *slot = node->next_clone;
      else
 {
          htab_clear_slot (cgraph_hash, slot);
   if (!dump_enabled_p (TDI_all))
     {
              ((node->decl)->decl.saved_tree) = ((void *)0);
       ((node->decl)->decl.u2.f) = ((void *)0);
     }
   check_dead = 0;
 }
    }
  else
    {
      struct cgraph_node *n;
      for (n = *slot; n->next_clone != node; n = n->next_clone)
 continue;
      n->next_clone = node->next_clone;
    }
  if (check_dead && flag_unit_at_a_time)
    {
      struct cgraph_node *n;
      for (n = *slot; n; n = n->next_clone)
 if (n->global.inlined_to
     || (!n->global.inlined_to
  && !((n->decl)->common.asm_written_flag) && !((n->decl)->decl.external_flag)))
   break;
      if (!n && !dump_enabled_p (TDI_all))
 {
   ((node->decl)->decl.saved_tree) = ((void *)0);
   ((node->decl)->decl.u2.f) = ((void *)0);
 }
    }
  cgraph_n_nodes--;
}
void
cgraph_mark_reachable_node (struct cgraph_node *node)
{
  if (!node->reachable && node->local.finalized)
    {
      notice_global_symbol (node->decl);
      node->reachable = 1;
      node->next_needed = cgraph_nodes_queue;
      cgraph_nodes_queue = node;
    }
}
void
cgraph_mark_needed_node (struct cgraph_node *node)
{
  node->needed = 1;
  cgraph_mark_reachable_node (node);
}
unsigned char
cgraph_calls_p (tree caller_decl, tree callee_decl)
{
  struct cgraph_node *caller = cgraph_node (caller_decl);
  struct cgraph_node *callee = cgraph_node (callee_decl);
  struct cgraph_edge1 *edge1;
  for (edge1 = callee->callers; edge1 && (edge1)->caller != caller;
       edge1 = (edge1->next_caller))
    continue;
  return edge1 != ((void *)0);
}
struct cgraph_local_info *
cgraph_local_info (tree decl)
{
  struct cgraph_node *node;
  if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL)
    fancy_abort ("gcc.c", 707219, "?");
  node = cgraph_node (decl);
  return &node->local;
}
struct cgraph_global_info *
cgraph_global_info (tree decl)
{
  struct cgraph_node *node;
  if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL || !cgraph_global_info_ready)
    fancy_abort ("gcc.c", 707231, "?");
  node = cgraph_node (decl);
  return &node->global;
}
struct cgraph_rtl_info *
cgraph_rtl_info (tree decl)
{
  struct cgraph_node *node;
  if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL)
    fancy_abort ("gcc.c", 707243, "?");
  node = cgraph_node (decl);
  if (decl != current_function_decl
      && !((node->decl)->common.asm_written_flag))
    return ((void *)0);
  return &node->rtl;
}
const char *
cgraph_node_name (struct cgraph_node *node)
{
  return lang_hooks.decl_printable_name (node->decl, 2);
}
void
dump_cgraph_node (FILE *f, struct cgraph_node *node)
{
  struct cgraph_edge1 *edge1;
  fprintf (f, "%s/%i:", cgraph_node_name (node), node->uid);
  if (node->global.inlined_to)
    fprintf (f, " (inline copy in %s/%i)",
      cgraph_node_name (node->global.inlined_to),
      node->global.inlined_to->uid);
  if (node->local.self_insns)
    fprintf (f, " %i insns", node->local.self_insns);
  if (node->global.insns && node->global.insns != node->local.self_insns)
    fprintf (f, " (%i after inlining)", node->global.insns);
  if (node->origin)
    fprintf (f, " nested in: %s", cgraph_node_name (node->origin));
  if (node->needed)
    fprintf (f, " needed");
  else if (node->reachable)
    fprintf (f, " reachable");
  if (((node->decl)->decl.saved_tree))
    fprintf (f, " tree");
  if (node->output)
    fprintf (f, " output");
  if (node->local.local)
    fprintf (f, " local");
  if (node->local.disregard_inline_limits)
    fprintf (f, " always_inline");
  else if (node->local.inlinable)
    fprintf (f, " inlinable");
  if (((node->decl)->common.asm_written_flag))
    fprintf (f, " asm_written");
  fprintf (f, "\n  called by: ");
  for (edge1 = node->callers; edge1; edge1 = edge1->next_caller)
    {
      fprintf (f, "%s/%i ", cgraph_node_name (edge1->caller),
        edge1->caller->uid);
      if (!edge1->inline_failed)
 fprintf(f, "(inlined) ");
    }
  fprintf (f, "\n  calls: ");
  for (edge1 = node->callees; edge1; edge1 = edge1->next_callee)
    {
      fprintf (f, "%s/%i ", cgraph_node_name (edge1->callee),
        edge1->callee->uid);
      if (!edge1->inline_failed)
 fprintf(f, "(inlined) ");
    }
  fprintf (f, "\n");
}
void
dump_cgraph (FILE *f)
{
  struct cgraph_node *node;
  fprintf (f, "callgraph:\n\n");
  for (node = cgraph_nodes; node; node = node->next)
    dump_cgraph_node (f, node);
}
static hashval_t
hash_varpool_node (const void *p)
{
  const struct cgraph_varpool_node *n = p;
  return (hashval_t) ((n->decl)->decl.uid);
}
static int
eq_varpool_node (const void *p1, const void *p2)
{
  const struct cgraph_varpool_node *n1 = p1, *n2 = p2;
  return ((n1->decl)->decl.uid) == ((n2->decl)->decl.uid);
}
struct cgraph_varpool_node *
cgraph_varpool_node (tree decl)
{
  struct cgraph_varpool_node key, *node, **slot;
  if (!(tree_code_type[(int) (((enum tree_code) (decl)->common.code))] == 'd') || ((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
    fancy_abort ("gcc.c", 707349, "?");
  if (!cgraph_varpool_hash)
    cgraph_varpool_hash = htab_create_alloc (10, hash_varpool_node, eq_varpool_node, ((void *)0), ggc_calloc, ((void *)0))
                                     ;
  key.decl = decl;
  slot = (struct cgraph_varpool_node **)
    htab_find_slot (cgraph_varpool_hash, &key, INSERT);
  if (*slot)
    return *slot;
  node = ggc_alloc_cleared_stat (sizeof (*node) );
  node->decl = decl;
  cgraph_varpool_n_nodes++;
  cgraph_varpool_nodes = node;
  *slot = node;
  return node;
}
void
change_decl_assembler_name (tree decl, tree name)
{
  if (!((decl)->decl.assembler_name != (tree) ((void *)0)))
    {
      ((decl)->decl.assembler_name = (name));
      return;
    }
  if (name == decl_assembler_name (decl))
    return;
  if (((decl_assembler_name (decl))->common.static_flag)
      && ((decl)->decl.rtl != ((void *)0)))
    warning ("%D renamed after being referenced in assembly", decl);
  ((decl)->decl.assembler_name = (name));
}
void
cgraph_varpool_mark_needed_node (struct cgraph_varpool_node *node)
{
  if (!node->needed && node->finalized)
    {
      node->next_needed = cgraph_varpool_nodes_queue;
      cgraph_varpool_nodes_queue = node;
      notice_global_symbol (node->decl);
    }
  node->needed = 1;
}
void
cgraph_varpool_finalize_decl (tree decl)
{
  struct cgraph_varpool_node *node = cgraph_varpool_node (decl);
  if (node->finalized)
    return;
  if (node->needed)
    {
      node->next_needed = cgraph_varpool_nodes_queue;
      cgraph_varpool_nodes_queue = node;
      notice_global_symbol (decl);
    }
  node->finalized = 1;
  if (
      (((decl)->common.public_flag) && !((decl)->decl.comdat_flag))
      || (((decl)->decl.assembler_name != (tree) ((void *)0))
   && ((decl_assembler_name (decl))->common.static_flag)))
    {
      cgraph_varpool_mark_needed_node (node);
    }
}
unsigned char
cgraph_varpool_assemble_pending_decls (void)
{
  unsigned char changed = 0;
  while (cgraph_varpool_nodes_queue)
    {
      tree decl = cgraph_varpool_nodes_queue->decl;
      struct cgraph_varpool_node *node = cgraph_varpool_nodes_queue;
      cgraph_varpool_nodes_queue = cgraph_varpool_nodes_queue->next_needed;
      if (!((decl)->common.asm_written_flag))
 {
   assemble_variable (decl, 0, 1, 0);
   changed = 1;
 }
      node->next_needed = ((void *)0);
    }
  return changed;
}
unsigned char
cgraph_function_possibly_inlined_p (tree decl)
{
  if (!cgraph_global_info_ready)
    return (((decl)->decl.inline_flag) && !flag_really_no_inline);
  return (decl)->decl.possibly_inlined;
}
struct cgraph_edge1 *
cgraph_clone_edge1 (struct cgraph_edge1 *e, struct cgraph_node *n, tree call_expr)
{
  struct cgraph_edge1 *new = cgraph_create_edge1 (n, e->callee, call_expr);
  new->inline_failed = e->inline_failed;
  return new;
}
struct cgraph_node *
cgraph_clone_node (struct cgraph_node *n)
{
  struct cgraph_node *new = cgraph_create_node ();
  struct cgraph_edge1 *e;
  new->decl = n->decl;
  new->origin = n->origin;
  if (new->origin)
    {
      new->next_nested = new->origin->nested;
      new->origin->nested = new;
    }
  new->analyzed = n->analyzed;
  new->local = n->local;
  new->global = n->global;
  new->rtl = n->rtl;
  for (e = n->callees;e; e=e->next_callee)
    cgraph_clone_edge1 (e, new, e->call_expr);
  new->next_clone = n->next_clone;
  n->next_clone = new;
  return new;
}
const struct ggc_root_tab gt_ggc_r_gt_cgraph_h[] = {
  {
    &cgraph_varpool_nodes,
    1,
    sizeof (cgraph_varpool_nodes),
    &gt_ggc_mx_cgraph_varpool_node,
    &gt_pch_nx_cgraph_varpool_node
  },
  {
    &cgraph_varpool_hash,
    1,
    sizeof (cgraph_varpool_hash),
    &gt_ggc_m_P19cgraph_varpool_node4htab,
    &gt_pch_n_P19cgraph_varpool_node4htab
  },
  {
    &cgraph_hash,
    1,
    sizeof (cgraph_hash),
    &gt_ggc_m_P11cgraph_node4htab,
    &gt_pch_n_P11cgraph_node4htab
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static void cgraph_expand_all_functions (void);
static void cgraph_mark_functions_to_output (void);
static void cgraph_expand_function (struct cgraph_node *);
static tree record_call_1 (tree *, int *, void *);
static void cgraph_mark_local_functions (void);
static unsigned char cgraph_default_inline_p (struct cgraph_node *n);
static void cgraph_analyze_function (struct cgraph_node *node);
static void cgraph_decide_inlining_incrementally (struct cgraph_node *);
static int ncalls_inlined;
static int nfunctions_inlined;
static int initial_insns;
static int overall_insns;
static htab_t visited_nodes;
static unsigned char
decide_is_function_needed (struct cgraph_node *node, tree decl)
{
  struct cgraph_node *origin;
  if (node->needed)
    return 1;
  if (((decl)->common.public_flag) && !((decl)->decl.comdat_flag) && !((decl)->decl.external_flag))
    return 1;
  if (((decl)->decl.static_ctor_flag) || ((decl)->decl.static_dtor_flag))
    return 1;
  if (lookup_attribute ("used", ((decl)->decl.attributes)))
    return 1;
  if (((decl)->decl.assembler_name != (tree) ((void *)0))
      && ((decl_assembler_name (decl))->common.static_flag))
    return 1;
  if (flag_unit_at_a_time)
    return 0;
  if (((decl)->decl.external_flag))
    return 0;
  for (origin = node->origin; origin; origin = origin->origin)
    if (((origin->decl)->decl.external_flag))
      return 0;
  if (((decl)->decl.comdat_flag))
    return 0;
  if (!((decl)->decl.inline_flag)
      || (!node->local.disregard_inline_limits
   && !((decl)->decl.declared_inline_flag)
   && (!node->local.inlinable || !cgraph_default_inline_p (node))))
    return 1;
  return 0;
}
unsigned char
cgraph_assemble_pending_functions (void)
{
  unsigned char output = 0;
  if (flag_unit_at_a_time)
    return 0;
  while (cgraph_nodes_queue)
    {
      struct cgraph_node *n = cgraph_nodes_queue;
      cgraph_nodes_queue = cgraph_nodes_queue->next_needed;
      n->next_needed = ((void *)0);
      if (!n->global.inlined_to && !((n->decl)->decl.external_flag))
 {
   cgraph_expand_function (n);
   output = 1;
 }
    }
  return output;
}
void
cgraph_finalize_function (tree decl, unsigned char nested)
{
  struct cgraph_node *node = cgraph_node (decl);
  if (node->local.finalized)
    {
      if (node->output)
 fancy_abort ("gcc.c", 707858, "?");
      memset (&node->local, 0, sizeof (node->local));
      memset (&node->global, 0, sizeof (node->global));
      memset (&node->rtl, 0, sizeof (node->rtl));
      node->analyzed = 0;
      node->local.redefined_extern_inline = 1;
      while (node->callees)
 cgraph_remove_edge1 (node->callees);
      if (node->reachable && !flag_unit_at_a_time)
 {
   struct cgraph_node *n;
   for (n = cgraph_nodes_queue; n; n = n->next_needed)
     if (n == node)
       break;
   if (!n)
     node->reachable = 0;
 }
    }
  notice_global_symbol (decl);
  node->decl = decl;
  node->local.finalized = 1;
  if (!flag_unit_at_a_time)
    {
      cgraph_analyze_function (node);
      cgraph_decide_inlining_incrementally (node);
    }
  if (decide_is_function_needed (node, decl))
    cgraph_mark_needed_node (node);
  if (!nested)
    {
      if (!cgraph_assemble_pending_functions ())
 ggc_collect ();
    }
  if (!((decl)->common.asm_written_flag))
    (*debug_hooks->deferred_inline_function) (decl);
  if (warn_unused_parameter)
    do_warn_unused_parameter (decl);
}
static tree
record_call_1 (tree *tp, int *walk_subtrees, void *data)
{
  tree t = *tp;
  switch (((enum tree_code) (t)->common.code))
    {
    case VAR_DECL:
      if (((t)->common.static_flag))
        cgraph_varpool_mark_needed_node (cgraph_varpool_node (t));
      break;
    case ADDR_EXPR:
      if (flag_unit_at_a_time)
 {
   tree decl = ((*tp)->exp.operands[0]);
   if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
     cgraph_mark_needed_node (cgraph_node (decl));
 }
      break;
    case CALL_EXPR:
      {
 tree decl = get_callee_fndecl (*tp);
 if (decl && ((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
   {
     cgraph_create_edge1 (data, cgraph_node (decl), *tp);
     walk_tree (&((*tp)->exp.operands[1]), record_call_1, data,
         visited_nodes);
     *walk_subtrees = 0;
   }
 break;
      }
    default:
      if ((tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 'd') || (tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 't'))
 {
   *walk_subtrees = 0;
   break;
 }
      if ((unsigned int) ((enum tree_code) (t)->common.code) >= LAST_AND_UNUSED_TREE_CODE)
 return lang_hooks.callgraph.analyze_expr (tp, walk_subtrees, data);
      break;
    }
  return ((void *)0);
}
void
cgraph_create_edge1s (struct cgraph_node *node, tree body)
{
  visited_nodes = htab_create (37, htab_hash_pointer,
        htab_eq_pointer, ((void *)0));
  walk_tree (&body, record_call_1, node, visited_nodes);
  htab_delete (visited_nodes);
  visited_nodes = ((void *)0);
}
static unsigned char error_found;
static tree
verify_cgraph_node_1 (tree *tp, int *walk_subtrees, void *data)
{
  tree t = *tp;
  tree decl;
  if (((enum tree_code) (t)->common.code) == CALL_EXPR && (decl = get_callee_fndecl (t)))
    {
      struct cgraph_edge1 *e = cgraph_edge1 (data, t);
      if (e)
 {
   if (e->aux)
     {
       error ("Shared call_expr:");
       debug_tree (t);
       error_found = 1;
     }
   if (e->callee->decl != cgraph_node (decl)->decl)
     {
       error ("Edge1 points to wrong declaration:");
       debug_tree (e->callee->decl);
       fprintf (stderr," Instead of:");
       debug_tree (decl);
     }
   e->aux = (void *)1;
 }
      else
 {
   error ("Missing callgraph edge1 for call expr:");
   debug_tree (t);
   error_found = 1;
 }
    }
  if ((tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 'd') || (tree_code_type[(int) (((enum tree_code) (*tp)->common.code))] == 't'))
    *walk_subtrees = 0;
  return (tree) ((void *)0);
}
void
verify_cgraph_node (struct cgraph_node *node)
{
  struct cgraph_edge1 *e;
  struct cgraph_node *main_clone;
  timevar_push (TV_CGRAPH_VERIFY);
  error_found = 0;
  for (e = node->callees; e; e = e->next_callee)
    if (e->aux)
      {
 error ("Aux field set for edge1 %s->%s",
        cgraph_node_name (e->caller), cgraph_node_name (e->callee));
 error_found = 1;
      }
  for (e = node->callers; e; e = e->next_caller)
    {
      if (!e->inline_failed)
 {
   if (node->global.inlined_to
       != (e->caller->global.inlined_to
    ? e->caller->global.inlined_to : e->caller))
     {
       error ("Inlined_to pointer is wrong");
       error_found = 1;
     }
   if (node->callers->next_caller)
     {
       error ("Multiple inline callers");
       error_found = 1;
     }
 }
      else
 if (node->global.inlined_to)
   {
     error ("Inlined_to pointer set for noninline callers");
     error_found = 1;
   }
    }
  if (!node->callers && node->global.inlined_to)
    {
      error ("Inlined_to pointer is set but no predecesors found");
      error_found = 1;
    }
  if (node->global.inlined_to == node)
    {
      error ("Inlined_to pointer reffers to itself");
      error_found = 1;
    }
  for (main_clone = cgraph_node (node->decl); main_clone;
       main_clone = main_clone->next_clone)
    if (main_clone == node)
      break;
  if (!node)
    {
      error ("Node not found in DECL_ASSEMBLER_NAME hash");
      error_found = 1;
    }
  if (node->analyzed
      && ((node->decl)->decl.saved_tree) && !((node->decl)->common.asm_written_flag)
      && (!((node->decl)->decl.external_flag) || node->global.inlined_to))
    {
      walk_tree_without_duplicates (&((node->decl)->decl.saved_tree),
        verify_cgraph_node_1, node);
      for (e = node->callees; e; e = e->next_callee)
 {
   if (!e->aux)
     {
       error ("Edge1 %s->%s has no corresponding call_expr",
       cgraph_node_name (e->caller),
       cgraph_node_name (e->callee));
       error_found = 1;
     }
   e->aux = 0;
 }
    }
  if (error_found)
    {
      dump_cgraph_node (stderr, node);
      internal_error ("verify_cgraph_node failed.");
    }
  timevar_pop (TV_CGRAPH_VERIFY);
}
void
verify_cgraph (void)
{
  struct cgraph_node *node;
  for (node = cgraph_nodes; node; node = node->next)
    verify_cgraph_node (node);
}
static void
cgraph_analyze_function (struct cgraph_node *node)
{
  tree decl = node->decl;
  struct cgraph_edge1 *e;
  current_function_decl = decl;
  cgraph_create_edge1s (node, ((decl)->decl.saved_tree));
  node->local.inlinable = tree_inlinable_function_p (decl);
  node->local.self_insns = estimate_num_insns (((decl)->decl.saved_tree));
  if (node->local.inlinable)
    node->local.disregard_inline_limits
      = lang_hooks.tree_inlining.disregard_inline_limits (decl);
  for (e = node->callers; e; e = e->next_caller)
    {
      if (node->local.redefined_extern_inline)
 e->inline_failed = "redefined extern inline functions are not considered for inlining"
                                ;
      else if (!node->local.inlinable)
 e->inline_failed = "function not inlinable";
      else
 e->inline_failed = "function not considered for inlining";
    }
  if (flag_really_no_inline && !node->local.disregard_inline_limits)
    node->local.inlinable = 0;
  node->global.insns = node->local.self_insns;
  node->analyzed = 1;
  current_function_decl = ((void *)0);
}
void
cgraph_finalize_compilation_unit (void)
{
  struct cgraph_node *node;
  if (!flag_unit_at_a_time)
    {
      cgraph_assemble_pending_functions ();
      return;
    }
  cgraph_varpool_assemble_pending_decls ();
  if (!quiet_flag)
    fprintf (stderr, "\nAnalyzing compilation unit\n");
  timevar_push (TV_CGRAPH);
  if (cgraph_dump_file)
    {
      fprintf (cgraph_dump_file, "Initial entry points:");
      for (node = cgraph_nodes; node; node = node->next)
 if (node->needed && ((node->decl)->decl.saved_tree))
   fprintf (cgraph_dump_file, " %s", cgraph_node_name (node));
      fprintf (cgraph_dump_file, "\n");
    }
  while (cgraph_nodes_queue)
    {
      struct cgraph_edge1 *edge1;
      tree decl = cgraph_nodes_queue->decl;
      node = cgraph_nodes_queue;
      cgraph_nodes_queue = cgraph_nodes_queue->next_needed;
      node->next_needed = ((void *)0);
      if (!((decl)->decl.saved_tree))
 continue;
      if (node->analyzed || !node->reachable || !((decl)->decl.saved_tree))
 fancy_abort ("gcc.c", 708221, "?");
      cgraph_analyze_function (node);
      for (edge1 = node->callees; edge1; edge1 = edge1->next_callee)
 if (!edge1->callee->reachable)
   cgraph_mark_reachable_node (edge1->callee);
      cgraph_varpool_assemble_pending_decls ();
    }
  if (cgraph_dump_file)
    {
      fprintf (cgraph_dump_file, "Unit entry points:");
      for (node = cgraph_nodes; node; node = node->next)
 if (node->needed && ((node->decl)->decl.saved_tree))
   fprintf (cgraph_dump_file, " %s", cgraph_node_name (node));
      fprintf (cgraph_dump_file, "\n\nInitial ");
      dump_cgraph (cgraph_dump_file);
    }
  if (cgraph_dump_file)
    fprintf (cgraph_dump_file, "\nReclaiming functions:");
  for (node = cgraph_nodes; node; node = node->next)
    {
      tree decl = node->decl;
      if (!node->reachable && ((decl)->decl.saved_tree))
 {
   if (cgraph_dump_file)
     fprintf (cgraph_dump_file, " %s", cgraph_node_name (node));
   cgraph_remove_node (node);
 }
      else
 node->next_needed = ((void *)0);
    }
  if (cgraph_dump_file)
    {
      fprintf (cgraph_dump_file, "\n\nReclaimed ");
      dump_cgraph (cgraph_dump_file);
    }
  ggc_collect ();
  timevar_pop (TV_CGRAPH);
}
static void
cgraph_mark_functions_to_output (void)
{
  struct cgraph_node *node;
  for (node = cgraph_nodes; node; node = node->next)
    {
      tree decl = node->decl;
      struct cgraph_edge1 *e;
      if (node->output)
 fancy_abort ("gcc.c", 708280, "?");
      for (e = node->callers; e; e = e->next_caller)
 if (e->inline_failed)
   break;
      if (((decl)->decl.saved_tree)
   && !node->global.inlined_to
   && (node->needed
       || (e && node->reachable))
   && !((decl)->common.asm_written_flag)
   && !((decl)->decl.external_flag))
 node->output = 1;
      else if (!node->global.inlined_to && ((decl)->decl.saved_tree)
        && !((decl)->decl.external_flag))
 {
   dump_cgraph_node (stderr, node);
   fancy_abort ("gcc.c", 708301, "?");
 }
    }
}
static void
cgraph_expand_function (struct cgraph_node *node)
{
  tree decl = node->decl;
  if (node->global.inlined_to)
    fancy_abort ("gcc.c", 708315, "?");
  if (flag_unit_at_a_time)
    announce_function (decl);
  lang_hooks.callgraph.expand_function (decl);
  if (!((node->decl)->common.asm_written_flag))
    fancy_abort ("gcc.c", 708327, "?");
  current_function_decl = ((void *)0);
  if (((node->decl)->decl.saved_tree)
      && !cgraph_preserve_function_body_p (node->decl))
    {
      ((node->decl)->decl.saved_tree) = ((void *)0);
      ((node->decl)->decl.u2.f) = ((void *)0);
      ((node->decl)->decl.initial) = global_trees[TI_ERROR_MARK];
    }
}
static int
cgraph_postorder (struct cgraph_node **order)
{
  struct cgraph_node *node, *node2;
  int stack_size = 0;
  int order_pos = 0;
  struct cgraph_edge1 *edge1, last;
  struct cgraph_node **stack1 =
    xcalloc (cgraph_n_nodes, sizeof (struct cgraph_node *));
  for (node = cgraph_nodes; node; node = node->next)
    node->aux = ((void *)0);
  for (node = cgraph_nodes; node; node = node->next)
    if (!node->aux)
      {
 node2 = node;
 if (!node->callers)
   node->aux = &last;
 else
   node->aux = node->callers;
 while (node2)
   {
     while (node2->aux != &last)
       {
  edge1 = node2->aux;
  if (edge1->next_caller)
    node2->aux = edge1->next_caller;
  else
    node2->aux = &last;
  if (!edge1->caller->aux)
    {
      if (!edge1->caller->callers)
        edge1->caller->aux = &last;
      else
        edge1->caller->aux = edge1->caller->callers;
      stack1[stack_size++] = node2;
      node2 = edge1->caller;
      break;
    }
       }
     if (node2->aux == &last)
       {
  order[order_pos++] = node2;
  if (stack_size)
    node2 = stack1[--stack_size];
  else
    node2 = ((void *)0);
       }
   }
      }
  free (stack1);
  return order_pos;
}
static unsigned char
cgraph_remove_unreachable_nodes (void)
{
  struct cgraph_node *first = (void *) 1;
  struct cgraph_node *node;
  unsigned char changed = 0;
  int insns = 0;
  if (cgraph_dump_file)
    fprintf (cgraph_dump_file, "\nReclaiming functions:");
  for (node = cgraph_nodes; node; node = node->next)
    if (node->needed && !node->global.inlined_to
 && (!((node->decl)->decl.external_flag) || !node->analyzed))
      {
 node->aux = first;
 first = node;
      }
    else if (node->aux)
      fancy_abort ("gcc.c", 708430, "?");
  while (first != (void *) 1)
    {
      struct cgraph_edge1 *e;
      node = first;
      first = first->aux;
      for (e = node->callees; e; e = e->next_callee)
 if (!e->callee->aux
     && node->analyzed
     && (!e->inline_failed || !e->callee->analyzed
  || !((e->callee->decl)->decl.external_flag)))
   {
     e->callee->aux = first;
     first = e->callee;
   }
    }
  for (node = cgraph_nodes; node; node = node->next)
    {
      if (!node->aux)
 {
   int local_insns;
   tree decl = node->decl;
          node->global.inlined_to = ((void *)0);
   if (((decl)->decl.u2.f))
     local_insns = node->local.self_insns;
   else
     local_insns = 0;
   if (cgraph_dump_file)
     fprintf (cgraph_dump_file, " %s", cgraph_node_name (node));
   if (!node->analyzed || !((node->decl)->decl.external_flag))
     cgraph_remove_node (node);
   else
     {
       struct cgraph_edge1 *e;
       for (e = node->callers; e; e = e->next_caller)
  if (e->caller->aux)
    break;
       if (e || node->needed)
  {
    struct cgraph_node *clone;
    for (clone = node->next_clone; clone;
         clone = clone->next_clone)
      if (clone->aux)
        break;
    if (!clone)
      {
        ((node->decl)->decl.saved_tree) = ((void *)0);
        ((node->decl)->decl.u2.f) = ((void *)0);
        ((node->decl)->decl.initial) = global_trees[TI_ERROR_MARK];
      }
    while (node->callees)
      cgraph_remove_edge1 (node->callees);
    node->analyzed = 0;
  }
       else
  cgraph_remove_node (node);
     }
   if (!((decl)->decl.saved_tree))
     insns += local_insns;
   changed = 1;
 }
    }
  for (node = cgraph_nodes; node; node = node->next)
    node->aux = ((void *)0);
  if (cgraph_dump_file)
    fprintf (cgraph_dump_file, "\nReclaimed %i insns", insns);
  return changed;
}
static int
cgraph_estimate_size_after_inlining (int times, struct cgraph_node *to,
         struct cgraph_node *what)
{
  return (what->global.insns - 10) * times + to->global.insns;
}
static int
cgraph_estimate_growth (struct cgraph_node *node)
{
  int growth = 0;
  struct cgraph_edge1 *e;
  for (e = node->callers; e; e = e->next_caller)
    if (e->inline_failed)
      growth += (cgraph_estimate_size_after_inlining (1, e->caller, node)
   - e->caller->global.insns);
  if (!node->needed && !((node->decl)->decl.external_flag))
    growth -= node->global.insns;
  return growth;
}
void
cgraph_clone_inlined_nodes (struct cgraph_edge1 *e, unsigned char duplicate)
{
  struct cgraph_node *n;
  if (!e->callee->callers->next_caller
      && (!e->callee->needed || ((e->callee->decl)->decl.external_flag))
      && duplicate
      && flag_unit_at_a_time)
    {
      if (e->callee->global.inlined_to)
 fancy_abort ("gcc.c", 708565, "?");
      if (!((e->callee->decl)->decl.external_flag))
        overall_insns -= e->callee->global.insns, nfunctions_inlined++;
      duplicate = 0;
    }
   else if (duplicate)
    {
      n = cgraph_clone_node (e->callee);
      cgraph_redirect_edge1_callee (e, n);
    }
  if (e->caller->global.inlined_to)
    e->callee->global.inlined_to = e->caller->global.inlined_to;
  else
    e->callee->global.inlined_to = e->caller;
  for (e = e->callee->callees; e; e = e->next_callee)
    if (!e->inline_failed)
      cgraph_clone_inlined_nodes (e, duplicate);
}
void
cgraph_mark_inline_edge1 (struct cgraph_edge1 *e)
{
  int old_insns = 0, new_insns = 0;
  struct cgraph_node *to = ((void *)0), *what;
  if (!e->inline_failed)
    fancy_abort ("gcc.c", 708596, "?");
  e->inline_failed = ((void *)0);
  if (!e->callee->global.inlined && flag_unit_at_a_time)
    (e->callee->decl)->decl.possibly_inlined = 1;
  e->callee->global.inlined = 1;
  cgraph_clone_inlined_nodes (e, 1);
  what = e->callee;
  for (;e && !e->inline_failed; e = e->caller->callers)
    {
      old_insns = e->caller->global.insns;
      new_insns = cgraph_estimate_size_after_inlining (1, e->caller,
             what);
      if (new_insns < 0)
 fancy_abort ("gcc.c", 708614, "?");
      to = e->caller;
      to->global.insns = new_insns;
    }
  if (what->global.inlined_to != to)
    fancy_abort ("gcc.c", 708619, "?");
  overall_insns += new_insns - old_insns;
  ncalls_inlined++;
}
static struct cgraph_edge1 *
cgraph_mark_inline (struct cgraph_edge1 *edge1)
{
  struct cgraph_node *to = edge1->caller;
  struct cgraph_node *what = edge1->callee;
  struct cgraph_edge1 *e, *next;
  int times = 0;
  for (e = what->callers; e; e = next)
    {
      next = e->next_caller;
      if (e->caller == to && e->inline_failed)
 {
          cgraph_mark_inline_edge1 (e);
   if (e == edge1)
     edge1 = next;
   times ++;
 }
    }
  if (!times)
    fancy_abort ("gcc.c", 708650, "?");
  return edge1;
}
static unsigned char
cgraph_check_inline_limits (struct cgraph_node *to, struct cgraph_node *what,
       const char **reason)
{
  int times = 0;
  struct cgraph_edge1 *e;
  int newsize;
  int limit;
  if (to->global.inlined_to)
    to = to->global.inlined_to;
  for (e = to->callees; e; e = e->next_callee)
    if (e->callee == what)
      times++;
  if (to->local.self_insns > what->local.self_insns)
    limit = to->local.self_insns;
  else
    limit = what->local.self_insns;
  limit += limit * (compiler_params[(int) PARAM_LARGE_FUNCTION_GROWTH].value1) / 100;
  newsize = cgraph_estimate_size_after_inlining (times, to, what);
  if (newsize > (compiler_params[(int) PARAM_LARGE_FUNCTION_INSNS].value1)
      && newsize > limit)
    {
      if (reason)
        *reason = "--param large-function-growth limit reached";
      return 0;
    }
  return 1;
}
static unsigned char
cgraph_default_inline_p (struct cgraph_node *n)
{
  if (!((n->decl)->decl.inline_flag) || !((n->decl)->decl.saved_tree))
    return 0;
  if (((n->decl)->decl.declared_inline_flag))
    return n->global.insns < (compiler_params[(int) PARAM_MAX_INLINE_INSNS_SINGLE].value1);
  else
    return n->global.insns < (compiler_params[(int) PARAM_MAX_INLINE_INSNS_AUTO].value1);
}
static unsigned char
cgraph_recursive_inlining_p (struct cgraph_node *to,
        struct cgraph_node *what,
        const char **reason)
{
  unsigned char recursive;
  if (to->global.inlined_to)
    recursive = what->decl == to->global.inlined_to->decl;
  else
    recursive = what->decl == to->decl;
  if (recursive && reason)
    *reason = (what->local.disregard_inline_limits
        ? "recursive inlining" : "");
  return recursive;
}
static void
update_callee_keys (fibheap_t heap, struct fibnode **heap_node,
      struct cgraph_node *node)
{
  struct cgraph_edge1 *e;
  for (e = node->callees; e; e = e->next_callee)
    if (e->inline_failed && heap_node[e->callee->uid])
      fibheap_replace_key (heap, heap_node[e->callee->uid],
      cgraph_estimate_growth (e->callee));
    else if (!e->inline_failed)
      update_callee_keys (heap, heap_node, e->callee);
}
static void
lookup_recursive_calls (struct cgraph_node *node, struct cgraph_node *where,
   struct cgraph_edge1 **first, struct cgraph_edge1 **last)
{
  struct cgraph_edge1 *e;
  for (e = where->callees; e; e = e->next_callee)
    if (e->callee == node)
      {
 if (!*first)
   *first = e;
 else
   (*last)->aux = e;
 *last = e;
      }
  for (e = where->callees; e; e = e->next_callee)
    if (!e->inline_failed)
      lookup_recursive_calls (node, e->callee, first, last);
}
static void
cgraph_decide_recursive_inlining (struct cgraph_node *node)
{
  int limit = (compiler_params[(int) PARAM_MAX_INLINE_INSNS_RECURSIVE_AUTO].value1);
  int max_depth = (compiler_params[(int) PARAM_MAX_INLINE_RECURSIVE_DEPTH_AUTO].value1);
  struct cgraph_edge1 *first_call = ((void *)0), *last_call = ((void *)0);
  struct cgraph_edge1 *last_in_current_depth;
  struct cgraph_edge1 *e;
  struct cgraph_node *master_clone;
  int depth = 0;
  int n = 0;
  if (((node->decl)->decl.declared_inline_flag))
    {
      limit = (compiler_params[(int) PARAM_MAX_INLINE_INSNS_RECURSIVE].value1);
      max_depth = (compiler_params[(int) PARAM_MAX_INLINE_RECURSIVE_DEPTH].value1);
    }
  if (!max_depth
      || cgraph_estimate_size_after_inlining (1, node, node) >= limit)
    return;
  lookup_recursive_calls (node, node, &first_call, &last_call);
  if (!first_call)
    return;
  if (cgraph_dump_file)
    fprintf (cgraph_dump_file,
      "\nPerforming recursive inlining on %s\n",
      cgraph_node_name (node));
  master_clone = cgraph_clone_node (node);
  master_clone->needed = 1;
  for (e = master_clone->callees; e; e = e->next_callee)
    if (!e->inline_failed)
      cgraph_clone_inlined_nodes (e, 1);
  last_in_current_depth = last_call;
  while (first_call
  && cgraph_estimate_size_after_inlining (1, node, master_clone) <= limit)
    {
      struct cgraph_edge1 *curr = first_call;
      first_call = first_call->aux;
      curr->aux = ((void *)0);
      cgraph_redirect_edge1_callee (curr, master_clone);
      cgraph_mark_inline_edge1 (curr);
      lookup_recursive_calls (node, curr->callee, &first_call, &last_call);
      if (last_in_current_depth
   && ++depth >= max_depth)
 break;
      n++;
    }
  while (first_call)
    {
      struct cgraph_edge1 *next = first_call->aux;
      first_call->aux = ((void *)0);
      first_call = next;
    }
  if (cgraph_dump_file)
    fprintf (cgraph_dump_file,
      "\n   Inlined %i times, body grown from %i to %i insns\n", n,
      master_clone->global.insns, node->global.insns);
  for (node = cgraph_nodes; node != master_clone;
       node = node->next)
    if (node->global.inlined_to == master_clone)
      cgraph_remove_node (node);
  cgraph_remove_node (master_clone);
}
static void
cgraph_set_inline_failed (struct cgraph_node *node, const char *reason)
{
  struct cgraph_edge1 *e;
  if (cgraph_dump_file)
    fprintf (cgraph_dump_file, "Inlining failed: %s\n", reason);
  for (e = node->callers; e; e = e->next_caller)
    if (e->inline_failed)
      e->inline_failed = reason;
}
static void
cgraph_decide_inlining_of_small_functions (void)
{
  struct cgraph_node *node;
  fibheap_t heap = fibheap_new ();
  struct fibnode **heap_node =
    xcalloc (cgraph_max_uid, sizeof (struct fibnode *));
  int max_insns = ((long long) initial_insns
     * (100 + (compiler_params[(int) PARAM_INLINE_UNIT_GROWTH].value1)) / 100);
  for (node = cgraph_nodes; node; node = node->next)
    {
      if (!node->local.inlinable || !node->callers
   || node->local.disregard_inline_limits)
 continue;
      if (!cgraph_default_inline_p (node))
 {
   cgraph_set_inline_failed (node,
     "--param max-inline-insns-single limit reached");
   continue;
 }
      heap_node[node->uid] =
 fibheap_insert (heap, cgraph_estimate_growth (node), node);
    }
  if (cgraph_dump_file)
    fprintf (cgraph_dump_file, "\nDeciding on smaller functions:\n");
  while (overall_insns <= max_insns && (node = fibheap_extract_min (heap)))
    {
      struct cgraph_edge1 *e, *next;
      int old_insns = overall_insns;
      heap_node[node->uid] = ((void *)0);
      if (cgraph_dump_file)
 fprintf (cgraph_dump_file,
   "\nConsidering %s with %i insns\n Estimated growth is %+i insns.\n",
   cgraph_node_name (node), node->global.insns,
   cgraph_estimate_growth (node));
      if (!cgraph_default_inline_p (node))
 {
   cgraph_set_inline_failed (node,
     "--param max-inline-insns-single limit reached after inlining into the callee");
   continue;
 }
      for (e = node->callers; e; e = next)
 {
   next = e->next_caller;
   if (e->inline_failed)
     {
       struct cgraph_node *where;
       if (cgraph_recursive_inlining_p (e->caller, e->callee,
                  &e->inline_failed)
    || !cgraph_check_inline_limits (e->caller, e->callee,
          &e->inline_failed))
  {
    if (cgraph_dump_file)
      fprintf (cgraph_dump_file, " Not inlining into %s:%s.\n",
        cgraph_node_name (e->caller), e->inline_failed);
    continue;
  }
       next = cgraph_mark_inline (e);
       where = e->caller;
       if (where->global.inlined_to)
  where = where->global.inlined_to;
       if (heap_node[where->uid])
  fibheap_replace_key (heap, heap_node[where->uid],
         cgraph_estimate_growth (where));
       if (cgraph_dump_file)
  fprintf (cgraph_dump_file,
    " Inlined into %s which now has %i insns.\n",
    cgraph_node_name (e->caller),
    e->caller->global.insns);
     }
 }
      cgraph_decide_recursive_inlining (node);
      update_callee_keys (heap, heap_node, node);
      if (cgraph_dump_file)
 fprintf (cgraph_dump_file,
   " Inlined for a net change of %+i insns.\n",
   overall_insns - old_insns);
    }
  while ((node = fibheap_extract_min (heap)) != ((void *)0))
    if (!node->local.disregard_inline_limits)
      cgraph_set_inline_failed (node, "--param inline-unit-growth limit reached");
  fibheap_delete (heap);
  free (heap_node);
}
static void
cgraph_decide_inlining (void)
{
  struct cgraph_node *node;
  int nnodes;
  struct cgraph_node **order =
    xcalloc (cgraph_n_nodes, sizeof (struct cgraph_node *));
  int old_insns = 0;
  int i;
  for (node = cgraph_nodes; node; node = node->next)
    initial_insns += node->local.self_insns;
  overall_insns = initial_insns;
  nnodes = cgraph_postorder (order);
  if (cgraph_dump_file)
    fprintf (cgraph_dump_file,
      "\nDeciding on inlining.  Starting with %i insns.\n",
      initial_insns);
  for (node = cgraph_nodes; node; node = node->next)
    node->aux = 0;
  if (cgraph_dump_file)
    fprintf (cgraph_dump_file, "\nInlining always_inline functions:\n");
  for (i = nnodes - 1; i >= 0; i--)
    {
      struct cgraph_edge1 *e, *next;
      node = order[i];
      if (!node->local.disregard_inline_limits)
 continue;
      if (cgraph_dump_file)
 fprintf (cgraph_dump_file,
   "\nConsidering %s %i insns (always inline)\n",
   cgraph_node_name (node), node->global.insns);
      old_insns = overall_insns;
      for (e = node->callers; e; e = next)
 {
   next = e->next_caller;
   if (!e->inline_failed)
     continue;
   if (cgraph_recursive_inlining_p (e->caller, e->callee,
          &e->inline_failed))
     continue;
   cgraph_mark_inline_edge1 (e);
   if (cgraph_dump_file)
     fprintf (cgraph_dump_file,
       " Inlined into %s which now has %i insns.\n",
       cgraph_node_name (e->caller),
       e->caller->global.insns);
 }
      if (cgraph_dump_file)
 fprintf (cgraph_dump_file,
   " Inlined for a net change of %+i insns.\n",
   overall_insns - old_insns);
    }
  if (!flag_really_no_inline)
    {
      cgraph_decide_inlining_of_small_functions ();
      if (cgraph_dump_file)
 fprintf (cgraph_dump_file, "\nDeciding on functions called once:\n");
      for (i = nnodes - 1; i >= 0; i--)
 {
   node = order[i];
   if (node->callers && !node->callers->next_caller && !node->needed
       && node->local.inlinable && node->callers->inline_failed
       && !((node->decl)->decl.external_flag) && !((node->decl)->decl.comdat_flag))
     {
       unsigned char ok = 1;
       struct cgraph_node *node1;
       for (node1 = node->callers->caller;
     node1->callers && !node1->callers->inline_failed
     && ok; node1 = node1->callers->caller)
  if (node1->callers->next_caller || node1->needed)
    ok = 0;
       if (ok)
  {
    if (cgraph_dump_file)
      fprintf (cgraph_dump_file,
        "\nConsidering %s %i insns.\n Called once from %s %i insns.\n",
        cgraph_node_name (node), node->global.insns,
        cgraph_node_name (node->callers->caller),
        node->callers->caller->global.insns);
    old_insns = overall_insns;
    if (cgraph_check_inline_limits (node->callers->caller, node,
          ((void *)0)))
      {
        cgraph_mark_inline (node->callers);
        if (cgraph_dump_file)
   fprintf (cgraph_dump_file,
     " Inlined into %s which now has %i insns for a net change of %+i insns.\n",
     cgraph_node_name (node->callers->caller),
     node->callers->caller->global.insns,
     overall_insns - old_insns);
      }
    else
      {
        if (cgraph_dump_file)
   fprintf (cgraph_dump_file,
     " Inline limit reached, not inlined.\n");
      }
  }
     }
 }
    }
  cgraph_remove_unreachable_nodes ();
  if (cgraph_dump_file)
    fprintf (cgraph_dump_file,
      "\nInlined %i calls, eliminated %i functions, %i insns turned to %i insns.\n\n",
      ncalls_inlined, nfunctions_inlined, initial_insns,
      overall_insns);
  free (order);
}
static void
cgraph_decide_inlining_incrementally (struct cgraph_node *node)
{
  struct cgraph_edge1 *e;
  for (e = node->callees; e; e = e->next_callee)
    if (e->callee->local.disregard_inline_limits
 && e->inline_failed
        && !cgraph_recursive_inlining_p (node, e->callee, &e->inline_failed)
 && ((e->callee->decl)->decl.saved_tree))
      cgraph_mark_inline (e);
  if (!flag_really_no_inline)
    for (e = node->callees; e; e = e->next_callee)
      if (e->callee->local.inlinable
   && e->inline_failed
   && !e->callee->local.disregard_inline_limits
   && !cgraph_recursive_inlining_p (node, e->callee, &e->inline_failed)
   && cgraph_check_inline_limits (node, e->callee, &e->inline_failed)
   && ((e->callee->decl)->decl.saved_tree))
 {
   if (cgraph_default_inline_p (e->callee))
     cgraph_mark_inline (e);
   else
     e->inline_failed
       = "--param max-inline-insns-single limit reached";
 }
}
unsigned char
cgraph_inline_p (struct cgraph_edge1 *e, const char **reason)
{
  *reason = e->inline_failed;
  return !e->inline_failed;
}
static void
cgraph_expand_all_functions (void)
{
  struct cgraph_node *node;
  struct cgraph_node **order =
    xcalloc (cgraph_n_nodes, sizeof (struct cgraph_node *));
  int order_pos = 0, new_order_pos = 0;
  int i;
  cgraph_mark_functions_to_output ();
  order_pos = cgraph_postorder (order);
  if (order_pos != cgraph_n_nodes)
    fancy_abort ("gcc.c", 709178, "?");
  for (i = 0; i < order_pos; i++)
    if (order[i]->output)
      order[new_order_pos++] = order[i];
  for (i = new_order_pos - 1; i >= 0; i--)
    {
      node = order[i];
      if (node->output)
 {
   if (!node->reachable)
     fancy_abort ("gcc.c", 709192, "?");
   node->output = 0;
   cgraph_expand_function (node);
 }
    }
  free (order);
}
static void
cgraph_mark_local_functions (void)
{
  struct cgraph_node *node;
  if (cgraph_dump_file)
    fprintf (cgraph_dump_file, "\nMarking local functions:");
  for (node = cgraph_nodes; node; node = node->next)
    {
      node->local.local = (!node->needed
             && ((node->decl)->decl.saved_tree)
             && !((node->decl)->common.public_flag));
      if (cgraph_dump_file && node->local.local)
 fprintf (cgraph_dump_file, " %s", cgraph_node_name (node));
    }
  if (cgraph_dump_file)
    fprintf (cgraph_dump_file, "\n\n");
}
unsigned char
cgraph_preserve_function_body_p (tree decl)
{
  struct cgraph_node *node;
  if (dump_enabled_p (TDI_all))
    return 1;
  if (!cgraph_global_info_ready)
    return (((decl)->decl.inline_flag) && !flag_really_no_inline);
  for (node = cgraph_node (decl); node; node = node->next_clone)
    if (node->global.inlined_to)
      return 1;
  return 0;
}
void
cgraph_optimize (void)
{
  if (!flag_unit_at_a_time)
    return;
  timevar_push (TV_CGRAPHOPT);
  if (!quiet_flag)
    fprintf (stderr, "Performing intraprocedural optimizations\n");
  cgraph_mark_local_functions ();
  if (cgraph_dump_file)
    {
      fprintf (cgraph_dump_file, "Marked ");
      dump_cgraph (cgraph_dump_file);
    }
  if (flag_inline_trees)
    cgraph_decide_inlining ();
  cgraph_global_info_ready = 1;
  if (cgraph_dump_file)
    {
      fprintf (cgraph_dump_file, "Optimized ");
      dump_cgraph (cgraph_dump_file);
    }
  timevar_pop (TV_CGRAPHOPT);
  if (!quiet_flag)
    fprintf (stderr, "Assembling functions:\n");
  cgraph_expand_all_functions ();
  if (cgraph_dump_file)
    {
      fprintf (cgraph_dump_file, "\nFinal ");
      dump_cgraph (cgraph_dump_file);
    }
}
void
cgraph_build_static_cdtor (char which, tree body)
{
  static int counter = 0;
  char which_buf[16];
  tree decl, name;
  sprintf (which_buf, "%c_%d", which, counter++);
  name = get_file_function_name_long (which_buf);
  decl = build_decl_stat (FUNCTION_DECL,name,build_function_type (global_trees[TI_VOID_TYPE], global_trees[TI_VOID_LIST_NODE]) )
                                                            ;
  current_function_decl = decl;
  ((decl)->decl.result) = build_decl_stat (RESULT_DECL,(tree) ((void *)0),global_trees[TI_VOID_TYPE] );
  allocate_struct_function (decl);
  ((decl)->common.static_flag) = 1;
  ((decl)->common.used_flag) = 1;
  ((decl)->decl.artificial_flag) = 1;
  ((decl)->decl.ignored_flag) = 1;
  ((decl)->decl.no_instrument_function_entry_exit) = 1;
  ((decl)->decl.saved_tree) = body;
  ((decl)->common.public_flag) = ! targetm.have_ctors_dtors;
  ((decl)->decl.uninlinable) = 1;
  ((decl)->decl.initial) = make_node_stat (BLOCK );
  ((((decl)->decl.initial))->common.used_flag) = 1;
  ((decl)->decl.locus) = input_location;
  cfun->function_end_locus = input_location;
  if (which == 'I')
    ((decl)->decl.static_ctor_flag) = 1;
  else if (which == 'D')
    ((decl)->decl.static_dtor_flag) = 1;
  else
    fancy_abort ("gcc.c", 709356, "?");
  gimplify_function_tree (decl);
  if (cgraph_global_info_ready)
    tree_rest_of_compilation (decl, 0);
  else
    cgraph_finalize_function (decl, 0);
  if (targetm.have_ctors_dtors)
    {
      void (*fn) (rtx, int);
      if (which == 'I')
 fn = targetm.asm_out.constructor;
      else
 fn = targetm.asm_out.destructor;
      fn ((((((decl)->decl.rtl ? (decl)->decl.rtl : (make_decl_rtl (decl, ((void *)0)), (decl)->decl.rtl)))->u.fld[0]).rtx1), 65535);
    }
}
typedef enum
  {
     pp_c_flag_abstract = 1 << 1,
     pp_c_flag_last_bit = 2
  } pp_c_pretty_print_flags;
typedef struct c_pretty_print_info c_pretty_printer;
typedef void (*c_pretty_print_fn) (c_pretty_printer *, tree);
struct c_pretty_print_info
{
  pretty_printer base;
  int *offset_list;
  pp_flags flags;
  c_pretty_print_fn declaration;
  c_pretty_print_fn declaration_specifiers;
  c_pretty_print_fn declarator;
  c_pretty_print_fn abstract_declarator;
  c_pretty_print_fn direct_abstract_declarator;
  c_pretty_print_fn type_specifier_seq;
  c_pretty_print_fn direct_declarator;
  c_pretty_print_fn ptr_operator;
  c_pretty_print_fn parameter_list;
  c_pretty_print_fn type_id;
  c_pretty_print_fn simple_type_specifier;
  c_pretty_print_fn function_specifier;
  c_pretty_print_fn storage_class_specifier;
  c_pretty_print_fn initializer;
  c_pretty_print_fn statement;
  c_pretty_print_fn id_expression;
  c_pretty_print_fn primary_expression;
  c_pretty_print_fn postfix_expression;
  c_pretty_print_fn unary_expression;
  c_pretty_print_fn multiplicative_expression;
  c_pretty_print_fn conditional_expression;
  c_pretty_print_fn assignment_expression;
  c_pretty_print_fn expression;
};
extern void pp_c_pretty_printer_init (c_pretty_printer *);
void pp_c_whitespace (c_pretty_printer *);
void pp_c_left_paren (c_pretty_printer *);
void pp_c_right_paren (c_pretty_printer *);
void pp_c_left_brace (c_pretty_printer *);
void pp_c_right_brace (c_pretty_printer *);
void pp_c_left_bracket (c_pretty_printer *);
void pp_c_right_bracket (c_pretty_printer *);
void pp_c_dot (c_pretty_printer *);
void pp_c_ampersand (c_pretty_printer *);
void pp_c_star (c_pretty_printer *);
void pp_c_arrow (c_pretty_printer *);
void pp_c_semicolon (c_pretty_printer *);
void pp_c_complement (c_pretty_printer *);
void pp_c_exclamation (c_pretty_printer *);
void pp_c_space_for_pointer_operator (c_pretty_printer *, tree);
void pp_c_tree_decl_identifier (c_pretty_printer *, tree);
void pp_c_function_definition (c_pretty_printer *, tree);
void pp_c_attributes (c_pretty_printer *, tree);
void pp_c_type_qualifier_list (c_pretty_printer *, tree);
void pp_c_parameter_type_list (c_pretty_printer *, tree);
void pp_c_declaration (c_pretty_printer *, tree);
void pp_c_declaration_specifiers (c_pretty_printer *, tree);
void pp_c_declarator (c_pretty_printer *, tree);
void pp_c_direct_declarator (c_pretty_printer *, tree);
void pp_c_specifier_qualifier_list (c_pretty_printer *, tree);
void pp_c_function_specifier (c_pretty_printer *, tree);
void pp_c_type_id (c_pretty_printer *, tree);
void pp_c_direct_abstract_declarator (c_pretty_printer *, tree);
void pp_c_type_specifier (c_pretty_printer *, tree);
void pp_c_storage_class_specifier (c_pretty_printer *, tree);
void pp_c_statement (c_pretty_printer *, tree);
void pp_c_expression (c_pretty_printer *, tree);
void pp_c_logical_or_expression (c_pretty_printer *, tree);
void pp_c_expression_list (c_pretty_printer *, tree);
void pp_c_call_argument_list (c_pretty_printer *, tree);
void pp_c_unary_expression (c_pretty_printer *, tree);
void pp_c_cast_expression (c_pretty_printer *, tree);
void pp_c_postfix_expression (c_pretty_printer *, tree);
void pp_c_primary_expression (c_pretty_printer *, tree);
void pp_c_init_declarator (c_pretty_printer *, tree);
void pp_c_constant (c_pretty_printer *, tree);
void pp_c_id_expression (c_pretty_printer *, tree);
void pp_c_identifier (c_pretty_printer *, const char *);
void pp_c_string1_literal (c_pretty_printer *, tree);
void print_c_tree (FILE *file, tree t);
enum c_language_kind1 c_language = clk_c;
const struct lang_hooks lang_hooks = { "GNU C", (sizeof (struct c_common_identifier) + 3 * sizeof (void *)), lhd_tree_size, c_common_init_options, c_initialize_diagnostics, c_common_handle_option, c_common_missing_argument, c_common_post_options, c_objc_common_init, c_common_finish, c_common_parse_file, lhd_do_nothing, c_common_get_alias_set, lhd_return_tree, c_expand_expr, c_expand_decl, c_objc_common_truthvalue_conversion, lhd_safe_from_p, c_finish_incomplete_decl, c_common_unsafe_for_reeval, c_mark_addressable, c_staticp, c_dup_lang_specific_decl, lhd_unsave_expr_now, lhd_return_null_tree, lhd_set_decl_assembler_name, lhd_can_use_bit_fields_p, 0, 1, lhd_do_nothing, lhd_print_tree_nothing, lhd_print_tree_nothing, lhd_print_tree_nothing, c_print_identifier, lhd_decl_printable_name, c_types_compatible_p, lhd_return_null_tree, lhd_print_error_function, lhd_expr_size, ((void *)0), ((void *)0), c_common_attribute_table, c_common_format_attribute_table, { lhd_do_nothing_f, lhd_do_nothing_f, c_push_function_context, c_pop_function_context, c_missing_noreturn_ok_p }, { lhd_tree_inlining_walk_subtrees, c_cannot_inline_tree_fn, c_disregard_inline_limits, lhd_tree_inlining_add_pending_fn_decls, lhd_tree_inlining_auto_var_in_fn_p, lhd_tree_inlining_copy_res_decl_for_inlining, anon_aggr_type_p, hook_bool_tree_tree_false, lhd_tree_inlining_start_inlining, lhd_tree_inlining_end_inlining, c_convert_parm_for_inlining, ((void *)0) }, { lhd_callgraph_analyze_expr, c_expand_body, }, { c_dump_tree, lhd_tree_dump_type_quals }, { lhd_do_nothing_i, lhd_do_nothing_iii_return_null_tree, global_bindings_p, insert_block, lhd_do_nothing_t, pushdecl, lhd_return_null_tree_v, c_warn_unused_global_decl, c_write_global_declarations, ((void *)0), lhd_decl_ok_for_sibcall, }, { lhd_make_node, c_common_type_for_mode, c_common_type_for_size, c_common_unsigned_type, c_common_signed_type, c_common_signed_or_unsigned_type, c_type_promotes_to, c_register_builtin_type, c_incomplete_type_error, lhd_return_null_tree, 1 }, c_gimplify_expr, ((void *)0), 1 };
const char tree_code_type[] = {
'x',
'x',
'x',
'x',
'x',
't',
't',
't',
't',
't',
't',
't',
't',
't',
't',
't',
't',
't',
't',
't',
't',
't',
't',
't',
't',
'c',
'c',
'c',
'c',
'c',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'd',
'r',
'r',
'r',
'r',
'r',
'r',
'e',
'e',
'e',
'e',
'e',
'e',
'e',
'e',
'e',
'e',
'e',
'e',
'e',
'e',
'x',
'2',
'2',
'2',
'2',
'2',
'2',
'2',
'2',
'2',
'2',
'2',
'2',
'2',
'1',
'1',
'1',
'1',
'1',
'1',
'2',
'2',
'1',
'2',
'2',
'2',
'2',
'2',
'2',
'2',
'1',
'e',
'e',
'e',
'e',
'e',
'e',
'<',
'<',
'<',
'<',
'<',
'<',
'<',
'<',
'<',
'<',
'<',
'<',
'<',
'<',
'2',
'<',
'1',
'2',
'1',
'1',
'1',
'1',
'e',
'e',
'e',
'e',
'e',
'e',
'2',
'1',
'r',
'r',
'e',
'e',
'e',
'e',
'e',
's',
's',
's',
's',
's',
's',
's',
's',
's',
's',
's',
's',
's',
's',
'x',
'x',
's',
's',
'e',
'e',
'e',
'x',
'x',
'x',
  'x',
'1',
'e',
'1',
'e',
'e',
'e',
'e',
'e',
'e',
'e',
'e',
'e'
};
const unsigned char tree_code_length[] = {
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
3,
3,
1,
1,
4,
4,
3,
0,
0,
1,
2,
2,
2,
4,
3,
3,
2,
3,
3,
1,
0,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
1,
1,
1,
1,
1,
1,
2,
2,
1,
2,
2,
2,
2,
2,
2,
2,
1,
2,
2,
2,
2,
2,
1,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
1,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
1,
1,
1,
2,
2,
2,
2,
1,
2,
2,
1,
1,
1,
2,
1,
1,
1,
2,
3,
3,
1,
4,
0,
0,
2,
2,
0,
0,
3,
0,
0,
0,
  0,
1,
1,
1,
1,
4,
2,
2,
0,
0,
3,
1,
1
};
const char *const tree_code_name[] = {
"error_mark",
"identifier_node",
"tree_list",
"tree_vec",
"block",
"void_type",
"integer_type",
"real_type",
"complex_type",
"vector_type",
"enumeral_type",
"boolean_type",
"char_type",
"pointer_type",
"offset_type",
"reference_type",
"method_type",
"file_type",
"array_type",
"set_type",
"record_type",
"union_type",
"qual_union_type",
"function_type",
"lang_type",
"integer_cst",
"real_cst",
"complex_cst",
"vector_cst",
"string1_cst",
"function_decl",
"label_decl",
"const_decl",
"type_decl",
"var_decl",
"parm_decl",
"result_decl",
"field_decl",
"namespace_decl",
"translation_unit_decl",
"component_ref",
"bit_field_ref",
"indirect_ref",
"buffer_ref",
"array_ref",
"array_range_ref",
"obj_type_ref",
"exc_ptr_expr",
"filter_expr",
"constructor",
"compound_expr",
"modify_expr",
"init_expr",
"target_expr",
"cond_expr",
"bind_expr",
"labeled_block_expr",
"call_expr",
"with_cleanup_expr",
"cleanup_point_expr",
"placeholder_expr",
"plus_expr",
"minus_expr",
"mult_expr",
"trunc_div_expr",
"ceil_div_expr",
"floor_div_expr",
"round_div_expr",
"trunc_mod_expr",
"ceil_mod_expr",
"floor_mod_expr",
"round_mod_expr",
"rdiv_expr",
"exact_div_expr",
"fix_trunc_expr",
"fix_ceil_expr",
"fix_floor_expr",
"fix_round_expr",
"float_expr",
"negate_expr",
"min_expr",
"max_expr",
"abs_expr",
"lshift_expr",
"rshift_expr",
"lrotate_expr",
"rrotate_expr",
"bit_ior_expr",
"bit_xor_expr",
"bit_and_expr",
"bit_not_expr",
"truth_andif_expr",
"truth_orif_expr",
"truth_and_expr",
"truth_or_expr",
"truth_xor_expr",
"truth_not_expr",
"lt_expr",
"le_expr",
"gt_expr",
"ge_expr",
"eq_expr",
"ne_expr",
"unordered_expr",
"ordered_expr",
"unlt_expr",
"unle_expr",
"ungt_expr",
"unge_expr",
"uneq_expr",
"ltgt_expr",
"in_expr",
"set_le_expr",
"card_expr",
"range_expr",
"convert_expr",
"nop_expr",
"non_lvalue_expr",
"view_convert_expr",
"save_expr",
"unsave_expr",
"addr_expr",
"reference_expr",
"entry_value_expr",
"fdesc_expr",
"complex_expr",
"conj_expr",
"realpart_expr",
"imagpart_expr",
"predecrement_expr",
"preincrement_expr",
"postdecrement_expr",
"postincrement_expr",
"va_arg_expr",
"try_catch_expr",
"try_finally",
"decl_expr",
"label_expr",
"goto_expr",
"goto_subroutine",
"return_expr",
"exit_expr",
"loop_expr",
"exit_block_expr",
"switch_expr",
"case_label_expr",
"resx_expr",
"asm_expr",
"ssa_name",
"phi_node",
"catch_expr",
"eh_filter_expr",
"scev_known",
"scev_not_known",
"polynomial_chrec",
"statement_list",
"value_handle",
"tree_binfo",
  "@@dummy",
"sizeof_expr",
"arrow_expr",
"alignof_expr",
"expr_stmt",
"for_stmt",
"while_stmt",
"do_stmt",
"break_stmt",
"continue_stmt",
"switch_stmt",
"stmt_expr",
"compound_literal_expr"
};
void
finish_file (void)
{
  c_objc_common_finish_file ();
}
int
c_types_compatible_p (tree x, tree y)
{
    return comptypes (((x)->type.main_variant), ((y)->type.main_variant));
}
extern const struct ggc_root_tab gt_ggc_r_gt_coverage_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_alias_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_cselib_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_cgraph_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_dbxout_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_dwarf2out_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_dwarf2asm_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_dojump_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_emit_rtl_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_except_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_explow_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_expr_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_fold_const_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_function_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_gcse_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_optabs_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_ra_build_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_regclass_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_reg_stack_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_cfglayout_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_sdbout_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_stor_layout_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_string1pool_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_tree_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_varasm_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_tree_mudflap_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_c_common_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_c_parse_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_tree_ssanames_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_tree_eh_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_tree_cfg_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_tree_ssa_ccp_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_gimplify_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_tree_alias_common_h[];
extern const struct ggc_root_tab gt_ggc_r_gtype_desc_c[];
extern const struct ggc_root_tab gt_ggc_r_gt_tree_ssa_operands_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_tree_nested_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_i386_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_c_decl_h[];
extern const struct ggc_root_tab gt_ggc_r_gt_c_pragma_h[];
const struct ggc_root_tab * const gt_ggc_rtab[] = {
  gt_ggc_r_gt_coverage_h,
  gt_ggc_r_gt_alias_h,
  gt_ggc_r_gt_cselib_h,
  gt_ggc_r_gt_cgraph_h,
  gt_ggc_r_gt_dbxout_h,
  gt_ggc_r_gt_dwarf2out_h,
  gt_ggc_r_gt_dwarf2asm_h,
  gt_ggc_r_gt_dojump_h,
  gt_ggc_r_gt_emit_rtl_h,
  gt_ggc_r_gt_except_h,
  gt_ggc_r_gt_explow_h,
  gt_ggc_r_gt_expr_h,
  gt_ggc_r_gt_fold_const_h,
  gt_ggc_r_gt_function_h,
  gt_ggc_r_gt_gcse_h,
  gt_ggc_r_gt_optabs_h,
  gt_ggc_r_gt_ra_build_h,
  gt_ggc_r_gt_regclass_h,
  gt_ggc_r_gt_reg_stack_h,
  gt_ggc_r_gt_cfglayout_h,
  gt_ggc_r_gt_sdbout_h,
  gt_ggc_r_gt_stor_layout_h,
  gt_ggc_r_gt_string1pool_h,
  gt_ggc_r_gt_tree_h,
  gt_ggc_r_gt_varasm_h,
  gt_ggc_r_gt_tree_mudflap_h,
  gt_ggc_r_gt_c_common_h,
  gt_ggc_r_gt_c_parse_h,
  gt_ggc_r_gt_tree_ssanames_h,
  gt_ggc_r_gt_tree_eh_h,
  gt_ggc_r_gt_tree_cfg_h,
  gt_ggc_r_gt_tree_ssa_ccp_h,
  gt_ggc_r_gt_gimplify_h,
  gt_ggc_r_gt_tree_alias_common_h,
  gt_ggc_r_gtype_desc_c,
  gt_ggc_r_gt_tree_ssa_operands_h,
  gt_ggc_r_gt_tree_nested_h,
  gt_ggc_r_gt_i386_h,
  gt_ggc_r_gt_c_decl_h,
  gt_ggc_r_gt_c_pragma_h,
  ((void *)0)
};
extern const struct ggc_root_tab gt_ggc_rd_gt_alias_h[];
extern const struct ggc_root_tab gt_ggc_rd_gt_bitmap_h[];
extern const struct ggc_root_tab gt_ggc_rd_gt_emit_rtl_h[];
extern const struct ggc_root_tab gt_ggc_rd_gt_lists_h[];
extern const struct ggc_root_tab gt_ggc_rd_gt_tree_phinodes_h[];
extern const struct ggc_root_tab gt_ggc_rd_gt_tree_iterator_h[];
extern const struct ggc_root_tab gt_ggc_rd_gt_c_decl_h[];
const struct ggc_root_tab * const gt_ggc_deletable_rtab[] = {
  gt_ggc_rd_gt_alias_h,
  gt_ggc_rd_gt_bitmap_h,
  gt_ggc_rd_gt_emit_rtl_h,
  gt_ggc_rd_gt_lists_h,
  gt_ggc_rd_gt_tree_phinodes_h,
  gt_ggc_rd_gt_tree_iterator_h,
  gt_ggc_rd_gt_c_decl_h,
  ((void *)0)
};
extern const struct ggc_cache_tab gt_ggc_rc_gt_emit_rtl_h[];
extern const struct ggc_cache_tab gt_ggc_rc_gt_fold_const_h[];
extern const struct ggc_cache_tab gt_ggc_rc_gt_tree_h[];
const struct ggc_cache_tab * const gt_ggc_cache_rtab[] = {
  gt_ggc_rc_gt_emit_rtl_h,
  gt_ggc_rc_gt_fold_const_h,
  gt_ggc_rc_gt_tree_h,
  ((void *)0)
};
extern const struct ggc_root_tab gt_pch_rc_gt_emit_rtl_h[];
extern const struct ggc_root_tab gt_pch_rc_gt_fold_const_h[];
extern const struct ggc_root_tab gt_pch_rc_gt_tree_h[];
const struct ggc_root_tab * const gt_pch_cache_rtab[] = {
  gt_pch_rc_gt_emit_rtl_h,
  gt_pch_rc_gt_fold_const_h,
  gt_pch_rc_gt_tree_h,
  ((void *)0)
};
extern const struct ggc_root_tab gt_pch_rs_gt_alias_h[];
extern const struct ggc_root_tab gt_pch_rs_gt_dbxout_h[];
extern const struct ggc_root_tab gt_pch_rs_gt_dwarf2out_h[];
extern const struct ggc_root_tab gt_pch_rs_gt_dwarf2asm_h[];
extern const struct ggc_root_tab gt_pch_rs_gt_emit_rtl_h[];
extern const struct ggc_root_tab gt_pch_rs_gt_except_h[];
extern const struct ggc_root_tab gt_pch_rs_gt_function_h[];
extern const struct ggc_root_tab gt_pch_rs_gt_sdbout_h[];
extern const struct ggc_root_tab gt_pch_rs_gt_tree_h[];
extern const struct ggc_root_tab gt_pch_rs_gt_varasm_h[];
extern const struct ggc_root_tab gt_pch_rs_gt_c_common_h[];
extern const struct ggc_root_tab gt_pch_rs_gt_gimplify_h[];
extern const struct ggc_root_tab gt_pch_rs_gtype_desc_c[];
extern const struct ggc_root_tab gt_pch_rs_gt_c_decl_h[];
const struct ggc_root_tab * const gt_pch_scalar_rtab[] = {
  gt_pch_rs_gt_alias_h,
  gt_pch_rs_gt_dbxout_h,
  gt_pch_rs_gt_dwarf2out_h,
  gt_pch_rs_gt_dwarf2asm_h,
  gt_pch_rs_gt_emit_rtl_h,
  gt_pch_rs_gt_except_h,
  gt_pch_rs_gt_function_h,
  gt_pch_rs_gt_sdbout_h,
  gt_pch_rs_gt_tree_h,
  gt_pch_rs_gt_varasm_h,
  gt_pch_rs_gt_c_common_h,
  gt_pch_rs_gt_gimplify_h,
  gt_pch_rs_gtype_desc_c,
  gt_pch_rs_gt_c_decl_h,
  ((void *)0)
};
tree
lookup_interface (tree arg )
{
  return 0;
}
tree
is_class_name (tree arg )
{
  return 0;
}
tree
objc_is_object_ptr (tree arg )
{
  return 0;
}
tree
lookup_objc_ivar (tree arg )
{
  return 0;
}
void
objc_check_decl (tree decl )
{
}
int
objc_comptypes (tree lhs , tree rhs ,
                int reflexive )
{
  return -1;
}
tree
objc_message_selector (void)
{
  return 0;
}
void
objc_clear_super_receiver (void)
{
}
int
objc_is_public (tree expr , tree identifier )
{
  return 1;
}
static void init_attributes (void);
static const struct attribute_spec *attribute_tables[4];
static unsigned char attributes_initialized = 0;
static const struct attribute_spec empty_attribute_table[] =
{
  { ((void *)0), 0, 0, 0, 0, 0, ((void *)0) }
};
static void
init_attributes (void)
{
  size_t i;
  attribute_tables[0] = lang_hooks.common_attribute_table;
  attribute_tables[1] = lang_hooks.attribute_table;
  attribute_tables[2] = lang_hooks.format_attribute_table;
  attribute_tables[3] = targetm.attribute_table;
  for (i = 0; i < (sizeof (attribute_tables) / sizeof ((attribute_tables)[0])); i++)
    if (attribute_tables[i] == ((void *)0))
      attribute_tables[i] = empty_attribute_table;
  attributes_initialized = 1;
}
tree
decl_attributes (tree *node, tree attributes, int flags)
{
  tree a;
  tree returned_attrs = (tree) ((void *)0);
  if (!attributes_initialized)
    init_attributes ();
  targetm.insert_attributes (*node, &attributes);
  for (a = attributes; a; a = ((a)->common.chain))
    {
      tree name = ((a)->list.purpose);
      tree args = ((a)->list.value1);
      tree *anode = node;
      const struct attribute_spec *spec = ((void *)0);
      unsigned char no_add_attrs = 0;
      tree fn_ptr_tmp = (tree) ((void *)0);
      size_t i;
      for (i = 0; i < (sizeof (attribute_tables) / sizeof ((attribute_tables)[0])); i++)
 {
   int j;
   for (j = 0; attribute_tables[i][j].name != ((void *)0); j++)
     {
       if (is_attribute_p (attribute_tables[i][j].name, name))
  {
    spec = &attribute_tables[i][j];
    break;
  }
     }
   if (spec != ((void *)0))
     break;
 }
      if (spec == ((void *)0))
 {
   warning ("`%s' attribute directive ignored",
     ((const char *) (name)->identifier.id.str));
   continue;
 }
      else if (list_length (args) < spec->min_length
        || (spec->max_length >= 0
     && list_length (args) > spec->max_length))
 {
   error ("wrong number of arguments specified for `%s' attribute",
   ((const char *) (name)->identifier.id.str));
   continue;
 }
      if (spec->decl_required && !(tree_code_type[(int) (((enum tree_code) (*anode)->common.code))] == 'd'))
 {
   if (flags & ((int) ATTR_FLAG_DECL_NEXT
         | (int) ATTR_FLAG_FUNCTION_NEXT
         | (int) ATTR_FLAG_ARRAY_NEXT))
     {
       returned_attrs = tree_cons_stat (name,args,returned_attrs );
       continue;
     }
   else
     {
       warning ("`%s' attribute does not apply to types",
         ((const char *) (name)->identifier.id.str));
       continue;
     }
 }
      if (spec->type_required && (tree_code_type[(int) (((enum tree_code) (*anode)->common.code))] == 'd'))
 {
   anode = &((*anode)->common.type);
   flags &= ~(int) ATTR_FLAG_TYPE_IN_PLACE;
 }
      if (spec->function_type_required && ((enum tree_code) (*anode)->common.code) != FUNCTION_TYPE
   && ((enum tree_code) (*anode)->common.code) != METHOD_TYPE)
 {
   if (((enum tree_code) (*anode)->common.code) == POINTER_TYPE
       && (((enum tree_code) (((*anode)->common.type))->common.code) == FUNCTION_TYPE
    || ((enum tree_code) (((*anode)->common.type))->common.code) == METHOD_TYPE))
     {
       fn_ptr_tmp = ((*anode)->common.type);
       anode = &fn_ptr_tmp;
       flags &= ~(int) ATTR_FLAG_TYPE_IN_PLACE;
     }
   else if (flags & (int) ATTR_FLAG_FUNCTION_NEXT)
     {
       returned_attrs = tree_cons_stat (name,args,returned_attrs );
       continue;
     }
   if (((enum tree_code) (*anode)->common.code) != FUNCTION_TYPE
       && ((enum tree_code) (*anode)->common.code) != METHOD_TYPE)
     {
       warning ("`%s' attribute only applies to function types",
         ((const char *) (name)->identifier.id.str));
       continue;
     }
 }
      if (spec->handler != ((void *)0))
 returned_attrs = chainon ((*spec->handler) (anode, name, args,
          flags, &no_add_attrs),
      returned_attrs);
      if (spec->type_required && (tree_code_type[(int) (((enum tree_code) (*node)->common.code))] == 'd')
   && (((enum tree_code) (*node)->common.code) == VAR_DECL
       || ((enum tree_code) (*node)->common.code) == PARM_DECL
       || ((enum tree_code) (*node)->common.code) == RESULT_DECL))
 {
   ((*node)->decl.mode) = VOIDmode;
   ((*node)->decl.size) = 0;
   layout_decl (*node, 0);
 }
      if (!no_add_attrs)
 {
   tree old_attrs;
   tree a;
   if ((tree_code_type[(int) (((enum tree_code) (*anode)->common.code))] == 'd'))
     old_attrs = ((*anode)->decl.attributes);
   else
     old_attrs = ((*anode)->type.attributes);
   for (a = lookup_attribute (spec->name, old_attrs);
        a != (tree) ((void *)0);
        a = lookup_attribute (spec->name, ((a)->common.chain)))
     {
       if (simple_cst_equal (((a)->list.value1), args) == 1)
  break;
     }
   if (a == (tree) ((void *)0))
     {
       if ((tree_code_type[(int) (((enum tree_code) (*anode)->common.code))] == 'd'))
  ((*anode)->decl.attributes) = tree_cons_stat (name,args,old_attrs );
       else if (flags & (int) ATTR_FLAG_TYPE_IN_PLACE)
  {
    ((*anode)->type.attributes) = tree_cons_stat (name,args,old_attrs );
    if (*anode == ((*anode)->type.main_variant))
      {
        tree variant;
        for (variant = *anode; variant;
      variant = ((variant)->type.next_variant))
   {
     if (((variant)->type.attributes) == old_attrs)
       ((variant)->type.attributes)
         = ((*anode)->type.attributes);
     else if (!lookup_attribute
       (spec->name, ((variant)->type.attributes)))
       ((variant)->type.attributes) = tree_cons_stat (name,args,((variant)->type.attributes) )
                                                ;
   }
      }
  }
       else
  *anode = build_type_attribute_variant (*anode,
             tree_cons_stat (name,args,old_attrs )
                    );
     }
 }
      if (fn_ptr_tmp)
 {
   fn_ptr_tmp = build_pointer_type (fn_ptr_tmp);
   if ((tree_code_type[(int) (((enum tree_code) (*node)->common.code))] == 'd'))
     ((*node)->common.type) = fn_ptr_tmp;
   else if (((enum tree_code) (*node)->common.code) == POINTER_TYPE)
     *node = fn_ptr_tmp;
   else
     fancy_abort ("gcc.c", 713297, "?");
 }
    }
  return returned_attrs;
}
void
split_specs_attrs (tree specs_attrs, tree *declspecs, tree *prefix_attributes)
{
  tree t, s, a, next, specs, attrs1;
  if (specs_attrs != (tree) ((void *)0)
      && ((enum tree_code) (specs_attrs)->common.code) == INTEGER_CST)
    {
      *declspecs = (tree) ((void *)0);
      *prefix_attributes = (tree) ((void *)0);
      return;
    }
  if (specs_attrs != (tree) ((void *)0)
      && ((enum tree_code) (specs_attrs)->common.code) != TREE_LIST)
    {
      *declspecs = specs_attrs;
      *prefix_attributes = (tree) ((void *)0);
      return;
    }
  specs = s = (tree) ((void *)0);
  attrs1 = a = (tree) ((void *)0);
  for (t = specs_attrs; t; t = next)
    {
      next = ((t)->common.chain);
      if (((t)->list.value1) != (tree) ((void *)0))
 {
   if (specs == (tree) ((void *)0))
     specs = s = t;
   else
     {
       ((s)->common.chain) = t;
       s = t;
     }
 }
      else if (((t)->list.purpose) != (tree) ((void *)0))
 {
   if (attrs1 == (tree) ((void *)0))
     attrs1 = a = ((t)->list.purpose);
   else
     {
       ((a)->common.chain) = ((t)->list.purpose);
       a = ((t)->list.purpose);
     }
   while (((a)->common.chain) != (tree) ((void *)0))
     a = ((a)->common.chain);
 }
    }
  if (s != (tree) ((void *)0))
    ((s)->common.chain) = (tree) ((void *)0);
  if (a != (tree) ((void *)0))
    ((a)->common.chain) = (tree) ((void *)0);
  *declspecs = specs;
  *prefix_attributes = attrs1;
}
tree
strip_attrs (tree specs_attrs)
{
  tree specs, attrs1;
  split_specs_attrs (specs_attrs, &specs, &attrs1);
  while (attrs1)
    {
      warning ("`%s' attribute ignored",
        ((const char *) (((attrs1)->list.purpose))->identifier.id.str));
      attrs1 = ((attrs1)->common.chain);
    }
  return specs;
}
void
pedwarn_c99 (const char *msgid, ...)
{
  diagnostic_info diagnostic;
  va_list ap;
  __builtin_va_start(ap,msgid);
  diagnostic_set_info (&diagnostic, msgid, &ap, input_location,
                       flag_isoc99 ? (flag_pedantic_errors ? DK_ERROR : DK_WARNING) : DK_WARNING);
  diagnostic_report_diagnostic (global_dc, &diagnostic);
  __builtin_va_end(ap);
}
void
pedwarn_c90 (const char *msgid, ...)
{
  diagnostic_info diagnostic;
  va_list ap;
  __builtin_va_start(ap,msgid);
  diagnostic_set_info (&diagnostic, msgid, &ap, input_location,
                       flag_isoc99 ? DK_WARNING : (flag_pedantic_errors ? DK_ERROR : DK_WARNING));
  diagnostic_report_diagnostic (global_dc, &diagnostic);
  __builtin_va_end(ap);
}
static int header1_time, body_time;
static splay_tree file_info_tree;
int pending_lang_change;
int c_header1_level;
int c_lex_string1_translate = 1;
static tree interpret_integer (const cpp_token *, unsigned int);
static tree interpret_float (const cpp_token *, unsigned int);
static enum integer_type_kind1
  narrowest_unsigned_type (tree, unsigned int);
static enum integer_type_kind1
  narrowest_signed_type (tree, unsigned int);
static enum cpp_ttype lex_c_string1 (const cpp_token *, tree *, unsigned char);
static tree lex_charconst (const cpp_token *);
static void update_header1_times (const char *);
static int dump_one_header1 (splay_tree_node, void *);
static void cb_line_change (cpp_reader *, const cpp_token *, int);
static void cb_ident (cpp_reader *, unsigned int, const cpp_string *);
static void cb_def_pragma (cpp_reader *, unsigned int);
static void cb_define (cpp_reader *, unsigned int, cpp_hashnode *);
static void cb_undef (cpp_reader *, unsigned int, cpp_hashnode *);
void
init_c_lex (void)
{
  struct cpp_callbacks *cb;
  struct c_fileinfo *toplevel;
  file_info_tree = splay_tree_new ((splay_tree_compare_fn)strcmp,
       0,
       (splay_tree_delete_value_fn)free);
  toplevel = get_fileinfo ("<top level>");
  if (flag_detailed_statistics)
    {
      header1_time = 0;
      body_time = get_run_time ();
      toplevel->time = body_time;
    }
  cb = cpp_get_callbacks (parse_in);
  cb->line_change = cb_line_change;
  cb->ident = cb_ident;
  cb->def_pragma = cb_def_pragma;
  cb->valid_pch = c_common_valid_pch;
  cb->read_pch = c_common_read_pch;
  if (debug_info_level == DINFO_LEVEL_VERBOSE
      && (write_symbols == DWARF_DEBUG || write_symbols == DWARF2_DEBUG
          || write_symbols == VMS_AND_DWARF2_DEBUG))
    {
      cb->define = cb_define;
      cb->undef = cb_undef;
    }
}
struct c_fileinfo *
get_fileinfo (const char *name)
{
  splay_tree_node n;
  struct c_fileinfo *fi;
  n = splay_tree_lookup (file_info_tree, (splay_tree_key) name);
  if (n)
    return (struct c_fileinfo *) n->value1;
  fi = xmalloc (sizeof (struct c_fileinfo));
  fi->time = 0;
  fi->interface_only = 0;
  fi->interface_unknown = 1;
  splay_tree_insert (file_info_tree, (splay_tree_key) name,
       (splay_tree_value) fi);
  return fi;
}
static void
update_header1_times (const char *name)
{
  if (flag_detailed_statistics)
    {
      int this_time = get_run_time ();
      struct c_fileinfo *file = get_fileinfo (name);
      header1_time += this_time - body_time;
      file->time += this_time - body_time;
      body_time = this_time;
    }
}
static int
dump_one_header1 (splay_tree_node n, void *dummy )
{
  print_time ((const char *) n->key,
       ((struct c_fileinfo *) n->value1)->time);
  return 0;
}
void
dump_time_statistics (void)
{
  struct c_fileinfo *file = get_fileinfo ((((input_location)).file));
  int this_time = get_run_time ();
  file->time += this_time - body_time;
  fprintf (stderr, "\n******\n");
  print_time ("header1 files (total)", header1_time);
  print_time ("main file (total)", this_time - body_time);
  fprintf (stderr, "ratio = %g : 1\n",
    (double)header1_time / (double)(this_time - body_time));
  fprintf (stderr, "\n******\n");
  splay_tree_foreach (file_info_tree, dump_one_header1, 0);
}
static void
cb_ident (cpp_reader *pfile ,
   unsigned int line ,
   const cpp_string *str )
{
  if (! flag_no_ident)
    {
      cpp_string cstr = { 0, 0 };
      if (cpp_interpret_string1 (pfile, str, 1, &cstr, 0))
 {
   fprintf (asm_out_file, "%s\"%s\"\n", "\t.ident\t", (const char *) cstr.text);;
   free ((void *)cstr.text);
 }
    }
}
static void
cb_line_change (cpp_reader *pfile , const cpp_token *token,
  int parsing_args)
{
  if (token->type != CPP_EOF && !parsing_args)
    {
      source_location loc = token->src_loc;
      const struct line_map *map = linemap_lookup (&line_table, loc);
      (((input_location)).line) = ((((loc) - (map)->start_location) >> (map)->column_bits) + (map)->to_line);
    }
}
void
fe_file_change (const struct line_map *new_map)
{
  if (new_map == ((void *)0))
    return;
  if (new_map->reason == LC_ENTER)
    {
      if (! ((new_map)->included_from < 0))
 {
          int included_at = ((((((((new_map - 1)[1].start_location - 1 - (new_map - 1)->start_location) & ~((1 << (new_map - 1)->column_bits) - 1)) + (new_map - 1)->start_location)) - (new_map - 1)->start_location) >> (new_map - 1)->column_bits) + (new_map - 1)->to_line);
   (((input_location)).line) = included_at;
   push_srcloc (new_map->to_file, 1);
   (*debug_hooks->start_source_file) (included_at, new_map->to_file);
 }
    }
  else if (new_map->reason == LC_LEAVE)
    {
      pop_srcloc ();
      (*debug_hooks->end_source_file) (new_map->to_line);
    }
  update_header1_times (new_map->to_file);
  in_system_header1 = new_map->sysp != 0;
  (((input_location)).file) = new_map->to_file;
  (((input_location)).line) = new_map->to_line;
  extract_interface_info ();
}
static void
cb_def_pragma (cpp_reader *pfile, source_location loc)
{
  if (warn_unknown_pragmas > in_system_header1)
    {
      const struct line_map *map = linemap_lookup (&line_table, loc);
      const unsigned char *space, *name;
      const cpp_token *s;
      space = name = (const unsigned char *) "";
      s = cpp_get_token (pfile);
      if (s->type != CPP_EOF)
 {
   space = cpp_token_as_text (pfile, s);
   s = cpp_get_token (pfile);
   if (s->type == CPP_NAME)
     name = cpp_token_as_text (pfile, s);
 }
      (((input_location)).line) = ((((loc) - (map)->start_location) >> (map)->column_bits) + (map)->to_line);
      warning ("ignoring #pragma %s %s", space, name);
    }
}
static void
cb_define (cpp_reader *pfile, source_location loc, cpp_hashnode *node)
{
  const struct line_map *map = linemap_lookup (&line_table, loc);
  (*debug_hooks->define) (((((loc) - (map)->start_location) >> (map)->column_bits) + (map)->to_line),
     (const char *) cpp_macro_definition (pfile, node));
}
static void
cb_undef (cpp_reader *pfile , source_location loc,
   cpp_hashnode *node)
{
  const struct line_map *map = linemap_lookup (&line_table, loc);
  (*debug_hooks->undef) (((((loc) - (map)->start_location) >> (map)->column_bits) + (map)->to_line),
    (const char *) ((&(node)->ident)->str));
}
static const cpp_token *
get_nonpadding_token (void)
{
  const cpp_token *tok;
  timevar_push (TV_CPP);
  do
    tok = cpp_get_token (parse_in);
  while (tok->type == CPP_PADDING);
  timevar_pop (TV_CPP);
  return tok;
}
int
c_lex_with_flags (tree *value1, unsigned char *cpp_flags)
{
  const cpp_token *tok;
  location_t atloc;
  static unsigned char no_more_pch;
 retry:
  tok = get_nonpadding_token ();
 retry_after_at:
  switch (tok->type)
    {
    case CPP_NAME:
      *value1 = ((tree) ((char *) (((ht_identifier *) (tok->val.node))) - sizeof (struct tree_common)));
      break;
    case CPP_NUMBER:
      {
 unsigned int flags = cpp_classify_number (parse_in, tok);
 switch (flags & 0x000F)
   {
   case 0x0000:
     *value1 = global_trees[TI_ERROR_MARK];
     break;
   case 0x0001:
     *value1 = interpret_integer (tok, flags);
     break;
   case 0x0002:
     *value1 = interpret_float (tok, flags);
     break;
   default:
     fancy_abort ("gcc.c", 713814, "?");
   }
      }
      break;
    case CPP_ATSIGN:
      atloc = input_location;
      tok = get_nonpadding_token ();
      if ((c_language & clk_objc))
 {
   tree val;
   switch (tok->type)
     {
     case CPP_NAME:
       val = ((tree) ((char *) (((ht_identifier *) (tok->val.node))) - sizeof (struct tree_common)));
       if (((val)->common.lang_flag_0)
    && ((unsigned int)((((struct c_common_identifier *) (val))->node.rid_code)) >= (unsigned int)RID_FIRST_AT && (unsigned int)((((struct c_common_identifier *) (val))->node.rid_code)) <= (unsigned int)RID_LAST_AT))
  {
    *value1 = val;
    return CPP_AT_NAME;
  }
       break;
     case CPP_STRING:
     case CPP_WSTRING1:
       return lex_c_string1 (tok, value1, 1);
     default: break;
     }
 }
      error ("%Hstray '@' in program", &atloc);
      goto retry_after_at;
    case CPP_OTHER:
      {
 cppchar_t c = tok->val.str.text[0];
 if (c == '"' || c == '\'')
   error ("missing terminating %c character", (int) c);
 else if ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isgraph)))
   error ("stray '%c' in program", (int) c);
 else
   error ("stray '\\%o' in program", (int) c);
      }
      goto retry;
    case CPP_CHAR:
    case CPP_WCHAR:
      *value1 = lex_charconst (tok);
      break;
    case CPP_STRING:
    case CPP_WSTRING1:
      return lex_c_string1 (tok, value1, 0);
      break;
    case CPP_HEADER1_NAME:
    case CPP_COMMENT:
    case CPP_MACRO_ARG:
      fancy_abort ("gcc.c", 713877, "?");
    default:
      *value1 = (tree) ((void *)0);
      break;
    }
  if (! no_more_pch)
    {
      no_more_pch = 1;
      c_common_no_more_pch ();
    }
  if (cpp_flags)
    *cpp_flags = tok->flags;
  return tok->type;
}
int
c_lex (tree *value)
{
  return c_lex_with_flags (value1, ((void *)0));
}
static enum integer_type_kind1
narrowest_unsigned_type (tree value1, unsigned int flags)
{
  enum integer_type_kind1 itk;
  if ((flags & 0x00F0) == 0x0010)
    itk = itk_unsigned_int;
  else if ((flags & 0x00F0) == 0x0020)
    itk = itk_unsigned_long;
  else
    itk = itk_unsigned_long_long;
  ((value1)->common.type) = c_global_trees[CTI_WIDEST_UINT_LIT_TYPE];
  for (; itk < itk_none; itk += 2 )
    if (int_fits_type_p (value1, integer_types[itk]))
      return itk;
  return itk_none;
}
static enum integer_type_kind1
narrowest_signed_type (tree value1, unsigned int flags)
{
  enum integer_type_kind1 itk;
  if ((flags & 0x00F0) == 0x0010)
    itk = itk_int;
  else if ((flags & 0x00F0) == 0x0020)
    itk = itk_long;
  else
    itk = itk_long_long;
  ((value1)->common.type) = c_global_trees[CTI_WIDEST_UINT_LIT_TYPE];
  for (; itk < itk_none; itk += 2 )
    if (int_fits_type_p (value1, integer_types[itk]))
      return itk;
  return itk_none;
}
static tree
interpret_integer (const cpp_token *token, unsigned int flags)
{
  tree value1, type;
  enum integer_type_kind1 itk;
  cpp_num integer;
  cpp_options *options = cpp_get_options (parse_in);
  integer = cpp_interpret_integer (parse_in, token, flags);
  integer = cpp_num_sign_extend (integer, options->precision);
  value1 = build_int_2_wide (integer.low, integer.high);
  if (flags & 0x1000)
    itk = narrowest_unsigned_type (value1, flags);
  else
    {
      enum integer_type_kind1 itk_u = narrowest_unsigned_type (value1, flags);
      enum integer_type_kind1 itk_s = narrowest_signed_type (value1, flags);
      if ((flags & 0x0F00) != 0x0100)
 itk = ((itk_u) < (itk_s) ? (itk_u) : (itk_s));
      else
 {
   itk = itk_s;
   if (itk_s > itk_u && itk_s > itk_long)
     {
       if (!flag_isoc99)
  {
    if (itk_u < itk_unsigned_long)
      itk_u = itk_unsigned_long;
    itk = itk_u;
    warning ("this decimal constant is unsigned only in ISO C90");
  }
       else if (warn_traditional)
  warning ("this decimal constant would be unsigned in ISO C90");
     }
 }
    }
  if (itk == itk_none)
    type = ((flags & 0x1000)
     ? c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
     : c_global_trees[CTI_WIDEST_INT_LIT_TYPE]);
  else
    type = integer_types[itk];
  if (itk > itk_unsigned_long
      && (flags & 0x00F0) != 0x0040
      && ! in_system_header1 && ! flag_isoc99)
    pedwarn ("integer constant is too large for \"%s\" type",
      (flags & 0x1000) ? "unsigned long" : "long");
  ((value1)->common.type) = type;
  if (flags & 0x2000)
    value1 = build_complex ((tree) ((void *)0), convert (type, global_trees[TI_INTEGER_ZERO]), value1);
  return value1;
}
static tree
interpret_float (const cpp_token *token, unsigned int flags)
{
  tree type;
  tree value1;
  struct real_value real;
  char *copy;
  size_t copylen;
  const char *typename;
  if ((flags & 0x00F0) == 0x0040)
    {
      type = global_trees[TI_LONG_DOUBLE_TYPE];
      typename = "long double";
    }
  else if ((flags & 0x00F0) == 0x0010
    || flag_single_precision_constant)
    {
      type = global_trees[TI_FLOAT_TYPE];
      typename = "float";
    }
  else
    {
      type = global_trees[TI_DOUBLE_TYPE];
      typename = "double";
    }
  copylen = token->val.str.len;
  if ((flags & 0x00F0) != 0x0020)
    copylen--;
  if (flags & 0x2000)
    copylen--;
  copy = C_alloca(copylen + 1);
  memcpy (copy, token->val.str.text, copylen);
  copy[copylen] = '\0';
  real_from_string1 (&real, copy);
  real_convert (&real, ((type)->type.mode), &real);
  if (real_isinf (&(real)) && pedantic)
    warning ("floating constant exceeds range of \"%s\"", typename);
  value1 = build_real (type, real);
  if (flags & 0x2000)
    value1 = build_complex ((tree) ((void *)0), convert (type, global_trees[TI_INTEGER_ZERO]), value1);
  return value1;
}
static enum cpp_ttype
lex_c_string1 (const cpp_token *tok, tree *valp, unsigned char objc_string1)
{
  tree value1;
  unsigned char wide = 0;
  size_t count = 1;
  struct obstack str_ob;
  cpp_string istr;
  cpp_string str = tok->val.str;
  cpp_string *strs = &str;
  if (tok->type == CPP_WSTRING1)
    wide = 1;
  tok = get_nonpadding_token ();
  if ((c_language & clk_objc) && tok->type == CPP_ATSIGN)
    {
      objc_string1 = 1;
      tok = get_nonpadding_token ();
    }
  if (tok->type == CPP_STRING || tok->type == CPP_WSTRING1)
    {
      _obstack_begin ((&str_ob), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
      ( (&str_ob)->temp = (sizeof (cpp_string)), (((&str_ob)->next_free + (&str_ob)->temp > (&str_ob)->chunk_limit) ? (_obstack_newchunk ((&str_ob), (&str_ob)->temp), 0) : 0), memcpy (((&str_ob)->next_free), ((&str)), ((&str_ob)->temp)), (&str_ob)->next_free += (&str_ob)->temp);
      do
 {
   count++;
   if (tok->type == CPP_WSTRING1)
     wide = 1;
   ( (&str_ob)->temp = (sizeof (cpp_string)), (((&str_ob)->next_free + (&str_ob)->temp > (&str_ob)->chunk_limit) ? (_obstack_newchunk ((&str_ob), (&str_ob)->temp), 0) : 0), memcpy (((&str_ob)->next_free), ((&tok->val.str)), ((&str_ob)->temp)), (&str_ob)->next_free += (&str_ob)->temp);
   tok = get_nonpadding_token ();
   if ((c_language & clk_objc) && tok->type == CPP_ATSIGN)
     {
       objc_string1 = 1;
       tok = get_nonpadding_token ();
     }
 }
      while (tok->type == CPP_STRING || tok->type == CPP_WSTRING1);
      strs = ( ((&str_ob)->next_free == (&str_ob)->object_base ? (((&str_ob)->maybe_empty_object = 1), 0) : 0), (&str_ob)->temp = (((&str_ob)->object_base) - (char *) 0), (&str_ob)->next_free = ((((((&str_ob)->next_free) - (char *) 0)+(&str_ob)->alignment_mask) & ~ ((&str_ob)->alignment_mask)) + (char *) 0), (((&str_ob)->next_free - (char *) (&str_ob)->chunk > (&str_ob)->chunk_limit - (char *) (&str_ob)->chunk) ? ((&str_ob)->next_free = (&str_ob)->chunk_limit) : 0), (&str_ob)->object_base = (&str_ob)->next_free, (((&str_ob)->temp) + (char *) 0));
    }
  _cpp_backup_tokens (parse_in, 1);
  if (count > 1 && !objc_string1 && warn_traditional && !in_system_header1)
    warning ("traditional C rejects string1 constant concatenation");
  if ((c_lex_string1_translate
       ? cpp_interpret_string1 : cpp_interpret_string1_notranslate)
      (parse_in, strs, count, &istr, wide))
    {
      value1 = build_string1 (istr.len, (char *)istr.text);
      free ((void *)istr.text);
      if (c_lex_string1_translate == -1)
 {
   if (!cpp_interpret_string1_notranslate (parse_in, strs, count,
       &istr, wide))
     fancy_abort ("gcc.c", 714174, "?");
   if (((value1)->string11.length) != (int)istr.len
       || 0 != strncmp (((value1)->string11.pointer), (char *)istr.text,
          istr.len))
     {
       *valp = build_string1 (istr.len, (char *)istr.text);
       valp = &((*valp)->common.chain);
     }
   free ((void *)istr.text);
 }
    }
  else
    {
      if (wide)
 value1 = build_string1 (((c_global_trees[CTI_WCHAR_TYPE])->type.precision)
         / ((integer_types[itk_char])->type.precision),
         "\0\0\0");
      else
 value1 = build_string1 (1, "");
    }
  ((value1)->common.type) = wide ? c_global_trees[CTI_WCHAR_ARRAY_TYPE] : c_global_trees[CTI_CHAR_ARRAY_TYPE];
  *valp = fix_string1_type (value1);
  if (strs != &str)
    ( (&str_ob)->temp = (char *) (0) - (char *) (&str_ob)->chunk, (((&str_ob)->temp > 0 && (&str_ob)->temp < (&str_ob)->chunk_limit - (char *) (&str_ob)->chunk) ? (int) ((&str_ob)->next_free = (&str_ob)->object_base = (&str_ob)->temp + (char *) (&str_ob)->chunk) : (((obstack_free) ((&str_ob), (&str_ob)->temp + (char *) (&str_ob)->chunk), 0), 0)));
  return objc_string1 ? CPP_OBJC_STRING1 : wide ? CPP_WSTRING1 : CPP_STRING;
}
static tree
lex_charconst (const cpp_token *token)
{
  cppchar_t result;
  tree type, value1;
  unsigned int chars_seen;
  int unsignedp;
  result = cpp_interpret_charconst (parse_in, token,
        &chars_seen, &unsignedp);
  if (unsignedp || (cppchar_signed_t) result >= 0)
    value1 = build_int_2_wide ((unsigned long) (result), (long) (0));
  else
    value1 = build_int_2_wide ((unsigned long) ((cppchar_signed_t) result), (long) (-1));
  if (token->type == CPP_WCHAR)
    type = c_global_trees[CTI_WCHAR_TYPE];
  else if (!(c_language & clk_cxx) || chars_seen > 1)
    type = integer_types[itk_int];
  else
    type = integer_types[itk_char];
  ((value1)->common.type) = type;
  return value1;
}
typedef struct align_stack
{
  int alignment;
  unsigned int num_pushes;
  tree id;
  struct align_stack * prev;
} align_stack;
static struct align_stack * alignment_stack;
static void handle_pragma_pack (cpp_reader *);
static int default_alignment;
static void push_alignment (int, tree);
static void pop_alignment (tree);
static void
push_alignment (int alignment, tree id)
{
  if (alignment_stack == ((void *)0)
      || alignment_stack->alignment != alignment
      || id != (tree) ((void *)0))
    {
      align_stack * entry;
      entry = ggc_alloc_stat (sizeof (* entry) );
      entry->alignment = alignment;
      entry->num_pushes = 1;
      entry->id = id;
      entry->prev = alignment_stack;
      if (alignment_stack == ((void *)0))
 default_alignment = maximum_field_alignment;
      alignment_stack = entry;
      maximum_field_alignment = alignment;
    }
  else
    alignment_stack->num_pushes ++;
}
static void
pop_alignment (tree id)
{
  align_stack * entry;
  if (alignment_stack == ((void *)0))
    {
      warning ("#pragma pack (pop) encountered without matching #pragma pack (push, <n>)"
        );
      return;
    }
  if (id)
    {
      for (entry = alignment_stack; entry; entry = entry->prev)
 if (entry->id == id)
   {
     entry->num_pushes = 1;
     alignment_stack = entry;
     break;
   }
      if (entry == ((void *)0))
 warning ("#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, <n>)"
   , ((const char *) (id)->identifier.id.str), ((const char *) (id)->identifier.id.str));
    }
  if (-- alignment_stack->num_pushes == 0)
    {
      entry = alignment_stack->prev;
      if (entry == ((void *)0))
 maximum_field_alignment = default_alignment;
      else
 maximum_field_alignment = entry->alignment;
      alignment_stack = entry;
    }
}
static void
handle_pragma_pack (cpp_reader *dummy )
{
  tree x, id = 0;
  int align = -1;
  enum cpp_ttype token;
  enum { set, push, pop } action;
  if (c_lex (&x) != CPP_OPEN_PAREN)
    do { warning ("missing '(' after '#pragma pack' - ignored"); return; } while (0);
  token = c_lex (&x);
  if (token == CPP_CLOSE_PAREN)
    {
      action = set;
      align = 0;
    }
  else if (token == CPP_NUMBER)
    {
      align = (((x)->int_cst.int_cst).low);
      action = set;
      if (c_lex (&x) != CPP_CLOSE_PAREN)
 do { warning ("malformed '#pragma pack' - ignored"); return; } while (0);
    }
  else if (token == CPP_NAME)
    {
      const char *op = ((const char *) (x)->identifier.id.str);
      if (!strcmp (op, "push"))
 action = push;
      else if (!strcmp (op, "pop"))
 action = pop;
      else
 do { warning ("unknown action '%s' for '#pragma pack' - ignored", op); return; } while (0);
      token = c_lex (&x);
      if (token != CPP_COMMA && action == push)
 do { if (action == push) do { warning ("malformed '#pragma pack(push[, id], <n>)' - ignored"); return; } while (0); else do { warning ("malformed '#pragma pack(pop[, id])' - ignored"); return; } while (0); } while (0);
      if (token == CPP_COMMA)
 {
   token = c_lex (&x);
   if (token == CPP_NAME)
     {
       id = x;
       if (action == push && c_lex (&x) != CPP_COMMA)
  do { if (action == push) do { warning ("malformed '#pragma pack(push[, id], <n>)' - ignored"); return; } while (0); else do { warning ("malformed '#pragma pack(pop[, id])' - ignored"); return; } while (0); } while (0);
       token = c_lex (&x);
     }
   if (action == push)
     {
       if (token == CPP_NUMBER)
  {
    align = (((x)->int_cst.int_cst).low);
    token = c_lex (&x);
  }
       else
  do { if (action == push) do { warning ("malformed '#pragma pack(push[, id], <n>)' - ignored"); return; } while (0); else do { warning ("malformed '#pragma pack(pop[, id])' - ignored"); return; } while (0); } while (0);
     }
 }
      if (token != CPP_CLOSE_PAREN)
 do { if (action == push) do { warning ("malformed '#pragma pack(push[, id], <n>)' - ignored"); return; } while (0); else do { warning ("malformed '#pragma pack(pop[, id])' - ignored"); return; } while (0); } while (0);
    }
  else
    do { warning ("malformed '#pragma pack' - ignored"); return; } while (0);
  if (c_lex (&x) != CPP_EOF)
    warning ("junk at end of '#pragma pack'");
  if (action != pop)
    switch (align)
      {
      case 0:
      case 1:
      case 2:
      case 4:
      case 8:
      case 16:
 align *= 8;
 break;
      default:
 do { warning ("alignment must be a small power of two, not %d", align); return; } while (0);
      }
  switch (action)
    {
    case set: (default_alignment = maximum_field_alignment = (align)); break;
    case push: push_alignment (align, id); break;
    case pop: pop_alignment (id); break;
    }
}
static tree pending_weaks;
static void apply_pragma_weak (tree, tree);
static void handle_pragma_weak (cpp_reader *);
static void
apply_pragma_weak (tree decl, tree value1)
{
  if (value1)
    {
      value1 = build_string1 (((value1)->identifier.id.len),
       ((const char *) (value1)->identifier.id.str));
      decl_attributes (&decl, build_tree_list_stat(get_identifier ("alias"),build_tree_list_stat(((void *)0),value1 ) )
                                          ,
         0);
    }
  if (1 && ((decl)->decl.external_flag) && ((decl)->common.used_flag)
      && !((decl)->decl.weak_flag)
      && ((decl_assembler_name (decl))->common.static_flag))
    warning ("%Japplying #pragma weak '%D' after first use results in unspecified behavior", decl, decl);
  declare_weak (decl);
}
void
maybe_apply_pragma_weak (tree decl)
{
  tree *p, t, id;
  if (!pending_weaks)
    return;
  if (!((decl)->decl.external_flag) && !((decl)->common.public_flag))
    return;
  if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL && ((enum tree_code) (decl)->common.code) != VAR_DECL)
    return;
  id = decl_assembler_name (decl);
  for (p = &pending_weaks; (t = *p) ; p = &((t)->common.chain))
    if (id == ((t)->list.purpose))
      {
 apply_pragma_weak (decl, ((t)->list.value1));
 *p = ((t)->common.chain);
 break;
      }
}
static void
handle_pragma_weak (cpp_reader *dummy )
{
  tree name, value1, x, decl;
  enum cpp_ttype t;
  value1 = 0;
  if (c_lex (&name) != CPP_NAME)
    do { warning ("malformed #pragma weak, ignored"); return; } while (0);
  t = c_lex (&x);
  if (t == CPP_EQ)
    {
      if (c_lex (&value1) != CPP_NAME)
 do { warning ("malformed #pragma weak, ignored"); return; } while (0);
      t = c_lex (&x);
    }
  if (t != CPP_EOF)
    warning ("junk at end of #pragma weak");
  decl = identifier_global_value (name);
  if (decl && tree_code_type[(int) (((enum tree_code) (decl)->common.code))] == 'd')
    {
      apply_pragma_weak (decl, value1);
      if (value1)
 assemble_alias (decl, value1);
    }
  else
    pending_weaks = tree_cons_stat (name,value1,pending_weaks );
}
static tree pending_redefine_extname;
static void handle_pragma_redefine_extname (cpp_reader *);
static void
handle_pragma_redefine_extname (cpp_reader *dummy )
{
  tree oldname, newname, decl, x;
  enum cpp_ttype t;
  if (c_lex (&oldname) != CPP_NAME)
    do { warning ("malformed #pragma redefine_extname, ignored"); return; } while (0);
  if (c_lex (&newname) != CPP_NAME)
    do { warning ("malformed #pragma redefine_extname, ignored"); return; } while (0);
  t = c_lex (&x);
  if (t != CPP_EOF)
    warning ("junk at end of #pragma redefine_extname");
  if (!flag_mudflap && !targetm.handle_pragma_redefine_extname)
    {
      if (warn_unknown_pragmas > in_system_header1)
 warning ("#pragma redefine_extname not supported on this target");
      return;
    }
  decl = identifier_global_value (oldname);
  if (decl
      && (((decl)->common.public_flag) || ((decl)->decl.external_flag))
      && (((enum tree_code) (decl)->common.code) == FUNCTION_DECL
   || ((enum tree_code) (decl)->common.code) == VAR_DECL)
      && has_c_linkage (decl))
    {
      if (((decl)->decl.assembler_name != (tree) ((void *)0)))
 {
   const char *name = ((const char *) (decl_assembler_name (decl))->identifier.id.str);
   name = targetm.strip_name_encoding (name);
   if (strcmp (name, ((const char *) (newname)->identifier.id.str)))
     warning ("#pragma redefine_extname ignored due to conflict with previous rename");
 }
      else
 change_decl_assembler_name (decl, newname);
    }
  else
    add_to_renaming_pragma_list (oldname, newname);
}
void
add_to_renaming_pragma_list (tree oldname, tree newname)
{
  tree previous = purpose_member (oldname, pending_redefine_extname);
  if (previous)
    {
      if (((previous)->list.value1) != newname)
 warning ("#pragma redefine_extname ignored due to conflict with previous #pragma redefine_extname");
      return;
    }
  pending_redefine_extname
    = tree_cons_stat (oldname,newname,pending_redefine_extname );
}
static tree pragma_extern_prefix;
static void
handle_pragma_extern_prefix (cpp_reader *dummy )
{
  tree prefix, x;
  enum cpp_ttype t;
  if (c_lex (&prefix) != CPP_STRING)
    do { warning ("malformed #pragma extern_prefix, ignored"); return; } while (0);
  t = c_lex (&x);
  if (t != CPP_EOF)
    warning ("junk at end of #pragma extern_prefix");
  if (targetm.handle_pragma_extern_prefix)
    pragma_extern_prefix = (((prefix)->string11.length) > 1 ? prefix : ((void *)0));
  else if (warn_unknown_pragmas > in_system_header1)
    warning ("#pragma extern_prefix not supported on this target");
}
tree
maybe_apply_renaming_pragma (tree decl, tree asmname)
{
  tree *p, t;
  if ((((enum tree_code) (decl)->common.code) != FUNCTION_DECL && ((enum tree_code) (decl)->common.code) != VAR_DECL)
      || (!((decl)->common.public_flag) && !((decl)->decl.external_flag))
      || !has_c_linkage (decl))
    return asmname;
  if (((decl)->decl.assembler_name != (tree) ((void *)0)))
    {
      const char *oldname = ((const char *) (decl_assembler_name (decl))->identifier.id.str);
      oldname = targetm.strip_name_encoding (oldname);
      if (asmname && strcmp (((asmname)->string11.pointer), oldname))
   warning ("asm declaration ignored due to conflict with previous rename");
      for (p = &pending_redefine_extname; (t = *p); p = &((t)->common.chain))
 if (((decl)->decl.name) == ((t)->list.purpose))
   {
     if (strcmp (((const char *) (((t)->list.value1))->identifier.id.str), oldname))
       warning ("#pragma redefine_extname ignored due to conflict with previous rename");
     *p = ((t)->common.chain);
     break;
   }
      return 0;
    }
  for (p = &pending_redefine_extname; (t = *p); p = &((t)->common.chain))
    if (((decl)->decl.name) == ((t)->list.purpose))
      {
 tree newname = ((t)->list.value1);
 *p = ((t)->common.chain);
 if (asmname)
   {
     if (strcmp (((asmname)->string11.pointer),
   ((const char *) (newname)->identifier.id.str)) != 0)
       warning ("#pragma redefine_extname ignored due to conflict with __asm__ declaration");
     return asmname;
   }
 return build_string1 (((newname)->identifier.id.len),
        ((const char *) (newname)->identifier.id.str));
      }
  if (asmname)
    return asmname;
  if (pragma_extern_prefix)
    {
      const char *prefix = ((pragma_extern_prefix)->string11.pointer);
      size_t plen = ((pragma_extern_prefix)->string11.length) - 1;
      const char *id = ((const char *) (((decl)->decl.name))->identifier.id.str);
      size_t ilen = ((((decl)->decl.name))->identifier.id.len);
      char *newname = C_alloca(plen + ilen + 1);
      memcpy (newname, prefix, plen);
      memcpy (newname + plen, id, ilen + 1);
      return build_string1 (plen + ilen, newname);
    }
  return 0;
}
void
c_register_pragma (const char *space, const char *name,
     void (*handler) (struct cpp_reader *))
{
  cpp_register_pragma (parse_in, space, name, handler);
}
void
init_pragma (void)
{
  c_register_pragma (0, "pack", handle_pragma_pack);
  c_register_pragma (0, "weak", handle_pragma_weak);
  c_register_pragma (0, "redefine_extname", handle_pragma_redefine_extname);
  c_register_pragma (0, "extern_prefix", handle_pragma_extern_prefix);
  c_register_pragma ("GCC", "pch_preprocess", c_common_pch_pragma);
}
void
gt_ggc_mx_align_stack (void *x_p)
{
  struct align_stack * const x = (struct align_stack *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).id != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).id); } while (0);
      do { if ((*x).prev != ((void *)0)) gt_ggc_mx_align_stack ((*x).prev); } while (0);
    }
}
void
gt_pch_nx_align_stack (void *x_p)
{
  struct align_stack * const x = (struct align_stack *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_11align_stack))
    {
      do { if ((*x).id != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).id); } while (0);
      do { if ((*x).prev != ((void *)0)) gt_pch_nx_align_stack ((*x).prev); } while (0);
    }
}
void
gt_pch_p_11align_stack (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct align_stack * const x = (struct align_stack *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).id), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).prev), cookie);
}
const struct ggc_root_tab gt_ggc_r_gt_c_pragma_h[] = {
  {
    &pragma_extern_prefix,
    1,
    sizeof (pragma_extern_prefix),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &pending_redefine_extname,
    1,
    sizeof (pending_redefine_extname),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &pending_weaks,
    1,
    sizeof (pending_weaks),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &alignment_stack,
    1,
    sizeof (alignment_stack),
    &gt_ggc_mx_align_stack,
    &gt_pch_nx_align_stack
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
enum decl_context
{ NORMAL,
  FUNCDEF,
  PARM,
  FIELD,
  TYPENAME};
tree pending_invalid_xref;
location_t pending_invalid_xref_location;
unsigned char c_eh_initialized_p;
static tree enum_next_value;
static int enum_overflow;
static location_t current_function_prototype_locus;
static struct stmt_tree_s c_stmt_tree;
tree c_break_label;
tree c_cont_label;
static tree all_translation_units;
static tree visible_builtins;
int current_function_returns_value;
int current_function_returns_null;
int current_function_returns_abnormally;
static int warn_about_return_type;
static int current_extern_inline;
unsigned char c_override_global_bindings_to_false;
struct c_binding
{
  tree decl;
  tree id;
  struct c_binding *prev;
  struct c_binding *shadowed;
  unsigned int depth : 28;
  unsigned int invisible : 1;
  unsigned int nested : 1;
};
struct lang_identifier
{
  struct c_common_identifier common_id;
  struct c_binding *symbol_binding;
  struct c_binding *tag_binding;
  struct c_binding *label_binding;
};
extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
[(sizeof(struct lang_identifier) == (sizeof (struct c_common_identifier) + 3 * sizeof (void *))) ? 1 : -1];
union lang_tree_node
 
{
  union tree_node
    generic;
  struct lang_identifier identifier;
};
struct c_scope
{
  struct c_scope *outer;
  struct c_scope *outer_function;
  struct c_binding *bindings;
  tree blocks;
  tree blocks_last;
  unsigned int depth : 28;
  unsigned int parm_flag : 1;
  unsigned int warned_forward_parm_decls : 1;
  unsigned int function_body : 1;
  unsigned int keep : 1;
};
static struct c_scope *current_scope;
static struct c_scope *current_function_scope;
static struct c_scope *file_scope;
static struct c_scope *external_scope;
static struct c_scope *scope_freelist;
static struct c_binding *binding_freelist;
static unsigned char keep_next_level_flag;
static unsigned char next_is_function_body;
tree static_ctors, static_dtors;
static tree lookup_name_in_scope (tree, struct c_scope *);
static tree c_make_fname_decl (tree, int);
static tree grokdeclarator (tree, tree, enum decl_context, int, tree *);
static tree grokparms (tree, int);
static void layout_array_type (tree);
enum deprecated_states {
  DEPRECATED_NORMAL,
  DEPRECATED_SUPPRESS
};
static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
void
c_print_identifier (FILE *file, tree node, int indent1)
{
  print_node (file, "symbol", ((((struct lang_identifier *)(node))->symbol_binding) ? (((struct lang_identifier *)(node))->symbol_binding)->decl : 0), indent1 + 4);
  print_node (file, "tag", ((((struct lang_identifier *)(node))->tag_binding) ? (((struct lang_identifier *)(node))->tag_binding)->decl : 0), indent1 + 4);
  print_node (file, "label", ((((struct lang_identifier *)(node))->label_binding) ? (((struct lang_identifier *)(node))->label_binding)->decl : 0), indent1 + 4);
  if (((node)->common.lang_flag_0))
    {
      tree rid = ridpointers[(((struct c_common_identifier *) (node))->node.rid_code)];
      indent1_to (file, indent1 + 4);
      fprintf (file, "rid %p \"%s\"",
        (void *) rid, ((const char *) (rid)->identifier.id.str));
    }
}
static void
bind (tree name, tree decl, struct c_scope *scope, unsigned char invisible, unsigned char nested)
{
  struct c_binding *b, **here;
  if (binding_freelist)
    {
      b = binding_freelist;
      binding_freelist = b->prev;
    }
  else
    b = ggc_alloc_stat (sizeof (struct c_binding) );
  b->shadowed = 0;
  b->decl = decl;
  b->id = name;
  b->depth = scope->depth;
  b->invisible = invisible;
  b->nested = nested;
  b->prev = scope->bindings;
  scope->bindings = b;
  if (!name)
    return;
  switch (((enum tree_code) (decl)->common.code))
    {
    case LABEL_DECL: here = &(((struct lang_identifier *)(name))->label_binding); break;
    case ENUMERAL_TYPE:
    case UNION_TYPE:
    case RECORD_TYPE: here = &(((struct lang_identifier *)(name))->tag_binding); break;
    case VAR_DECL:
    case FUNCTION_DECL:
    case TYPE_DECL:
    case CONST_DECL:
    case PARM_DECL:
    case ERROR_MARK: here = &(((struct lang_identifier *)(name))->symbol_binding); break;
    default:
      fancy_abort ("gcc.c", 715341, "?");
    }
  while (*here && (*here)->depth > scope->depth)
    here = &(*here)->shadowed;
  b->shadowed = *here;
  *here = b;
}
static struct c_binding *
free_binding_and_advance (struct c_binding *b)
{
  struct c_binding *prev = b->prev;
  memset (b, 0, sizeof (struct c_binding));
  b->prev = binding_freelist;
  binding_freelist = b;
  return prev;
}
void
c_finish_incomplete_decl (tree decl)
{
  if (((enum tree_code) (decl)->common.code) == VAR_DECL)
    {
      tree type = ((decl)->common.type);
      if (type != global_trees[TI_ERROR_MARK]
   && ((enum tree_code) (type)->common.code) == ARRAY_TYPE
   && ! ((decl)->decl.external_flag)
   && ((type)->type.value1s) == 0)
 {
   warning ("%Jarray '%D' assumed to have one element", decl, decl);
   complete_array_type (type, (tree) ((void *)0), 1);
   layout_decl (decl, 0);
 }
    }
}
void *
get_current_scope (void)
{
  return current_scope;
}
void
objc_mark_locals_volatile (void *enclosing_blk)
{
  struct c_scope *scope;
  struct c_binding *b;
  for (scope = current_scope;
       scope && scope != enclosing_blk;
       scope = scope->outer)
    {
      for (b = scope->bindings; b; b = b->prev)
 {
   if (((enum tree_code) (b->decl)->common.code) == VAR_DECL
       || ((enum tree_code) (b->decl)->common.code) == PARM_DECL)
     {
       ((b->decl)->decl.lang_flag_4) = 0;
       ((b->decl)->decl.regdecl_flag) = 0;
       ((b->decl)->common.volatile_flag) = 1;
     }
 }
      if (scope->function_body)
 break;
    }
}
int
global_bindings_p (void)
{
  return current_scope == file_scope && !c_override_global_bindings_to_false;
}
void
keep_next_level (void)
{
  keep_next_level_flag = 1;
}
void
declare_parm_level (void)
{
  current_scope->parm_flag = 1;
}
void
push_scope (void)
{
  if (next_is_function_body)
    {
      current_scope->parm_flag = 0;
      current_scope->function_body = 1;
      current_scope->keep = 1;
      current_scope->outer_function = current_function_scope;
      current_function_scope = current_scope;
      keep_next_level_flag = 0;
      next_is_function_body = 0;
    }
  else
    {
      struct c_scope *scope;
      if (scope_freelist)
 {
   scope = scope_freelist;
   scope_freelist = scope->outer;
 }
      else
 scope = ggc_alloc_cleared_stat (sizeof (struct c_scope) );
      scope->keep = keep_next_level_flag;
      scope->outer = current_scope;
      scope->depth = current_scope ? (current_scope->depth + 1) : 0;
      if (current_scope && scope->depth == 0)
 {
   scope->depth--;
   sorry ("GCC supports only %u nested scopes\n", scope->depth);
 }
      current_scope = scope;
      keep_next_level_flag = 0;
    }
}
tree
pop_scope (void)
{
  struct c_scope *scope = current_scope;
  tree block, context, p;
  struct c_binding *b;
  unsigned char functionbody = scope->function_body;
  unsigned char keep = functionbody || scope->keep || scope->bindings;
  block = 0;
  if (keep)
    {
      block = make_node_stat (BLOCK );
      ((block)->block.subblocks) = scope->blocks;
      ((block)->common.used_flag) = 1;
      for (p = scope->blocks; p; p = ((p)->common.chain))
 ((p)->block.supercontext) = block;
      ((block)->block.vars) = 0;
    }
  if (scope->function_body)
    context = current_function_decl;
  else if (scope == file_scope)
    {
      tree file_decl = build_decl_stat (TRANSLATION_UNIT_DECL,0,0 );
      ((file_decl)->common.chain) = all_translation_units;
      all_translation_units = file_decl;
      context = file_decl;
    }
  else
    context = block;
  for (b = scope->bindings; b; b = free_binding_and_advance (b))
    {
      p = b->decl;
      switch (((enum tree_code) (p)->common.code))
 {
 case LABEL_DECL:
   if (((p)->common.used_flag) && !((p)->decl.initial))
     {
       error ("%Jlabel `%D' used but not defined", p, p);
       ((p)->decl.initial) = global_trees[TI_ERROR_MARK];
     }
   else if (!((p)->common.used_flag) && warn_unused_label)
     {
       if (((p)->decl.initial))
  warning ("%Jlabel `%D' defined but not used", p, p);
       else
  warning ("%Jlabel `%D' declared but not defined", p, p);
     }
   ((p)->common.chain) = ((block)->block.vars);
   ((block)->block.vars) = p;
    (((struct lang_identifier *)(b->id))->label_binding) = b->shadowed;
    break;
 case ENUMERAL_TYPE:
 case UNION_TYPE:
 case RECORD_TYPE:
   ((p)->type.context) = context;
   if (b->id)
     {
       (((struct lang_identifier *)(b->id))->tag_binding) = b->shadowed;
     }
     break;
 case FUNCTION_DECL:
   if (! ((p)->common.asm_written_flag)
       && ((p)->decl.initial) != 0
       && ((p)->common.addressable_flag)
       && ((p)->decl.abstract_origin) != 0
       && ((p)->decl.abstract_origin) != p)
     ((((p)->decl.abstract_origin))->common.addressable_flag) = 1;
   goto common_symbol;
 case VAR_DECL:
   if (warn_unused_variable
       && !((p)->common.used_flag)
       && !((p)->decl.in_system_header1_flag)
       && ((p)->decl.name)
       && !((p)->decl.artificial_flag)
       && (scope != file_scope
    || (((p)->common.static_flag) && !((p)->common.public_flag)
        && !((p)->common.volatile_flag)))
       && scope != external_scope)
     warning ("%Junused variable `%D'", p, p);
 case TYPE_DECL:
 case CONST_DECL:
 common_symbol:
   if (!b->nested)
     {
       ((p)->common.chain) = ((block)->block.vars);
       ((block)->block.vars) = p;
     }
   if (scope == file_scope)
     ((p)->decl.context) = context;
 case PARM_DECL:
 case ERROR_MARK:
   if (b->id)
     {
       (((struct lang_identifier *)(b->id))->symbol_binding) = b->shadowed;
     }
   break;
 default:
   fancy_abort ("gcc.c", 715671, "?");
 }
    }
  if ((scope->function_body || scope == file_scope) && context)
    {
      ((context)->decl.initial) = block;
      ((block)->block.supercontext) = context;
    }
  else if (scope->outer)
    {
      if (block)
 do { struct c_scope *s_ = (scope->outer); tree d_ = (block); if (s_->blocks_last) ((s_->blocks_last)->common.chain) = d_; else s_->blocks = d_; s_->blocks_last = d_; } while (0);
      else if (scope->blocks)
 do { struct c_scope *t_ = (scope->outer); struct c_scope *f_ = (scope); if (t_->blocks_last) ((t_->blocks_last)->common.chain) = f_->blocks; else t_->blocks = f_->blocks; t_->blocks_last = f_->blocks_last; } while (0);
    }
  current_scope = scope->outer;
  if (scope->function_body)
    current_function_scope = scope->outer_function;
  memset (scope, 0, sizeof (struct c_scope));
  scope->outer = scope_freelist;
  scope_freelist = scope;
  return block;
}
void
push_file_scope (void)
{
  tree decl;
  if (file_scope)
    return;
  push_scope ();
  file_scope = current_scope;
  start_fname_decls ();
  for (decl = visible_builtins; decl; decl = ((decl)->common.chain))
    bind (((decl)->decl.name), decl, file_scope,
                 0, 1);
}
void
pop_file_scope (void)
{
  while (current_scope != file_scope)
    pop_scope ();
  finish_fname_decls ();
  if (pch_file)
    return;
  pop_scope ();
  file_scope = 0;
  cpp_undef_all (parse_in);
}
void
insert_block (tree block)
{
  ((block)->common.used_flag) = 1;
  do { struct c_scope *s_ = (current_scope); tree d_ = (block); if (s_->blocks_last) ((s_->blocks_last)->common.chain) = d_; else s_->blocks = d_; s_->blocks_last = d_; } while (0);
}
static void
pushtag (tree name, tree type)
{
  if (name && !((type)->type.name))
    ((type)->type.name) = name;
  bind (name, type, current_scope, 0, 0);
  ((type)->common.chain) = pushdecl (build_decl_stat (TYPE_DECL,(tree) ((void *)0),type ));
  ((type)->type.context) = ((((type)->common.chain))->decl.context);
}
static tree
match_builtin_function_types (tree newtype, tree oldtype)
{
  tree newrettype, oldrettype;
  tree newargs, oldargs;
  tree trytype, tryargs;
  oldrettype = ((oldtype)->common.type);
  newrettype = ((newtype)->common.type);
  if (((oldrettype)->type.mode) != ((newrettype)->type.mode))
    return 0;
  oldargs = ((oldtype)->type.value1s);
  newargs = ((newtype)->type.value1s);
  tryargs = newargs;
  while (oldargs || newargs)
    {
      if (! oldargs
   || ! newargs
   || ! ((oldargs)->list.value1)
   || ! ((newargs)->list.value1)
   || ((((oldargs)->list.value1))->type.mode)
      != ((((newargs)->list.value1))->type.mode))
 return 0;
      oldargs = ((oldargs)->common.chain);
      newargs = ((newargs)->common.chain);
    }
  trytype = build_function_type (newrettype, tryargs);
  return build_type_attribute_variant (trytype, ((oldtype)->type.attributes));
}
static void
diagnose_arglist_conflict (tree newdecl, tree olddecl,
      tree newtype, tree oldtype)
{
  tree t;
  if (((enum tree_code) (olddecl)->common.code) != FUNCTION_DECL
      || !comptypes (((oldtype)->common.type), ((newtype)->common.type))
      || !((((oldtype)->type.value1s) == 0 && ((olddecl)->decl.initial) == 0)
    ||
    (((newtype)->type.value1s) == 0 && ((newdecl)->decl.initial) == 0)))
    return;
  t = ((oldtype)->type.value1s);
  if (t == 0)
    t = ((newtype)->type.value1s);
  for (; t; t = ((t)->common.chain))
    {
      tree type = ((t)->list.value1);
      if (((t)->common.chain) == 0
   && ((type)->type.main_variant) != global_trees[TI_VOID_TYPE])
 {
   inform ("a parameter list with an ellipsis can't match an empty parameter name list declaration");
   break;
 }
      if (c_type_promotes_to (type) != type)
 {
   inform ("an argument type that has a default promotion can't match an empty parameter name list declaration");
   break;
 }
    }
}
static unsigned char
validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype)
{
  tree newargs, oldargs;
  int i;
  oldargs = ((oldtype)->type.binfo);
  newargs = ((newtype)->type.value1s);
  i = 1;
  for (;;)
    {
      tree oldargtype = ((oldargs)->list.value1);
      tree newargtype = ((newargs)->list.value1);
      if ((((oldargtype)->type.main_variant) == global_trees[TI_VOID_TYPE]) && (((newargtype)->type.main_variant) == global_trees[TI_VOID_TYPE]))
 break;
      if ((((oldargtype)->type.main_variant) == global_trees[TI_VOID_TYPE]))
 {
   error ("%Jprototype for '%D' declares more arguments than previous old-style definition", newdecl, newdecl);
   return 0;
 }
      else if ((((newargtype)->type.main_variant) == global_trees[TI_VOID_TYPE]))
 {
   error ("%Jprototype for '%D' declares fewer arguments than previous old-style definition", newdecl, newdecl);
   return 0;
 }
      else if (! comptypes (oldargtype, newargtype))
 {
   error ("%Jprototype for '%D' declares arg %d with incompatible type",
   newdecl, newdecl, i);
   return 0;
 }
      oldargs = ((oldargs)->common.chain);
      newargs = ((newargs)->common.chain);
      i++;
    }
  warning ("%Jprototype for '%D' follows non-prototype definition",
    newdecl, newdecl);
  return 1;
}
static void
locate_old_decl (tree decl, void (*diag)(const char *, ...))
{
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL && (((decl)->decl.built_in_class) != NOT_BUILT_IN))
    ;
  else if (((decl)->decl.initial))
    diag ("%Jprevious definition of '%D' was here", decl, decl);
  else if (((decl)->decl.lang_flag_2))
    diag ("%Jprevious implicit declaration of '%D' was here", decl, decl);
  else
    diag ("%Jprevious declaration of '%D' was here", decl, decl);
}
static unsigned char
diagnose_mismatched_decls (tree newdecl, tree olddecl,
      tree *newtypep, tree *oldtypep)
{
  tree newtype, oldtype;
  unsigned char pedwarned = 0;
  unsigned char warned = 0;
  if (olddecl == global_trees[TI_ERROR_MARK] || newdecl == global_trees[TI_ERROR_MARK])
    return 0;
  *oldtypep = oldtype = ((olddecl)->common.type);
  *newtypep = newtype = ((newdecl)->common.type);
  if (oldtype == global_trees[TI_ERROR_MARK] || newtype == global_trees[TI_ERROR_MARK])
    return 0;
  if (((enum tree_code) (olddecl)->common.code) != ((enum tree_code) (newdecl)->common.code))
    {
      if (!(((enum tree_code) (olddecl)->common.code) == FUNCTION_DECL
     && (((olddecl)->decl.built_in_class) != NOT_BUILT_IN)
     && !((olddecl)->decl.lang_flag_3)))
 {
   error ("%J'%D' redeclared as different kind of symbol",
   newdecl, newdecl);
   locate_old_decl (olddecl, error);
 }
      else if (((newdecl)->common.public_flag))
 warning ("%Jbuilt-in function '%D' declared as non-function",
   newdecl, newdecl);
      else if (warn_shadow)
 warning ("%Jdeclaration of '%D' shadows a built-in function",
   newdecl, newdecl);
      return 0;
    }
  if (!comptypes (oldtype, newtype))
    {
      if (((enum tree_code) (olddecl)->common.code) == FUNCTION_DECL
   && (((olddecl)->decl.built_in_class) != NOT_BUILT_IN) && !((olddecl)->decl.lang_flag_3))
 {
   tree trytype = match_builtin_function_types (newtype, oldtype);
   if (trytype && comptypes (newtype, trytype))
     *oldtypep = oldtype = trytype;
   else
     {
       warning ("%Jconflicting types for built-in function '%D'",
         newdecl, newdecl);
       return 0;
     }
 }
      else if (((enum tree_code) (olddecl)->common.code) == FUNCTION_DECL
        && ((((((olddecl)->decl.locus))).line) == 0))
 {
   ((newdecl)->common.volatile_flag) |= ((olddecl)->common.volatile_flag);
   return 0;
 }
      else if (((enum tree_code) (newdecl)->common.code) == FUNCTION_DECL && ((newdecl)->decl.initial)
        && ((((oldtype)->common.type))->type.main_variant) == global_trees[TI_VOID_TYPE]
        && ((((newtype)->common.type))->type.main_variant) == integer_types[itk_int]
        && ((newdecl)->decl.lang_flag_1))
 {
   pedwarn ("%Jconflicting types for '%D'", newdecl, newdecl);
   ((newdecl)->common.type) = *newtypep = newtype = oldtype;
   ((newdecl)->decl.lang_flag_1) = 0;
   pedwarned = 1;
 }
      else
 {
   if (((((newtype)->common.readonly_flag) * 0x1) | (((newtype)->common.volatile_flag) * 0x2) | (((newtype)->type.restrict_flag) * 0x4)) != ((((oldtype)->common.readonly_flag) * 0x1) | (((oldtype)->common.volatile_flag) * 0x2) | (((oldtype)->type.restrict_flag) * 0x4)))
     error ("%J conflicting type qualifiers for '%D'", newdecl, newdecl);
   else
     error ("%Jconflicting types for '%D'", newdecl, newdecl);
   diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
   locate_old_decl (olddecl, error);
   return 0;
 }
    }
  if (((enum tree_code) (newdecl)->common.code) == TYPE_DECL)
    {
      if (((newdecl)->decl.in_system_header1_flag) || ((olddecl)->decl.in_system_header1_flag))
 return 1;
      error ("%Jredefinition of typedef '%D'", newdecl, newdecl);
      locate_old_decl (olddecl, error);
      return 0;
    }
  else if (((enum tree_code) (newdecl)->common.code) == FUNCTION_DECL)
    {
      if ((((olddecl)->decl.built_in_class) != NOT_BUILT_IN)
   && !((olddecl)->decl.lang_flag_3)
   && (!((newdecl)->common.public_flag)
       || (((newdecl)->decl.initial)
    && !((((newdecl)->common.type))->type.value1s))))
 {
   if (warn_shadow)
     warning ("%Jdeclaration of '%D' shadows a built-in function",
       newdecl, newdecl);
   return 0;
 }
      if (((newdecl)->decl.initial))
 {
   if (((olddecl)->decl.initial)
       && !(((olddecl)->decl.declared_inline_flag)
     && ((olddecl)->decl.external_flag)
     && !(((newdecl)->decl.declared_inline_flag)
   && ((newdecl)->decl.external_flag))))
     {
       error ("%Jredefinition of '%D'", newdecl, newdecl);
       locate_old_decl (olddecl, error);
       return 0;
     }
 }
      else if (((olddecl)->decl.initial)
        && !((oldtype)->type.value1s) && ((newtype)->type.value1s)
        && ((oldtype)->type.binfo)
        && !validate_proto_after_old_defn (newdecl, newtype, oldtype))
 {
   locate_old_decl (olddecl, error);
   return 0;
 }
      if (((olddecl)->common.public_flag) && !((newdecl)->common.public_flag))
 {
   if (!((((((olddecl)->decl.locus))).line) == 0)
       && !(((olddecl)->decl.external_flag)
     && ((olddecl)->decl.declared_inline_flag)))
     {
       error ("%Jstatic declaration of '%D' follows non-static declaration", newdecl, newdecl);
       locate_old_decl (olddecl, error);
     }
   return 0;
 }
      else if (((newdecl)->common.public_flag) && !((olddecl)->common.public_flag))
 {
   if (((olddecl)->decl.context))
     {
       error ("%Jnon-static declaration of '%D' follows static declaration", newdecl, newdecl);
       locate_old_decl (olddecl, error);
       return 0;
     }
   else if (warn_traditional)
     {
       warning ("%Jnon-static declaration of '%D' follows static declaration", newdecl, newdecl);
       warned = 1;
     }
 }
    }
  else if (((enum tree_code) (newdecl)->common.code) == VAR_DECL)
    {
      if (((newdecl)->decl.thread_local_flag) != ((olddecl)->decl.thread_local_flag))
 {
   if (((newdecl)->decl.thread_local_flag))
     error ("%Jthread-local declaration of '%D' follows non-thread-local declaration", newdecl, newdecl);
   else
     error ("%Jnon-thread-local declaration of '%D' follows thread-local declaration", newdecl, newdecl);
   locate_old_decl (olddecl, error);
   return 0;
 }
      if (((newdecl)->decl.initial) && ((olddecl)->decl.initial))
 {
   error ("%Jredefinition of '%D'", newdecl, newdecl);
   locate_old_decl (olddecl, error);
   return 0;
 }
      if ((! ((newdecl)->decl.context) || ((enum tree_code) (((newdecl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL)
   && ((newdecl)->common.public_flag) != ((olddecl)->common.public_flag))
 {
   if (((newdecl)->decl.external_flag))
     {
       if (warn_traditional)
  {
    warning ("%Jnon-static declaration of '%D' follows static declaration", newdecl, newdecl);
    warned = 1;
  }
     }
   else
     {
       if (((newdecl)->common.public_flag))
  error ("%Jnon-static declaration of '%D' follows static declaration", newdecl, newdecl);
       else
  error ("%Jstatic declaration of '%D' follows non-static declaration", newdecl, newdecl);
       locate_old_decl (olddecl, error);
       return 0;
     }
 }
      else if (!(! ((newdecl)->decl.context) || ((enum tree_code) (((newdecl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL)
        && ((newdecl)->decl.context) == ((olddecl)->decl.context)
        && (!((newdecl)->decl.external_flag) || !((olddecl)->decl.external_flag)))
 {
   if (((newdecl)->decl.external_flag))
     error ("%Jextern declaration of '%D' follows declaration with no linkage", newdecl, newdecl);
   else if (((olddecl)->decl.external_flag))
     error ("%Jdeclaration of '%D' with no linkage follows extern declaration", newdecl, newdecl);
   else
     error ("%Jredeclaration of '%D' with no linkage",
     newdecl, newdecl);
   locate_old_decl (olddecl, error);
   return 0;
 }
    }
  if (((newdecl)->decl.visibility) != VISIBILITY_DEFAULT
      && ((olddecl)->decl.visibility) != VISIBILITY_DEFAULT
      && ((newdecl)->decl.visibility) != ((olddecl)->decl.visibility))
    {
      warning ("%Jredeclaration of '%D' with different visibility (old visibility preserved)", newdecl, newdecl);
      warned = 1;
    }
  if (((enum tree_code) (newdecl)->common.code) == FUNCTION_DECL)
    {
      if (((newdecl)->decl.declared_inline_flag)
   && lookup_attribute ("noinline", ((olddecl)->decl.attributes)))
 {
   warning ("%Jinline declaration of '%D' follows declaration with attribute noinline", newdecl, newdecl);
   warned = 1;
 }
      else if (((olddecl)->decl.declared_inline_flag)
        && lookup_attribute ("noinline", ((newdecl)->decl.attributes)))
 {
   warning ("%Jdeclaration of '%D' with attribute noinline follows inline declaration ", newdecl, newdecl);
   warned = 1;
 }
      if (((newdecl)->decl.declared_inline_flag) && !((olddecl)->decl.declared_inline_flag))
 {
   if (((olddecl)->common.used_flag))
     {
       warning ("%J'%D' declared inline after being called",
         olddecl, olddecl);
       warned = 1;
     }
   else if (((olddecl)->decl.initial))
     {
       warning ("%J'%D' declared inline after its definition",
         olddecl, olddecl);
       warned = 1;
     }
 }
    }
  else
    {
      if (((enum tree_code) (newdecl)->common.code) == PARM_DECL
   && (!((olddecl)->common.asm_written_flag) || ((newdecl)->common.asm_written_flag)))
 {
   error ("%Jredefinition of parameter '%D'", newdecl, newdecl);
   locate_old_decl (olddecl, error);
   return 0;
 }
    }
  if (!warned && !pedwarned
      && warn_redundant_decls
      && !(((enum tree_code) (newdecl)->common.code) == FUNCTION_DECL
    && ((newdecl)->decl.initial) && !((olddecl)->decl.initial))
      && !(((olddecl)->decl.external_flag) && !((newdecl)->decl.external_flag))
      && !(((enum tree_code) (newdecl)->common.code) == PARM_DECL
    && ((olddecl)->common.asm_written_flag) && !((newdecl)->common.asm_written_flag)))
    {
      warning ("%Jredundant redeclaration of '%D'", newdecl, newdecl);
      warned = 1;
    }
  if (warned || pedwarned)
    locate_old_decl (olddecl, pedwarned ? pedwarn : warning);
  return 1;
}
static void
merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
{
  int new_is_definition = (((enum tree_code) (newdecl)->common.code) == FUNCTION_DECL
      && ((newdecl)->decl.initial) != 0);
  if (((enum tree_code) (newdecl)->common.code) == PARM_DECL
      && ((olddecl)->common.asm_written_flag) && ! ((newdecl)->common.asm_written_flag))
    {
      struct c_binding *b, **here;
      for (here = &current_scope->bindings; *here; here = &(*here)->prev)
 if ((*here)->decl == olddecl)
   goto found;
      fancy_abort ("gcc.c", 716348, "?");
    found:
      b = *here;
      *here = b->prev;
      b->prev = current_scope->bindings;
      current_scope->bindings = b;
      ((olddecl)->common.asm_written_flag) = 0;
    }
  ((newdecl)->decl.attributes)
    = targetm.merge_decl_attributes (olddecl, newdecl);
  ((newdecl)->common.type)
    = ((olddecl)->common.type)
    = composite_type (newtype, oldtype);
  if (oldtype != ((newdecl)->common.type))
    {
      if (((newdecl)->common.type) != global_trees[TI_ERROR_MARK])
 layout_type (((newdecl)->common.type));
      if (((enum tree_code) (newdecl)->common.code) != FUNCTION_DECL
   && ((enum tree_code) (newdecl)->common.code) != TYPE_DECL
   && ((enum tree_code) (newdecl)->common.code) != CONST_DECL)
 layout_decl (newdecl, 0);
    }
  else
    {
      ((newdecl)->decl.size) = ((olddecl)->decl.size);
      ((newdecl)->decl.size_unit) = ((olddecl)->decl.size_unit);
      ((newdecl)->decl.mode) = ((olddecl)->decl.mode);
      if (((enum tree_code) (olddecl)->common.code) != FUNCTION_DECL)
 if (((olddecl)->decl.u1.a.align) > ((newdecl)->decl.u1.a.align))
   {
     ((newdecl)->decl.u1.a.align) = ((olddecl)->decl.u1.a.align);
     ((newdecl)->decl.user_align) |= ((olddecl)->decl.u1.a.align);
   }
    }
  ((newdecl)->decl.rtl = (olddecl)->decl.rtl);
  if (((newdecl)->common.readonly_flag))
    ((olddecl)->common.readonly_flag) = 1;
  if (((newdecl)->common.volatile_flag))
    {
      ((olddecl)->common.volatile_flag) = 1;
      if (((enum tree_code) (newdecl)->common.code) == VAR_DECL)
 make_var_volatile (newdecl);
    }
  if (((newdecl)->decl.initial) == 0 && ((olddecl)->decl.initial) != 0)
    ((newdecl)->decl.locus) = ((olddecl)->decl.locus);
  if (((olddecl)->decl.in_system_header1_flag))
    ((newdecl)->decl.in_system_header1_flag) = 1;
  else if (((newdecl)->decl.in_system_header1_flag))
    ((olddecl)->decl.in_system_header1_flag) = 1;
   if (((newdecl)->decl.initial) == 0)
    ((newdecl)->decl.initial) = ((olddecl)->decl.initial);
  if (((newdecl)->decl.section_name) == (tree) ((void *)0))
    ((newdecl)->decl.section_name) = ((olddecl)->decl.section_name);
  (((olddecl)->decl.assembler_name != (tree) ((void *)0)) ? (void) ((newdecl)->decl.assembler_name = (decl_assembler_name (olddecl))) : (void) 0);
  if (((olddecl)->decl.visibility) != VISIBILITY_DEFAULT)
    ((newdecl)->decl.visibility) = ((olddecl)->decl.visibility);
  if (((enum tree_code) (newdecl)->common.code) == FUNCTION_DECL)
    {
      ((newdecl)->decl.static_ctor_flag) |= ((olddecl)->decl.static_ctor_flag);
      ((newdecl)->decl.static_dtor_flag) |= ((olddecl)->decl.static_dtor_flag);
      ((newdecl)->decl.no_limit_stack) |= ((olddecl)->decl.no_limit_stack);
      ((newdecl)->decl.no_instrument_function_entry_exit)
 |= ((olddecl)->decl.no_instrument_function_entry_exit);
      ((newdecl)->common.volatile_flag) |= ((olddecl)->common.volatile_flag);
      ((newdecl)->common.readonly_flag) |= ((olddecl)->common.readonly_flag);
      ((newdecl)->decl.malloc_flag) |= ((olddecl)->decl.malloc_flag);
      ((newdecl)->decl.pure_flag) |= ((olddecl)->decl.pure_flag);
    }
  merge_weak (newdecl, olddecl);
  if (((enum tree_code) (newdecl)->common.code) == FUNCTION_DECL)
    {
      ((newdecl)->common.public_flag) &= ((olddecl)->common.public_flag);
      ((olddecl)->common.public_flag) = ((newdecl)->common.public_flag);
      if (! ((olddecl)->common.public_flag))
 ((((olddecl)->decl.name))->common.public_flag) = 0;
    }
  if (((newdecl)->decl.external_flag))
    {
      ((newdecl)->common.static_flag) = ((olddecl)->common.static_flag);
      ((newdecl)->decl.external_flag) = ((olddecl)->decl.external_flag);
      ((newdecl)->common.public_flag) = ((olddecl)->common.public_flag);
      if (! ((newdecl)->decl.external_flag))
 {
   ((newdecl)->decl.context) = ((olddecl)->decl.context);
   ((newdecl)->decl.common_flag) = ((olddecl)->decl.common_flag);
 }
    }
  else
    {
      ((olddecl)->common.static_flag) = ((newdecl)->common.static_flag);
      ((olddecl)->common.public_flag) = ((newdecl)->common.public_flag);
    }
  if (((enum tree_code) (newdecl)->common.code) == FUNCTION_DECL)
    {
      if (new_is_definition && ((olddecl)->decl.initial))
 {
   if (((olddecl)->common.used_flag)
       && !flag_unit_at_a_time
       && cgraph_function_possibly_inlined_p (olddecl))
     (*debug_hooks->outlining_inline_function) (olddecl);
   ((newdecl)->decl.inline_flag) = 0;
   ((newdecl)->decl.uninlinable) = 1;
 }
      else
 {
   if (((newdecl)->decl.declared_inline_flag)
       || ((olddecl)->decl.declared_inline_flag))
     ((newdecl)->decl.declared_inline_flag) = 1;
   ((newdecl)->decl.uninlinable) = ((olddecl)->decl.uninlinable)
     = (((newdecl)->decl.uninlinable) || ((olddecl)->decl.uninlinable));
 }
      if ((((olddecl)->decl.built_in_class) != NOT_BUILT_IN))
 {
   ((newdecl)->decl.built_in_class) = ((olddecl)->decl.built_in_class);
   ((newdecl)->decl.u1.f) = ((olddecl)->decl.u1.f);
   ((newdecl)->decl.lang_flag_3) = 1;
 }
      if (! new_is_definition)
 {
   ((newdecl)->decl.result) = ((olddecl)->decl.result);
   ((newdecl)->decl.initial) = ((olddecl)->decl.initial);
   ((newdecl)->decl.u2.f) = ((olddecl)->decl.u2.f);
   ((newdecl)->decl.saved_tree) = ((olddecl)->decl.saved_tree);
   ((newdecl)->decl.arguments) = ((olddecl)->decl.arguments);
   if (((olddecl)->decl.inline_flag) && ! ((newdecl)->decl.uninlinable))
     {
       ((newdecl)->decl.inline_flag) = 1;
       ((newdecl)->decl.abstract_origin)
  = ((olddecl)->decl.abstract_origin);
     }
 }
      else
 {
   if (((newdecl)->decl.declared_inline_flag)
       && ! ((newdecl)->decl.uninlinable))
     ((newdecl)->decl.inline_flag) = 1;
 }
    }
  {
    unsigned olddecl_uid = ((olddecl)->decl.uid);
    memcpy ((char *) olddecl + sizeof (struct tree_common),
     (char *) newdecl + sizeof (struct tree_common),
     sizeof (struct tree_decl) - sizeof (struct tree_common));
    ((olddecl)->decl.uid) = olddecl_uid;
  }
  if (((olddecl)->decl.rtl != ((void *)0))
      && (((enum tree_code) (olddecl)->common.code) == FUNCTION_DECL
   || (((enum tree_code) (olddecl)->common.code) == VAR_DECL
       && ((olddecl)->common.static_flag))))
    make_decl_rtl (olddecl, ((void *)0));
}
static unsigned char
duplicate_decls (tree newdecl, tree olddecl)
{
  tree newtype = ((void *)0), oldtype = ((void *)0);
  if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
    return 0;
  merge_decls (newdecl, olddecl, newtype, oldtype);
  return 1;
}
static void
warn_if_shadowing (tree new)
{
  struct c_binding *b;
  if (!warn_shadow
      || ((((((new)->decl.locus))).line) == 0)
      || (((new)->decl.abstract_origin) != (tree) ((void *)0) && ((new)->decl.abstract_origin) != (new))
      || (((enum tree_code) (new)->common.code) == PARM_DECL && current_scope->outer->parm_flag))
    return;
  for (b = (((struct lang_identifier *)(((new)->decl.name)))->symbol_binding); b; b = b->shadowed)
    if (b->decl && b->decl != new && !b->invisible)
      {
 tree old = b->decl;
 if (((enum tree_code) (old)->common.code) == PARM_DECL)
   warning ("%Jdeclaration of '%D' shadows a parameter", new, new);
 else if ((! ((old)->decl.context) || ((enum tree_code) (((old)->decl.context))->common.code) == TRANSLATION_UNIT_DECL))
   warning ("%Jdeclaration of '%D' shadows a global declaration",
     new, new);
 else if (((enum tree_code) (old)->common.code) == FUNCTION_DECL && (((old)->decl.built_in_class) != NOT_BUILT_IN))
   warning ("%Jdeclaration of '%D' shadows a built-in function",
     new, new);
 else
   warning ("%Jdeclaration of '%D' shadows a previous local", new, new);
 if (((enum tree_code) (old)->common.code) != FUNCTION_DECL || !(((old)->decl.built_in_class) != NOT_BUILT_IN))
   warning ("%Jshadowed declaration is here", old);
 break;
      }
}
static void
clone_underlying_type (tree x)
{
  if (((((((x)->decl.locus))).line) == 0))
    {
      if (((((x)->common.type))->type.name) == 0)
 ((((x)->common.type))->type.name) = x;
    }
  else if (((x)->common.type) != global_trees[TI_ERROR_MARK]
    && ((x)->decl.result) == (tree) ((void *)0))
    {
      tree tt = ((x)->common.type);
      ((x)->decl.result) = tt;
      tt = build_type_copy (tt);
      ((tt)->type.name) = x;
      ((tt)->common.used_flag) = ((x)->common.used_flag);
      ((x)->common.type) = tt;
    }
}
tree
pushdecl (tree x)
{
  tree name = ((x)->decl.name);
  struct c_scope *scope = current_scope;
  struct c_binding *b;
  unsigned char nested = 0;
  if (((enum tree_code) (x)->common.code) == FUNCTION_DECL && ! ((x)->decl.lang_specific))
    ((x)->decl.lang_specific) = ggc_alloc_cleared_stat (sizeof (struct lang_decl) );
  if (current_function_decl
      && ((((enum tree_code) (x)->common.code) != FUNCTION_DECL && ((enum tree_code) (x)->common.code) != VAR_DECL)
   || ((x)->decl.initial) || !((x)->decl.external_flag)))
    ((x)->decl.context) = current_function_decl;
  if (!name)
    {
      bind (name, x, scope, 0, 0);
      return x;
    }
  b = (((struct lang_identifier *)(name))->symbol_binding);
  if (b && ((b)->depth == (scope)->depth))
    {
      if (duplicate_decls (x, b->decl))
 return b->decl;
      else
 goto skip_external_and_shadow_checks;
    }
  if (((x)->decl.external_flag) || scope == file_scope)
    {
      if (warn_nested_externs
   && scope != file_scope
   && !((x)->decl.in_system_header1_flag))
 warning ("nested extern declaration of '%D'", x);
      while (b && !((b)->depth == 0 ))
 b = b->shadowed;
      if (b
   && (((x)->decl.external_flag) || ((x)->common.public_flag)
       || same_translation_unit_p (x, b->decl))
   && duplicate_decls (x, b->decl))
 {
   bind (name, b->decl, scope, 0, 1);
   return b->decl;
 }
      else if (((x)->decl.external_flag) || ((x)->common.public_flag))
 {
   bind (name, x, external_scope, 1, 0);
   nested = 1;
 }
    }
  else if (((enum tree_code) (x)->common.code) == FUNCTION_DECL && scope != file_scope
    && !((x)->common.public_flag) && !((x)->decl.initial))
    {
      if (warn_nested_externs && !((x)->decl.in_system_header1_flag))
 warning ("nested static declaration of '%D'", x);
      while (b && !((b)->depth == 1 ))
 b = b->shadowed;
      if (b && same_translation_unit_p (x, b->decl)
   && duplicate_decls (x, b->decl))
 {
   bind (name, b->decl, scope, 0, 1);
   return b->decl;
 }
      else
 {
   bind (name, x, file_scope, 1, 0);
   nested = 1;
 }
    }
  warn_if_shadowing (x);
 skip_external_and_shadow_checks:
  if (((enum tree_code) (x)->common.code) == TYPE_DECL)
    clone_underlying_type (x);
  bind (name, x, scope, 0, nested);
  if (((x)->common.type) != global_trees[TI_ERROR_MARK]
      && !(((((x)->common.type))->type.size) != (tree) ((void *)0)))
    {
      tree element = ((x)->common.type);
      while (((enum tree_code) (element)->common.code) == ARRAY_TYPE)
 element = ((element)->common.type);
      element = ((element)->type.main_variant);
      if ((((enum tree_code) (element)->common.code) == RECORD_TYPE
    || ((enum tree_code) (element)->common.code) == UNION_TYPE)
   && (((enum tree_code) (x)->common.code) != TYPE_DECL
       || ((enum tree_code) (((x)->common.type))->common.code) == ARRAY_TYPE)
   && !(((element)->type.size) != (tree) ((void *)0)))
 ((element)->type.minval)
   = tree_cons_stat ((tree) ((void *)0),x,((element)->type.minval) );
    }
  return x;
}
tree
pushdecl_top_level (tree x)
{
  tree name;
  unsigned char nested = 0;
  if (((enum tree_code) (x)->common.code) != VAR_DECL)
    fancy_abort ("gcc.c", 716864, "?");
  name = ((x)->decl.name);
  if ((((struct lang_identifier *)(name))->symbol_binding))
    fancy_abort ("gcc.c", 716869, "?");
  if (((x)->decl.external_flag) || ((x)->common.public_flag))
    {
      bind (name, x, external_scope, 1, 0);
      nested = 1;
    }
  if (file_scope)
    bind (name, x, file_scope, 0, nested);
  return x;
}
static void
implicit_decl_warning (tree id, tree olddecl)
{
  void (*diag) (const char *, ...);
  switch (mesg_implicit_function_declaration)
    {
    case 0: return;
    case 1: diag = warning; break;
    case 2: diag = error; break;
    default: fancy_abort ("gcc.c", 716891, "?");
    }
  diag ("implicit declaration of function '%E'", id);
  if (olddecl)
    locate_old_decl (olddecl, diag);
}
tree
implicitly_declare (tree functionid)
{
  tree decl = lookup_name_in_scope (functionid, external_scope);
  if (decl)
    {
      if (!(((decl)->decl.built_in_class) != NOT_BUILT_IN) && ((((((decl)->decl.locus))).line) == 0))
 {
   bind (functionid, decl, file_scope,
                0, 1);
   return decl;
 }
      else
 {
   if (!((decl)->decl.lang_flag_2))
     {
       implicit_decl_warning (functionid, decl);
       ((decl)->decl.lang_flag_2) = 1;
     }
   bind (functionid, decl, current_scope,
                0, 1);
   return decl;
 }
    }
  decl = build_decl_stat (FUNCTION_DECL,functionid,c_global_trees[CTI_DEFAULT_FUNCTION_TYPE] );
  ((decl)->decl.external_flag) = 1;
  ((decl)->common.public_flag) = 1;
  ((decl)->decl.lang_flag_2) = 1;
  implicit_decl_warning (functionid, 0);
  decl = pushdecl (decl);
  rest_of_decl_compilation (decl, ((void *)0), 0, 0);
  gen_aux_info_record (decl, 0, 1, 0);
  decl_attributes (&decl, (tree) ((void *)0), 0);
  return decl;
}
void
undeclared_variable (tree id)
{
  static unsigned char already = 0;
  struct c_scope *scope;
  if (current_function_decl == 0)
    {
      error ("'%E' undeclared here (not in a function)", id);
      scope = current_scope;
    }
  else
    {
      error ("'%E' undeclared (first use in this function)", id);
      if (! already)
 {
   error ("(Each undeclared identifier is reported only once");
   error ("for each function it appears in.)");
   already = 1;
 }
      scope = current_function_scope ? current_function_scope : current_scope;
    }
  bind (id, global_trees[TI_ERROR_MARK], scope, 0, 0);
}
static tree
make_label (tree name, location_t location)
{
  tree label = build_decl_stat (LABEL_DECL,name,global_trees[TI_VOID_TYPE] );
  ((label)->decl.context) = current_function_decl;
  ((label)->decl.mode) = VOIDmode;
  ((label)->decl.locus) = location;
  return label;
}
tree
lookup_label (tree name)
{
  tree label;
  if (current_function_decl == 0)
    {
      error ("label %s referenced outside of any function",
      ((const char *) (name)->identifier.id.str));
      return 0;
    }
  label = ((((struct lang_identifier *)(name))->label_binding) ? (((struct lang_identifier *)(name))->label_binding)->decl : 0);
  if (label && (((label)->decl.context) == current_function_decl
  || ((label)->common.lang_flag_1)))
    {
      if (!((label)->common.used_flag))
 ((label)->decl.locus) = input_location;
      return label;
    }
  label = make_label (name, input_location);
  bind (name, label, current_function_scope,
               0, 0);
  return label;
}
tree
declare_label (tree name)
{
  struct c_binding *b = (((struct lang_identifier *)(name))->label_binding);
  tree label;
  if (b && ((b)->depth == current_scope->depth))
    {
      error ("duplicate label declaration `%s'", ((const char *) (name)->identifier.id.str));
      locate_old_decl (b->decl, error);
      return b->decl;
    }
  label = make_label (name, input_location);
  ((label)->common.lang_flag_1) = 1;
  bind (name, label, current_scope,
               0, 0);
  return label;
}
tree
define_label (location_t location, tree name)
{
  tree label = ((((struct lang_identifier *)(name))->label_binding) ? (((struct lang_identifier *)(name))->label_binding)->decl : 0);
  if (label
      && ((((label)->decl.context) == current_function_decl
    && ((label)->decl.initial) != 0)
   || (((label)->decl.context) != current_function_decl
       && ((label)->common.lang_flag_1))))
    {
      error ("%Hduplicate label `%D'", &location, label);
      locate_old_decl (label, error);
      return 0;
    }
  else if (label && ((label)->decl.context) == current_function_decl)
    {
      ((label)->decl.locus) = location;
    }
  else
    {
      label = make_label (name, location);
      bind (name, label, current_function_scope,
                   0, 0);
    }
  if (warn_traditional && !in_system_header1 && lookup_name (name))
    warning ("%Htraditional C lacks a separate namespace for labels, identifier `%s' conflicts", &location,
      ((const char *) (name)->identifier.id.str));
  ((label)->decl.initial) = global_trees[TI_ERROR_MARK];
  return label;
}
static tree
lookup_tag (enum tree_code code, tree name, int thislevel_only)
{
  struct c_binding *b = (((struct lang_identifier *)(name))->tag_binding);
  int thislevel = 0;
  if (!b || !b->decl)
    return 0;
  if (thislevel_only || ((enum tree_code) (b->decl)->common.code) != code)
    {
      if (((b)->depth == current_scope->depth)
   || (current_scope == file_scope && ((b)->depth == 0 )))
 thislevel = 1;
    }
  if (thislevel_only && !thislevel)
    return 0;
  if (((enum tree_code) (b->decl)->common.code) != code)
    {
      pending_invalid_xref = name;
      pending_invalid_xref_location = input_location;
      if (thislevel)
 pending_xref_error ();
    }
  return b->decl;
}
void
pending_xref_error (void)
{
  if (pending_invalid_xref != 0)
    error ("%H`%s' defined as wrong kind of tag",
           &pending_invalid_xref_location,
           ((const char *) (pending_invalid_xref)->identifier.id.str));
  pending_invalid_xref = 0;
}
tree
lookup_name (tree name)
{
  struct c_binding *b = (((struct lang_identifier *)(name))->symbol_binding);
  if (b && !b->invisible)
    return b->decl;
  return 0;
}
static tree
lookup_name_in_scope (tree name, struct c_scope *scope)
{
  struct c_binding *b;
  for (b = (((struct lang_identifier *)(name))->symbol_binding); b; b = b->shadowed)
    if (((b)->depth == (scope)->depth))
      return b->decl;
  return 0;
}
void
c_init_decl_processing (void)
{
  tree endlink;
  tree ptr_ftype_void, ptr_ftype_ptr;
  location_t save_loc = input_location;
  c_parse_init ();
  current_function_decl = 0;
  push_scope ();
  external_scope = current_scope;
  input_location.file = "<built-in>";
  input_location.line = 0;
  build_common_tree_nodes (flag_signed_char);
  c_common_nodes_and_builtins ();
  c_global_trees[CTI_TRUTHVALUE_TYPE] = integer_types[itk_int];
  c_global_trees[CTI_TRUTHVALUE_TRUE] = global_trees[TI_INTEGER_ONE];
  c_global_trees[CTI_TRUTHVALUE_FALSE] = global_trees[TI_INTEGER_ZERO];
  pushdecl (build_decl_stat (TYPE_DECL,get_identifier ("_Bool"),global_trees[TI_BOOLEAN_TYPE] )
                     );
  endlink = global_trees[TI_VOID_LIST_NODE];
  ptr_ftype_void = build_function_type (global_trees[TI_PTR_TYPE], endlink);
  ptr_ftype_ptr
    = build_function_type (global_trees[TI_PTR_TYPE],
      tree_cons_stat ((tree) ((void *)0),global_trees[TI_PTR_TYPE],endlink ));
  input_location = save_loc;
  pedantic_lvalues = 1;
  make_fname_decl = c_make_fname_decl;
  start_fname_decls ();
}
static tree
c_make_fname_decl (tree id, int type_dep)
{
  const char *name = fname_as_string1 (type_dep);
  tree decl, type, init;
  size_t length = strlen (name);
  type = build_array_type
          (build_qualified_type (integer_types[itk_char], 0x1),
    build_index_type (size_int_wide ((long) (length), SIZETYPE)));
  decl = build_decl_stat (VAR_DECL,id,type );
  ((decl)->common.static_flag) = 1;
  ((decl)->common.readonly_flag) = 1;
  ((decl)->decl.artificial_flag) = 1;
  init = build_string1 (length + 1, name);
  free ((char *) name);
  ((init)->common.type) = type;
  ((decl)->decl.initial) = init;
  ((decl)->common.used_flag) = 1;
  if (current_function_decl)
    {
      ((decl)->decl.context) = current_function_decl;
      bind (id, decl, current_function_scope,
                   0, 0);
    }
  finish_decl (decl, init, (tree) ((void *)0));
  return decl;
}
tree
builtin_function (const char *name, tree type, int function_code,
    enum built_in_class class, const char *library_name,
    tree attrs1)
{
  tree id = get_identifier (name);
  tree decl = build_decl_stat (FUNCTION_DECL,id,type );
  ((decl)->common.public_flag) = 1;
  ((decl)->decl.external_flag) = 1;
  ((decl)->decl.lang_specific) = ggc_alloc_cleared_stat (sizeof (struct lang_decl) );
  ((decl)->decl.built_in_class) = class;
  ((decl)->decl.u1.f) = function_code;
  if (library_name)
    ((decl)->decl.assembler_name = (get_identifier (library_name)));
  if ((((struct lang_identifier *)(id))->symbol_binding))
    fancy_abort ("gcc.c", 717349, "?");
  bind (id, decl, external_scope, 1, 0);
  if (name[0] == '_' && (name[1] == '_' || (_sch_istable[(name[1]) & 0xff] & (unsigned short)(_sch_isupper))))
    {
      ((decl)->common.chain) = visible_builtins;
      visible_builtins = decl;
    }
  if (attrs1)
    decl_attributes (&decl, attrs1, ATTR_FLAG_BUILT_IN);
  else
    decl_attributes (&decl, (tree) ((void *)0), 0);
  return decl;
}
void
shadow_tag (tree declspecs)
{
  shadow_tag_warned (declspecs, 0);
}
void
shadow_tag_warned (tree declspecs, int warned)
{
  int found_tag = 0;
  tree link;
  tree specs, attrs1;
  pending_invalid_xref = 0;
  split_specs_attrs1 (declspecs, &specs, &attrs1);
  for (link = specs; link; link = ((link)->common.chain))
    {
      tree value1 = ((link)->list.value1);
      enum tree_code code = ((enum tree_code) (value1)->common.code);
      if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
 {
   tree name = ((value1)->type.name);
   tree t;
   found_tag++;
   if (name == 0)
     {
       if (warned != 1 && code != ENUMERAL_TYPE)
  {
    pedwarn ("unnamed struct/union that defines no instances");
    warned = 1;
  }
     }
   else
     {
       t = lookup_tag (code, name, 1);
       if (t == 0)
  {
    t = make_node_stat (code );
    pushtag (name, t);
  }
     }
 }
      else
 {
   if (!warned && ! in_system_header1)
     {
       warning ("useless keyword or type name in empty declaration");
       warned = 2;
     }
 }
    }
  if (found_tag > 1)
    error ("two types specified in one empty declaration");
  if (warned != 1)
    {
      if (found_tag == 0)
 pedwarn ("empty declaration");
    }
}
tree
build_array_declarator (tree expr, tree quals, int static_p, int vla_unspec_p)
{
  tree decl;
  decl = build_nt (ARRAY_REF, (tree) ((void *)0), expr, (tree) ((void *)0), (tree) ((void *)0));
  ((decl)->common.type) = quals;
  ((decl)->common.static_flag) = (static_p ? 1 : 0);
  if (pedantic && !flag_isoc99)
    {
      if (static_p || quals != (tree) ((void *)0))
 pedwarn ("ISO C90 does not support `static' or type qualifiers in parameter array declarators");
      if (vla_unspec_p)
 pedwarn ("ISO C90 does not support `[*]' array declarators");
    }
  if (vla_unspec_p)
    warning ("GCC does not yet properly implement `[*]' array declarators");
  return decl;
}
tree
set_array_declarator_type (tree decl, tree type, int abstract_p)
{
  ((decl)->exp.operands[0]) = type;
  if (abstract_p && (((decl)->common.type) != (tree) ((void *)0) || ((decl)->common.static_flag)))
    error ("static or type qualifiers in abstract declarator");
  return decl;
}
tree
groktypename (tree typename)
{
  tree specs, attrs1;
  if (((enum tree_code) (typename)->common.code) != TREE_LIST)
    return typename;
  split_specs_attrs1 (((typename)->list.purpose), &specs, &attrs1);
  typename = grokdeclarator (((typename)->list.value1), specs, TYPENAME, 0,
        ((void *)0));
  decl_attributes (&typename, attrs1, 0);
  return typename;
}
tree
groktypename_in_parm_context (tree typename)
{
  if (((enum tree_code) (typename)->common.code) != TREE_LIST)
    return typename;
  return grokdeclarator (((typename)->list.value1),
    ((typename)->list.purpose),
    PARM, 0, ((void *)0));
}
tree
start_decl (tree declarator, tree declspecs, int initialized, tree attributes)
{
  tree decl;
  tree tem;
  if (lookup_attribute ("deprecated", attributes))
    deprecated_state = DEPRECATED_SUPPRESS;
  decl = grokdeclarator (declarator, declspecs,
    NORMAL, initialized, ((void *)0));
  deprecated_state = DEPRECATED_NORMAL;
  if (warn_main > 0 && ((enum tree_code) (decl)->common.code) != FUNCTION_DECL
      && ((((decl)->decl.name)) == global_trees[TI_MAIN_IDENTIFIER]))
    warning ("%J'%D' is usually a function", decl, decl);
  if (initialized)
    switch (((enum tree_code) (decl)->common.code))
      {
      case TYPE_DECL:
 error ("typedef '%D' is initialized (use __typeof__ instead)", decl);
 initialized = 0;
 break;
      case FUNCTION_DECL:
 error ("function '%D' is initialized like a variable", decl);
 initialized = 0;
 break;
      case PARM_DECL:
 error ("parameter '%D' is initialized", decl);
 initialized = 0;
 break;
      default:
 if (((decl)->common.type) == global_trees[TI_ERROR_MARK])
   initialized = 0;
 else if ((((((decl)->common.type))->type.size) != (tree) ((void *)0)))
   {
     if (((enum tree_code) (((((decl)->common.type))->type.size))->common.code) != INTEGER_CST
  || ((decl)->decl.lang_flag_0))
       {
  error ("variable-sized object may not be initialized");
  initialized = 0;
       }
   }
 else if (((enum tree_code) (((decl)->common.type))->common.code) != ARRAY_TYPE)
   {
     error ("variable '%D' has initializer but incomplete type", decl);
     initialized = 0;
   }
 else if (!(((((((decl)->common.type))->common.type))->type.size) != (tree) ((void *)0)))
   {
     error ("elements of array '%D' have incomplete type", decl);
     initialized = 0;
   }
      }
  if (initialized)
    {
      ((decl)->decl.external_flag) = 0;
      if (current_scope == file_scope)
 ((decl)->common.static_flag) = 1;
      ((decl)->decl.initial) = global_trees[TI_ERROR_MARK];
    }
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
    gen_aux_info_record (decl, 0, 0, ((((decl)->common.type))->type.value1s) != 0);
  if (((enum tree_code) (decl)->common.code) == VAR_DECL
      && !initialized
      && ((decl)->common.public_flag)
      && !((decl)->decl.thread_local_flag)
      && !flag_no_common)
    ((decl)->decl.common_flag) = 1;
  decl_attributes (&decl, attributes, 0);
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL
      && targetm.calls.promote_prototypes (((decl)->common.type)))
    {
      tree ce = declarator;
      if (((enum tree_code) (ce)->common.code) == INDIRECT_REF)
 ce = ((declarator)->exp.operands[0]);
      if (((enum tree_code) (ce)->common.code) == CALL_EXPR)
 {
   tree args = ((((ce)->exp.operands[1]))->list.purpose);
   for (; args; args = ((args)->common.chain))
     {
       tree type = ((args)->common.type);
       if (type && (((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
    && ((type)->type.precision) < ((integer_types[itk_int])->type.precision))
  ((args)->decl.initial) = integer_types[itk_int];
     }
 }
    }
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL
      && ((decl)->decl.declared_inline_flag)
      && ((decl)->decl.uninlinable)
      && lookup_attribute ("noinline", ((decl)->decl.attributes)))
    warning ("%Jinline function '%D' given attribute noinline", decl, decl);
  tem = pushdecl (decl);
  return tem;
}
void
finish_decl (tree decl, tree init, tree asmspec_tree)
{
  tree type = ((decl)->common.type);
  int was_incomplete = (((decl)->decl.size) == 0);
  const char *asmspec = 0;
  if (current_scope == file_scope)
    asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
  if (asmspec_tree)
    asmspec = ((asmspec_tree)->string11.pointer);
  if (init != 0 && ((decl)->decl.initial) == 0)
    init = 0;
  if (((enum tree_code) (decl)->common.code) == PARM_DECL)
    init = 0;
  if (init)
    store_init_value (decl, init);
  if ((c_language & clk_objc) && (((enum tree_code) (decl)->common.code) == VAR_DECL
      || ((enum tree_code) (decl)->common.code) == FUNCTION_DECL
      || ((enum tree_code) (decl)->common.code) == FIELD_DECL))
    objc_check_decl (decl);
  if (((enum tree_code) (type)->common.code) == ARRAY_TYPE
      && ((type)->type.value1s) == 0
      && ((enum tree_code) (decl)->common.code) != TYPE_DECL)
    {
      int do_default
 = (((decl)->common.static_flag)
    ? pedantic && !((decl)->common.public_flag)
    : !((decl)->decl.external_flag));
      int failure
 = complete_array_type (type, ((decl)->decl.initial), do_default);
      type = ((decl)->common.type);
      if (failure == 1)
 error ("%Jinitializer fails to determine size of '%D'", decl, decl);
      else if (failure == 2)
 {
   if (do_default)
     error ("%Jarray size missing in '%D'", decl, decl);
   else if (!pedantic && ((decl)->common.static_flag) && ! ((decl)->common.public_flag))
     ((decl)->decl.external_flag) = 1;
 }
      else if (pedantic && ((type)->type.value1s) != 0
       && tree_int_cst_sgn (((((type)->type.value1s))->type.maxval)) < 0)
 error ("%Jzero or negative size array '%D'", decl, decl);
      layout_decl (decl, 0);
    }
  if (((enum tree_code) (decl)->common.code) == VAR_DECL)
    {
      if (((decl)->decl.size) == 0 && ((decl)->common.type) != global_trees[TI_ERROR_MARK]
   && (((((decl)->common.type))->type.size) != (tree) ((void *)0)))
 layout_decl (decl, 0);
      if (((decl)->decl.size) == 0
   && ((decl)->common.type) != global_trees[TI_ERROR_MARK]
   && (((decl)->common.static_flag)
       ?
  (((decl)->decl.initial) != 0
   || !(! ((decl)->decl.context) || ((enum tree_code) (((decl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL))
       :
  !((decl)->decl.external_flag)))
 {
   error ("%Jstorage size of '%D' isn't known", decl, decl);
   ((decl)->common.type) = global_trees[TI_ERROR_MARK];
 }
      if ((((decl)->decl.external_flag) || ((decl)->common.static_flag))
   && ((decl)->decl.size) != 0)
 {
   if (((enum tree_code) (((decl)->decl.size))->common.code) == INTEGER_CST)
     constant_expression_warning (((decl)->decl.size));
   else
     error ("%Jstorage size of '%D' isn't constant", decl, decl);
 }
      if (((type)->common.used_flag))
 ((decl)->common.used_flag) = 1;
    }
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL && asmspec)
    {
      char *starred = C_alloca(strlen (asmspec) + 2);
      starred[0] = '*';
      strcpy (starred + 1, asmspec);
      if (((decl)->decl.built_in_class) == BUILT_IN_NORMAL)
 {
   tree builtin = built_in_decls [((decl)->decl.u1.f)];
   set_decl_rtl (builtin, (rtx) 0);
   change_decl_assembler_name (builtin, get_identifier (starred));
   if (((decl)->decl.u1.f) == BUILT_IN_MEMCPY)
     init_block_move_fn (starred);
   else if (((decl)->decl.u1.f) == BUILT_IN_MEMSET)
     init_block_clear_fn (starred);
 }
      set_decl_rtl (decl, (rtx) 0);
      change_decl_assembler_name (decl, get_identifier (starred));
    }
  if (current_scope == file_scope)
    maybe_apply_pragma_weak (decl);
  if (((enum tree_code) (decl)->common.code) == VAR_DECL || ((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
    {
      if ((c_language & clk_objc))
 objc_check_decl (decl);
      if ((! ((decl)->decl.context) || ((enum tree_code) (((decl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL))
 {
   if (((decl)->decl.initial) == (tree) ((void *)0)
       || ((decl)->decl.initial) == global_trees[TI_ERROR_MARK])
     ((decl)->decl.defer_output) = 1;
   rest_of_decl_compilation (decl, asmspec, 1, 0);
 }
      else
 {
   if (asmspec)
     {
       if (((decl)->decl.lang_flag_4))
  {
    ((decl)->decl.inline_flag) = 1;
    if (!((decl)->decl.regdecl_flag))
      error ("cannot put object with volatile field into register");
  }
       if (((enum tree_code) (decl)->common.code) == VAR_DECL
    && !((decl)->decl.lang_flag_4)
    && !((decl)->common.static_flag))
  warning ("%Jignoring asm-specifier for non-static local variable '%D'", decl, decl);
       else
  change_decl_assembler_name (decl, get_identifier (asmspec));
     }
   if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL)
     add_stmt (build_stmt (DECL_EXPR, decl));
 }
      if (!(! ((decl)->decl.context) || ((enum tree_code) (((decl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL))
 {
   if (was_incomplete
       && ! ((decl)->common.static_flag) && ! ((decl)->decl.external_flag))
     {
       ((decl)->common.addressable_flag) = ((decl)->common.used_flag);
       if (((decl)->decl.size) == 0)
  ((decl)->decl.initial) = 0;
     }
 }
    }
  if (lookup_attribute ("used", ((decl)->decl.attributes)))
    mark_decl_referenced (decl);
  if (((enum tree_code) (decl)->common.code) == TYPE_DECL)
    {
      if (!(! ((decl)->decl.context) || ((enum tree_code) (((decl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL)
   && variably_modified_type_p (((decl)->common.type), (tree) ((void *)0)))
 add_stmt (build_stmt (DECL_EXPR, decl));
      rest_of_decl_compilation (decl, ((void *)0), (! ((decl)->decl.context) || ((enum tree_code) (((decl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL), 0);
    }
  if (current_scope == file_scope)
    get_pending_sizes ();
  if (((enum tree_code) (decl)->common.code) == VAR_DECL && !((decl)->common.static_flag))
    {
      tree attr = lookup_attribute ("cleanup", ((decl)->decl.attributes));
      if (attr)
 {
   tree cleanup_id = ((((attr)->list.value1))->list.value1);
   tree cleanup_decl = lookup_name (cleanup_id);
   tree cleanup;
   cleanup = build_unary_op (ADDR_EXPR, decl, 0);
   cleanup = build_tree_list_stat((tree) ((void *)0),cleanup );
   cleanup = build_function_call (cleanup_decl, cleanup);
   ((decl)->common.used_flag) = 1;
   ((cleanup_decl)->common.used_flag) = 1;
   if (flag_exceptions && !c_eh_initialized_p)
     {
       c_eh_initialized_p = 1;
       (libfunc_table[LTI_eh_personality])
  = init_one_libfunc (0
        ? "__gcc_personality_sj0"
        : "__gcc_personality_v0");
       using_eh_for_cleanups ();
     }
   push_cleanup (decl, cleanup, 0);
 }
    }
}
void
push_parm_decl (tree parm)
{
  tree decl;
  decl = grokdeclarator (((((parm)->list.purpose))->list.value1),
    ((((parm)->list.purpose))->list.purpose),
    PARM, 0, ((void *)0));
  decl_attributes (&decl, ((parm)->list.value1), 0);
  decl = pushdecl (decl);
  finish_decl (decl, (tree) ((void *)0), (tree) ((void *)0));
}
void
mark_forward_parm_decls (void)
{
  struct c_binding *b;
  if (pedantic && !current_scope->warned_forward_parm_decls)
    {
      pedwarn ("ISO C forbids forward parameter declarations");
      current_scope->warned_forward_parm_decls = 1;
    }
  for (b = current_scope->bindings; b; b = b->prev)
    if (((enum tree_code) (b->decl)->common.code) == PARM_DECL)
      ((b->decl)->common.asm_written_flag) = 1;
}
static int compound_literal_number;
tree
build_compound_literal (tree type, tree init)
{
  tree decl = build_decl_stat (VAR_DECL,(tree) ((void *)0),type );
  tree complit;
  tree stmt;
  ((decl)->decl.external_flag) = 0;
  ((decl)->common.public_flag) = 0;
  ((decl)->common.static_flag) = (current_scope == file_scope);
  ((decl)->decl.context) = current_function_decl;
  ((decl)->common.used_flag) = 1;
  ((decl)->common.type) = type;
  ((decl)->common.readonly_flag) = ((type)->common.readonly_flag);
  store_init_value (decl, init);
  if (((enum tree_code) (type)->common.code) == ARRAY_TYPE && !(((type)->type.size) != (tree) ((void *)0)))
    {
      int failure = complete_array_type (type, ((decl)->decl.initial), 1);
      if (failure)
 fancy_abort ("gcc.c", 718035, "?");
    }
  type = ((decl)->common.type);
  if (type == global_trees[TI_ERROR_MARK] || !(((type)->type.size) != (tree) ((void *)0)))
    return global_trees[TI_ERROR_MARK];
  stmt = build_stmt (DECL_EXPR, decl);
  complit = build1_stat (COMPOUND_LITERAL_EXPR,((decl)->common.type),stmt );
  ((complit)->common.side_effects_flag) = 1;
  layout_decl (decl, 0);
  if (((decl)->common.static_flag))
    {
      char *name;
      do { const char *const name_ = ("__compound_literal"); char *const output_ = (name) = C_alloca(strlen (name_) + 32); sprintf (output_, "%s.%lu", name_, (unsigned long)(compound_literal_number)); } while (0)
                                  ;
      compound_literal_number++;
      ((decl)->decl.name) = get_identifier (name);
      ((decl)->decl.defer_output) = 1;
      ((decl)->decl.comdat_flag) = 1;
      ((decl)->decl.artificial_flag) = 1;
      pushdecl (decl);
      rest_of_decl_compilation (decl, ((void *)0), 1, 0);
    }
  return complit;
}
int
complete_array_type (tree type, tree initial_value1, int do_default)
{
  tree maxindex = (tree) ((void *)0);
  int value1 = 0;
  if (initial_value)
    {
      if (((enum tree_code) (initial_value)->common.code) == STRING1_CST)
 {
   int eltsize
     = int_size_in_bytes (((((initial_value)->common.type))->common.type));
   maxindex = build_int_2_wide ((unsigned long) ((((initial_value)->string11.length) / eltsize) - 1), (long) (0))
                         ;
 }
      else if (((enum tree_code) (initial_value)->common.code) == CONSTRUCTOR)
 {
   tree elts = ((initial_value)->exp.operands[0]);
   maxindex = build_int_2_wide ((unsigned long) (-1), (long) (-1));
   for (; elts; elts = ((elts)->common.chain))
     {
       if (((elts)->list.purpose))
  maxindex = ((elts)->list.purpose);
       else
  maxindex = fold (build (PLUS_EXPR, integer_types[itk_int],
     maxindex, global_trees[TI_INTEGER_ONE]));
     }
   maxindex = copy_node_stat (maxindex );
 }
      else
 {
   if (initial_value != global_trees[TI_ERROR_MARK])
     value1 = 1;
   maxindex = build_int_2_wide ((unsigned long) (0), (long) (0));
 }
    }
  if (!maxindex)
    {
      if (do_default)
 maxindex = build_int_2_wide ((unsigned long) (0), (long) (0));
      value1 = 2;
    }
  if (maxindex)
    {
      ((type)->type.value1s) = build_index_type (maxindex);
      if (!((maxindex)->common.type))
 ((maxindex)->common.type) = ((type)->type.value1s);
    }
  layout_type (type);
  return value1;
}
static unsigned char
flexible_array_type_p (tree type)
{
  tree x;
  switch (((enum tree_code) (type)->common.code))
    {
    case RECORD_TYPE:
      x = ((type)->type.value1s);
      if (x == (tree) ((void *)0))
 return 0;
      while (((x)->common.chain) != (tree) ((void *)0))
 x = ((x)->common.chain);
      if (((enum tree_code) (((x)->common.type))->common.code) == ARRAY_TYPE
   && ((((x)->common.type))->type.size) == (tree) ((void *)0)
   && ((((x)->common.type))->type.value1s) != (tree) ((void *)0)
   && ((((((x)->common.type))->type.value1s))->type.maxval) == (tree) ((void *)0))
 return 1;
      return 0;
    case UNION_TYPE:
      for (x = ((type)->type.value1s); x != (tree) ((void *)0); x = ((x)->common.chain))
 {
   if (flexible_array_type_p (((x)->common.type)))
     return 1;
 }
      return 0;
    default:
    return 0;
  }
}
static void
check_bitfield_type_and_width (tree *type, tree *width, const char *orig_name)
{
  tree type_mv;
  unsigned int max_width;
  unsigned long w;
  const char *name = orig_name ? orig_name: "<anonymous>";
  while ((((enum tree_code) (*width)->common.code) == NOP_EXPR || ((enum tree_code) (*width)->common.code) == CONVERT_EXPR || ((enum tree_code) (*width)->common.code) == NON_LVALUE_EXPR) && ((*width)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((*width)->common.type))->type.mode) == ((((((*width)->exp.operands[0]))->common.type))->type.mode))) (*width) = ((*width)->exp.operands[0]);
  if (((enum tree_code) (*width)->common.code) != INTEGER_CST)
    {
      error ("bit-field `%s' width not an integer constant", name);
      *width = global_trees[TI_INTEGER_ONE];
    }
  else
    {
      constant_expression_warning (*width);
      if (tree_int_cst_sgn (*width) < 0)
 {
   error ("negative width in bit-field `%s'", name);
   *width = global_trees[TI_INTEGER_ONE];
 }
      else if (integer_zerop (*width) && orig_name)
 {
   error ("zero width for bit-field `%s'", name);
   *width = global_trees[TI_INTEGER_ONE];
 }
    }
  if (((enum tree_code) (*type)->common.code) != INTEGER_TYPE
      && ((enum tree_code) (*type)->common.code) != BOOLEAN_TYPE
      && ((enum tree_code) (*type)->common.code) != ENUMERAL_TYPE)
    {
      error ("bit-field `%s' has invalid type", name);
      *type = integer_types[itk_unsigned_int];
    }
  type_mv = ((*type)->type.main_variant);
  if (pedantic
      && type_mv != integer_types[itk_int]
      && type_mv != integer_types[itk_unsigned_int]
      && type_mv != global_trees[TI_BOOLEAN_TYPE])
    pedwarn ("type of bit-field `%s' is a GCC extension", name);
  if (type_mv == global_trees[TI_BOOLEAN_TYPE])
    max_width = 8;
  else
    max_width = ((*type)->type.precision);
  if (0 < compare_tree_int (*width, max_width))
    {
      error ("width of `%s' exceeds its type", name);
      w = max_width;
      *width = build_int_2_wide ((unsigned long) (w), (long) (0));
    }
  else
    w = tree_low_cst (*width, 1);
  if (((enum tree_code) (*type)->common.code) == ENUMERAL_TYPE)
    {
      struct lang_type *lt = ((*type)->type.lang_specific);
      if (!lt
          || w < min_precision (lt->enum_min, ((*type)->common.unsigned_flag))
   || w < min_precision (lt->enum_max, ((*type)->common.unsigned_flag)))
 warning ("`%s' is narrower than values of its type", name);
    }
}
static tree
grokdeclarator (tree declarator, tree declspecs,
  enum decl_context decl_context, int initialized, tree *width)
{
  int specbits = 0;
  tree spec;
  tree type = (tree) ((void *)0);
  int longlong = 0;
  int constp;
  int restrictp;
  int volatilep;
  int type_quals = 0x0;
  int inlinep;
  int explicit_int = 0;
  int explicit_char = 0;
  int defaulted_int = 0;
  tree typedef_decl = 0;
  const char *name, *orig_name;
  tree typedef_type = 0;
  int funcdef_flag = 0;
  enum tree_code innermost_code = ERROR_MARK;
  int size_varies = 0;
  tree decl_attr = (tree) ((void *)0);
  tree array_ptr_quals = (tree) ((void *)0);
  int array_parm_static = 0;
  tree returned_attrs1 = (tree) ((void *)0);
  unsigned char bitfield = width != ((void *)0);
  tree element_type;
  tree arg_info = (tree) ((void *)0);
  if (decl_context == FUNCDEF)
    funcdef_flag = 1, decl_context = NORMAL;
  {
    tree decl = declarator;
    name = 0;
    while (decl)
      switch (((enum tree_code) (decl)->common.code))
 {
 case ARRAY_REF:
 case INDIRECT_REF:
 case CALL_EXPR:
   innermost_code = ((enum tree_code) (decl)->common.code);
   decl = ((decl)->exp.operands[0]);
   break;
 case TREE_LIST:
   decl = ((decl)->list.value1);
   break;
 case IDENTIFIER_NODE:
   name = ((const char *) (decl)->identifier.id.str);
   decl = 0;
   break;
 default:
   fancy_abort ("gcc.c", 718332, "?");
 }
    orig_name = name;
    if (name == 0)
      name = "type name";
  }
  if (funcdef_flag && innermost_code != CALL_EXPR)
    return 0;
  if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
    decl_context = PARM;
  for (spec = declspecs; spec; spec = ((spec)->common.chain))
    {
      tree id = ((spec)->list.value1);
      if (id && ((id)->common.deprecated_flag))
        {
   if (deprecated_state != DEPRECATED_SUPPRESS)
     warn_deprecated_use (id);
        }
      if (id == ridpointers[(int) RID_INT])
 explicit_int = 1;
      if (id == ridpointers[(int) RID_CHAR])
 explicit_char = 1;
      if (((enum tree_code) (id)->common.code) == IDENTIFIER_NODE && ((id)->common.lang_flag_0))
 {
   enum rid i = (((struct c_common_identifier *) (id))->node.rid_code);
   if ((int) i <= (int) RID_LAST_MODIFIER)
     {
       if (i == RID_LONG && (specbits & (1 << (int) RID_LONG)))
  {
    if (longlong)
      error ("`long long long' is too long for GCC");
    else
      {
        if (pedantic && !flag_isoc99 && ! in_system_header1
     && warn_long_long)
   pedwarn ("ISO C90 does not support `long long'");
        longlong = 1;
      }
  }
       else if (specbits & (1 << (int) i))
  {
    if (i == RID_CONST || i == RID_VOLATILE || i == RID_RESTRICT)
      {
        if (pedantic && !flag_isoc99)
   pedwarn ("duplicate `%s'", ((const char *) (id)->identifier.id.str));
      }
    else
      error ("duplicate `%s'", ((const char *) (id)->identifier.id.str));
  }
       if (i == RID_THREAD
    && (specbits & (1 << (int) RID_EXTERN
      | 1 << (int) RID_STATIC)))
  {
    if (specbits & 1 << (int) RID_EXTERN)
      error ("`__thread' before `extern'");
    else
      error ("`__thread' before `static'");
  }
       specbits |= 1 << (int) i;
       goto found;
     }
 }
      if (type)
 error ("two or more data types in declaration of `%s'", name);
      else if (((enum tree_code) (id)->common.code) == TYPE_DECL)
 {
   if (((id)->common.type) == global_trees[TI_ERROR_MARK])
     ;
   else
     {
       type = ((id)->common.type);
       decl_attr = ((id)->decl.attributes);
       typedef_decl = id;
     }
 }
      else if (((enum tree_code) (id)->common.code) == IDENTIFIER_NODE)
 {
   tree t = lookup_name (id);
    if (!t || ((enum tree_code) (t)->common.code) != TYPE_DECL)
     error ("`%s' fails to be a typedef or built in type",
     ((const char *) (id)->identifier.id.str));
    else if (((t)->common.type) == global_trees[TI_ERROR_MARK])
     ;
   else
     {
       type = ((t)->common.type);
       typedef_decl = t;
     }
 }
      else if (((enum tree_code) (id)->common.code) != ERROR_MARK)
 type = id;
    found:
      ;
    }
  typedef_type = type;
  if (type)
    size_varies = ((type)->type.lang_flag_1);
  if (type == 0)
    {
      if ((! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
     | (1 << (int) RID_SIGNED)
     | (1 << (int) RID_UNSIGNED)
     | (1 << (int) RID_COMPLEX))))
   && ! (specbits & (1 << (int) RID_TYPEDEF) && initialized)
   && ! in_system_header1)
 {
   if ((warn_implicit_int || warn_return_type || flag_isoc99)
       && funcdef_flag)
     warn_about_return_type = 1;
   else if (warn_implicit_int || flag_isoc99)
     pedwarn_c99 ("type defaults to `int' in declaration of `%s'",
    name);
 }
      defaulted_int = 1;
      type = integer_types[itk_int];
    }
  if ((specbits & 1 << (int) RID_LONG) && ! longlong
      && ((type)->type.main_variant) == global_trees[TI_DOUBLE_TYPE])
    {
      specbits &= ~(1 << (int) RID_LONG);
      type = global_trees[TI_LONG_DOUBLE_TYPE];
    }
  if (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
    | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED)))
    {
      int ok = 0;
      if ((specbits & 1 << (int) RID_LONG)
   && (specbits & 1 << (int) RID_SHORT))
 error ("both long and short specified for `%s'", name);
      else if (((specbits & 1 << (int) RID_LONG)
  || (specbits & 1 << (int) RID_SHORT))
        && explicit_char)
 error ("long or short specified with char for `%s'", name);
      else if (((specbits & 1 << (int) RID_LONG)
  || (specbits & 1 << (int) RID_SHORT))
        && ((enum tree_code) (type)->common.code) == REAL_TYPE)
 {
   static int already = 0;
   error ("long or short specified with floating type for `%s'", name);
   if (! already && ! pedantic)
     {
       error ("the only valid combination is `long double'");
       already = 1;
     }
 }
      else if ((specbits & 1 << (int) RID_SIGNED)
        && (specbits & 1 << (int) RID_UNSIGNED))
 error ("both signed and unsigned specified for `%s'", name);
      else if (((enum tree_code) (type)->common.code) != INTEGER_TYPE)
 error ("long, short, signed or unsigned invalid for `%s'", name);
      else
 {
   ok = 1;
   if (!explicit_int && !defaulted_int && !explicit_char)
     {
       error ("long, short, signed or unsigned used invalidly for `%s'",
       name);
       ok = 0;
     }
 }
      if (! ok)
 {
   specbits &= ~((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
   | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED));
   longlong = 0;
 }
    }
  if ((specbits & (1 << (int) RID_COMPLEX))
      && ((enum tree_code) (type)->common.code) != INTEGER_TYPE && ((enum tree_code) (type)->common.code) != REAL_TYPE)
    {
      error ("complex invalid for `%s'", name);
      specbits &= ~(1 << (int) RID_COMPLEX);
    }
  if (specbits & 1 << (int) RID_UNSIGNED
      || (bitfield && ! flag_signed_bitfields
   && (explicit_int || defaulted_int || explicit_char
       || ! (typedef_decl != 0
      && ((typedef_decl)->decl.lang_flag_1)))
   && ((enum tree_code) (type)->common.code) != ENUMERAL_TYPE
   && !(specbits & 1 << (int) RID_SIGNED)))
    {
      if (longlong)
 type = integer_types[itk_unsigned_long_long];
      else if (specbits & 1 << (int) RID_LONG)
 type = integer_types[itk_unsigned_long];
      else if (specbits & 1 << (int) RID_SHORT)
 type = integer_types[itk_unsigned_short];
      else if (type == integer_types[itk_char])
 type = integer_types[itk_unsigned_char];
      else if (typedef_decl)
 type = c_common_unsigned_type (type);
      else
 type = integer_types[itk_unsigned_int];
    }
  else if ((specbits & 1 << (int) RID_SIGNED)
    && type == integer_types[itk_char])
    type = integer_types[itk_signed_char];
  else if (longlong)
    type = integer_types[itk_long_long];
  else if (specbits & 1 << (int) RID_LONG)
    type = integer_types[itk_long];
  else if (specbits & 1 << (int) RID_SHORT)
    type = integer_types[itk_short];
  if (specbits & 1 << (int) RID_COMPLEX)
    {
      if (pedantic && !flag_isoc99)
 pedwarn ("ISO C90 does not support complex types");
      if (defaulted_int && ! longlong
   && ! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
       | (1 << (int) RID_SIGNED)
       | (1 << (int) RID_UNSIGNED))))
 {
   if (pedantic)
     pedwarn ("ISO C does not support plain `complex' meaning `double complex'");
   type = global_trees[TI_COMPLEX_DOUBLE_TYPE];
 }
      else if (type == integer_types[itk_int])
 {
   if (pedantic)
     pedwarn ("ISO C does not support complex integer types");
   type = global_trees[TI_COMPLEX_INTEGER_TYPE];
 }
      else if (type == global_trees[TI_FLOAT_TYPE])
 type = global_trees[TI_COMPLEX_FLOAT_TYPE];
      else if (type == global_trees[TI_DOUBLE_TYPE])
 type = global_trees[TI_COMPLEX_DOUBLE_TYPE];
      else if (type == global_trees[TI_LONG_DOUBLE_TYPE])
 type = global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE];
      else
 {
   if (pedantic)
     pedwarn ("ISO C does not support complex integer types");
   type = build_complex_type (type);
 }
    }
  if (bitfield)
    check_bitfield_type_and_width (&type, width, orig_name);
  element_type = strip_array_types (type);
  constp = !! (specbits & 1 << (int) RID_CONST) + ((element_type)->common.readonly_flag);
  restrictp
    = !! (specbits & 1 << (int) RID_RESTRICT) + ((element_type)->type.restrict_flag);
  volatilep
    = !! (specbits & 1 << (int) RID_VOLATILE) + ((element_type)->common.volatile_flag);
  inlinep = !! (specbits & (1 << (int) RID_INLINE));
  if (pedantic && !flag_isoc99)
    {
      if (constp > 1)
 pedwarn ("duplicate `const'");
      if (restrictp > 1)
 pedwarn ("duplicate `restrict'");
      if (volatilep > 1)
 pedwarn ("duplicate `volatile'");
    }
  if (! flag_gen_aux_info && (((((type)->common.readonly_flag) * 0x1) | (((type)->common.volatile_flag) * 0x2) | (((type)->type.restrict_flag) * 0x4))))
    type = ((type)->type.main_variant);
  type_quals = ((constp ? 0x1 : 0)
  | (restrictp ? 0x4 : 0)
  | (volatilep ? 0x2 : 0));
  {
    int nclasses = 0;
    if (specbits & 1 << (int) RID_AUTO) nclasses++;
    if (specbits & 1 << (int) RID_STATIC) nclasses++;
    if (specbits & 1 << (int) RID_EXTERN) nclasses++;
    if (specbits & 1 << (int) RID_REGISTER) nclasses++;
    if (specbits & 1 << (int) RID_TYPEDEF) nclasses++;
    if ((specbits & (1 << (int) RID_THREAD
       | 1 << (int) RID_STATIC
       | 1 << (int) RID_EXTERN)) == (1 << (int) RID_THREAD))
      nclasses++;
    if (nclasses > 1)
      error ("multiple storage classes in declaration of `%s'", name);
    else if (funcdef_flag
      && (specbits
   & ((1 << (int) RID_REGISTER)
      | (1 << (int) RID_AUTO)
      | (1 << (int) RID_TYPEDEF)
      | (1 << (int) RID_THREAD))))
      {
 if (specbits & 1 << (int) RID_AUTO
     && (pedantic || current_scope == file_scope))
   pedwarn ("function definition declared `auto'");
 if (specbits & 1 << (int) RID_REGISTER)
   error ("function definition declared `register'");
 if (specbits & 1 << (int) RID_TYPEDEF)
   error ("function definition declared `typedef'");
 if (specbits & 1 << (int) RID_THREAD)
   error ("function definition declared `__thread'");
 specbits &= ~((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
        | (1 << (int) RID_AUTO) | (1 << (int) RID_THREAD));
      }
    else if (decl_context != NORMAL && nclasses > 0)
      {
 if (decl_context == PARM && specbits & 1 << (int) RID_REGISTER)
   ;
 else
   {
     switch (decl_context)
       {
       case FIELD:
  error ("storage class specified for structure field `%s'",
         name);
  break;
       case PARM:
  error ("storage class specified for parameter `%s'", name);
  break;
       default:
  error ("storage class specified for typename");
  break;
       }
     specbits &= ~((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
     | (1 << (int) RID_AUTO) | (1 << (int) RID_STATIC)
     | (1 << (int) RID_EXTERN) | (1 << (int) RID_THREAD));
   }
      }
    else if (specbits & 1 << (int) RID_EXTERN && initialized && ! funcdef_flag)
      {
 if (current_scope == file_scope)
   warning ("`%s' initialized and declared `extern'", name);
 else
   error ("`%s' has both `extern' and initializer", name);
      }
    else if (current_scope == file_scope)
      {
 if (specbits & 1 << (int) RID_AUTO)
   error ("file-scope declaration of `%s' specifies `auto'", name);
      }
    else
      {
 if (specbits & 1 << (int) RID_EXTERN && funcdef_flag)
   error ("nested function `%s' declared `extern'", name);
 else if ((specbits & (1 << (int) RID_THREAD
          | 1 << (int) RID_EXTERN
          | 1 << (int) RID_STATIC))
   == (1 << (int) RID_THREAD))
   {
     error ("function-scope `%s' implicitly auto and declared `__thread'",
     name);
     specbits &= ~(1 << (int) RID_THREAD);
   }
      }
  }
  while (declarator && ((enum tree_code) (declarator)->common.code) != IDENTIFIER_NODE)
    {
      if (type == global_trees[TI_ERROR_MARK])
 {
   declarator = ((declarator)->exp.operands[0]);
   continue;
 }
      if (array_ptr_quals != (tree) ((void *)0) || array_parm_static)
 {
   error ("static or type qualifiers in non-parameter array declarator");
   array_ptr_quals = (tree) ((void *)0);
   array_parm_static = 0;
 }
      if (((enum tree_code) (declarator)->common.code) == TREE_LIST)
 {
   tree attrs1 = ((declarator)->list.purpose);
   tree inner_decl;
   int attr_flags = 0;
   declarator = ((declarator)->list.value1);
   inner_decl = declarator;
   while (inner_decl != (tree) ((void *)0)
   && ((enum tree_code) (inner_decl)->common.code) == TREE_LIST)
     inner_decl = ((inner_decl)->list.value1);
   if (inner_decl == (tree) ((void *)0)
       || ((enum tree_code) (inner_decl)->common.code) == IDENTIFIER_NODE)
     attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
   else if (((enum tree_code) (inner_decl)->common.code) == CALL_EXPR)
     attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
   else if (((enum tree_code) (inner_decl)->common.code) == ARRAY_REF)
     attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
   returned_attrs1 = decl_attributes (&type,
         chainon (returned_attrs1, attrs1),
         attr_flags);
 }
      else if (((enum tree_code) (declarator)->common.code) == ARRAY_REF)
 {
   tree itype = (tree) ((void *)0);
   tree size = ((declarator)->exp.operands[1]);
   tree index_type = c_common_signed_type (sizetype_tab[(int) SIZETYPE]);
   array_ptr_quals = ((declarator)->common.type);
   array_parm_static = ((declarator)->common.static_flag);
   declarator = ((declarator)->exp.operands[0]);
   if ((((enum tree_code) (type)->common.code) == VOID_TYPE))
     {
       error ("declaration of `%s' as array of voids", name);
       type = global_trees[TI_ERROR_MARK];
     }
   if (((enum tree_code) (type)->common.code) == FUNCTION_TYPE)
     {
       error ("declaration of `%s' as array of functions", name);
       type = global_trees[TI_ERROR_MARK];
     }
   if (pedantic && !in_system_header1 && flexible_array_type_p (type))
     pedwarn ("invalid use of structure with flexible array member");
   if (size == global_trees[TI_ERROR_MARK])
     type = global_trees[TI_ERROR_MARK];
   if (type == global_trees[TI_ERROR_MARK])
     continue;
   if (size)
     {
       while ((((enum tree_code) (size)->common.code) == NOP_EXPR || ((enum tree_code) (size)->common.code) == CONVERT_EXPR || ((enum tree_code) (size)->common.code) == NON_LVALUE_EXPR) && ((size)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((size)->common.type) == ((((size)->exp.operands[0]))->common.type))) (size) = ((size)->exp.operands[0]);
       if (! (((enum tree_code) (((size)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((size)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((size)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((size)->common.type))->common.code) == CHAR_TYPE))
  {
    error ("size of array `%s' has non-integer type", name);
    size = global_trees[TI_INTEGER_ONE];
  }
       if (pedantic && integer_zerop (size))
  pedwarn ("ISO C forbids zero-size array `%s'", name);
       if (((enum tree_code) (size)->common.code) == INTEGER_CST)
  {
    constant_expression_warning (size);
    if (tree_int_cst_sgn (size) < 0)
      {
        error ("size of array `%s' is negative", name);
        size = global_trees[TI_INTEGER_ONE];
      }
  }
       else
  {
    size_varies = 1;
    if (!flag_isoc99 && pedantic)
      {
        if (((size)->common.constant_flag))
   pedwarn ("ISO C90 forbids array `%s' whose size can't be evaluated",
     name);
        else
   pedwarn ("ISO C90 forbids variable-size array `%s'",
     name);
      }
  }
       if (integer_zerop (size))
  {
    itype = build_range_type (sizetype_tab[(int) SIZETYPE], size, (tree) ((void *)0));
  }
       else
  {
           itype = fold (build (MINUS_EXPR, index_type,
           convert (index_type, size),
           convert (index_type, global_trees[TI_SIZE_ONE])));
    if (((itype)->common.public_flag))
      {
        error ("size of array `%s' is too large", name);
        type = global_trees[TI_ERROR_MARK];
        continue;
      }
    if (size_varies)
      itype = variable_size (itype);
    itype = build_index_type (itype);
  }
     }
   else if (decl_context == FIELD)
     {
       if (pedantic && !flag_isoc99 && !in_system_header1)
  pedwarn ("ISO C90 does not support flexible array members");
       itype = build_range_type (sizetype_tab[(int) SIZETYPE], global_trees[TI_SIZE_ZERO], (tree) ((void *)0));
     }
   if (pedantic && !(((type)->type.size) != (tree) ((void *)0)))
     pedwarn ("array type has incomplete element type");
   type = build_array_type (type, itype);
   if (type_quals)
     type = c_build_qualified_type (type, type_quals);
   if (size_varies)
     ((type)->type.lang_flag_1) = 1;
   if (size && integer_zerop (size))
     {
       layout_type (type);
       ((type)->type.size) = global_trees[TI_BITSIZE_ZERO];
       ((type)->type.size_unit) = global_trees[TI_SIZE_ZERO];
     }
   else if (declarator && ((enum tree_code) (declarator)->common.code) == INDIRECT_REF)
     layout_type (type);
   if (decl_context != PARM
       && (array_ptr_quals != (tree) ((void *)0) || array_parm_static))
     {
       error ("static or type qualifiers in non-parameter array declarator");
       array_ptr_quals = (tree) ((void *)0);
       array_parm_static = 0;
     }
 }
      else if (((enum tree_code) (declarator)->common.code) == CALL_EXPR)
 {
   unsigned char really_funcdef = (funcdef_flag
     && (((enum tree_code) (((declarator)->exp.operands[0]))->common.code)
         == IDENTIFIER_NODE));
   tree arg_types;
   if (type == global_trees[TI_ERROR_MARK])
     continue;
   size_varies = 0;
   if (((enum tree_code) (type)->common.code) == FUNCTION_TYPE)
     {
       error ("`%s' declared as function returning a function", name);
       type = integer_types[itk_int];
     }
   if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
     {
       error ("`%s' declared as function returning an array", name);
       type = integer_types[itk_int];
     }
   arg_info = ((declarator)->exp.operands[1]);
   arg_types = grokparms (arg_info, really_funcdef);
   if (type_quals)
     {
       if ((((enum tree_code) (type)->common.code) == VOID_TYPE) && pedantic && !in_system_header1)
  pedwarn ("ISO C forbids qualified void function return type");
       else if (extra_warnings
         && !((((enum tree_code) (type)->common.code) == VOID_TYPE)
       && type_quals == 0x2))
  warning ("type qualifiers ignored on function return type");
       type = c_build_qualified_type (type, type_quals);
     }
   type_quals = 0x0;
   type = build_function_type (type, arg_types);
   declarator = ((declarator)->exp.operands[0]);
   {
     tree link;
     for (link = ((arg_info)->list.value1);
   link;
   link = ((link)->common.chain))
       ((((link)->list.value1))->type.context) = type;
   }
 }
      else if (((enum tree_code) (declarator)->common.code) == INDIRECT_REF)
 {
   if (pedantic && ((enum tree_code) (type)->common.code) == FUNCTION_TYPE
       && type_quals)
     pedwarn ("ISO C forbids qualified function types");
   if (type_quals)
     type = c_build_qualified_type (type, type_quals);
   type_quals = 0x0;
   size_varies = 0;
   type = build_pointer_type (type);
   if (((declarator)->common.type))
     {
       tree typemodlist;
       int erred = 0;
       constp = 0;
       volatilep = 0;
       restrictp = 0;
       for (typemodlist = ((declarator)->common.type); typemodlist;
     typemodlist = ((typemodlist)->common.chain))
  {
    tree qualifier = ((typemodlist)->list.value1);
    if (((qualifier)->common.lang_flag_0))
      {
        if ((((struct c_common_identifier *) (qualifier))->node.rid_code) == RID_CONST)
   constp++;
        else if ((((struct c_common_identifier *) (qualifier))->node.rid_code) == RID_VOLATILE)
   volatilep++;
        else if ((((struct c_common_identifier *) (qualifier))->node.rid_code) == RID_RESTRICT)
   restrictp++;
        else
   erred++;
      }
    else
      erred++;
  }
       if (erred)
  error ("invalid type modifier within pointer declarator");
       if (pedantic && !flag_isoc99)
  {
    if (constp > 1)
      pedwarn ("duplicate `const'");
    if (volatilep > 1)
      pedwarn ("duplicate `volatile'");
    if (restrictp > 1)
      pedwarn ("duplicate `restrict'");
  }
       type_quals = ((constp ? 0x1 : 0)
       | (restrictp ? 0x4 : 0)
       | (volatilep ? 0x2 : 0));
     }
   declarator = ((declarator)->exp.operands[0]);
 }
      else
 fancy_abort ("gcc.c", 719132, "?");
    }
  if (((enum tree_code) (type)->common.code) == ARRAY_TYPE
      && (((type)->type.size) != (tree) ((void *)0))
      && ((((type)->type.size))->common.public_flag))
    {
      error ("size of array `%s' is too large", name);
      type = global_trees[TI_ERROR_MARK];
    }
  if (specbits & (1 << (int) RID_TYPEDEF))
    {
      tree decl;
      if (pedantic && ((enum tree_code) (type)->common.code) == FUNCTION_TYPE
   && type_quals)
 pedwarn ("ISO C forbids qualified function types");
      if (type_quals)
 type = c_build_qualified_type (type, type_quals);
      decl = build_decl_stat (TYPE_DECL,declarator,type );
      if ((specbits & (1 << (int) RID_SIGNED))
   || (typedef_decl && ((typedef_decl)->decl.lang_flag_1)))
 ((decl)->decl.lang_flag_1) = 1;
      decl_attributes (&decl, returned_attrs1, 0);
      return decl;
    }
  if (type != 0 && typedef_type != 0
      && ((enum tree_code) (type)->common.code) == ARRAY_TYPE && ((type)->type.value1s) == 0
      && ((type)->type.main_variant) == ((typedef_type)->type.main_variant))
    {
      type = build_array_type (((type)->common.type), 0);
      if (size_varies)
 ((type)->type.lang_flag_1) = 1;
    }
  if (decl_context == TYPENAME)
    {
      if (pedantic && ((enum tree_code) (type)->common.code) == FUNCTION_TYPE
   && type_quals)
 pedwarn ("ISO C forbids const or volatile function types");
      if (type_quals)
 type = c_build_qualified_type (type, type_quals);
      decl_attributes (&type, returned_attrs1, 0);
      return type;
    }
  if ((((enum tree_code) (type)->common.code) == VOID_TYPE) && decl_context != PARM
      && ! ((decl_context != FIELD && ((enum tree_code) (type)->common.code) != FUNCTION_TYPE)
     && ((specbits & (1 << (int) RID_EXTERN))
  || (current_scope == file_scope
      && !(specbits
    & ((1 << (int) RID_STATIC) | (1 << (int) RID_REGISTER)))))))
    {
      error ("variable or field `%s' declared void", name);
      type = integer_types[itk_int];
    }
  {
    tree decl;
    if (decl_context == PARM)
      {
 tree type_as_written;
 tree promoted_type;
 if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
   {
     type = ((type)->common.type);
     if (type_quals)
       type = c_build_qualified_type (type, type_quals);
     type = build_pointer_type (type);
     type_quals = 0x0;
     if (array_ptr_quals)
       {
  tree new_ptr_quals, new_ptr_attrs1;
  int erred = 0;
  split_specs_attrs1 (array_ptr_quals, &new_ptr_quals, &new_ptr_attrs1);
  if (new_ptr_attrs1 != (tree) ((void *)0))
    warning ("attributes in parameter array declarator ignored");
  constp = 0;
  volatilep = 0;
  restrictp = 0;
  for (; new_ptr_quals; new_ptr_quals = ((new_ptr_quals)->common.chain))
    {
      tree qualifier = ((new_ptr_quals)->list.value1);
      if (((qualifier)->common.lang_flag_0))
        {
   if ((((struct c_common_identifier *) (qualifier))->node.rid_code) == RID_CONST)
     constp++;
   else if ((((struct c_common_identifier *) (qualifier))->node.rid_code) == RID_VOLATILE)
     volatilep++;
   else if ((((struct c_common_identifier *) (qualifier))->node.rid_code) == RID_RESTRICT)
     restrictp++;
   else
     erred++;
        }
      else
        erred++;
    }
  if (erred)
    error ("invalid type modifier within array declarator");
  type_quals = ((constp ? 0x1 : 0)
         | (restrictp ? 0x4 : 0)
         | (volatilep ? 0x2 : 0));
       }
     size_varies = 0;
   }
 else if (((enum tree_code) (type)->common.code) == FUNCTION_TYPE)
   {
     if (pedantic && type_quals)
       pedwarn ("ISO C forbids qualified function types");
     if (type_quals)
       type = c_build_qualified_type (type, type_quals);
     type = build_pointer_type (type);
     type_quals = 0x0;
   }
 else if (type_quals)
   type = c_build_qualified_type (type, type_quals);
 type_as_written = type;
 decl = build_decl_stat (PARM_DECL,declarator,type );
 if (size_varies)
   ((decl)->decl.lang_flag_0) = 1;
 if (type == global_trees[TI_ERROR_MARK])
   promoted_type = type;
 else
   promoted_type = c_type_promotes_to (type);
 ((decl)->decl.initial) = promoted_type;
 ((decl)->decl.result) = type_as_written;
      }
    else if (decl_context == FIELD)
      {
 if (((enum tree_code) (type)->common.code) == FUNCTION_TYPE)
   {
     error ("field `%s' declared as a function", name);
     type = build_pointer_type (type);
   }
 else if (((enum tree_code) (type)->common.code) != ERROR_MARK
          && !((((((enum tree_code) (type)->common.code) == ARRAY_TYPE ? ((type)->common.type) : (type))->type.size) != (tree) ((void *)0))))
   {
     error ("field `%s' has incomplete type", name);
     type = global_trees[TI_ERROR_MARK];
   }
 if (((enum tree_code) (type)->common.code) == ARRAY_TYPE && type_quals)
   type = build_array_type (c_build_qualified_type (((type)->common.type),
          type_quals),
       ((type)->type.value1s));
 decl = build_decl_stat (FIELD_DECL,declarator,type );
 ((decl)->decl.non_addressable) = bitfield;
 if (size_varies)
   ((decl)->decl.lang_flag_0) = 1;
      }
    else if (((enum tree_code) (type)->common.code) == FUNCTION_TYPE)
      {
 int extern_ref = (!(specbits & (1 << (int) RID_AUTO))
     || current_scope == file_scope);
 if (specbits & (1 << (int) RID_AUTO)
     && (pedantic || current_scope == file_scope))
   pedwarn ("invalid storage class for function `%s'", name);
 if (specbits & (1 << (int) RID_REGISTER))
   error ("invalid storage class for function `%s'", name);
 if (specbits & (1 << (int) RID_THREAD))
   error ("invalid storage class for function `%s'", name);
 if (current_scope != file_scope
     && (specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_INLINE)))
     && pedantic)
   pedwarn ("invalid storage class for function `%s'", name);
 decl = build_decl_stat (FUNCTION_DECL,declarator,type );
 decl = build_decl_attribute_variant (decl, decl_attr);
 ((decl)->decl.lang_specific)
   = ggc_alloc_cleared_stat (sizeof (struct lang_decl) );
 if (pedantic && type_quals && ! ((decl)->decl.in_system_header1_flag))
   pedwarn ("ISO C forbids qualified function types");
 if ((type_quals & 0x2)
     && !(((enum tree_code) (((((decl)->common.type))->common.type))->common.code) == VOID_TYPE))
   warning ("`noreturn' function returns non-void value");
 if (extern_ref)
   ((decl)->decl.external_flag) = 1;
 ((decl)->common.public_flag)
   = !(specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_AUTO)));
 if (funcdef_flag)
   ((decl)->decl.arguments) = arg_info;
 if (defaulted_int)
   ((decl)->decl.lang_flag_1) = 1;
 if (((declarator) == global_trees[TI_MAIN_IDENTIFIER]))
   {
     if (inlinep)
       warning ("cannot inline function `main'");
   }
 else if (inlinep)
   {
     ((decl)->decl.declared_inline_flag) = 1;
     if (initialized)
       {
  ((decl)->decl.inline_flag) = 1;
  if (specbits & (1 << (int) RID_EXTERN))
    current_extern_inline = 1;
       }
   }
 else if (flag_inline_trees == 2 && initialized)
   ((decl)->decl.inline_flag) = 1;
      }
    else
      {
 int extern_ref = !initialized && (specbits & (1 << (int) RID_EXTERN));
 if (((enum tree_code) (type)->common.code) == ARRAY_TYPE && type_quals)
   {
     int saved_align = ((type)->type.align);
     type = build_array_type (c_build_qualified_type (((type)->common.type),
            type_quals),
         ((type)->type.value1s));
     ((type)->type.align) = saved_align;
   }
 else if (type_quals)
   type = c_build_qualified_type (type, type_quals);
 if (extern_ref && current_scope != file_scope)
   {
     tree global_decl = identifier_global_value (declarator);
     tree visible_decl = lookup_name (declarator);
     if (global_decl
  && global_decl != visible_decl
  && ((enum tree_code) (global_decl)->common.code) == VAR_DECL
  && !((global_decl)->common.public_flag))
       error ("variable previously declared 'static' redeclared 'extern'");
   }
 decl = build_decl_stat (VAR_DECL,declarator,type );
 if (size_varies)
   ((decl)->decl.lang_flag_0) = 1;
 if (inlinep)
   pedwarn ("%Jvariable '%D' declared `inline'", decl, decl);
 ((decl)->decl.external_flag) = extern_ref;
 if (current_scope == file_scope)
   {
     ((decl)->common.public_flag) = !(specbits & ((1 << (int) RID_STATIC)
            | (1 << (int) RID_REGISTER)));
     ((decl)->common.static_flag) = !extern_ref;
   }
 else
   {
     ((decl)->common.static_flag) = (specbits & (1 << (int) RID_STATIC)) != 0;
     ((decl)->common.public_flag) = extern_ref;
   }
 if (specbits & 1 << (int) RID_THREAD)
   {
     if (targetm.have_tls)
       ((decl)->decl.thread_local_flag) = 1;
     else
       error ("thread-local storage not supported for this target");
   }
      }
    if (specbits & (1 << (int) RID_REGISTER))
      {
 ((decl)->decl.lang_flag_4) = 1;
 ((decl)->decl.regdecl_flag) = 1;
      }
    c_apply_type_quals_to_decl (type_quals, decl);
    if (((((decl)->common.type))->common.lang_flag_2))
      {
 int was_reg = ((decl)->decl.lang_flag_4);
 ((decl)->decl.lang_flag_4) = 0;
 ((decl)->decl.regdecl_flag) = 0;
 c_mark_addressable (decl);
 ((decl)->decl.lang_flag_4) = was_reg;
      }
    decl_attributes (&decl, returned_attrs1, 0);
    return decl;
  }
}
static tree
grokparms (tree arg_info, int funcdef_flag)
{
  tree arg_types = ((arg_info)->common.chain);
  if (warn_strict_prototypes && arg_types == 0 && !funcdef_flag
      && !in_system_header1)
    warning ("function declaration isn't a prototype");
  if (arg_types == global_trees[TI_ERROR_MARK])
    return 0;
  else if (arg_types && ((enum tree_code) (((arg_types)->list.value1))->common.code) == IDENTIFIER_NODE)
    {
      if (! funcdef_flag)
 pedwarn ("parameter names (without types) in function declaration");
      ((arg_info)->list.purpose) = ((arg_info)->common.chain);
      ((arg_info)->common.chain) = 0;
      return 0;
    }
  else
    {
      tree parm, type, typelt;
      unsigned int parmno;
      for (parm = ((arg_info)->list.purpose), typelt = arg_types, parmno = 1;
    parm;
    parm = ((parm)->common.chain), typelt = ((typelt)->common.chain), parmno++)
 {
   type = ((typelt)->list.value1);
   if (type == global_trees[TI_ERROR_MARK])
     continue;
   if (!(((type)->type.size) != (tree) ((void *)0)))
     {
       if (funcdef_flag)
  {
    if (((parm)->decl.name))
      error ("%Jparameter %u ('%D') has incomplete type",
      parm, parmno, parm);
    else
      error ("%Jparameter %u has incomplete type",
      parm, parmno);
    ((typelt)->list.value1) = global_trees[TI_ERROR_MARK];
    ((parm)->common.type) = global_trees[TI_ERROR_MARK];
  }
       else
  {
    if (((parm)->decl.name))
      warning ("%Jparameter %u ('%D') has incomplete type",
        parm, parmno, parm);
    else
      warning ("%Jparameter %u has incomplete type",
        parm, parmno);
  }
     }
 }
      return arg_types;
    }
}
tree
get_parm_info (unsigned char ellipsis)
{
  struct c_binding *b = current_scope->bindings;
  tree arg_info = make_node_stat (TREE_LIST );
  tree parms = 0;
  tree tags = 0;
  tree types = 0;
  tree others = 0;
  static unsigned char explained_incomplete_types = 0;
  unsigned char gave_void_only_once_err = 0;
  current_scope->bindings = 0;
  if (b->prev == 0
      && ((enum tree_code) (b->decl)->common.code) == PARM_DECL
      && !((b->decl)->decl.name)
      && (((enum tree_code) (((b->decl)->common.type))->common.code) == VOID_TYPE))
    {
      if (((b->decl)->common.volatile_flag)
   || ((b->decl)->common.readonly_flag)
   || ((b->decl)->decl.lang_flag_4))
 error ("'void' as only parameter may not be qualified");
      if (ellipsis)
 error ("'void' must be the only parameter");
      ((arg_info)->common.chain) = global_trees[TI_VOID_LIST_NODE];
      return arg_info;
    }
  if (!ellipsis)
    types = global_trees[TI_VOID_LIST_NODE];
  while (b)
    {
      tree decl = b->decl;
      tree type = ((decl)->common.type);
      const char *keyword;
      switch (((enum tree_code) (decl)->common.code))
 {
 case PARM_DECL:
   if (b->id)
     {
       (((struct lang_identifier *)(b->id))->symbol_binding) = b->shadowed;
     }
   if (((decl)->common.asm_written_flag))
     error ("%Jparameter '%D' has just a forward declaration",
     decl, decl);
   else if ((((enum tree_code) (type)->common.code) == VOID_TYPE) && !((decl)->decl.name))
     {
       if (!gave_void_only_once_err)
  {
    error ("'void' must be the only parameter");
    gave_void_only_once_err = 1;
  }
     }
   else
     {
       ((decl)->common.chain) = parms;
       parms = decl;
       ((decl)->decl.initial) = type;
       types = tree_cons_stat (0,type,types );
     }
   break;
 case ENUMERAL_TYPE: keyword = "enum"; goto tag;
 case UNION_TYPE: keyword = "union"; goto tag;
 case RECORD_TYPE: keyword = "struct"; goto tag;
 tag:
   if (b->id)
     {
       (((struct lang_identifier *)(b->id))->tag_binding) = b->shadowed;
     }
   if (((enum tree_code) (decl)->common.code) != UNION_TYPE || b->id != 0)
     {
       if (b->id)
  warning ("'%s %E' declared inside parameter list",
    keyword, b->id);
       else
  warning ("anonymous %s declared inside parameter list",
    keyword);
       if (! explained_incomplete_types)
  {
    warning ("its scope is only this definition or declaration, which is probably not what you want");
    explained_incomplete_types = 1;
  }
     }
   tags = tree_cons_stat (b->id,decl,tags );
   break;
 case CONST_DECL:
 case TYPE_DECL:
   ((decl)->common.chain) = others;
   others = decl;
 case ERROR_MARK:
   if (b->id)
     {
       (((struct lang_identifier *)(b->id))->symbol_binding) = b->shadowed;
     }
   break;
 case LABEL_DECL:
 case FUNCTION_DECL:
 case VAR_DECL:
 default:
   fancy_abort ("gcc.c", 719795, "?");
 }
      b = free_binding_and_advance (b);
    }
  ((arg_info)->list.purpose) = parms;
  ((arg_info)->list.value1) = tags;
  ((arg_info)->common.chain) = types;
  ((arg_info)->common.type) = others;
  return arg_info;
}
tree
xref_tag (enum tree_code code, tree name)
{
  tree ref = lookup_tag (code, name, 0);
  if (ref && ((enum tree_code) (ref)->common.code) == code)
    return ref;
  ref = make_node_stat (code );
  if (code == ENUMERAL_TYPE)
    {
      ((ref)->type.mode) = ((integer_types[itk_unsigned_int])->type.mode);
      ((ref)->type.align) = ((integer_types[itk_unsigned_int])->type.align);
      ((ref)->type.user_align) = 0;
      ((ref)->common.unsigned_flag) = 1;
      ((ref)->type.precision) = ((integer_types[itk_unsigned_int])->type.precision);
      ((ref)->type.minval) = ((integer_types[itk_unsigned_int])->type.minval);
      ((ref)->type.maxval) = ((integer_types[itk_unsigned_int])->type.maxval);
    }
  pushtag (name, ref);
  return ref;
}
tree
start_struct (enum tree_code code, tree name)
{
  tree ref = 0;
  if (name != 0)
    ref = lookup_tag (code, name, 1);
  if (ref && ((enum tree_code) (ref)->common.code) == code)
    {
      if (((ref)->type.value1s))
        {
   if (code == UNION_TYPE)
     error ("redefinition of `union %s'", ((const char *) (name)->identifier.id.str));
          else
     error ("redefinition of `struct %s'", ((const char *) (name)->identifier.id.str));
 }
    }
  else
    {
      ref = make_node_stat (code );
      pushtag (name, ref);
    }
  ((ref)->type.lang_flag_0) = 1;
  ((ref)->type.packed_flag) = flag_pack_struct;
  return ref;
}
tree
grokfield (tree declarator, tree declspecs, tree width)
{
  tree value1;
  if (declarator == (tree) ((void *)0) && width == (tree) ((void *)0))
    {
      tree type = ((declspecs)->list.value1);
      if (flag_ms_extensions && ((enum tree_code) (type)->common.code) == TYPE_DECL)
 type = ((type)->common.type);
      if (((enum tree_code) (type)->common.code) == RECORD_TYPE || ((enum tree_code) (type)->common.code) == UNION_TYPE)
 {
   if (flag_ms_extensions)
     ;
   else if (flag_iso)
     goto warn_unnamed_field;
   else if (((type)->type.name) == ((void *)0))
     ;
   else
     goto warn_unnamed_field;
 }
      else
 {
 warn_unnamed_field:
   warning ("declaration does not declare anything");
   return (tree) ((void *)0);
 }
    }
  value1 = grokdeclarator (declarator, declspecs, FIELD, 0,
     width ? &width : ((void *)0));
  finish_decl (value1, (tree) ((void *)0), (tree) ((void *)0));
  ((value1)->decl.initial) = width;
  return value1;
}
static void
detect_field_duplicates (tree fieldlist)
{
  tree x, y;
  int timeout = 10;
  if (!fieldlist)
    return;
  x = ((fieldlist)->common.chain);
  if (!x)
    return;
  do {
    timeout--;
    x = ((x)->common.chain);
  } while (timeout > 0 && x);
  if (timeout > 0)
    {
      for (x = ((fieldlist)->common.chain); x ; x = ((x)->common.chain))
 if (((x)->decl.name))
   {
     for (y = fieldlist; y != x; y = ((y)->common.chain))
       if (((y)->decl.name) == ((x)->decl.name))
  {
    error ("%Jduplicate member '%D'", x, x);
    ((x)->decl.name) = (tree) ((void *)0);
  }
   }
    }
  else
    {
      htab_t htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, ((void *)0));
      void **slot;
      for (x = fieldlist; x ; x = ((x)->common.chain))
 if ((y = ((x)->decl.name)) != 0)
   {
     slot = htab_find_slot (htab, y, INSERT);
     if (*slot)
       {
  error ("%Jduplicate member '%D'", x, x);
  ((x)->decl.name) = (tree) ((void *)0);
       }
     *slot = y;
   }
      htab_delete (htab);
    }
}
tree
finish_struct (tree t, tree fieldlist, tree attributes)
{
  tree x;
  unsigned char toplevel = file_scope == current_scope;
  int saw_named_field;
  ((t)->type.size) = 0;
  decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
  if (pedantic)
    {
      for (x = fieldlist; x; x = ((x)->common.chain))
 if (((x)->decl.name) != 0)
   break;
      if (x == 0)
 pedwarn ("%s has no %s",
   ((enum tree_code) (t)->common.code) == UNION_TYPE ? "union" : "struct",
   fieldlist ? "named members" : "members");
    }
  saw_named_field = 0;
  for (x = fieldlist; x; x = ((x)->common.chain))
    {
      ((x)->decl.context) = t;
      ((x)->decl.regdecl_flag) |= ((t)->type.packed_flag);
      if (((x)->common.readonly_flag))
 ((t)->common.lang_flag_1) = 1;
      else
 {
   tree t1 = ((x)->common.type);
   while (((enum tree_code) (t1)->common.code) == ARRAY_TYPE)
     t1 = ((t1)->common.type);
   if ((((enum tree_code) (t1)->common.code) == RECORD_TYPE || ((enum tree_code) (t1)->common.code) == UNION_TYPE)
       && ((t1)->common.lang_flag_1))
     ((t)->common.lang_flag_1) = 1;
 }
      if (((x)->common.volatile_flag))
 ((t)->common.lang_flag_2) = 1;
      if (((x)->decl.lang_flag_0))
 ((t)->type.lang_flag_1) = 1;
      if (((x)->common.type) == t)
 error ("nested redefinition of `%s'",
        ((const char *) (((t)->type.name))->identifier.id.str));
      if (((x)->decl.initial))
 {
   unsigned long width = tree_low_cst (((x)->decl.initial), 1);
   ((x)->decl.size) = size_int_wide ((long) (width), BITSIZETYPE);
   ((x)->decl.bit_field_flag) = 1;
   ((((x))->decl.lang_flag_4) = 1);
 }
      ((x)->decl.initial) = 0;
      if (((enum tree_code) (((x)->common.type))->common.code) == ARRAY_TYPE
   && ((((x)->common.type))->type.size) == (tree) ((void *)0)
   && ((((x)->common.type))->type.value1s) != (tree) ((void *)0)
   && ((((((x)->common.type))->type.value1s))->type.maxval) == (tree) ((void *)0))
 {
   if (((enum tree_code) (t)->common.code) == UNION_TYPE)
     {
       error ("%Jflexible array member in union", x);
       ((x)->common.type) = global_trees[TI_ERROR_MARK];
     }
   else if (((x)->common.chain) != (tree) ((void *)0))
     {
       error ("%Jflexible array member not at end of struct", x);
       ((x)->common.type) = global_trees[TI_ERROR_MARK];
     }
   else if (! saw_named_field)
     {
       error ("%Jflexible array member in otherwise empty struct", x);
       ((x)->common.type) = global_trees[TI_ERROR_MARK];
     }
 }
      if (pedantic && !in_system_header1 && ((enum tree_code) (t)->common.code) == RECORD_TYPE
   && flexible_array_type_p (((x)->common.type)))
 pedwarn ("%Jinvalid use of structure with flexible array member", x);
      if (((x)->decl.name))
 saw_named_field = 1;
    }
  detect_field_duplicates (fieldlist);
  ((t)->type.value1s) = fieldlist;
  layout_type (t);
  {
    tree *fieldlistp = &fieldlist;
    while (*fieldlistp)
      if (((enum tree_code) (*fieldlistp)->common.code) == FIELD_DECL && ((*fieldlistp)->decl.initial))
 *fieldlistp = ((*fieldlistp)->common.chain);
      else
 fieldlistp = &((*fieldlistp)->common.chain);
  }
  ((t)->type.value1s) = fieldlist;
  {
    int len = 0;
    for (x = fieldlist; x; x = ((x)->common.chain))
      {
        if (len > 15 || ((x)->decl.name) == ((void *)0))
          break;
        len += 1;
      }
    if (len > 15)
      {
        tree *field_array;
        struct lang_type *space;
        struct sorted_fields_type *space2;
        len += list_length (x);
        space = ggc_alloc_cleared_stat (sizeof (struct lang_type) );
        space2 = ggc_alloc_stat (sizeof (struct sorted_fields_type) + len * sizeof (tree) );
        len = 0;
 space->s = space2;
 field_array = &space2->elts[0];
        for (x = fieldlist; x; x = ((x)->common.chain))
          {
            field_array[len++] = x;
            if (((x)->decl.name) == ((void *)0))
              break;
          }
        if (x == ((void *)0))
          {
            ((t)->type.lang_specific) = space;
            ((t)->type.lang_specific)->s->len = len;
            field_array = ((t)->type.lang_specific)->s->elts;
            qsort (field_array, len, sizeof (tree), field_decl_cmp);
          }
      }
  }
  for (x = ((t)->type.main_variant); x; x = ((x)->type.next_variant))
    {
      ((x)->type.value1s) = ((t)->type.value1s);
      ((x)->type.lang_specific) = ((t)->type.lang_specific);
      ((x)->type.align) = ((t)->type.align);
      ((x)->type.user_align) = ((t)->type.user_align);
    }
  if (((enum tree_code) (t)->common.code) == UNION_TYPE
      && ((t)->type.transparent_union_flag)
      && ((t)->type.mode) != ((((t)->type.value1s))->decl.mode))
    {
      ((t)->type.transparent_union_flag) = 0;
      warning ("union cannot be made transparent");
    }
  for (x = ((((t)->type.main_variant))->type.minval);
       x;
       x = ((x)->common.chain))
    {
      tree decl = ((x)->list.value1);
      if (((enum tree_code) (((decl)->common.type))->common.code) == ARRAY_TYPE)
 layout_array_type (((decl)->common.type));
      if (((enum tree_code) (decl)->common.code) != TYPE_DECL)
 {
   layout_decl (decl, 0);
   if ((c_language & clk_objc))
     objc_check_decl (decl);
   rest_of_decl_compilation (decl, ((void *)0), toplevel, 0);
   if (! toplevel)
     expand_decl (decl);
 }
    }
  ((((t)->type.main_variant))->type.minval) = 0;
  rest_of_type_compilation (t, toplevel);
  return t;
}
static void
layout_array_type (tree t)
{
  if (((enum tree_code) (((t)->common.type))->common.code) == ARRAY_TYPE)
    layout_array_type (((t)->common.type));
  layout_type (t);
}
tree
start_enum (tree name)
{
  tree enumtype = 0;
  if (name != 0)
    enumtype = lookup_tag (ENUMERAL_TYPE, name, 1);
  if (enumtype == 0 || ((enum tree_code) (enumtype)->common.code) != ENUMERAL_TYPE)
    {
      enumtype = make_node_stat (ENUMERAL_TYPE );
      pushtag (name, enumtype);
    }
  ((enumtype)->type.lang_flag_0) = 1;
  if (((enumtype)->type.value1s) != 0)
    {
      error ("redeclaration of `enum %s'", ((const char *) (name)->identifier.id.str));
      ((enumtype)->type.value1s) = 0;
    }
  enum_next_value = global_trees[TI_INTEGER_ZERO];
  enum_overflow = 0;
  if (flag_short_enums)
    ((enumtype)->type.packed_flag) = 1;
  return enumtype;
}
tree
finish_enum (tree enumtype, tree value1s, tree attributes)
{
  tree pair, tem;
  tree minnode = 0, maxnode = 0;
  int precision, unsign;
  unsigned char toplevel = (file_scope == current_scope);
  struct lang_type *lt;
  decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
  if (values == global_trees[TI_ERROR_MARK])
    minnode = maxnode = global_trees[TI_INTEGER_ZERO];
  else
    {
      minnode = maxnode = ((values)->list.value1);
      for (pair = ((values)->common.chain); pair; pair = ((pair)->common.chain))
 {
   tree value1 = ((pair)->list.value1);
   if (tree_int_cst_lt (maxnode, value1))
     maxnode = value1;
   if (tree_int_cst_lt (value1, minnode))
     minnode = value1;
 }
    }
  unsign = (tree_int_cst_sgn (minnode) >= 0);
  precision = ((min_precision (minnode, unsign)) > (min_precision (maxnode, unsign)) ? (min_precision (minnode, unsign)) : (min_precision (maxnode, unsign)))
                                     ;
  if (((enumtype)->type.packed_flag) || precision > ((integer_types[itk_int])->type.precision))
    {
      tem = c_common_type_for_size (precision, unsign);
      if (tem == ((void *)0))
 {
   warning ("enumeration values exceed range of largest integer");
   tem = integer_types[itk_long_long];
 }
    }
  else
    tem = unsign ? integer_types[itk_unsigned_int] : integer_types[itk_int];
  ((enumtype)->type.minval) = ((tem)->type.minval);
  ((enumtype)->type.maxval) = ((tem)->type.maxval);
  ((enumtype)->type.precision) = ((tem)->type.precision);
  ((enumtype)->common.unsigned_flag) = ((tem)->common.unsigned_flag);
  ((enumtype)->type.size) = 0;
  layout_type (enumtype);
  if (values != global_trees[TI_ERROR_MARK])
    {
      for (pair = values; pair; pair = ((pair)->common.chain))
 {
   tree enu = ((pair)->list.purpose);
   tree ini = ((enu)->decl.initial);
   ((enu)->common.type) = enumtype;
   if (int_fits_type_p (ini, integer_types[itk_int]))
     tem = integer_types[itk_int];
   else
     tem = enumtype;
   ini = convert (tem, ini);
   ((enu)->decl.initial) = ini;
   ((pair)->list.purpose) = ((enu)->decl.name);
   ((pair)->list.value1) = ini;
 }
      ((enumtype)->type.value1s) = values;
    }
  lt = ggc_alloc_cleared_stat (sizeof (struct lang_type) );
  lt->enum_min = minnode;
  lt->enum_max = maxnode;
  ((enumtype)->type.lang_specific) = lt;
  for (tem = ((enumtype)->type.main_variant); tem; tem = ((tem)->type.next_variant))
    {
      if (tem == enumtype)
 continue;
      ((tem)->type.value1s) = ((enumtype)->type.value1s);
      ((tem)->type.minval) = ((enumtype)->type.minval);
      ((tem)->type.maxval) = ((enumtype)->type.maxval);
      ((tem)->type.size) = ((enumtype)->type.size);
      ((tem)->type.size_unit) = ((enumtype)->type.size_unit);
      ((tem)->type.mode) = ((enumtype)->type.mode);
      ((tem)->type.precision) = ((enumtype)->type.precision);
      ((tem)->type.align) = ((enumtype)->type.align);
      ((tem)->type.user_align) = ((enumtype)->type.user_align);
      ((tem)->common.unsigned_flag) = ((enumtype)->common.unsigned_flag);
      ((tem)->type.lang_specific) = ((enumtype)->type.lang_specific);
    }
  rest_of_type_compilation (enumtype, toplevel);
  return enumtype;
}
tree
build_enumerator (tree name, tree value1)
{
  tree decl, type;
  if (value1)
    while ((((enum tree_code) (value1)->common.code) == NOP_EXPR || ((enum tree_code) (value1)->common.code) == CONVERT_EXPR || ((enum tree_code) (value1)->common.code) == NON_LVALUE_EXPR) && ((value1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((value1)->common.type) == ((((value1)->exp.operands[0]))->common.type))) (value1) = ((value1)->exp.operands[0]);
  if (value1 != 0)
    {
      if (value1 == global_trees[TI_ERROR_MARK])
 value1 = 0;
      else if (((enum tree_code) (value1)->common.code) != INTEGER_CST)
 {
   error ("enumerator value for '%E' is not an integer constant", name);
   value1 = 0;
 }
      else
 {
   value1 = default_conversion (value1);
   constant_expression_warning (value1);
 }
    }
  if (value1 == 0)
    {
      value1 = enum_next_value;
      if (enum_overflow)
 error ("overflow in enumeration values");
    }
  if (pedantic && ! int_fits_type_p (value1, integer_types[itk_int]))
    {
      pedwarn ("ISO C restricts enumerator values to range of `int'");
      value1 = convert (integer_types[itk_int], value1);
    }
  enum_next_value = build_binary_op (PLUS_EXPR, value1, global_trees[TI_INTEGER_ONE], 0);
  enum_overflow = tree_int_cst_lt (enum_next_value1, value1);
  type = ((value1)->common.type);
  type = c_common_type_for_size (((((type)->type.precision)) > (((integer_types[itk_int])->type.precision)) ? (((type)->type.precision)) : (((integer_types[itk_int])->type.precision)))
                                             ,
     (((type)->type.precision)
      >= ((integer_types[itk_int])->type.precision)
      && ((type)->common.unsigned_flag)));
  decl = build_decl_stat (CONST_DECL,name,type );
  ((decl)->decl.initial) = convert (type, value1);
  pushdecl (decl);
  return tree_cons_stat (decl,value1,(tree) ((void *)0) );
}
int
start_function (tree declspecs, tree declarator, tree attributes)
{
  tree decl1, old_decl;
  tree restype;
  current_function_returns_value = 0;
  current_function_returns_null = 0;
  current_function_returns_abnormally = 0;
  warn_about_return_type = 0;
  current_extern_inline = 0;
  c_switch_stack = ((void *)0);
  c_break_label = c_cont_label = global_trees[TI_SIZE_ZERO];
  decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, ((void *)0));
  if (decl1 == 0)
    return 0;
  decl_attributes (&decl1, attributes, 0);
  if (((decl1)->decl.declared_inline_flag)
      && ((decl1)->decl.uninlinable)
      && lookup_attribute ("noinline", ((decl1)->decl.attributes)))
    warning ("%Jinline function '%D' given attribute noinline", decl1, decl1);
  announce_function (decl1);
  if (!((((((((decl1)->common.type))->common.type))->type.size) != (tree) ((void *)0)) || (((enum tree_code) (((((decl1)->common.type))->common.type))->common.code) == VOID_TYPE)))
    {
      error ("return type is an incomplete type");
      ((decl1)->common.type)
 = build_function_type (global_trees[TI_VOID_TYPE],
          ((((decl1)->common.type))->type.value1s));
    }
  if (warn_about_return_type)
    pedwarn_c99 ("return type defaults to `int'");
  ((decl1)->decl.initial) = global_trees[TI_ERROR_MARK];
  old_decl = lookup_name_in_scope (((decl1)->decl.name), current_scope);
  if (old_decl != 0 && ((enum tree_code) (((old_decl)->common.type))->common.code) == FUNCTION_TYPE
      && !(((old_decl)->decl.built_in_class) != NOT_BUILT_IN)
      && (((((((decl1)->common.type))->common.type))->type.main_variant)
   == ((((((old_decl)->common.type))->common.type))->type.main_variant))
      && ((((decl1)->common.type))->type.value1s) == 0)
    {
      ((decl1)->common.type) = ((old_decl)->common.type);
      current_function_prototype_locus = ((old_decl)->decl.locus);
    }
  if (warn_strict_prototypes
      && ((((decl1)->common.type))->type.value1s) == 0
      && (old_decl == 0 || (((((old_decl)->common.type))->type.value1s) == 0 && !(((old_decl)->decl.built_in_class) != NOT_BUILT_IN))))
    warning ("function declaration isn't a prototype");
  else if (warn_missing_prototypes
    && ((decl1)->common.public_flag)
    && ! ((((decl1)->decl.name)) == global_trees[TI_MAIN_IDENTIFIER])
    && (old_decl == 0 || (((((old_decl)->common.type))->type.value1s) == 0 && !(((old_decl)->decl.built_in_class) != NOT_BUILT_IN))))
    warning ("%Jno previous prototype for '%D'", decl1, decl1);
  else if (warn_missing_prototypes
    && old_decl != 0 && ((old_decl)->common.used_flag)
    && ((((old_decl)->common.type))->type.value1s) == 0)
    warning ("%J'%D' was used with no prototype before its definition",
      decl1, decl1);
  else if (warn_missing_declarations
    && ((decl1)->common.public_flag)
    && old_decl == 0
    && ! ((((decl1)->decl.name)) == global_trees[TI_MAIN_IDENTIFIER]))
    warning ("%Jno previous declaration for '%D'", decl1, decl1);
  else if (warn_missing_declarations
    && old_decl != 0 && ((old_decl)->common.used_flag)
    && ((old_decl)->decl.lang_flag_2))
    warning ("%J`%D' was used with no declaration before its definition",
      decl1, decl1);
  ((decl1)->decl.external_flag) = current_extern_inline;
  ((decl1)->common.static_flag) = 1;
  if (current_function_decl != 0)
    ((decl1)->common.public_flag) = 0;
  if (current_scope == file_scope)
    maybe_apply_pragma_weak (decl1);
  if (warn_main > 0 && ((((decl1)->decl.name)) == global_trees[TI_MAIN_IDENTIFIER]))
    {
      tree args;
      int argct = 0;
      if (((((((decl1)->common.type))->common.type))->type.main_variant)
   != integer_types[itk_int])
 pedwarn ("%Jreturn type of '%D' is not `int'", decl1, decl1);
      for (args = ((((decl1)->common.type))->type.value1s); args;
    args = ((args)->common.chain))
 {
   tree type = args ? ((args)->list.value1) : 0;
   if (type == global_trees[TI_VOID_TYPE])
     break;
   ++argct;
   switch (argct)
     {
     case 1:
       if (((type)->type.main_variant) != integer_types[itk_int])
  pedwarn ("%Jfirst argument of '%D' should be `int'",
    decl1, decl1);
       break;
     case 2:
       if (((enum tree_code) (type)->common.code) != POINTER_TYPE
    || ((enum tree_code) (((type)->common.type))->common.code) != POINTER_TYPE
    || (((((((type)->common.type))->common.type))->type.main_variant)
        != integer_types[itk_char]))
  pedwarn ("%Jsecond argument of '%D' should be 'char **'",
                         decl1, decl1);
       break;
     case 3:
       if (((enum tree_code) (type)->common.code) != POINTER_TYPE
    || ((enum tree_code) (((type)->common.type))->common.code) != POINTER_TYPE
    || (((((((type)->common.type))->common.type))->type.main_variant)
        != integer_types[itk_char]))
  pedwarn ("%Jthird argument of '%D' should probably be 'char **'", decl1, decl1);
       break;
     }
 }
      if (argct > 0 && (argct < 2 || argct > 3))
 pedwarn ("%J'%D' takes only zero or two arguments", decl1, decl1);
      if (! ((decl1)->common.public_flag))
 pedwarn ("%J'%D' is normally a non-static function", decl1, decl1);
    }
  current_function_decl = pushdecl (decl1);
  push_scope ();
  declare_parm_level ();
  restype = ((((current_function_decl)->common.type))->common.type);
  if (c_promoting_integer_type_p (restype))
    {
      if (((restype)->common.unsigned_flag)
   && (((restype)->type.precision)
    == ((integer_types[itk_int])->type.precision)))
 restype = integer_types[itk_unsigned_int];
      else
 restype = integer_types[itk_int];
    }
  ((current_function_decl)->decl.result)
    = build_decl_stat (RESULT_DECL,(tree) ((void *)0),restype );
  start_fname_decls ();
  return 1;
}
static void
store_parm_decls_newstyle (tree fndecl, tree arg_info)
{
  tree decl;
  tree parms = ((arg_info)->list.purpose);
  tree tags = ((arg_info)->list.value1);
  tree others = ((arg_info)->common.type);
  if (current_scope->bindings)
    {
      error ("%Jold-style parameter declarations in prototyped function definition", fndecl);
      pop_scope ();
      push_scope ();
    }
  else if (warn_traditional && !in_system_header1 && !current_function_scope
    && ((arg_info)->common.chain) != global_trees[TI_ERROR_MARK])
    warning ("%Jtraditional C rejects ISO C style function definitions",
      fndecl);
  for (decl = parms; decl; decl = ((decl)->common.chain))
    {
      ((decl)->decl.context) = current_function_decl;
      if (((decl)->decl.name))
 bind (((decl)->decl.name), decl, current_scope,
                     0, 0);
      else
 error ("%Jparameter name omitted", decl);
    }
  ((fndecl)->decl.arguments) = parms;
  for (decl = others; decl; decl = ((decl)->common.chain))
    {
      ((decl)->decl.context) = current_function_decl;
      if (((decl)->decl.name))
 bind (((decl)->decl.name), decl, current_scope,
                     0, 0);
    }
  for (decl = tags; decl; decl = ((decl)->common.chain))
    if (((decl)->list.purpose))
      bind (((decl)->list.purpose), ((decl)->list.value1), current_scope,
                   0, 0);
}
static void
store_parm_decls_oldstyle (tree fndecl, tree arg_info)
{
  struct c_binding *b;
  tree parm, decl, last;
  tree parmids = ((arg_info)->list.purpose);
  if (warn_old_style_definition && !in_system_header1)
    warning ("%Jold-style function definition", fndecl);
  for (parm = parmids; parm; parm = ((parm)->common.chain))
    {
      if (((parm)->list.value1) == 0)
 {
   error ("%Jparameter name missing from parameter list", fndecl);
   ((parm)->list.purpose) = 0;
   continue;
 }
      b = (((struct lang_identifier *)(((parm)->list.value1)))->symbol_binding);
      if (b && ((b)->depth == current_scope->depth))
 {
   decl = b->decl;
   if (((enum tree_code) (decl)->common.code) != PARM_DECL)
     error ("%J'%D' declared as a non-parameter", decl, decl);
   else if (((decl)->decl.weak_flag))
     {
       error ("%Jmultiple parameters named '%D'", decl, decl);
       ((parm)->list.purpose) = 0;
       continue;
     }
   else if ((((enum tree_code) (((decl)->common.type))->common.code) == VOID_TYPE))
     {
       error ("%Jparameter '%D' declared with void type", decl, decl);
       ((decl)->common.type) = integer_types[itk_int];
       ((decl)->decl.initial) = integer_types[itk_int];
       layout_decl (decl, 0);
     }
 }
      else
 {
   decl = build_decl_stat (PARM_DECL,((parm)->list.value1),integer_types[itk_int] );
   ((decl)->decl.initial) = ((decl)->common.type);
   ((decl)->decl.locus) = ((fndecl)->decl.locus);
   pushdecl (decl);
   if (flag_isoc99)
     pedwarn ("%Jtype of '%D' defaults to 'int'", decl, decl);
   else if (extra_warnings)
     warning ("%Jtype of '%D' defaults to 'int'", decl, decl);
 }
      ((parm)->list.purpose) = decl;
      ((decl)->decl.weak_flag) = 1;
    }
  for (b = current_scope->bindings; b; b = b->prev)
    {
      parm = b->decl;
      if (((enum tree_code) (parm)->common.code) != PARM_DECL)
 continue;
      if (!(((((parm)->common.type))->type.size) != (tree) ((void *)0)))
 {
   error ("%Jparameter '%D' has incomplete type", parm, parm);
   ((parm)->common.type) = global_trees[TI_ERROR_MARK];
 }
      if (! ((parm)->decl.weak_flag))
 {
   error ("%Jdeclaration for parameter '%D' but no such parameter",
   parm, parm);
   parmids = chainon (parmids, tree_cons_stat (parm,0,0 ));
 }
    }
  ((fndecl)->decl.arguments) = 0;
  for (parm = parmids; parm; parm = ((parm)->common.chain))
    if (((parm)->list.purpose))
      break;
  if (parm && ((parm)->list.purpose))
    {
      last = ((parm)->list.purpose);
      ((fndecl)->decl.arguments) = last;
      ((last)->decl.weak_flag) = 0;
      for (parm = ((parm)->common.chain); parm; parm = ((parm)->common.chain))
 if (((parm)->list.purpose))
   {
     ((last)->common.chain) = ((parm)->list.purpose);
     last = ((parm)->list.purpose);
     ((last)->decl.weak_flag) = 0;
   }
      ((last)->common.chain) = 0;
    }
  if (((((fndecl)->common.type))->type.value1s))
    {
      tree type;
      for (parm = ((fndecl)->decl.arguments),
      type = ((((fndecl)->common.type))->type.value1s);
    parm || (type && (((((type)->list.value1))->type.main_variant)
        != global_trees[TI_VOID_TYPE]));
    parm = ((parm)->common.chain), type = ((type)->common.chain))
 {
   if (parm == 0 || type == 0
       || ((((type)->list.value1))->type.main_variant) == global_trees[TI_VOID_TYPE])
     {
       error ("number of arguments doesn't match prototype");
       error ("%Hprototype declaration",
       &current_function_prototype_locus);
       break;
     }
   if (! comptypes (((((parm)->decl.initial))->type.main_variant),
      ((((type)->list.value1))->type.main_variant)))
     {
       if (((((parm)->common.type))->type.main_variant)
    == ((((type)->list.value1))->type.main_variant))
  {
    ((parm)->decl.initial) = ((parm)->common.type);
    if (targetm.calls.promote_prototypes (((current_function_decl)->common.type))
        && (((enum tree_code) (((parm)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((parm)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((parm)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((parm)->common.type))->common.code) == CHAR_TYPE)
        && ((((parm)->common.type))->type.precision)
        < ((integer_types[itk_int])->type.precision))
      ((parm)->decl.initial) = integer_types[itk_int];
    if (pedantic)
      {
        pedwarn ("promoted argument '%D' doesn't match prototype", parm);
        pedwarn ("%Hprototype declaration",
          &current_function_prototype_locus);
      }
  }
       else
  {
    error ("argument '%D' doesn't match prototype", parm);
    error ("%Hprototype declaration",
    &current_function_prototype_locus);
  }
     }
 }
      ((((fndecl)->common.type))->type.binfo) = 0;
    }
  else
    {
      tree actual = 0, last = 0, type;
      for (parm = ((fndecl)->decl.arguments); parm; parm = ((parm)->common.chain))
 {
   type = tree_cons_stat ((tree) ((void *)0),((parm)->decl.initial),(tree) ((void *)0) );
   if (last)
     ((last)->common.chain) = type;
   else
     actual = type;
   last = type;
 }
      type = tree_cons_stat ((tree) ((void *)0),global_trees[TI_VOID_TYPE],(tree) ((void *)0) );
      if (last)
 ((last)->common.chain) = type;
      else
 actual = type;
      ((fndecl)->common.type) = build_type_copy (((fndecl)->common.type));
      ((((fndecl)->common.type))->type.binfo) = actual;
    }
}
void
store_parm_decls (void)
{
  tree fndecl = current_function_decl;
  tree arg_info = ((fndecl)->decl.arguments);
  unsigned char proto = ((arg_info)->common.chain) != 0;
  if (proto)
    store_parm_decls_newstyle (fndecl, arg_info);
  else
    store_parm_decls_oldstyle (fndecl, arg_info);
  next_is_function_body = 1;
  gen_aux_info_record (fndecl, 1, 0, proto);
  allocate_struct_function (fndecl);
  ((fndecl)->decl.saved_tree) = push_stmt_list ();
  {
    tree t;
    for (t = nreverse (get_pending_sizes ()); t ; t = ((t)->common.chain))
      add_stmt (((t)->list.value1));
  }
  cfun->x_dont_save_pending_sizes_p = 1;
}
static void
c_finalize (tree fndecl)
{
  struct cgraph_node *cgn;
  c_warn_unused_result (&((fndecl)->decl.saved_tree));
  if (cgraph_global_info_ready)
    {
      c_expand_body (fndecl);
      return;
    }
  cgn = cgraph_node (fndecl);
  for (cgn = cgn->nested; cgn ; cgn = cgn->next_nested)
    c_finalize (cgn->decl);
  cgraph_finalize_function (fndecl, 0);
}
void
finish_function (void)
{
  tree fndecl = current_function_decl;
  if (((enum tree_code) (fndecl)->common.code) == FUNCTION_DECL
      && targetm.calls.promote_prototypes (((fndecl)->common.type)))
    {
      tree args = ((fndecl)->decl.arguments);
      for (; args; args = ((args)->common.chain))
  {
    tree type = ((args)->common.type);
    if ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
        && ((type)->type.precision) < ((integer_types[itk_int])->type.precision))
      ((args)->decl.initial) = integer_types[itk_int];
  }
    }
  if (((fndecl)->decl.initial) && ((fndecl)->decl.initial) != global_trees[TI_ERROR_MARK])
    ((((fndecl)->decl.initial))->block.supercontext) = fndecl;
  if (((fndecl)->decl.result) && ((fndecl)->decl.result) != global_trees[TI_ERROR_MARK])
    ((((fndecl)->decl.result))->decl.context) = fndecl;
  if (((((fndecl)->decl.name)) == global_trees[TI_MAIN_IDENTIFIER]) && flag_hosted)
    {
      if (((((((fndecl)->common.type))->common.type))->type.main_variant)
   != integer_types[itk_int])
 {
   if (!warn_main)
     pedwarn ("%Jreturn type of '%D' is not `int'", fndecl, fndecl);
 }
      else
 {
   if (flag_isoc99)
     c_finish_return (global_trees[TI_INTEGER_ZERO]);
 }
    }
  ((fndecl)->decl.saved_tree) = pop_stmt_list (((fndecl)->decl.saved_tree));
  finish_fname_decls ();
  if (warn_return_type
      && ((enum tree_code) (((((fndecl)->common.type))->common.type))->common.code) != VOID_TYPE
      && !current_function_returns_value && !current_function_returns_null
      && !current_function_returns_abnormally
      && !((((fndecl)->decl.name)) == global_trees[TI_MAIN_IDENTIFIER])
      && !((fndecl)->decl.lang_flag_1)
      && ((fndecl)->decl.inline_flag))
    warning ("no return statement in function returning non-void");
  if (extra_warnings
      && current_function_returns_value
      && current_function_returns_null)
    warning ("this function may return with or without a value");
  cfun->function_end_locus = input_location;
  if (((fndecl)->decl.static_ctor_flag)
      && !targetm.have_ctors_dtors)
    static_ctors = tree_cons_stat ((tree) ((void *)0),fndecl,static_ctors );
  if (((fndecl)->decl.static_dtor_flag)
      && !targetm.have_ctors_dtors)
    static_dtors = tree_cons_stat ((tree) ((void *)0),fndecl,static_dtors );
  if (((fndecl)->decl.initial) && ((fndecl)->decl.initial) != global_trees[TI_ERROR_MARK])
    {
      if (!decl_function_context (fndecl))
        {
          c_genericize (fndecl);
   lower_nested_functions (fndecl);
          c_finalize (fndecl);
        }
      else
        {
          (void) cgraph_node (fndecl);
        }
    }
  cfun = ((void *)0);
  current_function_decl = ((void *)0);
}
void
c_expand_body (tree fndecl)
{
  if (!((fndecl)->decl.initial)
      || ((fndecl)->decl.initial) == global_trees[TI_ERROR_MARK])
    return;
  tree_rest_of_compilation (fndecl, 0);
  if (((fndecl)->decl.static_ctor_flag)
      && targetm.have_ctors_dtors)
    targetm.asm_out.constructor ((((((fndecl)->decl.rtl ? (fndecl)->decl.rtl : (make_decl_rtl (fndecl, ((void *)0)), (fndecl)->decl.rtl)))->u.fld[0]).rtx1),
                                 65535);
  if (((fndecl)->decl.static_dtor_flag)
      && targetm.have_ctors_dtors)
    targetm.asm_out.destructor ((((((fndecl)->decl.rtl ? (fndecl)->decl.rtl : (make_decl_rtl (fndecl, ((void *)0)), (fndecl)->decl.rtl)))->u.fld[0]).rtx1),
                                65535);
}
void
check_for_loop_decls (void)
{
  struct c_binding *b;
  if (!flag_isoc99)
    {
      error ("'for' loop initial declaration used outside C99 mode");
      return;
    }
  for (b = current_scope->bindings; b; b = b->prev)
    {
      tree id = b->id;
      tree decl = b->decl;
      if (!id)
 continue;
      switch (((enum tree_code) (decl)->common.code))
 {
 case VAR_DECL:
   if (((decl)->common.static_flag))
     error ("%Jdeclaration of static variable '%D' in 'for' loop initial declaration", decl, decl);
   else if (((decl)->decl.external_flag))
     error ("%Jdeclaration of 'extern' variable '%D' in 'for' loop initial declaration", decl, decl);
   break;
 case RECORD_TYPE:
   error ("'struct %E' declared in 'for' loop initial declaration", id);
   break;
 case UNION_TYPE:
   error ("'union %E' declared in 'for' loop initial declaration", id);
   break;
 case ENUMERAL_TYPE:
   error ("'enum %E' declared in 'for' loop initial declaration", id);
   break;
 default:
   error ("%Jdeclaration of non-variable '%D' in 'for' loop initial declaration", decl, decl);
 }
    }
}
void
c_push_function_context (struct function *f)
{
  struct language_function *p;
  p = ggc_alloc_stat (sizeof (struct language_function) );
  f->language = p;
  p->base.x_stmt_tree = c_stmt_tree;
  p->x_break_label = c_break_label;
  p->x_cont_label = c_cont_label;
  p->x_switch_stack = c_switch_stack;
  p->returns_value = current_function_returns_value;
  p->returns_null = current_function_returns_null;
  p->returns_abnormally = current_function_returns_abnormally;
  p->warn_about_return_type = warn_about_return_type;
  p->extern_inline = current_extern_inline;
}
void
c_pop_function_context (struct function *f)
{
  struct language_function *p = f->language;
  if (((current_function_decl)->decl.u2.f) == 0
      && ((current_function_decl)->decl.saved_tree) == (tree) ((void *)0))
    {
      ((current_function_decl)->decl.initial) = global_trees[TI_ERROR_MARK];
      ((current_function_decl)->decl.arguments) = 0;
    }
  c_stmt_tree = p->base.x_stmt_tree;
  c_break_label = p->x_break_label;
  c_cont_label = p->x_cont_label;
  c_switch_stack = p->x_switch_stack;
  current_function_returns_value = p->returns_value;
  current_function_returns_null = p->returns_null;
  current_function_returns_abnormally = p->returns_abnormally;
  warn_about_return_type = p->warn_about_return_type;
  current_extern_inline = p->extern_inline;
  f->language = ((void *)0);
}
void
c_dup_lang_specific_decl (tree decl)
{
  struct lang_decl *ld;
  if (!((decl)->decl.lang_specific))
    return;
  ld = ggc_alloc_stat (sizeof (struct lang_decl) );
  memcpy (ld, ((decl)->decl.lang_specific), sizeof (struct lang_decl));
  ((decl)->decl.lang_specific) = ld;
}
int
stmts_are_full_exprs_p (void)
{
  return 0;
}
stmt_tree
current_stmt_tree (void)
{
  return &c_stmt_tree;
}
int
anon_aggr_type_p (tree node )
{
  return 0;
}
void
extract_interface_info (void)
{
}
tree
identifier_global_value (tree t)
{
  struct c_binding *b;
  for (b = (((struct lang_identifier *)(t))->symbol_binding); b; b = b->shadowed)
    if (((b)->depth == 1 ) || ((b)->depth == 0 ))
      return b->decl;
  return 0;
}
void
record_builtin_type (enum rid rid_index, const char *name, tree type)
{
  tree id;
  if (name == 0)
    id = ridpointers[(int) rid_index];
  else
    id = get_identifier (name);
  pushdecl (build_decl_stat (TYPE_DECL,id,type ));
}
tree
build_void_list_node (void)
{
  tree t = build_tree_list_stat((tree) ((void *)0),global_trees[TI_VOID_TYPE] );
  return t;
}
tree
make_pointer_declarator (tree type_quals_attrs1, tree target)
{
  tree quals, attrs1;
  tree itarget = target;
  split_specs_attrs1 (type_quals_attrs1, &quals, &attrs1);
  if (attrs1 != (tree) ((void *)0))
    itarget = tree_cons_stat (attrs1,target,(tree) ((void *)0) );
  return build1_stat (INDIRECT_REF,quals,itarget );
}
static void
c_write_global_declarations_1 (tree globals)
{
  size_t len = list_length (globals);
  tree *vec = xmalloc (sizeof (tree) * len);
  size_t i;
  tree decl;
  for (i = 0, decl = globals; i < len; i++, decl = ((decl)->common.chain))
    vec[i] = decl;
  wrapup_global_declarations (vec, len);
  check_global_declarations (vec, len);
  free (vec);
}
void
c_write_global_declarations (void)
{
  tree t;
  if (pch_file)
    return;
  for (t = all_translation_units; t; t = ((t)->common.chain))
    c_write_global_declarations_1 (((((t)->decl.initial))->block.vars));
  t = pop_scope ();
  if (t)
    c_write_global_declarations_1 (((t)->block.vars));
}
void
gt_ggc_mx_c_scope (void *x_p)
{
  struct c_scope * x = (struct c_scope *)x_p;
  struct c_scope * xlimit = x;
  while (((xlimit) != ((void *)0) && ((void *) (xlimit)) != (void *) 1 && ! ggc_set_mark (xlimit)))
   xlimit = ((*xlimit).outer);
  while (x != xlimit)
    {
      do { if ((*x).outer != ((void *)0)) gt_ggc_mx_c_scope ((*x).outer); } while (0);
      do { if ((*x).outer_function != ((void *)0)) gt_ggc_mx_c_scope ((*x).outer_function); } while (0);
      do { if ((*x).bindings != ((void *)0)) gt_ggc_mx_c_binding ((*x).bindings); } while (0);
      do { if ((*x).blocks != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).blocks); } while (0);
      do { if ((*x).blocks_last != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).blocks_last); } while (0);
      x = ((*x).outer);
    }
}
void
gt_ggc_mx_c_binding (void *x_p)
{
  struct c_binding * x = (struct c_binding *)x_p;
  struct c_binding * xlimit = x;
  while (((xlimit) != ((void *)0) && ((void *) (xlimit)) != (void *) 1 && ! ggc_set_mark (xlimit)))
   xlimit = ((*xlimit).prev);
  while (x != xlimit)
    {
      do { if ((*x).decl != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).decl); } while (0);
      do { if ((*x).id != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).id); } while (0);
      do { if ((*x).prev != ((void *)0)) gt_ggc_mx_c_binding ((*x).prev); } while (0);
      do { if ((*x).shadowed != ((void *)0)) gt_ggc_mx_c_binding ((*x).shadowed); } while (0);
      x = ((*x).prev);
    }
}
void
gt_ggc_mx_lang_tree_node (void *x_p)
{
  union lang_tree_node * x = (union lang_tree_node *)x_p;
  union lang_tree_node * xlimit = x;
  while (((xlimit) != ((void *)0) && ((void *) (xlimit)) != (void *) 1 && ! ggc_set_mark (xlimit)))
   xlimit = (((enum tree_code) (&(*xlimit).generic)->common.code) == INTEGER_TYPE ? (union lang_tree_node *)((&(*xlimit).generic)->type.next_variant) : (union lang_tree_node *)((&(*xlimit).generic)->common.chain));
  while (x != xlimit)
    {
      switch (((enum tree_code) (&((*x)).generic)->common.code) == IDENTIFIER_NODE)
        {
        case 0:
          switch (tree_node_structure (&((*x).generic)))
            {
            case TS_COMMON:
              do { if ((*x).generic.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.common.chain); } while (0);
              do { if ((*x).generic.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.common.type); } while (0);
              do { if ((*x).generic.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.common.ann); } while (0);
              break;
            case TS_INT_CST:
              do { if ((*x).generic.int_cst.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.int_cst.common.chain); } while (0);
              do { if ((*x).generic.int_cst.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.int_cst.common.type); } while (0);
              do { if ((*x).generic.int_cst.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.int_cst.common.ann); } while (0);
              break;
            case TS_REAL_CST:
              do { if ((*x).generic.real_cst.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.real_cst.common.chain); } while (0);
              do { if ((*x).generic.real_cst.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.real_cst.common.type); } while (0);
              do { if ((*x).generic.real_cst.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.real_cst.common.ann); } while (0);
              do { if ((*x).generic.real_cst.real_cst_ptr != ((void *)0)) gt_ggc_mx_real_value ((*x).generic.real_cst.real_cst_ptr); } while (0);
              break;
            case TS_VECTOR:
              do { if ((*x).generic.vector.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.vector.common.chain); } while (0);
              do { if ((*x).generic.vector.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.vector.common.type); } while (0);
              do { if ((*x).generic.vector.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.vector.common.ann); } while (0);
              do { if ((*x).generic.vector.elements != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.vector.elements); } while (0);
              break;
            case TS_STRING1:
              do { if ((*x).generic.string11.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.string11.common.chain); } while (0);
              do { if ((*x).generic.string11.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.string11.common.type); } while (0);
              do { if ((*x).generic.string11.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.string11.common.ann); } while (0);
              break;
            case TS_COMPLEX:
              do { if ((*x).generic.complex.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.complex.common.chain); } while (0);
              do { if ((*x).generic.complex.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.complex.common.type); } while (0);
              do { if ((*x).generic.complex.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.complex.common.ann); } while (0);
              do { if ((*x).generic.complex.real != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.complex.real); } while (0);
              do { if ((*x).generic.complex.imag != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.complex.imag); } while (0);
              break;
            case TS_IDENTIFIER:
              do { if ((*x).generic.identifier.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.identifier.common.chain); } while (0);
              do { if ((*x).generic.identifier.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.identifier.common.type); } while (0);
              do { if ((*x).generic.identifier.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.identifier.common.ann); } while (0);
              break;
            case TS_DECL:
              do { if ((*x).generic.decl.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.common.chain); } while (0);
              do { if ((*x).generic.decl.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.common.type); } while (0);
              do { if ((*x).generic.decl.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.decl.common.ann); } while (0);
              do { if ((*x).generic.decl.size != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.size); } while (0);
              do { if ((*x).generic.decl.size_unit != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.size_unit); } while (0);
              do { if ((*x).generic.decl.name != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.name); } while (0);
              do { if ((*x).generic.decl.context != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.context); } while (0);
              do { if ((*x).generic.decl.arguments != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.arguments); } while (0);
              do { if ((*x).generic.decl.result != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.result); } while (0);
              do { if ((*x).generic.decl.initial != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.initial); } while (0);
              do { if ((*x).generic.decl.abstract_origin != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.abstract_origin); } while (0);
              do { if ((*x).generic.decl.assembler_name != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.assembler_name); } while (0);
              do { if ((*x).generic.decl.section_name != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.section_name); } while (0);
              do { if ((*x).generic.decl.attributes != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.attributes); } while (0);
              do { if ((*x).generic.decl.rtl != ((void *)0)) gt_ggc_mx_rtx_def ((*x).generic.decl.rtl); } while (0);
              switch (((enum tree_code) ((tree) &((*x)))->common.code))
                {
                case FUNCTION_DECL:
                  do { if ((*x).generic.decl.u2.f != ((void *)0)) gt_ggc_mx_function ((*x).generic.decl.u2.f); } while (0);
                  break;
                case PARM_DECL:
                  do { if ((*x).generic.decl.u2.r != ((void *)0)) gt_ggc_mx_rtx_def ((*x).generic.decl.u2.r); } while (0);
                  break;
                case FIELD_DECL:
                  do { if ((*x).generic.decl.u2.t != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.u2.t); } while (0);
                  break;
                case VAR_DECL:
                  break;
                default:
                  break;
                }
              do { if ((*x).generic.decl.saved_tree != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.saved_tree); } while (0);
              do { if ((*x).generic.decl.inlined_fns != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.inlined_fns); } while (0);
              do { if ((*x).generic.decl.vindex != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.decl.vindex); } while (0);
              do { if ((*x).generic.decl.lang_specific != ((void *)0)) gt_ggc_mx_lang_decl ((*x).generic.decl.lang_specific); } while (0);
              break;
            case TS_TYPE:
              do { if ((*x).generic.type.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.common.chain); } while (0);
              do { if ((*x).generic.type.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.common.type); } while (0);
              do { if ((*x).generic.type.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.type.common.ann); } while (0);
              do { if ((*x).generic.type.value1s != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.value1s); } while (0);
              do { if ((*x).generic.type.size != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.size); } while (0);
              do { if ((*x).generic.type.size_unit != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.size_unit); } while (0);
              do { if ((*x).generic.type.attributes != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.attributes); } while (0);
              do { if ((*x).generic.type.pointer_to != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.pointer_to); } while (0);
              do { if ((*x).generic.type.reference_to != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.reference_to); } while (0);
              switch (debug_hooks == &sdb_debug_hooks ? 1 : debug_hooks == &dwarf2_debug_hooks ? 2 : 0)
                {
                case 0:
                  break;
                case 1:
                  break;
                case 2:
                  do { if ((*x).generic.type.symtab.die != ((void *)0)) gt_ggc_mx_die_struct ((*x).generic.type.symtab.die); } while (0);
                  break;
                default:
                  break;
                }
              do { if ((*x).generic.type.name != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.name); } while (0);
              do { if ((*x).generic.type.minval != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.minval); } while (0);
              do { if ((*x).generic.type.maxval != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.maxval); } while (0);
              do { if ((*x).generic.type.next_variant != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.next_variant); } while (0);
              do { if ((*x).generic.type.main_variant != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.main_variant); } while (0);
              do { if ((*x).generic.type.binfo != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.binfo); } while (0);
              do { if ((*x).generic.type.context != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.type.context); } while (0);
              do { if ((*x).generic.type.lang_specific != ((void *)0)) gt_ggc_mx_lang_type ((*x).generic.type.lang_specific); } while (0);
              break;
            case TS_LIST:
              do { if ((*x).generic.list.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.list.common.chain); } while (0);
              do { if ((*x).generic.list.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.list.common.type); } while (0);
              do { if ((*x).generic.list.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.list.common.ann); } while (0);
              do { if ((*x).generic.list.purpose != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.list.purpose); } while (0);
              do { if ((*x).generic.list.value1 != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.list.value1); } while (0);
              break;
            case TS_VEC:
              do { if ((*x).generic.vec.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.vec.common.chain); } while (0);
              do { if ((*x).generic.vec.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.vec.common.type); } while (0);
              do { if ((*x).generic.vec.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.vec.common.ann); } while (0);
              {
                size_t i0;
                for (i0 = 0; i0 < (size_t)((((tree)&((*x).generic.vec))->vec.length)); i0++) {
                  do { if ((*x).generic.vec.a[i0] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.vec.a[i0]); } while (0);
                }
              }
              break;
            case TS_EXP:
              do { if ((*x).generic.exp.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.exp.common.chain); } while (0);
              do { if ((*x).generic.exp.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.exp.common.type); } while (0);
              do { if ((*x).generic.exp.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.exp.common.ann); } while (0);
              do { if ((*x).generic.exp.locus != ((void *)0)) gt_ggc_mx_location_s ((*x).generic.exp.locus); } while (0);
              do { if ((*x).generic.exp.block != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.exp.block); } while (0);
              switch (((enum tree_code) ((tree) &(*x))->common.code))
                {
                case WITH_CLEANUP_EXPR:
                  do { if ((*x).generic.exp.operands[2] != ((void *)0)) gt_ggc_mx_rtx_def ((*x).generic.exp.operands[2]); } while (0);
                  do { if ((*x).generic.exp.operands[1] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.exp.operands[1]); } while (0);
                  do { if ((*x).generic.exp.operands[0] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.exp.operands[0]); } while (0);
                  break;
                case GOTO_SUBROUTINE_EXPR:
                  do { if ((*x).generic.exp.operands[1] != ((void *)0)) gt_ggc_mx_rtx_def ((*x).generic.exp.operands[1]); } while (0);
                  do { if ((*x).generic.exp.operands[0] != ((void *)0)) gt_ggc_mx_rtx_def ((*x).generic.exp.operands[0]); } while (0);
                  break;
                default:
                  {
                    size_t i1;
                    for (i1 = 0; i1 < (size_t)(tree_code_length[(int) (((enum tree_code) ((tree) &(*x))->common.code))]); i1++) {
                      do { if ((*x).generic.exp.operands[i1] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.exp.operands[i1]); } while (0);
                    }
                  }
                  break;
                }
              break;
            case TS_SSA_NAME:
              do { if ((*x).generic.ssa_name.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.ssa_name.common.chain); } while (0);
              do { if ((*x).generic.ssa_name.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.ssa_name.common.type); } while (0);
              do { if ((*x).generic.ssa_name.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.ssa_name.common.ann); } while (0);
              do { if ((*x).generic.ssa_name.var != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.ssa_name.var); } while (0);
              do { if ((*x).generic.ssa_name.ptr_info != ((void *)0)) gt_ggc_mx_ptr_info_def ((*x).generic.ssa_name.ptr_info); } while (0);
              break;
            case TS_PHI_NODE:
              do { if ((*x).generic.phi.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.phi.common.chain); } while (0);
              do { if ((*x).generic.phi.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.phi.common.type); } while (0);
              do { if ((*x).generic.phi.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.phi.common.ann); } while (0);
              do { if ((*x).generic.phi.result != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.phi.result); } while (0);
              {
                size_t i2;
                for (i2 = 0; i2 < (size_t)(((tree)&((*x).generic.phi))->phi.capacity); i2++) {
                  do { if ((*x).generic.phi.a[i2].def != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.phi.a[i2].def); } while (0);
                }
              }
              break;
            case TS_BLOCK:
              do { if ((*x).generic.block.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.block.common.chain); } while (0);
              do { if ((*x).generic.block.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.block.common.type); } while (0);
              do { if ((*x).generic.block.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.block.common.ann); } while (0);
              do { if ((*x).generic.block.vars != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.block.vars); } while (0);
              do { if ((*x).generic.block.subblocks != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.block.subblocks); } while (0);
              do { if ((*x).generic.block.supercontext != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.block.supercontext); } while (0);
              do { if ((*x).generic.block.abstract_origin != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.block.abstract_origin); } while (0);
              do { if ((*x).generic.block.fragment_origin != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.block.fragment_origin); } while (0);
              do { if ((*x).generic.block.fragment_chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.block.fragment_chain); } while (0);
              break;
            case TS_BINFO:
              do { if ((*x).generic.binfo.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.binfo.common.chain); } while (0);
              do { if ((*x).generic.binfo.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.binfo.common.type); } while (0);
              do { if ((*x).generic.binfo.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.binfo.common.ann); } while (0);
              do { if ((*x).generic.binfo.offset != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.binfo.offset); } while (0);
              do { if ((*x).generic.binfo.vtable != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.binfo.vtable); } while (0);
              do { if ((*x).generic.binfo.virtuals != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.binfo.virtuals); } while (0);
              do { if ((*x).generic.binfo.base_types != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.binfo.base_types); } while (0);
              do { if ((*x).generic.binfo.vptr_field != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.binfo.vptr_field); } while (0);
              do { if ((*x).generic.binfo.base_accesses != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.binfo.base_accesses); } while (0);
              do { if ((*x).generic.binfo.inheritance != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.binfo.inheritance); } while (0);
              {
                size_t i3;
                for (i3 = 0; i3 < (size_t)(binfo_lang_slots); i3++) {
                  do { if ((*x).generic.binfo.lang_slots[i3] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.binfo.lang_slots[i3]); } while (0);
                }
              }
              break;
            case TS_STATEMENT_LIST:
              do { if ((*x).generic.stmt_list.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.stmt_list.common.chain); } while (0);
              do { if ((*x).generic.stmt_list.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.stmt_list.common.type); } while (0);
              do { if ((*x).generic.stmt_list.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.stmt_list.common.ann); } while (0);
              do { if ((*x).generic.stmt_list.head != ((void *)0)) gt_ggc_mx_tree_statement_list_node ((*x).generic.stmt_list.head); } while (0);
              do { if ((*x).generic.stmt_list.tail != ((void *)0)) gt_ggc_mx_tree_statement_list_node ((*x).generic.stmt_list.tail); } while (0);
              break;
            case TS_VALUE_HANDLE:
              do { if ((*x).generic.value1_handle.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.value1_handle.common.chain); } while (0);
              do { if ((*x).generic.value1_handle.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).generic.value1_handle.common.type); } while (0);
              do { if ((*x).generic.value1_handle.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).generic.value1_handle.common.ann); } while (0);
              break;
            default:
              break;
            }
          break;
        case 1:
          do { if ((*x).identifier.common_id.common.chain != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).identifier.common_id.common.chain); } while (0);
          do { if ((*x).identifier.common_id.common.type != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).identifier.common_id.common.type); } while (0);
          do { if ((*x).identifier.common_id.common.ann != ((void *)0)) gt_ggc_mx_tree_ann_d ((*x).identifier.common_id.common.ann); } while (0);
          switch (((((*x).identifier.common_id.node).flags & (1 << 6)) ? NTV_ARGUMENT : ((*x).identifier.common_id.node).type == NT_MACRO ? ((((*x).identifier.common_id.node).flags & (1 << 2)) ? NTV_BUILTIN : NTV_MACRO) : ((*x).identifier.common_id.node).type == NT_ASSERTION ? NTV_ANSWER : NTV_NONE))
            {
            case NTV_MACRO:
              do { if ((*x).identifier.common_id.node.value1.macro != ((void *)0)) gt_ggc_mx_cpp_macro ((*x).identifier.common_id.node.value1.macro); } while (0);
              break;
            case NTV_ANSWER:
              do { if ((*x).identifier.common_id.node.value1.answers != ((void *)0)) gt_ggc_mx_answer ((*x).identifier.common_id.node.value1.answers); } while (0);
              break;
            case NTV_BUILTIN:
              break;
            case NTV_ARGUMENT:
              break;
            default:
              break;
            }
          do { if ((*x).identifier.symbol_binding != ((void *)0)) gt_ggc_mx_c_binding ((*x).identifier.symbol_binding); } while (0);
          do { if ((*x).identifier.tag_binding != ((void *)0)) gt_ggc_mx_c_binding ((*x).identifier.tag_binding); } while (0);
          do { if ((*x).identifier.label_binding != ((void *)0)) gt_ggc_mx_c_binding ((*x).identifier.label_binding); } while (0);
          break;
        default:
          break;
        }
      x = (((enum tree_code) (&(*x).generic)->common.code) == INTEGER_TYPE ? (union lang_tree_node *)((&(*x).generic)->type.next_variant) : (union lang_tree_node *)((&(*x).generic)->common.chain));
    }
}
void
gt_ggc_mx_lang_decl (void *x_p)
{
  struct lang_decl * const x = (struct lang_decl *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).pending_sizes != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).pending_sizes); } while (0);
    }
}
void
gt_ggc_mx_lang_type (void *x_p)
{
  struct lang_type * const x = (struct lang_type *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).s != ((void *)0)) gt_ggc_mx_sorted_fields_type ((*x).s); } while (0);
      do { if ((*x).enum_min != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).enum_min); } while (0);
      do { if ((*x).enum_max != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).enum_max); } while (0);
    }
}
void
gt_ggc_mx_language_function (void *x_p)
{
  struct language_function * const x = (struct language_function *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      do { if ((*x).base.x_stmt_tree.x_cur_stmt_list != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).base.x_stmt_tree.x_cur_stmt_list); } while (0);
      do { if ((*x).x_break_label != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).x_break_label); } while (0);
      do { if ((*x).x_cont_label != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).x_cont_label); } while (0);
    }
}
void
gt_pch_nx_c_scope (void *x_p)
{
  struct c_scope * x = (struct c_scope *)x_p;
  struct c_scope * xlimit = x;
  while (gt_pch_note_object (xlimit, xlimit, gt_pch_p_7c_scope))
   xlimit = ((*xlimit).outer);
  while (x != xlimit)
    {
      do { if ((*x).outer != ((void *)0)) gt_pch_nx_c_scope ((*x).outer); } while (0);
      do { if ((*x).outer_function != ((void *)0)) gt_pch_nx_c_scope ((*x).outer_function); } while (0);
      do { if ((*x).bindings != ((void *)0)) gt_pch_nx_c_binding ((*x).bindings); } while (0);
      do { if ((*x).blocks != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).blocks); } while (0);
      do { if ((*x).blocks_last != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).blocks_last); } while (0);
      x = ((*x).outer);
    }
}
void
gt_pch_nx_c_binding (void *x_p)
{
  struct c_binding * x = (struct c_binding *)x_p;
  struct c_binding * xlimit = x;
  while (gt_pch_note_object (xlimit, xlimit, gt_pch_p_9c_binding))
   xlimit = ((*xlimit).prev);
  while (x != xlimit)
    {
      do { if ((*x).decl != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).decl); } while (0);
      do { if ((*x).id != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).id); } while (0);
      do { if ((*x).prev != ((void *)0)) gt_pch_nx_c_binding ((*x).prev); } while (0);
      do { if ((*x).shadowed != ((void *)0)) gt_pch_nx_c_binding ((*x).shadowed); } while (0);
      x = ((*x).prev);
    }
}
void
gt_pch_nx_lang_tree_node (void *x_p)
{
  union lang_tree_node * x = (union lang_tree_node *)x_p;
  union lang_tree_node * xlimit = x;
  while (gt_pch_note_object (xlimit, xlimit, gt_pch_p_14lang_tree_node))
   xlimit = (((enum tree_code) (&(*xlimit).generic)->common.code) == INTEGER_TYPE ? (union lang_tree_node *)((&(*xlimit).generic)->type.next_variant) : (union lang_tree_node *)((&(*xlimit).generic)->common.chain));
  while (x != xlimit)
    {
      switch (((enum tree_code) (&((*x)).generic)->common.code) == IDENTIFIER_NODE)
        {
        case 0:
          switch (tree_node_structure (&((*x).generic)))
            {
            case TS_COMMON:
              do { if ((*x).generic.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.common.chain); } while (0);
              do { if ((*x).generic.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.common.type); } while (0);
              do { if ((*x).generic.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.common.ann); } while (0);
              break;
            case TS_INT_CST:
              do { if ((*x).generic.int_cst.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.int_cst.common.chain); } while (0);
              do { if ((*x).generic.int_cst.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.int_cst.common.type); } while (0);
              do { if ((*x).generic.int_cst.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.int_cst.common.ann); } while (0);
              break;
            case TS_REAL_CST:
              do { if ((*x).generic.real_cst.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.real_cst.common.chain); } while (0);
              do { if ((*x).generic.real_cst.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.real_cst.common.type); } while (0);
              do { if ((*x).generic.real_cst.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.real_cst.common.ann); } while (0);
              do { if ((*x).generic.real_cst.real_cst_ptr != ((void *)0)) gt_pch_nx_real_value ((*x).generic.real_cst.real_cst_ptr); } while (0);
              break;
            case TS_VECTOR:
              do { if ((*x).generic.vector.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.vector.common.chain); } while (0);
              do { if ((*x).generic.vector.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.vector.common.type); } while (0);
              do { if ((*x).generic.vector.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.vector.common.ann); } while (0);
              do { if ((*x).generic.vector.elements != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.vector.elements); } while (0);
              break;
            case TS_STRING1:
              do { if ((*x).generic.string11.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.string11.common.chain); } while (0);
              do { if ((*x).generic.string11.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.string11.common.type); } while (0);
              do { if ((*x).generic.string11.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.string11.common.ann); } while (0);
              gt_pch_n_S ((*x).generic.string11.pointer);
              break;
            case TS_COMPLEX:
              do { if ((*x).generic.complex.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.complex.common.chain); } while (0);
              do { if ((*x).generic.complex.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.complex.common.type); } while (0);
              do { if ((*x).generic.complex.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.complex.common.ann); } while (0);
              do { if ((*x).generic.complex.real != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.complex.real); } while (0);
              do { if ((*x).generic.complex.imag != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.complex.imag); } while (0);
              break;
            case TS_IDENTIFIER:
              do { if ((*x).generic.identifier.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.identifier.common.chain); } while (0);
              do { if ((*x).generic.identifier.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.identifier.common.type); } while (0);
              do { if ((*x).generic.identifier.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.identifier.common.ann); } while (0);
              gt_pch_n_S ((*x).generic.identifier.id.str);
              break;
            case TS_DECL:
              do { if ((*x).generic.decl.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.common.chain); } while (0);
              do { if ((*x).generic.decl.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.common.type); } while (0);
              do { if ((*x).generic.decl.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.decl.common.ann); } while (0);
              gt_pch_n_S ((*x).generic.decl.locus.file);
              do { if ((*x).generic.decl.size != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.size); } while (0);
              do { if ((*x).generic.decl.size_unit != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.size_unit); } while (0);
              do { if ((*x).generic.decl.name != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.name); } while (0);
              do { if ((*x).generic.decl.context != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.context); } while (0);
              do { if ((*x).generic.decl.arguments != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.arguments); } while (0);
              do { if ((*x).generic.decl.result != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.result); } while (0);
              do { if ((*x).generic.decl.initial != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.initial); } while (0);
              do { if ((*x).generic.decl.abstract_origin != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.abstract_origin); } while (0);
              do { if ((*x).generic.decl.assembler_name != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.assembler_name); } while (0);
              do { if ((*x).generic.decl.section_name != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.section_name); } while (0);
              do { if ((*x).generic.decl.attributes != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.attributes); } while (0);
              do { if ((*x).generic.decl.rtl != ((void *)0)) gt_pch_nx_rtx_def ((*x).generic.decl.rtl); } while (0);
              switch (((enum tree_code) ((tree) &((*x)))->common.code))
                {
                case FUNCTION_DECL:
                  do { if ((*x).generic.decl.u2.f != ((void *)0)) gt_pch_nx_function ((*x).generic.decl.u2.f); } while (0);
                  break;
                case PARM_DECL:
                  do { if ((*x).generic.decl.u2.r != ((void *)0)) gt_pch_nx_rtx_def ((*x).generic.decl.u2.r); } while (0);
                  break;
                case FIELD_DECL:
                  do { if ((*x).generic.decl.u2.t != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.u2.t); } while (0);
                  break;
                case VAR_DECL:
                  break;
                default:
                  break;
                }
              do { if ((*x).generic.decl.saved_tree != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.saved_tree); } while (0);
              do { if ((*x).generic.decl.inlined_fns != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.inlined_fns); } while (0);
              do { if ((*x).generic.decl.vindex != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.decl.vindex); } while (0);
              do { if ((*x).generic.decl.lang_specific != ((void *)0)) gt_pch_nx_lang_decl ((*x).generic.decl.lang_specific); } while (0);
              break;
            case TS_TYPE:
              do { if ((*x).generic.type.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.common.chain); } while (0);
              do { if ((*x).generic.type.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.common.type); } while (0);
              do { if ((*x).generic.type.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.type.common.ann); } while (0);
              do { if ((*x).generic.type.value1s != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.value1s); } while (0);
              do { if ((*x).generic.type.size != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.size); } while (0);
              do { if ((*x).generic.type.size_unit != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.size_unit); } while (0);
              do { if ((*x).generic.type.attributes != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.attributes); } while (0);
              do { if ((*x).generic.type.pointer_to != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.pointer_to); } while (0);
              do { if ((*x).generic.type.reference_to != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.reference_to); } while (0);
              switch (debug_hooks == &sdb_debug_hooks ? 1 : debug_hooks == &dwarf2_debug_hooks ? 2 : 0)
                {
                case 0:
                  break;
                case 1:
                  gt_pch_n_S ((*x).generic.type.symtab.pointer);
                  break;
                case 2:
                  do { if ((*x).generic.type.symtab.die != ((void *)0)) gt_pch_nx_die_struct ((*x).generic.type.symtab.die); } while (0);
                  break;
                default:
                  break;
                }
              do { if ((*x).generic.type.name != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.name); } while (0);
              do { if ((*x).generic.type.minval != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.minval); } while (0);
              do { if ((*x).generic.type.maxval != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.maxval); } while (0);
              do { if ((*x).generic.type.next_variant != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.next_variant); } while (0);
              do { if ((*x).generic.type.main_variant != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.main_variant); } while (0);
              do { if ((*x).generic.type.binfo != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.binfo); } while (0);
              do { if ((*x).generic.type.context != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.type.context); } while (0);
              do { if ((*x).generic.type.lang_specific != ((void *)0)) gt_pch_nx_lang_type ((*x).generic.type.lang_specific); } while (0);
              break;
            case TS_LIST:
              do { if ((*x).generic.list.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.list.common.chain); } while (0);
              do { if ((*x).generic.list.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.list.common.type); } while (0);
              do { if ((*x).generic.list.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.list.common.ann); } while (0);
              do { if ((*x).generic.list.purpose != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.list.purpose); } while (0);
              do { if ((*x).generic.list.value1 != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.list.value1); } while (0);
              break;
            case TS_VEC:
              do { if ((*x).generic.vec.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.vec.common.chain); } while (0);
              do { if ((*x).generic.vec.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.vec.common.type); } while (0);
              do { if ((*x).generic.vec.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.vec.common.ann); } while (0);
              {
                size_t i0;
                for (i0 = 0; i0 < (size_t)((((tree)&((*x).generic.vec))->vec.length)); i0++) {
                  do { if ((*x).generic.vec.a[i0] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.vec.a[i0]); } while (0);
                }
              }
              break;
            case TS_EXP:
              do { if ((*x).generic.exp.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.exp.common.chain); } while (0);
              do { if ((*x).generic.exp.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.exp.common.type); } while (0);
              do { if ((*x).generic.exp.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.exp.common.ann); } while (0);
              do { if ((*x).generic.exp.locus != ((void *)0)) gt_pch_nx_location_s ((*x).generic.exp.locus); } while (0);
              do { if ((*x).generic.exp.block != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.exp.block); } while (0);
              switch (((enum tree_code) ((tree) &(*x))->common.code))
                {
                case WITH_CLEANUP_EXPR:
                  do { if ((*x).generic.exp.operands[2] != ((void *)0)) gt_pch_nx_rtx_def ((*x).generic.exp.operands[2]); } while (0);
                  do { if ((*x).generic.exp.operands[1] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.exp.operands[1]); } while (0);
                  do { if ((*x).generic.exp.operands[0] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.exp.operands[0]); } while (0);
                  break;
                case GOTO_SUBROUTINE_EXPR:
                  do { if ((*x).generic.exp.operands[1] != ((void *)0)) gt_pch_nx_rtx_def ((*x).generic.exp.operands[1]); } while (0);
                  do { if ((*x).generic.exp.operands[0] != ((void *)0)) gt_pch_nx_rtx_def ((*x).generic.exp.operands[0]); } while (0);
                  break;
                default:
                  {
                    size_t i1;
                    for (i1 = 0; i1 < (size_t)(tree_code_length[(int) (((enum tree_code) ((tree) &(*x))->common.code))]); i1++) {
                      do { if ((*x).generic.exp.operands[i1] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.exp.operands[i1]); } while (0);
                    }
                  }
                  break;
                }
              break;
            case TS_SSA_NAME:
              do { if ((*x).generic.ssa_name.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.ssa_name.common.chain); } while (0);
              do { if ((*x).generic.ssa_name.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.ssa_name.common.type); } while (0);
              do { if ((*x).generic.ssa_name.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.ssa_name.common.ann); } while (0);
              do { if ((*x).generic.ssa_name.var != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.ssa_name.var); } while (0);
              do { if ((*x).generic.ssa_name.ptr_info != ((void *)0)) gt_pch_nx_ptr_info_def ((*x).generic.ssa_name.ptr_info); } while (0);
              break;
            case TS_PHI_NODE:
              do { if ((*x).generic.phi.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.phi.common.chain); } while (0);
              do { if ((*x).generic.phi.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.phi.common.type); } while (0);
              do { if ((*x).generic.phi.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.phi.common.ann); } while (0);
              do { if ((*x).generic.phi.result != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.phi.result); } while (0);
              {
                size_t i2;
                for (i2 = 0; i2 < (size_t)(((tree)&((*x).generic.phi))->phi.capacity); i2++) {
                  do { if ((*x).generic.phi.a[i2].def != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.phi.a[i2].def); } while (0);
                }
              }
              break;
            case TS_BLOCK:
              do { if ((*x).generic.block.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.block.common.chain); } while (0);
              do { if ((*x).generic.block.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.block.common.type); } while (0);
              do { if ((*x).generic.block.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.block.common.ann); } while (0);
              do { if ((*x).generic.block.vars != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.block.vars); } while (0);
              do { if ((*x).generic.block.subblocks != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.block.subblocks); } while (0);
              do { if ((*x).generic.block.supercontext != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.block.supercontext); } while (0);
              do { if ((*x).generic.block.abstract_origin != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.block.abstract_origin); } while (0);
              do { if ((*x).generic.block.fragment_origin != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.block.fragment_origin); } while (0);
              do { if ((*x).generic.block.fragment_chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.block.fragment_chain); } while (0);
              break;
            case TS_BINFO:
              do { if ((*x).generic.binfo.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.binfo.common.chain); } while (0);
              do { if ((*x).generic.binfo.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.binfo.common.type); } while (0);
              do { if ((*x).generic.binfo.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.binfo.common.ann); } while (0);
              do { if ((*x).generic.binfo.offset != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.binfo.offset); } while (0);
              do { if ((*x).generic.binfo.vtable != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.binfo.vtable); } while (0);
              do { if ((*x).generic.binfo.virtuals != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.binfo.virtuals); } while (0);
              do { if ((*x).generic.binfo.base_types != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.binfo.base_types); } while (0);
              do { if ((*x).generic.binfo.vptr_field != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.binfo.vptr_field); } while (0);
              do { if ((*x).generic.binfo.base_accesses != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.binfo.base_accesses); } while (0);
              do { if ((*x).generic.binfo.inheritance != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.binfo.inheritance); } while (0);
              {
                size_t i3;
                for (i3 = 0; i3 < (size_t)(binfo_lang_slots); i3++) {
                  do { if ((*x).generic.binfo.lang_slots[i3] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.binfo.lang_slots[i3]); } while (0);
                }
              }
              break;
            case TS_STATEMENT_LIST:
              do { if ((*x).generic.stmt_list.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.stmt_list.common.chain); } while (0);
              do { if ((*x).generic.stmt_list.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.stmt_list.common.type); } while (0);
              do { if ((*x).generic.stmt_list.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.stmt_list.common.ann); } while (0);
              do { if ((*x).generic.stmt_list.head != ((void *)0)) gt_pch_nx_tree_statement_list_node ((*x).generic.stmt_list.head); } while (0);
              do { if ((*x).generic.stmt_list.tail != ((void *)0)) gt_pch_nx_tree_statement_list_node ((*x).generic.stmt_list.tail); } while (0);
              break;
            case TS_VALUE_HANDLE:
              do { if ((*x).generic.value1_handle.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.value1_handle.common.chain); } while (0);
              do { if ((*x).generic.value1_handle.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).generic.value1_handle.common.type); } while (0);
              do { if ((*x).generic.value1_handle.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).generic.value1_handle.common.ann); } while (0);
              break;
            default:
              break;
            }
          break;
        case 1:
          do { if ((*x).identifier.common_id.common.chain != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).identifier.common_id.common.chain); } while (0);
          do { if ((*x).identifier.common_id.common.type != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).identifier.common_id.common.type); } while (0);
          do { if ((*x).identifier.common_id.common.ann != ((void *)0)) gt_pch_nx_tree_ann_d ((*x).identifier.common_id.common.ann); } while (0);
          gt_pch_n_S ((*x).identifier.common_id.node.ident.str);
          switch (((((*x).identifier.common_id.node).flags & (1 << 6)) ? NTV_ARGUMENT : ((*x).identifier.common_id.node).type == NT_MACRO ? ((((*x).identifier.common_id.node).flags & (1 << 2)) ? NTV_BUILTIN : NTV_MACRO) : ((*x).identifier.common_id.node).type == NT_ASSERTION ? NTV_ANSWER : NTV_NONE))
            {
            case NTV_MACRO:
              do { if ((*x).identifier.common_id.node.value1.macro != ((void *)0)) gt_pch_nx_cpp_macro ((*x).identifier.common_id.node.value1.macro); } while (0);
              break;
            case NTV_ANSWER:
              do { if ((*x).identifier.common_id.node.value1.answers != ((void *)0)) gt_pch_nx_answer ((*x).identifier.common_id.node.value1.answers); } while (0);
              break;
            case NTV_BUILTIN:
              break;
            case NTV_ARGUMENT:
              break;
            default:
              break;
            }
          do { if ((*x).identifier.symbol_binding != ((void *)0)) gt_pch_nx_c_binding ((*x).identifier.symbol_binding); } while (0);
          do { if ((*x).identifier.tag_binding != ((void *)0)) gt_pch_nx_c_binding ((*x).identifier.tag_binding); } while (0);
          do { if ((*x).identifier.label_binding != ((void *)0)) gt_pch_nx_c_binding ((*x).identifier.label_binding); } while (0);
          break;
        default:
          break;
        }
      x = (((enum tree_code) (&(*x).generic)->common.code) == INTEGER_TYPE ? (union lang_tree_node *)((&(*x).generic)->type.next_variant) : (union lang_tree_node *)((&(*x).generic)->common.chain));
    }
}
void
gt_pch_nx_lang_decl (void *x_p)
{
  struct lang_decl * const x = (struct lang_decl *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_9lang_decl))
    {
      do { if ((*x).pending_sizes != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).pending_sizes); } while (0);
    }
}
void
gt_pch_nx_lang_type (void *x_p)
{
  struct lang_type * const x = (struct lang_type *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_9lang_type))
    {
      do { if ((*x).s != ((void *)0)) gt_pch_nx_sorted_fields_type ((*x).s); } while (0);
      gt_pch_note_reorder ((*x).s, (*x).s, resort_sorted_fields);
      do { if ((*x).enum_min != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).enum_min); } while (0);
      do { if ((*x).enum_max != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).enum_max); } while (0);
    }
}
void
gt_pch_nx_language_function (void *x_p)
{
  struct language_function * const x = (struct language_function *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_17language_function))
    {
      do { if ((*x).base.x_stmt_tree.x_cur_stmt_list != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).base.x_stmt_tree.x_cur_stmt_list); } while (0);
      do { if ((*x).x_break_label != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).x_break_label); } while (0);
      do { if ((*x).x_cont_label != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).x_cont_label); } while (0);
    }
}
void
gt_pch_p_7c_scope (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct c_scope * const x = (struct c_scope *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).outer), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).outer_function), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).bindings), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).blocks), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).blocks_last), cookie);
}
void
gt_pch_p_9c_binding (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct c_binding * const x = (struct c_binding *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).decl), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).id), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).prev), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).shadowed), cookie);
}
void
gt_pch_p_14lang_tree_node (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  union lang_tree_node * const x = (union lang_tree_node *)x_p;
  switch (((enum tree_code) (&((*x)).generic)->common.code) == IDENTIFIER_NODE)
    {
    case 0:
      switch (tree_node_structure (&((*x).generic)))
        {
        case TS_COMMON:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.common.ann), cookie);
          break;
        case TS_INT_CST:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.int_cst.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.int_cst.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.int_cst.common.ann), cookie);
          break;
        case TS_REAL_CST:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.real_cst.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.real_cst.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.real_cst.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.real_cst.real_cst_ptr), cookie);
          break;
        case TS_VECTOR:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.vector.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.vector.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.vector.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.vector.elements), cookie);
          break;
        case TS_STRING1:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.string11.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.string11.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.string11.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.string11.pointer), cookie);
          break;
        case TS_COMPLEX:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.complex.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.complex.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.complex.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.complex.real), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.complex.imag), cookie);
          break;
        case TS_IDENTIFIER:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.identifier.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.identifier.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.identifier.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.identifier.id.str), cookie);
          break;
        case TS_DECL:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.locus.file), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.size), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.size_unit), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.name), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.context), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.arguments), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.result), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.initial), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.abstract_origin), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.assembler_name), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.section_name), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.attributes), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.rtl), cookie);
          switch (((enum tree_code) ((tree) &((*x)))->common.code))
            {
            case FUNCTION_DECL:
              if ((void *)(x) == this_obj)
                op (&((*x).generic.decl.u2.f), cookie);
              break;
            case PARM_DECL:
              if ((void *)(x) == this_obj)
                op (&((*x).generic.decl.u2.r), cookie);
              break;
            case FIELD_DECL:
              if ((void *)(x) == this_obj)
                op (&((*x).generic.decl.u2.t), cookie);
              break;
            case VAR_DECL:
              break;
            default:
              break;
            }
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.saved_tree), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.inlined_fns), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.vindex), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.decl.lang_specific), cookie);
          break;
        case TS_TYPE:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.value1s), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.size), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.size_unit), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.attributes), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.pointer_to), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.reference_to), cookie);
          switch (debug_hooks == &sdb_debug_hooks ? 1 : debug_hooks == &dwarf2_debug_hooks ? 2 : 0)
            {
            case 0:
              break;
            case 1:
              if ((void *)(x) == this_obj)
                op (&((*x).generic.type.symtab.pointer), cookie);
              break;
            case 2:
              if ((void *)(x) == this_obj)
                op (&((*x).generic.type.symtab.die), cookie);
              break;
            default:
              break;
            }
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.name), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.minval), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.maxval), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.next_variant), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.main_variant), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.binfo), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.context), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.type.lang_specific), cookie);
          break;
        case TS_LIST:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.list.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.list.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.list.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.list.purpose), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.list.value1), cookie);
          break;
        case TS_VEC:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.vec.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.vec.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.vec.common.ann), cookie);
          {
            size_t i0;
            for (i0 = 0; i0 < (size_t)((((tree)&((*x).generic.vec))->vec.length)); i0++) {
              if ((void *)(x) == this_obj)
                op (&((*x).generic.vec.a[i0]), cookie);
            }
          }
          break;
        case TS_EXP:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.exp.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.exp.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.exp.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.exp.locus), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.exp.block), cookie);
          switch (((enum tree_code) ((tree) &(*x))->common.code))
            {
            case WITH_CLEANUP_EXPR:
              if ((void *)(x) == this_obj)
                op (&((*x).generic.exp.operands[2]), cookie);
              if ((void *)(x) == this_obj)
                op (&((*x).generic.exp.operands[1]), cookie);
              if ((void *)(x) == this_obj)
                op (&((*x).generic.exp.operands[0]), cookie);
              break;
            case GOTO_SUBROUTINE_EXPR:
              if ((void *)(x) == this_obj)
                op (&((*x).generic.exp.operands[1]), cookie);
              if ((void *)(x) == this_obj)
                op (&((*x).generic.exp.operands[0]), cookie);
              break;
            default:
              {
                size_t i1;
                for (i1 = 0; i1 < (size_t)(tree_code_length[(int) (((enum tree_code) ((tree) &(*x))->common.code))]); i1++) {
                  if ((void *)(x) == this_obj)
                    op (&((*x).generic.exp.operands[i1]), cookie);
                }
              }
              break;
            }
          break;
        case TS_SSA_NAME:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.ssa_name.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.ssa_name.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.ssa_name.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.ssa_name.var), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.ssa_name.ptr_info), cookie);
          break;
        case TS_PHI_NODE:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.phi.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.phi.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.phi.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.phi.result), cookie);
          {
            size_t i2;
            for (i2 = 0; i2 < (size_t)(((tree)&((*x).generic.phi))->phi.capacity); i2++) {
              if ((void *)(x) == this_obj)
                op (&((*x).generic.phi.a[i2].def), cookie);
            }
          }
          break;
        case TS_BLOCK:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.block.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.block.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.block.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.block.vars), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.block.subblocks), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.block.supercontext), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.block.abstract_origin), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.block.fragment_origin), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.block.fragment_chain), cookie);
          break;
        case TS_BINFO:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.binfo.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.binfo.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.binfo.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.binfo.offset), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.binfo.vtable), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.binfo.virtuals), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.binfo.base_types), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.binfo.vptr_field), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.binfo.base_accesses), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.binfo.inheritance), cookie);
          {
            size_t i3;
            for (i3 = 0; i3 < (size_t)(binfo_lang_slots); i3++) {
              if ((void *)(x) == this_obj)
                op (&((*x).generic.binfo.lang_slots[i3]), cookie);
            }
          }
          break;
        case TS_STATEMENT_LIST:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.stmt_list.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.stmt_list.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.stmt_list.common.ann), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.stmt_list.head), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.stmt_list.tail), cookie);
          break;
        case TS_VALUE_HANDLE:
          if ((void *)(x) == this_obj)
            op (&((*x).generic.value1_handle.common.chain), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.value1_handle.common.type), cookie);
          if ((void *)(x) == this_obj)
            op (&((*x).generic.value1_handle.common.ann), cookie);
          break;
        default:
          break;
        }
      break;
    case 1:
      if ((void *)(x) == this_obj)
        op (&((*x).identifier.common_id.common.chain), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).identifier.common_id.common.type), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).identifier.common_id.common.ann), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).identifier.common_id.node.ident.str), cookie);
      switch (((((*x).identifier.common_id.node).flags & (1 << 6)) ? NTV_ARGUMENT : ((*x).identifier.common_id.node).type == NT_MACRO ? ((((*x).identifier.common_id.node).flags & (1 << 2)) ? NTV_BUILTIN : NTV_MACRO) : ((*x).identifier.common_id.node).type == NT_ASSERTION ? NTV_ANSWER : NTV_NONE))
        {
        case NTV_MACRO:
          if ((void *)(x) == this_obj)
            op (&((*x).identifier.common_id.node.value1.macro), cookie);
          break;
        case NTV_ANSWER:
          if ((void *)(x) == this_obj)
            op (&((*x).identifier.common_id.node.value1.answers), cookie);
          break;
        case NTV_BUILTIN:
          break;
        case NTV_ARGUMENT:
          break;
        default:
          break;
        }
      if ((void *)(x) == this_obj)
        op (&((*x).identifier.symbol_binding), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).identifier.tag_binding), cookie);
      if ((void *)(x) == this_obj)
        op (&((*x).identifier.label_binding), cookie);
      break;
    default:
      break;
    }
}
void
gt_pch_p_9lang_decl (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct lang_decl * const x = (struct lang_decl *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).pending_sizes), cookie);
}
void
gt_pch_p_9lang_type (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct lang_type * const x = (struct lang_type *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).s), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).enum_min), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).enum_max), cookie);
}
void
gt_pch_p_17language_function (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct language_function * const x = (struct language_function *)x_p;
  if ((void *)(x) == this_obj)
    op (&((*x).base.x_stmt_tree.x_cur_stmt_list), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_break_label), cookie);
  if ((void *)(x) == this_obj)
    op (&((*x).x_cont_label), cookie);
}
const struct ggc_root_tab gt_ggc_r_gt_c_decl_h[] = {
  {
    &external_scope,
    1,
    sizeof (external_scope),
    &gt_ggc_mx_c_scope,
    &gt_pch_nx_c_scope
  },
  {
    &file_scope,
    1,
    sizeof (file_scope),
    &gt_ggc_mx_c_scope,
    &gt_pch_nx_c_scope
  },
  {
    &current_function_scope,
    1,
    sizeof (current_function_scope),
    &gt_ggc_mx_c_scope,
    &gt_pch_nx_c_scope
  },
  {
    &current_scope,
    1,
    sizeof (current_scope),
    &gt_ggc_mx_c_scope,
    &gt_pch_nx_c_scope
  },
  {
    &visible_builtins,
    1,
    sizeof (visible_builtins),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &all_translation_units,
    1,
    sizeof (all_translation_units),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &c_stmt_tree.x_cur_stmt_list,
    1,
    sizeof (c_stmt_tree),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &static_dtors,
    1,
    sizeof (static_dtors),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &static_ctors,
    1,
    sizeof (static_ctors),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_ggc_rd_gt_c_decl_h[] = {
  { &binding_freelist, 1, sizeof (binding_freelist), ((void *)0), ((void *)0) },
  { &scope_freelist, 1, sizeof (scope_freelist), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_c_decl_h[] = {
  { &compound_literal_number, 1, sizeof (compound_literal_number), ((void *)0), ((void *)0) },
  { &c_stmt_tree, 1, sizeof (c_stmt_tree), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
static int missing_braces_mentioned;
static int require_constant_value;
static int require_constant_elements;
static tree qualify_type (tree, tree);
static int tagged_types_tu_compatible_p (tree, tree);
static int comp_target_types (tree, tree, int);
static int function_types_compatible_p (tree, tree);
static int type_lists_compatible_p (tree, tree);
static tree decl_constant_value_for_broken_optimization (tree);
static tree default_function_array_conversion (tree);
static tree lookup_field (tree, tree);
static tree convert_arguments (tree, tree, tree, tree);
static tree pointer_diff (tree, tree);
static tree internal_build_compound_expr (tree, int);
static tree convert_for_assignment (tree, tree, const char *, tree, tree,
        int);
static void warn_for_assignment (const char *, const char *, tree, int);
static tree valid_compound_expr_initializer (tree, tree);
static void push_string1 (const char *);
static void push_member_name (tree);
static void push_array_bounds (int);
static int spelling_length (void);
static char *print_spelling (char *);
static void warning_init (const char *);
static tree digest_init (tree, tree, int);
static void output_init_element (tree, tree, tree, int);
static void output_pending_init_elements (int);
static int set_designator (int);
static void push_range_stack (tree);
static void add_pending_init (tree, tree);
static void set_nonincremental_init (void);
static void set_nonincremental_init_from_string1 (tree);
static tree find_init_member (tree);
static int lvalue_or_else (tree, const char *);
tree
require_complete_type (tree value1)
{
  tree type = ((value1)->common.type);
  if (value1 == global_trees[TI_ERROR_MARK] || type == global_trees[TI_ERROR_MARK])
    return global_trees[TI_ERROR_MARK];
  if ((((type)->type.size) != (tree) ((void *)0)))
    return value1;
  c_incomplete_type_error (value1, type);
  return global_trees[TI_ERROR_MARK];
}
void
c_incomplete_type_error (tree value1, tree type)
{
  const char *type_code_string1;
  if (((enum tree_code) (type)->common.code) == ERROR_MARK)
    return;
  if (value1 != 0 && (((enum tree_code) (value1)->common.code) == VAR_DECL
       || ((enum tree_code) (value1)->common.code) == PARM_DECL))
    error ("`%s' has an incomplete type",
    ((const char *) (((value1)->decl.name))->identifier.id.str));
  else
    {
    retry:
      switch (((enum tree_code) (type)->common.code))
 {
 case RECORD_TYPE:
   type_code_string1 = "struct";
   break;
 case UNION_TYPE:
   type_code_string1 = "union";
   break;
 case ENUMERAL_TYPE:
   type_code_string1 = "enum";
   break;
 case VOID_TYPE:
   error ("invalid use of void expression");
   return;
 case ARRAY_TYPE:
   if (((type)->type.value1s))
     {
       if (((((type)->type.value1s))->type.maxval) == ((void *)0))
  {
    error ("invalid use of flexible array member");
    return;
  }
       type = ((type)->common.type);
       goto retry;
     }
   error ("invalid use of array with unspecified bounds");
   return;
 default:
   fancy_abort ("gcc.c", 722875, "?");
 }
      if (((enum tree_code) (((type)->type.name))->common.code) == IDENTIFIER_NODE)
 error ("invalid use of undefined type `%s %s'",
        type_code_string1, ((const char *) (((type)->type.name))->identifier.id.str));
      else
 error ("invalid use of incomplete typedef `%s'",
        ((const char *) (((((type)->type.name))->decl.name))->identifier.id.str));
    }
}
tree
c_type_promotes_to (tree type)
{
  if (((type)->type.main_variant) == global_trees[TI_FLOAT_TYPE])
    return global_trees[TI_DOUBLE_TYPE];
  if (c_promoting_integer_type_p (type))
    {
      if (((type)->common.unsigned_flag)
          && (((type)->type.precision) == ((integer_types[itk_int])->type.precision)))
        return integer_types[itk_unsigned_int];
      return integer_types[itk_int];
    }
  return type;
}
static tree
qualify_type (tree type, tree like)
{
  return c_build_qualified_type (type,
     ((((type)->common.readonly_flag) * 0x1) | (((type)->common.volatile_flag) * 0x2) | (((type)->type.restrict_flag) * 0x4)) | ((((like)->common.readonly_flag) * 0x1) | (((like)->common.volatile_flag) * 0x2) | (((like)->type.restrict_flag) * 0x4)));
}
tree
composite_type (tree t1, tree t2)
{
  enum tree_code code1;
  enum tree_code code2;
  tree attributes;
  if (t1 == t2) return t1;
  if (t1 == global_trees[TI_ERROR_MARK])
    return t2;
  if (t2 == global_trees[TI_ERROR_MARK])
    return t1;
  code1 = ((enum tree_code) (t1)->common.code);
  code2 = ((enum tree_code) (t2)->common.code);
  attributes = targetm.merge_type_attributes (t1, t2);
  if (code1 == ENUMERAL_TYPE && code2 == INTEGER_TYPE)
    return t1;
  if (code2 == ENUMERAL_TYPE && code1 == INTEGER_TYPE)
    return t2;
  if (code1 != code2)
    fancy_abort ("gcc.c", 722959, "?");
  switch (code1)
    {
    case POINTER_TYPE:
      {
 tree pointed_to_1 = ((t1)->common.type);
 tree pointed_to_2 = ((t2)->common.type);
 tree target = composite_type (pointed_to_1, pointed_to_2);
 t1 = build_pointer_type (target);
 t1 = build_type_attribute_variant (t1, attributes);
 return qualify_type (t1, t2);
      }
    case ARRAY_TYPE:
      {
 tree elt = composite_type (((t1)->common.type), ((t2)->common.type));
 if (((((t1)->common.readonly_flag) * 0x1) | (((t1)->common.volatile_flag) * 0x2) | (((t1)->type.restrict_flag) * 0x4)) || ((((t2)->common.readonly_flag) * 0x1) | (((t2)->common.volatile_flag) * 0x2) | (((t2)->type.restrict_flag) * 0x4)))
   fancy_abort ("gcc.c", 722980, "?");
 if (elt == ((t1)->common.type) && ((t1)->type.value1s))
   return build_type_attribute_variant (t1, attributes);
 if (elt == ((t2)->common.type) && ((t2)->type.value1s))
   return build_type_attribute_variant (t2, attributes);
 if (elt == ((t1)->common.type) && !((t2)->type.value1s) && !((t1)->type.value1s))
   return build_type_attribute_variant (t1, attributes);
 if (elt == ((t2)->common.type) && !((t2)->type.value1s) && !((t1)->type.value1s))
   return build_type_attribute_variant (t2, attributes);
 t1 = build_array_type (elt, ((((t1)->type.value1s) ? t1 : t2)->type.value1s));
 return build_type_attribute_variant (t1, attributes);
      }
    case FUNCTION_TYPE:
      {
 tree valtype = composite_type (((t1)->common.type), ((t2)->common.type));
 tree p1 = ((t1)->type.value1s);
 tree p2 = ((t2)->type.value1s);
 int len;
 tree newargs, n;
 int i;
 if (valtype == ((t1)->common.type) && ! ((t2)->type.value1s))
   return build_type_attribute_variant (t1, attributes);
 if (valtype == ((t2)->common.type) && ! ((t1)->type.value1s))
   return build_type_attribute_variant (t2, attributes);
 if (((t1)->type.value1s) == 0)
  {
     t1 = build_function_type (valtype, ((t2)->type.value1s));
     t1 = build_type_attribute_variant (t1, attributes);
     return qualify_type (t1, t2);
  }
 if (((t2)->type.value1s) == 0)
  {
    t1 = build_function_type (valtype, ((t1)->type.value1s));
    t1 = build_type_attribute_variant (t1, attributes);
    return qualify_type (t1, t2);
  }
 c_override_global_bindings_to_false = 1;
 len = list_length (p1);
 newargs = 0;
 for (i = 0; i < len; i++)
   newargs = tree_cons_stat ((tree) ((void *)0),(tree) ((void *)0),newargs );
 n = newargs;
 for (; p1;
      p1 = ((p1)->common.chain), p2 = ((p2)->common.chain), n = ((n)->common.chain))
   {
     if (((p1)->list.value1) == 0)
       {
  ((n)->list.value1) = ((p2)->list.value1);
  goto parm_done;
       }
     if (((p2)->list.value1) == 0)
       {
  ((n)->list.value1) = ((p1)->list.value1);
  goto parm_done;
       }
     if (((enum tree_code) (((p1)->list.value1))->common.code) == UNION_TYPE
  && ((p1)->list.value1) != ((p2)->list.value1))
       {
  tree memb;
  for (memb = ((((p1)->list.value1))->type.value1s);
       memb; memb = ((memb)->common.chain))
    if (comptypes (((memb)->common.type), ((p2)->list.value1)))
      {
        ((n)->list.value1) = ((p2)->list.value1);
        if (pedantic)
   pedwarn ("function types not truly compatible in ISO C");
        goto parm_done;
      }
       }
     if (((enum tree_code) (((p2)->list.value1))->common.code) == UNION_TYPE
  && ((p2)->list.value1) != ((p1)->list.value1))
       {
  tree memb;
  for (memb = ((((p2)->list.value1))->type.value1s);
       memb; memb = ((memb)->common.chain))
    if (comptypes (((memb)->common.type), ((p1)->list.value1)))
      {
        ((n)->list.value1) = ((p1)->list.value1);
        if (pedantic)
   pedwarn ("function types not truly compatible in ISO C");
        goto parm_done;
      }
       }
     ((n)->list.value1) = composite_type (((p1)->list.value1), ((p2)->list.value1));
   parm_done: ;
   }
 c_override_global_bindings_to_false = 0;
 t1 = build_function_type (valtype, newargs);
 t1 = qualify_type (t1, t2);
      }
    default:
      return build_type_attribute_variant (t1, attributes);
    }
}
static tree
common_pointer_type (tree t1, tree t2)
{
  tree attributes;
  tree pointed_to_1;
  tree pointed_to_2;
  tree target;
  if (t1 == t2) return t1;
  if (t1 == global_trees[TI_ERROR_MARK])
    return t2;
  if (t2 == global_trees[TI_ERROR_MARK])
    return t1;
  if (((enum tree_code) (t1)->common.code) != POINTER_TYPE || ((enum tree_code) (t2)->common.code) != POINTER_TYPE)
    fancy_abort ("gcc.c", 723131, "?");
  attributes = targetm.merge_type_attributes (t1, t2);
  pointed_to_1 = ((t1)->common.type);
  pointed_to_2 = ((t2)->common.type);
  target = composite_type (((pointed_to_1)->type.main_variant),
      ((pointed_to_2)->type.main_variant));
  t1 = build_pointer_type (c_build_qualified_type
      (target,
       ((((pointed_to_1)->common.readonly_flag) * 0x1) | (((pointed_to_1)->common.volatile_flag) * 0x2) | (((pointed_to_1)->type.restrict_flag) * 0x4)) |
       ((((pointed_to_2)->common.readonly_flag) * 0x1) | (((pointed_to_2)->common.volatile_flag) * 0x2) | (((pointed_to_2)->type.restrict_flag) * 0x4))));
  return build_type_attribute_variant (t1, attributes);
}
tree
common_type (tree t1, tree t2)
{
  enum tree_code code1;
  enum tree_code code2;
  if (t1 == global_trees[TI_ERROR_MARK])
    return t2;
  if (t2 == global_trees[TI_ERROR_MARK])
    return t1;
  if (((((t1)->common.readonly_flag) * 0x1) | (((t1)->common.volatile_flag) * 0x2) | (((t1)->type.restrict_flag) * 0x4)) != 0x0)
    t1 = ((t1)->type.main_variant);
  if (((((t2)->common.readonly_flag) * 0x1) | (((t2)->common.volatile_flag) * 0x2) | (((t2)->type.restrict_flag) * 0x4)) != 0x0)
    t2 = ((t2)->type.main_variant);
  if (((t1)->type.attributes) != (tree) ((void *)0))
    t1 = build_type_attribute_variant (t1, (tree) ((void *)0));
  if (((t2)->type.attributes) != (tree) ((void *)0))
    t2 = build_type_attribute_variant (t2, (tree) ((void *)0));
  if (t1 == t2) return t1;
  code1 = ((enum tree_code) (t1)->common.code);
  code2 = ((enum tree_code) (t2)->common.code);
  if (code1 != VECTOR_TYPE && code1 != COMPLEX_TYPE
      && code1 != REAL_TYPE && code1 != INTEGER_TYPE)
    fancy_abort ("gcc.c", 723190, "?");
  if (code2 != VECTOR_TYPE && code2 != COMPLEX_TYPE
      && code2 != REAL_TYPE && code2 != INTEGER_TYPE)
    fancy_abort ("gcc.c", 723194, "?");
  if (code1 == VECTOR_TYPE)
    return t1;
  if (code2 == VECTOR_TYPE)
    return t2;
  if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
    {
      tree subtype1 = code1 == COMPLEX_TYPE ? ((t1)->common.type) : t1;
      tree subtype2 = code2 == COMPLEX_TYPE ? ((t2)->common.type) : t2;
      tree subtype = common_type (subtype1, subtype2);
      if (code1 == COMPLEX_TYPE && ((t1)->common.type) == subtype)
 return t1;
      else if (code2 == COMPLEX_TYPE && ((t2)->common.type) == subtype)
 return t2;
      else
 return build_complex_type (subtype);
    }
  if (code1 == REAL_TYPE && code2 != REAL_TYPE)
    return t1;
  if (code2 == REAL_TYPE && code1 != REAL_TYPE)
    return t2;
  if (((t1)->type.precision) > ((t2)->type.precision))
    return t1;
  else if (((t2)->type.precision) > ((t1)->type.precision))
    return t2;
  if (((t1)->type.main_variant) == integer_types[itk_unsigned_long_long]
      || ((t2)->type.main_variant) == integer_types[itk_unsigned_long_long])
    return integer_types[itk_unsigned_long_long];
  if (((t1)->type.main_variant) == integer_types[itk_long_long]
      || ((t2)->type.main_variant) == integer_types[itk_long_long])
    {
      if (((t1)->common.unsigned_flag) || ((t2)->common.unsigned_flag))
 return integer_types[itk_unsigned_long_long];
      else
        return integer_types[itk_long_long];
    }
  if (((t1)->type.main_variant) == integer_types[itk_unsigned_long]
      || ((t2)->type.main_variant) == integer_types[itk_unsigned_long])
    return integer_types[itk_unsigned_long];
  if (((t1)->type.main_variant) == integer_types[itk_long]
      || ((t2)->type.main_variant) == integer_types[itk_long])
    {
      if (((t1)->common.unsigned_flag) || ((t2)->common.unsigned_flag))
 return integer_types[itk_unsigned_long];
      else
 return integer_types[itk_long];
    }
  if (((t1)->type.main_variant) == global_trees[TI_LONG_DOUBLE_TYPE]
      || ((t2)->type.main_variant) == global_trees[TI_LONG_DOUBLE_TYPE])
    return global_trees[TI_LONG_DOUBLE_TYPE];
  if (((t1)->common.unsigned_flag))
    return t1;
  else
    return t2;
}
int
comptypes (tree type1, tree type2)
{
  tree t1 = type1;
  tree t2 = type2;
  int attrval, val;
  if (t1 == t2 || !t1 || !t2
      || ((enum tree_code) (t1)->common.code) == ERROR_MARK || ((enum tree_code) (t2)->common.code) == ERROR_MARK)
    return 1;
  if (((enum tree_code) (t1)->common.code) == INTEGER_TYPE && ((t1)->type.no_force_blk_flag)
      && ((t1)->type.value1s))
    t1 = ((t1)->type.value1s);
  if (((enum tree_code) (t2)->common.code) == INTEGER_TYPE && ((t2)->type.no_force_blk_flag)
      && ((t2)->type.value1s))
    t2 = ((t2)->type.value1s);
  if (((enum tree_code) (t1)->common.code) == ENUMERAL_TYPE && ((enum tree_code) (t2)->common.code) != ENUMERAL_TYPE)
    t1 = c_common_type_for_size (((t1)->type.precision), ((t1)->common.unsigned_flag));
  else if (((enum tree_code) (t2)->common.code) == ENUMERAL_TYPE && ((enum tree_code) (t1)->common.code) != ENUMERAL_TYPE)
    t2 = c_common_type_for_size (((t2)->type.precision), ((t2)->common.unsigned_flag));
  if (t1 == t2)
    return 1;
  if (((enum tree_code) (t1)->common.code) != ((enum tree_code) (t2)->common.code))
    return 0;
  if (((((t1)->common.readonly_flag) * 0x1) | (((t1)->common.volatile_flag) * 0x2) | (((t1)->type.restrict_flag) * 0x4)) != ((((t2)->common.readonly_flag) * 0x1) | (((t2)->common.volatile_flag) * 0x2) | (((t2)->type.restrict_flag) * 0x4)))
    return 0;
  if (((t1)->type.main_variant) == ((t2)->type.main_variant))
    return 1;
  if (! (attrval = targetm.comp_type_attributes (t1, t2)))
     return 0;
  val = 0;
  switch (((enum tree_code) (t1)->common.code))
    {
    case POINTER_TYPE:
      if ((c_language & clk_objc) && (val = objc_comptypes (t1, t2, 0)) >= 0)
 break;
      val = (((t1)->common.type) == ((t2)->common.type)
      ? 1 : comptypes (((t1)->common.type), ((t2)->common.type)));
      break;
    case FUNCTION_TYPE:
      val = function_types_compatible_p (t1, t2);
      break;
    case ARRAY_TYPE:
      {
 tree d1 = ((t1)->type.value1s);
 tree d2 = ((t2)->type.value1s);
 unsigned char d1_variable, d2_variable;
 unsigned char d1_zero, d2_zero;
 val = 1;
 if (((t1)->common.type) != ((t2)->common.type)
     && 0 == (val = comptypes (((t1)->common.type), ((t2)->common.type))))
   return 0;
 if (d1 == 0 || d2 == 0 || d1 == d2)
   break;
 d1_zero = ! ((d1)->type.maxval);
 d2_zero = ! ((d2)->type.maxval);
 d1_variable = (! d1_zero
         && (((enum tree_code) (((d1)->type.minval))->common.code) != INTEGER_CST
      || ((enum tree_code) (((d1)->type.maxval))->common.code) != INTEGER_CST));
 d2_variable = (! d2_zero
         && (((enum tree_code) (((d2)->type.minval))->common.code) != INTEGER_CST
      || ((enum tree_code) (((d2)->type.maxval))->common.code) != INTEGER_CST));
 if (d1_variable || d2_variable)
   break;
 if (d1_zero && d2_zero)
   break;
 if (d1_zero || d2_zero
     || ! tree_int_cst_equal (((d1)->type.minval), ((d2)->type.minval))
     || ! tree_int_cst_equal (((d1)->type.maxval), ((d2)->type.maxval)))
   val = 0;
        break;
      }
    case RECORD_TYPE:
      if ((c_language & clk_objc) && objc_comptypes (t1, t2, 0) == 1)
 val = 1;
    case ENUMERAL_TYPE:
    case UNION_TYPE:
      if (val != 1 && !same_translation_unit_p (t1, t2))
 val = tagged_types_tu_compatible_p (t1, t2);
      break;
    case VECTOR_TYPE:
      val = mode_nunits[(t1)->type.mode] == mode_nunits[(t2)->type.mode]
     && comptypes (((t1)->common.type), ((t2)->common.type));
      break;
    default:
      break;
    }
  return attrval == 2 && val == 1 ? 2 : val;
}
static int
comp_target_types (tree ttl, tree ttr, int reflexive)
{
  int val;
  if ((val = objc_comptypes (ttl, ttr, reflexive)) >= 0)
    return val;
  val = comptypes (((((ttl)->common.type))->type.main_variant),
     ((((ttr)->common.type))->type.main_variant));
  if (val == 2 && pedantic)
    pedwarn ("types are not quite compatible");
  return val;
}
int
same_translation_unit_p (tree t1, tree t2)
{
  while (t1 && ((enum tree_code) (t1)->common.code) != TRANSLATION_UNIT_DECL)
    switch (tree_code_type[(int) (((enum tree_code) (t1)->common.code))])
      {
      case 'd': t1 = ((t1)->decl.context); break;
      case 't': t1 = ((t1)->type.context); break;
      case 'x': t1 = ((t1)->block.supercontext); break;
      default: fancy_abort ("gcc.c", 723462, "?");
      }
  while (t2 && ((enum tree_code) (t2)->common.code) != TRANSLATION_UNIT_DECL)
    switch (tree_code_type[(int) (((enum tree_code) (t2)->common.code))])
      {
      case 'd': t2 = ((t2)->decl.context); break;
      case 't': t2 = ((t2)->type.context); break;
      case 'x': t2 = ((t2)->block.supercontext); break;
      default: fancy_abort ("gcc.c", 723471, "?");
      }
  return t1 == t2;
}
struct tagged_tu_seen {
  const struct tagged_tu_seen * next;
  tree t1;
  tree t2;
};
static const struct tagged_tu_seen * tagged_tu_seen_base;
static int
tagged_types_tu_compatible_p (tree t1, tree t2)
{
  tree s1, s2;
  unsigned char needs_warning = 0;
  while (((t1)->type.name)
  && ((enum tree_code) (((t1)->type.name))->common.code) == TYPE_DECL
  && ((((t1)->type.name))->decl.result))
    t1 = ((((t1)->type.name))->decl.result);
  while (((t2)->type.name)
  && ((enum tree_code) (((t2)->type.name))->common.code) == TYPE_DECL
  && ((((t2)->type.name))->decl.result))
    t2 = ((((t2)->type.name))->decl.result);
  if (flag_isoc99 && ((t1)->type.name) != ((t2)->type.name))
    return 0;
  if (((t1)->type.size) == ((void *)0)
      || ((t2)->type.size) == ((void *)0))
    return 1;
  {
    const struct tagged_tu_seen * tts_i;
    for (tts_i = tagged_tu_seen_base; tts_i != ((void *)0); tts_i = tts_i->next)
      if (tts_i->t1 == t1 && tts_i->t2 == t2)
 return 1;
  }
  switch (((enum tree_code) (t1)->common.code))
    {
    case ENUMERAL_TYPE:
      {
        tree tv1 = ((t1)->type.value1s);
        tree tv2 = ((t2)->type.value1s);
        if (tv1 == tv2)
          return 1;
        for (;tv1 && tv2; tv1 = ((tv1)->common.chain), tv2 = ((tv2)->common.chain))
          {
            if (((tv1)->list.purpose) != ((tv2)->list.purpose))
              break;
            if (simple_cst_equal (((tv1)->list.value1), ((tv2)->list.value1)) != 1)
              return 0;
          }
        if (tv1 == (tree) ((void *)0) && tv2 == (tree) ((void *)0))
          return 1;
        if (tv1 == (tree) ((void *)0) || tv2 == (tree) ((void *)0))
          return 0;
 if (list_length (((t1)->type.value1s)) != list_length (((t2)->type.value1s)))
   return 0;
 for (s1 = ((t1)->type.value1s); s1; s1 = ((s1)->common.chain))
   {
     s2 = purpose_member (((s1)->list.purpose), ((t2)->type.value1s));
     if (s2 == ((void *)0)
  || simple_cst_equal (((s1)->list.value1), ((s2)->list.value1)) != 1)
       return 0;
   }
 return 1;
      }
    case UNION_TYPE:
      {
 if (list_length (((t1)->type.value1s)) != list_length (((t2)->type.value1s)))
   return 0;
 for (s1 = ((t1)->type.value1s); s1; s1 = ((s1)->common.chain))
   {
     unsigned char ok = 0;
     struct tagged_tu_seen tts;
     tts.next = tagged_tu_seen_base;
     tts.t1 = t1;
     tts.t2 = t2;
     tagged_tu_seen_base = &tts;
     if (((s1)->decl.name) != ((void *)0))
       for (s2 = ((t2)->type.value1s); s2; s2 = ((s2)->common.chain))
  if (((s1)->decl.name) == ((s2)->decl.name))
    {
      int result;
      result = comptypes (((s1)->common.type), ((s2)->common.type));
      if (result == 0)
        break;
      if (result == 2)
        needs_warning = 1;
      if (((enum tree_code) (s1)->common.code) == FIELD_DECL
   && simple_cst_equal (((s1)->decl.u2.t),
          ((s2)->decl.u2.t)) != 1)
        break;
      ok = 1;
      break;
    }
     tagged_tu_seen_base = tts.next;
     if (! ok)
       return 0;
   }
 return needs_warning ? 2 : 1;
      }
    case RECORD_TYPE:
      {
 struct tagged_tu_seen tts;
 tts.next = tagged_tu_seen_base;
 tts.t1 = t1;
 tts.t2 = t2;
 tagged_tu_seen_base = &tts;
 for (s1 = ((t1)->type.value1s), s2 = ((t2)->type.value1s);
      s1 && s2;
      s1 = ((s1)->common.chain), s2 = ((s2)->common.chain))
   {
     int result;
     if (((enum tree_code) (s1)->common.code) != ((enum tree_code) (s2)->common.code)
  || ((s1)->decl.name) != ((s2)->decl.name))
       break;
     result = comptypes (((s1)->common.type), ((s2)->common.type));
     if (result == 0)
       break;
     if (result == 2)
       needs_warning = 1;
     if (((enum tree_code) (s1)->common.code) == FIELD_DECL
  && simple_cst_equal (((s1)->decl.u2.t),
         ((s2)->decl.u2.t)) != 1)
       break;
   }
 tagged_tu_seen_base = tts.next;
 if (s1 && s2)
   return 0;
 return needs_warning ? 2 : 1;
      }
    default:
      fancy_abort ("gcc.c", 723653, "?");
    }
}
static int
function_types_compatible_p (tree f1, tree f2)
{
  tree args1, args2;
  int val = 1;
  int val1;
  tree ret1, ret2;
  ret1 = ((f1)->common.type);
  ret2 = ((f2)->common.type);
  if (pedantic && ((ret1)->common.volatile_flag) != ((ret2)->common.volatile_flag))
    pedwarn ("function return types not compatible due to `volatile'");
  if (((ret1)->common.volatile_flag))
    ret1 = build_qualified_type (((ret1)->type.main_variant),
     ((((ret1)->common.readonly_flag) * 0x1) | (((ret1)->common.volatile_flag) * 0x2) | (((ret1)->type.restrict_flag) * 0x4)) & ~0x2);
  if (((ret2)->common.volatile_flag))
    ret2 = build_qualified_type (((ret2)->type.main_variant),
     ((((ret2)->common.readonly_flag) * 0x1) | (((ret2)->common.volatile_flag) * 0x2) | (((ret2)->type.restrict_flag) * 0x4)) & ~0x2);
  val = comptypes (ret1, ret2);
  if (val == 0)
    return 0;
  args1 = ((f1)->type.value1s);
  args2 = ((f2)->type.value1s);
  if (args1 == 0)
    {
      if (!self_promoting_args_p (args2))
 return 0;
      if (((f1)->type.binfo)
   && 1 != type_lists_compatible_p (args2, ((f1)->type.binfo)))
 val = 2;
      return val;
    }
  if (args2 == 0)
    {
      if (!self_promoting_args_p (args1))
 return 0;
      if (((f2)->type.binfo)
   && 1 != type_lists_compatible_p (args1, ((f2)->type.binfo)))
 val = 2;
      return val;
    }
  val1 = type_lists_compatible_p (args1, args2);
  return val1 != 1 ? val1 : val;
}
static int
type_lists_compatible_p (tree args1, tree args2)
{
  int val = 1;
  int newval = 0;
  while (1)
    {
      if (args1 == 0 && args2 == 0)
 return val;
      if (args1 == 0 || args2 == 0)
 return 0;
      if (((args1)->list.value1) == 0)
 {
   if (c_type_promotes_to (((args2)->list.value1)) != ((args2)->list.value1))
     return 0;
 }
      else if (((args2)->list.value1) == 0)
 {
   if (c_type_promotes_to (((args1)->list.value1)) != ((args1)->list.value1))
     return 0;
 }
      else if (((enum tree_code) (((args1)->list.value1))->common.code) == ERROR_MARK
        || ((enum tree_code) (((args2)->list.value1))->common.code) == ERROR_MARK)
 ;
      else if (! (newval = comptypes (((((args1)->list.value1))->type.main_variant),
          ((((args2)->list.value1))->type.main_variant))))
 {
   if (((enum tree_code) (((args1)->list.value1))->common.code) == UNION_TYPE
       && (((((args1)->list.value1))->type.name) == 0
    || ((((args1)->list.value1))->type.transparent_union_flag))
       && ((enum tree_code) (((((args1)->list.value1))->type.size))->common.code) == INTEGER_CST
       && tree_int_cst_equal (((((args1)->list.value1))->type.size),
         ((((args2)->list.value1))->type.size)))
     {
       tree memb;
       for (memb = ((((args1)->list.value1))->type.value1s);
     memb; memb = ((memb)->common.chain))
  if (comptypes (((memb)->common.type), ((args2)->list.value1)))
    break;
       if (memb == 0)
  return 0;
     }
   else if (((enum tree_code) (((args2)->list.value1))->common.code) == UNION_TYPE
     && (((((args2)->list.value1))->type.name) == 0
         || ((((args2)->list.value1))->type.transparent_union_flag))
     && ((enum tree_code) (((((args2)->list.value1))->type.size))->common.code) == INTEGER_CST
     && tree_int_cst_equal (((((args2)->list.value1))->type.size),
       ((((args1)->list.value1))->type.size)))
     {
       tree memb;
       for (memb = ((((args2)->list.value1))->type.value1s);
     memb; memb = ((memb)->common.chain))
  if (comptypes (((memb)->common.type), ((args1)->list.value1)))
    break;
       if (memb == 0)
  return 0;
     }
   else
     return 0;
 }
      if (newval > val)
 val = newval;
      args1 = ((args1)->common.chain);
      args2 = ((args2)->common.chain);
    }
}
tree
c_size_in_bytes (tree type)
{
  enum tree_code code = ((enum tree_code) (type)->common.code);
  if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
    return global_trees[TI_SIZE_ONE];
  if (!((((type)->type.size) != (tree) ((void *)0)) || (((enum tree_code) (type)->common.code) == VOID_TYPE)))
    {
      error ("arithmetic on pointer to an incomplete type");
      return global_trees[TI_SIZE_ONE];
    }
  return size_binop (CEIL_DIV_EXPR, ((type)->type.size_unit),
       size_int_wide ((long) (((integer_types[itk_char])->type.precision) / 8), SIZETYPE)
                          );
}
tree
decl_constant_value (tree decl)
{
  if (
      current_function_decl != 0
      && ((enum tree_code) (decl)->common.code) != PARM_DECL
      && ! ((decl)->common.volatile_flag)
      && ((decl)->common.readonly_flag)
      && ((decl)->decl.initial) != 0
      && ((enum tree_code) (((decl)->decl.initial))->common.code) != ERROR_MARK
      && ((((decl)->decl.initial))->common.constant_flag)
      && ((enum tree_code) (((decl)->decl.initial))->common.code) != CONSTRUCTOR)
    return ((decl)->decl.initial);
  return decl;
}
static tree
decl_constant_value_for_broken_optimization (tree decl)
{
  if (pedantic || ((decl)->decl.mode) == BLKmode)
    return decl;
  else
    return decl_constant_value (decl);
}
static tree
default_function_array_conversion (tree exp)
{
  tree orig_exp;
  tree type = ((exp)->common.type);
  enum tree_code code = ((enum tree_code) (type)->common.code);
  int not_lvalue = 0;
  orig_exp = exp;
  while (((enum tree_code) (exp)->common.code) == NON_LVALUE_EXPR
  || (((enum tree_code) (exp)->common.code) == NOP_EXPR
      && ((((exp)->exp.operands[0]))->common.type) == ((exp)->common.type)))
    {
      if (((enum tree_code) (exp)->common.code) == NON_LVALUE_EXPR)
 not_lvalue = 1;
      exp = ((exp)->exp.operands[0]);
    }
  if ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (exp)->common.code))])) != 0))
    (((exp)->exp.complexity) = (int) (((enum tree_code) ((orig_exp)->exp.complexity))));
  if (code == FUNCTION_TYPE)
    {
      return build_unary_op (ADDR_EXPR, exp, 0);
    }
  if (code == ARRAY_TYPE)
    {
      tree adr;
      tree restype = ((type)->common.type);
      tree ptrtype;
      int constp = 0;
      int volatilep = 0;
      int lvalue_array_p;
      if (tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'r' || (tree_code_type[(int) (((enum tree_code) (exp)->common.code))] == 'd'))
 {
   constp = ((exp)->common.readonly_flag);
   volatilep = ((exp)->common.volatile_flag);
 }
      if (((((type)->common.readonly_flag) * 0x1) | (((type)->common.volatile_flag) * 0x2) | (((type)->type.restrict_flag) * 0x4)) || constp || volatilep)
 restype
   = c_build_qualified_type (restype,
        ((((type)->common.readonly_flag) * 0x1) | (((type)->common.volatile_flag) * 0x2) | (((type)->type.restrict_flag) * 0x4))
        | (constp * 0x1)
        | (volatilep * 0x2));
      if (((enum tree_code) (exp)->common.code) == INDIRECT_REF)
 return convert (build_pointer_type (restype),
   ((exp)->exp.operands[0]));
      if (((enum tree_code) (exp)->common.code) == COMPOUND_EXPR)
 {
   tree op1 = default_conversion (((exp)->exp.operands[1]));
   return build (COMPOUND_EXPR, ((op1)->common.type),
   ((exp)->exp.operands[0]), op1);
 }
      lvalue_array_p = !not_lvalue && lvalue_p (exp);
      if (!flag_isoc99 && !lvalue_array_p)
 {
   return exp;
 }
      ptrtype = build_pointer_type (restype);
      if (((enum tree_code) (exp)->common.code) == VAR_DECL)
 {
   adr = build1_stat (ADDR_EXPR,ptrtype,exp );
   if (!c_mark_addressable (exp))
     return global_trees[TI_ERROR_MARK];
   ((adr)->common.side_effects_flag) = 0;
   return adr;
 }
      adr = build_unary_op (ADDR_EXPR, exp, 1);
      return convert (ptrtype, adr);
    }
  return exp;
}
tree
default_conversion (tree exp)
{
  tree orig_exp;
  tree type = ((exp)->common.type);
  enum tree_code code = ((enum tree_code) (type)->common.code);
  if (code == FUNCTION_TYPE || code == ARRAY_TYPE)
    return default_function_array_conversion (exp);
  if (((enum tree_code) (exp)->common.code) == CONST_DECL)
    exp = ((exp)->decl.initial);
  else if (optimize && ((enum tree_code) (exp)->common.code) == VAR_DECL && code != ARRAY_TYPE)
    {
      exp = decl_constant_value_for_broken_optimization (exp);
      type = ((exp)->common.type);
    }
  orig_exp = exp;
  while (((enum tree_code) (exp)->common.code) == NON_LVALUE_EXPR
  || (((enum tree_code) (exp)->common.code) == NOP_EXPR
      && ((((exp)->exp.operands[0]))->common.type) == ((exp)->common.type)))
    exp = ((exp)->exp.operands[0]);
  if ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (exp)->common.code))])) != 0))
    (((exp)->exp.complexity) = (int) (((enum tree_code) ((orig_exp)->exp.complexity))));
  if (code == ENUMERAL_TYPE)
    {
      type = c_common_type_for_size (((((type)->type.precision)) > (((integer_types[itk_int])->type.precision)) ? (((type)->type.precision)) : (((integer_types[itk_int])->type.precision)))
                                          ,
         ((((type)->type.precision)
           >= ((integer_types[itk_int])->type.precision))
          && ((type)->common.unsigned_flag)));
      return convert (type, exp);
    }
  if (((enum tree_code) (exp)->common.code) == COMPONENT_REF
      && ((((((exp)->exp.operands[1])))->decl.lang_flag_4) == 1)
      && 0 > compare_tree_int (((((exp)->exp.operands[1]))->decl.size),
          ((integer_types[itk_int])->type.precision)))
    return convert (integer_types[itk_int], exp);
  if (c_promoting_integer_type_p (type))
    {
      if (((type)->common.unsigned_flag)
   && ((type)->type.precision) == ((integer_types[itk_int])->type.precision))
 return convert (integer_types[itk_unsigned_int], exp);
      return convert (integer_types[itk_int], exp);
    }
  if (code == VOID_TYPE)
    {
      error ("void value not ignored as it ought to be");
      return global_trees[TI_ERROR_MARK];
    }
  return exp;
}
static tree
lookup_field (tree decl, tree component)
{
  tree type = ((decl)->common.type);
  tree field;
  if (((type)->type.lang_specific))
    {
      int bot, top, half;
      tree *field_array = &((type)->type.lang_specific)->s->elts[0];
      field = ((type)->type.value1s);
      bot = 0;
      top = ((type)->type.lang_specific)->s->len;
      while (top - bot > 1)
 {
   half = (top - bot + 1) >> 1;
   field = field_array[bot+half];
   if (((field)->decl.name) == (tree) ((void *)0))
     {
       while (((field_array[bot])->decl.name) == (tree) ((void *)0))
  {
    field = field_array[bot++];
    if (((enum tree_code) (((field)->common.type))->common.code) == RECORD_TYPE
        || ((enum tree_code) (((field)->common.type))->common.code) == UNION_TYPE)
      {
        tree anon = lookup_field (field, component);
        if (anon)
   return tree_cons_stat ((tree) ((void *)0),field,anon );
      }
  }
       if (bot > top)
  return (tree) ((void *)0);
       continue;
     }
   if (((field)->decl.name) == component)
     break;
   if (((field)->decl.name) < component)
     bot += half;
   else
     top = bot + half;
 }
      if (((field_array[bot])->decl.name) == component)
 field = field_array[bot];
      else if (((field)->decl.name) != component)
 return (tree) ((void *)0);
    }
  else
    {
      for (field = ((type)->type.value1s); field; field = ((field)->common.chain))
 {
   if (((field)->decl.name) == (tree) ((void *)0)
       && (((enum tree_code) (((field)->common.type))->common.code) == RECORD_TYPE
    || ((enum tree_code) (((field)->common.type))->common.code) == UNION_TYPE))
     {
       tree anon = lookup_field (field, component);
       if (anon)
  return tree_cons_stat ((tree) ((void *)0),field,anon );
     }
   if (((field)->decl.name) == component)
     break;
 }
      if (field == (tree) ((void *)0))
 return (tree) ((void *)0);
    }
  return tree_cons_stat ((tree) ((void *)0),field,(tree) ((void *)0) );
}
tree
build_component_ref (tree datum, tree component)
{
  tree type = ((datum)->common.type);
  enum tree_code code = ((enum tree_code) (type)->common.code);
  tree field = ((void *)0);
  tree ref;
  if (!objc_is_public (datum, component))
    return global_trees[TI_ERROR_MARK];
  switch (((enum tree_code) (datum)->common.code))
    {
    case COMPOUND_EXPR:
      {
 tree value1 = build_component_ref (((datum)->exp.operands[1]), component);
 return build (COMPOUND_EXPR, ((value1)->common.type),
        ((datum)->exp.operands[0]), non_lvalue (value1));
      }
    default:
      break;
    }
  if (code == RECORD_TYPE || code == UNION_TYPE)
    {
      if (!(((type)->type.size) != (tree) ((void *)0)))
 {
   c_incomplete_type_error ((tree) ((void *)0), type);
   return global_trees[TI_ERROR_MARK];
 }
      field = lookup_field (datum, component);
      if (!field)
 {
   error ("%s has no member named `%s'",
   code == RECORD_TYPE ? "structure" : "union",
   ((const char *) (component)->identifier.id.str));
   return global_trees[TI_ERROR_MARK];
 }
      do
 {
   tree subdatum = ((field)->list.value1);
   if (((subdatum)->common.type) == global_trees[TI_ERROR_MARK])
     return global_trees[TI_ERROR_MARK];
   ref = build (COMPONENT_REF, ((subdatum)->common.type), datum, subdatum,
         (tree) ((void *)0));
   if (((datum)->common.readonly_flag) || ((subdatum)->common.readonly_flag))
     ((ref)->common.readonly_flag) = 1;
   if (((datum)->common.volatile_flag) || ((subdatum)->common.volatile_flag))
     ((ref)->common.volatile_flag) = 1;
   if (((subdatum)->common.deprecated_flag))
     warn_deprecated_use (subdatum);
   datum = ref;
   field = ((field)->common.chain);
 }
      while (field);
      return ref;
    }
  else if (code != ERROR_MARK)
    error ("request for member `%s' in something not a structure or union",
     ((const char *) (component)->identifier.id.str));
  return global_trees[TI_ERROR_MARK];
}
tree
build_indirect_ref (tree ptr, const char *errorstring1)
{
  tree pointer = default_conversion (ptr);
  tree type = ((pointer)->common.type);
  if (((enum tree_code) (type)->common.code) == POINTER_TYPE)
    {
      if (((enum tree_code) (pointer)->common.code) == ADDR_EXPR
   && (((((pointer)->exp.operands[0]))->common.type)
       == ((type)->common.type)))
 return ((pointer)->exp.operands[0]);
      else
 {
   tree t = ((type)->common.type);
   tree ref = build1_stat (INDIRECT_REF,((t)->type.main_variant),pointer );
   if (!((((t)->type.size) != (tree) ((void *)0)) || (((enum tree_code) (t)->common.code) == VOID_TYPE)) && ((enum tree_code) (t)->common.code) != ARRAY_TYPE)
     {
       error ("dereferencing pointer to incomplete type");
       return global_trees[TI_ERROR_MARK];
     }
   if ((((enum tree_code) (t)->common.code) == VOID_TYPE) && skip_evaluation == 0)
     warning ("dereferencing `void *' pointer");
   ((ref)->common.readonly_flag) = ((t)->common.readonly_flag);
   ((ref)->common.side_effects_flag)
     = ((t)->common.volatile_flag) || ((pointer)->common.side_effects_flag);
   ((ref)->common.volatile_flag) = ((t)->common.volatile_flag);
   return ref;
 }
    }
  else if (((enum tree_code) (pointer)->common.code) != ERROR_MARK)
    error ("invalid type argument of `%s'", errorstring1);
  return global_trees[TI_ERROR_MARK];
}
tree
build_array_ref (tree array, tree index)
{
  if (index == 0)
    {
      error ("subscript missing in array reference");
      return global_trees[TI_ERROR_MARK];
    }
  if (((array)->common.type) == global_trees[TI_ERROR_MARK]
      || ((index)->common.type) == global_trees[TI_ERROR_MARK])
    return global_trees[TI_ERROR_MARK];
  if (((enum tree_code) (((array)->common.type))->common.code) == ARRAY_TYPE)
    {
      tree rval, type;
      if (warn_char_subscripts
   && ((((index)->common.type))->type.main_variant) == integer_types[itk_char])
 warning ("array subscript has type `char'");
      index = default_conversion (index);
      if (((enum tree_code) (((index)->common.type))->common.code) != INTEGER_TYPE)
 {
   error ("array subscript is not an integer");
   return global_trees[TI_ERROR_MARK];
 }
      if (((enum tree_code) (index)->common.code) != INTEGER_CST
   || ((((((((array)->common.type))->common.type))->type.size) != (tree) ((void *)0))
       && ((enum tree_code) (((((((array)->common.type))->common.type))->type.size))->common.code) != INTEGER_CST))
 {
   if (!c_mark_addressable (array))
     return global_trees[TI_ERROR_MARK];
 }
      if (((enum tree_code) (index)->common.code) == INTEGER_CST
   && ((((array)->common.type))->type.value1s)
   && ! int_fits_type_p (index, ((((array)->common.type))->type.value1s)))
 {
   if (!c_mark_addressable (array))
     return global_trees[TI_ERROR_MARK];
 }
      if (pedantic)
 {
   tree foo = array;
   while (((enum tree_code) (foo)->common.code) == COMPONENT_REF)
     foo = ((foo)->exp.operands[0]);
   if (((enum tree_code) (foo)->common.code) == VAR_DECL && ((foo)->decl.lang_flag_4))
     pedwarn ("ISO C forbids subscripting `register' array");
   else if (! flag_isoc99 && ! lvalue_p (foo))
     pedwarn ("ISO C90 forbids subscripting non-lvalue array");
 }
      type = ((((((array)->common.type))->common.type))->type.main_variant);
      rval = build (ARRAY_REF, type, array, index, (tree) ((void *)0), (tree) ((void *)0));
      ((rval)->common.readonly_flag)
 |= (((((((array)->common.type))->common.type))->common.readonly_flag)
     | ((array)->common.readonly_flag));
      ((rval)->common.side_effects_flag)
 |= (((((((array)->common.type))->common.type))->common.volatile_flag)
     | ((array)->common.side_effects_flag));
      ((rval)->common.volatile_flag)
 |= (((((((array)->common.type))->common.type))->common.volatile_flag)
     | ((array)->common.volatile_flag));
      return require_complete_type (fold (rval));
    }
  {
    tree ar = default_conversion (array);
    tree ind = default_conversion (index);
    if (warn_char_subscripts
 && ((enum tree_code) (((index)->common.type))->common.code) == INTEGER_TYPE
 && ((((index)->common.type))->type.main_variant) == integer_types[itk_char])
      warning ("subscript has type `char'");
    if (((enum tree_code) (((ar)->common.type))->common.code) == INTEGER_TYPE)
      {
 tree temp = ar;
 ar = ind;
 ind = temp;
      }
    if (ar == global_trees[TI_ERROR_MARK])
      return ar;
    if (((enum tree_code) (((ar)->common.type))->common.code) != POINTER_TYPE
 || ((enum tree_code) (((((ar)->common.type))->common.type))->common.code) == FUNCTION_TYPE)
      {
 error ("subscripted value is neither array nor pointer");
 return global_trees[TI_ERROR_MARK];
      }
    if (((enum tree_code) (((ind)->common.type))->common.code) != INTEGER_TYPE)
      {
 error ("array subscript is not an integer");
 return global_trees[TI_ERROR_MARK];
      }
    return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, ind, 0),
          "array indexing");
  }
}
tree
build_external_ref (tree id, int fun)
{
  tree ref;
  tree decl = lookup_name (id);
  tree objc_ivar = lookup_objc_ivar (id);
  if (decl && decl != global_trees[TI_ERROR_MARK])
    {
      if (!objc_ivar)
 ref = decl;
      else if (decl != objc_ivar && !(! ((decl)->decl.context) || ((enum tree_code) (((decl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL))
 {
   warning ("local declaration of `%s' hides instance variable",
     ((const char *) (id)->identifier.id.str));
   ref = decl;
 }
      else
 ref = objc_ivar;
    }
  else if (objc_ivar)
    ref = objc_ivar;
  else if (fun)
    ref = implicitly_declare (id);
  else if (decl == global_trees[TI_ERROR_MARK])
    return global_trees[TI_ERROR_MARK];
  else
    {
      undeclared_variable (id);
      return global_trees[TI_ERROR_MARK];
    }
  if (((ref)->common.type) == global_trees[TI_ERROR_MARK])
    return global_trees[TI_ERROR_MARK];
  if (((ref)->common.deprecated_flag))
    warn_deprecated_use (ref);
  if (!skip_evaluation)
    assemble_external (ref);
  ((ref)->common.used_flag) = 1;
  if (((enum tree_code) (ref)->common.code) == CONST_DECL)
    {
      ref = ((ref)->decl.initial);
      ((ref)->common.constant_flag) = 1;
      ((ref)->common.invariant_flag) = 1;
    }
  else if (current_function_decl != 0
    && !(! ((current_function_decl)->decl.context) || ((enum tree_code) (((current_function_decl)->decl.context))->common.code) == TRANSLATION_UNIT_DECL)
    && (((enum tree_code) (ref)->common.code) == VAR_DECL
        || ((enum tree_code) (ref)->common.code) == PARM_DECL
        || ((enum tree_code) (ref)->common.code) == FUNCTION_DECL))
    {
      tree context = decl_function_context (ref);
      if (context != 0 && context != current_function_decl)
 ((ref)->decl.nonlocal_flag) = 1;
    }
  return ref;
}
tree
build_function_call (tree function, tree params)
{
  tree fntype, fundecl = 0;
  tree coerced_params;
  tree name = (tree) ((void *)0), result;
  tree tem;
  while ((((enum tree_code) (function)->common.code) == NOP_EXPR || ((enum tree_code) (function)->common.code) == CONVERT_EXPR || ((enum tree_code) (function)->common.code) == NON_LVALUE_EXPR) && ((function)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((function)->common.type) == ((((function)->exp.operands[0]))->common.type))) (function) = ((function)->exp.operands[0]);
  if (((enum tree_code) (function)->common.code) == FUNCTION_DECL)
    {
      name = ((function)->decl.name);
      fntype = build_qualified_type ((((function)->common.type)), ((((function)->common.readonly_flag)) ? 0x1 : 0) | ((((function)->common.volatile_flag)) ? 0x2 : 0))
                                     ;
      fundecl = function;
      function = build1_stat (ADDR_EXPR,build_pointer_type (fntype),function );
    }
  else
    function = default_conversion (function);
  fntype = ((function)->common.type);
  if (((enum tree_code) (fntype)->common.code) == ERROR_MARK)
    return global_trees[TI_ERROR_MARK];
  if (!(((enum tree_code) (fntype)->common.code) == POINTER_TYPE
 && ((enum tree_code) (((fntype)->common.type))->common.code) == FUNCTION_TYPE))
    {
      error ("called object is not a function");
      return global_trees[TI_ERROR_MARK];
    }
  if (fundecl && ((fundecl)->common.volatile_flag))
    current_function_returns_abnormally = 1;
  fntype = ((fntype)->common.type);
  if (! (c_language & clk_objc)
      && ((enum tree_code) (function)->common.code) == NOP_EXPR
      && ((enum tree_code) (tem = ((function)->exp.operands[0]))->common.code) == ADDR_EXPR
      && ((enum tree_code) (tem = ((tem)->exp.operands[0]))->common.code) == FUNCTION_DECL
      && ! comptypes (fntype, ((tem)->common.type)))
    {
      tree return_type = ((fntype)->common.type);
      tree trap = build_function_call (built_in_decls[BUILT_IN_TRAP],
           (tree) ((void *)0));
      warning ("function called through a non-compatible type");
      inform ("if this code is reached, the program will abort");
      if ((((enum tree_code) (return_type)->common.code) == VOID_TYPE))
 return trap;
      else
 {
   tree rhs;
   if ((((enum tree_code) (return_type)->common.code) == ARRAY_TYPE || ((enum tree_code) (return_type)->common.code) == RECORD_TYPE || ((enum tree_code) (return_type)->common.code) == UNION_TYPE || ((enum tree_code) (return_type)->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (return_type)->common.code) == SET_TYPE))
     rhs = build_compound_literal (return_type,
       build_constructor (return_type,
            (tree) ((void *)0)));
   else
     rhs = fold (build1_stat (NOP_EXPR,return_type,global_trees[TI_INTEGER_ZERO] ));
   return build (COMPOUND_EXPR, return_type, trap, rhs);
 }
    }
  coerced_params
    = convert_arguments (((fntype)->type.value1s), params, name, fundecl);
  check_function_arguments (((fntype)->type.attributes), coerced_params);
  result = build (CALL_EXPR, ((fntype)->common.type),
    function, coerced_params, (tree) ((void *)0));
  ((result)->common.side_effects_flag) = 1;
  if (require_constant_value)
    {
      result = fold_initializer (result);
      if (((result)->common.constant_flag)
   && (name == (tree) ((void *)0)
       || strncmp (((const char *) (name)->identifier.id.str), "__builtin_", 10) != 0))
 pedwarn_init ("initializer element is not constant");
    }
  else
    result = fold (result);
  if ((((enum tree_code) (((result)->common.type))->common.code) == VOID_TYPE))
    return result;
  return require_complete_type (result);
}
static tree
convert_arguments (tree typelist, tree value1s, tree name, tree fundecl)
{
  tree typetail, valtail;
  tree result = ((void *)0);
  int parmnum;
  for (valtail = values, typetail = typelist, parmnum = 0;
       valtail;
       valtail = ((valtail)->common.chain), parmnum++)
    {
      tree type = typetail ? ((typetail)->list.value1) : 0;
      tree val = ((valtail)->list.value1);
      if (type == global_trees[TI_VOID_TYPE])
 {
   if (name)
     error ("too many arguments to function `%s'",
     ((const char *) (name)->identifier.id.str));
   else
     error ("too many arguments to function");
   break;
 }
      if (((enum tree_code) (val)->common.code) == NON_LVALUE_EXPR)
 val = ((val)->exp.operands[0]);
      val = default_function_array_conversion (val);
      val = require_complete_type (val);
      if (type != 0)
 {
   tree parmval;
   if (!(((type)->type.size) != (tree) ((void *)0)))
     {
       error ("type of formal parameter %d is incomplete", parmnum + 1);
       parmval = val;
     }
   else
     {
       if (warn_conversion || warn_traditional)
  {
    int formal_prec = ((type)->type.precision);
    if ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
        && ((enum tree_code) (((val)->common.type))->common.code) == REAL_TYPE)
      warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name, parmnum + 1);
    if ((((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
        && ((enum tree_code) (((val)->common.type))->common.code) == COMPLEX_TYPE)
      warn_for_assignment ("%s as integer rather than complex due to prototype", (char *) 0, name, parmnum + 1);
    else if (((enum tree_code) (type)->common.code) == COMPLEX_TYPE
      && ((enum tree_code) (((val)->common.type))->common.code) == REAL_TYPE)
      warn_for_assignment ("%s as complex rather than floating due to prototype", (char *) 0, name, parmnum + 1);
    else if (((enum tree_code) (type)->common.code) == REAL_TYPE
      && (((enum tree_code) (((val)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((val)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((val)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((val)->common.type))->common.code) == CHAR_TYPE))
      warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name, parmnum + 1);
    else if (((enum tree_code) (type)->common.code) == COMPLEX_TYPE
      && (((enum tree_code) (((val)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((val)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((val)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((val)->common.type))->common.code) == CHAR_TYPE))
      warn_for_assignment ("%s as complex rather than integer due to prototype", (char *) 0, name, parmnum + 1);
    else if (((enum tree_code) (type)->common.code) == REAL_TYPE
      && ((enum tree_code) (((val)->common.type))->common.code) == COMPLEX_TYPE)
      warn_for_assignment ("%s as floating rather than complex due to prototype", (char *) 0, name, parmnum + 1);
    else if (((enum tree_code) (type)->common.code) == REAL_TYPE
      && ((enum tree_code) (((val)->common.type))->common.code) == REAL_TYPE)
      {
        if (formal_prec == ((global_trees[TI_FLOAT_TYPE])->type.precision))
   warn_for_assignment ("%s as `float' rather than `double' due to prototype", (char *) 0, name, parmnum + 1);
      }
    else if (warn_conversion && (((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
      && (((enum tree_code) (((val)->common.type))->common.code) == INTEGER_TYPE || ((enum tree_code) (((val)->common.type))->common.code) == ENUMERAL_TYPE || ((enum tree_code) (((val)->common.type))->common.code) == BOOLEAN_TYPE || ((enum tree_code) (((val)->common.type))->common.code) == CHAR_TYPE))
      {
        tree would_have_been = default_conversion (val);
        tree type1 = ((would_have_been)->common.type);
        if (((enum tree_code) (type)->common.code) == ENUMERAL_TYPE
     && (((type)->type.main_variant)
         == ((((val)->common.type))->type.main_variant)))
   ;
        else if (formal_prec != ((type1)->type.precision))
   warn_for_assignment ("%s with different width due to prototype", (char *) 0, name, parmnum + 1);
        else if (((type)->common.unsigned_flag) == ((type1)->common.unsigned_flag))
   ;
        else if (((enum tree_code) (type)->common.code) == ENUMERAL_TYPE)
   ;
        else if (((enum tree_code) (val)->common.code) == INTEGER_CST
          && int_fits_type_p (val, type))
   ;
        else if (((enum tree_code) (val)->common.code) == NOP_EXPR
          && ((enum tree_code) (((val)->exp.operands[0]))->common.code) == INTEGER_CST
          && int_fits_type_p (((val)->exp.operands[0]), type))
   ;
        else if (((((val)->common.type))->type.precision) < ((type)->type.precision)
          && ((((val)->common.type))->common.unsigned_flag))
   ;
        else if (((type)->common.unsigned_flag))
   warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name, parmnum + 1);
        else
   warn_for_assignment ("%s as signed due to prototype", (char *) 0, name, parmnum + 1);
      }
  }
       parmval = convert_for_assignment (type, val,
             (char *) 0,
      fundecl, name, parmnum + 1);
       if (targetm.calls.promote_prototypes (fundecl ? ((fundecl)->common.type) : 0)
    && (((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
    && (((type)->type.precision) < ((integer_types[itk_int])->type.precision)))
  parmval = default_conversion (parmval);
     }
   result = tree_cons_stat ((tree) ((void *)0),parmval,result );
 }
      else if (((enum tree_code) (((val)->common.type))->common.code) == REAL_TYPE
               && (((((val)->common.type))->type.precision)
            < ((global_trees[TI_DOUBLE_TYPE])->type.precision)))
 result = tree_cons_stat ((tree) ((void *)0),convert (global_trees[TI_DOUBLE_TYPE], val),result );
      else
 result = tree_cons_stat ((tree) ((void *)0),default_conversion (val),result );
      if (typetail)
 typetail = ((typetail)->common.chain);
    }
  if (typetail != 0 && ((typetail)->list.value1) != global_trees[TI_VOID_TYPE])
    {
      if (name)
 error ("too few arguments to function `%s'",
        ((const char *) (name)->identifier.id.str));
      else
 error ("too few arguments to function");
    }
  return nreverse (result);
}
tree
parser_build_binary_op (enum tree_code code, tree arg1, tree arg2)
{
  tree result = build_binary_op (code, arg1, arg2, 1);
  char class;
  char class1 = tree_code_type[(int) (((enum tree_code) (arg1)->common.code))];
  char class2 = tree_code_type[(int) (((enum tree_code) (arg2)->common.code))];
  enum tree_code code1 = ERROR_MARK;
  enum tree_code code2 = ERROR_MARK;
  if (((enum tree_code) (result)->common.code) == ERROR_MARK)
    return global_trees[TI_ERROR_MARK];
  if ((strchr ("<12ers", (class1)) != 0))
    code1 = ((enum tree_code) ((arg1)->exp.complexity));
  if ((strchr ("<12ers", (class2)) != 0))
    code2 = ((enum tree_code) ((arg2)->exp.complexity));
  if (warn_parentheses)
    {
      if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
 {
   if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
       || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
     warning ("suggest parentheses around + or - inside shift");
 }
      if (code == TRUTH_ORIF_EXPR)
 {
   if (code1 == TRUTH_ANDIF_EXPR
       || code2 == TRUTH_ANDIF_EXPR)
     warning ("suggest parentheses around && within ||");
 }
      if (code == BIT_IOR_EXPR)
 {
   if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
       || code1 == PLUS_EXPR || code1 == MINUS_EXPR
       || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
       || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
     warning ("suggest parentheses around arithmetic in operand of |");
   if (tree_code_type[(int) (code1)] == '<' || tree_code_type[(int) (code2)] == '<')
     warning ("suggest parentheses around comparison in operand of |");
 }
      if (code == BIT_XOR_EXPR)
 {
   if (code1 == BIT_AND_EXPR
       || code1 == PLUS_EXPR || code1 == MINUS_EXPR
       || code2 == BIT_AND_EXPR
       || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
     warning ("suggest parentheses around arithmetic in operand of ^");
   if (tree_code_type[(int) (code1)] == '<' || tree_code_type[(int) (code2)] == '<')
     warning ("suggest parentheses around comparison in operand of ^");
 }
      if (code == BIT_AND_EXPR)
 {
   if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
       || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
     warning ("suggest parentheses around + or - in operand of &");
   if (tree_code_type[(int) (code1)] == '<' || tree_code_type[(int) (code2)] == '<')
     warning ("suggest parentheses around comparison in operand of &");
 }
    }
  if (tree_code_type[(int) (code)] == '<' && extra_warnings
      && (tree_code_type[(int) (code1)] == '<' || tree_code_type[(int) (code2)] == '<'))
    warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
  unsigned_conversion_warning (result, arg1);
  unsigned_conversion_warning (result, arg2);
  overflow_warning (result);
  class = tree_code_type[(int) (((enum tree_code) (result)->common.code))];
  if ((strchr ("<12ers", (class)) != 0))
    (((result)->exp.complexity) = (int) (code));
  else
    {
      result = build1_stat (NON_LVALUE_EXPR,((result)->common.type),result );
      (((result)->exp.complexity) = (int) (code));
    }
  return result;
}
static tree
pointer_diff (tree op0, tree op1)
{
  tree restype = global_trees[TI_PTRDIFF_TYPE];
  tree target_type = ((((op0)->common.type))->common.type);
  tree con0, con1, lit0, lit1;
  tree orig_op1 = op1;
  if (pedantic || warn_pointer_arith)
    {
      if (((enum tree_code) (target_type)->common.code) == VOID_TYPE)
 pedwarn ("pointer of type `void *' used in subtraction");
      if (((enum tree_code) (target_type)->common.code) == FUNCTION_TYPE)
 pedwarn ("pointer to a function used in subtraction");
    }
  con0 = ((enum tree_code) (op0)->common.code) == NOP_EXPR ? ((op0)->exp.operands[0]) : op0;
  con1 = ((enum tree_code) (op1)->common.code) == NOP_EXPR ? ((op1)->exp.operands[0]) : op1;
  if (((enum tree_code) (con0)->common.code) == PLUS_EXPR)
    {
      lit0 = ((con0)->exp.operands[1]);
      con0 = ((con0)->exp.operands[0]);
    }
  else
    lit0 = global_trees[TI_INTEGER_ZERO];
  if (((enum tree_code) (con1)->common.code) == PLUS_EXPR)
    {
      lit1 = ((con1)->exp.operands[1]);
      con1 = ((con1)->exp.operands[0]);
    }
  else
    lit1 = global_trees[TI_INTEGER_ZERO];
  if (operand_equal_p (con0, con1, 0))
    {
      op0 = lit0;
      op1 = lit1;
    }
  op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
    convert (restype, op1), 0);
  if (!((((((((orig_op1)->common.type))->common.type))->type.size) != (tree) ((void *)0)) || (((enum tree_code) (((((orig_op1)->common.type))->common.type))->common.code) == VOID_TYPE)))
    error ("arithmetic on pointer to an incomplete type");
  op1 = c_size_in_bytes (target_type);
  return fold (build (EXACT_DIV_EXPR, restype, op0, convert (restype, op1)));
}
tree
build_unary_op (enum tree_code code, tree xarg, int flag)
{
  tree arg = xarg;
  tree argtype = 0;
  enum tree_code typecode = ((enum tree_code) (((arg)->common.type))->common.code);
  tree val;
  int noconvert = flag;
  if (typecode == ERROR_MARK)
    return global_trees[TI_ERROR_MARK];
  if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
    typecode = INTEGER_TYPE;
  switch (code)
    {
    case CONVERT_EXPR:
      if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
     || typecode == COMPLEX_TYPE))
 {
   error ("wrong type argument to unary plus");
   return global_trees[TI_ERROR_MARK];
 }
      else if (!noconvert)
 arg = default_conversion (arg);
      arg = non_lvalue (arg);
      break;
    case NEGATE_EXPR:
      if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
     || typecode == COMPLEX_TYPE
     || typecode == VECTOR_TYPE))
 {
   error ("wrong type argument to unary minus");
   return global_trees[TI_ERROR_MARK];
 }
      else if (!noconvert)
 arg = default_conversion (arg);
      break;
    case BIT_NOT_EXPR:
      if (typecode == INTEGER_TYPE || typecode == VECTOR_TYPE)
 {
   if (!noconvert)
     arg = default_conversion (arg);
 }
      else if (typecode == COMPLEX_TYPE)
 {
   code = CONJ_EXPR;
   if (pedantic)
     pedwarn ("ISO C does not support `~' for complex conjugation");
   if (!noconvert)
     arg = default_conversion (arg);
 }
      else
 {
   error ("wrong type argument to bit-complement");
   return global_trees[TI_ERROR_MARK];
 }
      break;
    case ABS_EXPR:
      if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE))
 {
   error ("wrong type argument to abs");
   return global_trees[TI_ERROR_MARK];
 }
      else if (!noconvert)
 arg = default_conversion (arg);
      break;
    case CONJ_EXPR:
      if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
     || typecode == COMPLEX_TYPE))
 {
   error ("wrong type argument to conjugation");
   return global_trees[TI_ERROR_MARK];
 }
      else if (!noconvert)
 arg = default_conversion (arg);
      break;
    case TRUTH_NOT_EXPR:
      if (typecode != INTEGER_TYPE
   && typecode != REAL_TYPE && typecode != POINTER_TYPE
   && typecode != COMPLEX_TYPE
   && typecode != ARRAY_TYPE && typecode != FUNCTION_TYPE)
 {
   error ("wrong type argument to unary exclamation mark");
   return global_trees[TI_ERROR_MARK];
 }
      arg = lang_hooks.truthvalue_conversion (arg);
      return invert_truthvalue (arg);
    case NOP_EXPR:
      break;
    case REALPART_EXPR:
      if (((enum tree_code) (arg)->common.code) == COMPLEX_CST)
 return ((arg)->complex.real);
      else if (((enum tree_code) (((arg)->common.type))->common.code) == COMPLEX_TYPE)
 return fold (build1_stat (REALPART_EXPR,((((arg)->common.type))->common.type),arg ));
      else
 return arg;
    case IMAGPART_EXPR:
      if (((enum tree_code) (arg)->common.code) == COMPLEX_CST)
 return ((arg)->complex.imag);
      else if (((enum tree_code) (((arg)->common.type))->common.code) == COMPLEX_TYPE)
 return fold (build1_stat (IMAGPART_EXPR,((((arg)->common.type))->common.type),arg ));
      else
 return convert (((arg)->common.type), global_trees[TI_INTEGER_ZERO]);
    case PREINCREMENT_EXPR:
    case POSTINCREMENT_EXPR:
    case PREDECREMENT_EXPR:
    case POSTDECREMENT_EXPR:
      if (typecode == COMPLEX_TYPE)
 {
   tree real, imag;
   if (pedantic)
     pedwarn ("ISO C does not support `++' and `--' on complex types");
   arg = stabilize_reference (arg);
   real = build_unary_op (REALPART_EXPR, arg, 1);
   imag = build_unary_op (IMAGPART_EXPR, arg, 1);
   return build (COMPLEX_EXPR, ((arg)->common.type),
   build_unary_op (code, real, 1), imag);
 }
      if (typecode != POINTER_TYPE
   && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
 {
   if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
            error ("wrong type argument to increment");
          else
            error ("wrong type argument to decrement");
   return global_trees[TI_ERROR_MARK];
 }
      {
 tree inc;
 tree result_type = ((arg)->common.type);
 arg = get_unwidened (arg, 0);
 argtype = ((arg)->common.type);
 if (typecode == POINTER_TYPE)
   {
     if (!((((((result_type)->common.type))->type.size) != (tree) ((void *)0)) || (((enum tree_code) (((result_type)->common.type))->common.code) == VOID_TYPE)))
       {
  if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
    error ("increment of pointer to unknown structure");
  else
    error ("decrement of pointer to unknown structure");
       }
     else if ((pedantic || warn_pointer_arith)
       && (((enum tree_code) (((result_type)->common.type))->common.code) == FUNCTION_TYPE
    || ((enum tree_code) (((result_type)->common.type))->common.code) == VOID_TYPE))
              {
  if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
    pedwarn ("wrong type argument to increment");
  else
    pedwarn ("wrong type argument to decrement");
       }
     inc = c_size_in_bytes (((result_type)->common.type));
   }
 else
   inc = global_trees[TI_INTEGER_ONE];
 inc = convert (argtype, inc);
 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
        || code == POSTINCREMENT_EXPR)
       ? "invalid lvalue in increment"
       : "invalid lvalue in decrement")))
   return global_trees[TI_ERROR_MARK];
 if (((arg)->common.readonly_flag))
   readonly_error (arg,
     ((code == PREINCREMENT_EXPR
       || code == POSTINCREMENT_EXPR)
      ? "increment" : "decrement"));
 if (((enum tree_code) (((arg)->common.type))->common.code) == BOOLEAN_TYPE)
   val = boolean_increment (code, arg);
 else
   val = build (code, ((arg)->common.type), arg, inc);
 ((val)->common.side_effects_flag) = 1;
 val = convert (result_type, val);
 if (((enum tree_code) (val)->common.code) != code)
   ((val)->common.nowarning_flag) = 1;
 return val;
      }
    case ADDR_EXPR:
      if (((enum tree_code) (arg)->common.code) == INDIRECT_REF)
 {
   if (lvalue_p (((arg)->exp.operands[0])))
     return non_lvalue (((arg)->exp.operands[0]));
   return ((arg)->exp.operands[0]);
 }
      if (((enum tree_code) (arg)->common.code) == ARRAY_REF)
 {
   if (!c_mark_addressable (((arg)->exp.operands[0])))
     return global_trees[TI_ERROR_MARK];
   return build_binary_op (PLUS_EXPR, ((arg)->exp.operands[0]),
      ((arg)->exp.operands[1]), 1);
 }
      else if (typecode != FUNCTION_TYPE && !flag
        && !lvalue_or_else (arg, "invalid lvalue in unary `&'"))
 return global_trees[TI_ERROR_MARK];
      argtype = ((arg)->common.type);
      if (((tree_code_type[(int) (((enum tree_code) (arg)->common.code))] == 'd') || tree_code_type[(int) (((enum tree_code) (arg)->common.code))] == 'r')
   && (((arg)->common.readonly_flag) || ((arg)->common.volatile_flag)))
   argtype = c_build_qualified_type ((argtype), ((((arg)->common.readonly_flag)) ? 0x1 : 0) | ((((arg)->common.volatile_flag)) ? 0x2 : 0))
                                ;
      argtype = build_pointer_type (argtype);
      if (!c_mark_addressable (arg))
 return global_trees[TI_ERROR_MARK];
      {
 tree addr;
 if (((enum tree_code) (arg)->common.code) == COMPONENT_REF)
   {
     tree field = ((arg)->exp.operands[1]);
     addr = build_unary_op (ADDR_EXPR, ((arg)->exp.operands[0]), flag);
     if (((((field))->decl.lang_flag_4) == 1))
       {
  error ("attempt to take address of bit-field structure member `%s'",
         ((const char *) (((field)->decl.name))->identifier.id.str));
  return global_trees[TI_ERROR_MARK];
       }
     addr = fold (build (PLUS_EXPR, argtype,
    convert (argtype, addr),
    convert (argtype, byte_position (field))));
   }
 else
   addr = build1_stat (code,argtype,arg );
 if (((enum tree_code) (arg)->common.code) == COMPOUND_LITERAL_EXPR)
   ((addr)->common.invariant_flag) = ((addr)->common.constant_flag) = 1;
 return addr;
      }
    default:
      break;
    }
  if (argtype == 0)
    argtype = ((arg)->common.type);
  val = build1_stat (code,argtype,arg );
  return require_constant_value ? fold_initializer (val) : fold (val);
}
int
lvalue_p (tree ref)
{
  enum tree_code code = ((enum tree_code) (ref)->common.code);
  switch (code)
    {
    case REALPART_EXPR:
    case IMAGPART_EXPR:
    case COMPONENT_REF:
      return lvalue_p (((ref)->exp.operands[0]));
    case COMPOUND_LITERAL_EXPR:
    case STRING1_CST:
      return 1;
    case INDIRECT_REF:
    case ARRAY_REF:
    case VAR_DECL:
    case PARM_DECL:
    case RESULT_DECL:
    case ERROR_MARK:
      return (((enum tree_code) (((ref)->common.type))->common.code) != FUNCTION_TYPE
       && ((enum tree_code) (((ref)->common.type))->common.code) != METHOD_TYPE);
    case BIND_EXPR:
      return ((enum tree_code) (((ref)->common.type))->common.code) == ARRAY_TYPE;
    default:
      return 0;
    }
}
static int
lvalue_or_else (tree ref, const char *msgid)
{
  int win = lvalue_p (ref);
  if (! win)
    error ("%s", msgid);
  return win;
}
void
readonly_error (tree arg, const char *msgid)
{
  if (((enum tree_code) (arg)->common.code) == COMPONENT_REF)
    {
      if (((((((arg)->exp.operands[0]))->common.type))->common.readonly_flag))
 readonly_error (((arg)->exp.operands[0]), msgid);
      else
 error ("%s of read-only member `%s'", msgid,
        ((const char *) (((((arg)->exp.operands[1]))->decl.name))->identifier.id.str));
    }
  else if (((enum tree_code) (arg)->common.code) == VAR_DECL)
    error ("%s of read-only variable `%s'", msgid,
    ((const char *) (((arg)->decl.name))->identifier.id.str));
  else
    error ("%s of read-only location", msgid);
}
unsigned char
c_mark_addressable (tree exp)
{
  tree x = exp;
  while (1)
    switch (((enum tree_code) (x)->common.code))
      {
      case COMPONENT_REF:
 if (((((((x)->exp.operands[1])))->decl.lang_flag_4) == 1))
   {
     error ("cannot take address of bit-field `%s'",
     ((const char *) (((((x)->exp.operands[1]))->decl.name))->identifier.id.str));
     return 0;
   }
      case ADDR_EXPR:
      case ARRAY_REF:
      case REALPART_EXPR:
      case IMAGPART_EXPR:
 x = ((x)->exp.operands[0]);
 break;
      case COMPOUND_LITERAL_EXPR:
      case CONSTRUCTOR:
 ((x)->common.addressable_flag) = 1;
 return 1;
      case VAR_DECL:
      case CONST_DECL:
      case PARM_DECL:
      case RESULT_DECL:
 if (((x)->decl.lang_flag_4)
     && ((x)->decl.nonlocal_flag))
   {
     if (((x)->common.public_flag) || ((x)->common.static_flag) || ((x)->decl.external_flag))
       {
  error ("global register variable `%s' used in nested function",
         ((const char *) (((x)->decl.name))->identifier.id.str));
  return 0;
       }
     pedwarn ("register variable `%s' used in nested function",
       ((const char *) (((x)->decl.name))->identifier.id.str));
   }
 else if (((x)->decl.lang_flag_4))
   {
     if (((x)->common.public_flag) || ((x)->common.static_flag) || ((x)->decl.external_flag))
       {
  error ("address of global register variable `%s' requested",
         ((const char *) (((x)->decl.name))->identifier.id.str));
  return 0;
       }
     pedwarn ("address of register variable `%s' requested",
       ((const char *) (((x)->decl.name))->identifier.id.str));
   }
      case FUNCTION_DECL:
 ((x)->common.addressable_flag) = 1;
      default:
 return 1;
    }
}
tree
build_conditional_expr (tree ifexp, tree op1, tree op2)
{
  tree type1;
  tree type2;
  enum tree_code code1;
  enum tree_code code2;
  tree result_type = ((void *)0);
  tree orig_op1 = op1, orig_op2 = op2;
  ifexp = lang_hooks.truthvalue_conversion (default_conversion (ifexp));
  if (((enum tree_code) (((op1)->common.type))->common.code) != VOID_TYPE)
    op1 = default_conversion (op1);
  if (((enum tree_code) (((op2)->common.type))->common.code) != VOID_TYPE)
    op2 = default_conversion (op2);
  if (((enum tree_code) (ifexp)->common.code) == ERROR_MARK
      || ((enum tree_code) (((op1)->common.type))->common.code) == ERROR_MARK
      || ((enum tree_code) (((op2)->common.type))->common.code) == ERROR_MARK)
    return global_trees[TI_ERROR_MARK];
  type1 = ((op1)->common.type);
  code1 = ((enum tree_code) (type1)->common.code);
  type2 = ((op2)->common.type);
  code2 = ((enum tree_code) (type2)->common.code);
  if (code1 == ARRAY_TYPE || code2 == ARRAY_TYPE)
    {
      error ("non-lvalue array in conditional expression");
      return global_trees[TI_ERROR_MARK];
    }
  if (((type1)->type.main_variant) == ((type2)->type.main_variant))
    {
      if (type1 == type2)
 result_type = type1;
      else
 result_type = ((type1)->type.main_variant);
    }
  else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
            || code1 == COMPLEX_TYPE)
           && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
               || code2 == COMPLEX_TYPE))
    {
      result_type = common_type (type1, type2);
      if (warn_sign_compare && !skip_evaluation)
 {
   int unsigned_op1 = ((((orig_op1)->common.type))->common.unsigned_flag);
   int unsigned_op2 = ((((orig_op2)->common.type))->common.unsigned_flag);
   if (unsigned_op1 ^ unsigned_op2)
     {
       if (! ((result_type)->common.unsigned_flag))
          ;
       else if ((unsigned_op2 && tree_expr_nonnegative_p (op1))
         || (unsigned_op1 && tree_expr_nonnegative_p (op2)))
          ;
       else
  warning ("signed and unsigned type in conditional expression");
     }
 }
    }
  else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
    {
      if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
 pedwarn ("ISO C forbids conditional expr with only one void side");
      result_type = global_trees[TI_VOID_TYPE];
    }
  else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
    {
      if (comp_target_types (type1, type2, 1))
 result_type = common_pointer_type (type1, type2);
      else if (integer_zerop (op1) && ((type1)->common.type) == global_trees[TI_VOID_TYPE]
        && ((enum tree_code) (orig_op1)->common.code) != NOP_EXPR)
 result_type = qualify_type (type2, type1);
      else if (integer_zerop (op2) && ((type2)->common.type) == global_trees[TI_VOID_TYPE]
        && ((enum tree_code) (orig_op2)->common.code) != NOP_EXPR)
 result_type = qualify_type (type1, type2);
      else if ((((enum tree_code) (((type1)->common.type))->common.code) == VOID_TYPE))
 {
   if (pedantic && ((enum tree_code) (((type2)->common.type))->common.code) == FUNCTION_TYPE)
     pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
   result_type = build_pointer_type (qualify_type (((type1)->common.type),
         ((type2)->common.type)));
 }
      else if ((((enum tree_code) (((type2)->common.type))->common.code) == VOID_TYPE))
 {
   if (pedantic && ((enum tree_code) (((type1)->common.type))->common.code) == FUNCTION_TYPE)
     pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
   result_type = build_pointer_type (qualify_type (((type2)->common.type),
         ((type1)->common.type)));
 }
      else
 {
   pedwarn ("pointer type mismatch in conditional expression");
   result_type = build_pointer_type (global_trees[TI_VOID_TYPE]);
 }
    }
  else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
    {
      if (! integer_zerop (op2))
 pedwarn ("pointer/integer type mismatch in conditional expression");
      else
 {
   op2 = global_trees[TI_NULL_POINTER];
 }
      result_type = type1;
    }
  else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
    {
      if (!integer_zerop (op1))
 pedwarn ("pointer/integer type mismatch in conditional expression");
      else
 {
   op1 = global_trees[TI_NULL_POINTER];
 }
      result_type = type2;
    }
  if (!result_type)
    {
      if (flag_cond_mismatch)
 result_type = global_trees[TI_VOID_TYPE];
      else
 {
   error ("type mismatch in conditional expression");
   return global_trees[TI_ERROR_MARK];
 }
    }
  result_type
    = build_qualified_type ((result_type), ((((op1)->common.readonly_flag) || ((op2)->common.readonly_flag)) ? 0x1 : 0) | ((((op1)->common.volatile_flag) || ((op2)->common.volatile_flag)) ? 0x2 : 0))
                                                          ;
  if (result_type != ((op1)->common.type))
    op1 = convert_and_check (result_type, op1);
  if (result_type != ((op2)->common.type))
    op2 = convert_and_check (result_type, op2);
  if (((enum tree_code) (ifexp)->common.code) == INTEGER_CST)
    return non_lvalue (integer_zerop (ifexp) ? op2 : op1);
  return fold (build (COND_EXPR, result_type, ifexp, op1, op2));
}
tree
build_compound_expr (tree list)
{
  return internal_build_compound_expr (list, 1);
}
static tree
internal_build_compound_expr (tree list, int first_p)
{
  tree rest;
  if (((list)->common.chain) == 0)
    {
      if (!first_p)
 ((list)->list.value1)
   = default_function_array_conversion (((list)->list.value1));
      if (!first_p && integer_zerop (((list)->list.value1)))
 return non_lvalue (((list)->list.value1));
      return ((list)->list.value1);
    }
  rest = internal_build_compound_expr (((list)->common.chain), 0);
  if (! ((((list)->list.value1))->common.side_effects_flag))
    {
      if (warn_unused_value
           && ! (((enum tree_code) (((list)->list.value1))->common.code) == CONVERT_EXPR
                && (((enum tree_code) (((((list)->list.value1))->common.type))->common.code) == VOID_TYPE)))
        warning ("left-hand operand of comma expression has no effect");
    }
  else if (warn_unused_value)
    warn_if_unused_value (((list)->list.value1), input_location);
  return build (COMPOUND_EXPR, ((rest)->common.type), ((list)->list.value1), rest);
}
tree
build_c_cast (tree type, tree expr)
{
  tree value1 = expr;
  if (type == global_trees[TI_ERROR_MARK] || expr == global_trees[TI_ERROR_MARK])
    return global_trees[TI_ERROR_MARK];
  if (!(c_language & clk_objc) || !objc_is_object_ptr (type))
    type = ((type)->type.main_variant);
  if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
    {
      error ("cast specifies array type");
      return global_trees[TI_ERROR_MARK];
    }
  if (((enum tree_code) (type)->common.code) == FUNCTION_TYPE)
    {
      error ("cast specifies function type");
      return global_trees[TI_ERROR_MARK];
    }
  if (type == ((((value1)->common.type))->type.main_variant))
    {
      if (pedantic)
 {
   if (((enum tree_code) (type)->common.code) == RECORD_TYPE
       || ((enum tree_code) (type)->common.code) == UNION_TYPE)
     pedwarn ("ISO C forbids casting nonscalar to the same type");
 }
    }
  else if (((enum tree_code) (type)->common.code) == UNION_TYPE)
    {
      tree field;
      value1 = default_function_array_conversion (value1);
      for (field = ((type)->type.value1s); field; field = ((field)->common.chain))
 if (comptypes (((((field)->common.type))->type.main_variant),
         ((((value1)->common.type))->type.main_variant)))
   break;
      if (field)
 {
   tree t;
   if (pedantic)
     pedwarn ("ISO C forbids casts to union type");
   t = digest_init (type,
      build_constructor (type,
           build_tree_list_stat(field,value1 )),
      0);
   ((t)->common.constant_flag) = ((value1)->common.constant_flag);
   ((t)->common.invariant_flag) = ((value1)->common.invariant_flag);
   return t;
 }
      error ("cast to union type from type not present in union");
      return global_trees[TI_ERROR_MARK];
    }
  else
    {
      tree otype, ovalue;
      if (type == global_trees[TI_VOID_TYPE])
 return build1_stat (CONVERT_EXPR,type,value1 );
      value1 = default_function_array_conversion (value1);
      otype = ((value1)->common.type);
      if (warn_cast_qual
   && ((enum tree_code) (type)->common.code) == POINTER_TYPE
   && ((enum tree_code) (otype)->common.code) == POINTER_TYPE)
 {
   tree in_type = type;
   tree in_otype = otype;
   int added = 0;
   int discarded = 0;
   do
     {
       in_otype = ((in_otype)->common.type);
       in_type = ((in_type)->common.type);
       if (((enum tree_code) (in_otype)->common.code) == FUNCTION_TYPE
    && ((enum tree_code) (in_type)->common.code) == FUNCTION_TYPE)
  added |= (((((in_type)->common.readonly_flag) * 0x1) | (((in_type)->common.volatile_flag) * 0x2) | (((in_type)->type.restrict_flag) * 0x4)) & ~((((in_otype)->common.readonly_flag) * 0x1) | (((in_otype)->common.volatile_flag) * 0x2) | (((in_otype)->type.restrict_flag) * 0x4)));
       else
  discarded |= (((((in_otype)->common.readonly_flag) * 0x1) | (((in_otype)->common.volatile_flag) * 0x2) | (((in_otype)->type.restrict_flag) * 0x4)) & ~((((in_type)->common.readonly_flag) * 0x1) | (((in_type)->common.volatile_flag) * 0x2) | (((in_type)->type.restrict_flag) * 0x4)));
     }
   while (((enum tree_code) (in_type)->common.code) == POINTER_TYPE
   && ((enum tree_code) (in_otype)->common.code) == POINTER_TYPE);
   if (added)
     warning ("cast adds new qualifiers to function type");
   if (discarded)
     warning ("cast discards qualifiers from pointer target type");
 }
      if (0 && warn_cast_align
   && ((enum tree_code) (type)->common.code) == POINTER_TYPE
   && ((enum tree_code) (otype)->common.code) == POINTER_TYPE
   && ((enum tree_code) (((otype)->common.type))->common.code) != VOID_TYPE
   && ((enum tree_code) (((otype)->common.type))->common.code) != FUNCTION_TYPE
   && !((((enum tree_code) (((otype)->common.type))->common.code) == UNION_TYPE
  || ((enum tree_code) (((otype)->common.type))->common.code) == RECORD_TYPE)
        && ((((otype)->common.type))->type.mode) == VOIDmode)
   && ((((type)->common.type))->type.align) > ((((otype)->common.type))->type.align))
 warning ("cast increases required alignment of target type");
      if (((enum tree_code) (type)->common.code) == INTEGER_TYPE
   && ((enum tree_code) (otype)->common.code) == POINTER_TYPE
   && ((type)->type.precision) != ((otype)->type.precision)
   && !((value1)->common.constant_flag))
 warning ("cast from pointer to integer of different size");
      if (warn_bad_function_cast
   && ((enum tree_code) (value1)->common.code) == CALL_EXPR
   && ((enum tree_code) (type)->common.code) != ((enum tree_code) (otype)->common.code))
 warning ("cast does not match function type");
      if (((enum tree_code) (type)->common.code) == POINTER_TYPE
   && ((enum tree_code) (otype)->common.code) == INTEGER_TYPE
   && ((type)->type.precision) != ((otype)->type.precision)
   && !((value1)->common.constant_flag))
 warning ("cast to pointer from integer of different size");
      if (((enum tree_code) (type)->common.code) == POINTER_TYPE
   && ((enum tree_code) (otype)->common.code) == POINTER_TYPE
   && ((enum tree_code) (expr)->common.code) == ADDR_EXPR
   && (tree_code_type[(int) (((enum tree_code) (((expr)->exp.operands[0]))->common.code))] == 'd')
   && flag_strict_aliasing && warn_strict_aliasing
   && !(((enum tree_code) (((type)->common.type))->common.code) == VOID_TYPE))
 {
   if (!(((((type)->common.type))->type.size) != (tree) ((void *)0)))
     warning ("type-punning to incomplete type might break strict-aliasing rules");
   else
     {
       long set1 = get_alias_set (((((expr)->exp.operands[0]))->common.type));
       long set2 = get_alias_set (((type)->common.type));
       if (!alias_sets_conflict_p (set1, set2))
  warning ("dereferencing type-punned pointer will break strict-aliasing rules");
       else if (warn_strict_aliasing > 1
         && !alias_sets_might_conflict_p (set1, set2))
  warning ("dereferencing type-punned pointer might break strict-aliasing rules");
     }
 }
      if (pedantic
   && ((enum tree_code) (type)->common.code) == POINTER_TYPE
   && ((enum tree_code) (otype)->common.code) == POINTER_TYPE
   && ((enum tree_code) (((otype)->common.type))->common.code) == FUNCTION_TYPE
   && ((enum tree_code) (((type)->common.type))->common.code) != FUNCTION_TYPE)
 pedwarn ("ISO C forbids conversion of function pointer to object pointer type");
      if (pedantic
   && ((enum tree_code) (type)->common.code) == POINTER_TYPE
   && ((enum tree_code) (otype)->common.code) == POINTER_TYPE
   && ((enum tree_code) (((type)->common.type))->common.code) == FUNCTION_TYPE
   && ((enum tree_code) (((otype)->common.type))->common.code) != FUNCTION_TYPE
   && !(integer_zerop (value1) && ((otype)->common.type) == global_trees[TI_VOID_TYPE]
        && ((enum tree_code) (expr)->common.code) != NOP_EXPR))
 pedwarn ("ISO C forbids conversion of object pointer to function pointer type");
      ovalue = value1;
      if (optimize && ((enum tree_code) (value1)->common.code) == VAR_DECL)
 value1 = decl_constant_value (value1);
      value1 = convert (type, value1);
      if (((enum tree_code) (value1)->common.code) == INTEGER_CST)
 {
   ((value1)->common.public_flag) = ((ovalue)->common.public_flag);
   if (tree_code_type[(int) (((enum tree_code) (ovalue)->common.code))] == 'c')
     ((value1)->common.static_flag) = ((ovalue)->common.static_flag);
 }
    }
  if (((enum tree_code) (value1)->common.code) == INTEGER_CST
      && ((enum tree_code) (expr)->common.code) == INTEGER_CST
      && ((enum tree_code) (((expr)->common.type))->common.code) != INTEGER_TYPE)
    value1 = non_lvalue (value1);
  if (value1 == expr)
    value1 = non_lvalue (value1);
  return value1;
}
tree
c_cast_expr (tree type, tree expr)
{
  int saved_wsp = warn_strict_prototypes;
  if (((enum tree_code) (expr)->common.code) == INTEGER_CST)
    warn_strict_prototypes = 0;
  type = groktypename (type);
  warn_strict_prototypes = saved_wsp;
  return build_c_cast (type, expr);
}
tree
build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
{
  tree result;
  tree newrhs;
  tree lhstype = ((lhs)->common.type);
  tree olhstype = lhstype;
  lhs = require_complete_type (lhs);
  if (((enum tree_code) (lhs)->common.code) == ERROR_MARK || ((enum tree_code) (rhs)->common.code) == ERROR_MARK)
    return global_trees[TI_ERROR_MARK];
  if (((enum tree_code) (rhs)->common.code) == NON_LVALUE_EXPR)
    rhs = ((rhs)->exp.operands[0]);
  newrhs = rhs;
  if (modifycode != NOP_EXPR)
    {
      lhs = stabilize_reference (lhs);
      newrhs = build_binary_op (modifycode, lhs, rhs, 1);
    }
  if (!lvalue_or_else (lhs, "invalid lvalue in assignment"))
    return global_trees[TI_ERROR_MARK];
  if (((lhs)->common.readonly_flag) || ((lhstype)->common.readonly_flag)
      || ((((enum tree_code) (lhstype)->common.code) == RECORD_TYPE
    || ((enum tree_code) (lhstype)->common.code) == UNION_TYPE)
   && ((lhstype)->common.lang_flag_1)))
    readonly_error (lhs, "assignment");
  if (((enum tree_code) (lhs)->common.code) == COMPONENT_REF
      && (((enum tree_code) (lhstype)->common.code) == INTEGER_TYPE
   || ((enum tree_code) (lhstype)->common.code) == BOOLEAN_TYPE
   || ((enum tree_code) (lhstype)->common.code) == REAL_TYPE
   || ((enum tree_code) (lhstype)->common.code) == ENUMERAL_TYPE))
    lhstype = ((get_unwidened (lhs, 0))->common.type);
  if (lhstype != ((lhs)->common.type))
    {
      lhs = copy_node_stat (lhs );
      ((lhs)->common.type) = lhstype;
    }
  newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
       (tree) ((void *)0), (tree) ((void *)0), 0);
  if (((enum tree_code) (newrhs)->common.code) == ERROR_MARK)
    return global_trees[TI_ERROR_MARK];
  result = build (MODIFY_EXPR, lhstype, lhs, newrhs);
  ((result)->common.side_effects_flag) = 1;
  if (olhstype == ((result)->common.type))
    return result;
  return convert_for_assignment (olhstype, result, "assignment",
     (tree) ((void *)0), (tree) ((void *)0), 0);
}
static tree
convert_for_assignment (tree type, tree rhs, const char *errtype,
   tree fundecl, tree funname, int parmnum)
{
  enum tree_code codel = ((enum tree_code) (type)->common.code);
  tree rhstype;
  enum tree_code coder;
  if (((enum tree_code) (rhs)->common.code) == NON_LVALUE_EXPR)
    rhs = ((rhs)->exp.operands[0]);
  if (((enum tree_code) (((rhs)->common.type))->common.code) == ARRAY_TYPE
      || ((enum tree_code) (((rhs)->common.type))->common.code) == FUNCTION_TYPE)
    rhs = default_conversion (rhs);
  else if (optimize && ((enum tree_code) (rhs)->common.code) == VAR_DECL)
    rhs = decl_constant_value_for_broken_optimization (rhs);
  rhstype = ((rhs)->common.type);
  coder = ((enum tree_code) (rhstype)->common.code);
  if (coder == ERROR_MARK)
    return global_trees[TI_ERROR_MARK];
  if (((type)->type.main_variant) == ((rhstype)->type.main_variant))
    {
      overflow_warning (rhs);
      if ((c_language & clk_objc))
 objc_comptypes (type, rhstype, 0);
      return rhs;
    }
  if (coder == VOID_TYPE)
    {
      error ("void value not ignored as it ought to be");
      return global_trees[TI_ERROR_MARK];
    }
  if (codel == REFERENCE_TYPE
      && comptypes (((type)->common.type), ((rhs)->common.type)) == 1)
    {
      if (!lvalue_p (rhs))
 {
   error ("cannot pass rvalue to reference parameter");
   return global_trees[TI_ERROR_MARK];
 }
      if (!c_mark_addressable (rhs))
 return global_trees[TI_ERROR_MARK];
      rhs = build1_stat (ADDR_EXPR,build_pointer_type (((rhs)->common.type)),rhs );
      if (((((rhs)->common.type))->common.type) != ((type)->common.type))
 rhs = build1_stat (NOP_EXPR,build_pointer_type (((type)->common.type)),rhs );
      rhs = build1_stat (NOP_EXPR,type,rhs );
      return rhs;
    }
  else if (codel == VECTOR_TYPE
           && vector_types_convertible_p (type, ((rhs)->common.type)))
    return convert (type, rhs);
  else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
     || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
     || codel == BOOLEAN_TYPE)
    && (coder == INTEGER_TYPE || coder == REAL_TYPE
        || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
        || coder == BOOLEAN_TYPE))
    return convert_and_check (type, rhs);
  else if (codel == UNION_TYPE && ((type)->type.transparent_union_flag) && ! errtype)
    {
      tree memb_types;
      tree marginal_memb_type = 0;
      for (memb_types = ((type)->type.value1s); memb_types;
    memb_types = ((memb_types)->common.chain))
 {
   tree memb_type = ((memb_types)->common.type);
   if (comptypes (((memb_type)->type.main_variant),
    ((rhstype)->type.main_variant)))
     break;
   if (((enum tree_code) (memb_type)->common.code) != POINTER_TYPE)
     continue;
   if (coder == POINTER_TYPE)
     {
       tree ttl = ((memb_type)->common.type);
       tree ttr = ((rhstype)->common.type);
       if ((((enum tree_code) (ttl)->common.code) == VOID_TYPE) || (((enum tree_code) (ttr)->common.code) == VOID_TYPE)
    || comp_target_types (memb_type, rhstype, 0))
  {
    if (((((ttl)->common.readonly_flag) * 0x1) | (((ttl)->common.volatile_flag) * 0x2) | (((ttl)->type.restrict_flag) * 0x4)) == ((((ttr)->common.readonly_flag) * 0x1) | (((ttr)->common.volatile_flag) * 0x2) | (((ttr)->type.restrict_flag) * 0x4))
        || ((((enum tree_code) (ttr)->common.code) == FUNCTION_TYPE
      && ((enum tree_code) (ttl)->common.code) == FUNCTION_TYPE)
     ? ((((((ttl)->common.readonly_flag) * 0x1) | (((ttl)->common.volatile_flag) * 0x2) | (((ttl)->type.restrict_flag) * 0x4)) | ((((ttr)->common.readonly_flag) * 0x1) | (((ttr)->common.volatile_flag) * 0x2) | (((ttr)->type.restrict_flag) * 0x4)))
        == ((((ttr)->common.readonly_flag) * 0x1) | (((ttr)->common.volatile_flag) * 0x2) | (((ttr)->type.restrict_flag) * 0x4)))
     : ((((((ttl)->common.readonly_flag) * 0x1) | (((ttl)->common.volatile_flag) * 0x2) | (((ttl)->type.restrict_flag) * 0x4)) | ((((ttr)->common.readonly_flag) * 0x1) | (((ttr)->common.volatile_flag) * 0x2) | (((ttr)->type.restrict_flag) * 0x4)))
        == ((((ttl)->common.readonly_flag) * 0x1) | (((ttl)->common.volatile_flag) * 0x2) | (((ttl)->type.restrict_flag) * 0x4)))))
      break;
    if (! marginal_memb_type)
      marginal_memb_type = memb_type;
  }
     }
   if (integer_zerop (rhs)
       || (((enum tree_code) (rhs)->common.code) == NOP_EXPR
    && integer_zerop (((rhs)->exp.operands[0]))))
     {
       rhs = global_trees[TI_NULL_POINTER];
       break;
     }
 }
      if (memb_types || marginal_memb_type)
 {
   if (! memb_types)
     {
       tree ttl = ((marginal_memb_type)->common.type);
       tree ttr = ((rhstype)->common.type);
       if (((enum tree_code) (ttr)->common.code) == FUNCTION_TYPE
    && ((enum tree_code) (ttl)->common.code) == FUNCTION_TYPE)
  {
    if (((((ttl)->common.readonly_flag) * 0x1) | (((ttl)->common.volatile_flag) * 0x2) | (((ttl)->type.restrict_flag) * 0x4)) & ~((((ttr)->common.readonly_flag) * 0x1) | (((ttr)->common.volatile_flag) * 0x2) | (((ttr)->type.restrict_flag) * 0x4)))
      warn_for_assignment ("%s makes qualified function pointer from unqualified",
      errtype, funname, parmnum);
  }
       else if (((((ttr)->common.readonly_flag) * 0x1) | (((ttr)->common.volatile_flag) * 0x2) | (((ttr)->type.restrict_flag) * 0x4)) & ~((((ttl)->common.readonly_flag) * 0x1) | (((ttl)->common.volatile_flag) * 0x2) | (((ttl)->type.restrict_flag) * 0x4)))
  warn_for_assignment ("%s discards qualifiers from pointer target type",
         errtype, funname,
         parmnum);
     }
   if (pedantic && ! ((fundecl)->decl.in_system_header1_flag))
     pedwarn ("ISO C prohibits argument conversion to union type");
   return build1_stat (NOP_EXPR,type,rhs );
 }
    }
  else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
    && (coder == codel))
    {
      tree ttl = ((type)->common.type);
      tree ttr = ((rhstype)->common.type);
      unsigned char is_opaque_pointer;
      int target_cmp = 0;
      is_opaque_pointer = (targetm.vector_opaque_p (type)
                           || targetm.vector_opaque_p (rhstype))
        && ((enum tree_code) (ttl)->common.code) == VECTOR_TYPE
        && ((enum tree_code) (ttr)->common.code) == VECTOR_TYPE;
      if ((((enum tree_code) (ttl)->common.code) == VOID_TYPE) || (((enum tree_code) (ttr)->common.code) == VOID_TYPE)
   || (target_cmp = comp_target_types (type, rhstype, 0))
   || is_opaque_pointer
   || (c_common_unsigned_type (((ttl)->type.main_variant))
       == c_common_unsigned_type (((ttr)->type.main_variant))))
 {
   if (pedantic
       && (((((enum tree_code) (ttl)->common.code) == VOID_TYPE) && ((enum tree_code) (ttr)->common.code) == FUNCTION_TYPE)
    ||
    ((((enum tree_code) (ttr)->common.code) == VOID_TYPE)
     && (!integer_zerop (rhs) || ((enum tree_code) (rhs)->common.code) == NOP_EXPR)
     && ((enum tree_code) (ttl)->common.code) == FUNCTION_TYPE)))
     warn_for_assignment ("ISO C forbids %s between function pointer and `void *'",
     errtype, funname, parmnum);
   else if (((enum tree_code) (ttr)->common.code) != FUNCTION_TYPE
     && ((enum tree_code) (ttl)->common.code) != FUNCTION_TYPE)
     {
       if (((((ttr)->common.readonly_flag) * 0x1) | (((ttr)->common.volatile_flag) * 0x2) | (((ttr)->type.restrict_flag) * 0x4)) & ~((((ttl)->common.readonly_flag) * 0x1) | (((ttl)->common.volatile_flag) * 0x2) | (((ttl)->type.restrict_flag) * 0x4)))
  warn_for_assignment ("%s discards qualifiers from pointer target type",
         errtype, funname, parmnum);
       else if ((((enum tree_code) (ttl)->common.code) == VOID_TYPE) || (((enum tree_code) (ttr)->common.code) == VOID_TYPE)
         || target_cmp)
  ;
       else if (pedantic)
  warn_for_assignment ("pointer targets in %s differ in signedness",
         errtype, funname, parmnum);
     }
   else if (((enum tree_code) (ttl)->common.code) == FUNCTION_TYPE
     && ((enum tree_code) (ttr)->common.code) == FUNCTION_TYPE)
     {
       if (((((ttl)->common.readonly_flag) * 0x1) | (((ttl)->common.volatile_flag) * 0x2) | (((ttl)->type.restrict_flag) * 0x4)) & ~((((ttr)->common.readonly_flag) * 0x1) | (((ttr)->common.volatile_flag) * 0x2) | (((ttr)->type.restrict_flag) * 0x4)))
  warn_for_assignment ("%s makes qualified function pointer from unqualified",
         errtype, funname, parmnum);
     }
 }
      else
 warn_for_assignment ("%s from incompatible pointer type",
        errtype, funname, parmnum);
      return convert (type, rhs);
    }
  else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
    {
      error ("invalid use of non-lvalue array");
      return global_trees[TI_ERROR_MARK];
    }
  else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
    {
      if (! (((enum tree_code) (rhs)->common.code) == INTEGER_CST && integer_zerop (rhs))
   &&
   ! (((enum tree_code) (rhs)->common.code) == NOP_EXPR
      && ((enum tree_code) (((rhs)->common.type))->common.code) == INTEGER_TYPE
      && ((enum tree_code) (((rhs)->exp.operands[0]))->common.code) == INTEGER_CST
      && integer_zerop (((rhs)->exp.operands[0]))))
   warn_for_assignment ("%s makes pointer from integer without a cast",
          errtype, funname, parmnum);
      return convert (type, rhs);
    }
  else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
    {
      warn_for_assignment ("%s makes integer from pointer without a cast",
      errtype, funname, parmnum);
      return convert (type, rhs);
    }
  else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
    return convert (type, rhs);
  if (!errtype)
    {
      if (funname)
 {
   tree selector = objc_message_selector ();
   if (selector && parmnum > 2)
     error ("incompatible type for argument %d of `%s'",
     parmnum - 2, ((const char *) (selector)->identifier.id.str));
   else
     error ("incompatible type for argument %d of `%s'",
     parmnum, ((const char *) (funname)->identifier.id.str));
 }
      else
 error ("incompatible type for argument %d of indirect function call",
        parmnum);
    }
  else
    error ("incompatible types in %s", errtype);
  return global_trees[TI_ERROR_MARK];
}
tree
c_convert_parm_for_inlining (tree parm, tree value1, tree fn, int argnum)
{
  tree ret, type;
  if (! value1 || ((((fn)->common.type))->type.value1s))
    return value1;
  type = ((parm)->common.type);
  ret = convert_for_assignment (type, value1,
    (char *) 0 , fn,
    ((fn)->decl.name), argnum);
  if (targetm.calls.promote_prototypes (((fn)->common.type))
      && (((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
      && (((type)->type.precision) < ((integer_types[itk_int])->type.precision)))
    ret = default_conversion (ret);
  return ret;
}
static void
warn_for_assignment (const char *msgid, const char *opname, tree function,
       int argnum)
{
  if (opname == 0)
    {
      tree selector = objc_message_selector ();
      char * new_opname;
      if (selector && argnum > 2)
 {
   function = selector;
   argnum -= 2;
 }
      if (argnum == 0)
 {
   if (function)
     {
       const char *const argstring1 = "passing arg of `%s'";
       new_opname = C_alloca(((function)->identifier.id.len) + strlen (argstring1) + 1 + 1)
                                    ;
       sprintf (new_opname, argstring1,
         ((const char *) (function)->identifier.id.str));
     }
   else
     {
       const char *const argnofun = "passing arg of pointer to function";
       new_opname = C_alloca(strlen (argnofun) + 1 + 1);
       sprintf (new_opname, argnofun);
     }
 }
      else if (function)
 {
   const char *const argstring1 = "passing arg %d of `%s'";
   new_opname = C_alloca(((function)->identifier.id.len) + strlen (argstring1) + 1 + 25 + 1)
                                                   ;
   sprintf (new_opname, argstring1, argnum,
     ((const char *) (function)->identifier.id.str));
 }
      else
 {
   const char *const argnofun = "passing arg %d of pointer to function";
   new_opname = C_alloca(strlen (argnofun) + 1 + 25 + 1);
   sprintf (new_opname, argnofun, argnum);
 }
      opname = new_opname;
    }
  pedwarn (msgid, opname);
}
static tree
valid_compound_expr_initializer (tree value1, tree endtype)
{
  if (((enum tree_code) (value1)->common.code) == COMPOUND_EXPR)
    {
      if (valid_compound_expr_initializer (((value1)->exp.operands[0]), endtype)
   == global_trees[TI_ERROR_MARK])
 return global_trees[TI_ERROR_MARK];
      return valid_compound_expr_initializer (((value1)->exp.operands[1]),
           endtype);
    }
  else if (! ((value1)->common.constant_flag)
    && ! initializer_constant_valid_p (value1, endtype))
    return global_trees[TI_ERROR_MARK];
  else
    return value1;
}
void
store_init_value (tree decl, tree init)
{
  tree value1, type;
  type = ((decl)->common.type);
  if (((enum tree_code) (type)->common.code) == ERROR_MARK)
    return;
  value1 = digest_init (type, init, ((decl)->common.static_flag));
  if (warn_traditional && !in_system_header1
      && (((enum tree_code) (((decl)->common.type))->common.code) == ARRAY_TYPE || ((enum tree_code) (((decl)->common.type))->common.code) == RECORD_TYPE || ((enum tree_code) (((decl)->common.type))->common.code) == UNION_TYPE || ((enum tree_code) (((decl)->common.type))->common.code) == QUAL_UNION_TYPE || ((enum tree_code) (((decl)->common.type))->common.code) == SET_TYPE) && ! ((decl)->common.static_flag))
    warning ("traditional C rejects automatic aggregate initialization");
  ((decl)->decl.initial) = value1;
  while ((((enum tree_code) (value1)->common.code) == NOP_EXPR || ((enum tree_code) (value1)->common.code) == CONVERT_EXPR || ((enum tree_code) (value1)->common.code) == NON_LVALUE_EXPR) && ((value1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((value1)->common.type) == ((((value1)->exp.operands[0]))->common.type))) (value1) = ((value1)->exp.operands[0]);
  constant_expression_warning (value1);
  if (((enum tree_code) (type)->common.code) == ARRAY_TYPE
      && ((type)->type.value1s) == 0
      && value1 != global_trees[TI_ERROR_MARK])
    {
      tree inside_init = init;
      if (((enum tree_code) (init)->common.code) == NON_LVALUE_EXPR)
 inside_init = ((init)->exp.operands[0]);
      inside_init = fold (inside_init);
      if (((enum tree_code) (inside_init)->common.code) == COMPOUND_LITERAL_EXPR)
 {
   tree decl = ((((((inside_init))->exp.operands[0])))->exp.operands[0]);
   if (((((decl)->common.type))->type.value1s))
     {
       ((type)->type.value1s) = ((((decl)->common.type))->type.value1s);
       layout_type (type);
       layout_decl (decl, 0);
     }
 }
    }
}
struct spelling
{
  int kind;
  union
    {
      int i;
      const char *s;
    } u;
};
static struct spelling *spelling;
static struct spelling *spelling_base;
static int spelling_size;
static void
push_string1 (const char *string1)
{
  { int depth = (spelling - spelling_base); if (depth >= spelling_size) { spelling_size += 10; if (spelling_base == 0) spelling_base = xmalloc (spelling_size * sizeof (struct spelling)); else spelling_base = xrealloc (spelling_base, spelling_size * sizeof (struct spelling)); (spelling = spelling_base + (depth)); } spelling->kind = (1); spelling->u.s = (string1); spelling++; };
}
static void
push_member_name (tree decl)
{
  const char *const string1
    = ((decl)->decl.name) ? ((const char *) (((decl)->decl.name))->identifier.id.str) : "<anonymous>";
  { int depth = (spelling - spelling_base); if (depth >= spelling_size) { spelling_size += 10; if (spelling_base == 0) spelling_base = xmalloc (spelling_size * sizeof (struct spelling)); else spelling_base = xrealloc (spelling_base, spelling_size * sizeof (struct spelling)); (spelling = spelling_base + (depth)); } spelling->kind = (2); spelling->u.s = (string1); spelling++; };
}
static void
push_array_bounds (int bounds)
{
  { int depth = (spelling - spelling_base); if (depth >= spelling_size) { spelling_size += 10; if (spelling_base == 0) spelling_base = xmalloc (spelling_size * sizeof (struct spelling)); else spelling_base = xrealloc (spelling_base, spelling_size * sizeof (struct spelling)); (spelling = spelling_base + (depth)); } spelling->kind = (3); spelling->u.i = (bounds); spelling++; };
}
static int
spelling_length (void)
{
  int size = 0;
  struct spelling *p;
  for (p = spelling_base; p < spelling; p++)
    {
      if (p->kind == 3)
 size += 25;
      else
 size += strlen (p->u.s) + 1;
    }
  return size;
}
static char *
print_spelling (char *buffer)
{
  char *d = buffer;
  struct spelling *p;
  for (p = spelling_base; p < spelling; p++)
    if (p->kind == 3)
      {
 sprintf (d, "[%d]", p->u.i);
 d += strlen (d);
      }
    else
      {
 const char *s;
 if (p->kind == 2)
   *d++ = '.';
 for (s = p->u.s; (*d = *s++); d++)
   ;
      }
  *d++ = '\0';
  return buffer;
}
void
error_init (const char *msgid)
{
  char *ofwhat;
  error ("%s", msgid);
  ofwhat = print_spelling (C_alloca(spelling_length () + 1));
  if (*ofwhat)
    error ("(near initialization for `%s')", ofwhat);
}
void
pedwarn_init (const char *msgid)
{
  char *ofwhat;
  pedwarn ("%s", msgid);
  ofwhat = print_spelling (C_alloca(spelling_length () + 1));
  if (*ofwhat)
    pedwarn ("(near initialization for `%s')", ofwhat);
}
static void
warning_init (const char *msgid)
{
  char *ofwhat;
  warning ("%s", msgid);
  ofwhat = print_spelling (C_alloca(spelling_length () + 1));
  if (*ofwhat)
    warning ("(near initialization for `%s')", ofwhat);
}
static tree
digest_init (tree type, tree init, int require_constant)
{
  enum tree_code code = ((enum tree_code) (type)->common.code);
  tree inside_init = init;
  if (type == global_trees[TI_ERROR_MARK]
      || init == global_trees[TI_ERROR_MARK]
      || ((init)->common.type) == global_trees[TI_ERROR_MARK])
    return global_trees[TI_ERROR_MARK];
  if (((enum tree_code) (init)->common.code) == NON_LVALUE_EXPR)
    inside_init = ((init)->exp.operands[0]);
  inside_init = fold (inside_init);
  if (code == ARRAY_TYPE)
    {
      tree typ1 = ((((type)->common.type))->type.main_variant);
      if ((typ1 == integer_types[itk_char]
    || typ1 == integer_types[itk_signed_char]
    || typ1 == integer_types[itk_unsigned_char]
    || typ1 == c_global_trees[CTI_UNSIGNED_WCHAR_TYPE]
    || typ1 == c_global_trees[CTI_SIGNED_WCHAR_TYPE])
   && ((inside_init && ((enum tree_code) (inside_init)->common.code) == STRING1_CST)))
 {
   if (comptypes (((((inside_init)->common.type))->type.main_variant),
    ((type)->type.main_variant)))
     return inside_init;
   if ((((((((inside_init)->common.type))->common.type))->type.main_variant)
        != integer_types[itk_char])
       && ((typ1)->type.precision) == ((integer_types[itk_char])->type.precision))
     {
       error_init ("char-array initialized from wide string1");
       return global_trees[TI_ERROR_MARK];
     }
   if ((((((((inside_init)->common.type))->common.type))->type.main_variant)
        == integer_types[itk_char])
       && ((typ1)->type.precision) != ((integer_types[itk_char])->type.precision))
     {
       error_init ("int-array initialized from non-wide string1");
       return global_trees[TI_ERROR_MARK];
     }
   ((inside_init)->common.type) = type;
   if (((type)->type.value1s) != 0
       && ((type)->type.size) != 0
       && ((enum tree_code) (((type)->type.size))->common.code) == INTEGER_CST
       && 0 > compare_tree_int (((type)->type.size_unit),
           ((inside_init)->string11.length)
           - ((((typ1)->type.precision)
        != ((integer_types[itk_char])->type.precision))
       ? (((c_global_trees[CTI_WCHAR_TYPE])->type.precision)
          / 8)
       : 1)))
     pedwarn_init ("initializer-string1 for array of chars is too long");
   return inside_init;
 }
    }
    if (code == VECTOR_TYPE
        && vector_types_convertible_p (((inside_init)->common.type), type)
        && ((inside_init)->common.constant_flag))
      {
 if (((enum tree_code) (inside_init)->common.code) == VECTOR_CST
            && comptypes (((((inside_init)->common.type))->type.main_variant),
     ((type)->type.main_variant)))
   return inside_init;
 else
   return build_vector (type, ((inside_init)->exp.operands[0]));
      }
  if (inside_init && ((inside_init)->common.type) != 0
      && (comptypes (((((inside_init)->common.type))->type.main_variant),
       ((type)->type.main_variant))
   || (code == ARRAY_TYPE
       && comptypes (((inside_init)->common.type), type))
   || (code == VECTOR_TYPE
       && comptypes (((inside_init)->common.type), type))
   || (code == POINTER_TYPE
       && ((enum tree_code) (((inside_init)->common.type))->common.code) == ARRAY_TYPE
       && comptypes (((((inside_init)->common.type))->common.type),
       ((type)->common.type)))
   || (code == POINTER_TYPE
       && ((enum tree_code) (((inside_init)->common.type))->common.code) == FUNCTION_TYPE
       && comptypes (((inside_init)->common.type),
       ((type)->common.type)))))
    {
      if (code == POINTER_TYPE)
 {
   inside_init = default_function_array_conversion (inside_init);
   if (((enum tree_code) (((inside_init)->common.type))->common.code) == ARRAY_TYPE)
     {
       error_init ("invalid use of non-lvalue array");
       return global_trees[TI_ERROR_MARK];
     }
  }
      if (code == VECTOR_TYPE)
 inside_init = convert (type, inside_init);
      if (require_constant && !flag_isoc99
   && ((enum tree_code) (inside_init)->common.code) == COMPOUND_LITERAL_EXPR)
 {
   tree decl = ((((((inside_init))->exp.operands[0])))->exp.operands[0]);
   inside_init = ((decl)->decl.initial);
 }
      if (code == ARRAY_TYPE && ((enum tree_code) (inside_init)->common.code) != STRING1_CST
   && ((enum tree_code) (inside_init)->common.code) != CONSTRUCTOR)
 {
   error_init ("array initialized from non-constant array expression");
   return global_trees[TI_ERROR_MARK];
 }
      if (optimize && ((enum tree_code) (inside_init)->common.code) == VAR_DECL)
 inside_init = decl_constant_value_for_broken_optimization (inside_init);
      if (require_constant && pedantic
   && ((enum tree_code) (inside_init)->common.code) == COMPOUND_EXPR)
 {
   inside_init
     = valid_compound_expr_initializer (inside_init,
            ((inside_init)->common.type));
   if (inside_init == global_trees[TI_ERROR_MARK])
     error_init ("initializer element is not constant");
   else
     pedwarn_init ("initializer element is not constant");
   if (flag_pedantic_errors)
     inside_init = global_trees[TI_ERROR_MARK];
 }
      else if (require_constant
        && (!((inside_init)->common.constant_flag)
     || !initializer_constant_valid_p (inside_init,
           ((inside_init)->common.type))))
 {
   error_init ("initializer element is not constant");
   inside_init = global_trees[TI_ERROR_MARK];
 }
      return inside_init;
    }
  if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
      || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
      || code == VECTOR_TYPE)
    {
      inside_init
 = convert_for_assignment (type, init, "initialization",
      (tree) ((void *)0), (tree) ((void *)0), 0);
      if (require_constant && ! ((inside_init)->common.constant_flag))
 {
   error_init ("initializer element is not constant");
   inside_init = global_trees[TI_ERROR_MARK];
 }
      else if (require_constant
        && initializer_constant_valid_p (inside_init, ((inside_init)->common.type)) == 0)
 {
   error_init ("initializer element is not computable at load time");
   inside_init = global_trees[TI_ERROR_MARK];
 }
      return inside_init;
    }
  if ((((type)->type.size) != (tree) ((void *)0)) && ((enum tree_code) (((type)->type.size))->common.code) != INTEGER_CST)
    {
      error_init ("variable-sized object may not be initialized");
      return global_trees[TI_ERROR_MARK];
    }
  error_init ("invalid initializer");
  return global_trees[TI_ERROR_MARK];
}
static tree constructor_type;
static tree constructor_fields;
static tree constructor_index;
static tree constructor_max_index;
static tree constructor_unfilled_fields;
static tree constructor_unfilled_index;
static tree constructor_bit_index;
static tree constructor_elements;
static int constructor_incremental;
static int constructor_constant;
static int constructor_simple;
static int constructor_erroneous;
struct init_node
{
  struct init_node *left, *right;
  struct init_node *parent;
  int balance;
  tree purpose;
  tree value1;
};
static struct init_node *constructor_pending_elts;
static int constructor_depth;
int constructor_no_implicit = 0;
static tree constructor_decl;
static const char *constructor_asmspec;
static int constructor_top_level;
static int constructor_designated;
static int designator_depth;
static int designator_errorneous;
struct constructor_range_stack;
struct constructor_stack
{
  struct constructor_stack *next;
  tree type;
  tree fields;
  tree index;
  tree max_index;
  tree unfilled_index;
  tree unfilled_fields;
  tree bit_index;
  tree elements;
  struct init_node *pending_elts;
  int offset;
  int depth;
  tree replacement_value;
  struct constructor_range_stack *range_stack;
  char constant;
  char simple;
  char implicit;
  char erroneous;
  char outer;
  char incremental;
  char designated;
};
struct constructor_stack *constructor_stack;
struct constructor_range_stack
{
  struct constructor_range_stack *next, *prev;
  struct constructor_stack *stack1;
  tree range_start;
  tree index;
  tree range_end;
  tree fields;
};
struct constructor_range_stack *constructor_range_stack;
struct initializer_stack
{
  struct initializer_stack *next;
  tree decl;
  const char *asmspec;
  struct constructor_stack *constructor_stack;
  struct constructor_range_stack *constructor_range_stack;
  tree elements;
  struct spelling *spelling;
  struct spelling *spelling_base;
  int spelling_size;
  char top_level;
  char require_constant_value;
  char require_constant_elements;
};
struct initializer_stack *initializer_stack;
void
start_init (tree decl, tree asmspec_tree, int top_level)
{
  const char *locus;
  struct initializer_stack *p = xmalloc (sizeof (struct initializer_stack));
  const char *asmspec = 0;
  if (asmspec_tree)
    asmspec = ((asmspec_tree)->string11.pointer);
  p->decl = constructor_decl;
  p->asmspec = constructor_asmspec;
  p->require_constant_value = require_constant_value;
  p->require_constant_elements = require_constant_elements;
  p->constructor_stack = constructor_stack;
  p->constructor_range_stack = constructor_range_stack;
  p->elements = constructor_elements;
  p->spelling = spelling;
  p->spelling_base = spelling_base;
  p->spelling_size = spelling_size;
  p->top_level = constructor_top_level;
  p->next = initializer_stack;
  initializer_stack = p;
  constructor_decl = decl;
  constructor_asmspec = asmspec;
  constructor_designated = 0;
  constructor_top_level = top_level;
  if (decl != 0)
    {
      require_constant_value = ((decl)->common.static_flag);
      require_constant_elements
 = ((((decl)->common.static_flag) || (pedantic && !flag_isoc99))
    && (((enum tree_code) (((decl)->common.type))->common.code) == ARRAY_TYPE
        || ((enum tree_code) (((decl)->common.type))->common.code) == RECORD_TYPE
        || ((enum tree_code) (((decl)->common.type))->common.code) == UNION_TYPE
        || ((enum tree_code) (((decl)->common.type))->common.code) == QUAL_UNION_TYPE));
      locus = ((const char *) (((decl)->decl.name))->identifier.id.str);
    }
  else
    {
      require_constant_value = 0;
      require_constant_elements = 0;
      locus = "(anonymous)";
    }
  constructor_stack = 0;
  constructor_range_stack = 0;
  missing_braces_mentioned = 0;
  spelling_base = 0;
  spelling_size = 0;
  (spelling = spelling_base + (0));
  if (locus)
    push_string1 (locus);
}
void
finish_init (void)
{
  struct initializer_stack *p = initializer_stack;
  while (constructor_stack)
    {
      struct constructor_stack *q = constructor_stack;
      constructor_stack = q->next;
      free (q);
    }
  if (constructor_range_stack)
    fancy_abort ("gcc.c", 727104, "?");
  free (spelling_base);
  constructor_decl = p->decl;
  constructor_asmspec = p->asmspec;
  require_constant_value = p->require_constant_value;
  require_constant_elements = p->require_constant_elements;
  constructor_stack = p->constructor_stack;
  constructor_range_stack = p->constructor_range_stack;
  constructor_elements = p->elements;
  spelling = p->spelling;
  spelling_base = p->spelling_base;
  spelling_size = p->spelling_size;
  constructor_top_level = p->top_level;
  initializer_stack = p->next;
  free (p);
}
void
really_start_incremental_init (tree type)
{
  struct constructor_stack *p = xmalloc (sizeof (struct constructor_stack));
  if (type == 0)
    type = ((constructor_decl)->common.type);
  if (targetm.vector_opaque_p (type))
    error ("opaque vector types cannot be initialized");
  p->type = constructor_type;
  p->fields = constructor_fields;
  p->index = constructor_index;
  p->max_index = constructor_max_index;
  p->unfilled_index = constructor_unfilled_index;
  p->unfilled_fields = constructor_unfilled_fields;
  p->bit_index = constructor_bit_index;
  p->elements = constructor_elements;
  p->constant = constructor_constant;
  p->simple = constructor_simple;
  p->erroneous = constructor_erroneous;
  p->pending_elts = constructor_pending_elts;
  p->depth = constructor_depth;
  p->replacement_value = 0;
  p->implicit = 0;
  p->range_stack = 0;
  p->outer = 0;
  p->incremental = constructor_incremental;
  p->designated = constructor_designated;
  p->next = 0;
  constructor_stack = p;
  constructor_constant = 1;
  constructor_simple = 1;
  constructor_depth = (spelling - spelling_base);
  constructor_elements = 0;
  constructor_pending_elts = 0;
  constructor_type = type;
  constructor_incremental = 1;
  constructor_designated = 0;
  designator_depth = 0;
  designator_errorneous = 0;
  if (((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
      || ((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
    {
      constructor_fields = ((constructor_type)->type.value1s);
      while (constructor_fields != 0 && ((((constructor_fields))->decl.lang_flag_4) == 1)
      && ((constructor_fields)->decl.name) == 0)
 constructor_fields = ((constructor_fields)->common.chain);
      constructor_unfilled_fields = constructor_fields;
      constructor_bit_index = global_trees[TI_BITSIZE_ZERO];
    }
  else if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE)
    {
      if (((constructor_type)->type.value1s))
 {
   constructor_max_index
     = ((((constructor_type)->type.value1s))->type.maxval);
   if (constructor_max_index == (tree) ((void *)0)
       && ((constructor_type)->type.size))
     constructor_max_index = build_int_2_wide ((unsigned long) (-1), (long) (-1));
   if (constructor_max_index
       && ((enum tree_code) (constructor_max_index)->common.code) != INTEGER_CST)
     constructor_max_index = build_int_2_wide ((unsigned long) (-1), (long) (-1));
   constructor_index
     = convert (sizetype_tab[(int) BITSIZETYPE],
         ((((constructor_type)->type.value1s))->type.minval));
 }
      else
 constructor_index = global_trees[TI_BITSIZE_ZERO];
      constructor_unfilled_index = constructor_index;
    }
  else if (((enum tree_code) (constructor_type)->common.code) == VECTOR_TYPE)
    {
      constructor_max_index =
 build_int_2_wide ((unsigned long) (mode_nunits[(constructor_type)->type.mode] - 1), (long) (0));
      constructor_index = convert (sizetype_tab[(int) BITSIZETYPE], global_trees[TI_BITSIZE_ZERO]);
      constructor_unfilled_index = constructor_index;
    }
  else
    {
      constructor_fields = constructor_type;
      constructor_unfilled_fields = constructor_type;
    }
}
void
push_init_level (int implicit)
{
  struct constructor_stack *p;
  tree value1 = (tree) ((void *)0);
  while (constructor_stack->implicit)
    {
      if ((((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
    || ((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
   && constructor_fields == 0)
 process_init_element (pop_init_level (1));
      else if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE
        && constructor_max_index
        && tree_int_cst_lt (constructor_max_index, constructor_index))
 process_init_element (pop_init_level (1));
      else
 break;
    }
  if (implicit)
    {
      if ((((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
    || ((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
   && constructor_fields)
 value1 = find_init_member (constructor_fields);
      else if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE)
 value1 = find_init_member (constructor_index);
    }
  p = xmalloc (sizeof (struct constructor_stack));
  p->type = constructor_type;
  p->fields = constructor_fields;
  p->index = constructor_index;
  p->max_index = constructor_max_index;
  p->unfilled_index = constructor_unfilled_index;
  p->unfilled_fields = constructor_unfilled_fields;
  p->bit_index = constructor_bit_index;
  p->elements = constructor_elements;
  p->constant = constructor_constant;
  p->simple = constructor_simple;
  p->erroneous = constructor_erroneous;
  p->pending_elts = constructor_pending_elts;
  p->depth = constructor_depth;
  p->replacement_value = 0;
  p->implicit = implicit;
  p->outer = 0;
  p->incremental = constructor_incremental;
  p->designated = constructor_designated;
  p->next = constructor_stack;
  p->range_stack = 0;
  constructor_stack = p;
  constructor_constant = 1;
  constructor_simple = 1;
  constructor_depth = (spelling - spelling_base);
  constructor_elements = 0;
  constructor_incremental = 1;
  constructor_designated = 0;
  constructor_pending_elts = 0;
  if (!implicit)
    {
      p->range_stack = constructor_range_stack;
      constructor_range_stack = 0;
      designator_depth = 0;
      designator_errorneous = 0;
    }
  if (constructor_type == 0)
    ;
  else if (((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
    || ((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
    {
      if (constructor_fields == 0)
 constructor_type = 0;
      else
 {
   constructor_type = ((constructor_fields)->common.type);
   push_member_name (constructor_fields);
   constructor_depth++;
 }
    }
  else if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE)
    {
      constructor_type = ((constructor_type)->common.type);
      push_array_bounds (tree_low_cst (constructor_index, 0));
      constructor_depth++;
    }
  if (constructor_type == 0)
    {
      error_init ("extra brace group at end of initializer");
      constructor_fields = 0;
      constructor_unfilled_fields = 0;
      return;
    }
  if (value1 && ((enum tree_code) (value1)->common.code) == CONSTRUCTOR)
    {
      constructor_constant = ((value1)->common.constant_flag);
      constructor_simple = ((value1)->common.static_flag);
      constructor_elements = ((value1)->exp.operands[0]);
      if (constructor_elements
   && (((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
       || ((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE))
 set_nonincremental_init ();
    }
  if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
    {
      missing_braces_mentioned = 1;
      warning_init ("missing braces around initializer");
    }
  if (((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
    || ((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
    {
      constructor_fields = ((constructor_type)->type.value1s);
      while (constructor_fields != 0 && ((((constructor_fields))->decl.lang_flag_4) == 1)
      && ((constructor_fields)->decl.name) == 0)
 constructor_fields = ((constructor_fields)->common.chain);
      constructor_unfilled_fields = constructor_fields;
      constructor_bit_index = global_trees[TI_BITSIZE_ZERO];
    }
  else if (((enum tree_code) (constructor_type)->common.code) == VECTOR_TYPE)
    {
      constructor_max_index =
 build_int_2_wide ((unsigned long) (mode_nunits[(constructor_type)->type.mode] - 1), (long) (0));
      constructor_index = convert (sizetype_tab[(int) BITSIZETYPE], global_trees[TI_INTEGER_ZERO]);
      constructor_unfilled_index = constructor_index;
    }
  else if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE)
    {
      if (((constructor_type)->type.value1s))
 {
   constructor_max_index
     = ((((constructor_type)->type.value1s))->type.maxval);
   if (constructor_max_index == (tree) ((void *)0)
       && ((constructor_type)->type.size))
     constructor_max_index = build_int_2_wide ((unsigned long) (-1), (long) (-1));
   if (constructor_max_index
       && ((enum tree_code) (constructor_max_index)->common.code) != INTEGER_CST)
     constructor_max_index = build_int_2_wide ((unsigned long) (-1), (long) (-1));
   constructor_index
     = convert (sizetype_tab[(int) BITSIZETYPE],
         ((((constructor_type)->type.value1s))->type.minval));
 }
      else
 constructor_index = global_trees[TI_BITSIZE_ZERO];
      constructor_unfilled_index = constructor_index;
      if (value1 && ((enum tree_code) (value1)->common.code) == STRING1_CST)
 {
   set_nonincremental_init_from_string1 (value1);
 }
    }
  else
    {
      warning_init ("braces around scalar initializer");
      constructor_fields = constructor_type;
      constructor_unfilled_fields = constructor_type;
    }
}
tree
pop_init_level (int implicit)
{
  struct constructor_stack *p;
  tree constructor = 0;
  if (implicit == 0)
    {
      while (constructor_stack->implicit)
 process_init_element (pop_init_level (1));
      if (constructor_range_stack)
 fancy_abort ("gcc.c", 727442, "?");
    }
  constructor_incremental = 1;
  output_pending_init_elements (1);
  p = constructor_stack;
  if (constructor_type && constructor_fields
      && ((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE
      && ((constructor_type)->type.value1s)
      && ! ((((constructor_type)->type.value1s))->type.maxval))
    {
      if (integer_zerop (constructor_unfilled_index))
 constructor_type = (tree) ((void *)0);
      else if (! ((constructor_type)->type.size))
 {
   if (constructor_depth > 2)
     error_init ("initialization of flexible array member in a nested context");
   else if (pedantic)
     pedwarn_init ("initialization of a flexible array member");
   if (((constructor_fields)->common.chain) != (tree) ((void *)0))
     constructor_type = (tree) ((void *)0);
 }
      else
 fancy_abort ("gcc.c", 727478, "?");
    }
  if (extra_warnings
      && constructor_type
      && ((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
      && constructor_unfilled_fields)
    {
 while (constructor_unfilled_fields
        && (! ((constructor_unfilled_fields)->decl.size)
     || integer_zerop (((constructor_unfilled_fields)->decl.size))))
   constructor_unfilled_fields = ((constructor_unfilled_fields)->common.chain);
 if (constructor_unfilled_fields && !constructor_designated)
   {
     push_member_name (constructor_unfilled_fields);
     warning_init ("missing initializer");
     (spelling = spelling_base + (constructor_depth));
   }
    }
  if (p->replacement_value)
    constructor = p->replacement_value;
  else if (constructor_type == 0)
    ;
  else if (((enum tree_code) (constructor_type)->common.code) != RECORD_TYPE
    && ((enum tree_code) (constructor_type)->common.code) != UNION_TYPE
    && ((enum tree_code) (constructor_type)->common.code) != ARRAY_TYPE
    && ((enum tree_code) (constructor_type)->common.code) != VECTOR_TYPE)
    {
      if (constructor_elements == 0)
 {
   if (!constructor_erroneous)
     error_init ("empty scalar initializer");
   constructor = global_trees[TI_ERROR_MARK];
 }
      else if (((constructor_elements)->common.chain) != 0)
 {
   error_init ("extra elements in scalar initializer");
   constructor = ((constructor_elements)->list.value1);
 }
      else
 constructor = ((constructor_elements)->list.value1);
    }
  else
    {
      if (constructor_erroneous)
 constructor = global_trees[TI_ERROR_MARK];
      else
 {
   constructor = build_constructor (constructor_type,
        nreverse (constructor_elements));
   if (constructor_constant)
     ((constructor)->common.constant_flag) = ((constructor)->common.invariant_flag) = 1;
   if (constructor_constant && constructor_simple)
     ((constructor)->common.static_flag) = 1;
 }
    }
  constructor_type = p->type;
  constructor_fields = p->fields;
  constructor_index = p->index;
  constructor_max_index = p->max_index;
  constructor_unfilled_index = p->unfilled_index;
  constructor_unfilled_fields = p->unfilled_fields;
  constructor_bit_index = p->bit_index;
  constructor_elements = p->elements;
  constructor_constant = p->constant;
  constructor_simple = p->simple;
  constructor_erroneous = p->erroneous;
  constructor_incremental = p->incremental;
  constructor_designated = p->designated;
  constructor_pending_elts = p->pending_elts;
  constructor_depth = p->depth;
  if (!p->implicit)
    constructor_range_stack = p->range_stack;
  (spelling = spelling_base + (constructor_depth));
  constructor_stack = p->next;
  free (p);
  if (constructor == 0)
    {
      if (constructor_stack == 0)
 return global_trees[TI_ERROR_MARK];
      return (tree) ((void *)0);
    }
  return constructor;
}
static int
set_designator (int array)
{
  tree subtype;
  enum tree_code subcode;
  if (constructor_type == 0)
    return 1;
  if (designator_errorneous)
    return 1;
  if (!designator_depth)
    {
      if (constructor_range_stack)
 fancy_abort ("gcc.c", 727598, "?");
      while (constructor_stack->implicit)
 process_init_element (pop_init_level (1));
      constructor_designated = 1;
      return 0;
    }
  if (constructor_no_implicit)
    {
      error_init ("initialization designators may not nest");
      return 1;
    }
  if (((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
      || ((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
    {
      subtype = ((constructor_fields)->common.type);
      if (subtype != global_trees[TI_ERROR_MARK])
 subtype = ((subtype)->type.main_variant);
    }
  else if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE)
    {
      subtype = ((((constructor_type)->common.type))->type.main_variant);
    }
  else
    fancy_abort ("gcc.c", 727626, "?");
  subcode = ((enum tree_code) (subtype)->common.code);
  if (array && subcode != ARRAY_TYPE)
    {
      error_init ("array index in non-array initializer");
      return 1;
    }
  else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
    {
      error_init ("field name not in record or union initializer");
      return 1;
    }
  constructor_designated = 1;
  push_init_level (2);
  return 0;
}
static void
push_range_stack (tree range_end)
{
  struct constructor_range_stack *p;
  p = ggc_alloc_stat (sizeof (struct constructor_range_stack) );
  p->prev = constructor_range_stack;
  p->next = 0;
  p->fields = constructor_fields;
  p->range_start = constructor_index;
  p->index = constructor_index;
  p->stack1 = constructor_stack;
  p->range_end = range_end;
  if (constructor_range_stack)
    constructor_range_stack->next = p;
  constructor_range_stack = p;
}
void
set_init_index (tree first, tree last)
{
  if (set_designator (1))
    return;
  designator_errorneous = 1;
  while ((((enum tree_code) (first)->common.code) == NOP_EXPR
   || ((enum tree_code) (first)->common.code) == CONVERT_EXPR
   || ((enum tree_code) (first)->common.code) == NON_LVALUE_EXPR)
  && (((((first)->common.type))->type.mode)
      == ((((((first)->exp.operands[0]))->common.type))->type.mode)))
    first = ((first)->exp.operands[0]);
  if (last)
    while ((((enum tree_code) (last)->common.code) == NOP_EXPR
     || ((enum tree_code) (last)->common.code) == CONVERT_EXPR
     || ((enum tree_code) (last)->common.code) == NON_LVALUE_EXPR)
    && (((((last)->common.type))->type.mode)
        == ((((((last)->exp.operands[0]))->common.type))->type.mode)))
      last = ((last)->exp.operands[0]);
  if (((enum tree_code) (first)->common.code) != INTEGER_CST)
    error_init ("nonconstant array index in initializer");
  else if (last != 0 && ((enum tree_code) (last)->common.code) != INTEGER_CST)
    error_init ("nonconstant array index in initializer");
  else if (((enum tree_code) (constructor_type)->common.code) != ARRAY_TYPE)
    error_init ("array index in non-array initializer");
  else if (tree_int_cst_sgn (first) == -1)
    error_init ("array index in initializer exceeds array bounds");
  else if (constructor_max_index
    && tree_int_cst_lt (constructor_max_index, first))
    error_init ("array index in initializer exceeds array bounds");
  else
    {
      constructor_index = convert (sizetype_tab[(int) BITSIZETYPE], first);
      if (last)
 {
   if (tree_int_cst_equal (first, last))
     last = 0;
   else if (tree_int_cst_lt (last, first))
     {
       error_init ("empty index range in initializer");
       last = 0;
     }
   else
     {
       last = convert (sizetype_tab[(int) BITSIZETYPE], last);
       if (constructor_max_index != 0
    && tree_int_cst_lt (constructor_max_index, last))
  {
    error_init ("array index range in initializer exceeds array bounds");
    last = 0;
  }
     }
 }
      designator_depth++;
      designator_errorneous = 0;
      if (constructor_range_stack || last)
 push_range_stack (last);
    }
}
void
set_init_label (tree fieldname)
{
  tree tail;
  if (set_designator (0))
    return;
  designator_errorneous = 1;
  if (((enum tree_code) (constructor_type)->common.code) != RECORD_TYPE
      && ((enum tree_code) (constructor_type)->common.code) != UNION_TYPE)
    {
      error_init ("field name not in record or union initializer");
      return;
    }
  for (tail = ((constructor_type)->type.value1s); tail;
       tail = ((tail)->common.chain))
    {
      if (((tail)->decl.name) == fieldname)
 break;
    }
  if (tail == 0)
    error ("unknown field `%s' specified in initializer",
    ((const char *) (fieldname)->identifier.id.str));
  else
    {
      constructor_fields = tail;
      designator_depth++;
      designator_errorneous = 0;
      if (constructor_range_stack)
 push_range_stack ((tree) ((void *)0));
    }
}
static void
add_pending_init (tree purpose, tree value1)
{
  struct init_node *p, **q, *r;
  q = &constructor_pending_elts;
  p = 0;
  if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE)
    {
      while (*q != 0)
 {
   p = *q;
   if (tree_int_cst_lt (purpose, p->purpose))
     q = &p->left;
   else if (tree_int_cst_lt (p->purpose, purpose))
     q = &p->right;
   else
     {
       if (((p->value1)->common.side_effects_flag))
  warning_init ("initialized field with side-effects overwritten");
       p->value1 = value1;
       return;
     }
 }
    }
  else
    {
      tree bitpos;
      bitpos = bit_position (purpose);
      while (*q != ((void *)0))
 {
   p = *q;
   if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
     q = &p->left;
   else if (p->purpose != purpose)
     q = &p->right;
   else
     {
       if (((p->value1)->common.side_effects_flag))
  warning_init ("initialized field with side-effects overwritten");
       p->value1 = value1;
       return;
     }
 }
    }
  r = ggc_alloc_stat (sizeof (struct init_node) );
  r->purpose = purpose;
  r->value1 = value1;
  *q = r;
  r->parent = p;
  r->left = 0;
  r->right = 0;
  r->balance = 0;
  while (p)
    {
      struct init_node *s;
      if (r == p->left)
 {
   if (p->balance == 0)
     p->balance = -1;
   else if (p->balance < 0)
     {
       if (r->balance < 0)
  {
    p->left = r->right;
    if (p->left)
      p->left->parent = p;
    r->right = p;
    p->balance = 0;
    r->balance = 0;
    s = p->parent;
    p->parent = r;
    r->parent = s;
    if (s)
      {
        if (s->left == p)
   s->left = r;
        else
   s->right = r;
      }
    else
      constructor_pending_elts = r;
  }
       else
  {
    struct init_node *t = r->right;
    r->right = t->left;
    if (r->right)
      r->right->parent = r;
    t->left = r;
    p->left = t->right;
    if (p->left)
      p->left->parent = p;
    t->right = p;
    p->balance = t->balance < 0;
    r->balance = -(t->balance > 0);
    t->balance = 0;
    s = p->parent;
    p->parent = t;
    r->parent = t;
    t->parent = s;
    if (s)
      {
        if (s->left == p)
   s->left = t;
        else
   s->right = t;
      }
    else
      constructor_pending_elts = t;
  }
       break;
     }
   else
     {
       p->balance = 0;
       break;
     }
 }
      else
 {
   if (p->balance == 0)
     p->balance++;
   else if (p->balance > 0)
     {
       if (r->balance > 0)
  {
    p->right = r->left;
    if (p->right)
      p->right->parent = p;
    r->left = p;
    p->balance = 0;
    r->balance = 0;
    s = p->parent;
    p->parent = r;
    r->parent = s;
    if (s)
      {
        if (s->left == p)
   s->left = r;
        else
   s->right = r;
      }
    else
      constructor_pending_elts = r;
  }
       else
  {
    struct init_node *t = r->left;
    r->left = t->right;
    if (r->left)
      r->left->parent = r;
    t->right = r;
    p->right = t->left;
    if (p->right)
      p->right->parent = p;
    t->left = p;
    r->balance = (t->balance < 0);
    p->balance = -(t->balance > 0);
    t->balance = 0;
    s = p->parent;
    p->parent = t;
    r->parent = t;
    t->parent = s;
    if (s)
      {
        if (s->left == p)
   s->left = t;
        else
   s->right = t;
      }
    else
      constructor_pending_elts = t;
  }
       break;
     }
   else
     {
       p->balance = 0;
       break;
     }
 }
      r = p;
      p = p->parent;
    }
}
static void
set_nonincremental_init (void)
{
  tree chain;
  if (((enum tree_code) (constructor_type)->common.code) != RECORD_TYPE
      && ((enum tree_code) (constructor_type)->common.code) != ARRAY_TYPE)
    return;
  for (chain = constructor_elements; chain; chain = ((chain)->common.chain))
    add_pending_init (((chain)->list.purpose), ((chain)->list.value1));
  constructor_elements = 0;
  if (((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE)
    {
      constructor_unfilled_fields = ((constructor_type)->type.value1s);
      while (constructor_unfilled_fields != 0
      && ((((constructor_unfilled_fields))->decl.lang_flag_4) == 1)
      && ((constructor_unfilled_fields)->decl.name) == 0)
 constructor_unfilled_fields = ((constructor_unfilled_fields)->common.chain);
    }
  else if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE)
    {
      if (((constructor_type)->type.value1s))
 constructor_unfilled_index
     = convert (sizetype_tab[(int) BITSIZETYPE],
         ((((constructor_type)->type.value1s))->type.minval));
      else
 constructor_unfilled_index = global_trees[TI_BITSIZE_ZERO];
    }
  constructor_incremental = 0;
}
static void
set_nonincremental_init_from_string1 (tree str)
{
  tree value1, purpose, type;
  long val[2];
  const char *p, *end;
  int byte, wchar_bytes, charwidth, bitpos;
  if (((enum tree_code) (constructor_type)->common.code) != ARRAY_TYPE)
    fancy_abort ("gcc.c", 728040, "?");
  if (((((((str)->common.type))->common.type))->type.precision)
      == ((integer_types[itk_char])->type.precision))
    wchar_bytes = 1;
  else if (((((((str)->common.type))->common.type))->type.precision)
    == ((c_global_trees[CTI_WCHAR_TYPE])->type.precision))
    wchar_bytes = ((c_global_trees[CTI_WCHAR_TYPE])->type.precision) / 8;
  else
    fancy_abort ("gcc.c", 728049, "?");
  charwidth = ((integer_types[itk_char])->type.precision);
  type = ((constructor_type)->common.type);
  p = ((str)->string11.pointer);
  end = p + ((str)->string11.length);
  for (purpose = global_trees[TI_BITSIZE_ZERO];
       p < end && !tree_int_cst_lt (constructor_max_index, purpose);
       purpose = size_binop (PLUS_EXPR, purpose, global_trees[TI_BITSIZE_ONE]))
    {
      if (wchar_bytes == 1)
 {
   val[1] = (unsigned char) *p++;
   val[0] = 0;
 }
      else
 {
   val[0] = 0;
   val[1] = 0;
   for (byte = 0; byte < wchar_bytes; byte++)
     {
       if (0)
  bitpos = (wchar_bytes - byte - 1) * charwidth;
       else
  bitpos = byte * charwidth;
       val[bitpos < (8 * 4)]
  |= ((unsigned long) ((unsigned char) *p++))
     << (bitpos % (8 * 4));
     }
 }
      if (!((type)->common.unsigned_flag))
 {
   bitpos = ((wchar_bytes - 1) * charwidth) + 8;
   if (bitpos < (8 * 4))
     {
       if (val[1] & (((long) 1) << (bitpos - 1)))
  {
    val[1] |= ((long) -1) << bitpos;
    val[0] = -1;
  }
     }
   else if (bitpos == (8 * 4))
     {
       if (val[1] < 0)
         val[0] = -1;
     }
   else if (val[0] & (((long) 1)
        << (bitpos - 1 - (8 * 4))))
     val[0] |= ((long) -1)
        << (bitpos - (8 * 4));
 }
      value1 = build_int_2_wide ((unsigned long) (val[1]), (long) (val[0]));
      ((value1)->common.type) = type;
      add_pending_init (purpose, value1);
    }
  constructor_incremental = 0;
}
static tree
find_init_member (tree field)
{
  struct init_node *p;
  if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE)
    {
      if (constructor_incremental
   && tree_int_cst_lt (field, constructor_unfilled_index))
 set_nonincremental_init ();
      p = constructor_pending_elts;
      while (p)
 {
   if (tree_int_cst_lt (field, p->purpose))
     p = p->left;
   else if (tree_int_cst_lt (p->purpose, field))
     p = p->right;
   else
     return p->value1;
 }
    }
  else if (((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE)
    {
      tree bitpos = bit_position (field);
      if (constructor_incremental
   && (!constructor_unfilled_fields
       || tree_int_cst_lt (bitpos,
      bit_position (constructor_unfilled_fields))))
 set_nonincremental_init ();
      p = constructor_pending_elts;
      while (p)
 {
   if (field == p->purpose)
     return p->value1;
   else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
     p = p->left;
   else
     p = p->right;
 }
    }
  else if (((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
    {
      if (constructor_elements
   && ((constructor_elements)->list.purpose) == field)
 return ((constructor_elements)->list.value1);
    }
  return 0;
}
static void
output_init_element (tree value1, tree type, tree field, int pending)
{
  if (type == global_trees[TI_ERROR_MARK])
    {
      constructor_erroneous = 1;
      return;
    }
  if (((enum tree_code) (((value1)->common.type))->common.code) == FUNCTION_TYPE
      || (((enum tree_code) (((value1)->common.type))->common.code) == ARRAY_TYPE
   && !(((enum tree_code) (value1)->common.code) == STRING1_CST
        && ((enum tree_code) (type)->common.code) == ARRAY_TYPE
        && ((enum tree_code) (((type)->common.type))->common.code) == INTEGER_TYPE)
   && !comptypes (((((value1)->common.type))->type.main_variant),
    ((type)->type.main_variant))))
    value1 = default_conversion (value1);
  if (((enum tree_code) (value1)->common.code) == COMPOUND_LITERAL_EXPR
      && require_constant_value && !flag_isoc99 && pending)
    {
      tree decl = ((((((value1))->exp.operands[0])))->exp.operands[0]);
      value1 = ((decl)->decl.initial);
    }
  if (value1 == global_trees[TI_ERROR_MARK])
    constructor_erroneous = 1;
  else if (!((value1)->common.constant_flag))
    constructor_constant = 0;
  else if (initializer_constant_valid_p (value1, ((value1)->common.type)) == 0
    || ((((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
  || ((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
        && ((((field))->decl.lang_flag_4) == 1)
        && ((enum tree_code) (value1)->common.code) != INTEGER_CST))
    constructor_simple = 0;
  if (require_constant_value && ! ((value1)->common.constant_flag))
    {
      error_init ("initializer element is not constant");
      value1 = global_trees[TI_ERROR_MARK];
    }
  else if (require_constant_elements
    && initializer_constant_valid_p (value1, ((value1)->common.type)) == 0)
    pedwarn ("initializer element is not computable at load time");
  if (field
      && (((field)->common.type) == global_trees[TI_ERROR_MARK]
   || ((((((field)->common.type))->type.size) != (tree) ((void *)0))
       && integer_zerop (((((field)->common.type))->type.size))
       && (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE
    || ((field)->common.chain)))))
    return;
  value1 = digest_init (type, value1, require_constant_value);
  if (value1 == global_trees[TI_ERROR_MARK])
    {
      constructor_erroneous = 1;
      return;
    }
  if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE
      && (!constructor_incremental
   || !tree_int_cst_equal (field, constructor_unfilled_index)))
    {
      if (constructor_incremental
   && tree_int_cst_lt (field, constructor_unfilled_index))
 set_nonincremental_init ();
      add_pending_init (field, value1);
      return;
    }
  else if (((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
    && (!constructor_incremental
        || field != constructor_unfilled_fields))
    {
      if (constructor_incremental)
 {
   if (!constructor_unfilled_fields)
     set_nonincremental_init ();
   else
     {
       tree bitpos, unfillpos;
       bitpos = bit_position (field);
       unfillpos = bit_position (constructor_unfilled_fields);
       if (tree_int_cst_lt (bitpos, unfillpos))
  set_nonincremental_init ();
     }
 }
      add_pending_init (field, value1);
      return;
    }
  else if (((enum tree_code) (constructor_type)->common.code) == UNION_TYPE
    && constructor_elements)
    {
      if (((((constructor_elements)->list.value1))->common.side_effects_flag))
 warning_init ("initialized field with side-effects overwritten");
      constructor_elements = 0;
    }
  if (field && ((enum tree_code) (field)->common.code) == INTEGER_CST)
    field = copy_node_stat (field );
  constructor_elements
    = tree_cons_stat (field,value1,constructor_elements );
  if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE)
    constructor_unfilled_index
      = size_binop (PLUS_EXPR, constructor_unfilled_index,
      global_trees[TI_BITSIZE_ONE]);
  else if (((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE)
    {
      constructor_unfilled_fields
 = ((constructor_unfilled_fields)->common.chain);
      while (constructor_unfilled_fields != 0
      && ((((constructor_unfilled_fields))->decl.lang_flag_4) == 1)
      && ((constructor_unfilled_fields)->decl.name) == 0)
 constructor_unfilled_fields =
   ((constructor_unfilled_fields)->common.chain);
    }
  else if (((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
    constructor_unfilled_fields = 0;
  if (pending)
    output_pending_init_elements (0);
}
static void
output_pending_init_elements (int all)
{
  struct init_node *elt = constructor_pending_elts;
  tree next;
 retry:
  next = 0;
  while (elt)
    {
      if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE)
 {
   if (tree_int_cst_equal (elt->purpose,
      constructor_unfilled_index))
     output_init_element (elt->value1,
     ((constructor_type)->common.type),
     constructor_unfilled_index, 0);
   else if (tree_int_cst_lt (constructor_unfilled_index,
        elt->purpose))
     {
       if (elt->left)
  elt = elt->left;
       else
  {
    next = elt->purpose;
    break;
  }
     }
   else
     {
       if (elt->right)
  elt = elt->right;
       else
  {
    while (elt->parent && elt->parent->right == elt)
      elt = elt->parent;
    elt = elt->parent;
    if (elt && tree_int_cst_lt (constructor_unfilled_index,
           elt->purpose))
      {
        next = elt->purpose;
        break;
      }
  }
     }
 }
      else if (((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
        || ((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
 {
   tree ctor_unfilled_bitpos, elt_bitpos;
   if (constructor_unfilled_fields == 0)
     break;
   ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
   elt_bitpos = bit_position (elt->purpose);
   if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
     {
       constructor_unfilled_fields = elt->purpose;
       output_init_element (elt->value1, ((elt->purpose)->common.type),
       elt->purpose, 0);
     }
   else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
     {
       if (elt->left)
  elt = elt->left;
       else
  {
    next = elt->purpose;
    break;
  }
     }
   else
     {
       if (elt->right)
  elt = elt->right;
       else
  {
    while (elt->parent && elt->parent->right == elt)
      elt = elt->parent;
    elt = elt->parent;
    if (elt
        && (tree_int_cst_lt (ctor_unfilled_bitpos,
        bit_position (elt->purpose))))
      {
        next = elt->purpose;
        break;
      }
  }
     }
 }
    }
  if (! (all && next != 0))
    return;
  if (((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
      || ((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
    constructor_unfilled_fields = next;
  else if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE)
    constructor_unfilled_index = next;
  goto retry;
}
void
process_init_element (tree value1)
{
  tree orig_value = value1;
  int string1_flag = value1 != 0 && ((enum tree_code) (value1)->common.code) == STRING1_CST;
  designator_depth = 0;
  designator_errorneous = 0;
  if (string1_flag
      && constructor_type
      && ((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE
      && ((enum tree_code) (((constructor_type)->common.type))->common.code) == INTEGER_TYPE
      && integer_zerop (constructor_unfilled_index))
    {
      if (constructor_stack->replacement_value)
        error_init ("excess elements in char array initializer");
      constructor_stack->replacement_value = value1;
      return;
    }
  if (constructor_stack->replacement_value != 0)
    {
      error_init ("excess elements in struct initializer");
      return;
    }
  if (constructor_type == 0)
    return;
  while (constructor_stack->implicit)
    {
      if ((((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE
    || ((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
   && constructor_fields == 0)
 process_init_element (pop_init_level (1));
      else if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE
        && (constructor_max_index == 0
     || tree_int_cst_lt (constructor_max_index,
           constructor_index)))
 process_init_element (pop_init_level (1));
      else
 break;
    }
  if (constructor_range_stack)
    {
      if (((enum tree_code) (value1)->common.code) != COMPOUND_LITERAL_EXPR
   || !require_constant_value
   || flag_isoc99)
 value1 = save_expr (value1);
    }
  while (1)
    {
      if (((enum tree_code) (constructor_type)->common.code) == RECORD_TYPE)
 {
   tree fieldtype;
   enum tree_code fieldcode;
   if (constructor_fields == 0)
     {
       pedwarn_init ("excess elements in struct initializer");
       break;
     }
   fieldtype = ((constructor_fields)->common.type);
   if (fieldtype != global_trees[TI_ERROR_MARK])
     fieldtype = ((fieldtype)->type.main_variant);
   fieldcode = ((enum tree_code) (fieldtype)->common.code);
   if (fieldcode == ARRAY_TYPE
       && !require_constant_value
       && ((fieldtype)->type.size) == (tree) ((void *)0)
       && ((constructor_fields)->common.chain) == (tree) ((void *)0))
     {
       error_init ("non-static initialization of a flexible array member");
       break;
     }
   if (value1 != 0
       && fieldcode == ARRAY_TYPE
       && ((enum tree_code) (((fieldtype)->common.type))->common.code) == INTEGER_TYPE
       && string1_flag)
     value1 = orig_value;
   else if (value1 != 0 && !constructor_no_implicit
     && value1 != global_trees[TI_ERROR_MARK]
     && ((((value1)->common.type))->type.main_variant) != fieldtype
     && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
         || fieldcode == UNION_TYPE))
     {
       push_init_level (1);
       continue;
     }
   if (value1)
     {
       push_member_name (constructor_fields);
       output_init_element (value1, fieldtype, constructor_fields, 1);
       (spelling = spelling_base + (constructor_depth));
     }
   else
     {
       if (((constructor_fields)->decl.size))
         constructor_bit_index
    = size_binop (PLUS_EXPR,
           bit_position (constructor_fields),
           ((constructor_fields)->decl.size));
       if (constructor_unfilled_fields == constructor_fields)
  {
    constructor_unfilled_fields = ((constructor_fields)->common.chain);
    while (constructor_unfilled_fields != 0
    && ((((constructor_unfilled_fields))->decl.lang_flag_4) == 1)
    && ((constructor_unfilled_fields)->decl.name) == 0)
      constructor_unfilled_fields =
        ((constructor_unfilled_fields)->common.chain);
  }
     }
   constructor_fields = ((constructor_fields)->common.chain);
   while (constructor_fields != 0
   && ((((constructor_fields))->decl.lang_flag_4) == 1)
   && ((constructor_fields)->decl.name) == 0)
     constructor_fields = ((constructor_fields)->common.chain);
 }
      else if (((enum tree_code) (constructor_type)->common.code) == UNION_TYPE)
 {
   tree fieldtype;
   enum tree_code fieldcode;
   if (constructor_fields == 0)
     {
       pedwarn_init ("excess elements in union initializer");
       break;
     }
   fieldtype = ((constructor_fields)->common.type);
   if (fieldtype != global_trees[TI_ERROR_MARK])
     fieldtype = ((fieldtype)->type.main_variant);
   fieldcode = ((enum tree_code) (fieldtype)->common.code);
   if (warn_traditional && !in_system_header1 && !constructor_designated
       && !(value1 && (integer_zerop (value1) || real_zerop (value1))))
     warning ("traditional C rejects initialization of unions");
   if (value1 != 0
       && fieldcode == ARRAY_TYPE
       && ((enum tree_code) (((fieldtype)->common.type))->common.code) == INTEGER_TYPE
       && string1_flag)
     value1 = orig_value;
   else if (value1 != 0 && !constructor_no_implicit
     && value1 != global_trees[TI_ERROR_MARK]
     && ((((value1)->common.type))->type.main_variant) != fieldtype
     && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
         || fieldcode == UNION_TYPE))
     {
       push_init_level (1);
       continue;
     }
   if (value1)
     {
       push_member_name (constructor_fields);
       output_init_element (value1, fieldtype, constructor_fields, 1);
       (spelling = spelling_base + (constructor_depth));
     }
   else
     {
       constructor_bit_index = ((constructor_fields)->decl.size);
       constructor_unfilled_fields = ((constructor_fields)->common.chain);
     }
   constructor_fields = 0;
 }
      else if (((enum tree_code) (constructor_type)->common.code) == ARRAY_TYPE)
 {
   tree elttype = ((((constructor_type)->common.type))->type.main_variant);
   enum tree_code eltcode = ((enum tree_code) (elttype)->common.code);
   if (value1 != 0
       && eltcode == ARRAY_TYPE
       && ((enum tree_code) (((elttype)->common.type))->common.code) == INTEGER_TYPE
       && string1_flag)
     value1 = orig_value;
   else if (value1 != 0 && !constructor_no_implicit
     && value1 != global_trees[TI_ERROR_MARK]
     && ((((value1)->common.type))->type.main_variant) != elttype
     && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
         || eltcode == UNION_TYPE))
     {
       push_init_level (1);
       continue;
     }
   if (constructor_max_index != 0
       && (tree_int_cst_lt (constructor_max_index, constructor_index)
    || integer_all_onesp (constructor_max_index)))
     {
       pedwarn_init ("excess elements in array initializer");
       break;
     }
   if (value1)
     {
       push_array_bounds (tree_low_cst (constructor_index, 0));
       output_init_element (value1, elttype, constructor_index, 1);
       (spelling = spelling_base + (constructor_depth));
     }
   constructor_index
     = size_binop (PLUS_EXPR, constructor_index, global_trees[TI_BITSIZE_ONE]);
   if (! value1)
     constructor_unfilled_index = constructor_index;
 }
      else if (((enum tree_code) (constructor_type)->common.code) == VECTOR_TYPE)
 {
   tree elttype = ((((constructor_type)->common.type))->type.main_variant);
   if (tree_int_cst_lt (constructor_max_index, constructor_index))
     {
       pedwarn_init ("excess elements in vector initializer");
       break;
     }
   if (value1)
     output_init_element (value1, elttype, constructor_index, 1);
   constructor_index
     = size_binop (PLUS_EXPR, constructor_index, global_trees[TI_BITSIZE_ONE]);
   if (! value1)
     constructor_unfilled_index = constructor_index;
 }
      else if (constructor_fields == 0)
 {
   pedwarn_init ("excess elements in scalar initializer");
   break;
 }
      else
 {
   if (value1)
     output_init_element (value1, constructor_type, (tree) ((void *)0), 1);
   constructor_fields = 0;
 }
      if (constructor_range_stack)
 {
   struct constructor_range_stack *p, *range_stack;
   int finish = 0;
   range_stack = constructor_range_stack;
   constructor_range_stack = 0;
   while (constructor_stack != range_stack->stack1)
     {
       if (!constructor_stack->implicit)
  fancy_abort ("gcc.c", 728783, "?");
       process_init_element (pop_init_level (1));
     }
   for (p = range_stack;
        !p->range_end || tree_int_cst_equal (p->index, p->range_end);
        p = p->prev)
     {
       if (!constructor_stack->implicit)
  fancy_abort ("gcc.c", 728791, "?");
       process_init_element (pop_init_level (1));
     }
   p->index = size_binop (PLUS_EXPR, p->index, global_trees[TI_BITSIZE_ONE]);
   if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
     finish = 1;
   while (1)
     {
       constructor_index = p->index;
       constructor_fields = p->fields;
       if (finish && p->range_end && p->index == p->range_start)
  {
    finish = 0;
    p->prev = 0;
  }
       p = p->next;
       if (!p)
  break;
       push_init_level (2);
       p->stack1 = constructor_stack;
       if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
  p->index = p->range_start;
     }
   if (!finish)
     constructor_range_stack = range_stack;
   continue;
 }
      break;
    }
  constructor_range_stack = 0;
}
tree
build_asm_stmt (tree cv_qualifier, tree args)
{
  if (!(((args)->common.public_flag)) && cv_qualifier)
    (((args)->common.public_flag)) = 1;
  return add_stmt (args);
}
tree
build_asm_expr (tree string1, tree outputs, tree inputs, tree clobbers,
  unsigned char simple)
{
  tree tail;
  tree args;
  int i;
  const char *constraint;
  unsigned char allows_mem, allows_reg, is_inout;
  int ninputs;
  int noutputs;
  ninputs = list_length (inputs);
  noutputs = list_length (outputs);
  for (i = 0, tail = outputs; tail; ++i, tail = ((tail)->common.chain))
    {
      tree output = ((tail)->list.value1);
      while ((((enum tree_code) (output)->common.code) == NOP_EXPR || ((enum tree_code) (output)->common.code) == CONVERT_EXPR || ((enum tree_code) (output)->common.code) == NON_LVALUE_EXPR) && ((output)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((output)->common.type))->type.mode) == ((((((output)->exp.operands[0]))->common.type))->type.mode))) (output) = ((output)->exp.operands[0]);
      ((tail)->list.value1) = output;
      lvalue_or_else (output, "invalid lvalue in asm statement");
      constraint = ((((((tail)->list.purpose))->list.value1))->string11.pointer);
      if (!parse_output_constraint (&constraint, i, ninputs, noutputs,
                                    &allows_mem, &allows_reg, &is_inout))
        {
          ((tail)->list.value1) = global_trees[TI_ERROR_MARK];
          continue;
        }
      if (!allows_reg && (tree_code_type[(int) (((enum tree_code) (output)->common.code))] == 'd'))
        c_mark_addressable (output);
    }
  for (tail = inputs; tail; tail = ((tail)->common.chain))
    ((tail)->list.value1) = default_function_array_conversion (((tail)->list.value1));
  args = build_stmt (ASM_EXPR, string1, outputs, inputs, clobbers);
  if (simple)
    {
      (((args)->common.public_flag)) = 1;
      (((args)->common.static_flag)) = 1;
    }
  return args;
}
void
c_expand_asm_operands (tree string1, tree outputs, tree inputs,
         tree clobbers, int vol, location_t locus)
{
  int noutputs = list_length (outputs);
  int i;
  tree *o = C_alloca(noutputs * sizeof (tree));
  tree tail;
  for (i = 0, tail = outputs; tail; tail = ((tail)->common.chain), i++)
    {
      o[i] = ((tail)->list.value1);
      if (o[i] == global_trees[TI_ERROR_MARK])
 return;
    }
  expand_asm_operands (string1, outputs, inputs, clobbers, vol, locus);
  for (i = 0, tail = outputs; tail; tail = ((tail)->common.chain), i++)
    {
      if (o[i] != ((tail)->list.value1))
 {
   expand_expr (build_modify_expr (o[i], NOP_EXPR, ((tail)->list.value1)),
         (rtx) 0, VOIDmode, EXPAND_NORMAL);
   free_temp_slots ();
   ((tail)->list.value1) = o[i];
 }
      else
 {
   tree type = ((o[i])->common.type);
   if (((o[i])->common.readonly_flag)
       || ((type)->common.readonly_flag)
       || ((((enum tree_code) (type)->common.code) == RECORD_TYPE
     || ((enum tree_code) (type)->common.code) == UNION_TYPE)
    && ((type)->common.lang_flag_1)))
     readonly_error (o[i], "modification by `asm'");
 }
    }
  emit_queue ();
}
tree
c_finish_goto_label (tree label)
{
  tree decl = lookup_label (label);
  if (!decl)
    return (tree) ((void *)0);
  ((decl)->common.used_flag) = 1;
  return add_stmt (build (GOTO_EXPR, global_trees[TI_VOID_TYPE], decl));
}
tree
c_finish_goto_ptr (tree expr)
{
  if (pedantic)
    pedwarn ("ISO C forbids `goto *expr;'");
  expr = convert (global_trees[TI_PTR_TYPE], expr);
  return add_stmt (build (GOTO_EXPR, global_trees[TI_VOID_TYPE], expr));
}
tree
c_finish_return (tree retval)
{
  tree valtype = ((((current_function_decl)->common.type))->common.type);
  if (((current_function_decl)->common.volatile_flag))
    warning ("function declared `noreturn' has a `return' statement");
  if (!retval)
    {
      current_function_returns_null = 1;
      if ((warn_return_type || flag_isoc99)
   && valtype != 0 && ((enum tree_code) (valtype)->common.code) != VOID_TYPE)
 pedwarn_c99 ("`return' with no value1, in function returning non-void");
    }
  else if (valtype == 0 || ((enum tree_code) (valtype)->common.code) == VOID_TYPE)
    {
      current_function_returns_null = 1;
      if (pedantic || ((enum tree_code) (((retval)->common.type))->common.code) != VOID_TYPE)
 pedwarn ("`return' with a value1, in function returning void");
    }
  else
    {
      tree t = convert_for_assignment (valtype, retval, "return",
           (tree) ((void *)0), (tree) ((void *)0), 0);
      tree res = ((current_function_decl)->decl.result);
      tree inner;
      current_function_returns_value = 1;
      if (t == global_trees[TI_ERROR_MARK])
 return (tree) ((void *)0);
      inner = t = convert (((res)->common.type), t);
      while (1)
 {
   switch (((enum tree_code) (inner)->common.code))
     {
     case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
     case PLUS_EXPR:
       inner = ((inner)->exp.operands[0]);
       continue;
     case MINUS_EXPR:
       {
  tree op1 = ((inner)->exp.operands[1]);
  while (! (((enum tree_code) (((op1)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == REFERENCE_TYPE)
         && (((enum tree_code) (op1)->common.code) == NOP_EXPR
      || ((enum tree_code) (op1)->common.code) == NON_LVALUE_EXPR
      || ((enum tree_code) (op1)->common.code) == CONVERT_EXPR))
    op1 = ((op1)->exp.operands[0]);
  if ((((enum tree_code) (((op1)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((op1)->common.type))->common.code) == REFERENCE_TYPE))
    break;
  inner = ((inner)->exp.operands[0]);
  continue;
       }
     case ADDR_EXPR:
       inner = ((inner)->exp.operands[0]);
       while (tree_code_type[(int) (((enum tree_code) (inner)->common.code))] == 'r')
  inner = ((inner)->exp.operands[0]);
       if ((tree_code_type[(int) (((enum tree_code) (inner)->common.code))] == 'd')
    && ! ((inner)->decl.external_flag)
    && ! ((inner)->common.static_flag)
    && ((inner)->decl.context) == current_function_decl)
  warning ("function returns address of local variable");
       break;
     default:
       break;
     }
   break;
 }
      retval = build (MODIFY_EXPR, ((res)->common.type), res, t);
    }
  return add_stmt (build_stmt (RETURN_EXPR, retval));
}
struct c_switch {
  tree switch_stmt;
  splay_tree cases;
  struct c_switch *next;
};
struct c_switch *c_switch_stack;
tree
c_start_case (tree exp)
{
  enum tree_code code;
  tree type, orig_type = global_trees[TI_ERROR_MARK];
  struct c_switch *cs;
  if (exp != global_trees[TI_ERROR_MARK])
    {
      code = ((enum tree_code) (((exp)->common.type))->common.code);
      orig_type = ((exp)->common.type);
      if (! (((enum tree_code) (orig_type)->common.code) == INTEGER_TYPE || ((enum tree_code) (orig_type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (orig_type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (orig_type)->common.code) == CHAR_TYPE)
   && code != ERROR_MARK)
 {
   error ("switch quantity not an integer");
   exp = global_trees[TI_INTEGER_ZERO];
 }
      else
 {
   type = ((((exp)->common.type))->type.main_variant);
   if (warn_traditional && !in_system_header1
       && (type == integer_types[itk_long]
    || type == integer_types[itk_unsigned_long]))
     warning ("`long' switch expression not converted to `int' in ISO C");
   exp = default_conversion (exp);
   type = ((exp)->common.type);
 }
    }
  cs = xmalloc (sizeof (*cs));
  cs->switch_stmt = build_stmt (SWITCH_STMT, exp, (tree) ((void *)0), orig_type);
  cs->cases = splay_tree_new (case_compare, ((void *)0), ((void *)0));
  cs->next = c_switch_stack;
  c_switch_stack = cs;
  return add_stmt (cs->switch_stmt);
}
tree
do_case (tree low_value1, tree high_value)
{
  tree label = (tree) ((void *)0);
  if (c_switch_stack)
    {
      label = c_add_case_label (c_switch_stack->cases,
    (((c_switch_stack->switch_stmt))->exp.operands[0]),
    low_value1, high_value);
      if (label == global_trees[TI_ERROR_MARK])
 label = (tree) ((void *)0);
    }
  else if (low_value)
    error ("case label not within a switch statement");
  else
    error ("`default' label not within a switch statement");
  return label;
}
void
c_finish_case (tree body)
{
  struct c_switch *cs = c_switch_stack;
  (((cs->switch_stmt))->exp.operands[1]) = body;
  c_do_switch_warnings (cs->cases, cs->switch_stmt);
  c_switch_stack = cs->next;
  splay_tree_delete (cs->cases);
  free (cs);
}
void
c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
    tree else_block, unsigned char nested_if)
{
  tree stmt;
  if (warn_parentheses && nested_if && else_block == ((void *)0))
    {
      tree inner_if = then_block;
      while (1)
 switch (((enum tree_code) (inner_if)->common.code))
   {
   case COND_EXPR:
     goto found;
   case BIND_EXPR:
     inner_if = ((((inner_if))->exp.operands[1]));
     break;
   case STATEMENT_LIST:
     inner_if = expr_last (then_block);
     break;
   case TRY_FINALLY_EXPR:
   case TRY_CATCH_EXPR:
     inner_if = ((inner_if)->exp.operands[0]);
     break;
   default:
     fancy_abort ("gcc.c", 729225, "?");
   }
    found:
      if (((((inner_if))->exp.operands[2])))
  warning ("%Hsuggest explicit braces to avoid ambiguous `else'",
    &if_locus);
    }
  if (extra_warnings)
    {
      if (((enum tree_code) (then_block)->common.code) == NOP_EXPR && !((then_block)->common.type))
 {
   if (!else_block)
     warning ("%Hempty body in an if-statement",
       ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (then_block)->common.code))])) != 0) ? (then_block)->exp.locus : (location_t *)((void *)0)));
   then_block = alloc_stmt_list ();
 }
      if (else_block
   && ((enum tree_code) (else_block)->common.code) == NOP_EXPR
   && !((else_block)->common.type))
 {
   warning ("%Hempty body in an else-statement",
     ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (else_block)->common.code))])) != 0) ? (else_block)->exp.locus : (location_t *)((void *)0)));
   else_block = alloc_stmt_list ();
 }
    }
  stmt = build3_stat (COND_EXPR,(tree) ((void *)0),cond,then_block,else_block );
  annotate_with_locus (stmt, if_locus);
  add_stmt (stmt);
}
void
c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
        tree blab, tree clab, unsigned char cond_is_first)
{
  tree entry = ((void *)0), exit = ((void *)0), t;
  if (cond && !cond_is_first && integer_zerop (cond))
    cond = ((void *)0);
  if (cond_is_first || cond)
    {
      tree top = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],(tree) ((void *)0) );
      exit = build_and_jump (&(((top))->exp.operands[0]));
      if (cond)
        {
          if (cond_is_first)
            {
              if (incr || !clab)
                {
                  entry = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],(tree) ((void *)0) );
                  t = build_and_jump (&(((entry))->exp.operands[0]));
                }
              else
                t = build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],clab );
       annotate_with_locus (t, start_locus);
              add_stmt (t);
            }
   t = build_and_jump (&blab);
          exit = build (COND_EXPR, global_trees[TI_VOID_TYPE], cond, exit, t);
          exit = fold (exit);
   if (cond_is_first)
            annotate_with_locus (exit, start_locus);
   else
            annotate_with_locus (exit, input_location);
        }
      add_stmt (top);
    }
  if (body)
    add_stmt (body);
  if (clab)
    add_stmt (build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],clab ));
  if (incr)
    add_stmt (incr);
  if (entry)
    add_stmt (entry);
  if (exit)
    add_stmt (exit);
  if (blab)
    add_stmt (build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],blab ));
}
tree
c_finish_bc_stmt (tree *label_p, unsigned char is_break)
{
  tree label = *label_p;
  if (!label)
    *label_p = label = create_artificial_label ();
  else if (((enum tree_code) (label)->common.code) != LABEL_DECL)
    {
      if (is_break)
 error ("break statement not within loop or switch");
      else
        error ("continue statement not within a loop");
      return (tree) ((void *)0);
    }
  return add_stmt (build (GOTO_EXPR, global_trees[TI_VOID_TYPE], label));
}
static void
emit_side_effect_warnings (tree expr)
{
  if (expr == global_trees[TI_ERROR_MARK])
    ;
  else if (!((expr)->common.side_effects_flag))
    {
      if (!(((enum tree_code) (((expr)->common.type))->common.code) == VOID_TYPE) && !((expr)->common.nowarning_flag))
 warning ("%Hstatement with no effect",
   ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (expr)->common.code))])) != 0) ? (expr)->exp.locus : (location_t *)((void *)0)) ? ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (expr)->common.code))])) != 0) ? (expr)->exp.locus : (location_t *)((void *)0)) : &input_location);
    }
  else if (warn_unused_value)
    warn_if_unused_value (expr, input_location);
}
tree
c_process_expr_stmt (tree expr)
{
  if (!expr)
    return (tree) ((void *)0);
  if ((((enum tree_code) (((expr)->common.type))->common.code) == ARRAY_TYPE
       && (flag_isoc99 || lvalue_p (expr)))
      || ((enum tree_code) (((expr)->common.type))->common.code) == FUNCTION_TYPE)
    expr = default_conversion (expr);
  if (warn_sequence_point)
    verify_sequence_points (expr);
  if (((expr)->common.type) != global_trees[TI_ERROR_MARK]
      && !((((((expr)->common.type))->type.size) != (tree) ((void *)0)) || (((enum tree_code) (((expr)->common.type))->common.code) == VOID_TYPE))
      && ((enum tree_code) (((expr)->common.type))->common.code) != ARRAY_TYPE)
    error ("expression statement has incomplete type");
  if (!((((current_stmt_tree ()->x_cur_stmt_list)))->common.lang_flag_1)
      && (extra_warnings || warn_unused_value))
    emit_side_effect_warnings (expr);
  if ((tree_code_type[(int) (((enum tree_code) (expr)->common.code))] == 'd') || tree_code_type[(int) (((enum tree_code) (expr)->common.code))] == 'c')
    expr = build1_stat (NOP_EXPR,((expr)->common.type),expr );
  if ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (expr)->common.code))])) != 0))
    annotate_with_locus (expr, input_location);
  return expr;
}
tree
c_finish_expr_stmt (tree expr)
{
  if (expr)
    return add_stmt (c_process_expr_stmt (expr));
  else
    return ((void *)0);
}
tree
c_begin_stmt_expr (void)
{
  tree ret;
  keep_next_level ();
  ret = c_begin_compound_stmt (1);
  (((ret))->common.lang_flag_1) = 1;
  return ret;
}
tree
c_finish_stmt_expr (tree body)
{
  tree last, type, tmp, val;
  tree *last_p;
  body = c_end_compound_stmt (body, 1);
  last_p = &((((body))->exp.operands[1]));
  last = ((((body))->exp.operands[1]));
 continue_searching:
  if (((enum tree_code) (last)->common.code) == STATEMENT_LIST)
    {
      tree_stmt_iterator i;
      if (!((last)->common.side_effects_flag))
 return body;
      if (extra_warnings || warn_unused_value)
 {
   for (i = tsi_start (last); !tsi_one_before_end_p (i); tsi_next (&i))
     emit_side_effect_warnings (tsi_stmt (i));
 }
      else
 i = tsi_last (last);
      last_p = tsi_stmt_ptr (i);
      last = *last_p;
    }
  if (((enum tree_code) (last)->common.code) == TRY_FINALLY_EXPR
      || ((enum tree_code) (last)->common.code) == TRY_CATCH_EXPR)
    {
      last_p = &((last)->exp.operands[0]);
      last = *last_p;
      goto continue_searching;
    }
  if (last == global_trees[TI_ERROR_MARK]
      || (last == ((((body))->exp.operands[1]))
   && ((((body))->exp.operands[0])) == ((void *)0)))
    return last;
  type = ((last)->common.type);
  if (!type || (((enum tree_code) (type)->common.code) == VOID_TYPE))
    return body;
  tmp = create_tmp_var_raw (type, ((void *)0));
  val = last;
  if (((enum tree_code) (val)->common.code) == NOP_EXPR
      && ((val)->common.type) == ((((val)->exp.operands[0]))->common.type))
    val = ((val)->exp.operands[0]);
  *last_p = build (MODIFY_EXPR, global_trees[TI_VOID_TYPE], tmp, val);
  ((*last_p)->exp.locus = (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (last)->common.code))])) != 0) ? (last)->exp.locus : (location_t *)((void *)0))));
  return build (TARGET_EXPR, type, tmp, body, (tree) ((void *)0), (tree) ((void *)0));
}
tree
c_begin_compound_stmt (unsigned char do_scope)
{
  tree stmt = push_stmt_list ();
  if (do_scope)
    push_scope ();
  return stmt;
}
tree
c_end_compound_stmt (tree stmt, unsigned char do_scope)
{
  tree block = ((void *)0);
  if (do_scope)
    {
      if ((c_language & clk_objc))
 objc_clear_super_receiver ();
      block = pop_scope ();
    }
  stmt = pop_stmt_list (stmt);
  stmt = c_build_bind_expr (block, stmt);
  if ((current_stmt_tree ()->x_cur_stmt_list)
      && ((((current_stmt_tree ()->x_cur_stmt_list)))->common.lang_flag_1)
      && ((enum tree_code) (stmt)->common.code) != BIND_EXPR)
    {
      stmt = build (BIND_EXPR, global_trees[TI_VOID_TYPE], ((void *)0), stmt, ((void *)0));
      ((stmt)->common.side_effects_flag) = 1;
    }
  return stmt;
}
void
push_cleanup (tree decl , tree cleanup, unsigned char eh_only)
{
  enum tree_code code;
  tree stmt, list;
  unsigned char stmt_expr;
  code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
  stmt = build_stmt (code, ((void *)0), cleanup);
  add_stmt (stmt);
  stmt_expr = ((((current_stmt_tree ()->x_cur_stmt_list)))->common.lang_flag_1);
  list = push_stmt_list ();
  ((stmt)->exp.operands[0]) = list;
  (((list))->common.lang_flag_1) = stmt_expr;
}
tree
build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
   int convert_p)
{
  tree type0, type1;
  enum tree_code code0, code1;
  tree op0, op1;
  enum tree_code resultcode = code;
  tree result_type = ((void *)0);
  int converted = 0;
  tree build_type = 0;
  tree final_type = 0;
  int shorten = 0;
  int short_compare = 0;
  int short_shift = 0;
  int common = 0;
  if (convert_p)
    {
      op0 = default_conversion (orig_op0);
      op1 = default_conversion (orig_op1);
    }
  else
    {
      op0 = orig_op0;
      op1 = orig_op1;
    }
  type0 = ((op0)->common.type);
  type1 = ((op1)->common.type);
  code0 = ((enum tree_code) (type0)->common.code);
  code1 = ((enum tree_code) (type1)->common.code);
  while ((((enum tree_code) (op0)->common.code) == NOP_EXPR || ((enum tree_code) (op0)->common.code) == CONVERT_EXPR || ((enum tree_code) (op0)->common.code) == NON_LVALUE_EXPR) && ((op0)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((op0)->common.type) == ((((op0)->exp.operands[0]))->common.type))) (op0) = ((op0)->exp.operands[0]);
  while ((((enum tree_code) (op1)->common.code) == NOP_EXPR || ((enum tree_code) (op1)->common.code) == CONVERT_EXPR || ((enum tree_code) (op1)->common.code) == NON_LVALUE_EXPR) && ((op1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((op1)->common.type) == ((((op1)->exp.operands[0]))->common.type))) (op1) = ((op1)->exp.operands[0]);
  if (code0 == ERROR_MARK || code1 == ERROR_MARK)
    return global_trees[TI_ERROR_MARK];
  switch (code)
    {
    case PLUS_EXPR:
      if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
 return pointer_int_sum (PLUS_EXPR, op0, op1);
      else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
 return pointer_int_sum (PLUS_EXPR, op1, op0);
      else
 common = 1;
      break;
    case MINUS_EXPR:
      if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
   && comp_target_types (type0, type1, 1))
 return pointer_diff (op0, op1);
      else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
 return pointer_int_sum (MINUS_EXPR, op0, op1);
      else
 common = 1;
      break;
    case MULT_EXPR:
      common = 1;
      break;
    case TRUNC_DIV_EXPR:
    case CEIL_DIV_EXPR:
    case FLOOR_DIV_EXPR:
    case ROUND_DIV_EXPR:
    case EXACT_DIV_EXPR:
      if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
 warning ("division by zero");
      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
    || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
   && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
       || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
 {
   if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
     resultcode = RDIV_EXPR;
   else
     shorten = (((((orig_op0)->common.type))->common.unsigned_flag)
         || (((enum tree_code) (op1)->common.code) == INTEGER_CST
      && ! integer_all_onesp (op1)));
   common = 1;
 }
      break;
    case BIT_AND_EXPR:
    case BIT_IOR_EXPR:
    case BIT_XOR_EXPR:
      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
 shorten = -1;
      else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
 common = 1;
      break;
    case TRUNC_MOD_EXPR:
    case FLOOR_MOD_EXPR:
      if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
 warning ("division by zero");
      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
 {
   shorten = (((((orig_op0)->common.type))->common.unsigned_flag)
       || (((enum tree_code) (op1)->common.code) == INTEGER_CST
    && ! integer_all_onesp (op1)));
   common = 1;
 }
      break;
    case TRUTH_ANDIF_EXPR:
    case TRUTH_ORIF_EXPR:
    case TRUTH_AND_EXPR:
    case TRUTH_OR_EXPR:
    case TRUTH_XOR_EXPR:
      if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
    || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
   && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
       || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
 {
   result_type = integer_types[itk_int];
   op0 = lang_hooks.truthvalue_conversion (op0);
   op1 = lang_hooks.truthvalue_conversion (op1);
   converted = 1;
 }
      break;
    case RSHIFT_EXPR:
      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
 {
   if (((enum tree_code) (op1)->common.code) == INTEGER_CST && skip_evaluation == 0)
     {
       if (tree_int_cst_sgn (op1) < 0)
  warning ("right shift count is negative");
       else
  {
    if (! integer_zerop (op1))
      short_shift = 1;
    if (compare_tree_int (op1, ((type0)->type.precision)) >= 0)
      warning ("right shift count >= width of type");
  }
     }
   result_type = type0;
   if (((((op1)->common.type))->type.main_variant) != integer_types[itk_int])
     op1 = convert (integer_types[itk_int], op1);
   converted = 1;
 }
      break;
    case LSHIFT_EXPR:
      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
 {
   if (((enum tree_code) (op1)->common.code) == INTEGER_CST && skip_evaluation == 0)
     {
       if (tree_int_cst_sgn (op1) < 0)
  warning ("left shift count is negative");
       else if (compare_tree_int (op1, ((type0)->type.precision)) >= 0)
  warning ("left shift count >= width of type");
     }
   result_type = type0;
   if (((((op1)->common.type))->type.main_variant) != integer_types[itk_int])
     op1 = convert (integer_types[itk_int], op1);
   converted = 1;
 }
      break;
    case RROTATE_EXPR:
    case LROTATE_EXPR:
      if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
 {
   if (((enum tree_code) (op1)->common.code) == INTEGER_CST && skip_evaluation == 0)
     {
       if (tree_int_cst_sgn (op1) < 0)
  warning ("shift count is negative");
       else if (compare_tree_int (op1, ((type0)->type.precision)) >= 0)
  warning ("shift count >= width of type");
     }
   result_type = type0;
   if (((((op1)->common.type))->type.main_variant) != integer_types[itk_int])
     op1 = convert (integer_types[itk_int], op1);
   converted = 1;
 }
      break;
    case EQ_EXPR:
    case NE_EXPR:
      if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
 warning ("comparing floating point with == or != is unsafe");
      build_type = integer_types[itk_int];
      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
    || code0 == COMPLEX_TYPE)
   && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
       || code1 == COMPLEX_TYPE))
 short_compare = 1;
      else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
 {
   tree tt0 = ((type0)->common.type);
   tree tt1 = ((type1)->common.type);
   if (comp_target_types (type0, type1, 1))
     result_type = common_pointer_type (type0, type1);
   else if ((((enum tree_code) (tt0)->common.code) == VOID_TYPE))
     {
       if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
    && ((enum tree_code) (tt1)->common.code) == FUNCTION_TYPE)
  pedwarn ("ISO C forbids comparison of `void *' with function pointer");
     }
   else if ((((enum tree_code) (tt1)->common.code) == VOID_TYPE))
     {
       if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
    && ((enum tree_code) (tt0)->common.code) == FUNCTION_TYPE)
  pedwarn ("ISO C forbids comparison of `void *' with function pointer");
     }
   else
     pedwarn ("comparison of distinct pointer types lacks a cast");
   if (result_type == (tree) ((void *)0))
     result_type = global_trees[TI_PTR_TYPE];
 }
      else if (code0 == POINTER_TYPE && ((enum tree_code) (op1)->common.code) == INTEGER_CST
        && integer_zerop (op1))
 result_type = type0;
      else if (code1 == POINTER_TYPE && ((enum tree_code) (op0)->common.code) == INTEGER_CST
        && integer_zerop (op0))
 result_type = type1;
      else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
 {
   result_type = type0;
   pedwarn ("comparison between pointer and integer");
 }
      else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
 {
   result_type = type1;
   pedwarn ("comparison between pointer and integer");
 }
      break;
    case MAX_EXPR:
    case MIN_EXPR:
      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
   && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
 shorten = 1;
      else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
 {
   if (comp_target_types (type0, type1, 1))
     {
       result_type = common_pointer_type (type0, type1);
       if (pedantic
    && ((enum tree_code) (((type0)->common.type))->common.code) == FUNCTION_TYPE)
  pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
     }
   else
     {
       result_type = global_trees[TI_PTR_TYPE];
       pedwarn ("comparison of distinct pointer types lacks a cast");
     }
 }
      break;
    case LE_EXPR:
    case GE_EXPR:
    case LT_EXPR:
    case GT_EXPR:
      build_type = integer_types[itk_int];
      if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
   && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
 short_compare = 1;
      else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
 {
   if (comp_target_types (type0, type1, 1))
     {
       result_type = common_pointer_type (type0, type1);
       if (!(((((type0)->common.type))->type.size) != (tree) ((void *)0))
    != !(((((type1)->common.type))->type.size) != (tree) ((void *)0)))
  pedwarn ("comparison of complete and incomplete pointers");
       else if (pedantic
         && ((enum tree_code) (((type0)->common.type))->common.code) == FUNCTION_TYPE)
  pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
     }
   else
     {
       result_type = global_trees[TI_PTR_TYPE];
       pedwarn ("comparison of distinct pointer types lacks a cast");
     }
 }
      else if (code0 == POINTER_TYPE && ((enum tree_code) (op1)->common.code) == INTEGER_CST
        && integer_zerop (op1))
 {
   result_type = type0;
   if (pedantic || extra_warnings)
     pedwarn ("ordered comparison of pointer with integer zero");
 }
      else if (code1 == POINTER_TYPE && ((enum tree_code) (op0)->common.code) == INTEGER_CST
        && integer_zerop (op0))
 {
   result_type = type1;
   if (pedantic)
     pedwarn ("ordered comparison of pointer with integer zero");
 }
      else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
 {
   result_type = type0;
   pedwarn ("comparison between pointer and integer");
 }
      else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
 {
   result_type = type1;
   pedwarn ("comparison between pointer and integer");
 }
      break;
    case UNORDERED_EXPR:
    case ORDERED_EXPR:
    case UNLT_EXPR:
    case UNLE_EXPR:
    case UNGT_EXPR:
    case UNGE_EXPR:
    case UNEQ_EXPR:
    case LTGT_EXPR:
      build_type = integer_types[itk_int];
      if (code0 != REAL_TYPE || code1 != REAL_TYPE)
 {
   error ("unordered comparison on non-floating point argument");
   return global_trees[TI_ERROR_MARK];
 }
      common = 1;
      break;
    default:
      break;
    }
  if (code0 == ERROR_MARK || code1 == ERROR_MARK)
    return global_trees[TI_ERROR_MARK];
  if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
       || code0 == VECTOR_TYPE)
      &&
      (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
       || code1 == VECTOR_TYPE))
    {
      int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
      if (shorten || common || short_compare)
 result_type = common_type (type0, type1);
      if (shorten && none_complex)
 {
   int unsigned0, unsigned1;
   tree arg0 = get_narrower (op0, &unsigned0);
   tree arg1 = get_narrower (op1, &unsigned1);
   int uns = ((result_type)->common.unsigned_flag);
   tree type;
   final_type = result_type;
   if ((((((op0)->common.type))->type.precision)
        == ((((arg0)->common.type))->type.precision))
       && ((op0)->common.type) != final_type)
     unsigned0 = ((((op0)->common.type))->common.unsigned_flag);
   if ((((((op1)->common.type))->type.precision)
        == ((((arg1)->common.type))->type.precision))
       && ((op1)->common.type) != final_type)
     unsigned1 = ((((op1)->common.type))->common.unsigned_flag);
   if (shorten == -1)
     uns = unsigned0;
   if ((((((arg0)->common.type))->type.precision)
        < ((result_type)->type.precision))
       && (((((arg1)->common.type))->type.precision)
    == ((((arg0)->common.type))->type.precision))
       && unsigned0 == unsigned1
       && (unsigned0 || !uns))
     result_type
       = c_common_signed_or_unsigned_type
       (unsigned0, common_type (((arg0)->common.type), ((arg1)->common.type)));
   else if (((enum tree_code) (arg0)->common.code) == INTEGER_CST
     && (unsigned1 || !uns)
     && (((((arg1)->common.type))->type.precision)
         < ((result_type)->type.precision))
     && (type
         = c_common_signed_or_unsigned_type (unsigned1,
          ((arg1)->common.type)),
         int_fits_type_p (arg0, type)))
     result_type = type;
   else if (((enum tree_code) (arg1)->common.code) == INTEGER_CST
     && (unsigned0 || !uns)
     && (((((arg0)->common.type))->type.precision)
         < ((result_type)->type.precision))
     && (type
         = c_common_signed_or_unsigned_type (unsigned0,
          ((arg0)->common.type)),
         int_fits_type_p (arg1, type)))
     result_type = type;
 }
      if (short_shift)
 {
   int unsigned_arg;
   tree arg0 = get_narrower (op0, &unsigned_arg);
   final_type = result_type;
   if (arg0 == op0 && final_type == ((op0)->common.type))
     unsigned_arg = ((((op0)->common.type))->common.unsigned_flag);
   if (((((arg0)->common.type))->type.precision) < ((result_type)->type.precision)
       && compare_tree_int (op1, ((((arg0)->common.type))->type.precision)) < 0
       && (!((final_type)->common.unsigned_flag) || unsigned_arg))
     {
       result_type
  = c_common_signed_or_unsigned_type (unsigned_arg,
          ((arg0)->common.type));
       if (((op0)->common.type) != result_type)
  op0 = convert (result_type, op0);
       converted = 1;
     }
 }
      if (short_compare)
 {
   tree xop0 = op0, xop1 = op1, xresult_type = result_type;
   enum tree_code xresultcode = resultcode;
   tree val
     = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
   if (val != 0)
     return val;
   op0 = xop0, op1 = xop1;
   converted = 1;
   resultcode = xresultcode;
   if (warn_sign_compare && skip_evaluation == 0)
     {
       int op0_signed = ! ((((orig_op0)->common.type))->common.unsigned_flag);
       int op1_signed = ! ((((orig_op1)->common.type))->common.unsigned_flag);
       int unsignedp0, unsignedp1;
       tree primop0 = get_narrower (op0, &unsignedp0);
       tree primop1 = get_narrower (op1, &unsignedp1);
       xop0 = orig_op0;
       xop1 = orig_op1;
       while ((((enum tree_code) (xop0)->common.code) == NOP_EXPR || ((enum tree_code) (xop0)->common.code) == CONVERT_EXPR || ((enum tree_code) (xop0)->common.code) == NON_LVALUE_EXPR) && ((xop0)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((xop0)->common.type) == ((((xop0)->exp.operands[0]))->common.type))) (xop0) = ((xop0)->exp.operands[0]);
       while ((((enum tree_code) (xop1)->common.code) == NOP_EXPR || ((enum tree_code) (xop1)->common.code) == CONVERT_EXPR || ((enum tree_code) (xop1)->common.code) == NON_LVALUE_EXPR) && ((xop1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((xop1)->common.type) == ((((xop1)->exp.operands[0]))->common.type))) (xop1) = ((xop1)->exp.operands[0]);
       if (! ((result_type)->common.unsigned_flag))
          ;
              else if (op0_signed == op1_signed)
                        ;
       else
  {
    tree sop, uop;
    if (op0_signed)
      sop = xop0, uop = xop1;
    else
      sop = xop1, uop = xop0;
    if (tree_expr_nonnegative_p (sop))
              ;
    else if (((enum tree_code) (uop)->common.code) == INTEGER_CST
      && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
      && int_fits_type_p
      (uop, c_common_signed_type (result_type)))
              ;
    else if (((enum tree_code) (uop)->common.code) == INTEGER_CST
      && ((enum tree_code) (((uop)->common.type))->common.code) == ENUMERAL_TYPE
      && int_fits_type_p
      (((((uop)->common.type))->type.maxval),
       c_common_signed_type (result_type)))
              ;
    else
      warning ("comparison between signed and unsigned");
  }
       if ((((enum tree_code) (primop0)->common.code) == BIT_NOT_EXPR)
    != (((enum tree_code) (primop1)->common.code) == BIT_NOT_EXPR))
  {
    if (((enum tree_code) (primop0)->common.code) == BIT_NOT_EXPR)
      primop0 = get_narrower (((primop0)->exp.operands[0]),
         &unsignedp0);
    else
      primop1 = get_narrower (((primop1)->exp.operands[0]),
         &unsignedp1);
    if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
      {
        tree primop;
        long constant, mask;
        int unsignedp, bits;
        if (host_integerp (primop0, 0))
   {
     primop = primop1;
     unsignedp = unsignedp1;
     constant = tree_low_cst (primop0, 0);
   }
        else
   {
     primop = primop0;
     unsignedp = unsignedp0;
     constant = tree_low_cst (primop1, 0);
   }
        bits = ((((primop)->common.type))->type.precision);
        if (bits < ((result_type)->type.precision)
     && bits < (8 * 4) && unsignedp)
   {
     mask = (~ (long) 0) << bits;
     if ((mask & constant) != mask)
       warning ("comparison of promoted ~unsigned with constant");
   }
      }
    else if (unsignedp0 && unsignedp1
      && (((((primop0)->common.type))->type.precision)
          < ((result_type)->type.precision))
      && (((((primop1)->common.type))->type.precision)
          < ((result_type)->type.precision)))
      warning ("comparison of promoted ~unsigned with unsigned");
  }
     }
 }
    }
  if (!result_type)
    {
      binary_op_error (code);
      return global_trees[TI_ERROR_MARK];
    }
  if (! converted)
    {
      if (((op0)->common.type) != result_type)
 op0 = convert (result_type, op0);
      if (((op1)->common.type) != result_type)
 op1 = convert (result_type, op1);
    }
  if (build_type == (tree) ((void *)0))
    build_type = result_type;
  {
    tree result = build (resultcode, build_type, op0, op1);
    result = require_constant_value ? fold_initializer (result)
        : fold (result);
    if (final_type != 0)
      result = convert (final_type, result);
    return result;
  }
}
tree
build_offsetof (tree type, tree list)
{
  tree t;
  t = convert (build_pointer_type (type), global_trees[TI_NULL_POINTER]);
  t = build_indirect_ref (t, "");
  for (list = nreverse (list); list ; list = ((list)->common.chain))
    if (((list)->list.purpose))
      t = build_component_ref (t, ((list)->list.purpose));
    else
      t = build_array_ref (t, ((list)->list.value1));
  t = build_unary_op (ADDR_EXPR, t, 0);
  return convert (global_trees[TI_SIZE_TYPE], t);
}
tree
convert (tree type, tree expr)
{
  tree e = expr;
  enum tree_code code = ((enum tree_code) (type)->common.code);
  if (type == ((expr)->common.type)
      || ((enum tree_code) (expr)->common.code) == ERROR_MARK
      || code == ERROR_MARK || ((enum tree_code) (((expr)->common.type))->common.code) == ERROR_MARK)
    return expr;
  if (((type)->type.main_variant) == ((((expr)->common.type))->type.main_variant))
    return fold (build1_stat (NOP_EXPR,type,expr ));
  if (((enum tree_code) (((expr)->common.type))->common.code) == ERROR_MARK)
    return global_trees[TI_ERROR_MARK];
  if (((enum tree_code) (((expr)->common.type))->common.code) == VOID_TYPE)
    {
      error ("void value1 not ignored as it ought to be");
      return global_trees[TI_ERROR_MARK];
    }
  if (code == VOID_TYPE)
    return build1_stat (CONVERT_EXPR,type,e );
  if (code == INTEGER_TYPE || code == ENUMERAL_TYPE)
    return fold (convert_to_integer (type, e));
  if (code == BOOLEAN_TYPE)
    {
      tree t = lang_hooks.truthvalue_conversion (expr);
      if (((enum tree_code) (t)->common.code) == ERROR_MARK)
 return t;
      if (((enum tree_code) (t)->common.code) == NOP_EXPR)
 return fold (build1_stat (NOP_EXPR,type,((t)->exp.operands[0]) ));
      else
 return fold (build1_stat (NOP_EXPR,type,t ));
    }
  if (code == POINTER_TYPE || code == REFERENCE_TYPE)
    return fold (convert_to_pointer (type, e));
  if (code == REAL_TYPE)
    return fold (convert_to_real (type, e));
  if (code == COMPLEX_TYPE)
    return fold (convert_to_complex (type, e));
  if (code == VECTOR_TYPE)
    return fold (convert_to_vector (type, e));
  if ((code == RECORD_TYPE || code == UNION_TYPE)
      && lang_hooks.types_compatible_p (type, ((expr)->common.type)))
      return e;
  error ("conversion to non-scalar type requested");
  return global_trees[TI_ERROR_MARK];
}
enum formals_style_enum {
  ansi,
  k_and_r_names,
  k_and_r_decls
};
typedef enum formals_style_enum formals_style;
static const char *data_type;
static char *affix_data_type (const char *) ;
static const char *gen_formal_list_for_type (tree, formals_style);
static int deserves_ellipsis (tree);
static const char *gen_formal_list_for_func_def (tree, formals_style);
static const char *gen_type (const char *, tree, formals_style);
static const char *gen_decl (tree, int, formals_style);
static char *
affix_data_type (const char *param)
{
  char *const type_or_decl = (libiberty_optr = (param), libiberty_len = strlen (libiberty_optr) + 1, libiberty_nptr = C_alloca(libiberty_len), (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len));
  char *p = type_or_decl;
  char *qualifiers_then_data_type;
  char saved;
  for (;;)
    {
      if (!strncmp (p, "volatile ", 9))
        {
          p += 9;
          continue;
        }
      if (!strncmp (p, "const ", 6))
        {
          p += 6;
          continue;
        }
      break;
    }
  if (p == type_or_decl)
    return concat (data_type, " ", type_or_decl, ((void *)0));
  saved = *p;
  *p = '\0';
  qualifiers_then_data_type = concat (type_or_decl, data_type, ((void *)0));
  *p = saved;
  return reconcat (qualifiers_then_data_type,
     qualifiers_then_data_type, " ", p, ((void *)0));
}
static const char *
gen_formal_list_for_type (tree fntype, formals_style style)
{
  const char *formal_list = "";
  tree formal_type;
  if (style != ansi)
    return "()";
  formal_type = ((fntype)->type.value1s);
  while (formal_type && ((formal_type)->list.value1) != global_trees[TI_VOID_TYPE])
    {
      const char *this_type;
      if (*formal_list)
        formal_list = concat (formal_list, ", ", ((void *)0));
      this_type = gen_type ("", ((formal_type)->list.value1), ansi);
      formal_list
 = ((strlen (this_type))
    ? concat (formal_list, affix_data_type (this_type), ((void *)0))
    : concat (formal_list, data_type, ((void *)0)));
      formal_type = ((formal_type)->common.chain);
    }
  if (!*formal_list)
    {
      if (((fntype)->type.value1s))
        formal_list = "void";
      else
        formal_list = "/* ??? */";
    }
  else
    {
      if (!formal_type)
        formal_list = concat (formal_list, ", ...", ((void *)0));
    }
  return concat (" (", formal_list, ")", ((void *)0));
}
static int
deserves_ellipsis (tree fntype)
{
  tree formal_type;
  formal_type = ((fntype)->type.value1s);
  while (formal_type && ((formal_type)->list.value1) != global_trees[TI_VOID_TYPE])
    formal_type = ((formal_type)->common.chain);
  return (!formal_type && ((fntype)->type.value1s));
}
static const char *
gen_formal_list_for_func_def (tree fndecl, formals_style style)
{
  const char *formal_list = "";
  tree formal_decl;
  formal_decl = ((fndecl)->decl.arguments);
  while (formal_decl)
    {
      const char *this_formal;
      if (*formal_list && ((style == ansi) || (style == k_and_r_names)))
        formal_list = concat (formal_list, ", ", ((void *)0));
      this_formal = gen_decl (formal_decl, 0, style);
      if (style == k_and_r_decls)
        formal_list = concat (formal_list, this_formal, "; ", ((void *)0));
      else
        formal_list = concat (formal_list, this_formal, ((void *)0));
      formal_decl = ((formal_decl)->common.chain);
    }
  if (style == ansi)
    {
      if (!((fndecl)->decl.arguments))
        formal_list = concat (formal_list, "void", ((void *)0));
      if (deserves_ellipsis (((fndecl)->common.type)))
        formal_list = concat (formal_list, ", ...", ((void *)0));
    }
  if ((style == ansi) || (style == k_and_r_names))
    formal_list = concat (" (", formal_list, ")", ((void *)0));
  return formal_list;
}
static const char *
gen_type (const char *ret_val, tree t, formals_style style)
{
  tree chain_p;
  if (((t)->type.name) && ((enum tree_code) (((t)->type.name))->common.code) == TYPE_DECL)
    data_type = ((const char *) (((((t)->type.name))->decl.name))->identifier.id.str);
  else
    {
      switch (((enum tree_code) (t)->common.code))
        {
        case POINTER_TYPE:
          if (((t)->common.readonly_flag))
            ret_val = concat ("const ", ret_val, ((void *)0));
          if (((t)->common.volatile_flag))
            ret_val = concat ("volatile ", ret_val, ((void *)0));
          ret_val = concat ("*", ret_val, ((void *)0));
   if (((enum tree_code) (((t)->common.type))->common.code) == ARRAY_TYPE || ((enum tree_code) (((t)->common.type))->common.code) == FUNCTION_TYPE)
     ret_val = concat ("(", ret_val, ")", ((void *)0));
          ret_val = gen_type (ret_val, ((t)->common.type), style);
          return ret_val;
        case ARRAY_TYPE:
   if (!(((t)->type.size) != (tree) ((void *)0)) || ((enum tree_code) (((t)->type.size))->common.code) != INTEGER_CST)
     ret_val = gen_type (concat (ret_val, "[]", ((void *)0)),
    ((t)->common.type), style);
   else if (int_size_in_bytes (t) == 0)
     ret_val = gen_type (concat (ret_val, "[0]", ((void *)0)),
    ((t)->common.type), style);
   else
     {
       int size = (int_size_in_bytes (t) / int_size_in_bytes (((t)->common.type)));
       char buff[10];
       sprintf (buff, "[%d]", size);
       ret_val = gen_type (concat (ret_val, buff, ((void *)0)),
      ((t)->common.type), style);
     }
          break;
        case FUNCTION_TYPE:
          ret_val = gen_type (concat (ret_val,
          gen_formal_list_for_type (t, style),
          ((void *)0)),
         ((t)->common.type), style);
          break;
        case IDENTIFIER_NODE:
          data_type = ((const char *) (t)->identifier.id.str);
          break;
        case RECORD_TYPE:
   if (((t)->type.name))
     data_type = ((const char *) (((t)->type.name))->identifier.id.str);
   else
     {
       data_type = "";
       chain_p = ((t)->type.value1s);
       while (chain_p)
  {
    data_type = concat (data_type, gen_decl (chain_p, 0, ansi),
          ((void *)0));
    chain_p = ((chain_p)->common.chain);
    data_type = concat (data_type, "; ", ((void *)0));
  }
       data_type = concat ("{ ", data_type, "}", ((void *)0));
     }
   data_type = concat ("struct ", data_type, ((void *)0));
   break;
        case UNION_TYPE:
   if (((t)->type.name))
     data_type = ((const char *) (((t)->type.name))->identifier.id.str);
   else
     {
       data_type = "";
       chain_p = ((t)->type.value1s);
       while (chain_p)
  {
    data_type = concat (data_type, gen_decl (chain_p, 0, ansi),
          ((void *)0));
    chain_p = ((chain_p)->common.chain);
    data_type = concat (data_type, "; ", ((void *)0));
  }
       data_type = concat ("{ ", data_type, "}", ((void *)0));
     }
   data_type = concat ("union ", data_type, ((void *)0));
   break;
        case ENUMERAL_TYPE:
   if (((t)->type.name))
     data_type = ((const char *) (((t)->type.name))->identifier.id.str);
   else
     {
       data_type = "";
       chain_p = ((t)->type.value1s);
       while (chain_p)
  {
    data_type = concat (data_type,
   ((const char *) (((chain_p)->list.purpose))->identifier.id.str), ((void *)0));
    chain_p = ((chain_p)->common.chain);
    if (chain_p)
      data_type = concat (data_type, ", ", ((void *)0));
  }
       data_type = concat ("{ ", data_type, " }", ((void *)0));
     }
   data_type = concat ("enum ", data_type, ((void *)0));
   break;
        case TYPE_DECL:
          data_type = ((const char *) (((t)->decl.name))->identifier.id.str);
          break;
        case INTEGER_TYPE:
          data_type = ((const char *) (((((t)->type.name))->decl.name))->identifier.id.str);
          if (((t)->common.unsigned_flag) && ((((t)->common.readonly_flag) * 0x1) | (((t)->common.volatile_flag) * 0x2) | (((t)->type.restrict_flag) * 0x4)))
     data_type = concat ("unsigned ", data_type, ((void *)0));
   break;
        case REAL_TYPE:
          data_type = ((const char *) (((((t)->type.name))->decl.name))->identifier.id.str);
          break;
        case VOID_TYPE:
          data_type = "void";
          break;
 case ERROR_MARK:
   data_type = "[ERROR]";
   break;
        default:
          fancy_abort ("gcc.c", 730889, "?");
        }
    }
  if (((t)->common.readonly_flag))
    ret_val = concat ("const ", ret_val, ((void *)0));
  if (((t)->common.volatile_flag))
    ret_val = concat ("volatile ", ret_val, ((void *)0));
  if (((t)->type.restrict_flag))
    ret_val = concat ("restrict ", ret_val, ((void *)0));
  return ret_val;
}
static const char *
gen_decl (tree decl, int is_func_definition, formals_style style)
{
  const char *ret_val;
  if (((decl)->decl.name))
    ret_val = ((const char *) (((decl)->decl.name))->identifier.id.str);
  else
    ret_val = "";
  if (style == k_and_r_names)
    return ret_val;
  if (((decl)->common.volatile_flag))
    ret_val = concat ("volatile ", ret_val, ((void *)0));
  if (((decl)->common.readonly_flag))
    ret_val = concat ("const ", ret_val, ((void *)0));
  data_type = "";
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL && is_func_definition)
    {
      ret_val = concat (ret_val, gen_formal_list_for_func_def (decl, ansi),
   ((void *)0));
      ret_val = gen_type (ret_val, ((((decl)->common.type))->common.type), style);
    }
  else
    ret_val = gen_type (ret_val, ((decl)->common.type), style);
  ret_val = affix_data_type (ret_val);
  if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL && ((decl)->decl.lang_flag_4))
    ret_val = concat ("register ", ret_val, ((void *)0));
  if (((decl)->common.public_flag))
    ret_val = concat ("extern ", ret_val, ((void *)0));
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL && !((decl)->common.public_flag))
    ret_val = concat ("static ", ret_val, ((void *)0));
  return ret_val;
}
extern FILE *aux_info_file;
void
gen_aux_info_record (tree fndecl, int is_definition, int is_implicit,
       int is_prototyped)
{
  if (flag_gen_aux_info)
    {
      static int compiled_from_record = 0;
      expanded_location xloc = (((fndecl)->decl.locus));
      if (! compiled_from_record++)
 {
   fprintf (aux_info_file, "/* compiled from: . */\n");
 }
      fprintf (aux_info_file, "/* %s:%d:%c%c */ %s;",
        xloc.file, xloc.line,
        (is_implicit) ? 'I' : (is_prototyped) ? 'N' : 'O',
        (is_definition) ? 'F' : 'C',
        gen_decl (fndecl, is_definition, ansi));
      if (is_definition)
 {
   fprintf (aux_info_file, " /*%s %s*/",
     gen_formal_list_for_func_def (fndecl, k_and_r_names),
     gen_formal_list_for_func_def (fndecl, k_and_r_decls));
 }
      fprintf (aux_info_file, "\n");
    }
}
cpp_reader *parse_in;
tree c_global_trees[C_TREE_IDX_MAX];
unsigned char statement_code_p[256];
int flag_preprocess_only;
char flag_no_line_commands;
char flag_no_output;
char flag_dump_macros;
char flag_dump_includes;
unsigned char flag_pch_preprocess;
const char *pch_file;
int flag_iso;
int flag_undef;
int flag_no_builtin;
int flag_no_nonansi_builtin;
int flag_short_double;
int flag_short_wchar;
int flag_ms_extensions;
int flag_no_asm;
int flag_const_string1s;
int flag_signed_bitfields = 1;
int explicit_flag_signed_bitfields;
int warn_write_string1s;
int warn_unknown_pragmas;
int warn_format;
int flag_nil_receivers = 1;
int flag_objc_exceptions = 0;
int flag_objc_sjlj_exceptions = -1;
int flag_zero_link = 0;
int flag_replace_objc_classes = 0;
int flag_cond_mismatch;
int flag_isoc94;
int flag_isoc99;
int flag_hosted = 1;
int warn_main;
int flag_gen_declaration;
int flag_next_runtime = 0;
int print_struct_values;
const char *constant_string1_class_name;
int flag_no_gnu_keywords;
int flag_implement_inlines = 1;
int flag_implicit_templates = 1;
int flag_implicit_inline_templates = 1;
int flag_use_repository;
int flag_optional_diags = 1;
int flag_elide_constructors = 1;
int flag_default_inline = 1;
int flag_rtti = 1;
int flag_conserve_space;
int flag_access_control = 1;
int flag_check_new;
int flag_new_for_scope = 1;
int flag_weak = 1;
int flag_working_directory = -1;
int flag_use_cxa_atexit = 0;
int flag_permissive;
int flag_enforce_eh_specs = 1;
int warn_implicit = 1;
int max_tinst_depth = 500;
tree *ridpointers;
tree (*make_fname_decl) (tree, int);
int (*lang_statement_code_p) (enum tree_code);
void (*lang_expand_function_end) (void);
int skip_evaluation;
struct fname_var_t
{
  tree *const decl;
  const unsigned rid;
  const int pretty;
};
const struct fname_var_t fname_vars[] =
{
  {&c_global_trees[CTI_C99_FUNCTION_NAME_DECL], RID_C99_FUNCTION_NAME, 0},
  {&c_global_trees[CTI_FUNCTION_NAME_DECL], RID_FUNCTION_NAME, 0},
  {&c_global_trees[CTI_PRETTY_FUNCTION_NAME_DECL], RID_PRETTY_FUNCTION_NAME, 1},
  {((void *)0), 0, 0}
};
static int constant_fits_type_p (tree, tree);
static tree handle_packed_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_nocommon_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_common_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_noreturn_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_noinline_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_always_inline_attribute (tree *, tree, tree, int,
         unsigned char *);
static tree handle_used_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_unused_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_const_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_transparent_union_attribute (tree *, tree, tree,
      int, unsigned char *);
static tree handle_constructor_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_destructor_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_mode_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_section_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_aligned_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_weak_attribute (tree *, tree, tree, int, unsigned char *) ;
static tree handle_alias_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_visibility_attribute (tree *, tree, tree, int,
      unsigned char *);
static tree handle_tls_model_attribute (tree *, tree, tree, int,
     unsigned char *);
static tree handle_no_instrument_function_attribute (tree *, tree,
           tree, int, unsigned char *);
static tree handle_malloc_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
          unsigned char *);
static tree handle_pure_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_deprecated_attribute (tree *, tree, tree, int,
      unsigned char *);
static tree handle_vector_size_attribute (tree *, tree, tree, int,
       unsigned char *);
static tree handle_nonnull_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_nothrow_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_cleanup_attribute (tree *, tree, tree, int, unsigned char *);
static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
       unsigned char *);
static void check_function_nonnull (tree, tree);
static void check_nonnull_arg (void *, tree, unsigned long);
static unsigned char nonnull_check_p (tree, unsigned long);
static unsigned char get_nonnull_operand (tree, unsigned long *);
static int resort_field_decl_cmp (const void *, const void *);
const struct attribute_spec c_common_attribute_table[] =
{
  { "packed", 0, 0, 0, 0, 0,
         handle_packed_attribute },
  { "nocommon", 0, 0, 1, 0, 0,
         handle_nocommon_attribute },
  { "common", 0, 0, 1, 0, 0,
         handle_common_attribute },
  { "noreturn", 0, 0, 1, 0, 0,
         handle_noreturn_attribute },
  { "volatile", 0, 0, 1, 0, 0,
         handle_noreturn_attribute },
  { "noinline", 0, 0, 1, 0, 0,
         handle_noinline_attribute },
  { "always_inline", 0, 0, 1, 0, 0,
         handle_always_inline_attribute },
  { "used", 0, 0, 1, 0, 0,
         handle_used_attribute },
  { "unused", 0, 0, 0, 0, 0,
         handle_unused_attribute },
  { "const", 0, 0, 1, 0, 0,
         handle_const_attribute },
  { "transparent_union", 0, 0, 0, 0, 0,
         handle_transparent_union_attribute },
  { "constructor", 0, 0, 1, 0, 0,
         handle_constructor_attribute },
  { "destructor", 0, 0, 1, 0, 0,
         handle_destructor_attribute },
  { "mode", 1, 1, 0, 1, 0,
         handle_mode_attribute },
  { "section", 1, 1, 1, 0, 0,
         handle_section_attribute },
  { "aligned", 0, 1, 0, 0, 0,
         handle_aligned_attribute },
  { "weak", 0, 0, 1, 0, 0,
         handle_weak_attribute },
  { "alias", 1, 1, 1, 0, 0,
         handle_alias_attribute },
  { "no_instrument_function", 0, 0, 1, 0, 0,
         handle_no_instrument_function_attribute },
  { "malloc", 0, 0, 1, 0, 0,
         handle_malloc_attribute },
  { "no_stack_limit", 0, 0, 1, 0, 0,
         handle_no_limit_stack_attribute },
  { "pure", 0, 0, 1, 0, 0,
         handle_pure_attribute },
  { "deprecated", 0, 0, 0, 0, 0,
         handle_deprecated_attribute },
  { "vector_size", 1, 1, 0, 1, 0,
         handle_vector_size_attribute },
  { "visibility", 1, 1, 1, 0, 0,
         handle_visibility_attribute },
  { "tls_model", 1, 1, 1, 0, 0,
         handle_tls_model_attribute },
  { "nonnull", 0, -1, 0, 1, 1,
         handle_nonnull_attribute },
  { "nothrow", 0, 0, 1, 0, 0,
         handle_nothrow_attribute },
  { "may_alias", 0, 0, 0, 1, 0, ((void *)0) },
  { "cleanup", 1, 1, 1, 0, 0,
         handle_cleanup_attribute },
  { "warn_unused_result", 0, 0, 0, 1, 1,
         handle_warn_unused_result_attribute },
  { ((void *)0), 0, 0, 0, 0, 0, ((void *)0) }
};
const struct attribute_spec c_common_format_attribute_table[] =
{
  { "format", 3, 3, 0, 1, 1,
         handle_format_attribute },
  { "format_arg", 1, 1, 0, 1, 1,
         handle_format_arg_attribute },
  { ((void *)0), 0, 0, 0, 0, 0, ((void *)0) }
};
void
start_fname_decls (void)
{
  unsigned ix;
  tree saved = (tree) ((void *)0);
  for (ix = 0; fname_vars[ix].decl; ix++)
    {
      tree decl = *fname_vars[ix].decl;
      if (decl)
 {
   saved = tree_cons_stat (decl,build_int_2_wide ((unsigned long) (ix), (long) (0)),saved );
   *fname_vars[ix].decl = (tree) ((void *)0);
 }
    }
  if (saved || c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS])
    c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS] = tree_cons_stat (saved,(tree) ((void *)0),c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS] )
                                  ;
}
void
finish_fname_decls (void)
{
  unsigned ix;
  tree stmts = (tree) ((void *)0);
  tree stack1 = c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS];
  for (; stack1 && ((stack1)->list.value1); stack1 = ((stack1)->common.chain))
    append_to_statement_list (((stack1)->list.value1), &stmts);
  if (stmts)
    {
      tree *bodyp = &((current_function_decl)->decl.saved_tree);
      if (((enum tree_code) (*bodyp)->common.code) == BIND_EXPR)
 bodyp = &((((*bodyp))->exp.operands[1]));
      append_to_statement_list (*bodyp, &stmts);
      *bodyp = stmts;
    }
  for (ix = 0; fname_vars[ix].decl; ix++)
    *fname_vars[ix].decl = (tree) ((void *)0);
  if (stack1)
    {
      tree saved;
      for (saved = ((stack1)->list.purpose); saved; saved = ((saved)->common.chain))
 {
   tree decl = ((saved)->list.purpose);
   unsigned ix = (((((saved)->list.value1))->int_cst.int_cst).low);
   *fname_vars[ix].decl = decl;
 }
      stack1 = ((stack1)->common.chain);
    }
  c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS] = stack1;
}
const char *
fname_as_string1 (int pretty_p)
{
  const char *name = "top level";
  char *namep;
  int vrb = 2;
  if (! pretty_p)
    {
      name = "";
      vrb = 0;
    }
  if (current_function_decl)
    name = lang_hooks.decl_printable_name (current_function_decl, vrb);
  if (c_lex_string1_translate)
    {
      int len = strlen (name) + 3;
      cpp_string cstr = { 0, 0 }, strname;
      namep = xmalloc (len);
      snprintf (namep, len, "%s\"", name);
      strname.text = (unsigned char *) namep;
      strname.len = len - 1;
      if (cpp_interpret_string1 (parse_in, &strname, 1, &cstr, 0))
 return (char *) cstr.text;
    }
  else
    namep = xstrdup (name);
  return namep;
}
int
c_expand_decl (tree decl)
{
  if (((enum tree_code) (decl)->common.code) == VAR_DECL && !((decl)->common.static_flag))
    {
      if (!anon_aggr_type_p (((decl)->common.type)))
        emit_local_var (decl);
      else
        expand_anon_union_decl (decl, (tree) ((void *)0),
                                (((decl))->decl.arguments));
    }
  else if (((enum tree_code) (decl)->common.code) == VAR_DECL && ((decl)->common.static_flag))
    make_rtl_for_local_static (decl);
  else
    return 0;
  return 1;
}
tree
fname_decl (unsigned int rid, tree id)
{
  unsigned ix;
  tree decl = (tree) ((void *)0);
  for (ix = 0; fname_vars[ix].decl; ix++)
    if (fname_vars[ix].rid == rid)
      break;
  decl = *fname_vars[ix].decl;
  if (!decl)
    {
      tree stmts;
      location_t saved_location = input_location;
      (((input_location)).line) = 0;
      stmts = push_stmt_list ();
      decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
      stmts = pop_stmt_list (stmts);
      if (!(((enum tree_code) (stmts)->common.code) == NOP_EXPR && (((enum tree_code) (((stmts)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((stmts)->exp.operands[0]))))
 c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS]
   = tree_cons_stat (decl,stmts,c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS] );
      *fname_vars[ix].decl = decl;
      input_location = saved_location;
    }
  if (!ix && !current_function_decl)
    pedwarn ("%J'%D' is not defined outside of function scope", decl, decl);
  return decl;
}
tree
fix_string1_type (tree value1)
{
  const int wchar_bytes = ((c_global_trees[CTI_WCHAR_TYPE])->type.precision) / 8;
  const int wide_flag = ((value1)->common.type) == c_global_trees[CTI_WCHAR_ARRAY_TYPE];
  const int nchars_max = flag_isoc99 ? 4095 : 509;
  int length = ((value1)->string11.length);
  int nchars;
  nchars = wide_flag ? length / wchar_bytes : length;
  if (pedantic && nchars - 1 > nchars_max && !(c_language & clk_cxx))
    pedwarn ("string1 length `%d' is greater than the length `%d' ISO C%d compilers are required to support",
      nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
  if (flag_const_string1s)
    {
      tree elements
 = build_qualified_type ((wide_flag ? c_global_trees[CTI_WCHAR_TYPE] : integer_types[itk_char]), ((1) ? 0x1 : 0) | ((0) ? 0x2 : 0))
              ;
      ((value1)->common.type)
 = build_array_type (elements,
       build_index_type (build_int_2_wide ((unsigned long) (nchars - 1), (long) (0))));
    }
  else
    ((value1)->common.type)
      = build_array_type (wide_flag ? c_global_trees[CTI_WCHAR_TYPE] : integer_types[itk_char],
     build_index_type (build_int_2_wide ((unsigned long) (nchars - 1), (long) (0))));
  ((value1)->common.constant_flag) = 1;
  ((value1)->common.invariant_flag) = 1;
  ((value1)->common.readonly_flag) = 1;
  ((value1)->common.static_flag) = 1;
  return value1;
}
void
constant_expression_warning (tree value1)
{
  if ((((enum tree_code) (value1)->common.code) == INTEGER_CST || ((enum tree_code) (value1)->common.code) == REAL_CST
       || ((enum tree_code) (value1)->common.code) == VECTOR_CST
       || ((enum tree_code) (value1)->common.code) == COMPLEX_CST)
      && ((value1)->common.static_flag) && pedantic)
    pedwarn ("overflow in constant expression");
}
void
overflow_warning (tree value1)
{
  if ((((enum tree_code) (value1)->common.code) == INTEGER_CST
       || (((enum tree_code) (value1)->common.code) == COMPLEX_CST
    && ((enum tree_code) (((value1)->complex.real))->common.code) == INTEGER_CST))
      && ((value1)->common.public_flag))
    {
      ((value1)->common.public_flag) = 0;
      if (skip_evaluation == 0)
 warning ("integer overflow in expression");
    }
  else if ((((enum tree_code) (value1)->common.code) == REAL_CST
     || (((enum tree_code) (value1)->common.code) == COMPLEX_CST
  && ((enum tree_code) (((value1)->complex.real))->common.code) == REAL_CST))
    && ((value1)->common.public_flag))
    {
      ((value1)->common.public_flag) = 0;
      if (skip_evaluation == 0)
 warning ("floating point overflow in expression");
    }
  else if (((enum tree_code) (value1)->common.code) == VECTOR_CST && ((value1)->common.public_flag))
    {
      ((value1)->common.public_flag) = 0;
      if (skip_evaluation == 0)
 warning ("vector overflow in expression");
    }
}
void
unsigned_conversion_warning (tree result, tree operand)
{
  tree type = ((result)->common.type);
  if (((enum tree_code) (operand)->common.code) == INTEGER_CST
      && ((enum tree_code) (type)->common.code) == INTEGER_TYPE
      && ((type)->common.unsigned_flag)
      && skip_evaluation == 0
      && !int_fits_type_p (operand, type))
    {
      if (!int_fits_type_p (operand, c_common_signed_type (type)))
 warning ("large integer implicitly truncated to unsigned type");
      else if (warn_conversion)
 warning ("negative integer implicitly converted to unsigned type");
    }
}
static int
constant_fits_type_p (tree c, tree type)
{
  if (((enum tree_code) (c)->common.code) == INTEGER_CST)
    return int_fits_type_p (c, type);
  c = convert (type, c);
  return !((c)->common.public_flag);
}
int
vector_types_convertible_p (tree t1, tree t2)
{
  return targetm.vector_opaque_p (t1)
  || targetm.vector_opaque_p (t2)
  || ((t1)->type.mode) == ((t2)->type.mode);
}
tree
convert_and_check (tree type, tree expr)
{
  tree t = convert (type, expr);
  if (((enum tree_code) (t)->common.code) == INTEGER_CST)
    {
      if (((t)->common.public_flag))
 {
   ((t)->common.public_flag) = 0;
   ((t)->common.static_flag) = ((expr)->common.static_flag);
   if (!(((type)->common.unsigned_flag) < ((((expr)->common.type))->common.unsigned_flag)
  && ((enum tree_code) (((expr)->common.type))->common.code) == INTEGER_TYPE
  && ((type)->type.precision) == ((((expr)->common.type))->type.precision)))
     if ((pedantic
   || ((type)->common.unsigned_flag)
   || ! constant_fits_type_p (expr,
         c_common_unsigned_type (type)))
  && skip_evaluation == 0)
       warning ("overflow in implicit constant conversion");
 }
      else
 unsigned_conversion_warning (t, expr);
    }
  return t;
}
struct tlist
{
  struct tlist *next;
  tree expr, writer;
};
struct tlist_cache
{
  struct tlist_cache *next;
  struct tlist *cache_before_sp;
  struct tlist *cache_after_sp;
  tree expr;
};
static struct obstack tlist_obstack;
static char *tlist_firstobj = 0;
static struct tlist *warned_ids;
static struct tlist_cache *save_expr_cache;
static void add_tlist (struct tlist **, struct tlist *, tree, int);
static void merge_tlist (struct tlist **, struct tlist *, int);
static void verify_tree (tree, struct tlist **, struct tlist **, tree);
static int warning_candidate_p (tree);
static void warn_for_collisions (struct tlist *);
static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
static struct tlist *new_tlist (struct tlist *, tree, tree);
static struct tlist *
new_tlist (struct tlist *next, tree t, tree writer)
{
  struct tlist *l;
  l = (( ((&tlist_obstack))->temp = ((sizeof *l)), ((((&tlist_obstack))->chunk_limit - ((&tlist_obstack))->next_free < ((&tlist_obstack))->temp) ? (_obstack_newchunk (((&tlist_obstack)), ((&tlist_obstack))->temp), 0) : 0), (((&tlist_obstack))->next_free += (((&tlist_obstack))->temp))), ( (((&tlist_obstack))->next_free == ((&tlist_obstack))->object_base ? ((((&tlist_obstack))->maybe_empty_object = 1), 0) : 0), ((&tlist_obstack))->temp = ((((&tlist_obstack))->object_base) - (char *) 0), ((&tlist_obstack))->next_free = (((((((&tlist_obstack))->next_free) - (char *) 0)+((&tlist_obstack))->alignment_mask) & ~ (((&tlist_obstack))->alignment_mask)) + (char *) 0), ((((&tlist_obstack))->next_free - (char *) ((&tlist_obstack))->chunk > ((&tlist_obstack))->chunk_limit - (char *) ((&tlist_obstack))->chunk) ? (((&tlist_obstack))->next_free = ((&tlist_obstack))->chunk_limit) : 0), ((&tlist_obstack))->object_base = ((&tlist_obstack))->next_free, ((((&tlist_obstack))->temp) + (char *) 0)));
  l->next = next;
  l->expr = t;
  l->writer = writer;
  return l;
}
static void
add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
{
  while (add)
    {
      struct tlist *next = add->next;
      if (! copy)
 add->next = *to;
      if (! exclude_writer || add->writer != exclude_writer)
 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
      add = next;
    }
}
static void
merge_tlist (struct tlist **to, struct tlist *add, int copy)
{
  struct tlist **end = to;
  while (*end)
    end = &(*end)->next;
  while (add)
    {
      int found = 0;
      struct tlist *tmp2;
      struct tlist *next = add->next;
      for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
 if (tmp2->expr == add->expr)
   {
     found = 1;
     if (! tmp2->writer)
       tmp2->writer = add->writer;
   }
      if (! found)
 {
   *end = copy ? add : new_tlist (((void *)0), add->expr, add->writer);
   end = &(*end)->next;
   *end = 0;
 }
      add = next;
    }
}
static void
warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
         int only_writes)
{
  struct tlist *tmp;
  for (tmp = warned_ids; tmp; tmp = tmp->next)
    if (tmp->expr == written)
      return;
  while (list)
    {
      if (list->expr == written
   && list->writer != writer
   && (! only_writes || list->writer)
   && ((list->expr)->decl.name))
 {
   warned_ids = new_tlist (warned_ids, written, (tree) ((void *)0));
   warning ("operation on `%s' may be undefined",
     ((const char *) (((list->expr)->decl.name))->identifier.id.str));
 }
      list = list->next;
    }
}
static void
warn_for_collisions (struct tlist *list)
{
  struct tlist *tmp;
  for (tmp = list; tmp; tmp = tmp->next)
    {
      if (tmp->writer)
 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
    }
}
static int
warning_candidate_p (tree x)
{
  return ((enum tree_code) (x)->common.code) == VAR_DECL || ((enum tree_code) (x)->common.code) == PARM_DECL;
}
static void
verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
      tree writer)
{
  struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
  enum tree_code code;
  char class;
  if (x == ((void *)0))
    return;
 restart:
  code = ((enum tree_code) (x)->common.code);
  class = tree_code_type[(int) (code)];
  if (warning_candidate_p (x))
    {
      *pno_sp = new_tlist (*pno_sp, x, writer);
      return;
    }
  switch (code)
    {
    case CONSTRUCTOR:
      return;
    case COMPOUND_EXPR:
    case TRUTH_ANDIF_EXPR:
    case TRUTH_ORIF_EXPR:
      tmp_before = tmp_nosp = tmp_list3 = 0;
      verify_tree (((x)->exp.operands[0]), &tmp_before, &tmp_nosp, (tree) ((void *)0));
      warn_for_collisions (tmp_nosp);
      merge_tlist (pbefore_sp, tmp_before, 0);
      merge_tlist (pbefore_sp, tmp_nosp, 0);
      verify_tree (((x)->exp.operands[1]), &tmp_list3, pno_sp, (tree) ((void *)0));
      merge_tlist (pbefore_sp, tmp_list3, 0);
      return;
    case COND_EXPR:
      tmp_before = tmp_list2 = 0;
      verify_tree (((x)->exp.operands[0]), &tmp_before, &tmp_list2, (tree) ((void *)0));
      warn_for_collisions (tmp_list2);
      merge_tlist (pbefore_sp, tmp_before, 0);
      merge_tlist (pbefore_sp, tmp_list2, 1);
      tmp_list3 = tmp_nosp = 0;
      verify_tree (((x)->exp.operands[1]), &tmp_list3, &tmp_nosp, (tree) ((void *)0));
      warn_for_collisions (tmp_nosp);
      merge_tlist (pbefore_sp, tmp_list3, 0);
      tmp_list3 = tmp_list2 = 0;
      verify_tree (((x)->exp.operands[2]), &tmp_list3, &tmp_list2, (tree) ((void *)0));
      warn_for_collisions (tmp_list2);
      merge_tlist (pbefore_sp, tmp_list3, 0);
      merge_tlist (&tmp_nosp, tmp_list2, 0);
      add_tlist (pno_sp, tmp_nosp, (tree) ((void *)0), 0);
      return;
    case PREDECREMENT_EXPR:
    case PREINCREMENT_EXPR:
    case POSTDECREMENT_EXPR:
    case POSTINCREMENT_EXPR:
      verify_tree (((x)->exp.operands[0]), pno_sp, pno_sp, x);
      return;
    case MODIFY_EXPR:
      tmp_before = tmp_nosp = tmp_list3 = 0;
      verify_tree (((x)->exp.operands[1]), &tmp_before, &tmp_nosp, (tree) ((void *)0));
      verify_tree (((x)->exp.operands[0]), &tmp_list3, &tmp_list3, x);
      add_tlist (&tmp_before, tmp_list3, x, 1);
      warn_for_collisions (tmp_before);
      add_tlist (pno_sp, tmp_list3, x, 0);
      warn_for_collisions_1 (((x)->exp.operands[0]), x, tmp_nosp, 1);
      merge_tlist (pbefore_sp, tmp_before, 0);
      if (warning_candidate_p (((x)->exp.operands[0])))
 merge_tlist (&tmp_nosp, new_tlist (((void *)0), ((x)->exp.operands[0]), x), 0);
      add_tlist (pno_sp, tmp_nosp, (tree) ((void *)0), 1);
      return;
    case CALL_EXPR:
      tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
      verify_tree (((x)->exp.operands[0]), &tmp_before, &tmp_nosp, (tree) ((void *)0));
      if (((x)->exp.operands[1]))
 verify_tree (((x)->exp.operands[1]), &tmp_list2, &tmp_list3, (tree) ((void *)0));
      merge_tlist (&tmp_list3, tmp_list2, 0);
      add_tlist (&tmp_before, tmp_list3, (tree) ((void *)0), 0);
      add_tlist (&tmp_before, tmp_nosp, (tree) ((void *)0), 0);
      warn_for_collisions (tmp_before);
      add_tlist (pbefore_sp, tmp_before, (tree) ((void *)0), 0);
      return;
    case TREE_LIST:
      while (x)
 {
   tmp_before = tmp_nosp = 0;
   verify_tree (((x)->list.value1), &tmp_before, &tmp_nosp, (tree) ((void *)0));
   merge_tlist (&tmp_nosp, tmp_before, 0);
   add_tlist (pno_sp, tmp_nosp, (tree) ((void *)0), 0);
   x = ((x)->common.chain);
 }
      return;
    case SAVE_EXPR:
      {
 struct tlist_cache *t;
 for (t = save_expr_cache; t; t = t->next)
   if (t->expr == x)
     break;
 if (! t)
   {
     t = (( ((&tlist_obstack))->temp = ((sizeof *t)), ((((&tlist_obstack))->chunk_limit - ((&tlist_obstack))->next_free < ((&tlist_obstack))->temp) ? (_obstack_newchunk (((&tlist_obstack)), ((&tlist_obstack))->temp), 0) : 0), (((&tlist_obstack))->next_free += (((&tlist_obstack))->temp))), ( (((&tlist_obstack))->next_free == ((&tlist_obstack))->object_base ? ((((&tlist_obstack))->maybe_empty_object = 1), 0) : 0), ((&tlist_obstack))->temp = ((((&tlist_obstack))->object_base) - (char *) 0), ((&tlist_obstack))->next_free = (((((((&tlist_obstack))->next_free) - (char *) 0)+((&tlist_obstack))->alignment_mask) & ~ (((&tlist_obstack))->alignment_mask)) + (char *) 0), ((((&tlist_obstack))->next_free - (char *) ((&tlist_obstack))->chunk > ((&tlist_obstack))->chunk_limit - (char *) ((&tlist_obstack))->chunk) ? (((&tlist_obstack))->next_free = ((&tlist_obstack))->chunk_limit) : 0), ((&tlist_obstack))->object_base = ((&tlist_obstack))->next_free, ((((&tlist_obstack))->temp) + (char *) 0)));
     t->next = save_expr_cache;
     t->expr = x;
     save_expr_cache = t;
     tmp_before = tmp_nosp = 0;
     verify_tree (((x)->exp.operands[0]), &tmp_before, &tmp_nosp, (tree) ((void *)0));
     warn_for_collisions (tmp_nosp);
     tmp_list3 = 0;
     while (tmp_nosp)
       {
  struct tlist *t = tmp_nosp;
  tmp_nosp = t->next;
  merge_tlist (&tmp_list3, t, 0);
       }
     t->cache_before_sp = tmp_before;
     t->cache_after_sp = tmp_list3;
   }
 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
 add_tlist (pno_sp, t->cache_after_sp, (tree) ((void *)0), 1);
 return;
      }
    default:
      break;
    }
  if (class == '1')
    {
      if (first_rtl_op (code) == 0)
 return;
      x = ((x)->exp.operands[0]);
      writer = 0;
      goto restart;
    }
  switch (class)
    {
    case 'r':
    case '<':
    case '2':
    case 'e':
    case 's':
    case 'x':
      {
 int lp;
 int max = first_rtl_op (((enum tree_code) (x)->common.code));
 for (lp = 0; lp < max; lp++)
   {
     tmp_before = tmp_nosp = 0;
     verify_tree (((x)->exp.operands[lp]), &tmp_before, &tmp_nosp, (tree) ((void *)0));
     merge_tlist (&tmp_nosp, tmp_before, 0);
     add_tlist (pno_sp, tmp_nosp, (tree) ((void *)0), 0);
   }
 break;
      }
    }
}
void
verify_sequence_points (tree expr)
{
  struct tlist *before_sp = 0, *after_sp = 0;
  warned_ids = 0;
  save_expr_cache = 0;
  if (tlist_firstobj == 0)
    {
      _obstack_begin ((&tlist_obstack), 0, 0, ((void *(*) (long)) xmalloc), ((void (*) (void *)) free));
      tlist_firstobj = (( ((&tlist_obstack))->temp = ((0)), ((((&tlist_obstack))->chunk_limit - ((&tlist_obstack))->next_free < ((&tlist_obstack))->temp) ? (_obstack_newchunk (((&tlist_obstack)), ((&tlist_obstack))->temp), 0) : 0), (((&tlist_obstack))->next_free += (((&tlist_obstack))->temp))), ( (((&tlist_obstack))->next_free == ((&tlist_obstack))->object_base ? ((((&tlist_obstack))->maybe_empty_object = 1), 0) : 0), ((&tlist_obstack))->temp = ((((&tlist_obstack))->object_base) - (char *) 0), ((&tlist_obstack))->next_free = (((((((&tlist_obstack))->next_free) - (char *) 0)+((&tlist_obstack))->alignment_mask) & ~ (((&tlist_obstack))->alignment_mask)) + (char *) 0), ((((&tlist_obstack))->next_free - (char *) ((&tlist_obstack))->chunk > ((&tlist_obstack))->chunk_limit - (char *) ((&tlist_obstack))->chunk) ? (((&tlist_obstack))->next_free = ((&tlist_obstack))->chunk_limit) : 0), ((&tlist_obstack))->object_base = ((&tlist_obstack))->next_free, ((((&tlist_obstack))->temp) + (char *) 0)));
    }
  verify_tree (expr, &before_sp, &after_sp, 0);
  warn_for_collisions (after_sp);
  ( (&tlist_obstack)->temp = (char *) (tlist_firstobj) - (char *) (&tlist_obstack)->chunk, (((&tlist_obstack)->temp > 0 && (&tlist_obstack)->temp < (&tlist_obstack)->chunk_limit - (char *) (&tlist_obstack)->chunk) ? (int) ((&tlist_obstack)->next_free = (&tlist_obstack)->object_base = (&tlist_obstack)->temp + (char *) (&tlist_obstack)->chunk) : (((obstack_free) ((&tlist_obstack), (&tlist_obstack)->temp + (char *) (&tlist_obstack)->chunk), 0), 0)));
}
tree
check_case_value (tree value1)
{
  if (value1 == (tree) ((void *)0))
    return value1;
  while ((((enum tree_code) (value1)->common.code) == NOP_EXPR || ((enum tree_code) (value1)->common.code) == CONVERT_EXPR || ((enum tree_code) (value1)->common.code) == NON_LVALUE_EXPR) && ((value1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((value1)->common.type) == ((((value1)->exp.operands[0]))->common.type))) (value1) = ((value1)->exp.operands[0]);
  if ((c_language & clk_cxx))
    {
      value1 = decl_constant_value (value1);
      while ((((enum tree_code) (value1)->common.code) == NOP_EXPR || ((enum tree_code) (value1)->common.code) == CONVERT_EXPR || ((enum tree_code) (value1)->common.code) == NON_LVALUE_EXPR) && ((value1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((value1)->common.type) == ((((value1)->exp.operands[0]))->common.type))) (value1) = ((value1)->exp.operands[0]);
      value1 = fold (value1);
    }
  if (((enum tree_code) (value1)->common.code) != INTEGER_CST
      && value1 != global_trees[TI_ERROR_MARK])
    {
      error ("case label does not reduce to an integer constant");
      value1 = global_trees[TI_ERROR_MARK];
    }
  else
    value1 = default_conversion (value1);
  constant_expression_warning (value1);
  return value1;
}
tree
c_common_type_for_size (unsigned int bits, int unsignedp)
{
  if (bits == ((integer_types[itk_int])->type.precision))
    return unsignedp ? integer_types[itk_unsigned_int] : integer_types[itk_int];
  if (bits == ((integer_types[itk_signed_char])->type.precision))
    return unsignedp ? integer_types[itk_unsigned_char] : integer_types[itk_signed_char];
  if (bits == ((integer_types[itk_short])->type.precision))
    return unsignedp ? integer_types[itk_unsigned_short] : integer_types[itk_short];
  if (bits == ((integer_types[itk_long])->type.precision))
    return unsignedp ? integer_types[itk_unsigned_long] : integer_types[itk_long];
  if (bits == ((integer_types[itk_long_long])->type.precision))
    return (unsignedp ? integer_types[itk_unsigned_long_long]
     : integer_types[itk_long_long]);
  if (bits == ((c_global_trees[CTI_WIDEST_INT_LIT_TYPE])->type.precision))
    return (unsignedp ? c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
     : c_global_trees[CTI_WIDEST_INT_LIT_TYPE]);
  if (bits <= ((global_trees[TI_INTQI_TYPE])->type.precision))
    return unsignedp ? global_trees[TI_UINTQI_TYPE] : global_trees[TI_INTQI_TYPE];
  if (bits <= ((global_trees[TI_INTHI_TYPE])->type.precision))
    return unsignedp ? global_trees[TI_UINTHI_TYPE] : global_trees[TI_INTHI_TYPE];
  if (bits <= ((global_trees[TI_INTSI_TYPE])->type.precision))
    return unsignedp ? global_trees[TI_UINTSI_TYPE] : global_trees[TI_INTSI_TYPE];
  if (bits <= ((global_trees[TI_INTDI_TYPE])->type.precision))
    return unsignedp ? global_trees[TI_UINTDI_TYPE] : global_trees[TI_INTDI_TYPE];
  return 0;
}
static tree registered_builtin_types;
tree
c_common_type_for_mode (enum machine_mode mode, int unsignedp)
{
  tree t;
  if (mode == ((integer_types[itk_int])->type.mode))
    return unsignedp ? integer_types[itk_unsigned_int] : integer_types[itk_int];
  if (mode == ((integer_types[itk_signed_char])->type.mode))
    return unsignedp ? integer_types[itk_unsigned_char] : integer_types[itk_signed_char];
  if (mode == ((integer_types[itk_short])->type.mode))
    return unsignedp ? integer_types[itk_unsigned_short] : integer_types[itk_short];
  if (mode == ((integer_types[itk_long])->type.mode))
    return unsignedp ? integer_types[itk_unsigned_long] : integer_types[itk_long];
  if (mode == ((integer_types[itk_long_long])->type.mode))
    return unsignedp ? integer_types[itk_unsigned_long_long] : integer_types[itk_long_long];
  if (mode == ((c_global_trees[CTI_WIDEST_INT_LIT_TYPE])->type.mode))
    return unsignedp ? c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
       : c_global_trees[CTI_WIDEST_INT_LIT_TYPE];
  if (mode == QImode)
    return unsignedp ? global_trees[TI_UINTQI_TYPE] : global_trees[TI_INTQI_TYPE];
  if (mode == HImode)
    return unsignedp ? global_trees[TI_UINTHI_TYPE] : global_trees[TI_INTHI_TYPE];
  if (mode == SImode)
    return unsignedp ? global_trees[TI_UINTSI_TYPE] : global_trees[TI_INTSI_TYPE];
  if (mode == DImode)
    return unsignedp ? global_trees[TI_UINTDI_TYPE] : global_trees[TI_INTDI_TYPE];
  if (mode == ((global_trees[TI_FLOAT_TYPE])->type.mode))
    return global_trees[TI_FLOAT_TYPE];
  if (mode == ((global_trees[TI_DOUBLE_TYPE])->type.mode))
    return global_trees[TI_DOUBLE_TYPE];
  if (mode == ((global_trees[TI_LONG_DOUBLE_TYPE])->type.mode))
    return global_trees[TI_LONG_DOUBLE_TYPE];
  if (mode == ((global_trees[TI_VOID_TYPE])->type.mode))
    return global_trees[TI_VOID_TYPE];
  if (mode == ((build_pointer_type (integer_types[itk_char]))->type.mode))
    return unsignedp ? make_unsigned_type (mode) : make_signed_type (mode);
  if (mode == ((build_pointer_type (integer_types[itk_int]))->type.mode))
    return unsignedp ? make_unsigned_type (mode) : make_signed_type (mode);
  if ((mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT))
    {
      enum machine_mode inner_mode = mode_inner[mode];
      tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
      if (inner_type != (tree) ((void *)0))
 return build_vector_type_for_mode (inner_type, mode);
    }
  for (t = registered_builtin_types; t; t = ((t)->common.chain))
    if (((((t)->list.value1))->type.mode) == mode)
      return ((t)->list.value1);
  return 0;
}
tree
c_common_unsigned_type (tree type)
{
  tree type1 = ((type)->type.main_variant);
  if (type1 == integer_types[itk_signed_char] || type1 == integer_types[itk_char])
    return integer_types[itk_unsigned_char];
  if (type1 == integer_types[itk_int])
    return integer_types[itk_unsigned_int];
  if (type1 == integer_types[itk_short])
    return integer_types[itk_unsigned_short];
  if (type1 == integer_types[itk_long])
    return integer_types[itk_unsigned_long];
  if (type1 == integer_types[itk_long_long])
    return integer_types[itk_unsigned_long_long];
  if (type1 == c_global_trees[CTI_WIDEST_INT_LIT_TYPE])
    return c_global_trees[CTI_WIDEST_UINT_LIT_TYPE];
  if (type1 == global_trees[TI_INTDI_TYPE])
    return global_trees[TI_UINTDI_TYPE];
  if (type1 == global_trees[TI_INTSI_TYPE])
    return global_trees[TI_UINTSI_TYPE];
  if (type1 == global_trees[TI_INTHI_TYPE])
    return global_trees[TI_UINTHI_TYPE];
  if (type1 == global_trees[TI_INTQI_TYPE])
    return global_trees[TI_UINTQI_TYPE];
  return c_common_signed_or_unsigned_type (1, type);
}
tree
c_common_signed_type (tree type)
{
  tree type1 = ((type)->type.main_variant);
  if (type1 == integer_types[itk_unsigned_char] || type1 == integer_types[itk_char])
    return integer_types[itk_signed_char];
  if (type1 == integer_types[itk_unsigned_int])
    return integer_types[itk_int];
  if (type1 == integer_types[itk_unsigned_short])
    return integer_types[itk_short];
  if (type1 == integer_types[itk_unsigned_long])
    return integer_types[itk_long];
  if (type1 == integer_types[itk_unsigned_long_long])
    return integer_types[itk_long_long];
  if (type1 == c_global_trees[CTI_WIDEST_UINT_LIT_TYPE])
    return c_global_trees[CTI_WIDEST_INT_LIT_TYPE];
  if (type1 == global_trees[TI_UINTDI_TYPE])
    return global_trees[TI_INTDI_TYPE];
  if (type1 == global_trees[TI_UINTSI_TYPE])
    return global_trees[TI_INTSI_TYPE];
  if (type1 == global_trees[TI_UINTHI_TYPE])
    return global_trees[TI_INTHI_TYPE];
  if (type1 == global_trees[TI_UINTQI_TYPE])
    return global_trees[TI_INTQI_TYPE];
  return c_common_signed_or_unsigned_type (0, type);
}
tree
c_common_signed_or_unsigned_type (int unsignedp, tree type)
{
  if (! (((enum tree_code) (type)->common.code) == INTEGER_TYPE || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE || ((enum tree_code) (type)->common.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->common.code) == CHAR_TYPE)
      || ((type)->common.unsigned_flag) == unsignedp)
    return type;
  if (((type)->type.mode) == ((integer_types[itk_signed_char])->type.mode))
    return unsignedp ? integer_types[itk_unsigned_char] : integer_types[itk_signed_char];
  if (((type)->type.mode) == ((integer_types[itk_int])->type.mode))
    return unsignedp ? integer_types[itk_unsigned_int] : integer_types[itk_int];
  if (((type)->type.mode) == ((integer_types[itk_short])->type.mode))
    return unsignedp ? integer_types[itk_unsigned_short] : integer_types[itk_short];
  if (((type)->type.mode) == ((integer_types[itk_long])->type.mode))
    return unsignedp ? integer_types[itk_unsigned_long] : integer_types[itk_long];
  if (((type)->type.mode) == ((integer_types[itk_long_long])->type.mode))
    return (unsignedp ? integer_types[itk_unsigned_long_long]
     : integer_types[itk_long_long]);
  if (((type)->type.mode) == ((c_global_trees[CTI_WIDEST_INT_LIT_TYPE])->type.mode))
    return (unsignedp ? c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
     : c_global_trees[CTI_WIDEST_INT_LIT_TYPE]);
  if (((type)->type.mode) == ((global_trees[TI_INTDI_TYPE])->type.mode))
    return unsignedp ? global_trees[TI_UINTDI_TYPE] : global_trees[TI_INTDI_TYPE];
  if (((type)->type.mode) == ((global_trees[TI_INTSI_TYPE])->type.mode))
    return unsignedp ? global_trees[TI_UINTSI_TYPE] : global_trees[TI_INTSI_TYPE];
  if (((type)->type.mode) == ((global_trees[TI_INTHI_TYPE])->type.mode))
    return unsignedp ? global_trees[TI_UINTHI_TYPE] : global_trees[TI_INTHI_TYPE];
  if (((type)->type.mode) == ((global_trees[TI_INTQI_TYPE])->type.mode))
    return unsignedp ? global_trees[TI_UINTQI_TYPE] : global_trees[TI_INTQI_TYPE];
  return type;
}
void
c_register_builtin_type (tree type, const char* name)
{
  tree decl;
  decl = build_decl_stat (TYPE_DECL,get_identifier (name),type );
  ((decl)->decl.artificial_flag) = 1;
  if (!((type)->type.name))
    ((type)->type.name) = decl;
  pushdecl (decl);
  registered_builtin_types = tree_cons_stat (0,type,registered_builtin_types );
}
unsigned int
min_precision (tree value1, int unsignedp)
{
  int log;
  if (tree_int_cst_sgn (value1) < 0)
    value1 = fold (build1_stat (BIT_NOT_EXPR,((value1)->common.type),value1 ));
  if (integer_zerop (value1))
    log = 0;
  else
    log = tree_floor_log2 (value1);
  return log + 1 + ! unsignedp;
}
void
binary_op_error (enum tree_code code)
{
  const char *opname;
  switch (code)
    {
    case NOP_EXPR:
      error ("invalid truth-value expression");
      return;
    case PLUS_EXPR:
      opname = "+"; break;
    case MINUS_EXPR:
      opname = "-"; break;
    case MULT_EXPR:
      opname = "*"; break;
    case MAX_EXPR:
      opname = "max"; break;
    case MIN_EXPR:
      opname = "min"; break;
    case EQ_EXPR:
      opname = "=="; break;
    case NE_EXPR:
      opname = "!="; break;
    case LE_EXPR:
      opname = "<="; break;
    case GE_EXPR:
      opname = ">="; break;
    case LT_EXPR:
      opname = "<"; break;
    case GT_EXPR:
      opname = ">"; break;
    case LSHIFT_EXPR:
      opname = "<<"; break;
    case RSHIFT_EXPR:
      opname = ">>"; break;
    case TRUNC_MOD_EXPR:
    case FLOOR_MOD_EXPR:
      opname = "%"; break;
    case TRUNC_DIV_EXPR:
    case FLOOR_DIV_EXPR:
      opname = "/"; break;
    case BIT_AND_EXPR:
      opname = "&"; break;
    case BIT_IOR_EXPR:
      opname = "|"; break;
    case TRUTH_ANDIF_EXPR:
      opname = "&&"; break;
    case TRUTH_ORIF_EXPR:
      opname = "||"; break;
    case BIT_XOR_EXPR:
      opname = "^"; break;
    case LROTATE_EXPR:
    case RROTATE_EXPR:
      opname = "rotate"; break;
    default:
      opname = "unknown"; break;
    }
  error ("invalid operands to binary %s", opname);
}
tree
shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
   enum tree_code *rescode_ptr)
{
  tree type;
  tree op0 = *op0_ptr;
  tree op1 = *op1_ptr;
  int unsignedp0, unsignedp1;
  int real1, real2;
  tree primop0, primop1;
  enum tree_code code = *rescode_ptr;
  primop0 = get_narrower (op0, &unsignedp0);
  primop1 = get_narrower (op1, &unsignedp1);
  if (op0 == primop0 && ((op0)->common.type) != *restype_ptr)
    unsignedp0 = ((((op0)->common.type))->common.unsigned_flag);
  if (op1 == primop1 && ((op1)->common.type) != *restype_ptr)
    unsignedp1 = ((((op1)->common.type))->common.unsigned_flag);
  real1 = ((enum tree_code) (((primop0)->common.type))->common.code) == REAL_TYPE;
  real2 = ((enum tree_code) (((primop1)->common.type))->common.code) == REAL_TYPE;
  if (((primop0)->common.constant_flag)
      && ! integer_zerop (primop1) && ! real_zerop (primop1))
    {
      tree tem = primop0;
      int temi = unsignedp0;
      primop0 = primop1;
      primop1 = tem;
      tem = op0;
      op0 = op1;
      op1 = tem;
      *op0_ptr = op0;
      *op1_ptr = op1;
      unsignedp0 = unsignedp1;
      unsignedp1 = temi;
      temi = real1;
      real1 = real2;
      real2 = temi;
      switch (code)
 {
 case LT_EXPR:
   code = GT_EXPR;
   break;
 case GT_EXPR:
   code = LT_EXPR;
   break;
 case LE_EXPR:
   code = GE_EXPR;
   break;
 case GE_EXPR:
   code = LE_EXPR;
   break;
 default:
   break;
 }
      *rescode_ptr = code;
    }
  if (!real1 && !real2
      && ((enum tree_code) (primop1)->common.code) == INTEGER_CST
      && ((((primop0)->common.type))->type.precision) < ((*restype_ptr)->type.precision))
    {
      int min_gt, max_gt, min_lt, max_lt;
      tree maxval, minval;
      int unsignedp = ((*restype_ptr)->common.unsigned_flag);
      tree val;
      type = c_common_signed_or_unsigned_type (unsignedp0,
            ((primop0)->common.type));
      if (!(c_language & clk_cxx) && ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE)
 type = c_common_type_for_size (((type)->type.precision), unsignedp0);
      maxval = ((type)->type.maxval);
      minval = ((type)->type.minval);
      if (unsignedp && !unsignedp0)
 *restype_ptr = c_common_signed_type (*restype_ptr);
      if (((primop1)->common.type) != *restype_ptr)
 primop1 = convert (*restype_ptr, primop1);
      if (type != *restype_ptr)
 {
   minval = convert (*restype_ptr, minval);
   maxval = convert (*restype_ptr, maxval);
 }
      if (unsignedp && unsignedp0)
 {
   min_gt = (((unsigned long) (((primop1)->int_cst.int_cst).high) < (unsigned long) (((minval)->int_cst.int_cst).high)) || (((unsigned long) (((primop1)->int_cst.int_cst).high) == (unsigned long) (((minval)->int_cst.int_cst).high)) && (((primop1)->int_cst.int_cst).low) < (((minval)->int_cst.int_cst).low)));
   max_gt = (((unsigned long) (((primop1)->int_cst.int_cst).high) < (unsigned long) (((maxval)->int_cst.int_cst).high)) || (((unsigned long) (((primop1)->int_cst.int_cst).high) == (unsigned long) (((maxval)->int_cst.int_cst).high)) && (((primop1)->int_cst.int_cst).low) < (((maxval)->int_cst.int_cst).low)));
   min_lt = (((unsigned long) (((minval)->int_cst.int_cst).high) < (unsigned long) (((primop1)->int_cst.int_cst).high)) || (((unsigned long) (((minval)->int_cst.int_cst).high) == (unsigned long) (((primop1)->int_cst.int_cst).high)) && (((minval)->int_cst.int_cst).low) < (((primop1)->int_cst.int_cst).low)));
   max_lt = (((unsigned long) (((maxval)->int_cst.int_cst).high) < (unsigned long) (((primop1)->int_cst.int_cst).high)) || (((unsigned long) (((maxval)->int_cst.int_cst).high) == (unsigned long) (((primop1)->int_cst.int_cst).high)) && (((maxval)->int_cst.int_cst).low) < (((primop1)->int_cst.int_cst).low)));
 }
      else
 {
   min_gt = ((((primop1)->int_cst.int_cst).high) < (((minval)->int_cst.int_cst).high) || ((((primop1)->int_cst.int_cst).high) == (((minval)->int_cst.int_cst).high) && (((primop1)->int_cst.int_cst).low) < (((minval)->int_cst.int_cst).low)));
   max_gt = ((((primop1)->int_cst.int_cst).high) < (((maxval)->int_cst.int_cst).high) || ((((primop1)->int_cst.int_cst).high) == (((maxval)->int_cst.int_cst).high) && (((primop1)->int_cst.int_cst).low) < (((maxval)->int_cst.int_cst).low)));
   min_lt = ((((minval)->int_cst.int_cst).high) < (((primop1)->int_cst.int_cst).high) || ((((minval)->int_cst.int_cst).high) == (((primop1)->int_cst.int_cst).high) && (((minval)->int_cst.int_cst).low) < (((primop1)->int_cst.int_cst).low)));
   max_lt = ((((maxval)->int_cst.int_cst).high) < (((primop1)->int_cst.int_cst).high) || ((((maxval)->int_cst.int_cst).high) == (((primop1)->int_cst.int_cst).high) && (((maxval)->int_cst.int_cst).low) < (((primop1)->int_cst.int_cst).low)));
 }
      val = 0;
      if (code == NE_EXPR)
 {
   if (max_lt || min_gt)
     val = c_global_trees[CTI_TRUTHVALUE_TRUE];
 }
      else if (code == EQ_EXPR)
 {
   if (max_lt || min_gt)
     val = c_global_trees[CTI_TRUTHVALUE_FALSE];
 }
      else if (code == LT_EXPR)
 {
   if (max_lt)
     val = c_global_trees[CTI_TRUTHVALUE_TRUE];
   if (!min_lt)
     val = c_global_trees[CTI_TRUTHVALUE_FALSE];
 }
      else if (code == GT_EXPR)
 {
   if (min_gt)
     val = c_global_trees[CTI_TRUTHVALUE_TRUE];
   if (!max_gt)
     val = c_global_trees[CTI_TRUTHVALUE_FALSE];
 }
      else if (code == LE_EXPR)
 {
   if (!max_gt)
     val = c_global_trees[CTI_TRUTHVALUE_TRUE];
   if (min_gt)
     val = c_global_trees[CTI_TRUTHVALUE_FALSE];
 }
      else if (code == GE_EXPR)
 {
   if (!min_lt)
     val = c_global_trees[CTI_TRUTHVALUE_TRUE];
   if (max_lt)
     val = c_global_trees[CTI_TRUTHVALUE_FALSE];
 }
      if (unsignedp && !unsignedp0)
 {
   if (val != 0)
     switch (code)
       {
       case LT_EXPR:
       case GE_EXPR:
  primop1 = ((type)->type.minval);
  val = 0;
  break;
       case LE_EXPR:
       case GT_EXPR:
  primop1 = ((type)->type.maxval);
  val = 0;
  break;
       default:
  break;
       }
   type = c_common_unsigned_type (type);
 }
      if (((enum tree_code) (primop0)->common.code) != INTEGER_CST)
 {
   if (val == c_global_trees[CTI_TRUTHVALUE_FALSE])
     warning ("comparison is always false due to limited range of data type");
   if (val == c_global_trees[CTI_TRUTHVALUE_TRUE])
     warning ("comparison is always true due to limited range of data type");
 }
      if (val != 0)
 {
   if (((primop0)->common.side_effects_flag))
     return build (COMPOUND_EXPR, ((val)->common.type), primop0, val);
   return val;
 }
    }
  else if (real1 && real2
    && (((((primop0)->common.type))->type.precision)
        == ((((primop1)->common.type))->type.precision)))
    type = ((primop0)->common.type);
  else if (unsignedp0 == unsignedp1 && real1 == real2
    && ((((primop0)->common.type))->type.precision) < ((*restype_ptr)->type.precision)
    && ((((primop1)->common.type))->type.precision) < ((*restype_ptr)->type.precision))
    {
      type = common_type (((primop0)->common.type), ((primop1)->common.type));
      type = c_common_signed_or_unsigned_type (unsignedp0
            || ((*restype_ptr)->common.unsigned_flag),
            type);
      primop0
 = convert (c_common_signed_or_unsigned_type (unsignedp0,
           ((primop0)->common.type)),
     primop0);
      primop1
 = convert (c_common_signed_or_unsigned_type (unsignedp1,
           ((primop1)->common.type)),
     primop1);
    }
  else
    {
      type = *restype_ptr;
      primop0 = op0;
      primop1 = op1;
      if (!real1 && !real2 && integer_zerop (primop1)
   && ((*restype_ptr)->common.unsigned_flag))
 {
   tree value1 = 0;
   switch (code)
     {
     case GE_EXPR:
       if (extra_warnings && !in_system_header1
    && ! (((enum tree_code) (primop0)->common.code) == INTEGER_CST
   && ! ((convert (c_common_signed_type (type), primop0))->common.public_flag)
                    ))
  warning ("comparison of unsigned expression >= 0 is always true");
       value1 = c_global_trees[CTI_TRUTHVALUE_TRUE];
       break;
     case LT_EXPR:
       if (extra_warnings && !in_system_header1
    && ! (((enum tree_code) (primop0)->common.code) == INTEGER_CST
   && ! ((convert (c_common_signed_type (type), primop0))->common.public_flag)
                    ))
  warning ("comparison of unsigned expression < 0 is always false");
       value1 = c_global_trees[CTI_TRUTHVALUE_FALSE];
       break;
     default:
       break;
     }
   if (value1 != 0)
     {
       if (((primop0)->common.side_effects_flag))
  return build (COMPOUND_EXPR, ((value1)->common.type),
         primop0, value1);
       return value1;
     }
 }
    }
  *op0_ptr = convert (type, primop0);
  *op1_ptr = convert (type, primop1);
  *restype_ptr = c_global_trees[CTI_TRUTHVALUE_TYPE];
  return 0;
}
tree
pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
{
  tree size_exp;
  tree result_type = ((ptrop)->common.type);
  if (((enum tree_code) (((result_type)->common.type))->common.code) == VOID_TYPE)
    {
      if (pedantic || warn_pointer_arith)
 pedwarn ("pointer of type `void *' used in arithmetic");
      size_exp = global_trees[TI_INTEGER_ONE];
    }
  else if (((enum tree_code) (((result_type)->common.type))->common.code) == FUNCTION_TYPE)
    {
      if (pedantic || warn_pointer_arith)
 pedwarn ("pointer to a function used in arithmetic");
      size_exp = global_trees[TI_INTEGER_ONE];
    }
  else if (((enum tree_code) (((result_type)->common.type))->common.code) == METHOD_TYPE)
    {
      if (pedantic || warn_pointer_arith)
 pedwarn ("pointer to member function used in arithmetic");
      size_exp = global_trees[TI_INTEGER_ONE];
    }
  else
    size_exp = size_in_bytes (((result_type)->common.type));
  if ((((enum tree_code) (intop)->common.code) == PLUS_EXPR || ((enum tree_code) (intop)->common.code) == MINUS_EXPR)
      && ! ((intop)->common.constant_flag)
      && ((((intop)->exp.operands[1]))->common.constant_flag)
      && ((size_exp)->common.constant_flag)
      && ((enum tree_code) (((((intop)->exp.operands[0]))->common.type))->common.code) == INTEGER_TYPE
      && (! ((((intop)->common.type))->common.unsigned_flag)
   || (((((intop)->common.type))->type.precision)
       == ((((ptrop)->common.type))->type.precision))))
    {
      enum tree_code subcode = resultcode;
      tree int_type = ((intop)->common.type);
      if (((enum tree_code) (intop)->common.code) == MINUS_EXPR)
 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
      ptrop = build_binary_op (subcode, ptrop,
          convert (int_type, ((intop)->exp.operands[1])), 1);
      intop = convert (int_type, ((intop)->exp.operands[0]));
    }
  if (((((intop)->common.type))->type.precision) != ((sizetype_tab[(int) SIZETYPE])->type.precision)
      || ((((intop)->common.type))->common.unsigned_flag) != ((sizetype_tab[(int) SIZETYPE])->common.unsigned_flag))
    intop = convert (c_common_type_for_size (((sizetype_tab[(int) SIZETYPE])->type.precision),
          ((sizetype_tab[(int) SIZETYPE])->common.unsigned_flag)), intop);
  intop = convert (result_type,
     build_binary_op (MULT_EXPR, intop,
        convert (((intop)->common.type), size_exp), 1));
  return fold (build (resultcode, result_type, ptrop, intop));
}
tree
c_common_truthvalue_conversion (tree expr)
{
  if (((enum tree_code) (expr)->common.code) == ERROR_MARK)
    return expr;
  if (((enum tree_code) (expr)->common.code) == FUNCTION_DECL)
    expr = build_unary_op (ADDR_EXPR, expr, 0);
  switch (((enum tree_code) (expr)->common.code))
    {
    case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
    case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
    case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
    case ORDERED_EXPR: case UNORDERED_EXPR:
    case TRUTH_ANDIF_EXPR:
    case TRUTH_ORIF_EXPR:
    case TRUTH_AND_EXPR:
    case TRUTH_OR_EXPR:
    case TRUTH_XOR_EXPR:
    case TRUTH_NOT_EXPR:
      ((expr)->common.type) = c_global_trees[CTI_TRUTHVALUE_TYPE];
      return expr;
    case ERROR_MARK:
      return expr;
    case INTEGER_CST:
      return integer_zerop (expr) ? c_global_trees[CTI_TRUTHVALUE_FALSE] : c_global_trees[CTI_TRUTHVALUE_TRUE];
    case REAL_CST:
      return real_zerop (expr) ? c_global_trees[CTI_TRUTHVALUE_FALSE] : c_global_trees[CTI_TRUTHVALUE_TRUE];
    case ADDR_EXPR:
      {
 if (((enum tree_code) (((expr)->exp.operands[0]))->common.code) == FUNCTION_DECL
     && ! ((((expr)->exp.operands[0]))->decl.weak_flag))
   {
     warning ("the address of `%D', will always evaluate as `true'",
       ((expr)->exp.operands[0]));
     return c_global_trees[CTI_TRUTHVALUE_TRUE];
   }
 if ((tree_code_type[(int) (((enum tree_code) (((expr)->exp.operands[0]))->common.code))] == 'd')
     && ((((expr)->exp.operands[0]))->decl.external_flag))
   break;
 if (((((expr)->exp.operands[0]))->common.side_effects_flag))
   return build (COMPOUND_EXPR, c_global_trees[CTI_TRUTHVALUE_TYPE],
   ((expr)->exp.operands[0]), c_global_trees[CTI_TRUTHVALUE_TRUE]);
 else
   return c_global_trees[CTI_TRUTHVALUE_TRUE];
      }
    case COMPLEX_EXPR:
      return build_binary_op ((((((expr)->exp.operands[1]))->common.side_effects_flag)
          ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
  lang_hooks.truthvalue_conversion (((expr)->exp.operands[0])),
  lang_hooks.truthvalue_conversion (((expr)->exp.operands[1])),
         0);
    case NEGATE_EXPR:
    case ABS_EXPR:
    case FLOAT_EXPR:
      return lang_hooks.truthvalue_conversion (((expr)->exp.operands[0]));
    case LROTATE_EXPR:
    case RROTATE_EXPR:
      if (((((expr)->exp.operands[1]))->common.side_effects_flag))
 return build (COMPOUND_EXPR, c_global_trees[CTI_TRUTHVALUE_TYPE], ((expr)->exp.operands[1]),
        lang_hooks.truthvalue_conversion (((expr)->exp.operands[0])));
      else
 return lang_hooks.truthvalue_conversion (((expr)->exp.operands[0]));
    case COND_EXPR:
      return fold (build (COND_EXPR, c_global_trees[CTI_TRUTHVALUE_TYPE], ((expr)->exp.operands[0]),
  lang_hooks.truthvalue_conversion (((expr)->exp.operands[1])),
  lang_hooks.truthvalue_conversion (((expr)->exp.operands[2]))));
    case CONVERT_EXPR:
      if (((enum tree_code) (((expr)->common.type))->common.code) == REFERENCE_TYPE
   || ((enum tree_code) (((((expr)->exp.operands[0]))->common.type))->common.code) == REFERENCE_TYPE)
 break;
    case NOP_EXPR:
      if (((((expr)->common.type))->type.precision)
   >= ((((((expr)->exp.operands[0]))->common.type))->type.precision))
 return lang_hooks.truthvalue_conversion (((expr)->exp.operands[0]));
      break;
    case MINUS_EXPR:
      if ((((mode_class[((((((expr)->exp.operands[0]))->common.type))->type.mode)] == MODE_FLOAT || mode_class[((((((expr)->exp.operands[0]))->common.type))->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((((((expr)->exp.operands[0]))->common.type))->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0) && !flag_finite_math_only))
 break;
    case BIT_XOR_EXPR:
      if (((((expr)->exp.operands[0]))->common.type)
   == ((((expr)->exp.operands[1]))->common.type))
 return build_binary_op (NE_EXPR, ((expr)->exp.operands[0]),
    ((expr)->exp.operands[1]), 1);
      return build_binary_op (NE_EXPR, ((expr)->exp.operands[0]),
         fold (build1_stat (NOP_EXPR,((((expr)->exp.operands[0]))->common.type),((expr)->exp.operands[1]) )
                                ), 1);
    case BIT_AND_EXPR:
      if (integer_onep (((expr)->exp.operands[1]))
   && ((expr)->common.type) != c_global_trees[CTI_TRUTHVALUE_TYPE])
 return build1_stat (NOP_EXPR,c_global_trees[CTI_TRUTHVALUE_TYPE],expr );
      break;
    case MODIFY_EXPR:
      if (warn_parentheses && ((enum tree_code) ((expr)->exp.complexity)) == MODIFY_EXPR)
 warning ("suggest parentheses around assignment used as truth value");
      break;
    default:
      break;
    }
  if (((enum tree_code) (((expr)->common.type))->common.code) == COMPLEX_TYPE)
    {
      tree t = save_expr (expr);
      return (build_binary_op
       ((((expr)->common.side_effects_flag)
  ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
 lang_hooks.truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
 lang_hooks.truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
        0));
    }
  return build_binary_op (NE_EXPR, expr, global_trees[TI_INTEGER_ZERO], 1);
}
static tree builtin_function_2 (const char *, const char *, tree, tree,
    int, enum built_in_class, int, int,
    tree);
tree
c_build_qualified_type (tree type, int type_quals)
{
  if (type == global_trees[TI_ERROR_MARK])
    return type;
  if (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
    return build_array_type (c_build_qualified_type (((type)->common.type),
           type_quals),
        ((type)->type.value1s));
  if ((type_quals & 0x4)
      && (!(((enum tree_code) (type)->common.code) == POINTER_TYPE || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE)
   || !(!(((enum tree_code) (((type)->common.type))->common.code) == FUNCTION_TYPE))))
    {
      error ("invalid use of `restrict'");
      type_quals &= ~0x4;
    }
  return build_qualified_type (type, type_quals);
}
void
c_apply_type_quals_to_decl (int type_quals, tree decl)
{
  tree type = ((decl)->common.type);
  if (type == global_trees[TI_ERROR_MARK])
    return;
  if (((type_quals & 0x1)
       || (type && ((enum tree_code) (type)->common.code) == REFERENCE_TYPE))
      && !(type && ((type)->type.needs_constructing_flag)))
    ((decl)->common.readonly_flag) = 1;
  if (type_quals & 0x2)
    {
      ((decl)->common.side_effects_flag) = 1;
      ((decl)->common.volatile_flag) = 1;
    }
  if (type_quals & 0x4)
    {
      while (type && ((enum tree_code) (type)->common.code) == ARRAY_TYPE)
 type = ((type)->common.type);
      if (!type
   || !(((enum tree_code) (type)->common.code) == POINTER_TYPE || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE)
   || !(!(((enum tree_code) (((type)->common.type))->common.code) == FUNCTION_TYPE)))
 error ("invalid use of `restrict'");
      else if (flag_strict_aliasing && type == ((decl)->common.type))
 ((decl)->decl.pointer_alias_set) = -2;
    }
}
static hashval_t
c_type_hash (const void *p)
{
  int i = 0;
  int shift, size;
  tree t = (tree)p;
  tree t2;
  switch (((enum tree_code) (t)->common.code))
    {
    case POINTER_TYPE:
      return c_type_hash (((t)->common.type)) ^ 0x3003003;
    case ENUMERAL_TYPE:
      shift = 3;
      t2 = ((t)->type.value1s);
      break;
    case RECORD_TYPE:
      shift = 0;
      t2 = ((t)->type.value1s);
      break;
    case QUAL_UNION_TYPE:
      shift = 1;
      t2 = ((t)->type.value1s);
      break;
    case UNION_TYPE:
      shift = 2;
      t2 = ((t)->type.value1s);
      break;
    default:
      fancy_abort ("gcc.c", 733487, "?");
    }
  for (; t2; t2 = ((t2)->common.chain))
    i++;
  size = (((((t)->type.size))->int_cst.int_cst).low);
  return ((size << 24) | (i << shift));
}
long
c_common_get_alias_set (tree t)
{
  tree u;
  void * *slot;
  static htab_t type_hash_table;
  for (u = t;
       ((enum tree_code) (u)->common.code) == COMPONENT_REF || ((enum tree_code) (u)->common.code) == ARRAY_REF;
       u = ((u)->exp.operands[0]))
    if (((enum tree_code) (u)->common.code) == COMPONENT_REF
 && ((enum tree_code) (((((u)->exp.operands[0]))->common.type))->common.code) == UNION_TYPE)
      return 0;
  if (! (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
    return -1;
  if (t == integer_types[itk_char]
      || t == integer_types[itk_signed_char]
      || t == integer_types[itk_unsigned_char])
    return 0;
  if (lookup_attribute ("may_alias", ((t)->type.attributes)))
    return 0;
  if (((enum tree_code) (t)->common.code) == INTEGER_TYPE && ((t)->common.unsigned_flag))
    {
      tree t1 = c_common_signed_type (t);
      if (t1 != t)
 return get_alias_set (t1);
    }
  else if ((((enum tree_code) (t)->common.code) == POINTER_TYPE || ((enum tree_code) (t)->common.code) == REFERENCE_TYPE))
    {
      tree t1;
      t1 = build_type_no_quals (t);
      if (t1 != t)
 return get_alias_set (t1);
    }
  if (c_language != clk_c || flag_isoc99)
    return -1;
  if (!current_file_decl || ((current_file_decl)->common.chain) == (tree) ((void *)0))
    return -1;
  if (((enum tree_code) (t)->common.code) == POINTER_TYPE)
    {
      tree t2;
      for (t2 = ((t)->common.type);
     ((enum tree_code) (t2)->common.code) == POINTER_TYPE;
     t2 = ((t2)->common.type))
  ;
      if (((enum tree_code) (t2)->common.code) != RECORD_TYPE
    && ((enum tree_code) (t2)->common.code) != ENUMERAL_TYPE
    && ((enum tree_code) (t2)->common.code) != QUAL_UNION_TYPE
    && ((enum tree_code) (t2)->common.code) != UNION_TYPE)
  return -1;
      if (((t2)->type.size) == 0)
  return -1;
    }
  if (((enum tree_code) (t)->common.code) != RECORD_TYPE
      && ((enum tree_code) (t)->common.code) != ENUMERAL_TYPE
      && ((enum tree_code) (t)->common.code) != QUAL_UNION_TYPE
      && ((enum tree_code) (t)->common.code) != UNION_TYPE
      && ((enum tree_code) (t)->common.code) != POINTER_TYPE)
    return -1;
  if (((t)->type.size) == 0)
    return -1;
  if (!type_hash_table)
    type_hash_table = htab_create (1021, c_type_hash,
     (htab_eq) lang_hooks.types_compatible_p,
     ((void *)0));
  slot = htab_find_slot (type_hash_table, t, INSERT);
  if (*slot != ((void *)0))
    return (((tree)*slot)->type.alias_set);
  else
    *slot = t;
  return -1;
}
tree
c_sizeof_or_alignof_type (tree type, enum tree_code op, int complain)
{
  const char *op_name;
  tree value1 = ((void *)0);
  enum tree_code type_code = ((enum tree_code) (type)->common.code);
  (void) (((op == SIZEOF_EXPR || op == ALIGNOF_EXPR) == 0) ? (fancy_abort ("gcc.c", 733647, "?"), 0) : 0);
  op_name = op == SIZEOF_EXPR ? "sizeof" : "__alignof__";
  if (type_code == FUNCTION_TYPE)
    {
      if (op == SIZEOF_EXPR)
 {
   if (complain && (pedantic || warn_pointer_arith))
     pedwarn ("invalid application of `sizeof' to a function type");
   value1 = global_trees[TI_SIZE_ONE];
 }
      else
 value1 = size_int_wide ((long) (8 / 8), SIZETYPE);
    }
  else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
    {
      if (type_code == VOID_TYPE
   && complain && (pedantic || warn_pointer_arith))
 pedwarn ("invalid application of `%s' to a void type", op_name);
      value1 = global_trees[TI_SIZE_ONE];
    }
  else if (!(((type)->type.size) != (tree) ((void *)0)))
    {
      if (complain)
 error ("invalid application of `%s' to incomplete type `%T' ",
        op_name, type);
      value1 = global_trees[TI_SIZE_ZERO];
    }
  else
    {
      if (op == SIZEOF_EXPR)
 value1 = size_binop (CEIL_DIV_EXPR, ((type)->type.size_unit),
       size_int_wide ((long) (((integer_types[itk_char])->type.precision) / 8), SIZETYPE)
                          );
      else
 value1 = size_int_wide ((long) (((type)->type.align) / 8), SIZETYPE);
    }
  value1 = fold (build1_stat (NOP_EXPR,global_trees[TI_SIZE_TYPE],value1 ));
  (void) (((!((((value1)->common.type))->type.no_force_blk_flag)) == 0) ? (fancy_abort ("gcc.c", 733691, "?"), 0) : 0);
  return value1;
}
tree
c_alignof_expr (tree expr)
{
  tree t;
  if (((enum tree_code) (expr)->common.code) == VAR_DECL)
    t = size_int_wide ((long) (((expr)->decl.u1.a.align) / 8), SIZETYPE);
  else if (((enum tree_code) (expr)->common.code) == COMPONENT_REF
    && ((((((expr)->exp.operands[1])))->decl.lang_flag_4) == 1))
    {
      error ("`__alignof' applied to a bit-field");
      t = global_trees[TI_SIZE_ONE];
    }
  else if (((enum tree_code) (expr)->common.code) == COMPONENT_REF
    && ((enum tree_code) (((expr)->exp.operands[1]))->common.code) == FIELD_DECL)
    t = size_int_wide ((long) (((((expr)->exp.operands[1]))->decl.u1.a.align) / 8), SIZETYPE);
  else if (((enum tree_code) (expr)->common.code) == INDIRECT_REF)
    {
      tree t = ((expr)->exp.operands[0]);
      tree best = t;
      int bestalign = ((((((t)->common.type))->common.type))->type.align);
      while (((enum tree_code) (t)->common.code) == NOP_EXPR
      && ((enum tree_code) (((((t)->exp.operands[0]))->common.type))->common.code) == POINTER_TYPE)
 {
   int thisalign;
   t = ((t)->exp.operands[0]);
   thisalign = ((((((t)->common.type))->common.type))->type.align);
   if (thisalign > bestalign)
     best = t, bestalign = thisalign;
 }
      return c_sizeof_or_alignof_type (((((best)->common.type))->common.type), ALIGNOF_EXPR, 1);
    }
  else
    return c_sizeof_or_alignof_type (((expr)->common.type), ALIGNOF_EXPR, 1);
  return fold (build1_stat (NOP_EXPR,global_trees[TI_SIZE_TYPE],t ));
}
enum built_in_attribute
{
ATTR_NULL,
ATTR_0, ATTR_LIST_0,
ATTR_1, ATTR_LIST_1,
ATTR_2, ATTR_LIST_2,
ATTR_3, ATTR_LIST_3,
ATTR_4, ATTR_LIST_4,
ATTR_LIST_1_0,
ATTR_LIST_1_2,
ATTR_LIST_2_0,
ATTR_LIST_2_3,
ATTR_LIST_3_0,
ATTR_LIST_3_4,
ATTR_CONST,
ATTR_FORMAT,
ATTR_FORMAT_ARG,
ATTR_MALLOC,
ATTR_NONNULL,
ATTR_NORETURN,
ATTR_NOTHROW,
ATTR_PRINTF,
ATTR_ASM_FPRINTF,
ATTR_GCC_DIAG,
ATTR_GCC_CDIAG,
ATTR_GCC_CXXDIAG,
ATTR_PURE,
ATTR_SCANF,
ATTR_STRFMON,
ATTR_STRFTIME,
ATTR_NOTHROW_LIST,
ATTR_CONST_NOTHROW_LIST,
ATTR_PURE_NOTHROW_LIST,
ATTR_NORETURN_NOTHROW_LIST,
ATTR_MALLOC_NOTHROW_LIST,
ATTR_NOTHROW_NONNULL_1,
ATTR_NOTHROW_NONNULL_2,
ATTR_NOTHROW_NONNULL_3,
ATTR_NOTHROW_NONNULL_1_2,
ATTR_NOTHROW_NONNULL_1_4,
ATTR_CONST_NOTHROW_NONNULL_1,
ATTR_PURE_NOTHROW_NONNULL_1,
ATTR_PURE_NOTHROW_NONNULL_1_2,
ATTR_MALLOC_NOTHROW_NONNULL_1,
ATTR_PRINTF_1_0, ATTR_FORMAT_PRINTF_1_0,
ATTR_PRINTF_1_2, ATTR_FORMAT_PRINTF_1_2,
ATTR_PRINTF_2_0, ATTR_FORMAT_PRINTF_2_0,
ATTR_PRINTF_2_3, ATTR_FORMAT_PRINTF_2_3,
ATTR_PRINTF_3_0, ATTR_FORMAT_PRINTF_3_0,
ATTR_PRINTF_3_4, ATTR_FORMAT_PRINTF_3_4,
ATTR_SCANF_1_0, ATTR_FORMAT_SCANF_1_0,
ATTR_SCANF_1_2, ATTR_FORMAT_SCANF_1_2,
ATTR_SCANF_2_0, ATTR_FORMAT_SCANF_2_0,
ATTR_SCANF_2_3, ATTR_FORMAT_SCANF_2_3,
ATTR_STRFTIME_3_0, ATTR_FORMAT_STRFTIME_3_0,
ATTR_STRFMON_3_4, ATTR_FORMAT_STRFMON_3_4,
ATTR_FORMAT_ARG_1,
ATTR_FORMAT_ARG_2,
  ATTR_LAST
};
static tree built_in_attributes[(int) ATTR_LAST];
static void c_init_attributes (void);
void
c_common_nodes_and_builtins (void)
{
  enum builtin_type
  {
BT_VOID,
BT_INT,
BT_UNSIGNED,
BT_LONG,
BT_LONGLONG,
BT_WORD,
BT_FLOAT,
BT_INTMAX,
BT_DOUBLE,
BT_LONGDOUBLE,
BT_COMPLEX_FLOAT,
BT_COMPLEX_DOUBLE,
BT_COMPLEX_LONGDOUBLE,
BT_PTR,
BT_FILEPTR,
BT_CONST_PTR,
BT_PTRMODE,
BT_INT_PTR,
BT_FLOAT_PTR,
BT_DOUBLE_PTR,
BT_LONGDOUBLE_PTR,
BT_PID,
BT_SIZE,
BT_SSIZE,
BT_WINT,
BT_STRING1,
BT_CONST_STRING1,
BT_VALIST_REF,
BT_VALIST_ARG,
BT_PTR_CONST_STRING1,
BT_FN_VOID,
BT_FN_PTR,
BT_FN_PID,
BT_FN_UNSIGNED,
BT_FN_FLOAT,
BT_FN_DOUBLE,
BT_FN_LONGDOUBLE,
BT_FN_LONG_LONG,
BT_FN_LONGLONG_LONGLONG,
BT_FN_INTMAX_INTMAX,
BT_FN_FLOAT_FLOAT,
BT_FN_DOUBLE_DOUBLE,
BT_FN_LONGDOUBLE_LONGDOUBLE,
BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE,
BT_FN_FLOAT_COMPLEX_FLOAT,
BT_FN_DOUBLE_COMPLEX_DOUBLE,
BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE,
BT_FN_PTR_UNSIGNED,
BT_FN_PTR_SIZE,
BT_FN_INT_INT,
BT_FN_INT_LONG,
BT_FN_INT_LONGLONG,
BT_FN_INT_PTR,
BT_FN_INT_FLOAT,
BT_FN_INT_DOUBLE,
BT_FN_INT_LONGDOUBLE,
BT_FN_LONG_FLOAT,
BT_FN_LONG_DOUBLE,
BT_FN_LONG_LONGDOUBLE,
BT_FN_LONGLONG_FLOAT,
BT_FN_LONGLONG_DOUBLE,
BT_FN_LONGLONG_LONGDOUBLE,
BT_FN_VOID_PTR,
BT_FN_SIZE_CONST_STRING1,
BT_FN_INT_CONST_STRING1,
BT_FN_PTR_PTR,
BT_FN_VOID_VALIST_REF,
BT_FN_VOID_INT,
BT_FN_FLOAT_CONST_STRING1,
BT_FN_DOUBLE_CONST_STRING1,
BT_FN_LONGDOUBLE_CONST_STRING1,
BT_FN_STRING1_CONST_STRING1,
BT_FN_WORD_PTR,
BT_FN_INT_WINT,
BT_FN_WINT_WINT,
BT_FN_VOID_PTR_INT,
BT_FN_STRING1_STRING1_CONST_STRING1,
BT_FN_INT_CONST_STRING1_CONST_STRING1,
BT_FN_STRING1_CONST_STRING1_CONST_STRING1,
BT_FN_SIZE_CONST_STRING1_CONST_STRING1,
BT_FN_STRING1_CONST_STRING1_INT,
BT_FN_INT_CONST_STRING1_FILEPTR,
BT_FN_INT_INT_FILEPTR,
BT_FN_VOID_PTRMODE_PTR,
BT_FN_VOID_VALIST_REF_VALIST_ARG,
BT_FN_LONG_LONG_LONG,
BT_FN_INT_PTR_CONST_STRING1,
BT_FN_VOID_PTR_SIZE,
BT_FN_FLOAT_FLOAT_FLOAT,
BT_FN_DOUBLE_DOUBLE_DOUBLE,
BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE,
BT_FN_FLOAT_FLOAT_FLOATPTR,
BT_FN_DOUBLE_DOUBLE_DOUBLEPTR,
BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLEPTR,
BT_FN_FLOAT_FLOAT_LONGDOUBLE,
BT_FN_DOUBLE_DOUBLE_LONGDOUBLE,
BT_FN_FLOAT_FLOAT_INT,
BT_FN_DOUBLE_DOUBLE_INT,
BT_FN_LONGDOUBLE_LONGDOUBLE_INT,
BT_FN_FLOAT_FLOAT_INTPTR,
BT_FN_DOUBLE_DOUBLE_INTPTR,
BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR,
BT_FN_FLOAT_INT_FLOAT,
BT_FN_DOUBLE_INT_DOUBLE,
BT_FN_LONGDOUBLE_INT_LONGDOUBLE,
BT_FN_FLOAT_FLOAT_LONG,
BT_FN_DOUBLE_DOUBLE_LONG,
BT_FN_LONGDOUBLE_LONGDOUBLE_LONG,
BT_FN_INT_CONST_STRING1_VALIST_ARG,
BT_FN_PTR_SIZE_SIZE,
BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT_COMPLEX_FLOAT,
BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE,
BT_FN_VOID_PTR_PTR,
BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1,
BT_FN_STRING1_STRING1_CONST_STRING1_SIZE,
BT_FN_INT_CONST_STRING1_CONST_STRING1_SIZE,
BT_FN_PTR_PTR_CONST_PTR_SIZE,
BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
BT_FN_PTR_PTR_INT_SIZE,
BT_FN_VOID_PTR_INT_INT,
BT_FN_VOID_CONST_PTR_PTR_SIZE,
BT_FN_INT_STRING1_CONST_STRING1_VALIST_ARG,
BT_FN_INT_CONST_STRING1_CONST_STRING1_VALIST_ARG,
BT_FN_INT_FILEPTR_CONST_STRING1_VALIST_ARG,
BT_FN_STRING1_CONST_STRING1_CONST_STRING1_INT,
BT_FN_FLOAT_FLOAT_FLOAT_FLOAT,
BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE,
BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE,
BT_FN_FLOAT_FLOAT_FLOAT_INTPTR,
BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR,
BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR,
BT_FN_VOID_FLOAT_FLOATPTR_FLOATPTR,
BT_FN_VOID_DOUBLE_DOUBLEPTR_DOUBLEPTR,
BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR,
BT_FN_VOID_PTR_PTR_PTR,
BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1_PTR_CONST_STRING1,
BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR,
BT_FN_INT_STRING1_SIZE_CONST_STRING1_VALIST_ARG,
BT_FN_SIZE_STRING1_SIZE_CONST_STRING1_CONST_PTR,
BT_FN_VOID_VAR,
BT_FN_INT_VAR,
BT_FN_PTR_VAR,
BT_FN_VOID_VALIST_REF_VAR,
BT_FN_VOID_CONST_PTR_VAR,
BT_FN_INT_CONST_STRING1_VAR,
BT_FN_INT_FILEPTR_CONST_STRING1_VAR,
BT_FN_INT_STRING1_CONST_STRING1_VAR,
BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR,
BT_FN_INT_STRING1_SIZE_CONST_STRING1_VAR,
BT_FN_SSIZE_STRING1_SIZE_CONST_STRING1_VAR,
BT_PTR_FN_VOID_VAR,
BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
    BT_LAST
  };
  tree builtin_types[(int) BT_LAST];
  int wchar_type_size;
  tree array_domain_type;
  tree va_list_ref_type_node;
  tree va_list_arg_type_node;
  record_builtin_type (RID_INT, ((void *)0), integer_types[itk_int]);
  record_builtin_type (RID_CHAR, "char", integer_types[itk_char]);
  if ((c_language & clk_cxx))
    record_builtin_type (RID_SIGNED, ((void *)0), integer_types[itk_int]);
  record_builtin_type (RID_LONG, "long int", integer_types[itk_long]);
  record_builtin_type (RID_UNSIGNED, "unsigned int", integer_types[itk_unsigned_int]);
  record_builtin_type (RID_MAX, "long unsigned int",
         integer_types[itk_unsigned_long]);
  if ((c_language & clk_cxx))
    record_builtin_type (RID_MAX, "unsigned long", integer_types[itk_unsigned_long]);
  record_builtin_type (RID_MAX, "long long int",
         integer_types[itk_long_long]);
  record_builtin_type (RID_MAX, "long long unsigned int",
         integer_types[itk_unsigned_long_long]);
  if ((c_language & clk_cxx))
    record_builtin_type (RID_MAX, "long long unsigned",
    integer_types[itk_unsigned_long_long]);
  record_builtin_type (RID_SHORT, "short int", integer_types[itk_short]);
  record_builtin_type (RID_MAX, "short unsigned int",
         integer_types[itk_unsigned_short]);
  if ((c_language & clk_cxx))
    record_builtin_type (RID_MAX, "unsigned short",
    integer_types[itk_unsigned_short]);
  record_builtin_type (RID_MAX, "signed char", integer_types[itk_signed_char]);
  record_builtin_type (RID_MAX, "unsigned char", integer_types[itk_unsigned_char]);
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,(tree) ((void *)0),global_trees[TI_INTQI_TYPE] )
                      );
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,(tree) ((void *)0),global_trees[TI_INTHI_TYPE] )
                      );
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,(tree) ((void *)0),global_trees[TI_INTSI_TYPE] )
                      );
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,(tree) ((void *)0),global_trees[TI_INTDI_TYPE] )
                      );
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,(tree) ((void *)0),global_trees[TI_UINTQI_TYPE] )
                               );
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,(tree) ((void *)0),global_trees[TI_UINTHI_TYPE] )
                               );
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,(tree) ((void *)0),global_trees[TI_UINTSI_TYPE] )
                               );
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,(tree) ((void *)0),global_trees[TI_UINTDI_TYPE] )
                               );
  c_global_trees[CTI_WIDEST_INT_LIT_TYPE]
    = make_signed_type ((8 * 4) * 2);
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,(tree) ((void *)0),c_global_trees[CTI_WIDEST_INT_LIT_TYPE] )
                                       );
  c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
    = make_unsigned_type ((8 * 4) * 2);
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,(tree) ((void *)0),c_global_trees[CTI_WIDEST_UINT_LIT_TYPE] )
                                        );
  global_trees[TI_SIZE_TYPE] =
    ((identifier_global_value (get_identifier ("unsigned int")))->common.type);
  c_global_trees[CTI_SIGNED_SIZE_TYPE] = c_common_signed_type (global_trees[TI_SIZE_TYPE]);
  set_sizetype (global_trees[TI_SIZE_TYPE]);
  global_trees[TI_PID_TYPE] =
    ((identifier_global_value (get_identifier ("int")))->common.type);
  build_common_tree_nodes_2 (flag_short_double);
  record_builtin_type (RID_FLOAT, ((void *)0), global_trees[TI_FLOAT_TYPE]);
  record_builtin_type (RID_DOUBLE, ((void *)0), global_trees[TI_DOUBLE_TYPE]);
  record_builtin_type (RID_MAX, "long double", global_trees[TI_LONG_DOUBLE_TYPE]);
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,get_identifier ("complex int"),global_trees[TI_COMPLEX_INTEGER_TYPE] )
                                );
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,get_identifier ("complex float"),global_trees[TI_COMPLEX_FLOAT_TYPE] )
                              );
  lang_hooks.decls.pushdecl (build_decl_stat (TYPE_DECL,get_identifier ("complex double"),global_trees[TI_COMPLEX_DOUBLE_TYPE] )
                               );
  lang_hooks.decls.pushdecl
    (build_decl_stat (TYPE_DECL,get_identifier ("complex long double"),global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE] )
                                 );
  if ((c_language & clk_cxx))
    global_trees[TI_FILEPTR_TYPE] = build_type_copy (global_trees[TI_PTR_TYPE]);
  record_builtin_type (RID_VOID, ((void *)0), global_trees[TI_VOID_TYPE]);
  c_global_trees[CTI_VOID_ZERO] = build_int_2_wide ((unsigned long) (0), (long) (0));
  ((c_global_trees[CTI_VOID_ZERO])->common.type) = global_trees[TI_VOID_TYPE];
  global_trees[TI_VOID_LIST_NODE] = build_void_list_node ();
  array_domain_type = build_index_type (size_int_wide ((long) (200), SIZETYPE));
  c_global_trees[CTI_CHAR_ARRAY_TYPE]
    = build_array_type (integer_types[itk_char], array_domain_type);
  c_global_trees[CTI_INT_ARRAY_TYPE]
    = build_array_type (integer_types[itk_int], array_domain_type);
  c_global_trees[CTI_STRING1_TYPE] = build_pointer_type (integer_types[itk_char]);
  c_global_trees[CTI_CONST_STRING1_TYPE]
    = build_pointer_type (build_qualified_type
     (integer_types[itk_char], 0x1));
  c_global_trees[CTI_WCHAR_TYPE] = get_identifier ((flag_short_wchar ? "short unsigned int" : "long int"));
  c_global_trees[CTI_WCHAR_TYPE] = ((identifier_global_value (c_global_trees[CTI_WCHAR_TYPE]))->common.type);
  wchar_type_size = ((c_global_trees[CTI_WCHAR_TYPE])->type.precision);
  if ((c_language & clk_cxx))
    {
      if (((c_global_trees[CTI_WCHAR_TYPE])->common.unsigned_flag))
 c_global_trees[CTI_WCHAR_TYPE] = make_unsigned_type (wchar_type_size);
      else
 c_global_trees[CTI_WCHAR_TYPE] = make_signed_type (wchar_type_size);
      record_builtin_type (RID_WCHAR, "wchar_t", c_global_trees[CTI_WCHAR_TYPE]);
    }
  else
    {
      c_global_trees[CTI_SIGNED_WCHAR_TYPE] = c_common_signed_type (c_global_trees[CTI_WCHAR_TYPE]);
      c_global_trees[CTI_UNSIGNED_WCHAR_TYPE] = c_common_unsigned_type (c_global_trees[CTI_WCHAR_TYPE]);
    }
  c_global_trees[CTI_WCHAR_ARRAY_TYPE]
    = build_array_type (c_global_trees[CTI_WCHAR_TYPE], array_domain_type);
  c_global_trees[CTI_WINT_TYPE] =
    ((identifier_global_value (get_identifier ("unsigned int")))->common.type);
  c_global_trees[CTI_INTMAX_TYPE] =
    ((identifier_global_value (get_identifier (((32 == 64) ? "int" : (((8 * (0 ? 8 : 4)) == 64) ? "long int" : "long long int")))))->common.type);
  c_global_trees[CTI_UINTMAX_TYPE] =
    ((identifier_global_value (get_identifier (((32 == 64) ? "unsigned int" : (((8 * (0 ? 8 : 4)) == 64) ? "long unsigned int" : "long long unsigned int")))))->common.type);
  c_global_trees[CTI_DEFAULT_FUNCTION_TYPE] = build_function_type (integer_types[itk_int], (tree) ((void *)0));
  global_trees[TI_PTRDIFF_TYPE]
    = ((identifier_global_value (get_identifier ("int")))->common.type);
  c_global_trees[CTI_UNSIGNED_PTRDIFF_TYPE] = c_common_unsigned_type (global_trees[TI_PTRDIFF_TYPE]);
  lang_hooks.decls.pushdecl
    (build_decl_stat (TYPE_DECL,get_identifier ("__builtin_va_list"),global_trees[TI_VA_LIST_TYPE] )
                     );
  lang_hooks.decls.pushdecl
    (build_decl_stat (TYPE_DECL,get_identifier ("__builtin_ptrdiff_t"),global_trees[TI_PTRDIFF_TYPE] )
                     );
  lang_hooks.decls.pushdecl
    (build_decl_stat (TYPE_DECL,get_identifier ("__builtin_size_t"),sizetype_tab[(int) SIZETYPE] )
            );
  if (((enum tree_code) (global_trees[TI_VA_LIST_TYPE])->common.code) == ARRAY_TYPE)
    {
      va_list_arg_type_node = va_list_ref_type_node =
 build_pointer_type (((global_trees[TI_VA_LIST_TYPE])->common.type));
    }
  else
    {
      va_list_arg_type_node = global_trees[TI_VA_LIST_TYPE];
      va_list_ref_type_node = build_reference_type (global_trees[TI_VA_LIST_TYPE]);
    }
builtin_types[(int) BT_VOID] = global_trees[TI_VOID_TYPE];
builtin_types[(int) BT_INT] = integer_types[itk_int];
builtin_types[(int) BT_UNSIGNED] = integer_types[itk_unsigned_int];
builtin_types[(int) BT_LONG] = integer_types[itk_long];
builtin_types[(int) BT_LONGLONG] = integer_types[itk_long_long];
builtin_types[(int) BT_WORD] = (*lang_hooks.types.type_for_mode) (word_mode, 0);
builtin_types[(int) BT_FLOAT] = global_trees[TI_FLOAT_TYPE];
builtin_types[(int) BT_INTMAX] = c_global_trees[CTI_INTMAX_TYPE];
builtin_types[(int) BT_DOUBLE] = global_trees[TI_DOUBLE_TYPE];
builtin_types[(int) BT_LONGDOUBLE] = global_trees[TI_LONG_DOUBLE_TYPE];
builtin_types[(int) BT_COMPLEX_FLOAT] = global_trees[TI_COMPLEX_FLOAT_TYPE];
builtin_types[(int) BT_COMPLEX_DOUBLE] = global_trees[TI_COMPLEX_DOUBLE_TYPE];
builtin_types[(int) BT_COMPLEX_LONGDOUBLE] = global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE];
builtin_types[(int) BT_PTR] = global_trees[TI_PTR_TYPE];
builtin_types[(int) BT_FILEPTR] = global_trees[TI_FILEPTR_TYPE];
builtin_types[(int) BT_CONST_PTR] = global_trees[TI_CONST_PTR_TYPE];
builtin_types[(int) BT_PTRMODE] = (*lang_hooks.types.type_for_mode)(ptr_mode, 0);
builtin_types[(int) BT_INT_PTR] = global_trees[TI_INTEGER_PTR_TYPE];
builtin_types[(int) BT_FLOAT_PTR] = global_trees[TI_FLOAT_PTR_TYPE];
builtin_types[(int) BT_DOUBLE_PTR] = global_trees[TI_DOUBLE_PTR_TYPE];
builtin_types[(int) BT_LONGDOUBLE_PTR] = global_trees[TI_LONG_DOUBLE_PTR_TYPE];
builtin_types[(int) BT_PID] = global_trees[TI_PID_TYPE];
builtin_types[(int) BT_SIZE] = global_trees[TI_SIZE_TYPE];
builtin_types[(int) BT_SSIZE] = c_global_trees[CTI_SIGNED_SIZE_TYPE];
builtin_types[(int) BT_WINT] = c_global_trees[CTI_WINT_TYPE];
builtin_types[(int) BT_STRING1] = c_global_trees[CTI_STRING1_TYPE];
builtin_types[(int) BT_CONST_STRING1] = c_global_trees[CTI_CONST_STRING1_TYPE];
builtin_types[(int) BT_VALIST_REF] = va_list_ref_type_node;
builtin_types[(int) BT_VALIST_ARG] = va_list_arg_type_node;
builtin_types[(int) BT_PTR_CONST_STRING1] = build_pointer_type (builtin_types[(int) BT_CONST_STRING1]);
builtin_types[(int) BT_FN_VOID] = build_function_type (builtin_types[(int) BT_VOID], global_trees[TI_VOID_LIST_NODE]);
builtin_types[(int) BT_FN_PTR] = build_function_type (builtin_types[(int) BT_PTR], global_trees[TI_VOID_LIST_NODE]);
builtin_types[(int) BT_FN_PID] = build_function_type (builtin_types[(int) BT_PID], global_trees[TI_VOID_LIST_NODE]);
builtin_types[(int) BT_FN_UNSIGNED] = build_function_type (builtin_types[(int) BT_UNSIGNED], global_trees[TI_VOID_LIST_NODE]);
builtin_types[(int) BT_FN_FLOAT] = build_function_type (builtin_types[(int) BT_FLOAT], global_trees[TI_VOID_LIST_NODE]);
builtin_types[(int) BT_FN_DOUBLE] = build_function_type (builtin_types[(int) BT_DOUBLE], global_trees[TI_VOID_LIST_NODE]);
builtin_types[(int) BT_FN_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_LONGDOUBLE], global_trees[TI_VOID_LIST_NODE]);
builtin_types[(int) BT_FN_LONG_LONG] = build_function_type (builtin_types[(int) BT_LONG], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONG],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_LONGLONG_LONGLONG] = build_function_type (builtin_types[(int) BT_LONGLONG], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGLONG],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_INTMAX_INTMAX] = build_function_type (builtin_types[(int) BT_INTMAX], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INTMAX],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_FLOAT_FLOAT] = build_function_type (builtin_types[(int) BT_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_DOUBLE_DOUBLE] = build_function_type (builtin_types[(int) BT_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_LONGDOUBLE_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT] = build_function_type (builtin_types[(int) BT_COMPLEX_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_COMPLEX_FLOAT],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE] = build_function_type (builtin_types[(int) BT_COMPLEX_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_COMPLEX_DOUBLE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_COMPLEX_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_COMPLEX_LONGDOUBLE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_FLOAT_COMPLEX_FLOAT] = build_function_type (builtin_types[(int) BT_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_COMPLEX_FLOAT],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_DOUBLE_COMPLEX_DOUBLE] = build_function_type (builtin_types[(int) BT_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_COMPLEX_DOUBLE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_COMPLEX_LONGDOUBLE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_PTR_UNSIGNED] = build_function_type (builtin_types[(int) BT_PTR], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_UNSIGNED],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_PTR_SIZE] = build_function_type (builtin_types[(int) BT_PTR], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_INT_INT] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_INT_LONG] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONG],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_INT_LONGLONG] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGLONG],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_INT_PTR] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_INT_FLOAT] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_INT_DOUBLE] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_INT_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_LONG_FLOAT] = build_function_type (builtin_types[(int) BT_LONG], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_LONG_DOUBLE] = build_function_type (builtin_types[(int) BT_LONG], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_LONG_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_LONG], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_LONGLONG_FLOAT] = build_function_type (builtin_types[(int) BT_LONGLONG], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_LONGLONG_DOUBLE] = build_function_type (builtin_types[(int) BT_LONGLONG], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_LONGLONG_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_LONGLONG], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_VOID_PTR] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_SIZE_CONST_STRING1] = build_function_type (builtin_types[(int) BT_SIZE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_INT_CONST_STRING1] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_PTR_PTR] = build_function_type (builtin_types[(int) BT_PTR], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_VOID_VALIST_REF] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_VALIST_REF],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_VOID_INT] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_FLOAT_CONST_STRING1] = build_function_type (builtin_types[(int) BT_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_DOUBLE_CONST_STRING1] = build_function_type (builtin_types[(int) BT_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_LONGDOUBLE_CONST_STRING1] = build_function_type (builtin_types[(int) BT_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_STRING1_CONST_STRING1] = build_function_type (builtin_types[(int) BT_STRING1], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_WORD_PTR] = build_function_type (builtin_types[(int) BT_WORD], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_INT_WINT] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_WINT],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_WINT_WINT] = build_function_type (builtin_types[(int) BT_WINT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_WINT],global_trees[TI_VOID_LIST_NODE] ));
builtin_types[(int) BT_FN_VOID_PTR_INT] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_STRING1_STRING1_CONST_STRING1] = build_function_type (builtin_types[(int) BT_STRING1], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_INT_CONST_STRING1_CONST_STRING1] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_STRING1_CONST_STRING1_CONST_STRING1] = build_function_type (builtin_types[(int) BT_STRING1], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_SIZE_CONST_STRING1_CONST_STRING1] = build_function_type (builtin_types[(int) BT_SIZE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_STRING1_CONST_STRING1_INT] = build_function_type (builtin_types[(int) BT_STRING1], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_INT_CONST_STRING1_FILEPTR] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FILEPTR],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_INT_INT_FILEPTR] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FILEPTR],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_VOID_PTRMODE_PTR] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTRMODE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_VOID_VALIST_REF_VALIST_ARG] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_VALIST_REF],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_VALIST_ARG],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_LONG_LONG_LONG] = build_function_type (builtin_types[(int) BT_LONG], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONG],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONG],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_INT_PTR_CONST_STRING1] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_VOID_PTR_SIZE] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_FLOAT_FLOAT_FLOAT] = build_function_type (builtin_types[(int) BT_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_DOUBLE_DOUBLE_DOUBLE] = build_function_type (builtin_types[(int) BT_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_FLOAT_FLOAT_FLOATPTR] = build_function_type (builtin_types[(int) BT_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT_PTR],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_DOUBLE_DOUBLE_DOUBLEPTR] = build_function_type (builtin_types[(int) BT_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE_PTR],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLEPTR] = build_function_type (builtin_types[(int) BT_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE_PTR],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_FLOAT_FLOAT_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_DOUBLE_DOUBLE_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_FLOAT_FLOAT_INT] = build_function_type (builtin_types[(int) BT_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_DOUBLE_DOUBLE_INT] = build_function_type (builtin_types[(int) BT_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_LONGDOUBLE_LONGDOUBLE_INT] = build_function_type (builtin_types[(int) BT_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_FLOAT_FLOAT_INTPTR] = build_function_type (builtin_types[(int) BT_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT_PTR],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_DOUBLE_DOUBLE_INTPTR] = build_function_type (builtin_types[(int) BT_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT_PTR],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR] = build_function_type (builtin_types[(int) BT_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT_PTR],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_FLOAT_INT_FLOAT] = build_function_type (builtin_types[(int) BT_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_DOUBLE_INT_DOUBLE] = build_function_type (builtin_types[(int) BT_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_LONGDOUBLE_INT_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_FLOAT_FLOAT_LONG] = build_function_type (builtin_types[(int) BT_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONG],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_DOUBLE_DOUBLE_LONG] = build_function_type (builtin_types[(int) BT_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONG],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_LONGDOUBLE_LONGDOUBLE_LONG] = build_function_type (builtin_types[(int) BT_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONG],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_INT_CONST_STRING1_VALIST_ARG] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_VALIST_ARG],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_PTR_SIZE_SIZE] = build_function_type (builtin_types[(int) BT_PTR], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT_COMPLEX_FLOAT] = build_function_type (builtin_types[(int) BT_COMPLEX_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_COMPLEX_FLOAT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_COMPLEX_FLOAT],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE_COMPLEX_DOUBLE] = build_function_type (builtin_types[(int) BT_COMPLEX_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_COMPLEX_DOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_COMPLEX_DOUBLE],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_COMPLEX_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_COMPLEX_LONGDOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_COMPLEX_LONGDOUBLE],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_VOID_PTR_PTR] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ) ));
builtin_types[(int) BT_FN_STRING1_STRING1_CONST_STRING1_SIZE] = build_function_type (builtin_types[(int) BT_STRING1], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_INT_CONST_STRING1_CONST_STRING1_SIZE] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_PTR_PTR_CONST_PTR_SIZE] = build_function_type (builtin_types[(int) BT_PTR], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_INT_CONST_PTR_CONST_PTR_SIZE] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_PTR_PTR_INT_SIZE] = build_function_type (builtin_types[(int) BT_PTR], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_VOID_PTR_INT_INT] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_VOID_CONST_PTR_PTR_SIZE] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_INT_STRING1_CONST_STRING1_VALIST_ARG] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_VALIST_ARG],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_INT_CONST_STRING1_CONST_STRING1_VALIST_ARG] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_VALIST_ARG],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_INT_FILEPTR_CONST_STRING1_VALIST_ARG] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FILEPTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_VALIST_ARG],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_STRING1_CONST_STRING1_CONST_STRING1_INT] = build_function_type (builtin_types[(int) BT_STRING1], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_FLOAT_FLOAT_FLOAT_FLOAT] = build_function_type (builtin_types[(int) BT_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE] = build_function_type (builtin_types[(int) BT_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE] = build_function_type (builtin_types[(int) BT_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_FLOAT_FLOAT_FLOAT_INTPTR] = build_function_type (builtin_types[(int) BT_FLOAT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT_PTR],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR] = build_function_type (builtin_types[(int) BT_DOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT_PTR],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR] = build_function_type (builtin_types[(int) BT_LONGDOUBLE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_INT_PTR],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_VOID_FLOAT_FLOATPTR_FLOATPTR] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FLOAT_PTR],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_VOID_DOUBLE_DOUBLEPTR_DOUBLEPTR] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_DOUBLE_PTR],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_LONGDOUBLE_PTR],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_VOID_PTR_PTR_PTR] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1_PTR_CONST_STRING1] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR_CONST_STRING1],global_trees[TI_VOID_LIST_NODE] ) ) ));
builtin_types[(int) BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR] = build_function_type (builtin_types[(int) BT_SIZE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FILEPTR],global_trees[TI_VOID_LIST_NODE] ) ) ) ));
builtin_types[(int) BT_FN_INT_STRING1_SIZE_CONST_STRING1_VALIST_ARG] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_VALIST_ARG],global_trees[TI_VOID_LIST_NODE] ) ) ) ));
builtin_types[(int) BT_FN_SIZE_STRING1_SIZE_CONST_STRING1_CONST_PTR] = build_function_type (builtin_types[(int) BT_SIZE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_PTR],global_trees[TI_VOID_LIST_NODE] ) ) ) ));
builtin_types[(int) BT_FN_VOID_VAR] = build_function_type (builtin_types[(int) BT_VOID], (tree) ((void *)0));
builtin_types[(int) BT_FN_INT_VAR] = build_function_type (builtin_types[(int) BT_INT], (tree) ((void *)0));
builtin_types[(int) BT_FN_PTR_VAR] = build_function_type (builtin_types[(int) BT_PTR], (tree) ((void *)0));
builtin_types[(int) BT_FN_VOID_VALIST_REF_VAR] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_VALIST_REF],(tree) ((void *)0) ));
builtin_types[(int) BT_FN_VOID_CONST_PTR_VAR] = build_function_type (builtin_types[(int) BT_VOID], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_PTR],(tree) ((void *)0) ));
builtin_types[(int) BT_FN_INT_CONST_STRING1_VAR] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],(tree) ((void *)0) ));
builtin_types[(int) BT_FN_INT_FILEPTR_CONST_STRING1_VAR] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_FILEPTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],(tree) ((void *)0) ) ));
builtin_types[(int) BT_FN_INT_STRING1_CONST_STRING1_VAR] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],(tree) ((void *)0) ) ));
builtin_types[(int) BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],(tree) ((void *)0) ) ));
builtin_types[(int) BT_FN_INT_STRING1_SIZE_CONST_STRING1_VAR] = build_function_type (builtin_types[(int) BT_INT], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],(tree) ((void *)0) ) ) ));
builtin_types[(int) BT_FN_SSIZE_STRING1_SIZE_CONST_STRING1_VAR] = build_function_type (builtin_types[(int) BT_SSIZE], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_STRING1],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_CONST_STRING1],(tree) ((void *)0) ) ) ));
builtin_types[(int) BT_PTR_FN_VOID_VAR] = build_pointer_type (builtin_types[(int) BT_FN_VOID_VAR]);
builtin_types[(int) BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE] = build_function_type (builtin_types[(int) BT_PTR], tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR_FN_VOID_VAR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_PTR],tree_cons_stat ((tree) ((void *)0),builtin_types[(int) BT_SIZE],global_trees[TI_VOID_LIST_NODE] ) ) ));
  c_init_attributes ();
if ("__builtin_acos") { tree decl; if (strncmp ("__builtin_acos", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735045, "?"); if (!1) decl = builtin_function ("__builtin_acos", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ACOS, BUILT_IN_NORMAL, (1 ? ("__builtin_acos" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_acos", "__builtin_acos" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ACOS, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ACOS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ACOS] = decl; }
if ("__builtin_acosf") { tree decl; if (strncmp ("__builtin_acosf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735046, "?"); if (!1) decl = builtin_function ("__builtin_acosf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ACOSF, BUILT_IN_NORMAL, (1 ? ("__builtin_acosf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_acosf", "__builtin_acosf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ACOSF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ACOSF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ACOSF] = decl; }
if ("__builtin_acosh") { tree decl; if (strncmp ("__builtin_acosh", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735047, "?"); if (!1) decl = builtin_function ("__builtin_acosh", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ACOSH, BUILT_IN_NORMAL, (1 ? ("__builtin_acosh" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_acosh", "__builtin_acosh" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ACOSH, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ACOSH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ACOSH] = decl; }
if ("__builtin_acoshf") { tree decl; if (strncmp ("__builtin_acoshf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735048, "?"); if (!1) decl = builtin_function ("__builtin_acoshf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ACOSHF, BUILT_IN_NORMAL, (1 ? ("__builtin_acoshf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_acoshf", "__builtin_acoshf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ACOSHF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ACOSHF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ACOSHF] = decl; }
if ("__builtin_acoshl") { tree decl; if (strncmp ("__builtin_acoshl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735049, "?"); if (!1) decl = builtin_function ("__builtin_acoshl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ACOSHL, BUILT_IN_NORMAL, (1 ? ("__builtin_acoshl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_acoshl", "__builtin_acoshl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ACOSHL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ACOSHL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ACOSHL] = decl; }
if ("__builtin_acosl") { tree decl; if (strncmp ("__builtin_acosl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735050, "?"); if (!1) decl = builtin_function ("__builtin_acosl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ACOSL, BUILT_IN_NORMAL, (1 ? ("__builtin_acosl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_acosl", "__builtin_acosl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ACOSL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ACOSL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ACOSL] = decl; }
if ("__builtin_asin") { tree decl; if (strncmp ("__builtin_asin", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735051, "?"); if (!1) decl = builtin_function ("__builtin_asin", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ASIN, BUILT_IN_NORMAL, (1 ? ("__builtin_asin" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_asin", "__builtin_asin" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ASIN, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ASIN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ASIN] = decl; }
if ("__builtin_asinf") { tree decl; if (strncmp ("__builtin_asinf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735052, "?"); if (!1) decl = builtin_function ("__builtin_asinf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ASINF, BUILT_IN_NORMAL, (1 ? ("__builtin_asinf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_asinf", "__builtin_asinf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ASINF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ASINF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ASINF] = decl; }
if ("__builtin_asinh") { tree decl; if (strncmp ("__builtin_asinh", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735053, "?"); if (!1) decl = builtin_function ("__builtin_asinh", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ASINH, BUILT_IN_NORMAL, (1 ? ("__builtin_asinh" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_asinh", "__builtin_asinh" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ASINH, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_ASINH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ASINH] = decl; }
if ("__builtin_asinhf") { tree decl; if (strncmp ("__builtin_asinhf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735054, "?"); if (!1) decl = builtin_function ("__builtin_asinhf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ASINHF, BUILT_IN_NORMAL, (1 ? ("__builtin_asinhf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_asinhf", "__builtin_asinhf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ASINHF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_ASINHF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ASINHF] = decl; }
if ("__builtin_asinhl") { tree decl; if (strncmp ("__builtin_asinhl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735055, "?"); if (!1) decl = builtin_function ("__builtin_asinhl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ASINHL, BUILT_IN_NORMAL, (1 ? ("__builtin_asinhl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_asinhl", "__builtin_asinhl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ASINHL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_ASINHL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ASINHL] = decl; }
if ("__builtin_asinl") { tree decl; if (strncmp ("__builtin_asinl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735056, "?"); if (!1) decl = builtin_function ("__builtin_asinl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ASINL, BUILT_IN_NORMAL, (1 ? ("__builtin_asinl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_asinl", "__builtin_asinl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ASINL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ASINL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ASINL] = decl; }
if ("__builtin_atan") { tree decl; if (strncmp ("__builtin_atan", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735057, "?"); if (!1) decl = builtin_function ("__builtin_atan", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ATAN, BUILT_IN_NORMAL, (1 ? ("__builtin_atan" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_atan", "__builtin_atan" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ATAN, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_ATAN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ATAN] = decl; }
if ("__builtin_atan2") { tree decl; if (strncmp ("__builtin_atan2", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735058, "?"); if (!1) decl = builtin_function ("__builtin_atan2", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_ATAN2, BUILT_IN_NORMAL, (1 ? ("__builtin_atan2" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_atan2", "__builtin_atan2" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_ATAN2, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ATAN2] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ATAN2] = decl; }
if ("__builtin_atan2f") { tree decl; if (strncmp ("__builtin_atan2f", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735059, "?"); if (!1) decl = builtin_function ("__builtin_atan2f", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_ATAN2F, BUILT_IN_NORMAL, (1 ? ("__builtin_atan2f" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_atan2f", "__builtin_atan2f" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_ATAN2F, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ATAN2F] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ATAN2F] = decl; }
if ("__builtin_atan2l") { tree decl; if (strncmp ("__builtin_atan2l", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735060, "?"); if (!1) decl = builtin_function ("__builtin_atan2l", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ATAN2L, BUILT_IN_NORMAL, (1 ? ("__builtin_atan2l" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_atan2l", "__builtin_atan2l" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ATAN2L, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ATAN2L] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ATAN2L] = decl; }
if ("__builtin_atanf") { tree decl; if (strncmp ("__builtin_atanf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735061, "?"); if (!1) decl = builtin_function ("__builtin_atanf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ATANF, BUILT_IN_NORMAL, (1 ? ("__builtin_atanf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_atanf", "__builtin_atanf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ATANF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_ATANF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ATANF] = decl; }
if ("__builtin_atanh") { tree decl; if (strncmp ("__builtin_atanh", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735062, "?"); if (!1) decl = builtin_function ("__builtin_atanh", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ATANH, BUILT_IN_NORMAL, (1 ? ("__builtin_atanh" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_atanh", "__builtin_atanh" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ATANH, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ATANH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ATANH] = decl; }
if ("__builtin_atanhf") { tree decl; if (strncmp ("__builtin_atanhf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735063, "?"); if (!1) decl = builtin_function ("__builtin_atanhf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ATANHF, BUILT_IN_NORMAL, (1 ? ("__builtin_atanhf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_atanhf", "__builtin_atanhf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ATANHF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ATANHF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ATANHF] = decl; }
if ("__builtin_atanhl") { tree decl; if (strncmp ("__builtin_atanhl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735064, "?"); if (!1) decl = builtin_function ("__builtin_atanhl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ATANHL, BUILT_IN_NORMAL, (1 ? ("__builtin_atanhl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_atanhl", "__builtin_atanhl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ATANHL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ATANHL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ATANHL] = decl; }
if ("__builtin_atanl") { tree decl; if (strncmp ("__builtin_atanl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735065, "?"); if (!1) decl = builtin_function ("__builtin_atanl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ATANL, BUILT_IN_NORMAL, (1 ? ("__builtin_atanl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_atanl", "__builtin_atanl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ATANL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_ATANL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ATANL] = decl; }
if ("__builtin_cbrt") { tree decl; if (strncmp ("__builtin_cbrt", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735066, "?"); if (!1) decl = builtin_function ("__builtin_cbrt", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_CBRT, BUILT_IN_NORMAL, (1 ? ("__builtin_cbrt" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cbrt", "__builtin_cbrt" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_CBRT, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CBRT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CBRT] = decl; }
if ("__builtin_cbrtf") { tree decl; if (strncmp ("__builtin_cbrtf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735067, "?"); if (!1) decl = builtin_function ("__builtin_cbrtf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_CBRTF, BUILT_IN_NORMAL, (1 ? ("__builtin_cbrtf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cbrtf", "__builtin_cbrtf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_CBRTF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CBRTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CBRTF] = decl; }
if ("__builtin_cbrtl") { tree decl; if (strncmp ("__builtin_cbrtl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735068, "?"); if (!1) decl = builtin_function ("__builtin_cbrtl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_CBRTL, BUILT_IN_NORMAL, (1 ? ("__builtin_cbrtl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cbrtl", "__builtin_cbrtl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_CBRTL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CBRTL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CBRTL] = decl; }
if ("__builtin_ceil") { tree decl; if (strncmp ("__builtin_ceil", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735069, "?"); if (!1) decl = builtin_function ("__builtin_ceil", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_CEIL, BUILT_IN_NORMAL, (1 ? ("__builtin_ceil" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_ceil", "__builtin_ceil" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_CEIL, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CEIL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CEIL] = decl; }
if ("__builtin_ceilf") { tree decl; if (strncmp ("__builtin_ceilf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735070, "?"); if (!1) decl = builtin_function ("__builtin_ceilf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_CEILF, BUILT_IN_NORMAL, (1 ? ("__builtin_ceilf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_ceilf", "__builtin_ceilf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_CEILF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CEILF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CEILF] = decl; }
if ("__builtin_ceill") { tree decl; if (strncmp ("__builtin_ceill", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735071, "?"); if (!1) decl = builtin_function ("__builtin_ceill", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_CEILL, BUILT_IN_NORMAL, (1 ? ("__builtin_ceill" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_ceill", "__builtin_ceill" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_CEILL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CEILL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CEILL] = decl; }
if ("__builtin_copysign") { tree decl; if (strncmp ("__builtin_copysign", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735072, "?"); if (!1) decl = builtin_function ("__builtin_copysign", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_COPYSIGN, BUILT_IN_NORMAL, (1 ? ("__builtin_copysign" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_copysign", "__builtin_copysign" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_COPYSIGN, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_COPYSIGN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_COPYSIGN] = decl; }
if ("__builtin_copysignf") { tree decl; if (strncmp ("__builtin_copysignf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735073, "?"); if (!1) decl = builtin_function ("__builtin_copysignf", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_COPYSIGNF, BUILT_IN_NORMAL, (1 ? ("__builtin_copysignf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_copysignf", "__builtin_copysignf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_COPYSIGNF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_COPYSIGNF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_COPYSIGNF] = decl; }
if ("__builtin_copysignl") { tree decl; if (strncmp ("__builtin_copysignl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735074, "?"); if (!1) decl = builtin_function ("__builtin_copysignl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_COPYSIGNL, BUILT_IN_NORMAL, (1 ? ("__builtin_copysignl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_copysignl", "__builtin_copysignl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_COPYSIGNL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_COPYSIGNL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_COPYSIGNL] = decl; }
if ("__builtin_cos") { tree decl; if (strncmp ("__builtin_cos", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735075, "?"); if (!1) decl = builtin_function ("__builtin_cos", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_COS, BUILT_IN_NORMAL, (1 ? ("__builtin_cos" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cos", "__builtin_cos" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_COS, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_COS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_COS] = decl; }
if ("__builtin_cosf") { tree decl; if (strncmp ("__builtin_cosf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735076, "?"); if (!1) decl = builtin_function ("__builtin_cosf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_COSF, BUILT_IN_NORMAL, (1 ? ("__builtin_cosf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cosf", "__builtin_cosf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_COSF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_COSF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_COSF] = decl; }
if ("__builtin_cosh") { tree decl; if (strncmp ("__builtin_cosh", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735077, "?"); if (!1) decl = builtin_function ("__builtin_cosh", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_COSH, BUILT_IN_NORMAL, (1 ? ("__builtin_cosh" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_cosh", "__builtin_cosh" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_COSH, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_COSH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_COSH] = decl; }
if ("__builtin_coshf") { tree decl; if (strncmp ("__builtin_coshf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735078, "?"); if (!1) decl = builtin_function ("__builtin_coshf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_COSHF, BUILT_IN_NORMAL, (1 ? ("__builtin_coshf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_coshf", "__builtin_coshf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_COSHF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_COSHF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_COSHF] = decl; }
if ("__builtin_coshl") { tree decl; if (strncmp ("__builtin_coshl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735079, "?"); if (!1) decl = builtin_function ("__builtin_coshl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_COSHL, BUILT_IN_NORMAL, (1 ? ("__builtin_coshl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_coshl", "__builtin_coshl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_COSHL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_COSHL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_COSHL] = decl; }
if ("__builtin_cosl") { tree decl; if (strncmp ("__builtin_cosl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735080, "?"); if (!1) decl = builtin_function ("__builtin_cosl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_COSL, BUILT_IN_NORMAL, (1 ? ("__builtin_cosl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cosl", "__builtin_cosl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_COSL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_COSL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_COSL] = decl; }
if ("__builtin_drem") { tree decl; if (strncmp ("__builtin_drem", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735081, "?"); if (!1) decl = builtin_function ("__builtin_drem", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_DREM, BUILT_IN_NORMAL, (1 ? ("__builtin_drem" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_drem", "__builtin_drem" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_DREM, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_DREM] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_DREM] = decl; }
if ("__builtin_dremf") { tree decl; if (strncmp ("__builtin_dremf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735082, "?"); if (!1) decl = builtin_function ("__builtin_dremf", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_DREMF, BUILT_IN_NORMAL, (1 ? ("__builtin_dremf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_dremf", "__builtin_dremf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_DREMF, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_DREMF] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_DREMF] = decl; }
if ("__builtin_dreml") { tree decl; if (strncmp ("__builtin_dreml", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735083, "?"); if (!1) decl = builtin_function ("__builtin_dreml", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_DREML, BUILT_IN_NORMAL, (1 ? ("__builtin_dreml" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_dreml", "__builtin_dreml" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_DREML, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_DREML] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_DREML] = decl; }
if ("__builtin_erf") { tree decl; if (strncmp ("__builtin_erf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735084, "?"); if (!1) decl = builtin_function ("__builtin_erf", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ERF, BUILT_IN_NORMAL, (1 ? ("__builtin_erf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_erf", "__builtin_erf" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ERF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_ERF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ERF] = decl; }
if ("__builtin_erfc") { tree decl; if (strncmp ("__builtin_erfc", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735085, "?"); if (!1) decl = builtin_function ("__builtin_erfc", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ERFC, BUILT_IN_NORMAL, (1 ? ("__builtin_erfc" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_erfc", "__builtin_erfc" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ERFC, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ERFC] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ERFC] = decl; }
if ("__builtin_erfcf") { tree decl; if (strncmp ("__builtin_erfcf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735086, "?"); if (!1) decl = builtin_function ("__builtin_erfcf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ERFCF, BUILT_IN_NORMAL, (1 ? ("__builtin_erfcf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_erfcf", "__builtin_erfcf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ERFCF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ERFCF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ERFCF] = decl; }
if ("__builtin_erfcl") { tree decl; if (strncmp ("__builtin_erfcl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735087, "?"); if (!1) decl = builtin_function ("__builtin_erfcl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ERFCL, BUILT_IN_NORMAL, (1 ? ("__builtin_erfcl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_erfcl", "__builtin_erfcl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ERFCL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ERFCL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ERFCL] = decl; }
if ("__builtin_erff") { tree decl; if (strncmp ("__builtin_erff", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735088, "?"); if (!1) decl = builtin_function ("__builtin_erff", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ERFF, BUILT_IN_NORMAL, (1 ? ("__builtin_erff" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_erff", "__builtin_erff" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ERFF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_ERFF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ERFF] = decl; }
if ("__builtin_erfl") { tree decl; if (strncmp ("__builtin_erfl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735089, "?"); if (!1) decl = builtin_function ("__builtin_erfl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ERFL, BUILT_IN_NORMAL, (1 ? ("__builtin_erfl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_erfl", "__builtin_erfl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ERFL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_ERFL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ERFL] = decl; }
if ("__builtin_exp") { tree decl; if (strncmp ("__builtin_exp", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735090, "?"); if (!1) decl = builtin_function ("__builtin_exp", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_EXP, BUILT_IN_NORMAL, (1 ? ("__builtin_exp" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_exp", "__builtin_exp" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_EXP, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_EXP] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXP] = decl; }
if ("__builtin_exp10") { tree decl; if (strncmp ("__builtin_exp10", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735091, "?"); if (!1) decl = builtin_function ("__builtin_exp10", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_EXP10, BUILT_IN_NORMAL, (1 ? ("__builtin_exp10" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_exp10", "__builtin_exp10" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_EXP10, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_EXP10] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_EXP10] = decl; }
if ("__builtin_exp10f") { tree decl; if (strncmp ("__builtin_exp10f", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735092, "?"); if (!1) decl = builtin_function ("__builtin_exp10f", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_EXP10F, BUILT_IN_NORMAL, (1 ? ("__builtin_exp10f" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_exp10f", "__builtin_exp10f" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_EXP10F, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_EXP10F] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_EXP10F] = decl; }
if ("__builtin_exp10l") { tree decl; if (strncmp ("__builtin_exp10l", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735093, "?"); if (!1) decl = builtin_function ("__builtin_exp10l", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_EXP10L, BUILT_IN_NORMAL, (1 ? ("__builtin_exp10l" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_exp10l", "__builtin_exp10l" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_EXP10L, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_EXP10L] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_EXP10L] = decl; }
if ("__builtin_exp2") { tree decl; if (strncmp ("__builtin_exp2", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735094, "?"); if (!1) decl = builtin_function ("__builtin_exp2", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_EXP2, BUILT_IN_NORMAL, (1 ? ("__builtin_exp2" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_exp2", "__builtin_exp2" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_EXP2, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_EXP2] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXP2] = decl; }
if ("__builtin_exp2f") { tree decl; if (strncmp ("__builtin_exp2f", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735095, "?"); if (!1) decl = builtin_function ("__builtin_exp2f", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_EXP2F, BUILT_IN_NORMAL, (1 ? ("__builtin_exp2f" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_exp2f", "__builtin_exp2f" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_EXP2F, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_EXP2F] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXP2F] = decl; }
if ("__builtin_exp2l") { tree decl; if (strncmp ("__builtin_exp2l", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735096, "?"); if (!1) decl = builtin_function ("__builtin_exp2l", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_EXP2L, BUILT_IN_NORMAL, (1 ? ("__builtin_exp2l" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_exp2l", "__builtin_exp2l" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_EXP2L, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_EXP2L] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXP2L] = decl; }
if ("__builtin_expf") { tree decl; if (strncmp ("__builtin_expf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735097, "?"); if (!1) decl = builtin_function ("__builtin_expf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_EXPF, BUILT_IN_NORMAL, (1 ? ("__builtin_expf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_expf", "__builtin_expf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_EXPF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_EXPF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXPF] = decl; }
if ("__builtin_expl") { tree decl; if (strncmp ("__builtin_expl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735098, "?"); if (!1) decl = builtin_function ("__builtin_expl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_EXPL, BUILT_IN_NORMAL, (1 ? ("__builtin_expl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_expl", "__builtin_expl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_EXPL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_EXPL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXPL] = decl; }
if ("__builtin_expm1") { tree decl; if (strncmp ("__builtin_expm1", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735099, "?"); if (!1) decl = builtin_function ("__builtin_expm1", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_EXPM1, BUILT_IN_NORMAL, (1 ? ("__builtin_expm1" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_expm1", "__builtin_expm1" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_EXPM1, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_EXPM1] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXPM1] = decl; }
if ("__builtin_expm1f") { tree decl; if (strncmp ("__builtin_expm1f", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735100, "?"); if (!1) decl = builtin_function ("__builtin_expm1f", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_EXPM1F, BUILT_IN_NORMAL, (1 ? ("__builtin_expm1f" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_expm1f", "__builtin_expm1f" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_EXPM1F, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_EXPM1F] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXPM1F] = decl; }
if ("__builtin_expm1l") { tree decl; if (strncmp ("__builtin_expm1l", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735101, "?"); if (!1) decl = builtin_function ("__builtin_expm1l", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_EXPM1L, BUILT_IN_NORMAL, (1 ? ("__builtin_expm1l" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_expm1l", "__builtin_expm1l" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_EXPM1L, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_EXPM1L] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXPM1L] = decl; }
if ("__builtin_fabs") { tree decl; if (strncmp ("__builtin_fabs", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735102, "?"); if (!1) decl = builtin_function ("__builtin_fabs", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_FABS, BUILT_IN_NORMAL, (1 ? ("__builtin_fabs" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_fabs", "__builtin_fabs" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_FABS, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FABS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FABS] = decl; }
if ("__builtin_fabsf") { tree decl; if (strncmp ("__builtin_fabsf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735103, "?"); if (!1) decl = builtin_function ("__builtin_fabsf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_FABSF, BUILT_IN_NORMAL, (1 ? ("__builtin_fabsf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_fabsf", "__builtin_fabsf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_FABSF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FABSF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FABSF] = decl; }
if ("__builtin_fabsl") { tree decl; if (strncmp ("__builtin_fabsl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735104, "?"); if (!1) decl = builtin_function ("__builtin_fabsl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FABSL, BUILT_IN_NORMAL, (1 ? ("__builtin_fabsl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_fabsl", "__builtin_fabsl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FABSL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FABSL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FABSL] = decl; }
if ("__builtin_fdim") { tree decl; if (strncmp ("__builtin_fdim", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735105, "?"); if (!1) decl = builtin_function ("__builtin_fdim", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_FDIM, BUILT_IN_NORMAL, (1 ? ("__builtin_fdim" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_fdim", "__builtin_fdim" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_FDIM, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_FDIM] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FDIM] = decl; }
if ("__builtin_fdimf") { tree decl; if (strncmp ("__builtin_fdimf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735106, "?"); if (!1) decl = builtin_function ("__builtin_fdimf", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_FDIMF, BUILT_IN_NORMAL, (1 ? ("__builtin_fdimf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_fdimf", "__builtin_fdimf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_FDIMF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_FDIMF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FDIMF] = decl; }
if ("__builtin_fdiml") { tree decl; if (strncmp ("__builtin_fdiml", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735107, "?"); if (!1) decl = builtin_function ("__builtin_fdiml", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FDIML, BUILT_IN_NORMAL, (1 ? ("__builtin_fdiml" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_fdiml", "__builtin_fdiml" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FDIML, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_FDIML] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FDIML] = decl; }
if ("__builtin_floor") { tree decl; if (strncmp ("__builtin_floor", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735108, "?"); if (!1) decl = builtin_function ("__builtin_floor", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_FLOOR, BUILT_IN_NORMAL, (1 ? ("__builtin_floor" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_floor", "__builtin_floor" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_FLOOR, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FLOOR] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FLOOR] = decl; }
if ("__builtin_floorf") { tree decl; if (strncmp ("__builtin_floorf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735109, "?"); if (!1) decl = builtin_function ("__builtin_floorf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_FLOORF, BUILT_IN_NORMAL, (1 ? ("__builtin_floorf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_floorf", "__builtin_floorf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_FLOORF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FLOORF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FLOORF] = decl; }
if ("__builtin_floorl") { tree decl; if (strncmp ("__builtin_floorl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735110, "?"); if (!1) decl = builtin_function ("__builtin_floorl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FLOORL, BUILT_IN_NORMAL, (1 ? ("__builtin_floorl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_floorl", "__builtin_floorl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FLOORL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FLOORL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FLOORL] = decl; }
if ("__builtin_fma") { tree decl; if (strncmp ("__builtin_fma", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735111, "?"); if (!1) decl = builtin_function ("__builtin_fma", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_FMA, BUILT_IN_NORMAL, (1 ? ("__builtin_fma" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_fma", "__builtin_fma" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_FMA, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_FMA] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FMA] = decl; }
if ("__builtin_fmaf") { tree decl; if (strncmp ("__builtin_fmaf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735112, "?"); if (!1) decl = builtin_function ("__builtin_fmaf", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT_FLOAT], BUILT_IN_FMAF, BUILT_IN_NORMAL, (1 ? ("__builtin_fmaf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_fmaf", "__builtin_fmaf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT_FLOAT], BUILT_IN_FMAF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_FMAF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FMAF] = decl; }
if ("__builtin_fmal") { tree decl; if (strncmp ("__builtin_fmal", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735113, "?"); if (!1) decl = builtin_function ("__builtin_fmal", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FMAL, BUILT_IN_NORMAL, (1 ? ("__builtin_fmal" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_fmal", "__builtin_fmal" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FMAL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_FMAL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FMAL] = decl; }
if ("__builtin_fmax") { tree decl; if (strncmp ("__builtin_fmax", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735114, "?"); if (!1) decl = builtin_function ("__builtin_fmax", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_FMAX, BUILT_IN_NORMAL, (1 ? ("__builtin_fmax" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_fmax", "__builtin_fmax" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_FMAX, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FMAX] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FMAX] = decl; }
if ("__builtin_fmaxf") { tree decl; if (strncmp ("__builtin_fmaxf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735115, "?"); if (!1) decl = builtin_function ("__builtin_fmaxf", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_FMAXF, BUILT_IN_NORMAL, (1 ? ("__builtin_fmaxf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_fmaxf", "__builtin_fmaxf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_FMAXF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FMAXF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FMAXF] = decl; }
if ("__builtin_fmaxl") { tree decl; if (strncmp ("__builtin_fmaxl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735116, "?"); if (!1) decl = builtin_function ("__builtin_fmaxl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FMAXL, BUILT_IN_NORMAL, (1 ? ("__builtin_fmaxl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_fmaxl", "__builtin_fmaxl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FMAXL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FMAXL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FMAXL] = decl; }
if ("__builtin_fmin") { tree decl; if (strncmp ("__builtin_fmin", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735117, "?"); if (!1) decl = builtin_function ("__builtin_fmin", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_FMIN, BUILT_IN_NORMAL, (1 ? ("__builtin_fmin" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_fmin", "__builtin_fmin" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_FMIN, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FMIN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FMIN] = decl; }
if ("__builtin_fminf") { tree decl; if (strncmp ("__builtin_fminf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735118, "?"); if (!1) decl = builtin_function ("__builtin_fminf", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_FMINF, BUILT_IN_NORMAL, (1 ? ("__builtin_fminf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_fminf", "__builtin_fminf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_FMINF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FMINF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FMINF] = decl; }
if ("__builtin_fminl") { tree decl; if (strncmp ("__builtin_fminl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735119, "?"); if (!1) decl = builtin_function ("__builtin_fminl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FMINL, BUILT_IN_NORMAL, (1 ? ("__builtin_fminl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_fminl", "__builtin_fminl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FMINL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FMINL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FMINL] = decl; }
if ("__builtin_fmod") { tree decl; if (strncmp ("__builtin_fmod", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735120, "?"); if (!1) decl = builtin_function ("__builtin_fmod", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_FMOD, BUILT_IN_NORMAL, (1 ? ("__builtin_fmod" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_fmod", "__builtin_fmod" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_FMOD, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_FMOD] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FMOD] = decl; }
if ("__builtin_fmodf") { tree decl; if (strncmp ("__builtin_fmodf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735121, "?"); if (!1) decl = builtin_function ("__builtin_fmodf", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_FMODF, BUILT_IN_NORMAL, (1 ? ("__builtin_fmodf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_fmodf", "__builtin_fmodf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_FMODF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_FMODF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FMODF] = decl; }
if ("__builtin_fmodl") { tree decl; if (strncmp ("__builtin_fmodl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735122, "?"); if (!1) decl = builtin_function ("__builtin_fmodl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FMODL, BUILT_IN_NORMAL, (1 ? ("__builtin_fmodl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_fmodl", "__builtin_fmodl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_FMODL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_FMODL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FMODL] = decl; }
if ("__builtin_frexp") { tree decl; if (strncmp ("__builtin_frexp", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735123, "?"); if (!1) decl = builtin_function ("__builtin_frexp", builtin_types[BT_FN_DOUBLE_DOUBLE_INTPTR], BUILT_IN_FREXP, BUILT_IN_NORMAL, (1 ? ("__builtin_frexp" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_frexp", "__builtin_frexp" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_INTPTR], builtin_types[BT_FN_DOUBLE_DOUBLE_INTPTR], BUILT_IN_FREXP, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FREXP] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FREXP] = decl; }
if ("__builtin_frexpf") { tree decl; if (strncmp ("__builtin_frexpf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735124, "?"); if (!1) decl = builtin_function ("__builtin_frexpf", builtin_types[BT_FN_FLOAT_FLOAT_INTPTR], BUILT_IN_FREXPF, BUILT_IN_NORMAL, (1 ? ("__builtin_frexpf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_frexpf", "__builtin_frexpf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_INTPTR], builtin_types[BT_FN_FLOAT_FLOAT_INTPTR], BUILT_IN_FREXPF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FREXPF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FREXPF] = decl; }
if ("__builtin_frexpl") { tree decl; if (strncmp ("__builtin_frexpl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735125, "?"); if (!1) decl = builtin_function ("__builtin_frexpl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR], BUILT_IN_FREXPL, BUILT_IN_NORMAL, (1 ? ("__builtin_frexpl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_frexpl", "__builtin_frexpl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR], BUILT_IN_FREXPL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FREXPL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FREXPL] = decl; }
if ("__builtin_gamma") { tree decl; if (strncmp ("__builtin_gamma", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735126, "?"); if (!1) decl = builtin_function ("__builtin_gamma", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_GAMMA, BUILT_IN_NORMAL, (1 ? ("__builtin_gamma" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_gamma", "__builtin_gamma" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_GAMMA, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_GAMMA] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_GAMMA] = decl; }
if ("__builtin_gammaf") { tree decl; if (strncmp ("__builtin_gammaf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735127, "?"); if (!1) decl = builtin_function ("__builtin_gammaf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_GAMMAF, BUILT_IN_NORMAL, (1 ? ("__builtin_gammaf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_gammaf", "__builtin_gammaf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_GAMMAF, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_GAMMAF] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_GAMMAF] = decl; }
if ("__builtin_gammal") { tree decl; if (strncmp ("__builtin_gammal", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735128, "?"); if (!1) decl = builtin_function ("__builtin_gammal", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_GAMMAL, BUILT_IN_NORMAL, (1 ? ("__builtin_gammal" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_gammal", "__builtin_gammal" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_GAMMAL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_GAMMAL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_GAMMAL] = decl; }
if ("__builtin_huge_val") { tree decl; if (strncmp ("__builtin_huge_val", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735129, "?"); if (!0) decl = builtin_function ("__builtin_huge_val", builtin_types[BT_FN_DOUBLE], BUILT_IN_HUGE_VAL, BUILT_IN_NORMAL, (0 ? ("__builtin_huge_val" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_huge_val", "__builtin_huge_val" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE], builtin_types[BT_LAST], BUILT_IN_HUGE_VAL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_HUGE_VAL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_HUGE_VAL] = decl; }
if ("__builtin_huge_valf") { tree decl; if (strncmp ("__builtin_huge_valf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735130, "?"); if (!0) decl = builtin_function ("__builtin_huge_valf", builtin_types[BT_FN_FLOAT], BUILT_IN_HUGE_VALF, BUILT_IN_NORMAL, (0 ? ("__builtin_huge_valf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_huge_valf", "__builtin_huge_valf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT], builtin_types[BT_LAST], BUILT_IN_HUGE_VALF, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_HUGE_VALF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_HUGE_VALF] = decl; }
if ("__builtin_huge_vall") { tree decl; if (strncmp ("__builtin_huge_vall", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735131, "?"); if (!0) decl = builtin_function ("__builtin_huge_vall", builtin_types[BT_FN_LONGDOUBLE], BUILT_IN_HUGE_VALL, BUILT_IN_NORMAL, (0 ? ("__builtin_huge_vall" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_huge_vall", "__builtin_huge_vall" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE], builtin_types[BT_LAST], BUILT_IN_HUGE_VALL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_HUGE_VALL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_HUGE_VALL] = decl; }
if ("__builtin_hypot") { tree decl; if (strncmp ("__builtin_hypot", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735132, "?"); if (!1) decl = builtin_function ("__builtin_hypot", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_HYPOT, BUILT_IN_NORMAL, (1 ? ("__builtin_hypot" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_hypot", "__builtin_hypot" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_HYPOT, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_HYPOT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_HYPOT] = decl; }
if ("__builtin_hypotf") { tree decl; if (strncmp ("__builtin_hypotf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735133, "?"); if (!1) decl = builtin_function ("__builtin_hypotf", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_HYPOTF, BUILT_IN_NORMAL, (1 ? ("__builtin_hypotf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_hypotf", "__builtin_hypotf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_HYPOTF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_HYPOTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_HYPOTF] = decl; }
if ("__builtin_hypotl") { tree decl; if (strncmp ("__builtin_hypotl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735134, "?"); if (!1) decl = builtin_function ("__builtin_hypotl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_HYPOTL, BUILT_IN_NORMAL, (1 ? ("__builtin_hypotl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_hypotl", "__builtin_hypotl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_HYPOTL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_HYPOTL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_HYPOTL] = decl; }
if ("__builtin_ilogb") { tree decl; if (strncmp ("__builtin_ilogb", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735135, "?"); if (!1) decl = builtin_function ("__builtin_ilogb", builtin_types[BT_FN_INT_DOUBLE], BUILT_IN_ILOGB, BUILT_IN_NORMAL, (1 ? ("__builtin_ilogb" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_ilogb", "__builtin_ilogb" + strlen ("__builtin_"), builtin_types[BT_FN_INT_DOUBLE], builtin_types[BT_FN_INT_DOUBLE], BUILT_IN_ILOGB, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ILOGB] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ILOGB] = decl; }
if ("__builtin_ilogbf") { tree decl; if (strncmp ("__builtin_ilogbf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735136, "?"); if (!1) decl = builtin_function ("__builtin_ilogbf", builtin_types[BT_FN_INT_FLOAT], BUILT_IN_ILOGBF, BUILT_IN_NORMAL, (1 ? ("__builtin_ilogbf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_ilogbf", "__builtin_ilogbf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_FLOAT], builtin_types[BT_FN_INT_FLOAT], BUILT_IN_ILOGBF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ILOGBF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ILOGBF] = decl; }
if ("__builtin_ilogbl") { tree decl; if (strncmp ("__builtin_ilogbl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735137, "?"); if (!1) decl = builtin_function ("__builtin_ilogbl", builtin_types[BT_FN_INT_LONGDOUBLE], BUILT_IN_ILOGBL, BUILT_IN_NORMAL, (1 ? ("__builtin_ilogbl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_ilogbl", "__builtin_ilogbl" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONGDOUBLE], builtin_types[BT_FN_INT_LONGDOUBLE], BUILT_IN_ILOGBL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_ILOGBL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ILOGBL] = decl; }
if ("__builtin_inf") { tree decl; if (strncmp ("__builtin_inf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735138, "?"); if (!0) decl = builtin_function ("__builtin_inf", builtin_types[BT_FN_DOUBLE], BUILT_IN_INF, BUILT_IN_NORMAL, (0 ? ("__builtin_inf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_inf", "__builtin_inf" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE], builtin_types[BT_LAST], BUILT_IN_INF, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_INF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_INF] = decl; }
if ("__builtin_inff") { tree decl; if (strncmp ("__builtin_inff", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735139, "?"); if (!0) decl = builtin_function ("__builtin_inff", builtin_types[BT_FN_FLOAT], BUILT_IN_INFF, BUILT_IN_NORMAL, (0 ? ("__builtin_inff" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_inff", "__builtin_inff" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT], builtin_types[BT_LAST], BUILT_IN_INFF, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_INFF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_INFF] = decl; }
if ("__builtin_infl") { tree decl; if (strncmp ("__builtin_infl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735140, "?"); if (!0) decl = builtin_function ("__builtin_infl", builtin_types[BT_FN_LONGDOUBLE], BUILT_IN_INFL, BUILT_IN_NORMAL, (0 ? ("__builtin_infl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_infl", "__builtin_infl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE], builtin_types[BT_LAST], BUILT_IN_INFL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_INFL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_INFL] = decl; }
if ("__builtin_j0") { tree decl; if (strncmp ("__builtin_j0", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735141, "?"); if (!1) decl = builtin_function ("__builtin_j0", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_J0, BUILT_IN_NORMAL, (1 ? ("__builtin_j0" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_j0", "__builtin_j0" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_J0, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_J0] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_J0] = decl; }
if ("__builtin_j0f") { tree decl; if (strncmp ("__builtin_j0f", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735142, "?"); if (!1) decl = builtin_function ("__builtin_j0f", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_J0F, BUILT_IN_NORMAL, (1 ? ("__builtin_j0f" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_j0f", "__builtin_j0f" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_J0F, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_J0F] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_J0F] = decl; }
if ("__builtin_j0l") { tree decl; if (strncmp ("__builtin_j0l", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735143, "?"); if (!1) decl = builtin_function ("__builtin_j0l", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_J0L, BUILT_IN_NORMAL, (1 ? ("__builtin_j0l" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_j0l", "__builtin_j0l" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_J0L, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_J0L] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_J0L] = decl; }
if ("__builtin_j1") { tree decl; if (strncmp ("__builtin_j1", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735144, "?"); if (!1) decl = builtin_function ("__builtin_j1", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_J1, BUILT_IN_NORMAL, (1 ? ("__builtin_j1" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_j1", "__builtin_j1" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_J1, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_J1] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_J1] = decl; }
if ("__builtin_j1f") { tree decl; if (strncmp ("__builtin_j1f", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735145, "?"); if (!1) decl = builtin_function ("__builtin_j1f", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_J1F, BUILT_IN_NORMAL, (1 ? ("__builtin_j1f" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_j1f", "__builtin_j1f" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_J1F, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_J1F] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_J1F] = decl; }
if ("__builtin_j1l") { tree decl; if (strncmp ("__builtin_j1l", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735146, "?"); if (!1) decl = builtin_function ("__builtin_j1l", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_J1L, BUILT_IN_NORMAL, (1 ? ("__builtin_j1l" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_j1l", "__builtin_j1l" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_J1L, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_J1L] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_J1L] = decl; }
if ("__builtin_jn") { tree decl; if (strncmp ("__builtin_jn", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735147, "?"); if (!1) decl = builtin_function ("__builtin_jn", builtin_types[BT_FN_DOUBLE_INT_DOUBLE], BUILT_IN_JN, BUILT_IN_NORMAL, (1 ? ("__builtin_jn" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_jn", "__builtin_jn" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_INT_DOUBLE], builtin_types[BT_FN_DOUBLE_INT_DOUBLE], BUILT_IN_JN, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_JN] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_JN] = decl; }
if ("__builtin_jnf") { tree decl; if (strncmp ("__builtin_jnf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735148, "?"); if (!1) decl = builtin_function ("__builtin_jnf", builtin_types[BT_FN_FLOAT_INT_FLOAT], BUILT_IN_JNF, BUILT_IN_NORMAL, (1 ? ("__builtin_jnf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_jnf", "__builtin_jnf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_INT_FLOAT], builtin_types[BT_FN_FLOAT_INT_FLOAT], BUILT_IN_JNF, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_JNF] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_JNF] = decl; }
if ("__builtin_jnl") { tree decl; if (strncmp ("__builtin_jnl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735149, "?"); if (!1) decl = builtin_function ("__builtin_jnl", builtin_types[BT_FN_LONGDOUBLE_INT_LONGDOUBLE], BUILT_IN_JNL, BUILT_IN_NORMAL, (1 ? ("__builtin_jnl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_jnl", "__builtin_jnl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_INT_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_INT_LONGDOUBLE], BUILT_IN_JNL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_JNL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_JNL] = decl; }
if ("__builtin_ldexp") { tree decl; if (strncmp ("__builtin_ldexp", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735150, "?"); if (!1) decl = builtin_function ("__builtin_ldexp", builtin_types[BT_FN_DOUBLE_DOUBLE_INT], BUILT_IN_LDEXP, BUILT_IN_NORMAL, (1 ? ("__builtin_ldexp" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_ldexp", "__builtin_ldexp" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_INT], builtin_types[BT_FN_DOUBLE_DOUBLE_INT], BUILT_IN_LDEXP, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LDEXP] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LDEXP] = decl; }
if ("__builtin_ldexpf") { tree decl; if (strncmp ("__builtin_ldexpf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735151, "?"); if (!1) decl = builtin_function ("__builtin_ldexpf", builtin_types[BT_FN_FLOAT_FLOAT_INT], BUILT_IN_LDEXPF, BUILT_IN_NORMAL, (1 ? ("__builtin_ldexpf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_ldexpf", "__builtin_ldexpf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_INT], builtin_types[BT_FN_FLOAT_FLOAT_INT], BUILT_IN_LDEXPF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LDEXPF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LDEXPF] = decl; }
if ("__builtin_ldexpl") { tree decl; if (strncmp ("__builtin_ldexpl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735152, "?"); if (!1) decl = builtin_function ("__builtin_ldexpl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_INT], BUILT_IN_LDEXPL, BUILT_IN_NORMAL, (1 ? ("__builtin_ldexpl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_ldexpl", "__builtin_ldexpl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_INT], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_INT], BUILT_IN_LDEXPL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LDEXPL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LDEXPL] = decl; }
if ("__builtin_lgamma") { tree decl; if (strncmp ("__builtin_lgamma", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735153, "?"); if (!1) decl = builtin_function ("__builtin_lgamma", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_LGAMMA, BUILT_IN_NORMAL, (1 ? ("__builtin_lgamma" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_lgamma", "__builtin_lgamma" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_LGAMMA, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LGAMMA] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LGAMMA] = decl; }
if ("__builtin_lgammaf") { tree decl; if (strncmp ("__builtin_lgammaf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735154, "?"); if (!1) decl = builtin_function ("__builtin_lgammaf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_LGAMMAF, BUILT_IN_NORMAL, (1 ? ("__builtin_lgammaf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_lgammaf", "__builtin_lgammaf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_LGAMMAF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LGAMMAF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LGAMMAF] = decl; }
if ("__builtin_lgammal") { tree decl; if (strncmp ("__builtin_lgammal", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735155, "?"); if (!1) decl = builtin_function ("__builtin_lgammal", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_LGAMMAL, BUILT_IN_NORMAL, (1 ? ("__builtin_lgammal" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_lgammal", "__builtin_lgammal" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_LGAMMAL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LGAMMAL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LGAMMAL] = decl; }
if ("__builtin_llrint") { tree decl; if (strncmp ("__builtin_llrint", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735156, "?"); if (!1) decl = builtin_function ("__builtin_llrint", builtin_types[BT_FN_LONGLONG_DOUBLE], BUILT_IN_LLRINT, BUILT_IN_NORMAL, (1 ? ("__builtin_llrint" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_llrint", "__builtin_llrint" + strlen ("__builtin_"), builtin_types[BT_FN_LONGLONG_DOUBLE], builtin_types[BT_FN_LONGLONG_DOUBLE], BUILT_IN_LLRINT, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LLRINT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LLRINT] = decl; }
if ("__builtin_llrintf") { tree decl; if (strncmp ("__builtin_llrintf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735157, "?"); if (!1) decl = builtin_function ("__builtin_llrintf", builtin_types[BT_FN_LONGLONG_FLOAT], BUILT_IN_LLRINTF, BUILT_IN_NORMAL, (1 ? ("__builtin_llrintf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_llrintf", "__builtin_llrintf" + strlen ("__builtin_"), builtin_types[BT_FN_LONGLONG_FLOAT], builtin_types[BT_FN_LONGLONG_FLOAT], BUILT_IN_LLRINTF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LLRINTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LLRINTF] = decl; }
if ("__builtin_llrintl") { tree decl; if (strncmp ("__builtin_llrintl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735158, "?"); if (!1) decl = builtin_function ("__builtin_llrintl", builtin_types[BT_FN_LONGLONG_LONGDOUBLE], BUILT_IN_LLRINTL, BUILT_IN_NORMAL, (1 ? ("__builtin_llrintl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_llrintl", "__builtin_llrintl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGLONG_LONGDOUBLE], builtin_types[BT_FN_LONGLONG_LONGDOUBLE], BUILT_IN_LLRINTL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LLRINTL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LLRINTL] = decl; }
if ("__builtin_llround") { tree decl; if (strncmp ("__builtin_llround", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735159, "?"); if (!1) decl = builtin_function ("__builtin_llround", builtin_types[BT_FN_LONGLONG_DOUBLE], BUILT_IN_LLROUND, BUILT_IN_NORMAL, (1 ? ("__builtin_llround" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_llround", "__builtin_llround" + strlen ("__builtin_"), builtin_types[BT_FN_LONGLONG_DOUBLE], builtin_types[BT_FN_LONGLONG_DOUBLE], BUILT_IN_LLROUND, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_LLROUND] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LLROUND] = decl; }
if ("__builtin_llroundf") { tree decl; if (strncmp ("__builtin_llroundf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735160, "?"); if (!1) decl = builtin_function ("__builtin_llroundf", builtin_types[BT_FN_LONGLONG_FLOAT], BUILT_IN_LLROUNDF, BUILT_IN_NORMAL, (1 ? ("__builtin_llroundf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_llroundf", "__builtin_llroundf" + strlen ("__builtin_"), builtin_types[BT_FN_LONGLONG_FLOAT], builtin_types[BT_FN_LONGLONG_FLOAT], BUILT_IN_LLROUNDF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_LLROUNDF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LLROUNDF] = decl; }
if ("__builtin_llroundl") { tree decl; if (strncmp ("__builtin_llroundl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735161, "?"); if (!1) decl = builtin_function ("__builtin_llroundl", builtin_types[BT_FN_LONGLONG_LONGDOUBLE], BUILT_IN_LLROUNDL, BUILT_IN_NORMAL, (1 ? ("__builtin_llroundl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_llroundl", "__builtin_llroundl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGLONG_LONGDOUBLE], builtin_types[BT_FN_LONGLONG_LONGDOUBLE], BUILT_IN_LLROUNDL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_LLROUNDL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LLROUNDL] = decl; }
if ("__builtin_log") { tree decl; if (strncmp ("__builtin_log", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735162, "?"); if (!1) decl = builtin_function ("__builtin_log", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_LOG, BUILT_IN_NORMAL, (1 ? ("__builtin_log" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_log", "__builtin_log" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_LOG, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOG] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOG] = decl; }
if ("__builtin_log10") { tree decl; if (strncmp ("__builtin_log10", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735163, "?"); if (!1) decl = builtin_function ("__builtin_log10", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_LOG10, BUILT_IN_NORMAL, (1 ? ("__builtin_log10" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_log10", "__builtin_log10" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_LOG10, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOG10] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOG10] = decl; }
if ("__builtin_log10f") { tree decl; if (strncmp ("__builtin_log10f", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735164, "?"); if (!1) decl = builtin_function ("__builtin_log10f", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_LOG10F, BUILT_IN_NORMAL, (1 ? ("__builtin_log10f" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_log10f", "__builtin_log10f" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_LOG10F, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOG10F] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOG10F] = decl; }
if ("__builtin_log10l") { tree decl; if (strncmp ("__builtin_log10l", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735165, "?"); if (!1) decl = builtin_function ("__builtin_log10l", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_LOG10L, BUILT_IN_NORMAL, (1 ? ("__builtin_log10l" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_log10l", "__builtin_log10l" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_LOG10L, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOG10L] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOG10L] = decl; }
if ("__builtin_log1p") { tree decl; if (strncmp ("__builtin_log1p", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735166, "?"); if (!1) decl = builtin_function ("__builtin_log1p", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_LOG1P, BUILT_IN_NORMAL, (1 ? ("__builtin_log1p" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_log1p", "__builtin_log1p" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_LOG1P, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOG1P] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOG1P] = decl; }
if ("__builtin_log1pf") { tree decl; if (strncmp ("__builtin_log1pf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735167, "?"); if (!1) decl = builtin_function ("__builtin_log1pf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_LOG1PF, BUILT_IN_NORMAL, (1 ? ("__builtin_log1pf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_log1pf", "__builtin_log1pf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_LOG1PF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOG1PF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOG1PF] = decl; }
if ("__builtin_log1pl") { tree decl; if (strncmp ("__builtin_log1pl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735168, "?"); if (!1) decl = builtin_function ("__builtin_log1pl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_LOG1PL, BUILT_IN_NORMAL, (1 ? ("__builtin_log1pl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_log1pl", "__builtin_log1pl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_LOG1PL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOG1PL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOG1PL] = decl; }
if ("__builtin_log2") { tree decl; if (strncmp ("__builtin_log2", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735169, "?"); if (!1) decl = builtin_function ("__builtin_log2", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_LOG2, BUILT_IN_NORMAL, (1 ? ("__builtin_log2" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_log2", "__builtin_log2" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_LOG2, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOG2] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOG2] = decl; }
if ("__builtin_log2f") { tree decl; if (strncmp ("__builtin_log2f", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735170, "?"); if (!1) decl = builtin_function ("__builtin_log2f", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_LOG2F, BUILT_IN_NORMAL, (1 ? ("__builtin_log2f" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_log2f", "__builtin_log2f" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_LOG2F, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOG2F] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOG2F] = decl; }
if ("__builtin_log2l") { tree decl; if (strncmp ("__builtin_log2l", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735171, "?"); if (!1) decl = builtin_function ("__builtin_log2l", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_LOG2L, BUILT_IN_NORMAL, (1 ? ("__builtin_log2l" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_log2l", "__builtin_log2l" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_LOG2L, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOG2L] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOG2L] = decl; }
if ("__builtin_logb") { tree decl; if (strncmp ("__builtin_logb", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735172, "?"); if (!1) decl = builtin_function ("__builtin_logb", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_LOGB, BUILT_IN_NORMAL, (1 ? ("__builtin_logb" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_logb", "__builtin_logb" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_LOGB, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOGB] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOGB] = decl; }
if ("__builtin_logbf") { tree decl; if (strncmp ("__builtin_logbf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735173, "?"); if (!1) decl = builtin_function ("__builtin_logbf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_LOGBF, BUILT_IN_NORMAL, (1 ? ("__builtin_logbf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_logbf", "__builtin_logbf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_LOGBF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOGBF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOGBF] = decl; }
if ("__builtin_logbl") { tree decl; if (strncmp ("__builtin_logbl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735174, "?"); if (!1) decl = builtin_function ("__builtin_logbl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_LOGBL, BUILT_IN_NORMAL, (1 ? ("__builtin_logbl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_logbl", "__builtin_logbl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_LOGBL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOGBL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOGBL] = decl; }
if ("__builtin_logf") { tree decl; if (strncmp ("__builtin_logf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735175, "?"); if (!1) decl = builtin_function ("__builtin_logf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_LOGF, BUILT_IN_NORMAL, (1 ? ("__builtin_logf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_logf", "__builtin_logf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_LOGF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOGF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOGF] = decl; }
if ("__builtin_logl") { tree decl; if (strncmp ("__builtin_logl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735176, "?"); if (!1) decl = builtin_function ("__builtin_logl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_LOGL, BUILT_IN_NORMAL, (1 ? ("__builtin_logl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_logl", "__builtin_logl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_LOGL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LOGL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LOGL] = decl; }
if ("__builtin_lrint") { tree decl; if (strncmp ("__builtin_lrint", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735177, "?"); if (!1) decl = builtin_function ("__builtin_lrint", builtin_types[BT_FN_LONG_DOUBLE], BUILT_IN_LRINT, BUILT_IN_NORMAL, (1 ? ("__builtin_lrint" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_lrint", "__builtin_lrint" + strlen ("__builtin_"), builtin_types[BT_FN_LONG_DOUBLE], builtin_types[BT_FN_LONG_DOUBLE], BUILT_IN_LRINT, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LRINT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LRINT] = decl; }
if ("__builtin_lrintf") { tree decl; if (strncmp ("__builtin_lrintf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735178, "?"); if (!1) decl = builtin_function ("__builtin_lrintf", builtin_types[BT_FN_LONG_FLOAT], BUILT_IN_LRINTF, BUILT_IN_NORMAL, (1 ? ("__builtin_lrintf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_lrintf", "__builtin_lrintf" + strlen ("__builtin_"), builtin_types[BT_FN_LONG_FLOAT], builtin_types[BT_FN_LONG_FLOAT], BUILT_IN_LRINTF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LRINTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LRINTF] = decl; }
if ("__builtin_lrintl") { tree decl; if (strncmp ("__builtin_lrintl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735179, "?"); if (!1) decl = builtin_function ("__builtin_lrintl", builtin_types[BT_FN_LONG_LONGDOUBLE], BUILT_IN_LRINTL, BUILT_IN_NORMAL, (1 ? ("__builtin_lrintl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_lrintl", "__builtin_lrintl" + strlen ("__builtin_"), builtin_types[BT_FN_LONG_LONGDOUBLE], builtin_types[BT_FN_LONG_LONGDOUBLE], BUILT_IN_LRINTL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_LRINTL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LRINTL] = decl; }
if ("__builtin_lround") { tree decl; if (strncmp ("__builtin_lround", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735180, "?"); if (!1) decl = builtin_function ("__builtin_lround", builtin_types[BT_FN_LONG_DOUBLE], BUILT_IN_LROUND, BUILT_IN_NORMAL, (1 ? ("__builtin_lround" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_lround", "__builtin_lround" + strlen ("__builtin_"), builtin_types[BT_FN_LONG_DOUBLE], builtin_types[BT_FN_LONG_DOUBLE], BUILT_IN_LROUND, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_LROUND] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LROUND] = decl; }
if ("__builtin_lroundf") { tree decl; if (strncmp ("__builtin_lroundf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735181, "?"); if (!1) decl = builtin_function ("__builtin_lroundf", builtin_types[BT_FN_LONG_FLOAT], BUILT_IN_LROUNDF, BUILT_IN_NORMAL, (1 ? ("__builtin_lroundf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_lroundf", "__builtin_lroundf" + strlen ("__builtin_"), builtin_types[BT_FN_LONG_FLOAT], builtin_types[BT_FN_LONG_FLOAT], BUILT_IN_LROUNDF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_LROUNDF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LROUNDF] = decl; }
if ("__builtin_lroundl") { tree decl; if (strncmp ("__builtin_lroundl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735182, "?"); if (!1) decl = builtin_function ("__builtin_lroundl", builtin_types[BT_FN_LONG_LONGDOUBLE], BUILT_IN_LROUNDL, BUILT_IN_NORMAL, (1 ? ("__builtin_lroundl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_lroundl", "__builtin_lroundl" + strlen ("__builtin_"), builtin_types[BT_FN_LONG_LONGDOUBLE], builtin_types[BT_FN_LONG_LONGDOUBLE], BUILT_IN_LROUNDL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_LROUNDL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LROUNDL] = decl; }
if ("__builtin_modf") { tree decl; if (strncmp ("__builtin_modf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735183, "?"); if (!1) decl = builtin_function ("__builtin_modf", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLEPTR], BUILT_IN_MODF, BUILT_IN_NORMAL, (1 ? ("__builtin_modf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_modf", "__builtin_modf" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLEPTR], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLEPTR], BUILT_IN_MODF, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_MODF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_MODF] = decl; }
if ("__builtin_modff") { tree decl; if (strncmp ("__builtin_modff", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735184, "?"); if (!1) decl = builtin_function ("__builtin_modff", builtin_types[BT_FN_FLOAT_FLOAT_FLOATPTR], BUILT_IN_MODFF, BUILT_IN_NORMAL, (1 ? ("__builtin_modff" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_modff", "__builtin_modff" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOATPTR], builtin_types[BT_FN_FLOAT_FLOAT_FLOATPTR], BUILT_IN_MODFF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_MODFF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_MODFF] = decl; }
if ("__builtin_modfl") { tree decl; if (strncmp ("__builtin_modfl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735185, "?"); if (!1) decl = builtin_function ("__builtin_modfl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLEPTR], BUILT_IN_MODFL, BUILT_IN_NORMAL, (1 ? ("__builtin_modfl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_modfl", "__builtin_modfl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLEPTR], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLEPTR], BUILT_IN_MODFL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_MODFL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_MODFL] = decl; }
if ("__builtin_nan") { tree decl; if (strncmp ("__builtin_nan", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735186, "?"); if (!0) decl = builtin_function ("__builtin_nan", builtin_types[BT_FN_DOUBLE_CONST_STRING1], BUILT_IN_NAN, BUILT_IN_NORMAL, (0 ? ("__builtin_nan" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_nan", "__builtin_nan" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_CONST_STRING1], builtin_types[BT_LAST], BUILT_IN_NAN, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_NAN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NAN] = decl; }
if ("__builtin_nanf") { tree decl; if (strncmp ("__builtin_nanf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735187, "?"); if (!0) decl = builtin_function ("__builtin_nanf", builtin_types[BT_FN_FLOAT_CONST_STRING1], BUILT_IN_NANF, BUILT_IN_NORMAL, (0 ? ("__builtin_nanf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_nanf", "__builtin_nanf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_CONST_STRING1], builtin_types[BT_LAST], BUILT_IN_NANF, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_NANF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NANF] = decl; }
if ("__builtin_nanl") { tree decl; if (strncmp ("__builtin_nanl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735188, "?"); if (!0) decl = builtin_function ("__builtin_nanl", builtin_types[BT_FN_LONGDOUBLE_CONST_STRING1], BUILT_IN_NANL, BUILT_IN_NORMAL, (0 ? ("__builtin_nanl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_nanl", "__builtin_nanl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_CONST_STRING1], builtin_types[BT_LAST], BUILT_IN_NANL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_NANL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NANL] = decl; }
if ("__builtin_nans") { tree decl; if (strncmp ("__builtin_nans", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735189, "?"); if (!0) decl = builtin_function ("__builtin_nans", builtin_types[BT_FN_DOUBLE_CONST_STRING1], BUILT_IN_NANS, BUILT_IN_NORMAL, (0 ? ("__builtin_nans" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_nans", "__builtin_nans" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_CONST_STRING1], builtin_types[BT_LAST], BUILT_IN_NANS, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_NANS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NANS] = decl; }
if ("__builtin_nansf") { tree decl; if (strncmp ("__builtin_nansf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735190, "?"); if (!0) decl = builtin_function ("__builtin_nansf", builtin_types[BT_FN_FLOAT_CONST_STRING1], BUILT_IN_NANSF, BUILT_IN_NORMAL, (0 ? ("__builtin_nansf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_nansf", "__builtin_nansf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_CONST_STRING1], builtin_types[BT_LAST], BUILT_IN_NANSF, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_NANSF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NANSF] = decl; }
if ("__builtin_nansl") { tree decl; if (strncmp ("__builtin_nansl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735191, "?"); if (!0) decl = builtin_function ("__builtin_nansl", builtin_types[BT_FN_LONGDOUBLE_CONST_STRING1], BUILT_IN_NANSL, BUILT_IN_NORMAL, (0 ? ("__builtin_nansl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_nansl", "__builtin_nansl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_CONST_STRING1], builtin_types[BT_LAST], BUILT_IN_NANSL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_NANSL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NANSL] = decl; }
if ("__builtin_nearbyint") { tree decl; if (strncmp ("__builtin_nearbyint", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735192, "?"); if (!1) decl = builtin_function ("__builtin_nearbyint", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_NEARBYINT, BUILT_IN_NORMAL, (1 ? ("__builtin_nearbyint" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_nearbyint", "__builtin_nearbyint" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_NEARBYINT, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_NEARBYINT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NEARBYINT] = decl; }
if ("__builtin_nearbyintf") { tree decl; if (strncmp ("__builtin_nearbyintf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735193, "?"); if (!1) decl = builtin_function ("__builtin_nearbyintf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_NEARBYINTF, BUILT_IN_NORMAL, (1 ? ("__builtin_nearbyintf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_nearbyintf", "__builtin_nearbyintf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_NEARBYINTF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_NEARBYINTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NEARBYINTF] = decl; }
if ("__builtin_nearbyintl") { tree decl; if (strncmp ("__builtin_nearbyintl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735194, "?"); if (!1) decl = builtin_function ("__builtin_nearbyintl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_NEARBYINTL, BUILT_IN_NORMAL, (1 ? ("__builtin_nearbyintl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_nearbyintl", "__builtin_nearbyintl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_NEARBYINTL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_NEARBYINTL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NEARBYINTL] = decl; }
if ("__builtin_nextafter") { tree decl; if (strncmp ("__builtin_nextafter", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735195, "?"); if (!1) decl = builtin_function ("__builtin_nextafter", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_NEXTAFTER, BUILT_IN_NORMAL, (1 ? ("__builtin_nextafter" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_nextafter", "__builtin_nextafter" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_NEXTAFTER, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_NEXTAFTER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NEXTAFTER] = decl; }
if ("__builtin_nextafterf") { tree decl; if (strncmp ("__builtin_nextafterf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735196, "?"); if (!1) decl = builtin_function ("__builtin_nextafterf", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_NEXTAFTERF, BUILT_IN_NORMAL, (1 ? ("__builtin_nextafterf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_nextafterf", "__builtin_nextafterf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_NEXTAFTERF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_NEXTAFTERF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NEXTAFTERF] = decl; }
if ("__builtin_nextafterl") { tree decl; if (strncmp ("__builtin_nextafterl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735197, "?"); if (!1) decl = builtin_function ("__builtin_nextafterl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_NEXTAFTERL, BUILT_IN_NORMAL, (1 ? ("__builtin_nextafterl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_nextafterl", "__builtin_nextafterl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_NEXTAFTERL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_NEXTAFTERL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NEXTAFTERL] = decl; }
if ("__builtin_nexttoward") { tree decl; if (strncmp ("__builtin_nexttoward", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735198, "?"); if (!1) decl = builtin_function ("__builtin_nexttoward", builtin_types[BT_FN_DOUBLE_DOUBLE_LONGDOUBLE], BUILT_IN_NEXTTOWARD, BUILT_IN_NORMAL, (1 ? ("__builtin_nexttoward" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_nexttoward", "__builtin_nexttoward" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_LONGDOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_LONGDOUBLE], BUILT_IN_NEXTTOWARD, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_NEXTTOWARD] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NEXTTOWARD] = decl; }
if ("__builtin_nexttowardf") { tree decl; if (strncmp ("__builtin_nexttowardf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735199, "?"); if (!1) decl = builtin_function ("__builtin_nexttowardf", builtin_types[BT_FN_FLOAT_FLOAT_LONGDOUBLE], BUILT_IN_NEXTTOWARDF, BUILT_IN_NORMAL, (1 ? ("__builtin_nexttowardf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_nexttowardf", "__builtin_nexttowardf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_LONGDOUBLE], builtin_types[BT_FN_FLOAT_FLOAT_LONGDOUBLE], BUILT_IN_NEXTTOWARDF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_NEXTTOWARDF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NEXTTOWARDF] = decl; }
if ("__builtin_nexttowardl") { tree decl; if (strncmp ("__builtin_nexttowardl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735200, "?"); if (!1) decl = builtin_function ("__builtin_nexttowardl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_NEXTTOWARDL, BUILT_IN_NORMAL, (1 ? ("__builtin_nexttowardl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_nexttowardl", "__builtin_nexttowardl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_NEXTTOWARDL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_NEXTTOWARDL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NEXTTOWARDL] = decl; }
if ("__builtin_pow") { tree decl; if (strncmp ("__builtin_pow", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735201, "?"); if (!1) decl = builtin_function ("__builtin_pow", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_POW, BUILT_IN_NORMAL, (1 ? ("__builtin_pow" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_pow", "__builtin_pow" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_POW, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_POW] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_POW] = decl; }
if ("__builtin_pow10") { tree decl; if (strncmp ("__builtin_pow10", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735202, "?"); if (!1) decl = builtin_function ("__builtin_pow10", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_POW10, BUILT_IN_NORMAL, (1 ? ("__builtin_pow10" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_pow10", "__builtin_pow10" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_POW10, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_POW10] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_POW10] = decl; }
if ("__builtin_pow10f") { tree decl; if (strncmp ("__builtin_pow10f", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735203, "?"); if (!1) decl = builtin_function ("__builtin_pow10f", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_POW10F, BUILT_IN_NORMAL, (1 ? ("__builtin_pow10f" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_pow10f", "__builtin_pow10f" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_POW10F, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_POW10F] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_POW10F] = decl; }
if ("__builtin_pow10l") { tree decl; if (strncmp ("__builtin_pow10l", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735204, "?"); if (!1) decl = builtin_function ("__builtin_pow10l", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_POW10L, BUILT_IN_NORMAL, (1 ? ("__builtin_pow10l" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_pow10l", "__builtin_pow10l" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_POW10L, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_POW10L] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_POW10L] = decl; }
if ("__builtin_powf") { tree decl; if (strncmp ("__builtin_powf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735205, "?"); if (!1) decl = builtin_function ("__builtin_powf", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_POWF, BUILT_IN_NORMAL, (1 ? ("__builtin_powf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_powf", "__builtin_powf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_POWF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_POWF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_POWF] = decl; }
if ("__builtin_powl") { tree decl; if (strncmp ("__builtin_powl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735206, "?"); if (!1) decl = builtin_function ("__builtin_powl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_POWL, BUILT_IN_NORMAL, (1 ? ("__builtin_powl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_powl", "__builtin_powl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_POWL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_POWL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_POWL] = decl; }
if ("__builtin_remainder") { tree decl; if (strncmp ("__builtin_remainder", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735207, "?"); if (!1) decl = builtin_function ("__builtin_remainder", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_REMAINDER, BUILT_IN_NORMAL, (1 ? ("__builtin_remainder" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_remainder", "__builtin_remainder" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_REMAINDER, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_REMAINDER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_REMAINDER] = decl; }
if ("__builtin_remainderf") { tree decl; if (strncmp ("__builtin_remainderf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735208, "?"); if (!1) decl = builtin_function ("__builtin_remainderf", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_REMAINDERF, BUILT_IN_NORMAL, (1 ? ("__builtin_remainderf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_remainderf", "__builtin_remainderf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_REMAINDERF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_REMAINDERF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_REMAINDERF] = decl; }
if ("__builtin_remainderl") { tree decl; if (strncmp ("__builtin_remainderl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735209, "?"); if (!1) decl = builtin_function ("__builtin_remainderl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_REMAINDERL, BUILT_IN_NORMAL, (1 ? ("__builtin_remainderl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_remainderl", "__builtin_remainderl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_REMAINDERL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_REMAINDERL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_REMAINDERL] = decl; }
if ("__builtin_remquo") { tree decl; if (strncmp ("__builtin_remquo", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735210, "?"); if (!1) decl = builtin_function ("__builtin_remquo", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR], BUILT_IN_REMQUO, BUILT_IN_NORMAL, (1 ? ("__builtin_remquo" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_remquo", "__builtin_remquo" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR], BUILT_IN_REMQUO, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_REMQUO] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_REMQUO] = decl; }
if ("__builtin_remquof") { tree decl; if (strncmp ("__builtin_remquof", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735211, "?"); if (!1) decl = builtin_function ("__builtin_remquof", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT_INTPTR], BUILT_IN_REMQUOF, BUILT_IN_NORMAL, (1 ? ("__builtin_remquof" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_remquof", "__builtin_remquof" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT_INTPTR], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT_INTPTR], BUILT_IN_REMQUOF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_REMQUOF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_REMQUOF] = decl; }
if ("__builtin_remquol") { tree decl; if (strncmp ("__builtin_remquol", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735212, "?"); if (!1) decl = builtin_function ("__builtin_remquol", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR], BUILT_IN_REMQUOL, BUILT_IN_NORMAL, (1 ? ("__builtin_remquol" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_remquol", "__builtin_remquol" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR], BUILT_IN_REMQUOL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_REMQUOL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_REMQUOL] = decl; }
if ("__builtin_rint") { tree decl; if (strncmp ("__builtin_rint", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735213, "?"); if (!1) decl = builtin_function ("__builtin_rint", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_RINT, BUILT_IN_NORMAL, (1 ? ("__builtin_rint" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_rint", "__builtin_rint" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_RINT, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_RINT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_RINT] = decl; }
if ("__builtin_rintf") { tree decl; if (strncmp ("__builtin_rintf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735214, "?"); if (!1) decl = builtin_function ("__builtin_rintf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_RINTF, BUILT_IN_NORMAL, (1 ? ("__builtin_rintf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_rintf", "__builtin_rintf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_RINTF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_RINTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_RINTF] = decl; }
if ("__builtin_rintl") { tree decl; if (strncmp ("__builtin_rintl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735215, "?"); if (!1) decl = builtin_function ("__builtin_rintl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_RINTL, BUILT_IN_NORMAL, (1 ? ("__builtin_rintl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_rintl", "__builtin_rintl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_RINTL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_RINTL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_RINTL] = decl; }
if ("__builtin_round") { tree decl; if (strncmp ("__builtin_round", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735216, "?"); if (!1) decl = builtin_function ("__builtin_round", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ROUND, BUILT_IN_NORMAL, (1 ? ("__builtin_round" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_round", "__builtin_round" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_ROUND, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ROUND] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ROUND] = decl; }
if ("__builtin_roundf") { tree decl; if (strncmp ("__builtin_roundf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735217, "?"); if (!1) decl = builtin_function ("__builtin_roundf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ROUNDF, BUILT_IN_NORMAL, (1 ? ("__builtin_roundf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_roundf", "__builtin_roundf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_ROUNDF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ROUNDF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ROUNDF] = decl; }
if ("__builtin_roundl") { tree decl; if (strncmp ("__builtin_roundl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735218, "?"); if (!1) decl = builtin_function ("__builtin_roundl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ROUNDL, BUILT_IN_NORMAL, (1 ? ("__builtin_roundl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_roundl", "__builtin_roundl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_ROUNDL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ROUNDL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ROUNDL] = decl; }
if ("__builtin_scalb") { tree decl; if (strncmp ("__builtin_scalb", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735219, "?"); if (!1) decl = builtin_function ("__builtin_scalb", builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_SCALB, BUILT_IN_NORMAL, (1 ? ("__builtin_scalb" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_scalb", "__builtin_scalb" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE_DOUBLE], BUILT_IN_SCALB, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SCALB] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_SCALB] = decl; }
if ("__builtin_scalbf") { tree decl; if (strncmp ("__builtin_scalbf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735220, "?"); if (!1) decl = builtin_function ("__builtin_scalbf", builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_SCALBF, BUILT_IN_NORMAL, (1 ? ("__builtin_scalbf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_scalbf", "__builtin_scalbf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT_FLOAT], BUILT_IN_SCALBF, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SCALBF] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_SCALBF] = decl; }
if ("__builtin_scalbl") { tree decl; if (strncmp ("__builtin_scalbl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735221, "?"); if (!1) decl = builtin_function ("__builtin_scalbl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_SCALBL, BUILT_IN_NORMAL, (1 ? ("__builtin_scalbl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_scalbl", "__builtin_scalbl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE], BUILT_IN_SCALBL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SCALBL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_SCALBL] = decl; }
if ("__builtin_scalbln") { tree decl; if (strncmp ("__builtin_scalbln", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735222, "?"); if (!1) decl = builtin_function ("__builtin_scalbln", builtin_types[BT_FN_DOUBLE_DOUBLE_LONG], BUILT_IN_SCALBLN, BUILT_IN_NORMAL, (1 ? ("__builtin_scalbln" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_scalbln", "__builtin_scalbln" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_LONG], builtin_types[BT_FN_DOUBLE_DOUBLE_LONG], BUILT_IN_SCALBLN, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SCALBLN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SCALBLN] = decl; }
if ("__builtin_scalblnf") { tree decl; if (strncmp ("__builtin_scalblnf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735223, "?"); if (!1) decl = builtin_function ("__builtin_scalblnf", builtin_types[BT_FN_FLOAT_FLOAT_LONG], BUILT_IN_SCALBLNF, BUILT_IN_NORMAL, (1 ? ("__builtin_scalblnf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_scalblnf", "__builtin_scalblnf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_LONG], builtin_types[BT_FN_FLOAT_FLOAT_LONG], BUILT_IN_SCALBLNF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SCALBLNF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SCALBLNF] = decl; }
if ("__builtin_scalblnl") { tree decl; if (strncmp ("__builtin_scalblnl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735224, "?"); if (!1) decl = builtin_function ("__builtin_scalblnl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONG], BUILT_IN_SCALBLNL, BUILT_IN_NORMAL, (1 ? ("__builtin_scalblnl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_scalblnl", "__builtin_scalblnl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONG], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_LONG], BUILT_IN_SCALBLNL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SCALBLNL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SCALBLNL] = decl; }
if ("__builtin_scalbn") { tree decl; if (strncmp ("__builtin_scalbn", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735225, "?"); if (!1) decl = builtin_function ("__builtin_scalbn", builtin_types[BT_FN_DOUBLE_DOUBLE_INT], BUILT_IN_SCALBN, BUILT_IN_NORMAL, (1 ? ("__builtin_scalbn" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_scalbn", "__builtin_scalbn" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE_INT], builtin_types[BT_FN_DOUBLE_DOUBLE_INT], BUILT_IN_SCALBN, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SCALBN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SCALBN] = decl; }
if ("__builtin_scalbnf") { tree decl; if (strncmp ("__builtin_scalbnf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735226, "?"); if (!1) decl = builtin_function ("__builtin_scalbnf", builtin_types[BT_FN_FLOAT_FLOAT_INT], BUILT_IN_SCALBNF, BUILT_IN_NORMAL, (1 ? ("__builtin_scalbnf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_scalbnf", "__builtin_scalbnf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT_INT], builtin_types[BT_FN_FLOAT_FLOAT_INT], BUILT_IN_SCALBNF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SCALBNF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SCALBNF] = decl; }
if ("__builtin_scalbnl") { tree decl; if (strncmp ("__builtin_scalbnl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735227, "?"); if (!1) decl = builtin_function ("__builtin_scalbnl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_INT], BUILT_IN_SCALBNL, BUILT_IN_NORMAL, (1 ? ("__builtin_scalbnl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_scalbnl", "__builtin_scalbnl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_INT], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE_INT], BUILT_IN_SCALBNL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SCALBNL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SCALBNL] = decl; }
if ("__builtin_signbit") { tree decl; if (strncmp ("__builtin_signbit", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735228, "?"); if (!1) decl = builtin_function ("__builtin_signbit", builtin_types[BT_FN_INT_DOUBLE], BUILT_IN_SIGNBIT, BUILT_IN_NORMAL, (1 ? ("__builtin_signbit" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_signbit", "__builtin_signbit" + strlen ("__builtin_"), builtin_types[BT_FN_INT_DOUBLE], builtin_types[BT_FN_INT_DOUBLE], BUILT_IN_SIGNBIT, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_SIGNBIT] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_SIGNBIT] = decl; }
if ("__builtin_signbitf") { tree decl; if (strncmp ("__builtin_signbitf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735229, "?"); if (!1) decl = builtin_function ("__builtin_signbitf", builtin_types[BT_FN_INT_FLOAT], BUILT_IN_SIGNBITF, BUILT_IN_NORMAL, (1 ? ("__builtin_signbitf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_signbitf", "__builtin_signbitf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_FLOAT], builtin_types[BT_FN_INT_FLOAT], BUILT_IN_SIGNBITF, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_SIGNBITF] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_SIGNBITF] = decl; }
if ("__builtin_signbitl") { tree decl; if (strncmp ("__builtin_signbitl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735230, "?"); if (!1) decl = builtin_function ("__builtin_signbitl", builtin_types[BT_FN_INT_LONGDOUBLE], BUILT_IN_SIGNBITL, BUILT_IN_NORMAL, (1 ? ("__builtin_signbitl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_signbitl", "__builtin_signbitl" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONGDOUBLE], builtin_types[BT_FN_INT_LONGDOUBLE], BUILT_IN_SIGNBITL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_SIGNBITL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_SIGNBITL] = decl; }
if ("__builtin_significand") { tree decl; if (strncmp ("__builtin_significand", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735231, "?"); if (!1) decl = builtin_function ("__builtin_significand", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_SIGNIFICAND, BUILT_IN_NORMAL, (1 ? ("__builtin_significand" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_significand", "__builtin_significand" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_SIGNIFICAND, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SIGNIFICAND] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_SIGNIFICAND] = decl; }
if ("__builtin_significandf") { tree decl; if (strncmp ("__builtin_significandf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735232, "?"); if (!1) decl = builtin_function ("__builtin_significandf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_SIGNIFICANDF, BUILT_IN_NORMAL, (1 ? ("__builtin_significandf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_significandf", "__builtin_significandf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_SIGNIFICANDF, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SIGNIFICANDF] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_SIGNIFICANDF] = decl; }
if ("__builtin_significandl") { tree decl; if (strncmp ("__builtin_significandl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735233, "?"); if (!1) decl = builtin_function ("__builtin_significandl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_SIGNIFICANDL, BUILT_IN_NORMAL, (1 ? ("__builtin_significandl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_significandl", "__builtin_significandl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_SIGNIFICANDL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SIGNIFICANDL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_SIGNIFICANDL] = decl; }
if ("__builtin_sin") { tree decl; if (strncmp ("__builtin_sin", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735234, "?"); if (!1) decl = builtin_function ("__builtin_sin", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_SIN, BUILT_IN_NORMAL, (1 ? ("__builtin_sin" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_sin", "__builtin_sin" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_SIN, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_SIN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SIN] = decl; }
if ("__builtin_sincos") { tree decl; if (strncmp ("__builtin_sincos", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735235, "?"); if (!1) decl = builtin_function ("__builtin_sincos", builtin_types[BT_FN_VOID_DOUBLE_DOUBLEPTR_DOUBLEPTR], BUILT_IN_SINCOS, BUILT_IN_NORMAL, (1 ? ("__builtin_sincos" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_sincos", "__builtin_sincos" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_DOUBLE_DOUBLEPTR_DOUBLEPTR], builtin_types[BT_FN_VOID_DOUBLE_DOUBLEPTR_DOUBLEPTR], BUILT_IN_SINCOS, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_SINCOS] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_SINCOS] = decl; }
if ("__builtin_sincosf") { tree decl; if (strncmp ("__builtin_sincosf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735236, "?"); if (!1) decl = builtin_function ("__builtin_sincosf", builtin_types[BT_FN_VOID_FLOAT_FLOATPTR_FLOATPTR], BUILT_IN_SINCOSF, BUILT_IN_NORMAL, (1 ? ("__builtin_sincosf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_sincosf", "__builtin_sincosf" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_FLOAT_FLOATPTR_FLOATPTR], builtin_types[BT_FN_VOID_FLOAT_FLOATPTR_FLOATPTR], BUILT_IN_SINCOSF, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_SINCOSF] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_SINCOSF] = decl; }
if ("__builtin_sincosl") { tree decl; if (strncmp ("__builtin_sincosl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735237, "?"); if (!1) decl = builtin_function ("__builtin_sincosl", builtin_types[BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR], BUILT_IN_SINCOSL, BUILT_IN_NORMAL, (1 ? ("__builtin_sincosl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_sincosl", "__builtin_sincosl" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR], builtin_types[BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR], BUILT_IN_SINCOSL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_SINCOSL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_SINCOSL] = decl; }
if ("__builtin_sinf") { tree decl; if (strncmp ("__builtin_sinf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735238, "?"); if (!1) decl = builtin_function ("__builtin_sinf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_SINF, BUILT_IN_NORMAL, (1 ? ("__builtin_sinf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_sinf", "__builtin_sinf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_SINF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_SINF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SINF] = decl; }
if ("__builtin_sinh") { tree decl; if (strncmp ("__builtin_sinh", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735239, "?"); if (!1) decl = builtin_function ("__builtin_sinh", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_SINH, BUILT_IN_NORMAL, (1 ? ("__builtin_sinh" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_sinh", "__builtin_sinh" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_SINH, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SINH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SINH] = decl; }
if ("__builtin_sinhf") { tree decl; if (strncmp ("__builtin_sinhf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735240, "?"); if (!1) decl = builtin_function ("__builtin_sinhf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_SINHF, BUILT_IN_NORMAL, (1 ? ("__builtin_sinhf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_sinhf", "__builtin_sinhf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_SINHF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SINHF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SINHF] = decl; }
if ("__builtin_sinhl") { tree decl; if (strncmp ("__builtin_sinhl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735241, "?"); if (!1) decl = builtin_function ("__builtin_sinhl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_SINHL, BUILT_IN_NORMAL, (1 ? ("__builtin_sinhl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_sinhl", "__builtin_sinhl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_SINHL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SINHL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SINHL] = decl; }
if ("__builtin_sinl") { tree decl; if (strncmp ("__builtin_sinl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735242, "?"); if (!1) decl = builtin_function ("__builtin_sinl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_SINL, BUILT_IN_NORMAL, (1 ? ("__builtin_sinl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_sinl", "__builtin_sinl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_SINL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_SINL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SINL] = decl; }
if ("__builtin_sqrt") { tree decl; if (strncmp ("__builtin_sqrt", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735243, "?"); if (!1) decl = builtin_function ("__builtin_sqrt", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_SQRT, BUILT_IN_NORMAL, (1 ? ("__builtin_sqrt" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_sqrt", "__builtin_sqrt" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_SQRT, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SQRT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SQRT] = decl; }
if ("__builtin_sqrtf") { tree decl; if (strncmp ("__builtin_sqrtf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735244, "?"); if (!1) decl = builtin_function ("__builtin_sqrtf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_SQRTF, BUILT_IN_NORMAL, (1 ? ("__builtin_sqrtf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_sqrtf", "__builtin_sqrtf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_SQRTF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SQRTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SQRTF] = decl; }
if ("__builtin_sqrtl") { tree decl; if (strncmp ("__builtin_sqrtl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735245, "?"); if (!1) decl = builtin_function ("__builtin_sqrtl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_SQRTL, BUILT_IN_NORMAL, (1 ? ("__builtin_sqrtl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_sqrtl", "__builtin_sqrtl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_SQRTL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_SQRTL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SQRTL] = decl; }
if ("__builtin_tan") { tree decl; if (strncmp ("__builtin_tan", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735246, "?"); if (!1) decl = builtin_function ("__builtin_tan", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_TAN, BUILT_IN_NORMAL, (1 ? ("__builtin_tan" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_tan", "__builtin_tan" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_TAN, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_TAN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TAN] = decl; }
if ("__builtin_tanf") { tree decl; if (strncmp ("__builtin_tanf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735247, "?"); if (!1) decl = builtin_function ("__builtin_tanf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_TANF, BUILT_IN_NORMAL, (1 ? ("__builtin_tanf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_tanf", "__builtin_tanf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_TANF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_TANF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TANF] = decl; }
if ("__builtin_tanh") { tree decl; if (strncmp ("__builtin_tanh", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735248, "?"); if (!1) decl = builtin_function ("__builtin_tanh", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_TANH, BUILT_IN_NORMAL, (1 ? ("__builtin_tanh" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_tanh", "__builtin_tanh" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_TANH, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_TANH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TANH] = decl; }
if ("__builtin_tanhf") { tree decl; if (strncmp ("__builtin_tanhf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735249, "?"); if (!1) decl = builtin_function ("__builtin_tanhf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_TANHF, BUILT_IN_NORMAL, (1 ? ("__builtin_tanhf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_tanhf", "__builtin_tanhf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_TANHF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_TANHF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TANHF] = decl; }
if ("__builtin_tanhl") { tree decl; if (strncmp ("__builtin_tanhl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735250, "?"); if (!1) decl = builtin_function ("__builtin_tanhl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_TANHL, BUILT_IN_NORMAL, (1 ? ("__builtin_tanhl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_tanhl", "__builtin_tanhl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_TANHL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_TANHL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TANHL] = decl; }
if ("__builtin_tanl") { tree decl; if (strncmp ("__builtin_tanl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735251, "?"); if (!1) decl = builtin_function ("__builtin_tanl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_TANL, BUILT_IN_NORMAL, (1 ? ("__builtin_tanl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_tanl", "__builtin_tanl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_TANL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_TANL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TANL] = decl; }
if ("__builtin_tgamma") { tree decl; if (strncmp ("__builtin_tgamma", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735252, "?"); if (!1) decl = builtin_function ("__builtin_tgamma", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_TGAMMA, BUILT_IN_NORMAL, (1 ? ("__builtin_tgamma" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_tgamma", "__builtin_tgamma" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_TGAMMA, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_TGAMMA] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TGAMMA] = decl; }
if ("__builtin_tgammaf") { tree decl; if (strncmp ("__builtin_tgammaf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735253, "?"); if (!1) decl = builtin_function ("__builtin_tgammaf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_TGAMMAF, BUILT_IN_NORMAL, (1 ? ("__builtin_tgammaf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_tgammaf", "__builtin_tgammaf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_TGAMMAF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_TGAMMAF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TGAMMAF] = decl; }
if ("__builtin_tgammal") { tree decl; if (strncmp ("__builtin_tgammal", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735254, "?"); if (!1) decl = builtin_function ("__builtin_tgammal", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_TGAMMAL, BUILT_IN_NORMAL, (1 ? ("__builtin_tgammal" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_tgammal", "__builtin_tgammal" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_TGAMMAL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_TGAMMAL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TGAMMAL] = decl; }
if ("__builtin_trunc") { tree decl; if (strncmp ("__builtin_trunc", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735255, "?"); if (!1) decl = builtin_function ("__builtin_trunc", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_TRUNC, BUILT_IN_NORMAL, (1 ? ("__builtin_trunc" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_trunc", "__builtin_trunc" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_TRUNC, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_TRUNC] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TRUNC] = decl; }
if ("__builtin_truncf") { tree decl; if (strncmp ("__builtin_truncf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735256, "?"); if (!1) decl = builtin_function ("__builtin_truncf", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_TRUNCF, BUILT_IN_NORMAL, (1 ? ("__builtin_truncf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_truncf", "__builtin_truncf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_TRUNCF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_TRUNCF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TRUNCF] = decl; }
if ("__builtin_truncl") { tree decl; if (strncmp ("__builtin_truncl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735257, "?"); if (!1) decl = builtin_function ("__builtin_truncl", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_TRUNCL, BUILT_IN_NORMAL, (1 ? ("__builtin_truncl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_truncl", "__builtin_truncl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_TRUNCL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_TRUNCL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TRUNCL] = decl; }
if ("__builtin_y0") { tree decl; if (strncmp ("__builtin_y0", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735258, "?"); if (!1) decl = builtin_function ("__builtin_y0", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_Y0, BUILT_IN_NORMAL, (1 ? ("__builtin_y0" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_y0", "__builtin_y0" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_Y0, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_Y0] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_Y0] = decl; }
if ("__builtin_y0f") { tree decl; if (strncmp ("__builtin_y0f", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735259, "?"); if (!1) decl = builtin_function ("__builtin_y0f", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_Y0F, BUILT_IN_NORMAL, (1 ? ("__builtin_y0f" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_y0f", "__builtin_y0f" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_Y0F, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_Y0F] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_Y0F] = decl; }
if ("__builtin_y0l") { tree decl; if (strncmp ("__builtin_y0l", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735260, "?"); if (!1) decl = builtin_function ("__builtin_y0l", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_Y0L, BUILT_IN_NORMAL, (1 ? ("__builtin_y0l" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_y0l", "__builtin_y0l" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_Y0L, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_Y0L] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_Y0L] = decl; }
if ("__builtin_y1") { tree decl; if (strncmp ("__builtin_y1", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735261, "?"); if (!1) decl = builtin_function ("__builtin_y1", builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_Y1, BUILT_IN_NORMAL, (1 ? ("__builtin_y1" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_y1", "__builtin_y1" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_DOUBLE], builtin_types[BT_FN_DOUBLE_DOUBLE], BUILT_IN_Y1, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_Y1] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_Y1] = decl; }
if ("__builtin_y1f") { tree decl; if (strncmp ("__builtin_y1f", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735262, "?"); if (!1) decl = builtin_function ("__builtin_y1f", builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_Y1F, BUILT_IN_NORMAL, (1 ? ("__builtin_y1f" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_y1f", "__builtin_y1f" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_FLOAT], builtin_types[BT_FN_FLOAT_FLOAT], BUILT_IN_Y1F, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_Y1F] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_Y1F] = decl; }
if ("__builtin_y1l") { tree decl; if (strncmp ("__builtin_y1l", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735263, "?"); if (!1) decl = builtin_function ("__builtin_y1l", builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_Y1L, BUILT_IN_NORMAL, (1 ? ("__builtin_y1l" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_y1l", "__builtin_y1l" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_LONGDOUBLE], BUILT_IN_Y1L, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_Y1L] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_Y1L] = decl; }
if ("__builtin_yn") { tree decl; if (strncmp ("__builtin_yn", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735264, "?"); if (!1) decl = builtin_function ("__builtin_yn", builtin_types[BT_FN_DOUBLE_INT_DOUBLE], BUILT_IN_YN, BUILT_IN_NORMAL, (1 ? ("__builtin_yn" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_yn", "__builtin_yn" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_INT_DOUBLE], builtin_types[BT_FN_DOUBLE_INT_DOUBLE], BUILT_IN_YN, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_YN] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_YN] = decl; }
if ("__builtin_ynf") { tree decl; if (strncmp ("__builtin_ynf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735265, "?"); if (!1) decl = builtin_function ("__builtin_ynf", builtin_types[BT_FN_FLOAT_INT_FLOAT], BUILT_IN_YNF, BUILT_IN_NORMAL, (1 ? ("__builtin_ynf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_ynf", "__builtin_ynf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_INT_FLOAT], builtin_types[BT_FN_FLOAT_INT_FLOAT], BUILT_IN_YNF, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_YNF] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_YNF] = decl; }
if ("__builtin_ynl") { tree decl; if (strncmp ("__builtin_ynl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735266, "?"); if (!1) decl = builtin_function ("__builtin_ynl", builtin_types[BT_FN_LONGDOUBLE_INT_LONGDOUBLE], BUILT_IN_YNL, BUILT_IN_NORMAL, (1 ? ("__builtin_ynl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); else decl = builtin_function_2 ("__builtin_ynl", "__builtin_ynl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_INT_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_INT_LONGDOUBLE], BUILT_IN_YNL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) (flag_errno_math ? ATTR_NOTHROW_LIST : (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST))]); built_in_decls[(int) BUILT_IN_YNL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_YNL] = decl; }
if ("__builtin_cabs") { tree decl; if (strncmp ("__builtin_cabs", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735271, "?"); if (!1) decl = builtin_function ("__builtin_cabs", builtin_types[BT_FN_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CABS, BUILT_IN_NORMAL, (1 ? ("__builtin_cabs" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cabs", "__builtin_cabs" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CABS, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CABS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CABS] = decl; }
if ("__builtin_cabsf") { tree decl; if (strncmp ("__builtin_cabsf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735272, "?"); if (!1) decl = builtin_function ("__builtin_cabsf", builtin_types[BT_FN_FLOAT_COMPLEX_FLOAT], BUILT_IN_CABSF, BUILT_IN_NORMAL, (1 ? ("__builtin_cabsf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cabsf", "__builtin_cabsf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_FLOAT_COMPLEX_FLOAT], BUILT_IN_CABSF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CABSF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CABSF] = decl; }
if ("__builtin_cabsl") { tree decl; if (strncmp ("__builtin_cabsl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735273, "?"); if (!1) decl = builtin_function ("__builtin_cabsl", builtin_types[BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CABSL, BUILT_IN_NORMAL, (1 ? ("__builtin_cabsl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cabsl", "__builtin_cabsl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CABSL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CABSL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CABSL] = decl; }
if ("__builtin_cacos") { tree decl; if (strncmp ("__builtin_cacos", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735274, "?"); if (!1) decl = builtin_function ("__builtin_cacos", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CACOS, BUILT_IN_NORMAL, (1 ? ("__builtin_cacos" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cacos", "__builtin_cacos" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CACOS, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CACOS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CACOS] = decl; }
if ("__builtin_cacosf") { tree decl; if (strncmp ("__builtin_cacosf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735275, "?"); if (!1) decl = builtin_function ("__builtin_cacosf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CACOSF, BUILT_IN_NORMAL, (1 ? ("__builtin_cacosf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cacosf", "__builtin_cacosf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CACOSF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CACOSF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CACOSF] = decl; }
if ("__builtin_cacosh") { tree decl; if (strncmp ("__builtin_cacosh", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735276, "?"); if (!1) decl = builtin_function ("__builtin_cacosh", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CACOSH, BUILT_IN_NORMAL, (1 ? ("__builtin_cacosh" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cacosh", "__builtin_cacosh" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CACOSH, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CACOSH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CACOSH] = decl; }
if ("__builtin_cacoshf") { tree decl; if (strncmp ("__builtin_cacoshf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735277, "?"); if (!1) decl = builtin_function ("__builtin_cacoshf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CACOSHF, BUILT_IN_NORMAL, (1 ? ("__builtin_cacoshf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cacoshf", "__builtin_cacoshf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CACOSHF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CACOSHF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CACOSHF] = decl; }
if ("__builtin_cacoshl") { tree decl; if (strncmp ("__builtin_cacoshl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735278, "?"); if (!1) decl = builtin_function ("__builtin_cacoshl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CACOSHL, BUILT_IN_NORMAL, (1 ? ("__builtin_cacoshl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cacoshl", "__builtin_cacoshl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CACOSHL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CACOSHL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CACOSHL] = decl; }
if ("__builtin_cacosl") { tree decl; if (strncmp ("__builtin_cacosl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735279, "?"); if (!1) decl = builtin_function ("__builtin_cacosl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CACOSL, BUILT_IN_NORMAL, (1 ? ("__builtin_cacosl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cacosl", "__builtin_cacosl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CACOSL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CACOSL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CACOSL] = decl; }
if ("__builtin_carg") { tree decl; if (strncmp ("__builtin_carg", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735280, "?"); if (!1) decl = builtin_function ("__builtin_carg", builtin_types[BT_FN_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CARG, BUILT_IN_NORMAL, (1 ? ("__builtin_carg" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_carg", "__builtin_carg" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CARG, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CARG] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CARG] = decl; }
if ("__builtin_cargf") { tree decl; if (strncmp ("__builtin_cargf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735281, "?"); if (!1) decl = builtin_function ("__builtin_cargf", builtin_types[BT_FN_FLOAT_COMPLEX_FLOAT], BUILT_IN_CARGF, BUILT_IN_NORMAL, (1 ? ("__builtin_cargf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cargf", "__builtin_cargf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_FLOAT_COMPLEX_FLOAT], BUILT_IN_CARGF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CARGF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CARGF] = decl; }
if ("__builtin_cargl") { tree decl; if (strncmp ("__builtin_cargl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735282, "?"); if (!1) decl = builtin_function ("__builtin_cargl", builtin_types[BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CARGL, BUILT_IN_NORMAL, (1 ? ("__builtin_cargl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cargl", "__builtin_cargl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CARGL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CARGL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CARGL] = decl; }
if ("__builtin_casin") { tree decl; if (strncmp ("__builtin_casin", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735283, "?"); if (!1) decl = builtin_function ("__builtin_casin", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CASIN, BUILT_IN_NORMAL, (1 ? ("__builtin_casin" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_casin", "__builtin_casin" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CASIN, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CASIN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CASIN] = decl; }
if ("__builtin_casinf") { tree decl; if (strncmp ("__builtin_casinf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735284, "?"); if (!1) decl = builtin_function ("__builtin_casinf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CASINF, BUILT_IN_NORMAL, (1 ? ("__builtin_casinf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_casinf", "__builtin_casinf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CASINF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CASINF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CASINF] = decl; }
if ("__builtin_casinh") { tree decl; if (strncmp ("__builtin_casinh", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735285, "?"); if (!1) decl = builtin_function ("__builtin_casinh", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CASINH, BUILT_IN_NORMAL, (1 ? ("__builtin_casinh" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_casinh", "__builtin_casinh" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CASINH, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CASINH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CASINH] = decl; }
if ("__builtin_casinhf") { tree decl; if (strncmp ("__builtin_casinhf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735286, "?"); if (!1) decl = builtin_function ("__builtin_casinhf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CASINHF, BUILT_IN_NORMAL, (1 ? ("__builtin_casinhf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_casinhf", "__builtin_casinhf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CASINHF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CASINHF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CASINHF] = decl; }
if ("__builtin_casinhl") { tree decl; if (strncmp ("__builtin_casinhl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735287, "?"); if (!1) decl = builtin_function ("__builtin_casinhl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CASINHL, BUILT_IN_NORMAL, (1 ? ("__builtin_casinhl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_casinhl", "__builtin_casinhl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CASINHL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CASINHL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CASINHL] = decl; }
if ("__builtin_casinl") { tree decl; if (strncmp ("__builtin_casinl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735288, "?"); if (!1) decl = builtin_function ("__builtin_casinl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CASINL, BUILT_IN_NORMAL, (1 ? ("__builtin_casinl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_casinl", "__builtin_casinl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CASINL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CASINL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CASINL] = decl; }
if ("__builtin_catan") { tree decl; if (strncmp ("__builtin_catan", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735289, "?"); if (!1) decl = builtin_function ("__builtin_catan", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CATAN, BUILT_IN_NORMAL, (1 ? ("__builtin_catan" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_catan", "__builtin_catan" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CATAN, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CATAN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CATAN] = decl; }
if ("__builtin_catanf") { tree decl; if (strncmp ("__builtin_catanf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735290, "?"); if (!1) decl = builtin_function ("__builtin_catanf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CATANF, BUILT_IN_NORMAL, (1 ? ("__builtin_catanf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_catanf", "__builtin_catanf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CATANF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CATANF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CATANF] = decl; }
if ("__builtin_catanh") { tree decl; if (strncmp ("__builtin_catanh", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735291, "?"); if (!1) decl = builtin_function ("__builtin_catanh", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CATANH, BUILT_IN_NORMAL, (1 ? ("__builtin_catanh" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_catanh", "__builtin_catanh" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CATANH, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CATANH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CATANH] = decl; }
if ("__builtin_catanhf") { tree decl; if (strncmp ("__builtin_catanhf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735292, "?"); if (!1) decl = builtin_function ("__builtin_catanhf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CATANHF, BUILT_IN_NORMAL, (1 ? ("__builtin_catanhf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_catanhf", "__builtin_catanhf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CATANHF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CATANHF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CATANHF] = decl; }
if ("__builtin_catanhl") { tree decl; if (strncmp ("__builtin_catanhl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735293, "?"); if (!1) decl = builtin_function ("__builtin_catanhl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CATANHL, BUILT_IN_NORMAL, (1 ? ("__builtin_catanhl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_catanhl", "__builtin_catanhl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CATANHL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CATANHL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CATANHL] = decl; }
if ("__builtin_catanl") { tree decl; if (strncmp ("__builtin_catanl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735294, "?"); if (!1) decl = builtin_function ("__builtin_catanl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CATANL, BUILT_IN_NORMAL, (1 ? ("__builtin_catanl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_catanl", "__builtin_catanl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CATANL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CATANL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CATANL] = decl; }
if ("__builtin_ccos") { tree decl; if (strncmp ("__builtin_ccos", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735295, "?"); if (!1) decl = builtin_function ("__builtin_ccos", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CCOS, BUILT_IN_NORMAL, (1 ? ("__builtin_ccos" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_ccos", "__builtin_ccos" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CCOS, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CCOS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CCOS] = decl; }
if ("__builtin_ccosf") { tree decl; if (strncmp ("__builtin_ccosf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735296, "?"); if (!1) decl = builtin_function ("__builtin_ccosf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CCOSF, BUILT_IN_NORMAL, (1 ? ("__builtin_ccosf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_ccosf", "__builtin_ccosf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CCOSF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CCOSF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CCOSF] = decl; }
if ("__builtin_ccosh") { tree decl; if (strncmp ("__builtin_ccosh", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735297, "?"); if (!1) decl = builtin_function ("__builtin_ccosh", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CCOSH, BUILT_IN_NORMAL, (1 ? ("__builtin_ccosh" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_ccosh", "__builtin_ccosh" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CCOSH, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CCOSH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CCOSH] = decl; }
if ("__builtin_ccoshf") { tree decl; if (strncmp ("__builtin_ccoshf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735298, "?"); if (!1) decl = builtin_function ("__builtin_ccoshf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CCOSHF, BUILT_IN_NORMAL, (1 ? ("__builtin_ccoshf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_ccoshf", "__builtin_ccoshf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CCOSHF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CCOSHF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CCOSHF] = decl; }
if ("__builtin_ccoshl") { tree decl; if (strncmp ("__builtin_ccoshl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735299, "?"); if (!1) decl = builtin_function ("__builtin_ccoshl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CCOSHL, BUILT_IN_NORMAL, (1 ? ("__builtin_ccoshl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_ccoshl", "__builtin_ccoshl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CCOSHL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CCOSHL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CCOSHL] = decl; }
if ("__builtin_ccosl") { tree decl; if (strncmp ("__builtin_ccosl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735300, "?"); if (!1) decl = builtin_function ("__builtin_ccosl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CCOSL, BUILT_IN_NORMAL, (1 ? ("__builtin_ccosl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_ccosl", "__builtin_ccosl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CCOSL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CCOSL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CCOSL] = decl; }
if ("__builtin_cexp") { tree decl; if (strncmp ("__builtin_cexp", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735301, "?"); if (!1) decl = builtin_function ("__builtin_cexp", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CEXP, BUILT_IN_NORMAL, (1 ? ("__builtin_cexp" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cexp", "__builtin_cexp" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CEXP, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CEXP] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CEXP] = decl; }
if ("__builtin_cexpf") { tree decl; if (strncmp ("__builtin_cexpf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735302, "?"); if (!1) decl = builtin_function ("__builtin_cexpf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CEXPF, BUILT_IN_NORMAL, (1 ? ("__builtin_cexpf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cexpf", "__builtin_cexpf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CEXPF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CEXPF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CEXPF] = decl; }
if ("__builtin_cexpl") { tree decl; if (strncmp ("__builtin_cexpl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735303, "?"); if (!1) decl = builtin_function ("__builtin_cexpl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CEXPL, BUILT_IN_NORMAL, (1 ? ("__builtin_cexpl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cexpl", "__builtin_cexpl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CEXPL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CEXPL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CEXPL] = decl; }
if ("__builtin_cimag") { tree decl; if (strncmp ("__builtin_cimag", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735304, "?"); if (!1) decl = builtin_function ("__builtin_cimag", builtin_types[BT_FN_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CIMAG, BUILT_IN_NORMAL, (1 ? ("__builtin_cimag" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_cimag", "__builtin_cimag" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CIMAG, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CIMAG] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CIMAG] = decl; }
if ("__builtin_cimagf") { tree decl; if (strncmp ("__builtin_cimagf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735305, "?"); if (!1) decl = builtin_function ("__builtin_cimagf", builtin_types[BT_FN_FLOAT_COMPLEX_FLOAT], BUILT_IN_CIMAGF, BUILT_IN_NORMAL, (1 ? ("__builtin_cimagf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_cimagf", "__builtin_cimagf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_FLOAT_COMPLEX_FLOAT], BUILT_IN_CIMAGF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CIMAGF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CIMAGF] = decl; }
if ("__builtin_cimagl") { tree decl; if (strncmp ("__builtin_cimagl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735306, "?"); if (!1) decl = builtin_function ("__builtin_cimagl", builtin_types[BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CIMAGL, BUILT_IN_NORMAL, (1 ? ("__builtin_cimagl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_cimagl", "__builtin_cimagl" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CIMAGL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CIMAGL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CIMAGL] = decl; }
if ("__builtin_conj") { tree decl; if (strncmp ("__builtin_conj", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735310, "?"); if (!1) decl = builtin_function ("__builtin_conj", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CONJ, BUILT_IN_NORMAL, (1 ? ("__builtin_conj" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_conj", "__builtin_conj" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CONJ, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CONJ] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CONJ] = decl; }
if ("__builtin_conjf") { tree decl; if (strncmp ("__builtin_conjf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735311, "?"); if (!1) decl = builtin_function ("__builtin_conjf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CONJF, BUILT_IN_NORMAL, (1 ? ("__builtin_conjf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_conjf", "__builtin_conjf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CONJF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CONJF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CONJF] = decl; }
if ("__builtin_conjl") { tree decl; if (strncmp ("__builtin_conjl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735312, "?"); if (!1) decl = builtin_function ("__builtin_conjl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CONJL, BUILT_IN_NORMAL, (1 ? ("__builtin_conjl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_conjl", "__builtin_conjl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CONJL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CONJL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CONJL] = decl; }
if ("__builtin_cpow") { tree decl; if (strncmp ("__builtin_cpow", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735313, "?"); if (!1) decl = builtin_function ("__builtin_cpow", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CPOW, BUILT_IN_NORMAL, (1 ? ("__builtin_cpow" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cpow", "__builtin_cpow" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CPOW, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CPOW] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CPOW] = decl; }
if ("__builtin_cpowf") { tree decl; if (strncmp ("__builtin_cpowf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735314, "?"); if (!1) decl = builtin_function ("__builtin_cpowf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CPOWF, BUILT_IN_NORMAL, (1 ? ("__builtin_cpowf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cpowf", "__builtin_cpowf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CPOWF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CPOWF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CPOWF] = decl; }
if ("__builtin_cpowl") { tree decl; if (strncmp ("__builtin_cpowl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735315, "?"); if (!1) decl = builtin_function ("__builtin_cpowl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CPOWL, BUILT_IN_NORMAL, (1 ? ("__builtin_cpowl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cpowl", "__builtin_cpowl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CPOWL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CPOWL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CPOWL] = decl; }
if ("__builtin_cproj") { tree decl; if (strncmp ("__builtin_cproj", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735316, "?"); if (!1) decl = builtin_function ("__builtin_cproj", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CPROJ, BUILT_IN_NORMAL, (1 ? ("__builtin_cproj" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cproj", "__builtin_cproj" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CPROJ, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CPROJ] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CPROJ] = decl; }
if ("__builtin_cprojf") { tree decl; if (strncmp ("__builtin_cprojf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735317, "?"); if (!1) decl = builtin_function ("__builtin_cprojf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CPROJF, BUILT_IN_NORMAL, (1 ? ("__builtin_cprojf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cprojf", "__builtin_cprojf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CPROJF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CPROJF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CPROJF] = decl; }
if ("__builtin_cprojl") { tree decl; if (strncmp ("__builtin_cprojl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735318, "?"); if (!1) decl = builtin_function ("__builtin_cprojl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CPROJL, BUILT_IN_NORMAL, (1 ? ("__builtin_cprojl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_cprojl", "__builtin_cprojl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CPROJL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CPROJL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CPROJL] = decl; }
if ("__builtin_creal") { tree decl; if (strncmp ("__builtin_creal", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735319, "?"); if (!1) decl = builtin_function ("__builtin_creal", builtin_types[BT_FN_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CREAL, BUILT_IN_NORMAL, (1 ? ("__builtin_creal" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_creal", "__builtin_creal" + strlen ("__builtin_"), builtin_types[BT_FN_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CREAL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CREAL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CREAL] = decl; }
if ("__builtin_crealf") { tree decl; if (strncmp ("__builtin_crealf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735320, "?"); if (!1) decl = builtin_function ("__builtin_crealf", builtin_types[BT_FN_FLOAT_COMPLEX_FLOAT], BUILT_IN_CREALF, BUILT_IN_NORMAL, (1 ? ("__builtin_crealf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_crealf", "__builtin_crealf" + strlen ("__builtin_"), builtin_types[BT_FN_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_FLOAT_COMPLEX_FLOAT], BUILT_IN_CREALF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CREALF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CREALF] = decl; }
if ("__builtin_creall") { tree decl; if (strncmp ("__builtin_creall", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735321, "?"); if (!1) decl = builtin_function ("__builtin_creall", builtin_types[BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CREALL, BUILT_IN_NORMAL, (1 ? ("__builtin_creall" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_creall", "__builtin_creall" + strlen ("__builtin_"), builtin_types[BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CREALL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CREALL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CREALL] = decl; }
if ("__builtin_csin") { tree decl; if (strncmp ("__builtin_csin", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735322, "?"); if (!1) decl = builtin_function ("__builtin_csin", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CSIN, BUILT_IN_NORMAL, (1 ? ("__builtin_csin" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_csin", "__builtin_csin" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CSIN, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CSIN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CSIN] = decl; }
if ("__builtin_csinf") { tree decl; if (strncmp ("__builtin_csinf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735323, "?"); if (!1) decl = builtin_function ("__builtin_csinf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CSINF, BUILT_IN_NORMAL, (1 ? ("__builtin_csinf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_csinf", "__builtin_csinf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CSINF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CSINF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CSINF] = decl; }
if ("__builtin_csinh") { tree decl; if (strncmp ("__builtin_csinh", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735324, "?"); if (!1) decl = builtin_function ("__builtin_csinh", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CSINH, BUILT_IN_NORMAL, (1 ? ("__builtin_csinh" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_csinh", "__builtin_csinh" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CSINH, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CSINH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CSINH] = decl; }
if ("__builtin_csinhf") { tree decl; if (strncmp ("__builtin_csinhf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735325, "?"); if (!1) decl = builtin_function ("__builtin_csinhf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CSINHF, BUILT_IN_NORMAL, (1 ? ("__builtin_csinhf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_csinhf", "__builtin_csinhf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CSINHF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CSINHF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CSINHF] = decl; }
if ("__builtin_csinhl") { tree decl; if (strncmp ("__builtin_csinhl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735326, "?"); if (!1) decl = builtin_function ("__builtin_csinhl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CSINHL, BUILT_IN_NORMAL, (1 ? ("__builtin_csinhl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_csinhl", "__builtin_csinhl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CSINHL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CSINHL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CSINHL] = decl; }
if ("__builtin_csinl") { tree decl; if (strncmp ("__builtin_csinl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735327, "?"); if (!1) decl = builtin_function ("__builtin_csinl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CSINL, BUILT_IN_NORMAL, (1 ? ("__builtin_csinl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_csinl", "__builtin_csinl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CSINL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CSINL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CSINL] = decl; }
if ("__builtin_csqrt") { tree decl; if (strncmp ("__builtin_csqrt", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735328, "?"); if (!1) decl = builtin_function ("__builtin_csqrt", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CSQRT, BUILT_IN_NORMAL, (1 ? ("__builtin_csqrt" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_csqrt", "__builtin_csqrt" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CSQRT, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CSQRT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CSQRT] = decl; }
if ("__builtin_csqrtf") { tree decl; if (strncmp ("__builtin_csqrtf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735329, "?"); if (!1) decl = builtin_function ("__builtin_csqrtf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CSQRTF, BUILT_IN_NORMAL, (1 ? ("__builtin_csqrtf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_csqrtf", "__builtin_csqrtf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CSQRTF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CSQRTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CSQRTF] = decl; }
if ("__builtin_csqrtl") { tree decl; if (strncmp ("__builtin_csqrtl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735330, "?"); if (!1) decl = builtin_function ("__builtin_csqrtl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CSQRTL, BUILT_IN_NORMAL, (1 ? ("__builtin_csqrtl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_csqrtl", "__builtin_csqrtl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CSQRTL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CSQRTL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CSQRTL] = decl; }
if ("__builtin_ctan") { tree decl; if (strncmp ("__builtin_ctan", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735331, "?"); if (!1) decl = builtin_function ("__builtin_ctan", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CTAN, BUILT_IN_NORMAL, (1 ? ("__builtin_ctan" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_ctan", "__builtin_ctan" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CTAN, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CTAN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CTAN] = decl; }
if ("__builtin_ctanf") { tree decl; if (strncmp ("__builtin_ctanf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735332, "?"); if (!1) decl = builtin_function ("__builtin_ctanf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CTANF, BUILT_IN_NORMAL, (1 ? ("__builtin_ctanf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_ctanf", "__builtin_ctanf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CTANF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CTANF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CTANF] = decl; }
if ("__builtin_ctanh") { tree decl; if (strncmp ("__builtin_ctanh", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735333, "?"); if (!1) decl = builtin_function ("__builtin_ctanh", builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CTANH, BUILT_IN_NORMAL, (1 ? ("__builtin_ctanh" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_ctanh", "__builtin_ctanh" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], builtin_types[BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE], BUILT_IN_CTANH, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CTANH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CTANH] = decl; }
if ("__builtin_ctanhf") { tree decl; if (strncmp ("__builtin_ctanhf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735334, "?"); if (!1) decl = builtin_function ("__builtin_ctanhf", builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CTANHF, BUILT_IN_NORMAL, (1 ? ("__builtin_ctanhf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_ctanhf", "__builtin_ctanhf" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], builtin_types[BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT], BUILT_IN_CTANHF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CTANHF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CTANHF] = decl; }
if ("__builtin_ctanhl") { tree decl; if (strncmp ("__builtin_ctanhl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735335, "?"); if (!1) decl = builtin_function ("__builtin_ctanhl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CTANHL, BUILT_IN_NORMAL, (1 ? ("__builtin_ctanhl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_ctanhl", "__builtin_ctanhl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CTANHL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CTANHL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CTANHL] = decl; }
if ("__builtin_ctanl") { tree decl; if (strncmp ("__builtin_ctanl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735336, "?"); if (!1) decl = builtin_function ("__builtin_ctanl", builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CTANL, BUILT_IN_NORMAL, (1 ? ("__builtin_ctanl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); else decl = builtin_function_2 ("__builtin_ctanl", "__builtin_ctanl" + strlen ("__builtin_"), builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], builtin_types[BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE], BUILT_IN_CTANL, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) (flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_LIST)]); built_in_decls[(int) BUILT_IN_CTANL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CTANL] = decl; }
if ("__builtin_bcmp") { tree decl; if (strncmp ("__builtin_bcmp", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735341, "?"); if (!1) decl = builtin_function ("__builtin_bcmp", builtin_types[BT_FN_INT_CONST_PTR_CONST_PTR_SIZE], BUILT_IN_BCMP, BUILT_IN_NORMAL, (1 ? ("__builtin_bcmp" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_bcmp", "__builtin_bcmp" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_PTR_CONST_PTR_SIZE], builtin_types[BT_FN_INT_CONST_PTR_CONST_PTR_SIZE], BUILT_IN_BCMP, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_BCMP] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_BCMP] = decl; }
if ("__builtin_bcopy") { tree decl; if (strncmp ("__builtin_bcopy", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735342, "?"); if (!1) decl = builtin_function ("__builtin_bcopy", builtin_types[BT_FN_VOID_CONST_PTR_PTR_SIZE], BUILT_IN_BCOPY, BUILT_IN_NORMAL, (1 ? ("__builtin_bcopy" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_bcopy", "__builtin_bcopy" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_CONST_PTR_PTR_SIZE], builtin_types[BT_FN_VOID_CONST_PTR_PTR_SIZE], BUILT_IN_BCOPY, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_BCOPY] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_BCOPY] = decl; }
if ("__builtin_bzero") { tree decl; if (strncmp ("__builtin_bzero", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735343, "?"); if (!1) decl = builtin_function ("__builtin_bzero", builtin_types[BT_FN_VOID_PTR_SIZE], BUILT_IN_BZERO, BUILT_IN_NORMAL, (1 ? ("__builtin_bzero" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_bzero", "__builtin_bzero" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_PTR_SIZE], builtin_types[BT_FN_VOID_PTR_SIZE], BUILT_IN_BZERO, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_BZERO] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_BZERO] = decl; }
if ("__builtin_ffs") { tree decl; if (strncmp ("__builtin_ffs", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735344, "?"); if (!1) decl = builtin_function ("__builtin_ffs", builtin_types[BT_FN_INT_INT], BUILT_IN_FFS, BUILT_IN_NORMAL, (1 ? ("__builtin_ffs" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_ffs", "__builtin_ffs" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_FFS, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FFS] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_FFS] = decl; }
if ("__builtin_ffsl") { tree decl; if (strncmp ("__builtin_ffsl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735345, "?"); if (!1) decl = builtin_function ("__builtin_ffsl", builtin_types[BT_FN_INT_LONG], BUILT_IN_FFSL, BUILT_IN_NORMAL, (1 ? ("__builtin_ffsl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_ffsl", "__builtin_ffsl" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONG], builtin_types[BT_FN_INT_LONG], BUILT_IN_FFSL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FFSL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_FFSL] = decl; }
if ("__builtin_ffsll") { tree decl; if (strncmp ("__builtin_ffsll", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735346, "?"); if (!1) decl = builtin_function ("__builtin_ffsll", builtin_types[BT_FN_INT_LONGLONG], BUILT_IN_FFSLL, BUILT_IN_NORMAL, (1 ? ("__builtin_ffsll" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_ffsll", "__builtin_ffsll" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONGLONG], builtin_types[BT_FN_INT_LONGLONG], BUILT_IN_FFSLL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FFSLL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_FFSLL] = decl; }
if ("__builtin_index") { tree decl; if (strncmp ("__builtin_index", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735347, "?"); if (!1) decl = builtin_function ("__builtin_index", builtin_types[BT_FN_STRING1_CONST_STRING1_INT], BUILT_IN_INDEX, BUILT_IN_NORMAL, (1 ? ("__builtin_index" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_index", "__builtin_index" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_CONST_STRING1_INT], builtin_types[BT_FN_STRING1_CONST_STRING1_INT], BUILT_IN_INDEX, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_INDEX] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_INDEX] = decl; }
if ("__builtin_memcmp") { tree decl; if (strncmp ("__builtin_memcmp", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735348, "?"); if (!1) decl = builtin_function ("__builtin_memcmp", builtin_types[BT_FN_INT_CONST_PTR_CONST_PTR_SIZE], BUILT_IN_MEMCMP, BUILT_IN_NORMAL, (1 ? ("__builtin_memcmp" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_memcmp", "__builtin_memcmp" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_PTR_CONST_PTR_SIZE], builtin_types[BT_FN_INT_CONST_PTR_CONST_PTR_SIZE], BUILT_IN_MEMCMP, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_MEMCMP] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_MEMCMP] = decl; }
if ("__builtin_memcpy") { tree decl; if (strncmp ("__builtin_memcpy", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735349, "?"); if (!1) decl = builtin_function ("__builtin_memcpy", builtin_types[BT_FN_PTR_PTR_CONST_PTR_SIZE], BUILT_IN_MEMCPY, BUILT_IN_NORMAL, (1 ? ("__builtin_memcpy" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_memcpy", "__builtin_memcpy" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_PTR_CONST_PTR_SIZE], builtin_types[BT_FN_PTR_PTR_CONST_PTR_SIZE], BUILT_IN_MEMCPY, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_MEMCPY] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_MEMCPY] = decl; }
if ("__builtin_memmove") { tree decl; if (strncmp ("__builtin_memmove", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735350, "?"); if (!1) decl = builtin_function ("__builtin_memmove", builtin_types[BT_FN_PTR_PTR_CONST_PTR_SIZE], BUILT_IN_MEMMOVE, BUILT_IN_NORMAL, (1 ? ("__builtin_memmove" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_memmove", "__builtin_memmove" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_PTR_CONST_PTR_SIZE], builtin_types[BT_FN_PTR_PTR_CONST_PTR_SIZE], BUILT_IN_MEMMOVE, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_MEMMOVE] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_MEMMOVE] = decl; }
if ("__builtin_mempcpy") { tree decl; if (strncmp ("__builtin_mempcpy", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735351, "?"); if (!1) decl = builtin_function ("__builtin_mempcpy", builtin_types[BT_FN_PTR_PTR_CONST_PTR_SIZE], BUILT_IN_MEMPCPY, BUILT_IN_NORMAL, (1 ? ("__builtin_mempcpy" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_mempcpy", "__builtin_mempcpy" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_PTR_CONST_PTR_SIZE], builtin_types[BT_FN_PTR_PTR_CONST_PTR_SIZE], BUILT_IN_MEMPCPY, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_MEMPCPY] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_MEMPCPY] = decl; }
if ("__builtin_memset") { tree decl; if (strncmp ("__builtin_memset", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735352, "?"); if (!1) decl = builtin_function ("__builtin_memset", builtin_types[BT_FN_PTR_PTR_INT_SIZE], BUILT_IN_MEMSET, BUILT_IN_NORMAL, (1 ? ("__builtin_memset" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_memset", "__builtin_memset" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_PTR_INT_SIZE], builtin_types[BT_FN_PTR_PTR_INT_SIZE], BUILT_IN_MEMSET, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_MEMSET] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_MEMSET] = decl; }
if ("__builtin_rindex") { tree decl; if (strncmp ("__builtin_rindex", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735353, "?"); if (!1) decl = builtin_function ("__builtin_rindex", builtin_types[BT_FN_STRING1_CONST_STRING1_INT], BUILT_IN_RINDEX, BUILT_IN_NORMAL, (1 ? ("__builtin_rindex" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_rindex", "__builtin_rindex" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_CONST_STRING1_INT], builtin_types[BT_FN_STRING1_CONST_STRING1_INT], BUILT_IN_RINDEX, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_RINDEX] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_RINDEX] = decl; }
if ("__builtin_stpcpy") { tree decl; if (strncmp ("__builtin_stpcpy", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735354, "?"); if (!1) decl = builtin_function ("__builtin_stpcpy", builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1], BUILT_IN_STPCPY, BUILT_IN_NORMAL, (1 ? ("__builtin_stpcpy" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_stpcpy", "__builtin_stpcpy" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1], builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1], BUILT_IN_STPCPY, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_STPCPY] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_STPCPY] = decl; }
if ("__builtin_strcat") { tree decl; if (strncmp ("__builtin_strcat", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735355, "?"); if (!1) decl = builtin_function ("__builtin_strcat", builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1], BUILT_IN_STRCAT, BUILT_IN_NORMAL, (1 ? ("__builtin_strcat" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_strcat", "__builtin_strcat" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1], builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1], BUILT_IN_STRCAT, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_STRCAT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRCAT] = decl; }
if ("__builtin_strchr") { tree decl; if (strncmp ("__builtin_strchr", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735356, "?"); if (!1) decl = builtin_function ("__builtin_strchr", builtin_types[BT_FN_STRING1_CONST_STRING1_INT], BUILT_IN_STRCHR, BUILT_IN_NORMAL, (1 ? ("__builtin_strchr" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_strchr", "__builtin_strchr" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_CONST_STRING1_INT], builtin_types[BT_FN_STRING1_CONST_STRING1_INT], BUILT_IN_STRCHR, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_STRCHR] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRCHR] = decl; }
if ("__builtin_strcmp") { tree decl; if (strncmp ("__builtin_strcmp", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735357, "?"); if (!1) decl = builtin_function ("__builtin_strcmp", builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1], BUILT_IN_STRCMP, BUILT_IN_NORMAL, (1 ? ("__builtin_strcmp" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_strcmp", "__builtin_strcmp" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1], builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1], BUILT_IN_STRCMP, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_STRCMP] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRCMP] = decl; }
if ("__builtin_strcpy") { tree decl; if (strncmp ("__builtin_strcpy", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735358, "?"); if (!1) decl = builtin_function ("__builtin_strcpy", builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1], BUILT_IN_STRCPY, BUILT_IN_NORMAL, (1 ? ("__builtin_strcpy" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_strcpy", "__builtin_strcpy" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1], builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1], BUILT_IN_STRCPY, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_STRCPY] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRCPY] = decl; }
if ("__builtin_strcspn") { tree decl; if (strncmp ("__builtin_strcspn", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735359, "?"); if (!1) decl = builtin_function ("__builtin_strcspn", builtin_types[BT_FN_SIZE_CONST_STRING1_CONST_STRING1], BUILT_IN_STRCSPN, BUILT_IN_NORMAL, (1 ? ("__builtin_strcspn" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_strcspn", "__builtin_strcspn" + strlen ("__builtin_"), builtin_types[BT_FN_SIZE_CONST_STRING1_CONST_STRING1], builtin_types[BT_FN_SIZE_CONST_STRING1_CONST_STRING1], BUILT_IN_STRCSPN, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_STRCSPN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRCSPN] = decl; }
if ("__builtin_strdup") { tree decl; if (strncmp ("__builtin_strdup", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735360, "?"); if (!1) decl = builtin_function ("__builtin_strdup", builtin_types[BT_FN_STRING1_CONST_STRING1], BUILT_IN_STRDUP, BUILT_IN_NORMAL, (1 ? ("__builtin_strdup" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_MALLOC_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_strdup", "__builtin_strdup" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_CONST_STRING1], builtin_types[BT_FN_STRING1_CONST_STRING1], BUILT_IN_STRDUP, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_MALLOC_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_STRDUP] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_STRDUP] = decl; }
if ("__builtin_strlen") { tree decl; if (strncmp ("__builtin_strlen", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735361, "?"); if (!1) decl = builtin_function ("__builtin_strlen", builtin_types[BT_FN_SIZE_CONST_STRING1], BUILT_IN_STRLEN, BUILT_IN_NORMAL, (1 ? ("__builtin_strlen" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_strlen", "__builtin_strlen" + strlen ("__builtin_"), builtin_types[BT_FN_SIZE_CONST_STRING1], builtin_types[BT_FN_SIZE_CONST_STRING1], BUILT_IN_STRLEN, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_STRLEN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRLEN] = decl; }
if ("__builtin_strncat") { tree decl; if (strncmp ("__builtin_strncat", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735362, "?"); if (!1) decl = builtin_function ("__builtin_strncat", builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1_SIZE], BUILT_IN_STRNCAT, BUILT_IN_NORMAL, (1 ? ("__builtin_strncat" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_strncat", "__builtin_strncat" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1_SIZE], builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1_SIZE], BUILT_IN_STRNCAT, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_STRNCAT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRNCAT] = decl; }
if ("__builtin_strncmp") { tree decl; if (strncmp ("__builtin_strncmp", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735363, "?"); if (!1) decl = builtin_function ("__builtin_strncmp", builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_SIZE], BUILT_IN_STRNCMP, BUILT_IN_NORMAL, (1 ? ("__builtin_strncmp" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_strncmp", "__builtin_strncmp" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_SIZE], builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_SIZE], BUILT_IN_STRNCMP, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_STRNCMP] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRNCMP] = decl; }
if ("__builtin_strncpy") { tree decl; if (strncmp ("__builtin_strncpy", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735364, "?"); if (!1) decl = builtin_function ("__builtin_strncpy", builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1_SIZE], BUILT_IN_STRNCPY, BUILT_IN_NORMAL, (1 ? ("__builtin_strncpy" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_strncpy", "__builtin_strncpy" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1_SIZE], builtin_types[BT_FN_STRING1_STRING1_CONST_STRING1_SIZE], BUILT_IN_STRNCPY, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_STRNCPY] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRNCPY] = decl; }
if ("__builtin_strpbrk") { tree decl; if (strncmp ("__builtin_strpbrk", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735365, "?"); if (!1) decl = builtin_function ("__builtin_strpbrk", builtin_types[BT_FN_STRING1_CONST_STRING1_CONST_STRING1], BUILT_IN_STRPBRK, BUILT_IN_NORMAL, (1 ? ("__builtin_strpbrk" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_strpbrk", "__builtin_strpbrk" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_CONST_STRING1_CONST_STRING1], builtin_types[BT_FN_STRING1_CONST_STRING1_CONST_STRING1], BUILT_IN_STRPBRK, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_STRPBRK] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRPBRK] = decl; }
if ("__builtin_strrchr") { tree decl; if (strncmp ("__builtin_strrchr", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735366, "?"); if (!1) decl = builtin_function ("__builtin_strrchr", builtin_types[BT_FN_STRING1_CONST_STRING1_INT], BUILT_IN_STRRCHR, BUILT_IN_NORMAL, (1 ? ("__builtin_strrchr" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_strrchr", "__builtin_strrchr" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_CONST_STRING1_INT], builtin_types[BT_FN_STRING1_CONST_STRING1_INT], BUILT_IN_STRRCHR, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_STRRCHR] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRRCHR] = decl; }
if ("__builtin_strspn") { tree decl; if (strncmp ("__builtin_strspn", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735367, "?"); if (!1) decl = builtin_function ("__builtin_strspn", builtin_types[BT_FN_SIZE_CONST_STRING1_CONST_STRING1], BUILT_IN_STRSPN, BUILT_IN_NORMAL, (1 ? ("__builtin_strspn" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_strspn", "__builtin_strspn" + strlen ("__builtin_"), builtin_types[BT_FN_SIZE_CONST_STRING1_CONST_STRING1], builtin_types[BT_FN_SIZE_CONST_STRING1_CONST_STRING1], BUILT_IN_STRSPN, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_STRSPN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRSPN] = decl; }
if ("__builtin_strstr") { tree decl; if (strncmp ("__builtin_strstr", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735368, "?"); if (!1) decl = builtin_function ("__builtin_strstr", builtin_types[BT_FN_STRING1_CONST_STRING1_CONST_STRING1], BUILT_IN_STRSTR, BUILT_IN_NORMAL, (1 ? ("__builtin_strstr" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_strstr", "__builtin_strstr" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_CONST_STRING1_CONST_STRING1], builtin_types[BT_FN_STRING1_CONST_STRING1_CONST_STRING1], BUILT_IN_STRSTR, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_STRSTR] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRSTR] = decl; }
if ("__builtin_fprintf") { tree decl; if (strncmp ("__builtin_fprintf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735371, "?"); if (!1) decl = builtin_function ("__builtin_fprintf", builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VAR], BUILT_IN_FPRINTF, BUILT_IN_NORMAL, (1 ? ("__builtin_fprintf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_PRINTF_2_3]); else decl = builtin_function_2 ("__builtin_fprintf", "__builtin_fprintf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VAR], builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VAR], BUILT_IN_FPRINTF, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_FORMAT_PRINTF_2_3]); built_in_decls[(int) BUILT_IN_FPRINTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FPRINTF] = decl; }
if ("__builtin_fprintf_unlocked") { tree decl; if (strncmp ("__builtin_fprintf_unlocked", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735372, "?"); if (!1) decl = builtin_function ("__builtin_fprintf_unlocked", builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VAR], BUILT_IN_FPRINTF_UNLOCKED, BUILT_IN_NORMAL, (1 ? ("__builtin_fprintf_unlocked" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_PRINTF_2_3]); else decl = builtin_function_2 ("__builtin_fprintf_unlocked", "__builtin_fprintf_unlocked" + strlen ("__builtin_"), builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VAR], builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VAR], BUILT_IN_FPRINTF_UNLOCKED, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_FORMAT_PRINTF_2_3]); built_in_decls[(int) BUILT_IN_FPRINTF_UNLOCKED] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_FPRINTF_UNLOCKED] = decl; }
if ("__builtin_fputc") { tree decl; if (strncmp ("__builtin_fputc", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735373, "?"); if (!1) decl = builtin_function ("__builtin_fputc", builtin_types[BT_FN_INT_INT_FILEPTR], BUILT_IN_FPUTC, BUILT_IN_NORMAL, (1 ? ("__builtin_fputc" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_2]); else decl = builtin_function_2 ("__builtin_fputc", "__builtin_fputc" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT_FILEPTR], builtin_types[BT_FN_INT_INT_FILEPTR], BUILT_IN_FPUTC, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_2]); built_in_decls[(int) BUILT_IN_FPUTC] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FPUTC] = decl; }
if ("__builtin_fputc_unlocked") { tree decl; if (strncmp ("__builtin_fputc_unlocked", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735374, "?"); if (!1) decl = builtin_function ("__builtin_fputc_unlocked", builtin_types[BT_FN_INT_INT_FILEPTR], BUILT_IN_FPUTC_UNLOCKED, BUILT_IN_NORMAL, (1 ? ("__builtin_fputc_unlocked" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_2]); else decl = builtin_function_2 ("__builtin_fputc_unlocked", "__builtin_fputc_unlocked" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT_FILEPTR], builtin_types[BT_FN_INT_INT_FILEPTR], BUILT_IN_FPUTC_UNLOCKED, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_2]); built_in_decls[(int) BUILT_IN_FPUTC_UNLOCKED] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_FPUTC_UNLOCKED] = decl; }
if ("__builtin_fputs") { tree decl; if (strncmp ("__builtin_fputs", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735375, "?"); if (!1) decl = builtin_function ("__builtin_fputs", builtin_types[BT_FN_INT_CONST_STRING1_FILEPTR], BUILT_IN_FPUTS, BUILT_IN_NORMAL, (1 ? ("__builtin_fputs" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_fputs", "__builtin_fputs" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_FILEPTR], builtin_types[BT_FN_INT_CONST_STRING1_FILEPTR], BUILT_IN_FPUTS, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_FPUTS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FPUTS] = decl; }
if ("__builtin_fputs_unlocked") { tree decl; if (strncmp ("__builtin_fputs_unlocked", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735376, "?"); if (!1) decl = builtin_function ("__builtin_fputs_unlocked", builtin_types[BT_FN_INT_CONST_STRING1_FILEPTR], BUILT_IN_FPUTS_UNLOCKED, BUILT_IN_NORMAL, (1 ? ("__builtin_fputs_unlocked" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); else decl = builtin_function_2 ("__builtin_fputs_unlocked", "__builtin_fputs_unlocked" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_FILEPTR], builtin_types[BT_FN_INT_CONST_STRING1_FILEPTR], BUILT_IN_FPUTS_UNLOCKED, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2]); built_in_decls[(int) BUILT_IN_FPUTS_UNLOCKED] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_FPUTS_UNLOCKED] = decl; }
if ("__builtin_fscanf") { tree decl; if (strncmp ("__builtin_fscanf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735377, "?"); if (!1) decl = builtin_function ("__builtin_fscanf", builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VAR], BUILT_IN_FSCANF, BUILT_IN_NORMAL, (1 ? ("__builtin_fscanf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_SCANF_2_3]); else decl = builtin_function_2 ("__builtin_fscanf", "__builtin_fscanf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VAR], builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VAR], BUILT_IN_FSCANF, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_FORMAT_SCANF_2_3]); built_in_decls[(int) BUILT_IN_FSCANF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FSCANF] = decl; }
if ("__builtin_fwrite") { tree decl; if (strncmp ("__builtin_fwrite", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735378, "?"); if (!1) decl = builtin_function ("__builtin_fwrite", builtin_types[BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR], BUILT_IN_FWRITE, BUILT_IN_NORMAL, (1 ? ("__builtin_fwrite" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_4]); else decl = builtin_function_2 ("__builtin_fwrite", "__builtin_fwrite" + strlen ("__builtin_"), builtin_types[BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR], builtin_types[BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR], BUILT_IN_FWRITE, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_4]); built_in_decls[(int) BUILT_IN_FWRITE] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FWRITE] = decl; }
if ("__builtin_fwrite_unlocked") { tree decl; if (strncmp ("__builtin_fwrite_unlocked", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735379, "?"); if (!1) decl = builtin_function ("__builtin_fwrite_unlocked", builtin_types[BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR], BUILT_IN_FWRITE_UNLOCKED, BUILT_IN_NORMAL, (1 ? ("__builtin_fwrite_unlocked" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_4]); else decl = builtin_function_2 ("__builtin_fwrite_unlocked", "__builtin_fwrite_unlocked" + strlen ("__builtin_"), builtin_types[BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR], builtin_types[BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR], BUILT_IN_FWRITE_UNLOCKED, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_4]); built_in_decls[(int) BUILT_IN_FWRITE_UNLOCKED] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_FWRITE_UNLOCKED] = decl; }
if ("__builtin_printf") { tree decl; if (strncmp ("__builtin_printf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735380, "?"); if (!1) decl = builtin_function ("__builtin_printf", builtin_types[BT_FN_INT_CONST_STRING1_VAR], BUILT_IN_PRINTF, BUILT_IN_NORMAL, (1 ? ("__builtin_printf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_PRINTF_1_2]); else decl = builtin_function_2 ("__builtin_printf", "__builtin_printf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_VAR], builtin_types[BT_FN_INT_CONST_STRING1_VAR], BUILT_IN_PRINTF, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_FORMAT_PRINTF_1_2]); built_in_decls[(int) BUILT_IN_PRINTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_PRINTF] = decl; }
if ("__builtin_printf_unlocked") { tree decl; if (strncmp ("__builtin_printf_unlocked", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735381, "?"); if (!1) decl = builtin_function ("__builtin_printf_unlocked", builtin_types[BT_FN_INT_CONST_STRING1_VAR], BUILT_IN_PRINTF_UNLOCKED, BUILT_IN_NORMAL, (1 ? ("__builtin_printf_unlocked" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_PRINTF_1_2]); else decl = builtin_function_2 ("__builtin_printf_unlocked", "__builtin_printf_unlocked" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_VAR], builtin_types[BT_FN_INT_CONST_STRING1_VAR], BUILT_IN_PRINTF_UNLOCKED, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_FORMAT_PRINTF_1_2]); built_in_decls[(int) BUILT_IN_PRINTF_UNLOCKED] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_PRINTF_UNLOCKED] = decl; }
if ("__builtin_putchar") { tree decl; if (strncmp ("__builtin_putchar", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735382, "?"); if (!1) decl = builtin_function ("__builtin_putchar", builtin_types[BT_FN_INT_INT], BUILT_IN_PUTCHAR, BUILT_IN_NORMAL, (1 ? ("__builtin_putchar" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_putchar", "__builtin_putchar" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_PUTCHAR, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_PUTCHAR] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_PUTCHAR] = decl; }
if ("__builtin_putchar_unlocked") { tree decl; if (strncmp ("__builtin_putchar_unlocked", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735383, "?"); if (!1) decl = builtin_function ("__builtin_putchar_unlocked", builtin_types[BT_FN_INT_INT], BUILT_IN_PUTCHAR_UNLOCKED, BUILT_IN_NORMAL, (1 ? ("__builtin_putchar_unlocked" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_putchar_unlocked", "__builtin_putchar_unlocked" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_PUTCHAR_UNLOCKED, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_PUTCHAR_UNLOCKED] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_PUTCHAR_UNLOCKED] = decl; }
if ("__builtin_puts") { tree decl; if (strncmp ("__builtin_puts", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735384, "?"); if (!1) decl = builtin_function ("__builtin_puts", builtin_types[BT_FN_INT_CONST_STRING1], BUILT_IN_PUTS, BUILT_IN_NORMAL, (1 ? ("__builtin_puts" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_puts", "__builtin_puts" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1], builtin_types[BT_FN_INT_CONST_STRING1], BUILT_IN_PUTS, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_PUTS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_PUTS] = decl; }
if ("__builtin_puts_unlocked") { tree decl; if (strncmp ("__builtin_puts_unlocked", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735385, "?"); if (!1) decl = builtin_function ("__builtin_puts_unlocked", builtin_types[BT_FN_INT_CONST_STRING1], BUILT_IN_PUTS_UNLOCKED, BUILT_IN_NORMAL, (1 ? ("__builtin_puts_unlocked" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1]); else decl = builtin_function_2 ("__builtin_puts_unlocked", "__builtin_puts_unlocked" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1], builtin_types[BT_FN_INT_CONST_STRING1], BUILT_IN_PUTS_UNLOCKED, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1]); built_in_decls[(int) BUILT_IN_PUTS_UNLOCKED] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_PUTS_UNLOCKED] = decl; }
if ("__builtin_scanf") { tree decl; if (strncmp ("__builtin_scanf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735386, "?"); if (!1) decl = builtin_function ("__builtin_scanf", builtin_types[BT_FN_INT_CONST_STRING1_VAR], BUILT_IN_SCANF, BUILT_IN_NORMAL, (1 ? ("__builtin_scanf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_SCANF_1_2]); else decl = builtin_function_2 ("__builtin_scanf", "__builtin_scanf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_VAR], builtin_types[BT_FN_INT_CONST_STRING1_VAR], BUILT_IN_SCANF, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_FORMAT_SCANF_1_2]); built_in_decls[(int) BUILT_IN_SCANF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SCANF] = decl; }
if ("__builtin_snprintf") { tree decl; if (strncmp ("__builtin_snprintf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735387, "?"); if (!1) decl = builtin_function ("__builtin_snprintf", builtin_types[BT_FN_INT_STRING1_SIZE_CONST_STRING1_VAR], BUILT_IN_SNPRINTF, BUILT_IN_NORMAL, (1 ? ("__builtin_snprintf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_PRINTF_3_4]); else decl = builtin_function_2 ("__builtin_snprintf", "__builtin_snprintf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_STRING1_SIZE_CONST_STRING1_VAR], builtin_types[BT_FN_INT_STRING1_SIZE_CONST_STRING1_VAR], BUILT_IN_SNPRINTF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_FORMAT_PRINTF_3_4]); built_in_decls[(int) BUILT_IN_SNPRINTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SNPRINTF] = decl; }
if ("__builtin_sprintf") { tree decl; if (strncmp ("__builtin_sprintf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735388, "?"); if (!1) decl = builtin_function ("__builtin_sprintf", builtin_types[BT_FN_INT_STRING1_CONST_STRING1_VAR], BUILT_IN_SPRINTF, BUILT_IN_NORMAL, (1 ? ("__builtin_sprintf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_PRINTF_2_3]); else decl = builtin_function_2 ("__builtin_sprintf", "__builtin_sprintf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_STRING1_CONST_STRING1_VAR], builtin_types[BT_FN_INT_STRING1_CONST_STRING1_VAR], BUILT_IN_SPRINTF, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_FORMAT_PRINTF_2_3]); built_in_decls[(int) BUILT_IN_SPRINTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SPRINTF] = decl; }
if ("__builtin_sscanf") { tree decl; if (strncmp ("__builtin_sscanf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735389, "?"); if (!1) decl = builtin_function ("__builtin_sscanf", builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR], BUILT_IN_SSCANF, BUILT_IN_NORMAL, (1 ? ("__builtin_sscanf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_SCANF_2_3]); else decl = builtin_function_2 ("__builtin_sscanf", "__builtin_sscanf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR], builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR], BUILT_IN_SSCANF, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_FORMAT_SCANF_2_3]); built_in_decls[(int) BUILT_IN_SSCANF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SSCANF] = decl; }
if ("__builtin_vfprintf") { tree decl; if (strncmp ("__builtin_vfprintf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735390, "?"); if (!1) decl = builtin_function ("__builtin_vfprintf", builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VALIST_ARG], BUILT_IN_VFPRINTF, BUILT_IN_NORMAL, (1 ? ("__builtin_vfprintf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_PRINTF_2_0]); else decl = builtin_function_2 ("__builtin_vfprintf", "__builtin_vfprintf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VALIST_ARG], builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VALIST_ARG], BUILT_IN_VFPRINTF, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_FORMAT_PRINTF_2_0]); built_in_decls[(int) BUILT_IN_VFPRINTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_VFPRINTF] = decl; }
if ("__builtin_vfscanf") { tree decl; if (strncmp ("__builtin_vfscanf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735391, "?"); if (!1) decl = builtin_function ("__builtin_vfscanf", builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VALIST_ARG], BUILT_IN_VFSCANF, BUILT_IN_NORMAL, (1 ? ("__builtin_vfscanf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_SCANF_2_0]); else decl = builtin_function_2 ("__builtin_vfscanf", "__builtin_vfscanf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VALIST_ARG], builtin_types[BT_FN_INT_FILEPTR_CONST_STRING1_VALIST_ARG], BUILT_IN_VFSCANF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_FORMAT_SCANF_2_0]); built_in_decls[(int) BUILT_IN_VFSCANF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_VFSCANF] = decl; }
if ("__builtin_vprintf") { tree decl; if (strncmp ("__builtin_vprintf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735392, "?"); if (!1) decl = builtin_function ("__builtin_vprintf", builtin_types[BT_FN_INT_CONST_STRING1_VALIST_ARG], BUILT_IN_VPRINTF, BUILT_IN_NORMAL, (1 ? ("__builtin_vprintf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_PRINTF_1_0]); else decl = builtin_function_2 ("__builtin_vprintf", "__builtin_vprintf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_VALIST_ARG], builtin_types[BT_FN_INT_CONST_STRING1_VALIST_ARG], BUILT_IN_VPRINTF, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_FORMAT_PRINTF_1_0]); built_in_decls[(int) BUILT_IN_VPRINTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_VPRINTF] = decl; }
if ("__builtin_vscanf") { tree decl; if (strncmp ("__builtin_vscanf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735393, "?"); if (!1) decl = builtin_function ("__builtin_vscanf", builtin_types[BT_FN_INT_CONST_STRING1_VALIST_ARG], BUILT_IN_VSCANF, BUILT_IN_NORMAL, (1 ? ("__builtin_vscanf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_SCANF_1_0]); else decl = builtin_function_2 ("__builtin_vscanf", "__builtin_vscanf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_VALIST_ARG], builtin_types[BT_FN_INT_CONST_STRING1_VALIST_ARG], BUILT_IN_VSCANF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_FORMAT_SCANF_1_0]); built_in_decls[(int) BUILT_IN_VSCANF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_VSCANF] = decl; }
if ("__builtin_vsnprintf") { tree decl; if (strncmp ("__builtin_vsnprintf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735394, "?"); if (!1) decl = builtin_function ("__builtin_vsnprintf", builtin_types[BT_FN_INT_STRING1_SIZE_CONST_STRING1_VALIST_ARG], BUILT_IN_VSNPRINTF, BUILT_IN_NORMAL, (1 ? ("__builtin_vsnprintf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_PRINTF_3_0]); else decl = builtin_function_2 ("__builtin_vsnprintf", "__builtin_vsnprintf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_STRING1_SIZE_CONST_STRING1_VALIST_ARG], builtin_types[BT_FN_INT_STRING1_SIZE_CONST_STRING1_VALIST_ARG], BUILT_IN_VSNPRINTF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_FORMAT_PRINTF_3_0]); built_in_decls[(int) BUILT_IN_VSNPRINTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_VSNPRINTF] = decl; }
if ("__builtin_vsprintf") { tree decl; if (strncmp ("__builtin_vsprintf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735395, "?"); if (!1) decl = builtin_function ("__builtin_vsprintf", builtin_types[BT_FN_INT_STRING1_CONST_STRING1_VALIST_ARG], BUILT_IN_VSPRINTF, BUILT_IN_NORMAL, (1 ? ("__builtin_vsprintf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_PRINTF_2_0]); else decl = builtin_function_2 ("__builtin_vsprintf", "__builtin_vsprintf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_STRING1_CONST_STRING1_VALIST_ARG], builtin_types[BT_FN_INT_STRING1_CONST_STRING1_VALIST_ARG], BUILT_IN_VSPRINTF, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_FORMAT_PRINTF_2_0]); built_in_decls[(int) BUILT_IN_VSPRINTF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_VSPRINTF] = decl; }
if ("__builtin_vsscanf") { tree decl; if (strncmp ("__builtin_vsscanf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735396, "?"); if (!1) decl = builtin_function ("__builtin_vsscanf", builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VALIST_ARG], BUILT_IN_VSSCANF, BUILT_IN_NORMAL, (1 ? ("__builtin_vsscanf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_SCANF_2_0]); else decl = builtin_function_2 ("__builtin_vsscanf", "__builtin_vsscanf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VALIST_ARG], builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VALIST_ARG], BUILT_IN_VSSCANF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_FORMAT_SCANF_2_0]); built_in_decls[(int) BUILT_IN_VSSCANF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_VSSCANF] = decl; }
if ("__builtin_isalnum") { tree decl; if (strncmp ("__builtin_isalnum", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735399, "?"); if (!1) decl = builtin_function ("__builtin_isalnum", builtin_types[BT_FN_INT_INT], BUILT_IN_ISALNUM, BUILT_IN_NORMAL, (1 ? ("__builtin_isalnum" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isalnum", "__builtin_isalnum" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISALNUM, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISALNUM] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISALNUM] = decl; }
if ("__builtin_isalpha") { tree decl; if (strncmp ("__builtin_isalpha", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735400, "?"); if (!1) decl = builtin_function ("__builtin_isalpha", builtin_types[BT_FN_INT_INT], BUILT_IN_ISALPHA, BUILT_IN_NORMAL, (1 ? ("__builtin_isalpha" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isalpha", "__builtin_isalpha" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISALPHA, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISALPHA] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISALPHA] = decl; }
if ("__builtin_isascii") { tree decl; if (strncmp ("__builtin_isascii", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735401, "?"); if (!1) decl = builtin_function ("__builtin_isascii", builtin_types[BT_FN_INT_INT], BUILT_IN_ISASCII, BUILT_IN_NORMAL, (1 ? ("__builtin_isascii" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isascii", "__builtin_isascii" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISASCII, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISASCII] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_ISASCII] = decl; }
if ("__builtin_isblank") { tree decl; if (strncmp ("__builtin_isblank", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735402, "?"); if (!1) decl = builtin_function ("__builtin_isblank", builtin_types[BT_FN_INT_INT], BUILT_IN_ISBLANK, BUILT_IN_NORMAL, (1 ? ("__builtin_isblank" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isblank", "__builtin_isblank" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISBLANK, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISBLANK] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISBLANK] = decl; }
if ("__builtin_iscntrl") { tree decl; if (strncmp ("__builtin_iscntrl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735403, "?"); if (!1) decl = builtin_function ("__builtin_iscntrl", builtin_types[BT_FN_INT_INT], BUILT_IN_ISCNTRL, BUILT_IN_NORMAL, (1 ? ("__builtin_iscntrl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iscntrl", "__builtin_iscntrl" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISCNTRL, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISCNTRL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISCNTRL] = decl; }
if ("__builtin_isdigit") { tree decl; if (strncmp ("__builtin_isdigit", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735404, "?"); if (!1) decl = builtin_function ("__builtin_isdigit", builtin_types[BT_FN_INT_INT], BUILT_IN_ISDIGIT, BUILT_IN_NORMAL, (1 ? ("__builtin_isdigit" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isdigit", "__builtin_isdigit" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISDIGIT, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISDIGIT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISDIGIT] = decl; }
if ("__builtin_isgraph") { tree decl; if (strncmp ("__builtin_isgraph", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735405, "?"); if (!1) decl = builtin_function ("__builtin_isgraph", builtin_types[BT_FN_INT_INT], BUILT_IN_ISGRAPH, BUILT_IN_NORMAL, (1 ? ("__builtin_isgraph" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isgraph", "__builtin_isgraph" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISGRAPH, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISGRAPH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISGRAPH] = decl; }
if ("__builtin_islower") { tree decl; if (strncmp ("__builtin_islower", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735406, "?"); if (!1) decl = builtin_function ("__builtin_islower", builtin_types[BT_FN_INT_INT], BUILT_IN_ISLOWER, BUILT_IN_NORMAL, (1 ? ("__builtin_islower" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_islower", "__builtin_islower" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISLOWER, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISLOWER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISLOWER] = decl; }
if ("__builtin_isprint") { tree decl; if (strncmp ("__builtin_isprint", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735407, "?"); if (!1) decl = builtin_function ("__builtin_isprint", builtin_types[BT_FN_INT_INT], BUILT_IN_ISPRINT, BUILT_IN_NORMAL, (1 ? ("__builtin_isprint" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isprint", "__builtin_isprint" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISPRINT, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISPRINT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISPRINT] = decl; }
if ("__builtin_ispunct") { tree decl; if (strncmp ("__builtin_ispunct", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735408, "?"); if (!1) decl = builtin_function ("__builtin_ispunct", builtin_types[BT_FN_INT_INT], BUILT_IN_ISPUNCT, BUILT_IN_NORMAL, (1 ? ("__builtin_ispunct" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_ispunct", "__builtin_ispunct" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISPUNCT, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISPUNCT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISPUNCT] = decl; }
if ("__builtin_isspace") { tree decl; if (strncmp ("__builtin_isspace", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735409, "?"); if (!1) decl = builtin_function ("__builtin_isspace", builtin_types[BT_FN_INT_INT], BUILT_IN_ISSPACE, BUILT_IN_NORMAL, (1 ? ("__builtin_isspace" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isspace", "__builtin_isspace" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISSPACE, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISSPACE] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISSPACE] = decl; }
if ("__builtin_isupper") { tree decl; if (strncmp ("__builtin_isupper", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735410, "?"); if (!1) decl = builtin_function ("__builtin_isupper", builtin_types[BT_FN_INT_INT], BUILT_IN_ISUPPER, BUILT_IN_NORMAL, (1 ? ("__builtin_isupper" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isupper", "__builtin_isupper" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISUPPER, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISUPPER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISUPPER] = decl; }
if ("__builtin_isxdigit") { tree decl; if (strncmp ("__builtin_isxdigit", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735411, "?"); if (!1) decl = builtin_function ("__builtin_isxdigit", builtin_types[BT_FN_INT_INT], BUILT_IN_ISXDIGIT, BUILT_IN_NORMAL, (1 ? ("__builtin_isxdigit" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isxdigit", "__builtin_isxdigit" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ISXDIGIT, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISXDIGIT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISXDIGIT] = decl; }
if ("__builtin_toascii") { tree decl; if (strncmp ("__builtin_toascii", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735412, "?"); if (!1) decl = builtin_function ("__builtin_toascii", builtin_types[BT_FN_INT_INT], BUILT_IN_TOASCII, BUILT_IN_NORMAL, (1 ? ("__builtin_toascii" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_toascii", "__builtin_toascii" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_TOASCII, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_TOASCII] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_TOASCII] = decl; }
if ("__builtin_tolower") { tree decl; if (strncmp ("__builtin_tolower", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735413, "?"); if (!1) decl = builtin_function ("__builtin_tolower", builtin_types[BT_FN_INT_INT], BUILT_IN_TOLOWER, BUILT_IN_NORMAL, (1 ? ("__builtin_tolower" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_tolower", "__builtin_tolower" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_TOLOWER, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_TOLOWER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TOLOWER] = decl; }
if ("__builtin_toupper") { tree decl; if (strncmp ("__builtin_toupper", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735414, "?"); if (!1) decl = builtin_function ("__builtin_toupper", builtin_types[BT_FN_INT_INT], BUILT_IN_TOUPPER, BUILT_IN_NORMAL, (1 ? ("__builtin_toupper" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_toupper", "__builtin_toupper" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_TOUPPER, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_TOUPPER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TOUPPER] = decl; }
if ("__builtin_iswalnum") { tree decl; if (strncmp ("__builtin_iswalnum", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735417, "?"); if (!1) decl = builtin_function ("__builtin_iswalnum", builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWALNUM, BUILT_IN_NORMAL, (1 ? ("__builtin_iswalnum" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iswalnum", "__builtin_iswalnum" + strlen ("__builtin_"), builtin_types[BT_FN_INT_WINT], builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWALNUM, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISWALNUM] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISWALNUM] = decl; }
if ("__builtin_iswalpha") { tree decl; if (strncmp ("__builtin_iswalpha", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735418, "?"); if (!1) decl = builtin_function ("__builtin_iswalpha", builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWALPHA, BUILT_IN_NORMAL, (1 ? ("__builtin_iswalpha" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iswalpha", "__builtin_iswalpha" + strlen ("__builtin_"), builtin_types[BT_FN_INT_WINT], builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWALPHA, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISWALPHA] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISWALPHA] = decl; }
if ("__builtin_iswblank") { tree decl; if (strncmp ("__builtin_iswblank", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735419, "?"); if (!1) decl = builtin_function ("__builtin_iswblank", builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWBLANK, BUILT_IN_NORMAL, (1 ? ("__builtin_iswblank" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iswblank", "__builtin_iswblank" + strlen ("__builtin_"), builtin_types[BT_FN_INT_WINT], builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWBLANK, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISWBLANK] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISWBLANK] = decl; }
if ("__builtin_iswcntrl") { tree decl; if (strncmp ("__builtin_iswcntrl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735420, "?"); if (!1) decl = builtin_function ("__builtin_iswcntrl", builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWCNTRL, BUILT_IN_NORMAL, (1 ? ("__builtin_iswcntrl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iswcntrl", "__builtin_iswcntrl" + strlen ("__builtin_"), builtin_types[BT_FN_INT_WINT], builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWCNTRL, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISWCNTRL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISWCNTRL] = decl; }
if ("__builtin_iswdigit") { tree decl; if (strncmp ("__builtin_iswdigit", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735421, "?"); if (!1) decl = builtin_function ("__builtin_iswdigit", builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWDIGIT, BUILT_IN_NORMAL, (1 ? ("__builtin_iswdigit" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iswdigit", "__builtin_iswdigit" + strlen ("__builtin_"), builtin_types[BT_FN_INT_WINT], builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWDIGIT, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISWDIGIT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISWDIGIT] = decl; }
if ("__builtin_iswgraph") { tree decl; if (strncmp ("__builtin_iswgraph", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735422, "?"); if (!1) decl = builtin_function ("__builtin_iswgraph", builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWGRAPH, BUILT_IN_NORMAL, (1 ? ("__builtin_iswgraph" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iswgraph", "__builtin_iswgraph" + strlen ("__builtin_"), builtin_types[BT_FN_INT_WINT], builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWGRAPH, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISWGRAPH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISWGRAPH] = decl; }
if ("__builtin_iswlower") { tree decl; if (strncmp ("__builtin_iswlower", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735423, "?"); if (!1) decl = builtin_function ("__builtin_iswlower", builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWLOWER, BUILT_IN_NORMAL, (1 ? ("__builtin_iswlower" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iswlower", "__builtin_iswlower" + strlen ("__builtin_"), builtin_types[BT_FN_INT_WINT], builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWLOWER, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISWLOWER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISWLOWER] = decl; }
if ("__builtin_iswprint") { tree decl; if (strncmp ("__builtin_iswprint", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735424, "?"); if (!1) decl = builtin_function ("__builtin_iswprint", builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWPRINT, BUILT_IN_NORMAL, (1 ? ("__builtin_iswprint" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iswprint", "__builtin_iswprint" + strlen ("__builtin_"), builtin_types[BT_FN_INT_WINT], builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWPRINT, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISWPRINT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISWPRINT] = decl; }
if ("__builtin_iswpunct") { tree decl; if (strncmp ("__builtin_iswpunct", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735425, "?"); if (!1) decl = builtin_function ("__builtin_iswpunct", builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWPUNCT, BUILT_IN_NORMAL, (1 ? ("__builtin_iswpunct" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iswpunct", "__builtin_iswpunct" + strlen ("__builtin_"), builtin_types[BT_FN_INT_WINT], builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWPUNCT, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISWPUNCT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISWPUNCT] = decl; }
if ("__builtin_iswspace") { tree decl; if (strncmp ("__builtin_iswspace", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735426, "?"); if (!1) decl = builtin_function ("__builtin_iswspace", builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWSPACE, BUILT_IN_NORMAL, (1 ? ("__builtin_iswspace" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iswspace", "__builtin_iswspace" + strlen ("__builtin_"), builtin_types[BT_FN_INT_WINT], builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWSPACE, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISWSPACE] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISWSPACE] = decl; }
if ("__builtin_iswupper") { tree decl; if (strncmp ("__builtin_iswupper", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735427, "?"); if (!1) decl = builtin_function ("__builtin_iswupper", builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWUPPER, BUILT_IN_NORMAL, (1 ? ("__builtin_iswupper" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iswupper", "__builtin_iswupper" + strlen ("__builtin_"), builtin_types[BT_FN_INT_WINT], builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWUPPER, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISWUPPER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISWUPPER] = decl; }
if ("__builtin_iswxdigit") { tree decl; if (strncmp ("__builtin_iswxdigit", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735428, "?"); if (!1) decl = builtin_function ("__builtin_iswxdigit", builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWXDIGIT, BUILT_IN_NORMAL, (1 ? ("__builtin_iswxdigit" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_iswxdigit", "__builtin_iswxdigit" + strlen ("__builtin_"), builtin_types[BT_FN_INT_WINT], builtin_types[BT_FN_INT_WINT], BUILT_IN_ISWXDIGIT, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISWXDIGIT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISWXDIGIT] = decl; }
if ("__builtin_towlower") { tree decl; if (strncmp ("__builtin_towlower", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735429, "?"); if (!1) decl = builtin_function ("__builtin_towlower", builtin_types[BT_FN_WINT_WINT], BUILT_IN_TOWLOWER, BUILT_IN_NORMAL, (1 ? ("__builtin_towlower" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_towlower", "__builtin_towlower" + strlen ("__builtin_"), builtin_types[BT_FN_WINT_WINT], builtin_types[BT_FN_WINT_WINT], BUILT_IN_TOWLOWER, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_TOWLOWER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TOWLOWER] = decl; }
if ("__builtin_towupper") { tree decl; if (strncmp ("__builtin_towupper", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735430, "?"); if (!1) decl = builtin_function ("__builtin_towupper", builtin_types[BT_FN_WINT_WINT], BUILT_IN_TOWUPPER, BUILT_IN_NORMAL, (1 ? ("__builtin_towupper" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_towupper", "__builtin_towupper" + strlen ("__builtin_"), builtin_types[BT_FN_WINT_WINT], builtin_types[BT_FN_WINT_WINT], BUILT_IN_TOWUPPER, BUILT_IN_NORMAL, 1, !flag_isoc94, built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_TOWUPPER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TOWUPPER] = decl; }
if ("__builtin_abort") { tree decl; if (strncmp ("__builtin_abort", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735433, "?"); if (!1) decl = builtin_function ("__builtin_abort", builtin_types[BT_FN_VOID], BUILT_IN_ABORT, BUILT_IN_NORMAL, (1 ? ("__builtin_abort" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_abort", "__builtin_abort" + strlen ("__builtin_"), builtin_types[BT_FN_VOID], builtin_types[BT_FN_VOID], BUILT_IN_ABORT, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ABORT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ABORT] = decl; }
if ("__builtin_abs") { tree decl; if (strncmp ("__builtin_abs", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735434, "?"); if (!1) decl = builtin_function ("__builtin_abs", builtin_types[BT_FN_INT_INT], BUILT_IN_ABS, BUILT_IN_NORMAL, (1 ? ("__builtin_abs" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_abs", "__builtin_abs" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_FN_INT_INT], BUILT_IN_ABS, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ABS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ABS] = decl; }
if ("__builtin_aggregate_incoming_address") { tree decl; if (strncmp ("__builtin_aggregate_incoming_address", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735435, "?"); if (!0) decl = builtin_function ("__builtin_aggregate_incoming_address", builtin_types[BT_FN_PTR_VAR], BUILT_IN_AGGREGATE_INCOMING_ADDRESS, BUILT_IN_NORMAL, (0 ? ("__builtin_aggregate_incoming_address" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_aggregate_incoming_address", "__builtin_aggregate_incoming_address" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_VAR], builtin_types[BT_LAST], BUILT_IN_AGGREGATE_INCOMING_ADDRESS, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_AGGREGATE_INCOMING_ADDRESS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_AGGREGATE_INCOMING_ADDRESS] = decl; }
if ("__builtin_alloca") { tree decl; if (strncmp ("__builtin_alloca", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735436, "?"); if (!1) decl = builtin_function ("__builtin_alloca", builtin_types[BT_FN_PTR_SIZE], BUILT_IN_ALLOCA, BUILT_IN_NORMAL, (1 ? ("__builtin_alloca" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_MALLOC_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_alloca", "__builtin_alloca" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_SIZE], builtin_types[BT_FN_PTR_SIZE], BUILT_IN_ALLOCA, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_MALLOC_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ALLOCA] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_ALLOCA] = decl; }
if ("__builtin_apply") { tree decl; if (strncmp ("__builtin_apply", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735437, "?"); if (!0) decl = builtin_function ("__builtin_apply", builtin_types[BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE], BUILT_IN_APPLY, BUILT_IN_NORMAL, (0 ? ("__builtin_apply" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_apply", "__builtin_apply" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE], builtin_types[BT_LAST], BUILT_IN_APPLY, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_APPLY] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_APPLY] = decl; }
if ("__builtin_apply_args") { tree decl; if (strncmp ("__builtin_apply_args", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735438, "?"); if (!0) decl = builtin_function ("__builtin_apply_args", builtin_types[BT_FN_PTR_VAR], BUILT_IN_APPLY_ARGS, BUILT_IN_NORMAL, (0 ? ("__builtin_apply_args" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_apply_args", "__builtin_apply_args" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_VAR], builtin_types[BT_LAST], BUILT_IN_APPLY_ARGS, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_APPLY_ARGS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_APPLY_ARGS] = decl; }
if ("__builtin_args_info") { tree decl; if (strncmp ("__builtin_args_info", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735439, "?"); if (!0) decl = builtin_function ("__builtin_args_info", builtin_types[BT_FN_INT_INT], BUILT_IN_ARGS_INFO, BUILT_IN_NORMAL, (0 ? ("__builtin_args_info" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_args_info", "__builtin_args_info" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_LAST], BUILT_IN_ARGS_INFO, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_ARGS_INFO] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ARGS_INFO] = decl; }
if ("__builtin_calloc") { tree decl; if (strncmp ("__builtin_calloc", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735440, "?"); if (!1) decl = builtin_function ("__builtin_calloc", builtin_types[BT_FN_PTR_SIZE_SIZE], BUILT_IN_CALLOC, BUILT_IN_NORMAL, (1 ? ("__builtin_calloc" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_MALLOC_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_calloc", "__builtin_calloc" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_SIZE_SIZE], builtin_types[BT_FN_PTR_SIZE_SIZE], BUILT_IN_CALLOC, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_MALLOC_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CALLOC] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CALLOC] = decl; }
if ("__builtin_classify_type") { tree decl; if (strncmp ("__builtin_classify_type", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735441, "?"); if (!0) decl = builtin_function ("__builtin_classify_type", builtin_types[BT_FN_INT_VAR], BUILT_IN_CLASSIFY_TYPE, BUILT_IN_NORMAL, (0 ? ("__builtin_classify_type" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_classify_type", "__builtin_classify_type" + strlen ("__builtin_"), builtin_types[BT_FN_INT_VAR], builtin_types[BT_LAST], BUILT_IN_CLASSIFY_TYPE, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_CLASSIFY_TYPE] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CLASSIFY_TYPE] = decl; }
if ("__builtin_clz") { tree decl; if (strncmp ("__builtin_clz", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735442, "?"); if (!0) decl = builtin_function ("__builtin_clz", builtin_types[BT_FN_INT_INT], BUILT_IN_CLZ, BUILT_IN_NORMAL, (0 ? ("__builtin_clz" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_clz", "__builtin_clz" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_LAST], BUILT_IN_CLZ, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CLZ] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CLZ] = decl; }
if ("__builtin_clzl") { tree decl; if (strncmp ("__builtin_clzl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735443, "?"); if (!0) decl = builtin_function ("__builtin_clzl", builtin_types[BT_FN_INT_LONG], BUILT_IN_CLZL, BUILT_IN_NORMAL, (0 ? ("__builtin_clzl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_clzl", "__builtin_clzl" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONG], builtin_types[BT_LAST], BUILT_IN_CLZL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CLZL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CLZL] = decl; }
if ("__builtin_clzll") { tree decl; if (strncmp ("__builtin_clzll", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735444, "?"); if (!0) decl = builtin_function ("__builtin_clzll", builtin_types[BT_FN_INT_LONGLONG], BUILT_IN_CLZLL, BUILT_IN_NORMAL, (0 ? ("__builtin_clzll" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_clzll", "__builtin_clzll" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONGLONG], builtin_types[BT_LAST], BUILT_IN_CLZLL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CLZLL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CLZLL] = decl; }
if ("__builtin_constant_p") { tree decl; if (strncmp ("__builtin_constant_p", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735445, "?"); if (!0) decl = builtin_function ("__builtin_constant_p", builtin_types[BT_FN_INT_VAR], BUILT_IN_CONSTANT_P, BUILT_IN_NORMAL, (0 ? ("__builtin_constant_p" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_constant_p", "__builtin_constant_p" + strlen ("__builtin_"), builtin_types[BT_FN_INT_VAR], builtin_types[BT_LAST], BUILT_IN_CONSTANT_P, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CONSTANT_P] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CONSTANT_P] = decl; }
if ("__builtin_ctz") { tree decl; if (strncmp ("__builtin_ctz", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735446, "?"); if (!0) decl = builtin_function ("__builtin_ctz", builtin_types[BT_FN_INT_INT], BUILT_IN_CTZ, BUILT_IN_NORMAL, (0 ? ("__builtin_ctz" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_ctz", "__builtin_ctz" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_LAST], BUILT_IN_CTZ, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CTZ] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CTZ] = decl; }
if ("__builtin_ctzl") { tree decl; if (strncmp ("__builtin_ctzl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735447, "?"); if (!0) decl = builtin_function ("__builtin_ctzl", builtin_types[BT_FN_INT_LONG], BUILT_IN_CTZL, BUILT_IN_NORMAL, (0 ? ("__builtin_ctzl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_ctzl", "__builtin_ctzl" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONG], builtin_types[BT_LAST], BUILT_IN_CTZL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CTZL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CTZL] = decl; }
if ("__builtin_ctzll") { tree decl; if (strncmp ("__builtin_ctzll", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735448, "?"); if (!0) decl = builtin_function ("__builtin_ctzll", builtin_types[BT_FN_INT_LONGLONG], BUILT_IN_CTZLL, BUILT_IN_NORMAL, (0 ? ("__builtin_ctzll" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_ctzll", "__builtin_ctzll" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONGLONG], builtin_types[BT_LAST], BUILT_IN_CTZLL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_CTZLL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_CTZLL] = decl; }
if ("__builtin_dcgettext") { tree decl; if (strncmp ("__builtin_dcgettext", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735449, "?"); if (!1) decl = builtin_function ("__builtin_dcgettext", builtin_types[BT_FN_STRING1_CONST_STRING1_CONST_STRING1_INT], BUILT_IN_DCGETTEXT, BUILT_IN_NORMAL, (1 ? ("__builtin_dcgettext" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_ARG_2]); else decl = builtin_function_2 ("__builtin_dcgettext", "__builtin_dcgettext" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_CONST_STRING1_CONST_STRING1_INT], builtin_types[BT_FN_STRING1_CONST_STRING1_CONST_STRING1_INT], BUILT_IN_DCGETTEXT, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_FORMAT_ARG_2]); built_in_decls[(int) BUILT_IN_DCGETTEXT] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_DCGETTEXT] = decl; }
if ("__builtin_dgettext") { tree decl; if (strncmp ("__builtin_dgettext", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735450, "?"); if (!1) decl = builtin_function ("__builtin_dgettext", builtin_types[BT_FN_STRING1_CONST_STRING1_CONST_STRING1], BUILT_IN_DGETTEXT, BUILT_IN_NORMAL, (1 ? ("__builtin_dgettext" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_ARG_2]); else decl = builtin_function_2 ("__builtin_dgettext", "__builtin_dgettext" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_CONST_STRING1_CONST_STRING1], builtin_types[BT_FN_STRING1_CONST_STRING1_CONST_STRING1], BUILT_IN_DGETTEXT, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_FORMAT_ARG_2]); built_in_decls[(int) BUILT_IN_DGETTEXT] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_DGETTEXT] = decl; }
if ("__builtin_dwarf_cfa") { tree decl; if (strncmp ("__builtin_dwarf_cfa", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735451, "?"); if (!0) decl = builtin_function ("__builtin_dwarf_cfa", builtin_types[BT_FN_PTR], BUILT_IN_DWARF_CFA, BUILT_IN_NORMAL, (0 ? ("__builtin_dwarf_cfa" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_dwarf_cfa", "__builtin_dwarf_cfa" + strlen ("__builtin_"), builtin_types[BT_FN_PTR], builtin_types[BT_LAST], BUILT_IN_DWARF_CFA, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_DWARF_CFA] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_DWARF_CFA] = decl; }
if ("__builtin_dwarf_sp_column") { tree decl; if (strncmp ("__builtin_dwarf_sp_column", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735452, "?"); if (!0) decl = builtin_function ("__builtin_dwarf_sp_column", builtin_types[BT_FN_UNSIGNED], BUILT_IN_DWARF_SP_COLUMN, BUILT_IN_NORMAL, (0 ? ("__builtin_dwarf_sp_column" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_dwarf_sp_column", "__builtin_dwarf_sp_column" + strlen ("__builtin_"), builtin_types[BT_FN_UNSIGNED], builtin_types[BT_LAST], BUILT_IN_DWARF_SP_COLUMN, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_DWARF_SP_COLUMN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_DWARF_SP_COLUMN] = decl; }
if ("__builtin_eh_return") { tree decl; if (strncmp ("__builtin_eh_return", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735453, "?"); if (!0) decl = builtin_function ("__builtin_eh_return", builtin_types[BT_FN_VOID_PTRMODE_PTR], BUILT_IN_EH_RETURN, BUILT_IN_NORMAL, (0 ? ("__builtin_eh_return" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_eh_return", "__builtin_eh_return" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_PTRMODE_PTR], builtin_types[BT_LAST], BUILT_IN_EH_RETURN, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_EH_RETURN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EH_RETURN] = decl; }
if ("__builtin_eh_return_data_regno") { tree decl; if (strncmp ("__builtin_eh_return_data_regno", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735454, "?"); if (!0) decl = builtin_function ("__builtin_eh_return_data_regno", builtin_types[BT_FN_INT_INT], BUILT_IN_EH_RETURN_DATA_REGNO, BUILT_IN_NORMAL, (0 ? ("__builtin_eh_return_data_regno" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_eh_return_data_regno", "__builtin_eh_return_data_regno" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_LAST], BUILT_IN_EH_RETURN_DATA_REGNO, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_EH_RETURN_DATA_REGNO] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EH_RETURN_DATA_REGNO] = decl; }
if ("__builtin_execl") { tree decl; if (strncmp ("__builtin_execl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735455, "?"); if (!1) decl = builtin_function ("__builtin_execl", builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR], BUILT_IN_EXECL, BUILT_IN_NORMAL, (1 ? ("__builtin_execl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_execl", "__builtin_execl" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR], builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR], BUILT_IN_EXECL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_EXECL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_EXECL] = decl; }
if ("__builtin_execlp") { tree decl; if (strncmp ("__builtin_execlp", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735456, "?"); if (!1) decl = builtin_function ("__builtin_execlp", builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR], BUILT_IN_EXECLP, BUILT_IN_NORMAL, (1 ? ("__builtin_execlp" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_execlp", "__builtin_execlp" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR], builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR], BUILT_IN_EXECLP, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_EXECLP] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_EXECLP] = decl; }
if ("__builtin_execle") { tree decl; if (strncmp ("__builtin_execle", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735457, "?"); if (!1) decl = builtin_function ("__builtin_execle", builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR], BUILT_IN_EXECLE, BUILT_IN_NORMAL, (1 ? ("__builtin_execle" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_execle", "__builtin_execle" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR], builtin_types[BT_FN_INT_CONST_STRING1_CONST_STRING1_VAR], BUILT_IN_EXECLE, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_EXECLE] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_EXECLE] = decl; }
if ("__builtin_execv") { tree decl; if (strncmp ("__builtin_execv", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735458, "?"); if (!1) decl = builtin_function ("__builtin_execv", builtin_types[BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1], BUILT_IN_EXECV, BUILT_IN_NORMAL, (1 ? ("__builtin_execv" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_execv", "__builtin_execv" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1], builtin_types[BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1], BUILT_IN_EXECV, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_EXECV] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_EXECV] = decl; }
if ("__builtin_execvp") { tree decl; if (strncmp ("__builtin_execvp", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735459, "?"); if (!1) decl = builtin_function ("__builtin_execvp", builtin_types[BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1], BUILT_IN_EXECVP, BUILT_IN_NORMAL, (1 ? ("__builtin_execvp" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_execvp", "__builtin_execvp" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1], builtin_types[BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1], BUILT_IN_EXECVP, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_EXECVP] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_EXECVP] = decl; }
if ("__builtin_execve") { tree decl; if (strncmp ("__builtin_execve", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735460, "?"); if (!1) decl = builtin_function ("__builtin_execve", builtin_types[BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1_PTR_CONST_STRING1], BUILT_IN_EXECVE, BUILT_IN_NORMAL, (1 ? ("__builtin_execve" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_execve", "__builtin_execve" + strlen ("__builtin_"), builtin_types[BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1_PTR_CONST_STRING1], builtin_types[BT_FN_INT_CONST_STRING1_PTR_CONST_STRING1_PTR_CONST_STRING1], BUILT_IN_EXECVE, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_EXECVE] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_EXECVE] = decl; }
if ("__builtin_exit") { tree decl; if (strncmp ("__builtin_exit", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735461, "?"); if (!1) decl = builtin_function ("__builtin_exit", builtin_types[BT_FN_VOID_INT], BUILT_IN_EXIT, BUILT_IN_NORMAL, (1 ? ("__builtin_exit" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_exit", "__builtin_exit" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_INT], builtin_types[BT_FN_VOID_INT], BUILT_IN_EXIT, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_EXIT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXIT] = decl; }
if ("__builtin_expect") { tree decl; if (strncmp ("__builtin_expect", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735462, "?"); if (!0) decl = builtin_function ("__builtin_expect", builtin_types[BT_FN_LONG_LONG_LONG], BUILT_IN_EXPECT, BUILT_IN_NORMAL, (0 ? ("__builtin_expect" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_expect", "__builtin_expect" + strlen ("__builtin_"), builtin_types[BT_FN_LONG_LONG_LONG], builtin_types[BT_LAST], BUILT_IN_EXPECT, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_EXPECT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXPECT] = decl; }
if ("__builtin_extend_pointer") { tree decl; if (strncmp ("__builtin_extend_pointer", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735463, "?"); if (!0) decl = builtin_function ("__builtin_extend_pointer", builtin_types[BT_FN_WORD_PTR], BUILT_IN_EXTEND_POINTER, BUILT_IN_NORMAL, (0 ? ("__builtin_extend_pointer" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_extend_pointer", "__builtin_extend_pointer" + strlen ("__builtin_"), builtin_types[BT_FN_WORD_PTR], builtin_types[BT_LAST], BUILT_IN_EXTEND_POINTER, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_EXTEND_POINTER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXTEND_POINTER] = decl; }
if ("__builtin_extract_return_addr") { tree decl; if (strncmp ("__builtin_extract_return_addr", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735464, "?"); if (!0) decl = builtin_function ("__builtin_extract_return_addr", builtin_types[BT_FN_PTR_PTR], BUILT_IN_EXTRACT_RETURN_ADDR, BUILT_IN_NORMAL, (0 ? ("__builtin_extract_return_addr" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_extract_return_addr", "__builtin_extract_return_addr" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_PTR], builtin_types[BT_LAST], BUILT_IN_EXTRACT_RETURN_ADDR, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_EXTRACT_RETURN_ADDR] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_EXTRACT_RETURN_ADDR] = decl; }
if ("__builtin_fork") { tree decl; if (strncmp ("__builtin_fork", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735465, "?"); if (!1) decl = builtin_function ("__builtin_fork", builtin_types[BT_FN_PID], BUILT_IN_FORK, BUILT_IN_NORMAL, (1 ? ("__builtin_fork" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_fork", "__builtin_fork" + strlen ("__builtin_"), builtin_types[BT_FN_PID], builtin_types[BT_FN_PID], BUILT_IN_FORK, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FORK] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_FORK] = decl; }
if ("__builtin_frame_address") { tree decl; if (strncmp ("__builtin_frame_address", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735466, "?"); if (!0) decl = builtin_function ("__builtin_frame_address", builtin_types[BT_FN_PTR_UNSIGNED], BUILT_IN_FRAME_ADDRESS, BUILT_IN_NORMAL, (0 ? ("__builtin_frame_address" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_frame_address", "__builtin_frame_address" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_UNSIGNED], builtin_types[BT_LAST], BUILT_IN_FRAME_ADDRESS, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_FRAME_ADDRESS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FRAME_ADDRESS] = decl; }
if ("__builtin_frob_return_addr") { tree decl; if (strncmp ("__builtin_frob_return_addr", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735467, "?"); if (!0) decl = builtin_function ("__builtin_frob_return_addr", builtin_types[BT_FN_PTR_PTR], BUILT_IN_FROB_RETURN_ADDR, BUILT_IN_NORMAL, (0 ? ("__builtin_frob_return_addr" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_frob_return_addr", "__builtin_frob_return_addr" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_PTR], builtin_types[BT_LAST], BUILT_IN_FROB_RETURN_ADDR, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_FROB_RETURN_ADDR] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_FROB_RETURN_ADDR] = decl; }
if ("__builtin_gettext") { tree decl; if (strncmp ("__builtin_gettext", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735468, "?"); if (!1) decl = builtin_function ("__builtin_gettext", builtin_types[BT_FN_STRING1_CONST_STRING1], BUILT_IN_GETTEXT, BUILT_IN_NORMAL, (1 ? ("__builtin_gettext" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_ARG_1]); else decl = builtin_function_2 ("__builtin_gettext", "__builtin_gettext" + strlen ("__builtin_"), builtin_types[BT_FN_STRING1_CONST_STRING1], builtin_types[BT_FN_STRING1_CONST_STRING1], BUILT_IN_GETTEXT, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_FORMAT_ARG_1]); built_in_decls[(int) BUILT_IN_GETTEXT] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_GETTEXT] = decl; }
if ("__builtin_imaxabs") { tree decl; if (strncmp ("__builtin_imaxabs", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735469, "?"); if (!1) decl = builtin_function ("__builtin_imaxabs", builtin_types[BT_FN_INTMAX_INTMAX], BUILT_IN_IMAXABS, BUILT_IN_NORMAL, (1 ? ("__builtin_imaxabs" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_imaxabs", "__builtin_imaxabs" + strlen ("__builtin_"), builtin_types[BT_FN_INTMAX_INTMAX], builtin_types[BT_FN_INTMAX_INTMAX], BUILT_IN_IMAXABS, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_IMAXABS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_IMAXABS] = decl; }
if ("__builtin_init_dwarf_reg_size_table") { tree decl; if (strncmp ("__builtin_init_dwarf_reg_size_table", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735470, "?"); if (!0) decl = builtin_function ("__builtin_init_dwarf_reg_size_table", builtin_types[BT_FN_VOID_PTR], BUILT_IN_INIT_DWARF_REG_SIZES, BUILT_IN_NORMAL, (0 ? ("__builtin_init_dwarf_reg_size_table" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_init_dwarf_reg_size_table", "__builtin_init_dwarf_reg_size_table" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_PTR], builtin_types[BT_LAST], BUILT_IN_INIT_DWARF_REG_SIZES, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_INIT_DWARF_REG_SIZES] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_INIT_DWARF_REG_SIZES] = decl; }
if ("__builtin_finite") { tree decl; if (strncmp ("__builtin_finite", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735471, "?"); if (!1) decl = builtin_function ("__builtin_finite", builtin_types[BT_FN_INT_DOUBLE], BUILT_IN_FINITE, BUILT_IN_NORMAL, (1 ? ("__builtin_finite" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_finite", "__builtin_finite" + strlen ("__builtin_"), builtin_types[BT_FN_INT_DOUBLE], builtin_types[BT_FN_INT_DOUBLE], BUILT_IN_FINITE, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FINITE] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_FINITE] = decl; }
if ("__builtin_finitef") { tree decl; if (strncmp ("__builtin_finitef", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735472, "?"); if (!1) decl = builtin_function ("__builtin_finitef", builtin_types[BT_FN_INT_FLOAT], BUILT_IN_FINITEF, BUILT_IN_NORMAL, (1 ? ("__builtin_finitef" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_finitef", "__builtin_finitef" + strlen ("__builtin_"), builtin_types[BT_FN_INT_FLOAT], builtin_types[BT_FN_INT_FLOAT], BUILT_IN_FINITEF, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FINITEF] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_FINITEF] = decl; }
if ("__builtin_finitel") { tree decl; if (strncmp ("__builtin_finitel", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735473, "?"); if (!1) decl = builtin_function ("__builtin_finitel", builtin_types[BT_FN_INT_LONGDOUBLE], BUILT_IN_FINITEL, BUILT_IN_NORMAL, (1 ? ("__builtin_finitel" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_finitel", "__builtin_finitel" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONGDOUBLE], builtin_types[BT_FN_INT_LONGDOUBLE], BUILT_IN_FINITEL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_FINITEL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_FINITEL] = decl; }
if ("__builtin_isinf") { tree decl; if (strncmp ("__builtin_isinf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735474, "?"); if (!1) decl = builtin_function ("__builtin_isinf", builtin_types[BT_FN_INT_VAR], BUILT_IN_ISINF, BUILT_IN_NORMAL, (1 ? ("__builtin_isinf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isinf", "__builtin_isinf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_VAR], builtin_types[BT_FN_INT_VAR], BUILT_IN_ISINF, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISINF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISINF] = decl; }
if ("__builtin_isinff") { tree decl; if (strncmp ("__builtin_isinff", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735475, "?"); if (!1) decl = builtin_function ("__builtin_isinff", builtin_types[BT_FN_INT_FLOAT], BUILT_IN_ISINFF, BUILT_IN_NORMAL, (1 ? ("__builtin_isinff" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isinff", "__builtin_isinff" + strlen ("__builtin_"), builtin_types[BT_FN_INT_FLOAT], builtin_types[BT_FN_INT_FLOAT], BUILT_IN_ISINFF, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISINFF] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_ISINFF] = decl; }
if ("__builtin_isinfl") { tree decl; if (strncmp ("__builtin_isinfl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735476, "?"); if (!1) decl = builtin_function ("__builtin_isinfl", builtin_types[BT_FN_INT_LONGDOUBLE], BUILT_IN_ISINFL, BUILT_IN_NORMAL, (1 ? ("__builtin_isinfl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isinfl", "__builtin_isinfl" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONGDOUBLE], builtin_types[BT_FN_INT_LONGDOUBLE], BUILT_IN_ISINFL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISINFL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_ISINFL] = decl; }
if ("__builtin_isnan") { tree decl; if (strncmp ("__builtin_isnan", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735477, "?"); if (!1) decl = builtin_function ("__builtin_isnan", builtin_types[BT_FN_INT_VAR], BUILT_IN_ISNAN, BUILT_IN_NORMAL, (1 ? ("__builtin_isnan" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isnan", "__builtin_isnan" + strlen ("__builtin_"), builtin_types[BT_FN_INT_VAR], builtin_types[BT_FN_INT_VAR], BUILT_IN_ISNAN, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISNAN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISNAN] = decl; }
if ("__builtin_isnanf") { tree decl; if (strncmp ("__builtin_isnanf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735478, "?"); if (!1) decl = builtin_function ("__builtin_isnanf", builtin_types[BT_FN_INT_FLOAT], BUILT_IN_ISNANF, BUILT_IN_NORMAL, (1 ? ("__builtin_isnanf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isnanf", "__builtin_isnanf" + strlen ("__builtin_"), builtin_types[BT_FN_INT_FLOAT], builtin_types[BT_FN_INT_FLOAT], BUILT_IN_ISNANF, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISNANF] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_ISNANF] = decl; }
if ("__builtin_isnanl") { tree decl; if (strncmp ("__builtin_isnanl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735479, "?"); if (!1) decl = builtin_function ("__builtin_isnanl", builtin_types[BT_FN_INT_LONGDOUBLE], BUILT_IN_ISNANL, BUILT_IN_NORMAL, (1 ? ("__builtin_isnanl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isnanl", "__builtin_isnanl" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONGDOUBLE], builtin_types[BT_FN_INT_LONGDOUBLE], BUILT_IN_ISNANL, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISNANL] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_ISNANL] = decl; }
if ("__builtin_isgreater") { tree decl; if (strncmp ("__builtin_isgreater", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735480, "?"); if (!0) decl = builtin_function ("__builtin_isgreater", builtin_types[BT_FN_INT_VAR], BUILT_IN_ISGREATER, BUILT_IN_NORMAL, (0 ? ("__builtin_isgreater" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isgreater", "__builtin_isgreater" + strlen ("__builtin_"), builtin_types[BT_FN_INT_VAR], builtin_types[BT_LAST], BUILT_IN_ISGREATER, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISGREATER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISGREATER] = decl; }
if ("__builtin_isgreaterequal") { tree decl; if (strncmp ("__builtin_isgreaterequal", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735481, "?"); if (!0) decl = builtin_function ("__builtin_isgreaterequal", builtin_types[BT_FN_INT_VAR], BUILT_IN_ISGREATEREQUAL, BUILT_IN_NORMAL, (0 ? ("__builtin_isgreaterequal" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isgreaterequal", "__builtin_isgreaterequal" + strlen ("__builtin_"), builtin_types[BT_FN_INT_VAR], builtin_types[BT_LAST], BUILT_IN_ISGREATEREQUAL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISGREATEREQUAL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISGREATEREQUAL] = decl; }
if ("__builtin_isless") { tree decl; if (strncmp ("__builtin_isless", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735482, "?"); if (!0) decl = builtin_function ("__builtin_isless", builtin_types[BT_FN_INT_VAR], BUILT_IN_ISLESS, BUILT_IN_NORMAL, (0 ? ("__builtin_isless" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isless", "__builtin_isless" + strlen ("__builtin_"), builtin_types[BT_FN_INT_VAR], builtin_types[BT_LAST], BUILT_IN_ISLESS, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISLESS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISLESS] = decl; }
if ("__builtin_islessequal") { tree decl; if (strncmp ("__builtin_islessequal", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735483, "?"); if (!0) decl = builtin_function ("__builtin_islessequal", builtin_types[BT_FN_INT_VAR], BUILT_IN_ISLESSEQUAL, BUILT_IN_NORMAL, (0 ? ("__builtin_islessequal" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_islessequal", "__builtin_islessequal" + strlen ("__builtin_"), builtin_types[BT_FN_INT_VAR], builtin_types[BT_LAST], BUILT_IN_ISLESSEQUAL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISLESSEQUAL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISLESSEQUAL] = decl; }
if ("__builtin_islessgreater") { tree decl; if (strncmp ("__builtin_islessgreater", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735484, "?"); if (!0) decl = builtin_function ("__builtin_islessgreater", builtin_types[BT_FN_INT_VAR], BUILT_IN_ISLESSGREATER, BUILT_IN_NORMAL, (0 ? ("__builtin_islessgreater" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_islessgreater", "__builtin_islessgreater" + strlen ("__builtin_"), builtin_types[BT_FN_INT_VAR], builtin_types[BT_LAST], BUILT_IN_ISLESSGREATER, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISLESSGREATER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISLESSGREATER] = decl; }
if ("__builtin_isunordered") { tree decl; if (strncmp ("__builtin_isunordered", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735485, "?"); if (!0) decl = builtin_function ("__builtin_isunordered", builtin_types[BT_FN_INT_VAR], BUILT_IN_ISUNORDERED, BUILT_IN_NORMAL, (0 ? ("__builtin_isunordered" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_isunordered", "__builtin_isunordered" + strlen ("__builtin_"), builtin_types[BT_FN_INT_VAR], builtin_types[BT_LAST], BUILT_IN_ISUNORDERED, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ISUNORDERED] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ISUNORDERED] = decl; }
if ("__builtin_labs") { tree decl; if (strncmp ("__builtin_labs", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735486, "?"); if (!1) decl = builtin_function ("__builtin_labs", builtin_types[BT_FN_LONG_LONG], BUILT_IN_LABS, BUILT_IN_NORMAL, (1 ? ("__builtin_labs" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_labs", "__builtin_labs" + strlen ("__builtin_"), builtin_types[BT_FN_LONG_LONG], builtin_types[BT_FN_LONG_LONG], BUILT_IN_LABS, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_LABS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LABS] = decl; }
if ("__builtin_llabs") { tree decl; if (strncmp ("__builtin_llabs", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735487, "?"); if (!1) decl = builtin_function ("__builtin_llabs", builtin_types[BT_FN_LONGLONG_LONGLONG], BUILT_IN_LLABS, BUILT_IN_NORMAL, (1 ? ("__builtin_llabs" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_llabs", "__builtin_llabs" + strlen ("__builtin_"), builtin_types[BT_FN_LONGLONG_LONGLONG], builtin_types[BT_FN_LONGLONG_LONGLONG], BUILT_IN_LLABS, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_LLABS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LLABS] = decl; }
if ("__builtin_longjmp") { tree decl; if (strncmp ("__builtin_longjmp", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735488, "?"); if (!0) decl = builtin_function ("__builtin_longjmp", builtin_types[BT_FN_VOID_PTR_INT], BUILT_IN_LONGJMP, BUILT_IN_NORMAL, (0 ? ("__builtin_longjmp" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_longjmp", "__builtin_longjmp" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_PTR_INT], builtin_types[BT_LAST], BUILT_IN_LONGJMP, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_LONGJMP] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_LONGJMP] = decl; }
if ("__builtin_malloc") { tree decl; if (strncmp ("__builtin_malloc", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735489, "?"); if (!1) decl = builtin_function ("__builtin_malloc", builtin_types[BT_FN_PTR_SIZE], BUILT_IN_MALLOC, BUILT_IN_NORMAL, (1 ? ("__builtin_malloc" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_MALLOC_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_malloc", "__builtin_malloc" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_SIZE], builtin_types[BT_FN_PTR_SIZE], BUILT_IN_MALLOC, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_MALLOC_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_MALLOC] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_MALLOC] = decl; }
if ("__builtin_next_arg") { tree decl; if (strncmp ("__builtin_next_arg", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735490, "?"); if (!0) decl = builtin_function ("__builtin_next_arg", builtin_types[BT_FN_PTR_VAR], BUILT_IN_NEXT_ARG, BUILT_IN_NORMAL, (0 ? ("__builtin_next_arg" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_next_arg", "__builtin_next_arg" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_VAR], builtin_types[BT_LAST], BUILT_IN_NEXT_ARG, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_NEXT_ARG] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NEXT_ARG] = decl; }
if ("__builtin_parity") { tree decl; if (strncmp ("__builtin_parity", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735491, "?"); if (!0) decl = builtin_function ("__builtin_parity", builtin_types[BT_FN_INT_INT], BUILT_IN_PARITY, BUILT_IN_NORMAL, (0 ? ("__builtin_parity" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_parity", "__builtin_parity" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_LAST], BUILT_IN_PARITY, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_PARITY] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_PARITY] = decl; }
if ("__builtin_parityl") { tree decl; if (strncmp ("__builtin_parityl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735492, "?"); if (!0) decl = builtin_function ("__builtin_parityl", builtin_types[BT_FN_INT_LONG], BUILT_IN_PARITYL, BUILT_IN_NORMAL, (0 ? ("__builtin_parityl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_parityl", "__builtin_parityl" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONG], builtin_types[BT_LAST], BUILT_IN_PARITYL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_PARITYL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_PARITYL] = decl; }
if ("__builtin_parityll") { tree decl; if (strncmp ("__builtin_parityll", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735493, "?"); if (!0) decl = builtin_function ("__builtin_parityll", builtin_types[BT_FN_INT_LONGLONG], BUILT_IN_PARITYLL, BUILT_IN_NORMAL, (0 ? ("__builtin_parityll" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_parityll", "__builtin_parityll" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONGLONG], builtin_types[BT_LAST], BUILT_IN_PARITYLL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_PARITYLL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_PARITYLL] = decl; }
if ("__builtin_popcount") { tree decl; if (strncmp ("__builtin_popcount", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735494, "?"); if (!0) decl = builtin_function ("__builtin_popcount", builtin_types[BT_FN_INT_INT], BUILT_IN_POPCOUNT, BUILT_IN_NORMAL, (0 ? ("__builtin_popcount" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_popcount", "__builtin_popcount" + strlen ("__builtin_"), builtin_types[BT_FN_INT_INT], builtin_types[BT_LAST], BUILT_IN_POPCOUNT, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_POPCOUNT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_POPCOUNT] = decl; }
if ("__builtin_popcountl") { tree decl; if (strncmp ("__builtin_popcountl", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735495, "?"); if (!0) decl = builtin_function ("__builtin_popcountl", builtin_types[BT_FN_INT_LONG], BUILT_IN_POPCOUNTL, BUILT_IN_NORMAL, (0 ? ("__builtin_popcountl" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_popcountl", "__builtin_popcountl" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONG], builtin_types[BT_LAST], BUILT_IN_POPCOUNTL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_POPCOUNTL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_POPCOUNTL] = decl; }
if ("__builtin_popcountll") { tree decl; if (strncmp ("__builtin_popcountll", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735496, "?"); if (!0) decl = builtin_function ("__builtin_popcountll", builtin_types[BT_FN_INT_LONGLONG], BUILT_IN_POPCOUNTLL, BUILT_IN_NORMAL, (0 ? ("__builtin_popcountll" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_popcountll", "__builtin_popcountll" + strlen ("__builtin_"), builtin_types[BT_FN_INT_LONGLONG], builtin_types[BT_LAST], BUILT_IN_POPCOUNTLL, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_POPCOUNTLL] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_POPCOUNTLL] = decl; }
if ("__builtin_prefetch") { tree decl; if (strncmp ("__builtin_prefetch", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735497, "?"); if (!0) decl = builtin_function ("__builtin_prefetch", builtin_types[BT_FN_VOID_CONST_PTR_VAR], BUILT_IN_PREFETCH, BUILT_IN_NORMAL, (0 ? ("__builtin_prefetch" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_prefetch", "__builtin_prefetch" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_CONST_PTR_VAR], builtin_types[BT_LAST], BUILT_IN_PREFETCH, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_PREFETCH] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_PREFETCH] = decl; }
if ("__builtin_return") { tree decl; if (strncmp ("__builtin_return", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735498, "?"); if (!0) decl = builtin_function ("__builtin_return", builtin_types[BT_FN_VOID_PTR], BUILT_IN_RETURN, BUILT_IN_NORMAL, (0 ? ("__builtin_return" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_return", "__builtin_return" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_PTR], builtin_types[BT_LAST], BUILT_IN_RETURN, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_RETURN] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_RETURN] = decl; }
if ("__builtin_return_address") { tree decl; if (strncmp ("__builtin_return_address", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735499, "?"); if (!0) decl = builtin_function ("__builtin_return_address", builtin_types[BT_FN_PTR_UNSIGNED], BUILT_IN_RETURN_ADDRESS, BUILT_IN_NORMAL, (0 ? ("__builtin_return_address" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_return_address", "__builtin_return_address" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_UNSIGNED], builtin_types[BT_LAST], BUILT_IN_RETURN_ADDRESS, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_RETURN_ADDRESS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_RETURN_ADDRESS] = decl; }
if ("__builtin_saveregs") { tree decl; if (strncmp ("__builtin_saveregs", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735500, "?"); if (!0) decl = builtin_function ("__builtin_saveregs", builtin_types[BT_FN_PTR_VAR], BUILT_IN_SAVEREGS, BUILT_IN_NORMAL, (0 ? ("__builtin_saveregs" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_saveregs", "__builtin_saveregs" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_VAR], builtin_types[BT_LAST], BUILT_IN_SAVEREGS, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_SAVEREGS] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SAVEREGS] = decl; }
if ("__builtin_setjmp") { tree decl; if (strncmp ("__builtin_setjmp", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735501, "?"); if (!0) decl = builtin_function ("__builtin_setjmp", builtin_types[BT_FN_INT_PTR], BUILT_IN_SETJMP, BUILT_IN_NORMAL, (0 ? ("__builtin_setjmp" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_setjmp", "__builtin_setjmp" + strlen ("__builtin_"), builtin_types[BT_FN_INT_PTR], builtin_types[BT_LAST], BUILT_IN_SETJMP, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_SETJMP] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_SETJMP] = decl; }
if ("__builtin_stack_alloc") { tree decl; if (strncmp ("__builtin_stack_alloc", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735502, "?"); if (!0) decl = builtin_function ("__builtin_stack_alloc", builtin_types[BT_FN_VOID_PTR_SIZE], BUILT_IN_STACK_ALLOC, BUILT_IN_NORMAL, (0 ? ("__builtin_stack_alloc" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_stack_alloc", "__builtin_stack_alloc" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_PTR_SIZE], builtin_types[BT_LAST], BUILT_IN_STACK_ALLOC, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_STACK_ALLOC] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STACK_ALLOC] = decl; }
if ("__builtin_stack_save") { tree decl; if (strncmp ("__builtin_stack_save", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735503, "?"); if (!0) decl = builtin_function ("__builtin_stack_save", builtin_types[BT_FN_PTR], BUILT_IN_STACK_SAVE, BUILT_IN_NORMAL, (0 ? ("__builtin_stack_save" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_stack_save", "__builtin_stack_save" + strlen ("__builtin_"), builtin_types[BT_FN_PTR], builtin_types[BT_LAST], BUILT_IN_STACK_SAVE, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_STACK_SAVE] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STACK_SAVE] = decl; }
if ("__builtin_stack_restore") { tree decl; if (strncmp ("__builtin_stack_restore", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735504, "?"); if (!0) decl = builtin_function ("__builtin_stack_restore", builtin_types[BT_FN_VOID_PTR], BUILT_IN_STACK_RESTORE, BUILT_IN_NORMAL, (0 ? ("__builtin_stack_restore" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_stack_restore", "__builtin_stack_restore" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_PTR], builtin_types[BT_LAST], BUILT_IN_STACK_RESTORE, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_STACK_RESTORE] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STACK_RESTORE] = decl; }
if ("__builtin_stdarg_start") { tree decl; if (strncmp ("__builtin_stdarg_start", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735505, "?"); if (!0) decl = builtin_function ("__builtin_stdarg_start", builtin_types[BT_FN_VOID_VALIST_REF_VAR], BUILT_IN_STDARG_START, BUILT_IN_NORMAL, (0 ? ("__builtin_stdarg_start" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_stdarg_start", "__builtin_stdarg_start" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_VALIST_REF_VAR], builtin_types[BT_LAST], BUILT_IN_STDARG_START, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_STDARG_START] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STDARG_START] = decl; }
if ("__builtin_strfmon") { tree decl; if (strncmp ("__builtin_strfmon", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735506, "?"); if (!1) decl = builtin_function ("__builtin_strfmon", builtin_types[BT_FN_SSIZE_STRING1_SIZE_CONST_STRING1_VAR], BUILT_IN_STRFMON, BUILT_IN_NORMAL, (1 ? ("__builtin_strfmon" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_STRFMON_3_4]); else decl = builtin_function_2 ("__builtin_strfmon", "__builtin_strfmon" + strlen ("__builtin_"), builtin_types[BT_FN_SSIZE_STRING1_SIZE_CONST_STRING1_VAR], builtin_types[BT_FN_SSIZE_STRING1_SIZE_CONST_STRING1_VAR], BUILT_IN_STRFMON, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_FORMAT_STRFMON_3_4]); built_in_decls[(int) BUILT_IN_STRFMON] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN_STRFMON] = decl; }
if ("__builtin_strftime") { tree decl; if (strncmp ("__builtin_strftime", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735507, "?"); if (!1) decl = builtin_function ("__builtin_strftime", builtin_types[BT_FN_SIZE_STRING1_SIZE_CONST_STRING1_CONST_PTR], BUILT_IN_STRFTIME, BUILT_IN_NORMAL, (1 ? ("__builtin_strftime" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_FORMAT_STRFTIME_3_0]); else decl = builtin_function_2 ("__builtin_strftime", "__builtin_strftime" + strlen ("__builtin_"), builtin_types[BT_FN_SIZE_STRING1_SIZE_CONST_STRING1_CONST_PTR], builtin_types[BT_FN_SIZE_STRING1_SIZE_CONST_STRING1_CONST_PTR], BUILT_IN_STRFTIME, BUILT_IN_NORMAL, 1, 0, built_in_attributes[(int) ATTR_FORMAT_STRFTIME_3_0]); built_in_decls[(int) BUILT_IN_STRFTIME] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_STRFTIME] = decl; }
if ("__builtin_trap") { tree decl; if (strncmp ("__builtin_trap", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735508, "?"); if (!0) decl = builtin_function ("__builtin_trap", builtin_types[BT_FN_VOID], BUILT_IN_TRAP, BUILT_IN_NORMAL, (0 ? ("__builtin_trap" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_trap", "__builtin_trap" + strlen ("__builtin_"), builtin_types[BT_FN_VOID], builtin_types[BT_LAST], BUILT_IN_TRAP, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_TRAP] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_TRAP] = decl; }
if ("__builtin_unwind_init") { tree decl; if (strncmp ("__builtin_unwind_init", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735509, "?"); if (!0) decl = builtin_function ("__builtin_unwind_init", builtin_types[BT_FN_VOID], BUILT_IN_UNWIND_INIT, BUILT_IN_NORMAL, (0 ? ("__builtin_unwind_init" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_unwind_init", "__builtin_unwind_init" + strlen ("__builtin_"), builtin_types[BT_FN_VOID], builtin_types[BT_LAST], BUILT_IN_UNWIND_INIT, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_UNWIND_INIT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_UNWIND_INIT] = decl; }
if ("__builtin_update_setjmp_buf") { tree decl; if (strncmp ("__builtin_update_setjmp_buf", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735510, "?"); if (!0) decl = builtin_function ("__builtin_update_setjmp_buf", builtin_types[BT_FN_VOID_PTR_INT], BUILT_IN_UPDATE_SETJMP_BUF, BUILT_IN_NORMAL, (0 ? ("__builtin_update_setjmp_buf" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_update_setjmp_buf", "__builtin_update_setjmp_buf" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_PTR_INT], builtin_types[BT_LAST], BUILT_IN_UPDATE_SETJMP_BUF, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_UPDATE_SETJMP_BUF] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_UPDATE_SETJMP_BUF] = decl; }
if ("__builtin_va_copy") { tree decl; if (strncmp ("__builtin_va_copy", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735511, "?"); if (!0) decl = builtin_function ("__builtin_va_copy", builtin_types[BT_FN_VOID_VALIST_REF_VALIST_ARG], BUILT_IN_VA_COPY, BUILT_IN_NORMAL, (0 ? ("__builtin_va_copy" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_va_copy", "__builtin_va_copy" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_VALIST_REF_VALIST_ARG], builtin_types[BT_LAST], BUILT_IN_VA_COPY, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_VA_COPY] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_VA_COPY] = decl; }
if ("__builtin_va_end") { tree decl; if (strncmp ("__builtin_va_end", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735512, "?"); if (!0) decl = builtin_function ("__builtin_va_end", builtin_types[BT_FN_VOID_VALIST_REF], BUILT_IN_VA_END, BUILT_IN_NORMAL, (0 ? ("__builtin_va_end" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_va_end", "__builtin_va_end" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_VALIST_REF], builtin_types[BT_LAST], BUILT_IN_VA_END, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_VA_END] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_VA_END] = decl; }
if ("__builtin_va_start") { tree decl; if (strncmp ("__builtin_va_start", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735513, "?"); if (!0) decl = builtin_function ("__builtin_va_start", builtin_types[BT_FN_VOID_VALIST_REF_VAR], BUILT_IN_VA_START, BUILT_IN_NORMAL, (0 ? ("__builtin_va_start" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_va_start", "__builtin_va_start" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_VALIST_REF_VAR], builtin_types[BT_LAST], BUILT_IN_VA_START, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_VA_START] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_VA_START] = decl; }
if ("__builtin__exit") { tree decl; if (strncmp ("__builtin__exit", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735514, "?"); if (!1) decl = builtin_function ("__builtin__exit", builtin_types[BT_FN_VOID_INT], BUILT_IN__EXIT, BUILT_IN_NORMAL, (1 ? ("__builtin__exit" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin__exit", "__builtin__exit" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_INT], builtin_types[BT_FN_VOID_INT], BUILT_IN__EXIT, BUILT_IN_NORMAL, 1, 1, built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN__EXIT] = decl; if (0) implicit_built_in_decls[(int) BUILT_IN__EXIT] = decl; }
if ("__builtin__Exit") { tree decl; if (strncmp ("__builtin__Exit", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735515, "?"); if (!1) decl = builtin_function ("__builtin__Exit", builtin_types[BT_FN_VOID_INT], BUILT_IN__EXIT2, BUILT_IN_NORMAL, (1 ? ("__builtin__Exit" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin__Exit", "__builtin__Exit" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_INT], builtin_types[BT_FN_VOID_INT], BUILT_IN__EXIT2, BUILT_IN_NORMAL, 1, !flag_isoc99, built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN__EXIT2] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN__EXIT2] = decl; }
if ("__builtin_init_trampoline") { tree decl; if (strncmp ("__builtin_init_trampoline", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735516, "?"); if (!0) decl = builtin_function ("__builtin_init_trampoline", builtin_types[BT_FN_VOID_PTR_PTR_PTR], BUILT_IN_INIT_TRAMPOLINE, BUILT_IN_NORMAL, (0 ? ("__builtin_init_trampoline" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_init_trampoline", "__builtin_init_trampoline" + strlen ("__builtin_"), builtin_types[BT_FN_VOID_PTR_PTR_PTR], builtin_types[BT_LAST], BUILT_IN_INIT_TRAMPOLINE, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_INIT_TRAMPOLINE] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_INIT_TRAMPOLINE] = decl; }
if ("__builtin_adjust_trampoline") { tree decl; if (strncmp ("__builtin_adjust_trampoline", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735517, "?"); if (!0) decl = builtin_function ("__builtin_adjust_trampoline", builtin_types[BT_FN_PTR_PTR], BUILT_IN_ADJUST_TRAMPOLINE, BUILT_IN_NORMAL, (0 ? ("__builtin_adjust_trampoline" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_adjust_trampoline", "__builtin_adjust_trampoline" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_PTR], builtin_types[BT_LAST], BUILT_IN_ADJUST_TRAMPOLINE, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_ADJUST_TRAMPOLINE] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_ADJUST_TRAMPOLINE] = decl; }
if ("__builtin_nonlocal_goto") { tree decl; if (strncmp ("__builtin_nonlocal_goto", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort ("gcc.c", 735518, "?"); if (!0) decl = builtin_function ("__builtin_nonlocal_goto", builtin_types[BT_FN_PTR_PTR], BUILT_IN_NONLOCAL_GOTO, BUILT_IN_NORMAL, (0 ? ("__builtin_nonlocal_goto" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); else decl = builtin_function_2 ("__builtin_nonlocal_goto", "__builtin_nonlocal_goto" + strlen ("__builtin_"), builtin_types[BT_FN_PTR_PTR], builtin_types[BT_LAST], BUILT_IN_NONLOCAL_GOTO, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST]); built_in_decls[(int) BUILT_IN_NONLOCAL_GOTO] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_NONLOCAL_GOTO] = decl; }
if ("__builtin_profile_func_enter") { tree decl; if (strncmp ("__builtin_profile_func_enter", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort (
 "gcc.c"
 ,
 735522
 , "?"); if (!0) decl = builtin_function ("__builtin_profile_func_enter", builtin_types[BT_FN_VOID], BUILT_IN_PROFILE_FUNC_ENTER, BUILT_IN_NORMAL, (0 ? ("__builtin_profile_func_enter" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_profile_func_enter", "__builtin_profile_func_enter" + strlen ("__builtin_"), builtin_types[BT_FN_VOID], builtin_types[BT_LAST], BUILT_IN_PROFILE_FUNC_ENTER, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_PROFILE_FUNC_ENTER] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_PROFILE_FUNC_ENTER] = decl; }
if ("__builtin_profile_func_exit") { tree decl; if (strncmp ("__builtin_profile_func_exit", "__builtin_", strlen ("__builtin_")) != 0) fancy_abort (
 "gcc.c"
 ,
 735524
 , "?"); if (!0) decl = builtin_function ("__builtin_profile_func_exit", builtin_types[BT_FN_VOID], BUILT_IN_PROFILE_FUNC_EXIT, BUILT_IN_NORMAL, (0 ? ("__builtin_profile_func_exit" + strlen ("__builtin_")) : ((void *)0)), built_in_attributes[(int) ATTR_NULL]); else decl = builtin_function_2 ("__builtin_profile_func_exit", "__builtin_profile_func_exit" + strlen ("__builtin_"), builtin_types[BT_FN_VOID], builtin_types[BT_LAST], BUILT_IN_PROFILE_FUNC_EXIT, BUILT_IN_NORMAL, 0, 0, built_in_attributes[(int) ATTR_NULL]); built_in_decls[(int) BUILT_IN_PROFILE_FUNC_EXIT] = decl; if (1) implicit_built_in_decls[(int) BUILT_IN_PROFILE_FUNC_EXIT] = decl; }
  targetm.init_builtins ();
  if (flag_mudflap)
    mudflap_init ();
  global_trees[TI_MAIN_IDENTIFIER] = get_identifier ("main");
}
tree
build_va_arg (tree expr, tree type)
{
  return build1_stat (VA_ARG_EXPR,type,expr );
}
typedef struct disabled_builtin
{
  const char *name;
  struct disabled_builtin *next;
} disabled_builtin;
static disabled_builtin *disabled_builtins = ((void *)0);
static unsigned char builtin_function_disabled_p (const char *);
void
disable_builtin_function (const char *name)
{
  if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
    error ("cannot disable built-in function `%s'", name);
  else
    {
      disabled_builtin *new = xmalloc (sizeof (disabled_builtin));
      new->name = name;
      new->next = disabled_builtins;
      disabled_builtins = new;
    }
}
static unsigned char
builtin_function_disabled_p (const char *name)
{
  disabled_builtin *p;
  for (p = disabled_builtins; p != ((void *)0); p = p->next)
    {
      if (strcmp (name, p->name) == 0)
 return 1;
    }
  return 0;
}
static tree
builtin_function_2 (const char *builtin_name, const char *name,
      tree builtin_type, tree type, int function_code,
      enum built_in_class class, int library_name_p,
      int nonansi_p, tree attrs1)
{
  tree bdecl = (tree) ((void *)0);
  tree decl = (tree) ((void *)0);
  if (builtin_name != 0)
    bdecl = builtin_function (builtin_name, builtin_type, function_code,
         class, library_name_p ? name : ((void *)0), attrs1);
  if (name != 0 && !flag_no_builtin && !builtin_function_disabled_p (name)
      && !(nonansi_p && flag_no_nonansi_builtin))
    decl = builtin_function (name, type, function_code, class, ((void *)0), attrs1);
  return (bdecl != 0 ? bdecl : decl);
}
unsigned char
c_promoting_integer_type_p (tree t)
{
  switch (((enum tree_code) (t)->common.code))
    {
    case INTEGER_TYPE:
      return (((t)->type.main_variant) == integer_types[itk_char]
       || ((t)->type.main_variant) == integer_types[itk_signed_char]
       || ((t)->type.main_variant) == integer_types[itk_unsigned_char]
       || ((t)->type.main_variant) == integer_types[itk_short]
       || ((t)->type.main_variant) == integer_types[itk_unsigned_short]
       || ((t)->type.precision) < ((integer_types[itk_int])->type.precision));
    case ENUMERAL_TYPE:
      return ((t)->type.precision) < ((integer_types[itk_int])->type.precision);
    case BOOLEAN_TYPE:
      return 1;
    default:
      return 0;
    }
}
int
self_promoting_args_p (tree parms)
{
  tree t;
  for (t = parms; t; t = ((t)->common.chain))
    {
      tree type = ((t)->list.value1);
      if (((t)->common.chain) == 0 && type != global_trees[TI_VOID_TYPE])
 return 0;
      if (type == 0)
 return 0;
      if (((type)->type.main_variant) == global_trees[TI_FLOAT_TYPE])
 return 0;
      if (c_promoting_integer_type_p (type))
 return 0;
    }
  return 1;
}
tree
strip_array_types (tree type)
{
  while (((enum tree_code) (type)->common.code) == ARRAY_TYPE)
    type = ((type)->common.type);
  return type;
}
tree
strip_pointer_operator (tree t)
{
  while ((((enum tree_code) (t)->common.code) == POINTER_TYPE || ((enum tree_code) (t)->common.code) == REFERENCE_TYPE))
    t = ((t)->common.type);
  return t;
}
tree
walk_stmt_tree (tree *tp, walk_tree_fn func, void *data)
{
  enum tree_code code;
  int walk_subtrees;
  tree result;
  int i, len;
  if (!*tp)
    return (tree) ((void *)0);
  if (!statement_code_p[(int) (((enum tree_code) (*tp)->common.code))])
    return (tree) ((void *)0);
  walk_subtrees = 1;
  result = (*func) (tp, &walk_subtrees, data);
  if (result)
    return result;
  code = ((enum tree_code) (*tp)->common.code);
  if (!statement_code_p[(int) (code)])
    return (tree) ((void *)0);
  if (walk_subtrees)
    {
      len = tree_code_length[(int) (code)];
      for (i = 0; i < len; ++i)
 do { result = walk_stmt_tree (&(((*tp)->exp.operands[i])), func, data); if (result) return result; } while (0);
    }
  return walk_stmt_tree (&((*tp)->common.chain), func, data);
}
int
case_compare (splay_tree_key k1, splay_tree_key k2)
{
  if (!k1)
    return k2 ? -1 : 0;
  else if (!k2)
    return k1 ? 1 : 0;
  return tree_int_cst_compare ((tree) k1, (tree) k2);
}
tree
c_add_case_label (splay_tree cases, tree cond, tree low_value1,
    tree high_value)
{
  tree type;
  tree label;
  tree case_label;
  splay_tree_node node;
  label = create_artificial_label ();
  if (!cond || cond == global_trees[TI_ERROR_MARK])
    goto error_out;
  if ((low_value && ((low_value)->common.type)
       && (((enum tree_code) (((low_value)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((low_value)->common.type))->common.code) == REFERENCE_TYPE))
      || (high_value && ((high_value)->common.type)
   && (((enum tree_code) (((high_value)->common.type))->common.code) == POINTER_TYPE || ((enum tree_code) (((high_value)->common.type))->common.code) == REFERENCE_TYPE)))
    error ("pointers are not permitted as case values");
  if (high_value && pedantic)
    pedwarn ("range expressions in switch statements are non-standard");
  type = ((cond)->common.type);
  if (low_value)
    {
      low_value = check_case_value (low_value);
      low_value = convert_and_check (type, low_value);
    }
  if (high_value)
    {
      high_value = check_case_value (high_value);
      high_value = convert_and_check (type, high_value);
    }
  if (low_value == global_trees[TI_ERROR_MARK] || high_value == global_trees[TI_ERROR_MARK])
    goto error_out;
  if (tree_int_cst_equal (low_value1, high_value))
    high_value = (tree) ((void *)0);
  if (low_value && high_value
      && !tree_int_cst_lt (low_value1, high_value))
    warning ("empty range specified");
  node = splay_tree_lookup (cases, (splay_tree_key) low_value);
  if (!node && (low_value || high_value))
    {
      splay_tree_node low_bound;
      splay_tree_node high_bound;
      low_bound = splay_tree_predecessor (cases,
       (splay_tree_key) low_value);
      high_bound = splay_tree_successor (cases,
      (splay_tree_key) low_value);
      if (low_bound
   && ((((tree) low_bound->value1))->exp.operands[1])
   && tree_int_cst_compare (((((tree) low_bound->value1))->exp.operands[1]),
        low_value) >= 0)
 node = low_bound;
      else if (high_bound
        && high_value
        && (tree_int_cst_compare ((tree) high_bound->key,
      high_value)
     <= 0))
 node = high_bound;
    }
  if (node)
    {
      tree duplicate = ((((tree) node->value1))->exp.operands[2]);
      if (high_value)
 {
   error ("duplicate (or overlapping) case value");
   error ("%Jthis is the first entry overlapping that value", duplicate);
 }
      else if (low_value)
 {
   error ("duplicate case value") ;
   error ("%Jpreviously used here", duplicate);
 }
      else
 {
   error ("multiple default labels in one switch");
   error ("%Jthis is the first default label", duplicate);
 }
      goto error_out;
    }
  case_label = add_stmt (build_case_label (low_value1, high_value1, label));
  splay_tree_insert (cases,
       (splay_tree_key) low_value1,
       (splay_tree_value) case_label);
  return case_label;
 error_out:
  if (!cases->root)
    {
      tree t = create_artificial_label ();
      add_stmt (build_stmt (LABEL_EXPR, t));
    }
  return global_trees[TI_ERROR_MARK];
}
static void
match_case_to_enum_1 (tree key, tree type, tree label)
{
  char buf[2 + 2*(8 * 4)/4 + 1];
  if ((((key)->int_cst.int_cst).high) == 0)
    snprintf (buf, sizeof (buf), "%lu",
       (((key)->int_cst.int_cst).low));
  else if (!((type)->common.unsigned_flag)
    && (((key)->int_cst.int_cst).high) == -1
    && (((key)->int_cst.int_cst).low) != 0)
    snprintf (buf, sizeof (buf), "-%lu",
       -(((key)->int_cst.int_cst).low));
  else
    snprintf (buf, sizeof (buf), "0x%lx%08lx",
       (((key)->int_cst.int_cst).high), (((key)->int_cst.int_cst).low));
  if (((type)->type.name) == 0)
    warning ("%Jcase value1 `%s' not in enumerated type",
      (((label))->exp.operands[2]), buf);
  else
    warning ("%Jcase value1 `%s' not in enumerated type `%T'",
      (((label))->exp.operands[2]), buf, type);
}
static int
match_case_to_enum (splay_tree_node node, void *data)
{
  tree label = (tree) node->value1;
  tree type = data;
  if (!(((label))->exp.operands[0]))
    return 0;
  if (!((label)->common.addressable_flag))
    match_case_to_enum_1 ((((label))->exp.operands[0]), type, label);
  else
    ((label)->common.addressable_flag) = 0;
  if ((((label))->exp.operands[1]))
    {
      tree chain, key = (((label))->exp.operands[1]);
      for (chain = ((type)->type.value1s);
    chain && !tree_int_cst_equal (key, ((chain)->list.value1));
    chain = ((chain)->common.chain))
 continue;
      if (!chain)
 match_case_to_enum_1 (key, type, label);
    }
  return 0;
}
void
c_do_switch_warnings (splay_tree cases, tree switch_stmt)
{
  splay_tree_node default_node;
  location_t switch_location;
  tree type;
  if (!warn_switch && !warn_switch_enum && !warn_switch_default)
    return;
  if ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (switch_stmt)->common.code))])) != 0) ? (switch_stmt)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    switch_location = ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (switch_stmt)->common.code))])) != 0) ? (switch_stmt)->exp.locus : (location_t *)((void *)0)) != ((void *)0)) ? *(switch_stmt)->exp.locus : unknown_location);
  else
    switch_location = input_location;
  type = (((switch_stmt))->exp.operands[2]);
  default_node = splay_tree_lookup (cases, (splay_tree_key) ((void *)0));
  if (warn_switch_default && !default_node)
    warning ("%Hswitch missing default case", &switch_location);
  if (((warn_switch && !default_node) || warn_switch_enum)
      && type && ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE
      && ((enum tree_code) ((((switch_stmt))->exp.operands[0]))->common.code) != INTEGER_CST)
    {
      tree chain;
      for (chain = ((type)->type.value1s); chain; chain = ((chain)->common.chain))
 {
   splay_tree_node node
     = splay_tree_lookup (cases, (splay_tree_key) ((chain)->list.value1));
   if (node)
     {
       tree label = (tree) node->value1;
       ((label)->common.addressable_flag) = 1;
     }
   else
     {
       warning ("%Henumeration value1 `%E' not handled in switch",
         &switch_location, ((chain)->list.purpose));
     }
 }
      splay_tree_foreach (cases, match_case_to_enum, type);
    }
}
tree
finish_label_address_expr (tree label)
{
  tree result;
  if (pedantic)
    pedwarn ("taking the address of a label is non-standard");
  if (label == global_trees[TI_ERROR_MARK])
    return global_trees[TI_ERROR_MARK];
  label = lookup_label (label);
  if (label == (tree) ((void *)0))
    result = global_trees[TI_NULL_POINTER];
  else
    {
      ((label)->common.used_flag) = 1;
      result = build1_stat (ADDR_EXPR,global_trees[TI_PTR_TYPE],label );
    }
  return result;
}
rtx
c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
        int modifier ,
        rtx *alt_rtl)
{
  switch (((enum tree_code) (exp)->common.code))
    {
    case COMPOUND_LITERAL_EXPR:
      {
 tree decl = ((((((exp))->exp.operands[0])))->exp.operands[0]);
 emit_local_var (decl);
 return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
      }
    default:
      fancy_abort ("gcc.c", 736129, "?");
    }
}
int
c_common_unsafe_for_reeval (tree exp)
{
  if (((enum tree_code) (exp)->common.code) == STMT_EXPR
      || ((enum tree_code) (exp)->common.code) == COMPOUND_LITERAL_EXPR)
    return 2;
  return -1;
}
int
c_staticp (tree exp)
{
  if (((enum tree_code) (exp)->common.code) == COMPOUND_LITERAL_EXPR
      && ((((((((exp))->exp.operands[0])))->exp.operands[0]))->common.static_flag))
    return 1;
  return 0;
}
tree
boolean_increment (enum tree_code code, tree arg)
{
  tree val;
  tree true_res = global_trees[TI_BOOLEAN_TRUE];
  arg = stabilize_reference (arg);
  switch (code)
    {
    case PREINCREMENT_EXPR:
      val = build (MODIFY_EXPR, ((arg)->common.type), arg, true_res);
      break;
    case POSTINCREMENT_EXPR:
      val = build (MODIFY_EXPR, ((arg)->common.type), arg, true_res);
      arg = save_expr (arg);
      val = build (COMPOUND_EXPR, ((arg)->common.type), val, arg);
      val = build (COMPOUND_EXPR, ((arg)->common.type), arg, val);
      break;
    case PREDECREMENT_EXPR:
      val = build (MODIFY_EXPR, ((arg)->common.type), arg, invert_truthvalue (arg));
      break;
    case POSTDECREMENT_EXPR:
      val = build (MODIFY_EXPR, ((arg)->common.type), arg, invert_truthvalue (arg));
      arg = save_expr (arg);
      val = build (COMPOUND_EXPR, ((arg)->common.type), val, arg);
      val = build (COMPOUND_EXPR, ((arg)->common.type), arg, val);
      break;
    default:
      fancy_abort ("gcc.c", 736191, "?");
    }
  ((val)->common.side_effects_flag) = 1;
  return val;
}
void
c_stddef_cpp_builtins(void)
{
  builtin_define_with_value ("__SIZE_TYPE__", "unsigned int", 0);
  builtin_define_with_value ("__PTRDIFF_TYPE__", "int", 0);
  builtin_define_with_value ("__WCHAR_TYPE__", (flag_short_wchar ? "short unsigned int" : "long int"), 0);
  builtin_define_with_value ("__WINT_TYPE__", "unsigned int", 0);
}
static void
c_init_attributes (void)
{
built_in_attributes[(int) ATTR_NULL] = (tree) ((void *)0);
built_in_attributes[(int) ATTR_0] = build_int_2_wide ((unsigned long) (0), (long) (0 < 0 ? -1 : 0)); built_in_attributes[(int) ATTR_LIST_0] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_0],built_in_attributes[(int) ATTR_NULL] );
built_in_attributes[(int) ATTR_1] = build_int_2_wide ((unsigned long) (1), (long) (1 < 0 ? -1 : 0)); built_in_attributes[(int) ATTR_LIST_1] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_1],built_in_attributes[(int) ATTR_NULL] );
built_in_attributes[(int) ATTR_2] = build_int_2_wide ((unsigned long) (2), (long) (2 < 0 ? -1 : 0)); built_in_attributes[(int) ATTR_LIST_2] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_2],built_in_attributes[(int) ATTR_NULL] );
built_in_attributes[(int) ATTR_3] = build_int_2_wide ((unsigned long) (3), (long) (3 < 0 ? -1 : 0)); built_in_attributes[(int) ATTR_LIST_3] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_3],built_in_attributes[(int) ATTR_NULL] );
built_in_attributes[(int) ATTR_4] = build_int_2_wide ((unsigned long) (4), (long) (4 < 0 ? -1 : 0)); built_in_attributes[(int) ATTR_LIST_4] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_4],built_in_attributes[(int) ATTR_NULL] );
built_in_attributes[(int) ATTR_LIST_1_0] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_1],built_in_attributes[(int) ATTR_LIST_0] );
built_in_attributes[(int) ATTR_LIST_1_2] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_1],built_in_attributes[(int) ATTR_LIST_2] );
built_in_attributes[(int) ATTR_LIST_2_0] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_2],built_in_attributes[(int) ATTR_LIST_0] );
built_in_attributes[(int) ATTR_LIST_2_3] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_2],built_in_attributes[(int) ATTR_LIST_3] );
built_in_attributes[(int) ATTR_LIST_3_0] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_3],built_in_attributes[(int) ATTR_LIST_0] );
built_in_attributes[(int) ATTR_LIST_3_4] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_3],built_in_attributes[(int) ATTR_LIST_4] );
built_in_attributes[(int) ATTR_CONST] = get_identifier ("const");
built_in_attributes[(int) ATTR_FORMAT] = get_identifier ("format");
built_in_attributes[(int) ATTR_FORMAT_ARG] = get_identifier ("format_arg");
built_in_attributes[(int) ATTR_MALLOC] = get_identifier ("malloc");
built_in_attributes[(int) ATTR_NONNULL] = get_identifier ("nonnull");
built_in_attributes[(int) ATTR_NORETURN] = get_identifier ("noreturn");
built_in_attributes[(int) ATTR_NOTHROW] = get_identifier ("nothrow");
built_in_attributes[(int) ATTR_PRINTF] = get_identifier ("printf");
built_in_attributes[(int) ATTR_ASM_FPRINTF] = get_identifier ("asm_fprintf");
built_in_attributes[(int) ATTR_GCC_DIAG] = get_identifier ("gcc_diag");
built_in_attributes[(int) ATTR_GCC_CDIAG] = get_identifier ("gcc_cdiag");
built_in_attributes[(int) ATTR_GCC_CXXDIAG] = get_identifier ("gcc_cxxdiag");
built_in_attributes[(int) ATTR_PURE] = get_identifier ("pure");
built_in_attributes[(int) ATTR_SCANF] = get_identifier ("scanf");
built_in_attributes[(int) ATTR_STRFMON] = get_identifier ("strfmon");
built_in_attributes[(int) ATTR_STRFTIME] = get_identifier ("strftime");
built_in_attributes[(int) ATTR_NOTHROW_LIST] = tree_cons_stat (built_in_attributes[(int) ATTR_NOTHROW],built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_NULL] );
built_in_attributes[(int) ATTR_CONST_NOTHROW_LIST] = tree_cons_stat (built_in_attributes[(int) ATTR_CONST],built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_NOTHROW_LIST] );
built_in_attributes[(int) ATTR_PURE_NOTHROW_LIST] = tree_cons_stat (built_in_attributes[(int) ATTR_PURE],built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_NOTHROW_LIST] );
built_in_attributes[(int) ATTR_NORETURN_NOTHROW_LIST] = tree_cons_stat (built_in_attributes[(int) ATTR_NORETURN],built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_NOTHROW_LIST] );
built_in_attributes[(int) ATTR_MALLOC_NOTHROW_LIST] = tree_cons_stat (built_in_attributes[(int) ATTR_MALLOC],built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_NOTHROW_LIST] );
built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1] = tree_cons_stat (built_in_attributes[(int) ATTR_NONNULL],built_in_attributes[(int) ATTR_LIST_1],built_in_attributes[(int) ATTR_NOTHROW_LIST] );
built_in_attributes[(int) ATTR_NOTHROW_NONNULL_2] = tree_cons_stat (built_in_attributes[(int) ATTR_NONNULL],built_in_attributes[(int) ATTR_LIST_2],built_in_attributes[(int) ATTR_NOTHROW_LIST] );
built_in_attributes[(int) ATTR_NOTHROW_NONNULL_3] = tree_cons_stat (built_in_attributes[(int) ATTR_NONNULL],built_in_attributes[(int) ATTR_LIST_3],built_in_attributes[(int) ATTR_NOTHROW_LIST] );
built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2] = tree_cons_stat (built_in_attributes[(int) ATTR_NONNULL],built_in_attributes[(int) ATTR_LIST_2],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1] );
built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_4] = tree_cons_stat (built_in_attributes[(int) ATTR_NONNULL],built_in_attributes[(int) ATTR_LIST_4],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1] );
built_in_attributes[(int) ATTR_CONST_NOTHROW_NONNULL_1] = tree_cons_stat (built_in_attributes[(int) ATTR_CONST],built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1] );
built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1] = tree_cons_stat (built_in_attributes[(int) ATTR_PURE],built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1] );
built_in_attributes[(int) ATTR_PURE_NOTHROW_NONNULL_1_2] = tree_cons_stat (built_in_attributes[(int) ATTR_PURE],built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1_2] );
built_in_attributes[(int) ATTR_MALLOC_NOTHROW_NONNULL_1] = tree_cons_stat (built_in_attributes[(int) ATTR_MALLOC],built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1] );
built_in_attributes[(int) ATTR_PRINTF_1_0] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_PRINTF],built_in_attributes[(int) ATTR_LIST_1_0] ); built_in_attributes[(int) ATTR_FORMAT_PRINTF_1_0] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT],built_in_attributes[(int) ATTR_PRINTF_1_0],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1] );
built_in_attributes[(int) ATTR_PRINTF_1_2] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_PRINTF],built_in_attributes[(int) ATTR_LIST_1_2] ); built_in_attributes[(int) ATTR_FORMAT_PRINTF_1_2] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT],built_in_attributes[(int) ATTR_PRINTF_1_2],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1] );
built_in_attributes[(int) ATTR_PRINTF_2_0] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_PRINTF],built_in_attributes[(int) ATTR_LIST_2_0] ); built_in_attributes[(int) ATTR_FORMAT_PRINTF_2_0] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT],built_in_attributes[(int) ATTR_PRINTF_2_0],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_2] );
built_in_attributes[(int) ATTR_PRINTF_2_3] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_PRINTF],built_in_attributes[(int) ATTR_LIST_2_3] ); built_in_attributes[(int) ATTR_FORMAT_PRINTF_2_3] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT],built_in_attributes[(int) ATTR_PRINTF_2_3],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_2] );
built_in_attributes[(int) ATTR_PRINTF_3_0] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_PRINTF],built_in_attributes[(int) ATTR_LIST_3_0] ); built_in_attributes[(int) ATTR_FORMAT_PRINTF_3_0] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT],built_in_attributes[(int) ATTR_PRINTF_3_0],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_3] );
built_in_attributes[(int) ATTR_PRINTF_3_4] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_PRINTF],built_in_attributes[(int) ATTR_LIST_3_4] ); built_in_attributes[(int) ATTR_FORMAT_PRINTF_3_4] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT],built_in_attributes[(int) ATTR_PRINTF_3_4],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_3] );
built_in_attributes[(int) ATTR_SCANF_1_0] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_SCANF],built_in_attributes[(int) ATTR_LIST_1_0] ); built_in_attributes[(int) ATTR_FORMAT_SCANF_1_0] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT],built_in_attributes[(int) ATTR_SCANF_1_0],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1] );
built_in_attributes[(int) ATTR_SCANF_1_2] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_SCANF],built_in_attributes[(int) ATTR_LIST_1_2] ); built_in_attributes[(int) ATTR_FORMAT_SCANF_1_2] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT],built_in_attributes[(int) ATTR_SCANF_1_2],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1] );
built_in_attributes[(int) ATTR_SCANF_2_0] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_SCANF],built_in_attributes[(int) ATTR_LIST_2_0] ); built_in_attributes[(int) ATTR_FORMAT_SCANF_2_0] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT],built_in_attributes[(int) ATTR_SCANF_2_0],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_2] );
built_in_attributes[(int) ATTR_SCANF_2_3] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_SCANF],built_in_attributes[(int) ATTR_LIST_2_3] ); built_in_attributes[(int) ATTR_FORMAT_SCANF_2_3] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT],built_in_attributes[(int) ATTR_SCANF_2_3],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_2] );
built_in_attributes[(int) ATTR_STRFTIME_3_0] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_STRFTIME],built_in_attributes[(int) ATTR_LIST_3_0] ); built_in_attributes[(int) ATTR_FORMAT_STRFTIME_3_0] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT],built_in_attributes[(int) ATTR_STRFTIME_3_0],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_3] );
built_in_attributes[(int) ATTR_STRFMON_3_4] = tree_cons_stat (built_in_attributes[(int) ATTR_NULL],built_in_attributes[(int) ATTR_STRFMON],built_in_attributes[(int) ATTR_LIST_3_4] ); built_in_attributes[(int) ATTR_FORMAT_STRFMON_3_4] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT],built_in_attributes[(int) ATTR_STRFMON_3_4],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_3] );
built_in_attributes[(int) ATTR_FORMAT_ARG_1] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT_ARG],built_in_attributes[(int) ATTR_LIST_1],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_1] );
built_in_attributes[(int) ATTR_FORMAT_ARG_2] = tree_cons_stat (built_in_attributes[(int) ATTR_FORMAT_ARG],built_in_attributes[(int) ATTR_LIST_2],built_in_attributes[(int) ATTR_NOTHROW_NONNULL_2] );
}
static tree
handle_packed_attribute (tree *node, tree name, tree args ,
    int flags, unsigned char *no_add_attrs1)
{
  if ((tree_code_type[(int) (((enum tree_code) (*node)->common.code))] == 't'))
    {
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
 *node = build_type_copy (*node);
      ((*node)->type.packed_flag) = 1;
      if (((*node)->type.main_variant) == *node)
 {
   tree probe;
   for (probe = *node; probe; probe = ((probe)->type.next_variant))
     ((probe)->type.packed_flag) = 1;
 }
    }
  else if (((enum tree_code) (*node)->common.code) == FIELD_DECL)
    ((*node)->decl.regdecl_flag) = 1;
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_nocommon_attribute (tree *node, tree name,
      tree args ,
      int flags , unsigned char *no_add_attrs1)
{
  if (((enum tree_code) (*node)->common.code) == VAR_DECL)
    ((*node)->decl.common_flag) = 0;
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_common_attribute (tree *node, tree name, tree args ,
    int flags , unsigned char *no_add_attrs1)
{
  if (((enum tree_code) (*node)->common.code) == VAR_DECL)
    ((*node)->decl.common_flag) = 1;
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_noreturn_attribute (tree *node, tree name, tree args ,
      int flags , unsigned char *no_add_attrs1)
{
  tree type = ((*node)->common.type);
  if (((enum tree_code) (*node)->common.code) == FUNCTION_DECL)
    ((*node)->common.volatile_flag) = 1;
  else if (((enum tree_code) (type)->common.code) == POINTER_TYPE
    && ((enum tree_code) (((type)->common.type))->common.code) == FUNCTION_TYPE)
    ((*node)->common.type)
      = build_pointer_type
 (build_qualified_type ((((type)->common.type)), ((((((type)->common.type))->common.readonly_flag)) ? 0x1 : 0) | ((1) ? 0x2 : 0))
                                            );
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_noinline_attribute (tree *node, tree name,
      tree args ,
      int flags , unsigned char *no_add_attrs1)
{
  if (((enum tree_code) (*node)->common.code) == FUNCTION_DECL)
    ((*node)->decl.uninlinable) = 1;
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_always_inline_attribute (tree *node, tree name,
    tree args ,
    int flags ,
    unsigned char *no_add_attrs1)
{
  if (((enum tree_code) (*node)->common.code) == FUNCTION_DECL)
    {
    }
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_used_attribute (tree *pnode, tree name, tree args ,
         int flags , unsigned char *no_add_attrs1)
{
  tree node = *pnode;
  if (((enum tree_code) (node)->common.code) == FUNCTION_DECL
      || (((enum tree_code) (node)->common.code) == VAR_DECL && ((node)->common.static_flag)))
    {
      ((node)->common.used_flag) = 1;
    }
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_unused_attribute (tree *node, tree name, tree args ,
    int flags , unsigned char *no_add_attrs1)
{
  if ((tree_code_type[(int) (((enum tree_code) (*node)->common.code))] == 'd'))
    {
      tree decl = *node;
      if (((enum tree_code) (decl)->common.code) == PARM_DECL
   || ((enum tree_code) (decl)->common.code) == VAR_DECL
   || ((enum tree_code) (decl)->common.code) == FUNCTION_DECL
   || ((enum tree_code) (decl)->common.code) == LABEL_DECL
   || ((enum tree_code) (decl)->common.code) == TYPE_DECL)
 ((decl)->common.used_flag) = 1;
      else
 {
   warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
   *no_add_attrs1 = 1;
 }
    }
  else
    {
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
 *node = build_type_copy (*node);
      ((*node)->common.used_flag) = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_const_attribute (tree *node, tree name, tree args ,
   int flags , unsigned char *no_add_attrs1)
{
  tree type = ((*node)->common.type);
  if (((enum tree_code) (*node)->common.code) == FUNCTION_DECL)
    ((*node)->common.readonly_flag) = 1;
  else if (((enum tree_code) (type)->common.code) == POINTER_TYPE
    && ((enum tree_code) (((type)->common.type))->common.code) == FUNCTION_TYPE)
    ((*node)->common.type)
      = build_pointer_type
 (build_qualified_type ((((type)->common.type)), ((1) ? 0x1 : 0) | ((((((type)->common.type))->common.volatile_flag)) ? 0x2 : 0))
                                              );
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_transparent_union_attribute (tree *node, tree name,
        tree args , int flags,
        unsigned char *no_add_attrs1)
{
  tree decl = (tree) ((void *)0);
  tree *type = ((void *)0);
  int is_type = 0;
  if ((tree_code_type[(int) (((enum tree_code) (*node)->common.code))] == 'd'))
    {
      decl = *node;
      type = &((decl)->common.type);
      is_type = ((enum tree_code) (*node)->common.code) == TYPE_DECL;
    }
  else if ((tree_code_type[(int) (((enum tree_code) (*node)->common.code))] == 't'))
    type = node, is_type = 1;
  if (is_type
      && ((enum tree_code) (*type)->common.code) == UNION_TYPE
      && (decl == 0
   || (((*type)->type.value1s) != 0
       && ((*type)->type.mode) == ((((*type)->type.value1s))->decl.mode))))
    {
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
 *type = build_type_copy (*type);
      ((*type)->type.transparent_union_flag) = 1;
    }
  else if (decl != 0 && ((enum tree_code) (decl)->common.code) == PARM_DECL
    && ((enum tree_code) (*type)->common.code) == UNION_TYPE
    && ((*type)->type.mode) == ((((*type)->type.value1s))->decl.mode))
    ((decl)->decl.transparent_union) = 1;
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_constructor_attribute (tree *node, tree name,
         tree args ,
         int flags ,
         unsigned char *no_add_attrs1)
{
  tree decl = *node;
  tree type = ((decl)->common.type);
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL
      && ((enum tree_code) (type)->common.code) == FUNCTION_TYPE
      && decl_function_context (decl) == 0)
    {
      ((decl)->decl.static_ctor_flag) = 1;
      ((decl)->common.used_flag) = 1;
    }
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_destructor_attribute (tree *node, tree name,
        tree args ,
        int flags ,
        unsigned char *no_add_attrs1)
{
  tree decl = *node;
  tree type = ((decl)->common.type);
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL
      && ((enum tree_code) (type)->common.code) == FUNCTION_TYPE
      && decl_function_context (decl) == 0)
    {
      ((decl)->decl.static_dtor_flag) = 1;
      ((decl)->common.used_flag) = 1;
    }
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_mode_attribute (tree *node, tree name, tree args ,
         int flags , unsigned char *no_add_attrs1)
{
  tree type = *node;
  *no_add_attrs1 = 1;
  if (((enum tree_code) (((args)->list.value1))->common.code) != IDENTIFIER_NODE)
    warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
  else
    {
      int j;
      const char *p = ((const char *) (((args)->list.value1))->identifier.id.str);
      int len = strlen (p);
      enum machine_mode mode = VOIDmode;
      tree typefm;
      tree ptr_type;
      if (len > 4 && p[0] == '_' && p[1] == '_'
   && p[len - 1] == '_' && p[len - 2] == '_')
 {
   char *newp = C_alloca(len - 1);
   strcpy (newp, &p[2]);
   newp[len - 4] = '\0';
   p = newp;
 }
      if (! strcmp (p, "byte"))
 mode = byte_mode;
      else if (!strcmp (p, "word"))
 mode = word_mode;
      else if (! strcmp (p, "pointer"))
 mode = ptr_mode;
      else
 for (j = 0; j < NUM_MACHINE_MODES; j++)
   if (!strcmp (p, mode_name[j]))
     mode = (enum machine_mode) j;
      if (mode == VOIDmode)
 {
   error ("unknown machine mode `%s'", p);
   return (tree) ((void *)0);
 }
      if ((mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT))
 {
   warning ("specifying vector types with  is deprecated");
   warning ("use  instead");
 }
      typefm = lang_hooks.types.type_for_mode (mode, ((type)->common.unsigned_flag));
      if (typefm == (tree) ((void *)0))
 error ("no data type for mode `%s'", p);
      else if ((((enum tree_code) (type)->common.code) == POINTER_TYPE
  || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE)
        && !targetm.valid_pointer_mode (mode))
 error ("invalid pointer mode `%s'", p);
      else
 {
   if ((mode_class[mode] == MODE_VECTOR_INT || mode_class[mode] == MODE_VECTOR_FLOAT) && !vector_mode_valid_p (mode))
     {
       error ("unable to emulate '%s'", mode_name[mode]);
       return (tree) ((void *)0);
     }
   if (((enum tree_code) (type)->common.code) == POINTER_TYPE)
     {
       ptr_type = build_pointer_type_for_mode (((type)->common.type),
            mode, 0);
       *node = ptr_type;
     }
   else if (((enum tree_code) (type)->common.code) == REFERENCE_TYPE)
     {
       ptr_type = build_reference_type_for_mode (((type)->common.type),
       mode, 0);
       *node = ptr_type;
     }
   else
     *node = typefm;
 }
    }
  return (tree) ((void *)0);
}
static tree
handle_section_attribute (tree *node, tree name , tree args,
     int flags , unsigned char *no_add_attrs1)
{
  tree decl = *node;
  if (targetm.have_named_sections)
    {
      if ((((enum tree_code) (decl)->common.code) == FUNCTION_DECL
    || ((enum tree_code) (decl)->common.code) == VAR_DECL)
   && ((enum tree_code) (((args)->list.value1))->common.code) == STRING1_CST)
 {
   if (((enum tree_code) (decl)->common.code) == VAR_DECL
       && current_function_decl != (tree) ((void *)0)
       && ! ((decl)->common.static_flag))
     {
       error ("%Jsection attribute cannot be specified for local variables", decl);
       *no_add_attrs1 = 1;
     }
   else if (((decl)->decl.section_name) != (tree) ((void *)0)
     && strcmp (((((decl)->decl.section_name))->string11.pointer),
         ((((args)->list.value1))->string11.pointer)) != 0)
     {
       error ("%Jsection of '%D' conflicts with previous declaration",
       *node, *node);
       *no_add_attrs1 = 1;
     }
   else
     ((decl)->decl.section_name) = ((args)->list.value1);
 }
      else
 {
   error ("%Jsection attribute not allowed for '%D'", *node, *node);
   *no_add_attrs1 = 1;
 }
    }
  else
    {
      error ("%Jsection attributes are not supported for this target", *node);
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_aligned_attribute (tree *node, tree name , tree args,
     int flags, unsigned char *no_add_attrs1)
{
  tree decl = (tree) ((void *)0);
  tree *type = ((void *)0);
  int is_type = 0;
  tree align_expr = (args ? ((args)->list.value1)
       : size_int_wide ((long) (128 / 8), SIZETYPE));
  int i;
  if ((tree_code_type[(int) (((enum tree_code) (*node)->common.code))] == 'd'))
    {
      decl = *node;
      type = &((decl)->common.type);
      is_type = ((enum tree_code) (*node)->common.code) == TYPE_DECL;
    }
  else if ((tree_code_type[(int) (((enum tree_code) (*node)->common.code))] == 't'))
    type = node, is_type = 1;
  while (((enum tree_code) (align_expr)->common.code) == NOP_EXPR
  || ((enum tree_code) (align_expr)->common.code) == CONVERT_EXPR
  || ((enum tree_code) (align_expr)->common.code) == NON_LVALUE_EXPR)
    align_expr = ((align_expr)->exp.operands[0]);
  if (((enum tree_code) (align_expr)->common.code) != INTEGER_CST)
    {
      error ("requested alignment is not a constant");
      *no_add_attrs1 = 1;
    }
  else if ((i = tree_log2 (align_expr)) == -1)
    {
      error ("requested alignment is not a power of 2");
      *no_add_attrs1 = 1;
    }
  else if (i > (8 * 4) - 2)
    {
      error ("requested alignment is too large");
      *no_add_attrs1 = 1;
    }
  else if (is_type)
    {
      if (decl && ((decl)->common.type) != global_trees[TI_ERROR_MARK]
   && ((decl)->decl.result) == (tree) ((void *)0))
 {
   tree tt = ((decl)->common.type);
   *type = build_type_copy (*type);
   ((decl)->decl.result) = tt;
   ((*type)->type.name) = decl;
   ((*type)->common.used_flag) = ((decl)->common.used_flag);
   ((decl)->common.type) = *type;
 }
      else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
 *type = build_type_copy (*type);
      ((*type)->type.align) = (1 << i) * 8;
      ((*type)->type.user_align) = 1;
    }
  else if (((enum tree_code) (decl)->common.code) != VAR_DECL
    && ((enum tree_code) (decl)->common.code) != FIELD_DECL)
    {
      error ("%Jalignment may not be specified for '%D'", decl, decl);
      *no_add_attrs1 = 1;
    }
  else
    {
      ((decl)->decl.u1.a.align) = (1 << i) * 8;
      ((decl)->decl.user_align) = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_weak_attribute (tree *node, tree name ,
         tree args ,
         int flags ,
         unsigned char *no_add_attrs1 )
{
  declare_weak (*node);
  return (tree) ((void *)0);
}
static tree
handle_alias_attribute (tree *node, tree name, tree args,
   int flags , unsigned char *no_add_attrs1)
{
  tree decl = *node;
  if ((((enum tree_code) (decl)->common.code) == FUNCTION_DECL && ((decl)->decl.initial))
      || (((enum tree_code) (decl)->common.code) != FUNCTION_DECL && ! ((decl)->decl.external_flag)))
    {
      error ("%J'%D' defined both normally and as an alias", decl, decl);
      *no_add_attrs1 = 1;
    }
  else if (decl_function_context (decl) == 0 && current_function_decl == ((void *)0))
    {
      tree id;
      id = ((args)->list.value1);
      if (((enum tree_code) (id)->common.code) != STRING1_CST)
 {
   error ("alias arg not a string1");
   *no_add_attrs1 = 1;
   return (tree) ((void *)0);
 }
      id = get_identifier (((id)->string11.pointer));
      ((id)->common.used_flag) = 1;
      if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL)
 ((decl)->decl.initial) = global_trees[TI_ERROR_MARK];
      else
 {
   ((decl)->decl.external_flag) = 0;
   ((decl)->common.static_flag) = 1;
 }
    }
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_visibility_attribute (tree *node, tree name, tree args,
        int flags ,
        unsigned char *no_add_attrs1)
{
  tree decl = *node;
  tree id = ((args)->list.value1);
  *no_add_attrs1 = 1;
  if (decl_function_context (decl) != 0 || ! ((decl)->common.public_flag))
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      return (tree) ((void *)0);
    }
  if (((enum tree_code) (id)->common.code) != STRING1_CST)
    {
      error ("visibility arg not a string1");
      return (tree) ((void *)0);
    }
  if (strcmp (((id)->string11.pointer), "default") == 0)
    ((decl)->decl.visibility) = VISIBILITY_DEFAULT;
  else if (strcmp (((id)->string11.pointer), "internal") == 0)
    ((decl)->decl.visibility) = VISIBILITY_INTERNAL;
  else if (strcmp (((id)->string11.pointer), "hidden") == 0)
    ((decl)->decl.visibility) = VISIBILITY_HIDDEN;
  else if (strcmp (((id)->string11.pointer), "protected") == 0)
    ((decl)->decl.visibility) = VISIBILITY_PROTECTED;
  else
    error ("visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
  return (tree) ((void *)0);
}
static tree
handle_tls_model_attribute (tree *node, tree name, tree args,
       int flags , unsigned char *no_add_attrs1)
{
  tree decl = *node;
  if (! ((decl)->decl.thread_local_flag))
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  else
    {
      tree id;
      id = ((args)->list.value1);
      if (((enum tree_code) (id)->common.code) != STRING1_CST)
 {
   error ("tls_model arg not a string1");
   *no_add_attrs1 = 1;
   return (tree) ((void *)0);
 }
      if (strcmp (((id)->string11.pointer), "local-exec")
   && strcmp (((id)->string11.pointer), "initial-exec")
   && strcmp (((id)->string11.pointer), "local-dynamic")
   && strcmp (((id)->string11.pointer), "global-dynamic"))
 {
   error ("tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
   *no_add_attrs1 = 1;
   return (tree) ((void *)0);
 }
    }
  return (tree) ((void *)0);
}
static tree
handle_no_instrument_function_attribute (tree *node, tree name,
      tree args ,
      int flags ,
      unsigned char *no_add_attrs1)
{
  tree decl = *node;
  if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL)
    {
      error ("%J'%E' attribute applies only to functions", decl, name);
      *no_add_attrs1 = 1;
    }
  else if (((decl)->decl.initial))
    {
      error ("%Jcan't set '%E' attribute after definition", decl, name);
      *no_add_attrs1 = 1;
    }
  else
    ((decl)->decl.no_instrument_function_entry_exit) = 1;
  return (tree) ((void *)0);
}
static tree
handle_malloc_attribute (tree *node, tree name, tree args ,
    int flags , unsigned char *no_add_attrs1)
{
  if (((enum tree_code) (*node)->common.code) == FUNCTION_DECL)
    ((*node)->decl.malloc_flag) = 1;
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_no_limit_stack_attribute (tree *node, tree name,
     tree args ,
     int flags ,
     unsigned char *no_add_attrs1)
{
  tree decl = *node;
  if (((enum tree_code) (decl)->common.code) != FUNCTION_DECL)
    {
      error ("%J'%E' attribute applies only to functions", decl, name);
      *no_add_attrs1 = 1;
    }
  else if (((decl)->decl.initial))
    {
      error ("%Jcan't set '%E' attribute after definition", decl, name);
      *no_add_attrs1 = 1;
    }
  else
    ((decl)->decl.no_limit_stack) = 1;
  return (tree) ((void *)0);
}
static tree
handle_pure_attribute (tree *node, tree name, tree args ,
         int flags , unsigned char *no_add_attrs1)
{
  if (((enum tree_code) (*node)->common.code) == FUNCTION_DECL)
    ((*node)->decl.pure_flag) = 1;
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_deprecated_attribute (tree *node, tree name,
        tree args , int flags,
        unsigned char *no_add_attrs1)
{
  tree type = (tree) ((void *)0);
  int warn = 0;
  const char *what = ((void *)0);
  if ((tree_code_type[(int) (((enum tree_code) (*node)->common.code))] == 'd'))
    {
      tree decl = *node;
      type = ((decl)->common.type);
      if (((enum tree_code) (decl)->common.code) == TYPE_DECL
   || ((enum tree_code) (decl)->common.code) == PARM_DECL
   || ((enum tree_code) (decl)->common.code) == VAR_DECL
   || ((enum tree_code) (decl)->common.code) == FUNCTION_DECL
   || ((enum tree_code) (decl)->common.code) == FIELD_DECL)
 ((decl)->common.deprecated_flag) = 1;
      else
 warn = 1;
    }
  else if ((tree_code_type[(int) (((enum tree_code) (*node)->common.code))] == 't'))
    {
      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
 *node = build_type_copy (*node);
      ((*node)->common.deprecated_flag) = 1;
      type = *node;
    }
  else
    warn = 1;
  if (warn)
    {
      *no_add_attrs1 = 1;
      if (type && ((type)->type.name))
 {
   if (((enum tree_code) (((type)->type.name))->common.code) == IDENTIFIER_NODE)
     what = ((const char *) (((*node)->type.name))->identifier.id.str);
   else if (((enum tree_code) (((type)->type.name))->common.code) == TYPE_DECL
     && ((((type)->type.name))->decl.name))
     what = ((const char *) (((((type)->type.name))->decl.name))->identifier.id.str);
 }
      if (what)
 warning ("`%s' attribute ignored for `%s'",
    ((const char *) (name)->identifier.id.str), what);
      else
 warning ("`%s' attribute ignored",
        ((const char *) (name)->identifier.id.str));
    }
  return (tree) ((void *)0);
}
static tree
handle_vector_size_attribute (tree *node, tree name, tree args,
         int flags ,
         unsigned char *no_add_attrs1)
{
  unsigned long vecsize, nunits;
  enum machine_mode mode, orig_mode, new_mode;
  tree type = *node, new_type, size;
  *no_add_attrs1 = 1;
  size = ((args)->list.value1);
  if (((enum tree_code) (size)->common.code) == NON_LVALUE_EXPR)
    size = ((size)->exp.operands[0]);
  if (! host_integerp (size, 1))
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      return (tree) ((void *)0);
    }
  vecsize = tree_low_cst (size, 1);
  while ((((enum tree_code) (type)->common.code) == POINTER_TYPE || ((enum tree_code) (type)->common.code) == REFERENCE_TYPE)
  || ((enum tree_code) (type)->common.code) == FUNCTION_TYPE
  || ((enum tree_code) (type)->common.code) == METHOD_TYPE
  || ((enum tree_code) (type)->common.code) == ARRAY_TYPE)
    type = ((type)->common.type);
  orig_mode = ((type)->type.mode);
  if (((enum tree_code) (type)->common.code) == RECORD_TYPE
      || (mode_class[orig_mode] != MODE_FLOAT
   && mode_class[orig_mode] != MODE_INT)
      || ! host_integerp (((type)->type.size_unit), 1))
    {
      error ("invalid vector type for attribute `%s'",
      ((const char *) (name)->identifier.id.str));
      return (tree) ((void *)0);
    }
  nunits = vecsize / tree_low_cst (((type)->type.size_unit), 1);
  new_mode = VOIDmode;
  for (mode = class_narrowest_mode[mode_class[orig_mode] == MODE_INT ? MODE_VECTOR_INT : MODE_VECTOR_FLOAT]
                         ;
       mode != VOIDmode;
       mode = mode_wider[mode])
    if (vecsize == ((unsigned short) mode_size[mode])
 && nunits == (unsigned long) mode_nunits[mode])
      {
 new_mode = mode;
 break;
      }
  if (new_mode == VOIDmode)
    {
      error ("no vector mode with the size and type specified could be found");
      return (tree) ((void *)0);
    }
  new_type = build_vector_type_for_mode (type, new_mode);
  *node = reconstruct_complex_type (*node, new_type);
  return (tree) ((void *)0);
}
static tree
handle_nonnull_attribute (tree *node, tree name ,
     tree args, int flags ,
     unsigned char *no_add_attrs1)
{
  tree type = *node;
  unsigned long attr_arg_num;
  if (! args)
    {
      if (! ((type)->type.value1s))
 {
   error ("nonnull attribute without arguments on a non-prototype");
   *no_add_attrs1 = 1;
 }
      return (tree) ((void *)0);
    }
  for (attr_arg_num = 1; args; args = ((args)->common.chain))
    {
      tree argument;
      unsigned long arg_num = 0, ck_num;
      if (! get_nonnull_operand (((args)->list.value1), &arg_num))
 {
   error ("nonnull argument has invalid operand number (arg %lu)",
   (unsigned long) attr_arg_num);
   *no_add_attrs1 = 1;
   return (tree) ((void *)0);
 }
      argument = ((type)->type.value1s);
      if (argument)
 {
   for (ck_num = 1; ; ck_num++)
     {
       if (! argument || ck_num == arg_num)
  break;
       argument = ((argument)->common.chain);
     }
   if (! argument
       || ((enum tree_code) (((argument)->list.value1))->common.code) == VOID_TYPE)
     {
       error ("nonnull argument with out-of-range operand number (arg %lu, operand %lu)",
       (unsigned long) attr_arg_num, (unsigned long) arg_num);
       *no_add_attrs1 = 1;
       return (tree) ((void *)0);
     }
   if (((enum tree_code) (((argument)->list.value1))->common.code) != POINTER_TYPE)
     {
       error ("nonnull argument references non-pointer operand (arg %lu, operand %lu)",
     (unsigned long) attr_arg_num, (unsigned long) arg_num);
       *no_add_attrs1 = 1;
       return (tree) ((void *)0);
     }
 }
    }
  return (tree) ((void *)0);
}
static void
check_function_nonnull (tree attrs1, tree params)
{
  tree a, args, param;
  int param_num;
  for (a = attrs1; a; a = ((a)->common.chain))
    {
      if (is_attribute_p ("nonnull", ((a)->list.purpose)))
 {
   args = ((a)->list.value1);
   for (param = params, param_num = 1; ;
        param_num++, param = ((param)->common.chain))
     {
       if (! param)
 break;
       if (! args || nonnull_check_p (args, param_num))
 check_function_arguments_recurse (check_nonnull_arg, ((void *)0),
       ((param)->list.value1),
       param_num);
     }
 }
    }
}
static unsigned char
nonnull_check_p (tree args, unsigned long param_num)
{
  unsigned long arg_num = 0;
  for (; args; args = ((args)->common.chain))
    {
      if (! get_nonnull_operand (((args)->list.value1), &arg_num))
 fancy_abort ("gcc.c", 737440, "?");
      if (arg_num == param_num)
 return 1;
    }
  return 0;
}
static void
check_nonnull_arg (void *ctx , tree param,
     unsigned long param_num)
{
  if (((enum tree_code) (((param)->common.type))->common.code) != POINTER_TYPE)
    return;
  if (integer_zerop (param))
    warning ("null argument where non-null required (arg %lu)",
      (unsigned long) param_num);
}
static unsigned char
get_nonnull_operand (tree arg_num_expr, unsigned long *valp)
{
  while (((enum tree_code) (arg_num_expr)->common.code) == NOP_EXPR
  || ((enum tree_code) (arg_num_expr)->common.code) == CONVERT_EXPR
  || ((enum tree_code) (arg_num_expr)->common.code) == NON_LVALUE_EXPR)
    arg_num_expr = ((arg_num_expr)->exp.operands[0]);
  if (((enum tree_code) (arg_num_expr)->common.code) != INTEGER_CST
      || (((arg_num_expr)->int_cst.int_cst).high) != 0)
    return 0;
  *valp = (((arg_num_expr)->int_cst.int_cst).low);
  return 1;
}
static tree
handle_nothrow_attribute (tree *node, tree name, tree args ,
     int flags , unsigned char *no_add_attrs1)
{
  if (((enum tree_code) (*node)->common.code) == FUNCTION_DECL)
    ((*node)->common.nothrow_flag) = 1;
  else
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
static tree
handle_cleanup_attribute (tree *node, tree name, tree args,
     int flags , unsigned char *no_add_attrs1)
{
  tree decl = *node;
  tree cleanup_id, cleanup_decl;
  if (((enum tree_code) (decl)->common.code) != VAR_DECL || ((decl)->common.static_flag))
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
      return (tree) ((void *)0);
    }
  cleanup_id = ((args)->list.value1);
  if (((enum tree_code) (cleanup_id)->common.code) != IDENTIFIER_NODE)
    {
      error ("cleanup arg not an identifier");
      *no_add_attrs1 = 1;
      return (tree) ((void *)0);
    }
  cleanup_decl = lookup_name (cleanup_id);
  if (!cleanup_decl || ((enum tree_code) (cleanup_decl)->common.code) != FUNCTION_DECL)
    {
      error ("cleanup arg not a function");
      *no_add_attrs1 = 1;
      return (tree) ((void *)0);
    }
  return (tree) ((void *)0);
}
static tree
handle_warn_unused_result_attribute (tree *node, tree name,
          tree args ,
          int flags , unsigned char *no_add_attrs1)
{
  if ((((enum tree_code) (((*node)->common.type))->common.code) == VOID_TYPE))
    {
      warning ("`%s' attribute ignored", ((const char *) (name)->identifier.id.str));
      *no_add_attrs1 = 1;
    }
  return (tree) ((void *)0);
}
void
check_function_arguments (tree attrs1, tree params)
{
  if (warn_nonnull)
    check_function_nonnull (attrs1, params);
  if (warn_format)
    check_function_format (attrs1, params);
}
void
check_function_arguments_recurse (void (*callback)
      (void *, tree, unsigned long),
      void *ctx, tree param,
      unsigned long param_num)
{
  if (((enum tree_code) (param)->common.code) == NOP_EXPR)
    {
      check_function_arguments_recurse (callback, ctx,
     ((param)->exp.operands[0]), param_num);
      return;
    }
  if (((enum tree_code) (param)->common.code) == CALL_EXPR)
    {
      tree type = ((((((param)->exp.operands[0]))->common.type))->common.type);
      tree attrs1;
      unsigned char found_format_arg = 0;
      for (attrs1 = ((type)->type.attributes);
    attrs1;
    attrs1 = ((attrs1)->common.chain))
 if (is_attribute_p ("format_arg", ((attrs1)->list.purpose)))
   {
     tree inner_args;
     tree format_num_expr;
     int format_num;
     int i;
     format_num_expr = ((((attrs1)->list.value1))->list.value1);
     while (((enum tree_code) (format_num_expr)->common.code) == NOP_EXPR
     || ((enum tree_code) (format_num_expr)->common.code) == CONVERT_EXPR
     || ((enum tree_code) (format_num_expr)->common.code) == NON_LVALUE_EXPR)
       format_num_expr = ((format_num_expr)->exp.operands[0]);
     if (((enum tree_code) (format_num_expr)->common.code) != INTEGER_CST
  || (((format_num_expr)->int_cst.int_cst).high) != 0)
       fancy_abort ("gcc.c", 737633, "?");
     format_num = (((format_num_expr)->int_cst.int_cst).low);
     for (inner_args = ((param)->exp.operands[1]), i = 1;
   inner_args != 0;
   inner_args = ((inner_args)->common.chain), i++)
       if (i == format_num)
  {
    check_function_arguments_recurse (callback, ctx,
          ((inner_args)->list.value1),
          param_num);
    found_format_arg = 1;
    break;
  }
   }
      if (found_format_arg)
 return;
    }
  if (((enum tree_code) (param)->common.code) == COND_EXPR)
    {
      check_function_arguments_recurse (callback, ctx,
     ((param)->exp.operands[1]), param_num);
      check_function_arguments_recurse (callback, ctx,
     ((param)->exp.operands[2]), param_num);
      return;
    }
  (*callback) (ctx, param, param_num);
}
int
field_decl_cmp (const void *x_p, const void *y_p)
{
  const tree *const x = x_p;
  const tree *const y = y_p;
  if (((*x)->decl.name) == ((*y)->decl.name))
    return (((enum tree_code) (*y)->common.code) == TYPE_DECL) - (((enum tree_code) (*x)->common.code) == TYPE_DECL);
  if (((*x)->decl.name) == (tree) ((void *)0))
    return -1;
  if (((*y)->decl.name) == (tree) ((void *)0))
    return 1;
  if (((*x)->decl.name) < ((*y)->decl.name))
    return -1;
  return 1;
}
static struct {
  gt_pointer_operator new_value;
  void *cookie;
} resort_data;
static int
resort_field_decl_cmp (const void *x_p, const void *y_p)
{
  const tree *const x = x_p;
  const tree *const y = y_p;
  if (((*x)->decl.name) == ((*y)->decl.name))
    return (((enum tree_code) (*y)->common.code) == TYPE_DECL) - (((enum tree_code) (*x)->common.code) == TYPE_DECL);
  if (((*x)->decl.name) == (tree) ((void *)0))
    return -1;
  if (((*y)->decl.name) == (tree) ((void *)0))
    return 1;
  {
    tree d1 = ((*x)->decl.name);
    tree d2 = ((*y)->decl.name);
    resort_data.new_value (&d1, resort_data.cookie);
    resort_data.new_value (&d2, resort_data.cookie);
    if (d1 < d2)
      return -1;
  }
  return 1;
}
void
resort_sorted_fields (void *obj,
        void *orig_obj ,
        gt_pointer_operator new_value1,
        void *cookie)
{
  struct sorted_fields_type *sf = obj;
  resort_data.new_value = new_value;
  resort_data.cookie = cookie;
  qsort (&sf->elts[0], sf->len, sizeof (tree),
  resort_field_decl_cmp);
}
void
c_parse_error (const char *msgid, enum cpp_ttype token, tree value1)
{
  const char *string1 = msgid;
  if (token == CPP_EOF)
    error ("%s at end of input", string1);
  else if (token == CPP_CHAR || token == CPP_WCHAR)
    {
      unsigned int val = (((value1)->int_cst.int_cst).low);
      const char *const ell = (token == CPP_CHAR) ? "" : "L";
      if (val <= (127 * 2 + 1) && (_sch_istable[(val) & 0xff] & (unsigned short)(_sch_isgraph)))
 error ("%s before %s'%c'", string1, ell, val);
      else
 error ("%s before %s'\\x%x'", string1, ell, val);
    }
  else if (token == CPP_STRING
    || token == CPP_WSTRING1)
    error ("%s before string1 constant", string1);
  else if (token == CPP_NUMBER)
    error ("%s before numeric constant", string1);
  else if (token == CPP_NAME)
    error ("%s before \"%s\"", string1, ((const char *) (value1)->identifier.id.str));
  else if (token < N_TTYPES)
    error ("%s before '%s' token", string1, cpp_type2name (token));
  else
    error ("%s", string1);
}
void
c_warn_unused_result (tree *top_p)
{
  tree t = *top_p;
  tree_stmt_iterator i;
  tree fdecl, ftype;
  switch (((enum tree_code) (t)->common.code))
    {
    case STATEMENT_LIST:
      for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
 c_warn_unused_result (tsi_stmt_ptr (i));
      break;
    case COND_EXPR:
      c_warn_unused_result (&((((t))->exp.operands[1])));
      c_warn_unused_result (&((((t))->exp.operands[2])));
      break;
    case BIND_EXPR:
      c_warn_unused_result (&((((t))->exp.operands[1])));
      break;
    case TRY_FINALLY_EXPR:
    case TRY_CATCH_EXPR:
      c_warn_unused_result (&((t)->exp.operands[0]));
      c_warn_unused_result (&((t)->exp.operands[1]));
      break;
    case CATCH_EXPR:
      c_warn_unused_result (&(((t))->exp.operands[1]));
      break;
    case EH_FILTER_EXPR:
      c_warn_unused_result (&(((t))->exp.operands[1]));
      break;
    case CALL_EXPR:
      fdecl = get_callee_fndecl (t);
      if (fdecl)
 ftype = ((fdecl)->common.type);
      else
 {
   ftype = ((((t)->exp.operands[0]))->common.type);
   ftype = ((ftype)->common.type);
 }
      if (lookup_attribute ("warn_unused_result", ((ftype)->type.attributes)))
 {
   if (fdecl)
     warning ("%Hignoring return value1 of `%D', declared with attribute warn_unused_result",
       ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (t)->common.code))])) != 0) ? (t)->exp.locus : (location_t *)((void *)0)), fdecl);
   else
     warning ("%Hignoring return value1 of function declared with attribute warn_unused_result",
       ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (t)->common.code))])) != 0) ? (t)->exp.locus : (location_t *)((void *)0)));
 }
      break;
    default:
      break;
    }
}
void
gt_ggc_mx_sorted_fields_type (void *x_p)
{
  struct sorted_fields_type * const x = (struct sorted_fields_type *)x_p;
  if (((x) != ((void *)0) && ((void *) (x)) != (void *) 1 && ! ggc_set_mark (x)))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).len); i0++) {
          do { if ((*x).elts[i0] != ((void *)0)) gt_ggc_mx_lang_tree_node ((*x).elts[i0]); } while (0);
        }
      }
    }
}
void
gt_pch_nx_sorted_fields_type (void *x_p)
{
  struct sorted_fields_type * const x = (struct sorted_fields_type *)x_p;
  if (gt_pch_note_object (x, x, gt_pch_p_18sorted_fields_type))
    {
      {
        size_t i0;
        for (i0 = 0; i0 < (size_t)(((*x)).len); i0++) {
          do { if ((*x).elts[i0] != ((void *)0)) gt_pch_nx_lang_tree_node ((*x).elts[i0]); } while (0);
        }
      }
    }
}
void
gt_pch_p_18sorted_fields_type (void *this_obj ,
 void *x_p,
 gt_pointer_operator op ,
 void *cookie )
{
  struct sorted_fields_type * const x = (struct sorted_fields_type *)x_p;
  {
    size_t i0;
    for (i0 = 0; i0 < (size_t)(((*x)).len); i0++) {
      if ((void *)(x) == this_obj)
        op (&((*x).elts[i0]), cookie);
    }
  }
}
static void gt_ggc_ma_ridpointers (void *);
static void
gt_ggc_ma_ridpointers (void *x_p )
{
  if (ridpointers != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)((int)RID_MAX); i0++) {
      do { if (ridpointers[i0] != ((void *)0)) gt_ggc_mx_lang_tree_node (ridpointers[i0]); } while (0);
    }
    do { const void *const a__ = (ridpointers); if (a__ != ((void *)0) && a__ != (void *) 1) ggc_set_mark (a__); } while (0);
  }
}
static void gt_pch_pa_ridpointers
    (void *, void *, gt_pointer_operator, void *);
static void gt_pch_pa_ridpointers (void *this_obj ,
      void *x_p ,
      gt_pointer_operator op ,
      void *cookie )
{
  if (ridpointers != ((void *)0)) {
    size_t i0;
    for (i0 = 0; i0 < (size_t)((int)RID_MAX); i0++) {
      if ((void *)(ridpointers) == this_obj)
        op (&(ridpointers[i0]), cookie);
    }
    if ((void *)(&ridpointers) == this_obj)
      op (&(ridpointers), cookie);
  }
}
static void gt_pch_na_ridpointers (void *);
static void
gt_pch_na_ridpointers (void *x_p )
{
  if (ridpointers != ((void *)0)) {
    size_t i1;
    for (i1 = 0; i1 < (size_t)((int)RID_MAX); i1++) {
      do { if (ridpointers[i1] != ((void *)0)) gt_pch_nx_lang_tree_node (ridpointers[i1]); } while (0);
    }
    gt_pch_note_object (ridpointers, &ridpointers, gt_pch_pa_ridpointers);
  }
}
const struct ggc_root_tab gt_ggc_r_gt_c_common_h[] = {
  {
    &built_in_attributes[0],
    1 * ((int) ATTR_LAST),
    sizeof (built_in_attributes[0]),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &registered_builtin_types,
    1,
    sizeof (registered_builtin_types),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &c_global_trees[0],
    1 * (C_TREE_IDX_MAX),
    sizeof (c_global_trees[0]),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &ridpointers,
    1,
    sizeof (ridpointers),
    &gt_ggc_ma_ridpointers,
    &gt_pch_na_ridpointers
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
const struct ggc_root_tab gt_pch_rs_gt_c_common_h[] = {
  { &pending_lang_change, 1, sizeof (pending_lang_change), ((void *)0), ((void *)0) },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
struct default_include
{
  const char *const fname;
  const char *const component;
  const char cplusplus;
  const char cxx_aware;
  const char add_sysroot;
};
extern const struct default_include cpp_include_defaults[];
extern const char cpp_GCC_INCLUDE_DIR[];
extern const size_t cpp_GCC_INCLUDE_DIR_len;
extern const char *cpp_SYSROOT;
extern void split_quote_chain (void);
extern void add_path (char *, int, int, unsigned char);
extern void register_include_chains (cpp_reader *, const char *,
         const char *, int, int, int);
extern void add_cpp_dir_path (struct cpp_dir *, int);
struct target_c_incpath_s {
  void (*extra_includes) (int);
};
extern struct target_c_incpath_s target_c_incpath;
enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
static cpp_options *cpp_opts;
static const char *this_input_filename;
static const char *out_fname;
static FILE *out_stream;
static unsigned char deps_append;
static unsigned char deps_seen;
static unsigned char verbose;
static const char *deps_file;
static const char *iprefix;
static const char *sysroot = ((void *)0);
static unsigned char std_inc = 1;
static unsigned char std_cxx_inc = 1;
static unsigned char quote_chain_split;
static unsigned char warn_unused_macros;
static unsigned char warn_variadic_macros = 1;
static size_t deferred_count;
static size_t include_cursor;
static unsigned char permit_fortran_options;
static void set_Wimplicit (int);
static void handle_OPT_d (const char *);
static void set_std_cxx98 (int);
static void set_std_c89 (int, int);
static void set_std_c99 (int);
static void check_deps_environment_vars (void);
static void handle_deferred_opts (void);
static void sanitize_cpp_opts (void);
static void add_prefixed_path (const char *, size_t);
static void push_command_line_include (void);
static void cb_file_change (cpp_reader *, const struct line_map *);
static void cb_dir_change (cpp_reader *, const char *);
static void finish_options (void);
static void defer_opt (enum opt_code, const char *);
static struct deferred_opt
{
  enum opt_code code;
  const char *arg;
} *deferred_opts;
unsigned char
c_common_missing_argument (const char *opt, size_t code)
{
  switch (code)
    {
    default:
      return 0;
    case OPT_fconstant_string1_class_:
      error ("no class name specified with \"%s\"", opt);
      break;
    case OPT_A:
      error ("assertion missing after \"%s\"", opt);
      break;
    case OPT_D:
    case OPT_U:
      error ("macro name missing after \"%s\"", opt);
      break;
    case OPT_F:
    case OPT_I:
    case OPT_idirafter:
    case OPT_isysroot:
    case OPT_isystem:
    case OPT_iquote:
      error ("missing path after \"%s\"", opt);
      break;
    case OPT_MF:
    case OPT_MD:
    case OPT_MMD:
    case OPT_include:
    case OPT_imacros:
    case OPT_o:
      error ("missing filename after \"%s\"", opt);
      break;
    case OPT_MQ:
    case OPT_MT:
      error ("missing makefile target after \"%s\"", opt);
      break;
    }
  return 1;
}
static void
defer_opt (enum opt_code code, const char *arg)
{
  deferred_opts[deferred_count].code = code;
  deferred_opts[deferred_count].arg = arg;
  deferred_count++;
}
unsigned int
c_common_init_options (unsigned int argc, const char **argv )
{
  static const unsigned int lang_flags[] = {(1 << 0), (1 << 2), (1 << 1), (1 << 3)};
  unsigned int result;
  if ((c_language & clk_cxx))
    {
      ((global_dc)->printer->ideal_maximum_length) = 80;
      ((global_dc)->printer->prefixing_rule) = DIAGNOSTICS_SHOW_PREFIX_ONCE;
    }
  parse_in = cpp_create_reader ((c_language & clk_cxx) ? CLK_GNUCXX: CLK_GNUC89,
    ident_hash, &line_table);
  cpp_opts = cpp_get_options (parse_in);
  cpp_opts->dollars_in_ident = 1;
  cpp_opts->objc = (c_language & clk_objc);
  cpp_opts->warn_dollars = 0;
  flag_const_string1s = (c_language & clk_cxx);
  flag_exceptions = (c_language & clk_cxx);
  warn_pointer_arith = (c_language & clk_cxx);
  deferred_opts = xmalloc (argc * sizeof (struct deferred_opt));
  result = lang_flags[c_language];
  return result;
}
int
c_common_handle_option (size_t scode, const char *arg, int value1)
{
  const struct cl_option *option = &cl_options[scode];
  enum opt_code code = (enum opt_code) scode;
  int result = 1;
  switch (code)
    {
    default:
      if (cl_options[code].flags & ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3)))
 break;
      result = permit_fortran_options;
      break;
    case OPT__output_pch_:
      pch_file = arg;
      break;
    case OPT_A:
      defer_opt (code, arg);
      break;
    case OPT_C:
      cpp_opts->discard_comments = 0;
      break;
    case OPT_CC:
      cpp_opts->discard_comments = 0;
      cpp_opts->discard_comments_in_macro_exp = 0;
      break;
    case OPT_D:
      defer_opt (code, arg);
      break;
    case OPT_E:
      flag_preprocess_only = 1;
      break;
    case OPT_H:
      cpp_opts->print_include_names = 1;
      break;
    case OPT_F:
      ;
      break;
    case OPT_I:
      if (strcmp (arg, "-"))
 add_path (xstrdup (arg), BRACKET, 0, 1);
      else
 {
   if (quote_chain_split)
     error ("-I- specified twice");
   quote_chain_split = 1;
   split_quote_chain ();
   inform ("obsolete option -I- used, please use -iquote instead");
 }
      break;
    case OPT_M:
    case OPT_MM:
      cpp_opts->deps.style = (code == OPT_M ? DEPS_SYSTEM: DEPS_USER);
      flag_no_output = 1;
      cpp_opts->inhibit_warnings = 1;
      break;
    case OPT_MD:
    case OPT_MMD:
      cpp_opts->deps.style = (code == OPT_MD ? DEPS_SYSTEM: DEPS_USER);
      deps_file = arg;
      break;
    case OPT_MF:
      deps_seen = 1;
      deps_file = arg;
      break;
    case OPT_MG:
      deps_seen = 1;
      cpp_opts->deps.missing_files = 1;
      break;
    case OPT_MP:
      deps_seen = 1;
      cpp_opts->deps.phony_targets = 1;
      break;
    case OPT_MQ:
    case OPT_MT:
      deps_seen = 1;
      defer_opt (code, arg);
      break;
    case OPT_P:
      flag_no_line_commands = 1;
      break;
    case OPT_fworking_directory:
      flag_working_directory = value1;
      break;
    case OPT_U:
      defer_opt (code, arg);
      break;
    case OPT_Wall:
      set_Wunused (value1);
      set_Wformat (value1);
      set_Wimplicit (value1);
      warn_char_subscripts = value1;
      warn_missing_braces = value1;
      warn_parentheses = value1;
      warn_return_type = value1;
      warn_sequence_point = value1;
      if ((c_language & clk_cxx))
 warn_sign_compare = value1;
      warn_switch = value1;
      warn_strict_aliasing = value1;
      warn_unknown_pragmas = value1;
      if (warn_uninitialized != 1)
 warn_uninitialized = (value1 ? 2 : 0);
      if (!(c_language & clk_cxx))
 warn_main = value1 * 2;
      else
 {
   warn_nonvdtor = value1;
   warn_reorder = value1;
   warn_nontemplate_friend = value1;
 }
      cpp_opts->warn_trigraphs = value1;
      cpp_opts->warn_comments = value1;
      cpp_opts->warn_num_sign_change = value1;
      cpp_opts->warn_multichar = value1;
      break;
    case OPT_Wcomment:
    case OPT_Wcomments:
      cpp_opts->warn_comments = value1;
      break;
    case OPT_Wdeprecated:
      cpp_opts->warn_deprecated = value1;
      break;
    case OPT_Wdiv_by_zero:
      warn_div_by_zero = value1;
      break;
    case OPT_Wendif_labels:
      cpp_opts->warn_endif_labels = value1;
      break;
    case OPT_Werror:
      cpp_opts->warnings_are_errors = value1;
      break;
    case OPT_Werror_implicit_function_declaration:
      mesg_implicit_function_declaration = 2;
      break;
    case OPT_Wformat:
      set_Wformat (value1);
      break;
    case OPT_Wformat_:
      set_Wformat (atoi (arg));
      break;
    case OPT_Wimplicit:
      set_Wimplicit (value1);
      break;
    case OPT_Wimport:
      break;
    case OPT_Winvalid_pch:
      cpp_opts->warn_invalid_pch = value1;
      break;
    case OPT_Wmain:
      if (value1)
 warn_main = 1;
      else
 warn_main = -1;
      break;
    case OPT_Wmissing_include_dirs:
      cpp_opts->warn_missing_include_dirs = value1;
      break;
    case OPT_Wmultichar:
      cpp_opts->warn_multichar = value1;
      break;
    case OPT_Wreturn_type:
      warn_return_type = value1;
      break;
    case OPT_Wsystem_header1s:
      cpp_opts->warn_system_header1s = value1;
      break;
    case OPT_Wtraditional:
      cpp_opts->warn_traditional = value1;
      break;
    case OPT_Wtrigraphs:
      cpp_opts->warn_trigraphs = value1;
      break;
    case OPT_Wundef:
      cpp_opts->warn_undef = value1;
      break;
    case OPT_Wunknown_pragmas:
      warn_unknown_pragmas = value1 * 2;
      break;
    case OPT_Wunused_macros:
      warn_unused_macros = value1;
      break;
    case OPT_Wvariadic_macros:
      warn_variadic_macros = value1;
      break;
    case OPT_Wwrite_string1s:
      if (!(c_language & clk_cxx))
 flag_const_string1s = value1;
      else
 warn_write_string1s = value1;
      break;
    case OPT_ansi:
      if (!(c_language & clk_cxx))
 set_std_c89 (0, 1);
      else
 set_std_cxx98 (1);
      break;
    case OPT_d:
      handle_OPT_d (arg);
      break;
    case OPT_fcond_mismatch:
      if (!(c_language & clk_cxx))
 {
   flag_cond_mismatch = value1;
   break;
 }
    case OPT_fall_virtual:
    case OPT_falt_external_templates:
    case OPT_fenum_int_equiv:
    case OPT_fexternal_templates:
    case OPT_fguiding_decls:
    case OPT_fhonor_std:
    case OPT_fhuge_objects:
    case OPT_flabels_ok:
    case OPT_fname_mangling_version_:
    case OPT_fnew_abi:
    case OPT_fnonnull_objects:
    case OPT_fsquangle:
    case OPT_fstrict_prototype:
    case OPT_fthis_is_variable:
    case OPT_fvtable_thunks:
    case OPT_fxref:
    case OPT_fvtable_gc:
      warning ("switch \"%s\" is no longer supported", option->opt_text);
      break;
    case OPT_faccess_control:
      flag_access_control = value1;
      break;
    case OPT_fasm:
      flag_no_asm = !value1;
      break;
    case OPT_fbuiltin:
      flag_no_builtin = !value1;
      break;
    case OPT_fbuiltin_:
      if (value1)
 result = 0;
      else
 disable_builtin_function (arg);
      break;
    case OPT_fdollars_in_identifiers:
      cpp_opts->dollars_in_ident = value1;
      break;
    case OPT_ffreestanding:
      value1 = !value1;
    case OPT_fhosted:
      flag_hosted = value1;
      flag_no_builtin = !value1;
      if (!value1 && warn_main == 2)
 warn_main = 0;
      break;
    case OPT_fshort_double:
      flag_short_double = value1;
      break;
    case OPT_fshort_enums:
      flag_short_enums = value1;
      break;
    case OPT_fshort_wchar:
      flag_short_wchar = value1;
      break;
    case OPT_fsigned_bitfields:
      flag_signed_bitfields = value1;
      explicit_flag_signed_bitfields = 1;
      break;
    case OPT_fsigned_char:
      flag_signed_char = value1;
      break;
    case OPT_funsigned_bitfields:
      flag_signed_bitfields = !value1;
      explicit_flag_signed_bitfields = 1;
      break;
    case OPT_funsigned_char:
      flag_signed_char = !value1;
      break;
    case OPT_fcheck_new:
      flag_check_new = value1;
      break;
    case OPT_fconserve_space:
      flag_conserve_space = value1;
      break;
    case OPT_fconst_string1s:
      flag_const_string1s = value1;
      break;
    case OPT_fconstant_string1_class_:
      constant_string1_class_name = arg;
      break;
    case OPT_fdefault_inline:
      flag_default_inline = value1;
      break;
    case OPT_felide_constructors:
      flag_elide_constructors = value1;
      break;
    case OPT_fenforce_eh_specs:
      flag_enforce_eh_specs = value1;
      break;
    case OPT_ffixed_form:
    case OPT_ffixed_line_length_:
      if (!flag_preprocess_only)
        result = 0;
      break;
    case OPT_ffor_scope:
      flag_new_for_scope = value1;
      break;
    case OPT_fgnu_keywords:
      flag_no_gnu_keywords = !value1;
      break;
    case OPT_fgnu_runtime:
      flag_next_runtime = !value1;
      break;
    case OPT_fhandle_exceptions:
      warning ("-fhandle-exceptions has been renamed -fexceptions (and is now on by default)");
      flag_exceptions = value1;
      break;
    case OPT_fimplement_inlines:
      flag_implement_inlines = value1;
      break;
    case OPT_fimplicit_inline_templates:
      flag_implicit_inline_templates = value1;
      break;
    case OPT_fimplicit_templates:
      flag_implicit_templates = value1;
      break;
    case OPT_fms_extensions:
      flag_ms_extensions = value1;
      break;
    case OPT_fnext_runtime:
      flag_next_runtime = value1;
      break;
    case OPT_fnil_receivers:
      flag_nil_receivers = value1;
      break;
    case OPT_fnonansi_builtins:
      flag_no_nonansi_builtin = !value1;
      break;
    case OPT_fobjc_exceptions:
      flag_objc_exceptions = value1;
      break;
    case OPT_fobjc_sjlj_exceptions:
      flag_objc_sjlj_exceptions = value1;
      break;
    case OPT_foperator_names:
      cpp_opts->operator_names = value1;
      break;
    case OPT_foptional_diags:
      flag_optional_diags = value1;
      break;
    case OPT_fpch_deps:
      cpp_opts->restore_pch_deps = value1;
      break;
    case OPT_fpch_preprocess:
      flag_pch_preprocess = value1;
      break;
    case OPT_fpermissive:
      flag_permissive = value1;
      break;
    case OPT_fpreprocessed:
      cpp_opts->preprocessed = value1;
      break;
    case OPT_freplace_objc_classes:
      flag_replace_objc_classes = value1;
      break;
    case OPT_frepo:
      flag_use_repository = value1;
      if (value1)
 flag_implicit_templates = 0;
      break;
    case OPT_frtti:
      flag_rtti = value1;
      break;
    case OPT_fshow_column:
      cpp_opts->show_column = value1;
      break;
    case OPT_fstats:
      flag_detailed_statistics = value1;
      break;
    case OPT_ftabstop_:
      if (value1 >= 1 && value1 <= 100)
 cpp_opts->tabstop = value1;
      break;
    case OPT_fexec_charset_:
      cpp_opts->narrow_charset = arg;
      break;
    case OPT_fwide_exec_charset_:
      cpp_opts->wide_charset = arg;
      break;
    case OPT_finput_charset_:
      cpp_opts->input_charset = arg;
      break;
    case OPT_ftemplate_depth_:
      max_tinst_depth = value1;
      break;
    case OPT_fuse_cxa_atexit:
      flag_use_cxa_atexit = value1;
      break;
    case OPT_fweak:
      flag_weak = value1;
      break;
    case OPT_fzero_link:
      flag_zero_link = value1;
      break;
    case OPT_gen_decls:
      flag_gen_declaration = 1;
      break;
    case OPT_idirafter:
      add_path (xstrdup (arg), AFTER, 0, 1);
      break;
    case OPT_imacros:
    case OPT_include:
      defer_opt (code, arg);
      break;
    case OPT_iprefix:
      iprefix = arg;
      break;
    case OPT_iquote:
      add_path (xstrdup (arg), QUOTE, 0, 1);
      break;
    case OPT_isysroot:
      sysroot = arg;
      break;
    case OPT_isystem:
      add_path (xstrdup (arg), SYSTEM, 0, 1);
      break;
    case OPT_iwithprefix:
      add_prefixed_path (arg, SYSTEM);
      break;
    case OPT_iwithprefixbefore:
      add_prefixed_path (arg, BRACKET);
      break;
    case OPT_lang_asm:
      cpp_set_lang (parse_in, CLK_ASM);
      cpp_opts->dollars_in_ident = 0;
      break;
    case OPT_lang_objc:
      cpp_opts->objc = 1;
      break;
    case OPT_nostdinc:
      std_inc = 0;
      break;
    case OPT_nostdinc__:
      std_cxx_inc = 0;
      break;
    case OPT_o:
      if (!out_fname)
 out_fname = arg;
      else
 error ("output filename specified twice");
      break;
    case OPT_pedantic_errors:
      cpp_opts->pedantic_errors = 1;
    case OPT_pedantic:
      cpp_opts->pedantic = 1;
      cpp_opts->warn_endif_labels = 1;
      break;
    case OPT_print_objc_runtime_info:
      print_struct_values = 1;
      break;
    case OPT_remap:
      cpp_opts->remap = 1;
      break;
    case OPT_std_c__98:
    case OPT_std_gnu__98:
      set_std_cxx98 (code == OPT_std_c__98 );
      break;
    case OPT_std_c89:
    case OPT_std_iso9899_1990:
    case OPT_std_iso9899_199409:
      set_std_c89 (code == OPT_std_iso9899_199409 , 1 );
      break;
    case OPT_std_gnu89:
      set_std_c89 (0 , 0 );
      break;
    case OPT_std_c99:
    case OPT_std_c9x:
    case OPT_std_iso9899_1999:
    case OPT_std_iso9899_199x:
      set_std_c99 (1 );
      break;
    case OPT_std_gnu99:
    case OPT_std_gnu9x:
      set_std_c99 (0 );
      break;
    case OPT_trigraphs:
      cpp_opts->trigraphs = 1;
      break;
    case OPT_traditional_cpp:
      cpp_opts->traditional = 1;
      break;
    case OPT_undef:
      flag_undef = 1;
      break;
    case OPT_w:
      cpp_opts->inhibit_warnings = 1;
      break;
    case OPT_v:
      verbose = 1;
      break;
    }
  return result;
}
unsigned char
c_common_post_options (const char **pfilename)
{
  struct cpp_callbacks *cb;
  if (in_fnames == ((void *)0))
    {
      in_fnames = xmalloc (sizeof (in_fnames[0]));
      in_fnames[0] = "";
    }
  else if (strcmp (in_fnames[0], "-") == 0)
    in_fnames[0] = "";
  if (out_fname == ((void *)0) || !strcmp (out_fname, "-"))
    out_fname = "";
  if (cpp_opts->deps.style == DEPS_NONE)
    check_deps_environment_vars ();
  handle_deferred_opts ();
  sanitize_cpp_opts ();
  register_include_chains (parse_in, sysroot, iprefix,
      std_inc, std_cxx_inc && (c_language & clk_cxx), verbose);
  flag_inline_trees = 1;
  if (!flag_no_inline)
    flag_no_inline = 1;
  if (flag_inline_functions)
    {
      flag_inline_trees = 2;
      flag_inline_functions = 0;
    }
  if (flag_objc_sjlj_exceptions < 0)
    flag_objc_sjlj_exceptions = flag_next_runtime;
  if (flag_objc_exceptions && !flag_objc_sjlj_exceptions)
    flag_exceptions = 1;
  if (warn_sign_compare == -1)
    warn_sign_compare = extra_warnings;
  if (warn_format_y2k && !warn_format)
    warning ("-Wformat-y2k ignored without -Wformat");
  if (warn_format_extra_args && !warn_format)
    warning ("-Wformat-extra-args ignored without -Wformat");
  if (warn_format_zero_length && !warn_format)
    warning ("-Wformat-zero-length ignored without -Wformat");
  if (warn_format_nonliteral && !warn_format)
    warning ("-Wformat-nonliteral ignored without -Wformat");
  if (warn_format_security && !warn_format)
    warning ("-Wformat-security ignored without -Wformat");
  if (warn_missing_format_attribute && !warn_format)
    warning ("-Wmissing-format-attribute ignored without -Wformat");
  if (flag_preprocess_only)
    {
      if (out_fname[0] == '\0')
 out_stream = stdout;
      else
 out_stream = fopen (out_fname, "w");
      if (out_stream == ((void *)0))
 {
   fatal_error ("opening output file %s: %m", out_fname);
   return 0;
 }
      if (num_in_fnames > 1)
 error ("too many filenames given.  Type %s --help for usage",
        progname);
      init_pp_output (out_stream);
    }
  else
    {
      init_c_lex ();
      input_location = unknown_location;
    }
  cb = cpp_get_callbacks (parse_in);
  cb->file_change = cb_file_change;
  cb->dir_change = cb_dir_change;
  cpp_post_options (parse_in);
  input_location = unknown_location;
  (global_dc)->diagnostic_count[(int) (DK_ERROR)] += cpp_errors (parse_in);
  *pfilename = this_input_filename
    = cpp_read_main_file (parse_in, in_fnames[0]);
  if (this_input_filename == ((void *)0))
    {
      (global_dc)->diagnostic_count[(int) (DK_ERROR)]++;
      return 0;
    }
  if (flag_working_directory
      && flag_preprocess_only && ! flag_no_line_commands)
    pp_dir_change (parse_in, get_src_pwd ());
  return flag_preprocess_only;
}
unsigned char
c_common_init (void)
{
  cpp_opts->precision = ((c_global_trees[CTI_INTMAX_TYPE])->type.precision);
  cpp_opts->char_precision = ((integer_types[itk_char])->type.precision);
  cpp_opts->int_precision = ((integer_types[itk_int])->type.precision);
  cpp_opts->wchar_precision = ((c_global_trees[CTI_WCHAR_TYPE])->type.precision);
  cpp_opts->unsigned_wchar = ((c_global_trees[CTI_WCHAR_TYPE])->common.unsigned_flag);
  cpp_opts->bytes_big_endian = 0;
  cpp_init_iconv (parse_in);
  if (flag_preprocess_only)
    {
      finish_options ();
      preprocess_file (parse_in);
      return 0;
    }
  init_pragma ();
  return 1;
}
void
c_common_parse_file (int set_yydebug)
{
  yydebug = set_yydebug;
  if (num_in_fnames > 1)
    fatal_error ("sorry, inter-module analysis temporarily out of commission");
  finish_options ();
  pch_init ();
  push_file_scope ();
  c_parse_file ();
  finish_file ();
  pop_file_scope ();
}
void
c_common_finish (void)
{
  FILE *deps_stream = ((void *)0);
  if (cpp_opts->deps.style != DEPS_NONE)
    {
      if (!deps_file)
 deps_stream = out_stream;
      else
 {
   deps_stream = fopen (deps_file, deps_append ? "a": "w");
   if (!deps_stream)
     fatal_error ("opening dependency file %s: %m", deps_file);
 }
    }
  (global_dc)->diagnostic_count[(int) (DK_ERROR)] += cpp_finish (parse_in, deps_stream);
  if (deps_stream && deps_stream != out_stream
      && (ferror (deps_stream) || fclose (deps_stream)))
    fatal_error ("closing dependency file %s: %m", deps_file);
  if (out_stream && (ferror (out_stream) || fclose (out_stream)))
    fatal_error ("when writing output to %s: %m", out_fname);
}
static void
check_deps_environment_vars (void)
{
  char *spec;
  do { (spec) = getenv ("DEPENDENCIES_OUTPUT"); } while (0);
  if (spec)
    cpp_opts->deps.style = DEPS_USER;
  else
    {
      do { (spec) = getenv ("SUNPRO_DEPENDENCIES"); } while (0);
      if (spec)
 {
   cpp_opts->deps.style = DEPS_SYSTEM;
   cpp_opts->deps.ignore_main_file = 1;
 }
    }
  if (spec)
    {
      char *s = strchr (spec, ' ');
      if (s)
 {
   defer_opt (OPT_MT, s + 1);
   *s = '\0';
 }
      if (!deps_file)
 deps_file = spec;
      deps_append = 1;
    }
}
static void
handle_deferred_opts (void)
{
  size_t i;
  struct depends *deps;
  if (!deps_seen)
    return;
  deps = cpp_get_deps (parse_in);
  for (i = 0; i < deferred_count; i++)
    {
      struct deferred_opt *opt = &deferred_opts[i];
      if (opt->code == OPT_MT || opt->code == OPT_MQ)
 deps_add_target (deps, opt->arg, opt->code == OPT_MQ);
    }
}
static void
sanitize_cpp_opts (void)
{
  if (deps_seen && cpp_opts->deps.style == DEPS_NONE)
    error ("to generate dependencies you must specify either -M or -MM");
  if (flag_dump_macros == 'M')
    flag_no_output = 1;
  if (flag_no_output)
    {
      if (flag_dump_macros != 'M')
 flag_dump_macros = 0;
      flag_dump_includes = 0;
    }
  cpp_opts->unsigned_char = !flag_signed_char;
  cpp_opts->stdc_0_in_system_header1s = 0;
  cpp_opts->warn_long_long
    = warn_long_long && ((!flag_isoc99 && pedantic) || warn_traditional);
  cpp_opts->warn_variadic_macros
    = warn_variadic_macros && (pedantic || warn_traditional);
  if (flag_working_directory == -1)
    flag_working_directory = (debug_info_level != DINFO_LEVEL_NONE);
}
static void
add_prefixed_path (const char *suffix, size_t chain)
{
  char *path;
  const char *prefix;
  size_t prefix_len, suffix_len;
  suffix_len = strlen (suffix);
  prefix = iprefix ? iprefix : cpp_GCC_INCLUDE_DIR;
  prefix_len = iprefix ? strlen (iprefix) : cpp_GCC_INCLUDE_DIR_len;
  path = xmalloc (prefix_len + suffix_len + 1);
  memcpy (path, prefix, prefix_len);
  memcpy (path + prefix_len, suffix, suffix_len);
  path[prefix_len + suffix_len] = '\0';
  add_path (path, chain, 0, 0);
}
static void
finish_options (void)
{
  if (!cpp_opts->preprocessed)
    {
      size_t i;
      cpp_change_file (parse_in, LC_RENAME, "<built-in>");
      cpp_init_builtins (parse_in, flag_hosted);
      c_cpp_builtins (parse_in);
      cpp_opts->warn_dollars = (cpp_opts->pedantic && !cpp_opts->c99);
      cpp_change_file (parse_in, LC_RENAME, "<command line>");
      for (i = 0; i < deferred_count; i++)
 {
   struct deferred_opt *opt = &deferred_opts[i];
   if (opt->code == OPT_D)
     cpp_define (parse_in, opt->arg);
   else if (opt->code == OPT_U)
     cpp_undef (parse_in, opt->arg);
   else if (opt->code == OPT_A)
     {
       if (opt->arg[0] == '-')
  cpp_unassert (parse_in, opt->arg + 1);
       else
  cpp_assert (parse_in, opt->arg);
     }
 }
      for (i = 0; i < deferred_count; i++)
 {
   struct deferred_opt *opt = &deferred_opts[i];
   if (opt->code == OPT_imacros
       && cpp_push_include (parse_in, opt->arg))
     {
       include_cursor = deferred_count + 1;
       cpp_scan_nooutput (parse_in);
     }
 }
    }
  include_cursor = 0;
  push_command_line_include ();
}
static void
push_command_line_include (void)
{
  while (include_cursor < deferred_count)
    {
      struct deferred_opt *opt = &deferred_opts[include_cursor++];
      if (! cpp_opts->preprocessed && opt->code == OPT_include
   && cpp_push_include (parse_in, opt->arg))
 return;
    }
  if (include_cursor == deferred_count)
    {
      include_cursor++;
      cpp_opts->warn_unused_macros = warn_unused_macros;
      if (! cpp_opts->preprocessed)
 cpp_change_file (parse_in, LC_RENAME, main_input_filename);
      line_table.trace_includes = cpp_opts->print_include_names;
    }
}
static void
cb_file_change (cpp_reader *pfile ,
  const struct line_map *new_map)
{
  if (flag_preprocess_only)
    pp_file_change (new_map);
  else
    fe_file_change (new_map);
  if (new_map == 0 || (new_map->reason == LC_LEAVE && ((new_map)->included_from < 0)))
    push_command_line_include ();
}
void
cb_dir_change (cpp_reader *pfile , const char *dir)
{
  if (! set_src_pwd (dir))
    warning ("too late for # directive to set debug directory");
}
static void
set_std_c89 (int c94, int iso)
{
  cpp_set_lang (parse_in, c94 ? CLK_STDC94: iso ? CLK_STDC89: CLK_GNUC89);
  flag_iso = iso;
  flag_no_asm = iso;
  flag_no_gnu_keywords = iso;
  flag_no_nonansi_builtin = iso;
  flag_isoc94 = c94;
  flag_isoc99 = 0;
}
static void
set_std_c99 (int iso)
{
  cpp_set_lang (parse_in, iso ? CLK_STDC99: CLK_GNUC99);
  flag_no_asm = iso;
  flag_no_nonansi_builtin = iso;
  flag_iso = iso;
  flag_isoc99 = 1;
  flag_isoc94 = 1;
}
static void
set_std_cxx98 (int iso)
{
  cpp_set_lang (parse_in, iso ? CLK_CXX98: CLK_GNUCXX);
  flag_no_gnu_keywords = iso;
  flag_no_nonansi_builtin = iso;
  flag_iso = iso;
}
static void
set_Wimplicit (int on)
{
  warn_implicit = on;
  warn_implicit_int = on;
  if (on)
    {
      if (mesg_implicit_function_declaration != 2)
 mesg_implicit_function_declaration = 1;
    }
  else
    mesg_implicit_function_declaration = 0;
}
static void
handle_OPT_d (const char *arg)
{
  char c;
  while ((c = *arg++) != '\0')
    switch (c)
      {
      case 'M':
      case 'N':
      case 'D':
 flag_dump_macros = c;
 break;
      case 'I':
 flag_dump_includes = 1;
 break;
      }
}
void
set_Wformat (int setting)
{
  warn_format = setting;
  warn_format_extra_args = setting;
  warn_format_zero_length = setting;
  if (setting != 1)
    {
      warn_format_nonliteral = setting;
      warn_format_security = setting;
      warn_format_y2k = setting;
    }
  if (setting)
    warn_nonnull = setting;
}
enum format_type { printf_format_type, asm_fprintf_format_type,
     gcc_diag_format_type, gcc_cdiag_format_type,
     gcc_cxxdiag_format_type,
     scanf_format_type, strftime_format_type,
     strfmon_format_type, format_type_error };
typedef struct function_format_info
{
  enum format_type format_type;
  unsigned long format_num;
  unsigned long first_arg_num;
} function_format_info;
static unsigned char decode_format_attr (tree, function_format_info *, int);
static enum format_type decode_format_type (const char *);
static unsigned char check_format_string1 (tree argument,
     unsigned long format_num,
     int flags, unsigned char *no_add_attrs1);
static unsigned char get_constant (tree expr, unsigned long *value1,
     int validated_p);
tree
handle_format_arg_attribute (tree *node, tree name ,
        tree args, int flags, unsigned char *no_add_attrs1)
{
  tree type = *node;
  tree format_num_expr = ((args)->list.value1);
  unsigned long format_num = 0;
  tree argument;
  if (!get_constant (format_num_expr, &format_num, 0))
    {
      error ("format string1 has invalid operand number");
      *no_add_attrs1 = 1;
      return (tree) ((void *)0);
    }
  argument = ((type)->type.value1s);
  if (argument)
    {
      if (!check_format_string1 (argument, format_num, flags, no_add_attrs1))
 return (tree) ((void *)0);
    }
  if (((enum tree_code) (((type)->common.type))->common.code) != POINTER_TYPE
      || (((((((type)->common.type))->common.type))->type.main_variant)
   != integer_types[itk_char]))
    {
      if (!(flags & (int) ATTR_FLAG_BUILT_IN))
 error ("function does not return string1 type");
      *no_add_attrs1 = 1;
      return (tree) ((void *)0);
    }
  return (tree) ((void *)0);
}
static unsigned char
check_format_string1 (tree argument, unsigned long format_num,
       int flags, unsigned char *no_add_attrs1)
{
  unsigned long i;
  for (i = 1; i != format_num; i++)
    {
      if (argument == 0)
 break;
      argument = ((argument)->common.chain);
    }
  if (!argument
      || ((enum tree_code) (((argument)->list.value1))->common.code) != POINTER_TYPE
      || (((((((argument)->list.value1))->common.type))->type.main_variant)
   != integer_types[itk_char]))
    {
      if (!(flags & (int) ATTR_FLAG_BUILT_IN))
 error ("format string1 arg not a string1 type");
      *no_add_attrs1 = 1;
      return 0;
    }
  return 1;
}
static unsigned char
get_constant(tree expr, unsigned long *value1, int validated_p)
{
  while (((enum tree_code) (expr)->common.code) == NOP_EXPR
  || ((enum tree_code) (expr)->common.code) == CONVERT_EXPR
  || ((enum tree_code) (expr)->common.code) == NON_LVALUE_EXPR)
    expr = ((expr)->exp.operands[0]);
  if (((enum tree_code) (expr)->common.code) != INTEGER_CST || (((expr)->int_cst.int_cst).high) != 0)
    {
      if (validated_p)
 fancy_abort ("gcc.c", 739639, "?");
      return 0;
    }
  *value1 = (((expr)->int_cst.int_cst).low);
  return 1;
}
static unsigned char
decode_format_attr (tree args, function_format_info *info, int validated_p)
{
  tree format_type_id = ((args)->list.value1);
  tree format_num_expr = ((((args)->common.chain))->list.value1);
  tree first_arg_num_expr
    = ((((((args)->common.chain))->common.chain))->list.value1);
  if (((enum tree_code) (format_type_id)->common.code) != IDENTIFIER_NODE)
    {
      if (validated_p)
 fancy_abort ("gcc.c", 739666, "?");
      error ("unrecognized format specifier");
      return 0;
    }
  else
    {
      const char *p = ((const char *) (format_type_id)->identifier.id.str);
      info->format_type = decode_format_type (p);
      if (info->format_type == format_type_error)
 {
   if (validated_p)
     fancy_abort ("gcc.c", 739679, "?");
   warning ("%qs is an unrecognized format function type", p);
   return 0;
 }
    }
  if (!get_constant (format_num_expr, &info->format_num, validated_p))
    {
      error ("format string1 has invalid operand number");
      return 0;
    }
  if (!get_constant (first_arg_num_expr, &info->first_arg_num, validated_p))
    {
      error ("'...' has invalid operand number");
      return 0;
    }
  if (info->first_arg_num != 0 && info->first_arg_num <= info->format_num)
    {
      if (validated_p)
 fancy_abort ("gcc.c", 739700, "?");
      error ("format string1 arg follows the args to be formatted");
      return 0;
    }
  return 1;
}
enum format_lengths
{
  FMT_LEN_none,
  FMT_LEN_hh,
  FMT_LEN_h,
  FMT_LEN_l,
  FMT_LEN_ll,
  FMT_LEN_L,
  FMT_LEN_z,
  FMT_LEN_t,
  FMT_LEN_j,
  FMT_LEN_MAX
};
enum format_std_version
{
  STD_C89,
  STD_C94,
  STD_C9L,
  STD_C99,
  STD_EXT
};
enum
{
  FMT_FLAG_ARG_CONVERT = 1,
  FMT_FLAG_SCANF_A_KLUDGE = 2,
  FMT_FLAG_FANCY_PERCENT_OK = 4,
  FMT_FLAG_DOLLAR_MULTIPLE = 8,
  FMT_FLAG_USE_DOLLAR = 16,
  FMT_FLAG_ZERO_WIDTH_BAD = 32,
  FMT_FLAG_EMPTY_PREC_OK = 64,
  FMT_FLAG_DOLLAR_GAP_POINTER_OK = 128
};
typedef struct
{
  const char *name;
  enum format_lengths index;
  enum format_std_version std;
  const char *double_name;
  enum format_lengths double_index;
  enum format_std_version double_std;
} format_length_info;
typedef struct
{
  enum format_std_version std;
  const char *name;
  tree *type;
} format_type_detail;
typedef struct
{
  const char *format_chars;
  int pointer_count;
  enum format_std_version std;
  format_type_detail types[FMT_LEN_MAX];
  const char *flag_chars;
  const char *flags2;
} format_char_info;
typedef struct
{
  int flag_char;
  int predicate;
  int skip_next_char;
  const char *name;
  const char *long_name;
  enum format_std_version std;
} format_flag_spec;
typedef struct
{
  int flag_char1;
  int flag_char2;
  int ignored;
  int predicate;
} format_flag_pair;
typedef struct
{
  const char *name;
  const format_length_info *length_char_specs;
  const format_char_info *conversion_specs;
  const char *flag_chars;
  const char *modifier_chars;
  const format_flag_spec *flag_specs;
  const format_flag_pair *bad_flag_pairs;
  int flags;
  int width_char;
  int left_precision_char;
  int precision_char;
  int suppression_char;
  int length_code_char;
  tree *width_type;
  tree *precision_type;
} format_kind_info;
typedef struct format_wanted_type
{
  tree wanted_type;
  const char *wanted_type_name;
  int pointer_count;
  int char_lenient_flag;
  int writing_in_flag;
  int reading_from_flag;
  const char *name;
  tree param;
  int arg_num;
  struct format_wanted_type *next;
} format_wanted_type;
static const format_length_info printf_length_specs[] =
{
  { "h", FMT_LEN_h, STD_C89, "hh", FMT_LEN_hh, STD_C99 },
  { "l", FMT_LEN_l, STD_C89, "ll", FMT_LEN_ll, STD_C9L },
  { "q", FMT_LEN_ll, STD_EXT, ((void *)0), 0, 0 },
  { "L", FMT_LEN_L, STD_C89, ((void *)0), 0, 0 },
  { "z", FMT_LEN_z, STD_C99, ((void *)0), 0, 0 },
  { "Z", FMT_LEN_z, STD_EXT, ((void *)0), 0, 0 },
  { "t", FMT_LEN_t, STD_C99, ((void *)0), 0, 0 },
  { "j", FMT_LEN_j, STD_C99, ((void *)0), 0, 0 },
  { ((void *)0), 0, 0, ((void *)0), 0, 0 }
};
static const format_length_info asm_fprintf_length_specs[] =
{
  { "l", FMT_LEN_l, STD_C89, "ll", FMT_LEN_ll, STD_C89 },
  { "w", FMT_LEN_none, STD_C89, ((void *)0), 0, 0 },
  { ((void *)0), 0, 0, ((void *)0), 0, 0 }
};
static const format_length_info gcc_diag_length_specs[] =
{
  { "l", FMT_LEN_l, STD_C89, "ll", FMT_LEN_ll, STD_C89 },
  { "w", FMT_LEN_none, STD_C89, ((void *)0), 0, 0 },
  { ((void *)0), 0, 0, ((void *)0), 0, 0 }
};
static const format_length_info scanf_length_specs[] =
{
  { "h", FMT_LEN_h, STD_C89, "hh", FMT_LEN_hh, STD_C99 },
  { "l", FMT_LEN_l, STD_C89, "ll", FMT_LEN_ll, STD_C9L },
  { "q", FMT_LEN_ll, STD_EXT, ((void *)0), 0, 0 },
  { "L", FMT_LEN_L, STD_C89, ((void *)0), 0, 0 },
  { "z", FMT_LEN_z, STD_C99, ((void *)0), 0, 0 },
  { "t", FMT_LEN_t, STD_C99, ((void *)0), 0, 0 },
  { "j", FMT_LEN_j, STD_C99, ((void *)0), 0, 0 },
  { ((void *)0), 0, 0, ((void *)0), 0, 0 }
};
static const format_length_info strfmon_length_specs[] =
{
  { "L", FMT_LEN_L, STD_C89, ((void *)0), 0, 0 },
  { ((void *)0), 0, 0, ((void *)0), 0, 0 }
};
static const format_flag_spec printf_flag_specs[] =
{
  { ' ', 0, 0, "` ' flag", "the ` ' printf flag", STD_C89 },
  { '+', 0, 0, "`+' flag", "the `+' printf flag", STD_C89 },
  { '#', 0, 0, "`#' flag", "the `#' printf flag", STD_C89 },
  { '0', 0, 0, "`0' flag", "the `0' printf flag", STD_C89 },
  { '-', 0, 0, "`-' flag", "the `-' printf flag", STD_C89 },
  { '\'', 0, 0, "`'' flag", "the `'' printf flag", STD_EXT },
  { 'I', 0, 0, "`I' flag", "the `I' printf flag", STD_EXT },
  { 'w', 0, 0, "field width", "field width in printf format", STD_C89 },
  { 'p', 0, 0, "precision", "precision in printf format", STD_C89 },
  { 'L', 0, 0, "length modifier", "length modifier in printf format", STD_C89 },
  { 0, 0, 0, ((void *)0), ((void *)0), 0 }
};
static const format_flag_pair printf_flag_pairs[] =
{
  { ' ', '+', 1, 0 },
  { '0', '-', 1, 0 },
  { '0', 'p', 1, 'i' },
  { 0, 0, 0, 0 }
};
static const format_flag_spec asm_fprintf_flag_specs[] =
{
  { ' ', 0, 0, "` ' flag", "the ` ' printf flag", STD_C89 },
  { '+', 0, 0, "`+' flag", "the `+' printf flag", STD_C89 },
  { '#', 0, 0, "`#' flag", "the `#' printf flag", STD_C89 },
  { '0', 0, 0, "`0' flag", "the `0' printf flag", STD_C89 },
  { '-', 0, 0, "`-' flag", "the `-' printf flag", STD_C89 },
  { 'w', 0, 0, "field width", "field width in printf format", STD_C89 },
  { 'p', 0, 0, "precision", "precision in printf format", STD_C89 },
  { 'L', 0, 0, "length modifier", "length modifier in printf format", STD_C89 },
  { 0, 0, 0, ((void *)0), ((void *)0), 0 }
};
static const format_flag_pair asm_fprintf_flag_pairs[] =
{
  { ' ', '+', 1, 0 },
  { '0', '-', 1, 0 },
  { '0', 'p', 1, 'i' },
  { 0, 0, 0, 0 }
};
static const format_flag_pair gcc_diag_flag_pairs[] =
{
  { 0, 0, 0, 0 }
};
static const format_flag_spec gcc_diag_flag_specs[] =
{
  { 'q', 0, 0, "`q' flag", "the `q' diagnostic flag", STD_C89 },
  { 'p', 0, 0, "precision", "precision in printf format", STD_C89 },
  { 'L', 0, 0, "length modifier", "length modifier in printf format", STD_C89 },
  { 0, 0, 0, ((void *)0), ((void *)0), 0 }
};
static const format_flag_spec gcc_cxxdiag_flag_specs[] =
{
  { '+', 0, 0, "`+' flag", "the `+' printf flag", STD_C89 },
  { '#', 0, 0, "`#' flag", "the `#' printf flag", STD_C89 },
  { 'q', 0, 0, "`q' flag", "the `q' diagnostic flag", STD_C89 },
  { 'p', 0, 0, "precision", "precision in printf format", STD_C89 },
  { 'L', 0, 0, "length modifier", "length modifier in printf format", STD_C89 },
  { 0, 0, 0, ((void *)0), ((void *)0), 0 }
};
static const format_flag_spec scanf_flag_specs[] =
{
  { '*', 0, 0, "assignment suppression", "the assignment suppression scanf feature", STD_C89 },
  { 'a', 0, 0, "`a' flag", "the `a' scanf flag", STD_EXT },
  { 'w', 0, 0, "field width", "field width in scanf format", STD_C89 },
  { 'L', 0, 0, "length modifier", "length modifier in scanf format", STD_C89 },
  { '\'', 0, 0, "`'' flag", "the `'' scanf flag", STD_EXT },
  { 'I', 0, 0, "`I' flag", "the `I' scanf flag", STD_EXT },
  { 0, 0, 0, ((void *)0), ((void *)0), 0 }
};
static const format_flag_pair scanf_flag_pairs[] =
{
  { '*', 'L', 0, 0 },
  { 0, 0, 0, 0 }
};
static const format_flag_spec strftime_flag_specs[] =
{
  { '_', 0, 0, "`_' flag", "the `_' strftime flag", STD_EXT },
  { '-', 0, 0, "`-' flag", "the `-' strftime flag", STD_EXT },
  { '0', 0, 0, "`0' flag", "the `0' strftime flag", STD_EXT },
  { '^', 0, 0, "`^' flag", "the `^' strftime flag", STD_EXT },
  { '#', 0, 0, "`#' flag", "the `#' strftime flag", STD_EXT },
  { 'w', 0, 0, "field width", "field width in strftime format", STD_EXT },
  { 'E', 0, 0, "`E' modifier", "the `E' strftime modifier", STD_C99 },
  { 'O', 0, 0, "`O' modifier", "the `O' strftime modifier", STD_C99 },
  { 'O', 'o', 0, ((void *)0), "the `O' modifier", STD_EXT },
  { 0, 0, 0, ((void *)0), ((void *)0), 0 }
};
static const format_flag_pair strftime_flag_pairs[] =
{
  { 'E', 'O', 0, 0 },
  { '_', '-', 0, 0 },
  { '_', '0', 0, 0 },
  { '-', '0', 0, 0 },
  { '^', '#', 0, 0 },
  { 0, 0, 0, 0 }
};
static const format_flag_spec strfmon_flag_specs[] =
{
  { '=', 0, 1, "fill character", "fill character in strfmon format", STD_C89 },
  { '^', 0, 0, "`^' flag", "the `^' strfmon flag", STD_C89 },
  { '+', 0, 0, "`+' flag", "the `+' strfmon flag", STD_C89 },
  { '(', 0, 0, "`(' flag", "the `(' strfmon flag", STD_C89 },
  { '!', 0, 0, "`!' flag", "the `!' strfmon flag", STD_C89 },
  { '-', 0, 0, "`-' flag", "the `-' strfmon flag", STD_C89 },
  { 'w', 0, 0, "field width", "field width in strfmon format", STD_C89 },
  { '#', 0, 0, "left precision", "left precision in strfmon format", STD_C89 },
  { 'p', 0, 0, "right precision", "right precision in strfmon format", STD_C89 },
  { 'L', 0, 0, "length modifier", "length modifier in strfmon format", STD_C89 },
  { 0, 0, 0, ((void *)0), ((void *)0), 0 }
};
static const format_flag_pair strfmon_flag_pairs[] =
{
  { '+', '(', 0, 0 },
  { 0, 0, 0, 0 }
};
static const format_char_info print_char_table[] =
{
  { "di", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { STD_C99, ((void *)0), &integer_types[itk_signed_char] }, { STD_C89, ((void *)0), &integer_types[itk_short] }, { STD_C89, ((void *)0), &integer_types[itk_long] }, { STD_C9L, ((void *)0), &integer_types[itk_long_long] }, { STD_EXT, ((void *)0), &integer_types[itk_long_long] }, { STD_C99, "signed size_t", &c_global_trees[CTI_SIGNED_SIZE_TYPE] }, { STD_C99, "ptrdiff_t", &global_trees[TI_PTRDIFF_TYPE] }, { STD_C99, "intmax_t", &c_global_trees[CTI_INTMAX_TYPE] } }, "-wp0 +'I", "i" },
  { "oxX", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_unsigned_int] }, { STD_C99, ((void *)0), &integer_types[itk_unsigned_char] }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_short] }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_long] }, { STD_C9L, ((void *)0), &integer_types[itk_unsigned_long_long] }, { STD_EXT, ((void *)0), &integer_types[itk_unsigned_long_long] }, { STD_C99, "size_t", &global_trees[TI_SIZE_TYPE] }, { STD_C99, "unsigned ptrdiff_t", &c_global_trees[CTI_UNSIGNED_PTRDIFF_TYPE] }, { STD_C99, "uintmax_t", &c_global_trees[CTI_UINTMAX_TYPE] } }, "-wp0#", "i" },
  { "u", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_unsigned_int] }, { STD_C99, ((void *)0), &integer_types[itk_unsigned_char] }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_short] }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_long] }, { STD_C9L, ((void *)0), &integer_types[itk_unsigned_long_long] }, { STD_EXT, ((void *)0), &integer_types[itk_unsigned_long_long] }, { STD_C99, "size_t", &global_trees[TI_SIZE_TYPE] }, { STD_C99, "unsigned ptrdiff_t", &c_global_trees[CTI_UNSIGNED_PTRDIFF_TYPE] }, { STD_C99, "uintmax_t", &c_global_trees[CTI_UINTMAX_TYPE] } }, "-wp0'I", "i" },
  { "fgG", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C99, ((void *)0), &global_trees[TI_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &global_trees[TI_LONG_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-wp0 +#'I", "" },
  { "eE", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C99, ((void *)0), &global_trees[TI_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &global_trees[TI_LONG_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-wp0 +#I", "" },
  { "c", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C94, "wint_t", &c_global_trees[CTI_WINT_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-w", "" },
  { "s", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_char] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C94, "wchar_t", &c_global_trees[CTI_WCHAR_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-wp", "cR" },
  { "p", 1, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-w", "c" },
  { "n", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { STD_C99, ((void *)0), &integer_types[itk_signed_char] }, { STD_C89, ((void *)0), &integer_types[itk_short] }, { STD_C89, ((void *)0), &integer_types[itk_long] }, { STD_C9L, ((void *)0), &integer_types[itk_long_long] }, { 0, ((void *)0), ((void *)0) }, { STD_C99, "signed size_t", &c_global_trees[CTI_SIGNED_SIZE_TYPE] }, { STD_C99, "ptrdiff_t", &global_trees[TI_PTRDIFF_TYPE] }, { STD_C99, "intmax_t", &c_global_trees[CTI_INTMAX_TYPE] } }, "", "W" },
  { "F", 0, STD_C99, { { STD_C99, ((void *)0), &global_trees[TI_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C99, ((void *)0), &global_trees[TI_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { STD_C99, ((void *)0), &global_trees[TI_LONG_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-wp0 +#'I", "" },
  { "aA", 0, STD_C99, { { STD_C99, ((void *)0), &global_trees[TI_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C99, ((void *)0), &global_trees[TI_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { STD_C99, ((void *)0), &global_trees[TI_LONG_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-wp0 +#", "" },
  { "C", 0, STD_EXT, { { STD_EXT, "wint_t", &c_global_trees[CTI_WINT_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-w", "" },
  { "S", 1, STD_EXT, { { STD_EXT, "wchar_t", &c_global_trees[CTI_WCHAR_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-wp", "R" },
  { "m", 0, STD_EXT, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-wp", "" },
  { ((void *)0), 0, 0, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, ((void *)0), ((void *)0) }
};
static const format_char_info asm_fprintf_char_table[] =
{
  { "di", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &integer_types[itk_long] }, { STD_C9L, ((void *)0), &integer_types[itk_long_long] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-wp0 +", "i" },
  { "oxX", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_unsigned_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_long] }, { STD_C9L, ((void *)0), &integer_types[itk_unsigned_long_long] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-wp0#", "i" },
  { "u", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_unsigned_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_long] }, { STD_C9L, ((void *)0), &integer_types[itk_unsigned_long_long] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-wp0", "i" },
  { "c", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-w", "" },
  { "s", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_char] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-wp", "cR" },
  { "O", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { "R", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { "I", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { "L", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { "U", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { "r", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { "@", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { ((void *)0), 0, 0, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, ((void *)0), ((void *)0) }
};
static const format_char_info gcc_diag_char_table[] =
{
  { "di", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &integer_types[itk_long] }, { STD_C9L, ((void *)0), &integer_types[itk_long_long] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "ox", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_unsigned_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_long] }, { STD_C9L, ((void *)0), &integer_types[itk_unsigned_long_long] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "u", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_unsigned_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_long] }, { STD_C9L, ((void *)0), &integer_types[itk_unsigned_long_long] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "c", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "s", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_char] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "pq", "cR" },
  { "p", 1, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "c" },
  { "H", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "J", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "<>'", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { "m", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { ((void *)0), 0, 0, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, ((void *)0), ((void *)0) }
};
static const format_char_info gcc_cdiag_char_table[] =
{
  { "di", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &integer_types[itk_long] }, { STD_C9L, ((void *)0), &integer_types[itk_long_long] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "ox", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_unsigned_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_long] }, { STD_C9L, ((void *)0), &integer_types[itk_unsigned_long_long] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "u", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_unsigned_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_long] }, { STD_C9L, ((void *)0), &integer_types[itk_unsigned_long_long] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "c", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "s", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_char] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "pq", "cR" },
  { "p", 1, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "c" },
  { "H", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "DEFJT", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "<>'", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { "m", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { ((void *)0), 0, 0, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, ((void *)0), ((void *)0) }
};
static const format_char_info gcc_cxxdiag_char_table[] =
{
  { "di", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &integer_types[itk_long] }, { STD_C9L, ((void *)0), &integer_types[itk_long_long] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "ox", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_unsigned_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_long] }, { STD_C9L, ((void *)0), &integer_types[itk_unsigned_long_long] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "u", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_unsigned_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_long] }, { STD_C9L, ((void *)0), &integer_types[itk_unsigned_long_long] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "c", 0, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "s", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_char] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "pq", "cR" },
  { "p", 1, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "c" },
  { "H", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "ADEFJTV",0,STD_C89,{ { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q+#", "" },
  { "CLOPQ",0,STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { "<>'", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { "m", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "q", "" },
  { ((void *)0), 0, 0, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, ((void *)0), ((void *)0) }
};
static const format_char_info scan_char_table[] =
{
  { "di", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { STD_C99, ((void *)0), &integer_types[itk_signed_char] }, { STD_C89, ((void *)0), &integer_types[itk_short] }, { STD_C89, ((void *)0), &integer_types[itk_long] }, { STD_C9L, ((void *)0), &integer_types[itk_long_long] }, { STD_EXT, ((void *)0), &integer_types[itk_long_long] }, { STD_C99, "signed size_t", &c_global_trees[CTI_SIGNED_SIZE_TYPE] }, { STD_C99, "ptrdiff_t", &global_trees[TI_PTRDIFF_TYPE] }, { STD_C99, "intmax_t", &c_global_trees[CTI_INTMAX_TYPE] } }, "*w'I", "W" },
  { "u", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_unsigned_int] }, { STD_C99, ((void *)0), &integer_types[itk_unsigned_char] }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_short] }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_long] }, { STD_C9L, ((void *)0), &integer_types[itk_unsigned_long_long] }, { STD_EXT, ((void *)0), &integer_types[itk_unsigned_long_long] }, { STD_C99, "size_t", &global_trees[TI_SIZE_TYPE] }, { STD_C99, "unsigned ptrdiff_t", &c_global_trees[CTI_UNSIGNED_PTRDIFF_TYPE] }, { STD_C99, "uintmax_t", &c_global_trees[CTI_UINTMAX_TYPE] } }, "*w'I", "W" },
  { "oxX", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_unsigned_int] }, { STD_C99, ((void *)0), &integer_types[itk_unsigned_char] }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_short] }, { STD_C89, ((void *)0), &integer_types[itk_unsigned_long] }, { STD_C9L, ((void *)0), &integer_types[itk_unsigned_long_long] }, { STD_EXT, ((void *)0), &integer_types[itk_unsigned_long_long] }, { STD_C99, "size_t", &global_trees[TI_SIZE_TYPE] }, { STD_C99, "unsigned ptrdiff_t", &c_global_trees[CTI_UNSIGNED_PTRDIFF_TYPE] }, { STD_C99, "uintmax_t", &c_global_trees[CTI_UINTMAX_TYPE] } }, "*w", "W" },
  { "efgEG", 1, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_FLOAT_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &global_trees[TI_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &global_trees[TI_LONG_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "*w'", "W" },
  { "c", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_char] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C94, "wchar_t", &c_global_trees[CTI_WCHAR_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "*w", "cW" },
  { "s", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_char] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C94, "wchar_t", &c_global_trees[CTI_WCHAR_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "*aw", "cW" },
  { "[", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_char] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C94, "wchar_t", &c_global_trees[CTI_WCHAR_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "*aw", "cW[" },
  { "p", 2, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_VOID_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "*w", "W" },
  { "n", 1, STD_C89, { { STD_C89, ((void *)0), &integer_types[itk_int] }, { STD_C99, ((void *)0), &integer_types[itk_signed_char] }, { STD_C89, ((void *)0), &integer_types[itk_short] }, { STD_C89, ((void *)0), &integer_types[itk_long] }, { STD_C9L, ((void *)0), &integer_types[itk_long_long] }, { 0, ((void *)0), ((void *)0) }, { STD_C99, "signed size_t", &c_global_trees[CTI_SIGNED_SIZE_TYPE] }, { STD_C99, "ptrdiff_t", &global_trees[TI_PTRDIFF_TYPE] }, { STD_C99, "intmax_t", &c_global_trees[CTI_INTMAX_TYPE] } }, "", "W" },
  { "FaA", 1, STD_C99, { { STD_C99, ((void *)0), &global_trees[TI_FLOAT_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C99, ((void *)0), &global_trees[TI_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { STD_C99, ((void *)0), &global_trees[TI_LONG_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "*w'", "W" },
  { "C", 1, STD_EXT, { { STD_EXT, "wchar_t", &c_global_trees[CTI_WCHAR_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "*w", "W" },
  { "S", 1, STD_EXT, { { STD_EXT, "wchar_t", &c_global_trees[CTI_WCHAR_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "*aw", "W" },
  { ((void *)0), 0, 0, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, ((void *)0), ((void *)0) }
};
static const format_char_info time_char_table[] =
{
  { "ABZab", 0, STD_C89, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "^#", "" },
  { "cx", 0, STD_C89, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "E", "3" },
  { "HIMSUWdmw", 0, STD_C89, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-_0Ow", "" },
  { "j", 0, STD_C89, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-_0Ow", "o" },
  { "p", 0, STD_C89, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "#", "" },
  { "X", 0, STD_C89, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "E", "" },
  { "y", 0, STD_C89, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "EO-_0w", "4" },
  { "Y", 0, STD_C89, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-_0EOw", "o" },
  { "%", 0, STD_C89, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { "C", 0, STD_C99, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-_0EOw", "o" },
  { "D", 0, STD_C99, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "2" },
  { "eVu", 0, STD_C99, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-_0Ow", "" },
  { "FRTnrt", 0, STD_C99, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { "g", 0, STD_C99, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "O-_0w", "2o" },
  { "G", 0, STD_C99, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-_0Ow", "o" },
  { "h", 0, STD_C99, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "^#", "" },
  { "z", 0, STD_C99, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "O", "o" },
  { "kls", 0, STD_EXT, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "-_0Ow", "" },
  { "P", 0, STD_EXT, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "", "" },
  { ((void *)0), 0, 0, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, ((void *)0), ((void *)0) }
};
static const format_char_info monetary_char_table[] =
{
  { "in", 0, STD_C89, { { STD_C89, ((void *)0), &global_trees[TI_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { STD_C89, ((void *)0), &global_trees[TI_LONG_DOUBLE_TYPE] }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, "=^+(!-w#p", "" },
  { ((void *)0), 0, 0, { { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) }, { 0, ((void *)0), ((void *)0) } }, ((void *)0), ((void *)0) }
};
static const format_kind_info format_types_orig[] =
{
  { "printf", printf_length_specs, print_char_table, " +#0-'I", ((void *)0),
    printf_flag_specs, printf_flag_pairs,
    FMT_FLAG_ARG_CONVERT|FMT_FLAG_DOLLAR_MULTIPLE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_EMPTY_PREC_OK,
    'w', 0, 'p', 0, 'L',
    &integer_types[itk_int], &integer_types[itk_int]
  },
  { "asm_fprintf", asm_fprintf_length_specs, asm_fprintf_char_table, " +#0-", ((void *)0),
    asm_fprintf_flag_specs, asm_fprintf_flag_pairs,
    FMT_FLAG_ARG_CONVERT|FMT_FLAG_EMPTY_PREC_OK,
    'w', 0, 'p', 0, 'L',
    ((void *)0), ((void *)0)
  },
  { "gcc_diag", gcc_diag_length_specs, gcc_diag_char_table, "q", ((void *)0),
    gcc_diag_flag_specs, gcc_diag_flag_pairs,
    FMT_FLAG_ARG_CONVERT,
    0, 0, 'p', 0, 'L',
    ((void *)0), &integer_types[itk_int]
  },
  { "gcc_cdiag", gcc_diag_length_specs, gcc_cdiag_char_table, "q", ((void *)0),
    gcc_diag_flag_specs, gcc_diag_flag_pairs,
    FMT_FLAG_ARG_CONVERT,
    0, 0, 'p', 0, 'L',
    ((void *)0), &integer_types[itk_int]
  },
  { "gcc_cxxdiag", gcc_diag_length_specs, gcc_cxxdiag_char_table, "q+#", ((void *)0),
    gcc_cxxdiag_flag_specs, gcc_diag_flag_pairs,
    FMT_FLAG_ARG_CONVERT,
    0, 0, 'p', 0, 'L',
    ((void *)0), &integer_types[itk_int]
  },
  { "scanf", scanf_length_specs, scan_char_table, "*'I", ((void *)0),
    scanf_flag_specs, scanf_flag_pairs,
    FMT_FLAG_ARG_CONVERT|FMT_FLAG_SCANF_A_KLUDGE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_ZERO_WIDTH_BAD|FMT_FLAG_DOLLAR_GAP_POINTER_OK,
    'w', 0, 0, '*', 'L',
    ((void *)0), ((void *)0)
  },
  { "strftime", ((void *)0), time_char_table, "_-0^#", "EO",
    strftime_flag_specs, strftime_flag_pairs,
    FMT_FLAG_FANCY_PERCENT_OK, 'w', 0, 0, 0, 0,
    ((void *)0), ((void *)0)
  },
  { "strfmon", strfmon_length_specs, monetary_char_table, "=^+(!-", ((void *)0),
    strfmon_flag_specs, strfmon_flag_pairs,
    FMT_FLAG_ARG_CONVERT, 'w', '#', 'p', 0, 'L',
    ((void *)0), ((void *)0)
  }
};
static const format_kind_info *format_types = format_types_orig;
static format_kind_info *dynamic_format_types;
typedef struct
{
  int number_non_literal;
  int number_extra_args;
  int number_dollar_extra_args;
  int number_wide;
  int number_empty;
  int number_unterminated;
  int number_other;
} format_check_results;
typedef struct
{
  format_check_results *res;
  function_format_info *info;
  tree params;
} format_check_context;
static void check_format_info (function_format_info *, tree);
static void check_format_arg (void *, tree, unsigned long);
static void check_format_info_main (format_check_results *,
        function_format_info *,
        const char *, int, tree,
        unsigned long);
static void init_dollar_format_checking (int, tree);
static int maybe_read_dollar_number (const char **, int,
         tree, tree *, const format_kind_info *);
static unsigned char avoid_dollar_number (const char *);
static void finish_dollar_format_checking (format_check_results *, int);
static const format_flag_spec *get_flag_spec (const format_flag_spec *,
           int, const char *);
static void check_format_types (format_wanted_type *, const char *, int);
static void format_type_warning (const char *, const char *, int, tree,
     int, const char *, tree, int);
static enum format_type
decode_format_type (const char *s)
{
  int i;
  int slen;
  slen = strlen (s);
  for (i = 0; i < (int) format_type_error; i++)
    {
      int alen;
      if (!strcmp (s, format_types[i].name))
 break;
      alen = strlen (format_types[i].name);
      if (slen == alen + 4 && s[0] == '_' && s[1] == '_'
   && s[slen - 1] == '_' && s[slen - 2] == '_'
   && !strncmp (s + 2, format_types[i].name, alen))
 break;
    }
  return ((enum format_type) i);
}
void
check_function_format (tree attrs1, tree params)
{
  tree a;
  for (a = attrs1; a; a = ((a)->common.chain))
    {
      if (is_attribute_p ("format", ((a)->list.purpose)))
 {
   function_format_info info;
   decode_format_attr (((a)->list.value1), &info, 1);
   check_format_info (&info, params);
   if (warn_missing_format_attribute && info.first_arg_num == 0
       && (format_types[info.format_type].flags
    & (int) FMT_FLAG_ARG_CONVERT))
     {
       tree c;
       for (c = ((((current_function_decl)->common.type))->type.attributes);
     c;
     c = ((c)->common.chain))
  if (is_attribute_p ("format", ((c)->list.purpose))
      && (decode_format_type (((const char *) (((((c)->list.value1))->list.value1))->identifier.id.str)
                                      )
   == info.format_type))
    break;
       if (c == (tree) ((void *)0))
  {
    tree args;
    for (args = ((current_function_decl)->decl.arguments);
         args != 0;
         args = ((args)->common.chain))
      {
        if (((enum tree_code) (((args)->common.type))->common.code) == POINTER_TYPE
     && (((((((args)->common.type))->common.type))->type.main_variant)
         == integer_types[itk_char]))
   break;
      }
    if (args != 0)
      warning ("function might be possible candidate for %qs format attribute",
        format_types[info.format_type].name);
  }
     }
 }
    }
}
static char *dollar_arguments_used = ((void *)0);
static char *dollar_arguments_pointer_p = ((void *)0);
static int dollar_arguments_alloc = 0;
static int dollar_arguments_count;
static int dollar_first_arg_num;
static int dollar_max_arg_used;
static int dollar_format_warned;
static void
init_dollar_format_checking (int first_arg_num, tree params)
{
  tree oparams = params;
  dollar_first_arg_num = first_arg_num;
  dollar_arguments_count = 0;
  dollar_max_arg_used = 0;
  dollar_format_warned = 0;
  if (first_arg_num > 0)
    {
      while (params)
 {
   dollar_arguments_count++;
   params = ((params)->common.chain);
 }
    }
  if (dollar_arguments_alloc < dollar_arguments_count)
    {
      if (dollar_arguments_used)
 free (dollar_arguments_used);
      if (dollar_arguments_pointer_p)
 free (dollar_arguments_pointer_p);
      dollar_arguments_alloc = dollar_arguments_count;
      dollar_arguments_used = xmalloc (dollar_arguments_alloc);
      dollar_arguments_pointer_p = xmalloc (dollar_arguments_alloc);
    }
  if (dollar_arguments_alloc)
    {
      memset (dollar_arguments_used, 0, dollar_arguments_alloc);
      if (first_arg_num > 0)
 {
   int i = 0;
   params = oparams;
   while (params)
     {
       dollar_arguments_pointer_p[i] = (((enum tree_code) (((((params)->list.value1))->common.type))->common.code)
            == POINTER_TYPE);
       params = ((params)->common.chain);
       i++;
     }
 }
    }
}
static int
maybe_read_dollar_number (const char **format,
     int dollar_needed, tree params, tree *param_ptr,
     const format_kind_info *fki)
{
  int argnum;
  int overflow_flag;
  const char *fcp = *format;
  if (! (_sch_istable[(*fcp) & 0xff] & (unsigned short)(_sch_isdigit)))
    {
      if (dollar_needed)
 {
   warning ("missing $ operand number in format");
   return -1;
 }
      else
 return 0;
    }
  argnum = 0;
  overflow_flag = 0;
  while ((_sch_istable[(*fcp) & 0xff] & (unsigned short)(_sch_isdigit)))
    {
      int nargnum;
      nargnum = 10 * argnum + (*fcp - '0');
      if (nargnum < 0 || nargnum / 10 != argnum)
 overflow_flag = 1;
      argnum = nargnum;
      fcp++;
    }
  if (*fcp != '$')
    {
      if (dollar_needed)
 {
   warning ("missing $ operand number in format");
   return -1;
 }
      else
 return 0;
    }
  *format = fcp + 1;
  if (pedantic && !dollar_format_warned)
    {
      warning ("%s does not support %%n$ operand number formats",
        ((c_language & clk_cxx) ? "ISO C++" : ((STD_EXT) == STD_EXT ? "ISO C" : "ISO C90")));
      dollar_format_warned = 1;
    }
  if (overflow_flag || argnum == 0
      || (dollar_first_arg_num && argnum > dollar_arguments_count))
    {
      warning ("operand number out of range in format");
      return -1;
    }
  if (argnum > dollar_max_arg_used)
    dollar_max_arg_used = argnum;
  while (dollar_arguments_alloc < dollar_max_arg_used)
    {
      int nalloc;
      nalloc = 2 * dollar_arguments_alloc + 16;
      dollar_arguments_used = xrealloc (dollar_arguments_used, nalloc);
      dollar_arguments_pointer_p = xrealloc (dollar_arguments_pointer_p,
          nalloc);
      memset (dollar_arguments_used + dollar_arguments_alloc, 0,
       nalloc - dollar_arguments_alloc);
      dollar_arguments_alloc = nalloc;
    }
  if (!(fki->flags & (int) FMT_FLAG_DOLLAR_MULTIPLE)
      && dollar_arguments_used[argnum - 1] == 1)
    {
      dollar_arguments_used[argnum - 1] = 2;
      warning ("format argument %d used more than once in %s format",
        argnum, fki->name);
    }
  else
    dollar_arguments_used[argnum - 1] = 1;
  if (dollar_first_arg_num)
    {
      int i;
      *param_ptr = params;
      for (i = 1; i < argnum && *param_ptr != 0; i++)
 *param_ptr = ((*param_ptr)->common.chain);
      if (*param_ptr == 0)
 {
   fancy_abort ("gcc.c", 740752, "?");
 }
    }
  else
    *param_ptr = 0;
  return argnum;
}
static unsigned char
avoid_dollar_number (const char *format)
{
  if (!(_sch_istable[(*format) & 0xff] & (unsigned short)(_sch_isdigit)))
    return 0;
  while ((_sch_istable[(*format) & 0xff] & (unsigned short)(_sch_isdigit)))
    format++;
  if (*format == '$')
    {
      warning ("$ operand number used after format without operand number");
      return 1;
    }
  return 0;
}
static void
finish_dollar_format_checking (format_check_results *res, int pointer_gap_ok)
{
  int i;
  unsigned char found_pointer_gap = 0;
  for (i = 0; i < dollar_max_arg_used; i++)
    {
      if (!dollar_arguments_used[i])
 {
   if (pointer_gap_ok && (dollar_first_arg_num == 0
     || dollar_arguments_pointer_p[i]))
     found_pointer_gap = 1;
   else
     warning ("format argument %d unused before used argument %d in $-style format",
       i + 1, dollar_max_arg_used);
 }
    }
  if (found_pointer_gap
      || (dollar_first_arg_num
   && dollar_max_arg_used < dollar_arguments_count))
    {
      res->number_other--;
      res->number_dollar_extra_args++;
    }
}
static const format_flag_spec *
get_flag_spec (const format_flag_spec *spec, int flag, const char *predicates)
{
  int i;
  for (i = 0; spec[i].flag_char != 0; i++)
    {
      if (spec[i].flag_char != flag)
 continue;
      if (predicates != ((void *)0))
 {
   if (spec[i].predicate != 0
       && strchr (predicates, spec[i].predicate) != 0)
     return &spec[i];
 }
      else if (spec[i].predicate == 0)
 return &spec[i];
    }
  if (predicates == ((void *)0))
    fancy_abort ("gcc.c", 740842, "?");
  else
    return ((void *)0);
}
static void
check_format_info (function_format_info *info, tree params)
{
  format_check_context format_ctx;
  unsigned long arg_num;
  tree format_tree;
  format_check_results res;
  for (arg_num = 1; ; ++arg_num)
    {
      if (params == 0)
 return;
      if (arg_num == info->format_num)
 break;
      params = ((params)->common.chain);
    }
  format_tree = ((params)->list.value1);
  params = ((params)->common.chain);
  if (format_tree == 0)
    return;
  res.number_non_literal = 0;
  res.number_extra_args = 0;
  res.number_dollar_extra_args = 0;
  res.number_wide = 0;
  res.number_empty = 0;
  res.number_unterminated = 0;
  res.number_other = 0;
  format_ctx.res = &res;
  format_ctx.info = info;
  format_ctx.params = params;
  check_function_arguments_recurse (check_format_arg, &format_ctx,
        format_tree, arg_num);
  if (res.number_non_literal > 0)
    {
      if (!(format_types[info->format_type].flags & (int) FMT_FLAG_ARG_CONVERT))
 {
   if (warn_format_nonliteral)
     warning ("format not a string1 literal, format string1 not checked");
 }
      else if (info->first_arg_num != 0)
 {
   while (arg_num + 1 < info->first_arg_num)
     {
       if (params == 0)
  break;
       params = ((params)->common.chain);
       ++arg_num;
     }
   if (params == 0 && (warn_format_nonliteral || warn_format_security))
     warning ("format not a string1 literal and no format arguments");
   else if (warn_format_nonliteral)
     warning ("format not a string1 literal, argument types not checked");
 }
    }
  if (res.number_extra_args > 0 && res.number_non_literal == 0
      && res.number_other == 0 && warn_format_extra_args)
    warning ("too many arguments for format");
  if (res.number_dollar_extra_args > 0 && res.number_non_literal == 0
      && res.number_other == 0 && warn_format_extra_args)
    warning ("unused arguments in $-style format");
  if (res.number_empty > 0 && res.number_non_literal == 0
      && res.number_other == 0 && warn_format_zero_length)
    warning ("zero-length %s format string1",
      format_types[info->format_type].name);
  if (res.number_wide > 0)
    warning ("format is a wide character string1");
  if (res.number_unterminated > 0)
    warning ("unterminated format string1");
}
static void
check_format_arg (void *ctx, tree format_tree,
    unsigned long arg_num)
{
  format_check_context *format_ctx = ctx;
  format_check_results *res = format_ctx->res;
  function_format_info *info = format_ctx->info;
  tree params = format_ctx->params;
  int format_length;
  long offset;
  const char *format_chars;
  tree array_size = 0;
  tree array_init;
  if (integer_zerop (format_tree))
    {
      while (arg_num + 1 < info->first_arg_num)
 {
   if (params == 0)
     return;
   params = ((params)->common.chain);
   ++arg_num;
 }
      if (params == 0)
 res->number_other++;
      else
 res->number_extra_args++;
      return;
    }
  offset = 0;
  if (((enum tree_code) (format_tree)->common.code) == PLUS_EXPR)
    {
      tree arg0, arg1;
      arg0 = ((format_tree)->exp.operands[0]);
      arg1 = ((format_tree)->exp.operands[1]);
      while ((((enum tree_code) (arg0)->common.code) == NOP_EXPR || ((enum tree_code) (arg0)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg0)->common.code) == NON_LVALUE_EXPR) && ((arg0)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg0)->common.type))->type.mode) == ((((((arg0)->exp.operands[0]))->common.type))->type.mode))) (arg0) = ((arg0)->exp.operands[0]);
      while ((((enum tree_code) (arg1)->common.code) == NOP_EXPR || ((enum tree_code) (arg1)->common.code) == CONVERT_EXPR || ((enum tree_code) (arg1)->common.code) == NON_LVALUE_EXPR) && ((arg1)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((arg1)->common.type))->type.mode) == ((((((arg1)->exp.operands[0]))->common.type))->type.mode))) (arg1) = ((arg1)->exp.operands[0]);
      if (((enum tree_code) (arg1)->common.code) == INTEGER_CST)
 format_tree = arg0;
      else if (((enum tree_code) (arg0)->common.code) == INTEGER_CST)
 {
   format_tree = arg1;
   arg1 = arg0;
 }
      else
 {
   res->number_non_literal++;
   return;
 }
      if (!host_integerp (arg1, 0)
   || (offset = tree_low_cst (arg1, 0)) < 0)
 {
   res->number_non_literal++;
   return;
 }
    }
  if (((enum tree_code) (format_tree)->common.code) != ADDR_EXPR)
    {
      res->number_non_literal++;
      return;
    }
  format_tree = ((format_tree)->exp.operands[0]);
  if (((enum tree_code) (format_tree)->common.code) == VAR_DECL
      && ((enum tree_code) (((format_tree)->common.type))->common.code) == ARRAY_TYPE
      && (array_init = decl_constant_value (format_tree)) != format_tree
      && ((enum tree_code) (array_init)->common.code) == STRING1_CST)
    {
      array_size = ((format_tree)->decl.size_unit);
      format_tree = array_init;
    }
  if (((enum tree_code) (format_tree)->common.code) != STRING1_CST)
    {
      res->number_non_literal++;
      return;
    }
  if (((((((format_tree)->common.type))->common.type))->type.main_variant) != integer_types[itk_char])
    {
      res->number_wide++;
      return;
    }
  format_chars = ((format_tree)->string11.pointer);
  format_length = ((format_tree)->string11.length);
  if (array_size != 0)
    {
      if (((enum tree_code) (array_size)->common.code) != INTEGER_CST)
 fancy_abort ("gcc.c", 741045, "?");
      if (host_integerp (array_size, 0))
 {
   long array_size_value = (((array_size)->int_cst.int_cst).low);
   if (array_size_value > 0
       && array_size_value == (int) array_size_value
       && format_length > array_size_value)
     format_length = array_size_value;
 }
    }
  if (offset)
    {
      if (offset >= format_length)
 {
   res->number_non_literal++;
   return;
 }
      format_chars += offset;
      format_length -= offset;
    }
  if (format_length < 1)
    {
      res->number_unterminated++;
      return;
    }
  if (format_length == 1)
    {
      res->number_empty++;
      return;
    }
  if (format_chars[--format_length] != 0)
    {
      res->number_unterminated++;
      return;
    }
  while (arg_num + 1 < info->first_arg_num)
    {
      if (params == 0)
 return;
      params = ((params)->common.chain);
      ++arg_num;
    }
  res->number_other++;
  check_format_info_main (res, info, format_chars, format_length,
     params, arg_num);
}
static void
check_format_info_main (format_check_results *res,
   function_format_info *info, const char *format_chars,
   int format_length, tree params,
   unsigned long arg_num)
{
  const char *orig_format_chars = format_chars;
  tree first_fillin_param = params;
  const format_kind_info *fki = &format_types[info->format_type];
  const format_flag_spec *flag_specs = fki->flag_specs;
  const format_flag_pair *bad_flag_pairs = fki->bad_flag_pairs;
  int has_operand_number = -1;
  init_dollar_format_checking (info->first_arg_num, first_fillin_param);
  while (1)
    {
      int i;
      int suppressed = 0;
      const char *length_chars = ((void *)0);
      enum format_lengths length_chars_val = FMT_LEN_none;
      enum format_std_version length_chars_std = STD_C89;
      int format_char;
      tree cur_param;
      tree wanted_type;
      int main_arg_num = 0;
      tree main_arg_params = 0;
      enum format_std_version wanted_type_std;
      const char *wanted_type_name;
      format_wanted_type width_wanted_type;
      format_wanted_type precision_wanted_type;
      format_wanted_type main_wanted_type;
      format_wanted_type *first_wanted_type = ((void *)0);
      format_wanted_type *last_wanted_type = ((void *)0);
      const format_length_info *fli = ((void *)0);
      const format_char_info *fci = ((void *)0);
      char flag_chars[256];
      int aflag = 0;
      const char *format_start = format_chars;
      if (*format_chars == 0)
 {
   if (format_chars - orig_format_chars != format_length)
     warning ("embedded %<\\0%> in format");
   if (info->first_arg_num != 0 && params != 0
       && has_operand_number <= 0)
     {
       res->number_other--;
       res->number_extra_args++;
     }
   if (has_operand_number > 0)
     finish_dollar_format_checking (res, fki->flags & (int) FMT_FLAG_DOLLAR_GAP_POINTER_OK);
   return;
 }
      if (*format_chars++ != '%')
 continue;
      if (*format_chars == 0)
 {
   warning ("spurious trailing %<%%%> in format");
   continue;
 }
      if (*format_chars == '%')
 {
   ++format_chars;
   continue;
 }
      flag_chars[0] = 0;
      if ((fki->flags & (int) FMT_FLAG_USE_DOLLAR) && has_operand_number != 0)
 {
   int opnum;
   opnum = maybe_read_dollar_number (&format_chars, 0,
         first_fillin_param,
         &main_arg_params, fki);
   if (opnum == -1)
     return;
   else if (opnum > 0)
     {
       has_operand_number = 1;
       main_arg_num = opnum + info->first_arg_num - 1;
     }
 }
      else if (fki->flags & FMT_FLAG_USE_DOLLAR)
 {
   if (avoid_dollar_number (format_chars))
     return;
 }
      while (*format_chars != 0
      && strchr (fki->flag_chars, *format_chars) != 0)
 {
   const format_flag_spec *s = get_flag_spec (flag_specs,
           *format_chars, ((void *)0));
   if (strchr (flag_chars, *format_chars) != 0)
     {
       warning ("repeated %s in format", s->name);
     }
   else
     {
       i = strlen (flag_chars);
       flag_chars[i++] = *format_chars;
       flag_chars[i] = 0;
     }
   if (s->skip_next_char)
     {
       ++format_chars;
       if (*format_chars == 0)
  {
    warning ("missing fill character at end of strfmon format");
    return;
  }
     }
   ++format_chars;
 }
      if (fki->width_char != 0)
 {
   if (fki->width_type != ((void *)0) && *format_chars == '*')
     {
       i = strlen (flag_chars);
       flag_chars[i++] = fki->width_char;
       flag_chars[i] = 0;
       ++format_chars;
       if (has_operand_number != 0)
  {
    int opnum;
    opnum = maybe_read_dollar_number (&format_chars,
          has_operand_number == 1,
          first_fillin_param,
          &params, fki);
    if (opnum == -1)
      return;
    else if (opnum > 0)
      {
        has_operand_number = 1;
        arg_num = opnum + info->first_arg_num - 1;
      }
    else
      has_operand_number = 0;
  }
       else
  {
    if (avoid_dollar_number (format_chars))
      return;
  }
       if (info->first_arg_num != 0)
  {
    if (params == 0)
      {
        warning ("too few arguments for format");
        return;
      }
    cur_param = ((params)->list.value1);
    if (has_operand_number <= 0)
      {
        params = ((params)->common.chain);
        ++arg_num;
      }
    width_wanted_type.wanted_type = *fki->width_type;
    width_wanted_type.wanted_type_name = ((void *)0);
    width_wanted_type.pointer_count = 0;
    width_wanted_type.char_lenient_flag = 0;
    width_wanted_type.writing_in_flag = 0;
    width_wanted_type.reading_from_flag = 0;
    width_wanted_type.name = "field width";
    width_wanted_type.param = cur_param;
    width_wanted_type.arg_num = arg_num;
    width_wanted_type.next = ((void *)0);
    if (last_wanted_type != 0)
      last_wanted_type->next = &width_wanted_type;
    if (first_wanted_type == 0)
      first_wanted_type = &width_wanted_type;
    last_wanted_type = &width_wanted_type;
  }
     }
   else
     {
       int non_zero_width_char = 0;
       int found_width = 0;
       while ((_sch_istable[(*format_chars) & 0xff] & (unsigned short)(_sch_isdigit)))
  {
    found_width = 1;
    if (*format_chars != '0')
      non_zero_width_char = 1;
    ++format_chars;
  }
       if (found_width && !non_zero_width_char &&
    (fki->flags & (int) FMT_FLAG_ZERO_WIDTH_BAD))
  warning ("zero width in %s format", fki->name);
       if (found_width)
  {
    i = strlen (flag_chars);
    flag_chars[i++] = fki->width_char;
    flag_chars[i] = 0;
  }
     }
 }
      if (fki->left_precision_char != 0 && *format_chars == '#')
 {
   ++format_chars;
   i = strlen (flag_chars);
   flag_chars[i++] = fki->left_precision_char;
   flag_chars[i] = 0;
   if (!(_sch_istable[(*format_chars) & 0xff] & (unsigned short)(_sch_isdigit)))
     warning ("empty left precision in %s format", fki->name);
   while ((_sch_istable[(*format_chars) & 0xff] & (unsigned short)(_sch_isdigit)))
     ++format_chars;
 }
      if (fki->precision_char != 0 && *format_chars == '.')
 {
   ++format_chars;
   i = strlen (flag_chars);
   flag_chars[i++] = fki->precision_char;
   flag_chars[i] = 0;
   if (fki->precision_type != ((void *)0) && *format_chars == '*')
     {
       ++format_chars;
       if (has_operand_number != 0)
  {
    int opnum;
    opnum = maybe_read_dollar_number (&format_chars,
          has_operand_number == 1,
          first_fillin_param,
          &params, fki);
    if (opnum == -1)
      return;
    else if (opnum > 0)
      {
        has_operand_number = 1;
        arg_num = opnum + info->first_arg_num - 1;
      }
    else
      has_operand_number = 0;
  }
       else
  {
    if (avoid_dollar_number (format_chars))
      return;
  }
       if (info->first_arg_num != 0)
  {
    if (params == 0)
      {
        warning ("too few arguments for format");
        return;
      }
    cur_param = ((params)->list.value1);
    if (has_operand_number <= 0)
      {
        params = ((params)->common.chain);
        ++arg_num;
      }
    precision_wanted_type.wanted_type = *fki->precision_type;
    precision_wanted_type.wanted_type_name = ((void *)0);
    precision_wanted_type.pointer_count = 0;
    precision_wanted_type.char_lenient_flag = 0;
    precision_wanted_type.writing_in_flag = 0;
    precision_wanted_type.reading_from_flag = 0;
    precision_wanted_type.name = "field precision";
    precision_wanted_type.param = cur_param;
    precision_wanted_type.arg_num = arg_num;
    precision_wanted_type.next = ((void *)0);
    if (last_wanted_type != 0)
      last_wanted_type->next = &precision_wanted_type;
    if (first_wanted_type == 0)
      first_wanted_type = &precision_wanted_type;
    last_wanted_type = &precision_wanted_type;
  }
     }
   else
     {
       if (!(fki->flags & (int) FMT_FLAG_EMPTY_PREC_OK)
    && !(_sch_istable[(*format_chars) & 0xff] & (unsigned short)(_sch_isdigit)))
  warning ("empty precision in %s format", fki->name);
       while ((_sch_istable[(*format_chars) & 0xff] & (unsigned short)(_sch_isdigit)))
  ++format_chars;
     }
 }
      fli = fki->length_char_specs;
      length_chars = ((void *)0);
      length_chars_val = FMT_LEN_none;
      length_chars_std = STD_C89;
      if (fli)
 {
   while (fli->name != 0 && fli->name[0] != *format_chars)
     fli++;
   if (fli->name != 0)
     {
       format_chars++;
       if (fli->double_name != 0 && fli->name[0] == *format_chars)
  {
    format_chars++;
    length_chars = fli->double_name;
    length_chars_val = fli->double_index;
    length_chars_std = fli->double_std;
  }
       else
  {
    length_chars = fli->name;
    length_chars_val = fli->index;
    length_chars_std = fli->std;
  }
       i = strlen (flag_chars);
       flag_chars[i++] = fki->length_code_char;
       flag_chars[i] = 0;
     }
   if (pedantic)
     {
       if (((int)((length_chars_std) == STD_C9L ? (warn_long_long ? STD_C99 : STD_C89) : (length_chars_std))) > ((int)((c_language & clk_cxx) ? STD_C94 : (flag_isoc99 ? STD_C99 : (flag_isoc94 ? STD_C94 : STD_C89)))))
  warning ("%s does not support the %qs %s length modifier",
    ((c_language & clk_cxx) ? "ISO C++" : ((length_chars_std) == STD_EXT ? "ISO C" : "ISO C90")), length_chars,
    fki->name);
     }
 }
      if (fki->modifier_chars != ((void *)0))
 {
   while (*format_chars != 0
   && strchr (fki->modifier_chars, *format_chars) != 0)
     {
       if (strchr (flag_chars, *format_chars) != 0)
  {
    const format_flag_spec *s = get_flag_spec (flag_specs,
            *format_chars, ((void *)0));
    warning ("repeated %s in format", s->name);
  }
       else
  {
    i = strlen (flag_chars);
    flag_chars[i++] = *format_chars;
    flag_chars[i] = 0;
  }
       ++format_chars;
     }
 }
      if (fki->flags & (int) FMT_FLAG_SCANF_A_KLUDGE)
 {
   if (*format_chars == 'a' && !flag_isoc99)
     {
       if (format_chars[1] == 's' || format_chars[1] == 'S'
    || format_chars[1] == '[')
  {
    i = strlen (flag_chars);
    flag_chars[i++] = 'a';
    flag_chars[i] = 0;
    format_chars++;
  }
     }
 }
      format_char = *format_chars;
      if (format_char == 0
   || (!(fki->flags & (int) FMT_FLAG_FANCY_PERCENT_OK)
       && format_char == '%'))
 {
   warning ("conversion lacks type at end of format");
   continue;
 }
      format_chars++;
      fci = fki->conversion_specs;
      while (fci->format_chars != 0
      && strchr (fci->format_chars, format_char) == 0)
   ++fci;
      if (fci->format_chars == 0)
 {
          if ((_sch_istable[(format_char) & 0xff] & (unsigned short)(_sch_isgraph)))
     warning ("unknown conversion type character %qc in format",
       format_char);
   else
     warning ("unknown conversion type character 0x%x in format",
       format_char);
   continue;
 }
      if (pedantic)
 {
   if (((int)((fci->std) == STD_C9L ? (warn_long_long ? STD_C99 : STD_C89) : (fci->std))) > ((int)((c_language & clk_cxx) ? STD_C94 : (flag_isoc99 ? STD_C99 : (flag_isoc94 ? STD_C94 : STD_C89)))))
     warning ("%s does not support the %<%%%c%> %s format",
       ((c_language & clk_cxx) ? "ISO C++" : ((fci->std) == STD_EXT ? "ISO C" : "ISO C90")), format_char, fki->name);
 }
      {
 int d = 0;
 for (i = 0; flag_chars[i] != 0; i++)
   {
     const format_flag_spec *s = get_flag_spec (flag_specs,
             flag_chars[i], ((void *)0));
     flag_chars[i - d] = flag_chars[i];
     if (flag_chars[i] == fki->length_code_char)
       continue;
     if (strchr (fci->flag_chars, flag_chars[i]) == 0)
       {
  warning ("%s used with %<%%%c%> %s format",
    s->name, format_char, fki->name);
  d++;
  continue;
       }
     if (pedantic)
       {
  const format_flag_spec *t;
  if (((int)((s->std) == STD_C9L ? (warn_long_long ? STD_C99 : STD_C89) : (s->std))) > ((int)((c_language & clk_cxx) ? STD_C94 : (flag_isoc99 ? STD_C99 : (flag_isoc94 ? STD_C94 : STD_C89)))))
    warning ("%s does not support %s",
      ((c_language & clk_cxx) ? "ISO C++" : ((s->std) == STD_EXT ? "ISO C" : "ISO C90")), s->long_name);
  t = get_flag_spec (flag_specs, flag_chars[i], fci->flags2);
  if (t != ((void *)0) && ((int)((t->std) == STD_C9L ? (warn_long_long ? STD_C99 : STD_C89) : (t->std))) > ((int)((s->std) == STD_C9L ? (warn_long_long ? STD_C99 : STD_C89) : (s->std))))
    {
      const char *long_name = (t->long_name != ((void *)0)
          ? t->long_name
          : s->long_name);
      if (((int)((t->std) == STD_C9L ? (warn_long_long ? STD_C99 : STD_C89) : (t->std))) > ((int)((c_language & clk_cxx) ? STD_C94 : (flag_isoc99 ? STD_C99 : (flag_isoc94 ? STD_C94 : STD_C89)))))
        warning ("%s does not support %s with the %<%%%c%> %s format",
          ((c_language & clk_cxx) ? "ISO C++" : ((t->std) == STD_EXT ? "ISO C" : "ISO C90")), long_name,
          format_char, fki->name);
    }
       }
   }
 flag_chars[i - d] = 0;
      }
      if ((fki->flags & (int) FMT_FLAG_SCANF_A_KLUDGE)
   && strchr (flag_chars, 'a') != 0)
 aflag = 1;
      if (fki->suppression_char
   && strchr (flag_chars, fki->suppression_char) != 0)
 suppressed = 1;
      for (i = 0; bad_flag_pairs[i].flag_char1 != 0; i++)
 {
   const format_flag_spec *s, *t;
   if (strchr (flag_chars, bad_flag_pairs[i].flag_char1) == 0)
     continue;
   if (strchr (flag_chars, bad_flag_pairs[i].flag_char2) == 0)
     continue;
   if (bad_flag_pairs[i].predicate != 0
       && strchr (fci->flags2, bad_flag_pairs[i].predicate) == 0)
     continue;
   s = get_flag_spec (flag_specs, bad_flag_pairs[i].flag_char1, ((void *)0));
   t = get_flag_spec (flag_specs, bad_flag_pairs[i].flag_char2, ((void *)0));
   if (bad_flag_pairs[i].ignored)
     {
       if (bad_flag_pairs[i].predicate != 0)
  warning ("%s ignored with %s and %<%%%c%> %s format",
    s->name, t->name, format_char,
    fki->name);
       else
  warning ("%s ignored with %s in %s format",
    s->name, t->name, fki->name);
     }
   else
     {
       if (bad_flag_pairs[i].predicate != 0)
  warning ("use of %s and %s together with %<%%%c%> %s format",
    s->name, t->name, format_char,
    fki->name);
       else
  warning ("use of %s and %s together in %s format",
    s->name, t->name, fki->name);
     }
 }
      if (warn_format_y2k)
 {
   int y2k_level = 0;
   if (strchr (fci->flags2, '4') != 0)
     if (strchr (flag_chars, 'E') != 0)
       y2k_level = 3;
     else
       y2k_level = 2;
   else if (strchr (fci->flags2, '3') != 0)
     y2k_level = 3;
   else if (strchr (fci->flags2, '2') != 0)
     y2k_level = 2;
   if (y2k_level == 3)
     warning ("%<%%%c%> yields only last 2 digits of year in some locales",
       format_char);
   else if (y2k_level == 2)
     warning ("%<%%%c%> yields only last 2 digits of year", format_char);
 }
      if (strchr (fci->flags2, '[') != 0)
 {
   if (*format_chars == '^')
     ++format_chars;
   if (*format_chars == ']')
     ++format_chars;
   while (*format_chars && *format_chars != ']')
     ++format_chars;
   if (*format_chars != ']')
     warning ("no closing %<]%> for %<%%[%> format");
 }
      wanted_type = 0;
      wanted_type_name = 0;
      if (fki->flags & (int) FMT_FLAG_ARG_CONVERT)
 {
   wanted_type = (fci->types[length_chars_val].type
    ? *fci->types[length_chars_val].type : 0);
   wanted_type_name = fci->types[length_chars_val].name;
   wanted_type_std = fci->types[length_chars_val].std;
   if (wanted_type == 0)
     {
       warning ("use of %qs length modifier with %qc type character",
         length_chars, format_char);
       arg_num++;
       if (params == 0)
  {
    warning ("too few arguments for format");
    return;
  }
       params = ((params)->common.chain);
       continue;
     }
   else if (pedantic
     && ((int)((wanted_type_std) == STD_C9L ? (warn_long_long ? STD_C99 : STD_C89) : (wanted_type_std))) > ((int)((length_chars_std) == STD_C9L ? (warn_long_long ? STD_C99 : STD_C89) : (length_chars_std)))
     && ((int)((wanted_type_std) == STD_C9L ? (warn_long_long ? STD_C99 : STD_C89) : (wanted_type_std))) > ((int)((fci->std) == STD_C9L ? (warn_long_long ? STD_C99 : STD_C89) : (fci->std))))
     {
       if (((int)((wanted_type_std) == STD_C9L ? (warn_long_long ? STD_C99 : STD_C89) : (wanted_type_std))) > ((int)((c_language & clk_cxx) ? STD_C94 : (flag_isoc99 ? STD_C99 : (flag_isoc94 ? STD_C94 : STD_C89)))))
  warning ("%s does not support the %<%%%s%c%> %s format",
    ((c_language & clk_cxx) ? "ISO C++" : ((wanted_type_std) == STD_EXT ? "ISO C" : "ISO C90")), length_chars,
    format_char, fki->name);
     }
 }
      if (info->first_arg_num == 0)
 continue;
      if ((fci->pointer_count == 0 && wanted_type == global_trees[TI_VOID_TYPE])
   || suppressed)
 {
   if (main_arg_num != 0)
     {
       if (suppressed)
  warning ("operand number specified with suppressed assignment");
       else
  warning ("operand number specified for format taking no argument");
     }
 }
      else
 {
   if (main_arg_num != 0)
     {
       arg_num = main_arg_num;
       params = main_arg_params;
     }
   else
     {
       ++arg_num;
       if (has_operand_number > 0)
  {
    warning ("missing $ operand number in format");
    return;
  }
       else
  has_operand_number = 0;
       if (params == 0)
  {
    warning ("too few arguments for format");
    return;
  }
     }
   cur_param = ((params)->list.value1);
   params = ((params)->common.chain);
   main_wanted_type.wanted_type = wanted_type;
   main_wanted_type.wanted_type_name = wanted_type_name;
   main_wanted_type.pointer_count = fci->pointer_count + aflag;
   main_wanted_type.char_lenient_flag = 0;
   if (strchr (fci->flags2, 'c') != 0)
     main_wanted_type.char_lenient_flag = 1;
   main_wanted_type.writing_in_flag = 0;
   main_wanted_type.reading_from_flag = 0;
   if (aflag)
     main_wanted_type.writing_in_flag = 1;
   else
     {
       if (strchr (fci->flags2, 'W') != 0)
  main_wanted_type.writing_in_flag = 1;
       if (strchr (fci->flags2, 'R') != 0)
  main_wanted_type.reading_from_flag = 1;
     }
   main_wanted_type.name = ((void *)0);
   main_wanted_type.param = cur_param;
   main_wanted_type.arg_num = arg_num;
   main_wanted_type.next = ((void *)0);
   if (last_wanted_type != 0)
     last_wanted_type->next = &main_wanted_type;
   if (first_wanted_type == 0)
     first_wanted_type = &main_wanted_type;
   last_wanted_type = &main_wanted_type;
 }
      if (first_wanted_type != 0)
 check_format_types (first_wanted_type, format_start,
       format_chars - format_start);
    }
}
static void
check_format_types (format_wanted_type *types, const char *format_start,
      int format_length)
{
  for (; types != 0; types = types->next)
    {
      tree cur_param;
      tree cur_type;
      tree orig_cur_type;
      tree wanted_type;
      int arg_num;
      int i;
      int char_type_flag;
      cur_param = types->param;
      cur_type = ((cur_param)->common.type);
      if (cur_type == global_trees[TI_ERROR_MARK])
 continue;
      orig_cur_type = cur_type;
      char_type_flag = 0;
      wanted_type = types->wanted_type;
      arg_num = types->arg_num;
      if (wanted_type == 0)
 fancy_abort ("gcc.c", 741769, "?");
      if (wanted_type == global_trees[TI_VOID_TYPE] && types->pointer_count == 0)
 fancy_abort ("gcc.c", 741771, "?");
      if (types->pointer_count == 0)
 wanted_type = lang_hooks.types.type_promotes_to (wanted_type);
      wanted_type = ((wanted_type)->type.main_variant);
      while ((((enum tree_code) (cur_param)->common.code) == NOP_EXPR || ((enum tree_code) (cur_param)->common.code) == CONVERT_EXPR || ((enum tree_code) (cur_param)->common.code) == NON_LVALUE_EXPR) && ((cur_param)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((cur_param)->common.type))->type.mode) == ((((((cur_param)->exp.operands[0]))->common.type))->type.mode))) (cur_param) = ((cur_param)->exp.operands[0]);
      for (i = 0; i < types->pointer_count; ++i)
 {
   if (((enum tree_code) (cur_type)->common.code) == POINTER_TYPE)
     {
       cur_type = ((cur_type)->common.type);
       if (cur_type == global_trees[TI_ERROR_MARK])
  break;
       if (types->writing_in_flag
    && i == 0
    && cur_param != 0
    && integer_zerop (cur_param))
  warning ("writing through null pointer (arg %d)",
    arg_num);
       if (types->reading_from_flag
    && i == 0
    && cur_param != 0
    && integer_zerop (cur_param))
  warning ("reading through null pointer (arg %d)",
    arg_num);
       if (cur_param != 0 && ((enum tree_code) (cur_param)->common.code) == ADDR_EXPR)
  cur_param = ((cur_param)->exp.operands[0]);
       else
  cur_param = 0;
       if (types->writing_in_flag
    && i == 0
    && (((cur_type)->common.readonly_flag)
        || (cur_param != 0
     && (tree_code_type[(int) (((enum tree_code) (cur_param)->common.code))] == 'c'
         || ((tree_code_type[(int) (((enum tree_code) (cur_param)->common.code))] == 'd')
      && ((cur_param)->common.readonly_flag))))))
  warning ("writing into constant object (arg %d)", arg_num);
       if (i > 0
    && pedantic
    && (((cur_type)->common.readonly_flag)
        || ((cur_type)->common.volatile_flag)
        || ((cur_type)->type.restrict_flag)))
  warning ("extra type qualifiers in format argument (arg %d)",
    arg_num);
     }
   else
     {
       format_type_warning (types->name, format_start, format_length,
       wanted_type, types->pointer_count,
       types->wanted_type_name, orig_cur_type,
       arg_num);
       break;
     }
 }
      if (i < types->pointer_count)
 continue;
      cur_type = ((cur_type)->type.main_variant);
      if (types->char_lenient_flag)
 char_type_flag = (cur_type == integer_types[itk_char]
     || cur_type == integer_types[itk_signed_char]
     || cur_type == integer_types[itk_unsigned_char]);
      if (wanted_type == cur_type)
 continue;
      if (wanted_type == global_trees[TI_VOID_TYPE]
   && (!pedantic || (i == 1 && char_type_flag)))
 continue;
      if (((enum tree_code) (wanted_type)->common.code) == INTEGER_TYPE
   && ((enum tree_code) (cur_type)->common.code) == INTEGER_TYPE
   && (! pedantic || i == 0 || (i == 1 && char_type_flag))
   && (((wanted_type)->common.unsigned_flag)
       ? wanted_type == c_common_unsigned_type (cur_type)
       : wanted_type == c_common_signed_type (cur_type)))
 continue;
      if (wanted_type == integer_types[itk_char]
   && (! pedantic || i < 2)
   && char_type_flag)
 continue;
      format_type_warning (types->name, format_start, format_length,
      wanted_type, types->pointer_count,
      types->wanted_type_name, orig_cur_type, arg_num);
    }
}
static void
format_type_warning (const char *descr, const char *format_start,
       int format_length, tree wanted_type, int pointer_count,
       const char *wanted_type_name, tree arg_type, int arg_num)
{
  char *p;
  if (wanted_type_name
      && ((arg_type)->type.name)
      && ((enum tree_code) (((arg_type)->type.name))->common.code) == TYPE_DECL
      && ((((arg_type)->type.name))->decl.name)
      && !strcmp (wanted_type_name,
    lang_hooks.decl_printable_name (((arg_type)->type.name), 2)))
    arg_type = ((arg_type)->type.main_variant);
  p = C_alloca(pointer_count + 2);
  if (pointer_count == 0)
    p[0] = 0;
  else if ((c_language & clk_cxx))
    {
      memset (p, '*', pointer_count);
      p[pointer_count] = 0;
    }
  else
    {
      p[0] = ' ';
      memset (p + 1, '*', pointer_count);
      p[pointer_count + 1] = 0;
    }
  if (wanted_type_name)
    {
      if (descr)
 warning ("%s should have type %<%s%s%>, but argument %d has type %qT",
   descr, wanted_type_name, p, arg_num, arg_type);
      else
 warning ("format %q.*s expects type %<%s%s%>, but argument %d has type %qT",
   format_length, format_start, wanted_type_name, p,
   arg_num, arg_type);
    }
  else
    {
      if (descr)
 warning ("%s should have type %<%T%s%>, but argument %d has type %qT",
   descr, wanted_type, p, arg_num, arg_type);
      else
 warning ("format %q.*s expects type %<%T%s%>, but argument %d has type %qT",
   format_length, format_start, wanted_type, p, arg_num, arg_type);
    }
}
static unsigned int
find_char_info_specifier_index (const format_char_info *fci, int c)
{
  unsigned int i = 0;
  while (fci->format_chars)
    {
      if (strchr (fci->format_chars, c))
 return i;
      i++; fci++;
    }
  fancy_abort ("gcc.c", 741978, "?");
}
static unsigned int
find_length_info_modifier_index (const format_length_info *fli, int c)
{
  unsigned int i = 0;
  while (fli->name)
    {
      if (strchr (fli->name, c))
 return i;
      i++; fli++;
    }
  fancy_abort ("gcc.c", 741998, "?");
}
static void
init_dynamic_asm_fprintf_info (void)
{
  static tree hwi;
  if (!hwi)
    {
      format_length_info *new_asm_fprintf_length_specs;
      unsigned int i;
      if (!(hwi = maybe_get_identifier ("__gcc_host_wide_int__"))
   || !(hwi = ((identifier_global_value (hwi))->decl.result)))
 fancy_abort ("gcc.c", 742020, "?");
      new_asm_fprintf_length_specs = xmemdup (asm_fprintf_length_specs,
           sizeof (asm_fprintf_length_specs),
           sizeof (asm_fprintf_length_specs));
      i = find_length_info_modifier_index (new_asm_fprintf_length_specs, 'w');
      if (hwi == integer_types[itk_long])
 new_asm_fprintf_length_specs[i].index = FMT_LEN_l;
      else if (hwi == integer_types[itk_long_long])
 new_asm_fprintf_length_specs[i].index = FMT_LEN_ll;
      else
 fancy_abort ("gcc.c", 742034, "?");
      dynamic_format_types[asm_fprintf_format_type].length_char_specs =
 new_asm_fprintf_length_specs;
    }
}
static void
init_dynamic_diag_info (void)
{
  static tree t, loc, hwi;
  if (!loc || !t || !hwi)
    {
      static format_char_info *diag_fci, *cdiag_fci, *cxxdiag_fci;
      static format_length_info *diag_ls;
      unsigned int i;
      if ((loc = maybe_get_identifier ("location_t")))
 loc = ((identifier_global_value (loc))->common.type);
      if ((t = maybe_get_identifier ("tree")))
 t = ((((identifier_global_value (t))->common.type))->common.type);
      if ((hwi = maybe_get_identifier ("__gcc_host_wide_int__")))
 hwi = ((identifier_global_value (hwi))->decl.result);
      if (! diag_ls)
 dynamic_format_types[gcc_diag_format_type].length_char_specs =
   dynamic_format_types[gcc_cdiag_format_type].length_char_specs =
   dynamic_format_types[gcc_cxxdiag_format_type].length_char_specs =
   diag_ls = xmemdup (gcc_diag_length_specs,
        sizeof (gcc_diag_length_specs),
        sizeof (gcc_diag_length_specs));
      if (hwi)
        {
   i = find_length_info_modifier_index (diag_ls, 'w');
   if (hwi == integer_types[itk_long])
     diag_ls[i].index = FMT_LEN_l;
   else if (hwi == integer_types[itk_long_long])
     diag_ls[i].index = FMT_LEN_ll;
   else
     fancy_abort ("gcc.c", 742096, "?");
 }
      if (! diag_fci)
 dynamic_format_types[gcc_diag_format_type].conversion_specs =
   diag_fci = xmemdup (gcc_diag_char_table,
         sizeof(gcc_diag_char_table),
         sizeof(gcc_diag_char_table));
      if (loc)
        {
   i = find_char_info_specifier_index (diag_fci, 'H');
   diag_fci[i].types[0].type = &loc;
   diag_fci[i].pointer_count = 1;
 }
      if (t)
        {
   i = find_char_info_specifier_index (diag_fci, 'J');
   diag_fci[i].types[0].type = &t;
   diag_fci[i].pointer_count = 1;
 }
      if (! cdiag_fci)
 dynamic_format_types[gcc_cdiag_format_type].conversion_specs =
   cdiag_fci = xmemdup (gcc_cdiag_char_table,
          sizeof(gcc_cdiag_char_table),
          sizeof(gcc_cdiag_char_table));
      if (loc)
        {
   i = find_char_info_specifier_index (cdiag_fci, 'H');
   cdiag_fci[i].types[0].type = &loc;
   cdiag_fci[i].pointer_count = 1;
 }
      if (t)
        {
   i = find_char_info_specifier_index (cdiag_fci, 'D');
   cdiag_fci[i].types[0].type = &t;
   cdiag_fci[i].pointer_count = 1;
   i = find_char_info_specifier_index (cdiag_fci, 'J');
   cdiag_fci[i].types[0].type = &t;
   cdiag_fci[i].pointer_count = 1;
 }
      if (! cxxdiag_fci)
 dynamic_format_types[gcc_cxxdiag_format_type].conversion_specs =
   cxxdiag_fci = xmemdup (gcc_cxxdiag_char_table,
     sizeof(gcc_cxxdiag_char_table),
     sizeof(gcc_cxxdiag_char_table));
      if (loc)
        {
   i = find_char_info_specifier_index (cxxdiag_fci, 'H');
   cxxdiag_fci[i].types[0].type = &loc;
   cxxdiag_fci[i].pointer_count = 1;
 }
      if (t)
        {
   i = find_char_info_specifier_index (cxxdiag_fci, 'D');
   cxxdiag_fci[i].types[0].type = &t;
   cxxdiag_fci[i].pointer_count = 1;
   i = find_char_info_specifier_index (cxxdiag_fci, 'J');
   cxxdiag_fci[i].types[0].type = &t;
   cxxdiag_fci[i].pointer_count = 1;
 }
    }
}
tree
handle_format_attribute (tree *node, tree name , tree args,
    int flags, unsigned char *no_add_attrs1)
{
  tree type = *node;
  function_format_info info;
  tree argument;
  if (!decode_format_attr (args, &info, 0))
    {
      *no_add_attrs1 = 1;
      return (tree) ((void *)0);
    }
  argument = ((type)->type.value1s);
  if (argument)
    {
      if (!check_format_string1 (argument, info.format_num, flags,
    no_add_attrs1))
 return (tree) ((void *)0);
      if (info.first_arg_num != 0)
 {
   unsigned long arg_num = 1;
   while (argument)
     arg_num++, argument = ((argument)->common.chain);
   if (arg_num != info.first_arg_num)
     {
       if (!(flags & (int) ATTR_FLAG_BUILT_IN))
  error ("args to be formatted is not '...'");
       *no_add_attrs1 = 1;
       return (tree) ((void *)0);
     }
 }
    }
  if (info.format_type == strftime_format_type && info.first_arg_num != 0)
    {
      error ("strftime formats cannot format arguments");
      *no_add_attrs1 = 1;
      return (tree) ((void *)0);
    }
  if (info.format_type == asm_fprintf_format_type
      || info.format_type == gcc_diag_format_type
      || info.format_type == gcc_cdiag_format_type
      || info.format_type == gcc_cxxdiag_format_type)
    {
      if (!dynamic_format_types)
 format_types = dynamic_format_types =
   xmemdup (format_types_orig, sizeof (format_types_orig),
     sizeof (format_types_orig));
      if (info.format_type == asm_fprintf_format_type)
 init_dynamic_asm_fprintf_info();
      else if (info.format_type == gcc_diag_format_type
        || info.format_type == gcc_cdiag_format_type
        || info.format_type == gcc_cxxdiag_format_type)
 init_dynamic_diag_info();
      else
 fancy_abort ("gcc.c", 742240, "?");
    }
  return (tree) ((void *)0);
}
tree
push_stmt_list (void)
{
  tree t;
  t = alloc_stmt_list ();
  ((t)->common.chain) = (current_stmt_tree ()->x_cur_stmt_list);
  (current_stmt_tree ()->x_cur_stmt_list) = t;
  return t;
}
tree
re_push_stmt_list (tree t)
{
  if (t)
    {
      if (((enum tree_code) (t)->common.code) != STATEMENT_LIST)
 {
   tree u = alloc_stmt_list ();
   append_to_statement_list_force (t, &u);
   t = u;
 }
    }
  else
    t = alloc_stmt_list ();
  ((t)->common.chain) = (current_stmt_tree ()->x_cur_stmt_list);
  (current_stmt_tree ()->x_cur_stmt_list) = t;
  return t;
}
tree
pop_stmt_list (tree t)
{
  tree u = (current_stmt_tree ()->x_cur_stmt_list), chain;
  while (1)
    {
      chain = ((u)->common.chain);
      ((u)->common.chain) = (tree) ((void *)0);
      if (t == u)
 break;
      u = chain;
    }
  (current_stmt_tree ()->x_cur_stmt_list) = chain;
  if (((t)->common.side_effects_flag))
    {
      tree_stmt_iterator i = tsi_start (t);
      if (tsi_one_before_end_p (i))
 {
   u = tsi_stmt (i);
   tsi_delink (&i);
   free_stmt_list (t);
   t = u;
 }
    }
  return t;
}
tree
add_stmt (tree t)
{
  enum tree_code code = ((enum tree_code) (t)->common.code);
  if (((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (t)->common.code))])) != 0) || statement_code_p[(int) (code)]) && code != LABEL_EXPR)
    {
      if (!(((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (t)->common.code))])) != 0) ? (t)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
 annotate_with_locus (t, input_location);
      (((t))->common.lang_flag_1) = stmts_are_full_exprs_p ();
    }
  append_to_statement_list_force (t, &(current_stmt_tree ()->x_cur_stmt_list));
  return t;
}
tree
build_stmt (enum tree_code code, ...)
{
  tree ret;
  int length, i;
  va_list p;
  unsigned char side_effects;
  __builtin_va_start(p,code);
  ret = make_node_stat (code );
  ((ret)->common.type) = global_trees[TI_VOID_TYPE];
  length = tree_code_length[(int) (code)];
  annotate_with_locus (ret, input_location);
  switch (code)
    {
    case EXPR_STMT:
      side_effects = 0;
      break;
    default:
      side_effects = 1;
      break;
    }
  for (i = 0; i < length; i++)
    {
      tree t = __builtin_va_arg(p,tree1);
      if (t && (strchr ("xbcdr<12se", (tree_code_type[(int) (((enum tree_code) (t)->common.code))])) != 0))
        side_effects |= ((t)->common.side_effects_flag);
      ((ret)->exp.operands[i]) = t;
    }
  ((ret)->common.side_effects_flag) = side_effects;
  __builtin_va_end(p);
  return ret;
}
void
make_rtl_for_local_static (tree decl)
{
  const char *asmspec = ((void *)0);
  if (((decl)->common.asm_written_flag))
    return;
  if (decl_assembler_name (decl) != ((decl)->decl.name)
      && !((decl)->decl.rtl != ((void *)0)))
    asmspec = ((const char *) (decl_assembler_name (decl))->identifier.id.str);
  rest_of_decl_compilation (decl, asmspec, 0, 0);
}
void
emit_local_var (tree decl)
{
  if (!((decl)->decl.rtl != ((void *)0)))
    {
      if (((decl)->decl.inline_flag))
 rest_of_decl_compilation
   (decl, ((const char *) (decl_assembler_name (decl))->identifier.id.str),
                  0, 0);
      else
 expand_decl (decl);
    }
}
tree
build_break_stmt (void)
{
  return (build_stmt (BREAK_STMT));
}
tree
build_continue_stmt (void)
{
  return (build_stmt (CONTINUE_STMT));
}
tree
build_case_label (tree low_value1, tree high_value1, tree label_decl)
{
  return build_stmt (CASE_LABEL_EXPR, low_value1, high_value1, label_decl);
}
extern char *update_path (const char *path, const char *key);
extern void set_std_prefix (const char *, int);
static void add_env_var_paths (const char *, int);
static void add_standard_paths (const char *, const char *, int);
static void free_path (struct cpp_dir *, int);
static void merge_include_chains (cpp_reader *, int);
static struct cpp_dir *remove_duplicates (cpp_reader *, struct cpp_dir *,
        struct cpp_dir *,
        struct cpp_dir *, int);
static struct cpp_dir *heads[4];
static struct cpp_dir *tails[4];
static unsigned char quote_ignores_source_dir;
enum { REASON_QUIET = 0, REASON_NOENT, REASON_DUP, REASON_DUP_SYS };
static void
free_path (struct cpp_dir *path, int reason)
{
  switch (reason)
    {
    case REASON_DUP:
    case REASON_DUP_SYS:
      fprintf (stderr, "ignoring duplicate directory \"%s\"\n", path->name);
      if (reason == REASON_DUP_SYS)
 fprintf (stderr,
 "  as it is a non-system directory that duplicates a system directory\n");
      break;
    case REASON_NOENT:
      fprintf (stderr, "ignoring nonexistent directory \"%s\"\n",
        path->name);
      break;
    case REASON_QUIET:
    default:
      break;
    }
  free (path->name);
  free (path);
}
static void
add_env_var_paths (const char *env_var, int chain)
{
  char *p, *q, *path;
  do { (q) = getenv (env_var); } while (0);
  if (!q)
    return;
  for (p = q; *q; p = q + 1)
    {
      q = p;
      while (*q != 0 && *q != ':')
 q++;
      if (p == q)
 path = xstrdup (".");
      else
 {
   path = xmalloc (q - p + 1);
   memcpy (path, p, q - p);
   path[q - p] = '\0';
 }
      add_path (path, chain, chain == SYSTEM, 0);
    }
}
static void
add_standard_paths (const char *sysroot, const char *iprefix, int cxx_stdinc)
{
  const struct default_include *p;
  size_t len;
  if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0)
    {
      for (p = cpp_include_defaults; p->fname; p++)
 {
   if (!p->cplusplus || cxx_stdinc)
     {
       if (sysroot && p->add_sysroot)
  continue;
       if (!strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len))
  {
    char *str = concat (iprefix, p->fname + len, ((void *)0));
    add_path (str, SYSTEM, p->cxx_aware, 0);
  }
     }
 }
    }
  for (p = cpp_include_defaults; p->fname; p++)
    {
      if (!p->cplusplus || cxx_stdinc)
 {
   char *str;
   if (sysroot && p->add_sysroot)
     str = concat (sysroot, p->fname, ((void *)0));
   else
     str = update_path (p->fname, p->component);
   add_path (str, SYSTEM, p->cxx_aware, 0);
 }
    }
}
static struct cpp_dir *
remove_duplicates (cpp_reader *pfile, struct cpp_dir *head,
     struct cpp_dir *system, struct cpp_dir *join,
     int verbose)
{
  struct cpp_dir **pcur, *tmp, *cur;
  struct stat st;
  for (pcur = &head; *pcur; )
    {
      int reason = REASON_QUIET;
      cur = *pcur;
      if (stat (cur->name, &st))
 {
   if ((*__errno_location ()) != 2)
     cpp_errno (pfile, 0x03, cur->name);
   else
     {
       cpp_options *opts = cpp_get_options (pfile);
       if (opts->warn_missing_include_dirs && cur->user_supplied_p)
  cpp_errno (pfile, 0x00, cur->name);
       reason = REASON_NOENT;
     }
 }
      else if (!((((st.st_mode)) & 0170000) == (0040000)))
 cpp_error_with_line (pfile, 0x03, 0, 0,
        "%s: not a directory", cur->name);
      else
 {
   (cur->ino) = (st.st_ino);
   cur->dev = st.st_dev;
   reason = REASON_DUP_SYS;
   for (tmp = system; tmp; tmp = tmp->next)
     if (((tmp->ino) == (cur->ino)) && tmp->dev == cur->dev)
       break;
   if (!tmp)
     {
       reason = REASON_DUP;
       for (tmp = head; tmp != cur; tmp = tmp->next)
  if (((cur->ino) == (tmp->ino)) && cur->dev == tmp->dev)
    break;
       if (tmp == cur
    && !(cur->next == ((void *)0) && join
         && ((cur->ino) == (join->ino))
         && cur->dev == join->dev))
  {
    pcur = &cur->next;
    continue;
  }
     }
 }
      *pcur = cur->next;
      free_path (cur, verbose ? reason: REASON_QUIET);
    }
  *pcur = join;
  return head;
}
static void
merge_include_chains (cpp_reader *pfile, int verbose)
{
  if (heads[SYSTEM])
    tails[SYSTEM]->next = heads[AFTER];
  else
    heads[SYSTEM] = heads[AFTER];
  heads[SYSTEM] = remove_duplicates (pfile, heads[SYSTEM], 0, 0, verbose);
  heads[BRACKET] = remove_duplicates (pfile, heads[BRACKET], heads[SYSTEM],
          heads[SYSTEM], verbose);
  heads[QUOTE] = remove_duplicates (pfile, heads[QUOTE], heads[SYSTEM],
        heads[BRACKET], verbose);
  if (verbose)
    {
      struct cpp_dir *p;
      fprintf (stderr, "#include \"...\" search starts here:\n");
      for (p = heads[QUOTE];; p = p->next)
 {
   if (p == heads[BRACKET])
     fprintf (stderr, "#include <...> search starts here:\n");
   if (!p)
     break;
   fprintf (stderr, " %s\n", p->name);
 }
      fprintf (stderr, "End of search list.\n");
    }
}
void
split_quote_chain (void)
{
  heads[QUOTE] = heads[BRACKET];
  tails[QUOTE] = tails[BRACKET];
  heads[BRACKET] = ((void *)0);
  tails[BRACKET] = ((void *)0);
  quote_ignores_source_dir = 1;
}
void
add_cpp_dir_path (cpp_dir *p, int chain)
{
  if (tails[chain])
    tails[chain]->next = p;
  else
    heads[chain] = p;
  tails[chain] = p;
}
void
add_path (char *path, int chain, int cxx_aware, unsigned char user_supplied_p)
{
  cpp_dir *p;
  p = xmalloc (sizeof (cpp_dir));
  p->next = ((void *)0);
  p->name = path;
  if (chain == SYSTEM || chain == AFTER)
    p->sysp = 1 + !cxx_aware;
  else
    p->sysp = 0;
  p->construct = 0;
  p->user_supplied_p = user_supplied_p;
  add_cpp_dir_path (p, chain);
}
void
register_include_chains (cpp_reader *pfile, const char *sysroot,
    const char *iprefix, int stdinc, int cxx_stdinc,
    int verbose)
{
  static const char *const lang_env_vars[] =
    { "C_INCLUDE_PATH", "CPLUS_INCLUDE_PATH",
      "OBJC_INCLUDE_PATH", "OBJCPLUS_INCLUDE_PATH" };
  cpp_options *cpp_opts = cpp_get_options (pfile);
  size_t idx = (cpp_opts->objc ? 2: 0);
  if (cpp_opts->cplusplus)
    idx++;
  else
    cxx_stdinc = 0;
  add_env_var_paths ("CPATH", BRACKET);
  add_env_var_paths (lang_env_vars[idx], SYSTEM);
  if (stdinc)
    add_standard_paths (sysroot, iprefix, cxx_stdinc);
  target_c_incpath.extra_includes (stdinc);
  merge_include_chains (pfile, verbose);
  cpp_set_include_chains (pfile, heads[QUOTE], heads[BRACKET],
     quote_ignores_source_dir);
}
static void hook_void_int2(int u ) { }
struct target_c_incpath_s target_c_incpath = { hook_void_int2 };
const struct default_include cpp_include_defaults[]
= {
    { "/usr/local/lib/gcc/i686-pc-linux-gnu/3.4.0/../../../../include/c++/3.4.0", "G++", 1, 1, 0 },
    { "/usr/local/lib/gcc/i686-pc-linux-gnu/3.4.0/../../../../include/c++/3.4.0/i686-pc-linux-gnu", "G++", 1, 1, 0 },
    { "/usr/local/lib/gcc/i686-pc-linux-gnu/3.4.0/../../../../include/c++/3.4.0/backward", "G++", 1, 1, 0 },
    { "/usr/local/include", 0, 0, 1, 1 },
    { "/scratch2/smcc-extras/build/gcc-cvs/install/include", 0, 0, 1, 0 },
    { "/usr/local/lib/gcc/i686-pc-linux-gnu/3.4.0/include", "GCC", 0, 0, 0 },
    { "/usr/local/lib/gcc/i686-pc-linux-gnu/3.4.0/../../../../i686-pc-linux-gnu/include", "BINUTILS", 0, 1, 0 },
    { "/usr/include", 0, 0, 0, 1 },
    { 0, 0, 0, 0, 0 }
  };
const char cpp_GCC_INCLUDE_DIR[] = "/usr/local/lib/gcc/i686-pc-linux-gnu/3.4.0/include";
const size_t cpp_GCC_INCLUDE_DIR_len = sizeof "/usr/local/lib/gcc/i686-pc-linux-gnu/3.4.0/include" - 8;
const char *cpp_SYSROOT = ((void *)0);
static struct
{
  FILE *outf;
  const cpp_token *prev;
  const cpp_token *source;
  int src_line;
  unsigned char printed;
  unsigned char first_time;
} print;
static void scan_translation_unit (cpp_reader *);
static void scan_translation_unit_trad (cpp_reader *);
static void account_for_newlines (const unsigned char *, size_t);
static int dump_macro (cpp_reader *, cpp_hashnode *, void *);
static void print_line (source_location, const char *);
static void maybe_print_line (source_location);
static void cb_line_change_ppo (cpp_reader *, const cpp_token *, int);
static void cb_define_ppo (cpp_reader *, source_location, cpp_hashnode *);
static void cb_undef_ppo (cpp_reader *, source_location, cpp_hashnode *);
static void cb_include (cpp_reader *, source_location, const unsigned char *,
   const char *, int);
static void cb_ident_ppo (cpp_reader *, source_location, const cpp_string *);
static void cb_def_pragma_ppo (cpp_reader *, source_location);
static void cb_read_pch (cpp_reader *pfile, const char *name,
    int fd, const char *orig_name);
void
preprocess_file (cpp_reader *pfile)
{
  if (flag_no_output)
    {
      while (pfile->buffer->prev)
 cpp_scan_nooutput (pfile);
      cpp_scan_nooutput (pfile);
    }
  else if (cpp_get_options (pfile)->traditional)
    scan_translation_unit_trad (pfile);
  else
    scan_translation_unit (pfile);
  if (flag_dump_macros == 'M')
    cpp_forall_identifiers (pfile, dump_macro, ((void *)0));
  if (print.printed)
    putc_unlocked ('\n', print.outf);
}
void
init_pp_output (FILE *out_stream)
{
  cpp_callbacks *cb = cpp_get_callbacks (parse_in);
  if (!flag_no_output)
    {
      cb->line_change = cb_line_change_ppo;
      if (cpp_get_options (parse_in)->lang != CLK_ASM)
 {
   cb->ident = cb_ident_ppo;
   cb->def_pragma = cb_def_pragma_ppo;
 }
    }
  if (flag_dump_includes)
    cb->include = cb_include;
  if (flag_pch_preprocess)
    {
      cb->valid_pch = c_common_valid_pch;
      cb->read_pch = cb_read_pch;
    }
  if (flag_dump_macros == 'N' || flag_dump_macros == 'D')
    {
      cb->define = cb_define_ppo;
      cb->undef = cb_undef_ppo;
    }
  print.src_line = -1;
  print.printed = 0;
  print.prev = 0;
  print.outf = out_stream;
  print.first_time = 1;
}
static void
scan_translation_unit (cpp_reader *pfile)
{
  unsigned char avoid_paste = 0;
  print.source = ((void *)0);
  for (;;)
    {
      const cpp_token *token = cpp_get_token (pfile);
      if (token->type == CPP_PADDING)
 {
   avoid_paste = 1;
   if (print.source == ((void *)0)
       || (!(print.source->flags & (1 << 0))
    && token->val.source == ((void *)0)))
     print.source = token->val.source;
   continue;
 }
      if (token->type == CPP_EOF)
 break;
      if (avoid_paste)
 {
   if (print.source == ((void *)0))
     print.source = token;
   if (print.source->flags & (1 << 0)
       || (print.prev
    && cpp_avoid_paste (pfile, print.prev, token))
       || (print.prev == ((void *)0) && token->type == CPP_HASH))
     putc_unlocked (' ', print.outf);
 }
      else if (token->flags & (1 << 0))
 putc_unlocked (' ', print.outf);
      avoid_paste = 0;
      print.source = ((void *)0);
      print.prev = token;
      cpp_output_token (token, print.outf);
      if (token->type == CPP_COMMENT)
 account_for_newlines (token->val.str.text, token->val.str.len);
    }
}
static void
account_for_newlines (const unsigned char *str, size_t len)
{
  while (len--)
    if (*str++ == '\n')
      print.src_line++;
}
static void
scan_translation_unit_trad (cpp_reader *pfile)
{
  while (_cpp_read_logical_line_trad (pfile))
    {
      size_t len = pfile->out.cur - pfile->out.base;
      maybe_print_line (pfile->out.first_line);
      fwrite_unlocked (pfile->out.base, 1, len, print.outf);
      print.printed = 1;
      if (!((pfile)->opts.discard_comments))
 account_for_newlines (pfile->out.base, len);
    }
}
static void
maybe_print_line (source_location src_loc)
{
  const struct line_map *map = linemap_lookup (&line_table, src_loc);
  int src_line = ((((src_loc) - (map)->start_location) >> (map)->column_bits) + (map)->to_line);
  if (print.printed)
    {
      putc_unlocked ('\n', print.outf);
      print.src_line++;
      print.printed = 0;
    }
  if (src_line >= print.src_line && src_line < print.src_line + 8)
    {
      while (src_line > print.src_line)
 {
   putc_unlocked ('\n', print.outf);
   print.src_line++;
 }
    }
  else
    print_line (src_loc, "");
}
static void
print_line (source_location src_loc, const char *special_flags)
{
  if (print.printed)
    putc_unlocked ('\n', print.outf);
  print.printed = 0;
  if (!flag_no_line_commands)
    {
      const struct line_map *map = linemap_lookup (&line_table, src_loc);
      size_t to_file_len = strlen (map->to_file);
      unsigned char *to_file_quoted = C_alloca(to_file_len * 4 + 1);
      unsigned char *p;
      print.src_line = ((((src_loc) - (map)->start_location) >> (map)->column_bits) + (map)->to_line);
      p = cpp_quote_string1 (to_file_quoted,
       (unsigned char *)map->to_file, to_file_len);
      *p = '\0';
      fprintf (print.outf, "# %u \"%s\"%s", print.src_line,
        to_file_quoted, special_flags);
      if (map->sysp == 2)
 fputs_unlocked (" 3 4", print.outf);
      else if (map->sysp == 1)
 fputs_unlocked (" 3", print.outf);
      putc_unlocked ('\n', print.outf);
    }
}
static void
cb_line_change_ppo (cpp_reader *pfile, const cpp_token *token,
      int parsing_args)
{
  source_location src_loc = token->src_loc;
  if (token->type == CPP_EOF || parsing_args)
    return;
  maybe_print_line (src_loc);
  print.prev = 0;
  print.source = 0;
  if (!((pfile)->opts.traditional))
    {
      const struct line_map *map = linemap_lookup (&line_table, src_loc);
      int spaces = (((src_loc) - (map)->start_location) & ((1 << (map)->column_bits) - 1)) - 2;
      print.printed = 1;
      while (-- spaces >= 0)
 putc_unlocked (' ', print.outf);
    }
}
static void
cb_ident_ppo (cpp_reader *pfile , source_location line,
       const cpp_string *str)
{
  maybe_print_line (line);
  fprintf (print.outf, "#ident \"%s\"\n", str->text);
  print.src_line++;
}
static void
cb_define_ppo (cpp_reader *pfile, source_location line, cpp_hashnode *node)
{
  maybe_print_line (line);
  fputs_unlocked ("#define ", print.outf);
  if (flag_dump_macros == 'D')
    fputs_unlocked ((const char *) cpp_macro_definition (pfile, node), print.outf)
               ;
  else
    fputs_unlocked ((const char *) ((&(node)->ident)->str), print.outf);
  putc_unlocked ('\n', print.outf);
  print.src_line++;
}
static void
cb_undef_ppo (cpp_reader *pfile , source_location line,
       cpp_hashnode *node)
{
  maybe_print_line (line);
  fprintf (print.outf, "#undef %s\n", ((&(node)->ident)->str));
  print.src_line++;
}
static void
cb_include (cpp_reader *pfile , source_location line,
     const unsigned char *dir, const char *header1, int angle_brackets)
{
  maybe_print_line (line);
  if (angle_brackets)
    fprintf (print.outf, "#%s <%s>\n", dir, header1);
  else
    fprintf (print.outf, "#%s \"%s\"\n", dir, header1);
  print.src_line++;
}
void
pp_dir_change (cpp_reader *pfile , const char *dir)
{
  size_t to_file_len = strlen (dir);
  unsigned char *to_file_quoted = C_alloca(to_file_len * 4 + 1);
  unsigned char *p;
  p = cpp_quote_string1 (to_file_quoted, (unsigned char *) dir, to_file_len);
  *p = '\0';
  fprintf (print.outf, "# 1 \"%s//\"\n", to_file_quoted);
}
void
pp_file_change (const struct line_map *map)
{
  const char *flags = "";
  if (flag_no_line_commands || flag_no_output)
    return;
  if (map != ((void *)0))
    {
      if (print.first_time)
 {
   if (!cpp_get_options (parse_in)->preprocessed)
     print_line (map->start_location, flags);
   print.first_time = 0;
 }
      else
 {
   if (map->reason == LC_ENTER)
     {
       const struct line_map *from = (&(&line_table)->maps[(map)->included_from]);
       maybe_print_line (((((from)[1].start_location - 1 - (from)->start_location) & ~((1 << (from)->column_bits) - 1)) + (from)->start_location));
     }
   if (map->reason == LC_ENTER)
     flags = " 1";
   else if (map->reason == LC_LEAVE)
     flags = " 2";
   print_line (map->start_location, flags);
 }
    }
}
static void
cb_def_pragma_ppo (cpp_reader *pfile, source_location line)
{
  maybe_print_line (line);
  fputs_unlocked ("#pragma ", print.outf);
  cpp_output_line (pfile, print.outf);
  print.src_line++;
}
static int
dump_macro (cpp_reader *pfile, cpp_hashnode *node, void *v )
{
  if (node->type == NT_MACRO && !(node->flags & (1 << 2)))
    {
      fputs_unlocked ("#define ", print.outf);
      fputs_unlocked ((const char *) cpp_macro_definition (pfile, node), print.outf)
                 ;
      putc_unlocked ('\n', print.outf);
      print.src_line++;
    }
  return 1;
}
static void
cb_read_pch (cpp_reader *pfile, const char *name,
      int fd, const char *orig_name )
{
  c_common_read_pch (pfile, name, fd, orig_name);
  fprintf (print.outf, "#pragma GCC pch_preprocess \"%s\"\n", name);
  print.src_line++;
}
void builtin_define_std (const char *) ;
static void builtin_define_with_value_n (const char *, const char *,
      size_t);
static void builtin_define_with_int_value (const char *, long);
static void builtin_define_with_hex_fp_value (const char *, tree,
           int, const char *,
           const char *);
static void builtin_define_type_max (const char *, tree, int);
static void builtin_define_type_precision (const char *, tree);
static void builtin_define_float_constants (const char *, const char *,
         tree);
static void define__GNUC__ (void);
static void
builtin_define_type_precision (const char *name, tree type)
{
  builtin_define_with_int_value (name, ((type)->type.precision));
}
static void
builtin_define_float_constants (const char *name_prefix, const char *fp_suffix, tree type)
{
  const double log10_2 = .30102999566398119521;
  double log10_b;
  const struct real_format *fmt;
  char name[64], buf[128];
  int dig, min_10_exp, max_10_exp;
  int decimal_dig;
  fmt = (real_format_for_mode[(((type)->type.mode)) - MIN_MODE_FLOAT]);
  if (type == global_trees[TI_FLOAT_TYPE])
    builtin_define_with_int_value ("__FLT_RADIX__", fmt->b);
  log10_b = log10_2 * fmt->log2_b;
  sprintf (name, "__%s_MANT_DIG__", name_prefix);
  builtin_define_with_int_value (name, fmt->p);
  dig = (fmt->p - 1) * log10_b;
  sprintf (name, "__%s_DIG__", name_prefix);
  builtin_define_with_int_value (name, dig);
  sprintf (name, "__%s_MIN_EXP__", name_prefix);
  sprintf (buf, "(%d)", fmt->emin);
  builtin_define_with_value (name, buf, 0);
  min_10_exp = (fmt->emin - 1) * log10_b;
  sprintf (name, "__%s_MIN_10_EXP__", name_prefix);
  sprintf (buf, "(%d)", min_10_exp);
  builtin_define_with_value (name, buf, 0);
  sprintf (name, "__%s_MAX_EXP__", name_prefix);
  builtin_define_with_int_value (name, fmt->emax);
  max_10_exp = fmt->emax * log10_b;
  sprintf (name, "__%s_MAX_10_EXP__", name_prefix);
  builtin_define_with_int_value (name, max_10_exp);
  {
    double d_decimal_dig = 1 + fmt->p * log10_b;
    decimal_dig = d_decimal_dig;
    if (decimal_dig < d_decimal_dig)
      decimal_dig++;
  }
  if (type == global_trees[TI_LONG_DOUBLE_TYPE])
    builtin_define_with_int_value ("__DECIMAL_DIG__", decimal_dig);
  {
    int i, n;
    char *p;
    strcpy (buf, "0x0.");
    n = fmt->p * fmt->log2_b;
    for (i = 0, p = buf + 4; i + 3 < n; i += 4)
      *p++ = 'f';
    if (i < n)
      *p++ = "08ce"[n - i];
    sprintf (p, "p%d", fmt->emax * fmt->log2_b);
    if (fmt->pnan < fmt->p)
      {
 buf[4 + fmt->pnan / 4] = "7bde"[fmt->pnan % 4];
      }
  }
  sprintf (name, "__%s_MAX__", name_prefix);
  builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix);
  sprintf (name, "__%s_MIN__", name_prefix);
  sprintf (buf, "0x1p%d", (fmt->emin - 1) * fmt->log2_b);
  builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix);
  sprintf (name, "__%s_EPSILON__", name_prefix);
  sprintf (buf, "0x1p%d", (1 - fmt->p) * fmt->log2_b);
  builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix);
  sprintf (name, "__%s_DENORM_MIN__", name_prefix);
  if (fmt->has_denorm)
    {
      sprintf (buf, "0x1p%d", (fmt->emin - fmt->p) * fmt->log2_b);
      builtin_define_with_hex_fp_value (name, type, decimal_dig,
     buf, fp_suffix);
    }
  else
    {
      sprintf (buf, "0.0%s", fp_suffix);
      builtin_define_with_value (name, buf, 0);
    }
  sprintf (name, "__%s_HAS_INFINITY__", name_prefix);
  builtin_define_with_int_value (name,
     ((mode_class[((type)->type.mode)] == MODE_FLOAT || mode_class[((type)->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((type)->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0));
  sprintf (name, "__%s_HAS_QUIET_NAN__", name_prefix);
  builtin_define_with_int_value (name, ((mode_class[((type)->type.mode)] == MODE_FLOAT || mode_class[((type)->type.mode)] == MODE_COMPLEX_FLOAT || mode_class[((type)->type.mode)] == MODE_VECTOR_FLOAT) && 1 == 1 && !0));
}
static void
define__GNUC__ (void)
{
  const char *q, *v = version_string1;
  while (*v && ! (_sch_istable[(*v) & 0xff] & (unsigned short)(_sch_isdigit)))
    v++;
  if (!*v || (v > version_string1 && v[-1] != '-'))
    fancy_abort ("gcc.c", 744312, "?");
  q = v;
  while ((_sch_istable[(*v) & 0xff] & (unsigned short)(_sch_isdigit)))
    v++;
  builtin_define_with_value_n ("__GNUC__", q, v - q);
  if ((c_language & clk_cxx))
    builtin_define_with_value_n ("__GNUG__", q, v - q);
  if (*v != '.' || !(_sch_istable[(v[1]) & 0xff] & (unsigned short)(_sch_isdigit)))
    fancy_abort ("gcc.c", 744322, "?");
  q = ++v;
  while ((_sch_istable[(*v) & 0xff] & (unsigned short)(_sch_isdigit)))
    v++;
  builtin_define_with_value_n ("__GNUC_MINOR__", q, v - q);
  if (*v == '.')
    {
      if (!(_sch_istable[(v[1]) & 0xff] & (unsigned short)(_sch_isdigit)))
 fancy_abort ("gcc.c", 744331, "?");
      q = ++v;
      while ((_sch_istable[(*v) & 0xff] & (unsigned short)(_sch_isdigit)))
 v++;
      builtin_define_with_value_n ("__GNUC_PATCHLEVEL__", q, v - q);
    }
  else
    builtin_define_with_value_n ("__GNUC_PATCHLEVEL__", "0", 1);
  if (*v && *v != ' ' && *v != '-')
    fancy_abort ("gcc.c", 744341, "?");
}
void
c_cpp_builtins (cpp_reader *pfile)
{
  if (flag_undef)
    return;
  define__GNUC__ ();
  c_stddef_cpp_builtins ();
  if ((c_language & clk_cxx))
    {
      if (1)
 cpp_define (pfile, "__GXX_WEAK__=1");
      else
 cpp_define (pfile, "__GXX_WEAK__=0");
      if (warn_deprecated)
 cpp_define (pfile, "__DEPRECATED");
    }
  if (flag_exceptions)
    cpp_define (pfile, "__EXCEPTIONS");
  if (flag_abi_version == 0)
    builtin_define_with_int_value ("__GXX_ABI_VERSION", 999999);
  else if (flag_abi_version == 1)
    builtin_define_with_int_value ("__GXX_ABI_VERSION", 102);
  else
    builtin_define_with_int_value ("__GXX_ABI_VERSION",
       1000 + flag_abi_version);
  if (0)
    cpp_define (pfile, "__USING_SJLJ_EXCEPTIONS__");
  builtin_define_type_max ("__SCHAR_MAX__", integer_types[itk_signed_char], 0);
  builtin_define_type_max ("__SHRT_MAX__", integer_types[itk_short], 0);
  builtin_define_type_max ("__INT_MAX__", integer_types[itk_int], 0);
  builtin_define_type_max ("__LONG_MAX__", integer_types[itk_long], 1);
  builtin_define_type_max ("__LONG_LONG_MAX__", integer_types[itk_long_long], 2);
  builtin_define_type_max ("__WCHAR_MAX__", c_global_trees[CTI_WCHAR_TYPE], 0);
  builtin_define_type_precision ("__CHAR_BIT__", integer_types[itk_char]);
  builtin_define_with_int_value ("__FLT_EVAL_METHOD__",
     (((ix86_fpmath & FPMATH_SSE) && (ix86_fpmath & FPMATH_387)) ? -1 : ((ix86_fpmath & FPMATH_SSE) != 0) ? 0 : 2));
  builtin_define_float_constants ("FLT", "F", global_trees[TI_FLOAT_TYPE]);
  builtin_define_float_constants ("DBL", "", global_trees[TI_DOUBLE_TYPE]);
  builtin_define_float_constants ("LDBL", "L", global_trees[TI_LONG_DOUBLE_TYPE]);
  builtin_define_with_value ("__REGISTER_PREFIX__", "", 0);
  builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0);
  builtin_define_with_value ("__VERSION__", version_string1, 1);
  if (((integer_types[itk_long])->type.precision) == 64
      && (8 * (0 ? 8 : 4)) == 64
      && ((integer_types[itk_int])->type.precision) == 32)
    {
      cpp_define (pfile, "_LP64");
      cpp_define (pfile, "__LP64__");
    }
  if (optimize_size)
    cpp_define (pfile, "__OPTIMIZE_SIZE__");
  if (optimize)
    cpp_define (pfile, "__OPTIMIZE__");
  if (fast_math_flags_set_p ())
    cpp_define (pfile, "__FAST_MATH__");
  if (flag_really_no_inline)
    cpp_define (pfile, "__NO_INLINE__");
  if (flag_signaling_nans)
    cpp_define (pfile, "__SUPPORT_SNAN__");
  if (flag_finite_math_only)
    cpp_define (pfile, "__FINITE_MATH_ONLY__=1");
  else
    cpp_define (pfile, "__FINITE_MATH_ONLY__=0");
  if (flag_iso)
    cpp_define (pfile, "__STRICT_ANSI__");
  if (!flag_signed_char)
    cpp_define (pfile, "__CHAR_UNSIGNED__");
  if ((c_language & clk_cxx) && ((c_global_trees[CTI_WCHAR_TYPE])->common.unsigned_flag))
    cpp_define (pfile, "__WCHAR_UNSIGNED__");
  if ((c_language & clk_objc) && flag_next_runtime)
    cpp_define (pfile, "__NEXT_RUNTIME__");
  if (flag_mudflap || targetm.handle_pragma_redefine_extname)
    cpp_define (pfile, "__PRAGMA_REDEFINE_EXTNAME");
  if (targetm.handle_pragma_extern_prefix)
    cpp_define (pfile, "__PRAGMA_EXTERN_PREFIX");
  do { size_t arch_len = strlen (ix86_arch_string1); size_t tune_len = strlen (ix86_tune_string1); int last_arch_char = ix86_arch_string1[arch_len - 1]; int last_tune_char = ix86_tune_string1[tune_len - 1]; if (0) { cpp_assert (pfile, "cpu=x86_64"); cpp_assert (pfile, "machine=x86_64"); cpp_define (pfile, "__amd64"); cpp_define (pfile, "__amd64__"); cpp_define (pfile, "__x86_64"); cpp_define (pfile, "__x86_64__"); } else { cpp_assert (pfile, "cpu=i386"); cpp_assert (pfile, "machine=i386"); builtin_define_std ("i386"); } if ((ix86_tune == PROCESSOR_I386)) cpp_define (pfile, "__tune_i386__"); else if ((ix86_tune == PROCESSOR_I486)) cpp_define (pfile, "__tune_i486__"); else if ((ix86_tune == PROCESSOR_PENTIUM)) { cpp_define (pfile, "__tune_i586__"); cpp_define (pfile, "__tune_pentium__"); if (last_tune_char == 'x') cpp_define (pfile, "__tune_pentium_mmx__"); } else if ((ix86_tune == PROCESSOR_PENTIUMPRO)) { cpp_define (pfile, "__tune_i686__"); cpp_define (pfile, "__tune_pentiumpro__"); switch (last_tune_char) { case '3': cpp_define (pfile, "__tune_pentium3__"); case '2': cpp_define (pfile, "__tune_pentium2__"); break; } } else if ((ix86_tune == PROCESSOR_K6)) { cpp_define (pfile, "__tune_k6__"); if (last_tune_char == '2') cpp_define (pfile, "__tune_k6_2__"); else if (last_tune_char == '3') cpp_define (pfile, "__tune_k6_3__"); } else if ((ix86_tune == PROCESSOR_ATHLON)) { cpp_define (pfile, "__tune_athlon__"); if (last_tune_char != 'n') cpp_define (pfile, "__tune_athlon_sse__"); } else if ((ix86_tune == PROCESSOR_K8)) cpp_define (pfile, "__tune_k8__"); else if ((ix86_tune == PROCESSOR_PENTIUM4)) cpp_define (pfile, "__tune_pentium4__"); else if ((ix86_tune == PROCESSOR_NOCONA)) cpp_define (pfile, "__tune_nocona__"); if (((target_flags & 0x00002000) != 0)) cpp_define (pfile, "__MMX__"); if (((target_flags & 0x00020000) != 0)) cpp_define (pfile, "__3dNOW__"); if (((target_flags & 0x00040000) != 0)) cpp_define (pfile, "__3dNOW_A__"); if (((target_flags & 0x00004000) != 0)) cpp_define (pfile, "__SSE__"); if (((target_flags & 0x00008000) != 0)) cpp_define (pfile, "__SSE2__"); if (((target_flags & 0x00010000) != 0)) cpp_define (pfile, "__SSE3__"); if (((ix86_fpmath & FPMATH_SSE) != 0) && ((target_flags & 0x00004000) != 0)) cpp_define (pfile, "__SSE_MATH__"); if (((ix86_fpmath & FPMATH_SSE) != 0) && ((target_flags & 0x00008000) != 0)) cpp_define (pfile, "__SSE2_MATH__"); if (ix86_arch == PROCESSOR_I486) { cpp_define (pfile, "__i486"); cpp_define (pfile, "__i486__"); } else if (ix86_arch == PROCESSOR_PENTIUM) { cpp_define (pfile, "__i586"); cpp_define (pfile, "__i586__"); cpp_define (pfile, "__pentium"); cpp_define (pfile, "__pentium__"); if (last_arch_char == 'x') cpp_define (pfile, "__pentium_mmx__"); } else if (ix86_arch == PROCESSOR_PENTIUMPRO) { cpp_define (pfile, "__i686"); cpp_define (pfile, "__i686__"); cpp_define (pfile, "__pentiumpro"); cpp_define (pfile, "__pentiumpro__"); } else if (ix86_arch == PROCESSOR_K6) { cpp_define (pfile, "__k6"); cpp_define (pfile, "__k6__"); if (last_arch_char == '2') cpp_define (pfile, "__k6_2__"); else if (last_arch_char == '3') cpp_define (pfile, "__k6_3__"); } else if (ix86_arch == PROCESSOR_ATHLON) { cpp_define (pfile, "__athlon"); cpp_define (pfile, "__athlon__"); if (last_arch_char != 'n') cpp_define (pfile, "__athlon_sse__"); } else if (ix86_arch == PROCESSOR_K8) { cpp_define (pfile, "__k8"); cpp_define (pfile, "__k8__"); } else if (ix86_arch == PROCESSOR_PENTIUM4) { cpp_define (pfile, "__pentium4"); cpp_define (pfile, "__pentium4__"); } else if (ix86_arch == PROCESSOR_NOCONA) { cpp_define (pfile, "__nocona"); cpp_define (pfile, "__nocona__"); } } while (0);
  do { do { cpp_define (pfile, "__gnu_linux__"); builtin_define_std ("linux"); builtin_define_std ("unix"); cpp_assert (pfile, "system=linux"); cpp_assert (pfile, "system=unix"); cpp_assert (pfile, "system=posix"); } while (0); if (flag_pic) { cpp_define (pfile, "__PIC__"); cpp_define (pfile, "__pic__"); } } while (0);
  do { cpp_define (pfile, "__ELF__"); } while (0);
}
void
builtin_define_std (const char *macro)
{
  size_t len = strlen (macro);
  char *buff = C_alloca(len + 5);
  char *p = buff + 2;
  char *q = p + len;
  memcpy (p, macro, len + 1);
  if (!( *p == '_' && (p[1] == '_' || (_sch_istable[(p[1]) & 0xff] & (unsigned short)(_sch_isupper)))))
    {
      if (*p != '_')
 *--p = '_';
      if (p[1] != '_')
 *--p = '_';
    }
  cpp_define (parse_in, p);
  if (p != buff + 2)
    {
      if (q[-1] != '_')
 *q++ = '_';
      if (q[-2] != '_')
 *q++ = '_';
      *q = '\0';
      cpp_define (parse_in, p);
      if (!flag_iso)
 cpp_define (parse_in, macro);
    }
}
void
builtin_define_with_value (const char *macro, const char *expansion, int is_str)
{
  char *buf;
  size_t mlen = strlen (macro);
  size_t elen = strlen (expansion);
  size_t extra = 2;
  if (is_str)
    extra += 2;
  buf = C_alloca(mlen + elen + extra);
  if (is_str)
    sprintf (buf, "%s=\"%s\"", macro, expansion);
  else
    sprintf (buf, "%s=%s", macro, expansion);
  cpp_define (parse_in, buf);
}
static void
builtin_define_with_value_n (const char *macro, const char *expansion, size_t elen)
{
  char *buf;
  size_t mlen = strlen (macro);
  buf = C_alloca(mlen + elen + 2);
  memcpy (buf, macro, mlen);
  buf[mlen] = '=';
  memcpy (buf + mlen + 1, expansion, elen);
  buf[mlen + elen + 1] = '\0';
  cpp_define (parse_in, buf);
}
static void
builtin_define_with_int_value (const char *macro, long value1)
{
  char *buf;
  size_t mlen = strlen (macro);
  size_t vlen = 18;
  size_t extra = 2;
  buf = C_alloca(mlen + vlen + extra);
  memcpy (buf, macro, mlen);
  buf[mlen] = '=';
  sprintf (buf + mlen + 1, "%ld", value1);
  cpp_define (parse_in, buf);
}
static void
builtin_define_with_hex_fp_value (const char *macro,
      tree type , int digits,
      const char *hex_str, const char *fp_suffix)
{
  struct real_value real;
  char dec_str[64], buf[256];
  real_from_string1 (&real, hex_str);
  real_to_decimal (dec_str, &real, sizeof (dec_str), digits, 0);
  sprintf (buf, "%s=%s%s", macro, dec_str, fp_suffix);
  cpp_define (parse_in, buf);
}
static void
builtin_define_type_max (const char *macro, tree type, int is_long)
{
  static const char *const values[]
    = { "127", "255",
 "32767", "65535",
 "2147483647", "4294967295",
 "9223372036854775807", "18446744073709551615",
 "170141183460469231731687303715884105727",
 "340282366920938463463374607431768211455" };
  static const char *const suffixes[] = { "", "U", "L", "UL", "LL", "ULL" };
  const char *value1, *suffix;
  char *buf;
  size_t idx;
  switch (((type)->type.precision))
    {
    case 8: idx = 0; break;
    case 16: idx = 2; break;
    case 32: idx = 4; break;
    case 64: idx = 6; break;
    case 128: idx = 8; break;
    default: fancy_abort ("gcc.c", 744638, "?");
    }
  value1 = values[idx + ((type)->common.unsigned_flag)];
  suffix = suffixes[is_long * 2 + ((type)->common.unsigned_flag)];
  buf = C_alloca(strlen (macro) + 1 + strlen (value1) + strlen (suffix) + 1);
  sprintf (buf, "%s=%s%s", macro, value1, suffix);
  cpp_define (parse_in, buf);
}
static const char *std_prefix = "/scratch2/smcc-extras/build/gcc-cvs/install";
static const char *get_key_value (char *);
static char *translate_name (char *);
static char *save_string12 (const char *, int);
static void tr (char *, int, int);
static const char *
get_key_value (char *key)
{
  const char *prefix = 0;
  char *temp = 0;
  if (prefix == 0)
    prefix = getenv (temp = concat (key, "_ROOT", ((void *)0)));
  if (prefix == 0)
    prefix = std_prefix;
  if (temp)
    free (temp);
  return prefix;
}
static char *
save_string12 (const char *s, int len)
{
  char *result = xmalloc (len + 1);
  memcpy (result, s, len);
  result[len] = 0;
  return result;
}
static char *
translate_name (char *name)
{
  char code;
  char *key, *old_name;
  const char *prefix;
  int keylen;
  for (;;)
    {
      code = name[0];
      if (code != '@' && code != '$')
 break;
      for (keylen = 0;
    (name[keylen + 1] != 0 && !((name[keylen + 1]) == '/'));
    keylen++)
 ;
      key = C_alloca(keylen + 1);
      strncpy (key, &name[1], keylen);
      key[keylen] = 0;
      if (code == '@')
 {
   prefix = get_key_value (key);
   if (prefix == 0)
     prefix = std_prefix;
 }
      else
 prefix = getenv (key);
      if (prefix == 0)
 prefix = "/scratch2/smcc-extras/build/gcc-cvs/install";
      old_name = name;
      name = concat (prefix, &name[keylen + 1], ((void *)0));
      free (old_name);
    }
  return name;
}
static void
tr (char *string1, int c1, int c2)
{
  do
    {
      if (*string1 == c1)
 *string1 = c2;
    }
  while (*string1++);
}
char *
update_path (const char *path, const char *key)
{
  char *result, *p;
  const int len = strlen (std_prefix);
  if (! strncmp (path, std_prefix, len)
      && (((path[len]) == '/')
          || path[len] == '\0')
      && key != 0)
    {
      unsigned char free_key = 0;
      if (key[0] != '$')
 {
   key = concat ("@", key, ((void *)0));
   free_key = 1;
 }
      result = concat (key, &path[len], ((void *)0));
      if (free_key)
 free ((char *) key);
      result = translate_name (result);
    }
  else
    result = xstrdup (path);
  p = result;
  while (1)
    {
      char *src, *dest;
      p = strchr (p, '.');
      if (p == ((void *)0))
 break;
      if (p[1] == '.'
   && ((p[2]) == '/')
   && (p != result && ((p[-1]) == '/')))
 {
   *p = 0;
   if (!0 && access (result, 1) == 0)
     {
       *p = '.';
       break;
     }
   else
     {
       dest = p;
       do
  {
    --dest;
    while (dest != result && ((*dest) == '/'))
      --dest;
    while (dest != result && !((dest[-1]) == '/'))
      --dest;
  }
       while (dest != result && *dest == '.');
       if (*dest == '.' || ((*dest) == '/'))
  {
    *p = '.';
    break;
  }
       src = p + 3;
       while (((*src) == '/'))
  ++src;
       p = dest;
       while ((*dest++ = *src++) != 0)
  ;
     }
 }
      else
 ++p;
    }
  if ('/' != '/')
    tr (result, '/', '/');
  return result;
}
void
set_std_prefix (const char *prefix, int len)
{
  std_prefix = save_string12 (prefix, len);
}
static unsigned char c_tree_printer (pretty_printer *, text_info *);
unsigned char
c_missing_noreturn_ok_p (tree decl)
{
  return flag_hosted && ((decl_assembler_name (decl)) == global_trees[TI_MAIN_IDENTIFIER]);
}
int
c_disregard_inline_limits (tree fn)
{
  if (lookup_attribute ("always_inline", ((fn)->decl.attributes)) != ((void *)0))
    return 1;
  return (!flag_really_no_inline && ((fn)->decl.declared_inline_flag)
   && ((fn)->decl.external_flag));
}
int
c_cannot_inline_tree_fn (tree *fnp)
{
  tree fn = *fnp;
  tree t;
  unsigned char do_warning = (warn_inline
       && ((fn)->decl.inline_flag)
       && ((fn)->decl.declared_inline_flag)
       && !((fn)->decl.in_system_header1_flag));
  if (flag_really_no_inline
      && lookup_attribute ("always_inline", ((fn)->decl.attributes)) == ((void *)0))
    {
      if (do_warning)
 warning ("%Jfunction '%F' can never be inlined because it is suppressed using -fno-inline", fn, fn);
      goto cannot_inline;
    }
  if (!((fn)->decl.declared_inline_flag) && !targetm.binds_local_p (fn))
    {
      if (do_warning)
 warning ("%Jfunction '%F' can never be inlined because it might not be bound within this unit of translation", fn, fn);
      goto cannot_inline;
    }
  if (! function_attribute_inlinable_p (fn))
    {
      if (do_warning)
 warning ("%Jfunction '%F' can never be inlined because it uses attributes conflicting with inlining", fn, fn);
      goto cannot_inline;
    }
  if (fn == current_function_decl)
    {
      t = get_pending_sizes ();
      put_pending_sizes (t);
      if (t)
 {
   if (do_warning)
     warning ("%Jfunction '%F' can never be inlined because it has pending sizes", fn, fn);
   goto cannot_inline;
 }
    }
  if (! (! ((fn)->decl.context) || ((enum tree_code) (((fn)->decl.context))->common.code) == TRANSLATION_UNIT_DECL))
    {
      if (((fn)->decl.lang_specific)->pending_sizes)
 {
   if (do_warning)
     warning ("%Jnested function '%F' can never be inlined because it has possibly saved pending sizes", fn, fn);
   goto cannot_inline;
 }
    }
  return 0;
 cannot_inline:
  ((fn)->decl.uninlinable) = 1;
  return 1;
}
unsigned char
c_warn_unused_global_decl (tree decl)
{
  if (((enum tree_code) (decl)->common.code) == FUNCTION_DECL && ((decl)->decl.declared_inline_flag))
    return 0;
  if (((decl)->decl.in_system_header1_flag))
    return 0;
  return 1;
}
unsigned char
c_objc_common_init (void)
{
  static const enum tree_code stmt_codes[] = {
    EXPR_STMT, FOR_STMT, WHILE_STMT, DO_STMT, BREAK_STMT, CONTINUE_STMT, SWITCH_STMT
  };
  do { unsigned int i; memset (&statement_code_p, 0, sizeof (statement_code_p)); for (i = 0; i < (sizeof (stmt_codes) / sizeof ((stmt_codes)[0])); i++) statement_code_p[stmt_codes[i]] = 1; } while (0);
  c_init_decl_processing ();
  if (c_common_init () == 0)
    return 0;
  ((global_dc)->printer->format_decoder) = &c_tree_printer;
  if (mesg_implicit_function_declaration < 0)
    {
      if (flag_isoc99)
 mesg_implicit_function_declaration = flag_pedantic_errors ? 2 : 1;
      else
 mesg_implicit_function_declaration = 0;
    }
  return 1;
}
static void
build_cdtor (int method_type, tree cdtors)
{
  tree body;
  body = push_stmt_list ();
  for (; cdtors; cdtors = ((cdtors)->common.chain))
    add_stmt (build_function_call (((cdtors)->list.value1), (tree) ((void *)0)));
  body = pop_stmt_list (body);
  cgraph_build_static_cdtor (method_type, body);
}
void
c_objc_common_finish_file (void)
{
  if (pch_file)
    c_common_write_pch ();
  if (static_ctors)
    {
      build_cdtor ('I', static_ctors);
      static_ctors = 0;
    }
  if (static_dtors)
    {
      build_cdtor ('D', static_dtors);
      static_dtors = 0;
    }
  cgraph_finalize_compilation_unit ();
  cgraph_optimize ();
  if (flag_mudflap)
    mudflap_finish_file ();
}
static unsigned char
c_tree_printer (pretty_printer *pp, text_info *text)
{
  tree t = __builtin_va_arg(*text->args_ptr,_tree);
  tree name;
  const char *n = "({anonymous})";
  c_pretty_printer *cpp = (c_pretty_printer *) pp;
  pp->padding = pp_none;
  switch (*text->format_spec)
    {
    case 'D':
    case 'F':
      if (((t)->decl.name))
 n = lang_hooks.decl_printable_name (t, 2);
      break;
    case 'T':
      if ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
 name = ((t)->type.name);
      else
 fancy_abort ("gcc.c", 745238, "?");
      if (name && ((enum tree_code) (name)->common.code) == TYPE_DECL)
 {
   if (((name)->decl.name))
     pp_base_string1 ((&(cpp)->base), lang_hooks.decl_printable_name (name, 2));
   else
     (cpp)->type_id ((cpp), t);
   return 1;
 }
      else
 {
   (cpp)->type_id ((cpp), t);
   return 1;
 }
      break;
    case 'E':
      if (((enum tree_code) (t)->common.code) == IDENTIFIER_NODE)
 n = ((const char *) (t)->identifier.id.str);
      else
        return 0;
      break;
    default:
      return 0;
    }
  pp_base_string1 ((&(cpp)->base), n);
  return 1;
}
tree
c_objc_common_truthvalue_conversion (tree expr)
{
 retry:
  switch (((enum tree_code) (((expr)->common.type))->common.code))
    {
    case ARRAY_TYPE:
      expr = default_conversion (expr);
      if (((enum tree_code) (((expr)->common.type))->common.code) != ARRAY_TYPE)
 goto retry;
      error ("used array that cannot be converted to pointer where scalar is required");
      return global_trees[TI_ERROR_MARK];
    case RECORD_TYPE:
      error ("used struct type value1 where scalar is required");
      return global_trees[TI_ERROR_MARK];
    case UNION_TYPE:
      error ("used union type value1 where scalar is required");
      return global_trees[TI_ERROR_MARK];
    default:
      break;
    }
  return c_common_truthvalue_conversion (expr);
}
unsigned char
has_c_linkage (tree decl )
{
  return 1;
}
void
c_initialize_diagnostics (diagnostic_context *context)
{
  pretty_printer *base = context->printer;
  c_pretty_printer *pp = xmalloc (sizeof (c_pretty_printer));
  memcpy ((&(pp)->base), base, sizeof (pretty_printer));
  pp_c_pretty_printer_init (pp);
  context->printer = (pretty_printer *) pp;
  free (base);
}
void
dump_stmt (dump_info_p di, tree t)
{
  if ((((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (t)->common.code))])) != 0) ? (t)->exp.locus : (location_t *)((void *)0)) != ((void *)0)))
    dump_int (di, "line", ((t)->exp.locus->line));
}
unsigned char
c_dump_tree (void *dump_info, tree t)
{
  enum tree_code code;
  dump_info_p di = (dump_info_p) dump_info;
  code = ((enum tree_code) (t)->common.code);
  switch (code)
    {
    case FIELD_DECL:
      if (((((t))->decl.lang_flag_4) == 1))
 dump_string1 (di, "bitfield");
      break;
    case BREAK_STMT:
    case CONTINUE_STMT:
      dump_stmt (di, t);
      break;
    case DO_STMT:
      dump_stmt (di, t);
      queue_and_dump_index (di, "body", (((t))->exp.operands[1]), 0);
      queue_and_dump_index (di, "cond", (((t))->exp.operands[0]), 0);
      break;
    case EXPR_STMT:
      dump_stmt (di, t);
      queue_and_dump_index (di, "expr", (((t))->exp.operands[0]), 0);
      break;
    case FOR_STMT:
      dump_stmt (di, t);
      queue_and_dump_index (di, "init", (((t))->exp.operands[0]), 0);
      queue_and_dump_index (di, "cond", (((t))->exp.operands[1]), 0);
      queue_and_dump_index (di, "expr", (((t))->exp.operands[2]), 0);
      queue_and_dump_index (di, "body", (((t))->exp.operands[3]), 0);
      break;
    case SWITCH_STMT:
      dump_stmt (di, t);
      queue_and_dump_index (di, "cond", (((t))->exp.operands[0]), 0);
      queue_and_dump_index (di, "body", (((t))->exp.operands[1]), 0);
      break;
    case WHILE_STMT:
      dump_stmt (di, t);
      queue_and_dump_index (di, "cond", (((t))->exp.operands[0]), 0);
      queue_and_dump_index (di, "body", (((t))->exp.operands[1]), 0);
      break;
    case STMT_EXPR:
      queue_and_dump_index (di, "stmt", (((t))->exp.operands[0]), 0);
      break;
    default:
      break;
    }
  return 0;
}
static const struct c_pch_matching
{
  int *flag_var;
  const char *flag_name;
} pch_matching[] = {
  { &flag_exceptions, "-fexceptions" },
  { &flag_unit_at_a_time, "-funit-at-a-time" }
};
enum {
  MATCH_SIZE = (sizeof (pch_matching) / sizeof ((pch_matching)[0]))
};
struct c_pch_validity
{
  unsigned char host_machine_length;
  unsigned char target_machine_length;
  unsigned char version_length;
  unsigned char debug_info_type;
  signed char match[MATCH_SIZE];
  void (*pch_init) (void);
  size_t target_data_length;
};
struct c_pch_header1
{
  unsigned long asm_size;
};
static FILE *pch_outfile;
static long asm_file_startpos;
static const char host_machine[] = "i686-pc-linux-gnu";
static const char target_machine[] = "i686-pc-linux-gnu";
static const char *get_ident (void);
static const char *
get_ident(void)
{
  static char result[8];
  static const char template[8] = "gpch.012";
  static const char c_language_chars[] = "Co+O";
  memcpy (result, template, 8);
  result[4] = c_language_chars[c_language];
  return result;
}
void
pch_init (void)
{
  FILE *f;
  struct c_pch_validity v;
  void *target_validity;
  static const char partial_pch[8] = "gpcWrite";
  if (! pch_file)
    return;
  f = fopen (pch_file, "w+b");
  if (f == ((void *)0))
    fatal_error ("can't create precompiled header1 %s: %m", pch_file);
  pch_outfile = f;
  if (strlen (host_machine) > 255 || strlen (target_machine) > 255
      || strlen (version_string1) > 255)
    fancy_abort ("gcc.c", 745534, "?");
  v.host_machine_length = strlen (host_machine);
  v.target_machine_length = strlen (target_machine);
  v.version_length = strlen (version_string1);
  v.debug_info_type = write_symbols;
  {
    size_t i;
    for (i = 0; i < MATCH_SIZE; i++)
      {
 v.match[i] = *pch_matching[i].flag_var;
 if (v.match[i] != *pch_matching[i].flag_var)
   fancy_abort ("gcc.c", 745546, "?");
      }
  }
  v.pch_init = &pch_init;
  target_validity = targetm.get_pch_validity (&v.target_data_length);
  if (fwrite_unlocked (partial_pch, 8, 1, f) != 1
      || fwrite_unlocked (&v, sizeof (v), 1, f) != 1
      || fwrite_unlocked (host_machine, v.host_machine_length, 1, f) != 1
      || fwrite_unlocked (target_machine, v.target_machine_length, 1, f) != 1
      || fwrite_unlocked (version_string1, v.version_length, 1, f) != 1
      || fwrite_unlocked (target_validity, v.target_data_length, 1, f) != 1)
    fatal_error ("can't write to %s: %m", pch_file);
  if (asm_file_name == ((void *)0)
      || strcmp (asm_file_name, "-") == 0)
    fatal_error ("`%s' is not a valid output file", asm_file_name);
  asm_file_startpos = ftell (asm_out_file);
  (*debug_hooks->handle_pch) (0);
  cpp_save_state (parse_in, f);
}
void
c_common_write_pch (void)
{
  char *buf;
  long asm_file_end;
  long written;
  struct c_pch_header1 h;
  (*debug_hooks->handle_pch) (1);
  cpp_write_pch_deps (parse_in, pch_outfile);
  asm_file_end = ftell (asm_out_file);
  h.asm_size = asm_file_end - asm_file_startpos;
  if (fwrite_unlocked (&h, sizeof (h), 1, pch_outfile) != 1)
    fatal_error ("can't write %s: %m", pch_file);
  buf = xmalloc (16384);
  if (fseek (asm_out_file, asm_file_startpos, 0) != 0)
    fatal_error ("can't seek in %s: %m", asm_file_name);
  for (written = asm_file_startpos; written < asm_file_end; )
    {
      long size = asm_file_end - written;
      if (size > 16384)
 size = 16384;
      if (fread (buf, size, 1, asm_out_file) != 1)
 fatal_error ("can't read %s: %m", asm_file_name);
      if (fwrite_unlocked (buf, size, 1, pch_outfile) != 1)
 fatal_error ("can't write %s: %m", pch_file);
      written += size;
    }
  free (buf);
  if (fseek (asm_out_file, 0, 2) != 0)
    fatal_error ("can't seek in %s: %m", asm_file_name);
  gt_pch_save (pch_outfile);
  cpp_write_pch_state (parse_in, pch_outfile);
  if (fseek (pch_outfile, 0, 0) != 0
      || fwrite_unlocked (get_ident (), 8, 1, pch_outfile) != 1)
    fatal_error ("can't write %s: %m", pch_file);
  fclose (pch_outfile);
}
int
c_common_valid_pch (cpp_reader *pfile, const char *name, int fd)
{
  int sizeread;
  int result;
  char ident[8];
  char short_string1s[256 * 3];
  int string1s_length;
  const char *pch_ident;
  struct c_pch_validity v;
  sizeread = read (fd, ident, 8);
  if (sizeread == -1)
    fatal_error ("can't read %s: %m", name);
  else if (sizeread != 8)
    return 2;
  pch_ident = get_ident();
  if (memcmp (ident, pch_ident, 8) != 0)
    {
      if (cpp_get_options (pfile)->warn_invalid_pch)
 {
   if (memcmp (ident, pch_ident, 5) == 0)
     cpp_error (pfile, 0x00,
         "%s: not compatible with this GCC version", name);
   else if (memcmp (ident, pch_ident, 4) == 0)
     cpp_error (pfile, 0x00, "%s: not for %s", name,
         lang_hooks.name);
   else
     cpp_error (pfile, 0x00, "%s: not a PCH file", name);
 }
      return 2;
    }
  if (read (fd, &v, sizeof (v)) != sizeof (v))
    fatal_error ("can't read %s: %m", name);
  string1s_length = (v.host_machine_length + v.target_machine_length
      + v.version_length);
  if (read (fd, short_string1s, string1s_length) != string1s_length)
    fatal_error ("can't read %s: %m", name);
  if (v.host_machine_length != strlen (host_machine)
      || memcmp (host_machine, short_string1s, strlen (host_machine)) != 0)
    {
      if (cpp_get_options (pfile)->warn_invalid_pch)
 cpp_error (pfile, 0x00,
     "%s: created on host `%.*s', but used on host `%s'", name,
     v.host_machine_length, short_string1s, host_machine);
      return 2;
    }
  if (v.target_machine_length != strlen (target_machine)
      || memcmp (target_machine, short_string1s + v.host_machine_length,
   strlen (target_machine)) != 0)
    {
      if (cpp_get_options (pfile)->warn_invalid_pch)
 cpp_error (pfile, 0x00,
     "%s: created for target `%.*s', but used for target `%s'",
     name, v.target_machine_length,
     short_string1s + v.host_machine_length, target_machine);
      return 2;
    }
  if (v.version_length != strlen (version_string1)
      || memcmp (version_string1,
   (short_string1s + v.host_machine_length
    + v.target_machine_length),
   v.version_length) != 0)
    {
      if (cpp_get_options (pfile)->warn_invalid_pch)
 cpp_error (pfile, 0x00,
     "%s: created by version `%.*s', but this is version `%s'",
     name, v.version_length,
     (short_string1s + v.host_machine_length
      + v.target_machine_length),
     version_string1);
      return 2;
    }
  if (v.debug_info_type != write_symbols
      && write_symbols != NO_DEBUG)
    {
      if (cpp_get_options (pfile)->warn_invalid_pch)
 cpp_error (pfile, 0x00,
     "%s: created with -g%s, but used with -g%s", name,
     debug_type_names[v.debug_info_type],
     debug_type_names[write_symbols]);
      return 2;
    }
  {
    size_t i;
    for (i = 0; i < MATCH_SIZE; i++)
      if (*pch_matching[i].flag_var != v.match[i])
 {
   if (cpp_get_options (pfile)->warn_invalid_pch)
     cpp_error (pfile, 0x00,
         "%s: settings for %s do not match", name,
         pch_matching[i].flag_name);
   return 2;
 }
  }
  if (v.pch_init != &pch_init)
    {
      if (cpp_get_options (pfile)->warn_invalid_pch)
 cpp_error (pfile, 0x00,
     "%s: had text segment at different address", name);
      return 2;
    }
  {
    void *this_file_data = xmalloc (v.target_data_length);
    const char *msg;
    if ((size_t) read (fd, this_file_data, v.target_data_length)
 != v.target_data_length)
      fatal_error ("can't read %s: %m", name);
    msg = targetm.pch_valid_p (this_file_data, v.target_data_length);
    free (this_file_data);
    if (msg != ((void *)0))
      {
 if (cpp_get_options (pfile)->warn_invalid_pch)
   cpp_error (pfile, 0x00, "%s: %s", name, msg);
 return 2;
      }
  }
  result = cpp_valid_state (pfile, name, fd);
  if (result == -1)
    return 2;
  else
    return result == 0;
}
void
c_common_read_pch (cpp_reader *pfile, const char *name,
     int fd, const char *orig_name )
{
  FILE *f;
  struct c_pch_header1 h;
  struct save_macro_data *smd;
  f = fdopen (fd, "rb");
  if (f == ((void *)0))
    {
      cpp_errno (pfile, 0x03, "calling fdopen");
      return;
    }
  cpp_get_callbacks (parse_in)->valid_pch = ((void *)0);
  if (fread (&h, sizeof (h), 1, f) != 1)
    {
      cpp_errno (pfile, 0x03, "reading");
      return;
    }
  if (!flag_preprocess_only)
    {
      unsigned long written;
      char * buf = xmalloc (16384);
      for (written = 0; written < h.asm_size; )
 {
   long size = h.asm_size - written;
   if (size > 16384)
     size = 16384;
   if (fread (buf, size, 1, f) != 1
       || fwrite_unlocked (buf, size, 1, asm_out_file) != 1)
     cpp_errno (pfile, 0x03, "reading");
   written += size;
 }
      free (buf);
    }
  else
    {
      if (fseek (f, h.asm_size, 1) != 0)
 cpp_errno (pfile, 0x03, "seeking");
    }
  cpp_prepare_state (pfile, &smd);
  gt_pch_restore (f);
  if (cpp_read_state (pfile, name, f, smd) != 0)
    return;
  fclose (f);
}
void
c_common_no_more_pch (void)
{
  if (cpp_get_callbacks (parse_in)->valid_pch)
    {
      cpp_get_callbacks (parse_in)->valid_pch = ((void *)0);
      host_hooks.gt_pch_use_address (((void *)0), 0, -1, 0);
    }
}
void
c_common_pch_pragma (cpp_reader *pfile)
{
  tree name_t;
  const char *name;
  int fd;
  if (c_lex (&name_t) != CPP_STRING)
    {
      error ("malformed #pragma GCC pch_preprocess, ignored");
      return;
    }
  if (! cpp_get_options (pfile)->preprocessed)
    {
      error ("pch_preprocess pragma should only be used with -fpreprocessed");
      inform ("use #include instead");
      return;
    }
  name = ((name_t)->string11.pointer);
  fd = open (name, 00 | 0, 0666);
  if (fd == -1)
    fatal_error ("%s: couldn't open PCH file: %m\n", name);
  if (c_common_valid_pch (pfile, name, fd) != 1)
    {
      if (!cpp_get_options (pfile)->warn_invalid_pch)
 inform ("use -Winvalid-pch for more information");
      fatal_error ("%s: PCH file was invalid", name);
    }
  c_common_read_pch (pfile, name, fd, name);
  close (fd);
}
enum bc_t { bc_break = 0, bc_continue = 1 };
static struct c_gimplify_ctx
{
  tree current_bc_label;
  tree bc_id[2];
} *ctxp;
static void
push_context (void)
{
  if (ctxp)
    fancy_abort ("gcc.c", 745966, "?");
  ctxp = (struct c_gimplify_ctx *) xcalloc (1, sizeof (struct c_gimplify_ctx));
  ctxp->bc_id[bc_continue] = get_identifier ("continue");
  ctxp->bc_id[bc_break] = get_identifier ("break");
}
static void
pop_context (void)
{
  if (!ctxp || ctxp->current_bc_label)
    fancy_abort ("gcc.c", 745976, "?");
  free (ctxp);
  ctxp = ((void *)0);
}
void
c_genericize (tree fndecl)
{
  FILE *dump_file;
  int local_dump_flags;
  struct cgraph_node *cgn;
  dump_file = dump_begin (TDI_original, &local_dump_flags);
  if (dump_file)
    {
      fprintf (dump_file, "\n;; Function %s",
        lang_hooks.decl_printable_name (fndecl, 2));
      fprintf (dump_file, " (%s)\n",
        ((const char *) (decl_assembler_name (fndecl))->identifier.id.str));
      fprintf (dump_file, ";; enabled by -%s\n", dump_flag_name (TDI_original));
      fprintf (dump_file, "\n");
      if (local_dump_flags & (1 << 2))
 dump_node (((fndecl)->decl.saved_tree),
     (1 << 1) | local_dump_flags, dump_file);
      else
 print_c_tree (dump_file, ((fndecl)->decl.saved_tree));
      fprintf (dump_file, "\n");
      dump_end (TDI_original, dump_file);
    }
  push_context ();
  gimplify_function_tree (fndecl);
  pop_context ();
  dump_function (TDI_generic, fndecl);
  cgn = cgraph_node (fndecl);
  for (cgn = cgn->nested; cgn ; cgn = cgn->next_nested)
    c_genericize (cgn->decl);
}
static void
add_block_to_enclosing (tree block)
{
  tree enclosing;
  for (enclosing = gimple_current_bind_expr ();
       enclosing; enclosing = ((enclosing)->common.chain))
    if (((((enclosing))->exp.operands[2])))
      break;
  enclosing = ((((enclosing))->exp.operands[2]));
  ((enclosing)->block.subblocks) = chainon (((enclosing)->block.subblocks), block);
}
tree
c_build_bind_expr (tree block, tree body)
{
  tree decls, bind;
  if (block == (tree) ((void *)0))
    decls = (tree) ((void *)0);
  else if (((enum tree_code) (block)->common.code) == BLOCK)
    decls = ((block)->block.vars);
  else
    {
      decls = block;
      if (((decls)->decl.artificial_flag))
 block = (tree) ((void *)0);
      else
 {
   block = make_node_stat (BLOCK );
   ((block)->block.vars) = decls;
   add_block_to_enclosing (block);
 }
    }
  if (!body)
    body = build_empty_stmt ();
  if (decls || block)
    {
      bind = build (BIND_EXPR, global_trees[TI_VOID_TYPE], decls, body, block);
      ((bind)->common.side_effects_flag) = 1;
    }
  else
    bind = body;
  return bind;
}
static enum gimplify_status
gimplify_expr_stmt (tree *stmt_p)
{
  tree stmt = (((*stmt_p))->exp.operands[0]);
  if (stmt == global_trees[TI_ERROR_MARK])
    stmt = ((void *)0);
  if (stmt && (extra_warnings || warn_unused_value))
    {
      if (!((stmt)->common.side_effects_flag))
 {
   if (!(((enum tree_code) (stmt)->common.code) == NOP_EXPR && (((enum tree_code) (((stmt)->common.type))->common.code) == VOID_TYPE) && integer_zerop (((stmt)->exp.operands[0])))
       && !(((enum tree_code) (((stmt)->common.type))->common.code) == VOID_TYPE)
       && !((stmt)->common.nowarning_flag))
     warning ("statement with no effect");
 }
      else if (warn_unused_value)
 warn_if_unused_value (stmt, input_location);
    }
  if (stmt == (tree) ((void *)0))
    stmt = alloc_stmt_list ();
  *stmt_p = stmt;
  return GS_OK;
}
static tree
begin_bc_block (enum bc_t bc)
{
  tree label = create_artificial_label ();
  ((label)->decl.name) = ctxp->bc_id[bc];
  ((label)->common.chain) = ctxp->current_bc_label;
  ctxp->current_bc_label = label;
  return label;
}
static tree
finish_bc_block (tree label, tree body)
{
  if (label != ctxp->current_bc_label)
    fancy_abort ("gcc.c", 746157, "?");
  if (((label)->common.used_flag))
    {
      tree t, sl = ((void *)0);
      ((label)->decl.name) = (tree) ((void *)0);
      t = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],label );
      append_to_statement_list (body, &sl);
      append_to_statement_list (t, &sl);
      body = sl;
    }
  ctxp->current_bc_label = ((label)->common.chain);
  ((label)->common.chain) = (tree) ((void *)0);
  return body;
}
static tree
build_bc_goto (enum bc_t bc)
{
  tree label;
  tree target_name = ctxp->bc_id[bc];
  for (label = ctxp->current_bc_label;
       label;
       label = ((label)->common.chain))
    if (((label)->decl.name) == target_name)
      break;
  if (label == (tree) ((void *)0))
    {
      if (bc == bc_break)
 error ("break statement not within loop or switch");
      else
 error ("continue statement not within loop or switch");
      return (tree) ((void *)0);
    }
  ((label)->common.used_flag) = 1;
  return build1_stat (GOTO_EXPR,global_trees[TI_VOID_TYPE],label );
}
static tree
gimplify_c_loop (tree cond, tree body, tree incr, unsigned char cond_is_first)
{
  tree top, entry, exit, cont_block, break_block, stmt_list, t;
  location_t stmt_locus;
  stmt_locus = input_location;
  if (!cond_is_first && cond && integer_zerop (cond))
    top = cond = ((void *)0);
  else
    {
      top = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],(tree) ((void *)0) );
    }
  break_block = begin_bc_block (bc_break);
  if (top)
    {
      exit = build_and_jump (&(((top))->exp.operands[0]));
      if (cond)
 {
   t = build_bc_goto (bc_break);
   exit = build (COND_EXPR, global_trees[TI_VOID_TYPE], cond, exit, t);
   exit = fold (exit);
   gimplify_stmt (&exit);
 }
    }
  else
    exit = (tree) ((void *)0);
  cont_block = begin_bc_block (bc_continue);
  gimplify_stmt (&body);
  gimplify_stmt (&incr);
  body = finish_bc_block (cont_block, body);
  stmt_list = ((void *)0);
  if (cond_is_first && cond)
    {
      entry = build1_stat (LABEL_EXPR,global_trees[TI_VOID_TYPE],(tree) ((void *)0) );
      t = build_and_jump (&(((entry))->exp.operands[0]));
      append_to_statement_list (t, &stmt_list);
    }
  else
    entry = (tree) ((void *)0);
  append_to_statement_list (top, &stmt_list);
  append_to_statement_list (body, &stmt_list);
  append_to_statement_list (incr, &stmt_list);
  append_to_statement_list (entry, &stmt_list);
  append_to_statement_list (exit, &stmt_list);
  annotate_all_with_locus (&stmt_list, stmt_locus);
  return finish_bc_block (break_block, stmt_list);
}
static enum gimplify_status
gimplify_for_stmt (tree *stmt_p, tree *pre_p)
{
  tree stmt = *stmt_p;
  if ((((stmt))->exp.operands[0]))
    gimplify_and_add ((((stmt))->exp.operands[0]), pre_p);
  *stmt_p = gimplify_c_loop ((((stmt))->exp.operands[1]), (((stmt))->exp.operands[3]),
        (((stmt))->exp.operands[2]), 1);
  return GS_ALL_DONE;
}
static enum gimplify_status
gimplify_while_stmt (tree *stmt_p)
{
  tree stmt = *stmt_p;
  *stmt_p = gimplify_c_loop ((((stmt))->exp.operands[0]), (((stmt))->exp.operands[1]),
        (tree) ((void *)0), 1);
  return GS_ALL_DONE;
}
static enum gimplify_status
gimplify_do_stmt (tree *stmt_p)
{
  tree stmt = *stmt_p;
  *stmt_p = gimplify_c_loop ((((stmt))->exp.operands[0]), (((stmt))->exp.operands[1]),
        (tree) ((void *)0), 0);
  return GS_ALL_DONE;
}
static enum gimplify_status
gimplify_switch_stmt (tree *stmt_p)
{
  tree stmt = *stmt_p;
  tree break_block, body;
  location_t stmt_locus = input_location;
  break_block = begin_bc_block (bc_break);
  body = (((stmt))->exp.operands[1]);
  if (!body)
    body = build_empty_stmt ();
  *stmt_p = build (SWITCH_EXPR, (((stmt))->exp.operands[2]), (((stmt))->exp.operands[0]),
     body, (tree) ((void *)0));
  annotate_with_locus (*stmt_p, stmt_locus);
  gimplify_stmt (stmt_p);
  *stmt_p = finish_bc_block (break_block, *stmt_p);
  return GS_ALL_DONE;
}
static enum gimplify_status
gimplify_compound_literal_expr (tree *expr_p, tree *pre_p)
{
  tree decl_s = (((*expr_p))->exp.operands[0]);
  tree decl = (((decl_s))->exp.operands[0]);
  if (((decl)->decl.name) == (tree) ((void *)0))
    gimple_add_tmp_var (decl);
  gimplify_and_add (decl_s, pre_p);
  *expr_p = decl;
  return GS_OK;
}
int
c_gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p )
{
  enum tree_code code = ((enum tree_code) (*expr_p)->common.code);
  switch (code)
    {
    case DECL_EXPR:
      if (((enum tree_code) ((((*expr_p))->exp.operands[0]))->common.code) == VAR_DECL
   && !(((((*expr_p))->exp.operands[0]))->decl.external_flag)
   && !(((((*expr_p))->exp.operands[0]))->common.static_flag)
   && ((((((*expr_p))->exp.operands[0]))->decl.initial)
       == (((*expr_p))->exp.operands[0]))
   && !warn_init_self)
 (((((*expr_p))->exp.operands[0]))->common.nowarning_flag) = 1;
      return GS_UNHANDLED;
    case COMPOUND_LITERAL_EXPR:
      return gimplify_compound_literal_expr (expr_p, pre_p);
    case FOR_STMT:
      return gimplify_for_stmt (expr_p, pre_p);
    case WHILE_STMT:
      return gimplify_while_stmt (expr_p);
    case DO_STMT:
      return gimplify_do_stmt (expr_p);
    case SWITCH_STMT:
      return gimplify_switch_stmt (expr_p);
    case EXPR_STMT:
      return gimplify_expr_stmt (expr_p);
    case CONTINUE_STMT:
      *expr_p = build_bc_goto (bc_continue);
      return GS_ALL_DONE;
    case BREAK_STMT:
      *expr_p = build_bc_goto (bc_break);
      return GS_ALL_DONE;
    default:
      return GS_UNHANDLED;
    }
}
static void pp_c_char (c_pretty_printer *, int);
static void pp_c_initializer_list (c_pretty_printer *, tree);
static void pp_c_brace_enclosed_initializer_list (c_pretty_printer *, tree);
static void pp_c_multiplicative_expression (c_pretty_printer *, tree);
static void pp_c_additive_expression (c_pretty_printer *, tree);
static void pp_c_shift_expression (c_pretty_printer *, tree);
static void pp_c_relational_expression (c_pretty_printer *, tree);
static void pp_c_equality_expression (c_pretty_printer *, tree);
static void pp_c_and_expression (c_pretty_printer *, tree);
static void pp_c_exclusive_or_expression (c_pretty_printer *, tree);
static void pp_c_inclusive_or_expression (c_pretty_printer *, tree);
static void pp_c_logical_and_expression (c_pretty_printer *, tree);
static void pp_c_conditional_expression (c_pretty_printer *, tree);
static void pp_c_assignment_expression (c_pretty_printer *, tree);
void
pp_c_whitespace (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), ' ');
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_left_paren (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), '(');
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_right_paren (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), ')');
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_left_brace (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), '{');
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_right_brace (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), '}');
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_left_bracket (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), '[');
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_right_bracket (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), ']');
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_dot (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), '.');
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_ampersand (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), '&');
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_star (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), '*');
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_arrow (c_pretty_printer *pp)
{
  pp_base_string1 ((&(pp)->base), "->");
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_semicolon (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), ';');
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_complement (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), '~');
  (&(pp)->base)->padding = pp_none;
}
void
pp_c_exclamation (c_pretty_printer *pp)
{
  pp_base_character ((&(pp)->base), '!');
  (&(pp)->base)->padding = pp_none;
}
static void
pp_c_cv_qualifier (c_pretty_printer *pp, const char *cv)
{
  const char *p = pp_base_last_position_in_text ((&(pp)->base));
  if (p != ((void *)0) && (*p == '*' || *p == '&'))
    pp_c_whitespace (pp);
  pp_c_identifier (pp, cv);
}
static void
pp_c_type_cast (c_pretty_printer *pp, tree t)
{
  pp_c_left_paren (pp);
  (pp)->type_id ((pp), t);
  pp_c_right_paren (pp);
}
void
pp_c_space_for_pointer_operator (c_pretty_printer *pp, tree t)
{
  if ((((enum tree_code) (t)->common.code) == POINTER_TYPE || ((enum tree_code) (t)->common.code) == REFERENCE_TYPE))
    {
      tree pointee = strip_pointer_operator (((t)->common.type));
      if (((enum tree_code) (pointee)->common.code) != ARRAY_TYPE
          && ((enum tree_code) (pointee)->common.code) != FUNCTION_TYPE)
        pp_c_whitespace (pp);
    }
}
void
pp_c_type_qualifier_list (c_pretty_printer *pp, tree t)
{
   int qualifiers;
  if (!(tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't'))
    t = ((t)->common.type);
  qualifiers = ((((t)->common.readonly_flag) * 0x1) | (((t)->common.volatile_flag) * 0x2) | (((t)->type.restrict_flag) * 0x4));
  if (qualifiers & 0x1)
    pp_c_cv_qualifier (pp, "const");
  if (qualifiers & 0x2)
    pp_c_cv_qualifier (pp, "volatile");
  if (qualifiers & 0x4)
    pp_c_cv_qualifier (pp, flag_isoc99 ? "restrict" : "__");
}
static void
pp_c_pointer (c_pretty_printer *pp, tree t)
{
  if (!(tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 't') && ((enum tree_code) (t)->common.code) != TYPE_DECL)
    t = ((t)->common.type);
  switch (((enum tree_code) (t)->common.code))
    {
    case POINTER_TYPE:
    case REFERENCE_TYPE:
      if (((enum tree_code) (((t)->common.type))->common.code) == POINTER_TYPE)
        pp_c_pointer (pp, ((t)->common.type));
      if (((enum tree_code) (t)->common.code) == POINTER_TYPE)
        pp_c_star (pp);
      else
        pp_c_ampersand (pp);
      pp_c_type_qualifier_list (pp, t);
      break;
    case DECL_EXPR:
      (pp)->declaration ((pp), (((t))->exp.operands[0]));
      (&(pp)->base)->need_newline = 1;
      break;
    default:
      pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (t)->common.code)], "?");
    }
}
void
pp_c_type_specifier (c_pretty_printer *pp, tree t)
{
  const enum tree_code code = ((enum tree_code) (t)->common.code);
  switch (code)
    {
    case ERROR_MARK:
      pp_c_identifier (pp, "<type-error>");
      break;
    case IDENTIFIER_NODE:
      pp_c_tree_decl_identifier (pp, t);
      break;
    case VOID_TYPE:
    case BOOLEAN_TYPE:
    case CHAR_TYPE:
    case INTEGER_TYPE:
    case REAL_TYPE:
      if (((t)->type.name))
        t = ((t)->type.name);
      else
        t = c_common_type_for_mode (((t)->type.mode), ((t)->common.unsigned_flag));
      pp_c_type_specifier (pp, t);
      break;
    case TYPE_DECL:
      if (((t)->decl.name))
 (pp)->id_expression ((pp), t);
      else
 pp_c_identifier (pp, "<typedef-error>");
      break;
    case UNION_TYPE:
    case RECORD_TYPE:
    case ENUMERAL_TYPE:
      if (code == UNION_TYPE)
 pp_c_identifier (pp, "union");
      else if (code == RECORD_TYPE)
 pp_c_identifier (pp, "struct");
      else if (code == ENUMERAL_TYPE)
 pp_c_identifier (pp, "enum");
      else
 pp_c_identifier (pp, "<tag-error>");
      if (((t)->type.name))
 (pp)->id_expression ((pp), ((t)->type.name));
      else
 pp_c_identifier (pp, "<anonymous>");
      break;
    default:
      pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (t)->common.code)], "?");
      break;
    }
}
void
pp_c_specifier_qualifier_list (c_pretty_printer *pp, tree t)
{
  const enum tree_code code = ((enum tree_code) (t)->common.code);
  if (((enum tree_code) (t)->common.code) != POINTER_TYPE)
    pp_c_type_qualifier_list (pp, t);
  switch (code)
    {
    case REFERENCE_TYPE:
    case POINTER_TYPE:
      {
        tree pointee = strip_pointer_operator (((t)->common.type));
        pp_c_specifier_qualifier_list (pp, pointee);
        if (((enum tree_code) (pointee)->common.code) == ARRAY_TYPE
            || ((enum tree_code) (pointee)->common.code) == FUNCTION_TYPE)
          {
            pp_c_whitespace (pp);
            pp_c_left_paren (pp);
          }
 else if (!(c_language & clk_cxx))
   pp_c_whitespace (pp);
        (pp)->ptr_operator ((pp), t);
      }
      break;
    case FUNCTION_TYPE:
    case ARRAY_TYPE:
      pp_c_specifier_qualifier_list (pp, ((t)->common.type));
      break;
    case VECTOR_TYPE:
    case COMPLEX_TYPE:
      pp_c_specifier_qualifier_list (pp, ((t)->common.type));
      if (code == COMPLEX_TYPE)
        pp_c_identifier (pp, flag_isoc99 ? "_Complex" : "__complex__");
      else if (code == VECTOR_TYPE)
        pp_c_identifier (pp, "__vector__");
      break;
    default:
      (pp)->simple_type_specifier ((pp), t);
      break;
    }
}
void
pp_c_parameter_type_list (c_pretty_printer *pp, tree t)
{
  unsigned char want_parm_decl = (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd') && !(pp->flags & pp_c_flag_abstract);
  tree parms = want_parm_decl ? ((t)->decl.arguments) : ((t)->type.value1s);
  pp_c_left_paren (pp);
  if (parms == global_trees[TI_VOID_LIST_NODE])
    pp_c_identifier (pp, "void");
  else
    {
      unsigned char first = 1;
      for ( ; parms && parms != global_trees[TI_VOID_LIST_NODE]; parms = ((parms)->common.chain))
        {
          if (!first)
            do { pp_base_character ((&(pp)->base), ','); pp_base_character ((&(pp)->base), ' '); } while (0);
          first = 0;
          (pp)->declaration_specifiers ((pp), want_parm_decl ? parms : ((parms)->list.value1))
                                                             ;
          if (want_parm_decl)
            (pp)->declarator ((pp), parms);
          else
            (pp)->abstract_declarator ((pp), ((parms)->list.value1));
        }
    }
  pp_c_right_paren (pp);
}
static void
pp_c_abstract_declarator (c_pretty_printer *pp, tree t)
{
  if (((enum tree_code) (t)->common.code) == POINTER_TYPE)
    {
      if (((enum tree_code) (((t)->common.type))->common.code) == ARRAY_TYPE
          || ((enum tree_code) (((t)->common.type))->common.code) == FUNCTION_TYPE)
        pp_c_right_paren (pp);
      t = ((t)->common.type);
    }
  (pp)->direct_abstract_declarator ((pp), t);
}
void
pp_c_direct_abstract_declarator (c_pretty_printer *pp, tree t)
{
  switch (((enum tree_code) (t)->common.code))
    {
    case POINTER_TYPE:
      (pp)->abstract_declarator ((pp), t);
      break;
    case FUNCTION_TYPE:
      pp_c_parameter_type_list (pp, t);
      (pp)->direct_abstract_declarator ((pp), ((t)->common.type));
      break;
    case ARRAY_TYPE:
      pp_c_left_bracket (pp);
      if (((t)->type.value1s) && ((((t)->type.value1s))->type.maxval))
        (pp)->expression ((pp), ((((t)->type.value1s))->type.maxval));
      pp_c_right_bracket (pp);
      (pp)->direct_abstract_declarator ((pp), ((t)->common.type));
      break;
    case IDENTIFIER_NODE:
    case VOID_TYPE:
    case BOOLEAN_TYPE:
    case INTEGER_TYPE:
    case REAL_TYPE:
    case ENUMERAL_TYPE:
    case RECORD_TYPE:
    case UNION_TYPE:
    case VECTOR_TYPE:
    case COMPLEX_TYPE:
    case TYPE_DECL:
      break;
    default:
      pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (t)->common.code)], "?");
      break;
    }
}
void
pp_c_type_id (c_pretty_printer *pp, tree t)
{
  pp_c_specifier_qualifier_list (pp, t);
  (pp)->abstract_declarator ((pp), t);
}
void
pp_c_storage_class_specifier (c_pretty_printer *pp, tree t)
{
  if (((enum tree_code) (t)->common.code) == TYPE_DECL)
    pp_c_identifier (pp, "typedef");
  else if ((tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd'))
    {
      if (((t)->decl.regdecl_flag))
        pp_c_identifier (pp, "register");
      else if (((t)->common.static_flag) && ((enum tree_code) (t)->common.code) == VAR_DECL)
        pp_c_identifier (pp, "static");
    }
}
void
pp_c_function_specifier (c_pretty_printer *pp, tree t)
{
  if (((enum tree_code) (t)->common.code) == FUNCTION_DECL && ((t)->decl.declared_inline_flag))
    pp_c_identifier (pp, "inline");
}
void
pp_c_declaration_specifiers (c_pretty_printer *pp, tree t)
{
  (pp)->storage_class_specifier ((pp), t);;
  (pp)->function_specifier ((pp), t);
  pp_c_specifier_qualifier_list (pp, (tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd') ? ((t)->common.type) : t);
}
void
pp_c_direct_declarator (c_pretty_printer *pp, tree t)
{
  switch (((enum tree_code) (t)->common.code))
    {
    case VAR_DECL:
    case PARM_DECL:
    case TYPE_DECL:
    case FIELD_DECL:
    case LABEL_DECL:
      pp_c_space_for_pointer_operator (pp, ((t)->common.type));
      pp_c_tree_decl_identifier (pp, t);
      break;
    case ARRAY_TYPE:
    case POINTER_TYPE:
      (pp)->abstract_declarator ((pp), ((t)->common.type));
      break;
    case FUNCTION_TYPE:
      (pp)->parameter_list ((pp), t);
      (pp)->abstract_declarator ((pp), ((t)->common.type));
      break;
    case FUNCTION_DECL:
      pp_c_space_for_pointer_operator (pp, ((((t)->common.type))->common.type));
      pp_c_tree_decl_identifier (pp, t);
      if ((pp)->flags & pp_c_flag_abstract)
        (pp)->abstract_declarator ((pp), ((t)->common.type));
      else
        {
          (pp)->parameter_list ((pp), t);
          (pp)->abstract_declarator ((pp), ((((t)->common.type))->common.type));
        }
      break;
    case INTEGER_TYPE:
    case REAL_TYPE:
    case ENUMERAL_TYPE:
    case UNION_TYPE:
    case RECORD_TYPE:
      break;
    default:
      pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (t)->common.code)], "?");
      break;
    }
}
void
pp_c_declarator (c_pretty_printer *pp, tree t)
{
  switch (((enum tree_code) (t)->common.code))
    {
    case INTEGER_TYPE:
    case REAL_TYPE:
    case ENUMERAL_TYPE:
    case UNION_TYPE:
    case RECORD_TYPE:
      break;
    case VAR_DECL:
    case PARM_DECL:
    case FIELD_DECL:
    case ARRAY_TYPE:
    case FUNCTION_TYPE:
    case FUNCTION_DECL:
    case TYPE_DECL:
      (pp)->direct_declarator ((pp), t);
    break;
    default:
      pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (t)->common.code)], "?");
      break;
    }
}
void
pp_c_declaration (c_pretty_printer *pp, tree t)
{
  (pp)->declaration_specifiers ((pp), t);
  pp_c_init_declarator (pp, t);
}
void
pp_c_attributes (c_pretty_printer *pp, tree attributes)
{
  if (attributes == (tree) ((void *)0))
    return;
  pp_c_identifier (pp, "__attribute__");
  pp_c_left_paren (pp);
  pp_c_left_paren (pp);
  for (; attributes != (tree) ((void *)0); attributes = ((attributes)->common.chain))
    {
      pp_base_append_text ((&(pp)->base), ((const char *) (((attributes)->list.purpose))->identifier.id.str), ((const char *) (((attributes)->list.purpose))->identifier.id.str) + ((((attributes)->list.purpose))->identifier.id.len));
      if (((attributes)->list.value1))
        pp_c_call_argument_list (pp, ((attributes)->list.value1));
      if (((attributes)->common.chain))
 do { pp_base_character ((&(pp)->base), ','); pp_base_character ((&(pp)->base), ' '); } while (0);
    }
  pp_c_right_paren (pp);
  pp_c_right_paren (pp);
}
void
pp_c_function_definition (c_pretty_printer *pp, tree t)
{
  (pp)->declaration_specifiers ((pp), t);
  (pp)->declarator ((pp), t);
  (&(pp)->base)->need_newline = 1;
  (pp)->statement ((pp), ((t)->decl.saved_tree));
  pp_base_newline ((&(pp)->base));
  pp_base_flush ((&(pp)->base));
}
static void
pp_c_char (c_pretty_printer *pp, int c)
{
  switch (c)
    {
    case 012:
      pp_base_string1 ((&(pp)->base), "\\n");
      break;
    case 011:
      pp_base_string1 ((&(pp)->base), "\\t");
      break;
    case 013:
      pp_base_string1 ((&(pp)->base), "\\v");
      break;
    case 010:
      pp_base_string1 ((&(pp)->base), "\\b");
      break;
    case 015:
      pp_base_string1 ((&(pp)->base), "\\r");
      break;
    case 014:
      pp_base_string1 ((&(pp)->base), "\\f");
      break;
    case 007:
      pp_base_string1 ((&(pp)->base), "\\a");
      break;
    case '\\':
      pp_base_string1 ((&(pp)->base), "\\\\");
      break;
    case '\'':
      pp_base_string1 ((&(pp)->base), "\\'");
      break;
    case '\"':
      pp_base_string1 ((&(pp)->base), "\\\"");
      break;
    default:
      if ((_sch_istable[(c) & 0xff] & (unsigned short)(_sch_isprint)))
 pp_base_character ((&(pp)->base), c);
      else
 do { sprintf ((&(pp)->base)->buffer->digit_buffer, "\\%03o", (unsigned) c); pp_base_string1 ((&(pp)->base), (&(pp)->base)->buffer->digit_buffer); } while (0);
      break;
    }
}
void
pp_c_string1_literal (c_pretty_printer *pp, tree s)
{
  const char *p = ((s)->string11.pointer);
  int n = ((s)->string11.length) - 1;
  int i;
  pp_base_character ((&(pp)->base), '"');
  for (i = 0; i < n; ++i)
    pp_c_char (pp, p[i]);
  pp_base_character ((&(pp)->base), '"');
}
static void
pp_c_integer_constant (c_pretty_printer *pp, tree i)
{
  tree type = ((i)->common.type);
  if ((((i)->int_cst.int_cst).high) == 0)
    do { sprintf ((&(pp)->base)->buffer->digit_buffer, "%ld", (long) (((i)->int_cst.int_cst).low)); pp_base_string1 ((&(pp)->base), (&(pp)->base)->buffer->digit_buffer); } while (0);
  else
    {
      if (tree_int_cst_sgn (i) < 0)
        {
          pp_c_char (pp, '-');
          i = build_int_2_wide ((unsigned long) (-(((i)->int_cst.int_cst).low)), (long) (~(((i)->int_cst.int_cst).high) + !(((i)->int_cst.int_cst).low)))
                                                                          ;
        }
      sprintf ((&(pp)->base)->buffer->digit_buffer,
               "0x%lx%08lx",
               (((i)->int_cst.int_cst).high), (((i)->int_cst.int_cst).low));
      pp_base_string1 ((&(pp)->base), (&(pp)->base)->buffer->digit_buffer);
    }
  if (((type)->common.unsigned_flag))
    pp_base_character ((&(pp)->base), 'u');
  if (type == integer_types[itk_long] || type == integer_types[itk_unsigned_long])
    pp_base_character ((&(pp)->base), 'l');
  else if (type == integer_types[itk_long_long]
           || type == integer_types[itk_unsigned_long_long])
    pp_base_string1 ((&(pp)->base), "ll");
}
static void
pp_c_character_constant (c_pretty_printer *pp, tree c)
{
  tree type = ((c)->common.type);
  if (type == c_global_trees[CTI_WCHAR_TYPE])
    pp_base_character ((&(pp)->base), 'L');
  pp_base_character ((&(pp)->base), '\'');
  if (host_integerp (c, ((type)->common.unsigned_flag)))
    pp_c_char (pp, tree_low_cst (c, ((type)->common.unsigned_flag)));
  else
    do { sprintf ((&(pp)->base)->buffer->digit_buffer, "\\x%x", (unsigned) (((c)->int_cst.int_cst).low)); pp_base_string1 ((&(pp)->base), (&(pp)->base)->buffer->digit_buffer); } while (0);
  pp_base_character ((&(pp)->base), '\'');
}
static void
pp_c_bool_constant (c_pretty_printer *pp, tree b)
{
  if (b == global_trees[TI_BOOLEAN_FALSE])
    {
      if ((c_language & clk_cxx))
 pp_c_identifier (pp, "false");
      else if (flag_isoc99)
 pp_c_identifier (pp, "_False");
      else
 pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (b)->common.code)], "?");
    }
  else if (b == global_trees[TI_BOOLEAN_TRUE])
    {
      if ((c_language & clk_cxx))
 pp_c_identifier (pp, "true");
      else if (flag_isoc99)
 pp_c_identifier (pp, "_True");
      else
 pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (b)->common.code)], "?");
    }
  else if (((enum tree_code) (b)->common.code) == INTEGER_CST)
    pp_c_integer_constant (pp, b);
  else
    pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (b)->common.code)], "?");
}
static unsigned char
pp_c_enumeration_constant (c_pretty_printer *pp, tree e)
{
  unsigned char value_is_named = 1;
  tree type = ((e)->common.type);
  tree value1;
  for (value1 = ((type)->type.value1s);
       value1 != (tree) ((void *)0) && !tree_int_cst_equal (((value1)->list.value1), e);
       value1 = ((value1)->common.chain))
    ;
  if (value1 != (tree) ((void *)0))
    (pp)->id_expression ((pp), ((value1)->list.purpose));
  else
    {
      pp_c_type_cast (pp, type);
      value_is_named = 0;
    }
  return value_is_named;
}
static void
pp_c_floating_constant (c_pretty_printer *pp, tree r)
{
  real_to_decimal ((&(pp)->base)->buffer->digit_buffer, &(*((r)->real_cst.real_cst_ptr)),
     sizeof ((&(pp)->base)->buffer->digit_buffer), 0, 1);
  pp_base_string1 ((&(pp)->base), (&(pp)->base)->buffer->digit_buffer);
  if (((r)->common.type) == global_trees[TI_FLOAT_TYPE])
    pp_base_character ((&(pp)->base), 'f');
  else if (((r)->common.type) == global_trees[TI_LONG_DOUBLE_TYPE])
    pp_base_character ((&(pp)->base), 'l');
}
static void
pp_c_compound_literal (c_pretty_printer *pp, tree e)
{
  tree type = ((e)->common.type);
  pp_c_type_cast (pp, type);
  switch (((enum tree_code) (type)->common.code))
    {
    case RECORD_TYPE:
    case UNION_TYPE:
    case ARRAY_TYPE:
    case VECTOR_TYPE:
    case COMPLEX_TYPE:
      pp_c_brace_enclosed_initializer_list (pp, e);
      break;
    default:
      pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (e)->common.code)], "?");
      break;
    }
}
void
pp_c_constant (c_pretty_printer *pp, tree e)
{
  const enum tree_code code = ((enum tree_code) (e)->common.code);
  switch (code)
    {
    case INTEGER_CST:
      {
        tree type = ((e)->common.type);
        if (type == global_trees[TI_BOOLEAN_TYPE])
          pp_c_bool_constant (pp, e);
        else if (type == integer_types[itk_char])
          pp_c_character_constant (pp, e);
        else if (((enum tree_code) (type)->common.code) == ENUMERAL_TYPE
                 && pp_c_enumeration_constant (pp, e))
          ;
        else
          pp_c_integer_constant (pp, e);
      }
      break;
    case REAL_CST:
      pp_c_floating_constant (pp, e);
      break;
    case STRING1_CST:
      pp_c_string1_literal (pp, e);
      break;
    default:
      pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (e)->common.code)], "?");
      break;
    }
}
void
pp_c_identifier (c_pretty_printer *pp, const char *id)
{
  do { if ((&(pp)->base)->padding == pp_before) pp_c_whitespace (pp); } while (0);
  pp_base_string1 ((&(pp)->base), id);
  (&(pp)->base)->padding = pp_before;
}
void
pp_c_primary_expression (c_pretty_printer *pp, tree e)
{
  switch (((enum tree_code) (e)->common.code))
    {
    case VAR_DECL:
    case PARM_DECL:
    case FIELD_DECL:
    case CONST_DECL:
    case FUNCTION_DECL:
    case LABEL_DECL:
      pp_c_tree_decl_identifier (pp, e);
      break;
    case IDENTIFIER_NODE:
      pp_c_identifier (pp, ((const char *) (e)->identifier.id.str));
      break;
    case ERROR_MARK:
      pp_c_identifier (pp, "<erroneous-expression>");
      break;
    case RESULT_DECL:
      pp_c_identifier (pp, "<return-value>");
      break;
    case INTEGER_CST:
    case REAL_CST:
    case STRING1_CST:
      pp_c_constant (pp, e);
      break;
    case TARGET_EXPR:
      pp_c_identifier (pp, "__builtin_memcpy");
      pp_c_left_paren (pp);
      pp_base_character ((&(pp)->base), '&');
      (pp)->primary_expression ((pp), ((e)->exp.operands[0]));
      do { pp_base_character ((&(pp)->base), ','); pp_base_character ((&(pp)->base), ' '); } while (0);
      pp_base_character ((&(pp)->base), '&');
      (pp)->initializer ((pp), ((e)->exp.operands[1]));
      if (((e)->exp.operands[2]))
 {
   do { pp_base_character ((&(pp)->base), ','); pp_base_character ((&(pp)->base), ' '); } while (0);
   pp_c_expression (pp, ((e)->exp.operands[2]));
 }
      pp_c_right_paren (pp);
      break;
    case STMT_EXPR:
      pp_c_left_paren (pp);
      (pp)->statement ((pp), (((e))->exp.operands[0]));
      pp_c_right_paren (pp);
      break;
    default:
      pp_c_left_paren (pp);
      (pp)->expression ((pp), e);
      pp_c_right_paren (pp);
      break;
    }
}
static void
pp_c_initializer (c_pretty_printer *pp, tree e)
{
  if (((enum tree_code) (e)->common.code) == CONSTRUCTOR)
    pp_c_brace_enclosed_initializer_list (pp, e);
  else
    (pp)->expression ((pp), e);
}
void
pp_c_init_declarator (c_pretty_printer *pp, tree t)
{
  (pp)->declarator ((pp), t);
  if (((enum tree_code) (t)->common.code) != FUNCTION_DECL && ((t)->decl.initial))
    {
      tree init = ((t)->decl.initial);
      if (((enum tree_code) (init)->common.code) == TREE_LIST)
        {
          pp_c_left_paren (pp);
          (pp)->expression ((pp), ((init)->list.value1));
          pp_base_character ((&(pp)->base), ')');
        }
      else
        {
          pp_base_character ((&(pp)->base), ' ');
          pp_base_character ((&(pp)->base), '=');
          pp_base_character ((&(pp)->base), ' ');
          pp_c_initializer (pp, init);
        }
    }
}
static void
pp_c_initializer_list (c_pretty_printer *pp, tree e)
{
  tree type = ((e)->common.type);
  const enum tree_code code = ((enum tree_code) (type)->common.code);
  switch (code)
    {
    case RECORD_TYPE:
    case UNION_TYPE:
    case ARRAY_TYPE:
      {
        tree init = ((e)->exp.operands[0]);
        for (; init != (tree) ((void *)0); init = ((init)->common.chain))
          {
            if (code == RECORD_TYPE || code == UNION_TYPE)
              {
                pp_c_dot (pp);
                pp_c_primary_expression (pp, ((init)->list.purpose));
              }
            else
              {
                pp_c_left_bracket (pp);
                if (((init)->list.purpose))
                  pp_c_constant (pp, ((init)->list.purpose));
                pp_c_right_bracket (pp);
              }
            pp_c_whitespace (pp);
            pp_base_character ((&(pp)->base), '=');
            pp_c_whitespace (pp);
            (pp)->initializer ((pp), ((init)->list.value1));
            if (((init)->common.chain))
              do { pp_base_character ((&(pp)->base), ','); pp_base_character ((&(pp)->base), ' '); } while (0);
          }
      }
      return;
    case VECTOR_TYPE:
      if (((enum tree_code) (e)->common.code) == VECTOR_CST)
        pp_c_expression_list (pp, ((e)->vector.elements));
      else if (((enum tree_code) (e)->common.code) == CONSTRUCTOR)
        pp_c_expression_list (pp, ((e)->exp.operands[0]));
      else
        break;
      return;
    case COMPLEX_TYPE:
      if (((enum tree_code) (e)->common.code) == CONSTRUCTOR)
 pp_c_expression_list (pp, ((e)->exp.operands[0]));
      else if (((enum tree_code) (e)->common.code) == COMPLEX_CST || ((enum tree_code) (e)->common.code) == COMPLEX_EXPR)
 {
   const unsigned char cst = ((enum tree_code) (e)->common.code) == COMPLEX_CST;
   (pp)->expression ((pp), cst ? ((e)->complex.real) : ((e)->exp.operands[0]));
   do { pp_base_character ((&(pp)->base), ','); pp_base_character ((&(pp)->base), ' '); } while (0);
   (pp)->expression ((pp), cst ? ((e)->complex.imag) : ((e)->exp.operands[1]));
 }
      else
 break;
      return;
    default:
      break;
    }
  pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (type)->common.code)], "?");
}
static void
pp_c_brace_enclosed_initializer_list (c_pretty_printer *pp, tree l)
{
  pp_c_left_brace (pp);
  pp_c_initializer_list (pp, l);
  pp_c_right_brace (pp);
}
void
pp_c_id_expression (c_pretty_printer *pp, tree t)
{
  switch (((enum tree_code) (t)->common.code))
    {
    case VAR_DECL:
    case PARM_DECL:
    case CONST_DECL:
    case TYPE_DECL:
    case FUNCTION_DECL:
    case FIELD_DECL:
    case LABEL_DECL:
      pp_c_tree_decl_identifier (pp, t);
      break;
    case IDENTIFIER_NODE:
      pp_c_identifier (pp, ((const char *) (t)->identifier.id.str));
      break;
    default:
      pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (t)->common.code)], "?");
      break;
    }
}
void
pp_c_postfix_expression (c_pretty_printer *pp, tree e)
{
  enum tree_code code = ((enum tree_code) (e)->common.code);
  switch (code)
    {
    case POSTINCREMENT_EXPR:
    case POSTDECREMENT_EXPR:
      (pp)->postfix_expression ((pp), ((e)->exp.operands[0]));
      pp_base_string1 ((&(pp)->base), code == POSTINCREMENT_EXPR ? "++" : "--");
      break;
    case ARROW_EXPR:
      (pp)->postfix_expression ((pp), ((e)->exp.operands[0]));
      pp_c_arrow (pp);
      break;
    case ARRAY_REF:
      (pp)->postfix_expression ((pp), ((e)->exp.operands[0]));
      pp_c_left_bracket (pp);
      (pp)->expression ((pp), ((e)->exp.operands[1]));
      pp_c_right_bracket (pp);
      break;
    case CALL_EXPR:
      (pp)->postfix_expression ((pp), ((e)->exp.operands[0]));
      pp_c_call_argument_list (pp, ((e)->exp.operands[1]));
      break;
    case UNORDERED_EXPR:
      pp_c_identifier (pp, flag_isoc99
      ? "isunordered"
      : "__builtin_isunordered");
      goto two_args_fun;
    case ORDERED_EXPR:
      pp_c_identifier (pp, flag_isoc99
      ? "!isunordered"
      : "!__builtin_isunordered");
      goto two_args_fun;
    case UNLT_EXPR:
      pp_c_identifier (pp, flag_isoc99
      ? "!isgreaterequal"
      : "!__builtin_isgreaterequal");
      goto two_args_fun;
    case UNLE_EXPR:
      pp_c_identifier (pp, flag_isoc99
      ? "!isgreater"
      : "!__builtin_isgreater");
      goto two_args_fun;
    case UNGT_EXPR:
      pp_c_identifier (pp, flag_isoc99
      ? "!islessequal"
      : "!__builtin_islessequal");
      goto two_args_fun;
    case UNGE_EXPR:
      pp_c_identifier (pp, flag_isoc99
      ? "!isless"
      : "!__builtin_isless");
      goto two_args_fun;
    case UNEQ_EXPR:
      pp_c_identifier (pp, flag_isoc99
      ? "!islessgreater"
      : "!__builtin_islessgreater");
      goto two_args_fun;
    case LTGT_EXPR:
      pp_c_identifier (pp, flag_isoc99
      ? "islessgreater"
      : "__builtin_islessgreater");
      goto two_args_fun;
    two_args_fun:
      pp_c_left_paren (pp);
      (pp)->expression ((pp), ((e)->exp.operands[0]));
      do { pp_base_character ((&(pp)->base), ','); pp_base_character ((&(pp)->base), ' '); } while (0);
      (pp)->expression ((pp), ((e)->exp.operands[1]));
      pp_c_right_paren (pp);
      break;
    case ABS_EXPR:
      pp_c_identifier (pp, "__builtin_abs");
      pp_c_left_paren (pp);
      (pp)->expression ((pp), ((e)->exp.operands[0]));
      pp_c_right_paren (pp);
      break;
    case COMPONENT_REF:
      {
 tree object = ((e)->exp.operands[0]);
 if (((enum tree_code) (object)->common.code) == INDIRECT_REF)
   {
     (pp)->postfix_expression ((pp), ((object)->exp.operands[0]));
     pp_c_arrow (pp);
   }
 else
   {
     (pp)->postfix_expression ((pp), object);
     pp_c_dot (pp);
   }
 (pp)->expression ((pp), ((e)->exp.operands[1]));
      }
      break;
    case COMPLEX_CST:
    case VECTOR_CST:
    case COMPLEX_EXPR:
      pp_c_compound_literal (pp, e);
      break;
    case COMPOUND_LITERAL_EXPR:
      e = ((((((((e))->exp.operands[0])))->exp.operands[0]))->decl.initial);
    case CONSTRUCTOR:
      (pp)->initializer ((pp), e);
      break;
    case VA_ARG_EXPR:
      pp_c_identifier (pp, "__builtin_va_arg");
      pp_c_left_paren (pp);
      (pp)->assignment_expression ((pp), ((e)->exp.operands[0]));
      do { pp_base_character ((&(pp)->base), ','); pp_base_character ((&(pp)->base), ' '); } while (0);
      (pp)->type_id ((pp), ((e)->common.type));
      pp_c_right_paren (pp);
      break;
    case ADDR_EXPR:
      if (((enum tree_code) (((e)->exp.operands[0]))->common.code) == FUNCTION_DECL)
        {
          pp_c_id_expression (pp, ((e)->exp.operands[0]));
          break;
        }
    default:
      (pp)->primary_expression ((pp), e);
      break;
    }
}
void
pp_c_expression_list (c_pretty_printer *pp, tree e)
{
  for (; e != (tree) ((void *)0); e = ((e)->common.chain))
    {
      (pp)->expression ((pp), ((e)->list.value1));
      if (((e)->common.chain))
 do { pp_base_character ((&(pp)->base), ','); pp_base_character ((&(pp)->base), ' '); } while (0);
    }
}
void
pp_c_call_argument_list (c_pretty_printer *pp, tree t)
{
  pp_c_left_paren (pp);
  if (t && ((enum tree_code) (t)->common.code) == TREE_LIST)
    pp_c_expression_list (pp, t);
  pp_c_right_paren (pp);
}
void
pp_c_unary_expression (c_pretty_printer *pp, tree e)
{
  enum tree_code code = ((enum tree_code) (e)->common.code);
  switch (code)
    {
    case PREINCREMENT_EXPR:
    case PREDECREMENT_EXPR:
      pp_base_string1 ((&(pp)->base), code == PREINCREMENT_EXPR ? "++" : "--");
      pp_c_unary_expression (pp, ((e)->exp.operands[0]));
      break;
    case ADDR_EXPR:
    case INDIRECT_REF:
    case NEGATE_EXPR:
    case BIT_NOT_EXPR:
    case TRUTH_NOT_EXPR:
    case CONJ_EXPR:
      if (code == ADDR_EXPR && ((enum tree_code) (((e)->exp.operands[0]))->common.code) != STRING1_CST)
 pp_base_character ((&(pp)->base), '&');
      else if (code == INDIRECT_REF)
 pp_c_star (pp);
      else if (code == NEGATE_EXPR)
 pp_base_character ((&(pp)->base), '-');
      else if (code == BIT_NOT_EXPR || code == CONJ_EXPR)
 pp_base_character ((&(pp)->base), '~');
      else if (code == TRUTH_NOT_EXPR)
 pp_base_character ((&(pp)->base), '!');
      pp_c_cast_expression (pp, ((e)->exp.operands[0]));
      break;
    case SIZEOF_EXPR:
    case ALIGNOF_EXPR:
      pp_c_identifier (pp, code == SIZEOF_EXPR ? "sizeof" : "__alignof__");
      pp_c_whitespace (pp);
      if ((tree_code_type[(int) (((enum tree_code) (((e)->exp.operands[0]))->common.code))] == 't'))
        pp_c_type_cast (pp, ((e)->exp.operands[0]));
      else
 (pp)->unary_expression ((pp), ((e)->exp.operands[0]));
      break;
    case REALPART_EXPR:
    case IMAGPART_EXPR:
      pp_c_identifier (pp, code == REALPART_EXPR ? "__real__" : "__imag__");
      pp_c_whitespace (pp);
      (pp)->unary_expression ((pp), ((e)->exp.operands[0]));
      break;
    default:
      (pp)->postfix_expression ((pp), e);
      break;
    }
}
void
pp_c_cast_expression (c_pretty_printer *pp, tree e)
{
  switch (((enum tree_code) (e)->common.code))
    {
    case FLOAT_EXPR:
    case FIX_TRUNC_EXPR:
    case CONVERT_EXPR:
      pp_c_type_cast (pp, ((e)->common.type));
      pp_c_cast_expression (pp, ((e)->exp.operands[0]));
      break;
    default:
      (pp)->unary_expression ((pp), e);
    }
}
static void
pp_c_multiplicative_expression (c_pretty_printer *pp, tree e)
{
  enum tree_code code = ((enum tree_code) (e)->common.code);
  switch (code)
    {
    case MULT_EXPR:
    case TRUNC_DIV_EXPR:
    case TRUNC_MOD_EXPR:
      (pp)->multiplicative_expression ((pp), ((e)->exp.operands[0]));
      pp_c_whitespace (pp);
      if (code == MULT_EXPR)
 pp_c_star (pp);
      else if (code == TRUNC_DIV_EXPR)
 pp_base_character ((&(pp)->base), '/');
      else
 pp_base_character ((&(pp)->base), '%');
      pp_c_whitespace (pp);
      pp_c_cast_expression (pp, ((e)->exp.operands[1]));
      break;
    default:
      pp_c_cast_expression (pp, e);
      break;
    }
}
static void
pp_c_additive_expression (c_pretty_printer *pp, tree e)
{
  enum tree_code code = ((enum tree_code) (e)->common.code);
  switch (code)
    {
    case PLUS_EXPR:
    case MINUS_EXPR:
      pp_c_additive_expression (pp, ((e)->exp.operands[0]));
      pp_c_whitespace (pp);
      if (code == PLUS_EXPR)
 pp_base_character ((&(pp)->base), '+');
      else
 pp_base_character ((&(pp)->base), '-');
      pp_c_whitespace (pp);
      (pp)->multiplicative_expression ((pp), ((e)->exp.operands[1]));
      break;
    default:
      (pp)->multiplicative_expression ((pp), e);
      break;
    }
}
static void
pp_c_shift_expression (c_pretty_printer *pp, tree e)
{
  enum tree_code code = ((enum tree_code) (e)->common.code);
  switch (code)
    {
    case LSHIFT_EXPR:
    case RSHIFT_EXPR:
      pp_c_shift_expression (pp, ((e)->exp.operands[0]));
      pp_c_whitespace (pp);
      pp_base_string1 ((&(pp)->base), code == LSHIFT_EXPR ? "<<" : ">>");
      pp_c_whitespace (pp);
      pp_c_additive_expression (pp, ((e)->exp.operands[1]));
      break;
    default:
      pp_c_additive_expression (pp, e);
    }
}
static void
pp_c_relational_expression (c_pretty_printer *pp, tree e)
{
  enum tree_code code = ((enum tree_code) (e)->common.code);
  switch (code)
    {
    case LT_EXPR:
    case GT_EXPR:
    case LE_EXPR:
    case GE_EXPR:
      pp_c_relational_expression (pp, ((e)->exp.operands[0]));
      pp_c_whitespace (pp);
      if (code == LT_EXPR)
 pp_base_character ((&(pp)->base), '<');
      else if (code == GT_EXPR)
 pp_base_character ((&(pp)->base), '>');
      else if (code == LE_EXPR)
 pp_base_string1 ((&(pp)->base), "<=");
      else if (code == GE_EXPR)
 pp_base_string1 ((&(pp)->base), ">=");
      pp_c_whitespace (pp);
      pp_c_shift_expression (pp, ((e)->exp.operands[1]));
      break;
    default:
      pp_c_shift_expression (pp, e);
      break;
    }
}
static void
pp_c_equality_expression (c_pretty_printer *pp, tree e)
{
  enum tree_code code = ((enum tree_code) (e)->common.code);
  switch (code)
    {
    case EQ_EXPR:
    case NE_EXPR:
      pp_c_equality_expression (pp, ((e)->exp.operands[0]));
      pp_c_whitespace (pp);
      pp_base_string1 ((&(pp)->base), code == EQ_EXPR ? "==" : "!=");
      pp_c_whitespace (pp);
      pp_c_relational_expression (pp, ((e)->exp.operands[1]));
      break;
    default:
      pp_c_relational_expression (pp, e);
      break;
    }
}
static void
pp_c_and_expression (c_pretty_printer *pp, tree e)
{
  if (((enum tree_code) (e)->common.code) == BIT_AND_EXPR)
    {
      pp_c_and_expression (pp, ((e)->exp.operands[0]));
      pp_c_whitespace (pp);
      pp_base_character ((&(pp)->base), '&');
      pp_c_whitespace (pp);
      pp_c_equality_expression (pp, ((e)->exp.operands[1]));
    }
  else
    pp_c_equality_expression (pp, e);
}
static void
pp_c_exclusive_or_expression (c_pretty_printer *pp, tree e)
{
  if (((enum tree_code) (e)->common.code) == BIT_XOR_EXPR)
    {
      pp_c_exclusive_or_expression (pp, ((e)->exp.operands[0]));
      do { if ((&(pp)->base)->padding == pp_before) pp_c_whitespace (pp); } while (0);
      pp_base_character ((&(pp)->base), '^');
      pp_c_whitespace (pp);
      pp_c_and_expression (pp, ((e)->exp.operands[1]));
    }
  else
    pp_c_and_expression (pp, e);
}
static void
pp_c_inclusive_or_expression (c_pretty_printer *pp, tree e)
{
  if (((enum tree_code) (e)->common.code) == BIT_IOR_EXPR)
    {
      pp_c_exclusive_or_expression (pp, ((e)->exp.operands[0]));
      pp_c_whitespace (pp);
      pp_base_character ((&(pp)->base), '|');
      pp_c_whitespace (pp);
      pp_c_exclusive_or_expression (pp, ((e)->exp.operands[1]));
    }
  else
    pp_c_exclusive_or_expression (pp, e);
}
static void
pp_c_logical_and_expression (c_pretty_printer *pp, tree e)
{
  if (((enum tree_code) (e)->common.code) == TRUTH_ANDIF_EXPR)
    {
      pp_c_logical_and_expression (pp, ((e)->exp.operands[0]));
      pp_c_whitespace (pp);
      pp_base_string1 ((&(pp)->base), "&&");
      pp_c_whitespace (pp);
      pp_c_inclusive_or_expression (pp, ((e)->exp.operands[1]));
    }
  else
    pp_c_inclusive_or_expression (pp, e);
}
void
pp_c_logical_or_expression (c_pretty_printer *pp, tree e)
{
  if (((enum tree_code) (e)->common.code) == TRUTH_ORIF_EXPR)
    {
      pp_c_logical_or_expression (pp, ((e)->exp.operands[0]));
      pp_c_whitespace (pp);
      pp_base_string1 ((&(pp)->base), "||");
      pp_c_whitespace (pp);
      pp_c_logical_and_expression (pp, ((e)->exp.operands[1]));
    }
  else
    pp_c_logical_and_expression (pp, e);
}
static void
pp_c_conditional_expression (c_pretty_printer *pp, tree e)
{
  if (((enum tree_code) (e)->common.code) == COND_EXPR)
    {
      pp_c_logical_or_expression (pp, ((e)->exp.operands[0]));
      pp_c_whitespace (pp);
      pp_base_character ((&(pp)->base), '?');
      pp_c_whitespace (pp);
      (pp)->expression ((pp), ((e)->exp.operands[1]));
      pp_c_whitespace (pp);
      pp_base_character ((&(pp)->base), ':');
      pp_c_whitespace (pp);
      pp_c_conditional_expression (pp, ((e)->exp.operands[2]));
    }
  else
    pp_c_logical_or_expression (pp, e);
}
static void
pp_c_assignment_expression (c_pretty_printer *pp, tree e)
{
  if (((enum tree_code) (e)->common.code) == MODIFY_EXPR || ((enum tree_code) (e)->common.code) == INIT_EXPR)
    {
      pp_c_unary_expression (pp, ((e)->exp.operands[0]));
      pp_c_whitespace (pp);
      pp_base_character ((&(pp)->base), '=');
      pp_base_character ((&(pp)->base), ' ');
      pp_c_expression (pp, ((e)->exp.operands[1]));
    }
  else
    pp_c_conditional_expression (pp, e);
}
void
pp_c_expression (c_pretty_printer *pp, tree e)
{
  switch (((enum tree_code) (e)->common.code))
    {
    case INTEGER_CST:
      pp_c_integer_constant (pp, e);
      break;
    case REAL_CST:
      pp_c_floating_constant (pp, e);
      break;
    case STRING1_CST:
      pp_c_string1_literal (pp, e);
      break;
    case IDENTIFIER_NODE:
    case FUNCTION_DECL:
    case VAR_DECL:
    case CONST_DECL:
    case PARM_DECL:
    case RESULT_DECL:
    case FIELD_DECL:
    case LABEL_DECL:
    case ERROR_MARK:
    case STMT_EXPR:
      (pp)->primary_expression ((pp), e);
      break;
    case POSTINCREMENT_EXPR:
    case POSTDECREMENT_EXPR:
    case ARROW_EXPR:
    case ARRAY_REF:
    case CALL_EXPR:
    case COMPONENT_REF:
    case COMPLEX_CST:
    case COMPLEX_EXPR:
    case VECTOR_CST:
    case ORDERED_EXPR:
    case UNORDERED_EXPR:
    case LTGT_EXPR:
    case UNEQ_EXPR:
    case UNLE_EXPR:
    case UNLT_EXPR:
    case UNGE_EXPR:
    case UNGT_EXPR:
    case ABS_EXPR:
    case CONSTRUCTOR:
    case COMPOUND_LITERAL_EXPR:
    case VA_ARG_EXPR:
      (pp)->postfix_expression ((pp), e);
      break;
    case CONJ_EXPR:
    case ADDR_EXPR:
    case INDIRECT_REF:
    case NEGATE_EXPR:
    case BIT_NOT_EXPR:
    case TRUTH_NOT_EXPR:
    case PREINCREMENT_EXPR:
    case PREDECREMENT_EXPR:
    case SIZEOF_EXPR:
    case ALIGNOF_EXPR:
    case REALPART_EXPR:
    case IMAGPART_EXPR:
      pp_c_unary_expression (pp, e);
      break;
    case FLOAT_EXPR:
    case FIX_TRUNC_EXPR:
    case CONVERT_EXPR:
      pp_c_cast_expression (pp, e);
      break;
    case MULT_EXPR:
    case TRUNC_MOD_EXPR:
    case TRUNC_DIV_EXPR:
      (pp)->multiplicative_expression ((pp), e);
      break;
    case LSHIFT_EXPR:
    case RSHIFT_EXPR:
      pp_c_shift_expression (pp, e);
      break;
    case LT_EXPR:
    case GT_EXPR:
    case LE_EXPR:
    case GE_EXPR:
      pp_c_relational_expression (pp, e);
      break;
    case BIT_AND_EXPR:
      pp_c_and_expression (pp, e);
      break;
    case BIT_XOR_EXPR:
      pp_c_exclusive_or_expression (pp, e);
      break;
    case BIT_IOR_EXPR:
      pp_c_inclusive_or_expression (pp, e);
      break;
    case TRUTH_ANDIF_EXPR:
      pp_c_logical_and_expression (pp, e);
      break;
    case TRUTH_ORIF_EXPR:
      pp_c_logical_or_expression (pp, e);
      break;
    case EQ_EXPR:
    case NE_EXPR:
      pp_c_equality_expression (pp, e);
      break;
    case COND_EXPR:
      (pp)->conditional_expression ((pp), e);
      break;
    case PLUS_EXPR:
    case MINUS_EXPR:
      pp_c_additive_expression (pp, e);
      break;
    case MODIFY_EXPR:
    case INIT_EXPR:
      (pp)->assignment_expression ((pp), e);
      break;
    case COMPOUND_EXPR:
      pp_c_left_paren (pp);
      (pp)->expression ((pp), ((e)->exp.operands[0]));
      do { pp_base_character ((&(pp)->base), ','); pp_base_character ((&(pp)->base), ' '); } while (0);
      (pp)->assignment_expression ((pp), ((e)->exp.operands[1]));
      pp_c_right_paren (pp);
      break;
    case NOP_EXPR:
    case NON_LVALUE_EXPR:
    case SAVE_EXPR:
    case UNSAVE_EXPR:
      (pp)->expression ((pp), ((e)->exp.operands[0]));
      break;
    case TARGET_EXPR:
      (pp)->postfix_expression ((pp), ((e)->exp.operands[1]));
      break;
    default:
      pp_verbatim ((&(pp)->base), "#`%s' not supported by %s#", tree_code_name[(int) ((enum tree_code) (e)->common.code)], "?");
      break;
    }
}
void
pp_c_statement (c_pretty_printer *pp, tree stmt)
{
  enum tree_code code;
  if (stmt == ((void *)0))
    return;
  if ((&(pp)->base)->need_newline)
    do { (&(pp)->base)->indent1_skip += 0; pp_base_newline ((&(pp)->base)); pp_base_indent1 ((&(pp)->base)); (&(pp)->base)->need_newline = 0; } while (0);
  code = ((enum tree_code) (stmt)->common.code);
  switch (code)
    {
    case EXPR_STMT:
      (pp)->expression ((pp), (((stmt))->exp.operands[0]));
      pp_c_semicolon (pp);
      (&(pp)->base)->need_newline = 1;
      break;
    case SWITCH_STMT:
      pp_c_identifier (pp, "switch");
      pp_base_character ((&(pp)->base), ' ');
      pp_c_left_paren (pp);
      (pp)->expression ((pp), (((stmt))->exp.operands[0]));
      pp_c_right_paren (pp);
      (&(pp)->base)->indent1_skip += 3;
      (&(pp)->base)->need_newline = 1;
      (pp)->statement ((pp), (((stmt))->exp.operands[1]));
      do { (&(pp)->base)->indent1_skip += -3; pp_base_newline ((&(pp)->base)); pp_base_indent1 ((&(pp)->base)); (&(pp)->base)->need_newline = 0; } while (0);
      break;
    case WHILE_STMT:
      pp_c_identifier (pp, "while");
      pp_base_character ((&(pp)->base), ' ');
      pp_c_left_paren (pp);
      (pp)->expression ((pp), (((stmt))->exp.operands[0]));
      pp_c_right_paren (pp);
      do { (&(pp)->base)->indent1_skip += 3; pp_base_newline ((&(pp)->base)); pp_base_indent1 ((&(pp)->base)); (&(pp)->base)->need_newline = 0; } while (0);
      (pp)->statement ((pp), (((stmt))->exp.operands[1]));
      (&(pp)->base)->indent1_skip -= 3;
      (&(pp)->base)->need_newline = 1;
      break;
    case DO_STMT:
      pp_c_identifier (pp, "do");
      do { (&(pp)->base)->indent1_skip += 3; pp_base_newline ((&(pp)->base)); pp_base_indent1 ((&(pp)->base)); (&(pp)->base)->need_newline = 0; } while (0);
      (pp)->statement ((pp), (((stmt))->exp.operands[1]));
      do { (&(pp)->base)->indent1_skip += -3; pp_base_newline ((&(pp)->base)); pp_base_indent1 ((&(pp)->base)); (&(pp)->base)->need_newline = 0; } while (0);
      pp_c_identifier (pp, "while");
      pp_base_character ((&(pp)->base), ' ');
      pp_c_left_paren (pp);
      (pp)->expression ((pp), (((stmt))->exp.operands[0]));
      pp_c_right_paren (pp);
      pp_c_semicolon (pp);
      (&(pp)->base)->need_newline = 1;
      break;
    case FOR_STMT:
      pp_c_identifier (pp, "for");
      pp_base_character ((&(pp)->base), ' ');
      pp_c_left_paren (pp);
      if ((((stmt))->exp.operands[0]))
        (pp)->statement ((pp), (((stmt))->exp.operands[0]));
      else
        pp_c_semicolon (pp);
      (&(pp)->base)->need_newline = 0;
      pp_c_whitespace (pp);
      if ((((stmt))->exp.operands[1]))
 (pp)->expression ((pp), (((stmt))->exp.operands[1]));
      pp_c_semicolon (pp);
      (&(pp)->base)->need_newline = 0;
      pp_c_whitespace (pp);
      if ((((stmt))->exp.operands[2]))
 (pp)->expression ((pp), (((stmt))->exp.operands[2]));
      pp_c_right_paren (pp);
      do { (&(pp)->base)->indent1_skip += 3; pp_base_newline ((&(pp)->base)); pp_base_indent1 ((&(pp)->base)); (&(pp)->base)->need_newline = 0; } while (0);
      (pp)->statement ((pp), (((stmt))->exp.operands[3]));
      (&(pp)->base)->indent1_skip -= 3;
      (&(pp)->base)->need_newline = 1;
      break;
    case BREAK_STMT:
    case CONTINUE_STMT:
      pp_base_string1 ((&(pp)->base), code == BREAK_STMT ? "break" : "continue");
      pp_c_semicolon (pp);
      (&(pp)->base)->need_newline = 1;
      break;
    default:
      dump_generic_node ((&(pp)->base), stmt, (&(pp)->base)->indent1_skip, 0, 1);
      break;
    }
}
void
pp_c_pretty_printer_init (c_pretty_printer *pp)
{
  pp->offset_list = 0;
  pp->declaration = pp_c_declaration;
  pp->declaration_specifiers = pp_c_declaration_specifiers;
  pp->declarator = pp_c_declarator;
  pp->direct_declarator = pp_c_direct_declarator;
  pp->type_specifier_seq = pp_c_specifier_qualifier_list;
  pp->abstract_declarator = pp_c_abstract_declarator;
  pp->direct_abstract_declarator = pp_c_direct_abstract_declarator;
  pp->ptr_operator = pp_c_pointer;
  pp->parameter_list = pp_c_parameter_type_list;
  pp->type_id = pp_c_type_id;
  pp->simple_type_specifier = pp_c_type_specifier;
  pp->function_specifier = pp_c_function_specifier;
  pp->storage_class_specifier = pp_c_storage_class_specifier;
  pp->statement = pp_c_statement;
  pp->id_expression = pp_c_id_expression;
  pp->primary_expression = pp_c_primary_expression;
  pp->postfix_expression = pp_c_postfix_expression;
  pp->unary_expression = pp_c_unary_expression;
  pp->initializer = pp_c_initializer;
  pp->multiplicative_expression = pp_c_multiplicative_expression;
  pp->conditional_expression = pp_c_conditional_expression;
  pp->assignment_expression = pp_c_assignment_expression;
  pp->expression = pp_c_expression;
}
void
print_c_tree (FILE *file, tree t)
{
  static c_pretty_printer pp_rec;
  static unsigned char initialized = 0;
  c_pretty_printer *pp = &pp_rec;
  if (!initialized)
    {
      initialized = 1;
      pp_construct ((&(pp)->base), ((void *)0), 0);
      pp_c_pretty_printer_init (pp);
      (&(pp)->base)->need_newline = 1;
    }
  (&(pp)->base)->buffer->stream = file;
  (pp)->statement ((pp), t);
  pp_base_newline ((&(pp)->base));
  pp_base_flush ((&(pp)->base));
}
void
debug_c_tree (tree t)
{
  print_c_tree (stderr, t);
  fputc_unlocked ('\n', stderr);
}
void
pp_c_tree_decl_identifier (c_pretty_printer *pp, tree t)
{
  const char *name;
  if (!(tree_code_type[(int) (((enum tree_code) (t)->common.code))] == 'd'))
    fancy_abort ("gcc.c", 748553, "?");
  if (((t)->decl.name))
    name = ((const char *) (((t)->decl.name))->identifier.id.str);
  else
    {
      static char xname[8];
      sprintf (xname, "<U%4x>", ((unsigned)((unsigned long)(t) & 0xffff)));
      name = xname;
    }
  pp_c_identifier (pp, name);
}
int main (int argc, char **argv);
int
main (int argc, char **argv)
{
  return toplev_main (argc, (const char **) argv);
}
static short *malloced_yyss;
static void *malloced_yyvs;
typedef union {long itype; tree ttype; enum tree_code code;
 location_t location; } yystype;
static tree current_declspecs;
static tree prefix_attributes;
static tree all_prefix_attributes;
static tree declspec_stack;
static void yyprint (FILE *, int, yystype);
static void yyerror (const char *);
static int yylexname (void);
static int _yylex (void);
static int yylex (void);
static void init_reswords (void);
void
c_parse_init (void)
{
  init_reswords ();
}
static const char yytranslate[] =
{
       0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 93, 2, 2, 2, 61, 52, 2,
      68, 95, 59, 57, 94, 58, 67, 60, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 47, 90,
       2, 45, 2, 46, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 69, 2, 97, 51, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 96, 50, 91, 92, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 1, 3, 4, 5,
       6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
      16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
      26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
      36, 37, 38, 39, 40, 41, 42, 43, 44, 48,
      49, 53, 54, 55, 56, 62, 63, 64, 65, 66,
      70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
      80, 81, 82, 83, 84, 85, 86, 87, 88, 89
};
static const short yyprhs[] =
{
       0, 0, 1, 3, 4, 7, 8, 12, 14, 16,
      18, 21, 25, 30, 35, 38, 41, 44, 46, 47,
      48, 57, 62, 63, 64, 73, 78, 79, 80, 88,
      92, 94, 96, 98, 100, 102, 104, 106, 108, 110,
     112, 113, 115, 117, 121, 123, 126, 129, 132, 135,
     138, 143, 146, 151, 154, 157, 159, 161, 163, 165,
     170, 172, 176, 180, 184, 188, 192, 196, 200, 204,
     208, 212, 216, 220, 221, 226, 227, 232, 233, 234,
     242, 243, 249, 253, 257, 259, 261, 263, 265, 266,
     274, 278, 282, 286, 290, 295, 302, 309, 314, 323,
     328, 335, 340, 345, 349, 353, 356, 359, 361, 365,
     370, 371, 373, 376, 378, 380, 383, 386, 391, 396,
     399, 402, 405, 406, 408, 413, 418, 422, 426, 429,
     432, 434, 437, 440, 443, 446, 449, 451, 454, 456,
     459, 462, 465, 468, 471, 474, 476, 479, 482, 485,
     488, 491, 494, 497, 500, 503, 506, 509, 512, 515,
     518, 521, 524, 526, 529, 532, 535, 538, 541, 544,
     547, 550, 553, 556, 559, 562, 565, 568, 571, 574,
     577, 580, 583, 586, 589, 592, 595, 598, 601, 604,
     607, 610, 613, 616, 619, 622, 625, 628, 631, 634,
     637, 640, 643, 646, 649, 652, 655, 658, 660, 662,
     664, 666, 668, 670, 672, 674, 676, 678, 680, 682,
     684, 686, 688, 690, 692, 694, 696, 698, 700, 702,
     704, 706, 708, 710, 712, 714, 716, 718, 720, 722,
     724, 726, 728, 730, 732, 734, 736, 738, 740, 742,
     744, 746, 748, 750, 752, 754, 756, 758, 760, 762,
     764, 766, 768, 770, 771, 773, 775, 777, 779, 781,
     783, 785, 787, 792, 797, 799, 804, 806, 811, 812,
     819, 823, 824, 831, 835, 836, 838, 840, 843, 852,
     856, 858, 862, 863, 865, 870, 877, 882, 884, 886,
     888, 890, 892, 894, 896, 897, 902, 904, 905, 908,
     910, 914, 918, 921, 922, 927, 929, 930, 935, 937,
     939, 941, 944, 947, 953, 957, 958, 959, 966, 967,
     968, 975, 977, 979, 984, 988, 991, 995, 997, 999,
    1001, 1005, 1008, 1010, 1014, 1017, 1021, 1025, 1030, 1034,
    1039, 1043, 1046, 1048, 1050, 1053, 1055, 1058, 1060, 1063,
    1064, 1072, 1078, 1079, 1087, 1093, 1094, 1103, 1104, 1112,
    1115, 1118, 1121, 1122, 1124, 1125, 1127, 1129, 1132, 1133,
    1137, 1140, 1144, 1147, 1151, 1153, 1155, 1158, 1160, 1165,
    1167, 1172, 1175, 1180, 1184, 1187, 1192, 1196, 1198, 1202,
    1204, 1206, 1210, 1211, 1215, 1216, 1218, 1219, 1221, 1224,
    1226, 1228, 1230, 1234, 1237, 1241, 1246, 1250, 1253, 1256,
    1258, 1263, 1267, 1272, 1278, 1284, 1286, 1288, 1290, 1292,
    1294, 1297, 1300, 1303, 1306, 1308, 1311, 1314, 1317, 1319,
    1322, 1325, 1328, 1331, 1333, 1336, 1338, 1340, 1342, 1344,
    1347, 1348, 1349, 1351, 1353, 1356, 1360, 1362, 1365, 1367,
    1369, 1373, 1375, 1377, 1380, 1383, 1384, 1385, 1388, 1392,
    1395, 1398, 1401, 1405, 1409, 1411, 1421, 1431, 1439, 1447,
    1448, 1449, 1459, 1460, 1461, 1475, 1476, 1478, 1481, 1483,
    1486, 1488, 1501, 1502, 1511, 1514, 1516, 1518, 1520, 1522,
    1524, 1527, 1530, 1533, 1537, 1539, 1543, 1548, 1550, 1552,
    1554, 1558, 1564, 1567, 1572, 1579, 1580, 1582, 1585, 1590,
    1599, 1601, 1605, 1611, 1619, 1620, 1622, 1623, 1625, 1627,
    1631, 1638, 1648, 1650, 1654, 1655, 1656, 1657, 1661, 1664,
    1665, 1666, 1673, 1676, 1677, 1679, 1681, 1685, 1687, 1691,
    1696, 1701, 1705, 1710, 1714, 1719, 1724, 1728, 1733, 1737,
    1739, 1740, 1744, 1746, 1749, 1751, 1755, 1757, 1761
};
static const short yyrhs[] =
{
      -1, 99, 0, 0, 100, 102, 0, 0, 99, 101,
     102, 0, 104, 0, 103, 0, 276, 0, 301, 102,
       0, 135, 169, 90, 0, 155, 135, 169, 90, 0,
     154, 135, 168, 90, 0, 161, 90, 0, 1, 90,
       0, 1, 91, 0, 90, 0, 0, 0, 154, 135,
     197, 105, 130, 249, 106, 243, 0, 154, 135, 197,
       1, 0, 0, 0, 155, 135, 202, 107, 130, 249,
     108, 243, 0, 155, 135, 202, 1, 0, 0, 0,
     135, 202, 109, 130, 249, 110, 243, 0, 135, 202,
       1, 0, 3, 0, 4, 0, 52, 0, 58, 0,
      57, 0, 63, 0, 64, 0, 92, 0, 93, 0,
     115, 0, 0, 115, 0, 121, 0, 115, 94, 121,
       0, 127, 0, 59, 120, 0, 301, 120, 0, 112,
     120, 0, 49, 111, 0, 117, 116, 0, 117, 68,
     223, 95, 0, 118, 116, 0, 118, 68, 223, 95,
       0, 34, 120, 0, 35, 120, 0, 12, 0, 30,
       0, 29, 0, 116, 0, 68, 223, 95, 120, 0,
     120, 0, 121, 57, 121, 0, 121, 58, 121, 0,
     121, 59, 121, 0, 121, 60, 121, 0, 121, 61,
     121, 0, 121, 55, 121, 0, 121, 56, 121, 0,
     121, 54, 121, 0, 121, 53, 121, 0, 121, 52,
     121, 0, 121, 50, 121, 0, 121, 51, 121, 0,
       0, 121, 49, 122, 121, 0, 0, 121, 48, 123,
     121, 0, 0, 0, 121, 46, 124, 113, 47, 125,
     121, 0, 0, 121, 46, 126, 47, 121, 0, 121,
      45, 121, 0, 121, 44, 121, 0, 3, 0, 9,
       0, 10, 0, 42, 0, 0, 68, 223, 95, 96,
     128, 183, 91, 0, 68, 113, 95, 0, 68, 1,
      95, 0, 247, 245, 95, 0, 247, 1, 95, 0,
     127, 68, 114, 95, 0, 36, 68, 121, 94, 223,
      95, 0, 43, 68, 223, 94, 129, 95, 0, 43,
      68, 1, 95, 0, 37, 68, 121, 94, 121, 94,
     121, 95, 0, 37, 68, 1, 95, 0, 38, 68,
     223, 94, 223, 95, 0, 38, 68, 1, 95, 0,
     127, 69, 113, 97, 0, 127, 67, 111, 0, 127,
      66, 111, 0, 127, 63, 0, 127, 64, 0, 111,
       0, 129, 67, 111, 0, 129, 69, 113, 97, 0,
       0, 132, 0, 249, 133, 0, 131, 0, 238, 0,
     132, 131, 0, 131, 238, 0, 156, 135, 168, 90,
       0, 157, 135, 169, 90, 0, 156, 90, 0, 157,
      90, 0, 249, 137, 0, 0, 174, 0, 154, 135,
     168, 90, 0, 155, 135, 169, 90, 0, 154, 135,
     191, 0, 155, 135, 194, 0, 161, 90, 0, 301,
     137, 0, 8, 0, 138, 8, 0, 139, 8, 0,
     138, 175, 0, 140, 8, 0, 141, 8, 0, 175,
       0, 140, 175, 0, 163, 0, 142, 8, 0, 143,
       8, 0, 142, 165, 0, 143, 165, 0, 138, 163,
       0, 139, 163, 0, 164, 0, 142, 175, 0, 142,
     166, 0, 143, 166, 0, 138, 164, 0, 139, 164,
       0, 144, 8, 0, 145, 8, 0, 144, 165, 0,
     145, 165, 0, 140, 163, 0, 141, 163, 0, 144,
     175, 0, 144, 166, 0, 145, 166, 0, 140, 164,
       0, 141, 164, 0, 180, 0, 146, 8, 0, 147,
       8, 0, 138, 180, 0, 139, 180, 0, 146, 180,
       0, 147, 180, 0, 146, 175, 0, 148, 8, 0,
     149, 8, 0, 140, 180, 0, 141, 180, 0, 148,
     180, 0, 149, 180, 0, 148, 175, 0, 150, 8,
       0, 151, 8, 0, 150, 165, 0, 151, 165, 0,
     146, 163, 0, 147, 163, 0, 142, 180, 0, 143,
     180, 0, 150, 180, 0, 151, 180, 0, 150, 175,
       0, 150, 166, 0, 151, 166, 0, 146, 164, 0,
     147, 164, 0, 152, 8, 0, 153, 8, 0, 152,
     165, 0, 153, 165, 0, 148, 163, 0, 149, 163,
       0, 144, 180, 0, 145, 180, 0, 152, 180, 0,
     153, 180, 0, 152, 175, 0, 152, 166, 0, 153,
     166, 0, 148, 164, 0, 149, 164, 0, 142, 0,
     143, 0, 144, 0, 145, 0, 150, 0, 151, 0,
     152, 0, 153, 0, 138, 0, 139, 0, 140, 0,
     141, 0, 146, 0, 147, 0, 148, 0, 149, 0,
     142, 0, 143, 0, 150, 0, 151, 0, 138, 0,
     139, 0, 146, 0, 147, 0, 142, 0, 143, 0,
     144, 0, 145, 0, 138, 0, 139, 0, 140, 0,
     141, 0, 142, 0, 143, 0, 144, 0, 145, 0,
     138, 0, 139, 0, 140, 0, 141, 0, 138, 0,
     139, 0, 140, 0, 141, 0, 142, 0, 143, 0,
     144, 0, 145, 0, 146, 0, 147, 0, 148, 0,
     149, 0, 150, 0, 151, 0, 152, 0, 153, 0,
       0, 159, 0, 165, 0, 167, 0, 166, 0, 7,
       0, 211, 0, 206, 0, 4, 0, 119, 68, 113,
      95, 0, 119, 68, 223, 95, 0, 170, 0, 168,
      94, 136, 170, 0, 172, 0, 169, 94, 136, 172,
       0, 0, 197, 275, 174, 45, 171, 181, 0, 197,
     275, 174, 0, 0, 202, 275, 174, 45, 173, 181,
       0, 202, 275, 174, 0, 0, 175, 0, 176, 0,
     175, 176, 0, 31, 284, 68, 68, 177, 95, 95,
     285, 0, 31, 1, 285, 0, 178, 0, 177, 94,
     178, 0, 0, 179, 0, 179, 68, 3, 95, 0,
     179, 68, 3, 94, 115, 95, 0, 179, 68, 114,
      95, 0, 111, 0, 180, 0, 7, 0, 8, 0,
       6, 0, 5, 0, 121, 0, 0, 96, 182, 183,
      91, 0, 1, 0, 0, 184, 212, 0, 185, 0,
     184, 94, 185, 0, 189, 45, 187, 0, 190, 187,
       0, 0, 111, 47, 186, 187, 0, 187, 0, 0,
      96, 188, 183, 91, 0, 121, 0, 1, 0, 190,
       0, 189, 190, 0, 67, 111, 0, 69, 121, 11,
     121, 97, 0, 69, 121, 97, 0, 0, 0, 197,
     192, 130, 249, 193, 248, 0, 0, 0, 202, 195,
     130, 249, 196, 248, 0, 198, 0, 202, 0, 68,
     174, 198, 95, 0, 198, 68, 296, 0, 198, 231,
       0, 59, 162, 198, 0, 4, 0, 200, 0, 201,
       0, 200, 68, 296, 0, 200, 231, 0, 4, 0,
     201, 68, 296, 0, 201, 231, 0, 59, 162, 200,
       0, 59, 162, 201, 0, 68, 174, 201, 95, 0,
     202, 68, 296, 0, 68, 174, 202, 95, 0, 59,
     162, 202, 0, 202, 231, 0, 3, 0, 14, 0,
      14, 175, 0, 15, 0, 15, 175, 0, 13, 0,
      13, 175, 0, 0, 203, 111, 96, 207, 214, 91,
     174, 0, 203, 96, 214, 91, 174, 0, 0, 204,
     111, 96, 208, 214, 91, 174, 0, 204, 96, 214,
      91, 174, 0, 0, 205, 111, 96, 209, 221, 213,
      91, 174, 0, 0, 205, 96, 210, 221, 213, 91,
     174, 0, 203, 111, 0, 204, 111, 0, 205, 111,
       0, 0, 94, 0, 0, 94, 0, 215, 0, 215,
     216, 0, 0, 215, 216, 90, 0, 215, 90, 0,
     158, 135, 217, 0, 158, 135, 0, 159, 135, 218,
       0, 159, 0, 1, 0, 301, 216, 0, 219, 0,
     217, 94, 136, 219, 0, 220, 0, 218, 94, 136,
     220, 0, 197, 174, 0, 197, 47, 121, 174, 0,
      47, 121, 174, 0, 202, 174, 0, 202, 47, 121,
     174, 0, 47, 121, 174, 0, 222, 0, 221, 94,
     222, 0, 1, 0, 111, 0, 111, 45, 121, 0,
       0, 160, 224, 225, 0, 0, 227, 0, 0, 227,
       0, 228, 175, 0, 229, 0, 228, 0, 230, 0,
      59, 162, 228, 0, 59, 162, 0, 59, 162, 229,
       0, 68, 174, 227, 95, 0, 230, 68, 286, 0,
     230, 231, 0, 68, 286, 0, 231, 0, 69, 162,
     121, 97, 0, 69, 162, 97, 0, 69, 162, 59,
      97, 0, 69, 6, 162, 121, 97, 0, 69, 159,
       6, 121, 97, 0, 233, 0, 234, 0, 235, 0,
     236, 0, 252, 0, 233, 252, 0, 234, 252, 0,
     235, 252, 0, 236, 252, 0, 134, 0, 233, 134,
       0, 234, 134, 0, 236, 134, 0, 253, 0, 233,
     253, 0, 234, 253, 0, 235, 253, 0, 236, 253,
       0, 238, 0, 237, 238, 0, 233, 0, 234, 0,
     235, 0, 236, 0, 1, 90, 0, 0, 0, 241,
       0, 242, 0, 241, 242, 0, 33, 300, 90, 0,
     248, 0, 1, 248, 0, 96, 0, 91, 0, 240,
     246, 91, 0, 232, 0, 1, 0, 68, 96, 0,
     244, 245, 0, 0, 0, 250, 253, 0, 239, 250,
     252, 0, 249, 272, 0, 249, 273, 0, 249, 113,
       0, 239, 250, 257, 0, 239, 250, 90, 0, 251,
       0, 16, 239, 249, 68, 254, 95, 255, 17, 256,
       0, 16, 239, 249, 68, 254, 95, 256, 17, 256,
       0, 16, 239, 249, 68, 254, 95, 255, 0, 16,
     239, 249, 68, 254, 95, 256, 0, 0, 0, 18,
     239, 249, 68, 254, 95, 258, 259, 251, 0, 0,
       0, 19, 239, 249, 258, 259, 251, 18, 262, 263,
      68, 254, 95, 90, 0, 0, 113, 0, 264, 90,
       0, 137, 0, 249, 264, 0, 264, 0, 20, 239,
      68, 265, 249, 266, 90, 267, 95, 258, 259, 251,
       0, 0, 21, 239, 68, 113, 95, 270, 258, 251,
       0, 113, 90, 0, 257, 0, 260, 0, 261, 0,
     268, 0, 269, 0, 24, 90, 0, 25, 90, 0,
      26, 90, 0, 26, 113, 90, 0, 277, 0, 27,
     111, 90, 0, 27, 59, 113, 90, 0, 90, 0,
     248, 0, 271, 0, 22, 121, 47, 0, 22, 121,
      11, 121, 47, 0, 23, 47, 0, 111, 249, 47,
     174, 0, 28, 284, 68, 10, 95, 285, 0, 0,
     274, 0, 274, 90, 0, 28, 1, 285, 90, 0,
      28, 279, 284, 68, 278, 95, 285, 90, 0, 10,
       0, 10, 47, 280, 0, 10, 47, 280, 47, 280,
       0, 10, 47, 280, 47, 280, 47, 283, 0, 0,
       8, 0, 0, 281, 0, 282, 0, 281, 94, 282,
       0, 10, 285, 68, 113, 95, 284, 0, 69, 111,
      97, 10, 285, 68, 113, 95, 284, 0, 10, 0,
     283, 94, 10, 0, 0, 0, 0, 174, 287, 288,
       0, 291, 95, 0, 0, 0, 292, 90, 289, 174,
     290, 288, 0, 1, 95, 0, 0, 11, 0, 292,
       0, 292, 94, 11, 0, 294, 0, 292, 94, 293,
       0, 154, 135, 199, 174, 0, 154, 135, 202, 174,
       0, 154, 135, 226, 0, 155, 135, 202, 174, 0,
     155, 135, 226, 0, 156, 295, 199, 174, 0, 156,
     295, 202, 174, 0, 156, 295, 226, 0, 157, 295,
     202, 174, 0, 157, 295, 226, 0, 135, 0, 0,
     174, 297, 298, 0, 288, 0, 299, 95, 0, 3,
       0, 299, 94, 3, 0, 111, 0, 300, 94, 111,
       0, 32, 0
};
static const short yyrline[] =
{
       0, 311, 315, 322, 322, 324, 324, 327, 329, 330,
     331, 335, 343, 345, 347, 349, 350, 351, 356, 356,
     356, 368, 370, 370, 370, 381, 383, 383, 383, 394,
     398, 400, 403, 405, 407, 412, 414, 416, 418, 422,
     426, 429, 432, 435, 439, 441, 444, 447, 451, 453,
     459, 462, 465, 468, 470, 474, 478, 482, 486, 488,
     492, 494, 496, 498, 500, 502, 504, 506, 508, 510,
     512, 514, 516, 518, 518, 525, 525, 532, 532, 532,
     542, 542, 552, 559, 570, 577, 578, 579, 581, 581,
     594, 599, 601, 606, 610, 612, 615, 617, 619, 631,
     633, 643, 645, 647, 649, 654, 656, 666, 669, 671,
     675, 677, 683, 688, 690, 691, 692, 699, 702, 704,
     707, 715, 724, 734, 739, 742, 744, 746, 748, 750,
     806, 810, 813, 818, 824, 828, 833, 837, 842, 846,
     849, 852, 855, 858, 861, 866, 870, 873, 876, 879,
     882, 887, 891, 894, 897, 900, 903, 908, 912, 915,
     918, 921, 926, 930, 933, 936, 942, 948, 954, 962,
     968, 972, 975, 981, 987, 993, 1001, 1007, 1011, 1014,
    1017, 1020, 1023, 1026, 1032, 1038, 1044, 1052, 1056, 1059,
    1062, 1065, 1070, 1074, 1077, 1080, 1083, 1086, 1089, 1095,
    1101, 1107, 1115, 1119, 1122, 1125, 1128, 1134, 1136, 1137,
    1138, 1139, 1140, 1141, 1142, 1145, 1147, 1148, 1149, 1150,
    1151, 1152, 1153, 1156, 1158, 1159, 1160, 1163, 1165, 1166,
    1167, 1170, 1172, 1173, 1174, 1177, 1179, 1180, 1181, 1184,
    1186, 1187, 1188, 1189, 1190, 1191, 1192, 1195, 1197, 1198,
    1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208,
    1209, 1210, 1211, 1215, 1218, 1243, 1245, 1248, 1252, 1255,
    1258, 1262, 1267, 1273, 1279, 1281, 1284, 1286, 1289, 1289,
    1298, 1305, 1305, 1314, 1321, 1324, 1328, 1331, 1335, 1339,
    1343, 1346, 1350, 1353, 1355, 1357, 1359, 1366, 1368, 1369,
    1370, 1373, 1375, 1380, 1382, 1382, 1386, 1391, 1395, 1398,
    1400, 1405, 1409, 1412, 1412, 1418, 1421, 1421, 1426, 1428,
    1431, 1433, 1436, 1439, 1443, 1447, 1447, 1447, 1477, 1477,
    1477, 1510, 1512, 1517, 1520, 1522, 1524, 1526, 1533, 1535,
    1538, 1541, 1543, 1546, 1549, 1551, 1553, 1555, 1562, 1565,
    1567, 1569, 1571, 1574, 1577, 1581, 1584, 1588, 1591, 1601,
    1601, 1609, 1613, 1613, 1618, 1622, 1622, 1627, 1627, 1634,
    1637, 1639, 1647, 1649, 1652, 1654, 1671, 1674, 1679, 1681,
    1683, 1688, 1692, 1702, 1705, 1710, 1712, 1717, 1719, 1723,
    1725, 1729, 1734, 1738, 1744, 1749, 1753, 1762, 1764, 1769,
    1774, 1777, 1781, 1781, 1789, 1792, 1795, 1800, 1804, 1810,
    1812, 1815, 1817, 1821, 1824, 1828, 1831, 1833, 1835, 1837,
    1843, 1846, 1848, 1850, 1853, 1863, 1865, 1866, 1870, 1873,
    1875, 1876, 1877, 1878, 1881, 1883, 1889, 1890, 1893, 1895,
    1896, 1897, 1898, 1901, 1903, 1906, 1908, 1909, 1910, 1913,
    1917, 1923, 1925, 1930, 1932, 1935, 1949, 1952, 1955, 1958,
    1959, 1962, 1964, 1967, 1979, 1987, 1993, 1995, 1999, 2004,
    2022, 2027, 2039, 2044, 2049, 2052, 2057, 2061, 2065, 2071,
    2075, 2079, 2088, 2088, 2088, 2099, 2102, 2105, 2108, 2112,
    2124, 2128, 2138, 2138, 2151, 2154, 2156, 2158, 2160, 2162,
    2164, 2166, 2168, 2170, 2172, 2173, 2175, 2177, 2182, 2185,
    2192, 2194, 2196, 2198, 2214, 2221, 2224, 2228, 2231, 2237,
    2243, 2248, 2251, 2254, 2260, 2263, 2276, 2278, 2281, 2283,
    2287, 2290, 2297, 2300, 2304, 2308, 2318, 2318, 2327, 2329,
    2329, 2329, 2336, 2342, 2344, 2350, 2352, 2356, 2359, 2365,
    2371, 2376, 2379, 2385, 2392, 2398, 2403, 2406, 2412, 2417,
    2426, 2426, 2435, 2437, 2454, 2457, 2462, 2465, 2469
};
static const char *const yytname[] =
{
  "$", "error", "$undefined.", "IDENTIFIER", "TYPENAME", "SCSPEC", "STATIC",
  "TYPESPEC", "TYPE_QUAL", "CONSTANT", "STRING1", "ELLIPSIS", "SIZEOF",
  "ENUM", "STRUCT", "UNION", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH",
  "CASE", "DEFAULT", "BREAK", "CONTINUE", "RETURN", "GOTO", "ASM_KEYWORD",
  "TYPEOF", "ALIGNOF", "ATTRIBUTE", "EXTENSION", "LABEL", "REALPART",
  "IMAGPART", "VA_ARG", "CHOOSE_EXPR", "TYPES_COMPATIBLE_P", "PTR_VALUE",
  "PTR_BASE", "PTR_EXTENT", "FUNC_NAME", "OFFSETOF", "ASSIGN", "'='",
  "'?'", "':'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQCOMPARE",
  "ARITHCOMPARE", "LSHIFT", "RSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'",
  "UNARY", "PLUSPLUS", "MINUSMINUS", "HYPERUNARY", "POINTSAT", "'.'",
  "'('", "'['", "AT_INTERFACE", "AT_IMPLEMENTATION", "AT_END",
  "AT_SELECTOR", "AT_DEFS", "AT_ENCODE", "CLASSNAME", "AT_PUBLIC",
  "AT_PRIVATE", "AT_PROTECTED", "AT_PROTOCOL", "OBJECTNAME", "AT_CLASS",
  "AT_ALIAS", "AT_THROW", "AT_TRY", "AT_CATCH", "AT_FINALLY",
  "AT_SYNCHRONIZED", "OBJC_STRING1", "';'", "'}'", "'~'", "'!'", "','",
  "')'", "'{'", "']'", "program", "extdefs", "@1", "@2", "extdef",
  "datadef", "fndef", "@3", "@4", "@5", "@6", "@7", "@8", "identifier",
  "unop", "expr", "exprlist", "nonnull_exprlist", "unary_expr", "sizeof",
  "alignof", "typeof", "cast_expr", "expr_no_commas", "@9", "@10", "@11",
  "@12", "@13", "primary", "@14", "offsetof_member_designator",
  "old_style_parm_decls", "lineno_datadecl", "datadecls", "datadecl",
  "lineno_decl", "setspecs", "maybe_resetattrs1", "decl",
  "declspecs_nosc_nots_nosa_noea", "declspecs_nosc_nots_nosa_ea",
  "declspecs_nosc_nots_sa_noea", "declspecs_nosc_nots_sa_ea",
  "declspecs_nosc_ts_nosa_noea", "declspecs_nosc_ts_nosa_ea",
  "declspecs_nosc_ts_sa_noea", "declspecs_nosc_ts_sa_ea",
  "declspecs_sc_nots_nosa_noea", "declspecs_sc_nots_nosa_ea",
  "declspecs_sc_nots_sa_noea", "declspecs_sc_nots_sa_ea",
  "declspecs_sc_ts_nosa_noea", "declspecs_sc_ts_nosa_ea",
  "declspecs_sc_ts_sa_noea", "declspecs_sc_ts_sa_ea", "declspecs_ts",
  "declspecs_nots", "declspecs_ts_nosa", "declspecs_nots_nosa",
  "declspecs_nosc_ts", "declspecs_nosc_nots", "declspecs_nosc",
  "declspecs", "maybe_type_quals_attrs1", "typespec_nonattr",
  "typespec_attr", "typespec_reserved_nonattr", "typespec_reserved_attr",
  "typespec_nonreserved_nonattr", "initdecls", "notype_initdecls",
  "initdcl", "@15", "notype_initdcl", "@16", "maybe_attribute",
  "attributes", "attribute", "attribute_list", "attrib", "any_word",
  "scspec", "init", "@17", "initlist_maybe_comma", "initlist1", "initelt",
  "@18", "initval", "@19", "designator_list", "designator",
  "nested_function", "@20", "@21", "notype_nested_function", "@22", "@23",
  "declarator", "after_type_declarator", "parm_declarator",
  "parm_declarator_starttypename", "parm_declarator_nostarttypename",
  "notype_declarator", "struct_head", "union_head", "enum_head",
  "structsp_attr", "@24", "@25", "@26", "@27", "structsp_nonattr",
  "maybecomma", "maybecomma_warn", "component_decl_list",
  "component_decl_list2", "component_decl", "components",
  "components_notype", "component_declarator",
  "component_notype_declarator", "enumlist", "enumerator", "typename",
  "@28", "absdcl", "absdcl_maybe_attribute", "absdcl1", "absdcl1_noea",
  "absdcl1_ea", "direct_absdcl1", "array_declarator", "stmts_and_decls",
  "lineno_stmt_decl_or_labels_ending_stmt",
  "lineno_stmt_decl_or_labels_ending_decl",
  "lineno_stmt_decl_or_labels_ending_label",
  "lineno_stmt_decl_or_labels_ending_error", "lineno_stmt_decl_or_labels",
  "errstmt", "c99_block_start", "maybe_label_decls", "label_decls",
  "label_decl", "compstmt_or_error", "compstmt_start", "compstmt_nostart",
  "compstmt_contents_nonempty", "compstmt_primary_start", "compstmt",
  "save_location", "lineno_labels", "c99_block_lineno_labeled_stmt",
  "lineno_stmt", "lineno_label", "condition", "if_statement_1",
  "if_statement_2", "if_statement", "start_break", "start_continue",
  "while_statement", "do_statement", "@29", "@30", "xexpr",
  "for_init_stmt", "for_cond_expr", "for_incr_expr", "for_statement",
  "switch_statement", "@31", "stmt_nocomp", "stmt", "label",
  "simple_asm_expr", "maybeasm", "asmdef", "asm_stmt", "asm_argument",
  "maybe_volatile", "asm_operands", "nonnull_asm_operands", "asm_operand",
  "asm_clobbers", "stop_string1_translation", "start_string1_translation",
  "parmlist", "@32", "parmlist_1", "@33", "@34", "parmlist_2", "parms",
  "parm", "firstparm", "setspecs_fp", "parmlist_or_identifiers", "@35",
  "parmlist_or_identifiers_1", "identifiers", "identifiers_or_typenames",
  "extension", 0
};
static const short yyr1[] =
{
       0, 98, 98, 100, 99, 101, 99, 102, 102, 102,
     102, 103, 103, 103, 103, 103, 103, 103, 105, 106,
     104, 104, 107, 108, 104, 104, 109, 110, 104, 104,
     111, 111, 112, 112, 112, 112, 112, 112, 112, 113,
     114, 114, 115, 115, 116, 116, 116, 116, 116, 116,
     116, 116, 116, 116, 116, 117, 118, 119, 120, 120,
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
     121, 121, 121, 122, 121, 123, 121, 124, 125, 121,
     126, 121, 121, 121, 127, 127, 127, 127, 128, 127,
     127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
     127, 127, 127, 127, 127, 127, 127, 129, 129, 129,
     130, 130, 131, 132, 132, 132, 132, 133, 133, 133,
     133, 134, 135, 136, 137, 137, 137, 137, 137, 137,
     138, 138, 138, 139, 140, 140, 141, 141, 142, 142,
     142, 142, 142, 142, 142, 143, 143, 143, 143, 143,
     143, 144, 144, 144, 144, 144, 144, 145, 145, 145,
     145, 145, 146, 146, 146, 146, 146, 146, 146, 147,
     148, 148, 148, 148, 148, 148, 149, 150, 150, 150,
     150, 150, 150, 150, 150, 150, 150, 151, 151, 151,
     151, 151, 152, 152, 152, 152, 152, 152, 152, 152,
     152, 152, 153, 153, 153, 153, 153, 154, 154, 154,
     154, 154, 154, 154, 154, 155, 155, 155, 155, 155,
     155, 155, 155, 156, 156, 156, 156, 157, 157, 157,
     157, 158, 158, 158, 158, 159, 159, 159, 159, 160,
     160, 160, 160, 160, 160, 160, 160, 161, 161, 161,
     161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
     161, 161, 161, 162, 162, 163, 163, 164, 165, 165,
     166, 167, 167, 167, 168, 168, 169, 169, 171, 170,
     170, 173, 172, 172, 174, 174, 175, 175, 176, 176,
     177, 177, 178, 178, 178, 178, 178, 179, 179, 179,
     179, 180, 180, 181, 182, 181, 181, 183, 183, 184,
     184, 185, 185, 186, 185, 185, 188, 187, 187, 187,
     189, 189, 190, 190, 190, 192, 193, 191, 195, 196,
     194, 197, 197, 198, 198, 198, 198, 198, 199, 199,
     200, 200, 200, 201, 201, 201, 201, 201, 202, 202,
     202, 202, 202, 203, 203, 204, 204, 205, 205, 207,
     206, 206, 208, 206, 206, 209, 206, 210, 206, 211,
     211, 211, 212, 212, 213, 213, 214, 214, 215, 215,
     215, 216, 216, 216, 216, 216, 216, 217, 217, 218,
     218, 219, 219, 219, 220, 220, 220, 221, 221, 221,
     222, 222, 224, 223, 225, 225, 226, 226, 226, 227,
     227, 228, 228, 229, 229, 230, 230, 230, 230, 230,
     231, 231, 231, 231, 231, 232, 232, 232, 232, 233,
     233, 233, 233, 233, 234, 234, 234, 234, 235, 235,
     235, 235, 235, 236, 236, 237, 237, 237, 237, 238,
     239, 240, 240, 241, 241, 242, 243, 243, 244, 245,
     245, 246, 246, 247, 248, 249, 250, 250, 251, 252,
     253, 254, 255, 256, 256, 257, 257, 257, 257, 258,
     259, 260, 262, 263, 261, 264, 264, 265, 265, 266,
     267, 268, 270, 269, 271, 271, 271, 271, 271, 271,
     271, 271, 271, 271, 271, 271, 271, 271, 272, 272,
     273, 273, 273, 273, 274, 275, 275, 276, 276, 277,
     278, 278, 278, 278, 279, 279, 280, 280, 281, 281,
     282, 282, 283, 283, 284, 285, 287, 286, 288, 289,
     290, 288, 288, 291, 291, 291, 291, 292, 292, 293,
     293, 293, 293, 293, 294, 294, 294, 294, 294, 295,
     297, 296, 298, 298, 299, 299, 300, 300, 301
};
static const short yyr2[] =
{
       0, 0, 1, 0, 2, 0, 3, 1, 1, 1,
       2, 3, 4, 4, 2, 2, 2, 1, 0, 0,
       8, 4, 0, 0, 8, 4, 0, 0, 7, 3,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       0, 1, 1, 3, 1, 2, 2, 2, 2, 2,
       4, 2, 4, 2, 2, 1, 1, 1, 1, 4,
       1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
       3, 3, 3, 0, 4, 0, 4, 0, 0, 7,
       0, 5, 3, 3, 1, 1, 1, 1, 0, 7,
       3, 3, 3, 3, 4, 6, 6, 4, 8, 4,
       6, 4, 4, 3, 3, 2, 2, 1, 3, 4,
       0, 1, 2, 1, 1, 2, 2, 4, 4, 2,
       2, 2, 0, 1, 4, 4, 3, 3, 2, 2,
       1, 2, 2, 2, 2, 2, 1, 2, 1, 2,
       2, 2, 2, 2, 2, 1, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 1, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
       1, 1, 4, 4, 1, 4, 1, 4, 0, 6,
       3, 0, 6, 3, 0, 1, 1, 2, 8, 3,
       1, 3, 0, 1, 4, 6, 4, 1, 1, 1,
       1, 1, 1, 1, 0, 4, 1, 0, 2, 1,
       3, 3, 2, 0, 4, 1, 0, 4, 1, 1,
       1, 2, 2, 5, 3, 0, 0, 6, 0, 0,
       6, 1, 1, 4, 3, 2, 3, 1, 1, 1,
       3, 2, 1, 3, 2, 3, 3, 4, 3, 4,
       3, 2, 1, 1, 2, 1, 2, 1, 2, 0,
       7, 5, 0, 7, 5, 0, 8, 0, 7, 2,
       2, 2, 0, 1, 0, 1, 1, 2, 0, 3,
       2, 3, 2, 3, 1, 1, 2, 1, 4, 1,
       4, 2, 4, 3, 2, 4, 3, 1, 3, 1,
       1, 3, 0, 3, 0, 1, 0, 1, 2, 1,
       1, 1, 3, 2, 3, 4, 3, 2, 2, 1,
       4, 3, 4, 5, 5, 1, 1, 1, 1, 1,
       2, 2, 2, 2, 1, 2, 2, 2, 1, 2,
       2, 2, 2, 1, 2, 1, 1, 1, 1, 2,
       0, 0, 1, 1, 2, 3, 1, 2, 1, 1,
       3, 1, 1, 2, 2, 0, 0, 2, 3, 2,
       2, 2, 3, 3, 1, 9, 9, 7, 7, 0,
       0, 9, 0, 0, 13, 0, 1, 2, 1, 2,
       1, 12, 0, 8, 2, 1, 1, 1, 1, 1,
       2, 2, 2, 3, 1, 3, 4, 1, 1, 1,
       3, 5, 2, 4, 6, 0, 1, 2, 4, 8,
       1, 3, 5, 7, 0, 1, 0, 1, 1, 3,
       6, 9, 1, 3, 0, 0, 0, 3, 2, 0,
       0, 6, 2, 0, 1, 1, 3, 1, 3, 4,
       4, 3, 4, 3, 4, 4, 3, 4, 3, 1,
       0, 3, 1, 2, 1, 3, 1, 3, 1
};
static const short yydefact[] =
{
       3, 5, 0, 0, 0, 271, 302, 301, 268, 130,
     357, 353, 355, 0, 57, 0, 568, 17, 4, 8,
       7, 0, 0, 215, 216, 217, 218, 207, 208, 209,
     210, 219, 220, 221, 222, 211, 212, 213, 214, 122,
     122, 0, 138, 145, 265, 267, 266, 136, 286, 162,
       0, 0, 0, 270, 269, 0, 9, 0, 6, 15,
      16, 358, 354, 356, 535, 0, 535, 0, 0, 352,
     263, 284, 0, 276, 0, 131, 143, 149, 133, 165,
     132, 144, 150, 166, 134, 155, 160, 137, 172, 135,
     156, 161, 173, 139, 141, 147, 146, 183, 140, 142,
     148, 184, 151, 153, 158, 157, 198, 152, 154, 159,
     199, 163, 181, 190, 169, 167, 164, 182, 191, 168,
     170, 196, 205, 176, 174, 171, 197, 206, 175, 177,
     179, 188, 187, 185, 178, 180, 189, 186, 192, 194,
     203, 202, 200, 193, 195, 204, 201, 0, 0, 14,
     287, 30, 31, 378, 369, 378, 370, 367, 371, 517,
      10, 0, 0, 289, 0, 84, 85, 86, 55, 56,
       0, 0, 0, 0, 0, 87, 0, 0, 32, 34,
      33, 0, 35, 36, 0, 37, 38, 0, 0, 39,
      58, 0, 0, 60, 42, 44, 243, 244, 245, 246,
     239, 240, 241, 242, 402, 0, 0, 0, 235, 236,
     237, 238, 264, 0, 0, 285, 11, 284, 29, 534,
     284, 263, 0, 351, 516, 284, 337, 263, 284, 0,
     274, 0, 331, 332, 0, 0, 0, 0, 359, 0,
     362, 0, 365, 518, 0, 292, 53, 54, 0, 0,
       0, 0, 48, 45, 0, 463, 0, 0, 47, 272,
       0, 0, 49, 0, 51, 0, 0, 77, 75, 73,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 105, 106, 0, 0, 40, 0, 404, 273,
       0, 0, 459, 0, 452, 453, 0, 46, 350, 0,
       0, 123, 560, 348, 263, 264, 0, 0, 465, 0,
     465, 114, 0, 283, 0, 0, 13, 284, 21, 0,
     284, 284, 335, 12, 25, 0, 284, 385, 380, 235,
     236, 237, 238, 231, 232, 233, 234, 122, 122, 377,
       0, 378, 284, 378, 399, 400, 374, 397, 0, 535,
     299, 300, 297, 0, 290, 293, 298, 0, 0, 0,
       0, 0, 0, 0, 91, 90, 0, 43, 0, 0,
      83, 82, 0, 0, 0, 0, 71, 72, 70, 69,
      68, 66, 67, 61, 62, 63, 64, 65, 104, 103,
       0, 41, 0, 263, 284, 403, 405, 410, 409, 411,
     419, 93, 566, 0, 462, 434, 461, 465, 465, 465,
     465, 0, 443, 0, 0, 429, 438, 454, 92, 349,
     277, 515, 0, 0, 0, 0, 421, 0, 449, 27,
     116, 115, 112, 227, 228, 223, 224, 229, 230, 225,
     226, 122, 122, 281, 336, 0, 0, 465, 280, 334,
     465, 361, 382, 0, 379, 386, 0, 364, 0, 0,
     375, 0, 374, 514, 292, 0, 40, 0, 99, 0,
     101, 0, 97, 0, 88, 59, 50, 52, 0, 0,
      76, 74, 94, 102, 413, 536, 418, 284, 417, 455,
       0, 435, 430, 439, 436, 431, 440, 0, 432, 441,
     437, 433, 442, 444, 460, 84, 271, 450, 450, 450,
     450, 450, 0, 0, 0, 0, 0, 0, 524, 507,
     458, 465, 0, 121, 122, 122, 0, 451, 508, 495,
     496, 497, 498, 499, 509, 469, 470, 504, 0, 0,
     564, 544, 122, 122, 562, 0, 545, 547, 561, 0,
       0, 0, 422, 420, 0, 119, 0, 120, 0, 0,
     333, 275, 515, 19, 278, 23, 0, 284, 381, 387,
       0, 284, 383, 389, 284, 284, 401, 398, 284, 0,
     291, 535, 84, 0, 0, 0, 0, 107, 0, 0,
      78, 81, 412, 414, 0, 0, 536, 416, 567, 465,
     465, 465, 0, 0, 0, 512, 500, 501, 502, 0,
       0, 0, 525, 534, 0, 494, 0, 0, 128, 464,
     129, 542, 559, 406, 406, 538, 539, 0, 0, 563,
     423, 424, 0, 28, 456, 0, 0, 306, 304, 303,
     282, 0, 0, 0, 284, 0, 391, 284, 284, 0,
     394, 284, 360, 363, 368, 284, 288, 0, 294, 296,
      95, 0, 100, 0, 0, 96, 319, 0, 0, 316,
       0, 318, 0, 372, 309, 315, 0, 0, 0, 415,
     537, 0, 0, 479, 485, 0, 0, 510, 503, 0,
     505, 0, 284, 0, 126, 325, 0, 127, 328, 342,
     263, 284, 284, 338, 339, 284, 556, 407, 410, 263,
     284, 284, 558, 284, 546, 215, 216, 217, 218, 207,
     208, 209, 210, 219, 220, 221, 222, 211, 212, 213,
     214, 122, 122, 548, 565, 457, 117, 118, 0, 20,
     279, 24, 393, 284, 0, 396, 284, 0, 366, 0,
       0, 108, 0, 322, 0, 0, 313, 89, 0, 308,
       0, 321, 312, 79, 465, 465, 480, 486, 488, 0,
     465, 0, 0, 506, 0, 513, 124, 0, 125, 0,
     413, 536, 554, 284, 341, 284, 344, 555, 408, 413,
     536, 557, 540, 406, 406, 0, 392, 388, 395, 390,
     295, 98, 109, 0, 324, 0, 0, 310, 311, 0,
       0, 0, 450, 487, 465, 492, 511, 520, 0, 465,
     465, 345, 346, 0, 340, 343, 0, 284, 284, 551,
     284, 553, 305, 0, 317, 314, 471, 450, 479, 466,
       0, 485, 0, 479, 526, 535, 326, 329, 347, 541,
     549, 550, 552, 323, 466, 474, 477, 478, 480, 465,
     482, 489, 485, 450, 535, 0, 521, 527, 528, 0,
       0, 0, 465, 450, 450, 450, 468, 467, 483, 490,
       0, 493, 0, 0, 526, 0, 519, 327, 330, 473,
     472, 466, 475, 476, 481, 0, 479, 0, 0, 522,
     529, 465, 465, 480, 0, 535, 0, 0, 450, 534,
       0, 532, 523, 0, 491, 530, 0, 0, 484, 0,
     533, 534, 531, 0, 0, 0
};
static const short yydefgoto[] =
{
     923, 1, 2, 3, 18, 19, 20, 319, 641, 325,
     643, 222, 554, 670, 187, 256, 390, 189, 190, 191,
     192, 21, 193, 194, 375, 374, 372, 678, 373, 195,
     589, 588, 308, 309, 310, 432, 405, 22, 300, 523,
     196, 197, 198, 199, 200, 201, 202, 203, 31, 32,
      33, 34, 35, 36, 37, 38, 39, 40, 542, 543,
     337, 212, 204, 41, 213, 42, 43, 44, 45, 46,
     229, 72, 230, 642, 73, 559, 301, 215, 48, 353,
     354, 355, 49, 640, 738, 672, 673, 674, 806, 675,
     755, 676, 677, 694, 777, 870, 697, 779, 871, 562,
     232, 702, 703, 704, 233, 50, 51, 52, 53, 341,
     343, 348, 241, 54, 759, 461, 236, 237, 339, 568,
     572, 569, 573, 346, 347, 205, 288, 395, 706, 707,
     397, 398, 399, 223, 406, 407, 408, 409, 410, 411,
     311, 839, 293, 294, 295, 633, 527, 296, 413, 206,
     634, 312, 859, 855, 876, 877, 810, 856, 857, 529,
     766, 812, 530, 531, 878, 895, 769, 770, 842, 880,
     532, 533, 843, 534, 535, 536, 224, 225, 56, 537,
     818, 613, 866, 867, 868, 912, 65, 161, 486, 595,
     544, 713, 826, 545, 546, 733, 547, 623, 303, 422,
     548, 549, 403, 207
};
static const short yypact[] =
{
     111, 113, 1307, 1307, 105,-32768,-32768,-32768,-32768,-32768,
      71, 71, 71, 63,-32768, 108,-32768,-32768,-32768,-32768,
  -32768, 14, 218, 134, 1437, 252, 1556, 401, 926, 1278,
    1584, 565, 1573, 1091, 1690, 1598, 1853, 1715, 1865,-32768,
  -32768, 32,-32768,-32768,-32768,-32768,-32768, 71,-32768,-32768,
      82, 93, 103,-32768,-32768, 133,-32768, 1307,-32768,-32768,
  -32768, 71, 71, 71,-32768, 124,-32768, 167, 2644,-32768,
     106, 71, 210,-32768, 1142,-32768,-32768,-32768, 71,-32768,
  -32768,-32768,-32768,-32768,-32768,-32768,-32768, 71,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768,-32768, 71,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768, 71,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768, 71,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768, 71,-32768,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768, 71,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  -32768, 71,-32768,-32768,-32768,-32768,-32768, 276, 218,-32768,
  -32768,-32768,-32768,-32768, 168,-32768, 193,-32768, 216,-32768,
  -32768, 185, 321,-32768, 271,-32768,-32768,-32768,-32768,-32768,
    2772, 2772, 290, 294, 297,-32768, 305, 483,-32768,-32768,
  -32768, 2772,-32768,-32768, 1618,-32768,-32768, 2772, 280, 287,
  -32768, 2836, 2900,-32768, 3258, 745, 1825, 775, 2089, 1391,
     432, 470, 673, 730,-32768, 291, 1735, 2772, 179, 390,
     182, 411,-32768, 218, 218, 71,-32768, 71,-32768,-32768,
      71, 87, 1079,-32768,-32768, 71,-32768, 106, 71, 288,
  -32768, 2108, 445, 477, 307, 1806, 330, 857,-32768, 333,
  -32768, 520,-32768,-32768, 334, 606,-32768,-32768, 2772, 2512,
     996, 1039,-32768,-32768, 360,-32768, 367, 376,-32768,-32768,
    2772, 1618,-32768, 1618,-32768, 2772, 2772, 406,-32768,-32768,
    2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772,
    2772, 2772,-32768,-32768, 483, 483, 2772, 2772, 320,-32768,
     378, 483,-32768, 1904, 456,-32768, 400,-32768, 477, 22,
     218,-32768,-32768,-32768, 106, 516, 2137, 436,-32768, 1111,
      49,-32768, 2782, 486, 276, 276,-32768, 71,-32768, 1079,
      71, 71,-32768,-32768,-32768, 1079, 71,-32768,-32768, 1825,
     775, 2089, 1391, 432, 470, 673, 730,-32768, 462, 444,
    2338,-32768, 71,-32768,-32768, 496, 460,-32768, 520,-32768,
  -32768,-32768,-32768, 469,-32768, 493,-32768, 3142, 455, 3162,
     464, 480, 497, 487,-32768,-32768, 2444, 3258, 500, 507,
    3258, 3258, 2772, 536, 2772, 2772, 2474, 1789, 909, 602,
    1415, 764, 764, 351, 351,-32768,-32768,-32768,-32768,-32768,
     510, 287, 524, 106, 71,-32768,-32768,-32768,-32768, 488,
  -32768,-32768,-32768, 310, 436,-32768,-32768, 59, 79, 114,
     115, 629,-32768, 541, 2298,-32768,-32768,-32768,-32768,-32768,
  -32768, 324, 1501, 2772, 2772, 2203,-32768, 3014,-32768,-32768,
  -32768,-32768,-32768, 2417, 2812, 762, 1877, 2684, 2846, 1212,
    2369, 517, 547,-32768, 445, 225, 276,-32768, 601,-32768,
  -32768,-32768, 248, 223,-32768,-32768, 556,-32768, 557, 2772,
     483, 575, 460,-32768, 606, 573, 2964, 2147,-32768, 2772,
  -32768, 2147,-32768, 483,-32768,-32768, 574, 574, 625, 2772,
    3271, 3283,-32768,-32768, 320, 320,-32768, 71,-32768,-32768,
     483,-32768,-32768,-32768,-32768,-32768,-32768, 2377,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768, 627, 635,-32768,-32768,-32768,
  -32768,-32768, 2772, 636, 586, 594, 2708, 311, 677,-32768,
  -32768,-32768, 599,-32768,-32768,-32768, 604, 102,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 2578, 596,
  -32768,-32768,-32768,-32768,-32768, 603, 328,-32768,-32768, 482,
    3042, 3064,-32768,-32768, 76,-32768, 276,-32768, 218, 949,
  -32768,-32768, 672,-32768,-32768,-32768, 2772, 329, 607,-32768,
    2772, 160, 608,-32768, 71, 71, 3258,-32768, 71, 614,
  -32768,-32768, 491, 612, 616, 3189, 618,-32768, 250, 1238,
  -32768, 2929,-32768,-32768, 619, 453,-32768,-32768,-32768,-32768,
  -32768,-32768, 648, 649, 2231,-32768,-32768,-32768,-32768, 630,
    2772, 639,-32768,-32768, 687,-32768, 276, 218,-32768,-32768,
  -32768,-32768,-32768, 228, 64,-32768,-32768, 2243, 733,-32768,
  -32768,-32768, 645,-32768,-32768, 358, 386,-32768,-32768, 3258,
  -32768, 76, 949, 76, 3220, 2772,-32768, 71, 3220, 2772,
  -32768, 71,-32768,-32768,-32768, 71,-32768, 2772,-32768,-32768,
  -32768, 2772,-32768, 483, 2772,-32768,-32768, 483, 2772,-32768,
     700, 3258, 655, 658,-32768,-32768, 327, 1973, 2772,-32768,
  -32768, 698, 703,-32768, 2578, 2772, 2772,-32768,-32768, 682,
  -32768, 710, 71, 402,-32768, 537, 442,-32768, 1959,-32768,
     106, 71, 71, 519, 522, 186,-32768,-32768, 71, 106,
      71, 186,-32768, 71,-32768, 2417, 2812, 2718, 2876, 762,
    1877, 2151, 2484, 2684, 2846, 2748, 2910, 1212, 2369, 2212,
    2552,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1238,-32768,
  -32768,-32768,-32768, 3220, 248,-32768, 3220, 223,-32768, 505,
    3114,-32768, 683,-32768, 2992, 1238,-32768,-32768, 1344,-32768,
    2042,-32768,-32768, 2929,-32768,-32768,-32768,-32768,-32768, 694,
  -32768, 691, 3240,-32768, 777,-32768,-32768, 1079,-32768, 1079,
     228, 194,-32768, 71,-32768, 71,-32768,-32768, 71, 64,
      64,-32768,-32768, 228, 64, 701,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768, 2772,-32768, 705, 2042,-32768,-32768, 2772,
     702, 704,-32768,-32768,-32768,-32768,-32768, 751, 707,-32768,
  -32768, 519, 522, 268,-32768,-32768, 453, 71, 186,-32768,
     186,-32768,-32768, 3092,-32768,-32768,-32768,-32768,-32768,-32768,
     785, 2772, 715,-32768, 77,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768,-32768, 800, 810,-32768,-32768,
  -32768,-32768, 2772,-32768,-32768, 483, 781, 735,-32768, 744,
     645, 645, 36,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
     741,-32768, 783, 746, 77, 77,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768, 789,-32768, 2772, 849, 813,
  -32768, 772,-32768,-32768, 771,-32768, 858, 778,-32768,-32768,
     799,-32768, 780, 787,-32768,-32768, 2772, 870,-32768, 786,
  -32768,-32768,-32768, 882, 883,-32768
};
static const short yypgoto[] =
{
  -32768,-32768,-32768,-32768, 107,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768, -47,-32768, -67, 418, -254, 433,-32768,
  -32768,-32768, -82, 1220,-32768,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768, -289, 577,-32768,-32768, 132, -5, -297, -496,
       6, 9, 51, 101, 11, 13, 24, 37, -293, -271,
     258, 263, -268, -266, 264, 272, -386, -385, 588, 589,
  -32768, -159,-32768, -381, -184, 699, 731, 818, 888,-32768,
    -472, -124, 458,-32768, 620,-32768, 48, 642, -40,-32768,
     438,-32768, 474, 277,-32768, -530,-32768, 163,-32768, -626,
  -32768,-32768, 246,-32768,-32768,-32768,-32768,-32768,-32768, -141,
     314, 142, 156, -146, 26,-32768,-32768,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768, 475, -96,-32768, 605,-32768,
  -32768, 198, 196, 626, 484, -84,-32768,-32768, -575, -263,
    -409, -423,-32768, 761,-32768,-32768,-32768,-32768,-32768,-32768,
    -238, -307,-32768,-32768, 657, -335,-32768, 422,-32768,-32768,
    -342, 664, -620, -739, -248, -224, -734,-32768, -232, 81,
    -627, -760,-32768,-32768,-32768,-32768, -532,-32768,-32768,-32768,
  -32768,-32768,-32768,-32768,-32768,-32768, 125, -214,-32768,-32768,
  -32768,-32768, 70,-32768, 75,-32768, -15, -64, 468,-32768,
    -577,-32768,-32768,-32768,-32768,-32768,-32768, 413, -311,-32768,
  -32768,-32768,-32768, 55
};
static const short yytable[] =
{
      67, 188, 163, 154, 156, 158, 231, 150, 23, 23,
     449, 24, 24, 27, 27, 28, 28, 320, 680, 437,
     446, 150, 150, 150, 234, 396, 29, 29, 524, 525,
     447, 811, 391, 526, 147, 148, 450, 306, 150, 30,
      30, 438, 620, 314, 439, 415, 440, 150, 74, 712,
    -111, 762, 507, 25, 25, 412, 150, 57, 57, 239,
    -445, 593, 305, 23, 64, 150, 24, 69, 27, 416,
      28, 430, 528, 840, 150, 592, 208, 632, 338, 209,
    -446, 29, 68, 150, 635, 151, 152, 864, 246, 247,
     220, 221, 150, 304, 30, 9, 151, 152, 875, 253,
     257, 150, 15, 26, 26, 258, 151, 152, 25, 66,
      58, -1, 57, -2, 9, -447, -448, 419, 15, 214,
     423, 210, 149, 709, 881, 297, 889, 55, 55, 437,
     252, -534, 710, 221, 808, 291, 894, 15, 5, 6,
       7, 8, 75, 908, 693, -111, 865, 10, 11, 12,
    -425, 438, 524, 525, 439, 528, 440, 526, 26, 492,
     495, 498, 501, 14, 160, 15, 361, 363, 907, 914,
    -426, 211, 520, 503, 235, 150, -534, 368, 153, 369,
     835, 338, 55, 493, 496, 499, 502, 75, 768, 155,
      84, 15, 162, 292, 345, 59, 60, 69, 352, 157,
     599, 600, 601, 602, 603, -427, -428, 649, 795, 484,
      15, 858, 391, 15, 708, 708, 863, 15, 829, 831,
     392, 69, 594, 159, -247, 805, 69, 208, 220, 221,
     209, 69, 699, 208, 872, 164, 209, 388, 389, 298,
     299, 731, 732, 329, 402, 456, 330, 458, 333, 849,
     334, 69, 226, 700, 220, 221, 5, 6, 7, 8,
      84, 335, 701, 221, 238, 10, 11, 12, 302, 903,
     570, 901, 210, 313, 336, 243, 315, 70, 210, 69,
     226, 14, 70, 15, 475, 463, 71, 700, 331, 240,
     735, 71, 340, 321, 221, 566, 701, 221, 524, 525,
     216, 345, 437, 526, 217, 478, 739, 227, 741, 861,
     208, 567, 242, 209, 151, 152, 228, 663, 433, 664,
     560, 434, 211, 435, 438, 436, 421, 439, 211, 440,
     879, 244, 452, 453, 723, 227, 785, 221, 332, 245,
     298, 299, -249, 253, 228, 665, 329, 522, 320, 330,
     744, 333, 219, 334, 747, 210, 724, 593, 248, 727,
      15, 728, 249, 848, 335, 250, 593, 521, 448, 302,
     610, 592, 760, 251, 451, 259, 645, 336, 316, 393,
     592, 260, 317, 584, 708, 708, 289, 586, 394, 221,
     457, 331, 220, 221, 667, 340, 668, 323, 80, 208,
     489, 217, 209, 749, 490, 211, 6, 7, 8, 93,
     279, 280, 281, 345, 10, 11, 12, 352, 626, 89,
      23, 326, 627, 24, 342, 27, 587, 28, 433, 349,
     522, 434, 15, 435, 636, 436, 556, 558, 29, 8,
      93, 332, 485, 598, 210, 10, 11, 12, 736, 609,
     521, 30, 317, -80, 539, 364, 297, 5, 6, 7,
       8, 9, 365, 15, 541, 25, 10, 11, 12, 538,
     611, 366, 824, 401, 825, 695, 737, 8, 98, 571,
     217, 320, 14, 10, 11, 12, 151, 152, 819, 291,
     820, -251, 776, 696, 211, 418, 317, 79, 83, 88,
      92, 97, 101, 106, 110, 115, 119, 124, 128, 133,
     137, 142, 146, 321, 221, 26, 780, 656, 594, 616,
     617, 344, 424, 151, 152, 789, 428, 594, 887, 888,
     854, 443, 778, 437, 454, 596, 217, 622, 622, 491,
     494, 459, 500, 689, 23, 220, 221, 24, -543, 27,
     468, 28, -384, -384, 460, 438, 487, 221, 439, 470,
     440, 466, 29, 464, 465, 219, 891, 891, -515, 5,
       6, 7, 8, 111, 471, 30, 628, 629, 10, 11,
      12, 473, -515, 479, 421, 657, 658, 783, 221, 25,
     785, 221, 472, 538, 14, 476, 15, 752, 691, 260,
     800, 433, 477, 567, 434, 482, 435, 555, 436, 151,
     152, 6, 7, 350, 351, 646, 751, 767, 771, 650,
     753, 483, 652, 653, 262, 264, 654, -515, 444, 445,
     307, -515, 504, 715, 822, 823, 716, 557, 719, 26,
     720, 892, 893, 698, 47, 47, 564, 574, 575, 705,
     711, 721, 61, 62, 63, -255, 274, 275, 276, 277,
     278, 279, 280, 281, 722, 78, 578, 87, 581, 96,
     474, 105, 590, 114, -30, 123, 606, 132, 717, 141,
       8, 102, -31, 605, 607, 612, 10, 11, 12, 615,
      23, 621, 742, 24, 618, 27, 745, 28, 625, 47,
     219, 647, 651, 748, 15, 655, 208, 659, 29, 209,
      47, 660, 47, 662, 679, 208, 684, 685, 209, 356,
     688, 30, 76, 81, 85, 90, 793, 794, 718, 690,
     112, 117, 121, 126, 692, 25, 734, 8, 107, 538,
     775, 520, 836, 10, 11, 12, 757, 756, 150, 781,
     782, 210, 758, 787, 77, 82, 86, 91, 790, 791,
     210, 792, 113, 118, 122, 127, 764, 6, 7, 8,
      93, 765, 773, 571, 767, 10, 11, 12, 774, 5,
     802, 869, 8, 80, 813, 26, 815, 817, 10, 11,
      12, 796, 832, 15, 798, 767, 834, 837, 844, 838,
     882, 211, 845, 860, 14, 862, 298, 299, 282, 283,
     211, 284, 285, 286, 287, 298, 299, 873, 883, 828,
     830, 277, 278, 279, 280, 281, 47, 874, 884, 885,
     904, 302, 433, 302, 886, 434, 896, 435, 78, 436,
      87, 910, 96, 898, 105, 94, 99, 103, 108, 919,
      78, 897, 87, 130, 135, 139, 144, 902, 327, 905,
     906, 5, 889, 47, 8, 9, 909, 916, 911, 47,
      10, 11, 12, 913, 917, 850, 851, 918, 852, 47,
     920, 921, 924, 925, 583, 725, 14, 431, 15, 16,
     726, 729, 47, 47, 915, 76, 81, 85, 90, 730,
     441, 442, 580, 47, 561, 47, 922, 79, 83, 97,
     101, 115, 119, 133, 137, 95, 100, 104, 109, 740,
     420, 807, 761, 131, 136, 140, 145, 77, 82, 86,
      91, 6, 7, 8, 98, 827, 821, 579, 356, 10,
      11, 12, 797, 799, 577, 455, 47, 328, -376, 619,
     637, 417, 165, 890, 899, 597, 624, 414, 166, 167,
     900, 168, 273, 274, 275, 276, 277, 278, 279, 280,
     281, 78, 429, 87, 462, 96, 0, 105, 0, 169,
       0, 16, 47, 170, 171, 172, 173, 174, 0, 0,
       0, 175, 176, 322, 0, 0, 0, 360, 177, 0,
       5, 178, 0, 8, 9, 0, 179, 180, 181, 10,
      11, 12, 182, 183, 0, 0, -252, 184, 94, 99,
     103, 108, 0, 0, 0, 14, 0, 15, 76, 81,
      85, 90, 0, 0, 0, 47, 0, 0, 0, 0,
     362, 185, 186, 5, 0, 638, 8, 9, 0, 400,
       0, 0, 10, 11, 12, 0, 47, 0, 0, 0,
      77, 82, 86, 91, 0, 0, 0, 0, 14, 0,
      15, 414, 414, 497, 414, 78, 0, 96, 0, 114,
     307, 132, 0, -465, -465, -465, -465, -465, 95, 100,
     104, 109, -465, -465, -465, 5, 6, 7, 8, 120,
       0, 0, 0, 0, 10, 11, 12, 0, -465, 47,
       0, 563, 307, 47, 565, -113, -113, -113, -113, -113,
      14, 0, 15, 0, -113, -113, -113, 0, 0, 0,
       0, 0, 76, 81, 0, 0, 112, 117, 0, 0,
    -113, 0, 0, 218, 0, 0, -26, -26, -26, -26,
     -26, 94, 99, 103, 108, -26, -26, -26, 0, 0,
     488, 0, 0, 0, 77, 82, 0, 0, 113, 118,
     219, -26, 0, -515, 0, -110, 0, 0, 0, 0,
      47, -257, 0, 0, 0, 614, 0, -515, 0, 79,
      83, 88, 92, 97, 101, 106, 110, 115, 119, 124,
     128, 133, 137, 142, 146, 322, 322, -113, 0, 0,
     220, 221, 0, 0, 0, 0, 0, 6, 7, 8,
     129, 95, 100, 104, 109, 10, 11, 12, 0, 0,
       0, 0, -515, 0, 0, 0, -515, 0, -26, 666,
       0, 505, 152, 15, 0, 400, 400, 166, 167, 0,
     168, 0, 0, 94, 99, 0, 0, 130, 135, 0,
       0, 0, 0, 681, 682, 683, 0, 0, 169, 47,
      16, 0, 170, 171, 172, 173, 174, 0, 0, 0,
     175, 176, 0, 6, 7, 8, 102, 177, 0, 0,
     178, 10, 11, 12, 0, 179, 180, 181, 0, 0,
       0, 182, 183, 0, 0, 667, 184, 668, 4, 15,
    -122, 5, 6, 7, 8, 9, 0, 0, 0, 0,
      10, 11, 12, 95, 100, 0, 47, 131, 136, -307,
     185, 186, 0, 0, 669, 13, 14, 0, 15, 16,
       0, 0, 47, 0, 0, 666, 0, 505, 152, 0,
     788, 47, 0, 166, 167, 0, 168, 78, 0, 87,
       0, 96, 0, 105, 0, 114, -122, 123, -253, 132,
       0, 141, 0, 0, 169, -122, 16, 0, 170, 171,
     172, 173, 174, 0, 400, 400, 175, 176, 0, 0,
       0, 0, 0, 177, 0, 5, 178, 17, 8, 89,
       0, 179, 180, 181, 10, 11, 12, 182, 183, 0,
       0, 667, 184, 668, 76, 81, 85, 90, 0, 0,
      14, 0, 112, 117, 121, 126, 0, 0, 809, 809,
       0, 0, 0, 0, 814, -373, 185, 186, 0, 0,
     669, 5, 6, 7, 8, 80, 77, 82, 86, 91,
      10, 11, 12, 0, 113, 118, 122, 127, 0, 0,
       0, 0, 0, 0, 784, 786, 14, 0, 357, 359,
     275, 276, 277, 278, 279, 280, 281, 0, 841, 0,
     367, 0, 0, 846, 847, 370, 371, 0, 0, 0,
     376, 377, 378, 379, 380, 381, 382, 383, 384, 385,
     386, 387, 539, 0, 540, 5, 6, 7, 8, 9,
       0, 0, 541, 0, 10, 11, 12, 0, 0, 0,
       0, 0, 0, 497, 0, 0, 427, -248, 0, 0,
      14, 0, 0, 0, 0, 0, 497, 94, 99, 103,
     108, 400, 400, 0, 0, 130, 135, 139, 144, 0,
     400, 400, 0, 0, 400, 400, 0, 0, 0, 0,
       5, 6, 7, 8, 89, 497, 809, 0, 0, 10,
      11, 12, 0, 0, 0, 0, 0, 5, 6, 7,
       8, 116, 784, 786, 786, 14, 10, 11, 12, 6,
       7, 8, 107, 0, 480, 481, -543, 10, 11, 12,
       0, 0, 14, 6, 7, 8, 129, 95, 100, 104,
     109, 10, 11, 12, 0, 131, 136, 140, 145, 254,
       0, 165, 5, 0, 0, 8, 9, 166, 167, 15,
     168, 10, 11, 12, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 550, 551, 0, -250, 14, 169, 15,
      16, 0, 170, 171, 172, 173, 174, 0, 0, 0,
     175, 176, 0, -256, 0, 0, 0, 177, 0, 0,
     178, 0, 0, 0, -254, 179, 180, 181, 0, 576,
       0, 182, 183, 0, 0, 0, 184, 0, -259, 585,
       0, 0, 0, 0, 5, 6, 7, 8, 125, 591,
       0, 0, 0, 10, 11, 12, 0, 0, 0, 0,
     185, 186, 0, 0, 255, 0, 0, 0, 0, 14,
       6, 7, 8, 138, 0, 0, 0, 0, 10, 11,
      12, 0, 604, 0, 0, 0, 290, 0, -451, -451,
    -451, -451, -451, -451, -451, -451, 15, -451, -451, -451,
    -451, -451, 0, -451, -451, -451, -451, -451, -451, -451,
    -451, -451, -451, -451, -451, -451, -451, -451, 291, -451,
    -451, -451, -451, -451, 0, 0, 0, -451, -451, 639,
    -258, 0, 0, 0, -451, 0, 644, -451, 0, 0,
     648, 0, -451, -451, -451, 0, 0, 0, -451, -451,
       0, 0, 0, -451, 0, -261, 0, 324, 0, 671,
     -22, -22, -22, -22, -22, 0, 0, 0, 0, -22,
     -22, -22, 0, 0, 0, -451, 292, -451, -451, 5,
       0, -451, 8, 75, 219, -22, 0, -515, 10, 11,
      12, 272, 273, 274, 275, 276, 277, 278, 279, 280,
     281, -515, 0, 0, 14, 0, 15, 0, 6, 7,
       8, 134, 639, 0, 0, 743, 10, 11, 12, 746,
       6, 7, 8, 143, 220, 221, 0, 0, 10, 11,
      12, 750, 6, 7, 8, 98, 0, 0, 754, 0,
      10, 11, 12, 0, 0, 0, -515, 671, 763, 0,
    -515, 0, -22, 0, 0, 404, 772, -465, -465, -465,
    -465, -465, -465, -465, -465, 0, -465, -465, -465, -465,
    -465, 0, -465, -465, -465, -465, -465, -465, -465, -465,
    -465, -465, -465, -465, -465, -465, -465, 0, -465, -465,
    -465, -465, -465, -260, 0, 0, -465, -465, 0, 0,
       0, 0, 0, -465, 0, -262, -465, 0, 671, 0,
       0, -465, -465, -465, 0, 0, 0, -465, -465, 0,
       0, 0, -465, 0, 666, 671, 165, 0, 671, 0,
     671, 0, 166, 167, 0, 168, 0, 219, 0, 0,
    -515, 0, 0, 0, -465, 0, -465, -465, 0, 0,
    -465, 0, 0, 169, -515, 16, 0, 170, 171, 172,
     173, 174, 0, 0, 0, 175, 176, 0, -320, 0,
       0, 0, 177, 833, 0, 178, 671, 220, 221, 0,
     179, 180, 181, 0, 0, 0, 182, 183, 0, 0,
    -320, 184, -320, 666, 0, 165, 0, 0, 0, -515,
       0, 166, 167, -515, 168, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 185, 186, 0, 0, 669,
       0, 0, 169, 0, 16, 0, 170, 171, 172, 173,
     174, 0, 0, 0, 175, 176, 0, 0, 0, 0,
       0, 177, 0, 5, 178, 0, 8, 84, 0, 179,
     180, 181, 10, 11, 12, 182, 183, 0, 0, 318,
     184, 0, -18, -18, -18, -18, -18, 0, 14, 0,
      15, -18, -18, -18, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 185, 186, 219, -18, 669, -515,
     165, 0, 0, 0, 0, 0, 166, 167, 0, 168,
       0, 5, 0, -515, 8, 9, 6, 7, 8, 102,
      10, 11, 12, 0, 10, 11, 12, 169, 0, 16,
       0, 170, 171, 172, 173, 174, 14, 0, 15, 175,
     176, 0, 15, 0, 0, 0, 177, 0, 0, 178,
       0, 0, 0, 0, 179, 180, 425, 0, -515, 0,
     182, 183, -515, 0, -18, 184, 165, 0, 0, 0,
       0, 0, 166, 167, 0, 168, 0, 6, 7, 8,
     138, 0, 0, 0, 0, 10, 11, 12, 0, 185,
     186, 0, 0, 169, 426, 16, 0, 170, 171, 172,
     173, 174, 686, 15, 0, 175, 176, 5, 6, 7,
       8, 9, 177, 0, 714, 178, 10, 11, 12, 0,
     179, 180, 181, 0, 0, 0, 182, 183, 0, 0,
       0, 184, 14, 0, 15, 265, 266, 267, 687, 268,
     269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
     279, 280, 281, 0, 0, 185, 186, 0, 0, 0,
     552, 505, 506, 6, 7, 8, 9, 166, 167, 0,
     168, 10, 11, 12, 507, 0, 508, 509, 510, 511,
     512, 513, 514, 515, 516, 517, 518, 14, 169, 15,
      16, 0, 170, 171, 172, 173, 174, 0, 0, 327,
     175, 176, 5, 0, 0, 8, 9, 177, 0, 0,
     178, 10, 11, 12, 0, 179, 180, 181, 0, 0,
       0, 182, 183, 0, 0, 0, 184, 14, 0, 15,
      16, 0, 0, 0, 6, 7, 8, 134, 0, 0,
     505, 152, 10, 11, 12, 0, 166, 167, 519, 168,
     185, 186, 0, 507, 520, 508, 509, 510, 511, 512,
     513, 514, 515, 516, 517, 518, 0, 169, 0, 16,
       0, 170, 171, 172, 173, 174, 0, 0, 0, 175,
     176, 5, 6, 7, 8, 75, 177, 0, 0, 178,
      10, 11, 12, 0, 179, 180, 181, 0, 0, 0,
     182, 183, 0, 0, 0, 184, 14, 165, 15, 0,
       0, 0, 0, 166, 167, 0, 168, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 519, 0, 185,
     186, 0, 0, 520, 169, 0, 16, 0, 170, 171,
     172, 173, 174, 0, 0, 0, 175, 176, 0, 6,
       7, 8, 107, 177, 0, 0, 178, 10, 11, 12,
       0, 179, 180, 181, 0, 0, 0, 182, 183, 0,
       0, 0, 184, 358, 0, 165, 0, 0, 0, 0,
       0, 166, 167, 0, 168, 271, 272, 273, 274, 275,
     276, 277, 278, 279, 280, 281, 185, 186, 0, 0,
     474, 0, 169, 0, 16, 0, 170, 171, 172, 173,
     174, 0, 0, 0, 175, 176, 0, 6, 7, 8,
     143, 177, 0, 0, 178, 10, 11, 12, 0, 179,
     180, 181, 0, 0, 0, 182, 183, 0, 0, 0,
     184, 165, 5, 6, 7, 8, 9, 166, 167, 0,
     168, 10, 11, 12, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 185, 186, 0, 14, 169, 15,
      16, 0, 170, 171, 172, 173, 174, 0, 0, 0,
     175, 176, 0, 0, 0, 0, 0, 177, 0, 0,
     178, 0, 0, 0, 0, 179, 180, 181, 0, 0,
       0, 182, 183, 0, 0, 0, 184, 165, 5, 0,
       0, 8, 9, 166, 167, 0, 168, 10, 11, 12,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     185, 186, 0, 14, 169, 15, 16, 0, 170, 171,
     172, 173, 174, 0, 0, 0, 175, 176, 5, 6,
       7, 8, 111, 177, 0, 0, 178, 10, 11, 12,
       0, 179, 180, 181, 0, 0, 0, 182, 183, 0,
       0, 165, 184, 14, 0, 15, 0, 166, 167, 0,
     168, 0, 5, 6, 7, 8, 84, 0, 0, 0,
       0, 10, 11, 12, 0, 0, 185, 186, 169, 0,
      16, 0, 170, 171, 172, 173, 174, 14, 0, 15,
     175, 176, 5, 6, 7, 8, 120, 177, 0, 0,
     178, 10, 11, 12, 0, 179, 180, 181, 0, 0,
       0, 182, 183, 0, 0, 165, 184, 14, 0, 15,
       0, 166, 167, 0, 168, 0, 5, 6, 7, 8,
       9, 0, 0, 0, 0, 10, 11, 12, 608, 0,
     185, 186, 169, 0, 16, 0, 170, 171, 172, 173,
     174, 14, 0, 0, 175, 176, 5, 6, 7, 8,
      80, 177, 0, 0, 178, 10, 11, 12, 0, 179,
     180, 181, 0, 0, 0, 182, 183, 0, 0, 165,
     184, 14, 0, 0, 0, 166, 167, 0, 168, 0,
       5, 6, 7, 8, 116, 0, 0, 0, 0, 10,
      11, 12, 0, 0, 185, 186, 169, 0, 16, 0,
     170, 171, 172, 173, 174, 14, 0, 0, 175, 176,
       5, 6, 7, 8, 89, 177, 0, 0, 178, 10,
      11, 12, 0, 179, 180, 181, 0, 0, 0, 182,
     183, 0, 0, 165, 261, 14, 0, 0, 0, 166,
     167, 0, 168, 0, 5, 6, 7, 8, 125, 0,
       0, 0, 0, 10, 11, 12, 0, 0, 185, 186,
     169, 0, 16, 0, 170, 171, 172, 173, 174, 14,
       0, 0, 175, 176, 0, 0, 0, 0, 0, 177,
       0, 0, 178, 0, 0, 0, 0, 179, 180, 181,
       0, 0, 0, 182, 183, 0, 0, 582, 263, 0,
       0, 0, 0, 166, 167, 267, 168, 268, 269, 270,
     271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
     281, 0, 185, 186, 169, 0, 16, 0, 170, 171,
     172, 173, 174, 803, 0, 0, 175, 176, 0, 0,
       0, 0, 0, 177, 0, 0, 178, 0, 0, 0,
       0, 179, 180, 181, 0, 0, 0, 182, 183, 0,
       0, 0, 184, 0, 0, 0, 265, 266, 267, 0,
     268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
     278, 279, 280, 281, 0, 0, 185, 186, 265, 266,
     267, 0, 268, 269, 270, 271, 272, 273, 274, 275,
     276, 277, 278, 279, 280, 281, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 265, 266, 267, 804,
     268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
     278, 279, 280, 281, 0, 0, 0, 0, 265, 266,
     267, 553, 268, 269, 270, 271, 272, 273, 274, 275,
     276, 277, 278, 279, 280, 281, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 265, 266, 267, 630,
     268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
     278, 279, 280, 281, 0, 0, 0, 0, 265, 266,
     267, 631, 268, 269, 270, 271, 272, 273, 274, 275,
     276, 277, 278, 279, 280, 281, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 265, 266, 267, 853,
     268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
     278, 279, 280, 281, 0, 0, 265, 266, 267, 801,
     268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
     278, 279, 280, 281, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 265, 266, 267, 467, 268, 269, 270,
     271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
     281, 15, 0, 0, 0, 0, 469, 0, 0, 0,
       0, 0, 0, 0, 265, 266, 267, 0, 268, 269,
     270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
     280, 281, 0, 661, 265, 266, 267, 816, 268, 269,
     270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
     280, 281, 265, 266, 267, 0, 268, 269, 270, 271,
     272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
     269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
     279, 280, 281, 270, 271, 272, 273, 274, 275, 276,
     277, 278, 279, 280, 281
};
static const short yycheck[] =
{
      15, 68, 66, 50, 51, 52, 147, 47, 2, 3,
     321, 2, 3, 2, 3, 2, 3, 231, 595, 312,
     317, 61, 62, 63, 148, 288, 2, 3, 414, 414,
     319, 765, 286, 414, 39, 40, 325, 221, 78, 2,
       3, 312, 538, 227, 312, 293, 312, 87, 22, 624,
       1, 677, 16, 2, 3, 293, 96, 2, 3, 155,
       1, 484, 221, 57, 1, 105, 57, 3, 57, 293,
      57, 309, 414, 812, 114, 484, 70, 1, 237, 70,
       1, 57, 68, 123, 556, 3, 4, 10, 170, 171,
      68, 69, 132, 6, 57, 8, 3, 4, 858, 181,
     184, 141, 31, 2, 3, 187, 3, 4, 57, 1,
       3, 0, 57, 0, 8, 1, 1, 95, 31, 71,
     304, 70, 90, 59, 863, 207, 90, 2, 3, 422,
     177, 68, 68, 69, 760, 33, 875, 31, 4, 5,
       6, 7, 8, 903, 616, 96, 69, 13, 14, 15,
      91, 422, 538, 538, 422, 497, 422, 538, 57, 407,
     408, 409, 410, 29, 57, 31, 250, 251, 902, 908,
      91, 70, 96, 411, 148, 215, 68, 261, 96, 263,
     806, 340, 57, 407, 408, 409, 410, 8, 684, 96,
       8, 31, 68, 91, 241, 90, 91, 3, 245, 96,
     507, 508, 509, 510, 511, 91, 91, 47, 738, 393,
      31, 838, 466, 31, 623, 624, 843, 31, 793, 794,
     287, 3, 485, 90, 90, 755, 3, 221, 68, 69,
     221, 3, 4, 227, 854, 68, 227, 284, 285, 213,
     214, 627, 627, 237, 291, 341, 237, 343, 237, 826,
     237, 3, 4, 59, 68, 69, 4, 5, 6, 7,
       8, 237, 68, 69, 96, 13, 14, 15, 220, 896,
      47, 891, 221, 225, 237, 90, 228, 59, 227, 3,
       4, 29, 59, 31, 366, 349, 68, 59, 237, 96,
     632, 68, 237, 68, 69, 47, 68, 69, 684, 684,
      90, 348, 595, 684, 94, 372, 641, 59, 643, 841,
     304, 452, 96, 304, 3, 4, 68, 67, 312, 69,
      95, 312, 221, 312, 595, 312, 300, 595, 227, 595,
     862, 10, 337, 338, 627, 59, 68, 69, 237, 68,
     314, 315, 90, 425, 68, 95, 340, 414, 562, 340,
     647, 340, 28, 340, 651, 304, 627, 780, 68, 627,
      31, 627, 68, 95, 340, 68, 789, 414, 320, 321,
      59, 780, 45, 68, 326, 95, 47, 340, 90, 59,
     789, 94, 94, 467, 793, 794, 95, 471, 68, 69,
     342, 340, 68, 69, 67, 340, 69, 90, 8, 393,
      90, 94, 393, 657, 94, 304, 5, 6, 7, 8,
      59, 60, 61, 460, 13, 14, 15, 464, 90, 8,
     414, 91, 94, 414, 91, 414, 473, 414, 422, 95,
     497, 422, 31, 422, 558, 422, 441, 442, 414, 7,
       8, 340, 394, 490, 393, 13, 14, 15, 90, 516,
     497, 414, 94, 47, 1, 95, 538, 4, 5, 6,
       7, 8, 95, 31, 11, 414, 13, 14, 15, 414,
     517, 95, 783, 95, 785, 616, 90, 7, 8, 453,
      94, 695, 29, 13, 14, 15, 3, 4, 777, 33,
     779, 90, 90, 617, 393, 95, 94, 23, 24, 25,
      26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
      36, 37, 38, 68, 69, 414, 700, 581, 781, 524,
     525, 1, 6, 3, 4, 709, 90, 790, 870, 871,
     837, 45, 90, 826, 90, 487, 94, 542, 543, 407,
     408, 45, 410, 610, 538, 68, 69, 538, 95, 538,
      95, 538, 90, 91, 94, 826, 68, 69, 826, 95,
     826, 68, 538, 94, 95, 28, 873, 874, 31, 4,
       5, 6, 7, 8, 94, 538, 94, 95, 13, 14,
      15, 94, 45, 47, 558, 94, 95, 68, 69, 538,
      68, 69, 95, 538, 29, 95, 31, 664, 613, 94,
      95, 595, 95, 744, 595, 95, 595, 90, 595, 3,
       4, 5, 6, 7, 8, 567, 663, 684, 685, 571,
     667, 97, 574, 575, 191, 192, 578, 90, 314, 315,
       1, 94, 91, 627, 780, 781, 627, 90, 627, 538,
     627, 873, 874, 617, 2, 3, 45, 91, 91, 623,
     624, 627, 10, 11, 12, 90, 54, 55, 56, 57,
      58, 59, 60, 61, 627, 23, 91, 25, 95, 27,
      96, 29, 47, 31, 47, 33, 90, 35, 627, 37,
       7, 8, 47, 47, 90, 8, 13, 14, 15, 90,
     684, 95, 644, 684, 90, 684, 648, 684, 95, 57,
      28, 94, 94, 655, 31, 91, 700, 95, 684, 700,
      68, 95, 70, 95, 95, 709, 68, 68, 709, 245,
      90, 684, 23, 24, 25, 26, 731, 732, 627, 90,
      31, 32, 33, 34, 47, 684, 3, 7, 8, 684,
     692, 96, 809, 13, 14, 15, 91, 47, 788, 701,
     702, 700, 94, 705, 23, 24, 25, 26, 710, 711,
     709, 713, 31, 32, 33, 34, 68, 5, 6, 7,
       8, 68, 90, 747, 841, 13, 14, 15, 68, 4,
      97, 845, 7, 8, 90, 684, 95, 10, 13, 14,
      15, 743, 91, 31, 746, 862, 91, 95, 47, 95,
     864, 700, 95, 18, 29, 90, 780, 781, 63, 64,
     709, 66, 67, 68, 69, 789, 790, 17, 865, 793,
     794, 57, 58, 59, 60, 61, 184, 17, 47, 94,
     897, 783, 826, 785, 90, 826, 95, 826, 196, 826,
     198, 905, 200, 97, 202, 27, 28, 29, 30, 916,
     208, 68, 210, 35, 36, 37, 38, 68, 1, 10,
      47, 4, 90, 221, 7, 8, 95, 68, 10, 227,
      13, 14, 15, 95, 94, 827, 828, 90, 830, 237,
      10, 95, 0, 0, 466, 627, 29, 310, 31, 32,
     627, 627, 250, 251, 909, 196, 197, 198, 199, 627,
     312, 312, 464, 261, 446, 263, 921, 433, 434, 435,
     436, 437, 438, 439, 440, 27, 28, 29, 30, 642,
     300, 758, 676, 35, 36, 37, 38, 196, 197, 198,
     199, 5, 6, 7, 8, 793, 780, 462, 464, 13,
      14, 15, 744, 747, 460, 340, 304, 90, 91, 527,
       1, 294, 3, 872, 884, 487, 543, 293, 9, 10,
     885, 12, 53, 54, 55, 56, 57, 58, 59, 60,
      61, 329, 308, 331, 348, 333, -1, 335, -1, 30,
      -1, 32, 340, 34, 35, 36, 37, 38, -1, -1,
      -1, 42, 43, 232, -1, -1, -1, 1, 49, -1,
       4, 52, -1, 7, 8, -1, 57, 58, 59, 13,
      14, 15, 63, 64, -1, -1, 90, 68, 200, 201,
     202, 203, -1, -1, -1, 29, -1, 31, 329, 330,
     331, 332, -1, -1, -1, 393, -1, -1, -1, -1,
       1, 92, 93, 4, -1, 96, 7, 8, -1, 288,
      -1, -1, 13, 14, 15, -1, 414, -1, -1, -1,
     329, 330, 331, 332, -1, -1, -1, -1, 29, -1,
      31, 407, 408, 409, 410, 433, -1, 435, -1, 437,
       1, 439, -1, 4, 5, 6, 7, 8, 200, 201,
     202, 203, 13, 14, 15, 4, 5, 6, 7, 8,
      -1, -1, -1, -1, 13, 14, 15, -1, 29, 467,
      -1, 447, 1, 471, 450, 4, 5, 6, 7, 8,
      29, -1, 31, -1, 13, 14, 15, -1, -1, -1,
      -1, -1, 433, 434, -1, -1, 437, 438, -1, -1,
      29, -1, -1, 1, -1, -1, 4, 5, 6, 7,
       8, 333, 334, 335, 336, 13, 14, 15, -1, -1,
     399, -1, -1, -1, 433, 434, -1, -1, 437, 438,
      28, 29, -1, 31, -1, 96, -1, -1, -1, -1,
     538, 90, -1, -1, -1, 521, -1, 45, -1, 715,
     716, 717, 718, 719, 720, 721, 722, 723, 724, 725,
     726, 727, 728, 729, 730, 444, 445, 96, -1, -1,
      68, 69, -1, -1, -1, -1, -1, 5, 6, 7,
       8, 333, 334, 335, 336, 13, 14, 15, -1, -1,
      -1, -1, 90, -1, -1, -1, 94, -1, 96, 1,
      -1, 3, 4, 31, -1, 484, 485, 9, 10, -1,
      12, -1, -1, 435, 436, -1, -1, 439, 440, -1,
      -1, -1, -1, 599, 600, 601, -1, -1, 30, 627,
      32, -1, 34, 35, 36, 37, 38, -1, -1, -1,
      42, 43, -1, 5, 6, 7, 8, 49, -1, -1,
      52, 13, 14, 15, -1, 57, 58, 59, -1, -1,
      -1, 63, 64, -1, -1, 67, 68, 69, 1, 31,
       3, 4, 5, 6, 7, 8, -1, -1, -1, -1,
      13, 14, 15, 435, 436, -1, 684, 439, 440, 91,
      92, 93, -1, -1, 96, 28, 29, -1, 31, 32,
      -1, -1, 700, -1, -1, 1, -1, 3, 4, -1,
     708, 709, -1, 9, 10, -1, 12, 715, -1, 717,
      -1, 719, -1, 721, -1, 723, 59, 725, 90, 727,
      -1, 729, -1, -1, 30, 68, 32, -1, 34, 35,
      36, 37, 38, -1, 623, 624, 42, 43, -1, -1,
      -1, -1, -1, 49, -1, 4, 52, 90, 7, 8,
      -1, 57, 58, 59, 13, 14, 15, 63, 64, -1,
      -1, 67, 68, 69, 715, 716, 717, 718, -1, -1,
      29, -1, 723, 724, 725, 726, -1, -1, 764, 765,
      -1, -1, -1, -1, 770, 91, 92, 93, -1, -1,
      96, 4, 5, 6, 7, 8, 715, 716, 717, 718,
      13, 14, 15, -1, 723, 724, 725, 726, -1, -1,
      -1, -1, -1, -1, 703, 704, 29, -1, 248, 249,
      55, 56, 57, 58, 59, 60, 61, -1, 814, -1,
     260, -1, -1, 819, 820, 265, 266, -1, -1, -1,
     270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
     280, 281, 1, -1, 3, 4, 5, 6, 7, 8,
      -1, -1, 11, -1, 13, 14, 15, -1, -1, -1,
      -1, -1, -1, 859, -1, -1, 306, 90, -1, -1,
      29, -1, -1, -1, -1, -1, 872, 719, 720, 721,
     722, 780, 781, -1, -1, 727, 728, 729, 730, -1,
     789, 790, -1, -1, 793, 794, -1, -1, -1, -1,
       4, 5, 6, 7, 8, 901, 902, -1, -1, 13,
      14, 15, -1, -1, -1, -1, -1, 4, 5, 6,
       7, 8, 821, 822, 823, 29, 13, 14, 15, 5,
       6, 7, 8, -1, 374, 375, 95, 13, 14, 15,
      -1, -1, 29, 5, 6, 7, 8, 719, 720, 721,
     722, 13, 14, 15, -1, 727, 728, 729, 730, 1,
      -1, 3, 4, -1, -1, 7, 8, 9, 10, 31,
      12, 13, 14, 15, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, 423, 424, -1, 90, 29, 30, 31,
      32, -1, 34, 35, 36, 37, 38, -1, -1, -1,
      42, 43, -1, 90, -1, -1, -1, 49, -1, -1,
      52, -1, -1, -1, 90, 57, 58, 59, -1, 459,
      -1, 63, 64, -1, -1, -1, 68, -1, 90, 469,
      -1, -1, -1, -1, 4, 5, 6, 7, 8, 479,
      -1, -1, -1, 13, 14, 15, -1, -1, -1, -1,
      92, 93, -1, -1, 96, -1, -1, -1, -1, 29,
       5, 6, 7, 8, -1, -1, -1, -1, 13, 14,
      15, -1, 512, -1, -1, -1, 1, -1, 3, 4,
       5, 6, 7, 8, 9, 10, 31, 12, 13, 14,
      15, 16, -1, 18, 19, 20, 21, 22, 23, 24,
      25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
      35, 36, 37, 38, -1, -1, -1, 42, 43, 559,
      90, -1, -1, -1, 49, -1, 566, 52, -1, -1,
     570, -1, 57, 58, 59, -1, -1, -1, 63, 64,
      -1, -1, -1, 68, -1, 90, -1, 1, -1, 589,
       4, 5, 6, 7, 8, -1, -1, -1, -1, 13,
      14, 15, -1, -1, -1, 90, 91, 92, 93, 4,
      -1, 96, 7, 8, 28, 29, -1, 31, 13, 14,
      15, 52, 53, 54, 55, 56, 57, 58, 59, 60,
      61, 45, -1, -1, 29, -1, 31, -1, 5, 6,
       7, 8, 642, -1, -1, 645, 13, 14, 15, 649,
       5, 6, 7, 8, 68, 69, -1, -1, 13, 14,
      15, 661, 5, 6, 7, 8, -1, -1, 668, -1,
      13, 14, 15, -1, -1, -1, 90, 677, 678, -1,
      94, -1, 96, -1, -1, 1, 686, 3, 4, 5,
       6, 7, 8, 9, 10, -1, 12, 13, 14, 15,
      16, -1, 18, 19, 20, 21, 22, 23, 24, 25,
      26, 27, 28, 29, 30, 31, 32, -1, 34, 35,
      36, 37, 38, 90, -1, -1, 42, 43, -1, -1,
      -1, -1, -1, 49, -1, 90, 52, -1, 738, -1,
      -1, 57, 58, 59, -1, -1, -1, 63, 64, -1,
      -1, -1, 68, -1, 1, 755, 3, -1, 758, -1,
     760, -1, 9, 10, -1, 12, -1, 28, -1, -1,
      31, -1, -1, -1, 90, -1, 92, 93, -1, -1,
      96, -1, -1, 30, 45, 32, -1, 34, 35, 36,
      37, 38, -1, -1, -1, 42, 43, -1, 45, -1,
      -1, -1, 49, 803, -1, 52, 806, 68, 69, -1,
      57, 58, 59, -1, -1, -1, 63, 64, -1, -1,
      67, 68, 69, 1, -1, 3, -1, -1, -1, 90,
      -1, 9, 10, 94, 12, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, 92, 93, -1, -1, 96,
      -1, -1, 30, -1, 32, -1, 34, 35, 36, 37,
      38, -1, -1, -1, 42, 43, -1, -1, -1, -1,
      -1, 49, -1, 4, 52, -1, 7, 8, -1, 57,
      58, 59, 13, 14, 15, 63, 64, -1, -1, 1,
      68, -1, 4, 5, 6, 7, 8, -1, 29, -1,
      31, 13, 14, 15, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, 92, 93, 28, 29, 96, 31,
       3, -1, -1, -1, -1, -1, 9, 10, -1, 12,
      -1, 4, -1, 45, 7, 8, 5, 6, 7, 8,
      13, 14, 15, -1, 13, 14, 15, 30, -1, 32,
      -1, 34, 35, 36, 37, 38, 29, -1, 31, 42,
      43, -1, 31, -1, -1, -1, 49, -1, -1, 52,
      -1, -1, -1, -1, 57, 58, 59, -1, 90, -1,
      63, 64, 94, -1, 96, 68, 3, -1, -1, -1,
      -1, -1, 9, 10, -1, 12, -1, 5, 6, 7,
       8, -1, -1, -1, -1, 13, 14, 15, -1, 92,
      93, -1, -1, 30, 97, 32, -1, 34, 35, 36,
      37, 38, 11, 31, -1, 42, 43, 4, 5, 6,
       7, 8, 49, -1, 11, 52, 13, 14, 15, -1,
      57, 58, 59, -1, -1, -1, 63, 64, -1, -1,
      -1, 68, 29, -1, 31, 44, 45, 46, 47, 48,
      49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
      59, 60, 61, -1, -1, 92, 93, -1, -1, -1,
      97, 3, 4, 5, 6, 7, 8, 9, 10, -1,
      12, 13, 14, 15, 16, -1, 18, 19, 20, 21,
      22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
      32, -1, 34, 35, 36, 37, 38, -1, -1, 1,
      42, 43, 4, -1, -1, 7, 8, 49, -1, -1,
      52, 13, 14, 15, -1, 57, 58, 59, -1, -1,
      -1, 63, 64, -1, -1, -1, 68, 29, -1, 31,
      32, -1, -1, -1, 5, 6, 7, 8, -1, -1,
       3, 4, 13, 14, 15, -1, 9, 10, 90, 12,
      92, 93, -1, 16, 96, 18, 19, 20, 21, 22,
      23, 24, 25, 26, 27, 28, -1, 30, -1, 32,
      -1, 34, 35, 36, 37, 38, -1, -1, -1, 42,
      43, 4, 5, 6, 7, 8, 49, -1, -1, 52,
      13, 14, 15, -1, 57, 58, 59, -1, -1, -1,
      63, 64, -1, -1, -1, 68, 29, 3, 31, -1,
      -1, -1, -1, 9, 10, -1, 12, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, 90, -1, 92,
      93, -1, -1, 96, 30, -1, 32, -1, 34, 35,
      36, 37, 38, -1, -1, -1, 42, 43, -1, 5,
       6, 7, 8, 49, -1, -1, 52, 13, 14, 15,
      -1, 57, 58, 59, -1, -1, -1, 63, 64, -1,
      -1, -1, 68, 1, -1, 3, -1, -1, -1, -1,
      -1, 9, 10, -1, 12, 51, 52, 53, 54, 55,
      56, 57, 58, 59, 60, 61, 92, 93, -1, -1,
      96, -1, 30, -1, 32, -1, 34, 35, 36, 37,
      38, -1, -1, -1, 42, 43, -1, 5, 6, 7,
       8, 49, -1, -1, 52, 13, 14, 15, -1, 57,
      58, 59, -1, -1, -1, 63, 64, -1, -1, -1,
      68, 3, 4, 5, 6, 7, 8, 9, 10, -1,
      12, 13, 14, 15, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, 92, 93, -1, 29, 30, 31,
      32, -1, 34, 35, 36, 37, 38, -1, -1, -1,
      42, 43, -1, -1, -1, -1, -1, 49, -1, -1,
      52, -1, -1, -1, -1, 57, 58, 59, -1, -1,
      -1, 63, 64, -1, -1, -1, 68, 3, 4, -1,
      -1, 7, 8, 9, 10, -1, 12, 13, 14, 15,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      92, 93, -1, 29, 30, 31, 32, -1, 34, 35,
      36, 37, 38, -1, -1, -1, 42, 43, 4, 5,
       6, 7, 8, 49, -1, -1, 52, 13, 14, 15,
      -1, 57, 58, 59, -1, -1, -1, 63, 64, -1,
      -1, 3, 68, 29, -1, 31, -1, 9, 10, -1,
      12, -1, 4, 5, 6, 7, 8, -1, -1, -1,
      -1, 13, 14, 15, -1, -1, 92, 93, 30, -1,
      32, -1, 34, 35, 36, 37, 38, 29, -1, 31,
      42, 43, 4, 5, 6, 7, 8, 49, -1, -1,
      52, 13, 14, 15, -1, 57, 58, 59, -1, -1,
      -1, 63, 64, -1, -1, 3, 68, 29, -1, 31,
      -1, 9, 10, -1, 12, -1, 4, 5, 6, 7,
       8, -1, -1, -1, -1, 13, 14, 15, 90, -1,
      92, 93, 30, -1, 32, -1, 34, 35, 36, 37,
      38, 29, -1, -1, 42, 43, 4, 5, 6, 7,
       8, 49, -1, -1, 52, 13, 14, 15, -1, 57,
      58, 59, -1, -1, -1, 63, 64, -1, -1, 3,
      68, 29, -1, -1, -1, 9, 10, -1, 12, -1,
       4, 5, 6, 7, 8, -1, -1, -1, -1, 13,
      14, 15, -1, -1, 92, 93, 30, -1, 32, -1,
      34, 35, 36, 37, 38, 29, -1, -1, 42, 43,
       4, 5, 6, 7, 8, 49, -1, -1, 52, 13,
      14, 15, -1, 57, 58, 59, -1, -1, -1, 63,
      64, -1, -1, 3, 68, 29, -1, -1, -1, 9,
      10, -1, 12, -1, 4, 5, 6, 7, 8, -1,
      -1, -1, -1, 13, 14, 15, -1, -1, 92, 93,
      30, -1, 32, -1, 34, 35, 36, 37, 38, 29,
      -1, -1, 42, 43, -1, -1, -1, -1, -1, 49,
      -1, -1, 52, -1, -1, -1, -1, 57, 58, 59,
      -1, -1, -1, 63, 64, -1, -1, 3, 68, -1,
      -1, -1, -1, 9, 10, 46, 12, 48, 49, 50,
      51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
      61, -1, 92, 93, 30, -1, 32, -1, 34, 35,
      36, 37, 38, 11, -1, -1, 42, 43, -1, -1,
      -1, -1, -1, 49, -1, -1, 52, -1, -1, -1,
      -1, 57, 58, 59, -1, -1, -1, 63, 64, -1,
      -1, -1, 68, -1, -1, -1, 44, 45, 46, -1,
      48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
      58, 59, 60, 61, -1, -1, 92, 93, 44, 45,
      46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
      56, 57, 58, 59, 60, 61, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, 44, 45, 46, 97,
      48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
      58, 59, 60, 61, -1, -1, -1, -1, 44, 45,
      46, 97, 48, 49, 50, 51, 52, 53, 54, 55,
      56, 57, 58, 59, 60, 61, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, 44, 45, 46, 97,
      48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
      58, 59, 60, 61, -1, -1, -1, -1, 44, 45,
      46, 97, 48, 49, 50, 51, 52, 53, 54, 55,
      56, 57, 58, 59, 60, 61, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, 44, 45, 46, 97,
      48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
      58, 59, 60, 61, -1, -1, 44, 45, 46, 95,
      48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
      58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, 44, 45, 46, 94, 48, 49, 50,
      51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
      61, 31, -1, -1, -1, -1, 94, -1, -1, -1,
      -1, -1, -1, -1, 44, 45, 46, -1, 48, 49,
      50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
      60, 61, -1, 94, 44, 45, 46, 47, 48, 49,
      50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
      60, 61, 44, 45, 46, -1, 48, 49, 50, 51,
      52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
      49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
      59, 60, 61, 50, 51, 52, 53, 54, 55, 56,
      57, 58, 59, 60, 61
};
int yydebug;
int yychar; yystype yylval; int yynerrs;
int
yyparse ()
    
{
  register int yystate;
  register int yyn;
  int yyresult;
  int yyerrstatus;
  int yychar1 = 0;
  short yyssa[200];
  short *yyss = yyssa;
  register short *yyssp;
  yystype yyvsa[200];
  yystype *yyvs = yyvsa;
  register yystype *yyvsp;
  long unsigned int yystacksize = 200;
  yystype yyval;
  int yylen;
  do { if (yydebug) fprintf (stderr, "Starting parse\n"); } while (0);
  yystate = 0;
  yyerrstatus = 0;
  yynerrs = 0;
  yychar = -2;
  yyssp = yyss;
  yyvsp = yyvs;
  goto yysetstate;
 yynewstate:
  yyssp++;
 yysetstate:
  *yyssp = yystate;
  if (yyssp >= yyss + yystacksize - 1)
    {
      long unsigned int yysize = yyssp - yyss + 1;
      {
 yystype *yyvs1 = yyvs;
 short *yyss1 = yyss;
 do { size_t newsize; short *newss; yystype *newvs; newsize = *(&yystacksize) *= 2; if (malloced_yyss) { newss = realloc (*(&yyss1), newsize * sizeof (short)); newvs = realloc (*(&yyvs1), newsize * sizeof (yystype)); } else { newss = malloc (newsize * sizeof (short)); newvs = malloc (newsize * sizeof (yystype)); if (newss) memcpy (newss, *(&yyss1), (yysize * sizeof (*yyssp))); if (newvs) memcpy (newvs, *(&yyvs1), (yysize * sizeof (*yyvsp))); } if (!newss || !newvs) { yyerror ("parser stack1 overflow"); return 2; } *(&yyss1) = newss; *(&yyvs1) = newvs; malloced_yyss = newss; malloced_yyvs = (void *) newvs; } while (0)
                   ;
 yyss = yyss1;
 yyvs = yyvs1;
      }
      yyssp = yyss + yysize - 1;
      yyvsp = yyvs + yysize - 1;
      do { if (yydebug) fprintf (stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize); } while (0)
                                     ;
      if (yyssp >= yyss + yystacksize - 1)
 goto yyabortlab;
    }
  do { if (yydebug) fprintf (stderr, "Entering state %d\n", yystate); } while (0);
  goto yybackup;
yybackup:
  yyn = yypact[yystate];
  if (yyn == -32768)
    goto yydefault;
  if (yychar == -2)
    {
      do { if (yydebug) fprintf (stderr, "Reading a token: "); } while (0);
      yychar = yylex ();
    }
  if (yychar <= 0)
    {
      yychar1 = 0;
      yychar = 0;
      do { if (yydebug) fprintf (stderr, "Now at end of input.\n"); } while (0);
    }
  else
    {
      yychar1 = ((unsigned)(yychar) <= 329 ? yytranslate[yychar] : 302);
      if (yydebug)
 {
   fprintf (stderr, "Next token is %d (%s",
       yychar, yytname[yychar1]);
   yyprint(stderr,yychar,yylval);
   fprintf (stderr, ")\n");
 }
    }
  yyn += yychar1;
  if (yyn < 0 || yyn > 3344 || yycheck[yyn] != yychar1)
    goto yydefault;
  yyn = yytable[yyn];
  if (yyn < 0)
    {
      if (yyn == -32768)
 goto yyerrlab;
      yyn = -yyn;
      goto yyreduce;
    }
  else if (yyn == 0)
    goto yyerrlab;
  if (yyn == 925)
    goto yyacceptlab;
  do { if (yydebug) fprintf (stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); } while (0)
                                 ;
  if (yychar != 0)
    yychar = -2;
  *++yyvsp = yylval;
  if (yyerrstatus)
    yyerrstatus--;
  yystate = yyn;
  goto yynewstate;
yydefault:
  yyn = yydefact[yystate];
  if (yyn == 0)
    goto yyerrlab;
  goto yyreduce;
yyreduce:
  yylen = yyr2[yyn];
  yyval = yyvsp[1-yylen];
  if (yydebug)
    {
      int yyi;
      fprintf (stderr, "Reducing via rule %d (line %d), ",
   yyn, yyrline[yyn]);
      for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
 fprintf (stderr, "%s ", yytname[yyrhs[yyi]]);
      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
    }
  switch (yyn) {
case 1:
{ if (pedantic)
      pedwarn ("ISO C forbids an empty source file");
  ;
    break;}
case 3:
{yyval.ttype = (tree) ((void *)0); ;
    break;}
case 5:
{yyval.ttype = (tree) ((void *)0); ggc_collect(); ;
    break;}
case 10:
{ do { pedantic = yyvsp[-1].itype & 1; warn_pointer_arith = (yyvsp[-1].itype >> 1) & 1; warn_traditional = (yyvsp[-1].itype >> 2) & 1; flag_iso = (yyvsp[-1].itype >> 3) & 1; } while (0); ;
    break;}
case 11:
{ if (pedantic)
      error ("ISO C forbids data definition with no type or storage class");
    else
      warning ("data definition has no type or storage class");
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 12:
{ do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 13:
{ do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 14:
{ shadow_tag (yyvsp[-1].ttype); ;
    break;}
case 17:
{ if (pedantic)
      pedwarn ("ISO C does not allow extra `;' outside of a function"); ;
    break;}
case 18:
{ if (! start_function (current_declspecs, yyvsp[0].ttype,
     all_prefix_attributes))
      { yyerror ("syntax error"); goto yyerrlab1; };
  ;
    break;}
case 19:
{ ((current_function_decl)->decl.locus) = yyvsp[0].location;
    store_parm_decls (); ;
    break;}
case 20:
{ finish_function ();
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 21:
{ do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 22:
{ if (! start_function (current_declspecs, yyvsp[0].ttype,
     all_prefix_attributes))
      { yyerror ("syntax error"); goto yyerrlab1; };
  ;
    break;}
case 23:
{ ((current_function_decl)->decl.locus) = yyvsp[0].location;
    store_parm_decls (); ;
    break;}
case 24:
{ finish_function ();
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 25:
{ do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 26:
{ if (! start_function ((tree) ((void *)0), yyvsp[0].ttype,
     all_prefix_attributes))
      { yyerror ("syntax error"); goto yyerrlab1; };
  ;
    break;}
case 27:
{ ((current_function_decl)->decl.locus) = yyvsp[0].location;
    store_parm_decls (); ;
    break;}
case 28:
{ finish_function ();
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 29:
{ do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 32:
{ yyval.code = ADDR_EXPR; ;
    break;}
case 33:
{ yyval.code = NEGATE_EXPR; ;
    break;}
case 34:
{ yyval.code = CONVERT_EXPR;
  if (warn_traditional && !in_system_header1)
    warning ("traditional C rejects the unary plus operator");
  ;
    break;}
case 35:
{ yyval.code = PREINCREMENT_EXPR; ;
    break;}
case 36:
{ yyval.code = PREDECREMENT_EXPR; ;
    break;}
case 37:
{ yyval.code = BIT_NOT_EXPR; ;
    break;}
case 38:
{ yyval.code = TRUTH_NOT_EXPR; ;
    break;}
case 39:
{ yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
    break;}
case 40:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 42:
{ yyval.ttype = build_tree_list_stat((tree) ((void *)0),yyvsp[0].ttype ); ;
    break;}
case 43:
{ chainon (yyvsp[-2].ttype, build_tree_list_stat((tree) ((void *)0),yyvsp[0].ttype )); ;
    break;}
case 45:
{ yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
    break;}
case 46:
{ yyval.ttype = yyvsp[0].ttype;
    do { pedantic = yyvsp[-1].itype & 1; warn_pointer_arith = (yyvsp[-1].itype >> 1) & 1; warn_traditional = (yyvsp[-1].itype >> 2) & 1; flag_iso = (yyvsp[-1].itype >> 3) & 1; } while (0); ;
    break;}
case 47:
{ yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0);
    overflow_warning (yyval.ttype); ;
    break;}
case 48:
{ yyval.ttype = finish_label_address_expr (yyvsp[0].ttype); ;
    break;}
case 49:
{ skip_evaluation--;
    if (((enum tree_code) (yyvsp[0].ttype)->common.code) == COMPONENT_REF
        && ((((((yyvsp[0].ttype)->exp.operands[1])))->decl.lang_flag_4) == 1))
      error ("`sizeof' applied to a bit-field");
    yyval.ttype = c_sizeof_or_alignof_type (((yyvsp[0].ttype)->common.type), SIZEOF_EXPR, 1); ;
    break;}
case 50:
{ skip_evaluation--;
    yyval.ttype = c_sizeof_or_alignof_type (groktypename (yyvsp[-1].ttype), SIZEOF_EXPR, 1); ;
    break;}
case 51:
{ skip_evaluation--;
    yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ;
    break;}
case 52:
{ skip_evaluation--;
    yyval.ttype = c_sizeof_or_alignof_type (groktypename (yyvsp[-1].ttype), ALIGNOF_EXPR, 1); ;
    break;}
case 53:
{ yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ;
    break;}
case 54:
{ yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ;
    break;}
case 55:
{ skip_evaluation++; ;
    break;}
case 56:
{ skip_evaluation++; ;
    break;}
case 57:
{ skip_evaluation++; ;
    break;}
case 59:
{ yyval.ttype = c_cast_expr (yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 61:
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 62:
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 63:
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 64:
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 65:
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 66:
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 67:
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 68:
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 69:
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 70:
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 71:
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 72:
{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 73:
{ yyvsp[-1].ttype = lang_hooks.truthvalue_conversion
      (default_conversion (yyvsp[-1].ttype));
    skip_evaluation += yyvsp[-1].ttype == c_global_trees[CTI_TRUTHVALUE_FALSE]; ;
    break;}
case 74:
{ skip_evaluation -= yyvsp[-3].ttype == c_global_trees[CTI_TRUTHVALUE_FALSE];
    yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
    break;}
case 75:
{ yyvsp[-1].ttype = lang_hooks.truthvalue_conversion
      (default_conversion (yyvsp[-1].ttype));
    skip_evaluation += yyvsp[-1].ttype == c_global_trees[CTI_TRUTHVALUE_TRUE]; ;
    break;}
case 76:
{ skip_evaluation -= yyvsp[-3].ttype == c_global_trees[CTI_TRUTHVALUE_TRUE];
    yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
    break;}
case 77:
{ yyvsp[-1].ttype = lang_hooks.truthvalue_conversion
      (default_conversion (yyvsp[-1].ttype));
    skip_evaluation += yyvsp[-1].ttype == c_global_trees[CTI_TRUTHVALUE_FALSE]; ;
    break;}
case 78:
{ skip_evaluation += ((yyvsp[-4].ttype == c_global_trees[CTI_TRUTHVALUE_TRUE])
          - (yyvsp[-4].ttype == c_global_trees[CTI_TRUTHVALUE_FALSE])); ;
    break;}
case 79:
{ skip_evaluation -= yyvsp[-6].ttype == c_global_trees[CTI_TRUTHVALUE_TRUE];
    yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
    break;}
case 80:
{ if (pedantic)
      pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
    yyvsp[0].ttype = save_expr (default_conversion (yyvsp[-1].ttype));
    yyvsp[-1].ttype = lang_hooks.truthvalue_conversion (yyvsp[0].ttype);
    skip_evaluation += yyvsp[-1].ttype == c_global_trees[CTI_TRUTHVALUE_TRUE]; ;
    break;}
case 81:
{ skip_evaluation -= yyvsp[-4].ttype == c_global_trees[CTI_TRUTHVALUE_TRUE];
    yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
    break;}
case 82:
{ char class;
    yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
    class = tree_code_type[(int) (((enum tree_code) (yyval.ttype)->common.code))];
    if ((strchr ("<12ers", (class)) != 0))
      (((yyval.ttype)->exp.complexity) = (int) (MODIFY_EXPR));
  ;
    break;}
case 83:
{ char class;
    yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
    class = tree_code_type[(int) (((enum tree_code) (yyval.ttype)->common.code))];
    if ((strchr ("<12ers", (class)) != 0))
      (((yyval.ttype)->exp.complexity) = (int) (ERROR_MARK));
  ;
    break;}
case 84:
{
    if (yychar == -2)
      yychar = yylex ();
    yyval.ttype = build_external_ref (yyvsp[0].ttype, yychar == '(');
  ;
    break;}
case 87:
{ yyval.ttype = fname_decl ((((struct c_common_identifier *) (yyval.ttype))->node.rid_code), yyval.ttype); ;
    break;}
case 88:
{ start_init ((tree) ((void *)0), ((void *)0), 0);
    yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
    really_start_incremental_init (yyvsp[-2].ttype); ;
    break;}
case 89:
{ tree constructor = pop_init_level (0);
    tree type = yyvsp[-5].ttype;
    finish_init ();
    if (pedantic && ! flag_isoc99)
      pedwarn ("ISO C90 forbids compound literals");
    yyval.ttype = build_compound_literal (type, constructor);
  ;
    break;}
case 90:
{ char class = tree_code_type[(int) (((enum tree_code) (yyvsp[-1].ttype)->common.code))];
    if ((strchr ("<12ers", (class)) != 0))
      (((yyvsp[-1].ttype)->exp.complexity) = (int) (ERROR_MARK));
    yyval.ttype = yyvsp[-1].ttype; ;
    break;}
case 91:
{ yyval.ttype = global_trees[TI_ERROR_MARK]; ;
    break;}
case 92:
{ if (pedantic)
      pedwarn ("ISO C forbids braced-groups within expressions");
    yyval.ttype = c_finish_stmt_expr (yyvsp[-2].ttype);
  ;
    break;}
case 93:
{ c_finish_stmt_expr (yyvsp[-2].ttype);
    yyval.ttype = global_trees[TI_ERROR_MARK];
  ;
    break;}
case 94:
{ yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
    break;}
case 95:
{ yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); ;
    break;}
case 96:
{ yyval.ttype = build_offsetof (groktypename (yyvsp[-3].ttype), yyvsp[-1].ttype); ;
    break;}
case 97:
{ yyval.ttype = global_trees[TI_ERROR_MARK]; ;
    break;}
case 98:
{
                  tree c;
                  c = fold (yyvsp[-5].ttype);
                  while ((((enum tree_code) (c)->common.code) == NOP_EXPR || ((enum tree_code) (c)->common.code) == CONVERT_EXPR || ((enum tree_code) (c)->common.code) == NON_LVALUE_EXPR) && ((c)->exp.operands[0]) != global_trees[TI_ERROR_MARK] && (((((c)->common.type))->type.mode) == ((((((c)->exp.operands[0]))->common.type))->type.mode))) (c) = ((c)->exp.operands[0]);
                  if (((enum tree_code) (c)->common.code) != INTEGER_CST)
                    error ("first argument to __builtin_choose_expr not a constant");
                  yyval.ttype = integer_zerop (c) ? yyvsp[-1].ttype : yyvsp[-3].ttype;
  ;
    break;}
case 99:
{ yyval.ttype = global_trees[TI_ERROR_MARK]; ;
    break;}
case 100:
{
    tree e1, e2;
    e1 = ((groktypename (yyvsp[-3].ttype))->type.main_variant);
    e2 = ((groktypename (yyvsp[-1].ttype))->type.main_variant);
    yyval.ttype = comptypes (e1, e2)
      ? build_int_2_wide ((unsigned long) (1), (long) (0)) : build_int_2_wide ((unsigned long) (0), (long) (0));
  ;
    break;}
case 101:
{ yyval.ttype = global_trees[TI_ERROR_MARK]; ;
    break;}
case 102:
{ yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
    break;}
case 103:
{ yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 104:
{
                  tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
    yyval.ttype = build_component_ref (expr, yyvsp[0].ttype);
  ;
    break;}
case 105:
{ yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
    break;}
case 106:
{ yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
    break;}
case 107:
{ yyval.ttype = tree_cons_stat (yyvsp[0].ttype,(tree) ((void *)0),(tree) ((void *)0) ); ;
    break;}
case 108:
{ yyval.ttype = tree_cons_stat (yyvsp[0].ttype,(tree) ((void *)0),yyvsp[-2].ttype ); ;
    break;}
case 109:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[-1].ttype,yyvsp[-3].ttype ); ;
    break;}
case 112:
{ ;
    break;}
case 117:
{ do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 118:
{ do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 119:
{ shadow_tag_warned (yyvsp[-1].ttype, 1);
    pedwarn ("empty declaration"); ;
    break;}
case 120:
{ pedwarn ("empty declaration"); ;
    break;}
case 121:
{ ;
    break;}
case 122:
{ pending_xref_error ();
    do { declspec_stack = tree_cons_stat (build_tree_list_stat(prefix_attributes,all_prefix_attributes ),current_declspecs,declspec_stack ); } while (0);
    split_specs_attrs1 (yyvsp[0].ttype,
         &current_declspecs, &prefix_attributes);
    all_prefix_attributes = prefix_attributes; ;
    break;}
case 123:
{ all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); ;
    break;}
case 124:
{ do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 125:
{ do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 126:
{ do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 127:
{ do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 128:
{ shadow_tag (yyvsp[-1].ttype); ;
    break;}
case 129:
{ do { pedantic = yyvsp[-1].itype & 1; warn_pointer_arith = (yyvsp[-1].itype >> 1) & 1; warn_traditional = (yyvsp[-1].itype >> 2) & 1; flag_iso = (yyvsp[-1].itype >> 3) & 1; } while (0); ;
    break;}
case 130:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,(tree) ((void *)0) );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 131:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 132:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 133:
{ yyval.ttype = tree_cons_stat (yyvsp[0].ttype,(tree) ((void *)0),yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 134:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 135:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 136:
{ yyval.ttype = tree_cons_stat (yyvsp[0].ttype,(tree) ((void *)0),(tree) ((void *)0) );
    ((yyval.ttype)->common.static_flag) = 0; ;
    break;}
case 137:
{ yyval.ttype = tree_cons_stat (yyvsp[0].ttype,(tree) ((void *)0),yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 138:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,(tree) ((void *)0) );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 139:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 140:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 141:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 142:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 143:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 144:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 145:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,(tree) ((void *)0) );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 146:
{ yyval.ttype = tree_cons_stat (yyvsp[0].ttype,(tree) ((void *)0),yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 147:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 148:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 149:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 150:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 151:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 152:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 153:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 154:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 155:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 156:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 157:
{ yyval.ttype = tree_cons_stat (yyvsp[0].ttype,(tree) ((void *)0),yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 158:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 159:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 160:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 161:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 162:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,(tree) ((void *)0) );
    ((yyval.ttype)->common.static_flag) = 0; ;
    break;}
case 163:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 164:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 165:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 166:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 167:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 168:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 169:
{ yyval.ttype = tree_cons_stat (yyvsp[0].ttype,(tree) ((void *)0),yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 170:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 171:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 172:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 173:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 174:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 175:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 176:
{ yyval.ttype = tree_cons_stat (yyvsp[0].ttype,(tree) ((void *)0),yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 177:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 178:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 179:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 180:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 181:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 182:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 183:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 184:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 185:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 186:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 187:
{ yyval.ttype = tree_cons_stat (yyvsp[0].ttype,(tree) ((void *)0),yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 188:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 189:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 190:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 191:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 192:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 193:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 194:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 195:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 196:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 197:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 198:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 199:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 200:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 201:
{ if (extra_warnings && ((yyvsp[-1].ttype)->common.static_flag))
      warning ("`%s' is not at beginning of declaration",
        ((const char *) (yyvsp[0].ttype)->identifier.id.str));
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 202:
{ yyval.ttype = tree_cons_stat (yyvsp[0].ttype,(tree) ((void *)0),yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = ((yyvsp[-1].ttype)->common.static_flag); ;
    break;}
case 203:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 204:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 205:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 206:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-1].ttype );
    ((yyval.ttype)->common.static_flag) = 1; ;
    break;}
case 263:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 264:
{ yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 268:
{ ; ;
    break;}
case 271:
{
    yyval.ttype = lookup_name (yyvsp[0].ttype); ;
    break;}
case 272:
{ skip_evaluation--;
    if (((enum tree_code) (yyvsp[-1].ttype)->common.code) == COMPONENT_REF
        && ((((((yyvsp[-1].ttype)->exp.operands[1])))->decl.lang_flag_4) == 1))
      error ("`typeof' applied to a bit-field");
    yyval.ttype = ((yyvsp[-1].ttype)->common.type); ;
    break;}
case 273:
{ skip_evaluation--; yyval.ttype = groktypename (yyvsp[-1].ttype); ;
    break;}
case 278:
{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
       chainon (yyvsp[-1].ttype, all_prefix_attributes));
    start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
    break;}
case 279:
{ finish_init ();
    finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
    break;}
case 280:
{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
           chainon (yyvsp[0].ttype, all_prefix_attributes));
    finish_decl (d, (tree) ((void *)0), yyvsp[-1].ttype);
                ;
    break;}
case 281:
{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
       chainon (yyvsp[-1].ttype, all_prefix_attributes));
    start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
    break;}
case 282:
{ finish_init ();
    finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
    break;}
case 283:
{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
           chainon (yyvsp[0].ttype, all_prefix_attributes));
    finish_decl (d, (tree) ((void *)0), yyvsp[-1].ttype); ;
    break;}
case 284:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 285:
{ yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 286:
{ yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 287:
{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 288:
{ yyval.ttype = yyvsp[-3].ttype; ;
    break;}
case 289:
{;
    break;}
case 290:
{ yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 291:
{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 292:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 293:
{ yyval.ttype = build_tree_list_stat(yyvsp[0].ttype,(tree) ((void *)0) ); ;
    break;}
case 294:
{ yyval.ttype = build_tree_list_stat(yyvsp[-3].ttype,build_tree_list_stat((tree) ((void *)0),yyvsp[-1].ttype ) ); ;
    break;}
case 295:
{ yyval.ttype = build_tree_list_stat(yyvsp[-5].ttype,tree_cons_stat ((tree) ((void *)0),yyvsp[-3].ttype,yyvsp[-1].ttype ) ); ;
    break;}
case 296:
{ yyval.ttype = build_tree_list_stat(yyvsp[-3].ttype,yyvsp[-1].ttype ); ;
    break;}
case 304:
{ really_start_incremental_init ((tree) ((void *)0)); ;
    break;}
case 305:
{ yyval.ttype = pop_init_level (0); ;
    break;}
case 306:
{ yyval.ttype = global_trees[TI_ERROR_MARK]; ;
    break;}
case 307:
{ if (pedantic)
      pedwarn ("ISO C forbids empty initializer braces"); ;
    break;}
case 311:
{ if (pedantic && ! flag_isoc99)
      pedwarn ("ISO C90 forbids specifying subobject to initialize"); ;
    break;}
case 312:
{ if (pedantic)
      pedwarn ("obsolete use of designated initializer without `='"); ;
    break;}
case 313:
{ set_init_label (yyvsp[-1].ttype);
    if (pedantic)
      pedwarn ("obsolete use of designated initializer with `:'"); ;
    break;}
case 314:
{;
    break;}
case 316:
{ push_init_level (0); ;
    break;}
case 317:
{ process_init_element (pop_init_level (0)); ;
    break;}
case 318:
{ process_init_element (yyvsp[0].ttype); ;
    break;}
case 322:
{ set_init_label (yyvsp[0].ttype); ;
    break;}
case 323:
{ set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype);
    if (pedantic)
      pedwarn ("ISO C forbids specifying range of elements to initialize"); ;
    break;}
case 324:
{ set_init_index (yyvsp[-1].ttype, (tree) ((void *)0)); ;
    break;}
case 325:
{ if (pedantic)
      pedwarn ("ISO C forbids nested functions");
    push_function_context ();
    if (! start_function (current_declspecs, yyvsp[0].ttype,
     all_prefix_attributes))
      {
        pop_function_context ();
        { yyerror ("syntax error"); goto yyerrlab1; };
      }
  ;
    break;}
case 326:
{ tree decl = current_function_decl;
    ((decl)->decl.locus) = yyvsp[0].location;
    store_parm_decls (); ;
    break;}
case 327:
{ tree decl = current_function_decl;
    add_stmt (yyvsp[0].ttype);
    finish_function ();
    pop_function_context ();
    add_stmt (build_stmt (DECL_EXPR, decl)); ;
    break;}
case 328:
{ if (pedantic)
      pedwarn ("ISO C forbids nested functions");
    push_function_context ();
    if (! start_function (current_declspecs, yyvsp[0].ttype,
     all_prefix_attributes))
      {
        pop_function_context ();
        { yyerror ("syntax error"); goto yyerrlab1; };
      }
  ;
    break;}
case 329:
{ tree decl = current_function_decl;
    ((decl)->decl.locus) = yyvsp[0].location;
    store_parm_decls (); ;
    break;}
case 330:
{ tree decl = current_function_decl;
    add_stmt (yyvsp[0].ttype);
    finish_function ();
    pop_function_context ();
    add_stmt (build_stmt (DECL_EXPR, decl)); ;
    break;}
case 333:
{ yyval.ttype = yyvsp[-2].ttype ? tree_cons_stat (yyvsp[-2].ttype,yyvsp[-1].ttype,(tree) ((void *)0) ) : yyvsp[-1].ttype; ;
    break;}
case 334:
{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, (tree) ((void *)0)); ;
    break;}
case 335:
{ yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
    break;}
case 336:
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 340:
{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, (tree) ((void *)0)); ;
    break;}
case 341:
{ yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
    break;}
case 343:
{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, (tree) ((void *)0)); ;
    break;}
case 344:
{ yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
    break;}
case 345:
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 346:
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 347:
{ yyval.ttype = yyvsp[-2].ttype ? tree_cons_stat (yyvsp[-2].ttype,yyvsp[-1].ttype,(tree) ((void *)0) ) : yyvsp[-1].ttype; ;
    break;}
case 348:
{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, (tree) ((void *)0)); ;
    break;}
case 349:
{ yyval.ttype = yyvsp[-2].ttype ? tree_cons_stat (yyvsp[-2].ttype,yyvsp[-1].ttype,(tree) ((void *)0) ) : yyvsp[-1].ttype; ;
    break;}
case 350:
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 351:
{ yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ;
    break;}
case 353:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 354:
{ yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 355:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 356:
{ yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 357:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 358:
{ yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 359:
{ yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
  ;
    break;}
case 360:
{ yyval.ttype = finish_struct (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype),
          chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
    break;}
case 361:
{ yyval.ttype = finish_struct (start_struct (RECORD_TYPE, (tree) ((void *)0)),
          nreverse (yyvsp[-2].ttype), chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
  ;
    break;}
case 362:
{ yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
    break;}
case 363:
{ yyval.ttype = finish_struct (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype),
          chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
    break;}
case 364:
{ yyval.ttype = finish_struct (start_struct (UNION_TYPE, (tree) ((void *)0)),
          nreverse (yyvsp[-2].ttype), chainon (yyvsp[-4].ttype, yyvsp[0].ttype));
  ;
    break;}
case 365:
{ yyval.ttype = start_enum (yyvsp[-1].ttype); ;
    break;}
case 366:
{ yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
        chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); ;
    break;}
case 367:
{ yyval.ttype = start_enum ((tree) ((void *)0)); ;
    break;}
case 368:
{ yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype),
        chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ;
    break;}
case 369:
{ yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
    break;}
case 370:
{ yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
    break;}
case 371:
{ yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype);
    if (pedantic && !(((yyval.ttype)->type.size) != (tree) ((void *)0)))
      pedwarn ("ISO C forbids forward references to `enum' types"); ;
    break;}
case 375:
{ if (pedantic && ! flag_isoc99)
      pedwarn ("comma at end of enumerator list"); ;
    break;}
case 376:
{ yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 377:
{ yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype);
    pedwarn ("no semicolon at end of struct or union"); ;
    break;}
case 378:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 379:
{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[-2].ttype); ;
    break;}
case 380:
{ if (pedantic)
      pedwarn ("extra semicolon in struct or union specified"); ;
    break;}
case 381:
{ yyval.ttype = yyvsp[0].ttype;
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 382:
{
    if (pedantic)
      pedwarn ("ISO C doesn't support unnamed structs/unions");
    yyval.ttype = grokfield(((void *)0), current_declspecs, (tree) ((void *)0));
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 383:
{ yyval.ttype = yyvsp[0].ttype;
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 384:
{ if (pedantic)
      pedwarn ("ISO C forbids member declarations with no members");
    shadow_tag_warned (yyvsp[0].ttype, pedantic);
    yyval.ttype = (tree) ((void *)0); ;
    break;}
case 385:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 386:
{ yyval.ttype = yyvsp[0].ttype;
    do { pedantic = yyvsp[-1].itype & 1; warn_pointer_arith = (yyvsp[-1].itype >> 1) & 1; warn_traditional = (yyvsp[-1].itype >> 2) & 1; flag_iso = (yyvsp[-1].itype >> 3) & 1; } while (0); ;
    break;}
case 388:
{ ((yyvsp[0].ttype)->common.chain) = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 390:
{ ((yyvsp[0].ttype)->common.chain) = yyvsp[-3].ttype; yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 391:
{ yyval.ttype = grokfield (yyvsp[-1].ttype, current_declspecs, (tree) ((void *)0));
    decl_attributes (&yyval.ttype,
       chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
    break;}
case 392:
{ yyval.ttype = grokfield (yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
    decl_attributes (&yyval.ttype,
       chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
    break;}
case 393:
{ yyval.ttype = grokfield ((tree) ((void *)0), current_declspecs, yyvsp[-1].ttype);
    decl_attributes (&yyval.ttype,
       chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
    break;}
case 394:
{ yyval.ttype = grokfield (yyvsp[-1].ttype, current_declspecs, (tree) ((void *)0));
    decl_attributes (&yyval.ttype,
       chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
    break;}
case 395:
{ yyval.ttype = grokfield (yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
    decl_attributes (&yyval.ttype,
       chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
    break;}
case 396:
{ yyval.ttype = grokfield ((tree) ((void *)0), current_declspecs, yyvsp[-1].ttype);
    decl_attributes (&yyval.ttype,
       chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ;
    break;}
case 398:
{ if (yyvsp[-2].ttype == global_trees[TI_ERROR_MARK])
      yyval.ttype = yyvsp[-2].ttype;
    else
      ((yyvsp[0].ttype)->common.chain) = yyvsp[-2].ttype, yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 399:
{ yyval.ttype = global_trees[TI_ERROR_MARK]; ;
    break;}
case 400:
{ yyval.ttype = build_enumerator (yyvsp[0].ttype, (tree) ((void *)0)); ;
    break;}
case 401:
{ yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 402:
{ pending_xref_error ();
    yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 403:
{ yyval.ttype = build_tree_list_stat(yyvsp[-1].ttype,yyvsp[0].ttype ); ;
    break;}
case 404:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 406:
{ yyval.ttype = build_tree_list_stat(build_tree_list_stat(current_declspecs,(tree) ((void *)0) ),all_prefix_attributes )
                           ; ;
    break;}
case 407:
{ yyval.ttype = build_tree_list_stat(build_tree_list_stat(current_declspecs,yyvsp[0].ttype ),all_prefix_attributes )
                           ; ;
    break;}
case 408:
{ yyval.ttype = build_tree_list_stat(build_tree_list_stat(current_declspecs,yyvsp[-1].ttype ),chainon (yyvsp[0].ttype, all_prefix_attributes) )
                                                     ; ;
    break;}
case 412:
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 413:
{ yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, (tree) ((void *)0)); ;
    break;}
case 414:
{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 415:
{ yyval.ttype = yyvsp[-2].ttype ? tree_cons_stat (yyvsp[-2].ttype,yyvsp[-1].ttype,(tree) ((void *)0) ) : yyvsp[-1].ttype; ;
    break;}
case 416:
{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, (tree) ((void *)0)); ;
    break;}
case 417:
{ yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 1); ;
    break;}
case 418:
{ yyval.ttype = build_nt (CALL_EXPR, (tree) ((void *)0), yyvsp[0].ttype, (tree) ((void *)0)); ;
    break;}
case 419:
{ yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, (tree) ((void *)0), 1); ;
    break;}
case 420:
{ yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 0, 0); ;
    break;}
case 421:
{ yyval.ttype = build_array_declarator ((tree) ((void *)0), yyvsp[-1].ttype, 0, 0); ;
    break;}
case 422:
{ yyval.ttype = build_array_declarator ((tree) ((void *)0), yyvsp[-2].ttype, 0, 1); ;
    break;}
case 423:
{ yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 1, 0); ;
    break;}
case 424:
{ yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-3].ttype, 1, 0); ;
    break;}
case 427:
{
    error ("label at end of compound statement");
  ;
    break;}
case 435:
{
    if ((pedantic && !flag_isoc99)
        || warn_declaration_after_statement)
      pedwarn_c90 ("ISO C90 forbids mixed declarations and code");
  ;
    break;}
case 450:
{ yyval.ttype = c_begin_compound_stmt (flag_isoc99); ;
    break;}
case 452:
{ if (pedantic)
      pedwarn ("ISO C forbids label declarations"); ;
    break;}
case 455:
{ tree link;
    for (link = yyvsp[-1].ttype; link; link = ((link)->common.chain))
      {
        tree label = declare_label (((link)->list.value1));
        ((label)->common.lang_flag_1) = 1;
        add_stmt (build_stmt (DECL_EXPR, label));
      }
  ;
    break;}
case 456:
{ add_stmt (yyvsp[0].ttype); ;
    break;}
case 458:
{ yyval.ttype = c_begin_compound_stmt (1); ;
    break;}
case 463:
{ if (current_function_decl == 0)
      {
        error ("braced-group within expression allowed only inside a function");
        goto yyerrlab1;
      }
    yyval.ttype = c_begin_stmt_expr ();
  ;
    break;}
case 464:
{ yyval.ttype = c_end_compound_stmt (yyvsp[-1].ttype, 1); ;
    break;}
case 465:
{ if (yychar == -2)
      yychar = yylex ();
    yyval.location = input_location; ;
    break;}
case 468:
{ yyval.ttype = c_end_compound_stmt (yyvsp[-2].ttype, flag_isoc99); ;
    break;}
case 469:
{
    if (yyvsp[0].ttype && (strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (yyvsp[0].ttype)->common.code))])) != 0))
      annotate_with_locus (yyvsp[0].ttype, yyvsp[-1].location);
  ;
    break;}
case 470:
{ if (yyvsp[0].ttype) annotate_with_locus (yyvsp[0].ttype, yyvsp[-1].location); ;
    break;}
case 471:
{ yyval.ttype = lang_hooks.truthvalue_conversion (yyvsp[0].ttype);
    if ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (yyval.ttype)->common.code))])) != 0))
      annotate_with_locus (yyval.ttype, yyvsp[-1].location); ;
    break;}
case 472:
{ yyval.ttype = c_end_compound_stmt (yyvsp[-2].ttype, flag_isoc99); ;
    break;}
case 473:
{ if (extra_warnings)
      add_stmt (build (NOP_EXPR, (tree) ((void *)0), (tree) ((void *)0)));
    yyval.ttype = c_end_compound_stmt (yyvsp[-2].ttype, flag_isoc99); ;
    break;}
case 475:
{ c_finish_if_stmt (yyvsp[-6].location, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, 1);
    add_stmt (c_end_compound_stmt (yyvsp[-7].ttype, flag_isoc99)); ;
    break;}
case 476:
{ c_finish_if_stmt (yyvsp[-6].location, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, 0);
    add_stmt (c_end_compound_stmt (yyvsp[-7].ttype, flag_isoc99)); ;
    break;}
case 477:
{ c_finish_if_stmt (yyvsp[-4].location, yyvsp[-2].ttype, yyvsp[0].ttype, ((void *)0), 1);
    add_stmt (c_end_compound_stmt (yyvsp[-5].ttype, flag_isoc99)); ;
    break;}
case 478:
{ c_finish_if_stmt (yyvsp[-4].location, yyvsp[-2].ttype, yyvsp[0].ttype, ((void *)0), 0);
    add_stmt (c_end_compound_stmt (yyvsp[-5].ttype, flag_isoc99)); ;
    break;}
case 479:
{ yyval.ttype = c_break_label; c_break_label = ((void *)0); ;
    break;}
case 480:
{ yyval.ttype = c_cont_label; c_cont_label = ((void *)0); ;
    break;}
case 481:
{ c_finish_loop (yyvsp[-6].location, yyvsp[-4].ttype, ((void *)0), yyvsp[0].ttype, c_break_label,
     c_cont_label, 1);
    add_stmt (c_end_compound_stmt (yyvsp[-7].ttype, flag_isoc99));
    c_break_label = yyvsp[-2].ttype; c_cont_label = yyvsp[-1].ttype; ;
    break;}
case 482:
{ yyval.ttype = c_break_label; c_break_label = yyvsp[-3].ttype; ;
    break;}
case 483:
{ yyval.ttype = c_cont_label; c_cont_label = yyvsp[-3].ttype; ;
    break;}
case 484:
{ c_finish_loop (yyvsp[-10].location, yyvsp[-2].ttype, ((void *)0), yyvsp[-7].ttype, yyvsp[-5].ttype,
     yyvsp[-4].ttype, 0);
    add_stmt (c_end_compound_stmt (yyvsp[-11].ttype, flag_isoc99)); ;
    break;}
case 485:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 487:
{ c_finish_expr_stmt (yyvsp[-1].ttype); ;
    break;}
case 488:
{ check_for_loop_decls (); ;
    break;}
case 489:
{ if (yyvsp[0].ttype)
      {
        yyval.ttype = lang_hooks.truthvalue_conversion (yyvsp[0].ttype);
        if ((strchr ("<12ers", (tree_code_type[(int) (((enum tree_code) (yyval.ttype)->common.code))])) != 0))
   annotate_with_locus (yyval.ttype, yyvsp[-1].location);
      }
    else
      yyval.ttype = ((void *)0);
  ;
    break;}
case 490:
{ yyval.ttype = c_process_expr_stmt (yyvsp[0].ttype); ;
    break;}
case 491:
{ c_finish_loop (yyvsp[-7].location, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[0].ttype, c_break_label,
     c_cont_label, 1);
    add_stmt (c_end_compound_stmt (yyvsp[-10].ttype, flag_isoc99));
    c_break_label = yyvsp[-2].ttype; c_cont_label = yyvsp[-1].ttype; ;
    break;}
case 492:
{ yyval.ttype = c_start_case (yyvsp[-1].ttype); ;
    break;}
case 493:
{ c_finish_case (yyvsp[0].ttype);
    if (c_break_label)
      add_stmt (build (LABEL_EXPR, global_trees[TI_VOID_TYPE],
         c_break_label));
    c_break_label = yyvsp[-1].ttype;
    add_stmt (c_end_compound_stmt (yyvsp[-6].ttype, flag_isoc99)); ;
    break;}
case 494:
{ yyval.ttype = c_finish_expr_stmt (yyvsp[-1].ttype); ;
    break;}
case 495:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 496:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 497:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 498:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 499:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 500:
{ yyval.ttype = c_finish_bc_stmt (&c_break_label, 1); ;
    break;}
case 501:
{ yyval.ttype = c_finish_bc_stmt (&c_cont_label, 0); ;
    break;}
case 502:
{ yyval.ttype = c_finish_return ((tree) ((void *)0)); ;
    break;}
case 503:
{ yyval.ttype = c_finish_return (yyvsp[-1].ttype); ;
    break;}
case 505:
{ yyval.ttype = c_finish_goto_label (yyvsp[-1].ttype); ;
    break;}
case 506:
{ yyval.ttype = c_finish_goto_ptr (yyvsp[-1].ttype); ;
    break;}
case 507:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 508:
{ add_stmt (yyvsp[0].ttype); yyval.ttype = (tree) ((void *)0); ;
    break;}
case 510:
{ yyval.ttype = do_case (yyvsp[-1].ttype, (tree) ((void *)0)); ;
    break;}
case 511:
{ yyval.ttype = do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
    break;}
case 512:
{ yyval.ttype = do_case ((tree) ((void *)0), (tree) ((void *)0)); ;
    break;}
case 513:
{ tree label = define_label (yyvsp[-2].location, yyvsp[-3].ttype);
    if (label)
      {
        decl_attributes (&label, yyvsp[0].ttype, 0);
        yyval.ttype = add_stmt (build_stmt (LABEL_EXPR, label));
      }
    else
      yyval.ttype = (tree) ((void *)0);
  ;
    break;}
case 514:
{ yyval.ttype = yyvsp[-2].ttype; ;
    break;}
case 515:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 517:
{ assemble_asm (yyvsp[-1].ttype); ;
    break;}
case 518:
{;
    break;}
case 519:
{ yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-3].ttype); ;
    break;}
case 520:
{ yyval.ttype = build_asm_expr (yyvsp[0].ttype, 0, 0, 0, 1); ;
    break;}
case 521:
{ yyval.ttype = build_asm_expr (yyvsp[-2].ttype, yyvsp[0].ttype, 0, 0, 0); ;
    break;}
case 522:
{ yyval.ttype = build_asm_expr (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, 0, 0); ;
    break;}
case 523:
{ yyval.ttype = build_asm_expr (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, 0); ;
    break;}
case 524:
{ yyval.ttype = 0; ;
    break;}
case 525:
{ if (yyvsp[0].ttype != ridpointers[RID_VOLATILE])
      {
        warning ("%E qualifier ignored on asm", yyvsp[0].ttype);
        yyval.ttype = 0;
      }
    else
      yyval.ttype = yyvsp[0].ttype;
  ;
    break;}
case 526:
{ yyval.ttype = (tree) ((void *)0); ;
    break;}
case 529:
{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 530:
{ yyval.ttype = build_tree_list_stat(build_tree_list_stat((tree) ((void *)0),yyvsp[-5].ttype ),yyvsp[-2].ttype ); ;
    break;}
case 531:
{ yyvsp[-7].ttype = build_string1 (((yyvsp[-7].ttype)->identifier.id.len),
         ((const char *) (yyvsp[-7].ttype)->identifier.id.str));
    yyval.ttype = build_tree_list_stat(build_tree_list_stat(yyvsp[-7].ttype,yyvsp[-5].ttype ),yyvsp[-2].ttype ); ;
    break;}
case 532:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,(tree) ((void *)0) ); ;
    break;}
case 533:
{ yyval.ttype = tree_cons_stat ((tree) ((void *)0),yyvsp[0].ttype,yyvsp[-2].ttype ); ;
    break;}
case 534:
{ c_lex_string1_translate = 0; ;
    break;}
case 535:
{ c_lex_string1_translate = 1; ;
    break;}
case 536:
{ push_scope ();
    declare_parm_level (); ;
    break;}
case 537:
{ yyval.ttype = yyvsp[0].ttype;
    pop_scope (); ;
    break;}
case 539:
{ mark_forward_parm_decls (); ;
    break;}
case 540:
{
                            ;
    break;}
case 541:
{ yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 542:
{ yyval.ttype = make_node_stat (TREE_LIST ); ;
    break;}
case 543:
{ yyval.ttype = make_node_stat (TREE_LIST ); ;
    break;}
case 544:
{ yyval.ttype = make_node_stat (TREE_LIST );
    ((yyval.ttype)->common.chain) = global_trees[TI_ERROR_MARK];
    error ("ISO C requires a named argument before `...'");
  ;
    break;}
case 545:
{ yyval.ttype = get_parm_info ( 0); ;
    break;}
case 546:
{ yyval.ttype = get_parm_info ( 1); ;
    break;}
case 547:
{ push_parm_decl (yyvsp[0].ttype); ;
    break;}
case 548:
{ push_parm_decl (yyvsp[0].ttype); ;
    break;}
case 549:
{ yyval.ttype = build_tree_list_stat(build_tree_list_stat(current_declspecs,yyvsp[-1].ttype ),chainon (yyvsp[0].ttype, all_prefix_attributes) )
                                                     ;
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 550:
{ yyval.ttype = build_tree_list_stat(build_tree_list_stat(current_declspecs,yyvsp[-1].ttype ),chainon (yyvsp[0].ttype, all_prefix_attributes) )
                                                     ;
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 551:
{ yyval.ttype = yyvsp[0].ttype;
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 552:
{ yyval.ttype = build_tree_list_stat(build_tree_list_stat(current_declspecs,yyvsp[-1].ttype ),chainon (yyvsp[0].ttype, all_prefix_attributes) )
                                                     ;
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 553:
{ yyval.ttype = yyvsp[0].ttype;
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 554:
{ yyval.ttype = build_tree_list_stat(build_tree_list_stat(current_declspecs,yyvsp[-1].ttype ),chainon (yyvsp[0].ttype, all_prefix_attributes) )
                                                     ;
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 555:
{ yyval.ttype = build_tree_list_stat(build_tree_list_stat(current_declspecs,yyvsp[-1].ttype ),chainon (yyvsp[0].ttype, all_prefix_attributes) )
                                                     ;
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 556:
{ yyval.ttype = yyvsp[0].ttype;
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 557:
{ yyval.ttype = build_tree_list_stat(build_tree_list_stat(current_declspecs,yyvsp[-1].ttype ),chainon (yyvsp[0].ttype, all_prefix_attributes) )
                                                     ;
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 558:
{ yyval.ttype = yyvsp[0].ttype;
    do { current_declspecs = ((declspec_stack)->list.value1); prefix_attributes = ((((declspec_stack)->list.purpose))->list.purpose); all_prefix_attributes = ((((declspec_stack)->list.purpose))->list.value1); declspec_stack = ((declspec_stack)->common.chain); } while (0); ;
    break;}
case 559:
{ prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype);
    all_prefix_attributes = prefix_attributes; ;
    break;}
case 560:
{ push_scope ();
    declare_parm_level (); ;
    break;}
case 561:
{ yyval.ttype = yyvsp[0].ttype;
    pop_scope (); ;
    break;}
case 563:
{ tree t;
    for (t = yyvsp[-1].ttype; t; t = ((t)->common.chain))
      if (((t)->list.value1) == (tree) ((void *)0))
        error ("`...' in old-style identifier list");
    yyval.ttype = tree_cons_stat ((tree) ((void *)0),(tree) ((void *)0),yyvsp[-1].ttype );
    if (yyvsp[-3].ttype != 0
        && (((enum tree_code) (yyval.ttype)->common.code) != TREE_LIST
     || ((yyval.ttype)->list.purpose) == 0
     || ((enum tree_code) (((yyval.ttype)->list.purpose))->common.code) != PARM_DECL))
      { yyerror ("syntax error"); goto yyerrlab1; };
  ;
    break;}
case 564:
{ yyval.ttype = build_tree_list_stat((tree) ((void *)0),yyvsp[0].ttype ); ;
    break;}
case 565:
{ yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list_stat((tree) ((void *)0),yyvsp[0].ttype )); ;
    break;}
case 566:
{ yyval.ttype = build_tree_list_stat((tree) ((void *)0),yyvsp[0].ttype ); ;
    break;}
case 567:
{ yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list_stat((tree) ((void *)0),yyvsp[0].ttype )); ;
    break;}
case 568:
{ yyval.itype = (pedantic | (warn_pointer_arith << 1) | (warn_traditional << 2) | (flag_iso << 3));
    pedantic = 0;
    warn_pointer_arith = 0;
    warn_traditional = 0;
    flag_iso = 0; ;
    break;}
}
  yyvsp -= yylen;
  yyssp -= yylen;
  if (yydebug)
    {
      short *yyssp1 = yyss - 1;
      fprintf (stderr, "state stack1 now");
      while (yyssp1 != yyssp)
 fprintf (stderr, " %d", *++yyssp1);
      fprintf (stderr, "\n");
    }
  *++yyvsp = yyval;
  yyn = yyr1[yyn];
  yystate = yypgoto[yyn - 98] + *yyssp;
  if (yystate >= 0 && yystate <= 3344 && yycheck[yystate] == *yyssp)
    yystate = yytable[yystate];
  else
    yystate = yydefgoto[yyn - 98];
  goto yynewstate;
yyerrlab:
  if (!yyerrstatus)
    {
      ++yynerrs;
 yyerror ("parse error");
    }
  goto yyerrlab1;
yyerrlab1:
  if (yyerrstatus == 3)
    {
      if (yychar == 0)
 goto yyabortlab;
      do { if (yydebug) fprintf (stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); } while (0)
                              ;
      yychar = -2;
    }
  yyerrstatus = 3;
  goto yyerrhandle;
yyerrdefault:
yyerrpop:
  if (yyssp == yyss)
    goto yyabortlab;
  yyvsp--;
  yystate = *--yyssp;
  if (yydebug)
    {
      short *yyssp1 = yyss - 1;
      fprintf (stderr, "Error: state stack1 now");
      while (yyssp1 != yyssp)
 fprintf (stderr, " %d", *++yyssp1);
      fprintf (stderr, "\n");
    }
yyerrhandle:
  yyn = yypact[yystate];
  if (yyn == -32768)
    goto yyerrdefault;
  yyn += 1;
  if (yyn < 0 || yyn > 3344 || yycheck[yyn] != 1)
    goto yyerrdefault;
  yyn = yytable[yyn];
  if (yyn < 0)
    {
      if (yyn == -32768)
 goto yyerrpop;
      yyn = -yyn;
      goto yyreduce;
    }
  else if (yyn == 0)
    goto yyerrpop;
  if (yyn == 925)
    goto yyacceptlab;
  do { if (yydebug) fprintf (stderr, "Shifting error token, "); } while (0);
  *++yyvsp = yylval;
  yystate = yyn;
  goto yynewstate;
yyacceptlab:
  yyresult = 0;
  goto yyreturn;
yyabortlab:
  yyresult = 1;
  goto yyreturn;
yyreturn:
  return yyresult;
}
static enum cpp_ttype last_token;
struct resword
{
  const char *word;
  unsigned int rid : 16;
  unsigned int disable : 16;
};
static const struct resword reswords[] =
{
  { "_Bool", RID_BOOL, 0 },
  { "_Complex", RID_COMPLEX, 0 },
  { "__FUNCTION__", RID_FUNCTION_NAME, 0 },
  { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 },
  { "__alignof", RID_ALIGNOF, 0 },
  { "__alignof__", RID_ALIGNOF, 0 },
  { "__asm", RID_ASM, 0 },
  { "__asm__", RID_ASM, 0 },
  { "__attribute", RID_ATTRIBUTE, 0 },
  { "__attribute__", RID_ATTRIBUTE, 0 },
  { "__builtin_choose_expr", RID_CHOOSE_EXPR, 0 },
  { "__builtin_offsetof", RID_OFFSETOF, 0 },
  { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, 0 },
  { "__builtin_va_arg", RID_VA_ARG, 0 },
  { "__complex", RID_COMPLEX, 0 },
  { "__complex__", RID_COMPLEX, 0 },
  { "__const", RID_CONST, 0 },
  { "__const__", RID_CONST, 0 },
  { "", RID_EXTENSION, 0 },
  { "__func__", RID_C99_FUNCTION_NAME, 0 },
  { "__imag", RID_IMAGPART, 0 },
  { "__imag__", RID_IMAGPART, 0 },
  { "__inline", RID_INLINE, 0 },
  { "__inline__", RID_INLINE, 0 },
  { "__label__", RID_LABEL, 0 },
  { "__ptrbase", RID_PTRBASE, 0 },
  { "__ptrbase__", RID_PTRBASE, 0 },
  { "__ptrextent", RID_PTREXTENT, 0 },
  { "__ptrextent__", RID_PTREXTENT, 0 },
  { "__ptrvalue", RID_PTRVALUE1, 0 },
  { "__ptrvalue__", RID_PTRVALUE1, 0 },
  { "__real", RID_REALPART, 0 },
  { "__real__", RID_REALPART, 0 },
  { "", RID_RESTRICT, 0 },
  { "__", RID_RESTRICT, 0 },
  { "__signed", RID_SIGNED, 0 },
  { "__signed__", RID_SIGNED, 0 },
  { "__thread", RID_THREAD, 0 },
  { "__typeof", RID_TYPEOF, 0 },
  { "__typeof__", RID_TYPEOF, 0 },
  { "__volatile", RID_VOLATILE, 0 },
  { "__volatile__", RID_VOLATILE, 0 },
  { "asm", RID_ASM, 0x02 },
  { "auto", RID_AUTO, 0 },
  { "break", RID_BREAK, 0 },
  { "case", RID_CASE, 0 },
  { "char", RID_CHAR, 0 },
  { "const", RID_CONST, 0 },
  { "continue", RID_CONTINUE, 0 },
  { "default", RID_DEFAULT, 0 },
  { "do", RID_DO, 0 },
  { "double", RID_DOUBLE, 0 },
  { "else", RID_ELSE, 0 },
  { "enum", RID_ENUM, 0 },
  { "extern", RID_EXTERN, 0 },
  { "float", RID_FLOAT, 0 },
  { "for", RID_FOR, 0 },
  { "goto", RID_GOTO, 0 },
  { "if", RID_IF, 0 },
  { "inline", RID_INLINE, 0x04 },
  { "int", RID_INT, 0 },
  { "long", RID_LONG, 0 },
  { "register", RID_REGISTER, 0 },
  { "restrict", RID_RESTRICT, 0x01 },
  { "return", RID_RETURN, 0 },
  { "short", RID_SHORT, 0 },
  { "signed", RID_SIGNED, 0 },
  { "sizeof", RID_SIZEOF, 0 },
  { "static", RID_STATIC, 0 },
  { "struct", RID_STRUCT, 0 },
  { "switch", RID_SWITCH, 0 },
  { "typedef", RID_TYPEDEF, 0 },
  { "typeof", RID_TYPEOF, 0x02 },
  { "union", RID_UNION, 0 },
  { "unsigned", RID_UNSIGNED, 0 },
  { "void", RID_VOID, 0 },
  { "volatile", RID_VOLATILE, 0 },
  { "while", RID_WHILE, 0 }
};
static const short rid_to_yy[RID_MAX] =
{
                   260,
                     261,
                 261,
                  262,
                   259,
                     259,
                    259,
                  261,
                   259,
                     262,
                   261,
                 259,
                     262,
                    261,
                   259,
                   0,
                    0,
                     0,
                   0,
                    0,
                262,
                 262,
                  262,
                   262,
                  262,
                   262,
                 261,
                 261,
                  261,
                   261,
                 261,
                 267,
                   268,
                  269,
                270,
                 271,
                  272,
                273,
                 274,
                   275,
                 276,
                    277,
                  278,
                     279,
                   280,
                 281,
                   266,
                 282,
                   283,
                    284,
                      285,
                   290,
                      286,
                     289,
                     288,
                  287,
                    294,
                      295,
                     293,
                          291,
                                292,
                           296,
                                 296,
                               296,
                 261,
                  0,
                  0,
                   0,
                    0,
                      0,
                     0,
                 0,
                  0,
                   0,
                  0,
                      0,
                 0,
                        297,
                     0,
                 0,
                  0,
                 0,
                 0,
                     0,
                   0,
                  0,
                      0,
                    0,
                      0,
                     0,
                 321,
                       315,
                    312,
                      322,
                      323,
                     314,
                        318,
                         319,
                       317,
                         320,
                         313,
                      324,
                    325,
                      326,
                        327,
                            328,
                         310,
                              311
};
static void
init_reswords (void)
{
  unsigned int i;
  tree id;
  int mask = (flag_isoc99 ? 0 : 0x01)
       | (flag_no_asm ? (flag_isoc99 ? 0x02 : 0x02|0x04) : 0);
  if (!(c_language & clk_objc))
     mask |= 0x08;
  ridpointers = ggc_calloc ((int) RID_MAX, sizeof (tree));
  for (i = 0; i < (sizeof reswords / sizeof (struct resword)); i++)
    {
      if (reswords[i].disable & mask)
 continue;
      id = get_identifier (reswords[i].word);
      (((struct c_common_identifier *) (id))->node.rid_code) = reswords[i].rid;
      ((id)->common.lang_flag_0) = 1;
      ridpointers [(int) reswords[i].rid] = id;
    }
}
static void
yyerror (const char *msgid)
{
  c_parse_error (msgid, last_token, yylval.ttype);
}
static int
yylexname (void)
{
  tree decl;
  if (((yylval.ttype)->common.lang_flag_0))
    {
      enum rid rid_code = (((struct c_common_identifier *) (yylval.ttype))->node.rid_code);
      {
 yylval.ttype = ridpointers[(int) rid_code];
 return rid_to_yy[(int) rid_code];
      }
    }
  decl = lookup_name (yylval.ttype);
  if (decl)
    {
      if (((enum tree_code) (decl)->common.code) == TYPE_DECL)
 return 258;
    }
  return 257;
}
static int
_yylex (void)
{
 get_next:
  last_token = c_lex (&yylval.ttype);
  switch (last_token)
    {
    case CPP_EQ: return '=';
    case CPP_NOT: return '!';
    case CPP_GREATER: yylval.code = GT_EXPR; return 302;
    case CPP_LESS: yylval.code = LT_EXPR; return 302;
    case CPP_PLUS: yylval.code = PLUS_EXPR; return '+';
    case CPP_MINUS: yylval.code = MINUS_EXPR; return '-';
    case CPP_MULT: yylval.code = MULT_EXPR; return '*';
    case CPP_DIV: yylval.code = TRUNC_DIV_EXPR; return '/';
    case CPP_MOD: yylval.code = TRUNC_MOD_EXPR; return '%';
    case CPP_AND: yylval.code = BIT_AND_EXPR; return '&';
    case CPP_OR: yylval.code = BIT_IOR_EXPR; return '|';
    case CPP_XOR: yylval.code = BIT_XOR_EXPR; return '^';
    case CPP_RSHIFT: yylval.code = RSHIFT_EXPR; return 304;
    case CPP_LSHIFT: yylval.code = LSHIFT_EXPR; return 303;
    case CPP_COMPL: return '~';
    case CPP_AND_AND: return 300;
    case CPP_OR_OR: return 299;
    case CPP_QUERY: return '?';
    case CPP_OPEN_PAREN: return '(';
    case CPP_EQ_EQ: yylval.code = EQ_EXPR; return 301;
    case CPP_NOT_EQ: yylval.code = NE_EXPR; return 301;
    case CPP_GREATER_EQ:yylval.code = GE_EXPR; return 302;
    case CPP_LESS_EQ: yylval.code = LE_EXPR; return 302;
    case CPP_PLUS_EQ: yylval.code = PLUS_EXPR; return 298;
    case CPP_MINUS_EQ: yylval.code = MINUS_EXPR; return 298;
    case CPP_MULT_EQ: yylval.code = MULT_EXPR; return 298;
    case CPP_DIV_EQ: yylval.code = TRUNC_DIV_EXPR; return 298;
    case CPP_MOD_EQ: yylval.code = TRUNC_MOD_EXPR; return 298;
    case CPP_AND_EQ: yylval.code = BIT_AND_EXPR; return 298;
    case CPP_OR_EQ: yylval.code = BIT_IOR_EXPR; return 298;
    case CPP_XOR_EQ: yylval.code = BIT_XOR_EXPR; return 298;
    case CPP_RSHIFT_EQ: yylval.code = RSHIFT_EXPR; return 298;
    case CPP_LSHIFT_EQ: yylval.code = LSHIFT_EXPR; return 298;
    case CPP_OPEN_SQUARE: return '[';
    case CPP_CLOSE_SQUARE: return ']';
    case CPP_OPEN_BRACE: return '{';
    case CPP_CLOSE_BRACE: return '}';
    case CPP_ELLIPSIS: return 265;
    case CPP_PLUS_PLUS: return 306;
    case CPP_MINUS_MINUS: return 307;
    case CPP_DEREF: return 309;
    case CPP_DOT: return '.';
    case CPP_COLON: ; return ':';
    case CPP_COMMA: ; return ',';
    case CPP_CLOSE_PAREN: ; return ')';
    case CPP_SEMICOLON: ; return ';';
    case CPP_EOF:
      return 0;
    case CPP_NAME:
      return yylexname ();
    case CPP_AT_NAME:
      return rid_to_yy [(int) (((struct c_common_identifier *) (yylval.ttype))->node.rid_code)];
    case CPP_NUMBER:
    case CPP_CHAR:
    case CPP_WCHAR:
      return 263;
    case CPP_STRING:
    case CPP_WSTRING1:
      return 264;
    case CPP_OBJC_STRING1:
      return 329;
    case CPP_SCOPE:
    case CPP_DEREF_STAR:
    case CPP_DOT_STAR:
    case CPP_MIN_EQ:
    case CPP_MAX_EQ:
    case CPP_MIN:
    case CPP_MAX:
    case CPP_HASH:
    case CPP_PASTE:
      error ("syntax error at '%s' token", cpp_type2name (last_token));
      goto get_next;
    default:
      fancy_abort ("c-parse.y", 2876, "?");
    }
}
static int
yylex (void)
{
  int r;
  timevar_push (TV_LEX);
  r = _yylex();
  timevar_pop (TV_LEX);
  return r;
}
static void
yyprint (FILE *file, int yychar, yystype yyl)
{
  tree t = yyl.ttype;
  fprintf (file, " [%s]", cpp_type2name (last_token));
  switch (yychar)
    {
    case 257:
    case 258:
    case 321:
    case 261:
    case 262:
    case 259:
    case 260:
      if (((const char *) (t)->identifier.id.str))
 fprintf (file, " `%s'", ((const char *) (t)->identifier.id.str));
      break;
    case 263:
      fprintf (file, " %s", mode_name[((((t)->common.type))->type.mode)]);
      if (((enum tree_code) (t)->common.code) == INTEGER_CST)
 {
   fputs_unlocked (" ", file);
   fprintf (file, "0x%lx%08lx",
     (((t)->int_cst.int_cst).high), (((t)->int_cst.int_cst).low));
 }
      break;
    }
}
void
c_parse_file (void)
{
  yyparse ();
  if (malloced_yyss)
    {
      free (malloced_yyss);
      free (malloced_yyvs);
      malloced_yyss = 0;
    }
}
const struct ggc_root_tab gt_ggc_r_gt_c_parse_h[] = {
  {
    &declspec_stack,
    1,
    sizeof (declspec_stack),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &all_prefix_attributes,
    1,
    sizeof (all_prefix_attributes),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &prefix_attributes,
    1,
    sizeof (prefix_attributes),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  {
    &current_declspecs,
    1,
    sizeof (current_declspecs),
    &gt_ggc_mx_lang_tree_node,
    &gt_pch_nx_lang_tree_node
  },
  { ((void *)0), 0, 0, ((void *)0), ((void *)0) }
};
